summaryrefslogtreecommitdiff
path: root/macros/latex/contrib
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib')
-rw-r--r--macros/latex/contrib/arraycols/arraycols.dtx148
-rw-r--r--macros/latex/contrib/arraycols/arraycols.ins4
-rw-r--r--macros/latex/contrib/arraycols/arraycols.pdfbin464654 -> 129129 bytes
-rw-r--r--macros/latex/contrib/babel-contrib/french/README.md4
-rw-r--r--macros/latex/contrib/babel-contrib/french/frenchb-doc.pdfbin190506 -> 208709 bytes
-rw-r--r--macros/latex/contrib/babel-contrib/french/frenchb-doc.tex156
-rw-r--r--macros/latex/contrib/babel-contrib/french/frenchb.dtx1331
-rw-r--r--macros/latex/contrib/babel-contrib/french/frenchb.pdfbin366313 -> 345330 bytes
-rw-r--r--macros/latex/contrib/babel-contrib/latvian/README.md10
-rw-r--r--macros/latex/contrib/babel-contrib/latvian/latvian.dtx18
-rw-r--r--macros/latex/contrib/babel-contrib/latvian/latvian.pdfbin267036 -> 282377 bytes
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/DEPENDS.txt2
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/README.md33
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/beamercolorthemerainbow.sty2
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/beamertheme-rainbow-doc-settings.sty199
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/beamertheme-rainbow-doc.pdfbin161174 -> 164420 bytes
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/beamertheme-rainbow-doc.tex164
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/DEPENDS.txt4
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/README.md31
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamerinnerthemetcolorbox.sty2
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamertheme-tcolorbox-doc-settings.sty199
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamertheme-tcolorbox-doc.pdfbin177469 -> 178055 bytes
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamertheme-tcolorbox-doc.tex198
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-publist/README3
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-publist/biblatex-publist.pdfbin411119 -> 412844 bytes
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-publist/biblatex-publist.tex29
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.bbx41
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.cbx4
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.dbx2
-rw-r--r--macros/latex/contrib/catppuccinpalette/README.md28
-rw-r--r--macros/latex/contrib/catppuccinpalette/catppuccinpalette.dtx422
-rw-r--r--macros/latex/contrib/catppuccinpalette/catppuccinpalette.ins57
-rw-r--r--macros/latex/contrib/catppuccinpalette/catppuccinpalette.pdfbin0 -> 212270 bytes
-rw-r--r--macros/latex/contrib/colorblind/ChangeLog7
-rw-r--r--macros/latex/contrib/colorblind/README.md23
-rw-r--r--macros/latex/contrib/colorblind/bib.bib43
-rw-r--r--macros/latex/contrib/colorblind/colorblind.sty398
-rw-r--r--macros/latex/contrib/colorblind/documentation.pdfbin0 -> 105258 bytes
-rw-r--r--macros/latex/contrib/colorblind/documentation.tex365
-rw-r--r--macros/latex/contrib/colortbl/colortbl-DE.pdfbin346445 -> 346722 bytes
-rw-r--r--macros/latex/contrib/colortbl/colortbl.dtx6
-rw-r--r--macros/latex/contrib/colortbl/colortbl.pdfbin312112 -> 312925 bytes
-rw-r--r--macros/latex/contrib/csvsimple/CHANGES.md12
-rw-r--r--macros/latex/contrib/csvsimple/README.md2
-rw-r--r--macros/latex/contrib/csvsimple/csvsimple-doc.sty6
-rw-r--r--macros/latex/contrib/csvsimple/csvsimple-example.pdfbin72044 -> 72044 bytes
-rw-r--r--macros/latex/contrib/csvsimple/csvsimple-example.tex2
-rw-r--r--macros/latex/contrib/csvsimple/csvsimple-l3.pdfbin937516 -> 951198 bytes
-rw-r--r--macros/latex/contrib/csvsimple/csvsimple-l3.sty12
-rw-r--r--macros/latex/contrib/csvsimple/csvsimple-l3.tex53
-rw-r--r--macros/latex/contrib/csvsimple/csvsimple-legacy.pdfbin690987 -> 690985 bytes
-rw-r--r--macros/latex/contrib/csvsimple/csvsimple-legacy.sty4
-rw-r--r--macros/latex/contrib/csvsimple/csvsimple-legacy.tex2
-rw-r--r--macros/latex/contrib/csvsimple/csvsimple.pdfbin295559 -> 295659 bytes
-rw-r--r--macros/latex/contrib/csvsimple/csvsimple.sty4
-rw-r--r--macros/latex/contrib/csvsimple/csvsimple.tex2
-rw-r--r--macros/latex/contrib/customenvs/doc/customenvs-doc-en.pdfbin182916 -> 183345 bytes
-rw-r--r--macros/latex/contrib/customenvs/doc/customenvs-doc-en.tex8
-rw-r--r--macros/latex/contrib/customenvs/doc/customenvs-doc-fr.pdfbin1399073 -> 1465447 bytes
-rw-r--r--macros/latex/contrib/customenvs/doc/customenvs-doc-fr.tex283
-rw-r--r--macros/latex/contrib/customenvs/doc/envtexo_exemples.tex158
-rw-r--r--macros/latex/contrib/customenvs/tex/customenvs.sty478
-rw-r--r--macros/latex/contrib/easybook/easybook.dtx353
-rw-r--r--macros/latex/contrib/easybook/easybook.pdfbin641249 -> 632955 bytes
-rw-r--r--macros/latex/contrib/easybook/easybook.tex433
-rw-r--r--macros/latex/contrib/elpres/README.md11
-rw-r--r--macros/latex/contrib/elpres/doc/elpres-example.pdfbin216833 -> 250623 bytes
-rw-r--r--macros/latex/contrib/elpres/doc/elpres-example.tex146
-rw-r--r--macros/latex/contrib/elpres/doc/elpres-manual.pdfbin161486 -> 118410 bytes
-rw-r--r--macros/latex/contrib/elpres/doc/elpres-manual.tex517
-rw-r--r--macros/latex/contrib/elpres/tex/elpres.cls13
-rw-r--r--macros/latex/contrib/els-cas-templates/README2
-rw-r--r--macros/latex/contrib/els-cas-templates/cas-common.sty11
-rw-r--r--macros/latex/contrib/els-cas-templates/cas-dc-sample.pdfbin0 -> 909164 bytes
-rw-r--r--macros/latex/contrib/els-cas-templates/cas-dc-sample.tex463
-rw-r--r--macros/latex/contrib/els-cas-templates/cas-dc-template.tex61
-rw-r--r--macros/latex/contrib/els-cas-templates/cas-dc.cls26
-rw-r--r--macros/latex/contrib/els-cas-templates/cas-model2-names.bst8
-rw-r--r--macros/latex/contrib/els-cas-templates/cas-refs.bib2
-rw-r--r--macros/latex/contrib/els-cas-templates/cas-sc-sample.pdfbin0 -> 956878 bytes
-rw-r--r--macros/latex/contrib/els-cas-templates/cas-sc-sample.tex457
-rw-r--r--macros/latex/contrib/els-cas-templates/cas-sc-template.tex62
-rw-r--r--macros/latex/contrib/els-cas-templates/cas-sc.cls11
-rw-r--r--macros/latex/contrib/els-cas-templates/doc/elsdoc-cas.pdfbin433973 -> 430989 bytes
-rw-r--r--macros/latex/contrib/els-cas-templates/doc/elsdoc-cas.tex6
-rw-r--r--macros/latex/contrib/els-cas-templates/doc/rvdtx.sty4
-rw-r--r--macros/latex/contrib/els-cas-templates/figs/cas-grabs.pdfbin0 -> 8354 bytes
-rw-r--r--macros/latex/contrib/els-cas-templates/figs/cas-munnar-2024.jpgbin0 -> 681950 bytes
-rw-r--r--macros/latex/contrib/els-cas-templates/figs/cas-pic1.pdfbin0 -> 2546 bytes
-rw-r--r--macros/latex/contrib/els-cas-templates/manifest.txt36
-rw-r--r--macros/latex/contrib/esindex/README.md4
-rw-r--r--macros/latex/contrib/esindex/esindex.pdfbin62539 -> 68921 bytes
-rw-r--r--macros/latex/contrib/esindex/esindex.sty37
-rw-r--r--macros/latex/contrib/esindex/esindex.tex8
-rw-r--r--macros/latex/contrib/fadingimage/README.md18
-rw-r--r--macros/latex/contrib/fadingimage/doc/fadingimage.pdfbin138677 -> 137070 bytes
-rw-r--r--macros/latex/contrib/fadingimage/doc/fadingimage.tex29
-rw-r--r--macros/latex/contrib/fadingimage/tex/fadingimage.sty52
-rw-r--r--macros/latex/contrib/fontscale/CHANGELOG.md26
-rw-r--r--macros/latex/contrib/fontscale/fontscale-manual.pdfbin117119 -> 117192 bytes
-rw-r--r--macros/latex/contrib/fontscale/fontscale-manual.tex28
-rw-r--r--macros/latex/contrib/fontscale/fontscale.sty549
-rw-r--r--macros/latex/contrib/frenchmath/frenchmath.dtx724
-rw-r--r--macros/latex/contrib/frenchmath/frenchmath.pdfbin580908 -> 864717 bytes
-rw-r--r--macros/latex/contrib/fvextra/CHANGELOG.md231
-rw-r--r--macros/latex/contrib/fvextra/fvextra.dtx210
-rw-r--r--macros/latex/contrib/fvextra/fvextra.ins4
-rw-r--r--macros/latex/contrib/fvextra/fvextra.pdfbin905185 -> 895911 bytes
-rw-r--r--macros/latex/contrib/huaz/README2
-rw-r--r--macros/latex/contrib/huaz/huaz.pdfbin323827 -> 371130 bytes
-rw-r--r--macros/latex/contrib/huaz/huaz.sty567
-rw-r--r--macros/latex/contrib/huaz/huaz.tex869
-rw-r--r--macros/latex/contrib/hvqrurl/Changes2
-rw-r--r--macros/latex/contrib/hvqrurl/doc/hvqrurl.pdfbin117382 -> 122767 bytes
-rw-r--r--macros/latex/contrib/hvqrurl/doc/hvqrurl.tex30
-rw-r--r--macros/latex/contrib/hvqrurl/latex/hvqrurl.sty39
-rw-r--r--macros/latex/contrib/hyperref/ChangeLog.txt15
-rw-r--r--macros/latex/contrib/hyperref/README.md2
-rw-r--r--macros/latex/contrib/hyperref/doc/backref.pdfbin206469 -> 206469 bytes
-rw-r--r--macros/latex/contrib/hyperref/doc/hyperref-doc.html2
-rw-r--r--macros/latex/contrib/hyperref/doc/hyperref-doc.pdfbin318424 -> 318600 bytes
-rw-r--r--macros/latex/contrib/hyperref/doc/hyperref-doc.tex2
-rw-r--r--macros/latex/contrib/hyperref/doc/hyperref-doc2.html4
-rw-r--r--macros/latex/contrib/hyperref/doc/hyperref-doc3.html4
-rw-r--r--macros/latex/contrib/hyperref/doc/hyperref-doc4.html4
-rw-r--r--macros/latex/contrib/hyperref/doc/hyperref-doc5.html4
-rw-r--r--macros/latex/contrib/hyperref/doc/hyperref-doc6.html4
-rw-r--r--macros/latex/contrib/hyperref/doc/hyperref-doc7.html4
-rw-r--r--macros/latex/contrib/hyperref/doc/hyperref-doc8.html4
-rw-r--r--macros/latex/contrib/hyperref/doc/hyperref-doc9.html4
-rw-r--r--macros/latex/contrib/hyperref/doc/hyperref-linktarget.pdfbin439699 -> 439109 bytes
-rw-r--r--macros/latex/contrib/hyperref/doc/hyperref.pdfbin2343152 -> 2341341 bytes
-rw-r--r--macros/latex/contrib/hyperref/doc/nameref.pdfbin172475 -> 172475 bytes
-rw-r--r--macros/latex/contrib/hyperref/doc/xr-hyper.pdfbin318270 -> 304784 bytes
-rw-r--r--macros/latex/contrib/hyperref/hluatex.dtx5
-rw-r--r--macros/latex/contrib/hyperref/hyperref-linktarget.dtx2
-rw-r--r--macros/latex/contrib/hyperref/hyperref-patches.dtx2
-rw-r--r--macros/latex/contrib/hyperref/hyperref.dtx81
-rw-r--r--macros/latex/contrib/hyperref/xr-hyper.dtx8
-rw-r--r--macros/latex/contrib/jsonparse/README.md9
-rw-r--r--macros/latex/contrib/jsonparse/jason/jason.pdf1662
-rw-r--r--macros/latex/contrib/jsonparse/jason/jason.svg67
-rw-r--r--macros/latex/contrib/jsonparse/jsonparse-doc.pdfbin414511 -> 578489 bytes
-rw-r--r--macros/latex/contrib/jsonparse/jsonparse-doc.tex30
-rw-r--r--macros/latex/contrib/jsonparse/jsonparse.sty95
-rw-r--r--macros/latex/contrib/l3backend/CHANGELOG.md393
-rw-r--r--macros/latex/contrib/l3backend/README.md16
-rw-r--r--macros/latex/contrib/l3backend/l3backend-basics.dtx497
-rw-r--r--macros/latex/contrib/l3backend/l3backend-box.dtx470
-rw-r--r--macros/latex/contrib/l3backend/l3backend-code.pdfbin908163 -> 0 bytes
-rw-r--r--macros/latex/contrib/l3backend/l3backend-code.tex63
-rw-r--r--macros/latex/contrib/l3backend/l3backend-color.dtx1356
-rw-r--r--macros/latex/contrib/l3backend/l3backend-draw.dtx1067
-rw-r--r--macros/latex/contrib/l3backend/l3backend-graphics.dtx931
-rw-r--r--macros/latex/contrib/l3backend/l3backend-header.dtx590
-rw-r--r--macros/latex/contrib/l3backend/l3backend-opacity.dtx353
-rw-r--r--macros/latex/contrib/l3backend/l3backend-pdf.dtx1775
-rw-r--r--macros/latex/contrib/l3backend/l3backend.ins168
-rw-r--r--macros/latex/contrib/l3build/CHANGELOG.md12
-rw-r--r--macros/latex/contrib/l3build/README.md2
-rw-r--r--macros/latex/contrib/l3build/l3build-aux.lua16
-rw-r--r--macros/latex/contrib/l3build/l3build-check.lua9
-rw-r--r--macros/latex/contrib/l3build/l3build-help.lua2
-rw-r--r--macros/latex/contrib/l3build/l3build-typesetting.lua5
-rw-r--r--macros/latex/contrib/l3build/l3build.1154
-rw-r--r--macros/latex/contrib/l3build/l3build.dtx8
-rwxr-xr-xmacros/latex/contrib/l3build/l3build.lua2
-rw-r--r--macros/latex/contrib/l3build/l3build.pdfbin750889 -> 750224 bytes
-rw-r--r--macros/latex/contrib/l3kernel/CHANGELOG.md1853
-rw-r--r--macros/latex/contrib/l3kernel/README.md96
-rw-r--r--macros/latex/contrib/l3kernel/expl3.dtx1798
-rw-r--r--macros/latex/contrib/l3kernel/expl3.pdfbin610363 -> 0 bytes
-rw-r--r--macros/latex/contrib/l3kernel/interface3.pdfbin1795605 -> 0 bytes
-rw-r--r--macros/latex/contrib/l3kernel/interface3.tex82
-rw-r--r--macros/latex/contrib/l3kernel/l3.ins181
-rw-r--r--macros/latex/contrib/l3kernel/l3basics.dtx3507
-rw-r--r--macros/latex/contrib/l3kernel/l3bitset.dtx629
-rw-r--r--macros/latex/contrib/l3kernel/l3bootstrap.dtx357
-rw-r--r--macros/latex/contrib/l3kernel/l3box.dtx2530
-rw-r--r--macros/latex/contrib/l3kernel/l3cctab.dtx958
-rw-r--r--macros/latex/contrib/l3kernel/l3clist.dtx2248
-rw-r--r--macros/latex/contrib/l3kernel/l3coffins.dtx2590
-rw-r--r--macros/latex/contrib/l3kernel/l3color.dtx3246
-rw-r--r--macros/latex/contrib/l3kernel/l3debug.dtx1479
-rw-r--r--macros/latex/contrib/l3kernel/l3deprecation.dtx688
-rw-r--r--macros/latex/contrib/l3kernel/l3doc.dtx4800
-rw-r--r--macros/latex/contrib/l3kernel/l3doc.pdfbin565279 -> 0 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3docstrip.dtx96
-rw-r--r--macros/latex/contrib/l3kernel/l3docstrip.pdfbin151266 -> 0 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3expan.dtx2398
-rw-r--r--macros/latex/contrib/l3kernel/l3file.dtx4019
-rw-r--r--macros/latex/contrib/l3kernel/l3flag.dtx396
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-assign.dtx316
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-aux.dtx1291
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-basics.dtx2181
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-convert.dtx630
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-expo.dtx1380
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-extended.dtx1275
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-functions.dtx288
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-logic.dtx750
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-parse.dtx2899
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-random.dtx629
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-round.dtx592
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-symbolic.dtx688
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-traps.dtx402
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-trig.dtx1700
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-types.dtx184
-rw-r--r--macros/latex/contrib/l3kernel/l3fp.dtx1663
-rw-r--r--macros/latex/contrib/l3kernel/l3fparray.dtx398
-rw-r--r--macros/latex/contrib/l3kernel/l3int.dtx2679
-rw-r--r--macros/latex/contrib/l3kernel/l3intarray.dtx943
-rw-r--r--macros/latex/contrib/l3kernel/l3kernel-functions.dtx714
-rw-r--r--macros/latex/contrib/l3kernel/l3keys.dtx3649
-rw-r--r--macros/latex/contrib/l3kernel/l3legacy.dtx161
-rw-r--r--macros/latex/contrib/l3kernel/l3luatex.dtx750
-rw-r--r--macros/latex/contrib/l3kernel/l3msg.dtx2443
-rw-r--r--macros/latex/contrib/l3kernel/l3names.dtx1568
-rw-r--r--macros/latex/contrib/l3kernel/l3news.pdfbin396222 -> 0 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news.tex187
-rw-r--r--macros/latex/contrib/l3kernel/l3news01.pdfbin122959 -> 0 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news01.tex102
-rw-r--r--macros/latex/contrib/l3kernel/l3news02.pdfbin150919 -> 0 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news02.tex153
-rw-r--r--macros/latex/contrib/l3kernel/l3news03.pdfbin148747 -> 0 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news03.tex128
-rw-r--r--macros/latex/contrib/l3kernel/l3news04.pdfbin114754 -> 0 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news04.tex123
-rw-r--r--macros/latex/contrib/l3kernel/l3news05.pdfbin112524 -> 0 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news05.tex64
-rw-r--r--macros/latex/contrib/l3kernel/l3news06.pdfbin151591 -> 0 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news06.tex141
-rw-r--r--macros/latex/contrib/l3kernel/l3news07.pdfbin128344 -> 0 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news07.tex111
-rw-r--r--macros/latex/contrib/l3kernel/l3news08.pdfbin163484 -> 0 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news08.tex170
-rw-r--r--macros/latex/contrib/l3kernel/l3news09.pdfbin250159 -> 0 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news09.tex1433
-rw-r--r--macros/latex/contrib/l3kernel/l3news10.pdfbin150302 -> 0 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news10.tex220
-rw-r--r--macros/latex/contrib/l3kernel/l3news11.pdfbin170102 -> 0 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news11.tex208
-rw-r--r--macros/latex/contrib/l3kernel/l3news12.pdfbin205020 -> 0 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news12.tex383
-rw-r--r--macros/latex/contrib/l3kernel/l3pdf.dtx531
-rw-r--r--macros/latex/contrib/l3kernel/l3prefixes.csv296
-rw-r--r--macros/latex/contrib/l3kernel/l3prefixes.pdfbin82720 -> 0 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3prefixes.tex91
-rw-r--r--macros/latex/contrib/l3kernel/l3prg.dtx1829
-rw-r--r--macros/latex/contrib/l3kernel/l3prop.dtx2602
-rw-r--r--macros/latex/contrib/l3kernel/l3quark.dtx1008
-rw-r--r--macros/latex/contrib/l3kernel/l3regex.dtx8205
-rw-r--r--macros/latex/contrib/l3kernel/l3seq.dtx2681
-rw-r--r--macros/latex/contrib/l3kernel/l3skip.dtx2600
-rw-r--r--macros/latex/contrib/l3kernel/l3sort.dtx1097
-rw-r--r--macros/latex/contrib/l3kernel/l3str-convert.dtx3566
-rw-r--r--macros/latex/contrib/l3kernel/l3str.dtx2226
-rw-r--r--macros/latex/contrib/l3kernel/l3styleguide.pdfbin296553 -> 0 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3styleguide.tex303
-rw-r--r--macros/latex/contrib/l3kernel/l3syntax-changes.pdfbin231402 -> 0 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3syntax-changes.tex190
-rw-r--r--macros/latex/contrib/l3kernel/l3sys.dtx1372
-rw-r--r--macros/latex/contrib/l3kernel/l3term-glossary.pdfbin242191 -> 0 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3term-glossary.tex180
-rw-r--r--macros/latex/contrib/l3kernel/l3text-case.dtx2336
-rw-r--r--macros/latex/contrib/l3kernel/l3text-map.dtx586
-rw-r--r--macros/latex/contrib/l3kernel/l3text-purify.dtx797
-rw-r--r--macros/latex/contrib/l3kernel/l3text.dtx1453
-rw-r--r--macros/latex/contrib/l3kernel/l3tl-analysis.dtx1660
-rw-r--r--macros/latex/contrib/l3kernel/l3tl-build.dtx355
-rw-r--r--macros/latex/contrib/l3kernel/l3tl.dtx3843
-rw-r--r--macros/latex/contrib/l3kernel/l3token.dtx2936
-rw-r--r--macros/latex/contrib/l3kernel/l3unicode.dtx1031
-rw-r--r--macros/latex/contrib/l3kernel/source3.pdfbin7574289 -> 0 bytes
-rw-r--r--macros/latex/contrib/l3kernel/source3.tex106
-rw-r--r--macros/latex/contrib/l3kernel/source3body.tex620
-rw-r--r--macros/latex/contrib/l3packages/CHANGELOG.md11
-rw-r--r--macros/latex/contrib/l3packages/README.md2
-rw-r--r--macros/latex/contrib/l3packages/l3keys2e-demo.tex2
-rw-r--r--macros/latex/contrib/l3packages/l3keys2e.dtx4
-rw-r--r--macros/latex/contrib/l3packages/l3keys2e.pdfbin412717 -> 412900 bytes
-rw-r--r--macros/latex/contrib/l3packages/xfp.dtx4
-rw-r--r--macros/latex/contrib/l3packages/xfp.pdfbin332422 -> 332573 bytes
-rw-r--r--macros/latex/contrib/l3packages/xparse.dtx4
-rw-r--r--macros/latex/contrib/l3packages/xparse.pdfbin551698 -> 551837 bytes
-rw-r--r--macros/latex/contrib/l3packages/xtemplate.dtx7
-rw-r--r--macros/latex/contrib/l3packages/xtemplate.pdfbin448862 -> 449003 bytes
-rw-r--r--macros/latex/contrib/latex2pydata/CHANGELOG.md39
-rw-r--r--macros/latex/contrib/latex2pydata/README13
-rw-r--r--macros/latex/contrib/latex2pydata/latex2pydata.dtx282
-rw-r--r--macros/latex/contrib/latex2pydata/latex2pydata.ins4
-rw-r--r--macros/latex/contrib/latex2pydata/latex2pydata.pdfbin292477 -> 296929 bytes
-rw-r--r--macros/latex/contrib/listings/listings-devel.pdfbin1451842 -> 1454841 bytes
-rw-r--r--macros/latex/contrib/listings/listings.dtx210
-rw-r--r--macros/latex/contrib/listings/listings.pdfbin1026586 -> 1028632 bytes
-rw-r--r--macros/latex/contrib/listings/lstdrvrs.dtx190
-rw-r--r--macros/latex/contrib/listings/lstdrvrs.pdfbin761854 -> 790575 bytes
-rw-r--r--macros/latex/contrib/litesolution/README.md20
-rw-r--r--macros/latex/contrib/litesolution/doc/figure/universe.pdfbin97187 -> 97170 bytes
-rw-r--r--macros/latex/contrib/litesolution/doc/figure/universe.tex10
-rw-r--r--macros/latex/contrib/litesolution/doc/litesolution.pdfbin628872 -> 276452 bytes
-rw-r--r--macros/latex/contrib/litesolution/doc/litesolution.tex129
-rw-r--r--macros/latex/contrib/litesolution/tex/litesolution.cls198
-rw-r--r--macros/latex/contrib/mathgreeks/README.md30
-rw-r--r--macros/latex/contrib/mathgreeks/mathgreeks.dtx1330
-rw-r--r--macros/latex/contrib/mathgreeks/mathgreeks.ins56
-rw-r--r--macros/latex/contrib/mathgreeks/mathgreeks.pdfbin0 -> 1716766 bytes
-rw-r--r--macros/latex/contrib/mismath/README.md8
-rw-r--r--macros/latex/contrib/mismath/mismath.dtx1097
-rw-r--r--macros/latex/contrib/mismath/mismath.ins2
-rw-r--r--macros/latex/contrib/mismath/mismath.pdfbin155495 -> 438746 bytes
-rw-r--r--macros/latex/contrib/msu-thesis/README.md18
-rw-r--r--macros/latex/contrib/msu-thesis/docs/msu-thesis.tex35
-rw-r--r--macros/latex/contrib/msu-thesis/msu-thesis.cls18
-rw-r--r--macros/latex/contrib/msu-thesis/msu-thesis.pdfbin114013 -> 117097 bytes
-rw-r--r--macros/latex/contrib/nicematrix/README.md2
-rw-r--r--macros/latex/contrib/nicematrix/nicematrix-code.dtx891
-rw-r--r--macros/latex/contrib/nicematrix/nicematrix-code.pdf52604
-rw-r--r--macros/latex/contrib/nicematrix/nicematrix-french.pdf10828
-rw-r--r--macros/latex/contrib/nicematrix/nicematrix-french.tex282
-rw-r--r--macros/latex/contrib/nicematrix/nicematrix.pdf11031
-rw-r--r--macros/latex/contrib/nicematrix/nicematrix.tex254
-rw-r--r--macros/latex/contrib/nmbib/Makefile6
-rw-r--r--macros/latex/contrib/nmbib/README2
-rw-r--r--macros/latex/contrib/nmbib/nmbib-sample.pdf (renamed from macros/latex/contrib/nmbib/nmsample.pdf)bin96763 -> 101693 bytes
-rw-r--r--macros/latex/contrib/nmbib/nmbib-sample.tex (renamed from macros/latex/contrib/nmbib/nmsample.tex)0
-rw-r--r--macros/latex/contrib/nmbib/nmbib.dtx4
-rw-r--r--macros/latex/contrib/nmbib/nmbib.pdfbin347244 -> 368243 bytes
-rw-r--r--macros/latex/contrib/nmbib/nmbibtex.1135
-rw-r--r--macros/latex/contrib/notebeamer/README.md25
-rw-r--r--macros/latex/contrib/notebeamer/doc/notebeamer.pdfbin1357620 -> 907049 bytes
-rw-r--r--macros/latex/contrib/notebeamer/doc/notebeamer.tex21
-rw-r--r--macros/latex/contrib/notebeamer/tex/notebeamer.sty6
-rw-r--r--macros/latex/contrib/osda/README.md4
-rw-r--r--macros/latex/contrib/osda/example.pngbin162079 -> 186840 bytes
-rw-r--r--macros/latex/contrib/osda/osda.dtx111
-rw-r--r--macros/latex/contrib/osda/osda.ins4
-rw-r--r--macros/latex/contrib/osda/osda.pdfbin192843 -> 219701 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md7
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/README.md2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx18
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdfbin988498 -> 988776 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx31
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdfbin710596 -> 711669 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx4
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdfbin602231 -> 602769 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx4
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdfbin515190 -> 515851 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdfbin558195 -> 558756 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdfbin541346 -> 541897 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdfbin542807 -> 543358 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdfbin537794 -> 538339 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdfbin593846 -> 594389 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx2
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdfbin516025 -> 516578 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx4
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdfbin753165 -> 753718 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx4
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdfbin567628 -> 568304 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx4
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdfbin685171 -> 685930 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx8
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdfbin847957 -> 848504 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx14
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdfbin529823 -> 530707 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx4
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdfbin427235 -> 428064 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx4
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdfbin586990 -> 587757 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx4
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdfbin434032 -> 434746 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx6
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdfbin463888 -> 464617 bytes
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty2
-rw-r--r--macros/latex/contrib/pdfpages/pdfpages.dtx29
-rw-r--r--macros/latex/contrib/pdfpages/pdfpages.pdfbin302167 -> 302686 bytes
-rw-r--r--macros/latex/contrib/ppt-slides/README.md9
-rw-r--r--macros/latex/contrib/ppt-slides/ppt-slides.dtx4
-rw-r--r--macros/latex/contrib/ppt-slides/ppt-slides.pdfbin935972 -> 935953 bytes
-rw-r--r--macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdfbin10283638 -> 10330568 bytes
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCArbreChiffre.tex200
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCCartesJeux.tex11
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCEcrireunQCM.tex10
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCPatronPaves.tex177
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCVisualisationMulDeci.tex135
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCVueCubes.tex99
-rw-r--r--macros/latex/contrib/profcollege/latex/ProfCollege.sty105
-rw-r--r--macros/latex/contrib/proflycee/doc/ProfLycee-doc.pdfbin1691169 -> 1783164 bytes
-rw-r--r--macros/latex/contrib/proflycee/doc/ProfLycee-doc.tex314
-rw-r--r--macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pyluatex.pdfbin73910 -> 74004 bytes
-rw-r--r--macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pyluatex.tex427
-rw-r--r--macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pythontex.tex242
-rw-r--r--macros/latex/contrib/proflycee/tex/ProfLycee.sty4
-rw-r--r--macros/latex/contrib/proflycee/tex/proflycee-tools-aleatoire.tex14
-rw-r--r--macros/latex/contrib/proflycee/tex/proflycee-tools-analyse.tex30
-rw-r--r--macros/latex/contrib/proflycee/tex/proflycee-tools-arithm.tex390
-rw-r--r--macros/latex/contrib/proflycee/tex/proflycee-tools-graphiques.tex189
-rw-r--r--macros/latex/contrib/proflycee/tex/proflycee-tools-probas.tex183
-rw-r--r--macros/latex/contrib/profmaquette/doc/ProfMaquette-doc.pdfbin288571 -> 298965 bytes
-rw-r--r--macros/latex/contrib/profmaquette/latex/ProfMaquette.sty314
-rw-r--r--macros/latex/contrib/reledmac/doc-include/migrate-mac.dtx2
-rw-r--r--macros/latex/contrib/reledmac/doc-more/page-typesetting-columns.pdfbin40793 -> 40800 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/1-criticalendnotes.pdfbin201564 -> 201562 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/1-criticalnotes.pdfbin197819 -> 197818 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/1-sidenotes.pdfbin295209 -> 295212 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/1-tabular.pdfbin285556 -> 285559 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/1-verses-doublenumbering.pdfbin198959 -> 198959 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/1-verses.pdfbin198794 -> 198796 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-antilabe.pdfbin210969 -> 210970 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-cross_referencing.pdfbin198304 -> 198303 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-footnote_spacing.pdfbin201443 -> 201445 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-glossaries.pdfbin285503 -> 285501 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-indexing.pdfbin278070 -> 278069 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-lemma_disambigution.pdfbin276219 -> 276219 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-line_numbers_in_header.pdfbin292434 -> 292435 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-linespacing.pdfbin286626 -> 286624 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-manuscript-apparatus.pdfbin288123 -> 288122 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-notes-width.pdfbin204669 -> 204669 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-one_series_per_pstart.pdfbin212242 -> 212239 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-performances.pdfbin284583 -> 284580 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-reledmac-right-to-left.pdfbin36940 -> 36941 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-subdivision-number-in-header.pdfbin310603 -> 310601 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-titles_in_line_numbering_with_notes.pdfbin288795 -> 288795 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-titles_not_in_line_numbering.pdfbin199918 -> 199919 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_columns_different_languages.pdfbin23442 -> 23444 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_mwe.pdfbin175650 -> 175645 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_pages_different_languages_lualatex.pdfbin32047 -> 32049 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_same_page_number_in_both_side.pdfbin289211 -> 289211 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted-nomax.pdfbin200041 -> 200045 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted.pdfbin199278 -> 199281 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_default.pdfbin177110 -> 177110 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax-shifted.pdfbin199681 -> 199684 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax.pdfbin198615 -> 198615 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nosync.pdfbin198665 -> 198673 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_shifted.pdfbin198797 -> 198798 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column-continuous-numbering.pdfbin214377 -> 214375 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column.pdfbin210488 -> 210491 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_columns_alignment.pdfbin204974 -> 204973 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_columns_titles_in_line_numbering_with_notes.pdfbin298422 -> 298425 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_inside-outside-columns.pdfbin204015 -> 204015 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_one_series_per_pstart.pdfbin225555 -> 225554 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_pages_long_notes.pdfbin251002 -> 251039 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_pages_notes_leftpage.pdfbin202381 -> 202382 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_pages_paragraph_separator_between.pdfbin198565 -> 198565 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_pages_titles_in_line_numbering_with_notes.pdfbin302774 -> 302779 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_titles_not_in_line_numbering.pdfbin206955 -> 206948 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_verse_text_between.pdfbin194198 -> 194201 bytes
-rw-r--r--macros/latex/contrib/reledmac/migration.pdfbin368423 -> 368433 bytes
-rw-r--r--macros/latex/contrib/reledmac/reledmac.dtx29
-rw-r--r--macros/latex/contrib/reledmac/reledmac.pdfbin2159903 -> 2162033 bytes
-rw-r--r--macros/latex/contrib/reledmac/reledpar.dtx4
-rw-r--r--macros/latex/contrib/reledmac/reledpar.pdfbin1046923 -> 1041243 bytes
-rw-r--r--macros/latex/contrib/rigidnotation/README.md31
-rw-r--r--macros/latex/contrib/rigidnotation/rigidnotation.dtx507
-rw-r--r--macros/latex/contrib/rigidnotation/rigidnotation.ins41
-rw-r--r--macros/latex/contrib/rigidnotation/rigidnotation.pdfbin0 -> 273004 bytes
-rw-r--r--macros/latex/contrib/rpgicons/LICENSE415
-rw-r--r--macros/latex/contrib/rpgicons/README.md30
-rw-r--r--macros/latex/contrib/rpgicons/rpgicons-doc.pdfbin0 -> 500755 bytes
-rw-r--r--macros/latex/contrib/rpgicons/rpgicons-doc.tex868
-rw-r--r--macros/latex/contrib/rpgicons/rpgicons-l3.sty2025
-rw-r--r--macros/latex/contrib/rpgicons/rpgicons-pgf.sty2596
-rw-r--r--macros/latex/contrib/rpgicons/rpgicons.sty35
-rw-r--r--macros/latex/contrib/rub-kunstgeschichte/README.md11
-rw-r--r--macros/latex/contrib/rub-kunstgeschichte/rub-kunstgeschichte-example.pdfbin0 -> 36684 bytes
-rw-r--r--macros/latex/contrib/rub-kunstgeschichte/rub-kunstgeschichte.dtx192
-rw-r--r--macros/latex/contrib/rub-kunstgeschichte/rub-kunstgeschichte.ins70
-rw-r--r--macros/latex/contrib/rub-kunstgeschichte/rub-kunstgeschichte.pdfbin0 -> 232043 bytes
-rw-r--r--macros/latex/contrib/se2thesis/CHANGELOG.md38
-rw-r--r--macros/latex/contrib/se2thesis/se2colors.dtx7
-rw-r--r--macros/latex/contrib/se2thesis/se2fonts.dtx63
-rw-r--r--macros/latex/contrib/se2thesis/se2packages.dtx31
-rw-r--r--macros/latex/contrib/se2thesis/se2thesis-master-thesis-example.pdfbin232557 -> 232636 bytes
-rw-r--r--macros/latex/contrib/se2thesis/se2thesis.dtx10
-rw-r--r--macros/latex/contrib/se2thesis/se2thesis.ins6
-rw-r--r--macros/latex/contrib/se2thesis/se2thesis.pdfbin359300 -> 360486 bytes
-rw-r--r--macros/latex/contrib/se2thesis/se2thesis.tex2
-rw-r--r--macros/latex/contrib/siunitx/CHANGELOG.md9
-rw-r--r--macros/latex/contrib/siunitx/siunitx-code.pdfbin645251 -> 646201 bytes
-rw-r--r--macros/latex/contrib/siunitx/siunitx-quantity.dtx2
-rw-r--r--macros/latex/contrib/siunitx/siunitx.dtx2
-rw-r--r--macros/latex/contrib/siunitx/siunitx.pdfbin703738 -> 703731 bytes
-rw-r--r--macros/latex/contrib/skillicons/README.md15
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_AWS-Dark-eps-converted-to.pdfbin0 -> 4797 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_AWS-Dark.epsbin0 -> 3388 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_AWS-Light-eps-converted-to.pdfbin0 -> 4809 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_AWS-Light.epsbin0 -> 3398 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Ableton-Dark-eps-converted-to.pdfbin0 -> 2972 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Ableton-Dark.epsbin0 -> 1684 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Ableton-Light-eps-converted-to.pdf74
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Ableton-Light.epsbin0 -> 1692 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_ActivityPub-Dark-eps-converted-to.pdfbin0 -> 2597 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_ActivityPub-Dark.epsbin0 -> 1295 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_ActivityPub-Light-eps-converted-to.pdf74
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_ActivityPub-Light.epsbin0 -> 1293 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Actix-Dark-eps-converted-to.pdfbin0 -> 5045 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Actix-Dark.epsbin0 -> 3670 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Actix-Light-eps-converted-to.pdfbin0 -> 5059 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Actix-Light.epsbin0 -> 3681 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Adonis-eps-converted-to.pdfbin0 -> 2700 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Adonis.epsbin0 -> 1398 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_AfterEffects-eps-converted-to.pdfbin0 -> 3463 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_AfterEffects.epsbin0 -> 2172 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_AiScript-Dark-eps-converted-to.pdfbin0 -> 6362 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_AiScript-Dark.epsbin0 -> 5237 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_AiScript-Light-eps-converted-to.pdfbin0 -> 6346 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_AiScript-Light.epsbin0 -> 5219 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_AlpineJS-Dark-eps-converted-to.pdf76
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_AlpineJS-Dark.epsbin0 -> 1224 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_AlpineJS-Light-eps-converted-to.pdfbin0 -> 2522 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_AlpineJS-Light.epsbin0 -> 1221 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Anaconda-Dark-eps-converted-to.pdfbin0 -> 4610 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Anaconda-Dark.epsbin0 -> 3234 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Anaconda-Light-eps-converted-to.pdfbin0 -> 4609 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Anaconda-Light.epsbin0 -> 3236 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_AndroidStudio-Dark-eps-converted-to.pdfbin0 -> 4039 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_AndroidStudio-Dark.epsbin0 -> 2656 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_AndroidStudio-Light-eps-converted-to.pdfbin0 -> 4038 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_AndroidStudio-Light.epsbin0 -> 2656 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Angular-Dark-eps-converted-to.pdf76
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Angular-Dark.epsbin0 -> 1314 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Angular-Light-eps-converted-to.pdf75
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Angular-Light.epsbin0 -> 1315 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Ansible-eps-converted-to.pdfbin0 -> 3275 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Ansible.epsbin0 -> 1893 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Apollo-eps-converted-to.pdfbin0 -> 3733 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Apollo.epsbin0 -> 2141 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Apple-Dark-eps-converted-to.pdfbin0 -> 3431 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Apple-Dark.epsbin0 -> 2088 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Apple-Light-eps-converted-to.pdfbin0 -> 3428 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Apple-Light.epsbin0 -> 2087 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Appwrite-eps-converted-to.pdfbin0 -> 3524 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Appwrite.epsbin0 -> 2159 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Arch-Dark-eps-converted-to.pdfbin0 -> 6959 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Arch-Dark.epsbin0 -> 3511 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Arch-Light-eps-converted-to.pdfbin0 -> 6957 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Arch-Light.epsbin0 -> 3513 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Arduino-eps-converted-to.pdfbin0 -> 3877 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Arduino.epsbin0 -> 2535 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Astro-eps-converted-to.pdfbin0 -> 6185 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Astro.epsbin0 -> 3447 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Atom-eps-converted-to.pdfbin0 -> 4785 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Atom.epsbin0 -> 3181 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Audition-eps-converted-to.pdfbin0 -> 3301 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Audition.epsbin0 -> 1997 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_AutoCAD-Light.epsbin0 -> 1702 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_AutoCAD_Dark.epsbin0 -> 1702 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Autocad-Light-eps-converted-to.pdfbin0 -> 3024 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Azul-eps-converted-to.pdfbin0 -> 4443 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Azul.epsbin0 -> 2854 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Azure-Dark-eps-converted-to.pdfbin0 -> 7499 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Azure-Dark.epsbin0 -> 4703 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Azure-Light-eps-converted-to.pdfbin0 -> 7499 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Azure-Light.epsbin0 -> 4701 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_BSD-Dark-eps-converted-to.pdfbin0 -> 4603 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_BSD-Dark.epsbin0 -> 3382 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_BSD-Light-eps-converted-to.pdfbin0 -> 4606 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_BSD-Light.epsbin0 -> 3383 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Babel-eps-converted-to.pdfbin0 -> 28831 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Babel.epsbin0 -> 27068 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Bash-Dark-eps-converted-to.pdfbin0 -> 3644 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Bash-Dark.epsbin0 -> 2304 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Bash-Light-eps-converted-to.pdfbin0 -> 3658 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Bash-Light.epsbin0 -> 2316 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Bevy-Dark-eps-converted-to.pdfbin0 -> 4389 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Bevy-Dark.epsbin0 -> 3055 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Bevy-Light-eps-converted-to.pdfbin0 -> 13642 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Bevy-Light.epsbin0 -> 13057 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_BitBucket-Dark-eps-converted-to.pdf128
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_BitBucket-Dark.epsbin0 -> 1960 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_BitBucket-Light-eps-converted-to.pdfbin0 -> 3532 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_BitBucket-Light.epsbin0 -> 1957 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Blender-Dark-eps-converted-to.pdfbin0 -> 3601 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Blender-Dark.epsbin0 -> 2267 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Blender-Light-eps-converted-to.pdfbin0 -> 3605 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Blender-Light.epsbin0 -> 2265 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Bootstrap-eps-converted-to.pdf163
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Bootstrap.epsbin0 -> 2653 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Bun-Dark-eps-converted-to.pdfbin0 -> 5928 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Bun-Dark.epsbin0 -> 4558 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Bun-Light-eps-converted-to.pdfbin0 -> 5926 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Bun-Light.epsbin0 -> 4556 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_C-eps-converted-to.pdfbin0 -> 2698 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_C.epsbin0 -> 1383 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_CLion-Dark-eps-converted-to.pdfbin0 -> 5848 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_CLion-Dark.epsbin0 -> 4177 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_CLion-Light-eps-converted-to.pdfbin0 -> 5848 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_CLion-Light.epsbin0 -> 4173 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_CMake-Dark-eps-converted-to.pdf231
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_CMake-Dark.epsbin0 -> 3114 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_CMake-Light-eps-converted-to.pdf230
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_CMake-Light.epsbin0 -> 3111 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_CPP-eps-converted-to.pdfbin0 -> 2707 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_CPP.epsbin0 -> 1408 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_CS-eps-converted-to.pdfbin0 -> 2821 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_CS.epsbin0 -> 1517 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_CSS-eps-converted-to.pdf73
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_CSS.epsbin0 -> 1351 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Cassandra-Dark-eps-converted-to.pdfbin0 -> 12025 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Cassandra-Dark.epsbin0 -> 12030 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Cassandra-Light-eps-converted-to.pdfbin0 -> 12059 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Cassandra-Light.epsbin0 -> 12066 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Clojure-Dark-eps-converted-to.pdfbin0 -> 3589 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Clojure-Dark.epsbin0 -> 2234 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Clojure-Light-eps-converted-to.pdfbin0 -> 3592 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Clojure-Light.epsbin0 -> 2233 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Cloudflare-Dark-eps-converted-to.pdfbin0 -> 3288 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Cloudflare-Dark.epsbin0 -> 1951 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Cloudflare-Light-eps-converted-to.pdfbin0 -> 3287 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Cloudflare-Light.epsbin0 -> 1948 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_CodePen-Dark-eps-converted-to.pdfbin0 -> 2752 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_CodePen-Dark.epsbin0 -> 1435 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_CodePen-Light-eps-converted-to.pdfbin0 -> 2748 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_CodePen-Light.epsbin0 -> 1434 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_CoffeeScript-Dark-eps-converted-to.pdfbin0 -> 3558 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_CoffeeScript-Dark.epsbin0 -> 2228 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_CoffeeScript-Light-eps-converted-to.pdfbin0 -> 3570 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_CoffeeScript-Light.epsbin0 -> 2235 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Crystal-Dark-eps-converted-to.pdfbin0 -> 2682 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Crystal-Dark.epsbin0 -> 1363 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Crystal-Light-eps-converted-to.pdfbin0 -> 2712 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Crystal-Light.epsbin0 -> 1369 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Cypress-Dark-eps-converted-to.pdfbin0 -> 7506 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Cypress-Dark.epsbin0 -> 5053 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Cypress-Light-eps-converted-to.pdfbin0 -> 7506 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Cypress-Light.epsbin0 -> 5052 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_D3-Dark-eps-converted-to.pdfbin0 -> 2791 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_D3-Dark.epsbin0 -> 1480 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_D3-Light-eps-converted-to.pdfbin0 -> 2792 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_D3-Light.epsbin0 -> 1476 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_DENO-Dark-eps-converted-to.pdfbin0 -> 7375 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_DENO-Dark.epsbin0 -> 5916 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_DENO-Light-eps-converted-to.pdfbin0 -> 7374 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_DENO-Light.epsbin0 -> 5914 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Dart-Dark-eps-converted-to.pdfbin0 -> 3029 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Dart-Dark.epsbin0 -> 1702 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Dart-Light-eps-converted-to.pdfbin0 -> 3024 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Dart-Light.epsbin0 -> 1703 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Debian-Dark-eps-converted-to.pdfbin0 -> 4376 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Debian-Dark.epsbin0 -> 2984 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Debian-Light-eps-converted-to.pdfbin0 -> 4373 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Debian-Light.epsbin0 -> 2981 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_DevTo-Dark-eps-converted-to.pdf79
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_DevTo-Dark.epsbin0 -> 1486 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_DevTo-Light-eps-converted-to.pdfbin0 -> 2798 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_DevTo-Light.epsbin0 -> 1487 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Discord-eps-converted-to.pdfbin0 -> 3211 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Discord.epsbin0 -> 1865 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_DiscordBots-eps-converted-to.pdfbin0 -> 3264 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_DiscordBots.epsbin0 -> 1968 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_DiscordJS-Dark-eps-converted-to.pdfbin0 -> 4353 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_DiscordJS-Dark.epsbin0 -> 3005 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_DiscordJS-Light-eps-converted-to.pdfbin0 -> 4352 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_DiscordJS-Light.epsbin0 -> 3003 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Django-eps-converted-to.pdfbin0 -> 2775 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Django.epsbin0 -> 1460 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Docker-eps-converted-to.pdfbin0 -> 2664 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Docker.epsbin0 -> 1436 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_DotNet-eps-converted-to.pdfbin0 -> 2836 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_DotNet.epsbin0 -> 1522 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_DynamoDB-Dark-eps-converted-to.pdfbin0 -> 3082 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_DynamoDB-Dark.epsbin0 -> 1778 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_DynamoDB-Light-eps-converted-to.pdfbin0 -> 3082 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_DynamoDB-Light.epsbin0 -> 1778 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Eclipse-Dark-eps-converted-to.pdfbin0 -> 2331 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Eclipse-Dark.epsbin0 -> 2874 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Eclipse-Light-eps-converted-to.pdfbin0 -> 4531 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Eclipse-Light.epsbin0 -> 2874 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Elasticsearch-Dark-eps-converted-to.pdfbin0 -> 3129 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Elasticsearch-Dark.epsbin0 -> 1845 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Elasticsearch-Light-eps-converted-to.pdfbin0 -> 3130 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Elasticsearch-Light.epsbin0 -> 1843 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Electron-eps-converted-to.pdfbin0 -> 5479 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Electron.epsbin0 -> 4060 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Elixir-Dark-eps-converted-to.pdfbin0 -> 18746 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Elixir-Dark.epsbin0 -> 12298 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Elixir-Light-eps-converted-to.pdfbin0 -> 18745 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Elixir-Light.epsbin0 -> 12296 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Elysia-Dark-eps-converted-to.pdfbin0 -> 19140 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Elysia-Dark.epsbin0 -> 17600 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Elysia-Light-eps-converted-to.pdfbin0 -> 19138 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Elysia-Light.epsbin0 -> 17598 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Emacs-eps-converted-to.pdfbin0 -> 4010 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Emacs.epsbin0 -> 2463 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Ember-eps-converted-to.pdfbin0 -> 39149 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Ember.epsbin0 -> 40887 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Emotion-Dark-eps-converted-to.pdfbin0 -> 77591 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Emotion-Dark.epsbin0 -> 75345 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Emotion-Light-eps-converted-to.pdfbin0 -> 77585 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Emotion-Light.epsbin0 -> 75343 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_ExpressJS-Dark-eps-converted-to.pdfbin0 -> 3261 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_ExpressJS-Dark.epsbin0 -> 1922 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_ExpressJS-Light-eps-converted-to.pdfbin0 -> 3267 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_ExpressJS-Light.epsbin0 -> 1927 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_FastAPI-eps-converted-to.pdf76
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_FastAPI.epsbin0 -> 1233 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Fediverse-Dark-eps-converted-to.pdfbin0 -> 4502 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Fediverse-Dark.epsbin0 -> 2799 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Fediverse-Light-eps-converted-to.pdfbin0 -> 4502 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Fediverse-Light.epsbin0 -> 2802 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Figma-Dark-eps-converted-to.pdfbin0 -> 2754 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Figma-Dark.epsbin0 -> 1439 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Figma-Light-eps-converted-to.pdfbin0 -> 2750 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Figma-Light.epsbin0 -> 1438 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Firebase-Dark-eps-converted-to.pdfbin0 -> 32404 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Firebase-Dark.epsbin0 -> 16147 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Firebase-Light-eps-converted-to.pdfbin0 -> 32404 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Firebase-Light.epsbin0 -> 16147 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Flask-Dark-eps-converted-to.pdfbin0 -> 9035 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Flask-Dark.epsbin0 -> 7650 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Flask-Light-eps-converted-to.pdfbin0 -> 9035 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Flask-Light.epsbin0 -> 7650 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Flutter-Dark-eps-converted-to.pdfbin0 -> 2672 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Flutter-Dark.epsbin0 -> 1370 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Flutter-Light-eps-converted-to.pdf74
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Flutter-Light.epsbin0 -> 1370 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Forth-eps-converted-to.pdfbin0 -> 2765 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Forth.epsbin0 -> 1474 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Fortran-eps-converted-to.pdfbin0 -> 2815 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Fortran.epsbin0 -> 1513 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_GCP-Dark-eps-converted-to.pdfbin0 -> 3026 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_GCP-Dark.epsbin0 -> 1719 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_GCP-Light-eps-converted-to.pdfbin0 -> 3031 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_GCP-Light.epsbin0 -> 1715 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_GTK-Dark-eps-converted-to.pdfbin0 -> 2637 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_GTK-Dark.epsbin0 -> 1369 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_GTK-Light-eps-converted-to.pdf75
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_GTK-Light.epsbin0 -> 1365 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_GameMakerStudio-eps-converted-to.pdf72
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_GameMakerStudio.epsbin0 -> 1203 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Gatsby-eps-converted-to.pdfbin0 -> 2614 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Gatsby.epsbin0 -> 1306 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Gherkin-Dark-eps-converted-to.pdfbin0 -> 4552 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Gherkin-Dark.epsbin0 -> 3179 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Gherkin-Light-eps-converted-to.pdfbin0 -> 4556 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Gherkin-Light.epsbin0 -> 3181 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Git-eps-converted-to.pdfbin0 -> 3425 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Git.epsbin0 -> 2111 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_GitLab-Dark-eps-converted-to.pdfbin0 -> 2653 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_GitLab-Dark.epsbin0 -> 1360 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_GitLab-Light-eps-converted-to.pdfbin0 -> 2655 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_GitLab-Light.epsbin0 -> 1362 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Github-Dark-eps-converted-to.pdfbin0 -> 3546 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Github-Dark.epsbin0 -> 2216 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Github-Light-eps-converted-to.pdfbin0 -> 3553 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Github-Light.epsbin0 -> 2224 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_GithubActions-Dark-eps-converted-to.pdfbin0 -> 3241 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_GithubActions-Dark.epsbin0 -> 1935 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_GithubActions-Light-eps-converted-to.pdfbin0 -> 3239 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_GithubActions-Light.epsbin0 -> 1931 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Gmail-Dark-eps-converted-to.pdf76
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Gmail-Dark.epsbin0 -> 1379 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Gmail-Light-eps-converted-to.pdf75
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Gmail-Light.epsbin0 -> 1381 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_GoLang-eps-converted-to.pdfbin0 -> 3412 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_GoLang.epsbin0 -> 2138 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Godot-Dark-eps-converted-to.pdfbin0 -> 4080 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Godot-Dark.epsbin0 -> 2708 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Godot-Light-eps-converted-to.pdfbin0 -> 4079 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Godot-Light.epsbin0 -> 2705 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Gradle-Dark-eps-converted-to.pdfbin0 -> 3804 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Gradle-Dark.epsbin0 -> 2440 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Gradle-Light-eps-converted-to.pdfbin0 -> 3815 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Gradle-Light.epsbin0 -> 2452 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Grafana-Dark-eps-converted-to.pdfbin0 -> 6269 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Grafana-Dark.epsbin0 -> 4605 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Grafana-Light-eps-converted-to.pdfbin0 -> 6340 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Grafana-Light.eps216
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_GraphQL-Dark-eps-converted-to.pdfbin0 -> 3168 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_GraphQL-Dark.epsbin0 -> 1862 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_GraphQL-Light-eps-converted-to.pdfbin0 -> 3168 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_GraphQL-Light.epsbin0 -> 1864 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Gulp-eps-converted-to.pdfbin0 -> 3865 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Gulp.epsbin0 -> 2508 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_HTML-eps-converted-to.pdfbin0 -> 2606 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_HTML.epsbin0 -> 1311 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Haskell-Dark-eps-converted-to.pdfbin0 -> 2604 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Haskell-Dark.epsbin0 -> 1295 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Haskell-Light-eps-converted-to.pdf79
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Haskell-Light.epsbin0 -> 1323 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Haxe-Dark-eps-converted-to.pdfbin0 -> 2811 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Haxe-Dark.epsbin0 -> 1498 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Haxe-Light-eps-converted-to.pdfbin0 -> 2805 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Haxe-Light.epsbin0 -> 1493 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_HaxeFlixel-Dark-eps-converted-to.pdf73
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_HaxeFlixel-Dark.epsbin0 -> 1284 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_HaxeFlixel-Light-eps-converted-to.pdfbin0 -> 2600 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_HaxeFlixel-Light.epsbin0 -> 1286 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Heroku-eps-converted-to.pdfbin0 -> 2663 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Heroku.epsbin0 -> 1351 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Hibernate-Dark-eps-converted-to.pdf72
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Hibernate-Dark.epsbin0 -> 1285 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Hibernate-Light-eps-converted-to.pdfbin0 -> 2576 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Hibernate-Light.epsbin0 -> 1278 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Htmx-Dark-eps-converted-to.pdfbin0 -> 3648 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Htmx-Dark.epsbin0 -> 2267 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Htmx-Light-eps-converted-to.pdfbin0 -> 3657 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Htmx-Light.epsbin0 -> 2275 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_IPFS-Dark-eps-converted-to.pdfbin0 -> 4555 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_IPFS-Dark.epsbin0 -> 2828 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_IPFS-Light-eps-converted-to.pdfbin0 -> 4542 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_IPFS-Light.epsbin0 -> 2820 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Idea-Dark-eps-converted-to.pdfbin0 -> 9094 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Idea-Dark.epsbin0 -> 7585 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Idea-Light-eps-converted-to.pdfbin0 -> 9096 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Idea-Light.epsbin0 -> 7581 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Illustrator-eps-converted-to.pdfbin0 -> 3043 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Illustrator.epsbin0 -> 1716 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Instagram-eps-converted-to.pdfbin0 -> 7097 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Instagram.epsbin0 -> 4824 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_JQuery-eps-converted-to.pdfbin0 -> 8062 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_JQuery.epsbin0 -> 6356 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Java-Dark-eps-converted-to.pdfbin0 -> 3227 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Java-Dark.epsbin0 -> 1939 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Java-Light-eps-converted-to.pdfbin0 -> 3238 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Java-Light.epsbin0 -> 1944 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_JavaScript-eps-converted-to.pdfbin0 -> 2845 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_JavaScript.epsbin0 -> 1541 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Jenkins-Dark-eps-converted-to.pdfbin0 -> 10702 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Jenkins-Dark.epsbin0 -> 9466 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Jenkins-Light-eps-converted-to.pdfbin0 -> 10705 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Jenkins-Light.epsbin0 -> 9467 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Jest-eps-converted-to.pdfbin0 -> 4394 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Jest.epsbin0 -> 3044 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Julia-Dark-eps-converted-to.pdfbin0 -> 2682 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Julia-Dark.epsbin0 -> 1374 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Julia-Light-eps-converted-to.pdf76
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Julia-Light.epsbin0 -> 1381 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Kafka-eps-converted-to.pdfbin0 -> 3269 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Kafka.epsbin0 -> 1951 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Kali-Dark-eps-converted-to.pdfbin0 -> 7302 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Kali-Dark.epsbin0 -> 5357 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Kali-Light-eps-converted-to.pdfbin0 -> 7309 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Kali-Light.epsbin0 -> 5356 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Kotlin-Dark-eps-converted-to.pdf155
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Kotlin-Dark.epsbin0 -> 1857 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Kotlin-Light-eps-converted-to.pdf156
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Kotlin-Light.epsbin0 -> 1856 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Ktor-Dark-eps-converted-to.pdfbin0 -> 2557 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Ktor-Dark.epsbin0 -> 1254 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Ktor-Light-eps-converted-to.pdfbin0 -> 2554 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Ktor-Light.epsbin0 -> 1249 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Kubernetes-eps-converted-to.pdfbin0 -> 5422 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Kubernetes.epsbin0 -> 4033 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_LaTeX-Dark-eps-converted-to.pdfbin0 -> 8103 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_LaTeX-Dark.epsbin0 -> 6676 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_LaTeX-Light-eps-converted-to.pdfbin0 -> 8105 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_LaTeX-Light.epsbin0 -> 6670 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Laravel-Dark-eps-converted-to.pdfbin0 -> 4466 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Laravel-Dark.eps8539
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Laravel-Light-eps-converted-to.pdfbin0 -> 3824 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Laravel-Light.epsbin0 -> 2438 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Less-Dark-eps-converted-to.pdfbin0 -> 6272 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Less-Dark.epsbin0 -> 6733 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Less-Light-eps-converted-to.pdfbin0 -> 6273 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Less-Light.epsbin0 -> 6735 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_LinkedIn-eps-converted-to.pdfbin0 -> 2866 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_LinkedIn.epsbin0 -> 1545 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Linux-Dark-eps-converted-to.pdfbin0 -> 5071 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Linux-Dark.epsbin0 -> 3757 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Linux-Light-eps-converted-to.pdfbin0 -> 5074 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Linux-Light.epsbin0 -> 3756 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Lit-Dark-eps-converted-to.pdfbin0 -> 2555 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Lit-Dark.epsbin0 -> 1251 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Lit-Light-eps-converted-to.pdf75
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Lit-Light.epsbin0 -> 1244 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Lua-Dark-eps-converted-to.pdfbin0 -> 3355 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Lua-Dark.epsbin0 -> 2078 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Lua-Light-eps-converted-to.pdfbin0 -> 3356 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Lua-Light.epsbin0 -> 2076 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Markdown-Dark-eps-converted-to.pdfbin0 -> 2597 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Markdown-Dark.epsbin0 -> 1327 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Markdown-Light-eps-converted-to.pdfbin0 -> 2594 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Markdown-Light.epsbin0 -> 1326 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Mastodon-Dark-eps-converted-to.pdfbin0 -> 3030 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Mastodon-Dark.epsbin0 -> 1727 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Mastodon-Light-eps-converted-to.pdfbin0 -> 3029 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Mastodon-Light.epsbin0 -> 1729 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_MaterialUI-Dark-eps-converted-to.pdfbin0 -> 3943 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_MaterialUI-Dark.epsbin0 -> 2575 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_MaterialUI-Light-eps-converted-to.pdfbin0 -> 3944 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_MaterialUI-Light.epsbin0 -> 2575 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Matlab-Dark-eps-converted-to.pdfbin0 -> 5929 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Matlab-Dark.epsbin0 -> 4399 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Matlab-Light-eps-converted-to.pdfbin0 -> 5930 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Matlab-Light.epsbin0 -> 4391 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Maven-Dark-eps-converted-to.pdfbin0 -> 15567 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Maven-Dark.epsbin0 -> 14631 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Maven-Light-eps-converted-to.pdfbin0 -> 15567 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Maven-Light.epsbin0 -> 14631 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Mint-Dark-eps-converted-to.pdfbin0 -> 2929 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Mint-Dark.epsbin0 -> 1597 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Mint-Light-eps-converted-to.pdfbin0 -> 2929 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Mint-Light.epsbin0 -> 1598 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Misskey-Dark-eps-converted-to.pdfbin0 -> 3187 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Misskey-Dark.epsbin0 -> 1866 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Misskey-Light-eps-converted-to.pdfbin0 -> 3185 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Misskey-Light.epsbin0 -> 1866 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_MongoDB-eps-converted-to.pdfbin0 -> 2885 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_MongoDB.epsbin0 -> 1562 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_MySQL-Dark-eps-converted-to.pdfbin0 -> 4160 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_MySQL-Dark.epsbin0 -> 2808 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_MySQL-Light-eps-converted-to.pdfbin0 -> 4165 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_MySQL-Light.epsbin0 -> 2812 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_NeoVim-Dark-eps-converted-to.pdfbin0 -> 7063 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_NeoVim-Dark.epsbin0 -> 4396 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_NeoVim-Light-eps-converted-to.pdfbin0 -> 7062 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_NeoVim-Light.epsbin0 -> 4396 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_NestJS-Dark-eps-converted-to.pdfbin0 -> 7429 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_NestJS-Dark.epsbin0 -> 6050 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_NestJS-Light-eps-converted-to.pdfbin0 -> 7428 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_NestJS-Light.epsbin0 -> 6050 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Netlify-Dark-eps-converted-to.pdfbin0 -> 5998 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Netlify-Dark.epsbin0 -> 4248 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Netlify-Light-eps-converted-to.pdfbin0 -> 5997 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Netlify-Light.epsbin0 -> 4247 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_NextJS-Dark-eps-converted-to.pdfbin0 -> 3294 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_NextJS-Dark.epsbin0 -> 1953 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_NextJS-Light-eps-converted-to.pdfbin0 -> 3291 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_NextJS-Light.epsbin0 -> 1954 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Nginx-eps-converted-to.pdf72
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Nginx.epsbin0 -> 1334 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Nim-Dark-eps-converted-to.pdfbin0 -> 2940 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Nim-Dark.epsbin0 -> 1639 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Nim-Light-eps-converted-to.pdfbin0 -> 2937 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Nim-Light.epsbin0 -> 1635 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Nix-Dark-eps-converted-to.pdfbin0 -> 5949 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Nix-Dark.epsbin0 -> 4813 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Nix-Light-eps-converted-to.pdfbin0 -> 5945 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Nix-Light.epsbin0 -> 4810 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_NodeJS-Dark-eps-converted-to.pdfbin0 -> 3931 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_NodeJS-Dark.epsbin0 -> 2556 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_NodeJS-Light-eps-converted-to.pdfbin0 -> 3933 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_NodeJS-Light.epsbin0 -> 2553 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Notion-Dark-eps-converted-to.pdfbin0 -> 3241 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Notion-Dark.epsbin0 -> 1925 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Notion-Light-eps-converted-to.pdfbin0 -> 3243 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Notion-Light.epsbin0 -> 1925 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Npm-Dark-eps-converted-to.pdfbin0 -> 2641 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Npm-Dark.epsbin0 -> 1344 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Npm-Light-eps-converted-to.pdfbin0 -> 2644 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Npm-Light.epsbin0 -> 1346 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_NuxtJS-Dark-eps-converted-to.pdfbin0 -> 2901 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_NuxtJS-Dark.epsbin0 -> 1594 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_NuxtJS-Light-eps-converted-to.pdfbin0 -> 2907 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_NuxtJS-Light.epsbin0 -> 1591 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_OCaml-eps-converted-to.pdfbin0 -> 9685 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_OCaml.epsbin0 -> 3057 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Obsidian-Dark-eps-converted-to.pdfbin0 -> 25990 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Obsidian-Dark.epsbin0 -> 14873 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Obsidian-Light-eps-converted-to.pdfbin0 -> 25987 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Obsidian-Light.epsbin0 -> 14871 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Octave-Dark-eps-converted-to.pdfbin0 -> 3626 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Octave-Dark.epsbin0 -> 2104 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Octave-Light-eps-converted-to.pdfbin0 -> 3627 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Octave-Light.epsbin0 -> 2104 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_OpenCV-Dark-eps-converted-to.pdfbin0 -> 3499 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_OpenCV-Dark.epsbin0 -> 2199 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_OpenCV-Light-eps-converted-to.pdfbin0 -> 3500 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_OpenCV-Light.epsbin0 -> 2195 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_OpenShift-eps-converted-to.pdfbin0 -> 4281 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_OpenShift.epsbin0 -> 2913 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_OpenStack-Dark-eps-converted-to.pdf77
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_OpenStack-Dark.epsbin0 -> 1408 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_OpenStack-Light-eps-converted-to.pdf75
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_OpenStack-Light.epsbin0 -> 1407 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_PHP-Dark-eps-converted-to.pdfbin0 -> 3239 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_PHP-Dark.epsbin0 -> 1916 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_PHP-Light-eps-converted-to.pdfbin0 -> 3238 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_PHP-Light.epsbin0 -> 1917 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Perl-eps-converted-to.pdfbin0 -> 7822 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Perl.epsbin0 -> 6362 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Photoshop-eps-converted-to.pdfbin0 -> 3627 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Photoshop.epsbin0 -> 2277 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_PhpStorm-Dark-eps-converted-to.pdfbin0 -> 5691 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_PhpStorm-Dark.epsbin0 -> 4248 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_PhpStorm-Light-eps-converted-to.pdfbin0 -> 5691 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_PhpStorm-Light.epsbin0 -> 4248 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Pinia-Dark-eps-converted-to.pdfbin0 -> 5974 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Pinia-Dark.epsbin0 -> 4296 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Pinia-Light-eps-converted-to.pdfbin0 -> 5975 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Pinia-Light.epsbin0 -> 4296 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Pkl-Dark-eps-converted-to.pdfbin0 -> 3945 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Pkl-Dark.epsbin0 -> 2592 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Pkl-Light-eps-converted-to.pdfbin0 -> 3941 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Pkl-Light.epsbin0 -> 2590 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Plan9-Dark-eps-converted-to.pdfbin0 -> 115454 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Plan9-Dark.epsbin0 -> 112962 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Plan9-Light-eps-converted-to.pdfbin0 -> 115454 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Plan9-Light.epsbin0 -> 112965 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_PlanetScale-Dark-eps-converted-to.pdfbin0 -> 2585 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_PlanetScale-Dark.epsbin0 -> 1267 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_PlanetScale-Light-eps-converted-to.pdf76
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_PlanetScale-Light.epsbin0 -> 1255 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Pnpm-Dark-eps-converted-to.pdf74
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Pnpm-Dark.epsbin0 -> 1191 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Pnpm-Light-eps-converted-to.pdf74
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Pnpm-Light.epsbin0 -> 1192 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_PostgreSQL-Dark-eps-converted-to.pdfbin0 -> 3877 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_PostgreSQL-Dark.epsbin0 -> 2583 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_PostgreSQL-Light-eps-converted-to.pdfbin0 -> 4215 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_PostgreSQL-Light.epsbin0 -> 2960 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Postman-eps-converted-to.pdfbin0 -> 5334 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Postman.epsbin0 -> 3998 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Powershell-Dark-eps-converted-to.pdfbin0 -> 4935 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Powershell-Dark.epsbin0 -> 3255 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Powershell-Light-eps-converted-to.pdfbin0 -> 4937 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Powershell-Light.epsbin0 -> 3254 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Premiere-eps-converted-to.pdfbin0 -> 3267 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Premiere.epsbin0 -> 1937 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Prisma-eps-converted-to.pdfbin0 -> 2675 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Prisma.epsbin0 -> 1369 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Processing-Dark-eps-converted-to.pdf74
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Processing-Dark.epsbin0 -> 1262 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Processing-Light-eps-converted-to.pdf73
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Processing-Light.epsbin0 -> 1255 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Prometheus-eps-converted-to.pdfbin0 -> 2897 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Prometheus.epsbin0 -> 1582 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Pug-Dark-eps-converted-to.pdfbin0 -> 6871 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Pug-Dark.epsbin0 -> 5380 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Pug-Light-eps-converted-to.pdfbin0 -> 6883 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Pug-Light.epsbin0 -> 5388 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_PyCharm-Dark-eps-converted-to.pdfbin0 -> 5630 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_PyCharm-Dark.epsbin0 -> 4047 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_PyCharm-Light-eps-converted-to.pdfbin0 -> 5628 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_PyCharm-Light.epsbin0 -> 4046 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_PyTorch-Dark-eps-converted-to.pdfbin0 -> 2678 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_PyTorch-Dark.epsbin0 -> 1384 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_PyTorch-Light-eps-converted-to.pdf74
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_PyTorch-Light.epsbin0 -> 1383 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Python-Dark-eps-converted-to.pdfbin0 -> 3938 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Python-Dark.epsbin0 -> 2347 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Python-Light-eps-converted-to.pdfbin0 -> 3936 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Python-Light.epsbin0 -> 2344 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_QT-Dark-eps-converted-to.pdfbin0 -> 3060 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_QT-Dark.epsbin0 -> 1748 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_QT-Light-eps-converted-to.pdfbin0 -> 3059 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_QT-Light.epsbin0 -> 1747 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_R-Dark-eps-converted-to.pdfbin0 -> 3932 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_R-Dark.epsbin0 -> 2358 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_R-Light-eps-converted-to.pdfbin0 -> 3933 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_R-Light.epsbin0 -> 2359 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_ROS-Dark-eps-converted-to.pdfbin0 -> 2917 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_ROS-Dark.epsbin0 -> 1615 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_ROS-Light-eps-converted-to.pdfbin0 -> 2931 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_ROS-Light.epsbin0 -> 1625 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_RabbitMQ-Dark-eps-converted-to.pdfbin0 -> 2795 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_RabbitMQ-Dark.epsbin0 -> 1494 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_RabbitMQ-Light-eps-converted-to.pdf74
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_RabbitMQ-Light.epsbin0 -> 1494 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Rails-eps-converted-to.pdfbin0 -> 3347 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Rails.epsbin0 -> 2014 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_RaspberryPi-Dark-eps-converted-to.pdfbin0 -> 5476 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_RaspberryPi-Dark.epsbin0 -> 4091 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_RaspberryPi-Light-eps-converted-to.pdfbin0 -> 5478 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_RaspberryPi-Light.epsbin0 -> 4090 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_React-Dark-eps-converted-to.pdfbin0 -> 3081 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_React-Dark.epsbin0 -> 1789 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_React-Light-eps-converted-to.pdfbin0 -> 3082 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_React-Light.epsbin0 -> 1787 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_ReactiveX-Dark-eps-converted-to.pdfbin0 -> 10145 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_ReactiveX-Dark.epsbin0 -> 7340 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_ReactiveX-Light-eps-converted-to.pdfbin0 -> 10143 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_ReactiveX-Light.epsbin0 -> 7337 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_RedHat-Dark-eps-converted-to.pdfbin0 -> 2893 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_RedHat-Dark.epsbin0 -> 1584 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_RedHat-Light-eps-converted-to.pdfbin0 -> 2893 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_RedHat-Light.epsbin0 -> 1584 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Redis-Dark-eps-converted-to.pdfbin0 -> 3720 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Redis-Dark.epsbin0 -> 2401 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Redis-Light-eps-converted-to.pdfbin0 -> 3720 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Redis-Light.epsbin0 -> 2398 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Redux-eps-converted-to.pdfbin0 -> 4032 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Redux.eps8471
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Regex-Dark-eps-converted-to.pdfbin0 -> 3952 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Regex-Dark.epsbin0 -> 2614 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Regex-Light-eps-converted-to.pdfbin0 -> 3950 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Regex-Light.epsbin0 -> 2612 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Remix-Dark-eps-converted-to.pdfbin0 -> 3162 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Remix-Dark.epsbin0 -> 1569 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Remix-Light-eps-converted-to.pdf103
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Remix-Light.epsbin0 -> 1573 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Replit-Dark-eps-converted-to.pdfbin0 -> 2621 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Replit-Dark.epsbin0 -> 1323 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Replit-Light-eps-converted-to.pdf73
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Replit-Light.epsbin0 -> 1318 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Rider-Dark-eps-converted-to.pdfbin0 -> 4935 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Rider-Dark.epsbin0 -> 3339 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Rider-Light-eps-converted-to.pdfbin0 -> 4935 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Rider-Light.epsbin0 -> 3338 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_RobloxStudio-eps-converted-to.pdfbin0 -> 2527 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_RobloxStudio.epsbin0 -> 1220 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Rocket-eps-converted-to.pdfbin0 -> 6081 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Rocket.epsbin0 -> 4391 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_RollupJS-Dark-eps-converted-to.pdfbin0 -> 7977 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_RollupJS-Dark.epsbin0 -> 5649 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_RollupJS-Light-eps-converted-to.pdfbin0 -> 7979 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_RollupJS-Light.epsbin0 -> 5648 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Ruby-eps-converted-to.pdfbin0 -> 16451 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Ruby.epsbin0 -> 14774 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Rust-eps-converted-to.pdfbin0 -> 5956 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Rust.epsbin0 -> 4509 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_SQLite-eps-converted-to.pdfbin0 -> 15210 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_SQLite.epsbin0 -> 5041 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_SVG-Dark-eps-converted-to.pdfbin0 -> 3929 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_SVG-Dark.epsbin0 -> 2354 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_SVG-Light-eps-converted-to.pdfbin0 -> 3927 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_SVG-Light.epsbin0 -> 2356 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Sass-eps-converted-to.pdfbin0 -> 4841 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Sass.epsbin0 -> 3494 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Scala-Dark-eps-converted-to.pdfbin0 -> 3178 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Scala-Dark.epsbin0 -> 1875 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Scala-Light-eps-converted-to.pdfbin0 -> 3181 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Scala-Light.epsbin0 -> 1874 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_SciKitLearn-Light-eps-converted-to.pdfbin0 -> 5983 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_SciKitLearn-Light.epsbin0 -> 4618 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_ScikitLearn-Dark-eps-converted-to.pdfbin0 -> 5978 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_ScikitLearn-Dark.epsbin0 -> 4640 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Selenium-eps-converted-to.pdfbin0 -> 4429 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Selenium.epsbin0 -> 3043 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Sentry-eps-converted-to.pdfbin0 -> 3399 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Sentry.epsbin0 -> 2048 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Sequelize-Dark-eps-converted-to.pdfbin0 -> 3608 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Sequelize-Dark.epsbin0 -> 2290 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Sequelize-Light-eps-converted-to.pdfbin0 -> 3609 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Sequelize-Light.epsbin0 -> 2291 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Sketchup-Dark-eps-converted-to.pdf75
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Sketchup-Dark.epsbin0 -> 1332 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Sketchup-Light-eps-converted-to.pdf76
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Sketchup-Light.epsbin0 -> 1334 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_SolidJS-Dark-eps-converted-to.pdfbin0 -> 9174 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_SolidJS-Dark.epsbin0 -> 6368 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_SolidJS-Light-eps-converted-to.pdfbin0 -> 9175 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_SolidJS-Light.epsbin0 -> 6368 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Solidity-eps-converted-to.pdfbin0 -> 3098 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Solidity.epsbin0 -> 1375 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Spring-Dark-eps-converted-to.pdfbin0 -> 2968 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Spring-Dark.epsbin0 -> 1654 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Spring-Light-eps-converted-to.pdfbin0 -> 2971 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Spring-Light.epsbin0 -> 1653 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_StackOverflow-Dark-eps-converted-to.pdf75
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_StackOverflow-Dark.epsbin0 -> 1349 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_StackOverflow-Light-eps-converted-to.pdfbin0 -> 2662 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_StackOverflow-Light.epsbin0 -> 1348 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_StyledComponents-eps-converted-to.pdfbin0 -> 5455 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_StyledComponents.epsbin0 -> 3815 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Sublime-Dark-eps-converted-to.pdfbin0 -> 3643 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Sublime-Dark.epsbin0 -> 2114 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Sublime-Light-eps-converted-to.pdfbin0 -> 3644 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Sublime-Light.epsbin0 -> 2114 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Supabase-Dark-eps-converted-to.pdfbin0 -> 5322 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Supabase-Dark.epsbin0 -> 3040 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Supabase-Light-eps-converted-to.pdfbin0 -> 5324 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Supabase-Light.epsbin0 -> 3041 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Svelte-eps-converted-to.pdfbin0 -> 3552 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Svelte.epsbin0 -> 2219 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Swift-eps-converted-to.pdfbin0 -> 2842 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Swift.epsbin0 -> 1525 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Symfony-Dark-eps-converted-to.pdfbin0 -> 3513 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Symfony-Dark.epsbin0 -> 2161 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Symfony-Light-eps-converted-to.pdfbin0 -> 3526 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Symfony-Light.epsbin0 -> 2171 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_TailwindCSS-Dark-eps-converted-to.pdfbin0 -> 3262 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_TailwindCSS-Dark.epsbin0 -> 1723 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_TailwindCSS-Light-eps-converted-to.pdfbin0 -> 3263 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_TailwindCSS-Light.epsbin0 -> 1722 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Tauri-Dark-eps-converted-to.pdfbin0 -> 3660 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Tauri-Dark.epsbin0 -> 2335 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Tauri-Light-eps-converted-to.pdfbin0 -> 3663 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Tauri-Light.epsbin0 -> 2338 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_TensorFlow-Dark-eps-converted-to.pdfbin0 -> 2547 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_TensorFlow-Dark.epsbin0 -> 1242 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_TensorFlow-Light-eps-converted-to.pdfbin0 -> 2547 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_TensorFlow-Light.epsbin0 -> 1241 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Terraform-Dark-eps-converted-to.pdf75
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Terraform-Dark.epsbin0 -> 1271 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Terraform-Light-eps-converted-to.pdfbin0 -> 2579 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Terraform-Light.epsbin0 -> 1272 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_ThreeJS-Dark-eps-converted-to.pdfbin0 -> 2625 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_ThreeJS-Dark.epsbin0 -> 1347 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_ThreeJS-Light-eps-converted-to.pdfbin0 -> 2613 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_ThreeJS-Light.epsbin0 -> 1334 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Twitter-eps-converted-to.pdfbin0 -> 2853 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Twitter.epsbin0 -> 1539 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_TypeScript-eps-converted-to.pdfbin0 -> 3155 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_TypeScript.epsbin0 -> 1828 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Ubuntu-Dark-eps-converted-to.pdfbin0 -> 3218 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Ubuntu-Dark.epsbin0 -> 1913 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Ubuntu-Light-eps-converted-to.pdfbin0 -> 3214 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Ubuntu-Light.epsbin0 -> 1900 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Unity-Dark-eps-converted-to.pdfbin0 -> 3142 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Unity-Dark.epsbin0 -> 1813 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Unity-Light-eps-converted-to.pdfbin0 -> 3142 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Unity-Light.epsbin0 -> 1817 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_UnrealEngine-eps-converted-to.pdfbin0 -> 3486 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_UnrealEngine.epsbin0 -> 2148 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_V-Dark-eps-converted-to.pdf75
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_V-Dark.epsbin0 -> 1849 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_V-Light-eps-converted-to.pdfbin0 -> 2737 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_V-Light.epsbin0 -> 1850 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_VIM-Dark-eps-converted-to.pdfbin0 -> 2757 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_VIM-Dark.epsbin0 -> 1444 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_VIM-Light-eps-converted-to.pdfbin0 -> 2773 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_VIM-Light.epsbin0 -> 1485 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_VSCode-Dark-eps-converted-to.pdfbin0 -> 2849 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_VSCode-Dark.epsbin0 -> 1554 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_VSCode-Light-eps-converted-to.pdfbin0 -> 2851 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_VSCode-Light.epsbin0 -> 1556 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_VSCodium-Dark-eps-converted-to.pdfbin0 -> 16653 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_VSCodium-Dark.epsbin0 -> 2489 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_VSCodium-Light-eps-converted-to.pdfbin0 -> 16728 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_VSCodium-Light.eps142
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Vala-eps-converted-to.pdfbin0 -> 5183 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Vala.epsbin0 -> 3180 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Vercel-Dark-eps-converted-to.pdf72
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Vercel-Dark.epsbin0 -> 1154 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Vercel-Light-eps-converted-to.pdf72
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Vercel-Light.epsbin0 -> 1155 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_VisualStudio-Dark-eps-converted-to.pdfbin0 -> 17979 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_VisualStudio-Dark.epsbin0 -> 6904 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_VisualStudio-Light-eps-converted-to.pdfbin0 -> 17979 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_VisualStudio-Light.epsbin0 -> 6904 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Vite-Dark-eps-converted-to.pdfbin0 -> 4196 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Vite-Dark.epsbin0 -> 2586 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Vite-Light-eps-converted-to.pdfbin0 -> 4193 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Vite-Light.epsbin0 -> 2586 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Vitest-Dark-eps-converted-to.pdfbin0 -> 3741 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Vitest-Dark.epsbin0 -> 2101 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Vitest-Light-eps-converted-to.pdfbin0 -> 3745 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Vitest-Light.epsbin0 -> 2103 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_VueJS-Dark-eps-converted-to.pdf74
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_VueJS-Dark.epsbin0 -> 1240 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_VueJS-Light-eps-converted-to.pdfbin0 -> 2546 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_VueJS-Light.epsbin0 -> 1247 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Vuetify-Dark-eps-converted-to.pdfbin0 -> 2664 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Vuetify-Dark.epsbin0 -> 1350 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Vuetify-Light-eps-converted-to.pdf75
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Vuetify-Light.epsbin0 -> 1353 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_WebAssembly-eps-converted-to.pdfbin0 -> 2725 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_WebAssembly.epsbin0 -> 1427 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_WebStorm-Dark-eps-converted-to.pdfbin0 -> 4228 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_WebStorm-Dark.epsbin0 -> 2664 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_WebStorm-Light-eps-converted-to.pdfbin0 -> 4230 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_WebStorm-Light.epsbin0 -> 2664 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Webflow-eps-converted-to.pdfbin0 -> 2664 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Webflow.epsbin0 -> 1356 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Webpack-Dark-eps-converted-to.pdfbin0 -> 2753 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Webpack-Dark.epsbin0 -> 1448 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Webpack-Light-eps-converted-to.pdf75
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Webpack-Light.epsbin0 -> 1404 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_WindiCSS-Dark-eps-converted-to.pdf157
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_WindiCSS-Dark.epsbin0 -> 3352 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_WindiCSS-Light-eps-converted-to.pdfbin0 -> 3827 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_WindiCSS-Light.epsbin0 -> 3351 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Windows-Dark-eps-converted-to.pdfbin0 -> 2559 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Windows-Dark.epsbin0 -> 1253 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Windows-Light-eps-converted-to.pdfbin0 -> 2560 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Windows-Light.epsbin0 -> 1249 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Wordpress-eps-converted-to.pdfbin0 -> 3163 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Wordpress.epsbin0 -> 1835 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Workers-Dark-eps-converted-to.pdfbin0 -> 14551 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Workers-Dark.epsbin0 -> 9894 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Workers-Light-eps-converted-to.pdfbin0 -> 14552 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Workers-Light.epsbin0 -> 9894 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_XD-eps-converted-to.pdfbin0 -> 3582 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_XD.epsbin0 -> 2250 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Yarn-Dark-eps-converted-to.pdfbin0 -> 5113 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Yarn-Dark.epsbin0 -> 3684 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Yarn-Light-eps-converted-to.pdfbin0 -> 5113 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Yarn-Light.epsbin0 -> 3681 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Yew-Dark-eps-converted-to.pdfbin0 -> 2648 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Yew-Dark.epsbin0 -> 1364 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Yew-Light-eps-converted-to.pdf78
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Yew-Light.epsbin0 -> 1366 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Zig-Dark-eps-converted-to.pdfbin0 -> 2736 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Zig-Dark.epsbin0 -> 1437 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Zig-Light-eps-converted-to.pdfbin0 -> 2737 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_Zig-Light.epsbin0 -> 1437 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_p5js-eps-converted-to.pdfbin0 -> 3844 bytes
-rw-r--r--macros/latex/contrib/skillicons/skill-icons/skillicons_p5js.epsbin0 -> 2501 bytes
-rw-r--r--macros/latex/contrib/skillicons/skillicons.pdfbin0 -> 1447019 bytes
-rw-r--r--macros/latex/contrib/skillicons/skillicons.sty28
-rw-r--r--macros/latex/contrib/skillicons/skillicons.tex584
-rw-r--r--macros/latex/contrib/spbmark/spbmark.pdfbin95175 -> 91750 bytes
-rw-r--r--macros/latex/contrib/spbmark/spbmark.sty113
-rw-r--r--macros/latex/contrib/spbmark/spbmark.tex44
-rw-r--r--macros/latex/contrib/synthslant/LICENSE415
-rw-r--r--macros/latex/contrib/synthslant/Makefile302
-rw-r--r--macros/latex/contrib/synthslant/README.md64
-rw-r--r--macros/latex/contrib/synthslant/RELEASE-HOWTO.md51
-rw-r--r--macros/latex/contrib/synthslant/docs/index.md4
-rw-r--r--macros/latex/contrib/synthslant/docs/synthslant-gauge.pdfbin0 -> 181403 bytes
-rw-r--r--macros/latex/contrib/synthslant/docs/synthslant.pdfbin0 -> 796407 bytes
-rw-r--r--macros/latex/contrib/synthslant/synthslant.dtx5264
-rw-r--r--macros/latex/contrib/synthslant/synthslant.ins67
-rw-r--r--macros/latex/contrib/tblr-extras/README.md12
-rw-r--r--macros/latex/contrib/tblr-extras/tblr-extras-doc-EN.pdfbin26714 -> 29492 bytes
-rw-r--r--macros/latex/contrib/tblr-extras/tblr-extras-doc-EN.tex19
-rw-r--r--macros/latex/contrib/tblr-extras/tblr-extras.sty87
-rw-r--r--macros/latex/contrib/thuthesis/CHANGELOG.md14
-rw-r--r--macros/latex/contrib/thuthesis/thuthesis-author-year.bst24
-rw-r--r--macros/latex/contrib/thuthesis/thuthesis-bachelor.bst24
-rw-r--r--macros/latex/contrib/thuthesis/thuthesis-example.pdfbin408220 -> 407055 bytes
-rw-r--r--macros/latex/contrib/thuthesis/thuthesis-numeric.bst24
-rw-r--r--macros/latex/contrib/thuthesis/thuthesis.dtx25
-rw-r--r--macros/latex/contrib/thuthesis/thuthesis.pdfbin1188909 -> 1190791 bytes
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/README.md136
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-circle.tex8
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-ellipse.tex133
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-line.tex70
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-point.tex1
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-regular.tex2
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-triangle.tex225
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-examples.tex308
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-main.tex30
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-organization.tex3
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-presentation.tex3
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-structure.tex2
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-transfers.tex2
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-transferts.tex150
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/tkz-elements.pdfbin696762 -> 704147 bytes
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_1.pdfbin20611 -> 20614 bytes
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_1.tex2
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_2.pdfbin16392 -> 16396 bytes
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_2.tex2
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_3.pdfbin17158 -> 17162 bytes
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_3.tex2
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_4.pdfbin11343 -> 11341 bytes
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_4.tex2
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz-elements.sty4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_circle.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_class.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_ellipse.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_circles.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_intersections.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_lines.lua15
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_maths.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_matrices.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_points.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_regular.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_triangles.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_line.lua13
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_main.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_matrices.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_misc.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_parallelogram.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_point.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_quadrilateral.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_rectangle.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_regular.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_square.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_triangle.lua48
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_vector.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/README.md16
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-FAQ.tex4
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-angles.tex3
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-circleby.tex4
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-circles.tex35
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-clipping.tex19
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-compass.tex2
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-documentation.tex3
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-drawing.tex26
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-elements.tex4
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-examples.tex25
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-filling.tex3
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-intersection.tex70
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-labelling.tex2
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-lines.tex36
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-lua.tex20
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-main.tex24
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-news.tex427
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-pointby.tex15
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-points.tex12
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-pointsSpc.tex122
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-polygons.tex4
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-presentation.tex72
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-show.tex10
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-styles.tex16
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-tools.tex17
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/tkz-euclide.pdfbin1116500 -> 1103289 bytes
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-angles.tex268
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-arcs.tex262
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-circles.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-compass.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-ellipses.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-lines.tex11
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-points.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-polygons.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-protractor.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-sectors.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-show.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/libs/tkz-lib-eu-marks.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/libs/tkz-lib-eu-shape.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-circles-by.tex4
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-circles.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points-by.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points-spc.tex4
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points-with.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-axesmin.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-circles-by.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-circles.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-grids.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-lines.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-by.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-rnd.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-spc.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-with.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-polygons.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-triangles.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.cfg24
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.sty47
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-angles.tex23
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-base.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-intersections.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-math.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-BB.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-angles.tex11
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-base.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-colors.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-intersections.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-math.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-modules.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-text.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-utilities.tex6
-rw-r--r--macros/latex/contrib/tuda-ci/README.md4
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaAnnouncement.pdfbin551881 -> 551934 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer.pdfbin601729 -> 601729 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer2023.pdfbin561720 -> 561720 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaExercise.pdfbin570474 -> 570473 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLeaflet.pdfbin559903 -> 559914 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLetter.pdfbin567048 -> 567042 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPhD.pdfbin629331 -> 616232 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPoster.pdfbin536007 -> 536048 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPub.pdfbin662459 -> 662470 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaReport.pdfbin527518 -> 527496 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaSciPoster.pdfbin563701 -> 563701 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaThesis.pdfbin625767 -> 615311 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaAnnouncement.tex2
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaBeamer.tex2
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaBeamer2023.tex2
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaBibliography.bib2
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaExercise.tex2
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaFromaddress.lco2
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaLeaflet.tex2
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaLetter.tex2
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaPhD.tex2
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaPoster.tex2
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaPub.tex2
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaReport.tex2
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaSciPoster.tex2
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaThesis.tex2
-rw-r--r--macros/latex/contrib/tuda-ci/tex/beamercolorthemeTUDa.sty2
-rw-r--r--macros/latex/contrib/tuda-ci/tex/beamercolorthemeTUDa2008.sty2
-rw-r--r--macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa.sty2
-rw-r--r--macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa2008.sty2
-rw-r--r--macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa.sty2
-rw-r--r--macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa2008.sty2
-rw-r--r--macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa2023.sty2
-rw-r--r--macros/latex/contrib/tuda-ci/tex/beamerouterthemeTUDa.sty2
-rw-r--r--macros/latex/contrib/tuda-ci/tex/beamerouterthemeTUDa2008.sty2
-rw-r--r--macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa-mecheng.sty6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa.sty2
-rw-r--r--macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa2008.sty6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa2023.sty2
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tuda-a0paper.clo6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tuda-a1paper.clo6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tuda-a2paper.clo6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tuda-a3paper.clo6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tuda-a4paper.clo6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tuda-a5paper.clo6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tuda-pgfplots.sty6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudabeamer.cls6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudacolors.def6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudacolors.sty6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudaexercise.cls6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudafonts.sty6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudaleaflet.cls6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudaletter.cls6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudalettersize10pt.clo2
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudamecheng.cfg6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudaposter.cls6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudapub.cls6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudarules.sty6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudasciposter.cls6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudasize9pt.clo2
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudathesis.cfg8
-rw-r--r--macros/latex/contrib/typog/Makefile302
-rw-r--r--macros/latex/contrib/typog/README.md79
-rw-r--r--macros/latex/contrib/typog/RELEASE-HOWTO.md51
-rw-r--r--macros/latex/contrib/typog/docs/index.md5
-rw-r--r--macros/latex/contrib/typog/docs/typog-example.pdfbin0 -> 392419 bytes
-rw-r--r--macros/latex/contrib/typog/docs/typog-grep.1428
-rw-r--r--macros/latex/contrib/typog/docs/typog-grep.1.pdfbin0 -> 511632 bytes
-rw-r--r--macros/latex/contrib/typog/docs/typog.pdfbin0 -> 902362 bytes
-rw-r--r--macros/latex/contrib/typog/typog.dtx9974
-rw-r--r--macros/latex/contrib/typog/typog.ins74
-rw-r--r--macros/latex/contrib/univie-ling/README6
-rw-r--r--macros/latex/contrib/univie-ling/biblatex-univie-ling/univie-ling.bbx2
-rw-r--r--macros/latex/contrib/univie-ling/biblatex-univie-ling/univie-ling.cbx2
-rw-r--r--macros/latex/contrib/univie-ling/doc/templates/template-expose-deutsch.pdfbin130780 -> 132626 bytes
-rw-r--r--macros/latex/contrib/univie-ling/doc/templates/template-expose-english.pdfbin126894 -> 127848 bytes
-rw-r--r--macros/latex/contrib/univie-ling/doc/templates/template-handout-deutsch.pdfbin200672 -> 201366 bytes
-rw-r--r--macros/latex/contrib/univie-ling/doc/templates/template-handout-deutsch.tex1
-rw-r--r--macros/latex/contrib/univie-ling/doc/templates/template-handout-english.pdfbin200676 -> 200967 bytes
-rw-r--r--macros/latex/contrib/univie-ling/doc/templates/template-handout-english.tex1
-rw-r--r--macros/latex/contrib/univie-ling/doc/templates/template-paper-deutsch.pdfbin158161 -> 172478 bytes
-rw-r--r--macros/latex/contrib/univie-ling/doc/templates/template-paper-english.pdfbin154403 -> 167579 bytes
-rw-r--r--macros/latex/contrib/univie-ling/doc/templates/template-poster-deutsch.pdfbin227166 -> 227174 bytes
-rw-r--r--macros/latex/contrib/univie-ling/doc/templates/template-poster-english.pdfbin224973 -> 224980 bytes
-rw-r--r--macros/latex/contrib/univie-ling/doc/templates/template-thesis-deutsch.pdfbin171777 -> 190196 bytes
-rw-r--r--macros/latex/contrib/univie-ling/doc/templates/template-thesis-english.pdfbin168772 -> 186339 bytes
-rw-r--r--macros/latex/contrib/univie-ling/doc/templates/template-wlg-article.pdfbin372040 -> 250470 bytes
-rw-r--r--macros/latex/contrib/univie-ling/doc/templates/template-wlg-review.pdfbin371831 -> 250366 bytes
-rw-r--r--macros/latex/contrib/univie-ling/doc/univie-ling-expose.pdfbin457978 -> 458151 bytes
-rw-r--r--macros/latex/contrib/univie-ling/doc/univie-ling-expose.tex10
-rw-r--r--macros/latex/contrib/univie-ling/doc/univie-ling-handout.pdfbin448122 -> 448221 bytes
-rw-r--r--macros/latex/contrib/univie-ling/doc/univie-ling-handout.tex7
-rw-r--r--macros/latex/contrib/univie-ling/doc/univie-ling-paper.pdfbin454263 -> 455332 bytes
-rw-r--r--macros/latex/contrib/univie-ling/doc/univie-ling-paper.tex16
-rw-r--r--macros/latex/contrib/univie-ling/doc/univie-ling-poster.pdfbin450725 -> 454323 bytes
-rw-r--r--macros/latex/contrib/univie-ling/doc/univie-ling-poster.tex53
-rw-r--r--macros/latex/contrib/univie-ling/doc/univie-ling-thesis.pdfbin458988 -> 459107 bytes
-rw-r--r--macros/latex/contrib/univie-ling/doc/univie-ling-thesis.tex6
-rw-r--r--macros/latex/contrib/univie-ling/doc/univie-ling-wlg.pdfbin345784 -> 345852 bytes
-rw-r--r--macros/latex/contrib/univie-ling/doc/univie-ling-wlg.tex14
-rw-r--r--macros/latex/contrib/univie-ling/doc/univie-ling.pdfbin365425 -> 365602 bytes
-rw-r--r--macros/latex/contrib/univie-ling/doc/univie-ling.tex2
-rw-r--r--macros/latex/contrib/univie-ling/tex/univie-ling-expose.cls20
-rw-r--r--macros/latex/contrib/univie-ling/tex/univie-ling-handout.cls47
-rw-r--r--macros/latex/contrib/univie-ling/tex/univie-ling-paper.cls73
-rw-r--r--macros/latex/contrib/univie-ling/tex/univie-ling-poster.cls70
-rw-r--r--macros/latex/contrib/univie-ling/tex/univie-ling-thesis.cls21
-rw-r--r--macros/latex/contrib/univie-ling/tex/univie-ling-wlg.cfg12
-rw-r--r--macros/latex/contrib/univie-ling/tex/univie-ling-wlg.cls43
-rw-r--r--macros/latex/contrib/ximera/LICENSE415
-rw-r--r--macros/latex/contrib/ximera/Makefile50
-rw-r--r--macros/latex/contrib/ximera/README18
-rw-r--r--macros/latex/contrib/ximera/README.md62
-rw-r--r--macros/latex/contrib/ximera/installingLocally.md91
-rw-r--r--macros/latex/contrib/ximera/pgfsys-ximera.def62
-rw-r--r--macros/latex/contrib/ximera/src/abstract.dtx14
-rw-r--r--macros/latex/contrib/ximera/src/activity.dtx158
-rw-r--r--macros/latex/contrib/ximera/src/answer.dtx111
-rw-r--r--macros/latex/contrib/ximera/src/banner.dtx21
-rw-r--r--macros/latex/contrib/ximera/src/choice.dtx226
-rw-r--r--macros/latex/contrib/ximera/src/clearEnv.dtx18
-rw-r--r--macros/latex/contrib/ximera/src/dialogue.dtx28
-rw-r--r--macros/latex/contrib/ximera/src/ending.dtx20
-rw-r--r--macros/latex/contrib/ximera/src/enumerate.dtx10
-rw-r--r--macros/latex/contrib/ximera/src/feedback.dtx72
-rw-r--r--macros/latex/contrib/ximera/src/foldable.dtx76
-rw-r--r--macros/latex/contrib/ximera/src/footnotes.dtx63
-rw-r--r--macros/latex/contrib/ximera/src/freeresponse.dtx60
-rw-r--r--macros/latex/contrib/ximera/src/graded.dtx20
-rw-r--r--macros/latex/contrib/ximera/src/hideEnv.dtx36
-rw-r--r--macros/latex/contrib/ximera/src/hints.dtx53
-rw-r--r--macros/latex/contrib/ximera/src/html.dtx20
-rw-r--r--macros/latex/contrib/ximera/src/hyperref.dtx12
-rw-r--r--macros/latex/contrib/ximera/src/image.dtx60
-rw-r--r--macros/latex/contrib/ximera/src/instructornotes.dtx101
-rw-r--r--macros/latex/contrib/ximera/src/interactives/desmos.dtx14
-rw-r--r--macros/latex/contrib/ximera/src/interactives/geogebra.dtx27
-rw-r--r--macros/latex/contrib/ximera/src/interactives/google.dtx26
-rw-r--r--macros/latex/contrib/ximera/src/interactives/graph.dtx14
-rw-r--r--macros/latex/contrib/ximera/src/interactives/include.dtx22
-rw-r--r--macros/latex/contrib/ximera/src/interactives/javascript.dtx31
-rw-r--r--macros/latex/contrib/ximera/src/interactives/sagemath.dtx43
-rw-r--r--macros/latex/contrib/ximera/src/interactives/video.dtx21
-rw-r--r--macros/latex/contrib/ximera/src/jax.dtx115
-rw-r--r--macros/latex/contrib/ximera/src/labels.dtx15
-rw-r--r--macros/latex/contrib/ximera/src/leash.dtx18
-rw-r--r--macros/latex/contrib/ximera/src/link.dtx31
-rw-r--r--macros/latex/contrib/ximera/src/logo.dtx30
-rw-r--r--macros/latex/contrib/ximera/src/macros.dtx14
-rw-r--r--macros/latex/contrib/ximera/src/makeCounter.dtx37
-rw-r--r--macros/latex/contrib/ximera/src/metadata.dtx32
-rw-r--r--macros/latex/contrib/ximera/src/only.dtx38
-rw-r--r--macros/latex/contrib/ximera/src/options.dtx123
-rw-r--r--macros/latex/contrib/ximera/src/optionsxourse.dtx27
-rw-r--r--macros/latex/contrib/ximera/src/outcomes.dtx34
-rw-r--r--macros/latex/contrib/ximera/src/packages.dtx54
-rw-r--r--macros/latex/contrib/ximera/src/pagesetup.dtx55
-rw-r--r--macros/latex/contrib/ximera/src/problem.dtx197
-rw-r--r--macros/latex/contrib/ximera/src/proof.dtx10
-rw-r--r--macros/latex/contrib/ximera/src/sectioning.dtx49
-rw-r--r--macros/latex/contrib/ximera/src/solution.dtx30
-rw-r--r--macros/latex/contrib/ximera/src/suppress.dtx33
-rw-r--r--macros/latex/contrib/ximera/src/textcolor.dtx20
-rw-r--r--macros/latex/contrib/ximera/src/theorems.dtx174
-rw-r--r--macros/latex/contrib/ximera/src/tikzexport.dtx42
-rw-r--r--macros/latex/contrib/ximera/src/title.dtx122
-rw-r--r--macros/latex/contrib/ximera/src/ungraded.dtx22
-rw-r--r--macros/latex/contrib/ximera/src/utilitymacros.dtx45
-rw-r--r--macros/latex/contrib/ximera/src/verbatim.dtx36
-rw-r--r--macros/latex/contrib/ximera/src/xkcd.dtx13
-rw-r--r--macros/latex/contrib/ximera/ximera.dtx363
-rw-r--r--macros/latex/contrib/ximera/ximera.ins211
-rw-r--r--macros/latex/contrib/ximera/ximera.pdfbin0 -> 320915 bytes
-rw-r--r--macros/latex/contrib/zref-clever/CHANGELOG.md8
-rw-r--r--macros/latex/contrib/zref-clever/zref-clever-code.pdfbin1217642 -> 880835 bytes
-rw-r--r--macros/latex/contrib/zref-clever/zref-clever-code.tex5
-rw-r--r--macros/latex/contrib/zref-clever/zref-clever-doc.pdfbin344167 -> 227507 bytes
-rw-r--r--macros/latex/contrib/zref-clever/zref-clever-doc.tex38
-rw-r--r--macros/latex/contrib/zref-clever/zref-clever.dtx1265
-rw-r--r--macros/latex/contrib/zref-clever/zref-clever.ins1
1613 files changed, 133265 insertions, 138536 deletions
diff --git a/macros/latex/contrib/arraycols/arraycols.dtx b/macros/latex/contrib/arraycols/arraycols.dtx
index b3a438be98..aebd0bb195 100644
--- a/macros/latex/contrib/arraycols/arraycols.dtx
+++ b/macros/latex/contrib/arraycols/arraycols.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 2019-2023 by Antoine Missier <antoine.missier@ac-toulouse.fr>
+% Copyright (C) 2019-2024 by Antoine Missier <antoine.missier@ac-toulouse.fr>
%
% This file may be distributed and/or modified under the conditions of
% the LaTeX Project Public License, either version 1.3 of this license
@@ -20,16 +20,16 @@
%<*package>
\NeedsTeXFormat{LaTeX2e}[2005/12/01]
\ProvidesPackage{arraycols}
- [2023/09/13 v1.4 .dtx arraycols file]
+ [2024/05/04 v1.5 .dtx New column types for array and tabular]
%</package>
%<*driver>
\documentclass{ltxdoc}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french,english]{babel}
-\usepackage{lmodern}
+\usepackage[charter]{mathdesign}
\usepackage{arraycols}
-
+\usepackage{spacingtricks}
\usepackage{sectsty}
\usepackage{xcolor}
\definecolor{darkbrown}{rgb}{0.5,0.1,0.1}
@@ -56,7 +56,7 @@
%</driver>
% \fi
%
-% \CheckSum{46}
+% \CheckSum{42}
%
% \CharacterTable
% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
@@ -81,23 +81,29 @@
% minor changes in documentation}
% \changes{v1.2}{2021/09/20}{Incompatibility with siunitx package
% (called by pstricks-add) is solved}
-% \changes{v1.3}{2023/08/09}{Small changes in documentation}
-% \changes{v1.4}{2023/09/13}{More changes in documentation}
+% \changes{v1.3}{2023/08/09}{A few changes in the documentation}
+% \changes{v1.4}{2023/09/13}{More changes in the documentation}
+% \changes{v1.5}{2024/05/04}{Mention of the tabularray and mdwtab packages in the doc;
+% explanations about the gape and Gape macros from the makecell package}
%
% \GetFileInfo{arraycols.sty}
%
% \title{The \textsf{arraycols} package\thanks{This document
% corresponds to \textsf{arraycols}~\fileversion, dated \filedate.
-% Thanks to François Bastouil for assistance with the English translation.}}
+% Thanks to François Bastouil for initial assistance with the English translation.}}
% \author{Antoine Missier \\ \texttt{antoine.missier@ac-toulouse.fr}}
-% \date{September 13, 2023}
+% \date{May 4, 2024}
% \maketitle
%
% \section{Introduction}
%
-% This package introduces new predefined column types for tables, in addition to
-% the \textsf{array} package by Frank Mittelbach and David Carlisle~\cite{ARRAY}.
-% It also includes a command for wide horizontal rule drawing.
+% Although the remarkable \textsf{tabularray} package by Jianrui Lyu~\cite{TABUL},
+% developed in \LaTeX 3, offers many new possibilities and great flexibility
+% in composing tables, many users are still familiar with
+% Frank Mittelbach and David Carlisle's \textsf{array} package~\cite{ARRAY}.
+% In addition to \textsf{array}, this modest \textsf{arraycols} package introduces
+% new predefined column types for tables and also includes a command
+% for wide horizontal rule drawing.
% Below is a summary of the column types and macro defined by \textsf{arraycols},
% which will be detailed in the following section.
%
@@ -142,7 +148,7 @@
% \end{tabular}
% \end{center}
%
-% Note that if a column type has been previously defined by another package,
+% If a column type has been previously defined by another package,
% using \textsf{arraycols} will overwrite it and display a warning message.
%
% In addition to loading the \textsf{array} package, \textsf{arraycols}
@@ -151,13 +157,10 @@
% Moreover it relies on
% \textsf{tabularx}~\cite{TABX} for \texttt{T} and \texttt{Z} column types and
% loads \textsf{makecell}~\cite{MKCELL} for creation of multilined tabular cells.
-% It's worth mentioning that the \textsf{tablestyles} package~\cite{TBLSTY}
-% also defines L, C, R and Z column types, but differently.
-% Nevertheless, \textsf{tablestyles} is incompatible with \textsf{makecell}
-% and consequently with \textsf{arraycols} as well.
-%
-% With its minimal code, \textsf{arraycols} makes no claim to develop new macros.
-% Its purpose is to combine and configure functionalities derived from other packages.
+% Note that the \textsf{tablestyles} package~\cite{TBLSTY}
+% also defines the column types L, C, R and Z, but differently.
+% However, \textsf{tablestyles} is incompatible with \textsf{makecell}
+% and therefore also with \textsf{arraycols} as well.
%
% \section{Usage}
%
@@ -171,14 +174,13 @@
% in a \texttt{tabular} environment.
% For instance, using the declaration "\begin{tabular}{|l|C|r|}" sets the second column
% in centered mathematical mode. Similarly, using the declaration "\begin{array}{|L|c|c|}"
-% sets the first column in text mode, left-aligned\footnote{The declarations
-% \texttt{L, C, R} do not work in a \texttt{tabularx} environment.
+% sets the first column in text mode, left-aligned
+% \footnote{The declarations \texttt{L, C, R} do not work in a \texttt{tabularx} environment.
% Additionally, the \mbox{\textsf{tabulary}} package by David Carlisle~\cite{TABY}
% already defines the \texttt{L, C, R} (and \texttt{J}) column types for specific alignments
% in tables of the same type as \texttt{tabularx}.
-% However, there is no incompatibility with \textsf{arraycols} because these column definitions
-% apply exclusively within \texttt{tabulary} environments.
-% }.
+% However, there is no incompatibility with \textsf{arraycols} because these
+% column definitions apply exclusively within \texttt{tabulary} environments.}.
%
% \medskip
% \DescribeEnv{t\marg{width}}
@@ -230,17 +232,18 @@
% \end{array}
% \]
%
-% The \textsf{cellspace} package is loaded with the \texttt{math} option\footnote{The
-% \texttt{math} option loads the \textsf{amsmath} package.
+% The \textsf{cellspace} package is loaded with the \texttt{math} option
+% \footnote{The \texttt{math} option loads the \textsf{amsmath} package.
% As mentionned in the \textsf{cellspace} package documentation:
% \og the \textsf{amsmath} package can be loaded beforehand with other
% packages (such as \texttt{empheq} or \texttt{mathtools}),
% were an incompatibility to arise from one’s loading it later\fg.}
% to efficiently manage row heights, including in matrices.
% Another option of \textsf{cellspace}, \texttt{column=Q}
-% (with \texttt{S} being the default in \textsf{cellspace})\footnote{The
-% letter Q is a substitute for the default column modifier S of the \textsf{cellspace}
-% package.}, was necessary to prevent any compatibility issues
+% (with \texttt{S} being the default in \textsf{cellspace})
+% \footnote{The letter Q is a substitute for the default column modifier
+% S of the \textsf{cellspace} package.},
+% was necessary to prevent any compatibility issues
% with the \textsf{siunitx} package (also loaded by \textsf{pstricks-add}).
% The \texttt{Q} declaration serves as a \og modifier \fg{}
% that, when placed before a column type declaration,
@@ -253,19 +256,44 @@
% excellent row height adjustment. However, regrettably, it doesn't handle the height
% of vertical separators ``"|"''.
% In order to achieve a similar vertical adjustment as \textsf{booktabs},
-% we set the \textsf{cellspace} parameters as follows:\\
-% \indent\indent"\setlength{\cellspacetoplimit}{3pt}", \\
-% \indent\indent"\setlength{\cellspacebottomlimit}{2pt}".
-%
-% Additionally, it's worth mentioning the \textsf{tabls} package by Donald Arneseau~\cite{TABLS}
-% that makes a good adjustment of row heights as well, but it is incompatible
-% with the \textsf{array} and \textsf{numprint} packages.
+% we set the \textsf{cellspace} parameters as follows:
+% \begin{center}
+% \begin{tabular}{l}
+% "\setlength{\cellspacetoplimit}{3pt}", \\
+% "\setlength{\cellspacebottomlimit}{2pt}".
+% \end{tabular}
+% \end{center}
%
% \medskip
-% Finally, manual adjustments can also be achieved using the "\vstrut" command
-% from the \textsf{spacingtricks} package~\cite{SPA}, or by utilizing "\gape" and "\Gape"
-% from the \textsf{makecell} package~\cite{MKCELL},
-% as well as employing "\bigstrut" from the \textsf{bigstrut} package~\cite{STRUT}.
+% A common issue with \LaTeX\ tables is that there isn’t enough space
+% around horizontal rules. As seen previously,
+% \textsf{cellspace} partially addresses this issue,
+% but if you want to add some more space around the horizontal rules, it's not straightforward.
+% First, note that Donald Arsenau's \textsf{tabls} package~\cite{TABLS} produces
+% a nice and automatic solution in this regard, but is not compatible with \textsf{array}
+% nor with \textsf{numprint}.
+%
+% Several other methods can be employed:
+% you can increase the space on top or bottom of a particular cell
+% by using
+% \begin{center}
+% "\gape"\oarg{\texttt{t} or \texttt{b}}\marg{text}
+% or "\Gape"\oarg{height}\oarg{depth}\marg{text}
+% \end{center}
+% from the \textsf{makecell} package~\cite{MKCELL}.
+% You have also the "\bigstrut" command from the \textsf{bigstrut} package~\cite{STRUT},
+% but it's less efficient and convenient.
+% An efficient method is provided by the \textsf{mdwtab} package
+% of Mark Wooding~\cite{MDWTAB} with its macros
+% "\vgap"\marg{length} or "\hlx"\marg{hlx-cmd},
+% where in \marg{hlx-cmd} you can place "h", representing "\hline", and "s"\oarg{length},
+% meaning "\vgap" (among others).
+% This package provides also many other interesting features.
+% Finally, manual adjustments of particular rows can be achieved using
+% the "\vstrut"\oarg{depth}\marg{height} command
+% from the \textsf{spacingtricks} package~\cite{SPA},
+% These packages are not loaded by \textsf{arraycols}, except \textsf{makecell}.
+% Have a look at their documentation.
%
% \medskip
% \DescribeEnv{z\marg{width}}
@@ -281,16 +309,19 @@
% the \texttt{X} column definition, which calculates its width in relation to
% the required width for the entire table. It aligns text to the left
% similar to \texttt{p}\marg{width}.
-% For instance, using "\begin{tabularx}{8cm}{|c|X|X|}"
+% Using "\begin{tabularx}{8cm}{|c|X|X|}"
% adjusts the width of the \texttt{X} columns
% to achieve a total width of 8\,cm. To complement this, we offer
% the \texttt{T} declaration, which performs a similar function
% but centers the content horizontally.
% Additionally the \texttt{Z} declaration activates mathematical
% mode and adjusts
-% line heights, comparable to \texttt{x} or \texttt{z}). Here's an example with
-% "\begin{tabularx}{\linewidth}{|T|y|x|Z|T|}".
+% line heights, comparable to \texttt{x} or \texttt{z}).
+% The following example is obtained with
% \begin{center}
+% "\begin{tabularx}{\linewidth}{|T|y|x|Z|T|}".
+%
+% \medskip
% \begin{tabularx}{\linewidth}{|T|y|x|Z|T|}
% \hline
% A good job &
@@ -301,6 +332,7 @@
% \hline
% \end{tabularx}
% \end{center}
+%
% Observe that cells 3 and 4 are not vertically centered to preserve
% the precise alignment of fraction bars within mathematical formulas
% across cells.
@@ -317,7 +349,8 @@
% compared to the one achieved
% with the standard declaration ``"|"''. For selecting the line thickness,
% we additionally provide the column
-% definition \texttt{V}\marg{thickness}\footnote{The definition of \texttt{V}
+% definition \texttt{V}\marg{thickness}
+% \footnote{The definition of \texttt{V}
% would have been simplified by utilizing an optional argument for \texttt{I},
% but unfortunately, this approach doesn't function.}.
%
@@ -334,14 +367,12 @@
% Horizontal rules at the beginning and end of the table are accomplished using "\whline",
% while a "\Xhline{0.8pt}" rule is employed after the legend rows.
% The formatting of header rows is achieved using the "\thead" command
-% from the \textsf{makecell} package. By default, \textsf{arraycols} sets:
-% "\renewcommand\theadfont{\footnotesize\sffamily}"
-% (in \textsf{makecell} it is |\footnotesize| only, without "\sffamily").
+% from the \textsf{makecell} package.
% Lastly, following a recommendation of the \textsf{array} package~\cite{ARRAY},
% an additional 1\,pt has been added to the standard height of each row within this table.
% This adjustment is implemented with the command
-% "\setlength{\extrarowheight}{1pt}"\footnote{As stated
-% in the \textsf{array} package documentation:
+% "\setlength{\extrarowheight}{1pt}"
+% \footnote{As stated in the \textsf{array} package documentation:
% \og This is important for tables with horizontal lines because those
% lines normally touch the capital letters\fg.}.
%
@@ -362,8 +393,8 @@
% The \textsf{cellspace} package provides the \texttt{S} modifier
% (we used \texttt{Q} instead), which,
% when placed before a column declaration, allows for the adjustment of cell content height
-% to prevent any overlap with horizontal rules. The spacing between the content and the rules
-% is governed by the parameters
+% to prevent any overlap with horizontal rules. The spacing between the content and the
+% horizontal rules is governed by the parameters
% "\cellspacetoplimit" and "\cellspacebottomlimit".
%
% \begin{macrocode}
@@ -400,32 +431,35 @@
\newcolumntype{V}[1]{!{\vrule width #1}}
\newlength\savedwidth
\newcommand{\whline}{%
- \noalign{\global\savedwidth\arrayrulewidth\global\arrayrulewidth 1pt}
+ \noalign{\global\savedwidth\arrayrulewidth
+ \global\arrayrulewidth 1pt}
\hline
\noalign{\global\arrayrulewidth\savedwidth}
}
-\renewcommand\theadfont{\footnotesize\sffamily}
% \end{macrocode}
%
% \bigskip
-% \begin{thebibliography}{11}
+% \begin{thebibliography}{13}
+% \bibitem{TABUL} \emph{Tabularray -- Typeset Tabulars and Arrays with \LaTeX 3},
+% Jianrui Lyu, CTAN, 2024A 2024/02/16.
% \bibitem{ARRAY} \emph{A new implementation of LATEX’s \textsf{tabular} and \textsf{array}
% environment}, Frank Mittelbach, David Carlisle, CTAN, v2.4k revised 2018/12/30.
% \bibitem{CELLSP} \emph{The \textsf{cellspace} package}, Josselin Noirel, CTAN,
% v1.8.1 2019/03/11.
% \bibitem{TABX} \emph{The \textsf{tabularx} package}, David Carlisle, CTAN, v2.11.b 2016/02/03.
% \bibitem{MKCELL} \emph{The \textsf{makecell} package}, Olga Lapko, CTAN, v0.1e 2009/08/03.
-% \bibitem{TABY} \emph{The \textsf{tabulary} package}, David Carlisle, CTAN, v1.10 2014/06/11.
% \bibitem{TBLSTY} \emph{The \textsf{tablestyles} package}, Matthias Pospiech, CTAN,
% v0.1 2014/06/27.
+% \bibitem{TABY} \emph{The \textsf{tabulary} package}, David Carlisle, CTAN, v1.10 2014/06/11.
% \bibitem{BOOK} \emph{Publication quality tables in \LaTeX}, package \textsf{booktabs} by
% Simon Fear, CTAN, v1.618033 2016/04/29.
% \bibitem{TABLS} \emph{The \textsf{tabls} package}, Donald Arseneau, CTAN, v3.5 2010/02/26.
% \bibitem{STRUT} \emph{The \textsf{multirow}, \textsf{bigstrut}
% and \textsf{bigdelim} packages},
% Piet van Oostrum, Øystein Bache, Jerry Leichter, CTAN, v2.4 2019/01/01.
+% \bibitem{MDWTAB} \emph{The \textsf{mdwtab} package}, Mark Wooding, CTAN, v1.9 1998/04/28.
% \bibitem{SPA} \emph{The \textsf{spacingtricks} package}, Antoine Missier,
-% CTAN, v1.3 2020/11/02.
+% CTAN, v1.8 2023/12/06.
% \bibitem{COMP} \emph{The \LaTeX\ Companion}. Frank Mittelbach, Michel Goossens,
% Johannes Braams, David Carlisle, Chris Rowley, 2nd edition, Pearson Education, 2004.
% \end{thebibliography}
diff --git a/macros/latex/contrib/arraycols/arraycols.ins b/macros/latex/contrib/arraycols/arraycols.ins
index 567b7a7540..66bf4af2f4 100644
--- a/macros/latex/contrib/arraycols/arraycols.ins
+++ b/macros/latex/contrib/arraycols/arraycols.ins
@@ -1,5 +1,5 @@
%%
-%% Copyright (C) 2019-2023 by Antoine Missier <antoine.missier@ac-toulouse.fr>
+%% Copyright (C) 2019-2024 by Antoine Missier <antoine.missier@ac-toulouse.fr>
%%
%% This file may be distributed and/or modified under the conditions of
%% the LaTeX Project Public License, either version 1.3 of this license
@@ -21,7 +21,7 @@
This is a generated file.
-Copyright (C) 2019-2023 by Antoine Missier <antoine.missier@ac-toulouse.fr>
+Copyright (C) 2019-2024 by Antoine Missier <antoine.missier@ac-toulouse.fr>
This file may be distributed and/or modified under the conditions of
the LaTeX Project Public License, either version 1.3 of this license
diff --git a/macros/latex/contrib/arraycols/arraycols.pdf b/macros/latex/contrib/arraycols/arraycols.pdf
index b42c461d36..d280a956f3 100644
--- a/macros/latex/contrib/arraycols/arraycols.pdf
+++ b/macros/latex/contrib/arraycols/arraycols.pdf
Binary files differ
diff --git a/macros/latex/contrib/babel-contrib/french/README.md b/macros/latex/contrib/babel-contrib/french/README.md
index 5f6d25139a..9706a70579 100644
--- a/macros/latex/contrib/babel-contrib/french/README.md
+++ b/macros/latex/contrib/babel-contrib/french/README.md
@@ -23,7 +23,7 @@ The bundle consists of the following files:
License
-------
-Released under the LaTeX Project Public License v1.3 or later
+Released under the LaTeX Project Public License v1.3c or later
See http://www.latex-project.org/lppl.txt
## Installation
@@ -49,5 +49,5 @@ Changes
See the included manual frenchb.pdf, section "Change History".
---
-Copyright 1996--2023 Daniel Flipo
+Copyright 1996--2024 Daniel Flipo
E-mail: daniel (dot) flipo (at) free (dot) fr
diff --git a/macros/latex/contrib/babel-contrib/french/frenchb-doc.pdf b/macros/latex/contrib/babel-contrib/french/frenchb-doc.pdf
index 4b901cdf3e..27f13a814f 100644
--- a/macros/latex/contrib/babel-contrib/french/frenchb-doc.pdf
+++ b/macros/latex/contrib/babel-contrib/french/frenchb-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/babel-contrib/french/frenchb-doc.tex b/macros/latex/contrib/babel-contrib/french/frenchb-doc.tex
index 9434072bd6..d1ef9c5a3a 100644
--- a/macros/latex/contrib/babel-contrib/french/frenchb-doc.tex
+++ b/macros/latex/contrib/babel-contrib/french/frenchb-doc.tex
@@ -120,7 +120,7 @@
\title{Mode d’emploi du module \ext{babel-french}}
\author{\href{mailto:daniel.flipo@free.fr}{Daniel \textsc{Flipo}}}
-\newcommand*{\latestversion}{3.5s}
+\newcommand*{\latestversion}{3.6a}
\date{Version {\latestversion} -- \today}
\begin{document}
@@ -135,7 +135,7 @@
trouve à la section~\ref{sec:changes-3.0} p.~\pageref{sec:changes-3.0}.
La version actuelle de frenchb (\latestversion), dont le nom officiel est
- \ext{babel-french}, est prévue pour fonctionner aussi bien avec les anciens
+ \ext{babel-french}, est conçue pour fonctionner aussi bien avec les anciens
formats TeX comme pdf(La)TeX qu’avec les nouveaux Lua(La)TeX et Xe(La)TeX.
Les mises à jour de \ext{babel-french} sont désormais affichées très
@@ -157,11 +157,6 @@
\vspace{-\baselineskip}\noindent
\descindentFB=0pt
\begin{description}
- \item[30 avril 2017] Utiliser |\frenchsetup{}| de préférence à
- |\frenchbsetup{}|, voir p.~\pageref{sec:Perso}.
- Personnalisation de la commande |\part{}|, voir p.~\pageref{ssec:captions}.
- \item[31 août 2017] Ajout de l’option \fbo{UnicodeNoBreakSpaces},
- voir p.~\pageref{ucs-nbsp}.
\item[30 janvier 2018] Adaptation à la version 3.4a, voir
section~\ref{ssec:changes-3.4}.
\item[24 février 2018] Regroupement par thèmes des options de \fbsetup{}.
@@ -183,6 +178,8 @@
voir p.~\pageref{par-in-lists}.
\item[19 déc. 2023] \ext{babel-french} est maintenant compatible
avec \pkg{ucharclasses} (XeLaTeX). \file{frenchb.ins} supprimée.
+ \item[22 mai 2024] Adaptation à la version 3.6a, voir
+ section~\ref{ssec:changes-3.6}.
\end{description}
\end{abstract}
\egroup
@@ -880,8 +877,9 @@ La liste étant longue, les options sont regroupées par thèmes.
\item [AutoSpaceFootnotes=false (true*)] supprime l’espace fine
insécable ajoutée par défaut avant l’appel de chaque note dans le texte
- courant. Cette option affecte la totalité du document.
-
+ courant. Cette option affecte la totalité du document.
+ L’espace éventuellement ajoutée peut être ajustée, la commande par défaut
+ est : |\newcommand*{\FBfnmarkspace}{\kern .5\fontdimen2\font}|
\end{description}
\subsubsection*{Ponctuation haute}
@@ -1123,10 +1121,10 @@ La liste étant longue, les options sont regroupées par thèmes.
section~\ref{sec:description}, p.~\pageref{sec:description}.
\item [LowercaseSuperscripts=false (true)] rend possible d’avoir des lettres
- supérieures en capitales (est-ce bien utile ?). Par défaut, la nouvelle
- commande |\up| (sauf si elle est redéfinie en |\textsuperscript| par l’option
- précédente) empêche le passage en capitales des lettres supérieures dans les
- hauts de pages par exemple.
+ supérieures en capitales (est-ce bien utile ?). Par défaut, la commande
+ |\up| (sauf si elle est redéfinie en |\textsuperscript| par l’option
+ précédente) empêche le passage en capitales des lettres supérieures dans
+ les hauts de pages par exemple.
\item [SuppressWarning=true (false)] peut être utilisée pour supprimer les
avertissements non essentiels émis par \ext{babel-french}.
@@ -1521,10 +1519,28 @@ aurait :
}
%\newpage
-\section{Changements entre les versions 3.5 et 2.6}
+\section{Changements entre les versions \latestversion{} et 3.4 (2018)}
\label{sec:changes-3.0}
-\subsection{Changements entre les versions \latestversion{} et 3.4d}
+\subsection{Changements entre les versions \latestversion{} et 3.5s}
+\label{ssec:changes-3.6}
+
+La version 3.6a n’a plus recours à l’extension \pkg{keyval} pour gérer les
+options, les commandes internes du noyau LaTeX (\pkg{ltkeys})
+|\DeclareKeys{}| et |\SetKeys{}| sont utilisées.\\
+L’espace fine ajoutée avant l’appel des notes de bas de pages est maintenant
+personnalisable (suggestion de Thomas Savary) ; le nom de la commande est
+|\FBfnmarkspace{}|, c’est une \emph{vraie} espace fine (demie espace-mot de la
+police courante) contrairement à la commande LaTeX |\,| alias |\thinspace|%
+\footnote{Elles sont définies pour fonctionner aussi en mode mathématique.}
+précédemment utilisée qui chasse toujours 1/6em. Les deux définitions
+coïncident pour les polices dont l’espace-mot vaut 1/3em, (cas le plus
+courant), l’écart est infime pour celles qui chassent moins : il est par
+exemple de $(1/6-1/8)12=0,5$pt en 12pt pour une police dont l’espace-mot
+chasse 1/4em. Il est toujours possible de revenir à l’ancien comportement en
+codant |\renewcommand\FBfnmarkspace{\,}|.
+
+\subsection{Changements entre les versions 3.5a et 3.4d}
\label{ssec:changes-3.5}
La version 3.5a propose une nouvelle option \fbo{ListItemsAsPar} qui permet
@@ -1671,116 +1687,6 @@ judicieux de renommer la commande de personnalisation |\frenchbsetup{}| en
De nouvelles possibilités de personnalisation de la commande |\part{}| ont été
introduites, voir page~\pageref{ssec:captions}.
-\subsection{Changements entre les versions 3.2h et 3.1m}
-\label{ssec:changes-3.2}
-
-La version 3.2g modifie le comportement par défaut de la commande |\frquote{}|
-sous LuaTeX qui est maintenant le même que sous XeTeX ou pdfTeX.
-Il suffit d’ajouter l’option \fbo{EveryLineGuill=open} pour retrouver le
-comportement des versions précédentes.
-
-Depuis la version 3.2f, \ext{babel-french} est compatible avec l’extension
-\ext{icomma} qui offre une solution alternative à la commande
-|\DecimalMathComma|.
-
-La construction des notes de bas de page a été revue pour les classes
-\cls{beamer}, \cls{memoir} et koma-script (\cls{scrartcl}, \cls{scrreprt}
-et \cls{scrbook}). Le rendu final est conservé mais les possibilités de
-personnalisation offertes par ces classes pour la présentation des notes de
-bas de page (changement de police, de couleur, etc.) sont désormais
-disponibles même lorsque l’option \fbo{FrenchFootnotes} est activée.
-
-Un vieux bug affectant le comportement de |\frquote{}| lorsque l’extension
-\ext{xspace} est chargée, a été corrigé.
-
-Les commandes |\NoAutoSpacing|, |\ttfamilyFB|, |\rmfamilyFB| et |\sffamilyFB|
-ont été complètement réécrites dans la version~3.2c afin de leur assurer un
-comportement identique quel que soit le moteur utilisé, pdfTeX, XeTeX ou
-LuaTeX.
-
-\textbf{{babel-french} v.3.2b et suivantes, mise en garde pour les
- utilisateurs de Lua(La)TeX :}
-\nopagebreak
-La version~3.2b est la première compatible avec la version~0.95 de LuaTeX
-incluse dans TeXLive~2016. Les changements intervenus dans la structure des
-nœuds de type \textit{glue} rendent cette nouvelle version de LuaTeX
-incompatible avec les précédentes. Le code lua contenu dans les versions 3.2b
-et suivantes de \file{frenchb.lua} ne fonctionne pas avec les versions de
-LuaTeX antérieures à 0.95, aussi à partir de la version~3.2b \ext{babel-french}
-revient aux caractères actifs pour la gestion de la ponctuation haute avec les
-moteurs LuaTeX antérieurs à 0.95 !
-La bonne solution consiste à installer rapidement TeXLive~2016 ou une autre
-distribution contenant LuaTeX~0.95.
-En revanche il n’y a aucun problème de compatibilité ascendante avec les
-moteurs XeTeX et pdfTeX.
-
-\subsection{Changements entre les versions 3.1m et 3.0c}
-\label{ssec:changes-3.1}
-
-{\sloppy
- Ajout de la commande |\frquote{}| et de sa variante |\frquote*{}|
- recommandées pour saisir les citations, notamment les citations imbriquées
- ou celles s’étendant sur plusieurs paragraphes, voir p.~\pageref{frquote}
- et les nouvelles options \fbo{EveryParGuill}, \fbo{EveryLineGuill} et
- \fbo{InnerGuillSingle}.
-\par}
-
-Nouvelle option \fbo{SmallCapsFigTabCaptions}, voir p.~\pageref{scfigtab}.
-
-\subsection{Changements entre les versions 3.0c et 2.6h}
-\label{ssec:changes-3.0}
-
-Plusieurs modifications de fond ont motivé le passage à la version~3.0.
-
-\begin{itemize}
-
-\item \ext{babel-french} ne fonctionne désormais qu’avec la version~3.9
- de Babel ce qui donne accès à une syntaxe plus agréable pour modifier les
- \textit{captions}, voir p.~\pageref{captionsfrench}.
- Le séparateur utilisé dans les légendes de figures et de tableaux est
- choisi de manière globale pour toutes les langues, voir
- p.~\pageref{captionseparator}.
-
-\item La gestion des options par \fbsetup{} a été complètement remaniée ; deux
- nouvelles options ont été ajoutées.
-
-\item La variante « canadien » du français fonctionne désormais comme un vrai
- \textit{dialect} au sens de Babel ; parallèlement le français ne devrait
- plus être désigné que sous le nom \opt{french}, à la fois en option de
- |\usepackage[...]{babel}|%
- \footnote{Le mieux est encore de mettre toutes les déclarations de langues
- en option de \cs{documentclass}.}
- et en argument de |\selectlanguage{}| et consorts.
- Les variantes \opt{frenchb} et \opt{francais} sont encore tolérées mais
- sans aucune garantie de pérennité.
-
-\item \ext{babel-french} ne charge plus le fichier \file{frenchb.cfg} ; la
- personnalisation passe par l’utilisation exclusive de \fbsetup{}.
-
-\item Les étiquettes des listes \env{description} sont positionnées comme
- celles des listes \env{itemize} et \env{enumerate} avec un retrait
- paramétrable |\listindentFB| par rapport à la marge gauche.
-
-\item Enfin et c’est probablement le plus important, le recours aux
- caractères actifs est supprimé pour la gestion de la ponctuation haute
- lorsqu’un format basé sur LuaTeX%
- \footnote{C’est déjà le cas pour XeTeX depuis la version~2.5 de
- \ext{babel-french}.}
- est utilisé (LuaLaTeX par exemple).
- Le mécanisme des caractères actifs est remplacé par un appel aux
- \textit{callbacks} |pre_linebreak_filter| et |hpack_filter|%
- \footnote{Depuis la version 3.1g c’est le\textit{callbacks} \texttt{kerning}
- qui est mis en œuvre à la place.}.
-
- La base du code |lua| se trouve dans l’exposé de Paul Isambert
- à la journée GUT’2010. Un grand merci à Paul pour cette source d’inspiration
- et pour ses suggestions lors de la relecture finale de \file{frenchb.lua}.
-
-\end{itemize}
-
-À partir de la version 3.0c, \ext{babel-french} laisse le contrôle total des
-listes à la classe \cls{beamer} (option \fbo{StandardLists} automatiquement
-activée) ; nouvelle option \fbo{INGuillSpace} (voir p.~\pageref{INGuillspace}).
\subsection{Comment recompiler un document écrit pour
{babel-french}~2.x ?}
diff --git a/macros/latex/contrib/babel-contrib/french/frenchb.dtx b/macros/latex/contrib/babel-contrib/french/frenchb.dtx
index 71171ba2bf..331a0195e0 100644
--- a/macros/latex/contrib/babel-contrib/french/frenchb.dtx
+++ b/macros/latex/contrib/babel-contrib/french/frenchb.dtx
@@ -27,11 +27,11 @@ to be used with the Babel system.
-------------------------------------------------------------
It may be distributed and/or modified under the
-conditions of the LaTeX Project Public License, either version 1.3
+conditions of the LaTeX Project Public License, either version 1.3c
of this license or (at your option) any later version.
The latest version of this license is in
http://www.latex-project.org/lppl.txt
-and version 1.3 or later is part of all distributions of LaTeX
+and version 1.3c or later is part of all distributions of LaTeX
version 2003/12/01 or later.
This work has the LPPL maintenance status "maintained".
@@ -75,7 +75,7 @@ Please report errors to: <daniel (dot) flipo (at) free (dot) fr>
%<frenchb>\ProvidesLanguage{frenchb}
%<lua>--[[
%<lua> File `frenchb.lua’ generated from frenchb.dtx
- [2024-02-29 v3.5s French support from the babel system]
+ [2024-05-24 v3.6a French support from the babel system]
%<lua> Copyright © 2014-2024 Daniel Flipo
%<lua> <daniel (dot) flipo (at) free (dot) fr>
%<lua> License LPPL: see french.ldf.
@@ -101,17 +101,24 @@ Please report errors to: <daniel (dot) flipo (at) free (dot) fr>
\usepackage[dvipsnames]{xcolor}
\usepackage[no-math]{fontspec}
\usepackage{realscripts}
-\setmainfont{Vera.ttf}[
- ItalicFont = VeraIt.ttf,
- BoldFont = VeraBd.ttf,
- BoldItalicFont = VeraBI.ttf,
- Scale = 0.92
- ]
-\setmonofont{VeraMono.ttf}[
- ItalicFont = VeraMoIt.ttf,
- BoldFont = VeraMoBd.ttf,
- BoldItalicFont = VeraMoBI.ttf,
- Scale = MatchLowercase,
+\usepackage{setspace}
+\setstretch{1.15}
+\setmainfont{SourceSansPro}[
+ Scale = 1.13 ,
+ Extension = .otf ,
+ UprightFont = *-Regular ,
+ ItalicFont = *-RegularIt ,
+ BoldFont = *-Bold ,
+ BoldItalicFont = *-BoldIt ]
+\setmonofont{iosevka}[%
+ Scale = MatchLowercase ,
+ FakeStretch = 1.05 ,
+ Extension = .ttf,
+ UprightFont = *-medium,
+ BoldFont = *-bold,
+ ItalicFont = *-italic,
+ BoldItalicFont = *-bolditalic,
+% RawFeatures = -dlig;-clig % ligature >= (l.1314)
]
%
\def\PrintMacroName#1{%
@@ -149,8 +156,8 @@ Please report errors to: <daniel (dot) flipo (at) free (dot) fr>
\clearpage
\section{Change History}%
\GlossaryPrologue{}%
- Changes are listed in reverse order (latest first) and limited to
- \frenchb{}~v3.
+ Changes listed in reverse order (latest first) and not older
+ than~v3.3 (2018).
\PrintChanges
}
\begin{document}
@@ -298,8 +305,8 @@ Please report errors to: <daniel (dot) flipo (at) free (dot) fr>
% the quotation either an opening French guillemet («), or
% a closing one (») or nothing depending on option
% \fbo{EveryParGuill=open} or \fbo{=close} or \fbo{=none},
-% see p.~\pageref{everyparguill}.
-% Command |\NoEveryParQuote| is provided to locally suppress
+% see p.~\pageref{everyparguill}.\\
+% The command |\NoEveryParQuote| is provided to locally suppress
% unwanted guillemets (typically when lists are embedded in
% |\frquote{}|), it is meant to be used inside an environment
% or a group.
@@ -355,7 +362,7 @@ Please report errors to: <daniel (dot) flipo (at) free (dot) fr>
% Usage: |Albert~\bsc{Camus}|.
%
% \item Commands |\primo|, |\secundo|, |\tertio| and |\quarto|
-% print 1\up{o}, 2\up{o}, 3\up{o}, 4\up{o}.
+% print 1\up{o}, 2\up{o}, 3\up{o}, 4\up{o}.\linebreak
% |\FrenchEnumerate{6}| prints 6\up{o}.
% \item Abbreviations for ``Numéro(s)’’ and ``numéro(s)’’
% (N\up{o} N\up{os} n\up{o} and n\up{os}~) are obtained
@@ -403,7 +410,7 @@ Please report errors to: <daniel (dot) flipo (at) free (dot) fr>
% Customisation of \frenchb{} relies on command \fbsetup{}
% (formerly called |\frenchbsetup{}|, the latter name will be kept
% for ever to ensure backwards compatibility), options are entered
-% using the \file{keyval} syntax.
+% using the \file{l3keys} syntax.
% The command \fbsetup{} is to appear in the preamble only
% (after loading \babel).
%
@@ -418,7 +425,7 @@ Please report errors to: <daniel (dot) flipo (at) free (dot) fr>
%
% \fbsetup{ShowOptions} prints all available options to
% the \file{.log} file, it is just meant as a remainder of the
-% list of offered options. As usual with \file{keyval} syntax,
+% list of offered options. As usual with \file{l3keys} syntax,
% boolean options (as \fbo{ShowOptions}) can be entered as
% \fbo{ShowOptions=true} or just \fbo{ShowOptions}, the
% \fbo{=true} part can be omitted.
@@ -453,9 +460,10 @@ Please report errors to: <daniel (dot) flipo (at) free (dot) fr>
% first paragraph of sections. When French is the main language,
% this option applies to all languages.
%
-% \item [PartNameFull=false (true)]; when true, \frenchb{} numbers
-% the title of |\part{}| commands as ``Première partie’’,
-% ``Deuxième partie’’ and so on. With some classes which
+% \item [PartNameFull=false (true)]; when true (the default),
+% \frenchb{} numbers the title of |\part{}| commands as
+% ``Première partie’’, ``Deuxième partie’’ and so on.
+% With some classes which
% change the |\part{}| command (AMS classes do so), you could
% get ``Première partie~1’’, ``Deuxième partie~2’’ in the toc;
% when this occurs, this option should be set to
@@ -506,9 +514,9 @@ Please report errors to: <daniel (dot) flipo (at) free (dot) fr>
% you had to set \fbo{ReduceListSpacing=false} to revert to the
% class settings which actually reduce list’s spacings even more
% than \frenchb! \fbo{StandardListSpacing=true} replaces
-% \fbo{ReduceListSpacing=false}.}; \frenchb{} customises
+% \fbo{ReduceListSpacing=false}.}; \frenchb{} usually customises
% the vertical spaces in the \env{list} environment, this affects
-% all lists, including \env{itemize} \env{enumerate},
+% all lists, including \env{itemize}, \env{enumerate},
% \env{description}, but also \env{abstract}, \env{quote},
% \env{quotation}, \env{verse}, etc. which are based on \env{list}.
% Setting this option to \fbo{true} reverts to the standard
@@ -552,12 +560,14 @@ Please report errors to: <daniel (dot) flipo (at) free (dot) fr>
% \cs{ding\{43\}} (\cs{textemdash}*)]\hfill
%
% \item [StandardLists=true (false*)] forbids \frenchb{} to
-% customise any kind of list. Try the option \fbo{StandardLists}
-% in case of conflicts with classes or packages that customise
+% customise any kind of list. The option \fbo{StandardLists=true}
+% should be used in case of conflicts with classes or packages that
+% customise
% lists too. This option is just a shorthand setting all four
% options \fbo{StandardListSpacing=true},
-% \fbo{StandardItemizeEnv=true}, \fbo{StandardEnumerateEnv=true}
-% and \fbo{StandardItemLabels=true}.
+% \fbo{StandardItemizeEnv=true},\linebreak
+% \fbo{StandardEnumerateEnv=true} and
+% \fbo{StandardItemLabels=true}.
%
% \item [ListOldLayout=true (false)]; starting with version~2.6a,
% the layout of lists has changed regarding leftmargins’ sizes
@@ -576,9 +586,11 @@ Please report errors to: <daniel (dot) flipo (at) free (dot) fr>
% instance).
%
% \item [AutoSpaceFootnotes=false (true*)]; by default \frenchb{}
-% adds a thin space in the running text before the number or
-% symbol calling the footnote. Making this option \fbo{false}
-% reverts to the standard setting (no space added).
+% adds a (customisable) thin space in the running text before the
+% number or symbol calling the footnote. Making this option
+% \fbo{false} reverts to the standard setting (no space added).
+% The default definition of this thin space is:\\
+% |\newcommand*{\FBfnmarkspace}{\kern .5\fontdimen2\font}|
%
% \item [AutoSpacePunctuation=false (true)]; in French, the user
% \hlabel{autospacepunctuation}
@@ -677,7 +689,7 @@ Please report errors to: <daniel (dot) flipo (at) free (dot) fr>
% always surrounded by « and », the next option is ineffective.
%
% \item [InnerGuillSingle=true (false)];
-% if \fbo{InnerGuillSingle=false} (default), inner quotations
+% if \fbo{InnerGuillSingle=false} (the default), inner quotations
% entered with |\frquote{}| start with~\texttt{``} and end
% with~\texttt{’’}.
% If \fbo{InnerGuillSingle=true}, \texttt{\guilsinglleft} and
@@ -693,7 +705,7 @@ Please report errors to: <daniel (dot) flipo (at) free (dot) fr>
% |\npthousandsep| is defined as a non-breaking space (|~|)%
% \footnote{Actually without stretch nor shrink.} in French;
% when set to true, this option redefines |\npthousandsep|
-% as a thin space (|\,|).
+% as a thin space (|\FBthinspace|).
%
% \item [SmallCapsFigTabCaptions=false (true*)]; when set to
% \fbo{false}, |\figurename| and |\tablename| will be printed in
@@ -702,8 +714,8 @@ Please report errors to: <daniel (dot) flipo (at) free (dot) fr>
% achieved by defining |\FBfigtabshape| as |\relax| before
% loading \frenchb{} (in a document class f.i.).
%
-% \item [CustomiseFigTabCaptions=false (true*)]; when \fbo{false}
-% the default separator (colon) is used instead of
+% \item [CustomiseFigTabCaptions=false (true*)]; when set to
+% \fbo{false} the default separator (colon) is used instead of
% |\CaptionSeparator|. Anyway, \frenchb{} tries hard to insert
% a proper space before it in French and warns if it fails to do
% so.
@@ -735,23 +747,23 @@ Please report errors to: <daniel (dot) flipo (at) free (dot) fr>
% in the order they appear in the \fbsetup{} command.
% Someone wishing that \frenchb{} leaves the layout of lists
% and footnotes untouched but caring for indentation of first
-% paragraph of sections should choose\\
-% \fbsetup{StandardLayout,IndentFirst} to get the expected
-% layout. The reverse order
-% \fbsetup{IndentFirst,StandardLayout} would lead to option
-% \fbo{IndentFirst} being overwritten by \fbo{StandardLayout}.
+% paragraph of sections should choose
+% \fbsetup{StandardLayout,IndentFirst}\par
+% The reverse order \fbsetup{IndentFirst,StandardLayout}
+% would lead to option \fbo{IndentFirst} being overwritten by
+% \fbo{StandardLayout}.
%
% \subsubsection{Caption names}
% \label{sssec-captions-name}
%
-% All caption names can easily be customised in French using the
-% simplified syntax introduced by \babel~3.9, for instance
-% |\def\frenchproofname{Preuve}| or
+% {\sloppy All caption names can easily be customised in French
+% using the simplified syntax introduced by \babel~3.9,
+% for instance |\def\frenchproofname{Preuve}| or
% |\def\acadianproofname{Preuve}| for the \opt{acadian} dialect.
% The older syntax |\addto\captionsfrench{\def\proofname{Preuve}}|
% still works. Keep in mind that \emph{only} |french| can be used
% to redefine captions, even if \babel{}’s option was entered as
-% |frenchb| or |francais|.
+% |frenchb| or |francais|.\par}
%
% \subsubsection{Figure and table captions}
% \label{sssec-captions-fig}
@@ -839,6 +851,13 @@ Please report errors to: <daniel (dot) flipo (at) free (dot) fr>
% \subsection{Changes}
% \label{ssec-changes}
%
+% \subsubsection*{What’s new in version 3.6?}
+%
+% Version 3.6a no longer loads the \pkg{keyval} package, replaced by
+% core LaTeX commands (\pkg{ltkeys}). The thin space added before
+% footnote’s calls is now customisable (suggested by Thomas Savary),
+% the command’s name is |\FBfnmarkspace|.
+%
% \subsubsection*{What’s new in version 3.5?}
%
% Version 3.5a offers a new option \fbo{ListItemsAsPar}. The default
@@ -864,7 +883,7 @@ Please report errors to: <daniel (dot) flipo (at) free (dot) fr>
% kerning was disabled for Type1 fonts since v3.1g (2015).
%
% Version 3.5j also fixes a long standing bug affecting koma-script,
-% \cls{memoir} et \cls{beamer} classes: redefintions of the caption
+% \cls{memoir} and \cls{beamer} classes: redefintions of the caption
% separator (commands |\captionformat|, |\captiondelim|, etc.) are
% now taken into account properly.
%
@@ -958,92 +977,6 @@ Please report errors to: <daniel (dot) flipo (at) free (dot) fr>
% three new commands |\frenchpartfirst|, |\frenchpartsecond| and
% |\frenchpartnameord|.
%
-% \subsubsection*{What’s new in version 3.2?}
-%
-% Version 3.2g changes the default behaviour of |\frquote{}|
-% with LuaTeX based engines, the output is now the same with
-% all engines; to recover the former behaviour, add option
-% \fbo{EveryLineGuill=open}.
-%
-% The handling of footnotes has been redesigned for the
-% \cls{beamer}, \cls{memoir} and koma-script classes.
-% The layout of footnotes ``à la française’’ should be unchanged
-% but footnotes’ customisations offered by these classes
-% (i.e.\ font or color changes) are now available even when option
-% \fbo{FrenchFootnotes} is \fbo{true}.
-%
-% A long standing bug regarding the \pkg{xspace} package has been
-% fixed: |\xspace| has been moved up from the internal command
-% |\FB@fg| to |\fg|; |\frquote{}| now works properly when the
-% \pkg{xspace} package is loaded.
-%
-% Version 3.2b is the first one designed to work with LuaTeX
-% v.~0.95 as included in TeXLive 2016 (LuaTeX’s new glue node
-% structure is not compatible with previous versions).
-%
-% \textbf{Warning to Lua(La)TeX users:} starting with version~3.2b
-% the lua code included in \file{frenchb.lua} will \emph{not work}
-% on older installations (TL2015 f.i.), so \frenchb{} reverts to
-% active characters while handling high punctuation with LuaTeX
-% engines older than 0.95!
-% The best way to go is to upgrade to TL2016 or equivalent asap.
-% Xe(La)TeX and pdf(La)TeX users can safely use \frenchb{} v.~3.2b
-% and later on older installations too.
-%
-% The internals of commands |\NoAutoSpacing|, |\ttfamilyFB|,
-% |\rmfamilyFB| and |\sffamilyFB| have been completely redesigned
-% in version~3.2c, they behave now consistently with all engines.
-%
-% \subsubsection*{What’s new in version 3.1?}
-%
-% New command |\frquote{}| meant to enter French quotations,
-% especially long ones (spreading over several paragraphs) and/or
-% embedded ones. see p.~\pageref{frquote} for details.
-%
-% \subsubsection*{What’s new in version 3.0?}
-%
-% Many deep changes lead me to step \frenchb’s version number
-% to~3.0a:
-% \begin{itemize}
-% \item \babel{}~3.9 is required now to process
-% \file{frenchb.ldf}, this change allows for cleaner definitions
-% of dates and captions for the Unicode engines LuaTeX and
-% XeTeX and also provides a simpler syntax for end-users, see
-% section~\ref{sssec-captions-name}
-% p.\pageref{sssec-captions-name}.
-% \item \fbsetup{} options management has been completely
-% reworked; two new options added.
-% \item Canadian French didn’t work as a normal \babel’s dialect,
-% it should now; btw. the French language should now be loaded
-% as \opt{french}, \emph{not as} \opt{frenchb} or
-% \opt{francais} and preferably as a \emph{global} option of
-% |\documentclass|. Some tolerance still exists in v3.0, but
-% do not rely on it.
-% \item \frenchb{} no longer loads \file{frenchb.cfg}:
-% customisation should definitely be done using \fbsetup{}
-% options.
-% \item Description lists labels are now indented; try setting
-% |\descindentFB=0pt| (or |\listindentFB=0pt| for all lists)
-% in the preamble if you don’t like it.
-% \item The last but not least change affects the (recent)
-% LuaTeX-based engines, (this means version 0.76 as included in
-% TL2013 and up): active characters are no longer used in French
-% for `high punctuation’%
-% \footnote{The current \frenchb{} version requires LuaTeX
-% v.~1.0.4 as included in TL2017, see above.}.
-% Functionalities and user interface are unchanged.
-%
-% Many thanks to Paul Isambert who provided the basis for the
-% lua code (see his presentation at GUT’2010) and kindly
-% reviewed my first drafts suggesting significant improvements.
-%
-% \end{itemize}
-%
-% Starting with version~3.0c, \frenchb{} no longer customises
-% lists with the \cls{beamer} class and offers a new option
-% (\fbo{INGuillSpace}) to follow French `Imprimerie Nationale’
-% recommendations regarding quotes’ spacing.
-%
% \StopEventually{}
%
% \changes{v2.6c}{2013/05/20}{Dummy file frenchb.cfg is no longer
@@ -1217,7 +1150,12 @@ Please report errors to: <daniel (dot) flipo (at) free (dot) fr>
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\ifFBunicode}
+% Check LaTeX2e version (support for \pkg{ltkeys} required).
+% \begin{macrocode}
+\ifLaTeXe \NeedsTeXFormat{LaTeX2e}[2022/06/01] \fi
+% \end{macrocode}
+%
+%\begin{macro}{\ifFBunicode}
% \begin{macro}{\ifFBLuaTeX}
% \begin{macro}{\ifFBXeTeX}
% French hyphenation patterns are now coded in Unicode, see file
@@ -1460,8 +1398,8 @@ Please report errors to: <daniel (dot) flipo (at) free (dot) fr>
%
% \begin{macro}{\FBsetspaces}
% This command makes it easy to fine tune |\FBguillspace|,
-% |\FBcolonspace| and |\FBthinspace| in French (defaut) or
-% independently in a French dialect using the optional argument.
+% |\FBcolonspace| and\linebreak |\FBthinspace| in French (defaut)
+% or independently in a French dialect using the optional argument.
% They are meant for LaTeX2e \emph{only} and can only be used
% in the preamble.
% Four mandatory arguments are expected besides the optional one:
@@ -1469,8 +1407,8 @@ Please report errors to: <daniel (dot) flipo (at) free (dot) fr>
% "thin", the last four are decimal numbers specifying
% \textit{width}, \textit{stretch} and \textit{shrink} relative to
% \textit{fontdimens}.\hlabel{FBsetspaces}
-% For instance |\FBsetspaces[acadian]{colon}{0.5}{0}{0}| defines
-% |\acadianFBcolonspace| as a thinspace which will be used for
+% For \kern0pt instance |\FBsetspaces[acadian]{colon}{0.5}{0}{0}|
+% defines |\acadianFBcolonspace| as a thinspace which will be used for
% the Acadian dialect only. When used without optional argument or
% with argument `french’, the same command would tune the basic
% |\FBcolonspace| command.
@@ -1687,13 +1625,16 @@ Please report errors to: <daniel (dot) flipo (at) free (dot) fr>
with this version of LuaTeX!}
\fi
% \end{macrocode}
-% The next command will be used in the first call of |\extrasfrench|
-% to convert |\FBcolonspace|, |\FBthinspace| and |\FBguillspace|
-% into a table usable by LuaTeX. This way, any customisation done
-% in the preamble (by \fbsetup{}, redefinitions or |\FBsetspaces|
-% commands) are taken into account. Values not explicitly set for
-% Acadian by |\FBsetspaces[|\textit{acadian}|]| commands are copied
-% from the French ones.
+%
+% {\sloppy The next command will be used in the first call of
+% |\extrasfrench| to convert |\FBcolonspace|, |\FBthinspace| and
+% |\FBguillspace| into a table usable by LuaTeX.
+% This way, any customisation done in the preamble (by \fbsetup{},
+% redefinitions or |\FBsetspaces| commands) are taken into account.
+% Values not explicitly set for Acadian by
+% |\FBsetspaces[|\textit{acadian}|]| commands are copied from the
+% French ones.\par}
+
% In case parsing by the Lua function |FBget_glue| (defined in file
% \file{frenchb.lua}) fails due to unexpected syntax in |\FB...space|
% the table remains unchanged and a warning is issued.
@@ -2744,13 +2685,13 @@ return french_punctuation
% tex4ht, pointed out by MPG.}
%
% {\sloppypar |\autospace@beforeFDP| and |\noautospace@beforeFDP| are
-% internal commands. |\autospace@beforeFDP| defines |\FDP@thinspace|
-% and |\FDP@colonspace| as non-breaking spaces and sets LuaTeX
-% attribute |\FB@addDPspace| to 1 (true), while
-% |\noautospace@beforeFDP| lets these spaces empty and sets flag
+% internal commands. |\autospace@beforeFDP| defines commands
+% |\FDP@thinspace| and |\FDP@colonspace| as non-breaking spaces and
+% sets LuaTeX attribute |\FB@addDPspace| to 1 (true), while
+% |\noautospace@beforeFDP| makes them no-op and sets flag
% |\FB@addDPspace| to 0 (false). User commands |\AutoSpaceBeforeFDP|
% and |\NoAutoSpaceBeforeFDP| do the same and take care of the flag
-% |\ifFBAutoSpacePunctuation| in \LaTeX{}.\par}
+% |\ifFBAutoSpacePunctuation| in LaTeX{}.\par}
%
% Set the default now for Plain (done later for LaTeX).
% \begin{macrocode}
@@ -3600,64 +3541,41 @@ return french_punctuation
\providecommand*{\textbackslash}{{\char"005C}}
\providecommand*{\textasciicircum}{{\char"005E}}
\providecommand*{\textasciitilde}{{\char"007E}}
- \newcommand*{\FB@degre}{°}
+ \DeclareRobustCommand*{\degre}{°}
\else
- \ifLaTeXe
- \newcommand*{\FB@degre}{\r{}}
- \fi
+ \DeclareRobustCommand*{\degre}{\textdegree}
\fi
\DeclareRobustCommand*{\boi}{\textbackslash}
\DeclareRobustCommand*{\circonflexe}{\textasciicircum}
\DeclareRobustCommand*{\tild}{\textasciitilde}
-\DeclareRobustCommand*{\degre}{%
- \texorpdfstring{\FB@degre}{\textdegree}}
\newcommand*{\at}{@}
% \end{macrocode}
%
% \begin{macro}{\degres}
% We now define a macro |\degres| for typesetting the abbreviation
-% for `degrees’ (as in `degrees Celsius’). As the bounding box of
-% the character `degree’ has \emph{very} different widths in CM/EC
-% and PostScript fonts, we fix the width of the bounding box of
-% |\degres| to 0.3\,em, this lets the symbol `degree’ stick to the
-% preceding (e.g., |45\degres|) or following character
-% (e.g., |20~\degres C|). |\degres| works in math-mode (angles).
+% for `degrees’ (as in `°C’ or `°K’) in text fonts which also works
+% in math mode for angles.
%
% \changes{v2.6e}{2013/07/06}{Refrain from redefining \cs{textdegree}
% from latin1.def, applemac.def, etc. as \cs{degres} because it
% loops in hyperref’s bookmarks. Pointed out by Eddy Flas on fctt.}
%
-% If \TeX{} Companion fonts are available (\file{textcomp.sty}),
-% we pick up |\textdegree| from them instead of emulating `degrees’
-% from the |\r{}| accent. Otherwise we advise the user (once only)
-% to use TS1-encoding.
-%
% \changes{v2.1c}{2008/04/29}{Provide a temporary definition (hyperref
% safe) of \cs{degres} in case it has to be expanded in the preamble
% (by beamer’s \cs{title} command for instance).}
%
+% \changes{v3.6a}{2024/05/20}{Simplify \cs{degres} definition for text
+% and math mode: \cs{textdegree} always defined (TS1) since 2019.}
+%
% \begin{macrocode}
\DeclareRobustCommand*{\degres}{\degre}
\ifLaTeXe
\AtBeginDocument{%
- \@ifpackageloaded{fontspec}{}{%
- \ifdefined\DeclareEncodingSubset
- \DeclareRobustCommand*{\degres}{%
+ \@ifpackageloaded{fontspec}{}%
+ {\DeclareRobustCommand*{\degres}{%
\texorpdfstring{\hbox{\UseTextSymbol{TS1}{\textdegree}}}%
{\textdegree}}%
- \else
- \def\Warning@degree@TSone{\FBWarning
- {Degrees would look better in TS1-encoding:%
- \MessageBreak add \protect
- \usepackage{textcomp} to the preamble.%
- \MessageBreak Degrees used}}
- \DeclareRobustCommand*{\degres}{%
- \texorpdfstring{\hbox to 0.3em{\hss\degre\hss}%
- \Warning@degree@TSone
- \global\let\Warning@degree@TSone\relax}%
- {\textdegree}}%
- \fi
- }%
+ }%
}
\fi
% \end{macrocode}
@@ -4056,9 +3974,10 @@ return french_punctuation
% ua-thesis.cls… change it).
% If they are identical, \frenchb{} just adds a hook called
% |\FBCaption@Separator| to |\@makecaption|; |\FBCaption@Separator|
-% defaults to `:~’ as in the standard |\@makecaption| and will be
-% changed to `~:~’ in French `AtBeginDocument’; it can be also set to
-% |\CaptionSeparator| (` -- ’) using \fbo{CustomiseFigTabCaptions}.
+% defaults to `:~’ as in the standard definition of |\@makecaption|
+% and will be changed to `~:~’ in French `AtBeginDocument’;
+% it can be also set to |\CaptionSeparator| (` -- ’) using
+% \fbo{CustomiseFigTabCaptions}.
%
% \changes{v2.6c}{2013/05/18}{Former \cs{CaptionSeparator}
% has been renamed as \cs{FBCaption@Separator};
@@ -4076,7 +3995,7 @@ return french_punctuation
% active).
% \begin{macrocode}
\bgroup
- \catcode`:=12 \catcode`>=12 \relax
+ \catcode`: =12 \catcode`> =12 \relax
\long\gdef\STD@makecaption#1#2{%
\vskip\abovecaptionskip
\sbox\@tempboxa{#1: #2}%
@@ -4256,7 +4175,7 @@ return french_punctuation
% with XeTeX and LuaTeX.
%
% \changes{v2.0}{2006/11/06}{Added special case for LY1 encoding,
-% see bug report from Bruno Voisin (2004/05/18).}
+% see bug report from Bruno Voisin (2004/05/18).}
%
% \changes{v2.5f}{2011/06/18}{Unicode fonts also provide a ready made
% character for \cs{textellipsis}, let’s just use it!
@@ -4345,7 +4264,7 @@ return french_punctuation
}
% \end{macrocode}
%
-% \subsection{Setup options: keyval stuff}
+% \subsection{Setup options: key/value stuff (ltkeys)}
% \label{ssec-keyval}
%
% \changes{v2.0}{2006/11/06}{New command \cs{frenchbsetup} added
@@ -4355,125 +4274,34 @@ return french_punctuation
% reorganised, now \cs{babel@save} and\cs{babel@savevariable} are
% usable for French.}
%
-% All setup options are handled by command \fbsetup{} using the
-% keyval syntax. A list of flags is defined and set to a default
-% value which will possibly be changed `AtEndOfPackage’ if French is
-% the main language. After this, \fbsetup{} eventually modifies the
-% preset values of these flags.
+% \changes{v3.6a}{2024/05/16}{Internal `ltkeys’ replaces package
+% `keyval’ for options’ management.}
+%
+% All setup options are handled by command \fbsetup{} based on
+% the \file{ltkeys}’ |\SetKeys{}| command. A list of flags is
+% defined beforehand and set to default values which will possibly
+% be changed `AtEndOfPackage’ in case French is the main language.
+% After this, \fbsetup{} eventually modifies the preset values of
+% these flags.
%
-% {\sloppypar Option processing can occur either in \fbsetup{}, but
-% \emph{only for options explicitly set} by \fbsetup{}, or
+% {\sloppypar Some options processing occurs in \fbsetup{},
+% \emph{only for options explicitly set} by \fbsetup{}, the rest
% `AtBeginDocument’; any option affecting |\extrasfrench{}|
-% \emph{must} be processed by \fbsetup{}: when French is the main
-% language, |\extrasfrench{}| is executed by \babel{} when it
-% switches the main language and this occurs \emph{before} reading
+% \emph{must} be immediatelt processed by \fbsetup{}: when French is
+% the main language, |\extrasfrench{}| is executed by \babel{} when
+% it switches the main language and this occurs \emph{before} reading
% the stuff postponed by \frenchb{} `AtBeginDocument’. Reexecuting
-% |\extrasfrench{}| is an option which was used up to v2.6h, it has
-% been dropped in v3.0a because of its side-effects (f.i.\
-% |\babel@save| and |\babel@savevariable| did not work for
+% |\extrasfrench{}| is not an option because of its side-effects
+% (f.i.\ |\babel@save| and |\babel@savevariable| did not work for
% French).\par}
%
-% \begin{macro}{\frenchsetup}
-% Let’s now define this command which reads and sets the options
-% to be processed either immediately (i.e.\ just after setting the
-% key) or later (at |\begin{document}|) by |\FBprocess@options|.
-% \fbsetup{} can only be called in the preamble.
-%
-% \changes{v2.0c}{2007/06/25}{Option ThinSpaceInFrenchNumbers added.}
-%
-% \changes{v2.0d}{2007/07/15}{Options og and fg changed: limit
-% the definition to French so that quote characters can be used
-% in German.}
-%
-% \changes{v2.0e}{2007/10/05}{New option: StandardLists.}
-%
-% \changes{v2.0f}{2008/03/23}{Two typos corrected in
-% option StandardLists.}
-%
-% \changes{v2.0f}{2008/03/23}{StandardLayout option had no
-% effect on lists. Test moved to \cs{FBprocess@options}.}
-%
-% \changes{v2.0g}{2008/03/23}{Revert previous change to
-% StandardLayout. This option must set the three flags
-% \cs{FBReduceListSpacingfalse}, \cs{FBCompactItemizefalse},
-% and \cs{FBStandardItemLabeltrue} instead of
-% \cs{FBStandardListstrue}, so that later options can still
-% change their value before executing \cs{FBprocess@options}.
-% Same thing for option StandardLists.}
-%
-% \changes{v2.1a}{2008/03/24}{New option: FrenchSuperscripts
-% to define \cs{up} as \cs{fup} or as \cs{textsuperscript}.}
-%
-% \changes{v2.1a}{2008/03/30}{New option: LowercaseSuperscripts.}
-%
-% \changes{v2.2a}{2008/05/08}{The global layout of the document is
-% no longer changed when frenchb is not the last option of babel
-% (\cs{bbl@main@language}). Suggested by Ulrike Fischer.}
-%
-% \changes{v2.2a}{2008/05/08}{Default values of flags changed:
-% default now means `StandardLayout’, they will be changed to
-% `FrenchLayout’ AtEndOfPackage only if french is
-% \cs{bbl@main@language}.}
-%
-% \changes{v2.2a}{2008/05/08}{When frenchb is babel’s last option,
-% French becomes the document’s main language, so
-% GlobalLayoutFrench applies.}
-%
-% \changes{v2.4a}{2009/11/23}{New option SuppressWarning.}
-%
-% \changes{v2.6a}{2013/01/30}{New options ListOldLayout,
-% StandardItemizeEnv and StandardEnumerateEnv (CompactItemize is
-% deprecated).}
-%
-% \changes{v3.0a}{2014/02/28}{New options OldFigTabCaptions and
-% CustomiseFigTabCaptions.}
-%
-% \changes{v3.0c}{2014/04/18}{New option INGuillSpace.}
-%
-% \changes{v3.1a}{2014/05/20}{New options InnerGuillSingle,
-% EveryParGuill and EveryLineGuill to control \cs{frquote}.}
-%
-% \changes{v3.1b}{2014/09/15}{New option SmallCapsFigTabCaptions.}
-%
-% \changes{v3.1e}{2015/04/10}{Corrected typo: SmallCapsFigTabcaptions
-% instead of SmallCapsFigTabCaptions. Pointed out by Céline
-% Chevalier.}
-%
-% \changes{v3.1g}{2015/05/10}{PartNameFull now just sets the flag,
-% nothing to add to \cs{captionsfrench} when false.}
-%
-% \changes{v3.3a}{2017/04/30}{\cs{frenchbsetup} is now an alias for
-% \cs{frenchsetup}.}
-%
-% \changes{v3.3a}{2017/04/30}{Options INGuillSpace, ThinColonSpace no
-% longer delayed AtBeginDocument.}
-%
-% \changes{v3.5a}{2018/07/04}{New option ListItemsAsPar for displaying
-% lists’ items ``as paragraphs’’.}
-%
-% \changes{v3.5d}{2019/01/24}{ReduceListSpacing option depreciated: see
-% StandardListSpacing.}
-%
-% \begin{macrocode}
-\newcommand*{\frenchsetup}[1]{%
- \setkeys{FB}{#1}%
-}%
-\@onlypreamble\frenchsetup
-% \end{macrocode}
-% Keep the former name |\frenchbsetup| working for compatibility.
-% \begin{macrocode}
-\let\frenchbsetup\frenchsetup
-\@onlypreamble\frenchbsetup
-% \end{macrocode}
-%
-% We define a collection of conditionals with their defaults
-% (true or false).
+% We first define a collection of conditionals and set their
+% defaults (true or false).
%
% \begin{macrocode}
\newif\ifFBShowOptions
\newif\ifFBStandardLayout \FBStandardLayouttrue
\newif\ifFBGlobalLayoutFrench \FBGlobalLayoutFrenchtrue
-\newif\ifFBReduceListSpacing
\newif\ifFBStandardListSpacing \FBStandardListSpacingtrue
\newif\ifFBListOldLayout
\newif\ifFBListItemsAsPar
@@ -4498,25 +4326,6 @@ return french_punctuation
\newif\ifFBINGuillSpace
% \end{macrocode}
%
-% The defaults values of these flags have been choosen so that
-% \frenchb{} does not change anything regarding the global layout.
-% |\bbl@main@language|, set by the last option of \babel, controls
-% the global layout of the document. `AtEndOfPackage’ we check the
-% main language in |\bbl@main@language|; if it is French (or a
-% French dialect) the values of some flags have to be changed to
-% ensure a French looking layout for the whole document (even in
-% parts written in languages other than French); the end-user will
-% then be able to customise the values of all these flags with
-% \fbsetup{}.
-%
-% \changes{v2.5b}{2010/10/30}{Do not use the
-% test \cs{iflanguage}\{french\} to check whether French is the
-% main language or not, as it might be be erroneously positive
-% when English is the main language and no hyphenation patterns
-% are available for French.
-% In this case \cs{l@french} and \cs{l@english} are 0.
-% Pointed out by Günter Milde.}
-%
% \changes{v3.1g}{2015/05/10}{Bug fix for koma-scripts classes:
% a spurious dot was added by the \cs{partformat} command.}
%
@@ -4540,6 +4349,14 @@ return french_punctuation
\fi
% \end{macrocode}
%
+% \changes{v2.5b}{2010/10/30}{Do not use the
+% test \cs{iflanguage}\{french\} to check whether French is the
+% main language or not, as it might be be erroneously positive
+% when English is the main language and no hyphenation patterns
+% are available for French.
+% In this case \cs{l@french} and \cs{l@english} are 0.
+% Pointed out by Günter Milde.}
+%
% \changes{v3.0c}{2014/03/30}{No list customisation when beamer
% class is loaded.}
%
@@ -4553,6 +4370,13 @@ return french_punctuation
% options can no longer be toggled when French is not the main
% language.}
%
+% The defaults values of these flags are choosen so that
+% \frenchb{} does not change anything regarding the global layout.
+% Some of them must be toogled when French (or a French dialect) is
+% the main language. The latter (last option of \babel, stored in
+% |\bbl@main@language|) will be known `AtEndOfPackage’.
+% So we postpone the |\bbl@main@language| checking until then.
+%
% Our list customisation conflicts with the \cls{beamer} class and
% with the \pkg{beamerarticle} package. The patch provided in
% \pkg{beamerbasecompatibility} solves the conflict except in case
@@ -4600,206 +4424,304 @@ return french_punctuation
\FBAutoSpaceFootnotestrue
\FBCustomiseFigTabCaptionstrue
\fi
+}
+% \end{macrocode}
+%
+% \begin{macro}{\frenchsetup}
+% Let’s define the keys to be used in \fbsetup{}.
+% \begin{macrocode}
+\DeclareKeys[FBsetup]
+ {
+ ShowOptions.if = FBShowOptions ,
+ StandardLayout.default:n = {true} ,
+ StandardLayout.code = \FBStandardLayout@setup{#1} ,
+ GlobalLayoutFrench.default:n = {true} ,
+ GlobalLayoutFrench.code = \FBGlobalLayout@setup{#1} ,
+ StandardListSpacing.if = FBStandardListSpacing ,
+ ReduceListSpacing.ifnot = FBStandardListSpacing ,
+ ListOldLayout.default:n = {true} ,
+ ListOldLayout.code = \FBListOldLayout@setup{#1} ,
+ CompactItemize.default:n = {true} ,
+ CompactItemize.code = \FBCompactItemize@setup{#1} ,
+ StandardItemizeEnv.if = FBStandardItemizeEnv ,
+ StandardEnumerateEnv.if = FBStandardEnumerateEnv ,
+ StandardItemLabels.if = FBStandardItemLabels ,
+ ItemLabels.store = \FrenchLabelItem ,
+ ItemLabeli.store = \Frlabelitemi ,
+ ItemLabelii.store = \Frlabelitemii ,
+ ItemLabeliii.store = \Frlabelitemiii ,
+ ItemLabeliv.store = \Frlabelitemiv ,
+ StandardLists.default:n = {true} ,
+ StandardLists.code = \FBStandardLists@setup{#1} ,
+ ListItemsAsPar.if = FBListItemsAsPar ,
+ IndentFirst.if = FBIndentFirst ,
+ FrenchFootnotes.if = FBFrenchFootnotes ,
+ AutoSpaceFootnotes.if = FBAutoSpaceFootnotes ,
+ AutoSpacePunctuation.if = FBAutoSpacePunctuation ,
+ OriginalTypewriter.if = FBOriginalTypewriter ,
+ ThinColonSpace.default:n = {true} ,
+ ThinColonSpace.code = \FBThinColonSpace@setup{#1} ,
+ ThinSpaceInFrenchNumbers.if = FBThinSpaceInFrenchNumbers ,
+ FrenchSuperscripts.if = FBFrenchSuperscripts ,
+ LowercaseSuperscripts.if = FBLowercaseSuperscripts ,
+ PartNameFull.if = FBPartNameFull ,
+ CustomiseFigTabCaptions.if = FBCustomiseFigTabCaptions ,
+ OldFigTabCaptions.default:n = {true} ,
+ OldFigTabCaptions.code = \FBOldFigTabCaptions@setup{#1} ,
+ SmallCapsFigTabCaptions.default:n = {true} ,
+ SmallCapsFigTabCaptions.code = \FBSmallCapsFigTabCaptions@setup{#1} ,
+ SuppressWarning.default:n = {true} ,
+ SuppressWarning.code = \FBSuppressWarning@setup{#1} ,
+ INGuillSpace.default:n = {true} ,
+ INGuillSpace.code = \FBINGuillSpace@setup{#1} ,
+ InnerGuillSingle.if = FBInnerGuillSingle ,
+ EveryParGuill.default:n = {open} ,
+ EveryParGuill.code = \FBEveryParGuill@setup{#1} ,
+ EveryLineGuill.default:n = {open} ,
+ EveryLineGuill.code = \FBEveryLineGuill@setup{#1} ,
+ UnicodeNoBreakSpaces.default:n = {true} ,
+ UnicodeNoBreakSpaces.code = \FBUnicodeNoBreakSpaces@setup{#1} ,
+ og.code = \FBog@setup{#1} ,
+ fg.code = \FBfg@setup{#1} ,
+}
% \end{macrocode}
-% \frenchb{} being an option of \babel, it cannot load a package
-% (\pkg{keyval}) while \file{french.ldf} is read, so we defer the
-% loading of \file{keyval} and the options setup at the end of
-% \babel’s loading.
+%
+% Let’s now define this command which reads and sets the options
+% to be processed either immediately (i.e.\ just after setting the
+% key) or later (at |\begin{document}|) by |\FBprocess@options|.
+% \fbsetup{} can only be called in the preamble.
+%
+% \changes{v2.0c}{2007/06/25}{Option ThinSpaceInFrenchNumbers added.}
+%
+% \changes{v2.0d}{2007/07/15}{Options og and fg changed: limit
+% the definition to French so that quote characters can be used
+% in German.}
+%
+% \changes{v2.0e}{2007/10/05}{New option: StandardLists.}
+%
+% \changes{v2.0f}{2008/03/23}{Two typos corrected in
+% option StandardLists.}
+%
+% \changes{v2.0f}{2008/03/23}{StandardLayout option had no
+% effect on lists. Test moved to \cs{FBprocess@options}.}
+%
+% \changes{v2.0g}{2008/03/23}{Revert previous change to
+% StandardLayout. This option must set the three flags
+% \cs{FBReduceListSpacingfalse}, \cs{FBCompactItemizefalse},
+% and \cs{FBStandardItemLabeltrue} instead of
+% \cs{FBStandardListstrue}, so that later options can still
+% change their value before executing \cs{FBprocess@options}.
+% Same thing for option StandardLists.}
+%
+% \changes{v2.1a}{2008/03/24}{New option: FrenchSuperscripts
+% to define \cs{up} as \cs{fup} or as \cs{textsuperscript}.}
+%
+% \changes{v2.1a}{2008/03/30}{New option: LowercaseSuperscripts.}
+%
+% \changes{v2.2a}{2008/05/08}{The global layout of the document is
+% no longer changed when frenchb is not the last option of babel
+% (\cs{bbl@main@language}). Suggested by Ulrike Fischer.}
+%
+% \changes{v2.2a}{2008/05/08}{Default values of flags changed:
+% default now means `StandardLayout’, they will be changed to
+% `FrenchLayout’ AtEndOfPackage only if french is
+% \cs{bbl@main@language}.}
+%
+% \changes{v2.2a}{2008/05/08}{When frenchb is babel’s last option,
+% French becomes the document’s main language, so
+% GlobalLayoutFrench applies.}
+%
+% \changes{v2.4a}{2009/11/23}{New option SuppressWarning.}
+%
+% \changes{v2.6a}{2013/01/30}{New options ListOldLayout,
+% StandardItemizeEnv and StandardEnumerateEnv (CompactItemize is
+% deprecated).}
+%
+% \changes{v3.0a}{2014/02/28}{New options OldFigTabCaptions and
+% CustomiseFigTabCaptions.}
+%
+% \changes{v3.0c}{2014/04/18}{New option INGuillSpace.}
+%
+% \changes{v3.1a}{2014/05/20}{New options InnerGuillSingle,
+% EveryParGuill and EveryLineGuill to control \cs{frquote}.}
+%
+% \changes{v3.1b}{2014/09/15}{New option SmallCapsFigTabCaptions.}
+%
+% \changes{v3.1e}{2015/04/10}{Corrected typo: SmallCapsFigTabcaptions
+% instead of SmallCapsFigTabCaptions. Pointed out by Céline
+% Chevalier.}
+%
+% \changes{v3.1g}{2015/05/10}{PartNameFull now just sets the flag,
+% nothing to add to \cs{captionsfrench} when false.}
+%
+% \changes{v3.3a}{2017/04/30}{\cs{frenchbsetup} is now an alias for
+% \cs{frenchsetup}.}
+%
+% \changes{v3.3a}{2017/04/30}{Options INGuillSpace, ThinColonSpace no
+% longer delayed AtBeginDocument.}
+%
+% \changes{v3.5a}{2018/07/04}{New option ListItemsAsPar for displaying
+% lists’ items ``as paragraphs’’.}
+%
+% \changes{v3.5d}{2019/01/24}{ReduceListSpacing option depreciated: see
+% StandardListSpacing.}
+%
% \begin{macrocode}
- \RequirePackage{keyval}%
- \define@key{FB}{ShowOptions}[true]%
- {\csname FBShowOptions#1\endcsname}%
+\newcommand*{\frenchsetup}[1]{%
+ \SetKeys[FBsetup]{#1}%
+}%
+\@onlypreamble\frenchsetup
% \end{macrocode}
-% The next two keys can only be toggled when French is the main
-% language.
+% Keep the former name |\frenchbsetup| working for compatibility.
% \begin{macrocode}
- \define@key{FB}{StandardLayout}[true]%
- {\ifFB@mainlanguage@FR
- \csname FBStandardLayout#1\endcsname
- \else
- \PackageWarning{french.ldf}%
- {Option `StandardLayout' skipped:\MessageBreak
- French is *not* babel's last option.\MessageBreak
- Reported}%
- \fi
- \ifFBStandardLayout
- \FBStandardListSpacingtrue
- \FBStandardItemizeEnvtrue
- \FBStandardItemLabelstrue
- \FBStandardEnumerateEnvtrue
- \FBIndentFirstfalse
- \FBFrenchFootnotesfalse
- \FBAutoSpaceFootnotesfalse
- \else
- \FBStandardListSpacingfalse
- \FBStandardItemizeEnvfalse
- \FBStandardItemLabelsfalse
- \FBStandardEnumerateEnvfalse
- \FBIndentFirsttrue
- \FBFrenchFootnotestrue
- \FBAutoSpaceFootnotestrue
- \fi}%
- \define@key{FB}{GlobalLayoutFrench}[true]%
- {\ifFB@mainlanguage@FR
- \csname FBGlobalLayoutFrench#1\endcsname
- \else
- \PackageWarning{french.ldf}%
- {Option `GlobalLayoutFrench' skipped:\MessageBreak
- French is *not* babel's last option.\MessageBreak
- Reported}%
- \fi}%
+\let\frenchbsetup\frenchsetup
+\@onlypreamble\frenchbsetup
% \end{macrocode}
-% If this key is set to \fbo{true} when French is the main language,
-% nothing to do: all flags keep their default value.
-% If this key is set to \fbo{false}, nothing to do either:
-% |\babel@save| will do the job at every language’s switch.
-% \begin{macrocode}
- \define@key{FB}{ReduceListSpacing}[true]%
- {\csname FBReduceListSpacing#1\endcsname
- \ifFBReduceListSpacing \FBStandardListSpacingfalse
- \else \FBStandardListSpacingtrue\fi
- }%
- \define@key{FB}{StandardListSpacing}[true]%
- {\csname FBStandardListSpacing#1\endcsname}%
- \define@key{FB}{ListOldLayout}[true]%
- {\csname FBListOldLayout#1\endcsname
- \ifFBListOldLayout
- \FBStandardEnumerateEnvtrue
- \renewcommand*{\FrenchLabelItem}{\textendash}%
- \fi}%
- \define@key{FB}{CompactItemize}[true]%
- {\csname FBCompactItemize#1\endcsname
- \ifFBCompactItemize
- \FBStandardItemizeEnvfalse
- \FBStandardEnumerateEnvfalse
- \else
- \FBStandardItemizeEnvtrue
- \FBStandardEnumerateEnvtrue
- \fi}%
- \define@key{FB}{StandardItemizeEnv}[true]%
- {\csname FBStandardItemizeEnv#1\endcsname}%
- \define@key{FB}{StandardEnumerateEnv}[true]%
- {\csname FBStandardEnumerateEnv#1\endcsname}%
- \define@key{FB}{StandardItemLabels}[true]%
- {\csname FBStandardItemLabels#1\endcsname}%
- \define@key{FB}{ItemLabels}%
- {\renewcommand*{\FrenchLabelItem}{#1}}%
- \define@key{FB}{ItemLabeli}%
- {\renewcommand*{\Frlabelitemi}{#1}}%
- \define@key{FB}{ItemLabelii}%
- {\renewcommand*{\Frlabelitemii}{#1}}%
- \define@key{FB}{ItemLabeliii}%
- {\renewcommand*{\Frlabelitemiii}{#1}}%
- \define@key{FB}{ItemLabeliv}%
- {\renewcommand*{\Frlabelitemiv}{#1}}%
- \define@key{FB}{StandardLists}[true]%
- {\csname FBStandardLists#1\endcsname
- \ifFBStandardLists
- \FBStandardListSpacingtrue
- \FBStandardItemizeEnvtrue
- \FBStandardEnumerateEnvtrue
- \FBStandardItemLabelstrue
- \else
- \FBStandardListSpacingfalse
- \FBStandardItemizeEnvfalse
- \FBStandardEnumerateEnvfalse
- \FBStandardItemLabelsfalse
- \fi}%
- \define@key{FB}{ListItemsAsPar}[true]%
- {\csname FBListItemsAsPar#1\endcsname}
- \define@key{FB}{IndentFirst}[true]%
- {\csname FBIndentFirst#1\endcsname}%
- \define@key{FB}{FrenchFootnotes}[true]%
- {\csname FBFrenchFootnotes#1\endcsname}%
- \define@key{FB}{AutoSpaceFootnotes}[true]%
- {\csname FBAutoSpaceFootnotes#1\endcsname}%
- \define@key{FB}{AutoSpacePunctuation}[true]%
- {\csname FBAutoSpacePunctuation#1\endcsname}%
- \define@key{FB}{OriginalTypewriter}[true]%
- {\csname FBOriginalTypewriter#1\endcsname}%
- \define@key{FB}{ThinColonSpace}[true]%
- {\csname FBThinColonSpace#1\endcsname
- \ifFBThinColonSpace
- \renewcommand*{\FBcolonspace}{\FBthinspace}%
- \fi}%
- \define@key{FB}{ThinSpaceInFrenchNumbers}[true]%
- {\csname FBThinSpaceInFrenchNumbers#1\endcsname}%
- \define@key{FB}{FrenchSuperscripts}[true]%
- {\csname FBFrenchSuperscripts#1\endcsname}
- \define@key{FB}{LowercaseSuperscripts}[true]%
- {\csname FBLowercaseSuperscripts#1\endcsname}
- \define@key{FB}{PartNameFull}[true]%
- {\csname FBPartNameFull#1\endcsname}%
- \define@key{FB}{CustomiseFigTabCaptions}[true]%
- {\csname FBCustomiseFigTabCaptions#1\endcsname}%
- \define@key{FB}{OldFigTabCaptions}[true]%
- {\csname FBOldFigTabCaptions#1\endcsname
- \ifFBOldFigTabCaptions
- \def\FB@capsep@fix{\babel@save\FBCaption@Separator
- \def\FBCaption@Separator{\CaptionSeparator}}%
+%
+% The following commands, defined with property |.code| in
+% |DeclareKeys{}|, execute some post-treatment required to
+% immediately take the flags value into account.
+% \begin{macrocode}
+\newcommand*{\FBStandardLayout@setup}[1]%
+ {\ifFB@mainlanguage@FR
+ \csname FBStandardLayout#1\endcsname
+ \else
+ \PackageWarning{french.ldf}%
+ {Option `StandardLayout' skipped:\MessageBreak
+ French is *not* babel's last option.\MessageBreak
+ Reported}%
+ \fi
+ \ifFBStandardLayout
+ \FBStandardListSpacingtrue
+ \FBStandardItemizeEnvtrue
+ \FBStandardItemLabelstrue
+ \FBStandardEnumerateEnvtrue
+ \FBIndentFirstfalse
+ \FBFrenchFootnotesfalse
+ \FBAutoSpaceFootnotesfalse
+ \else
+ \FBStandardListSpacingfalse
+ \FBStandardItemizeEnvfalse
+ \FBStandardItemLabelsfalse
+ \FBStandardEnumerateEnvfalse
+ \FBIndentFirsttrue
+ \FBFrenchFootnotestrue
+ \FBAutoSpaceFootnotestrue
+ \fi
+ }
+\newcommand*{\FBGlobalLayout@setup}[1]%
+ {\ifFB@mainlanguage@FR
+ \csname FBGlobalLayoutFrench#1\endcsname
+ \else
+ \PackageWarning{french.ldf}%
+ {Option `GlobalLayoutFrench' skipped:\MessageBreak
+ French is *not* babel's last option.\MessageBreak
+ Reported}%
+ \fi
+ }
+\newcommand*{\FB@ListOldLayout@setup}[1]%
+ {\csname FBListOldLayout#1\endcsname
+ \ifFBListOldLayout
+ \FBStandardEnumerateEnvtrue
+ \renewcommand*{\FrenchLabelItem}{\textendash}%
+ \fi
+ }
+\newcommand*{\FB@CompactItemize@setup}[1]%
+ {\csname FBCompactItemize#1\endcsname
+ \ifFBCompactItemize
+ \FBStandardItemizeEnvfalse
+ \FBStandardEnumerateEnvfalse
+ \else
+ \FBStandardItemizeEnvtrue
+ \FBStandardEnumerateEnvtrue
+ \fi
+ }
+\newcommand*{\FBStandardLists@setup}[1]%
+ {\csname FBStandardLists#1\endcsname
+ \ifFBStandardLists
+ \FBStandardListSpacingtrue
+ \FBStandardItemizeEnvtrue
+ \FBStandardEnumerateEnvtrue
+ \FBStandardItemLabelstrue
+ \else
+ \FBStandardListSpacingfalse
+ \FBStandardItemizeEnvfalse
+ \FBStandardEnumerateEnvfalse
+ \FBStandardItemLabelsfalse
+ \fi
+ }
+\newcommand*{\FBThinColonSpace@setup}[1]%
+ {\csname FBThinColonSpace#1\endcsname
+ \ifFBThinColonSpace
+ \renewcommand*{\FBcolonspace}{\FBthinspace}%
+ \fi
+ }
+\newcommand*{\FBOldFigTabCaptions@setup}[1]%
+ {\csname FBOldFigTabCaptions#1\endcsname
+ \ifFBOldFigTabCaptions
+ \def\FB@capsep@fix{\babel@save\FBCaption@Separator
+ \def\FBCaption@Separator{\CaptionSeparator}}%
\addto\extrasfrench{\FB@capsep@fix}%
\ifdefined\extrasacadian
\addto\extrasacadian{\FB@capsep@fix}%
\fi
- \fi}%
- \define@key{FB}{SmallCapsFigTabCaptions}[true]%
- {\csname FBSmallCapsFigTabCaptions#1\endcsname
- \ifFBSmallCapsFigTabCaptions
- \else \let\FBfigtabshape\relax \fi}%
- \define@key{FB}{SuppressWarning}[true]%
- {\csname FBSuppressWarning#1\endcsname
- \ifFBSuppressWarning
- \renewcommand{\FBWarning}[1]{}%
- \fi}%
-% \end{macrocode}
-% Here are the options controlling French guillemets spacing
-% and the output of |\frquote{}|.
-%
-% \changes{v3.2g}{2017/01/30}{Warn when wrong values are provided to
-% options EveryParGuill or EveryLineGuill.}
-%
-% \begin{macrocode}
- \define@key{FB}{INGuillSpace}[true]%
- {\csname FBINGuillSpace#1\endcsname
- \ifFBINGuillSpace
- \renewcommand*{\FBguillspace}{\space}%
- \fi}%
- \define@key{FB}{InnerGuillSingle}[true]%
- {\csname FBInnerGuillSingle#1\endcsname}%
- \define@key{FB}{EveryParGuill}[open]%
- {\expandafter\let\expandafter
- \FBeveryparguill\csname FBguill#1\endcsname
- \ifx\FBeveryparguill\FBguillopen
- \else\ifx\FBeveryparguill\FBguillclose
- \else\ifx\FBeveryparguill\FBguillnone
- \else
- \let\FBeveryparguill\FBguillopen
- \FBWarning{Wrong value for `EveryParGuill':
- try `open',\MessageBreak
- `close' or `none'. Reported}%
- \fi
- \fi
- \fi}%
- \define@key{FB}{EveryLineGuill}[open]%
- {\ifFB@luatex@punct
- \expandafter\let\expandafter
- \FBeverylineguill\csname FBguill#1\endcsname
- \ifx\FBeverylineguill\FBguillopen
- \else\ifx\FBeverylineguill\FBguillclose
- \else\ifx\FBeverylineguill\FBguillnone
- \else
- \let\FBeverylineguill\FBguillnone
- \FBWarning{Wrong value for `EveryLineGuill':
- try `open',\MessageBreak
- `close' or `none'. Reported}%
- \fi
- \fi
- \fi
- \else
- \FBWarning{Option `EveryLineGuill' skipped:%
- \MessageBreak this option is for
- LuaTeX *only*.\MessageBreak Reported}%
- \fi}%
+ \fi
+ }
+\newcommand*{\FBSmallCapsFigTabCaptions@setup}[1]%
+ {\csname FBSmallCapsFigTabCaptions#1\endcsname
+ \ifFBSmallCapsFigTabCaptions
+ \else
+ \let\FBfigtabshape\relax
+ \fi
+ }
+\newcommand*{\FBSuppressWarning@setup}[1]%
+ {\csname FBSuppressWarning#1\endcsname
+ \ifFBSuppressWarning
+ \renewcommand{\FBWarning}[1]{}%
+ \fi
+ }
+\newcommand*{\FBINGuillSpace@setup}[1]%
+ {\csname FBINGuillSpace#1\endcsname
+ \ifFBINGuillSpace
+ \renewcommand*{\FBguillspace}{\space}%
+ \fi
+ }
+\newcommand*{\FBEveryParGuill@setup}[1]%
+ {\expandafter\let\expandafter
+ \FBeveryparguill\csname FBguill#1\endcsname
+ \ifx\FBeveryparguill\FBguillopen
+ \else\ifx\FBeveryparguill\FBguillclose
+ \else\ifx\FBeveryparguill\FBguillnone
+ \else
+ \let\FBeveryparguill\FBguillopen
+ \FBWarning{Wrong value for `EveryParGuill':
+ try `open',\MessageBreak
+ `close' or `none'. Reported}%
+ \fi
+ \fi
+ \fi
+ }
+\newcommand*{\FBEveryLineGuill@setup}[1]%
+ {\ifFB@luatex@punct
+ \expandafter\let\expandafter
+ \FBeverylineguill\csname FBguill#1\endcsname
+ \ifx\FBeverylineguill\FBguillopen
+ \else\ifx\FBeverylineguill\FBguillclose
+ \else\ifx\FBeverylineguill\FBguillnone
+ \else
+ \let\FBeverylineguill\FBguillnone
+ \FBWarning{Wrong value for `EveryLineGuill':
+ try `open',\MessageBreak
+ `close' or `none'. Reported}%
+ \fi
+ \fi
+ \fi
+ \else
+ \FBWarning{Option `EveryLineGuill' skipped:%
+ \MessageBreak this option is for
+ LuaTeX *only*.\MessageBreak Reported}%
+ \fi
+ }
% \end{macrocode}
%
% \changes{v3.3c}{2017/07/23}{New option `UnicodeNoBreakSpaces’ for
@@ -4807,20 +4729,21 @@ return french_punctuation
%
% Option \fbo{UnicodeNoBreakSpaces} (LuaLaTeX only) is meant for
% HTML translators: when true, all non-breaking spaces added by
-% \frenchb{} are coded in the PDF file as Unicode characters, namely
-% U+A0 or U+202F, instead of penalties and glues.
+% \frenchb{} are coded in the PDF file as Unicode characters,
+% namely U+A0 or U+202F, instead of penalties and glues.
% \begin{macrocode}
- \define@key{FB}{UnicodeNoBreakSpaces}[true]%
- {\ifFB@luatex@punct
- \csname FBucsNBSP#1\endcsname
- \ifFBucsNBSP \FB@ucsNBSP=\@ne \fi
- \else
- \FBWarning{Option `UnicodeNoBreakSpaces' skipped:%
- \MessageBreak this option is for
- LuaTeX *only*.\MessageBreak Reported}%
- \fi
- }%
+\newcommand*{\FBUnicodeNoBreakSpaces@setup}[1]%
+ {\ifFB@luatex@punct
+ \csname FBucsNBSP#1\endcsname
+ \ifFBucsNBSP \FB@ucsNBSP=\@ne \fi
+ \else
+ \FBWarning{Option `UnicodeNoBreakSpaces' skipped:%
+ \MessageBreak this option is for
+ LuaTeX *only*.\MessageBreak Reported}%
+ \fi
+ }%
% \end{macrocode}
+%
% Inputing French quotes as \emph{single characters} when they are
% available on the keyboard (through a compose key for instance)
% is more comfortable than typing |\og| and |\fg|.
@@ -4861,145 +4784,145 @@ return french_punctuation
% it can be single-byte (latin1, latin9, applemac,…) or
% multi-bytes (utf-8, utf8x); the next command is meant for checking
% whether a character is single-byte (|\FB@second| is empty) or not.
-% \begin{macrocode}
- \def\FB@parse#1#2\endparse{\def\FB@second{#2}}%
-% \end{macrocode}
%
% \begin{macrocode}
- \define@key{FB}{og}%
- {\ifFBunicode
+\def\FB@parse#1#2\endparse{\def\FB@second{#2}}%
+\newcommand*{\FB@@og}%
+ {\ifFBfrench
+ \ifFB@spacing \FB@og\ignorespaces
+ \else \guillemotleft
+ \fi
+ \else \guillemotleft
+ \fi
+ }
+\newcommand*{\FB@@fg}%
+ {\ifFBfrench
+ \ifFB@spacing \FB@fg
+ \else \guillemotright
+ \fi
+ \else \guillemotright
+ \fi
+ }
+\newcommand*{\FBog@setup}[1]%
+ {\ifFBunicode
% \end{macrocode}
% LuaTeX or XeTeX in use, first try modern LuaTeX: we just need
% to set LuaTeX’s attribute |\FB@addGUILspace| to 1,
% \begin{macrocode}
- \ifFB@luatex@punct
- \FB@addGUILspace=1 \relax
- \fi
+ \ifFB@luatex@punct
+ \FB@addGUILspace=1 \relax
+ \fi
% \end{macrocode}
% then with XeTeX it is a bit more tricky:
% \begin{macrocode}
- \ifFB@xetex@punct
+ \ifFB@xetex@punct
% \end{macrocode}
% |\XeTeXinterchartokenstate| is defined, we just need to set
% |\XeTeXcharclass| to |\FB@guilo| for the French opening quote
% in T1 and Unicode encoding (see subsection~\ref{ssec-punct}).
% \begin{macrocode}
- \XeTeXcharclass"13 = \FB@guilo
- \XeTeXcharclass"AB = \FB@guilo
- \XeTeXcharclass"A0 = \FB@guilnul
- \XeTeXcharclass"202F = \FB@guilnul
- \fi
+ \XeTeXcharclass"13 = \FB@guilo
+ \XeTeXcharclass"AB = \FB@guilo
+ \XeTeXcharclass"A0 = \FB@guilnul
+ \XeTeXcharclass"202F = \FB@guilnul
+ \fi
% \end{macrocode}
% Issue a warning with older Unicode engines requiring active
% characters.
% \begin{macrocode}
- \ifFB@active@punct
- \FBWarning{Option og=« not supported with this version
- of\MessageBreak LuaTeX/XeTeX; reported}%
- \fi
- \else
+ \ifFB@active@punct
+ \FBWarning{Option og=« not supported with this version of
+ \MessageBreak LuaTeX/XeTeX; reported}% »
+ \fi
+ \else
% \end{macrocode}
% This is for conventional TeX engines:
% \begin{macrocode}
- \newcommand*{\FB@@og}{%
- \ifFBfrench
- \ifFB@spacing\FB@og\ignorespaces
- \else\guillemotleft
- \fi
- \else\guillemotleft\fi}%
- \AtBeginDocument{%
- \ifdefined\uc@dclc
+ \AtBeginDocument{%
+ \ifdefined\uc@dclc
% \end{macrocode}
% Package \pkg{inputenc} with utf8x (ucs) encoding loaded,
% use |\uc@dclc|:
% \begin{macrocode}
- \uc@dclc{171}{default}{\FB@@og}%
- \else
+ \uc@dclc{171}{default}{\FB@@og}%
+ \else
% \end{macrocode}
% if encoding is not utf8x, check if the argument of |og|
% is a single-byte character:
% \begin{macrocode}
- \FB@parse#1\endparse
- \ifx\FB@second\@empty
+ \FB@parse#1\endparse
+ \ifx\FB@second\@empty
% \end{macrocode}
% This means 8-bit character encoding.
% Package \pkg{MULEenc} (from CJK) defines |\mule@def|
% to map characters to control sequences.
% \begin{macrocode}
- \ifdefined\mule@def
- \mule@def{11}{\FB@@og}%
- \else
- \ifdefined\DeclareInputText
- \@tempcnta`#1\relax
- \DeclareInputText{\the\@tempcnta}{\FB@@og}%
- \else
+ \ifdefined\mule@def
+ \mule@def{11}{\FB@@og}%
+ \else
+ \ifdefined\DeclareInputText
+ \@tempcnta`#1\relax
+ \DeclareInputText{\the\@tempcnta}{\FB@@og}%
+ \else
% \end{macrocode}
% Package \pkg{inputenc} not loaded, no way…
% \begin{macrocode}
- \FBWarning{Option `og' requires package
- inputenc;\MessageBreak reported}%
- \fi
- \fi
- \else
+ \FBWarning{Option `og' requires package
+ inputenc;\MessageBreak reported}%
+ \fi
+ \fi
+ \else
% \end{macrocode}
% This means multi-byte character encoding, we assume UTF-8
% \begin{macrocode}
- \DeclareUnicodeCharacter{00AB}{\FB@@og}%
- \fi
- \fi}%
- \fi
- }%
+ \DeclareUnicodeCharacter{00AB}{\FB@@og}%
+ \fi
+ \fi}%
+ \fi
+ }
% \end{macrocode}
%
% Same code for the closing quote.
% \begin{macrocode}
- \define@key{FB}{fg}%
- {\ifFBunicode
- \ifFB@luatex@punct
- \FB@addGUILspace=1 \relax
- \fi
- \ifFB@xetex@punct
- \XeTeXcharclass"14 = \FB@guilf
- \XeTeXcharclass"BB = \FB@guilf
- \XeTeXcharclass"A0 = \FB@guilnul
- \XeTeXcharclass"202F = \FB@guilnul
- \fi
- \ifFB@active@punct
- \FBWarning{Option fg=» not supported with this version
- of\MessageBreak LuaTeX/XeTeX; reported}%
- \fi
- \else
- \newcommand*{\FB@@fg}{%
- \ifFBfrench
- \ifFB@spacing\FB@fg
- \else\guillemotright
- \fi
- \else\guillemotright\fi}%
- \AtBeginDocument{%
- \ifdefined\uc@dclc
- \uc@dclc{187}{default}{\FB@@fg}%
- \else
- \FB@parse#1\endparse
- \ifx\FB@second\@empty
- \ifdefined\mule@def
- \mule@def{27}{{\FB@@fg}}%
- \else
- \ifdefined\DeclareInputText
- \@tempcnta`#1\relax
- \DeclareInputText{\the\@tempcnta}{\FB@@fg}%
- \else
- \FBWarning{Option `fg' requires package
- inputenc;\MessageBreak reported}%
- \fi
- \fi
- \else
- \DeclareUnicodeCharacter{00BB}{\FB@@fg}%
- \fi
- \fi}%
- \fi
- }%
-}
-% \end{macrocode}
+\newcommand*{\FBfg@setup}[1]%
+ {\ifFBunicode
+ \ifFB@luatex@punct
+ \FB@addGUILspace=1 \relax
+ \fi
+ \ifFB@xetex@punct
+ \XeTeXcharclass"14 = \FB@guilf
+ \XeTeXcharclass"BB = \FB@guilf
+ \XeTeXcharclass"A0 = \FB@guilnul
+ \XeTeXcharclass"202F = \FB@guilnul
+ \fi
+ \ifFB@active@punct
+ \FBWarning{Option fg=» not supported with this version of
+ \MessageBreak LuaTeX/XeTeX; reported}%
+ \fi
+ \else
+ \AtBeginDocument{%
+ \ifdefined\uc@dclc
+ \uc@dclc{187}{default}{\FB@@fg}%
+ \else
+ \FB@parse#1\endparse
+ \ifx\FB@second\@empty
+ \ifdefined\mule@def
+ \mule@def{27}{{\FB@@fg}}%
+ \else
+ \ifdefined\DeclareInputText
+ \@tempcnta`#1\relax
+ \DeclareInputText{\the\@tempcnta}{\FB@@fg}%
+ \else
+ \FBWarning{Option `fg' requires package
+ inputenc;\MessageBreak reported}%
+ \fi
+ \fi
+ \else
+ \DeclareUnicodeCharacter{00BB}{\FB@@fg}%
+ \fi
+ \fi}%
+ \fi
+ }
% \end{macro}
%
% \begin{macro}{\FBprocess@options}
@@ -5113,8 +5036,8 @@ return french_punctuation
%
% When package \pkg{numprint} is loaded with option
% \opt{autolanguage}, \pkg{numprint}’s command |\npstylefrench| has
-% to be redefined differently according to the value of flag
-% \fbo{ThinSpaceInFrenchNumbers}.
+% to be redefined differently according to the value of
+% flag\linebreak \fbo{ThinSpaceInFrenchNumbers}.
% As |\npstylefrench| was undefined in old versions of
% \pkg{numprint}, we provide this command.
% \begin{macrocode}
@@ -5122,17 +5045,16 @@ return french_punctuation
{\ifnprt@autolanguage
\providecommand*{\npstylefrench}{}%
\ifFBThinSpaceInFrenchNumbers
- \renewcommand*{\FBthousandsep}{\,}%
+ \renewcommand*{\FBthousandsep}{\FBthinspace}%
\fi
\g@addto@macro\npstylefrench{\npthousandsep{\FBthousandsep}}%
\fi
}{}%
% \end{macrocode}
% \fbo{FrenchSuperscripts}: if \fbo{true} |\up=\fup|, else
-% |\up=\textsuperscript|. Anyway |\up*=\FB@up@fake|. The star-form
-% |\up*{}| is provided for fonts that lack some superior letters:
-% Adobe Jenson Pro and Utopia Expert have no ``g superior’’ for
-% instance.
+% |\up=\textsuperscript|. The star-form |\up*=\FB@up@fake| is
+% provided for fonts that lack some superior letters: Adobe Jenson
+% Pro and Utopia Expert have no ``g superior’’ for instance.
% \begin{macrocode}
\ifFBFrenchSuperscripts
\DeclareRobustCommand*{\up}{%
@@ -5275,9 +5197,8 @@ return french_punctuation
% Reported by Sébastien Gouezel.}
%
% At |\begin{document}|, we have to provide an |\xspace| command
-% in case the \pkg{xspace} package is not loaded, do some setup for
-% \file{hyperref}’s bookmarks, execute |\FBprocess@options|, switch
-% LuaTeX punctuation on and issue some warnings if necessary.
+% in case the \pkg{xspace} package is not loaded and execute
+% |\FBprocess@options|.
% \begin{macrocode}
\AtBeginDocument{%
\providecommand*{\xspace}{\relax}%
@@ -5426,13 +5347,14 @@ return french_punctuation
% \begin{macro}{\Frlabelitemii}
% \begin{macro}{\Frlabelitemiii}
% \begin{macro}{\Frlabelitemiv}
-% Default labels for French itemize-lists (same label for all levels):
+% Default labels for French itemize-lists ---same label for all
+% levels---, (already defined as empty by |\DeclareKey{}|):
% \begin{macrocode}
-\newcommand*{\FrenchLabelItem}{\textemdash}
-\newcommand*{\Frlabelitemi}{\FrenchLabelItem}
-\newcommand*{\Frlabelitemii}{\FrenchLabelItem}
-\newcommand*{\Frlabelitemiii}{\FrenchLabelItem}
-\newcommand*{\Frlabelitemiv}{\FrenchLabelItem}
+\renewcommand*{\FrenchLabelItem}{\textemdash}
+\renewcommand*{\Frlabelitemi}{\FrenchLabelItem}
+\renewcommand*{\Frlabelitemii}{\FrenchLabelItem}
+\renewcommand*{\Frlabelitemiii}{\FrenchLabelItem}
+\renewcommand*{\Frlabelitemiv}{\FrenchLabelItem}
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -5444,14 +5366,14 @@ return french_punctuation
% \begin{macro}{\descindentFB}
% \begin{macro}{\labelindentFB}
% \begin{macro}{\labelwidthFB}
-% Let’s define four dimens |\listindentFB|, |\descindentFB|,
+% {\sloppy Let’s define four dimens |\listindentFB|, |\descindentFB|,
% |\labelindentFB| and |\labelwidthFB| to customise lists’ horizontal
% indentations.
% They are given silly negative values here in order to eventually
% enable their customisation in the preamble. They will get
% reasonnable defaults later when entering French (see
% |\setlabelitemsFB| and |\setlistindentFB|) unless they have been
-% customised.
+% customised.\par}
% \begin{macrocode}
\newdimen\listindentFB
\setlength{\listindentFB}{-1pt}
@@ -5784,20 +5706,6 @@ return french_punctuation
% \changes{v2.0}{2006/11/06}{Footnotes are now printed
% by default `à la française’ for the whole document.}
%
-% \changes{v2.0b}{2007/04/18}{Footnotes: Just do nothing
-% (except warning) when the bigfoot package is loaded.}
-%
-% \changes{v3.5s}{2024/01/05}{Footnotes: no customising of
-% \cs{@footnotetext} when the footnotebackref package is loaded.
-% Just warn the user.}
-%
-% The \pkg{bigfoot} package deeply changes the way footnotes are
-% handled. When \file{bigfoot} is loaded, we just warn the user
-% that \frenchb{} will not customise footnotes at all.
-% When the \pkg{footnotebackref} package is loaded, \frenchb{}
-% will not customise |\@footnotetext| in order to keep back
-% referencing working.
-%
% The layout of footnotes is controlled by two flags
% |\ifFBAutoSpaceFootnotes| and |\ifFBFrenchFootnotes| which are
% set by options of \fbsetup{} (see section~\ref{ssec-keyval}).
@@ -5806,40 +5714,9 @@ return french_punctuation
% different because one was called in a French part, the other one
% in English!).
%
-% We save the original definition of |\@footnotemark| at the
-% |\begin{document}| in order to include any customisation that
-% packages might have done; we define a variant |\@footnotemarkFB|
-% which just adds a thin space before the number or symbol calling
-% a footnote (any space typed in is removed first). The choice
-% between the two definitions (valid for the whole document) is
-% controlled by flag |\ifFBAutoSpaceFootnotes|.
-%
% \changes{v2.4a}{2009/11/23}{\cs{PackageWarning} changed to
% \cs{PackageInfo} (when bigfoot package in use).}
%
-% \begin{macrocode}
-\AtBeginDocument{%
- \@ifpackageloaded{bigfoot}%
- {\PackageWarning{french.ldf}%
- {bigfoot package in use.\MessageBreak
- babel-french will NOT customise footnotes;%
- \MessageBreak reported}}%
- {\let\@footnotemarkORI\@footnotemark
- \def\@footnotemarkFB{\leavevmode\unskip\unkern
- \,\@footnotemarkORI}%
- \ifFBAutoSpaceFootnotes
- \let\@footnotemark\@footnotemarkFB
- \fi}%
- \@ifpackageloaded{footnotebackref}%
- {\FBFrenchFootnotesfalse
- \PackageWarning{french.ldf}%
- {footnotebackref package loaded.\MessageBreak
- babel-french will NOT customise footnotes;%
- \MessageBreak reported}}%
- {}%
- }
-% \end{macrocode}
-%
% \begin{macro}{\@makefntextFB}
% We then define |\@makefntextFB|, a variant of |\@makefntext|
% which is responsible for the layout of footnotes, to match the
@@ -5880,10 +5757,9 @@ return french_punctuation
\newcommand*{\kernFFN}{\kern .5em}
\newdimen\FBfnindent
% \end{macrocode}
-% |\@makefntextFB|’s definition is now tuned according to the
-% document’s class for better compatibility.
+% |\@makefntextFB|’s definition depends on the document’s class.
%
-% Koma-script classes provide |\deffootnote|, a handy command
+% Koma-script classes: they provide |\deffootnote|, a handy command
% to customise the footnotes’ layout (see English manual
% \file{scrguien.pdf}); it redefines |\@makefntext| and
% |\@@makefnmark|. First, save the original definitions.
@@ -5929,19 +5805,17 @@ return french_punctuation
\makefootmark #1}%
}{}
% \end{macrocode}
-% Definitions for the \cls{beamer} class:
-% \begin{macrocode}
-\@ifclassloaded{beamer}
-% \end{macrocode}
-% (see original definition in \file{beamerbaseframecomponents.sty}),
-% note that for the \cls{beamer} class footnotes are LR-boxes, not
-% paragraphs, so |\parindentFFN| is irrelevant.
-% class.
+% Definitions for the \cls{beamer} class:\par
+% the original definition is in
+% \file{beamerbaseframecomponents.sty}, note that for the
+% \cls{beamer} class footnotes are LR-boxes, not paragraphs,
+% so |\parindentFFN| is irrelevant.
%
% \changes{v3.2h}{2016/04/09}{With beamer.cls, add \cs{llap} to
% \cs{@thefnmark} for notes numbered over 99.}
%
% \begin{macrocode}
+\@ifclassloaded{beamer}
{\def\@makefntextFB#1{%
\def\insertfootnotetext{#1}%
\def\insertfootnotemark{\insertfootnotemarkFB}%
@@ -5952,9 +5826,9 @@ return french_punctuation
\llap{\@thefnmark}\dotFFN\kernFFN}%
}{}
% \end{macrocode}
+%
% Now the default definition of |\@makefntextFB| for standard LaTeX
% and AMS classes.
-%
% The next command prints the footnote mark according to the
% specifications of the French `Imprimerie Nationale’.
% Keep in mind that |\@thefnmark| might be empty (i.e.\ in
@@ -5971,11 +5845,36 @@ return french_punctuation
% \end{macrocode}
% \end{macro}
%
-% The rest of |\@makefntext|’s customisation is done at the
-% |\begin{document}|. We save the original definition of
-% |\@makefntext|, and then redefine |\@makefntext| according
+% The rest of |\@makefntext|’s customisation will be done at
+% the |\begin{document}|: saving the original definition of
+% |\@makefntext|, then redefining |\@makefntext| according
% to the value of flag |\ifFBFrenchFootnotes| (true or false).
-% Koma-script classes require a special treatment.
+%
+% \begin{macro}{\@footnotemark}
+%
+% \changes{v3.6a}{2024/05/13}{Allow customisation of the space added
+% in \cs{\@footnotemarkFB}.}
+%
+% We will save the original definition of |\@footnotemark| at the
+% |\begin{document}| in order to include any customisation that
+% packages might have done; we define a variant |\@footnotemarkFB|
+% which just adds a (customisable) thin space before the number or
+% symbol calling a footnote (any space typed in is removed first).
+% The choice between the two definitions (valid for the whole
+% document) is controlled by flag |\ifFBAutoSpaceFootnotes|.
+%
+% |\@footnotemark|’s customisation: let’s define a customisable
+% thin space which will be added before footnote’s call by
+% |\@footnotemarkFB|.
+% \begin{macrocode}
+\newcommand*{\FBfnmarkspace}{\kern .5\fontdimen2\font}
+\def\@footnotemarkFB{\leavevmode\unskip\unkern
+ \protect\FBfnmarkspace\@footnotemarkORI}%
+% \end{macrocode}
+% \end{macro}
+%
+% \changes{v2.0b}{2007/04/18}{Footnotes: Just do nothing
+% (except warning) when the bigfoot package is loaded.}
%
% \changes{v3.3c}{2017/07/28}{Reset \cs{localleftbox} locally
% inside \cs{@makefntext}. Needed by \cs{frquote} with LuaTeX.}
@@ -5987,14 +5886,49 @@ return french_punctuation
% \cs{localleftbox} and \cs{FBeverypar@quote} saved and restored
% instead.}
%
+% \changes{v3.5s}{2024/01/05}{Footnotes: no customising of
+% \cs{@footnotetext} when the footnotebackref package is loaded.
+% Just warn the user.}
+%
+% Switching between French or Standard layout for footnotes is done
+% `AtBeginDocument’.
% The LuaTeX command |\localleftbox| and |\FBeverypar@quote| used
% by |\frquote{}| have to be reset inside footnotes; done for LaTeX
% based formats only.
% \begin{macrocode}
\providecommand\localleftbox[1]{}
\AtBeginDocument{%
- \@ifpackageloaded{bigfoot}{}%
- {\ifdim\parindentFFN<10in
+% \end{macrocode}
+% When the \pkg{footnotebackref} package is loaded, \frenchb{}
+% will not customise |\@footnotetext| in order to keep back
+% referencing working.
+% \begin{macrocode}
+ \@ifpackageloaded{footnotebackref}%
+ {\FBFrenchFootnotesfalse
+ \PackageWarning{french.ldf}%
+ {footnotebackref package loaded.\MessageBreak
+ babel-french will NOT customise footnotes;%
+ \MessageBreak reported}}%
+ {}%
+% \end{macrocode}
+% The \pkg{bigfoot} package deeply changes the way footnotes are
+% handled. When \file{bigfoot} is loaded, we just warn the user
+% that \frenchb{} will not customise footnotes at all.
+% \begin{macrocode}
+ \@ifpackageloaded{bigfoot}%
+ {\PackageWarning{french.ldf}%
+ {bigfoot package in use.\MessageBreak
+ babel-french will NOT customise footnotes;%
+ \MessageBreak reported}}%
+% \end{macrocode}
+% Otherwise, footnotes may be customised according to the
+% \fbsetup{} options.
+% \begin{macrocode}
+ {\let\@footnotemarkORI\@footnotemark
+ \ifFBAutoSpaceFootnotes
+ \let\@footnotemark\@footnotemarkFB
+ \fi
+ \ifdim\parindentFFN<10in
\else
\parindentFFN=\parindent
\ifdim\parindentFFN<1.5em \parindentFFN=1.5em \fi
@@ -6002,14 +5936,15 @@ return french_punctuation
\settowidth{\FBfnindent}{\dotFFN\kernFFN}%
\addtolength{\FBfnindent}{\parindentFFN}%
\let\@makefntextORI\@makefntext
- \ifFB@koma
% \end{macrocode}
+% Koma-script classes require a special treatment.\par
% Definition of |\@makefntext| for koma-script classes: running
% \@makefntextORI inside a group to reset |\localleftbox{}| and
% |\FBeverypar@quote| would mess up the layout of footnotes whenever
% the first manadatory argument of |\deffootnote{}| (used as
% |\leftskip|) is non-nil (default is 1em, 0pt in French).
% \begin{macrocode}
+ \ifFB@koma
\let\@@makefnmarkORI\@@makefnmark
\long\def\@makefntext#1{%
\localleftbox{}%
@@ -6071,7 +6006,7 @@ return french_punctuation
\localleftbox{\FBeveryline@quote}}%
\fi
}%
-}
+ }
% \end{macrocode}
%
% For compatibility reasons, we provide definitions for the commands
diff --git a/macros/latex/contrib/babel-contrib/french/frenchb.pdf b/macros/latex/contrib/babel-contrib/french/frenchb.pdf
index b0ab9ae43b..d9a61f7681 100644
--- a/macros/latex/contrib/babel-contrib/french/frenchb.pdf
+++ b/macros/latex/contrib/babel-contrib/french/frenchb.pdf
Binary files differ
diff --git a/macros/latex/contrib/babel-contrib/latvian/README.md b/macros/latex/contrib/babel-contrib/latvian/README.md
index dc9d7d99e9..6edd83b2a0 100644
--- a/macros/latex/contrib/babel-contrib/latvian/README.md
+++ b/macros/latex/contrib/babel-contrib/latvian/README.md
@@ -1,9 +1,15 @@
-## Latvian 2.0b
+## Latvian 2.0c
This is the babel style for Latvian. It bears the version number 2.0
because there were a 1.x, by Andris Lasis. Version 2.0 is heavily
based on the latter.
+### Changes 2.0c
+
+```
+* Fix an incompatibility with titlesec.
+```
+
### Changes 2.0b
```
@@ -17,5 +23,3 @@ based on the latter.
* Modififier t1composite, which redefines some T1 'composite commands'
related to the cedilla.
```
-
-2018-02-19 \ No newline at end of file
diff --git a/macros/latex/contrib/babel-contrib/latvian/latvian.dtx b/macros/latex/contrib/babel-contrib/latvian/latvian.dtx
index 82c44e2980..39555f81c4 100644
--- a/macros/latex/contrib/babel-contrib/latvian/latvian.dtx
+++ b/macros/latex/contrib/babel-contrib/latvian/latvian.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright 1999 - 2000 Andris Lasis, 2014-2018 Javier Bezos and any
+% Copyright 1999 - 2000 Andris Lasis, 2014-2024 Javier Bezos and any
% individual authors listed elsewhere in this file. All rights
% reserved.
%
@@ -37,8 +37,8 @@
%</dtx>
%<code>\ProvidesLanguage{latvian}
% \fi
-% \ProvidesLanguage{latvian}
- [2018/02/19 v2.0b Latvian support from the babel system]
+% \ProvidesFile{latvian}
+ [2024/04/27 v2.0c Latvian support from the babel system]
% \iffalse
%<*filedriver>
\documentclass{ltxdoc}
@@ -58,7 +58,7 @@
% \section{The Latvian Language}
%
% The file \textsf{latvian.ldf}\footnote{The file described in this
-% section has version number 2.0a and was last revised on 2018/02/19.}
+% section has version number 2.0c and was last revised on 2024/04/27.}
% defines the language definition macros for the Latvian language. It
% is heavily based on the work by Andris Lasis, and this file just
% cleans the code up and adapts it to babel 3.9.
@@ -192,11 +192,13 @@
%
% \begin{macrocode}
\gdef\the@chapter{%
- \ifx\chapter\undefined\relax\else
- \ifnum\c@chapter>\z@\thechapter\fi\fi}
+ \ifx\c@chapter\@undefined\else
+ \ifnum\c@chapter>\z@\thechapter\fi
+ \fi}
\def\thechapter{%
- \ifx\chapter\undefined\relax\else
- \arabic{chapter}.\fi}
+ \ifx\c@chapter\@undefined\else
+ \arabic{chapter}.%
+ \fi}
\def\thesection{\the@chapter\arabic{section}.}
\def\thesubsection{\thesection\arabic{subsection}.}
\def\thesubsubsection{\thesubsection\arabic{subsubsection}.}
diff --git a/macros/latex/contrib/babel-contrib/latvian/latvian.pdf b/macros/latex/contrib/babel-contrib/latvian/latvian.pdf
index fce2fa1395..2897bcc5a7 100644
--- a/macros/latex/contrib/babel-contrib/latvian/latvian.pdf
+++ b/macros/latex/contrib/babel-contrib/latvian/latvian.pdf
Binary files differ
diff --git a/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/DEPENDS.txt b/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/DEPENDS.txt
new file mode 100644
index 0000000000..c8cacfa6a5
--- /dev/null
+++ b/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/DEPENDS.txt
@@ -0,0 +1,2 @@
+hard beamer
+hard tools
diff --git a/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/README.md b/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/README.md
index 3d8f35fb39..c5c10200dd 100644
--- a/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/README.md
+++ b/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/README.md
@@ -1,9 +1,34 @@
# beamertheme-rainbow
-A beamer colour theme which alternates theme colours on every frame
+[![GitHub](https://img.shields.io/github/license/samcarter/beamertheme-rainbow.svg?color=blue)](http://www.latex-project.org/lppl.txt)
+[![GitHub tag (latest SemVer)](https://img.shields.io/github/tag/samcarter/beamertheme-rainbow.svg?label=current%20version)](https://github.com/samcarter/beamertheme-rainbow/releases/latest)
+[![CTAN](https://img.shields.io/ctan/v/beamertheme-rainbow.svg)](https://ctan.org/pkg/beamertheme-rainbow)
-Current version: 2023/07/04 version v0.1
+A beamer colour theme which alternates theme colours on every frame.
-This project is licensed under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txt
+This project is licensed under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txt .
-The project repository, including a bug tracker, can be found at https://github.com/samcarter/beamertheme-rainbow/issues
+The project repository, including a bug tracker, can be found at https://github.com/samcarter/beamertheme-rainbow/issues .
+
+### Usage
+
+```latex
+\documentclass{beamer}
+
+\usetheme{Berkeley}
+\usecolortheme{rainbow}
+
+\begin{document}
+
+\begin{frame}
+content...
+\end{frame}
+
+\begin{frame}
+content...
+\end{frame}
+
+\end{document}
+```
+
+For more details, please consult the [package documentation](https://github.com/samcarter/beamertheme-rainbow/blob/main/DOCUMENTATION.pdf).
diff --git a/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/beamercolorthemerainbow.sty b/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/beamercolorthemerainbow.sty
index 94e9a0f10c..f4f9a162ee 100644
--- a/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/beamercolorthemerainbow.sty
+++ b/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/beamercolorthemerainbow.sty
@@ -12,7 +12,7 @@
% See http://www.latex-project.org/lppl.txt
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\ProvidesPackage{beamercolorthemerainbow}[2023/07/04 version v0.1 Beamer colour theme with alternating theme colours]
+\ProvidesPackage{beamercolorthemerainbow}[2024/04/28 version v0.2 Beamer colour theme with alternating theme colours]
\mode<presentation>
diff --git a/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/beamertheme-rainbow-doc-settings.sty b/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/beamertheme-rainbow-doc-settings.sty
new file mode 100644
index 0000000000..777cedba6e
--- /dev/null
+++ b/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/beamertheme-rainbow-doc-settings.sty
@@ -0,0 +1,199 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Personal helper theme for package documentations
+% Copyright samcarter
+%
+% This file may be distributed and/or modified
+% under the LaTeX Project Public License 1.3c or later
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Usage:
+% ln ~/Life/latex/beamertheme-sam/themesam.sty package-doc-settings.sty
+% \usepackage[
+% themecolor=samdblue
+% ]{\jobname-settings}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Colours
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\RequirePackage{xcolor}
+\definecolor{samyellow}{RGB}{246,193,65}
+\definecolor{samorange}{RGB}{241,147,45}
+\definecolor{samred}{RGB}{191,26,46}% TikZbricks
+\definecolor{sammagenta}{RGB}{170,42,104}% TikZmarmots
+\definecolor{samviolet}{RGB}{136,46,114}% TikZlings
+\definecolor{samlila}{RGB}{101,67,159}% Rainbow beamer theme
+\definecolor{samdblue}{RGB}{0,51,134}% beamer theme
+\definecolor{samlblue}{RGB}{22,89,155}% TikZducks
+\definecolor{samteal}{RGB}{25,143,157}% Tcolorbox beamer theme
+\definecolor{samlgreen}{RGB}{68,170,153}% Jigsaw
+\definecolor{samdgreen}{RGB}{78,178,125}
+\definecolor{samlgray}{RGB}{160,160,185}
+\definecolor{samdgray}{RGB}{60,60,85}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Package options
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\RequirePackage{xkeyval}
+\DeclareOptionX{themecolor}[samdblue]{\colorlet{themecolor}{#1}}
+\DeclareOptionX{listingcolor}[samlblue]{\colorlet{listingcolor}{#1}}
+\ExecuteOptionsX{themecolor,listingcolor}
+\ProcessOptionsX
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Packages
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\@ifclassloaded{beamer}{}{%
+ \RequirePackage[english]{babel}
+ \RequirePackage[paper=a4paper,margin=2.9cm]{geometry}
+ \RequirePackage{scrlayer-scrpage}
+ \let\hrulefillx\hrulefill
+ \RequirePackage[bitstream-charter]{mathdesign}
+ \let\hrulefill\hrulefillx
+ \RequirePackage[hang,flushmargin,bottom]{footmisc}
+ \RequirePackage{footnotehyper}
+ \makesavenoteenv{tcolorbox}
+ \RequirePackage[all]{nowidow}
+ \RequirePackage[colorlinks=true,breaklinks=true,allcolors=themecolor,hyperfootnotes=false]{hyperref}
+}
+\RequirePackage[T1]{fontenc}
+\RequirePackage{xspace}
+\RequirePackage{inconsolata}% mono font with bold, but italic is missing
+% \RequirePackage[scale=0.85]{cascadia-code}
+% \AddToHook{cmd/ttfamily/before}{\fontseries{sl}}
+\RequirePackage{iexec}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Listings
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\RequirePackage[
+ cachedir=$TMPDIR/minted/
+]{minted}
+
+% smuggling custom pygmentize style in cache folder
+% (a real pygmentise style would need installtion in some python folder)
+\begin{filecontents*}[noheader]{./sam.pygstyle}
+\makeatletter
+\def\PYG@reset{\let\PYG@it=\relax \let\PYG@bf=\relax%
+ \let\PYG@ul=\relax \let\PYG@tc=\relax%
+ \let\PYG@bc=\relax \let\PYG@ff=\relax}
+\def\PYG@tok#1{\csname PYG@tok@#1\endcsname}
+\def\PYG@toks#1+{\ifx\relax#1\empty\else%
+ \PYG@tok{#1}\expandafter\PYG@toks\fi}
+\def\PYG@do#1{\PYG@bc{\PYG@tc{\PYG@ul{%
+ \PYG@it{\PYG@bf{\PYG@ff{#1}}}}}}}
+\def\PYG#1#2{\PYG@reset\PYG@toks#1+\relax+\PYG@do{#2}}
+
+% optional arguments
+\expandafter\def\csname PYG@tok@na\endcsname{\def\PYG@tc##1{\textcolor{black}{##1}}}
+
+% macros
+\expandafter\def\csname PYG@tok@k\endcsname{\def\PYG@tc##1{\textcolor{listingcolor}{\bfseries ##1}}}
+% curly brakets
+\expandafter\def\csname PYG@tok@nb\endcsname{\def\PYG@tc##1{\textcolor{listingcolor}{\bfseries ##1}}}
+
+% comments (italics won't work with the inconsolata font)
+\expandafter\def\csname PYG@tok@c\endcsname{\def\PYG@tc##1{\textcolor{gray}{##1}}}
+
+\def\PYGZbs{\char`\\}
+\def\PYGZus{\char`\_}
+\def\PYGZob{\char`\{}
+\def\PYGZcb{\char`\}}
+\def\PYGZca{\char`\^}
+\def\PYGZam{\char`\&}
+\def\PYGZlt{\char`\<}
+\def\PYGZgt{\char`\>}
+\def\PYGZsh{\char`\#}
+\def\PYGZpc{\char`\%}
+\def\PYGZdl{\char`\$}
+\def\PYGZhy{\char`\-}
+\def\PYGZsq{\char`\'}
+\def\PYGZdq{\char`\"}
+\def\PYGZti{\char`\~}
+% for compatibility with earlier versions
+\def\PYGZat{@}
+\def\PYGZlb{[}
+\def\PYGZrb{]}
+\makeatother
+\end{filecontents*}
+
+\iexec{mkdir -p $TMPDIR/minted && mv sam.pygstyle $TMPDIR/minted/.}
+
+\usemintedstyle{sam}
+\setminted{
+ breaksymbolleft={},
+ tabsize=2,
+ breaklines=true,
+}
+\newminted[samcode]{latex}{}
+\newmintinline[saminline]{latex}{}
+
+% use non-bold and all coloured for inline code in articles
+\ifdefined\insertaspectratio\else
+ \patchcmd{\minted@inputpyg@inline}{\minted@input}{\color{listingcolor}\renewcommand\textcolor[3][]{##3}\renewcommand\bfseries{}\minted@input}{}{}
+\fi
+
+\RequirePackage[most]{tcolorbox}
+\tcbuselibrary{minted}
+\tcbset{%
+ colframe=themecolor,
+ fonttitle=\bfseries,
+ sidebyside,
+ center lower,
+ righthand width=5.7cm,
+ bottom=2pt,
+ top=2pt,
+ left=3pt,
+ right=3pt,
+ sidebyside gap=10pt,
+ lower separated=false,
+ listing engine=minted,
+ minted language=latex,
+ colback=themecolor!10,
+ sharp corners,
+ boxrule=0pt,
+ before title={\strut}
+}
+
+% avoid page breaks right in front of the tcolorbox
+\@ifclassloaded{beamer}{}{
+ \tcbuselibrary{hooks}
+ \tcbset{before pre={\nopagebreak[4]}}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% document settings
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\@ifclassloaded{scrartcl}{%
+ \KOMAoptions{parskip=half}
+ \addtokomafont{sectioning}{\color{themecolor}}
+ \addtokomafont{date}{\normalsize}
+ \addtokomafont{author}{\normalsize}
+ \setlength{\footnotemargin}{0.7em}
+}{}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Custom macros
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\providecommand*{\CTAN}{\textsc{CTAN}\xspace}
+\providecommand*{\TikZ}{Ti\emph{k}Z\xspace}
+\providecommand*{\miktex}{MiK\TeX\xspace}
+\providecommand*{\texlive}{\TeX{}Live\xspace}
+\providecommand*{\tikzbrick}{Ti\emph{k}Zbrick\xspace}
+\providecommand*{\tikzducks}{Ti\emph{k}Zducks\xspace}
+\providecommand*{\tikzlings}{Ti\emph{k}Zlings\xspace}
+\providecommand*{\tikzmarmots}{Ti\emph{k}Zmarmots\xspace}
+\providecommand*{\ConTeXt}{C\kern-.0333emon\-\kern-.0667em\TeX\kern-.0333emt} \ No newline at end of file
diff --git a/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/beamertheme-rainbow-doc.pdf b/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/beamertheme-rainbow-doc.pdf
index beb9295d5f..78442b5a99 100644
--- a/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/beamertheme-rainbow-doc.pdf
+++ b/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/beamertheme-rainbow-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/beamertheme-rainbow-doc.tex b/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/beamertheme-rainbow-doc.tex
index 14f84a1b1a..e5819e54b9 100644
--- a/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/beamertheme-rainbow-doc.tex
+++ b/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/beamertheme-rainbow-doc.tex
@@ -1,5 +1,3 @@
-% !TeX TS-program = latexmk -time -pdf -pdflatex="pdflatex -synctex=1 -interaction=nonstopmode -shell-escape %%O %%S" % | txs:///view-log | txs:///view-pdf
-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Documentation for the rainbow colour theme
@@ -13,82 +11,81 @@
% See http://www.latex-project.org/lppl.txt
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\documentclass[parskip=half]{scrartcl}
-
-% packages %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\usepackage[T1]{fontenc}
-\usepackage[utf8]{inputenc}
-\usepackage[english]{babel}
-\let\hrulefillx\hrulefill
-\usepackage[bitstream-charter]{mathdesign}
-\let\hrulefill\hrulefillx
-\usepackage[most]{tcolorbox}
-\usepackage[paper=a4paper,hmargin=2.9cm,vmargin=2.5cm]{geometry}
-\usepackage{scrlayer-scrpage}
-\usepackage{gradient-text}
-\usepackage[colorlinks=true,breaklinks=true,urlcolor=blendedblue,linkcolor=blendedblue,citecolor=blendedblue,filecolor=blendedblue]{hyperref}
+% !TeX program = txs:///arara
+% arara: latexmk: {
+% arara: --> engine: pdflatex,
+% arara: --> options: [
+% arara: --> '-shell-escape',
+% arara: --> '-synctex=1',
+% arara: --> '-interaction=nonstopmode',
+% arara: --> ]
+% arara: --> }
+\documentclass{scrartcl}
-% customisation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\definecolor{blendedblue}{rgb}{0.2,0.2,0.7}
-\addtokomafont{sectioning}{\color{blendedblue}}
-\addtokomafont{date}{\normalsize}
-\addtokomafont{author}{\normalsize}
-\renewcommand*\dictumwidth{0.35\linewidth}
-\renewcommand*{\dictumrule}{\vskip1ex}
-\renewcommand*{\dictumauthorformat}[1]{#1}
+% meta %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\title{\texorpdfstring{\gradient{HSB}{The rainbow beamer colour theme}{0,240,200}{240,240,200}}{The rainbow beamer colour theme}}
+\subtitle{A beamer colour theme which alternates theme colours on every frame}
+\author{%
+ \texorpdfstring{
+ \texttt{samcarter}\\
+ \url{https://github.com/samcarter/beamertheme-rainbow}\\
+ \url{https://www.ctan.org/pkg/beamertheme-rainbow}
+ }{samcarter}}
+\date{Version v0.2 \textendash{} 2024/04/28}
-\lstdefinestyle{tcolorboxstyle}{%
- language={[latex]TeX},
- tabsize=2,
- breaklines,
- basicstyle=\ttfamily,
- columns=fullflexible,
-}
+\usepackage[
+ themecolor=samlila
+]{\jobname-settings}
+
+\colorlet{orange}{samorange}
-\tcbset{%
- toptitle=1mm,
- left=2mm,
- title={Example},
- fonttitle=\large\sffamily,
- colbacktitle=blendedblue!75!black,
- colframe=blendedblue!75!black,
- colback=blendedblue!75!black!10!white,
- boxrule=0cm,
- frame hidden,
- arc=1.3mm,
- arc=2mm,
- sidebyside,
- listing options={style=tcolorboxstyle},
- bottom=0pt,
- top=0pt,
- lower separated=false,
- comment style={scale=2},
- enhanced,
- drop fuzzy shadow=black!90,
- title code app={
- \shade[top color=blendedblue!75!black,bottom color=blendedblue!75!black!10!white] (title.south west) rectangle ([yshift=-1mm]title.south east);
- }
+% rainbow text (based on the gradient-text package) %%%%%%%%%%%%%%%%%
+\makeatletter
+\ExplSyntaxOn
+\clist_new:N\l_gtext_First_clist
+\clist_new:N\l_gtext_Last_clist
+\int_new:N\l_gtext_MaxIndex_int
+\int_new:N\l_gtext_Ratio_int
+\newcommand{\gr@dient}[8]{
+ \int_set:Nn\l_gtext_MaxIndex_int{\int_eval:n{\str_count:n{#1}}}
+ \int_step_inline:nnn{1}{\l_gtext_MaxIndex_int}{
+ \exp_args:Ne\str_if_eq:nnTF{\str_item:Nn{#1}{##1}}{~}{}{
+ \int_set:Nn\l_gtext_Ratio_int{\int_eval:n{\l_gtext_Ratio_int+1}}
+ }
+ \color_select:nn{#8}{
+ \int_eval:n{(\int_use:N\l_gtext_Ratio_int*#5+(\l_gtext_MaxIndex_int-##1)*#2)/\l_gtext_MaxIndex_int},
+ \int_eval:n{(\int_use:N\l_gtext_Ratio_int*#6+(\l_gtext_MaxIndex_int-##1)*#3)/\l_gtext_MaxIndex_int},
+ \int_eval:n{(\int_use:N\l_gtext_Ratio_int*#7+(\l_gtext_MaxIndex_int-##1)*#4)/\l_gtext_MaxIndex_int}
+ }\str_item:Nn{#1}{##1}
+ }
}
-\lstset{style=tcolorboxstyle}
+\NewDocumentCommand\gradient{mmmm}{{
+ \clist_set:Nn\l_gtext_First_clist {#3}
+ \clist_set:Nn\l_gtext_Last_clist {#4}
+ \gr@dient{#2}
+ {\clist_item:Nn\l_gtext_First_clist{1}}
+ {\clist_item:Nn\l_gtext_First_clist{2}}
+ {\clist_item:Nn\l_gtext_First_clist{3}}
+ {\clist_item:Nn\l_gtext_Last_clist{1}}
+ {\clist_item:Nn\l_gtext_Last_clist{2}}
+ {\clist_item:Nn\l_gtext_Last_clist{3}}
+ {#1}
+}}
+\ExplSyntaxOff
+\makeatother
-\newcommand{\prefix}{./build}
+% customisation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\renewcommand*\dictumwidth{0.35\linewidth}
+\renewcommand*{\dictumrule}{\vskip1ex}
+\renewcommand*{\dictumauthorformat}[1]{#1}
+
+\newcommand{\prefix}{./include}
\tcbset{
compilable listing/.style={listing file={\prefix/\jobname-listing-\thetcblistingcount.tex}},
run pdflatex/.style={run@system@command={cd\space \prefix;\space pdflatex}{\jobname-listing-\thetcblistingcount.tex}},%
}
-% meta %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\title{\texorpdfstring{\gradientRGB{The rainbow beamer colour theme}{255,128,51}{51,51,255}}{The rainbow beamer coloir theme}}
-\subtitle{A beamer colour theme which alternates theme colours on every frame}
-\author{%
- \texorpdfstring{
- \texttt{samcarter}\\
- \url{https://github.com/samcarter/beamertheme-rainbow}\\
-% \url{https://www.ctan.org/pkg/beamertheme-rainbow}
- }{samcarter}}
-\date{Version v0.1 \textendash{} 2023/07/04}
-
\begin{document}
\maketitle
@@ -97,29 +94,28 @@
\section{Introduction}
\label{intro}
-The rainbow beamer colour theme will bring more colours to your presentation. It works similarly to the structure beamer colour theme, but instead of having just one theme colour throughout the whole presentation, the rainbow beamer colour theme will cycle through a list of colors and change the theme colour on every frame.
+The rainbow beamer colour theme will bring more colours to your presentation. It works similarly to the structure beamer colour theme, but instead of having just one theme colour throughout the whole presentation, the rainbow beamer colour theme will cycle through a list of colors and change the theme colour on every frame.
By default, it will cycle through colours of the rainbow (hence the name), but a custom set of colours is also possible.
-%The package is included in \TeX{}Live and MiK\TeX\ and available from \textsc{CTAN} (\url{https://www.ctan.org/pkg/beamertheme-tcolorbox}).
+The package is included in \TeX{}Live and MiK\TeX\ and available from \textsc{CTAN} (\url{https://www.ctan.org/pkg/beamertheme-tcolorbox}).
The development version of this package is located at \url{https://github.com/samcarter/beamertheme-rainbow}. If you have any problems, ideas or other feedback, please make constructive use of the issue tracker.
Copyright \raisebox{0.2em}{\tiny\fontfamily{cmr}\selectfont\textcopyright} \texttt{samcarter}. Permission is granted to copy, distribute and\slash or modify this software under the terms of the LaTeX project public licence, version 1.3c or later \url{http://www.latex-project.org/lppl.txt}.
\section{Usage}
-The basic usage is fairly simple. After choosing a beamer theme, one can load the rainbow beamer colour theme via
-\begin{tcolorbox}[title={}]
-\begin{lstlisting}
+The basic usage is fairly simple. After choosing a beamer theme, one can load the rainbow beamer colour theme via
+\begin{tcolorbox}[title={Usage}]
+\begin{samcode}
\usecolortheme{rainbow}
-\end{lstlisting}
+\end{samcode}
\end{tcolorbox}
-This will work with most of the themes which are provided by the beamer class as well some third party themes. Notable exceptions are the \lstinline|AnnArbor| and \lstinline|CambridgeUS| themes.
-
-\newpage
+This will work with most of the themes which are provided by the beamer class as well some third party themes. Notable exceptions are the \saminline|AnnArbor| and \saminline|CambridgeUS| themes.
This basic usage will colour frames in alternating rainbow colours:
+\nopagebreak
\begin{tcblisting}{
listing and comment,
pdf comment,
@@ -129,7 +125,7 @@ This basic usage will colour frames in alternating rainbow colours:
comment={
\begin{tikzpicture}
\foreach \i in {1,...,6}{%
- \node at (0.4*\i,-0.7*\i) {\includegraphics[page=\i,width=4cm]{beamertheme-rainbow-doc-listing-1.pdf}};
+ \node at (0.35*\i,-0.7*\i) {\includegraphics[page=\i,width=3.7cm]{beamertheme-rainbow-doc-listing-1.pdf}};
}
\end{tikzpicture}
},
@@ -150,7 +146,7 @@ This basic usage will colour frames in alternating rainbow colours:
\end{document}
\end{tcblisting}
-As pretty as rainbow colours are, there might be some users who would like to choose their own colours. This can be done with the \lstinline|colors={...}| option which accepts a comma separated list of colours. The colours can be predefined colours e.g. from the \lstinline|xcolor| package, user-defined colours or (for more fun) from the \lstinline|xkcdcolors| package.
+As pretty as rainbow colours are, there might be some users who would like to choose their own colours. This can be done with the \saminline|colors={...}| option which accepts a comma separated list of colours. The colours can be predefined colours e.g. from the \saminline|xcolor| package, user-defined colours or (for more fun) from the \saminline|xkcdcolors| package.
\begin{tcblisting}{
listing and comment,
@@ -161,7 +157,7 @@ As pretty as rainbow colours are, there might be some users who would like to ch
comment={
\begin{tikzpicture}
\foreach \i in {1,...,6}{%
- \node at (0.4*\i,-0.7*\i) {\includegraphics[page=\i,width=4cm]{beamertheme-rainbow-doc-listing-2.pdf}};
+ \node at (0.35*\i,-0.7*\i) {\includegraphics[page=\i,width=3.7cm]{beamertheme-rainbow-doc-listing-2.pdf}};
}
\end{tikzpicture}
},
@@ -172,12 +168,12 @@ As pretty as rainbow colours are, there might be some users who would like to ch
\usetheme{Copenhagen}
\usepackage{xkcdcolors}
\definecolor{mycolor}
- {RGB}{127,0,127}
+ {RGB}{101,67,159}
\usecolortheme[
colors={
orange,
mycolor,
- xkcdVibrantBlue
+ xkcdMediumBlue
}
]{rainbow}
@@ -185,9 +181,11 @@ As pretty as rainbow colours are, there might be some users who would like to ch
% just for this test example
\ExplSyntaxOn
-\prg_replicate:nn{6}{\frame{\frametitle{title}}}
+\prg_replicate:nn{6}{
+ \frame{\frametitle{title}}
+}
\ExplSyntaxOff
-
+
\end{document}
\end{tcblisting}
diff --git a/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/DEPENDS.txt b/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/DEPENDS.txt
new file mode 100644
index 0000000000..09e806e193
--- /dev/null
+++ b/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/DEPENDS.txt
@@ -0,0 +1,4 @@
+hard beamer
+hard tools
+hard tcolorbox
+hard tikzfill
diff --git a/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/README.md b/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/README.md
index 91f07c7663..b8501189d6 100644
--- a/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/README.md
+++ b/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/README.md
@@ -1,9 +1,32 @@
# beamertheme-tcolorbox
-A beamer inner theme which reproduces standard beamer blocks using tcolorboxes
+[![GitHub](https://img.shields.io/github/license/samcarter/beamertheme-tcolorbox.svg?color=blue)](http://www.latex-project.org/lppl.txt)
+[![GitHub tag (latest SemVer)](https://img.shields.io/github/tag/samcarter/beamertheme-tcolorbox.svg?label=current%20version)](https://github.com/samcarter/beamertheme-tcolorbox/releases/latest)
+[![CTAN](https://img.shields.io/ctan/v/beamertheme-tcolorbox.svg)](https://ctan.org/pkg/beamertheme-tcolorbox)
-Current version: 2023/05/03 version v0.6
+A beamer inner theme which reproduces standard beamer blocks using tcolorboxes.
-This project is licensed under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txt
+This project is licensed under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txt .
-The project repository, including a bug tracker, can be found at https://github.com/samcarter/beamertheme-tcolorbox/issues
+The project repository, including a bug tracker, can be found at https://github.com/samcarter/beamertheme-tcolorbox .
+
+### Usage
+
+```latex
+\documentclass{beamer}
+
+\usecolortheme{orchid}
+\useinnertheme{tcolorbox}
+
+\begin{document}
+
+\begin{frame}
+ \begin{block}{Title}
+ Content
+ \end{block}
+\end{frame}
+
+\end{document}
+```
+
+For more details, please consult the [package documentation](https://github.com/samcarter/beamertheme-tcolorbox/blob/main/DOCUMENTATION.pdf).
diff --git a/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamerinnerthemetcolorbox.sty b/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamerinnerthemetcolorbox.sty
index 770a00d0b5..9469f0591e 100644
--- a/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamerinnerthemetcolorbox.sty
+++ b/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamerinnerthemetcolorbox.sty
@@ -12,7 +12,7 @@
% See http://www.latex-project.org/lppl.txt
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\ProvidesPackage{beamerinnerthemetcolorbox}[2023/05/03 version v0.6 Beamer blocks with tcolorboxes]
+\ProvidesPackage{beamerinnerthemetcolorbox}[2024/04/29 version v0.7 Beamer blocks with tcolorboxes]
\RequirePackage{tcolorbox}
\tcbuselibrary{skins,hooks}
diff --git a/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamertheme-tcolorbox-doc-settings.sty b/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamertheme-tcolorbox-doc-settings.sty
new file mode 100644
index 0000000000..777cedba6e
--- /dev/null
+++ b/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamertheme-tcolorbox-doc-settings.sty
@@ -0,0 +1,199 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Personal helper theme for package documentations
+% Copyright samcarter
+%
+% This file may be distributed and/or modified
+% under the LaTeX Project Public License 1.3c or later
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Usage:
+% ln ~/Life/latex/beamertheme-sam/themesam.sty package-doc-settings.sty
+% \usepackage[
+% themecolor=samdblue
+% ]{\jobname-settings}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Colours
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\RequirePackage{xcolor}
+\definecolor{samyellow}{RGB}{246,193,65}
+\definecolor{samorange}{RGB}{241,147,45}
+\definecolor{samred}{RGB}{191,26,46}% TikZbricks
+\definecolor{sammagenta}{RGB}{170,42,104}% TikZmarmots
+\definecolor{samviolet}{RGB}{136,46,114}% TikZlings
+\definecolor{samlila}{RGB}{101,67,159}% Rainbow beamer theme
+\definecolor{samdblue}{RGB}{0,51,134}% beamer theme
+\definecolor{samlblue}{RGB}{22,89,155}% TikZducks
+\definecolor{samteal}{RGB}{25,143,157}% Tcolorbox beamer theme
+\definecolor{samlgreen}{RGB}{68,170,153}% Jigsaw
+\definecolor{samdgreen}{RGB}{78,178,125}
+\definecolor{samlgray}{RGB}{160,160,185}
+\definecolor{samdgray}{RGB}{60,60,85}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Package options
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\RequirePackage{xkeyval}
+\DeclareOptionX{themecolor}[samdblue]{\colorlet{themecolor}{#1}}
+\DeclareOptionX{listingcolor}[samlblue]{\colorlet{listingcolor}{#1}}
+\ExecuteOptionsX{themecolor,listingcolor}
+\ProcessOptionsX
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Packages
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\@ifclassloaded{beamer}{}{%
+ \RequirePackage[english]{babel}
+ \RequirePackage[paper=a4paper,margin=2.9cm]{geometry}
+ \RequirePackage{scrlayer-scrpage}
+ \let\hrulefillx\hrulefill
+ \RequirePackage[bitstream-charter]{mathdesign}
+ \let\hrulefill\hrulefillx
+ \RequirePackage[hang,flushmargin,bottom]{footmisc}
+ \RequirePackage{footnotehyper}
+ \makesavenoteenv{tcolorbox}
+ \RequirePackage[all]{nowidow}
+ \RequirePackage[colorlinks=true,breaklinks=true,allcolors=themecolor,hyperfootnotes=false]{hyperref}
+}
+\RequirePackage[T1]{fontenc}
+\RequirePackage{xspace}
+\RequirePackage{inconsolata}% mono font with bold, but italic is missing
+% \RequirePackage[scale=0.85]{cascadia-code}
+% \AddToHook{cmd/ttfamily/before}{\fontseries{sl}}
+\RequirePackage{iexec}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Listings
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\RequirePackage[
+ cachedir=$TMPDIR/minted/
+]{minted}
+
+% smuggling custom pygmentize style in cache folder
+% (a real pygmentise style would need installtion in some python folder)
+\begin{filecontents*}[noheader]{./sam.pygstyle}
+\makeatletter
+\def\PYG@reset{\let\PYG@it=\relax \let\PYG@bf=\relax%
+ \let\PYG@ul=\relax \let\PYG@tc=\relax%
+ \let\PYG@bc=\relax \let\PYG@ff=\relax}
+\def\PYG@tok#1{\csname PYG@tok@#1\endcsname}
+\def\PYG@toks#1+{\ifx\relax#1\empty\else%
+ \PYG@tok{#1}\expandafter\PYG@toks\fi}
+\def\PYG@do#1{\PYG@bc{\PYG@tc{\PYG@ul{%
+ \PYG@it{\PYG@bf{\PYG@ff{#1}}}}}}}
+\def\PYG#1#2{\PYG@reset\PYG@toks#1+\relax+\PYG@do{#2}}
+
+% optional arguments
+\expandafter\def\csname PYG@tok@na\endcsname{\def\PYG@tc##1{\textcolor{black}{##1}}}
+
+% macros
+\expandafter\def\csname PYG@tok@k\endcsname{\def\PYG@tc##1{\textcolor{listingcolor}{\bfseries ##1}}}
+% curly brakets
+\expandafter\def\csname PYG@tok@nb\endcsname{\def\PYG@tc##1{\textcolor{listingcolor}{\bfseries ##1}}}
+
+% comments (italics won't work with the inconsolata font)
+\expandafter\def\csname PYG@tok@c\endcsname{\def\PYG@tc##1{\textcolor{gray}{##1}}}
+
+\def\PYGZbs{\char`\\}
+\def\PYGZus{\char`\_}
+\def\PYGZob{\char`\{}
+\def\PYGZcb{\char`\}}
+\def\PYGZca{\char`\^}
+\def\PYGZam{\char`\&}
+\def\PYGZlt{\char`\<}
+\def\PYGZgt{\char`\>}
+\def\PYGZsh{\char`\#}
+\def\PYGZpc{\char`\%}
+\def\PYGZdl{\char`\$}
+\def\PYGZhy{\char`\-}
+\def\PYGZsq{\char`\'}
+\def\PYGZdq{\char`\"}
+\def\PYGZti{\char`\~}
+% for compatibility with earlier versions
+\def\PYGZat{@}
+\def\PYGZlb{[}
+\def\PYGZrb{]}
+\makeatother
+\end{filecontents*}
+
+\iexec{mkdir -p $TMPDIR/minted && mv sam.pygstyle $TMPDIR/minted/.}
+
+\usemintedstyle{sam}
+\setminted{
+ breaksymbolleft={},
+ tabsize=2,
+ breaklines=true,
+}
+\newminted[samcode]{latex}{}
+\newmintinline[saminline]{latex}{}
+
+% use non-bold and all coloured for inline code in articles
+\ifdefined\insertaspectratio\else
+ \patchcmd{\minted@inputpyg@inline}{\minted@input}{\color{listingcolor}\renewcommand\textcolor[3][]{##3}\renewcommand\bfseries{}\minted@input}{}{}
+\fi
+
+\RequirePackage[most]{tcolorbox}
+\tcbuselibrary{minted}
+\tcbset{%
+ colframe=themecolor,
+ fonttitle=\bfseries,
+ sidebyside,
+ center lower,
+ righthand width=5.7cm,
+ bottom=2pt,
+ top=2pt,
+ left=3pt,
+ right=3pt,
+ sidebyside gap=10pt,
+ lower separated=false,
+ listing engine=minted,
+ minted language=latex,
+ colback=themecolor!10,
+ sharp corners,
+ boxrule=0pt,
+ before title={\strut}
+}
+
+% avoid page breaks right in front of the tcolorbox
+\@ifclassloaded{beamer}{}{
+ \tcbuselibrary{hooks}
+ \tcbset{before pre={\nopagebreak[4]}}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% document settings
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\@ifclassloaded{scrartcl}{%
+ \KOMAoptions{parskip=half}
+ \addtokomafont{sectioning}{\color{themecolor}}
+ \addtokomafont{date}{\normalsize}
+ \addtokomafont{author}{\normalsize}
+ \setlength{\footnotemargin}{0.7em}
+}{}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Custom macros
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\providecommand*{\CTAN}{\textsc{CTAN}\xspace}
+\providecommand*{\TikZ}{Ti\emph{k}Z\xspace}
+\providecommand*{\miktex}{MiK\TeX\xspace}
+\providecommand*{\texlive}{\TeX{}Live\xspace}
+\providecommand*{\tikzbrick}{Ti\emph{k}Zbrick\xspace}
+\providecommand*{\tikzducks}{Ti\emph{k}Zducks\xspace}
+\providecommand*{\tikzlings}{Ti\emph{k}Zlings\xspace}
+\providecommand*{\tikzmarmots}{Ti\emph{k}Zmarmots\xspace}
+\providecommand*{\ConTeXt}{C\kern-.0333emon\-\kern-.0667em\TeX\kern-.0333emt} \ No newline at end of file
diff --git a/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamertheme-tcolorbox-doc.pdf b/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamertheme-tcolorbox-doc.pdf
index db3b354834..fe64e72639 100644
--- a/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamertheme-tcolorbox-doc.pdf
+++ b/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamertheme-tcolorbox-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamertheme-tcolorbox-doc.tex b/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamertheme-tcolorbox-doc.tex
index 8bd7fc2fa4..c17e7fc17e 100644
--- a/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamertheme-tcolorbox-doc.tex
+++ b/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamertheme-tcolorbox-doc.tex
@@ -1,5 +1,3 @@
-% !TeX TS-program = latexmk -time -pdf -pdflatex="pdflatex -synctex=1 -interaction=nonstopmode -shell-escape %%O %%S" % | txs:///view-log | txs:///view-pdf
-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Documentation for the tcolorbox inner theme
@@ -13,80 +11,37 @@
% See http://www.latex-project.org/lppl.txt
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\documentclass[parskip=half]{scrartcl}
-
-% packages %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\usepackage[T1]{fontenc}
-\usepackage[utf8]{inputenc}
-\usepackage[english]{babel}
-\usepackage[bitstream-charter]{mathdesign}
-\usepackage[most]{tcolorbox}
-\usepackage[paper=a4paper,hmargin=2.9cm,vmargin=2.5cm]{geometry}
-\usepackage{scrlayer-scrpage}
-\usepackage[colorlinks=true,breaklinks=true,urlcolor=blendedblue,linkcolor=blendedblue,citecolor=blendedblue,filecolor=blendedblue]{hyperref}
-
-% customisation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\definecolor{blendedblue}{rgb}{0.2,0.2,0.7}
-\addtokomafont{sectioning}{\color{blendedblue}}
-\addtokomafont{date}{\normalsize}
-\addtokomafont{author}{\normalsize}
-
-\lstdefinestyle{tcolorboxstyle}{%
- language={[latex]TeX},
- tabsize=2,
- breaklines,
- basicstyle=\ttfamily,
- columns=fullflexible,
-% texcsstyle=*\color{blendedblue}\bfseries,
-% moretexcs={usetheme,useinnertheme},
-}
-
-\tcbset{%
- toptitle=1mm,
- left=2mm,
- title={Example},
- fonttitle=\large\sffamily,
- colbacktitle=blendedblue!75!black,
- colframe=blendedblue!75!black,
- colback=blendedblue!75!black!10!white,
- boxrule=0cm,
- frame hidden,
- arc=1.3mm,
- arc=2mm,
- sidebyside,
- listing options={style=tcolorboxstyle},
- bottom=0pt,
- top=0pt,
- lower separated=false,
- comment style={scale=2},
- enhanced,
- drop fuzzy shadow=black!90,
- title code app={
- \shade[top color=blendedblue!75!black,bottom color=blendedblue!75!black!10!white] (title.south west) rectangle ([yshift=-1mm]title.south east);
- }
-}
+% !TeX program = txs:///arara
+% arara: latexmk: {
+% arara: --> engine: pdflatex,
+% arara: --> options: [
+% arara: --> '-shell-escape',
+% arara: --> '-synctex=1',
+% arara: --> '-interaction=nonstopmode',
+% arara: --> ]
+% arara: --> }
+\documentclass{scrartcl}
-\lstset{style=tcolorboxstyle}
-
-%\makeatletter
-\newcommand{\prefix}{./build}
+% meta %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\title{The tcolorbox beamer inner theme}
+\subtitle{A beamer inner theme to replicate standard beamer blocks with tcolorboxes}
+\author{%
+ \texorpdfstring{
+ \texttt{samcarter}\\
+ \url{https://github.com/samcarter/beamertheme-tcolorbox}\\
+ \url{https://www.ctan.org/pkg/beamertheme-tcolorbox}
+ }{samcarter}}
+\date{Version v0.7 \textendash{} 2024/04/29}
+
+\usepackage[
+ themecolor=samteal
+]{\jobname-settings}
+
+\newcommand{\prefix}{./include}
\tcbset{
compilable listing/.style={listing file={\prefix/\jobname-listing-\thetcblistingcount.tex}},
run pdflatex/.style={run@system@command={cd\space \prefix;\space pdflatex}{\jobname-listing-\thetcblistingcount.tex}},%
}
-%\makeatother
-
-
-% meta %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\title{The tcolorbox beamer inner theme}
-\subtitle{A beamer inner theme to reproduce standard beamer blocks using tcolorboxes}
-\author{%
- \texorpdfstring{
- \texttt{samcarter}\\
- \url{https://github.com/samcarter/beamertheme-tcolorbox}\\
- \url{https://www.ctan.org/pkg/beamertheme-tcolorbox}
- }{samcarter}}
-\date{Version v0.6 \textendash{} 2023/05/03}
\begin{document}
\maketitle
@@ -94,77 +49,81 @@
\section{Introduction}
\label{intro}
-Over the last decade of answering beamer problems and more recently also being one of the maintainers of the beamer class, I saw countless of requests about beamer blocks. There were users who were looking for sometimes smaller, sometimes larger tweaks to the blocks in their document, for example "How to use the rectangular blocks with sharp corners, but with the shadows from the rounded beamer blocks". Other users encountered various tiny or something bigger problems with the default beamer blocks, like issues with some pdf viewers in which the seams of the underlying colorboxes would become visible.
+Over the last decade of answering beamer problems and more recently also being one of the maintainers of the beamer class, I saw countless of requests about beamer blocks. There were users who were looking for sometimes smaller, sometimes larger tweaks to the blocks in their document, for example "How to use the rectangular blocks with sharp corners, but with the shadows from the rounded beamer blocks". Other users encountered various tiny or something bigger problems with the default beamer blocks, like issues with some pdf viewers in which the seams of the underlying colorboxes would become visible.
For all these cases, there is now an alternative to the default beamer blocks: The tcolorbox inner beamer theme will replace the usual beamer mechanism to draw blocks with tcolorboxes. The tcolorboxes will automatically adopt the look and feel (round vs.\ sharp corners and shadows) as well as the colours of the normal beamer blocks.
-The package is included in \TeX{}Live and MiK\TeX\ and available from \textsc{CTAN} (\url{https://www.ctan.org/pkg/beamertheme-tcolorbox}).
+The package is included in \TeX{}Live and MiK\TeX\ and available from \textsc{CTAN} (\url{https://www.ctan.org/pkg/beamertheme-tcolorbox}).
The development version of this package is located at \url{https://github.com/samcarter/beamertheme-tcolorbox}. If you have any problems, ideas or other feedback, please make constructive use of the issue tracker.
Copyright \raisebox{0.2em}{\tiny\fontfamily{cmr}\selectfont\textcopyright} \texttt{samcarter}. Permission is granted to copy, distribute and\slash or modify this software under the terms of the LaTeX project public licence, version 1.3c or later \url{http://www.latex-project.org/lppl.txt}.
\section{Usage}
-The basic usage is fairly simple. One just needs to load the theme via
-\begin{tcolorbox}[title={}]
-\begin{lstlisting}
+The basic usage is fairly simple. One just needs to load the theme via
+\begin{tcolorbox}[lower separated=false,title={Usage}]
+\begin{samcode}
\useinnertheme{tcolorbox}
-\end{lstlisting}
+\end{samcode}
\end{tcolorbox}
-and after that, one can use the normal beamer \lstinline|block| environment as usual.
+and after that, one can use the normal beamer \saminline|block| environment as usual.
-Behind the scenes, this will replace the default mechanism of puzzling together the block from two separate \lstinline|beamercolorboxes|, with one tcolorbox.
+Behind the scenes, this will replace the default mechanism of puzzling together the block from two separate \saminline|beamercolorboxes|, with one tcolorbox.
In this simple configuration, the look and feel of the new blocks will be taken from other themes loaded in the presentation. For example if the Madrid theme is loaded, the resulting tcolorbox will have the usual colours, rounded corners and a shadow:
\begin{tcblisting}{
+ title={Example},
listing and comment,
pdf comment,
freeze pdf,
compilable listing,
run pdflatex,
+ comment style={scale=2}
}
\documentclass{beamer}
\usetheme{Madrid}
\useinnertheme{tcolorbox}
\begin{document}
\begin{frame}
-\begin{block}{Title}
- Body
-\end{block}
-\begin{alertblock}{Title}
- Body
-\end{alertblock}
-\begin{exampleblock}{Title}
- Body
-\end{exampleblock}
+ \begin{block}{Title}
+ Body
+ \end{block}
+ \begin{alertblock}{Title}
+ Body
+ \end{alertblock}
+ \begin{exampleblock}{Title}
+ Body
+ \end{exampleblock}
\end{frame}
\end{document}
\end{tcblisting}
-Additional settings done by user, like e.g. \lstinline|\setbeamertemplate{blocks}[rounded]|, won't be taken into account and the \lstinline|tcolorbox| inner theme should be loaded after such modifications.
+Additional settings done by user, like e.g. \saminline|\setbeamertemplate{blocks}[rounded]|, won't be taken into account and the \saminline|tcolorbox| inner theme should be loaded after such modifications.
\section{Options}
In addition to automatically adopting settings from other themes, one can also explicitly influence the look and feel via these options:
\begin{description}
-\item[blocks] controls if tcolorboxes should be used for beamer blocks (default: \lstinline|true|)
-\item[inmargin] controls if the block titles are placed in the left sidebar instead of the top of the block, e.g. for themes like \lstinline|Bergen| (default: \lstinline|false|, but set to \lstinline|true| if the \lstinline|inmargin| inner theme is detected)
-\item[rounded] controls if corners are rounded or sharp (default: \lstinline|false|, but set to \lstinline|true| if the \lstinline|rounded| inner theme is detected)
-\item[shaded] controls if there is a short colour gradient between the title and the body (default: \lstinline|false|, but set to \lstinline|true| if the block corners are rounded)
-\item[shadow] controls if the block has a shadow (default: \lstinline|false|, but set to \lstinline|true| if the \lstinline|shadow| outer theme is detected)
-\item[showtitle] controls if a small coloured stripe is shown for blocks with empty title (default: \lstinline|true|, but set to \lstinline|false| if the block has rounded corners)
-\item[titlepage] controls if tcolorboxes should be used for the title page, section page etc. (default: \lstinline|true|)
+\item[blocks] controls if tcolorboxes should be used for beamer blocks (default: \saminline|true|)
+\item[inmargin] controls if the block titles are placed in the left sidebar instead of the top of the block, e.g. for themes like \saminline|Bergen| (default: \saminline|false|, but set to \saminline|true| if the \saminline|inmargin| inner theme is detected)
+\item[rounded] controls if corners are rounded or sharp (default: \saminline|false|, but set to \saminline|true| if the \saminline|rounded| inner theme is detected)
+\item[shaded] controls if there is a short colour gradient between the title and the body (default: \saminline|false|, but set to \saminline|true| if the block corners are rounded)
+\item[shadow] controls if the block has a shadow (default: \saminline|false|, but set to \saminline|true| if the \saminline|shadow| outer theme is detected)
+\item[showtitle] controls if a small coloured stripe is shown for blocks with empty title (default: \saminline|true|, but set to \saminline|false| if the block has rounded corners)
+\item[titlepage] controls if tcolorboxes should be used for the title page, section page etc. (default: \saminline|true|)
\end{description}
-These options can be set to \lstinline|true| or \lstinline|false| (calling either option without explicit \lstinline|true| or \lstinline|false| will set it to \lstinline|true|).
+These options can be set to \saminline|true| or \saminline|false| (calling either option without explicit \saminline|true| or \saminline|false| will set it to \saminline|true|).
-If one for example likes the Antibes theme, but prefers the blocks to have shadows, they can now easily be added: \nopagebreak
+If one, for example, likes the Antibes theme, but prefers the blocks to have shadows, they can now easily be added: \nopagebreak
\begin{tcblisting}{
+ title={Example},
listing and comment,
pdf comment,
freeze pdf,
compilable listing,
run pdflatex,
+ comment style={scale=2}
}
\documentclass{beamer}
\usetheme{Antibes}
@@ -173,46 +132,47 @@ If one for example likes the Antibes theme, but prefers the blocks to have shado
]{tcolorbox}
\begin{document}
\begin{frame}
-\begin{block}{Title}
- Body
-\end{block}
-\begin{alertblock}{Title}
- Body
-\end{alertblock}
-\begin{exampleblock}{Title}
- Body
-\end{exampleblock}
+ \begin{block}{Title}
+ Body
+ \end{block}
+ \begin{alertblock}{Title}
+ Body
+ \end{alertblock}
+ \begin{exampleblock}{Title}
+ Body
+ \end{exampleblock}
\end{frame}
\end{document}
\end{tcblisting}
-Beyond these two options, the users also has the myriads of options of the tcolobox package to their disposal, e.g.\ via \lstinline|\tcbset{...}| or \lstinline|\tcbsetforeverylayer{...}|:
+Beyond these two options, the users also has the myriads of options of the tcolobox package to their disposal, e.g.\ via \saminline|\tcbset{...}| or \saminline|\tcbsetforeverylayer{...}|:
\begin{tcblisting}{
+ title={Example},
listing and comment,
pdf comment,
freeze pdf,
compilable listing,
run pdflatex,
+ comment style={scale=2}
}
\documentclass{beamer}
\usetheme{Ilmenau}
\useinnertheme{tcolorbox}
\tcbsetforeverylayer{
- borderline={1pt}{0pt}{
- black,dashed}
+ borderline={1pt}{0pt}{black,dashed}
}
\begin{document}
\begin{frame}
-\begin{block}{Title}
- Body
-\end{block}
-\begin{alertblock}{Title}
- Body
-\end{alertblock}
-\begin{exampleblock}{Title}
- Body
-\end{exampleblock}
+ \begin{block}{Title}
+ Body
+ \end{block}
+ \begin{alertblock}{Title}
+ Body
+ \end{alertblock}
+ \begin{exampleblock}{Title}
+ Body
+ \end{exampleblock}
\end{frame}
\end{document}
\end{tcblisting}
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-publist/README b/macros/latex/contrib/biblatex-contrib/biblatex-publist/README
index 10c4d180a9..3cebed7b7b 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-publist/README
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-publist/README
@@ -46,6 +46,9 @@ instructions.
== CHANGES ==
+* V. 2.9 (2025-05-09):
+ - Add bibchecks to exclude (specific kinds of) unpublished work.
+
* V. 2.8 (2024-03-08):
- Fix delimiter with plauthor second in a truncated author list (#50).
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-publist/biblatex-publist.pdf b/macros/latex/contrib/biblatex-contrib/biblatex-publist/biblatex-publist.pdf
index 2fd5c90dbe..fb8333ecf7 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-publist/biblatex-publist.pdf
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-publist/biblatex-publist.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-publist/biblatex-publist.tex b/macros/latex/contrib/biblatex-contrib/biblatex-publist/biblatex-publist.tex
index 19b80cb4f2..aa64fc9861 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-publist/biblatex-publist.tex
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-publist/biblatex-publist.tex
@@ -115,7 +115,7 @@
\thanks{Please report issues via \protect\url{https://github.com/jspitz/biblatex-publist}.}%
}
-\date{Version 2.8, 2024/03/08}
+\date{Version 2.9, 2025/05/09}
\maketitle
\begin{abstract}
@@ -862,6 +862,28 @@ entries of diverse type and authors, specify:
Note that this method sometimes requires several reruns of \texttt{latex}
to fix the numbering.
+Sometimes you might also want to omit some publications from the list which are not yet
+published or not yet accepted (e.g., because they are under blind review and you do not
+want to reveal your identity yet). To this end, \bpl\ features some \joption{bibchecks}
+(for the concept, please refer to \cite[sec.~3.8.2]{bibltx}). Bibchecks can be activated
+by passing \joption{check=<bibcheck>} to the optional argument of \jfcsmacro{printbibliography}.
+
+The following bibchecks are available:
+\begin{itemize}
+ \item \joption{nosubmitted}: omits all entries with pubstate \joption{submitted}.
+ \item \joption{noprepared}: omits all entries with pubstate \joption{inpreparation}.
+ \item \joption{onlypublished}: omits all unpublished entries (i.e., entries that have
+ a pubstate) with the exception of \joption{prepublished} entries.
+ \item \joption{onlyaccepted}: omits all unpublished entries (i.e., entries that have
+ a pubstate) with the exception of \joption{prepublished} and \joption{forthcoming}
+ (and thus accepted) entries.
+\end{itemize}
+%
+Several of these bibchecks might be used in a row, e.g.:
+\begin{lstlisting}[moretexcs={[1]{printbibliography}}]
+\printbibliography[heading=none,filter=mine,check=nosubmitted,check=noprepared]
+\end{lstlisting}
+
\section{Sorting\label{sec:sorting}}
@@ -942,6 +964,11 @@ until further change).
\section{Revision Log}
\begin{description}
+ \item [{V. 2.9 (2025/05/09):}]~
+ \begin{itemize}
+ \item Add bibchecks to exclude (specific kinds of) unpublished work
+ (see sec.~\ref{sec:filtering}).
+ \end{itemize}
\item [{V. 2.8 (2024/03/08):}]~
\begin{itemize}
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.bbx b/macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.bbx
index 7e955db150..c7d385b452 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.bbx
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.bbx
@@ -25,8 +25,8 @@
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\def\bpl@version{2.8}
-\def\bpl@rdate{2024/03/08}
+\def\bpl@version{2.9}
+\def\bpl@rdate{2025/05/09}
\ProvidesFile{publist.bbx}[\bpl@rdate\space v.\bpl@version\space
biblatex bibliography style (JSP)]
@@ -1105,6 +1105,43 @@
\defbibfilter{mine}{category=filtered}
+%
+% bibchecks
+%
+% check to exclude submitted work (which is under review)
+% from publist
+\defbibcheck{nosubmitted}{%
+ \edef\tmpps{\bibstring{submitted}}%
+ \iffieldequals{pubstate}{\tmpps}{\skipentry}{}%
+}
+
+% check to exclude work in preparation
+% from publist
+\defbibcheck{noprepared}{%
+ \edef\tmpps{\bibstring{inpreparation}}%
+ \iffieldequals{pubstate}{\tmpps}{\skipentry}{}%
+}
+
+% check to exclude all work which is not (pre-)published
+\defbibcheck{onlypublished}{%
+ \iffieldundef{pubstate}{}{%
+ \edef\tmpps{\bibstring{prepublished}}%
+ \iffieldequals{pubstate}{\tmpps}{}{\skipentry}%
+ }%
+}
+
+% check to exclude all work which is not accepted or published
+\defbibcheck{onlyaccepted}{%
+ \iffieldundef{pubstate}{}{%
+ \edef\tmpps{\bibstring{prepublished}}%
+ \edef\tmppss{\bibstring{forthcoming}}%
+ \iffieldequals{pubstate}{\tmpps}{}{%
+ \iffieldequals{pubstate}{\tmppss}{}{%
+ \skipentry}%
+ }%
+ }%
+}
+
%
% Count non-plauthors
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.cbx b/macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.cbx
index d1b46b1ab9..bfc159a131 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.cbx
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.cbx
@@ -26,8 +26,8 @@
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\def\bpl@version{2.8}
-\def\bpl@rdate{2024/03/08}
+\def\bpl@version{2.9}
+\def\bpl@rdate{2025/05/09}
\ProvidesFile{publist.cbx}[\bpl@rdate\space v.\bpl@version\space
biblatex citation style (JSP)]
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.dbx b/macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.dbx
index 87aebdbf2b..d43f60a465 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.dbx
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.dbx
@@ -1,5 +1,5 @@
% publist.dbx, biblatex data model specification for the biblatex-publist
-% package, version 2.8 (2024/03/08).
+% package, version 2.9 (2025/05/09).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/catppuccinpalette/README.md b/macros/latex/contrib/catppuccinpalette/README.md
new file mode 100644
index 0000000000..105e5497a4
--- /dev/null
+++ b/macros/latex/contrib/catppuccinpalette/README.md
@@ -0,0 +1,28 @@
+# Readme for the package catppuccinPalette
+
+Author: Lukas Heindl (`oss.heindl+latex@protonmail.com`).
+
+CTAN page: [catppuccinPalette](https://ctan.org/pkg/catppuccinpalette)
+
+## License
+The LaTeX package `catppuccinPalette` is distributed under the LPPL 1.3 license.
+
+## Description
+
+The LaTeX package `catppuccinPalette` provides new colors for xcolor.
+
+## Installation
+
+For a manual installation:
+
+* put the files `catppuccinpalette.ins` and `catppuccinpalette.dtx` in the same directory;
+* run `latex catppuccinpalette.ins` in that directory.
+
+The file `catppuccinpalette.sty` will be generated.
+
+The file `catppuccinpalette.sty` is the only file necessary to use the latex package `catppuccinPalette`.
+You have to put it in the same directory as your document or (best) in a `texmf` tree.
+
+Simplified version:
+
+* run `l3build unpack` to generate the `.sty` in `build/unpacked/`
diff --git a/macros/latex/contrib/catppuccinpalette/catppuccinpalette.dtx b/macros/latex/contrib/catppuccinpalette/catppuccinpalette.dtx
new file mode 100644
index 0000000000..f74df5dd95
--- /dev/null
+++ b/macros/latex/contrib/catppuccinpalette/catppuccinpalette.dtx
@@ -0,0 +1,422 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2024 by Lukas Heindl <oss.heindl+latex@protonmail.com>
+% ---------------------------------------------------------------------------
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Lukas Heindl.
+%
+% This work consists of the files catppuccinpalette.dtx and catppuccinpalette.ins
+% and the derived filebase catppuccinpalette.sty.
+%
+% \fi
+%
+% \iffalse
+%<*driver>
+\ProvidesFile{catppuccinpalette.dtx}
+%</driver>
+%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+%<package>\ProvidesPackage{catppuccinpalette}
+%<*package>
+ [2024/05/22 v1.0.2 catppuccin xcolor palette]
+%</package>
+%
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage{catppuccinpalette}
+\usepackage{multicol}
+\usepackage{pgffor}
+\usepackage{tabularx, booktabs}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+ \DocInput{catppuccinpalette.dtx}
+ \PrintChanges
+ \PrintIndex
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{111}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+%
+% \changes{v0.0.1}{2024/02/09}{Converted to DTX file}
+% \changes{v1.0.0}{2024/02/27}{First full release}
+% \changes{v1.0.1}{2024/05/19}{Make fit for CTAN}
+% \changes{v1.0.2}{2024/05/19}{Fix colors in documentation}
+%
+% \DoNotIndex{\newcommand,\newenvironment,\color,\colorlet,\def,\fi,\RequirePackage,\ProvidesPackage,\ProcessPgfOptions,\preparecolorset,\pgfkeys,\pagecolor,\newif,\NeedsTeXFormat}
+%
+% \providecommand*{\url}{\texttt}
+% \GetFileInfo{catppuccinpalette.dtx}
+% \title{The \textsf{catppuccinPalette} package}
+% \author{Lukas Heindl \\ \url{oss.heindl+latex@protonmail.com} \\ \url{https://github.com/atticus-sullivan/catpuccinPalette}}
+% \date{\fileversion~from \filedate}
+%
+% \maketitle
+%
+% \begin{abstract}
+% The LaTeX package \pkg{catppuccinPalette} provides new colors for xcolor.
+% \end{abstract}
+%
+% \section{Introduction}
+%
+% Catppuccin\footnote{\url{https://github.com/catppuccin/catppuccin}} is a nice
+% pastel theme in 4 flavours/styles (\emph{Latte}, \emph{Frapp\'e},
+% \emph{Macchiato}, \emph{Mocha}). This package defines these themes as xcolor
+% colors.
+%
+% \section{Usage}
+%
+% Load via |\usepackage{catppuccinpalette}|
+%
+% Just use the new colors (prefixed with \verb|Cat<Style>|) like normal xcolors.
+% In addition to the usual colors of the palette, this package defines some
+% colors according to the
+% style guide\footnote{\url{https://github.com/catppuccin/catppuccin/blob/main/docs/style-guide.md}}
+% for ease of use.
+%
+% This package also allows you to set a specific style which sets the shortened
+% color names (prefixed only with \verb|Cat|) to the selected style (allows for
+% easy switching style) via the package option \verb|style|.
+%
+% This package loads xcolor (without options) so if you want to set some xcolor
+% options you should load xcolor before loading this package.
+%
+% \subsection{Package options}
+% \begin{tabularx}{\linewidth}{lX}
+% \emph{Option} & \emph{Description}
+% \\\toprule
+% \verb|style| &
+% set the style used by the shortened prefix (\verb|Cat|). Possible values:
+% \verb|Latte| (default+initial), \verb|latte|, \verb|Frappe|, \verb|frappe|,
+% \verb|Mocha|, \verb|mocha|
+% \\
+% \verb|textcolor| &
+% set the default textcolor of the document to \verb|CatText|. Possible values:
+% \verb|false| (default+initial), \verb|true|
+% \\
+% \verb|pagecolor| &
+% set the pagecolor of the document to \verb|CatBackground|. Possible values:
+% \verb|false| (default+initial), \verb|true|
+% \\\midrule
+% \verb|styleAll| &
+% shortcut for setting \verb|pagecolor| and \verb|textcolor|
+% \\\bottomrule
+% \end{tabularx}
+%
+% \subsection{Colors}
+% \newcommand{\showCol}[1]{\raisebox{0.5ex}{\fcolorbox{black}{#1}{\hspace{1em}}} #1}
+% \foreach \Style in {Latte,Frappe,Macchiato,Mocha}{
+% \subsubsection{Style \texttt{\Style}}
+% \begin{multicols}{2}
+% \showCol{Cat\Style Blue}\par
+% \showCol{Cat\Style Rosewater}\par
+% \showCol{Cat\Style Flamingo}\par
+% \showCol{Cat\Style Pink}\par
+% \showCol{Cat\Style Mauve}\par
+% \showCol{Cat\Style Red}\par
+% \showCol{Cat\Style Maroon}\par
+% \showCol{Cat\Style Peach}\par
+% \showCol{Cat\Style Yellow}\par
+% \showCol{Cat\Style Green}\par
+% \showCol{Cat\Style Teal}\par
+% \showCol{Cat\Style Sky}\par
+% \showCol{Cat\Style Sapphire}\par
+% \showCol{Cat\Style Blue}\par
+% \showCol{Cat\Style Lavender}\par
+% \showCol{Cat\Style Text}\par
+% \showCol{Cat\Style Subtext1}\par
+% \showCol{Cat\Style Subtext0}\par
+% \showCol{Cat\Style Overlay2}\par
+% \showCol{Cat\Style Overlay1}\par
+% \showCol{Cat\Style Overlay0}\par
+% \showCol{Cat\Style Surface2}\par
+% \showCol{Cat\Style Surface1}\par
+% \showCol{Cat\Style Surface0}\par
+% \showCol{Cat\Style Base}\par
+% \showCol{Cat\Style Mantle}\par
+% \showCol{Cat\Style Crust}\par
+% \end{multicols}
+%
+% Some basic colors according to the style guide:
+%
+% \begin{multicols}{2}
+% \showCol{Cat\Style Background}\par
+% \showCol{Cat\Style Link}\par
+% \phantom{}\par
+% \columnbreak
+% \showCol{Cat\Style Success}\par
+% \showCol{Cat\Style Warning}\par
+% \showCol{Cat\Style Error}\par
+% \end{multicols}
+%
+% }
+%
+%
+% \StopEventually{}
+%
+% \section{Implementation}
+%
+% \iffalse
+%<*package>
+% \fi
+%
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}[1994/06/01]
+\RequirePackage{pgfopts}
+\RequirePackage{xcolor}
+% \end{macrocode}
+% Define the conditionals used by package options
+% \begin{macrocode}
+\newif\ifcatppuccinpalette@pagecolor
+\newif\ifcatppuccinpalette@textcolor
+\pgfkeys{
+ /catppuccinPalette/.cd,
+% \end{macrocode}
+% Define the package option keys
+% \begin{macrocode}
+ style/.is choice,
+ style/.value required,
+ style/Latte/.code = {\def\catppuccinpalette@style{Latte}},
+ style/latte/.forward to = /catppuccinPalette/style/Latte,
+ style/Frappe/.code = {\def\catppuccinpalette@style{Frappe}},
+ style/frappe/.forward to = /catppuccinPalette/style/frappe,
+ style/Macchiato/.code = {\def\catppuccinpalette@style{Macchiato}},
+ style/macchiato/.forward to = /catppuccinPalette/style/Macchiato,
+ style/Mocha/.code = {\def\catppuccinpalette@style{Mocha}},
+ style/mocha/.forward to = /catppuccinPalette/style/Mocha,
+ textcolor/.is if = catppuccinpalette@textcolor,
+ textcolor/.default = true,
+ pagecolor/.is if = catppuccinpalette@pagecolor,
+ pagecolor/.default = true,
+ styleAll/.style = {pagecolor,textcolor},
+% \end{macrocode}
+% Set initial values for all options
+% \begin{macrocode}
+ textcolor = false,
+ pagecolor = false,
+ style = Latte,
+}
+\ProcessPgfOptions*
+% \end{macrocode}
+% Define the \emph{Latte} colorset
+% \begin{macrocode}
+\preparecolorset{RGB/HTML}{CatLatte}{}{%
+ Rosewater,220,138,120/DC8A78;%
+ Flamingo,221,120,120/DD7878;%
+ Pink,234,118,203/EA76CB;%
+ Mauve,136,57,239/8839EF;%
+ Red,210,15,57/D20F39;%
+ Maroon,230,69,83/E64553;%
+ Peach,254,100,11/FE640B;%
+ Yellow,223,142,29/DF8E1D;%
+ Green,64,160,43/40A02B;%
+ Teal,23,146,153/179299;%
+ Sky,4,165,229/04A5E5;%
+ Sapphire,32,159,181/209FB5;%
+ Blue,30,102,245/1E66F5;%
+ Lavender,114,135,253/7287FD;%
+ Text,76,79,105/4C4F69;%
+ Subtext1,92,95,119/5C5F77;%
+ Subtext0,108,111,133/6C6F85;%
+ Overlay2,124,127,147/7C7F93;%
+ Overlay1,140,143,161/8C8FA1;%
+ Overlay0,156,160,176/9CA0B0;%
+ Surface2,172,176,190/ACB0BE;%
+ Surface1,188,192,204/BCC0CC;%
+ Surface0,204,208,218/CCD0DA;%
+ Base,239,241,245/EFF1F5;%
+ Mantle,230,233,239/E6E9EF;%
+ Crust,220,224,232/DCE0E8%
+}
+% \end{macrocode}
+% Define colors according to the catppuccin style guide
+% \begin{macrocode}
+\colorlet{CatLatteBackground}{CatLatteBase}
+\colorlet{CatLatteLink}{CatLatteBlue}
+\colorlet{CatLatteSuccess}{CatLatteGreen}
+\colorlet{CatLatteWarning}{CatLatteYellow}
+\colorlet{CatLatteError}{CatLatteRed}
+% \end{macrocode}
+% Define the styles \emph{Frappe}, \emph{Macchiato} and \emph{Mocha} accordingly
+% \begin{macrocode}
+\preparecolorset{RGB/HTML}{CatFrappe}{}{%
+ Rosewater,242,213,207/F2D5CF;%
+ Flamingo,238,190,190/EEBEBE;%
+ Pink,244,184,228/F4B8E4;%
+ Mauve,202,158,230/CA9EE6;%
+ Red,231,130,132/E78284;%
+ Maroon,234,153,156/EA999C;%
+ Peach,239,159,118/EF9F76;%
+ Yellow,229,200,144/E5C890;%
+ Green,166,209,137/A6D189;%
+ Teal,129,200,190/81C8BE;%
+ Sky,153,209,219/99D1DB;%
+ Sapphire,133,193,220/85C1DC;%
+ Blue,140,170,238/8CAAEE;%
+ Lavender,186,187,241/BABBF1;%
+ Text,198,208,245/C6D0F5;%
+ Subtext1,181,191,226/B5BFE2;%
+ Subtext0,165,173,206/A5ADCE;%
+ Overlay2,148,156,187/949CBB;%
+ Overlay1,131,139,167/838BA7;%
+ Overlay0,115,121,148/737994;%
+ Surface2,98,104,128/626880;%
+ Surface1,81,87,109/51576D;%
+ Surface0,65,69,89/414559;%
+ Base,48,52,70/303446;%
+ Mantle,41,44,60/292C3C;%
+ Crust,35,38,52/232634%
+}
+\colorlet{CatFrappeBackground}{CatFrappeBase}
+\colorlet{CatFrappeLink}{CatFrappeBlue}
+\colorlet{CatFrappeSuccess}{CatFrappeGreen}
+\colorlet{CatFrappeWarning}{CatFrappeYellow}
+\colorlet{CatFrappeError}{CatFrappeRed}
+\preparecolorset{RGB/HTML}{CatMacchiato}{}{%
+ Rosewater,244,219,214/F4DBD6;%
+ Flamingo,240,198,198/F0C6C6;%
+ Pink,245,189,230/F5BDE6;%
+ Mauve,198,160,246/C6A0F6;%
+ Red,237,135,150/ED8796;%
+ Maroon,238,153,160/EE99A0;%
+ Peach,245,169,127/F5A97F;%
+ Yellow,238,212,159/EED49F;%
+ Green,166,218,149/A6DA95;%
+ Teal,139,213,202/8BD5CA;%
+ Sky,145,215,227/91D7E3;%
+ Sapphire,125,196,228/7DC4E4;%
+ Blue,138,173,244/8AADF4;%
+ Lavender,183,189,248/B7BDF8;%
+ Text,202,211,245/CAD3F5;%
+ Subtext1,184,192,224/B8C0E0;%
+ Subtext0,165,173,203/A5ADCB;%
+ Overlay2,147,154,183/939AB7;%
+ Overlay1,128,135,162/8087A2;%
+ Overlay0,110,115,141/6E738D;%
+ Surface2,91,96,120/5B6078;%
+ Surface1,73,77,100/494D64;%
+ Surface0,54,58,79/363A4F;%
+ Base,36,39,58/24273A;%
+ Mantle,30,32,48/1E2030;%
+ Crust,24,25,38/181926%
+}
+\colorlet{CatMacchiatoBackground}{CatMacchiatoBase}
+\colorlet{CatMacchiatoLink}{CatMacchiatoBlue}
+\colorlet{CatMacchiatoSuccess}{CatMacchiatoGreen}
+\colorlet{CatMacchiatoWarning}{CatMacchiatoYellow}
+\colorlet{CatMacchiatoError}{CatMacchiatoRed}
+\preparecolorset{RGB/HTML}{CatMocha}{}{%
+ Rosewater,245,224,220/F5E0DC;%
+ Flamingo,242,205,205/F2CDCD;%
+ Pink,245,194,231/F5C2E7;%
+ Mauve,203,166,247/CBA6F7;%
+ Red,243,139,168/F38BA8;%
+ Maroon,235,160,172/EBA0AC;%
+ Peach,250,179,135/FAB387;%
+ Yellow,249,226,175/F9E2AF;%
+ Green,166,227,161/A6E3A1;%
+ Teal,148,226,213/94E2D5;%
+ Sky,137,220,235/89DCEB;%
+ Sapphire,116,199,236/74C7EC;%
+ Blue,137,180,250/89B4FA;%
+ Lavender,180,190,254/B4BEFE;%
+ Text,205,214,244/CDD6F4;%
+ Subtext1,186,194,222/BAC2DE;%
+ Subtext0,166,173,200/A6ADC8;%
+ Overlay2,147,153,178/9399B2;%
+ Overlay1,127,132,156/7F849C;%
+ Overlay0,108,112,134/6C7086;%
+ Surface2,88,91,112/585B70;%
+ Surface1,69,71,90/45475A;%
+ Surface0,49,50,68/313244;%
+ Base,30,30,46/1E1E2E;%
+ Mantle,24,24,37/181825;%
+ Crust,17,17,27/11111B%
+}
+% \end{macrocode}
+% Define shortcuts for active style
+% \begin{macrocode}
+\colorlet{CatMochaBackground}{CatMochaBase}
+\colorlet{CatMochaLink}{CatMochaBlue}
+\colorlet{CatMochaSuccess}{CatMochaGreen}
+\colorlet{CatMochaWarning}{CatMochaYellow}
+\colorlet{CatMochaError}{CatMochaRed}
+\colorlet{CatRosewater}{Cat\catppuccinpalette@style Rosewater}
+\colorlet{CatFlamingo}{Cat\catppuccinpalette@style Flamingo}
+\colorlet{CatPink}{Cat\catppuccinpalette@style Pink}
+\colorlet{CatMauve}{Cat\catppuccinpalette@style Mauve}
+\colorlet{CatRed}{Cat\catppuccinpalette@style Red}
+\colorlet{CatMaroon}{Cat\catppuccinpalette@style Maroon}
+\colorlet{CatPeach}{Cat\catppuccinpalette@style Peach}
+\colorlet{CatYellow}{Cat\catppuccinpalette@style Yellow}
+\colorlet{CatGreen}{Cat\catppuccinpalette@style Green}
+\colorlet{CatTeal}{Cat\catppuccinpalette@style Teal}
+\colorlet{CatSky}{Cat\catppuccinpalette@style Sky}
+\colorlet{CatSapphire}{Cat\catppuccinpalette@style Sapphire}
+\colorlet{CatBlue}{Cat\catppuccinpalette@style Blue}
+\colorlet{CatLavender}{Cat\catppuccinpalette@style Lavender}
+\colorlet{CatText}{Cat\catppuccinpalette@style Text}
+\colorlet{CatSubtext1}{Cat\catppuccinpalette@style Subtext1}
+\colorlet{CatSubtext0}{Cat\catppuccinpalette@style Subtext0}
+\colorlet{CatOverlay2}{Cat\catppuccinpalette@style Overlay2}
+\colorlet{CatOverlay1}{Cat\catppuccinpalette@style Overlay1}
+\colorlet{CatOverlay0}{Cat\catppuccinpalette@style Overlay0}
+\colorlet{CatSurface2}{Cat\catppuccinpalette@style Surface2}
+\colorlet{CatSurface1}{Cat\catppuccinpalette@style Surface1}
+\colorlet{CatSurface0}{Cat\catppuccinpalette@style Surface0}
+\colorlet{CatBase}{Cat\catppuccinpalette@style Base}
+\colorlet{CatMantle}{Cat\catppuccinpalette@style Mantle}
+\colorlet{CatCrust}{Cat\catppuccinpalette@style Crust}
+\colorlet{CatBackground}{Cat\catppuccinpalette@style Base}
+\colorlet{CatLink}{Cat\catppuccinpalette@style Blue}
+\colorlet{CatSuccess}{Cat\catppuccinpalette@style Green}
+\colorlet{CatWarning}{Cat\catppuccinpalette@style Yellow}
+\colorlet{CatError}{Cat\catppuccinpalette@style Red}
+% \end{macrocode}
+% Set (only initial) pagecolor according to the style guide if the user wants this
+% \begin{macrocode}
+\ifcatppuccinpalette@pagecolor
+ \pagecolor{CatBackground}
+\fi
+% \end{macrocode}
+% Set textcolor according to the style guide if the user wants this
+% \begin{macrocode}
+\ifcatppuccinpalette@textcolor
+ \color{CatText}
+\fi
+% \end{macrocode}
+\endinput
+%
+% \iffalse
+%</package>
+% \fi
+%
+% \Finale
+\endinput
diff --git a/macros/latex/contrib/catppuccinpalette/catppuccinpalette.ins b/macros/latex/contrib/catppuccinpalette/catppuccinpalette.ins
new file mode 100644
index 0000000000..c93b929dcd
--- /dev/null
+++ b/macros/latex/contrib/catppuccinpalette/catppuccinpalette.ins
@@ -0,0 +1,57 @@
+%% Copyright (C) 2024 by Lukas Heindl <oss.heindl+latex@protonmail.com>
+%% --------------------------------------------------------------------------
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Lukas Heindl.
+%%
+%% This work consists of the files catppuccinpalette.dtx and catppuccinpalette.ins
+%% and the derived filebase catppuccinpalette.sty.
+%%
+
+\input docstrip.tex
+\keepsilent
+
+\usedir{tex/latex/catppuccinpalette}
+
+\preamble
+
+This is a generated file.
+
+Copyright (C) 2024 by Lukas Heindl <oss.heindl+latex@protonmail.com>
+--------------------------------------------------------------------------
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.3
+of this license or (at your option) any later version.
+The latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+and version 1.3 or later is part of all distributions of LaTeX
+version 2005/12/01 or later.
+
+\endpreamble
+
+\generate{\file{catppuccinpalette.sty}{\from{catppuccinpalette.dtx}{package}}}
+
+\obeyspaces
+\Msg{*************************************************************}
+\Msg{* *}
+\Msg{* To finish the installation you have to move the following *}
+\Msg{* file into a directory searched by TeX: *}
+\Msg{* *}
+\Msg{* catppuccinpalette.sty *}
+\Msg{* *}
+\Msg{* To produce the documentation run the file catppuccinpalette.dtx *}
+\Msg{* through LaTeX. *}
+\Msg{* *}
+\Msg{* Happy TeXing! *}
+\Msg{* *}
+\Msg{*************************************************************}
+
+\endbatchfile
diff --git a/macros/latex/contrib/catppuccinpalette/catppuccinpalette.pdf b/macros/latex/contrib/catppuccinpalette/catppuccinpalette.pdf
new file mode 100644
index 0000000000..8a5e2d9c89
--- /dev/null
+++ b/macros/latex/contrib/catppuccinpalette/catppuccinpalette.pdf
Binary files differ
diff --git a/macros/latex/contrib/colorblind/ChangeLog b/macros/latex/contrib/colorblind/ChangeLog
new file mode 100644
index 0000000000..a864cd215e
--- /dev/null
+++ b/macros/latex/contrib/colorblind/ChangeLog
@@ -0,0 +1,7 @@
+Package `colorblind` by Simon Pfahler
+https://github.com/simon-pfahler/colorblind
+
+History
+=======
+2024/05/12 v1.0
+* First published release.
diff --git a/macros/latex/contrib/colorblind/README.md b/macros/latex/contrib/colorblind/README.md
new file mode 100644
index 0000000000..0fd83d42f8
--- /dev/null
+++ b/macros/latex/contrib/colorblind/README.md
@@ -0,0 +1,23 @@
+## Package `colorblind` by Simon Pfahler
+
+Version 2024-05-12 v1.0
+
+In colorblind-safe documents, the contents are presented in a way that the same information is conveyed to readers regardless of a potential color vision deficiency.
+This package provides the tools necessary for colorblind-safe typesetting in LaTeX.
+It provides color schemes for a wide range of applications.
+The most commonly used schemes are qualitative schemes, providing easily distinguishable colors for use in graphics, but also for text coloring or highlighting.
+Additionally, diverging and sequential schemes are included which can be used for encoding quantitative information in the colors of a graphic.
+Therefore, colorblind-safeness is incorporated into the writing process, making it both less cumbersome and less error-prone.
+
+## Copyright (C)
+- 2023-2024 Simon Pfahler
+
+## License
+LaTeX Project Public License, version 1.3c or later.
+
+## Notes
+This package is available on github:
+https://github.com/simon-pfahler/colorblind
+
+If you find any bugs, please report them there.
+
diff --git a/macros/latex/contrib/colorblind/bib.bib b/macros/latex/contrib/colorblind/bib.bib
new file mode 100644
index 0000000000..4639115ad7
--- /dev/null
+++ b/macros/latex/contrib/colorblind/bib.bib
@@ -0,0 +1,43 @@
+%%
+%% ----------------------------------------------------------------
+%% Copyright (C) 2023-2024 by Simon Pfahler <simon.pfahler at ur dot de>
+%% ----------------------------------------------------------------
+%%
+@online{Tol,
+ author = {Paul Tol},
+ title = {Paul Tol's Notes: Colour schemes and templates},
+ year = {2021},
+ url = {https://personal.sron.nl/~pault/},
+ urldate = {2023-12-29},
+}
+
+@inproceedings{Ichihara_2008,
+ author = {Yasuyo G. Ichihara and Masataka Okabe and Koichi Iga and Yosuke Tanaka and Kohei Musha and Kei Ito},
+ title = {{Color universal design: the selection of four easily distinguishable colors for all color vision types}},
+ year = {2008},
+ volume = {6807},
+ booktitle = {Color Imaging XIII: Processing, Hardcopy, and Applications},
+ editor = {Reiner Eschbach and Gabriel G. Marcu and Shoji Tominaga},
+ organization = {International Society for Optics and Photonics},
+ publisher = {SPIE},
+ pages = {68070O},
+ keywords = {Color Universal Design, color vision, color category, visual communication},
+ doi = {10.1117/12.765420},
+ url = {https://doi.org/10.1117/12.765420},
+}
+
+@article{Wong_2011,
+ author={Wong, Bang},
+ title={Points of view: Color blindness},
+ journal={Nature Methods},
+ year={2011},
+ month={Jun},
+ day={01},
+ volume={8},
+ number={6},
+ pages={441-441},
+ issn={1548-7105},
+ doi={10.1038/nmeth.1618},
+ url={https://doi.org/10.1038/nmeth.1618}
+}
+
diff --git a/macros/latex/contrib/colorblind/colorblind.sty b/macros/latex/contrib/colorblind/colorblind.sty
new file mode 100644
index 0000000000..a549ea06f9
--- /dev/null
+++ b/macros/latex/contrib/colorblind/colorblind.sty
@@ -0,0 +1,398 @@
+%%
+%% ----------------------------------------------------------------
+%% Copyright (C) 2023-2024 by Simon Pfahler <simon.pfahler at ur dot de>
+%% ----------------------------------------------------------------
+%%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{colorblind}[2024/05/12 Easy colorblind-safe typesetting]
+
+\RequirePackage{xcolor}
+\RequirePackage{ifthen}
+\RequirePackage{tikz}
+\usetikzlibrary{math}
+\RequirePackage{pgfplots}
+\pgfplotsset{compat=1.18}
+
+\DeclareOption{Tol}{
+%>>> Color schemes by Paul Tol, source: https://personal.sron.nl/~pault
+%
+%>>> Qualitative color schemes
+%
+% Bright Qualitative color scheme
+\providecolorset{RGB}{T-Q-B}{}{%
+ 1,68,119,170;%
+ 2,102,204,238;%
+ 3,34,136,51;%
+ 4,204,187,68;%
+ 5,238,102,119;%
+ 6,170,51,119;%
+ 0,187,187,187%
+}
+%
+% High-contrast qualitative color scheme
+\providecolorset{RGB}{T-Q-HC}{}{%
+ 1,255,255,255;%
+ 2,221,170,51;%
+ 3,187,85,102;%
+ 4,0,68,136;%
+ 0,0,0,0%
+}
+%
+% Vibrant qualitative color scheme
+\providecolorset{RGB}{T-Q-V}{}{%
+ 1,0,119,187;%
+ 2,51,187,238;%
+ 3,0,153,136;%
+ 4,238,119,51;%
+ 5,204,51,17;%
+ 6,238,51,119;%
+ 0,187,187,187%
+}
+%
+% Muted qualitative color scheme
+\providecolorset{RGB}{T-Q-M}{}{%
+ 1,51,34,136;%
+ 2,136,204,238;%
+ 3,68,170,153;%
+ 4,153,153,51;%
+ 5,221,204,119;%
+ 6,204,102,119;%
+ 7,136,34,85;%
+ 8,170,68,153;%
+ 0,221,221,221%
+}
+%
+% Medium-contrast qualitative color scheme
+\providecolorset{RGB}{T-Q-MC}{}{%
+ 1,255,255,255;%
+ 2,238,204,102;%
+ 3,238,153,170;%
+ 4,102,153,204;%
+ 5,153,119,0;%
+ 6,153,68,85;%
+ 7,0,68,136;%
+ 0,0,0,0%
+}
+%
+% Pale qualitative color scheme, for highlighting
+\providecolorset{RGB}{T-Q-PH}{}{%
+ 1,187,204,238;%
+ 2,204,238,255;%
+ 3,204,221,170;%
+ 4,238,238,187;%
+ 5,255,204,204;%
+ 0,221,221,221%
+}
+%
+% Dark qualitative color scheme, for text colors
+\providecolorset{RGB}{T-Q-DT}{}{%
+ 1,34,34,85;%
+ 2,34,85,85;%
+ 3,34,85,34;%
+ 4,102,102,51;%
+ 5,102,51,51;%
+ 0,85,85,85%
+}
+%
+% Light qualitative color scheme
+\providecolorset{RGB}{T-Q-L}{}{%
+ 1,119,170,221;%
+ 2,153,221,255;%
+ 3,68,187,153;%
+ 4,187,204,51;%
+ 5,170,170,0;%
+ 6,238,221,136;%
+ 7,238,136,102;%
+ 8,255,170,187;%
+ 0,221,221,221%
+}
+%
+%<<< Qualitative color schemes
+%
+%>>> Diverging color schemes
+%
+% Sunset diverging color scheme
+\providecolorset{RGB}{T-D-S}{}{%
+ 1,54,75,154;%
+ 2,74,123,183;%
+ 3,110,166,205;%
+ 4,152,202,225;%
+ 5,194,228,239;%
+ 6,234,236,204;%
+ 7,254,218,139;%
+ 8,253,179,102;%
+ 9,246,126,75;%
+ 10,221,61,45;%
+ 11,165,0,38;%
+ 0,255,255,255%
+}
+\pgfplotsset{
+ colormap={T-D-S}{color(0)=(T-D-S1) color(1)=(T-D-S2) color(2)=(T-D-S3) color(3)=(T-D-S4) color(4)=(T-D-S5) color(5)=(T-D-S6) color(6)=(T-D-S7) color(7)=(T-D-S8) color(8)=(T-D-S9) color(9)=(T-D-S10) color(10)=(T-D-S11)}
+}
+%
+% Nightfall diverging color scheme
+\providecolorset{RGB}{T-D-N}{}{%
+ 1,18,90,86;%
+ 2,0,118,123;%
+ 3,35,143,157;%
+ 4,66,167,198;%
+ 5,96,188,233;%
+ 6,157,204,239;%
+ 7,198,219,237;%
+ 8,222,230,231;%
+ 9,236,234,218;%
+ 10,240,230,178;%
+ 11,249,213,118;%
+ 12,255,185,84;%
+ 13,253,154,68;%
+ 14,245,118,52;%
+ 15,233,76,31;%
+ 16,209,24,7;%
+ 17,160,24,19;%
+ 0,255,255,255%
+}
+\pgfplotsset{
+ colormap={T-D-N}{color(0)=(T-D-N1) color(1)=(T-D-N2) color(2)=(T-D-N3) color(3)=(T-D-N4) color(4)=(T-D-N5) color(5)=(T-D-N6) color(6)=(T-D-N7) color(7)=(T-D-N8) color(8)=(T-D-N9) color(9)=(T-D-N10) color(10)=(T-D-N11) color(11)=(T-D-N12) color(12)=(T-D-N13) color(13)=(T-D-N14) color(14)=(T-D-N15) color(15)=(T-D-N16) color(16)=(T-D-N17)}
+}
+%
+% BuRd diverging color scheme
+\providecolorset{RGB}{T-D-BR}{}{%
+ 1,32,102,172;%
+ 2,67,147,195;%
+ 3,146,197,222;%
+ 4,209,229,240;%
+ 5,247,247,247;%
+ 6,253,219,199;%
+ 7,244,165,130;%
+ 8,214,96,77;%
+ 9,178,24,43;%
+ 0,255,238,153%
+}
+\pgfplotsset{
+ colormap={T-D-BR}{color(0)=(T-D-BR1) color(1)=(T-D-BR2) color(2)=(T-D-BR3) color(3)=(T-D-BR4) color(4)=(T-D-BR5) color(5)=(T-D-BR6) color(6)=(T-D-BR7) color(7)=(T-D-BR8) color(8)=(T-D-BR9)}
+}
+%
+% PRGn diverging color scheme
+\providecolorset{RGB}{T-D-PG}{}{%
+ 1,118,42,131;%
+ 2,153,112,171;%
+ 3,194,165,207;%
+ 4,231,212,232;%
+ 5,247,247,247;%
+ 6,217,240,211;%
+ 7,172,211,158;%
+ 8,90,174,97;%
+ 9,27,120,55;%
+ 0,255,238,153%
+}
+\pgfplotsset{
+ colormap={T-D-PG}{color(0)=(T-D-PG1) color(1)=(T-D-PG2) color(2)=(T-D-PG3) color(3)=(T-D-PG4) color(4)=(T-D-PG5) color(5)=(T-D-PG6) color(6)=(T-D-PG7) color(7)=(T-D-PG8) color(8)=(T-D-PG9)}
+}
+%
+%<<< Diverging color schemes
+%
+%>>> Sequential color schemes
+%
+% YlOrBr sequential color scheme
+\providecolorset{RGB}{T-S-YOB}{}{%
+ 1,255,255,229;%
+ 2,255,247,188;%
+ 3,254,227,145;%
+ 4,254,196,79;%
+ 5,251,154,41;%
+ 6,236,112,20;%
+ 7,204,76,2;%
+ 8,153,52,4;%
+ 9,102,37,6;%
+ 0,136,136,136%
+}
+\pgfplotsset{
+ colormap={T-S-YOB}{color(0)=(T-S-YOB1) color(1)=(T-S-YOB2) color(2)=(T-S-YOB3) color(3)=(T-S-YOB4) color(4)=(T-S-YOB5) color(5)=(T-S-YOB6) color(6)=(T-S-YOB7) color(7)=(T-S-YOB8) color(8)=(T-S-YOB9)}
+}
+%
+% Iridescent sequential color scheme
+\providecolorset{RGB}{T-S-IR}{}{%
+ 1,254,251,233;%
+ 2,252,247,213;%
+ 3,245,243,193;%
+ 4,234,240,181;%
+ 5,221,236,191;%
+ 6,208,231,202;%
+ 7,194,227,210;%
+ 8,181,221,216;%
+ 9,168,216,220;%
+ 10,155,210,225;%
+ 11,141,203,228;%
+ 12,129,196,231;%
+ 13,123,188,231;%
+ 14,126,178,228;%
+ 15,136,165,221;%
+ 16,147,152,210;%
+ 17,155,138,196;%
+ 18,157,125,178;%
+ 19,154,112,158;%
+ 20,144,99,136;%
+ 21,128,87,112;%
+ 22,104,73,87;%
+ 23,70,53,58;%
+ 0,153,153,153%
+}
+\pgfplotsset{
+ colormap={T-S-IR}{color(0)=(T-S-IR1) color(1)=(T-S-IR2) color(2)=(T-S-IR3) color(3)=(T-S-IR4) color(4)=(T-S-IR5) color(5)=(T-S-IR6) color(6)=(T-S-IR7) color(7)=(T-S-IR8) color(8)=(T-S-IR9) color(9)=(T-S-IR10) color(10)=(T-S-IR11) color(11)=(T-S-IR12) color(12)=(T-S-IR13) color(13)=(T-S-IR14) color(14)=(T-S-IR15) color(15)=(T-S-IR16) color(16)=(T-S-IR17) color(17)=(T-S-IR18) color(18)=(T-S-IR19) color(19)=(T-S-IR20) color(20)=(T-S-IR21) color(21)=(T-S-IR22) color(22)=(T-S-IR23)}
+}
+%
+% Incandescent sequential color scheme
+\providecolorset{RGB}{T-S-IN}{}{%
+ 1,206,255,255;%
+ 2,198,247,214;%
+ 3,162,244,155;%
+ 4,187,228,83;%
+ 5,213,206,4;%
+ 6,231,181,3;%
+ 7,241,153,3;%
+ 8,246,121,11;%
+ 9,249,73,2;%
+ 10,228,5,21;%
+ 11,168,0,3;%
+ 0,136,136,136%
+}
+\pgfplotsset{
+ colormap={T-S-IN}{color(0)=(T-S-IN1) color(1)=(T-S-IN2) color(2)=(T-S-IN3) color(3)=(T-S-IN4) color(4)=(T-S-IN5) color(5)=(T-S-IN6) color(6)=(T-S-IN7) color(7)=(T-S-IN8) color(8)=(T-S-IN9) color(9)=(T-S-IN10) color(10)=(T-S-IN11)}
+}
+%
+% Discrete rainbow color scheme
+\providecolorset{RGB}{T-S-DR}{}{%
+ 1,209,187,215;%
+ 2,174,118,163;%
+ 3,136,46,114;%
+ 4,25,101,176;%
+ 5,82,137,199;%
+ 6,123,175,222;%
+ 7,78,178,101;%
+ 8,144,201,135;%
+ 9,202,224,171;%
+ 10,247,240,86;%
+ 11,246,193,65;%
+ 12,241,147,45;%
+ 13,232,96,28;%
+ 14,220,5,12;%
+ 0,119,119,119%
+}
+%
+\providecolorset{RGB}{T-S-SR}{}{%
+ 1,232,236,251;%
+ 2,221,216,239;%
+ 3,209,193,225;%
+ 4,195,168,209;%
+ 5,181,143,194;%
+ 6,167,120,180;%
+ 7,155,98,167;%
+ 8,140,78,153;%
+ 9,111,76,155;%
+ 10,96,89,169;%
+ 11,85,104,184;%
+ 12,78,121,197;%
+ 13,77,138,198;%
+ 14,78,150,188;%
+ 15,84,158,179;%
+ 16,89,165,169;%
+ 17,96,171,158;%
+ 18,105,177,144;%
+ 19,119,183,125;%
+ 20,140,188,104;%
+ 21,166,190,84;%
+ 22,190,188,72;%
+ 23,209,181,65;%
+ 24,221,170,60;%
+ 25,228,156,57;%
+ 26,231,140,53;%
+ 27,230,121,50;%
+ 28,228,99,45;%
+ 29,223,72,40;%
+ 30,218,34,34;%
+ 31,184,34,30;%
+ 32,149,33,27;%
+ 33,114,30,23;%
+ 34,82,26,19;%
+ 0,102,102,102%
+}
+\pgfplotsset{
+ colormap={T-S-SR}{color(0)=(T-S-SR1) color(1)=(T-S-SR2) color(2)=(T-S-SR3) color(3)=(T-S-SR4) color(4)=(T-S-SR5) color(5)=(T-S-SR6) color(6)=(T-S-SR7) color(7)=(T-S-SR8) color(8)=(T-S-SR9) color(9)=(T-S-SR10) color(10)=(T-S-SR11) color(11)=(T-S-SR12) color(12)=(T-S-SR13) color(13)=(T-S-SR14) color(14)=(T-S-SR15) color(15)=(T-S-SR16) color(16)=(T-S-SR17) color(17)=(T-S-SR18) color(18)=(T-S-SR19) color(19)=(T-S-SR20) color(20)=(T-S-SR21) color(21)=(T-S-SR22) color(22)=(T-S-SR23) color(23)=(T-S-SR24) color(24)=(T-S-SR25) color(25)=(T-S-SR26) color(26)=(T-S-SR27) color(27)=(T-S-SR28) color(28)=(T-S-SR29) color(29)=(T-S-SR30) color(30)=(T-S-SR31) color(31)=(T-S-SR32) color(32)=(T-S-SR33) color(33)=(T-S-SR34)}
+}
+%
+%<<< Sequential color schemes
+%
+%<<< Color schemes by Paul Tol, source: https://personal.sron.nl/~pault
+}
+
+\DeclareOption{OkabeIto}{
+%>>> Qualitative color scheme by Okabe and Ito
+\providecolorset{RGB}{OI}{}{%
+ 1,230,159,0;%
+ 2,86,180,233;%
+ 3,0,158,115;%
+ 4,240,228,66;%
+ 5,0,114,178;%
+ 6,213,94,0;%
+ 7,204,121,167;%
+ 0,0,0,0%
+}
+%<<< Qualitative color scheme by Okabe and Ito
+}
+
+\DeclareOption*{\PackageWarning{colorblind}{Unknown '\CurrentOption'}}
+\ProcessOptions\relax
+
+%>>> Function to print a discrete color scheme
+\newcommand\@drawSchemeRadius{0.7cm}
+\newcommand\@drawSchemeOffset{1cm}
+\newcounter{ColorNum}
+\newcommand\drawScheme[1]{%
+ \tikz{%
+ \node[inner sep=1, fill=red] at (-1.2*\@drawSchemeRadius,2.3*\@drawSchemeRadius) {R};
+ \node[inner sep=1, fill=green] at (-1.2*\@drawSchemeRadius, 1.8*\@drawSchemeRadius) {G};
+ \node[inner sep=1, fill=blue] at (-1.2*\@drawSchemeRadius,1.3*\@drawSchemeRadius) {B};
+ \setcounter{ColorNum}{1}%
+ \whiledo{%
+ \@ifundefined{\string\color@#1\theColorNum}{\boolean{false}}{\boolean{true}}%
+ }{%
+ \extractcolorspecs{#1\the\value{ColorNum}}{\modelspec}{\colorspec}%
+ \tikzmath{
+ int \r, \g, \b;
+ \r = round(255*array({\colorspec},0));
+ \g = round(255*array({\colorspec},1));
+ \b = round(255*array({\colorspec},2));
+ }%
+ \node at (\value{ColorNum}*\@drawSchemeOffset-\@drawSchemeOffset,2.3*\@drawSchemeRadius) {\r};
+ \node at (\value{ColorNum}*\@drawSchemeOffset-\@drawSchemeOffset,1.8*\@drawSchemeRadius) {\g};
+ \node at (\value{ColorNum}*\@drawSchemeOffset-\@drawSchemeOffset,1.3*\@drawSchemeRadius) {\b};
+ \draw[fill=#1\the\value{ColorNum}] (\value{ColorNum}*\@drawSchemeOffset-\@drawSchemeOffset,0) circle (\@drawSchemeRadius);%
+ \node[rotate=25, anchor=north east] at (\value{ColorNum}*\@drawSchemeOffset-\@drawSchemeOffset,-1*\@drawSchemeRadius) {#1\theColorNum};%
+ \stepcounter{ColorNum}%
+ }%
+ \extractcolorspecs{#10}{\modelspec}{\colorspec}%
+ \tikzmath{
+ int \r, \g, \b;
+ \r = round(255*array({\colorspec},0));
+ \g = round(255*array({\colorspec},1));
+ \b = round(255*array({\colorspec},2));
+ }%
+ \node at (\value{ColorNum}*\@drawSchemeOffset-0.5*\@drawSchemeOffset,2.3*\@drawSchemeRadius) {\r};
+ \node at (\value{ColorNum}*\@drawSchemeOffset-0.5*\@drawSchemeOffset,1.8*\@drawSchemeRadius) {\g};
+ \node at (\value{ColorNum}*\@drawSchemeOffset-0.5*\@drawSchemeOffset,1.3*\@drawSchemeRadius) {\b};
+ \draw[fill=#10] (\value{ColorNum}*\@drawSchemeOffset-0.5*\@drawSchemeOffset,0) circle(\@drawSchemeRadius);%
+ \node[rotate=25, anchor=north east] at (\value{ColorNum}*\@drawSchemeOffset-0.5*\@drawSchemeOffset, -1*\@drawSchemeRadius) {#10};%
+ }%
+}
+%<<< Function to print a discrete color scheme
+
+%>>> Function to print a continuous color scheme
+\newcommand\drawSchemeC[2][0.5\textwidth]{%
+ \tikz{%
+ \pgfplotscolorbardrawstandalone[colormap name=#2, colorbar horizontal, colorbar style={width=#1, ticks=none}]%
+ \draw[fill=#20] (#1+0.5*\@drawSchemeOffset,-0.55cm) circle(0.5*\@drawSchemeRadius);%
+ }%
+}
+%<<< Function to print a continuous color scheme
+
+\endinput
diff --git a/macros/latex/contrib/colorblind/documentation.pdf b/macros/latex/contrib/colorblind/documentation.pdf
new file mode 100644
index 0000000000..f35c947328
--- /dev/null
+++ b/macros/latex/contrib/colorblind/documentation.pdf
Binary files differ
diff --git a/macros/latex/contrib/colorblind/documentation.tex b/macros/latex/contrib/colorblind/documentation.tex
new file mode 100644
index 0000000000..a04188b570
--- /dev/null
+++ b/macros/latex/contrib/colorblind/documentation.tex
@@ -0,0 +1,365 @@
+%%
+%% ----------------------------------------------------------------
+%% Copyright (C) 2023-2024 by Simon Pfahler <simon.pfahler at ur dot de>
+%% ----------------------------------------------------------------
+%%
+%! TeX program = lualatex
+\documentclass{scrartcl}
+\usepackage[left=4cm,right=3cm,top=3cm,bottom=3cm, marginpar=3cm]{geometry}
+\setlength{\parindent}{0pt}
+\setlength{\parskip}{1ex}
+
+\usepackage{cprotect}
+\usepackage{tikz}
+\usetikzlibrary{math}
+
+\usepackage{xcolor}
+\usepackage{soul}
+
+\usepackage{tikz}
+\usetikzlibrary{positioning, shapes, fit, arrows.meta, decorations.pathmorphing}
+\pgfdeclarelayer{bg}
+\pgfsetlayers{bg,main}
+
+\usepackage{pgfplots, pgfplotstable}
+\pgfplotsset{compat=1.18}
+
+%%%% from https://tex.stackexchange.com/questions/355713/pgfplots-show-error-marker-in-legend
+\pgfplotsset{error bar legend/.style={%
+ /pgfplots/legend image code/.prefix code={%
+ \pgfkeysgetvalue{/pgfplots/error bars/error mark}{\pgfplotserrorbarsmark}%
+ \draw[%
+ /pgfplots/every error bar,
+ mark=\pgfplotserrorbarsmark,
+ /pgfplots/error bars/error mark options,
+ sharp plot,
+ ##1
+ ] plot coordinates {(0.3cm, -0.15cm) (0.3cm, 0.15cm)};%
+ }
+ }
+}
+%%%%
+
+\pgfplotsset{custom area legend/.style={%
+ /pgfplots/legend image code/.prefix code={%
+ \fill[##1, draw=white] plot coordinates {(0cm, -0.1cm) (0.6cm,-0.1cm) (0.6cm, 0.1cm) (0cm, 0.1cm)};%
+ }
+ }
+}
+
+\def\w{420pt}
+
+\usepackage{hyperref}
+\hypersetup{
+ pdftitle={Easy colorblind-safe typesetting: the colorblind package},
+ pdfauthor={Simon Pfahler},
+}
+\usepackage{cleveref}
+
+\usepackage{csquotes}
+\usepackage[backend=biber, style=numeric-comp, seconds=true, sorting=none, subentry=true, doi=false, alldates=iso]{biblatex}
+\renewcommand*{\entrysetpunct}{\\[5pt]}
+\addbibresource{bib.bib}
+
+\usepackage[Tol, OkabeIto]{colorblind}
+
+\newcommand\colorblind{\textbf{colorblind} }
+\newcommand\hlc[2][T-Q-PH4]{{%
+ \colorlet{foo}{#1}%
+ \sethlcolor{foo}\hl{#2}}%
+}
+
+\reversemarginpar
+\newcommand\marg[1]{\leavevmode\marginpar{\raggedleft #1}}
+\newcommand\tbs{\textbackslash}
+
+\title{Easy colorblind-safe typesetting:\\ the \colorblind package}
+\author{Simon Pfahler}
+\date{\today\\Version 1.0}
+
+
+\begin{document}
+
+\maketitle
+
+\begin{abstract}
+ In colorblind-safe documents, the contents are presented in a way that the same information is conveyed to readers regardless of a potential color vision deficiency.
+ This package provides the tools necessary for colorblind-safe typesetting in \LaTeX.
+ It provides color schemes for a wide range of applications.
+ The most commonly used schemes are qualitative schemes, providing easily distinguishable colors for use in graphics, but also for text coloring or highlighting.
+ Additionally, diverging and sequential schemes are included which can be used for encoding quantitative information using colors.
+ This package incorporates colorblind-safeness into the writing process, making it both less cumbersome and less error-prone.
+\end{abstract}
+
+\tableofcontents
+\clearpage
+
+\section{Introduction}
+\subsection{Package options}
+\cprotect\marg{\verb!Tol!\\\verb!OkabeIto!}%
+The \colorblind package provides the color schemes by Paul Tol~\cite{Tol} and the Okabe Ito color palette~\cite{Ichihara_2008}.
+By default, no schemes are loaded.
+Providing one of the options \verb!Tol! or \verb!OkabeIto! loads all corresponding schemes.
+
+\subsection{Overview}
+As an example for how to use the colors, we look at the \emph{bright qualitative} color scheme by Tol.
+\cref{fig:T-Q-Bexample} shows the colors in the scheme
+
+\begin{figure}[ht]
+ \centering
+ \drawScheme{T-Q-B}
+ \caption{Bright qualitative color scheme by Tol.}
+ \label{fig:T-Q-Bexample}
+\end{figure}
+
+All colors in this model start with \verb!T-Q-B!, indicating that it is a scheme by \textbf{T}ol, that it is a \textbf{q}ualitative scheme, and that it is the \textbf{b}right scheme.
+The colors in the scheme are specified by a number following the scheme name, in this case ranging from \verb!T-Q-B1! to \verb!T-Q-B6! for the non-grey colors.
+The additional color \verb!T-Q-B0! provides a color that can be used, e.g., to indicate bad data.
+
+There are two reasons why color names are not based on natural color names (e.g., ``\hlc[T-Q-PH1]{blue}''):
+\begin{enumerate}
+ \item Certain colors (\hlc[T-Q-PH3]{green}, \hlc[T-Q-PH5]{red}) are often used by people with full color vision to convey certain meanings (\hlc[T-Q-PH3]{good}, \hlc[T-Q-PH5]{bad}).
+ This meaning is difficult for people with color vision deficiencies to pick up.
+ By not using natural color names, it is easier to write colorblind-safe documents that do not make use of said connotations.
+ \item Natural color names can be cumbersome, e.g., when multiple variations of a primary color are used. It is annoying having to look up if a color is called, e.g., \hlc[T-Q-PH1]{blue} or \hlc[T-Q-PH2]{cyan}.
+\end{enumerate}
+
+These colors are used the same way as any other colors. To change the text color to \verb!T-Q-B1! for example, use \verb!\color{T-Q-B1}!.
+
+\section{Guidelines}
+On its own, using colorblind-safe colors is not sufficient for making a document truly colorblind-safe.
+This section provides some general rules to follow for colorblind-safe typesetting.
+
+These rules apply to each visual unit of a document individually.
+A visual unit may be a graphic, a table or a paragraph of text.
+It might be advisable to be consistent also between different visual units (e.g., use the same color scheme for all graphics), but this is more of an aesthetic argument and is not strictly necessary for a colorblind-safe document.
+
+The most important rules are:
+\begin{enumerate}
+ \item \hlc{Do not mix the colors in qualitative schemes!}\newline
+ The colors in each scheme are defined with the purpose of being easily distinguishable.
+ Mixing of colors, e.g., \verb?T-Q-B1!50!T-Q-B5? interferes with this.
+ A special case of this is that qualitative colors should not be mixed in order to convey quantitative information.
+ In this case, a suitable non-qualitative color scheme (i.e.\ a diverging or sequential scheme) should be used.
+ \item \hlc{Only use colors from one color scheme for a given visual unit!}\newline
+ The colors between different schemes are not tuned to be distinguishable.
+ Using colors from multiple schemes therefore defies the point of this package.
+ \item \hlc{Do not use shades of colors!}\newline
+ Saturation and brightness are also used for distinguishability, so mixings involving \verb!white! and \verb!black! should also be avoided.
+\end{enumerate}
+
+The first two rules should be ensured in any visual unit. If the need for more colors arises, a different color scheme should be used alltogether.
+While the third rule should also be followed in most scenarios, there are some situations that might allow for breaking this rule. As an example, consider \cref{fig:errorbar_plot}, where the error band is colored with a lighter shade of the original color.
+This is ok because only few colors are used in the plot and the colors are not necessary for conveying the message of the plot.
+
+\begin{figure}[ht]
+ \centering
+ \begin{tikzpicture}
+ \begin{axis}[
+ width=0.4*\w,
+ height=0.28*\w,
+ scale only axis=true,
+ xlabel = {x},
+ ylabel = {y},
+ x label style = {yshift=2mm},
+ y label style = {yshift=-2mm},
+ clip marker paths=true,
+ axis on top
+ ]
+
+ \fill[T-Q-B5!20] (0,0.1068558) -- (40,0.1068558) -- (40,0.0668558) -- (0,0.0668558) -- cycle;
+ \draw[T-Q-B5] (0,0.0868558) -- (40,0.0868558);
+
+ \addplot[color=T-Q-B1, mark=*, only marks, forget plot]
+ plot[/pgfplots/error bars/.cd, x dir=none, y dir=both, y explicit,
+ error mark=-, error bar style={color=T-Q-B1}]
+ coordinates {
+ (4,0.263148) +- (0.120064,0.120064)
+ (8,0.159158) +- (0.0621894,0.0621894)
+ (12,0.129892) +- (0.0543303,0.0543303)
+ (16,0.112302) +- (0.0358508,0.0358508)
+ (20,0.098435) +- (0.02648,0.02648)
+ (24,0.0909784) +- (0.0215048,0.0215048)
+ (28,0.0894657) +- (0.0212992,0.0212992)
+ (32,0.0869343) +- (0.0202553,0.0202553)
+ };
+ \addlegendimage{T-Q-B1, mark=*, only marks, error bar legend};
+ \addlegendentry{data};
+ \addlegendimage{draw=T-Q-B5, fill=T-Q-B5!20, custom area legend};
+ \addlegendentry{reference};
+
+ \end{axis}
+ \end{tikzpicture}
+ \cprotect\caption{This plot breaks rule 3 by using the shade \verb?T-Q-B5!20? for the error band of the reference, but it is still colorblind-safe.}
+ \label{fig:errorbar_plot}
+\end{figure}
+
+There are additional guidelines that should be kept in mind when typesetting colorblind-safe documents.
+Their importance may vary between different applications, so try to follow them as best as possible, at your own judgement.
+In no particular order, they are:
+\begin{itemize}
+ \item \hlc{Do not convey information only through color!}\newline
+ When possible, encode the information the color provides also in a different way, e.g., through text, patterns or symbols.
+ \item \hlc{Do not use color for information and aesthetics simultaneously!}\newline
+ Color is often also used for aesthetic reasons, e.g., on a scientific poster.
+ While this is ok in principle, do not mix information and aesthetics within the same visual unit, as this makes it more difficult to extract the encoded information.
+ \item \hlc{Do not use rainbow color schemes!}\newline
+ Due to the many different colors in a rainbow color scheme, they are very difficult to distinguish for people with color vision deficiencies (even when the scheme is tuned for this purpose).
+ Therefore, it is best to avoid them.
+ If you insist on using them, Paul Tol provides both a sequential as well as a continuous version, which are optimized to be as distinguishable as possible.
+\end{itemize}
+
+\section{Provided color schemes}\label{sec:colors}
+The color schemes provided are split into three groups:
+\begin{itemize}
+ \item Qualitative schemes:\newline
+ These schemes are used to convey qualitative information, such as different data sources, countries or manufacturers.
+ They should usually be used for coloring text or distinguishing different lines/bars in a plot.
+ \item Diverging color schemes:\newline
+ When quantitative data ranges between two extremes, and the middle is being considered ``neutral'', a diverging color scheme should be used.
+ Examples for this kind of data might be test grades, temperatures or pH values.
+ \item Sequential color schemes:\newline
+ For quantitative data without an important midpoint, sequential color schemes should be preferred over diverging ones.
+ This is especially true for quantites that start from $0$.
+ They can be used to denote for example velocities, concentrations or pressures.
+\end{itemize}
+
+For each type of schemes, this package provides a range of options.
+\Cref{sec:Tol_schemes} shows the schemes designed by Paul Tol~\cite{Tol}, which include qualitative, diverging and sequential schemes (see \cref{sec:T-Q,sec:T-D,sec:T-S}).
+In \cref{sec:OkabeIto}, the Okabe Ito color scheme~\cite{Ichihara_2008} is provided, which is probably the most famous qualitative colorblind-safe color scheme due to it being mentioned in various articles in high-ranking journals.
+
+All of the schemes are colorblind-safe, and some are optimized for printout or designed for a particular purpose.
+This is denoted under the scheme name.\clearpage
+
+\subsection{Paul Tol's color schemes}\label{sec:Tol_schemes}
+
+\subsubsection{Qualitative color schemes}\label{sec:T-Q}
+\begin{minipage}{0.5\textwidth}
+ \centering
+ \scalebox{0.7}{\drawScheme{T-Q-B}}\\
+ \textbf{B}right\\
+ \phantom{pb}
+\end{minipage}\hfill%
+\begin{minipage}{0.5\textwidth}
+ \centering
+ \scalebox{0.7}{\drawScheme{T-Q-V}}\\
+ \textbf{V}ibrant
+\end{minipage}
+
+\begin{minipage}{0.5\textwidth}
+ \centering
+ \scalebox{0.7}{\drawScheme{T-Q-HC}}\\
+ \textbf{H}igh-\textbf{C}ontrast\\
+ works for black and white printout
+\end{minipage}\hfill%
+\begin{minipage}{0.5\textwidth}
+ \centering
+ \scalebox{0.7}{\drawScheme{T-Q-MC}}\\
+ \textbf{M}edium-\textbf{C}ontrast\\
+ works for black and white printout
+\end{minipage}
+
+\begin{center}
+ \scalebox{0.7}{\drawScheme{T-Q-M}}\\
+ \textbf{M}uted
+\end{center}
+
+\begin{minipage}{0.5\textwidth}
+ \centering
+ \scalebox{0.7}{\drawScheme{T-Q-PH}}\\
+ \textbf{P}ale \textbf{H}ighlight\\
+ specifically for text background
+\end{minipage}\hfill%
+\begin{minipage}{0.5\textwidth}
+ \centering
+ \scalebox{0.7}{\drawScheme{T-Q-DT}}\\
+ \textbf{D}ark \textbf{T}ext\\
+ specifically for text color
+\end{minipage}
+
+\begin{center}
+ \scalebox{0.7}{\drawScheme{T-Q-L}}\\
+ \textbf{L}ight\\
+ less distinguishable than other schemes,\\ mostly meant for filling in labelled cells
+\end{center}\clearpage
+
+\subsubsection{Diverging color schemes}\label{sec:T-D}
+For diverging schemes, when a continuous palette is needed, the colors are allowed to be linearly interpolated.
+When using \verb!pgfplots! (or \verb!TikZ!), the interpolations are available as colormaps with the names of their color scheme.
+
+\begin{center}
+ \scalebox{0.7}{\drawScheme{T-D-S}}\\
+ \drawSchemeC[0.6\textwidth]{T-D-S}\\
+ \textbf{S}unset
+\end{center}
+
+\begin{center}
+ \scalebox{0.7}{\drawScheme{T-D-N}}\\
+ \drawSchemeC[0.9\textwidth]{T-D-N}\\
+ \textbf{N}ightfall
+\end{center}
+
+\begin{center}
+ \scalebox{0.7}{\drawScheme{T-D-BR}}\\
+ \drawSchemeC[0.5\textwidth]{T-D-BR}\\
+ \textbf{B}u\textbf{R}d
+\end{center}\clearpage
+
+\subsubsection{Sequential color schemes}\label{sec:T-S}
+For most sequential schemes, a continuous palette can be obtained again by linearly interpolating the colors.
+The only exception to this is the \emph{discrete rainbow} scheme, which has an explicitly continuos variation, the \emph{smooth rainbow} scheme.
+When using \verb!pgfplots!, the interpolations are available as colormaps with the names of their color scheme.
+
+When the discrete scheme is not shown, this is because there are too many colors in them.
+
+\begin{center}
+ \scalebox{0.7}{\drawScheme{T-S-YOB}}\\
+ \drawSchemeC[0.5\textwidth]{T-S-YOB}\\
+ \textbf{Y}l\textbf{O}r\textbf{B}r
+\end{center}
+
+\begin{center}
+ \drawSchemeC[0.9\textwidth]{T-S-IR}\\
+ \textbf{Ir}idescent
+\end{center}
+
+\begin{center}
+ \scalebox{0.7}{\drawScheme{T-S-IN}}\\
+ \drawSchemeC[0.6\textwidth]{T-S-IN}\\
+ \textbf{In}candescent\\
+ not print-friendly
+\end{center}
+
+\begin{center}
+ \scalebox{0.7}{\drawScheme{T-S-DR}}\\
+ \textbf{D}iscrete \textbf{R}ainbow\\
+ Do not interpolate!
+\end{center}
+
+\begin{center}
+ \drawSchemeC[\textwidth]{T-S-SR}\\
+ \textbf{S}mooth \textbf{R}ainbow\\
+\end{center}
+
+\subsection{Okabe Ito qualitative color scheme}\label{sec:OkabeIto}
+This is the qualitative color scheme commonly known as the \emph{Okabe Ito} color palette~\cite{Ichihara_2008}.
+
+\begin{center}
+ \scalebox{0.7}{\drawScheme{OI}}\\
+ \textbf{O}kabe \textbf{I}to
+\end{center}
+
+\section{Provided commands}
+\cprotect\marg{\verb!\drawScheme{...}!}%
+The discrete visualizations of color schemes given in this documentation are created with the command \verb!\drawScheme{...}!.
+The name of the color scheme should be provided to the command, e.g.\ \verb!\drawScheme{T-Q-B}! to print the \emph{qualitative bright} scheme by Tol.
+
+\cprotect\marg{\verb!\drawSchemeC{...}!}%
+The continuous visualizations of color schemes given in this documentation are created with the command \verb!\drawSchemeC{...}!.
+The name of the color scheme should be provided to the command, e.g.\ \verb!\drawSchemeC{T-D-S}! to print the \emph{diverging sunset} scheme by Tol.
+Note that this command only works for color schemes that are allowed to be interpolated.
+
+\clearpage
+\printbibliography
+
+\end{document}
diff --git a/macros/latex/contrib/colortbl/colortbl-DE.pdf b/macros/latex/contrib/colortbl/colortbl-DE.pdf
index 1a4ea3ccea..57a1653f9c 100644
--- a/macros/latex/contrib/colortbl/colortbl-DE.pdf
+++ b/macros/latex/contrib/colortbl/colortbl-DE.pdf
Binary files differ
diff --git a/macros/latex/contrib/colortbl/colortbl.dtx b/macros/latex/contrib/colortbl/colortbl.dtx
index 68c4bdbaf5..076c69643a 100644
--- a/macros/latex/contrib/colortbl/colortbl.dtx
+++ b/macros/latex/contrib/colortbl/colortbl.dtx
@@ -15,7 +15,7 @@
%<driver>\ProvidesFile{colortbl.drv}
% \fi
% \ProvidesFile{colortbl.dtx}
- [2024/02/20 v1.0g Color table columns (DPC)]
+ [2024/05/26 v1.0h Color table columns (DPC)]
%
% \iffalse
%<*driver>
@@ -1018,9 +1018,9 @@
%
% \begin{macro}{\endarray}
% \changes{v1.0b}{2012/21/06}{re-insert \cs{@arrayright} to match \textsf{array} definition, for \textsf{delarray}}
+% \changes{v1.0h}{2024/05/26}{Don't assume existing \cs{endarray} definition, to work with tagging code}
% \begin{macrocode}
-\def\endarray{%
- \crcr \egroup \egroup \@arrayright\gdef\@preamble{}\CT@end}
+\expandafter\def\expandafter\endarray\expandafter{\endarray\CT@end}
% \end{macrocode}
% \end{macro}
%
diff --git a/macros/latex/contrib/colortbl/colortbl.pdf b/macros/latex/contrib/colortbl/colortbl.pdf
index b2ec8709a6..9a2299528d 100644
--- a/macros/latex/contrib/colortbl/colortbl.pdf
+++ b/macros/latex/contrib/colortbl/colortbl.pdf
Binary files differ
diff --git a/macros/latex/contrib/csvsimple/CHANGES.md b/macros/latex/contrib/csvsimple/CHANGES.md
index 768f8f65cb..3178395f76 100644
--- a/macros/latex/contrib/csvsimple/CHANGES.md
+++ b/macros/latex/contrib/csvsimple/CHANGES.md
@@ -17,6 +17,18 @@ and this project adheres to
+## [2.6.1] - 2024-05-16
+
+### Changed
+- Documentation of `csvsim/filter fp`, `csvsim/and filter fp`, `\IfCsvsimFpCompareTF`,
+ and `\IfCsvsimIntCompareTF` clarified (issue #37)
+- Reset `data collection` to `\csvdatacollection` for every csv reader (issue #39)
+
+### Fixed
+- Documentation typos fixed (issue #38)
+
+
+
## [2.6.0] - 2024-01-19
### Added
diff --git a/macros/latex/contrib/csvsimple/README.md b/macros/latex/contrib/csvsimple/README.md
index d3e0860104..29196c03e9 100644
--- a/macros/latex/contrib/csvsimple/README.md
+++ b/macros/latex/contrib/csvsimple/README.md
@@ -1,4 +1,4 @@
-# The LaTeX package csvsimple - version 2.6.0 (2024/01/19)
+# The LaTeX package csvsimple - version 2.6.1 (2024/05/16)
> Copyright (c) 2008-2024 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
diff --git a/macros/latex/contrib/csvsimple/csvsimple-doc.sty b/macros/latex/contrib/csvsimple/csvsimple-doc.sty
index 2f507037fb..c8d933c684 100644
--- a/macros/latex/contrib/csvsimple/csvsimple-doc.sty
+++ b/macros/latex/contrib/csvsimple/csvsimple-doc.sty
@@ -1,5 +1,5 @@
% !TeX encoding=UTF-8
-%% The LaTeX package csvsimple - version 2.6.0 (2024/01/19)
+%% The LaTeX package csvsimple - version 2.6.1 (2024/05/16)
%% csvsimple-doc.sty: style file for the documentation
%%
%% -------------------------------------------------------------------------------------------
@@ -18,8 +18,8 @@
%%
%% This work consists of all files listed in README.md
%%
-\def\version{2.6.0}%
-\def\datum{2024/01/19}%
+\def\version{2.6.1}%
+\def\datum{2024/05/16}%
\IfFileExists{csvsimple-doc.cfg}{\input{csvsimple-doc.cfg}}{}\providecommand\csvpkgprefix{}
diff --git a/macros/latex/contrib/csvsimple/csvsimple-example.pdf b/macros/latex/contrib/csvsimple/csvsimple-example.pdf
index 5485a99c1e..f85684f6d1 100644
--- a/macros/latex/contrib/csvsimple/csvsimple-example.pdf
+++ b/macros/latex/contrib/csvsimple/csvsimple-example.pdf
Binary files differ
diff --git a/macros/latex/contrib/csvsimple/csvsimple-example.tex b/macros/latex/contrib/csvsimple/csvsimple-example.tex
index 364596562a..0baf2183c7 100644
--- a/macros/latex/contrib/csvsimple/csvsimple-example.tex
+++ b/macros/latex/contrib/csvsimple/csvsimple-example.tex
@@ -1,4 +1,4 @@
-%% The LaTeX package csvsimple - version 2.6.0 (2024/01/19)
+%% The LaTeX package csvsimple - version 2.6.1 (2024/05/16)
%% csvsimple-example.tex: an example for csvsimple
%%
%% -------------------------------------------------------------------------------------------
diff --git a/macros/latex/contrib/csvsimple/csvsimple-l3.pdf b/macros/latex/contrib/csvsimple/csvsimple-l3.pdf
index bbef5c75a9..f17b9183c3 100644
--- a/macros/latex/contrib/csvsimple/csvsimple-l3.pdf
+++ b/macros/latex/contrib/csvsimple/csvsimple-l3.pdf
Binary files differ
diff --git a/macros/latex/contrib/csvsimple/csvsimple-l3.sty b/macros/latex/contrib/csvsimple/csvsimple-l3.sty
index 9aa9b2c428..849aa79aec 100644
--- a/macros/latex/contrib/csvsimple/csvsimple-l3.sty
+++ b/macros/latex/contrib/csvsimple/csvsimple-l3.sty
@@ -1,4 +1,4 @@
-%% The LaTeX package csvsimple - version 2.6.0 (2024/01/19)
+%% The LaTeX package csvsimple - version 2.6.1 (2024/05/16)
%% csvsimple-l3.sty: Simple LaTeX CSV file processing (LaTeX3)
%%
%% -------------------------------------------------------------------------------------------
@@ -18,7 +18,7 @@
%% This work consists of all files listed in README.md
%%
\NeedsTeXFormat{LaTeX2e}[2023-11-01]
-\ProvidesExplPackage{csvsimple-l3}{2024/01/19}{2.6.0}
+\ProvidesExplPackage{csvsimple-l3}{2024/05/16}{2.6.1}
{LaTeX3 CSV file processing}
@@ -1037,13 +1037,6 @@
}
-\keys_set:nn { csvsim }
- {
- data~collection = \csvdatacollection,
- }
-
-
-
%---- catcodes
\cs_new_protected_nopar:Npn \__csvsim_setup_catcode_list:
@@ -1606,6 +1599,7 @@
check~column~count,
head~to~column~names~prefix = ,
head~to~column~names = false,
+ data~collection = \csvdatacollection,
collect~data = false,
consume~collected~data = false,
column~count = 0,
diff --git a/macros/latex/contrib/csvsimple/csvsimple-l3.tex b/macros/latex/contrib/csvsimple/csvsimple-l3.tex
index 9fad48644d..6c70fa3003 100644
--- a/macros/latex/contrib/csvsimple/csvsimple-l3.tex
+++ b/macros/latex/contrib/csvsimple/csvsimple-l3.tex
@@ -1,7 +1,7 @@
% \LaTeX-Main\
% !TeX encoding=UTF-8
% !TeX spellcheck=en_US
-%% The LaTeX package csvsimple - version 2.6.0 (2024/01/19)
+%% The LaTeX package csvsimple - version 2.6.1 (2024/05/16)
%% csvsimple.tex: Manual
%%
%% -------------------------------------------------------------------------------------------
@@ -214,7 +214,7 @@ way.
An even more comfortable and preferable way to create a table is setting
appropriate option keys. Note, that this gives you the possibility to create a
meta key (called style here) which contains the whole table creation
-using \refCom{csvstyle} or |keys_define:nn| from |l3keys|.
+using \refCom{csvstyle} or |\keys_define:nn| from |l3keys|.
\begin{dispExample}
\csvreader[
@@ -1182,9 +1182,10 @@ The following string compare filters \refKey{csvsim/filter strcmp} and
\end{docCsvKey}
-\begin{docCsvKey}[][doc new and updated={2021-06-25}{2022-10-21}]{filter fp}{=\marg{floating point expression}}{no default}
- Only data lines which fulfill a \LaTeX3 \meta{floating point expression}
- (|l3fp|, \ctanpkg{xfp}) are accepted.
+\enlargethispage*{1cm}
+\begin{docCsvKey}[][doc new and updated={2021-06-25}{2022-10-21}]{filter fp}{=\marg{floating point comparison}}{no default}
+ Only data lines which fulfill a \LaTeX3 \meta{floating point comparison}
+ are accepted. The evaluation is done using \docAuxCommand*{fp_compare_p:n}.
\begin{dispExample}
% \usepackage{booktabs}
\csvreader[
@@ -1316,7 +1317,7 @@ filter options:
\begin{docCsvKeys}[
- doc parameter = {=\marg{floating point expression}},
+ doc parameter = {=\marg{floating point comparison}},
doc description = {style, no default},
doc new = {2022-10-21}
]
@@ -1326,9 +1327,23 @@ filter options:
}
Like \refKey{csvsim/filter fp}, but appended to a required existing
expl3 based filter with \emph{and} (|&&|) resp. \emph{or} (\texttt{\textbar\textbar}).
+\begin{dispExample}
+% \usepackage{booktabs}
+\csvreader[
+ head to column names,
+ tabular = llll,
+ table head = \toprule & \bfseries Name & \bfseries Matr & \bfseries Grade\\\midrule,
+ table foot = \bottomrule,
+ %>> list only matriculation numbers greater than 20000 and grade less than 4.0 <<
+ filter fp = { \matriculation > 20000 },
+ and filter fp = { \grade < 4.0 },
+ ]{grade.csv}{}{%
+ \thecsvrow & \slshape\name, \givenname & \matriculation & \grade
+ }
+\end{dispExample}
\end{docCsvKeys}
-
+\enlargethispage*{1cm}
\begin{docCsvKeys}[
doc parameter = {=\marg{boolean expression}},
doc description = {style, no default},
@@ -2304,14 +2319,18 @@ If set to |false|, the collected data of a CSV file processed with
\refKey{csvsim/collect data} is saved into \refCom{csvdatacollection}.\par
Otherwise, if set to |true|, the collected data is not saved, but directly used
after reading the CSV file, see \refKey{csvsim/generic collected table}.
+After usage, the collected data is cleared, i.e. \refCom{csvdatacollection} is emptied.
\end{docCsvKey}
-\begin{docCsvKey}[][doc new=2021-07-06]{data collection}{=\meta{macro}}{no default, initially \refCom{csvdatacollection}}
+\begin{docCsvKey}[][doc new and updated={2021-07-06}{2024-05-16}]{data collection}{=\meta{macro}}{no default, initially \refCom{csvdatacollection}}
Sets the collection macro to an alternative for \refCom{csvdatacollection}.
\begin{dispListing}
data collection = \myData, % instead of \csvdatacollection
\end{dispListing}
+Note that until version 2.6.0 (2024/01/19), \refKey{csvsim/data collection} was
+not reset to the default \refCom{csvdatacollection} for following CSV files,
+but it is now.
\end{docCsvKey}
@@ -2432,29 +2451,35 @@ for backward compatibility.
\begin{docCommands}[
- doc parameter = \marg{floating point expression}\marg{token list B}\marg{true}\marg{false}
+ doc parameter = \marg{floating point comparison}\marg{true}\marg{false}
]
{
{ doc name = IfCsvsimFpCompareTF, doc new and updated = {2021-06-28}{2023-12-19} },
{ doc name = ifcsvfpcmp, color command=black }
}
- Evaluates the given \meta{floating point expression}
+ Evaluates the given \meta{floating point comparison}
and executes \meta{true} or \meta{false} appropriately.
- The evaluation is done using |\fp_compare:nTF|.
+ The evaluation is done using \docAuxCommand*{fp_compare:nTF}.\\
+ Basically, a \meta{floating point comparison} consists of
+ \mbox{\meta{fp expr\textsubscript{1}} \meta{relation} \meta{fp expr\textsubscript{2}}},
+ like \mbox{$x<y$}, but \docAuxCommand*{fp_compare:nTF} even allows a chain of comparisons.
\refCom{IfCsvsimFpCompareTF} is expandable.
\end{docCommands}
\begin{docCommands}[
- doc parameter = \marg{integer expression}\marg{token list B}\marg{true}\marg{false}
+ doc parameter = \marg{integer comparison}\marg{true}\marg{false}
]
{
{ doc name = IfCsvsimIntCompareTF, doc new and updated = {2021-06-28}{2023-12-19} },
{ doc name = ifcsvintcmp, color command=black }
}
- Evaluates the given \meta{integer expression}
+ Evaluates the given \meta{integer comparison}
and executes \meta{true} or \meta{false} appropriately.
- The evaluation is done using |\int_compare:nTF|.
+ The evaluation is done using \docAuxCommand*{int_compare:nTF}.\\
+ Basically, a \meta{integer comparison} consists of
+ \mbox{\meta{int expr\textsubscript{1}} \meta{relation} \meta{int expr\textsubscript{2}}},
+ like \mbox{$x<y$}, but \docAuxCommand*{int_compare:nTF} even allows a chain of comparisons.
\refCom{IfCsvsimIntCompareTF} is expandable.
\end{docCommands}
diff --git a/macros/latex/contrib/csvsimple/csvsimple-legacy.pdf b/macros/latex/contrib/csvsimple/csvsimple-legacy.pdf
index 7079052a74..6138c507e3 100644
--- a/macros/latex/contrib/csvsimple/csvsimple-legacy.pdf
+++ b/macros/latex/contrib/csvsimple/csvsimple-legacy.pdf
Binary files differ
diff --git a/macros/latex/contrib/csvsimple/csvsimple-legacy.sty b/macros/latex/contrib/csvsimple/csvsimple-legacy.sty
index 28b5562b5d..ecaba4a7b0 100644
--- a/macros/latex/contrib/csvsimple/csvsimple-legacy.sty
+++ b/macros/latex/contrib/csvsimple/csvsimple-legacy.sty
@@ -1,4 +1,4 @@
-%% The LaTeX package csvsimple - version 2.6.0 (2024/01/19)
+%% The LaTeX package csvsimple - version 2.6.1 (2024/05/16)
%% csvsimple-legacy.sty: Simple LaTeX CSV file processing (LaTeX2e)
%%
%% -------------------------------------------------------------------------------------------
@@ -18,7 +18,7 @@
%% This work consists of all files listed in README.md
%%
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{csvsimple-legacy}[2024/01/19 version 2.6.0 LaTeX2e CSV file processing]
+\ProvidesPackage{csvsimple-legacy}[2024/05/16 version 2.6.1 LaTeX2e CSV file processing]
%---- check package
diff --git a/macros/latex/contrib/csvsimple/csvsimple-legacy.tex b/macros/latex/contrib/csvsimple/csvsimple-legacy.tex
index caa65712ec..ae40e8563d 100644
--- a/macros/latex/contrib/csvsimple/csvsimple-legacy.tex
+++ b/macros/latex/contrib/csvsimple/csvsimple-legacy.tex
@@ -1,6 +1,6 @@
% \LaTeX-Main\
% !TeX encoding=UTF-8
-%% The LaTeX package csvsimple - version 2.6.0 (2024/01/19)
+%% The LaTeX package csvsimple - version 2.6.1 (2024/05/16)
%% csvsimple.tex: Manual
%%
%% -------------------------------------------------------------------------------------------
diff --git a/macros/latex/contrib/csvsimple/csvsimple.pdf b/macros/latex/contrib/csvsimple/csvsimple.pdf
index 7f4023fd07..8d148b5a6f 100644
--- a/macros/latex/contrib/csvsimple/csvsimple.pdf
+++ b/macros/latex/contrib/csvsimple/csvsimple.pdf
Binary files differ
diff --git a/macros/latex/contrib/csvsimple/csvsimple.sty b/macros/latex/contrib/csvsimple/csvsimple.sty
index 60776f67ce..01ccbb3f72 100644
--- a/macros/latex/contrib/csvsimple/csvsimple.sty
+++ b/macros/latex/contrib/csvsimple/csvsimple.sty
@@ -1,4 +1,4 @@
-%% The LaTeX package csvsimple - version 2.6.0 (2024/01/19)
+%% The LaTeX package csvsimple - version 2.6.1 (2024/05/16)
%% csvsimple.sty: Simple LaTeX CSV file processing
%%
%% -------------------------------------------------------------------------------------------
@@ -18,7 +18,7 @@
%% This work consists of all files listed in README.md
%%
\NeedsTeXFormat{LaTeX2e}[2022-06-01]
-\ProvidesExplPackage{csvsimple}{2024/01/19}{2.6.0}
+\ProvidesExplPackage{csvsimple}{2024/05/16}{2.6.1}
{LaTeX CSV file processing}
\cs_if_exist:NT \c__csvsim_package_expl_bool
diff --git a/macros/latex/contrib/csvsimple/csvsimple.tex b/macros/latex/contrib/csvsimple/csvsimple.tex
index 7d34586a42..73d34f4c34 100644
--- a/macros/latex/contrib/csvsimple/csvsimple.tex
+++ b/macros/latex/contrib/csvsimple/csvsimple.tex
@@ -1,6 +1,6 @@
% \LaTeX-Main\
% !TeX encoding=UTF-8
-%% The LaTeX package csvsimple - version 2.6.0 (2024/01/19)
+%% The LaTeX package csvsimple - version 2.6.1 (2024/05/16)
%% csvsimple.tex: Manual
%%
%% -------------------------------------------------------------------------------------------
diff --git a/macros/latex/contrib/customenvs/doc/customenvs-doc-en.pdf b/macros/latex/contrib/customenvs/doc/customenvs-doc-en.pdf
index f1bf30aacc..58cbad4858 100644
--- a/macros/latex/contrib/customenvs/doc/customenvs-doc-en.pdf
+++ b/macros/latex/contrib/customenvs/doc/customenvs-doc-en.pdf
Binary files differ
diff --git a/macros/latex/contrib/customenvs/doc/customenvs-doc-en.tex b/macros/latex/contrib/customenvs/doc/customenvs-doc-en.tex
index b8352c628d..ac637640e4 100644
--- a/macros/latex/contrib/customenvs/doc/customenvs-doc-en.tex
+++ b/macros/latex/contrib/customenvs/doc/customenvs-doc-en.tex
@@ -34,8 +34,8 @@
\usepackage[margin=1.5cm]{geometry}
\setlength{\parindent}{0pt}
-\def\TPversion{0.1.4}
-\def\TPdate{04/04/2024}
+\def\TPversion{0.1.6}
+\def\TPdate{28/05/2024}
\usepackage{tcolorbox}
\sethlcolor{lightgray!25}
\NewDocumentCommand\MontreCode{ m }{%
@@ -111,6 +111,10 @@
\section{History}
+\verb|v0.1.6|~:~~~~Small patchs for \textsf{displayskip} + \textsf{pas-tableur} (see \texttt{[fr]} documentation)
+
+\verb|v0.1.5|~:~~~~New macros for boxes with \textsf{tcolorbox} (see \texttt{[fr]} documentation)
+
\verb|v0.1.4|~:~~~~Create a SMS conversation
\verb|v0.1.3|~:~~~~Environment for exercise(s) (in french doc)
diff --git a/macros/latex/contrib/customenvs/doc/customenvs-doc-fr.pdf b/macros/latex/contrib/customenvs/doc/customenvs-doc-fr.pdf
index 87d7507f61..becb1b389b 100644
--- a/macros/latex/contrib/customenvs/doc/customenvs-doc-fr.pdf
+++ b/macros/latex/contrib/customenvs/doc/customenvs-doc-fr.pdf
Binary files differ
diff --git a/macros/latex/contrib/customenvs/doc/customenvs-doc-fr.tex b/macros/latex/contrib/customenvs/doc/customenvs-doc-fr.tex
index 9cdaeadf73..5306af12c6 100644
--- a/macros/latex/contrib/customenvs/doc/customenvs-doc-fr.tex
+++ b/macros/latex/contrib/customenvs/doc/customenvs-doc-fr.tex
@@ -13,7 +13,7 @@
\RequirePackage[scaled=0.925]{cabin} % sf
%\usepackage{DejaVuSerif}
%\usepackage[scale=1.1]{inconsolata}
-\usepackage{customenvs}
+\usepackage[pastableur]{customenvs}
\usepackage{tabularx}
\usepackage{soul}
%\usepackage{codehigh}
@@ -39,8 +39,8 @@
\usepackage[margin=1.5cm]{geometry}
\setlength{\parindent}{0pt}
-\def\TPversion{0.1.4}
-\def\TPdate{4 avril 2024}
+\def\TPversion{0.1.6}
+\def\TPdate{28 mai 2024}
\usepackage{tcolorbox}
\tcbuselibrary{listingsutf8}
\newtcblisting{DemoCode}[1]{%
@@ -66,10 +66,10 @@
keywordstyle={\color{violet}},%
classoffset=2,%
alsoletter={-},%
- morekeywords={\ReponsesQCM,MultiCols,\CreerListeItems,\ListeChoixItems,\TableauCompetences,\CrayonDeCompetences,\StyleEnvtExo,\StyleEnvtExoDefaut,\TitreExo,\ipsum,EnvSMS,\SMSrec,\SMSenv},%
+ morekeywords={\ReponsesQCM,MultiCols,\CreerListeItems,\ListeChoixItems,\TableauCompetences,\CrayonDeCompetences,\StyleEnvtExo,\StyleEnvtExoDefaut,\TitreExo,\ipsum,EnvSMS,\SMSrec,\SMSenv,BoiteSimple,\SujetTitreExo,\CircledNumber,\AffVignette,\BoiteArrondie,\ChangerDisplaySkip,\celcouleur,\celfusion,\lignetxt,\colonnetxt,\celnumbreak,\celtxt},%
keywordstyle={\color{green!50!black}},%
classoffset=3,%
- morekeywords={Largeur,Filets,EspacesCL,NbCols,Labels,PoliceLabels,EspaceLabels,Swap,Type,CoeffEspVert,EpTrait,Alea,LargeurNivs,Niveaux,NoticeNiveaux,Titre,PolTitre,PolNotice,PolComp,LigneSep,CouleurNotice,CouleurNiveaux,CouleurFond,Note,Notice,PoliceCateg,PoliceBloc,Couleurs,LargeurBloc,Echelle,NoirBlanc,Libelle,EpTrait,Police,Type,ComplementTitre,Titre,CodeDebut,Couleur,EchelleImage,Decoration,Trait,Avatar,AffAvatar,NoirBlanc,CouleurE,CouleurR,CouleurFond,Hauteur,Largeur,PoliceTxt,CouleurTitre},%
+ morekeywords={Largeur,Filets,EspacesCL,NbCols,Labels,PoliceLabels,EspaceLabels,Swap,Type,CoeffEspVert,EpTrait,Alea,LargeurNivs,Niveaux,NoticeNiveaux,Titre,PolTitre,PolNotice,PolComp,LigneSep,CouleurNotice,CouleurNiveaux,CouleurFond,Note,Notice,PoliceCateg,PoliceBloc,Couleurs,LargeurBloc,Echelle,NoirBlanc,Libelle,EpTrait,Police,Type,ComplementTitre,Titre,CodeDebut,Couleur,EchelleImage,Decoration,Trait,Avatar,AffAvatar,NoirBlanc,CouleurE,CouleurR,CouleurFond,Hauteur,Largeur,PoliceTxt,CouleurTitre,AlignH,bg,txt,bthick,bcol,raise,Type,EspH,Fond,Texte,Style,Dense,Avant,AvantS,Apres,ApresS,Global,align,width},%
keywordstyle={\color{orange}}
},%
#1
@@ -149,6 +149,14 @@
\section{Historique}
+\verb|v0.1.6|~:~~~~Patch \textsf{displayskip} + Patches \textsf{pas-tableur}
+
+\verb|v0.1.5|~:~~~~La librairie \texttt{babel} de \TikZ\ n'est plus chargée
+
+\verb|v0.1.5|~:~~~~Vignettes + Numéros encerclés + Création de boîtes 'simples'
+
+\verb|v0.1.4|~:~~~~Commande pour du texte dans une boîte arrondie, de hauteur 'figée' + 'Chat' SMS
+
\verb|v0.1.3|~:~~~~Environnement/commande pour des exercices, avec personnalisation(s)
\verb|v0.1.2|~:~~~~Crayon de compétences
@@ -199,7 +207,8 @@ Les packages chargés sont :
\item \MontreCode{multicol} ;
\item \MontreCode{tabularray} ;
\item \MontreCode{xcolor} ;
- \item \MontreCode{fontawesome5}.
+ \item \MontreCode{fontawesome5} ;
+ \item \MontreCode{tikz} avec les librairies \MontreCode{decorations.pathmorphing,positioning,shapes.misc,calc}.
\end{itemize}
À noter que, pour des raisons de compatibilité (ou d'incompatibilité), les packages \MontreCode{enumitem}/\MontreCode{multicol}/\MontreCode{tabularray}/\MontreCode{xcolor}/\MontreCode{fontawesome5} peuvent ne pas être chargés par \MontreCode{customenvs} (auxquels cas l'utilisateur devra les avoir chargés pour faire fonctionner certains environnements) via les options :
@@ -1058,4 +1067,266 @@ Le code proposé utilise l'environnement, mais la commande simple est complètem
\includegraphics{envtexo_exemples.pdf}
\end{DemoCode}
+\pagebreak
+
+\section{Boîtes divers}
+
+\subsection{Introduction}
+
+L'idée est de proposer (modestement) des commandes, basées sur \MontreCode{tcolorbox}, pour, avec un style prédéfini :
+
+\begin{itemize}
+ \item créer des boîtes de présentation ;
+ \item créer des titres de sujets d'examens, par exemple ;
+ \item créer des titres d'exercices, pour des sujets d'examens par exemple ;
+ \item créer des numéros encadrés ;
+ \item créer de vignettes.
+\end{itemize}
+
+\subsection{Boîtes de présentation}
+
+\begin{DemoCode}{listing only}
+\begin{BoiteSimple}[couleur]<options tcbox>{titre}
+ ...
+\end{BoiteSimple}
+\end{DemoCode}
+
+\begin{DemoCode}{}
+\begin{BoiteSimple}[red]{Propriété}
+Si M est la matrice d'adjacence d'un graphe simple orienté de sommets $A_1$, $A_2$, \dots, $A_n$, le nombre de chemins de longueur $p$ d'un sommet $A_i$ à un sommet $A_j$ est le nombre situé ligne $i$ et colonne $j$ dans la matrice $M^p$.
+\end{BoiteSimple}
+\end{DemoCode}
+
+\begin{DemoCode}{}
+\begin{BoiteSimple}[blue]<width=0.75\linewidth,flush right>{Propriété}
+Si M est la matrice d'adjacence d'un graphe simple orienté de sommets $A_1$, $A_2$, \dots, $A_n$, le nombre de chemins de longueur $p$ d'un sommet $A_i$ à un sommet $A_j$ est le nombre situé ligne $i$ et colonne $j$ dans la matrice $M^p$.
+\end{BoiteSimple}
+\end{DemoCode}
+
+\subsection{Titres de sujets d'examens, titres d'exercices}
+
+\begin{DemoCode}{listing only}
+\begin{TitreSujet}[Couleur=...,AlignH=...]<options tcbox>{titre onglet}
+...
+\end{TitreSujet}
+\end{DemoCode}
+
+\begin{DemoCode}{}
+\begin{TitreSujet}[Couleur=red!50!black]{SUJET}
+Métropole, SIO, 16 Mai 2024
+\end{TitreSujet}
+\end{DemoCode}
+
+\begin{DemoCode}{}
+\begin{TitreSujet}[Couleur=teal,AlignH=center]{CORRIGÉ}
+Baccalauréat Centres étrangers Groupe 1\\
+14 mars 2023
+\end{TitreSujet}
+\end{DemoCode}
+
+\begin{DemoCode}{listing only}
+\SujetTitreExo[couleur]{titre}
+\end{DemoCode}
+
+\begin{DemoCode}{}
+\SujetTitreExo{Exercice 4 (5 points)}
+
+\SujetTitreExo[olive]{Exercice 1 [Matrices]\dotfill(5 points)}
+\end{DemoCode}
+
+\subsection{Numéros encerclés}
+
+\begin{DemoCode}{listing only}
+\CircledNumber[bg=...,txt=...,bthick=...,bcol=...,raise=true/false]%
+ {nombre}{noeud tikz}
+\end{DemoCode}
+
+\begin{DemoCode}{}
+En ligne \CircledNumber{1} avec texte après.
+\end{DemoCode}
+
+\begin{DemoCode}{}
+{\bfseries\sffamily\Huge En ligne (\CircledNumber[bthick=0.25mm,bcol=red,bg=cyan!25,txt=darkgray]{7}) avec texte après}
+\end{DemoCode}
+
+\begin{DemoCode}{}
+{\Large En ligne \CircledNumber[raise=false,bthick=0.5mm,bcol=cyan,bg=cyan!25,txt=orange]{4} avec texte après}
+\end{DemoCode}
+
+\begin{DemoCode}{}
+\begin{enumerate}[label={\CircledNumber[raise=false]{\arabic*}}]
+ \item A
+ \item B
+ \item C
+\end{enumerate}
+\end{DemoCode}
+
+\subsection{Vignettes}
+
+\begin{DemoCode}{listing only}
+\AffVignette(*)[Type=...,Couleur=...,Police=...]{texte}
+% la version étoilée active le \NoAutoSpacing
+\end{DemoCode}
+
+\begin{DemoCode}{}
+%vignette de base
+\AffVignette{test} ou \AffVignette[Couleur=magenta]{test}
+\end{DemoCode}
+
+\begin{DemoCode}{}
+%vignette type algo
+\AffVignette[Type=algo]{test} ou \AffVignette[Type=algo,Couleur=teal]{Renvoyer}
+\end{DemoCode}
+
+\begin{DemoCode}{}
+%vignette type python, classique
+\AffVignette[Type=py]{test} ou \AffVignette[Type=py,Couleur=lime]{return}
+
+%vignette type python, avec piton (et lualatex)
+%\AffVignette[Type=pypit]{from math import sqrt}
+
+%vignette type python, avec piton et pyluatex (et lualatex + shell-escape)
+%\AffVignette[Type=pyl,Couleur=blue]{1+4/5}
+\end{DemoCode}
+
+\begin{DemoCode}{}
+%vignette type graphique
+\AffVignette[Type=grph]{fonction} ou \AffVignette[Couleur=olive,Type=grph]{intersection}
+\end{DemoCode}
+
+\begin{DemoCode}{}
+%vignette type MPM
+\AffVignette[Type=mpm]{marge} ou \AffVignette[Type=mpm,Couleur=orange]{chemin}
+\end{DemoCode}
+
+\begin{DemoCode}{}
+%vignette type xcas
+\AffVignette[Type=xcas]{calcul formel} ou \AffVignette[Type=xcas,Couleur=brown]{calcul formel}
+\end{DemoCode}
+
+\begin{DemoCode}{}
+%vignette type shell
+\AffVignette[Type=shell,Couleur=red!50!orange]{fenêtre cmd}
+\end{DemoCode}
+
+\begin{DemoCode}{}
+%vignette type LaTeX
+\AffVignette[Type=tex]{code LaTeX}
+\end{DemoCode}
+
+\begin{DemoCode}{}
+%vignette type tableur
+\AffVignette[Type=sheet,Couleur=green!50!black,Police=\footnotesize\sffamily]
+ {cellule A3}
+\end{DemoCode}
+
+\begin{DemoCode}{}
+%création d'une macro personnelle
+\NewDocumentCommand\VignetteTableur{ m }{%
+ \AffVignette*[Type=sheet,Couleur=green!50!black,Police=\footnotesize\sffamily]
+ {#1}
+}
+On se place dans la plage \VignetteTableur{A3:B5} pour...
+
+\end{DemoCode}
+
+\subsection{Boîte arrondie}
+
+\begin{DemoCode}{listing only}
+\BoiteArrondie[Fond=...,Texte=...,EspH=...,Style=...]{texte}[noeud tikz]
+\end{DemoCode}
+
+\begin{DemoCode}{}
+On lance le logiciel \BoiteArrondie[Fond=cyan!33,Texte=violet,EspH=2mm,Style=rect]{situé sur le bureau} en cliquant \BoiteArrondie[Fond=lightgray!25,Texte=darkgray]{droit}.
+\end{DemoCode}
+
+\pagebreak
+
+\section{Patchs divers}
+
+\subsection{Gérer l'espacement vertical du mode hors-ligne}
+
+L'idée est de proposer une commande, à insérer dans le préambule, pour \textit{patcher} l'espacement vertical proposé par les environnements mathématiques hors-ligne.
+
+\begin{DemoCode}{listing only}
+...
+\ChangerDisplaySkip[clés]
+...
+\begin{document}
+\end{DemoCode}
+
+Les \MontreCode{clés} disponibles, à donner entre \MontreCode{[...]}, sont :
+
+\begin{itemize}
+ \item \MontreCode{Avant=...} : modification de l'espacement avant ;
+ \item \MontreCode{AvantS=...} : modification de l'espacement avant (version \textit{short}) ;
+ \item \MontreCode{Apres=...} : modification de l'espacement après ;
+ \item \MontreCode{ApresS=...} : modification de l'espacement après (version \textit{short}) ;
+ \item \MontreCode{Global=...} : modification globale de \textbf{tous} les espacements ;
+ \item \MontreCode{Dense} : booléen pour modification globale en \MontreCode{0.33\textbackslash baselineskip}.
+\end{itemize}
+
+\subsection{Quelques ajouts au package pas-tableur}
+
+L'idée est de proposer quelques commandes complémentaires pour le package \textsf{pas-tableur}, de Stéphane Pasquet (\url{https://ctan.org/pkg/pas-tableur}), en respectant autant que faire se peut la syntaxe du package (voir la documentation pour de plus amples informations).
+
+\smallskip
+
+Le package \textsf{pas-tableur} n'est pas chargé par défaut, mais il peut l'être grâce à l'option \MontreCode{[pastableur]}.
+
+\smallskip
+
+Les \textit{ajouts} disponibles sont :
+
+\begin{itemize}
+ \item colorer/griser une case, via \MontreCode{\textbackslash celcouleur} ;
+ \item fusionner des celules, via \MontreCode{\textbackslash celfusion} ;
+ \item \textit{casser la numérotation} avec des pointillés, via \MontreCode{\textbackslash celnumbreak} ;
+ \item remplir (partiellement ou non) une ligne, via \MontreCode{\textbackslash lignetxt} ;
+ \item remplir (partiellement ou non) une colonne, via \MontreCode{\textbackslash colonnetxt}.
+\end{itemize}
+
+\begin{DemoCode}{listing only}
+%chargement du package
+\usepackage[pastableur]{customenvs}
+
+%griser une cellule
+\celcouleur[couleur]{col-lig}
+
+%fusionner des cellules
+\celfusion[options pas-tableur]{col-lig}{col-lig}{label}
+
+%pointillés dans la numérotation
+\celnumbreak{num ligne pointillés}{début numéro suite}{fin numéro suite}
+
+%remplir ligne
+\lignetxt(*)[options pas-tableur]{num ligne}<col début>{liste des cellules}
+
+%remplir colonne
+\colonnetxt(*)[options pas-tableur]{num colonne}<lgn début>{liste des cellules}
+\end{DemoCode}
+
+\pagebreak
+
+L'exemple suivant illustre les différentes commandes proposées dans ce package.
+
+\begin{DemoCode}{}
+\begin{tikzpicture}{}
+ \tableur*[10]{A/2.5cm,B/2.5cm,C/2.5cm,D/2.5cm,E/2.5cm,F/2.5cm}
+ %ligne n°1
+ \celtxt*[align=center]{A}{1}{$n$}
+ \celfusion[align=center]{B-1}{C-1}{$M_n$}
+ \celfusion[align=center]{D-1}{E-1}{$S_n$}
+ \celtxt*[align=center]{F}{1}{$d_n$}
+ % %Ligne2/3/4
+ \celcouleur{A-2}
+ \lignetxt*[align=center]{2}<2>{$x_n$,$y_n$,5,$n$,$n$} %à partir de la colonne n°2
+ \lignetxt*[align=center]{3}{0,0,0,5,0,5}
+ \lignetxt*[align=center]{4}{1,1,0,5,1,4.12310563}%
+ \celnumbreak{8}{27}{28}
+ %colonneA
+ \colonnetxt*[align=center]{A}<5>{2,3,4,\dots,24,25} %à partir de la ligne n°5
+\end{tikzpicture}
+\end{DemoCode}
+
\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/customenvs/doc/envtexo_exemples.tex b/macros/latex/contrib/customenvs/doc/envtexo_exemples.tex
index e782579dec..2daa195179 100644
--- a/macros/latex/contrib/customenvs/doc/envtexo_exemples.tex
+++ b/macros/latex/contrib/customenvs/doc/envtexo_exemples.tex
@@ -1,80 +1,80 @@
-% !TeX TXS-program:compile = txs:///arara
-% arara: pdflatex: {shell: no, synctex: no, interaction: batchmode}
-% arara: pdflatex: {shell: no, synctex: no, interaction: batchmode} if found('log', '(undefined references|Please rerun|Rerun to get)')
-
-\documentclass[a5paper,11pt]{article}
-\usepackage[margin=1cm]{geometry}
-\usepackage{customenvs}
-%facultatif, pour les décorations
-\usepackage{graphicx}
-\usepackage{dashrulex}
-\usepackage{coloredbelts}
-\usepackage{pictochrono}
-%mise en page
-\usepackage{ipsum}
-\setlength{\parindent}{0pt}
-
-\begin{document}
-
-\begin{EnvtExo}%exo1
- \ipsum<Lang=FR,Type=sent>
-\end{EnvtExo}
-
-\begin{EnvtExo}[Trait=pointilles]%exo2
- \ipsum<Lang=FR,Type=sent>
-\end{EnvtExo}
-
-\begin{EnvtExo}[Trait=dashilles]%exo3
- \ipsum<Lang=FR,Type=sent>
-\end{EnvtExo}
-
-\begin{EnvtExo}[Decoration=Icone/\faPython]%exo4
- \ipsum<Lang=FR,Type=sent>
-\end{EnvtExo}
-
-\begin{EnvtExo}[Decoration=Ceinture/rouge]%exo5
- \ipsum<Lang=FR,Type=sent>
-\end{EnvtExo}
-
-\begin{EnvtExo}[Decoration=Chrono/20]%exo6
- \ipsum<Lang=FR,Type=sent>
-\end{EnvtExo}
-
-\begin{EnvtExo}[Decoration=Image/goku_ssj4]%exo7
- \ipsum<Lang=FR,Type=sent>
-\end{EnvtExo}
-
-\begin{EnvtExo}[Decoration=Image/sseiya_shura]%exo8
- \ipsum<Lang=FR,Type=sent>
-\end{EnvtExo}
-
-\begin{EnvtExo}[Decoration=Points/7]%exo9
- \ipsum<Lang=FR,Type=sent>
-\end{EnvtExo}
-
-\begin{EnvtExo}[Type=Perso/{Titre perso }]%exo10
- \ipsum<Lang=FR,Type=sent>
-\end{EnvtExo}
-
-\StyleEnvtExo[Couleur=red,Police=\bfseries\ttfamily,EpTrait=2pt,Libelle={Exercice n°}]
-
-\begin{EnvtExo}[Decoration=Icone/\faAddressBook]%exo11
- \ipsum<Lang=FR,Type=sent>
-\end{EnvtExo}
-
-\begin{EnvtExo}[Type=Perso/{Titre perso },Decoration=Chrono/25,Couleur=red,Trait=dashilles]%exo12
- \ipsum<Lang=FR,Type=sent>
-\end{EnvtExo}
-
-\StyleEnvtExoDefaut
-
-\begin{EnvtExo}%
- [Type=Perso/{Titre perso~},Decoration=Image/goku_ssj4,Trait=non,Compteur=false]%exo13
- \ipsum<Lang=FR,Type=sent>
-\end{EnvtExo}
-
-\TitreExo[Type=Perso/{Annexe Exercice 3},Compteur=false,Decoration=Image/sseiya_aiolos]%exo14
-
-\ipsum<Lang=FR,Type=sent>
-
+% !TeX TXS-program:compile = txs:///arara
+% arara: pdflatex: {shell: no, synctex: no, interaction: batchmode}
+% arara: pdflatex: {shell: no, synctex: no, interaction: batchmode} if found('log', '(undefined references|Please rerun|Rerun to get)')
+
+\documentclass[a5paper,11pt]{article}
+\usepackage[margin=1cm]{geometry}
+\usepackage{customenvs}
+%facultatif, pour les décorations
+\usepackage{graphicx}
+\usepackage{dashrulex}
+\usepackage{coloredbelts}
+\usepackage{pictochrono}
+%mise en page
+\usepackage{ipsum}
+\setlength{\parindent}{0pt}
+
+\begin{document}
+
+\begin{EnvtExo}%exo1
+ \ipsum<Lang=FR,Type=sent>
+\end{EnvtExo}
+
+\begin{EnvtExo}[Trait=pointilles]%exo2
+ \ipsum<Lang=FR,Type=sent>
+\end{EnvtExo}
+
+\begin{EnvtExo}[Trait=dashilles]%exo3
+ \ipsum<Lang=FR,Type=sent>
+\end{EnvtExo}
+
+\begin{EnvtExo}[Decoration=Icone/\faPython]%exo4
+ \ipsum<Lang=FR,Type=sent>
+\end{EnvtExo}
+
+\begin{EnvtExo}[Decoration=Ceinture/rouge]%exo5
+ \ipsum<Lang=FR,Type=sent>
+\end{EnvtExo}
+
+\begin{EnvtExo}[Decoration=Chrono/20]%exo6
+ \ipsum<Lang=FR,Type=sent>
+\end{EnvtExo}
+
+\begin{EnvtExo}[Decoration=Image/goku_ssj4]%exo7
+ \ipsum<Lang=FR,Type=sent>
+\end{EnvtExo}
+
+\begin{EnvtExo}[Decoration=Image/sseiya_shura]%exo8
+ \ipsum<Lang=FR,Type=sent>
+\end{EnvtExo}
+
+\begin{EnvtExo}[Decoration=Points/7]%exo9
+ \ipsum<Lang=FR,Type=sent>
+\end{EnvtExo}
+
+\begin{EnvtExo}[Type=Perso/{Titre perso }]%exo10
+ \ipsum<Lang=FR,Type=sent>
+\end{EnvtExo}
+
+\StyleEnvtExo[Couleur=red,Police=\bfseries\ttfamily,EpTrait=2pt,Libelle={Exercice n°}]
+
+\begin{EnvtExo}[Decoration=Icone/\faAddressBook]%exo11
+ \ipsum<Lang=FR,Type=sent>
+\end{EnvtExo}
+
+\begin{EnvtExo}[Type=Perso/{Titre perso },Decoration=Chrono/25,Couleur=red,Trait=dashilles]%exo12
+ \ipsum<Lang=FR,Type=sent>
+\end{EnvtExo}
+
+\StyleEnvtExoDefaut
+
+\begin{EnvtExo}%
+ [Type=Perso/{Titre perso~},Decoration=Image/goku_ssj4,Trait=non,Compteur=false]%exo13
+ \ipsum<Lang=FR,Type=sent>
+\end{EnvtExo}
+
+\TitreExo[Type=Perso/{Annexe Exercice 3},Compteur=false,Decoration=Image/sseiya_aiolos]%exo14
+
+\ipsum<Lang=FR,Type=sent>
+
\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/customenvs/tex/customenvs.sty b/macros/latex/contrib/customenvs/tex/customenvs.sty
index ee8f4427a2..a659568baf 100644
--- a/macros/latex/contrib/customenvs/tex/customenvs.sty
+++ b/macros/latex/contrib/customenvs/tex/customenvs.sty
@@ -3,9 +3,11 @@
% source pencil...: CC-BY-SA 4.0 https://tex.stackexchange.com/questions/504092/replicating-a-fancy-bordered-text-style-in-latex/504145#504145
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{customenvs}[2024/04/04 0.1.4 Custom classic environments]
+\ProvidesPackage{customenvs}[2024/05/28 0.1.6 Custom classic environments]
%====HISTORIQUE
+% v 0.1.6 DisplaySkip patch + Patchs pas-tableur
+% v 0.1.5 Boxes for exam title + circled numbers + Vignettes + Small simple boxes creation
% v 0.1.4 Commande (en/fr) pour du texte dans une boîte arrondie, de hauteur 'figée' + 'Chat' SMS
% v 0.1.3 Environnement/Commande pour présentation d'un exercice
% v 0.1.2 Crayon de compétences
@@ -28,6 +30,8 @@
\newif\if@fa\@fatrue%
\DeclareOption{nonfa}{\@fafalse}%
\DeclareOption{nofa}{\@fafalse}%
+\newif\if@pastableur\@pastableurfalse%
+\DeclareOption{pastableur}{\@pastableurtrue}%
\DeclareOption*{}
\ProcessOptions\relax
@@ -55,7 +59,9 @@
\RequirePackage{calc}
\RequirePackage{tikz}
\usetikzlibrary{decorations.pathmorphing,positioning,shapes.misc,calc}
-\usepackage{tcolorbox}
+\usetikzlibrary{babel}
+\RequirePackage{tcolorbox}
+\RequirePackage{varwidth}
\tcbuselibrary{skins}
%%----COMMANDES FR
@@ -922,7 +928,7 @@
\setKVdefault[BoiteArrondie]{%
Fond=red,%
Texte=white,%
- EspH=0.25em,%
+ EspH=0.125em,%
Style=rect
}
\NewDocumentCommand\BoiteArrondie{ O{} m O{char} }{%
@@ -1346,25 +1352,23 @@
}
%====ROUNDED BOX
-\defKV[RoundedBox]{hmargin=\def\RoundedBoxDelta{#1},style=\def\RoundedBoxStyle{#1}}
-\setKVdefault[RoundedBox]{%
- bg=red,%
- txt=white,%
- hmargin=0.25em,%
- style=rect
-}
-
-
-
-\NewDocumentCommand\RoundedBox{ O{} m O{char} }{%
- \restoreKV[RoundedBox]%
- \setKV[RoundedBox]{#1}%
- \settototalheight{\tmpheightbox}{\hbox{(EazertyuiopqsdfghjklmwxcvbnAZERTYUIOPQSDFGHJKLMWXCVBN)#2}}%hauteur globale
- \IfStrEqCase{\RoundedBoxStyle}{%
- {rect}{\tikz[remember picture,baseline=(#3.base)]{\node[minimum height=\tmpheightbox,shape=rectangle,rounded corners=0.25em,fill={\useKV[RoundedBox]{bg}},inner sep=0.75pt,outer sep=0pt,text={\useKV[RoundedBox]{txt}}] (#3) {\vphantom{(qE)}\kern\RoundedBoxDelta#2\kern\RoundedBoxDelta};}}%
- {circle}{\tikz[remember picture,baseline=(#3.base)]{\node[minimum height=\tmpheightbox,shape=circle,fill={\useKV[RoundedBox]{bg}},inner sep=0.75pt,outer sep=0pt,text={\useKV[RoundedBox]{txt}}] (#3) {\vphantom{(qE)}#2};}}%
- }\relax
-}
+% \defKV[RoundedBox]{hmargin=\def\RoundedBoxDelta{#1},style=\def\RoundedBoxStyle{#1}}
+% \setKVdefault[RoundedBox]{%
+ % bg=red,%
+ % txt=white,%
+ % hmargin=0.25em,%
+ % style=rect
+% }
+
+% \NewDocumentCommand\RoundedBox{ O{} m O{char} }{%
+ % \restoreKV[RoundedBox]%
+ % \setKV[RoundedBox]{#1}%
+ % \settototalheight{\tmpheightbox}{\hbox{(EazertyuiopqsdfghjklmwxcvbnAZERTYUIOPQSDFGHJKLMWXCVBN)#2}}%hauteur globale
+ % \IfStrEqCase{\RoundedBoxStyle}{%
+ % {rect}{\tikz[remember picture,baseline=(#3.base)]{\node[minimum height=\tmpheightbox,shape=rectangle,rounded corners=0.25em,fill={\useKV[RoundedBox]{bg}},inner sep=0.75pt,outer sep=0pt,text={\useKV[RoundedBox]{txt}}] (#3) {\vphantom{(qE)}\kern\RoundedBoxDelta#2\kern\RoundedBoxDelta};}}%
+ % {circle}{\tikz[remember picture,baseline=(#3.base)]{\node[minimum height=\tmpheightbox,shape=circle,fill={\useKV[RoundedBox]{bg}},inner sep=0.75pt,outer sep=0pt,text={\useKV[RoundedBox]{txt}}] (#3) {\vphantom{(qE)}#2};}}%
+ % }\relax
+% }
%====Chat SMS
%===Keys [EN]
@@ -1489,5 +1493,435 @@
title={#2\IfBooleanTF{#1}{}{$\cdot$\scalebox{0.6}[0.6]{\faCheckCircle[regular]\!\faCheckCircle[regular]}~}},left=1mm,right=1mm,boxsep=0mm]{#3}%
}
+%====SMALL BOXES CREATION
+\tikzset{simpleboxrulearrow/.style={line width=0.8pt,|->,>=latex}}
+
+% \NewTColorBox{SimpleBox}{ O{blue} D<>{} m }{
+ % enhanced,nobeforeafter,blanker,size=small,bottom=1mm,before=\par\noindent,%top=0mm,left=1mm,right=1mm,
+ % title={#3},fonttitle=\sffamily\bfseries\color{#1},lefttitle=1em,
+ % finish={\draw[#1,simpleboxrulearrow] ([xshift=1em]title.west) --++ (-1em,0) |- (frame.south east) -- ($(frame.south east)!0.5!(frame.north east)$) ;},%
+ % #2
+% }
+
+\NewTColorBox{BoiteSimple}{ O{blue} D<>{} m }{
+ enhanced,nobeforeafter,blanker,size=small,bottom=1mm,before=\par\noindent,%top=0mm,left=1mm,right=1mm,
+ title={#3},fonttitle=\sffamily\bfseries\color{#1},lefttitle=1em,
+ finish={\draw[#1,simpleboxrulearrow] ([xshift=1em]title.west) --++ (-1em,0) |- (frame.south east) -- ($(frame.south east)!0.5!(frame.north east)$) ;},%
+ #2
+}
+
+% \NewDocumentCommand\GenSimpleBox{ O{blue} m }{%
+ % 1 = couleur
+ % 2 = nom
+ % \NewTColorBox{#2}{ O{} m }{
+ % enhanced,nobeforeafter,blanker,size=small,bottom=1mm,before=\par\noindent,%top=0mm,left=1mm,right=1mm,
+ % title={##2},fonttitle=\sffamily\bfseries\color{#1},lefttitle=1em,
+ % finish={\draw[#1,simpleboxrulearrow] ([xshift=1em]title.west) --++ (-1em,0) |- (frame.south east) -- ($(frame.south east)!0.5!(frame.north east)$) ;},%
+ % ##1
+ % }
+% }
+
+\NewDocumentCommand\GenereBoiteSimple{ O{blue} m }{%
+ %1 = couleur
+ %2 = nom
+ \NewTColorBox{#2}{ O{} m }{
+ enhanced,nobeforeafter,blanker,size=small,bottom=1mm,before=\par\noindent,%top=0mm,left=1mm,right=1mm,
+ title={##2},fonttitle=\sffamily\bfseries\color{#1},lefttitle=1em,
+ finish={\draw[#1,simpleboxrulearrow] ([xshift=1em]title.west) --++ (-1em,0) |- (frame.south east) -- ($(frame.south east)!0.5!(frame.north east)$) ;},%
+ ##1
+ }
+}
+
+%====CIRCLEDNUMBERSSIMPLE
+\defKV[CircledBoxNumber]{bg=\def\tmpbordernbcircbox{#1}}
+\setKVdefault[CircledBoxNumber]{bg={},txt=black,bthick=0.5pt,bcol=black,raise=true}
+
+\newlength{\tmpheightnbcircbox}
+\newlength{\tmpdepthnbcircbox}
+\NewDocumentCommand\CircledNumber{ O{} m O{circnb} }{%
+ \restoreKV[CircledBoxNumber]%
+ \setKV[CircledBoxNumber]{#1}%
+ \settototalheight{\tmpheightnbcircbox}{(1234567890)}%hauteur globale
+ \settodepth{\tmpdepthnbcircbox}{(1234567890)}%
+ \ifboolKV[CircledBoxNumber]{raise}%
+ {%
+ \IfEq{\tmpbordernbcircbox}{}%
+ {%
+ {\tikz[baseline={([yshift=\tmpdepthnbcircbox]current bounding box.south)}]\node[outer sep=0pt,inner sep=0.5pt,minimum height={\tmpheightnbcircbox-\useKV[CircledBoxNumber]{bthick}},draw,{\useKV[CircledBoxNumber]{bcol}},line width={\useKV[CircledBoxNumber]{bthick}},circle,text={\useKV[CircledBoxNumber]{txt}}] (#3) {\ifnum#2<10 #2\else\scalebox{0.5}[1]{#2}\fi} ;}%
+ }%
+ {%
+ {\tikz[baseline={([yshift=\tmpdepthnbcircbox]current bounding box.south)}]\node[outer sep=0pt,inner sep=0.5pt,minimum height={\tmpheightnbcircbox-\useKV[CircledBoxNumber]{bthick}},draw,{\useKV[CircledBoxNumber]{bcol}},line width={\useKV[CircledBoxNumber]{bthick}},circle,fill={\useKV[CircledBoxNumber]{bg}},text={\useKV[CircledBoxNumber]{txt}}] (#3) {\ifnum#2<10 #2\else\scalebox{0.5}[1]{#2}\fi} ;}%
+ }%
+ }%
+ {%
+ \IfEq{\tmpbordernbcircbox}{}%
+ {%
+ {\tikz[baseline=(#3.base)] \node[outer sep=0pt,inner sep=0.5pt,minimum height={\tmpheightnbcircbox-\useKV[CircledBoxNumber]{bthick}},draw,{\useKV[CircledBoxNumber]{bcol}},line width={\useKV[CircledBoxNumber]{bthick}},circle,text={\useKV[CircledBoxNumber]{txt}}] (#3) {\ifnum#2<10 #2\else\scalebox{0.5}[1]{#2}\fi} ;}%
+ }%
+ {%
+ {\tikz[baseline=(#3.base)] \node[outer sep=0pt,inner sep=0.5pt,minimum height={\tmpheightnbcircbox-\useKV[CircledBoxNumber]{bthick}},draw,{\useKV[CircledBoxNumber]{bcol}},line width={\useKV[CircledBoxNumber]{bthick}},circle,fill={\useKV[CircledBoxNumber]{bg}},text={\useKV[CircledBoxNumber]{txt}}] (#3) {\ifnum#2<10 #2\else\scalebox{0.5}[1]{#2}\fi} ;}%
+ }%
+ }%
+}
+
+%====EXAM BOX TITLE(s)
+\NewDocumentCommand\LetPhantomBox{}{%
+ \vphantom{(ÉAZERTYUIOPQSDFGHJKLMWXCVBN,éàço)}%
+}
+
+\tcbset{StyleTitreSujet/.style={%
+ enhanced,size=small,
+ colback=white!5,boxrule=1.25pt,
+ attach boxed title to top left={xshift=0.5cm,yshift=1mm-\tcboxedtitleheight},
+ varwidth boxed title*=-3cm,
+ boxed title style={frame code={
+ \path[fill=tcbcolframe!50!black]
+ ([yshift=-1mm,xshift=-1mm]frame.north west)
+ arc[start angle=0,end angle=180,radius=1mm]
+ ([yshift=-1mm,xshift=1mm]frame.north east)
+ arc[start angle=180,end angle=0,radius=1mm];
+ \path[fill=tcbcolframe] ([xshift=-2mm]frame.north west) -- ([xshift=2mm]frame.north east) [rounded corners=1mm]-- ([xshift=1mm,yshift=-1mm]frame.north east) -- (frame.south east) -- (frame.south west) -- ([xshift=-1mm,yshift=-1mm]frame.north west) [sharp corners]-- cycle;
+ },interior engine=empty,size=fbox,
+ },
+ fonttitle=\bfseries\sffamily,
+ fontupper=\huge\bfseries\sffamily,
+ }
+}
+
+\defKV[tcbtitresujet]{%
+ AlignH=\def\tcbtitresujethalign{#1}
+}
+
+\setKVdefault[tcbtitresujet]{%
+ Couleur=black,
+ AlignH=center
+}
+
+\NewDocumentEnvironment{TitreSujet}{ O{} D<>{} m }%
+{%
+ \restoreKV[tcbtitresujet]%
+ \setKV[tcbtitresujet]{#1}%
+ \IfStrEqCase{\tcbtitresujethalign}{%
+ {right}{\tcbset{StyleTitreSujetAlign/.style={halign=flush right}}}%
+ {left}{\tcbset{StyleTitreSujetAlign/.style={halign=flush left}}}%
+ }[\tcbset{StyleTitreSujetAlign/.style={halign=flush center}}]%
+ \tcolorbox[colupper={\useKV[tcbtitresujet]{Couleur}},colframe={\useKV[tcbtitresujet]{Couleur}},StyleTitreSujet,StyleTitreSujetAlign,title={\vphantom{QJ}#3},before upper=\LetPhantomBox,after upper=\LetPhantomBox,#2]%
+}%
+{%
+ \endtcolorbox%
+}
+
+\tcbset{StyleTitreSujetSousEpreuve/.style={%
+ center,after skip=1pt,size=small,boxsep=3pt,boxrule=1pt,colback=white,left=2pt,right=2pt,%
+ sharp corners,rounded corners=downhill,arc=8pt,
+ fontupper={\sffamily\bfseries\large}
+ }
+}
+
+\NewDocumentCommand\SousTitreSujetEpreuve{ O{black} m }{%
+ \tcbset{StyleTitreSujetSousEpreuveCouleur/.style={colframe=#1,colupper=#1}}
+ \IfStrEqCase{#2}{%
+ {}{\tcbox[StyleTitreSujetSousEpreuve,StyleTitreSujetSousEpreuveCouleur]{#2}}%
+ {U21}{\tcbox[StyleTitreSujetSousEpreuve,StyleTitreSujetSousEpreuveCouleur,before upper=\faSortNumericDown\:\:,after upper=\:\:\faProjectDiagram]{Épreuve U2 - Mathématiques pour l'Informatique}}%
+ {U2}{\tcbox[StyleTitreSujetSousEpreuve,StyleTitreSujetSousEpreuveCouleur,before upper=\faSortNumericDown\:\:,after upper=\:\:\faProjectDiagram]{Épreuve U2 - Mathématiques pour l'Informatique}}%
+ {U2CG}{\tcbox[StyleTitreSujetSousEpreuve,StyleTitreSujetSousEpreuveCouleur,before upper=\faSortNumericDown\:\:,after upper=\:\:\faProjectDiagram]{Épreuve U2 - Mathématiques appliquées}}%
+ {UF2}{\tcbox[StyleTitreSujetSousEpreuve,StyleTitreSujetSousEpreuveCouleur,before upper=\faDice\:\:,after upper=\:\:\faChartLine]{Épreuve UF2 - Mathématiques Approfondies}}%
+ {U41OL}{\tcbox[StyleTitreSujetSousEpreuve,StyleTitreSujetSousEpreuveCouleur,before upper=\faDice\:\:,after upper=\:\:\faBezierCurve]{Épreuve U41 - Mathématiques}}
+ }%
+}
+
+\NewDocumentCommand\SujetTitreExo{ O{black} m }{%
+ \tcolorbox[enhanced,width=\linewidth,size=small,colback=white,colframe=#1,boxrule=0.75pt,fontupper=\color{#1}\Large\sffamily\bfseries,sharp corners,rounded corners=south,arc=4pt,before upper=\LetPhantomBox]
+ #2
+ \endtcolorbox%
+}
+
+%====vignettes
+\NewDocumentCommand\LetPhantomVignette{}{%
+ \vphantom{(AZERTYUIOPQSDFGHJKLMWXCVBN,éàço)}%
+}
+
+\tcbset{cevignettes/.style={%
+ nobeforeafter,box align=base,boxsep=0pt,enhanced,sharp corners=all,rounded corners=southeast,arc=2pt,boxrule=0.65pt,left=1.75pt,right=1.25pt,top=1.25pt,bottom=0.5pt,colback=white,before upper=\LetPhantomVignette
+ }
+}
+
+\tcbset{cevignettepy/.style={%
+ cevignettes,left=6pt,coltitle=tcbcolframe,
+ underlay={\begin{tcbclipinterior}\fill[fill=tcbcolframe!33]($(interior.south west)$) rectangle node[rotate=90,font=\tiny\sffamily,tcbcolframe!75!black]{\scalebox{0.55}[0.75]{\textbf{PY}}} ($(interior.north west)+(5pt,0pt)$);\end{tcbclipinterior}}
+ }
+}
+
+\tcbset{cevignettealgo/.style={%
+ cevignettes,left=6pt,coltitle=tcbcolframe,
+ underlay={\begin{tcbclipinterior}\fill[fill=tcbcolframe!33]($(interior.south west)$) rectangle node[rotate=90,font=\tiny\sffamily,tcbcolframe!75!black]{\scalebox{0.55}[0.75]{\textbf{ALGO}}} ($(interior.north west)+(5pt,0pt)$);\end{tcbclipinterior}}
+ }
+}
+
+\tcbset{cevignettetableur/.style={%
+ cevignettes,left=6pt,coltitle=tcbcolframe,
+ underlay={\begin{tcbclipinterior}\fill[fill=tcbcolframe!33]($(interior.south west)$) rectangle node[rotate=90,font=\tiny\sffamily,tcbcolframe!75!black]{\scalebox{0.5}[0.75]{\textbf{EXCEL}}} ($(interior.north west)+(5pt,0pt)$);\end{tcbclipinterior}}
+ }
+}
+
+\tcbset{cevignetteMPM/.style={%
+ cevignettes,left=6pt,coltitle=white,
+ underlay={\begin{tcbclipinterior}\fill[fill=tcbcolframe!33]($(interior.south west)$) rectangle node[rotate=90,font=\tiny\sffamily,tcbcolframe!75!black]{\scalebox{0.55}[0.75]{\textbf{MPM}}} ($(interior.north west)+(5pt,0pt)$);\end{tcbclipinterior}}
+ }
+}
+
+\tcbset{cevignettegraph/.style={%
+ cevignettes,left=6pt,coltitle=white,
+ underlay={\begin{tcbclipinterior}\fill[fill=tcbcolframe!33]($(interior.south west)$) rectangle node[rotate=90,font=\tiny\sffamily,tcbcolframe!75!black]{\scalebox{0.55}[0.75]{\textbf{GRPH}}} ($(interior.north west)+(5pt,0pt)$);\end{tcbclipinterior}}
+ }
+}
+
+\tcbset{cevignetteshell/.style={%
+ cevignettes,left=6pt,coltitle=white,
+ underlay={\begin{tcbclipinterior}\fill[fill=tcbcolframe!33]($(interior.south west)$) rectangle node[rotate=90,font=\tiny\sffamily,tcbcolframe!75!black] {\scalebox{0.5}[0.75]{\textbf{SHELL}}} ($(interior.north west)+(5pt,0pt)$);\end{tcbclipinterior}}
+ }
+}
+
+\tcbset{cevignettelatex/.style={%
+ cevignettes,left=6pt,coltitle=white,
+ underlay={\begin{tcbclipinterior}\fill[fill=tcbcolframe!33]($(interior.south west)$) rectangle node[rotate=90,font=\tiny\sffamily,tcbcolframe!75!black]{\scalebox{0.55}[0.75]{\textbf{\LaTeX}}} ($(interior.north west)+(5pt,0pt)$);\end{tcbclipinterior}}
+ }
+}
+
+\tcbset{cevignettexcas/.style={%
+ cevignettes,left=6pt,coltitle=white,colback=white,%
+ underlay={\begin{tcbclipinterior}\fill[fill=tcbcolframe!33]($(interior.south west)$) rectangle node[rotate=90,font=\tiny\sffamily,tcbcolframe!75!black]{\scalebox{0.55}[0.75]{\textbf{XCAS}}} ($(interior.north west)+(5pt,0pt)$);\end{tcbclipinterior}}
+ }
+}
+
+\defKV[cevignette]{Type=\def\cevignettetype{#1},Couleur=\def\cevignettecolor{#1},Police=\def\cevignettefont{#1}}
+\setKVdefault[cevignette]{Type={},Couleur={darkgray},Police=\footnotesize}
+
+\NewDocumentCommand\AffVignette{ s O{} m }{%
+ \restoreKV[cevignette]%
+ \setKV[cevignette]{#2}%
+ \IfStrEqCase{\cevignettetype}{%
+ {}{\tcbox[colframe=\cevignettecolor,fontupper={\cevignettefont},cevignettes]{\IfBooleanTF{#1}{\NoAutoSpacing}{}#3}}%
+ {algo}{\tcbox[colframe=\cevignettecolor,fontupper={\cevignettefont\ttfamily},cevignettealgo]{\IfBooleanTF{#1}{\NoAutoSpacing}{}#3}}%
+ {py}{\tcbox[colframe=\cevignettecolor,fontupper={\cevignettefont\ttfamily},cevignettepy]{\IfBooleanTF{#1}{\NoAutoSpacing}{}#3}}%
+ {pypit}{\tcbox[colframe=\cevignettecolor,fontupper={\cevignettefont\ttfamily},cevignettepy]{\piton{#3}}}%
+ {pyl}{\tcbox[colframe=\cevignettecolor,fontupper={\cevignettefont\ttfamily},cevignettepy]{\piton{\py{#3}}}}%
+ {mpm}{\tcbox[colframe=\cevignettecolor,fontupper={\cevignettefont},cevignetteMPM]{\IfBooleanTF{#1}{\NoAutoSpacing}{}#3}}%
+ {grph}{\tcbox[colframe=\cevignettecolor,fontupper={\cevignettefont},cevignettegraph]{\IfBooleanTF{#1}{\NoAutoSpacing}{}#3}}%
+ {xcas}{\tcbox[colframe=\cevignettecolor,fontupper={\cevignettefont},cevignettexcas]{\IfBooleanTF{#1}{\NoAutoSpacing}{}#3}}%
+ {shell}{\tcbox[colframe=\cevignettecolor,fontupper={\cevignettefont\ttfamily},cevignetteshell]{\IfBooleanTF{#1}{\NoAutoSpacing}{}#3}}%
+ {tex}{\tcbox[colframe=\cevignettecolor,fontupper={\cevignettefont\ttfamily},cevignettelatex]{\IfBooleanTF{#1}{\NoAutoSpacing}{}#3}}%
+ {sheet}{\tcbox[colframe=\cevignettecolor,fontupper={\cevignettefont},cevignettetableur]{\IfBooleanTF{#1}{\NoAutoSpacing}{}#3}}%
+ }\relax%
+}
+
+%====DisplaySkip [en]
+\defKV[DisplaySkip]{%
+ aboveds=\def\ceabovedisplayskip{#1},%
+ abovedsshort=\def\ceabovedisplayskipshort{#1},%
+ belowdds=\def\cebelowdisplayskip{#1},%
+ belowdsshort=\def\cebelowdisplayskipshort{#1},%
+ global=\def\globaldisplayskip{#1}
+}
+
+\setKVdefault[DisplaySkip]{%
+ aboveds={12pt plus 3pt minus 9pt},%
+ abovedsshort={0pt plus 3pt},%
+ belowdds={12pt plus 3pt minus 9pt},%
+ belowdsshort={7pt plus 3pt minus 4pt},%
+ global={},%
+ shrink=false
+}
+\NewDocumentCommand\ChangeSpacingDisplaySkip{ O{} }{%
+ \restoreKV[DisplaySkip]%
+ \setKV[DisplaySkip]{#1}%
+ \ifboolKV[DisplaySkip]{shrink}%
+ {%
+ \AtBeginDocument{%
+ \abovedisplayskip=0.33\baselineskip
+ \abovedisplayshortskip=0.33\baselineskip
+ \belowdisplayskip=0.33\baselineskip
+ \belowdisplayshortskip=0.33\baselineskip
+ }
+ }%
+ {%
+ \IfStrEq{\globaldisplayskip}{}%
+ {%
+ \AtBeginDocument{%
+ \abovedisplayskip=\ceabovedisplayskip
+ \abovedisplayshortskip=\ceabovedisplayskipshort
+ \belowdisplayskip=\cebelowdisplayskip
+ \belowdisplayshortskip=\cebelowdisplayskipshort
+ }
+ }%
+ {%
+ \AtBeginDocument{%
+ \abovedisplayskip=\globaldisplayskip
+ \abovedisplayshortskip=\globaldisplayskip
+ \belowdisplayskip=\globaldisplayskip
+ \belowdisplayshortskip=\globaldisplayskip
+ }
+ }%
+ }%
+}
+
+%====DisplaySkip [fr]
+\defKV[DisplaySkipFr]{%
+ Avant=\def\ceabovedisplayskip{#1},%
+ AvantS=\def\ceabovedisplayskipshort{#1},%
+ Apres=\def\cebelowdisplayskip{#1},%
+ ApresS=\def\cebelowdisplayskipshort{#1},%
+ Global=\def\globaldisplayskip{#1}
+}
+
+\setKVdefault[DisplaySkipFr]{%
+ Avant={12pt plus 3pt minus 9pt},%
+ AvantS={0pt plus 3pt},%
+ Apres={12pt plus 3pt minus 9pt},%
+ ApresS={7pt plus 3pt minus 4pt},%
+ Global={},%
+ Dense=false
+}
+\NewDocumentCommand\ChangerDisplaySkip{ O{} }{%
+ \restoreKV[DisplaySkipFr]%
+ \setKV[DisplaySkipFr]{#1}%
+ \ifboolKV[DisplaySkipFr]{Dense}%
+ {%
+ \AtBeginDocument{%
+ \abovedisplayskip=0.33\baselineskip
+ \abovedisplayshortskip=0.33\baselineskip
+ \belowdisplayskip=0.33\baselineskip
+ \belowdisplayshortskip=0.33\baselineskip
+ }
+ }%
+ {%
+ \IfStrEq{\globaldisplayskip}{}%
+ {%
+ \AtBeginDocument{%
+ \abovedisplayskip=\ceabovedisplayskip
+ \abovedisplayshortskip=\ceabovedisplayskipshort
+ \belowdisplayskip=\cebelowdisplayskip
+ \belowdisplayshortskip=\cebelowdisplayskipshort
+ }
+ }%
+ {%
+ \AtBeginDocument{%
+ \abovedisplayskip=\globaldisplayskip
+ \abovedisplayshortskip=\globaldisplayskip
+ \belowdisplayskip=\globaldisplayskip
+ \belowdisplayshortskip=\globaldisplayskip
+ }
+ }%
+ }%
+}
+
+%====Patchs pas-tableur
+\if@pastableur
+
+\RequirePackage{pas-tableur}
+
+\renewcommand{\pastableur@grid}[4] % #1 : width, #2 : name, #3 : numline, #4 : coord.
+ {%
+ \node[celempty,below,minimum height=\line@height,minimum width=#1] (cell#2-#3) at (#4) {};%
+ \draw[graySepCell] ($(cell#2-#3.south west)+(0.2pt,0)$) -- (cell#2-#3.south east) -- ($(cell#2-#3.north east)+(0,-0.2pt)$);%
+ }
+
+\renewcommand{\pastab@draw@cell}[5]
+% #1 : \first@width, #2 : \first@name, #3 : 0=colonne1 / 1=autres colonnes /
+% 2 = ligne 1, #4 : coord., #5 : contenu
+{%
+ \ifnum#3=0%
+ \tikzstyle{cellstyle} = [celhead,minimum width={#1},minimum height=\line@height]%
+ \def\pastableur@coord{(0,0)}%
+ \else%
+ \ifnum#3=1%
+ \tikzstyle{cellstyle} = [celhead,right,minimum width={#1},minimum height=\line@height]%
+ \else
+ \ifnum#3=2%
+ \tikzstyle{cellstyle} = [below left,celhead,minimum width={#1},minimum height=\line@height]
+ \else%
+ \tikzstyle{cellstryle} = [below,celhead,minimum width={#1},minimum height=\line@height]
+ \fi%
+ \fi%
+ \def\pastableur@coord{(#4)}%
+ \fi%
+ \node[cellstyle] (#2) at \pastableur@coord {\helvbx#5};%
+ \fill[grayBottomCell] (#2.south west) rectangle (#2.north east) ;%
+ \fill[grayTopCell] (#2.north west) rectangle ($0.5*(#2.south east)+0.5*(#2.north east)$) ;%
+ \node[minimum width={#1},minimum height=\line@height,cellstyle] at \pastableur@coord {\helvbx#5};%
+}
+
+\NewDocumentCommand\celcouleur{ O{graySepCell!50} m }{%OK
+ \draw[draw=none,fill=#1] ($(cell#2.south west)+(0.2pt,0.2pt)$) rectangle ($(cell#2.north east) + (-0.2pt,-0.2pt)$) ;%
+}
+
+\defKV[celparam]{align=\def\pastableurfusalign{#1},width=\def\pastableurfuswidth{#1}}
+\setKVdefault[celparam]{align=left,width={\col@width}}
+
+\NewDocumentCommand\celfusion{ O{} m m m }{%OK
+ \restoreKV[celparam]%
+ \setKV[celparam]{#1}%
+ \IfStrEq{#4}{}%
+ {%
+ \draw[draw=none,fill=white] ($(cell#2.south west)+(0.2pt,0.2pt)$) rectangle ($(cell#3.north east) + (-0.2pt,-0.2pt)$);
+ }%
+ {%
+ \draw[draw=none,fill=white] ($(cell#2.south west)+(0.2pt,0.2pt)$) rectangle ($(cell#3.north east) + (-0.2pt,-0.2pt)$) node[midway,text width=\dimexpr\pastableurfuswidth-4pt,align=\pastableurfusalign] {#4};
+ }%
+}
+
+\NewDocumentCommand\celnumbreak{ m m m }{%
+ \def\numpointilles{#1}
+ \xdef\numavant{\inteval{\numpointilles-1}}%
+ \def\numdebut{#2}\def\numfin{#3}
+ \foreach \num@line [remember=\num@line as \lastnum (initially \numavant)] in {\numpointilles}
+ {%
+ \pastab@draw@cell{\numline@width}{numline\num@line}{3}{numline\lastnum.south east}{\dots}%
+ }%
+ \foreach \num@line [remember=\num@line as \lastnum (initially \numpointilles)] in {\numdebut,\numfin}
+ {%
+ \pastab@draw@cell{\numline@width}{numline\num@line}{3}{numline\lastnum.south east}{\num@line}%
+ }%
+}
+
+\NewDocumentCommand\lignetxt{ s O{} m D<>{1} m }{%3=num ligne,%5=liste
+ \IfBooleanTF{#1}%
+ {
+ \foreach \x [count=\i] in {#5}
+ {%
+ \xdef\j{\inteval{\i+(#4-1)}}%
+ \StrChar{ABCDEFGHIJKLMNOPQRSTUVWXYZ}{\j}[\iltr]%
+ \IfEq{\x}{}{}{\celtxt*[#2]{\iltr}{#3}{\x}}%
+ }%
+ }%
+ {%
+ \foreach \x [count=\i] in {#5}
+ {%
+ \xdef\j{\inteval{\i+(#4-1)}}%
+ \StrChar{ABCDEFGHIJKLMNOPQRSTUVWXYZ}{\j}[\iltr]%
+ \IfEq{\x}{}{}{\celtxt[#2]{\iltr}{#3}{\x}}%
+ }%
+ }%
+}
+
+\NewDocumentCommand\colonnetxt{ s O{} m D<>{1} m }{%3=lettre colonne,%5=liste
+ \IfBooleanTF{#1}%
+ {
+ \foreach \x [count=\i] in {#5}
+ {%
+ \xdef\j{\inteval{\i+(#4-1)}}
+ \IfStrEq{\x}{}{}{\celtxt*[#2]{#3}{\j}{\x}}%
+ }%
+ }%
+ {%
+ \foreach \x [count=\i] in {#5}
+ {%
+ \xdef\j{\inteval{\i+(#4-1)}}
+ \IfStrEq{\x}{}{}{\celtxt[#2]{#3}{\j}{\x}}%
+ }%
+ }%
+}
+
+\fi
\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/easybook/easybook.dtx b/macros/latex/contrib/easybook/easybook.dtx
index 2a60d8894f..511b24fa08 100644
--- a/macros/latex/contrib/easybook/easybook.dtx
+++ b/macros/latex/contrib/easybook/easybook.dtx
@@ -14,8 +14,7 @@
% This work has the LPPL maintenance status `maintained'.
%<*class>
\NeedsTeXFormat{LaTeX2e}[2021/11/15]
-\RequirePackage{l3keys2e}
-\ProvidesExplClass{easybook}{2024/04/26}{2024bb}
+\ProvidesExplClass{easybook}{2024/05/24}{2024bu}
{Easily typesetting Chinese theses or books}
\bool_new:N \l__eb_compile_draft_bool
@@ -29,7 +28,7 @@
\keys_define:nn { easybook }
{
newline .code:n = \bool_set_true:N \l__eb_title_newline_bool,
- scheme .code:n = \eb_put_ctexbook:n { scheme = #1 },
+ scheme .code:n = \eb_put_ctexbook:n { scheme = {#1} },
enmode .meta:n = { newline,scheme = plain },
font .choices:nn =
{ noto,times,times*,ebgaramond,libertine,palatino,auto }
@@ -47,7 +46,12 @@
unknown .code:n = \clist_gput_right:NV \g__eb_doc_options_clist \CurrentOption
}
-\ProcessKeysOptions{easybook}
+\cs_if_exist:NTF \ProcessKeyOptions
+ { \ProcessKeyOptions[easybook] }
+ {
+ \RequirePackage{l3keys2e}
+ \ProcessKeysOptions{easybook}
+ }
\PassOptionsToPackage{no-math,quiet,CJKmath}{xeCJK}
\eb_put_ctexbook:V \g__eb_doc_options_clist
\LoadClass[UTF8]{ctexbook}
@@ -81,7 +85,7 @@
{ \eb_set_family:xnn { \CJKsfdefault } {#2} {#1} }
\cs_new_protected:Npn \eb_setCJKmonofont:nn #1#2
{ \eb_set_family:xnn { \CJKttdefault } {#2} {#1} }
-\eb_seq_map_inline:nn
+\clist_map_inline:nn
{ main,sans,mono,CJKmain,CJKsans,CJKmono }
{
\exp_args:Nc \RenewDocumentCommand { set#1font }{O{}mO{}}
@@ -296,8 +300,8 @@
%</class>
%<*package>
\NeedsTeXFormat{LaTeX2e}[2021/11/15]
-\RequirePackage{l3keys2e,etoolbox}
-\ProvidesExplPackage{easybase}{2024/04/26}{2024bb}
+\RequirePackage{etoolbox}
+\ProvidesExplPackage{easybase}{2024/05/24}{2024bu}
{Easily typesetting Chinese theses or books}
\cs_generate_variant:Nn \dim_set:Nn { NV }
@@ -314,11 +318,6 @@
\cs_set_protected:Npn \ctex_define:nn #1
{ \keys_define:nn { ctex/#1 } }
-\cs_new_protected:Npn \eb_seq_map_inline:nn #1#2
- {
- \seq_set_from_clist:Nn \l_tmpa_seq {#1}
- \seq_map_inline:Nn \l_tmpa_seq {#2}
- }
\cs_new_protected:Npn \eb_patch_cmd:Nnn #1#2#3
{
\ctex_patch_cmd_once:NnnnTF #1 { } {#2} {#3}
@@ -330,7 +329,7 @@
{ \AddToHook{cmd/#1/after}{#2} }
\cs_new_protected:Npn \eb_at_begin_environment:nn #1#2
{
- \eb_seq_map_inline:nn {#1}
+ \clist_map_inline:nn {#1}
{ \AtBeginEnvironment{##1}{#2} }
}
\cs_new_protected:Npn \eb_at_end_preamble:n
@@ -356,7 +355,7 @@
\RenewDocumentCommand{\usepackage}{O{}mO{}}
{
\PassOptionsToPackage{#1}{#2}
- \eb_seq_map_inline:nn {#2}
+ \clist_map_inline:nn {#2}
{
\eb_if_package_loaded:nnF {##1} {#1}
{ \eb@usepackage@save{##1}[#3] }
@@ -379,7 +378,7 @@
\int_compare:nTF { \clist_count:n {#1} <= 1 }
{ \RequirePackage }
{
- \eb_seq_map_inline:nn {#1}
+ \clist_map_inline:nn {#1}
{ \eb_match_load_package:n {##1} }
}
}
@@ -421,7 +420,12 @@
\PassOptionsToPackage{list = off}{bicaption}
\PassOptionsToPackage{svgnames}{xcolor}
\PassOptionsToPackage{many}{tcolorbox}
-\ProcessKeysOptions{easybase}
+\cs_if_exist:NTF \ProcessKeyOptions
+ { \ProcessKeyOptions[easybase] }
+ {
+ \RequirePackage{l3keys2e}
+ \ProcessKeysOptions{easybase}
+ }
\PassOptionsToPackage{\g__eb_ctex_options_clist}{ctex}
\IfClassLoadedTF{ctexbook}{}
{
@@ -431,12 +435,15 @@
{\RequirePackage[heading]{ctex}}
}
}
+\ctex_disable_package:n { nccfoots }
+\ctex_disable_package:n { tocloft }
+\ctex_disable_package:n { titlesec }
\seq_set_from_clist:Nn \l__eb_module_paths_seq
{
tools,font,spread,
bib,thmt,toc,
- hdr,ref,geo,float
+ hdr,float,ref,geo
}
\seq_map_inline:Nn \l__eb_module_paths_seq
{
@@ -450,7 +457,7 @@
{\ctex_set:n {#2}}
}
\bool_until_do:nn
- { \int_compare_p:nNn { \seq_count:N \l__eb_module_paths_seq } < { 8 } }
+ { \int_compare_p:nNn { \seq_count:N \l__eb_module_paths_seq } < { 9 } }
{ \seq_pop_right:NN \l__eb_module_paths_seq \l_tmpa_tl }
\seq_map_inline:Nn \l__eb_module_paths_seq
{
@@ -602,7 +609,7 @@
\booltrue{@mainmatter}
\pagenumbering{arabic}
}
-\eb_seq_map_inline:nn
+\clist_map_inline:nn
{ chapter,section,subsection }
{
\exp_args:Nc \NewDocumentCommand { eb@mark@#1@label@layout }
@@ -817,7 +824,7 @@
\cs_new_protected:Npn \eb_fnmarktext_short_label_set:Nn #1#2
{
\tl_set:Nn \l__eb_fnmarktext_short_tokens_tl {#2}
- \eb_seq_map_inline:nn
+ \clist_map_inline:nn
{ A,a,1,I,i,c,s }
{
\regex_match:nnT {##1} {#2}
@@ -889,7 +896,7 @@
fntext-code .initial:n = { ,\tl_if_eq:NnF \l__eb_fntext_position_tl { super } { ~ } },
fnmarktext-format .code:n = \eb_fnboth_format_set:nn {#1} { marktext },
fncustom-format .code:n = \eb_fnboth_format_set:nn {#1} { custom },
- fnboth-format .meta:n = { fnmarktext-format = #1,fncustom-format = #1 },
+ fnboth-format .meta:n = { fnmarktext-format = {#1},fncustom-format = {#1} },
footnotetype .multichoices:nn =
{ plain,hang,bottom,para,flush }
{ \eb_footnote_value_handle:n {#1} },
@@ -912,7 +919,7 @@
{ \eb_fnmarktext_normal_label_set:Nn \thefootnote {#1} },
fntext-num .value_required:n = true,
fntext-num/unknown .code:n = \eb_fnmarktext_short_label_set:Nn \thefootnote {#1},
- fnmarktext-num .meta:n = { fntext-num = #1,fnmark-num = #1 },
+ fnmarktext-num .meta:n = { fntext-num = {#1},fnmark-num = {#1} },
fnmarktext-num .initial:n = plain,
unknown .code:n = \eb_msg_deprecated_option:n { hdr }
}
@@ -1034,7 +1041,7 @@
\l__eb_fnpara_format_tl{#1}
\tl_if_eq:NnT \l__eb_footnote_value_tl { hang } { \par }
}
-\eb_seq_map_inline:nn { \@footnotetext,\@mpfootnotetext }
+\clist_map_inline:nn { \@footnotetext,\@mpfootnotetext }
{
\eb_patch_cmd:Nnn #1
{ \reset@font }
@@ -1045,6 +1052,7 @@
}
\cs_set_eq:NN \eb@@makefntext \@makefntext
\cs_set_eq:NN \eb@@footnotetext \@footnotetext
+\cs_set_eq:NN \eb@@mpfootnotetext \@mpfootnotetext
\ctex_at_end_package:nn { footmisc }
{
\eb_package_date_check:nn { footmisc } { 2022/02/10 }
@@ -1068,7 +1076,11 @@
hang,~symbol,~perpage,~marginal~or~flushmargin \\
options~of~'footmisc'~package.
}
-
+\ctex_at_end_package:nn { setspace }
+ {
+ \cs_set_eq:NN \@footnotetext \eb@@footnotetext
+ \cs_set_eq:NN \@mpfootnotetext \eb@@mpfootnotetext
+ }
\cs_set_protected:Npn \footref #1
{
\group_begin:
@@ -1145,18 +1157,17 @@
\bool_set_true:N \l__eb_normal_footnote_bool
\bool_new:N \l__eb_fnmarktext_format_match_bool
\bool_new:N \l__eb_fncustom_format_match_bool
+\cs_new:Npn \eb_fnmarktext_format_clear:n #1
+ {
+ \bool_if:cTF { l__eb_fn#1_format_match_bool }
+ { \tl_clear:N \l__eb_fnmarktext_format_tl }
+ { \spbset{spcmd = { }} }
+ }
\cs_new_protected:Npn \eb_fnmarktext_format_initial:
{
\bool_if:NTF \l__eb_normal_footnote_bool
- {
- \bool_if:NT \l__eb_fnmarktext_format_match_bool
- { \tl_clear:N \l__eb_fnmarktext_format_tl }
- }
- {
- \bool_if:NT \l__eb_fncustom_format_match_bool
- { \tl_clear:N \l__eb_fnmarktext_format_tl }
- }
- \bool_if:NF \l__eb_fnmarktext_format_match_bool { \spbset{spcmd = { }} }
+ { \eb_fnmarktext_format_clear:n { marktext } }
+ { \eb_fnmarktext_format_clear:n { custom } }
\eb@font@footnote
}
\cs_new_protected:Npn \defupfntmark #1
@@ -1283,7 +1294,7 @@
{ \use:c { CTEX@#1@tocline }{#1}{#2} }
\group_end:
}
-\cs_new_protected:Npn \RegisterBititle #1
+\cs_new_protected:Npn \eb@register@bititle #1
{
\exp_args:Nc \NewDocumentCommand { bi#1 }{sO{##3}mm}
{
@@ -1292,7 +1303,6 @@
\use:c {#1}*{\phantomsection ##3}
\CTEX@addtocline{#1}{##2}
\tl_if_empty:oF {##4} { \CTEX@addbitocline{#1}{##4} }
- \tl_set:Nn \l__eb__bitoc_mark_title_level_tl {#1}
\use:c { #1mark }{##2}
}{
\stepcounter{bi#1}
@@ -1301,33 +1311,54 @@
}
}
}
-\clist_map_function:nN
- { chapter,section,subsection }
- \RegisterBititle
+\cs_new_protected:Npn \RegisterBititle #1
+ {
+ \clist_map_function:nN {#1}
+ \eb@register@bititle
+ }
+\RegisterBititle{chapter,section,subsection}
\eb_preto_cmd:nn { @chapter }
{
\skip_if_eq:nnF { \eb@toc@lol@skip } { \c_zero_skip }
{ \addtocontents{lol}{\protect\addvspace{\skip_use:N \eb@toc@lol@skip}} }
}
-\cs_new_protected:Npn \NewTitleCommand #1#2
- {
- \newcounter{#1}
- \cs_set_eq:cN { #1mark } \use_none:n
+\cs_new_protected:Npn \eb_title_base_set_eq:nn #1#2
+ {
+ \tl_set_eq:cc { CTEX@#2@beforeskip } { CTEX@#1@beforeskip }
+ \tl_set_eq:cc { CTEX@#2@afterskip } { CTEX@#1@afterskip }
+ \bool_set_eq:cc { CTEX@#2@numbering } { CTEX@#1@numbering }
+ \bool_set_eq:cc { CTEX@#2@fixskip } { CTEX@#1@fixskip }
+ \bool_set_eq:cc { CTEX@#2@hang } { CTEX@#1@hang }
+ \bool_set_eq:cc { CTEX@#2@runin } { CTEX@#1@runin }
+ \cs_set_eq:cc { CTEX@#2@tocline } { CTEX@#1@tocline }
+ \tl_set_eq:cc { CTEX@#2@break } { CTEX@#1@break }
+ \tl_set_eq:cc { CTEX@#2@format } { CTEX@#1@format }
+ \tl_set_eq:cc { CTEX@#2@nameformat } { CTEX@#1@nameformat }
+ \tl_set_eq:cc { CTEX@#2@numberformat } { CTEX@#1@numberformat }
+ \tl_set_eq:cc { CTEX@#2@titleformat } { CTEX@#1@titleformat }
+ \tl_set_eq:cc { CTEX@#2@aftername } { CTEX@#1@aftername }
+ \tl_set_eq:cc { CTEX@#2@aftertitle } { CTEX@#1@aftertitle }
+ }
+\NewDocumentCommand{\NewTitleCommand}{omm}
+ {
+ \newcounter{#2}
+ \cs_set_eq:cN { #2mark } \use_none:n
\tl_clear:N \l__ctex_tmp_tl
- \__ctex_initial_heading:n {#1}
- \__ctex_def_heading_keys:n {#1}
+ \__ctex_initial_heading:n {#2}
+ \__ctex_def_heading_keys:n {#2}
\exp_args:No \ctex_define:n { \l__ctex_tmp_tl }
- \cs_gset_protected:cpx {#1}
+ \cs_gset_protected:cpx {#2}
{
- \exp_not:N \@startsection{#1}{#2}
- {\exp_not:c { CTEX@#1@indent }}
- {\exp_not:c { CTEX@#1@beforeskip }}
- {\exp_not:c { CTEX@#1@afterskip }}
- {\exp_not:N \normalfont\exp_not:c { CTEX@#1@format }}
+ \exp_not:N \@startsection{#2}{#3}
+ {\exp_not:c { CTEX@#2@indent }}
+ {\exp_not:c { CTEX@#2@beforeskip }}
+ {\exp_not:c { CTEX@#2@afterskip }}
+ {\exp_not:N \normalfont\exp_not:c { CTEX@#2@format }}
}
- \cs_new:cpn { CTEX@#1@tocline } ##1##2
+ \cs_new:cpn { CTEX@#2@tocline } ##1##2
{ \CTEXnumberline{##1}##2 }
- \exp_args:Nc \providecommand { toclevel@#1 }{#2}
+ \exp_args:Nc \providecommand { toclevel@#2 }{#3}
+ \IfValueT{#1}{\eb_title_base_set_eq:nn {#1} {#2}}
}
\NewDocumentCommand{\NewTitleEntryCommand}{O{toc}m}
{
@@ -1344,18 +1375,18 @@
{
hyphen-figure .tl_set:N = \l__eb_hyphen_figure_tl,
hyphen-table .tl_set:N = \l__eb_hyphen_table_tl,
- hyphen-listing .tl_set:N = \l__eb_hyphen_lstlisting_tl,
+ hyphen-listing .tl_set:N = \l__eb_hyphen_listing_tl,
hyphen-equation .tl_set:N = \l__eb_hyphen_equation_tl,
hyphen-every .meta:n =
{
- hyphen-figure = #1,hyphen-table = #1,
- hyphen-listing = #1,hyphen-equation = #1
+ hyphen-figure = {#1},hyphen-table = {#1},
+ hyphen-listing = {#1},hyphen-equation = {#1}
},
hyphen-every .initial:n = .,
unknown .code:n = \eb_msg_deprecated_option:n { tools }
}
-\eb_seq_map_inline:nn
- { figure,table,lstlisting,equation }
+\clist_map_inline:nn
+ { figure,table,listing,equation }
{
\cs_set:cpn { the#1 }
{
@@ -1412,21 +1443,24 @@
\bool_set_true:N \l__eb_toc_plan_bi_bool
},
plan .initial:n = cn,
- columns .meta:n = { multoc = #1 },
+ columns .meta:n = { multoc = {#1} },
title .code:n = \eb_assign_toc_title:n {#1},
bilist .code:n =
{
\tl_gset:Nn \g__eb_bilist_permute_value_tl {#1}
\str_if_eq:nnTF {#1} { mix }
{
- \eb_preto_cmd:nn { CTEX@addtocline }
- { \addtocontents{toc}{\boolfalse{bitoc}} }
- \eb_preto_cmd:nn { CTEX@addbitocline }
- { \addtocontents{toc}{\booltrue{bitoc}} }
+ \AddToHook{cmd/CTEX@addtocline/before}[bitoc]
+ {\addtocontents{toc}{\boolfalse{bitoc}}}
+ \AddToHook{cmd/CTEX@addbitocline/before}[bitoc]
+ {\addtocontents{toc}{\booltrue{bitoc}}}
}
{
- \RemoveFromHook{cmd/CTEX@addtocline/before}
- \RemoveFromHook{cmd/CTEX@addbitocline/before}
+ \IfHookEmptyTF{cmd/CTEX@addtocline/before}{}
+ {
+ \RemoveFromHook{cmd/CTEX@addtocline/before}[bitoc]
+ \RemoveFromHook{cmd/CTEX@addbitocline/before}[bitoc]
+ }
}
},
name .tl_set:N = \l__eb_print_index_name_tl,
@@ -1582,11 +1616,8 @@
\tl_new:N \l__eb_toc_tmpb_tl
\cs_new_protected:Npn \eb_toc_format_initial:nn #1#2
{
- \exp_last_unbraced:Nx
- \use:n
+ \exp_last_unbraced:Nx \titlecontents
{
- \exp_not:N
- \titlecontents
\tl_use:N \l__eb_toc_tmpa_tl
\exp_not:n
{
@@ -1603,7 +1634,7 @@
\ctex_set:nn {#2}
{
tocformat = \IfBooleanT{#1}{\contentsmargin{0pt}},
- tocindent = 0em,
+ tocindent = 0pt,
tocrule = \IfBooleanTF{#1}{,~\thecontentspage}{\tocrule{$\cdot$}},
toclabel =
{
@@ -1617,7 +1648,21 @@
tocend = .
}
}
-\NewDocumentCommand{\RegisterTocName}{sm}
+\seq_new:N \l__eb_toc_every_include_name_seq
+\cs_new_protected:Npn \ExcludeEveryTocName #1
+ {
+ \clist_map_inline:nn {#1}
+ { \seq_remove_all:Nn \l__eb_toc_every_include_name_seq {##1} }
+ }
+\cs_new_protected:Npn \IncludeEveryTocName #1
+ {
+ \clist_map_inline:nn {#1}
+ {
+ \seq_put_right:Nn \l__eb_toc_every_include_name_seq {##1}
+ \seq_remove_duplicates:N \l__eb_toc_every_include_name_seq
+ }
+ }
+\cs_new_protected:Npn \eb@register@toc@name #1#2
{
\IfBooleanT{#1}
{
@@ -1629,48 +1674,42 @@
[\tl_use:c { l__eb_toc_#2_end_tl }]
}
}
+ \IncludeEveryTocName{#2}
\eb_toc_format_define:n {#2}
\eb_toc_format_initial:nn {#1} {#2}
\tl_clear:N \l__eb_toc_tmpa_tl
\tl_clear:N \l__eb_toc_tmpb_tl
}
-\seq_map_function:NN
-\c__ctex_headings_seq \RegisterTocName
-\eb_seq_map_inline:nn
+\NewDocumentCommand{\RegisterTocName}{sm}
{
- tocformat,tocformat+,tocformat~+,
- tocindent,tocrule,tocline,tocafter,between
+ \clist_map_inline:nn {#2}
+ { \eb@register@toc@name{#1}{##1} }
}
+\clist_set_from_seq:NN
+\c__ctex_headings_clist \c__ctex_headings_seq
+\exp_args:NV \RegisterTocName \c__ctex_headings_clist
+\ctex_define:n { float/unknown .code:n = \eb_msg_deprecated_option:n { float } }
+\cs_new_protected:Npn \eb@register@every@toc@option #1
{
- \ctex_define:n
+ \ctex_define:nn { toc }
{
- float/#1 .meta:n =
+ #1-every .code:n =
{
- figure/#1 = ##1,table/#1 = ##1,
- lstlisting/#1 = ##1
+ \seq_map_inline:Nn \l__eb_toc_every_include_name_seq
+ { \ctex_set:n { ####1/#1 = {##1} } }
}
}
}
-\eb_seq_map_inline:nn
- { tocafter,tocindent,tocrule }
+\cs_new_protected:Npn \RegisterEveryTocOption #1
{
- \ctex_define:nn { toc }
- {
- #1-every .code:n =
- {
- \ctex_set:n
- {
- part/#1 = ##1,chapter/#1 = ##1,
- section/#1 = ##1,subsection/#1 = ##1,
- float/#1 = ##1
- }
- }
- }
+ \clist_map_function:nN {#1}
+ \eb@register@every@toc@option
}
+\RegisterEveryTocOption{tocafter,tocindent,tocrule}
\NewDocumentCommand{\tocrule}{st-O{0.7pc}d()mO{}}
{
\normalsize\normalfont
- \titlerule*[#3]{\IfValueTF{#4}{\scalebox{#4}{#5}}{#5}}#6
+ \ttl@row@i[#3]{\IfValueTF{#4}{\scalebox{#4}{#5}}{#5}}#6
{
\IfBooleanF{#2}
{
@@ -1709,19 +1748,53 @@
\ifbool{@filesw}
{
\tl_if_exist:cF { tf@#1 }
- {\iow_new:c { tf@#1 }\iow_open:cn { tf@#1 } { \jobname.#1 }}
+ { \iow_new:c { tf@#1 }\iow_open:cn { tf@#1 } { \jobname.#1 } }
}
{}
}
\cs_set:Npn \@starttoc #1
{
\group_begin:
+ \makeatletter
\file_if_exist_input:n { \jobname.#1 }
\UseHookWithArguments{starttoc/after}{1}{#1}
\boolfalse{@nobreak}
\group_end:
}
-\AtEndDocument{\iow_now:Nn \@mainaux { \RemoveFromHook{starttoc/after}[aux] }}
+\AddToHook{enddocument/afterlastpage}
+ {
+ \IfHookEmptyTF{starttoc/after}{}
+ {\iow_now:Nn \@mainaux { \RemoveFromHook{starttoc/after}[aux] }}
+ }
+\cs_set_protected:Npn \AllotPartialExt #1#2
+ {
+ \tl_set:cn { ttl@partial#1 } {#2}
+ \AddToHookWithArguments{cmd/ttl@writepartial/before}
+ {\ttl@topartial{#1}{##1}{##2}}
+ }
+\AllotPartialExt{lol}{pll}
+
+\cs_new_protected:Npn \RegisterTitleIfname #1
+ {
+ \clist_map_function:nN {#1}
+ \eb@register@title@ifname
+ }
+\cs_new_protected:Npn \eb@register@title@ifname #1
+ {
+ \AddToHookWithArguments{cmd/addcontentsline/before}[title/ifname/#1]
+ {
+ \str_if_eq:nnT {##1} {#1}
+ {
+ \addtocontents{##1}
+ {\CTEXifname{\CTEX@ifnametrue}{\CTEX@ifnamefalse}}
+ }
+ }
+ \AddToHook{file/\jobname.#1/before}
+ {\cs_set_eq:NN \eb@title@ifname@resume \CTEXifname}
+ \AddToHook{file/\jobname.#1/after}
+ {\cs_set_eq:NN \CTEXifname \eb@title@ifname@resume}
+ }
+\RegisterTitleIfname{toc}
\cs_set_eq:NN \eb@ctexsetii \ctex_set:nn
\cs_new_protected:Npn \SetTocStyle #1#2#3
@@ -1743,21 +1816,21 @@
part =
{
tocformat = \addvspace{1pc}\sffamily\large,
- tocindent = 0em,
+ tocindent = 0pt,
tocrule = \tocrule{}[\bfseries],
tocline = \CTEXnumberline{#1}#2
},
chapter =
{
tocformat = \addvspace{1pc}\sffamily,
- tocindent = 0em,
+ tocindent = 0pt,
tocrule = \tocrule{$\cdot$}[\bfseries],
tocline = \CTEXnumberline{#1}#2
},
section =
{
tocformat = \bool_if:NF \l__eb_class_mode_book_bool { \sffamily },
- tocindent = \bool_if:NTF \l__eb_class_mode_book_bool { 1.5em } { 0em },
+ tocindent = \bool_if:NTF \l__eb_class_mode_book_bool { 1.5em } { 0pt },
tocrule =
{
\bool_if:NTF \l__eb_class_mode_book_bool
@@ -1794,7 +1867,7 @@
binumber .initial:n = \arabic{chapter}
}
\cs_new_protected:Npn \eb_counter_zero:n #1
- { \eb_seq_map_inline:nn {#1} { \setcounter{##1}{0} } }
+ { \clist_map_inline:nn {#1} { \setcounter{##1}{0} } }
\RenewDocumentCommand{\appendix}
{O{Appendix\space}D(){\Alph{chapter}}}
{
@@ -1834,8 +1907,8 @@
caption-listing .tl_set:N = \l__eb_font_caption_listing_tl,
caption-every .meta:n =
{
- caption-table = #1,caption-figure = #1,
- caption-listing = #1
+ caption-table = {#1},caption-figure = {#1},
+ caption-listing = {#1}
},
caption-every .initial:n = \sffamily\small,
footnote .tl_set:N = \eb@font@footnote,
@@ -1865,18 +1938,14 @@
{ \tl_put_right:Nn \marginfont {#2} }
}
}
+\cs_set_eq:NN \addtosubfont \ebaddtofont
+
\ctex_define:nn { spread }
{
line .code:n = \setspread{#1},
- line .initial:n =
- {
- \fp_compare:nNnTF { \l__ctex_line_spread_fp } = { 1.3 }
- { 1.354 }
- { \fp_use:N \l__ctex_line_spread_fp }
- },
table .fp_set:N = \l__eb_spread_table_fp,
- table .initial:n = 1.354,
- math .fp_set:N = \l__eb_spread_math_fp,
+ table .initial:n = 1.2,
+ math .tl_set:N = \eb@spread@math,
math .initial:n = 1.2,
footnote .code:n =
{
@@ -1893,17 +1962,17 @@
caption-listing .fp_set:N = \l__eb_spread_caption_listing_fp,
caption-every .meta:n =
{
- caption-table = #1,caption-figure = #1,
- caption-listing = #1
+ caption-table = {#1},caption-figure = {#1},
+ caption-listing = {#1}
},
caption-every .initial:n = 1.2,
every .meta:n =
{
- line = #1,table = #1,math = #1,
- caption-every = #1,footnote = #1
+ line = {#1},table = {#1},math = {#1},
+ caption-every = {#1},footnote = {#1}
},
abovedisplayskip .code:n =
- {\AfterPreamble{\skip_set:Nn \abovedisplayskip {#1}}},
+ { \AfterPreamble{\skip_set:Nn \abovedisplayskip {#1}} },
abovedisplayskip .initial:n = 0.5ex plus .1ex minus .1ex,
belowdisplayskip .code:n =
{
@@ -1916,10 +1985,15 @@
belowdisplayskip .initial:n = 0.5ex plus .1ex minus .1ex,
unknown .code:n = \eb_msg_deprecated_option:n { spread }
}
-\AfterPreamble
- {\skip_set:Nn \abovedisplayshortskip { 0ex plus .1ex }}
+\tl_if_eq:NnT \l__ctex_scheme_tl { chinese }
+ {
+ \fp_compare:nNnTF { \l__ctex_line_spread_fp } = { 1.3 }
+ { \ctex_set:nn { spread } { line = 1.354,table = 1.354 } }
+ { \ctex_set:nn { spread } { line = \fp_use:N \l__ctex_line_spread_fp } }
+ }
+\AfterPreamble{\skip_set:Nn \abovedisplayshortskip { 0ex plus .1ex }}
-\eb_seq_map_inline:nn
+\clist_map_inline:nn
{ table,figure,listing }
{
\DeclareCaptionFont{eb@#1@font}
@@ -1994,7 +2068,7 @@
}{}
\cs_new_protected:Npn \eb_enumitem_label_set:nn #1#2
{ \SetEnumitemValue{label}{#1}{\color{ctex@emph}#2} }
-\eb_seq_map_inline:nn
+\clist_map_inline:nn
{
{ bullet } { \textbullet },
{ endash } { \normalfont\bfseries\textendash },
@@ -2017,7 +2091,7 @@
\setlist[enumerate,3]{label = roman,ref = enumiii}
\setlist[description]{font = sf,style = standard}
\newlist{eb@eqcomp@list}{description}{1}
-\setlist[eb@eqcomp@list]{nosep,labelsep = 0em}
+\setlist[eb@eqcomp@list]{nosep,labelsep = 0pt}
\cs_new:Npn \seteqcomplist #1 { \setlist*[eb@eqcomp@list]{#1} }
\keys_define:nn { eb/eqcomp }
@@ -2025,7 +2099,7 @@
width .dim_set:N = \l__eb_eqsymb_width_dim,
width .initial:n = 10pt,
delim .tl_set:N = \l__eb_eqsymb_delim_tl,
- delim .initial:n = ——,
+ delim .initial:n = \tl_if_eq:NnTF \l__ctex_scheme_tl { chinese } { —— } { --- },
space .dim_set:N = \l__eb_eqsymb_space_dim,
space .initial:n = 0.25em,
item-align .tl_set:N = \l__eb_eqsymb_item_align_tl,
@@ -2100,9 +2174,19 @@
\bool_if:NT \l__eb_theorem_support_bool
{
\RequirePackage{amsthm,thmtools}
- \cs_set_eq:NN \eb@declaretheoremsyle@save \declaretheoremstyle
+ \cs_set_eq:NN \eb@declaretheoremstyle@save \declaretheoremstyle
+ \cs_set_eq:NN \eb@declaretheorem@save \declaretheorem
\RenewDocumentCommand{\declaretheoremstyle}{O{}mO{}}
- {\eb@declaretheoremsyle@save[#1,#3]{#2}}
+ {\eb@declaretheoremstyle@save[#1,#3]{#2}}
+ \RenewDocumentCommand{\declaretheorem}{O{}mO{}}
+ {
+ \eb@declaretheorem@save[style = default,#1,#3]{#2}
+ \settheoremtocline{#2}
+ {
+ \listnumberline{#2}
+ \thmtname\thmtifnote{~(\thmtnote)}{}
+ }
+ }
\ctex_define:nn { thmt }
{
loeskip .skip_set:N = \eb@thmt@loe@skip,
@@ -2112,7 +2196,7 @@
\declaretheoremstyle{default}[
spaceabove = 0ex plus .1ex,
spacebelow = 0ex plus .1ex,
- headindent = 0em,
+ headindent = 0pt,
within = \bool_if:NT \l__eb_class_mode_book_bool { chapter },
headpunct = { },
headfont = \color{ctex@emph}\sffamily,
@@ -2122,6 +2206,7 @@
\theoremstyle{default}
\cs_undefine:N \proof
\DeclareFloatList{theorem}{loe}
+ \AllotPartialExt{loe}{ple}
\eb_preto_cmd:nn { listoftheorems }
{
\group_begin:
@@ -2148,7 +2233,7 @@
\NewDocumentCommand{\settheoremtocline}{smm}
{
\IfBooleanT{#1}{\def\thmt@contentslineIgnore{\thmt@contentsline}}
- \cs_set:cpn { ll@#2 } {#3}
+ \cs_set:cpn { ll@#2 } { \@bsphack #3\@esphack }
}
}
@@ -2177,21 +2262,21 @@
cases,cases*,dcases,dcases*,rcases,rcases*,drcases,drcases*,
aligned,alignedat,gathered,multlined,lgathered,rgathered
}
- { \setspread{\fp_use:N \l__eb_spread_math_fp} }
-\eb_seq_map_inline:nn
+ { \setspread{\eb@spread@math} }
+\clist_map_inline:nn
{ \start@gather,\start@align,\start@multline }
{
\eb_patch_cmd:Nnn #1
{ \collect@body }
{
- \setspread{\fp_use:N \l__eb_spread_math_fp}
+ \setspread{\eb@spread@math}
\collect@body
}
}
\eb_patch_cmd:Nnn \gather@split
{ \spread@equation }
{
- \setspread{\fp_use:N \l__eb_spread_math_fp}
+ \setspread{\eb@spread@math}
\spread@equation
}
\ctex_at_end_package:nn { unicode-math }
@@ -2210,7 +2295,7 @@
bibstyle .initial:n = numerical,
citestyle .tl_set:N = \l__eb_bib_cite_style_tl,
datafile .clist_set:N = \l__eb_bib_datafile_clist,
- bititle .tl_set:N = \eb@bib@bitoc@title,
+ bititle .tl_set:N = \bibibname,
bititle .initial:n = Bibliography,
unknown .code:n = \eb_msg_deprecated_option:n { bib }
}
@@ -2255,8 +2340,8 @@
\cs_new_protected:Npn \eb_biber_toc_title:n #1
{
\bool_if:NTF \l__eb_class_mode_book_bool
- { \bichapter*{#1}{\eb@bib@bitoc@title} }
- { \bisection*{#1}{\eb@bib@bitoc@title} }
+ { \bichapter*{#1}{\bibibname} }
+ { \bisection*{#1}{\bibibname} }
}
\cs_new_protected:Npn \eb_biber_biblatex_set:
{
@@ -2357,7 +2442,7 @@
},
}
}
-\eb_seq_map_inline:nn
+\clist_map_inline:nn
{
{ linkcolor } { link },
{ color } { theme }
@@ -2504,7 +2589,7 @@
}
%</package>
%<*tcolorbox>
-\ProvidesExplFile{eb-tcolorbox.cfg}{2024/04/26}{2024bb}
+\ProvidesExplFile{eb-tcolorbox.cfg}{2024/05/24}{2024bu}
{Customization of tcolorbox for easybook}
\cs_set_protected:Npn \addtotcbstyle #1#2
diff --git a/macros/latex/contrib/easybook/easybook.pdf b/macros/latex/contrib/easybook/easybook.pdf
index b2ead2bd49..08b461d7d4 100644
--- a/macros/latex/contrib/easybook/easybook.pdf
+++ b/macros/latex/contrib/easybook/easybook.pdf
Binary files differ
diff --git a/macros/latex/contrib/easybook/easybook.tex b/macros/latex/contrib/easybook/easybook.tex
index 5bb0355843..f01355d47c 100644
--- a/macros/latex/contrib/easybook/easybook.tex
+++ b/macros/latex/contrib/easybook/easybook.tex
@@ -4,8 +4,8 @@
\usepackage[fontset = fandol]{ctex}
\usepackage
{
- enumitem,newtxmath,indentfirst,tabularray,
- fancyvrb,geometry,hologo,pifont,changelog,calc
+ enumitem,indentfirst,tabularray,fancyvrb,
+ geometry,hologo,pifont,changelog,calc
}
\definecolorscheme{blue}
{
@@ -23,8 +23,8 @@
name = easybook,
color-scheme = blue,
title = EASYBOOK使用手册,
- version = v2024bb,
- date = 2024/04/26,
+ version = v2024bu,
+ date = 2024/05/24,
authors = 瞿毅,
info = 简便地排版中文学位论文或书籍,
email = toquyi@163.com,
@@ -47,11 +47,24 @@
\addtokomafont{subsubsection}{\normalfont\sffamily}
\DeclareTOCStyleEntry[entryformat = \sffamily]{default}{section}
\DeclareFieldFormat[book]{title}{\textsf{#1}}
-\geometry{margin = 1in,marginparwidth = 0.6in}
+\geometry{margin = 1in,marginparwidth = 0.6in,footskip = 0.5in}
+\renewlist{cnltxlist}{description}{2}
\SetEnumitemValue{label}{smallbullet}{\small\color{DarkBlue}\textbullet}
\setlist{nosep,topsep = \smallskipamount,labelsep = 0.5em}
\setlist[1]{labelindent = \parindent}
\setlist[itemize,1]{label = smallbullet,leftmargin = *}
+\setlist[cnltxlist]
+ {
+ leftmargin = 0pt,
+ labelwidth = 2em,
+ itemindent = -1em,
+ labelsep = 0pt,
+ listparindent = 2em,
+ topsep = \smallskipamount,
+ itemsep = \smallskipamount,
+ partopsep = 0ex,
+ parsep = 0ex
+ }
\setcounter{tocdepth}{2}
\SetTblrInner[longtblr]{columns = c,hline{1,Z} = {1pt,DarkBlue}}
\SetTblrOuter[longtblr]{presep = \bigskipamount,postsep = \bigskipamount}
@@ -118,6 +131,11 @@
}
\newnote{\newtag}[1][New]{\fbox{#1}}
\newnote{\newtagv}[2][New]{#1\\#2}
+\NewDocumentCommand{\optpath}{sm}
+ {
+ \IfBooleanF{#1}{\item}
+ \code{\textcolor{SlateGray}{#2}}
+ }
% Multi-row values alignment when there are many choices
\newcommand{\leftfillchoice}[2]
{
@@ -126,21 +144,8 @@
}
% Use a separate module margin marker to prevent overlap
\newcommand{\smodule}[1]{\cnltx@module@text*{\normalsize #1}}
-\newcommand{\noitemsep}{\setlength{\itemsep}{0ex}}
\renewcommand{\cnltx@package@abstract@width}{0.85\linewidth}
\renewcommand{\cnltx@write@lastname}{}
-\renewcommand{\cmltx@list@setup}
- {
- \setlength{\leftmargin}{0em}
- \setlength{\labelwidth}{2em}
- \setlength{\itemindent}{-1em}
- \setlength{\labelsep}{0em}
- \setlength{\listparindent}{2em}
- \setlength{\topsep}{\smallskipamount}
- \setlength{\itemsep}{\smallskipamount}
- \setlength{\partopsep}{0ex}
- \setlength{\parsep}{0ex}
- }
\newcounter{ctexexam}
\define@key{FV}{labelref}{\def\ctexexamlabelref{\label{#1}}}
\let\ctexexamlabelref\empty
@@ -173,7 +178,13 @@
\refstepcounter{ctexexam}\ctexexamlabelref
}
}
-\newcommand{\optpath}[1]{\item\code{\textcolor{SlateGray}{#1}}}
+\def\command{\cnltx@command}
+\def\environment{\cnltx@environment}
+\def\opt{\@cnltx@option@item\option}
+\def\keyval{\@cnltx@option@item\key}
+\def\keylit{\@cnltx@option@item\keyis}
+\def\keychoice{\@cnltx@option@item\choicekey}
+\def\keybool{\@cnltx@option@item\boolkey}
\makeatother\ExplSyntaxOff
\labelformat{section}{节#1}
\labelformat{subsection}{小节#1}
@@ -186,8 +197,8 @@
您在使用 \easybook{} 文档类编写文档前可能需要具备以下的条件:
\begin{itemize}
\item 使用 \hologo{XeLaTeX}(推荐)或 \hologo{LuaLaTeX} 两种编译方式之一。
- \item 由于文档类用到了一些 \LaTeX 和依赖宏包较新的功能,需要版本至少在\textbf{2021/11/15}以后的 \LaTeX 内核支持。建议您安装最新的 \TeX 发行版。
- \item 虽然手册对基本用法做了介绍,但这并不是入门教程,所涉及到宏包的用法与命令并未进行详细介绍,需要对它们有所了解。您应当具有一定的 \LaTeX 使用基础,可以在 \TeX 综合网站 \href{https://www.ctan.org/}{CTAN} 查看相关资源。
+ \item 由于文档类用到了一些 \hologo{LaTeX} 和依赖宏包较新的功能,需要版本至少在\textbf{2021/11/15}以后的 \hologo{LaTeX} 内核支持。建议您安装最新的 \hologo{TeX} 发行版。
+ \item 虽然手册对基本用法做了介绍,但这并不是入门教程,所涉及到宏包的用法与命令并未进行详细介绍,需要对它们有所了解。您应当具有一定的 \hologo{LaTeX} 使用基础,可以在 \hologo{TeX} 综合网站 \href{https://www.ctan.org/}{CTAN} 查看相关资源。
\end{itemize}
\subsection{前言}
@@ -195,7 +206,7 @@
\subsection{基本用法}
\label{subsec:basic usage}
-以下一份简单的 \TeX 文档演示了 \easybook{} 的最基本用法,在导言区进行宏包载入与文档设置,一些详细的使用样例会不定期上传在 \href{https://www.latexstudio.net/}{\LaTeX 工作室} 的网站。
+以下一份简单的 \TeX 文档演示了 \easybook{} 的最基本用法,在导言区进行宏包载入与文档设置,一些详细的使用样例会不定期上传在 \href{https://www.latexstudio.net/}{\hologo{LaTeX} 工作室} 的网站。
\begin{frameverb}
\documentclass[文档类选项]{easybook}
@@ -262,7 +273,7 @@
文档类选项应当在使用 \easybook{} 文档类或 \pkg*{easybase} 宏包(部分支持)时指定,可见\ref{subsec:basic usage} 的例子。选项前带有 \ding{73} 符号表示只可用于文档类,否则文档类与宏包都适用。除了下面列举的选项以外,还支持标准和 \CTeX 文档类的选项。
\subsection{基本选项}
-\begin{options}
+\begin{cnltxlist}
\opt{draft}
开启草稿模式会加快编译速度,表现有显示页面边框、行溢出的地方显示黑色方块、图片变成占位方框、显示当前日期和关闭超链接渲染。不使用绘图宏包及依赖 \pkg*{tcolorbox} 宏包的盒子环境也会增快编译速度,详情见\ref{subsec:box}。
\opt{newline}\dtag
@@ -271,7 +282,7 @@
文档主题方案选项 \option{scheme} 扩展了 \CTeX 文档类中同名选项原有的作用范围,选项值 \code{plain} 可使各类标题变为英文形式。包括章节标题、图表标题和定理名等。
\opt{enmode}\dtag
同时开启 \option{newline} 和 \keyis{scheme}{plain} 选项以符合英文原生风格。
- \keychoice{paper}{\fbox{a4paper},b5paper,c5paper,letterpaper,\textcolor{SlateGray}{other paper}}
+ \keychoice{paper}{\fbox{a4paper},b5paper,c5paper,letterpaper,\optpath*{other paper}}
文档页面尺寸选项将参数交给 \pkg*{geometry} 宏包处理,可使用它支持的所有标准纸张规格。
\keyval{configs}{配置文件列表}\dtag\newtag[Chg]%
载入用户配置的文件名列表,文件列表以花括号包裹并以英文逗号分隔。文件名应包含如 \code{tex}、\code{def} 或 \code{cfg} 等扩展名。若配置文件不在当前文件夹则文件名需要包含路径,即 \code{path/file.cfg}。
@@ -279,10 +290,10 @@
开启这个选项后浮动环境 \env{table} 和 \env{figure} 的比例参数会使用默认值。关闭它则尽可能避免出现浮动页,使图表环境与正文段落更加紧凑,减少多余的空白版面。
\keychoice{theorem}{\fbox{true},false}
是否提供定理功能支持。选项开启时定理模块生效,此时会载入 \pkg*{amsthm} 和 \pkg*{thmtools} 宏包。
-\end{options}
+\end{cnltxlist}
\subsection{配置字体}
-\begin{options}
+\begin{cnltxlist}
\keychoice{cjkfont}{adobe,fandol,founder,mac,macnew,macold,ubuntu,windows,none}\dtag
中文字体采用 \CTeX 宏集包含的字库并与其一致,具体配置方案可以查看 \CTeX 使用手册。它与 \option*{fontset} 选项是等效的,如果没有指定 \option{cjkfont} 的值,将会自动检测操作系统并选择相应的字体。
@@ -317,21 +328,21 @@
\keychoice{mathfont}{\fbox{times},noto,notosans,nc,ncf,stix2,charter,ebgaramond,libertine}\dtag
\leftfillchoice{mathfont}{minion,garamondx,baskervaldx,baskerville,none} \\
选择合适的数学字体,将会加载 \pkg*{newtxmath} 和 \pkg*{bm} 宏包。使用选项 \code{none} 时可以使用 \pkg*{unicode-math} 等其它数学字体宏包定义字体。
-\end{options}
+\end{cnltxlist}
\subsection{\textsf{article} 模式}
-\begin{options}
+\begin{cnltxlist}
\keychoice{class}{\fbox{book},article}
使用 \easybook{} 文档类可以有两种模式,默认为 \cls*{book} 模式。选用 \code{article} 会变为 \code{oneside} 单面排版,同时使文档编号、结构等与标准 \cls*{article} 文档类的特性相似,可用于短篇幅的文章,不需要再使用 \cs*{chapter} 命令。此时\ref{subsec:directory command} 中目录命令的 \option{chapter} 选项会失效,将以 \code{section} 标题级别输出目录。如果使用 \cls*{ctexart} 配合 \pkg*{easybase} 宏包,则选项值 \code{book} 会失效。
\opt{book}
开启 \cls*{book} 书籍模式,与 \keyis*{class}{book} 等效。
\opt{article}
开启 \cls*{article} 文章模式,与 \keyis*{class}{article} 等效。
-\end{options}
+\end{cnltxlist}
\section{接口选项}
\label{sec:interface options}
-\begin{commands}
+\begin{cnltxlist}
\command*{ctexset}[\oarg{模块名}\marg{键值列表}]
\easybook{} 扩展了 \CTeX 宏集 \hologo{LaTeX3} 风格键值的通用控制命令 \cs*{ctexset},接口选项同样可用它设置,原有的 \meta{键值列表} 仍然可用。本文档类目前有9个模块用于实现常规的排版功能,如\ref{table:module List} 所示。
\begin{longtblr}
@@ -362,22 +373,20 @@
\ebtoolsset{hyphen-figure = {-}}
\end{ctexexam}
- \easybook{} 文档类有三种选项:布尔型 \choicekey*{key}{true,false},选项的值为真 \code{true} 或假 \code{false},如果不指定默认为真。键值型 \key*{key}{value} 需要为选项指定值,后面 \code{=} 号不能省略。选择型 \choicekey*{key}{one,\fbox{two},three} 根据提供的可选值进行设定。
-\end{commands}
+ \easybook{} 文档类有四种选项:1. 布尔型 \choicekey*{key}{true,false} 选项的值为真 \code{true} 或假 \code{false},如果不指定默认为真。2. 键值型 \key*{key}{value} 需要为选项指定值,后面 \code{=} 号不能省略。3. 键型 \option*{key} 不需要为选项指定值。4. 选择型 \choicekey*{key}{one,\fbox{two},three} 根据提供的可选值进行设定。
+\end{cnltxlist}
\subsection[工具]{工具\smodule{tools}}
\label{subsec:tools}
-\begin{options}
+\begin{cnltxlist}
\keychoice{color}{\fbox{none},seaside,energy,cyberpunk}
\easybook{} 预置了四种颜色主题,默认主题 \code{none} 为黑白页面,颜色主题不包括超链接。
- \begin{commands}
\command{DeclareThemeColor}[\splitmarg{风格名称,颜色1,颜色2,颜色3}]
声明新的颜色主题命令。它的参数以英文逗号分隔,第一部分为颜色风格名称,后面三部分为 \code{HTML} 颜色代码,构成主题颜色列表。其中 \meta{颜色1} 为标题标签,\meta{颜色2} 为列表编号、定理标签和公式编号括号,\meta{颜色3} 为代码抄录。类似地更改超链接颜色见\ref{subsec:hyperlinks}。
\begin{ctexexam}
\DeclareThemeColor{fancy,2acb25,60aacc,ebc01c}
\ctexset{tools/color = fancy}
\end{ctexexam}
- \end{commands}
\keyval{color-every}{HTML颜色代码}
统一设置主题的各部分颜色。参数是6个十六进制数字组成的 \code{HTML} 颜色代码,任意颜色的代码可以在常见的图片处理工具拾色器中查看。
\keyval{multoc}{整数}\Default{2}
@@ -396,10 +405,10 @@
\end{ctexexam}
\kvsplit-{figurepath}{\marg{路径名1}\marg{路径名2}$\cdots$\marg{路径名n}}
设置插入图片的文件夹路径名。可以有多个路径名,每个路径包含在花括号内分隔,只有一个路径时需要包含在两层括号内。
-\end{options}
+\end{cnltxlist}
\subsubsection{连字符}
-\begin{options}
+\begin{cnltxlist}
\keyval{hyphen-figure}{图片连字符}\Default{\Marg{.}}
设置图片题注编号的连字符。
\keyval{hyphen-table}{表格连字符}\Default{\Marg{.}}
@@ -410,11 +419,11 @@
设置公式题注编号的连字符。
\keyval{hyphen-every}{连字符}\Default{\Marg{.}}
统一设置上述所有编号的连字符。
-\end{options}
+\end{cnltxlist}
\subsubsection{上下标全局设置}
\label{subsubsec:super-sub-script}
-\begin{options}
+\begin{cnltxlist}
\keyval{spvmove}{刚性长度}\Default{0pt}
上标命令 \cs{super} 对应的上标垂直偏移量。
\keyval{sphmove}{刚性长度}\Default{0pt}
@@ -439,32 +448,30 @@
上下标命令 \cs{supersub} 对应的上下标额外垂直距离。前部分为上标的偏移量,后部分为下标的偏移量。如果只有前部分则上下标各自垂直移动当前值的一半。
\keychoice{halign}{\fbox{l},c,r}
上下标命令 \cs{supersub} 对应的上下标水平对齐方式,有左 \code{l}、居中 \code{c} 和右 \code{r} 三种对齐方式。
-\end{options}
+\end{cnltxlist}
\subsection[超链接]{超链接\smodule{ref}}
\label{subsec:hyperlinks}
模块 \module*{ref} 将超链接选项交给 \pkg*{hyperref} 宏包处理。除了一些超链接颜色的选项失效,其它由宏包全局和接口命令 \cs*{hypersetup} 支持的多数选项可用。
-\begin{options}
+\begin{cnltxlist}
\keychoice{linktype}{\fbox{edge},colors,none}
超链接类型。\code{edge} 使超链接形式为边框,\code{colors} 使超链接字体为彩色,\code{none} 关闭超链接边框与颜色,此时 \option{linkcolor} 选项无效。
\keychoice{linkcolor}{fresh,cutepink,\fbox{navyblue},crimson}
当超链接类型为 \code{colors} 时文本的颜色样式。预置了四种超链接颜色风格,默认为海军蓝 \code{navyblue}。
- \begin{commands}
\command{DeclareLinkColor}[\splitmarg{风格名称,颜色1,颜色2,颜色3}]
声明新的超链接颜色样式命令。它的参数以英文逗号分隔,第一部分为颜色风格名称,后面三部分为 \code{HTML} 颜色代码,构成超链接颜色列表。其中 \meta{颜色1} 为普通链接,\meta{颜色2} 为网址,\meta{颜色3} 为参考文献引用。
- \end{commands}
\keyval{linkcolor-every}{HTML颜色代码}
统一设置超链接的各部分颜色。参数是6个十六进制数字组成的 \code{HTML} 颜色代码,任意颜色的代码可以在常见的图片处理工具拾色器中查看。
\keychoice{linktoc}{none,section,page,\fbox{all}}
将目录中的超链接取消、置于标题上、置于页码上或置于标题和页码上。
-\end{options}
+\end{cnltxlist}
\subsection[行距]{行距\smodule{spread}}
\label{subsec:spread}
行距因子用于设置各种行距倍数,\meta{数值} 是不带有长度单位的浮点数。各类行距既可以在导言区全局设置,也可以在正文中设置对后面生效。
-\begin{options}
- \keyval{line}{数值}
- 正文行距因子。行距因子初始值为 \code{1.354}(相当于 \textsf{Word} 的1.25倍行距),如果设置了文类或 \pkg*{ctex} 宏包的全局行距选项 \option*{linespread} 则初始值设为它的值。
+\begin{cnltxlist}
+ \keyval{line}{数值}\Default{1.354}
+ 正文行距因子。中文主题下行距因子初始值为 \code{1.354}(相当于 \textsf{Word} 的1.25倍行距),如果设置了文类或 \pkg*{ctex} 宏包的全局行距选项 \option*{linespread} 则初始值设为它的值。
\keyval{table}{数值}\Default{1.354}
表格内容行距因子,对传统表格 \env{tabular} 和 \env{tabularx} 等环境生效。\pkg*{tabularray} 宏包的 \env{tblr} 环境自带 \option*{stretch} 和 \option*{rowsep} 等行间距选项,这里不做调整。
\keyval{math}{数值}\Default{1.2}
@@ -489,11 +496,11 @@
行间公式与上面正文间的额外距离。
\keyval{belowdisplayskip}{弹性长度}\Default{0.5ex plus .1ex minus .1ex}\newtag%
行间公式与下面正文间的额外距离。
-\end{options}
+\end{cnltxlist}
\subsection[部件字体]{部件字体\smodule{font}}
\label{subsec:font}
-\begin{options}
+\begin{cnltxlist}
\keyval{caption-table}{字体命令}\Default{\cs*{sffamily}\cs*{small}}
设置表格题注的字体,包括字体族、字体系列、字体尺寸和字体形状命令。
\keyval{caption-figure}{字体命令}\Default{\cs*{sffamily}\cs*{small}}
@@ -506,36 +513,27 @@
设置脚注标记与内容的字体,包括字体族、字体系列和字体形状命令。
\keyval{marginpar}{字体命令}\Default{\cs*{footnotesize}}
设置边注的字体,包括字体族、字体系列、字体尺寸和字体形状命令。
-\end{options}
-
-\begin{commands}
\command{ebaddtofont}[\marg{字体类型}\marg{字体命令}]
用于在上述各种字体原有的格式上附加代码。其中 \meta{字体命令} 也可以包括行距命令且相对于 \module*{spread} 模块具有优先性,不同题注的 \meta{字体类型} 则为相应选项的后缀名。
\begin{ctexexam}
\ebaddtofont{every}{\linespread{1.5}\selectfont}
\ebaddtofont{footnote}{\sffamily}
\end{ctexexam}
-\end{commands}
+\end{cnltxlist}
\subsection[参考文献]{参考文献\smodule{bib}}
\label{subsec:reference}
-\begin{options}
+\begin{cnltxlist}
\keychoice{backend}{\fbox{bibtex},biblatex}
参考文献处理后端。默认用传统的 \hologo{BibTeX} 处理参考文献\footnote{使用 \hologo{BibTeX} 引擎时加载 \pkg*{natbib} 宏包,使用 \hologo{biber} 时将加载 \pkg*{biblatex} 宏包。}。
- \keychoice{bibstyle}{\fbox{numerical},authoryear,\textcolor{SlateGray}{other sty}}
+ \keychoice{bibstyle}{\fbox{numerical},authoryear,\optpath*{other sty}}
参考文献格式使用中国参考文献推荐标准GB/T 7714-2015,对应顺序编码制和著者—出版年制两种风格。若使用其它格式,使用 \hologo{BibTeX} 处理时需确保正确的 \code{bst} 文件,使用 \hologo{biber} 处理可使用 \pkg*{biblatex} 宏包支持的参考文献风格名称。
\keyval{citestyle}{标注风格}
标注参考文献的风格。后端为 \hologo{BibTeX} 时可使用 \option{super}(数字上标标注,默认)或 \option{numbers}(数字标注)等 \pkg*{natbib} 宏包带有的标注风格,后端为 \hologo{biber} 时可使用 \pkg*{biblatex} 宏包支持的标注风格。
\keyval{datafile}{数据库列表}
参考文献数据库的文件名列表,文件列表以花括号包裹并以英文逗号分隔。使用 \hologo{biber} 处理时文件名要带 \code{bib} 扩展名,若参考文献文件不在当前文件夹则文件名需要包含路径,即 \code{path/file.bib}。不设置参考文献数据库名时 \module*{bib} 模块中的选项会失效,即不自动载入 \pkg*{natbib} 或 \pkg*{biblatex} 宏包,此时需要手动载入相关宏包配置参考文献。
-\end{options}
-
-\begin{commands}
\command{printbibliography}[\oarg{键值列表}]
两种方式\textbf{均使用}此命令打印参考文献,不同处理后端此命令的 \meta{键值列表} 不同。使用 \hologo{BibTeX} 处理时选项与\ref{subsec:directory command} 目录命令的选项相同,使用 \hologo{biber} 处理时常用的选项如下:
-\end{commands}
-
-\begin{options}
\keychoice*{heading}{bibliography,subbibliography,\fbox{bibintoc},subbibintoc}
参考文献通常有一个章标题或者节标题,该选项选择由 \cs{defbibheading} 定义的标题名。
\keyval{title}{参考文献标题名}
@@ -558,26 +556,25 @@
\defbibentryset{Zhang2022}{张三2022,ZhangSan2022}
\cite{Zhang2022} % 在正文中引用
\end{ctexexam}
-\end{options}
+\end{cnltxlist}
\subsection[定理]{定理\smodule{thmt}}
\label{subsec:theorem}
-定理模块 \module*{thmt} 由 \pkg*{thmtools} 宏包提供支持,主要提供了定理环境和样式声明两个命令。定理环境声明命令 \cs{declaretheorem} 使用的定理样式由样式声明命令 \cs{declaretheoremstyle} 提供,文档类预置了一个定理样式 \code{default},但未定义任何定理环境。
-\begin{commands}
+定理模块 \module*{thmt} 由 \pkg*{thmtools} 宏包提供支持,主要提供了定理环境和样式声明两个命令。定理环境声明命令 \cs{declaretheorem} 使用的定理样式由样式声明命令 \cs{declaretheoremstyle} 提供。文档类未预声明任何定理环境,如果声明定理环境时不指定样式,则使用默认定理样式 \code{default},可以对它重新定义。
+\begin{cnltxlist}
\command{declaretheorem}[\oarg{键值列表1}\marg{环境名}\oarg{键值列表2}]
定理环境声明命令。可选参数的 \meta{键值列表1} 与 \meta{键值列表2} 等效,其中常用的选项如下:
- \begin{options}
\keyval{name}{定理名}
定理环境的标题名称,默认为英文首字母大写的环境名。
- \keychoice{numbered}{no,yes,unless unique}
+ \keychoice{numbered}{no,\fbox{yes},unless unique}
定理可以被编号、不被编号或者只有在文档中多次出现时才被编号。
- \keychoice{within}{chapter,section,empty,\textcolor{SlateGray}{counter}}
+ \keychoice{within}{\fbox{chapter},section,\optpath*{empty},\optpath*{counter}}
定理编号跟随的计数器。当计数器值递增时定理编号会从零开始,通常这是一个章节计数器。
\keyval{numberlike}{计数器}
定理将使用此 \meta{计数器} 进行编号,通常这是另一个定理环境的名称。
\keyval{qed}{证毕符号}
证毕符号。位于定理段落末尾行的版心右边,可以设置成 \cs{qedsymbol} 默认是空心方块。
- \keyval{style}{定理样式}
+ \keyval{style}{定理样式}\Default{default}
选项的值为使用 \cs{declaretheoremstyle} 命令新定义的定理样式。
使用 \cs{declaretheorem} 命令以\ref{exam:new theorem sty} 中的定理样式 \code{fancy} 新建一个定理环境猜想,然后用一个基于 \pkg*{tcolorbox} 宏包的预置彩色盒子 \env{easyboxi} 增加背景:
@@ -586,31 +583,28 @@
\addtotcbstyle{tc-easyboxi}{colback = GreenYellow}
\tcolorboxenvironment{caixiang}{tc-easyboxi}
\end{ctexexam}
- \end{options}
\command{declaretheoremstyle}[\oarg{键值列表1}\marg{定理样式}\oarg{键值列表2}]
定理样式声明命令,键值列表支持自身以及定理声明命令 \cs{declaretheorem} 的所有选项。可选参数的 \meta{键值列表1} 与 \meta{键值列表2} 等效,其中支持的选项如下:
- \begin{options}
- \keyval{headfont}{字体命令}
- 定理标题部分的字体,包括字体族、字体系列、字体尺寸和字体形状命令。
- \keyval{notefont}{字体命令}
+ \keyval{headfont}{字体命令}\Default{\cs*{sffamily}}
+ 定理标题部分(包括题注)的字体,包括字体族、字体系列、字体尺寸和字体形状命令。
+ \keyval{notefont}{字体命令}\Default{\cs*{sffamily}}
定理题注部分的字体,包括字体族、字体系列、字体尺寸和字体形状命令。
- \keyval{bodyfont}{字体命令}
+ \keyval{bodyfont}{字体命令}\Default{\cs*{normalfont}}
定理内容部分的字体,包括字体族、字体系列、字体尺寸和字体形状命令。
\keyval{headpunct}{代码}
紧随定理标题末尾的标记代码,位于定理第一段内容的间距 \option{postheadspace} 之前,可以是字符或插入换行符 \cs*{newline} 等命令。
- \keyval{headindent}{刚性长度}
+ \keyval{headindent}{刚性长度}\Default{0pt}
定理标题的缩进。默认无缩进,可用 \cs*{parindent} 命令设置为段落缩进。
- \keyval{postheadspace}{刚性长度}
+ \keyval{postheadspace}{刚性长度}\Default{1em}
定理标题后与定理第一段内容的间距。
- \keyval{spaceabove}{弹性长度}
+ \keyval{spaceabove}{弹性长度}\Default{0ex plus .1ex}
定理环境前的间距,使用 \pkg*{tcolorbox} 的盒子环境包装后被覆盖。
- \keyval{spacebelow}{弹性长度}
+ \keyval{spacebelow}{弹性长度}\Default{0ex plus .1ex}
定理环境后的间距,使用 \pkg*{tcolorbox} 的盒子环境包装后被覆盖。
- \kvsplit-{notebraces}{\marg{左括号}\marg{右括号}}
+ \kvsplit-{notebraces}{\marg{左括号}\marg{右括号}}\Default{\Marg{(}\Marg{)}}
设置定理题注两边的括号,两个必选参数分别代表左括号和右括号。
\keyval{headformat}{标题排列}
定理标题各组成元素的位置排列和格式。定理标题由定理名、编号和题注组成,\meta{标题排列} 中命令 \cs*{NAME}、\cs*{NUMBER} 和 \cs*{NOTE} 分别代表定理名、编号和题注。
- \end{options}
\command{theoremstyle}[\marg{定理样式}]
设置其后由 \cs{declaretheorem} 命令声明的定理环境的样式。
@@ -626,16 +620,12 @@
bodyfont = \itshape
]
\end{ctexexam}
-\end{commands}
-
-\begin{commands}\noitemsep
+ \begin{cnltxlist}[itemsep = 0ex]
\command{listoftheorems}[\sarg\oarg{键值列表}]\default{}
\item\key{listoftheorems}{定理目录标题名}
\command{settheoremtocline}[\sarg\marg{环境名}\marg{标题定义}]\newtagv{2024bb}%
对 \pkg*{thmtools} 宏包的定理环境目录命令 \cs{listoftheorems} 进行了适配调整,\ref{subsec:directory command} 和\ref{subsec:catalog} 中的选项机制均可用,但标题定义选项 \option{tocline} 较为特殊,需用 \cs{settheoremtocline} 命令单独设置。在 \meta{标题定义} 中有三个命令 \cs{thmtname}、\cs{thmtenvname} 和 \cs{thmtnote} 分别代表定理名、定理环境名和题注用于排版目录条目。
-\end{commands}
-
-\begin{commands}
+ \end{cnltxlist}
\optpath{thmt/}\key{loeskip}{弹性长度}\Default{10pt}
定理目录中每章第一个条目上方增加的垂直距离。与 \CTeX 的表格和图片目录中每章间的条目距离选项 \option*{lotskip} 和 \option*{lofskip} 类似,在 \cls*{article} 模式中此选项失效。
\command{thmtifnote}[\marg{存在题注代码}\marg{不存在题注代码}]
@@ -647,17 +637,17 @@
\RegisterTocName{caixiang}
\setlisttheoremstyle{ignoreall,show = caixiang}
\settheoremtocline{caixiang}
- {%
+ {
\listnumberline{caixiang}
\thmtname\thmtifnote{[\thmtnote]}{}
}
\end{ctexexam}
-\end{commands}
+\end{cnltxlist}
\subsection[页面尺寸]{页面尺寸\smodule{geo}}
\label{subsec:page margins}
模块 \module*{geo} 会将选项(除了前两个为附加)交给页面尺寸宏包 \pkg*{geometry} 处理,并且支持它的键值列表,预置的页面尺寸与 \textsf{Word} 的默认值接近。下面列举几种代表性选项,其它选项可查阅宏包帮助文档。当在此设置纸张规格时,会覆盖文类选项 \option{paper} 的设置。
-\begin{options}\noitemsep
+\begin{cnltxlist}[itemsep = 0ex]
\keyval{headruleskip}{页眉线间距}\Default*{0pt}
\keyval{footruleskip}{页脚线间距}\Default*{3.5pt}
\kvsplit{hdivide}{左边距,版心文本宽度,右边距}\default{}
@@ -673,12 +663,12 @@
vcentering
}
\end{ctexexam}
-\end{options}
+\end{cnltxlist}
\subsection[页眉页脚]{页眉页脚\smodule{hdr}}
\label{subsec:header and footer}
模块 \module*{hdr} 设置的命令由 \pkg*{fancyhdr} 宏包提供支持。标题标记由标签和标题组成,选项中参数 \code{\#1} 代表当前章、节或小节的标题。在 \cls*{book} 模式时使用标题标记选项 \option{chap-mark} 和 \option{sec-mark},在 \cls*{article} 模式时使用 \option{sec-mark} 和 \option{subsec-mark} 选项,这与标准文档类的行为一致。重新设置标题标记选项时标记大小写选项 \option{uppercase} 会失效。
-\begin{options}
+\begin{cnltxlist}
\keyval{chap-mark}{标题标记}
\code{chapter} 级别标题标记的内容,包含了标签选项 \option{chap-label} 和章标题 \code{\#1}。
\keyval{sec-mark}{标题标记}
@@ -699,19 +689,17 @@
\kvsplit-{subsec-label}{\oarg{编号输出命令}\marg{距离命令}}\Default{\cs*{hspace}\Marg{0.5em}}
\code{subsection} 级别标题标记的标签,用法与 \option{chap-label} 类似。
\keyval{headrule}{横线命令}
- 绘制页眉横线的选项,可以使用 \cs*{hrule} 或下述 \cs{markrule} 等画线命令来绘制横线。
+ 绘制页眉横线的选项,可以使用 \cs*{hrule} 或\ref{exam:markrule} 所述 \cs{markrule} 等画线命令来绘制横线。
\keyval{footrule}{横线命令}
- 绘制页脚横线的选项,可以使用 \cs*{hrule} 或下述 \cs{markrule} 等画线命令来绘制横线。
+ 绘制页脚横线的选项,可以使用 \cs*{hrule} 或\ref{exam:markrule} 所述 \cs{markrule} 等画线命令来绘制横线。
\keyval{footnoterule}{横线命令}
- 绘制脚注横线的选项,可以使用 \cs*{hrule} 或下述 \cs{markrule} 等画线命令来绘制横线。
+ 绘制脚注横线的选项,可以使用 \cs*{hrule} 或\ref{exam:markrule} 所述 \cs{markrule} 等画线命令来绘制横线。
\keyval{headrulewd}{刚性长度}\Default{0.5pt}
页眉横线默认的粗细,使用 \option{headrule} 选项绘制横线后失效。
\keyval{footnoterulewd}{刚性长度}\Default{0.5pt}
脚注横线默认的粗细,使用 \option{footnoterule} 选项绘制横线后失效。
-\end{options}
-
-\begin{commands}\noitemsep
- \command{fancyhead}[\marg{风格名}\oarg{基础风格}\marg{风格定义}]
+ \begin{cnltxlist}[itemsep = 0ex]
+ \command{fancypagestyle}[\marg{风格名}\oarg{基础风格}\marg{风格定义}]
定义名为 \meta{风格名} 的页面风格。\meta{风格定义} 中可包含设置页眉页脚不同位置格式的命令,如果为空则等于 \code{fancy} 风格。如果存在 \meta{基础风格},则在它的基础上进行定义。
\begin{ctexexam}
\fancypagestyle{plain}
@@ -724,29 +712,24 @@
\command{fancyhead}[\oarg{位置}\marg{内容}]\default{}
\command{fancyfoot}[\oarg{位置}\marg{内容}]
为了确保页面显示正确,使用 \cs{fancyhead} 和 \cs{fancyfoot} 等命令设置页眉页脚时需要在页边距的命令之后。默认设置的是一个名为 \code{fancy} 的页面风格。\pkg*{fancyhdr} 将页眉页脚分成了左中右和奇数页(odd)、偶数页(even)共12个部分,可选参数中 \code{E} 和 \code{O} 代表偶数和奇数,\code{L}、\code{C} 和 \code{R} 代表左、中和右部分。单面打印时,含有偶数位置的命令无效。
-\end{commands}
-
-\begin{commands}\noitemsep
\command{markboth}[\marg{左页标题标记}\marg{右页标题标记}]\default{}
\command{markright}[\marg{右页标题标记}]\default{}
\command{markdouble}[\marg{双页标题标记}]
这三个命令用于手动设置当前页标题标记,特殊情况下可以使用它们定义与标题不同的页眉页脚标记。上述标记命令内容的选项便是基于这三个命令。其中 \cs{markdouble} 根据是否是双面打印设置相应标记。如果是单面打印,则 \meta{左页标题标记} 无效。
-\end{commands}
-
-\begin{commands}
+ \end{cnltxlist}
\command{markrule}[\oarg{长度}\darg{颜色名}\marg{线宽}\baroarg{上间距,下间距}]
实线命令 \cs{markrule} 既可在 \meta{横线命令} 中用于绘制页眉页脚横线,也可以在正文中使用。\meta{长度} 默认为版心的宽度,上下间距为横线与上下方部件的间距,带有长度单位,上下间距之间用符号 \code{|} 分开,若只有一部分则表示 \meta{上间距}。下面举一个设置页眉内容的例子:
- \begin{ctexexam}
+ \begin{ctexexam}[labelref = exam:markrule]
\ebhdrset{headrule = \markrule(DarkOrchid){0.5pt}[2pt|2pt]}
- \fancyhead[ER]{\leftmark}
+ \fancyhead[ER]{\FirstMark{2e-left}} % 来自ltmarks的标记机制
\fancyhead[OL]{\rightmark}
\fancyhead[EL,OR]{\textbf{\thepage}}
\end{ctexexam}
-\end{commands}
+\end{cnltxlist}
\subsection[脚注]{脚注\smodule{hdr}}
模块 \module*{hdr} 还可以灵活调整脚注编号和内容的格式。格式主要包括脚注标记的编号类型、字体、附加符号和对齐方式等,以及脚注内容的首行缩进、行距和字体等。基本思想是提供常规和自定义标记(\code{fncustom})两种脚注,常规脚注的标记分为正文(\code{fnmark})和内容(\code{fntext})标记两种,且两者编号类型分离,自定义脚注的标记与其共享格式。目前脚注模块基本兼容 \pkg*{footmisc} 宏包。
-\begin{options}
+\begin{cnltxlist}
\keychoice{footnotetype}{plain,\fbox{hang},flush,bottom}
脚注的类型。悬挂缩进 \code{hang} 是默认值,\code{plain} 是原始的类型,\code{flush} 使脚注内容标记位于脚注首行边缘外侧并右对齐。当存在浮动环境排版时,脚注可能位于页面中间,\code{bottom} 使脚注始终位于页面底端。其中 \code{bottom} 是复合选项,可以与前三种类型重复或复合使用:
\begin{ctexexam}
@@ -763,19 +746,17 @@
不同脚注之间的距离,默认情况下它自适应 \module*{spread} 模块脚注行距选项 \option{footnote} 的值。
\keychoice{fntext-pos}{normal,\fbox{super}}
设置脚注内容标记的位置,正常文本或是上标形式。
- \keychoice{fnmark-num}{\fbox{plain},pifont,pifont*,pisans,pisans*,\textcolor{SlateGray}{short num}}
+ \keychoice{fnmark-num}{\fbox{plain},pifont,pifont*,pisans,pisans*,\optpath*{short num}}
脚注正文标记编号的类型。默认为原生样式 \code{plain},还可以改为 \code{pifont} 的各个版本,从左往右依次为普通版、阴文衬线版、阳文无衬线版和阴文无衬线版,缺点是它们的编号仅包括1-10。
短编号的参数与列表环境类似,有 \code{1}、\code{A}、\code{a}、\code{I} 和 \code{i},除此之外还增加了中文数字 \code{c} 和符号 \code{s} 格式。原生样式 \code{plain} 等同于单独使用数字 \code{1} 参数。这个选项可以用在正文中改变其后脚注编号类型。
- \begin{commands}
\command{footref}[\marg{脚注标签名}]
在当前位置对自动编号的脚注进行引用,与被引用的正文标记共享一个编号与格式。
- \end{commands}
\begin{ctexexam}
\ebhdrset{fnmark-num = 1} % 等于编号类型plain
\ebhdrset{fnmark-num = (a)}
\end{ctexexam}
- \begin{commands}\noitemsep
+ \begin{cnltxlist}[itemsep = 0ex]
\command{SetFntSymbsList}[\marg{符号表名}\marg{符号数量}\marg{符号列表}]\default{}
\command{UseFntSymbsList}[\marg{符号表名}]\newtag[Chg]%
这两个命令用于在脚注短编号标记为 \code{s} 自定义符号型时设置符号列表。\cs{SetFntSymbsList} 命令用于定义名为 \meta{符号表名} 的符号列表,\cs{UseFntSymbsList} 命令用于启用已定义的符号列表。默认的脚注符号列表是空的,注意使用符号型标记的脚注时计数器 \code{footnote} 的值仍然递增,以及定义新列表时 \meta{符号列表} 的写法和命令顺序:
@@ -784,18 +765,18 @@
\UseFntSymbsList{fancy}
\ebhdrset{fnmark-num = s}
\end{ctexexam}
- \end{commands}
- \keychoice{fntext-num}{\fbox{plain},pifont,pifont*,pisans,pisans*,\textcolor{SlateGray}{short num}}
+ \end{cnltxlist}
+ \keychoice{fntext-num}{\fbox{plain},pifont,pifont*,pisans,pisans*,\optpath*{short num}}
脚注内容标记编号的类型。用法与 \option{fnmark-num} 一样,所以脚注内容与正文标记编号类型\textbf{可以不同}。
- \keychoice{fnmarktext-num}{\fbox{plain},pifont,pifont*,pisans,pisans*,\textcolor{SlateGray}{short num}}
+ \keychoice{fnmarktext-num}{\fbox{plain},pifont,pifont*,pisans,pisans*,\optpath*{short num}}
同时设定脚注正文标记编号 \option{fnmark-num} 与脚注内容标记编号 \option{fntext-num} 的类型。目前脚注编号类型选项对于迷你页环境 \env*{minipage} 无效,其中的脚注保持默认英文字母的编号类型。
- \keychoice{fnmark-vmove}{\textcolor{SlateGray}{fixed length},match}\Default{0pt}
+ \keychoice{fnmark-vmove}{\optpath*{fixed length},match}\Default{0pt}
脚注正文标记的垂直偏移。可以设为刚性长度,或用 \code{match} 匹配 \option{spvmove} 全局的值。
- \keychoice{fnmark-hmove}{\textcolor{SlateGray}{fixed length},match}\Default{0pt}
+ \keychoice{fnmark-hmove}{\optpath*{fixed length},match}\Default{0pt}
脚注正文标记的水平偏移。可以设为刚性长度,或用 \code{match} 匹配 \option{sphmove} 全局的值。
- \keychoice{fntext-vmove}{\textcolor{SlateGray}{fixed length},match}\Default{0pt}
+ \keychoice{fntext-vmove}{\optpath*{fixed length},match}\Default{0pt}
脚注内容标记的垂直偏移。可以设为刚性长度,或用 \code{match} 匹配 \option{spvmove} 全局的值。
- \keychoice{fnmarktext-format}{\textcolor{SlateGray}{format code},match}
+ \keychoice{fnmarktext-format}{\optpath*{format code},match}
默认脚注标记的格式,选项 \code{match} 可以匹配 \option{spcmd} 全局的值。一般配合 \keyis{fnmarktext-num}{plain} 原生编号形式使用,例如用 \pkg*{circledtext} 宏包的带圈字符命令 \cs{circledtext} 给脚注标记添加圆圈:
\begin{ctexexam}
\usepackage{circledtext}
@@ -806,7 +787,6 @@
fnmarktext-format = \circledtext
}
\end{ctexexam}
- \begin{commands}
\command{defupfntmark}[\marg{脚注正文标记格式}]
定义脚注正文标记的格式,与正文标记编号命令 \cs{theupfootnote} 配合使用。
\command{defdownfntmark}[\marg{脚注内容标记格式}]
@@ -819,15 +799,14 @@
保存正文标记编号类型选项 \option{fnmark-num} 指定的正文标记。
\command{thedownfootnote}
保存内容标记编号类型选项 \option{fntext-num} 指定的内容标记。
- \end{commands}
\begin{ctexexam}
\defupfntmark{\super[vmove = 2pt]{\theupfootnote}}
\defdownfntmark{\notminipage{\textcolor{blue}{\thedownfootnote}}{}}
\deffntpara{\makebox[2em][r]{\thefootnote}#1}
\end{ctexexam}
- \keychoice{fncustom-format}{\textcolor{SlateGray}{format code},match}
+ \keychoice{fncustom-format}{\optpath*{format code},match}
单独设定自定义脚注标记的格式,选项 \code{match} 可以匹配 \option{spcmd} 全局的值。自定义脚注内容和正文标记的命令与用法可以见下方和\ref{exam:custom footnote markers} 的介绍。
- \begin{commands}\noitemsep
+ \begin{cnltxlist}[itemsep = 0ex]
\command{Footnote}[\oarg{内容标记}\marg{正文标记}\marg{脚注文本}]\default{}
\command{Footnotetext}[\marg{内容标记}\marg{脚注文本}]\default{}
\command{Footnotemark}[\marg{正文标记}]
@@ -835,8 +814,8 @@
\begin{ctexexam}[labelref = exam:custom footnote markers]
\Footnote{*}{这是可以自定义标记的脚注。}
\end{ctexexam}
- \end{commands}
- \keychoice{fnboth-format}{\textcolor{SlateGray}{format code},match}
+ \end{cnltxlist}
+ \keychoice{fnboth-format}{\optpath*{format code},match}
同时设定默认脚注标记 \option{fnmarktext-format} 和自定义脚注标记 \option{fncustom-format} 的格式。两种脚注标记匹配上标格式 \option{spcmd} 的值是独立的,使用 \code{match} 则可以同时匹配。会覆盖 \module*{font} 模块脚注字体选项 \option{footnote} 相同类型的命令,最后一个格式命令可以带有一个参数接受脚注标记。
\keyval{fnpara-format}{格式代码}
脚注内容文本的格式。会覆盖 \module*{font} 模块脚注字体选项 \option{footnote} 相同类型的命令,最后一个格式命令可以带有一个参数接受脚注内容文本。
@@ -849,14 +828,14 @@
fntext-code = {\hspace{1em}\llap,\enskip}
}
\end{ctexexam}
-\end{options}
+\end{cnltxlist}
\subsection[目录]{目录\smodule{toc}}
\label{subsec:catalog}
-模块 \module*{toc} 将使用 \pkg*{titletoc} 宏包处理目录样式。默认包括 \module*{part}、\module*{chapter}、\module*{section}、\module*{subsection}、\module*{figure}、\module*{table} 和 \module*{lstlisting} 条目名的键路径,而使用 \module*{float} 路径可以统一设置图片、表格和代码目录的样式。选项前带有 \ding{73} 符号表示支持所有相应\textbf{条目名}的路径,其它选项则处于 \module*{toc} 键路径下。目前支持多数学术论文目录样式,更复杂的样式可以查看 \pkg*{titletoc} 的相关用法。
-\begin{options}
+模块 \module*{toc} 将使用 \pkg*{titletoc} 宏包处理目录样式。默认包括 \module*{part}$\longrightarrow$\module*{subparagraph}、\module*{figure}、\module*{table} 和 \module*{lstlisting} 条目名的键路径。选项前带有 \ding{73} 符号表示支持所有相应\textbf{条目名}的路径,其它选项则处于 \module*{toc} 键路径下。目录选项均支持标题编号判定命令 \cs{CTEXifname}。目前支持多数学术论文目录样式,更复杂的样式可以查看 \pkg*{titletoc} 的相关用法。
+\begin{cnltxlist}
\keyval{tocformat}{条目格式}\dtag
- 目录中各类型条目的格式。可以设置条目字体和加入垂直间距等,垂直间距最好使用防止垂直间距重合的 \cs*{addvspace} 命令。如果是段落型目录,格式代码仅在段落中当前级别条目前执行一次。
+ 目录中各类型条目的格式。可以设置条目字体和加入垂直间距等,垂直间距最好使用防止垂直间距重合的 \cs*{addvspace} 命令。如果是段落型目录,格式代码仅在段落中当前级别条目前执行一次。也可以用 \cs{CTEXifname} 命令或 \option{tocformat*} 选项给有无编号的标题分别设置格式。
\keyval{tocformat+}{条目格式}\dtag
与选项 \option{tocformat} 用法一样,只是在已有的格式命令后附加代码。
\keyval{tocformat*}{条目格式}\dtag
@@ -865,10 +844,8 @@
目录条目左边的缩进距离,通常标题级别越低缩进越大。如果是段落型目录,仅在当前条目级别为段落中最高时有效。
\keyval{tocrule}{引导线命令}\dtag
目录条目的引导线和页码。引导线可以使用基于 \cs*{xleaders} 命令的 \cs{tocrule} 绘制(同时输出页码),如果是一般不需要引导线的段落型目录,可以使用 \cs{thecontentspage} 命令输出页码。
- \begin{commands}
\command{tocrule}[\sarg\harg\oarg{引导点间距}\darg{放大因子}\marg{引导点}\oarg{页码格式}]
生成目录引导线的命令,需要在引导线选项 \option{tocrule} 中使用。带有星号的命令与 \keyis{dotalign}{false} 效果相同。命令带 \harg{} 号参数不输出目录页码,此时无格式的页码被保存在 \cs{thecontentspage} 命令中,可以配合盒子命令设置不同的页码左右间距和对齐方式。\meta{放大因子} 为 \meta{引导点} 的放大倍数。\meta{页码格式} 中最后一个命令可以带有一个参数用于接受页码。
- \end{commands}
\keyval{toclabel}{标题标签定义}\dtag\newtagv{2024as}%
目录中各类型条目标题标签的定义,可与 \option{tocline} 选项联用设置标题。其中参数 \code{\#1} 代表标签的编号 \cs{thecontentslabel},参数 \code{\#2} 代表 \meta{条目名}。定义最后的命令可带有一个参数,用于接受标题内容,一些特殊情况例如需要将标题内容放在标签后,可以通过定义命令实现:
\begin{ctexexam}
@@ -886,28 +863,24 @@
{
chapter =
{
- tocformat = \addvspace{8pt}\large,
- tocindent = 1.5em,
+ tocformat = \CTEXifname{\addvspace{8pt}\large}{},
+ tocindent = \CTEXifname{2em}{1.5em},
tocrule = \tocrule[0.6pc](1.1){.}[\zihao{5}],
tocline = \CTEXnumberline{#1}#2
},
section/toclabel = \contentspush{#1\hspace{0.5em}},
- section/tocrule = \tocrule-{}\makebox[1cm]{\rlap{\thecontentspage}}
+ section/tocrule = \tocrule-{}\makebox[1cm]{\rlap{\thecontentspage}},
+ toc/pagenumwd = 0pt
}
\end{ctexexam}
-\end{options}
-
-\begin{commands}
- \command{RegisterTocName}[\sarg\marg{条目名}]\newtagv[Changed]{2024as}%
- 给条目类型名称为 \meta{条目名} 的标题注册用于设置目录样式的选项,即选项前有符号 \ding{73} 表示需要注册后使用。前面提到的条目类型均已注册,新类型的条目注册后默认格式与图表条目相同。这个命令可以重复使用,会重置目录条目为默认格式。带有星号参数的命令使注册目录的条目形成一个段落,此时多出下面三个选项可用:
- \begin{options}
+ \command{RegisterTocName}[\sarg\marg{条目名列表}]\newtagv[Changed]{2024bo}%
+ 给 \meta{条目名列表} 中的每个 \meta{条目名} 标题注册用于设置目录样式的选项,即选项前有符号 \ding{73} 表示需要注册后使用。前面提到的条目类型均已注册,新类型的条目注册后默认格式与图表条目相同。这个命令可以重复使用,会重置目录条目为默认格式。带有星号参数的命令使注册目录的条目形成一个段落,此时多出下面三个选项可用:
\keyval{tocbegin}{开始代码}\dtag\newtagv{2024as}%
当前级别目录条目第一个标题前的代码,仅在存在更高级别的条目时有效。
\keyval{tocsep}{中间代码}\dtag\Default{\Marg{.—}}\newtagv{2024as}%
当前级别目录条目每个标题之间的代码。
\keyval{tocend}{结束代码}\dtag\Default{\Marg{.}}\newtagv{2024as}%
当前级别目录条目最后一个标题后的代码。
- \end{options}
\command{contentsuse}[\marg{条目名}\marg{扩展名}]
激活条目类型名称为 \meta{条目名} 的目录定制功能,它使用的目录文件后缀为 \meta{扩展名}。需要在激活条目后再使用命令 \cs{RegisterTocName} 注册选项。
\command{DeclareFloatList}[\marg{条目名}\marg{扩展名}]
@@ -928,6 +901,15 @@
\AllotCaptionExt{table}{lof}
\newcommand{\listoffiguretables}{\listoffigures} % 同时输出图表目录的命令
\end{ctexexam}
+ \command{AllotPartialExt}[\marg{扩展名1}\marg{扩展名2}]\newtagv{2024bk}
+ 给目录文件扩展名为 \meta{扩展名1} 的目录分配扩展名为 \meta{扩展名2} 的局部目录,预注册的条目均无需再分配。用于搭配题注标题 \cs{caption} 命令和 \pkg*{titletoc} 宏包的局部题注目录命令。
+ \begin{ctexexam}
+ \AllotPartialExt{loa}{pla}
+ \startlist[fancy]{loa}
+ \captionof{algorithm}{算法标题}
+ \stoplist[fancy]{loa}
+ \printlist[fancy]{loa}{}{}
+ \end{ctexexam}
\command{SetTocStyle}[\marg{条目名}\marg{风格名}\marg{键值列表}]
定义条目类型名称为 \meta{风格名} 的目录风格。使用 \cs*{ctexset} 命令设置目录样式时,除了条目标题定义选项 \option{tocline},其它选项只有在目录输出命令前设置才有效,定义完目录风格后用 \cs{UseTocStyle} 命令可以在正文中任意位置生效。如果是没有 \ding{73} 符号的选项,\meta{条目名} 设置为 \module*{toc}。
\command{UseTocStyle}[\marg{条目名}\marg{风格名}\marg{扩展名}]
@@ -947,9 +929,6 @@
\end{ctexexam}
\command{contentsmargin}[\oarg{修正距离}\marg{右边距}]
设置目录中引导线到版心右边的距离,用于条目页码的精细调整。当设计条目页码对齐方式或数字较大时,可以设置适当的 \meta{右边距}。\meta{修正距离} 是在过长而换行的标题右侧 \meta{右边距} 基础上附加的距离。此命令可在导言区全局使用或在 \option{tocformat} 选项给特定条目类型单独使用。
-\end{commands}
-
-\begin{options}
\keychoice{hang}{\fbox{true},false}
悬挂缩进选项 \option{hang} 使目录条目为悬挂缩进形式。缩进距离为条目标签及其与标题内容间距的长度和。通常情况下会统一设置条目标题是否悬挂缩进,因此这个选项被设计为对所有类型条目生效。
\keyval{lolskip}{弹性长度}\Default{10pt}
@@ -959,21 +938,23 @@
\keyval{bibetween}{代码钩子}
与选项 \option{between} 类似,是英文章节标题目录(如果启用)标题代码钩子。
\keychoice{dotalign}{\fbox{true},false}
- 引导线选项 \option{dotalign} 可以使目录引导线右端对齐并与页码保持一定间距,否则会与页码相连。
+ 将目录页码装进一个右对齐的水平盒子里。这样可以使目录引导线右端对齐并与页码保持一定间距,否则会与页码相连。
\keyval{pagenumwd}{刚性长度}\Default{1.55em}
- 目录条目页码的宽度。开启 \option{dotalign} 选项时宽度越大引导线与页码的距离就越大。
+ 设置开启 \option{dotalign} 选项时页码水平盒子的宽度。
\keyval{tocafter-every}{距离命令}\Default{\cs*{hspace}\Marg{1em}}
- 统一设置所有类型条目编号与标题间的代码(仅支持上述预注册的条目)。
+ 统一设置所有类型条目编号与标题间的代码。
\keyval{tocindent-every}{刚性长度}
- 统一设置所有类型条目的左边缩进(仅支持上述预注册的条目)。
+ 统一设置所有类型条目的左边缩进。
\keyval{tocrule-every}{引导线命令}
- 统一设置所有类型的目录引导线样式(仅支持上述预注册的条目)。
-\end{options}
+ 统一设置所有类型的目录引导线样式。
+ \command{ExcludeEveryTocName}[\marg{条目名列表}]\newtagv{2024bn}
+ 用于指定带有 \option*{every} 后缀选项排除的条目类型。
+\end{cnltxlist}
\section{环境和命令}
\subsection{文区命令}
-\begin{commands}
+\begin{cnltxlist}
\command{frontmatter}[\sarg\oarg{编号格式}]\Default{Roman}
前言区命令。使部分和章标题不编号,带有星号的变体命令不使用 \cs{cleardoublepage} 命令。页码 \meta{编号格式} 可设置为 \code{arabic}、\code{Alph}、\code{alph}、\code{Roman}、\code{roman} 和 \code{chinese} 形式。
\command{mainmatter}[\sarg]
@@ -984,20 +965,18 @@
清双页命令可以确保下一页文本总在奇数页开始,在奇数页使用它会产生空白偶数页。文区命令 \cs{frontmatter} 和 \cs{mainmatter} 会用到清双页命令,在启用文类选项 \option*{openright} 时标题命令 \cs*{part} 和 \cs*{chapter} 也会默认用到清双页命令。
\command{blankpagestyle}[\marg{页面风格}]
多出空白页的 \meta{页面风格} 用空白页面风格命令 \cs{blankpagestyle} 全局指定,或使用清双页命令的可选参数局部指定。空白页默认的风格为 \code{empty},即空的页眉页脚。
- \end{commands}
+\end{cnltxlist}
\subsection{目录命令}
\label{subsec:directory command}
\easybook{} 改进了标准文档类中定制性较低的章节标题和图表标题目录命令。现在目录命令带有可选参数用于设置标题格式和栏数等,并且与标准文档类不同的是目录命令可在正文中\textbf{重复}使用。更多目录命令的创建和样式设置可参考\ref{subsec:catalog}。
-\begin{commands}
+\begin{cnltxlist}
\command{tableofcontents}[\sarg\oarg{键值列表}\darg{代码钩子}]
章节标题目录命令,支持中英文双语标题目录输出。带有星号参数不输出目录条目上方的标题。\meta{代码钩子} 是当输出方案 \keyis{plan}{both} 时中文与英文目录之间执行的代码,可以插入设置目录样式和换页等命令。
- \begin{options}
\keychoice{plan}{\fbox{cn},bi,both}\newtag[Exp]%
章节标题目录的输出方案。\code{cn} 只输出中文目录,\code{bi} 只输出英文目录。\code{both} 同时连续输出中文和英文目录,需要与双语目录标题命令 \cs{bichapter} 等或双语标题选项 \option{title} 配合使用。
\keyval{bicontentsname}{英文目录标题}\Default{Contents}
英文目录的标题,为通用接口命令 \cs*{ctexset} 的选项。
- \end{options}
\command{listoffigures}[\sarg\oarg{键值列表}]
输出图片目录命令。带有星号参数的命令不输出目录标题。
\command{listoftables}[\sarg\oarg{键值列表}]
@@ -1006,11 +985,8 @@
输出代码目录命令。带有星号参数的命令不输出目录标题。
如果需要部分而不是全文的目录或其它类型的目录,可以查看 \pkg*{titletoc} 宏包的相关示例。如果需要双语图表目录,可以查看 \pkg*{bicaption} 宏包的相关示例。上面目录命令的可选参数改进了原本单一的功能,也提供了配置命令 \cs{SetTocOuter} 在目录命令外设置选项默认值。
- \begin{commands}
\command{SetTocOuter}[\marg{键值列表}]\newtag%
统一设置上述所有目录可选参数的默认值\footnote{由于目录命令通常只在文中使用一次,因此不设计为可以分别指定不同目录的参数。},其中 \meta{键值列表} 的选项如下:
- \end{commands}
- \begin{options}
\keyval{level}{标题命令}
设定输出目录标题的命令。如果使用 \option{title} 选项设置了双语标题则需要配合双语标题命令。
\begin{ctexexam}
@@ -1029,7 +1005,6 @@
用于更改目录的双语标题。标题之间用一个英文逗号分开,对主目录来说前部分为中文目录标题,后部分为英文目录标题,对图表和代码目录来说后部分则是加入英文目录的条目。也可以只有一部分,表示中文目录的标题。
\keychoice{bilist}{mix,\fbox{new}}
确定章节标题目录中双语标题条目的输出排列方式。选项 \code{mix} 使每个英文标题条目在中文目录中跟随对应的中文标题输出,\code{new} 则在新建的英文目录中输出英文标题。这是个全局选项,在所有目录的可选参数中使用均可生效,但推荐在章节标题目录中使用。
- \begin{commands}
\command{ebifbitoc}[\marg{英文目录代码}\marg{中文目录代码}]\newtag%
启用混合双语目录条目即 \keyis{bilist}{mix} 时,在设置目录样式时可以配合 \cs{ebifbitoc} 命令判断当前条目是否为英文,从而输出不同的代码。
\begin{ctexexam}
@@ -1041,7 +1016,6 @@
\UseTocStyle{section}{fancy}{toc}
\tableofcontents[bilist = mix]
\end{ctexexam}
- \end{commands}
\keyval{format}{目录标题格式}
设置目录标题的格式,在标题级别为 \code{chapter} 或者 \cls*{article} 模式且标题级别为 \code{section} 时有效。
\keyval{aftername}{标签后代码}
@@ -1052,12 +1026,11 @@
控制章节标题与之前正文的分隔关系。一般用于设置是否在标题之前分页或者设置行间罚点,生效情形同上。
\keyval{pagestyle}{页面风格}\Default{empty}
目录标题所在页的页面格式,仅当目录以 \code{chapter} 级别输出时有效。除了上述选项还支持 \CTeX 键值列表路径 \module*{chapter} 或 \module*{section} 所有的章节标题样式选项。
- \end{options}
-\end{commands}
+\end{cnltxlist}
\subsection{双语章节标题和新建标题}
双语目录标题命令目前设置了常用的三个级别,它们将中文标题正常输出,并使中英文标题加入双语目录。类似于标准文档类,这三个标题命令分别具有独立的计数器\footnote{默认情况下与普通标题命令共享使用计数器。},并对应 \cs*{the}\meta{计数器} 的值,可以用于 \option{number} 选项更改英文目录中标题的编号格式。这个功能是为国内一些高校的学位论文模板的要求设计,在一般情况和英文模式下\textbf{不需要使用}。
-\begin{commands}
+\begin{cnltxlist}
\command{bichapter}[\sarg\oarg{目录中文标题}\marg{中文标题}\marg{目录英文标题}]
\code{chapter} 章级别的双语目录标题命令,具有独立的 \code{bichapter} 计数器。
\command{bisection}[\sarg\oarg{目录中文标题}\marg{中文标题}\marg{目录英文标题}]
@@ -1066,19 +1039,14 @@
\code{subsection} 小节级别的双语目录标题命令,具有独立的 \code{bisubsection} 计数器。
它们的星号变体命令使文中标题不编号,但是仍然加入双语目录,若英文标题参数空置那么仅加入中文目录而不加入英文目录,这一特点与 \cs*{chapter}\sarg{} 等命令的行为不太一样,在一些情况下会用到。可选参数是目录中的中文条目,默认与中文标题一致,正文标题过长时可用它设置在目录中显示的标题。默认情况下双语目录条目的格式是一致的,共享使用 \module*{toc} 模块的设置。提供了两个选项 \option{biname} 和 \option{binumber} 修改英文目录章标题条目的名字及编号:
- \begin{options}
\optpath{chapter/}\kvsplit+{biname}{英文目录前名字,英文目录后名字}\Default{Chapter\cs*{space}}
更改英文目录 \code{chapter} 级别的标题条目编号前后名字,类似于 \CTeX 的 \option*{name} 选项。
\optpath{chapter/}\key{binumber}{英文目录编号输出命令}\Default{\cs*{arabic}\Marg{chapter}}
更改英文目录 \code{chapter} 级别的标题条目编号输出格式,类似于 \CTeX 的 \option*{number} 选项。下面两种设置英文目录中章标题编号的方式等效:
- \end{options}
\begin{ctexexam}
\ctexset{chapter/binumber = \arabic{chapter}}
\BeforeAddtoBitoc{\ctexset{chapter/nmuber = \arabic{chapter}}}
\end{ctexexam}
-\end{commands}
-
-\begin{commands}
\command{appendix}[\splitoarg{前名字,后名字}\darg{编号输出命令}]
附录起始命令,其后的章节标题变为附录形式。\meta{前名字} 为英文目录中附录标题的前名字,同理 \meta{后名字} 为英文目录中附录标题的后名字。前后名字之间用一个半角逗号分开,也可以只有一部分,表示英文目录中附录标题前名字。\meta{编号输出命令} 为附录标题计数器在英文目录中的编号命令。注意这两个参数仅对 \code{bichapter} 级别的标题生效。
\command{BeforeAddtoBitoc}[\sarg\marg{英文标题加入目录前的代码}]
@@ -1087,27 +1055,28 @@
\BeforeAddtoBitoc{\ctexset{section/name = Section\space}}
\bisection{中文标题}{English title}
\end{ctexexam}
-\end{commands}
-
-\begin{commands}
- \command{NewTitleCommand}[\marg{条目名}\marg{章节层次}]\newtagv{2024aw}%
- 创建一个命令名为 \meta{条目名} 新章节标题,并且支持 \CTeX 中的标题样式选项机制,默认的标题格式为空。同时创建一个名为 \meta{条目名} 的计数器和标记命令 \code{\textbackslash}\meta{条目名}\code{\textcolor{cs}{mark}}。同时还需指定标题的 \meta{章节层次},例如标准文档类中 \code{chapter} 级别为 \code{0}。
+ \command{NewTitleCommand}[\oarg{基础标题}\marg{条目名}\marg{章节层次}]\newtagv{2024aw}%
+ 创建一个命令名为 \meta{条目名} 新章节标题,并且支持 \CTeX 中的标题样式选项机制。指定可选参数后标题格式除了编号/名字会与 \meta{基础标题} 相同,否则默认为空。同时创建一个名为 \meta{条目名} 的计数器和标记命令 \code{\textbackslash}\meta{条目名}\code{\textcolor{cs}{mark}}。同时还需指定标题的 \meta{章节层次},例如标准文档类中 \code{chapter} 级别为 \code{0}。
\command{NewTitleEntryCommand}[\oarg{扩展名}\marg{条目名}]\newtagv{2024aw}%
创建一个命令 \code{\textbackslash}\meta{条目名}\code{\textcolor{cs}{entry}}\marg{标题},仅将 \meta{标题} 加入文件扩展名为 \meta{扩展名} 的目录中,而不在正文中输出标题,默认扩展名为 \code{toc}。
\begin{ctexexam}
- \NewTitleCommand{lchapter}{0}
+ \NewTitleCommand[chapter]{lchapter}{0}
\NewTitleEntryCommand{lchapter}
\contentsuse{lchapter}{toc}
\RegisterTocName{lchapter}
- \ctexset{lchapter/number = \thechapter}
+ \ctexset
+ {
+ lchapter/runin = true,
+ lchapter/number = \thelchapter
+ }
\lchapter{正常标题}
\lchapterentry{加入目录的标题}
\end{ctexexam}
-\end{commands}
+\end{cnltxlist}
\subsection[上标和下标]{上标和下标\smodule{tools}}
上标和下标的功能来自 \pkg*{spbmark} 宏包,下面有三个命令可以用于输出上标和下标。可以使用键值列表的形式对上下标格式进行局部或全局设置,下面命令中两个可选参数的键值列表是等效的。全局设置的详情见\ref{subsubsec:super-sub-script},更多命令和详细用法见 \pkg*{spbmark} 宏包说明文档。
-\begin{commands}
+\begin{cnltxlist}
\command{super}[\sarg\oarg{键值列表1}\marg{内容}\oarg{键值列表2}]
输出上标的命令,可用于文本和数学模式,在数学模式中可代替 \code{\^{}} 符号和 \cs*{sp} 命令。
\command{sub}[\sarg\oarg{键值列表1}\marg{内容}\oarg{键值列表2}]
@@ -1118,7 +1087,6 @@
根据上下标处于数学还是文本模式分别设置不同的值,应当在格式命令或偏移距离选项中使用。
上下标命令键值列表中共同的选项如下所示。当下面除 \option{mode} 以外的选项用于 \module*{style} 模块全局设置时,它们将根据前面最近一个命令的类型设定相应值。
- \begin{options}
\keyval{vmove}{刚性长度}\Default{0pt}
上标或下标的垂直偏移。如果是上下标命令使用则代表上标和上标间的额外垂直距离 \option{vsep}。
\keyval{hmove}{刚性长度}\Default{0pt}
@@ -1131,20 +1099,19 @@
段落中当前行上标或下标的基线与下一行的间距。
\keychoice{mode}{text,math,\fbox{match}}
上标或下标的输出格式。可以为文本 \code{text} 或数学 \code{math} 模式。当使用选项 \code{match} 时可以根据当前段落所处的模式自动匹配。
- \end{options}
-\end{commands}
+\end{cnltxlist}
\subsection{公式}
-\begin{environments}\noitemsep
+\begin{cnltxlist}[itemsep = 0ex]
\environment{equation}\default{}
\environment{multline}\default{}
\environment{gather}\default{}
\environment{align}
\pkg*{amsmath} 宏包提供了一系列行间数学环境,它们可以排布各种对齐或不对齐的公式组。\env{multline} 环境用于一行无法放下的长公式,\env{gather} 环境用于每行居中的公式组,\env{align} 环境用于多列对齐的公式组。还有例如 \pkg*{mathtools} 等对数学功能进行扩展的宏包,提供了更全面的数学命令与环境。
-\end{environments}
+\end{cnltxlist}
\subsection{表格}
-\begin{environments}\noitemsep
+\begin{cnltxlist}[itemsep = 0ex]
\environment{tabular}[\marg{列格式}]\default{}
\environment{tblr}[\marg{键值列表}]
\pkg*{tabularray} 是一个强大且全面的表格宏包,不依赖其它表格宏包所以同时使用不会产生冲突。不仅提供了各种传统表格宏包的功能,还实现了用键值列表方式简便地设置表格样式。具体用法可见宏包的说明文档,下面演示一个 \env{tblr} 表格的用法:
@@ -1166,10 +1133,10 @@
Rho & Sigma & Tau & Upsilon
\end{tblr}
\end{ctexexam}
-\end{environments}
+\end{cnltxlist}
\subsection{列表}
-\begin{commands}
+\begin{cnltxlist}
\command{setlist}[\sarg\splitoarg{列表类型,级别}\marg{键值列表}]
列表宏包 \pkg*{enumitem} 为系统预置的三个列表环境提供了灵活的标签以及间距控制,这是设置列表环境的通用接口命令。带有星号参数的命令在原有格式上补充。\meta{列表类型} 是排序列表 \code{enumerate}、常规列表 \code{itemize} 和主题列表 \code{description} 三个基本类型,也可以是 \cs{newlist} 新建的定理环境,若不指定则设置所有列表类型的格式。若不指定 \meta{级别} 则设置所有列表级别的格式。
\command{newlist}[\marg{列表名}\marg{列表类型}\marg{最大级别}]
@@ -1182,24 +1149,24 @@
\newlist{steps}{enumerate}{2}
\setlist[steps,1,2]{label = (\alph*)}
\end{ctexexam}
-\end{commands}
+\end{cnltxlist}
-\begin{environments}\noitemsep
+\begin{cnltxlist}[itemsep = 0ex]
\environment{enumerate}[\oarg{键值列表}]\default{}
\environment{itemize}[\oarg{键值列表}]\default{}
\environment{description}[\oarg{键值列表}]
已为三种列表各自预置了三个级别。同种列表或不同种列表间的不同级别可相互嵌套,可以使用短编号的形式,带有星号的环境为行内列表。默认列表标签与标准文档类一致,下面举几个更改列表标签以及其它格式的例子:
\begin{ctexexam}
- \setlist*{wide = 0em} % 取消所有列表的左边距
+ \setlist*{wide = 0pt} % 取消所有列表的左边距
\begin{enumerate}[label = (\arabic*),leftmargin = 1cm,resume]
\begin{enumerate*}[(1)] % 短编号形式
\begin{itemize}[label = \textbullet,labelsep = *]
\begin{description}[font = \sffamily\bfseries,style = nextline]
\end{ctexexam}
-\end{environments}
+\end{cnltxlist}
\subsection{悬挂缩进}
-\begin{commands}
+\begin{cnltxlist}
\command{hangpara}[\marg{缩进长度}\marg{缩进开始行数}]
悬挂缩进命令 \cs{hangpara} 使其后的一个段落保持悬挂缩进。参数与 \env{hangparas} 环境相同,不过只有一个段落。\meta{缩进长度} 可以是带单位的数值或由文本长度测定命令 \cs{widthof} 提供。
\command{hangfrom}[\sarg\oarg{缩进长度}\marg{悬挂内容}\oarg{缩进开始行数}]\newtag%
@@ -1208,22 +1175,16 @@
\hangfrom[\hangwd + 1em]{悬挂标签\hspace{0.5em}}[1]
\hangfrom*[3em]{}
\end{ctexexam}
-\end{commands}
-
-\begin{environments}
\environment{hangparas}[\marg{缩进长度}\marg{缩进开始行数}]
悬挂缩进环境 \env{hangparas} 有两个必选参数,使其中的段落均保持悬挂缩进。每个段落的缩进将以 \meta{缩进长度} 从 \meta{缩进开始行数} 开始。
-\end{environments}
+\end{cnltxlist}
\subsection{代码}
-\begin{commands}
+\begin{cnltxlist}
\command{lstdefinestyle}[\marg{代码风格}\marg{键值列表}]
代码抄录宏包 \pkg*{listings} 的代码风格定义命令,提供大量选项对代码样式进行高度定制。可以根据需要的代码语言和样式定义多种风格,默认使用的 \meta{代码风格} 为 \code{lst-latex}。
\command{lstinline}[\oarg{键值列表}\marg{行内代码}]
行内代码抄录命令。较原生的 \cs*{verb} 命令有较大改进,具有代码语言和样式支持。
-\end{commands}
-
-\begin{environments}
\environment{lstlisting}[\oarg{键值列表}]
行间代码抄录环境。支持多种语言库,默认使用 \code{LaTeX} 代码语言,可使用 \meta{键值列表} 局部修改代码样式。另外还提供了 \cs{lstnewenvironment} 命令包装自定义名称的代码环境。
\begin{ctexexam}
@@ -1238,18 +1199,18 @@
}
\lstnewenvironment{mypascal}[1][]{\lstset{style = lst-pascal,#1}}{}
\end{ctexexam}
-\end{environments}
+\end{cnltxlist}
-\begin{options}\noitemsep
+\begin{cnltxlist}[itemsep = 0ex]
\keyval{lstlistlistingname}{代码目录标题名}\default{}
\keyval{lstlistingname}{代码题注标题名}
代码目录名与代码环境题注名选项 \option{lstlistlistingname} 和 \option{lstlistingname} 用法与 \CTeX 使用手册标题汉化一节类似,可以看作对这节的扩展。
-\end{options}
+\end{cnltxlist}
\subsection{盒子}
\label{subsec:box}
文档类预置了两个行间盒子环境和两个行内盒子命令,需要在导言区\textbf{手动载入} \pkg*{tcolorbox} 宏包提供支持。它们 \meta{配置选项} 的键值列表可见宏包文档的Option Keys一节,可以进行边距、字体及背景颜色等各种个性化设置。如果 \meta{配置选项} 较长且希望在原有基础上改为全局固定的样式,可以使用 \cs{addtotcbstyle} 命令设置,第一个参数为 \code{tc-}\meta{环境或命令名}。
-\begin{commands}
+\begin{cnltxlist}
\command{deftcbstyle}[\marg{盒子风格}\marg{键值列表}]
新建或重置一个名称为 \meta{盒子风格} 的 \pkg*{tcolorbox} 宏包盒子风格,可以与 \cs{addtotcbstyle} 命令联用。
\command{addtotcbstyle}[\marg{盒子风格}\marg{键值列表}]
@@ -1270,9 +1231,6 @@
盒子内容
\end{mytcbox}
\end{ctexexam}
-\end{commands}
-
-\begin{environments}
\environment{easyboxi}[\sarg\oarg{颜色名}\darg{段落标题}\oarg{配置选项}]
行间环境 \env{easyboxi} 创建一个带有三个可选参数的扁平盒子。使用星号参数时给盒子添加边框,\meta{颜色名} 选项设置背景颜色,\meta{段落标题} 选项可以设置标题,默认标题为空。
\begin{ctexexam}
@@ -1285,20 +1243,17 @@
\end{ctexexam}
\environment{easyboxii}[\sarg\oarg{颜色名}\darg{段落标题}\oarg{配置选项}]
环境 \env{easyboxii} 用法与 \env{easyboxi} 类似,同样带有三个可选参数。盒子的左边带有一条粗竖线,背景颜色为竖线颜色的浅色。\meta{颜色名} 选项可以设置竖线的颜色。使用星号参数则盒子无背景颜色。
-\end{environments}
-
-\begin{commands}
\command{eboxi}[\oarg{颜色名}\marg{内容}\oarg{配置选项}]
行内盒子命令 \cs{eboxi} 具有模糊边缘类似高亮的效果。
\command{eboxii}[\oarg{颜色名}\marg{内容}\oarg{配置选项}]
行内盒子命令 \cs{eboxii} 则有直角边缘和四周框线,效果类似带背景色的 \cs*{fbox} 盒子。
-\end{commands}
+\end{cnltxlist}
\section{扩展功能}
\subsection{物理量}
-使用 \pkg*{siunitx} 宏包提供国际单位制的物理量支持。\pkg*{siunitx} 宏包旨在为 \LaTeX 用户提供一种统一的方法,以便正确、轻松地排版数字和单位。\pkg*{siunitx} 的设计理念是默认遵循约定的规则,但允许通过选项设置进行更改。
-\begin{commands}
+使用 \pkg*{siunitx} 宏包提供国际单位制的物理量支持。\pkg*{siunitx} 宏包旨在为 \hologo{LaTeX} 用户提供一种统一的方法,以便正确、轻松地排版数字和单位。\pkg*{siunitx} 的设计理念是默认遵循约定的规则,但允许通过选项设置进行更改。
+\begin{cnltxlist}
\command{num}[\oarg{键值列表}\marg{数字}]
\cs{num} 命令可以输出以科学计数法表示的数值。
\command{unit}[\oarg{键值列表}\marg{单位}]
@@ -1313,21 +1268,21 @@
\qty{5}{\mole}
\qtyrange[unit-color = green]{1.5}{4}{kg}
\end{ctexexam}
-\end{commands}
+\end{cnltxlist}
\subsection{化学式}
除了以普通公式的方式,化学式的输出还可用 \pkg*{chemformula} 宏包实现。\pkg*{chemformula} 的工作原理与 \pkg*{mhchem} 非常相似,但对化合物、化学计量数和箭头的输入方式更为严格。同时 \pkg*{chemformula} 提供了多种自定义输出的可能性。
-\begin{commands}
+\begin{cnltxlist}
\command{ch}[\oarg{键值列表}\marg{化学式}]
无机化学式使用 \cs{ch} 命令书写。化合物表达式中的原子数不需要加下标符号,化学计量数与表达式间隔一个空格。
\begin{ctexexam}
\ch{[Cu(NH3)4]^2+}
\ch{Cu2S + 2 O2 - 2 e^- == 2 Cu^2+ + SO4^2-}
\end{ctexexam}
-\end{commands}
+\end{cnltxlist}
\subsection{计数器}
-\begin{commands}\noitemsep
+\begin{cnltxlist}[itemsep = 0ex]
\command{newcounter}[\marg{计数器}\oarg{父计数器}]\default{}
\command{setcounter}[\marg{计数器}\marg{整数}]\default{}
\command{stepcounter}[\marg{计数器}]
@@ -1340,10 +1295,10 @@
\counterwithin[\Roman]{child}[-]{parent}
\counterwithout*{child}{parent}
\end{ctexexam}
-\end{commands}
+\end{cnltxlist}
\subsection{标签引用}
-\begin{commands}
+\begin{cnltxlist}
\command{labelformat}[\marg{计数器}\marg{标签引用格式}]
标签格式命令 \cs{labelformat} 可以设置标签引用格式。\meta{标签引用格式} 中 \code{\#1} 代表 \cs*{the}\meta{计数器},可以设置引用序号的前缀和后缀。也可以使用 \pkg*{cleveref} 宏包提供更强大的标签功能。
\command{AtEndPreamble}[\marg{钩子代码}]
@@ -1353,24 +1308,24 @@
\labelformat{chapter}{第\thechapter 章}
\AtEndPreamble{\usepackage{cleveref}}
\end{ctexexam}
-\end{commands}
+\end{cnltxlist}
\subsection{图表题注}
\pkg*{caption} 宏包提供了多种方法来定制浮动环境(例如 \env{figure} 和 \env{table})中的标题,并可与许多其它宏包配合使用。功能包括旋转题注、侧向题注和连续题注等。
-\begin{commands}
+\begin{cnltxlist}
\command{captionsetup}[\oarg{条目名}\marg{键值列表}]
这是 \pkg*{caption} 宏包的接口命令,\meta{键值列表} 提供多个选项更改图表题注的格式。题注主要由三部分组成:标题标签即图表名与题注编号的组合,标题文本本身通常是内容的简短描述,以及将文本与标签分开的题注分隔符。可以在导言区设置整体格式,也可以在正文使用局部更改格式。
-\end{commands}
+\end{cnltxlist}
-\begin{commands}\noitemsep
+\begin{cnltxlist}[itemsep = 0ex]
\command{caption}[\sarg\oarg{目录标题}\marg{标题}]\default{}
\command{captionof}[\sarg\marg{条目名}\oarg{目录标题}\marg{标题}]\default{}
\command{bicaption}[\sarg\oarg{目录中文标题}\marg{中文标题}\oarg{目录英文标题}\marg{英文标题}]
题注命令 \cs{caption} 用于在图表上下方插入题注,需要在浮动环境 \env*{figure} 和 \env*{table} 中使用。在浮动环境外可以使用 \cs{captionof} 命令,第一个参数指定条目名。可以搭配 \pkg*{newfloat} 宏包创建更多类型的浮动环境并设置相应题注。\cs{bicaption} 命令可以实现中英文双语题注,需要在导言区载入 \pkg*{bicaption} 宏包,具体用法见说明文档。
-\end{commands}
+\end{cnltxlist}
\subsection{索引}
-\begin{commands}
+\begin{cnltxlist}
\command{indexsetup}[\marg{键值列表}]
\pkg*{imakeidx} 宏包增强了索引的功能,可使用户在制作和排版文档的同时制作一个或多个索引。这是 \pkg*{imakeidx} 宏包的接口命令,用于设置索引表的整体格式。
\command{index}[\oarg{索引名}\marg{标签}]
@@ -1379,22 +1334,20 @@
用于导言区开启索引收集的命令。这个命令可以重复使用收集多个索引表,以不同的 \meta{索引名} 作为区分,如果仅打印一个索引表没必要重复使用。
\command{printindex}[\sarg\oarg{键值列表}]
打印不同索引表的命令。这个命令被重新定义,\meta{键值列表} 中的选项与\ref{subsec:directory command} 其它目录命令相同,但是接口命令 \cs{indexsetup} 的部分选项失效。
- \begin{options}
\keyval{name}{索引名}
指定输出名为 \meta{索引名} 的索引表,如果只使用一个索引表则默认为项目文件名不需要指定。
- \end{options}
-\end{commands}
+\end{cnltxlist}
\subsection{边注}
-\begin{commands}
+\begin{cnltxlist}
\command{marginnote}[\oarg{左文本}\marg{右文本}\oarg{垂直偏移}]
边注命令用于在两侧页边空白添加标注。如果只给定了 \meta{右文本},那么边注在奇偶数页文字相同。如果同时给定了 \meta{左文本},则偶数页使用 \meta{左文本} 的文字。
\command{reversemarginpar}
边注位置设置命令,用于将边注排版到与默认边空位置相反的边空中。
-\end{commands}
+\end{cnltxlist}
\subsection{公式符号对照}
-\begin{environments}
+\begin{cnltxlist}
\environment{eqcomp}[\oarg{键值列表1}\darg{键值列表2}]
一些公式之后可以使用基于列表环境的 \env{eqcomp} 进行符号对照。对照列表的 \meta{键值列表2} 与 \pkg*{enumitem} 的选项相同,一般较少用到,可以用于设置垂直间距等。
\begin{ctexexam}
@@ -1404,16 +1357,12 @@
\symb{C}[---] 符号说明
\end{eqcomp}
\end{ctexexam}
-\end{environments}
-
-\begin{commands}
\command{symb}[\sarg\marg{符号}\oarg{引导符}]
符号条目命令 \cs{symb} 类似 \cs*{item},需要在环境内使用,带有星号的命令可在文本段落单独使用。
\command{seteqcomplist}[\marg{键值列表2}]
对照列表条目格式的 \meta{键值列表2} 可以使用 \cs{seteqcomplist} 全局设置。
\command{seteqcomp}[\marg{键值列表1}]
对照环境的 \meta{键值列表1} 可以使用 \cs{seteqcomp} 全局设置,它的选项如下:
- \begin{options}
\keyval{width}{符号宽度}\Default{10pt}
设置适当的符号宽度可以防止文字重叠和边界溢出等问题。
\keyval{delim}{引导符}\Default{——}
@@ -1432,22 +1381,21 @@
符号的字体。数学和文本符号模式应采用不同的字体命令,最后一个命令可以接受一个参数,这个参数为符号。
\keychoice{mode}{\fbox{math},text}
符号字体模式,可以为数学字体或者文本字体。
- \end{options}
-\end{commands}
+\end{cnltxlist}
\subsection{插入文档}
-\begin{commands}
+\begin{cnltxlist}
\command{includepdf}[\oarg{键值列表}\marg{文档名}]
该命令由文档宏包 \pkg*{pdfpages} 提供。可以将其它 \code{pdf} 文档插入当前文档,比如插入其它软件制作的封面。可选参数可以指定插入页数、逻辑页和横向页面等,详情查看宏包文档。
-\end{commands}
+\end{cnltxlist}
\subsection{下划线}
-\begin{commands}\noitemsep
+\begin{cnltxlist}[itemsep = 0ex]
\command{uline}[\marg{下划直线}]\default{}
\command{uuline}[\marg{下划双直线}]\default{}
\command{uwave}[\marg{下划波浪线}]
\pkg*{ulem} 宏包提供了多种下划线命令,可以重新定义 \cs{ULthickness} 命令控制下划线的粗细。下划线的深度由 \cs{ULdepth} 控制,默认值 \cs*{maxdimen} 是一个允许深度根据当前字体变化的特殊标志,当然也可以使用 \cs*{setlength} 设定为指定深度。
-\end{commands}
+\end{cnltxlist}
\appendix
\setlist[1]{}
@@ -1503,6 +1451,13 @@
\end{version}
\shortversion{v = 2024aw,date = 2022/04/22,changes = 新增新建章节标题命令 \cs{NewTitleCommand} 和 \cs{NewTitleEntryCommand}。}
\shortversion{v = 2024bb,date = 2022/04/26,changes = 增加对 \pkg*{thmtools} 宏包定理环境目录 \cs{listoftheorems} 的支持。}
+ \shortversion{v = 2024bk,date = 2022/05/07,changes = 新增局部题注目录分配命令 \cs{AllotPartialExt}。}
+ \begin{version}[v = 2024bn,date = 2022/05/10]
+ \fixed
+ \item 修复 \module*{toc} 模块中带有 \option*{every} 后缀的选项不对所有已注册条目有效的问题。
+ \added
+ \item 新增统一设置所有目录格式时的条目类型排除命令 \cs{ExcludeEveryTocName}。
+ \end{version}
\end{changelog}
\nocite{*}
diff --git a/macros/latex/contrib/elpres/README.md b/macros/latex/contrib/elpres/README.md
index bc1fe64089..8b303e2263 100644
--- a/macros/latex/contrib/elpres/README.md
+++ b/macros/latex/contrib/elpres/README.md
@@ -1,4 +1,4 @@
-Elpres v1.0.1 2021-08-10
+Elpres v1.1 2024-05-29
# Short description
@@ -18,13 +18,10 @@ For enhanced features the packages `ragged2e`, `overlays`, `wallpaper`,
A homepage for the elpres project: http://vkiefel.de/elpres.html with
additional material.
-# Changes in v1.0.1
-
-* A new class option `ballsymb` was added,
-* The manual was updated,
-* Detailed installation instructions for manual installation were
- updated in this file (`README.md`).
+# Changes in v1.1
+* Minor corrections and fixes in `elpres.cls`,
+* The manual was updated.
# Installation
diff --git a/macros/latex/contrib/elpres/doc/elpres-example.pdf b/macros/latex/contrib/elpres/doc/elpres-example.pdf
index c3c4b30787..435b0a5e6b 100644
--- a/macros/latex/contrib/elpres/doc/elpres-example.pdf
+++ b/macros/latex/contrib/elpres/doc/elpres-example.pdf
Binary files differ
diff --git a/macros/latex/contrib/elpres/doc/elpres-example.tex b/macros/latex/contrib/elpres/doc/elpres-example.tex
index 9bd56104a4..f2f0c3474c 100644
--- a/macros/latex/contrib/elpres/doc/elpres-example.tex
+++ b/macros/latex/contrib/elpres/doc/elpres-example.tex
@@ -1,30 +1,37 @@
-\documentclass[12pt,pdftex,sansfont,4x3]{elpres}
-\usepackage[latin1]{inputenc}
-\usepackage[perpage,para,symbol,norule]{footmisc}
-\usepackage[document]{ragged2e}
-
-\RaggedRight
-
+\documentclass[11pt,pdftex,4x3]{elpres}
+\usepackage[utf8]{inputenc}
+\usepackage[perpage,hang]{footmisc}
+\setlength{\footnotemargin}{0.55em}
+\usepackage[document,originalparameters]{ragged2e}
+\usepackage{eso-pic}
+
+\newcommand{\altfnarea}[1]{%
+\AddToShipoutPictureFG*{
+\setlength{\unitlength}{1mm}
+ \put(1.2,1.2){\parbox[b]{0.9\paperwidth}%
+ {\scriptsize \textcolor{darkgray}{#1}}}}}
+
+% % Please uncomment the desired presentation scheme
\usepackage{elpreswhitebluescheme}
% \usepackage{elpresgrayscheme}
% \usepackage{elpreswhiteredscheme}
% \usepackage{elpresbluelightgrayscheme}
% \usepackage{elpreswhitetealscheme}
-
\begin{document}
\begin{titlepage}
\centering
- \distance{1}
+ \distance{1.35}
{
\Huge \bfseries \textcolor{eptitlecolor}{Title of presentation} \par
}
- \vspace{1.3ex} \large
- Author\\[2ex]Date and place of presentation
+ \vspace{1.3ex} \Large
+ Author\\[2ex]
+ {\normalsize \textcolor{ephighlightcolor}{Date and place of presentation}}
\distance{2}
\end{titlepage}
-\begin{psli}[Title of first page]
+\begin{psli}[Title of first slide]
This is an example of a \LaTeX\ \texttt{itemize} list
\begin{itemize}
@@ -32,14 +39,14 @@ This is an example of a \LaTeX\ \texttt{itemize} list
\item second line in an itemized list
\item third line in an itemized list
\end{itemize}
-
\end{psli}
-\begin{psli}[Title of second page\footnote{footnotes are often
- not a good idea for a presentation}]
-% \raggedright
-The second page with nested, ``vertically compressed'' lists using the
-\texttt{citemize} and \texttt{cenumerate} environments.
+\begin{psli}[Title of second slide\footnote{footnotes often are
+ not a good idea for a presentation, better avoid them!}]
+
+This page shows nested, ``vertically compressed'' lists using the
+\texttt{citemize} and \texttt{cenumerate} environments of
+ \texttt{elpres}:
\begin{citemize}
\item first line in an itemized list
@@ -48,38 +55,109 @@ The second page with nested, ``vertically compressed'' lists using the
\item first line of numbered list
\item second line of numbered list
\end{cenumerate}
- \item final line in itemized list\footnote{\dots\ it is therefore
- useful to write comments into a single footnote paragraph in order
- to save space}
+ \item final line in itemized list
\end{citemize}
-{\small For footnotes, the \texttt{footmisc} package, providing the
- options \texttt{perpage} and \texttt{symbol}, is recommended. \par}
+{\small For footnotes using \LaTeX's \verb+\footnote{}+ command,
+ the \texttt{footmisc} package, providing the
+ option \texttt{perpage}\footnote{this forces \LaTeX\ to start
+ footnote numbers with ``1'' on each slide}
+ is recommended.%
+ \footnote{another option is \texttt{symbol*} which allows
+ to mark footnotes with symbols instead of numbers} \par }
\end{psli}
-\begin{psli}[Title of third page]
+\begin{psli}[Title of third slide\textsuperscript{*}]
+ \begin{itemize} \item This page shows the use of footnotes
+ with the \verb+\altfnarea{}+ command
+ \item Definition and use of \verb+\altfnarea{}+\textsuperscript{\dag}
+ are described in the \texttt{elpres} manual
+
+ \altfnarea{\textsuperscript{*}This footnote comments the title;
+ \textsuperscript{\dag}\texttt{altfnarea}: \textbf{alt}ernative
+ \textbf{f}oot\textbf{n}otes \textbf{area}}
+ \end{itemize}
+\end{psli}
- \begin{cdescription}
-\item[environment name:] \texttt{cdescription}, comparable to
- \LaTeX s \texttt{des\-cription} environment
- \item[used for:] vertically compressed lists with small ``titles''
+\begin{psli}[Title of fourth slide]
+\begin{cdescription}
+ \item[environment name:] \texttt{cdescription}, comparable to
+ \LaTeX's \texttt{des\-cription} environment
+ \item[used for:] vertically compressed lists with small ``titles''
+ of items
\end{cdescription}
+\end{psli}
+
+\begin{psli}[Title of fifth slide]
+
+If justified text and hyphenation is to be suppressed, the
+\texttt{ragged2e} package may be used with the \texttt{document}
+and \texttt{originalparameters} options.
+
+\vspace{1ex}
+
+\fbox{\parbox{0.95\textwidth}{
+\footnotesize In order to avoid an option clash, \texttt{ragged2e}
+ should follow \texttt{footmisc} in the preamble, if both packages are
+ used. \par }}
\end{psli}
-\begin{psli}[A page with two columns]
-
- \begin{minipage}[b]{0.58\textwidth}
+\begin{psli}[A slide with two columns\textsuperscript{*}]
+ \begin{minipage}[b][0.6\textheight][t]{0.5\textwidth}
\includegraphics[width=1.0\textwidth]{ctan-lion}
\end{minipage}
- \hspace{0.4em}
- \begin{minipage}[b]{0.39\paperwidth} \small
+ \hspace{0.1em}
+ \begin{minipage}[b][0.6\textheight][t]{0.38\textwidth}
+ \footnotesize
The ``CTAN \TeX-lion'' drawn by Duane Bibby,
thanks to \texttt{ctan.org}
-
\end{minipage}
+ \altfnarea{\textsuperscript{*}using \texttt{minipage}}
\end{psli}
+\begin{psli}[Code of ``A slide with two columns'']
+\footnotesize
+\begin{verbatim}
+
+\begin{psli}[A slide with two columns\textsuperscript{*}]
+ \begin{minipage}[b][0.6\textheight][t]{0.5\textwidth}
+ \includegraphics[width=1.0\textwidth]{ctan-lion}
+ \end{minipage}
+ \hspace{0.1em}
+ \begin{minipage}[b][0.6\textheight][t]{0.38\textwidth}
+ \footnotesize
+ The ``CTAN \TeX-lion'' drawn by Duane Bibby,
+ thanks to \texttt{ctan.org}
+ \end{minipage}
+ \altfnarea{\textsuperscript{*}using \texttt{minipage}}
+\end{psli}
+\end{verbatim}
+\end{psli}
+
+\begin{psli}[A slide with a logo using the \texttt{eso-pic} package]
+\AddToShipoutPictureBG{
+\setlength{\unitlength}{1mm}
+ \put(108,79){\includegraphics[height=16mm]{ctan-lion}}
+}
+
+The code for placing the logo {\scriptsize (details are explained
+in the \texttt{elpres} manual)}:
+
+{ \footnotesize
+\begin{verbatim}
+ \AddToShipoutPictureBG{
+ \setlength{\unitlength}{1mm}
+ \put(108,79){\includegraphics[height=16mm]{ctan-lion}}
+ }
+\end{verbatim}}
+
+This makes the logo visible on the current and on all following pages.
+The starred version: {\footnotesize \verb+\AddToShipoutPictureBG*{}+
+} shows the picture on the current slide only.
+\end{psli}
+
+
\begin{rsli}
A final page written with the \textcolor{ephighlightcolor}{\texttt{rsli}}
environment
diff --git a/macros/latex/contrib/elpres/doc/elpres-manual.pdf b/macros/latex/contrib/elpres/doc/elpres-manual.pdf
index 9bc920796c..08d4756c2f 100644
--- a/macros/latex/contrib/elpres/doc/elpres-manual.pdf
+++ b/macros/latex/contrib/elpres/doc/elpres-manual.pdf
Binary files differ
diff --git a/macros/latex/contrib/elpres/doc/elpres-manual.tex b/macros/latex/contrib/elpres/doc/elpres-manual.tex
index ab5fe4d396..932bb625eb 100644
--- a/macros/latex/contrib/elpres/doc/elpres-manual.tex
+++ b/macros/latex/contrib/elpres/doc/elpres-manual.tex
@@ -1,25 +1,37 @@
-% -*- coding:utf-8 -*-
\documentclass[11pt,a4paper]{article}
% to be compiled with lualatex
+%% begin comment out for tth
+\usepackage{polyglossia}
+\setdefaultlanguage{english}
+%% end comment out for tth
+
\usepackage{parskip}
\usepackage[a4paper,hmargin=2.4cm,bottom=3.2cm]{geometry}
\usepackage{makeidx}
\usepackage{url}
-\usepackage{framed}
\usepackage{graphicx}
\usepackage[x11names,svgnames]{xcolor}
\usepackage{enumitem}
+%% \usepackage[para,ragged]{footmisc}
\usepackage{microtype}
+% it may be necessary to comment out `microtype' with polyglossia loaded
-\usepackage{luaotfload}
-\usepackage{fontspec}
+% \usepackage{luaotfload}
+% \usepackage{fontspec}
+% \usepackage[default]{fontsetup}
+\usepackage[olddefault]{fontsetup}
+% \usepackage[times]{fontsetup}
\makeindex
-%% for tth (generate .html): comment out "noitemsep" temporarily !!
+%% * for a run of tth (generate .html):
+%% - comment out "noitemsep" temporarily !!
+%% - comment out \usepackage{polyglossia} and \setdefaultlanguage{english}
+%%
+
% Commands for indication changes in updated versions:
% changed, inserted
@@ -39,8 +51,8 @@
\title{\textsf{elpres} --- electronic presentations \\ with (pdf/Lua)\LaTeX}
\author{Volker Kiefel\thanks{volker dot kiefel at freenet dot de,
\url{http://vkiefel.de/elpres.html}}}
-\date{v1.0.1\\[1.8ex]
- August 10, 2021%
+\date{v1.1 \\[1.8ex]
+ May 29, 2024%
% --- \textcolor{DarkGreen}{update of this manual:
% September 27, 2020}
}
@@ -77,14 +89,14 @@ The \texttt{elpres} class is intended to be used for
presentations on a computer screen, a
beamer or a projector. It is derived from \LaTeX's \texttt{article} class and
may be used with \LaTeX{}, pdf\LaTeX{} (and Lua\LaTeX ).
-The default ``virtual paper size'' of document pages produced by this class:
-width=128mm, height=96mm corresponds to a 4:3 (width:height) aspect
+The default ``virtual paper size'' of slides produced by this class:
+width=128mm, height=96mm which corresponds to a 4:3 (width:height) aspect
ratio.
\index{aspect ratio|see{screen aspect ratio}}%
\index{screen aspect ratio}%
Other aspect ratios for widescreen monitors may be selected by class
options.
-The \textsf{elpres} class requires that the \texttt{ifthen},
+The \texttt{elpres} class requires that the \texttt{ifthen},
\texttt{fancyhdr},
\texttt{hyperref},
\texttt{graphicx},
@@ -105,9 +117,7 @@ This manual is intended to support the user with ``recipes''. Use of
including overlay functions, use of colors, graphics files, ``handout
documents'' are described in section \ref{secEnhancements}. Many code snippets
have been included in this manual.
-They can be used in users' presentation files.\footnote{To make copying easier,
-this manual is also available as \texttt{.html} document on the
-\texttt{elpres} website (\url{http://www.vkiefel.de/elpres.html})}
+They can be used in users' presentation files.
Some extensions described in this manual work only with \texttt{pdf}-files
which should preferrably be compiled with pdf\LaTeX\ or Lua\LaTeX.
@@ -150,7 +160,7 @@ installation) the command:
or you may enter \verb+texhash ~/texmf-local+\footnote{The location
for the ``local'', manually updated class and package files may be different,
depending on the \TeX\ system and the OS.}.
-Other \TeX-systems e.\,g.\ MiK\TeX\ have
+Other \TeX-distributions e.\,g.\ MiK\TeX\ have
their own package updating mechanisms. The elpres manual file should be
accessible with the command ``\mbox{\texttt{texdoc elpres}}''. If this
still calls the old version of the manual, the command ``\texttt{texdoc -l elpres}''
@@ -158,60 +168,89 @@ will prompt you to select either the old or the new version of the manual.
\index{installation|)}
\section{Usage}
-
\label{secUsage}
+\subsection{Class options, commands and environments}
+\label{sec:EpOptCmdEnv}
+
The class is used with
\begin{verbatim}
\documentclass[options]{elpres}
\end{verbatim}
+Slides are written with the \texttt{psli} and \texttt{rsli} environments.
+This section lists all \texttt{elpres}-specific options, commands and
+environments.
+
+\subsubsection*{\texttt{Elpres}-specific options}
+
\index{elpres@\texttt{elpres}!options}
-\textbf{\texttt{Elpres}-specific options}: font selection:
- \texttt{tmrfont} (Times Roman), \texttt{helvetfont}
-(Helvetica), \texttt{cmfont} (Computer Modern) and \texttt{sansfont} (Sans
-Serif: default). The option \texttt{nofonts} (no font selection)
+For font selection (\LaTeX, pdf\LaTeX):
+ ``\texttt{tmrfont}'' (Times Roman), ``\texttt{helvetfont}''
+(Helvetica), ``\texttt{cmfont}'' (Computer Modern) and ``\texttt{sansfont}''
+(Sans Serif: default) may be used. The option ``\texttt{nofonts}''
+(no font selection)
is intended for use of \texttt{elpres} with Lua\LaTeX\
\index{Lualatex@Lua\LaTeX}
-with its own font selection mechanisms.
-Options for different screen aspect ratios: \texttt{4x3}
-(default), \texttt{16x9}, \texttt{16x10}.
+with its own font selection mechanisms, an example is described in
+section \ref{sec:MiniExample}.
+
+\index{slide dimensions}
+Options for different screen aspect ratios are
+``\texttt{4x3}'' (default),\footnote{slide size \texttt{128\,x\,92\,mm}}
+``\texttt{16x9}'',\footnote{slide size \texttt{176\,x\,99\,mm}}
+``\texttt{16x10}''.\footnote{slide size \texttt{160\,x\,100\,mm}}
\index{bulletsymb class option@\texttt{bulletsymb} class option}
-The option \texttt{bulletsymb} selects \verb+$\bullet$+ symbols
-instead of the default \texttt{itemize}-environment
+The option ``\texttt{bulletsymb}'' selects \verb+$\bullet$+ symbols (closed
+circles)
+instead of the default \texttt{itemize}-environ\-ment
symbols in all four levels,
-\texttt{ballsymb} is effective together with the presentation
+``\texttt{ballsymb}'' is effective together with the presentation
schemes (section \ref{sec:pres-scheme})
-and provides alternative symbols for the \texttt{itemize} environment.
+and inserts small images of colored \emph{balls} as alternative
+symbols for the \texttt{itemize} environment.
%
-The option \texttt{navisymb}
+The option ``\texttt{navisymb}''
adds a small field with symbols for navigation to the right
-bottom area of the presentation.
+bottom area of slides (section \ref{sec:NavigationSymbols}).
Options of the \texttt{article} class are also available for
\texttt{elpres} presentations,
e.\,g. \texttt{10pt}, \texttt{11pt}, \texttt{12pt} for
selection of font size.
+\subsubsection*{\texttt{Elpres}-specific commands}
+{ \sloppy
\index{elpres@\texttt{elpres}!commands}
-\textbf{\texttt{Elpres}-specific commands}:
-\verb+\distance+ vertically adjusts text on a slide.
-The \verb+\auvimm+\footnote{for \textbf{au}dio \textbf{vi}deo \textbf{m}edia}
-command inserts a link to an external audio or video file.
-Two commands: \verb+\fromlinktext+ and \verb+\totargettext+
+The command
+``\verb+\distance+''
+supports the user to vertically adjust lines and/or pragaraphs on a
+slide. (details are described in section
+section~\ref{sec:EssentialElements}).
+The ``\verb+\auvimm+''\footnote{for \textbf{au}dio \textbf{vi}deo
+ \textbf{m}edia}
+command inserts a link to an external audio or video file
+(section~\ref{sec:MultimediaContent}).
+Two commands: ``\verb+\fromlinktext+'' and ``\verb+\totargettext+''%
\index{fromlinktext@\verb+\fromlinktext+}
\index{totargettext@\verb+\totargettext+}
-can be used for internal links within a presentation.
-With \verb+\slidetitlecolor+, the text color of slides (\texttt{psli})
-can be changed.
-With the command \verb+\pagenrconst+, the page number of
-the current slide can be set to the page number of the previous slide.
+can be used for internal links within a presentation
+(section~\ref{secHypertext}).
+With ``\verb+\slidetitlecolor+'', the text color of the title of slides
+(\texttt{psli}) can be changed (section \ref{sec:footerlayout}).
+With the command ``\verb+\pagenrconst+'', the page number of
+the current slide can be set back to the page number of the previous slide
+(section \ref{secOverlay}, last paragraph).
+\par}
+
+\subsubsection*{\texttt{Elpres}-specific environments}
\index{elpres@\texttt{elpres}!environments}
-\textbf{\texttt{Elpres}-specific environments}:
-the environments \texttt{psli} and \texttt{rsli} define ``slides'' in
-\texttt{elpres}; \texttt{citemize}, \texttt{cenumerate} and
-\texttt{cdescription} provide vertically compressed lists.
+The environments ``\texttt{psli}'' and ``\texttt{rsli}'' define
+\emph{slides} in \texttt{elpres} (section \ref{sec:EssentialElements});
+``\texttt{citemize}'',``\texttt{cenumerate}''
+ and ``\texttt{cdescription}'' provide vertically compressed lists
+(section \ref{sec:CompressedLists}).
\index{slides in elpres@slides in \texttt{elpres}}
\subsection{A minimalistic example presentation}
@@ -219,7 +258,7 @@ the environments \texttt{psli} and \texttt{rsli} define ``slides'' in
\label{sec:MiniExample}
The following code (\texttt{minimal.tex})
-may be used for your first ``experiments'' by adding
+may be used for first ``experiments'' by adding
features described in later sections.
\index{minimalistic example, presentation}
@@ -227,7 +266,7 @@ features described in later sections.
\begin{verbatim}
\documentclass[12pt,pdftex,4x3]{elpres}
- \usepackage[latin1]{inputenc}
+ \usepackage[utf8]{inputenc}
\usepackage[document]{ragged2e}
% \usepackage{elpreswhitebluescheme}
@@ -300,11 +339,11 @@ The preamble of the same presentation for Lua\LaTeX\ would read:
\index{Lualatex@Lua\LaTeX}
The use of Lua\LaTeX\ with \texttt{elpres} is heavily recommended
due to the superior font selection mechanisms.
-You may copy the code examples from this manual more easily from the
-\texttt{.html} version of this manual available at
-\url{http://vkiefel.de/elpres/elpres-manual.html}.
+%% You may copy the code examples from this manual more easily from the
+%% \texttt{.html} version of this manual available at
+%% \url{http://vkiefel.de/elpres/elpres-manual.html}.
-\subsubsection*{Testing of the \texttt{elpres} installation}
+\subsection{Testing of the \texttt{elpres} installation}
\label{sec:CheckInstallation}
@@ -319,7 +358,6 @@ a file, add the class option \texttt{ballsymb}:
\end{verbatim}
-%% hier weiter 2021-08-08
and process it with \texttt{pdflatex}. The line
\verb+\usepackage{elpreswhitetealscheme}+ should not be commented out,
@@ -356,6 +394,7 @@ The problem sometimes arises as soon as \TeX-distributions do not install
\texttt{elpres.zip}, which may be obtained from \texttt{ctan.org}.
\subsection{Essential elements of an \texttt{elpres} presentation}
+\label{sec:EssentialElements}
\index{title page}
The \textbf{title page} slide can be created with
@@ -363,36 +402,53 @@ the \texttt{titlepage} environment (or \texttt{rsli}, see below), \LaTeX's
\verb+\maketitle+ command is not available.
\index{psli environment@\texttt{psli} environment}
\textbf{Slides} may be created with the
-\texttt{psli}-environment\footnote{\texttt{psli}: \textbf{pl}ain
- \textbf{sl}ide}, you may add
+\texttt{psli}-environment\footnote{\texttt{psli}: \textbf{p}lain
+ \textbf{sli}de}, you may add
the title of the slide with the optional parameter.
-The contents of the slide are centered vertically.
+The contents of the slide are centered vertically:
+\begin{verbatim}
+ \begin{psli}[Slide title]
+ Contents of slide
+ \end{psli}
+\end{verbatim}
\index{rsli environment@\texttt{rsli} environment}
Another environment generating a \textbf{slide} is
-\texttt{rsli}\footnote{\texttt{rsli}: \textbf{ra}w \textbf{sl}ide}:
+\texttt{rsli}\footnote{\texttt{rsli}: \textbf{r}aw \textbf{sli}de}:
slides are written
-without title,
-contents are not vertically centered.
+without title, contents are not centered vertically:
+
+\begin{verbatim}
+ \begin{rsli}
+ Contents of slide
+ \end{rsli}
+\end{verbatim}
\index{distance@\verb+\distance+}
The \verb+\distance{number}+ command allows to introduce vertical space into
slides constructed with the \texttt{rsli} and \texttt{titlepage} environments.
-You should use pairs of \verb+\distance{}+ commands with numbers indicating
-the relative height of empty space, see the titlepage in the example above.
+You may use of \verb+\distance{number}+ commands with numbers indicating
+the relative height of empty spaces between lines
+and/or paragraphs, see the title page in the example above (section
+\ref{sec:MiniExample}).
The use of footnotes on slides is often problematic, if they cannot be
avoided, the \texttt{footmisc} package is recommended: the \texttt{perpage}
option resets numbering for each new slide. For a presentation, the
-\texttt{symbol} option allows to use symbols instead of numbers.
+\texttt{symbol} option allows to use symbols instead of numbers\footnote{
+ The use of the \texttt{footmisc} package may produce the \LaTeX\ error
+ message ``\texttt{Counter too large}''.
+ Therefore it is preferred to use the \texttt{symbol*} and \texttt{perpage}
+ options, details are described in the manual of the \texttt{footmisc}
+ package.}.
After inserting a new footnote, numbers or symbols are correctly
inserted only after a second run of \LaTeX.
\subsection{Alternatives to \TeX's justified paragraphs}
By default, \LaTeX\ produces justified paragraphs with lines of equal length,
-this may often not be appropriate for the usually very short lines of text
+this will often not be appropriate for the usually very short lines of text
in presentations. The \LaTeX\ \verb+\raggedright+ command
\index{raggedright@\verb+\raggedright+}
has its own
@@ -401,8 +457,20 @@ the right margin will often look too
ragged. A solution is to use the \verb+\RaggedRight+ command of the
\texttt{ragged2e} package.
+If authors of presentations wish to suppress both justification and
+hyphenation within the complete presentation document, the following
+package parameters:
+
+\begin{verbatim}
+ \usepackage[document,originalparameters]{ragged2e}
+\end{verbatim}
+
+can be selected. As hypenated words are not favorable for quick reading of
+slides by the audience this is the preferred use of \texttt{ragged2e} for
+the author of this package.
\subsection{Vertically compressed lists}
+\label{sec:CompressedLists}
As the spaces between lines may be too great with the \texttt{itemize}
environment,
@@ -422,8 +490,6 @@ be used.
\index{cenumerate environment@\texttt{cenumerate} environment}
\index{cdescription environment@\texttt{cdescription} environment}
-
-% neu Dezember 2017
Another solution for the customization of \texttt{itemize}
environments is given by the \texttt{enumitem} package. Therefore
@@ -482,11 +548,11 @@ by the author of a presentaton.
\begin{sloppypar}
However, access to the header fields defined by \texttt{fancyhdr}
-is blocked\footnote{If you enter
- \texttt{\textbackslash rhead}, \texttt{\textbackslash chead}
- or \texttt{\textbackslash lhead}, \texttt{elpres} will issue
+is blocked: if you enter
+ \verb+\rhead{}+, \verb+\chead{}+
+ or \verb+\lhead{}+, \texttt{elpres} will issue
an error message. Use of the header fields will generate unwanted effects
- on page layout due to \texttt{fancyhdr}.}.
+ on page layout due to \texttt{fancyhdr}.
If you wish to change the position of the page number in the footer,
you can overwrite the default page number with an ``empty'' \verb+\rfoot{}+
command and put it to the center or the left margin of the footer
@@ -510,38 +576,42 @@ are described in section \ref{sec:pres-scheme}.
\label{secEnhancements}
-\subsection{Use of named colors of \texttt{xcolor}}
+Enhancements described here make use of other \LaTeX\ packages which should
+be available in \TeX\ distributions like \TeX~Live or MiK\TeX.
+
+\subsection{Use named colors of the \texttt{xcolor} package}
\label{sec:use-colors}
The \texttt{elpres} class automatically loads the \texttt{xcolor} package.
-Color related commands may therefore be used with names defined by
-\texttt{colorx}. They are however only accessible in groups
-(\texttt{dvipsnames}, \texttt{svgnames}, \texttt{x11names}). As an example,
-the color \texttt{Indigo} is available in \texttt{svgnames}. If you wish
-to use it you will have to enter \texttt{svgnames} as \texttt{elpres}
-class option:
+Therefore, color names defined by the \texttt{xcolor} may be used. They are
+however only accessible in groups (\texttt{dvipsnames}, \texttt{svgnames},
+\texttt{x11names}, details can be found in the \texttt{xcolor} manual). As
+an example, the color \texttt{Indigo} is available in the \texttt{svgnames}
+goup. If you wish to use it you will have to enter \texttt{svgnames}
+as \texttt{elpres} class option:
\begin{verbatim}
\documentclass[11pt,16x9,svgnames]{elpres}
\end{verbatim}
-This option is then automatically ``handed over'' to the
-\texttt{xcolor} package.
-The complete lists of named colors are found in the \texttt{xcolor} manual.
+This option is then automatically ``handed over'' to the \texttt{xcolor}
+package loaded by \texttt{elpres}. The complete lists of named colors
+are found in the \texttt{xcolor} manual.
\subsection{Include graphics files}
+\label{secUsageGraph}
\index{graphics files}
\index{includegraphics@\texttt{\textbackslash includegraphics}}
Graphics files/pictures can be included with the
\texttt{includegraphics}-command of the \texttt{graphicx}-package. Please be
aware that the dimensions of the pages are \mbox{128mm x 96mm} and
-therefore included graphics are scaled appropriately. A safe way to generate a
-page with a picture could be (with \texttt{pict.png} as the name of the
+therefore included graphics are scaled appropriately. A typical example
+of a
+page with a picture could be (\texttt{pict.png} is the name of the
graphics file):
-\label{secUsageGraph}
\begin{verbatim}
\usepackage[pdftex]{graphicx} % (in preamble)
@@ -562,7 +632,7 @@ driver related option (e.\,g. \texttt{pdftex} or \texttt{dvips})
(documentclass).
-\label{secInclGraphicsFiles}
+% \label{secInclGraphicsFiles}
\subsection{Arrange text and pictures in two (or more) columns}
@@ -590,17 +660,17 @@ Text and graphics may be arranged in two or more columns with
\end{verbatim}
Details on the minipage environment may be found in the \LaTeX{}
-documentation.
+documentation\footnote{A good reference is \url{https://latexref.xyz/}}.
-\subsection{Incremental slides (overlays)}
+\subsection{Add incremental slides (overlays) to a presentation}
\label{secOverlay}
\index{incremental slides|see{overlays}}
\index{overlays|(}
If the contents of slides are to be made visible step
-by step this can be achieved by a series of output PDF or (PS) files (carrying
+by step this can be achieved by a series of output PDF or (PS) pages (carrying
the same page number) usually called \emph{overlays}. It may also be of
interest to change a highlighting color in a series of overlays. This is most
easily done by using the excellent \texttt{overlays} package written by
@@ -692,6 +762,8 @@ for the background color will be made automatically.
For more details on \texttt{overlays}, see the documentation of the package.
\index{overlays|)}
+%% hypertarget
+
Sometimes it is desirable to prepare \textbf{two or more consecutive
slides with the same page
number} independent
@@ -703,19 +775,19 @@ with the command \verb+\pagenrconst+.
% \pagenrconst
-\subsection{Navigation symbols}
+\subsection{Add navigation symbols to slides}
\label{sec:NavigationSymbols}
\index{navigation symbols panel|(}
With the \texttt{navisymb} option of \texttt{elpres} a panel with navigation
symbols appears
-in the right lower corner of the presentation:\\
+in the right lower corner of pages:
{ \setlength{\parindent}{2em}
\indent
- \textbf{\texttt{$\ll$ $<$ $>$ $\gg$ $\leftarrow$ $\rightarrow$ [n]}}
-}\\
+ \texttt{$\ll$ $<$ $>$ $\gg$ $\leftarrow$ $\rightarrow$ [n]}
+}
These commands ($\ll$: jump to the first page,
$<$: go to the previous page, $>$: go to the next page,
@@ -723,9 +795,8 @@ $\gg$: jump to the last page, $\leftarrow$:
go back in history, $\rightarrow$: go forward in history,
\texttt{[n]}: prompt for a
page number)
-work with Adobe Acrobat Reader (Windows), and (with the exception of
-\texttt{$\leftarrow$}, \texttt{$\rightarrow$} and \verb+[n]+)
-with \texttt{evince} (Linux).
+work with Adobe Acrobat Reader (Windows), and
+with \texttt{Okular} (Linux).
Some of these functions also work in presentation-mode
of the ``internal'' PDF-viewer in recent versions of the
\texttt{Firefox}-browser (Linux, Windows).
@@ -733,7 +804,7 @@ of the ``internal'' PDF-viewer in recent versions of the
-\subsection{Run multimedia content from a presentation}
+\subsection{Add multimedia content to a presentation}
\label{sec:MultimediaContent}
@@ -742,28 +813,28 @@ of the ``internal'' PDF-viewer in recent versions of the
\index{multimedia files|(}
\index{audio files|see{multimedia files}}
\index{video files|see{multimedia files}}
-In this section inclusion of video and audio files
-into a presentation will be described. With the
+This section describes inclusion of (links to) video and audio files in a
+presentation. With the
\verb+\auvimm{}{}+
\index{auvimm@\verb+\auvimm+}
-command described below you will
-be able to lauch an external application for playing the video or audio
+command described below it is possible
+to lauch an external application for playing the video or audio
file. This will work in many situations for video and audio files
on Windows (Adobe Acrobat) and Linux (e.\,g. using
-\index{Acrobat pdf viewer}
-\texttt{evince} and
+\index{Acrobat pdf viewer}%
+\texttt{evince}%
\index{evince pdf file viewer@\texttt{evince} pdf file viewer})
systems in fullscreen mode.
Under certain conditions it is possible to define a ``poster area'' on a
slide and the pdf viewer starts (after clicking with the mouse pointer into
this area) the
presentation of the video within this frame.
-The advantage of this technique is that it avoids that
-window with the external application is started.
+The advantage of this technique is that it avoids starting
+a window with the external application.
On Linux systems the \texttt{pdfpc}
\index{pdfpc viewer@\texttt{pdfpc} viewer}
viewer allows this, a detailed description
-is shown below. In both sitauations, however, the multimedia file is not
+is shown below. In both situations, however, the multimedia file is not
incorprated into the pdf-file and must be available on the computer
at the time of the presentation, ideally in the same directory as the
\texttt{.pdf}-file.
@@ -789,11 +860,11 @@ You may also insert an image file as a poster with a graphics file using
\auvimm{\includegraphics{/path/to/poster.png}}{./audiofile.mp3}
\end{verbatim}
-If you hit the poster area with the mouse pointer, it will launch the default
-application for audio files in a seperate window. This should be possible
-even if the pdf-viewer works if fullscreen-mode at the time of presentation.
-If this does not work, it may be necessary to
-insert as ``launch'' command:
+If you hit the poster area with the mouse pointer, it will launch the
+default application for audio files in a separate window. This should
+be possible even if the pdf-viewer works if fullscreen-mode at the time
+of presentation. If this does not work, it may be necessary to insert as
+``launch'' command:
\begin{verbatim}
\auvimm{[video-file]}{run:./videofile.mp4}
@@ -807,15 +878,22 @@ your presentation) you should test this aspect of your presentation. Sometimes
a call to an external program might be blocked due security reasons in Acrobat
Reader.
-\begin{leftbar}
-This \verb+\auvimm{}+-command should be considered experimental.
-Its behavior depends on the \texttt{pdf}-viewer and the configuration of the OS.
-\end{leftbar}
+%% begin comment out for tth
+ \fbox{\parbox{0.985\textwidth}{
+%% end comment out for tth
+The \texttt{\textbackslash auvimm{}}-command in the current version
+of \texttt{elpres} should be considered
+experimental.
+Its behavior largely depends on the \texttt{pdf}-viewer and the software
+used for playing audio/video files.
+%% begin comment out for tth
+ }}
+%% end comment out for tth
On Linux systems, the \texttt{pdfpc}
-\texttt{pdf}-viewer\footnote{\url{https://pdfpc.github.io/}: \texttt{pdfpc} --- A
- presenter console with multi-monitor support for PDF files} allows
+\texttt{pdf}-viewer\footnote{\url{https://pdfpc.github.io/}:
+\texttt{pdfpc} --- A presenter console with multi-monitor support for PDF files} allows
presentation of a video embedded into a ``poster area''\footnote{e.\,g. defined
by a bitmap image with the same aspect ratio as the video}
on a slide
@@ -839,8 +917,8 @@ a ``video format'', e.\,g. with the \texttt{ffmpeg} program.
\label{secHandout}
-In advance of a lecture it is often expected that you prepare a ``handout''
-from your presentation with more than one pages on a printed page. Therefore
+In advance of a lecture it is often expected that you provide a ``handout''
+of your presentation with more than one pages on a printed page. Therefore
you have several options, three of
them are described here.
If a presentation contains overlay-slides generated with the \texttt{overlays}
@@ -850,7 +928,7 @@ added to the preamble
in order to inactivate the overlays-specific commands.
-\subsubsection{\LaTeX\ article document with a series of single-page pdf-files included}
+\subsubsection{\LaTeX\ article document handout with a series of single-page pdf-files included}
One solution to this problem is (1) to generate a series of single-page
pdf-files and (2) to create a pdf\LaTeX\ document with the single
@@ -865,11 +943,12 @@ pages included.
with \texttt{in.pdf} as the initial presentation. The syntax of \texttt{gs}
is described in detail on the ghostscript
-website\footnote{\url{https://www.ghostscript.com/doc/current/Use.htm}}.
+website\footnote{\url{https://ghostscript.readthedocs.io/en/latest/Use.html}}.
On Windows systems the name of the ghostscript command may be
\texttt{gswin32c.exe} or \texttt{gswin64c.exe}.
-An alternative to \texttt{gs} is the \texttt{pdftk} tool:
-\index{pdftk@\texttt{pdftk}}
+An alternative to \texttt{gs} is the \texttt{pdftk} command line tool:%
+\index{pdftk@\texttt{pdftk}}%
+\footnote{\url{https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/}}
\begin{verbatim}
pdftk in.pdf burst output page_%03d.pdf
@@ -971,11 +1050,12 @@ website\footnote{\url{https://github.com/DavidFirth/pdfjam/blob/master/README.md
\label{secHypertext}
\index{hypertext elements|(}
-You may use two commands \verb+\fromlinktext{}{}+ and \verb+\totargettext{}{}+
-for ``hypertext features''. As an example: as you normally will not insert
-\verb+\section{}+-like commands and therefore do not generate a ``table of
-contents''-like page or a menu in \texttt{elpres}-presentations, you are able
-define links with:
+You may use two commands \verb+\fromlinktext{}{}+ and
+\verb+\totargettext{}{}+ for ``hypertext features''.
+As an example: as you normally will not
+insert \verb+\section{}+-like commands and therefore do not generate a ``
+table of contents''-like page or a menu in \texttt{elpres}-presentations,
+you are able define links with:
\begin{verbatim}
\totargettext{text}{link-label}
@@ -1073,55 +1153,50 @@ Another package which allows you to paint the background with a picture is
...
- \AddToShipoutPicture{
- \includegraphics[height=\paperheight]{background.png}
+ \AddToShipoutPictureBG*{
+ \includegraphics[height=\paperheight]{background.png}
}
\end{verbatim}
-\verb+\AddToShipoutPicture{}+ puts the picture on every page,
-\verb+\AddToShipoutPicture*{}+ puts it on to the current page,
-\verb+\ClearShipoutPicture+ clears the background beginning with the current
+\verb+\AddToShipoutPictureBG{}+ puts the picture on every page,
+\verb+\AddToShipoutPictureBG*{}+ puts it on to the current page,
+\verb+\ClearShipoutPictureBG+ clears the background beginning with the current
page.
Details of \texttt{eso-pic}'s commands can be found in the documentation.
\index{wallpaper background|)}
-\subsection{Presentation schemes}
-
+\subsection{Put color to your presentation: presentation schemes}
\label{sec:pres-scheme}
\index{presentation schemes|(}
\index{color schemes|see{presentation schemes}}
\index{schemes, color|see{presentation schemes}}
-\texttt{Elpres} provides predefined \textbf{presentation schemes}:
-color and layout schemes which are applied to a presentation with
-\verb+usepackage{}+. Their naming follows the convention
-\mbox{\texttt{elpres...scheme}}, an
-example is \texttt{elpreswhiteredscheme}.\footnote{the name of the
- corresponding style or package file is \texttt{elpreswhiteredscheme.sty}}
-These \texttt{elpres}-schemes also support incremental slides with the
-\texttt{overlays} package.
-Moreover, these schemes define color names
-which may be used by the author of a presentation:\footnote{Color names for use
-by the presentation author start with \texttt{ep...}}
-
-
-
+\texttt{Elpres} provides predefined \textbf{presentation schemes}: color and
+layout schemes which are applied to a presentation with
+\verb+\usepackage{}+. Their naming follows the convention
+\mbox{\texttt{elpres...scheme}}, an example is
+\texttt{elpreswhiteredscheme}.\footnote{the name of the corresponding style
+or package file is \texttt{elpreswhiteredscheme.sty}} These
+\texttt{elpres}-schemes also support incremental slides with the
+\texttt{overlays} package. With an activated presentation scheme, the elpres
+class option \texttt{ballsymb} changes default itemize symbols to
+appropriately colored ``ball'' symbols. Moreover, these schemes define color
+names which may be used by the author of a presentation:\footnote{Color
+names for use by the presentation author start with \texttt{ep...}}
\begin{description}%[noitemsep]
\item[\texttt{eptextcolor}] ``normal text color'' (default values for
documents without
presentation scheme included in \texttt{elpres.cls}: black)
\item[\texttt{ephighlightcolor}] color, which may be used for highlighting
- text (default:
- dark red)
+ text (default: dark red)
\item[\texttt{eptitlecolor}] color of the title of slides, may be used to
- highlight the
- title in the title slide (default: dark red)
+ highlight the title in the title slide (default: dark red)
\end{description}
-Presentation schemes available in the current version of \texttt{elpres}:
+These presentation schemes available in the current version of \texttt{elpres}:
\begin{sloppypar}
@@ -1192,7 +1267,7 @@ links have been adjusted.
Colored text boxes often help the presentation author to highlight small text
fragments and to make slides more ``readable'' and more attractive.
-\subsubsection{Text boxes with \texttt{\textbackslash colorbox}, \texttt{\textbackslash fcolorbox}}
+\subsubsection{Text boxes with \texttt{colorbox}, \texttt{fcolorbox}}
\label{sec:simple-text-boxes}
@@ -1248,11 +1323,64 @@ An example with a titled colored textbox:
\end{verbatim}
-The manual of the \texttt{tcolorbox} provides perfect instruction for the use
-of this package.
-These text boxes may yield problems
-with incremental slides using the \texttt{overlays} package.
+The manual of the \texttt{tcolorbox} provides detailed instructions for the
+use of this package.
+However, incremental slides using the \texttt{overlays} package may not
+work with color boxes generated by the \texttt{tcolorbox} package. These
+problems are avoided with the colored text boxes described in section
+\ref{sec:simple-text-boxes}.
+
+\subsection{Alternative format for footnotes on slides}
+\label{sec:AltFootnoteFormat}
+
+
+Footnotes on slides may be inserted with \LaTeX's \verb+\footnote{}+
+command.
+However, the layout of footnotes generated by \verb+\footnote{}+
+is not adequate
+for small comments or additions to the main text on slides.
+The following definition of an alternative footnote command
+(\verb+\altfnarea{}+)%
+\index{alternative footnote command}
+\index{footnote command, alternative}
+\index{altnfarea@\verb+\altfnarea+}
+requires that the
+\texttt{eso-pic} package is loaded:
+
+\begin{verbatim}
+ \usepackage{eso-pic}
+
+ \newcommand{\altfnarea}[1]{%
+ \AddToShipoutPictureFG*{
+ \setlength{\unitlength}{1mm}
+ \put(1.2,1.2){\parbox[b]{0.9\paperwidth}%
+ {\scriptsize \textcolor{darkgray}{#1}}}}}
+
+\end{verbatim}
+The definition of \verb+\altfnarea+ is currently not included in
+\texttt{elpres.cls}, so you should copy this definition of the command
+into the preample of your presentation document. Please take care to
+include the \texttt{eso-pic} package before the \texttt{altfnarea}
+definition. You may experiment with different values in this
+\verb+\newcommand{}{}+ definition. The command can be used within
+the code of a slide the following way:
+
+ \begin{verbatim}
+ \begin{psli}[Title of a slide demonstrating alternative
+ footnotes\textsuperscript{1}]
+ \begin{itemize}
+ \item first itemized line\textsuperscript{2}
+ \item second itemized line
+ \end{itemize}
+ \altfnarea{\textsuperscript{1}Addition to the title,
+ \textsuperscript{2}Explanation of the first line}
+ \end{psli}
+ \end{verbatim}
+
+Very often it will be advisable \emph{not} to use footnotes in slides.
+However, speakers participating in scientific conferences usually are
+expected to include sources of figures, tables etc. on their slides.
\subsection{Inactivate \texttt{overlays} commands}
@@ -1298,17 +1426,18 @@ update the \texttt{overlays} package.
\subsection{Convert an \texttt{elpres}-presentation (PDF) into an Impress (LibreOffice) or Powerpoint presentation}
\label{sec:convert-into-libreoff}
+\subsubsection{PDF \ldots\ PNG \ldots\ Impress/Powerpoint}
+
\index{Powerpoint presentation} \index{Impress (LibreOffice) presentation}
Sometimes it is unclear, if organizers of a (scientific) meeting allow
-presentations with \texttt{.pdf}-files or insist on files in Powerpoint
+presentations with \texttt{.pdf}-files or if they insist on files in Powerpoint
format. This is an unpleasant situation for a lecturer, but in such a situation
-it is better, to be
-prepared.
+it is better, to be prepared.
-There is no elegant way for a reliable solution.
-First, you may use one of the free or commercial online conversion
-tools (intended to convert \texttt{.pdf} into
-\texttt{.ppt} or \texttt{.pptx}-files). Results are often not satisfactory.
+There is no elegant way for a reliable solution. First, you may use one
+of the free or commercial online conversion tools (intended to convert
+\texttt{.pdf} into \texttt{.ppt} or \texttt{.pptx}-files). Results are
+often not satisfactory.
An alternative, more reliable way preferred
by the author of this manual:
@@ -1329,10 +1458,12 @@ Please copy the following two
commands (please ignore the line-breaks in the lines
beginning with ``\texttt{gs}'')\footnote{\i.\,e. ``\texttt{gs ... input.pdf}'' should
be entered as one line and ``\texttt{gs ... temp.pdf}'' should be entered as a
- second line}
+ second line of a shell script.}
into a short shell
-script (Windows: a \texttt{.bat} or \texttt{.cmd} script) and ``run'' or execute the shell
-script:
+script (Windows: a \texttt{.bat} or \texttt{.cmd} script) and ``run'' or
+execute the shell script:
+
+
\begin{verbatim}
gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dDEVICEWIDTHPOINTS=793.7
@@ -1346,9 +1477,19 @@ script:
Please do not forget to adjust the name of the input file
(\texttt{input.pdf} in the script above).
The first command adjusts the page size of the \texttt{.pdf}-file to
- \texttt{28~x~21~cm} (which is written into the temporary file
+ \texttt{28~x~21~cm} which is written into the temporary file
\texttt{temp.pdf}:
- this format avoids resizing of the images in LibreOffice (see below)).
+ this format avoids the necessity to resize of the images in LibreOffice
+ (for other slide formats see the footnote below\footnote{%
+ The values assigned to \texttt{-dDEVICEWIDTHPOINTS} and
+ \texttt{-dDEVICEHEIGHTPOINTS}
+ are valid for a width:height aspect ratio of 4:3 assuming a
+ presentation page size (LibreOffice) of \texttt{28cm~x~21cm}:
+ \texttt{(28/2.54)*72=793.7pt},
+ \texttt{(21/2.54)*72=595.3pt}. Values for width:height aspect ratios of
+ 16:9 \texttt{(28cm~x~15.75cm)} are \texttt{793.7/446.46} and for a ratio
+ of 16:10 \texttt{(28cm~x~17.5cm)}: \texttt{793.7/496.1}.
+ }).
The second command generates a series of \texttt{.png}-files:
\texttt{page\_001.png}, \texttt{page\_002.png} ... \texttt{page\_0nn.png}.
Instead of the \texttt{png256} driver, \texttt{png16m} can be used.
@@ -1363,9 +1504,9 @@ change \texttt{-r300} to
% gs -dNOPAUSE -dBATCH -sDEVICE=png256 -r600
% -dTextAlphaBits=4 -sOutputFile=page_%03d.png input.pdf
% \end{verbatim}
-The option \texttt{-dTextAlphaBits=4} improves font
-antialiasing.\footnote{Details can be found in the documentation of gs
- \url{https://www.ghostscript.com/doc/current/Use.htm}}
+The option \mbox{\texttt{-dTextAlphaBits=4}} improves font
+antialiasing.\footnote{Details can be found in the documentation of
+\texttt{gs} \url{https://ghostscript.readthedocs.io/en/latest/Use.html}}
\textbf{Details on step 2 --- Import \texttt{.png} images:}
@@ -1378,11 +1519,42 @@ slide format (e.\,g. 4:3), import the \texttt{.png} files with
% \texttt{0.0cm}, \emph{Postion~Y}: \texttt{0.0cm}, \emph{Width}:
% \texttt{28.0cm}, activate the checkbox \emph{Keep~ratio}
into consecutive empty slides.\footnote{Menu
- structure of LibreOffice v6.4}. The presentation can now be saved
+ structure of LibreOffice v6.4, v7.3}. The presentation can now be saved
in the format of Impresss (\texttt{.odp}) or
one of the Microsoft Powerpoint formats (\texttt{.ppt} or \texttt{.pptx}).
+\subsubsection{PDF \ldots\ SVG \ldots\ Impress/Powerpoint}
+
+\label{sec:PdfSvgImpress}
+
+An alternative way to make a Powerpoint/Impress presentation from the
+.pdf-file is to convert it into a series of \textbf{.pdf}-pages, convert
+these into \texttt{.svg} format and to import the \texttt{.svg}-files into
+the Impress/Powerpoint presentation. The first step:%
+\footnote{The command in a Windows terminal should be:
+ \texttt{pdftk input.pdf burst output p\_\%\%02d.pdf}}
+
+\begin{verbatim}
+ pdftk input.pdf burst output p_%02d.pdf
+\end{verbatim}
+
+converts the file \texttt{input.pdf} into a series of files
+\texttt{p\_01.pdf}, \texttt{p\_02.pdf}, \texttt{p\_03.pdf}, \ldots, which
+can then be converted with the command \texttt{pdftocairo}:%
+\footnote{Available in the \texttt{poppler-utils} package, a Windows version
+may be obtained at: \url{https://github.com/oschwartz10612/poppler-windows}}
+
+\begin{verbatim}
+ pdftocairo -svg p_01.pdf p_01.svg
+ pdftocairo -svg p_02.pdf p_02.svg
+ pdftocairo -svg p_03.pdf p_03.svg
+ ...
+\end{verbatim}
+
+This series of commands is best executed from a shell script. The resulting
+\texttt{.svg} files are then imported into an Impress/Powerpoint presentation.
+
\subsection{The \texttt{pdfpc}-viewer: add notes}
\index{pdfpc viewer@\texttt{pdfpc} viewer}
@@ -1425,7 +1597,7 @@ added). \textbf{v0.2e} (15.04.2005): Documentation completed (sections
(12.08.2005): new (class) options for font selection: \texttt{tmrfont} (Times
Roman), \texttt{helvetfont} (Helvetica), \texttt{cmfont} (Computer Modern),
\texttt{sansfont} (Sans Serif: default). Documentation updated, sections
-\ref{secInclGraphicsFiles} and \ref{secTwoColumns} added. \textbf{v0.4}
+\ref{secUsageGraph} and \ref{secTwoColumns} added. \textbf{v0.4}
(20.01.2018): New class options for different screen aspect ratios
\texttt{4x3}, \texttt{16x9}, \texttt{16x10}; ``compressed'' list environments
modified; documentation completed: packages for use with \texttt{elpres}:
@@ -1455,6 +1627,13 @@ bug in the \texttt{elpres...scheme.sty} files was fixed (incorrect value for
archive \texttt{elpres.tds.zip} is added for \texttt{ctan.org} upload.
\textbf{v1.0}: Class option \texttt{ballsymb} added, manual updated.
\textbf{v1.0.1}: Corrected upload to \texttt{ctan.org}
+\textbf{v1.1} (28.05.2024): Fixes and corrections in \texttt{elpres.cls};
+manual: parts of section \ref{secUsage} have been rewritten,
+section \ref{sec:convert-into-libreoff} has been completed: new section
+\ref{sec:PdfSvgImpress}.
+Definition of a an alternative command for footnotes (\verb+\altfnarea+)
+has been added to the manual (section \ref{sec:AltFootnoteFormat}).
+
\printindex
diff --git a/macros/latex/contrib/elpres/tex/elpres.cls b/macros/latex/contrib/elpres/tex/elpres.cls
index adc5312845..5697bb8748 100644
--- a/macros/latex/contrib/elpres/tex/elpres.cls
+++ b/macros/latex/contrib/elpres/tex/elpres.cls
@@ -1,5 +1,5 @@
\NeedsTeXFormat{LaTeX2e}
-\ProvidesClass{elpres}[2021/08/10 class for plain electronic presentations]
+\ProvidesClass{elpres}[2024/05/29 class for plain electronic presentations]
%
% 2004/06/19 v0.1 - initial version
%
@@ -41,7 +41,11 @@
%
% 2021/08/10 v1.0.1 - corrected upload
%
-
+% 2024/05/29 v1.1 - correction: \RequirePackageWithOptions{xcolor}
+% changed to \RequirePackage{xcolor} (elpres.cls)
+% - \setlength{\footskip}{11.8pt} added (elpres.cls)
+% - manual updated
+%
% Options: select fonts
\newcommand{\fontna}{initialisiert}
@@ -103,7 +107,7 @@
\LoadClass{article}
\RequirePackage{ifthen}
-\RequirePackageWithOptions{xcolor}
+\RequirePackage{xcolor}
\RequirePackage{graphicx}
\ifthenelse{\equal{\screenformat}{scr4x3}}{%
@@ -126,7 +130,10 @@
\RequirePackage[hyperfootnotes=false]{hyperref}
+\hypersetup{pdfcreator={LaTeX with the elpres class}}
+
\RequirePackage{fancyhdr}
+\setlength{\footskip}{11.8pt}
\renewcommand{\headrulewidth}{0mm}
diff --git a/macros/latex/contrib/els-cas-templates/README b/macros/latex/contrib/els-cas-templates/README
index c925f30042..ffc9f6d112 100644
--- a/macros/latex/contrib/els-cas-templates/README
+++ b/macros/latex/contrib/els-cas-templates/README
@@ -1,3 +1,5 @@
+Version 2.4
+
This bundle provides two classfiles, namely cas-sc.cls and cas-dc.cls
and corresponding template files for typesetting journal articles
supposed to go through Elsevier's updated workflow. cas-sc.cls is meant
diff --git a/macros/latex/contrib/els-cas-templates/cas-common.sty b/macros/latex/contrib/els-cas-templates/cas-common.sty
index 3ffe3ea218..e3e4154b7f 100644
--- a/macros/latex/contrib/els-cas-templates/cas-common.sty
+++ b/macros/latex/contrib/els-cas-templates/cas-common.sty
@@ -15,11 +15,11 @@
%% given in the file `manifest.txt'.
%%
-% $Id: cas-common.sty 66 2021-05-11 14:17:42Z rishi $
+% $Id: cas-common.sty 94 2024-05-04 09:27:09Z rishi $
\def\RCSfile{cas-common}%
- \def\RCSversion{2.3}%
- \def\RCSdate{2021/05/11}%
+ \def\RCSversion{2.4}%
+ \def\RCSdate{2024/05/04}%
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\pretolerance=-1
@@ -1537,7 +1537,7 @@
\ifnum\theblind>0\relax
\vspace*{\the\baselineskip}
\else
- \seq_use:Nn \g_stm_prelimsau_seq { , }
+ \seq_use:Nn \g_stm_prelimsau_seq { ,~ }
\fi
\vskip12pt
\par
@@ -2628,7 +2628,7 @@
\xspaceaddexceptions{]}
-\ABD{\bibsep=0pt}
+\ABD{\@ifundefined{bibsep}{}{\bibsep=0pt}}
%\ifbool{casfinallayout}
% {%
\ABD{\gdef\bibfont{\fontsize{8pt}{10pt}\selectfont}%
@@ -2638,3 +2638,4 @@
% {}
\endinput
+
diff --git a/macros/latex/contrib/els-cas-templates/cas-dc-sample.pdf b/macros/latex/contrib/els-cas-templates/cas-dc-sample.pdf
new file mode 100644
index 0000000000..aeaa27f1a3
--- /dev/null
+++ b/macros/latex/contrib/els-cas-templates/cas-dc-sample.pdf
Binary files differ
diff --git a/macros/latex/contrib/els-cas-templates/cas-dc-sample.tex b/macros/latex/contrib/els-cas-templates/cas-dc-sample.tex
new file mode 100644
index 0000000000..aeaa9e565c
--- /dev/null
+++ b/macros/latex/contrib/els-cas-templates/cas-dc-sample.tex
@@ -0,0 +1,463 @@
+%%
+%% Copyright 2019-2024 Elsevier Ltd
+%%
+%% Version 2.4
+%%
+%% This file is part of the 'CAS Bundle'.
+%% --------------------------------------
+%%
+%% It may be distributed under the conditions of the LaTeX Project Public
+%% License, either version 1.2 of this license or (at your option) any
+%% later version. The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.2 or later is part of all distributions of LaTeX
+%% version 1999/12/01 or later.
+%%
+%% The list of all files belonging to the 'CAS Bundle' is
+%% given in the file `manifest.txt'.
+%%
+%% Template article for cas-dc documentclass for
+%% double column output.
+
+%\documentclass[a4paper,fleqn,longmktitle]{cas-dc}
+\documentclass[a4paper,fleqn]{cas-dc}
+
+%\usepackage[authoryear,longnamesfirst]{natbib}
+%\usepackage[authoryear]{natbib}
+\usepackage[numbers]{natbib}
+
+%%%Author definitions
+\def\tsc#1{\csdef{#1}{\textsc{\lowercase{#1}}\xspace}}
+\tsc{WGM}
+\tsc{QE}
+\tsc{EP}
+\tsc{PMS}
+\tsc{BEC}
+\tsc{DE}
+%%%
+
+\begin{document}
+\let\WriteBookmarks\relax
+\def\floatpagepagefraction{1}
+\def\textpagefraction{.001}
+\shorttitle{Leveraging social media news}
+\shortauthors{J.K. Krishnan et~al.}
+
+\title [mode = title]{This is a specimen $a_b$ title}
+\tnotemark[1,2]
+
+\tnotetext[1]{This document is the results of the research
+ project funded by the National Science Foundation.}
+
+\tnotetext[2]{The second title footnote which is a longer text matter
+ to fill through the whole text width and overflow into
+ another line in the footnotes area of the first page.}
+
+
+\author[1,3]{J.K. Krishnan}[type=editor,
+ auid=000,bioid=1,
+ prefix=Sir,
+ role=Researcher,
+ orcid=0000-0001-0000-0000]
+\cormark[1]
+\fnmark[1]
+\ead{jkk@example.in}
+\ead[url]{www.jkkrishnan.in}
+
+\credit{Conceptualization of this study, Methodology, Software}
+
+%\address[1]{, Street 129, 1043 NX Amsterdam, The Netherlands}
+\affiliation[1]{organization={Department of Physics, J.K. Institute of Science},
+ addressline={Jawahar Nagar},
+ city={Trivandrum},
+% citysep={}, % Uncomment if no comma needed between city and postcode
+ postcode={695013},
+ state={Kerala},
+ country={India}}
+
+\author[2,4]{Han Thane}[style=chinese]
+
+\author[2,3]{William {J. Hansen}}[%
+ role=Co-ordinator,
+ suffix=Jr,
+ ]
+\fnmark[2]
+\ead{wjh@example.org}
+\ead[URL]{https://www.university.org}
+
+\credit{Data curation, Writing - Original draft preparation}
+
+\affiliation[2]{organization={World Scientific University},
+ addressline={Street 29},
+ postcode={1011 NX},
+ postcodesep={},
+ city={Amsterdam},
+ country={The Netherlands}}
+
+\author[1,3]{T. Rafeeq}
+\cormark[2]
+\fnmark[1,3]
+\ead{t.rafeeq@example.in}
+\ead[URL]{www.campus.in}
+
+\affiliation[3]{organization={University of Intelligent Studies},
+ addressline={Street 15},
+ city={Jabaldesh},
+ postcode={825001},
+ state={Orissa},
+ country={India}}
+
+\cortext[cor1]{Corresponding author}
+\cortext[cor2]{Principal corresponding author}
+\fntext[fn1]{This is the first author footnote, but is common to third
+ author as well.}
+\fntext[fn2]{Another author footnote, this is a very long footnote and
+ it should be a really long footnote. But this footnote is not yet
+ sufficiently long enough to make two lines of footnote text.}
+
+\nonumnote{This note has no numbers. In this work we demonstrate $a_b$
+ the formation Y\_1 of a new type of polariton on the interface
+ between a cuprous oxide slab and a polystyrene micro-sphere placed
+ on the slab.
+ }
+
+\begin{abstract}
+This template helps you to create a properly formatted \LaTeX\ manuscript.
+
+\noindent\texttt{\textbackslash begin{abstract}} \dots
+\texttt{\textbackslash end{abstract}} and
+\verb+\begin{keyword}+ \verb+...+ \verb+\end{keyword}+
+which
+contain the abstract and keywords respectively.
+
+\noindent Each keyword shall be separated by a \verb+\sep+ command.
+\end{abstract}
+
+\begin{graphicalabstract}
+\includegraphics{figs/cas-grabs.pdf}
+\end{graphicalabstract}
+
+\begin{highlights}
+\item Research highlights item 1
+\item Research highlights item 2
+\item Research highlights item 3
+\end{highlights}
+
+\begin{keywords}
+quadrupole exciton \sep polariton \sep \WGM \sep \BEC
+\end{keywords}
+
+
+\maketitle
+
+\section{Introduction}
+
+The Elsevier cas-dc class is based on the
+standard article class and supports almost all of the functionality of
+that class. In addition, it features commands and options to format the
+\begin{itemize} \item document style \item baselineskip \item front
+matter \item keywords and MSC codes \item theorems, definitions and
+proofs \item lables of enumerations \item citation style and labeling.
+\end{itemize}
+
+This class depends on the following packages
+for its proper functioning:
+
+\begin{enumerate}
+\itemsep=0pt
+\item {natbib.sty} for citation processing;
+\item {geometry.sty} for margin settings;
+\item {fleqn.clo} for left aligned equations;
+\item {graphicx.sty} for graphics inclusion;
+\item {hyperref.sty} optional packages if hyperlinking is
+ required in the document;
+\end{enumerate}
+
+All the above packages are part of any
+standard \LaTeX{} installation.
+Therefore, the users need not be
+bothered about downloading any extra packages.
+
+\section{Installation}
+
+The package is available at author resources page at Elsevier
+(\url{http://www.elsevier.com/locate/latex}).
+The class may be moved or copied to a place, usually,\linebreak
+\verb+$TEXMF/tex/latex/elsevier/+, %$%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+or a folder which will be read
+by \LaTeX{} during document compilation. The \TeX{} file
+database needs updation after moving/copying class file. Usually,
+we use commands like \verb+mktexlsr+ or \verb+texhash+ depending
+upon the distribution and operating system.
+
+\section{Front matter}
+
+The author names and affiliations could be formatted in two ways:
+\begin{enumerate}[(1)]
+\item Group the authors per affiliation.
+\item Use footnotes to indicate the affiliations.
+\end{enumerate}
+See the front matter of this document for examples.
+You are recommended to conform your choice to the journal you
+are submitting to.
+
+\section{Bibliography styles}
+
+There are various bibliography styles available. You can select the
+style of your choice in the preamble of this document. These styles are
+Elsevier styles based on standard styles like Harvard and Vancouver.
+Please use Bib\TeX\ to generate your bibliography and include DOIs
+whenever available.
+
+Here are two sample references:
+\cite{Fortunato2010}
+\cite{Fortunato2010,NewmanGirvan2004}
+\cite{Fortunato2010,Vehlowetal2013}
+
+\section{Floats}
+{Figures} may be included using the command,\linebreak
+\verb+\includegraphics+ in
+combination with or without its several options to further control
+graphic. \verb+\includegraphics+ is provided by {graphic[s,x].sty}
+which is part of any standard \LaTeX{} distribution.
+{graphicx.sty} is loaded by default. \LaTeX{} accepts figures in
+the postscript format while pdf\LaTeX{} accepts {*.pdf},
+{*.mps} (metapost), {*.jpg} and {*.png} formats.
+pdf\LaTeX{} does not accept graphic files in the postscript format.
+
+\begin{figure}
+ \centering
+ \includegraphics[width=.9\columnwidth]{figs/cas-munnar-2024.jpg}
+ \caption{The beauty of Munnar, Kerala. (See also Table \protect\ref{tbl1}).}
+ \label{FIG:1}
+\end{figure}
+
+
+The \verb+table+ environment is handy for marking up tabular
+material. If users want to use {multirow.sty},
+{array.sty}, etc., to fine control/enhance the tables, they
+are welcome to load any package of their choice and
+{cas-dc.cls} will work in combination with all loaded
+packages.
+
+\begin{table}[width=.9\linewidth,cols=4,pos=h]
+\caption{This is a test caption. This is a test caption. This is a test
+caption. This is a test caption. Use \{table*\} instead of \{table\} if you
+want a two column spanned table.}\label{tbl1}
+\begin{tabular*}{\tblwidth}{@{} LLLL@{} }
+\toprule
+Col 1 & Col 2 & Col 3 & Col4\\
+\midrule
+12345 & 12345 & 123 & 12345 \\
+12345 & 12345 & 123 & 12345 \\
+12345 & 12345 & 123 & 12345 \\
+12345 & 12345 & 123 & 12345 \\
+12345 & 12345 & 123 & 12345 \\
+\bottomrule
+\end{tabular*}
+\end{table}
+
+\section[Theorem and ...]{Theorem and theorem like environments}
+
+{cas-dc.cls} provides a few shortcuts to format theorems and
+theorem-like environments with ease. In all commands the options that
+are used with the \verb+\newtheorem+ command will work exactly in the same
+manner. {cas-dc.cls} provides three commands to format theorem or
+theorem-like environments:
+
+\begin{verbatim}
+ \newtheorem{theorem}{Theorem}
+ \newtheorem{lemma}[theorem]{Lemma}
+ \newdefinition{rmk}{Remark}
+ \newproof{pf}{Proof}
+ \newproof{pot}{Proof of Theorem \ref{thm2}}
+\end{verbatim}
+
+
+The \verb+\newtheorem+ command formats a
+theorem in \LaTeX's default style with italicized font, bold font
+for theorem heading and theorem number at the right hand side of the
+theorem heading. It also optionally accepts an argument which
+will be printed as an extra heading in parentheses.
+
+\begin{verbatim}
+ \begin{theorem}
+ For system (8), consensus can be achieved with
+ $\|T_{\omega z}$ ...
+ \begin{eqnarray}\label{10}
+ ....
+ \end{eqnarray}
+ \end{theorem}
+\end{verbatim}
+
+
+\newtheorem{theorem}{Theorem}
+
+\begin{theorem}
+For system (8), consensus can be achieved with
+$\|T_{\omega z}$ ...
+\begin{eqnarray}\label{10}
+....
+\end{eqnarray}
+\end{theorem}
+
+The \verb+\newdefinition+ command is the same in
+all respects as its \verb+\newtheorem+ counterpart except that
+the font shape is roman instead of italic. Both
+\verb+\newdefinition+ and \verb+\newtheorem+ commands
+automatically define counters for the environments defined.
+
+The \verb+\newproof+ command defines proof environments with
+upright font shape. No counters are defined.
+
+\begin{figure*}
+ \centering
+ \includegraphics[width=.9\textwidth]{figs/cas-munnar-2024.jpg}
+ \caption{The beauty of Munnar, Kerala. (See also Table \protect\ref{tbl1}).}
+ \label{FIG:2}
+\end{figure*}
+
+
+\section[Enumerated ...]{Enumerated and Itemized Lists}
+{cas-dc.cls} provides an extended list processing macros
+which makes the usage a bit more user friendly than the default
+\LaTeX{} list macros. With an optional argument to the
+\verb+\begin{enumerate}+ command, you can change the list counter
+type and its attributes.
+
+\begin{verbatim}
+ \begin{enumerate}[1.]
+ \item The enumerate environment starts with an optional
+ argument `1.', so that the item counter will be suffixed
+ by a period.
+ \item You can use `a)' for alphabetical counter and '(i)'
+ for roman counter.
+ \begin{enumerate}[a)]
+ \item Another level of list with alphabetical counter.
+ \item One more item before we start another.
+ \item One more item before we start another.
+ \item One more item before we start another.
+ \item One more item before we start another.
+\end{verbatim}
+
+Further, the enhanced list environment allows one to prefix a
+string like `step' to all the item numbers.
+
+\begin{verbatim}
+ \begin{enumerate}[Step 1.]
+ \item This is the first step of the example list.
+ \item Obviously this is the second step.
+ \item The final step to wind up this example.
+ \end{enumerate}
+\end{verbatim}
+
+\section{Cross-references}
+In electronic publications, articles may be internally
+hyperlinked. Hyperlinks are generated from proper
+cross-references in the article. For example, the words
+\textcolor{black!80}{Fig.~1} will never be more than simple text,
+whereas the proper cross-reference \verb+\ref{tiger}+ may be
+turned into a hyperlink to the figure itself:
+\textcolor{blue}{Fig.~1}. In the same way,
+the words \textcolor{blue}{Ref.~[1]} will fail to turn into a
+hyperlink; the proper cross-reference is \verb+\cite{Knuth96}+.
+Cross-referencing is possible in \LaTeX{} for sections,
+subsections, formulae, figures, tables, and literature
+references.
+
+\section{Bibliography}
+
+Two bibliographic style files (\verb+*.bst+) are provided ---
+{model1-num-names.bst} and {model2-names.bst} --- the first one can be
+used for the numbered scheme. This can also be used for the numbered
+with new options of {natbib.sty}. The second one is for the author year
+scheme. When you use model2-names.bst, the citation commands will be
+like \verb+\citep+, \verb+\citet+, \verb+\citealt+ etc. However when
+you use model1-num-names.bst, you may use only \verb+\cite+ command.
+
+\verb+thebibliography+ environment. Each reference is a\linebreak
+\verb+\bibitem+ and each \verb+\bibitem+ is identified by a label,
+by which it can be cited in the text:
+
+\noindent In connection with cross-referencing and
+possible future hyperlinking it is not a good idea to collect
+more that one literature item in one \verb+\bibitem+. The
+so-called Harvard or author-year style of referencing is enabled
+by the \LaTeX{} package {natbib}. With this package the
+literature can be cited as follows:
+
+\begin{enumerate}[\textbullet]
+\item Parenthetical: \verb+\citep{WB96}+ produces (Wettig \& Brown, 1996).
+\item Textual: \verb+\citet{ESG96}+ produces Elson et al. (1996).
+\item An affix and part of a reference:\break
+\verb+\citep[e.g.][Ch. 2]{Gea97}+ produces (e.g. Governato et
+al., 1997, Ch. 2).
+\end{enumerate}
+
+In the numbered scheme of citation, \verb+\cite{<label>}+ is used,
+since \verb+\citep+ or \verb+\citet+ has no relevance in the numbered
+scheme. {natbib} package is loaded by {cas-dc} with
+\verb+numbers+ as default option. You can change this to author-year
+or harvard scheme by adding option \verb+authoryear+ in the class
+loading command. If you want to use more options of the {natbib}
+package, you can do so with the \verb+\biboptions+ command. For
+details of various options of the {natbib} package, please take a
+look at the {natbib} documentation, which is part of any standard
+\LaTeX{} installation.
+
+\appendix
+\section{My Appendix}
+Appendix sections are coded under \verb+\appendix+.
+
+\verb+\printcredits+ command is used after appendix sections to list
+author credit taxonomy contribution roles tagged using \verb+\credit+
+in frontmatter.
+
+\printcredits
+
+%% Loading bibliography style file
+%\bibliographystyle{model1-num-names}
+\bibliographystyle{cas-model2-names}
+
+% Loading bibliography database
+\bibliography{cas-refs}
+
+
+%\vskip3pt
+
+\bio{}
+Author biography without author photo.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+\endbio
+
+\bio{figs/cas-pic1}
+Author biography with author photo.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+\endbio
+
+\bio{figs/cas-pic1}
+Author biography with author photo.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+\endbio
+
+\end{document}
+
diff --git a/macros/latex/contrib/els-cas-templates/cas-dc-template.tex b/macros/latex/contrib/els-cas-templates/cas-dc-template.tex
index 5cefee69db..609fc3005c 100644
--- a/macros/latex/contrib/els-cas-templates/cas-dc-template.tex
+++ b/macros/latex/contrib/els-cas-templates/cas-dc-template.tex
@@ -1,14 +1,14 @@
%%
-%% Copyright 2019-2021 Elsevier Ltd
+%% Copyright 2019-2024 Elsevier Ltd
%%
%% This file is part of the 'CAS Bundle'.
%% --------------------------------------
%%
%% It may be distributed under the conditions of the LaTeX Project Public
-%% License, either version 1.2 of this license or (at your option) any
+%% License, either version 1.3c of this license or (at your option) any
%% later version. The latest version of this license is in
%% http://www.latex-project.org/lppl.txt
-%% and version 1.2 or later is part of all distributions of LaTeX
+%% and version 1.3c or later is part of all distributions of LaTeX
%% version 1999/12/01 or later.
%%
%% The list of all files belonging to the 'CAS Bundle' is
@@ -47,21 +47,21 @@
\def\textpagefraction{.001}
% Short title
-\shorttitle{<short title of the paper for running head>}
+\shorttitle{}
% Short author
-\shortauthors{<short author list for running head>}
+\shortauthors{}
% Main title of the paper
-\title [mode = title]{<main title>}
+\title [mode = title]{}
% Title footnote mark
% eg: \tnotemark[1]
-\tnotemark[<tnote number>]
+\tnotemark[1]
% Title footnote 1.
% eg: \tnotetext[1]{Title footnote text}
-\tnotetext[<tnote number>]{<tnote text>}
+\tnotetext[1]{}
% First author
%
@@ -77,26 +77,26 @@
% linkedin=<linkedin id>,
% gplus=<gplus id>]
-\author[<aff no>]{<author name>}[<options>]
+\author[1]{}%[<options>]
% Corresponding author indication
-\cormark[<corr mark no>]
+\cormark[1]
% Footnote of the first author
-\fnmark[<footnote mark no>]
+\fnmark[1]
% Email id of the first author
-\ead{<email address>}
+\ead{}
% URL of the first author
-\ead[url]{<URL>}
+\ead[url]{}
% Credit authorship
% eg: \credit{Conceptualization of this study, Methodology, Software}
-\credit{<Credit authorship details>}
+\credit{}
% Address/affiliation
-\affiliation[<aff no>]{organization={},
+\affiliation[1]{organization={},
addressline={},
city={},
% citysep={}, % Uncomment if no comma needed between city and postcode
@@ -104,7 +104,7 @@
state={},
country={}}
-\author[<aff no>]{<author name>}[<options>]
+\author[2]{}%[]
% Footnote of the second author
\fnmark[2]
@@ -119,7 +119,7 @@
\credit{}
% Address/affiliation
-\affiliation[<aff no>]{organization={},
+\affiliation[2]{organization={},
addressline={},
city={},
% citysep={}, % Uncomment if no comma needed between city and postcode
@@ -138,7 +138,7 @@
% Here goes the abstract
\begin{abstract}
-
+Here goes the abstract \nocite{*}%% Remove this line from your manuscript.
\end{abstract}
% Use if graphical abstract is present
@@ -153,6 +153,9 @@
\item
\end{highlights}
+
+%\nocite{*}
+
% Keywords
% Each keyword is seperated by \sep
\begin{keywords}
@@ -187,15 +190,17 @@
%\item[]
%\end{description}
+\clearpage %%Remove this from your manuscript
+
% Figure
-\begin{figure}[<options>]
- \centering
- \includegraphics[<options>]{}
- \caption{}\label{fig1}
+\begin{figure}%[]
+ \centering
+% \includegraphics{}
+ \caption{}\label{fig1}
\end{figure}
-\begin{table}[<options>]
+\begin{table}%[]
\caption{}\label{tbl1}
\begin{tabular*}{\tblwidth}{@{}LL@{}}
\toprule
@@ -231,16 +236,16 @@
\bibliographystyle{cas-model2-names}
% Loading bibliography database
-\bibliography{}
+\bibliography{cas-refs}
% Biography
-\bio{}
+%\bio{}
% Here goes the biography details.
-\endbio
+%\endbio
-\bio{pic1}
+%\bio{pic1}
% Here goes the biography details.
-\endbio
+%\endbio
\end{document}
diff --git a/macros/latex/contrib/els-cas-templates/cas-dc.cls b/macros/latex/contrib/els-cas-templates/cas-dc.cls
index a96661bd27..674299c7f7 100644
--- a/macros/latex/contrib/els-cas-templates/cas-dc.cls
+++ b/macros/latex/contrib/els-cas-templates/cas-dc.cls
@@ -15,11 +15,11 @@
%% given in the file `manifest.txt'.
%%
-%% $Id: cas-dc.cls 66 2021-05-11 14:17:42Z rishi $
+%% $Id: cas-dc.cls 96 2024-05-04 09:29:44Z rishi $
\def\RCSfile{cas-dc}%
- \def\RCSversion{2.3}%
- \def\RCSdate{2021/05/11}%
+ \def\RCSversion{2.4}%
+ \def\RCSdate{2024/05/04}%
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesClass{\RCSfile}[\RCSdate, \RCSversion: Formatting class
for CAS double column articles]
@@ -48,7 +48,7 @@
\DeclareOption{final}{\global\casfinallayouttrue}
\DeclareOption{review}{\global\casreviewlayouttrue}
-\ExecuteOptions{a4paper,10pt,oneside,fleqn,review}
+\ExecuteOptions{a4paper,10pt,oneside,fleqn}
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
\ProcessOptions
\LoadClass{article}
@@ -64,6 +64,8 @@
\RequirePackage{xspace,xstring,footmisc}
\RequirePackage[svgnames,dvipsnames]{xcolor}
+\ifbool{casreviewlayout}{\RequirePackage{setspace}}{}
+
\RequirePackage[colorlinks]{hyperref}
\colorlet{scolor}{black}
\colorlet{hscolor}{DarkSlateGrey}
@@ -112,17 +114,26 @@
\thispagestyle{first}
\ifbool{longmktitle}
{
- \LongMaketitleBox
+ \ifnum\theblind>0\relax
+ \LongMaketitleBox[Blind]
+ \else
+ \LongMaketitleBox
+ \fi
\ProcessLongTitleBox
}
{
- \twocolumn[\MaketitleBox]
+ \ifnum\theblind>0\relax
+ \twocolumn[{\MaketitleBox[blind]}]
+ \else
+ \twocolumn[\MaketitleBox]
+ \fi
\printFirstPageNotes
}
\setcounter{footnote}{\int_use:N \g_stm_fnote_int}
\renewcommand\thefootnote{\arabic{footnote}}
\gdef\@pdfauthor{\infoauthors}
\gdef\@pdfsubject{Complex ~STM ~Content}
+ \ifbool{casreviewlayout}{\doublespacing}{}
}
%
@@ -170,6 +181,7 @@
\endinput
%
-% End of class 'cas-sc'
+% End of class 'cas-dc'
%
+
diff --git a/macros/latex/contrib/els-cas-templates/cas-model2-names.bst b/macros/latex/contrib/els-cas-templates/cas-model2-names.bst
index 503b2b7a34..726b5f6acf 100644
--- a/macros/latex/contrib/els-cas-templates/cas-model2-names.bst
+++ b/macros/latex/contrib/els-cas-templates/cas-model2-names.bst
@@ -1,16 +1,16 @@
%%
-%% This is file `cas-model2-names.bst' (Version 2.3),
+%% This is file `cas-model2-names.bst' (Version 2.4),
%%
-%% Copyright 2009-2021 Elsevier Ltd
+%% Copyright 2009-2024 Elsevier Ltd
%%
%% This file is part of the 'Elsarticle Bundle'.
%% ---------------------------------------------
%%
%% It may be distributed under the conditions of the LaTeX Project Public
-%% License, either version 1.2 of this license or (at your option) any
+%% License, either version 1.3c of this license or (at your option) any
%% later version. The latest version of this license is in
%% http://www.latex-project.org/lppl.txt
-%% and version 1.2 or later is part of all distributions of LaTeX
+%% and version 1.3c or later is part of all distributions of LaTeX
%% version 1999/12/01 or later.
%%
%% $Id: cas-model2-names.bst$
diff --git a/macros/latex/contrib/els-cas-templates/cas-refs.bib b/macros/latex/contrib/els-cas-templates/cas-refs.bib
index ba1cb22d73..867e4283f7 100644
--- a/macros/latex/contrib/els-cas-templates/cas-refs.bib
+++ b/macros/latex/contrib/els-cas-templates/cas-refs.bib
@@ -205,7 +205,7 @@
}
@ARTICLE{Havensetal2013,
- author = {Havens, T. C. and Bezdek, J. C. and Leckie, C., Ramamohanarao, K. and Palaniswami, M.},
+ author = {Havens, T. C. and Bezdek, J. C. and Leckie, C. and Ramamohanarao, K. and Palaniswami, M.},
title = {A Soft Modularity Function For Detecting Fuzzy Communities in Social Networks},
journal = {IEEE Trans. Fuzzy Syst.},
volume = {21},
diff --git a/macros/latex/contrib/els-cas-templates/cas-sc-sample.pdf b/macros/latex/contrib/els-cas-templates/cas-sc-sample.pdf
new file mode 100644
index 0000000000..2e9931d2b0
--- /dev/null
+++ b/macros/latex/contrib/els-cas-templates/cas-sc-sample.pdf
Binary files differ
diff --git a/macros/latex/contrib/els-cas-templates/cas-sc-sample.tex b/macros/latex/contrib/els-cas-templates/cas-sc-sample.tex
new file mode 100644
index 0000000000..8f7a3343c7
--- /dev/null
+++ b/macros/latex/contrib/els-cas-templates/cas-sc-sample.tex
@@ -0,0 +1,457 @@
+%%
+%% Copyright 2019-2024 Elsevier Ltd
+%%
+%% Version 2.4
+%%
+%% This file is part of the 'CAS Bundle'.
+%% --------------------------------------
+%%
+%% It may be distributed under the conditions of the LaTeX Project Public
+%% License, either version 1.2 of this license or (at your option) any
+%% later version. The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.2 or later is part of all distributions of LaTeX
+%% version 1999/12/01 or later.
+%%
+%% The list of all files belonging to the 'CAS Bundle' is
+%% given in the file `manifest.txt'.
+%%
+%% Template article for cas-sc documentclass for
+%% single column output.
+
+%\documentclass[a4paper,fleqn,longmktitle]{cas-sc}
+\documentclass[a4paper,fleqn]{cas-sc}
+
+%\usepackage[numbers]{natbib}
+%\usepackage[authoryear]{natbib}
+\usepackage[authoryear,longnamesfirst]{natbib}
+
+%%%Author macros
+\def\tsc#1{\csdef{#1}{\textsc{\lowercase{#1}}\xspace}}
+\tsc{WGM}
+\tsc{QE}
+\tsc{EP}
+\tsc{PMS}
+\tsc{BEC}
+\tsc{DE}
+%%%
+
+\begin{document}
+\let\WriteBookmarks\relax
+\def\floatpagepagefraction{1}
+\def\textpagefraction{.001}
+\shorttitle{Leveraging social media news}
+\shortauthors{J.K. Krishnan et~al.}
+%\begin{frontmatter}
+
+\title [mode = title]{This is a specimen $a_b$ title}
+\tnotemark[1,2]
+
+\tnotetext[1]{This document is the results of the research
+ project funded by the National Science Foundation.}
+
+\tnotetext[2]{The second title footnote which is a longer text matter
+ to fill through the whole text width and overflow into
+ another line in the footnotes area of the first page.}
+
+
+\author[1,3]{J.K. Krishnan}[type=editor,
+ auid=000,bioid=1,
+ prefix=Sir,
+ role=Researcher,
+ orcid=0000-0001-0000-0000]
+\cormark[1]
+\fnmark[1]
+\ead{jkk@example.in}
+\ead[url]{www.jkkrishnan.in}
+
+\credit{Conceptualization of this study, Methodology, Software}
+
+\affiliation[1]{organization={Department of Physics, J.K. Institute of Science},
+ addressline={Jawahar Nagar},
+ city={Trivandrum},
+% citysep={}, % Uncomment if no comma needed between city and postcode
+ postcode={695013},
+ state={Kerala},
+ country={India}}
+
+\author[2,4]{Han Thane}[style=chinese]
+
+\author[2,3]{William {J. Hansen}}[%
+ role=Co-ordinator,
+ suffix=Jr,
+ ]
+\fnmark[2]
+\ead{wjh@example.org}
+\ead[URL]{https://www.university.org}
+
+\credit{Data curation, Writing - Original draft preparation}
+
+\affiliation[2]{organization={World Scientific University},
+ addressline={Street 29},
+ postcode={1011 NX},
+ postcodesep={},
+ city={Amsterdam},
+ country={The Netherlands}}
+
+\author[1,3]{T. Rafeeq}
+\cormark[2]
+\fnmark[1,3]
+\ead{t.rafeeq@example.in}
+\ead[URL]{www.campus.in}
+
+\affiliation[3]{organization={University of Intelligent Studies},
+ addressline={Street 15},
+ city={Jabaldesh},
+ postcode={825001},
+ state={Orissa},
+ country={India}}
+
+\cortext[cor1]{Corresponding author}
+\cortext[cor2]{Principal corresponding author}
+\fntext[fn1]{This is the first author footnote, but is common to third
+ author as well.}
+\fntext[fn2]{Another author footnote, this is a very long footnote and
+ it should be a really long footnote. But this footnote is not yet
+ sufficiently long enough to make two lines of footnote text.}
+
+\nonumnote{This note has no numbers. In this work we demonstrate $a_b$
+ the formation Y\_1 of a new type of polariton on the interface
+ between a cuprous oxide slab and a polystyrene micro-sphere placed
+ on the slab.
+ }
+
+\begin{abstract}
+This template helps you to create a properly formatted \LaTeX\ manuscript.
+
+\noindent\texttt{\textbackslash begin{abstract}} \dots
+\texttt{\textbackslash end{abstract}} and
+\verb+\begin{keyword}+ \verb+...+ \verb+\end{keyword}+
+which
+contain the abstract and keywords respectively.
+Each keyword shall be separated by a \verb+\sep+ command.
+\end{abstract}
+
+\begin{graphicalabstract}
+\includegraphics{figs/cas-grabs.pdf}
+\end{graphicalabstract}
+
+\begin{highlights}
+\item Research highlights item 1
+\item Research highlights item 2
+\item Research highlights item 3
+\end{highlights}
+
+\begin{keywords}
+quadrupole exciton \sep polariton \sep \WGM \sep \BEC
+\end{keywords}
+
+
+\maketitle
+
+
+\section{Introduction}
+
+The Elsevier cas-sc class is based on the
+standard article class and supports almost all of the functionality of
+that class. In addition, it features commands and options to format the
+\begin{itemize} \item document style \item baselineskip \item front
+matter \item keywords and MSC codes \item theorems, definitions and
+proofs \item lables of enumerations \item citation style and labeling.
+\end{itemize}
+
+This class depends on the following packages
+for its proper functioning:
+
+\begin{enumerate}
+\itemsep=0pt
+\item {natbib.sty} for citation processing;
+\item {geometry.sty} for margin settings;
+\item {fleqn.clo} for left aligned equations;
+\item {graphicx.sty} for graphics inclusion;
+\item {hyperref.sty} optional packages if hyperlinking is
+ required in the document;
+\end{enumerate}
+
+All the above packages are part of any
+standard \LaTeX{} installation.
+Therefore, the users need not be
+bothered about downloading any extra packages.
+
+\section{Installation}
+
+The package is available at author resources page at Elsevier
+(\url{http://www.elsevier.com/locate/latex}).
+The class may be moved or copied to a place, usually,
+\verb+$TEXMF/tex/latex/elsevier/+, %$%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+or a folder which will be read
+by \LaTeX{} during document compilation. The \TeX{} file
+database needs updation after moving/copying class file. Usually,
+we use commands like \verb+mktexlsr+ or \verb+texhash+ depending
+upon the distribution and operating system.
+
+\section{Front matter}
+
+The author names and affiliations could be formatted in two ways:
+\begin{enumerate}[(1)]
+\item Group the authors per affiliation.
+\item Use footnotes to indicate the affiliations.
+\end{enumerate}
+See the front matter of this document for examples.
+You are recommended to conform your choice to the journal you
+are submitting to.
+
+\section{Bibliography styles}
+
+There are various bibliography styles available. You can select the
+style of your choice in the preamble of this document. These styles are
+Elsevier styles based on standard styles like Harvard and Vancouver.
+Please use Bib\TeX\ to generate your bibliography and include DOIs
+whenever available.
+
+Here are two sample references:
+See \citet{Fortunato2010}. Also refer \citet{Fortunato2010,NewmanGirvan2004}.
+More citations are here \citep{Fortunato2010,Vehlowetal2013}.
+
+\section{Floats}
+{Figures} may be included using the command, \verb+\includegraphics+ in
+combination with or without its several options to further control
+graphic. \verb+\includegraphics+ is provided by {graphic[s,x].sty}
+which is part of any standard \LaTeX{} distribution.
+{graphicx.sty} is loaded by default. \LaTeX{} accepts figures in
+the postscript format while pdf\LaTeX{} accepts {*.pdf},
+{*.mps} (metapost), {*.jpg} and {*.png} formats.
+pdf\LaTeX{} does not accept graphic files in the postscript format.
+
+\begin{figure}
+ \centering
+ \includegraphics[width=.9\textwidth]{figs/cas-munnar-2024.jpg}
+ \caption{The beauty of Munnar, Kerala. (See also Table \protect\ref{tbl1}).}
+ \label{FIG:1}
+\end{figure}
+
+
+The \verb+table+ environment is handy for marking up tabular
+material. If users want to use {multirow.sty},
+{array.sty}, etc., to fine control/enhance the tables, they
+are welcome to load any package of their choice and
+{cas-sc.cls} will work in combination with all loaded
+packages.
+
+\begin{table}[width=.9\linewidth,cols=4,pos=h]
+\caption{This is a test caption. This is a test caption. This is a test
+caption. This is a test caption.}\label{tbl1}
+\begin{tabular*}{\tblwidth}{@{} LLLL@{} }
+\toprule
+Col 1 & Col 2 & Col 3 & Col4\\
+\midrule
+12345 & 12345 & 123 & 12345 \\
+12345 & 12345 & 123 & 12345 \\
+12345 & 12345 & 123 & 12345 \\
+12345 & 12345 & 123 & 12345 \\
+12345 & 12345 & 123 & 12345 \\
+\bottomrule
+\end{tabular*}
+\end{table}
+
+\section[Theorem and ...]{Theorem and theorem like environments}
+
+{cas-sc.cls} provides a few shortcuts to format theorems and
+theorem-like environments with ease. In all commands the options that
+are used with the \verb+\newtheorem+ command will work exactly in the same
+manner. {cas-sc.cls} provides three commands to format theorem or
+theorem-like environments:
+
+\begin{verbatim}
+ \newtheorem{theorem}{Theorem}
+ \newtheorem{lemma}[theorem]{Lemma}
+ \newdefinition{rmk}{Remark}
+ \newproof{pf}{Proof}
+ \newproof{pot}{Proof of Theorem \ref{thm2}}
+\end{verbatim}
+
+
+The \verb+\newtheorem+ command formats a
+theorem in \LaTeX's default style with italicized font, bold font
+for theorem heading and theorem number at the right hand side of the
+theorem heading. It also optionally accepts an argument which
+will be printed as an extra heading in parentheses.
+
+\begin{verbatim}
+ \begin{theorem}
+ For system (8), consensus can be achieved with
+ $\|T_{\omega z}$ ...
+ \begin{eqnarray}\label{10}
+ ....
+ \end{eqnarray}
+ \end{theorem}
+\end{verbatim}
+
+\newtheorem{theorem}{Theorem}
+
+\begin{theorem}
+For system (8), consensus can be achieved with
+$\|T_{\omega z}$ ...
+\begin{eqnarray}\label{10}
+....
+\end{eqnarray}
+\end{theorem}
+
+The \verb+\newdefinition+ command is the same in
+all respects as its \verb+\newtheorem+ counterpart except that
+the font shape is roman instead of italic. Both
+\verb+\newdefinition+ and \verb+\newtheorem+ commands
+automatically define counters for the environments defined.
+
+The \verb+\newproof+ command defines proof environments with
+upright font shape. No counters are defined.
+
+
+\section[Enumerated ...]{Enumerated and Itemized Lists}
+{cas-sc.cls} provides an extended list processing macros
+which makes the usage a bit more user friendly than the default
+\LaTeX{} list macros. With an optional argument to the
+\verb+\begin{enumerate}+ command, you can change the list counter
+type and its attributes.
+
+\begin{verbatim}
+ \begin{enumerate}[1.]
+ \item The enumerate environment starts with an optional
+ argument `1.', so that the item counter will be suffixed
+ by a period.
+ \item You can use `a)' for alphabetical counter and '(i)' for
+ roman counter.
+ \begin{enumerate}[a)]
+ \item Another level of list with alphabetical counter.
+ \item One more item before we start another.
+ \item One more item before we start another.
+ \item One more item before we start another.
+ \item One more item before we start another.
+\end{verbatim}
+
+Further, the enhanced list environment allows one to prefix a
+string like `step' to all the item numbers.
+
+%\pagebreak
+\begin{verbatim}
+ \begin{enumerate}[Step 1.]
+ \item This is the first step of the example list.
+ \item Obviously this is the second step.
+ \item The final step to wind up this example.
+ \end{enumerate}
+\end{verbatim}
+
+\section{Cross-references}
+In electronic publications, articles may be internally
+hyperlinked. Hyperlinks are generated from proper
+cross-references in the article. For example, the words
+\textcolor{black!80}{Fig.~1} will never be more than simple text,
+whereas the proper cross-reference \verb+\ref{tiger}+ may be
+turned into a hyperlink to the figure itself:
+\textcolor{blue}{Fig.~1}. In the same way,
+the words \textcolor{blue}{Ref.~[1]} will fail to turn into a
+hyperlink; the proper cross-reference is \verb+\cite{Knuth96}+.
+Cross-referencing is possible in \LaTeX{} for sections,
+subsections, formulae, figures, tables, and literature
+references.
+
+\section{Bibliography}
+
+Two bibliographic style files (\verb+*.bst+) are provided ---
+{model1-num-names.bst} and {model2-names.bst} --- the first one can be
+used for the numbered scheme. This can also be used for the numbered
+with new options of {natbib.sty}. The second one is for the author year
+scheme. When you use model2-names.bst, the citation commands will be
+like \verb+\citep+, \verb+\citet+, \verb+\citealt+ etc. However when
+you use model1-num-names.bst, you may use only \verb+\cite+ command.
+
+\verb+thebibliography+ environment. Each reference is a
+\verb+\bibitem+ and each \verb+\bibitem+ is identified by a label,
+by which it can be cited in the text:
+
+\noindent In connection with cross-referencing and
+possible future hyperlinking it is not a good idea to collect
+more that one literature item in one \verb+\bibitem+. The
+so-called Harvard or author-year style of referencing is enabled
+by the \LaTeX{} package {natbib}. With this package the
+literature can be cited as follows:
+
+
+\begin{enumerate}[\textbullet]
+\item Parenthetical: \verb+\citep{WB96}+ produces (Wettig \& Brown, 1996).
+\item Textual: \verb+\citet{ESG96}+ produces Elson et al. (1996).
+\item An affix and part of a reference:
+\verb+\citep[e.g.][Ch. 2]{Gea97}+ produces (e.g. Governato et
+al., 1997, Ch. 2).
+\end{enumerate}
+
+In the numbered scheme of citation, \verb+\cite{<label>}+ is used,
+since \verb+\citep+ or \verb+\citet+ has no relevance in the numbered
+scheme. {natbib} package is loaded by {cas-sc} with
+\verb+numbers+ as default option. You can change this to author-year
+or harvard scheme by adding option \verb+authoryear+ in the class
+loading command. If you want to use more options of the {natbib}
+package, you can do so with the \verb+\biboptions+ command. For
+details of various options of the {natbib} package, please take a
+look at the {natbib} documentation, which is part of any standard
+\LaTeX{} installation.
+
+\appendix
+\section{My Appendix}
+Appendix sections are coded under \verb+\appendix+.
+
+\verb+\printcredits+ command is used after appendix sections to list
+author credit taxonomy contribution roles tagged using \verb+\credit+
+in frontmatter.
+
+\printcredits
+
+%% Loading bibliography style file
+%\bibliographystyle{model1-num-names}
+\bibliographystyle{cas-model2-names}
+
+% Loading bibliography database
+\bibliography{cas-refs}
+
+
+%\vskip3pt
+
+\bio{}
+Author biography without author photo.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+\endbio
+
+\bio{figs/cas-pic1}
+Author biography with author photo.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+\endbio
+
+\vskip3pc
+
+\bio{figs/cas-pic1}
+Author biography with author photo.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+\endbio
+
+
+\end{document}
+
diff --git a/macros/latex/contrib/els-cas-templates/cas-sc-template.tex b/macros/latex/contrib/els-cas-templates/cas-sc-template.tex
index 909bcdd024..c2cd7e58de 100644
--- a/macros/latex/contrib/els-cas-templates/cas-sc-template.tex
+++ b/macros/latex/contrib/els-cas-templates/cas-sc-template.tex
@@ -1,21 +1,21 @@
%%
-%% Copyright 2019-2021 Elsevier Ltd
+%% Copyright 2019-2024 Elsevier Ltd
%%
%% This file is part of the 'CAS Bundle'.
%% --------------------------------------
%%
%% It may be distributed under the conditions of the LaTeX Project Public
-%% License, either version 1.2 of this license or (at your option) any
+%% License, either version 1.3c of this license or (at your option) any
%% later version. The latest version of this license is in
%% http://www.latex-project.org/lppl.txt
-%% and version 1.2 or later is part of all distributions of LaTeX
+%% and version 1.3c or later is part of all distributions of LaTeX
%% version 1999/12/01 or later.
%%
%% The list of all files belonging to the 'CAS Bundle' is
%% given in the file `manifest.txt'.
%%
%% Template article for cas-sc documentclass for
-%% single column output.
+%% double column output.
\documentclass[a4paper,fleqn]{cas-sc}
@@ -47,21 +47,21 @@
\def\textpagefraction{.001}
% Short title
-\shorttitle{<short title of the paper for running head>}
+\shorttitle{}
% Short author
-\shortauthors{<short author list for running head>}
+\shortauthors{}
% Main title of the paper
-\title [mode = title]{<main title>}
+\title [mode = title]{}
% Title footnote mark
% eg: \tnotemark[1]
-\tnotemark[<tnote number>]
+\tnotemark[1]
% Title footnote 1.
% eg: \tnotetext[1]{Title footnote text}
-\tnotetext[<tnote number>]{<tnote text>}
+\tnotetext[1]{}
% First author
%
@@ -77,26 +77,26 @@
% linkedin=<linkedin id>,
% gplus=<gplus id>]
-\author[<aff no>]{<author name>}[<options>]
+\author[1]{}%[<options>]
% Corresponding author indication
-\cormark[<corr mark no>]
+\cormark[1]
% Footnote of the first author
-\fnmark[<footnote mark no>]
+\fnmark[1]
% Email id of the first author
-\ead{<email address>}
+\ead{}
% URL of the first author
-\ead[url]{<URL>}
+\ead[url]{}
% Credit authorship
% eg: \credit{Conceptualization of this study, Methodology, Software}
-\credit{<Credit authorship details>}
+\credit{}
% Address/affiliation
-\affiliation[<aff no>]{organization={},
+\affiliation[1]{organization={},
addressline={},
city={},
% citysep={}, % Uncomment if no comma needed between city and postcode
@@ -104,7 +104,7 @@
state={},
country={}}
-\author[<aff no>]{<author name>}[<options>]
+\author[2]{}%[]
% Footnote of the second author
\fnmark[2]
@@ -119,7 +119,7 @@
\credit{}
% Address/affiliation
-\affiliation[<aff no>]{organization={},
+\affiliation[2]{organization={},
addressline={},
city={},
% citysep={}, % Uncomment if no comma needed between city and postcode
@@ -138,7 +138,7 @@
% Here goes the abstract
\begin{abstract}
-
+Here goes the abstract \nocite{*}%% Remove this line from your manuscript.
\end{abstract}
% Use if graphical abstract is present
@@ -153,6 +153,7 @@
\item
\end{highlights}
+
% Keywords
% Each keyword is seperated by \sep
\begin{keywords}
@@ -187,15 +188,18 @@
%\item[]
%\end{description}
+\clearpage %%Remove this from your manuscript
+
+
% Figure
-\begin{figure}[<options>]
- \centering
- \includegraphics[<options>]{}
- \caption{}\label{fig1}
+\begin{figure}%[]
+ \centering
+% \includegraphics{}
+ \caption{}\label{fig1}
\end{figure}
-\begin{table}[<options>]
+\begin{table}%[]
\caption{}\label{tbl1}
\begin{tabular*}{\tblwidth}{@{}LL@{}}
\toprule
@@ -231,16 +235,16 @@
\bibliographystyle{cas-model2-names}
% Loading bibliography database
-\bibliography{}
+\bibliography{cas-refs}
% Biography
-\bio{}
+%\bio{}
% Here goes the biography details.
-\endbio
+%\endbio
-\bio{pic1}
+%\bio{pic1}
% Here goes the biography details.
-\endbio
+%\endbio
\end{document}
diff --git a/macros/latex/contrib/els-cas-templates/cas-sc.cls b/macros/latex/contrib/els-cas-templates/cas-sc.cls
index d84d03c2f2..51f829742e 100644
--- a/macros/latex/contrib/els-cas-templates/cas-sc.cls
+++ b/macros/latex/contrib/els-cas-templates/cas-sc.cls
@@ -15,11 +15,11 @@
%% given in the file `manifest.txt'.
%%
-%% $Id: cas-sc.cls 66 2021-05-11 14:17:42Z rishi $
+%% $Id: cas-sc.cls 96 2024-05-04 09:29:44Z rishi $
\def\RCSfile{cas-sc}%
- \def\RCSversion{2.3}%
- \def\RCSdate{2021/05/11}%
+ \def\RCSversion{2.4}%
+ \def\RCSdate{2024/05/04}%
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesClass{\RCSfile}[\RCSdate, \RCSversion: Formatting class
for CAS single column articles]
@@ -64,6 +64,8 @@
\RequirePackage{xspace,xstring,footmisc}
\RequirePackage[svgnames,dvipsnames]{xcolor}
+\ifbool{casreviewlayout}{\RequirePackage{setspace}}{}
+
\RequirePackage[colorlinks]{hyperref}
\colorlet{scolor}{black}
\colorlet{hscolor}{DarkSlateGrey}
@@ -161,8 +163,6 @@
{ \RequirePackage[scaled=.85]{inconsolata} }
{ \tex_gdef:D \ttdefault { cmtt } }
-\ifbool{casreviewlayout}{\RequirePackage{setspace}}{}
-
\ExplSyntaxOff
%
@@ -186,3 +186,4 @@
% End of class 'cas-sc'
%
+
diff --git a/macros/latex/contrib/els-cas-templates/doc/elsdoc-cas.pdf b/macros/latex/contrib/els-cas-templates/doc/elsdoc-cas.pdf
index 606232b3e3..b5ac0efabc 100644
--- a/macros/latex/contrib/els-cas-templates/doc/elsdoc-cas.pdf
+++ b/macros/latex/contrib/els-cas-templates/doc/elsdoc-cas.pdf
Binary files differ
diff --git a/macros/latex/contrib/els-cas-templates/doc/elsdoc-cas.tex b/macros/latex/contrib/els-cas-templates/doc/elsdoc-cas.tex
index 6b5b7186eb..2128780862 100644
--- a/macros/latex/contrib/els-cas-templates/doc/elsdoc-cas.tex
+++ b/macros/latex/contrib/els-cas-templates/doc/elsdoc-cas.tex
@@ -5,16 +5,16 @@
%% ---------------------------------------------
%%
%% It may be distributed under the conditions of the LaTeX Project Public
-%% License, either version 1.2 of this license or (at your option) any
+%% License, either version 1.3c of this license or (at your option) any
%% later version. The latest version of this license is in
%% http://www.latex-project.org/lppl.txt
-%% and version 1.2 or later is part of all distributions of LaTeX
+%% and version 1.3c or later is part of all distributions of LaTeX
%% version 1999/12/01 or later.
%%
%% The list of all files belonging to the 'CAS Bundle' is
%% given in the file `manifest.txt'.
%%
-%% $Id: elsdoc-cas.tex 71 2021-05-12 06:14:05Z rishi $
+%% $Id: elsdoc-cas.tex 76 2021-05-12 14:42:29Z rishi $
%%
\documentclass[a4paper,12pt]{article}
diff --git a/macros/latex/contrib/els-cas-templates/doc/rvdtx.sty b/macros/latex/contrib/els-cas-templates/doc/rvdtx.sty
index 06bb30edf6..0d94ff20a4 100644
--- a/macros/latex/contrib/els-cas-templates/doc/rvdtx.sty
+++ b/macros/latex/contrib/els-cas-templates/doc/rvdtx.sty
@@ -7,13 +7,13 @@
% Copyright (c) 2008-2021 CV Radhakrishnan <cvr@stmdocs.in>,
%
% This file may be distributed and/or modified under the conditions
-% of the LaTeX Project Public License, either version 1.2 of this
+% of the LaTeX Project Public License, either version 1.3c of this
% license or (at your option) any later version. The latest version
% of this license is in:
%
% http://www.latex-project.org/lppl.txt
%
-% and version 1.2 or later is part of all distributions of LaTeX
+% and version 1.3c or later is part of all distributions of LaTeX
% version 1999/12/01 or later.
%
%
diff --git a/macros/latex/contrib/els-cas-templates/figs/cas-grabs.pdf b/macros/latex/contrib/els-cas-templates/figs/cas-grabs.pdf
new file mode 100644
index 0000000000..a1ff5be7a5
--- /dev/null
+++ b/macros/latex/contrib/els-cas-templates/figs/cas-grabs.pdf
Binary files differ
diff --git a/macros/latex/contrib/els-cas-templates/figs/cas-munnar-2024.jpg b/macros/latex/contrib/els-cas-templates/figs/cas-munnar-2024.jpg
new file mode 100644
index 0000000000..14b57f7be0
--- /dev/null
+++ b/macros/latex/contrib/els-cas-templates/figs/cas-munnar-2024.jpg
Binary files differ
diff --git a/macros/latex/contrib/els-cas-templates/figs/cas-pic1.pdf b/macros/latex/contrib/els-cas-templates/figs/cas-pic1.pdf
new file mode 100644
index 0000000000..97471d0bdd
--- /dev/null
+++ b/macros/latex/contrib/els-cas-templates/figs/cas-pic1.pdf
Binary files differ
diff --git a/macros/latex/contrib/els-cas-templates/manifest.txt b/macros/latex/contrib/els-cas-templates/manifest.txt
index 2ab9dfa0f1..a7443de7b8 100644
--- a/macros/latex/contrib/els-cas-templates/manifest.txt
+++ b/macros/latex/contrib/els-cas-templates/manifest.txt
@@ -1,14 +1,16 @@
-% Copyright 2019-2021 Elsevier Ltd
+% Copyright 2019-2024 Elsevier Ltd
+%
+% Version 2.4
%
% This file is part of the 'CAS Bundle'.
% --------------------------------------
%
% It may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.2
+% conditions of the LaTeX Project Public License, either version 1.3c
% of this license or (at your option) any later version.
% The latest version of this license is in
% http://www.latex-project.org/lppl.txt
-% and version 1.2 or later is part of all distributions of LaTeX
+% and version 1.3c or later is part of all distributions of LaTeX
% version 1999/12/01 or later.
%
% The list of all files belonging to the LaTeX 'CAS Bundle' is
@@ -19,6 +21,12 @@
Directory elsevier-cas-template/
+manifest.txt
+ This file
+
+README
+ A brief readme documentation
+
cas-sc.cls
Classfile to be used for single column format
@@ -29,21 +37,21 @@ cas-model2-names.bst
BibTeX style file
cas-sc-template.tex
- TeX template
+ TeX template to be used for manuscript preparation (single column).
cas-dc-template.tex
- TeX template
+ TeX template to be used for manuscript preparation (double column).
-manifest.txt
- this file
+cas-sc-sample.tex
+ Minimum working exmple (MWE) file - single column.
-README
- small readme documentation
+cas-dc-sample.tex
+ Minimum working exmple (MWE) file - double column.
Directory doc/
The following files are graphic files needed for creating pdf output
-of the documentation from elsdoc.tex:
+of the documentation from elsdoc-cas.tex:
dc-sample.pdf
sc-sample.pdf
@@ -76,3 +84,11 @@ Auxiliary packages needed to generate pdf output from elsdoc.tex:
pdfwidgets.sty
glyphtounicode.tex
+
+Directory figs/
+
+Contains images used in the sample PDF.
+
+ cas-grabs.pdf
+ cas-munnar-2024.jpg
+ cas-pic1.pdf
diff --git a/macros/latex/contrib/esindex/README.md b/macros/latex/contrib/esindex/README.md
index 6ebd7e4c79..b1163025c4 100644
--- a/macros/latex/contrib/esindex/README.md
+++ b/macros/latex/contrib/esindex/README.md
@@ -18,6 +18,10 @@ in the document.
### Recent changes
```
+1.8 2024-04-27
+ - Fix - Some replacements stopped working in pdflatex with utf8
+ because of a change the LaTeX LICR.
+
1.7 2019-10-10
- Fix - because of a change in a macro name, it stopped
working with xe/lua
diff --git a/macros/latex/contrib/esindex/esindex.pdf b/macros/latex/contrib/esindex/esindex.pdf
index bc78b36c15..9272dd8291 100644
--- a/macros/latex/contrib/esindex/esindex.pdf
+++ b/macros/latex/contrib/esindex/esindex.pdf
Binary files differ
diff --git a/macros/latex/contrib/esindex/esindex.sty b/macros/latex/contrib/esindex/esindex.sty
index a63bdba6eb..72a0937c4d 100644
--- a/macros/latex/contrib/esindex/esindex.sty
+++ b/macros/latex/contrib/esindex/esindex.sty
@@ -1,5 +1,5 @@
%
-% Copyright (C) 1998-2019 Javier Bezos http://www.texnia.com
+% Copyright (C) 1998-2024 Javier Bezos http://www.texnia.com
%
% This file may be distributed and/or modified under the conditions of
% the MIT License. A version can be found at the end of this file.
@@ -7,7 +7,7 @@
% Repository: https://github.com/jbezos/esindex
%
-\ProvidesPackage{esindex}[2019/10/10 v1.7 Spanish indexes (and more)]
+\ProvidesPackage{esindex}[2024/04/27 v1.8 Spanish indexes (and more)]
\def\esx@level{`\!}
\def\esx@actual{`\@}
@@ -92,15 +92,40 @@
\gdef\esx@bar@eat#1|{\def\esx@a{|#1}}
}
-\gdef\esindexexpandkey{%
- \protected@edef\esindexkey{\esindexkey}}
+\gdef\esx@tolicr#1#2{%
+ \@ifundefined{u8\string:\string#1\string#2}%
+ {\unexpanded{#1#2}}%
+ {\@nameuse{u8\string:\string#1\string#2}}}
+
+\begingroup
+ \catcode`\^^c2=\active
+ \catcode`\^^c3=\active
+ \gdef\esx@expandkey#1{%
+ \ifnum\catcode`\^^c2=\active \ifnum\catcode`\^^c3=\active
+ \def\esx@a{^^c2^^c3}%
+ \protected@edef\esx@b{\esx@a}%
+ \ifx\esx@a\esx@b
+ \let\esx@cii ^^c2%
+ \let\esx@ciii ^^c3%
+ \def ^^c2{\esx@tolicr ^^c2}%
+ \def ^^c3{\esx@tolicr ^^c3}%
+ \protected@edef#1{#1}%
+ \let ^^c2\esx@cii
+ \let ^^c3\esx@ciii
+ \else
+ \protected@edef#1{#1}%
+ \fi
+ \fi\fi}
+\endgroup
+
+\gdef\esindexexpandkey{\esx@expandkey\esindexkey}
\gdef\esindexexpandsubkey{%
\ifx\esindexsubkey\relax\else
- \protected@edef\esindexsubkey{\esindexsubkey}%
+ \esx@expandkey\esindexsubkey
\fi}
\gdef\esindexexpandsubsubkey{%
\ifx\esindexsubsubkey\relax\else
- \protected@edef\esindexsubsubkey{\esindexsubsubkey}%
+ \esx@expandkey\esindexsubsubkey
\fi}
\gdef\esindexexpandkeys{%
diff --git a/macros/latex/contrib/esindex/esindex.tex b/macros/latex/contrib/esindex/esindex.tex
index 03d0b24386..64a6f18735 100644
--- a/macros/latex/contrib/esindex/esindex.tex
+++ b/macros/latex/contrib/esindex/esindex.tex
@@ -1,5 +1,5 @@
%
-% Copyright (C) 1998-2019 Javier Bezos http://www.texnia.com
+% Copyright (C) 1998-2024 Javier Bezos http://www.texnia.com
%
% This file may be distributed and/or modified under the conditions of
% the MIT License. A version can be found at the end of this file.
@@ -14,7 +14,7 @@
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
-\title{\textsf{esindex}\\\large 1.7\quad 2019-10-10}
+\title{\textsf{esindex}\\\large 1.8\quad 2024-04-27}
\author{Javier Bezos}
@@ -46,7 +46,7 @@
{\LARGE Generating automatically sort keys for \textit{MakeIndex}
with \LaTeX\par}
\vspace*{1ex}
-Version 1.7 (2019-10-10)\par
+Version 1.8 (2024-04-27)\par
\texttt{https://github.com/jbezos/esindex}\par
Javier Bezos (\texttt{http://www.texnia.com})
@@ -100,6 +100,8 @@ three-level key use \verb|\esindexreplacesubsub| (with 4 arguments). With
with the definitions above the key for \verb|ràpid| is
\verb|rapid^^Ar1pid|.)
+(Version 1.8 is just a bug fix.)
+
\section{Spanish}
Este paquete ha sido diseñado para facilitar la escritura de índices
diff --git a/macros/latex/contrib/fadingimage/README.md b/macros/latex/contrib/fadingimage/README.md
index d62c0a6078..9ed33c1695 100644
--- a/macros/latex/contrib/fadingimage/README.md
+++ b/macros/latex/contrib/fadingimage/README.md
@@ -1,17 +1,19 @@
# The `fadingimage` package
-This package provides three commands for adding fading full width picture at the top or bottom of a page.
+This package provides macros for inputting full width picture at the edges of pages quickly.
-**Welcome to pull requests
-[here](https://github.com/xiamyphys/fadingimage).**
+**Welcome to pull requests [here](https://github.com/xiamyphys/fadingimage/pulls).**
## License
-This work may be distributed and/or modified under the conditions of the
-[LaTeX Project Public License](http://www.latex-project.org/lppl.txt),
-either version 1.3c of this license or (at your option) any later version.
+This work may be distributed and/or modified under the conditions of the [LaTeX Project Public License](http://www.latex-project.org/lppl.txt), either version 1.3c of this license or (at your option) any later version.
This work has the LPPL maintenance status `maintained`.
-The Current Maintainer of this work is
-[Mingyu Hsia](https://www.ctan.org/author/xia-my). \ No newline at end of file
+The Current Maintainer of this work is [Mingyu Hsia](https://www.ctan.org/author/xia-my).
+
+## Derivative Works
+
+- [notebeamer](https://ctan.org/pkg/notebeamer): Package provides macros for inputting slides on note papers quickly.
+
+- [litesolution](https://ctan.org/pkg/litesolution): Class designed for typesetting solutions of problems in exams, textbooks, etc.
diff --git a/macros/latex/contrib/fadingimage/doc/fadingimage.pdf b/macros/latex/contrib/fadingimage/doc/fadingimage.pdf
index 85856e112f..ad4ab7eb7f 100644
--- a/macros/latex/contrib/fadingimage/doc/fadingimage.pdf
+++ b/macros/latex/contrib/fadingimage/doc/fadingimage.pdf
Binary files differ
diff --git a/macros/latex/contrib/fadingimage/doc/fadingimage.tex b/macros/latex/contrib/fadingimage/doc/fadingimage.tex
index 2aa6637e95..ad1ebbc3ae 100644
--- a/macros/latex/contrib/fadingimage/doc/fadingimage.tex
+++ b/macros/latex/contrib/fadingimage/doc/fadingimage.tex
@@ -1,5 +1,5 @@
\documentclass[11pt,svgnames]{article}
-\usepackage{geometry,titlesec,authblk,hyperref,hologo}
+\usepackage{geometry,indentfirst,titlesec,authblk,hyperref,hologo}
\titleformat*{\section}{\bfseries\large}
\hologoFontSetup{general=\sffamily}
\usepackage{datetime}\yyyymmdddate
@@ -11,19 +11,19 @@
\def\cmd#1{\textcolor{MidnightBlue}{\texttt{\string#1}}}
\title{\bfseries The \pkg{fadingimage} Package}
-\author{Mingyu Hsia, \href{mailto:xiamyphys@gmail.com}{\ttfamily xiamyphys@gmail.com}}
+\author{Mingyu Hsia, \href{mailto:xiamyphys@hdu.edu.cn}{\ttfamily xiamyphys@hdu.edu.cn}}
\affil{Hangzhou Dianzi University}
-\date{\today\quad Version 0.2a\thanks{\url{https://github.com/xiamyphys/fadingimage}}}
+\date{\today\quad Version 0.3a\thanks{\url{https://github.com/xiamyphys/fadingimage}}}
\begin{document}
\maketitle
-\UPFadingImage[trim={0 {.96\paperheight} 0 0},clip]{Beautiful-realities}
-\LOWFadingImage[trim={0 0 0 {.96\paperheight}},clip]{Beautiful-realities}
+\UPFadingImage*[trim={0 {.96\paperheight} 0 0},clip]{Beautiful-realities}
+\LOWFadingImage*[trim={0 0 0 {.96\paperheight}},clip]{Beautiful-realities}
\vspace{-6ex}
\begin{abstract}
-This is \textsf{\textbf{not only the document but also the demo}} for the \pkg{fadingimage} package, which provides three commands for adding fading full width picture at the top, bottom or both of them on a page. This package is contained in the \pkg{LiteBook} and \pkg{LiteSolution} class.
+This is \textsf{\textbf{not only the document but also the demo}} for the \pkg{fadingimage} package, which provides macros for inputting full width picture at the edges of pages quickly. This package is contained in the \pkg{LiteBook} and \pkg{LiteSolution} class.
Welcome to feedback bugs or ideas via email \href{mailto:xiamyphys@gmail.com}{\ttfamily xiamyphys@gmail.com} or \href{https://github.com/xiamyphys/fadingimage}{GitHub}.
@@ -41,15 +41,18 @@ Simply download \verb|fadingimage.cls| file from \href{https://github.com/xiamyp
To learn more, please refer to \href{https://tex.stackexchange.com/questions/55437/how-do-i-update-my-tex-distribution}{How do I update my \hologo{TeX} distribution?}
-\section{Commands \cmd{UPFadingImage}, \cmd{LOWFadingImage} and \cmd{UPLOWFadingImage}}
+\section{Macros in this package}
-\begin{small}\begin{verbatim}
- \UPFadingImage [<keyval list>]{<file>} \LOWFadingImage[<keyval list>]{<file>}
- \UPLOWFadingImage[<keyval list>]{<file>}[<keyval list>]{<file>}
-\end{verbatim}\end{small}
+\begin{verbatim}
+ \UPFadingImage <*> [<keyval list>] {<file>} <!> % fading from top
+ \LOWFadingImage <*> [<keyval list>] {<file>} <!> % fading from bottom
+ \LTFadingImage <*> [<keyval list>] {<file>} <!> % fading from left
+ \RITFadingImage <*> [<keyval list>] {<file>} <!> % fading from right
+\end{verbatim}
+
+The four commands all have 2 variables and the first one is optional. The second variable can assign the image that you want to insert and the first one can assign the parameters of command \cmd{includegraphics}, such as clip to the inserted image.
-The first two commands all have 2 variables and the first one is optional. The second variable of the commands can assign the image that you want to insert, and the first one can assign the parameters of command \cmd{includegraphics}, such as clip to the inserted image.
+If an exclamation \verb|<!>| is added at the end of the commands, the image inserted won't be faded. If a star \verb|<*>| is added after the commands it will automatically exit vertical mode \verb|\leavevmode| after inserting the image.
-The third command is just a combination of the first two commands. If a star (*) is added after the commands above, the image you inserted won't be faded.
\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/fadingimage/tex/fadingimage.sty b/macros/latex/contrib/fadingimage/tex/fadingimage.sty
index 6cfceced3b..a4147cd3cf 100644
--- a/macros/latex/contrib/fadingimage/tex/fadingimage.sty
+++ b/macros/latex/contrib/fadingimage/tex/fadingimage.sty
@@ -1,5 +1,5 @@
%% ***********************************************************
-%% Copyright 2024 by Mingyu Hsia <xiamyphys@gmail.com> *
+%% Copyright 2024 by Mingyu Hsia <xiamyphys@hdu.edu.cn> *
%% *
%% This work may be distributed and/or modified under *
%% the conditions of the LaTeX Project Public License *
@@ -13,48 +13,48 @@
%% *
%% The Current Maintainer of this work is Mingyu Hsia. *
%% *
-%% This work consists of the files fadingimage.cls, *
+%% This work consists of the files fadingimage.sty, *
%% and README.md. *
%% available at https://github.com/xiamyphys/fadingimage *
%% ***********************************************************
% !Mode:: "TeX:UTF-8"
\NeedsTeXFormat{LaTeX2e}[2020/10/01]
-\ProvidesPackage{fadingimage}[2024/04/19/ v0.2a Package for adding fading full width picture at the top and bottom of a page.]
+\ProvidesPackage{fadingimage}[2024/05/06/ v0.3a Package provides macros for inputting full width picture at the edges of pages quickly.]
-\RequirePackage{tikz,xcolor}
-\usetikzlibrary{fadings}
-\NewDocumentCommand{\UPFadingImage}{ s O{} m }{
- \IfBooleanTF{#1}
- {
+\RequirePackage{tikz}\usetikzlibrary{fadings}
+\NewDocumentCommand{\UPFadingImage}{ s O{} m t! }{
+ \IfBooleanTF{#4}{
\tikz[remember picture,overlay]
\node[below,inner sep=0pt,outer sep=auto] at (current page.north) {\includegraphics[width=\paperwidth,#2]{#3}};
}{
\tikz[remember picture,overlay]
\node[scope fading=south,below,inner sep=0pt,outer sep=auto] at (current page.north) {\includegraphics[width=\paperwidth,#2]{#3}};
- }
+ }\IfBooleanT{#1}{\leavevmode}
}
-\NewDocumentCommand{\LOWFadingImage}{ s O{} m }{
- \IfBooleanTF{#1}
- {
+\NewDocumentCommand{\LOWFadingImage}{ s O{} m t! }{
+ \IfBooleanTF{#4}{
\tikz[remember picture,overlay]
\node[above,inner sep=0pt,outer sep=auto] at (current page.south) {\includegraphics[width=\paperwidth,#2]{#3}};
}{
\tikz[remember picture,overlay]
\node[scope fading=north,above,inner sep=0pt,outer sep=auto] at (current page.south) {\includegraphics[width=\paperwidth,#2]{#3}};
- }
+ }\IfBooleanT{#1}{\leavevmode}
}
-
-\NewDocumentCommand{\UPLOWFadingImage}{ s O{} m O{} m }{
- \IfBooleanTF{#1}
- {
- \tikz[remember picture,overlay]{
- \node[below,inner sep=0pt,outer sep=auto] at (current page.north) {\includegraphics[width=\paperwidth,#2]{#3}};
- \node[above,inner sep=0pt,outer sep=auto] at (current page.south) {\includegraphics[width=\paperwidth,#4]{#5}};
- }
+\NewDocumentCommand{\LTFadingImage}{ s O{} m t! }{
+ \IfBooleanTF{#4}{
+ \tikz[remember picture,overlay]
+ \node[right,inner sep=0pt,outer sep=auto] at (current page.west) {\includegraphics[height=\paperheight,#2]{#3}};
}{
- \tikz[remember picture,overlay]{
- \node[scope fading=south,below,inner sep=0pt,outer sep=auto] at (current page.north) {\includegraphics[width=\paperwidth,#2]{#3}};
- \node[scope fading=north,above,inner sep=0pt,outer sep=auto] at (current page.south) {\includegraphics[width=\paperwidth,#4]{#5}};
- }
- }
+ \tikz[remember picture,overlay]
+ \node[scope fading=east,right,inner sep=0pt,outer sep=auto] at (current page.west) {\includegraphics[height=\paperheight,#2]{#3}};
+ }\IfBooleanT{#1}{\leavevmode}
+}
+\NewDocumentCommand{\RITFadingImage}{ s O{} m t! }{
+ \IfBooleanTF{#4}{
+ \tikz[remember picture,overlay]
+ \node[left,inner sep=0pt,outer sep=auto] at (current page.east) {\includegraphics[height=\paperheight,#2]{#3}};
+ }{
+ \tikz[remember picture,overlay]
+ \node[scope fading=west,left,inner sep=0pt,outer sep=auto] at (current page.east) {\includegraphics[height=\paperheight,#2]{#3}};
+ }\IfBooleanT{#1}{\leavevmode}
} \ No newline at end of file
diff --git a/macros/latex/contrib/fontscale/CHANGELOG.md b/macros/latex/contrib/fontscale/CHANGELOG.md
index 304749e825..9706fbbe09 100644
--- a/macros/latex/contrib/fontscale/CHANGELOG.md
+++ b/macros/latex/contrib/fontscale/CHANGELOG.md
@@ -7,6 +7,32 @@ Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to
## [Unreleased]
+## [v1.3.0] - 2024-05-17
+
+### Added
+- `\fontscalesetup` now provides error checking for the keys `modular/ratio`,
+ `musical/ratio`, and `musical/notes`.
+- It is now documented that `\fontscalesetup` uses `\normalsize` after it
+ finishes processing the package keys.
+
+### Changed
+- The code now regularly uses `V`- and `v`-type arguments to get the value of a
+ variable.
+- The code now uses private `expl3` wrappers around the LaTeX2e commands
+ `\@setfontsize`, `\fontsize`, and `\selectfont`.
+
+## [v1.2.2] - 2024-04-29
+
+### Changed
+- Improved package messages when issuing errors and warnings.
+- Code improvements.
+
+### Fixed
+- The documentation no longer incorrectly compares `\ScaleFont` with
+ `\scalefont` from the `scalefnt` package.
+- The internal function for the key `reset=preamble` now correctly initializes
+ to `\prg_do_nothing:`.
+
## [v1.2.1] - 2024-04-21
### Changed
diff --git a/macros/latex/contrib/fontscale/fontscale-manual.pdf b/macros/latex/contrib/fontscale/fontscale-manual.pdf
index c21ffd29a9..2637ef9c1f 100644
--- a/macros/latex/contrib/fontscale/fontscale-manual.pdf
+++ b/macros/latex/contrib/fontscale/fontscale-manual.pdf
Binary files differ
diff --git a/macros/latex/contrib/fontscale/fontscale-manual.tex b/macros/latex/contrib/fontscale/fontscale-manual.tex
index db839a0fd2..9917636a04 100644
--- a/macros/latex/contrib/fontscale/fontscale-manual.tex
+++ b/macros/latex/contrib/fontscale/fontscale-manual.tex
@@ -13,7 +13,7 @@ A user interface for setting document font sizes
Oliver Beery
-Version 1.2.1\quad{}21 April 2024
+Version 1.3.0\quad{}17 May 2024
\section{Introduction}
@@ -25,9 +25,9 @@ Version 1.2.1\quad{}21 April 2024
\listheading{The \pkg{fontscale} package provides the following functionalities:}
\begin{itemize}
\item
- Set document font sizes via a classic, modular, or musical typographic scale.
+ Set font sizes via a classic, modular, or musical typographic scale.
\item
- Set arbitrary scales, sizes, and baselineskips for the standard font size commands \cs{tiny}, \cs{scriptsize}, \cs{footnotesize}, \cs{small}, \cs{normalsize}, \cs{large}, \cs{Large}, \cs{LARGE}, \cs{huge}, and \cs{Huge}.
+ Set arbitrary sizes and baselineskips for the standard font size commands \cs{tiny}, \cs{scriptsize}, \cs{footnotesize}, \cs{small}, \cs{normalsize}, \cs{large}, \cs{Large}, \cs{LARGE}, \cs{huge}, and \cs{Huge}.
\item
Set the font size settings mid\-/document or within a local group.
\item
@@ -46,7 +46,7 @@ Version 1.2.1\quad{}21 April 2024
\label{subsec:loading}
This package requires the 10 October 2023 \pkg{l3kernel} update.
-Since this update is fairly recent, you may need to ensure that your \LaTeX{} installation is up\-/to\-/date before using this package.
+You may need to ensure that your \LaTeX{} installation is up\-/to\-/date before using this package.
This package lets the user set arbitrary font sizes.
This works with most fonts produced today, but, for historical reasons, the default Computer Modern font is available only in a number of fixed sizes.
@@ -223,7 +223,7 @@ Caution: \cs{CurrentFontStep} will expand to nothing if the current font step is
Internally, \cs{CurrentFontStep}, \cs{CurrentFontScale}, and \cs{CurrentFontSize} use the kernel command \cs{f@size}.
\cs{CurrentFontSize} expands to \texttt{f@size pt}.
\cs{CurrentFontBaselineskip} expands to the kernel command \cs{f@baselineskip}.
-Note that the low\-/level font command \cs{fontsize}\marg{\meta{dimen}}\marg{\meta{skip}} sets \cs{f@size} before expanding its second argument.
+Note that the low\-/level font command \cs{fontsize}\marg{\meta{dimen}}\marg{\meta{skip}} sets \cs{f@size} to the new font size before expanding its second argument.
This means that \cs{CurrentFontStep}, \cs{CurrentFontScale}, and \cs{CurrentFontSize} may need to be first expanded if used in \meta{skip}.
This package provides the command \cs{SetFontSizeBaselineskip} as an alternative to \cs{fontsize} + \cs{selectfont} that avoids this issue (\S\ref{subsec:fontsize}).
@@ -285,7 +285,6 @@ For example, \cs{SetFontSize*}\marg{1} and \cs{SetFontSize*}\marg{-1pt} increase
\KeepNextPar*
Scales the current font size and the current font baselineskip by a factor of \meta{fp expr}.
-\cs{ScaleFont} resembles the \cs{scalefont} command provided by the \pkg{scalefnt} package, except that it uses floating point calculations and clears the stretch and shrink components of the font baselineskip.
For example, if the current font size and font baselineskip are \qty{10}{pt} and \qty{12}{pt}, using \cs{ScaleFont}\marg{0.8} will reduce them proportionally to \qty{8}{pt} and \qty{9.6}{pt}.
\cs{SetFontSizeBaselineskip}\marg{\meta{dim expr}}\marg{\meta{skip expr}}
@@ -317,15 +316,16 @@ If the current font step is undefined (as explained for \cs{SetFontStep} in \S\r
The starred version \cs{PrintSampleText*} reverses the sizing order.
The \meta{text} can be changed via the optional argument, but cannot contain \cs{par} tokens.
The default \meta{text} is \enquote{The \texttt{fontscale} package: A user interface for setting document font sizes}.
+One useful way of printing example text is by using
+\cs{PrintSampleText}\oarg{\cs{PrintFontSizeCommand}:\textvisiblespace{}\cs{PrintFontParameters}}.
\cs{PrintFontSizeCommand}
\KeepNextPar*
-\cs{PrintFontSizeCommand} tests whether the current font size and font baselineskip match that of any font size command.
-If so, it prints the name of that font size command.
+\cs{PrintFontSizeCommand} tests whether the current font size and the current font baselineskip match the font size and font baselineskip of any font size command from \cs{tiny} to \cs{Huge}.
+If so, it prints the name of that font size command, including the backslash character.
If not, it instead prints \enquote{UNDEFINED\@}.
-One useful way of printing example text is by using
-\cs{PrintSampleText}\oarg{\cs{PrintFontSizeCommand}:\textvisiblespace{}\cs{PrintFontParameters}}.
+\vfill\pagebreak%manual
\subsection
{%
@@ -338,8 +338,12 @@ One useful way of printing example text is by using
\cs{fontscalesetup}\marg{\meta{keyval list}}
\KeepNextPar*
-Sets and processes the \pkg{fontscale} package keys and uses \cs{normalsize}.
+Sets and processes the \pkg{fontscale} package keys and then uses \cs{normalsize}.
\cs{fontscalesetup} can be applied mid\-/document or locally within the current \TeX{} group.
+
+\Key{reset}[initial, preamble]
+\KeepNextPar*
+
The key \Key{reset} is also available.
Its value must be either \texttt{initial} or \texttt{preamble}.
The key \Key{reset}[initial] or just \Key{reset} sets all the keys to their initial values.
@@ -351,7 +355,7 @@ The key \Key{reset}[preamble] sets all the keys to their values at the end of th
This section is relevant to \LaTeX3 programmers.
-The user commands \cs{SetFontStep}, \cs{SetFontScale}, \cs{SetFontSize}, \cs{ScaleFont}, and \cs{SetFontSizeBaselineskip} are set up to work with \cs{text_purify:n}.
+The document commands \cs{SetFontStep}, \cs{SetFontScale}, \cs{SetFontSize}, \cs{ScaleFont}, and \cs{SetFontSizeBaselineskip} are set up to work with \cs{text_purify:n}.
\cs{text_purify:n} will correctly remove these commands and their arguments.
This includes the starred versions \cs{SetFontStep*}, \cs{SetFontScale*}, and \cs{SetFontSize*}.
diff --git a/macros/latex/contrib/fontscale/fontscale.sty b/macros/latex/contrib/fontscale/fontscale.sty
index 7aa22fdd73..d032e49860 100644
--- a/macros/latex/contrib/fontscale/fontscale.sty
+++ b/macros/latex/contrib/fontscale/fontscale.sty
@@ -8,8 +8,8 @@
\NeedsTeXFormat{LaTeX2e}[2022-06-01]
\ProvidesExplPackage
{fontscale}
- {2024-04-21}
- {1.2.1}
+ {2024-05-17}
+ {1.3.0}
{A user interface for setting document font sizes}
% The 2023-10-10 l3kernel update added many 'e'-variants.
@@ -25,7 +25,9 @@
\msg_critical:nn { fontscale } { expl3-out-of-date }
}
-% SOME VARIABLES
+% This package does not require any other packages!
+
+% DECLARE FONT PARAMETER VARIABLES
\fp_const:Nn \c_fontscale_tiny_step_fp { -4 }
\fp_const:Nn \c_fontscale_scriptsize_step_fp { -3 }
@@ -40,41 +42,6 @@
\fp_const:Nn \c_fontscale_normalsize_scale_fp { 1 }
-\tl_const:Nn \c__fontscale_names_tl
- {
- {tiny} {scriptsize} {footnotesize} {small} {normalsize}
- {large} {Large} {LARGE} {huge} {Huge}
- }
-\tl_const:Nn \c__fontscale_names_other_tl
- {
- {tiny} {scriptsize} {footnotesize} {small}
- {large} {Large} {LARGE} {huge} {Huge}
- }
-
-\prop_new:N \l_fontscale_tiny_prop
-\prop_new:N \l_fontscale_scriptsize_prop
-\prop_new:N \l_fontscale_footnotesize_prop
-\prop_new:N \l_fontscale_small_prop
-\prop_new:N \l_fontscale_normalsize_prop
-\prop_new:N \l_fontscale_large_prop
-\prop_new:N \l_fontscale_Large_prop
-\prop_new:N \l_fontscale_LARGE_prop
-\prop_new:N \l_fontscale_huge_prop
-\prop_new:N \l_fontscale_Huge_prop
-
-\prop_put:Nnn \l_fontscale_tiny_prop { step } { -4 }
-\prop_put:Nnn \l_fontscale_scriptsize_prop { step } { -3 }
-\prop_put:Nnn \l_fontscale_footnotesize_prop { step } { -2 }
-\prop_put:Nnn \l_fontscale_small_prop { step } { -1 }
-\prop_put:Nnn \l_fontscale_normalsize_prop { step } { 0 }
-\prop_put:Nnn \l_fontscale_large_prop { step } { 1 }
-\prop_put:Nnn \l_fontscale_Large_prop { step } { 2 }
-\prop_put:Nnn \l_fontscale_LARGE_prop { step } { 3 }
-\prop_put:Nnn \l_fontscale_huge_prop { step } { 4 }
-\prop_put:Nnn \l_fontscale_Huge_prop { step } { 5 }
-
-\prop_put:Nnn \l_fontscale_normalsize_prop { scale } { 1 }
-
\fp_new:N \l_fontscale_tiny_scale_fp
\fp_new:N \l_fontscale_scriptsize_scale_fp
\fp_new:N \l_fontscale_footnotesize_scale_fp
@@ -107,21 +74,41 @@
\skip_new:N \l_fontscale_huge_baselineskip_skip
\skip_new:N \l_fontscale_Huge_baselineskip_skip
-\str_new:N \l__fontscale_typographic_scale_str
+\prop_new:N \l_fontscale_tiny_prop
+\prop_new:N \l_fontscale_scriptsize_prop
+\prop_new:N \l_fontscale_footnotesize_prop
+\prop_new:N \l_fontscale_small_prop
+\prop_new:N \l_fontscale_normalsize_prop
+\prop_new:N \l_fontscale_large_prop
+\prop_new:N \l_fontscale_Large_prop
+\prop_new:N \l_fontscale_LARGE_prop
+\prop_new:N \l_fontscale_huge_prop
+\prop_new:N \l_fontscale_Huge_prop
-% Used in floating point expressions for speed.
-\fp_new:N \l__fontscale_normalsize_size_fp
-\fp_new:N \l__fontscale_musical_notes_fp
+\prop_put:Nnn \l_fontscale_tiny_prop { step } { -4 }
+\prop_put:Nnn \l_fontscale_scriptsize_prop { step } { -3 }
+\prop_put:Nnn \l_fontscale_footnotesize_prop { step } { -2 }
+\prop_put:Nnn \l_fontscale_small_prop { step } { -1 }
+\prop_put:Nnn \l_fontscale_normalsize_prop { step } { 0 }
+\prop_put:Nnn \l_fontscale_large_prop { step } { 1 }
+\prop_put:Nnn \l_fontscale_Large_prop { step } { 2 }
+\prop_put:Nnn \l_fontscale_LARGE_prop { step } { 3 }
+\prop_put:Nnn \l_fontscale_huge_prop { step } { 4 }
+\prop_put:Nnn \l_fontscale_Huge_prop { step } { 5 }
-% Temporary variables
-\tl_new:N \l__fontscale_step_tl
-\tl_new:N \l__fontscale_scale_tl
-\dim_new:N \l__fontscale_size_dim
-\skip_new:N \l__fontscale_baselineskip_skip
+\prop_put:Nnn \l_fontscale_normalsize_prop { scale } { 1 }
-% INITIAL FONT PARAMETERS
+% INITIALIZE FONT PARAMETER VARIABLES
-\fp_set:Nn \l__fontscale_normalsize_size_fp { 10 }
+\fp_set:Nn \l_fontscale_tiny_scale_fp { 0.6 }
+\fp_set:Nn \l_fontscale_scriptsize_scale_fp { 0.7 }
+\fp_set:Nn \l_fontscale_footnotesize_scale_fp { 0.8 }
+\fp_set:Nn \l_fontscale_small_scale_fp { 0.9 }
+\fp_set:Nn \l_fontscale_large_scale_fp { 1.1 }
+\fp_set:Nn \l_fontscale_Large_scale_fp { 1.2 }
+\fp_set:Nn \l_fontscale_LARGE_scale_fp { 1.4 }
+\fp_set:Nn \l_fontscale_huge_scale_fp { 1.6 }
+\fp_set:Nn \l_fontscale_Huge_scale_fp { 1.8 }
\dim_set:Nn \l_fontscale_tiny_size_dim { 6pt }
\dim_set:Nn \l_fontscale_scriptsize_size_dim { 7pt }
@@ -134,16 +121,6 @@
\dim_set:Nn \l_fontscale_huge_size_dim { 16pt }
\dim_set:Nn \l_fontscale_Huge_size_dim { 18pt }
-\fp_set:Nn \l_fontscale_tiny_scale_fp { 0.6 }
-\fp_set:Nn \l_fontscale_scriptsize_scale_fp { 0.7 }
-\fp_set:Nn \l_fontscale_footnotesize_scale_fp { 0.8 }
-\fp_set:Nn \l_fontscale_small_scale_fp { 0.9 }
-\fp_set:Nn \l_fontscale_large_scale_fp { 1.1 }
-\fp_set:Nn \l_fontscale_Large_scale_fp { 1.2 }
-\fp_set:Nn \l_fontscale_LARGE_scale_fp { 1.4 }
-\fp_set:Nn \l_fontscale_huge_scale_fp { 1.6 }
-\fp_set:Nn \l_fontscale_Huge_scale_fp { 1.8 }
-
\skip_set:Nn \l_fontscale_tiny_baselineskip_skip { 7.2pt }
\skip_set:Nn \l_fontscale_scriptsize_baselineskip_skip { 8.4pt }
\skip_set:Nn \l_fontscale_footnotesize_baselineskip_skip { 9.6pt }
@@ -187,21 +164,87 @@
\prop_put:Nnn \l_fontscale_huge_prop { baselineskip } { 19.2pt }
\prop_put:Nnn \l_fontscale_Huge_prop { baselineskip } { 21.6pt }
+% SOME VARIABLES
+
+% Used for mapping.
+\tl_const:Nn \c__fontscale_names_tl
+ {
+ {tiny} {scriptsize} {footnotesize} {small} {normalsize}
+ {large} {Large} {LARGE} {huge} {Huge}
+ }
+\tl_const:Nn \c__fontscale_names_other_tl
+ {
+ {tiny} {scriptsize} {footnotesize} {small}
+ {large} {Large} {LARGE} {huge} {Huge}
+ }
+
+% Used to speed up floating point calculations.
+\fp_new:N \l__fontscale_normalsize_size_fp
+\fp_set:Nn \l__fontscale_normalsize_size_fp { 10 }
+\fp_new:N \l__fontscale_musical_notes_fp
+
+% Temporary variables
+\tl_new:N \l__fontscale_step_tl
+\tl_new:N \l__fontscale_scale_tl
+\dim_new:N \l__fontscale_size_dim
+
% SOME HELPER FUNCTIONS
-% Sets a dimen or skip variable, supplying a default unit of pt.
-\cs_new_protected:Npn \__fontscale_dim_set_with_default_unit:Nn #1#2
+% Sets a dimen/skip variable from a dimen/skip expression, supplying a default
+% unit of pt.
+\cs_new_protected:Npn \__fontscale_dim_set_with_default_pt:Nn #1#2
{ \@defaultunits #1 = \dimexpr #2 pt \relax \relax \@nnil }
-\cs_generate_variant:Nn \__fontscale_dim_set_with_default_unit:Nn { c }
-\cs_new_protected:Npn \__fontscale_skip_set_with_default_unit:Nn #1#2
+\cs_generate_variant:Nn \__fontscale_dim_set_with_default_pt:Nn { c }
+\cs_new_protected:Npn \__fontscale_skip_set_with_default_pt:Nn #1#2
{ \@defaultunits #1 = \glueexpr #2 pt \relax \@nnil }
-\cs_generate_variant:Nn \__fontscale_skip_set_with_default_unit:Nn { c }
+\cs_generate_variant:Nn \__fontscale_skip_set_with_default_pt:Nn { c }
+% Used to define \tiny to \Huge. Need \dim_use:N for compatibility with the
+% microtype package. Otherwise the following would do:
+% \cs_new_protected:Npn \__fontscale_fontsize:NNN { \@setfontsize }
+\cs_new_protected:Npn \__fontscale_fontsize:NNN #1#2
+ { \@setfontsize #1 { \dim_use:N #2 } }
+% Similar to \fontsize + \selectfont, except that it takes dimen and skip
+% expressions as arguments and avoids the issue where \f@size is set to the new
+% font size before the second argument is expanded.
+\skip_new:N \l__fontscale_fontsize_skip
+\cs_new_protected:Npn \__fontscale_fontsize:nn #1#2
+ {
+ \__fontscale_skip_set_with_default_pt:Nn \l__fontscale_fontsize_skip {#2}
+ \fontsize { = \dimexpr #1 pt \relax \relax } \l__fontscale_fontsize_skip
+ \selectfont
+ }
+% Similar to the above function, except that it sets the font baselineskip
+% equal to the new font size times the baselineskip-size-ratio.
+\cs_new_protected:Npn \__fontscale_fontsize:n #1
+ {
+ \fontsize { = \dimexpr #1 pt \relax \relax }
+ { \fp_to_dim:n { \f@size * \l__fontscale_baselineskip_size_ratio_fp } }
+ \selectfont
+ }
% MESSAGES
+\msg_new:nnn { fontscale } { modular-ratio-out-of-bounds }
+ {
+ The~ value~ for~ the~ key~ 'modular / ratio'~
+ \msg_line_context: \c_space_tl
+ must~ be~ greater~ than~ 1.
+ }
+\msg_new:nnn { fontscale } { musical-ratio-out-of-bounds }
+ {
+ The~ value~ for~ the~ key~ 'musical / ratio'~
+ \msg_line_context: \c_space_tl
+ must~ be~ greater~ than~ 1.
+ }
+\msg_new:nnn { fontscale } { musical-notes-out-of-bounds }
+ {
+ The~ value~ for~ the~ key~ 'musical / notes'~
+ \msg_line_context: \c_space_tl
+ must~ be~ a~ positive~ integer.
+ }
\msg_new:nnn { fontscale } { key-font-scale-ignored }
{
- Key~ #1 / scale~
+ Key~ '#1 / scale'~
\msg_line_context: \c_space_tl
ignored.~
Setting~ the~ scale~ and~ size~ keys~ for~ the~ same~
@@ -213,7 +256,8 @@
\msg_line_context: \c_space_tl
are~ not~ in~ the~ correct~ order.~
The~ magnitude~ of~ the~ font~ sizes~ should~ be~ ordered~ from~
- \iow_char:N \\tiny~ to~ \iow_char:N \\normalsize~ to~ \iow_char:N \\Huge .
+ '\iow_char:N \\tiny'~ to~ '\iow_char:N \\normalsize'~ to~
+ '\iow_char:N \\Huge'.
}
\msg_new:nnn { fontscale } { font-baselineskips-out-of-order }
{
@@ -221,18 +265,20 @@
\msg_line_context: \c_space_tl
are~ not~ in~ the~ correct~ order.~
The~ magnitude~ of~ the~ font~ baselineskips~ should~ be~ ordered~ from~
- \iow_char:N \\tiny~ to~ \iow_char:N \\normalsize~ to~ \iow_char:N \\Huge .
+ '\iow_char:N \\tiny'~ to~ '\iow_char:N \\normalsize'~ to~
+ '\iow_char:N \\Huge'.
}
\msg_new:nnn { fontscale } { font-step-out-of-bounds }
{
The~ font~ step~
\msg_line_context: \c_space_tl
must~ be~ an~ integer~ from~ -4~ to~ 5,~
- unless~ the~ choice~ of~ typographic~ scale~ is~ modular~ or~ musical.
+ unless~ the~ value~ for~ the~ choice~ key~ 'typographic-scale'~
+ is~ 'modular'~ or~ 'musical'.
}
\msg_new:nnn { fontscale } { current-font-step-out-of-bounds }
{
- \iow_char:N \\SetFontStep*~
+ '\iow_char:N \\SetFontStep*'~
\msg_line_context: \c_space_tl
could~ not~ calculate~ the~ new~ font~ step~ because~
the~ current~ font~ step~ is~ undefined.
@@ -240,6 +286,8 @@
% DEFINE KEYS
+\str_new:N \l__fontscale_typographic_scale_str
+
\keys_define:nn { fontscale }
{
reset .choices:nn = { initial , preamble }
@@ -437,8 +485,8 @@
% PRE-COMPILE KEYS
-% Pre-compiles the keys with their initial values. The keys are pre-compiled
-% by hand for speed.
+% Pre-compiles the keys with their initial values and then sets the keys to
+% their initial values. This is done by hand for speed.
\cs_new_protected:Npn \__fontscale_keys_precompile_initial:
{
\bool_set_false:N \l__fontscale_ignore_order_bool
@@ -484,7 +532,8 @@
% Pre-compiles the keys with their values at the end of the preamble. The keys
% are pre-compiled by hand for speed.
-\cs_new_eq:NN \__fontscale_keys_precompile_preamble: \prg_do_nothing
+\cs_new_eq:NN \__fontscale_keys_precompile_preamble: \prg_do_nothing:
+% \AddToHook is passed only a single token for speed.
\AddToHook { begindocument / before }
{ \__fontscale_keys_precompile_preamble_set: }
\cs_new_protected:Npn \__fontscale_keys_precompile_preamble_set:
@@ -506,65 +555,65 @@
{ \int_use:N \l__fontscale_musical_notes_int }
\tl_set:Nn \exp_not:N \l__fontscale_tiny_scale_tl
- { \exp_not:o \l__fontscale_tiny_scale_tl }
+ { \exp_not:V \l__fontscale_tiny_scale_tl }
\tl_set:Nn \exp_not:N \l__fontscale_scriptsize_scale_tl
- { \exp_not:o \l__fontscale_scriptsize_scale_tl }
+ { \exp_not:V \l__fontscale_scriptsize_scale_tl }
\tl_set:Nn \exp_not:N \l__fontscale_footnotesize_scale_tl
- { \exp_not:o \l__fontscale_footnotesize_scale_tl }
+ { \exp_not:V \l__fontscale_footnotesize_scale_tl }
\tl_set:Nn \exp_not:N \l__fontscale_small_scale_tl
- { \exp_not:o \l__fontscale_small_scale_tl }
+ { \exp_not:V \l__fontscale_small_scale_tl }
\tl_set:Nn \exp_not:N \l__fontscale_large_scale_tl
- { \exp_not:o \l__fontscale_large_scale_tl }
+ { \exp_not:V \l__fontscale_large_scale_tl }
\tl_set:Nn \exp_not:N \l__fontscale_Large_scale_tl
- { \exp_not:o \l__fontscale_Large_scale_tl }
+ { \exp_not:V \l__fontscale_Large_scale_tl }
\tl_set:Nn \exp_not:N \l__fontscale_LARGE_scale_tl
- { \exp_not:o \l__fontscale_LARGE_scale_tl }
+ { \exp_not:V \l__fontscale_LARGE_scale_tl }
\tl_set:Nn \exp_not:N \l__fontscale_huge_scale_tl
- { \exp_not:o \l__fontscale_huge_scale_tl }
+ { \exp_not:V \l__fontscale_huge_scale_tl }
\tl_set:Nn \exp_not:N \l__fontscale_Huge_scale_tl
- { \exp_not:o \l__fontscale_Huge_scale_tl }
+ { \exp_not:V \l__fontscale_Huge_scale_tl }
\tl_set:Nn \exp_not:N \l__fontscale_tiny_size_tl
- { \exp_not:o \l__fontscale_tiny_size_tl }
+ { \exp_not:V \l__fontscale_tiny_size_tl }
\tl_set:Nn \exp_not:N \l__fontscale_scriptsize_size_tl
- { \exp_not:o \l__fontscale_scriptsize_size_tl }
+ { \exp_not:V \l__fontscale_scriptsize_size_tl }
\tl_set:Nn \exp_not:N \l__fontscale_footnotesize_size_tl
- { \exp_not:o \l__fontscale_footnotesize_size_tl }
+ { \exp_not:V \l__fontscale_footnotesize_size_tl }
\tl_set:Nn \exp_not:N \l__fontscale_small_size_tl
- { \exp_not:o \l__fontscale_small_size_tl }
+ { \exp_not:V \l__fontscale_small_size_tl }
\tl_set:Nn \exp_not:N \l__fontscale_normalsize_size_tl
- { \exp_not:o \l__fontscale_normalsize_size_tl }
+ { \exp_not:V \l__fontscale_normalsize_size_tl }
\tl_set:Nn \exp_not:N \l__fontscale_large_size_tl
- { \exp_not:o \l__fontscale_large_size_tl }
+ { \exp_not:V \l__fontscale_large_size_tl }
\tl_set:Nn \exp_not:N \l__fontscale_Large_size_tl
- { \exp_not:o \l__fontscale_Large_size_tl }
+ { \exp_not:V \l__fontscale_Large_size_tl }
\tl_set:Nn \exp_not:N \l__fontscale_LARGE_size_tl
- { \exp_not:o \l__fontscale_LARGE_size_tl }
+ { \exp_not:V \l__fontscale_LARGE_size_tl }
\tl_set:Nn \exp_not:N \l__fontscale_huge_size_tl
- { \exp_not:o \l__fontscale_huge_size_tl }
+ { \exp_not:V \l__fontscale_huge_size_tl }
\tl_set:Nn \exp_not:N \l__fontscale_Huge_size_tl
- { \exp_not:o \l__fontscale_Huge_size_tl }
+ { \exp_not:V \l__fontscale_Huge_size_tl }
\tl_set:Nn \exp_not:N \l__fontscale_tiny_baselineskip_tl
- { \exp_not:o \l__fontscale_tiny_baselineskip_tl }
+ { \exp_not:V \l__fontscale_tiny_baselineskip_tl }
\tl_set:Nn \exp_not:N \l__fontscale_scriptsize_baselineskip_tl
- { \exp_not:o \l__fontscale_scriptsize_baselineskip_tl }
+ { \exp_not:V \l__fontscale_scriptsize_baselineskip_tl }
\tl_set:Nn \exp_not:N \l__fontscale_footnotesize_baselineskip_tl
- { \exp_not:o \l__fontscale_footnotesize_baselineskip_tl }
+ { \exp_not:V \l__fontscale_footnotesize_baselineskip_tl }
\tl_set:Nn \exp_not:N \l__fontscale_small_baselineskip_tl
- { \exp_not:o \l__fontscale_small_baselineskip_tl }
+ { \exp_not:V \l__fontscale_small_baselineskip_tl }
\tl_set:Nn \exp_not:N \l__fontscale_normalsize_baselineskip_tl
- { \exp_not:o \l__fontscale_normalsize_baselineskip_tl }
+ { \exp_not:V \l__fontscale_normalsize_baselineskip_tl }
\tl_set:Nn \exp_not:N \l__fontscale_large_baselineskip_tl
- { \exp_not:o \l__fontscale_large_baselineskip_tl }
+ { \exp_not:V \l__fontscale_large_baselineskip_tl }
\tl_set:Nn \exp_not:N \l__fontscale_Large_baselineskip_tl
- { \exp_not:o \l__fontscale_Large_baselineskip_tl }
+ { \exp_not:V \l__fontscale_Large_baselineskip_tl }
\tl_set:Nn \exp_not:N \l__fontscale_LARGE_baselineskip_tl
- { \exp_not:o \l__fontscale_LARGE_baselineskip_tl }
+ { \exp_not:V \l__fontscale_LARGE_baselineskip_tl }
\tl_set:Nn \exp_not:N \l__fontscale_huge_baselineskip_tl
- { \exp_not:o \l__fontscale_huge_baselineskip_tl }
+ { \exp_not:V \l__fontscale_huge_baselineskip_tl }
\tl_set:Nn \exp_not:N \l__fontscale_Huge_baselineskip_tl
- { \exp_not:o \l__fontscale_Huge_baselineskip_tl }
+ { \exp_not:V \l__fontscale_Huge_baselineskip_tl }
}
}
@@ -575,35 +624,59 @@
{
\keys_set:nn { fontscale } {#1}
\__fontscale_keys_process:
+ \normalsize
+ \prg_break:
+ \prg_break_point:
}
\cs_new_protected:Npn \__fontscale_keys_process:
{
+ \__fontscale_keys_process_check_modular_musical:
\__fontscale_keys_process_normalsize:
\__fontscale_keys_process_other:
- \__fontscale_keys_process_props:
\__fontscale_keys_process_check_order:
}
-% Sets the size and baselineskip of \normalsize and uses \normalsize.
+% Issues an error if the key 'modular/ratio', 'musical/ratio', or
+% 'musical/notes' is set to an impossible value.
+\cs_new_protected:Npn \__fontscale_keys_process_check_modular_musical:
+ {
+ \fp_compare:nNnF \l__fontscale_modular_ratio_fp > \c_one_fp
+ {
+ \msg_error:nn { fontscale } { modular-ratio-out-of-bounds }
+ \prg_break:
+ }
+ \fp_compare:nNnF \l__fontscale_musical_ratio_fp > \c_one_fp
+ {
+ \msg_error:nn { fontscale } { musical-ratio-out-of-bounds }
+ \prg_break:
+ }
+ \int_compare:nNnF \l__fontscale_musical_notes_int > 0
+ {
+ \msg_error:nn { fontscale } { musical-notes-out-of-bounds }
+ \prg_break:
+ }
+ }
+% Sets the size and baselineskip of \normalsize and updates their property list
+% entries.
\cs_new_protected:Npn \__fontscale_keys_process_normalsize:
{
\quark_if_no_value:NTF \l__fontscale_normalsize_size_tl
{
\dim_set:Nn \l_fontscale_normalsize_size_dim
{
- \str_case:on \l__fontscale_typographic_scale_str
+ \str_case:VnF \l__fontscale_typographic_scale_str
{
- { classic-10pt } { 10pt }
{ classic-11pt } { 11pt }
{ classic-12pt } { 12pt }
- { modular } { 10pt }
- { musical } { 10pt }
}
+ { 10pt }
}
}
{
- \__fontscale_dim_set_with_default_unit:Nn
+ \__fontscale_dim_set_with_default_pt:Nn
\l_fontscale_normalsize_size_dim { \l__fontscale_normalsize_size_tl }
}
+ \prop_put:NnV \l_fontscale_normalsize_prop { size }
+ \l_fontscale_normalsize_size_dim
\fp_set:Nn \l__fontscale_normalsize_size_fp
{ \l_fontscale_normalsize_size_dim }
\quark_if_no_value:NTF \l__fontscale_normalsize_baselineskip_tl
@@ -618,14 +691,14 @@
}
}
{
- \__fontscale_skip_set_with_default_unit:Nn
+ \__fontscale_skip_set_with_default_pt:Nn
\l_fontscale_normalsize_baselineskip_skip
{ \l__fontscale_normalsize_baselineskip_tl }
}
- \normalsize
+ \prop_put:NnV \l_fontscale_normalsize_prop { baselineskip }
+ \l_fontscale_normalsize_baselineskip_skip
}
-% Sets the size, scale, and baselineskip of the other font size commands.
-% Issues a warning if the user sets both the scale and size keys for the same
+% Auxiliary functions that expand to the font size depending on the name of the
% font size command.
\cs_new:Npn \__fontscale_keys_process_other_classic_xpt:n #1
{
@@ -689,37 +762,26 @@
/ \l__fontscale_musical_notes_fp )
}
}
+% Sets the size, scale, and baselineskip of the other font size commands and
+% updates their property list entries. Issues a warning if the user sets both
+% the scale and size keys for the same font size command.
\cs_new_protected:Npn \__fontscale_keys_process_other:
{
- \str_case:on \l__fontscale_typographic_scale_str
+ \cs_set_eq:Nc \__fontscale_keys_process_other_typographic_scale:n
{
- { classic-10pt }
- {
- \cs_set_eq:NN \__fontscale_keys_process_other_typographic_scale:n
- \__fontscale_keys_process_other_classic_xpt:n
- }
- { classic-11pt }
- {
- \cs_set_eq:NN \__fontscale_keys_process_other_typographic_scale:n
- \__fontscale_keys_process_other_classic_xipt:n
- }
- { classic-12pt }
- {
- \cs_set_eq:NN \__fontscale_keys_process_other_typographic_scale:n
- \__fontscale_keys_process_other_classic_xiipt:n
- }
- { modular }
- {
- \cs_set_eq:NN \__fontscale_keys_process_other_typographic_scale:n
- \__fontscale_keys_process_other_modular:n
- }
- { musical }
- {
- \cs_set_eq:NN \__fontscale_keys_process_other_typographic_scale:n
- \__fontscale_keys_process_other_musical:n
- \fp_set:Nn \l__fontscale_musical_notes_fp
- { \l__fontscale_musical_notes_int }
- }
+ \str_case:Vn \l__fontscale_typographic_scale_str
+ {
+ { classic-10pt } { __fontscale_keys_process_other_classic_xpt:n }
+ { classic-11pt } { __fontscale_keys_process_other_classic_xipt:n }
+ { classic-12pt } { __fontscale_keys_process_other_classic_xiipt:n }
+ { modular } { __fontscale_keys_process_other_modular:n }
+ { musical } { __fontscale_keys_process_other_musical:n }
+ }
+ }
+ \str_if_eq:VnT \l__fontscale_typographic_scale_str { musical }
+ {
+ \fp_set:Nn \l__fontscale_musical_notes_fp
+ { \l__fontscale_musical_notes_int }
}
\tl_map_function:NN \c__fontscale_names_other_tl
\__fontscale_keys_process_other_aux:n
@@ -728,7 +790,7 @@
{
\quark_if_no_value:cF { l__fontscale_#1_size_tl }
{
- \__fontscale_dim_set_with_default_unit:cn { l_fontscale_#1_size_dim }
+ \__fontscale_dim_set_with_default_pt:cn { l_fontscale_#1_size_dim }
{ \use:c { l__fontscale_#1_size_tl } }
\quark_if_no_value:cF { l__fontscale_#1_scale_tl }
{ \msg_warning:nnn { fontscale } { key-font-scale-ignored } {#1} }
@@ -752,6 +814,9 @@
\prg_break_point:
\fp_set:cn { l_fontscale_#1_scale_fp }
{ \use:c { l_fontscale_#1_size_dim } / \l__fontscale_normalsize_size_fp }
+ \prop_put:cne { l_fontscale_#1_prop } { scale }
+ { \fp_use:c { l_fontscale_#1_scale_fp } }
+ \prop_put:cnv { l_fontscale_#1_prop } { size } { l_fontscale_#1_size_dim }
\quark_if_no_value:cTF { l__fontscale_#1_baselineskip_tl }
{
\skip_set:cn { l_fontscale_#1_baselineskip_skip }
@@ -764,78 +829,16 @@
}
}
{
- \__fontscale_skip_set_with_default_unit:cn
+ \__fontscale_skip_set_with_default_pt:cn
{ l_fontscale_#1_baselineskip_skip }
{ \use:c { l__fontscale_#1_baselineskip_tl } }
}
+ \prop_put:cnv { l_fontscale_#1_prop } { baselineskip }
+ { l_fontscale_#1_baselineskip_skip }
}
-% Puts the scale, size, and baselineskip of each font size command in
-% property lists, except the scale of \normalsize.
-\cs_new_protected:Npn \__fontscale_keys_process_props:
- {
- \prop_put:Nne \l_fontscale_tiny_prop { scale }
- { \fp_use:N \l_fontscale_tiny_scale_fp }
- \prop_put:Nne \l_fontscale_scriptsize_prop { scale }
- { \fp_use:N \l_fontscale_scriptsize_scale_fp }
- \prop_put:Nne \l_fontscale_footnotesize_prop { scale }
- { \fp_use:N \l_fontscale_footnotesize_scale_fp }
- \prop_put:Nne \l_fontscale_small_prop { scale }
- { \fp_use:N \l_fontscale_small_scale_fp }
- \prop_put:Nne \l_fontscale_large_prop { scale }
- { \fp_use:N \l_fontscale_large_scale_fp }
- \prop_put:Nne \l_fontscale_Large_prop { scale }
- { \fp_use:N \l_fontscale_Large_scale_fp }
- \prop_put:Nne \l_fontscale_LARGE_prop { scale }
- { \fp_use:N \l_fontscale_LARGE_scale_fp }
- \prop_put:Nne \l_fontscale_huge_prop { scale }
- { \fp_use:N \l_fontscale_huge_scale_fp }
- \prop_put:Nne \l_fontscale_Huge_prop { scale }
- { \fp_use:N \l_fontscale_Huge_scale_fp }
-
- \prop_put:Nno \l_fontscale_tiny_prop { size }
- { \dim_use:N \l_fontscale_tiny_size_dim }
- \prop_put:Nno \l_fontscale_scriptsize_prop { size }
- { \dim_use:N \l_fontscale_scriptsize_size_dim }
- \prop_put:Nno \l_fontscale_footnotesize_prop { size }
- { \dim_use:N \l_fontscale_footnotesize_size_dim }
- \prop_put:Nno \l_fontscale_small_prop { size }
- { \dim_use:N \l_fontscale_small_size_dim }
- \prop_put:Nno \l_fontscale_normalsize_prop { size }
- { \dim_use:N \l_fontscale_normalsize_size_dim }
- \prop_put:Nno \l_fontscale_large_prop { size }
- { \dim_use:N \l_fontscale_large_size_dim }
- \prop_put:Nno \l_fontscale_Large_prop { size }
- { \dim_use:N \l_fontscale_Large_size_dim }
- \prop_put:Nno \l_fontscale_LARGE_prop { size }
- { \dim_use:N \l_fontscale_LARGE_size_dim }
- \prop_put:Nno \l_fontscale_huge_prop { size }
- { \dim_use:N \l_fontscale_huge_size_dim }
- \prop_put:Nno \l_fontscale_Huge_prop { size }
- { \dim_use:N \l_fontscale_Huge_size_dim }
-
- \prop_put:Nno \l_fontscale_tiny_prop { baselineskip }
- { \skip_use:N \l_fontscale_tiny_baselineskip_skip }
- \prop_put:Nno \l_fontscale_scriptsize_prop { baselineskip }
- { \skip_use:N \l_fontscale_scriptsize_baselineskip_skip }
- \prop_put:Nno \l_fontscale_footnotesize_prop { baselineskip }
- { \skip_use:N \l_fontscale_footnotesize_baselineskip_skip }
- \prop_put:Nno \l_fontscale_small_prop { baselineskip }
- { \skip_use:N \l_fontscale_small_baselineskip_skip }
- \prop_put:Nno \l_fontscale_normalsize_prop { baselineskip }
- { \skip_use:N \l_fontscale_normalsize_baselineskip_skip }
- \prop_put:Nno \l_fontscale_large_prop { baselineskip }
- { \skip_use:N \l_fontscale_large_baselineskip_skip }
- \prop_put:Nno \l_fontscale_Large_prop { baselineskip }
- { \skip_use:N \l_fontscale_Large_baselineskip_skip }
- \prop_put:Nno \l_fontscale_LARGE_prop { baselineskip }
- { \skip_use:N \l_fontscale_LARGE_baselineskip_skip }
- \prop_put:Nno \l_fontscale_huge_prop { baselineskip }
- { \skip_use:N \l_fontscale_huge_baselineskip_skip }
- \prop_put:Nno \l_fontscale_Huge_prop { baselineskip }
- { \skip_use:N \l_fontscale_Huge_baselineskip_skip }
- }
-% Issues a warning if the font sizes or font baselineskips are not in the
-% correct order.
+% Issues a warning if the font sizes or font baselineskips (ignoring the
+% stretch and shrink components) are not in the correct order unless the value
+% for the key 'ignore-order' is 'true'.
\cs_new_protected:Npn \__fontscale_keys_process_check_order:
{
\bool_if:NF \l__fontscale_ignore_order_bool
@@ -876,66 +879,64 @@
% The internal functions of each font size command are not used elsewhere in
% the code for compatibility with user-defined hooks
% (e.g. \AddToHook{cmd/normalsize/after}{<user-defined-function>}).
-% Need \dim_use:N for compatibility with the microtype package.
\DeclareDocumentCommand \tiny { } { \__fontscale_tiny: }
\cs_new_protected:Npn \__fontscale_tiny:
{
- \@setfontsize \tiny { \dim_use:N \l_fontscale_tiny_size_dim }
+ \__fontscale_fontsize:NNN \tiny \l_fontscale_tiny_size_dim
\l_fontscale_tiny_baselineskip_skip
}
\DeclareDocumentCommand \scriptsize { } { \__fontscale_scriptsize: }
\cs_new_protected:Npn \__fontscale_scriptsize:
{
- \@setfontsize \scriptsize { \dim_use:N \l_fontscale_scriptsize_size_dim }
+ \__fontscale_fontsize:NNN \scriptsize \l_fontscale_scriptsize_size_dim
\l_fontscale_scriptsize_baselineskip_skip
}
\DeclareDocumentCommand \footnotesize { } { \__fontscale_footnotesize: }
\cs_new_protected:Npn \__fontscale_footnotesize:
{
- \@setfontsize \footnotesize
- { \dim_use:N \l_fontscale_footnotesize_size_dim }
+ \__fontscale_fontsize:NNN \footnotesize \l_fontscale_footnotesize_size_dim
\l_fontscale_footnotesize_baselineskip_skip
}
\DeclareDocumentCommand \small { } { \__fontscale_small: }
\cs_new_protected:Npn \__fontscale_small:
{
- \@setfontsize \small { \dim_use:N \l_fontscale_small_size_dim }
+ \__fontscale_fontsize:NNN \small \l_fontscale_small_size_dim
\l_fontscale_small_baselineskip_skip
}
\DeclareDocumentCommand \normalsize { } { \__fontscale_normalsize: }
\cs_new_protected:Npn \__fontscale_normalsize:
{
- \@setfontsize \normalsize { \dim_use:N \l_fontscale_normalsize_size_dim }
+ \__fontscale_fontsize:NNN \normalsize \l_fontscale_normalsize_size_dim
\l_fontscale_normalsize_baselineskip_skip
}
\DeclareDocumentCommand \large { } { \__fontscale_large: }
\cs_new_protected:Npn \__fontscale_large:
{
- \@setfontsize \large { \dim_use:N \l_fontscale_large_size_dim }
+ \__fontscale_fontsize:NNN \large \l_fontscale_large_size_dim
\l_fontscale_large_baselineskip_skip
}
\DeclareDocumentCommand \Large { } { \__fontscale_Large: }
\cs_new_protected:Npn \__fontscale_Large:
{
- \@setfontsize \Large { \dim_use:N \l_fontscale_Large_size_dim }
+ \__fontscale_fontsize:NNN \Large \l_fontscale_Large_size_dim
\l_fontscale_Large_baselineskip_skip
}
\DeclareDocumentCommand \LARGE { } { \__fontscale_LARGE: }
\cs_new_protected:Npn \__fontscale_LARGE:
{
- \@setfontsize \LARGE { \dim_use:N \l_fontscale_LARGE_size_dim }
+ \__fontscale_fontsize:NNN \LARGE \l_fontscale_LARGE_size_dim
\l_fontscale_LARGE_baselineskip_skip
}
\DeclareDocumentCommand \huge { } { \__fontscale_huge: }
\cs_new_protected:Npn \__fontscale_huge:
{
- \@setfontsize \huge { \dim_use:N \l_fontscale_huge_size_dim }
+ \__fontscale_fontsize:NNN \huge \l_fontscale_huge_size_dim
\l_fontscale_huge_baselineskip_skip
}
\DeclareDocumentCommand \Huge { } { \__fontscale_Huge: }
\cs_new_protected:Npn \__fontscale_Huge:
{
- \@setfontsize \Huge { \dim_use:N \l_fontscale_Huge_size_dim }
+ \__fontscale_fontsize:NNN \Huge \l_fontscale_Huge_size_dim
\l_fontscale_Huge_baselineskip_skip
}
% Initializes to \normalsize.
@@ -959,7 +960,7 @@
{ \l_fontscale_Huge_size_dim } { 5 }
}
{
- \str_case:on \l__fontscale_typographic_scale_str
+ \str_case:Vn \l__fontscale_typographic_scale_str
{
{ modular }
{
@@ -1001,6 +1002,8 @@
{ \__fontscale_add_font_step:n {#2} }
{ \__fontscale_set_font_step:n {#2} }
}
+% Using \str_case: here is significantly faster (and easier to write) than
+% repeatedly testing \fp_compare:.
\cs_new_protected:Npn \__fontscale_set_font_step:n #1
{
\str_case:enF { \fp_eval:n {#1} }
@@ -1017,11 +1020,11 @@
{ 5 } { \Huge }
}
{
- \str_case:onF \l__fontscale_typographic_scale_str
+ \str_case:VnF \l__fontscale_typographic_scale_str
{
{ modular }
{
- \fontsize
+ \__fontscale_fontsize:n
{
\fp_to_dim:n
{
@@ -1029,15 +1032,10 @@
* \l__fontscale_modular_ratio_fp ^ (#1)
}
}
- {
- \fp_to_dim:n
- { \f@size * \l__fontscale_baselineskip_size_ratio_fp }
- }
- \selectfont
}
{ musical }
{
- \fontsize
+ \__fontscale_fontsize:n
{
\fp_to_dim:n
{
@@ -1046,11 +1044,6 @@
^ ( (#1) / \l__fontscale_musical_notes_fp )
}
}
- {
- \fp_to_dim:n
- { \f@size * \l__fontscale_baselineskip_size_ratio_fp }
- }
- \selectfont
}
}
{ \msg_error:nn { fontscale } { font-step-out-of-bounds } }
@@ -1073,17 +1066,13 @@
}
\cs_new_protected:Npn \__fontscale_set_font_scale:n #1
{
- \fontsize
+ \__fontscale_fontsize:n
{ \fp_to_dim:n { \l__fontscale_normalsize_size_fp * (#1) } }
- { \fp_to_dim:n { \f@size * \l__fontscale_baselineskip_size_ratio_fp } }
- \selectfont
}
\cs_new_protected:Npn \__fontscale_add_font_scale:n #1
{
- \fontsize
+ \__fontscale_fontsize:n
{ \fp_to_dim:n { \l__fontscale_normalsize_size_fp * (#1) + \f@size } }
- { \fp_to_dim:n { \f@size * \l__fontscale_baselineskip_size_ratio_fp } }
- \selectfont
}
\NewDocumentCommand \SetFontSize { s m }
@@ -1092,41 +1081,27 @@
{ \__fontscale_add_font_size:n {#2} }
{ \__fontscale_set_font_size:n {#2} }
}
-\cs_new_protected:Npn \__fontscale_set_font_size:n #1
- {
- \__fontscale_dim_set_with_default_unit:Nn \l__fontscale_size_dim {#1}
- \fontsize \l__fontscale_size_dim
- { \fp_to_dim:n { \f@size * \l__fontscale_baselineskip_size_ratio_fp } }
- \selectfont
- }
+\cs_new_eq:NN \__fontscale_set_font_size:n \__fontscale_fontsize:n
\cs_new_protected:Npn \__fontscale_add_font_size:n #1
{
- \__fontscale_dim_set_with_default_unit:Nn \l__fontscale_size_dim {#1}
+ \__fontscale_dim_set_with_default_pt:Nn \l__fontscale_size_dim {#1}
\dim_add:Nn \l__fontscale_size_dim { \f@size pt }
- \fontsize \l__fontscale_size_dim
- { \fp_to_dim:n { \f@size * \l__fontscale_baselineskip_size_ratio_fp } }
- \selectfont
+ \__fontscale_fontsize:n { \l__fontscale_size_dim }
}
-\NewDocumentCommand \ScaleFont { m } { \__fontscale_scalefont:n {#1} }
-\cs_new_protected:Npn \__fontscale_scalefont:n #1
+\NewDocumentCommand \ScaleFont { m }
+ { \__fontscale_scale_font_size_baselineskip:n {#1} }
+\cs_new_protected:Npn \__fontscale_scale_font_size_baselineskip:n #1
{
- \fontsize
+ \__fontscale_fontsize:nn
{ \fp_to_dim:n { \f@size * (#1) } }
{ \fp_to_dim:n { \dim_to_fp:n { \f@baselineskip } * (#1) } }
- \selectfont
}
\NewDocumentCommand \SetFontSizeBaselineskip { m m }
{ \__fontscale_set_font_size_baselineskip:nn {#1} {#2} }
-\cs_new_protected:Npn \__fontscale_set_font_size_baselineskip:nn #1#2
- {
- \__fontscale_dim_set_with_default_unit:Nn \l__fontscale_size_dim {#1}
- \__fontscale_skip_set_with_default_unit:Nn \l__fontscale_baselineskip_skip
- {#2}
- \fontsize \l__fontscale_size_dim \l__fontscale_baselineskip_skip
- \selectfont
- }
+\cs_new_eq:NN \__fontscale_set_font_size_baselineskip:nn
+ \__fontscale_fontsize:nn
\NewDocumentCommand \PrintFontParameters { }
{ \__fontscale_print_font_parameters: }
@@ -1197,70 +1172,72 @@
\NewDocumentCommand \PrintFontSizeCommand { } { \__fontscale_print_name: }
\cs_new_protected:Npn \__fontscale_print_name:
{
- \dim_case:nnF { \f@size pt }
+ \dim_case:nn { \f@size pt }
{
{ \l_fontscale_tiny_size_dim }
{
- \skip_if_eq:nnTF { \f@baselineskip }
+ \skip_if_eq:nnT { \f@baselineskip }
{ \l_fontscale_tiny_baselineskip_skip }
- { \token_to_str:N \tiny } { UNDEFINED \@ }
+ { \token_to_str:N \tiny \prg_break: }
}
{ \l_fontscale_scriptsize_size_dim }
{
- \skip_if_eq:nnTF { \f@baselineskip }
+ \skip_if_eq:nnT { \f@baselineskip }
{ \l_fontscale_scriptsize_baselineskip_skip }
- { \token_to_str:N \scriptsize } { UNDEFINED \@ }
+ { \token_to_str:N \scriptsize \prg_break: }
}
{ \l_fontscale_footnotesize_size_dim }
{
- \skip_if_eq:nnTF { \f@baselineskip }
+ \skip_if_eq:nnT { \f@baselineskip }
{ \l_fontscale_footnotesize_baselineskip_skip }
- { \token_to_str:N \footnotesize } { UNDEFINED \@ }
+ { \token_to_str:N \footnotesize \prg_break: }
}
{ \l_fontscale_small_size_dim }
{
- \skip_if_eq:nnTF { \f@baselineskip }
+ \skip_if_eq:nnT { \f@baselineskip }
{ \l_fontscale_small_baselineskip_skip }
- { \token_to_str:N \small } { UNDEFINED \@ }
+ { \token_to_str:N \small \prg_break: }
}
{ \l_fontscale_normalsize_size_dim }
{
- \skip_if_eq:nnTF { \f@baselineskip }
+ \skip_if_eq:nnT { \f@baselineskip }
{ \l_fontscale_normalsize_baselineskip_skip }
- { \token_to_str:N \normalsize } { UNDEFINED \@ }
+ { \token_to_str:N \normalsize \prg_break: }
}
{ \l_fontscale_large_size_dim }
{
- \skip_if_eq:nnTF { \f@baselineskip }
+ \skip_if_eq:nnT { \f@baselineskip }
{ \l_fontscale_large_baselineskip_skip }
- { \token_to_str:N \large } { UNDEFINED \@ }
+ { \token_to_str:N \large \prg_break: }
}
{ \l_fontscale_Large_size_dim }
{
- \skip_if_eq:nnTF { \f@baselineskip }
+ \skip_if_eq:nnT { \f@baselineskip }
{ \l_fontscale_Large_baselineskip_skip }
- { \token_to_str:N \Large } { UNDEFINED \@ }
+ { \token_to_str:N \Large \prg_break: }
}
{ \l_fontscale_LARGE_size_dim }
{
- \skip_if_eq:nnTF { \f@baselineskip }
+ \skip_if_eq:nnT { \f@baselineskip }
{ \l_fontscale_LARGE_baselineskip_skip }
- { \token_to_str:N \LARGE \@ } { UNDEFINED \@ }
+ { \token_to_str:N \LARGE \@ \prg_break: }
}
{ \l_fontscale_huge_size_dim }
{
- \skip_if_eq:nnTF { \f@baselineskip }
+ \skip_if_eq:nnT { \f@baselineskip }
{ \l_fontscale_huge_baselineskip_skip }
- { \token_to_str:N \huge } { UNDEFINED \@ }
+ { \token_to_str:N \huge \prg_break: }
}
{ \l_fontscale_Huge_size_dim }
{
- \skip_if_eq:nnTF { \f@baselineskip }
+ \skip_if_eq:nnT { \f@baselineskip }
{ \l_fontscale_Huge_baselineskip_skip }
- { \token_to_str:N \Huge } { UNDEFINED \@ }
+ { \token_to_str:N \Huge \prg_break: }
}
}
- { UNDEFINED \@ }
+ UNDEFINED \@
+ \prg_break:
+ \prg_break_point:
}
% TEXT PURIFY
diff --git a/macros/latex/contrib/frenchmath/frenchmath.dtx b/macros/latex/contrib/frenchmath/frenchmath.dtx
index edd050c10a..4b042e9ef6 100644
--- a/macros/latex/contrib/frenchmath/frenchmath.dtx
+++ b/macros/latex/contrib/frenchmath/frenchmath.dtx
@@ -20,7 +20,7 @@
%<*package>
\NeedsTeXFormat{LaTeX2e}[2005/12/01]
\ProvidesPackage{frenchmath}
- [2024/02/25 v2.10 .dtx Typesetting mathematics according to French rules]
+ [2024/05/07 v3.1 .dtx Typesetting mathematics according to French rules]
%</package>
%<*driver>
\documentclass{ltxdoc}
@@ -28,26 +28,21 @@
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{lmodern}
-\usepackage[lgrmath]{frenchmath}
-\usepackage[Euler]{upgreek}
-\usepackage{textalpha}
+\usepackage[lgrmath,savegreeks,otherfonts]{frenchmath}
\usepackage{metalogo} % pour les logos XeLaTeX et LuaLaTeX
\usepackage{sectsty}
\usepackage{xcolor}
+%\usepackage{textalpha}
+\usepackage{tabls}
\definecolor{darkbrown}{rgb}{0.5,0.1,0.1}
\allsectionsfont{\color{darkbrown}}
-% pour les lettres de upgreek avec l'option Symbol :
-\DeclareSymbolFont{ugrfm}{U}{psy}{m}{n}
-\DeclareMathSymbol{\upalphasym}{\mathord}{ugrfm}{`a}
-\DeclareMathSymbol{\upbetasym}{\mathord}{ugrfm}{`b}
-\DeclareMathSymbol{\uppisym}{\mathord}{ugrfm}{`p}
-% symbole \emptyset de computer modern au cas où veut changer la police de ce doc :
-\DeclareSymbolFont{cmsymbols}{OMS}{cmsy}{m}{n}
-\DeclareMathSymbol{\cmemptyset}{\mathord}{cmsymbols}{'73} % code octal dans cmsy
+
+% symbole \emptyset de computer modern au cas où on change la police de ce doc :
+\def\CMemptyset{\mathord{\text{\usefont{OMS}{cmsy}{m}{n}\symbol{'73}}}}
% pour avoir le mu de micro :
\DeclareTextSymbol{\textmicro}{TS1}{181}
-\DeclareTextSymbolDefault{\textmicro}{TS1}
+%\DeclareTextSymbolDefault{\textmicro}{TS1}
\DisableCrossrefs
%\CodelineIndex
@@ -62,6 +57,7 @@
pdfauthor={Antoine Missier}
}
\begin{document}
+%\MakeShortVerb" % incompatible si placé avant
\DocInput{frenchmath.dtx}
%\PrintChanges
%\PrintIndex
@@ -69,7 +65,7 @@
%</driver>
% \fi
%
-% \CheckSum{594}
+% \CheckSum{322}
%
% \CharacterTable
% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
@@ -118,7 +114,7 @@
% - ajout des macros pour les bases (i,j) et (i,j,k).}
%
% \changes{v1.6}{2022/10/16}{
-% - Remplacement de icomma par ncccomma, grâce à une proposition de J. F. Burnol,
+% - Remplacement de icomma par ncccomma, grâce à un "patch" de J. F. Burnol,
% - amélioration du code redéfinissant les majuscules mathématiques,
% - suppression de l'option capsup (capsit à false suffit),
% - remplacement de tgh par th pour la tangente hyperbolique.}
@@ -182,17 +178,31 @@
% - compatibilité des options de lettres grecques avec unicode-math (XeLaTeX uniquement)
% -> nouvelles macros SaveGreekItalics et upgreekUndefined,
% - commentaires dans la doc pour la compatibilité avec unicode-math.}
-
+%
% \changes{v2.10}{22/02/2024}{
% - Changements dans la doc concernant la gestion des lettres grecques et unicode-math.}
%
+% \changes{v3.0}{04/03/2024}{
+% - Redéfinition de cmod qui correspond au pod de amsmath,
+% - Modification du chargement conditionnel de dotlessj,
+% - Copie du code de legslant, geqslant, varnothing sans importer amssymb,
+% - Utilisation de AtEndPreamble pour pouvoir charger frenchmath avant unicode-math,
+% - Ajout d'une table des matières.}
+% \changes{v3.0}{12/04/2024}{
+% - Développement et intégration de l'extension mathgreeks
+% - Mise à jour de la documentation}
+%
+% \changes{v3.1}{07/05/2024}{
+% - Correction de bug pour les macros varnothing et AMSvarnothing}
+%
% \GetFileInfo{frenchmath.sty}
%
% \title{L'extension \textsf{frenchmath}\thanks{Ce document
-% correspond à \textsf{frenchmath}~\fileversion, dernière modification le 25/02/2024.}}
+% correspond à \textsf{frenchmath}~\fileversion, dernière modification le 07/05/2024.}}
% \author{Antoine Missier \\ \texttt{antoine.missier@ac-toulouse.fr}}
-% \date{25 février 2024}
+% \date{7 mai 2024}
% \maketitle
+% \tableofcontents
%
% \section{Introduction}
% Cette extension, inspirée à l'origine de \textsf{mafr} de Christian Obrecht~\cite{MAFR},
@@ -206,19 +216,20 @@
% \footnote{Contrairement à \textsf{mafr} nous avons choisi de ne pas
% conserver le même nom de commande pour substituer
% des symboles français aux symboles anglais.}.
-% Depuis la version 2.0, \textsf{frenchmath} propose en outre deux options permettant
+% Depuis la version 2.0, \textsf{frenchmath} propose en outre des options permettant
% de composer les minuscules grecques du mode mathématique en forme droite.
%
% \medskip
% D'autres solutions existent pour composer les majuscules mathématiques en romain,
% par exemple avec \XeLaTeX\ ou \LuaLaTeX\ et l'extension \textsf{unicode-math}~\cite{UNIC}.
-% Celle-ci peut être utilisée avec \textsf{frenchmath} à condition d'être chargée \emph{avant}.
% Pour pdf\LaTeX\, nous avons les extensions \textsf{fourier} de Michel Bovani~\cite{FOUR}
-% (avec la famille des fontes Adobe Utopia)
-% ou encore \textsf{mathdesign} de Paul Pichaureau~\cite{DESIGN}
-% (avec les polices Adobe Utopia, URW Garamond ou Bitstream Charter).
+% (avec la famille des fontes Adobe Utopia),
+% \textsf{mathdesign} de Paul Pichaureau~\cite{DESIGN}
+% (avec les polices Adobe Utopia, URW Garamond ou Bitstream Charter)
+% ou encore \textsf{kpfonts} de Christophe Caignaert~\cite{KPF}.
% Mais \textsf{frenchmath} fournit une solution générique
-% s'adaptant à n'importe quelle police de caractères.
+% s'adaptant à n'importe quelle police de caractères
+% (et compatible avec \textsf{unicode-math}).
%
% \medskip
% Certaines préconisations, telles que composer en lettre droite
@@ -250,10 +261,11 @@
% (cf. \cite{RTIN} p.107, voir aussi~\cite{IGEN}).
% En utilisant \XeLaTeX\ ou \LuaLaTeX,
% avec l'option \texttt{math-style=french} de l'extension \textsf{unicode-math},
-% cette convention est assez commode à mettre en œuvre,
-% y compris avec les polices TrueType ou OpenType ;
+% cette convention est commode à mettre en œuvre,
% par contre, avec \LaTeX\ ou pdf\LaTeX, elle est peu respectée
-% et les extensions précitées ne fonctionnent qu'avec des polices particulières.
+% et les extensions comme \textsf{mathdesign} (avec \texttt{uppercase=upright}),
+% \textsf{fourier} (avec \texttt{upright}) ou \textsf{kpfonts} (avec \texttt{uprightRoman})
+% ne fonctionnent qu'avec des polices particulières.
% Par défaut \textsf{frenchmath} compose automatiquement les majuscules
% mathématiques latines en romain,
% quelle que soit la police utilisée.
@@ -302,28 +314,30 @@
% (sans espace), sinon c'est un caractère de ponctuation.
% \end{itemize}
%
-% Cette deuxième approche parait meilleure, néanmoins \textsf{ncccomma}
+% Cette deuxième approche est plus souple, néanmoins \textsf{ncccomma}
% ne fonctionne pas avec \textsf{babel-french} utilisé conjointement avec
-% l'extension \textsf{numprint} et son option \texttt{autolanguage}
+% l'option \texttt{autolanguage}
% \footnote{L'option \texttt{autolanguage} de \textsf{numprint} utilisée
% conjointement avec l'option \texttt{french} de \textsf{babel} garantit un espacement
% correct entre les groupes de trois chiffres dans les grands nombres,
% qui doit être une espace insécable et non dilatable~\cite{RTIN},
-% légèrement plus grande que l'espace que l'on obtient sans cette option.}.
+% légèrement plus grande que l'espace que l'on obtient sans cette option.}
+% de l'extension \textsf{numprint}.
% En outre \textsf{ncccomma} ne fonctionne pas non plus
% avec l'extension \textsf{unicode-math} (et bugue à l'appel |\setmathfont|).
% Dans son article \emph{Intelligent commas}~\cite{BECC},
% Claudio Beccari propose une autre solution,
% voisine de \textsf{ncccomma}, mais qui produit le même type d'incompatibilités.
-% Le code a donc été revu et simplifié afin de régler proprement ces incompatibilités.
-% Comme bien des pays utilisent la virgule comme
+% Le code a donc été revu afin de régler ces incompatibilités.
+% Comme de nombreux pays utilisent la virgule comme
% séparateur décimal, il fait l'objet d'une extension séparée,
% \mbox{\textsf{decimalcomma}}~\cite{DECC}, qui est chargée par \textsf{frenchmath}
% (depuis la version 2.7).
-% Mais, si on utilise \textsf{unicode-math}, il est alors impératif de charger
-% \textsf{frenchmath} \emph{après}.
+% Bien que \textsf{decimalcomma} ne fonctionne avec \textsf{unicode-math}
+% que s'il est chargé après
% \footnote{L'extension \textsf{icomma} présente la même limitation et doit être chargée
-% après \textsf{unicode-math}.}.
+% après \textsf{unicode-math}.},
+% \textsf{frenchmath} s'est affranchi de cette contrainte (depuis la version 2.11).
%
% \medskip
% Lorsque l'on utilise l'extension \textsf{pstricks-add} de \textsf{PSTricks}
@@ -340,7 +354,7 @@
% avec \textsf{frenchmath} ;
% le comportement de \og ;\fg devient identique à celui de \og:\fg.
%
-% \medskip
+% \bigskip
% \DescribeMacro{crochets}
% Alors que les Anglais utilisent généralement les parenthèses
% pour les intervalles ouverts $(0, +\infty)$, l'usage en français est d'utiliser
@@ -349,7 +363,7 @@
% Nous avons redéfini les crochets dans l'extension \textsf{ibrackets}~\cite{BRACKETS}
% qui est chargée par \textsf{frenchmath},
% \DescribeMacro{[noibrackets]}
-% sauf si l'on active l'option \texttt{noibrackets}
+% sauf si on la désactive avec l'option \texttt{noibrackets}
% \footnote{D'autres solutions existent,
% par exemple avec l'extension \textsf{interval}
% ou encore avec la macro \texttt{\string\DeclarePairedDelimiter}
@@ -374,8 +388,8 @@
% et le signe}: par exemple |$x \in ] -\infty, 0]$| produit
% $x \in ] -\infty, 0]$ au lieu de $x \in ]-\infty, 0]$.
% Mais au contraire lorsque l'on veut faire de l'algèbre sur les intervalles,
-% \emph{il faut laisser une espace entre le second crochet et l'opération} + ou -,
-% par exemple, |$[a,b] + [c,d]$| produit $[a,b] + [c,d]$
+% \emph{il faut laisser une espace entre le second crochet et l'opération} + ou --,
+% par exemple, |$[a,b] +[c,d]$| donne $[a,b] +[c,d]$
% mais |$[a,b]+ [c,d]$| produit $[a,b]+ [c,d]$.
%
% En cas de comportement problématique, par exemple si
@@ -405,15 +419,23 @@
% \DescribeMacro{\infeg} \DescribeMacro{\supeg}
% Les relations $\infeg$ et $\supeg$ s'obtiennent avec les commandes |\infeg| et |\supeg|
% et diffèrent des versions anglaises de |\leq| ($\leq$) et |\geq| ($\geq$).
-% Ce sont des alias de |\leqslant| et |\geqslant| de l'extension \textsf{amssymb},
-% chargée par \textsf{frenchmath}.
+% Ce sont des alias de |\leqslant| et |\geqslant| de l'extension \textsf{amssymb}
+% (non chargée par \textsf{frenchmath}).
%
% \medskip
% \DescribeMacro{\vide}
% Le symbole de l'ensemble vide $\vide$
-% s'obtient avec |\vide| (alias de la commande |\varnothing| de l'extension \textsf{amssymb}) ;
+% s'obtient avec |\vide| (alias de la commande |\varnothing|
+% de l'extension \textsf{amssymb}) ;
% il diffère de celui obtenu avec |\emptyset|,
-% particulièrement laid dans la fonte classique Latin Modern : $\cmemptyset$.
+% particulièrement laid dans la fonte classique Latin Modern : $\CMemptyset$.
+%
+% \DescribeMacro{\AMSvarnothing}
+% Avec \textsf{unicode-math} et la fonte mathématique Latin Modern Math
+% (appelée avec |\setmathfont|), |\varnothing| produit le même glyphe
+% laid que |\emptyset|. Pour corriger cela, on dispose de la commande
+% |\AMSvarnothing|, qui doit être appelée dans le préambule
+% et permet d'obtenir le même glyphe que celui de \textsf{amssymb}.
%
% \medskip
% \DescribeMacro{\paral}
@@ -431,10 +453,10 @@
%
% \medskip
% \DescribeMacro{\cmod}
-% Le modulo se compose normalement entre parenthèses, avec |\pmod|,
-% mais on rencontre aussi, en français, le modulo entre crochets,
-% ce que permet la commande |\cmod| en respectant le bon espacement
-% propre au modulo : $ 53 \equiv 5 \cmod{12}$.
+% Le modulo se compose normalement entre parenthèses, avec |\pod| ou |\pmod|,
+% mais, en français, on le rencontre aussi entre crochets,
+% ce que permet la commande |\cmod|, en respectant le bon espacement
+% propre au modulo : $53 \equiv 5 \cmod{12}$.
%
% \subsection{Identifiants de \og fonctions\fg classiques}
%
@@ -492,8 +514,9 @@
% Les repères classiques du plan ou de l'espace seront composés
% avec des hauteurs de flèches homogénéisées :
% |\Oij| compose \Oij, |\Oijk| compose \Oijk et |\Ouv| compose \Ouv
-% (utilisé dans le plan complexe). \DescribeMacro{\Ouv}
-% On peut écrire ces commandes en mode texte, sans les délimiteurs du mode mathématique.
+% (utilisé dans le plan complexe).
+% \DescribeMacro{\Ouv}
+% Ces commandes peuvent être utilisées sans expliciter les délimiteurs du mode mathématique.
%
% \DescribeMacro{\Oij*} \DescribeMacro{\Oijk*} \DescribeMacro{\Ouv*}
% Les versions étoilées utilisent le point-virgule et non la virgule
@@ -503,9 +526,10 @@
% \medskip
% \DescribeMacro{\ij} \DescribeMacro{\ijk}
% Enfin les macros |\ij|
-% \footnote{Notons que la macro \texttt{\string\ij} existait déjà
-% (ligature entre i et j pour le hollandais) et a été redéfinie.}
-% et |\ijk| composent les bases du plan et de l'espace, \ij
+% \footnote{Notons que la macro \texttt{\string\ij} existe déjà
+% (ligature entre i et j pour le hollandais) ; elle a été redéfinie pour le mode
+% mathématique uniquement, qui doit donc ici être explicite : \texttt{\$\string\ij \$}.}
+% et |\ijk| composent les bases du plan et de l'espace, $\ij$
% et \ijk, en homogénéisant la hauteur des flèches.
%
% Signalons que, pour l'extension \textsf{mathptmx} (basée sur la police de texte Times),
@@ -514,8 +538,9 @@
% ce qui permet aux macros ci-dessus de fonctionner normalement.
%
% \subsection{Lettres grecques}
-% La norme concernant l'usage des lettres grecques en italique ou en forme droite
-% pour les mathématiques françaises ne semble pas aussi claire que pour les lettres romaines
+% Dans les mathématiques françaises, la norme concernant l'usage
+% des lettres grecques minuscules en italique ou en forme droite
+% ne semble pas aussi claire que pour les lettres romaines
% et il y a parfois divergence sur ce point.
% Beaucoup recommandent l'usage des lettres grecques
% minuscules en forme droite (\cite{FOUR}~\cite{DESIGN}~\cite{PMISO}), mais certains
@@ -538,29 +563,17 @@
% la documentation de \textsf{isomath} de Günter Milde~\cite{ISOM}
% expose différentes méthodes pour obtenir les lettres grecques
% en forme droite.
-% Par exemple les extensions \textsf{mathdesign}~\cite{DESIGN},
-% \textsf{fourier}~\cite{FOUR}
+% Par exemple les extensions \textsf{fourier}~\cite{FOUR}
+% \mbox{\textsf{mathdesign}}~\cite{DESIGN},
% ou \textsf{kpfonts}~\cite{KPF} disposent d'options permettant
% l'écriture automatique des lettres grecques minuscules en forme droite
-% (ou des majuscules en italique).
+% (et aussi des majuscules en italique) dans la police donnée.
% Citons également \textsf{newpxmath}, \textsf{newtxmath}
-% \footnote{L'extension \textsf{newtxmath} doit être chargée
-% après \textsf{frenchmath} qui utilise \textsf{amssymb} car la compilation
-% produit sinon un message d'erreur ;
-% ou sinon on peut ajouter \texttt{\string\let\string\Bbbk\string\relax}
-% avant de charger \textsf{frenchmath}.}
-% et \textsf{libertinust1math}
-% de Michael Sharpe,
+% et \textsf{libertinust1math} de Michael Sharpe ou
% \textsf{pxgreeks}, \textsf{txgreeks}
-% \footnote{Si on utilise \textsf{amsmath} (ou \textsf{mismath}),
-% \textsf{pxgreeks} ou \textsf{txgreeks} doit être chargée
-% \emph{après} \textsf{amsmath} (ou \textsf{mismath}),
-% pour éviter une erreur de compilation due à la redéfinition des commandes
-% \texttt{\string\iint}, \texttt{\string\iiint}, \texttt{\string\iiiint},
-% \texttt{\string\idotsint}.}
% et \textsf{libgreek} de Jean-François Burnol,
-% qui donnent de beaux résultats pour une utilisation avec
-% respectivement les polices Palatino, Times et Libertinus.
+% qui fournissent les formes droites avec
+% les polices Palatino, Times et Libertine respectivement.
%
% Jean-François Burnol a également développé l'extension \textsf{lgrmath}~\cite{LGR}
% qui permet d'utiliser, en mode mathématique, les différentes fontes de lettres
@@ -571,171 +584,207 @@
% \medskip
% Enfin, comme pour les majuscules, l'extension \textsf{unicode-math}
% réalise cette tâche automatiquement avec l'option \texttt{math-style=french},
-% mais nécessite une compilation avec \XeLaTeX\ ou \LuaLaTeX.
-%
-% \medskip
-% L'extension \textsf{frenchmath} fournit les options décrites ci-dessous
-% qui permettent d'obtenir les lettres grecques en forme droite.
-% Ces options peuvent être utilisées y compris avec \textsf{unicode-math},
-% mais \textsf{frenchmath} doit toujours être chargé
-% \emph{après} \textsf{unicode-math}.
+% mais nécessite une compilation \XeLaTeX\ ou \LuaLaTeX.
%
% \medskip
-% \DescribeEnv{[lgrmath]}
-% En activant l'option \texttt{lgrmath}, \textsf{frenchmath}
-% charge l'extension du même nom avec son option \texttt{style=french}
-% et la fonte \texttt{fcm} (de l'extension \textsf{cm-lgc})
-% \footnote{Évidemment il faut que \textsf{cm-lgc} soit installée
-% sur votre distribution sans quoi la fonte de substitution LGR/cmr/m/n sera utilisée.}.
-% Celle-ci se marie particulièrement bien avec la police usuelle Latin Modern.
-% Les commandes |\alpha|, |\beta|, etc.
-% produisent alors les lettres en forme droite
-% $\alphaup$, $\betaup$, \ldots, $\piup$, etc.,
-% tandis que |\alphait|, |\betait|, etc. produisent des formes italiques
-% $\alphait$, $\betait$, \ldots, $\piit$, etc.
-% Ces dernières sont peu à notre goût, mais on conserve les lettres
-% d'origine avec |\italpha|, |\itbeta| : $\italpha$, $\itbeta$, \ldots, $\itpi$, etc.
-%
-% \DescribeMacro{\SaveGreekItalics}
-% On peut aussi choisir d'autres fontes en chargeant l'extension
-% \textsf{lgrmath} indépendamment de \textsf{frenchmath}
-% (voir par exemple les options \texttt{font=Alegreya-LF} ou \texttt{font=Cochineal-LF}
-% de \textsf{lgrmath}).
-% Dans ce cas, il ne faut pas activer l'option \texttt{lgrmath} de \textsf{frenchmath}
-% et, si l'on veut conserver les lettres italiques d'origine,
-% il faut précéder le chargement
-% de \textsf{lgrmath} de la commande |\SaveGreekItalics| ;
-% avec \textsf{unicode-math}, il faut en outre placer cette commande
-% dans un |\AtBeginDocument| avec |\usepackage[style=french,font=...]{lgrmath}|
-% et \emph{après} le chargement de \textsf{unicode-math}.
+% Avant la version 3.0, \textsf{frenchmath} disposait de deux options pour composer
+% les lettres grecques en forme droite : \texttt{lgrmath} et \texttt{upgreek}
+% \footnote{En fait il y avait une troisième option, \texttt{Upgreek}, mais celle-ci
+% est désormais obsolète.}.
+% Inspiré par le travail de Jean-François Burnol, nous avons développé, et intégré
+% à \textsf{frenchmath}, l'extension \textsf{mathgreeks}~\cite{MGREEK}
+% qui permet d'utiliser de nombreuses fontes de lettres grecques
+% sans modifier les autres caractères et symboles.
+% Il suffit d'appeler \textsf{frenchmath} avec une des options de fonte de
+% \textsf{mathgreeks}, de la forme \texttt{clé=valeur}.
+% Par exemple, les lettres grecques droites de la police Utopia,
+% telles que fournies par l'extension \textsf{mathdesign}, s'obtiennent avec
+% \begin{center}
+% |\usepackage[mathdesign=Utopia]{frenchmath}|.
+% \end{center}
+% L'extension \textsf{mathdesign} elle-même ne sera pas chargée.
+% Lorsqu'une valeur n'est pas précisée, il y a toujours une valeur par défaut.
+% Par exemple pour \texttt{mathdesign}, nous avons choisi \texttt{Charter}.
+% Pour \texttt{upgreek}, la fonte par défaut est \texttt{Symbol}.
+% Pour \texttt{lgrmath}, nous avons choisi \texttt{fcm}
+% \footnote{Il faut que l'extension \textsf{cm-lgc} (développée par Alexej Kryukov)
+% soit installée sur votre distribution,
+% sans quoi la fonte de substitution LGR/lmr/m/n sera utilisée.
+% Les formes italiques du thêta $\ittheta$ ou du rho $\itrho$ de \texttt{fcm}
+% ne sont pas vraiment ceux d'usage en mathématiques, mais les formes droites
+% sont bien adaptées.
+% \texttt{Alegreya-LF} est une autre fonte assez élégante pour \texttt{lgrmath},
+% {\mathgreeksfont{enc=LGR,fam=Alegreya-LF,shape=n}\
+% mais produit un \texttt{\string \phi} $\phi$} moins courant et sans la variante
+% $\phi$.
+% }
+% qui se marie particulièrement bien avec la police usuelle Latin Modern.
+% Ainsi les options précédentes de \textsf{frenchmath} fonctionnent toujours.
+%
+% Les commandes |\alpha|, |\beta|, \ldots |\pi|, etc.
+% produisent alors les lettres en forme droite $\alpha$, $\beta$, \ldots, $\pi$, etc.
+% tandis que |\italpha|, |\itbeta|, \ldots, |\itpi|, etc. produisent les formes italiques
+% $\italpha$, $\itbeta$, \ldots, $\itpi$, etc.
+% Si ces dernières déplaisent, on peut activer l'option \texttt{savegreeks}
+% (option booléenne passée à \textsf{mathgreeks}) pour conserver les lettres
+% d'origine avec |\backalpha|, |\backbeta|, \ldots, |\backpi|, etc. :
+% $\backalpha$, $\backbeta$, \ldots, $\backpi$, etc.
%
% \medskip
-% \DescribeEnv{[upgreek]}
-% Avec la même philosophie, \textsf{frenchmath} fournit aussi l'option \texttt{upgreek}
-% basée sur l'extension \textsf{upgreek} de Walter Schmidt~\cite{UPGREEK} qui donne
-% accès à d'autres fontes de lettres grecques minuscules en forme droite avec
-% |\upalpha|, |\upbeta|, etc.
-% L'extension \textsf{upgreek} sera chargée avec son option \texttt{Symbol}
-% \footnote{L'option \texttt{Symbol} de \textsf{upgreek} se marie bien
-% avec une police comme Times par exemple.}
-% utilisant la police Adobe Symbol et qui produit des lettres grecques assez grasses :
-% $\upalphasym$, $\upbetasym$, \ldots, $\uppisym$, etc.
-%
-% Si l'on veut utiliser l'extension \textsf{upgreek}
-% avec l'une des deux autres options disponibles, \texttt{Euler}
-% (qui produit $\upalpha, \upbeta, \ldots, \uppi$, etc.)
-% ou \texttt{Symbolsmallscale},
-% il faut charger l'extension \textsf{upgreek} avec l'option souhaitée
-% indépendamment de \mbox{\textsf{frenchmath}}.
-% Par contre, pour que les commandes |\alpha|, |\beta|\ldots correspondent
-% aux formes droites (comme alias de |\upalpha|, |\upbeta|\ldots),
-% il faut ici conserver l'option \texttt{upgreek} de \textsf{frenchmath}.
-% Comme pour \textsf{lgrmath}, si l'on veut que les formes italiques d'origine
-% restent toujours disponibles avec les commandes
-% |\italpha|, |\itbeta|, etc.,
-% il faut précéder le chargement de l'extension \textsf{upgreek} de la commande
-% |\SaveGreekItalics| ;
-% \DescribeMacro{\upgreekUndefined}
-% et si l'on utilise \textsf{unicode-math}, il faut en outre ajouter la commande
-% |\upgreekUndefined| avant le |\usepackage[...]{upgreek}| et les trois
-% dans un |\AtBeginDocument| placé \emph{entre} le chargement de \textsf{unicode-math}
-% et celui de \textsf{frenchmath}
-% \footnote{Tout cela est bien contraignant, mais c'est lié au fonctionnement capricieux
-% de \textsf{unicode-math} qui génère de nombreuses incompatibilités. Ceci dit,
-% on n'a en principe besoin de nos options de lettres grecques droites que si l'on n'est
-% pas satisfait de celles fournies par \textsf{unicode-math}.}.
+% Nous présentons ci-après quelques unes des nombreuses options possibles.
+% On se référera à la documentation de \textsf{mathgreeks}~\cite{MGREEK}
+% pour d'autres exemples ou pour les formes italiques correspondantes.
+% La seconde ligne de chaque exemple contient, outre les majuscules,
+% des variantes obtenues avec |\varpepsilon|, |\vartheta|, etc.
+% (sans effet avec la clé \texttt{lgrmath}, excepté pour |\varsigma|).
+% Les clés sans valeur sont en fait des booléens dont la valeur par défaut est \texttt{true}.
%
% \medskip
-% \DescribeEnv{[Upgreek]}
-% Avec \LaTeX, les lettres grecques majuscules sont automatiquement composées
-% en forme droite et l'option \texttt{upgreek} ne concerne que les minuscules.
-% Cependant l'extension \textsf{upgreek}
-% propose aussi |\Upgamma|, \ldots, |Upomega| : $\Upgamma, \ldots, \Upomega$.
-% Afin de conserver majuscules et minuscules dans le même style,
-% \textsf{frenchmath} fournit l'option \texttt{Upgreek} qui redéfinit les majuscules
-% |\Gamma|, \ldots, |\Omega| pour correspondre à ces variantes.
-% Par contre l'on n'a alors plus accès aux caractères d'origine : $\Gamma, \ldots, \Omega$.
-% L'option \texttt{Upgreek} reprend aussi
-% les minuscules grecques de l'option \texttt{upgreek}, qu'il est donc
-% inutile d'invoquer simultanément.
+% \DeleteShortVerb{\|}
+% \newcommand\eg{\texttt{=}}
+% \noindent\begin{tabular}{|l|c|}
+% \hline
+% Option \texttt{clé=valeur} & Résultat \\
+% \hline
+% \textbf{lgrmath\eg Cochineal-LF} &
+% \mathgreeksfont{enc=LGR, fam=Cochineal-LF, shape=n}
+% \greektable \\
+% \hline
+% \textbf{lgrmath\eg fcm} &
+% \mathgreeksfont{enc=LGR, fam=fcm, shape=n}
+% \greektable \\
+% \hline
+% \textbf{upgreek\eg Euler} &
+% \mathgreeksfont{enc=U, fam=eur, shape=n}
+% \greektable \\
+% \hline
+% \textbf{upgreek\eg Symbol} &
+% \mathgreeksfont{enc=U, fam=psy, shape=n}
+% \greektable \\
+% \hline
+% \textbf{mathdesign\eg Charter} &
+% \mathgreeksfont{enc=OML, fam=mdbch, shape=n}
+% \greektable \\
+% \hline
+% \textbf{fourier} &
+% \mathgreeksfont{enc=FML, fam=futm}
+% \greektable \\
+% \hline
+% \textbf{pxfonts} &
+% \mathgreeksfont{enc=U, fam=pxmia}
+% \greektable \\
+% \hline
+% \textbf{txfonts} &
+% \mathgreeksfont{enc=U, fam=txmia}
+% \greektable \\
+% \hline
+% \textbf{libertinus} &
+% \mathgreeksfont{enc=LS1, fam=libertinust1math, shape=n}
+% \greektable \\
+% \hline
+% \end{tabular}
+% \MakeShortVerb{|}
+
+% \bigskip
+% Une option spéciale, \texttt{libsans} (booléen), permet d'obtenir une fonte
+% sans empattement pour \texttt{libertinus}.
+% Une autre option, non présentée dans le tableau, est \textbf{kpfonts},
+% avec deux valeurs possibles. Enfin
+% deux autres options sont disponibles, mais pour une compilation avec
+% \LuaLaTeX\ (ou \XeLaTeX):
+% \begin{description}
+% \item[fontspec\eg \ldots] De nombreuses valeurs sont possibles, par exemple
+% \texttt{FreeSerif},
+% \texttt{LiberationSerif},
+% \texttt{GFS Artemisia},
+% \texttt{GFS Didot} (valeur par défaut)\ldots
+% mais aussi des polices non libres comme \texttt{Cambria}, \texttt{Arial},
+% \texttt{Palatino Linotype}, \texttt{Times New Roman}\ldots\
+% si elles sont installées sur votre système ;
+% nécessite de charger l'extension \textsf{fontspec}
+% \footnote{L'extension \textsf{fontspec} est chargée automatiquement par
+% \textsf{unicode-math} ou \textsf{mathspec} (cette dernière étant spécifique à
+% \XeLaTeX), mais l'option \texttt{fontspec} permet une variété de polices
+% TrueType ou OpenType bien plus grande que l'option \texttt{unicode-math}.}.
+%
+% \item[unicode-math\eg \ldots]
+% Donne un beau résultat avec \texttt{Latin Modern Math} (valeur par défaut)
+% ou \texttt{STIX Two Math} ; nécessite le module \textsf{unicode-math}.
+%
+% \end{description}
%
% \medskip
-% Signalons aussi l'extension \textsf{textalpha} de Günter Milde~\cite{ALPHA} qui
-% donne accès aux lettres en forme droite \textalpha, \textbeta, \ldots,
-% \textpi, etc.,
-% mais en mode texte avec |\textalpha|, |\textbeta|, etc.
-% Ces glyphes, semblables à celles de la fonte \texttt{lmr} accessible avec \textsf{lgrmath},
-% se marient également bien avec la police Latin Modern,
-% par contre le thêta produit, \texttheta, n'est pas vraiment
-% celui qui est d'usage en mathématiques.
+% Par défaut \LaTeX\ compose les majuscules grecques en forme droite et il
+% n'est donc pas indispensable de recoder celles-ci. L'option \texttt{uppercase=false}
+% permet de conserver les majuscules d'origine : $\backGamma$, $\backDelta$, \ldots,
+% $\backOmega$ (sans le préfixe |\back...|).
%
% \medskip
% Mentionnons pour finir ce commentaire de Walter Schmidt~\cite{UPGREEK} que le mu
-% utilisé pour le préfixe des unités physiques, \textmicro, doit se composer avec |\textmu|
+% utilisé pour le préfixe des unités physiques, \textmu, doit se composer avec |\textmu|
% \footnote{L'extension \textsf{textalpha} fournit à la place \texttt{\string\textmicro}
% (depuis 2020) car elle redéfinit \texttt{\string\textmu}.},
% disponible en mode texte dans beaucoup de fontes (ou avec \textsf{textcomp}) ;
-% il diffère du $\mu$ droit mathématique.
+% il diffère du $\mu$ droit mathématique, obtenu avec |$\mu$| si l'on a activé
+% une des options de fonte précédentes.
+%
%
% \StopEventually{}
%
% \section{Le code}
%
+% Les seules options de \textsf{frenchmath} sont \texttt{capsit} et \texttt{noibrackets}.
+% Tout le travail sur les lettre grecques est dorénavant géré par \textsf{mathgreeks}
+% et toute option inconnue de \textsf{frenchmath} sera passée à \textsf{mathgreeks}.
+% Auquel cas, l'on y ajoute automatiquement l'option \texttt{upright}
+% pour composer les lettres grecques en forme droite.
+% Si l'on donne une clé ou une valeur invalide, c'est alors \textsf{mathgreeks} qui produira
+% un message d'erreur.
+%
% \begin{macrocode}
-\newif\ifcapsit
-\DeclareOption{capsit}{\capsittrue}
-\newif\iflgrmath
-\DeclareOption{lgrmath}{\lgrmathtrue}
-\newif\ifupgreek
-\DeclareOption{upgreek}{\upgreektrue}
-\newif\ifUpgreek
-\DeclareOption{Upgreek}{\Upgreektrue\upgreektrue}
-\newif\ifnoibrackets
-\DeclareOption{noibrackets}{\noibracketstrue}
+\newif\iffrenchmath@capsit
+\DeclareOption{capsit}{\frenchmath@capsittrue}
+\newif\iffrenchmath@noibrackets
+\DeclareOption{noibrackets}{\frenchmath@noibracketstrue}
+\newif\iffrenchmath@mathgreeks
+\DeclareOption*{\frenchmath@mathgreekstrue
+ \PassOptionsToPackage{\CurrentOption,upright}{mathgreeks}}
\ProcessOptions \relax
-\@ifpackageloaded{unicode-math}{
- \@ifpackageloaded{mathdesign}{
- \PackageInfo{frenchmath}{Package mathdesign
- is loaded, \MessageBreak
- I don't load mathrsfs and amssymb}
- }{
- %\let\circledS\relax % utilisé uniquement par mathdesign
- \let\eth\relax % 3 incompatibilités unicode-math / amssymb
- \let\digamma\relax
- \let\backepsilon\relax
- \RequirePackage{amssymb}
- \PackageInfo{frenchmath}{Package unicode-math
- is loaded, \MessageBreak
- I don't load mathrsfs}
- }
- \let\vide\varnothing % \varnothing sera écrasé par unicode-math
-}{
- \AtBeginDocument{
- \@ifpackageloaded{mathdesign}{
- \PackageInfo{frenchmath}{Package mathdesign
- is loaded, \MessageBreak
- I don't load mathrsfs and amssymb}
- }{
- \RequirePackage{amssymb} % \leqslant, \geqslant, \varnothing
- \@ifundefined{mathscr}{\RequirePackage{mathrsfs}}{
- \PackageInfo{frenchmath}{Command \string\mathscr\space
- already defined, \MessageBreak
- I don't load mathrsfs}
- }
- }
- }
-}
+% \end{macrocode}
+% Assurer une bonne compatibilité avec \textsf{unicode-math} est un peu compliqué
+% car \textsf{unicode-math} définit ou redéfinit de nombreux symboles, lettres,
+% signes dans |\AtBeginDocument|. Les extensions \textsf{decimalcomma}
+% et \textsf{ibrackets} font déjà appel à |\AtBeginDocument| mais pour garantir
+% que leur action soit bien postérieure à celle de \textsf{unicode-math}
+% leur appel a été placé dans un |\AtEndPreamble|, fourni par l'extension \textsf{etoolbox}.
+% Il y a par contre un problème si on utilise une instruction comme |\MakeShortVerb"| du
+% module \textsf{shortvrb} ou |\lstMakeShortInline"| du module \mbox{\textsf{listings}}.
+% Ce type d'instruction doit agir \emph{après} \textsf{frenchmath}, donc être
+% placée après |\begin{document}| ou bien dans un |\AtBeginDocument{...}|.
+%
+% L'extension \textsf{mathptmx} ne fournit pas de |\jmath| mais considère néanmoins
+% cette commande comme existante. Dans ce cas, nous la rendons donc \og indéfinie \fg
+% pour la définir ensuite dans une commande générale faisant appel
+% à l'extension \textsf{dotlessj}.
+% \begin{macrocode}
\RequirePackage{amsopn} % fournit \DeclareMathOperator
-\@ifpackageloaded{mathptmx}{\RequirePackage{dotlessj}}{}
\RequirePackage{xspace} % utile pour les commandes \ssi, \Oij
-\ifnoibrackets\else\RequirePackage{ibrackets}\fi % intelligent brackets
-\RequirePackage{decimalcomma} % depuis frenchmath 2.7
+\RequirePackage{etoolbox} % fournit \AtEndPreamble
+\iffrenchmath@mathgreeks \RequirePackage{mathgreeks} \fi
+\AtEndPreamble{
+ \RequirePackage{decimalcomma}
+ \iffrenchmath@noibrackets\else\RequirePackage{ibrackets}\fi
+ \@ifpackageloaded{mathptmx}{\let\jmath\@undefined}{}
+ \@ifundefined{jmath}{\RequirePackage{dotlessj}}{}
+ \@ifpackageloaded{pstricks-add}{\psset{comma=true}}{}
+}
% \end{macrocode}
%
% \DescribeMacro{\DeclareMathUp}
-% Sauf si l'option \texttt{capsit} est activée, on redéfinit toutes les lettres majuscules
+% Sauf si l'on a invoqué l'option \texttt{capsup=false} (ou \texttt{capsit}),
+% on redéfinit toutes les lettres majuscules
% du mode mathématique grâce à la commande |\DeclareMathUp|.
% Contrairement aux bascules |\MathUp| et |\MathIt| de l'extension \textsf{mismath},
% |\DeclareMathUp| ne fonctionne que dans le préambule, mais son code est bien plus simple
@@ -753,14 +802,14 @@
% se trouve sur le forum de discussion \texttt{iterate190.rssing.com},
% en réponse à \og TeX How to iterate over a comma separated list$?$\fg.
% Que son auteur, Petr Olšák, soit remercié.
-% Cette macro a été définie de manière identique dans \textsf{mismath},
+% Cette macro a d'ailleurs été utilisée de manière identique dans \textsf{mismath},
% mais cela ne génère pas d'incompatibilité.}.
% |\AtBeginDocument| est nécessaire pour que ces définitions
% soient prises en compte avec la classe \textsf{beamer} par exemple,
% ou avec \textsf{unicode-math}.
% \smallskip
% \begin{macrocode}
-\newcommand*\DeclareMathUp[1]{
+\providecommand*\DeclareMathUp[1]{
\DeclareMathSymbol{#1}{\mathalpha}{operators}{`#1}}
\def\apply#1#2{\apply@#1#2,\apply@,}
@@ -768,33 +817,103 @@
\else #1{#2}\afterfi@{\apply@#1}\fi}
\def\afterfi@#1#2\fi{\fi#1}
-\ifcapsit\else\AtBeginDocument{
+\AtEndPreamble{\iffrenchmath@capsit\else\AtBeginDocument{
\apply\DeclareMathUp{A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z}
- }
-\fi
+ }\fi
+}
-\AtBeginDocument{\@ifpackageloaded{pstricks-add}{\psset{comma=true}}{}}
-\DeclareMathSymbol{;}{\mathbin}{operators}{'73} % \mathpunct à l'origine
+% \end{macrocode}
+% En utilisant |\AtEndPreamble| (de l'extension \mbox{\textsf{etoolbox}}),
+% avec |\AtBeginDocument| à l'intérieur, on garantit que certaines actions
+% auront bien lieu après celles de \textsf{unicode-math},
+% même si \textsf{frenchmath} est chargé avant \mbox{\textsf{unicode-math}}.
+%
+% Certains symboles, provenant de \textsf{amssymb} sont déjà définis par certaines
+% extensions (\textsf{mathdesign} ou \textsf{unicode-math}) et ne seront pas redéfinis.
+% Un avertissement sera affiché dans ce cas. Comme \textsf{amssymb}
+% (qui utilise \textsf{amsfonts}) charge plusieurs fontes mathématiques et un grand
+% nombre de symboles pas forcément nécessaires, nous n'avons extrait que les
+% trois symboles dont nous avons besoin dans cette extension :
+% |\leqslant|, |\geqslant| et |\varnothing|.
+% \begin{macrocode}
+\AtEndPreamble{% au cas où frenchmath est chargé avant unicode-math
+ \AtBeginDocument{% après actions de unicode-math
+ \DeclareMathSymbol{;}{\mathbin}{operators}{'73} % et non \mathpunct
+ \@ifundefined{mathscr}{\RequirePackage{mathrsfs}}{
+ \PackageWarningNoLine{frenchmath}{Command \string\mathscr\space
+ already defined, \MessageBreak
+ I don't load mathrsfs}
+ }
+ \@ifundefined{leqslant}{
+ \DeclareSymbolFont{AMSa}{U}{msa}{m}{n}% de amsfonts
+ \DeclareMathSymbol{\leqslant}{\mathrel}{AMSa}{"36}% de amssymb
+ \DeclareMathSymbol{\geqslant}{\mathrel}{AMSa}{"3E}
+ }{
+ \PackageWarningNoLine{frenchmath}{\string\leqslant\space
+ and \string\geqslant\space already defined,
+ \MessageBreak
+ they will not be redefined}
+ }
+ \@ifundefined{varnothing}{% de amssymb
+ \@ifundefined{text}{\RequirePackage{amstext}}{}
+ \newcommand\varnothing{% \usefont évite de déclarer AMSb
+ \mathord{\text{\usefont{U}{msb}{m}{n}\symbol{"3F}}}}
+ }{
+ \PackageWarningNoLine{frenchmath}{\string\varnothing\space
+ already defined,
+ \MessageBreak
+ it will not be redefined,
+ \MessageBreak
+ except by using \string\AMSvarnothing}
+ }
+ }
+}
% \end{macrocode}
-% Passons aux alias et identifiants de fonctions classiques.
+% Voyons les alias et quelques commandes particulières.
+%
+% La commande |\varnothing| produit $\varnothing$ mais par contre,
+% le symbole fournit par \textsf{unicode-math}, avec \textsf{Latin Modern Math},
+% est très laid et malheureusement identique à |\emptyset| : $\CMemptyset$.
+% Afin de récupérer le symbole de \textsf{amssymb}, sans être obligé de charger
+% cette extension, nous proposons la commande |\AMSvarnothing|,
+% à placer dans le préambule, après l'appel de \textsf{unicode-math}.
% \begin{macrocode}
\newcommand\curs{\mathscr}
\newcommand\infeg{\leqslant}
\newcommand\supeg{\geqslant}
-\@ifundefined{vide}{\newcommand\vide{\varnothing}}{}
+\newcommand\vide{\varnothing}
+\newcommand\AMSvarnothing{% doit être appelé après \setmathfont ?
+ \AtEndPreamble{\AtBeginDocument{% après actions de unicode-math
+ \renewcommand\varnothing{%
+ \mathord{\text{\usefont{U}{msb}{m}{n}\symbol{"3F}}}}
+ }}
+}
% \end{macrocode}
% La définition de |\paral| remplace, depuis la version 2.2,
% l'ancienne définition plus simple |\mathrel{/\!\!/}|, mais qui donnait des barres
-% trop serrées avec \textsf{mathastext} + \textsf{times} ou avec \textsf{libertinust1math}.
+% trop serrées avec \mbox{\textsf{mathastext}} + \textsf{times}
+% ou avec \textsf{libertinust1math}.
% Merci à Jean-François Burnol de me l'avoir fait remarquer
% et pour ses suggestions dans la mise au point d'une macro plus efficace.
+%
+% La macro |\cmod|, copiée du |\pod| de \textsf{amsmath} (depuis v2.11),
+% permet de gérer différemment
+% l'espacement en mode \og mathématiques centrées \fg (hors-ligne)
+% ou en mode \og en ligne \fg.
% \begin{macrocode}
\newcommand\paral{\mathrel{\ooalign{$\mkern-1.75mu/\mkern1.75mu$\cr%
$\mkern1.75mu/\mkern-1.75mu$}}}
\newcommand\ssi{si, et seulement si,\xspace}
-\newcommand*\cmod[1]{\quad[#1]}
+%\newcommand*\cmod[1]{\quad[#1]}
+\newif\if@display % provient de amsmath, peut être appelé 2 fois
+\everydisplay\@xp{\the\everydisplay \@displaytrue}
+\newcommand*\cmod[1]{\penalty \z@ % similaire à amsmath \allowbreak
+ \if@display\mkern 18mu\else\mkern 8mu\fi [#1]}
+% \end{macrocode}
+% Passons aux identifiants de fonctions classiques.
+% \begin{macrocode}
\DeclareMathOperator{\pgcd}{pgcd}
\DeclareMathOperator{\ppcm}{ppcm}
\DeclareMathOperator{\card}{card}
@@ -811,7 +930,7 @@
\DeclareMathOperator{\cosech}{cosech}
% \end{macrocode}
-% Présentons les commandes pour les bases et repères, qui peuvent être utilisées
+% Les commandes pour les bases et repères peuvent être utilisées
% en mode texte grâce à |\ensuremath| (et |\xspace| qui garantit le bon espacement).
% \begin{macrocode}
\newcommand\@Oij{%
@@ -838,9 +957,10 @@
\ensuremath{\left(O ; \vec{u}, \vec{v}\,\right)}\xspace}
\newcommand\Ouv{\@ifstar{\@@Ouv}{\@Ouv}}
-\AtBeginDocument{
- \renewcommand\ij{%
- \ensuremath{\left(\vec{\imath}, \vec{\jmath}\,\right)}\xspace}}
+\AtBeginDocument{\let\oldij\ij %\ij existe déjà (mode texte)
+ \renewcommand\ij{\TextOrMath{\oldij}{%
+ \left(\vec{\imath}, \vec{\jmath}\,\right)}}
+}
\newcommand\ijk{%
\ensuremath{%
\left(\vec{\vphantom{t}\imath}, \vec{\vphantom{t}\jmath},
@@ -848,141 +968,9 @@
\xspace}
% \end{macrocode}
-% Ce n'est qu'à la fin du préambule, donc avec |\AtBeginDocument|, que l'on examine
-% les options \texttt{lgrmath} ou \texttt{upgreek},
-% pour que cela fonctionne avec \textsf{unicode-math} et
-% pour laisser à l'utilisateur la possibilité de charger \textsf{upgreek}
-% après \textsf{frenchmath} et éviter un conflit d'option.
-% On sauvegarde les lettres grecques d'origine dans les macros |\italpha|, \ldots,
-% |\itomega|, grâce à la commande |\SavedGreekItalics|.
-% La macro |\upgreekUndefined| ne sert que si l'on veut utiliser \textsf{upgreek}
-% avec \textsf{unicode-math} : elle permet de \og vider \fg la définition
-% de |\upalpha|, |\upbeta|\ldots, car sinon leur redéfinition par \textsf{upgreek}
-% est impossible.
-% \begin{macrocode}
-\providecommand\SaveGreekItalics{% pourrait être définie ailleurs
- \let\italpha\alpha
- \let\itbeta\beta
- \let\itgamma\gamma
- \let\itdelta\delta
- \let\itepsilon\epsilon
- \let\itzeta\zeta
- \let\iteta\eta
- \let\ittheta\theta
- \let\itiota\iota
- \let\itkappa\kappa
- \let\itlambda\lambda
- \let\itmu\mu
- \let\itnu\nu
- \let\itxi\xi
- \let\itpi\pi
- \let\itrho\rho
- \let\itsigma\sigma
- \let\ittau\tau
- \let\itupsilon\upsilon
- \let\itphi\phi
- \let\itchi\chi
- \let\itpsi\psi
- \let\itomega\omega
- \let\itvarepsilon\varepsilon
- \let\itvartheta\vartheta
- \let\itvarpi\varpi
- \let\itvarsigma\varsigma
- \let\itvarphi\varphi
-}
-
-\providecommand\upgreekUndefined{
- \let\upalpha\@undefined
- \let\upbeta\@undefined
- \let\upgamma\@undefined
- \let\updelta\@undefined
- \let\upepsilon\@undefined
- \let\upzeta\@undefined
- \let\upeta\@undefined
- \let\uptheta\@undefined
- \let\upiota\@undefined
- \let\upkappa\@undefined
- \let\uplambda\@undefined
- \let\upmu\@undefined
- \let\upnu\@undefined
- \let\upxi\@undefined
- \let\uppi\@undefined
- \let\uprho\@undefined
- \let\upsigma\@undefined
- \let\uptau\@undefined
- \let\upupsilon\@undefined
- \let\upphi\@undefined
- \let\upchi\@undefined
- \let\uppsi\@undefined
- \let\upomega\@undefined
- \let\upvarepsilon\@undefined
- \let\upvartheta\@undefined
- \let\upvarpi\@undefined
- \let\upvarrho\@undefined
- \let\upvarsigma\@undefined
- \let\upvarphi\@undefined
-}
-
-\AtBeginDocument{
- \iflgrmath
- \SaveGreekItalics
- \RequirePackage[font=fcm,style=french]{lgrmath}
- \fi
- \ifupgreek
- \@ifpackageloaded{upgreek}{}{
- \@ifpackageloaded{unicode-math}{\upgreekUndefined}{}
- \SaveGreekItalics
- \RequirePackage[Symbol]{upgreek}
- }
- \renewcommand\alpha{\upalpha}
- \renewcommand\beta{\upbeta}
- \renewcommand\gamma{\upgamma}
- \renewcommand\delta{\updelta}
- \renewcommand\epsilon{\upepsilon}
- \renewcommand\zeta{\upzeta}
- \renewcommand\eta{\upeta}
- \renewcommand\theta{\uptheta}
- \renewcommand\iota{\upiota}
- \renewcommand\kappa{\upkappa}
- \renewcommand\lambda{\uplambda}
- \renewcommand\mu{\upmu}
- \renewcommand\nu{\upnu}
- \renewcommand\xi{\upxi}
- \renewcommand\pi{\uppi}
- \renewcommand\rho{\uprho}
- \renewcommand\sigma{\upsigma}
- \renewcommand\tau{\uptau}
- \renewcommand\upsilon{\upupsilon}
- \renewcommand\phi{\upphi}
- \renewcommand\chi{\upchi}
- \renewcommand\psi{\uppsi}
- \renewcommand\omega{\upomega}
- \renewcommand\varepsilon{\upvarepsilon}
- \renewcommand\vartheta{\upvartheta}
- \renewcommand\varpi{\upvarpi}
- \renewcommand\varrho{\upvarrho}
- \renewcommand\varsigma{\upvarsigma}
- \renewcommand\varphi{\upvarphi}
- \fi
- \ifUpgreek
- % unicode-math utilise \upGamma, \upDelta...
- \renewcommand\Gamma{\Upgamma}
- \renewcommand\Delta{\Updelta}
- \renewcommand\Theta{\Uptheta}
- \renewcommand\Lambda{\Uplambda}
- \renewcommand\Xi{\Upxi}
- \renewcommand\Pi{\Uppi}
- \renewcommand\Sigma{\Upsigma}
- \renewcommand\Upsilon{\Upupsilon}
- \renewcommand\Phi{\Upphi}
- \renewcommand\Psi{\Uppsi}
- \renewcommand\Omega{\Upomega}
- \fi
-}
-% \end{macrocode}
%
% \medskip
-% \begin{thebibliography}{31}
+% \begin{thebibliography}{32}
% \begin{raggedright}
% \bibitem{RTIN} \emph{Lexique des règles typographiques en usage à l’Imprimerie Nationale},
% édition du 26/08/2002.
@@ -1010,6 +998,12 @@
% Claudio Beccari, CTAN, v1.2.00 2021/08/04.
% \bibitem{MAFR} \emph{La distribution \textsf{mafr}}, Christian Obrecht,
% CTAN, v1.0 17/09/2006.
+% \bibitem{BABEL} \emph{A Babel language definition file for French}, extension \LaTeX\
+% \textsf{babel-french} de Daniel Flipo, CTAN, v3.5c 14/09/2018.
+% \bibitem{FRM} \emph{L'extension \textsf{tdsfrmath}}, Yvon Henel,
+% CTAN, v1.3 22/06/2009.
+% \bibitem{TABL} \emph{L'extension \textsf{tablvar}}, Antoine Missier,
+% CTAN, v2.0 23/12/2023.
% \bibitem{UNIC} \emph{Experimental Unicode mathematical typesetting:
% The \textsf{unicode-math} package}, Will Robertson, Philipp Stephani, Joseph Wright,
% Khaled Hosny, and others, CTAN, v0.8r 13/08/2023.
@@ -1017,16 +1011,12 @@
% Michel Bovani, CTAN, v1.3 30/01/2005.
% \bibitem{DESIGN} \emph{The \textsf{mathdesign} package},
% Paul Pichaureau, CTAN, v2.31 29/08/2013.
-% \bibitem{MIS} \emph{\textsf{mismath} -- Miscellaneous mathematical macros},
-% Antoine Missier, CTAN, v2.10 20/02/2024.
+% \bibitem{KPF} \emph{\textsf{Kp-Fonts} -- The Johannes Kepler project},
+% Christophe Caignaert, CTAN, v3.34 20/09/2022.
+% \bibitem{MIS} \emph{Miscellaneous mathematical macros -- The \textsf{mismath} package},
+% Antoine Missier, CTAN, v3.0 04/05/2024.
% \bibitem{VECT} \emph{\textsf{esvect} -- Typesetting vectors with beautiful
% arrow with \LaTeXe}, Eddie Saudrais, CTAN, v1.3 11/07/2013.
-% \bibitem{FRM} \emph{L'extension \textsf{tdsfrmath}}, Yvon Henel,
-% CTAN, v1.3 22/06/2009.
-% \bibitem{TABL} \emph{L'extension \textsf{tablvar}}, Antoine Missier,
-% CTAN, v2.0 23/12/2023.
-% \bibitem{BABEL} \emph{A Babel language definition file for French}, extension \LaTeX\
-% \textsf{babel-french} de Daniel Flipo, CTAN, v3.5c 14/09/2018.
% \bibitem{ICOMMA} \emph{The \textsf{icomma} package for \LaTeXe}.
% Walter Schmidt, CTAN, v2.0 10/03/2002.
% \bibitem{NCC} \emph{The \textsf{ncccomma} package}. Alexander I.~Rozhenko,
@@ -1043,12 +1033,12 @@
% \bibitem{MATAL} \emph{The \textsf{mathalpha}, \textsc{aka} \textsf{mathalfa} package},
% Michael Sharpe, CTAN, v1.143 18/11/2021.
% \bibitem{DLJ} \emph{\textsf{dotlessj}}, David Carlisle, CTAN, v0.03 09/12/1998.
-% \bibitem{KPF} \emph{\textsf{Kp-Fonts} -- The Johannes Kepler project},
-% Christophe Caignaert, CTAN, v3.34 20/09/2022.
% \bibitem{LGR} \emph{The \textsf{lgrmath} package}, Jean-François B., CTAN,
% v1.0 16/11/2022.
% \bibitem{UPGREEK} \emph{The \textsf{upgreek} package for \LaTeXe}, Walter Schmidt, CTAN,
% v2.0 12/03/2003.
+% \bibitem{MGREEK} \emph{The \textsf{mathgreeks} package}, Antoine Missier, CTAN,
+% v1.1 04/05/2024.
% \bibitem{ALPHA} \emph{The \textsf{textalpha} package}
% (partie de l'extension \textsf{greek-fontenc}), Günter Milde, CTAN, v2.1 14/06/2022.
% \bibitem{COMP} \emph{\LaTeX\ Companion}, Frank Mittelbach, Michel Goossens,
diff --git a/macros/latex/contrib/frenchmath/frenchmath.pdf b/macros/latex/contrib/frenchmath/frenchmath.pdf
index 566efe4362..070aec4914 100644
--- a/macros/latex/contrib/frenchmath/frenchmath.pdf
+++ b/macros/latex/contrib/frenchmath/frenchmath.pdf
Binary files differ
diff --git a/macros/latex/contrib/fvextra/CHANGELOG.md b/macros/latex/contrib/fvextra/CHANGELOG.md
new file mode 100644
index 0000000000..7556c74a2d
--- /dev/null
+++ b/macros/latex/contrib/fvextra/CHANGELOG.md
@@ -0,0 +1,231 @@
+# Changelog
+
+
+## v1.7.0 (2024/05/16)
+
+* Added new command `\VerbatimClearBuffer`.
+
+* `VerbatimBuffer` environments with the same buffer name now append to the
+ same buffer, regardless of the value of `globalbuffer`. Previously,
+ `globalbuffer=false` caused any pre-existing buffer to be cleared. Now,
+ `globalbuffer=false` causes anything that is appended to the buffer to be
+ removed at the end of the environment, but the entire buffer is not
+ cleared.
+
+* `\FVExtraUnexpandedReadStarOArgMArgBVArg` now checks that the final
+ argument it reads is braced (#22).
+
+* Text that immediately follows `\VerbatimInsertBuffer` is no longer indented
+ to start a new paragraph.
+
+* Updated `tcblisting` usage in docs for compatibility with the latest
+ `tcolorbox`.
+
+
+## v1.6.1 (2023/11/28)
+
+* Fixed bug from v1.6 that caused a space following a comma to be lost (#21).
+
+
+## v1.6 (2023/11/19)
+
+* Added new environment `VerbatimWrite`. This is similar to `fancyvrb`'s
+ `VerbatimOut`, except that it allows for writing to a file multiple times
+ and guarantees truly verbatim output via `\detokenize`.
+
+* Added new environment `VerbatimBuffer`. This stores the contents of an
+ environment verbatim in a "buffer," a sequence of numbered macros each of
+ which contains one line of the environment. The "buffered" lines can then
+ be looped over for further processing or later use.
+
+* Added new command `\VerbatimInsertBuffer`. This inserts an existing buffer
+ created by `VerbatimBuffer` as a `Verbatim` environment.
+
+* Redefined visible space `\FancyVerbSpace` so that it now has the correct
+ width. It had previously been redefined as `\textvisiblespace`, but that
+ was slightly too narrrow.
+
+* Added option `spacebreak`. This determines the line break that is inserted
+ around spaces when `showspaces=true` or `breakcollapsespaces=false`, by
+ defining the new macro `\FancyVerbSpaceBreak`.
+
+* `breakbefore`, `breakafter`, and `breakanywhere` now produce plain breaks
+ around spaces when `showspaces=true`, instead of breaks with a break symbol
+ at the end of wrapped lines. `\FancyVerbBreakAnywhereBreak`,
+ `\FancyVerbBreakBeforeBreak`, and `\FancyVerbBreakAfterBreak` are no longer
+ inserted next to spaces. Instead, `\FancyVerbSpaceBreak` is inserted or
+ (depending on options) `\FV@Space` is defined to include
+ `\FancyVerbSpaceBreak`.
+
+* Added option `breakcollapsespaces`. When `true` (default), a line break
+ within a run of regular spaces (`showspaces=false`) replaces all spaces
+ with a single break, and the wrapped line after the break starts with a
+ non-space character. When `false`, a line break within a run of regular
+ spaces preserves all spaces, and the wrapped line after the break may start
+ with one or more spaces. This causes regular spaces to behave exactly like
+ the visible spaces produced with `showspaces`; both give identical line
+ breaks, with the only difference being the appearance of spaces.
+
+* `breaklines` now automatically enables breaks after space characters when
+ `showspaces=true`.
+
+* Reimplemented definition of `\FV@Space` to work with new space options.
+
+* Added documentation about how reimplemented commands handle the `codes`
+ option differently compared to `fancyvrb` (#17).
+
+* Starred commands such as `\Verb*` now use both visible spaces and visible
+ tabs instead of just visible spaces. This is more similar to the current
+ behavior of `\verb*`, except that `\verb*` converts tabs into visible
+ spaces (#19).
+
+* The `mathescape` option now resets the ampersand `&` catcode (#18).
+
+
+## v1.5 (2022/11/30)
+
+* Added `\FancyVerbFormatInline` for customizing the formatting of inline
+ verbatim, such as `\Verb`. This parallels `\FancyVerbFormatLine` and
+ `\FancyVerbFormatText`.
+
+* Added line breaking option `breaknonspaceingroup`. When `commandchars` is
+ used to allow macros within verbatim, this inserts breaks within groups
+ `{...}`.
+
+* Added `\FVExtraUnexpandedReadStarOArgMArgBVArg` to support reimplementation
+ of `\mintinline` for `minted`.
+
+* Added `VerbEnv` environment, which is an environment variant of `\Verb`.
+ This supports reimplementation of `\mintinline` for `minted`.
+
+* `breakbefore` and `breakafter` now support the escaped comma `\,` (#15).
+
+* Fixed unintended line breaks after hyphens under LuaTeX (#14).
+
+* Added documentation on Pandoc compatibility (#11).
+
+* Replaced `breakbeforegroup` with `breakbeforeinrun`, and replaced
+ `breakaftergroup` with `breakafterinrun`. With the introduction of
+ `breaknonspaceingroup`, "`group`" is now reserved for referring to TeX
+ groups `{...}`.
+
+* Removed dependency on `ifthen` package.
+
+* `breakautoindent` now works correctly with Pygments output that treats
+ leading whitespace as a separate token or as part of a token.
+
+
+## v1.4 (2019/02/04)
+
+* Reimplemented `\Verb`. It now works as expected inside other commands
+ (with a few limitations), including in movable arguments, and is compatible
+ with `hyperref` for things like PDF bookmarks. It now supports
+ `breaklines` and relevant line-breaking options.
+
+* Reimplemented `\SaveVerb` and `\UseVerb` to be equivalent to the new
+ `\Verb`. The new option `retokenize` allows saved verbatim material to be
+ retokenized under new `commandchars` and `codes` when it is inserted with
+ `\UseVerb`.
+
+* New command `\EscVerb` works like the reimplemented `\Verb`, except that
+ special characters can be escaped with a backslash. It works inside other
+ commands without any limitations, including in movable arguments, and is
+ compatible with `hyperref` for things like PDF bookmarks.
+
+* Added `extra` option for switching between the reimplemented `\Verb`,
+ `\SaveVerb`, `\UseVerb` and the original `fancyvrb` definitions.
+ Reimplemented versions are used by default. This option will apply to any
+ future reimplemented commands and environments.
+
+* New command `\fvinlineset` only applies options to commands related to
+ typesetting verbatim inline, like `\Verb`, `\SaveVerb`, `\UseVerb`. It
+ only works with commands that are defined or reimplemented by `fvextra`.
+ It overrides options from `\fvset`.
+
+* Patched `fancyvrb` so that `\Verb` (either reimplemented version or
+ original) can use characters like `%` for delimiters when used outside any
+ commands.
+
+* `obeytabs` now works with the `calc` package's redefined `\setcounter`.
+ Since `minted` loads `calc`, this also fixes `minted` compatibility
+ (`minted` #221).
+
+* Added new option `fontencoding` (`minted` #208).
+
+* `highlightlines` now works correctly with `frame` (#7).
+
+
+## v1.3.1 (2017/07/08)
+
+* `beameroverlays` now works with `VerbatimOut`.
+
+
+## v1.3 (2017/07/08)
+
+* Added `beameroverlays` option, which enables `beamer` overlays using the
+ `<` and `>` characters.
+
+* Added options `breakindentnchars`, `breaksymbolsepleftnchars` (alias
+ `breaksymbolsepnchars`), `breaksymbolseprightnchars`,
+ `breaksymbolindentleftnchars` (alias `breaksymbolindentnchars`), and
+ `breaksymbolindentrightnchars`. These are identical to the pre-existing
+ options without the `nchars` suffix, except that they allow indentation to
+ be specified as an integer number of characters rather than as a dimension.
+ As a result of these new options, `\settowidth` is no longer used in the
+ preamble, resolving some font incompatibilities (#4).
+
+* Clarified in the docs that `breaksymbolsepright` is a *minimum*, rather
+ than exact, distance.
+
+
+## v1.2.1 (2016/09/02)
+
+* The package is now compatible with classes and packages that redefine
+ `\raggedright`.
+
+* Fixed a bug that introduced extra space in inline contexts such as
+ `\mintinline` when `breaklines=true` (#3).
+
+
+
+## v1.2 (2016/07/20)
+
+* Added support for line breaking when working with Pygments for syntax
+ highlighting.
+
+* The default `highlightcolor` is now defined with `rgb` for compatibility
+ with the `color` package. Fixed a bug in the conditional color definition
+ when `color` and `xcolor` are not loaded before `fvextra`.
+
+
+
+## v1.1 (2016/07/14)
+
+* The options `rulecolor` and `fillcolor` now accept color names directly;
+ using `\color{<color_name>}` is no longer necessary, though it still works.
+
+* Added `tabcolor` and `spacecolor` options for use with `showtabs` and
+ `showspaces`.
+
+* Added `highlightlines` option that takes a line number or range of line
+ numbers and highlights the corresponding lines. Added `highlightcolor`
+ option that controls hightlighting color.
+
+* `obeytabs` no longer causes lines to vanish when tabs are inside macro
+ arguments. Tabs and spaces inside a macro argument but otherwise at the
+ beginning of a line are expanded correctly. Tabs inside a macro argument
+ that are preceded by non-whitespace characters (not spaces or tabs) are
+ expanded based on the starting position of the run of whitespace in which
+ they occur.
+
+* The line breaking options `breakanywhere`, `breakbefore`, and `breakafter`
+ now work with multi-byte UTF-8 code points under pdfTeX with `inputenc`.
+ They were already fully functional under XeTeX and LuaTeX.
+
+* Added `curlyquotes` option, which essentially disables the `uquote` package.
+
+
+
+## v1.0 (2016/06/28)
+
+* Initial release.
diff --git a/macros/latex/contrib/fvextra/fvextra.dtx b/macros/latex/contrib/fvextra/fvextra.dtx
index ca5877ee0f..e4182b6f88 100644
--- a/macros/latex/contrib/fvextra/fvextra.dtx
+++ b/macros/latex/contrib/fvextra/fvextra.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 2016-2023 by Geoffrey M. Poore <gpoore@gmail.com>
+% Copyright (C) 2016-2024 by Geoffrey M. Poore <gpoore@gmail.com>
% ---------------------------------------------------------------------------
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
@@ -26,7 +26,7 @@
%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<package>\ProvidesPackage{fvextra}
%<*package>
- [2023/11/28 v1.6.1 fvextra - extensions and patches for fancyvrb]
+ [2024/05/16 v1.7.0 fvextra - extensions and patches for fancyvrb]
%</package>
%
%<*driver>
@@ -66,23 +66,7 @@
\usepackage{tcolorbox}
\tcbuselibrary{listings}
-% strip leading percent symbols
-\def\tcbverbatimwrite#1{%
- \@bsphack
- \tcb@set@verbatim@finish%
- \tcb@allocate@tcb@out%
- \immediate\openout\tcb@out #1
- \tcb@verbatim@begin@hook%
- \let\do\@makeother\dospecials
- \tcb@verbatim@change@percent\catcode`\^^M\active \catcode`\^^I=12
- \def\verbatim@processline{%
- \immediate\write\tcb@out
- {\expandafter\@gobble\the\verbatim@line}}%
- \verbatim@start}%
-
-% fix redefinition by tcolorbox
-\def\verbatim@processline{%
- \expandafter\check@percent\the\verbatim@line\par}
+\tcbset{verbatim ignore percent}
\usepackage{hyperref}
@@ -223,22 +207,6 @@
\edef\hashchar{\string#}
-\newcommand{\changestext}{}
-\NewEnviron{changelog}[2]{%
- \g@addto@macro\changestext{\item[#1] (#2) \begin{itemize}}%
- \expandafter\g@addto@macro\expandafter\changestext\expandafter{\BODY}%
- \g@addto@macro\changestext{\end{itemize}}%
-}
-\newcommand{\PrintChangelog}{%
- %\addcontentsline{toc}{section}{Changelog}
- %\section*{Changelog}%
- \section{Changelog}%
- \label{sec:changelog}
- \begin{description}%
- \changestext
- \end{description}%
-}
-
%\EnableCrossrefs
%\CodelineIndex
%\RecordChanges
@@ -253,89 +221,6 @@
% \fi
%
%
-% \begin{changelog}{v1.6.1}{2023/11/28}
-% \item Fixed bug from v1.6 that caused a space following a comma to be lost (\#21).
-% \end{changelog}
-%
-% \begin{changelog}{v1.6}{2023/11/19}
-% \item Added new environment \Verb{VerbatimWrite}. This is similar to \Verb{fancyvrb}'s \Verb{VerbatimOut}, except that it allows for writing to a file multiple times and guarantees truly verbatim output via \Verb{\detokenize}.
-% \item Added new environment \Verb{VerbatimBuffer}. This stores the contents of an environment verbatim in a ``buffer,'' a sequence of numbered macros each of which contains one line of the environment. The ``buffered'' lines can then be looped over for further processing or later use.
-% \item Added new command \Verb{\VerbatimInsertBuffer}. This inserts an existing buffer created by \Verb{VerbatimBuffer} as a \Verb{Verbatim} environment.
-% \item Redefined visible space \Verb{\FancyVerbSpace} so that it now has the correct width. It had previously been redefined as \Verb{\textvisiblespace}, but that was slightly too narrrow.
-% \item Added option \Verb{spacebreak}. This determines the line break that is inserted around spaces when \Verb{showspaces=true} or \Verb{breakcollapsespaces=false}, by defining the new macro \Verb{\FancyVerbSpaceBreak}.
-% \item \Verb{breakbefore}, \Verb{breakafter}, and \Verb{breakanywhere} now produce plain breaks around spaces when \Verb{showspaces=true}, instead of breaks with a break symbol at the end of wrapped lines. \Verb{\FancyVerbBreakAnywhereBreak}, \Verb{\FancyVerbBreakBeforeBreak}, and \Verb{\FancyVerbBreakAfterBreak} are no longer inserted next to spaces. Instead, \Verb{\FancyVerbSpaceBreak} is inserted or (depending on options) \Verb{\FV@Space} is defined to include \Verb{\FancyVerbSpaceBreak}.
-% \item Added option \Verb{breakcollapsespaces}. When \Verb{true} (default), a line break within a run of regular spaces (\Verb{showspaces=false}) replaces all spaces with a single break, and the wrapped line after the break starts with a non-space character. When \Verb{false}, a line break within a run of regular spaces preserves all spaces, and the wrapped line after the break may start with one or more spaces. This causes regular spaces to behave exactly like the visible spaces produced with \Verb{showspaces}; both give identical line breaks, with the only difference being the appearance of spaces.
-% \item \Verb{breaklines} now automatically enables breaks after space characters when \Verb{showspaces=true}.
-% \item Reimplemented definition of \Verb{\FV@Space} to work with new space options.
-% \item Added documentation about how reimplemented commands handle the \Verb{codes} option differently compared to \fancyvrb\ (\#17).
-% \item Starred commands such as \Verb{\Verb*} now use both visible spaces and visible tabs instead of just visible spaces. This is more similar to the current behavior of \Verb{\verb*}, except that \Verb{\verb*} converts tabs into visible spaces (\#19).
-% \item The \Verb{mathescape} option now resets the ampersand \Verb{&} catcode (\#18).
-% \end{changelog}
-%
-%
-% \begin{changelog}{v1.5}{2022/11/30}
-% \item Added \cmd{\FancyVerbFormatInline} for customizing the formatting of inline verbatim, such as \cmd{\Verb}. This parallels \cmd{\FancyVerbFormatLine} and \cmd{\FancyVerbFormatText}.
-% \item Added line breaking option \Verb{breaknonspaceingroup}. When \cmd{commandchars} is used to allow macros within verbatim, this inserts breaks within groups \Verb{{...}}.
-% \item Added \cmd{\FVExtraUnexpandedReadStarOArgMArgBVArg} to support reimplementation of \cmd{\mintinline} for \pkg{minted}.
-% \item Added \cmd{VerbEnv} environment, which is an environment variant of \cmd{\Verb}. This supports reimplementation of \cmd{\mintinline} for \pkg{minted}.
-% \item \cmd{breakbefore} and \cmd{breakafter} now support the escaped comma \cmd{\,} (\#15).
-% \item Fixed unintended line breaks after hyphens under LuaTeX (\#14).
-% \item Added documentation on Pandoc compatibility (\#11).
-% \item Replaced \Verb{breakbeforegroup} with \Verb{breakbeforeinrun}, and replaced \Verb{breakaftergroup} with \Verb{breakafterinrun}. With the introduction of \Verb{breaknonspaceingroup}, ``\Verb{group}'' is now reserved for referring to TeX groups \Verb{{...}}.
-% \item Removed dependency on \Verb{ifthen} package.
-% \item \Verb{breakautoindent} now works correctly with Pygments output that treats leading whitespace as a separate token or as part of a token.
-% \end{changelog}
-%
-% \begin{changelog}{v1.4}{2019/02/04}
-% \item Reimplemented \texttt{\string\Verb}. It now works as expected inside other commands (with a few limitations), including in movable arguments, and is compatible with \texttt{hyperref} for things like PDF bookmarks. It now supports \texttt{breaklines} and relevant line-breaking options.
-% \item Reimplemented \texttt{\string\SaveVerb} and \texttt{\string\UseVerb} to be equivalent to the new \texttt{\string\Verb}. The new option \texttt{retokenize} allows saved verbatim material to be retokenized under new \texttt{commandchars} and \texttt{codes} when it is inserted with \texttt{\string\UseVerb}.
-% \item New command \texttt{\string\EscVerb} works like the reimplemented \texttt{\string\Verb}, except that special characters can be escaped with a backslash. It works inside other commands without any limitations, including in movable arguments, and is compatible with \texttt{hyperref} for things like PDF bookmarks.
-% \item Added \texttt{extra} option for switching between the reimplemented \texttt{\string\Verb}, \texttt{\string\SaveVerb}, \texttt{\string\UseVerb} and the original \texttt{fancyvrb} definitions. Reimplemented versions are used by default. This option will apply to any future reimplemented commands and environments.
-% \item New command \texttt{\string\fvinlineset} only applies options to commands related to typesetting verbatim inline, like \texttt{\string\Verb}, \texttt{\string\SaveVerb}, \texttt{\string\UseVerb}. It only works with commands that are defined or reimplemented by \texttt{fvextra}. It overrides options from \texttt{\string\fvset}.
-% \item Patched \texttt{fancyvrb} so that \texttt{\string\Verb} (either reimplemented version or original) can use characters like \texttt{\%} for delimiters when used outside any commands.
-% \item \texttt{obeytabs} now works with the \texttt{calc} package's redefined \texttt{\string\setcounter}. Since \texttt{minted} loads \texttt{calc}, this also fixes \texttt{minted} compatibility (\texttt{minted} \#221).
-% \item Added new option \texttt{fontencoding} (\texttt{minted} \#208).
-% \item \texttt{highlightlines} now works correctly with \texttt{frame} (\#7).
-% \end{changelog}
-%
-% \begin{changelog}{v1.3.1}{2017/07/08}
-% \item \texttt{beameroverlays} now works with \texttt{VerbatimOut}.
-% \end{changelog}
-%
-% \begin{changelog}{v1.3}{2017/07/08}
-% \item Added \texttt{beameroverlays} option, which enables \texttt{beamer} overlays using the \texttt{<} and \texttt{>} characters.
-% \item Added options \texttt{breakindentnchars}, \texttt{breaksymbolsepleftnchars} (alias \texttt{breaksymbolsepnchars}), \texttt{breaksymbolseprightnchars}, \texttt{breaksymbolindentleftnchars} (alias \texttt{breaksymbolindentnchars}), and \texttt{breaksymbolindentrightnchars}. These are identical to the pre-existing options without the \texttt{nchars} suffix, except that they allow indentation to be specified as an integer number of characters rather than as a dimension. As a result of these new options, \texttt{\string\settowidth} is no longer used in the preamble, resolving some font incompatibilities (\#4).
-% \item Clarified in the docs that \texttt{breaksymbolsepright} is a \emph{minimum}, rather than exact, distance.
-% \end{changelog}
-%
-%
-% \begin{changelog}{v1.2.1}{2016/09/02}
-% \item The package is now compatible with classes and packages that redefine \texttt{\string\raggedright}.
-% \item Fixed a bug that introduced extra space in inline contexts such as \texttt{\string\mintinline} when \texttt{breaklines=true} (\#3).
-% \end{changelog}
-%
-%
-% \begin{changelog}{v1.2}{2016/07/20}
-% \item Added support for line breaking when working with Pygments for syntax highlighting.
-% \item The default \texttt{highlightcolor} is now defined with \texttt{rgb} for compatibility with the \texttt{color} package. Fixed a bug in the conditional color definition when \texttt{color} and \texttt{xcolor} are not loaded before \texttt{fvextra}.
-% \end{changelog}
-%
-%
-% \begin{changelog}{v1.1}{2016/07/14}
-% \item The options \texttt{rulecolor} and \texttt{fillcolor} now accept color names directly; using \texttt{\string\color\{<color\_name>\}} is no longer necessary, though it still works.
-% \item Added \texttt{tabcolor} and \texttt{spacecolor} options for use with \texttt{showtabs} and \texttt{showspaces}.
-% \item Added \texttt{highlightlines} option that takes a line number or range of line numbers and highlights the corresponding lines. Added \texttt{highlightcolor} option that controls hightlighting color.
-% \item \texttt{obeytabs} no longer causes lines to vanish when tabs are inside macro arguments. Tabs and spaces inside a macro argument but otherwise at the beginning of a line are expanded correctly. Tabs inside a macro argument that are preceded by non-whitespace characters (not spaces or tabs) are expanded based on the starting position of the run of whitespace in which they occur.
-% \item The line breaking options \texttt{breakanywhere}, \texttt{breakbefore}, and \texttt{breakafter} now work with multi-byte UTF-8 code points under pdfTeX with \texttt{inputenc}. They were already fully functional under XeTeX and LuaTeX.
-% \item Added \texttt{curlyquotes} option, which essentially disables the \texttt{uquote} package.
-% \end{changelog}
-%
-%
-% \begin{changelog}{v1.0}{2016/06/28}
-% \item Initial release.
-% \end{changelog}
-%
-%
% \DoNotIndex{\newcommand,\newenvironment}
% \DoNotIndex{\#,\$,\%,\&,\@,\\,\{,\},\^,\_,\~,\ }
% \DoNotIndex{\@ne}
@@ -918,11 +803,11 @@
% Shortcut for setting |bufferlengthname| and |bufferlinename| simultaneously, using the same root name. This sets |bufferlengthname| to |<buffername>length| and |bufferlinename| to |<buffername>line|.
%
% \item[globalbuffer (bool) (false)]
-% This determines whether buffer line macros are defined globally, that is, whether they are accessible after the end of the |VerbatimBuffer| environment. It does not affect any |afterbuffer| macro, since that is invoked inside the environment. |globalbuffer| also determines whether the buffer length counter contains the buffer length or is reset to zero after the end of the |VerbatimBuffer| environment.
+% This determines whether buffer line macros are defined globally, that is, whether they are accessible after the end of the |VerbatimBuffer| environment. If the line macros are defined globally, then the buffer length counter is also increased appropriately outside the environment. |globalbuffer| does not affect any |afterbuffer| macro, since that is invoked inside the environment.
%
% When buffered lines are used immediately, consider using |afterbuffer| instead of |globalbuffer|. When buffered lines must be used later in a document, consider using |globalbuffer| with custom (and perhaps unique) |bufferlinename| and |bufferlengthname|.
%
-% When |globalbuffer=false|, at the end of the environment all buffer line macros based on the current |bufferlinename| are ``deleted'' (|\let| to an undefined macro), and the buffer length counter from |bufferlengthname| is set to zero. This means that a |VerbatimBuffer| environment with |globalbuffer=false| will clear the buffer created by any previous |VerbatimBuffer| that had |globalbuffer=true| and shared the same |bufferlinename|.
+% When |globalbuffer=true|, |VerbatimBuffer| environments with the same buffer name will append to a single buffer, so that it ultimately contains the concatenated contents of all environments. A |VerbatimBuffer| environment with |globalbuffer=false| will append to the buffer created by any previous |VerbatimBuffer| that had |globalbuffer=true| and shared the same buffer name. Any |afterbuffer| macro will have access to a buffer containing the concatenated data. At the very end of the environment with |globalbuffer=false|, after any |afterbuffer|, this appended content will be removed. All buffer line macros (from |bufferlinename|) that were created by that environment are ``deleted'' (|\let| to an undefined macro), and the buffer length counter (from |bufferlengthname|) is reduced proportionally.
% \end{optionlist}
%
%
@@ -936,6 +821,12 @@
% |\VerbatimInsertBuffer| is not implemented using the typical \fancyvrb\ command and environment implementation styles, so it is not compatible with |\RecustomVerbatimCommand| or |\RecustomVerbatimEnvironment|.
%
%
+% \subsection{\cmd{\VerbatimClearBuffer}}
+% \DescribeMacro{\VerbatimClearBuffer\oarg{options}}
+%
+% Clear an existing buffer created with \cmd{VerbatimBuffer}. |\global\let| all buffer line macros to an undefined macro and set the buffer length counter to zero.
+%
+%
%
%
% \section{Line breaking}
@@ -1503,8 +1394,6 @@
%
%
%
-% \PrintChangelog
-%
% \StopEventually{\PrintIndex}
%
% \section{Implementation}
@@ -2219,12 +2108,16 @@
% \begin{macrocode}
\def\FVExtraUnexpandedReadStarOArgMArgBVArg#1#{%
\FV@UnexpandedReadStarOArgMArgBVArg@i{#1}}
-\def\FV@UnexpandedReadStarOArgMArgBVArg@i#1#2#3{%
- \FVExtraAlwaysUnexpanded{\FVExtraUnexpandedReadStarOArgMArgBVArg#1{#2}{#3}}}
+\def\FV@UnexpandedReadStarOArgMArgBVArg@i#1#2{%
+ \FV@UnexpandedReadStarOArgMArgBVArg@ii{#1}{#2}}
+\def\FV@UnexpandedReadStarOArgMArgBVArg@ii#1#2#3#{%
+ \FV@UnexpandedReadStarOArgMArgBVArg@iii{#1}{#2}{#3}}
+\def\FV@UnexpandedReadStarOArgMArgBVArg@iii#1#2#3#4{%
+ \FVExtraAlwaysUnexpanded{\FVExtraUnexpandedReadStarOArgMArgBVArg#1{#2}#3{#4}}}
\FVExtrapdfstringdefDisableCommands{%
\makeatletter
- \def\FV@UnexpandedReadStarOArgMArgBVArg@i#1#2#3{%
- \FVExtraPDFStringVerbatimDetokenize{#3}}%
+ \def\FV@UnexpandedReadStarOArgMArgBVArg@iii#1#2#3#4{%
+ \FVExtraPDFStringVerbatimDetokenize{#4}}%
\makeatother}
% \end{macrocode}
% \end{macro}
@@ -4038,7 +3931,7 @@
% \begin{macro}{VerbatimBuffer}
% The environment implementation follows standard \fancyvrb\ environment style.
%
-% A special buffer counter is used to track line numbers while avoiding incrementing the regular counter that is used for typeset code. Some macros do nothing with the default |bufferer|, but are needed to enable \fancyvrb\ options when a custom |bufferer| is used in conjuction with optional environment arguments. These include |\FancyVerbDefineActive| and |\FancyVerbFormatCom|. Since counters are global, the location of |\setcounter| at the end of the environment relative to |\begingroup...\endgroup| is not important.
+% A special buffer counter is used to track line numbers while avoiding incrementing the regular counter that is used for typeset code. Some macros do nothing with the default |bufferer|, but are needed to enable \fancyvrb\ options when a custom |bufferer| is used in conjuction with optional environment arguments. These include |\FancyVerbDefineActive| and |\FancyVerbFormatCom|. Since counters are global, the exact location of the |\setcounter| commands at the end of the environment relative to |\begingroup...\endgroup| is not important.
% \begin{macrocode}
\newcounter{FancyVerbBufferLine}
\newcounter{FV@oldbufferlength}
@@ -4054,17 +3947,19 @@
\def\FVB@VerbatimBuffer{%
\@bsphack
\begingroup
- \setcounter{FancyVerbBufferLine}{0}%
- \let\c@FancyVerbLine\c@FancyVerbBufferLine
- \setcounter{FancyVerbBufferIndex}{0}%
- \setcounter{FV@oldbufferlength}{\expandafter\value\expandafter{\FV@bufferlengthname}}%
- \expandafter\setcounter\expandafter{\FV@bufferlengthname}{0}%
\FV@UseKeyValues
+ \setcounter{FancyVerbBufferLine}%
+ {\expandafter\value\expandafter{\FV@bufferlengthname}}%
+ \let\c@FancyVerbLine\c@FancyVerbBufferLine
+ \setcounter{FancyVerbBufferIndex}%
+ {\expandafter\value\expandafter{\FV@bufferlengthname}}%
\ifbool{FV@globalbuffer}%
{\global\booltrue{FV@globalbuffer@tmp}}%
- {\global\boolfalse{FV@globalbuffer@tmp}}%
- \global\let\FV@bufferlengthname@tmp\FV@bufferlengthname
- \global\let\FancyVerbBufferLineName@tmp\FancyVerbBufferLineName
+ {\global\boolfalse{FV@globalbuffer@tmp}%
+ \setcounter{FV@oldbufferlength}%
+ {\expandafter\value\expandafter{\FV@bufferlengthname}}%
+ \global\let\FV@bufferlengthname@tmp\FV@bufferlengthname
+ \global\let\FancyVerbBufferLineName@tmp\FancyVerbBufferLineName}%
\global\let\FV@afterbuffer@tmp\FV@afterbuffer
\FV@DefineWhiteSpace
\def\FV@ProcessLine{\stepcounter{FancyVerbBufferIndex}\FV@Bufferer}%
@@ -4074,28 +3969,27 @@
\FancyVerbFormatCom
\FV@Scan}
\def\FVE@VerbatimBuffer{%
- \endgroup
- \@esphack
- \expandafter\setcounter\expandafter{\FV@bufferlengthname@tmp}%
+ \expandafter\setcounter\expandafter{\FV@bufferlengthname}%
{\value{FancyVerbBufferIndex}}%
\setcounter{FancyVerbBufferIndex}{0}%
+ \endgroup
+ \@esphack
\begingroup
\FV@afterbuffer@tmp
+ \global\let\FV@afterbuffer@tmp\relax
\endgroup
\ifbool{FV@globalbuffer@tmp}%
{}%
- {\ifnum\value{FV@oldbufferlength}>%
- \expandafter\value\expandafter{\FV@bufferlengthname@tmp}\relax
- \expandafter\setcounter\expandafter{\FV@bufferlengthname@tmp}%
- {\value{FV@oldbufferlength}}%
- \fi
- \loop\unless\ifnum\expandafter\value\expandafter{\FV@bufferlengthname@tmp}=0\relax
+ {\loop\unless\ifnum\expandafter\value\expandafter{\FV@bufferlengthname@tmp}=
+ \value{FV@oldbufferlength}\relax
\expandafter\global\expandafter\let\csname
\FancyVerbBufferLineName@tmp
\expandafter\arabic\expandafter{\FV@bufferlengthname@tmp}%
\endcsname\FV@Undefined
\expandafter\addtocounter\expandafter{\FV@bufferlengthname@tmp}{-1}%
- \repeat}}
+ \repeat
+ \global\let\FV@bufferlengthname@tmp\relax
+ \global\let\FancyVerbBufferLineName@tmp\relax}}
\def\endVerbatimBuffer{\FVE@VerbatimBuffer}
% \end{macrocode}
% \end{macro}
@@ -4129,7 +4023,7 @@
\global\let\FV@EnvironName\relax
\let\next\relax
\else
- \ifcsname \FancyVerbBufferLineName\arabic{FancyVerbBufferIndex}\endcsname
+ \ifcsname\FancyVerbBufferLineName\arabic{FancyVerbBufferIndex}\endcsname
\expandafter\let\expandafter\FV@Line@Buffer
\csname\FancyVerbBufferLineName\arabic{FancyVerbBufferIndex}\endcsname
\expandafter\VerbatimInsertBuffer@def@FV@Line\expandafter{\FV@Line@Buffer}%
@@ -4148,6 +4042,30 @@
\FVB@Verbatim
\FVE@Verbatim
\setcounter{FancyVerbBufferIndex}{0}%
+ \endgroup
+ \@doendpe}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection{\cmd{\VerbatimClearBuffer}}
+% \begin{macro}{\VerbatimClearBuffer}
+% Clear an existing buffer.
+% \begin{macrocode}
+\newcommand{\VerbatimClearBuffer}[1][]{%
+ \begingroup
+ \def\FV@KeyValues{#1}%
+ \FV@UseKeyValues
+ \setcounter{FancyVerbBufferIndex}%
+ {\expandafter\value\expandafter{\FV@bufferlengthname}}%
+ \expandafter\setcounter\expandafter{\FV@bufferlengthname}{0}%
+ \loop\unless\ifnum\value{FancyVerbBufferIndex}<1\relax
+ \expandafter\global\expandafter\let
+ \csname\FancyVerbBufferLineName\arabic{FancyVerbBufferIndex}\endcsname
+ \FV@Undefined
+ \addtocounter{FancyVerbBufferIndex}{-1}%
+ \repeat
+ \setcounter{FancyVerbBufferIndex}{0}%
\endgroup}
% \end{macrocode}
% \end{macro}
diff --git a/macros/latex/contrib/fvextra/fvextra.ins b/macros/latex/contrib/fvextra/fvextra.ins
index f36b3c4715..17b718fa06 100644
--- a/macros/latex/contrib/fvextra/fvextra.ins
+++ b/macros/latex/contrib/fvextra/fvextra.ins
@@ -1,4 +1,4 @@
-%% Copyright (C) 2016-2022 by Geoffrey M. Poore <gpoore@gmail.com>
+%% Copyright (C) 2016-2024 by Geoffrey M. Poore <gpoore@gmail.com>
%% --------------------------------------------------------------------------
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3
@@ -26,7 +26,7 @@
This is a generated file.
-Copyright (C) 2016-2022 by Geoffrey M. Poore <gpoore@gmail.com>
+Copyright (C) 2016-2024 by Geoffrey M. Poore <gpoore@gmail.com>
--------------------------------------------------------------------------
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/fvextra/fvextra.pdf b/macros/latex/contrib/fvextra/fvextra.pdf
index 9e1182bd63..b38e213561 100644
--- a/macros/latex/contrib/fvextra/fvextra.pdf
+++ b/macros/latex/contrib/fvextra/fvextra.pdf
Binary files differ
diff --git a/macros/latex/contrib/huaz/README b/macros/latex/contrib/huaz/README
index b37490a04a..4e8306629f 100644
--- a/macros/latex/contrib/huaz/README
+++ b/macros/latex/contrib/huaz/README
@@ -14,7 +14,7 @@ version 2005/12/01 or later.
This work has the LPPL maintenance status `maintained'.
-The Current Maintainer of this work is Tibor Tomacs.
+The Current Maintainer of this work is Tibor Tómács.
This work consists of the files
diff --git a/macros/latex/contrib/huaz/huaz.pdf b/macros/latex/contrib/huaz/huaz.pdf
index fe31b1cfad..1de65fbd30 100644
--- a/macros/latex/contrib/huaz/huaz.pdf
+++ b/macros/latex/contrib/huaz/huaz.pdf
Binary files differ
diff --git a/macros/latex/contrib/huaz/huaz.sty b/macros/latex/contrib/huaz/huaz.sty
index 1a9435bfff..19ae1dacba 100644
--- a/macros/latex/contrib/huaz/huaz.sty
+++ b/macros/latex/contrib/huaz/huaz.sty
@@ -3,7 +3,7 @@
%%
%% Automatic Hungarian definite articles
%%
-%% Copyright 2022-2024 by Tibor Tomacs
+%% Copyright 2022-2024 by Tibor Tómács
%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3
@@ -15,10 +15,10 @@
%%
%% This work has the LPPL maintenance status `maintained'.
%%
-%% The Current Maintainer of this work is Tibor Tomacs.
+%% The Current Maintainer of this work is Tibor Tómács.
%%
\NeedsTeXFormat{LaTeX2e}[2021/10/10]
-\ProvidesPackage{huaz}[2024/04/20 v1.2 Automatic Hungarian definite articles]
+\ProvidesPackage{huaz}[2024/05/05 v2.1 Automatic Hungarian definite articles]
\RequirePackage{xstring,refcount,iftex}
@@ -33,36 +33,62 @@
%=================================================
%
% utf8:
-% \huaz@list@A = ö,ü,ó,ő,ú,é,á,ű,í,Ö,Ü,Ó,Ő,Ú,É,Á,Ű,Í,Ä,À,Ã,Â,Ă,Å,Ą,Æ,ä,à,ã,â,ă,å,ą,æ,Ë,È,Ê,Ě,Ę,ë,è,ê,ě,ę,Ï,Í,Ì,Î,ï,ì,î,Ò,Õ,Ô,Ø,OE,ò,õ,ô,ø,Ù,Û,Ů,ù,û,ů
-% \huaz@list@X = Ĺ,Ł,ļ,ĺ,ł,Ņ,Ń,Ñ,Ň,Ŋ,ń,ñ,ň,ŋ,Ŗ,Ŕ,Ř,ŗ,ŕ,ř,Ş,Ș,Ś,Š,ş,ș,ś,š,Ÿ,Ý,ÿ,ý
+% \huaz@list@A = ö,ü,ó,ő,ú,é,á,ű,í,Ö,Ü,Ó,Ő,Ú,É,Á,Ű,Í,Ä,À,Ã,Â,Ă,Å,Ą,Æ,ä,à,ã,â,ă,å,ą,æ,
+% Ë,È,Ê,Ě,Ę,ë,è,ê,ě,ę,Ï,Í,Ì,Î,ï,ì,î,Ò,Õ,Ô,Ø,OE,ò,õ,ô,ø,Ù,Û,Ů,ù,û,ů
+% \huaz@list@S = Ĺ,Ł,ļ,ĺ,ł,Ņ,Ń,Ñ,Ň,Ŋ,ń,ñ,ň,ŋ,Ŗ,Ŕ,Ř,ŗ,ŕ,ř,Ş,Ș,Ś,Š,ş,ș,ś,š,Ÿ,Ý,ÿ,ý
%
% latin2:
% \huaz@list@A = Ą,ą,Á,Â,Ă,Ä,É,Ę,Ë,Ě,Í,Î,Ó,Ô,Ő,Ö,Ů,Ú,Ű,Ü,á,â,ă,ä,é,ę,ë,ě,í
-% \huaz@list@X = Ľ,Ś,Š,Ş,ś,š,ş,Ŕ,Ĺ,Ń,Ň,Ř,Ý,ĺ
+% \huaz@list@S = Ľ,Ś,Š,Ş,ś,š,ş,Ŕ,Ĺ,Ń,Ň,Ř,Ý,ĺ
%
%=================================================
-\ifpdftex
+\ifpdftex% latex, pdflatex
\def\huaz@utfviii{utf8}
\ifx\inputencodingname\huaz@utfviii
- \def\huaz@list@A{^^c3^^b6,^^c3^^bc,^^c3^^b3,^^c5^^91,^^c3^^ba,^^c3^^a9,^^c3^^a1,^^c5^^b1,^^c3^^ad,^^c3^^96,^^c3^^9c,^^c3^^93,^^c5^^90,^^c3^^9a,^^c3^^89,^^c3^^81,^^c5^^b0,^^c3^^8d,^^c3^^84,^^c3^^80,^^c3^^83,^^c3^^82,^^c4^^82,^^c3^^85,^^c4^^84,^^c3^^86,^^c3^^a4,^^c3^^a0,^^c3^^a3,^^c3^^a2,^^c4^^83,^^c3^^a5,^^c4^^85,^^c3^^a6,^^c3^^8b,^^c3^^88,^^c3^^8a,^^c4^^9a,^^c4^^98,^^c3^^ab,^^c3^^a8,^^c3^^aa,^^c4^^9b,^^c4^^99,^^c3^^8f,^^c3^^8d,^^c3^^8c,^^c3^^8e,^^c3^^af,^^c3^^ac,^^c3^^ae,^^c3^^92,^^c3^^95,^^c3^^94,^^c3^^98,^^4f^^45,^^c3^^b2,^^c3^^b5,^^c3^^b4,^^c3^^b8,^^c3^^99,^^c3^^9b,^^c5^^ae,^^c3^^b9,^^c3^^bb,^^c5^^af}
- \def\huaz@list@X{^^c4^^b9,^^c5^^81,^^c4^^bc,^^c4^^ba,^^c5^^82,^^c5^^85,^^c5^^83,^^c3^^91,^^c5^^87,^^c5^^8a,^^c5^^84,^^c3^^b1,^^c5^^88,^^c5^^8b,^^c5^^96,^^c5^^94,^^c5^^98,^^c5^^97,^^c5^^95,^^c5^^99,^^c5^^9e,^^c8^^98,^^c5^^9a,^^c5^^a0,^^c5^^9f,^^c8^^99,^^c5^^9b,^^c5^^a1,^^c5^^b8,^^c3^^9d,^^c3^^bf,^^c3^^bd}
+ \def\huaz@list@A{%
+ ^^c3^^b6,^^c3^^bc,^^c3^^b3,^^c5^^91,^^c3^^ba,^^c3^^a9,^^c3^^a1,^^c5^^b1,^^c3^^ad,%
+ ^^c3^^96,^^c3^^9c,^^c3^^93,^^c5^^90,^^c3^^9a,^^c3^^89,^^c3^^81,^^c5^^b0,^^c3^^8d,%
+ ^^c3^^84,^^c3^^80,^^c3^^83,^^c3^^82,^^c4^^82,^^c3^^85,^^c4^^84,^^c3^^86,^^c3^^a4,%
+ ^^c3^^a0,^^c3^^a3,^^c3^^a2,^^c4^^83,^^c3^^a5,^^c4^^85,^^c3^^a6,^^c3^^8b,^^c3^^88,%
+ ^^c3^^8a,^^c4^^9a,^^c4^^98,^^c3^^ab,^^c3^^a8,^^c3^^aa,^^c4^^9b,^^c4^^99,^^c3^^8f,%
+ ^^c3^^8d,^^c3^^8c,^^c3^^8e,^^c3^^af,^^c3^^ac,^^c3^^ae,^^c3^^92,^^c3^^95,^^c3^^94,%
+ ^^c3^^98,^^4f^^45,^^c3^^b2,^^c3^^b5,^^c3^^b4,^^c3^^b8,^^c3^^99,^^c3^^9b,^^c5^^ae,%
+ ^^c3^^b9,^^c3^^bb,^^c5^^af}
+ \def\huaz@list@S{%
+ ^^c4^^b9,^^c5^^81,^^c4^^bc,^^c4^^ba,^^c5^^82,^^c5^^85,^^c5^^83,^^c3^^91,^^c5^^87,%
+ ^^c5^^8a,^^c5^^84,^^c3^^b1,^^c5^^88,^^c5^^8b,^^c5^^96,^^c5^^94,^^c5^^98,^^c5^^97,%
+ ^^c5^^95,^^c5^^99,^^c5^^9e,^^c8^^98,^^c5^^9a,^^c5^^a0,^^c5^^9f,^^c8^^99,^^c5^^9b,%
+ ^^c5^^a1,^^c5^^b8,^^c3^^9d,^^c3^^bf,^^c3^^bd}
\huaz@must@oneunit@false
\fi
\def\huaz@latinii{latin2}
\ifx\inputencodingname\huaz@latinii
- \def\huaz@list@A{^^a1,^^b1,^^c1,^^c2,^^c3,^^c4,^^c9,^^ca,^^cb,^^cc,^^cd,^^ce,^^d3,^^d4,^^d5,^^d6,^^d9,^^da,^^db,^^dc,^^e1,^^e2,^^e3,^^e4,^^e5,^^e9,^^ea,^^eb,^^ec,^^ed,^^ee,^^f3,^^f4,^^f5,^^f6,^^f9,^^fa,^^fb,^^fc}
- \def\huaz@list@X{^^a3,^^a5,^^a6,^^a9,^^aa,^^b3,^^b6,^^b9,^^ba,^^c0,^^c5,^^d1,^^d2,^^d8,^^dd,^^df,^^e0,^^f1,^^f2,^^f8,^^fd}
+ \def\huaz@list@A{%
+ ^^a1,^^b1,^^c1,^^c2,^^c3,^^c4,^^c9,^^ca,^^cb,^^cc,^^cd,^^ce,^^d3,^^d4,^^d5,^^d6,%
+ ^^d9,^^da,^^db,^^dc,^^e1,^^e2,^^e3,^^e4,^^e5,^^e9,^^ea,^^eb,^^ec,^^ed,^^ee,^^f3,%
+ ^^f4,^^f5,^^f6,^^f9,^^fa,^^fb,^^fc}
+ \def\huaz@list@S{%
+ ^^a3,^^a5,^^a6,^^a9,^^aa,^^b3,^^b6,^^b9,^^ba,^^c0,^^c5,^^d1,^^d2,^^d8,^^dd,^^df,%
+ ^^e0,^^f1,^^f2,^^f8,^^fd}
\huaz@must@oneunit@true
\fi
- \ifx\inputencodingname\huaz@utfviii\else
- \ifx\inputencodingname\huaz@latinii\else
- \PackageError{huaz}{You should use utf8 or latin2 inputenc}{}
- \fi
- \fi
-\else
- \def\huaz@list@A{^^^^00f6,^^^^00fc,^^^^00f3,^^^^0151,^^^^00fa,^^^^00e9,^^^^00e1,^^^^0171,^^^^00ed,^^^^00d6,^^^^00dc,^^^^00d3,^^^^0150,^^^^00da,^^^^00c9,^^^^00c1,^^^^0170,^^^^00cd,^^^^00c4,^^^^00c0,^^^^00c3,^^^^00c2,^^^^0102,^^^^00c5,^^^^0104,^^^^00c6,^^^^00e4,^^^^00e0,^^^^00e3,^^^^00e2,^^^^0103,^^^^00e5,^^^^0105,^^^^00e6,^^^^00cb,^^^^00c8,^^^^00ca,^^^^011a,^^^^0118,^^^^00eb,^^^^00e8,^^^^00ea,^^^^011b,^^^^0119,^^^^00cf,^^^^00cd,^^^^00cc,^^^^00ce,^^^^00ef,^^^^00ec,^^^^00ee,^^^^00d2,^^^^00d5,^^^^00d4,^^^^00d8,^^^^004f,^^^^0045,^^^^00f2,^^^^00f5,^^^^00f4,^^^^00f8,^^^^00d9,^^^^00db,^^^^016e,^^^^00f9,^^^^00fb,^^^^016f}
- \def\huaz@list@X{^^^^0139,^^^^0141,^^^^013c,^^^^013a,^^^^0142,^^^^0145,^^^^0143,^^^^00d1,^^^^0147,^^^^014a,^^^^0144,^^^^00f1,^^^^0148,^^^^014b,^^^^0156,^^^^0154,^^^^0158,^^^^0157,^^^^0155,^^^^0159,^^^^015e,^^^^0218,^^^^015a,^^^^0160,^^^^015f,^^^^0219,^^^^015b,^^^^0161,^^^^0178,^^^^00dd,^^^^00ff,^^^^00fd}
+ \ifdefined\huaz@list@A\else\PackageError{huaz}{You should use utf8 or latin2 inputenc}{}\fi
+\else% xelatex lualatex
+ \def\huaz@list@A{%
+ ^^^^00f6,^^^^00fc,^^^^00f3,^^^^0151,^^^^00fa,^^^^00e9,^^^^00e1,^^^^0171,^^^^00ed,%
+ ^^^^00d6,^^^^00dc,^^^^00d3,^^^^0150,^^^^00da,^^^^00c9,^^^^00c1,^^^^0170,^^^^00cd,%
+ ^^^^00c4,^^^^00c0,^^^^00c3,^^^^00c2,^^^^0102,^^^^00c5,^^^^0104,^^^^00c6,^^^^00e4,%
+ ^^^^00e0,^^^^00e3,^^^^00e2,^^^^0103,^^^^00e5,^^^^0105,^^^^00e6,^^^^00cb,^^^^00c8,%
+ ^^^^00ca,^^^^011a,^^^^0118,^^^^00eb,^^^^00e8,^^^^00ea,^^^^011b,^^^^0119,^^^^00cf,%
+ ^^^^00cd,^^^^00cc,^^^^00ce,^^^^00ef,^^^^00ec,^^^^00ee,^^^^00d2,^^^^00d5,^^^^00d4,%
+ ^^^^00d8,^^^^004f,^^^^0045,^^^^00f2,^^^^00f5,^^^^00f4,^^^^00f8,^^^^00d9,^^^^00db,%
+ ^^^^016e,^^^^00f9,^^^^00fb,^^^^016f}
+ \def\huaz@list@S{%
+ ^^^^0139,^^^^0141,^^^^013c,^^^^013a,^^^^0142,^^^^0145,^^^^0143,^^^^00d1,^^^^0147,%
+ ^^^^014a,^^^^0144,^^^^00f1,^^^^0148,^^^^014b,^^^^0156,^^^^0154,^^^^0158,^^^^0157,%
+ ^^^^0155,^^^^0159,^^^^015e,^^^^0218,^^^^015a,^^^^0160,^^^^015f,^^^^0219,^^^^015b,%
+ ^^^^0161,^^^^0178,^^^^00dd,^^^^00ff,^^^^00fd}
\huaz@must@oneunit@true
\fi
@@ -74,15 +100,27 @@
\NewHook{huaz}
-\AddToHook{huaz}{% In \StrChar, these commands will be considered as one syntax unit.
- \let\"\relax\let\'\relax\let\H\relax\let\`\relax\let\~\relax\let\^\relax\let\v\relax\let\u\relax%
- \let\=\relax\let\k\relax\let\.\relax\let\AA\relax\let\aa\relax\let\AE\relax\let\ae\relax\let\&\relax%
- \let\#\relax\let\_\relax}
-
-\def\huaz@y@#1#{\@gobble}
-\def\huaz@deloptparam{\huaz@y@\relax}% \def\textcolor{\huaz@deloptparam} --> \textcolor[RGB]{0,255,0}{text} --> text; \textcolor{red}{text} --> text
-
-\AddToHook{huaz}{% Ignored commands
+\AddToHook{huaz}{%
+ %
+ % Accent commands are considered as one unit
+ \let\"\relax\let\'\relax\let\`\relax\let\~\relax% \def\'{} ==> \az*{\'{X}}=\az*{X}=\az*{10}=a is not correct
+ \let\^\relax\let\=\relax\let\.\relax%
+ \let\b\relax\let\B\relax\let\c\relax\let\d\relax%
+ \let\H\relax\let\k\relax\let\r\relax\let\u\relax\let\v\relax%
+ %
+ % Redefining letter commands
+ \def\AA{a}\def\aa{a}\def\AE{a}\def\ae{a}%
+ \def\IJ{a}\def\ij{a}\def\i{a}% \def\i{i} ==> \az*{\i x}=\az*{ix}=\az*{9}=a is not correct
+ \def\O{a}\def\o{a}\def\OE{a}\def\oe{a}%
+ \def\l{s}\def\NG{s}\def\ng{s}\def\SS{s}\def\ss{s}%
+ %
+ % Redefinition of punctuation commands to period
+ \def\&{.}\def\#{.}\def\%{.}\def\_{.}%
+ %
+ % Redefinition of space commands to normal space
+ \def\,{ }\def\:{ }\def\;{ }\def\enspace{ }\def\enskip{ }\def\quad{ }\def\qquad{ }%
+ %
+ % Ignore commands
\def\usefont#1#2#3#4{}%
\def\fontsize#1#2{}%
\def\fontencoding#1{}%
@@ -108,19 +146,106 @@
\def\tiny{}\def\scriptsize{}\def\footnotesize{}\def\small{}\def\normalsize{}%
\def\large{}\def\Large{}\def\LARGE{}\def\huge{}\def\Huge{}%
\def\uppercase{}\def\lowercase{}\def\MakeUppercase{}\def\MakeLowercase{}%
- \def\textcolor{\huaz@deloptparam}\def\color{\huaz@deloptparam}%
- \def\mbox{}\def\fbox{}%
+ \def\textcolor#1#{\@gobble}% \textcolor[...]{...}{text} and \textcolor{...}{text} --> text
+ \def\color#1#{\@gobble}% \color[...]{...}text and \color{...}text --> text
+ \def\href#1#{\@gobble}% \href{URL}{text} --> text
+ \def\mbox{}\def\fbox{}\def\hbox{}%
\def\makebox#1#{}% \makebox{text} and \makebox[opt]{text} --> text
\def\framebox#1#{}% \framebox{text} and \framebox[opt]{text} --> text
\def\textqq{}%
\def\enquote#1#{}% \enquote{text} and \enquote*{text} --> text
- \def\told{}}
-
-\AddToHook{huaz}{% Expandable cross-references commands
+ \def\told{}%
+ \def\num#1#{}% (siunitx package) \num[...]{1000000} --> 1000000
+ \def\negthinspace{}\def\!{}%
+ %
+ % Expandable cross-references commands
\def\ref#1#{\getrefnumber}% \ref{...} and \ref*{...} --> \getrefnumber{...}
\def\pageref#1#{\getpagerefnumber}% \pageref{...} and \pageref*{...} --> \getpagerefnumber{...}
- \def\eqref#1{\getrefnumber{#1}}%
- \def\cite{\huaz@cite}}
+ \def\eqref#1#{\getrefnumber}% \eqref{...} (amsmath) and \eqref*{...} (!!) --> \getrefnumber{...}
+ \def\refeq#1#{\getrefnumber}% \refeq{...} (mathtools) and \refeq*{...} (!!) --> \getrefnumber{...}
+ \def\cite{\huaz@cite}%
+ \def\citeauthor{\huaz@citeauthor}%
+ \def\textcite{\huaz@citeauthor}%
+ \def\citeyear{\huaz@citeyear}%
+ }
+
+%=================================================
+%
+% \huazignorecmd[option]{\command}
+% option: 0,1,...,9
+%
+% \huazignorecmd{\foo} = \AddToHook{huaz}{\def\foo{}}
+% ignored: \foo
+% for example: \huazignorecmd{\rmfamily}
+% \rmfamily text --> text
+%
+% \huazignorecmd[0]{\foo} = \AddToHook{huaz}{\def\foo#1#{}}
+% ignored: \foo, \foo*, \foo[...], \foo*[...]
+% for example: \huazignorecmd{\textrm}
+% \textrm{text} --> text
+% \huazignorecmd{\makebox}
+% \makebox[5cm]{text} --> text
+%
+% \huazignorecmd[1]{\foo} = \AddToHook{huaz}{\def\foo#1#{\@gobble}}
+% ignored: \foo{...}, \foo[...]{...}, \foo*[...]{...}
+% for example: \huazignorecmd{\textcolor}
+% \textcolor[RGB]{0,255,0}{text} --> text
+%
+% \huazignorecmd[2]{\foo} = \AddToHook{huaz}{\def\foo#1#{\huaz@gobble@ii}}
+% ignored: \foo{...}{...}, \foo[...]{...}{...}, \foo*[...]{...}{...}
+% for example: \huazignorecmd{\fontsize}
+% \fontsize{12pt}{12pt}text --> text
+%
+%=================================================
+
+\newcommand{\huaz@gobble@ii}[2]{}
+\newcommand{\huaz@gobble@iii}[3]{}
+\newcommand{\huaz@gobble@iv}[4]{}
+\newcommand{\huaz@gobble@v}[5]{}
+\newcommand{\huaz@gobble@vi}[6]{}
+\newcommand{\huaz@gobble@vii}[7]{}
+\newcommand{\huaz@gobble@viii}[8]{}
+\newcommand{\huaz@gobble@ix}[9]{}
+
+\def\huaz@check@opt#1{%
+ \def\huaz@opt{#1}%
+ \huaz@temp@if@false%
+ \@for\huaz@list:={,0,1,2,3,4,5,6,7,8,9,10}%
+ \do{\IfStrEq{\huaz@opt}{\huaz@list}{\huaz@temp@if@true}{}}%
+ \IfStrEq{\huaz@opt}{}{\def\huaz@opt{10}}{}%
+ \ifhuaz@temp@if@\else
+ \def\huaz@opt{10}%
+ \PackageWarning{huaz}{Valid options for \string\huazignorecmd: 0,1,...,9. The '[#1]' has been removed.}\fi}
+
+\NewDocumentCommand{\huazignorecmd}{>{\TrimSpaces}O{10}m}{%
+ \huaz@check@opt{#1}%
+ \ifcase\huaz@opt%
+ \AddToHook{huaz}{\def#2##1##{}}\or
+ \AddToHook{huaz}{\def#2##1##{\@gobble}}\or
+ \AddToHook{huaz}{\def#2##1##{\huaz@gobble@ii}}\or
+ \AddToHook{huaz}{\def#2##1##{\huaz@gobble@iii}}\or
+ \AddToHook{huaz}{\def#2##1##{\huaz@gobble@iv}}\or
+ \AddToHook{huaz}{\def#2##1##{\huaz@gobble@v}}\or
+ \AddToHook{huaz}{\def#2##1##{\huaz@gobble@vi}}\or
+ \AddToHook{huaz}{\def#2##1##{\huaz@gobble@vii}}\or
+ \AddToHook{huaz}{\def#2##1##{\huaz@gobble@viii}}\or
+ \AddToHook{huaz}{\def#2##1##{\huaz@gobble@ix}}\or
+ \AddToHook{huaz}{\def#2{}}\fi}
+
+%=================================================
+%
+% \huazrefcmd{\foo} = \AddToHook{huaz}{\def\foo#1#{\getrefnumber}}
+% --> \foo{...}, \foo[...]{...}, \foo*[...]{...} --> \getrefnumber{...}
+%
+% \huazpagerefcmd{\foo} = \AddToHook{huaz}{\def\foo#1#{\getpagerefnumber}}
+% --> \foo{...}, \foo[...]{...}, \foo*[...]{...} --> \getpagerefnumber{...}
+%
+% \huazdefcmd{...} = \AddToHook{huaz}{...}
+%=================================================
+
+\NewDocumentCommand{\huazrefcmd}{m}{\AddToHook{huaz}{\def#1##1##{\getrefnumber}}}
+\NewDocumentCommand{\huazpagerefcmd}{m}{\AddToHook{huaz}{\def#1##1##{\getpagerefnumber}}}
+\NewDocumentCommand{\huazdefcmd}{m}{\AddToHook{huaz}{#1}}
%=================================================
%
@@ -136,75 +261,141 @@
\UseHook{huaz}%
\huaz@must@z@false%
%
- % 1. syntax unit \AA,\aa,\AE,\ae,e,u,i,o,a,E,U,I,O,A,5
+ % 1. unit: e,u,i,o,a,E,U,I,O,A,5
+ %
\StrChar{#1}{1}[\huaz@temp]%
- \@for\huaz@list:={\AA,\aa,\AE,\ae,e,u,i,o,a,E,U,I,O,A,5}%
+ \@for\huaz@list:={e,u,i,o,a,E,U,I,O,A,5}%
\do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@must@z@true}{}}%
%
- % 1. syntax unit accent command and 2. character e,u,i,o,a,E,U,I,O,A (e.g. "\'A")
+ % 1. unit: accent command
+ % 2. unit: e,u,i,o,a,E,U,I,O,A
+ % "\'A" "\'{A}"
+ %
+ \ifhuaz@must@z@\else%
+ \huaz@temp@if@false%
+ \StrChar{#1}{1}[\huaz@temp]%
+ \@for\huaz@list:={\",\',\`,\~,\^,\=,\.,\b,\B,\c,\d,\H,\k,\r,\u,\v}%
+ \do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@temp@if@true}{}}%
+ \ifhuaz@temp@if@%
+ \StrChar{#1}{2}[\huaz@temp]%
+ \@for\huaz@list:={e,u,i,o,a,E,U,I,O,A}%
+ \do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@must@z@true}{}}%
+ \fi%
+ \fi%
+ %
+ % 1. unit: \",\',\`,\~,\^,\=,\.
+ % 2. unit: space(s)
+ % 3. unit: e,u,i,o,a,E,U,I,O,A
+ % "\' A", "\' A", "\' {A}"
+ %
\ifhuaz@must@z@\else%
\huaz@temp@if@false%
\StrChar{#1}{1}[\huaz@temp]%
- \@for\huaz@list:={\",\',\H,\`,\~,\^,\v,\u,\=,\k}%
+ \@for\huaz@list:={\",\',\`,\~,\^,\=,\.}%
\do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@temp@if@true}{}}%
\ifhuaz@temp@if@%
+ \huaz@temp@if@false%
\StrChar{#1}{2}[\huaz@temp]%
- \@for\huaz@list:={e,u,i,a,E,U,I,O,A}%
+ \IfStrEq{\huaz@temp}{ }{\huaz@temp@if@true}{}%
+ \fi%
+ \ifhuaz@temp@if@%
+ \StrChar{#1}{3}[\huaz@temp]%
+ \@for\huaz@list:={e,u,i,o,a,E,U,I,O,A}%
\do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@must@z@true}{}}%
\fi%
\fi%
%
- % 1. character ö,ü,ó,ő,ú,é,á,ű,í,Ö,Ü,Ó,Ő,Ú,É,Á,Ű,Í,...
+ % 1. unit: \huaz@list@A
+ %
\ifhuaz@must@z@\else%
- \ifhuaz@must@oneunit@\StrLeft{#1}{1}[\huaz@tempa]\else\StrLeft{#1}{2}[\huaz@tempa]\fi% in pdflatex(utf8) Ő is two syntax units; in pdflatex(latin2)/xelatex/lualatex Ő is one syntax unit
+ \ifhuaz@must@oneunit@\StrLeft{#1}{1}[\huaz@tempa]\else\StrLeft{#1}{2}[\huaz@tempa]\fi% in pdflatex(utf8) Ő is two units; in pdflatex(latin2)/xelatex/lualatex Ő is one unit
\@for\huaz@list:=\huaz@list@A%
\do{\StrLeft{\huaz@list}{2}[\huaz@tempb]%
\IfStrEq{\huaz@tempa}{\huaz@tempb}{\huaz@must@z@true}{}}%
\fi%
%
- % 1. character f,l,m,n,r,x,y,F,L,M,N,S,R,X,Y and the 2. character is not letter (e.g. "M-10")
+ % 1. unit: f,l,m,n,s,r,x,y,F,L,M,N,S,R,X,Y,\huaz@list@S(one unit)
+ % 2. unit: punctuation
+ % "M-10"
+ %
\ifhuaz@must@z@\else%
\huaz@temp@if@false%
\StrChar{#1}{2}[\huaz@temp]%
- \@for\huaz@list:={;,`,',",+,!,/,=,(,),<,>,@,.,?,:,-,*,0,1,2,3,4,5,6,7,8,9,{,},{ },{},\&,\#,\_,\unskip,\kern}% \kern, \unskip for active characters
+ \@for\huaz@list:={;,`,',",+,!,/,=,(,),<,>,@,.,?,:,-,*,0,1,2,3,4,5,6,7,8,9,{,},{ },{},\unskip,\kern}% \kern, \unskip for active characters
\do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@temp@if@true}{}}%
\ifhuaz@temp@if@%
\StrChar{#1}{1}[\huaz@temp]%
- \@for\huaz@list:={f,l,m,n,r,x,y,F,L,M,N,S,R,X,Y}%
+ \@for\huaz@list:={f,l,m,n,s,r,x,y,F,L,M,N,S,R,X,Y}%
\do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@must@z@true}{}}%
\ifhuaz@must@oneunit@%
\ifhuaz@must@z@\else%
- \@for\huaz@list:=\huaz@list@X% in pdflatex(latin2)/xelatex/lualatex Š is one syntax unit
+ \@for\huaz@list:=\huaz@list@S% in pdflatex(latin2)/xelatex/lualatex Š is one unit
\do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@must@z@true}{}}%
\fi%
\fi%
\fi%
\fi%
%
- % 1. syntax unit accent command, 2. character f,l,m,n,r,x,y,F,L,M,N,S,R,X,Y and the 3. character is not letter (e.g. "\^Y.")
+ % 1. unit: accent command
+ % 2. unit: f,l,m,n,r,x,y,F,L,M,N,S,R,X,Y
+ % 3. unit: punctuation
+ % "\^Y."
+ %
\ifhuaz@must@z@\else%
\huaz@temp@if@false%
\StrChar{#1}{3}[\huaz@temp]%
- \@for\huaz@list:={;,`,',",+,!,/,=,(,),<,>,@,.,?,:,-,*,0,1,2,3,4,5,6,7,8,9,{,},{ },{},\&,\#,\_,\unskip,\kern}% \kern, \unskip for active characters
+ \@for\huaz@list:={;,`,',",+,!,/,=,(,),<,>,@,.,?,:,-,*,0,1,2,3,4,5,6,7,8,9,{,},{ },{},\unskip,\kern}% \kern, \unskip for active characters
\do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@temp@if@true}{}}%
\ifhuaz@temp@if@%
\huaz@temp@if@false%
\StrChar{#1}{2}[\huaz@temp]%
- \@for\huaz@list:={f,l,m,n,r,x,y,F,L,M,N,S,R,X,Y}%
+ \@for\huaz@list:={f,l,m,n,s,r,x,y,F,L,M,N,S,R,X,Y}%
\do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@temp@if@true}{}}%
- \ifhuaz@temp@if@%
- \StrChar{#1}{1}[\huaz@temp]%
- \@for\huaz@list:={\",\',\H,\`,\~,\^,\v,\u,\=,\k}%
- \do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@must@z@true}{}}%
- \fi%
+ \fi%
+ \ifhuaz@temp@if@%
+ \StrChar{#1}{1}[\huaz@temp]%
+ \@for\huaz@list:={\",\',\`,\~,\^,\=,\.,\b,\B,\c,\d,\H,\k,\r,\u,\v}%
+ \do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@must@z@true}{}}%
\fi%
\fi%
%
- % first two characters ly,Ly,LY,ny,Ny,NY,sz,Sz,SZ,... and the 3. character is not letter (e.g. "NY" or "SZ-2")
+ % 1. unit: \",\',\`,\~,\^,\=,\.
+ % 2. unit: space(s)
+ % 3. unit: f,l,m,n,r,x,y,F,L,M,N,S,R,X,Y
+ % 4. unit: punctuation
+ % "\^ Y."
+ %
+ \ifhuaz@must@z@\else%
+ \huaz@temp@if@false%
+ \StrChar{#1}{4}[\huaz@temp]%
+ \@for\huaz@list:={;,`,',",+,!,/,=,(,),<,>,@,.,?,:,-,*,0,1,2,3,4,5,6,7,8,9,{,},{ },{},\unskip,\kern}% \kern, \unskip for active characters
+ \do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@temp@if@true}{}}%
+ \ifhuaz@temp@if@%
+ \huaz@temp@if@false%
+ \StrChar{#1}{3}[\huaz@temp]%
+ \@for\huaz@list:={f,l,m,n,s,r,x,y,F,L,M,N,S,R,X,Y}%
+ \do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@temp@if@true}{}}%
+ \fi%
+ \ifhuaz@temp@if@%
+ \huaz@temp@if@false%
+ \StrChar{#1}{2}[\huaz@temp]%
+ \IfStrEq{\huaz@temp}{ }{\huaz@temp@if@true}{}%
+ \fi%
+ \ifhuaz@temp@if@%
+ \StrChar{#1}{1}[\huaz@temp]%
+ \@for\huaz@list:={\",\',\`,\~,\^,\=,\.}%
+ \do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@must@z@true}{}}%
+ \fi%
+ \fi%
+ %
+ % 1-2. units: ly,Ly,LY,ny,Ny,NY,sz,Sz,SZ,\huaz@list@S(two units)
+ % 3. unit: punctuation
+ % "NY" "SZ-2"
+ %
\ifhuaz@must@z@\else%
\huaz@temp@if@false%
\StrChar{#1}{3}[\huaz@temp]%
- \@for\huaz@list:={;,`,',",+,!,/,=,(,),<,>,@,.,?,:,-,*,0,1,2,3,4,5,6,7,8,9,{,},{ },{},\&,\#,\_,\unskip,\kern}% \kern, \unskip for active characters
+ \@for\huaz@list:={;,`,',",+,!,/,=,(,),<,>,@,.,?,:,-,*,0,1,2,3,4,5,6,7,8,9,{,},{ },{},\unskip,\kern}% \kern, \unskip for active characters
\do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@temp@if@true}{}}%
\ifhuaz@temp@if@%
\StrLeft{#1}{2}[\huaz@temp]%
@@ -212,14 +403,17 @@
\do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@must@z@true}{}}%
\ifhuaz@must@oneunit@\else%
\ifhuaz@must@z@\else%
- \@for\huaz@list:=\huaz@list@X% in pdflatex(utf8) Š is two syntax units
+ \@for\huaz@list:=\huaz@list@S% in pdflatex(utf8) Š is two units
\do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@must@z@true}{}}%
\fi%
\fi%
\fi%
\fi%
%
- % 1. character 1 and the 2. character is not number (e.g. "1H")
+ % 1. unit: 1
+ % 2. unit: not digit
+ % "1H"
+ %
\ifhuaz@must@z@\else%
\StrChar{#1}{1}[\huaz@temp]%
\IfStrEq{\huaz@temp}{1}{%
@@ -228,14 +422,17 @@
}{}%
\fi%
%
- % 1000,...,1999 and the 5. character is not number ("ezer...")
+ % 1000,...,1999
+ % 5. unit: not digit
+ % "1000. sor" --> ezredik sor
+ %
\ifhuaz@must@z@\else%
\StrLen{#1}[\huaz@temp]%
\setcounter{huaz@temp@count}{\huaz@temp}%
\ifnum\value{huaz@temp@count}>3%
\StrChar{#1}{1}[\huaz@temp]%
\IfStrEq{\huaz@temp}{1}{%
- \StrMid{#1}{2}{4}[\huaz@temp]%
+ \StrLeft{#1}{4}[\huaz@temp]%
\IfInteger{\huaz@temp}{%
\StrChar{#1}{5}[\huaz@temp]%
\IfInteger{\huaz@temp}{}{\huaz@must@z@true}%
@@ -244,14 +441,17 @@
\fi%
\fi%
%
- % 1000000,...,1999999 and the 8. character is not number ("egymillió...")
+ % 1000000,...,1999999
+ % 8. unit: not digit
+ % "1000000 ember" --> egymillió ember
+ %
\ifhuaz@must@z@\else%
\StrLen{#1}[\huaz@temp]%
\setcounter{huaz@temp@count}{\huaz@temp}%
\ifnum\value{huaz@temp@count}>6%
\StrChar{#1}{1}[\huaz@temp]%
\IfStrEq{\huaz@temp}{1}{%
- \StrMid{#1}{2}{7}[\huaz@temp]%
+ \StrLeft{#1}{7}[\huaz@temp]%
\IfInteger{\huaz@temp}{%
\StrChar{#1}{8}[\huaz@temp]%
\IfInteger{\huaz@temp}{}{\huaz@must@z@true}%
@@ -260,14 +460,17 @@
\fi%
\fi%
%
- % 1000000000,...,1999999999 and the 11. character is not number ("egymilliárd...")
+ % 1000000000,...,1999999999
+ % 11. unit: not digit
+ % "1000000000 ember" --> egymilliárd ember
+ %
\ifhuaz@must@z@\else%
\StrLen{#1}[\huaz@temp]%
\setcounter{huaz@temp@count}{\huaz@temp}%
\ifnum\value{huaz@temp@count}>9%
\StrChar{#1}{1}[\huaz@temp]%
\IfStrEq{\huaz@temp}{1}{%
- \StrMid{#1}{2}{10}[\huaz@temp]%
+ \StrLeft{#1}{10}[\huaz@temp]%
\IfInteger{\huaz@temp}{%
\StrChar{#1}{11}[\huaz@temp]%
\IfInteger{\huaz@temp}{}{\huaz@must@z@true}%
@@ -302,36 +505,49 @@
%=================================================
%
-% \huaz@try@roman{<...>}
-% Collect the characters i,v,x,l,c,d,m,I,V,X,L,C,D,M from the beginning of <...>.
-% This string is saved into \huaz@try@roman@result.
-% If this string is empty, then \huaz@try@roman@result is <...>. E.g.
-% \huaz@try@roman{XIV.6}\huaz@try@roman@result --> "XIV"
-% \huaz@try@roman{xiii.x}\huaz@try@roman@result --> "xiii"
-% \huaz@try@roman{d.xiii}\huaz@try@roman@result --> "d"
-% \huaz@try@roman{a.xiii}\huaz@try@roman@result --> "a.xiii"
-% \huaz@try@roman{XIii}\huaz@try@roman@result --> "XIii"
-% \huaz@try@roman{aXIIII}\huaz@try@roman@result --> "aXIIII"
+% \huaz@collect@roman{<...>}
+% Collecting the characters i,v,x,l,c,d,m,I,V,X,L,C,D,M from the beginning of <...>
+% "XIII" --> result string is "XIII"
+% "xiii.x" --> result string is "xiii"
+% "x ii.x" --> result string is "x"
+% "VB" --> result string is "V"
+% "XIV6" --> result string is "XIV"
+% "aXIII" --> result string is ""
+% If the result string = <...>, then \huaz@collect@roman@result := result string
+% \huaz@collect@roman{XIII}\huaz@collect@roman@result --> "XIII"
+% If the result string is not empty and the first character after it is a punctuation mark or space in <...> , then \huaz@collect@roman@result := result string
+% \huaz@collect@roman{xiii.x}\huaz@collect@roman@result --> "xiii"
+% \huaz@collect@roman{x ii.x}\huaz@collect@roman@result --> "x"
+% If the result string is not empty and the first character after it is a letter or digit in <...> , then \huaz@collect@roman@result := ""
+% \huaz@collect@roman{VB}\huaz@collect@roman@result --> ""
+% \huaz@collect@roman{XIV6}\huaz@collect@roman@result --> ""
+% If the result string is empty then \huaz@collect@roman@result := ""
+% \huaz@collect@roman{aXIII}\huaz@collect@roman@result --> ""
%
%=================================================
-\NewDocumentCommand{\huaz@try@roman}{m}{%
+\NewDocumentCommand{\huaz@collect@roman}{m}{%
\begingroup%
\exploregroups%
\UseHook{huaz}%
\StrLen{#1}[\huaz@temp]%
\setcounter{huaz@temp@count}{\huaz@temp}%
\setcounter{huaz@temp@count@}{1}%
- \gdef\huaz@try@roman@result{}%
+ \gdef\huaz@collect@roman@result{}%
\loop%
- \huaz@temp@if@false%
\StrChar{#1}{\thehuaz@temp@count@}[\huaz@temp]%
- \IfSubStr{ivxlcdmIVXLCDM}{\huaz@temp}{%
- \expandafter\g@addto@macro\expandafter\huaz@try@roman@result\expandafter{\huaz@temp}}
+ \IfSubStr{ivxlcdmIVXLCDM}{\huaz@temp}
+ {\expandafter\g@addto@macro\expandafter\huaz@collect@roman@result\expandafter{\huaz@temp}}
{\setcounter{huaz@temp@count@}{\value{huaz@temp@count}}}%
\ifnum\value{huaz@temp@count@}<\value{huaz@temp@count}\stepcounter{huaz@temp@count@}%
\repeat%
- \ifx\huaz@try@roman@result\@empty\gdef\huaz@try@roman@result{#1}\fi%
+ \IfStrEq{\huaz@collect@roman@result}{}{}{%
+ \huaz@temp@if@false%
+ \StrBehind{#1}{\huaz@collect@roman@result}[\huaz@tempa]%
+ \StrChar{\huaz@tempa}{1}[\huaz@tempb]%
+ \@for\huaz@list:={;,`,',",+,!,/,=,(,),<,>,@,.,?,:,-,*,{,},{ },{},\unskip,\kern}% \kern, \unskip for active characters
+ \do{\IfStrEq{\huaz@tempb}{\huaz@list}{\huaz@temp@if@true}{}}%
+ \ifhuaz@temp@if@\else\gdef\huaz@collect@roman@result{}\fi}%
\endgroup}
%=================================================
@@ -344,21 +560,32 @@
%=================================================
%
+% \azseparator
+%
+%=================================================
+
+\def\azseparator#1{\def\huaz@sep{#1}}
+\def\huaz@sep{~}
+
+%=================================================
+%
% \huaz@text
%
%=================================================
\NewDocumentCommand{\huaz@text}{st{=}m}{%
- \huaz@try@roman{#3}%
- \def\huaz@tempa{-1}%
- \edef\huaz@tempb{\huaz@romantoarabic{\huaz@try@roman@result}}%
+ \huaz@collect@roman{#3}%
+ \huaz@temp@if@true%
+ \edef\huaz@temp{\huaz@romantoarabic{\huaz@collect@roman@result}}%
+ \IfStrEq{\huaz@temp}{0}{\huaz@temp@if@false}{}%
+ \IfStrEq{\huaz@temp}{-1}{\huaz@temp@if@false}{}%
\IfBooleanTF{#2}{\huaz@z{#3}}{%
- \ifx\huaz@tempb\huaz@tempa%
- \huaz@z{#3}%
+ \ifhuaz@temp@if@%
+ \huaz@z{\huaz@romantoarabic{\huaz@collect@roman@result}}%
\else%
- \huaz@z{\huaz@romantoarabic{\huaz@try@roman@result}}%
+ \huaz@z{#3}%
\fi}%
- \IfBooleanF{#1}{\ifhuaz@show@~#3\fi}%
+ \IfBooleanF{#1}{\ifhuaz@show@\huaz@sep{#3}\fi}%
\huaz@show@true}
%=================================================
@@ -367,10 +594,29 @@
%
%=================================================
-\DeclareDocumentCommand{\az}{sm}{\ifhuaz@show@ a\fi\IfBooleanTF{#1}{\huaz@text*{#2}}{\huaz@text{#2}}\xdef\azsaved{a\huaz@save}}
-\DeclareDocumentCommand{\Az}{sm}{\ifhuaz@show@ A\fi\IfBooleanTF{#1}{\huaz@text*{#2}}{\huaz@text{#2}}\xdef\azsaved{A\huaz@save}}
-\DeclareDocumentCommand{\azv}{sm}{\ifhuaz@show@ a\fi\IfBooleanTF{#1}{\huaz@text*={#2}}{\huaz@text={#2}}\xdef\azsaved{a\huaz@save}}
-\DeclareDocumentCommand{\Azv}{sm}{\ifhuaz@show@ A\fi\IfBooleanTF{#1}{\huaz@text*={#2}}{\huaz@text={#2}}\xdef\azsaved{A\huaz@save}}
+\DeclareDocumentCommand{\az}{s>{\TrimSpaces}m}{%
+ \ifhuaz@show@ a\fi
+ \IfBooleanTF{#1}{\huaz@text*{#2}}{\huaz@text{#2}}%
+ \IfBlankT{#2}{\PackageWarning{huaz}{Argument of \string\az\space is empty}\textup{(?)}}%
+ \xdef\azsaved{a\huaz@save}}
+
+\DeclareDocumentCommand{\Az}{s>{\TrimSpaces}m}{%
+ \ifhuaz@show@ A\fi
+ \IfBooleanTF{#1}{\huaz@text*{#2}}{\huaz@text{#2}}%
+ \IfBlankT{#2}{\PackageWarning{huaz}{Argument of \string\Az\space is empty}\textup{(?)}}%
+ \xdef\azsaved{A\huaz@save}}
+
+\DeclareDocumentCommand{\azv}{s>{\TrimSpaces}m}{%
+ \ifhuaz@show@ a\fi
+ \IfBooleanTF{#1}{\huaz@text*={#2}}{\huaz@text={#2}}%
+ \IfBlankT{#2}{\PackageWarning{huaz}{Argument of \string\azv\space is empty}\textup{(?)}}%
+ \xdef\azsaved{a\huaz@save}}
+
+\DeclareDocumentCommand{\Azv}{s>{\TrimSpaces}m}{%
+ \ifhuaz@show@ A\fi
+ \IfBooleanTF{#1}{\huaz@text*={#2}}{\huaz@text={#2}}%
+ \IfBlankT{#2}{\PackageWarning{huaz}{Argument of \string\Azv\space is empty}\textup{(?)}}%
+ \xdef\azsaved{A\huaz@save}}
%=================================================
%
@@ -378,10 +624,10 @@
%
%=================================================
-\DeclareDocumentCommand{\aref}{sm}{\IfBooleanTF{#1}{\az*{\ref{#2}}}{\az{\ref{#2}}}}
-\DeclareDocumentCommand{\Aref}{sm}{\IfBooleanTF{#1}{\Az*{\ref{#2}}}{\Az{\ref{#2}}}}
-\DeclareDocumentCommand{\avref}{sm}{\IfBooleanTF{#1}{\azv*{\ref{#2}}}{\azv{\ref{#2}}}}
-\DeclareDocumentCommand{\Avref}{sm}{\IfBooleanTF{#1}{\Azv*{\ref{#2}}}{\Azv{\ref{#2}}}}
+\DeclareDocumentCommand{\aref}{sm}{\IfBooleanTF{#1}{\az{\ref*{#2}}}{\az{\ref{#2}}}}
+\DeclareDocumentCommand{\Aref}{sm}{\IfBooleanTF{#1}{\Az{\ref*{#2}}}{\Az{\ref{#2}}}}
+\DeclareDocumentCommand{\avref}{sm}{\IfBooleanTF{#1}{\azv{\ref*{#2}}}{\azv{\ref{#2}}}}
+\DeclareDocumentCommand{\Avref}{sm}{\IfBooleanTF{#1}{\Azv{\ref*{#2}}}{\Azv{\ref{#2}}}}
%=================================================
%
@@ -389,10 +635,10 @@
%
%=================================================
-\DeclareDocumentCommand{\apageref}{sm}{\IfBooleanTF{#1}{\az*{\pageref{#2}}}{\az{\pageref{#2}}}}
-\DeclareDocumentCommand{\Apageref}{sm}{\IfBooleanTF{#1}{\Az*{\pageref{#2}}}{\Az{\pageref{#2}}}}
-\DeclareDocumentCommand{\avpageref}{sm}{\IfBooleanTF{#1}{\azv*{\pageref{#2}}}{\azv{\pageref{#2}}}}
-\DeclareDocumentCommand{\Avpageref}{sm}{\IfBooleanTF{#1}{\Azv*{\pageref{#2}}}{\Azv{\pageref{#2}}}}
+\DeclareDocumentCommand{\apageref}{sm}{\IfBooleanTF{#1}{\az{\pageref*{#2}}}{\az{\pageref{#2}}}}
+\DeclareDocumentCommand{\Apageref}{sm}{\IfBooleanTF{#1}{\Az{\pageref*{#2}}}{\Az{\pageref{#2}}}}
+\DeclareDocumentCommand{\avpageref}{sm}{\IfBooleanTF{#1}{\azv{\pageref*{#2}}}{\azv{\pageref{#2}}}}
+\DeclareDocumentCommand{\Avpageref}{sm}{\IfBooleanTF{#1}{\Azv{\pageref*{#2}}}{\Azv{\pageref{#2}}}}
%=================================================
%
@@ -400,10 +646,21 @@
%
%=================================================
-\DeclareDocumentCommand{\aeqref}{sm}{\IfBooleanTF{#1}{\az*{\eqref{#2}}}{\az{\eqref{#2}}}}
-\DeclareDocumentCommand{\Aeqref}{sm}{\IfBooleanTF{#1}{\Az*{\eqref{#2}}}{\Az{\eqref{#2}}}}
-\DeclareDocumentCommand{\aveqref}{sm}{\IfBooleanTF{#1}{\azv*{\eqref{#2}}}{\azv{\eqref{#2}}}}
-\DeclareDocumentCommand{\Aveqref}{sm}{\IfBooleanTF{#1}{\Azv*{\eqref{#2}}}{\Azv{\eqref{#2}}}}
+\DeclareDocumentCommand{\aeqref}{m}{\az{\eqref{#1}}}
+\DeclareDocumentCommand{\Aeqref}{m}{\Az{\eqref{#1}}}
+\DeclareDocumentCommand{\aveqref}{m}{\azv{\eqref{#1}}}
+\DeclareDocumentCommand{\Aveqref}{m}{\Azv{\eqref{#1}}}
+
+%=================================================
+%
+% \arefeq \Arefeq \avrefeq \Avrefeq
+%
+%=================================================
+
+\DeclareDocumentCommand{\arefeq}{m}{\az{\refeq{#1}}}
+\DeclareDocumentCommand{\Arefeq}{m}{\Az{\refeq{#1}}}
+\DeclareDocumentCommand{\avrefeq}{m}{\azv{\refeq{#1}}}
+\DeclareDocumentCommand{\Avrefeq}{m}{\Azv{\refeq{#1}}}
%=================================================
%
@@ -411,65 +668,10 @@
%
%=================================================
-\DeclareDocumentCommand{\acite}{som}{%
- \IfBooleanTF{#1}{%
- \IfNoValueTF{#2}{%
- \az*{\cite{#3}}%
- }{%
- \az*{\cite[#2]{#3}}%
- }%
- }{%
- \IfNoValueTF{#2}{%
- \az{\cite{#3}}%
- }{%
- \az{\cite[#2]{#3}}%
- }%
- }}
-
-\DeclareDocumentCommand{\Acite}{som}{%
- \IfBooleanTF{#1}{%
- \IfNoValueTF{#2}{%
- \Az*{\cite{#3}}%
- }{%
- \Az*{\cite[#2]{#3}}%
- }%
- }{%
- \IfNoValueTF{#2}{%
- \Az{\cite{#3}}%
- }{%
- \Az{\cite[#2]{#3}}%
- }%
- }}
-
-\DeclareDocumentCommand{\avcite}{som}{%
- \IfBooleanTF{#1}{%
- \IfNoValueTF{#2}{%
- \azv*{\cite{#3}}%
- }{%
- \azv*{\cite[#2]{#3}}%
- }%
- }{%
- \IfNoValueTF{#2}{%
- \azv{\cite{#3}}%
- }{%
- \azv{\cite[#2]{#3}}%
- }%
- }}
-
-\DeclareDocumentCommand{\Avcite}{som}{%
- \IfBooleanTF{#1}{%
- \IfNoValueTF{#2}{%
- \Azv*{\cite{#3}}%
- }{%
- \Azv*{\cite[#2]{#3}}%
- }%
- }{%
- \IfNoValueTF{#2}{%
- \Azv{\cite{#3}}%
- }{%
- \Azv{\cite[#2]{#3}}%
- }%
- }}
+\DeclareDocumentCommand{\acite}{om}{\IfNoValueTF{#1}{\az{\cite{#2}}}{\az{\cite[#1]{#2}}}}
+\DeclareDocumentCommand{\Acite}{om}{\IfNoValueTF{#1}{\Az{\cite{#2}}}{\Az{\cite[#1]{#2}}}}
+\DeclareDocumentCommand{\avcite}{om}{\IfNoValueTF{#1}{\azv{\cite{#2}}}{\azv{\cite[#1]{#2}}}}
+\DeclareDocumentCommand{\Avcite}{om}{\IfNoValueTF{#1}{\Azv{\cite{#2}}}{\Azv{\cite[#1]{#2}}}}
%=================================================
%
@@ -477,8 +679,8 @@
%
%=================================================
-\def\huaz@x@#1#{\huaz@citelist}
-\def\huaz@cite{\huaz@x@\relax}
+\def\huaz@cite@#1#{\huaz@citelist}
+\def\huaz@cite{\huaz@cite@\relax}
\def\huaz@citelist#1{\huaz@@citelist#1,\relax,}
\def\huaz@@citelist#1,{\ifx#1\relax\else\@nameuse{huaz@bib@#1},\expandafter\huaz@@citelist\fi}%
@@ -501,6 +703,7 @@
\def\bibcite#1#2{\global\@namedef{huaz@bib@#1}{\huaz@bibparam#2}\huaz@old@bibcite{#1}{#2}}
%
\@ifpackageloaded{biblatex}{
+ \settoggle{blx@labelalpha}{true}
\def\huaz@biblatexlabel{}
\ifx\blx@opt@eldt@style\@empty\ifx\blx@opt@eldt@citestyle\@empty\def\huaz@biblatexlabel{\strfield{labelnumber}}\fi\fi
\def\huaz@temp{numeric}
@@ -516,14 +719,46 @@
\ifx\blx@opt@eldt@style\huaz@temp\def\huaz@biblatexlabel{\strfield{labelalpha}}\fi
\ifx\blx@opt@eldt@citestyle\huaz@temp\def\huaz@biblatexlabel{\strfield{labelalpha}}\fi
\def\huaz@temp{authoryear}
- \ifx\blx@opt@eldt@style\huaz@temp\settoggle{blx@labelalpha}{true}\def\huaz@biblatexlabel{\strfield{labelalpha}}\fi
- \ifx\blx@opt@eldt@citestyle\huaz@temp\settoggle{blx@labelalpha}{true}\def\huaz@biblatexlabel{\strfield{labelalpha}}\fi
+ \ifx\blx@opt@eldt@style\huaz@temp\def\huaz@biblatexlabel{\strfield{labelalpha}}\fi
+ \ifx\blx@opt@eldt@citestyle\huaz@temp\def\huaz@biblatexlabel{\strfield{labelalpha}}\fi
\ifx\huaz@biblatexlabel\@empty\else
\AtEveryBibitem{\protected@write\@auxout{}{\string\global\string\@namedef{huaz@bib@\strfield{entrykey}}{\huaz@biblatexlabel}}}
\fi}{}}
%=================================================
%
+% \huaz@citeauthor
+%
+%=================================================
+
+\def\huaz@citeauthor@#1#{\huaz@citeauthorlist}
+\def\huaz@citeauthor{\huaz@citeauthor@\relax}
+\def\huaz@citeauthorlist#1{\huaz@@citeauthorlist#1,\relax,}
+\def\huaz@@citeauthorlist#1,{\ifx#1\relax\else\@nameuse{huaz@bibalpha@#1},\expandafter\huaz@@citeauthorlist\fi}
+
+\AddToHook{begindocument/before}{
+ \@ifpackageloaded{biblatex}{
+ \AtEveryBibitem{\protected@write\@auxout{}{\string\global\string\@namedef{huaz@bibalpha@\strfield{entrykey}}{\strfield{labelalpha}}}}
+ }{}}
+
+%=================================================
+%
+% \huaz@citeyear
+%
+%=================================================
+
+\def\huaz@citeyear@#1#{\huaz@citeyearlist}
+\def\huaz@citeyear{\huaz@citeyear@\relax}
+\def\huaz@citeyearlist#1{\huaz@@citeyearlist#1,\relax,}
+\def\huaz@@citeyearlist#1,{\ifx#1\relax\else\@nameuse{huaz@bibyear@#1},\expandafter\huaz@@citeyearlist\fi}
+
+\AddToHook{begindocument/before}{
+ \@ifpackageloaded{biblatex}{
+ \AtEveryBibitem{\protected@write\@auxout{}{\string\global\string\@namedef{huaz@bibyear@\strfield{entrykey}}{\strfield{year}}}}
+ }{}}
+
+%=================================================
+%
% end
%
%=================================================
diff --git a/macros/latex/contrib/huaz/huaz.tex b/macros/latex/contrib/huaz/huaz.tex
index a9bb258ad6..4b178dbb44 100644
--- a/macros/latex/contrib/huaz/huaz.tex
+++ b/macros/latex/contrib/huaz/huaz.tex
@@ -1,7 +1,7 @@
%%
%% `huaz.tex' documentation of the huaz package
%%
-%% Copyright 2022 by Tibor Tomacs
+%% Copyright 2022-2024 by Tibor Tómács
%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3
@@ -13,44 +13,61 @@
%%
%% This work has the LPPL maintenance status `maintained'.
%%
-%% The Current Maintainer of this work is Tibor Tomacs.
+%% The Current Maintainer of this work is Tibor Tómács.
%%
\documentclass[12pt]{article}
-\usepackage{listings,xcolor,lmodern,xurl}
-\usepackage[pdfstartview=FitH,colorlinks,allcolors=teal,bookmarksnumbered]{hyperref}
-\usepackage[a4paper,top=1in,bottom=1.2in]{geometry}
+\usepackage[a4paper,top=1in,bottom=1in]{geometry}
+\usepackage{listings,xcolor,lmodern,xurl,multicol}
\usepackage[T1]{fontenc}
-\PassOptionsToPackage{defaults=hu-min}{magyar.ldf}
+\PassOptionsToPackage{
+ defaults=hu-min,
+ labelitems=unchanged,
+ }{magyar.ldf}
\usepackage[english,magyar]{babel}
+\usepackage[
+ pdfstartview=FitH,
+ colorlinks,
+ allcolors=purple,
+ bookmarksnumbered,
+ bookmarksopen,
+ ]{hyperref}
+\usepackage{upquote}
+
\setlength{\parindent}{0pt}
\setlength{\parskip}{6pt}
+\def\codefont{\usefont{T1}{pcrs}{m}{n}}
+
\lstset{literate={<}{{$\langle$}}1{>}{{$\rangle$}}1
- {ö}{{\"o}}1{ü}{{\"u}}1{ó}{{\'o}}1{é}{{\'e}}1{á}{{\'a}}1{í}{{\'i}}1}
-
-\lstnewenvironment{examplelst}{\lstset{
-aboveskip=\bigskipamount,
-basicstyle=\footnotesize\color{blue!70!black}\ttfamily,
-backgroundcolor=\color{black!3},
-rulecolor=\color{black!15},
-frame=trbl,
-framesep=5pt,
-columns=fullflexible,
-xleftmargin=5.4pt,
-xrightmargin=5.4pt,
-keepspaces}}{}
-
-\newcommand{\commandinline}{\hspace*{-15mm}\lstinline[
-delim={[is][\color{green!50!black}\normalfont\small\sffamily]{!}{!}},
-basicstyle=\color{red!70!black}\normalfont\normalsize\ttfamily,
-columns=fullflexible,
-keepspaces]}
-
-\newcommand{\verbinline}{\lstinline[
-delim={[is][\color{green!50!black}\normalfont\small\sffamily]{!}{!}},
-basicstyle=\normalfont\normalsize\ttfamily,
-columns=fullflexible,
-keepspaces]}
+ {ű}{{\H u}}1{ö}{{\"o}}1{ő}{{\H o}}1{ü}{{\"u}}1
+ {ó}{{\'o}}1{é}{{\'e}}1{á}{{\'a}}1{í}{{\'i}}1}
+
+\lstnewenvironment{examplelst}{%
+ \lstset{
+ aboveskip=\bigskipamount,
+ basicstyle=\color{blue!70!black}\small\codefont,
+ backgroundcolor=\color{black!3},
+ rulecolor=\color{black!15},
+ frame=trbl,
+ framesep=5pt,
+ columns=fullflexible,
+ xleftmargin=5.4pt,
+ xrightmargin=5.4pt,
+ keepspaces}}{}
+
+\newcommand{\huazcmd}{\hspace*{-15mm}%
+ \lstinline[
+ delim={[is][\color{teal}\normalfont\small\sffamily]{!}{!}},
+ basicstyle=\color{magenta}\normalfont\small\codefont,
+ columns=fullflexible,
+ keepspaces]}
+
+\newcommand{\code}{%
+ \lstinline[
+ delim={[is][\color{teal}\normalfont\small\sffamily]{!}{!}},
+ basicstyle=\normalfont\small\codefont,
+ columns=fullflexible,
+ keepspaces]}
\makeatletter
\def\@oddfoot{\hfill\textsf{\color{gray}\thepage}\hfill}
@@ -58,270 +75,476 @@ keepspaces]}
\def\ps@plain{\def\@oddfoot{\hfill\textsf{\color{gray}\thepage}\hfill}}
\makeatother
-\def\huaz{\textbf{\sffamily hu\color{gray}az}}
+\definecolor{hured}{RGB}{207,36,54}
+\definecolor{hugreen}{RGB}{69,113,79}
+\usepackage{contour}
+\def\huazlogo{%
+ {\contourlength{.8pt}\Huge
+ \sbox0{\contour{black!30}{\Huge\bfseries\sffamily\color{white}HUAZ}}%
+ \mbox{}%
+ \lower-\dimeval{2\ht0/3}%
+ \rlap{{\color{hured}\rule{\wd0}{\dimeval{\ht0/3}}}}%
+ {\color{hugreen}\rule{\wd0}{\dimeval{\ht0/3}}}%
+ \llap{\usebox0}}}
+
+\def\huaz{\textbf{\sffamily hu\itshape\color{gray}az}}
+
+\def\labelenumi{\textbf{\theenumi.}}
+
+\def\huqq#1{,,{\color{gray}#1}''}
+
+\def\paragraph#1{\par\bigskip\textbf{#1.}}
\begin{document}
-\title{The \huaz\ package\\
- {\large v1.2 (2024/04/20)}}
+\title{\huazlogo\\ The \huaz\ package\\{\large v2.1 (2024/05/05)}}
\author{Tibor Tómács\\
- {\normalsize\href{email:tomacs.tibor@gmail.com}{\nolinkurl{tomacs.tibor@gmail.com}}}}
+ {\normalsize\href{email:tomacs.tibor@gmail.com}{\nolinkurl{tomacs.tibor@gmail.com}}}}
\date{}
\maketitle
\begin{otherlanguage}{english}
\begin{abstract}
-In Hungarian there are two definite articles, \emph{``a''} and \emph{``az''}, which are determined by the pronunciation of the subsequent word. The definite article is \emph{``az''}, if the first phoneme of the pronounced word is a vowel, otherwise it is \emph{``a''}.
-The \huaz\ package helps the user to insert automatically the correct definite article for cross-references and other commands containing text. Thus, if these change, the definite articles will also change accordingly.
+There are two definite articles in Hungarian, ``a'' and ``az'', depending on the first sound of the word that follows. If the word begins with a vowel sound, the definite article is ``az'', otherwise it is ``a''.
+
+The \huaz\ package helps the user to automatically insert the correct definite article for cross-references and other commands containing text.
+This way, if the number or text changes, the definite articles will change accordingly.
-\medskip
-\emph{The documentation is in Hungarian, because only Hungarian-speaking users are interested.}
+The documentation of the \huaz\ package is in Hungarian, as it is assumed that only Hungarian-speaking users are interested.
\end{abstract}
\end{otherlanguage}
\section{Bevezetés}
-A magyar nyelvben a határozott névelő egy szó előtt aszerint \emph{,,a''} vagy \emph{,,az''}, hogy a szó kiejtve mássalhangzóval vagy magánhangzóval kezdődik. Például \emph{,,a szék''} vagy \emph{,,az asztal''}. Ez egyszerűnek tűnik, de gondoljon a következő esetekre:
+A magyar nyelvben a határozott névelő egy szó előtt aszerint \huqq{a} vagy \huqq{az}, hogy a szó kiejtve mássalhangzóval vagy magánhangzóval kezdődik.
+Például \huqq{a szék} vagy \huqq{az asztal}.
+Ez egyszerű szabály, de írásban összetett vizsgálatot igényel.
+Itt felsorolunk néhány nehézséget:
\begin{itemize}
-\item Például ha oldalszámra akar hivatkozni, akkor a \verb|\pageref| parancsot szoktuk használni. Ha ez elé akar határozott névelőt rakni, akkor nem mindegy, hogy mi az oldalszám. Például \emph{,,az~1.~oldal''}, \emph{,,a~2.~oldal''}, \emph{,,az~5.~oldal''}, \emph{,,a~10.~oldal''}. Így egyáltalán nem biztos, hogy az ,,\verbinline|a \pageref{!<kulcs>!}|'' kód megfelelő eredményt ad. Hasonló a probléma minden kereszthivatkozás esetén (\verb|\ref|, \verb|\pageref|, \verb|\eqref|, \verb|\cite|).
-
-\item Az is fontos, hogy egy kifejezés római szám vagy sem. Például \emph{,,az~V.~fejezet''}, ha \emph{V} római szám, azaz 5 a jelentése. Ugyanakkor \emph{,,a~V.~fejezet''}, ha \emph{V} betűt jelöl vagy alfanumerikus szám esetén a 22 értéket (\emph{V} az angol ábécében a 22.~betű).
-
-\item Néhány mássalhangzó speciális tulajdonságú. Például \emph{,,az M betű''}, de \emph{,,a Magyar Közlöny''}; \emph{,,az Ny betű''}, de \emph{,,a Nyugdíjfolyósító Igazgatóság''}; stb.
+\item
+Ha oldalszámra akarunk hivatkozni, akkor a \code|\pageref| parancsot szoktuk használni.
+Ha ez elé kell határozott névelőt rakni, akkor nem mindegy, hogy mi az oldalszám.
+Például \huqq{az~1.~oldal}, \huqq{a~2.~oldal}, \huqq{az~5.~oldal}, \huqq{a~10.~oldal}.
+Így egyáltalán nem biztos, hogy az ,,\code|a \pageref{!<kulcs>!}|'' kód megfelelő eredményt ad.
+Hasonló a probléma minden kereszthivatkozás esetén (\code|\ref|, \code|\pageref|, \code|\eqref|, \code|\cite|).
+
+\item
+Az is fontos, hogy egy kifejezés római szám vagy sem.
+Például \huqq{az~V.~fejezet}, ha V római szám, azaz 5 a jelentése.
+Ugyanakkor \huqq{a~V.~fejezet}, ha V betűt jelöl vagy alfanumerikus szám esetén a 22 értéket (V az angol ábécében a 22.~betű).
+
+\item
+Néhány mássalhangzó speciális tulajdonságú.
+Például \huqq{a Magyar Közlöny} de \huqq{az M betű}; \huqq{a Nyugdíjfolyósító Igazgatóság} de \huqq{az Ny betű}; stb.
\end{itemize}
Először megemlítünk két eddigi megoldást a határozott névelők automatikus kezelésére, kiemelve azok hibáit és hiányosságait.
-\subsection{A magyar.ldf}
+\subsection{A \texttt{magyar.ldf}}
-Egyik lehetőség a \texttt{babel} csomag \texttt{magyar} opcióját beállító \texttt{magyar.ldf} fájl használata. Ennek teljes dokumentációja elérhető innen: \url{https://math.bme.hu/latex/magyarldf-doc.pdf}.
+Egyik lehetőség a \code{babel} csomag \code{magyar} opcióját beállító \code{magyar.ldf} fájl használata.
+Ennek teljes dokumentációja elérhető innen: \url{https://math.bme.hu/latex/magyarldf-doc.pdf}.
-Az ebben definiált \verb|\az|, \verb|\aref|, \verb|\apageref|, \verb|\acite|, stb. parancsok alapvetően jól használhatóak, de van néhány fontos hiba, melyek a \huaz\ csomag megírását motiválták:
+Az ebben definiált \code|\az|, \code|\aref|, \code|\apageref|, \code|\acite|, stb.~parancsok alapvetően jól használhatóak, de van néhány fontos hiba, melyek a \huaz\ csomag megírását motiválták:
\begin{itemize}
-\item Az \verb|\eqref| parancsnak nincs névelős verziója. Helyette az \verbinline|\aref({!<kulcs>!})| használható, de ez dőlt betűs környezetben nem álló betűs eredményt ad, mint az \verb|\eqref| esetében. Másik lehetőség, ami ezt a problémát megoldja, az \verbinline|\az{\eqref{!<kulcs>!}}| parancs. Ugyanakkor egyik megoldás sem kezeli a római számozású vagy a \verb|\tag| paranccsal címkézett egyenleteket.
-
-\item Az \verbinline|\az{\ref{!<kulcs>!}}| és \verbinline|\az{\pageref{!<kulcs>!}}| nem kezeli a római számozású hivatkozásokat.
-
-\item Az előző hiba akkor is fennáll, amikor az \verb|\az| parancsban egy római számmal kezdődő szöveg van. Például \verb|\az{V.~osztály}| eredménye \emph{,,a V.~osztály''}.
-
-\item Amennyiben nem kereszthivatkozáshoz, hanem egy szöveghez, vagy valamilyen szöveget tároló parancshoz kell automatikus névelő, akkor az ékezetes betűket UTF-8 kódolás esetén rosszul detektálja. A hiba alapvető oka, hogy az UTF-8 kódolású karakterek nem egy, hanem több bájton vannak kódolva, amit a \texttt{magyar.ldf} nem vesz figyelembe. Ezért például \verb|\az{ágy}| eredménye \emph{,,a ágy''}, mert nem betűként érzékeli az \emph{,,á''} betűt, így azt sem tudja, hogy ez magánhangzó. Meglepő módon \verb|\az{száz}| eredménye \emph{,,az száz''} is rossz. Ennek az az oka, hogy mivel számára az \emph{,,á''} nem betű, ezért az \emph{,,sz''} betűt különállónak tekinti, ami elé valóban \emph{,,az''} kell.
-
-\item Hibának ugyan nem tekinthető, de mindenesetre kényelmetlen, hogy például \verb|\az{\textbf{N betű}}| esetén a \verb|\textbf| parancs megzavarja a szó betűinek detektálását, így a névelő helytelenül \emph{,,a''} lesz.
+\item
+Az \code|\eqref| parancsnak nincs névelős verziója.
+Helyette az \code|\aref({!<kulcs>!})| használható, de ez dőlt betűs környezetben nem álló betűs eredményt ad, mint az \code|\eqref| esetében.
+Másik lehetőség, ami ezt a problémát megoldja, az \code|\az{\eqref{!<kulcs>!}}| parancs.
+Ugyanakkor egyik megoldás sem kezeli a római számozású vagy a \code|\tag| paranccsal címkézett egyenleteket.
+
+\item
+Az \code|\az{\ref{!<kulcs>!}}| és \code|\az{\pageref{!<kulcs>!}}| nem kezeli a római számozású hivatkozásokat.
+
+\item
+Az előző hiba akkor is fennáll, amikor az \code|\az| parancsban egy római számmal kezdődő szöveg van.
+Például \code|\az{V.~osztály}| eredménye \huqq{a V.~osztály}.
+
+\item
+Amennyiben nem kereszthivatkozáshoz, hanem egy szöveghez, vagy valamilyen szöveget tároló parancshoz kell automatikus névelő, akkor az ékezetes betűket \texttt{UTF-8} kódolás esetén rosszul detektálja, mivel azok nem egy, hanem több bájton vannak kódolva, amit a \code{magyar.ldf} nem vesz figyelembe.
+Ezért például \code|\az{ágy}| eredménye \huqq{a ágy}, mert nem betűként érzékeli az \huqq{á} betűt, így azt sem tudja, hogy ez magánhangzó.
+Meglepő módon \code|\az{száz}| eredménye \huqq{az száz} is rossz.
+Ennek oka, hogy számára az \huqq{á} nem betű, ezért az \huqq{sz} betűt különállónak tekinti, ami elé valóban \huqq{az} kell.
+
+\item
+Például \code|\az{\textbf{N betű}}| esetén a \code|\textbf| parancs megzavarja a szó betűinek detektálását, így a névelő helytelenül \huqq{a} lesz.
\end{itemize}
-\subsection{A nevelok csomag}
-
-2015-ben készült a \texttt{nevelok} csomag, ami szintén az automatikus határozott névelők kezelésére készült. A szerzője valószínűleg nem ismerte a \texttt{magyar.ldf} már akkor létező lehetőségeit, ezért készíthette ezt a jóval kevesebbet tudó csomagot.
+\subsection{A \texttt{nevelok} csomag}
-2022-ben telepített \TeX-rendszeren tesztelve azt tapasztaltam, hogy nem kezeli az ékezetes betűk semmilyen formáját és sok esetben ad kereszthivatkozásoknál is rossz névelőt. Az utóbbinak az az oka, hogy közvetlenül a \verb|\ref| parancsot vizsgálja, ami nem kifejthető parancs.
-
-Ezen dokumentáció elkészültéig semmilyen fejlesztése nem történt. Jelen állapotában nem javasolt ennek a csomagnak a használata.
+A \code{nevelok} csomag szintén a határozott névelők automatikus beillesztéséhez készült.
+Nem kezeli az ékezetes betűk semmilyen formáját és sok esetben ad kereszthivatkozásoknál rossz névelőt, ugyanis közvetlenül a \code|\ref| és \code|\pageref| parancsokat vizsgálja, amelyek nem kifejthetőek.
+Ezért ennek a csomagnak a jelenlegi verzióját nem szabad használni!
\subsection{A \texorpdfstring{\huaz}{huaz} csomag célja és működése}
-A \huaz\ csomag célja segíteni a felhasználót abban, hogy a kereszthivatkozásokhoz és szöveget tartalmazó parancsokhoz automatikusan beszúrja a megfelelő határozott névelőt. Így ha ezek változnak, akkor a határozott névelők is megfelelően változnak.
+A \huaz\ csomag segíti a felhasználót abban, hogy a kereszthivatkozásokhoz és szöveget tartalmazó parancsokhoz automatikusan beszúrja a megfelelő határozott névelőt.
+Így ha ezek változnak, akkor a határozott névelők is megfelelően változnak.
-A másik cél ezt úgy megtenni, hogy a \texttt{magyar.ldf} és a \texttt{nevelok.sty} hibáit és hiányosságait korrigálja illetve pótolja.
+Fontos cél volt ezt úgy megtenni, hogy a \code{magyar.ldf} és a \code{nevelok.sty} hibáit és hiányosságait korrigálja illetve pótolja.
-A \huaz\ csomag a következő esetekben illeszt az adott szöveg elé ,,az'' névelőt:
+A \huaz\ csomag a következő esetekben illeszt az adott szöveg elé \huqq{az} névelőt:
\begin{enumerate}
-\item Az első betű magánhangzó (legyen az kis- vagy nagybetű, ékezetes vagy sem, magyar vagy sem, UTF-8, ISO-8859-2 karakterrel vagy repülő ékezettel megadva).
+\item
+Az első betű magánhangzó (legyen az kis- vagy nagybetű, ékezetes vagy sem, magyar vagy sem, \texttt{UTF-8}, \texttt{ISO-8859-2} karakterrel vagy ékezet paranccsal megadva).
-\item Az első betű olyan kis vagy nagy mássalhangzó, amit önmagában kiejtve magánhangzóval kezdünk (például F, L, M, stb.) míg a második karakter (ha van) nem betű, hanem szám, írásjel vagy szóköz. Például ,,M-10''. Ide soroltunk néhány nem magyar ékezetes mássalhangzót is. Például ,,Ň.1''.
+\item
+Az első betű olyan kis vagy nagy mássalhangzó, amit önmagában kiejtve magánhangzóval kezdünk (például F, L, M, stb.) míg a második karakter (ha van) nem betű, hanem szám, írásjel vagy szóköz.
+Például \huqq{M-10}.
+Ide soroltunk néhány nem magyar ékezetes mássalhangzót is.
+Például \huqq{Ň.1}.
-\item Az első két karakter egy olyan kis vagy nagy kétjegyű mássalhangzó, amit önmagában kiejtve magánhangzóval kezdünk (például Ny, Ly, Sz, stb.) míg a harmadik karakter (ha van) nem betű, hanem szám, írásjel vagy szóköz. Például ,,NY betű''.
+\item
+Az első két karakter egy olyan kis vagy nagy kétjegyű mássalhangzó, amit önmagában kiejtve magánhangzóval kezdünk (például NY, LY, SZ, stb.) míg a harmadik karakter (ha van) nem betű, hanem szám, írásjel vagy szóköz.
+Például \huqq{SZ betű}.
-\item Az első karakter 5.
+\item
+Az első karakter 5.
-\item 1, 4, 7 vagy 10 jegyű számmal kezdődik és az első számjegy 1 (egy, ezer, egymillió, egymilliárd).
+\item
+1, 4, 7 vagy 10 jegyű számmal kezdődik és az első számjegy 1 (egy, ezer, egymillió, egymilliárd).
\end{enumerate}
-Ha a szó elején található karakterek római számként is értelmezhetőek, akkor megválasztható, hogy azt konvertálja arab számra és a névelőt ahhoz határozza meg vagy sem. Például ,,XII/A'' esetén.
+Ha a szó elején található karakterek római számként is értelmezhetőek, akkor megválasztható, hogy azt konvertálja arab számra és a névelőt ahhoz határozza meg vagy sem. Például \huqq{V. emelet} esetén.
\section{A \texorpdfstring{\huaz}{huaz} csomag használata}
A \huaz\ csomagot a szokott módon kell betölteni:
-\commandinline|\usepackage{huaz}|
+\huazcmd|\usepackage{huaz}|
-Csomagopciók nincsenek. UTF-8 (\texttt{utf8}) és ISO-8859-2 (\texttt{latin2}) kódolású forrásfájl esetén működik, de a repülő ékezeteket is jól kezeli. Kompatibilis a \texttt{pdflatex}, \texttt{xelatex} és \texttt{lualatex} fordítókkal is. Például \texttt{pdflatex} fordítóval a következő betöltés megfelelő:
+Kompatibilis a \code{latex}, \code{pdflatex}, \code{xelatex} és \code{lualatex} fordítókkal is.
+A \code{latex} és \code{pdflatex} fordítóval a következő betöltés megfelelő:
\begin{examplelst}
\documentclass{article}
\usepackage[T1]{fontenc}
-\usepackage{huaz}
\PassOptionsToPackage{defaults=hu-min}{magyar.ldf}
\usepackage[magyar]{babel}
+\usepackage{huaz}
\begin{document}
...
\end{document}
\end{examplelst}
-A \texttt{hyperref} csomaggal is kompatibilis, így az is betölthető a \huaz\ mellé.
-A \texttt{magyar.ldf} \texttt{defaults=hu-min} opciója bekapcsol néhány olyan opciót is, amely elérhetővé teszi a saját automatikus névelőparancsait. Ezt ugyan nem kötelező, de hasznos a \huaz\ csomag használata esetén kikapcsolni. Ehhez a
+Az ékezetes betűket \texttt{UTF-8} (\code{utf8}) és \texttt{ISO-8859-2} (\code{latin2}) kódolású forrásfájl esetén, illetve ékezet parancsokkal (\code|\'|, \code|\"|, \code|\H|, stb.) is jól kezeli.
+
+A \code{hyperref} csomaggal is kompatibilis, így az is betölthető a \huaz\ mellé.
+
+A \code{magyar.ldf} \code{defaults=hu-min} opciója bekapcsol néhány olyan opciót is, amely elérhetővé teszi a saját automatikus névelőparancsait.
+Ha ezeket a \huaz\ csomag használata esetén ki akarja kapcsolni, akkor a
\begin{examplelst}
\PassOptionsToPackage{defaults=hu-min}{magyar.ldf}
\end{examplelst}
sor helyett használja a következőt:
\begin{examplelst}
-\PassOptionsToPackage{defaults=hu-min,az=no,
- shortrefcmds=no,hunnewlabel=no}{magyar.ldf}
+\PassOptionsToPackage{
+ defaults=hu-min,
+ az=no,
+ shortrefcmds=no,
+ hunnewlabel=no
+ }{magyar.ldf}
\end{examplelst}
+Ezt nem kell feltétlenül megtenni, mert a \huaz\ csomag átdefiniálja a \code{magyar.ldf} névelőparancsait függetlenül attól, hogy a \code{babel} előtt vagy után töltötte be.
-A \texttt{xelatex} és \texttt{lualatex} fordítók esetén \texttt{babel} helyett a
+A \code{xelatex} és \code{lualatex} fordítók esetén \code{babel} helyett a
\begin{examplelst}
\usepackage{polyglossia}
\setdefaultlanguage{hungarian}
\end{examplelst}
is használható.
-A \huaz\ csomag felhasználja az \texttt{xstring}, \texttt{refcount} és \texttt{iftex} csomagok szolgáltatásait, így ezek is betöltődnek. Másrészt felhasználásra kerül néhány 2021. október 10-én bevezetett változás a \LaTeX\ kerneljében, így csak az ezután telepített rendszereken működik megfelelően a csomag.
+A \huaz\ csomag felhasználja az \code{xstring}, \code{refcount} és \code{iftex} csomagok szolgáltatásait, így ezek is betöltődnek.
+Felhasználásra kerül néhány 2021. október 10-én bevezetett változás a \LaTeX\ kerneljében, így csak az ezután telepített rendszereken működik megfelelően a csomag.
\subsection{Parancsok}
-\commandinline|\az{!<szöveg>!}|
+\huazcmd|\az{!<szöveg>!}|
-A \verbinline|!<szöveg>!| elé a megfelelő határozott névelő kerül kisbetűs alakban. Ha a \verbinline|!<szöveg>!| elején római számként értelmezhető karakterek vannak, akkor a névelő az arab megfelelőjéhez igazodik. Például
+A \code|!<szöveg>!| elé a megfelelő határozott névelő kerül kisbetűs alakban.
+Ha a \code|!<szöveg>!| római számként is értelmezhető (pl.~\huqq{XII}), esetleg azt írásjel vagy szóköz követi (pl.~\huqq{XII.A}), akkor a névelő az arab megfelelőjéhez igazodik.
+Például
\begin{examplelst}
Idén \az{V.B}~osztály rendezi a farsangot.
\end{examplelst}
-eredménye ,,Idén az V.B~osztály rendezi a farsangot.''.
+eredménye \huqq{Idén az~V.B~osztály rendezi a farsangot.}.
+De
+\begin{examplelst}
+\az{VB}, \az{V4}
+\end{examplelst}
+eredménye \huqq{a~VB, a~V4} lesz, mert V után betű illetve szám következik, ezért nem 5-nek, hanem V betűnek értelmezi mindkét esetben.
-A \verbinline|!<szöveg>!| lehet szöveget tároló parancs is. Például
+A \code|!<szöveg>!| lehet szöveget tároló parancs is.
+Például
\begin{examplelst}
\newcommand{\osztaly}{V.B}
Idén \az{\osztaly}~osztály rendezi a farsangot.
\end{examplelst}
-eredménye ,,Idén az V.B~osztály rendezi a farsangot.''.
+eredménye \huqq{Idén az~V.B~osztály rendezi a farsangot.}.
-A \verbinline|!<szöveg>!| tartalmazhat szövegformázó parancsokat is (bővebben lásd \az{\ref{subsec-kapocs}}.~alszakaszban). Például
+A \code|!<szöveg>!| tartalmazhat szövegformázó parancsokat is (bővebben lásd \az{\ref{subsec-ignoralt-parancsok}}.~alszakaszban).
+Például
\begin{examplelst}
\newcommand{\osztaly}{V.B}
Idén \az{\textbf{\osztaly}}~osztály rendezi a farsangot.
\end{examplelst}
-eredménye ,,Idén az \textbf{V.B}~osztály rendezi a farsangot.''.
+eredménye \huqq{Idén az~\textbf{V.B}~osztály rendezi a farsangot.}.
-A \verbinline|!<szöveg>!| lehet standard kereszthivatkozás is (\verb|\ref|, \verb|\pageref|, \verb|\eqref|, \verb|\cite|). Például
+A \code|!<szöveg>!| lehet kereszthivatkozás is.
+Például
\begin{examplelst}
\section{Cím}\label{seca}
\section{Cím}\label{secb}
-\az{\ref{seca}}.~szakaszban, \az{\textbf{\ref{secb}}}.~szakaszban
+\az{\ref{seca}}.~szakaszban,
+\az{\textbf{\ref{secb}}}.~szakaszban
+\end{examplelst}
+eredménye \huqq{az~1.~szakaszban, a~\textbf{2}.~szakaszban}.
+
+Ha a \code{section} számláló kiírása római számozásra van állítva a
+\begin{examplelst}
+\renewcommand{\thesection}{\Roman{section}}
\end{examplelst}
-eredménye ,,az 1. szakaszban, a \textbf{2}. szakaszban''. Ha a \texttt{section} számláló kiírása római számozásra van állítva a \verb|\renewcommand{\thesection}{\Roman{section}}| paranccsal, akkor az előző kód eredménye ,,az I. szakaszban, a \textbf{II}. szakaszban''.
+paranccsal, akkor az előző kód eredménye \huqq{az I. szakaszban, a \textbf{II}. szakaszban}.
\subsubsection*{Korlátozások}
+
\begin{enumerate}
-\item A \verbinline|!<szöveg>!| elején csak a \verb|\ref|, \verb|\ref*|, \verb|\pageref|, \verb|\pageref*|, \verb|\eqref|, \verb|\cite| kereszthivatkozásokkal működik helyesen.
+\item
+A \code|!<szöveg>!| elején a \code|\ref|, \code|\ref*|, \code|\pageref|, \code|\pageref*|, \code|\eqref|, \code|\refeq| kereszthivatkozásokkal működik helyesen.
+Az \code|\eqref| az \code{amsmath}, a \code|\refeq| pedig a \code{mathtools} csomaggal van definiálva.
+
+\item
+A \code|!<szöveg>!| elején a \code|\cite| jól működik a \code{natbib} csomaggal és \code{bibtex} esetében is.
+
+A \code{biblatex} csomaggal a \code|\cite|, \code|\citeauthor|, \code|\textcite|, \code|\citeyear| akkor működik jól, ha a \code{style} vagy \code{citestyle} opciók értéke:
-\item A \verbinline|!<szöveg>!| elején a \verb|\cite| parancs jól működik a \texttt{natbib} csomaggal és \texttt{bibtex} esetében is. A \texttt{biblatex} csomag használata esetén akkor működik jól, ha a \texttt{style} vagy \texttt{citestyle} opciók értéke \texttt{numeric}, \texttt{numeric-verb}, \texttt{alphabetic}, \texttt{alphabetic-verb} vagy \texttt{authoryear}. Akkor is jól működik, ha nem adjuk meg a \texttt{style} illetve \texttt{citestyle} opciók egyikét sem.
+\code{numeric}\\
+\code{numeric-verb}\\
+\code{alphabetic}\\
+\code{alphabetic-verb}\\
+\code{authoryear}
-\item A pdf vázlatfájába nem lehet \verb|\az| paranccsal szöveget beilleszteni. Tehát például a következő kód nem ad helyes vázlatfát, ha \texttt{hyperref} vagy \texttt{bookmark} csomagot használ:
+Akkor is jól működik, ha nem adjuk meg a \code{style} illetve \code{citestyle} opciók egyikét sem.
+
+\item
+A pdf vázlatfájába nem lehet \code|\az| paranccsal szöveget beilleszteni.
+Tehát például a következő kód nem ad helyes vázlatfát, ha \code{hyperref} vagy \code{bookmark} csomagot használ (bár a cím a szövegben, fejlécben és a tartalomjegyzékben jól fog megjelenni).
\begin{examplelst}
\section{...\az{\ref{sec}}...}
\end{examplelst}
-Viszont a cím a szövegben, fejlécben és a tartalomjegyzékben jól fog megjelenni. A problémát a később ismertetett \verb|\azsaved| paranccsal lehet megoldani.
+A problémát a később ismertetett \code|\azsaved| illetve \code|\aznotshow| parancsokkal lehet megoldani.
\end{enumerate}
-\commandinline|\az*{!<szöveg>!}|
+\huazcmd|\az*{!<szöveg>!}|
-Ugyanaz mint a \verb|*| nélküli esetben, de ekkor csak a névelő kerül kiírásra.
+Ugyanaz mint a \code|*| nélküli esetben, de ekkor csak a névelő kerül kiírásra.
+Például, ha az \code{amsmath} és \code{hyperref} csomagok használata mellett szeretnénk egy link nélküli egyenlethivatkozást, akkor ezt (mivel nincs \code|\eqref*| definiálva) például így tehetjük meg:
+\begin{examplelst}
+\begin{equation}\label{eq}
+a=b
+\end{equation}
+\emph{Lásd \textup{(\ref*{eq})} egyenletet!}
+\end{examplelst}
+Szebb lenne a mondat határozott névelővel a képlet száma előtt, de most nem ad feltétlenül helyes eredményt az
+\begin{examplelst}
+\az{\textup{(\ref*{eq})}}
+\end{examplelst}
+kód, mert az első karakter a \code{(} jel lesz, és nem a képlet száma.
+Így minden esetben \huqq{a} lesz a névelő.
+Ezt a következő módon javíthatjuk:
+\begin{examplelst}
+\az*{\ref{eq}} \textup{(\ref*{eq})}
+\end{examplelst}
-\commandinline|\azv{!<szöveg>!}|
+\huazcmd|\azv{!<szöveg>!}|
-Ugyanaz mint \verbinline|\az{!<szöveg>!}|, de ha a \verbinline|!<szöveg>!| elején római számként értelmezhető karakterek vannak, akkor a névelő nem az arab megfelelőjéhez igazodik, hanem mint egyszerű karakterekhez. Például
+Ugyanaz mint az \code|\az{!<szöveg>!}|, de ha a \code|!<szöveg>!| elején római számként értelmezhető karakterek vannak, akkor a névelő nem az arab megfelelőjéhez igazodik, hanem mint egyszerű karakterekhez.
+Például
\begin{examplelst}
\renewcommand{\thesection}{\Alph{section}}
\setcounter{section}{21}
\section{Cím}\label{sec}
\az{\ref{sec}}.~szakaszban, \azv{\ref{sec}}.~szakaszban
\end{examplelst}
-eredménye ,,az V.~szakaszban, a V.~szakaszban'', mert az első esetben a V betűt római számként értelmezte, a második esetben pedig nem. Mivel most alfanumerikus számra van beállítva a \texttt{section} számláló, ezért a második eset a jó.
+eredménye \huqq{az V.~szakaszban, a V.~szakaszban}, mert az első esetben a V betűt római számként értelmezte, a második esetben pedig nem.
+Mivel most alfanumerikus számra van beállítva a \code{section} számláló, ezért a második eset a jó.
-\commandinline|\azv*{!<szöveg>!}|
+\huazcmd|\azv*{!<szöveg>!}|
-Ugyanaz mint a \verb|*| nélküli esetben, de ekkor csak a névelő kerül kiírásra.
+Ugyanaz mint a \code|*| nélküli esetben, de ekkor csak a névelő kerül kiírásra.
-\commandinline|\Az{!<szöveg>!}|\\
-\commandinline|\Az*{!<szöveg>!}|\\
-\commandinline|\Azv{!<szöveg>!}|\\
-\commandinline|\Azv*{!<szöveg>!}|
+\huazcmd|\Az{!<szöveg>!}|\\
+\huazcmd|\Az*{!<szöveg>!}|\\
+\huazcmd|\Azv{!<szöveg>!}|\\
+\huazcmd|\Azv*{!<szöveg>!}|
-Ugyanaz, mint a kis ,,\texttt{a}'' betűvel kezdődő parancsok, de ekkor a határozott névelő nagybetűvel fog kezdődni, ami mondatok elején szükséges. Például
+Ugyanaz, mint a kis \code{a} betűvel kezdődő parancsok, de ekkor a határozott névelő nagybetűvel kezdődik, ami mondatok elején szükséges.
+Például
\begin{examplelst}
\section{Cím}\label{sec}
-\Az{\ref{sec}}.~szakaszban áttekintjük a téma rövid történetét.
+\Az{\ref{sec}}.~szakaszban \dots
\end{examplelst}
-eredménye {,,Az 1.~szakaszban áttekintjük a téma rövid történetét.''}.
+eredménye \huqq{Az 1.~szakaszban \dots}.
-\commandinline|\azsaved|
+\huazcmd|\azsaved|
-Amikor kiadja az előző parancsok bármelyikét, akkor generálódik egy kifejthető \verb|\azsaved| parancs is. Ennek eredménye az a határozott névelő amelyik a szó elé kell.
+Az előző parancsok bármelyikét használva, generálódik egy kifejthető \code|\azsaved| parancs.
+Ennek eredménye az a határozott névelő amelyik a szó elé kell.
-Amikor \texttt{hyperref} vagy \texttt{bookmark} csomagot használ, akkor ahogyan azt korábban említettük, a következő kód esetén a cím, fejléc, tartalomjegyzék rendben lesz, de a pdf vázlatfája nem:
+Amikor \code{hyperref} vagy \code{bookmark} csomagot használ, akkor (ahogyan azt korábban említettük) a következő kód esetén a cím, fejléc, tartalomjegyzék rendben lesz, de a pdf vázlatfája nem:
\begin{examplelst}
\section{\Az{\ref{sec}}...}
\end{examplelst}
-Ez az \verb|\azsaved| paranccsal a következő módon oldható meg:
+Ez az \code|\azsaved| paranccsal a következő módon oldható meg:
\begin{examplelst}
-\section{\texorpdfstring{\Az{\ref{sec}}...}{\azsaved~\ref{sec}...}}
+\section{\texorpdfstring {\Az*{\ref{sec}}} {\azsaved}
+ \ref{sec}...}
\end{examplelst}
Ekkor a vázlatfába az
\begin{examplelst}
-\azsaved~\ref{sec}...
+\azsaved \ref{sec}...
\end{examplelst}
-kód kerül, ami már helyes eredményt ad.
+kód kerül, ami már helyes eredményt ad.
-\commandinline|\aznotshow|
+\huazcmd|\aznotshow|
-Az előző probléma a \verb|\texorpdfstring| helyett ezzel a paranccsal egyszerűbben is megoldható. Ugyanis ezt helyezve az \verb|\az| (vagy bármelyik verziója) elé, az eredmény nem jelenik meg, csak az \verb|\azsaved| generálódik le a megfelelő határozott névelővel. Így
+Az előző probléma a \code|\texorpdfstring| helyett ezzel a paranccsal egyszerűbben is megoldható.
+Ugyanis ezt helyezve az \code|\az| (vagy bármelyik verziója) elé, az eredmény nem jelenik meg, csak az \code|\azsaved| generálódik le a megfelelő határozott névelővel.
+Így
\begin{examplelst}
\aznotshow\Az{\ref{sec}}
-\section{\azsaved~\ref{sec}...}
+\section{\azsaved \ref{sec}...}
\end{examplelst}
szintén helyes eredményt ad a vázlatfában is.
+\huazcmd|\azseparator{!<kód>!}|
+
+Ezzel lehet megadni, hogy a határozott névelő és a \code|!<szöveg>!| mivel legyen elválasztva.
+Alapértelmezetten ez a törhetetlen normál méretű szóköz, ami
+\begin{examplelst}
+\azseparator{~}
+\end{examplelst}
+módon lett beállítva.
+Ha át akarjuk állítani például törhető szóközre akkor ez
+\begin{examplelst}
+\azseparator{ }
+\end{examplelst}
+módon tehető meg.
+
\subsection{Rövidítések}
-A \verb|\ref|, \verb|\pageref|, \verb|\eqref|, \verb|\cite| kereszthivatkozások (csak a \verb|*| nélküli verziók) elé nem csak az előbbi parancsokkal tehetünk határozott névelőt, mert mindegyiknek van egy rövidített egyparancsos verziója is:
+A \code|\ref|, \code|\ref*|, \code|\eqref|, \code|\refeq|, \code|\pageref|, \code|\pageref*|, \code|\cite| kereszthivatkozások elé nem csak az előbbi parancsokkal tehetünk határozott névelőt, ugyanis mindegyiknek van egy rövidített egyparancsos verziója is:
+
+\huazcmd|\aref{!<kulcs>!} | $\equiv$ \code|\az{\ref{!<kulcs>!}}|\\
+\huazcmd|\aref*{!<kulcs>!} | $\equiv$ \code|\az{\ref*{!<kulcs>!}}|\\
+\huazcmd|\avref{!<kulcs>!} | $\equiv$ \code|\azv{\ref{!<kulcs>!}}|\\
+\huazcmd|\avref*{!<kulcs>!}| $\equiv$ \code|\azv{\ref*{!<kulcs>!}}|
-\commandinline|\aref{!<kulcs>!} | $\equiv$ \verbinline|\az{\ref{!<kulcs>!}}|\\
-\commandinline|\aref*{!<kulcs>!} | $\equiv$ \verbinline|\az*{\ref{!<kulcs>!}}|\\
-\commandinline|\avref{!<kulcs>!} | $\equiv$ \verbinline|\azv{\ref{!<kulcs>!}}|\\
-\commandinline|\avref*{!<kulcs>!}| $\equiv$ \verbinline|\azv*{\ref{!<kulcs>!}}|
+\huazcmd|\aeqref{!<kulcs>!} | $\equiv$ \code|\az{\eqref{!<kulcs>!}}|\\
+\huazcmd|\aveqref{!<kulcs>!} | $\equiv$ \code|\azv{\eqref{!<kulcs>!}}|
-\commandinline|\aeqref{!<kulcs>!} | $\equiv$ \verbinline|\az{\eqref{!<kulcs>!}}|\\
-\commandinline|\aeqref*{!<kulcs>!} | $\equiv$ \verbinline|\az*{\eqref{!<kulcs>!}}|\\
-\commandinline|\aveqref{!<kulcs>!} | $\equiv$ \verbinline|\azv{\eqref{!<kulcs>!}}|\\
-\commandinline|\aveqref*{!<kulcs>!}| $\equiv$ \verbinline|\azv*{\eqref{!<kulcs>!}}|
+\huazcmd|\arefeq{!<kulcs>!} | $\equiv$ \code|\az{\refeq{!<kulcs>!}}|\\
+\huazcmd|\avrefeq{!<kulcs>!} | $\equiv$ \code|\azv{\refeq{!<kulcs>!}}|
-\commandinline|\apageref{!<kulcs>!} | $\equiv$ \verbinline|\az{\pageref{!<kulcs>!}}|\\
-\commandinline|\apageref*{!<kulcs>!} | $\equiv$ \verbinline|\az*{\pageref{!<kulcs>!}}|\\
-\commandinline|\avpageref{!<kulcs>!} | $\equiv$ \verbinline|\azv{\pageref{!<kulcs>!}}|\\
-\commandinline|\avpageref*{!<kulcs>!}| $\equiv$ \verbinline|\azv*{\pageref{!<kulcs>!}}|
+\huazcmd|\apageref{!<kulcs>!} | $\equiv$ \code|\az{\pageref{!<kulcs>!}}|\\
+\huazcmd|\apageref*{!<kulcs>!} | $\equiv$ \code|\az{\pageref*{!<kulcs>!}}|\\
+\huazcmd|\avpageref{!<kulcs>!} | $\equiv$ \code|\azv{\pageref{!<kulcs>!}}|\\
+\huazcmd|\avpageref*{!<kulcs>!}| $\equiv$ \code|\azv{\pageref*{!<kulcs>!}}|
-\commandinline|\acite[!<szöveg>!]{!<kulcs1>!,!<kulcs2>!,!...!} | $\equiv$ \verbinline|\az{\cite[!<szöveg>!]{!<kulcs1>!,!<kulcs2>!,!...!}}|\\
-\commandinline|\acite*[!<szöveg>!]{!<kulcs1>!,!<kulcs2>!,!...!} | $\equiv$ \verbinline|\az*{\cite[!<szöveg>!]{!<kulcs1>!,!<kulcs2>!,!...!}}|\\
-\commandinline|\avcite[!<szöveg>!]{!<kulcs1>!,!<kulcs2>!,!...!} | $\equiv$ \verbinline|\azv{\cite[!<szöveg>!]{!<kulcs1>!,!<kulcs2>!,!...!}}|\\
-\commandinline|\avcite*[!<szöveg>!]{!<kulcs1>!,!<kulcs2>!,!...!}| $\equiv$ \verbinline|\azv*{\cite[!<szöveg>!]{!<kulcs1>!,!<kulcs2>!,!...!}}|
+\huazcmd|\acite[!<szöveg>!]{!<kulcs1>!,!<kulcs2>!,!...!} | $\equiv$ \code|\az{\cite[!<szöveg>!]{!<kulcs1>!,!<kulcs2>!,!...!}}|\\
+\huazcmd|\avcite[!<szöveg>!]{!<kulcs1>!,!<kulcs2>!,!...!} | $\equiv$ \code|\azv{\cite[!<szöveg>!]{!<kulcs1>!,!<kulcs2>!,!...!}}|
-A parancsok nevében az első ,,\texttt{a}'' betű kicserélhető ,,\texttt{A}'' betűre. Ekkor a határozott névelő nagybetűvel fog kezdődni, ami mondatok elején szükséges:
+A parancsok nevében az első \code{a} betű kicserélhető \code{A} betűre.
+Ekkor a határozott névelő nagybetűvel kezdődik, ami mondatok elején szükséges:
-\commandinline|\Aref \Avref \Aeqref \Aveqref \Apageref \Avpageref \Acite \Avcite|
+\huazcmd|\Aref \Aref* \Avref \Avref*|\\
+\huazcmd|\Aeqref \Aveqref|\\
+\huazcmd|\Arefeq \Avrefeq|\\
+\huazcmd|\Apageref \Apageref* \Avpageref \Avpageref*|\\
+\huazcmd|\Acite \Avcite|
Például
\begin{examplelst}
\section{Cím}\label{seca}
\section{Cím}\label{secb}
-\Aref{seca}.~és \aref{secb}.~szakaszban
+\Aref{seca}.~és \aref{secb}.~szakaszokban
\end{examplelst}
-eredménye ,,Az 1. és a 2. szakaszban''.
-
-\subsection{A huaz kapocs}\label{subsec-kapocs}
-
-Amikor a \huaz\ csomag megkeresi a megfelelő határozott névelőt, akkor a szövegben található \verb|\ref|, \verb|\ref*|, \verb|\pageref|, \verb|\pageref*|, \verb|\eqref|, \verb|\cite| kereszthivatkozásokat lecseréli a kifejthető verziójukra, továbbá a kifejtés során egy adott listában található formázó parancsokat (\verb|\emph|, \verb|\textbf|, \verb|\small|, stb.) figyelmen kívül hagyja. Emiatt lehetséges, hogy például a következő kódok működnek:
+eredménye \huqq{Az 1. és a 2. szakaszokban}.
+
+\subsection{Ignorált parancsok}\label{subsec-ignoralt-parancsok}
+
+Amikor a \huaz\ csomag megkeresi a megfelelő határozott névelőt, akkor a szövegben a következő parancsokat a nem szöveget tároló argumentumaikkal együtt (ha van) figyelmen kívül hagyja:
+
+\begin{multicols}{4}
+\code|\bfseries|\\
+\code|\color|\\
+\code|\emph|\\
+\code|\em|\\
+\code|\enquote|\\
+\code|\fbox|\\
+\code|\fontencoding|\\
+\code|\fontfamily|\\
+\code|\fontseries|\\
+\code|\fontshape|\\
+\code|\fontsize|\\
+\code|\footnotesize|\\
+\code|\framebox|\\
+\code|\hbox|\\
+\code|\href|\\
+\code|\huge|\\
+\code|\Huge|\\
+\code|\itshape|\\
+\code|\large|\\
+\code|\Large|\\
+\code|\LARGE|\\
+\code|\lowercase|\\
+\code|\makebox|\\
+\code|\MakeLowercase|\\
+\code|\MakeUppercase|\\
+\code|\mbox|\\
+\code|\mdseries|\\
+\code|\negthinspace|\\
+\code|\normalfont|\\
+\code|\normalsize|\\
+\code|\num|\\
+\code|\rmfamily|\\
+\code|\scriptsize|\\
+\code|\scshape|\\
+\code|\selectfont|\\
+\code|\sffamily|\\
+\code|\slshape|\\
+\code|\small|\\
+\code|\sscshape|\\
+\code|\swshape|\\
+\code|\textbf|\\
+\code|\textcolor|\\
+\code|\textit|\\
+\code|\textmd|\\
+\code|\textnormal|\\
+\code|\textqq|\\
+\code|\textrm|\\
+\code|\textsc|\\
+\code|\textsf|\\
+\code|\textsl|\\
+\code|\textssc|\\
+\code|\textsw|\\
+\code|\texttt|\\
+\code|\textulc|\\
+\code|\textup|\\
+\code|\tiny|\\
+\code|\told|\\
+\code|\ttfamily|\\
+\code|\ulcshape|\\
+\code|\underline|\\
+\code|\uppercase|\\
+\code|\upshape|\\
+\code|\usefont|
+\end{multicols}
+
+Emiatt lehetséges, hogy a következő kódok jól működnek:
\begin{examplelst}
\newcommand{\osztaly}{V.B}
Idén \az{\textbf{\osztaly}}~osztály rendezi a farsangot.
@@ -329,52 +552,376 @@ Idén \az{\textbf{\osztaly}}~osztály rendezi a farsangot.
\begin{examplelst}
\section{Cím}\label{sec}
-\az{\textbf{\ref{sec}}}
+\az{\footnotesize\ref{sec}}
\end{examplelst}
-De a következő kód is jól fog működni:
+De ez is helyes eredményt ad:
\begin{examplelst}
\newcommand{\myfont}[1]{{\usefont{T1}{yv1d}{m}{n}#1}}
-\newcommand{\osztaly}{X.A~osztály}
+\newcommand{\osztaly}{V.A~osztály}
\az{\myfont{\osztaly}}
\end{examplelst}
-Ez nem azért van, mert a \verb|\myfont| is szerepel ebben az adott listában, hanem azért, mert a \verb|\myfont| kifejtésében található \verb|\usefont| benne van.
+Azért kapunk helyes eredményt, mert a \code|\myfont| kifejtésében található \code|\usefont| szerepel az előző listában. Ha a \code|\myfont| erős parancsként lett volna definiálva, akkor már nem működne megfelelően az előző kód (lásd később). Ebben az esetben a \code|\myfont| parancsot is fel kell venni a listára.
+
+\huazcmd|\huazignorecmd[!<opció>!]{!<parancs>!}|
-\commandinline|\AddToHook{huaz}{!<kód>!}|
+Az ignoráló listát ezzel lehet bővíteni.
+A \code|!<parancs>!| helyére az ignorálandó parancsot kell írni az argumentumai és \code{*} nélkül.
+Az \code|!<opció>!| \code{0} és \code{9} közötti egész szám lehet.
+Amennyiben ezektől eltérő a beírt \code|!<opció>!|, akkor erre figyelmeztet a fordító.
+A használata három esetre bontható.
-Amennyiben olyan formázó parancsot használ, ami még ezen a listán nem található, akkor az a felhasználó által is bővíthető. Például a \texttt{shadowtext} csomag \verb|\shadowtext| parancsa nincs a listában, ezért a következő kód eredménye hibás lesz:
+\paragraph{1. eset}
+%
+Opció nélkül használva, a \code|!<parancs>!| a névelő megállapításakor törlődik, de az utána írt \code{*}, opció vagy argumentum nem.
+Deklarációs parancsok esetén jól használható.
+Például a \code|\tiny| parancs így lett besorolva a listába:
+\begin{examplelst}
+\huazignorecmd{\tiny}
+\end{examplelst}
+Ugyanez alkalmazható abban az esetben is, ha a \code|!<parancs>!|-nak nincs csillagos verziója sem opciója, továbbá az első \code|{ }| jelek közé írt argumentuma a figyelembe vett szöveg. Például a \code|\textrm| ilyen, ezért így lett besorolva:
+\begin{examplelst}
+\huazignorecmd{\textrm}
+\end{examplelst}
+
+A \code{shadowtext} csomag \code|\shadowtext| parancsa nincs a listában, ezért a következő kód eredménye hibás lesz:
\begin{examplelst}
\newcommand{\osztaly}{X.A~osztály}
\az{\shadowtext{\osztaly}}
\end{examplelst}
-A listára az
+A listára
\begin{examplelst}
-\AddToHook{huaz}{\def\shadowtext{}}
+\huazignorecmd{\shadowtext}
\end{examplelst}
-módon vehető fel. Ezzel a névelő megállapítása során a \verb|\shadowtext| parancs nem jelent semmit. Tehát a következő kód már megfelelően működik:
+módon vehető fel, mert a \code|\shadowtext| parancsnak sem opciója sem csillagos verziója nincs, továbbá egyetlen argumentuma a szöveg.
+Tehát a következő kód már megfelelően működik:
\begin{examplelst}
-\AddToHook{huaz}{\def\shadowtext{}}
+\huazignorecmd{\shadowtext}
\newcommand{\osztaly}{X.A~osztály}
\az{\shadowtext{\osztaly}}
\end{examplelst}
-Az előző eset a \texttt{huaz} kapocs nélkül így is megoldható:
+Megjegyezzük, hogy az előző eset így is megoldható:
\begin{examplelst}
\newcommand{\osztaly}{X.A~osztály}
\az*{\osztaly}~\shadowtext{\osztaly}
\end{examplelst}
-Ha a \verb|\shadowtext| az \verb|\osztaly| definíciójában szerepel, akkor a \texttt{huaz} kapocs használata nem kerülhető meg:
+Ha a \code|\shadowtext| az \code|\osztaly| definíciójában szerepel, akkor nem tudjuk megkerülni a \code|\huazignorecmd| használatát az előző módon:
\begin{examplelst}
-\AddToHook{huaz}{\def\shadowtext{}}
+\huazignorecmd{\shadowtext}
\newcommand{\osztaly}{\shadowtext{X.A~osztály}}
\az{\osztaly}
\end{examplelst}
-Ha a formázó parancs erős, akkor a \texttt{huaz} kapocs használata szintén nem kerülhető meg. Például
+
+\paragraph{2. eset}
+%
+Ha az \code|!<opció>!| \code{0}, akkor a \code|!<parancs>!| és az utána található első \code|{| jelig található kódok mindegyike ignorálódik a névelő megállapításakor.
+Tehát például
\begin{examplelst}
-\AddToHook{huaz}{\def\myfont{}}
-\DeclareRobustCommand{\myfont}[1]{{\usefont{T1}{yv1d}{m}{n}#1}}
-\renewcommand{\thesection}{\myfont{\arabic{section}}}
+\huazignorecmd[0]{\foo}
+\end{examplelst}
+esetén a
+\begin{examplelst}
+\foo{...} \foo*{...} \foo[...]{...} \foo*[...]{...}
+\end{examplelst}
+kódokban a
+\begin{examplelst}
+\foo \foo* \foo[...] \foo*[...]
+\end{examplelst}
+mindegyike figyelmen kívül lesz hagyva a névelő megállapításakor.
+A \code|\makebox| például
+\begin{examplelst}
+\huazignorecmd[0]{\makebox}
+\end{examplelst}
+módon lett besorolva, ezért például
+\begin{examplelst}
+\makebox[2cm][s]{szöveg}
+\end{examplelst}
+esetén a \code|\makebox[2cm][s]| rész törlődik és csak a \huqq{szöveg} lesz figyelembe véve.
+
+
+Ha a formázó parancs erős, akkor a \code|\huazignorecmd| használata nem kerülhető meg még akkor sem, ha a listán szereplő parancsokkal épül fel.
+Például
+\begin{examplelst}
+\huazignorecmd[0]{\myfont}
+\DeclareRobustCommand{\myfont}[2][cmr]
+ {{\usefont{T1}{#1}{m}{n}#2}}
+\renewcommand{\thesection}{\myfont[yv1d]{\arabic{section}}}
\section{Cím}\label{sec}
\aref{sec}
\end{examplelst}
+Ebben a példában nem hagyható el a \code{[0]}, mert a \code|\myfont|-nak van opciója.
+
+\paragraph{3. eset}
+%
+Ha az \code|!<opció>!| \code{1} és \code{9} közötti egész szám, akkor a \code|\huazignorecmd| parancs a névelő megállapítása során a \code|!<parancs>!|-ot és az utána következő első \code|{| jelig tartó kódokat ignorálja, továbbá ezután az első \code|!<opció>!| darab \code|{ }| jelek közé írt részeket szintén figyelmen kívül hagyja.
+Tehát például
+\begin{examplelst}
+\huazignorecmd[1]{\foo}
+\end{examplelst}
+esetén a
+\begin{examplelst}
+\foo{...} \foo*{...} \foo[...]{...} \foo*[...]{...}
+\end{examplelst}
+kódok mindegyike figyelmen kívül lesz hagyva a névelő megállapításakor.
+Például a \code|\textcolor| parancs
+\begin{examplelst}
+\huazignorecmd[1]{\textcolor}
+\end{examplelst}
+módon lett a listába sorolva, így a
+\begin{examplelst}
+\textcolor[RGB]{20,30,40}{szöveg}
+\end{examplelst}
+parancsban a
+\begin{examplelst}
+\textcolor[RGB]{20,30,40}
+\end{examplelst}
+kódrész ignorálva lesz, és csak a ,,\code{szöveg}'' kerül vizsgálatra a névelő megállapításakor.
+Ha a
+\begin{examplelst}
+\huazignorecmd[2]{\foo}
+\end{examplelst}
+parancsot használjuk, akkor a
+\begin{examplelst}
+\foo{...}{...} \foo*{...}{...}
+\foo[...]{...}{...} \foo*[...]{...}{...}
+\end{examplelst}
+kódok mindegyike figyelmen kívül lesz hagyva a névelő megállapításakor.
+Például a \code|\fontsize| parancs
+\begin{examplelst}
+\huazignorecmd[2]{\fontsize}
+\end{examplelst}
+módon lett a listába sorolva, így a
+\begin{examplelst}
+\fontsize{14pt}{14pt}
+\end{examplelst}
+parancs figyelmen kívül lesz hagyva a névelő megállapításakor.
+
+\subsection{A kereszthivatkozások kifejthető verziói}
+Ha a szöveg elején kereszthivatkozás van, akkor a határozott névelő megállapítása előtt a kereszthivatkozás parancsát le kell cserélni annak kifejthető verziójára.
+A \code{refcount} csomag két ilyen parancsot definiál:
+A \code|\getrefnumber| a \code|\ref|, \code|\ref*|, \code|\eqref|, \code|\refeq| esetén
+használható, a \code|\getpagerefnumber| pedig a \code|\pageref| és \code|\pageref*| esetén.
+
+\huazcmd|\huazrefcmd{!<parancs>!}|
+
+Ezzel a paranccsal elérhető, hogy a \code|!<parancs>!| helyére beírt parancsot és annak csillagos verzióját a határozott névelő megállapítása során a \code|\getrefnumber| paranccsal helyettesítse.
+
+A \code|\ref|, \code|\ref*|, \code|\eqref|, \code|\refeq| parancsok így lettek besorolva a \huaz\ csomagban:
+\begin{examplelst}
+\huazrefcmd{\ref}
+\huazrefcmd{\eqref}
+\huazrefcmd{\refeq}
+\end{examplelst}
+Ezzel már az \code|\eqref*| és \code|\refeq*| is működne, de ezek a csillagos verziók nincsenek definiálva a csillag nélküli verziókat definiáló \code{amsmath} illetve \code{mathtools} csomagokban. Ezt mi is pótolhatjuk, amire \aref{subsec-eqref}.~alszakaszban láthatunk megoldást.
+
+\huazcmd|\huazpagerefcmd{!<parancs>!}|
+
+Ezzel a paranccsal elérhető, hogy a \code|!<parancs>!| helyére beírt parancsot és annak csillagos verzióját a határozott névelő megállapítása során a \code|\getpagerefnumber| paranccsal helyettesítse.
+
+A \code|\pageref| és \code|\pageref*| parancsok így lettek besorolva a \huaz\ csomagban:
+\begin{examplelst}
+\huazrefcmd{\pageref}
+\end{examplelst}
+
+Ezekre láthatunk egy alkalmazást \aref{subsec-autoref}.~alszakaszban.
+
+\subsection{Az \texttt{\textbackslash autoref} és \texttt{\textbackslash autopageref} parancsok}\label{subsec-autoref}
+
+Ezeket a parancsokat a \code{hyperref} csomag definiálja.
+Ezekkel hivatkozva egy címkére, nem csak a sorszám, hanem a sorszámozott egység neve (szakasz, alszakasz, oldal, stb.) is megjelenik link formájában.
+Ezeknek léteznek csillagos verzióik is, melyeknek ugyanaz a hatásuk, de nem generálnak linket.
+
+Magyar nyelvű dokumentumokban nem lehet közvetlenül alkalmazni, mert az angol szabály szerint \huqq{1.~szakasz} helyett \huqq{szakasz~1} lesz az eredménye a következőnek:
+\begin{examplelst}
+\section{Cím}\label{sec}
+\autoref*{sec}
+\end{examplelst}
+A használatához először magyarosítani kell a következő kóddal a \code{hyperref} betöltése után a preambulumban:
+\begin{examplelst}
+\usepackage{regexpatch}
+\makeatletter
+\xpatchcmd{\HyRef@autosetref}{\HyRef@currentHtag}{}{}{}
+\xpatchcmd{\HyRef@autosetref}{\null}
+ {\null.~\HyRef@currentHtag}{}{}
+\xpatchcmd*{\HyRef@testreftype}{~}{}{}{}
+\makeatother
+\RenewDocumentCommand{\autopageref}{sm}{%
+ \IfBooleanTF{#1}
+ {\pageref*{#2}.~oldal}
+ {\hyperref[{#2}]{\pageref*{#2}.~oldal}}}
+\end{examplelst}
+Ezután már \huqq{1.~szakasz} lesz az eredmény.
+
+Ha az így módosított \code|\autoref|, \code|\autoref*|, \code|\autopageref|, \code|\autopageref*| parancsokhoz automatikus határozott névelőt szeretnénk, akkor írjuk be a következőket a \huaz\ betöltése után:
+\begin{examplelst}
+\huazrefcmd{\autoref}
+\huazpagerefcmd{\autopageref}
+\end{examplelst}
+Ezután a következő kód eredménye \huqq{Az 1. szakasz az 1. oldalon kezdődik.} lesz:
+\begin{examplelst}
+\section{Cím}\label{sec}
+\Az{\autoref*{sec}} \az{\autopageref*{sec}on} kezdődik.
+\end{examplelst}
+
+\subsection{Az \texttt{\textbackslash eqref*} és \texttt{\textbackslash refeq*} parancsok}\label{subsec-eqref}
+
+A \code|\ref| és \code|\pageref| parancsoknak definiált a csillagos verziójuk is, amely alapesetben nem különbözik a normál verziótól, de a \code{hyperref} csomaggal használva a csillag nélküli verzió linket generál, míg a csillagos nem.
+
+Az \code{amsmath} csomag által definiált \code|\eqref| a \code{hyperref} csomaggal együtt használva szintén generál linket, de ennek nincs definiálva csillagos verziója, így ekkor a link nélküli verzió nem érhető el közvetlenül.
+További gond az ilyen link nélküli egyenlethivatkozás előtti automatikus névelő megadása.
+
+Négy lehetséges megoldást mutatunk.
+
+\begin{enumerate}
+\item
+A \code{NoHyper} környezet használatával:
+\begin{examplelst}
+\begin{equation}\label{eq}
+a=b
+\end{equation}
+\emph{Lásd \begin{NoHyper}\aeqref{eq}\end{NoHyper}
+ egyenletet!}
+\end{examplelst}
+
+\item
+Az \code|\az*| parancs használatával:
+\begin{examplelst}
+\begin{equation}\label{eq}
+a=b
+\end{equation}
+\emph{Lásd \az*{\ref{eq}} \textup{(\ref*{eq})}
+ egyenletet!}
+\end{examplelst}
+
+\item
+Az \code|\eqrefstyle| parancs definiálásával és a \code|\huazignorecmd| paranccsal, amely az előzőnek egy kényelmesebben használható verziója:
+\begin{examplelst}
+\makeatletter
+\newcommand{\eqrefstyle}[1]{\textup{\tagform@{#1}}}
+\makeatother
+\huazignorecmd{\eqrefstyle}
+
+\begin{equation}\label{eq}
+a=b
+\end{equation}
+\emph{Lásd \az{\eqrefstyle{\ref*{eq}}} egyenletet!}
+\end{examplelst}
+
+\item
+Ebben az esetben definiáljuk az \code|\eqref| csillagos verzióját (az \code{amsmath} betöltése után), amely nem generál linket a \code{hyperref} csomaggal együtt használva:
+\begin{examplelst}
+\makeatletter
+\DeclareDocumentCommand{\eqref}{ s m }{%
+ \textup{\tagform@{%
+ \IfBooleanTF{#1}{\ref*{#2}}{\ref{#2}}%
+ }}%
+}
+\makeatother
+\end{examplelst}
+Ezután a
+\begin{examplelst}
+\begin{equation}\label{eq}
+a=b
+\end{equation}
+\emph{Lásd \az{\eqref*{eq}} egyenletet!}
+\end{examplelst}
+kód helyes eredményt ad, mert a \huaz\ csomagban nem csak az \code|\eqref|, hanem az \code|\eqref*| is a kifejthető \code|\getrefnumber| parancsra lesz kicserélve a határozott névelő meghatározásánál.
+\end{enumerate}
+
+Ugyanez a probléma a \code{mathtools} csomag által definiált \code|\refeq| és a \code{hyperref} csomag együttes használata esetében.
+
+Az előző négy megoldás mindegyikét lehet alkalmazni megfelelő módosításokkal:
+\begin{enumerate}
+\item
+A \code{NoHyper} környezet használatával:
+\begin{examplelst}
+\begin{equation}\label{eq}
+a=b
+\end{equation}
+\emph{Lásd \begin{NoHyper}\arefeq{eq}\end{NoHyper}
+ egyenletet!}
+\end{examplelst}
+
+\item
+Az \code|\az*| parancs használatával:
+\begin{examplelst}
+\begin{equation}\label{eq}
+a=b
+\end{equation}
+\emph{Lásd \az*{\ref{eq}} \textup{\ref*{eq}} egyenletet!}
+\end{examplelst}
+
+\item
+A \code|\refeqstyle| parancs definiálásával:
+\begin{examplelst}
+\newcommand{\refeqstyle}[1]{\textup{#1}}
+
+\begin{equation}\label{eq}
+a=b
+\end{equation}
+\emph{Lásd \az{\refeqstyle{\ref*{eq}}} egyenletet!}
+\end{examplelst}
+Itt nincs szükség a \code|\huazignorecmd{\refeqstyle}| használatára.
+
+\item
+A \code|\refeq*| parancs definiálásával:
+\begin{examplelst}
+\DeclareDocumentCommand{\refeq}{ s m }{%
+ \textup{%
+ \IfBooleanTF{#1}{\ref*{#2}}{\ref{#2}}%
+ }%
+}
+\end{examplelst}
+Ezután a
+\begin{examplelst}
+\begin{equation}\label{eq}
+a=b
+\end{equation}
+\emph{Lásd \az{\refeq*{eq}} egyenletet!}
+\end{examplelst}
+kód helyes eredményt ad, mert a \huaz\ csomagban nem csak a \code|\refeq|, hanem a \code|\refeq*| is a kifejthető \code|\getrefnumber| parancsra lesz kicserélve a határozott névelő meghatározásánál.
+\end{enumerate}
+
+\subsection{Parancsok átdefiniálása a határozott névelő megállapításakor}
+
+A \code|\huazignorecmd|, \code|\huazrefcmd| és \code|\huazpagerefcmd| parancsok is a címben szereplő funkciót látják el, de speciális esetekben.
+Ezek általánosított verziója a következő parancs:
+
+\huazcmd|\huazdefcmd{!<átdefiniáló kód>!}|
+
+Az \code|!<átdefiniáló kód>!| helyére egy parancsnak azt a definícióját kell írni, amelynek a határozott névelő megállapítása során kell érvényesülnie.
+Felsorolunk néhány kódpárt, melyek ekvivalensek egymással:
+\begin{examplelst}
+\huazignorecmd{\tiny}
+\huazdefcmd{\def\tiny{}}
+\end{examplelst}
+
+\begin{examplelst}
+\huazignorecmd[0]{\makebox}
+\huazdefcmd{\def\makebox#1#{}}
+\end{examplelst}
+
+\begin{examplelst}
+\huazignorecmd[1]{\textcolor}
+\huazdefcmd{\def\textcolor#1#{\@gobble}}
+\end{examplelst}
+
+\begin{examplelst}
+\huazrefcmd{\ref}
+\huazdefcmd{\def\ref#1#{\getrefnumber}}
+\end{examplelst}
+
+Alkalmazásként tekintsük a következő kódot, amely hibával fog fordulni:
+\begin{examplelst}
+\newcommand{\tananyag}{\LaTeX\ alapjai}
+A mai óra anyaga \az{\tananyag}.
+\end{examplelst}
+A megfelelő eredményhez a \code|\LaTeX| parancsot át kell definiálni a névelő megállapításakor:
+\begin{examplelst}
+\huazdefcmd{\def\LaTeX{latex}}
+\newcommand{\tananyag}{\LaTeX\ alapjai}
+A mai óra anyaga \az{\tananyag}.
+\end{examplelst}
+Az eredmény \huqq{A mai óra anyaga a \LaTeX.} lesz.
\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/hvqrurl/Changes b/macros/latex/contrib/hvqrurl/Changes
index aa30416b54..2b4551ba30 100644
--- a/macros/latex/contrib/hvqrurl/Changes
+++ b/macros/latex/contrib/hvqrurl/Changes
@@ -1,4 +1,6 @@
hvqrurl.sty:
+0.09 2024-05-16 - added option "forget" to create all codes new
+0.08 2024-05-14 - fix for color setting of the qrcode
0.07 2024-02-06 - allow active chars in linktext
0.06 2024-02-03 - fix for introduced bug with linktext
0.05a 2024-02-02 - modified documentation
diff --git a/macros/latex/contrib/hvqrurl/doc/hvqrurl.pdf b/macros/latex/contrib/hvqrurl/doc/hvqrurl.pdf
index 95b739d2b2..eaf57e1246 100644
--- a/macros/latex/contrib/hvqrurl/doc/hvqrurl.pdf
+++ b/macros/latex/contrib/hvqrurl/doc/hvqrurl.pdf
Binary files differ
diff --git a/macros/latex/contrib/hvqrurl/doc/hvqrurl.tex b/macros/latex/contrib/hvqrurl/doc/hvqrurl.tex
index 89fd8cdea6..175933e943 100644
--- a/macros/latex/contrib/hvqrurl/doc/hvqrurl.tex
+++ b/macros/latex/contrib/hvqrurl/doc/hvqrurl.tex
@@ -1,4 +1,4 @@
-%% $Id: hvqrurl.tex 872 2024-02-06 16:11:47Z herbert $
+%% $Id: hvqrurl.tex 901 2024-05-26 07:18:06Z herbert $
\listfiles
\errorcontextlines=100
\documentclass[twoside=on,usegeometry]{scrartcl}
@@ -38,7 +38,7 @@
linktocpage, colorlinks=true}%
\begin{document}
-\title{Package \texttt{hvqrurl}\\Creating a QR-code of an URL in the margin \\\small ver 0.07}
+\title{Package \texttt{hvqrurl}\\Creating a QR-code of an URL in the margin \\\small ver 0.09}
\author{Herbert Voß\thanks{\protect\url{hvoss@tug.org}}}
\date{\today}
\maketitle
@@ -53,8 +53,30 @@ and
\end{abstract}
-\section{The macros}
+\section{Package option}
+There is only one package option \Lkeyword{forget}. If it is used, then all
+qrcodes are always created new and the already existing codes in the \Lext{aux} file
+are not used. The deafult is not to use this option. For example: 100 qrcodes needs
+about 30 seconds with option \Lkeyword{forget}, but only 4 seconds without it. It is obvious
+that for the first \LaTeX\ run the codes will allways be created new.
+If a qrcode is
+created, e.g. for \hvqrurl{https://pkks.de}, then there is something like
+
+\begin{verbatim}
+\qr@savematrix{https://pkks.de}{2}{3}{11111110001010011011111111000001001110110101000001101110100
+0000011101011101101110101010001000101110110111010001111110010111011000001011010001001000001111111
+1010101010101111111000000001111001110000000001100010000011101011010000000010011010110001101011001
+0011100111001010111101101011001011110011100100011110010100001011010000010010010100101101101100011
+1101111011111111110001101001010000001010011111100011100011000101011111100100000000011101110100010
+0011111111001100110101010001100000100101100110001001110111010001010011111100001011101000110010110
+010100101110101010010000011101110000010101110101001100001111111001001011100001001}
+\end{verbatim}
+
+in the \Lext{aux} file (all in one line!). This is always used in following
+\LaTeX\ runs and created only new if the URL changes or the option \Lkeyword{forget}
+is used.
+\section{The macros}
\begin{BDef}
\Lcs{hvqrset}\Largb{key=value, \ldots}\\
@@ -100,7 +122,7 @@ if hyperref is aktive.
\subsection{Color of the QR code}
-Without using \LPack{hyperref} the default color is \Lkeyval{black}. It can be changed by
+The default color is \Lkeyval{black}. It can be changed by
the optional argument \Lkeyword{qrcolor}. The package
\LPack{xcolor}\hvqrurl*[qrlink=nolink,qrcolor=red!40!white]{https://mirror.ctan.org/pkg/xcolor}
is loaded by default,
diff --git a/macros/latex/contrib/hvqrurl/latex/hvqrurl.sty b/macros/latex/contrib/hvqrurl/latex/hvqrurl.sty
index af29f1a446..29ddf89c21 100644
--- a/macros/latex/contrib/hvqrurl/latex/hvqrurl.sty
+++ b/macros/latex/contrib/hvqrurl/latex/hvqrurl.sty
@@ -1,4 +1,4 @@
-%% $Id: hvqrurl.sty 872 2024-02-06 16:11:47Z herbert $
+%% $Id: hvqrurl.sty 901 2024-05-26 07:18:06Z herbert $
%%
%% This file is distributed under the terms of the LaTeX Project Public
%% License from CTAN archives in directory macros/latex/base/lppl.txt.
@@ -7,19 +7,25 @@
% Copyright 2019,21,23,24 Herbert Voss hvoss@tug.org
%%
\ProvidesPackage{hvqrurl}[%
- 2024/02/06 v.0.07 (Herbert Voss) Supports qr images into the margin (hv)]
+ 2024/05/26 v.0.09 (Herbert Voss) Supports qr images into the margin (hv)]
%
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{url}
\RequirePackage{xcolor}
\RequirePackage{marginnote}
-\RequirePackage{qrcode}
+%\RequirePackage{qrcode}
\RequirePackage{xkeyval}
-\newif\if@no@hyperref \@no@hyperreffalse
+\newif\if@hv@forget
+\@hv@forgetfalse
+\DeclareOption{forget}{\@hv@forgettrue}
+
+\newif\if@no@hyperref
+\@no@hyperreffalse
\DeclareOption{nohyperref}{\@no@hyperreftrue}
\ProcessOptions
+\if@hv@forget\RequirePackage[forget]{qrcode}\else\RequirePackage{qrcode}\fi
\if@no@hyperref\else\RequirePackage{hyperref}\fi
\newlength\qr@url@qrheight
@@ -33,6 +39,8 @@
\define@key{hvqr}{linktext}[]{\def\qr@url@linktext{#1}}
\define@boolkey{hvqr}[hv@]{qrreverse}[true]{}
+\newcommand*\qr@url@qr@nolink{nolink}
+
\setkeys{hvqr}{qrheight,qrcolor=black,qradjust,qrlevel,qrlink=link,
qrreverse=false,linktext={}}% the default setting
@@ -46,10 +54,6 @@
\newcommand*\hvqr@@url[2][]{%
\begingroup
\providecommand*\qr@blank{0}%
- \ifx\relax#1\relax \else\hvqrset{#1}\fi
- % Set options for package qrcode
- \expandafter\qrset\expandafter{\qr@url@qrlink,height=\qr@url@qrheight,level=\qr@url@qrlevel}%
- \ifhv@qrreverse\reversemarginpar\fi
\if@tempswa
\ifx\@empty\qr@url@linktext % alternative link text?
\edef\hv@foo{\detokenize\expandafter{#2}}%
@@ -62,9 +66,24 @@
\href{\hv@fooA}{\hv@fooB}%
\fi
\fi
- \edef\reserved@a{\noexpand\marginnote{\noexpand\color{qr@url@qrcolor}\noexpand\qrcode{%
+% \endgroup
+% \begingroup
+ \ifx\relax#1\relax \else\hvqrset{#1}\fi
+ % Set options for package qrcode
+ \expandafter\qrset\expandafter{\qr@url@qrlink,height=\qr@url@qrheight,level=\qr@url@qrlevel}%
+ \ifhv@qrreverse\reversemarginpar\fi
+ \if@no@hyperref
+ \color{qr@url@qrcolor}%
+ \else
+ \ifx\qr@url@qrlink\qr@url@qr@nolink
+ \color{qr@url@qrcolor}%
+ \else
+ \hypersetup{urlcolor=qr@url@qrcolor}%
+ \fi
+ \fi
+ \edef\reserved@a{\noexpand\marginnote{\noexpand\qrcode{%
\detokenize\expandafter{#2}}}[\qr@url@qradjust]}%
- \reserved@a
+ \reserved@a
\endgroup
}
diff --git a/macros/latex/contrib/hyperref/ChangeLog.txt b/macros/latex/contrib/hyperref/ChangeLog.txt
index 28d6ff9240..7d8f3b3a24 100644
--- a/macros/latex/contrib/hyperref/ChangeLog.txt
+++ b/macros/latex/contrib/hyperref/ChangeLog.txt
@@ -1,3 +1,17 @@
+2024-05-25 Ulrike Fischer
+ * hyperref.dtx: load stringenc always to allow the use of pdfencoding in a group.
+
+2024-05-22 Ulrike Fischer
+ * hyperref.dtx: add \@makeother{:} to \hyper@normalise, issue #340
+
+2024-04-22 Ulrike Fischer
+ * hyperref.dtx: remove auxhook package.
+
+2024-02-14 Ulrike Fischer
+ * hyperref.dtx: allow commands in counter names
+issue #330
+
+Version: 2024-01-20 v7.01h
2024-01-20 Ulrike Fischer
* hyperref.dtx: alias for \deferred@thm@head to allow patching if czech is used,
issue #324
@@ -5,7 +19,6 @@ issue #324
2024-01-20 Ulrike Fischer
* create xr-hyper.dtx, align it with the current xr.dtx to prepare the merge
-Version: 2024-01-20 v7.01h
2024-01-19 Ulrike Fischer
* xr-hyper.sty: add support for properties, issue latex3/latex2e#1180
diff --git a/macros/latex/contrib/hyperref/README.md b/macros/latex/contrib/hyperref/README.md
index 0718a1e221..7161209179 100644
--- a/macros/latex/contrib/hyperref/README.md
+++ b/macros/latex/contrib/hyperref/README.md
@@ -1,6 +1,6 @@
# README for hyperref bundle
-Version 2024-01-20 v7.01h
+Version 2024-05-23 v7.01i
## INTRODUCTION
diff --git a/macros/latex/contrib/hyperref/doc/backref.pdf b/macros/latex/contrib/hyperref/doc/backref.pdf
index c145263b55..ae783bd0cf 100644
--- a/macros/latex/contrib/hyperref/doc/backref.pdf
+++ b/macros/latex/contrib/hyperref/doc/backref.pdf
Binary files differ
diff --git a/macros/latex/contrib/hyperref/doc/hyperref-doc.html b/macros/latex/contrib/hyperref/doc/hyperref-doc.html
index b83a28781f..70741ce170 100644
--- a/macros/latex/contrib/hyperref/doc/hyperref-doc.html
+++ b/macros/latex/contrib/hyperref/doc/hyperref-doc.html
@@ -25,7 +25,7 @@ href="https://github.com/latex3/hyperref/issues" class="url" ><span
class="ec-lmvtt-10x-x-120">https://github.com/latex3/hyperref/issues</span></a><span
class="ec-lmr-12">)</span></div><br />
<div class="date" ><span
-class="ec-lmr-12">2024-01-20 v7.01h</span></div>
+class="ec-lmr-12">2024-05-23 v7.01i</span></div>
</div>
<h3 class="likesectionHead"><a
id="x1-1000"></a>Contents</h3>
diff --git a/macros/latex/contrib/hyperref/doc/hyperref-doc.pdf b/macros/latex/contrib/hyperref/doc/hyperref-doc.pdf
index fff97a2b36..51e6b0d29b 100644
--- a/macros/latex/contrib/hyperref/doc/hyperref-doc.pdf
+++ b/macros/latex/contrib/hyperref/doc/hyperref-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/hyperref/doc/hyperref-doc.tex b/macros/latex/contrib/hyperref/doc/hyperref-doc.tex
index ea17fc7817..55b0476967 100644
--- a/macros/latex/contrib/hyperref/doc/hyperref-doc.tex
+++ b/macros/latex/contrib/hyperref/doc/hyperref-doc.tex
@@ -166,7 +166,7 @@
}
\makeatother
\title{Hypertext marks in \hologo{LaTeX}: a manual for \xpackage{hyperref}}
-\date{2024-01-20 v7.01h}
+\date{2024-05-23 v7.01i}
\begin{document}
diff --git a/macros/latex/contrib/hyperref/doc/hyperref-doc2.html b/macros/latex/contrib/hyperref/doc/hyperref-doc2.html
index e24d5ff1cd..a3d6f2bce0 100644
--- a/macros/latex/contrib/hyperref/doc/hyperref-doc2.html
+++ b/macros/latex/contrib/hyperref/doc/hyperref-doc2.html
@@ -12,8 +12,8 @@
>
<div class="footnote-text">
<!--l. 212--><p class="indent" > <span class="footnote-mark"><a
- id="fn1x0"><a
- id="x2-4002x2"></a> <sup class="textsuperscript">1</sup></a></span><span
+ id="x2-4002x2"></a><a
+ id="fn1x0"> <sup class="textsuperscript">1</sup></a></span><span
class="ec-lmr-8">Now: </span><a
href="https://ctan.org/tex-archive/support/hypertex/hypertex" class="url" ><span
class="ec-lmvtt-10x-x-80">https://ctan.org/tex-archive/support/hypertex/hypertex</span></a></div>
diff --git a/macros/latex/contrib/hyperref/doc/hyperref-doc3.html b/macros/latex/contrib/hyperref/doc/hyperref-doc3.html
index 516b3b2573..5307489974 100644
--- a/macros/latex/contrib/hyperref/doc/hyperref-doc3.html
+++ b/macros/latex/contrib/hyperref/doc/hyperref-doc3.html
@@ -12,8 +12,8 @@
>
<div class="footnote-text">
<!--l. 230--><p class="indent" > <span class="footnote-mark"><a
- id="fn2x0"><a
- id="x3-4004x2"></a> <sup class="textsuperscript">2</sup></a></span><span
+ id="x3-4004x2"></a><a
+ id="fn2x0"> <sup class="textsuperscript">2</sup></a></span><span
class="ec-lmr-8">This is borrowed from an article by Arthur Smith.</span></div>
</body></html>
diff --git a/macros/latex/contrib/hyperref/doc/hyperref-doc4.html b/macros/latex/contrib/hyperref/doc/hyperref-doc4.html
index cada83835b..1003f3d1c8 100644
--- a/macros/latex/contrib/hyperref/doc/hyperref-doc4.html
+++ b/macros/latex/contrib/hyperref/doc/hyperref-doc4.html
@@ -12,8 +12,8 @@
>
<div class="footnote-text">
<!--l. 300--><p class="indent" > <span class="footnote-mark"><a
- id="fn3x0"><a
- id="x4-4006x2"></a> <sup class="textsuperscript">3</sup></a></span><span
+ id="x4-4006x2"></a><a
+ id="fn3x0"> <sup class="textsuperscript">3</sup></a></span><span
class="ec-lmr-8">Make sure you turn off the partial font downloading supported by </span><span
class="ec-lmss-8">dvips </span><span
class="ec-lmr-8">and </span><span
diff --git a/macros/latex/contrib/hyperref/doc/hyperref-doc5.html b/macros/latex/contrib/hyperref/doc/hyperref-doc5.html
index e8d78ad09f..040bfb56b8 100644
--- a/macros/latex/contrib/hyperref/doc/hyperref-doc5.html
+++ b/macros/latex/contrib/hyperref/doc/hyperref-doc5.html
@@ -12,8 +12,8 @@
>
<div class="footnote-text">
<!--l. 338--><p class="indent" > <span class="footnote-mark"><a
- id="fn4x0"><a
- id="x5-5002x3"></a> <sup class="textsuperscript">4</sup></a></span><span
+ id="x5-5002x3"></a><a
+ id="fn4x0"> <sup class="textsuperscript">4</sup></a></span><span
class="ec-lmr-8">But work has started to reduce the number of redefinition and so the dependencies on the loading</span>
<span
class="ec-lmr-8">order.</span></div>
diff --git a/macros/latex/contrib/hyperref/doc/hyperref-doc6.html b/macros/latex/contrib/hyperref/doc/hyperref-doc6.html
index 8d8b5298b1..3f287f8bb4 100644
--- a/macros/latex/contrib/hyperref/doc/hyperref-doc6.html
+++ b/macros/latex/contrib/hyperref/doc/hyperref-doc6.html
@@ -12,8 +12,8 @@
>
<div class="footnote-text">
<span class="footnote-mark"><a
- id="fn5x0"><a
- id="x6-29002x7"></a> <sup class="textsuperscript">5</sup></a></span><span
+ id="x6-29002x7"></a><a
+ id="fn5x0"> <sup class="textsuperscript">5</sup></a></span><span
class="ec-lmr-8">This section moved from the README file, needs more integration into the manual</span></div>
</body></html>
diff --git a/macros/latex/contrib/hyperref/doc/hyperref-doc7.html b/macros/latex/contrib/hyperref/doc/hyperref-doc7.html
index 767dd0b5b4..30410c45c9 100644
--- a/macros/latex/contrib/hyperref/doc/hyperref-doc7.html
+++ b/macros/latex/contrib/hyperref/doc/hyperref-doc7.html
@@ -12,8 +12,8 @@
>
<div class="footnote-text">
<!--l. 2886--><p class="indent" > <span class="footnote-mark"><a
- id="fn6x0"><a
- id="x7-64002x11"></a> <sup class="textsuperscript">6</sup></a></span><span
+ id="x7-64002x11"></a><a
+ id="fn6x0"> <sup class="textsuperscript">6</sup></a></span><span
class="ec-lmr-8">It will be merged with the </span><span
class="ec-lmss-8">xr </span><span
class="ec-lmr-8">package soon</span></div>
diff --git a/macros/latex/contrib/hyperref/doc/hyperref-doc8.html b/macros/latex/contrib/hyperref/doc/hyperref-doc8.html
index dc87a971db..4a67e9b1b2 100644
--- a/macros/latex/contrib/hyperref/doc/hyperref-doc8.html
+++ b/macros/latex/contrib/hyperref/doc/hyperref-doc8.html
@@ -12,8 +12,8 @@
>
<div class="footnote-text">
<span class="footnote-mark"><a
- id="fn7x0"><a
- id="x8-104002x12"></a> <sup class="textsuperscript">7</sup></a></span><span
+ id="x8-104002x12"></a><a
+ id="fn7x0"> <sup class="textsuperscript">7</sup></a></span><span
class="ec-lmr-8">This section moved from the README file, needs more integration into the manual</span></div>
</body></html>
diff --git a/macros/latex/contrib/hyperref/doc/hyperref-doc9.html b/macros/latex/contrib/hyperref/doc/hyperref-doc9.html
index da2b18955e..c6f5c87fc8 100644
--- a/macros/latex/contrib/hyperref/doc/hyperref-doc9.html
+++ b/macros/latex/contrib/hyperref/doc/hyperref-doc9.html
@@ -12,8 +12,8 @@
>
<div class="footnote-text">
<span class="footnote-mark"><a
- id="fn8x0"><a
- id="x9-108002x13"></a> <sup class="textsuperscript">8</sup></a></span><span
+ id="x9-108002x13"></a><a
+ id="fn8x0"> <sup class="textsuperscript">8</sup></a></span><span
class="ec-lmr-8">This section moved from the README file, needs more integration into the manual</span></div>
</body></html>
diff --git a/macros/latex/contrib/hyperref/doc/hyperref-linktarget.pdf b/macros/latex/contrib/hyperref/doc/hyperref-linktarget.pdf
index 7392570e8a..f95e9380f6 100644
--- a/macros/latex/contrib/hyperref/doc/hyperref-linktarget.pdf
+++ b/macros/latex/contrib/hyperref/doc/hyperref-linktarget.pdf
Binary files differ
diff --git a/macros/latex/contrib/hyperref/doc/hyperref.pdf b/macros/latex/contrib/hyperref/doc/hyperref.pdf
index cb1dbc9af6..62ce7aba61 100644
--- a/macros/latex/contrib/hyperref/doc/hyperref.pdf
+++ b/macros/latex/contrib/hyperref/doc/hyperref.pdf
Binary files differ
diff --git a/macros/latex/contrib/hyperref/doc/nameref.pdf b/macros/latex/contrib/hyperref/doc/nameref.pdf
index acea390806..47209adb7c 100644
--- a/macros/latex/contrib/hyperref/doc/nameref.pdf
+++ b/macros/latex/contrib/hyperref/doc/nameref.pdf
Binary files differ
diff --git a/macros/latex/contrib/hyperref/doc/xr-hyper.pdf b/macros/latex/contrib/hyperref/doc/xr-hyper.pdf
index 65cfddbafa..3b4395c0f6 100644
--- a/macros/latex/contrib/hyperref/doc/xr-hyper.pdf
+++ b/macros/latex/contrib/hyperref/doc/xr-hyper.pdf
Binary files differ
diff --git a/macros/latex/contrib/hyperref/hluatex.dtx b/macros/latex/contrib/hyperref/hluatex.dtx
index 092b41aad2..8a90953abb 100644
--- a/macros/latex/contrib/hyperref/hluatex.dtx
+++ b/macros/latex/contrib/hyperref/hluatex.dtx
@@ -1,6 +1,6 @@
% \iffalse
% Source File: hluatex.dtx
-% 2024-01-20 v7.01h
+% 2024-05-23 v7.01i
%
% Copyright
% 2016-2019 Oberdiek Package Support Group
@@ -31,13 +31,12 @@
%
% \begin{macrocode}
%<*luatex>
-%% 2024-01-20 v7.01h
+%% 2024-05-23 v7.01i
%% force unicode encoding, see issue #101
%% code mostly copied from hxetex.def
\HyPsd@LoadUnicode
\Hy@unicodetrue
\let\HyPsd@pdfencoding\HyPsd@pdfencoding@unicode
-\HyPsd@LoadStringEnc
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% remains of luatex85 package
\protected\def\pdfcatalog {\pdfextension catalog }
diff --git a/macros/latex/contrib/hyperref/hyperref-linktarget.dtx b/macros/latex/contrib/hyperref/hyperref-linktarget.dtx
index 2348e91e8f..c35b68d116 100644
--- a/macros/latex/contrib/hyperref/hyperref-linktarget.dtx
+++ b/macros/latex/contrib/hyperref/hyperref-linktarget.dtx
@@ -53,7 +53,7 @@
% }^^A
% }
%
-% \date{Version 2024-01-20 v7.01h}
+% \date{Version 2024-05-23 v7.01i}
%
% \maketitle
% \begin{documentation}
diff --git a/macros/latex/contrib/hyperref/hyperref-patches.dtx b/macros/latex/contrib/hyperref/hyperref-patches.dtx
index 0f23ee5525..c9ffbf15bc 100644
--- a/macros/latex/contrib/hyperref/hyperref-patches.dtx
+++ b/macros/latex/contrib/hyperref/hyperref-patches.dtx
@@ -55,7 +55,7 @@
% }^^A
% }
%
-% \date{Version 2024-01-20 v7.01h}
+% \date{Version 2024-05-23 v7.01i}
%
% \maketitle
% \begin{documentation}
diff --git a/macros/latex/contrib/hyperref/hyperref.dtx b/macros/latex/contrib/hyperref/hyperref.dtx
index 2c6347a623..8f6096d77d 100644
--- a/macros/latex/contrib/hyperref/hyperref.dtx
+++ b/macros/latex/contrib/hyperref/hyperref.dtx
@@ -51,7 +51,7 @@
%<puvnenc>\ProvidesFile{puvnenc.def}
%<puarenc>\ProvidesFile{puarenc.def}
%<psdextra>\ProvidesFile{psdextra.def}
-%<!none&!packageEnd> [2024-01-20 v7.01h %
+%<!none&!packageEnd> [2024-05-23 v7.01i %
%<package> Hypertext links for LaTeX]
%<nohyperref> Dummy hyperref (SR)]
%<driver> Hyperref documentation driver file]
@@ -594,6 +594,7 @@
% change 2021-08-14: require expl3
% change 2023-11-26: no longer require pdftexcmds
% change 2023-11-26: no longer require expl3, we assume kernel is new enough.
+% change 2024-05-23: load stringenc always (for pdfx)
% \begin{macrocode}
\RequirePackage{iftex}[2019/10/24]
\RequirePackage{keyval}[1997/11/10]
@@ -601,9 +602,9 @@
\RequirePackage{kvdefinekeys}[2011/04/07]
\RequirePackage{pdfescape}[2007/11/11]
\RequirePackage{hycolor}
-\RequirePackage{auxhook}[2009/12/14]
\RequirePackage{nameref}[2012/07/28]
\RequirePackage{etoolbox}
+\RequirePackage{stringenc}[2009/12/15]%
\def\Hy@Error{\PackageError{hyperref}}
\def\Hy@Warning{\PackageWarning{hyperref}}
\def\Hy@WarningNoLine{\PackageWarningNoLine{hyperref}}
@@ -1864,30 +1865,27 @@
%
% \begin{macrocode}
\ifx\HyPsd@pdfencoding\HyPsd@pdfencoding@auto
- \@ifundefined{StringEncodingConvertTest}{%
- }{%
- \EdefUnescapeString\HyPsd@temp#1%
- \iftutex
- \let\HyPsd@UnescapedString\HyPsd@temp
- \StringEncodingConvertTest\HyPsd@temp\HyPsd@temp
- {utf16be}{ascii-print}{%
- \EdefEscapeString\HyPsd@temp\HyPsd@temp
- \global\let#1\HyPsd@temp
- \HyPsd@EscapeTeX#1%
- \Hy@unicodefalse
- }{%
- \HyPsd@EscapeTeX#1%
- }%
- \else
- \StringEncodingConvertTest\HyPsd@temp\HyPsd@temp
- {utf16be}{pdfdoc}{%
- \EdefEscapeString\HyPsd@temp\HyPsd@temp
- \global\let#1\HyPsd@temp
- \HyPsd@EscapeTeX#1%
- \Hy@unicodefalse
- }{}%
- \fi
- }%
+ \EdefUnescapeString\HyPsd@temp#1%
+ \iftutex
+ \let\HyPsd@UnescapedString\HyPsd@temp
+ \StringEncodingConvertTest\HyPsd@temp\HyPsd@temp
+ {utf16be}{ascii-print}{%
+ \EdefEscapeString\HyPsd@temp\HyPsd@temp
+ \global\let#1\HyPsd@temp
+ \HyPsd@EscapeTeX#1%
+ \Hy@unicodefalse
+ }{%
+ \HyPsd@EscapeTeX#1%
+ }%
+ \else
+ \StringEncodingConvertTest\HyPsd@temp\HyPsd@temp
+ {utf16be}{pdfdoc}{%
+ \EdefEscapeString\HyPsd@temp\HyPsd@temp
+ \global\let#1\HyPsd@temp
+ \HyPsd@EscapeTeX#1%
+ \Hy@unicodefalse
+ }{}%
+ \fi
\fi
\fi
% \end{macrocode}
@@ -4819,9 +4817,6 @@
\hypersetup{unicode}%
\ifHy@unicode
\def\HyPsd@pdfencoding{#1}%
- \ifx\HyPsd@pdfencoding\HyPsd@pdfencoding@auto
- \HyPsd@LoadStringEnc
- \fi
\else
\Hy@Warning{Cannot switch to unicode bookmarks}%
\let\HyPsd@pdfencoding\HyPsd@pdfencoding@pdfdoc
@@ -4844,22 +4839,6 @@
% \begin{macrocode}
\let\HyPsd@pdfencoding\HyPsd@pdfencoding@unicode
\HyPsd@LoadUnicode
-\def\HyPsd@LoadStringEnc{%
- \RequirePackage{stringenc}[2009/12/15]%
- \let\HyPsd@LoadStringEnc\relax
-}
-\Hy@AtBeginDocument{%
- \@ifpackageloaded{stringenc}{%
- \let\HyPsd@LoadStringEnc\relax
- }{%
- \def\HyPsd@LoadStringEnc{%
- \Hy@WarningNoLine{%
- Missing package `stringenc'. Use `pdfencoding=auto'\MessageBreak
- in the preamble or load the package there%
- }%
- }%
- }%
-}
% \end{macrocode}
%
% \begin{macrocode}
@@ -7414,7 +7393,8 @@
% command, you can use |#| and |%| unescaped, to produce themselves.
% even if, say, |#| is entered as |#| it will be converted to |\#|
% so it does not die if written to an aux file etc. |\#| will write
-% as |#| locally while making |\special|s.
+% as |#| locally while making |\special|s. The catcode |:| is set to other
+% to avoid problems with expl3 syntax.
% \begin{macrocode}
\begingroup
\endlinechar=-1 %
@@ -7427,6 +7407,7 @@
\catcode`\&\active
\gdef\hyper@normalise{^^A
\begingroup
+ \@makeother{:}^^A
\catcode`\^^M\active
\def^^M{ }^^A
\catcode`\%\active
@@ -10119,7 +10100,6 @@
\else
\let\HyPsd@pdfencoding\HyPsd@pdfencoding@auto
\fi
-\HyPsd@LoadStringEnc
\define@key{Hyp}{unicode}[true]{%
\Hy@boolkey{unicode}{#1}%
\ifHy@unicode
@@ -12035,14 +12015,17 @@
% The whole theorem business makes up new counters on the fly;
% we are going to intercept this. Sigh. Do it at the level where
% new counters are defined.
+% change 2024-02-14: use a csname to handle counter names with commands,
+% see issue \#330
% \begin{macrocode}
\@ifundefined{hyper@nopatch@counter}
{
\let\H@definecounter\@definecounter
\def\@definecounter#1{%
\H@definecounter{#1}%
- \expandafter\gdef\csname theH#1\endcsname{\arabic{#1}}%
- }
+ \expandafter
+ \gdef\csname theH#1\expandafter\endcsname\expandafter
+ {\expandafter\@arabic\csname c@#1\endcsname}}%
}{}
% \end{macrocode}
% But what if they have used the optional argument to e.g. |\newtheorem|
diff --git a/macros/latex/contrib/hyperref/xr-hyper.dtx b/macros/latex/contrib/hyperref/xr-hyper.dtx
index 1acb21c688..aced2ac70b 100644
--- a/macros/latex/contrib/hyperref/xr-hyper.dtx
+++ b/macros/latex/contrib/hyperref/xr-hyper.dtx
@@ -26,7 +26,7 @@
%
%<package>\NeedsTeXFormat{LaTeX2e}
%<package>\ProvidesPackage{xr-hyper}
-%<package> [2024-01-20 v7.01h eXternal References (DPC)]
+%<package> [2024-05-23 v7.01i eXternal References (DPC)]
%
%<*driver>
\documentclass{l3doc}
@@ -95,7 +95,7 @@
% In the \LaTeX{} release 2023-06-01 the label syntax of \pkg{hyperref}
% and the \LaTeX{} kernel have been synchronized and there is no longer
% a need for two packages. \pkg{xr-hyper} already works with all documents --
-% it is not required to load\pkg{hyperref} -- and its code will move in the
+% it is not required to load \pkg{hyperref} -- and its code will move in the
% next \LaTeX{} release into the \pkg{xr} package. Then \pkg{xr-hyper} can be
% deprecated.
%
@@ -108,7 +108,7 @@
% If one document needs to refer to sections of another, say |aaa.tex|,
% then this package may be loaded in the main file, and the command
% \begin{verbatim}
-% |\externaldocument{aaa}|
+% \externaldocument{aaa}
% \end{verbatim}
% given in the preamble.
%
@@ -140,7 +140,7 @@
% always work, it can be disabled by specifying \texttt{[nocite]} after the
% \meta{prefix}:
% \begin{verbatim}
-% \externaldocument[][nocite]{aaa}
+% \externaldocument[][nocite]{aaa}
% \end{verbatim}
%
% The `document' referred to by the main argument \meta{document} is the file
diff --git a/macros/latex/contrib/jsonparse/README.md b/macros/latex/contrib/jsonparse/README.md
index b8750b8a8f..69258570db 100644
--- a/macros/latex/contrib/jsonparse/README.md
+++ b/macros/latex/contrib/jsonparse/README.md
@@ -1,4 +1,6 @@
-![Version 0.8.2](https://img.shields.io/badge/version-0.8.2-blue)
+![Version 0.8.3](https://img.shields.io/badge/version-0.8.3-blue)
+
+![Jason, the JSON parsing horse](https://github.com/jasperhabicht/jsonparse/assets/6378801/d6abde3a-fa12-4b63-a213-ad8332e32199)
# The `jsonparse` package
@@ -42,6 +44,7 @@ Let's assume a file with the name `example.json` is stored in the working direct
We can store it in the token variable `\myJSONdata` using the command `\JSONParseFromFile{\myJSONdata}{example.json}`. Calling the command `\JSONParseValue{\myJSONdata}{contactPoint[0].telephone}` would then result in the output `+1 (555) 555-1234` (indices are zero-based per default).
-This package including all files is subject to the LPPL 1.3c license.
-Copyright 2024 Jasper Habicht (mail(at)jasperhabicht.de).
+This package including all files is subject to the LPPL 1.3c license. Copyright 2024 Jasper Habicht (mail(at)jasperhabicht.de).
+
+Jason, the JSON parseing horse: Copyright 2024 Hannah Klöber.
diff --git a/macros/latex/contrib/jsonparse/jason/jason.pdf b/macros/latex/contrib/jsonparse/jason/jason.pdf
new file mode 100644
index 0000000000..324458e684
--- /dev/null
+++ b/macros/latex/contrib/jsonparse/jason/jason.pdf
@@ -0,0 +1,1662 @@
+%PDF-1.5 %
+1 0 obj <</Metadata 2 0 R/OCProperties<</D<</ON[5 0 R]/Order 6 0 R/RBGroups[]>>/OCGs[5 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <</Length 53578/Subtype/XML/Type/Metadata>>stream
+<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
+<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.3-c011 66.145661, 2012/02/06-14:56:27 ">
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about=""
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>application/pdf</dc:format>
+ <dc:title>
+ <rdf:Alt>
+ <rdf:li xml:lang="x-default">jason</rdf:li>
+ </rdf:Alt>
+ </dc:title>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xmp="http://ns.adobe.com/xap/1.0/"
+ xmlns:xmpGImg="http://ns.adobe.com/xap/1.0/g/img/">
+ <xmp:CreatorTool>Adobe Illustrator CS6 (Windows)</xmp:CreatorTool>
+ <xmp:CreateDate>2024-04-28T16:34:40+02:00</xmp:CreateDate>
+ <xmp:ModifyDate>2024-04-28T16:34:40+02:00</xmp:ModifyDate>
+ <xmp:MetadataDate>2024-04-28T16:34:40+02:00</xmp:MetadataDate>
+ <xmp:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType="Resource">
+ <xmpGImg:width>256</xmpGImg:width>
+ <xmpGImg:height>256</xmpGImg:height>
+ <xmpGImg:format>JPEG</xmpGImg:format>
+ <xmpGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA&#xA;AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK&#xA;DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f&#xA;Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER&#xA;AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA&#xA;AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB&#xA;UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE&#xA;1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ&#xA;qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy&#xA;obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp&#xA;0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo&#xA;+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7&#xA;FXYq7FXYq7FXlf5z+Y7yZ7XyZpU7W9xqCG51a5jNHis1NFUEftSvt8h75hazNwig5elxWbKaflX5&#xA;8n1m2k0DW3C+ZdLUCZjsLqAbJcp416P4H50yzTZ+MUebDUYeE2OT0DMlx3Yq7FXYq7FXYq7FXYq7&#xA;FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVsssUUbSSuscairOxAAHuThAJ&#xA;2CCQBZfO1jqDa3q+s+ZnJb9K3bi1J7WlufSgX/gV3zQ558UiXc4ocMQF+oWNy9xbajptwbLWrBvU&#xA;sb1eqk7Mjj9pHGzA5CEzE2GcoiQoplb/AJzebrudrC7EOmapEPjgSMFXH88RkMnJT+Gdp2R+V1Ma&#xA;P953X93L9jxva8tVpzYI8M9QOXv5/tbl88ebJa8tTlFf5OKf8RAzfx7PwD+EOgl2jnP8ZUv8XeZ/&#xA;+rpc/wDIxv65P8lh/mR+TD89n/ny+ba+b/NCkEapcVHjISPuOA6HD/MCjX5/58vmioPzC83wkUvy&#xA;48JEjb8StfxyuXZmA/w/e2x7U1A/i+5NrT82tejIFzb29wvcgNG33gkf8LmLPsXEeRIcqHbmUcwC&#xA;n9h+bejSkLe2s1qT1ZSJUHz+y3/C5hZexMg+kg/Y5+LtzGfqBj9rKdM8xaHqYH1G9imcivpg8ZP+&#xA;Aajfhmty6XJj+qJDs8OrxZPpkD+O5Mcx3IdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi&#xA;rsVQmp6tp2mW5uL+4S3i7FjuT4Ko3Y/LLcWGeQ1EWWrNnhjFzNBgGufm0x5RaNb0HT6zcCp+axg/&#xA;rP0ZvNP2L1yH4D9bodT250xj4n9TzrzX5i1e8029ub67knaOGRkDNRQ3E04qPhXfwGZ+oxwwYJmA&#xA;AqJ+51+nyZM+eAmTK5D70LoWr6DZ6LY2z6jaxyRQRh0aaMEMVBaoLeOeWkPp6dW93a3K8reZJl/m&#xA;jYMPvBOBWLfmT6cWk2t2D6dzFdIIZ1HxqCrFqH/Y9Mtw5JQkJRNEMMkIziYyFgrtE1Z7tWtroBb+&#xA;BVMgX7MiMKpNH4q439s9G7I7UGqhR/vI8/1/jk+ddr9lnSzsf3cuX6vxzTXNw6d2KuxV2KuxVsEg&#xA;gg0I3BGKWR6N+YPmTTOKev8AW7cf7puKvt7P9sffTNfn7Mw5OnCfJ2Gn7UzY+vEPN6DoP5kaFqZS&#xA;G4JsLptuEpHpk/5Mmw/4KmaLU9lZce49UfL9Tv8ATdrYsmx9MvPl82WAgio6ZrHaOxV2KuxV2Kux&#xA;V2KuxV2KuxV2KuxV2KuxV2KuJCgsxoBuSegGKsC80fmfa2he00YLc3AqGujvEp/yR+38+nzzd6Ps&#xA;iUvVk2Hd1/Y6PWdsxj6ce57+n7Xmmoajfahctc3s7zzN1dzWg8AOgHsM6HFijjFRFB5vLllkNyNl&#xA;j2v+YU01RFDGbi9cVSIAkKDtzfjU0/Xmt7T7TGnFRHHkPT9Jdl2Z2YdQbkeDGOv6AgtNHla+kB1v&#xA;Uzd3p39Cf1LaBD4IjBAfmTvnlna/aPaGWXrEgO79nT8bvp3Zeg0OKPoonv8A2srXy75fCgLptrxA&#xA;2/cxn8aZzJ1WX+dL5l34wY/5o+SDu/JehysZrWNtOux9i4tGMRU/6o+Gn0Zfi7Ryw68Q82nJoscu&#xA;le5Jbi31281jTtC1eMXMFvL9bN8ook0MakAOvQNybifn9J2uTXRlgM47S5V5uBDSSGURO45pfqFt&#xA;PotylqTS4sS0uj3DdJ7UkmS1c/zLX4fw6jNn2R2mYyjlj9UeY/HQuv7U7OjOJxy+mXI/juZXaXMN&#xA;1bRXMJ5RSqHQ+xGet4csckBOPKQt8mzYpY5mEucTSrlrU7FXYq7FXYq7FXYqyPy3561nRCsQf61Y&#xA;jrayk0A/yG3Kfq9swNX2djzb8pd/63Y6TtLJh25x7v1dz1fy/wCaNI12DnZy0mUVltn2kT5juPcZ&#xA;zGp0eTCakNu/o9Rpdbjzi4nfu6pvmK5bsVdirsVdirsVdirsVdirsVdirsVQ+oajZ6faSXd5KsNv&#xA;GKs7fgAO5PYZZixSyS4Yiy15csccTKRoB5D5u8+32tu1tbcrbTK0EVfjk95CP+I9PnnU6Hs2OHc7&#xA;z+73PJ67tOWb0x2h9/vYpmzdW7FXYql/mC1iuNGvEdFcrDI0fIA0YKSCK9N8we0sUZ6eYIv0mvfT&#xA;ndm5ZQ1ECDXqF+60Dot3c+X7bT3nlafQNQiiKyyGrWs0ig8Sf99k/d+vxrX6IZAZRHrH2/tfYNHq&#xA;jA8Mvp+5muc47p2KoTVdJsNVs2tL2P1Ijup6MrDoynsRluHNLHLiid2vJijMUUgtvKetafD9W0/V&#xA;V+qqSYop4AzKCa05qwr18M6zRe2WowQEABQeZ1nspp88zMk8RXSQecLUcmgtdQjHVYGaGSnykqv4&#xA;5u9L7e2ayQ/R+v7nTan2HFfu5H7/ANTen61aXkrW5V7a9T+8tJ14SD3APUe4ztuzu18GrF4zv3PG&#xA;9odkZ9IfWNu/omGbR1jsVQF/rVnZyrb/ABXF4/8Ad2kC85T9A6D55rtd2ph031n1dw5/s+LstD2X&#xA;m1P0D0955ft+CyO08231GpBpMJ6c/wDSJ6eNBxQfKuctqfajLLbGBEfM/q+x6jTezGGP94TI/Ifr&#xA;+1XHlKeTe61m9du/oskC/cqnNTk7Z1Uuc5fDb7qdrj7I0seWOPx3+9d/g237anqQPj9Zb+Iyr+U9&#xA;T/qk/wDTH9bb/J2n/wBTh/pR+pKrN9asvMwi0PWLsR2BBu7uUxyFXP8AupDxFTT7Wb3sier1UiDM&#xA;+GPquj8N+v3Ok7WjpNLEEQHiH6asfHbp973vyZ+YVvqvCx1IrBqJ2jk+zHMfb+V/bv28Mz9f2Ycf&#xA;qhvD7v2OF2f2qMvpntP7/wBrNM1DuHYq7FXYq7FXYq7FXYq7FXYqhNV1Wx0uxkvb2QRwRj6WPZVH&#xA;cnLcOGWSQjEbtWbNHFEykdninmnzVfa/emSUmO0jP+j2wPwqPE+LHuc6/R6OOCND6upeN1utlnlZ&#xA;+noEkzMcJ2KqdzcwW0DzzuI4YxV3bYDK8uWOOJlI1ENmLFLJIRiLkUtgl13WRy06MWFg3S/uF5SO&#xA;PGKLw92zge1/baOMmGAb9/45fb7g912V7GmQEs5+H45/Z70YnkjSpBXUZbjUZDuTPK4Wv+SiFQB7&#xA;Zwmq7f1WY3KR/Hve103Y2mwioxCjffl5oM1q8VmJLGRx9uOR2U+AdHZgRX5ZRi7VyxPq9Qciegxk&#xA;bbJr5bhv4NEtYL//AHqgDROetRG5VDXvVADmLqpROQmP0lvwCQgBLmEyzHbnYq7FXYqlut6DaarA&#xA;A9YrqPe2u02kjbsQfDxGZej1uTTzEoFxtVpYZoGMxaU6LfXE8c1teALqFk/o3QHRiPsyD2cb57l2&#xA;H2oNZgE/4hz/AF/jrb4z232YdHnMf4Ty/V+OlKd9eX13ffojSSBc0DXd0RVbeM9D7uewzE7b7a8D&#xA;93j/ALzqe79rl9idjeP+8yf3fQfzv2J3o+hafpURW3QtM+89zJ8Usjdyzfw6ZwU5mRsmy93GIiKA&#xA;oJjkUuxVCatfLYaZdXjdIImcA92A+EfSdsIVIvL9m1rpMCybzyj1rhj1MknxMT770z1HsrTDDp4x&#xA;61Z95fMO1dSc2olLpdD3BMQSDUbEdDmxde9Q8hef/rJj0rV5P9I+za3bn7fgjn+bwPf59ec7S7N4&#xA;fXjG3UPSdmdp8X7vId+h/W9BzRO/dirsVdirsVdirsVdiqld3VvaW0tzcOI4IVLyOegAyUIGRAHM&#xA;sZzEYmR2AeI+b/NVzr+oF947GEkWsHgO7N/lN+HTOw0OjGCFfxHmXjNfrTnnf8I5BIcznAdirsVS&#xA;q2tV1rX5FnHPTdKK/uj9mS5YV+Idwg7eOeYe2vbEuPwIHYc/x9nzfSvY/sqIx+NIby+78b/Jlmec&#xA;PfOxV2KuxV2KuxV2KuxV2KsM803L6Rr6XkKF5NStjDHCN+dxG6iM/dIBnbeyXap08cnu29/T9LyP&#xA;tP2WNSYf1t/d1/QyDy9o40vT1jc+peTEy3k/d5W3Y18B0GOTIZyMpGyWzHjEIiMRQCZ5Bk7FXYqx&#xA;vzfJ9ZksNGXf65KJbkf8UQfGwP8ArNQDNj2VpfH1EY9L39w5uB2pqvA08p9a2955I3PUny52KuxV&#xA;61+XvnU6lGNK1CSuoRL+5lY7zIOx/wAtR9438c5jtPs/wzxw+k/Z+x6rsrtDxBwT+scvP9rN80zu&#xA;nYq7FXYq7FXYq7FXk/5lebTf3Z0izf8A0O2b/SGHSSUdv9VP1/RnT9k6Lgj4kvqPLyH7Xlu19dxy&#xA;8OP0jn5n9jBs3LpHYq7FXYqhPJskEPlw6hO6xpdTT3U0jkACshFST/kqM+f+2cpzauRG5J+/f9L7&#xA;t2XiGLTRHKh92yHufNl9dI8mkQRxWMYJfUr3ksZA6mNBRm+Zzb9m+yeXNDxMh4Mfefx93zdX2h7T&#xA;YsM/DgOPJ3D8fjuS/TR551pjNHqZttNY/u7gwJGzjxjT7XHwLMMwdZHR4JGMB4hHw/T+O4OdpZar&#xA;NESn6L+P6GV6TplxYpIJ76e+kkIJaYii0FPhAG1e+abNlE+URH3OzxYzHmSUflLa7FXYq7FXYq4k&#xA;KCSaAbknpTFWNaaP09rf6YcV02w5RaZXpJIdpJvltRf650+h03hQ3+qXP9TodXn8SW3IMlzMcV2K&#xA;uxVpmVVLMQFAqSdgAMVYFaazJe6ze6rFYXd4slLeyaKL92IEO55sVHxtvTN32T2vpdFxSyH1nbps&#xA;Pn1dN2t2VqdZwxx0IDfe9z8uiaC/19h+70KY9/jlhTb6Tmyl7c6Ucgfx8HWR9itQech+Pi02ranF&#xA;vPol4B/xUEl/BWy7H7a6OXOx8v0005PY3VDkYn5/tWf4p0lGC3Rls3O3G4ikj3+ZFPxza4PaLR5O&#xA;U/x8NnWZvZ7WY+cL+P4KZ6drNs08dxp94jTRMHjeJ1LKy7g7HNlDPhzCoyjIHzdbPBmwm5RlEjye&#xA;8+UPMsWvaStxst3FRLuIdnp9of5LdR93bOU12kOGdfwnk9doNWM+O/4hzTzMNzXYq7FXYq7FWMef&#xA;/Mv6F0cpA1L+8rHBTqo/bk+gdPfNj2bpPFyWfpjz/U63tPWeDjofVLl+t4rnXvGuxV2KuxV2KsP8&#xA;tRXGr6ba21yCuk6fVTAf93z8i1X/AMlOXTxzzz2e7Bhlyyz5BYvb8ff8u99C9oO3JYsccOM1Ijn3&#xA;D8cvn3JzLbLrGtx6Uf8AjnWKrPfIOjsf7qI07bciMl7a9rnFEYIGu/8AHl+kNfsf2WMhOeYvu/Hn&#xA;+gsuVVVQqgBQKADYADPKn0p2KuxV2KuxV2KrJpoYImlmdY4kFXkchVA8SThjEk0OaCQBZY3Pc3Hm&#xA;d2tLIvDoYNLu++y09OscNf2f5m/zO+0PZ/B65/V0Hc6nV6zi9MeTI4IIbeFIIUEcUahY0XYBRsAM&#xA;2jrlTFXYq7FWL+YdQm1W6PlvS3/eSf8AHTuh0hhr8S7dWbpT6PlVnzjFDiPwbcOE5JUGR2lrBaWs&#xA;VrbrwhhUJGvgFFM5OczImR5l6GMREUFXIsnYq5lVgVYAqeoO4xBVher6bpl/5lhtLe0hjjsAJ76a&#xA;NFVmkbeOIkAf6xzvfY7s+eoyccyTjj+B9v3F4v2s7Qjp8fBChOW36/x5s48oeYpNC1mO5JJtZP3d&#xA;2g7xnvTxXqM9N12lGbGR/F0fONBqzhyCX8PV7pHIkkayRsGRwGRhuCCKgjOMIINF7YEEWF2BLsVd&#xA;irTMqqWYgKBUk7AAYgKS8J83682t65PdAk2yH0rVfCNTsf8AZfa+nO00Om8HGI9evveI1+p8bKZd&#xA;OnuSXMxwnYq7FXYq7FUlndtMt4NJ0xBLqFyX+rp0C8mLNK/+Stc0Gv1kNBgEI/Wbr4nm7/Q6Oevz&#xA;mc/oFX8ByRPkKx+r22pSO5mmkvZUec9XEXw8vpbkfpzx/trNKebc2av4l9X7LxRhioCh+gMivL6z&#xA;soGuLuZIIV6u5oPl7nNXjxymaiLLsJzERZNJH/iDWNRFdFsONuRUahfExREeKxj42Hvm2w9k9Zn4&#xA;B12XtH+aPmluka9NHZQ6prF5Lc3V2W+oaXbLQlQSoPppQtWn7Rp9ODLpeKZx4o7DnI/j7mWPUVHj&#xA;yHnyCai585XnxQ2trp0R6C5ZppafKOij6Tl+PsmA+ok+7Zpn2jI8gAu+qec16ahZvXqGgYU+VGyw&#xA;9mYfP5tf5/J5NGw84y7PqtvbjxhtuZ/5KNko9m4R0J+KDrsp7nR+UbSWRZtVuZ9UlU1VbhqQg/5M&#xA;S0X765l48UIfSAHHnllP6jaeqqooVQFVRRVGwAHhk2tvFXYq4kAVOwHU4qxDVfNUl/fxaLokyxNc&#xA;MY31R/sDiKssPZ33/p4iGbJ4cDIi6bMWPjkI8mQaLoljpFp9XtVJLHlNM27yP3ZjnLajUSyyuTv8&#xA;OGOMUEflDa7FXYqoaheRWVjPeS/3cEbSMPHiK0+nJ4sZnIRHVjOYjEk9GN+XbaWPTxcXG93fMbq5&#xA;J68pNwP9itBTPe+wtCNNpYxrc7n8e58R7d1p1GplLoNh+Pemmbh071r8rdfN7pb6ZM1Z7GnpE9Wh&#xA;bp/wB2+VM5ftjTcE+Mcpfe9V2NquOHAecfu/YzfNO7p2KuxVi35j60dN8uyRRtS4vj6CU6hSKyH/&#xA;AIHb6c2XZWn8TKCeUd/1Os7W1Hh4SBzlt+t4vnXPHOxV2KuxV2KqF9ewWVnLdTmkUSlm8T4Ae5O2&#xA;U6jPHDjM5cot+nwSzZBCPOTvK+lTxpJqt+tNSv6Myn/dUXVIh/HPLdbq5ajIZy6/in1DR6WODGIR&#xA;5D7fNC6JqVtpmkavPcmiWd/cqwHVmLgqFHi3IUzmNfhlPOIjqA9Bo8ojhJPQq+maJNfSpq2uqJbt&#xA;vitrJt4rZT0AU7F/EnNtgwRxRqPz73W5s0shssgdQ6Mh6MCD9OXNSQ+VPLEWj2avPSXUXULLMdyq&#xA;jpGh7KPbrhPkqf4FdirsVdirsVdirTEhSQCxAqFHU+2+KscOm61rrctWJsNM7abE37yQf8XyDt/k&#xA;rkrpUyv9A0670waeIxBFHQ2zRDiYnH2XSnQg5FVHy5qdzcRTWF/Qapp7CK58HBFUlHs4zmtfpfCn&#xA;t9J5fqd7pM/iR3+oJxmC5bsVdiqQediX0iK1/Zvbq3t3/wBVnBP/ABHNx2BgGXVwie/79v0ur7Zz&#xA;HHpZyHQH7BaIz358MdihN/KmsnR9etbwmkIb07geMT7N93X6Mxdbg8XEY9envcvRajwsol06+570&#xA;CCKjpnEvcuxV2KvH/wA0dV+t+YhaKaxWMYSnb1H+Nz93EfRnVdj4eHFxdZPJds5uLNw9Ihh2bZ1D&#xA;sVdirsVdiqU3MP6T8wWmmkVtbRfrl4OzEHjEh/2W9M472o1n04R7z+j8e57H2X0e0sx/qj9LLc41&#xA;69hc2lzyeePqbiumysuqFOxkiX0t/wDZkEjBwC+LrVMuM1w9ObNMLF2KuxV2KuxV2KuxV2KuxV2K&#xA;uxV2Kse18fo3VrDXE+GLkLPUO1YpT8Dn/UfMbWYfExEdRuHI0uXgmD0ZDnKvQOxV2KpZ5j0uXUtM&#xA;aG3YJdROk9qzdBLGeS1+fTM3s/VnT5o5B0Li63TDPilA9QlOna3bXTG3mH1XUI/hms5fhcN/k1+0&#xA;PAjPc+ze2MGrgDEji7v1d74v2l2Pm0syJAmPf+vuTLNs6l2KvcfIeqnUvLFpIxrNADbyn3j2H3px&#xA;Ocb2jh8PMR0O/wA3tezc3iYYnqNvkyDMFz1ssiRRvI5oiKWY+AAqcIFmggmhZfPGoXkl7f3F5J9u&#xA;4keVvYuxNPxzu8UBCIiOgeAy5DORkeptD5Y1uxV2KuxVD6hf2thavdXL8I0+8nsqjuTlGp1MMMDO&#xA;ZoByNNpp5piEBZK7yrp1zFDcajep6d9qLiR4j1jjUUjjPuB1zy7W6o58ssh6vp+j0scGKOMdE9zE&#xA;clYYYjMs5UGZFZFfuFcgsPpKjFV+KuxV2KoG71J47yDTrK1l1HVrr/eewtxVyP52J2RB3Y5OEDI0&#xA;ESkALKdRfl7+bE0Pr/V9Ita7/VZridpR7Fo42jr9OZY0MnGOrik09xq2lalHpXmPTn0q+m/3lcsJ&#xA;baen++pl2Lf5J3GY2TDKHNvhkjLkjcqZuxV2KuxV2KuxVCatp8eo6bc2Un2Z42QE9iR8LfQd8IVC&#xA;+V9QkvtFgeaouoa290p6iWI8Wr7mlc5XW4fDykdOYeg0uTjxgprmK5DsVdiqC1PRdL1OMJfWyTgb&#xA;KxFGX/VYUYfQcuxaieM3E015MMZ/ULSo+TvS/wB4NUvLYdo2cTRj5K4/jm+03tVrMWwlf4+IdLqP&#xA;ZvSZdzAfj3btf4f8yJ9jWkk9pLVR+KsP1Zs4e3WqHMA/L9TrZ+xmkPKx8/1vSvyYfV7S41DTdQu4&#xA;7pJUW5gEcfp8ChCSd2ry5r92Z2j7fnr5kTFGIcfP2JDRRHATUi9TzYuGknna8Np5V1KUGhaIxA/8&#xA;ZSI/+NszOz4cWeI87+W7hdo5OHBI+VfPZ4TnaPEOxV2KuxVAanq8FkUiVGuL2ba3tI93c/wX3Oa7&#xA;tDtPFpY3LeXQdf7HY9n9mZdVKo7R6np/aqaV5cuJLlNS1tlmu03t7Rd4YK+H8z/5Wee6/tHJqZXM&#xA;7dB0D6DoOz8emjwwG/U9SyLNe5zsVdirsVdirsVZL+TVtp1l5Z1rzle0Nzdz3Lzz05NFaWRKrEPY&#xA;cCxp128M2+jgBC3XaqRMqeff9Dd336br+gIv0HzoU9Vvrfp1pz5f3fKm/Hj7cu+S/Mb8l/Lbc93t&#xA;HnjTNL82/l5dv1ins/r+nXDCjRyLF6sMg7qfGnaoy3LESgWnHIxk8m0S7kvNHsrqT+8mhjd/9YqK&#xA;/jmiLt0bgV2KuxV2KuxV2KsfsP8Acf5rvbLpBqUYvYB29VfglA9zs2antbFcRPu2dl2dkomLIM0T&#xA;tnYq7FXYq7FXYqt8kao8v5r2MMbkWtjDJFcEdDNcoeKnxoFBzt/Zfs+Rx5M3cP0/2vJe0WujHJjx&#xA;dSf0f2PfM37qGG/mtcen5YWMH+/uY0I9grP/AMa5tuxo3mvuiXUdtyrDXfIPIM6p5J2KuxVK9Q1S&#xA;c3I0zS4xcam4qQf7uFD/ALslP8O+aPtbtmOmHDHfJ93v/U7zsnsaWpPFLbH9/u/Wm2ieX7fTQ8zu&#xA;bnUZt7i8cfE3so/ZX2Gee5s88sjKZsl9Aw4YY4iMBUQmuVNjsVdirsVdirsVdiqp5P8ANll5RuNR&#xA;0fX4y/lPWZHmjugpkS3lnHGaKcCp9KTsR0++mfpdQIjhlycTUYTLcc0vg/5xv/LC7vzqlt5q9TQS&#xA;/qC1jkgYBCa8PrPI7dqla+9d8yhiid72aDmkNq3ZR5+/MLSbvR5PJnkuRLl5ohZ3V9b/ABWlpace&#xA;Dqsg+F3KfCoX79sr1GpiI8IZYMBJssetbeK2toraEUihRY4x4KooP1ZqnYKuKuxV2KuxV2KuxVIP&#xA;Noa3istYQHlpk6vJTr6En7uUfcRlebF4kDHvDZiycExLuT9WVlDKaqRUEdCDnIEPSOxV2KuxV2Kp&#xA;JrXmWK0kNjYr9b1ZxRLdN1j/AMuVv2VGbbsvsjNq5iMRt+Pxbre0e08WlgZTP4/HRV8lWp0nUrCR&#xA;39W5N3HcXc3d5GkBc/LtntOk7NjptIcUf5pv30+QartKWp1Yyn+cK91vpDOWetYD+b7kaXYJXZp2&#xA;NPklP45vOwx65e50Xbp9ER5vLM6R5h2KpTeX95dXZ0vRwHu/+Pq6O8dup7t4v4LnOds9tjAPDx75&#xA;P9z+16PsbsQ5/wB5k2x/7r9ie6NotnpNsYYKvI55z3D7ySOerMc4GczI2dy95GIiKGwTDIpdirsV&#xA;dirsVdirsVdirTKrKVYAqRQg7gg4qlcnlXy3JJ6jabb8vZAB9woMNlUxgt7e3iEVvEkMS/ZjjUKo&#xA;+QFBgVUxV2KuxV2KuxV2KuxVRvLWK7tJrWXeOdGjf5MKHFUr8oXUs2ix285/0qwZrO4H+VCeI+9a&#xA;HOZ7QxcGU9x3d9o8nFjHlsnWYTlOxVSu5Zord5IYWuJVFVhUqpY+FWIAyUIgmiaDGRIGwtg175g1&#xA;W8umttWmfy/ak0WJUYPIP+YgjiPozsuw+ytDkleXJ+PuHxeW7Z7S1mONYsf4+8/BOtKsdMtbYDT1&#xA;T0n3MqHmXPiX35Z6totNhxQrEBw943v4vl2t1ObLO8pPF3Havgj0co6uOqkEV9t8yyLDiA0X0fnA&#xA;Pobzz84VP1XTGpsJJQT7kL/TN92H9Uvg6Dt4emHxeY50TzSUXN5d6jePpOktxkTa9vuqQKeoXxkP&#xA;Yf5jmO2u3BivHiPr6nu/b93ven7G7DOWsuUejoO/9n3+5kOk6RZaVZra2ikKDyd23d2PVnPcnOEJ&#xA;JNl7kCuSNwK7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FWP2/8AoHnC4g6QatCJ&#xA;4/D1oPhcD5oQxzV9q4rgJd36XY9n5KkY97IM0Dt3Yq7FVssUUqGOVFkRtmRgCD8wcIJBsIIB5pHc&#xA;eTNJMhmsWl02c7l7Vyin5xmqU+jNro+3NTpzcZH8fjq67Vdk6fOKnEIR7HzbY7qYdWhH/RvP/GM5&#xA;2Og9u5DbNG/x5fqeT1vsTA74jw/jz/W+o8z2l5Z+fWtJY6XpdtBxl1S6ncWtsT1UJ8cjU34ptXMj&#xA;D2l+VEiBciNnG1HZv5oxBNRB3eOfou+mHO71S6Mp+0IH9GMfJVGajL2tqZmzOXwNfc7TF2TpoChC&#xA;PxF/eifLEsmjanHoxb1LK9DyWzlQJFlQcmV2UDlVe5zXS33dgNmZ5BLsVdirsVdirsVdirsVdirs&#xA;VdirsVdirsVdirsVdirsVdirsVdiqQ+b0aGzt9WiBM2lzrOadTEx4Sr9Kn8Mhlx8cDHvDZjnwSEu&#xA;5PUdHRXQhkYBlYdCDuDnIEVs9IDbeBXYq7FXYqlmq64lpcQWFtGbrVbtgtvaKd/iNObn9lRmy7N7&#xA;MyaqfDEbODr9fj00OKRfRueiPEvmjzbrTeYvPWr6sW52tnIdN00VqoitzSR1/wCMklWrmn1OTimX&#xA;a6eHDFBZjt6Bv3EN/pNzWgjvI0Y+CygoT+OKs4yCpfqGv6Lp1ReXkcTj/ddeT/8AALVvwwgKlT+d&#xA;Y5NrDTbq6HaRlEMZ+TOa/hh4VUv8U+YftfoeML/Ibkcvv4Ux4VTDR/NFtf3H1KeF7K/pyFvKQQ4H&#xA;UxuNmpgIVOsCuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVSubeK5tpbeUVimRo3HirChxVKf&#xA;J9xK2kCznNbrTZGs5v8AnkaIfkUpnNdo4uDKe6W7vdFk4sY8tk7zBct2KuxVLfMGsjS7H1ET1buZ&#xA;hFZwd3kbp9A6nMzQaKepyjHHq4us1UcGMzkdgs8haCV8xWL3DfWNRu7mJ724PcBgzKvgqgbDPa9H&#xA;2Xj0OlkIj1cO5/HT73yDVdp5Ndqok/RxbD9Pve7+ctaGh+VNW1atHs7WWWL3kCn0x9L0Gc3klwxJ&#xA;eohG5APmfSLY2+mW0R+2EDOT15t8Tfic0RdyjMVUbu0gu7d7edeUbihHQ7bgj3BxVDNp17KgiutV&#xA;u5oVFBHzCAgdnKgFsVVLTStOtN7e3RG/npVv+CNTjarrrUbC0oLmdIidwrMAT9HXFV9td2t0nO3l&#xA;SVRsShBofemKqOqWH1u3+AmO6hPqWsw2ZJF3BB/XirJtA1JtT0a0vmHGSZP3gHQOpKvT/ZKciQqY&#xA;YFdirsVdirsVdirsVdirsVSW4uZ5PNtpaRyOsMFpLcTxgkKxkYRpyA2NKEiuHoqdYFdirsVdirsV&#xA;dirH4/8AQPOMidINYgEi+Hr2+zAfOM1zWdq4uLGJfzT97sOz8lTMe9kGc+7h2KuxVicb/pXzFc3z&#xA;b22nE2lkOxk/3dJ9/wAOeq+xHZYjA55Dfp+Pd95fNfbPtMmQwRO3X8e/7g9B/LGyNx5qilpVbWKS&#xA;U/SPTH4vnW9r5OHAR/OIH6Xlux8fFnB/mgn9H6U2/P3WY4vK9r5fRgbnXLqNHj/a+rW7CaV/kCqD&#xA;6c4jWTqFd73Glhcr7nlWap2bsVdirsVSLzN5h/R0Yt7cg3kgrXqEXxPv4YQEMFJuLmepLTTyH3Zm&#xA;J/HJIZ55W0aXTrR2n2nuCpdP5QtaD5775ElKd4Eqvki6SOyl0eT4bqwkclT+3HK5dZF9vipgkoZL&#xA;kVdirsVdirsVdirsVdirsVY/5ZP1291PWjvHdSiC0PYw2/w8h7M1ThKsgwK7FXYq7FXYq7FUi84R&#xA;OmnRalCKz6XMl0oHUoppIvyKHfI5MYnExPUM8c+GQPcncUscsSSxnlHIoZGHQhhUHOPIINF6QGxa&#xA;7AlxBIIBofHFWLQ+U9X0+L09M1UGIFmEFzCrAljU1kWjZ1+g9sNRp4iAA4B0/G/2vL672W0+okZm&#xA;+M9fxt9j1j8lNP1aO01K81SGFJWkSCGSByysqDkxAYBl+2OudTDts6/EJcPDRPxeeHY0dDkIEuKw&#xA;Pg8r1rXp/NPme/8AMUzcrcu1rpMf7MdpE5UEe8jAs2aPPk45O8w4+GNKWUtrsVdirsVSabypplxc&#xA;vcXDSzSSHk3JwB8vhA2HTDaKR1jpOnWI/wBFgWNj1fcsf9kanBaUXiqgl7bPdPapIGnjXk6jegrT&#xA;c9K+2KoXUZTp95aazGeJtnEdzT9qCQhWB+VajFWd5BXYq7FXYq7FXYq7FXYqx/zBqE93KNB0x/8A&#xA;TLgUu5l3FvAftMxHRmGyjJDvVOrO0gs7SK1gXjDCgRB7AU3yKq2KuxV2KuxV2KuxVZNDHNDJDKvK&#xA;ORSjqehVhQjFUl8nTSDTH06Y1uNLme0cnqVQ1jb5FCKZznaeLhyk9Jbu80OTix13bJ7mvcx2KuxA&#xA;V7P5Z0w6bodpasKShOc21Dzf4mB+VafRnpeh0/g4Yw7hv7+v2vB6vN4uWU+8/Z0fMWn2cumPd6Lc&#xA;KUutKuJbaZD1orko3yZdwe+a3JGiQ7KErFozIMnYqhrvUbK04ieUK7UCRirOxOwoq1Y4gKmen+W/&#xA;PWqIJNN8s3jxNusl0Y7NSPEeuykj6Mvjp5no0yzwHVHv+Xn5nojO+gwIiglna/gCgDqT7DJflJsf&#xA;zUGPWen+ctV1VtM0KyttTnibhcXFrK01rEf8u4okP/AuciMBJobszmAFnZDeadF1O0vxoqa3Hean&#xA;GaamthGVtbU/yG4Y85H/AMkKKdz1AGTGIbXZXHMy3qgrabplrp9uIYF3O8kh+07eLHKW1Q8yEDRL&#xA;uu9VAA9ywA/HCFZzCpWJFb7SqAfmBlar8VdirsVdiqBu9c0e0r9ZvYImXYq0i8q/6ta4aVLj5xs5&#xA;9tMtLrUmOwaGJljr7yScQMeFbWtD5u1McZXi0a2bqsR9e5I7jnsi/MYdlTTStHsdLtzDaIQXPKWV&#xA;zykkb+Z2O5OAlUbgV2KuxV2KuxV2KuxV2Ksfb/cf5xVukGswcD/zEW+4r84zTNd2pi4sfF/N+4ud&#xA;oMlTrvZBnOu6diqe+TNI/SWuwq4rBb/v5vAhD8I38WoPlm47E0ni5wT9MN/1fa6ztbU+HhIHOW36&#xA;3rud88cwXz7+U+l+aLoapa3L6TrqqEN7EodJVX7KzxEjnQbA1BHvQZj5tOJ79W/FnMNujwHUpfMG&#xA;l32q2c0dtdDSZ5beaeNmjDNCKswVq5qpw4TTsoS4hadeSfLmo+bL/wDR+oatB5dnKpKti8b/AF6a&#xA;GRQ6SQiUJGVdTsVJI8MuxafiO5pqy5+EbC3t/l7yH5E8j2rXsccUMyitxrN/IrTHxLTSUCV8FoM2&#xA;MMUIBwJ5JTQNx+aialM9n5I0ufzJdqeL3aD6vp8Td/UuZAASOtEBr2OA5r2iL+5Iw19RpSl/L/VN&#xA;cQ3v5h619ZtY/wB62iWLNa6ZGq7/AL1iRLNx68nYUweEZbzPw6J8QD6B+thPm/8AM5by3by15BRd&#xA;N0OCsVxq9ugiDDo0dmoAoPGT7vE42bUgemDkYtOT6pMNs7O2s4Fgt0CRr95Pck9zmA5qtiqBuIv0&#xA;hq9hpafEPUF1d+AhiNaH/XagxVnGQVK9R8z6Jp7+lPchrjoLeIGSSvhxWtPpyUYGRoCyiUhEWTQS&#xA;9/Mus3H/ABz9IdEPSa8cRf8AJMcmzb4OwdVk/h4R57ft+x1Oft3S4/4uI+W/7PtUmHm25/vtRhsx&#xA;3S1h5f8ADykn8M2+H2UP8cx8Bf6vudTm9qo/wQPxNfr+9Sfy5FP/AL3Xt3eg9UlmYJ9CpxzZ4vZv&#xA;TR58Uvef1U6zL7SamXLhj7h+u1Py9pel2HmO7sTaxFZolubJ3QMyhTwkQMwJ60NM5bt3RDT56jtC&#xA;QsPUdia06jBcjc4mizIAAUHTNK7h2KuxV2KuxV2KuxV2KuxV2KuxVJPN1tK+kG7gFbrTnW8g+cRq&#xA;w+lK4JQEgYnkWUZGJBHRNrS5iurWG5iNYp0WRD7MKjOPnAxkQeYekjISAI6quRZPWPI+hnTNHEkq&#xA;8bq8pLKDsVWnwIfkDX5nPQeyNF4GEX9Utz+r4PF9parxspr6RsP1/FkWbV17sVfL3mW2L+avN9o+&#xA;zS6lc1/1ZlUqfuOaXUfWXb4foD0r8v38l+fvKNloXmCyhuNa0GBLW4t5arOqxKEWaKVSsnGRQCSr&#xA;dfozPwmOSIB5hwsoljkSORZHa/k7+X8NwlxNp738kX90t9cT3SL8o5XZPvGWjBDuajnkj/M/nfyj&#xA;5MsUS+nSFwtLTTLZQ07+AjhWlB7mi++SnkjAbohjlM7PEfN3nTzJ51kKX4Om6ArVi0eJvilp0a6k&#xA;FOX+oNh881mbUme3R2GLTiHvSxESNAiKFRRRVAoAB4DMZyF2Koe/vYbK1e4l6L9lR1Zj0Ue5xVdp&#xA;lza6BbtPqPKbXtSIkayiHOUL+xEB+yqjqTkoY5ZJCMRZYZMkYRMpGgF8kfmDVzyv5zp1meljat+8&#xA;Yf8AFkv8FzqtB7ME+rMa/oj9JeV13tMB6cIv+keXwCMsNK0+wThaQJEO7AVY/Nj8R+k51en0eLCK&#xA;xxEfx383ldRrMuY3kkZfju5IrMlxnYq7FUp1pvql5pmqDYWtwI5j29Gf925Py2zmvafT8WAT6xP2&#xA;H9tPS+zGo4cxh0mPtH7LZbnAvduxV2KuxV2KuxV2KuxV2KuxV2KtMqspVhVSKEHoQcVSHymzWq3u&#xA;iyH4tNmIhr1NvL8cR/EjNB2rh4cnF/O+93PZ+S4cPc9E8keXjqmpCeda2VoQ0lRs79VTf7z7fPMn&#xA;sLQeLk8SX0Q+0/jdx+19Z4cOAfVL7nqudy8k7FXYq8D/ADj0KXQ/OR17j/uJ15Y45pv2YryFeADe&#xA;AkjUEHxBzWazFR4u92OkyWK7mHy2aPcRXcUstrewbwXls7RTJ/quu+YYkRycogHmmUnmPz3ND9Xl&#xA;806h6AFP3bJFJ/yNRQ/45cdRPvavAh3JZb6dawSvOFMlzJvJcysZJWPiXYk5SSS2gUicCXYqtkkS&#xA;NGeRgqKKsxNAAPHFWPQfpbXdTW4swILC2Y/V7mRagMNjIqH7T/y/y/PNv2d2Pl1O49MP536u91Pa&#xA;Pa+LTCj6p/zf19zKNN0ezsAzRgyXEm811KeUrnuWY53ei7OxaaNQG/f1Lwmu7Ry6mVzO3QdAjszn&#xA;AdirsVdirsVQGv2v1rRb2DqWiYqP8pRyX8RmF2jh8TTzj/RP2bhzezs3h6iEv6Q+3Yp1o939c0mz&#xA;uiamaGN2/wBYqK/jnlRfU0ZgV2KuxV2KuxV2KuxV2KuxV2KuxVL4NA1O8856ZLpsRkN4r2l9T7KR&#xA;gGRJX8ApBqfoG+2VZ9GdRHgHO/7W3FqhhPEeT37SNKttL0+Kztx8KD4npu7H7TH3OdDptPHDAQjy&#xA;Do8+aWWZlLmUZl7U7FXYqhdV0rTtW0+fTtSt0urK5XhNBIKqw/WCDuCNwcEogiikEg2HifmT8l/M&#xA;+iu83leQaxpYqV024cR3UQ/ljlb4JFH+VQ9t812XRnnFz8erH8TBrrURYT/VtWt7jSrrp6N7E8J2&#xA;8CRxI965hygRzDlRkDyVY72zlFYp43Hirqf1HIsm3urZBV5kUeLMAPxxVAvrsEjmHTo31C4/lhHw&#xA;D/WkPwgZkafSZcxqETIuPqNVjwi5yEQrweX7m8dZtakEig8o7CKoiX/XPVz+Gdd2d7Nxh6s3qP8A&#xA;N6fHv+73vI9o+0kp+nD6R/O6/Du+/wByfIiIioihUUUVQKAAdAAM6mMQBQ5PLykSbO5bwsXYq7FX&#xA;Yq7FXYq0QCCDuDsRgItINKXkdifLNojGrRGWJv8AYSso/DPIcseGRHc+u45cUQe9PcrZOxV2KuxV&#xA;2KuxV2KuxV2KuxVUtrae5nSCBDJNIeKIu5JOShAyNDmiUhEWXrPlTyzDotnV6PfTAG4l8P8AIX2H&#xA;4/dTd4MIxxrq6nLlMzae5c1OxV2KuxV2KuxVSubW1uoTDdQpPC32o5VDqfmGBGAi0g0x28/LD8vL&#xA;ti03l2w5E1JjgSIk+/pha9cgcMD0DMZZDqpwflR+W8EnqJ5dsiw7SRCRf+BfkMAww7lOafew3zn+&#xA;Xf6HDXujw/7i+skCDeD6B1T37d86vszXxkBjlUZdOgP7Xk+1OzpRJyRuUevUj9jC83To3Yq7FXYq&#xA;7FXYq7FXYq7FUN5LNNOu4v8AfN9cp7bPXb788n18eHPMd0pfe+raGXFgge+MfuZBmI5TsVdirsVd&#xA;irsVdirsVdiqraWlzd3EdtbRmWeU8URepOThAyNBjOYiLL1Tyn5Tg0aD1ZaSahIP3knUID+wn8T3&#xA;zc4MAxjzdXmzGZ8mQ5e0uxV2KuxV2KuxV2KuxV2KuxVxAIodweoxV535w/LRZS99oSBJDVpbHop9&#xA;4uw/1enh4ZvtD2tXpy/P9bz+v7Iv1Yvl+r9TzWWGWGVopUaOVDxdGBDAjsQc6GMgRY5POyiQaPNZ&#xA;hYuxV2KuxV2KuxV2KoXyeaDV4+66jK1PAMiH8c8t7WjWqyf1i+o9lG9Nj/qhkOa5z3Yq7FXYq7FX&#xA;Yq7FXYqmOi6DqOsXHpWkdVX+9mbZEB8T/Ab5fhwSyHbk1Zc0Ye96l5f8s6fosFIR6ly4pNcsPibv&#xA;Qfyr7frzb4sMYCg6zJlMzZTfLWt2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVI/Mfk/R9djrcJ6V0BRL&#xA;uOgceAb+YexzM0uuyYTtvHucLV6DHnG+0u95X5h8ja5opaR4/rNmNxdQglQP8teq/Tt750ul7Rx5&#xA;trqXcXmNV2blw71ce8MezPde7FXYq7FXYq7FUJ5V+G+1uPwulev+vEpzzHtsVq5+99M7FN6WHu/S&#xA;yLNU7R2KuxV2KuxV2Kr4YZp5VihRpZXNEjQFmJ9gMlGJkaCJSAFlmmgflzNLxn1hjFHsRaoRzP8A&#xA;rsNl+Q3+WbDDoes/k4OXV9Is+tLS2tLdLe2iWGFBRUUUH+375sAANg4RNquFXYq7FXYq7FXYq7FX&#xA;Yq7FXYq7FXYq7FXYq7FXYqxjXPy88vaoWlWM2V02/rQUAJ/yk+yfooffNjp+1MuPa+Ief63W6nsr&#xA;Dl3rhl5fqYHq/wCWPmKyLPahb+EdDF8L090b+BObrB2vin9XpPn+t0efsfND6fUPL9TFri1ubaQx&#xA;XMTwyjrHIpRh9Boc2cZiQsGw6ycJRNEUVLJMHYq7FUH5a+HWteQfZElu30tCCc817fFaufw/3IfS&#xA;ewTekh8f90WR5pnbuxV2KuxVG6fomraiQLK1kmBNOYFEB93NFH35dDBOXINU80I8yyzSvyymaj6p&#xA;cCNevowbt07uwoKewOZuPQD+IuLPWH+EM00zRdL0yMpY26xV+0/V2+bGrHM6EBEUBTiSkZGyjckx&#xA;dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiqldWdpdx+ldQRzxH9iVQ6/cwOThkl&#xA;E3E0WE8cZCpAEMevfy58p3RJFqbdz+1A7L/wp5L+GZ2PtXPHrfvcDJ2Tgl0r3JJc/k/YMT9W1GWI&#xA;dvURZP8AiJjzMh25LrEH7P1uHPsGH8MiPhf6kvl/KDUh/dahC/8Aroy/q5ZeO3IdYlx5dhT6SCX6&#xA;X+TnmWy1bU7pruzeC99AxAPKGBjQo3IenTwpvnLdqYzqM5yR2Brn7gHqOzJfl8EcctyL5eZtNh+W&#xA;Wu97i19/ik/5ozAGgl1LnHWDoETB+V10w/0i/jjP/FcZf9ZTJjs/+l9jD86e5MbX8stIQD6xczzM&#xA;Dvx4xqfoox/HLY6LGO8tZ1cz5J3Z+U/Ltmaw2MZb+aWsp27j1C1PozIhhhHkGmWSUuZTYCmw6ZYw&#xA;dirsVdirsVdirsVdirsVdirsVf/Z</xmpGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xmp:Thumbnails>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
+ xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
+ xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#">
+ <xmpMM:RenditionClass>proof:pdf</xmpMM:RenditionClass>
+ <xmpMM:OriginalDocumentID>uuid:65E6390686CF11DBA6E2D887CEACB407</xmpMM:OriginalDocumentID>
+ <xmpMM:DocumentID>xmp.did:AAFD4D716C05EF11A916FAD4CB59D3F6</xmpMM:DocumentID>
+ <xmpMM:InstanceID>uuid:a8cd6e00-15a5-43a6-9809-50c4d7e4d80f</xmpMM:InstanceID>
+ <xmpMM:DerivedFrom rdf:parseType="Resource">
+ <stRef:instanceID>uuid:02dc5f24-85b4-40be-bdfc-38989c0de5dd</stRef:instanceID>
+ <stRef:documentID>xmp.did:27205CC46305EF1186B9D67BF1058F23</stRef:documentID>
+ <stRef:originalDocumentID>uuid:65E6390686CF11DBA6E2D887CEACB407</stRef:originalDocumentID>
+ <stRef:renditionClass>proof:pdf</stRef:renditionClass>
+ </xmpMM:DerivedFrom>
+ <xmpMM:History>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:27205CC46305EF1186B9D67BF1058F23</stEvt:instanceID>
+ <stEvt:when>2024-04-28T15:32:32+02:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS6 (Windows)</stEvt:softwareAgent>
+ <stEvt:changed>/</stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:AAFD4D716C05EF11A916FAD4CB59D3F6</stEvt:instanceID>
+ <stEvt:when>2024-04-28T16:34:38+02:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS6 (Windows)</stEvt:softwareAgent>
+ <stEvt:changed>/</stEvt:changed>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpMM:History>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:illustrator="http://ns.adobe.com/illustrator/1.0/">
+ <illustrator:StartupProfile>Web</illustrator:StartupProfile>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xmpTPg="http://ns.adobe.com/xap/1.0/t/pg/"
+ xmlns:stDim="http://ns.adobe.com/xap/1.0/sType/Dimensions#"
+ xmlns:xmpG="http://ns.adobe.com/xap/1.0/g/">
+ <xmpTPg:NPages>1</xmpTPg:NPages>
+ <xmpTPg:HasVisibleTransparency>False</xmpTPg:HasVisibleTransparency>
+ <xmpTPg:HasVisibleOverprint>False</xmpTPg:HasVisibleOverprint>
+ <xmpTPg:MaxPageSize rdf:parseType="Resource">
+ <stDim:w>450.000000</stDim:w>
+ <stDim:h>450.000000</stDim:h>
+ <stDim:unit>Pixels</stDim:unit>
+ </xmpTPg:MaxPageSize>
+ <xmpTPg:PlateNames>
+ <rdf:Seq>
+ <rdf:li>Cyan</rdf:li>
+ <rdf:li>Magenta</rdf:li>
+ <rdf:li>Yellow</rdf:li>
+ <rdf:li>Black</rdf:li>
+ </rdf:Seq>
+ </xmpTPg:PlateNames>
+ <xmpTPg:SwatchGroups>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:groupName>Standard-Farbfeldgruppe</xmpG:groupName>
+ <xmpG:groupType>0</xmpG:groupType>
+ <xmpG:Colorants>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>Weiß</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>255</xmpG:green>
+ <xmpG:blue>255</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>Schwarz</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>0</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>RGB Rot</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>0</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>RGB Gelb</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>255</xmpG:green>
+ <xmpG:blue>0</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>RGB Grün</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>255</xmpG:green>
+ <xmpG:blue>0</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>RGB Cyan</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>255</xmpG:green>
+ <xmpG:blue>255</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>RGB Blau</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>255</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>RGB Magenta</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>255</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=193 G=39 B=45</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>193</xmpG:red>
+ <xmpG:green>39</xmpG:green>
+ <xmpG:blue>45</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=237 G=28 B=36</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>237</xmpG:red>
+ <xmpG:green>28</xmpG:green>
+ <xmpG:blue>36</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=241 G=90 B=36</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>241</xmpG:red>
+ <xmpG:green>90</xmpG:green>
+ <xmpG:blue>36</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=247 G=147 B=30</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>247</xmpG:red>
+ <xmpG:green>147</xmpG:green>
+ <xmpG:blue>30</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=251 G=176 B=59</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>251</xmpG:red>
+ <xmpG:green>176</xmpG:green>
+ <xmpG:blue>59</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=252 G=238 B=33</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>252</xmpG:red>
+ <xmpG:green>238</xmpG:green>
+ <xmpG:blue>33</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=217 G=224 B=33</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>217</xmpG:red>
+ <xmpG:green>224</xmpG:green>
+ <xmpG:blue>33</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=140 G=198 B=63</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>140</xmpG:red>
+ <xmpG:green>198</xmpG:green>
+ <xmpG:blue>63</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=57 G=181 B=74</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>57</xmpG:red>
+ <xmpG:green>181</xmpG:green>
+ <xmpG:blue>74</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=0 G=146 B=69</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>146</xmpG:green>
+ <xmpG:blue>69</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=0 G=104 B=55</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>104</xmpG:green>
+ <xmpG:blue>55</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=34 G=181 B=115</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>34</xmpG:red>
+ <xmpG:green>181</xmpG:green>
+ <xmpG:blue>115</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=0 G=169 B=157</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>169</xmpG:green>
+ <xmpG:blue>157</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=41 G=171 B=226</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>41</xmpG:red>
+ <xmpG:green>171</xmpG:green>
+ <xmpG:blue>226</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=0 G=113 B=188</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>113</xmpG:green>
+ <xmpG:blue>188</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=46 G=49 B=146</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>46</xmpG:red>
+ <xmpG:green>49</xmpG:green>
+ <xmpG:blue>146</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=27 G=20 B=100</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>27</xmpG:red>
+ <xmpG:green>20</xmpG:green>
+ <xmpG:blue>100</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=102 G=45 B=145</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>102</xmpG:red>
+ <xmpG:green>45</xmpG:green>
+ <xmpG:blue>145</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=147 G=39 B=143</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>147</xmpG:red>
+ <xmpG:green>39</xmpG:green>
+ <xmpG:blue>143</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=158 G=0 B=93</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>158</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>93</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=212 G=20 B=90</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>212</xmpG:red>
+ <xmpG:green>20</xmpG:green>
+ <xmpG:blue>90</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=237 G=30 B=121</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>237</xmpG:red>
+ <xmpG:green>30</xmpG:green>
+ <xmpG:blue>121</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=199 G=178 B=153</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>199</xmpG:red>
+ <xmpG:green>178</xmpG:green>
+ <xmpG:blue>153</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=153 G=134 B=117</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>153</xmpG:red>
+ <xmpG:green>134</xmpG:green>
+ <xmpG:blue>117</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=115 G=99 B=87</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>115</xmpG:red>
+ <xmpG:green>99</xmpG:green>
+ <xmpG:blue>87</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=83 G=71 B=65</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>83</xmpG:red>
+ <xmpG:green>71</xmpG:green>
+ <xmpG:blue>65</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=198 G=156 B=109</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>198</xmpG:red>
+ <xmpG:green>156</xmpG:green>
+ <xmpG:blue>109</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=166 G=124 B=82</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>166</xmpG:red>
+ <xmpG:green>124</xmpG:green>
+ <xmpG:blue>82</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=140 G=98 B=57</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>140</xmpG:red>
+ <xmpG:green>98</xmpG:green>
+ <xmpG:blue>57</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=117 G=76 B=36</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>117</xmpG:red>
+ <xmpG:green>76</xmpG:green>
+ <xmpG:blue>36</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=96 G=56 B=19</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>96</xmpG:red>
+ <xmpG:green>56</xmpG:green>
+ <xmpG:blue>19</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=66 G=33 B=11</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>66</xmpG:red>
+ <xmpG:green>33</xmpG:green>
+ <xmpG:blue>11</xmpG:blue>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpG:Colorants>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:groupName>Graustufen</xmpG:groupName>
+ <xmpG:groupType>1</xmpG:groupType>
+ <xmpG:Colorants>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=0 G=0 B=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>0</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=26 G=26 B=26</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>26</xmpG:red>
+ <xmpG:green>26</xmpG:green>
+ <xmpG:blue>26</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=51 G=51 B=51</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>51</xmpG:red>
+ <xmpG:green>51</xmpG:green>
+ <xmpG:blue>51</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=77 G=77 B=77</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>77</xmpG:red>
+ <xmpG:green>77</xmpG:green>
+ <xmpG:blue>77</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=102 G=102 B=102</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>102</xmpG:red>
+ <xmpG:green>102</xmpG:green>
+ <xmpG:blue>102</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=128 G=128 B=128</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>128</xmpG:red>
+ <xmpG:green>128</xmpG:green>
+ <xmpG:blue>128</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=153 G=153 B=153</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>153</xmpG:red>
+ <xmpG:green>153</xmpG:green>
+ <xmpG:blue>153</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=179 G=179 B=179</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>179</xmpG:red>
+ <xmpG:green>179</xmpG:green>
+ <xmpG:blue>179</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=204 G=204 B=204</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>204</xmpG:red>
+ <xmpG:green>204</xmpG:green>
+ <xmpG:blue>204</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=230 G=230 B=230</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>230</xmpG:red>
+ <xmpG:green>230</xmpG:green>
+ <xmpG:blue>230</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=242 G=242 B=242</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>242</xmpG:red>
+ <xmpG:green>242</xmpG:green>
+ <xmpG:blue>242</xmpG:blue>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpG:Colorants>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:groupName>Webfarben</xmpG:groupName>
+ <xmpG:groupType>1</xmpG:groupType>
+ <xmpG:Colorants>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=63 G=169 B=245</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>63</xmpG:red>
+ <xmpG:green>169</xmpG:green>
+ <xmpG:blue>245</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=122 G=201 B=67</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>122</xmpG:red>
+ <xmpG:green>201</xmpG:green>
+ <xmpG:blue>67</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=255 G=147 B=30</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>147</xmpG:green>
+ <xmpG:blue>30</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=255 G=29 B=37</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>29</xmpG:green>
+ <xmpG:blue>37</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=255 G=123 B=172</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>123</xmpG:green>
+ <xmpG:blue>172</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=189 G=204 B=212</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>189</xmpG:red>
+ <xmpG:green>204</xmpG:green>
+ <xmpG:blue>212</xmpG:blue>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpG:Colorants>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpTPg:SwatchGroups>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
+ <pdf:Producer>Adobe PDF library 10.01</pdf:Producer>
+ </rdf:Description>
+ </rdf:RDF>
+</x:xmpmeta>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<?xpacket end="w"?>
+endstream endobj 3 0 obj <</Count 1/Kids[7 0 R]/Type/Pages>> endobj 7 0 obj <</ArtBox[11.7476 0.0 450.0 430.838]/BleedBox[0.0 0.0 450.0 450.0]/Contents 8 0 R/LastModified(D:20240428163440+02'00')/MediaBox[0.0 0.0 450.0 450.0]/Parent 3 0 R/PieceInfo<</Illustrator 9 0 R>>/Resources<</ExtGState<</GS0 10 0 R>>/Properties<</MC0 5 0 R>>>>/Thumb 11 0 R/TrimBox[0.0 0.0 450.0 450.0]/Type/Page>> endobj 8 0 obj <</Filter/FlateDecode/Length 2581>>stream
+HM u@[Ƭа GfVwI=/n4"3GovtK[m㧿㖎\ǖ w}H}lKVk;-=xC}fW>J;tKNGj+兠Iҁkq{IYC*דt?\nӭcx-VYenϿ?J.6֗N\}J]W^Kɩ]ԳQOg|芯e>k?_8+ݒ?„e}Nɶ}TߛSͳΜB tL#kά籖PQGZ9Zq̬z -Hh?Dt3wr11zlGC' 0hLd}A[iju길~‖i,_G=vԆG C[(t'fth G<rAN^Iw3G%]3
+aҶSP,Se{F b8UpmD~uk"ph2 RSXf3иr"TBH.X`ߪ€p x%! Dt8.0j[sdsqbw%Ku7[j.d
+S@w%K;]dϯ )ms0;#r}>׫L I-iT3+o'5LSKIrx^6H.7! .
+51w/c[l@֯P4,x<2
+l%ђ*ĺue-^>^gN7foJOY5GQx :~kp v0[{lmmeUbz<b߷4ѭ p,YM׫S2N F)2<O5*t׍NH)R[>Lɏl{'kN)I+֫~9([
+%VO1|͗4=+|u?H-ph@ޗIiFI=u׉~!c_֍%߿
+endstream endobj 11 0 obj <</BitsPerComponent 8/ColorSpace 12 0 R/Filter[/ASCII85Decode/FlateDecode]/Height 56/Length 874/Width 56>>stream
+8;YQVZ$#@d$q6LSV%LYg$TqB,_*^bY#5M7/;gFFC"Kh7r&0sPu[W>?c4G^)knC-J$
+805gDGi<j\;uBq\&gQh<N1X\cm$p#j6C:FD+R9g2M"++Qq0e7S=`]tJ6i[n?.EpUm
+on^hEPgXaW@0u[W4F]bq@D2:dI=n_W&GcelQE2q<!\9_>gf"nr)H.C]rT-gUeA*%8
+H%%arT3fs)!D>1"MhPg<_0HP"h5hkqQ@)@?ZQ<]SZWa6$9]Zs[]_$YrH,ZO-0jUf$
+*0nh3[.CPKZm:7$99lYB"*ku(-(9%;/nV\Om!n)seQ$&m6:)PEdktU24O`g33[$5X
+U/kuVV7IS(llRsA;<>S<3kFH^la%OS!Q@gW_L.(+7o.1_0YdHt'jEh;F:h55]Q/n4
+@[Z(SB"50NV:(F[IIoC]o[?.9GJF/4I2m]:]rq^Emim$$d"I$@K]6o`I!\)=>)h@.
+2@kojb\Tr=4M(ei5F0#"\qkoMV_CGdNqm;;)*=!/6*2MW4te0W_Y'bf/Xo_t)`gK&
+raFVajJm^)9:^QgCYZ;KjEdYCT!f])@Tk]f>^,ZP=/mdEqT!]Z_]_+YJCOJ-'Kql/
+IFTK_L%MpIXZApaK\M"g*GlrNF;CTq,!8l-q,d5)T`a1h?-hJ/[AG=XM-Y5AO"%h&
+SQ!:IK\Gk":<HpmA6+HYT%#kl<D&ZS(BYYg@[N4XP#n,toeQ9[B?l,NEj42t53c<D
+UFJ]pA">cHn_dmJC[#dYXh+\#MV7h^bIAq!m7%6O:X9Ph9NO*3DVN+(-\m-Z=.J=I
+Rf/(:p;2C;+AMSVIj,iu'Z7:q+4S!nV"Q',?6/"((LNt\HXX]oZBM-t\dEkXAZC&S
+1UY%8rXT!nDI2l~>
+endstream endobj 12 0 obj [/Indexed/DeviceRGB 255 13 0 R] endobj 13 0 obj <</Filter[/ASCII85Decode/FlateDecode]/Length 428>>stream
+8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0
+b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup`
+E1r!/,*0[*9.aFIR2&b-C#s<Xl5FH@[<=!#6V)uDBXnIr.F>oRZ7Dl%MLY\.?d>Mn
+6%Q2oYfNRF$$+ON<+]RUJmC0I<jlL.oXisZ;SYU[/7#<&37rclQKqeJe#,UF7Rgb1
+VNWFKf>nDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j<etJICj7e7nPMb=O6S7UOH<
+PO7r\I.Hu&e0d&E<.')fERr/l+*W,)q^D*ai5<uuLX.7g/>$XKrcYp0n+Xl_nU*O(
+l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~>
+endstream endobj 5 0 obj <</Intent 14 0 R/Name(Ebene 1)/Type/OCG/Usage 15 0 R>> endobj 14 0 obj [/View/Design] endobj 15 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 10 0 obj <</AIS false/BM/Normal/CA 1.0/OP false/OPM 1/SA true/SMask/None/Type/ExtGState/ca 1.0/op false>> endobj 9 0 obj <</LastModified(D:20240428163440+02'00')/Private 16 0 R>> endobj 16 0 obj <</AIMetaData 17 0 R/AIPDFPrivateData1 18 0 R/AIPDFPrivateData10 19 0 R/AIPDFPrivateData2 20 0 R/AIPDFPrivateData3 21 0 R/AIPDFPrivateData4 22 0 R/AIPDFPrivateData5 23 0 R/AIPDFPrivateData6 24 0 R/AIPDFPrivateData7 25 0 R/AIPDFPrivateData8 26 0 R/AIPDFPrivateData9 27 0 R/ContainerVersion 11/CreatorVersion 16/NumBlock 10/RoundtripVersion 16>> endobj 17 0 obj <</Length 1005>>stream
+%!PS-Adobe-3.0
+%%Creator: Adobe Illustrator(R) 16.0
+%%AI8_CreatorVersion: 16.0.3
+%%For: (DCW Laptop 1) ()
+%%Title: (jason.ai)
+%%CreationDate: 4/28/2024 4:34 PM
+%%Canvassize: 16383
+%%BoundingBox: 230 -502 665 -73
+%%HiResBoundingBox: 230.7476 -501.166 664.166 -73.1621
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%AI5_FileFormat 12.0
+%AI12_BuildNumber: 691
+%AI3_ColorUsage: Color
+%AI7_ImageSettings: 0
+%%RGBProcessColor: 0 0 0 ([Passermarken])
+%AI3_Cropmarks: 219 -504 669 -54
+%AI3_TemplateBox: 480.5 -280.5 480.5 -280.5
+%AI3_TileBox: 158.3999 -687.8398 729.5996 129.8398
+%AI3_DocumentPreview: None
+%AI5_ArtSize: 14400 14400
+%AI5_RulerUnits: 6
+%AI9_ColorModel: 1
+%AI5_ArtFlags: 0 0 0 1 0 0 1 0 0
+%AI5_TargetResolution: 800
+%AI5_NumLayers: 1
+%AI9_OpenToView: -382 173 1 1588 914 18 0 0 50 117 0 0 0 1 1 0 1 1 0 1
+%AI5_OpenViewLayers: 7
+%%PageOrigin:80 -580
+%AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9
+%AI9_Flatten: 1
+%AI12_CMSettings: 00.MS
+%%EndComments
+
+endstream endobj 18 0 obj <</Length 27925>>stream
+%%BoundingBox: 230 -502 665 -73
+%%HiResBoundingBox: 230.7476 -501.166 664.166 -73.1621
+%AI7_Thumbnail: 128 128 8
+%%BeginData: 27768 Hex Bytes
+%0000330000660000990000CC0033000033330033660033990033CC0033FF
+%0066000066330066660066990066CC0066FF009900009933009966009999
+%0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66
+%00FF9900FFCC3300003300333300663300993300CC3300FF333300333333
+%3333663333993333CC3333FF3366003366333366663366993366CC3366FF
+%3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99
+%33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033
+%6600666600996600CC6600FF6633006633336633666633996633CC6633FF
+%6666006666336666666666996666CC6666FF669900669933669966669999
+%6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33
+%66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF
+%9933009933339933669933999933CC9933FF996600996633996666996699
+%9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33
+%99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF
+%CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399
+%CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933
+%CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF
+%CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC
+%FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699
+%FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33
+%FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100
+%000011111111220000002200000022222222440000004400000044444444
+%550000005500000055555555770000007700000077777777880000008800
+%000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB
+%DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF
+%00FF0000FFFFFF0000FF00FFFFFF00FFFFFF
+%524C45FD33FF76FD7EFF7D4A51FD7CFFA8757C7576FD7BFF7D4AA17C4A7D
+%FD7AFF4BA0A0A77C51A8FD05FFA9AFA9AF85AF85AF85AFA9AFAFFD66FF7D
+%51FD04A0754B7D855A6137373637373736373737363737373661618585AF
+%FD60FF7C75A1A0A1A0A1754B2F3D3761373D3761373D3761373D3761373D
+%373D373737616185A9FD5BFFA94AA0A0A07CA0A0A0754B2E373637363736
+%37363736373637363736373637363736373637368585FD56FF85613075A0
+%A1A0A7A0A0A0A7A0752E6137613761376137613761376137613761376137
+%6137613761373D3785AFFD50FFA9613637372F6FA1A0A07CA0A0A07CA775
+%4A2E3D3737363D3737363D3737363D3737363D3737363D3737363D373736
+%375BA9AFFD4BFFAF5B3D373D37612E99A0A7A0A1A0A1A0A0A07C4A752F61
+%373D3761373D3761373D3761373D3761373D3761373D3761373D373D3761
+%85FD48FF846136373637373D37524A754B75517C76A0A0A0514A754B2F3D
+%363736373637363736373637363736373637363736373637363736373637
+%3685FD44FFAF613D3761376137612F524A75749974754A7551A0A0764A75
+%755137613761376137613761376137613761376137613761376137613761
+%37613761376185FD40FFA9853737363D3737375A4B7498C1C0C1C0C1C0C1
+%98754A7C4B996E7575523737363D3737363D3737363D3737363D3737363D
+%3737363D3737363D3737363D37375AFD3EFF85613761373D376137594A98
+%C0C1C0C1C1C1C0C1C1C1C09F4A4B9EC14A7C4B5A373D3761373D3761373D
+%3761373D3761373D3761373D3761373D3761373D37613737378BFD3BFF5A
+%373637363736373759275227514A9898C19EC198C19EC1C0996EC1C0994A
+%75283D373736373637363736373637363736373637363736373637363736
+%3D373D373D37371561A9FD37FFAF373D376137613761376136613761375A
+%277598C1C0C1C1C1C0C1C1C1C0C1C19F4A4B363D37613761376137613761
+%3761376137613761376137613761375B35592E592E532E592F5B84FD35FF
+%853737363D3737363D3737363D3737363D37534A4B98C198C1C0C198C1C0
+%C198C1C09F4A51275228532F37373D3737363D3737363D3737363D373D36
+%362E514AFD09754A2E61FD33FF853761373D3761373D3761373D3761373D
+%37612F99764B9EC1C0C1C1C1C0C1C1C1C0C1C1C198C1989874754B533661
+%373D3761373D3761373D375B2E514A9FA0A0A0A7A0A1A0A7A0C975523737
+%5BFD30FFA961363736373637363736373637363736FD04372F4BA05175C0
+%C198C19EC198C19EC198C1C0C1BAC1C0C1BAC16E4B2F3D37373637363736
+%3D372F267575FD05A07CA0A0A07CA0754B363D363736AFFD2DFFAF613761
+%3761376137613761376137613761375A2E524B754A752699C0C1C1C1C0C1
+%C1C1C0C1C1C1C0C1C1C1C0C1C1C198752E6137613761376136524AA0A0A1
+%A0A7A0A0A0A7A0A0A0A7A0752F613761373D37AFFD2BFFA95B363D373736
+%3D3737363D3737363D37372E516E9898C19EC174754AC1C0C1C0C198C1C0
+%C198C1C0C198C1C0C198C1C0C1C0742E3D363D373D365175FD05A07CA0A0
+%A07CFD05A02737363D3737363737AFFD29FFAF6137613761373D3761373D
+%3761373D375A4B7498C1C1C1C0C1C1C1C0759EC1C0C1C1C1C0C1C1C1C0C1
+%C1C1C0C1C1C1C0C1C1C1C0742F3D3761364B75A7A0A0A0A1A0A0A0A1A0A0
+%A0A1A0A77553373D3761373D373D37AFFD27FFA95B363736373637363736
+%373637363D372E4AC0C0C198C19EC198C19EC198C1C0C198C19EC198C19E
+%C198C19EC198C19EC198C19EC198513737365175A07CA0A0A07CA0A0A07C
+%A0A0A07CA0A0752F3D363736373637363736A9FD26FF6137613761376137
+%6137613761376137526EC1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0
+%C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C16E5A375375A7A0A7A0A0A0A7A0
+%A0A0A7A0A0A0A7A0A04B613761376137613761373D37FD25FF613737363D
+%3737363D3737363D373737354AC1C0C1C0C198C1C0C198C1C0C198C1C0C1
+%98C1C0C198C1C0C198C1C0C198C1C0C198C1C0C1C0982F364AA0A0A07CA0
+%A0A07CA0A0A07CA0A0A07CA17552373D3737363D3737363D373736FD23FF
+%853761373D3761373D3761373D3761373D27C1C1C1C0C1C1C1C0C1C1C1C0
+%C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1985227
+%A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A075363D3761373D3761373D37
+%61373737FD21FF853637363736373637363736373637363D2F74BAC19EC1
+%98C1C0C198C1C0C198C19EC198C19EC198C19EC198C19EC198C19EC198C1
+%9EC198C1C0C12675A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A027373737
+%3637363736373637363736375AFD1FFFAF37613761376137613761376137
+%613761375374C7C1C1C0C1C1C1C0C1989F74C1C1C1C0C1C1C1C0C1C1C1C0
+%C1C1C1C0C1C1C1C0C1C1C1C0C1C1C19E517CA7A0A7A0A0A0A7A0A0A0A7A0
+%A0A0A7A0A775593761376137613761376137613761373D85FD1EFF363737
+%37363D3737363D3737363D3737363D2798C0C1C0C198744B4B264B4A7598
+%C1C0C198C1C0C198C1C0C198C1C0C198C1C0C198C1C0C198C1C07451A1A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA07C51373D373736FD04373D3737373D
+%3737363785FD1CFF61373761373D3761373D3761373D3761373D3651C0C1
+%C0C16E522F594B9998C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1
+%C1C1C0C1C1C1C09F4BA0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0752759
+%2E5252524B5252522E5A36373761373D3761FD1BFF843736373637363736
+%37363736373637363737374AC1C0982635372F4AC1C0C198C19EC198C19E
+%C198C19EC198C19EC198C19EC198C19EC198C1C0C14A7CA0A07CA0A0A07C
+%A0A0A07CA0A0A07CA0A0A02675749898C098C0FD04986E754A51282F2F37
+%1485FD19FFAF613761376137613761376137613761376137613675C09827
+%613D5A4AC1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1
+%C1C0C1C1C14A7CA0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A74B75C1C1C0
+%C1C1C1C0C1C1C1C0C1C0C1989F74742E6137AFFD18FF61363D3737363D37
+%37363D3737363D3737363D37374A98273737372798C0C1C0C198C1C0C198
+%C1C0C198C1C0C198C1C0C198C1C0C198C1C0C1C0C14A75FD04A07CA0A0A0
+%7CA0A0A07CA0A0A07CA1754A98C1C0C198C1C0C198C1C0C198C1C0C1C0C1
+%4A36373737FD17FFAF373D3761373D3761373D3761373D3761373D376136
+%4B4A5B373D2F98C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0
+%C1C1C1C0C1C1C14A76A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A1764B98
+%C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C17452373D373D85FD16FF363736
+%373637363736373637363736373637363736372653373D364B98C19EC198
+%C19EC198C1C0C1C0C19EC198C1C0C198C1C0C198C1C0C198994A75FD04A0
+%7CA0A0A07CA0A0A07CA0A0A07CA0764B6EC1C0C198C19EC198C19EC198C1
+%9EC198C1984B363D36373637A9FD14FF853D376137613761376137613761
+%37613761376137613752366137524AC1C1C1C0C1C1C1C0C1C1C1989FC1C1
+%C0C1C1C1C0C1C1C1C0C1C0C1747551A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7
+%A0A0A0C97C4B74C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1982E613761
+%37613785FD13FFAF37363D3737363D3737363D3737363D3737363D373736
+%372F3737534A75C0C1C0C198C1C0C198754A4A98C1C0986E754A756E756E
+%744A754B7575A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A0754B74C1C0
+%C1C0C198C1C0C198C1C0C198C1C0C1C0C14A36373D3737363D37AFFD12FF
+%85373D3761373D3761373D3761373D3761373D3761373D376137594A7574
+%C1C0C1C1C1C09F6E7551519EC174754B7675A07C7C757C76A07CA1A0A0A0
+%A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A7754B98C1C1C1C0C1C1C1C0C1C1
+%C1C0C1C1C1C0C1C1C19852373D3761373D373D61FD12FF36373637363736
+%373637363736373637363736373637363737364AA04B99C0C198C198744A
+%76A0A04AC14A5175A0A0A07CFD07A07CA0A0A07CA0A0A07CA0A0A07CA0A0
+%A07CA0A0A04A4B4AC1C0C19EC198C19EC198C19EC198C19EC198C1C0742F
+%3D3637363736373637A9FD10FF853D376137613761376137613761376137
+%6137613761376137614BA0A07598C1C0C1985175A7A0A776754A7CA0A7A0
+%A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A04A
+%76A07C4AC1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C14B613761376137
+%6137613785FD10FF61363D3737363D3737363D3737363D3737363D373736
+%3D373D2875A0A04B99C0C174517CFD05A0267CA0A07CA0A0A07CA0A0A07C
+%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07C754A7CA0A0A0754AC1C0
+%C198C1C0C198C1C0C198C1C0C198C19852373D3737363D3737363D37AFFD
+%0EFFAF373D3761373D3761373D3761373D3761373D3761373D37613575A0
+%A7A07574C798517CA7A0A0A0A1A07CA0A1A0A0A0A1A0A0A0A1A0A0A0A1A0
+%A0A0A1A0A0A0A1A0A0A0A1A0A0A0A7A05151FD04A0A1A05174C1C1C1C0C1
+%C1C1C0C1C1C1C0C1C1C1C0982E3D3761373D3761373D373D85FD0EFF5A37
+%36373637363736373637363736373637363736373637365175A07CA05174
+%984B75A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0
+%A0A07CA0A0A07CA0A0A07CA075A07CA0A0A07CA0764A98C19EC198C19EC1
+%98C19EC198C19EC16E2F373736373637363736373661AFFD0CFFAF613761
+%3761376137613761376137613761376137613761375975A7A0A7A07C7499
+%51A7A0A7A0A0A0A7A0A1A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0
+%A0A7A0A0A0A7A0A0A0A7A0A1A0A7A0A0A0A7A0A75199C1C1C0C1C1C1C0C1
+%C1C1C0C1C1C1C09F2E3D3761376137613761376137AFFD0CFF85143D3737
+%363D3737363D3737363D3737363D3737363D373727A0A0A07CA07C4B4AA0
+%A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A0
+%7CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A04AC1C0C198C1C0C198C1
+%C0C198C1C0C19851363D363D3737363D373736375BFD0CFF61373761373D
+%3761373D3761373D3761373D3761373D37612F75A0A1A0A0A0A74B51A0A1
+%A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0
+%A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A07574C1C1C1C0C1C1C1C0C1
+%C1C1C0C1C1C17452363D3761373D3761373D3761AFFD0AFFA83736373637
+%363736373637363736373637363736373637375275A07CFD04A0754BA07C
+%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0756E98C19EC198C19EC198
+%C19EC198C1C0C1744B2E36373D37373637373714AFFD0AFFAF3761376137
+%613761376137613761376137613761376137614BA0A0A7A0A0A0A7A0A0A0
+%A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A7A0A7A0A0A0A7A0A0A0A7A0
+%A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A14BC1C1C1C0C1C1C1C0
+%C1C1C1C0C1C1C1C0C1C0984A522F5A3661373D373D61FD0AFF5A37373736
+%3D3737363D3737363D3737363D3737363D373D2E75A0A07CA0A0A07CA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07575517575A0A0A07CA0A0A07C
+%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0756EC1C0C198C1C0
+%C198C1C0C198C1C0C198C1C0C198986E754A514B522752A9FD09FF613761
+%373D3761373D3761373D3761373D3761373D37613651A0A7A0A0A0A1A0A0
+%A0A1A0A0A0A1A0A0A0A1A0A0A0A1FD04A04B767CA17C754AFD04A0A1A0A0
+%A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A77C759EC1C1C1C0C1
+%C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C0C1BAC198C098CFFD08FFAF3637
+%363736373637363736373637363736373637363D304B75A07CA0A0A07CA0
+%A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0754AA8FD05FFA14AA0A0A07CA0
+%A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA04B98C0C19EC1
+%98C19EC198C19EC198C19EC198C19EC198C1C0C198C1C0C0A0FD08FF8537
+%37613761376137613761376137613761376137612F5175A7A0A7A0A0A0A7
+%A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A04AFD08FFA84AA0A0A7A0A0A0
+%A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A07C6EC1C1C1C0C1C1
+%C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1BAA0FD08FF85373736
+%3D3737363D3737363D3737363D3737373D2E4A75A1A0A07CA0A0A07CA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA14B7DFFFFFFA77DFD04FF7C75A07CA0
+%A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA07C4B98C1C0C1
+%98C1C0C198C1C0C198C1C0C198C1C0C198C1C0C198C1C0984BFD08FF5B3D
+%373D3761373D3761373D3761373D376137372775A0A1A0A1A0A0A0A1A0A0
+%A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A075A8FFCA5220264BFFFFFFA175
+%A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A75199
+%C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C17459AFFD
+%06FFAF373637363736373637363736373637363737362675FD04A07CA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A04ACAFFA1F82620207D
+%FFFFA84AA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CFD04
+%A07C4AC198C19EC198C19EC198C19EC198C19EC198C19EC198C19EC1984B
+%36AFFD07FF37613761376137613761376137613761375A4AA0A0A7A0A0A0
+%A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A075A1FFA82620
+%2620A8FFFF7C75A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0
+%A7A0A0A0A7A07598C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1
+%C1C0982F3D85FD06FF8537363D3737363D3737363D3737363D372F4AA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A075
+%75FFFF7D4B4B7DFFFFA85175A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0
+%A07CA0A0A07CA0A0A07CA15198C0C1C0C198C1C0C198C1C0C198C1C0C198
+%C1C0C198C1C09827373785FD06FFAF373D3761373D3761373D3761373D37
+%534AA0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0
+%A0A0A1A0A15176FD06FFA87675A1A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0
+%A0A1A0A0A0A1A0A0A0A1FD04A06EC1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1
+%C1C0C1C1C1C0994B36373D61FD06FF603736373637363736373637363D37
+%524AA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07C
+%A0A0A07CA0A0A04A517CA8A8A8764B51A0A0A07CA0A0A07CA0A0A07CA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07C5198C198C19EC198C19EC198
+%C19EC198C19EC198C19874273637373661FD06FF85376137613761376137
+%613761375275A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0
+%A7A0A0A0A7A0A0A0A7A0A0A0C97C75517551757CC9A0A0A0A7A0A0A0A7A0
+%A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0C97599C0C1C1C1C0
+%C1C1C1C0C1C1C1C0C1C1C1C0C174512F61376137615BFD06FF5A37373736
+%3D3737363D373D365175FD05A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07C
+%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CFD04A07C4AC19EC1
+%C0C198C1C0C198C1C0C19EC198754A53363D373D37373661FD06FF853761
+%373D3761373D3761365175A7A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0
+%A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1
+%A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0
+%A07598C1C0C1C1C1C0C1C1C1C0C1C1C1744B27363761373D3761373D37FD
+%06FF5A37363736373637363D304B75A07CA0A0A07CA0A0A07CA0A0A07CA0
+%A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A0
+%7CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0
+%A0A07CA0A0A04B74C0C198C19EC198C19EC198C19EC174754A522F37373D
+%36373637FD06FF613761376137613761365175A7A0A7A0A0A0A7A0A0A0A7
+%A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0
+%A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7
+%A0A0A0A7A0A0A0A7FD04A04AC1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C198
+%994B522F61376137FD06FF5B37363D3737363D364B75A1A0A07CA0A0A07C
+%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07C
+%A0A0A07CA0A0A07CA0A0A07CA0A0A07C7598C198C1C0C198C1C0C198C1C0
+%C198C1C0C1C0C198744A522F37FD06FF61373D3761373D2F5175A7A0A1A0
+%A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0
+%A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0
+%A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A15199C1C1C0C1C1C1C0
+%C1C1C1C0C1C1C1C0C1C1C1C0C1C0C198754BFD06FF5A37373D373D2F4A75
+%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07C
+%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A07C4AC1C0
+%C198C19EC198C19EC198C19EC198C19EC198C1C0C1C0C1FD06FF85375B2F
+%592E4B75C9A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0
+%A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0
+%A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0
+%A1A07598C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1FD06
+%FF61364B754A754A5175A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07C
+%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07C
+%A0A0A07CA0A0A05175C0C198C1C0C198C1C0C198C1C0C198C1C0C198C1C0
+%C1C0C1FD06FF844A7C76A075A05175A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0
+%A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0
+%A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0
+%A0A0A1A0A0A0A1A0A0A0A1A0A04AC1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0
+%C1C1C1C0C1C19F4BFD06FF4A75757C7576757C4AA07CA0A0A07CA0A0A07C
+%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07C
+%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A05198C19EC198C19EC198C19E
+%C198C19EC198C19EC1C098265AFD05FF7D7576A076A075A0767576A7A0A0
+%A0A7A0A0A0A7A0A1A0A7A0A1A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7
+%A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0
+%A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A77599C1C1C0C1
+%C1C1C0C1C1C1C0C1C1C1C0C1C1C1C09F4B3661FD04FFA851757C757C757C
+%75A04B76FD04A07CFD04A0A1A0A07CA075A07CA1A0A07CA0A0A07CA0A0A0
+%7CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0
+%A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A0
+%4AC1C0C198C1C0C198C1C0C198C1C0C198C1C09E26363785FD04FFA74AA0
+%76A075A076A0757575A7A0A1A0A0A0A7A0A075754B514A754B7575A1A0A0
+%A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1
+%A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0
+%A0A1A0A0A0A1A07598C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C14A36373D
+%85FD04FF5175757C7576757C757C4B75FD04A07C754B514A514B76757675
+%7C754B4AA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CFD07A07CA0A0A07CA0A0A07CA0A0A07C
+%A0A0A07CA0A0A07CA05174C0C19EC198C19EC198C19EC198C19EC16E2F37
+%3736AFFD04FF7575A076A075A076A075A04B7C767C51754B7575A076A076
+%A075A076A0767575A7A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0
+%A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A1A0A0A0A1A0A7A0A0A0A7A0
+%A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A04AC1C1C1C0C1C1C1C0C1C1C1C0
+%C1C1C1985137613761FD04FFA84A7C757C757C757C757C75764A514A7575
+%7C75A0757C757C757C757C757C754B75A07CA0A0A07CA0A0A07CA0A0A07C
+%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A04AA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A05198C1C0C198
+%C1C0C198C1C0C198C1C0742F3D373736FD04FF7C7576A075A076A075A076
+%A075A076A075A076A075A076A075A076A075A076A07575A0A0A0A1A0A0A0
+%A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0
+%A0A0A77575A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0
+%A77575C0C1C1C1C0C1C1C1C0C1C1C1C0C14B3D37613785FD04FF764B7C75
+%76757C7576757C7576757C7576757C757C75754B4B4A757576757C75764A
+%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0
+%A07CA0A0A07CFD04A07551A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0
+%A0A07CA0A0A07CA04AC198C19EC198C19EC198C19EC16E2F3737363785FD
+%04FF4BA076A075A076A075A076A075A076A075A076A075754A4B4A4B4AA0
+%75A076A07575A0A1A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7
+%A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A74BA0A0A7A0A0A0A7A0A0A0A7A0A0
+%A0A7A0A0A0A7A0A0A0A7A0A0A0A7A07598C1C1C1C0C1C1C1C0C1C1C1C075
+%363D376137AFFFFFFFA84B757C757C757C757C757C757C757C757C75A075
+%4B264B4A4A2675757C757C75764AA0A0A07CA0A0A07CA0A0A07CA0A0A07C
+%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07551A0A07CA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA17574C0C1C0C198
+%C1C0C198C1C0C16E754B522F5BFD04FFA14BA075A076A075A076A075A076
+%A075A076A075754A4B4A4B4A5175A076A075A0767575A7A0A0A0A1A0A0A0
+%A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0
+%7551A7A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1FD04A0
+%4AC1C0C1C1C1C0C1C1C1C0C1C1C1C0C1987476FD04FF4A757576757C7576
+%757C7576757C7576757C7575204B264A2651757C757C7576757C754B75A0
+%A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A0
+%7CA0A0A07CA04A7C7CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0
+%A0A07CA0A0A07C7574C198C19EC198C19EC198C1C0C198C1BAC9FFFFFF7C
+%757CA075A076A075A076A075A076A075A076764A4B4A4B4B7C76A075A076
+%A075A076A07575A0A1A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0
+%A7A0A0A0A7A0A0A0A7A0A0A0C97575A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0
+%A0A0A7A0A0A0A7A0A0A0A7A0A0A0C97575C0C1C1C1C0C1C1C1C0C1C1C1C0
+%C1C0C1CFFFFFA84B75A0757C757C757C757C757C757C757C75A051755176
+%757C757C757C757C757C757C757C4A7CA0A07CA0A0A07CA0A0A07CA0A0A0
+%7CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A0754B76A07CA0A0A07CA0
+%A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CFD05A04AC1C0C1C0C198C1
+%C0C198C1C0C198C0A0FFFFFF7C51A075A076A075A076A075A076A075A076
+%A075A076A075A076A075A076A075A0757C75A076754BA7A0A0A0A1A0A0A0
+%A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A7A05175A7A0
+%A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0
+%7598C1C0C1C1C1C0C1C1C1C0C1C1C1BACAFFFFFF4A767576757C7576757C
+%7576757C7576757C7576757C7576757C7576757C757C7551517C757C754B
+%76A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0
+%A0A07C514BA07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A0
+%7CA0A0A07CA0A0A07574C0C198C19EC198C19EC198C1BAC1A8FFFFFF7576
+%A075A076A075A076A075A076A075A076A075A076A075A076A076A0757651
+%5151A075A076A04BFD04A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0
+%A0A7A0A0A0A7A0A1757575A7A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7
+%A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A14BC1C0C1C1C1C0C1C1C1C0C1C1C1
+%A0FD04FF4A7C757C757C757C757C757C757C757C75A07575757675755175
+%75754A754B4A4BA0757C757C755175A0A0A07CA0A0A07CA0A0A07CA0A0A0
+%7CA0A0A07CFD07A076764A4B75A1A0A07CA0A0A07CA0A0A07CA0A0A07CA0
+%A0A07CA0A0A07CA0A0A07CA0A0A07CFD04A07574C198C1C0C198C1C0C198
+%C198CFFD04FF7651A076A075A076A075A076A075A075754A754B75517675
+%7C4B4A4BA8A77575A075A076A075A04BA0A0A1A0A0A0A1A0A0A0A1A0A0A0
+%A1A0A0A0A1A0A0A0A7A0A0757651514BA0A0A1A0A1A0A0A0A1A0A0A0A1A0
+%A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A17575C1C1C0
+%C1C1C1C0C1C1C1C0C8FD05FF7D4A757C7576757C7576757C75754A5176A7
+%A8FD04FFCF76517DFFA84B4BA07576757C757C75517CA07CA0A0A07CA0A0
+%A07CA0A0A07CA0A0A07CA075754B754A514B7C7CFD05A07CA0A0A07CA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A04A
+%C1C0C198C19EC198C1C0C0A7FD06FF765175A076A076A076A075514BA8FD
+%06FFA87C4BA1FFFFA14B75A076A075A076A0767651A1A0A7A0A0A0A7A0A0
+%A0A7A0A7FD04A075754B514A7C76A0A0C9A0A1A0A7A0A0A0A7A0A0A0A7A0
+%A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0
+%7674C1C0C1C1C1C0C1C1C19FFD08FF7C514A75517675754A757DFD06FFCA
+%765176FFFFFF764B757C757C757C757C757C4A75A0A07CFD07A0759F7575
+%4A522E2F2F373651A0A1A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0
+%A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07575C0C1
+%98C1C0C198C198CAFD0AFF7D4A754A4A51CAFD06FFA8764BA1FD04FF764B
+%75A076A075A076A075A0755176A7A0A0A0A7A0A075754B512E5935373761
+%373D37612EA0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0
+%A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A04AC1C1C1C0C1
+%C1C1C0C8FD0BFF7D757575517676FFFFFFA8A14B757DFD04FFA84B51757C
+%757C7576757C757675754BA07CA0A0A075754A512E363637373D37373637
+%3637372F4AA07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A0
+%7CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0756EC19EC198C1
+%C0C0A7FD0BFFA84BA04AA8FF7C517C757676CAFD05FFA74A757CA075A076
+%A075A076A0767C4AA0A0A7A0A06F512E5A37613761376137613761376137
+%613651A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0
+%A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A17C75C1C1C0C1C1C1A0
+%FD0CFF7D75767576FFFFFFA8CACAFD05FFA87C4A75757C757C757C757C75
+%7C757C4A76A0A07575272F363D3737363D3737363D3737363D3737363D27
+%75FD04A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0
+%A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A04A99C0C198C19FFD0DFFA74A
+%A07551A8FD09FFA7514AA076A075A076A075A076A075A05175A0A075512F
+%61373D3761373D3761373D3761373D3761373D375975A1A0A1A0A0A0A1A0
+%A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0
+%A1A0A0A0A1A0A0A0A1A0766EC1C1C1BACAFD0DFFA15175A0514BA7FD06FF
+%A8514B517C757C7576757C7576757C757C514B7C754A52363D3637363736
+%3736373637363736373637363736373051A0A07CA0A0A07CA0A0A07CA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07C
+%A0A0A07CA07C4B98C1BAC2AFFD0EFF4BA076A075517CA8A8CA7D764A7576
+%A075A076A075A076A075A076A0FD0475275A376137613761376137613761
+%3761376137613761376137614BA0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0
+%A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7
+%A0A75199C0C1CAFD0FFF764BA0757C75754A514A755176757C757C757C75
+%7C757C757C757C75514A512E37373D3737363D3737363D3737363D373736
+%3D3737363D3737375275A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A07C4A
+%C1A7FD10FFA74B75A076A075A075A075A076A075A076A075A076A075A076
+%A076754A523661373D3761373D3761373D3761373D3761373D3761373D37
+%61373D2E75A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0
+%A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A075A0FD12FF76
+%4A757C7576757C7576757C7576757C7576757C7576757C75752653373736
+%3736373637363736373637363736373637363736373637363737354AA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07C
+%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA07CFD14FF765175A075A076A075
+%A076A075A076A075A076A075A075754B5A37613761376137613761376137
+%61376137613761376137613761376137613675A0A1A0A7A0A0A0A7A0A0A0
+%A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0
+%A0A0A7FD05A0FD16FF7C4B4A7575A0757C757C757C757C757C75A075764A
+%4B2E37373D3737363D3737363D3737363D3737363D3737363D3737363D37
+%37363D37374AA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07C
+%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CFD18FFA87C4B
+%5175A076A075A076A075A076A075754A523661373D3761373D3761373D37
+%61373D3761373D3761373D3761373D3761373D37613751A0A1A0A0A0A1A0
+%A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0
+%A1A0A0A0A1FD05A0CFFD1BFF7C764A514A754B7551754A754A4B27363737
+%363736373637363736373637363736373637363736373637363736373637
+%3637363727A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A0
+%7CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A076A8FD1FFFA8A17C7C76
+%7C757C7C5A36613761376137613761376137613761376137613761376137
+%61376137613761376137613761375275A7A0A0A0A7A0A0A0A7A0A0A0A7A0
+%A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0
+%CFFD29FFAF61363D3737363D3737363D3737363D3737363D3737363D3737
+%363D3737363D3737363D3737363D2E75FD04A07CA0A0A07CA0A0A07CA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA07CA8FD
+%2BFFAF613761373D3761373D3761373D3761373D3761373D3761373D3761
+%373D3761373D3761373D375375A1A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0
+%A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A07CCFFD2DFFAF
+%611437363736373637363736373637363736373637363736373637363736
+%3736373637363D2E75A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA07CA8FD30FF85373D376137
+%613761376137613761376137613761376137613761376137613761376137
+%5975A7A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0
+%A0A0A7A0A0A0A7FD04A0A1FD33FF853737363D3737363D3737363D373736
+%3D3737363D3737363D3737363D3737363D373D2F75A0A07CA0A0A07CA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A0A1
+%FD35FFAF37373761373D3761373D3761373D3761373D3761373D3761373D
+%3761373D3761375975A7A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1
+%A0A0A0A1A0A0A0A1A0A0A0A1FD04A0A8FD38FF5B37363736373637363736
+%37363736373637363736373637363736373637363D2F75FD04A07CA0A0A0
+%7CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA07BA1A8FD
+%3AFF85613761376137613761376137613761376137613761376137613761
+%3761375A75A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7
+%A0A0A0A7FD05A0A8FD3DFFA9853737363D3737363D3737363D3737363D37
+%37363D3737363D3737363D2F75FD04A07CA0A0A07CA0A0A07CA0A0A07CA0
+%A0A07CA0A0A07CA0A0A07CA0A0A07CFD41FFAF61373761373D3761373D37
+%61373D3761373D3761373D3761373D375A51A0A0A1A0A0A0A1A0A0A0A1A0
+%A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A7A8FD44FF85611437363736
+%373637363736373637363736373637363736372F75A0A07CA0A0A07CA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA07CA8A8FD47FFAF613D3761
+%376137613761376137613761376137613761375A51A0A0A7A0A0A0A7A0A0
+%A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A7FD4CFFA96136373737363D
+%3737363D3737363D3737363D37373651A0A07CA0A0A07CA0A0A07CA0A0A0
+%7CA0A0A07CA0A0A07BA0A0A8A8FD50FF856137373761373D3761373D3761
+%373D376137374BFD04A0A1A0A0A0A1A0A0A0A1A0A0A0A1FD05A0A7A8FD54
+%FFA9AF6161363736373637363736373637363D36517CA0A0A07CA0A0A07C
+%A0A0A07CA0A0A075A07CA7A8FD5CFF8585376137373761373D376137374B
+%FD04A0A7A0A0A0A1FD05A0A1A1CAA8FD62FFA9AF8561366137373637364B
+%75A07CA076A07CA07CA17DA7A7FD6EFFAFAF85AF7DCAA7CAA8CAA8FFA8FD
+%B5FFFF
+%%EndData
+
+endstream endobj 19 0 obj <</Filter[/FlateDecode]/Length 1592>>stream
+Hj^Gxi$hEqllN*WWpTnyG 4ˋ'߱oPR7jiؖߤWS(#Xꖭ9d_](2ʖK =bS(ގ<^d#V0 eD3?6BCNպ=.Ob."kr+6RCrUaL#=%بk(͹+cviZ̺KB7Q0%#IG
+6e $Hӷ1Hu\:KG6zfRM:մzsyaCJJCzK<*y?ljia?w)YCOy‹DVRtK:'s(nOPraL~ŐD26G*.W'P!Sem fs?/+`sFл 创' {R#o3{JZ cz
+AW[Gu韑kgQ+:MyBHjw\]1m/M|ǚ=gAx]y>EkɋNO
+싁ɓZC>9>r./7NjG_í?Zh<RH'iҖإz$4[ڑi5fZp8 Oˡ8X\05l6"V>ٟOk%@a&ԘU"pN7Aus0c5ȯfqAĤ
+%)`ր1ژS_AVI}ʳ & )iH7\7@N+צEjL.8\mIvhhI k~ȹfg̜
+endstream endobj 20 0 obj <</Filter[/FlateDecode]/Length 17764>>stream
+HW]oܸ}7><+DERYqb,ma(֮, 4d_+JCa[[I%y%᳿\^u:e+;>z,r3^{My͉+R|Wۺkۊi<K^x|y[Moۮ]%LdoP!U)ۏv[L?LP7۵뺽g^|4C/#4
+?oaU“T VA:MPiu7.nӮ홗~.[ŗG4'O7ohΣn*L $? ֻYݿX]՟07O߼XK8BoUrm+i1MoMoOWpYH0UƴbbKB1aIolu{յuꇫH}OovM;9[W ZMMI!owns/e2כ}۽2zA`3 !B'A2wִcL%}׷u{&L
+R{&οx1ai‰uqezu"`*tncB/e_ѫ񛸾lvvCw||-0ƯX)7'iU~Ʒ?%im9|ֻ_ct+۵soeSeч׮wU_6#pÓz
+
+p 0E\Ą0`JsTy7
+X,(!N/0r9[%w)A!(bi@.$y93~#?q9j̢5#3(c
+%HE&rQHX -LrX
+2e@3$\E*VJ*JU
+_
+9I*BbYHR9")5#qG!ENTȍB&Ȓ%C
+DgiU)0Fdٖ#Ⱦ>3q)rBnI,![3d
+Wpʼnv%C` j%(G0_-Itod#]3Y",.xqǜ&%8,4EIvyd7n*ljU q&;.W>AxyKPweҬ%ZsGf.+nl7[l4<|L:KN^?}Xj*3YWY)Uό얶N/5mfMb@S̓w=I6u@7q32#mf02;nڙ5獵\(,w/Sm?;3$_2_-xq]H fVG܇;Ix-Bx5=>p SΣ%ٚZ(0g?IjF P2@΁5 Rj4DdBIgBI )NPaZ!)')-R^ )1RfL?
+4qrxK/-s I)Rr$%IL ,YN|9
+'yFS zù!#)7ȑ3%Bx2t
+)Bc("S"Jf)@F\K[B-{G< Ӕ3Á%P02P
+w(EZzQ~ҭ => Ga`$rAmL8qocƶ´c]Vmlž k.lscNJ+6\8pz[3^ la5mk]Sy}5ٸxEe{> ~?4(::!#?>><}G+:$} r1;our.egz`jq8ԋ!5*u^U*XG9q^D_LC{մGc{łyLyLLVP1sAT W*!>lM;
+'.^զ__EuS:=ח?׷v7z~ЎP̳ *q%`3Sn<G֙T)p%`m2D԰|zTEI2I4I.=~!
+4SM+xG$Hqjgpk;th$jVNcMWv⹪WX8 ;ۀ\9P$x2)xhx7H4{?Azۋ(.@
+rȎ !<EAΐaz_p\$KW @YvNyv]y:rt\<7-c[cF>-4/->edx}r:w29?Q@?ytEwѦΜ)Gt^Lƴr<kǺ{tEkl~LDlL4
+1I3`QC*^6rϯ߲|S/Љl۷v. l/WBv|ޮfQE4fնhlɾ"'/6>ne3yj-=zkoj7Zf?b'6XW c?We?G,?M ?Y~c{ӿYfO`15?9&f{z>ngߢ.}<}GSX:_mxY>'Ϸc_>IS̴lx?-PxcbXk>5<
+Ibb q8&D8֞ A[f*LkB;"͍4ail8,M"I$$t-Rًe/U0ىYqb+VV  $b!K%C,&Wc& /^HM'^:̣(%d9uֈ P=ǣģ^h
+<Sх"Ji s>4mpoaFp"U4O`*NP\mzUU;TMN0wo.FgK'ͥ-t&z\_X{\XCkU7:gƓ{
+<7PV }ڸA o@T({ 6+lT4
+ק a{4#wH+D,O`cvp.頎
+YGɁRu
+{iK#s-;%8k|Dj?Yf\>~~}y^~}}k;|ϿLJeҗpÂ9ւ{H꣋誋 i?ޜ9t?ܛ&$,Rԙ936v{[=w,*Y1]&|Y[N||){GT qߗ/_erǞ8=sdaee$.1ja*`٤#$% H_S*/d&iI"3IO )Svuz $* E舞O4E%kg`dXZ:7Kht%>)RdM{CcH_Z0dSƜQwۡЭŌеhT~A )[ΰ^v} P_fHh0cH|eɚ#+y#wќXe
+v
+/ZR`xU \o0唲ɓGg$c+`Ykgj֒FE+ƀ -*F&{u=iIL_-}7B"~08Rr@O.va{haͺN{OK/CL}qv]
+dEAAh* `2##0h@B2du;ID ԐIsfK g@fL#Z
+l$N)Zl;((ָkcxqsӾ7s \8 I`!I#//XE2B(\h9~Yb*Q*J*'?cѥĕPַ/-YkYZUZaH}:&>VU)#VZ<43/G]}i4SoH%
+/K18CUSA Њe }FinjPM;.Rvt>`:xKzFU=Wo |3h*1 nMF/Hwdo o=yGabM.;Qǁlk0e#VH331œaakݣQݬrVVsՊ6{A:0gUZL=wt_tY g!'@O *{N<NJ|:ќbOW)> f7Ч¹B EDfRx1P9pÛφA{:FF_t
+RHqĖ/FH/.r/b/B[;5ؘP ǸAl9C9MWo`s<B1]/ChAr]vQ0bDZ-'4kTƜFrـcy-" NQ,y)sj
+]2$z0 K
+U/E S$%s{=SDӴjI2zIƬu{Sc+iP=Uń]@B^F8A,o@:0\C 0M׍í7_#x(=deEM#Ӗ$HEL}l઱5׿UՔHwsYUUӕ*}PeedCW}YLc2)J#@Qg=9|[fv.>ѨSIg3+hr}vxo18ޘ8
+x?Ҍ;Em8Cc -AB>8ҼYwj:S-JHZ܊lXFSUu ՚rnlO^+U
+ Dz(j萇퓗(*ܨ!jE/LOV~
+bUda.A<@y'Ф$hT'g1N0 x,h^oR߂ۮ[ܭ7_#͘e۶50q[uY'~-۲YyûPI=A@:rPSx'7`2N`ED8f`ԂBѓzy#Wt =}
++:h5C[;d]#/ 9K$r㏃gv:E^VVI]yd*h-@sRp
+NzN@O
+`*ig
+RϩK &FE+<Iy%]ǫHy3o}y
+&pCKZLZ( 38/aihmi)ZimW7{Ьm&FHjsY[v|Yi"3hBO
+
+r1 qK9`6i]=2<L-}Ej/R1OE5cJY$(5<\̀n}o-zNSp 'QQ9fvgnpm? m?l XK[o+4|$8̩G=m)zzLVVXѲ--+/n
+u&2mBnsx>'("Snb^ 傧BLo h| ofM0J^LmҮNډho00/!32ݲt::H6'uӵͮچC(/T+&K]kVI^ige:r]I8q~(YcEywzc1:GU[@F}&ʬs%?ApBr:SiUԺRcodۙnT҂ beաOѝjB'*1E?.7/$a1 bevfF"ۙY*lgf,2k؝h꾸
+p#tEA?2Fޗ㾌Eﳸߤ?0~B2J!A뿎} aƝ5t?m?7܈aW41!6(CхET %(:PT <?*|N
+ph@U"F,
+cɤ4Ą,IjiSҦu,ٜ&߿|Fh|`2/0*dh]MU!
+CQ 7ՂI՟E鉶rf+}ƫk4qtt6Ƌuެf:ٌ I-'uw尸'y~Qk<2>gsA )2`2ǁ73-ŴK,!#'Np([QTjw]z`@l$$<@Du;K
+%<Ks0՗q0-q\nޙR^Rk(ыNU-S9'ES+A 40َ\;yiXd+(r6M`y9QWh؂uA;ֆ_)I͋.1-R14iCۼn>X{}G$]k*Ը9O$F%yh lW1%2հEŢ8YФJ,Zި{V͟U]{Uv/TbZ3힡Fؿz2uŰ5R`JAĀZye5j7"*MA_AL}ux0y+KpfA=x7+NO'j=٨ JFc\d8-;ۏ2X31a4*Nب
+/T?Z,*} D I|_!i&eU2b_X$FF M{I8yᔰ?b/7jaJ,k@KjN͖pT&l5JVLoE"/+&`8tlz$Nw'wۨ_K. bzW[<jZrtO
+=?0p"mT+QJUJ*\ڨ$
+.pj} cQ)2lfS6ʘ%)]P+*]BVaOl%eR&&-qSeHzN11ѿ1,)аU%MP"KJ40Ŗ]14ۇ yiQbBfF֔2:Ť:&
+;stL1Kk8OFUCr.R"'WbP9)z<4k+Y3G#ܮ#Ynio@aO`P| Y”дU)[ADRz~drΉ8C
+5b7s438@tq;1h!d"T
+R) -1GtŁIP&W{0G&>2C&yvjYZWuL[`$fpӲ
+3pcbU X - 0摭t7Ko, t'+ -  {GEBNc6*Ni}+.Fג<.ʯ{m~䪶X?RgPQi~`p{Tk$n-ɇ}΃VF%Wi8JV9W,GW:}h=sk)O<
+nE<ټ )([NauDܬV50wjFkռsθEyբT
+L!:Tg-AKx]^`jqi"V), ;?QE#a~
+Oy@}H<8UlF44  &aeSyC6شgX_ (CO}XSt2yM[SӾd#5Ύ[p8ɊMeDb}]fT<!igmJ ö
+r*i0+杗]^?qG7]đp*QE݅*
+Ş~?)8rl@cvy*oFNtke"#>" {ﴚp]J+6̜U$к5/p]/]UQGY'0f?,VRUj  ̱s Gdd;Bt谌vkzrv#Ya
+Z~fAհR굚3Oǩ2KIz8[.rpSQ"̕[]IBN3|D4,Jj൬Ԟhyoguk^rGaj7 ֲy}#$ZD(h՟6ꐳ4:rGO!<l#Exc)}&-u,iH0D-u̦>c؁J9L
+ ъL`&eCڵd\(B
+4qI=i$ݪN%$[=ZaBlQ6{"F
+
+y26΋Ǜh<wQPBi06.S 9ʃ,+vHBHf<R{*1{?(Bbg'iQl@EIy]E>!]N`vMa3f:ؠ-*eAH`Q+>ҡ nV4O:Zq)8]LNdH(s*1՜]2ϦD`bhehPAJ3" 4 +|GYY&exTߕD
+gEp`Eڡ+04
+fY t7E}g Bjʗt`P_qHc#H?&0V0.bf )JODiߊn62@viIkj"6} -62W9*"Bdɲ-6RzZH7=N\}aF*>׶-7^\>[uuG t\k/EzNЋ0hb_!i9xZ'O2;XHX4Ǒ06Λe+Ow(TYKwMQ- mP@K,kr)J6{0樢3tXw6-c$lZd'L 4 @Y:Zv*[8*7ՒP¶DwXP,<R}(3r Nk(1&Z%* Xf71 zƈm(`$2E\+how5mEuzdC%b $
+ %'*%3 a 1&9WjvA>G\sp)Z}ԑMSk!FZ8bfu{#{>j5=yZxAdT>vs%BJ崱Q /4N m\ǫUU4j`IO F]3ޛ7:Oc}ghÏ2Nэ'iRem<eǍ'ˍgv$f{AdC-,e<ȗ󤝔ß"he4i/i
+endstream endobj 21 0 obj <</Filter[/FlateDecode]/Length 25827>>stream
+H s~N6qCK_388Wt/w%b1^޷G_˿|LOMا;ʓB|[f&6ΦpO)y`+Z2 1k!7hѕF֩cze'vS2O]f]O8ܬ=jT=I_NI%*V C<pXkOg5H|\ V?r/ģml#ԹuiUAƢ{zN:u!sr,Wz`#~${bY"Ash)zS`}G}D6N\SyXlU%s鯀y2?' Bj<~X3so'r,ͥ
+MۥCH3ӂOOhaLdF}|iD[)Cx3nWݓ*U^pR-ѵ.ȄGaHMIΉuq?h!Aʓ=WBxrqB`WmJ,~\#rUTTx+k*hV8>ex-`5GBEp[3s7x$7b xNۦT~;FO zPȄ?̙v OsS G΍ !oN^߶ޯNjwz =)Tt1TtEI{r2DWo#yW };8E@[g3 ?.@;ZZ%F}BF3'О[;] 6#h5u;>X@bGOF D"Loj8dfS9n؃E1 *ޖC[/Ue"nMm%W;l*db\ϧ <x>FD &` g{UdԵ6rFN1CJ\ X( (xAJ֝ Ÿ8f"U )Xr<dLOQzZJP
+ ]RKh(b]$-2WYHK˷y6Lk3E{&27n6~/ۻeu7l=%*^iQZO%d$!ͧI9\ )ސ<uopާ.dn]
+]8<=='$@K nX}jSSՃ:6$r SC K1YlcTJYgOXUR5OPbwoE#$G'IA 8٨a!ہQtbueBs놃nc}Dӽp_a(%A.F{u`~CBEP׈r%br.^H@el#ԭ)&\cj:tcvn-;Z>.Z P] H3Et%z
+feY-N*ZHyZ:s3[ZT.KJ#2Um/ocrQl#"z=+U)GDBJފ(G?
+He˽
+IRg5Ґ
+Gb{kFAe#&l+iK31ސRUkڣ^[U (5΀lab pxO]0rRgT*&g(_P|SS QfJf8/DccKkh), KK)+S_Ίb(%\ZL^ZͻMi!ӂ-{P՝+$btO3ީԉewDSRm
+
+,,m<1vyJ weS'29`+,cw)} ѩYB-La4(Ҥ(gvY![Y̹0KL C7l\oA[oM㮅 Y[?3y3<7[؍SThsk\Wle!S{BΐEWU?*9jẓ,#ڧ*h$Fߩ AKuݵǵj;`(5SA87R1e@h:Β\sOJ>D%
+`2VMŻD9^@2
+d=9a"ZQ `!D2|NI::bI:|KRR4xsC4 &* YÔ+Ϩp!Li<l;G v`AA'EĮd- SZ^9@OA g+]-v#_-7g3'Ƹ^uuF@>&AasIONN40@Q|֒ Ys8j6 3sUUxN鞗<PqI rj&Ca^7|:<yٚ:P=׶16~\6سmYIw
+gB"3A #URQ!+S,s{chPaYWbeƥ6z`B7C'Y)oHDP5a<=NrZ!1;SD( L&_ b\ Q`{ƘR-Yэu3a$MDDUZ*5TD9j(bDKX<GGxQIΘ!4FY:]9Q-0}3DV[?0Us>o*[-<[h)} 2BK.m C @bWI7D u#tqe&^Bp>1 ׁ\8RnP)6Y2cĬ/ V&G\3D 414T7>[ƢMNjf.QR rS(/]`rI Z bMMk m:["Mc׋s BwW6mC4h}As[a Sgj1AdNOCU&N- ;Il%`~7
+nU'Pab L2|k=BeRE~ߚHcyE`L+P_m(DMfv
+ZKo
+giw6s|W(̭^W2#a|ImY*ĐO  ͟²e#ah߇>_!0 *+qAOLB&߶>
+*NښZd ֥"F<46[h}x4P 2 s YWS%/
+KGB3(ax9[Fn- dԝNBWn|DBKˌ4
+N ֍.͏NCq]C<.w0Fap'mlODsC Ԓq3DVi HF&BKsУ%"G.Zф
+ae:oj*C6[;0nimh<u_Bj
+dCIf]dLwHQ:U zXY3vٽxoCcՉ"5tLy~3[DgDI :x(Aʭ8*hw &pIH0wIjN
+ΰIv3˘mT5wѦ϶2VBe~]Χ*˶ndE0ƷlӘ8V3'ʹ#J4 y%iʉZXq20PΓ @Vq w,rA h3sߣIHce2SY`
+˃MBC
+eich
+qY׀giGڼ{˓zo ivk~o8H</rx[?9xǶgn.W ٓ7FP*}.vDT>tk_Lxs}?>xf8կI()zˉp|v{o!<gf<<?^)7ǟ};J%J6WSȏob/vo/o`uv?쓾Aq9h']߁-[FſW؟.NY*_}2DH&Wh\˵E=4M̝xǙ ?Da@
+ ;z E0n
+!Al_@lS=͕env';(Nw~xWG>5m#=}q]w: -N}?Q&_-Wi ߦUs\R+{WiEqR{j>QABY˯RFBe
+Ph M;FCK
+]K5OMUXJlqUS:}
+OrËRd򼕞"ktzǂ %ZnH$P. bNI#="tB[i49cQ
+((*o@c8f
+^?wHoEDcF3:|1Gai}$M< e{(QmvS'P}-(1'^U_?{(f NE_޷ q3-Jc v?P4VkgԗDB1QB& ܦעNL;EmV;]#ud{=K 2pu?{I'EhpG:nLm0y`:u┷5w{HЊiF'%ZM5]pOsOj?wǝ4UU㌣&NJ=ZH߳NGp=O9BiA}4Y|o :A@yeEa<6~
++u(VP(vd3&:T
+PI)waFT x*&#ё1NZdȨH~"w <q*^FtTص4+ܯ
+蘼wݡfXAhpwiʽ[kf62\ Oe0e9ȝSrwMfAH9XS?
+(]%o$ڽ|+ DP#1hTMw2)9 *q;PuW_t1RۻQuVm[^/1Gm._@Ab+Sܼ3"IOe}S'SjfL*s#eTZu3y^.2_8|ﺶ2Œ ~Z:)xa}/H4²8U=w(/IxK,.5 {VXhB9aw\q߅C) w
+ Z (<h0Q:EMciuY+.(}g״DH]H{z<NJ}ٺs 虬Mi9C]?;XAyY{Bj$XH}k Ҧ(skgC0( +xYjnM,4gɊ-߁_LmMeKO5I*x' ^ BS1tHyg/uanDI67êB5RfB-yN_$!XmG=h<@
++U+?
+5T" Q[`I|缍tԻ+*0w\ќ>T= ^[K7iįޥeMj"%wF5@~hF2SaB"K3$mZ>| ZRVѻRvBjg-n
+n85E=!ϱ5d+VZ<W}#Ҁ]ެ\*պS iACG߸$:82\Ib!FHZl'%^-LXz.4 ,v9Q3ɿ+. ǫ_ ڳG~sZ慸5ҙ#|!a>cz.Ev.w5
+˕-`V z(ث5A!A5iBU r2
+N!]iDRnpW/)BZlsSHg:ͱnoGEM}&\lա!$r49Q:=غgh,jlwh.A/1{
+Y<;2a?#jkd(\vY }Dj"-Wf&Gm[I c_~2
+ {I3"(}jst.lEP&^eڰ
+@ʱ= ҽ吽0Ȅ'pb ٮEozʱQ2c#>GnR`ɩ1`3zZ[?L kYգz<Ziə%6P ?8@j#U5h}J;Z4gyb&zy2T^-x*Q헩" 
+Z{׬Jg&.98
+nPQFkW .#8sty
+#Ϣ㢨r@B
+^WFuhnS7!G=xY.xbNcNlkY*ґws\YG
+a3J
+wJ، bkSq<LhP:*jEK
+SGDLVY4vlNS8{*S'~
+LT7HSLaJax6ʖoF~
+
+x"eMLX
+*je~N}娄L06 .ޯh7WX"ӲR${nm'tEو
+71p)34wlLˍjbPJC8GyJt)WGw ( !Ce6g#-\^f\Z:(W 1<@f!`-HoU}." CݗZ9K΋VQXj~w~bȆ\RgTcǹ.p i W,a@k>:9]7 p^BT&6:x(9 #=[x9Rb'@ C]]Cꌇяr HI|"Иǎ[[S@V>eŪ
+GQEơ}K#A]˔*VʯgQ߳@%Kh\+)8'fQY=Iv/t`?j|s*(;WSZ wz0aΧD)i٠h5 +~0KdЊzXەʔ*U
+5hKRRP*Im]qR 4*%=p'mXfYlӋF~Iͺ~2j RE CM6@ -5ԿBSY}x݌ǥQhlX#ОhUchsoh;g@ u
+S'hĘ7G/*! UNYn O79{sm(l
+IqN_ZaI6̢]F` t%`7#K=[[ 2+gT+ .)P-JuW&U] F`WZBߢdPD<sSUf}%JϔZh%u>}h,D"²LfapD.7:v26Oh|.e׍rJZdЊj-}|x\kRg^9e݅Q ΎkXb;ˆFd*al
+C8ƵLs{9zo:ZuZUA,鄵?Q2.qy׹q ˆ{Zxn#QDq$<#,{%|ŁtfL?b[N4^2+2y{neSgtT):H2LE%IdWXQ~Vwe(܀UT]f[CnL*i^dUG&a6I%%X4e|p r<# S~YdDQWU/N*Ԭ yΫWη`VCДf1%̊SϚ#G+e]1nIk#
+2a_]^1*Ҏ`jRZ>zvz cAنs&E1y,o0Z|-?ry*)끄"r,e*H)$1>){f >ڊwQw迎5]=gbjH& WE 0qL&V/;_.|(hvPoD9}3Z7c߷mJC 3߇"]KH6+nx5ߋIjv4J("UWG$y}_N%bZIN@+]1j LvH~Dk-5@ܰL A#, 羝h> \~!,^;%ܸ
+y(B
+
+׀d/2T T Wu:f=eG.L^O%Y:<g4c ^\4 vK>Z@?ib]%R֧,;hZרfU4e(dy8™4oI%9P;OIwR XJ$>ȃܯQʰ*2ַ"d=@qgC ?x0Ac-Dv^CaJ$ig;zafAz3N+D &;Πü7Iy+yǰ tb<!ᇑd( Bt#T 1|JR㶽^ɠ%矋ΈE夺OLZ2)Ɏ[}nRpѲs{L]3
+4>%,fƢƢ{))8;QysTwzrMʤO"OXڴn@ZjaGt -ĸLeEFv G%)3⯕K&;{\s9doC
+D.k)IJhfCk.$ _kdRD1~DH0&j"DZBtDڍ?6asLZlhi,UwyrMCJLi!ЌrN.zK}Yp_w  ^g ``CNNk ݟh~kouTE7qj-)I 0m4ֹ"}VԮ-yӷ+l6:.g[Þ?
+}6Bw׋1fF Z k{:}3*eʄk6В(P)Uuh;_[au:VJ > /6?엥XߪE$LD]ât^
+,[ <;:Q=iIxH1_[hh vVȺ)ڏǪT?VtMS
+u3yMڅʦ{Ӝ,|]9 qѥ⯴S>9ww*Sy+i%Vhi
+RT~i:%$69E\/vR<3J>\:v=$Ǯ㈢[XR=+j`p` w{nd_
+(>I!R^9hT@Cvڻ۟
+X3zlsJH//z:Pv9vz %a㏼JG>P.-J-;g
+P"qTzR75Ät X=m<B3iQG)X'ʋ} RH'0Շӟ(dkKT`ubr-n;J {UeTN՝Ů{_)OڷXl+F]DU٣P ;>`DkGԽQ@Ӛ"G?M3iYߌ4()p< z )-&lbx's-<wʜJk!uh[̊桹@&z+cT0#fR_
+$Id X}h
+uJbAo+Nۃ$PS}QkOcR&K3qk$½5iP+ *H~Wl+dMqH\TI跧k`m<,A_n9 UvKUB8Iϖ-@@)t+v5O=W#έ"-}{ Uo_jKFzh
+BMՅTnOGŮi֪ϤQ9j {\bQ c[{^uCphB
+Z+*$xJ뚄̑KMԣqOA4`? lܠJY0ޝ5J^B\xEpGPgtӄNVޟ @Kh]%Ҁ(Z&X|жL/m4!NWy؊ l%BFm樝Jk P\G|]j@"
+T>u7ZLSQk[C jo4[~mZ/Gj\4:6@$Ѫe4~@38ǃ0?K; GeZ~iؚC2iûj^c{</my^nFr{EJ_"F]b#Y5ޡ9rp(JSR*PtL*}{G{ì2N<W!, %%aͅt'cz!UcBPf
+! #7 *"oVt*\ʲ[ş9[Lp9XcUW{z|j:ƶN93 _TWN/+\+RiڽH#hMڳݍt ʞ14\cܗ[y&*a%/a?;e-G',x*DZ|%l2tQE,rYG}> V=œ)g,k8!I8E38*:6GJ8R:Mt+fKtoTۣ<j ]:%VF)ha
+()h?`_4TY⩙mN"R%j(h*RUG#SBit= -T7ƕ`MW˩&T <UN +Ϫ`W!}m(=UنT̼pbـ8,#ې]4ދ
+E(Khք&JYp*Oq4Μ:
+V&Scuk§):P9RJ, 5[g&r053TT oVڏz[mB}{%KЈ1-Jp(G-z[`  F7:Օ|
+ݐĺުq͖jXiKt]Bb)ά@Ί7B $~s<‚ Nd?p??GӅyILkU2OqO!0?K^,,e!B,!GZ߻z7q1fthpAq2;88i$o 'K21T;k +;g{ƴQN9&nSd2hA(q!RȑvUAU{ƳZtR鵱<*Òq|(haYc~p
+EwYH |ΝZtPXe0JR ,bRM"A3͋T/X;`N&S*w2g@^=T~XqX9515BơYˆ IETcc /w
+:aa15^<{zY[LL<$JrL&]9sOKJ,}B鮌Uf~|dP"hnv^IJ(7բ^
+ơ]0nw^^şۻO>7~?=yO_/}ݳ?<'}}Z*!h{R9ũ%0EjOoY>e~o .%) 4FxÍ6ke3ā
+ơLF
+<k.UVQkFE׭Ly;) W}.:Rqn%eMr#~⣤I"yc
+1K]P`v!;'ڨm
+}bׄ!/.TrN1#o@<D+iv{)yC
+Ilļփx^Vy+ñHPDHnKyl;=zTbѳDÔ˹ RU|㏝\z6ivI4\.*1čDlm:Č$T5B|OYV $K؜АCC)k*dXھ~l7hI$lU42zD+D4OT'̰R D-iIV7#c`
+[۳ԝr ?(lQn@\9 KR)F'HK YJX)6&}U} 5ڲx>OReUv!h\Qh57W!Gimgs/k
+LdKu#$K:+bCb]BцYuSQ}"}$Uz?k^*
+endstream endobj 22 0 obj <</Filter[/FlateDecode]/Length 22972>>stream
+HTW;6 ];LK$bdr@z6-A$ϿdzG[,cџȶ?[ָ֟Y<|>-SY3x~Ewqˎ',[Z{γ I b暵-NO!}f+ pOg⺳= [?zjOzӵ¡{Ccԉ=p:pJxiaB
+:"-ĩ !LK{zQ ̏`. 45 ||}\%Ԁ aSg,z`UoN`SO_A05܃i'>xϴ8!QŘo,3rC˙,@@ DOk>ܘ!GM8h*ӸމdOU<G QQl4X?~q:oY>@q@o9_^7v`.4&&28Q <_qՑ[pT#ЈOf8Ji?"7߁~
+Mf}uM'J\6@Ggg蓀f,QZ9 LC0q?-\5hOkVXRY. -2Ņ^< !ŗPNB"&o-Ɣ R]>bD6蚆$Em%/!D$UN!%bYY} j\s%@h+Jc
+Mh_aWէ[)̛J6rxeD(*7CZz)yE"jiSX)~{ ޒyDjoD6󝺟4<HddE
+'@1B} 6ҏb6:. "xY+Ke$АlY{K
+$CHl-0JP;ϟ]hu$긓Uzq\
+9v>"fsϹPF=ۛ*_ ؈SY bC v0F_Zz\wAc'
+E[mlj?3E)Wёj\!}>\?\VoGT^!7b*e-z
+Z6#o Bsd̤|aGVn@AV_4 ȸkN[fi#0YKTSQgfgs:n5xp+S
+(ās11
+ l9#QUF-.;qv/^LuD^>׷CǕDtA-5?DKNx]F0}Coy7g:$ ;- NQm۱C)_Q Wn¾ya?m*6Hz.yxp
+ƈ3ů4r bӼډL WFI6ݾDA4o~`z[(VUN~PT)<LEɋb\()C5sV95y0sm\VqzRvgtˡ8A|K ?5*}g*#M۶ɗ$
+J38$`sT,|d3ap!4S#)g!g]-+}Ze,g>sDA8!|Z>ݡL6h'V(aT*kWF*ĎXkELz}r宙c`g
+13_⠡Gf5[eC*lPuK)$R0էQOuS}M7u)`E ; U ܲR;z {2y-Ȣ$}< Q:^!^˨xUGh+JvQv+FkIV5O
+#piFn~$+OU=ZeSz*'S
+
+NUvɞDM=zR^QvIvl%s򤺑Ea*mB!^ {G!?o|?~_O_|;wMo?_~w?߿~boe?+^Z*>r>Y{>NO+ dW(q v;-ANFF
+˧RY`D^H,^:A`k·ą^ 9Fl㶺dPSfUե/,5Fq4dI=[;g=l7(wӈioPjWm阙ݟ+P&{p7^ Dƅ8yR w9VN5yTZ.dy`%½$b*NVDFt$'sPeL0F*b>.3O.iKKA;/kT,VubIwūq>nI%&3+پaw@W-\zq^SWS"mo&Xa)σ
+^p̸ՈXHN0ʥ/+Ns
+ .iIqNJ-v>pg3Q?{JŽ=x
+'qr}H5
+%Z(؊ܩi6z{S+k`%ۥȑe/DV(qtP3/ \{'}}u
+6Ie&>ԇxg)#r۹yIlP})`1\}Bbҿn5
+~
+NsDn^=hBB9 jKUjoh圧(~{Պ[,$KVy8>t)I\.U* X{y1kpw=
+w!FZ
+c7oȸO~G/\ӌ"h+H83uTa).]X'5}CGOj%'8vKirDNM~2N9<](i$
+_NnfyEj ; _srdK;'D;"-(zamިaKu,IK{hrTQUji4 B^ !$wn$K2 =;72̰3Ș=Qs;uH!6L.y#QSi7"cYUuvApDՙ:s'|o1EvLY#0:<SEs vH6`5{e+*ƫ`n=2?,vSL՜9^%o_8ׂBx@>BwG
+E/g̽We츎P !D%f
+  WϢ3Y6٫W/D5<4Y.c4 6ojWiz% `)>>EHlZ{Ч r-$H$qnt)<\3әk*o!lh2Ot|3X ar̆ %x9UDܹ<Buqݏg ?=URE&^< ֯wƒ̄TTF .@FρZbUwřگp#
+֨قRw/{nw;?g' PGX&u*= h,e~sM%
+ftͤ\)Z<n*Č?sPA'I_5h!^TWQdMo9W ܍'eRNR{)wMu-)l .iGכr.3A|UE9QC]b5Lޕįԃ8 1q0νgL
+ln<A THA W)fQmsQzL8j9(]U?SɌy!V* bXD
+^)YJ1Uo5r8 lqBe)JS)q{`P1j:8)5tzհiuy;R#i sB_]@(똅JA<r3 3rG l3Ar< 2pqCB%=MSΙ d[e,Rޮ6rXb/y,c"v;먲{#nM{lvA#8A#J
+dOFJbnD"tz"$d~p0*0}!GN1g*ݾ]3u7VlѺj%c<'?q'8֐C|L"HO0OQMNt}_
+
+
+w1#9ߪkBMWN3_'S0 jm;.+e_'(---Q8ţ4F+Ȟe$%*O|SZxؔ>}WkFGU ?'U T8Dr7SĎƶºR;qu>FܻGp
+iqOE 0|t<Q놲%3HsyZVY ѫuH5vs/ :Ϟ124"AL"4=E7˴AM&`@u}Q^f?cV"JF@)yZy(?h yM˦tiXC?:S@Ĺn2f9oɲpeex|Lq T{Wr+y?g01"w[Y|}Fr"0?
+osktI^4Ժ~GhڙO'%paV(? w.+2CPw\4ķr]dubI !s=J\Q$z;XR/gJL{}Z{넮i' 0 ΋ǺY\kLQܩn IIu؟TmU `Ji1(Ido"Ժ
+5֍Z6pOئ@8_;:
+`q;Tôs
+͡/SU=mXJ{N167mbCxϴ9Bj
+ff#1WGT7gE"!T}2W(*Wh~Y`J~r(mUS",-bC_L/';511yQ}?VC dqJզIp@߽E}Uۊ/l1'#J6 o]&,3?eGR kL.|4AU[Pۆ͛= <JeN_65(",UY *q:4ʅZXF4\g1gK{|x48J}nLiʒ{ \D.]O@OYS>o׿~_)1U+5h# pcd3ŵ(AxRǦj궂ڵl.Lej
+X(X-nIf,B(a$ʝԯPYX4s?>Iˉ0isXx2
+>ei0+@N=>JYxjQY0ބ@RsMPM'HeuΗv=Ab12]o(wiP!9jdf~^Rb ]Xj A3^:
+<o"3 7 >AߠC UCNas rnΰ9#JQfRdx/ <C[j*L.͊+J-!^A,Ez od޿Bj2oN
+ZOB
+P󤺹9՞ul8nd  )\Rqiz7#vf(@FFSûD3U2(Q nT9vS<fPm6?̡Ǜ԰~W76h "] >J27z n(YW:bQ[5TM`bl6r6uLA
+VqyG7xY#=܏*X>m*;P@FkGZ}
+.0J 0alt dNwY;zÜ2
+Lҩ~e>7r&3mf:4%>GܢDZ9kr/@s尮N$rѩ0E
+O'f).׍.Ioì #;H&w@q\ 
+i:=Mwq(MK'ˆ"fhV>>BWkvZ8/j𸦖oXT
+@(
+7P'"/{8O(IpyU'PqXM+jR~ų4꿟Ĩv *<1N+^!xeE?9kgQWz-5m1W!jG
+䤓1DZdU?Q'E,뽍ܐay¿ &To P4BF8X19혰xXIQަJ:@CΞ>:fXH5]!BC>SkKSOo*8EBMVFꝝ})qf*Hd+[4w^PU=O%R.܌Rmr|Շ Jv0x tsDOBYd>QBexf,Z07yIDzLp~Y7.9$-ڑU}{~d&wJ
+yL-$af`
+!cp`reG
+¯ˁK0,@@k4/Nf2+9qfR0z$rm;\|"7zybKDzcydY鉺˔(8+\%a>R(px0z9YiU۳0]LRş!WSgkndMݖ6ǫfRos\I~6R.߯څ[ޙw-Ү)GbeL@H-(u`&U.ER|A5(~/ƍǕ1$i[4stZ F7mz.`{J|F=ٚ#\3\B}E :M@TMYbz ;%dq6TCRJRqv\I:ՇO-kIH)XuZmeȀkp:?c !'+kzbgbu
+q%Yeb ϷΚ05f!$WNr
+U!N,2f I6o&ĥ}BJ,+BL% ̚C[pzSu;^"nH\ϥpB+}:Ͼ[?^;@ʳ[D \@̻pbh&?I{?"ȝ8oYETx<ⵧ-B[tĈsUKT[J
+kK6ZװaH@kk
+/
+jd4dm MeN#!K*P(gf޴|a
+OiX;s6q{. ;֖$Զj>yK^iF
+I3ED{b nY'ovȲTPIJ
+5 ~iyưI
+81vk
+{j.fYnR̓ E)5Wwrᄶa,v38cHrO;
+IWA;Յ!#BtPb[9 "jU_ tL@rRB 1Vk%zGasv%|c&`7a 2h)~Rr%/d>ΐ [5-Gm{Eh3bġyȘض'd*h9iG^'AsӐebgλ^GDt)8YIl! AHVm恳8JÐh)e7Z/ fGCN͡`ҩc'BG %
+sjѧi;653hXɚm;P(YA $$qnc25|Z4!Hс/ftˌڳ맧wt[JTE7U?˕
+FJ'-ωz1T@+ VlZic\0>fuyOD¶ϙ/6ךm&R'l2784vQ)`1 2I\yV4=eO3 I4w*B"(fr d/W%fpi gsWyÄ)mdY&_hkϞL\fG=zhhK `˺H 4J: #!ޝ@J@bf\m\@+ Vl?/tʿ1Ҙ\\
+?gs1
+?F~u\
+5 b qXLkPoధVƇddvKK-@-h!pqK E+ j@ =6jPO=#0=HV@MÞJro|؎*vvR>qR&5NӻYO*gzLh8>| Z Xh%фQih-L]
+5V"M8 ( Z+󄈐B\|
+
+MEDq5D@}g\.8BvsЊηN7w?>x{{uէ/{?zuu?Oxg:,g=O/+a^Nޛ~q)64g~_mٳZ3VK-eYk3 #4)aI+t㰘nPIX
+)= /Z6]0b$펡7fFZEBX_ɛ]Au-.*sø
+f7UʡtZ'Ք
+.>-8&[mRG0#H CPwZ,]#W/H]ͭꦰN
+`kEvg}hcVPZUiB+&-q [(EB{-T5iB+&&#W.
+@c@+7
+H+ 8Zl4+!vS:'Ak4}Bf%-ӤP`a;P@vABPDhs9A VP+So
+)q0G; 좆~Q-*4m~0[Xη"P]p*Ɓbo'Ӈgӛ|Wӗ?^_]NL'5ng&A? zJ䦗ӻfN)D~2nBiSG_³:_95-H ω>~l}YJT1gX4lXbN7zqu[67AWepp\?.`X(I{cn_LЫ/t+FsT˫@@Hig~ ֡Z7/u)U\!Tߍ'|u:ZT0/wK_c%Mx'p'WLdvChFc۵R
+E}&cgf_۩bROQm [AnjO;A}q]SNk-hS(B$C;%@ ̾xF`.6ŹzD`,iMnzP(R VjV<,m׍q5i1+rB!.փWފR-.B#έ5 u0SVr}m+pކ0=BaL)IuǍ Z ٖ`H$Qk5=޾J(S;ElCG.ntcV13b\Kia"vl|[Ey0
+%
+ɒRc=:rˆZK+#lp~Kx+Wvð_:ŎDRz[י:@]_OJü<E)pZ|3%$k-/`I_OM
+MV.kimdxfFXilű_@bǐ
+sʨCc䉏 (bk,sƣ$=C$S[*j$G mZ̒O#5moCR9
+^֟C~7+YBMD9wÎ(T=Gz`Y )Pu28Zt1 x
+JdRQ1 >{Tط6;(9k}͜0 no'q: go`K;`LN;.2XiTsΗYy`L_ミ+lǠ:7
+-r91:u ~O3{?a0<!_?h:L8#P b!YX_\G y:`+oqj
+yIJgiV |.jgR+P#R
+veË㬅JgY#8edubd(y Zarbn GBb-hs~@&뀸MK=gTz;I\q7DȽlaAZL,N- :WOʍ-q9I5umӒZ*> @4PLgǍm%xt6L\v^n *3t|o7;VXh"UA,B ۼćZFzfޜQ^uq>g`>PJ>ƫ)4"5m*[3<FˑO#i I|F#CE`G Kts[Akn|$\I Oھ%5#wYK`x[E[HDNR7C$igk\'K^jbͱ[!S U <aJTfKcEJ൰{;jUӳjuiTF9znר*InrnDhM
+Xh*f[צ,ݖxYaih2@<&\.מ~c[Mh!Q|EPcz:UסZ*9C66X(X
+"CYN84F 9AuvS~Opas8 Ps-08$}{lñsJP|p'/2I*!ӡt(Z-!-W&AW!._udnhHPY"?86dc&ɱ "-'Hi=7pEشfOE]H'݃ij9?|N)OgcV&=^〔丞=Ν"]wt NiN'9xR-Xr7-:p-6ރ7&cG@tw5鶁cw;hijaY'ȍZ_*l`MW
+W +ߏYRrAVg| nzn9U<P ҕJtc!O(!
+$$
+6B@|Wch{g͋ ϟΕ: XYsd^:Ͱ҅z ,egFxRD^sp8'X20ƁR@ZqF0C )@A`]
+endstream endobj 23 0 obj <</Filter[/FlateDecode]/Length 9026>>stream
+HlW;%7 s?GRwpŢzw j)~5af_?/>=x7qa7uħ~mp~h~@A%a!<SM\mѾzddiE]8idx|5q06>_Mҍ53pK &4tk"j.3à0;OE
+3ƹ7DΖ>NFNE&Er3ּkv'SJ#י;5llk8L㥋'?e\KZv?9 `G廚ܯ E/.XI 5:=,IN*i `l9G~-؀֥Vq4
+@Jg{m{%hkڠ9?XL'8@)Ϋ[7cunm^kH<բܕ7eCC4=\b~5Ō 6˃e|<J9۽,_Xj@[\/nvsct R18͡i
+c 6' FgAm!z*vMwn$6}`v" .jK}\rG7 pL^oIV|dn/jiY`ͬumv nYf`嗁hc2cCWK`E;@H`Y
+6Wsaˀ)8OaZxղSF{;j?Rr3Cǝji7ze】,T睟 g Ib+ƈ0+k t26=8#TbF_ ,_ĮLEy#oz: ɠyIi){\ rg \^m,vf^Vug#<dWۑE9
+Ke"貍Coݿ[*. Çk%Հj$3oUy{"Iy`N('` uCw+³x-0|p .x#+0 s]9PE |"ֆM f?Q%v_24 edz]韁g->~ܰl^P}
+Td23 -*o.-i2I:ě<hR[}~#(g}2BI}
+JP7ôZr8p*3'=,umRu(7v9P*zw2&zks؄j1;.f\H}F4l[<וYR]sF(88x?OtP'@gw ] :ѵ1"rV*;di<#vrhyRkykt:Sw-H_G<oɰۨ/#g||RRH萊|GXi8>:.gk%R&Ĕk0[VEn>Vëk9<]:=\:prd$DtM"CQ7ptּ]+
+jcg_:mY c76aSVƒm]E⮹ӗF+4nxu$~h:Hҍ?3uɣrlpX:a6p^[YX 9B{ ytp.)k5΢cA@&.#?R(w%+).25@vCqp~y뫂4bۄʣQA;Ť[c˝PA:yjl?l%{LI`gd
+38?krv
+OUr
+ڛ7{jCrhnbT)ImŅsxxx$MBuV>&bȓp ﶇ,|xL脟qWVLICJM9+,(nsX
+;z.R2<,Dz[r{YyaD_;[aJsGgpQ@g̡ۡ4`ߜ-Alkl3^2yͲe^l#@
+\Y7H4li:qy7LxIWO(gLLN/?Y 0NOA7{]YyR/x Ҳ:o1~r
+Mˀ6O{݆&#sB$;)бx`xE_mm#GUNb`0v$V\/U[T9l?ɏ&H[[fLӡAb⍅50!ŝ 5&kIMr5, c:6}r
+5GlFI 6F/266$r "11o XSxF]VʔYmbLy\ʕPI
+7\1FfKLe#a0+|O`$%t R̸zbz/Zvj$8!1*{/ y @GP6GnT.ݤƈ0ƝEzXt(1\;,Ȏ3[(^('fr.}%7X6 h4{;5Y*_j| m԰5ھ!1
+PI8Ļݖ"j#(Ýѳt@~uɤVa1:l> j }5>UӪ?fpA__~yZ.ꊘ]nI8#@i P9s `c(^r@:3Mh4A>Ƿ[
+M 6o 8(QCKkN"F{rYF(.aѷ2Z'mlCEjhmAMvj[‡a^Cj1n^Y#cF(B~#l;ob#ms(#lj 3401M(sWi:A2O`j*(HTS>\ݸ4F=4= gd;Dq Q'+e8eԜhoDck&m
+ǟ&y.ҀXvSwًx + '픣#CÎ1qJw~} V?QĈ=i~­q6&iu+ :ٙPD
+S̻}nqiQ#Xhۚ8vRͅʪ6]ٍ[q\!Vrnc+5x3n{d ʛXhY\2eE3zҤkݥt\ i`n!O9Mm>q[d36m"צ-e-ÚLj`׾d_C\Fy Y|ݢ
+FbmL[=S($ʡDuJ r<eJ%OcHGAd v¬,3"cp4nn^ S 1ZL)XU02АS$;onc7ɰIl8~ Bg%o #m=@J_V8a'OM~ON_G/YլI]PV&o}uVܜɊ/]|O8UCǏۿ'?f\y6H=?4yz g񴪒myJʃL.Gn%ԏO}=y6yK>ͦ$os*{,7?O٢Nݱ<y2OkśSYť ;[>i('#޹?ݑ@utkؗuu8D~3_ WyS9ĺ{-nV6\4q'O
+,w͞Zg5+ao|O^z 냩B\/J#vV633aYcr%.ݗCĬl8Wi҃If'<>|G(rW.6opבCU @{ Ghsn Cԣz<:]:?0γ}2ZK]T*QLvrh#^,o0QyǬzH_5H$k>🟋OX_/^Oo|{\ĩnSS}}u͸C볲)YyS1kw iJK $[<|p=t/;;
+@{j y"Mu䢘`{^=jx{6YGуv V3ȫd-^U <x~l(E9zg
+vகYQ7>
+lKgX7y݃W}SrURQbV5 kV6\\T*=7x(rrz
+JE?e,<JGN+)UZ卻
+&hz4FB$YAIF$:_J8Ѕ2;RH};?/IE(&kÄflU]dј]|hbخ^еy980J$lb
+绔N.4]9@<w.%%‽*5EgZ?Zp8mܗuh]+L<(xN2$a/Jg'gئBO0Q
+1o{%/-|_tuDě&<ԐPwi4a(>F4Q'וD
+i)[ZqM LO|>:=sn-<NӔ%(] $ep6|fo"f6wW
+endstream endobj 24 0 obj <</Filter[/FlateDecode]/Length 3723>>stream
+HWQo~/KJ'˪'+r(mn[.e~[Ǻ$pHLY3~|ILVB*BQ**:kԋuU.z=W?OoG;iїtP._K DkmyJ;/>s xxR>G-M(c‡~ ޢ)\2cjfqXBr@f10tע,
+)ϐlf(rU^IbV\nӴ
+3Ck;1'\.{-‚l𸶷q '1U!wQ/*;YoMǔB|LvwV;Րp"3S[̗2&xŖUiIvJV
+㧃r2 zvdVUl :L"#X ȓ5x}Uvo{AbIhC< exlp.hfb76N1fƹ+ckD# O
+VM^~o747uF #!QK - IQD<sH%Lo[8le/Tc<vjF`%|iYAWM Z'x^e@qOV<
+LnӴ
+L`%X}V B"xI4֥ťI*]4h<0eV*Be8D:|¨Ѳ BS'</\# 744.Öՠ4)[دë@ u/6x`~;ai`'aAprDrj˅oSk2TY$eF?AReQHNJ R\~nvrgZ͞K!nӴ
+L`%X}V B"xkQzJYiP,'S g3aBO/yt R9ϊ ȓ5x}UvQhPwWRL؍MԱixąTKPEkn!31i"1(:TóppF!8.R[cpDL$ɶn|XJORu"lqH$#ԽY(".氠,3pzA/g{߈ИG<ijnqBˌ2wh
+L`%XxY\5:WmBԖRѤ73BK_Br j‚/Xϣ)\(VݖZ69X |mk+ 6t؀_l~-[D/`]9u@`"G<;X6ÏGmZl 3.xD9Qͅn#p28%L>x|kj)lB~O F*<EC]wc¥fb76NQfMc> O?5">8N%~kn!31i"1(:TX97) fT(J%߳1gH'J! DK BS'epADN:T@l6Ӹ{x EwN^l*ꄥ.氠,3p.` zѠ7y`񬛛2iaa%XI=fW]U5T49LicPRB"ڦKhG
+ע,
+)c% 2M.XZQ"W=n@)sb|Yl!د%Q4g~ FgOҦ~I$lfqwAڠdQI{صc!3+R)좹:TjٶT4:5&QOCq\fZ.~<$NvCF%5)OdAĻ:SThД6ج߰z$#ԽyWㄥ٠]#ݼF GJ04
+B22V^nǖ!ig)yhQ|P"PPxj)lMf[! SH/uj|TҏarS{k/L>Auc~
+4^:/jKei>-7`lȦ,ZV\>cwwM-df7T
+/h.Tjf5jmK97]F)`WD*~})? uo58ݙY~DYk%\@M|ZKr&5| xR*ZOF DHoOx/|qWhД62C#񑜲#x EA .xp3XP83MIAkpɃ|}b ax]}ly l#cӿp^ytҦ*F-)F:_,T^)U³T+aK<BK-Ka[jDv<\s _cl{gq7$ospC!|[تK\LlY0y&aQB6x[g?R|L)j8]֩]Tgb;QϘZ6 .
+%x1K5cZBuu"MzN(O&to[be|{f=kNHbճRH~t"J{[GI ksmUN;HЖF0Cs[QĥЃ$Ÿ&XnJvZD%#xPf3]pcb"34sJa+
+endstream endobj 25 0 obj <</Filter[/FlateDecode]/Length 12564>>stream
+HW[o۸~/
+]Ŀ漜 )R[tMMǹp&\ Sr>;r6X'ޣihGha6-O<'Ўcl' m&d1 ^q<ߍI(d48rfIF~{%1Y~
+@yiͥmA3rZn-o͏ߘ/I|O;18Jcs*Y*
+42CXogL>IFQ
+Nߝ%3jb2'vr/#,ݥ۰=Dq [)c,tٷpxM]AstBb7^ ceCX
+M٘B+El]aPwvtl^LbǻU?CwѾӊv賢т(g-MK۔G$z.ڇȌ|MiCIV6U%ќv퐼
+aCޡi 6Zݻ|F>E<Z4K{~B;Gό5Ƈ}x;<낾 ܓ&qEIFQ(zn3_ڤe0'HSDid;Z64ReD7uˀ[G-&-r[wNQip$#!ypvjj/w81,]0򯞿Q+L]AafLC#;.??)Cw5[PWWt؆˿?GU=j{uߢ[}oQ-oQnު5.M HI@PG ;5/iJ#z$ߝ#=~2@A0{:x)~M$ٿ%fa Fnh1ƪz
+z!+O]\GB:#P'xEpQ>9,L(c`)\Rhg75їlTnLU:fN 0f ݔ5,n@ HWb1HG!,6xcfEYN<=Lb,e 12,,T(eRN[v2d2+Flo]TyU=fťN%:t31*,]Ҡ0&-F+w'I֪`R1,Y樝LT- wtC!SnaY]52"aKLN~hlJ
+RH,L{t.&2[!۔XSRtiUq8G,>Շ#<.ޅh8ip%6%fypBSkFŊc:
+$JBgȂT:Q9VO'[՛1fz3f9PJC'DOmuCg@VMT#:˨6eI0!F NObqgDRBYAflGj*CU|zB ᕒJI8RWW Y+NQHdsb|Y o216 8"#vK n1)pcef2;\/~بK]0Q Q-:9"gPp/y+PF]$@1hA|xA[R IM YeYRYFWbdpD{S7Edu]Z0Ŵ̷̛1E-hePxˍtlR>ĐdؗH @H= (1H+EI4(T:{A8)eN5^Ġ]]XԴ,d Yy
+$Z/+'<UT^Vm5N89ċB;^$,~M n_I=S"t4</v8ƾ琱c^x{/dy>P: 7[$MN Gȯ'g'>ϣ8)HJ{xre0lA@P,܍IHcp!'ݤcdTr6~wX{D{?F)V߲,MB`#UzE*̾醊̾iʼntA!>QϦN
+XٔR+[)-\leqΪ+[pS\h"ĦUJYw8+=9ϕ_@]<xzy ֛w\8:иO.mO|ͺ>-Ah'5DziBBM|ɋ~=M"Ҥf8꼢D6Yh;C7YK:шwY-=EUUZY)-
+]!-x[<gE&|ͽ*\Rു@D>GqHE#7*4
+ ޤ׽JmV'-]Φ/U_Wm^lT[K.pqCi㳨~/7S/(rN0uVô'̸~kN+M5\Tqhk&Vmz0:hBԸ!ءUIz8m^EdRXV 1WvX=S&9BvVM(ZNYNƑ% ,%sK*vn\X~,\&ZPC`b; lkX0uݟp1>I8ѽ;@~˘޴1
+Gyв[r>wh!`"'K$*/>o;څAyLlH zlojڒT&W;eVWw6;:e94NʳKz?AK Lx]-&Y.^߾^YۼZ(DJiZpR~iv$ B|r!uo@@a )Ү)-12*A(bKiSkl[ 򐠕Ϙ6SBmDt.AـT q$1BOzζ$s_=aU@ fF6xj,;0-. 
+@MB+F5=KCPJK[΅`
+WF٭a$_ZJ%y~
+$B'4n
+AHA~NBV vgx|$xad|*/n{\\ Bi h
+OY 聵t}}H)
+} ޼>]vţw.ώ޺t.(Go*=ʆVg/^Mf~\H 91":dDk_V_)m8-\쭷iJ%-lGG^T3s"PG\tPȔ5
+R.V֟"W֟"X֟ YvѲ~T3 ׏\[
+`{s%y6qq f՛.|}_\^,5NtW(dT0:|qV{_2!2p&GK lلc[JTRzdWpodpUA[
+QL
+kIm H 6H*%\vP).gF؋Q'"GꝈCN$މU6`ȔXGp=Ї`MmG9c(BL
+391n^&]A$DXږkbqV%y%V`K<¸K:BRVPh@u ;Ȗ>^n
+8zղ\y3*y z!#a]piD^v] 9FÐ|p[
+1dY
+VpNQo$}R 8
+B"
+g
+Œ%$"n,,й'h!aAzn?js}$:,t]a]ϦuW?ލ/g<~Wyooߧbt>ޠwv(K'Uj9~?i=}?rU* Ғh?kD9qd?*=?'/ٰwv_|/zǎP!҇;^k&fw_'ZP6t61<Z7iϭzP+$tzbwny09B&J5~ud}e{*ը+un/,ۉd湜KmS
+B0A'SX7rVUy䗠vE g1zm~:3%b|9XWAG>uo4:1qe7k]]aש*qՔu !e-4qJH&2@v[-O} w 7 =&Yc 5\ʖGNt^dYN>R˼pϜ\'I%)M=%A
+] T :#Ӻt_M8*Wk&|i<}PY-N@,
+Zh /'x'YꌢN2A:˼q%٫T5LDs\P}ֺ{kԶ2 SE=)UӲ0bUYqSIJ`(([GUX[%fwT5.핉Πa@WAH\wb39"e8@,ثT5LDxR1œ9rg]=5jUE7kWRrĪ}~XmC m?޺DXjk κj/o^wBPfC l?8غmgr0d )dN,  (:1cZ
+0ϜE92FX<q.j1T9 !n !ɮ
+
+7[8âv)TH!"r|"2@z3`g-~ET&tX,&s4hx&{]N[>{?j5]ˇӖc>F":߭[{]u,Oڌ\޵/dc08vy 74O.n.3+A{=C:qN=O^ =ם<o#9Mt>jDk% >īT4cm ՃA~/}%$ =En6Mo
+tJLm޿gR@ؠkhô 96N؅ŷbD:K8Ђ% }Ki7AuoAK@h϶ uOYSfl8޵~P OMY4-J3cNa\V've6y;S9M+Jys1^W%׫tBRN`9ej9˽}mHZbX̂/Y~:ij_o˕07imYK,+*$z&j(N
+s ByfvZmє>K񤩨 HͲ&Y97KT5|&P@r\GًC'h,Mfk)
+щ<>qdUj
+Z8YSMBשn(]/տȯ9n#zЗÎdr7`R ~+c?d7g:Zh]bU꽨;e/p|8(_6,Rn~</.4SYeٮ|i!qrs.6Ů0
+ (Wg, <0} 3㦑Y8}D% ZBvp7|g+UPRaNU@Qux{|=?^\_\ov'^nٮ(
+at)| *)6iZH{ˎ\ L`3nae(Y1h蓝iA}G q(g!Z HVdn:1J-3NV%h>NЃo*g_#?158b.DXT$ce5,T e dJń*kTZv'/
+9CCtKŶ0C޺X=
+W@͠n[f& ̫
+5u:yUR@]plQ@4$@/}y(f;3>fc+OsOkҼW<B=Һ^R3[9V)zڤsH=.7%A}6wBn#A:@ 0=*tI#'5 cWb PbR @D*
+j fB,i 4ȚG! M8$@{eneQS,D麢! O
+ZV3 ύ]M<rz'J$<17jӈޤL(j0z1U\,j@@Ay;x-F{MaXLD/y]
+csǎGr F.UG#39»ZςJrfђAێ^ 2#P̖, [Mɒu2zp ({#kb7÷
+X֢q G>F-H/ʓq`"%c/NGY"rzDjZ QBEN"Q x%XRH@(l"Ŭ_Eq/U5q4v
+f0ݳ6$8}tf!۬TY̦g^ sƷ_(KHGYV
+bs8bi1eY#|A,7lD(TLtjrTB?ga :/#t!`Ea,lIc$1B󙫛,|=Cr*j2q"n{ #g1ppĶ"b
+z{w;$r #ɇ N+[!!FQE!&U<'gs@j
+;qZ[>ubXA6KkJQ'(o|\^;}zZ7O;Uۓ8_49iKOz|)\b )tjmI_T7[JʉG5R^v;3s6ac&)ڃ2L2l@+J1:sM"#D¿#g29"!B7 \:I]|&,
+綖N=S<Jb(ֲBc<&HQ Sq Z=q7wjaMt}g߸!c}W (|MαӘ:A fELt|Y/k9/]w!3sLŮKz U`-z!5av5mc!EzLa; |XmO )]M{ n=|4k/
+Q7pyoW5VRuU0%ؿiV`5-cmkX[lbHeHXҐUVH)Lu0UZf-'Y9t^hQQ$W
+endstream endobj 26 0 obj <</Filter[/FlateDecode]/Length 16172>>stream
+HWNK}?H4u$$XDDQ.pn%?s~dc`%R(Vjյ_6C`/'QCT{EuQzbdži6tuwlV qv^!Zy +<Fz4Jfʋnh8וm[q/AOQU<
+Ax;4n|K&}>[y0N
+<q}
+ T]r#M㨸Y\s1>KS8<`/zfg܋m2X\]w&r:<S>06IO*Hq=jQ:pl5W0Yo[۰%%F"pFsArn0s0d>Hg]}8ײzȂ":^( ._6
+ ;]2w~},lie:HSɖnt` i#-mFʧ4er, %U\@ j8wG/wOa
+ r#Jb('@pbE %rQ%5iIL˫(FqO+XTƍfE;ϓ'H_:pl1jNU'g:yA W0V
+l)* f"iY7p_LX%1++$1
+o5k)#TjC@7eCs'7nP|
+b)%ɵg}xFE}qp#$<H=m]Lk#M㨸YJ"GliZsylw_Bt[Y7m~ES]0Co$b69C
+ǶYOd'glw驗v%]a| Ъ#&"nBF?!  Wp!B7)! S'^~{3
+.a=M˅t}Yqta^6·H۟`kuhӏQm}NՆȎ$B{vƁ]=۱A\=dQڗ#i]>q'6~Ii"[{|_BIA8DH~iq]+(У^~L0(9p88+l_Br.hZKw2_u;GŸ/{4,OSz{ >B?Hp}'# SiܵD*,8%C=~n  M" 4S{:Y#gI}DUuy)QwR(dsTuIϬZejdZn~'^:{ޞ+$-  q)Ŏnށ޻RD*"Z5$nB/^?h#sB=6`ʇ&IRzphYw ?ĕ$vCwkv-ơ
+KP^׃㇂LKGXF$Kc))ugjYВ
+Lxzk7X(J 1 J%a`JD8PAS\!;y~
+b1J_`/iJv3mG`Ch!EO
+Iv,De̅k7aҶo1תbHskLK5@V\U CcU )N^3ƶpBm>fL>oﱍ`pLsa"(P0M=
+^<<&
+6"y:ӫ)5@]8;F}%
+CF1>!IA3c&9ԡ0Ab xx`FBAc.nb"m1l
+
+,h.B{Tµ?HXBpM!<qdpΛo* a
+®U;ft.nߤD&Tscqz{?2gy6*i 秊L#YD,+ 掊S'#RsgRD֪p.Ur6G.WE>l -n}8:z;⚇Ӈ,K?eR-?=؃9P ઻>V3U(4K}sOk9)<>퍱b.T8JGhpʞU.QԞ> 5AVwp>xw^<\MhzFvN}VĐ?g4'E=K0 \_}S<'ټ,W`?7/ ϫ8Keۋ,R[|\')ATy@QQ_UWzKO!p1 (Er<>KZˢy94ˤnr`*V͇jMvtKꋿ g,f$vrҊ~͢ _n,Q;u.'«aAGk?6f=i*:O
+%GxZ|ԓ~\=aO8С:QŠ[N2O[YY~T|E'4[νvZLF- #*ɮƢIVx|L-$}g$`q^j":Q Y'Suae06d-2eyy̳jLb#E(mnͳ
+ft*seY"6 qlU9wi6YYY6.DVbFҡ\Nkl
+?k?fׂ fEA9
+9kYe~VP6Ll%}pgXZѓ&Gez/ TN
+U^97c弉J$l!{W"&wYw:չs
+ T
+ǷTNE[ڭ\e\+(W1C^tY˥r&Yޖ/9KLU^'epךqomMd6LTQ
+
+VÓRaD.Gn:MS׺BlC 3Uw$U"{r} _M_N,+ vK |s>"ʹ.%Tk怄 8!el5+
+dM k7M("4B+>;QDv e ^TʽM?,kdnI DMw=ש۪ÐY^$H'U1;L3,CH͍O>858=xeijƳoŲ}z{(F ck&&@
+MNVN"[.f|qA)S3_pgxHE.[@H+{.@5qnH/+sR]Ll7=vIRL_.y8 d#
+kX[!xsU RO65=Xz$|ik}'h/`$a R6K1AP͹;*aẞ
+++^.
+ha 7} ]mLC;Nǥ
+ uUK~ `rhQ0V"X-Fr?Ҡ IPOt@m_t4g1@+gYSWĽ9A%Qa^W rC~7Ѩ@c˂lnO3ZWS `KٯHsŔ$ϫ@NI.:0xI#(8AUbE(",bT9 q0rdh:o!fm o;^͸}84\pbsr%?n0zl[8%L.`det㏔r؛ǒC4Ekv*f'x%qA;@y\bE54A܊t5H-8%tqmW
+v&KК}SA_%;{g4޼Lt cZT%
+% M~aaˍ 2Ls҄AG*pi 2NC4WxE@HGV]גn
+?א
+ܖFEqYV/nڳUoNvY5hpϞD߯Ls]hNS~qTV3Ţξ|z!?wyU_pm452ݸۮIO<,I,|bGM`ߟi(cjlrz. (5DiW?mݦNnrld/5x{1b\0+K|i۾8ن h|Q/v( !=9v`lloU}mqu{'=d~LGU5$v]*8JߚH`S-d/|OhU7K&w~*Ps
+Bk[7KISuY(4^"ϳyHƾÏQ7lgfYMǵg:TOyɵfyyv#R9>8Uf~mЩ0.3lkrvS?XV,)V/ΠԞ^f[+(N/y%}F nP =QjvVY_TwgsWN]}+ޠok\-@S?2pHx?]n tڳ֐H)]LR}u2]%l_K)S} ^m^.*5jV
+~e7S..6nZs3;`S՚(چ:m#N5}w*NUKb, FqF5` { Ɯ>PE_M>N=t(] VJW[ XbE Zg4\1%Ornw+iWSF5k"vCI,l f
+'*3*3vMlu]&᧽|K/~./C|o:T\hځD 1:^@O
+*J‘K/RdRo b,E
+Y. iW } mjwPj/$׉>!s Λ+
+te N`vn'JExyqqp$C TokJ!UEs @ bolcu
+ٿ,# maF4o7+xo:n۵l+W2$O`L|fK{ck`k{Kr<&Zkp^2;kQZ\gf"pl -:FM (LSP 35#_8
+1Ut}x]$bYV:e3={~15R
+G[q>KX;MQh9X
+JFտhH2xjFx1>$*H2,Ow۬XX^K-Ǧv ¯f.մoU LR@adh! lm#p個X #ROw5H%~_ s_ ·:Ia3 cuk[O{8{ځL}ܩ]ׅ/dҏ@ZP*H͕^/+FB0l9#-opV駠QB¨ѳ"k<-l<OlomCX^YAHuq
+_}:{.D㻷M=} k naV:9 ⱲQ͖CߡYg{-1VI9-ey4W~"{rm2JGefq%TZ5R
+!4*Uۺg0Y2 3]q4|4(796+L{%;xj̑W+͛|M(z}j>Ŵ5ņ9FkJrӫP{VЫֆ+2K~ 劑ٙJ~][9>|7fi;@k'/f4{HR| x'V xڇV &ta)`)(>)-Z8M*گ3mi0hI~˷4AG~^=fܮp%A|3SԲ~pNԬ}YDz2A/9 WZ~GA!,`VGy N9&j*V^2Ar2|M>$]7MC'˯}ݎngƠK`/i 0Y
+,`7qIA<5T͸7-Y0sVO.`3l>gvSw\ +l bBjfzG&^ٮֻ3|VL\IZEͮZd?r2`ɧj?m9ƥX40Ht
+*䚶|P)؍\^Z#darw1.JUFއε
+\w=BϝLabN=ܮDg4䂤5h]
+Рnv!!99
+3tR
+q;Z)G.m>ˌqFմ QX*˅N#p$;Lɇ{ ]+ζlC9z'q'uoރQ#A 2p3kM'&DjgsDǘ=Q &bnIQD`U"}m8C$yXcXɑ#W4] Ke"ӢS{-hhm)CHP%l&<$]|aٍ;_zjyKѮki dy,m8~'04BMY~ y2
+ [%BR +RtAt]F:1CFL d"RA 0d!It T@9U'8ߞ+=Ͽ~#ԙ6»:eȖio'E)Wd`X:6^CH\z+W\}Wl'soJ̋u۹C[> ݫQ_2M
+ԥ1@2把0 UiH.4&-\@aea88N(tHvAu߄82@$t?[~(/d_nt"ljJ7 %t7!@~j3]PCzQMB6?HO+M Fʟm~#wf#3tgs{H
+3 3 ;lpA"m~J[R,'ӏG$/`9<B]ʐlO\`ZjzK>$q1?V.gj\D5J}$mǬ{iss|0?-4p3|ˌoV4~\t$;>\ QtRE䵥_,$lP%<l>,j?%&jЭRGC;`\,N)#Cf[=|ˤy},.Rk yQ<=BY,ݵGe4rQc
+r++OC-R <gays+N=p:]R%i 溅j5)
+p_,;.L{SŅSdh_BPwWb\7݉)wAg`(ofܭA7 6[(9٥|"gL]
+vX&]q>2|<A?[YjQ2
+
+sLo"%㺾3 v.~n@ 7`*4Q#Qux}hX$;됨\#|)j,BOmܙ/z>
+XP O `ZX-f'`~< FmݡY QL7{SL)b}D'/R~Il+V.v:H1T
+0"ph.p0'PnOH"*͔n+Z, ubpTt~;u[qzEh n<FvQ6aySxj#xSi<XС!uZ"l63=c]QysY(ΌO?OxDVȒ SkXjRc?4
+i8 =h_I5S9Z
+ԹYR}>~pcKGZ A{LNCDžE$"0y CMLɡ>|MQ%:@~e Z(:6 `rbgrI<_hx={.)z՜u9<F ;MCq8囩Mkq,SzACua"f$z]khfT.Ix}PDU6?h'CJ/z=2J}G_>Vzp\
+o}h.uIB! !O"QUkxACZq!|٨"f+*{SD'ng\5_(k~'wNÙw3)zMy5]^sVKSK
+G<ڲtB
+(鄳KbV!fP@J
+Dc; ͕ j]³Fkg34 ~.*KۈRvZQ
+i+2bC:_Hb.
+ pL˚lrb @S+D.z;adDU)oAU=u2j$F9jdSx&֏FmڨP R=fh<*֬+[#Neu&L[hu֕y몾+.|WݦHݒW'g,pBuQ74lu/R7}
+endstream endobj 27 0 obj <</Filter[/FlateDecode]/Length 15293>>stream
+HWV"}kݏ`*ƂV)PT.4MRST
+0%PIÀ wDH' `DP ofCϺK0$D7Q
+?N?G1{У=de. ǝ[FnZurkcR{_ji
+=~R`dtlJllkSd-E6~A+s $Nڷt(ir9̈F?.n ` )$bdI/a jAj[B0=CPXikl~4q#u /Q1i* |Ntf++wZ$f4{KEn7%׫q8 {#0\gZ?gxVe՞Q$rm0Zyk5xu p=rNp(f5fuEp [y*eՋGXVAOtRBx/գH?q)7Xߪzq*Sیm8pBZ]Yj1}CH`xZt]@9ňwW8{Z֗Oe >GfVA?/6?<`y ߊf(OwGr8R@،1v_#ŭ+,_) 0_3k"˛ &@%mBB5,O=wn s/ (aLR.m|_#vsB׭R 
+Opz}F7JUJ >:an+5J·rfVhxϹ_Y8K*]'}GctP{cWu>عRބ9c |8/]
+i*HI;<NFx^)`
+SK?,yS€{OS
+6=>Vh}#~~:+2"3 $R!S%V)u`bIdqK9 *̦M\3Y4Eg'i?U3MoT>m|".;|"Y-*"r2\lF.9giEip˛dy nDuZU21\jxOE#O@<Gp*+8[ 8
+z kp\1;.Z b.!ə- weA\x*1$s3\&̓$x ;x ZҤWn>nBڛi9!&#yC6GC@A)uG<NAp%OG*8]JAnFet),|
+ 6!e_e+gOR'Dҹ!s'DnxJLؒ1: &R] LZע$7 o V,g
+< R^*<<xTct, ܣqc7yC
+l<~hqc\BIWz7/=AA3'1]j?S'-3tgP1H1b42dmxW߁H1C.op^B@ I4#p7m6F00i])
+˔^c{4#v4^AͫWY4Qkbfd`HH[ֺˠSXʗ3_o4E&z=}jܔڧAmPk z%"ŖM(8"".#Ew\$M$$i
+ƒN7]
+׉3/.{b-D8=}yv`tqnw0-%hVCQ/=U;ы wHs6[OrV?TXo>vx4o>W MpXA^ )8Zsĭܸ>l+pc^LUĄj#*7@emT>w ¢iPa凢P SS0#KOՕjFK? ר?-b)>i|_Pu}9(rS:Bw@{)!gM}ՑO|=^`|\&wn6[b L@SPNRX@w/*PxZ@8% ̴}c7uԛܮ0PjjslցË6t<j9 'A<Mbl83vW<ңh`'SRz!bOa0u&c
+Au/V ET*D9xH(9KtJގg c~p|J\4mdCljsSNMvQwuZw;IHpbz$J5d?M[hubRD~ Iqtb dMlbm(hC614)/^Ñ,iO"+&9o
+ vdgG-/iyẍֆΏ)QM ƊeA^vS&7ϘչAhk` Ć^6g :.
+|P^M:jJ\]3Qh- VApNݠl
+j %Ƙ0ƾ&4*1Jb/FxKs6@.M O BA[M!7x2vn6[<S[02{~~5eZAS^"S=9GnNg0"hm(2h0Z֋7RN5~U pS=x;?R_F&:> "@G6
+IZ_wIOs/vRwTKZ
+?L /? ~/64yO+Z_N+ZU\p^̦ʞkVk`8#E(tza j-_e4&* &,:&ZG3!KFQ,' Jb6b?*+e6TX7oj_yC""hOiLN炙di=.m,CFxz[/|\pDxuYR ./[tuYEZQKe.ENc!arq&즎+GEL5s'$6nJ4NɄ)_y/PsEuR ID 60iS5К)1)F'C6(j2'ȒⲩKo':< ,|E%֖
+(EzUD@"xFI'_ɚ]^EX s:z|+͢_C [ N,2\EzNY<p:eUcT+x)d
+,j`T7Dj6IAӛeЅ!sV4Krx.gT\Z"0:̅A<?
+GzҠb/vd40Eʱ7/@^騒->X.
+I 2ڴ<lCZU,E~EUzoU9t,N5guyYUM{ì@M'A,@%`*,f4'2T+[ЛSwYcXڄ91?Gؤ2{:T16鵀YN&iY YrNI\f hdI6U~*F|7E`V v"V,%̎(wӂ~DDkz n1Aiگgz𩗮m+6a-s:q1sseفf+<9t_˺6Am f2GG\8-t66yv7ȳMlHy
+817GmE+7\o{BP2rB3Eh
+ `qQ^ ; ij2шN.cVrs@hBm %quuYEA%:d
+(G%@oeFʶvc
+a8GAJ^@@ lhO A''H(aWҁ `E#he6~b,YS# NO
+ڀ|a"p#@
+"-8*ǡh,Yh@
+KH>`#JV+W/2ڣ!*y㵌 )hSc),QTr\![ srx{yLP1!W"(琑?ǬrƩkeesąo9F$8n'{#~'P ^?D$52[9~!+]Z|H%sxc*݌S]3vbN0Aӆ%0mR0?_j8 hȒ*WYS2K}_Jo 4
+"( 
+1O'«:/]]y%7͑ґFc2RL2Mk oRr#{k 
+P?mw63c~CEBP/׉S-E*p̉s!θeYl
+SB$% /ainaȲM%:KCWU^Y*+;&Uʄe }nhL-moBx }TM=PbSoQomvlF7fታ:]:.UӗUpTS*؏0F=Ce""<FE$*|O tT cLC`g8eҭ1:[c|L]Nka~Q1o bh2IW ֮"~Ho۔6=tLE;(ځ<ZZ*W{i&o~\s!3>[C[yy1nQxMT]LVf00FE/yUłxX6R;3v 6fRQm#m6 aQ2Q2R~wƾ tܹEJ0`?P:[$CO5OM_<_ 07-ܹx0ƫ&3pQ~H(o~AO<_"FW 2s$?B"0R"G'(TaDeQ9qHm` u<wal\yM[ԘS^kG!-HLѤPN,'Y
+P9OU1~@ݻ*jjU *Rq\+l(\,KϪJ%\4C @EY5~br ÝX\1q5 )ȷOwP4qxrfo? -./9WQj.?cr]REz2cihbNtgy@//Lo352^nbTb7-#M8^B~FNz܋h 8{w{ҽ26y1E`T+̝k,?)lc.+5(X,p6 vQt~!o]kN;.yf$9x. tf+Fܠޠ # #^wLzwhrh)2aC;5&% r&HCzE ɤ!kOQ59 5E7k`MyA=̊⢟tutJ6(KTL,goUgc`1~9劔}t Zd@^uZ$ߏTȞe#?P˛PnPaǀF]&"`V\ R*-H7jnMrN}x9`<W;&aR =mcR68mIEG{kKÌ("][Ⱥ0(DXmܖ-;:U8xVtWiS">Pn^wYdUAA/
+(o2W #:j:u u{2neR.ۼ':ӗג[RhT tuŵ<?F,hk}fཙ8!c %R!9J7-M}3qNluJhkH'NC;/;
+0
+m"[AC
+.Q^RFYnV!#R'Pg3Zpr\x@RgA@LP*.z%瘸H8vNؑ힝
+8:Y7r+=PY(&-K[$K@[jaO:b}Lbc IY󆝔Q@S1GDrXC f
+-tW<wKɕO˰Ldž 9(Fc ;=9<\uYuҨKbc_PAb `
+"LNٓhd #Q-}MnY_y+u{U,L^4i&(г
+bY҉% nK0 i п cPaVa_OP-X.uV%M1}.3c|jFl#ix\M>14f^jMa@8Ńm|vթ!М 9 (I͊$
+$k_b,c4cR-. bAN,b^l
+[FzW;JJps;Hi|LJNswsFb#$ߟGK$ W\F(/Yl>VJ3c
+lK]/
+&, bxM"OL20G1dQ`07J0o &LK;6z{V^l 9=RYATDC7"2$S5 O0 ]C1*BM(ĺb5Uv
+z4=QB $WdE 'bM0E"XpYg1ɔz{簉n=*)5+%Lɒk!ynWk劾 cY^JѶys5Lhy xK+ᣌINTHFx5i+&k^(ڢi\*H5:6a(b>AZGFz^TS0C`k`4ۭ)&s@toማ2>=]c3k(u-*
+W
+endstream endobj 6 0 obj [5 0 R] endobj 28 0 obj <</CreationDate(D:20240428163440+02'00')/Creator(Adobe Illustrator CS6 \(Windows\))/ModDate(D:20240428163440+02'00')/Producer(Adobe PDF library 10.01)/Title(jason)>> endobj xref
+0 29
+0000000000 65535 f
+0000000016 00000 n
+0000000144 00000 n
+0000053800 00000 n
+0000000000 00000 f
+0000058408 00000 n
+0000213771 00000 n
+0000053851 00000 n
+0000054179 00000 n
+0000058707 00000 n
+0000058594 00000 n
+0000056830 00000 n
+0000057846 00000 n
+0000057894 00000 n
+0000058478 00000 n
+0000058509 00000 n
+0000058780 00000 n
+0000059140 00000 n
+0000060197 00000 n
+0000088175 00000 n
+0000089840 00000 n
+0000107678 00000 n
+0000133579 00000 n
+0000156625 00000 n
+0000165724 00000 n
+0000169520 00000 n
+0000182158 00000 n
+0000198404 00000 n
+0000213794 00000 n
+trailer
+<</Size 29/Root 1 0 R/Info 28 0 R/ID[<533976EE79E2684BA015A921443B9E75><D8242482EBE1814DB4EE97872CA857B8>]>>
+startxref
+213976
+%%EOF
diff --git a/macros/latex/contrib/jsonparse/jason/jason.svg b/macros/latex/contrib/jsonparse/jason/jason.svg
new file mode 100644
index 0000000000..fe8793dfa8
--- /dev/null
+++ b/macros/latex/contrib/jsonparse/jason/jason.svg
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="250px" height="250px" viewBox="0 0 450 450" enable-background="new 0 0 449.5 435" xml:space="preserve">
+<circle fill="#3FA9F5" cx="239" cy="226" r="206.166"/>
+<g>
+ <defs>
+ <circle id="SVGID_1_" cx="239" cy="226" r="206.166"/>
+ </defs>
+ <clipPath id="SVGID_2_">
+ <use xlink:href="#SVGID_1_" overflow="visible"/>
+ </clipPath>
+ <path clip-path="url(#SVGID_2_)" fill="#C69C6D" d="M418.334,389.667c0,0-10.334-12.333-36-86.667S344,189.333,333.667,163
+ c-5.552-14.149-12.545-22.326-17.83-26.869c7.769-5.957,15.778-13.185,19.83-20.131c6.902-11.834,11.667-24.5,15.667-38.5
+ C353.731,69.108,361,63.333,361,63.333s-55-13-78.666,29.5c-1.534,2.754-3.036,5.383-4.538,7.892l-125.587,25.33
+ C141.705,137.165,130.648,151.436,126,166c-4.127,12.93-11.333,16-26.333,28s-47.398,43.774-47.398,43.774l12.106,48.851
+ l56.113,69.247c13.436-9.009,28.206-20.065,46.512-27.122c13.874-5.348,33.133-8.479,51.113-12.082
+ c2.555,6.323,8.828,23.014,11.387,40.332c3.25,22,4.5,91.5,4.5,91.5L418.334,389.667z"/>
+ <path clip-path="url(#SVGID_2_)" fill="#F7931E" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M465.5,307.334
+ c0,0-9.667-14.833-21.667-21c-11.409-5.863-24.5-7.167-24.5-7.167s2.853-11.646,11.167-22.833C439.667,244,456,233.667,456,233.667
+ l-51.499-17.5c0,0,17.166-6.5,25.166-13.833c9.095-8.336,13.333-30,13.333-30s-47.621,2.806-54.333-15.167
+ C383.501,143.333,402.001,114,402.001,114s-27.334-6.333-41.167-6.167c-7.572,0.091-15.827,0.876-22.104,2.556
+ c-0.978,1.889-1.986,3.764-3.063,5.611c-4.052,6.946-12.062,14.174-19.83,20.131c5.285,4.543,12.278,12.72,17.83,26.869
+ c10.333,26.333,23.001,65.666,48.667,140s36,86.667,36,86.667l32.5-36.5c-15.167-3-22.334-20.5-22.334-20.5L465.5,307.334z"/>
+ <path clip-path="url(#SVGID_2_)" fill="none" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M234,448.5
+ c0,0-1.25-69.5-4.5-91.5c-2.559-17.318-8.832-34.009-11.387-40.332c-0.185,0.037-0.369,0.074-0.554,0.111"/>
+</g>
+<path fill="#F7931E" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M267.334,75.167
+ C256.668,65.5,245.5,64.333,236.667,64c-15.107-0.57-25-26.667-25-26.667s0,15.167-3,18.333c-6.167-9.333-19.333-11.833-29.667-11
+ c-14.596,1.177-24,11.667-24,11.667s14.5-2.833,24.167,7.167c9.667,10,10.167,15.167,10.167,15.167
+ c-7.167-9-25.834-6.334-42.167,5.333s-11.5,43-11.5,43s3.667-12.833,20.667-20.667c6.572-3.028,24-3.667,24-3.667
+ S155.5,103.5,150.667,132.5c-2.909,17.455,3.667,32.333,3.667,32.333s1.5-15.5,16.333-24.667c10.31-6.371,21.833-9.333,21.833-9.333
+ c-5.167,3.833-3.166,14.833-3.166,14.833s9-15.167,32.833-13.667c30.479,1.918,43.022-10.208,55.629-31.275
+ C277.24,94.63,275.157,82.257,267.334,75.167z"/>
+<path fill="#A67C52" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M120.487,355.872
+ c8.348-10.395,19.908-25.626,22.763-33.622c7.5-21-1.25-30.75-6-38s3.25-11.5-10-24.25S73.5,268.25,68,265.75S63,260,61.5,249
+ s-7.183-12.182-16.5-11c-12.646,1.604-18.5,24.5-21.75,40.25s-11.549,15.507-9.75,29c0.854,6.402,4.447,12.983,15.898,15.396
+ c-0.721,5.758-0.935,12.787,0.283,20.442c3.164,19.888,34.804,29.832,58.308,27.572C98.749,369.626,109.143,363.479,120.487,355.872
+ z"/>
+<path fill="#C69C6D" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M189.334,78.667c0,0-0.5-5.167-10.167-15.167
+ c-1.713-1.772-3.58-3.135-5.489-4.188c0.317,6.082,0.921,11.189,1.303,14.006C181.138,73.124,186.281,74.833,189.334,78.667z"/>
+<path fill="#C69C6D" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M179,44.667c10.334-0.833,23.5,1.667,29.667,11
+ c3-3.167,3-18.333,3-18.333s7.525,19.843,19.471,25.298c-4.58-16.15-21.08-31.12-27.888-36.632
+ c-7-5.667-16.625-19.333-16.625-19.333s-8.979,11.333-11.979,29c-0.542,3.195-0.864,6.542-1.031,9.882
+ C175.318,45.129,177.115,44.819,179,44.667z"/>
+<ellipse fill="#FFFFFF" stroke="#603813" stroke-width="3" stroke-miterlimit="10" cx="223.167" cy="190.959" rx="19.5" ry="17.375"/>
+<ellipse fill="#42210B" cx="221.751" cy="193" rx="7.917" ry="7"/>
+<path fill="#603813" d="M80.519,293.464c0,0,2.443-4.219,6.106-9.089C91.052,278.49,99.007,273.351,103,273
+ c7.125-0.625,12.198,1.105,9.299,6.695S99.936,291.193,93,292.125S80.519,293.464,80.519,293.464z"/>
+<path fill="none" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M296,149.5c0,0,30.334-17.5,39.667-33.5
+ c6.902-11.834,11.667-24.5,15.667-38.5C353.731,69.108,361,63.333,361,63.333s-55-13-78.666,29.5
+ c-1.534,2.754-3.036,5.383-4.538,7.892"/>
+<path fill="none" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M120.488,355.872
+ c13.437-9.009,28.207-20.065,46.512-27.122c24.045-9.269,64.273-11.878,85.969-21.821s24.408-43.392,24.408-43.392"/>
+<path fill="#FFFFFF" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M127.5,299.5c0,0-0.749,0.729-2.083,1.995
+ C126.919,300.316,127.5,299.5,127.5,299.5z"/>
+<path fill="#FFFFFF" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M39.236,323.495
+ c-0.724,4.556-1.093,11.276,2.014,15.005c5,6,14.5,15,36,2c18.048-10.912,41.196-32.388,48.167-39.005
+ c-4.023,3.157-14.707,8.937-38.917,8.755C59.839,310.05,53.549,322.611,39.236,323.495z"/>
+<path fill="none" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M29.398,322.646c1.963,0.413,4.15,0.708,6.602,0.854
+ c1.129,0.067,2.202,0.06,3.236-0.005"/>
+<path fill="none" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M108.345,308.401
+ c-16.22,8.63-44.097,22.899-51.74,23.26c-7.288,0.344-13.568-4.744-16.966-8.201c-0.135,0.01-0.266,0.026-0.403,0.035"/>
+<path fill="none" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M152.209,126.056
+ C141.705,137.165,130.648,151.436,126,166c-4.126,12.93-11.333,16-26.333,28s-47.398,43.774-47.398,43.774"/>
+</svg>
diff --git a/macros/latex/contrib/jsonparse/jsonparse-doc.pdf b/macros/latex/contrib/jsonparse/jsonparse-doc.pdf
index 07bb66590c..ed7a1dded6 100644
--- a/macros/latex/contrib/jsonparse/jsonparse-doc.pdf
+++ b/macros/latex/contrib/jsonparse/jsonparse-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/jsonparse/jsonparse-doc.tex b/macros/latex/contrib/jsonparse/jsonparse-doc.tex
index 485bec0cbf..1cfcde1e18 100644
--- a/macros/latex/contrib/jsonparse/jsonparse-doc.tex
+++ b/macros/latex/contrib/jsonparse/jsonparse-doc.tex
@@ -11,8 +11,8 @@
% This work has the LPPL maintenance status `maintained'.
%
\documentclass[a4paper]{article}
-\def\jsonparsefileversion{0.8.2}
-\def\jsonparsefiledate{26 April 2024}
+\def\jsonparsefileversion{0.8.3}
+\def\jsonparsefiledate{28 April 2024}
\usepackage[T1]{fontenc}
\usepackage{Alegreya}
@@ -182,8 +182,8 @@
\makedoctitle
[The jsonparse package]
{The \titlemacro{jsonparse} package}
- {An easy way to parse, store and access JSON data from files or strings in LaTeX documents}
- {Jasper Habicht}[E-mail: \href{mailto:mail@jasperhabicht.de}{mail@jasperhabicht.de}]
+ {A handy way to parse, store and access JSON data from files or strings in LaTeX documents}
+ {Jasper Habicht}[E-mail: \href{mailto:mail@jasperhabicht.de}{mail@jasperhabicht.de}. I am grateful to Joseph Wright, Jonathan P. Spratte and David Carlisle who helped me navigating the peculiarities of TeX and optimizing the code. Jason, the JSON parsing horse: Copyright 2024 Hannah Klöber.]
{Version \jsonparsefileversion, released on \jsonparsefiledate}
\changes{v0.3.0}{2024/04/08}{First public beta release.}
@@ -196,8 +196,11 @@
\changes{v0.7.1}{2024/04/20}{Access to first-level keys of object added.}
\changes{v0.8.0}{2024/04/24}{Internal rewrite, escaping procedures changed.}
\changes{v0.8.2}{2024/04/26}{Bug fixes, externalizing parsed data.}
+\changes{v0.8.3}{2024/04/28}{Escaping of characters with special meaning in TeX.}
\begin{document}
+\vspace*{-1cm}
+\noindent\hspace*{-3.5mm}\includegraphics[width=5cm]{jason/jason.pdf}
\printdoctitle
@@ -205,6 +208,8 @@
\section{Introduction}
+Hello guys, I am Jason, the JSON parsing horse. JSON data is my favorite thing to parse! But I found that converting JSON to TeX can be a bit tricky. Therefore, I created this package which I am happy to introduce to you.
+
The \macro{jsonparse} package provides a handy way to read in JSON data from files or strings in LaTeX documents, parse the data and store it in a user-defined token variable. The package allows accessing the stored data via a JavaScript-flavored syntax.
This package is still in a beta stage and not thoroughly tested. Bugs or improvements can be issued via GitHub at \url{https://github.com/jasperhabicht/jsonparse/issues}.
@@ -248,6 +253,21 @@ Using the control sequence \macro{\x}, it is possible to nest JSON strings into
\end{codeexamplecolumns}
\begin{macrodef}
+|escape|={<all>}
+|escape|={<none>}
+|escape|={<number sign>}
+|escape|={<dollar sign>}
+|escape|={<percent sign>}
+|escape|={<ampersand>}
+|escape|={<circumflex accent>}
+|escape|={<low line>}
+|escape|={<tilde>}
+\end{macrodef}
+The key \macro{escape} can be used to convert characters that don't require escaping in JSON but in TeX into their relevant TeX escape sequences. Apart from the backslash and curly braces that need to be escaped anyways, these are the number sign, the dollar sign, the percent sign, the ampersand, the circumflex accent, the low line and the tilde. The characters can be selected individually separated by a comma (for example \macro{escape={dollar sign, circumflex accent, low line}}. With \macro{escape={all}}, all escaping sequences are selected, with \macro{escape={none}}, none is selected.
+
+The naming of the relevant characters follows their Unicode names. However, \macro{hash} exists as alias for \macro{number sign}, \macro{dollar} as alias for \macro{dollar sign}, \macro{percent} for \macro{percent sign}, \macro{circumflex} for \macro{circumflex accent} and \macro{underscore} for \macro{low line}.
+
+\begin{macrodef}
replacement/|backspace|={<string>}
replacement/|formfeed|={<string>}
replacement/|linefeed|={<string>}
@@ -356,7 +376,7 @@ Parsing large JSON files can take quite a while. In order to speed up follow-up
\begin{macrodef}
|\JSONParsePut|{<token variable>}{<key>}[<JSON string>]
\end{macrodef}
-The commannd \macro{\JSONParsePut} is used by the externalization procedure to re-read already parsed JSON data to the main file. It essentially just adds a key-value pair to a property list (where the value part is read as string). Hence, it can also be used to append more entries to an already existing property list containing parsed JSON data.
+The command \macro{\JSONParsePut} is used by the externalization procedure to re-read already parsed JSON data to the main file. It just adds a key-value pair to the property list (where the value part is read as string). Hence, it can also be used to append more entries to an already existing property list containing parsed JSON data.
\subsection{Changing separators, output and other settings}\label{sec:settings}
diff --git a/macros/latex/contrib/jsonparse/jsonparse.sty b/macros/latex/contrib/jsonparse/jsonparse.sty
index 404e769ba7..680e89bfca 100644
--- a/macros/latex/contrib/jsonparse/jsonparse.sty
+++ b/macros/latex/contrib/jsonparse/jsonparse.sty
@@ -10,7 +10,7 @@
%
% This work has the LPPL maintenance status `maintained'.
%
-\ProvidesExplPackage {jsonparse} {2024-04-26} {0.8.2}
+\ProvidesExplPackage {jsonparse} {2024-04-28} {0.8.3}
{JSON Parse}
\bool_new:N \l__jsonparse_debug_mode_bool
@@ -51,6 +51,11 @@
Invalid ~ escape ~ sequence ~ #1 ~ in ~ key.
}
+\msg_new:nnn { jsonparse } { escape-char-not-found } {
+ \msg_error_text:n { jsonparse } \iow_newline:
+ Escape ~ character ~ #1 ~ not ~ found.
+}
+
\msg_new:nnn { jsonparse } { saving-external } {
\msg_info_text:n { jsonparse } \iow_newline:
Saving ~ external ~ file: ~ #1.
@@ -77,6 +82,22 @@
\str_new:N \l__jsonparse_carriage_return_str
\str_new:N \l__jsonparse_horizontal_tab_str
+\clist_new:N \l__jsonparse_escape_tex_chars_clist
+\clist_set:Nn \l__jsonparse_escape_tex_chars_clist {
+ number_sign ,
+ dollar_sign ,
+ percent_sign ,
+ ampersand ,
+ circumflex_accent ,
+ low_line ,
+ tilde
+}
+
+\str_new:N \l__jsonparse_escape_temp_str
+\clist_map_inline:Nn \l__jsonparse_escape_tex_chars_clist {
+ \bool_new:c { l__jsonparse_escape_ #1 _bool }
+}
+
\keys_define:nn { jsonparse } {
array ~ index ~ zero-based .bool_set:N = \l__jsonparse_array_index_zero_based_bool ,
array ~ index ~ zero-based .default:n = { true } ,
@@ -104,7 +125,50 @@
replacement / carriage ~ return .str_set:N = \l__jsonparse_carriage_return_str ,
replacement / carriage ~ return .initial:n = { ~ } ,
replacement / horizontal ~ tab .str_set:N = \l__jsonparse_horizontal_tab_str ,
- replacement / horizontal ~ tab .initial:n = { ~ }
+ replacement / horizontal ~ tab .initial:n = { ~ } ,
+ escape .code:n = {
+ \str_case:nnF {#1} {
+ { all } {
+ \clist_map_inline:Nn \l__jsonparse_escape_tex_chars_clist {
+ \bool_set_true:c { l__jsonparse_escape_ ##1 _bool }
+ }
+ }
+ { none } {
+ \clist_map_inline:Nn \l__jsonparse_escape_tex_chars_clist {
+ \bool_set_false:c { l__jsonparse_escape_ ##1 _bool }
+ }
+ }
+ } {
+ \clist_map_inline:nn {#1} {
+ \str_set:Nn \l__jsonparse_escape_temp_str {##1}
+ \str_replace_all:Nnn \l__jsonparse_escape_temp_str { ~ } { _ }
+ \bool_if_exist:cTF { l__jsonparse_escape_ \l__jsonparse_escape_temp_str _bool } {
+ \bool_set_true:c { l__jsonparse_escape_ \l__jsonparse_escape_temp_str _bool }
+ } {
+ \str_case:nnF {##1} {
+ { hash } {
+ \bool_set_true:c { l__jsonparse_escape_number_sign_bool }
+ }
+ { dollar } {
+ \bool_set_true:c { l__jsonparse_escape_dollar_sign_bool }
+ }
+ { percent } {
+ \bool_set_true:c { l__jsonparse_escape_percent_sign_bool }
+ }
+ { circumflex } {
+ \bool_set_true:c { l__jsonparse_escape_circumflex_accent_bool }
+ }
+ { underscore } {
+ \bool_set_true:c { l__jsonparse_escape_low_line_bool }
+ }
+ } {
+ \msg_error:nno { jsonparse } { escape-char-not-found }
+ {##1}
+ }
+ }
+ }
+ }
+ }
}
\NewDocumentCommand { \JSONParseSet } { m } {
@@ -121,6 +185,7 @@
\cs_generate_variant:Nn \tl_range:nnn { nne , nen }
\cs_generate_variant:Nn \tl_range:Nnn { Nne , Nen }
\cs_generate_variant:Nn \tl_remove_once:Nn { NV }
+\cs_generate_variant:Nn \tl_replace_all:Nnn { Non , Noe }
\cs_generate_variant:Nn \tl_replace_once:Nnn { Non }
\cs_generate_variant:Nn \tl_rescan:nn { no , ne }
\cs_generate_variant:Nn \tl_set:Nn { Ne }
@@ -132,6 +197,7 @@
\cs_generate_variant:Nn \prop_item:Nn { Ne , ce }
\cs_generate_variant:Nn \prop_put:Nnn { Nen , Nee }
\cs_generate_variant:Nn \iow_now:Nn { Ne }
+\cs_generate_variant:Nn \msg_error:nnn { nno }
\cs_generate_variant:Nn \msg_error:nnnn { nnoo }
\cs_generate_variant:Nn \msg_log:nnn { nne }
@@ -591,6 +657,27 @@
\tl_set:Ne \l__jsonparse_temp_tl {#1}
\cs_set_eq:NN \" \__jsonparse_tex_quote
\cs_set_eq:NN \\ \__jsonparse_tex_backslash
+ \bool_if:NT \l__jsonparse_escape_number_sign_bool {
+ \tl_replace_all:Noe \l__jsonparse_temp_tl { \c_hash_str } { \c_backslash_str \c_hash_str }
+ }
+ \bool_if:NT \l__jsonparse_escape_dollar_sign_bool {
+ \tl_replace_all:Noe \l__jsonparse_temp_tl { \c_dollar_str } { \c_backslash_str \c_dollar_str }
+ }
+ \bool_if:NT \l__jsonparse_escape_percent_sign_bool {
+ \tl_replace_all:Noe \l__jsonparse_temp_tl { \c_percent_str } { \c_backslash_str \c_percent_str }
+ }
+ \bool_if:NT \l__jsonparse_escape_ampersand_bool {
+ \tl_replace_all:Noe \l__jsonparse_temp_tl { \c_ampersand_str } { \c_backslash_str \c_ampersand_str }
+ }
+ \bool_if:NT \l__jsonparse_escape_circumflex_accent_bool {
+ \tl_replace_all:Non \l__jsonparse_temp_tl { \c_circumflex_str } { \textasciicircum }
+ }
+ \bool_if:NT \l__jsonparse_escape_low_line_bool {
+ \tl_replace_all:Noe \l__jsonparse_temp_tl { \c_underscore_str } { \c_backslash_str \c_underscore_str }
+ }
+ \bool_if:NT \l__jsonparse_escape_tilde_bool {
+ \tl_replace_all:Non \l__jsonparse_temp_tl { \c_tilde_str } { \textasciitilde }
+ }
\tl_rescan:no { } { \l__jsonparse_temp_tl }
\group_end:
}
@@ -670,6 +757,10 @@
\group_end:
}
+\tl_new:N \JSONParseArrayIndex
+\tl_new:N \JSONParseArrayKey
+\tl_new:N \JSONParseArrayValue
+
\NewDocumentCommand { \JSONParseArrayValuesMap } { s m m O{} m } {
\group_begin:
\jsonparse_filter:Nn #2 {#3}
diff --git a/macros/latex/contrib/l3backend/CHANGELOG.md b/macros/latex/contrib/l3backend/CHANGELOG.md
deleted file mode 100644
index 66a69a3bb3..0000000000
--- a/macros/latex/contrib/l3backend/CHANGELOG.md
+++ /dev/null
@@ -1,393 +0,0 @@
-# Changelog
-All notable changes to the `l3backend` bundle will be documented in this file.
-
-The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
-this project uses date-based 'snapshot' version identifiers.
-
-## [Unreleased]
-
-## [2024-03-14]
-
-### Removed
-- Range guard for opacity
-
-### Fixed
-- Initiation of opacity data (see \#1472)
-- ExtGState setup for stroking opacity (issue \#1472)
-- Inconsistent behavior of opacity functions w/o `pdfmanagement`
- (issue \#1473)
-- Redundant braces in opacity backend for dvisvgm
-- Interaction of scope with box insertion with `dvips` (see \#1504)
-
-## [2024-02-20]
-
-### Fixed
-- Naming of a variable in the `draw` code
-
-## [2024-01-04]
-
-### Changed
-- Documentation tweaks
-
-## [2023-11-09]
-
-### Changed
-- Changed `luaotfload` integration to allow coexistance with (x)color.
-
-## [2023-11-04]
-
-### Fixed
-- Interaction with `luaotfload` transparency colorstacks
-
-## [2023-10-23]
-
-### Changed
-- Update minimal `expl3` version required
-
-## [2023-10-10]
-
-### Changed
-- Track `expl3` changes
-
-## [2023-04-19]
-
-### Changed
-- Pass additional attributes when loading graphics in PDF mode
-
-### Fixed
-- Remove a stray `>` from graphics inclusion code for `dvipdfmx`
-
-## [2023-03-30]
-
-### Changed
-- Integrate `l3color` and `l3opacity` with `luaotfload` to ensure that
- opacity specifications don't conflict
-
-## [2023-01-16]
-
-### Changed
-- Adjust internal scope of a PDF function
-
-## [2022-10-26]
-
-### Changed
-- Avoid setting media box if `\mag` is non-standard
-
-## [2022-09-28]
-
-### Changed
-- Add support for media box setting
-
-## [2022-08-30]
-
-### Added
-- Support for new approach to writing PDF objects
-
-## [2022-08-23]
-
-### Changed
-- Approach to setting current color data from LaTeX2e
-
-## [2022-08-05]
-
-### Changed
-- Add no-op backend functions for annotations with `dvisvgm`
-
-## [2022-07-01]
-
-#### Fixed
-- Do not include PDF file to count pages on pdfTeX
-- Opacity creation with `dvipdfmx`/XeTeX (issue [\#1106](https://github.com/latex3/latex3/issues/1106))
-- Reset opacity when no stack is available at the backend (issue [\#1107](https://github.com/latex3/latex3/issues/1107))
-
-## [2022-04-20]
-
-### Changed
-- Adjust `(x)dvipdfmx` backend approach to color following issues with
- multiple color stacks in `xetex.def`
-- Move some functions to `l3color`
-
-## [2022-04-14]
-
-### Added
-- Support for SVG graphic inclusion by `dvisvgm`
-
-### Fixed
-- `\color_ensure_current:` backend with DVI-based routes (issue [\#1085](https://github.com/latex3/latex3/issues/1085))
-
-## [2022-04-10]
-
-### Added
-- Support for graphics (PDF) page count extraction
-
-### Fixed
-- Setup for graphics extension searching
-- Various internal issues in graphics inclusion
-- Some missing functions for `dvisvgm` color support added
-
-### Removed
-- Support for pre-2020-11-11 `dvipdfmx`
-
-## [2022-02-07]
-
-### Fixed
-- Use of color stack int in scope end for `(x)dvipdfmx`
-
-## [2022-01-12]
-
-### Changed
-- Move some functions to `l3color`
-
-## [2021-12-14]
-
-### Fixed
-- Scoping issues for `dvisvgm`
-- Some incorrect functions in `l3draw` backend for `dvisvgm`
-
-## [2021-10-17]
-
-### Changed
-- Better DeviceN support
-
-## [2021-10-12]
-
-### Fixed
-- Issues with creating DeviceN color spaces
-
-## [2021-08-04]
-
-### Changed
-- Only use `pdfmanagement` module if active
-
-## [2021-07-12]
-
-### Fixed
-- GoTo link formation for Distiller-based workflows (issue [\#957](https://github.com/latex3/latex3/issues/957))
-- Support transparency with Distiller
-
-## [2021-05-07]
-
-### Changed
-- `\pdf_version_gset:n` in `dvips` now sets `\pdf_version_minor:` and
- `\pdf_version_major:`. This doesn't set the PDF version but allows to test
- which version the user intents to create.
-
-## [2021-03-18]
-
-### Fixed
-- Maintain stack color correctly with `(x)dvipdfmx`
-
-## [2021-03-02]
-
-### Changed
-- Drop 'correction' for link placement in `(x)dvidpfmx`: no longer required
-- Define `\main@pdfcolorstack` for `(x)dvipdfmx` if it does not exist
-
-### Fixed
-- Initialisation of color stacks for `(x)dvipdfmx`
-
-## [2021-02-18]
-
-### Changed
-- Update tracking of PDF management functions
-
-### Fixed
-- Opacity support for pdfTeX/LuaTeX
-
-## [2021-02-06]
-
-### Changed
-- Use new (internal) interface for kerns
-
-## [2021-01-29]
-
-### Added
-- Basic opacity support
-
-### Changed
-- Use color stack for fill color, and for stroke color if possible
-
-### Fixed
-- Implementation of `filldraw` for `dvips`
-
-## [2021-01-09]
-
-### Added
-- Support for referencing last link with `(x)dvipdfmx` (requires an up-to-date
- backend)
-
-### Changed
-- Implementation of color wtih (x)dvipdfmx (requires an up-to-date
- backend)
-
-## [2020-09-24]
-
-### Fixed
-- Documented source as PDF
-
-## [2020-09-11]
-
-### Added
-- Support for CIELAB separations with `dvips`
-
-### Fixed
-- Some PDF object functions
-- Separation color selection for `dvipdfmx`/XeTeX
-- Logic for some aspects of CIELAB Separation color
-
-## [2020-09-01]
-
-### Changed
-- Improved support for Separation colors
-- Updated approach to `dvipdfmx`/XeTeX color support
-- Split `pdfmode` driver into pdfTeX- and LuaTeX-specific files
-- Renamed `xdvipdfmx` backend files to `xetex`
-
-## [2020-08-07]
-
-### Changed
-- Color selection implementation
-- Improved support for Separation colors
-
-## [2020-06-29]
-
-### Fixed
-- Loading with `dvisvgm`
-
-## [2020-06-23]
-
-### Changed
-- Improved color support for drawings with `dvisvgm`
-
-### Fixed
-- Loading with `dvisvgm`
-
-## [2020-06-18]
-
-### Changed
-- Use `scn` operator for separations
-- Internal color model
-- Internal performance enhancements
-
-## [2020-06-03]
-
-### Fixed
-- Unneeded `[nobreak]` in `dvips` driver (issue [\#709](https://github.com/latex3/latex3/issues/709))
-- `\__pdf_backend_object_write_fstream:nn` with `dvips` backend (issue [\#710](https://github.com/latex3/latex3/issues/710))
-- Array writing in `dvips` mode
-
-## [2020-05-05]
-
-### Added
-- `\__pdf_backend_pageobject_ref:n`
-
-### Changed
-- Extend PDF compression control to `dvips`
-
-## [2020-03-12]
-
-### Fixed
-- Creation of PDF annotations with `dvips` backend
-
-## [2020-02-23]
-
-### Fixed
-- Mismatch between release tag and CTAN version
-
-## [2020-02-21]
-
-### Added
-- Support for suppressing backend headers (see matching change in
- `l3kernel`)
-
-## [2020-02-03]
-
-### Fixed
-- Corrected release string information
-
-## [2019-11-25]
-
-### Changed
-- Move dvips header material to `.pro` file
-
-## [2019-10-11]
-
-### Changed
-- Improved functionality in generic mode
-
-## [2019-09-05]
-
-### Added
-- Support for EPS and PDF files with `dvisvgm` backend
-
-### Fixed
-- Some primitive use in the `dvips` backend
-
-## [2019-08-25]
-
-### Fixed
-- Setting for PDF version in `dvipdfmx` route
-- Support for PDF objects with XeTeX
-
-## [2019-07-01]
-
-### Added
-- Driver support for anonymous objects
-
-### Changed
-- Moved backend code to separate release module `l3backend`
-- Include `l3backend` in file names
-- Moved backend code to internal for each 'parent' module
-
-[Unreleased]: https://github.com/latex3/latex3/compare/2024-03-14...HEAD
-[2024-03-14]: https://github.com/latex3/latex3/compare/2024-02-20...2024-03-14
-[2024-02-20]: https://github.com/latex3/latex3/compare/2024-01-04...2024-02-20
-[2024-01-04]: https://github.com/latex3/latex3/compare/2023-11-09...2024-01-04
-[2023-11-09]: https://github.com/latex3/latex3/compare/2023-11-04...2023-11-09
-[2023-11-04]: https://github.com/latex3/latex3/compare/2023-10-23...2023-11-04
-[2023-10-23]: https://github.com/latex3/latex3/compare/2023-10-10...2023-10-23
-[2023-10-10]: https://github.com/latex3/latex3/compare/2023-04-19...2023-10-10
-[2023-04-19]: https://github.com/latex3/latex3/compare/2023-03-30...2023-04-19
-[2023-03-30]: https://github.com/latex3/latex3/compare/2023-01-16...2023-03-30
-[2023-01-16]: https://github.com/latex3/latex3/compare/2022-10-26...2023-01-16
-[2022-10-26]: https://github.com/latex3/latex3/compare/2022-09-28...2022-10-26
-[2022-09-28]: https://github.com/latex3/latex3/compare/2022-08-30...2022-09-28
-[2022-08-30]: https://github.com/latex3/latex3/compare/2022-08-23...2022-08-30
-[2022-08-23]: https://github.com/latex3/latex3/compare/2022-08-05...2022-08-23
-[2022-08-05]: https://github.com/latex3/latex3/compare/2022-07-01...2022-08-05
-[2022-07-01]: https://github.com/latex3/latex3/compare/2022-04-20...2022-07-01
-[2022-04-20]: https://github.com/latex3/latex3/compare/2022-04-14...2022-04-20
-[2022-04-14]: https://github.com/latex3/latex3/compare/2022-04-10...2022-04-14
-[2022-04-10]: https://github.com/latex3/latex3/compare/2022-02-07...2022-04-10
-[2022-02-07]: https://github.com/latex3/latex3/compare/2022-01-12...2022-02-07
-[2022-01-12]: https://github.com/latex3/latex3/compare/2021-12-14...2022-01-12
-[2021-12-14]: https://github.com/latex3/latex3/compare/2021-10-17...2021-12-14
-[2021-10-17]: https://github.com/latex3/latex3/compare/2021-10-12...2021-10-17
-[2021-10-12]: https://github.com/latex3/latex3/compare/2021-08-04...2021-10-12
-[2021-08-04]: https://github.com/latex3/latex3/compare/2021-07-12...2021-08-04
-[2021-07-12]: https://github.com/latex3/latex3/compare/2021-05-07...2021-07-12
-[2021-05-07]: https://github.com/latex3/latex3/compare/2021-03-18...2021-05-07
-[2021-03-18]: https://github.com/latex3/latex3/compare/2021-03-02...2021-03-18
-[2021-03-02]: https://github.com/latex3/latex3/compare/2021-02-18...2021-03-02
-[2021-02-18]: https://github.com/latex3/latex3/compare/2021-02-06...2021-02-18
-[2021-02-06]: https://github.com/latex3/latex3/compare/2021-01-29...2021-02-06
-[2021-01-29]: https://github.com/latex3/latex3/compare/2021-01-09...2021-01-29
-[2021-01-09]: https://github.com/latex3/latex3/compare/2020-09-24...2021-01-09
-[2020-09-24]: https://github.com/latex3/latex3/compare/2020-09-11...2020-09-24
-[2020-09-11]: https://github.com/latex3/latex3/compare/2020-09-01...2020-09-11
-[2020-09-01]: https://github.com/latex3/latex3/compare/2020-08-07...2020-09-01
-[2020-08-07]: https://github.com/latex3/latex3/compare/2020-06-29...2020-08-07
-[2020-06-29]: https://github.com/latex3/latex3/compare/2020-06-23...2020-06-29
-[2020-06-23]: https://github.com/latex3/latex3/compare/2020-06-18...2020-06-23
-[2020-06-18]: https://github.com/latex3/latex3/compare/2020-06-03...2020-06-18
-[2020-06-03]: https://github.com/latex3/latex3/compare/2020-05-05...2020-06-03
-[2020-05-05]: https://github.com/latex3/latex3/compare/2020-03-12...2020-05-05
-[2020-03-12]: https://github.com/latex3/latex3/compare/2020-02-23...2020-03-12
-[2020-02-23]: https://github.com/latex3/latex3/compare/2020-02-21...2020-02-23
-[2020-02-21]: https://github.com/latex3/latex3/compare/2020-02-03...2020-02-21
-[2020-02-03]: https://github.com/latex3/latex3/compare/2019-11-25...2020-02-03
-[2019-11-25]: https://github.com/latex3/latex3/compare/2019-10-11...2019-11-25
-[2019-10-11]: https://github.com/latex3/latex3/compare/2019-09-05...2019-10-11
-[2019-09-05]: https://github.com/latex3/latex3/compare/2019-08-25...2019-09-05
-[2019-08-25]: https://github.com/latex3/latex3/compare/2019-07-01...2019-08-25
-[2019-07-01]: https://github.com/latex3/latex3/compare/2019-05-28...2019-07-01
diff --git a/macros/latex/contrib/l3backend/README.md b/macros/latex/contrib/l3backend/README.md
deleted file mode 100644
index 7be33df8b8..0000000000
--- a/macros/latex/contrib/l3backend/README.md
+++ /dev/null
@@ -1,16 +0,0 @@
-LaTeX3 Backend Drivers
-======================
-
-Release 2024-03-14
-
-This package forms parts of `expl3`, and contains the code used to interface
-with backends (drivers) across the `expl3` codebase. The functions here are
-defined differently depending on the engine in use. As such, these are
-distributed separately from `l3kernel` to allow this code to be updated
-on an independent schedule.
-
------
-
-<p>Copyright (C) 2019-2024 The LaTeX Project <br />
-<a href="http://latex-project.org/">http://latex-project.org/</a> <br />
-All rights reserved.</p>
diff --git a/macros/latex/contrib/l3backend/l3backend-basics.dtx b/macros/latex/contrib/l3backend/l3backend-basics.dtx
deleted file mode 100644
index 4d3b68225a..0000000000
--- a/macros/latex/contrib/l3backend/l3backend-basics.dtx
+++ /dev/null
@@ -1,497 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3backend-basics.dtx
-%
-% Copyright (C) 2019-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3backend bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3backend-basics} module\\ Backend basics^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3backend-basics} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% Whilst there is a reasonable amount of code overlap between backends,
-% it is much clearer to have the blocks more-or-less separated than run
-% in together and DocStripped out in parts. As such, most of the following
-% is set up on a per-backend basis, though there is some common code (again
-% given in blocks not interspersed with other material).
-%
-% All the file identifiers are up-front so that they come out in the right
-% place in the files.
-% \begin{macrocode}
-\ProvidesExplFile
-%<*dvipdfmx>
- {l3backend-dvipdfmx.def}{2024-03-14}{}
- {L3 backend support: dvipdfmx}
-%</dvipdfmx>
-%<*dvips>
- {l3backend-dvips.def}{2024-03-14}{}
- {L3 backend support: dvips}
-%</dvips>
-%<*dvisvgm>
- {l3backend-dvisvgm.def}{2024-03-14}{}
- {L3 backend support: dvisvgm}
-%</dvisvgm>
-%<*luatex>
- {l3backend-luatex.def}{2024-03-14}{}
- {L3 backend support: PDF output (LuaTeX)}
-%</luatex>
-%<*pdftex>
- {l3backend-pdftex.def}{2024-03-14}{}
- {L3 backend support: PDF output (pdfTeX)}
-%</pdftex>
-%<*xetex>
- {l3backend-xetex.def}{2024-03-14}{}
- {L3 backend support: XeTeX}
-%</xetex>
-% \end{macrocode}
-%
-% Check if the loaded kernel is at least enough to load this file.
-% The kernel date has to be at least equal to \cs{ExplBackendFileDate}
-% or later. If \cs{__kernel_dependency_version_check:Nn} doesn't
-% exist we're loading in an older kernel, so it's an error anyway.
-% With time, this test should vanish and only the dependency check
-% should remain.
-% \begin{macrocode}
-\cs_if_exist:NTF \__kernel_dependency_version_check:nn
- {
- \__kernel_dependency_version_check:nn {2023-10-10}
-%<dvipdfmx> {l3backend-dvipdfmx.def}
-%<dvips> {l3backend-dvips.def}
-%<dvisvgm> {l3backend-dvisvgm.def}
-%<luatex> {l3backend-luatex.def}
-%<pdftex> {l3backend-pdftex.def}
-%<xetex> {l3backend-xetex.def}
- }
- {
- \cs_if_exist_use:cF { @latex@error } { \errmessage }
- {
- Mismatched~LaTeX~support~files~detected. \MessageBreak
- Loading~aborted!
- }
- { \use:c { @ehd } }
- \tex_endinput:D
- }
-% \end{macrocode}
-%
-% The order of the backend code here is such that we get somewhat logical
-% outcomes in terms of code sharing whilst keeping things readable. (Trying to
-% mix all of the code by concept is almost unmanageable.) The key parts which
-% are shared are
-% \begin{itemize}
-% \item Color support is either \texttt{dvips}-like or \LuaTeX{}/pdfTeX{}-like.
-% \item \LuaTeX{}/pdfTeX{} and \texttt{dvipdfmx}/\XeTeX{} share drawing routines.
-% \item \XeTeX{} is the same as \texttt{dvipdfmx} other than image size
-% extraction so takes most of the same code.
-% \end{itemize}
-%
-% \begin{macro}
-% {
-% \__kernel_backend_literal:e,
-% \__kernel_backend_literal:n
-% }
-% The one shared function for all backends is access to the basic
-% \tn{special} primitive: it has slightly odd expansion behaviour
-% so a wrapper is provided.
-% \begin{macrocode}
-\cs_new_eq:NN \__kernel_backend_literal:e \tex_special:D
-\cs_new_protected:Npn \__kernel_backend_literal:n #1
- { \__kernel_backend_literal:e { \exp_not:n {#1} } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\__kernel_backend_first_shipout:n}
-% We need to write at first shipout in a few places. As we want to use the
-% most up-to-date method,
-% \begin{macrocode}
-\cs_if_exist:NTF \@ifl@t@r
- {
- \@ifl@t@r \fmtversion { 2020-10-01 }
- {
- \cs_new_protected:Npn \__kernel_backend_first_shipout:n #1
- { \hook_gput_code:nnn { shipout / firstpage } { l3backend } {#1} }
- }
- { \cs_new_eq:NN \__kernel_backend_first_shipout:n \AtBeginDvi }
- }
- { \cs_new_eq:NN \__kernel_backend_first_shipout:n \use:n }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{\texttt{dvips} backend}
-%
-% \begin{macrocode}
-%<*dvips>
-% \end{macrocode}
-%
-% \begin{macro}
-% {\__kernel_backend_literal_postscript:n, \__kernel_backend_literal_postscript:e}
-% Literal PostScript can be included using a few low-level formats. Here,
-% we use the form with no positioning: this is overall more convenient as
-% a wrapper. Note that this does require that where position is important,
-% an appropriate wrapper is included.
-% \begin{macrocode}
-\cs_new_protected:Npn \__kernel_backend_literal_postscript:n #1
- { \__kernel_backend_literal:n { ps:: #1 } }
-\cs_generate_variant:Nn \__kernel_backend_literal_postscript:n { e }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\__kernel_backend_postscript:n, \__kernel_backend_postscript:e}
-% PostScript data that does have positioning, and also applying
-% a shift to |SDict| (which is not done automatically by
-% |ps:| or |ps::|, in contrast to |!| or |"|).
-% \begin{macrocode}
-\cs_new_protected:Npn \__kernel_backend_postscript:n #1
- { \__kernel_backend_literal:n { ps: SDict ~ begin ~ #1 ~ end } }
-\cs_generate_variant:Nn \__kernel_backend_postscript:n { e }
-% \end{macrocode}
-% \end{macro}
-%
-% PostScript for the header: a small saving but makes the code clearer.
-% This is held until the start of shipout such that a document with no
-% actual output does not write anything.
-% \begin{macrocode}
-\bool_if:NT \g__kernel_backend_header_bool
- {
- \__kernel_backend_first_shipout:n
- { \__kernel_backend_literal:n { header = l3backend-dvips.pro } }
- }
-% \end{macrocode}
-%
-% \begin{macro}
-% {
-% \__kernel_backend_align_begin:,
-% \__kernel_backend_align_end:
-% }
-% In \texttt{dvips} there is no built-in saving of the current
-% position, and so some additional PostScript is required to set up the
-% transformation matrix and also to restore it afterwards. Notice the use
-% of the stack to save the current position \enquote{up front} and to
-% move back to it at the end of the process. Notice that the |[begin]|/^^A
-% |[end]| pair here mean that we can use a run of PostScript statements
-% in separate lines: not \emph{required} but does make the code and
-% output more clear.
-% \begin{macrocode}
-\cs_new_protected:Npn \__kernel_backend_align_begin:
- {
- \__kernel_backend_literal:n { ps::[begin] }
- \__kernel_backend_literal_postscript:n { currentpoint }
- \__kernel_backend_literal_postscript:n { currentpoint~translate }
- }
-\cs_new_protected:Npn \__kernel_backend_align_end:
- {
- \__kernel_backend_literal_postscript:n { neg~exch~neg~exch~translate }
- \__kernel_backend_literal:n { ps::[end] }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\__kernel_backend_scope_begin:, \__kernel_backend_scope_end:}
-% Saving/restoring scope for general operations needs to be done with
-% \texttt{dvips} positioning (try without to see this!). Thus we need the
-% |ps:| version of the special here. As only the graphics state is ever
-% altered within this pairing, we use the lower-cost |g|-versions.
-% \begin{macrocode}
-\cs_new_protected:Npn \__kernel_backend_scope_begin:
- { \__kernel_backend_literal:n { ps:gsave } }
-\cs_new_protected:Npn \__kernel_backend_scope_end:
- { \__kernel_backend_literal:n { ps:grestore } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvips>
-% \end{macrocode}
-%
-% \subsection{\LuaTeX{} and \pdfTeX{} backends}
-%
-% \begin{macrocode}
-%<*luatex|pdftex>
-% \end{macrocode}
-%
-% Both \LuaTeX{} and \pdfTeX{} write PDFs directly rather than via an
-% intermediate file. Although there are similarities, the move of \LuaTeX{}
-% to have more code in Lua means we create two independent files using
-% shared DocStrip code.
-%
-% \begin{macro}{\__kernel_backend_literal_pdf:n, \__kernel_backend_literal_pdf:e}
-% This is equivalent to \verb|\special{pdf:}| but the engine can
-% track it. Without the \texttt{direct} keyword everything is kept in
-% sync: the transformation matrix is set to the current point automatically.
-% Note that this is still inside the text (\texttt{BT} \dots \texttt{ET}
-% block).
-% \begin{macrocode}
-\cs_new_protected:Npn \__kernel_backend_literal_pdf:n #1
- {
-%<*luatex>
- \tex_pdfextension:D literal
-%</luatex>
-%<*pdftex>
- \tex_pdfliteral:D
-%</pdftex>
- { \exp_not:n {#1} }
- }
-\cs_generate_variant:Nn \__kernel_backend_literal_pdf:n { e }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\__kernel_backend_literal_page:n, \__kernel_backend_literal_page:e}
-% Page literals are pretty simple. To avoid an expansion, we write out
-% by hand.
-% \begin{macrocode}
-\cs_new_protected:Npn \__kernel_backend_literal_page:n #1
- {
-%<*luatex>
- \tex_pdfextension:D literal ~
-%</luatex>
-%<*pdftex>
- \tex_pdfliteral:D
-%</pdftex>
- page { \exp_not:n {#1} }
- }
-\cs_new_protected:Npn \__kernel_backend_literal_page:e #1
- {
-%<*luatex>
- \tex_pdfextension:D literal ~
-%</luatex>
-%<*pdftex>
- \tex_pdfliteral:D
-%</pdftex>
- page {#1}
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\__kernel_backend_scope_begin:, \__kernel_backend_scope_end:}
-% Higher-level interfaces for saving and restoring the graphic state.
-% \begin{macrocode}
-\cs_new_protected:Npn \__kernel_backend_scope_begin:
- {
-%<*luatex>
- \tex_pdfextension:D save \scan_stop:
-%</luatex>
-%<*pdftex>
- \tex_pdfsave:D
-%</pdftex>
- }
-\cs_new_protected:Npn \__kernel_backend_scope_end:
- {
-%<*luatex>
- \tex_pdfextension:D restore \scan_stop:
-%</luatex>
-%<*pdftex>
- \tex_pdfrestore:D
-%</pdftex>
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\__kernel_backend_matrix:n, \__kernel_backend_matrix:e}
-% Here the appropriate function is set up to insert an affine matrix
-% into the PDF. With \pdfTeX{} and \LuaTeX{} in direct PDF output mode there
-% is a primitive for this, which only needs the rotation/scaling/skew part.
-% \begin{macrocode}
-\cs_new_protected:Npn \__kernel_backend_matrix:n #1
- {
-%<*luatex>
- \tex_pdfextension:D setmatrix
-%</luatex>
-%<*pdftex>
- \tex_pdfsetmatrix:D
-%</pdftex>
- { \exp_not:n {#1} }
- }
-\cs_generate_variant:Nn \__kernel_backend_matrix:n { e }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</luatex|pdftex>
-% \end{macrocode}
-%
-% \subsection{\texttt{dvipdfmx} backend}
-%
-% \begin{macrocode}
-%<*dvipdfmx|xetex>
-% \end{macrocode}
-%
-% The \texttt{dvipdfmx} shares code with the PDF mode one (using the common
-% section to this file) but also with \XeTeX{}. The latter is close
-% to identical to \texttt{dvipdfmx} and so all of the code here is extracted
-% for both backends, with some \texttt{clean up} for \XeTeX{} as
-% required.
-%
-% \begin{macro}{\__kernel_backend_literal_pdf:n, \__kernel_backend_literal_pdf:e}
-% Undocumented but equivalent to \pdfTeX{}'s |literal| keyword. It's similar to
-% be not the same as the documented |contents| keyword as that adds a |q|/|Q|
-% pair.
-% \begin{macrocode}
-\cs_new_protected:Npn \__kernel_backend_literal_pdf:n #1
- { \__kernel_backend_literal:n { pdf:literal~ #1 } }
-\cs_generate_variant:Nn \__kernel_backend_literal_pdf:n { e }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\__kernel_backend_literal_page:n}
-% Whilst the manual says this is like |literal direct| in \pdfTeX{},
-% it closes the |BT| block!
-% \begin{macrocode}
-\cs_new_protected:Npn \__kernel_backend_literal_page:n #1
- { \__kernel_backend_literal:n { pdf:literal~direct~ #1 } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\__kernel_backend_scope_begin:, \__kernel_backend_scope_end:}
-% Scoping is done using the backend-specific specials. We use the versions
-% originally from \texttt{xdvidfpmx} (\texttt{x:}) as these are well-tested
-% \enquote{in the wild}.
-% \begin{macrocode}
-\cs_new_protected:Npn \__kernel_backend_scope_begin:
- { \__kernel_backend_literal:n { x:gsave } }
-\cs_new_protected:Npn \__kernel_backend_scope_end:
- { \__kernel_backend_literal:n { x:grestore } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvipdfmx|xetex>
-% \end{macrocode}
-%
-% \subsection{\texttt{dvisvgm} backend}
-%
-% \begin{macrocode}
-%<*dvisvgm>
-% \end{macrocode}
-%
-% \begin{macro}{\__kernel_backend_literal_svg:n, \__kernel_backend_literal_svg:e}
-% Unlike the other backends, the requirements for making SVG files mean
-% that we can't conveniently transform all operations to the current point.
-% That makes life a bit more tricky later as that needs to be accounted for.
-% A new line is added after each call to help to keep the output readable
-% for debugging.
-% \begin{macrocode}
-\cs_new_protected:Npn \__kernel_backend_literal_svg:n #1
- { \__kernel_backend_literal:n { dvisvgm:raw~ #1 { ?nl } } }
-\cs_generate_variant:Nn \__kernel_backend_literal_svg:n { e }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\g__kernel_backend_scope_int, \l__kernel_backend_scope_int}
-% In SVG, we need to track scope nesting as properties attach to scopes; that
-% requires a pair of \texttt{int} registers.
-% \begin{macrocode}
-\int_new:N \g__kernel_backend_scope_int
-\int_new:N \l__kernel_backend_scope_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\__kernel_backend_scope_begin:, \__kernel_backend_scope_end:}
-% \begin{macro}{\__kernel_backend_scope_begin:n, \__kernel_backend_scope_begin:e}
-% \begin{macro}{\__kernel_backend_scope:n, \__kernel_backend_scope:e}
-% In SVG, the need to attach concepts to a scope means we need to be sure we
-% will close all of the open scopes. That is easiest done if we only need
-% an outer \enquote{wrapper} \texttt{begin}/\texttt{end} pair, and within
-% that we apply operations as a simple scoped statements. To keep down the
-% non-productive groups, we also have a \texttt{begin} version that does take
-% an argument.
-% \begin{macrocode}
-\cs_new_protected:Npn \__kernel_backend_scope_begin:
- {
- \__kernel_backend_literal_svg:n { <g> }
- \int_set_eq:NN
- \l__kernel_backend_scope_int
- \g__kernel_backend_scope_int
- \group_begin:
- \int_gset:Nn \g__kernel_backend_scope_int { 1 }
- }
-\cs_new_protected:Npn \__kernel_backend_scope_end:
- {
- \prg_replicate:nn
- { \g__kernel_backend_scope_int }
- { \__kernel_backend_literal_svg:n { </g> } }
- \group_end:
- \int_gset_eq:NN
- \g__kernel_backend_scope_int
- \l__kernel_backend_scope_int
- }
-\cs_new_protected:Npn \__kernel_backend_scope_begin:n #1
- {
- \__kernel_backend_literal_svg:n { <g ~ #1 > }
- \int_set_eq:NN
- \l__kernel_backend_scope_int
- \g__kernel_backend_scope_int
- \group_begin:
- \int_gset:Nn \g__kernel_backend_scope_int { 1 }
- }
-\cs_generate_variant:Nn \__kernel_backend_scope_begin:n { e }
-\cs_new_protected:Npn \__kernel_backend_scope:n #1
- {
- \__kernel_backend_literal_svg:n { <g ~ #1 > }
- \int_gincr:N \g__kernel_backend_scope_int
- }
-\cs_generate_variant:Nn \__kernel_backend_scope:n { e }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvisvgm>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3backend/l3backend-box.dtx b/macros/latex/contrib/l3backend/l3backend-box.dtx
deleted file mode 100644
index 3fc3243c42..0000000000
--- a/macros/latex/contrib/l3backend/l3backend-box.dtx
+++ /dev/null
@@ -1,470 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3backend-box.dtx
-%
-% Copyright (C) 2019-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3backend bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3backend-box} package\\ Backend box support^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3backend-box} implementation}
-%
-% \begin{macrocode}
-%<*package>
-%<@@=box>
-% \end{macrocode}
-%
-% \subsection{\texttt{dvips} backend}
-%
-% \begin{macrocode}
-%<*dvips>
-% \end{macrocode}
-%
-% \begin{macro}{\@@_backend_clip:N}
-% The \texttt{dvips} backend scales all absolute dimensions based on the
-% output resolution selected and any \TeX{} magnification. Thus for any
-% operation involving absolute lengths there is a correction to make. See
-% \texttt{normalscale} from \texttt{special.pro} for the variables, noting
-% that here everything is saved on the stack rather than as a separate
-% variable. Once all of that is done, the actual clipping is trivial.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_clip:N #1
- {
- \__kernel_backend_scope_begin:
- \__kernel_backend_align_begin:
- \__kernel_backend_literal_postscript:n { matrix~currentmatrix }
- \__kernel_backend_literal_postscript:n
- { Resolution~72~div~VResolution~72~div~scale }
- \__kernel_backend_literal_postscript:n { DVImag~dup~scale }
- \__kernel_backend_literal_postscript:e
- {
- 0 ~
- \dim_to_decimal_in_bp:n { \box_dp:N #1 } ~
- \dim_to_decimal_in_bp:n { \box_wd:N #1 } ~
- \dim_to_decimal_in_bp:n { -\box_ht:N #1 - \box_dp:N #1 } ~
- rectclip
- }
- \__kernel_backend_literal_postscript:n { setmatrix }
- \__kernel_backend_align_end:
- \hbox_overlap_right:n { \box_use:N #1 }
- \__kernel_backend_scope_end:
- \skip_horizontal:n { \box_wd:N #1 }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_rotate:Nn}
-% \begin{macro}{\@@_backend_rotate_aux:Nn}
-% Rotating using \texttt{dvips} does not require that the box dimensions
-% are altered and has a very convenient built-in operation. Zero rotation
-% must be written as |0| not |-0| so there is a quick test.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_rotate:Nn #1#2
- { \exp_args:NNf \@@_backend_rotate_aux:Nn #1 { \fp_eval:n {#2} } }
-\cs_new_protected:Npn \@@_backend_rotate_aux:Nn #1#2
- {
- \__kernel_backend_scope_begin:
- \__kernel_backend_align_begin:
- \__kernel_backend_literal_postscript:e
- {
- \fp_compare:nNnTF {#2} = \c_zero_fp
- { 0 }
- { \fp_eval:n { round ( -(#2) , 5 ) } } ~
- rotate
- }
- \__kernel_backend_align_end:
- \box_use:N #1
- \__kernel_backend_scope_end:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_scale:Nnn}
-% The \texttt{dvips} backend once again has a dedicated operation we can
-% use here.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_scale:Nnn #1#2#3
- {
- \__kernel_backend_scope_begin:
- \__kernel_backend_align_begin:
- \__kernel_backend_literal_postscript:e
- {
- \fp_eval:n { round ( #2 , 5 ) } ~
- \fp_eval:n { round ( #3 , 5 ) } ~
- scale
- }
- \__kernel_backend_align_end:
- \hbox_overlap_right:n { \box_use:N #1 }
- \__kernel_backend_scope_end:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvips>
-% \end{macrocode}
-%
-% \subsection{\LuaTeX{} and \pdfTeX{} backends}
-%
-% \begin{macrocode}
-%<*luatex|pdftex>
-% \end{macrocode}
-%
-% \begin{macro}{\@@_backend_clip:N}
-% The general method is to save the current location, define a clipping path
-% equivalent to the bounding box, then insert the content at the current
-% position and in a zero width box. The \enquote{real} width is then made up
-% using a horizontal skip before tidying up. There are other approaches that
-% can be taken (for example using XForm objects), but the logic here shares
-% as much code as possible and uses the same conversions (and so same
-% rounding errors) in all cases.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_clip:N #1
- {
- \__kernel_backend_scope_begin:
- \__kernel_backend_literal_pdf:e
- {
- 0~
- \dim_to_decimal_in_bp:n { -\box_dp:N #1 } ~
- \dim_to_decimal_in_bp:n { \box_wd:N #1 } ~
- \dim_to_decimal_in_bp:n { \box_ht:N #1 + \box_dp:N #1 } ~
- re~W~n
- }
- \hbox_overlap_right:n { \box_use:N #1 }
- \__kernel_backend_scope_end:
- \skip_horizontal:n { \box_wd:N #1 }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_rotate:Nn}
-% \begin{macro}{\@@_backend_rotate_aux:Nn}
-% \begin{variable}{\l_@@_backend_cos_fp, \l_@@_backend_sin_fp}
-% Rotations are set using an affine transformation matrix which therefore
-% requires sine/cosine values not the angle itself. We store the rounded
-% values to avoid rounding twice. There are also a couple of comparisons to
-% ensure that |-0| is not written to the output, as this avoids any issues
-% with problematic display programs. Note that numbers are compared to~$0$
-% after rounding.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_rotate:Nn #1#2
- { \exp_args:NNf \@@_backend_rotate_aux:Nn #1 { \fp_eval:n {#2} } }
-\cs_new_protected:Npn \@@_backend_rotate_aux:Nn #1#2
- {
- \__kernel_backend_scope_begin:
- \box_set_wd:Nn #1 { 0pt }
- \fp_set:Nn \l_@@_backend_cos_fp { round ( cosd ( #2 ) , 5 ) }
- \fp_compare:nNnT \l_@@_backend_cos_fp = \c_zero_fp
- { \fp_zero:N \l_@@_backend_cos_fp }
- \fp_set:Nn \l_@@_backend_sin_fp { round ( sind ( #2 ) , 5 ) }
- \__kernel_backend_matrix:e
- {
- \fp_use:N \l_@@_backend_cos_fp \c_space_tl
- \fp_compare:nNnTF \l_@@_backend_sin_fp = \c_zero_fp
- { 0~0 }
- {
- \fp_use:N \l_@@_backend_sin_fp
- \c_space_tl
- \fp_eval:n { -\l_@@_backend_sin_fp }
- }
- \c_space_tl
- \fp_use:N \l_@@_backend_cos_fp
- }
- \box_use:N #1
- \__kernel_backend_scope_end:
- }
-\fp_new:N \l_@@_backend_cos_fp
-\fp_new:N \l_@@_backend_sin_fp
-% \end{macrocode}
-% \end{variable}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_scale:Nnn}
-% The same idea as for rotation but without the complexity of signs and
-% cosines.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_scale:Nnn #1#2#3
- {
- \__kernel_backend_scope_begin:
- \__kernel_backend_matrix:e
- {
- \fp_eval:n { round ( #2 , 5 ) } ~
- 0~0~
- \fp_eval:n { round ( #3 , 5 ) }
- }
- \hbox_overlap_right:n { \box_use:N #1 }
- \__kernel_backend_scope_end:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</luatex|pdftex>
-% \end{macrocode}
-%
-% \subsection{\texttt{dvipdfmx}/\XeTeX{} backend}
-%
-% \begin{macrocode}
-%<*dvipdfmx|xetex>
-% \end{macrocode}
-%
-% \begin{macro}{\@@_backend_clip:N}
-% The code here is identical to that for \LuaTeX{}/\pdfTeX{}: unlike rotation and
-% scaling, there is no higher-level support in the backend for clipping.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_clip:N #1
- {
- \__kernel_backend_scope_begin:
- \__kernel_backend_literal_pdf:e
- {
- 0~
- \dim_to_decimal_in_bp:n { -\box_dp:N #1 } ~
- \dim_to_decimal_in_bp:n { \box_wd:N #1 } ~
- \dim_to_decimal_in_bp:n { \box_ht:N #1 + \box_dp:N #1 } ~
- re~W~n
- }
- \hbox_overlap_right:n { \box_use:N #1 }
- \__kernel_backend_scope_end:
- \skip_horizontal:n { \box_wd:N #1 }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_rotate:Nn}
-% \begin{macro}{\@@_backend_rotate_aux:Nn}
-% Rotating in \texttt{dvipdmfx}/\XeTeX{} can be implemented using either PDF or
-% backend-specific code. The former approach however is not \enquote{aware}
-% of the content of boxes: this means that any embedded links would not be
-% adjusted by the rotation. As such, the backend-native approach is preferred:
-% the code therefore is similar (though not identical) to the \texttt{dvips}
-% version (notice the rotation angle here is positive). As for
-% \texttt{dvips}, zero rotation is written as |0| not |-0|.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_rotate:Nn #1#2
- { \exp_args:NNf \@@_backend_rotate_aux:Nn #1 { \fp_eval:n {#2} } }
-\cs_new_protected:Npn \@@_backend_rotate_aux:Nn #1#2
- {
- \__kernel_backend_scope_begin:
- \__kernel_backend_literal:e
- {
- x:rotate~
- \fp_compare:nNnTF {#2} = \c_zero_fp
- { 0 }
- { \fp_eval:n { round ( #2 , 5 ) } }
- }
- \box_use:N #1
- \__kernel_backend_scope_end:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_scale:Nnn}
-% Much the same idea for scaling: use the higher-level backend operation to allow
-% for box content.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_scale:Nnn #1#2#3
- {
- \__kernel_backend_scope_begin:
- \__kernel_backend_literal:e
- {
- x:scale~
- \fp_eval:n { round ( #2 , 5 ) } ~
- \fp_eval:n { round ( #3 , 5 ) }
- }
- \hbox_overlap_right:n { \box_use:N #1 }
- \__kernel_backend_scope_end:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvipdfmx|xetex>
-% \end{macrocode}
-%
-% \subsection{\texttt{dvisvgm} backend}
-%
-% \begin{macrocode}
-%<*dvisvgm>
-% \end{macrocode}
-%
-% \begin{macro}{\@@_backend_clip:N}
-% \begin{variable}{\g__kernel_clip_path_int}
-% Clipping in SVG is more involved than with other backends. The first issue
-% is that the clipping path must be defined separately from where it is used,
-% so we need to track how many paths have applied. The naming here uses
-% \texttt{l3cp} as the namespace with a number following. Rather than use
-% a rectangular operation, we define the path manually as this allows it to
-% have a depth: easier than the alternative approach of shifting content
-% up and down using scopes to allow for the depth of the \TeX{} box and
-% keep the reference point the same!
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_clip:N #1
- {
- \int_gincr:N \g__kernel_clip_path_int
- \__kernel_backend_literal_svg:e
- { < clipPath~id = " l3cp \int_use:N \g__kernel_clip_path_int " > }
- \__kernel_backend_literal_svg:e
- {
- <
- path ~ d =
- "
- M ~ 0 ~
- \dim_to_decimal:n { -\box_dp:N #1 } ~
- L ~ \dim_to_decimal:n { \box_wd:N #1 } ~
- \dim_to_decimal:n { -\box_dp:N #1 } ~
- L ~ \dim_to_decimal:n { \box_wd:N #1 } ~
- \dim_to_decimal:n { \box_ht:N #1 + \box_dp:N #1 } ~
- L ~ 0 ~
- \dim_to_decimal:n { \box_ht:N #1 + \box_dp:N #1 } ~
- Z
- "
- />
- }
- \__kernel_backend_literal_svg:n
- { < /clipPath > }
-% \end{macrocode}
-% In general the SVG set up does not try to transform coordinates to the
-% current point. For clipping we need to do that, so have a transformation
-% here to get us to the right place, and a matching one just before the
-% \TeX{} box is inserted to get things back on track. The clip path needs to
-% come between those two such that if lines up with the current point, as
-% does the \TeX{} box.
-% \begin{macrocode}
- \__kernel_backend_scope_begin:n
- {
- transform =
- "
- translate ( { ?x } , { ?y } ) ~
- scale ( 1 , -1 )
- "
- }
- \__kernel_backend_scope:e
- {
- clip-path =
- "url ( \c_hash_str l3cp \int_use:N \g__kernel_clip_path_int ) "
- }
- \__kernel_backend_scope:n
- {
- transform =
- "
- scale ( -1 , 1 ) ~
- translate ( { ?x } , { ?y } ) ~
- scale ( -1 , -1 )
- "
- }
- \box_use:N #1
- \__kernel_backend_scope_end:
- }
-\int_new:N \g__kernel_clip_path_int
-% \end{macrocode}
-% \end{variable}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_rotate:Nn}
-% Rotation has a dedicated operation which includes a centre-of-rotation
-% optional pair. That can be picked up from the backend syntax, so there is
-% no need to worry about the transformation matrix.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_rotate:Nn #1#2
- {
- \__kernel_backend_scope_begin:e
- {
- transform =
- "
- rotate
- ( \fp_eval:n { round ( -(#2) , 5 ) } , ~ { ?x } , ~ { ?y } )
- "
- }
- \box_use:N #1
- \__kernel_backend_scope_end:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_scale:Nnn}
-% In contrast to rotation, we have to account for the current position in this
-% case. That is done using a couple of translations in addition to the scaling
-% (which is therefore done backward with a flip).
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_scale:Nnn #1#2#3
- {
- \__kernel_backend_scope_begin:e
- {
- transform =
- "
- translate ( { ?x } , { ?y } ) ~
- scale
- (
- \fp_eval:n { round ( -#2 , 5 ) } ,
- \fp_eval:n { round ( -#3 , 5 ) }
- ) ~
- translate ( { ?x } , { ?y } ) ~
- scale ( -1 )
- "
- }
- \hbox_overlap_right:n { \box_use:N #1 }
- \__kernel_backend_scope_end:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvisvgm>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3backend/l3backend-code.pdf b/macros/latex/contrib/l3backend/l3backend-code.pdf
deleted file mode 100644
index 9affc7d856..0000000000
--- a/macros/latex/contrib/l3backend/l3backend-code.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/l3backend/l3backend-code.tex b/macros/latex/contrib/l3backend/l3backend-code.tex
deleted file mode 100644
index df0dd0ea8c..0000000000
--- a/macros/latex/contrib/l3backend/l3backend-code.tex
+++ /dev/null
@@ -1,63 +0,0 @@
-\iffalse meta-comment
-
-File: l3backend-code.tex
-
-Copyright (C) 2019,2021 The LaTeX Project
-
-It may be distributed and/or modified under the conditions of the
-LaTeX Project Public License (LPPL), either version 1.3c of this
-license or (at your option) any later version. The latest version
-of this license is in the file
-
- https://www.latex-project.org/lppl.txt
-
-This file is part of the "l3backend bundle" (The Work in LPPL)
-and all files in that bundle must be distributed together.
-
-The released version of this bundle is available from CTAN.
-
------------------------------------------------------------------------
-
-The development version of the bundle can be found at
-
- https://github.com/latex3/latex3
-
-for those people who are interested.
-
-\fi
-
-\documentclass[full,kernel]{l3doc}
-
-\begin{document}
-
-\makeatletter
-\let\DelayPrintIndex\PrintIndex
-\let\PrintIndex\@empty
-\makeatother
-
-\ExplSyntaxOn
-\clist_gput_right:Nn \g_docinput_clist
- {
- l3backend-basics.dtx ,
- l3backend-box.dtx ,
- l3backend-color.dtx ,
- l3backend-draw.dtx ,
- l3backend-graphics.dtx ,
- l3backend-pdf.dtx ,
- l3backend-opacity.dtx ,
- l3backend-header.dtx
- }
-\ExplSyntaxOff
-
-\part{Implementation}
-
-\def\maketitle{}
-\EnableImplementation
-\DisableDocumentation
-\DocInputAgain
-
-\clearpage
-
-\DelayPrintIndex
-
-\end{document}
diff --git a/macros/latex/contrib/l3backend/l3backend-color.dtx b/macros/latex/contrib/l3backend/l3backend-color.dtx
deleted file mode 100644
index eaa89add8c..0000000000
--- a/macros/latex/contrib/l3backend/l3backend-color.dtx
+++ /dev/null
@@ -1,1356 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3backend-color.dtx
-%
-% Copyright (C) 2019-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3backend bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3backend-color} module\\ Backend color support^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3backend-color} implementation}
-%
-% \begin{macrocode}
-%<*package>
-%<@@=color>
-% \end{macrocode}
-%
-% Color support is split into parts: collecting data from \LaTeXe{}, the color
-% stack, general color, separations, and color for drawings. We have different
-% approaches in each backend, and have some choices to make about
-% \texttt{dvipdfmx}/\XeTeX{} in particular. Whilst it is in some ways
-% convenient to use the same approach in multiple backends, the fact that
-% \texttt{dvipdfmx}/\XeTeX{} is PDF-based means it (largely) sticks closer to
-% direct PDF output.
-%
-% \subsection{The color stack}
-%
-% For PDF-based engines, we have a color stack available inside the specials.
-% This is used for concepts beyond color itself: it is needed to manage the
-% graphics state generally. Although \texttt{dvipdfmx}/\XeTeX{} have multiple
-% color stacks in recent releases, the way these interact with the original
-% single stack and with other graphic state operations means that currently it
-% is not feasible to use the multiple stacks.
-%
-% \subsubsection{Common code}
-%
-% \begin{macrocode}
-%<*luatex|pdftex>
-% \end{macrocode}
-%
-% \begin{variable}{\l_@@_backend_stack_int}
-% For tracking which stack is in use where multiple stacks are used:
-% currently just \pdfTeX{}/\LuaTeX{} but at some future stage may also cover
-% \texttt{dvipdfmx}/\XeTeX{}.
-% \begin{macrocode}
-\int_new:N \l_@@_backend_stack_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macrocode}
-%</luatex|pdftex>
-% \end{macrocode}
-%
-% \subsubsection{\LuaTeX and \pdfTeX{}}
-%
-% \begin{macrocode}
-%<*luatex|pdftex>
-% \end{macrocode}
-%
-% \begin{macro}{\__kernel_color_backend_stack_init:Nnn}
-% \begin{macrocode}
-\cs_new_protected:Npn \__kernel_color_backend_stack_init:Nnn #1#2#3
- {
- \int_const:Nn #1
- {
-%<*luatex>
- \tex_pdffeedback:D colorstackinit ~
-%</luatex>
-%<*pdftex>
- \tex_pdfcolorstackinit:D
-%</pdftex>
- \tl_if_blank:nF {#2} { #2 ~ }
- {#3}
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\__kernel_color_backend_stack_push:nn}
-% \begin{macro}{\__kernel_color_backend_stack_pop:n}
-% \begin{macrocode}
-\cs_new_protected:Npn \__kernel_color_backend_stack_push:nn #1#2
- {
-%<*luatex>
- \tex_pdfextension:D colorstack ~
-%</luatex>
-%<*pdftex>
- \tex_pdfcolorstack:D
-%</pdftex>
- \int_eval:n {#1} ~ push ~ {#2}
- }
-\cs_new_protected:Npn \__kernel_color_backend_stack_pop:n #1
- {
-%<*luatex>
- \tex_pdfextension:D colorstack ~
-%</luatex>
-%<*pdftex>
- \tex_pdfcolorstack:D
-%</pdftex>
- \int_eval:n {#1} ~ pop \scan_stop:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macrocode}
-%</luatex|pdftex>
-% \end{macrocode}
-%
-% \subsection{General color}
-%
-% \subsubsection{\texttt{dvips}-style}
-%
-% \begin{macrocode}
-%<*dvips|dvisvgm>
-% \end{macrocode}
-%
-% \begin{macro}
-% {
-% \@@_backend_select_cmyk:n ,
-% \@@_backend_select_gray:n ,
-% \@@_backend_select_named:n ,
-% \@@_backend_select_rgb:n ,
-% \@@_backend_select:n
-% }
-% \begin{macro}{\@@_backend_reset:}
-% Push the data to the stack. In the case of \texttt{dvips} also saves the
-% drawing color in raw PostScript. The |spot| model is for handling data
-% in classical format.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_select_cmyk:n #1
- { \@@_backend_select:n { cmyk ~ #1 } }
-\cs_new_protected:Npn \@@_backend_select_gray:n #1
- { \@@_backend_select:n { gray ~ #1 } }
-\cs_new_protected:Npn \@@_backend_select_named:n #1
- { \@@_backend_select:n { ~ #1 } }
-\cs_new_protected:Npn \@@_backend_select_rgb:n #1
- { \@@_backend_select:n { rgb ~ #1 } }
-\cs_new_protected:Npn \@@_backend_select:n #1
- {
- \__kernel_backend_literal:n { color~push~ #1 }
-%<*dvips>
- \__kernel_backend_postscript:n { /color.sc ~ { } ~ def }
-%</dvips>
- }
-\cs_new_protected:Npn \@@_backend_reset:
- { \__kernel_backend_literal:n { color~pop } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvips|dvisvgm>
-% \end{macrocode}
-%
-% \subsubsection{\LuaTeX{} and \pdfTeX{}}
-%
-% \begin{macrocode}
-%<*luatex|pdftex>
-% \end{macrocode}
-%
-% \begin{variable}{\l_@@_backend_fill_tl, \l_@@_backend_stroke_tl}
-% \begin{macrocode}
-\tl_new:N \l_@@_backend_fill_tl
-\tl_new:N \l_@@_backend_stroke_tl
-\tl_set:Nn \l_@@_backend_fill_tl { 0 ~ g }
-\tl_set:Nn \l_@@_backend_stroke_tl { 0 ~ G }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}
-% {
-% \@@_backend_select_cmyk:n ,
-% \@@_backend_select_gray:n ,
-% \@@_backend_select_rgb:n
-% }
-% \begin{macro}{\@@_backend_select:nn}
-% \begin{macro}{\@@_backend_reset:}
-% Store the values then pass to the stack.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_select_cmyk:n #1
- { \@@_backend_select:nn { #1 ~ k } { #1 ~ K } }
-\cs_new_protected:Npn \@@_backend_select_gray:n #1
- { \@@_backend_select:nn { #1 ~ g } { #1 ~ G } }
-\cs_new_protected:Npn \@@_backend_select_rgb:n #1
- { \@@_backend_select:nn { #1 ~ rg } { #1 ~ RG } }
-\cs_new_protected:Npn \@@_backend_select:nn #1#2
- {
- \tl_set:Nn \l_@@_backend_fill_tl {#1}
- \tl_set:Nn \l_@@_backend_stroke_tl {#2}
- \__kernel_color_backend_stack_push:nn \l_@@_backend_stack_int { #1 ~ #2 }
- }
-\cs_new_protected:Npn \@@_backend_reset:
- { \__kernel_color_backend_stack_pop:n \l_@@_backend_stack_int }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macrocode}
-%</luatex|pdftex>
-% \end{macrocode}
-%
-% \subsubsection{\texttt{dvipmdfx}/\XeTeX{}}
-%
-% These backends have the most possible approaches: it recognises both
-% \texttt{dvips}-based color specials and its own format, plus one can
-% include PDF statements directly. Recent releases also have a color stack
-% approach similar to \pdfTeX{}. Of the stack methods, the dedicated
-% the most versatile is the latter as it can cover all of the use cases
-% we have. However, at present this interacts problematically with any color
-% on the original stack. We therefore stick to a single-stack approach here.
-%
-% \begin{macrocode}
-%<*dvipdfmx|xetex>
-% \end{macrocode}
-%
-% \begin{macro}
-% {
-% \@@_backend_select:n ,
-% \@@_backend_select_cmyk:n ,
-% \@@_backend_select_gray:n ,
-% \@@_backend_select_rgb:n
-% }
-% \begin{macro}{\@@_backend_reset:}
-% Using the single stack is relatively easy as there is only one route.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_select:n #1
- { \__kernel_backend_literal:n { pdf : bc ~ [ #1 ] } }
-\cs_new_eq:NN \@@_backend_select_cmyk:n \@@_backend_select:n
-\cs_new_eq:NN \@@_backend_select_gray:n \@@_backend_select:n
-\cs_new_eq:NN \@@_backend_select_rgb:n \@@_backend_select:n
-\cs_new_protected:Npn \@@_backend_reset:
- { \__kernel_backend_literal:n { pdf : ec } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_select_named:n}
-% For classical named colors, the only value we should get is |Black|.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_select_named:n #1
- {
- \str_if_eq:nnTF {#1} { Black }
- { \@@_backend_select_gray:n { 0 } }
- { \msg_error:nnn { color } { unknown-named-color } {#1} }
- }
-\msg_new:nnn { color } { unknown-named-color }
- { Named~color~'#1'~is~not~known. }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvipdfmx|xetex>
-% \end{macrocode}
-%
-% \subsection{Separations}
-%
-% Here, life gets interesting and we need essentially one approach per
-% backend.
-%
-% \begin{macrocode}
-%<*dvipdfmx|luatex|pdftex|xetex|dvips>
-% \end{macrocode}
-%
-% But we start with some functionality needed for both PostScript and
-% PDF based backends.
-%
-% \begin{variable}{\g_@@_backend_colorant_prop}
-% \begin{macrocode}
-\prop_new:N \g_@@_backend_colorant_prop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[EXP]{\@@_backend_devicen_colorants:n}
-% \begin{macro}[EXP]{\@@_backend_devicen_colorants:w}
-% \begin{macrocode}
-\cs_new:Npe \@@_backend_devicen_colorants:n #1
- {
- \exp_not:N \tl_if_blank:nF {#1}
- {
- \c_space_tl
- << ~
- /Colorants ~
- << ~
- \exp_not:N \@@_backend_devicen_colorants:w #1 ~
- \exp_not:N \q_recursion_tail \c_space_tl
- \exp_not:N \q_recursion_stop
- >> ~
- >>
- }
- }
-\cs_new:Npn \@@_backend_devicen_colorants:w #1 ~
- {
- \quark_if_recursion_tail_stop:n {#1}
- \prop_if_in:NnT \g_@@_backend_colorant_prop {#1}
- {
- #1 ~
- \prop_item:Nn \g_@@_backend_colorant_prop {#1} ~
- }
- \@@_backend_devicen_colorants:w
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvipdfmx|luatex|pdftex|xetex|dvips>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*dvips>
-% \end{macrocode}
-%
-% \begin{macro}{\@@_backend_select_separation:nn, \@@_backend_select_devicen:nn}
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_select_separation:nn #1#2
- { \@@_backend_select:n { separation ~ #1 ~ #2 } }
-\cs_new_eq:NN \@@_backend_select_devicen:nn \@@_backend_select_separation:nn
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_select_iccbased:nn}
-% No support.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_select_iccbased:nn #1#2 { }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \@@_backend_separation_init:nnnnn,
-% \@@_backend_separation_init:neenn
-% }
-% \begin{macro}
-% {\@@_backend_separation_init_aux:nnnnnn}
-% \begin{macro}[EXP]
-% {
-% \@@_backend_separation_init_/DeviceCMYK:nnn ,
-% \@@_backend_separation_init_/DeviceGray:nnn ,
-% \@@_backend_separation_init_/DeviceRGB:nnn
-% }
-% \begin{macro}[EXP]{\@@_backend_separation_init_Device:Nn}
-% \begin{macro}[EXP]{\@@_backend_separation_init:nnn}
-% \begin{macro}[EXP]{\@@_backend_separation_init_count:n}
-% \begin{macro}[EXP]{\@@_backend_separation_init_count:w}
-% \begin{macro}[EXP]{\@@_backend_separation_init:nnnn}
-% \begin{macro}[EXP]{\@@_backend_separation_init:w}
-% \begin{macro}[EXP]{\@@_backend_separation_init:n}
-% \begin{macro}[EXP]{\@@_backend_separation_init:nw}
-% \begin{macro}{\@@_backend_separation_init_CIELAB:nnn}
-% Initialising here means creating a small header set up plus massaging
-% some data. This comes about as we have to deal with PDF-focussed data,
-% which makes most sense \enquote{higher-up}. The approach is based on
-% ideas from \url{https://tex.stackexchange.com/q/560093} plus using
-% the PostScript manual for other aspects.
-% \begin{macrocode}
-\cs_new_protected:Npe \@@_backend_separation_init:nnnnn #1#2#3#4#5
- {
- \bool_if:NT \g__kernel_backend_header_bool
- {
- \exp_not:N \exp_args:Ne \__kernel_backend_first_shipout:n
- {
- \exp_not:N \@@_backend_separation_init_aux:nnnnnn
- { \exp_not:N \int_use:N \g_@@_model_int }
- {#1} {#2} {#3} {#4} {#5}
- }
- \prop_gput:Nee \exp_not:N \g_@@_backend_colorant_prop
- { / \exp_not:N \str_convert_pdfname:n {#1} }
- {
- << ~
- /setcolorspace ~ {} ~
- >> ~ begin ~
- color \exp_not:N \int_use:N \g_@@_model_int \c_space_tl
- end
- }
- }
- }
-\cs_generate_variant:Nn \@@_backend_separation_init:nnnnn { nee }
-\cs_new_protected:Npn \@@_backend_separation_init_aux:nnnnnn #1#2#3#4#5#6
- {
- \__kernel_backend_literal:e
- {
- !
- TeXDict ~ begin ~
- /color #1
- {
- [ ~
- /Separation ~ ( \str_convert_pdfname:n {#2} ) ~
- [ ~ #3 ~ ] ~
- {
- \cs_if_exist_use:cF { @@_backend_separation_init_ #3 :nnn }
- { \@@_backend_separation_init:nnn }
- {#4} {#5} {#6}
- }
- ] ~ setcolorspace
- } ~ def ~
- end
- }
- }
-\cs_new:cpn { @@_backend_separation_init_ /DeviceCMYK :nnn } #1#2#3
- { \@@_backend_separation_init_Device:Nn 4 {#3} }
-\cs_new:cpn { @@_backend_separation_init_ /DeviceGray :nnn } #1#2#3
- { \@@_backend_separation_init_Device:Nn 1 {#3} }
-\cs_new:cpn { @@_backend_separation_init_ /DeviceRGB :nnn } #1#2#3
- { \@@_backend_separation_init_Device:Nn 2 {#3} }
-\cs_new:Npn \@@_backend_separation_init_Device:Nn #1#2
- {
- #2 ~
- \prg_replicate:nn {#1}
- { #1 ~ index ~ mul ~ #1 ~ 1 ~ roll ~ }
- \int_eval:n { #1 + 1 } ~ -1 ~ roll ~ pop
- }
-% \end{macrocode}
-% For the generic case, we cannot use |/FunctionType 2| unfortunately, so
-% we have to code that idea up in PostScript. Here, we will therefore assume
-% that a range is \emph{always} given. First, we count values in each argument:
-% at the backend level, we can assume there are always well-behaved with
-% spaces present.
-% \begin{macrocode}
-\cs_new:Npn \@@_backend_separation_init:nnn #1#2#3
- {
- \exp_args:Ne \@@_backend_separation_init:nnnn
- { \@@_backend_separation_init_count:n {#2} }
- {#1} {#2} {#3}
- }
-\cs_new:Npn \@@_backend_separation_init_count:n #1
- { \int_eval:n { 0 \@@_backend_separation_init_count:w #1 ~ \s_@@_stop } }
-\cs_new:Npn \@@_backend_separation_init_count:w #1 ~ #2 \s_@@_stop
- {
- +1
- \tl_if_blank:nF {#2}
- { \@@_backend_separation_init_count:w #2 \s_@@_stop }
- }
-% \end{macrocode}
-% Now we implement the algorithm. In the terms in the PostScript manual,
-% we have $\mathbf{N} = 1$ and $\mathbf{Domain} = [0~1]$, with
-% $\mathbf{Range}$ as |#2|, $\mathbf{C0}$ as |#3| and $\mathbf{C1}$
-% as |#4|, with the number of output components in |#1|. So all we have
-% to do is implement $y_{i} = \mathbf{C0}_{i} + x(\mathbf{C1}_{i} -
-% \mathbf{C0}_{i})$ with lots of stack manipulation, then check the
-% ranges. That's done by adding everything to the stack first, then using
-% the fact we know all of the offsets. As manipulating the stack is tricky,
-% we start by re-formatting the $\mathbf{C0}$ and $\mathbf{C1}$ arrays to
-% be interleaved, and add a \texttt{0} to each pair: this is used
-% to keep the stack of constant length while we are doing the first pass of
-% mathematics. We then working through that list, calculating from the
-% last to the first value before tidying up by removing all of the input
-% values. We do that by first copying all of the final $y$ values to the
-% end of the stack, then rolling everything so we can pop the now-unneeded
-% material.
-% \begin{macrocode}
-\cs_new:Npn \@@_backend_separation_init:nnnn #1#2#3#4
- {
- \@@_backend_separation_init:w #3 ~ \s_@@_stop #4 ~ \s_@@_stop
- \prg_replicate:nn {#1}
- {
- pop ~ 1 ~ index ~ neg ~ 1 ~ index ~ add ~
- \int_eval:n { 3 * #1 } ~ index ~ mul ~
- 2 ~ index ~ add ~
- \int_eval:n { 3 * #1 } ~ #1 ~ roll ~
- }
- \int_step_function:nnnN {#1} { -1 } { 1 }
- \@@_backend_separation_init:n
- \int_eval:n { 4 * #1 + 1 } ~ #1 ~ roll ~
- \prg_replicate:nn { 3 * #1 + 1 } { pop ~ }
- \tl_if_blank:nF {#2}
- { \@@_backend_separation_init:nw {#1} #2 ~ \s_@@_stop }
- }
-\cs_new:Npn \@@_backend_separation_init:w
- #1 ~ #2 \s_@@_stop #3 ~ #4 \s_@@_stop
- {
- #1 ~ #3 ~ 0 ~
- \tl_if_blank:nF {#2}
- { \@@_backend_separation_init:w #2 \s_@@_stop #4 \s_@@_stop }
- }
-\cs_new:Npn \@@_backend_separation_init:n #1
- { \int_eval:n { #1 * 2 } ~ index ~ }
-% \end{macrocode}
-% Finally, we deal with the range limit if required. This is handled
-% by splitting the range into pairs. It's then just a question of doing
-% the comparisons, this time dropping everything except the desired
-% result.
-% \begin{macrocode}
-\cs_new:Npn \@@_backend_separation_init:nw #1#2 ~ #3 ~ #4 \s_@@_stop
- {
- #2 ~ #3 ~
- 2 ~ index ~ 2 ~ index ~ lt ~
- { ~ pop ~ exch ~ pop ~ } ~
- { ~
- 2 ~ index ~ 1 ~ index ~ gt ~
- { ~ exch ~ pop ~ exch ~ pop ~ } ~
- { ~ pop ~ pop ~ } ~
- ifelse ~
- }
- ifelse ~
- #1 ~ 1 ~ roll ~
- \tl_if_blank:nF {#4}
- { \@@_backend_separation_init:nw {#1} #4 \s_@@_stop }
- }
-% \end{macrocode}
-% CIELAB support uses the detail from the PostScript reference, page 227;
-% other than that block of PostScript, this is the same as for PDF-based
-% routes.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_separation_init_CIELAB:nnn #1#2#3
- {
- \@@_backend_separation_init:neenn
- {#2}
- {
- /CIEBasedABC ~
- << ~
- /RangeABC ~ [ ~ \c_@@_model_range_CIELAB_tl \c_space_tl ] ~
- /DecodeABC ~
- [ ~
- { ~ 16 ~ add ~ 116 ~ div ~ } ~ bind ~
- { ~ 500 ~ div ~ } ~ bind ~
- { ~ 200 ~ div ~ } ~ bind ~
- ] ~
- /MatrixABC ~ [ ~ 1 ~ 1 ~ 1 ~ 1 ~ 0 ~ 0 ~ 0 ~ 0 ~ -1 ~ ] ~
- /DecodeLMN ~
- [ ~
- { ~
- dup ~ 6 ~ 29 ~ div ~ ge ~
- { ~ dup ~ dup ~ mul ~ mul ~ ~ } ~
- { ~ 4 ~ 29 ~ div ~ sub ~ 108 ~ 841 ~ div ~ mul ~ } ~
- ifelse ~
- 0.9505 ~ mul ~
- } ~ bind ~
- { ~
- dup ~ 6 ~ 29 ~ div ~ ge ~
- { ~ dup ~ dup ~ mul ~ mul ~ } ~
- { ~ 4 ~ 29 ~ div ~ sub ~ 108 ~ 841 ~ div ~ mul ~ } ~
- ifelse ~
- } ~ bind ~
- { ~
- dup ~ 6 ~ 29 ~ div ~ ge ~
- { ~ dup ~ dup ~ mul ~ mul ~ } ~
- { ~ 4 ~ 29 ~ div ~ sub ~ 108 ~ 841 ~ div ~ mul ~ } ~
- ifelse ~
- 1.0890 ~ mul ~
- } ~ bind
- ] ~
- /WhitePoint ~
- [ ~ \tl_use:c { c_@@_model_whitepoint_CIELAB_ #1 _tl } ~ ] ~
- >>
- }
- { \c_@@_model_range_CIELAB_tl }
- { 100 ~ 0 ~ 0 }
- {#3}
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_devicen_init:nnn}
-% Trivial as almost all of the work occurs in the shared code.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_devicen_init:nnn #1#2#3
- {
- \__kernel_backend_literal:e
- {
- !
- TeXDict ~ begin ~
- /color \int_use:N \g_@@_model_int
- {
- [ ~
- /DeviceN ~
- [ ~ #1 ~ ] ~
- #2 ~
- { ~ #3 ~ } ~
- \@@_backend_devicen_colorants:n {#1}
- ] ~ setcolorspace
- } ~ def ~
- end
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_iccbased_init:nnn}
-% No support at present.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_iccbased_init:nnn #1#2#3 { }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvips>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*dvisvgm>
-% \end{macrocode}
-%
-% \begin{macro}
-% {
-% \@@_backend_select_separation:nn,
-% \@@_backend_select_devicen:nn
-% }
-% No support at present.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_select_separation:nn #1#2 { }
-\cs_new_eq:NN \@@_backend_select_devicen:nn \@@_backend_select_separation:nn
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {\@@_backend_separation_init:nnnnn, \@@_backend_separation_init_CIELAB:nnn}
-% No support at present.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_separation_init:nnnnn #1#2#3#4#5 { }
-\cs_new_protected:Npn \@@_backend_separation_init_CIELAB:nnnnnn #1#2#3 { }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_select_iccbased:nn}
-% As detailed in \url{https://www.w3.org/TR/css-color-4/#at-profile},
-% we can apply a color profile using CSS. As we have a local file, we use
-% a relative URL.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_select_iccbased:nn #1#2
- {
- \__kernel_backend_literal_svg:e
- {
- <style>
- @color-profile ~
- \str_if_eq:nnTF {#2} { cmyk }
- { device-cmyk }
- { --color \int_use:N \g_@@_model_int }
- \c_space_tl
- {
- src:("#1")
- }
- </style>
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvisvgm>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*dvipdfmx|luatex|pdftex|xetex>
-% \end{macrocode}
-%
-% \begin{macro}
-% {
-% \@@_backend_select_separation:nn,
-% \@@_backend_select_devicen:nn ,
-% \@@_backend_select_iccbased:nn
-% }
-% \begin{macrocode}
-%<*dvipdfmx|xetex>
-\cs_new_protected:Npn \@@_backend_select_separation:nn #1#2
- { \__kernel_backend_literal:e { pdf : bc ~ \pdf_object_ref:n {#1} ~ [ #2 ] } }
-%</dvipdfmx|xetex>
-%<*luatex|pdftex>
-\cs_new_protected:Npn \@@_backend_select_separation:nn #1#2
- { \@@_backend_select:nn { /#1 ~ cs ~ #2 ~ scn } { /#1 ~ CS ~ #2 ~ SCN } }
-%</luatex|pdftex>
-\cs_new_eq:NN \@@_backend_select_devicen:nn \@@_backend_select_separation:nn
-\cs_new_eq:NN \@@_backend_select_iccbased:nn \@@_backend_select_separation:nn
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_init_resource:n}
-% Resource initiation comes up a few times. For \texttt{dvipdfmx}/\XeTeX{},
-% we skip this as at present it's handled by the backend.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_init_resource:n #1
- {
-%<*luatex|pdftex>
- \bool_lazy_and:nnT
- { \cs_if_exist_p:N \pdfmanagement_if_active_p: }
- { \pdfmanagement_if_active_p: }
- {
- \use:e
- {
- \pdfmanagement_add:nnn
- { Page / Resources / ColorSpace }
- { #1 }
- { \pdf_object_ref_last: }
- }
- }
-%</luatex|pdftex>
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_separation_init:nnnnn}
-% \begin{macro}{\@@_backend_separation_init:nn}
-% \begin{macro}{\@@_backend_separation_init_CIELAB:nnn}
-% Initialising the PDF structures needs two parts: creating an object
-% containing the \enquote{real} name of the Separation, then adding a reference
-% to that to each page. We use a separate object for the tint transformation
-% following the model in the PDF reference. The object here for the color
-% needs to be named as that way it's accessible to
-% \texttt{dvipdfmx}/\XeTeX{}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_separation_init:nnnnn #1#2#3#4#5
- {
- \pdf_object_unnamed_write:ne { dict }
- {
- /FunctionType ~ 2
- /Domain ~ [0 ~ 1]
- \tl_if_blank:nF {#3} { /Range ~ [#3] }
- /C0 ~ [#4] ~
- /C1 ~ [#5] /N ~ 1
- }
- \exp_args:Ne \@@_backend_separation_init:nn
- { \str_convert_pdfname:n {#1} } {#2}
- \@@_backend_init_resource:n { color \int_use:N \g_@@_model_int }
- }
-\cs_new_protected:Npn \@@_backend_separation_init:nn #1#2
- {
- \use:e
- {
- \pdf_object_new:n { color \int_use:N \g_@@_model_int }
- \pdf_object_write:nnn { color \int_use:N \g_@@_model_int } { array }
- { /Separation /#1 ~ #2 ~ \pdf_object_ref_last: }
- }
- \prop_gput:Nne \g_@@_backend_colorant_prop { /#1 }
- { \pdf_object_ref_last: }
- }
-% \end{macrocode}
-% For CIELAB colors, we need one object per document for the illuminant,
-% plus initialisation of the color space referencing that object.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_separation_init_CIELAB:nnn #1#2#3
- {
- \pdf_object_if_exist:nF { @@_illuminant_CIELAB_ #1 }
- {
- \pdf_object_new:n { @@_illuminant_CIELAB_ #1 }
- \pdf_object_write:nne { @@_illuminant_CIELAB_ #1 } { array }
- {
- /Lab ~
- <<
- /WhitePoint ~
- [ \tl_use:c { c_@@_model_whitepoint_CIELAB_ #1 _tl } ]
- /Range ~ [ \c_@@_model_range_CIELAB_tl ]
- >>
- }
- }
- \@@_backend_separation_init:nnnnn
- {#2}
- { \pdf_object_ref:n { @@_illuminant_CIELAB_ #1 } }
- { \c_@@_model_range_CIELAB_tl }
- { 100 ~ 0 ~ 0 }
- {#3}
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_devicen_init:nnn}
-% \begin{macro}[EXP]{\@@_backend_devicen_init:w}
-% Similar to the Separations case, but with an arbitrary function for
-% the alternative space work.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_devicen_init:nnn #1#2#3
- {
- \pdf_object_unnamed_write:ne { stream }
- {
- {
- /FunctionType ~ 4 ~
- /Domain ~
- [ ~
- \prg_replicate:nn
- { 0 \@@_backend_devicen_init:w #1 ~ \s_@@_stop }
- { 0 ~ 1 ~ }
- ] ~
- /Range ~
- [ ~
- \str_case:nn {#2}
- {
- { /DeviceCMYK } { 0 ~ 1 ~ 0 ~ 1 ~ 0 ~ 1 ~ 0 ~ 1 }
- { /DeviceGray } { 0 ~ 1 }
- { /DeviceRGB } { 0 ~ 1 ~ 0 ~ 1 ~ 0 ~ 1 }
- } ~
- ]
- }
- { {#3} }
- }
- \use:e
- {
- \pdf_object_new:n { color \int_use:N \g_@@_model_int }
- \pdf_object_write:nnn { color \int_use:N \g_@@_model_int } { array }
- {
- /DeviceN ~
- [ ~ #1 ~ ] ~
- #2 ~
- \pdf_object_ref_last:
- \@@_backend_devicen_colorants:n {#1}
- }
- }
- \@@_backend_init_resource:n { color \int_use:N \g_@@_model_int }
- }
-\cs_new:Npn \@@_backend_devicen_init:w #1 ~ #2 \s_@@_stop
- {
- + 1
- \tl_if_blank:nF {#2}
- { \@@_backend_devicen_init:w #2 \s_@@_stop }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_iccbased_init:nnn}
-% Lots of data to save here: we only want to do that once per file,
-% so track it by name.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_iccbased_init:nnn #1#2#3
- {
- \pdf_object_if_exist:nF { @@_icc_ #1 }
- {
- \pdf_object_new:n { @@_icc_ #1 }
- \pdf_object_write:nne { @@_icc_ #1 } { fstream }
- {
- {
- /N ~ \exp_not:n { #2 } ~
- \tl_if_empty:nF { #3 } { /Range~[ #3 ] }
- }
- {#1}
- }
- }
- \pdf_object_unnamed_write:ne { array }
- { /ICCBased ~ \pdf_object_ref:n { @@_icc_ #1 } }
- \@@_backend_init_resource:n { color \int_use:N \g_@@_model_int }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_iccbased_device:nnn}
-% This is very similar to setting up a color space: the only part we
-% add to the page resources differently.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_iccbased_device:nnn #1#2#3
- {
- \pdf_object_if_exist:nF { @@_icc_ #1 }
- {
- \pdf_object_new:n { @@_icc_ #1 }
- \pdf_object_write:nnn { @@_icc_ #1 } { fstream }
- {
- { /N ~ #3 }
- {#1}
- }
- }
- \pdf_object_unnamed_write:ne { array }
- { /ICCBased ~ \pdf_object_ref:n { @@_icc_ #1 } }
- \@@_backend_init_resource:n { Default #2 }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvipdfmx|luatex|pdftex|xetex>
-% \end{macrocode}
-%
-% \subsection{Fill and stroke color}
-%
-% Here, \texttt{dvipdfmx}/\XeTeX{} we write direct PDF specials for the fill,
-% and only use the stack for the stroke color (see above for comments on why
-% we cannot use multiple stacks with these backends). \LuaTeX{} and \pdfTeX{}
-% have mutiple stacks that can deal with fill and stroke. For \texttt{dvips}
-% we have to manage fill and stroke color ourselves. We also handle
-% \texttt{dvisvgm} independently, as there we can create SVG directly.
-%
-% \begin{macrocode}
-%<*dvipdfmx|xetex>
-% \end{macrocode}
-%
-% \begin{macro}
-% {
-% \@@_backend_fill:n ,
-% \@@_backend_fill_cmyk:n ,
-% \@@_backend_fill_gray:n ,
-% \@@_backend_fill_rgb:n ,
-% \@@_backend_stroke:n ,
-% \@@_backend_stroke_cmyk:n ,
-% \@@_backend_stroke_gray:n ,
-% \@@_backend_stroke_rgb:n
-% }
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_fill:n #1
- { \__kernel_backend_literal:n { pdf : bc ~ fill ~ [ #1 ] } }
-\cs_new_eq:NN \@@_backend_fill_cmyk:n \@@_backend_fill:n
-\cs_new_eq:NN \@@_backend_fill_gray:n \@@_backend_fill:n
-\cs_new_eq:NN \@@_backend_fill_rgb:n \@@_backend_fill:n
-\cs_new_protected:Npn \@@_backend_stroke:n #1
- { \__kernel_backend_literal:n { pdf : bc ~ stroke ~ [ #1 ] } }
-\cs_new_eq:NN \@@_backend_stroke_cmyk:n \@@_backend_stroke:n
-\cs_new_eq:NN \@@_backend_stroke_gray:n \@@_backend_stroke:n
-\cs_new_eq:NN \@@_backend_stroke_rgb:n \@@_backend_stroke:n
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \@@_backend_fill_separation:nn,
-% \@@_backend_stroke_separation:nn,
-% \@@_backend_fill_devicen:nn,
-% \@@_backend_stroke_devicen:nn
-% }
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_fill_separation:nn #1#2
- {
- \__kernel_backend_literal:e
- { pdf : bc ~ fill ~ \pdf_object_ref:n {#1} ~ [ #2 ] }
- }
-\cs_new_protected:Npn \@@_backend_stroke_separation:nn #1#2
- {
- \__kernel_backend_literal:e
- { pdf : bc ~ stroke ~ \pdf_object_ref:n {#1} ~ [ #2 ] }
- }
-\cs_new_eq:NN \@@_backend_fill_devicen:nn \@@_backend_fill_separation:nn
-\cs_new_eq:NN \@@_backend_stroke_devicen:nn \@@_backend_stroke_separation:nn
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_fill_reset:, \@@_backend_stroke_reset:}
-% \begin{macrocode}
-\cs_new_eq:NN \@@_backend_fill_reset: \@@_backend_reset:
-\cs_new_eq:NN \@@_backend_stroke_reset: \@@_backend_reset:
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvipdfmx|xetex>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*luatex|pdftex>
-% \end{macrocode}
-%
-% \begin{macro}
-% {
-% \@@_backend_fill_cmyk:n ,
-% \@@_backend_fill_gray:n ,
-% \@@_backend_fill_rgb:n ,
-% \@@_backend_fill:n ,
-% \@@_backend_stroke_cmyk:n ,
-% \@@_backend_stroke_gray:n ,
-% \@@_backend_stroke_rgb:n ,
-% \@@_backend_stroke:n
-% }
-% Drawing (fill/stroke) color is handled in \texttt{dvipdfmx}/\XeTeX{} in the
-% same way as \LuaTeX{}/\pdfTeX{}. We use the same approach as earlier, except the
-% color stack is not involved so the generic direct PDF operation is used.
-% There is no worry about the nature of strokes: everything is handled
-% automatically.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_fill_cmyk:n #1
- { \@@_backend_fill:n { #1 ~ k } }
-\cs_new_protected:Npn \@@_backend_fill_gray:n #1
- { \@@_backend_fill:n { #1 ~ g } }
-\cs_new_protected:Npn \@@_backend_fill_rgb:n #1
- { \@@_backend_fill:n { #1 ~ rg } }
-\cs_new_protected:Npn \@@_backend_fill:n #1
- {
- \tl_set:Nn \l_@@_backend_fill_tl {#1}
- \__kernel_color_backend_stack_push:nn \l_@@_backend_stack_int
- { #1 ~ \l_@@_backend_stroke_tl }
- }
-\cs_new_protected:Npn \@@_backend_stroke_cmyk:n #1
- { \@@_backend_stroke:n { #1 ~ K } }
-\cs_new_protected:Npn \@@_backend_stroke_gray:n #1
- { \@@_backend_stroke:n { #1 ~ G } }
-\cs_new_protected:Npn \@@_backend_stroke_rgb:n #1
- { \@@_backend_stroke:n { #1 ~ RG } }
-\cs_new_protected:Npn \@@_backend_stroke:n #1
- {
- \tl_set:Nn \l_@@_backend_stroke_tl {#1}
- \__kernel_color_backend_stack_push:nn \l_@@_backend_stack_int
- { \l_@@_backend_fill_tl \c_space_tl #1 }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \@@_backend_fill_separation:nn,
-% \@@_backend_stroke_separation:nn,
-% \@@_backend_fill_devicen:nn,
-% \@@_backend_stroke_devicen:nn
-% }
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_fill_separation:nn #1#2
- { \@@_backend_fill:n { /#1 ~ cs ~ #2 ~ scn } }
-\cs_new_protected:Npn \@@_backend_stroke_separation:nn #1#2
- { \@@_backend_stroke:n { /#1 ~ CS ~ #2 ~ SCN } }
-\cs_new_eq:NN \@@_backend_fill_devicen:nn \@@_backend_fill_separation:nn
-\cs_new_eq:NN \@@_backend_stroke_devicen:nn \@@_backend_stroke_separation:nn
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_fill_reset:, \@@_backend_stroke_reset:}
-% \begin{macrocode}
-\cs_new_eq:NN \@@_backend_fill_reset: \@@_backend_reset:
-\cs_new_eq:NN \@@_backend_stroke_reset: \@@_backend_reset:
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</luatex|pdftex>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*dvips>
-% \end{macrocode}
-%
-% \begin{macro}
-% {
-% \@@_backend_fill_cmyk:n ,
-% \@@_backend_fill_gray:n ,
-% \@@_backend_fill_rgb:n ,
-% \@@_backend_fill:n ,
-% \@@_backend_stroke_cmyk:n ,
-% \@@_backend_stroke_gray:n ,
-% \@@_backend_stroke_rgb:n
-% }
-% Fill color here is the same as general color \emph{except} we skip the
-% stroke part.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_fill_cmyk:n #1
- { \@@_backend_fill:n { cmyk ~ #1 } }
-\cs_new_protected:Npn \@@_backend_fill_gray:n #1
- { \@@_backend_fill:n { gray ~ #1 } }
-\cs_new_protected:Npn \@@_backend_fill_rgb:n #1
- { \@@_backend_fill:n { rgb ~ #1 } }
-\cs_new_protected:Npn \@@_backend_fill:n #1
- {
- \__kernel_backend_literal:n { color~push~ #1 }
- }
-\cs_new_protected:Npn \@@_backend_stroke_cmyk:n #1
- { \__kernel_backend_postscript:n { /color.sc { #1 ~ setcmykcolor } def } }
-\cs_new_protected:Npn \@@_backend_stroke_gray:n #1
- { \__kernel_backend_postscript:n { /color.sc { #1 ~ setgray } def } }
-\cs_new_protected:Npn \@@_backend_stroke_rgb:n #1
- { \__kernel_backend_postscript:n { /color.sc { #1 ~ setrgbcolor } def } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \@@_backend_fill_separation:nn,
-% \@@_backend_stroke_separation:nn,
-% \@@_backend_fill_devicen:nn,
-% \@@_backend_stroke_devicen:nn
-% }
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_fill_separation:nn #1#2
- { \@@_backend_fill:n { separation ~ #1 ~ #2 } }
-\cs_new_protected:Npn \@@_backend_stroke_separation:nn #1#2
- { \__kernel_backend_postscript:n { /color.sc { separation ~ #1 ~ #2 } def } }
-\cs_new_eq:NN \@@_backend_fill_devicen:nn \@@_backend_fill_separation:nn
-\cs_new_eq:NN \@@_backend_stroke_devicen:nn \@@_backend_stroke_separation:nn
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_fill_reset:, \@@_backend_stroke_reset:}
-% \begin{macrocode}
-\cs_new_eq:NN \@@_backend_fill_reset: \@@_backend_reset:
-\cs_new_protected:Npn \@@_backend_stroke_reset: { }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvips>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*dvisvgm>
-% \end{macrocode}
-%
-% \begin{macro}
-% {
-% \@@_backend_fill_cmyk:n ,
-% \@@_backend_fill_gray:n ,
-% \@@_backend_fill_rgb:n ,
-% \@@_backend_fill:n
-% }
-% Fill color here is the same as general color \emph{except} we skip the
-% stroke part.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_fill_cmyk:n #1
- { \@@_backend_fill:n { cmyk ~ #1 } }
-\cs_new_protected:Npn \@@_backend_fill_gray:n #1
- { \@@_backend_fill:n { gray ~ #1 } }
-\cs_new_protected:Npn \@@_backend_fill_rgb:n #1
- { \@@_backend_fill:n { rgb ~ #1 } }
-\cs_new_protected:Npn \@@_backend_fill:n #1
- {
- \__kernel_backend_literal:n { color~push~ #1 }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_stroke_cmyk:n}
-% \begin{macro}{\@@_backend_stroke_cmyk:w}
-% \begin{macro}{\@@_backend_stroke_gray:n, \@@_backend_stroke_gray_aux:n}
-% \begin{macro}{\@@_backend_stroke_rgb:n}
-% \begin{macro}{\@@_backend_stroke_rgb:w}
-% \begin{macro}{\@@_backend:nnn}
-% For drawings in SVG, we use scopes for all stroke colors. That
-% requires using \texttt{RGB} values, which luckily are easy to
-% convert here (|cmyk| to |RGB| is a fixed function).
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_stroke_cmyk:n #1
- { \@@_backend_cmyk:w #1 \s_@@_stop }
-\cs_new_protected:Npn \@@_backend_stroke_cmyk:w
- #1 ~ #2 ~ #3 ~ #4 \s_@@_stop
- {
- \use:e
- {
- \@@_backend:nnn
- { \fp_eval:n { -100 * ( 1 - min ( 1 , #1 + #4 ) ) } }
- { \fp_eval:n { -100 * ( 1 - min ( 1 , #2 + #4 ) ) } }
- { \fp_eval:n { -100 * ( 1 - min ( 1 , #3 + #4 ) ) } }
- }
- }
-\cs_new_protected:Npn \@@_backend_stroke_gray:n #1
- {
- \use:e
- {
- \@@_backend_stroke_gray_aux:n
- { \fp_eval:n { 100 * (#1) } }
- }
- }
-\cs_new_protected:Npn \@@_backend_stroke_gray_aux:n #1
- { \@@_backend:nnn {#1} {#1} {#1} }
-\cs_new_protected:Npn \@@_backend_stroke_rgb:n #1
- { \@@_backend_rgb:w #1 \s_@@_stop }
-\cs_new_protected:Npn \@@_backend_stroke_rgb:w
- #1 ~ #2 ~ #3 \s_@@_stop
- {
- \use:e
- {
- \@@_backend:nnn
- { \fp_eval:n { 100 * (#1) } }
- { \fp_eval:n { 100 * (#2) } }
- { \fp_eval:n { 100 * (#3) } }
- }
- }
-\cs_new_protected:Npe \@@_backend:nnn #1#2#3
- {
- \__kernel_backend_scope:n
- {
- stroke =
- "
- rgb
- (
- #1 \c_percent_str ,
- #2 \c_percent_str ,
- #3 \c_percent_str
- )
- "
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \@@_backend_fill_separation:nn,
-% \@@_backend_stroke_separation:nn,
-% \@@_backend_fill_devicen:nn,
-% \@@_backend_stroke_devicen:nn
-% }
-% At present, these are no-ops.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_fill_separation:nn #1#2 { }
-\cs_new_protected:Npn \@@_backend_stroke_separation:nn #1#2 { }
-\cs_new_eq:NN \@@_backend_fill_devicen:nn \@@_backend_fill_separation:nn
-\cs_new_eq:NN \@@_backend_stroke_devicen:nn \@@_backend_stroke_separation:nn
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_fill_reset:, \@@_backend_stroke_reset:}
-% \begin{macrocode}
-\cs_new_eq:NN \@@_backend_fill_reset: \@@_backend_reset:
-\cs_new_protected:Npn \@@_backend_stroke_reset: { }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_devicen_init:nnn, \@@_backend_iccbased_init:nnn}
-% No support at present.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_devicen_init:nnn #1#2#3 { }
-\cs_new_protected:Npn \@@_backend_iccbased_init:nnn #1#2#3 { }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvisvgm>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \subsection{Font handling integration}
-%
-% In \LuaTeX{} these colors should also be usable to color fonts, so
-% \texttt{luaotfload} color handling is extended to include these.
-%
-% \begin{macrocode}
-%<*lua>
-% \end{macrocode}
-%
-% \begin{macrocode}
-local l = lpeg
-local spaces = l.P' '^0
-local digit16 = l.R('09', 'af', 'AF')
-
-local octet = digit16 * digit16 / function(s)
- return string.format('%.3g ', tonumber(s, 16) / 255)
-end
-
-if luaotfload and luaotfload.set_transparent_colorstack then
- local htmlcolor = l.Cs(octet * octet * octet * -1 * l.Cc'rg')
- local color_export = {
- token.create'tex_endlocalcontrol:D',
- token.create'tex_hpack:D',
- token.new(0, 1),
- token.create'color_export:nnN',
- token.new(0, 1),
- '',
- token.new(0, 2),
- token.new(0, 1),
- 'backend',
- token.new(0, 2),
- token.create'l_tmpa_tl',
- token.create'exp_after:wN',
- token.create'@@_select:nn',
- token.create'l_tmpa_tl',
- token.new(0, 2),
- }
- local group_end = token.create'group_end:'
- local value = (1 - l.P'}')^0
- luatexbase.add_to_callback('luaotfload.parse_color', function (value)
-% Also allow HTML colors to preserve compatibility
- local html = htmlcolor:match(value)
- if html then return html end
-
-% If no l3color named color with this name is known, check for defined xcolor colors
- local l3color_prop = token.get_macro(string.format('l_@@_named_%s_prop', value))
- if l3color_prop == nil or l3color_prop == '' then
- local legacy_color_macro = token.create(string.format('\\color@%s', value))
- if legacy_color_macro.cmdname ~= 'undefined_cs' then
- token.put_next(legacy_color_macro)
- return token.scan_argument()
- end
- end
-
- tex.runtoks(function()
- token.get_next()
- color_export[6] = value
- tex.sprint(-2, color_export)
- end)
- local list = token.scan_list()
- if not list.head or list.head.next
- or list.head.subtype ~= node.subtype'pdf_colorstack' then
- error'Unexpected backend behavior'
- end
- local cmd = list.head.data
- node.free(list)
- return cmd
- end, 'l3color')
-end
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</lua>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*luatex>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*package>
-\lua_load_module:n {l3backend-luatex}
-%</package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</luatex>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3backend/l3backend-draw.dtx b/macros/latex/contrib/l3backend/l3backend-draw.dtx
deleted file mode 100644
index eef86886f5..0000000000
--- a/macros/latex/contrib/l3backend/l3backend-draw.dtx
+++ /dev/null
@@ -1,1067 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3backend-draw.dtx
-%
-% Copyright (C) 2019-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3backend bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3backend-draw} package\\ Backend drawing support^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3backend-draw} implementation}
-%
-% \begin{macrocode}
-%<*package>
-%<@@=draw>
-% \end{macrocode}
-%
-% \subsection{\texttt{dvips} backend}
-%
-% \begin{macrocode}
-%<*dvips>
-% \end{macrocode}
-%
-% \begin{macro}{\@@_backend_literal:n, \@@_backend_literal:e}
-% The same as literal PostScript: same arguments about positioning apply
-% here.
-% \begin{macrocode}
-\cs_new_eq:NN \@@_backend_literal:n \__kernel_backend_literal_postscript:n
-\cs_generate_variant:Nn \@@_backend_literal:n { e }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_begin:, \@@_backend_end:}
-% The |ps::[begin]| special here deals with positioning but allows us to
-% continue on to a matching |ps::[end]|: contrast with |ps:|, which positions
-% but where we can't split material between separate calls. The
-% |@beginspecial|/|@endspecial| pair are from |special.pro| and correct the
-% scale and $y$-axis direction.
-% As for \pkg{pgf}, we need to save the current point as this is
-% required for box placement. (Note that
-% |@beginspecial|/|@endspecial| forms a backend scope.)
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_begin:
- {
- \@@_backend_literal:n { [begin] }
- \@@_backend_literal:n { /draw.x~currentpoint~/draw.y~exch~def~def }
- \@@_backend_literal:n { @beginspecial }
- }
-\cs_new_protected:Npn \@@_backend_end:
- {
- \@@_backend_literal:n { @endspecial }
- \@@_backend_literal:n { [end] }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_scope_begin:, \@@_backend_scope_end:}
-% Scope here may need to contain saved definitions, so the entire memory
-% rather than just the graphic state has to be sent to the stack.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_scope_begin:
- { \@@_backend_literal:n { save } }
-\cs_new_protected:Npn \@@_backend_scope_end:
- { \@@_backend_literal:n { restore } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_moveto:nn, \@@_backend_lineto:nn}
-% \begin{macro}{\@@_backend_rectangle:nnnn}
-% \begin{macro}{\@@_backend_curveto:nnnnnn}
-% Path creation operations mainly resolve directly to PostScript primitive
-% steps, with only the need to convert to \texttt{bp}. Notice that
-% \texttt{x}-type expansion is included here to ensure that any variable
-% values are forced to literals before any possible caching. There is
-% no native rectangular path command (without also clipping, filling or
-% stroking), so that task is done using a small amount of PostScript.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_moveto:nn #1#2
- {
- \@@_backend_literal:e
- {
- \dim_to_decimal_in_bp:n {#1} ~
- \dim_to_decimal_in_bp:n {#2} ~ moveto
- }
- }
-\cs_new_protected:Npn \@@_backend_lineto:nn #1#2
- {
- \@@_backend_literal:e
- {
- \dim_to_decimal_in_bp:n {#1} ~
- \dim_to_decimal_in_bp:n {#2} ~ lineto
- }
- }
-\cs_new_protected:Npn \@@_backend_rectangle:nnnn #1#2#3#4
- {
- \@@_backend_literal:e
- {
- \dim_to_decimal_in_bp:n {#4} ~ \dim_to_decimal_in_bp:n {#3} ~
- \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~
- moveto~dup~0~rlineto~exch~0~exch~rlineto~neg~0~rlineto~closepath
- }
- }
-\cs_new_protected:Npn \@@_backend_curveto:nnnnnn #1#2#3#4#5#6
- {
- \@@_backend_literal:e
- {
- \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~
- \dim_to_decimal_in_bp:n {#3} ~ \dim_to_decimal_in_bp:n {#4} ~
- \dim_to_decimal_in_bp:n {#5} ~ \dim_to_decimal_in_bp:n {#6} ~
- curveto
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_evenodd_rule:, \@@_backend_nonzero_rule:}
-% \begin{variable}{\g_@@_draw_eor_bool}
-% The even-odd rule here can be implemented as a simply switch.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_evenodd_rule:
- { \bool_gset_true:N \g_@@_draw_eor_bool }
-\cs_new_protected:Npn \@@_backend_nonzero_rule:
- { \bool_gset_false:N \g_@@_draw_eor_bool }
-\bool_new:N \g_@@_draw_eor_bool
-% \end{macrocode}
-% \end{variable}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \@@_backend_closepath: ,
-% \@@_backend_stroke: ,
-% \@@_backend_closestroke: ,
-% \@@_backend_fill: ,
-% \@@_backend_fillstroke: ,
-% \@@_backend_clip: ,
-% \@@_backend_discardpath:
-% }
-% \begin{variable}{\g_@@_draw_clip_bool}
-% Unlike PDF, PostScript doesn't track separate colors for strokes and other
-% elements. It is also desirable to have the |clip| keyword after a stroke or
-% fill. To achieve those outcomes, there is some work to do. For color, the
-% stoke color is simple but the fill one has to be inserted by hand. For
-% clipping, the required ordering is achieved using a \TeX{} switch. All of
-% the operations end with a new path instruction as they do not terminate
-% (again in contrast to PDF).
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_closepath:
- { \@@_backend_literal:n { closepath } }
-\cs_new_protected:Npn \@@_backend_stroke:
- {
- \@@_backend_literal:n { gsave }
- \@@_backend_literal:n { color.sc }
- \@@_backend_literal:n { stroke }
- \@@_backend_literal:n { grestore }
- \bool_if:NT \g_@@_draw_clip_bool
- {
- \@@_backend_literal:e
- {
- \bool_if:NT \g_@@_draw_eor_bool { eo }
- clip
- }
- }
- \@@_backend_literal:n { newpath }
- \bool_gset_false:N \g_@@_draw_clip_bool
- }
-\cs_new_protected:Npn \@@_backend_closestroke:
- {
- \@@_backend_closepath:
- \@@_backend_stroke:
- }
-\cs_new_protected:Npn \@@_backend_fill:
- {
- \@@_backend_literal:e
- {
- \bool_if:NT \g_@@_draw_eor_bool { eo }
- fill
- }
- \bool_if:NT \g_@@_draw_clip_bool
- {
- \@@_backend_literal:e
- {
- \bool_if:NT \g_@@_draw_eor_bool { eo }
- clip
- }
- }
- \@@_backend_literal:n { newpath }
- \bool_gset_false:N \g_@@_draw_clip_bool
- }
-\cs_new_protected:Npn \@@_backend_fillstroke:
- {
- \@@_backend_literal:e
- {
- \bool_if:NT \g_@@_draw_eor_bool { eo }
- fill
- }
- \@@_backend_literal:n { gsave }
- \@@_backend_literal:n { color.sc }
- \@@_backend_literal:n { stroke }
- \@@_backend_literal:n { grestore }
- \bool_if:NT \g_@@_draw_clip_bool
- {
- \@@_backend_literal:e
- {
- \bool_if:NT \g_@@_draw_eor_bool { eo }
- clip
- }
- }
- \@@_backend_literal:n { newpath }
- \bool_gset_false:N \g_@@_draw_clip_bool
- }
-\cs_new_protected:Npn \@@_backend_clip:
- { \bool_gset_true:N \g_@@_draw_clip_bool }
-\bool_new:N \g_@@_draw_clip_bool
-\cs_new_protected:Npn \@@_backend_discardpath:
- {
- \bool_if:NT \g_@@_draw_clip_bool
- {
- \@@_backend_literal:e
- {
- \bool_if:NT \g_@@_draw_eor_bool { eo }
- clip
- }
- }
- \@@_backend_literal:n { newpath }
- \bool_gset_false:N \g_@@_draw_clip_bool
- }
-% \end{macrocode}
-% \end{variable}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_dash_pattern:nn}
-% \begin{macro}{\@@_backend_dash:n}
-% \begin{macro}{\@@_backend_linewidth:n}
-% \begin{macro}{\@@_backend_miterlimit:n}
-% \begin{macro}
-% {
-% \@@_backend_cap_butt:, \@@_backend_cap_round:, \@@_backend_cap_rectangle:,
-% \@@_backend_join_miter:, \@@_backend_join_round:, \@@_backend_join_bevel:
-% }
-% Converting paths to output is again a case of mapping directly to
-% PostScript operations.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_dash_pattern:nn #1#2
- {
- \@@_backend_literal:e
- {
- [
- \exp_args:Nf \use:n
- { \clist_map_function:nN {#1} \@@_backend_dash:n }
- ] ~
- \dim_to_decimal_in_bp:n {#2} ~ setdash
- }
- }
-\cs_new:Npn \@@_backend_dash:n #1
- { ~ \dim_to_decimal_in_bp:n {#1} }
-\cs_new_protected:Npn \@@_backend_linewidth:n #1
- {
- \@@_backend_literal:e
- { \dim_to_decimal_in_bp:n {#1} ~ setlinewidth }
- }
-\cs_new_protected:Npn \@@_backend_miterlimit:n #1
- { \@@_backend_literal:n { #1 ~ setmiterlimit } }
-\cs_new_protected:Npn \@@_backend_cap_butt:
- { \@@_backend_literal:n { 0 ~ setlinecap } }
-\cs_new_protected:Npn \@@_backend_cap_round:
- { \@@_backend_literal:n { 1 ~ setlinecap } }
-\cs_new_protected:Npn \@@_backend_cap_rectangle:
- { \@@_backend_literal:n { 2 ~ setlinecap } }
-\cs_new_protected:Npn \@@_backend_join_miter:
- { \@@_backend_literal:n { 0 ~ setlinejoin } }
-\cs_new_protected:Npn \@@_backend_join_round:
- { \@@_backend_literal:n { 1 ~ setlinejoin } }
-\cs_new_protected:Npn \@@_backend_join_bevel:
- { \@@_backend_literal:n { 2 ~ setlinejoin } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-%
-% \begin{macro}{\@@_backend_cm:nnnn}
-% In \texttt{dvips}, keeping the transformations in line with the engine
-% is unfortunately not possible for scaling and rotations: even if we
-% decompose the matrix into those operations, there is still no backend
-% tracking (\emph{cf.}~\texttt{dvipdfmx}/\XeTeX{}). Thus we take the shortest
-% path available and simply dump the matrix as given.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_cm:nnnn #1#2#3#4
- {
- \@@_backend_literal:n
- { [ #1 ~ #2 ~ #3 ~ #4 ~ 0 ~ 0 ] ~ concat }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_box_use:Nnnnn}
-% Inside a picture |@beginspecial|/|@endspecial| are active, which is
-% normally a good thing but means that the position and scaling would be off
-% if the box was inserted directly. To deal with that, there are a number of
-% possible approaches. A previous implementation suggested by Tom Rokici
-% used |@endspecial|/|@beginspecial|. This avoids needing internals of
-% \texttt{dvips}, but fails if there the box is used inside a scope
-% (see \url{https://github.com/latex3/latex3/issues/1504}). Instead,
-% we use the same method as \pkg{pgf}, which means tracking the position
-% at the PostScript level. Also note that using |@endspecial| would
-% close the scope it creates, meaning that after a box insertion, any
-% local changes would be lost. Keeping \texttt{dvips} on track is
-% non-trivial, hence the |[begin]|/|[end]| pair before the
-% |save| and around the |restore|.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_box_use:Nnnnn #1#2#3#4#5
- {
- \@@_backend_literal:n { save }
- \@@_backend_literal:n { 72~Resolution~div~72~VResolution~div~neg~scale }
- \@@_backend_literal:n { magscale { 1~DVImag~div~dup~scale } if }
- \@@_backend_literal:n { draw.x~neg~draw.y~neg~translate }
- \@@_backend_literal:n { [end] }
- \@@_backend_literal:n { [begin] }
- \@@_backend_literal:n { save }
- \@@_backend_literal:n { currentpoint }
- \@@_backend_literal:n { currentpoint~translate }
- \@@_backend_cm:nnnn { 1 } { 0 } { 0 } { -1 }
- \@@_backend_cm:nnnn {#2} {#3} {#4} {#5}
- \@@_backend_cm:nnnn { 1 } { 0 } { 0 } { -1 }
- \@@_backend_literal:n { neg~exch~neg~exch~translate }
- \@@_backend_literal:n { [end] }
- \hbox_overlap_right:n { \box_use:N #1 }
- \@@_backend_literal:n { [begin] }
- \@@_backend_literal:n { restore }
- \@@_backend_literal:n { [end] }
- \@@_backend_literal:n { [begin] }
- \@@_backend_literal:n { restore }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvips>
-% \end{macrocode}
-%
-% \subsection{\LuaTeX{}, \pdfTeX{}, \texttt{dvipdfmx} and \XeTeX{}}
-%
-% \LuaTeX{}, \pdfTeX{}, \texttt{dvipdfmx} and \XeTeX{} directly produce PDF output
-% and understand a shared set of specials for drawing commands.
-%
-% \begin{macrocode}
-%<*dvipdfmx|luatex|pdftex|xetex>
-% \end{macrocode}
-%
-% \subsubsection{Drawing}
-%
-% \begin{macro}{\@@_backend_literal:n, \@@_backend_literal:e}
-% Pass data through using a dedicated interface.
-% \begin{macrocode}
-\cs_new_eq:NN \@@_backend_literal:n \__kernel_backend_literal_pdf:n
-\cs_generate_variant:Nn \@@_backend_literal:n { e }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_begin:, \@@_backend_end:}
-% No special requirements here, so simply set up a drawing scope.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_begin:
- { \@@_backend_scope_begin: }
-\cs_new_protected:Npn \@@_backend_end:
- { \@@_backend_scope_end: }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_scope_begin:, \@@_backend_scope_end:}
-% Use the backend-level scope mechanisms.
-% \begin{macrocode}
-\cs_new_eq:NN \@@_backend_scope_begin: \__kernel_backend_scope_begin:
-\cs_new_eq:NN \@@_backend_scope_end: \__kernel_backend_scope_end:
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_moveto:nn, \@@_backend_lineto:nn}
-% \begin{macro}{\@@_backend_curveto:nnnnnn}
-% \begin{macro}{\@@_backend_rectangle:nnnn}
-% Path creation operations all resolve directly to PDF primitive steps, with
-% only the need to convert to \texttt{bp}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_moveto:nn #1#2
- {
- \@@_backend_literal:e
- { \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~ m }
- }
-\cs_new_protected:Npn \@@_backend_lineto:nn #1#2
- {
- \@@_backend_literal:e
- { \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~ l }
- }
-\cs_new_protected:Npn \@@_backend_curveto:nnnnnn #1#2#3#4#5#6
- {
- \@@_backend_literal:e
- {
- \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~
- \dim_to_decimal_in_bp:n {#3} ~ \dim_to_decimal_in_bp:n {#4} ~
- \dim_to_decimal_in_bp:n {#5} ~ \dim_to_decimal_in_bp:n {#6} ~
- c
- }
- }
-\cs_new_protected:Npn \@@_backend_rectangle:nnnn #1#2#3#4
- {
- \@@_backend_literal:e
- {
- \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~
- \dim_to_decimal_in_bp:n {#3} ~ \dim_to_decimal_in_bp:n {#4} ~
- re
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_evenodd_rule:, \@@_backend_nonzero_rule:}
-% \begin{variable}{\g_@@_draw_eor_bool}
-% The even-odd rule here can be implemented as a simply switch.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_evenodd_rule:
- { \bool_gset_true:N \g_@@_draw_eor_bool }
-\cs_new_protected:Npn \@@_backend_nonzero_rule:
- { \bool_gset_false:N \g_@@_draw_eor_bool }
-\bool_new:N \g_@@_draw_eor_bool
-% \end{macrocode}
-% \end{variable}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \@@_backend_closepath: ,
-% \@@_backend_stroke: ,
-% \@@_backend_closestroke: ,
-% \@@_backend_fill: ,
-% \@@_backend_fillstroke: ,
-% \@@_backend_clip: ,
-% \@@_backend_discardpath:
-% }
-% Converting paths to output is again a case of mapping directly to
-% PDF operations.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_closepath:
- { \@@_backend_literal:n { h } }
-\cs_new_protected:Npn \@@_backend_stroke:
- { \@@_backend_literal:n { S } }
-\cs_new_protected:Npn \@@_backend_closestroke:
- { \@@_backend_literal:n { s } }
-\cs_new_protected:Npn \@@_backend_fill:
- {
- \@@_backend_literal:e
- { f \bool_if:NT \g_@@_draw_eor_bool * }
- }
-\cs_new_protected:Npn \@@_backend_fillstroke:
- {
- \@@_backend_literal:e
- { B \bool_if:NT \g_@@_draw_eor_bool * }
- }
-\cs_new_protected:Npn \@@_backend_clip:
- {
- \@@_backend_literal:e
- { W \bool_if:NT \g_@@_draw_eor_bool * }
- }
-\cs_new_protected:Npn \@@_backend_discardpath:
- { \@@_backend_literal:n { n } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_dash_pattern:nn}
-% \begin{macro}{\@@_backend_dash:n}
-% \begin{macro}{\@@_backend_linewidth:n}
-% \begin{macro}{\@@_backend_miterlimit:n}
-% \begin{macro}
-% {
-% \@@_backend_cap_butt:, \@@_backend_cap_round:, \@@_backend_cap_rectangle:,
-% \@@_backend_join_miter:, \@@_backend_join_round:, \@@_backend_join_bevel:
-% }
-% Converting paths to output is again a case of mapping directly to
-% PDF operations.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_dash_pattern:nn #1#2
- {
- \@@_backend_literal:e
- {
- [
- \exp_args:Nf \use:n
- { \clist_map_function:nN {#1} \@@_backend_dash:n }
- ] ~
- \dim_to_decimal_in_bp:n {#2} ~ d
- }
- }
-\cs_new:Npn \@@_backend_dash:n #1
- { ~ \dim_to_decimal_in_bp:n {#1} }
-\cs_new_protected:Npn \@@_backend_linewidth:n #1
- {
- \@@_backend_literal:e
- { \dim_to_decimal_in_bp:n {#1} ~ w }
- }
-\cs_new_protected:Npn \@@_backend_miterlimit:n #1
- { \@@_backend_literal:e { #1 ~ M } }
-\cs_new_protected:Npn \@@_backend_cap_butt:
- { \@@_backend_literal:n { 0 ~ J } }
-\cs_new_protected:Npn \@@_backend_cap_round:
- { \@@_backend_literal:n { 1 ~ J } }
-\cs_new_protected:Npn \@@_backend_cap_rectangle:
- { \@@_backend_literal:n { 2 ~ J } }
-\cs_new_protected:Npn \@@_backend_join_miter:
- { \@@_backend_literal:n { 0 ~ j } }
-\cs_new_protected:Npn \@@_backend_join_round:
- { \@@_backend_literal:n { 1 ~ j } }
-\cs_new_protected:Npn \@@_backend_join_bevel:
- { \@@_backend_literal:n { 2 ~ j } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_cm:nnnn}
-% \begin{macro}{\@@_backend_cm_aux:nnnn}
-% Another split here between \LuaTeX{}/pdfTeX{} and \texttt{dvipdfmx}/\XeTeX{}.
-% In the former, we have a direct method to maintain alignment: the backend
-% can use a matrix itself. For \texttt{dvipdfmx}/\XeTeX{}, we can to decompose the
-% matrix into rotations and a scaling, then use those operations as they
-% are handled by the backend. (There is backend support for matrix operations in
-% \texttt{dvipdfmx}/\XeTeX{}, but as a matched pair so not suitable for the
-% \enquote{stand alone} transformation set up here.) The specials used here
-% are from \texttt{xdvipdfmx} originally: they are well-tested, but probably
-% equivalent to the \texttt{pdf:} versions!
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_cm:nnnn #1#2#3#4
- {
-%<*luatex|pdftex>
- \__kernel_backend_matrix:n { #1 ~ #2 ~ #3 ~ #4 }
-%</luatex|pdftex>
-%<*dvipdfmx|xetex>
- \@@_backend_cm_decompose:nnnnN {#1} {#2} {#3} {#4}
- \@@_backend_cm_aux:nnnn
-%</dvipdfmx|xetex>
- }
-%<*dvipdfmx|xetex>
-\cs_new_protected:Npn \@@_backend_cm_aux:nnnn #1#2#3#4
- {
- \__kernel_backend_literal:e
- {
- x:rotate~
- \fp_compare:nNnTF {#1} = \c_zero_fp
- { 0 }
- { \fp_eval:n { round ( -#1 , 5 ) } }
- }
- \__kernel_backend_literal:e
- {
- x:scale~
- \fp_eval:n { round ( #2 , 5 ) } ~
- \fp_eval:n { round ( #3 , 5 ) }
- }
- \__kernel_backend_literal:e
- {
- x:rotate~
- \fp_compare:nNnTF {#4} = \c_zero_fp
- { 0 }
- { \fp_eval:n { round ( -#4 , 5 ) } }
- }
- }
-%</dvipdfmx|xetex>
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_cm_decompose:nnnnN}
-% \begin{macro}
-% {
-% \@@_backend_cm_decompose_auxi:nnnnN,
-% \@@_backend_cm_decompose_auxii:nnnnN,
-% \@@_backend_cm_decompose_auxiii:nnnnN,
-% }
-% Internally, transformations for drawing are tracked as a matrix. Not all
-% engines provide a way of dealing with this: if we use a raw matrix, the
-% engine looses track of positions (for example for hyperlinks), and this is
-% not desirable. They do, however, allow us to track rotations and scalings.
-% Luckily, we can decompose any (two-dimensional) matrix into two rotations
-% and a single scaling:
-% \[
-% \begin{bmatrix}
-% A & B \\ C & D
-% \end{bmatrix}
-% =
-% \begin{bmatrix}
-% \cos\beta & \sin\beta \\ -\sin\beta & \cos\beta
-% \end{bmatrix}
-% \begin{bmatrix}
-% w_{1} & 0 \\ 0 & w_{2}
-% \end{bmatrix}
-% \begin{bmatrix}
-% \cos\gamma & \sin\gamma \\ -\sin\gamma & \cos\gamma
-% \end{bmatrix}
-% \]
-% The parent matrix can be converted to
-% \[
-% \begin{bmatrix}
-% A & B \\ C & D
-% \end{bmatrix}
-% =
-% \begin{bmatrix}
-% E & H \\-H & E
-% \end{bmatrix}
-% +
-% \begin{bmatrix}
-% F & G \\ G & -F
-% \end{bmatrix}
-% \]
-% From these, we can find that
-% \begin{align*}
-% \frac{w_{1} + w_{2}}{2} &= \sqrt{E^{2} + H^{2}} \\
-% \frac{w_{1} - w_{2}}{2} &= \sqrt{F^{2} + G^{2}} \\
-% \gamma - \beta &= \tan^{-1}(G/F) \\
-% \gamma + \beta &= \tan^{-1}(H/E)
-% \end{align*}
-% at which point we just have to do various pieces of re-arrangement to
-% get all of the values. (See J.~Blinn, \emph{IEEE Comput.\ Graph.\ Appl.},
-% 1996, \textbf{16}, 82--88.) There is one wrinkle: the PostScript (and PDF)
-% way of specifying a transformation matrix exchanges where one would
-% normally expect $B$ and $C$ to be.
-% \begin{macrocode}
-%<*dvipdfmx|xetex>
-\cs_new_protected:Npn \@@_backend_cm_decompose:nnnnN #1#2#3#4#5
- {
- \use:e
- {
- \@@_backend_cm_decompose_auxi:nnnnN
- { \fp_eval:n { (#1 + #4) / 2 } }
- { \fp_eval:n { (#1 - #4) / 2 } }
- { \fp_eval:n { (#3 + #2) / 2 } }
- { \fp_eval:n { (#3 - #2) / 2 } }
- }
- #5
- }
-\cs_new_protected:Npn \@@_backend_cm_decompose_auxi:nnnnN #1#2#3#4#5
- {
- \use:e
- {
- \@@_backend_cm_decompose_auxii:nnnnN
- { \fp_eval:n { 2 * sqrt ( #1 * #1 + #4 * #4 ) } }
- { \fp_eval:n { 2 * sqrt ( #2 * #2 + #3 * #3 ) } }
- { \fp_eval:n { atand ( #3 , #2 ) } }
- { \fp_eval:n { atand ( #4 , #1 ) } }
- }
- #5
- }
-\cs_new_protected:Npn \@@_backend_cm_decompose_auxii:nnnnN #1#2#3#4#5
- {
- \use:e
- {
- \@@_backend_cm_decompose_auxiii:nnnnN
- { \fp_eval:n { ( #4 - #3 ) / 2 } }
- { \fp_eval:n { ( #1 + #2 ) / 2 } }
- { \fp_eval:n { ( #1 - #2 ) / 2 } }
- { \fp_eval:n { ( #4 + #3 ) / 2 } }
- }
- #5
- }
-\cs_new_protected:Npn \@@_backend_cm_decompose_auxiii:nnnnN #1#2#3#4#5
- {
- \fp_compare:nNnTF { abs( #2 ) } > { abs ( #3 ) }
- { #5 {#1} {#2} {#3} {#4} }
- { #5 {#1} {#3} {#2} {#4} }
- }
-%</dvipdfmx|xetex>
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_box_use:Nnnnn}
-% Inserting a \TeX{} box transformed to the requested position and using
-% the current matrix is done using a mixture of \TeX{} and low-level
-% manipulation. The offset can be handled by \TeX{}, so only any rotation/^^A
-% skew/scaling component needs to be done using the matrix operation. As this
-% operation can never be cached, the scope is set directly not using the
-% \texttt{draw} version.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_box_use:Nnnnn #1#2#3#4#5
- {
- \__kernel_backend_scope_begin:
-%<*luatex|pdftex>
- \@@_backend_cm:nnnn {#2} {#3} {#4} {#5}
-%</luatex|pdftex>
-%<*dvipdfmx|xetex>
- \__kernel_backend_literal:n
- { pdf:btrans~matrix~ #2 ~ #3 ~ #4 ~ #5 ~ 0 ~ 0 }
-%</dvipdfmx|xetex>
- \hbox_overlap_right:n { \box_use:N #1 }
-%<*dvipdfmx|xetex>
- \__kernel_backend_literal:n { pdf:etrans }
-%</dvipdfmx|xetex>
- \__kernel_backend_scope_end:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvipdfmx|luatex|pdftex|xetex>
-% \end{macrocode}
-%
-% \subsection{\texttt{dvisvgm} backend}
-%
-% \begin{macrocode}
-%<*dvisvgm>
-% \end{macrocode}
-%
-% \begin{macro}{\@@_backend_literal:n, \@@_backend_literal:e}
-% The same as the more general literal call.
-% \begin{macrocode}
-\cs_new_eq:NN \@@_backend_literal:n \__kernel_backend_literal_svg:n
-\cs_generate_variant:Nn \@@_backend_literal:n { e }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_scope_begin:, \@@_backend_scope_end:}
-% Use the backend-level scope mechanisms.
-% \begin{macrocode}
-\cs_new_eq:NN \@@_backend_scope_begin: \__kernel_backend_scope_begin:
-\cs_new_eq:NN \@@_backend_scope_end: \__kernel_backend_scope_end:
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_begin:, \@@_backend_end:}
-% A drawing needs to be set up such that the co-ordinate system is
-% translated. That is done inside a scope, which as described below
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_begin:
- {
- \__kernel_backend_scope_begin:
- \__kernel_backend_scope:n { transform="translate({?x},{?y})~scale(1,-1)" }
- }
-\cs_new_eq:NN \@@_backend_end: \__kernel_backend_scope_end:
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_moveto:nn, \@@_backend_lineto:nn}
-% \begin{macro}{\@@_backend_rectangle:nnnn}
-% \begin{macro}{\@@_backend_curveto:nnnnnn}
-% \begin{macro}{\@@_backend_add_to_path:n}
-% \begin{variable}{\g_@@_backend_path_tl}
-% Once again, some work is needed to get path constructs correct. Rather
-% then write the values as they are given, the entire path needs to be
-% collected up before being output in one go. For that we use a dedicated
-% storage routine, which adds spaces as required. Since paths should
-% be fully expanded there is no need to worry about the internal
-% \texttt{x}-type expansion.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_moveto:nn #1#2
- {
- \@@_backend_add_to_path:n
- { M ~ \dim_to_decimal:n {#1} ~ \dim_to_decimal:n {#2} }
- }
-\cs_new_protected:Npn \@@_backend_lineto:nn #1#2
- {
- \@@_backend_add_to_path:n
- { L ~ \dim_to_decimal:n {#1} ~ \dim_to_decimal:n {#2} }
- }
-\cs_new_protected:Npn \@@_backend_rectangle:nnnn #1#2#3#4
- {
- \@@_backend_add_to_path:n
- {
- M ~ \dim_to_decimal:n {#1} ~ \dim_to_decimal:n {#2}
- h ~ \dim_to_decimal:n {#3} ~
- v ~ \dim_to_decimal:n {#4} ~
- h ~ \dim_to_decimal:n { -#3 } ~
- Z
- }
- }
-\cs_new_protected:Npn \@@_backend_curveto:nnnnnn #1#2#3#4#5#6
- {
- \@@_backend_add_to_path:n
- {
- C ~
- \dim_to_decimal:n {#1} ~ \dim_to_decimal:n {#2} ~
- \dim_to_decimal:n {#3} ~ \dim_to_decimal:n {#4} ~
- \dim_to_decimal:n {#5} ~ \dim_to_decimal:n {#6}
- }
- }
-\cs_new_protected:Npn \@@_backend_add_to_path:n #1
- {
- \tl_gset:Ne \g_@@_backend_path_tl
- {
- \g_@@_backend_path_tl
- \tl_if_empty:NF \g_@@_backend_path_tl { \c_space_tl }
- #1
- }
- }
-\tl_new:N \g_@@_backend_path_tl
-% \end{macrocode}
-% \end{variable}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_evenodd_rule:, \@@_backend_nonzero_rule:}
-% The fill rules here have to be handled as scopes.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_evenodd_rule:
- { \__kernel_backend_scope:n { fill-rule="evenodd" } }
-\cs_new_protected:Npn \@@_backend_nonzero_rule:
- { \__kernel_backend_scope:n { fill-rule="nonzero" } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_path:n}
-% \begin{macro}
-% {
-% \@@_backend_closepath: ,
-% \@@_backend_stroke: ,
-% \@@_backend_closestroke: ,
-% \@@_backend_fill: ,
-% \@@_backend_fillstroke: ,
-% \@@_backend_clip: ,
-% \@@_backend_discardpath:
-% }
-% \begin{variable}{\g_@@_draw_clip_bool}
-% \begin{variable}{\g_@@_draw_path_int}
-% Setting fill and stroke effects and doing clipping all has to be done using
-% scopes. This means setting up the various requirements in a shared
-% auxiliary which deals with the bits and pieces. Clipping paths are reused
-% for path drawing: not essential but avoids constructing them twice.
-% Discarding a path needs a separate function as it's not quite the same.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_closepath:
- { \@@_backend_add_to_path:n { Z } }
-\cs_new_protected:Npn \@@_backend_path:n #1
- {
- \bool_if:NTF \g_@@_draw_clip_bool
- {
- \int_gincr:N \g__kernel_clip_path_int
- \@@_backend_literal:e
- {
- < clipPath~id = " l3cp \int_use:N \g__kernel_clip_path_int " >
- { ?nl }
- <path~d=" \g_@@_backend_path_tl "/> { ?nl }
- < /clipPath > { ? nl }
- <
- use~xlink:href =
- "\c_hash_str l3path \int_use:N \g_@@_backend_path_int " ~
- #1
- />
- }
- \__kernel_backend_scope:e
- {
- clip-path =
- "url( \c_hash_str l3cp \int_use:N \g__kernel_clip_path_int)"
- }
- }
- {
- \@@_backend_literal:e
- { <path ~ d=" \g_@@_backend_path_tl " ~ #1 /> }
- }
- \tl_gclear:N \g_@@_backend_path_tl
- \bool_gset_false:N \g_@@_draw_clip_bool
- }
-\int_new:N \g_@@_backend_path_int
-\cs_new_protected:Npn \@@_backend_stroke:
- { \@@_backend_path:n { style="fill:none" } }
-\cs_new_protected:Npn \@@_backend_closestroke:
- {
- \@@_backend_closepath:
- \@@_backend_stroke:
- }
-\cs_new_protected:Npn \@@_backend_fill:
- { \@@_backend_path:n { style="stroke:none" } }
-\cs_new_protected:Npn \@@_backend_fillstroke:
- { \@@_backend_path:n { } }
-\cs_new_protected:Npn \@@_backend_clip:
- { \bool_gset_true:N \g_@@_draw_clip_bool }
-\bool_new:N \g_@@_draw_clip_bool
-\cs_new_protected:Npn \@@_backend_discardpath:
- {
- \bool_if:NT \g_@@_draw_clip_bool
- {
- \int_gincr:N \g__kernel_clip_path_int
- \@@_backend_literal:e
- {
- < clipPath~id = " l3cp \int_use:N \g__kernel_clip_path_int " >
- { ?nl }
- <path~d=" \g_@@_backend_path_tl "/> { ?nl }
- < /clipPath >
- }
- \__kernel_backend_scope:e
- {
- clip-path =
- "url( \c_hash_str l3cp \int_use:N \g__kernel_clip_path_int)"
- }
- }
- \tl_gclear:N \g_@@_backend_path_tl
- \bool_gset_false:N \g_@@_draw_clip_bool
- }
-% \end{macrocode}
-% \end{variable}
-% \end{variable}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_dash_pattern:nn}
-% \begin{macro}{\@@_backend_dash:n}
-% \begin{macro}{\@@_backend_dash_aux:nn}
-% \begin{macro}{\@@_backend_linewidth:n}
-% \begin{macro}{\@@_backend_miterlimit:n}
-% \begin{macro}
-% {
-% \@@_backend_cap_butt:, \@@_backend_cap_round:, \@@_backend_cap_rectangle:,
-% \@@_backend_join_miter:, \@@_backend_join_round:, \@@_backend_join_bevel:
-% }
-% All of these ideas are properties of scopes in SVG. The only slight
-% complexity is converting the dash array properly (doing any required
-% maths).
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_dash_pattern:nn #1#2
- {
- \use:e
- {
- \@@_backend_dash_aux:nn
- { \clist_map_function:nN {#1} \@@_backend_dash:n }
- { \dim_to_decimal:n {#2} }
- }
- }
-\cs_new:Npn \@@_backend_dash:n #1
- { , \dim_to_decimal_in_bp:n {#1} }
-\cs_new_protected:Npn \@@_backend_dash_aux:nn #1#2
- {
- \__kernel_backend_scope:e
- {
- stroke-dasharray =
- "
- \tl_if_empty:nTF {#1}
- { none }
- { \use_none:n #1 }
- " ~
- stroke-offset=" #2 "
- }
- }
-\cs_new_protected:Npn \@@_backend_linewidth:n #1
- { \__kernel_backend_scope:e { stroke-width=" \dim_to_decimal:n {#1} " } }
-\cs_new_protected:Npn \@@_backend_miterlimit:n #1
- { \__kernel_backend_scope:e { stroke-miterlimit=" #1 " } }
-\cs_new_protected:Npn \@@_backend_cap_butt:
- { \__kernel_backend_scope:n { stroke-linecap="butt" } }
-\cs_new_protected:Npn \@@_backend_cap_round:
- { \__kernel_backend_scope:n { stroke-linecap="round" } }
-\cs_new_protected:Npn \@@_backend_cap_rectangle:
- { \__kernel_backend_scope:n { stroke-linecap="square" } }
-\cs_new_protected:Npn \@@_backend_join_miter:
- { \__kernel_backend_scope:n { stroke-linejoin="miter" } }
-\cs_new_protected:Npn \@@_backend_join_round:
- { \__kernel_backend_scope:n { stroke-linejoin="round" } }
-\cs_new_protected:Npn \@@_backend_join_bevel:
- { \__kernel_backend_scope:n { stroke-linejoin="bevel" } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_cm:nnnn}
-% The four arguments here are floats (the affine matrix), the last
-% two are a displacement vector.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_cm:nnnn #1#2#3#4
- {
- \__kernel_backend_scope:n
- {
- transform =
- " matrix ( #1 , #2 , #3 , #4 , 0pt , 0pt ) "
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_box_use:Nnnnn}
-% No special savings can be made here: simply displace the box inside
-% a scope. As there is nothing to re-box, just make the box passed of
-% zero size.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_box_use:Nnnnn #1#2#3#4#5
- {
- \__kernel_backend_scope_begin:
- \@@_backend_cm:nnnn {#2} {#3} {#4} {#5}
- \__kernel_backend_literal_svg:n
- {
- < g~
- stroke="none"~
- transform="scale(-1,1)~translate({?x},{?y})~scale(-1,-1)"
- >
- }
- \box_set_wd:Nn #1 { 0pt }
- \box_set_ht:Nn #1 { 0pt }
- \box_set_dp:Nn #1 { 0pt }
- \box_use:N #1
- \__kernel_backend_literal_svg:n { </g> }
- \__kernel_backend_scope_end:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvisvgm>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3backend/l3backend-graphics.dtx b/macros/latex/contrib/l3backend/l3backend-graphics.dtx
deleted file mode 100644
index 9360bffd2e..0000000000
--- a/macros/latex/contrib/l3backend/l3backend-graphics.dtx
+++ /dev/null
@@ -1,931 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3backend-graphics.dtx
-%
-% Copyright (C) 2019-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3backend bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3backend-graphics} module\\ Backend graphics support^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3backend-graphics} implementation}
-%
-% \begin{macrocode}
-%<*package>
-%<@@=graphics>
-% \end{macrocode}
-%
-% \begin{macro}{\@@_backend_loaded:n}
-% To deal with file load ordering. Plain users are on their own.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_loaded:n #1
- {
- \cs_if_exist:NTF \hook_gput_code:nnn
- {
- \hook_gput_code:nnn
- { package / l3graphics / after }
- { backend }
- {#1}
- }
- {#1}
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{\texttt{dvips} backend}
-%
-% \begin{macrocode}
-%<*dvips>
-% \end{macrocode}
-%
-% \begin{variable}[no-user-doc]{\l_graphics_search_ext_seq}
-% \begin{macrocode}
-\@@_backend_loaded:n
- { \seq_set_from_clist:Nn \l_graphics_search_ext_seq { .eps , .ps } }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\@@_backend_getbb_eps:n, \@@_backend_getbb_ps:n}
-% Simply use the generic function.
-% \begin{macrocode}
-\@@_backend_loaded:n
- {
- \cs_new_eq:NN \@@_backend_getbb_eps:n \@@_read_bb:n
- \cs_new_eq:NN \@@_backend_getbb_ps:n \@@_read_bb:n
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_include_eps:n, \@@_backend_include_ps:n}
-% The special syntax is relatively clear here: remember we need PostScript
-% sizes here.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_include_eps:n #1
- {
- \__kernel_backend_literal:e
- {
- PSfile = #1 \c_space_tl
- llx = \dim_to_decimal_in_bp:n \l_@@_llx_dim \c_space_tl
- lly = \dim_to_decimal_in_bp:n \l_@@_lly_dim \c_space_tl
- urx = \dim_to_decimal_in_bp:n \l_@@_urx_dim \c_space_tl
- ury = \dim_to_decimal_in_bp:n \l_@@_ury_dim
- }
- }
-\cs_new_eq:NN \@@_backend_include_ps:n \@@_backend_include_eps:n
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_get_pagecount:n}
-% \begin{macrocode}
-\@@_backend_loaded:n
- { \cs_new_eq:NN \@@_backend_get_pagecount:n \@@_get_pagecount:n }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvips>
-% \end{macrocode}
-%
-% \subsection{\LuaTeX{} and \pdfTeX{} backends}
-%
-% \begin{macrocode}
-%<*luatex|pdftex>
-% \end{macrocode}
-%
-% \begin{variable}[no-user-doc]{\l_graphics_search_ext_seq}
-% \begin{macrocode}
-\@@_backend_loaded:n
- {
- \seq_set_from_clist:Nn
- \l_graphics_search_ext_seq
- { .pdf , .eps , .ps , .png , .jpg , .jpeg }
- }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_attr_tl}
-% In PDF mode, additional attributes of an graphic (such as page number) are
-% needed both to obtain the bounding box and when inserting the graphic: this
-% occurs as the graphic dictionary approach means they are read as part of
-% the bounding box operation. As such, it is easier to track additional
-% attributes using a dedicated |tl| rather than build up the same data
-% twice.
-% \begin{macrocode}
-\tl_new:N \l_@@_attr_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}
-% {
-% \@@_backend_getbb_jpg:n ,
-% \@@_backend_getbb_jpeg:n ,
-% \@@_backend_getbb_pdf:n ,
-% \@@_backend_getbb_png:n
-% }
-% \begin{macro}
-% {
-% \@@_backend_getbb_auxi:n ,
-% \@@_backend_getbb_auxii:n ,
-% \@@_backend_getbb_auxiii:n
-% }
-% \begin{macro}[EXP]{\@@_backend_dequote:w}
-% Getting the bounding box here requires us to box up the graphic and
-% measure it. To deal with the difference in feature support in bitmap
-% and vector graphics but keeping the common parts, there is a little work
-% to do in terms of auxiliaries. The key here is to notice that we need
-% two forms of the attributes: a \enquote{short} set to allow us to
-% track for caching, and the full form to pass to the primitive.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_getbb_jpg:n #1
- {
- \int_zero:N \l_@@_page_int
- \tl_clear:N \l_@@_pagebox_tl
- \tl_set:Ne \l_@@_attr_tl
- {
- \tl_if_empty:NF \l_@@_decodearray_str
- { :D \l_@@_decodearray_str }
- \bool_if:NT \l_@@_interpolate_bool
- { :I }
- \str_if_empty:NF \l_@@_pdf_str
- { :X \l_@@_pdf_str }
- }
- \@@_backend_getbb_auxi:n {#1}
- }
-\cs_new_eq:NN \@@_backend_getbb_jpeg:n \@@_backend_getbb_jpg:n
-\cs_new_eq:NN \@@_backend_getbb_png:n \@@_backend_getbb_jpg:n
-\cs_new_protected:Npn \@@_backend_getbb_pdf:n #1
- {
- \tl_clear:N \l_@@_decodearray_str
- \bool_set_false:N \l_@@_interpolate_bool
- \tl_set:Ne \l_@@_attr_tl
- {
- : \l_@@_pagebox_tl
- \int_compare:nNnT \l_@@_page_int > 1
- { :P \int_use:N \l_@@_page_int }
- \str_if_empty:NF \l_@@_pdf_str
- { :X \l_@@_pdf_str }
- }
- \@@_backend_getbb_auxi:n {#1}
- }
-\cs_new_protected:Npn \@@_backend_getbb_auxi:n #1
- {
- \@@_bb_restore:eF { #1 \l_@@_attr_tl }
- { \@@_backend_getbb_auxii:n {#1} }
- }
-% \end{macrocode}
-% Measuring the graphic is done by boxing up: for PDF graphics we could
-% use |\tex_pdfximagebbox:D|, but if doesn't work for other types.
-% As the box always starts at $(0,0)$ there is no need to worry about
-% the lower-left position. Quotes need to be \emph{removed} as \LuaTeX{}
-% does not like them here.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_getbb_auxii:n #1
- {
- \exp_args:Ne \@@_backend_getbb_auxiii:n
- { \@@_backend_dequote:w #1 " #1 " \s_@@_stop }
- \int_const:cn { c_@@_ #1 \l_@@_attr_tl _int }
- { \tex_the:D \tex_pdflastximage:D }
- \@@_bb_save:e { #1 \l_@@_attr_tl }
- }
-\cs_new_protected:Npn \@@_backend_getbb_auxiii:n #1
- {
- \tex_immediate:D \tex_pdfximage:D
- \bool_lazy_any:nT
- {
- { \l_@@_interpolate_bool }
- { ! \tl_if_empty_p:N \l_@@_decodearray_str }
- { ! \str_if_empty_p:N \l_@@_pdf_str }
- }
- {
- attr ~
- {
- \tl_if_empty:NF \l_@@_decodearray_str
- { /Decode~[ \l_@@_decodearray_str ] }
- \bool_if:NT \l_@@_interpolate_bool
- { /Interpolate~true }
- \l_@@_pdf_str
- }
- }
- \int_compare:nNnT \l_@@_page_int > 0
- { page ~ \int_use:N \l_@@_page_int }
- \tl_if_empty:NF \l_@@_pagebox_tl
- { \l_@@_pagebox_tl }
- {#1}
- \hbox_set:Nn \l_@@_internal_box
- { \tex_pdfrefximage:D \tex_pdflastximage:D }
- \dim_set:Nn \l_@@_urx_dim { \box_wd:N \l_@@_internal_box }
- \dim_set:Nn \l_@@_ury_dim { \box_ht:N \l_@@_internal_box }
- }
-\cs_new:Npn \@@_backend_dequote:w #1 " #2 " #3 \s_@@_stop {#2}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \@@_backend_include_jpg:n ,
-% \@@_backend_include_jpeg:n ,
-% \@@_backend_include_pdf:n ,
-% \@@_backend_include_png:n
-% }
-% Images are already loaded for the measurement part of the code, so
-% inclusion is straight-forward, with only any attributes to worry about. The
-% latter carry through from determination of the bounding box.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_include_jpg:n #1
- {
- \tex_pdfrefximage:D
- \int_use:c { c_@@_ #1 \l_@@_attr_tl _int }
- }
-\cs_new_eq:NN \@@_backend_include_jpeg:n \@@_backend_include_jpg:n
-\cs_new_eq:NN \@@_backend_include_pdf:n \@@_backend_include_jpg:n
-\cs_new_eq:NN \@@_backend_include_png:n \@@_backend_include_jpg:n
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_getbb_eps:n, \@@_backend_getbb_ps:n}
-% \begin{macro}{\@@_backend_getbb_eps:nm}
-% \begin{macro}{\@@_backend_include_eps:n, \@@_backend_include_ps:n}
-% \begin{variable}
-% {\l_@@_backend_dir_str, \l_@@_backend_name_str, \l_@@_backend_ext_str}
-% EPS graphics may be included in \LuaTeX{}/pdfTeX{} by conversion to
-% PDF: this requires restricted shell escape. Modelled on the \pkg{epstopdf}
-% \LaTeXe{} package, but simplified, conversion takes place here if we have
-% shell access.
-% \begin{macrocode}
-\sys_if_shell:T
- {
- \str_new:N \l_@@_backend_dir_str
- \str_new:N \l_@@_backend_name_str
- \str_new:N \l_@@_backend_ext_str
- \cs_new_protected:Npn \@@_backend_getbb_eps:n #1
- {
- \file_parse_full_name:nNNN {#1}
- \l_@@_backend_dir_str
- \l_@@_backend_name_str
- \l_@@_backend_ext_str
- \exp_args:Ne \@@_backend_getbb_eps:nn
- {
- \exp_args:Ne \__kernel_file_name_quote:n
- {
- \l_@@_backend_name_str
- - \str_tail:N \l_@@_backend_ext_str
- -converted-to.pdf
- }
- }
- {#1}
- }
- \cs_new_eq:NN \@@_backend_getbb_ps:n \@@_backend_getbb_eps:n
- \cs_new_protected:Npn \@@_backend_getbb_eps:nn #1#2
- {
- \file_compare_timestamp:nNnT {#2} > {#1}
- {
- \sys_shell_now:n
- { repstopdf ~ #2 ~ #1 }
- }
- \tl_set:Nn \l_@@_final_name_str {#1}
- \@@_backend_getbb_pdf:n {#1}
- }
- \cs_new_protected:Npn \@@_backend_include_eps:n #1
- {
- \file_parse_full_name:nNNN {#1}
- \l_@@_backend_dir_str \l_@@_backend_name_str \l_@@_backend_ext_str
- \exp_args:Ne \@@_backend_include_pdf:n
- {
- \exp_args:Ne \__kernel_file_name_quote:n
- {
- \l_@@_backend_name_str
- - \str_tail:N \l_@@_backend_ext_str
- -converted-to.pdf
- }
- }
- }
- \cs_new_eq:NN \@@_backend_include_ps:n \@@_backend_include_eps:n
- }
-% \end{macrocode}
-% \end{variable}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_get_pagecount:n}
-% Simply load and store.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_get_pagecount:n #1
- {
- \tex_pdfximage:D {#1}
- \int_const:cn { c_@@_ #1 _pages_int }
- { \int_use:N \tex_pdflastximagepages:D }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</luatex|pdftex>
-% \end{macrocode}
-%
-% \subsection{\texttt{dvipdfmx} backend}
-%
-% \begin{macrocode}
-%<*dvipdfmx|xetex>
-% \end{macrocode}
-%
-% \begin{variable}[no-user-doc]{\l_graphics_search_ext_seq}
-% \begin{macrocode}
-\@@_backend_loaded:n
- {
- \seq_set_from_clist:Nn \l_graphics_search_ext_seq
- { .pdf , .eps , .ps , .png , .jpg , .jpeg , .bmp }
- }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}
-% {
-% \@@_backend_getbb_eps:n , \@@_backend_getbb_ps:n ,
-% \@@_backend_getbb_jpg:n , \@@_backend_getbb_jpeg:n ,
-% \@@_backend_getbb_pdf:n , \@@_backend_getbb_png:n ,
-% \@@_backend_getbb_bmp:n
-% }
-% Simply use the generic functions: only for \texttt{dvipdfmx} in the
-% extraction cases.
-% \begin{macrocode}
-\@@_backend_loaded:n
- {
- \cs_new_eq:NN \@@_backend_getbb_eps:n \@@_read_bb:n
- \cs_new_eq:NN \@@_backend_getbb_ps:n \@@_read_bb:n
- }
-%<*dvipdfmx>
-\cs_new_protected:Npn \@@_backend_getbb_jpg:n #1
- {
- \int_zero:N \l_@@_page_int
- \tl_clear:N \l_@@_pagebox_tl
- \@@_extract_bb:n {#1}
- }
-\cs_new_eq:NN \@@_backend_getbb_jpeg:n \@@_backend_getbb_jpg:n
-\cs_new_eq:NN \@@_backend_getbb_png:n \@@_backend_getbb_jpg:n
-\cs_new_eq:NN \@@_backend_getbb_bmp:n \@@_backend_getbb_jpg:n
-\cs_new_protected:Npn \@@_backend_getbb_pdf:n #1
- {
- \tl_clear:N \l_@@_decodearray_str
- \bool_set_false:N \l_@@_interpolate_bool
- \@@_extract_bb:n {#1}
- }
-%</dvipdfmx>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\g_@@_track_int}
-% Used to track the object number associated with each graphic.
-% \begin{macrocode}
-\int_new:N \g_@@_track_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}
-% {
-% \@@_backend_include_eps:n , \@@_backend_include_ps:n ,
-% \@@_backend_include_jpg:n , \@@_backend_include_jpseg:n ,
-% \@@_backend_include_pdf:n , \@@_backend_include_png:n ,
-% \@@_backend_include_bmp:n ,
-% }
-% \begin{macro}{\@@_backend_include_auxi:nn}
-% \begin{macro}{\@@_backend_include_auxii:nnn, \@@_backend_include_auxii:enn}
-% \begin{macro}{\@@_backend_include_auxiii:nnn}
-% The special syntax depends on the file type. There is a difference in
-% how PDF graphics are best handled between |dvipdfmx| and \XeTeX{}: for
-% the latter it is better to use the primitive route. The relevant code for
-% that is included later in this file.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_include_eps:n #1
- {
- \__kernel_backend_literal:e
- {
- PSfile = #1 \c_space_tl
- llx = \dim_to_decimal_in_bp:n \l_@@_llx_dim \c_space_tl
- lly = \dim_to_decimal_in_bp:n \l_@@_lly_dim \c_space_tl
- urx = \dim_to_decimal_in_bp:n \l_@@_urx_dim \c_space_tl
- ury = \dim_to_decimal_in_bp:n \l_@@_ury_dim
- }
- }
-\cs_new_eq:NN \@@_backend_include_ps:n \@@_backend_include_eps:n
-\cs_new_protected:Npn \@@_backend_include_jpg:n #1
- { \@@_backend_include_auxi:nn {#1} { image } }
-\cs_new_eq:NN \@@_backend_include_jpeg:n \@@_backend_include_jpg:n
-\cs_new_eq:NN \@@_backend_include_png:n \@@_backend_include_jpg:n
-\cs_new_eq:NN \@@_backend_include_bmp:n \@@_backend_include_jpg:n
-%<*dvipdfmx>
-\cs_new_protected:Npn \@@_backend_include_pdf:n #1
- { \@@_backend_include_auxi:nn {#1} { epdf } }
-%</dvipdfmx>
-% \end{macrocode}
-% Graphic inclusion is set up to use the fact that each image is stored in
-% the PDF as an XObject. This means that we can include repeated images
-% only once and refer to them. To allow that, track the nature of each
-% image: much the same as for the direct PDF mode case.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_include_auxi:nn #1#2
- {
- \@@_backend_include_auxii:enn
- {
- \tl_if_empty:NF \l_@@_pagebox_tl
- { : \l_@@_pagebox_tl }
- \int_compare:nNnT \l_@@_page_int > 1
- { :P \int_use:N \l_@@_page_int }
- \tl_if_empty:NF \l_@@_decodearray_str
- { :D \l_@@_decodearray_str }
- \bool_if:NT \l_@@_interpolate_bool
- { :I }
- }
- {#1} {#2}
- }
-\cs_new_protected:Npn \@@_backend_include_auxii:nnn #1#2#3
- {
- \int_if_exist:cTF { c_@@_ #2#1 _int }
- {
- \__kernel_backend_literal:e
- { pdf:usexobj~@graphic \int_use:c { c_@@_ #2#1 _int } }
- }
- { \@@_backend_include_auxiii:nnn {#2} {#1} {#3} }
- }
-\cs_generate_variant:Nn \@@_backend_include_auxii:nnn { e }
-% \end{macrocode}
-% Inclusion using the specials is relatively straight-forward, but there
-% is one wrinkle. To get the |pagebox| correct for PDF graphics in all cases,
-% it is necessary to provide both that information and the |bbox| argument:
-% odd things happen otherwise!
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_include_auxiii:nnn #1#2#3
- {
- \int_gincr:N \g_@@_track_int
- \int_const:cn { c_@@_ #1#2 _int } { \g_@@_track_int }
- \__kernel_backend_literal:e
- {
- pdf:#3~
- @graphic \int_use:c { c_@@_ #1#2 _int } ~
- \int_compare:nNnT \l_@@_page_int > 1
- { page ~ \int_use:N \l_@@_page_int \c_space_tl }
- \tl_if_empty:NF \l_@@_pagebox_tl
- {
- pagebox ~ \l_@@_pagebox_tl \c_space_tl
- bbox ~
- \dim_to_decimal_in_bp:n \l_@@_llx_dim \c_space_tl
- \dim_to_decimal_in_bp:n \l_@@_lly_dim \c_space_tl
- \dim_to_decimal_in_bp:n \l_@@_urx_dim \c_space_tl
- \dim_to_decimal_in_bp:n \l_@@_ury_dim \c_space_tl
- }
- (#1)
- \bool_lazy_or:nnT
- { \l_@@_interpolate_bool }
- { ! \tl_if_empty_p:N \l_@@_decodearray_str }
- {
- <<
- \tl_if_empty:NF \l_@@_decodearray_str
- { /Decode~[ \l_@@_decodearray_str ] }
- \bool_if:NT \l_@@_interpolate_bool
- { /Interpolate~true }
- >>
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_get_pagecount:n}
-% \begin{macrocode}
-%<*dvipdfmx>
-\@@_backend_loaded:n
- { \cs_new_eq:NN \@@_backend_get_pagecount:n \@@_get_pagecount:n }
-%</dvipdfmx>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvipdfmx|xetex>
-% \end{macrocode}
-%
-% \subsection{\XeTeX{} backend}
-%
-% \begin{macrocode}
-%<*xetex>
-% \end{macrocode}
-%
-% \begin{macro}
-% {
-% \@@_backend_getbb_jpg:n ,
-% \@@_backend_getbb_jpeg:n ,
-% \@@_backend_getbb_pdf:n ,
-% \@@_backend_getbb_png:n ,
-% \@@_backend_getbb_bmp:n
-% }
-% \begin{macro}{\@@_backend_getbb_auxi:nN}
-% \begin{macro}{\@@_backend_getbb_auxii:nnN, \@@_backend_getbb_auxii:VnN}
-% \begin{macro}{\@@_backend_getbb_auxiii:nNnn}
-% \begin{macro}{\@@_backend_getbb_auxiv:nnNnn, \@@_backend_getbb_auxiv:VnNnn}
-% \begin{macro}{\@@_backend_getbb_auxv:nNnn, \@@_backend_getbb_auxv:nNnn}
-% \begin{macro}[EXP]{\@@_backend_getbb_pagebox:w}
-% For \XeTeX{}, there are two primitives that allow us to obtain
-% the bounding box without needing \texttt{extractbb}. The only complexity
-% is passing the various minor variations to a common core process. The
-% \XeTeX{} primitive omits the text |box| from the page box specification,
-% so there is also some \enquote{trimming} to do here.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_getbb_jpg:n #1
- {
- \int_zero:N \l_@@_page_int
- \tl_clear:N \l_@@_pagebox_tl
- \@@_backend_getbb_auxi:nN {#1} \tex_XeTeXpicfile:D
- }
-\cs_new_eq:NN \@@_backend_getbb_jpeg:n \@@_backend_getbb_jpg:n
-\cs_new_eq:NN \@@_backend_getbb_png:n \@@_backend_getbb_jpg:n
-\cs_new_eq:NN \@@_backend_getbb_bmp:n \@@_backend_getbb_jpg:n
-\cs_new_protected:Npn \@@_backend_getbb_pdf:n #1
- {
- \tl_clear:N \l_@@_decodearray_str
- \bool_set_false:N \l_@@_interpolate_bool
- \@@_backend_getbb_auxi:nN {#1} \tex_XeTeXpdffile:D
- }
-\cs_new_protected:Npn \@@_backend_getbb_auxi:nN #1#2
- {
- \int_compare:nNnTF \l_@@_page_int > 1
- { \@@_backend_getbb_auxii:VnN \l_@@_page_int {#1} #2 }
- { \@@_backend_getbb_auxiii:nNnn {#1} #2 { :P 1 } { page 1 } }
- }
-\cs_new_protected:Npn \@@_backend_getbb_auxii:nnN #1#2#3
- { \@@_backend_getbb_auxiii:nNnn {#2} #3 { :P #1 } { page #1 } }
-\cs_generate_variant:Nn \@@_backend_getbb_auxii:nnN { V }
-\cs_new_protected:Npn \@@_backend_getbb_auxiii:nNnn #1#2#3#4
- {
- \tl_if_empty:NTF \l_@@_pagebox_tl
- { \@@_backend_getbb_auxiv:VnNnn \l_@@_pagebox_tl }
- { \@@_backend_getbb_auxv:nNnn }
- {#1} #2 {#3} {#4}
- }
-\cs_new_protected:Npn \@@_backend_getbb_auxiv:nnNnn #1#2#3#4#5
- {
- \use:e
- {
- \@@_backend_getbb_auxv:nNnn {#2} #3 { : #1 #4 }
- {
- #5
- \tl_if_blank:nF {#1}
- { \c_space_tl \@@_backend_getbb_pagebox:w #1 }
- }
- }
- }
-\cs_generate_variant:Nn \@@_backend_getbb_auxiv:nnNnn { V }
-\cs_new_protected:Npn \@@_backend_getbb_auxv:nNnn #1#2#3#4
- {
- \@@_bb_restore:nF {#1#3}
- { \@@_backend_getbb_auxvi:nNnn {#1} #2 {#3} {#4} }
- }
-\cs_new_protected:Npn \@@_backend_getbb_auxvi:nNnn #1#2#3#4
- {
- \hbox_set:Nn \l_@@_internal_box { #2 #1 ~ #4 }
- \dim_set:Nn \l_@@_urx_dim { \box_wd:N \l_@@_internal_box }
- \dim_set:Nn \l_@@_ury_dim { \box_ht:N \l_@@_internal_box }
- \@@_bb_save:n {#1#3}
- }
-\cs_new:Npn \@@_backend_getbb_pagebox:w #1 box {#1}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_include_pdf:n}
-% For PDF graphics, properly supporting the |pagebox| concept in \XeTeX{}
-% is best done using the |\tex_XeTeXpdffile:D| primitive. The syntax here
-% is the same as for the graphic measurement part, although we know at this
-% stage that there must be some valid setting for \cs{l_@@_pagebox_tl}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_include_pdf:n #1
- {
- \tex_XeTeXpdffile:D #1 ~
- \int_compare:nNnT \l_@@_page_int > 0
- { page ~ \int_use:N \l_@@_page_int \c_space_tl }
- \exp_after:wN \@@_backend_getbb_pagebox:w \l_@@_pagebox_tl
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_get_pagecount:n}
-% Very little to do here other than cover the case of a non-PDF file.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_get_pagecount:n #1
- {
- \int_const:cn { c_@@_ #1 _pages_int }
- {
- \int_max:nn
- { \int_use:N \tex_XeTeXpdfpagecount:D #1 ~ }
- { 1 }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</xetex>
-% \end{macrocode}
-%
-% \subsection{\texttt{dvisvgm} backend}
-%
-% \begin{macrocode}
-%<*dvisvgm>
-% \end{macrocode}
-%
-% \begin{variable}[no-user-doc]{\l_graphics_search_ext_seq}
-% \begin{macrocode}
-\@@_backend_loaded:n
- {
- \seq_set_from_clist:Nn
- \l_graphics_search_ext_seq
- { .svg , .pdf , .eps , .ps , .png , .jpg , .jpeg }
- }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\@@_backend_getbb_svg:n}
-% \begin{macro}{\@@_backend_getbb_svg_auxi:nNn}
-% \begin{macro}{\@@_backend_getbb_svg_auxii:w}
-% \begin{macro}
-% {
-% \@@_backend_getbb_svg_auxiii:Nw ,
-% \@@_backend_getbb_svg_auxiv:Nw ,
-% \@@_backend_getbb_svg_auxv:Nw
-% }
-% \begin{macro}{\@@_backend_getbb_svg_auxvi:Nn}
-% \begin{macro}{\@@_backend_getbb_svg_auxvii:w}
-% This is relatively similar to reading bounding boxes for |.eps| files. Life
-% is though made more tricky as we cannot pick a single line for the data. So
-% we have to loop until we collect up both height and width. To do that, we
-% can use a marker value. We also have to allow for the default units of the
-% lengths: they are big points and may be omitted.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_getbb_svg:n #1
- {
- \@@_bb_restore:nF {#1}
- {
- \ior_open:Nn \l_@@_internal_ior {#1}
- \ior_if_eof:NTF \l_@@_internal_ior
- { \msg_error:nnn { graphics } { graphic-not-found } {#1} }
- {
- \dim_zero:N \l_@@_llx_dim
- \dim_zero:N \l_@@_lly_dim
- \dim_set:Nn \l_@@_urx_dim { -\c_max_dim }
- \dim_set:Nn \l_@@_ury_dim { -\c_max_dim }
- \ior_str_map_inline:Nn \l_@@_internal_ior
- {
- \dim_compare:nNnT \l_@@_urx_dim = { -\c_max_dim }
- {
- \@@_backend_getbb_svg_auxi:nNn
- { width } \l_@@_urx_dim {##1}
- }
- \dim_compare:nNnT \l_@@_ury_dim = { -\c_max_dim }
- {
- \@@_backend_getbb_svg_auxi:nNn
- { height } \l_@@_ury_dim {##1}
- }
- \bool_lazy_and:nnF
- { \dim_compare_p:nNn \l_@@_urx_dim = { -\c_max_dim } }
- { \dim_compare_p:nNn \l_@@_ury_dim = { -\c_max_dim } }
- { \ior_map_break: }
- }
- \@@_bb_save:n {#1}
- }
- \ior_close:N \l_@@_internal_ior
- }
- }
-\cs_new_protected:Npn \@@_backend_getbb_svg_auxi:nNn #1#2#3
- {
- \use:e
- {
- \cs_set_protected:Npn \@@_backend_getbb_svg_auxii:w
- ##1 \tl_to_str:n {#1} = ##2 \tl_to_str:n {#1} = ##3
- \s_@@_stop
- }
- {
- \tl_if_blank:nF {##2}
- {
- \peek_remove_spaces:n
- {
- \peek_meaning:NTF ' % '
- { \@@_backend_getbb_svg_auxiii:Nw #2 }
- {
- \peek_meaning:NTF " % "
- { \@@_backend_getbb_svg_auxiv:Nw #2 }
- { \@@_backend_getbb_svg_auxv:Nw #2 }
- }
- }
- ##2 \s_@@_stop
- }
- }
- \use:e
- {
- \@@_backend_getbb_svg_auxii:w #3
- \tl_to_str:n {#1} = \tl_to_str:n {#1} =
- \s_@@_stop
- }
- }
-\cs_new_protected:Npn \@@_backend_getbb_svg_auxii:w { }
-\cs_new_protected:Npn \@@_backend_getbb_svg_auxiii:Nw #1 ' #2 ' #3 \s_@@_stop
- { \@@_backend_getbb_svg_auxvi:Nn #1 {#2} }
-\cs_new_protected:Npn \@@_backend_getbb_svg_auxiv:Nw #1 " #2 " #3 \s_@@_stop
- { \@@_backend_getbb_svg_auxvi:Nn #1 {#2} }
-\cs_new_protected:Npn \@@_backend_getbb_svg_auxv:Nw #1 #2 ~ #3 \s_@@_stop
- { \@@_backend_getbb_svg_auxvi:Nn #1 {#2} }
-\cs_new_protected:Npn \@@_backend_getbb_svg_auxvi:Nn #1#2
- {
- \tex_afterassignment:D \@@_backend_getbb_svg_auxvii:w
- \l_@@_internal_dim #2 bp \scan_stop:
- \dim_set_eq:NN #1 \l_@@_internal_dim
- }
-\cs_new_protected:Npn \@@_backend_getbb_svg_auxvii:w #1 \scan_stop: { }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_getbb_eps:n, \@@_backend_getbb_ps:n}
-% Simply use the generic function.
-% \begin{macrocode}
-\@@_backend_loaded:n
- {
- \cs_new_eq:NN \@@_backend_getbb_eps:n \@@_read_bb:n
- \cs_new_eq:NN \@@_backend_getbb_ps:n \@@_read_bb:n
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_getbb_png:n, \@@_backend_getbb_jpg:n, \@@_backend_getbb_jpeg:n}
-% These can be included by extracting the bounding box data.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_getbb_jpg:n #1
- {
- \int_zero:N \l_@@_page_int
- \tl_clear:N \l_@@_pagebox_tl
- \@@_extract_bb:n {#1}
- }
-\cs_new_eq:NN \@@_backend_getbb_jpeg:n \@@_backend_getbb_jpg:n
-\cs_new_eq:NN \@@_backend_getbb_png:n \@@_backend_getbb_jpg:n
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_getbb_pdf:n}
-% Same as for \texttt{dvipdfmx}: use the generic function
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_getbb_pdf:n #1
- {
- \tl_clear:N \l_@@_decodearray_str
- \bool_set_false:N \l_@@_interpolate_bool
- \@@_extract_bb:n {#1}
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \@@_backend_include_eps:n ,
-% \@@_backend_include_ps:n ,
-% \@@_backend_include_pdf:n
-% }
-% \begin{macro}{\@@_backend_include:nn}
-% The special syntax is relatively clear here: remember we need PostScript
-% sizes here. (This is the same as the \texttt{dvips} code.)
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_include_eps:n #1
- { \@@_backend_include:nn { PSfile } {#1} }
-\cs_new_eq:NN \@@_backend_include_ps:n \@@_backend_include_eps:n
-\cs_new_protected:Npn \@@_backend_include_pdf:n #1
- { \@@_backend_include:nn { pdffile } {#1} }
-\cs_new_protected:Npn \@@_backend_include:nn #1#2
- {
- \__kernel_backend_literal:e
- {
- #1 = #2 \c_space_tl
- llx = \dim_to_decimal_in_bp:n \l_@@_llx_dim \c_space_tl
- lly = \dim_to_decimal_in_bp:n \l_@@_lly_dim \c_space_tl
- urx = \dim_to_decimal_in_bp:n \l_@@_urx_dim \c_space_tl
- ury = \dim_to_decimal_in_bp:n \l_@@_ury_dim
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \@@_backend_include_svg:n ,
-% \@@_backend_include_png:n ,
-% \@@_backend_include_jpg:n ,
-% \@@_backend_include_jpeg:n
-% }
-% \begin{macro}{\@@_backend_include_dequote:w}
-% The backend here has built-in support for basic graphic inclusion (see
-% \texttt{dvisvgm.def} for a more complex approach, needed if clipping,
-% \emph{etc.}, is covered at the graphic backend level). We have to deal
-% with the fact that the image reference point is at the \emph{top}, so
-% there is a need for a vertical shift to put it in the right place.
-% The other issue is that |#1| must be quote-corrected. The
-% \texttt{dvisvgm:img} operation quotes the file name, but if it is already
-% quoted (contains spaces) then we have an issue: we simply strip off any
-% quotes as a result.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_include_svg:n #1
- {
- \box_move_up:nn { \l_@@_ury_dim }
- {
- \hbox:n
- {
- \__kernel_backend_literal:e
- {
- dvisvgm:img~
- \dim_to_decimal:n { \l_@@_urx_dim } ~
- \dim_to_decimal:n { \l_@@_ury_dim } ~
- \@@_backend_include_dequote:w #1 " #1 " \s_@@_stop
- }
- }
- }
- }
-\cs_new_eq:NN \@@_backend_include_png:n \@@_backend_include_svg:n
-\cs_new_eq:NN \@@_backend_include_jpeg:n \@@_backend_include_svg:n
-\cs_new_eq:NN \@@_backend_include_jpg:n \@@_backend_include_svg:n
-\cs_new:Npn \@@_backend_include_dequote:w #1 " #2 " #3 \s_@@_stop
- {#2}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_get_pagecount:n}
-% \begin{macrocode}
-\@@_backend_loaded:n
- { \cs_new_eq:NN \@@_backend_get_pagecount:n \@@_get_pagecount:n }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvisvgm>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3backend/l3backend-header.dtx b/macros/latex/contrib/l3backend/l3backend-header.dtx
deleted file mode 100644
index 84f8ab53b7..0000000000
--- a/macros/latex/contrib/l3backend/l3backend-header.dtx
+++ /dev/null
@@ -1,590 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3backend-header.dtx
-%
-% Copyright (C) 2019-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3backend bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3backend-header} module\\ Backend graphics support^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3backend-header} implementation}
-%
-% \begin{macrocode}
-%<*dvips&header>
-% \end{macrocode}
-%
-% \begin{macro}[no-user-doc]{color.sc}
-% Empty definition for color at the top level.
-% \begin{macrocode}
-/color.sc { } def
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[int]{TeXcolorseparation, separation}
-% Support for separation/spot colors: this strange naming is so
-% things work with the color stack.
-% \begin{macrocode}
-TeXDict begin
-/TeXcolorseparation { setcolor } def
-end
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[int]{pdf.globaldict}
-% A small global dictionary for backend use.
-% \begin{macrocode}
-true setglobal
-/pdf.globaldict 4 dict def
-false setglobal
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[int]
-% {
-% pdf.cvs ,
-% pdf.dvi.pt ,
-% pdf.pt.dvi ,
-% pdf.rect.ht
-% }
-% Small utilities for PostScript manipulations. Conversion to DVI dimensions
-% is done here to allow for |Resolution|. The total height of a rectangle
-% (an array) needs a little maths, in contrast to simply extracting a value.
-% \begin{macrocode}
-/pdf.cvs { 65534 string cvs } def
-/pdf.dvi.pt { 72.27 mul Resolution div } def
-/pdf.pt.dvi { 72.27 div Resolution mul } def
-/pdf.rect.ht { dup 1 get neg exch 3 get add } def
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[int]{pdf.linkmargin, pdf.linkdp.pad, pdf.linkht.pad}
-% Settings which are defined up-front in |SDict|.
-% \begin{macrocode}
-/pdf.linkmargin { 1 pdf.pt.dvi } def
-/pdf.linkdp.pad { 0 } def
-/pdf.linkht.pad { 0 } def
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[int]
-% {
-% pdf.rect ,
-% pdf.save.ll ,
-% pdf.save.ur ,
-% pdf.save.linkll ,
-% pdf.save.linkur ,
-% pdf.llx ,
-% pdf.lly ,
-% pdf.urx ,
-% pdf.ury
-% }
-% Functions for marking the limits of an annotation/link, plus drawing the
-% border. We separate links for generic annotations to support adding a
-% margin and setting a minimal size.
-% \begin{macrocode}
-/pdf.rect
- { /Rect [ pdf.llx pdf.lly pdf.urx pdf.ury ] } def
-/pdf.save.ll
- {
- currentpoint
- /pdf.lly exch def
- /pdf.llx exch def
- }
- def
-/pdf.save.ur
- {
- currentpoint
- /pdf.ury exch def
- /pdf.urx exch def
- }
- def
-/pdf.save.linkll
- {
- currentpoint
- pdf.linkmargin add
- pdf.linkdp.pad add
- /pdf.lly exch def
- pdf.linkmargin sub
- /pdf.llx exch def
- }
- def
-/pdf.save.linkur
- {
- currentpoint
- pdf.linkmargin sub
- pdf.linkht.pad sub
- /pdf.ury exch def
- pdf.linkmargin add
- /pdf.urx exch def
- }
- def
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[int]
-% {
-% pdf.dest.anchor ,
-% pdf.dest.x ,
-% pdf.dest.y ,
-% pdf.dest.point ,
-% pdf.dest2device ,
-% pdf.dev.x ,
-% pdf.dev.y ,
-% pdf.tmpa ,
-% pdf.tmpb ,
-% pdf.tmpc ,
-% pdf.tmpd
-% }
-% For finding the anchor point of a destination link. We make the use case
-% a separate function as it comes up a lot, and as this makes it easier to
-% adjust if we need additional effects. We also need a more complex approach
-% to convert a co-ordinate pair correctly when defining a rectangle: this
-% can otherwise be out when using a landscape page. (Thanks to Alexander
-% Grahn for the approach here.)
-% \begin{macrocode}
-/pdf.dest.anchor
- {
- currentpoint exch
- pdf.dvi.pt 72 add
- /pdf.dest.x exch def
- pdf.dvi.pt
- vsize 72 sub exch sub
- /pdf.dest.y exch def
- }
- def
-/pdf.dest.point
- { pdf.dest.x pdf.dest.y } def
-/pdf.dest2device
- {
- /pdf.dest.y exch def
- /pdf.dest.x exch def
- matrix currentmatrix
- matrix defaultmatrix
- matrix invertmatrix
- matrix concatmatrix
- cvx exec
- /pdf.dev.y exch def
- /pdf.dev.x exch def
- /pdf.tmpd exch def
- /pdf.tmpc exch def
- /pdf.tmpb exch def
- /pdf.tmpa exch def
- pdf.dest.x pdf.tmpa mul
- pdf.dest.y pdf.tmpc mul add
- pdf.dev.x add
- pdf.dest.x pdf.tmpb mul
- pdf.dest.y pdf.tmpd mul add
- pdf.dev.y add
- }
- def
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[int]
-% {
-% pdf.bordertracking ,
-% pdf.bordertracking.begin ,
-% pdf.bordertracking.end ,
-% pdf.leftboundary ,
-% pdf.rightboundary ,
-% pdf.brokenlink.rect ,
-% pdf.brokenlink.skip ,
-% pdf.brokenlink.dict ,
-% pdf.bordertracking.endpage ,
-% pdf.bordertracking.continue ,
-% pdf.originx ,
-% pdf.originy
-% }
-% To know where a breakable link can go, we need to track the boundary
-% rectangle. That can be done by hooking into |a| and |x| operations:
-% those names have to be retained. The boundary is stored at the end of
-% the operation. Special effort is needed at the start and end of pages
-% (or rather galleys), such that everything works properly.
-% \begin{macrocode}
-/pdf.bordertracking false def
-/pdf.bordertracking.begin
- {
- SDict /pdf.bordertracking true put
- SDict /pdf.leftboundary undef
- SDict /pdf.rightboundary undef
- /a where
- {
- /a
- {
- currentpoint pop
- SDict /pdf.rightboundary known dup
- {
- SDict /pdf.rightboundary get 2 index lt
- { not }
- if
- }
- if
- { pop }
- { SDict exch /pdf.rightboundary exch put }
- ifelse
- moveto
- currentpoint pop
- SDict /pdf.leftboundary known dup
- {
- SDict /pdf.leftboundary get 2 index gt
- { not }
- if
- }
- if
- { pop }
- { SDict exch /pdf.leftboundary exch put }
- ifelse
- }
- put
- }
- if
- }
- def
-/pdf.bordertracking.end
- {
- /a where { /a { moveto } put } if
- /x where { /x { 0 exch rmoveto } put } if
- SDict /pdf.leftboundary known
- { pdf.outerbox 0 pdf.leftboundary put }
- if
- SDict /pdf.rightboundary known
- { pdf.outerbox 2 pdf.rightboundary put }
- if
- SDict /pdf.bordertracking false put
- }
- def
- /pdf.bordertracking.endpage
-{
- pdf.bordertracking
- {
- pdf.bordertracking.end
- true setglobal
- pdf.globaldict
- /pdf.brokenlink.rect [ pdf.outerbox aload pop ] put
- pdf.globaldict
- /pdf.brokenlink.skip pdf.baselineskip put
- pdf.globaldict
- /pdf.brokenlink.dict
- pdf.link.dict pdf.cvs put
- false setglobal
- mark pdf.link.dict cvx exec /Rect
- [
- pdf.llx
- pdf.lly
- pdf.outerbox 2 get pdf.linkmargin add
- currentpoint exch pop
- pdf.outerbox pdf.rect.ht sub pdf.linkmargin sub
- ]
- /ANN pdf.pdfmark
- }
- if
-}
- def
-/pdf.bordertracking.continue
- {
- /pdf.link.dict pdf.globaldict
- /pdf.brokenlink.dict get def
- /pdf.outerbox pdf.globaldict
- /pdf.brokenlink.rect get def
- /pdf.baselineskip pdf.globaldict
- /pdf.brokenlink.skip get def
- pdf.globaldict dup dup
- /pdf.brokenlink.dict undef
- /pdf.brokenlink.skip undef
- /pdf.brokenlink.rect undef
- currentpoint
- /pdf.originy exch def
- /pdf.originx exch def
- /a where
- {
- /a
- {
- moveto
- SDict
- begin
- currentpoint pdf.originy ne exch
- pdf.originx ne or
- {
- pdf.save.linkll
- /pdf.lly
- pdf.lly pdf.outerbox 1 get sub def
- pdf.bordertracking.begin
- }
- if
- end
- }
- put
- }
- if
- /x where
- {
- /x
- {
- 0 exch rmoveto
- SDict
- begin
- currentpoint
- pdf.originy ne exch pdf.originx ne or
- {
- pdf.save.linkll
- /pdf.lly
- pdf.lly pdf.outerbox 1 get sub def
- pdf.bordertracking.begin
- }
- if
- end
- }
- put
- }
- if
- }
- def
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[int]
-% {
-% pdf.breaklink ,
-% pdf.breaklink.write ,
-% pdf.count ,
-% pdf.currentrect
-% }
-% Dealing with link breaking itself has multiple stage. The first step is to
-% find the |Rect| entry in the dictionary, looping over key--value pairs.
-% The first line is handled first, adjusting the rectangle to stay inside the
-% text area. The second phase is a loop over the height of the bulk of the
-% link area, done on the basis of a number of baselines. Finally, the end of
-% the link area is tidied up, again from the boundary of the text area.
-% \begin{macrocode}
-/pdf.breaklink
- {
- pop
- counttomark 2 mod 0 eq
- {
- counttomark /pdf.count exch def
- {
- pdf.count 0 eq { exit } if
- counttomark 2 roll
- 1 index /Rect eq
- {
- dup 4 array copy
- dup dup
- 1 get
- pdf.outerbox pdf.rect.ht
- pdf.linkmargin 2 mul add sub
- 3 exch put
- dup
- pdf.outerbox 2 get
- pdf.linkmargin add
- 2 exch put
- dup dup
- 3 get
- pdf.outerbox pdf.rect.ht
- pdf.linkmargin 2 mul add add
- 1 exch put
- /pdf.currentrect exch def
- pdf.breaklink.write
- {
- pdf.currentrect
- dup
- pdf.outerbox 0 get
- pdf.linkmargin sub
- 0 exch put
- dup
- pdf.outerbox 2 get
- pdf.linkmargin add
- 2 exch put
- dup dup
- 1 get
- pdf.baselineskip add
- 1 exch put
- dup dup
- 3 get
- pdf.baselineskip add
- 3 exch put
- /pdf.currentrect exch def
- pdf.breaklink.write
- }
- 1 index 3 get
- pdf.linkmargin 2 mul add
- pdf.outerbox pdf.rect.ht add
- 2 index 1 get sub
- pdf.baselineskip div round cvi 1 sub
- exch
- repeat
- pdf.currentrect
- dup
- pdf.outerbox 0 get
- pdf.linkmargin sub
- 0 exch put
- dup dup
- 1 get
- pdf.baselineskip add
- 1 exch put
- dup dup
- 3 get
- pdf.baselineskip add
- 3 exch put
- dup 2 index 2 get 2 exch put
- /pdf.currentrect exch def
- pdf.breaklink.write
- SDict /pdf.pdfmark.good false put
- exit
- }
- { pdf.count 2 sub /pdf.count exch def }
- ifelse
- }
- loop
- }
- if
- /ANN
- }
- def
-/pdf.breaklink.write
- {
- counttomark 1 sub
- index /_objdef eq
- {
- counttomark -2 roll
- dup wcheck
- {
- readonly
- counttomark 2 roll
- }
- { pop pop }
- ifelse
- }
- if
- counttomark 1 add copy
- pop pdf.currentrect
- /ANN pdfmark
- }
- def
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[int]
-% {
-% pdf.pdfmark ,
-% pdf.pdfmark.good ,
-% pdf.outerbox ,
-% pdf.baselineskip ,
-% pdf.pdfmark.dict
-% }
-% The business end of breaking links starts by hooking into |pdfmarks|.
-% Unlike \pkg{hypdvips}, we avoid altering any links we have not created
-% by using a copy of the core |pdfmarks| function. Only mark types which
-% are known are altered. At present, this is purely |ANN| marks, which are
-% measured relative to the size of the baseline skip. If they are
-% more than one apparent line high, breaking is applied.
-% \begin{macrocode}
-/pdf.pdfmark
- {
- SDict /pdf.pdfmark.good true put
- dup /ANN eq
- {
- pdf.pdfmark.store
- pdf.pdfmark.dict
- begin
- Subtype /Link eq
- currentdict /Rect known and
- SDict /pdf.outerbox known and
- SDict /pdf.baselineskip known and
- {
- Rect 3 get
- pdf.linkmargin 2 mul add
- pdf.outerbox pdf.rect.ht add
- Rect 1 get sub
- pdf.baselineskip div round cvi 0 gt
- { pdf.breaklink }
- if
- }
- if
- end
- SDict /pdf.outerbox undef
- SDict /pdf.baselineskip undef
- currentdict /pdf.pdfmark.dict undef
- }
- if
- pdf.pdfmark.good
- { pdfmark }
- { cleartomark }
- ifelse
- }
- def
-/pdf.pdfmark.store
- {
- /pdf.pdfmark.dict 65534 dict def
- counttomark 1 add copy
- pop
- {
- dup mark eq
- {
- pop
- exit
- }
- {
- pdf.pdfmark.dict
- begin def end
- }
- ifelse
- }
- loop
-}
- def
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvips&header>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3backend/l3backend-opacity.dtx b/macros/latex/contrib/l3backend/l3backend-opacity.dtx
deleted file mode 100644
index a5828bfd90..0000000000
--- a/macros/latex/contrib/l3backend/l3backend-opacity.dtx
+++ /dev/null
@@ -1,353 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3backend-opacity.dtx
-%
-% Copyright (C) 2021-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3backend bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3backend-opacity} module\\ Backend opacity support^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3backend-opacity} implementation}
-%
-% \begin{macrocode}
-%<*package>
-%<@@=opacity>
-% \end{macrocode}
-%
-% Although opacity is not color, it needs to be managed in a somewhat
-% similar way: using a dedicated stack if possible. Depending on the backend,
-% that may not be possible. There is also the need to cover fill/stroke setting
-% as well as more general running opacity. It is easiest to describe the value
-% used in terms of opacity, although commonly this is referred to as
-% transparency.
-%
-% \begin{macrocode}
-%<*dvips>
-% \end{macrocode}
-%
-% \begin{macro}{\@@_backend_select:n}
-% \begin{macro}{\@@_backend_fill:n, \@@_backend_stroke:n}
-% \begin{macro}{\@@_backend:nnn}
-% No stack so set values directly. The need to deal with Distiller and
-% Ghostscript separately means we use a common auxiliary: the two
-% systems require different PostScript for transparency. This is
-% of course not quite as efficient as doing one test for setting all
-% transparency, but it keeps things clearer here. Thanks to Alex Grahn
-% for the detail on testing for GhostScript.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_select:n #1
- {
- \@@_backend:nnn {#1} { fill } { ca }
- \@@_backend:nnn {#1} { stroke } { CA }
- }
-\cs_new_protected:Npn \@@_backend_fill:n #1
- {
- \@@_backend:nnn
- { #1 }
- { fill }
- { ca }
- }
-\cs_new_protected:Npn \@@_backend_stroke:n #1
- {
- \@@_backend:nnn
- { #1 }
- { stroke }
- { CA }
- }
-\cs_new_protected:Npn \@@_backend:nnn #1#2#3
- {
- \__kernel_backend_postscript:n
- {
- product ~ (Ghostscript) ~ search
- {
- pop ~ pop ~ pop ~
- #1 ~ .set #2 constantalpha
- }
- {
- pop ~
- mark ~
- /#3 ~ #1
- /SetTransparency ~
- pdfmark
- }
- ifelse
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvips>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*dvipdfmx|luatex|pdftex|xetex>
-% \end{macrocode}
-%
-% \begin{variable}{\c_@@_backend_stack_int}
-% Set up a stack, where that is applicable.
-% \begin{macrocode}
-\bool_lazy_and:nnT
- { \cs_if_exist_p:N \pdfmanagement_if_active_p: }
- { \pdfmanagement_if_active_p: }
- {
-%<*luatex|pdftex>
- \__kernel_color_backend_stack_init:Nnn \c_@@_backend_stack_int
- { page ~ direct } { /opacity 1 ~ gs }
-%</luatex|pdftex>
- \pdfmanagement_add:nnn { Page / Resources / ExtGState }
- { opacity 1 } { << /ca ~ 1 /CA ~ 1 >> }
- }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_backend_fill_tl, \l_@@_backend_stroke_tl}
-% We use |tl| here for speed: at the backend, this should be reasonable.
-% Both need to start off fully opaque.
-% \begin{macrocode}
-\tl_new:N \l_@@_backend_fill_tl
-\tl_new:N \l_@@_backend_stroke_tl
-\tl_set:Nn \l_@@_backend_fill_tl { 1 }
-\tl_set:Nn \l_@@_backend_stroke_tl { 1 }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\@@_backend_select:n}
-% \begin{macro}{\@@_backend_reset:}
-% Much the same as color.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_select:n #1
- {
- \tl_set:Nn \l_@@_backend_fill_tl {#1}
- \tl_set:Nn \l_@@_backend_stroke_tl {#1}
- \pdfmanagement_add:nnn { Page / Resources / ExtGState }
- { opacity #1 }
- { << /ca ~ #1 /CA ~ #1 >> }
-%<*dvipdfmx|xetex>
- \__kernel_backend_literal_pdf:n
-%</dvipdfmx|xetex>
-%<*luatex|pdftex>
- \__kernel_color_backend_stack_push:nn \c_@@_backend_stack_int
-%</luatex|pdftex>
- { /opacity #1 ~ gs }
- \group_insert_after:N \@@_backend_reset:
- }
-\cs_new_protected:Npn \@@_backend_reset:
- {
-%<*dvipdfmx|xetex>
- \__kernel_backend_literal_pdf:n
- { /opacity1 ~ gs }
-%</dvipdfmx|xetex>
-%<*luatex|pdftex>
- \__kernel_color_backend_stack_pop:n \c_@@_backend_stack_int
-%</luatex|pdftex>
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_fill:n, \@@_backend_stroke:n}
-% \begin{macro}{\@@_backend_fill_stroke:nn}
-% For separate fill and stroke, we need to work out if we need to do
-% more work or if we can stick to a single setting.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_fill:n #1
- {
- \exp_args:Nno \@@_backend_fill_stroke:nn
- { #1 }
- { \l_@@_backend_stroke_tl }
- }
-\cs_new_protected:Npn \@@_backend_stroke:n #1
- {
- \exp_args:No \@@_backend_fill_stroke:nn
- { \l_@@_backend_fill_tl }
- { #1 }
- }
-\cs_new_protected:Npn \@@_backend_fill_stroke:nn #1#2
- {
- \str_if_eq:nnTF {#1} {#2}
- { \@@_backend_select:n {#1} }
- {
- \tl_set:Nn \l_@@_backend_fill_tl {#1}
- \tl_set:Nn \l_@@_backend_stroke_tl {#2}
- \pdfmanagement_add:nnn { Page / Resources / ExtGState }
- { opacity.fill #1 }
- { << /ca ~ #1 >> }
- \pdfmanagement_add:nnn { Page / Resources / ExtGState }
- { opacity.stroke #2 }
- { << /CA ~ #2 >> }
-%<*dvipdfmx|xetex>
- \__kernel_backend_literal_pdf:n
-%</dvipdfmx|xetex>
-%<*luatex|pdftex>
- \__kernel_color_backend_stack_push:nn \c_@@_backend_stack_int
-%</luatex|pdftex>
- { /opacity.fill #1 ~ gs /opacity.stroke #2 ~ gs }
- \group_insert_after:N \@@_backend_reset:
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_select:n, \@@_backend_fill_stroke:nn}
-% Redefine them to stubs if pdfmanagement is either not loaded or
-% deactivated.
-% \begin{macrocode}
-\bool_lazy_and:nnF
- { \cs_if_exist_p:N \pdfmanagement_if_active_p: }
- { \pdfmanagement_if_active_p: }
- {
- \cs_gset_protected:Npn \@@_backend_select:n #1 { }
- \cs_gset_protected:Npn \@@_backend_fill_stroke:nn #1#2 { }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvipdfmx|luatex|pdftex|xetex>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*dvisvgm>
-% \end{macrocode}
-%
-% \begin{macro}{\@@_backend_select:n, \@@_backend_fill:n, \@@_backend_stroke:n}
-% \begin{macro}{\@@_backend:nn}
-% Once again, we use a scope here. There is a general opacity function for
-% SVG, but that is of course not set up using the stack.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_select:n #1
- { \@@_backend:nn {#1} { } }
-\cs_new_protected:Npn \@@_backend_fill:n #1
- { \@@_backend:nn {#1} { fill- } }
-\cs_new_protected:Npn \@@_backend_stroke:n #1
- { \@@_backend:nn {#1} { stroke- } }
-\cs_new_protected:Npn \@@_backend:nn #1#2
- { \__kernel_backend_scope:e { #2 opacity = " #1 " } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvisvgm>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \subsection{Font handling integration}
-%
-% In \LuaTeX{} we want to use these functions also for transparent fonts
-% to avoid interference between both uses of transparency.
-%
-% \begin{macrocode}
-%<*lua>
-% \end{macrocode}
-%
-% First we need to check if pdfmanagement is active from Lua.
-% \begin{macrocode}
-local pdfmanagement_active do
- local pdfmanagement_if_active_p = token.create'pdfmanagement_if_active_p:'
- local cmd = pdfmanagement_if_active_p.cmdname
- if cmd == 'undefined_cs' then
- pdfmanagement_active = false
- else
- token.put_next(pdfmanagement_if_active_p)
- pdfmanagement_active = token.scan_int() ~= 0
- end
-end
-
-if pdfmanagement_active and luaotfload and luaotfload.set_transparent_colorstack then
- luaotfload.set_transparent_colorstack(function() return token.create'c_@@_backend_stack_int'.index end)
-
- local transparent_register = {
- token.create'pdfmanagement_add:nnn',
- token.new(0, 1),
- 'Page/Resources/ExtGState',
- token.new(0, 2),
- token.new(0, 1),
- '',
- token.new(0, 2),
- token.new(0, 1),
- '<</ca ',
- '',
- '/CA ',
- '',
- '>>',
- token.new(0, 2),
- }
- luatexbase.add_to_callback('luaotfload.parse_transparent', function(value)
- value = (octet * -1):match(value)
- if not value then
- tex.error'Invalid transparency value'
- return
- end
- value = value:sub(1, -2)
- local result = 'opacity' .. value
- tex.runtoks(function()
- transparent_register[6], transparent_register[10], transparent_register[12] = result, value, value
- tex.sprint(-2, transparent_register)
- end)
- return '/' .. result .. ' gs'
- end, 'l3opacity')
-end
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</lua>
-% \end{macrocode}
-%
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3backend/l3backend-pdf.dtx b/macros/latex/contrib/l3backend/l3backend-pdf.dtx
deleted file mode 100644
index 0a16a79f9e..0000000000
--- a/macros/latex/contrib/l3backend/l3backend-pdf.dtx
+++ /dev/null
@@ -1,1775 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3backend-pdf.dtx
-%
-% Copyright (C) 2019-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3backend bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3backend-pdf} module\\ Backend PDF features^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3backend-pdf} implementation}
-%
-% \begin{macrocode}
-%<*package>
-%<@@=pdf>
-% \end{macrocode}
-%
-% Setting up PDF resources is a complex area with only limited documentation
-% in the engine manuals. The following code builds heavily on existing ideas
-% from \pkg{hyperref} work by Sebastian Rahtz and Heiko Oberdiek, and
-% significant contributions by Alexander Grahn, in addition to the specific
-% code referenced a various points.
-%
-% \subsection{Shared code}
-%
-% A very small number of items that belong at the backend level but which
-% are common to most backends.
-%
-% \begin{macrocode}
-%<*!dvisvgm>
-% \end{macrocode}
-%
-% \begin{variable}{\l_@@_internal_box}
-% \begin{macrocode}
-\box_new:N \l_@@_internal_box
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macrocode}
-%</!dvisvgm>
-% \end{macrocode}
-%
-% \subsection{\texttt{dvips} backend}
-%
-% \begin{macrocode}
-%<*dvips>
-% \end{macrocode}
-%
-% \begin{macro}{\@@_backend_pdfmark:n, \@@_backend_pdfmark:e}
-% Used often enough it should be a separate function.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_pdfmark:n #1
- { \__kernel_backend_postscript:n { mark #1 ~ pdfmark } }
-\cs_generate_variant:Nn \@@_backend_pdfmark:n { e }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Catalogue entries}
-%
-% \begin{macro}{\@@_backend_catalog_gput:nn, \@@_backend_info_gput:nn}
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_catalog_gput:nn #1#2
- { \@@_backend_pdfmark:n { { Catalog } << /#1 ~ #2 >> /PUT } }
-\cs_new_protected:Npn \@@_backend_info_gput:nn #1#2
- { \@@_backend_pdfmark:n { /#1 ~ #2 /DOCINFO } }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Objects}
-%
-% \begin{variable}{\g_@@_backend_object_int}
-% For tracking objects.
-% \begin{macrocode}
-\int_new:N \g_@@_backend_object_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\@@_backend_object_new:n}
-% \begin{macro}[EXP]{\@@_backend_object_ref:n}
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_object_new:n #1
- {
- \int_gincr:N \g_@@_backend_object_int
- \int_const:cn
- { c_@@_object_ \tl_to_str:n {#1} _int }
- { \g_@@_backend_object_int }
- }
-\cs_new:Npn \@@_backend_object_ref:n #1
- { { pdf.obj \int_use:c { c_@@_object_ \tl_to_str:n {#1} _int } } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \@@_backend_object_write:nnn, \@@_backend_object_write:nne,
-% \@@_backend_object_write_aux:nnn
-% }
-% \begin{macro}
-% {
-% \@@_backend_object_write_array:nn ,
-% \@@_backend_object_write_dict:nn ,
-% \@@_backend_object_write_fstream:nn ,
-% \@@_backend_object_write_stream:nn
-% }
-% \begin{macro}{\@@_backend_object_write_stream:nnn}
-% This is where we choose the actual type: some work to get things
-% right. To allow code sharing with the anonymous version, we use an
-% auxiliary.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_object_write:nnn #1#2#3
- {
- \@@_backend_object_write_aux:nnn
- { \@@_backend_object_ref:n {#1} }
- {#2} {#3}
- }
-\cs_generate_variant:Nn \@@_backend_object_write:nnn { nne }
-\cs_new_protected:Npn \@@_backend_object_write_aux:nnn #1#2#3
- {
- \@@_backend_pdfmark:e
- {
- /_objdef ~ #1
- /type
- \str_case:nn {#2}
- {
- { array } { /array }
- { dict } { /dict }
- { fstream } { /stream }
- { stream } { /stream }
- }
- /OBJ
- }
- \use:c { @@_backend_object_write_ #2 :nn } {#1} {#3}
- }
-\cs_new_protected:Npn \@@_backend_object_write_array:nn #1#2
- {
- \@@_backend_pdfmark:e
- { #1 ~0~ [ ~ \exp_not:n {#2} ~ ] ~ /PUTINTERVAL }
- }
-\cs_new_protected:Npn \@@_backend_object_write_dict:nn #1#2
- {
- \@@_backend_pdfmark:e
- { #1 << \exp_not:n {#2} >> /PUT }
- }
-\cs_new_protected:Npn \@@_backend_object_write_fstream:nn #1#2
- {
- \exp_args:Ne
- \@@_backend_object_write_fstream:nnn {#1} #2
- }
-\cs_new_protected:Npn \@@_backend_object_write_fstream:nnn #1#2#3
- {
- \__kernel_backend_postscript:n
- {
- SDict ~ begin ~
- mark ~ #1 ~ << #2 >> /PUT ~ pdfmark ~
- mark ~ #1 ~ ( #3 )~ ( r )~ file ~ /PUT ~ pdfmark ~
- end
- }
- }
-\cs_new_protected:Npn \@@_backend_object_write_stream:nn #1#2
- {
- \exp_args:Ne
- \@@_backend_object_write_stream:nnn {#1} #2
- }
-\cs_new_protected:Npn \@@_backend_object_write_stream:nnn #1#2#3
- {
- \__kernel_backend_postscript:n
- {
- mark ~ #1 ~ ( #3 ) /PUT ~ pdfmark ~
- mark ~ #1 ~ << #2 >> /PUT ~ pdfmark
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_object_now:nn, \@@_backend_object_now:ne}
-% No anonymous objects, so things are done manually.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_object_now:nn #1#2
- {
- \int_gincr:N \g_@@_backend_object_int
- \@@_backend_object_write_aux:nnn
- { { pdf.obj \int_use:N \g_@@_backend_object_int } }
- {#1} {#2}
- }
-\cs_generate_variant:Nn \@@_backend_object_now:nn { ne }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_backend_object_last:}
-% Much like the annotation version.
-% \begin{macrocode}
-\cs_new:Npn \@@_backend_object_last:
- { { pdf.obj \int_use:N \g_@@_backend_object_int } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_backend_pageobject_ref:n}
-% Page references are easy in \texttt{dvips}.
-% \begin{macrocode}
-\cs_new:Npn \@@_backend_pageobject_ref:n #1
- { { Page #1 } }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Annotations}
-%
-% In \texttt{dvips}, annotations have to be constructed manually. As such,
-% we need the object code above for some definitions.
-%
-% \begin{variable}{\l_@@_backend_content_box}
-% The content of an annotation.
-% \begin{macrocode}
-\box_new:N \l_@@_backend_content_box
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_backend_model_box}
-% For creating model sizing for links.
-% \begin{macrocode}
-\box_new:N \l_@@_backend_model_box
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\g_@@_backend_annotation_int}
-% Needed as objects which are not annotations could be created.
-% \begin{macrocode}
-\int_new:N \g_@@_backend_annotation_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\@@_backend_annotation:nnnn}
-% Annotations are objects, but we track them separately. Notably, they are
-% not in the object data lists. Here, to get the co-ordinates of the
-% annotation, we need to have the data collected at the PostScript level.
-% That requires a bit of box trickery (effectively a \LaTeXe{} |picture|
-% of zero size). Once the data is collected, use it to set up the annotation
-% border.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_annotation:nnnn #1#2#3#4
- {
- \exp_args:Nf \@@_backend_annotation_aux:nnnn
- { \dim_eval:n {#1} } {#2} {#3} {#4}
- }
-\cs_new_protected:Npn \@@_backend_annotation_aux:nnnn #1#2#3#4
- {
- \box_move_down:nn {#3}
- { \hbox:n { \__kernel_backend_postscript:n { pdf.save.ll } } }
- \box_move_up:nn {#2}
- {
- \hbox:n
- {
- \__kernel_kern:n {#1}
- \__kernel_backend_postscript:n { pdf.save.ur }
- \__kernel_kern:n { -#1 }
- }
- }
- \int_gincr:N \g_@@_backend_object_int
- \int_gset_eq:NN \g_@@_backend_annotation_int \g_@@_backend_object_int
- \@@_backend_pdfmark:e
- {
- /_objdef { pdf.obj \int_use:N \g_@@_backend_object_int }
- pdf.rect
- #4 ~
- /ANN
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_backend_annotation_last:}
-% Provide the last annotation we created: could get tricky of course if
-% other packages are loaded.
-% \begin{macrocode}
-\cs_new:Npn \@@_backend_annotation_last:
- { { pdf.obj \int_use:N \g_@@_backend_annotation_int } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\g_@@_backend_link_int}
-% To track annotations which are links.
-% \begin{macrocode}
-\int_new:N \g_@@_backend_link_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\g_@@_backend_link_dict_tl}
-% To pass information to the end-of-link function.
-% \begin{macrocode}
-\tl_new:N \g_@@_backend_link_dict_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\g_@@_backend_link_sf_int}
-% Needed to save/restore space factor, which is needed to deal with the face
-% we need a box.
-% \begin{macrocode}
-\int_new:N \g_@@_backend_link_sf_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\g_@@_backend_link_math_bool}
-% Needed to save/restore math mode.
-% \begin{macrocode}
-\bool_new:N \g_@@_backend_link_math_bool
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\g_@@_backend_link_bool}
-% Track link formation: we cannot nest at all.
-% \begin{macrocode}
-\bool_new:N \g_@@_backend_link_bool
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_breaklink_pdfmark_tl}
-% Swappable content for link breaking.
-% \begin{macrocode}
-\tl_new:N \l_@@_breaklink_pdfmark_tl
-\tl_set:Nn \l_@@_breaklink_pdfmark_tl { pdfmark }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\@@_breaklink_postscript:n}
-% To allow dropping material unless link breaking is active.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_breaklink_postscript:n #1 { }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_breaklink_usebox:N}
-% Swappable box unpacking or use.
-% \begin{macrocode}
-\cs_new_eq:NN \@@_breaklink_usebox:N \box_use:N
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_link_begin_goto:nnw, \@@_backend_link_begin_user:nnw}
-% \begin{macro}{\@@_backend_link:nw, \@@_backend_link_aux:nw}
-% \begin{macro}{\@@_backend_link_end:, \@@_backend_link_end_aux:}
-% \begin{macro}{\@@_backend_link_minima:}
-% \begin{macro}{\@@_backend_link_outerbox:n}
-% \begin{macro}{\@@_backend_link_sf_save:, \@@_backend_link_sf_restore:}
-% Links are crated like annotations but with dedicated code to allow for
-% adjusting the size of the rectangle. In contrast to \pkg{hyperref}, we
-% grab the link content as a box which can then unbox: this allows the same
-% interface as for \pdfTeX{}.
-%
-% Notice that the link setup here uses |/Action| not |/A|. That is because
-% Distiller \emph{requires} this trigger word, rather than a \enquote{raw}
-% PDF dictionary key (Ghostscript can handle either form).
-%
-% Taking the idea of |evenboxes| from \pkg{hypdvips}, we implement a minimum
-% box height and depth for link placement. This means that \enquote{underlining}
-% with a hyperlink will generally give an even appearance. However, to ensure
-% that the full content is always above the link border, we do not allow
-% this to be negative (contrast \pkg{hypdvips} approach). The result should
-% be similar to \pdfTeX{} in the vast majority of foreseeable cases.
-%
-% The object number for a link is saved separately from the rest of the
-% dictionary as this allows us to insert it just once, at either an
-% unbroken link or only in the first line of a broken one. That makes the
-% code clearer but also avoids a low-level PostScript error with the code
-% as taken from \pkg{hypdvips}.
-%
-% Getting the outer dimensions of the text area may be better using a two-pass
-% approach and |\tex_savepos:D|. That plus generic mode are still to re-examine.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_link_begin_goto:nnw #1#2
- {
- \@@_backend_link_begin:nw
- { #1 /Subtype /Link /Action << /S /GoTo /D ( #2 ) >> }
- }
-\cs_new_protected:Npn \@@_backend_link_begin_user:nnw #1#2
- { \@@_backend_link_begin:nw {#1#2} }
-\cs_new_protected:Npn \@@_backend_link_begin:nw #1
- {
- \bool_if:NF \g_@@_backend_link_bool
- { \@@_backend_link_begin_aux:nw {#1} }
- }
-% \end{macrocode}
-% The definition of |pdf.link.dict| here is needed as there is code in the
-% PostScript headers for breaking links, and that can only work with this
-% available.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_link_begin_aux:nw #1
- {
- \bool_gset_true:N \g_@@_backend_link_bool
- \__kernel_backend_postscript:n
- { /pdf.link.dict ( #1 ) def }
- \tl_gset:Nn \g_@@_backend_link_dict_tl {#1}
- \@@_backend_link_sf_save:
- \mode_if_math:TF
- { \bool_gset_true:N \g_@@_backend_link_math_bool }
- { \bool_gset_false:N \g_@@_backend_link_math_bool }
- \hbox_set:Nw \l_@@_backend_content_box
- \@@_backend_link_sf_restore:
- \bool_if:NT \g_@@_backend_link_math_bool
- { \c_math_toggle_token }
- }
-\cs_new_protected:Npn \@@_backend_link_end:
- {
- \bool_if:NT \g_@@_backend_link_bool
- { \@@_backend_link_end_aux: }
- }
-\cs_new_protected:Npn \@@_backend_link_end_aux:
- {
- \bool_if:NT \g_@@_backend_link_math_bool
- { \c_math_toggle_token }
- \@@_backend_link_sf_save:
- \hbox_set_end:
- \@@_backend_link_minima:
- \hbox_set:Nn \l_@@_backend_model_box { Gg }
- \exp_args:Ne \@@_backend_link_outerbox:n
- {
- \int_if_odd:nTF { \value { page } }
- { \oddsidemargin }
- { \evensidemargin }
- }
- \box_move_down:nn { \box_dp:N \l_@@_backend_content_box }
- { \hbox:n { \__kernel_backend_postscript:n { pdf.save.linkll } } }
- \@@_breaklink_postscript:n { pdf.bordertracking.begin }
- \@@_breaklink_usebox:N \l_@@_backend_content_box
- \@@_breaklink_postscript:n { pdf.bordertracking.end }
- \box_move_up:nn { \box_ht:N \l_@@_backend_content_box }
- {
- \hbox:n
- { \__kernel_backend_postscript:n { pdf.save.linkur } }
- }
- \int_gincr:N \g_@@_backend_object_int
- \int_gset_eq:NN \g_@@_backend_link_int \g_@@_backend_object_int
- \__kernel_backend_postscript:e
- {
- mark
- /_objdef { pdf.obj \int_use:N \g_@@_backend_link_int }
- \g_@@_backend_link_dict_tl \c_space_tl
- pdf.rect
- /ANN ~ \l_@@_breaklink_pdfmark_tl
- }
- \@@_backend_link_sf_restore:
- \bool_gset_false:N \g_@@_backend_link_bool
- }
-\cs_new_protected:Npn \@@_backend_link_minima:
- {
- \hbox_set:Nn \l_@@_backend_model_box { Gg }
- \__kernel_backend_postscript:e
- {
- /pdf.linkdp.pad ~
- \dim_to_decimal:n
- {
- \dim_max:nn
- {
- \box_dp:N \l_@@_backend_model_box
- - \box_dp:N \l_@@_backend_content_box
- }
- { 0pt }
- } ~
- pdf.pt.dvi ~ def
- /pdf.linkht.pad ~
- \dim_to_decimal:n
- {
- \dim_max:nn
- {
- \box_ht:N \l_@@_backend_model_box
- - \box_ht:N \l_@@_backend_content_box
- }
- { 0pt }
- } ~
- pdf.pt.dvi ~ def
- }
- }
-\cs_new_protected:Npn \@@_backend_link_outerbox:n #1
- {
- \__kernel_backend_postscript:e
- {
- /pdf.outerbox
- [
- \dim_to_decimal:n {#1} ~
- \dim_to_decimal:n { -\box_dp:N \l_@@_backend_model_box } ~
- \dim_to_decimal:n { #1 + \textwidth } ~
- \dim_to_decimal:n { \box_ht:N \l_@@_backend_model_box }
- ]
- [ exch { pdf.pt.dvi } forall ] def
- /pdf.baselineskip ~
- \dim_to_decimal:n { \tex_baselineskip:D } ~ dup ~ 0 ~ gt
- { pdf.pt.dvi ~ def }
- { pop ~ pop }
- ifelse
- }
- }
-\cs_new_protected:Npn \@@_backend_link_sf_save:
- {
- \int_gset:Nn \g_@@_backend_link_sf_int
- {
- \mode_if_horizontal:TF
- { \tex_spacefactor:D }
- { 0 }
- }
- }
-\cs_new_protected:Npn \@@_backend_link_sf_restore:
- {
- \mode_if_horizontal:T
- {
- \int_compare:nNnT \g_@@_backend_link_sf_int > { 0 }
- { \int_set_eq:NN \tex_spacefactor:D \g_@@_backend_link_sf_int }
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% Hooks to allow link breaking: something will be needed in format mode
-% at some stage. At present this code is disabled as there is an open
-% question about the name of the hook: to be resolved at the \LaTeXe{}
-% end.
-% \begin{macrocode}
-\use_none:n
- {
- \cs_if_exist:NT \@makecol@hook
- {
- \tl_put_right:Nn \@makecol@hook
- {
- \box_if_empty:NF \l_shipout_box
- {
- \vbox_set:Nn \l_shipout_box
- {
- \__kernel_backend_postscript:n
- {
- pdf.globaldict /pdf.brokenlink.rect ~ known
- { pdf.bordertracking.continue }
- if
- }
- \vbox_unpack_drop:N \l_shipout_box
- \__kernel_backend_postscript:n
- { pdf.bordertracking.endpage }
- }
- }
- }
- \tl_set:Nn \l_@@_breaklink_pdfmark_tl { pdf.pdfmark }
- \cs_set_eq:NN \@@_breaklink_postscript:n \__kernel_backend_postscript:n
- \cs_set_eq:NN \@@_breaklink_usebox:N \hbox_unpack:N
- }
- }
-% \end{macrocode}
-%
-% \begin{macro}{\@@_backend_link_last:}
-% The same as annotations, but with a custom integer.
-% \begin{macrocode}
-\cs_new:Npn \@@_backend_link_last:
- { { pdf.obj \int_use:N \g_@@_backend_link_int } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_link_margin:n}
-% Convert to big points and pass to PostScript.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_link_margin:n #1
- {
- \__kernel_backend_postscript:e
- {
- /pdf.linkmargin { \dim_to_decimal:n {#1} ~ pdf.pt.dvi } def
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_destination:nn}
-% \begin{macro}{\@@_backend_destination:nnnn, \@@_backend_destination_aux:nnnn}
-% Here, we need to turn the zoom into a scale. We also need to know where
-% the current anchor point actually is: worked out in PostScript. For the
-% rectangle version, we have a bit more PostScript: we need two points.
-% fitr without rule spec doesn't work, so it falls back to \texttt{/Fit} here.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_destination:nn #1#2
- {
- \__kernel_backend_postscript:n { pdf.dest.anchor }
- \@@_backend_pdfmark:e
- {
- /View
- [
- \str_case:nnF {#2}
- {
- { xyz } { /XYZ ~ pdf.dest.point ~ null }
- { fit } { /Fit }
- { fitb } { /FitB }
- { fitbh } { /FitBH ~ pdf.dest.y }
- { fitbv } { /FitBV ~ pdf.dest.x }
- { fith } { /FitH ~ pdf.dest.y }
- { fitv } { /FitV ~ pdf.dest.x }
- { fitr } { /Fit }
- }
- {
- /XYZ ~ pdf.dest.point ~ \fp_eval:n { (#2) / 100 }
- }
- ]
- /Dest ( \exp_not:n {#1} ) cvn
- /DEST
- }
- }
-\cs_new_protected:Npn \@@_backend_destination:nnnn #1#2#3#4
- {
- \exp_args:Ne \@@_backend_destination_aux:nnnn
- { \dim_eval:n {#2} } {#1} {#3} {#4}
- }
-\cs_new_protected:Npn \@@_backend_destination_aux:nnnn #1#2#3#4
- {
- \vbox_to_zero:n
- {
- \__kernel_kern:n {#4}
- \hbox:n { \__kernel_backend_postscript:n { pdf.save.ll } }
- \tex_vss:D
- }
- \__kernel_kern:n {#1}
- \vbox_to_zero:n
- {
- \__kernel_kern:n { -#3 }
- \hbox:n { \__kernel_backend_postscript:n { pdf.save.ur } }
- \tex_vss:D
- }
- \__kernel_kern:n { -#1 }
- \@@_backend_pdfmark:n
- {
- /View
- [
- /FitR ~
- pdf.llx ~ pdf.lly ~ pdf.dest2device ~
- pdf.urx ~ pdf.ury ~ pdf.dest2device
- ]
- /Dest ( #2 ) cvn
- /DEST
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsubsection{Structure}
-%
-% \begin{macro}{\@@_backend_compresslevel:n}
-% \begin{macro}{\@@_backend_compress_objects:n}
-% Doable for the usual \texttt{ps2pdf} method.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_compresslevel:n #1
- {
- \int_compare:nNnT {#1} = 0
- {
- \__kernel_backend_literal_postscript:n
- {
- /setdistillerparams ~ where
- { pop << /CompressPages ~ false >> setdistillerparams }
- if
- }
- }
- }
-\cs_new_protected:Npn \@@_backend_compress_objects:n #1
- {
- \bool_if:nF {#1}
- {
- \__kernel_backend_literal_postscript:n
- {
- /setdistillerparams ~ where
- { pop << /CompressStreams ~ false >> setdistillerparams }
- if
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {\@@_backend_version_major_gset:n, \@@_backend_version_minor_gset:n}
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_version_major_gset:n #1
- {
- \cs_gset:Npe \@@_backend_version_major: { \int_eval:n {#1} }
- }
-\cs_new_protected:Npn \@@_backend_version_minor_gset:n #1
- {
- \cs_gset:Npe \@@_backend_version_minor: { \int_eval:n {#1} }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_backend_version_major:, \@@_backend_version_minor:}
-% Data not available!
-% \begin{macrocode}
-\cs_new:Npn \@@_backend_version_major: { -1 }
-\cs_new:Npn \@@_backend_version_minor: { -1 }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Marked content}
-%
-% \begin{macro}{\@@_backend_bdc:nn}
-% \begin{macro}{\@@_backend_emc:}
-% Simple wrappers.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_bdc:nn #1#2
- { \@@_backend_pdfmark:n { /#1 ~ #2 /BDC } }
-\cs_new_protected:Npn \@@_backend_emc:
- { \@@_backend_pdfmark:n { /EMC } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvips>
-% \end{macrocode}
-%
-% \subsection{\LuaTeX{} and \pdfTeX{} backend}
-%
-% \begin{macrocode}
-%<*luatex|pdftex>
-% \end{macrocode}
-%
-% \subsubsection{Annotations}
-%
-% \begin{macro}{\@@_backend_annotation:nnnn}
-% Simply pass the raw data through, just dealing with evaluation of dimensions.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_annotation:nnnn #1#2#3#4
- {
-%<*luatex>
- \tex_pdfextension:D annot ~
-%</luatex>
-%<*pdftex>
- \tex_pdfannot:D
-%</pdftex>
- width ~ \dim_eval:n {#1} ~
- height ~ \dim_eval:n {#2} ~
- depth ~ \dim_eval:n {#3} ~
- {#4}
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_backend_annotation_last:}
-% A tiny amount of extra data gets added here; we use \texttt{x}-type
-% expansion to get the space in the right place and form. The \enquote{extra}
-% space in the \LuaTeX{} version is \emph{required} as it is consumed in
-% finding the end of the keyword.
-% \begin{macrocode}
-\cs_new:Npe \@@_backend_annotation_last:
- {
- \exp_not:N \int_value:w
-%<*luatex>
- \exp_not:N \tex_pdffeedback:D lastannot ~
-%</luatex>
-%<*pdftex>
- \exp_not:N \tex_pdflastannot:D
-%</pdftex>
- \c_space_tl 0 ~ R
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {\@@_backend_link_begin_goto:nnw, \@@_backend_link_begin_user:nnw}
-% \begin{macro}{\@@_backend_link_begin:nnnw}
-% \begin{macro}{\@@_backend_link_end:}
-% Links are all created using the same internals.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_link_begin_goto:nnw #1#2
- { \@@_backend_link_begin:nnnw {#1} { goto~name } {#2} }
-\cs_new_protected:Npn \@@_backend_link_begin_user:nnw #1#2
- { \@@_backend_link_begin:nnnw {#1} { user } {#2} }
-\cs_new_protected:Npn \@@_backend_link_begin:nnnw #1#2#3
- {
-%<*luatex>
- \tex_pdfextension:D startlink ~
-%</luatex>
-%<*pdftex>
- \tex_pdfstartlink:D
-%</pdftex>
- attr {#1}
- #2 {#3}
- }
-\cs_new_protected:Npn \@@_backend_link_end:
- {
-%<*luatex>
- \tex_pdfextension:D endlink \scan_stop:
-%</luatex>
-%<*pdftex>
- \tex_pdfendlink:D
-%</pdftex>
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_link_last:}
-% Formatted for direct use.
-% \begin{macrocode}
-\cs_new:Npe \@@_backend_link_last:
- {
- \exp_not:N \int_value:w
-%<*luatex>
- \exp_not:N \tex_pdffeedback:D lastlink ~
-%</luatex>
-%<*pdftex>
- \exp_not:N \tex_pdflastlink:D
-%</pdftex>
- \c_space_tl 0 ~ R
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_link_margin:n}
-% A simple task: pass the data to the primitive.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_link_margin:n #1
- {
-%<*luatex>
- \tex_pdfvariable:D linkmargin
-%</luatex>
-%<*pdftex>
- \tex_pdflinkmargin:D
-%</pdftex>
- \dim_eval:n {#1} \scan_stop:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_destination:nn}
-% \begin{macro}{\@@_backend_destination:nnnn}
-% A simple task: pass the data to the primitive. The |\scan_stop:| deals
-% with the danger of an unterminated keyword. The zoom given here is a
-% percentage, but we need to pass it as \emph{per mille}. The rectangle
-% version is also easy as everything is build in.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_destination:nn #1#2
- {
-%<*luatex>
- \tex_pdfextension:D dest ~
-%</luatex>
-%<*pdftex>
- \tex_pdfdest:D
-%</pdftex>
- name {#1}
- \str_case:nnF {#2}
- {
- { xyz } { xyz }
- { fit } { fit }
- { fitb } { fitb }
- { fitbh } { fitbh }
- { fitbv } { fitbv }
- { fith } { fith }
- { fitv } { fitv }
- { fitr } { fitr }
- }
- { xyz ~ zoom \fp_eval:n { #2 * 10 } }
- \scan_stop:
- }
-\cs_new_protected:Npn \@@_backend_destination:nnnn #1#2#3#4
- {
-%<*luatex>
- \tex_pdfextension:D dest ~
-%</luatex>
-%<*pdftex>
- \tex_pdfdest:D
-%</pdftex>
- name {#1}
- fitr ~
- width \dim_eval:n {#2} ~
- height \dim_eval:n {#3} ~
- depth \dim_eval:n {#4} \scan_stop:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsubsection{Catalogue entries}
-%
-% \begin{macro}{\@@_backend_catalog_gput:nn, \@@_backend_info_gput:nn}
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_catalog_gput:nn #1#2
- {
-%<*luatex>
- \tex_pdfextension:D catalog
-%</luatex>
-%<*pdftex>
- \tex_pdfcatalog:D
-%</pdftex>
- { / #1 ~ #2 }
- }
-\cs_new_protected:Npn \@@_backend_info_gput:nn #1#2
- {
-%<*luatex>
- \tex_pdfextension:D info
-%</luatex>
-%<*pdftex>
- \tex_pdfinfo:D
-%</pdftex>
- { / #1 ~ #2 }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Objects}
-%
-% \begin{variable}{\g_@@_backend_object_prop}
-% For tracking objects to allow finalisation.
-% \begin{macrocode}
-\prop_new:N \g_@@_backend_object_prop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\@@_backend_object_new:n}
-% \begin{macro}[EXP]{\@@_backend_object_ref:n}
-% Declaring objects means reserving at the PDF level plus starting
-% tracking.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_object_new:n #1
- {
-%<*luatex>
- \tex_pdfextension:D obj ~
-%</luatex>
-%<*pdftex>
- \tex_pdfobj:D
-%</pdftex>
- reserveobjnum ~
- \int_const:cn
- { c_@@_object_ \tl_to_str:n {#1} _int }
-%<*luatex>
- { \tex_pdffeedback:D lastobj }
-%</luatex>
-%<*pdftex>
- { \tex_pdflastobj:D }
-%</pdftex>
- }
-\cs_new:Npn \@@_backend_object_ref:n #1
- { \int_use:c { c_@@_object_ \tl_to_str:n {#1} _int } ~ 0 ~ R }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_object_write:nnn, \@@_backend_object_write:nne}
-% \begin{macro}[EXP]{\@@_backend_object_write:nn}
-% \begin{macro}[EXP]{\@@_exp_not_i:nn, \@@_exp_not_ii:nn}
-% Writing the data needs a little information about the structure of the
-% object.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_object_write:nnn #1#2#3
- {
-%<*luatex>
- \tex_immediate:D \tex_pdfextension:D obj ~
-%</luatex>
-%<*pdftex>
- \tex_immediate:D \tex_pdfobj:D
-%</pdftex>
- useobjnum ~
- \int_use:c
- { c_@@_object_ \tl_to_str:n {#1} _int }
- \@@_backend_object_write:nn {#2} {#3}
- }
-\cs_new:Npn \@@_backend_object_write:nn #1#2
- {
- \str_case:nn {#1}
- {
- { array } { { [ ~ \exp_not:n {#2} ~ ] } }
- { dict } { { << ~ \exp_not:n {#2} ~ >> } }
- { fstream }
- {
- stream ~ attr ~ { \@@_exp_not_i:nn #2 } ~
- file ~ { \@@_exp_not_ii:nn #2 }
- }
- { stream }
- {
- stream ~ attr ~ { \@@_exp_not_i:nn #2 } ~
- { \@@_exp_not_ii:nn #2 }
- }
- }
- }
-\cs_generate_variant:Nn \@@_backend_object_write:nnn { nne }
-\cs_new:Npn \@@_exp_not_i:nn #1#2 { \exp_not:n {#1} }
-\cs_new:Npn \@@_exp_not_ii:nn #1#2 { \exp_not:n {#2} }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_object_now:nn, \@@_backend_object_now:ne}
-% Much like writing, but direct creation.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_object_now:nn #1#2
- {
-%<*luatex>
- \tex_immediate:D \tex_pdfextension:D obj ~
-%</luatex>
-%<*pdftex>
- \tex_immediate:D \tex_pdfobj:D
-%</pdftex>
- \@@_backend_object_write:nn {#1} {#2}
- }
-\cs_generate_variant:Nn \@@_backend_object_now:nn { ne }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_backend_object_last:}
-% Much like annotation.
-% \begin{macrocode}
-\cs_new:Npe \@@_backend_object_last:
- {
- \exp_not:N \int_value:w
-%<*luatex>
- \exp_not:N \tex_pdffeedback:D lastobj ~
-%</luatex>
-%<*pdftex>
- \exp_not:N \tex_pdflastobj:D
-%</pdftex>
- \c_space_tl 0 ~ R
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_backend_pageobject_ref:n}
-% The usual wrapper situation; the three spaces here are essential.
-% \begin{macrocode}
-\cs_new:Npe \@@_backend_pageobject_ref:n #1
- {
- \exp_not:N \int_value:w
-%<*luatex>
- \exp_not:N \tex_pdffeedback:D pageref
-%</luatex>
-%<*pdftex>
- \exp_not:N \tex_pdfpageref:D
-%</pdftex>
- \c_space_tl #1 \c_space_tl \c_space_tl \c_space_tl 0 ~ R
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Structure}
-%
-% \begin{macro}{\@@_backend_compresslevel:n}
-% \begin{macro}{\@@_backend_compress_objects:n}
-% \begin{macro}{\@@_backend_objcompresslevel:n}
-% Simply pass data to the engine.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_compresslevel:n #1
- {
- \tex_global:D
-%<*luatex>
- \tex_pdfvariable:D compresslevel
-%</luatex>
-%<*pdftex>
- \tex_pdfcompresslevel:D
-%</pdftex>
- \int_value:w \int_eval:n {#1} \scan_stop:
- }
-\cs_new_protected:Npn \@@_backend_compress_objects:n #1
- {
- \bool_if:nTF {#1}
- { \@@_backend_objcompresslevel:n { 2 } }
- { \@@_backend_objcompresslevel:n { 0 } }
- }
-\cs_new_protected:Npn \@@_backend_objcompresslevel:n #1
- {
- \tex_global:D
-%<*luatex>
- \tex_pdfvariable:D objcompresslevel
-%</luatex>
-%<*pdftex>
- \tex_pdfobjcompresslevel:D
-%</pdftex>
- #1 \scan_stop:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {\@@_backend_version_major_gset:n, \@@_backend_version_minor_gset:n}
-% The availability of the primitive is not universal, so we have to test
-% at load time.
-% \begin{macrocode}
-\cs_new_protected:Npe \@@_backend_version_major_gset:n #1
- {
-%<*luatex>
- \int_compare:nNnT \tex_luatexversion:D > { 106 }
- {
- \exp_not:N \tex_global:D \tex_pdfvariable:D majorversion
- \exp_not:N \int_eval:n {#1} \scan_stop:
- }
-%</luatex>
-%<*pdftex>
- \cs_if_exist:NT \tex_pdfmajorversion:D
- {
- \exp_not:N \tex_global:D \tex_pdfmajorversion:D
- \exp_not:N \int_eval:n {#1} \scan_stop:
- }
-%</pdftex>
- }
-\cs_new_protected:Npn \@@_backend_version_minor_gset:n #1
- {
- \tex_global:D
-%<*luatex>
- \tex_pdfvariable:D minorversion
-%</luatex>
-%<*pdftex>
- \tex_pdfminorversion:D
-%</pdftex>
- \int_eval:n {#1} \scan_stop:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_backend_version_major:, \@@_backend_version_minor:}
-% As above.
-% \begin{macrocode}
-\cs_new:Npe \@@_backend_version_major:
- {
-%<*luatex>
- \int_compare:nNnTF \tex_luatexversion:D > { 106 }
- { \exp_not:N \tex_the:D \tex_pdfvariable:D majorversion }
- { 1 }
-%</luatex>
-%<*pdftex>
- \cs_if_exist:NTF \tex_pdfmajorversion:D
- { \exp_not:N \tex_the:D \tex_pdfmajorversion:D }
- { 1 }
-%</pdftex>
- }
-\cs_new:Npn \@@_backend_version_minor:
- {
- \tex_the:D
-%<*luatex>
- \tex_pdfvariable:D minorversion
-%</luatex>
-%<*pdftex>
- \tex_pdfminorversion:D
-%</pdftex>
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Marked content}
-%
-% \begin{macro}{\@@_backend_bdc:nn}
-% \begin{macro}{\@@_backend_emc:}
-% Simple wrappers. May need refinement: see
-% \url{https://chat.stackexchange.com/transcript/message/49970158#49970158}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_bdc:nn #1#2
- { \__kernel_backend_literal_page:n { /#1 ~ #2 ~ BDC } }
-\cs_new_protected:Npn \@@_backend_emc:
- { \__kernel_backend_literal_page:n { EMC } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macrocode}
-%</luatex|pdftex>
-% \end{macrocode}
-%
-% \subsection{\texttt{dvipdfmx} backend}
-%
-% \begin{macrocode}
-%<*dvipdfmx|xetex>
-% \end{macrocode}
-%
-% \begin{macro}{\@@_backend:n, \@@_backend:e}
-% A generic function for the backend PDF specials: used where we can.
-% \begin{macrocode}
-\cs_new_protected:Npe \@@_backend:n #1
- { \__kernel_backend_literal:n { pdf: #1 } }
-\cs_generate_variant:Nn \@@_backend:n { e }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Catalogue entries}
-%
-% \begin{macro}{\@@_backend_catalog_gput:nn, \@@_backend_info_gput:nn}
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_catalog_gput:nn #1#2
- { \@@_backend:n { put ~ @catalog << /#1 ~ #2 >> } }
-\cs_new_protected:Npn \@@_backend_info_gput:nn #1#2
- { \@@_backend:n { docinfo << /#1 ~ #2 >> } }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Objects}
-%
-% \begin{variable}{\g_@@_backend_object_int, \g_@@_backend_object_prop}
-% For tracking objects to allow finalisation.
-% \begin{macrocode}
-\int_new:N \g_@@_backend_object_int
-\prop_new:N \g_@@_backend_object_prop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\@@_backend_object_new:n}
-% \begin{macro}[EXP]{\@@_backend_object_ref:n}
-% Objects are tracked at the macro level, but we don't have to do anything
-% at this stage.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_object_new:n #1
- {
- \int_gincr:N \g_@@_backend_object_int
- \int_const:cn
- { c_@@_object_ \tl_to_str:n {#1} _int }
- { \g_@@_backend_object_int }
- }
-\cs_new:Npn \@@_backend_object_ref:n #1
- { @pdf.obj \int_use:c { c_@@_object_ \tl_to_str:n {#1} _int } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_object_write:nnn, \@@_backend_object_write:nne}
-% \begin{macro}
-% {
-% \@@_backend_object_write_array:nn ,
-% \@@_backend_object_write_dict:nn ,
-% \@@_backend_object_write_fstream:nn ,
-% \@@_backend_object_write_stream:nn
-% }
-% \begin{macro}{\@@_backend_object_write_stream:nnnn}
-% This is where we choose the actual type.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_object_write:nnn #1#2#3
- {
- \use:c { @@_backend_object_write_ #2 :nn }
- { \@@_backend_object_ref:n {#1} } {#3}
- }
-\cs_generate_variant:Nn \@@_backend_object_write:nnn { nne }
-\cs_new_protected:Npn \@@_backend_object_write_array:nn #1#2
- {
- \@@_backend:e
- { obj ~ #1 ~ [ ~ \exp_not:n {#2} ~ ] }
- }
-\cs_new_protected:Npn \@@_backend_object_write_dict:nn #1#2
- {
- \@@_backend:e
- { obj ~ #1 ~ << ~ \exp_not:n {#2} ~ >> }
- }
-\cs_new_protected:Npn \@@_backend_object_write_fstream:nn #1#2
- { \@@_backend_object_write_stream:nnnn { f } {#1} #2 }
-\cs_new_protected:Npn \@@_backend_object_write_stream:nn #1#2
- { \@@_backend_object_write_stream:nnnn { } {#1} #2 }
-\cs_new_protected:Npn \@@_backend_object_write_stream:nnnn #1#2#3#4
- {
- \@@_backend:e
- {
- #1 stream ~ #2 ~
- ( \exp_not:n {#4} ) ~ << \exp_not:n {#3} >>
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_object_now:nn, \@@_backend_object_now:ne}
-% No anonymous objects with \texttt{dvipdfmx} so we have to give an
-% object name.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_object_now:nn #1#2
- {
- \int_gincr:N \g_@@_backend_object_int
- \exp_args:Nne \use:c { @@_backend_object_write_ #1 :nn }
- { @pdf.obj \int_use:N \g_@@_backend_object_int }
- {#2}
- }
-\cs_generate_variant:Nn \@@_backend_object_now:nn { ne }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_object_last:}
-% \begin{macrocode}
-\cs_new:Npn \@@_backend_object_last:
- { @pdf.obj \int_use:N \g_@@_backend_object_int }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_backend_pageobject_ref:n}
-% Page references are easy in \texttt{dvipdfmx}/\XeTeX{}.
-% \begin{macrocode}
-\cs_new:Npn \@@_backend_pageobject_ref:n #1
- { @page #1 }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Annotations}
-%
-% \begin{variable}{\g_@@_backend_annotation_int}
-% Needed as objects which are not annotations could be created.
-% \begin{macrocode}
-\int_new:N \g_@@_backend_annotation_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\@@_backend_annotation:nnnn}
-% Simply pass the raw data through, just dealing with evaluation of dimensions.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_annotation:nnnn #1#2#3#4
- {
- \int_gincr:N \g_@@_backend_object_int
- \int_gset_eq:NN \g_@@_backend_annotation_int \g_@@_backend_object_int
- \@@_backend:e
- {
- ann ~ @pdf.obj \int_use:N \g_@@_backend_object_int \c_space_tl
- width ~ \dim_eval:n {#1} ~
- height ~ \dim_eval:n {#2} ~
- depth ~ \dim_eval:n {#3} ~
- << /Type /Annot #4 >>
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_annotation_last:}
-% \begin{macrocode}
-\cs_new:Npn \@@_backend_annotation_last:
- { @pdf.obj \int_use:N \g_@@_backend_annotation_int }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\g_@@_backend_link_int}
-% To track annotations which are links.
-% \begin{macrocode}
-\int_new:N \g_@@_backend_link_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}
-% {\@@_backend_link_begin_goto:nnw, \@@_backend_link_begin_user:nnw}
-% \begin{macro}{\@@_backend_link_begin:n}
-% \begin{macro}{\@@_backend_link_end:}
-% All created using the same internals.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_link_begin_goto:nnw #1#2
- { \@@_backend_link_begin:n { #1 /Subtype /Link /A << /S /GoTo /D ( #2 ) >> } }
-\cs_new_protected:Npn \@@_backend_link_begin_user:nnw #1#2
- { \@@_backend_link_begin:n {#1#2} }
-\cs_new_protected:Npe \@@_backend_link_begin:n #1
- {
- \exp_not:N \int_gincr:N \exp_not:N \g_@@_backend_link_int
- \@@_backend:e
- {
- bann ~
- @pdf.lnk
- \exp_not:N \int_use:N \exp_not:N \g_@@_backend_link_int
- \c_space_tl
- <<
- /Type /Annot
- #1
- >>
- }
- }
-\cs_new_protected:Npn \@@_backend_link_end:
- { \@@_backend:n { eann } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_link_last:}
-% Available using the backend mechanism with a suitably-recent
-% version.
-% \begin{macrocode}
-\cs_new:Npn \@@_backend_link_last:
- { @pdf.lnk \int_use:N \g_@@_backend_link_int }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_link_margin:n}
-% Pass to \texttt{dvipdfmx}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_link_margin:n #1
- { \__kernel_backend_literal:e { dvipdfmx:config~g~ \dim_eval:n {#1} } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_destination:nn}
-% \begin{macro}{\@@_backend_destination:nnnn,\@@_backend_destination_aux:nnnn}
-% Here, we need to turn the zoom into a scale. The method for \texttt{FitR}
-% is from Alexander Grahn: the idea is to avoid needing to do any calculations
-% in \TeX{} by using the backend data for \texttt{@xpos} and \texttt{@ypos}.
-% \texttt{/FitR} without rule spec doesn't work, so it falls back to
-% \texttt{/Fit} here.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_destination:nn #1#2
- {
- \@@_backend:e
- {
- dest ~ ( \exp_not:n {#1} )
- [
- @thispage
- \str_case:nnF {#2}
- {
- { xyz } { /XYZ ~ @xpos ~ @ypos ~ null }
- { fit } { /Fit }
- { fitb } { /FitB }
- { fitbh } { /FitBH }
- { fitbv } { /FitBV ~ @xpos }
- { fith } { /FitH ~ @ypos }
- { fitv } { /FitV ~ @xpos }
- { fitr } { /Fit }
- }
- { /XYZ ~ @xpos ~ @ypos ~ \fp_eval:n { (#2) / 100 } }
- ]
- }
- }
-\cs_new_protected:Npn \@@_backend_destination:nnnn #1#2#3#4
- {
- \exp_args:Ne \@@_backend_destination_aux:nnnn
- { \dim_eval:n {#2} } {#1} {#3} {#4}
- }
-\cs_new_protected:Npn \@@_backend_destination_aux:nnnn #1#2#3#4
- {
- \vbox_to_zero:n
- {
- \__kernel_kern:n {#4}
- \hbox:n
- {
- \@@_backend:n { obj ~ @pdf_ #2 _llx ~ @xpos }
- \@@_backend:n { obj ~ @pdf_ #2 _lly ~ @ypos }
- }
- \tex_vss:D
- }
- \__kernel_kern:n {#1}
- \vbox_to_zero:n
- {
- \__kernel_kern:n { -#3 }
- \hbox:n
- {
- \@@_backend:n
- {
- dest ~ (#2)
- [
- @thispage
- /FitR ~
- @pdf_ #2 _llx ~ @pdf_ #2 _lly ~
- @xpos ~ @ypos
- ]
- }
- }
- \tex_vss:D
- }
- \__kernel_kern:n { -#1 }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsubsection{Structure}
-%
-% \begin{macro}{\@@_backend_compresslevel:n}
-% \begin{macro}{\@@_backend_compress_objects:n}
-% Pass data to the backend: these are a one-shot.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_compresslevel:n #1
- { \__kernel_backend_literal:e { dvipdfmx:config~z~ \int_eval:n {#1} } }
-\cs_new_protected:Npn \@@_backend_compress_objects:n #1
- {
- \bool_if:nF {#1}
- { \__kernel_backend_literal:n { dvipdfmx:config~C~0x40 } }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {\@@_backend_version_major_gset:n, \@@_backend_version_minor_gset:n}
-% We start with the assumption that the default is active.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_version_major_gset:n #1
- {
- \cs_gset:Npe \@@_backend_version_major: { \int_eval:n {#1} }
- \__kernel_backend_literal:e { pdf:majorversion~ \@@_backend_version_major: }
- }
-\cs_new_protected:Npn \@@_backend_version_minor_gset:n #1
- {
- \cs_gset:Npe \@@_backend_version_minor: { \int_eval:n {#1} }
- \__kernel_backend_literal:e { pdf:minorversion~ \@@_backend_version_minor: }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_backend_version_major:, \@@_backend_version_minor:}
-% We start with the assumption that the default is active.
-% \begin{macrocode}
-\cs_new:Npn \@@_backend_version_major: { 1 }
-\cs_new:Npn \@@_backend_version_minor: { 5 }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Marked content}
-%
-% \begin{macro}{\@@_backend_bdc:nn}
-% \begin{macro}{\@@_backend_emc:}
-% Simple wrappers. May need refinement: see
-% \url{https://chat.stackexchange.com/transcript/message/49970158#49970158}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_bdc:nn #1#2
- { \__kernel_backend_literal_page:n { /#1 ~ #2 ~ BDC } }
-\cs_new_protected:Npn \@@_backend_emc:
- { \__kernel_backend_literal_page:n { EMC } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvipdfmx|xetex>
-% \end{macrocode}
-%
-% \subsection{\texttt{dvisvgm} backend}
-%
-% \begin{macrocode}
-%<*dvisvgm>
-% \end{macrocode}
-%
-% \subsubsection{Annotations}
-%
-% \begin{macro}{\@@_backend_annotation:nnnn}
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_annotation:nnnn #1#2#3#4 { }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_backend_annotation_last:}
-% \begin{macrocode}
-\cs_new:Npn \@@_backend_annotation_last: { }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {\@@_backend_link_begin_goto:nnw, \@@_backend_link_begin_user:nnw}
-% \begin{macro}{\@@_backend_link_begin:nnnw}
-% \begin{macro}{\@@_backend_link_end:}
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_link_begin_goto:nnw #1#2 { }
-\cs_new_protected:Npn \@@_backend_link_begin_user:nnw #1#2 { }
-\cs_new_protected:Npn \@@_backend_link_begin:nnnw #1#2#3 { }
-\cs_new_protected:Npn \@@_backend_link_end: { }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_link_last:}
-% \begin{macrocode}
-\cs_new:Npe \@@_backend_link_last: { }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_link_margin:n}
-% A simple task: pass the data to the primitive.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_link_margin:n #1 { }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_destination:nn}
-% \begin{macro}{\@@_backend_destination:nnnn}
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_destination:nn #1#2 { }
-\cs_new_protected:Npn \@@_backend_destination:nnnn #1#2#3#4 { }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsubsection{Catalogue entries}
-%
-% \begin{macro}{\@@_backend_catalog_gput:nn, \@@_backend_info_gput:nn}
-% No-op.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_catalog_gput:nn #1#2 { }
-\cs_new_protected:Npn \@@_backend_info_gput:nn #1#2 { }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Objects}
-%
-% \begin{macro}{\@@_backend_object_new:n}
-% \begin{macro}[EXP]{\@@_backend_object_ref:n}
-% \begin{macro}{\@@_backend_object_write:nnn, \@@_backend_object_write:ne}
-% \begin{macro}{\@@_backend_object_now:nn, , \@@_backend_object_now:ne}
-% \begin{macro}{\@@_backend_object_last:}
-% \begin{macro}[EXP]{\@@_backend_pageobject_ref:n}
-% All no-ops here.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_object_new:nn #1 { }
-\cs_new:Npn \@@_backend_object_ref:n #1 { }
-\cs_new_protected:Npn \@@_backend_object_write:nnn #1#2#3 { }
-\cs_new_protected:Npn \@@_backend_object_write:nne #1#2#3 { }
-\cs_new_protected:Npn \@@_backend_object_now:nn #1#2 { }
-\cs_new_protected:Npn \@@_backend_object_now:ne #1#2 { }
-\cs_new:Npn \@@_backend_object_last: { }
-\cs_new:Npn \@@_backend_pageobject_ref:n #1 { }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsubsection{Structure}
-%
-% \begin{macro}{\@@_backend_compresslevel:n}
-% \begin{macro}{\@@_backend_compress_objects:n}
-% These are all no-ops.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_compresslevel:n #1 { }
-\cs_new_protected:Npn \@@_backend_compress_objects:n #1 { }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {\@@_backend_version_major_gset:n, \@@_backend_version_minor_gset:n}
-% Data not available!
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_version_major_gset:n #1 { }
-\cs_new_protected:Npn \@@_backend_version_minor_gset:n #1 { }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_backend_version_major:, \@@_backend_version_minor:}
-% Data not available!
-% \begin{macrocode}
-\cs_new:Npn \@@_backend_version_major: { -1 }
-\cs_new:Npn \@@_backend_version_minor: { -1 }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_bdc:nn}
-% \begin{macro}{\@@_backend_emc:}
-% More no-ops.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_bdc:nn #1#2 { }
-\cs_new_protected:Npn \@@_backend_emc: { }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvisvgm>
-% \end{macrocode}
-%
-% \subsection{PDF Page size (media box)}
-%
-% For setting the media box, the split between backends is somewhat different
-% to other areas, thus we approach this separately. The code here assumes a
-% recent \LaTeXe{}: that is ensured at the level above.
-%
-% \begin{macrocode}
-%<*dvipdfmx|dvips>
-% \end{macrocode}
-%
-% \begin{macro}{\@@_backend_pagesize_gset:nn}
-% This is done as a backend literal, so we deal with it using the shipout
-% hook.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_pagesize_gset:nn #1#2
- {
- \__kernel_backend_first_shipout:n
- {
- \__kernel_backend_literal:e
- {
-%<*dvipdfmx>
- pdf:pagesize ~
- width ~ \dim_eval:n {#1} ~
- height ~ \dim_eval:n {#2}
-%</dvipdfmx>
-%<*dvips>
- papersize = \dim_eval:n {#1} , \dim_eval:n {#2}
-%</dvips>
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvipdfmx|dvips>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*luatex|pdftex|xetex>
-% \end{macrocode}
-%
-% \begin{macro}{\@@_backend_pagesize_gset:nn}
-% Pass to the primitives.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_pagesize_gset:nn #1#2
- {
- \dim_gset:Nn \tex_pagewidth:D {#1}
- \dim_gset:Nn \tex_pageheight:D {#2}
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</luatex|pdftex|xetex>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*dvisvgm>
-% \end{macrocode}
-%
-% \begin{macro}{\@@_backend_pagesize_gset:nn}
-% A no-op.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_pagesize_gset:nn #1#2 { }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvisvgm>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3backend/l3backend.ins b/macros/latex/contrib/l3backend/l3backend.ins
deleted file mode 100644
index e24c41d236..0000000000
--- a/macros/latex/contrib/l3backend/l3backend.ins
+++ /dev/null
@@ -1,168 +0,0 @@
-\iffalse meta-comment
-
-File l3backend.ins
-
-Copyright (C) 2019-2024 The LaTeX Project
-
-It may be distributed and/or modified under the conditions of the
-LaTeX Project Public License (LPPL), either version 1.3c of this
-license or (at your option) any later version. The latest version
-of this license is in the file
-
- https://www.latex-project.org/lppl.txt
-
-This file is part of the "l3backend bundle" (The Work in LPPL)
-and all files in that bundle must be distributed together.
-
------------------------------------------------------------------------
-
-The development version of the bundle can be found at
-
- https://github.com/latex3/latex3
-
-for those people who are interested.
-
------------------------------------------------------------------------
-
-Any modification of this file should ensure that the copyright and
-license information is placed in the derived files.
-
-\fi
-
-\let\jobname\relax
-\input docstrip %
-\askforoverwritefalse
-
-\preamble
-
-Copyright (C) 2019-2024 The LaTeX Project
-
-It may be distributed and/or modified under the conditions of
-the LaTeX Project Public License (LPPL), either version 1.3c of
-this license or (at your option) any later version. The latest
-version of this license is in the file:
-
- https://www.latex-project.org/lppl.txt
-
-This file is part of the "l3backend bundle" (The Work in LPPL)
-and all files in that bundle must be distributed together.
-
-\endpreamble
-% stop docstrip adding \endinput
-\postamble
-\endpostamble
-
-\keepsilent
-
-\generate
- {
- \file{l3backend-dvipdfmx.def}
- {
- \from{l3backend-basics.dtx} {package,dvipdfmx}
- \from{l3backend-color.dtx} {package,dvipdfmx}
- \from{l3backend-box.dtx} {package,dvipdfmx}
- \from{l3backend-draw.dtx} {package,dvipdfmx}
- \from{l3backend-graphics.dtx}{package,dvipdfmx}
- \from{l3backend-pdf.dtx} {package,dvipdfmx}
- \from{l3backend-opacity.dtx} {package,dvipdfmx}
- }
- }
-\generate
- {
- \file{l3backend-dvips.def}
- {
- \from{l3backend-basics.dtx} {package,dvips}
- \from{l3backend-color.dtx} {package,dvips}
- \from{l3backend-box.dtx} {package,dvips}
- \from{l3backend-draw.dtx} {package,dvips}
- \from{l3backend-graphics.dtx}{package,dvips}
- \from{l3backend-pdf.dtx} {package,dvips}
- \from{l3backend-opacity.dtx} {package,dvips}
- }
- \file{l3backend-dvips.pro}
- {
- \from{l3backend-header.dtx} {header,dvips}
- }
- }
-\generate
- {
- \file{l3backend-dvisvgm.def}
- {
- \from{l3backend-basics.dtx} {package,dvisvgm}
- \from{l3backend-color.dtx} {package,dvisvgm}
- \from{l3backend-box.dtx} {package,dvisvgm}
- \from{l3backend-draw.dtx} {package,dvisvgm}
- \from{l3backend-graphics.dtx}{package,dvisvgm}
- \from{l3backend-pdf.dtx} {package,dvisvgm}
- \from{l3backend-opacity.dtx} {package,dvisvgm}
- }
- }
-\generate
- {
- \file{l3backend-luatex.def}
- {
- \from{l3backend-basics.dtx} {package,luatex}
- \from{l3backend-color.dtx} {package,luatex}
- \from{l3backend-box.dtx} {package,luatex}
- \from{l3backend-draw.dtx} {package,luatex}
- \from{l3backend-graphics.dtx}{package,luatex}
- \from{l3backend-pdf.dtx} {package,luatex}
- \from{l3backend-opacity.dtx} {package,luatex}
- }
- }
-\generate
- {
- \file{l3backend-pdftex.def}
- {
- \from{l3backend-basics.dtx} {package,pdftex}
- \from{l3backend-color.dtx} {package,pdftex}
- \from{l3backend-box.dtx} {package,pdftex}
- \from{l3backend-draw.dtx} {package,pdftex}
- \from{l3backend-graphics.dtx}{package,pdftex}
- \from{l3backend-pdf.dtx} {package,pdftex}
- \from{l3backend-opacity.dtx} {package,pdftex}
- }
- }
-\generate
- {
- \file{l3backend-xetex.def}
- {
- \from{l3backend-basics.dtx} {package,xetex}
- \from{l3backend-color.dtx} {package,xetex}
- \from{l3backend-box.dtx} {package,xetex}
- \from{l3backend-draw.dtx} {package,xetex}
- \from{l3backend-graphics.dtx}{package,xetex}
- \from{l3backend-pdf.dtx} {package,xetex}
- \from{l3backend-opacity.dtx} {package,xetex}
- }
- }
-
-% Lua code
-
-\def\MetaPrefix{--}
-\preamble
-
-Copyright (C) 2023,2024 The LaTeX Project
-
-It may be distributed and/or modified under the conditions of
-the LaTeX Project Public License (LPPL), either version 1.3c of
-this license or (at your option) any later version. The latest
-version of this license is in the file:
-
- https://www.latex-project.org/lppl.txt
-
-This file is part of the "l3backend bundle" (The Work in LPPL)
-and all files in that bundle must be distributed together.
-
-\endpreamble
-\nopostamble
-\generate
- {
- \file{l3backend-luatex.lua}
- {
- \from{l3backend-color.dtx} {lua}
- \from{l3backend-opacity.dtx} {lua}
- }
- }
-
-\endbatchfile
diff --git a/macros/latex/contrib/l3build/CHANGELOG.md b/macros/latex/contrib/l3build/CHANGELOG.md
index ea466dfccc..f2231144d8 100644
--- a/macros/latex/contrib/l3build/CHANGELOG.md
+++ b/macros/latex/contrib/l3build/CHANGELOG.md
@@ -7,6 +7,15 @@ this project uses date-based 'snapshot' version identifiers.
## [Unreleased]
+## [2024-05-27]
+
+### Changed
+- Respect `--rerun` in `doc` target (issue \#112)
+
+### Fixed
+- Skip unknown engines correctly in `l3build save`
+- Handling of environment settings in some cases (issue \#353)
+
## [2024-02-08]
### Changed
@@ -776,7 +785,8 @@ this project uses date-based 'snapshot' version identifiers.
- Rationalise short option names: removed `-d`, `-E`, `-r`
- Target `cmdcheck`: specific to LaTeX kernel work
-[Unreleased]: https://github.com/latex3/l3build/compare/2024-02-08...HEAD
+[Unreleased]: https://github.com/latex3/l3build/compare/2024-05-27...HEAD
+[2024-05-27]: https://github.com/latex3/l3build/compare/2024-02-08...2024-05-27
[2024-02-08]: https://github.com/latex3/l3build/compare/2024-01-18...2024-02-08
[2024-01-18]: https://github.com/latex3/l3build/compare/2024-01-09...2024-01-18
[2024-01-09]: https://github.com/latex3/l3build/compare/2024-01-04...2024-01-09
diff --git a/macros/latex/contrib/l3build/README.md b/macros/latex/contrib/l3build/README.md
index b5172bbf21..1b49dc0b0c 100644
--- a/macros/latex/contrib/l3build/README.md
+++ b/macros/latex/contrib/l3build/README.md
@@ -1,7 +1,7 @@
l3build: a testing and building system for LaTeX
=================================================
-Release 2024-02-08
+Release 2024-05-27
Overview
--------
diff --git a/macros/latex/contrib/l3build/l3build-aux.lua b/macros/latex/contrib/l3build/l3build-aux.lua
index dd8c410fc0..bf0b85c698 100644
--- a/macros/latex/contrib/l3build/l3build-aux.lua
+++ b/macros/latex/contrib/l3build/l3build-aux.lua
@@ -189,9 +189,9 @@ function runcmd(cmd,dir,vars)
dir = abspath(dir)
vars = vars or {}
-- Allow for local texmf files
- local env = ""
- if not match(checkformat,"^context$") then
- env = os_setenv .. " TEXMFCNF=." .. os_pathsep .. os_concat
+ local env
+ if checkformat ~= "context" then
+ env = os_setenv .. " TEXMFCNF=." .. os_pathsep
end
local envpaths = "." .. localtexmf() .. os_pathsep
.. abspath(localdir) .. os_pathsep
@@ -201,11 +201,9 @@ function runcmd(cmd,dir,vars)
envpaths = gsub(envpaths,'"','')
end
for _,var in pairs(vars) do
- if env ~= "" then
- env = env .. os_setenv .. " " .. var .. "=" .. envpaths .. os_concat
- else
- env = os_setenv .. " " .. var .. "=" .. envpaths
- end
+ env = (env and (env .. os_concat) or "")
+ .. os_setenv .. " " .. var .. "=" .. envpaths
end
- return run(dir,set_epoch_cmd(epoch, forcedocepoch) .. env .. cmd)
+ return run(dir,set_epoch_cmd(epoch, forcedocepoch)
+ .. (env and (env .. os_concat) or "") .. cmd)
end
diff --git a/macros/latex/contrib/l3build/l3build-check.lua b/macros/latex/contrib/l3build/l3build-check.lua
index 812187123a..d6d30e3e2a 100644
--- a/macros/latex/contrib/l3build/l3build-check.lua
+++ b/macros/latex/contrib/l3build/l3build-check.lua
@@ -778,7 +778,7 @@ function runtest(name, engine, hide, ext, test_type, breakout)
local function setup(file)
return " -jobname=" .. name .. tokens .. ' "\\input ' .. file .. '" '
end
- if match(checkformat,"^context$") then
+ if checkformat == "context" then
function setup(file) return tokens .. ' "' .. file .. '" ' end
end
if match(binary,"make4ht") then
@@ -1119,7 +1119,12 @@ function save(names)
return errorlevel
end
end
- local engines = options["engine"] or {stdengine}
+ local engines
+ if options["engine"] then
+ engines = checkengines -- sanitized by check_engines()
+ else
+ engines = {stdengine}
+ end
if names == nil then
print("Arguments are required for the save command")
return 1
diff --git a/macros/latex/contrib/l3build/l3build-help.lua b/macros/latex/contrib/l3build/l3build-help.lua
index 46b0bc45b3..9cad7135dd 100644
--- a/macros/latex/contrib/l3build/l3build-help.lua
+++ b/macros/latex/contrib/l3build/l3build-help.lua
@@ -59,7 +59,7 @@ function help()
if not (match(arg[0], "l3build%.lua$") or match(arg[0],"l3build$")) then
scriptname = arg[0]
end
- print("usage: " .. scriptname .. " <target> [<options>] [<names>]")
+ print("\nUsage: " .. scriptname .. " <target> [<options>] [<names>]")
print("")
print("Valid targets are:")
local longest,t = setup_list(target_list)
diff --git a/macros/latex/contrib/l3build/l3build-typesetting.lua b/macros/latex/contrib/l3build/l3build-typesetting.lua
index 8de57f3718..eaffbe6ae9 100644
--- a/macros/latex/contrib/l3build/l3build-typesetting.lua
+++ b/macros/latex/contrib/l3build/l3build-typesetting.lua
@@ -181,7 +181,10 @@ function docinit_hook() return 0 end
-- Typeset all required documents
-- Uses a set of dedicated auxiliaries that need to be available to others
function doc(files)
- local errorlevel = docinit()
+ local errorlevel = 0
+ if not options["rerun"] then
+ errorlevel = docinit()
+ end
if errorlevel ~= 0 then return errorlevel end
local done = {}
local files_unknown = {}
diff --git a/macros/latex/contrib/l3build/l3build.1 b/macros/latex/contrib/l3build/l3build.1
index b983494b73..d42e486f3c 100644
--- a/macros/latex/contrib/l3build/l3build.1
+++ b/macros/latex/contrib/l3build/l3build.1
@@ -1,91 +1,71 @@
-.TH l3build 1 "2024-02-08"
+.TH L3BUILD 1 "2024-05-27" "LaTeX"
+
.SH NAME
-l3build \- Checking and building packages
+l3build
+
.SH SYNOPSIS
-l3build <target> [<options>] [<names>]
+ Usage l3build <target> [<options>] [<names>]
+
.SH DESCRIPTION
-The l3build system is a Lua script for building TeX packages, with particular
-emphasis on regression testing. It is written in cross-platform Lua code, so
-can be used by any modern TeX distribution with the texlua interpreter. A
-package for building with l3build can be written in any TeX dialect; its
-defaults are set up for LaTeX packages written in the DocStrip style.
-.PP
-The standard l3build targets are:
-.IP check
-Runs all automated tests
-.IP clean
-Cleans out directory tree
-.IP ctan
-Creates CTAN-ready archive
-.IP doc
-Typesets all documentation files
-.IP install
-Installs files into the local texmf tree
-.IP manifest
-Creates a manifest file
-.IP save
-Saves test validation log
-.IP tag
-Updates release tags in files
-.IP uninstall
-Uninstalls files from the local texmf tree
-.IP unpack
-Unpacks the source files into the build tree
-.IP upload
-Sends archive to CTAN for public release
+------
+
+The l3build module is designed to support the development of
+high-quality LaTeX code by providing:
+* A unit testing system
+* Automated typesetting of code sources
+* A reliable packaging system for CTAN releases
+
+The bundle consists of a Lua script to run the tasks and a
+.tex file which provides the testing environment. These were
+originally developed for supporting LaTeX development but
+are designed such that they can be readily used by others. Full
+documentation is provided.
+
+.SH COMMANDS
+Valid targets are:
+ check Runs all automated tests
+ clean Cleans out directory tree
+ ctan Creates CTAN-ready archive
+ doc Typesets all documentation files
+ install Installs files into the local texmf tree
+ manifest Creates a manifest file
+ save Saves test validation log
+ tag Updates release tags in files
+ uninstall Uninstalls files from the local texmf tree
+ unpack Unpacks the source files into the build tree
+ upload Sends archive to CTAN for public release
+
.SH OPTIONS
-Various options apply
-.IP --config|-c
-Sets the config(s) used for running tests
-.IP --date
-Sets the date to insert into sources
-.IP --debug
-Runs target in debug mode
-.IP --dirty
-Skips cleaning up the test area
-.IP --dry-run
-Dry run for install or upload
-.IP --email
-Email address of CTAN uploader
-.IP --engine|-e
-Sets the engine(s) to use for running test
-.IP --epoch
-Sets the epoch for tests and typesetting
-.IP --file|-F
-Takes the upload announcement from the given file
-.IP --first
-Name of first test to run
-.IP --full
-Installs all files
-.IP --halt-on-error|-H
-Stops running tests after the first failure
-.IP --help|-h
-Prints help message and exits
-.IP --last
-Name of last test to run
-.IP --message|-m
-Text for upload announcement message
-.IP --quiet|-q
-Suppresses TeX output when unpacking
-.IP --rerun
-Skips setup: simply reruns tests
-.IP --show-log-on-error
-Shows the full log of the failure with 'halt-on-error'
-.IP --show-saves|-S
-Shows the invocation to update failing .tlg files
-.IP --shuffle
-Shuffles order of tests
-.IP --stdengine|-s
-Run tests with the std engine (config dependent)
-.IP --texmfhome
-Location of user texmf tree
-.IP --version
-Prints version information and exits
-.SH BUGS
-.SH AUTHOR
-The LaTeX Project (latex-team@latex-project.org)
-.PP
-Please log issues on the GitHub homepage:
-https://github.com/latex3/l3build/issues.
-.SH SEE ALSO
-See l3build.pdf for more details.
+Valid options are:
+ --config|-c Sets the config(s) used for running tests
+ --date Sets the date to insert into sources
+ --debug Runs target in debug mode
+ --dirty Skips cleaning up the test area
+ --dry-run Dry run for install or upload
+ --email Email address of CTAN uploader
+ --engine|-e Sets the engine(s) to use for running test
+ --epoch Sets the epoch for tests and typesetting
+ --file|-F Takes the upload announcement from the given file
+ --first Name of first test to run
+ --full Installs all files
+ --halt-on-error|-H Stops running tests after the first failure
+ --help|-h Prints this message and exits
+ --last Name of last test to run
+ --message|-m Text for upload announcement message
+ --quiet|-q Suppresses TeX output when unpacking
+ --rerun Skips setup: simply reruns tests
+ --show-log-on-error Shows the full log of the failure with 'halt-on-error'
+ --show-saves|-S Shows the invocation to update failing .tlg files
+ --shuffle Shuffles order of tests
+ --stdengine|-s Run tests with the std engine (config dependent)
+ --texmfhome Location of user texmf tree
+ --version Prints version information and exits
+
+.SH "SEE ALSO"
+Full manual available via 'texdoc l3build'.
+
+Repository : https://github.com/latex3/l3build
+
+Bug tracker : https://github.com/latex3/l3build/issues
+.SH AUTHORS
+Copyright (C) 2014-2024 The LaTeX Project
diff --git a/macros/latex/contrib/l3build/l3build.dtx b/macros/latex/contrib/l3build/l3build.dtx
index 96c1f0ead8..2433c7a311 100644
--- a/macros/latex/contrib/l3build/l3build.dtx
+++ b/macros/latex/contrib/l3build/l3build.dtx
@@ -251,7 +251,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-08}
+% \date{Released 2024-05-27}
%
% \maketitle
% \tableofcontents
@@ -1227,9 +1227,9 @@
% \subsection{Settings in \texttt{texmf.cnf}}
%
% To allow application of non-standard \TeX{} trees or similar non-standard
-% settings, \pkg{l3build} enables searching for a \texttt{texmf.cnf} file
-% by setting the envirnmental variable \texttt{TEXMFCNF}. This might
-% for example be used with a file containing
+% settings, \pkg{l3build} sets the environment variable \texttt{TEXMFCNF}
+% to allow reading of any \texttt{texmf.cnf} file present in the support folder.
+% This might for example be used with a file containing
% \begin{verbatim}
% TEXMFAUXTREES = ../../texmf,
% \end{verbatim}
diff --git a/macros/latex/contrib/l3build/l3build.lua b/macros/latex/contrib/l3build/l3build.lua
index 5b40bc5111..bb53a2ce55 100755
--- a/macros/latex/contrib/l3build/l3build.lua
+++ b/macros/latex/contrib/l3build/l3build.lua
@@ -25,7 +25,7 @@ for those people who are interested.
--]]
-- Version information
-release_date = "2024-02-08"
+release_date = "2024-05-27"
-- File operations are aided by the LuaFileSystem module
local lfs = require("lfs")
diff --git a/macros/latex/contrib/l3build/l3build.pdf b/macros/latex/contrib/l3build/l3build.pdf
index af2c8688f0..93f4b8f3ab 100644
--- a/macros/latex/contrib/l3build/l3build.pdf
+++ b/macros/latex/contrib/l3build/l3build.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/CHANGELOG.md b/macros/latex/contrib/l3kernel/CHANGELOG.md
deleted file mode 100644
index 9c8c4d506c..0000000000
--- a/macros/latex/contrib/l3kernel/CHANGELOG.md
+++ /dev/null
@@ -1,1853 +0,0 @@
-# Changelog
-All notable changes to the `l3kernel` bundle since the start of 2018
-will be documented in this file.
-
-The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
-this project uses date-based 'snapshot' version identifiers.
-
-## [Unreleased]
-
-## [2024-03-14]
-
-### Added
-- Macro interface for `l3sys-query`
-
-### Changed
-- Require that `expl3` is loaded at top level in generic mode
-- Ensure that the dimension arguments to `\box_autosize_to_...:Nnn`
- are properly formed (issue \#1502)
-
-### Fixed
-- Typeset `TF` of internal conditionals in current color (issue \#730)
-- Some functions and variables were defined locally
-## [2024-02-20]
-
-### Changed
-- Improve error recovery when an invalid `prop` is used (PR \#1464)
-
-### Fixed
-- Restore `\__kernel_msg_...:nnx(xx)` for older `xparse` support
-- Prevent an infinite loop in `\debug_(on|off):n` (issue \#1442)
-- Require `\sys_ensure_backend:` is used in the preamble (issue \#1442)
-
-## [2024-02-18]
-
-### Changed
-- Work-around to enable `\prop_set_from_keyval:Nn`, etc., to avoid an error if
- `prop` is not already defined
-
-### Fixed
-- Extend debug checking to cover `\prop_(g)set_from_keyval:Nn`
-
-## [2024-02-13]
-
-### Added
-- Checking missing `\endgroup` at the end of `\DocInclude`
-- Linked storage type for large property lists (issue \#1040, pull \#1059)
-
-### Changed
-- `\meta` now typesets in `\texttt`, along with `\Arg`
-- Improved the performance of `\cs_if_exist:NTF`, `\cs_if_free:NTF`,
- `\cs_if_exist_use:NTF`, and most notably their `c`-type variants.
-
-### Fixed
-- Inconsistent local/global assignments in `\vcoffin_gset:Nnn` and
- `\vcoffin_gset:Nnw`
-- Tokenization by `\peek_analysis_map_inline:n` of one additional
- character after any space or brace
-
-### Deprecated
-- `\msg_gset:nnn(n)`
-
-## [2024-01-22]
-
-### Added
-- `\keys_set_exclude_groups:nnn(nN)` to replace `\keys_set_filter:nnn(nN)`
-- Flags with N-type names, like other variable types
-
-### Changed
-- Set `l3doc` option `kernel` off as-standard (issue \#1403)
-- Moved `\seq_set_filter:NNn` to stable
-
-### Deprecated
-- `\keys_set_filter:nnn(nN)` in favor of `\keys_set_exclude_groups:nnn(nN)`
-
-## [2024-01-04]
-
-### Added
-- Documentation for `\bitset_show_named_index:N` (issue \#1372)
-- `\bitset_log_named_index:N`
-- `\tl_build_get_intermediate:NN`
-- Support for `.default:n` values for the `unknown` handler (see issue \#67)
-
-### Changed
-- Improved method to suppress `l3bitset` where required
-- Clarify behavior of `\tl_if_novalue:n(TF)` (see issue \#1402)
-
-### Deprecated
-- `\tl_build_get:NN` in favor of `\tl_build_get_intermediate:NN`
-
-### Fixed
-- Handling of `documented-as` variants in `l3doc` indexing
- (see issue \#1345)
-- Missing trailing `TF` in single variant of conditional functions (issue \#1398)
-
-## [2023-12-11]
-
-### Changed
-- Use keyval handler for `l3doc` class options
-
-### Fixed
-- Support for deprecated `pdf` module functions (issue \#1373)
-- Generate stub `l3bitset` for transitional support
-
-## [2023-12-08]
-
-### Added
-- `\c_empty_str` (issue \#1361)
-- `l3bitset`: moved from `l3experimental`
-
-### Fixed
-- Return `str` (not `tl`) in `\bool_to_str:N` and `\bool_to_str:n` (issue \#1331)
-- Catcode of space from `\str_set_convert:Nnnn` (issue \#1344)
-- Tidy up various documentation issues (issue \#1345)
-
-## [2023-11-09]
-
-### Added
-- Documentation for `\c_nan_fp`
-- `\str_case_e:en(TF)`
-
-### Changed
-- Speed up `\str_(g)set:Nn`, `\str_const:Nn`, `\str_(g)put_left:Nn`,
- and `\str_(g)put_right:Nn`
-
-### Fixed
-- Normalisation of `.inherit:n` key data (issue \#1314)
-
-## [2023-11-01]
-
-### Added
-- `\seq_(g)set_map_e:NNn`
-- Documentation for `\ExplLoaderFileDate` in `expl3.pdf`
-
-### Changed
-- Documentation improvements
-- Refine action of `\text_titlecase_first:n(n)` to be focussed strictly on
- first (relevant) codepoint in the input
-- Standardize "This is the (e)TeX primitive ..." in `texnote` in documentation
-- Move `\tl_build_(g)begin:N`, `\tl_build_(g)end:N`, `\tl_build_(g)put_left:Nn`
- and `\tl_build_(g)right:Nn` to stable status
-
-### Deprecated
-- `\seq_(g)set_map_x:NNn` in favor of `e`-type naming
-
-### Fixed
-- `\fp_clear_variable:n` should act locally (issue \#1298)
-- `\fp_clear_function:n` should act locally and correctly
-- Support for `\fp_show:N` showing symbolic expressions (issue \#1301)
-- Undefined `\str_case:en(TF)` (excluding `\str_case:en`)
-
-## [2023-10-23]
-
-### Added
-- `\text_titlecase_all:n(n)`
-- `\token_to_catcode:N`
-- Support for symbolic variables in fp input:
- `\fp_new_variable:n`, `\fp_set_variable:nn` and `\fp_clear_variable:n`
-- Support for user-defined functions in fp expressions:
- `\fp_new_function:n`, `\fp_set_function:nnn` and `\fp_clear_function:n`
-
-### Changed
-- Clarify action of `\text_titlecase_first:n(n)`
-- Detect letters for titlecasing based on Unicode general category
-
-### Deprecated
-- `\text_titlecase:n(n)` as ambiguous: replaced by `\text_titlecase_all:n(n)`
-- `\tl_build_(g)clear:N` in favour of `\tl_build_(g)begin:N`
-
-### Fixed
-- Support arbitrary BCP-47 locales for case-changing overrides (issue \#1239)
-- Retain braces when ending titlecasing with some input structures
-
-## [2023-10-10]
-
-### Added
-- `\iow_shipout_e:Nn`
-- Documentation for `\sys_if_timer_exist_p:` and `\sys_if_timer_exist:(TF)`.
- They were supported since l3kernel 2021-05-25, along with `\sys_timer:`.
-- l3doc.dtx: Support for footnotes in the function and variable environment
-- Variants `\tl_if_single:c(TF)` and `\tl_if_single_p:c` (issue \#1272)
-- Key properties `.str_(g)set_e:N` and `.tl_(g)set_e:N`
-
-### Changed
-- Switch generally from `x`- to `e`-type variants
-- Convert `\file_if_exist:n(TF)` to expandable status,
- adding predicate version
-- Standardise variants for `\prop_(g)pop:NnN(TF)`
-- Standardise variants for `\prop_(g)put:Nnn`
-- Standardise variants for `\prop_(g)put_if_new:Nnn`
-- Standardise variants for `\prop_(g)remove:Nn`
-
-### Deprecated
-- `\iow_shipout_x:Nn` in favor of `e`-type naming
-- Key properties `.str_(g)set_x:N` and `.tl_(g)set_x:N`
-
-### Fixed
-- Rare rounding error in divisions (issue \#1264)
-
-## [2023-08-29]
-
-### Added
-- `\c_sys_timestamp_str`
-
-### Changed
-- Rename `\tex_pdfcreationdate:D` to `\tex_creationdate:D`
-
-## [2023-08-11]
-
-### Changed
-- Wrap long lists of variants in `l3doc` display of functions (issue \#1258)
-
-### Fixed
-- Revert 'Allow for implicit chars when case changing' (issue \#1260)
-
-## [2023-08-03]
-
-### Added
-- `\tex_XeTeXhyphenatablelength:D`, `\tex_XeTeXinterwordspaceshaping:D`,
- `\tex_XeTeXselectorcode:D`
-- Several missing `\tex_<name>:D` primitives from LuaTeX and (up)TeX
-
-### Changed
-
-- `\tex_protrudechars:D` now defined for XeTeX (to `\XeTeXprotrudechars`)
-- Allow for optional `v` in version string argument to
- `\ProvidesExpl...`
-
-### Fixed
-- Allow for implicit chars when case changing
-
-## [2023-06-30]
-
-### Added
-- `\codepoint_to_category:n`
-
-### Changed
-- Drop notes about slow `\expanded` emulation. `\expanded` is required since
- release 2023-05-15
-- Sync engine/primitive requirements in `expl3.dtx` with code and README
-
-### Fixed
-- Case changing of Greek characters with complex NFD representation (issue \#1236)
-- Error recovery when wrongly applying abs to a tuple (issue \#1238)
-
-## [2023-06-16]
-
-### Changed
-- Exclude entries in `\l_text_case_exclude_arg_tl` from expansion in `\text_expand:n`
- (latex3/latex2e\#904)
-- Generate _dialytika_ if appropriate when uppercasing Greek words starting with a
- vowel taking a breathing mark (issue \#1228)
-- Retain stress diacritics when uppercasing Greek (issue \#1230)
-- Expand (partial) paths in `\l_file_search_path_seq` and `\input@path`
- (see latex3/latex2e\#1086)
-
-## [2023-06-05]
-
-### Added
-- `\cctab_gsave_current:N`, `\g_tmpa_cctab` and `\g_tmpb_cctab` (issue \#1089)
-- `\prg_gset_eq_conditional:NNn` (issue \#1212)
-- `\iow_shell_open:Nn` (issue \#1122)
-
-### Deprecated
-- `\tl_case:Nn(TF)`
-- `expl3` package option `enable-debug` (no longer required)
-
-### Fixed
-- Set `\l_keys_value_tl` in `.initial:n` (issue \#1013)
-- Support for boolean values in `expl3` package options
- `check-declarations` and `log-functions` (issue \#978)
-- Allow for optional `/` at end of `\input@path` entries
- (see latex3/latex2e\#1076)
-
-## [2023-05-22]
-
-### Added
-- Rounded out the `\use_i:nn...` functions to cover all cases taking
- one argument from up to nine arguments
-- `\coffin_(g)reset_poles:N`
-- `\dim_to_decimal_in_<unit>:n`, for `<unit>` types
- `cc`, `cm`, `dd`, `in`, `mm` and `pc`
-- `\file_input_raw:n`
-- `\int_if_zero:n(TF)`
-- `\str_mdfive_hash:n`
-### Changed
-- Remove `\noexpand` inside math mode in `\text_expand:n`
-- Re-implement `\dim_to_decimal_in_bp:n` and
- `\dim_to_decimal_in_unit:nn` to be re-entrant (issue \#954)
-
-### Fixed
-- Omit `0123456789` from URL escaping (issue \#838)
-- Leave implicit chars unchanged in `\text_expand:n` (issue \#874)
-- Filtering/grouping applied to meta keys (issue \#940)
-- Issue correct error message if `bool` key is set
- incorrectly using `.initial:n` (issue \#1013)
-- Set `\l_keys_key_str` in `.initial:n` (issue \#1013)
-- Handling of implicit chars in `\text_purify:n` (issue \#1208)
-
-## [2023-05-15]
-
-### Changed
-- Require `\expanded` and 'pdfTeX extension' primitives,
- and thus TeX distributions from mid-2019 onward
-
-### Fixed
-- Treatment of trailing `/` in `\input@path`
-
-## [2023-05-11]
-
-### Added
-- `\seq_map_pairwise_function:NNN` (renamed from `\seq_mapthread_function:NNN`)
-
-### Changed
-- Moved `\seq_set_item:Nnn` to stable status
-- Track seen filenames to improve performance of
- `\file_full_name:n` and dependent file operations
-
-### Removed
-- Experimental function `\seq_pop_item:NnN` from `l3candidates`
-- Experimental function `\seq_mapthread_function:NNN` now renamed
- `\seq_map_pairwise_function:NNN`
-
-## [2023-05-05]
-
-### Added
-- `\bool_case:n(TF)` (renamed from `\bool_case_true:n(TF)`)
-- `\flag_ensure_raised:n` (renamed from `\flag_raise_if_clear:n`)
-- `\iow_wrap_allow_break:` (renamed from `\iow_allow_break:`)
-
-### Changed
-- Moved to stable status:
- - `\bool_(g)set_inverse:N`
- - `\c_catcode_active_space_tl`
- - `\c_sys_engine_version_str`
- - `\exp_args_generate:n`
- - `\fp_if_nan:n(TF)`
- - `\ior_get_term:nN` and `\ior_str_get_term:nN`
- - `\ior_shell_open:Nn`
- - `\msg_show_item:n`, `\msg_show_item_unbraced:n`,
- `\msg_show_item:nn`, `\msg_show_item_unbraced:nn`
-- Require random number support from engine
-
-### Removed
-- Experimental functions from `l3candidates`:
- - `\bool_case_false:n(TF)`
- - `\intarray_gset_rand:Nn(n)`
- - `\intarray_to_clist:N`
- - `\peek_catcode_collect_inline:Nn`, `\peek_charcode_collect_inline:Nn` and
- `\peek_meaning_collect_inline:Nn`
- - `\prop_rand_key_value:N`
- - `\seq_set_from_function:Nnn` and `\seq_set_from_inline_x:Nnn`
- - `\sys_if_rand_exist:(TF)`
- - `\tl_range_braced:Nnn` and `\tl_range_unbraced:Nnn`
-- Experimental functions now renamed
- - `\bool_case_true:n(TF)` (now `\bool_case:n(TF)`)
- - `\flag_raise_if_clear:n` (now `\flag_ensure_raised:n`)
- - `\iow_allow_break:` (now `\iow_wrap_allow_break:`)
-- Experimental functions moved to kernel-internal:
- - `\msg_log_eval:Nn` and `\msg_show_eval:Nn`
-
-## [2023-04-20]
-
-### Changed
-- Re-order arguments of `\text_declare_lowercase_mapping:nnn`,
- `\text_declare_titlecase_mapping:nnn` and
- `\text_declare_uppercase_mapping:nnn`
-
-## [2023-04-19]
-
-### Added
-- `\box_set_clipped:N` and variants (renamed from `\box_clip:N`)
-- `\text_declare_lowercase_mapping:nn(n)`,
- `\text_declare_titlecase_mapping:nn(n)`
- and `\text_declare_uppercase_mapping:nn(n)` to allow customization of
- case changing outcomes
-
-### Changed
-- `\box_set_trim:Nnnnn` and `\box_set_viewport:Nnnnn` moved to
- stable kernel
-
-### Fixed
-- Incorrect internal name in `\pdf_pagesize_gset:nn`
-
-### Removed
-- Experimental `\box_clip:N` and variants (renamed to
- `\box_set_clipped:N`)
-
-## [2023-03-30]
-
-### Added
-- `\tex_endlocalcontrol:D` as expl3 name for the LuaTeX primitive
-
-### Changed
-- Allow non-integer values in color expressions
-- Restrict color expressions values to the range [0, 100]
-- Leave Greek spacing diacritics unchanged in uppercasing
-
-### Fixed
-- Fix minor version in `\c_sys_engine_version_str` for pdfTeX and LuaTeX
- (issue [\#1186](https://github.com/latex3/latex3/issues/1186))
-
-## [2023-02-22]
-
-### Changed
-- More defensive approach in `\codepoint_to_nfd:n`
-
-### Fixed
-- CJK character handling for (u)pTeX (issue
- [\#1171](https://github.com/latex3/latex3/issues/1171))
-
-## [2023-02-07]
-
-### Changed
-- Swap meaning of `el` and `el-x-iota` when case changing
- Greek: match traditional LaTeX approach
-
-### Deprecated
-- `\l_text_accents_tl` and `\l_text_letterlike_tl`
-
-## [2023-02-02]
-
-### Fixed
-- Handling of multiple accents when uppercasing Greek
- (see LaTeX2e issue
- [\#987](https://github.com/latex3/latex2e/issues/987))
-
-## [2023-02-01]
-
-### Fixed
-- Allow for expressions within color `RGB`/`HSB` input
-
-## [2023-01-24]
-
-### Added
-- Complete list of pdfTeX primitives
-
-### Fixed
-- Allow for multi-part BCP47 strings in case changing
-- Loading with plain TeX due to `\outer` status of `^^L`
- issue ([\#1161](https://github.com/latex3/latex3/issues/1161))
-
-### Changed
-- Leave catcode of `&` unchanged in code environment
-
-## [2023-01-16]
-
-### Added
-- `\pdf_pagesize_gset:nn`
-
-### Fixed
-- Enable `\char_generate:nn` to create active tokens which are `\outer`
- or equal to `\fi`
-
-## [2022-12-17]
-
-### Added
-- `\codepoint_to_nfd:n`
-- `\codepoint_generate:n` and `\codepoint_str_generate:n`
-- `\str_casefold:n`
-
-### Changed
-- Protect `babel` shorthands from expansion
-
-### Fixed
-- Appearance of `\DescribeOption` (issue
- [\#1111](https://github.com/latex3/latex3/issues/1111))
-
-## [2022-11-02]
-
-### Added
-- `\prg_gset_conditional:N(p)nn` and
- `\prg_gset_protected_conditional:N(p)nn`
-
-### Fixed
-- Loading of `expl3` with ConTeXt MkIV (issue
- [\#1142](https://github.com/latex3/latex3/issues/1142))
-
-## [2022-10-26]
-
-### Changed
-- Usage of `\exp_not:n`/`\exp_not:N` in `\peek_analysis_map_inline:n` output
-
-### Fixed
-- `\peek_analysis_map_inline:n` support for macro parameter characters (issue
- [\#1109](https://github.com/latex3/latex3/issues/1109)), for many expandable
- tokens (issue [\#1110](https://github.com/latex3/latex3/issues/1110)), and an
- esoteric case (issue [\#1113](https://github.com/latex3/latex3/issues/1113))
-- Creation of a message with some engines (issue
- [\#1139](https://github.com/latex3/latex3/issues/1139))
-
-### Deprecated
-- `\char_to_nfd:N`, `\char_to_nfd:n`
-- `\char_foldcase:N`, `\char_lowercase:N`, `\char_titlecase:N`,
- `\char_uppercase:N` and `str` variants
-- `\char_to_utfviii_bytes:n`
-- `\str_foldcase:n`
-
-## [2022-09-28]
-
-### Added
-- Set media box for test phase documents
-
-### Fixed
-- Text case switching in `\text_titlecase_first:n` (issue
- [\#1130](https://github.com/latex3/latex3/issues/1130))
-
-## [2022-08-30]
-
-### Added
-- `\pdf_object_new:n` and `\pdf_object_write:nnn` - support assignment of object
- type at point-of-writing (issue
- [\#1123](https://github.com/latex3/latex3/issues/1123))
-- `\text_map_function:nN` and `\text_map_inline:nn` for mapping to
- graphemes in textual input
-- Support for medieval Latin case changing
-- `\char_to_nfd:n` to extend NFD support to 8-bit engines
-
-### Deprecated
-- `\pdf_object_new:nn` and `\pdf_object_write:nn`, in favor of
- `\pdf_object_new:n` and `\pdf_object_write:nnn`, respectively
-
-## [2022-08-23]
-
-### Added
-- Shortened range of chars which are left unchanged when converted to
- strings with `\str_(g)set_convert:Nnnn`.
-- `\color_if_exist:n(TF)`
-- Support for case changing Vietnamese characters with 8-bit engines
-- Parsing of `cmy`, `tHsb` and `&spot` color models to support data exchange with
- `xcolor`
-
-### Changed
-- Replace `LaTeX3` in message text by `LaTeX`
-
-### Changed
-- Approach to setting current color data from LaTeX2e
-## [2022-08-05]
-
-### Added
-- Support for case changing Croatian diagraph with 8-bit engines
-- Support accent removal when uppercasing Greek with 8-bit engines
-- Function `\sys_ensure_backend:`
-
-### Fixed
-- Behavior of `\color_math:nn` in alignments
-- Expansion of text containing unterminated `\romannumeral` primitives
-
-## [2022-07-21]
-
-### Fixed
-- `\iow_open:N` in ConTeXt MkII
-
-## [2022-07-15]
-
-### Fixed
-- Correct argument order in `\text_case_switch:nnnn`
-
-## [2022-07-14]
-
-### Changed
-- Improved approach to `\text_case_switch:nnnn` expansion
-
-## [2022-07-04]
-
-### Added
-- `\text_declare_case_equivalent:Nn`, `\text_case_switch:nnnn` and
- related mechanism to allow specialisation of case changing output
- for selected commands
-
-## [2022-07-01]
-
-### Added
-- `\cs_parameter_spec:N`
-
-### Changed
-- `\text_expand:n` now acts on active chars to support legacy input encodings
-
-### Deprecated
-- `\cs_argument_spec:N`
-
-### Fixed
-- Correct validity check performed by `\regex_show:N` (issue [\#1093](https://github.com/latex3/latex3/issues/1093))
-- Closing of file handles (issue [\#1105](https://github.com/latex3/latex3/issues/1105))
-
-## [2022-06-16]
-
-### Fixed
-- Made `\peek_analysis_map_inline:n` alignment-safe (issue [\#1090](https://github.com/latex3/latex3/issues/1090))
-- Setting a boolean to itself no longer errors (issue [\#1055](https://github.com/latex3/latex3/issues/1055))
-
-## [2022-06-02]
-
-### Changed
-- Exclude only first mandatory argument of entries in
- `\l_text_case_exclude_arg_tl` from case changing
-
-## [2022-05-30]
-
-### Added
-- Add `\lua_load_module:n`
-
-### Fixed
-- Typo in implementation of titlecase `hy-x-yiwn`
-- Definition order issue with `\str_case:Nn(TF)`
-
-## [2022-05-04]
-
-### Added
-- Language settings `hy` and `hy-x-yiwn` for handling of ech-yiwn ligature
- uppercasing
-
-### Changed
-- Support BCP 47 properly in case changer language argument
-
-### Fixed
-- Correct `el-xiota` and `de-xeszett` to `el-x-iota` and `de-x-eszett`
-
-## [2022-04-29]
-
-### Added
-- Language setting `el-xiota` for retention of ypogegrammeni when uppercasing
- Greek
-
-### Changed
-- Rename case-changing variant `de-alt` to `de-xeszett` to align with
- `luaotfload`
-- Allow for `\lccode`/`\uccode` changes in `\char_...case:n` functions
-
-### Fixed
-- Support for ypogegrammeni in case changing Greek (see issue [\#1088](https://github.com/latex3/latex3/issues/1088))
-
-## [2022-04-20]
-
-### Changed
-- Collect some common code from `l3backend-color`
-
-## [2022-04-10]
-
-### Added
-- `\keys_precompile:nnN` for conversion of keyvals to fast-to-apply token
- lists
-- Missing `\str_if_empty:n(TF)` (see issue [\#1071](https://github.com/latex3/latex3/issues/1071))
-- Missing `\str_case:Nn(TF)` (see issue [\#1071](https://github.com/latex3/latex3/issues/1071))
-- `\tex_...:D` names for primitives added in TeX Live 2022
-
-### Changed
-- Definition of `\legacy_if:n(TF)` to support primitive conditionals
-- `\str_<type>case:n` now case changes codepoints above 127 with all engines
-- `\char_generate:nn` now also allows to generate category 10 tokens (spaces)
- except for char code 0
-
-### Fixed
-- Handling of 'misplaced' `\protect` by `\text_expand:n`
-- Nesting of `\tl_analysis_map_inline:nn`
-- Naming of an error message
-
-## [2022-02-24]
-
-### Changed
-- Better support for `\cite`, _etc._, in case changing
-
-## [2022-02-21]
-
-### Fixed
-- Use of `\@uclclist` for case changing
-
-## [2022-02-05]
-
-### Added
-- Distribute `l3doc.pdf` with a prominent warning about future changes
-- `\color_math:nn(n)` as a functional equivalent of the new `\mathcolor`
- command in LaTeX2e
-
-### Changed
-- Documentation for horizontal coffin poles (see issue [\#1041](https://github.com/latex3/latex3/issues/1041))
-- Update primitive requirements to enable loading with Prote/HINT
-
-## [2022-01-21]
-
-### Changed
-- Auto-generate legacy switch if required in `.legacy_set_if:n`
- key property
-
-### Fixed
-- Correct creation of `.if` property
-- Handling of colors created in a group once they go out-of-scope
-
-## [2022-01-12]
-
-### Added
-- Support for validity scope for keys
-- `\peek_remove_filler:n`
-- `\prop_to_keyval:N`
-- `\regex_match_case:nn(TF)`, `\regex_replace_case_once:nN(TF)`,
- `\regex_replace_case_all:nN(TF)`
-
-### Changed
-- Policy change: functions will no longer be removed after deprecation,
- thus the Lua functions noted below are the *last* 'stable' code to be
- removed from `l3kernel` after deprecation
-- Allow indirect conversions between colorspaces through fallback models
-- Move some color functions from `l3backend`
-
-### Deprecated
-- `\peek_..._ignore_spaces:N(TF)` functions
-- `\sys_load_deprecation:`
-- Option `undo-recent-deprecations`
-
-### Removed
-- Lua functions in `l3kernel` table
-
-## [2021-11-22]
-
-### Added
-- Support for legacy `if` switches in `l3keys`
-
-### Changed
-- Documentation improvements
-- Implementation of `intarray` data type with LuaTeX
-- Better support for LuaMetaTeX
-
-## [2021-11-12]
-
-### Fixed
-- DeviceN colorspace conversions with alternative model RGB
-
-### Added
-- `.str_set:N`, etc., key properties (issue [\#1007](https://github.com/latex3/latex3/issues/1007))
-- `\bool_to_str:n` (issue [\#1010](https://github.com/latex3/latex3/issues/1010))
-
-### Changed
-- `\prop_..._from_keyval:Nn` functions now support active comma or
- equal sign (pull \#1012)
-
-## [2021-10-18]
-
-### Added
-- Support for ICC-based color profiles
-- `\color_profile_apply:nn`
-
-## [2021-10-17]
-
-### Changed
-- Better DeviceN support
-
-## [2021-10-12]
-
-### Fixed
-- Global assignments for `\box_gresize_to_ht_plus_dp:Nn`
- and `\coffin_gattach:NnnNnnnn`
-- Conversion of DeviceN colors to device fallback
-
-## [2021-08-27]
-
-### Changed
-- Formatting of expandable errors (issue [\#931](https://github.com/latex3/latex3/issues/931))
-- Internal code for kernel messages
-
-## [2021-07-12]
-
-### Fixed
-- Handling of multiple color models (issue [\#962](https://github.com/latex3/latex3/issues/962))
-
-### Removed
-- Functions marked for removal end-2020
-
-## [2021-06-18]
-
-### Fixed
-- Local assignment to `\g__sys_backend_tl`
-- Incorrect internal function name (issue [\#939](https://github.com/latex3/latex3/issues/939))
-- Case-changing exceptions for (u)pTeX (issue [\#939](https://github.com/latex3/latex3/issues/939))
-- Low-level error if accent commands are not followed by
- letter when case changing (see \#946)
-
-## [2021-06-01]
-
-### Fixed
-- Loading when `\expanded` is not available
-
-## [2021-05-27]
-
-### Fixed
-- Correctly detect local formats in `Mismatched LaTeX support files` error.
-
-## [2021-05-25]
-
-### Added
-- `\msg_note:nnnnnn` (issue [\#911](https://github.com/latex3/latex3/issues/911))
-- `\str_compare:nNnTF` (issue [\#927](https://github.com/latex3/latex3/issues/927))
-- `\sys_timer:`
-- `\prop_concat:NNN`, `\prop_put_from_keyval:Nn` (issue [\#924](https://github.com/latex3/latex3/issues/924))
-- Functions to show and log various datatypes (issue [\#241](https://github.com/latex3/latex3/issues/241)):
- `\coffin_show:Nnn`, `\coffin_show:N`, `\coffin_log:Nnn`, `\coffin_log:N`,
- `\color_log:n`, `\group_show_list:`, `\group_log_list:`,
- `\ior_show:N`, `\ior_log:N`, `\iow_show:N`, `\iow_log:N`,
- `\tl_log_analysis:N`, `\tl_log_analysis:n`
-- `\legacy_if_set_true:n`, `\legacy_if_set_false:n`, `\legacy_if_set:nn`
-- Matching multiple regex at the same time (issue [\#433](https://github.com/latex3/latex3/issues/433)):
- `\regex_case_match:nn(TF)`,
- `\regex_case_replace_once:nN(TF)`,
- `\regex_case_replace_all:nN(TF)`
-
-### Fixed
-- Checking brace balance in all regex functions (issue [\#377](https://github.com/latex3/latex3/issues/377))
-- Removing duplicates in clists when items contain commas (issue [\#917](https://github.com/latex3/latex3/issues/917))
-
-### Changed
-- Slight speed up in some elementary int/dim/skip/muskip operations and
- in setting tl or clist variables equal.
-- Speed up mapping functions in l3clist, l3prop, l3seq, l3tl
-
-## [2021-05-11]
-
-### Added
-- `\cctab_item:Nn` (issue [\#880](https://github.com/latex3/latex3/issues/880))
-- `\clist_use:nnnn` and `\clist_use:nn` (issue [\#561](https://github.com/latex3/latex3/issues/561))
-
-### Fixed
-- Loading of backend in generic DVI mode (issue [\#905](https://github.com/latex3/latex3/issues/905))
-- Make `\keyval_parse:nnn` alignment-safe (issue [\#896](https://github.com/latex3/latex3/issues/896))
-- Control sequences and category codes in regex replacements (issue [\#909](https://github.com/latex3/latex3/issues/909))
-
-### Changed
-- Speed up `\group_align_safe_begin:` (pull \#906)
-
-## [2021-05-07]
-
-### Added
-- Color export in comma-separated format
-- `\ur{...}` escape in `l3regex` to compose regexes
-- `\seq_set_split_keep_spaces:Nnn` (see \#784)
-- `\seq_set_item:Nnn(TF)` and `\seq_pop_item:NnN(TF)`
-- `\box_ht_plus_dp:N` (issue [\#899](https://github.com/latex3/latex3/issues/899))
-- `\clist_map_tokens:nn`, `\clist_map_tokens:Nn`,
- `\str_map_tokens:nn`, `\str_map_tokens:Nn`
-
-### Changed
-- Use prevailing catcodes instead of string in regex replacement (issue [\#621](https://github.com/latex3/latex3/issues/621))
- (*Breaking change*)
-- `\__kernel_file_name_sanitize:n` now uses a faster `\csname`-based
- approach to expand the file name
-- Improved performance for basic conditionals
-- `\pdf_version_gset:n` support for `dvips`
-- Improve handling of `\exp_not:n` in `\text_expand:n` (issue [\#875](https://github.com/latex3/latex3/issues/875))
-- `\file_full_name:n` now avoids calling `\pdffilesize` primitive multiple times
- on the same file
-- Show printable characters explicitly in `\regex_show:n`
-- Regex replacement now errors when using a submatch (`\1` etc) for which
- the regex has too few groups
-- Showing complex datatypes now validates their internal structure (issue [\#884](https://github.com/latex3/latex3/issues/884))
-- Indexing in l3doc: all page references before codeline references,
- improve target placement, solve pdfTeX and makeindex warnings
-
-### Fixed
-- Evalutate integer constants only once (issue [\#861](https://github.com/latex3/latex3/issues/861))
-- Detect `\ior_map_inline:Nn` calls on undefined streams (issue [\#194](https://github.com/latex3/latex3/issues/194))
-
-### Deprecated
-- `l3docstrip` converted to a stub which simply loads DocStrip: use
- the latter directly
-
-## [2021-02-18]
-
-### Added
-- `l3color`: Moved from `l3experimental`
-- `l3pdf`: Moved from `l3experimental`
-- `default` alias to str_convert
-
-### Changed
-- Re-ordered `interface3` documentation
-- Moved `msg_show:nn(nnnn)` to stable
-
-## [2021-02-06]
-
-### Changed
-- Use new (internal) interface for kerns
-
-## [2021-02-02]
-
-### Added
-- `\c_zero_str`
-
-## [2021-01-09]
-
-### Added
-- `\keyval_parse:nnn`
-
-### Changed
-- `\keyval_parse:NNn` is set equal to `\keyval_parse:nnn`
-
-### Fixed
-- Handling of encoding-specfic commands in `\text_purify:n`
-
-## [2020-12-07]
-
-### Fixed
-- `\peek_analysis_map_inline:n` with spaces and braces
-
-## [2020-12-05]
-
-### Fixed
-- Setting of line width in vertical coffins in LaTeX
-
-## [2020-12-03]
-
-### Added
-- `\peek_analysis_map_inline:n`
-- `\peek_regex:nTF`, `\peek_regex_remove_once:nTF`, and
- `\peek_regex_replace_once:nnTF`
-- `\token_case_catcode:NnTF`, `\token_case_charcode:NnTF`, and
- `\token_case_meaning:NnTF`
-
-### Changed
-- Extend `\text_expand:n` to cover `\@protected@testopt`
-- Extend `\text_purify:n` to cover `\@protected@testopt`
-
-## [2020-10-27]
-
-### Added
-- `\token_if_font_selection:N(TF)` (see \#806)
-
-### Fixed
-- Avoid relying on braced `\input` primitive syntax
-- Correct expansion of environments in `\text_purify:n`
-- Some aspects of `cctab` setup with 8-bit engines(issue [\#814](https://github.com/latex3/latex3/issues/814))
-
-### Changed
-- Improved performance for `tl` functions
-- Extend case changer to cover all of Greek with pdfTeX
-
-## [2020-10-05]
-
-### Fixed
-- Correctly detect LaTeX when pre-loading expl3 and setting up
- case changer
-- Lua emulation of \strcmp (issue [\#813](https://github.com/latex3/latex3/issues/813))
-
-## [2020-09-24]
-
-### Changed
-- Use Lua pseudo-primitives instead of `\directlua`
-- `\token_if_primitive:N(TF)` now reports pseudo-primitives as primitives in LuaTeX
-
-## [2020-09-06]
-
-### Fixed
-- Loading in generic mode (issue [\#800](https://github.com/latex3/latex3/issues/800))
-
-## [2020-09-03]
-
-### Fixed
-- Save primitive definition of `\pdfoutput` with CSLaTeX
-
-## [2020-09-01]
-
-### Added
-- `\hbox_overlap_center:n`
-
-### Changed
-- Backend setting for direct PDF output
-- Backend setting for XeTeX support
-
-### Deprecated
-- Backend setting `pdfmode`
-
-### Fixed
-- `\file_compare_timestamp:nNn(TF)` in LuaTeX (issue [\#792](https://github.com/latex3/latex3/issues/792))
-- Text case changing and expansion where an excluded command is equivalent
- to `\use:n`
-
-## [2020-08-07]
-
-### Changed
-- Color selection implementation
-- Performance enhancements for `\keys_set:nn`
-
-### Fixed
-- Loading generically on ConTeXt (issue [\#783](https://github.com/latex3/latex3/issues/783))
-
-## [2020-07-17]
-
-### Added
-- `l3cctab` module for using category code tables
-- `\file_parse_full_name:n` and `\file_parse_full_name_apply:nN`
-- Additional `\prop_put:Nnn` variants
-- `\seq_set_map_x:NNn`
-- `\msg_term:nn(nnnn)`
-
-### Fixed
-- File lookup with `\input@path`
-- 8-bit encodings in `\str_set_convert:Nnnn`
-
-### Changed
-- Implementation of `\file_parse_full_name:nNNN` now uses
- `\file_parse_full_name:n` internally
-- `\seq_set_map:NNn` no longer `x`-expands `<inline function>`
- (`\seq_set_map_x:NNn` now does that). Both moved to stable.
-
-### Removed
-- Functions deprecated at end of 2019
-
-### Deprecated
-- `\str_declare_eight_bit_encoding:nnn`
-
-## [2020-06-18]
-
-### Changed
-- Use `scn` operator for separations
-- Internal color model
-- Internal performance enhancements
-- Moved `\msg_expandable_error:nn(nnnn)` to stable.
-- Moved `\seq_indexed_map_inline:Nn` and `\seq_indexed_map_function:Nn`
- to stable as `\seq_map_indexed_inline:Nn` and `\seq_map_indexed_function:Nn`.
-- Internal changes to `expl3` to allow loading earlier in LaTeX2e.
-
-## [2020-06-03]
-
-### Added
-- `\str_convert_pdfname:n`
-
-## [2020-05-15]
-
-### Changed
-- Make `\text_purify:n` `f`-type expandable
-
-## [2020-05-14]
-
-### Changed
-- Performance improvements in keyval processing
-
-## [2020-05-11]
-
-### Changed
-- Internal changes to quark handling
-
-## [2020-05-05]
-
-### Added
-- Recognize the exponent marker `E` (same as `e`) in floating point numbers
-
-### Fixed
-- Leave active characters untouched when case-changing (see \#715)
-
-## [2020-04-06]
-
-### Added
-- Control for start-of-titlecasing: see `\l_text_titlecase_check_letter_bool`
-
-### Fixed
-- Nesting of `\seq_shuffle:N` in another sequence mapping (issue [\#687](https://github.com/latex3/latex3/issues/687))
-- `\ior_shell_open:Nn` in engines other than LuaTeX - shell commands didn't
- execute, plus the command call would be left in the input stream.
-
-## [2020-03-06]
-
-### Added
-- `\text_purify:n`
-
-### Fixed
-- Issue with case-changing Turkish
-
-## [2020-03-03]
-
-### Added
-- `\tex...:D` coverage for TeX Live 2020 engine changes
-
-### Changed
-- New implementation for `\keyval_parse:NNn` - around 40% speed improvement,
- also *expandable*
-
-### Fixed
-- Make `expl3` reload-safe for `latexrelease` (see latex3/latex2e#295)
-
-## [2020-02-25]
-
-### Changed
-- Extend case-changing encoding support to Cyrillic and Greek
-
-## [2020-02-21]
-
-### Added
-- Option `suppress-backend-headers` (see matching change in
- `l3backend`)
-
-### Changed
-- Allow `dvisvgm` driver with XeTeX (issue [\#677](https://github.com/latex3/latex3/issues/677))
-
-### Fixed
-- `undo-recent-deprecations` would not reload the deprecation code
-
-## [2020-02-14]
-
-### Fixed
-- Interaction with some `babel` languages at the start of the document
-
-## [2020-02-13]
-
-### Changed
-- Leave implicit tokens unchanged by `\text_expand:n`
-- Extend the `de-alt` case changing locale to 8-bit engines
-
-## [2020-02-11]
-
-### Added
-- Key property `.cs_set:Np` and variants
-
-### Changed
-- Support `\@uclclist` entries when case-changing
-
-### Fixed
-- Allow for full range of encodings when expanding text (issue [\#671](https://github.com/latex3/latex3/issues/671))
-- Support `\begin`/`\end` in text expansion
-
-## [2020-02-08]
-
-### Added
-- `\l_keys_key_str` and `\l_keys_path_str`
-
-### Deprecated
-- `\l_keys_key_tl` and `\l_keys_path_tl`, replaced by `\l_keys_key_str` and
- `\l_keys_path_str`, respectively
-
-## [2020-02-03]
-
-### Changed
-- Minor edits to LaTeX3 News
-
-## [2020-01-31]
-
-### Added
-- Table of Contents for combined LaTeX3 News
-
-### Changed
-- Use Lua `utf8` library if available
-
-### Fixed
-- Undefined command in box debugging code
-
-## [2020-01-22]
-
-### Added
-- Support for command replacement in text expansion
-
-### Changed
-- Require key values for numerical key types (dim, int, etc.) (see \#661)
-
-### Fixed
-- Issue with keys where some leading spaces could be left in key names
-
-## [2020-01-12]
-
-### Added
-- `\bool_case_true:n(TF)` and `\bool_case_false:n(TF)`
-- `\file_hex_dump:n(nn)` and `\file_get_hex_dump:n(nn)N(TF)`
-- `\str_<type>case:n`
-- `\text_<type>case:n(n)`
-- `\text_expand:n` and supporting data structures
-
-### Changed
-- Distribute LaTeX3 News
-- Moved `\char_<type>case:N` to stable
-- Documentation improvements
-
-### Fixed
-- Inherit key required/forbidden properties (see \#653)
-- Set backend at the beginning of `\document` (see \#657)
-
-### Deprecated
-- `\str_<type>_case:n` replaced by `\str_<type>case:n`
- except `\str_mixed_case:n` replaced by `\str_titlecase:n`
-- `\tl_<type>_case:n(n)` replaced by `\text_<type>case:n(n)`,
- except `\tl_mixed_case:n(n)` replaced by `\text_titlecase:n(n)`
-
-## [2019-11-07]
-
-### Fixed
-- Handling of repeated loading of a backend (issue [\#646](https://github.com/latex3/latex3/issues/646))
-- Handling of repeated loading of deprecated functions
-
-## [2019-10-28]
-
-### Fixed
-- File searching when `\(pdf)filesize` is not available (issue \#644)
-
-## [2019-10-27]
-
-### Changed
-- Internal structure of `\c_sys_jobname_str` altered
-- Update upTeX test to follow guidance from developers
-
-## [2019-10-24]
-
-### Changed
-- File names are now returned without quotes by `\file_full_name:n`
-
-### Fixed
-- `\file_if_exist:n(TF)`, etc., when dealing with file names containing
- spaces (see \#642)
-
-## [2019-10-21]
-
-### Added
-- Lua function `l3kernel.shellescape()`
-
-### Changed
-- Better coverage of (u)pTeX primitives following publication of
- pTeX manual in English
-- Trim spaces surrounding file names
-
-### Removed
-- HarfTeX primitives
-
-## [2019-10-14]
-
-### Fixed
-- Correct handling of 'traditional' class options for backend
-
-## [2019-10-11]
-
-### Changed
-- Standard backend for (u)pTeX is now `dvips`
-- Minimum LuaTeX version now v0.95
-- Moved `\debug_on:n`, `\debug_off:n`, `\debug_suspend:` and `\debug_resume:`
- to stable
-- Accept 'traditional' class options for backend (`dvipdfmx`, `dvips`, etc.)
-- Performance enhancements when loading `expl3`
-
-### Fixed
-- Handling of files with no extension
-- Behaviour of Lua function `l3kernel.charcat` in some circumstances
-- Loading under ConTeXt
-
-## [2019-10-02]
-
-### Fixed
-- Variants using `\exp_args` functions with more than 9 arguments (see \#636)
-
-## [2019-09-30]
-
-### Fixed
-- File searching using `\file_full_name:n` (see \#634)
-
-## [2019-09-28]
-
-### Changed
-- Speed up variants and reduce their `\tracingall` output
-- Debug and deprecation code are now loaded independently of expl3 core
-- `\file_compare_timestamp:nNn(TF)` now usable in expansion contexts
-- Moved to stable:
- - `\bool_const:Nn`
- - `\dim_sign:n`
- - `\file_compare_timestamp:nNn(TF)`
- - FP `logb` operator
- - `\fp_sign:n`
- - `fparray` module
- - `\int_sign:n`
- - `\intarray_const_from_clist:Nn`
- - `\intarray_show:N`
- - `\ior_map_variable:NNn`
- - `\ior_str_map_variable:NNn`
- - `\mode_leave_vertical:`
- - `\prop_(g)set_from_clist:Nn`
- - `\prop_const_from_clist:Nn`
- - `\seq_const_from_clist:Nn`
- - `\seq_(g)shuffle:N`
- - `\sys_if_platform_unix:(TF)`
- - `\sys_if_platform_windows:(TF)`
- - `\sys_gset_rand_seed:`
- - `\sys_rand_seed:`
- - Shell access functions
-
-### Fixed
-- Key `.initial:n` property when combined with inherited keys (see \#631)
-
-## [2019-09-19]
-
-### Fixed
-- Loading Unicode data when some chars may be active (see \#627)
-
-## [2019-09-08]
-
-### Fixed
-- Missing internal variant (issue \#624)
-
-## [2019-09-05]
-
-### Added
-- `\file_full_name:n`, `\file_mdfive_hash:n`, `\file_size:n`,
- `\file_timestamp:n`
-- `\seq_map_tokens:Nn`, `\tl_map_tokens:nn`, `\tl_map_tokens:Nn`
-
-### Changed
-- Moved `\prop_map_tokens:Nn` to stable
-- Generate chars with catcode as-supplied when case changing
-
-## [2019-08-25]
-
-### Added
-- `\fp_if_nan:nTF`
-
-### Changed
-- Make round(.,nan)=nan with no "Invalid operation" error
-
-### Fixed
-- `\tl_rescan:nn` and `\tl_(g)set_rescan:Nnn` when single-line input
- contains a comment character (see \#607)
-- Final value of the variable in `\tl_map_variable:NNn` and
- `\clist_map_variable:NNn`.
-- Remove duplicate keys in `\prop_set_from_keyval:Nn` (see \#572)
-
-## [2019-08-14]
-
-### Deprecated
-- `\c_term_ior`
-
-### Fixed
-- Coffin pole intersection in some cases (see \#605)
-
-## [2019-07-25]
-
-### Fixed
-- Loading for `expl3` with plain TeX
-
-## [2019-07-01]
-
-### Added
-- Moved `l3str-convert` module to `l3kernel`
-
-### Changed
-- Ensure `\msg_fatal:nn` ends the TeX run if used inside an
- hbox (see \#587)
-- Moved backend code to a separate release schedule
-
-### Fixed
-- Handling of control sequences in key names (see \#594)
-
-## [2019-05-28]
-
-### Added
-- Experimental `\file_compare_timestamp:nNn(TF)`
-
-### Changed
-- Precedence of juxtaposition (implicit multiplication) in `l3fp`
- now different for keywords/variables and factors in parentheses
-
-## [2019-05-09]
-
-### Added
-- Experimental driver-level interfaces for image inclusion
-- Experimental `\ior_shell_open:Nn`
-
-### Fixed
-- Some issues in `dvisvgm` driver
-
-## [2019-05-07]
-
-### Added
-- `.muskip_set:N` property
-
-### Changed
-- Experimental `\driver_pdf_compress_objects:n` replaces
- `\driver_pdf_objects_(en|dis)able:`
-
-## [2019-05-05]
-
-### Added
-- `\char_str_<target>_case:N`
-
-### Fixed
-- Infinite loop in some cases in DVI mode due to link-breaking code
- (see \#570)
-- Category code of output from `\char_<target>_case:N`, and
- same issue in `\str_<target>_case:n`
-
-## [2019-05-03]
-
-### Added
-- New `l3legacy` module containing
- - `\legacy_if:n(TF)`
-
-### Changed
-- Moved `\file_get_mdfive_hash:nN(TF)`, `\file_get_size:nN(TF)`
- and `\file_get_timestamp:nN(TF)` to stable
-- Moved `\file_if_exist_input:n` and `\file_if_exist_input:nF` to stable
-- Moved `\file_input_stop:` to stable
-- Moved `\peek_N_type:TF` to stable
-
-## [2019-04-21]
-
-### Added
-- Experimental support for a range of PDF concepts at the lowest
- (driver abstraction) level
-
-## [2019-04-06]
-
-### Changed
-- Moved `\tl_if_single_token:n(TF)` to stable
-
-### Fixed
-- Support for ConTeXt from mid-December 2018
-
-## [2019-03-26]
-
-### Fixed
-- Loading when pre-TL'18 XeTeX is in use (see \#555)
-
-## [2019-03-05]
-
-### Added
-- `\str_log:n`, `\str_log:N`
-- `TF` versions for `\file_get_...:nN` and `\ior_(str_)get:NN` functions
-- `\cs_prefix_spec:N`, `\cs_argument_spec:N`, `\cs_replacement_spec:N`
-- `undo-recent-deprecations` option
-- `factorial` function in `l3fp`
-
-### Changed
-- Return values from `\file_get:nnN`, `\file_get_...:nN`, `\ior_get:NN`,
- `\sys_shell_get:nnN`
-- Moved coffin affine transformations to stable
-- Moved `\prop_count:N` to stable
-- Moved `\tl_count_tokens:n` to stable
-- Completed emulation of e-type argument when `\expanded` is unavailable
-- Made expandable messages expand their result, like usual messages
-- Made deprecation errors less intrusive by default
-- Stopped providing do-nothing `\color` macro when undefined
-
-### Deprecated
-- `\token_get_prefix_spec:N`, `\token_get_arg_spec:N`,
- `\token_get_replacement_spec:N` replaced by `\cs_prefix_spec:N`,
- `\cs_argument_spec:N`, `\cs_replacement_spec:N`, respectively
-
-### Fixed
-- Treatment of inherited keys when setting only known keys (see \#548)
-
-### Removed
-- Experimental `\skip_split_finite_else_action:nnNN`
-- Experimental `\tl_reverse_tokens:n`
-
-## [2019-02-15]
-
-### Changed
-- Defensive code for redefinition of `\time`, `\day`, `\month` and `\year`
-
-### Fixed
-- Resetting of key inheritance (see \#535)
-- Issue in deprecated command `\tl_set_from_file:Nnn`
- (see https://tex.stackexchange.com/q/474813/)
-
-## [2019-02-03]
-
-### Added
-- Support for return of whole path by `\keys_set_known:nnN`-like
- function `\keys_set_known:nnnN` (see \#508)
-- `.prop_(g)put:N` key property (see \#444)
-
-### Fixed
-- Handling of nested key setting when filtering, _etc._ (see \#526)
-- Inheritance of default values (see \#504)
-
-## [2019-01-28]
-
-### Added
-- Global versions of box affine functions, e.g. `\box_grotate:Nn`
-- Global versions of box size adjustment functions
-- `\box_(g)set_eq_drop:NN`, `\(h|v)box_unpack_drop:N`
-- `\file_get:nnN` and `\file_get:nnNTF`
-- Experimental functions `\sys_shell_get:nnN` and `\sys_shell_get:nnNTF`
-
-### Changed
-- `\char_generate:nn` now always takes exactly two expansions
-- Move `\prg_generate_conditional_variant:Nnn` to stable
-- Renamed experimental `\box_trim:Nnnnn` and `\box_viewport:Nnnnn` as
- `\box_set_trim:Nnnnn` and `\box_set_viewport:Nnnnn`, respectively
-
-### Deprecated
-- `\box_(g)set_eq_clear:NN`, replaced by `\box_(g)set_eq_drop:NN`
-- `\(h|v)box_unpack_clear:N`, replaced by `\(h|v)box_unpack_drop:N`
-- `\tl_(g)set_from_file(_x):Nnn`, replaced by `\file_get:nnN`
-
-### Fixed
-- Scope treatment of `\box_set_dp:N`, _etc._
-- In (u)platex: detection of spaces in `\tl_rescan:nn` and related functions
-
-### Removed
-- Experimental function family `\tl_(g)set_from_shell:(N|c)nn`
- (replaced by `\sys_shell_get:nnN`)
-
-## [2019-01-13]
-
-### Added
-- `\ior_map_variable:NNn` and `\ior_str_map_variable:NNn`
-
-### Fixed
-- Unclosed conditional with Unicode engines
-
-## [2019-01-12]
-
-### Changed
-- Improved `expl3` loading time with LuaTeX and XeTeX
-- Improved performance of `\ior_map_inline:Nn` and related functions
-
-### Fixed
-- Handling of accented characters under mixed case changing in 8-bit engines
- (see \#514)
-
-## [2019-01-01]
-
-### Added
-- `\iow_allow_break:`
-
-### Fixed
-- Correct fp randint with zero argument (see \#507)
-- Handling of `\current@color` with `(x)dvipdfmx` (see \#510)
-
-### Removed
-- Support for stand-alone `l3regex`, `l3sort`, `l3srt`, `l3tl-analysis`,
- `l3tl-build`
-- `\box_resize:Nnn`
-- `\box_use_clear:N`
-- `\c_minus_one`
-- `\file_add_path:nN`
-- `\file_list:`
-- `\file_path_include:n` and `\file_path_remove:n`
-- `\io(r|w)_list_streams:` and `\io(r|w)_log_streams:`
-- `\sort_ordered:` and `\sort_reversed:`
-- `\token_new:Nn`
-- Generation of invalid variants from `n`/`N` base types
-
-## [2018-12-12]
-
-### Changed
-- Move `\tl_range:nnn` to stable
-
-### Fixed
-- Loading in ConTeXt MkIV
-
-## [2018-12-11]
-
-### Changed
-- Enable `\char_generate:nn` to create active tokens with XeTeX
-
-## [2018-12-06]
-
-### Changed
-- Apply `\par` only at the end of vertical boxes
-- Move `\int_rand:n` to stable
-- Move `\<var>_rand_item:N` to stable
-
-### Fixed
-- Typo in `\lua_shipout_e:n` (see \#503)
-
-## [2018-11-19]
-
-### Added
-- Support for cross-compatibility primitives in XeTeX
-- `\int_sign:n`, `\dim_sign:n` and `\fp_sign:n`
-
-## [2018-10-19]
-
-### Fixed
-- Wrapping of text in messages, etc., for some line lengths (issue \#491)
-
-## [2018-10-17]
-
-### Added
-- `\g_msg_module_documentation_prop` (see \#471)
-- `\peek_remove_spaces:n`
-
-### Changed
-- Formatting of messages: now follows LaTeX2e closely
-
-### Deprecated
-- `\msg_interrupt:nn`, `\msg_log:n` and `\msg_term:n`
-
-### Fixed
-- Handling of inheritance for choice keys (issue \#483)
-
-## [2018-09-24]
-
-### Added
-- Some driver-level support for PDF features
-- `\peek_catcode_collect_inline:Nn`, `\peek_charcode_collect_inline:Nn`,
- `\peek_meaning_collect_inline:Nn`
-
-### Fixed
-- Handling of unknown keys when inheritance is active (issue \#481)
-
-## [2018-08-23]
-
-### Added
-- `\lua_escape:e`, `\lua_now:e` and `\lua_shipout_e:n`
-- `\str_case_e:nn(TF)` and `\str_if_eq:ee(TF)`
-- `\sys_if_platform_unix:(TF)` and `\sys_if_platform_windows:(TF)`
-- `\tl_(g)set_from_shell:Nnn`
-
-### Deprecated
-- `\lua_escape_x:n`, `\lua_now_x:n` and `\lua_shipout_x:n`
-- `\str_case_x:nn(TF)` and `\str_if_eq_x:nn(TF)`
-
-## [2018-06-14]
-
-### Added
-- Support for `e`-type argument using `\expanded` or macro emulation
-
-## [2018-06-01]
-
-### Added
-- `CHANGELOG.md` (issue \#460)
-
-### Fixed
-- Loading `expl3` with LuaTeX/XeTeX and certain letter tokens set
- to be active (see \#462)
-
-### Changed
-- Alter `\char_codepoint_from_bytes:n` to produce four groups in all
- cases; make `f`-type expandable
-
-## [2018-05-13]
-
-### Fixed
-- Correct date string in `expl3.dtx`
-- Correct `\c_sys_engine_version_str` when using XeTeX
-
-## [2018-05-12]
-
-### Added
-- Define `\c_zero_int` and `\c_one_int`
-- Implement `\c_sys_engine_version_str`
-- Implement `\seq_indexed_map_function/inline`
-- Implement `\intarray_gzero:N`
-- Implement `\intarray_const_from_clist:Nn`
-- Implement `\bool_set_inverse:N`
-- Implement `\bool_xor:nnTF` instead of just `\bool_xor_p:nn`
-- Implement candidate `\int_rand:n`
-- Implement `\intarray_gset_rand:Nnn`
-- Implement candidate `l3fparray` module
-
-### Changed
-- Update minimal required versions of XeTeX and LuaTeX
-- Deprecate named integer constants `\c_zero`. etc.
-- Move all primitives to `\tex_...:D namespace`,
- deprecating older engine-dependent prefixes
-- Several internal optimisations
-
-### Fixed
-- Expand boolean expression before calling `\chardef` (issue \#461)
-
-### Removed
-- Remove undocumented `\fp_function:Nw` and `\fp_new_function:Npn`
-
-## [2018-04-30]
-
-### Added
-- Implement `\tl_analysis_map_inline:nn`
-- Implement `\exp_args_generate:n` to define new `\exp_args:N...`
- functions
-- Low-level `\int_value:w` function
-- New experimental functions for
- - Building token lists piecewise
- - Fast manipulation of integer arrays
- - Sequence shuffling
- - `\seq_set_from_function:NnN`
- - `\char_codepoint_to_bytes:n`
-
-### Changed
-- Significant internal revision to use only internal functions
- 'private' to specific modules
-- Better documentation of cross-module kernel-internal functions
-- Enable `\char_generate:nn` for active chars
-- Renamed `\tl_show_analysis:(N|n)n` as `\tl_analysis_show:(N|n)n`
-- Change `\int_rand:nn` (and rand_item functions) to better use
- the RNG
-- Make prg break functions public
-- Make scan marks mechanism public
-- Make `\prg_do_nothing:` long rather than nopar (issue \#455)
-- Several performance improvements
-- Documentation improvements
-
-### Fixed
-- Only index TF, T, F functions together if they are `expl3`
- functions (issue \#453)
-- Make `\infty` and `\pi` into errors in fp expressions
- (issue \#357)
-
-### Removed
-- Deprecated functions expiring at end of 2017
-- Old module `.sty` files
-
-## [2018-03-05]
-
-### Changes
-- Adjustments to `l3drivers` to support `l3draw` development in
- `l3experimental` bundle
-
-## [2018-02-21]
-
-### Added
-- Tuple support in fp expressions
-- Step functions have been added for dim variables,
- e.g. `\dim_step_inline:nnnn`
-
-[Unreleased]: https://github.com/latex3/latex3/compare/2024-03-14...HEAD
-[2024-03-14]: https://github.com/latex3/latex3/compare/2024-02-20...2024-03-14
-[2024-02-20]: https://github.com/latex3/latex3/compare/2024-02-18...2024-02-20
-[2024-02-18]: https://github.com/latex3/latex3/compare/2024-02-13...2024-02-18
-[2024-02-13]: https://github.com/latex3/latex3/compare/2024-01-22...2024-02-13
-[2024-01-22]: https://github.com/latex3/latex3/compare/2024-01-04...2024-01-22
-[2024-01-04]: https://github.com/latex3/latex3/compare/2023-12-11...2024-01-04
-[2023-12-11]: https://github.com/latex3/latex3/compare/2023-12-08...2023-12-11
-[2023-12-08]: https://github.com/latex3/latex3/compare/2023-11-09...2023-12-08
-[2023-11-09]: https://github.com/latex3/latex3/compare/2023-11-01...2023-11-09
-[2023-11-01]: https://github.com/latex3/latex3/compare/2023-10-23...2023-11-01
-[2023-10-23]: https://github.com/latex3/latex3/compare/2023-10-10...2023-10-23
-[2023-10-10]: https://github.com/latex3/latex3/compare/2023-08-29...2023-10-10
-[2023-08-29]: https://github.com/latex3/latex3/compare/2023-08-11...2023-08-29
-[2023-08-11]: https://github.com/latex3/latex3/compare/2023-08-03...2023-08-11
-[2023-08-03]: https://github.com/latex3/latex3/compare/2023-06-30...2023-08-03
-[2023-06-30]: https://github.com/latex3/latex3/compare/2023-06-16...2023-06-30
-[2023-06-16]: https://github.com/latex3/latex3/compare/2023-06-05...2023-06-16
-[2023-06-05]: https://github.com/latex3/latex3/compare/2023-05-22...2023-06-05
-[2023-05-22]: https://github.com/latex3/latex3/compare/2023-05-15...2023-05-22
-[2023-05-15]: https://github.com/latex3/latex3/compare/2023-05-11...2023-05-15
-[2023-05-11]: https://github.com/latex3/latex3/compare/2023-05-05...2023-05-11
-[2023-05-05]: https://github.com/latex3/latex3/compare/2023-04-20...2023-05-05
-[2023-04-20]: https://github.com/latex3/latex3/compare/2023-04-19...2023-04-20
-[2023-04-19]: https://github.com/latex3/latex3/compare/2023-03-30...2023-04-19
-[2023-03-30]: https://github.com/latex3/latex3/compare/2023-02-22...2023-03-30
-[2023-02-22]: https://github.com/latex3/latex3/compare/2023-02-07...2023-02-22
-[2023-02-07]: https://github.com/latex3/latex3/compare/2023-02-02...2023-02-07
-[2023-02-02]: https://github.com/latex3/latex3/compare/2023-02-01...2023-02-02
-[2023-02-01]: https://github.com/latex3/latex3/compare/2023-01-24...2023-02-01
-[2023-01-24]: https://github.com/latex3/latex3/compare/2023-01-16...2023-01-24
-[2023-01-16]: https://github.com/latex3/latex3/compare/2022-12-17...2023-01-16
-[2022-12-17]: https://github.com/latex3/latex3/compare/2022-11-02...2022-12-17
-[2022-11-02]: https://github.com/latex3/latex3/compare/2022-10-26...2022-11-02
-[2022-10-26]: https://github.com/latex3/latex3/compare/2022-09-28...2022-10-26
-[2022-09-28]: https://github.com/latex3/latex3/compare/2022-08-30...2022-09-28
-[2022-08-30]: https://github.com/latex3/latex3/compare/2022-08-23...2022-08-30
-[2022-08-23]: https://github.com/latex3/latex3/compare/2022-08-05...2022-08-23
-[2022-08-05]: https://github.com/latex3/latex3/compare/2022-07-15...2022-08-05
-[2022-07-15]: https://github.com/latex3/latex3/compare/2022-07-14...2022-07-15
-[2022-07-14]: https://github.com/latex3/latex3/compare/2022-07-04...2022-07-14
-[2022-07-04]: https://github.com/latex3/latex3/compare/2022-07-01...2022-07-04
-[2022-07-01]: https://github.com/latex3/latex3/compare/2022-06-16...2022-07-01
-[2022-06-16]: https://github.com/latex3/latex3/compare/2022-06-02...2022-06-16
-[2022-06-02]: https://github.com/latex3/latex3/compare/2022-05-30...2022-06-02
-[2022-05-30]: https://github.com/latex3/latex3/compare/2022-05-04...2022-05-30
-[2022-05-04]: https://github.com/latex3/latex3/compare/2022-04-29...2022-05-04
-[2022-04-29]: https://github.com/latex3/latex3/compare/2022-04-20...2022-04-29
-[2022-04-20]: https://github.com/latex3/latex3/compare/2022-04-10...2022-04-20
-[2022-04-10]: https://github.com/latex3/latex3/compare/2022-02-24...2022-04-10
-[2022-02-24]: https://github.com/latex3/latex3/compare/2022-02-21...2022-02-24
-[2022-02-21]: https://github.com/latex3/latex3/compare/2022-02-05...2022-02-21
-[2022-02-05]: https://github.com/latex3/latex3/compare/2022-01-21...2022-02-05
-[2022-01-21]: https://github.com/latex3/latex3/compare/2022-01-12...2022-01-21
-[2022-01-12]: https://github.com/latex3/latex3/compare/2021-11-22...2022-01-12
-[2021-11-22]: https://github.com/latex3/latex3/compare/2021-11-12...2021-11-22
-[2021-11-12]: https://github.com/latex3/latex3/compare/2021-10-18...2021-11-12
-[2021-10-18]: https://github.com/latex3/latex3/compare/2021-10-17...2021-10-18
-[2021-10-17]: https://github.com/latex3/latex3/compare/2021-10-12...2021-10-17
-[2021-10-12]: https://github.com/latex3/latex3/compare/2021-08-27...2021-10-12
-[2021-08-27]: https://github.com/latex3/latex3/compare/2021-07-12...2021-08-27
-[2021-07-12]: https://github.com/latex3/latex3/compare/2021-06-18...2021-07-12
-[2021-06-18]: https://github.com/latex3/latex3/compare/2021-06-01...2021-06-18
-[2021-06-01]: https://github.com/latex3/latex3/compare/2021-05-27...2021-06-01
-[2021-05-27]: https://github.com/latex3/latex3/compare/2021-05-25...2021-05-27
-[2021-05-25]: https://github.com/latex3/latex3/compare/2021-05-11...2021-05-25
-[2021-05-11]: https://github.com/latex3/latex3/compare/2021-05-07...2021-05-11
-[2021-05-07]: https://github.com/latex3/latex3/compare/2021-02-18...2021-05-07
-[2021-02-18]: https://github.com/latex3/latex3/compare/2021-02-06...2021-02-18
-[2021-02-06]: https://github.com/latex3/latex3/compare/2021-02-02...2021-02-06
-[2021-02-02]: https://github.com/latex3/latex3/compare/2021-01-09...2021-02-02
-[2021-01-09]: https://github.com/latex3/latex3/compare/2020-12-07...2021-01-09
-[2020-12-07]: https://github.com/latex3/latex3/compare/2020-12-05...2020-12-07
-[2020-12-05]: https://github.com/latex3/latex3/compare/2020-12-03...2020-12-05
-[2020-12-03]: https://github.com/latex3/latex3/compare/2020-10-27...2020-12-03
-[2020-10-27]: https://github.com/latex3/latex3/compare/2020-10-05...2020-10-27
-[2020-10-05]: https://github.com/latex3/latex3/compare/2020-09-24...2020-10-05
-[2020-09-24]: https://github.com/latex3/latex3/compare/2020-09-06...2020-09-24
-[2020-09-06]: https://github.com/latex3/latex3/compare/2020-09-03...2020-09-06
-[2020-09-03]: https://github.com/latex3/latex3/compare/2020-09-01...2020-09-03
-[2020-09-01]: https://github.com/latex3/latex3/compare/2020-08-07...2020-09-01
-[2020-08-07]: https://github.com/latex3/latex3/compare/2020-07-17...2020-08-07
-[2020-07-17]: https://github.com/latex3/latex3/compare/2020-06-18...2020-07-17
-[2020-06-18]: https://github.com/latex3/latex3/compare/2020-06-03...2020-06-18
-[2020-06-03]: https://github.com/latex3/latex3/compare/2020-05-15...2020-06-03
-[2020-05-15]: https://github.com/latex3/latex3/compare/2020-05-14...2020-05-15
-[2020-05-14]: https://github.com/latex3/latex3/compare/2020-05-11...2020-05-14
-[2020-05-11]: https://github.com/latex3/latex3/compare/2020-05-05...2020-05-11
-[2020-05-05]: https://github.com/latex3/latex3/compare/2020-04-06...2020-05-05
-[2020-04-06]: https://github.com/latex3/latex3/compare/2020-03-06...2020-04-06
-[2020-03-06]: https://github.com/latex3/latex3/compare/2020-03-03...2020-03-06
-[2020-03-03]: https://github.com/latex3/latex3/compare/2020-02-25...2020-03-03
-[2020-02-25]: https://github.com/latex3/latex3/compare/2020-02-21...2020-02-25
-[2020-02-21]: https://github.com/latex3/latex3/compare/2020-02-14...2020-02-21
-[2020-02-14]: https://github.com/latex3/latex3/compare/2020-02-13...2020-02-14
-[2020-02-13]: https://github.com/latex3/latex3/compare/2020-02-11...2020-02-13
-[2020-02-11]: https://github.com/latex3/latex3/compare/2020-02-08...2020-02-11
-[2020-02-08]: https://github.com/latex3/latex3/compare/2020-02-03...2020-02-08
-[2020-02-03]: https://github.com/latex3/latex3/compare/2020-01-31...2020-02-03
-[2020-01-31]: https://github.com/latex3/latex3/compare/2020-01-22...2020-01-31
-[2020-01-22]: https://github.com/latex3/latex3/compare/2020-01-12...2020-01-22
-[2020-01-12]: https://github.com/latex3/latex3/compare/2019-11-07...2020-01-12
-[2019-11-07]: https://github.com/latex3/latex3/compare/2019-10-28...2019-11-07
-[2019-10-28]: https://github.com/latex3/latex3/compare/2019-10-27...2019-10-28
-[2019-10-27]: https://github.com/latex3/latex3/compare/2019-10-24...2019-10-27
-[2019-10-24]: https://github.com/latex3/latex3/compare/2019-10-21...2019-10-24
-[2019-10-21]: https://github.com/latex3/latex3/compare/2019-10-14...2019-10-21
-[2019-10-14]: https://github.com/latex3/latex3/compare/2019-10-11...2019-10-14
-[2019-10-11]: https://github.com/latex3/latex3/compare/2019-10-02...2019-10-11
-[2019-10-02]: https://github.com/latex3/latex3/compare/2019-09-30...2019-10-02
-[2019-09-30]: https://github.com/latex3/latex3/compare/2019-09-28...2019-09-30
-[2019-09-28]: https://github.com/latex3/latex3/compare/2019-09-19...2019-09-28
-[2019-09-19]: https://github.com/latex3/latex3/compare/2019-09-08...2019-09-19
-[2019-09-08]: https://github.com/latex3/latex3/compare/2019-09-05...2019-09-08
-[2019-09-05]: https://github.com/latex3/latex3/compare/2019-08-25...2019-09-05
-[2019-08-25]: https://github.com/latex3/latex3/compare/2019-08-14...2019-08-25
-[2019-08-14]: https://github.com/latex3/latex3/compare/2019-07-25...2019-08-14
-[2019-07-25]: https://github.com/latex3/latex3/compare/2019-07-01...2019-07-25
-[2019-07-01]: https://github.com/latex3/latex3/compare/2019-05-28...2019-07-01
-[2019-05-28]: https://github.com/latex3/latex3/compare/2019-05-09...2019-05-28
-[2019-05-09]: https://github.com/latex3/latex3/compare/2019-05-07...2019-05-09
-[2019-05-07]: https://github.com/latex3/latex3/compare/2019-05-05...2019-05-07
-[2019-05-05]: https://github.com/latex3/latex3/compare/2019-05-03...2019-05-05
-[2019-05-03]: https://github.com/latex3/latex3/compare/2019-04-21...2019-05-03
-[2019-04-21]: https://github.com/latex3/latex3/compare/2019-04-06...2019-04-21
-[2019-04-06]: https://github.com/latex3/latex3/compare/2019-03-26...2019-04-06
-[2019-03-26]: https://github.com/latex3/latex3/compare/2019-03-05...2019-03-26
-[2019-03-05]: https://github.com/latex3/latex3/compare/2019-02-15...2019-03-05
-[2019-02-15]: https://github.com/latex3/latex3/compare/2019-02-03...2019-02-15
-[2019-02-03]: https://github.com/latex3/latex3/compare/2019-01-28...2019-02-03
-[2019-01-28]: https://github.com/latex3/latex3/compare/2019-01-13...2019-01-28
-[2019-01-13]: https://github.com/latex3/latex3/compare/2019-01-12...2019-01-13
-[2019-01-12]: https://github.com/latex3/latex3/compare/2019-01-01...2019-01-12
-[2019-01-01]: https://github.com/latex3/latex3/compare/2018-12-12...2019-01-01
-[2018-12-12]: https://github.com/latex3/latex3/compare/2018-12-11...2018-12-12
-[2018-12-11]: https://github.com/latex3/latex3/compare/2018-12-06...2018-12-11
-[2018-12-06]: https://github.com/latex3/latex3/compare/2018-11-19...2018-12-06
-[2018-11-19]: https://github.com/latex3/latex3/compare/2018-10-31...2018-11-19
-[2018-10-31]: https://github.com/latex3/latex3/compare/2018-10-26...2018-10-31
-[2018-10-26]: https://github.com/latex3/latex3/compare/2018-10-19...2018-10-26
-[2018-10-19]: https://github.com/latex3/latex3/compare/2018-10-17...2018-10-19
-[2018-10-17]: https://github.com/latex3/latex3/compare/2018-09-24...2018-10-17
-[2018-09-24]: https://github.com/latex3/latex3/compare/2018-08-23...2018-09-24
-[2018-08-23]: https://github.com/latex3/latex3/compare/2018-06-14...2018-08-23
-[2018-06-14]: https://github.com/latex3/latex3/compare/2018-06-01...2018-06-14
-[2018-06-01]: https://github.com/latex3/latex3/compare/2018-05-13...2018-06-01
-[2018-05-13]: https://github.com/latex3/latex3/compare/2018-05-12...2018-05-13
-[2018-05-12]: https://github.com/latex3/latex3/compare/2018-04-30...2018-05-12
-[2018-04-30]: https://github.com/latex3/latex3/compare/2018-03-05...2018-04-30
-[2018-03-05]: https://github.com/latex3/latex3/compare/2018-02-21...2018-03-05
-[2018-02-21]: https://github.com/latex3/latex3/compare/2017-12-16...2018-02-21
diff --git a/macros/latex/contrib/l3kernel/README.md b/macros/latex/contrib/l3kernel/README.md
deleted file mode 100644
index 8ef94a41ac..0000000000
--- a/macros/latex/contrib/l3kernel/README.md
+++ /dev/null
@@ -1,96 +0,0 @@
-LaTeX3 Programming Conventions
-==============================
-
-Release 2024-03-14
-
-Overview
---------
-
-The files of the `l3kernel` bundle provide an API for TeX programmers
-with defined syntax conventions, completely separating it from document level
-syntax. Hence, the commands provided are not intended for use at the document
-level nor for use in describing design layouts in document class files.
-
-This API provides the foundation on which new additions to the LaTeX kernel and
-other advanced extensions are built. The programming layer is designed to be
-loaded as part of LaTeX2e format building or as a loaded package with plain TeX
-or other formats.
-
-The syntax and functionality provided by `l3kernel` is regarded by the LaTeX
-team as stable. There may still be changes to some functions, but these will be
-very minor when compared to the scope of `l3kernel`. In particular, no functions
-will be removed, although some may be deprecated.
-
-
-Requirements
-------------
-
-The `l3kernel` bundle requires the e-TeX extensions and a number of additional
-'utility' primitives, almost all of which were first added to pdfTeX. In
-particular, the functionality equivalent to the following pdfTeX primitives must
-be available
-
-- `\ifincsname`
-- `\ifpdfprimitive`
-- `\pdfcreationdate`
-- `\pdfelapsedtime`
-- `\pdffiledump`
-- `\pdffilemoddate`
-- `\pdffilesize`
-- `\pdflastxpos`
-- `\pdflastypos`
-- `\pdfmdfivesum`
-- `\pdfnormaldeviate`
-- `\pdfpageheight`
-- `\pdfpagewidth`
-- `\pdfprimitive`
-- `\pdfrandomseed`
-- `\pdfresettimer`
-- `\pdfsavepos`
-- `\pdfsetrandomseed`
-- `\pdfshellescape`
-- `\pdfstrcmp`
-- `\pdfuniformdeviate`
-
-For ease of reference, these primitives will be referred to as the 'pdfTeX
-utilities'. With the exception of `\expanded`, these have been present in pdfTeX
-since the release of version 1.40.0 in 2007; `\expanded` was added for TeX Live
-2019. Similarly, the full set of these utility primitives has been available in
-XeTeX from the 2019 TeX Live release, and has always been available in LuaTeX
-(some by Lua emulation). The Japanese pTeX and upTeX gained all of the above
-(except `\ifincsname`) for TeX Live 2019 and `\ifincsname` for TeX Live 2020.
-
-Starting from release 2023-05-15, the `\expanded` primitive is *required*.
-Its slow emulation has been removed.
-
-In addition to the above, engines which are fully Unicode-compatible
-must provide the functionality of the following primitives, documented in the
-LuaTeX manual
-
-- `\Uchar`
-- `\Ucharcat`
-- `\Umathcode`
-
-The existence of the primitive `\Umathcode` is used as the marker for Unicode
-support.
-
-Issues
-------
-
-The issue tracker for LaTeX3 is currently located
-[on GitHub](https://github.com/latex3/latex3/issues).
-
-The LaTeX Project
-------------------
-
-Development of LaTeX3 is carried out by
-[The LaTeX Project](https://www.latex-project.org/latex3/).
-
-The development team can be contacted
-by e-mail: <latex-team@latex-project.org>.
-
------
-
-<p>Copyright (C) 1998-2012,2015-2024 The LaTeX Project <br />
-<a href="http://latex-project.org/">http://latex-project.org/</a> <br />
-All rights reserved.</p>
diff --git a/macros/latex/contrib/l3kernel/expl3.dtx b/macros/latex/contrib/l3kernel/expl3.dtx
deleted file mode 100644
index 76ef8ec919..0000000000
--- a/macros/latex/contrib/l3kernel/expl3.dtx
+++ /dev/null
@@ -1,1798 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: expl3.dtx
-%
-% Copyright (C) 1990-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver|generic|package|2ekernel>
-%</driver|generic|package|2ekernel>
-\def\ExplFileDate{2024-03-14}%
-%<*driver>
-\documentclass[full]{l3doc}
-\usepackage{graphicx}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \providecommand\acro[1]{\textsc{\MakeLowercase{#1}}}
-% \newenvironment{arg-description}{%
-% \begin{itemize}\def\makelabel##1{\hss\llap{\bfseries##1}}}{\end{itemize}}
-%
-% \title{^^A
-% The \pkg{expl3} package and \LaTeX3 programming^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \begin{abstract}
-%
-% This document gives an introduction to a new set of programming
-% conventions that have been designed to meet the requirements of
-% implementing large scale \TeX{} macro programming projects such as
-% \LaTeX{}. These programming conventions are the base layer of \LaTeX3.
-%
-% The main features of the system described are:
-% \begin{itemize}
-% \item classification of the macros (or, in \LaTeX{} terminology,
-% commands) into \LaTeX{} functions and \LaTeX{} parameters, and also
-% into modules containing related commands;
-% \item a systematic naming scheme based on these classifications;
-% \item a simple mechanism for controlling the expansion of a function's
-% arguments.
-% \end{itemize}
-% This system is being used as the basis for \TeX{} programming within
-% The \LaTeX{} Project. Note that the language is not intended for either
-% document mark-up or style specification. Instead, it is intended that
-% such features will be built on top of the conventions described here.
-%
-% This document is an introduction to the ideas behind the \pkg{expl3}
-% programming interface. For the complete documentation of the programming
-% layer provided by The \LaTeX{} Project, see the accompanying
-% \texttt{interface3} document.
-%
-% \end{abstract}
-%
-% \section{Introduction}
-%
-% The first step to develop a \LaTeX{} kernel beyond \LaTeXe{} is to
-% address how the underlying system is programmed. Rather than the
-% current mix of \LaTeX{} and \TeX{} macros, the \LaTeX3 system provides
-% its own consistent interface to all of the functions needed to
-% control \TeX{}. A key part of this work is to ensure that everything
-% is documented, so that \LaTeX{} programmers and users can work
-% efficiently without needing to be familiar with the internal nature
-% of the kernel or with plain \TeX{}.
-%
-% The \pkg{expl3} bundle provides this new programming interface for
-% \LaTeX{}. To make programming systematic, \LaTeX3 uses some very
-% different conventions to \LaTeXe{} or plain \TeX{}. As a result,
-% programmers starting with \LaTeX3 need to become familiar with
-% the syntax of the new language.
-%
-% The next section shows where this language fits into a complete
-% \TeX{}-based document processing system. We then describe the major
-% features of the syntactic structure of command names, including the
-% argument specification syntax used in function names.
-%
-% The practical ideas behind this argument syntax will be explained,
-% together with the expansion control mechanism and the interface
-% used to define variant forms of functions.
-%
-% As we shall demonstrate, the use of a structured naming scheme and of
-% variant forms for functions greatly improves the readability of the
-% code and hence also its reliability. Moreover, experience has shown
-% that the longer command names which result from the new syntax do not
-% make the process of \emph{writing} code significantly harder.
-%
-% \section{Languages and interfaces}
-%
-% It is possible to identify several distinct languages related to the
-% various interfaces that are needed in a \TeX{}-based document processing
-% system. This section looks at those we consider most important for
-% the \LaTeX3 system.
-%
-% \begin{description}
-% \item[Document mark-up] This comprises those commands (often called
-% tags) that are to embedded in the document (the |.tex| file).
-%
-% It is generally accepted that such mark-up should be essentially
-% \emph{declarative}. It may be traditional \TeX{}-based mark-up such
-% as \LaTeXe{}, as described in~\cite{A-W:LLa94} and~\cite{A-W:GMS94},
-% or a mark-up language defined via \acro{HTML} or \acro{XML}.
-%
-% One problem with more traditional \TeX{} coding conventions (as
-% described in~\cite{A-W:K-TB}) is that the names and syntax of \TeX{}'s
-% primitive formatting commands are ingeniously designed to be
-% \enquote{natural} when used directly by the author as document mark-up
-% or in macros. Ironically, the ubiquity (and widely recognised
-% superiority) of logical mark-up has meant that such explicit
-% formatting commands are almost never needed in documents or in
-% author-defined macros. Thus they are used almost exclusively by
-% \TeX{} programmers to define higher-level commands, and their
-% idiosyncratic syntax is not at all popular with this community.
-% Moreover, many of them have names that could be very useful as
-% document mark-up tags were they not pre-empted as primitives
-% (\emph{e.g.}~\tn{box} or \tn{special}).
-%
-% \item[Designer interface] This relates a (human) typographic
-% designer's specification for a document to a program that
-% \enquote{formats
-% the document}. It should ideally use a declarative language that
-% facilitates expression of the relationship and spacing rules
-% specified for the layout of the various document elements.
-%
-% This language is not embedded in document text and it will be very
-% different in form to the document mark-up language. For \LaTeX{},
-% this level was almost completely missing from \LaTeX{}2.09; \LaTeXe{}
-% made some improvements in this area but it is still the case that
-% implementing a design specification in \LaTeX{} requires far more
-% \enquote{low-level} coding than is acceptable.
-%
-% \item[Programmer interface]
-% This language is the implementation language within which the
-% basic typesetting functionality is implemented, building upon the
-% primitives of \TeX{} (or a successor program). It may also be used
-% to implement the previous two languages \enquote{within} \TeX{}, as in
-% the
-% current \LaTeX{} system.
-%
-% \end{description}
-%
-% The last layer is covered by the conventions described in this
-% document, which describes a system aimed at providing a suitable
-% basis for coding \LaTeX3. Its main distinguishing features are
-% summarised here:
-% \begin{itemize}
-% \item A consistent naming scheme for all commands, including \TeX{}
-% primitives.
-% \item The classification of commands as \LaTeX{} functions or \LaTeX{}
-% parameters, and also their division into modules according to their
-% functionality.
-% \item A simple mechanism for controlling argument expansion.
-% \item Provision of a set of core \LaTeX{} functions that is sufficient
-% for handling programming constructs such as queues, sets, stacks,
-% property lists.
-% \item A \TeX{} programming environment in which, for example, all
-% white space is ignored.
-% \end{itemize}
-%
-% \section{The naming scheme}
-%
-% \LaTeX3 does not use |@| as a \enquote{letter} for defining
-% internal macros. Instead, the symbols |_| and |:|
-% are used in internal macro names to provide structure. In
-% contrast to the plain \TeX{} format and the \LaTeXe{} kernel, these
-% extra letters are used only between parts of a macro name (no
-% strange vowel replacement).
-%
-% While \TeX{} is actually a macro processor, by
-% convention for the \pkg{expl3} programming language we distinguish between
-% \emph{functions} and \emph{variables}. Functions can have arguments and they
-% are either expanded or executed. Variables can be assigned values and they
-% are used in arguments to functions; they are not used directly but are
-% manipulated by functions (including getting and setting functions).
-% Functions and variables with a related functionality (for example accessing
-% counters, or manipulating token lists, \emph{etc.})\ are collected together
-% into a
-% \emph{module}.
-%
-% \subsection{Examples}
-%
-% Before giving the details of the naming scheme, here are a few typical
-% examples to indicate the flavour of the scheme; first some variable
-% names.
-% \begin{quote}
-% \cs{l_tmpa_box} is a local variable (hence the~|l_| prefix)
-% corresponding to a box register.\\
-% \cs{g_tmpa_int} is a global variable (hence the~|g_| prefix)
-% corresponding to an integer register (i.e.~a \TeX{} count
-% register).\\
-% \cs{c_empty_tl} is the constant~(|c_|) token list variable
-% that is always empty.
-% \end{quote}
-%
-% Now here is an example of a typical function name.
-%
-% \cs{seq_push:Nn} is the function which puts the token list specified
-% by its second argument onto the stack specified by its first argument.
-% The different natures of the two arguments are indicated by the~|:Nn|
-% suffix. The first argument must be a single token which \enquote{names}
-% the stack parameter: such single-token arguments are denoted~|N|.
-% The second argument is a normal \TeX{} \enquote{undelimited argument},
-% which
-% may either be a single token or a balanced, brace-delimited token
-% list (which we shall here call a \textit{braced token list}): the~|n|
-% denotes such a \enquote{normal} argument form. The name of the function
-% indicates it belongs to the |seq| module.
-%
-% \subsection{Formal naming syntax}
-%
-% We shall now look in more detail at the syntax of these names. A
-% function name in \LaTeX3 has a name consisting of three parts:
-% \begin{quote}
-% |\|\meta{module}|_|\meta{description}|:|\meta{arg-spec}
-% \end{quote}
-% while a variable has (up to) four distinct parts to its name:
-% \begin{quote}
-% |\|\meta{scope}|_|\meta{module}|_|\meta{description}|_|\meta{type}
-% \end{quote}
-%
-% The syntax of all names contains
-% \begin{quote}
-% \meta{module} and \meta{description}
-% \end{quote}
-% these both give information about the command.
-%
-% A \emph{module} is a collection of closely related functions and
-% variables. Typical module names include~|int| for integer parameters
-% and related functions,~|seq| for sequences and~|box| for boxes.
-%
-% Packages providing new programming functionality will add new modules
-% as needed; the programmer can choose any unused name, consisting
-% of letters only, for a module. In general, the module name and module
-% prefix should be related: for example, the kernel module containing
-% \texttt{box} functions is called \texttt{l3box}. Module names and
-% programmers' contact details are listed in \pkg{l3prefixes.csv}.
-%
-% The \emph{description} gives more detailed information about the
-% function or parameter, and provides a unique name for it. It should
-% consist of letters and, possibly,~|_|~characters. In general, the
-% description should use |_| to divide up \enquote{words} or other easy to
-% follow parts of the name. For example, the \LaTeX3 kernel provides
-% \cs{if_cs_exist:N} which, as might be expected, tests if a command
-% name exists.
-%
-% Where functions for variable manipulation can perform assignments
-% either locally or globally, the latter case is indicated by the inclusion of
-% a |g| in the second part of the function name. Thus \cs{tl_set:Nn} is a local
-% function but \cs{tl_gset:Nn} acts globally. Functions of this type are
-% always documented together, and the scope of action may therefore be
-% inferred from the presence or absence of a |g|. See the next subsection for
-% more detail on variable scope.
-%
-% \subsubsection{Separating private and public material}
-%
-% One of the issues with the \TeX{} language is that it doesn't support
-% name spaces and encapsulation other than by convention. As a result
-% nearly every internal command in the \LaTeXe{} kernel has eventually
-% be used by extension packages as an entry point for modifications or
-% extensions. The consequences of this is that nowadays it is next to
-% impossible to change anything in the \LaTeXe{} kernel (even if it is
-% clearly just an internal command) without breaking something.
-%
-% In \pkg{expl3} we hope to improve this situation drastically by
-% clearly separating public interfaces (that extension packages can use
-% and rely on) and private functions and variables (that should not
-% appear outside of their module). There is (nearly) no way to enforce
-% this without severe computing overhead, so we implement it only
-% through a naming convention, and some support mechanisms. However, we
-% think that this naming convention is easy to understand and to follow,
-% so that we are confident that this will adopted and provides the
-% desired results.
-%
-% Functions created by a module may either be \enquote{public} (documented
-% with a defined interface) or \enquote{private} (to be used only within
-% that module, and thus not formally documented). It is important that
-% only documented interfaces are used; at the same time, it is necessary to
-% show within the name of a function or variable whether it is public
-% or private.
-%
-% To allow clear separation of these two cases, the following convention
-% is used. To denote a private function or a private variable (of the module),
-% two |_| characters are used in front of the module name, e.g.
-% \begin{verbatim}
-% \module_foo:nnn
-% \end{verbatim}
-% is a public function which should be documented while
-% \begin{verbatim}
-% \__module_foo:nnn
-% \end{verbatim}
-% is private to the module, and should \emph{not} be used outside of that
-% module.
-%
-% For variables, to avoid three |_| in a row, the separator for the variable
-% scope and any leading |_| for a private interface in the module part are
-% combined. Thus
-% \begin{verbatim}
-% \l_module_foo_tl
-% \end{verbatim}
-% is a public variable and
-% \begin{verbatim}
-% \l__module_foo_tl
-% \end{verbatim}
-% is private.
-%
-% \subsubsection{Using \texttt{@@} and \pkg{DocStrip} to mark private code}
-%
-% The formal syntax for internal functions allows clear separation of public
-% and private code, but includes redundant information (every internal function
-% or variable includes \texttt{__\meta{module}}). To aid programmers, the
-% \pkg{DocStrip} program introduces the syntax
-% \begin{quote}
-% \ttfamily
-% |%<@@=|\meta{module}|>|
-% \end{quote}
-% which then allows |@@| (and |_@@| in case of variables) to be used as
-% a place holder for \texttt{__\meta{module}} in code. Thus for example
-% \begin{verbatim}
-% %<@@=foo>
-% % \begin{macrocode}
-% \cs_new:Npn \@@_function:n #1
-% ...
-% \tl_new:N \l_@@_my_tl
-% % \end{macrocode}
-% \end{verbatim}
-% is converted by \pkg{DocStrip} to
-% \begin{verbatim}
-% \cs_new:Npn \__foo_function:n #1
-% ...
-% \tl_new:N \l__foo_my_tl
-% \end{verbatim}
-% on extraction. As you can see both |_@@| and |@@| are mapped to
-% \texttt{__\meta{module}}, because we think that this helps to
-% distinguish variables from functions in the source when the |@@|
-% convention is used.
-%
-% \subsubsection{Variables: declaration}
-%
-% In well-formed \pkg{expl3} code, variables should always be declared before
-% assignment is attempted. This is true even for variable types where the
-% underlying \TeX{} implementation will allow direct assignment. This applies
-% both to setting directly (\cs{tl_set:Nn}, etc.) and to setting equal
-% (\cs{tl_set_eq:NN}, etc.).
-%
-% To help programmers to adhere to this approach, the debugging option
-% |check-declarations| may be given
-% \begin{verbatim}
-% \debug_on:n { check-declarations }
-% \end{verbatim}
-% and will issue an error whenever an assignment is made to a non-declared
-% variable. There is a performance implication, so this option should only
-% be used for testing.
-%
-% \subsubsection{Variables: scope and type}
-%
-% The \meta{scope} part of the name describes how the variable can be
-% accessed. Variables are classified as local, global or constant.
-% This \emph{scope} type appears as a code at the beginning of the name;
-% the codes used are:
-% \begin{arg-description}
-% \item[c] constants (global variables whose value should not be
-% changed);
-% \item[g] variables whose value should only be set globally;
-% \item[l] variables whose value should only be set locally.
-% \end{arg-description}
-%
-% Separate functions are provided to assign data to local and global
-% variables; for example, \cs{tl_set:Nn} and \cs{tl_gset:Nn} respectively
-% set the value of a local or global \enquote{token list} variable.
-% Note that it is a poor \TeX{} practice to intermix local and global
-% assignments to a variable; otherwise you risk exhausting the save
-% stack.\footnote{See \emph{The \TeX{}book}, p.\,301, for further
-% information.}
-%
-% The \meta{type} is in the list of available
-% \emph{data-types};\footnote{Of course, if a totally new data type is
-% needed then this will not be the case. However, it is hoped that only
-% the kernel team will need to create new data types.} these include the
-% primitive \TeX{} data-types, such as the various registers, but to
-% these are added data-types built within the \LaTeX{} programming
-% system.
-%
-% The data types in \LaTeX3 are:
-% \begin{description}
-% \item[bitset] a string of bits (\texttt{0} and \texttt{1} tokens) that are
-% accessed by position or by name;
-% \item[bool] either true or false (the \LaTeX3 implementation does
-% not use \tn{iftrue} or \tn{iffalse});
-% \item[box] box register;
-% \item[cctab] category code table;
-% \item[clist] comma separated list;
-% \item[coffin] a \enquote{box with handles} --- a higher-level data
-% type for carrying out |box| alignment operations;
-% \item[dim] \enquote{rigid} lengths;
-% \item[fp] floating-point values;
-% \item[fparray] fixed-size vector of floating-point values;
-% \item[int] integer-valued count register;
-% \item[intarray] fixed-size vector of integer values;
-% \item[ior] an input stream (for reading from a file);
-% \item[iow] an output stream (for writing to a file);
-% \item[muskip] math mode \enquote{rubber} lengths;
-% \item[prop] property list;
-% \item[regex] regular expression;
-% \item[seq] sequence: a data-type used to implement lists (with
-% access at both ends) and stacks;
-% \item[skip] \enquote{rubber} lengths;
-% \item[str] \TeX{} strings: a special case of |tl| in which all
-% characters have category \enquote{other} (catcode~$12$),
-% other than spaces which are category \enquote{space}
-% (catcode~$10$);
-% \item[token] equal to a single arbitrary token;
-% \item[tl] \enquote{token list variables}: placeholders for token lists.
-% \end{description}
-% When the \meta{type} and \meta{module} are identical (as often happens in
-% the more basic modules) the \meta{module} part is often omitted for
-% aesthetic reasons.
-%
-% The name \enquote{token list} may cause confusion, and so some
-% background is useful. \TeX{} works with tokens and lists of tokens,
-% rather than characters. It provides two ways to store these token
-% lists: within macros and as token registers (|toks|). The
-% implementation in \LaTeX3 means that |toks| are not required, and that
-% all operations for storing tokens can use the |tl| variable type.
-%
-% Experienced \TeX{} programmers will notice that some of the variable
-% types listed are native \TeX{} registers whilst others are not. In
-% general, the underlying \TeX{} implementation for a data structure may
-% vary but the \emph{documented interface} will be stable. For example,
-% the |prop| data type was originally implemented as a |toks|, but
-% is currently built on top of the |tl| data structure.
-%
-% \subsubsection{Variables: guidance}
-%
-% Both comma lists and sequences have similar characteristics.
-% They both use special delimiters to mark out one entry from the
-% next, and are both accessible at both ends. In general, it is
-% easier to create comma lists `by hand' as they can be typed
-% in directly. User input often takes the form of a comma separated
-% list and so there are many cases where this is the obvious
-% data type to use. On the other hand, sequences use special internal
-% tokens to separate entries. This means that they can be used to
-% contain material that comma lists cannot (such as items that may
-% themselves contain commas!). In general, comma lists should be
-% preferred for creating fixed lists inside programs and for
-% handling user input where commas will not occur. On the other
-% hand, sequences should be used to store arbitrary lists of
-% data.
-%
-% \pkg{expl3} implements stacks using the sequence data structure.
-% Thus creating stacks involves first creating a sequence, and
-% then using the sequence functions which work in a stack manner
-% (\cs{seq_push:Nn}, \emph{etc}.).
-%
-% Due to the nature of the underlying \TeX{} implementation, it is
-% possible to assign values to token list variables and comma lists
-% without first declaring them. However, this is \emph{not supported
-% behavior}. The \LaTeX3 coding convention is that all variables must
-% be declared before use.
-%
-% The \pkg{expl3} package can be loaded with the \texttt{check-declarations}
-% option to verify that all variables are declared before use. This has
-% a performance implication and is therefore intended for testing during
-% development and not for use in production documents.
-%
-% \subsubsection{Functions: argument specifications}
-%
-% Function names end with an \meta{arg-spec} after a colon. This
-% gives an indication of the types of argument that a function takes,
-% and provides a convenient method of naming similar functions that
-% differ only in their argument forms (see the next section for
-% examples).
-%
-% The \meta{arg-spec} consists of a (possibly empty) list of letters,
-% each denoting one argument of the function. The letter, including
-% its case, conveys information about the type of argument required.
-%
-% All functions have a base form with arguments using one of the
-% following argument specifiers:
-% \begin{arg-description}
-% \item[n] Unexpanded token or braced token list.\\
-% This is a standard \TeX{} undelimited macro argument.
-% \item[N] Single token (unlike~|n|, the argument must \emph{not} be
-% surrounded by braces).\\
-% A typical example of a command taking an~|N|
-% argument is~|\cs_set|, in which the command being defined must be
-% unbraced.
-% \item[p] Primitive \TeX{} parameter specification.\\
-% This can be something simple like~|#1#2#3|, but may use arbitrary
-% delimited argument syntax such as: |#1,#2\q_stop#3|. This is used
-% when defining functions.
-% \item[T,F]
-% These are special cases of~|n| arguments, used for the
-% true and false code in conditional commands.
-% \end{arg-description}
-% There are two other specifiers with more general meanings:
-% \begin{arg-description}
-% \item[D] Stands for \textbf{Do not use}. This special case is used
-% for \TeX{} primitives. These functions have no standardized
-% syntax, they are engine dependent and their name can change
-% without warning, thus their use is \emph{strongly discouraged} in
-% package code: programmers should instead use the interfaces
-% documented in \href{interface3.pdf}{interface3.pdf}%^^A
-% \footnote{If a primitive offers a functionality not yet in the
-% kernel, programmers and users are encouraged to write to the
-% \texttt{LaTeX-L} mailing list
-% (\url{mailto:LATEX-L@listserv.uni-heidelberg.de}) describing
-% their use-case and intended behaviour, so that a possible
-% interface can be discussed. Temporarily, while an interface is
-% not provided, programmers may use the procedure described in the
-% \href{l3styleguide.pdf}{l3styleguide.pdf}.}.
-% \item[w] This means that the argument syntax is \enquote{weird} in that it
-% does not follow any standard rule. It is used for functions with
-% arguments that take non standard forms: examples are \TeX{}-level
-% delimited arguments and the boolean tests needed after certain
-% primitive |\if|\ldots{} commands.
-% \end{arg-description}
-%
-% In case of |n| arguments that consist of a single token the
-% surrounding braces can be omitted in nearly all
-% situations---functions that force the use of braces even for single
-% token arguments are explicitly mentioned. However, programmers are
-% encouraged to always use braces around \texttt{n} arguments, as this
-% makes the relationship between function and argument clearer.
-%
-% Further argument specifiers are available as part of the expansion
-% control system. These are discussed in the next section.
-%
-% \section{Expansion control}
-%
-% Let's take a look at some typical operations one might want to
-% perform. Suppose we maintain a stack of open files and we use the
-% stack |\g_ior_file_name_seq| to keep track of them (\texttt{ior} is
-% the prefix used for the file reading module). The basic operation here
-% is to push a name onto this stack which could be done by the operation
-% \begin{quote}
-% \cs{seq_gpush:Nn} |\g_ior_file_name_seq {#1}|
-% \end{quote}
-% where |#1| is the filename. In other words, this operation would
-% push the file name as is onto the stack.
-%
-% However, we might face a situation where the filename is stored in
-% a variable of some sort, say |\l_ior_curr_file_tl|. In this case we
-% want to retrieve the value of the variable. If we simply use
-% \begin{quote}
-% \cs{seq_gpush:Nn} |\g_ior_file_name_seq| |\l_ior_curr_file_tl|
-% \end{quote}
-% we do not get the value of the variable pushed onto the stack,
-% only the variable name itself. Instead a suitable number of
-% \cs{exp_after:wN} would be necessary (together with extra braces) to
-% change the order of expansion,\footnote{\cs{exp_after:wN} is
-% the \LaTeX3 name for the \TeX{} \tn{expandafter} primitive.} \emph{i.e.}
-% \begin{quote}
-% \cs{exp_after:wN} \\
-% | |\cs{seq_gpush:Nn} \\
-% \cs{exp_after:wN} \\
-% | \g_ior_file_name_seq| \\
-% \cs{exp_after:wN} \\
-% | { \l_ior_curr_file_tl }|
-% \end{quote}
-%
-% The above example is probably the simplest case but already shows
-% how the code changes to something difficult to understand.
-% Furthermore there is an assumption in this: that the storage bin
-% reveals its contents after exactly one expansion. Relying on this
-% means that you cannot do proper checking plus you have to know
-% exactly how a storage bin acts in order to get the correct number
-% of expansions. Therefore \LaTeX3 provides the programmer with a
-% general scheme that keeps the code compact and easy to understand.
-%
-% To denote that some argument to a function needs special treatment one
-% just uses different letters in the arg-spec part of the function to
-% mark the desired behavior. In the above example one would write
-% \begin{quote}
-% \cs{seq_gpush:NV} |\g_ior_file_name_seq \l_ior_curr_file_tl|
-% \end{quote}
-% to achieve the desired effect. Here the |V| (the second argument)
-% is for \enquote{retrieve the value of the variable} before passing it to
-% the base function.
-%
-% The following letters can be used to denote special treatment of
-% arguments before passing it to the base function:
-% \begin{description}
-% \item[c] Character string used as a command name.\\ The argument (a
-% token or braced token list) is \emph{fully expanded}; the result
-% must be a sequence of characters which is then used to construct a
-% command name (\emph{via}~\tn{csname} \ldots \tn{endcsname}). This
-% command name is a single token that is passed to the function as
-% the argument. Hence
-% \begin{quote}
-% \cs{seq_gpush:cV} |{ g_file_name_seq }| \cs{l_tmpa_tl}
-% \end{quote}
-% is equivalent to
-% \begin{quote}
-% \cs{seq_gpush:NV} |\g_file_name_seq| \cs{l_tmpa_tl}.
-% \end{quote}
-% Full expansion means that (a) the entire
-% argument must be expandable and (b) any variables are
-% converted to their content. So the preceding examples are also
-% equivalent to
-% \begin{quote}
-% \cs{tl_new:N} |\g_file_seq_name_tl| \\
-% \cs{tl_gset:Nn} |\g_file_seq_name_tl { g_file_name_seq }| \\
-% \cs{seq_gpush:cV} |{| \cs{tl_use:N} |\g_file_seq_name_tl }| \cs{l_tmpa_tl}.
-% \end{quote}
-% (Token list variables are expandable and we could omit the
-% accessor function \cs{tl_use:N}. Other variable types require the
-% appropriate \cs{\meta{var}_use:N} functions to be used in this
-% context.)
-% \item[V] Value of a variable.\\
-% This means that the contents of the register in question is used
-% as the argument, be it an integer, a length-type register, a token
-% list variable or similar. The value is passed to the function as a
-% braced token list. Can be applied to variables which have a
-% \cs{\meta{var}_use:N} function (other than boxes),
-% and which therefore deliver a single \enquote{value}.
-% \item[v] Value of a register, constructed from a character string
-% used as a command name.\\
-% This is a combination of |c| and |V| which first constructs a
-% control sequence from the argument and then passes the value of
-% the resulting register to the function. Can be applied to
-% variables which have a \cs{\meta{var}_use:N} function (other than
-% boxes), and which therefore deliver a single
-% \enquote{value}.
-% \item[e] Fully-expanded token or braced token list.\\
-% This means that the argument is expanded as in the replacement
-% text of a~\tn{message}, and the expansion is passed to the function as
-% a braced token list.
-% \item[o] One-level-expanded token or braced token list.\\
-% This means that the argument is expanded one level, as by
-% \tn{expandafter}, and the expansion is passed to the function as a
-% braced token list. Note that if the original argument is a braced
-% token list then only the first token in that list is expanded.
-% In general, using \texttt{V} should be preferred to using
-% \texttt{o} for simple variable retrieval.
-% \item[f] Expanding the first token recursively in a braced token
-% list.\\ Almost the same as the |e| type except here the token list
-% is expanded fully until the first unexpandable token is found and
-% the rest is left unchanged. Note that if this function finds a
-% space at the beginning of the argument it gobbles it and does not
-% expand the next token.
-% \item[x] Fully-expanded token or braced token list.\\
-% This expansion is very similar to |e|-type but is not nestable,
-% can only be used to create non-expandable functions, and requires
-% that |#| tokens are doubled in the argument. In almost all cases,
-% |e|-type should be preferred: retained largely for historical
-% reasons, and should where possible be replaced by the |e|-type
-% equivalent.
-% \end{description}
-%
-% \subsection{Simpler means better}
-%
-% Anyone who programs in \TeX{} is frustratingly familiar with the
-% problem of arranging that arguments to functions are suitably expanded
-% before the function is called. To illustrate how expansion control
-% can bring instant relief to this problem we shall consider two
-% examples copied from \texttt{latex.ltx}.
-%
-% \begin{verbatim}
-% \global\expandafter\let
-% \csname\cf@encoding \string#1\expandafter\endcsname
-% \csname ?\string#1\endcsname
-% \end{verbatim}
-% This first piece of code is in essence simply a global \tn{let} whose
-% two arguments firstly have to be constructed before \tn{let} is
-% executed. The |#1| is a control sequence name such as
-% |\textcurrency|. The token to be defined is obtained by
-% concatenating the characters of the current font encoding stored in
-% |\cf@encoding|, which has to be fully expanded, and the name of the
-% symbol. The second token is the same except it uses the default
-% encoding |?|. The result is a mess of interwoven \tn{expandafter}
-% and \tn{csname} beloved of all \TeX{} programmers, and the code is
-% essentially unreadable.
-%
-% Using the conventions and functionality outlined here, the task would
-% be achieved with code such as this:
-% \begin{verbatim}
-% \cs_gset_eq:cc
-% { \cf@encoding \token_to_str:N #1 } { ? \token_to_str:N #1 }
-% \end{verbatim}
-% The command \cs{cs_gset_eq:cc} is a global~\tn{let} that generates
-% command names out of both of its arguments before making the
-% definition. This produces code that is far more readable and more
-% likely to be correct first time. (\cs{token_to_str:N} is the \LaTeX3
-% name for \tn{string}.)
-%
-% Here is the second example.
-% \begin{verbatim}
-% \expandafter
-% \in@
-% \csname sym#3%
-% \expandafter
-% \endcsname
-% \expandafter
-% {%
-% \group@list}%
-% \end{verbatim}
-% This piece of code is part of the definition of another function. It
-% first produces two things: a token list, by expanding |\group@list| once;
-% and a token whose name comes from~`|sym#3|'. Then the function~\cs{in@}
-% is called and this tests if its first argument occurs in the token list
-% of its second argument.
-%
-% Again we can improve enormously on the code. First we shall rename
-% the function~\cs{in@}, which tests if its first argument appears
-% within its second argument, according to our conventions. Such a
-% function takes two normal \enquote{\texttt{n}} arguments and operates
-% on token lists: it might reasonably be named |\tl_test_in:nn|. Thus
-% the variant function we need would be defined with the appropriate
-% argument types and its name would be |\tl_test_in:cV|. Now this code
-% fragment would be simply:
-% \begin{verbatim}
-% \tl_test_in:cV { sym #3 } \group@list
-% \end{verbatim}
-% This code could be improved further by using a sequence |\l_group_seq|
-% rather than the bare token list |\group@list|. Note that, in addition
-% to the lack of \tn{expandafter}, the space after the~|}| is
-% silently ignored since all white space is ignored in this programming
-% environment.
-%
-% \subsection{New functions from old}
-%
-% For many common functions the \LaTeX3 kernel provides variants
-% with a range of argument forms, and similarly it is expected that
-% extension packages providing new functions will make them available in
-% all the commonly needed forms.
-%
-% However, there will be occasions where it is necessary to construct a
-% new such variant form; therefore the expansion module provides a
-% straightforward mechanism for the creation of functions with any
-% required argument type, starting from a function that takes \enquote{normal}
-% \TeX{} undelimited arguments.
-%
-% To illustrate this let us suppose you have a \enquote{base function}
-% |\demo_cmd:Nnn| that takes three normal arguments, and that you need
-% to construct the variant |\demo_cmd:cne|, for which the first argument
-% is used to construct the \emph{name} of a command, whilst the third
-% argument must be fully expanded before being passed to
-% |\demo_cmd:Nnn|.
-% To produce the variant form from the base form, simply use this:
-% \begin{verbatim}
-% \cs_generate_variant:Nn \demo_cmd:Nnn { cne }
-% \end{verbatim}
-% This defines the variant form so that you can then write, for example:
-% \begin{verbatim}
-% \demo_cmd:cne { abc } { pq } { \rst \xyz }
-% \end{verbatim}
-% rather than \ldots\ well, something like this!
-% \begin{verbatim}
-% \def \tempa {{pq}}%
-% \edef \tempb {\rst \xyz}%
-% \expandafter
-% \demo@cmd:nnn
-% \csname abc%
-% \expandafter
-% \expandafter
-% \expandafter
-% \endcsname
-% \expandafter
-% \tempa
-% \expandafter
-% {%
-% \tempb
-% }%
-% \end{verbatim}
-%
-% Another example: you may wish to declare a function
-% |\demo_cmd_b:enene|, a variant of an existing function
-% |\demo_cmd_b:nnnnn|, that fully
-% expands arguments 1,~3 and~5, and produces commands to pass as
-% arguments 2 and~4 using~\tn{csname}.
-% The definition you need is simply
-% \begin{verbatim}
-% \cs_generate_variant:Nn \demo_cmd_b:nnnnn { enene }
-% \end{verbatim}
-%
-% This extension mechanism is written so that if the same new form of
-% some existing command is implemented by two extension packages then the
-% two definitions are identical and thus no conflict occurs.
-%
-% \section{The distribution}
-%
-% The \pkg{expl3} modules are designed to be loaded on top of \LaTeXe{}.
-%
-% \begin{bfseries}
-% The core \pkg{expl3} language is broadly stable, and thus
-% the syntax conventions and functions provided
-% are now ready for wider use. There may still be changes to some
-% functions, but these will be minor when compared to the scope of
-% \pkg{expl3}. A robust mechanism is in place for such deprecations.
-% \end{bfseries}
-%
-% The distribution of \pkg{expl3} is split up into three packages on
-% CTAN: \pkg{l3kernel}, \pkg{l3packages} and \pkg{l3experimental}.
-% The core programming layer provided by \pkg{l3kernel} has been loaded
-% as part of the \LaTeX{} since 2020-02-02. For historical reasons, in
-% older kernel releases
-% \begin{verbatim}
-% \RequirePackage{expl3}
-% \end{verbatim}
-% loads the code distributed as \pkg{l3kernel}. This monolithic
-% package contains all of the modules regarded by the team as stable,
-% and any changes in this code are very limited. This material is
-% therefore suitable for use in third-party packages without concern
-% about changes in support. All of this code is documented in
-% \texttt{interface3.pdf}.
-%
-% The material in \pkg{l3packages} is also stable; this bundle provides
-% user-level commands, some of which have been integrated in the
-% \LaTeX{} kernel.
-%
-% Finally, \pkg{l3experimental} contains modules ready for public use
-% but not yet integrated into \pkg{l3kernel}. These modules have to
-% be loaded explicitly. The team anticipate that all of these modules
-% will move to stable status over time, but they may be more flexible
-% in terms of interface and functionality detail. Feedback on these
-% modules is extremely valuable.
-%
-% \section{Moving from \LaTeXe{} to \pkg{expl3}}
-%
-% To help programmers to use \pkg{expl3} code in existing \LaTeXe{} package,
-% some short notes on making the change are probably desirable.
-% Suggestions for inclusion here are welcome! Some of the following
-% is concerned with code, and some with coding style.
-%
-% \begin{itemize}
-% \item \pkg{expl3} is mainly focused on programming. This means that
-% some areas still require the use of \LaTeXe{} internal macros.
-% For example, you may well need \tn{IfPackageLoadedTF}, as there
-% is currently no native \pkg{expl3} package loading module.
-% \item User level macros should be generated using the mechanism
-% available in the \pkg{ltcmd} module, which is part of the
-% the \LaTeX{} kernel since 2020-10-01.
-% \item At an internal level, most functions should be generated
-% \tn{long} (using \cs{cs_new:Npn}) rather than \enquote{short} (using
-% \cs{cs_new_nopar:Npn}).
-% \item Where possible, declare all variables and functions (using
-% \cs{cs_new:Npn}, \cs{tl_new:N}, etc.) before use.
-% \item Prefer \enquote{higher-level} functions over \enquote{lower-level},
-% where possible. So for example use \cs{cs_if_exist:NTF} and not
-% \cs{if_cs_exist:N}.
-% \item Use space to make code readable. In general, we recommend
-% a layout such as:
-% \begin{verbatim}
-% \cs_new:Npn \foo_bar:Nn #1#2
-% {
-% \cs_if_exist:NTF #1
-% { \__foo_bar:n {#2} }
-% { \__foo_bar:nn {#2} { literal } }
-% }
-% \end{verbatim}
-% where spaces are used around |{| and |}| except for isolated
-% |#1|, |#2|, \emph{etc.}
-% \item Put different code items on separate lines: readability is
-% much more useful than compactness.
-% \item Use long, descriptive names for functions and variables,
-% and for auxiliary functions use the parent function name plus
-% |aux|, |auxi|, |auxii| and so on.
-% \item If in doubt, ask the team via the LaTeX-L list: someone will
-% soon get back to you!
-% \end{itemize}
-%
-% \section{Load-time options for \pkg{expl3}}
-%
-% To support code authors, the \pkg{expl3} package for \LaTeXe{} includes
-% a small number of load-time options. These all work in a key--value
-% sense, recognising the \texttt{true} and \texttt{false} values. Giving
-% the option name alone is equivalent to using the option with the
-% \texttt{true} value.
-%
-% \DescribeOption{check-declarations}
-% All variables used in \pkg{expl3} code should be declared. This is enforced
-% by \TeX{} for variable types based on \TeX{} registers, but not for those
-% which are constructed using macros as the underlying storage system. The
-% \texttt{check-declarations} option enables checking for all variable
-% assignments, issuing an error if any variables are assigned without being
-% initialised. See also \cs{debug_on:n} \texttt{\{check-declarations\}}
-% in \pkg{interface3} for finer control.
-%
-% \DescribeOption{log-functions}
-% The \texttt{log-functions} option is used to enable recording of every new
-% function name in the \texttt{.log} file. This is useful for debugging
-% purposes, as it means that there is a complete list of all functions
-% created by each module loaded (with the exceptions of a very small number
-% required by the bootstrap code). See also \cs{debug_on:n}
-% \texttt{\{log-functions\}} in \pkg{interface3} for finer control.
-%
-% \DescribeOption{backend}
-% Selects the backend to be used for color, graphics and related operations that
-% are backend-dependent. Options available are
-% \begin{itemize}[font = \texttt]
-% \item[dvips] Use the \texttt{dvips} driver.
-% \item[dvipdfmx] Use the \texttt{dvipdfmx} driver.
-% \item[dvisvgm] Use the \texttt{dvisvgm} driver.
-% \item[luatex] Use the direct PDF output mode of \LuaTeX{}
-% \item[pdftex] Use the direct PDF output mode of \pdfTeX{}
-% \item[xetex] Use the \XeTeX{} version of the \texttt{dvipdfmx} driver.
-% \end{itemize}
-% For historical reasons, there is also \texttt{pdfmode} as an equivalent of
-% \texttt{luatex} or \texttt{pdftex}, and \texttt{xdvipdfmx} as
-% an equivalent to \texttt{xetex}, but these are deprecated
-%
-% \DescribeOption{suppress-backend-headers}
-% The \texttt{suppress-backend-headers} option suppresses loading of
-% backend-specific header files; currently this only affects \texttt{dvips}.
-% This option is available to support DVI-based routes that do not
-% support the |header| line used by \texttt{dvips}.
-%
-% The debugging options may also be given using
-% \verb|\keys_set:nn { sys } { ... }|; the \texttt{backend} option can be
-% given in this way \emph{only} if a backend has not already been loaded.
-% This method of setting options is useful where \pkg{expl3} is pre-loaded
-% by the \LaTeXe{} format.
-%
-% \section{Using \pkg{expl3} with formats other than \LaTeXe{}}
-%
-% As well as the \LaTeXe{} package \pkg{expl3}, there is also a
-% \enquote{generic} loader for the code, \texttt{expl3-generic.tex}.
-% This may be loaded using the plain \TeX{} syntax
-% \begin{verbatim}
-% \input expl3-generic %
-% \end{verbatim}
-% This enables the programming layer to work with the other formats.
-% As no options are available loading in this way, the \enquote{native}
-% drivers are automatically used. If this \enquote{generic} loader is
-% used with \LaTeXe{} the code automatically switches to the appropriate
-% package route.
-%
-% After loading the programming layer using the generic interface, the
-% commands \cs{ExplSyntaxOn} and \cs{ExplSyntaxOff} and the code-level
-% functions and variables detailed in \pkg{interface3} are available.
-% Note that other \LaTeXe{} packages \emph{using} \pkg{expl3} are not
-% loadable: package loading is dependent on the \LaTeXe{} package-management
-% mechanism.
-%
-% \section{Getting the version of \pkg{expl3}}
-%
-% \begin{function}{\ExplLoaderFileDate}
-% Once the programming layer is loaded by one of the loaders, you can access
-% its version in the ISO date format \meta{year}-\meta{month}-\meta{day},
-% through \cs{ExplLoaderFileDate}.
-%
-% The current version of \pkg{expl3} is \ExplLoaderFileDate.
-% \end{function}
-%
-% \section{Engine/primitive requirements}
-%
-% To use \pkg{expl3} and the higher level packages provided by the
-% team, the minimal set of primitive requirements is currently described
-% in \href{README.md}{README.md}.
-%
-% Practically, these requirements are met by the engines
-% \begin{itemize}
-% \item \pdfTeX{} v1.40.20 or later.
-% \item \XeTeX{} v0.999991 or later.
-% \item \LuaTeX{} v1.10 or later.
-% \item e-(u)\pTeX{} v3.8.2 or later.
-% \item Prote (2021) or later.
-% \end{itemize}
-%
-% Additional modules beyond the core of \pkg{expl3} may require additional
-% primitives. In particular, third-party authors may significantly
-% extend the primitive coverage requirements.
-%
-% \section{The \LaTeX{} Project}
-%
-% Development of \LaTeX3 is carried out by The \LaTeX{} Project:
-% \url{https://www.latex-project.org/latex3/}.
-%
-% \begin{thebibliography}{1}
-%
-% \bibitem{A-W:K-TB}
-% Donald E Knuth
-% \newblock \emph{The \TeX{}book}.
-% \newblock Addison-Wesley, Reading, Massachusetts, 1984.
-%
-% \bibitem{A-W:GMS94}
-% Goossens, Mittelbach and Samarin.
-% \newblock \emph{ The \LaTeX{} Companion}.
-% \newblock Addison-Wesley, Reading, Massachusetts, 1994.
-%
-% \bibitem{A-W:LLa94}
-% Leslie Lamport.
-% \newblock \emph{\LaTeX{}: A Document Preparation System}.
-% \newblock Addison-Wesley, Reading, Massachusetts, second edition, 1994.
-%
-% \bibitem{tub:MR97-1}
-% Frank Mittelbach and Chris Rowley.
-% \newblock \enquote{The \LaTeX{} Project}.
-% \newblock \emph{TUGboat},
-% Vol.\,18, No.\,3, pp.\,195--198, 1997.
-%
-% \end{thebibliography}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{expl3} implementation}
-%
-% The implementation here covers several things. There are two
-% \enquote{loaders} to define: the parts of the code that are specific to
-% \LaTeXe{} or to non-\LaTeXe{} formats. These have to cover the same
-% concepts as each other but in rather different ways: as a result, much
-% of the code is given in separate blocks. There is also a short piece of
-% code for the start of the \enquote{payload}: this is to ensure that
-% loading is always done in the right way.
-%
-% \subsection{Loader interlock}
-%
-% A short piece of set up to check that the loader and \enquote{payload}
-% versions match.
-%
-% \begin{macro}{\ExplLoaderFileDate}
-% As DocStrip is used to generate \cs{ExplFileDate}
-% for all files from the same source, it has to match. Thus the loaders
-% simply save this information with a new name.
-% \begin{macrocode}
-%<*loader>
-\let\ExplLoaderFileDate\ExplFileDate
-%</loader>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\c__kernel_expl_date_tl}
-% The \LaTeXe{} loader stores a private copy of \cs{ExplFileDate},
-% which is fixed when the format is build and cannot be changed later.
-% While \cs{ExplFileDate} ensures that the loader (either
-% \texttt{2ekernel} or \texttt{package}) version matches the version
-% of \file{expl3-code.tex}, this one ensures that the version of an
-% eventual |\usepackage{expl3}| matches the version from the format.
-% It seems to be common to have stray format files in the user tree
-% which trigger errors due to mismatched versions (\emph{e.g.}
-% \url{https://github.com/latex3/latex3/issues/781}).
-%
-% This block also goes to the generic loader, as \pkg{expl3} isn't
-% preloaded there, so the kernel date should be equal to the loader
-% date.
-% \begin{macrocode}
-%<*2ekernel|generic>
-\begingroup
- \catcode`\_=11
- \expandafter
- \ifx\csname c__kernel_expl_date_tl\endcsname\relax
- \global\let\c__kernel_expl_date_tl\ExplFileDate
- \fi
-\endgroup
-%</2ekernel|generic>
-% \end{macrocode}
-% \end{macro}
-%
-% The interlock test itself is simple: \cs{ExplLoaderFileDate} must be
-% defined and identical to \cs{ExplFileDate}. As this has to work for
-% both \LaTeXe{} and other formats, there is some auto-detection involved.
-% (Done this way avoids having two very similar blocks for \LaTeXe{} and
-% other formats.)
-% \begin{macrocode}
-%<*!loader>
-\begingroup
- \def\next{\endgroup}%
- \expandafter\ifx\csname PackageError\endcsname\relax
- \begingroup
- \def\next{\endgroup\endgroup}%
- \def\PackageError#1#2#3%
- {%
- \endgroup
- \errhelp{#3}%
- \errmessage{#1 Error: #2!}%
- }%
- \fi
- \expandafter\ifx\csname ExplLoaderFileDate\endcsname\relax
- \def\next
- {%
- \PackageError{expl3}{No expl3 loader detected}
- {%
- You have attempted to use the expl3 code directly rather than using
- the correct loader. Loading of expl3 will abort.
- }%
- \endgroup
- \endinput
- }
- \else
- \ifx\ExplLoaderFileDate\ExplFileDate
- \else
- \def\next
- {%
- \PackageError{expl3}{Mismatched expl3 files detected}
- {%
- You have attempted to load expl3 with mismatched files:
- probably you have one or more files 'locally installed' which
- are in conflict. Loading of expl3 will abort.
- }%
- \endgroup
- \endinput
- }%
- \fi
-\fi
-\next
-%</!loader>
-% \end{macrocode}
-%
-% A reload test for the payload, just in case.
-% \begin{macrocode}
-%<*!loader>
-\begingroup\expandafter\expandafter\expandafter\endgroup
-\expandafter\ifx\csname ver@expl3-code.tex\endcsname\relax
- \expandafter\edef\csname ver@expl3-code.tex\endcsname
- {%
- \ExplFileDate\space
- L3 programming layer
- }%
-\else
- \expandafter\endinput
-\fi
-%</!loader>
-% \end{macrocode}
-%
-% All good: log the version of the code used (for log completeness). As this
-% is more-or-less \cs{ProvidesPackage} without a separate file and as this also
-% needs to work without \LaTeXe{}, just write the information directly to the
-% log.
-% \begin{macrocode}
-%<*!loader>
-\immediate\write-1 %
- {%
- Package: expl3
- \ExplFileDate\space
- L3 programming layer (code)%
- }%
-%</!loader>
-% \end{macrocode}
-%
-% \subsection{\LaTeXe{} loaders}
-%
-% Loading with \LaTeXe{} may be as part of the format (pre-loading)
-% or as a package. We have to allow for both possible paths, and of
-% course the package being loaded on to of the pre-load. That means
-% the code here must be safe against re-loading.
-%
-% \begin{macrocode}
-%<*package&loader|2ekernel>
-% \end{macrocode}
-%
-% Identify the package or add to the format message.
-% \begin{macrocode}
-%<*2ekernel>
-\ifdefined\LaTeXReleaseInfo
- \LaTeXReleaseInfo\expandafter{\the\LaTeXReleaseInfo
- \show@release@info{L3 programming layer <\ExplFileDate>}%
- }%
-\else
- \everyjob\expandafter{\the\everyjob
- \message{L3 programming layer <\ExplFileDate>}%
- }%
-\fi
-%</2ekernel>
-%<*!2ekernel>
-\ProvidesPackage{expl3}
- [%
- \ExplFileDate\space
- L3 programming layer (loader)
- ]%
-%</!2ekernel>
-% \end{macrocode}
-%
-% \begin{macro}{\ProvidesExplPackage, \ProvidesExplClass, \ProvidesExplFile}
-% For other packages and classes building on this one it is convenient
-% not to need \cs{ExplSyntaxOn} each time. All macros use the same
-% internal one with the proper \LaTeXe{} command.
-% \begin{macrocode}
-\protected\def\ProvidesExplPackage
- {\@expl@provides@file@@Nnnnnn\ProvidesPackage{Package}}
-\protected\def\ProvidesExplClass
- {\@expl@provides@file@@Nnnnnn\ProvidesClass{Document Class}}
-\protected\def\ProvidesExplFile
- {\@expl@provides@file@@Nnnnnn\ProvidesFile{File}}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@expl@provides@file@@Nnnnnn}
-% \begin{macro}{\@expl@provides@file@@N}
-% \begin{macro}{\@expl@provides@generic@@wnnw}
-% We need to check the existence of the
-% \cs[no-index]{Provides\meta{thing}}, since we need to load this very
-% early in the \LaTeXe{} kernel. The gymnastics with the version identifier
-% argument allow for the case where it starts with a \texttt{v} and the one
-% where it does not: formally the \texttt{v} is not part of the version,
-% but a lot of people include it.
-% \begin{macrocode}
-\protected\long\def\@expl@provides@file@@Nnnnnn#1#2#3#4#5#6%
- {%
- \ifnum0%
- \ifdefined#11\fi
- \ifx\relax#1\else1\fi
- =11
- \expandafter#1%
- \else
- \@expl@provides@generic@@wnnw{#2}%
- \fi
- {#3}[{#4 \ifx\relax#5\relax\else\@expl@provides@file@@N#5\space\fi #6}]%
- \ExplSyntaxOn
- }
-\long\def\@expl@provides@file@@N#1{v\if#1v\else#1\fi}
-\protected\long\def\@expl@provides@generic@@wnnw#1\fi#2[#3]%
- {%
- \immediate\write-1{#1: #2 #3}%
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% Load the business end: this leaves \cs{expl3} syntax on.
-% The test ensures we only load once without needing to know if
-% there was a preloading step.
-% \begin{macrocode}
-\begingroup\expandafter\expandafter\expandafter\endgroup
-\expandafter\ifx\csname tex\string _let:D\endcsname\relax
- \expandafter\@firstofone
-\else
- \expandafter\@gobble
-\fi
- {\input expl3-code.tex }%
-% \end{macrocode}
-%
-% A check that the bootstrap code did not abort loading: if it did,
-% bail out silently here.
-% \begin{macrocode}
-\begingroup\expandafter\expandafter\expandafter\endgroup
-\expandafter\ifx\csname tex\string _let:D\endcsname\relax
- \expandafter\endinput
-\fi
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=expl>
-% \end{macrocode}
-%
-% At this point, if we have \cs{c__kernel_expl_date_tl} defined, just
-% call the \cs{__kernel_dependency_version_check:Nn} auxiliary to check
-% if it matches \cs{ExplLoaderFileDate}. Here the test is performed
-% only if \cs{c__kernel_expl_date_tl} exists because this file can be
-% loaded in a \LaTeXe{} format without \pkg{expl3} preloaded, where that
-% token list doesn't exist.
-%
-% This is all done in the \texttt{package} \pkg{docstrip} guard because
-% it doesn't apply to \pkg{expl3.ltx}.
-% \begin{macrocode}
-%<*package>
-\ifcsname\detokenize{c__kernel_expl_date_tl}\endcsname
- \expandafter\@firstofone
-\else
-% \end{macrocode}
-% If \cs{c__kernel_expl_date_tl} does \emph{not} exist we may be loading
-% in a format without \pkg{expl3} preloaded or in the earlier (although
-% still compatible) version in which the error mentioned above showed
-% up. If loading as a package, \file{expl3-code.tex} got read and here
-% the \pkg{expl3} syntax is on. Otherwise it was already loaded in a
-% sligtly older kernel, so we fire the incompatibility error message and
-% abort loading.
-% \begin{macrocode}
- \ifodd\csname\detokenize{l__kernel_expl_bool}\endcsname
-% \end{macrocode}
-% In package mode all files are loaded in one go, so versions will
-% match. We just have to set \cs{c__kernel_expl_date_tl} so that
-% further dependencies don't break:
-% \begin{macrocode}
- \global\expandafter\let\csname\detokenize
- {c__kernel_expl_date_tl}\endcsname\ExplLoaderFileDate
- \expandafter\expandafter
- \expandafter\@gobble
- \else
-% \end{macrocode}
-% And reloading in an incompatible version is an error:
-% \begin{macrocode}
- \expandafter\expandafter
- \expandafter\@firstofone
- \fi
-\fi
- {\csname\detokenize{__kernel_dependency_version_check:Nn}\endcsname
- \ExplLoaderFileDate{expl3.sty}}%
-%</package>
-% \end{macrocode}
-%
-% Here we can also detect whether we're reloading. This code goes into
-% \texttt{expl3.ltx} and \texttt{expl3.sty}, the former loaded into the
-% \LaTeXe{} format. When this code is loaded for the first time, the
-% \cs{g_@@_reload_bool} boolean doesn't exist (\cs{else} branch of the
-% \cs{ifcsname} below), so we create it. If the \cs{ifcsname} is true,
-% then we do \cs{ExplSyntaxOn} (because when reloading,
-% \texttt{expl3-code.tex} isn't read again), and set
-% \cs{g_@@_reload_bool} to true.
-% \begin{macrocode}
-\ifcsname\detokenize{g_@@_reload_bool}\endcsname
- \ExplSyntaxOn
- \bool_gset_true:N \g_@@_reload_bool
-\else
- \bool_new:N \g_@@_reload_bool
-\fi
-% \end{macrocode}
-%
-% \begin{variable}{\c_@@_def_ext_tl}
-% Needed by \LaTeXe{}, and avoiding a re-load issue. Variables are
-% best checked explicitly, rather than with \cs{g_@@_reload_bool}
-% because some appear only in one of the code files, so
-% \cs{g_@@_reload_bool} doesn't necessarily mean that the variable
-% is already declared.
-% \begin{macrocode}
-\tl_if_exist:NF \c_@@_def_ext_tl
- { \tl_const:Nn \c_@@_def_ext_tl { def } }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}
-% {\__kernel_sys_configuration_load:n,\__kernel_sys_configuration_load_std:n}
-% To load configurations, we have the following cases
-% \begin{itemize}
-% \item \pkg{expl3} is pre-loaded: by the time any configuration loads,
-% we have the full file loading stack, and only need the standard
-% version of the code here.
-% \item The package is loaded with pre-loading: we again use the standard
-% version, but we don't test just yet.
-% \item The package is used without pre-loaded code: we need to manually
-% manage \pkg{expl3} syntax.
-% \end{itemize}
-% \begin{macrocode}
-\cs_gset_protected:Npn \__kernel_sys_configuration_load:n #1
-%<*!2ekernel>
- {
- \ExplSyntaxOff
- \cs_undefine:c { ver@ #1 .def }
- \@onefilewithoptions {#1} [ ] [ ]
- \c_@@_def_ext_tl
- \ExplSyntaxOn
- }
-\cs_gset_protected:Npn \__kernel_sys_configuration_load_std:n #1
-%</!2ekernel>
- {
- \cs_undefine:c { ver@ #1 .def }
- \@onefilewithoptions {#1} [ ] [ ]
- \c_@@_def_ext_tl
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\l_@@_options_clist}
-% \begin{macrocode}
-%<*!2ekernel>
-\clist_if_exist:NF \l_@@_options_clist
- { \clist_new:N \l_@@_options_clist }
-\DeclareOption*
- { \clist_put_right:NV \l_@@_options_clist \CurrentOption }
-\ProcessOptions \relax
-%</!2ekernel>
-% \end{macrocode}
-% \end{variable}
-%
-% Pretty standard setting creation.
-% \begin{macrocode}
-\keys_define:nn { sys }
- {
- backend .choices:nn =
- { dvipdfmx , dvips , dvisvgm , luatex , pdftex , pdfmode , xdvipdfmx , xetex }
- { \sys_load_backend:n {#1} } ,
- check-declarations .choice: ,
- check-declarations / true .code:n =
- { \debug_on:n { check-declarations } } ,
- check-declarations / false .code:n =
- {
- \__kernel_if_debug:TF
- { \debug_off:n { check-declarations } }
- { }
- } ,
- check-declarations .default:n = true ,
- driver .meta:n = { backend = #1 } ,
- enable-debug .code:n = {} , % A stub
- log-functions .choice: ,
- log-functions / true .code:n =
- { \debug_on:n { log-functions } } ,
- log-functions / false .code:n =
- {
- \__kernel_if_debug:TF
- { \debug_off:n { log-functions } }
- { }
- } ,
- log-functions .default:n = true ,
- suppress-backend-headers .bool_gset_inverse:N
- = \g__kernel_backend_header_bool ,
- suppress-backend-headers .initial:n = false ,
- undo-recent-deprecations .code:n = {} % A stub
- }
-% \end{macrocode}
-%
-% \begin{macro}{\@expl@sys@load@backend@@@@}
-% A backend has to be in place by the start of the document: this has
-% to be before global options are checked for use.
-%
-% The \cs[no-index]{@expl@...@@@@} macros defined in this package are
-% interfaces for \LaTeXe{}. There are currently (this will change
-% with the next release of \LaTeXe{}) two possible cases, at this
-% point of the code: either \cs{@expl@sys@load@backend@@@@} (and the
-% others) already exist because they were defined in
-% \texttt{ltexpl.ltx} (in \texttt{2ekernel} mode) or in
-% \texttt{expl3.ltx} (in \texttt{package} mode).
-%
-% In \texttt{2ekernel} mode, if they exist we are using a future
-% (2020-10-01) release of \LaTeXe{} and we don't need (and can't)
-% patch \LaTeXe's internals because these commands are already there.
-% Though if they don't exist in \texttt{2ekernel} mode, we're using
-% an older version of the kernel, so we \emph{must} patch.
-%
-% In \texttt{package} mode, if these commands exist, then we are using
-% a version of \LaTeXe{} with \pkg{expl3} preloaded (any version)
-% and in any case patching is already done or the macros are in the
-% format itself, so nothing to do.
-% But if in \texttt{package} mode these macros don't exist, we have an
-% even older version of \LaTeXe{} which doesn't even have
-% \pkg{expl3} preloaded, so patching is necessary.
-%
-% All this means that in both \texttt{2ekernel} and \texttt{package}
-% mode we have to check whether \cs{@expl@sys@load@backend@@@@}
-% exists, and patch some \LaTeXe{} internals if it doesn't.
-%
-% In newer \LaTeXe{}, these macros have an empty definition in
-% \texttt{ltexpl.dtx} in case something wrong happens while loading
-% this file (\texttt{expl3.ltx}), so they can safely be used in the
-% \LaTeXe{} kernel.
-%
-% \cs{@expl@sys@load@backend@@@@} is inserted right at the beginning
-% of \cs{document}, but after closing the group started by \cs{begin}.
-% When using \cs{tl_put_left:Nn} to patch the backend loading in
-% \cs{document}, we need to make sure that it happens at group level
-% zero, thus the strange |\endgroup...\begingroup| thing.
-%
-% This chunk of code should only be executed when loading
-% \texttt{expl3.sty} in a \LaTeXe{} without \pkg{expl3} preloaded, so
-% we check if \cs{@expl@sys@load@backend@@@@} exists.
-% \begin{macrocode}
-\cs_if_exist:NF \@expl@sys@load@backend@@@@
- {
- \tl_put_left:Nn \document
- {
- \endgroup
- \@expl@sys@load@backend@@@@
- \begingroup
- }
- }
-% \end{macrocode}
-%
-% Now we define it anyhow.
-% \begin{macrocode}
-\cs_gset_protected:Npn \@expl@sys@load@backend@@@@
- {
- \str_if_exist:NF \c_sys_backend_str
- { \sys_load_backend:n { } }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% Process package options.
-% \begin{macrocode}
-%<*!2ekernel>
-\keys_set:nV { sys } \l_@@_options_clist
-\str_if_exist:NF \c_sys_backend_str
- { \sys_load_backend:n { } }
-%</!2ekernel>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*!2ekernel>
-\bool_if:NT \g_@@_reload_bool
- {
- \cs_gset_eq:NN \__kernel_sys_configuration_load:n
- \__kernel_sys_configuration_load_std:n
- \ExplSyntaxOff
- \file_input_stop:
- }
-%</!2ekernel>
-% \end{macrocode}
-%
-% Load the dynamic part of the code, either now or during the next run.
-% \begin{macrocode}
-\cs_if_free:cTF { ver@expl3.sty }
- {
- \tex_everyjob:D \exp_after:wN
- {
- \tex_the:D \tex_everyjob:D
- \__kernel_sys_everyjob:
- }
- }
- { \__kernel_sys_everyjob: }
-% \end{macrocode}
-%
-% \begin{variable}{\s_@@_stop}
-% Internal scan marks. This code has to be reload-safe, so this one
-% has to be guarded with \cs{if_cs_exist:N} (\cs{cs_if_exist:NF}) wouldn't
-% do because it returns false for control sequences equal to \cs{scan_stop:}.
-% \begin{macrocode}
-\reverse_if:N \if_cs_exist:N \s_@@_stop
- \scan_new:N \s_@@_stop
-\fi:
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\@pushfilename, \@popfilename}
-% \begin{macro}{\@@_status_pop:w}
-% \begin{macro}{\@expl@push@filename@@@@}
-% \begin{macro}{\@expl@push@filename@aux@@@@}
-% \begin{macro}{\@expl@pop@filename@@@@}
-% The idea here is to use \LaTeXe{}'s \tn{@pushfilename} and
-% \tn{@popfilename} to track the current syntax status. This can be
-% achieved by saving the current status flag at each push to a stack,
-% then recovering it at the pop stage and checking if the code
-% environment should still be active.
-%
-% Here the code follows the same patching logic than above for
-% \cs{@expl@sys@load@backend@@@@}.
-% \begin{macrocode}
-\cs_if_exist:NF \@expl@push@filename@@@@
- {
- \tl_put_left:Nn \@pushfilename { \@expl@push@filename@@@@ }
- \tl_put_right:Nn \@pushfilename { \@expl@push@filename@aux@@@@ }
- }
-\cs_gset_protected:Npn \@expl@push@filename@@@@
- {
- \exp_args:Ne \__kernel_file_input_push:n
- {
- \tl_to_str:N \@currname .
- \tl_to_str:N \@currext
- }
- \tl_put_left:Ne \l_@@_status_stack_tl
- {
- \bool_if:NTF \l__kernel_expl_bool
- { 1 }
- { 0 }
- }
- \ExplSyntaxOff
- }
-% \end{macrocode}
-% This bit of trickery is needed to grab the name of the file being loaded
-% so we can record it.
-% \begin{macrocode}
-\cs_gset_protected:Npn \@expl@push@filename@aux@@@@ #1#2#3
- {
- \str_gset:Nn \g_file_curr_name_str {#3}
- #1 #2 {#3}
- }
-% \end{macrocode}
-%
-% \begin{macrocode}
-\cs_if_exist:NF \@expl@pop@filename@@@@
- {
- \tl_put_right:Nn \@popfilename
- { \@expl@pop@filename@@@@ }
- }
-\cs_gset_protected:Npn \@expl@pop@filename@@@@
- {
- \__kernel_file_input_pop:
- \tl_if_empty:NTF \l_@@_status_stack_tl
- { \ExplSyntaxOff }
- { \exp_after:wN \@@_status_pop:w \l_@@_status_stack_tl \s_@@_stop }
- }
-% \end{macrocode}
-% The pop auxiliary function removes the first item from the stack,
-% saves the rest of the stack and then does the test. The flag here
-% is not a proper \texttt{bool}, so a low-level test is used.
-% \begin{macrocode}
-\cs_gset_protected:Npn \@@_status_pop:w #1#2 \s_@@_stop
- {
- \tl_set:Nn \l_@@_status_stack_tl {#2}
- \int_if_odd:nTF {#1}
- { \ExplSyntaxOn }
- { \ExplSyntaxOff }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{variable}{\l_@@_status_stack_tl}
-% As \pkg{expl3} itself cannot be loaded with the code environment
-% already active, at the end of the package \cs{ExplSyntaxOff} can
-% safely be called.
-% \begin{macrocode}
-\tl_if_exist:NF \l_@@_status_stack_tl
- {
- \tl_new:N \l_@@_status_stack_tl
- \tl_set:Nn \l_@@_status_stack_tl { 0 }
- }
-% \end{macrocode}
-% \end{variable}
-%
-% Tidy up configuration loading, as promised.
-% \begin{macrocode}
-%<*!2ekernel>
-\cs_gset_eq:NN \__kernel_sys_configuration_load:n
- \__kernel_sys_configuration_load_std:n
-%</!2ekernel>
-% \end{macrocode}
-%
-% For pre-loading, we have to manually disable the syntax.
-% \begin{macrocode}
-%<*2ekernel>
-\ExplSyntaxOff
-%</2ekernel>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</package&loader|2ekernel>
-% \end{macrocode}
-%
-% \subsection{Generic loader}
-%
-% \begin{macrocode}
-%<*generic>
-% \end{macrocode}
-%
-% The generic loader starts with a test to ensure that the current format is
-% not \LaTeXe{}!
-% \begin{macrocode}
-\begingroup
- \def\tempa{LaTeX2e}%
- \def\next{}%
- \ifx\fmtname\tempa
- \def\next
- {%
- \PackageInfo{expl3}{Switching from generic to LaTeX2e loader}%
-% \end{macrocode}
-% The \cs{relax} stops \cs{RequirePackage} from scanning for a date
-% argument. Putting \tn{endinput} \emph{after} loading the package is
-% crucial, as otherwise \tn{endinput} would close the file
-% \file{expl3.sty} at the end of its first line: indeed, as long as
-% \file{expl3.sty} is open it is impossible to close the file
-% \file{expl3-generic.tex}.
-% \begin{macrocode}
- \RequirePackage{expl3}\relax \endinput
- }%
- \fi
-\expandafter\endgroup
-\next
-% \end{macrocode}
-%
-% Reload check and identify the package:
-% no \LaTeXe{} mechanism so this is all pretty basic.
-% \begin{macrocode}
-\begingroup\expandafter\expandafter\expandafter\endgroup
-\expandafter\ifx\csname ver@expl3-generic.tex\endcsname\relax
-\else
- \immediate\write-1
- {%
- Package expl3 Info: The package is already loaded.%
- }%
- \expandafter\endinput
-\fi
-\immediate\write-1
- {%
- Package: expl3
- \ExplFileDate\space
- L3 programming layer (loader)%
- }%
-\expandafter\edef\csname ver@expl3-generic.tex\endcsname
- {\ExplFileDate\space L3 programming layer}%
-% \end{macrocode}
-%
-% \begin{macrocode}
-\ifnum\currentgrouplevel=0 %
-\else
- \errhelp{expl3 cannot be loaded inside a group:
- reading the code has been aborted.}%
- \errmessage{expl3 Error: Loading attempted inside a group!}%
- \expandafter\endinput
-\fi
-% \end{macrocode}
-%
-% \begin{variable}[int]{\l@expl@tidy@tl}
-% Save the category code of |@| and then set it to \enquote{letter}.
-% \begin{macrocode}
-\expandafter\edef\csname l@expl@tidy@tl\endcsname
- {%
- \catcode64=\the\catcode64\relax
- \let\expandafter\noexpand\csname l@expl@tidy@tl\endcsname
- \noexpand\undefined
- }%
-\catcode64=11 %
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\AtBeginDocument}
-% \begin{macro}[int]{\expl@AtBeginDocument}
-% There are a few uses of \cs{AtBeginDocument} in the package code: the
-% easiest way around that is to simply do the code \enquote{now}. As
-% bundles such as \pkg{miniltx} may have defined \cs{AtBeginDocument}
-% any existing definition is saved for restoration after the payload.
-% \begin{macrocode}
-\let\expl@AtBeginDocument\AtBeginDocument
-\def\AtBeginDocument#1{#1}%
-\expandafter\def\expandafter\l@expl@tidy@tl\expandafter
- {%
- \l@expl@tidy@tl
- \let\AtBeginDocument\expl@AtBeginDocument
- \let\expl@AtBeginDocument\undefined
- }%
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% Load the business end: this leaves \cs{expl3} syntax on.
-% \begin{macrocode}
-\input expl3-code.tex %
-% \end{macrocode}
-%
-% A check that the bootstrap code did not abort loading: if it did,
-% bail out silently here.
-% \begin{macrocode}
-\begingroup\expandafter\expandafter\expandafter\endgroup
-\expandafter\ifx\csname tex\string _let:D\endcsname\relax
- \expandafter\endinput
-\fi
-% \end{macrocode}
-%
-% \begin{macro}{\__kernel_sys_configuration_load:n}
-% Very basic.
-% \begin{macrocode}
-\cs_gset_protected:Npn \__kernel_sys_configuration_load:n #1
- {
- \group_begin:
- \cs_set_protected:Npn \ProvidesExplFile
- {
- \char_set_catcode_space:n { `\ }
- \ProvidesExplFileAux
- }
- \cs_set_protected:Npn \ProvidesExplFileAux ##1##2##3##4
- {
- \group_end:
- \iow_log:e { File:~##1~##2~v##3~##4 }
- }
- \tex_input:D #1 .def \scan_stop:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\g__kernel_backend_header_bool}
-% Load the dynamic code and standard back-end.
-% \begin{macrocode}
-\__kernel_sys_everyjob:
-\bool_new:N \g__kernel_backend_header_bool
-\bool_gset_true:N \g__kernel_backend_header_bool
-\sys_load_backend:n { }
-% \end{macrocode}
-% \end{macro}
-%
-% For the generic loader, a few final steps to take. Turn of \cs{expl3}
-% syntax and tidy up the small number of temporary changes.
-% \begin{macrocode}
-\ExplSyntaxOff
-\l@expl@tidy@tl
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</generic>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/expl3.pdf b/macros/latex/contrib/l3kernel/expl3.pdf
deleted file mode 100644
index b36343153a..0000000000
--- a/macros/latex/contrib/l3kernel/expl3.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/interface3.pdf b/macros/latex/contrib/l3kernel/interface3.pdf
deleted file mode 100644
index 1df60adf1a..0000000000
--- a/macros/latex/contrib/l3kernel/interface3.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/interface3.tex b/macros/latex/contrib/l3kernel/interface3.tex
deleted file mode 100644
index ff8114028e..0000000000
--- a/macros/latex/contrib/l3kernel/interface3.tex
+++ /dev/null
@@ -1,82 +0,0 @@
-\iffalse meta-comment
-
-File: interface3.tex
-
-Copyright (C) 1990-2011,2017-2024 The LaTeX Project
-
-It may be distributed and/or modified under the conditions of the
-LaTeX Project Public License (LPPL), either version 1.3c of this
-license or (at your option) any later version. The latest version
-of this license is in the file
-
- https://www.latex-project.org/lppl.txt
-
-This file is part of the "l3kernel bundle" (The Work in LPPL)
-and all files in that bundle must be distributed together.
-
-The released version of this bundle is available from CTAN.
-
------------------------------------------------------------------------
-
-The development version of the bundle can be found at
-
- https://github.com/latex3/latex3
-
-for those people who are interested.
-
-\fi
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% This document typesets the LaTeX3 interface descriptions a single document.
-% This produces quite a large file (more than 360 pages as of Dec 2023).
-%
-% There is also a full version of the sources (source3.tex) which additionally
-% also typesets the command implementations.
-%
-% Do not forget to generate the index (as explained on the terminal output
-% near the end of the run)!
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-\documentclass[kernel]{l3doc}
-
-\newif\ifinterface
-\interfacetrue
-
-\listfiles
-
-\begin{document}
-
-\title{The \LaTeX3 Interfaces}
-\author{%
- The \LaTeX{} Project\thanks
- {%
- E-mail:
- \href{mailto:latex-team@latex-project.org}
- {latex-team@latex-project.org}%
- }%
-}
-\date{Released 2024-03-14}
-
-\pagenumbering{roman}
-\maketitle
-
-%
-% First load all modules and typeset the documentation parts
-%
-
-\input{source3body} % all the individual modules
-
-\clearpage
-
-\begingroup
- \def\endash{--}
- \catcode`\-\active
- \def-{\futurelet\temp\indexdash}
- \def\indexdash{\ifx\temp-\endash\fi}
- \DelayPrintIndex
-\endgroup
-
-\end{document}
diff --git a/macros/latex/contrib/l3kernel/l3.ins b/macros/latex/contrib/l3kernel/l3.ins
deleted file mode 100644
index 2940230505..0000000000
--- a/macros/latex/contrib/l3kernel/l3.ins
+++ /dev/null
@@ -1,181 +0,0 @@
-\iffalse meta-comment
-
-File l3.ins
-
-Copyright (C) 2011,2012,2014-2024 The LaTeX Project
-
-It may be distributed and/or modified under the conditions of the
-LaTeX Project Public License (LPPL), either version 1.3c of this
-license or (at your option) any later version. The latest version
-of this license is in the file
-
- https://www.latex-project.org/lppl.txt
-
-This file is part of the "l3kernel bundle" (The Work in LPPL)
-and all files in that bundle must be distributed together.
-
------------------------------------------------------------------------
-
-The development version of the bundle can be found at
-
- https://github.com/latex3/latex3
-
-for those people who are interested.
-
------------------------------------------------------------------------
-
-Any modification of this file should ensure that the copyright and
-license information is placed in the derived files.
-
-\fi
-
-\let\jobname\relax
-\input docstrip %
-\askforoverwritefalse
-
-\preamble
-
-Copyright (C) 1990-2024 The LaTeX Project
-
-It may be distributed and/or modified under the conditions of
-the LaTeX Project Public License (LPPL), either version 1.3c of
-this license or (at your option) any later version. The latest
-version of this license is in the file:
-
- https://www.latex-project.org/lppl.txt
-
-This file is part of the "l3kernel bundle" (The Work in LPPL)
-and all files in that bundle must be distributed together.
-
-\endpreamble
-% stop docstrip adding \endinput
-\postamble
-\endpostamble
-
-\keepsilent
-
-\generate
- {
- \file{expl3-code.tex}
- {
- \from{expl3.dtx} {package}
- \from{l3bootstrap.dtx} {package}
- \from{l3names.dtx} {package,tex}
- \from{l3basics.dtx} {package}
- \from{l3expan.dtx} {package}
- \from{l3quark.dtx} {package}
- \from{l3tl.dtx} {package}
- \from{l3tl-build.dtx} {package}
- \from{l3str.dtx} {package}
- \from{l3seq.dtx} {package}
- \from{l3int.dtx} {package}
- \from{l3flag.dtx} {package}
- \from{l3prg.dtx} {package}
- \from{l3sys.dtx} {package,tex}
- \from{l3clist.dtx} {package}
- \from{l3token.dtx} {package,tex}
- \from{l3prop.dtx} {package}
- \from{l3msg.dtx} {package}
- \from{l3file.dtx} {package}
- \from{l3skip.dtx} {package}
- \from{l3keys.dtx} {package}
- \from{l3intarray.dtx} {package,tex}
- \from{l3fp.dtx} {package}
- \from{l3fp-aux.dtx} {package}
- \from{l3fp-traps.dtx} {package}
- \from{l3fp-round.dtx} {package}
- \from{l3fp-parse.dtx} {package}
- \from{l3fp-assign.dtx} {package}
- \from{l3fp-logic.dtx} {package}
- \from{l3fp-basics.dtx} {package}
- \from{l3fp-extended.dtx}{package}
- \from{l3fp-expo.dtx} {package}
- \from{l3fp-trig.dtx} {package}
- \from{l3fp-convert.dtx} {package}
- \from{l3fp-random.dtx} {package}
- \from{l3fp-types.dtx} {package}
- \from{l3fp-symbolic.dtx}{package}
- \from{l3fp-functions.dtx}{package}
- \from{l3fparray.dtx} {package}
- \from{l3bitset.dtx} {package}
- \from{l3cctab.dtx} {package}
- \from{l3sort.dtx} {package}
- \from{l3str-convert.dtx}{package}
- \from{l3tl-analysis.dtx}{package}
- \from{l3regex.dtx} {package}
- \from{l3box.dtx} {package}
- \from{l3color.dtx} {package}
- \from{l3pdf.dtx} {package}
- \from{l3coffins.dtx} {package}
- \from{l3luatex.dtx} {package,tex}
- \from{l3unicode.dtx} {package}
- \from{l3text.dtx} {package}
- \from{l3text-case.dtx} {package}
- \from{l3text-map.dtx} {package}
- \from{l3text-purify.dtx}{package}
- \from{l3legacy.dtx} {package}
- \from{l3deprecation.dtx}{package}
- }
- }
-
-\generate{\file{expl3.sty} {\from{expl3.dtx} {package,loader}}}
-\generate{\file{expl3.ltx} {\from{expl3.dtx} {2ekernel,loader}}}
-\generate{\file{expl3-generic.tex}{\from{expl3.dtx} {generic,loader}}}
-
-\generate{\file{l3doc.cls} {\from{l3doc.dtx} {class}}}
-% not distributed:
-%\generate{\file{l3doc.ist} {\from{l3doc.dtx} {docist}}}
-
-% ISO-8859 encodings.
-\generate{%
- \file{l3str-enc-iso88591.def} {\from{l3str-convert.dtx}{iso88591}}%
- \file{l3str-enc-iso88592.def} {\from{l3str-convert.dtx}{iso88592}}%
- \file{l3str-enc-iso88593.def} {\from{l3str-convert.dtx}{iso88593}}%
- \file{l3str-enc-iso88594.def} {\from{l3str-convert.dtx}{iso88594}}%
- \file{l3str-enc-iso88595.def} {\from{l3str-convert.dtx}{iso88595}}%
- \file{l3str-enc-iso88596.def} {\from{l3str-convert.dtx}{iso88596}}%
- \file{l3str-enc-iso88597.def} {\from{l3str-convert.dtx}{iso88597}}%
- \file{l3str-enc-iso88598.def} {\from{l3str-convert.dtx}{iso88598}}%
- \file{l3str-enc-iso88599.def} {\from{l3str-convert.dtx}{iso88599}}%
- \file{l3str-enc-iso885910.def} {\from{l3str-convert.dtx}{iso885910}}%
- \file{l3str-enc-iso885911.def} {\from{l3str-convert.dtx}{iso885911}}%
- \file{l3str-enc-iso885913.def} {\from{l3str-convert.dtx}{iso885913}}%
- \file{l3str-enc-iso885914.def} {\from{l3str-convert.dtx}{iso885914}}%
- \file{l3str-enc-iso885915.def} {\from{l3str-convert.dtx}{iso885915}}%
- \file{l3str-enc-iso885916.def} {\from{l3str-convert.dtx}{iso885916}}%
-}
-
-\generate{\file{l3debug.def} {\from{l3debug.dtx} {package}}}
-
-\generate{\file{l3docstrip.tex} {\from{l3docstrip.dtx} {program}}}
-
-\generate{\file{l3names.def} {\from{l3names.dtx} {names}}}
-
-% Lua code
-
-\def\MetaPrefix{--}
-\preamble
-
-Copyright (C) 1990-2024 The LaTeX Project
-
-It may be distributed and/or modified under the conditions of
-the LaTeX Project Public License (LPPL), either version 1.3c of
-this license or (at your option) any later version. The latest
-version of this license is in the file:
-
- https://www.latex-project.org/lppl.txt
-
-This file is part of the "l3kernel bundle" (The Work in LPPL)
-and all files in that bundle must be distributed together.
-
-\endpreamble
-\nopostamble
-\generate{\file{expl3.lua}{
- \from{l3luatex.dtx}{package,lua}
- \from{l3names.dtx}{package,lua}
- \from{l3sys.dtx}{package,lua}
- \from{l3token.dtx}{package,lua}
- \from{l3intarray.dtx}{package,lua}
-}}
-
-\endbatchfile
diff --git a/macros/latex/contrib/l3kernel/l3basics.dtx b/macros/latex/contrib/l3kernel/l3basics.dtx
deleted file mode 100644
index 66e999fe62..0000000000
--- a/macros/latex/contrib/l3kernel/l3basics.dtx
+++ /dev/null
@@ -1,3507 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3basics.dtx
-%
-% Copyright (C) 1990-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3basics} module\\ Basic definitions^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% As the name suggests, this module holds some basic definitions which
-% are needed by most or all other modules in this set.
-%
-% Here we describe those functions that are used all over the place.
-% By that, we mean functions dealing with the construction and testing of
-% control sequences. Furthermore the basic parts of conditional
-% processing are covered; conditional processing dealing with specific
-% data types is described in the modules specific for the respective
-% data types.
-%
-% \section{No operation functions}
-%
-% \begin{function}[EXP]{\prg_do_nothing:}
-% \begin{syntax}
-% \cs{prg_do_nothing:}
-% \end{syntax}
-% An expandable function which does nothing at all: leaves nothing
-% in the input stream after a single expansion.
-% \end{function}
-%
-% \begin{function}{\scan_stop:}
-% \begin{syntax}
-% \cs{scan_stop:}
-% \end{syntax}
-% A non-expandable function which does nothing. Does not vanish on
-% expansion but produces no typeset output.
-% \end{function}
-%
-% \section{Grouping material}
-%
-% \begin{function}{\group_begin:, \group_end:}
-% \begin{syntax}
-% \cs{group_begin:}
-% \cs{group_end:}
-% \end{syntax}
-% These functions begin and end a group for definition purposes.
-% Assignments are local to groups unless carried out in a global
-% manner. (A small number of exceptions to this rule will be noted
-% as necessary elsewhere in this document.) Each \cs{group_begin:}
-% must be matched by a \cs{group_end:}, although this does not have
-% to occur within the same function. Indeed, it is often necessary
-% to start a group within one function and finish it within another,
-% for example when seeking to use non-standard category codes.
-% \begin{texnote}
-% These are the \TeX{} primitives \tn{begingroup} and \tn{endgroup}.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}{\group_insert_after:N}
-% \begin{syntax}
-% \cs{group_insert_after:N} \meta{token}
-% \end{syntax}
-% Adds \meta{token} to the list of \meta{tokens} to be inserted
-% when the current group level ends. The list of \meta{tokens} to be
-% inserted is empty at the beginning of a group: multiple
-% applications of \cs{group_insert_after:N} may be used to build
-% the inserted list one \meta{token} at a time. The current group
-% level may be closed by a \cs{group_end:} function or by a token
-% with category code $2$ (close-group), namely a ^^A{
-% |}| if standard category codes apply.
-% \begin{texnote}
-% This is the \TeX{} primitive \tn{aftergroup}.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[added = 2021-05-11]{\group_show_list:, \group_log_list:}
-% \begin{syntax}
-% \cs{group_show_list:}
-% \cs{group_log_list:}
-% \end{syntax}
-% Display (to the terminal or log file) a list of the groups that are
-% currently opened. This is intended for tracking down problems.
-% \begin{texnote}
-% This is a wrapper around the \eTeX{} primitive \tn{showgroups}.
-% \end{texnote}
-% \end{function}
-%
-% \section{Control sequences and functions}
-%
-% As \TeX{} is a macro language, creating new functions means
-% creating macros. At point of use, a function is replaced by
-% the replacement text (\enquote{code}) in which each parameter
-% in the code (|#1|, |#2|, \emph{etc.}) is replaced the appropriate
-% arguments absorbed by the function. In the following, \meta{code}
-% is therefore used as a shorthand for \enquote{replacement text}.
-%
-% Functions which are not \enquote{protected} are fully expanded
-% inside an \texttt{e}-type or \texttt{x}-type expansion.
-% In contrast, \enquote{protected} functions are not expanded within
-% \texttt{e} and \texttt{x} expansions.
-%
-% \subsection{Defining functions}
-%
-% Functions can be created with no requirement that they are declared
-% first (in contrast to variables, which must always be declared).
-% Declaring a function before setting up the code means that the name
-% chosen is checked and an error raised if it is already in use.
-% The name of a function can be checked at the point of definition using
-% the \cs[no-index]{cs_new\ldots} functions: this is recommended for all
-% functions which are defined for the first time.
-%
-% There are three ways to define new functions.
-% All classes define a function to expand to the substitution text.
-% Within the substitution text the actual parameters are substituted
-% for the formal parameters (|#1|, |#2|, \ldots).
-% \begin{description}
-% \item[\texttt{new}]
-% Create a new function with the \texttt{new} scope,
-% such as \cs{cs_new:Npn}. The definition is global and results in
-% an error if it is already defined.
-% \item[\texttt{set}]
-% Create a new function with the \texttt{set} scope,
-% such as \cs{cs_set:Npn}. The definition is restricted to the current
-% \TeX{} group and does not result in an error if the function is already
-% defined.
-% \item[\texttt{gset}]
-% Create a new function with the \texttt{gset} scope,
-% such as \cs{cs_gset:Npn}. The definition is global and
-% does not result in an error if the function is already defined.
-% \end{description}
-%
-% Within each set of scope there are different ways to define a function.
-% The differences depend on restrictions on the actual parameters and
-% the expandability of the resulting function.
-% \begin{description}
-% \item[\texttt{nopar}]
-% Create a new function with the \texttt{nopar} restriction,
-% such as \cs{cs_set_nopar:Npn}. The parameter may not contain
-% \cs{par} tokens.
-% \item[\texttt{protected}]
-% Create a new function with the \texttt{protected} restriction,
-% such as \cs{cs_set_protected:Npn}. The parameter may contain
-% \cs{par} tokens but the function will not expand within an
-% \texttt{e}-type or \texttt{x}-type expansion.
-% \end{description}
-%
-% Finally, the functions in
-% Subsections~\ref{sec:l3basics:defining-new-function-1}~and
-% \ref{sec:l3basics:defining-new-function-2} are primarily meant to define
-% \emph{base functions} only. Base functions can only have the following
-% argument specifiers:
-% \begin{description}
-% \item[|N| and |n|] No manipulation.
-% \item[|T| and |F|] Functionally equivalent to |n| (you are actually
-% encouraged to use the family of |\prg_new_conditional:| functions
-% described in Section~\ref{sec:l3prg:new-conditional-functions}).
-% \item[|p| and |w|] These are special cases.
-% \end{description}
-%
-% The |\cs_new:| functions below (and friends) do not stop you from using
-% other argument specifiers in your function names, but they do not handle
-% expansion for you. You should define the base function and then use
-% \cs{cs_generate_variant:Nn} to generate custom variants as described in
-% Section~\ref{sec:l3expan:variants-method}.
-%
-% \subsection{Defining new functions using parameter text}
-% \label{sec:l3basics:defining-new-function-1}
-%
-% \begin{function}
-% {
-% \cs_new:Npn, \cs_new:cpn,
-% \cs_new:Npe, \cs_new:cpe,
-% \cs_new:Npx, \cs_new:cpx
-% }
-% \begin{syntax}
-% \cs{cs_new:Npn} \meta{function} \meta{parameters} \Arg{code}
-% \end{syntax}
-% Creates \meta{function} to expand to \meta{code} as replacement text.
-% Within the \meta{code}, the \meta{parameters} (|#1|, |#2|,
-% \emph{etc.}) will be replaced by those absorbed by the function.
-% The definition is global and an error results if the
-% \meta{function} is already defined.
-% \end{function}
-%
-% \begin{function}
-% {
-% \cs_new_nopar:Npn, \cs_new_nopar:cpn,
-% \cs_new_nopar:Npe, \cs_new_nopar:cpe,
-% \cs_new_nopar:Npx, \cs_new_nopar:cpx
-% }
-% \begin{syntax}
-% \cs{cs_new_nopar:Npn} \meta{function} \meta{parameters} \Arg{code}
-% \end{syntax}
-% Creates \meta{function} to expand to \meta{code} as replacement text.
-% Within the \meta{code}, the \meta{parameters} (|#1|, |#2|,
-% \emph{etc.}) will be replaced by those absorbed by the function.
-% When the \meta{function} is used the \meta{parameters} absorbed
-% cannot contain \cs{par} tokens. The definition is global and
-% an error results if the \meta{function} is already defined.
-% \end{function}
-%
-% \begin{function}
-% {
-% \cs_new_protected:Npn, \cs_new_protected:cpn,
-% \cs_new_protected:Npe, \cs_new_protected:cpe,
-% \cs_new_protected:Npx, \cs_new_protected:cpx
-% }
-% \begin{syntax}
-% \cs{cs_new_protected:Npn} \meta{function} \meta{parameters} \Arg{code}
-% \end{syntax}
-% Creates \meta{function} to expand to \meta{code} as replacement text.
-% Within the \meta{code}, the \meta{parameters} (|#1|, |#2|,
-% \emph{etc.}) will be replaced by those absorbed by the function.
-% The \meta{function} will not expand within an \texttt{e}-type or
-% or \texttt{x}-type
-% argument. The definition is global and an error results if the
-% \meta{function} is already defined.
-% \end{function}
-%
-% \begin{function}
-% {
-% \cs_new_protected_nopar:Npn, \cs_new_protected_nopar:cpn ,
-% \cs_new_protected_nopar:Npe, \cs_new_protected_nopar:cpe ,
-% \cs_new_protected_nopar:Npx, \cs_new_protected_nopar:cpx
-% }
-% \begin{syntax}
-% \cs{cs_new_protected_nopar:Npn} \meta{function} \meta{parameters} \Arg{code}
-% \end{syntax}
-% Creates \meta{function} to expand to \meta{code} as replacement text.
-% Within the \meta{code}, the \meta{parameters} (|#1|, |#2|,
-% \emph{etc.}) will be replaced by those absorbed by the function.
-% When the \meta{function} is used the \meta{parameters} absorbed
-% cannot contain \cs{par} tokens. The \meta{function} will not
-% expand within an \texttt{e}-type or \texttt{x}-type argument. The definition is global
-% and an error results if the \meta{function} is already defined.
-% \end{function}
-%
-% \begin{function}
-% {
-% \cs_set:Npn, \cs_set:cpn,
-% \cs_set:Npe, \cs_set:cpe,
-% \cs_set:Npx, \cs_set:cpx
-% }
-% \begin{syntax}
-% \cs{cs_set:Npn} \meta{function} \meta{parameters} \Arg{code}
-% \end{syntax}
-% Sets \meta{function} to expand to \meta{code} as replacement text.
-% Within the \meta{code}, the \meta{parameters} (|#1|, |#2|,
-% \emph{etc.}) will be replaced by those absorbed by the function.
-% The assignment of a meaning to the \meta{function} is restricted to
-% the current \TeX{} group level.
-% \end{function}
-%
-% \begin{function}
-% {
-% \cs_set_nopar:Npn, \cs_set_nopar:cpn,
-% \cs_set_nopar:Npe, \cs_set_nopar:cpe,
-% \cs_set_nopar:Npx, \cs_set_nopar:cpx
-% }
-% \begin{syntax}
-% \cs{cs_set_nopar:Npn} \meta{function} \meta{parameters} \Arg{code}
-% \end{syntax}
-% Sets \meta{function} to expand to \meta{code} as replacement text.
-% Within the \meta{code}, the \meta{parameters} (|#1|, |#2|,
-% \emph{etc.}) will be replaced by those absorbed by the function.
-% When the \meta{function} is used the \meta{parameters} absorbed
-% cannot contain \cs{par} tokens. The assignment of a meaning
-% to the \meta{function} is restricted to the current \TeX{} group
-% level.
-% \end{function}
-%
-% \begin{function}
-% {
-% \cs_set_protected:Npn, \cs_set_protected:cpn,
-% \cs_set_protected:Npe, \cs_set_protected:cpe,
-% \cs_set_protected:Npx, \cs_set_protected:cpx
-% }
-% \begin{syntax}
-% \cs{cs_set_protected:Npn} \meta{function} \meta{parameters} \Arg{code}
-% \end{syntax}
-% Sets \meta{function} to expand to \meta{code} as replacement text.
-% Within the \meta{code}, the \meta{parameters} (|#1|, |#2|,
-% \emph{etc.}) will be replaced by those absorbed by the function.
-% The assignment of a meaning to the \meta{function} is restricted to
-% the current \TeX{} group level. The \meta{function} will
-% not expand within an \texttt{e}-type or \texttt{x}-type argument.
-% \end{function}
-%
-% \begin{function}
-% {
-% \cs_set_protected_nopar:Npn, \cs_set_protected_nopar:cpn ,
-% \cs_set_protected_nopar:Npe, \cs_set_protected_nopar:cpe ,
-% \cs_set_protected_nopar:Npx, \cs_set_protected_nopar:cpx ,
-% }
-% \begin{syntax}
-% \cs{cs_set_protected_nopar:Npn} \meta{function} \meta{parameters} \Arg{code}
-% \end{syntax}
-% Sets \meta{function} to expand to \meta{code} as replacement text.
-% Within the \meta{code}, the \meta{parameters} (|#1|, |#2|,
-% \emph{etc.}) will be replaced by those absorbed by the function.
-% When the \meta{function} is used the \meta{parameters} absorbed
-% cannot contain \cs{par} tokens. The assignment of a meaning
-% to the \meta{function} is restricted to the current \TeX{} group
-% level. The \meta{function} will not expand within an
-% \texttt{e}-type or \texttt{x}-type argument.
-% \end{function}
-%
-% \begin{function}
-% {
-% \cs_gset:Npn, \cs_gset:cpn,
-% \cs_gset:Npe, \cs_gset:cpe,
-% \cs_gset:Npx, \cs_gset:cpx
-% }
-% \begin{syntax}
-% \cs{cs_gset:Npn} \meta{function} \meta{parameters} \Arg{code}
-% \end{syntax}
-% Globally sets \meta{function} to expand to \meta{code} as replacement
-% text. Within the \meta{code}, the \meta{parameters} (|#1|, |#2|,
-% \emph{etc.}) will be replaced by those absorbed by the function.
-% The assignment of a meaning to the \meta{function} is \emph{not}
-% restricted to the current \TeX{} group level: the assignment is
-% global.
-% \end{function}
-%
-% \begin{function}
-% {
-% \cs_gset_nopar:Npn, \cs_gset_nopar:cpn,
-% \cs_gset_nopar:Npe, \cs_gset_nopar:cpe,
-% \cs_gset_nopar:Npx, \cs_gset_nopar:cpx
-% }
-% \begin{syntax}
-% \cs{cs_gset_nopar:Npn} \meta{function} \meta{parameters} \Arg{code}
-% \end{syntax}
-% Globally sets \meta{function} to expand to \meta{code} as replacement
-% text. Within the \meta{code}, the \meta{parameters} (|#1|, |#2|,
-% \emph{etc.}) will be replaced by those absorbed by the function.
-% When the \meta{function} is used the \meta{parameters} absorbed
-% cannot contain \cs{par} tokens. The assignment of a meaning to the
-% \meta{function} is \emph{not} restricted to the current \TeX{}
-% group level: the assignment is global.
-% \end{function}
-%
-% \begin{function}
-% {
-% \cs_gset_protected:Npn, \cs_gset_protected:cpn,
-% \cs_gset_protected:Npe, \cs_gset_protected:cpe,
-% \cs_gset_protected:Npx, \cs_gset_protected:cpx
-% }
-% \begin{syntax}
-% \cs{cs_gset_protected:Npn} \meta{function} \meta{parameters} \Arg{code}
-% \end{syntax}
-% Globally sets \meta{function} to expand to \meta{code} as replacement
-% text. Within the \meta{code}, the \meta{parameters} (|#1|, |#2|,
-% \emph{etc.}) will be replaced by those absorbed by the function.
-% The assignment of a meaning to the \meta{function} is \emph{not}
-% restricted to the current \TeX{} group level: the assignment is
-% global. The \meta{function} will not expand within an
-% \texttt{e}-type or \texttt{x}-type argument.
-% \end{function}
-%
-% \begin{function}
-% {
-% \cs_gset_protected_nopar:Npn, \cs_gset_protected_nopar:cpn,
-% \cs_gset_protected_nopar:Npe, \cs_gset_protected_nopar:cpe,
-% \cs_gset_protected_nopar:Npx, \cs_gset_protected_nopar:cpx
-% }
-% \begin{syntax}
-% \cs{cs_gset_protected_nopar:Npn} \meta{function} \meta{parameters} \Arg{code}
-% \end{syntax}
-% Globally sets \meta{function} to expand to \meta{code} as replacement
-% text. Within the \meta{code}, the \meta{parameters} (|#1|, |#2|,
-% \emph{etc.}) will be replaced by those absorbed by the function.
-% When the \meta{function} is used the \meta{parameters} absorbed
-% cannot contain \cs{par} tokens. The assignment of a meaning to the
-% \meta{function} is \emph{not} restricted to the current \TeX{}
-% group level: the assignment is global. The \meta{function} will
-% not expand within an \texttt{e}-type or \texttt{x}-type argument.
-% \end{function}
-%
-% \subsection{Defining new functions using the signature}
-% \label{sec:l3basics:defining-new-function-2}
-%
-% \begin{function}
-% {
-% \cs_new:Nn, \cs_new:cn,
-% \cs_new:Ne, \cs_new:ce
-% }
-% \begin{syntax}
-% \cs{cs_new:Nn} \meta{function} \Arg{code}
-% \end{syntax}
-% Creates \meta{function} to expand to \meta{code} as replacement text.
-% Within the \meta{code}, the number of \meta{parameters} is detected
-% automatically from the function signature. These \meta{parameters}
-% (|#1|, |#2|, \emph{etc.}) will be replaced by those absorbed by the
-% function. The definition is global and
-% an error results if the \meta{function} is already defined.
-% \end{function}
-%
-% \begin{function}
-% {
-% \cs_new_nopar:Nn, \cs_new_nopar:cn,
-% \cs_new_nopar:Ne, \cs_new_nopar:ce
-% }
-% \begin{syntax}
-% \cs{cs_new_nopar:Nn} \meta{function} \Arg{code}
-% \end{syntax}
-% Creates \meta{function} to expand to \meta{code} as replacement text.
-% Within the \meta{code}, the number of \meta{parameters} is detected
-% automatically from the function signature. These \meta{parameters}
-% (|#1|, |#2|, \emph{etc.}) will be replaced by those absorbed by the
-% function. When the \meta{function} is used the \meta{parameters}
-% absorbed cannot contain \cs{par} tokens. The definition is global and
-% an error results if the \meta{function} is already defined.
-% \end{function}
-%
-% \begin{function}
-% {
-% \cs_new_protected:Nn, \cs_new_protected:cn,
-% \cs_new_protected:Ne, \cs_new_protected:ce
-% }
-% \begin{syntax}
-% \cs{cs_new_protected:Nn} \meta{function} \Arg{code}
-% \end{syntax}
-% Creates \meta{function} to expand to \meta{code} as replacement text.
-% Within the \meta{code}, the number of \meta{parameters} is detected
-% automatically from the function signature. These \meta{parameters}
-% (|#1|, |#2|, \emph{etc.}) will be replaced by those absorbed by the
-% function. The \meta{function} will not expand within an \texttt{e}-type
-% or \texttt{x}-type argument. The definition is global and
-% an error results if the \meta{function} is already defined.
-% \end{function}
-%
-% \begin{function}
-% {
-% \cs_new_protected_nopar:Nn, \cs_new_protected_nopar:cn,
-% \cs_new_protected_nopar:Ne, \cs_new_protected_nopar:ce
-% }
-% \begin{syntax}
-% \cs{cs_new_protected_nopar:Nn} \meta{function} \Arg{code}
-% \end{syntax}
-% Creates \meta{function} to expand to \meta{code} as replacement text.
-% Within the \meta{code}, the number of \meta{parameters} is detected
-% automatically from the function signature. These \meta{parameters}
-% (|#1|, |#2|, \emph{etc.}) will be replaced by those absorbed by the
-% function. When the \meta{function} is used the \meta{parameters}
-% absorbed cannot contain \cs{par} tokens. The \meta{function} will not
-% expand within an \texttt{e}-type or \texttt{x}-type argument. The definition is global and
-% an error results if the \meta{function} is already defined.
-% \end{function}
-%
-% \begin{function}
-% {
-% \cs_set:Nn, \cs_set:cn,
-% \cs_set:Ne, \cs_set:ce
-% }
-% \begin{syntax}
-% \cs{cs_set:Nn} \meta{function} \Arg{code}
-% \end{syntax}
-% Sets \meta{function} to expand to \meta{code} as replacement text.
-% Within the \meta{code}, the number of \meta{parameters} is detected
-% automatically from the function signature. These \meta{parameters}
-% (|#1|, |#2|, \emph{etc.}) will be replaced by those absorbed by the
-% function.
-% The assignment of a meaning to the \meta{function} is restricted to
-% the current \TeX{} group level.
-% \end{function}
-%
-% \begin{function}
-% {
-% \cs_set_nopar:Nn, \cs_set_nopar:cn,
-% \cs_set_nopar:Ne, \cs_set_nopar:ce
-% }
-% \begin{syntax}
-% \cs{cs_set_nopar:Nn} \meta{function} \Arg{code}
-% \end{syntax}
-% Sets \meta{function} to expand to \meta{code} as replacement text.
-% Within the \meta{code}, the number of \meta{parameters} is detected
-% automatically from the function signature. These \meta{parameters}
-% (|#1|, |#2|, \emph{etc.}) will be replaced by those absorbed by the
-% function. When the \meta{function} is used the \meta{parameters}
-% absorbed cannot contain \cs{par} tokens.
-% The assignment of a meaning to the \meta{function} is restricted to
-% the current \TeX{} group level.
-% \end{function}
-%
-% \begin{function}
-% {
-% \cs_set_protected:Nn, \cs_set_protected:cn,
-% \cs_set_protected:Ne, \cs_set_protected:ce
-% }
-% \begin{syntax}
-% \cs{cs_set_protected:Nn} \meta{function} \Arg{code}
-% \end{syntax}
-% Sets \meta{function} to expand to \meta{code} as replacement text.
-% Within the \meta{code}, the number of \meta{parameters} is detected
-% automatically from the function signature. These \meta{parameters}
-% (|#1|, |#2|, \emph{etc.}) will be replaced by those absorbed by the
-% function. The \meta{function} will not expand within an \texttt{e}-type
-% or \texttt{x}-type argument.
-% The assignment of a meaning to the \meta{function} is restricted to
-% the current \TeX{} group level.
-% \end{function}
-%
-% \begin{function}
-% {
-% \cs_set_protected_nopar:Nn, \cs_set_protected_nopar:cn,
-% \cs_set_protected_nopar:Ne, \cs_set_protected_nopar:ce
-% }
-% \begin{syntax}
-% \cs{cs_set_protected_nopar:Nn} \meta{function} \Arg{code}
-% \end{syntax}
-% Sets \meta{function} to expand to \meta{code} as replacement text.
-% Within the \meta{code}, the number of \meta{parameters} is detected
-% automatically from the function signature. These \meta{parameters}
-% (|#1|, |#2|, \emph{etc.}) will be replaced by those absorbed by the
-% function. When the \meta{function} is used the \meta{parameters}
-% absorbed cannot contain \cs{par} tokens. The \meta{function} will not
-% expand within an \texttt{e}-type or \texttt{x}-type argument.
-% The assignment of a meaning to the \meta{function} is restricted to
-% the current \TeX{} group level.
-% \end{function}
-%
-% \begin{function}
-% {
-% \cs_gset:Nn, \cs_gset:cn,
-% \cs_gset:Ne, \cs_gset:ce
-% }
-% \begin{syntax}
-% \cs{cs_gset:Nn} \meta{function} \Arg{code}
-% \end{syntax}
-% Sets \meta{function} to expand to \meta{code} as replacement text.
-% Within the \meta{code}, the number of \meta{parameters} is detected
-% automatically from the function signature. These \meta{parameters}
-% (|#1|, |#2|, \emph{etc.}) will be replaced by those absorbed by the
-% function.
-% The assignment of a meaning to the \meta{function} is global.
-% \end{function}
-%
-% \begin{function}
-% {
-% \cs_gset_nopar:Nn, \cs_gset_nopar:cn,
-% \cs_gset_nopar:Ne, \cs_gset_nopar:ce
-% }
-% \begin{syntax}
-% \cs{cs_gset_nopar:Nn} \meta{function} \Arg{code}
-% \end{syntax}
-% Sets \meta{function} to expand to \meta{code} as replacement text.
-% Within the \meta{code}, the number of \meta{parameters} is detected
-% automatically from the function signature. These \meta{parameters}
-% (|#1|, |#2|, \emph{etc.}) will be replaced by those absorbed by the
-% function. When the \meta{function} is used the \meta{parameters}
-% absorbed cannot contain \cs{par} tokens.
-% The assignment of a meaning to the \meta{function} is global.
-% \end{function}
-%
-% \begin{function}
-% {
-% \cs_gset_protected:Nn, \cs_gset_protected:cn,
-% \cs_gset_protected:Ne, \cs_gset_protected:ce
-% }
-% \begin{syntax}
-% \cs{cs_gset_protected:Nn} \meta{function} \Arg{code}
-% \end{syntax}
-% Sets \meta{function} to expand to \meta{code} as replacement text.
-% Within the \meta{code}, the number of \meta{parameters} is detected
-% automatically from the function signature. These \meta{parameters}
-% (|#1|, |#2|, \emph{etc.}) will be replaced by those absorbed by the
-% function. The \meta{function} will not expand within an \texttt{e}-type
-% or \texttt{x}-type argument.
-% The assignment of a meaning to the \meta{function} is global.
-% \end{function}
-%
-% \begin{function}
-% {
-% \cs_gset_protected_nopar:Nn, \cs_gset_protected_nopar:cn,
-% \cs_gset_protected_nopar:Ne, \cs_gset_protected_nopar:ce
-% }
-% \begin{syntax}
-% \cs{cs_gset_protected_nopar:Nn} \meta{function} \Arg{code}
-% \end{syntax}
-% Sets \meta{function} to expand to \meta{code} as replacement text.
-% Within the \meta{code}, the number of \meta{parameters} is detected
-% automatically from the function signature. These \meta{parameters}
-% (|#1|, |#2|, \emph{etc.}) will be replaced by those absorbed by the
-% function. When the \meta{function} is used the \meta{parameters}
-% absorbed cannot contain \cs{par} tokens. The \meta{function} will not
-% expand within an \texttt{e}-type or \texttt{x}-type argument.
-% The assignment of a meaning to the \meta{function} is global.
-% \end{function}
-%
-% \begin{function}[updated = 2012-01-14]
-% {
-% \cs_generate_from_arg_count:NNnn,
-% \cs_generate_from_arg_count:NNno,
-% \cs_generate_from_arg_count:cNnn,
-% \cs_generate_from_arg_count:Ncnn
-% }
-% \begin{syntax}
-% \cs{cs_generate_from_arg_count:NNnn} \meta{function} \meta{creator} \Arg{number} \Arg{code}
-% \end{syntax}
-% Uses the \meta{creator} function (which should have signature
-% |Npn|, for example \cs{cs_new:Npn}) to define a \meta{function}
-% which takes \meta{number} arguments and has \meta{code} as
-% replacement text. The \meta{number} of arguments is an integer expression,
-% evaluated as detailed for \cs{int_eval:n}.
-% \end{function}
-%
-% \subsection{Copying control sequences}
-%
-% Control sequences (not just functions as defined above) can
-% be set to have the same meaning using the functions described
-% here. Making two control sequences equivalent means that the
-% second control sequence is a \emph{copy} of the first (rather than
-% a pointer to it). Thus the old and new control sequence are not
-% tied together: changes to one are not reflected in the other.
-%
-% In the following text \enquote{cs} is used as an abbreviation for
-% \enquote{control sequence}.
-%
-% \begin{function}
-% {\cs_new_eq:NN, \cs_new_eq:Nc, \cs_new_eq:cN, \cs_new_eq:cc}
-% \begin{syntax}
-% \cs{cs_new_eq:NN} \meta{cs_1} \meta{cs_2}
-% \cs{cs_new_eq:NN} \meta{cs_1} \meta{token}
-% \end{syntax}
-% Globally creates \meta{control sequence_1} and sets it to have the same
-% meaning as \meta{control sequence_2} or <token>.
-% The second control sequence may
-% subsequently be altered without affecting the copy.
-% \end{function}
-%
-% \begin{function}
-% {\cs_set_eq:NN, \cs_set_eq:Nc, \cs_set_eq:cN, \cs_set_eq:cc}
-% \begin{syntax}
-% \cs{cs_set_eq:NN} \meta{cs_1} \meta{cs_2}
-% \cs{cs_set_eq:NN} \meta{cs_1} \meta{token}
-% \end{syntax}
-% Sets \meta{control sequence_1} to have the same meaning as
-% \meta{control sequence_2} (or <token>).
-% The second control sequence may subsequently be
-% altered without affecting the copy. The assignment of a meaning
-% to the \meta{control sequence_1} is restricted to the current
-% \TeX{} group level.
-% \end{function}
-%
-% \begin{function}
-% {\cs_gset_eq:NN, \cs_gset_eq:Nc, \cs_gset_eq:cN, \cs_gset_eq:cc}
-% \begin{syntax}
-% \cs{cs_gset_eq:NN} \meta{cs_1} \meta{cs_2}
-% \cs{cs_gset_eq:NN} \meta{cs_1} \meta{token}
-% \end{syntax}
-% Globally sets \meta{control sequence_1} to have the same meaning as
-% \meta{control sequence_2} (or <token>).
-% The second control sequence may subsequently be
-% altered without affecting the copy. The assignment of a meaning to
-% the \meta{control sequence_1} is \emph{not} restricted to the current
-% \TeX{} group level: the assignment is global.
-% \end{function}
-%
-% \subsection{Deleting control sequences}
-%
-% There are occasions where control sequences need to be deleted.
-% This is handled in a very simple manner.
-%
-% \begin{function}[updated = 2011-09-15]{\cs_undefine:N, \cs_undefine:c}
-% \begin{syntax}
-% \cs{cs_undefine:N} \meta{control sequence}
-% \end{syntax}
-% Sets \meta{control sequence} to be globally undefined.
-% \end{function}
-%
-% \subsection{Showing control sequences}
-%
-% \begin{function}[EXP, updated = 2011-12-22]{\cs_meaning:N, \cs_meaning:c}
-% \begin{syntax}
-% \cs{cs_meaning:N} \meta{control sequence}
-% \end{syntax}
-% This function expands to the \emph{meaning} of the \meta{control sequence}
-% control sequence. For a macro, this includes the \meta{replacement text}.
-% \begin{texnote}
-% This is the \TeX{} primitive \tn{meaning}.
-% For tokens that are not control sequences, it is more logical to
-% use \cs{token_to_meaning:N}.
-% The \texttt{c} variant correctly reports undefined arguments.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[updated = 2017-02-14]{\cs_show:N, \cs_show:c}
-% \begin{syntax}
-% \cs{cs_show:N} \meta{control sequence}
-% \end{syntax}
-% Displays the definition of the \meta{control sequence} on the
-% terminal.
-% \begin{texnote}
-% This is similar to the \TeX{} primitive \tn{show}, wrapped to a
-% fixed number of characters per line.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[added = 2014-08-22, updated = 2017-02-14]{\cs_log:N, \cs_log:c}
-% \begin{syntax}
-% \cs{cs_log:N} \meta{control sequence}
-% \end{syntax}
-% Writes the definition of the \meta{control sequence} in the log
-% file. See also \cs{cs_show:N} which displays the result in the
-% terminal.
-% \end{function}
-%
-% \subsection{Converting to and from control sequences}
-%
-% \begin{function}[EXP]{\use:c}
-% \begin{syntax}
-% \cs{use:c} \Arg{control sequence name}
-% \end{syntax}
-% Expands the \meta{control sequence name} until only characters
-% remain, and then converts this into a control sequence. This process
-% requires two expansions. As in other \texttt{c}-type arguments the
-% \meta{control sequence name} must, when fully expanded, consist of
-% character tokens, typically a mixture of category code $10$ (space),
-% $11$ (letter) and $12$ (other).
-% \end{function}
-%
-% As an example of the \cs{use:c} function, both
-% \begin{verbatim}
-% \use:c { a b c }
-% \end{verbatim}
-% and
-% \begin{verbatim}
-% \tl_new:N \l_my_tl
-% \tl_set:Nn \l_my_tl { a b c }
-% \use:c { \tl_use:N \l_my_tl }
-% \end{verbatim}
-% would be equivalent to
-% \begin{verbatim}
-% \abc
-% \end{verbatim}
-% after two expansions of \cs{use:c}.
-%
-% \begin{function}[noTF, EXP, added = 2012-11-10]
-% {\cs_if_exist_use:N, \cs_if_exist_use:c}
-% \begin{syntax}
-% \cs{cs_if_exist_use:N} \meta{control sequence}
-% \cs{cs_if_exist_use:NTF} \meta{control sequence} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests whether the \meta{control sequence} is currently defined
-% according to the conditional \cs{cs_if_exist:NTF}
-% (whether as a function or another control sequence type), and if it
-% is inserts the \meta{control sequence} into the input stream followed
-% by the \meta{true code}. Otherwise the \meta{false code} is used.
-% \end{function}
-%
-% \begin{function}[EXP]{\cs:w, \cs_end:}
-% \begin{syntax}
-% \cs{cs:w} \meta{control sequence name} \cs{cs_end:}
-% \end{syntax}
-% Converts the given \meta{control sequence name} into a single
-% control sequence token. This process requires one expansion.
-% The content for \meta{control sequence name} may be literal
-% material or from other expandable functions. The
-% \meta{control sequence name} must, when fully expanded, consist
-% of character tokens which are not active: typically
-% of category code $10$ (space), $11$ (letter)
-% or $12$ (other), or a mixture of these.
-% \begin{texnote}
-% These are the \TeX{} primitives \tn{csname} and \tn{endcsname}.
-% \end{texnote}
-% \end{function}
-%
-% As an example of the \cs{cs:w} and \cs{cs_end:} functions, both
-% \begin{verbatim}
-% \cs:w a b c \cs_end:
-% \end{verbatim}
-% and
-% \begin{verbatim}
-% \tl_new:N \l_my_tl
-% \tl_set:Nn \l_my_tl { a b c }
-% \cs:w \tl_use:N \l_my_tl \cs_end:
-% \end{verbatim}
-% would be equivalent to
-% \begin{verbatim}
-% \abc
-% \end{verbatim}
-% after one expansion of \cs{cs:w}.
-%
-% \begin{function}[EXP]{\cs_to_str:N}
-% \begin{syntax}
-% \cs{cs_to_str:N} \meta{control sequence}
-% \end{syntax}
-% Converts the given \meta{control sequence} into a series of
-% characters with category code $12$ (other), except spaces,
-% of category code $10$. The result does \emph{not} include
-% the current escape token, contrarily to \cs{token_to_str:N}.
-% Full expansion of this function requires exactly $2$ expansion
-% steps, and so an \texttt{e}-type or \texttt{x}-type expansion, or two
-% \texttt{o}-type expansions are required to
-% convert the \meta{control sequence} to a sequence of characters
-% in the input stream. In most cases, an \texttt{f}-expansion
-% is correct as well, but this loses a space at the start
-% of the result.
-% \end{function}
-%
-% \section{Analysing control sequences}
-%
-% \begin{function}[EXP, added = 2018-04-06]{\cs_split_function:N}
-% \begin{syntax}
-% \cs{cs_split_function:N} \meta{function}
-% \end{syntax}
-% Splits the \meta{function} into the \meta{name} (\emph{i.e.}~the part
-% before the colon) and the \meta{signature} (\emph{i.e.}~after the colon).
-% This information is then placed in the input stream
-% in three parts: the \meta{name}, the
-% \meta{signature} and a logic token indicating if a colon was found
-% (to differentiate variables from function names). The \meta{name}
-% does not include the escape character, and both the \meta{name} and
-% \meta{signature} are made up of tokens with category code $12$
-% (other).
-% \end{function}
-%
-% The next three functions decompose \TeX{} macros into their
-% constituent parts: if the \meta{token} passed is not a macro then no
-% decomposition can occur. In the latter case, all three functions leave
-% \cs{scan_stop:} in the input stream.
-%
-% \begin{function}[EXP, added = 2019-02-27]{\cs_prefix_spec:N}
-% \begin{syntax}
-% \cs{cs_prefix_spec:N} \meta{token}
-% \end{syntax}
-% If the \meta{token} is a macro, this function leaves the applicable
-% \TeX{} prefixes in input stream as a string of tokens of category
-% code $12$ (with spaces having category code $10$). Thus for example
-% \begin{verbatim}
-% \cs_set:Npn \next:nn #1#2 { x #1~y #2 }
-% \cs_prefix_spec:N \next:nn
-% \end{verbatim}
-% leaves |\long| in the input stream. If the \meta{token} is
-% not a macro then \cs{scan_stop:} is left in the input stream.
-% \begin{texnote}
-% The prefix can be empty, |\long|, |\protected| or
-% |\protected\long| with backslash replaced by the current escape
-% character.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[EXP, added = 2022-06-24]{\cs_parameter_spec:N}
-% \begin{syntax}
-% \cs{cs_parameter_spec:N} \meta{token}
-% \end{syntax}
-% If the \meta{token} is a macro, this function leaves the primitive
-% \TeX{} parameter specification in input stream as a string of
-% character tokens of category code $12$ (with spaces having category
-% code $10$). Thus for example
-% \begin{verbatim}
-% \cs_set:Npn \next:nn #1#2 { x #1 y #2 }
-% \cs_parameter_spec:N \next:nn
-% \end{verbatim}
-% leaves |#1#2| in the input stream. If the \meta{token} is
-% not a macro then \cs{scan_stop:} is left in the input stream.
-% \begin{texnote}
-% If the parameter specification contains the string |->|, then the
-% function produces incorrect results.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[EXP, added = 2019-02-27]{\cs_replacement_spec:N, \cs_replacement_spec:c}
-% \begin{syntax}
-% \cs{cs_replacement_spec:N} \meta{token}
-% \end{syntax}
-% If the \meta{token} is a macro, this function leaves the replacement
-% text in input stream as a string of character tokens of category
-% code $12$ (with spaces having category code $10$). Thus for example
-% \begin{verbatim}
-% \cs_set:Npn \next:nn #1#2 { x #1~y #2 }
-% \cs_replacement_spec:N \next:nn
-% \end{verbatim}
-% leaves \verb*|x#1 y#2| in the input stream. If the \meta{token} is
-% not a macro then \cs{scan_stop:} is left in the input stream.
-% \begin{texnote}
-% If the parameter specification contains the string |->|, then the
-% function produces incorrect results.
-% \end{texnote}
-% \end{function}
-%
-% \section{Using or removing tokens and arguments}
-%
-% Tokens in the input can be read and used or read and discarded.
-% If one or more tokens are wrapped in braces then when absorbing them
-% the outer set is removed. At the same time, the category code
-% of each token is set when the token is read by a function (if it
-% is read more than once, the category code is determined by
-% the situation in force when first function absorbs the token).
-%
-% \begin{function}[EXP]{\use:n, \use:nn, \use:nnn, \use:nnnn}
-% \begin{syntax}
-% \cs{use:n} \Arg{group_1}
-% \cs{use:nn} \Arg{group_1} \Arg{group_2}
-% \cs{use:nnn} \Arg{group_1} \Arg{group_2} \Arg{group_3}
-% \cs{use:nnnn} \Arg{group_1} \Arg{group_2} \Arg{group_3} \Arg{group_4}
-% \end{syntax}
-% As illustrated, these functions absorb between one and four
-% arguments, as indicated by the argument specifier. The braces
-% surrounding each argument are removed and the remaining tokens are
-% left in the input stream. The category code of these tokens is
-% also fixed by this process (if it has not already been by some
-% other absorption). All of these functions require only a single
-% expansion to operate, so that one expansion of
-% \begin{verbatim}
-% \use:nn { abc } { { def } }
-% \end{verbatim}
-% results in the input stream containing
-% \begin{verbatim}
-% abc { def }
-% \end{verbatim}
-% \emph{i.e.} only the outer braces are removed.
-% \begin{texnote}
-% The \cs{use:n} function is equivalent to \LaTeXe{}'s \tn{@firstofone}.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[EXP]
-% {
-% \use_i:nn, \use_ii:nn ,
-% \use_i:nnn , \use_ii:nnn , \use_iii:nnn ,
-% \use_i:nnnn, \use_ii:nnnn, \use_iii:nnnn, \use_iv:nnnn ,
-% \use_i:nnnnn, \use_ii:nnnnn, \use_iii:nnnnn, \use_iv:nnnnn ,
-% \use_v:nnnnn ,
-% \use_i:nnnnnn, \use_ii:nnnnnn, \use_iii:nnnnnn, \use_iv:nnnnnn ,
-% \use_v:nnnnnn , \use_vi:nnnnnn ,
-% \use_i:nnnnnnn, \use_ii:nnnnnnn, \use_iii:nnnnnnn, \use_iv:nnnnnnn ,
-% \use_v:nnnnnnn , \use_vi:nnnnnnn , \use_vii:nnnnnnn ,
-% \use_i:nnnnnnnn, \use_ii:nnnnnnnn, \use_iii:nnnnnnnn, \use_iv:nnnnnnnn ,
-% \use_v:nnnnnnnn , \use_vi:nnnnnnnn , \use_vii:nnnnnnnn , \use_viii:nnnnnnnn ,
-% \use_i:nnnnnnnnn, \use_ii:nnnnnnnnn, \use_iii:nnnnnnnnn, \use_iv:nnnnnnnnn ,
-% \use_v:nnnnnnnnn , \use_vi:nnnnnnnnn , \use_vii:nnnnnnnnn , \use_viii:nnnnnnnnn ,
-% \use_ix:nnnnnnnnn
-% }
-% \begin{syntax}
-% \cs{use_i:nn} \Arg{arg_1} \Arg{arg_2}
-% \cs{use_i:nnn} \Arg{arg_1} \Arg{arg_2} \Arg{arg_3}
-% \cs{use_i:nnnn} \Arg{arg_1} \Arg{arg_2} \Arg{arg_3} \Arg{arg_4}
-% \cs{use_i:nnnnn} \Arg{arg_1} \Arg{arg_2} \Arg{arg_3} \Arg{arg_4} \Arg{arg_5}
-% \cs{use_i:nnnnnn} \Arg{arg_1} \Arg{arg_2} \Arg{arg_3} \Arg{arg_4} \Arg{arg_5} \Arg{arg_6}
-% \cs{use_i:nnnnnnn} \Arg{arg_1} \Arg{arg_2} \Arg{arg_3} \Arg{arg_4} \Arg{arg_5} \Arg{arg_6} \Arg{arg_7}
-% \cs{use_i:nnnnnnnn} \Arg{arg_1} \Arg{arg_2} \Arg{arg_3} \Arg{arg_4} \Arg{arg_5} \Arg{arg_6} \Arg{arg_7} \Arg{arg_8}
-% \cs{use_i:nnnnnnnnn} \Arg{arg_1} \Arg{arg_2} \Arg{arg_3} \Arg{arg_4} \Arg{arg_5} \Arg{arg_6} \Arg{arg_7} \Arg{arg_8} \Arg{arg_9}
-% \end{syntax}
-% These functions absorb a number ($n$) arguments from the input stream.
-% They then discard all arguments other than that indicated by the roman
-% numeral, which is left in the input stream. For example, \cs{use_i:nn}
-% discards the second argument, and leaves the content of the first
-% argument in the input stream.
-% The category code
-% of these tokens is also fixed (if it has not already been by
-% some other absorption). A single expansion is needed for the
-% functions to take effect.
-% \end{function}
-%
-% \begin{function}[EXP]{\use_i_ii:nnn}
-% \begin{syntax}
-% \cs{use_i_ii:nnn} \Arg{arg_1} \Arg{arg_2} \Arg{arg_3}
-% \end{syntax}
-% This function absorbs three arguments and leaves the content of the
-% first and second in the input stream. The category code of
-% these tokens is also fixed (if it has not already been by
-% some other absorption). A single expansion is needed for the
-% function to take effect. An example:
-% \begin{verbatim}
-% \use_i_ii:nnn { abc } { { def } } { ghi }
-% \end{verbatim}
-% results in the input stream containing
-% \begin{verbatim}
-% abc { def }
-% \end{verbatim}
-% \emph{i.e.} the outer braces are removed and the third group
-% is removed.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2019-06-02]{\use_ii_i:nn}
-% \begin{syntax}
-% \cs{use_ii_i:nn} \Arg{arg_1} \Arg{arg_2}
-% \end{syntax}
-% This function absorbs two arguments and leaves the content of the
-% second and first in the input stream. The category code of
-% these tokens is also fixed (if it has not already been by
-% some other absorption). A single expansion is needed for the
-% function to take effect.
-% \end{function}
-%
-% \begin{function}[EXP]
-% {
-% \use_none:n ,
-% \use_none:nn ,
-% \use_none:nnn ,
-% \use_none:nnnn ,
-% \use_none:nnnnn ,
-% \use_none:nnnnnn ,
-% \use_none:nnnnnnn ,
-% \use_none:nnnnnnnn ,
-% \use_none:nnnnnnnnn
-% }
-% \begin{syntax}
-% \cs{use_none:n} \Arg{group_1}
-% \end{syntax}
-% These functions absorb between one and nine groups from the
-% input stream, leaving nothing on the resulting input stream.
-% These functions work after a single expansion. One or more of the
-% \texttt{n} arguments may be an unbraced single token
-% (\emph{i.e.}~an \texttt{N} argument).
-% \begin{texnote}
-% These are equivalent to \LaTeXe{}'s \tn{@gobble}, \tn{@gobbletwo},
-% \emph{etc.}
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[EXP, added = 2018-06-18, updated = 2023-07-05]{\use:e}
-% \begin{syntax}
-% \cs{use:e} \Arg{expandable tokens}
-% \end{syntax}
-% Fully expands the \meta{token list} in an \texttt{e}-type manner,
-% in which parameter character (usually~|#|) need not be doubled, \emph{and}
-% the function remains fully expandable.
-% \begin{texnote}
-% \cs{use:e} is a wrapper around the primitive \tn{expanded}.
-% It requires two expansions to complete its action.
-% \end{texnote}
-% \end{function}
-%
-% \subsection{Selecting tokens from delimited arguments}
-%
-% A different kind of function for selecting tokens from the token
-% stream are those that use delimited arguments.
-%
-% \begin{function}[EXP]
-% {
-% \use_none_delimit_by_q_nil:w,
-% \use_none_delimit_by_q_stop:w,
-% \use_none_delimit_by_q_recursion_stop:w
-% }
-% \begin{syntax}
-% \cs{use_none_delimit_by_q_nil:w} \meta{balanced text} \cs{q_nil}
-% \cs{use_none_delimit_by_q_stop:w} \meta{balanced text} \cs{q_stop}
-% \cs{use_none_delimit_by_q_recursion_stop:w} \meta{balanced text} \cs{q_recursion_stop}
-% \end{syntax}
-% Absorb the \meta{balanced text} from the input stream delimited by
-% the marker given in the function name, leaving nothing in the
-% input stream.
-% \end{function}
-%
-% \begin{function}[EXP]
-% {
-% \use_i_delimit_by_q_nil:nw,
-% \use_i_delimit_by_q_stop:nw,
-% \use_i_delimit_by_q_recursion_stop:nw
-% }
-% \begin{syntax}
-% \cs{use_i_delimit_by_q_nil:nw} \Arg{inserted tokens} \meta{balanced text} \cs{q_nil}
-% \cs{use_i_delimit_by_q_stop:nw} \Arg{inserted tokens} \meta{balanced text} \cs{q_stop}
-% \cs{use_i_delimit_by_q_recursion_stop:nw} \Arg{inserted tokens} \meta{balanced text} \cs{q_recursion_stop}
-% \end{syntax}
-% Absorb the \meta{balanced text} from the input stream delimited by
-% the marker given in the function name, leaving \meta{inserted tokens}
-% in the input stream for further processing.
-% \end{function}
-%
-% \section{Predicates and conditionals}
-%
-% \LaTeX3 has three concepts for conditional flow processing:
-% \begin{description}
-% \item[Branching conditionals]
-% Functions that carry out a test and then execute, depending on its
-% result, either the code supplied as the \meta{true code} or the
-% \meta{false code}.
-% These arguments are denoted with |T| and |F|, respectively. An
-% example would be
-% \begin{quote}
-% |\cs_if_free:cTF {abc}| \Arg{true code} \Arg{false code}
-% \end{quote}
-% a function that turns the first argument into a control sequence
-% (since it's marked as |c|) then checks whether this control sequence
-% is still free and then depending on the result carries out the code in
-% the second argument (true case) or in the third argument (false
-% case).
-%
-% These type of functions are known as \enquote{conditionals};
-% whenever a |TF| function is defined it is usually accompanied by
-% |T| and |F| functions as well. These are provided for convenience when
-% the branch only needs to go a single way. Package writers are free to
-% choose which types to define but the kernel definitions always
-% provide all three versions.
-%
-% Important to note is that these branching conditionals with \meta{true
-% code} and/or \meta{false code} are always defined in a way that the
-% code of the chosen alternative can operate on following tokens in
-% the input stream.
-%
-% These conditional functions may or may not be fully expandable, but if
-% they are expandable they are accompanied by a \enquote{predicate}
-% for the same test as described below.
-%
-% \item[Predicates]
-% \enquote{Predicates} are functions that return a special type of
-% boolean value which can be tested by the boolean expression parser.
-% All functions of this type
-% are expandable and have names that end with |_p| in the
-% description part. For example,
-% \begin{quote}
-% \cs{cs_if_free_p:N}
-% \end{quote}
-% would be a predicate function for the same type of test as the
-% conditional described above. It would return \enquote{true} if its
-% argument (a single token denoted by |N|) is still free for definition.
-% It would be used in constructions like
-% \begin{quote}
-% |\bool_if:nTF {| \\
-% \verb" \cs_if_free_p:N \l_tmpz_tl || \cs_if_free_p:N \g_tmpz_tl " \\
-% |}|
-% \Arg{true code} \Arg{false code}
-% \end{quote}
-%
-% For each predicate defined, a \enquote{branching conditional}
-% also exists that behaves like a conditional described above.
-%
-% \item[Primitive conditionals]
-% There is a third variety of conditional, which is the original
-% concept used in plain \TeX{} and \LaTeXe{}. Their use is discouraged
-% in \pkg{expl3} (although still used in low-level definitions)
-% because they are more fragile and in many cases require more
-% expansion control (hence more code) than the two types of
-% conditionals described above.
-% \end{description}
-%
-% \subsection{Tests on control sequences}
-%
-% \begin{function}[EXP,pTF]{\cs_if_eq:NN}
-% \begin{syntax}
-% \cs{cs_if_eq_p:NN} \meta{cs_1} \meta{cs_2}
-% \cs{cs_if_eq:NNTF} \meta{cs_1} \meta{cs_2} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Compares the definition of two \meta{control sequences} and
-% is logically \texttt{true} if they are the same, \emph{i.e.}~if they have exactly
-% the same definition when examined with \cs{cs_show:N}.
-% \end{function}
-%
-% \begin{function}[EXP,pTF]{\cs_if_exist:N, \cs_if_exist:c}
-% \begin{syntax}
-% \cs{cs_if_exist_p:N} \meta{control sequence}
-% \cs{cs_if_exist:NTF} \meta{control sequence} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests whether the \meta{control sequence} is currently defined
-% (whether as a function or another control sequence type). Any
-% definition of \meta{control sequence} other than \tn{relax}
-% evaluates as \texttt{true}.
-% \end{function}
-%
-% \begin{function}[EXP,pTF]{\cs_if_free:N, \cs_if_free:c}
-% \begin{syntax}
-% \cs{cs_if_free_p:N} \meta{control sequence}
-% \cs{cs_if_free:NTF} \meta{control sequence} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests whether the \meta{control sequence} is currently free to
-% be defined. This test is \texttt{false} if the
-% \meta{control sequence} currently exists (as defined by
-% \cs{cs_if_exist:NTF}).
-% \end{function}
-%
-% \subsection{Primitive conditionals}
-%
-% The \eTeX{} engine itself provides many different conditionals. Some
-% expand whatever comes after them and others don't. Hence the names
-% for these underlying functions often contains a |:w| part but
-% higher level functions are often available. See for instance
-% \cs{int_compare_p:nNn} which is a wrapper for \cs{if_int_compare:w}.
-%
-% Certain conditionals deal with specific data types like boxes and
-% fonts and are described there. The ones described below are either
-% the universal conditionals or deal with control sequences. We
-% prefix primitive conditionals with |\if_|, except for \cs{if:w}.
-%
-% \begin{function}[EXP]
-% {\if_true:, \if_false:, \else:, \fi:, \reverse_if:N}
-% \begin{syntax}
-% "\if_true:" <true code> "\else:" <false code> "\fi:" \\
-% "\if_false:" <true code> "\else:" <false code> "\fi:" \\
-% "\reverse_if:N" <primitive conditional>
-% \end{syntax}
-% "\if_true:" always executes <true code>, while "\if_false:" always
-% executes <false code>. "\reverse_if:N" reverses any two-way primitive
-% conditional. "\else:" and "\fi:" delimit the branches of the
-% conditional. The function "\or:" is documented in \pkg{l3int} and
-% used in case switches.
-% \begin{texnote}
-% \cs{if_true:} and \cs{if_false:} are equivalent to their corresponding
-% \TeX{} primitive conditionals \tn{iftrue} and \tn{iffalse};
-% \cs{else:} and \cs{fi:} are the \TeX{} primitives \tn{else} and \tn{fi};
-% \cs{reverse_if:N} is the \eTeX{} primitive \tn{unless}.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[EXP]{\if_meaning:w}
-% \begin{syntax}
-% "\if_meaning:w" <arg_1> <arg_2> <true code> "\else:" <false code> "\fi:"
-% \end{syntax}
-% "\if_meaning:w" executes <true code> when <arg_1> and <arg_2> are the same,
-% otherwise it executes <false code>.
-% <arg_1> and <arg_2> could be functions, variables, tokens; in all cases the
-% \emph{unexpanded} definitions are compared.
-% \begin{texnote}
-% This is the \TeX{} primitive \tn{ifx}.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[EXP]{\if:w, \if_charcode:w, \if_catcode:w}
-% \begin{syntax}
-% "\if:w" <token(s)> <true code> "\else:" <false code> "\fi:" \\
-% "\if_catcode:w" <token(s)> <true code> "\else:" <false code> "\fi:"
-% \end{syntax}
-% "\if_charcode:w" is an alternative name for "\if:w".
-% These conditionals expand \meta{token(s)} until two
-% unexpandable tokens \meta{token_1} and \meta{token_2} are found;
-% any further tokens up to the next unbalanced "\else:" are the true branch,
-% ending with \meta{true code}. It is executed if the condition is fulfilled,
-% otherwise \meta{false code} is executed.
-% You can omit "\else:" when just in front of "\fi:" and
-% you can nest "\if...\else:...\fi:" constructs inside the true branch or the
-% \meta{false code}.
-% With "\exp_not:N", you can prevent the expansion of a token.
-%
-% "\if_catcode:w"
-% tests if \meta{token_1} and \meta{token_2} have the same category code whereas
-% "\if:w" and \cs{if_charcode:w} test if they have the same character code.
-% \begin{texnote}
-% \cs{if:w} and \cs{if_charcode:w} are both the \TeX{} primitive \tn{if}.
-% \cs{if_catcode:w} is the \TeX{} primitive \tn{ifcat}.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[EXP]{\if_cs_exist:N, \if_cs_exist:w}
-% \begin{syntax}
-% "\if_cs_exist:N" <cs> <true code> "\else:" <false code> "\fi:" \\
-% "\if_cs_exist:w" <tokens> "\cs_end:" <true code> "\else:" <false code> "\fi:"
-% \end{syntax}
-% Check if <cs> appears in the hash table or if the control sequence
-% that can be formed from <tokens> appears in the hash table. The
-% latter function does not turn the control sequence in question into
-% "\scan_stop:"! This can be useful when dealing with control
-% sequences which cannot be entered as a single token.
-% \begin{texnote}
-% These are the \TeX{} primitives \tn{ifdefined} and \tn{ifcsname}.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[EXP]
-% {
-% \if_mode_horizontal:, \if_mode_vertical:,
-% \if_mode_math:, \if_mode_inner:
-% }
-% \begin{syntax}
-% "\if_mode_horizontal:" <true code> "\else:" <false code> "\fi:"
-% \end{syntax}
-% Execute <true code> if currently in horizontal mode, otherwise
-% execute <false code>. Similar for the other functions.
-% \begin{texnote}
-% These are the \TeX{} primitives \tn{ifhmode}, \tn{ifvmode}, \tn{ifmmode},
-% and~\tn{ifinner}.
-% \end{texnote}
-% \end{function}
-%
-% \section{Starting a paragraph}
-%
-% \begin{function}[added = 2017-07-04]{\mode_leave_vertical:}
-% \begin{syntax}
-% \cs{mode_leave_vertical:}
-% \end{syntax}
-% Ensures that \TeX{} is not in vertical (inter-paragraph) mode. In
-% horizontal or math mode this command has no effect, in vertical mode it
-% switches to horizontal mode, and inserts a box of width
-% \tn{parindent}, followed by the \tn{everypar} token list.
-% \begin{texnote}
-% This results in the contents of the \tn{everypar} token register being
-% inserted, after \cs{mode_leave_vertical:} is complete. Notice that in
-% contrast to the \LaTeXe{} \tn{leavevmode} approach, no box is used
-% by the method implemented here.
-% \end{texnote}
-% \end{function}
-%
-% \section{Debugging support}
-%
-% \begin{function}[added = 2017-07-16, updated = 2023-05-23]{\debug_on:n, \debug_off:n}
-% \begin{syntax}
-% \cs{debug_on:n} |{| \meta{comma-separated list} |}|
-% \cs{debug_off:n} |{| \meta{comma-separated list} |}|
-% \end{syntax}
-% Turn on and off within a group various debugging code, some of which
-% is also available as \pkg{expl3} load-time options. The items that
-% can be used in the \meta{list} are
-% \begin{itemize}
-% \item \texttt{check-declarations} that checks all \pkg{expl3}
-% variables used were previously declared and that local/global
-% variables (based on their name or on their first assignment) are
-% only locally/globally assigned;
-% \item \texttt{check-expressions} that checks integer, dimension,
-% skip, and muskip expressions are not terminated prematurely;
-% \item \texttt{deprecation} that makes soon-to-be-deprecated commands produce errors;
-% \item \texttt{log-functions} that logs function definitions;
-% \item \texttt{all} that does all of the above.
-% \end{itemize}
-% Providing these as switches rather than options allows testing code
-% even if it relies on other packages: load all other packages, call
-% \cs{debug_on:n}, and load the code that one is interested in
-% testing.
-% \end{function}
-%
-% \begin{function}[added = 2017-11-28]{\debug_suspend:, \debug_resume:}
-% \begin{syntax}
-% \cs{debug_suspend:} \ldots{} \cs{debug_resume:}
-% \end{syntax}
-% Suppress (locally) errors and logging from \texttt{debug} commands,
-% except for the \texttt{deprecation} errors or warnings. These pairs
-% of commands can be nested. This can be used around pieces of code
-% that are known to fail checks, if such failures should be ignored.
-% See for instance \pkg{l3coffins}.
-% \end{function}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3basics} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \subsection{Renaming some \TeX{} primitives (again)}
-%
-% Having given all the \TeX{} primitives a consistent name, we need to
-% give sensible names to the ones we actually want to use.
-% These will be defined as needed in the appropriate modules, but we
-% do a few now, just to get started.\footnote{This renaming gets expensive
-% in terms of csname usage, an alternative scheme would be to just use
-% the \cs[no-index]{tex_\ldots:D} name in the cases where no good alternative exists.}
-%
-% \begin{macro}[EXP]
-% {
-% \if_true:, \if_false:, \or:, \else:, \fi:, \reverse_if:N,
-% \if:w, \if_charcode:w, \if_catcode:w, \if_meaning:w
-% }
-% Then some conditionals.
-% \begin{macrocode}
-\tex_global:D \tex_let:D \if_true: \tex_iftrue:D
-\tex_global:D \tex_let:D \if_false: \tex_iffalse:D
-\tex_global:D \tex_let:D \or: \tex_or:D
-\tex_global:D \tex_let:D \else: \tex_else:D
-\tex_global:D \tex_let:D \fi: \tex_fi:D
-\tex_global:D \tex_let:D \reverse_if:N \tex_unless:D
-\tex_global:D \tex_let:D \if:w \tex_if:D
-\tex_global:D \tex_let:D \if_charcode:w \tex_if:D
-\tex_global:D \tex_let:D \if_catcode:w \tex_ifcat:D
-\tex_global:D \tex_let:D \if_meaning:w \tex_ifx:D
-\tex_global:D \tex_let:D \if_bool:N \tex_ifodd:D
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {
-% \if_mode_math:,
-% \if_mode_horizontal:,
-% \if_mode_vertical:,
-% \if_mode_inner:
-% }
-% \TeX{} lets us detect some if its modes.
-% \begin{macrocode}
-\tex_global:D \tex_let:D \if_mode_math: \tex_ifmmode:D
-\tex_global:D \tex_let:D \if_mode_horizontal: \tex_ifhmode:D
-\tex_global:D \tex_let:D \if_mode_vertical: \tex_ifvmode:D
-\tex_global:D \tex_let:D \if_mode_inner: \tex_ifinner:D
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\if_cs_exist:N, \if_cs_exist:w, \cs:w, \cs_end:}
-% Building csnames and testing if control sequences exist.
-% \begin{macrocode}
-\tex_global:D \tex_let:D \if_cs_exist:N \tex_ifdefined:D
-\tex_global:D \tex_let:D \if_cs_exist:w \tex_ifcsname:D
-\tex_global:D \tex_let:D \cs:w \tex_csname:D
-\tex_global:D \tex_let:D \cs_end: \tex_endcsname:D
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\exp_after:wN, \exp_not:N, \exp_not:n}
-% The five |\exp_| functions are used in the \pkg{l3expan} module
-% where they are described.
-% \begin{macrocode}
-\tex_global:D \tex_let:D \exp_after:wN \tex_expandafter:D
-\tex_global:D \tex_let:D \exp_not:N \tex_noexpand:D
-\tex_global:D \tex_let:D \exp_not:n \tex_unexpanded:D
-\tex_global:D \tex_let:D \exp:w \tex_romannumeral:D
-\tex_global:D \tex_chardef:D \exp_end: = 0 ~
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\token_to_meaning:N, \cs_meaning:N}
-% Examining a control sequence or token.
-% \begin{macrocode}
-\tex_global:D \tex_let:D \token_to_meaning:N \tex_meaning:D
-\tex_global:D \tex_let:D \cs_meaning:N \tex_meaning:D
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\tl_to_str:n, \token_to_str:N, \__kernel_tl_to_str:w}
-% Making strings.
-% \begin{macrocode}
-\tex_global:D \tex_let:D \tl_to_str:n \tex_detokenize:D
-\tex_global:D \tex_let:D \token_to_str:N \tex_string:D
-\tex_global:D \tex_let:D \__kernel_tl_to_str:w \tex_detokenize:D
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\scan_stop:, \group_begin:, \group_end:}
-% The next three are basic functions for which there also exist
-% versions that are safe inside alignments. These safe versions are
-% defined in the \pkg{l3prg} module.
-% \begin{macrocode}
-\tex_global:D \tex_let:D \scan_stop: \tex_relax:D
-\tex_global:D \tex_let:D \group_begin: \tex_begingroup:D
-\tex_global:D \tex_let:D \group_end: \tex_endgroup:D
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%<@@=int>
-% \end{macrocode}
-%
-% \begin{macro}[EXP]{\if_int_compare:w, \@@_to_roman:w}
-% For integers.
-% \begin{macrocode}
-\tex_global:D \tex_let:D \if_int_compare:w \tex_ifnum:D
-\tex_global:D \tex_let:D \@@_to_roman:w \tex_romannumeral:D
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\group_insert_after:N}
-% Adding material after the end of a group.
-% \begin{macrocode}
-\tex_global:D \tex_let:D \group_insert_after:N \tex_aftergroup:D
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\exp_args:Nc, \exp_args:cc}
-% Discussed in \pkg{l3expan}, but needed much earlier.
-% \begin{macrocode}
-\tex_long:D \tex_gdef:D \exp_args:Nc #1#2
- { \exp_after:wN #1 \cs:w #2 \cs_end: }
-\tex_long:D \tex_gdef:D \exp_args:cc #1#2
- { \cs:w #1 \exp_after:wN \cs_end: \cs:w #2 \cs_end: }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP, documented-as=\token_to_meaning:N]
-% {\token_to_meaning:c, \token_to_str:c, \cs_meaning:c}
-% A small number of variants defined by hand.
-% Some of the necessary functions
-% (\cs{use_i:nn}, \cs{use_ii:nn}, and \cs{exp_args:NNc}) are not
-% defined at that point yet, but will be defined before those variants
-% are used. The \cs{cs_meaning:c} command must check for an undefined
-% control sequence to avoid defining it mistakenly.
-% \begin{macrocode}
-\tex_gdef:D \token_to_str:c { \exp_args:Nc \token_to_str:N }
-\tex_long:D \tex_gdef:D \cs_meaning:c #1
- {
- \if_cs_exist:w #1 \cs_end:
- \exp_after:wN \use_i:nn
- \else:
- \exp_after:wN \use_ii:nn
- \fi:
- { \exp_args:Nc \cs_meaning:N {#1} }
- { \tl_to_str:n {undefined} }
- }
-\tex_global:D \tex_let:D \token_to_meaning:c = \cs_meaning:c
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Defining some constants}
-%
-% \begin{variable}{\c_zero_int}
-% We need the constant \cs{c_zero_int}
-% which is used by some functions in current module. The
-% rest are defined in the \pkg{l3int} module -- at least for the
-% ones that can be defined with \cs{tex_chardef:D} or
-% \cs{tex_mathchardef:D}. For other constants the \pkg{l3int} module is
-% required but it can't be used until the allocation has been set
-% up properly!
-% \begin{macrocode}
-\tex_global:D \tex_chardef:D \c_zero_int = 0 ~
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\c_max_register_int}
-% This is here as this particular integer is needed in modules
-% loaded before \pkg{l3int}, and is documented in \pkg{l3int}.
-% \LuaTeX{} and those which contain parts of the Omega extensions have
-% more registers available than \eTeX{}.
-% \begin{macrocode}
-\tex_ifdefined:D \tex_luatexversion:D
- \tex_global:D \tex_chardef:D \c_max_register_int = 65 535 ~
-\tex_else:D
- \tex_ifdefined:D \tex_omathchardef:D
- \tex_global:D \tex_omathchardef:D \c_max_register_int = 65535 ~
- \tex_else:D
- \tex_global:D \tex_mathchardef:D \c_max_register_int = 32767 ~
- \tex_fi:D
-\tex_fi:D
-% \end{macrocode}
-% \end{variable}
-%
-% \subsection{Defining functions}
-%
-% We start by providing functions for the typical definition
-% functions. First the global ones.
-%
-% \begin{macro}
-% {
-% \cs_gset_nopar:Npn , \cs_gset_nopar:Npe , \cs_gset_nopar:Npx ,
-% \cs_gset:Npn , \cs_gset:Npe , \cs_gset:Npx ,
-% \cs_gset_protected_nopar:Npn , \cs_gset_protected_nopar:Npe , \cs_gset_protected_nopar:Npx ,
-% \cs_gset_protected:Npn , \cs_gset_protected:Npe , \cs_gset_protected:Npx
-% }
-% All assignment functions in \LaTeX3 should be naturally protected;
-% after all, the \TeX{} primitives for assignments are and it can be
-% a cause of problems if others aren't.
-% \begin{macrocode}
-\tex_global:D \tex_let:D \cs_gset_nopar:Npn \tex_gdef:D
-\tex_global:D \tex_let:D \cs_gset_nopar:Npe \tex_xdef:D
-\tex_global:D \tex_let:D \cs_gset_nopar:Npx \tex_xdef:D
-\tex_protected:D \tex_long:D \tex_gdef:D \cs_gset:Npn
- { \tex_long:D \tex_gdef:D }
-\tex_protected:D \tex_long:D \tex_gdef:D \cs_gset:Npe
- { \tex_long:D \tex_xdef:D }
-\tex_global:D \tex_let:D \cs_gset:Npx \cs_gset:Npe
-\tex_protected:D \tex_long:D \tex_gdef:D \cs_gset_protected_nopar:Npn
- { \tex_protected:D \tex_gdef:D }
-\tex_protected:D \tex_long:D \tex_gdef:D \cs_gset_protected_nopar:Npe
- { \tex_protected:D \tex_xdef:D }
-\tex_global:D \tex_let:D \cs_gset_protected_nopar:Npx \cs_gset_protected_nopar:Npe
-\tex_protected:D \tex_long:D \tex_gdef:D \cs_gset_protected:Npn
- { \tex_protected:D \tex_long:D \tex_gdef:D }
-\tex_protected:D \tex_long:D \tex_gdef:D \cs_gset_protected:Npe
- { \tex_protected:D \tex_long:D \tex_xdef:D }
-\tex_global:D \tex_let:D \cs_gset_protected:Npx \cs_gset_protected:Npe
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \cs_set_nopar:Npn , \cs_set_nopar:Npe , \cs_set_nopar:Npx ,
-% \cs_set:Npn , \cs_set:Npe , \cs_set:Npx ,
-% \cs_set_protected_nopar:Npn , \cs_set_protected_nopar:Npe , \cs_set_protected_nopar:Npx ,
-% \cs_set_protected:Npn , \cs_set_protected:Npe , \cs_set_protected:Npx
-% }
-% Local versions of the above functions.
-% \begin{macrocode}
-\tex_global:D \tex_let:D \cs_set_nopar:Npn \tex_def:D
-\tex_global:D \tex_let:D \cs_set_nopar:Npe \tex_edef:D
-\tex_global:D \tex_let:D \cs_set_nopar:Npx \tex_edef:D
-\cs_gset_protected:Npn \cs_set:Npn
- { \tex_long:D \tex_def:D }
-\cs_gset_protected:Npn \cs_set:Npe
- { \tex_long:D \tex_edef:D }
-\tex_global:D \tex_let:D \cs_set:Npx \cs_set:Npe
-\cs_gset_protected:Npn \cs_set_protected_nopar:Npn
- { \tex_protected:D \tex_def:D }
-\cs_gset_protected:Npn \cs_set_protected_nopar:Npe
- { \tex_protected:D \tex_edef:D }
-\tex_global:D \tex_let:D \cs_set_protected_nopar:Npx \cs_set_protected_nopar:Npe
-\cs_gset_protected:Npn \cs_set_protected:Npn
- { \tex_protected:D \tex_long:D \tex_def:D }
-\cs_gset_protected:Npn \cs_set_protected:Npe
- { \tex_protected:D \tex_long:D \tex_edef:D }
-\tex_global:D \tex_let:D \cs_set_protected:Npx \cs_set_protected:Npe
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Selecting tokens}
-%
-% \begin{macrocode}
-%<@@=exp>
-% \end{macrocode}
-%
-% \begin{variable}{\l_@@_internal_tl}
-% Scratch token list variable for \pkg{l3expan}, used by \cs{use:x},
-% used in defining conditionals. We don't use |tl| methods because
-% \pkg{l3basics} is loaded earlier.
-% \begin{macrocode}
-\cs_gset_nopar:Npn \l_@@_internal_tl { }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[EXP]{\use:c}
-% This macro grabs its argument and returns a csname from it.
-% \begin{macrocode}
-\cs_gset:Npn \use:c #1 { \cs:w #1 \cs_end: }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[deprecated]{\use:x}
-% Fully expands its argument and passes it to the input stream. Uses
-% the reserved \cs{l_@@_internal_tl} which we've set up above.
-% \begin{macrocode}
-\cs_gset_protected:Npn \use:x #1
- {
- \cs_set_nopar:Npx \l_@@_internal_tl {#1}
- \l_@@_internal_tl
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%<@@=use>
-% \end{macrocode}
-%
-% \begin{macro}[EXP]{\use:e}
-% \begin{macrocode}
-\cs_gset:Npn \use:e #1 { \tex_expanded:D {#1} }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%<@@=exp>
-% \end{macrocode}
-%
-% \begin{macro}[EXP]{\use:n, \use:nn, \use:nnn, \use:nnnn}
-% These macros grab their arguments and return them back to the input
-% (with outer braces removed).
-% \begin{macrocode}
-\cs_gset:Npn \use:n #1 {#1}
-\cs_gset:Npn \use:nn #1#2 {#1#2}
-\cs_gset:Npn \use:nnn #1#2#3 {#1#2#3}
-\cs_gset:Npn \use:nnnn #1#2#3#4 {#1#2#3#4}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\use_i:nn, \use_ii:nn}
-% The equivalent to \LaTeXe{}'s \tn{@firstoftwo} and \tn{@secondoftwo}.
-% \begin{macrocode}
-\cs_gset:Npn \use_i:nn #1#2 {#1}
-\cs_gset:Npn \use_ii:nn #1#2 {#2}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {
-% \use_i:nnn , \use_ii:nnn , \use_iii:nnn ,
-% \use_i:nnnn, \use_ii:nnnn, \use_iii:nnnn, \use_iv:nnnn ,
-% \use_i:nnnnn, \use_ii:nnnnn, \use_iii:nnnnn, \use_iv:nnnnn ,
-% \use_v:nnnnn ,
-% \use_i:nnnnnn, \use_ii:nnnnnn, \use_iii:nnnnnn, \use_iv:nnnnnn ,
-% \use_v:nnnnnn , \use_vi:nnnnnn ,
-% \use_i:nnnnnnn, \use_ii:nnnnnnn, \use_iii:nnnnnnn, \use_iv:nnnnnnn ,
-% \use_v:nnnnnnn , \use_vi:nnnnnnn , \use_vii:nnnnnnn ,
-% \use_i:nnnnnnnn, \use_ii:nnnnnnnn, \use_iii:nnnnnnnn, \use_iv:nnnnnnnn ,
-% \use_v:nnnnnnnn , \use_vi:nnnnnnnn , \use_vii:nnnnnnnn , \use_viii:nnnnnnnn ,
-% \use_i:nnnnnnnnn, \use_ii:nnnnnnnnn, \use_iii:nnnnnnnnn, \use_iv:nnnnnnnnn ,
-% \use_v:nnnnnnnnn , \use_vi:nnnnnnnnn , \use_vii:nnnnnnnnn , \use_viii:nnnnnnnnn ,
-% \use_ix:nnnnnnnnn
-% }
-% We also need something for picking up arguments from a longer list.
-% \begin{macrocode}
-\cs_gset:Npn \use_i:nnn #1#2#3 {#1}
-\cs_gset:Npn \use_ii:nnn #1#2#3 {#2}
-\cs_gset:Npn \use_iii:nnn #1#2#3 {#3}
-\cs_gset:Npn \use_i:nnnn #1#2#3#4 {#1}
-\cs_gset:Npn \use_ii:nnnn #1#2#3#4 {#2}
-\cs_gset:Npn \use_iii:nnnn #1#2#3#4 {#3}
-\cs_gset:Npn \use_iv:nnnn #1#2#3#4 {#4}
-\cs_gset:Npn \use_i:nnnnn #1#2#3#4#5 {#1}
-\cs_gset:Npn \use_ii:nnnnn #1#2#3#4#5 {#2}
-\cs_gset:Npn \use_iii:nnnnn #1#2#3#4#5 {#3}
-\cs_gset:Npn \use_iv:nnnnn #1#2#3#4#5 {#4}
-\cs_gset:Npn \use_v:nnnnn #1#2#3#4#5 {#5}
-\cs_gset:Npn \use_i:nnnnnn #1#2#3#4#5#6 {#1}
-\cs_gset:Npn \use_ii:nnnnnn #1#2#3#4#5#6 {#2}
-\cs_gset:Npn \use_iii:nnnnnn #1#2#3#4#5#6 {#3}
-\cs_gset:Npn \use_iv:nnnnnn #1#2#3#4#5#6 {#4}
-\cs_gset:Npn \use_v:nnnnnn #1#2#3#4#5#6 {#5}
-\cs_gset:Npn \use_vi:nnnnnn #1#2#3#4#5#6 {#6}
-\cs_gset:Npn \use_i:nnnnnnn #1#2#3#4#5#6#7 {#1}
-\cs_gset:Npn \use_ii:nnnnnnn #1#2#3#4#5#6#7 {#2}
-\cs_gset:Npn \use_iii:nnnnnnn #1#2#3#4#5#6#7 {#3}
-\cs_gset:Npn \use_iv:nnnnnnn #1#2#3#4#5#6#7 {#4}
-\cs_gset:Npn \use_v:nnnnnnn #1#2#3#4#5#6#7 {#5}
-\cs_gset:Npn \use_vi:nnnnnnn #1#2#3#4#5#6#7 {#6}
-\cs_gset:Npn \use_vii:nnnnnnn #1#2#3#4#5#6#7 {#7}
-\cs_gset:Npn \use_i:nnnnnnnn #1#2#3#4#5#6#7#8 {#1}
-\cs_gset:Npn \use_ii:nnnnnnnn #1#2#3#4#5#6#7#8 {#2}
-\cs_gset:Npn \use_iii:nnnnnnnn #1#2#3#4#5#6#7#8 {#3}
-\cs_gset:Npn \use_iv:nnnnnnnn #1#2#3#4#5#6#7#8 {#4}
-\cs_gset:Npn \use_v:nnnnnnnn #1#2#3#4#5#6#7#8 {#5}
-\cs_gset:Npn \use_vi:nnnnnnnn #1#2#3#4#5#6#7#8 {#6}
-\cs_gset:Npn \use_vii:nnnnnnnn #1#2#3#4#5#6#7#8 {#7}
-\cs_gset:Npn \use_viii:nnnnnnnn #1#2#3#4#5#6#7#8 {#8}
-\cs_gset:Npn \use_i:nnnnnnnnn #1#2#3#4#5#6#7#8#9 {#1}
-\cs_gset:Npn \use_ii:nnnnnnnnn #1#2#3#4#5#6#7#8#9 {#2}
-\cs_gset:Npn \use_iii:nnnnnnnnn #1#2#3#4#5#6#7#8#9 {#3}
-\cs_gset:Npn \use_iv:nnnnnnnnn #1#2#3#4#5#6#7#8#9 {#4}
-\cs_gset:Npn \use_v:nnnnnnnnn #1#2#3#4#5#6#7#8#9 {#5}
-\cs_gset:Npn \use_vi:nnnnnnnnn #1#2#3#4#5#6#7#8#9 {#6}
-\cs_gset:Npn \use_vii:nnnnnnnnn #1#2#3#4#5#6#7#8#9 {#7}
-\cs_gset:Npn \use_viii:nnnnnnnnn #1#2#3#4#5#6#7#8#9 {#8}
-\cs_gset:Npn \use_ix:nnnnnnnnn #1#2#3#4#5#6#7#8#9 {#9}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\use_i_ii:nnn}
-% \begin{macrocode}
-\cs_gset:Npn \use_i_ii:nnn #1#2#3 {#1#2}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\use_ii_i:nn}
-% \begin{macrocode}
-\cs_gset:Npn \use_ii_i:nn #1#2 { #2 #1 }
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}[EXP]
-% {
-% \use_none_delimit_by_q_nil:w ,
-% \use_none_delimit_by_q_stop:w ,
-% \use_none_delimit_by_q_recursion_stop:w
-% }
-% Functions that gobble everything until they see either \cs{q_nil},
-% \cs{q_stop}, or \cs{q_recursion_stop}, respectively.
-% \begin{macrocode}
-\cs_gset:Npn \use_none_delimit_by_q_nil:w #1 \q_nil { }
-\cs_gset:Npn \use_none_delimit_by_q_stop:w #1 \q_stop { }
-\cs_gset:Npn \use_none_delimit_by_q_recursion_stop:w #1 \q_recursion_stop { }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {
-% \use_i_delimit_by_q_nil:nw ,
-% \use_i_delimit_by_q_stop:nw ,
-% \use_i_delimit_by_q_recursion_stop:nw
-% }
-% Same as above but execute first argument after gobbling. Very useful
-% when you need to skip the rest of a mapping sequence but want an
-% easy way to control what should be expanded next.
-% \begin{macrocode}
-\cs_gset:Npn \use_i_delimit_by_q_nil:nw #1#2 \q_nil {#1}
-\cs_gset:Npn \use_i_delimit_by_q_stop:nw #1#2 \q_stop {#1}
-\cs_gset:Npn \use_i_delimit_by_q_recursion_stop:nw
- #1#2 \q_recursion_stop {#1}
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Gobbling tokens from input}
-%
-% \begin{macro}[EXP]
-% {
-% \use_none:n,
-% \use_none:nn,
-% \use_none:nnn,
-% \use_none:nnnn,
-% \use_none:nnnnn,
-% \use_none:nnnnnn,
-% \use_none:nnnnnnn,
-% \use_none:nnnnnnnn,
-% \use_none:nnnnnnnnn
-% }
-% To gobble tokens from the input we use a standard naming convention:
-% the number of tokens gobbled is given by the number of |n|'s
-% following the |:| in the name. Although we could define functions to
-% remove ten arguments or more using separate calls of
-% \cs{use_none:nnnnn}, this is very non-intuitive to the programmer
-% who will assume that expanding such a function once takes care
-% of gobbling all the tokens in one go.
-% \begin{macrocode}
-\cs_gset:Npn \use_none:n #1 { }
-\cs_gset:Npn \use_none:nn #1#2 { }
-\cs_gset:Npn \use_none:nnn #1#2#3 { }
-\cs_gset:Npn \use_none:nnnn #1#2#3#4 { }
-\cs_gset:Npn \use_none:nnnnn #1#2#3#4#5 { }
-\cs_gset:Npn \use_none:nnnnnn #1#2#3#4#5#6 { }
-\cs_gset:Npn \use_none:nnnnnnn #1#2#3#4#5#6#7 { }
-\cs_gset:Npn \use_none:nnnnnnnn #1#2#3#4#5#6#7#8 { }
-\cs_gset:Npn \use_none:nnnnnnnnn #1#2#3#4#5#6#7#8#9 { }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Debugging and patching later definitions}
-%
-% \begin{macrocode}
-%<@@=debug>
-% \end{macrocode}
-%
-% \begin{macro}{\__kernel_if_debug:TF}
-% A more meaningful test of whether debugging is enabled than messing
-% up with guards. We can also more easily change the logic in one
-% place then. This is needed primarily for deprecations.
-% \begin{macrocode}
-\cs_gset_protected:Npn \__kernel_if_debug:TF #1#2 {#2}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\debug_on:n, \debug_off:n}
-% Stubs.
-% \begin{macrocode}
-\cs_gset_protected:Npn \debug_on:n #1
- {
- \sys_load_debug:
- \cs_if_exist:NT \@@_all_on:
- { \debug_on:n {#1} }
- }
-\cs_gset_protected:Npn \debug_off:n #1
- {
- \sys_load_debug:
- \cs_if_exist:NT \@@_all_on:
- { \debug_off:n {#1} }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\debug_suspend:, \debug_resume:}
-% \begin{macrocode}
-\cs_gset_protected:Npn \debug_suspend: { }
-\cs_gset_protected:Npn \debug_resume: { }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\__kernel_deprecation_code:nn}
-% \begin{variable}{\g_@@_deprecation_on_tl, \g_@@_deprecation_off_tl}
-% Some commands were more recently deprecated and not yet removed;
-% only make these into errors if the user requests it. This relies on
-% two token lists, filled up in \pkg{l3deprecation}.
-% \begin{macrocode}
-\cs_gset_nopar:Npn \g_@@_deprecation_on_tl { }
-\cs_gset_nopar:Npn \g_@@_deprecation_off_tl { }
-\cs_gset_protected:Npn \__kernel_deprecation_code:nn #1#2
- {
- \tl_gput_right:Nn \g_@@_deprecation_on_tl {#1}
- \tl_gput_right:Nn \g_@@_deprecation_off_tl {#2}
- }
-% \end{macrocode}
-% \end{variable}
-% \end{macro}
-%
-% \subsection{Conditional processing and definitions}
-%
-% \begin{macrocode}
-%<@@=prg>
-% \end{macrocode}
-%
-% Underneath any predicate function (|_p|) or other conditional forms
-% (|TF|, etc.) is a built-in logic saying that it after all of the
-% testing and processing must return the \meta{state} this leaves
-% \TeX{} in. Therefore, a simple user interface could be something like
-% \begin{verbatim}
-% \if_meaning:w #1#2
-% \prg_return_true:
-% \else:
-% \if_meaning:w #1#3
-% \prg_return_true:
-% \else:
-% \prg_return_false:
-% \fi:
-% \fi:
-% \end{verbatim}
-% Usually, a \TeX{} programmer would have to insert a number of
-% \cs{exp_after:wN}s to ensure the state value is returned at exactly
-% the point where the last conditional is finished. However, that
-% obscures the code and forces the \TeX{} programmer to prove that
-% he/she knows the $2^{n}-1$ table. We therefore provide the simpler
-% interface.
-%
-% \begin{macro}[EXP]{\prg_return_true:, \prg_return_false:}
-% The idea here is that \cs{exp:w} expands fully any
-% \cs{else:} and \cs{fi:} that are waiting to be discarded,
-% before reaching the \cs{exp_end:} which leaves an empty expansion.
-% The code can then leave either the first or second argument in the
-% input stream. This means that all of the branching code has to contain
-% at least two tokens: see how the logical tests are actually implemented
-% to see this.
-% \begin{macrocode}
-\cs_gset:Npn \prg_return_true:
- { \exp_after:wN \use_i:nn \exp:w }
-\cs_gset:Npn \prg_return_false:
- { \exp_after:wN \use_ii:nn \exp:w}
-% \end{macrocode}
-% An extended state space could be implemented by including a more
-% elaborate function in place of \cs{use_i:nn}/\cs{use_ii:nn}. Provided
-% two arguments are absorbed then the code would work.
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_use_none_delimit_by_q_recursion_stop:w}
-% Private version of \cs{use_none_delimit_by_q_recursion_stop:w}.
-% \begin{macrocode}
-\cs_gset:Npn \@@_use_none_delimit_by_q_recursion_stop:w
- #1 \q_@@_recursion_stop { }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \prg_set_conditional:Npnn ,
-% \prg_gset_conditional:Npnn ,
-% \prg_new_conditional:Npnn ,
-% \prg_set_protected_conditional:Npnn ,
-% \prg_gset_protected_conditional:Npnn,
-% \prg_new_protected_conditional:Npnn
-% }
-% \begin{macro}{\@@_generate_conditional_parm:NNNpnn}
-% The user functions for the types using parameter text from the
-% programmer. The various functions only differ by which function is
-% used for the assignment. For those |Npnn| type functions, we must
-% grab the parameter text, reading everything up to a left brace
-% before continuing. Then split the base function into name and
-% signature, and feed \Arg{name} \Arg{signature} \meta{boolean}
-% \Arg{set~or~new} \Arg{maybe~protected} \Arg{parameters} |{TF,...}|
-% \Arg{code} to the auxiliary function responsible for defining all
-% conditionals.
-% Note that |e| stands for expandable and |p| for protected.
-% \begin{macrocode}
-\cs_gset_protected:Npn \prg_set_conditional:Npnn
- { \@@_generate_conditional_parm:NNNpnn \cs_set:Npn e }
-\cs_gset_protected:Npn \prg_gset_conditional:Npnn
- { \@@_generate_conditional_parm:NNNpnn \cs_gset:Npn e }
-\cs_gset_protected:Npn \prg_new_conditional:Npnn
- { \@@_generate_conditional_parm:NNNpnn \cs_new:Npn e }
-\cs_gset_protected:Npn \prg_set_protected_conditional:Npnn
- { \@@_generate_conditional_parm:NNNpnn \cs_set_protected:Npn p }
-\cs_gset_protected:Npn \prg_gset_protected_conditional:Npnn
- { \@@_generate_conditional_parm:NNNpnn \cs_gset_protected:Npn p }
-\cs_gset_protected:Npn \prg_new_protected_conditional:Npnn
- { \@@_generate_conditional_parm:NNNpnn \cs_new_protected:Npn p }
-\cs_gset_protected:Npn \@@_generate_conditional_parm:NNNpnn #1#2#3#4#
- {
- \use:e
- {
- \@@_generate_conditional:nnNNNnnn
- \cs_split_function:N #3
- }
- #1 #2 {#4}
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \prg_set_conditional:Nnn ,
-% \prg_gset_conditional:Nnn ,
-% \prg_new_conditional:Nnn ,
-% \prg_set_protected_conditional:Nnn ,
-% \prg_gset_protected_conditional:Nnn,
-% \prg_new_protected_conditional:Nnn
-% }
-% \begin{macro}
-% {
-% \@@_generate_conditional_count:NNNnn ,
-% \@@_generate_conditional_count:nnNNNnn
-% }
-% The user functions for the types automatically inserting the correct
-% parameter text based on the signature. The various functions only
-% differ by which function is used for the assignment. Split the base
-% function into name and signature. The second auxiliary generates
-% the parameter text from the number of letters in the signature.
-% Then feed \Arg{name} \Arg{signature} \meta{boolean} \Arg{set~or~new}
-% \Arg{maybe~protected} \Arg{parameters} |{TF,...}| \Arg{code} to the
-% auxiliary function responsible for defining all conditionals. If
-% the \meta{signature} has more than $9$ letters, the definition is
-% aborted since \TeX{} macros have at most $9$ arguments. The
-% erroneous case where the function name contains no colon is captured
-% later.
-% \begin{macrocode}
-\cs_gset_protected:Npn \prg_set_conditional:Nnn
- { \@@_generate_conditional_count:NNNnn \cs_set:Npn e }
-\cs_gset_protected:Npn \prg_gset_conditional:Nnn
- { \@@_generate_conditional_count:NNNnn \cs_set:Npn e }
-\cs_gset_protected:Npn \prg_new_conditional:Nnn
- { \@@_generate_conditional_count:NNNnn \cs_new:Npn e }
-\cs_gset_protected:Npn \prg_set_protected_conditional:Nnn
- { \@@_generate_conditional_count:NNNnn \cs_set_protected:Npn p }
-\cs_gset_protected:Npn \prg_gset_protected_conditional:Nnn
- { \@@_generate_conditional_count:NNNnn \cs_gset_protected:Npn p }
-\cs_gset_protected:Npn \prg_new_protected_conditional:Nnn
- { \@@_generate_conditional_count:NNNnn \cs_new_protected:Npn p }
-\cs_gset_protected:Npn \@@_generate_conditional_count:NNNnn #1#2#3
- {
- \use:e
- {
- \@@_generate_conditional_count:nnNNNnn
- \cs_split_function:N #3
- }
- #1 #2
- }
-\cs_gset_protected:Npn \@@_generate_conditional_count:nnNNNnn #1#2#3#4#5
- {
- \__kernel_cs_parm_from_arg_count:nnF
- { \@@_generate_conditional:nnNNNnnn {#1} {#2} #3 #4 #5 }
- { \tl_count:n {#2} }
- {
- \msg_error:nnee { kernel } { bad-number-of-arguments }
- { \token_to_str:c { #1 : #2 } }
- { \tl_count:n {#2} }
- \use_none:nn
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \@@_generate_conditional:nnNNNnnn,
-% \@@_generate_conditional:NNnnnnNw,
-% \@@_generate_conditional_test:w,
-% \@@_generate_conditional_fast:nw,
-% }
-% The workhorse here is going through a list of desired forms, \emph{i.e.},
-% |p|, |TF|, |T| and |F|. The first three arguments come from splitting up
-% the base form of the conditional, which gives the name, signature
-% and a boolean to signal whether or not there was a colon in the
-% name. In the absence of a colon, we throw an error and don't define
-% any conditional. The fourth and fifth arguments build up the
-% defining function. The sixth is the parameters to use (possibly
-% empty), the seventh is the list of forms to define, the eighth is the
-% replacement text which we will augment when defining the forms.
-% The use of \cs{tl_to_str:n} makes the later loop more robust.
-%
-% A large number of our low-level conditionals look like \meta{code}
-% \cs{prg_return_true:} \cs{else:} \cs{prg_return_false:} \cs{fi:} so
-% we optimize this special case by calling
-% \cs{@@_generate_conditional_fast:nw} \Arg{code}. This passes
-% \cs{use_i:nn} instead of \cs{use_i_ii:nnn} to functions such as
-% \cs{@@_generate_p_form:wNNnnnnN}.
-% \begin{macrocode}
-\cs_gset_protected:Npn \@@_generate_conditional:nnNNNnnn #1#2#3#4#5#6#7#8
- {
- \if_meaning:w \c_false_bool #3
- \msg_error:nne { kernel } { missing-colon }
- { \token_to_str:c {#1} }
- \exp_after:wN \use_none:nn
- \fi:
- \use:e
- {
- \exp_not:N \@@_generate_conditional:NNnnnnNw
- \exp_not:n { #4 #5 {#1} {#2} {#6} }
- \@@_generate_conditional_test:w
- #8 \s_@@_mark
- \@@_generate_conditional_fast:nw
- \prg_return_true: \else: \prg_return_false: \fi: \s_@@_mark
- \use_none:n
- \exp_not:n { {#8} \use_i_ii:nnn }
- \tl_to_str:n {#7}
- \exp_not:n { , \q_@@_recursion_tail , \q_@@_recursion_stop }
- }
- }
-\cs_gset:Npn \@@_generate_conditional_test:w
- #1 \prg_return_true: \else: \prg_return_false: \fi: \s_@@_mark #2
- { #2 {#1} }
-\cs_gset:Npn \@@_generate_conditional_fast:nw #1#2 \exp_not:n #3
- { \exp_not:n { {#1} \use_i:nn } }
-% \end{macrocode}
-% Looping through the list of desired forms. First are six arguments
-% and seventh is the form. Use the form to call the
-% correct type. If the form does not exist, the \cs{use:c}
-% construction results in \tn{relax}, and the error message is
-% displayed (unless the form is empty, to allow for |{T, , F}|),
-% then \cs{use_none:nnnnnnnn} cleans up. Otherwise, the
-% error message is removed by the variant form.
-% \begin{macrocode}
-\cs_gset_protected:Npn \@@_generate_conditional:NNnnnnNw #1#2#3#4#5#6#7#8 ,
- {
- \if_meaning:w \q_@@_recursion_tail #8
- \exp_after:wN \@@_use_none_delimit_by_q_recursion_stop:w
- \fi:
- \use:c { @@_generate_ #8 _form:wNNnnnnN }
- \tl_if_empty:nF {#8}
- {
- \msg_error:nnee
- { kernel } { conditional-form-unknown }
- {#8} { \token_to_str:c { #3 : #4 } }
- }
- \use_none:nnnnnnnn
- \s_@@_stop
- #1 #2 {#3} {#4} {#5} {#6} #7
- \@@_generate_conditional:NNnnnnNw #1 #2 {#3} {#4} {#5} {#6} #7
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \@@_generate_p_form:wNNnnnnN,
-% \@@_generate_TF_form:wNNnnnnN,
-% \@@_generate_T_form:wNNnnnnN,
-% \@@_generate_F_form:wNNnnnnN
-% }
-% \begin{macro}[EXP]{\@@_p_true:w, \@@_T_true:w, \@@_F_true:w, \@@_TF_true:w}
-% How to generate the various forms. Those functions take the
-% following arguments: 1: junk, 2: \cs{cs_set:Npn} or similar, 3: |p|
-% (for protected conditionals) or |e|, 4: function name, 5: signature,
-% 6: parameter text, 7: replacement (possibly trimmed by
-% \cs{@@_generate_conditional_fast:nw}), 8: \cs{use_i_ii:nnn} or
-% \cs{use_i:nn} (for \enquote{fast} conditionals). Remember that the
-% logic-returning functions expect two arguments to be present after
-% \cs{exp_end:}: notice the construction of the different variants
-% relies on this, and that the |TF| and |F| variants will be slightly
-% faster than the |T| version. The |p| form is only valid for
-% expandable tests, we check for that by making sure that the second
-% argument is empty. For \enquote{fast} conditionals, |#7| has an
-% extra \cs[no-index]{if_\ldots{}}. To optimize a bit further we
-% don't use \cs{exp_after:wN} \cs{use_ii:nnn} and similar but instead use
-% \cs{@@_TF_true:w} and similar to swap out the macro after \cs{fi:}. It would
-% be a tiny bit faster if we directly grabbed the |T| and |F| arguments there,
-% but if those are actually missing, the recovery from the runaway argument
-% would not insert \cs{fi:} back, messing up nesting of conditionals.
-% \begin{macrocode}
-\cs_gset_protected:Npn \@@_generate_p_form:wNNnnnnN
- #1 \s_@@_stop #2#3#4#5#6#7#8
- {
- \if_meaning:w e #3
- \exp_after:wN \use_i:nn
- \else:
- \exp_after:wN \use_ii:nn
- \fi:
- {
- #8
- { \exp_args:Nc #2 { #4 _p: #5 } #6 }
- { { #7 \exp_end: \c_true_bool \c_false_bool } }
- { #7 \@@_p_true:w \fi: \c_false_bool }
- }
- {
- \msg_error:nne { kernel } { protected-predicate }
- { \token_to_str:c { #4 _p: #5 } }
- }
- }
-\cs_gset_protected:Npn \@@_generate_T_form:wNNnnnnN
- #1 \s_@@_stop #2#3#4#5#6#7#8
- {
- #8
- { \exp_args:Nc #2 { #4 : #5 T } #6 }
- { { #7 \exp_end: \use:n \use_none:n } }
- { #7 \@@_T_true:w \fi: \use_none:n }
- }
-\cs_gset_protected:Npn \@@_generate_F_form:wNNnnnnN
- #1 \s_@@_stop #2#3#4#5#6#7#8
- {
- #8
- { \exp_args:Nc #2 { #4 : #5 F } #6 }
- { { #7 \exp_end: { } } }
- { #7 \@@_F_true:w \fi: \use:n }
- }
-\cs_gset_protected:Npn \@@_generate_TF_form:wNNnnnnN
- #1 \s_@@_stop #2#3#4#5#6#7#8
- {
- #8
- { \exp_args:Nc #2 { #4 : #5 TF } #6 }
- { { #7 \exp_end: } }
- { #7 \@@_TF_true:w \fi: \use_ii:nn }
- }
-\cs_gset:Npn \@@_p_true:w \fi: \c_false_bool { \fi: \c_true_bool }
-\cs_gset:Npn \@@_T_true:w \fi: \use_none:n { \fi: \use:n }
-\cs_gset:Npn \@@_F_true:w \fi: \use:n { \fi: \use_none:n }
-\cs_gset:Npn \@@_TF_true:w \fi: \use_ii:nn { \fi: \use_i:nn }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \prg_set_eq_conditional:NNn ,
-% \prg_gset_eq_conditional:NNn,
-% \prg_new_eq_conditional:NNn
-% }
-% \begin{macro}{\@@_set_eq_conditional:NNNn}
-% The setting-equal functions. Split both functions and feed
-% \Arg{name_1} \Arg{signature_1} \meta{boolean_1}
-% \Arg{name_2} \Arg{signature_2} \meta{boolean_2}
-% \meta{copying~function} \meta{conditions} |,| \cs{q_@@_recursion_tail}
-% |,| \cs{q_@@_recursion_stop}
-% to a first auxiliary.
-% \begin{macrocode}
-\cs_gset_protected:Npn \prg_set_eq_conditional:NNn
- { \@@_set_eq_conditional:NNNn \cs_set_eq:cc }
-\cs_gset_protected:Npn \prg_gset_eq_conditional:NNn
- { \@@_set_eq_conditional:NNNn \cs_gset_eq:cc }
-\cs_gset_protected:Npn \prg_new_eq_conditional:NNn
- { \@@_set_eq_conditional:NNNn \cs_new_eq:cc }
-\cs_gset_protected:Npn \@@_set_eq_conditional:NNNn #1#2#3#4
- {
- \use:e
- {
- \exp_not:N \@@_set_eq_conditional:nnNnnNNw
- \cs_split_function:N #2
- \cs_split_function:N #3
- \exp_not:N #1
- \tl_to_str:n {#4}
- \exp_not:n { , \q_@@_recursion_tail , \q_@@_recursion_stop }
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \@@_set_eq_conditional:nnNnnNNw ,
-% \@@_set_eq_conditional_loop:nnnnNw
-% }
-% \begin{macro}[EXP]
-% {
-% \@@_set_eq_conditional_p_form:nnn ,
-% \@@_set_eq_conditional_TF_form:nnn ,
-% \@@_set_eq_conditional_T_form:nnn ,
-% \@@_set_eq_conditional_F_form:nnn ,
-% }
-% Split the function to be defined, and setup a manual clist loop over
-% argument |#6| of the first auxiliary. The second auxiliary receives
-% twice three arguments coming from splitting the function to be
-% defined and the function to copy. Make sure that both functions
-% contained a colon, otherwise we don't know how to build
-% conditionals, hence abort. Call the looping macro, with arguments
-% \Arg{name_1} \Arg{signature_1} \Arg{name_2} \Arg{signature_2}
-% \meta{copying~function} and followed by the comma list. At each
-% step in the loop, make sure that the conditional form we copy is
-% defined, and copy it, otherwise abort.
-% \begin{macrocode}
-\cs_gset_protected:Npn \@@_set_eq_conditional:nnNnnNNw #1#2#3#4#5#6
- {
- \if_meaning:w \c_false_bool #3
- \msg_error:nne { kernel } { missing-colon }
- { \token_to_str:c {#1} }
- \exp_after:wN \@@_use_none_delimit_by_q_recursion_stop:w
- \fi:
- \if_meaning:w \c_false_bool #6
- \msg_error:nne { kernel } { missing-colon }
- { \token_to_str:c {#4} }
- \exp_after:wN \@@_use_none_delimit_by_q_recursion_stop:w
- \fi:
- \@@_set_eq_conditional_loop:nnnnNw {#1} {#2} {#4} {#5}
- }
-\cs_gset_protected:Npn \@@_set_eq_conditional_loop:nnnnNw #1#2#3#4#5#6 ,
- {
- \if_meaning:w \q_@@_recursion_tail #6
- \exp_after:wN \@@_use_none_delimit_by_q_recursion_stop:w
- \fi:
- \use:c { @@_set_eq_conditional_ #6 _form:wNnnnn }
- \tl_if_empty:nF {#6}
- {
- \msg_error:nnee
- { kernel } { conditional-form-unknown }
- {#6} { \token_to_str:c { #1 : #2 } }
- }
- \use_none:nnnnnn
- \s_@@_stop
- #5 {#1} {#2} {#3} {#4}
- \@@_set_eq_conditional_loop:nnnnNw {#1} {#2} {#3} {#4} #5
- }
-\cs_gset:Npn \@@_set_eq_conditional_p_form:wNnnnn #1 \s_@@_stop #2#3#4#5#6
- { #2 { #3 _p : #4 } { #5 _p : #6 } }
-\cs_gset:Npn \@@_set_eq_conditional_TF_form:wNnnnn #1 \s_@@_stop #2#3#4#5#6
- { #2 { #3 : #4 TF } { #5 : #6 TF } }
-\cs_gset:Npn \@@_set_eq_conditional_T_form:wNnnnn #1 \s_@@_stop #2#3#4#5#6
- { #2 { #3 : #4 T } { #5 : #6 T } }
-\cs_gset:Npn \@@_set_eq_conditional_F_form:wNnnnn #1 \s_@@_stop #2#3#4#5#6
- { #2 { #3 : #4 F } { #5 : #6 F } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% All that is left is to define the canonical boolean true and false.
-% I think Michael originated the idea of expandable boolean tests. At
-% first these were supposed to expand into either \texttt{TT} or
-% \texttt{TF} to be tested using \cs{if:w} but this was later changed to
-% |00| and |01|, so they could be used in logical
-% operations. Later again they were changed to being numerical
-% constants with values of $1$ for true and $0$ for false. We need
-% this from the get-go.
-%
-% \begin{variable}{\c_true_bool, \c_false_bool}
-% Here are the canonical boolean values.
-% \begin{macrocode}
-\tex_global:D \tex_chardef:D \c_true_bool = 1 ~
-\tex_global:D \tex_chardef:D \c_false_bool = 0 ~
-% \end{macrocode}
-% \end{variable}
-%
-% \subsection{Dissecting a control sequence}
-%
-% \begin{macrocode}
-%<@@=cs>
-% \end{macrocode}
-%
-% \begin{function}[EXP]{\@@_count_signature:N}
-% \begin{syntax}
-% \cs{@@_count_signature:N} \meta{function}
-% \end{syntax}
-% Splits the \meta{function} into the \meta{name} (\emph{i.e.}~the part
-% before the colon) and the \meta{signature} (\emph{i.e.}~after the colon).
-% The \meta{number} of tokens in the \meta{signature} is then left in
-% the input stream. If there was no \meta{signature} then the result is
-% the marker value $-1$.
-% \end{function}
-%
-% \begin{function}{\@@_tmp:w}
-% Function used for various short-term usages, for instance defining
-% functions whose definition involves tokens which are hard to insert
-% normally (spaces, characters with category other).
-% \end{function}
-%
-% \begin{macro}[EXP]{\cs_to_str:N}
-% \begin{macro}[EXP]{\@@_to_str:N, \@@_to_str:w}
-% This converts a control sequence into the character string of its
-% name, removing the leading escape character. This turns out to be
-% a non-trivial matter as there a different cases:
-% \begin{itemize}
-% \item The usual case of a printable escape character;
-% \item the case of a non-printable escape characters, e.g., when
-% the value of the \tn{escapechar} is negative;
-% \item when the escape character is a space.
-% \end{itemize}
-% One approach to solve this is to test how many tokens result from
-% |\token_to_str:N \a|. If there are two tokens, then the escape
-% character is printable, while if it is non-printable then only
-% one is present.
-%
-% However, there is an additional complication: the control
-% sequence itself may start with a space. Clearly that should \emph{not} be
-% lost in the process of converting to a string. So the approach adopted is
-% a little more intricate still. When the escape character is printable,
-% \verb*|\token_to_str:N \ | yields the escape character itself and a space.
-% The character codes are different, thus the \cs{if:w} test is false,
-% and \TeX{} reads \cs{@@_to_str:N} after turning the following
-% control sequence into a string; this auxiliary removes the escape
-% character, and stops the expansion of the initial \cs{tex_romannumeral:D}.
-% The second case is that the escape character is not printable. Then
-% the \cs{if:w} test is unfinished after reading a the space from
-% \verb*|\token_to_str:N \ |, and the auxiliary \cs{@@_to_str:w}
-% is expanded, feeding |-| as a second character for the test;
-% the test is false, and \TeX{} skips to \cs{fi:}, then performs
-% \cs{token_to_str:N}, and stops the \cs{tex_romannumeral:D} with \cs{c_zero_int}.
-% The last case is that the escape character is itself a space. In this
-% case, the \cs{if:w} test is true, and the auxiliary \cs{@@_to_str:w}
-% comes into play, inserting |-\int_value:w|, which expands \cs{c_zero_int}
-% to the character |0|. The initial \cs{tex_romannumeral:D} then sees
-% |0|, which is not a terminated number, followed by the escape character,
-% a space, which is removed, terminating the expansion of
-% \cs{tex_romannumeral:D}.
-% In all three cases, \cs{cs_to_str:N} takes two expansion steps
-% to be fully expanded.
-% \begin{macrocode}
-\cs_gset:Npn \cs_to_str:N
- {
-% \end{macrocode}
-% We implement the expansion scheme using \cs{tex_romannumeral:D}
-% terminating it with \cs{c_zero_int} rather than using \cs{exp:w} and
-% \cs{exp_end:} as we normally do. The reason is that the code
-% heavily depends on terminating the expansion with \cs{c_zero_int} so
-% we make this dependency explicit.
-% \begin{macrocode}
- \tex_romannumeral:D
- \if:w \token_to_str:N \ \@@_to_str:w \fi:
- \exp_after:wN \@@_to_str:N \token_to_str:N
- }
-\cs_gset:Npn \@@_to_str:N #1 { \c_zero_int }
-\cs_gset:Npn \@@_to_str:w #1 \@@_to_str:N
- { - \int_value:w \fi: \exp_after:wN \c_zero_int }
-% \end{macrocode}
-% If speed is a concern we could use \tn{csstring} in \LuaTeX{}. For
-% the empty csname that primitive gives an empty result while the
-% current \cs{cs_to_str:N} gives incorrect results in all engines
-% (this is impossible to fix without huge performance hit).
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\cs_split_function:N}
-% \begin{macro}[EXP]
-% {\@@_split_function_auxi:w, \@@_split_function_auxii:w}
-% This function takes a function name and splits it into name with
-% the escape char removed and argument specification. In addition to
-% this, a third argument, a boolean \meta{true} or \meta{false} is
-% returned with \meta{true} for when there is a colon in the function
-% and \meta{false} if there is not.
-%
-% First ensure that we actually get a properly evaluated string by
-% expanding \cs{cs_to_str:N} twice. If the function contained a
-% colon, the auxiliary takes as |#1| the function name, delimited by
-% the first colon, then the signature |#2|, delimited by \cs{s_@@_mark},
-% then \cs{c_true_bool} as |#3|, and |#4| cleans up until \cs{s_@@_stop}.
-% Otherwise, the |#1| contains the function name and \cs{s_@@_mark}
-% \cs{c_true_bool}, |#2| is empty, |#3| is \cs{c_false_bool}, and |#4|
-% cleans up. The second
-% auxiliary trims the trailing \cs{s_@@_mark} from the function name if
-% present (that is, if the original function had no colon).
-% \begin{macrocode}
-\cs_gset_protected:Npn \@@_tmp:w #1
- {
- \cs_gset:Npn \cs_split_function:N ##1
- {
- \exp_after:wN \exp_after:wN \exp_after:wN
- \@@_split_function_auxi:w
- \cs_to_str:N ##1 \s_@@_mark \c_true_bool
- #1 \s_@@_mark \c_false_bool \s_@@_stop
- }
- \cs_gset:Npn \@@_split_function_auxi:w
- ##1 #1 ##2 \s_@@_mark ##3##4 \s_@@_stop
- { \@@_split_function_auxii:w ##1 \s_@@_mark \s_@@_stop {##2} ##3 }
- \cs_gset:Npn \@@_split_function_auxii:w ##1 \s_@@_mark ##2 \s_@@_stop
- { {##1} }
- }
-\exp_after:wN \@@_tmp:w \token_to_str:N :
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Exist or free}
-%
-% A control sequence is said to \emph{exist} (to be used) if has an entry in
-% the hash table and its meaning is different from the primitive
-% \tn{relax} token. A control sequence is said to be \emph{free}
-% (to be defined) if it does not already exist.
-%
-% \begin{macro}[pTF, EXP]{\cs_if_exist:N, \cs_if_exist:c}
-% \begin{macro}{\@@_if_exist_c_aux:,\@@_if_exist_c_aux:w}
-% Two versions for checking existence. For the |N| form we firstly
-% check for \cs{scan_stop:} and then if it is in the hash
-% table. There is no problem when inputting something like \cs{else:}
-% or \cs{fi:} as \TeX{} will only ever skip input in case the token
-% tested against is \cs{scan_stop:}.
-%
-% In both the |N| and |c| form we use the way \cs{prg_set_conditional:Npnn}
-% optimizes the conditionals to negate the tests using \cs{else:} (the
-% \cs{else:} in the top level functions will be removed by the optimization,
-% and this usage of \cs{else:} will be fine).
-% \begin{macrocode}
-\prg_gset_conditional:Npnn \cs_if_exist:N #1 { p , T , F , TF }
- {
- \if_meaning:w #1 \scan_stop:
- \use_i:nnnn
- \else:
- \fi:
- \if_cs_exist:N #1
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-% \end{macrocode}
-% For the |c| form we firstly check if it is in the hash table and
-% then for \cs{scan_stop:} so that we do not add it to the hash table
-% unless it was already there. Here we have to be careful as the text
-% to be skipped if the first test is false may contain tokens that
-% disturb the scanner. Therefore, we ensure that the second test is
-% performed after the first one has concluded completely.
-% \begin{macrocode}
-\cs_if_exist:NTF \tex_lastnamedcs:D
- {
- \prg_gset_conditional:Npnn \cs_if_exist:c #1 { p , T , F , TF }
- {
- \if_cs_exist:w #1 \cs_end:
- \@@_if_exist_c_aux:
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
- \cs_gset:Npn \@@_if_exist_c_aux:
- { \fi: \exp_after:wN \if_meaning:w \tex_lastnamedcs:D \scan_stop: \else: }
- }
- {
- \prg_gset_conditional:Npnn \cs_if_exist:c #1 { p , T , F , TF }
- {
- \if_cs_exist:w #1 \cs_end:
- \@@_if_exist_c_aux:w
- \fi:
- \use_none:n {#1}
- \if_false:
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
- \cs_gset:Npn \@@_if_exist_c_aux:w \fi: \use_none:n #1 \if_false:
- { \fi: \exp_after:wN \if_meaning:w \cs:w #1 \cs_end: \scan_stop: \else: }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[pTF, EXP]{\cs_if_free:N, \cs_if_free:c}
-% The logical reversal of the above.
-% \begin{macrocode}
-\prg_gset_conditional:Npnn \cs_if_free:N #1 { p , T , F , TF }
- {
- \if_cs_exist:N #1
- \else:
- \use_none:nnnn
- \fi:
- \if_meaning:w #1 \scan_stop:
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-\cs_if_exist:NTF \tex_lastnamedcs:D
- {
- \prg_gset_conditional:Npnn \cs_if_free:c #1 { p , T , F , TF }
- {
- \if_cs_exist:w #1 \cs_end:
- \@@_if_free_c_aux:w
- \fi:
- \if_true:
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
- \cs_gset:Npn \@@_if_free_c_aux:w \fi: \if_true:
- { \fi: \exp_after:wN \if_meaning:w \tex_lastnamedcs:D \scan_stop: }
- }
- {
- \prg_gset_conditional:Npnn \cs_if_free:c #1 { p , T , F , TF }
- {
- \if_cs_exist:w #1 \cs_end:
- \@@_if_free_c_aux:w
- \fi:
- \use_none:n {#1}
- \if_true:
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
- \cs_gset:Npn \@@_if_free_c_aux:w \fi: \use_none:n #1 \if_true:
- { \fi: \exp_after:wN \if_meaning:w \cs:w #1 \cs_end: \scan_stop: }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP,noTF,added=2011-10-10]
-% {\cs_if_exist_use:N, \cs_if_exist_use:c}
-% \begin{macro}{\@@_if_exist_use_aux:w, \@@_if_exist_use_aux:Nnn}
-% The \cs[index=cs_if_exist_use:N]{cs_if_exist_use:\ldots{}}
-% functions cannot be implemented
-% as conditionals because the true branch must leave both the control
-% sequence itself and the true code in the input stream.
-% For the \texttt{c} variants, we are careful not to put the control
-% sequence in the hash table if it does not exist.
-% If available we use the \tn{lastnamedcs} primitive.
-% \begin{macrocode}
-\cs_gset:Npn \cs_if_exist_use:NTF #1#2
- { \cs_if_exist:NTF #1 { #1 #2 } }
-\cs_gset:Npn \cs_if_exist_use:NF #1
- { \cs_if_exist:NTF #1 #1 }
-\cs_gset:Npn \cs_if_exist_use:NT #1 #2
- { \cs_if_exist:NT #1 { #1 #2 } }
-\cs_gset:Npn \cs_if_exist_use:N #1
- { \cs_if_exist:NT #1 #1 }
-\cs_if_exist:NTF \tex_lastnamedcs:D
- {
- \cs_gset:Npn \cs_if_exist_use:cTF #1
- {
- \if_cs_exist:w #1 \cs_end:
- \@@_if_exist_use_aux:w
- \fi:
- \use_ii:nn
- }
- \cs_gset:Npn \@@_if_exist_use_aux:w \fi: \use_ii:nn
- { \fi: \exp_after:wN \@@_if_exist_use_aux:Nnn \tex_lastnamedcs:D }
- }
- {
- \cs_gset:Npn \cs_if_exist_use:cTF #1
- {
- \if_cs_exist:w #1 \cs_end:
- \@@_if_exist_use_aux:w
- \fi:
- \use_iii:nnn {#1}
- }
- \cs_gset:Npn \@@_if_exist_use_aux:w \fi: \use_iii:nnn #1
- { \fi: \exp_after:wN \@@_if_exist_use_aux:Nnn \cs:w #1 \cs_end: }
- }
-\cs_gset:Npn \@@_if_exist_use_aux:Nnn #1#2
- {
- \if_meaning:w #1 \scan_stop:
- \exp_after:wN \use_iii:nnn
- \fi:
- \use_i:nn { #1 #2 }
- }
-\cs_gset:Npn \cs_if_exist_use:cF #1
- { \cs_if_exist_use:cTF {#1} {} }
-\cs_gset:Npn \cs_if_exist_use:cT #1#2
- { \cs_if_exist_use:cTF {#1} {#2} {} }
-\cs_gset:Npn \cs_if_exist_use:c #1
- { \cs_if_exist_use:cTF {#1} {} {} }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Preliminaries for new functions}
-%
-% We provide two kinds of functions that can be used to define
-% control sequences. On the one hand we have functions that check
-% if their argument doesn't already exist, they are called
-% |\..._new|. The second type of defining functions doesn't check
-% if the argument is already defined.
-%
-% Before we can define them, we need some auxiliary macros that allow
-% us to generate error messages. The next few definitions here are
-% only temporary, they will be redefined later on.
-%
-% \begin{macro}[documented-as = \msg_error:nnnn]
-% {\msg_error:nnee, \msg_error:nne, \msg_error:nn}
-% If an internal error occurs before \LaTeX3 has loaded \pkg{l3msg} then
-% the code should issue a usable if terse error message and halt. This
-% can only happen if a coding error is made by the team, so this is
-% a reasonable response. Setting the \tn{newlinechar} is needed, to
-% turn |^^J| into a proper line break in plain \TeX{}.
-% \begin{macrocode}
-\cs_gset_protected:Npn \msg_error:nnee #1#2#3#4
- {
- \tex_newlinechar:D = `\^^J \scan_stop:
- \tex_errmessage:D
- {
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!~! ^^J
- Argh,~internal~LaTeX3~error! ^^J ^^J
- Module ~ #1 , ~ message~name~"#2": ^^J
- Arguments~'#3'~and~'#4' ^^J ^^J
- This~is~one~for~The~LaTeX3~Project:~bailing~out
- }
- \tex_end:D
- }
-\cs_gset_protected:Npn \msg_error:nne #1#2#3
- { \msg_error:nnee {#1} {#2} {#3} { } }
-\cs_gset_protected:Npn \msg_error:nn #1#2
- { \msg_error:nnee {#1} {#2} { } { } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\msg_line_context:}
-% Another one from \pkg{l3msg} which will be altered later.
-% \begin{macrocode}
-\cs_gset:Npn \msg_line_context:
- { on~line~ \tex_the:D \tex_inputlineno:D }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[documented-as=\iow_log:n]{\iow_log:e, \iow_term:e}
-% We define a routine to write only to the log file. And a
-% similar one for writing to both the log file and the terminal.
-% These will be redefined later by \pkg{l3file}.
-% \begin{macrocode}
-\cs_gset_protected:Npn \iow_log:e
- { \tex_immediate:D \tex_write:D -1 }
-\cs_gset_protected:Npn \iow_term:e
- { \tex_immediate:D \tex_write:D 16 }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\__kernel_chk_if_free_cs:N, \__kernel_chk_if_free_cs:c}
-% This command is called by \cs{cs_new_nopar:Npn} and \cs{cs_new_eq:NN}
-% \emph{etc.}\
-% to make sure that the argument sequence is not already in use. If
-% it is, an error is signalled. It checks if \meta{csname} is
-% undefined or \cs{scan_stop:}. Otherwise an error message is
-% issued. We have to make sure we don't put the argument into the
-% conditional processing since it may be an |\if...| type function!
-% \begin{macrocode}
-\cs_gset_protected:Npn \__kernel_chk_if_free_cs:N #1
- {
- \cs_if_free:NF #1
- {
- \msg_error:nnee { kernel } { command-already-defined }
- { \token_to_str:N #1 } { \token_to_meaning:N #1 }
- }
- }
-\cs_gset_protected:Npn \__kernel_chk_if_free_cs:c
- { \exp_args:Nc \__kernel_chk_if_free_cs:N }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Defining new functions}
-%
-% \begin{macrocode}
-%<@@=cs>
-% \end{macrocode}
-%
-% \begin{macro}
-% {
-% \cs_new_nopar:Npn , \cs_new_nopar:Npe , \cs_new_nopar:Npx ,
-% \cs_new:Npn , \cs_new:Npe , \cs_new:Npx ,
-% \cs_new_protected_nopar:Npn , \cs_new_protected_nopar:Npe , \cs_new_protected_nopar:Npx ,
-% \cs_new_protected:Npn , \cs_new_protected:Npe , \cs_new_protected:Npx
-% }
-% \begin{macro}{\@@_tmp:w}
-% Function which check that the control sequence is free before
-% defining it.
-% \begin{macrocode}
-\cs_set:Npn \@@_tmp:w #1#2
- {
- \cs_gset_protected:Npn #1 ##1
- {
- \__kernel_chk_if_free_cs:N ##1
- #2 ##1
- }
- }
-\@@_tmp:w \cs_new_nopar:Npn \cs_gset_nopar:Npn
-\@@_tmp:w \cs_new_nopar:Npe \cs_gset_nopar:Npe
-\@@_tmp:w \cs_new_nopar:Npx \cs_gset_nopar:Npx
-\@@_tmp:w \cs_new:Npn \cs_gset:Npn
-\@@_tmp:w \cs_new:Npe \cs_gset:Npe
-\@@_tmp:w \cs_new:Npx \cs_gset:Npx
-\@@_tmp:w \cs_new_protected_nopar:Npn \cs_gset_protected_nopar:Npn
-\@@_tmp:w \cs_new_protected_nopar:Npe \cs_gset_protected_nopar:Npe
-\@@_tmp:w \cs_new_protected_nopar:Npx \cs_gset_protected_nopar:Npx
-\@@_tmp:w \cs_new_protected:Npn \cs_gset_protected:Npn
-\@@_tmp:w \cs_new_protected:Npe \cs_gset_protected:Npe
-\@@_tmp:w \cs_new_protected:Npx \cs_gset_protected:Npx
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[documented-as=\cs_set_nopar:Npn]
-% {
-% \cs_set_nopar:cpn , \cs_set_nopar:cpe , \cs_set_nopar:cpx ,
-% \cs_gset_nopar:cpn , \cs_gset_nopar:cpe , \cs_gset_nopar:cpx ,
-% \cs_new_nopar:cpn , \cs_new_nopar:cpe , \cs_new_nopar:cpx
-% }
-% Like \cs{cs_set_nopar:Npn} and \cs{cs_new_nopar:Npn}, except that the
-% first argument consists of the sequence of characters that should
-% be used to form the name of the desired control sequence (the |c|
-% stands for csname argument, see the expansion module). Global
-% versions are also provided.
-%
-% \cs{cs_set_nopar:cpn}\meta{string}\meta{rep-text} turns \meta{string}
-% into a csname and then assigns \meta{rep-text} to it by using
-% \cs{cs_set_nopar:Npn}. This means that there might be a parameter
-% string between the two arguments.
-% \begin{macrocode}
-\cs_set:Npn \@@_tmp:w #1#2
- { \cs_new_protected_nopar:Npn #1 { \exp_args:Nc #2 } }
-\@@_tmp:w \cs_set_nopar:cpn \cs_set_nopar:Npn
-\@@_tmp:w \cs_set_nopar:cpe \cs_set_nopar:Npe
-\@@_tmp:w \cs_set_nopar:cpx \cs_set_nopar:Npx
-\@@_tmp:w \cs_gset_nopar:cpn \cs_gset_nopar:Npn
-\@@_tmp:w \cs_gset_nopar:cpe \cs_gset_nopar:Npe
-\@@_tmp:w \cs_gset_nopar:cpx \cs_gset_nopar:Npx
-\@@_tmp:w \cs_new_nopar:cpn \cs_new_nopar:Npn
-\@@_tmp:w \cs_new_nopar:cpe \cs_new_nopar:Npe
-\@@_tmp:w \cs_new_nopar:cpx \cs_new_nopar:Npx
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[documented-as=\cs_set:Npn]
-% {
-% \cs_set:cpn , \cs_set:cpe , \cs_set:cpx ,
-% \cs_gset:cpn , \cs_gset:cpe , \cs_gset:cpx ,
-% \cs_new:cpn , \cs_new:cpe , \cs_new:cpx
-% }
-% Variants of the \cs{cs_set:Npn} versions which make a csname out
-% of the first arguments. We may also do this globally.
-% \begin{macrocode}
-\@@_tmp:w \cs_set:cpn \cs_set:Npn
-\@@_tmp:w \cs_set:cpe \cs_set:Npe
-\@@_tmp:w \cs_set:cpx \cs_set:Npx
-\@@_tmp:w \cs_gset:cpn \cs_gset:Npn
-\@@_tmp:w \cs_gset:cpe \cs_gset:Npe
-\@@_tmp:w \cs_gset:cpx \cs_gset:Npx
-\@@_tmp:w \cs_new:cpn \cs_new:Npn
-\@@_tmp:w \cs_new:cpe \cs_new:Npe
-\@@_tmp:w \cs_new:cpx \cs_new:Npx
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[documented-as=\cs_set_protected_nopar:Npn]
-% {
-% \cs_set_protected_nopar:cpn , \cs_set_protected_nopar:cpe , \cs_set_protected_nopar:cpx ,
-% \cs_gset_protected_nopar:cpn , \cs_gset_protected_nopar:cpe , \cs_gset_protected_nopar:cpx ,
-% \cs_new_protected_nopar:cpn , \cs_new_protected_nopar:cpe , \cs_new_protected_nopar:cpx
-% }
-% Variants of the \cs{cs_set_protected_nopar:Npn} versions which make
-% a csname out of the first arguments. We may also do this globally.
-% \begin{macrocode}
-\@@_tmp:w \cs_set_protected_nopar:cpn \cs_set_protected_nopar:Npn
-\@@_tmp:w \cs_set_protected_nopar:cpe \cs_set_protected_nopar:Npe
-\@@_tmp:w \cs_set_protected_nopar:cpx \cs_set_protected_nopar:Npx
-\@@_tmp:w \cs_gset_protected_nopar:cpn \cs_gset_protected_nopar:Npn
-\@@_tmp:w \cs_gset_protected_nopar:cpe \cs_gset_protected_nopar:Npe
-\@@_tmp:w \cs_gset_protected_nopar:cpx \cs_gset_protected_nopar:Npx
-\@@_tmp:w \cs_new_protected_nopar:cpn \cs_new_protected_nopar:Npn
-\@@_tmp:w \cs_new_protected_nopar:cpe \cs_new_protected_nopar:Npe
-\@@_tmp:w \cs_new_protected_nopar:cpx \cs_new_protected_nopar:Npx
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[documented-as=\cs_set_protected:Npn]
-% {
-% \cs_set_protected:cpn , \cs_set_protected:cpe , \cs_set_protected:cpx ,
-% \cs_gset_protected:cpn , \cs_gset_protected:cpe , \cs_gset_protected:cpx ,
-% \cs_new_protected:cpn , \cs_new_protected:cpe , \cs_new_protected:cpx
-% }
-% Variants of the \cs{cs_set_protected:Npn} versions which make a csname
-% out of the first arguments. We may also do this globally.
-% \begin{macrocode}
-\@@_tmp:w \cs_set_protected:cpn \cs_set_protected:Npn
-\@@_tmp:w \cs_set_protected:cpe \cs_set_protected:Npe
-\@@_tmp:w \cs_set_protected:cpx \cs_set_protected:Npx
-\@@_tmp:w \cs_gset_protected:cpn \cs_gset_protected:Npn
-\@@_tmp:w \cs_gset_protected:cpe \cs_gset_protected:Npe
-\@@_tmp:w \cs_gset_protected:cpx \cs_gset_protected:Npx
-\@@_tmp:w \cs_new_protected:cpn \cs_new_protected:Npn
-\@@_tmp:w \cs_new_protected:cpe \cs_new_protected:Npe
-\@@_tmp:w \cs_new_protected:cpx \cs_new_protected:Npx
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Copying definitions}
-%
-% \begin{macro}
-% {
-% \cs_set_eq:NN , \cs_set_eq:cN , \cs_set_eq:Nc , \cs_set_eq:cc ,
-% \cs_gset_eq:NN , \cs_gset_eq:cN , \cs_gset_eq:Nc , \cs_gset_eq:cc ,
-% \cs_new_eq:NN , \cs_new_eq:cN , \cs_new_eq:Nc , \cs_new_eq:cc
-% }
-% These macros allow us to copy the definition of a control sequence
-% to another control sequence.
-%
-% The |=| sign allows us to define funny char tokens like |=| itself
-% or \verb*| | with this function. For the definition of
-% |\c_space_char{~}| to work we need the |~| after the |=|.
-%
-% \cs{cs_set_eq:NN} is long to avoid problems with a literal argument
-% of \cs{par}. While \cs{cs_new_eq:NN} will probably never be correct
-% with a first argument of \cs{par}, define it long in order to throw
-% an \enquote{already defined} error rather than
-% \enquote{runaway argument}.
-% \begin{macrocode}
-\cs_new_protected:Npn \cs_set_eq:NN #1 { \tex_let:D #1 =~ }
-\cs_new_protected:Npn \cs_set_eq:cN { \exp_args:Nc \cs_set_eq:NN }
-\cs_new_protected:Npn \cs_set_eq:Nc { \exp_args:NNc \cs_set_eq:NN }
-\cs_new_protected:Npn \cs_set_eq:cc { \exp_args:Ncc \cs_set_eq:NN }
-\cs_new_protected:Npn \cs_gset_eq:NN { \tex_global:D \cs_set_eq:NN }
-\cs_new_protected:Npn \cs_gset_eq:Nc { \exp_args:NNc \cs_gset_eq:NN }
-\cs_new_protected:Npn \cs_gset_eq:cN { \exp_args:Nc \cs_gset_eq:NN }
-\cs_new_protected:Npn \cs_gset_eq:cc { \exp_args:Ncc \cs_gset_eq:NN }
-\cs_new_protected:Npn \cs_new_eq:NN #1
- {
- \__kernel_chk_if_free_cs:N #1
- \tex_global:D \cs_set_eq:NN #1
- }
-\cs_new_protected:Npn \cs_new_eq:cN { \exp_args:Nc \cs_new_eq:NN }
-\cs_new_protected:Npn \cs_new_eq:Nc { \exp_args:NNc \cs_new_eq:NN }
-\cs_new_protected:Npn \cs_new_eq:cc { \exp_args:Ncc \cs_new_eq:NN }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Undefining functions}
-%
-% \begin{macro}{\cs_undefine:N, \cs_undefine:c}
-% The following function is used to free the main memory from the
-% definition of some function that isn't in use any longer.
-% The \texttt{c} variant is careful not to add the control sequence
-% to the hash table if it isn't there yet, and it also avoids nesting
-% \TeX{} conditionals in case |#1| is unbalanced in this matter.
-% We optimize the case where the command exists by reducing as much as
-% possible the tokens in the conditional.
-% \begin{macrocode}
-\cs_new_protected:Npn \cs_undefine:N #1
- { \cs_gset_eq:NN #1 \tex_undefined:D }
-\cs_new_protected:Npn \cs_undefine:c #1
- {
- \if_cs_exist:w #1 \cs_end:
- \else:
- \use_i:nnnn
- \fi:
- \exp_args:Nc \cs_undefine:N {#1}
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Generating parameter text from argument count}
-%
-% \begin{macrocode}
-%<@@=cs>
-% \end{macrocode}
-%
-% \begin{macro}{\__kernel_cs_parm_from_arg_count:nnF}
-% \begin{macro}{\@@_parm_from_arg_count_test:nnF}
-% \LaTeX3 provides shorthands to define control sequences and
-% conditionals with a simple parameter text, derived directly from the
-% signature, or more generally from knowing the number of arguments,
-% between~$0$ and~$9$. This function expands to its first argument,
-% untouched, followed by a brace group containing the parameter text
-% |{#|$1$\ldots{}|#|$n$|}|, where $n$ is the result of evaluating the
-% second argument (as described in \cs{int_eval:n}). If the second
-% argument gives a result outside the range $[0,9]$, the third
-% argument is returned instead, normally an error message. Some of
-% the functions use here are not defined yet, but will be defined
-% before this function is called.
-% \begin{macrocode}
-\cs_new_protected:Npn \__kernel_cs_parm_from_arg_count:nnF #1#2
- {
- \exp_args:Ne \@@_parm_from_arg_count_test:nnF
- {
- \exp_after:wN \exp_not:n
- \if_case:w \int_eval:n {#2}
- { }
- \or: { ##1 }
- \or: { ##1##2 }
- \or: { ##1##2##3 }
- \or: { ##1##2##3##4 }
- \or: { ##1##2##3##4##5 }
- \or: { ##1##2##3##4##5##6 }
- \or: { ##1##2##3##4##5##6##7 }
- \or: { ##1##2##3##4##5##6##7##8 }
- \or: { ##1##2##3##4##5##6##7##8##9 }
- \else: { \c_false_bool }
- \fi:
- }
- {#1}
- }
-\cs_new_protected:Npn \@@_parm_from_arg_count_test:nnF #1#2
- {
- \if_meaning:w \c_false_bool #1
- \exp_after:wN \use_ii:nn
- \else:
- \exp_after:wN \use_i:nn
- \fi:
- { #2 {#1} }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Defining functions from a given number of arguments}
-%
-% \begin{macrocode}
-%<@@=cs>
-% \end{macrocode}
-%
-% \begin{macro}[EXP]{\@@_count_signature:N, \@@_count_signature:c}
-% \begin{macro}[EXP]{\@@_count_signature:n}
-% \begin{macro}[EXP]{\@@_count_signature:nnN}
-% Counting the number of tokens in the signature, \emph{i.e.}, the
-% number of arguments the function should take. Since this is not
-% used in any time-critical function, we simply use \cs{tl_count:n} if
-% there is a signature, otherwise $-1$ arguments to signal an error.
-% We need a variant form right away.
-% \begin{macrocode}
-\cs_new:Npn \@@_count_signature:N #1
- { \exp_args:Nf \@@_count_signature:n { \cs_split_function:N #1 } }
-\cs_new:Npn \@@_count_signature:n #1
- { \int_eval:n { \@@_count_signature:nnN #1 } }
-\cs_new:Npn \@@_count_signature:nnN #1#2#3
- {
- \if_meaning:w \c_true_bool #3
- \tl_count:n {#2}
- \else:
- -1
- \fi:
- }
-\cs_new:Npn \@@_count_signature:c
- { \exp_args:Nc \@@_count_signature:N }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \cs_generate_from_arg_count:NNnn,
-% \cs_generate_from_arg_count:cNnn,
-% \cs_generate_from_arg_count:Ncnn
-% }
-% We provide a constructor function for defining functions with a
-% given number of arguments. For this we need to choose the correct
-% parameter text and then use that when defining. Since \TeX{}
-% supports from zero to nine arguments, we use a simple switch to
-% choose the correct parameter text, ensuring the result is returned
-% after finishing the conditional. If it is not between zero and
-% nine, we throw an error.
-%
-% 1: function to define, 2: with what to define it, 3: the number of
-% args it requires and 4: the replacement text
-% \begin{macrocode}
-\cs_new_protected:Npn \cs_generate_from_arg_count:NNnn #1#2#3#4
- {
- \__kernel_cs_parm_from_arg_count:nnF { \use:nnn #2 #1 } {#3}
- {
- \msg_error:nnee { kernel } { bad-number-of-arguments }
- { \token_to_str:N #1 } { \int_eval:n {#3} }
- \use_none:n
- }
- {#4}
- }
-% \end{macrocode}
-% A variant form we need right away, plus one which is used elsewhere but
-% which is most logically created here.
-% \begin{macrocode}
-\cs_new_protected:Npn \cs_generate_from_arg_count:cNnn
- { \exp_args:Nc \cs_generate_from_arg_count:NNnn }
-\cs_new_protected:Npn \cs_generate_from_arg_count:Ncnn
- { \exp_args:NNc \cs_generate_from_arg_count:NNnn }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Using the signature to define functions}
-%
-% \begin{macrocode}
-%<@@=cs>
-% \end{macrocode}
-%
-% We can now combine some of the tools we have to provide a simple
-% interface for defining functions, where the number of arguments is
-% read from the signature. For instance,
-% |\cs_set:Nn \foo_bar:nn {#1,#2}|.
-%
-% \begin{macro}
-% {
-% \cs_set:Nn , \cs_set:Ne , \cs_set:Nx ,
-% \cs_set_nopar:Nn , \cs_set_nopar:Ne , \cs_set_nopar:Nx ,
-% \cs_set_protected:Nn , \cs_set_protected:Ne , \cs_set_protected:Nx ,
-% \cs_set_protected_nopar:Nn , \cs_set_protected_nopar:Ne , \cs_set_protected_nopar:Nx ,
-% \cs_gset:Nn , \cs_gset:Ne , \cs_gset:Nx ,
-% \cs_gset_nopar:Nn , \cs_gset_nopar:Ne , \cs_gset_nopar:Nx ,
-% \cs_gset_protected:Nn , \cs_gset_protected:Ne , \cs_gset_protected:Nx ,
-% \cs_gset_protected_nopar:Nn , \cs_gset_protected_nopar:Ne , \cs_gset_protected_nopar:Nx ,
-% \cs_new:Nn , \cs_new:Ne , \cs_new:Nx ,
-% \cs_new_nopar:Nn , \cs_new_nopar:Ne , \cs_new_nopar:Nx ,
-% \cs_new_protected:Nn , \cs_new_protected:Ne , \cs_new_protected:Nx ,
-% \cs_new_protected_nopar:Nn , \cs_new_protected_nopar:Ne , \cs_new_protected_nopar:Nx ,
-% }
-% We want to define \cs{cs_set:Nn} as
-% \begin{verbatim}
-% \cs_set_protected:Npn \cs_set:Nn #1#2
-% {
-% \cs_generate_from_arg_count:NNnn #1 \cs_set:Npn
-% { \@@_count_signature:N #1 } {#2}
-% }
-% \end{verbatim}
-% In short, to define \cs{cs_set:Nn} we need just use \cs{cs_set:Npn},
-% everything else is the same for each variant. Therefore, we can
-% make it simpler by temporarily defining a function to do this for
-% us.
-% \begin{macrocode}
-\cs_set:Npn \@@_tmp:w #1#2#3
- {
- \cs_new_protected:cpx { cs_ #1 : #2 }
- {
- \exp_not:N \@@_generate_from_signature:NNn
- \exp_after:wN \exp_not:N \cs:w cs_ #1 : #3 \cs_end:
- }
- }
-\cs_new_protected:Npn \@@_generate_from_signature:NNn #1#2
- {
- \use:e
- {
- \@@_generate_from_signature:nnNNNn
- \cs_split_function:N #2
- }
- #1 #2
- }
-\cs_new_protected:Npn \@@_generate_from_signature:nnNNNn #1#2#3#4#5#6
- {
- \bool_if:NTF #3
- {
- \cs_set_nopar:Npx \@@_tmp:w
- { \tl_map_function:nN {#2} \@@_generate_from_signature:n }
- \tl_if_empty:oF \@@_tmp:w
- {
- \msg_error:nneee { kernel } { non-base-function }
- { \token_to_str:N #5 } {#2} { \@@_tmp:w }
- }
- \cs_generate_from_arg_count:NNnn
- #5 #4 { \tl_count:n {#2} } {#6}
- }
- {
- \msg_error:nne { kernel } { missing-colon }
- { \token_to_str:N #5 }
- }
- }
-\cs_new:Npn \@@_generate_from_signature:n #1
- {
- \if:w n #1 \else: \if:w N #1 \else:
- \if:w T #1 \else: \if:w F #1 \else: #1 \fi: \fi: \fi: \fi:
- }
-% \end{macrocode}
-% Then we define the 24 variants beginning with |N|.
-% \begin{macrocode}
-\@@_tmp:w { set } { Nn } { Npn }
-\@@_tmp:w { set } { Ne } { Npe }
-\@@_tmp:w { set } { Nx } { Npx }
-\@@_tmp:w { set_nopar } { Nn } { Npn }
-\@@_tmp:w { set_nopar } { Ne } { Npe }
-\@@_tmp:w { set_nopar } { Nx } { Npx }
-\@@_tmp:w { set_protected } { Nn } { Npn }
-\@@_tmp:w { set_protected } { Ne } { Npe }
-\@@_tmp:w { set_protected } { Nx } { Npx }
-\@@_tmp:w { set_protected_nopar } { Nn } { Npn }
-\@@_tmp:w { set_protected_nopar } { Ne } { Npe }
-\@@_tmp:w { set_protected_nopar } { Nx } { Npx }
-\@@_tmp:w { gset } { Nn } { Npn }
-\@@_tmp:w { gset } { Ne } { Npe }
-\@@_tmp:w { gset } { Nx } { Npx }
-\@@_tmp:w { gset_nopar } { Nn } { Npn }
-\@@_tmp:w { gset_nopar } { Ne } { Npe }
-\@@_tmp:w { gset_nopar } { Nx } { Npx }
-\@@_tmp:w { gset_protected } { Nn } { Npn }
-\@@_tmp:w { gset_protected } { Ne } { Npe }
-\@@_tmp:w { gset_protected } { Nx } { Npx }
-\@@_tmp:w { gset_protected_nopar } { Nn } { Npn }
-\@@_tmp:w { gset_protected_nopar } { Ne } { Npe }
-\@@_tmp:w { gset_protected_nopar } { Nx } { Npx }
-\@@_tmp:w { new } { Nn } { Npn }
-\@@_tmp:w { new } { Ne } { Npe }
-\@@_tmp:w { new } { Nx } { Npx }
-\@@_tmp:w { new_nopar } { Nn } { Npn }
-\@@_tmp:w { new_nopar } { Ne } { Npe }
-\@@_tmp:w { new_nopar } { Nx } { Npx }
-\@@_tmp:w { new_protected } { Nn } { Npn }
-\@@_tmp:w { new_protected } { Ne } { Npe }
-\@@_tmp:w { new_protected } { Nx } { Npx }
-\@@_tmp:w { new_protected_nopar } { Nn } { Npn }
-\@@_tmp:w { new_protected_nopar } { Ne } { Npe }
-\@@_tmp:w { new_protected_nopar } { Nx } { Npx }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[documented-as=\cs_set:Nn]
-% {
-% \cs_set:cn , \cs_set:ce , \cs_set:cx ,
-% \cs_set_nopar:cn , \cs_set_nopar:ce , \cs_set_nopar:cx ,
-% \cs_set_protected:cn , \cs_set_protected:ce , \cs_set_protected:cx ,
-% \cs_set_protected_nopar:cn , \cs_set_protected_nopar:ce , \cs_set_protected_nopar:cx ,
-% \cs_gset:cn , \cs_gset:ce , \cs_gset:cx ,
-% \cs_gset_nopar:cn , \cs_gset_nopar:ce , \cs_gset_nopar:cx ,
-% \cs_gset_protected:cn , \cs_gset_protected:ce , \cs_gset_protected:cx ,
-% \cs_gset_protected_nopar:cn , \cs_gset_protected_nopar:ce , \cs_gset_protected_nopar:cx ,
-% \cs_new:cn , \cs_new:ce , \cs_new:cx ,
-% \cs_new_nopar:cn , \cs_new_nopar:ce , \cs_new_nopar:cx ,
-% \cs_new_protected:cn , \cs_new_protected:ce , \cs_new_protected:cx ,
-% \cs_new_protected_nopar:cn , \cs_new_protected_nopar:ce , \cs_new_protected_nopar:cx ,
-% }
-% The 24 |c| variants simply use \cs{exp_args:Nc}.
-% \begin{macrocode}
-\cs_set:Npn \@@_tmp:w #1#2
- {
- \cs_new_protected:cpx { cs_ #1 : c #2 }
- {
- \exp_not:N \exp_args:Nc
- \exp_after:wN \exp_not:N \cs:w cs_ #1 : N #2 \cs_end:
- }
- }
-\@@_tmp:w { set } { n }
-\@@_tmp:w { set } { e }
-\@@_tmp:w { set } { x }
-\@@_tmp:w { set_nopar } { n }
-\@@_tmp:w { set_nopar } { e }
-\@@_tmp:w { set_nopar } { x }
-\@@_tmp:w { set_protected } { n }
-\@@_tmp:w { set_protected } { e }
-\@@_tmp:w { set_protected } { x }
-\@@_tmp:w { set_protected_nopar } { n }
-\@@_tmp:w { set_protected_nopar } { e }
-\@@_tmp:w { set_protected_nopar } { x }
-\@@_tmp:w { gset } { n }
-\@@_tmp:w { gset } { e }
-\@@_tmp:w { gset } { x }
-\@@_tmp:w { gset_nopar } { n }
-\@@_tmp:w { gset_nopar } { e }
-\@@_tmp:w { gset_nopar } { x }
-\@@_tmp:w { gset_protected } { n }
-\@@_tmp:w { gset_protected } { e }
-\@@_tmp:w { gset_protected } { x }
-\@@_tmp:w { gset_protected_nopar } { n }
-\@@_tmp:w { gset_protected_nopar } { e }
-\@@_tmp:w { gset_protected_nopar } { x }
-\@@_tmp:w { new } { n }
-\@@_tmp:w { new } { e }
-\@@_tmp:w { new } { x }
-\@@_tmp:w { new_nopar } { n }
-\@@_tmp:w { new_nopar } { e }
-\@@_tmp:w { new_nopar } { x }
-\@@_tmp:w { new_protected } { n }
-\@@_tmp:w { new_protected } { e }
-\@@_tmp:w { new_protected } { x }
-\@@_tmp:w { new_protected_nopar } { n }
-\@@_tmp:w { new_protected_nopar } { e }
-\@@_tmp:w { new_protected_nopar } { x }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Checking control sequence equality}
-%
-% \begin{macro}[pTF, EXP]
-% {\cs_if_eq:NN, \cs_if_eq:cN, \cs_if_eq:Nc, \cs_if_eq:cc}
-% Check if two control sequences are identical.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \cs_if_eq:NN #1#2 { p , T , F , TF }
- {
- \if_meaning:w #1#2
- \prg_return_true: \else: \prg_return_false: \fi:
- }
-\cs_new:Npn \cs_if_eq_p:cN { \exp_args:Nc \cs_if_eq_p:NN }
-\cs_new:Npn \cs_if_eq:cNTF { \exp_args:Nc \cs_if_eq:NNTF }
-\cs_new:Npn \cs_if_eq:cNT { \exp_args:Nc \cs_if_eq:NNT }
-\cs_new:Npn \cs_if_eq:cNF { \exp_args:Nc \cs_if_eq:NNF }
-\cs_new:Npn \cs_if_eq_p:Nc { \exp_args:NNc \cs_if_eq_p:NN }
-\cs_new:Npn \cs_if_eq:NcTF { \exp_args:NNc \cs_if_eq:NNTF }
-\cs_new:Npn \cs_if_eq:NcT { \exp_args:NNc \cs_if_eq:NNT }
-\cs_new:Npn \cs_if_eq:NcF { \exp_args:NNc \cs_if_eq:NNF }
-\cs_new:Npn \cs_if_eq_p:cc { \exp_args:Ncc \cs_if_eq_p:NN }
-\cs_new:Npn \cs_if_eq:ccTF { \exp_args:Ncc \cs_if_eq:NNTF }
-\cs_new:Npn \cs_if_eq:ccT { \exp_args:Ncc \cs_if_eq:NNT }
-\cs_new:Npn \cs_if_eq:ccF { \exp_args:Ncc \cs_if_eq:NNF }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Diagnostic functions}
-%
-% \begin{macrocode}
-%<@@=kernel>
-% \end{macrocode}
-%
-% \begin{macro}{\@@_chk_defined:NT}
-% Error if the variable |#1| is not defined.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_chk_defined:NT #1#2
- {
- \cs_if_exist:NTF #1
- {#2}
- {
- \msg_error:nne { kernel } { variable-not-defined }
- { \token_to_str:N #1 }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {\@@_register_show:N, \@@_register_show:c, \@@_register_log:N, \@@_register_log:c}
-% \begin{macro}{\@@_register_show_aux:NN, \@@_register_show_aux:nNN}
-% Simply using the \tn{showthe} primitive does not allow for
-% line-wrapping, so instead use \cs{tl_show:n} and \cs{tl_log:n} (defined
-% in \pkg{l3tl} and that performs line-wrapping). This displays
-% |>~|\meta{variable}|=|\meta{value}. We expand the value before-hand
-% as otherwise some integers (such as \tn{currentgrouplevel} or
-% \tn{currentgrouptype}) altered by the line-wrapping code would show
-% wrong values.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_register_show:N
- { \@@_register_show_aux:NN \tl_show:n }
-\cs_new_protected:Npn \@@_register_show:c
- { \exp_args:Nc \@@_register_show:N }
-\cs_new_protected:Npn \@@_register_log:N
- { \@@_register_show_aux:NN \tl_log:n }
-\cs_new_protected:Npn \@@_register_log:c
- { \exp_args:Nc \@@_register_log:N }
-\cs_new_protected:Npn \@@_register_show_aux:NN #1#2
- {
- \@@_chk_defined:NT #2
- {
- \exp_args:No \@@_register_show_aux:nNN
- { \tex_the:D #2 } #2 #1
- }
- }
-\cs_new_protected:Npn \@@_register_show_aux:nNN #1#2#3
- { \exp_args:No #3 { \token_to_str:N #2 = #1 } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\cs_show:N, \cs_show:c, \cs_log:N, \cs_log:c, \@@_show:NN}
-% Some control sequences have a very long name or meaning. Thus,
-% simply using \TeX{}'s primitive \tn{show} could lead to overlong
-% lines. The output of this primitive is mimicked to some extent,
-% then the re-built string is given to \cs{tl_show:n} or \cs{tl_log:n} for
-% line-wrapping. We must expand the meaning before passing it to the
-% wrapping code as otherwise we would wrongly see the definitions that
-% are in place there. To get correct escape characters, set the
-% \tn{escapechar} in a group; this also localizes the assignment
-% performed by \texttt{e}-expansion. The \cs{cs_show:c} and \cs{cs_log:c} commands
-% convert their argument to a control sequence within a group to avoid
-% showing \tn{relax} for undefined control sequences.
-% \begin{macrocode}
-\cs_new_protected:Npn \cs_show:N { \@@_show:NN \tl_show:n }
-\cs_new_protected:Npn \cs_show:c
- { \group_begin: \exp_args:NNc \group_end: \cs_show:N }
-\cs_new_protected:Npn \cs_log:N { \@@_show:NN \tl_log:n }
-\cs_new_protected:Npn \cs_log:c
- { \group_begin: \exp_args:NNc \group_end: \cs_log:N }
-\cs_new_protected:Npn \@@_show:NN #1#2
- {
- \group_begin:
- \int_set:Nn \tex_escapechar:D { `\\ }
- \exp_args:NNe
- \group_end:
- #1 { \token_to_str:N #2 = \cs_meaning:N #2 }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\group_show_list:, \group_log_list:, \@@_group_show:NN}
-% Wrapper around \tn{showgroups}. Getting \TeX{} to write to the log
-% without interruption the run is done by altering the interaction
-% mode.
-% \begin{macrocode}
-\cs_new_protected:Npn \group_show_list:
- { \@@_group_show:NN \use_none:n 1 }
-\cs_new_protected:Npn \group_log_list:
- { \@@_group_show:NN \int_gzero:N 0 }
-\cs_new_protected:Npn \@@_group_show:NN #1#2
- {
- \use:e
- {
- #1 \tex_interactionmode:D
- \int_set:Nn \tex_tracingonline:D {#2}
- \int_set:Nn \tex_errorcontextlines:D { -1 }
- \exp_not:N \exp_after:wN \scan_stop:
- \tex_showgroups:D
- \int_gset:Nn \tex_interactionmode:D
- { \int_use:N \tex_interactionmode:D }
- \int_set:Nn \tex_tracingonline:D
- { \int_use:N \tex_tracingonline:D }
- \int_set:Nn \tex_errorcontextlines:D
- { \int_use:N \tex_errorcontextlines:D }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Decomposing a macro definition}
-%
-% \begin{macro}{\cs_prefix_spec:N}
-% \begin{macro}{\cs_parameter_spec:N}
-% \begin{macro}{\cs_replacement_spec:N}
-% \begin{macro}{\@@_prefix_arg_replacement:wN}
-% We sometimes want to test if a control sequence can be expanded to
-% reveal a hidden value. However, we cannot just expand the macro
-% blindly as it may have arguments and none might be
-% present. Therefore we define these functions to pick either the
-% prefix(es), the parameter specification, or the replacement text from
-% a macro. All of this information is returned as characters with
-% catcode~$12$. If the token in question isn't a macro, the token
-% \cs{scan_stop:} is returned instead.
-% \begin{macrocode}
-\use:e
- {
- \exp_not:n { \cs_new:Npn \@@_prefix_arg_replacement:wN #1 }
- \tl_to_str:n { macro : } \exp_not:n { #2 -> #3 \s_@@_stop #4 }
- }
- { #4 {#1} {#2} {#3} }
-\cs_new:Npn \cs_prefix_spec:N #1
- {
- \token_if_macro:NTF #1
- {
- \exp_after:wN \@@_prefix_arg_replacement:wN
- \token_to_meaning:N #1 \s_@@_stop \use_i:nnn
- }
- { \scan_stop: }
- }
-\cs_new:Npn \cs_parameter_spec:N #1
- {
- \token_if_macro:NTF #1
- {
- \exp_after:wN \@@_prefix_arg_replacement:wN
- \token_to_meaning:N #1 \s_@@_stop \use_ii:nnn
- }
- { \scan_stop: }
- }
-\cs_new:Npn \cs_replacement_spec:N #1
- {
- \token_if_macro:NTF #1
- {
- \exp_after:wN \@@_prefix_arg_replacement:wN
- \token_to_meaning:N #1 \s_@@_stop \use_iii:nnn
- }
- { \scan_stop: }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Doing nothing functions}
-%
-% \begin{macro}[EXP]{\prg_do_nothing:}
-% This does not fit anywhere else!
-% \begin{macrocode}
-\cs_new:Npn \prg_do_nothing: { }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Breaking out of mapping functions}
-%
-% \begin{macrocode}
-%<@@=prg>
-% \end{macrocode}
-%
-% \begin{macro}[EXP]{\prg_break_point:Nn, \prg_map_break:Nn}
-% In inline mappings, the nesting level must be reset
-% at the end of the mapping, even when the user decides
-% to break out. This is done by putting the code that
-% must be performed as an argument of \cs{@@_break_point:Nn}.
-% The breaking functions are then defined to jump to
-% that point and perform the argument of \cs{@@_break_point:Nn},
-% before the user's code (if any). There is a check that we close the
-% correct loop, otherwise we continue breaking.
-% \begin{macrocode}
-\cs_new_eq:NN \prg_break_point:Nn \use_ii:nn
-\cs_new:Npn \prg_map_break:Nn #1#2#3 \prg_break_point:Nn #4#5
- {
- #5
- \if_meaning:w #1 #4
- \exp_after:wN \use_iii:nnn
- \fi:
- \prg_map_break:Nn #1 {#2}
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\prg_break_point:}
-% \begin{macro}{\prg_break:, \prg_break:n}
-% Very simple analogues of \cs{prg_break_point:Nn} and
-% \cs{prg_map_break:Nn}, for use in fast short-term recursions which
-% are not mappings, do not need to support nesting, and in which
-% nothing has to be done at the end of the loop.
-% \begin{macrocode}
-\cs_new_eq:NN \prg_break_point: \prg_do_nothing:
-\cs_new:Npn \prg_break: #1 \prg_break_point: { }
-\cs_new:Npn \prg_break:n #1#2 \prg_break_point: {#1}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Starting a paragraph}
-%
-% \begin{macro}{\mode_leave_vertical:}
-% The approach here is different to that used by \LaTeXe{} or plain \TeX{},
-% which unbox a void box to force horizontal mode. That inserts the
-% \tn{everypar} tokens \emph{before} the re-inserted unboxing tokens. The
-% approach here uses a protected macro, equivalent to the \tn{quitvmode}
-% primitive. In vertical mode, the \tn{indent} primitive is inserted:
-% this will switch to horizontal mode and insert \tn{everypar} tokens and
-% nothing else. Unlike the \LaTeXe{} version, the availability of \eTeX{}
-% means using a mode test can be done at for example the start of an
-% \tn{halign}.
-% \begin{macrocode}
-\cs_new_protected:Npn \mode_leave_vertical:
- {
- \if_mode_vertical:
- \exp_after:wN \tex_indent:D
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3bitset.dtx b/macros/latex/contrib/l3kernel/l3bitset.dtx
deleted file mode 100644
index 3100c28463..0000000000
--- a/macros/latex/contrib/l3kernel/l3bitset.dtx
+++ /dev/null
@@ -1,629 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3bitset.dtx
-%
-% Copyright (C) 2020-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% http://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-% \title{^^A
-% The \pkg{l3bitset} module\\ Bitsets^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% This module defines and implements the data type \texttt{bitset}, a vector of
-% bits. The size of the vector may grow dynamically.
-% Individual bits can be set and unset by names pointing to an index position.
-% The names |1|, |2|, |3|, \ldots\ are predeclared and point to the
-% index positions $1$, $2$, $3$,\ldots. More names can be added and existing names can
-% be changed.
-% The index is like all other indices in \pkg{expl3} modules \emph{1-based}.
-% A \texttt{bitset} can be output as binary number or---as needed e.g. in a
-% PDF dictionary---as decimal (arabic) number.
-% Currently only a small subset of the functions provided by the \pkg{bitset}
-% package are implemented here, mainly the functions needed to use bitsets in
-% PDF dictionaries.
-%
-% The bitset is stored as a string (but one shouldn't rely on the internal
-% representation) and so the vector size is theoretically
-% unlimited, only restricted by \TeX-memory. But the functions to set and clear
-% bits use integer functions for the index so bitsets can't be longer
-% than $2^{31} - 1$.
-% The export function
-% \cs{bitset_to_arabic:N} can use functions from the \texttt{int} module only if
-% the largest index used for this bitset is smaller than $32$, for longer
-% bitsets \texttt{fp} is used and this is slower.
-%
-% \section{Creating bitsets}
-%
-% \begin{function}[added = 2023-11-15]
-% {\bitset_new:N,\bitset_new:c,\bitset_new:Nn, \bitset_new:cn}
-% \begin{syntax}
-% \cs{bitset_new:N} \meta{bitset var} \\
-% \cs{bitset_new:Nn} \meta{bitset var}
-% ~~\{
-% ~~~~\meta{name_1} |=| \meta{index_1} |,|
-% ~~~~\meta{name_2} |=| \meta{index_2} |,| \ldots{}
-% ~~\}
-% \end{syntax}
-% Creates a new \meta{bitset var} or raises an error if the name is already taken.
-% The declaration is global. The \meta{bitset var} is initially $0$.
-%
-% Bitsets are implemented as string variables consisting of
-% \texttt{1}'s and \texttt{0}'s.
-% The rightmost number is the index position $1$, so
-% the string variable can be viewed directly as the binary number.
-% But one shouldn't rely on the internal representation, but use the
-% dedicated \cs{bitset_to_bin:N} instead to get the binary number.
-%
-% The name--index pairs given in the second
-% argument of \cs{bitset_new:Nn} declares names for some indices,
-% which can be used to set and unset bits.
-% The names |1|, |2|, |3|, \ldots\ are predeclared and point to the
-% index positions $1$, $2$, $3$, \ldots.
-%
-% \meta{index\ldots} should be a positive number or an
-% \meta{integer expression} which evaluates to a positive number.
-% The expression is evaluated when the index is used, not at declaration time.
-% The names \meta{name\ldots}
-% should be unique. Using a number as name, e.g.~|10=1|, is allowed, it
-% then overwrites the predeclared name |10|,
-% but the index position $10$ can then only be reached if some other
-% name for it exists, e.g. |ten=10|.
-% It is not necessary to give every index
-% a name, and an index can have more than one name. The named index
-% can be extended or changed with the next function.
-% \end{function}
-%
-% \begin{function}[added = 2023-11-15]
-% {\bitset_addto_named_index:Nn}
-% \begin{syntax}
-% \cs{bitset_addto_named_index:Nn} \meta{bitset var}
-% ~~\{
-% ~~~~\meta{name_1} |=| \meta{index_1} |,|
-% ~~~~\meta{name_2} |=| \meta{index_2} |,| \ldots{}
-% ~~\}
-% \end{syntax}
-% This extends or changes the name--index pairs for \meta{bitset var}
-% globally as described for \cs{bitset_new:Nn}.
-% \end{function}
-%
-% For example after these settings
-% \begin{verbatim}
-% \bitset_new:Nn \l_pdfannot_F_bitset
-% {
-% Invisible = 1,
-% Hidden = 2,
-% Print = 3,
-% NoZoom = 4,
-% NoRotate = 5,
-% NoView = 6,
-% ReadOnly = 7,
-% Locked = 8,
-% ToggleNoView = 9,
-% LockedContents = 10
-% }
-% \bitset_addto_named_index:Nn \l_pdfannot_F_bitset
-% {
-% print = 3
-% }
-% \end{verbatim}
-% it is possible to set bit $3$ by using any of these alternatives:
-% \begin{verbatim}
-% \bitset_set_true:Nn \l_pdfannot_F_bitset {Print}
-% \bitset_set_true:Nn \l_pdfannot_F_bitset {print}
-% \bitset_set_true:Nn \l_pdfannot_F_bitset {3}
-% \end{verbatim}
-%
-% \begin{function}[EXP, pTF,added = 2023-11-15]
-% {\bitset_if_exist:N, \bitset_if_exist:c}
-% \begin{syntax}
-% \cs{bitset_if_exist_p:N} \meta{bitset var}
-% \cs{bitset_if_exist:NTF} \meta{bitset var} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests whether the \meta{bitset var} exist.
-% \end{function}
-%
-% \section{Setting and unsetting bits}
-%
-% \begin{function}[added = 2023-11-15]
-% {
-% \bitset_set_true:Nn, \bitset_set_true:cn,
-% \bitset_gset_true:Nn, \bitset_gset_true:cn
-% }
-% \begin{syntax}
-% \cs{bitset_set_true:Nn} \meta{bitset var} \Arg{name}
-% \end{syntax}
-% This sets the bit of the index position represented by \Arg{name} to $1$.
-% \meta{name} should be either one of the predeclared names
-% |1|, |2|, |3|, \ldots, or one of the names added manually.
-% Index position are 1-based.
-% If needed the length of the bit vector is enlarged.
-% \end{function}
-%
-% \begin{function}[added = 2023-11-15]
-% {
-% \bitset_set_false:Nn, \bitset_set_false:cn,
-% \bitset_gset_false:Nn, \bitset_gset_false:cn
-% }
-% \begin{syntax}
-% \cs{bitset_set_false:Nn} \meta{bitset var} \Arg{name}
-% \end{syntax}
-% This unsets the bit of the index position represented by \Arg{name} (sets
-% it to $0$).
-% \meta{name} should be either one of the predeclared names
-% |1|, |2|, |3|, \ldots, or one of the names added manually.
-% The index is $1$-based. If the index position is larger
-% than the current length of the bit vector
-% nothing happens. If the leading (left most) bit is unset,
-% zeros are not trimmed but stay in the bit vector and are still shown
-% by \cs{bitset_show:N}.
-% \end{function}
-%
-% \begin{function}[added = 2023-11-15]
-% {\bitset_clear:N,\bitset_clear:c,\bitset_gclear:N,\bitset_gclear:c}
-% \begin{syntax}
-% \cs{bitset_clear:N} \meta{bitset var}
-% \end{syntax}
-% This resets the bitset to the initial state. The declared names are not changed.
-% \end{function}
-%
-% \section{Using bitsets}
-%
-% \begin{function}[EXP,added = 2023-11-15]
-% {\bitset_item:Nn, \bitset_item:cn}
-% \begin{syntax}
-% \cs{bitset_item:Nn} \meta{bitset var} \Arg{name}
-% \end{syntax}
-% \cs{bitset_item:Nn} outputs \texttt{1} if the bit with
-% the index number represented by \meta{name} is set and \texttt{0} otherwise.
-% \meta{name} is either one of the predeclared names
-% |1|, |2|, |3|, \ldots, or one of the names added manually.
-% \end{function}
-%
-% \begin{function}[EXP,added = 2023-11-15]
-% {\bitset_to_bin:N, \bitset_to_bin:c}
-% \begin{syntax}
-% \cs{bitset_to_bin:N} \meta{bitset var}
-% \end{syntax}
-% This leaves the current value of the bitset expressed as
-% a binary (string) number in the input stream.
-% If no bit has been set yet, the output is zero.
-% \end{function}
-%
-% \begin{function}[EXP,added = 2023-11-15]
-% {\bitset_to_arabic:N, \bitset_to_arabic:c}
-% \begin{syntax}
-% \cs{bitset_to_arabic:N} \meta{bitset var}
-% \end{syntax}
-% This leaves the current value of the bitset expressed as
-% a decimal number in the input stream. If no bit has been set yet,
-% the output is zero. The function uses \cs{int_from_bin:n} if the largest
-% index that have been set or unset is smaller than $32$, and a slower
-% implementation based on \cs{fp_eval:n} otherwise.
-% \end{function}
-%
-% \begin{function}[added = 2023-11-15]
-% {\bitset_show:N, \bitset_show:c}
-% \begin{syntax}
-% \cs{bitset_show:N} \meta{bitset var}
-% \end{syntax}
-% Displays the binary and decimal values of the \meta{bitset var}
-% on the terminal.
-% \end{function}
-%
-% \begin{function}[added = 2023-11-15]
-% {\bitset_log:N, \bitset_log:c}
-% \begin{syntax}
-% \cs{bitset_log:N} \meta{bitset var}
-% \end{syntax}
-% Writes the binary and decimal values of the \meta{bitset var}
-% in the log file.
-% \end{function}
-%
-% \begin{function}[added = 2023-11-15]
-% {
-% \bitset_show_named_index:N, \bitset_show_named_index:c
-% }
-% \begin{syntax}
-% \cs{bitset_show_named_index:N} \meta{bitset var}
-% \end{syntax}
-% Displays declared name--index pairs of the \meta{bitset var}
-% on the terminal.
-% \end{function}
-%
-% \begin{function}[added = 2023-12-11]
-% {
-% \bitset_log_named_index:N, \bitset_log_named_index:c
-% }
-% \begin{syntax}
-% \cs{bitset_log_named_index:N} \meta{bitset var}
-% \end{syntax}
-% Writes declared name--index pairs of the \meta{bitset var}
-% in the log file.
-% \end{function}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3bitset} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=bitset>
-% \end{macrocode}
-%
-% Transitional support.
-% \begin{macrocode}
-\cs_if_exist:NT \@expl@finalise@setup@@@@
- {
- \tl_gput_right:Nn \@expl@finalise@setup@@@@
- { \declare@file@substitution { l3bitset.sty } { null.tex } }
- }
-% \end{macrocode}
-%
-% A bitset is a string variable.
-% \begin{macro}{\bitset_new:N, \bitset_new:c}
-% \begin{macro}{\bitset_new:Nn, \bitset_new:cn}
-% \begin{macrocode}
-\cs_new_protected:Npn \bitset_new:N #1
- {
- \__kernel_chk_if_free_cs:N #1
- \cs_gset_eq:NN #1 \c_zero_str
- \prop_new:c { g__bitset_ \cs_to_str:N #1 _name_prop }
- }
-\cs_new_protected:Npn \bitset_new:Nn #1 #2
- {
- \__kernel_chk_if_free_cs:N #1
- \cs_gset_eq:NN #1 \c_zero_str
- \prop_new:c { g__bitset_ \cs_to_str:N #1 _name_prop }
- \prop_gset_from_keyval:cn
- { g__bitset_ \cs_to_str:N #1 _name_prop }
- {#2}
- }
-\cs_generate_variant:Nn \bitset_new:N { c }
-\cs_generate_variant:Nn \bitset_new:Nn { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\bitset_addto_named_index:Nn}
-% \begin{macrocode}
-\cs_new_protected:Npn \bitset_addto_named_index:Nn #1#2
- {
- \prop_gput_from_keyval:cn
- { g_@@_ \cs_to_str:N #1 _name_prop } { #2 }
- }
-% \end{macrocode}
-% \end{macro}
-% \begin{macro}[EXP,pTF]
-% {
-% \bitset_if_exist:N, \bitset_if_exist:c
-% }
-% Existence tests.
-% \begin{macrocode}
-\prg_new_eq_conditional:NNn
- \bitset_if_exist:N \str_if_exist:N { p , T , F , TF }
-\prg_new_eq_conditional:NNn
- \bitset_if_exist:c \str_if_exist:c { p , T , F , TF }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_set_true:Nn, \@@_gset_true:Nn, \@@_set_false:Nn, \@@_gset_false:Nn}
-% \begin{macro}{\@@_set:NNnN}
-% The internal command uses only numbers (integer expressions) for the
-% position.
-% A bit is set by either extending the string or by splitting it and
-% then inserting an $1$. It is not checked if the value was already $1$.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_set_true:Nn #1#2
- { \@@_set:NNnN \str_set:Ne #1 {#2} 1 }
-\cs_new_protected:Npn \@@_gset_true:Nn #1#2
- { \@@_set:NNnN \str_gset:Ne #1 {#2} 1 }
-\cs_new_protected:Npn \@@_set_false:Nn #1#2
- { \@@_set:NNnN \str_set:Ne #1 {#2} 0 }
-\cs_new_protected:Npn \@@_gset_false:Nn #1#2
- { \@@_set:NNnN \str_gset:Ne #1 {#2} 0 }
-\cs_new_protected:Npn \@@_set:NNnN #1#2#3#4
- {
- \int_compare:nNnT {#3} > { 0 }
- {
- \int_compare:nNnTF { \str_count:N #2 } < {#3}
- {
- #1 #2
- {
- #4
- \prg_replicate:nn { #3 - \str_count:N #2 - 1 } { 0 }
- #2
- }
- }
- {
- #1 #2
- {
- \str_range:Nnn #2 { 1 } { -1 - (#3) }
- #4
- \str_range:Nnn #2 { 1 - (#3) } { -1 }
- }
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{variable}{\l_@@_internal_int}
-% \begin{macrocode}
-\int_new:N \l_@@_internal_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[TF]{\@@_test_digits:n}
-% \begin{macro}{\@@_test_digits_end:n}
-% \begin{macro}{\@@_test_digits:w}
-% \url{https://chat.stackexchange.com/transcript/message/56878159#56878159}
-% \begin{macrocode}
-\prg_new_protected_conditional:Npnn \@@_test_digits:n #1 { TF }
- {
- \tex_afterassignment:D \@@_test_digits:w
- \l_@@_internal_int = 0 \tl_trim_spaces_apply:nN {#1} \tl_to_str:n
- \@@_test_digits_end:
- \use_i:nnn \if_false:
- \@@_test_digits_end:
- \if_int_compare:w \c_zero_int < \l_@@_internal_int
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-\cs_new_eq:NN \@@_test_digits_end: \exp_stop_f:
-\cs_new_protected:Npn \@@_test_digits:w #1 \@@_test_digits_end: { }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \bitset_set_true:Nn, \bitset_set_true:cn,
-% \bitset_gset_true:Nn, \bitset_gset_true:cn,
-% \bitset_set_false:Nn, \bitset_set_false:cn,
-% \bitset_gset_false:Nn, \bitset_gset_false:cn
-% }
-% \begin{macro}{\@@_set_aux:NNn}
-% The user commands must first translate the argument to an index number.
-% \begin{macrocode}
-\cs_new_protected:Npn \bitset_set_true:Nn #1#2
- { \@@_set:NNn \@@_set_true:Nn #1 {#2} }
-\cs_new_protected:Npn \bitset_gset_true:Nn #1#2
- { \@@_set:NNn \@@_gset_true:Nn #1 {#2} }
-\cs_new_protected:Npn \bitset_set_false:Nn #1#2
- { \@@_set:NNn \@@_set_false:Nn #1 {#2} }
-\cs_new_protected:Npn \bitset_gset_false:Nn #1#2
- { \@@_set:NNn \@@_gset_false:Nn #1 {#2} }
-\cs_new_protected:Npn \@@_set:NNn #1#2#3
- {
- \prop_if_in:cnTF { g_@@_ \cs_to_str:N #2 _name_prop } {#3}
- {
- #1 #2
- {
- \prop_item:cn { g_@@_ \cs_to_str:N #2 _name_prop } {#3}
- }
- }
- {
- \@@_test_digits:nTF {#3}
- {
- #1 #2 {#3}
- \prop_gput:cnn { g_@@_ \cs_to_str:N #2 _name_prop } {#3} {#3}
- }
- {
- \msg_warning:nnee { bitset } { unknown-name }
- { \token_to_str:N #2 }
- { \tl_to_str:n {#3} }
- }
- }
- }
-\cs_generate_variant:Nn \bitset_set_true:Nn { c }
-\cs_generate_variant:Nn \bitset_gset_true:Nn { c }
-\cs_generate_variant:Nn \bitset_set_false:Nn { c }
-\cs_generate_variant:Nn \bitset_gset_false:Nn { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \bitset_clear:N, \bitset_clear:c,
-% \bitset_gclear:N, \bitset_gclear:c
-% }
-% \begin{macrocode}
-\cs_new_protected:Npn \bitset_clear:N #1
- {
- \str_set_eq:NN #1 \c_zero_str
- }
-\cs_new_protected:Npn \bitset_gclear:N #1
- {
- \str_gset_eq:NN #1 \c_zero_str
- }
-\cs_generate_variant:Nn \bitset_clear:N { c }
-\cs_generate_variant:Nn \bitset_gclear:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {
-% \bitset_to_arabic:N, \bitset_to_arabic:c,
-% \bitset_to_bin:N, \bitset_to_bin:c,
-% }
-% \begin{macro}[EXP]{\@@_to_int:nN}
-% The naming of the commands follow the names in the \texttt{int} module.
-% \cs{bitset_to_arabic:N} uses \cs{int_from_bin:n} if the string is shorter
-% than $32$ and the slower \cs{fp_eval:n} for larger bitsets.
-% \begin{macrocode}
-\cs_new:Npn \bitset_to_arabic:N #1
- {
- \int_compare:nNnTF { \str_count:N #1 } < { 32 }
- { \exp_args:No \int_from_bin:n {#1} }
- {
- \exp_after:wN \@@_to_int:nN \exp_after:wN 0
- #1 \q_recursion_tail \q_recursion_stop
- }
- }
-\cs_new:Npn \@@_to_int:nN #1#2
- {
- \quark_if_recursion_tail_stop_do:Nn #2 {#1}
- \exp_args:Nf \@@_to_int:nN { \fp_eval:n { #1 * 2 + #2 } }
- }
-\cs_new:Npn \bitset_to_bin:N #1
- {
- #1
- }
-\cs_generate_variant:Nn \bitset_to_arabic:N { c }
-\cs_generate_variant:Nn \bitset_to_bin:N { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \bitset_item:Nn, \bitset_item:cn
-% }
-% All bits that have been set at anytime have an entry in the prop,
-% so we can take everything else as $0$.
-% \begin{macrocode}
-\cs_new:Npn \bitset_item:Nn #1#2
- {
- \prop_if_in:cnTF { g_@@_ \cs_to_str:N #1 _name_prop } {#2}
- {
- \int_eval:n
- {
- \str_item:Nn #1
- { 0 - ( \prop_item:cn { g_@@_ \cs_to_str:N #1 _name_prop } {#2} ) }
- +0
- }
- }
- {
- 0
- }
- }
-\cs_generate_variant:Nn \bitset_item:Nn { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \bitset_show:N, \bitset_show:c,
-% \bitset_log:N, \bitset_log:c
-% }
-% \begin{macrocode}
-\cs_new_protected:Npn \bitset_show:N { \@@_show:NN \msg_show:nneeee }
-\cs_generate_variant:Nn \bitset_show:N { c }
-\cs_new_protected:Npn \bitset_log:N { \@@_show:NN \msg_log:nneeee }
-\cs_generate_variant:Nn \bitset_log:N { c }
-\cs_new_protected:Npn \@@_show:NN #1#2
- {
- \__kernel_chk_defined:NT #2
- {
- #1 { bitset } { show }
- { \token_to_str:N #2 }
- { \bitset_to_bin:N #2 }
- { \bitset_to_arabic:N #2 }
- { }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \bitset_show_named_index:N, \bitset_show_named_index:c,
-% \bitset_log_named_index:N, \bitset_log_named_index:c
-% }
-% \begin{macrocode}
-\cs_new_protected:Npn \bitset_show_named_index:N
- { \@@_show_named_index:NN \msg_show:nneeee }
-\cs_generate_variant:Nn \bitset_show_named_index:N { c }
-\cs_new_protected:Npn \bitset_log_named_index:N
- { \@@_show_named_index:NN \msg_log:nneeee }
-\cs_generate_variant:Nn \bitset_log_named_index:N { c }
-\cs_new_protected:Npn \@@_show_named_index:NN #1#2
- {
- \__kernel_chk_defined:NT #2
- {
- #1 { bitset } { show-names }
- { \token_to_str:N #2 }
- { \prop_map_function:cN { g_@@_ \cs_to_str:N #2 _name_prop } \msg_show_item:nn }
- { } { }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Messages}
-% \begin{macrocode}
-\msg_new:nnn { bitset } { show }
- {
- The~bitset~#1~has~the~representation: \\
- >~binary:~#2 \\
- >~arabic:~#3 .
- }
-\msg_new:nnn { bitset } { show-names }
- {
- The~bitset~#1~
- \tl_if_empty:nTF {#2}
- { knows~no~names~yet \\>~ . }
- { knows~the~name/index~pairs~(without~outer~braces): #2 . }
- }
-\msg_new:nnn { bitset } { unknown-name }
- { The~name~'#2'~is~unknown~for~bitset~\tl_to_str:n {#1} }
-\prop_gput:Nnn \g_msg_module_name_prop { bitset } { LaTeX }
-\prop_gput:Nnn \g_msg_module_type_prop { bitset } { }
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3bootstrap.dtx b/macros/latex/contrib/l3kernel/l3bootstrap.dtx
deleted file mode 100644
index 5ff0c2e68d..0000000000
--- a/macros/latex/contrib/l3kernel/l3bootstrap.dtx
+++ /dev/null
@@ -1,357 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3bootstrap.dtx
-%
-% Copyright (C) 2011-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3bootstrap} module\\ Bootstrap code^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \section{Using the \LaTeX3 modules}
-%
-% The modules documented in ^^A
-% \ifinterface
-% this file (and \file{source3} for documented sources) ^^A
-% \else
-% \file{interface3} (and this file) ^^A
-% \fi
-% are designed to be used on top of \LaTeXe{} and are already pre-loaded
-% since \LaTeXe{} 2020-02-02.
-% To support older formats, the |\usepackage{expl3}| or |\RequirePackage{expl3}|
-% instructions are still available to load them all as one.
-%
-% As the modules use a coding syntax different from standard
-% \LaTeXe{} it provides a few functions for setting it up.
-%
-% \begin{function}[updated = 2011-08-13]{\ExplSyntaxOn, \ExplSyntaxOff}
-% \begin{syntax}
-% \cs{ExplSyntaxOn} \meta{code} \cs{ExplSyntaxOff}
-% \end{syntax}
-% The \cs{ExplSyntaxOn} function switches to a category code
-% regime in which spaces and new lines are ignored, and in which the colon (|:|)
-% and underscore (|_|) are treated as \enquote{letters}, thus allowing
-% access to the names of code functions and variables. Within this
-% environment, |~| is used to input a space. The \cs{ExplSyntaxOff}
-% reverts to the document category code regime.
-% \begin{texnote}
-% Spaces introduced by~|~| behave much in the same way as normal
-% space characters in the standard category code regime: they are
-% ignored after a control word or at the start of a line, and
-% multiple consecutive~|~| are equivalent to a single one. However,
-% |~|~is \emph{not} ignored at the end of a line.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[updated = 2017-03-19, updated = 2023-08-03]
-% {\ProvidesExplPackage, \ProvidesExplClass, \ProvidesExplFile}
-% \begin{syntax}
-% \cs{ProvidesExplPackage} \Arg{package} \Arg{date} \Arg{version} \Arg{description}
-% \end{syntax}
-% These functions act broadly in the same way as the corresponding
-% \LaTeXe{} kernel
-% functions \tn{ProvidesPackage}, \tn{ProvidesClass} and
-% \tn{ProvidesFile}. However, they also implicitly switch
-% \cs{ExplSyntaxOn} for the remainder of the code with the file. At the
-% end of the file, \cs{ExplSyntaxOff} will be called to reverse this.
-% (This is the same concept as \LaTeXe{} provides in turning on
-% \tn{makeatletter} within package and class code.) The \meta{date} should
-% be given in the format \meta{year}/\meta{month}/\meta{day} or in the ISO
-% date format \meta{year}-\meta{month}-\meta{day}. If the
-% \meta{version} is given then a leading \texttt{v} is optional: if given
-% as a \enquote{pure} version string, a \texttt{v} will be prepended.
-% \end{function}
-%
-% \begin{function}[updated = 2012-06-04]{\GetIdInfo}
-% \begin{syntax}
-% \cs{GetIdInfo} |$Id:| \meta{SVN info field} |$| \Arg{description}
-% \end{syntax}
-% Extracts all information from a SVN field. Spaces are not
-% ignored in these fields. The information pieces are stored in
-% separate control sequences with \cs{ExplFileName} for the part of the
-% file name leading up to the period, \cs{ExplFileDate} for date,
-% \cs{ExplFileVersion} for version and \cs{ExplFileDescription} for the
-% description.
-% \end{function}
-%
-% To summarize: Every single package using this syntax should identify
-% itself using one of the above methods. Special care is taken so that
-% every package or class file loaded with \tn{RequirePackage} or similar
-% are loaded with usual \LaTeXe{} category codes and the \LaTeX3 category code
-% scheme is reloaded when needed afterwards. See implementation for
-% details. If you use the \cs{GetIdInfo} command you can use the
-% information when loading a package with
-% \begin{verbatim}
-% \ProvidesExplPackage{\ExplFileName}
-% {\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
-% \end{verbatim}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3bootstrap} implementation}
-%
-% \begin{macrocode}
-%<*package>
-%<@@=kernel>
-% \end{macrocode}
-%
-% \subsection{The \tn{pdfstrcmp} primitive in \XeTeX{}}
-%
-% Only \pdfTeX{} has a primitive called \tn{pdfstrcmp}. The \XeTeX{}
-% version is just \tn{strcmp}, so there is some shuffling to do. As
-% this is still a real primitive, using the \pdfTeX{} name is \enquote{safe}.
-% \begin{macrocode}
-\begingroup\expandafter\expandafter\expandafter\endgroup
- \expandafter\ifx\csname pdfstrcmp\endcsname\relax
- \let\pdfstrcmp\strcmp
-\fi
-% \end{macrocode}
-%
-% \subsection{Loading support \Lua{} code}
-%
-% When \LuaTeX{} is used there are various pieces of \Lua{} code which need to
-% be loaded. The code itself is defined in \pkg{l3luatex} and is extracted into
-% a separate file. Thus here the task is to load the \Lua{} code both now and
-% (if required) at the start of each job.
-% \begin{macrocode}
-\begingroup\expandafter\expandafter\expandafter\endgroup
-\expandafter\ifx\csname directlua\endcsname\relax
-\else
- \ifnum\luatexversion<110 %
- \else
-% \end{macrocode}
-% For \LuaTeX{} we make sure the basic support is loaded:
-% this is only necessary in plain.
-% \begin{macrocode}
- \begingroup\expandafter\expandafter\expandafter\endgroup
- \expandafter\ifx\csname newcatcodetable\endcsname\relax
- \input{ltluatex}%
- \fi
- \begingroup\expandafter\expandafter\expandafter\endgroup
- \expandafter\ifx\csname newluabytecode\endcsname\relax
- \else
- \newluabytecode\@expl@luadata@bytecode
- \fi
- \directlua{require("expl3")}%
-% \end{macrocode}
-% As the user might be making a custom format, no assumption is made about
-% matching package mode with only loading the \Lua{} code once. Instead, a
-% query to \Lua{} reveals what mode is in operation.
-% \begin{macrocode}
- \ifnum 0%
- \directlua{
- if status.ini_version then
- tex.write("1")
- end
- }>0 %
- \everyjob\expandafter{%
- \the\expandafter\everyjob
- \csname\detokenize{lua_now:n}\endcsname{require("expl3")}%
- }%
- \fi
- \fi
-\fi
-% \end{macrocode}
-%
-% \subsection{Engine requirements}
-%
-% The code currently requires \eTeX{}, the set of \enquote{\pdfTeX{}
-% extensions} \emph{including} \tn{expanded}, and for Unicode engines the
-% ability to generate arbitrary character tokens by expansion. That is covered
-% by all supported engines since \TeX{} Live 2019, which we therefore use
-% as a baseline for engine and \LaTeX{} format support.
-% For \LuaTeX, we require at least Lua 5.3 and the |token.set_lua| function.
-% This is available at least since \LuaTeX{} 1.10, which again is the one
-% in \TeX{} Live 2019. (u)p\TeX{} only gained \tn{ifincsname} for \TeX{}
-% Live 2020, but at present that primitive is unused in \pkg{expl3} so for
-% the present it's not tested. If and when that changes, we will need to
-% revisit the code here.
-% \begin{macrocode}
-\begingroup
- \def\next{\endgroup}%
- \def\ShortText{Required primitives not found}%
- \def\LongText%
- {%
- The L3 programming layer requires the e-TeX primitives and the
- \LineBreak 'pdfTeX utilities' as described in the README file.
- \LineBreak
- These are available in the engines\LineBreak
- - pdfTeX v1.40.20\LineBreak
- - XeTeX v0.999991\LineBreak
- - LuaTeX v1.10\LineBreak
- - e-(u)pTeX v3.8.2\LineBreak
- - Prote (2021)\LineBreak
- or later.\LineBreak
- \LineBreak
- }%
- \ifnum0%
- \expandafter\ifx\csname luatexversion\endcsname\relax
- \expandafter\ifx\csname expanded\endcsname\relax\else 1\fi
- \else
- \ifnum\luatexversion<110 \else 1\fi
- \fi
- =0 %
- \newlinechar`\^^J %
- \def\LineBreak{\noexpand\MessageBreak}%
- \expandafter\ifx\csname PackageError\endcsname\relax
- \def\LineBreak{^^J}%
- \begingroup
- \lccode`\~=`\ \lccode`\}=`\ %
- \lccode`\T=`\T\lccode`\H=`\H%
- \catcode`\ =11 %
-\lowercase{\endgroup\def\PackageError#1#2#3{%
-\begingroup\errorcontextlines-1\immediate\write0{}\errhelp{#3}\def%
-\ {#1 Error: #2.^^J^^J
-Type H <return> for immediate help}\def~{\errmessage{%
-\ }}~\endgroup}}%
- \fi
- \edef\next
- {%
- \noexpand\PackageError{expl3}{\ShortText}
- {\LongText Loading of expl3 will abort!}%
- \endgroup
- \noexpand\endinput
- }%
- \fi
-\next
-% \end{macrocode}
-%
-% \subsection{The \LaTeX3 code environment}
-%
-% The code environment is now set up.
-%
-% \begin{macro}{\ExplSyntaxOff}
-% Before changing any category codes, in package mode we need to save
-% the situation before loading. Note the set up here means that once applied
-% \cs{ExplSyntaxOff} becomes a \enquote{do nothing} command until
-% \cs{ExplSyntaxOn} is used.
-% \begin{macrocode}
-\protected\edef\ExplSyntaxOff
- {%
- \protected\def\noexpand\ExplSyntaxOff{}%
- \catcode 9 = \the\catcode 9\relax
- \catcode 32 = \the\catcode 32\relax
- \catcode 34 = \the\catcode 34\relax
- \catcode 58 = \the\catcode 58\relax
- \catcode 94 = \the\catcode 94\relax
- \catcode 95 = \the\catcode 95\relax
- \catcode 124 = \the\catcode 124\relax
- \catcode 126 = \the\catcode 126\relax
- \endlinechar = \the\endlinechar\relax
- \chardef\csname\detokenize{l_@@_expl_bool}\endcsname = 0\relax
- }%
-% \end{macrocode}
-% \end{macro}
-%
-% The code environment is now set up.
-% \begin{macrocode}
-\catcode 9 = 9\relax
-\catcode 32 = 9\relax
-\catcode 34 = 12\relax
-\catcode 58 = 11\relax
-\catcode 94 = 7\relax
-\catcode 95 = 11\relax
-\catcode 124 = 12\relax
-\catcode 126 = 10\relax
-\endlinechar = 32\relax
-% \end{macrocode}
-%
-% \begin{variable}{\l_@@_expl_bool}
-% The status for code syntax: this is on at present.
-% \begin{macrocode}
-\global\chardef\l_@@_expl_bool = 1\relax
-% \end{macrocode}
-%\end{variable}
-%
-% \begin{macro}{\ExplSyntaxOn}
-% The idea here is that multiple \cs{ExplSyntaxOn} calls are not
-% going to mess up category codes, and that multiple calls to
-% \cs{ExplSyntaxOff} are also not wasting time. Applying
-% \cs{ExplSyntaxOn} alters the definition of \cs{ExplSyntaxOff}
-% and so in package mode this function should not be used until after
-% the end of the loading process!
-% \begin{macrocode}
-\protected \def \ExplSyntaxOn
- {
- \bool_if:NF \l_@@_expl_bool
- {
- \cs_set_protected:Npe \ExplSyntaxOff
- {
- \char_set_catcode:nn { 9 } { \char_value_catcode:n { 9 } }
- \char_set_catcode:nn { 32 } { \char_value_catcode:n { 32 } }
- \char_set_catcode:nn { 34 } { \char_value_catcode:n { 34 } }
- \char_set_catcode:nn { 58 } { \char_value_catcode:n { 58 } }
- \char_set_catcode:nn { 94 } { \char_value_catcode:n { 94 } }
- \char_set_catcode:nn { 95 } { \char_value_catcode:n { 95 } }
- \char_set_catcode:nn { 124 } { \char_value_catcode:n { 124 } }
- \char_set_catcode:nn { 126 } { \char_value_catcode:n { 126 } }
- \tex_endlinechar:D =
- \tex_the:D \tex_endlinechar:D \scan_stop:
- \bool_set_false:N \l_@@_expl_bool
- \cs_set_protected:Npn \ExplSyntaxOff { }
- }
- }
- \char_set_catcode_ignore:n { 9 } % tab
- \char_set_catcode_ignore:n { 32 } % space
- \char_set_catcode_other:n { 34 } % double quote
- \char_set_catcode_letter:n { 58 } % colon
- \char_set_catcode_math_superscript:n { 94 } % circumflex
- \char_set_catcode_letter:n { 95 } % underscore
- \char_set_catcode_other:n { 124 } % pipe
- \char_set_catcode_space:n { 126 } % tilde
- \tex_endlinechar:D = 32 \scan_stop:
- \bool_set_true:N \l_@@_expl_bool
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3box.dtx b/macros/latex/contrib/l3kernel/l3box.dtx
deleted file mode 100644
index 08463db56d..0000000000
--- a/macros/latex/contrib/l3kernel/l3box.dtx
+++ /dev/null
@@ -1,2530 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3box.dtx
-%
-% Copyright (C) 2005-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3box} module\\ Boxes^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% Box variables contain typeset material that can be inserted on the
-% page or in other boxes. Their contents cannot be converted back to
-% lists of tokens.
-% There are three kinds of box operations: horizontal mode denoted
-% with prefix |\hbox_|, vertical mode with prefix |\vbox_|, and the
-% generic operations working in both modes with prefix |\box_|.
-% For instance, a new box variable containing the words \enquote{Hello,
-% world!} (in a horizontal box) can be obtained by the following code.
-% \begin{verbatim}
-% \box_new:N \l_hello_box
-% \hbox_set:Nn \l_hello_box { Hello, ~ world! }
-% \end{verbatim}
-% The argument is typeset inside a \TeX{} group so that any variables
-% assigned during the construction of this box restores its value
-% afterwards.
-%
-% Box variables from \pkg{l3box} are compatible with those of \LaTeXe{}
-% and plain \TeX{} and can be used interchangeably. The \pkg{l3box}
-% commands to construct boxes, such as \cs{hbox:n} or \cs{hbox_set:Nn},
-% are \enquote{color-safe}, meaning that
-% \begin{verbatim}
-% \hbox:n { \color_select:n { blue } Hello, } ~ world!
-% \end{verbatim}
-% will result in \enquote{Hello,} taking the color blue, but
-% \enquote{world!} remaining with the prevailing color outside the box.
-%
-% \section{Creating and initialising boxes}
-%
-% \begin{function}{\box_new:N, \box_new:c}
-% \begin{syntax}
-% \cs{box_new:N} \meta{box}
-% \end{syntax}
-% Creates a new \meta{box} or raises an error if the name is
-% already taken. The declaration is global. The \meta{box} is
-% initially void.
-% \end{function}
-%
-% \begin{function}{\box_clear:N, \box_clear:c, \box_gclear:N, \box_gclear:c}
-% \begin{syntax}
-% \cs{box_clear:N} \meta{box}
-% \end{syntax}
-% Clears the content of the \meta{box} by setting the box equal to
-% \cs{c_empty_box}.
-% \end{function}
-%
-% \begin{function}
-% {\box_clear_new:N, \box_clear_new:c, \box_gclear_new:N, \box_gclear_new:c}
-% \begin{syntax}
-% \cs{box_clear_new:N} \meta{box}
-% \end{syntax}
-% Ensures that the \meta{box} exists globally by applying
-% \cs{box_new:N} if necessary, then applies
-% \cs[index=box_clear:N]{box_(g)clear:N} to leave
-% the \meta{box} empty.
-% \end{function}
-%
-% \begin{function}
-% {
-% \box_set_eq:NN, \box_set_eq:cN, \box_set_eq:Nc, \box_set_eq:cc,
-% \box_gset_eq:NN, \box_gset_eq:cN, \box_gset_eq:Nc, \box_gset_eq:cc
-% }
-% \begin{syntax}
-% \cs{box_set_eq:NN} \meta{box_1} \meta{box_2}
-% \end{syntax}
-% Sets the content of \meta{box_1} equal to that of \meta{box_2}.
-% \end{function}
-%
-% \begin{function}[EXP, pTF, added=2012-03-03]
-% {\box_if_exist:N, \box_if_exist:c}
-% \begin{syntax}
-% \cs{box_if_exist_p:N} \meta{box}
-% \cs{box_if_exist:NTF} \meta{box} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests whether the \meta{box} is currently defined. This does not
-% check that the \meta{box} really is a box.
-% \end{function}
-%
-% \section{Using boxes}
-%
-% \begin{function}{\box_use:N, \box_use:c}
-% \begin{syntax}
-% \cs{box_use:N} \meta{box}
-% \end{syntax}
-% Inserts the current content of the \meta{box} onto the current
-% list for typesetting. An error is raised if the variable does
-% not exist or if it is invalid.
-% \begin{texnote}
-% This is the \TeX{} primitive \tn{copy}.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}{\box_move_right:nn, \box_move_left:nn}
-% \begin{syntax}
-% \cs{box_move_right:nn} \Arg{dim expr} \Arg{box function}
-% \end{syntax}
-% This function operates in vertical mode, and inserts the
-% material specified by the \meta{box function}
-% such that its reference point is displaced horizontally by the given
-% \meta{dim expr} from the reference point for typesetting, to the right
-% or left as appropriate. The \meta{box function} should be
-% a box operation such as \cs{box_use:N} |\<box>| or a \enquote{raw}
-% box specification such as \cs{vbox:n} |{ xyz }|.
-% \end{function}
-%
-% \begin{function}{\box_move_up:nn, \box_move_down:nn}
-% \begin{syntax}
-% \cs{box_move_up:nn} \Arg{dim expr} \Arg{box function}
-% \end{syntax}
-% This function operates in horizontal mode, and inserts the
-% material specified by the \meta{box function}
-% such that its reference point is displaced vertically by the given
-% \meta{dim expr} from the reference point for typesetting, up
-% or down as appropriate. The \meta{box function} should be
-% a box operation such as \cs{box_use:N} |\<box>| or a \enquote{raw}
-% box specification such as \cs{vbox:n} |{ xyz }|.
-% \end{function}
-%
-% \section{Measuring and setting box dimensions}
-%
-% \begin{function}{\box_dp:N, \box_dp:c}
-% \begin{syntax}
-% \cs{box_dp:N} \meta{box}
-% \end{syntax}
-% Calculates the depth (below the baseline) of the \meta{box}
-% in a form suitable for use in a \meta{dim expr}.
-% \begin{texnote}
-% This is the \TeX{} primitive \tn{dp}.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}{\box_ht:N, \box_ht:c}
-% \begin{syntax}
-% \cs{box_ht:N} \meta{box}
-% \end{syntax}
-% Calculates the height (above the baseline) of the \meta{box}
-% in a form suitable for use in a \meta{dim expr}.
-% \begin{texnote}
-% This is the \TeX{} primitive \tn{ht}.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}{\box_wd:N, \box_wd:c}
-% \begin{syntax}
-% \cs{box_wd:N} \meta{box}
-% \end{syntax}
-% Calculates the width of the \meta{box} in a form
-% suitable for use in a \meta{dim expr}.
-% \begin{texnote}
-% This is the \TeX{} primitive \tn{wd}.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[added = 2021-05-05]{\box_ht_plus_dp:N, \box_ht_plus_dp:c}
-% \begin{syntax}
-% \cs{box_ht_plus_dp:N} \meta{box}
-% \end{syntax}
-% Calculates the total vertical size (height plus depth) of the \meta{box}
-% in a form suitable for use in a \meta{dim expr}.
-% \end{function}
-%
-% \begin{function}[updated = 2019-01-22]
-% {
-% \box_set_dp:Nn, \box_set_dp:cn,
-% \box_gset_dp:Nn, \box_gset_dp:cn
-% }
-% \begin{syntax}
-% \cs{box_set_dp:Nn} \meta{box} \Arg{dim expr}
-% \end{syntax}
-% Set the depth (below the baseline) of the \meta{box} to the value of
-% the \Arg{dim expr}.
-% \end{function}
-%
-% \begin{function}[updated = 2019-01-22]
-% {
-% \box_set_ht:Nn, \box_set_ht:cn,
-% \box_gset_ht:Nn, \box_gset_ht:cn
-% }
-% \begin{syntax}
-% \cs{box_set_ht:Nn} \meta{box} \Arg{dim expr}
-% \end{syntax}
-% Set the height (above the baseline) of the \meta{box} to the value of
-% the \Arg{dim expr}.
-% \end{function}
-%
-% \begin{function}[updated = 2019-01-22]
-% {
-% \box_set_wd:Nn, \box_set_wd:cn,
-% \box_gset_wd:Nn, \box_gset_wd:cn
-% }
-% \begin{syntax}
-% \cs{box_set_wd:Nn} \meta{box} \Arg{dim expr}
-% \end{syntax}
-% Set the width of the \meta{box} to the value of the
-% \Arg{dim expr}.
-% \end{function}
-%
-% \section{Box conditionals}
-%
-% \begin{function}[EXP,pTF]{\box_if_empty:N, \box_if_empty:c}
-% \begin{syntax}
-% \cs{box_if_empty_p:N} \meta{box}
-% \cs{box_if_empty:NTF} \meta{box} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if \meta{box} is a empty (equal to \cs{c_empty_box}).
-% \end{function}
-%
-% \begin{function}[EXP,pTF]{\box_if_horizontal:N, \box_if_horizontal:c}
-% \begin{syntax}
-% \cs{box_if_horizontal_p:N} \meta{box}
-% \cs{box_if_horizontal:NTF} \meta{box} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if \meta{box} is a horizontal box.
-% \end{function}
-%
-% \begin{function}[EXP,pTF]{\box_if_vertical:N, \box_if_vertical:c}
-% \begin{syntax}
-% \cs{box_if_vertical_p:N} \meta{box}
-% \cs{box_if_vertical:NTF} \meta{box} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if \meta{box} is a vertical box.
-% \end{function}
-%
-% \section{The last box inserted}
-%
-% \begin{function}
-% {
-% \box_set_to_last:N, \box_set_to_last:c,
-% \box_gset_to_last:N, \box_gset_to_last:c
-% }
-% \begin{syntax}
-% \cs{box_set_to_last:N} \meta{box}
-% \end{syntax}
-% Sets the \meta{box} equal to the last item (box) added to the current
-% partial list, removing the item from the list at the same time. When
-% applied to the main vertical list, the \meta{box} is always void as
-% it is not possible to recover the last added item.
-% \end{function}
-%
-% \section{Constant boxes}
-%
-% \begin{variable}[updated = 2012-11-04]{\c_empty_box}
-% This is a permanently empty box, which is neither set as horizontal
-% nor vertical.
-% \begin{texnote}
-% At the \TeX{} level this is a void box.
-% \end{texnote}
-% \end{variable}
-%
-% \section{Scratch boxes}
-%
-% \begin{variable}[updated = 2012-11-04]{\l_tmpa_box, \l_tmpb_box}
-% Scratch boxes for local assignment. These are never used by
-% the kernel code, and so are safe for use with any \LaTeX3-defined
-% function. However, they may be overwritten by other non-kernel
-% code and so should only be used for short-term storage.
-% \end{variable}
-%
-% \begin{variable}{\g_tmpa_box, \g_tmpb_box}
-% Scratch boxes for global assignment. These are never used by
-% the kernel code, and so are safe for use with any \LaTeX3-defined
-% function. However, they may be overwritten by other non-kernel
-% code and so should only be used for short-term storage.
-% \end{variable}
-%
-% \section{Viewing box contents}
-%
-% \begin{function}[updated = 2012-05-11]{\box_show:N, \box_show:c}
-% \begin{syntax}
-% \cs{box_show:N} \meta{box}
-% \end{syntax}
-% Shows full details of the content of the \meta{box} in the terminal.
-% \end{function}
-%
-% \begin{function}[added = 2012-05-11]{\box_show:Nnn, \box_show:cnn}
-% \begin{syntax}
-% \cs{box_show:Nnn} \meta{box} \Arg{int expr_1} \Arg{int expr_2}
-% \end{syntax}
-% Display the contents of \meta{box} in the terminal, showing the first
-% \meta{int expr_1} items of the box, and descending into \meta{int expr_2}
-% group levels.
-% \end{function}
-%
-% \begin{function}[added = 2012-05-11]{\box_log:N, \box_log:c}
-% \begin{syntax}
-% \cs{box_log:N} \meta{box}
-% \end{syntax}
-% Writes full details of the content of the \meta{box} to the log.
-% \end{function}
-%
-% \begin{function}[added = 2012-05-11]{\box_log:Nnn, \box_log:cnn}
-% \begin{syntax}
-% \cs{box_log:Nnn} \meta{box} \Arg{int expr_1} \Arg{int expr_2}
-% \end{syntax}
-% Writes the contents of \meta{box} to the log, showing the first
-% \meta{int expr_1} items of the box, and descending into \meta{int expr_2}
-% group levels.
-% \end{function}
-%
-% \section{Boxes and color}
-%
-% All \LaTeX{}3 boxes are \enquote{color safe}: a color set inside the box
-% stops applying after the end of the box has occurred.
-%
-% \section{Horizontal mode boxes}
-%
-% \begin{function}[updated = 2017-04-05]{\hbox:n}
-% \begin{syntax}
-% \cs{hbox:n} \Arg{contents}
-% \end{syntax}
-% Typesets the \meta{contents} into a horizontal box of natural
-% width and then includes this box in the current list for typesetting.
-% \end{function}
-%
-% \begin{function}[updated = 2017-04-05]{\hbox_to_wd:nn}
-% \begin{syntax}
-% \cs{hbox_to_wd:nn} \Arg{dim expr} \Arg{contents}
-% \end{syntax}
-% Typesets the \meta{contents} into a horizontal box of width
-% \meta{dim expr} and then includes this box in the current list for
-% typesetting.
-% \end{function}
-%
-% \begin{function}[updated = 2017-04-05]{\hbox_to_zero:n}
-% \begin{syntax}
-% \cs{hbox_to_zero:n} \Arg{contents}
-% \end{syntax}
-% Typesets the \meta{contents} into a horizontal box of zero width
-% and then includes this box in the current list for typesetting.
-% \end{function}
-%
-% \begin{function}[updated = 2017-04-05]
-% {\hbox_set:Nn, \hbox_set:cn, \hbox_gset:Nn, \hbox_gset:cn}
-% \begin{syntax}
-% \cs{hbox_set:Nn} \meta{box} \Arg{contents}
-% \end{syntax}
-% Typesets the \meta{contents} at natural width and then stores the
-% result inside the \meta{box}.
-% \end{function}
-%
-% \begin{function}[updated = 2017-04-05]
-% {
-% \hbox_set_to_wd:Nnn, \hbox_set_to_wd:cnn,
-% \hbox_gset_to_wd:Nnn, \hbox_gset_to_wd:cnn
-% }
-% \begin{syntax}
-% \cs{hbox_set_to_wd:Nnn} \meta{box} \Arg{dim expr} \Arg{contents}
-% \end{syntax}
-% Typesets the \meta{contents} to the width given by the \meta{dim expr}
-% and then stores the result inside the \meta{box}.
-% \end{function}
-%
-% \begin{function}[added = 2020-08-25]{\hbox_overlap_center:n}
-% \begin{syntax}
-% \cs{hbox_overlap_center:n} \Arg{contents}
-% \end{syntax}
-% Typesets the \meta{contents} into a horizontal box of zero width
-% such that material protrudes equally to both sides of the insertion point.
-% \end{function}
-%
-% \begin{function}[updated = 2017-04-05]{\hbox_overlap_right:n}
-% \begin{syntax}
-% \cs{hbox_overlap_right:n} \Arg{contents}
-% \end{syntax}
-% Typesets the \meta{contents} into a horizontal box of zero width
-% such that material protrudes to the right of the insertion point.
-% \end{function}
-%
-% \begin{function}[updated = 2017-04-05]{\hbox_overlap_left:n}
-% \begin{syntax}
-% \cs{hbox_overlap_left:n} \Arg{contents}
-% \end{syntax}
-% Typesets the \meta{contents} into a horizontal box of zero width
-% such that material protrudes to the left of the insertion point.
-% \end{function}
-%
-% \begin{function}[updated = 2017-04-05]
-% {
-% \hbox_set:Nw, \hbox_set:cw,
-% \hbox_set_end:,
-% \hbox_gset:Nw, \hbox_gset:cw,
-% \hbox_gset_end:
-% }
-% \begin{syntax}
-% \cs{hbox_set:Nw} \meta{box} \meta{contents} \cs{hbox_set_end:}
-% \end{syntax}
-% Typesets the \meta{contents} at natural width and then stores the
-% result inside the \meta{box}. In contrast
-% to \cs{hbox_set:Nn} this function does not absorb the argument
-% when finding the \meta{content}, and so can be used in circumstances
-% where the \meta{content} may not be a simple argument.
-% \end{function}
-%
-% \begin{function}[added = 2017-06-08]
-% {
-% \hbox_set_to_wd:Nnw, \hbox_set_to_wd:cnw,
-% \hbox_gset_to_wd:Nnw, \hbox_gset_to_wd:cnw
-% }
-% \begin{syntax}
-% \cs{hbox_set_to_wd:Nnw} \meta{box} \Arg{dim expr} \meta{contents} \cs{hbox_set_end:}
-% \end{syntax}
-% Typesets the \meta{contents} to the width given by the \meta{dim expr}
-% and then stores the result inside the \meta{box}. In contrast
-% to \cs{hbox_set_to_wd:Nnn} this function does not absorb the argument
-% when finding the \meta{content}, and so can be used in circumstances
-% where the \meta{content} may not be a simple argument
-% \end{function}
-%
-% \begin{function}{\hbox_unpack:N, \hbox_unpack:c}
-% \begin{syntax}
-% \cs{hbox_unpack:N} \meta{box}
-% \end{syntax}
-% Unpacks the content of the horizontal \meta{box}, retaining any stretching
-% or shrinking applied when the \meta{box} was set.
-% \begin{texnote}
-% This is the \TeX{} primitive \tn{unhcopy}.
-% \end{texnote}
-% \end{function}
-%
-% \section{Vertical mode boxes}
-%
-% Vertical boxes inherit their baseline from their contents. The
-% standard case is that the baseline of the box is at the same position
-% as that of the last item added to the box. This means that the box
-% has no depth unless the last item added to it had depth. As a
-% result most vertical boxes have a large height value and small or
-% zero depth. The exception are |_top| boxes, where the reference point
-% is that of the first item added. These tend to have a large depth and
-% small height, although the latter is typically non-zero.
-%
-% \begin{function}[updated = 2017-04-05]{\vbox:n}
-% \begin{syntax}
-% \cs{vbox:n} \Arg{contents}
-% \end{syntax}
-% Typesets the \meta{contents} into a vertical box of natural height
-% and includes this box in the current list for typesetting.
-% \end{function}
-%
-% \begin{function}[updated = 2017-04-05]{\vbox_top:n}
-% \begin{syntax}
-% \cs{vbox_top:n} \Arg{contents}
-% \end{syntax}
-% Typesets the \meta{contents} into a vertical box of natural height
-% and includes this box in the current list for typesetting. The
-% baseline of the box is equal to that of the \emph{first}
-% item added to the box.
-% \end{function}
-%
-% \begin{function}[updated = 2017-04-05]{\vbox_to_ht:nn}
-% \begin{syntax}
-% \cs{vbox_to_ht:nn} \Arg{dim expr} \Arg{contents}
-% \end{syntax}
-% Typesets the \meta{contents} into a vertical box of height
-% \meta{dim expr} and then includes this box in the current list for
-% typesetting.
-% \end{function}
-%
-% \begin{function}[updated = 2017-04-05]{\vbox_to_zero:n}
-% \begin{syntax}
-% \cs{vbox_to_zero:n} \Arg{contents}
-% \end{syntax}
-% Typesets the \meta{contents} into a vertical box of zero height
-% and then includes this box in the current list for typesetting.
-% \end{function}
-%
-% \begin{function}[updated = 2017-04-05]
-% {\vbox_set:Nn, \vbox_set:cn, \vbox_gset:Nn, \vbox_gset:cn}
-% \begin{syntax}
-% \cs{vbox_set:Nn} \meta{box} \Arg{contents}
-% \end{syntax}
-% Typesets the \meta{contents} at natural height and then stores the
-% result inside the \meta{box}.
-% \end{function}
-%
-% \begin{function}[updated = 2017-04-05]
-% {\vbox_set_top:Nn, \vbox_set_top:cn, \vbox_gset_top:Nn, \vbox_gset_top:cn}
-% \begin{syntax}
-% \cs{vbox_set_top:Nn} \meta{box} \Arg{contents}
-% \end{syntax}
-% Typesets the \meta{contents} at natural height and then stores the
-% result inside the \meta{box}. The baseline of the box is equal
-% to that of the \emph{first} item added to the box.
-% \end{function}
-%
-% \begin{function}[updated = 2017-04-05]
-% {
-% \vbox_set_to_ht:Nnn, \vbox_set_to_ht:cnn,
-% \vbox_gset_to_ht:Nnn, \vbox_gset_to_ht:cnn
-% }
-% \begin{syntax}
-% \cs{vbox_set_to_ht:Nnn} \meta{box} \Arg{dim expr} \Arg{contents}
-% \end{syntax}
-% Typesets the \meta{contents} to the height given by the
-% \meta{dim expr} and then stores the result inside the \meta{box}.
-% \end{function}
-%
-% \begin{function}[updated = 2017-04-05]
-% {
-% \vbox_set:Nw, \vbox_set:cw,
-% \vbox_set_end:,
-% \vbox_gset:Nw, \vbox_gset:cw,
-% \vbox_gset_end:
-% }
-% \begin{syntax}
-% \cs{vbox_set:Nw} \meta{box} \meta{contents} \cs{vbox_set_end:}
-% \end{syntax}
-% Typesets the \meta{contents} at natural height and then stores the
-% result inside the \meta{box}. In contrast
-% to \cs{vbox_set:Nn} this function does not absorb the argument
-% when finding the \meta{content}, and so can be used in circumstances
-% where the \meta{content} may not be a simple argument.
-% \end{function}
-%
-% \begin{function}[added = 2017-06-08]
-% {
-% \vbox_set_to_ht:Nnw, \vbox_set_to_ht:cnw,
-% \vbox_gset_to_ht:Nnw, \vbox_gset_to_ht:cnw
-% }
-% \begin{syntax}
-% \cs{vbox_set_to_ht:Nnw} \meta{box} \Arg{dim expr} \meta{contents} \cs{vbox_set_end:}
-% \end{syntax}
-% Typesets the \meta{contents} to the height given by the \meta{dim expr}
-% and then stores the result inside the \meta{box}. In contrast
-% to \cs{vbox_set_to_ht:Nnn} this function does not absorb the argument
-% when finding the \meta{content}, and so can be used in circumstances
-% where the \meta{content} may not be a simple argument
-% \end{function}
-%
-%
-% \begin{function}[updated = 2018-12-29]
-% {
-% \vbox_set_split_to_ht:NNn, \vbox_set_split_to_ht:cNn,
-% \vbox_set_split_to_ht:Ncn, \vbox_set_split_to_ht:ccn,
-% \vbox_gset_split_to_ht:NNn, \vbox_gset_split_to_ht:cNn,
-% \vbox_gset_split_to_ht:Ncn, \vbox_gset_split_to_ht:ccn
-% }
-% \begin{syntax}
-% \cs{vbox_set_split_to_ht:NNn} \meta{box_1} \meta{box_2} \Arg{dim expr}
-% \end{syntax}
-% Sets \meta{box_1} to contain material to the height given by the
-% \meta{dim expr} by removing content from the top of \meta{box_2}
-% (which must be a vertical box).
-% \end{function}
-%
-% \begin{function}{\vbox_unpack:N, \vbox_unpack:c}
-% \begin{syntax}
-% \cs{vbox_unpack:N} \meta{box}
-% \end{syntax}
-% Unpacks the content of the vertical \meta{box}, retaining any stretching
-% or shrinking applied when the \meta{box} was set.
-% \begin{texnote}
-% This is the \TeX{} primitive \tn{unvcopy}.
-% \end{texnote}
-% \end{function}
-%
-% \section{Using boxes efficiently}
-%
-% The functions above for using box contents work in exactly the same
-% way as for any other \pkg{expl3} variable. However, for efficiency
-% reasons, it is also useful to have functions which \emph{drop} box
-% contents on use. When a box is dropped, the box becomes empty at the group
-% level \emph{where the box was originally set} rather than necessarily
-% \emph{at the current group level}. For example, with
-% \begin{verbatim}
-% \hbox_set:Nn \l_tmpa_box { A }
-% \group_begin:
-% \hbox_set:Nn \l_tmpa_box { B }
-% \group_begin:
-% \box_use_drop:N \l_tmpa_box
-% \group_end:
-% \box_show:N \l_tmpa_box
-% \group_end:
-% \box_show:N \l_tmpa_box
-% \end{verbatim}
-% the first use of \cs{box_show:N} will show an entirely cleared (void) box, and the
-% second will show the letter |A| in the box.
-%
-% These functions should be preferred when the content of the box is no
-% longer required after use. Note that due to the unusual scoping behaviour of
-% \texttt{drop} functions they may be applied to both local and global boxes:
-% the latter will naturally be set and thus cleared at a global level.
-%
-% \begin{function}{\box_use_drop:N, \box_use_drop:c}
-% \begin{syntax}
-% \cs{box_use_drop:N} \meta{box}
-% \end{syntax}
-% Inserts the current content of the \meta{box} onto the current
-% list for typesetting then drops the box content. An error is raised if the
-% variable does not exist or if it is invalid. This function may be applied to
-% local or global boxes.
-% \begin{texnote}
-% This is the \TeX{} primitive \tn{box}.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[added = 2019-01-17]
-% {
-% \box_set_eq_drop:NN, \box_set_eq_drop:cN,
-% \box_set_eq_drop:Nc, \box_set_eq_drop:cc
-% }
-% \begin{syntax}
-% \cs{box_set_eq_drop:NN} \meta{box_1} \meta{box_2}
-% \end{syntax}
-% Sets the content of \meta{box_1} equal to that of \meta{box_2}, then
-% drops \meta{box_2}.
-% \end{function}
-%
-% \begin{function}[added = 2019-01-17]
-% {
-% \box_gset_eq_drop:NN, \box_gset_eq_drop:cN,
-% \box_gset_eq_drop:Nc, \box_gset_eq_drop:cc
-% }
-% \begin{syntax}
-% \cs{box_gset_eq_drop:NN} \meta{box_1} \meta{box_2}
-% \end{syntax}
-% Sets the content of \meta{box_1} globally equal to that of \meta{box_2},
-% then drops \meta{box_2}.
-% \end{function}
-%
-% \begin{function}[added = 2019-01-17]
-% {\hbox_unpack_drop:N, \hbox_unpack_drop:c}
-% \begin{syntax}
-% \cs{hbox_unpack_drop:N} \meta{box}
-% \end{syntax}
-% Unpacks the content of the horizontal \meta{box}, retaining any stretching
-% or shrinking applied when the \meta{box} was set. The original \meta{box}
-% is then dropped.
-% \begin{texnote}
-% This is the \TeX{} primitive \tn{unhbox}.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[added = 2019-01-17]
-% {\vbox_unpack_drop:N, \vbox_unpack_drop:c}
-% \begin{syntax}
-% \cs{vbox_unpack_drop:N} \meta{box}
-% \end{syntax}
-% Unpacks the content of the vertical \meta{box}, retaining any stretching
-% or shrinking applied when the \meta{box} was set. The original \meta{box}
-% is then dropped.
-% \begin{texnote}
-% This is the \TeX{} primitive \tn{unvbox}.
-% \end{texnote}
-% \end{function}
-%
-% \section{Affine transformations}
-%
-% Affine transformations are changes which (informally) preserve straight
-% lines. Simple translations are affine transformations, but are better handled
-% in \TeX{} by doing the translation first, then inserting an unmodified box.
-% On the other hand, rotation and resizing of boxed material can best be
-% handled by modifying boxes. These transformations are described here.
-%
-% \begin{function}[added = 2017-04-04, updated = 2019-01-22]
-% {
-% \box_autosize_to_wd_and_ht:Nnn, \box_autosize_to_wd_and_ht:cnn,
-% \box_gautosize_to_wd_and_ht:Nnn, \box_gautosize_to_wd_and_ht:cnn,
-% }
-% \begin{syntax}
-% \cs{box_autosize_to_wd_and_ht:Nnn} \meta{box} \Arg{x-size} \Arg{y-size}
-% \end{syntax}
-% Resizes the \meta{box} to fit within the given \meta{x-size} (horizontally)
-% and \meta{y-size} (vertically); both of the sizes are dimension
-% expressions. The \meta{y-size} is the height only: it does not include any
-% depth. The updated \meta{box} is an |hbox|, irrespective of the nature
-% of the \meta{box} before the resizing is applied. The final size of the
-% \meta{box} is the smaller of \Arg{x-size} and \Arg{y-size},
-% \emph{i.e.}~the result fits within the dimensions specified. Negative
-% sizes cause the material in the \meta{box} to be reversed in direction,
-% but the reference point of the \meta{box} is unchanged. Thus a negative
-% \meta{y-size} results in the \meta{box} having a depth dependent on the
-% height of the original and \emph{vice versa}.
-% \end{function}
-%
-% \begin{function}[added = 2017-04-04, updated = 2019-01-22]
-% {
-% \box_autosize_to_wd_and_ht_plus_dp:Nnn,
-% \box_autosize_to_wd_and_ht_plus_dp:cnn,
-% \box_gautosize_to_wd_and_ht_plus_dp:Nnn,
-% \box_gautosize_to_wd_and_ht_plus_dp:cnn
-% }
-% \begin{syntax}
-% \cs{box_autosize_to_wd_and_ht_plus_dp:Nnn} \meta{box} \Arg{x-size} \Arg{y-size}
-% \end{syntax}
-% Resizes the \meta{box} to fit within the given \meta{x-size} (horizontally)
-% and \meta{y-size} (vertically); both of the sizes are dimension
-% expressions. The \meta{y-size} is the total vertical size (height plus
-% depth). The updated \meta{box} is an |hbox|, irrespective of the nature
-% of the \meta{box} before the resizing is applied. The final size of the
-% \meta{box} is the smaller of \Arg{x-size} and \Arg{y-size},
-% \emph{i.e.}~the result fits within the dimensions specified. Negative
-% sizes cause the material in the \meta{box} to be reversed in direction,
-% but the reference point of the \meta{box} is unchanged. Thus a negative
-% \meta{y-size} results in the \meta{box} having a depth dependent on the
-% height of the original and \emph{vice versa}.
-% \end{function}
-%
-% \begin{function}[updated = 2019-01-22]
-% {
-% \box_resize_to_ht:Nn, \box_resize_to_ht:cn,
-% \box_gresize_to_ht:Nn, \box_gresize_to_ht:cn
-% }
-% \begin{syntax}
-% \cs{box_resize_to_ht:Nn} \meta{box} \Arg{y-size}
-% \end{syntax}
-% Resizes the \meta{box} to \meta{y-size} (vertically), scaling the horizontal
-% size by the same amount; \meta{y-size} is a dimension expression. The
-% \meta{y-size} is the height only: it does not include any depth. The updated
-% \meta{box} is an |hbox|, irrespective of the nature of the \meta{box}
-% before the resizing is applied. A negative \meta{y-size} causes the
-% material in the \meta{box} to be reversed in direction, but the reference
-% point of the \meta{box} is unchanged. Thus a negative \meta{y-size}
-% results in the \meta{box} having a depth dependent on the height of the
-% original and \emph{vice versa}.
-% \end{function}
-%
-% \begin{function}[updated = 2019-01-22]
-% {
-% \box_resize_to_ht_plus_dp:Nn, \box_resize_to_ht_plus_dp:cn,
-% \box_gresize_to_ht_plus_dp:Nn, \box_gresize_to_ht_plus_dp:cn,
-% }
-% \begin{syntax}
-% \cs{box_resize_to_ht_plus_dp:Nn} \meta{box} \Arg{y-size}
-% \end{syntax}
-% Resizes the \meta{box} to \meta{y-size} (vertically), scaling the horizontal
-% size by the same amount; \meta{y-size} is a dimension expression. The
-% \meta{y-size} is the total vertical size (height plus depth). The updated
-% \meta{box} is an |hbox|, irrespective of the nature of the \meta{box}
-% before the resizing is applied. A negative \meta{y-size} causes
-% the material in the \meta{box} to be reversed in direction, but the
-% reference point of the \meta{box} is unchanged. Thus a negative
-% \meta{y-size} results in the \meta{box} having a depth dependent on the
-% height of the original and \emph{vice versa}.
-% \end{function}
-%
-% \begin{function}[updated = 2019-01-22]
-% {
-% \box_resize_to_wd:Nn, \box_resize_to_wd:cn,
-% \box_gresize_to_wd:Nn, \box_gresize_to_wd:cn
-% }
-% \begin{syntax}
-% \cs{box_resize_to_wd:Nn} \meta{box} \Arg{x-size}
-% \end{syntax}
-% Resizes the \meta{box} to \meta{x-size} (horizontally), scaling the vertical
-% size by the same amount; \meta{x-size} is a dimension expression. The updated
-% \meta{box} is an |hbox|, irrespective of the nature of the \meta{box}
-% before the resizing is applied. A negative \meta{x-size} causes the
-% material in the \meta{box} to be reversed in direction, but the reference
-% point of the \meta{box} is unchanged. Thus a negative \meta{x-size}
-% results in the \meta{box} having a depth dependent on the height of the
-% original and \emph{vice versa}.
-% \end{function}
-%
-% \begin{function}[added = 2014-07-03, updated = 2019-01-22]
-% {
-% \box_resize_to_wd_and_ht:Nnn, \box_resize_to_wd_and_ht:cnn,
-% \box_gresize_to_wd_and_ht:Nnn, \box_gresize_to_wd_and_ht:cnn
-% }
-% \begin{syntax}
-% \cs{box_resize_to_wd_and_ht:Nnn} \meta{box} \Arg{x-size} \Arg{y-size}
-% \end{syntax}
-% Resizes the \meta{box} to \meta{x-size} (horizontally) and \meta{y-size}
-% (vertically): both of the sizes are dimension expressions. The
-% \meta{y-size} is the height only and does not include any depth. The updated
-% \meta{box} is an |hbox|, irrespective of the nature of the \meta{box}
-% before the resizing is applied. Negative sizes cause the material in
-% the \meta{box} to be reversed in direction, but the reference point of the
-% \meta{box} is unchanged. Thus a negative \meta{y-size} results in
-% the \meta{box} having a depth dependent on the height of the original and
-% \emph{vice versa}.
-% \end{function}
-%
-% \begin{function}[added = 2017-04-06, updated = 2019-01-22]
-% {
-% \box_resize_to_wd_and_ht_plus_dp:Nnn,
-% \box_resize_to_wd_and_ht_plus_dp:cnn,
-% \box_gresize_to_wd_and_ht_plus_dp:Nnn,
-% \box_gresize_to_wd_and_ht_plus_dp:cnn
-% }
-% \begin{syntax}
-% \cs{box_resize_to_wd_and_ht_plus_dp:Nnn} \meta{box} \Arg{x-size} \Arg{y-size}
-% \end{syntax}
-% Resizes the \meta{box} to \meta{x-size} (horizontally) and \meta{y-size}
-% (vertically): both of the sizes are dimension expressions. The
-% \meta{y-size} is the total vertical size (height plus depth). The updated
-% \meta{box} is an |hbox|, irrespective of the nature of the \meta{box}
-% before the resizing is applied. Negative sizes cause the material in
-% the \meta{box} to be reversed in direction, but the reference point of the
-% \meta{box} is unchanged. Thus a negative \meta{y-size} results in
-% the \meta{box} having a depth dependent on the height of the original and
-% \emph{vice versa}.
-% \end{function}
-%
-% \begin{function}[updated = 2019-01-22]
-% {
-% \box_rotate:Nn, \box_rotate:cn,
-% \box_grotate:Nn, \box_grotate:cn
-% }
-% \begin{syntax}
-% \cs{box_rotate:Nn} \meta{box} \Arg{angle}
-% \end{syntax}
-% Rotates the \meta{box} by \meta{angle} (a \meta{fp expr} in degrees)
-% anti-clockwise about
-% its reference point. The reference point of the updated box is moved
-% horizontally such that it is at the left side of the smallest rectangle
-% enclosing the rotated material. The updated \meta{box} is an |hbox|,
-% irrespective of the nature of the \meta{box} before the rotation is applied.
-% \end{function}
-%
-% \begin{function}[updated = 2019-01-22]
-% {
-% \box_scale:Nnn, \box_scale:cnn,
-% \box_gscale:Nnn, \box_gscale:cnn
-% }
-% \begin{syntax}
-% \cs{box_scale:Nnn} \meta{box} \Arg{x-scale} \Arg{y-scale}
-% \end{syntax}
-% Scales the \meta{box} by factors \meta{x-scale} and \meta{y-scale} in
-% the horizontal and vertical directions, respectively (both scales are
-% \meta{fp expr}). The updated \meta{box} is an |hbox|, irrespective
-% of the nature of the \meta{box} before the scaling is applied. Negative
-% scalings cause the material in the \meta{box} to be reversed in
-% direction, but the reference point of the \meta{box} is unchanged.
-% Thus a negative \meta{y-scale} results in the \meta{box} having a depth
-% dependent on the height of the original and \emph{vice versa}.
-% \end{function}
-%
-% \section{Viewing part of a box}
-%
-% \begin{function}[updated = 2023-04-14]
-% {
-% \box_set_clipped:N, \box_set_clipped:c,
-% \box_gset_clipped:N, \box_gset_clipped:c
-% }
-% \begin{syntax}
-% \cs{box_set_clipped:N} \meta{box}
-% \end{syntax}
-% Clips the \meta{box} in the output so that only material inside the
-% bounding box is displayed in the output. The updated \meta{box} is an
-% hbox, irrespective of the nature of the \meta{box} before the clipping is
-% applied. Additional box levels are also generated by this operation.
-%
-% \begin{texnote}
-% Clipping is implemented by the driver, and as such the full content of
-% the box is placed in the output file. Thus clipping does not remove
-% any information from the raw output, and hidden material can therefore
-% be viewed by direct examination of the file.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[added = 2019-01-23]
-% {
-% \box_set_trim:Nnnnn, \box_set_trim:cnnnn,
-% \box_gset_trim:Nnnnn, \box_gset_trim:cnnnn
-% }
-% \begin{syntax}
-% \cs{box_set_trim:Nnnnn} \meta{box} \Arg{left} \Arg{bottom} \Arg{right} \Arg{top}
-% \end{syntax}
-% Adjusts the bounding box of the \meta{box} \meta{left} is removed from
-% the left-hand edge of the bounding box, \meta{right} from the right-hand
-% edge and so fourth. All adjustments are \meta{dim exprs}.
-% Material outside of the bounding box is still displayed in the output
-% unless \cs{box_set_clipped:N} is subsequently applied.
-% The updated \meta{box} is an
-% hbox, irrespective of the nature of the \meta{box} before the trim
-% operation is applied.
-% Additional box levels are also generated by this operation.
-% The behavior of the operation where the trims requested is
-% greater than the size of the box is undefined.
-% \end{function}
-%
-% \begin{function}[added = 2019-01-23]
-% {
-% \box_set_viewport:Nnnnn, \box_set_viewport:cnnnn,
-% \box_gset_viewport:Nnnnn, \box_gset_viewport:cnnnn
-% }
-% \begin{syntax}
-% \cs{box_set_viewport:Nnnnn} \meta{box} \Arg{llx} \Arg{lly} \Arg{urx} \Arg{ury}
-% \end{syntax}
-% Adjusts the bounding box of the \meta{box} such that it has lower-left
-% co-ordinates (\meta{llx}, \meta{lly}) and upper-right co-ordinates
-% (\meta{urx}, \meta{ury}). All four co-ordinate positions are
-% \meta{dim exprs}. Material outside of the bounding box is
-% still displayed in the output unless \cs{box_set_clipped:N} is
-% subsequently applied.
-% The updated \meta{box} is an
-% hbox, irrespective of the nature of the \meta{box} before the viewport
-% operation is applied.
-% Additional box levels are also generated by this operation.
-% \end{function}
-%
-% \section{Primitive box conditionals}
-%
-% \begin{function}[EXP]{\if_hbox:N}
-% \begin{syntax}
-% \cs{if_hbox:N} \meta{box}
-% ~~\meta{true code}
-% \cs{else:}
-% ~~\meta{false code}
-% \cs{fi:}
-% \end{syntax}
-% Tests is \meta{box} is a horizontal box.
-% \begin{texnote}
-% This is the \TeX{} primitive \tn{ifhbox}.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[EXP]{\if_vbox:N}
-% \begin{syntax}
-% \cs{if_vbox:N} \meta{box}
-% ~~\meta{true code}
-% \cs{else:}
-% ~~\meta{false code}
-% \cs{fi:}
-% \end{syntax}
-% Tests is \meta{box} is a vertical box.
-% \begin{texnote}
-% This is the \TeX{} primitive \tn{ifvbox}.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[EXP]{\if_box_empty:N}
-% \begin{syntax}
-% \cs{if_box_empty:N} \meta{box}
-% ~~\meta{true code}
-% \cs{else:}
-% ~~\meta{false code}
-% \cs{fi:}
-% \end{syntax}
-% Tests is \meta{box} is an empty (void) box.
-% \begin{texnote}
-% This is the \TeX{} primitive \tn{ifvoid}.
-% \end{texnote}
-% \end{function}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3box} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=box>
-% \end{macrocode}
-%
-% \subsection{Support code}
-%
-% \begin{macro}{\@@_dim_eval:w}
-% \begin{macro}{\@@_dim_eval:n}
-% Evaluating a dimension expression expandably. The only
-% difference with \cs{dim_eval:n} is the lack of \cs{dim_use:N}, to
-% produce an internal dimension rather than expand it into characters.
-% \begin{macrocode}
-\cs_new_eq:NN \@@_dim_eval:w \tex_dimexpr:D
-\cs_new:Npn \@@_dim_eval:n #1
- { \@@_dim_eval:w #1 \scan_stop: }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\__kernel_kern:n}
-% We need kerns in a few places. At present, we don't have a module for
-% this concept, so it goes in at first use: here. The idea is to avoid
-% repeated use of the bare primitive.
-% \begin{macrocode}
-\cs_new_protected:Npn \__kernel_kern:n #1
- { \tex_kern:D \@@_dim_eval:n {#1} }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Creating and initialising boxes}
-%
-% \TestFiles{m3box001.lvt}
-%
-% \begin{macro}{\box_new:N, \box_new:c}
-% Defining a new \meta{box} register: remember that box $255$ is not
-% generally available.
-% \begin{macrocode}
-\cs_new_protected:Npn \box_new:N #1
- {
- \__kernel_chk_if_free_cs:N #1
- \cs:w newbox \cs_end: #1
- }
-\cs_generate_variant:Nn \box_new:N { c }
-% \end{macrocode}
-%
-% \begin{macro}{\box_clear:N, \box_clear:c}
-% \begin{macro}{\box_gclear:N, \box_gclear:c}
-% \testfile*
-% Clear a \meta{box} register.
-% \begin{macrocode}
-\cs_new_protected:Npn \box_clear:N #1
- { \box_set_eq:NN #1 \c_empty_box }
-\cs_new_protected:Npn \box_gclear:N #1
- { \box_gset_eq:NN #1 \c_empty_box }
-\cs_generate_variant:Nn \box_clear:N { c }
-\cs_generate_variant:Nn \box_gclear:N { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\box_clear_new:N, \box_clear_new:c}
-% \begin{macro}{\box_gclear_new:N, \box_gclear_new:c}
-% \testfile*
-% Clear or new.
-% \begin{macrocode}
-\cs_new_protected:Npn \box_clear_new:N #1
- { \box_if_exist:NTF #1 { \box_clear:N #1 } { \box_new:N #1 } }
-\cs_new_protected:Npn \box_gclear_new:N #1
- { \box_if_exist:NTF #1 { \box_gclear:N #1 } { \box_new:N #1 } }
-\cs_generate_variant:Nn \box_clear_new:N { c }
-\cs_generate_variant:Nn \box_gclear_new:N { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {\box_set_eq:NN, \box_set_eq:cN, \box_set_eq:Nc, \box_set_eq:cc}
-% \testfile*
-% \begin{macro}
-% {\box_gset_eq:NN, \box_gset_eq:cN, \box_gset_eq:Nc, \box_gset_eq:cc}
-% \testfile*
-% Assigning the contents of a box to be another box.
-% \begin{macrocode}
-\cs_new_protected:Npn \box_set_eq:NN #1#2
- { \tex_setbox:D #1 \tex_copy:D #2 }
-\cs_new_protected:Npn \box_gset_eq:NN #1#2
- { \tex_global:D \tex_setbox:D #1 \tex_copy:D #2 }
-\cs_generate_variant:Nn \box_set_eq:NN { c , Nc , cc }
-\cs_generate_variant:Nn \box_gset_eq:NN { c , Nc , cc }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \box_set_eq_drop:NN, \box_set_eq_drop:cN,
-% \box_set_eq_drop:Nc, \box_set_eq_drop:cc
-% }
-% \begin{macro}
-% {
-% \box_gset_eq_drop:NN, \box_gset_eq_drop:cN,
-% \box_gset_eq_drop:Nc, \box_gset_eq_drop:cc
-% }
-% Assigning the contents of a box to be another box, then drops the
-% original box.
-% \begin{macrocode}
-\cs_new_protected:Npn \box_set_eq_drop:NN #1#2
- { \tex_setbox:D #1 \tex_box:D #2 }
-\cs_new_protected:Npn \box_gset_eq_drop:NN #1#2
- { \tex_global:D \tex_setbox:D #1 \tex_box:D #2 }
-\cs_generate_variant:Nn \box_set_eq_drop:NN { c , Nc , cc }
-\cs_generate_variant:Nn \box_gset_eq_drop:NN { c , Nc , cc }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\box_if_exist:N, \box_if_exist:c}
-% Copies of the \texttt{cs} functions defined in \pkg{l3basics}.
-% \begin{macrocode}
-\prg_new_eq_conditional:NNn \box_if_exist:N \cs_if_exist:N
- { TF , T , F , p }
-\prg_new_eq_conditional:NNn \box_if_exist:c \cs_if_exist:c
- { TF , T , F , p }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Measuring and setting box dimensions}
-%
-% \begin{macro}{\box_ht:N, \box_ht:c}
-% \begin{macro}{\box_dp:N, \box_dp:c}
-% \begin{macro}{\box_wd:N, \box_wd:c}
-% \testfile*
-% Accessing the height, depth, and width of a \meta{box} register.
-% \begin{macrocode}
-\cs_new_eq:NN \box_ht:N \tex_ht:D
-\cs_new_eq:NN \box_dp:N \tex_dp:D
-\cs_new_eq:NN \box_wd:N \tex_wd:D
-\cs_generate_variant:Nn \box_ht:N { c }
-\cs_generate_variant:Nn \box_dp:N { c }
-\cs_generate_variant:Nn \box_wd:N { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\box_ht_plus_dp:N}
-% The \cs{box_ht:N} and \cs{box_dp:N} primitives do not expand but
-% rather are suitable for use after \tn{the} or inside dimension
-% expressions. Here we obtain the same behaviour by using
-% \cs{@@_dim_eval:n} (basically \tn{dimexpr}) rather than
-% \cs{dim_eval:n} (basically \tn{the} \tn{dimexpr}).
-% \begin{macrocode}
-\cs_new_protected:Npn \box_ht_plus_dp:N #1
- { \@@_dim_eval:n { \box_ht:N #1 + \box_dp:N #1 } }
-\cs_generate_variant:Nn \box_ht_plus_dp:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\box_set_ht:Nn, \box_set_ht:cn, \box_gset_ht:Nn, \box_gset_ht:cn}
-% \begin{macro}{\box_set_dp:Nn, \box_set_dp:cn, \box_gset_dp:Nn, \box_gset_dp:cn}
-% \begin{macro}{\box_set_wd:Nn, \box_set_wd:cn, \box_gset_wd:Nn, \box_gset_wd:cn}
-% Setting the size whilst respecting local scope requires copying;
-% the same issue does not come up when working globally.
-% When debugging, the dimension expression |#2| is surrounded by
-% parentheses to catch early termination.
-% \begin{macrocode}
-\cs_new_protected:Npn \box_set_dp:Nn #1#2
- {
- \tex_setbox:D #1 = \tex_copy:D #1
- \box_dp:N #1 \@@_dim_eval:n {#2}
- }
-\cs_generate_variant:Nn \box_set_dp:Nn { c }
-\cs_new_protected:Npn \box_gset_dp:Nn #1#2
- { \box_dp:N #1 \@@_dim_eval:n {#2} }
-\cs_generate_variant:Nn \box_gset_dp:Nn { c }
-\cs_new_protected:Npn \box_set_ht:Nn #1#2
- {
- \tex_setbox:D #1 = \tex_copy:D #1
- \box_ht:N #1 \@@_dim_eval:n {#2}
- }
-\cs_generate_variant:Nn \box_set_ht:Nn { c }
-\cs_new_protected:Npn \box_gset_ht:Nn #1#2
- { \box_ht:N #1 \@@_dim_eval:n {#2} }
-\cs_generate_variant:Nn \box_gset_ht:Nn { c }
-\cs_new_protected:Npn \box_set_wd:Nn #1#2
- {
- \tex_setbox:D #1 = \tex_copy:D #1
- \box_wd:N #1 \@@_dim_eval:n {#2}
- }
-\cs_generate_variant:Nn \box_set_wd:Nn { c }
-\cs_new_protected:Npn \box_gset_wd:Nn #1#2
- { \box_wd:N #1 \@@_dim_eval:n {#2} }
-\cs_generate_variant:Nn \box_gset_wd:Nn { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Using boxes}
-%
-% \begin{macro}{\box_use_drop:N, \box_use_drop:c}
-% \begin{macro}{\box_use:N, \box_use:c}
-% Using a \meta{box}. These are just \TeX{} primitives with meaningful
-% names.
-% \begin{macrocode}
-\cs_new_eq:NN \box_use_drop:N \tex_box:D
-\cs_new_eq:NN \box_use:N \tex_copy:D
-\cs_generate_variant:Nn \box_use_drop:N { c }
-\cs_generate_variant:Nn \box_use:N { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\box_move_left:nn, \box_move_right:nn}
-% \begin{macro}{\box_move_up:nn, \box_move_down:nn}
-% \testfile*
-% Move box material in different directions.
-% When debugging, the dimension expression |#1| is surrounded by
-% parentheses to catch early termination.
-% \begin{macrocode}
-\cs_new_protected:Npn \box_move_left:nn #1#2
- { \tex_moveleft:D \@@_dim_eval:n {#1} #2 }
-\cs_new_protected:Npn \box_move_right:nn #1#2
- { \tex_moveright:D \@@_dim_eval:n {#1} #2 }
-\cs_new_protected:Npn \box_move_up:nn #1#2
- { \tex_raise:D \@@_dim_eval:n {#1} #2 }
-\cs_new_protected:Npn \box_move_down:nn #1#2
- { \tex_lower:D \@@_dim_eval:n {#1} #2 }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Box conditionals}
-%
-% \begin{macro}{\if_hbox:N}
-% \begin{macro}{\if_vbox:N}
-% \begin{macro}{\if_box_empty:N}
-% \testfile*
-% The primitives for testing if a \meta{box} is empty/void or which
-% type of box it is.
-% \begin{macrocode}
-\cs_new_eq:NN \if_hbox:N \tex_ifhbox:D
-\cs_new_eq:NN \if_vbox:N \tex_ifvbox:D
-\cs_new_eq:NN \if_box_empty:N \tex_ifvoid:D
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\box_if_horizontal:N, \box_if_horizontal:c}
-% \testfile*
-% \begin{macro}[pTF]{\box_if_vertical:N, \box_if_vertical:c}
-% \testfile*
-% \begin{macrocode}
-\prg_new_conditional:Npnn \box_if_horizontal:N #1 { p , T , F , TF }
- { \if_hbox:N #1 \prg_return_true: \else: \prg_return_false: \fi: }
-\prg_new_conditional:Npnn \box_if_vertical:N #1 { p , T , F , TF }
- { \if_vbox:N #1 \prg_return_true: \else: \prg_return_false: \fi: }
-\prg_generate_conditional_variant:Nnn \box_if_horizontal:N
- { c } { p , T , F , TF }
-\prg_generate_conditional_variant:Nnn \box_if_vertical:N
- { c } { p , T , F , TF }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\box_if_empty:N, \box_if_empty:c}
-% \testfile*
-% Testing if a \meta{box} is empty/void.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \box_if_empty:N #1 { p , T , F , TF }
- { \if_box_empty:N #1 \prg_return_true: \else: \prg_return_false: \fi: }
-\prg_generate_conditional_variant:Nnn \box_if_empty:N
- { c } { p , T , F , TF }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{The last box inserted}
-%
-% \begin{macro}{\box_set_to_last:N, \box_set_to_last:c}
-% \begin{macro}{\box_gset_to_last:N, \box_gset_to_last:c}
-% \testfile*
-% Set a box to the previous box.
-% \begin{macrocode}
-\cs_new_protected:Npn \box_set_to_last:N #1
- { \tex_setbox:D #1 \tex_lastbox:D }
-\cs_new_protected:Npn \box_gset_to_last:N #1
- { \tex_global:D \tex_setbox:D #1 \tex_lastbox:D }
-\cs_generate_variant:Nn \box_set_to_last:N { c }
-\cs_generate_variant:Nn \box_gset_to_last:N { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Constant boxes}
-%
-% \begin{variable}{\c_empty_box}
-% A box we never use.
-% \begin{macrocode}
-\box_new:N \c_empty_box
-% \end{macrocode}
-% \end{variable}
-%
-% \subsection{Scratch boxes}
-%
-% \begin{variable}{\l_tmpa_box, \l_tmpb_box, \g_tmpa_box, \g_tmpb_box}
-% Scratch boxes.
-% \begin{macrocode}
-\box_new:N \l_tmpa_box
-\box_new:N \l_tmpb_box
-\box_new:N \g_tmpa_box
-\box_new:N \g_tmpb_box
-% \end{macrocode}
-% \end{variable}
-%
-% \subsection{Viewing box contents}
-%
-% \TeX{}'s \tn{showbox} is not really that helpful in many cases, and
-% it is also inconsistent with other \LaTeX3{} \texttt{show} functions as it
-% does not actually shows material in the terminal. So we provide a richer
-% set of functionality.
-%
-% \begin{macro}{\box_show:N, \box_show:c}
-% \begin{macro}{\box_show:Nnn, \box_show:cnn}
-% Essentially a wrapper around the internal function, but evaluating
-% the breadth and depth arguments now outside the group.
-% \begin{macrocode}
-\cs_new_protected:Npn \box_show:N #1
- { \box_show:Nnn #1 \c_max_int \c_max_int }
-\cs_generate_variant:Nn \box_show:N { c }
-\cs_new_protected:Npn \box_show:Nnn #1#2#3
- { \@@_show:NNff 1 #1 { \int_eval:n {#2} } { \int_eval:n {#3} } }
-\cs_generate_variant:Nn \box_show:Nnn { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\box_log:N, \box_log:c}
-% \begin{macro}{\box_log:Nnn, \box_log:cnn}
-% \begin{macro}{\@@_log:nNnn}
-% Getting \TeX{} to write to the log without interruption the run is done by
-% altering the interaction mode. For that, the \eTeX{} extensions are needed.
-% \begin{macrocode}
-\cs_new_protected:Npn \box_log:N #1
- { \box_log:Nnn #1 \c_max_int \c_max_int }
-\cs_generate_variant:Nn \box_log:N { c }
-\cs_new_protected:Npn \box_log:Nnn
- { \exp_args:No \@@_log:nNnn { \tex_the:D \tex_interactionmode:D } }
-\cs_new_protected:Npn \@@_log:nNnn #1#2#3#4
- {
- \int_gset:Nn \tex_interactionmode:D { 0 }
- \@@_show:NNff 0 #2 { \int_eval:n {#3} } { \int_eval:n {#4} }
- \int_gset:Nn \tex_interactionmode:D {#1}
- }
-\cs_generate_variant:Nn \box_log:Nnn { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_show:NNnn, \@@_show:NNff}
-% The internal auxiliary to actually do the output uses a group to deal
-% with breadth and depth values. The \cs{use:n} here gives better output
-% appearance. Setting \tn{tracingonline} and \tn{errorcontextlines} is
-% used to control what appears in the terminal.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_show:NNnn #1#2#3#4
- {
- \box_if_exist:NTF #2
- {
- \group_begin:
- \int_set:Nn \tex_showboxbreadth:D {#3}
- \int_set:Nn \tex_showboxdepth:D {#4}
- \int_set:Nn \tex_tracingonline:D {#1}
- \int_set:Nn \tex_errorcontextlines:D { -1 }
- \tex_showbox:D \use:n {#2}
- \group_end:
- }
- {
- \msg_error:nne { kernel } { variable-not-defined }
- { \token_to_str:N #2 }
- }
- }
-\cs_generate_variant:Nn \@@_show:NNnn { NNff }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Horizontal mode boxes}
-%
-% \begin{macro}{\hbox:n}
-% \testfile{m3box002.lvt}
-% Put a horizontal box directly into the input stream.
-% \begin{macrocode}
-\cs_new_protected:Npn \hbox:n #1
- { \tex_hbox:D \scan_stop: { \color_group_begin: #1 \color_group_end: } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\hbox_set:Nn, \hbox_set:cn}
-% \begin{macro}{\hbox_gset:Nn, \hbox_gset:cn}
-% \testfile*
-% \begin{macrocode}
-\cs_new_protected:Npn \hbox_set:Nn #1#2
- {
- \tex_setbox:D #1 \tex_hbox:D
- { \color_group_begin: #2 \color_group_end: }
- }
-\cs_new_protected:Npn \hbox_gset:Nn #1#2
- {
- \tex_global:D \tex_setbox:D #1 \tex_hbox:D
- { \color_group_begin: #2 \color_group_end: }
- }
-\cs_generate_variant:Nn \hbox_set:Nn { c }
-\cs_generate_variant:Nn \hbox_gset:Nn { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\hbox_set_to_wd:Nnn, \hbox_set_to_wd:cnn}
-% \begin{macro}{\hbox_gset_to_wd:Nnn, \hbox_gset_to_wd:cnn}
-% \testfile*
-% Storing material in a horizontal box with a specified width.
-% Again, put the dimension expression in parentheses when debugging.
-% \begin{macrocode}
-\cs_new_protected:Npn \hbox_set_to_wd:Nnn #1#2#3
- {
- \tex_setbox:D #1 \tex_hbox:D to \@@_dim_eval:n {#2}
- { \color_group_begin: #3 \color_group_end: }
- }
-\cs_new_protected:Npn \hbox_gset_to_wd:Nnn #1#2#3
- {
- \tex_global:D \tex_setbox:D #1 \tex_hbox:D to \@@_dim_eval:n {#2}
- { \color_group_begin: #3 \color_group_end: }
- }
-\cs_generate_variant:Nn \hbox_set_to_wd:Nnn { c }
-\cs_generate_variant:Nn \hbox_gset_to_wd:Nnn { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\hbox_set:Nw, \hbox_set:cw}
-% \begin{macro}{\hbox_gset:Nw, \hbox_gset:cw}
-% \begin{macro}{\hbox_set_end:, \hbox_gset_end:}
-% \testfile*
-% Storing material in a horizontal box. This type is useful in
-% environment definitions.
-% \begin{macrocode}
-\cs_new_protected:Npn \hbox_set:Nw #1
- {
- \tex_setbox:D #1 \tex_hbox:D
- \c_group_begin_token
- \color_group_begin:
- }
-\cs_new_protected:Npn \hbox_gset:Nw #1
- {
- \tex_global:D \tex_setbox:D #1 \tex_hbox:D
- \c_group_begin_token
- \color_group_begin:
- }
-\cs_generate_variant:Nn \hbox_set:Nw { c }
-\cs_generate_variant:Nn \hbox_gset:Nw { c }
-\cs_new_protected:Npn \hbox_set_end:
- {
- \color_group_end:
- \c_group_end_token
- }
-\cs_new_eq:NN \hbox_gset_end: \hbox_set_end:
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\hbox_set_to_wd:Nnw, \hbox_set_to_wd:cnw}
-% \begin{macro}{\hbox_gset_to_wd:Nnw, \hbox_gset_to_wd:cnw}
-% Combining the above ideas.
-% \begin{macrocode}
-\cs_new_protected:Npn \hbox_set_to_wd:Nnw #1#2
- {
- \tex_setbox:D #1 \tex_hbox:D to \@@_dim_eval:n {#2}
- \c_group_begin_token
- \color_group_begin:
- }
-\cs_new_protected:Npn \hbox_gset_to_wd:Nnw #1#2
- {
- \tex_global:D \tex_setbox:D #1 \tex_hbox:D to \@@_dim_eval:n {#2}
- \c_group_begin_token
- \color_group_begin:
- }
-\cs_generate_variant:Nn \hbox_set_to_wd:Nnw { c }
-\cs_generate_variant:Nn \hbox_gset_to_wd:Nnw { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\hbox_to_wd:nn}
-% \begin{macro}{\hbox_to_zero:n}
-% \testfile*
-% Put a horizontal box directly into the input stream.
-% \begin{macrocode}
-\cs_new_protected:Npn \hbox_to_wd:nn #1#2
- {
- \tex_hbox:D to \@@_dim_eval:n {#1}
- { \color_group_begin: #2 \color_group_end: }
- }
-\cs_new_protected:Npn \hbox_to_zero:n #1
- {
- \tex_hbox:D to \c_zero_dim
- { \color_group_begin: #1 \color_group_end: }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\hbox_overlap_center:n, \hbox_overlap_left:n, \hbox_overlap_right:n}
-% Put a zero-sized box with the contents pushed against one side (which
-% makes it stick out on the other) directly into the input stream.
-% \begin{macrocode}
-\cs_new_protected:Npn \hbox_overlap_center:n #1
- { \hbox_to_zero:n { \tex_hss:D #1 \tex_hss:D } }
-\cs_new_protected:Npn \hbox_overlap_left:n #1
- { \hbox_to_zero:n { \tex_hss:D #1 } }
-\cs_new_protected:Npn \hbox_overlap_right:n #1
- { \hbox_to_zero:n { #1 \tex_hss:D } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\hbox_unpack:N, \hbox_unpack:c}
-% \begin{macro}{\hbox_unpack_drop:N, \hbox_unpack_drop:c}
-% \testfile*
-% Unpacking a box and if requested also clear it.
-% \begin{macrocode}
-\cs_new_eq:NN \hbox_unpack:N \tex_unhcopy:D
-\cs_new_eq:NN \hbox_unpack_drop:N \tex_unhbox:D
-\cs_generate_variant:Nn \hbox_unpack:N { c }
-\cs_generate_variant:Nn \hbox_unpack_drop:N { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Vertical mode boxes}
-%
-% \TeX{} ends these boxes directly with the internal \emph{end_graf}
-% routine. This means that there is no \cs{par} at the end of vertical
-% boxes unless we insert one. Thus all vertical boxes include a \cs{par}
-% just before closing the color group.
-%
-% \begin{macro}{\vbox:n}
-% \TestFiles{m3box003.lvt}
-% \begin{macro}{\vbox_top:n}
-% \TestFiles{m3box003.lvt}
-% Put a vertical box directly into the input stream.
-% \begin{macrocode}
-\cs_new_protected:Npn \vbox:n #1
- { \tex_vbox:D { \color_group_begin: #1 \par \color_group_end: } }
-\cs_new_protected:Npn \vbox_top:n #1
- { \tex_vtop:D { \color_group_begin: #1 \par \color_group_end: } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\vbox_to_ht:nn, \vbox_to_zero:n}
-% \begin{macro}{\vbox_to_ht:nn, \vbox_to_zero:n}
-% \testfile*
-% Put a vertical box directly into the input stream.
-% \begin{macrocode}
-\cs_new_protected:Npn \vbox_to_ht:nn #1#2
- {
- \tex_vbox:D to \@@_dim_eval:n {#1}
- { \color_group_begin: #2 \par \color_group_end: }
- }
-\cs_new_protected:Npn \vbox_to_zero:n #1
- {
- \tex_vbox:D to \c_zero_dim
- { \color_group_begin: #1 \par \color_group_end: }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\vbox_set:Nn, \vbox_set:cn}
-% \begin{macro}{\vbox_gset:Nn, \vbox_gset:cn}
-% \testfile*
-% Storing material in a vertical box with a natural height.
-% \begin{macrocode}
-\cs_new_protected:Npn \vbox_set:Nn #1#2
- {
- \tex_setbox:D #1 \tex_vbox:D
- { \color_group_begin: #2 \par \color_group_end: }
- }
-\cs_new_protected:Npn \vbox_gset:Nn #1#2
- {
- \tex_global:D \tex_setbox:D #1 \tex_vbox:D
- { \color_group_begin: #2 \par \color_group_end: }
- }
-\cs_generate_variant:Nn \vbox_set:Nn { c }
-\cs_generate_variant:Nn \vbox_gset:Nn { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\vbox_set_top:Nn, \vbox_set_top:cn}
-% \begin{macro}{\vbox_gset_top:Nn, \vbox_gset_top:cn}
-% \testfile*
-% Storing material in a vertical box with a natural height and reference
-% point at the baseline of the first object in the box.
-% \begin{macrocode}
-\cs_new_protected:Npn \vbox_set_top:Nn #1#2
- {
- \tex_setbox:D #1 \tex_vtop:D
- { \color_group_begin: #2 \par \color_group_end: }
- }
-\cs_new_protected:Npn \vbox_gset_top:Nn #1#2
- {
- \tex_global:D \tex_setbox:D #1 \tex_vtop:D
- { \color_group_begin: #2 \par \color_group_end: }
- }
-\cs_generate_variant:Nn \vbox_set_top:Nn { c }
-\cs_generate_variant:Nn \vbox_gset_top:Nn { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\vbox_set_to_ht:Nnn, \vbox_set_to_ht:cnn}
-% \begin{macro}{\vbox_gset_to_ht:Nnn, \vbox_gset_to_ht:cnn}
-% \testfile*
-% Storing material in a vertical box with a specified height.
-% \begin{macrocode}
-\cs_new_protected:Npn \vbox_set_to_ht:Nnn #1#2#3
- {
- \tex_setbox:D #1 \tex_vbox:D to \@@_dim_eval:n {#2}
- { \color_group_begin: #3 \par \color_group_end: }
- }
-\cs_new_protected:Npn \vbox_gset_to_ht:Nnn #1#2#3
- {
- \tex_global:D \tex_setbox:D #1 \tex_vbox:D to \@@_dim_eval:n {#2}
- { \color_group_begin: #3 \par \color_group_end: }
- }
-\cs_generate_variant:Nn \vbox_set_to_ht:Nnn { c }
-\cs_generate_variant:Nn \vbox_gset_to_ht:Nnn { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\vbox_set:Nw, \vbox_set:cw}
-% \begin{macro}{\vbox_gset:Nw, \vbox_gset:cw}
-% \begin{macro}{\vbox_set_end:, \vbox_gset_end:}
-% \testfile*
-% Storing material in a vertical box. This type is useful in
-% environment definitions.
-% \begin{macrocode}
-\cs_new_protected:Npn \vbox_set:Nw #1
- {
- \tex_setbox:D #1 \tex_vbox:D
- \c_group_begin_token
- \color_group_begin:
- }
-\cs_new_protected:Npn \vbox_gset:Nw #1
- {
- \tex_global:D \tex_setbox:D #1 \tex_vbox:D
- \c_group_begin_token
- \color_group_begin:
- }
-\cs_generate_variant:Nn \vbox_set:Nw { c }
-\cs_generate_variant:Nn \vbox_gset:Nw { c }
-\cs_new_protected:Npn \vbox_set_end:
- {
- \par
- \color_group_end:
- \c_group_end_token
- }
-\cs_new_eq:NN \vbox_gset_end: \vbox_set_end:
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\vbox_set_to_ht:Nnw, \vbox_set_to_ht:cnw}
-% \begin{macro}{\vbox_gset_to_ht:Nnw, \vbox_gset_to_ht:cnw}
-% A combination of the above ideas.
-% \begin{macrocode}
-\cs_new_protected:Npn \vbox_set_to_ht:Nnw #1#2
- {
- \tex_setbox:D #1 \tex_vbox:D to \@@_dim_eval:n {#2}
- \c_group_begin_token
- \color_group_begin:
- }
-\cs_new_protected:Npn \vbox_gset_to_ht:Nnw #1#2
- {
- \tex_global:D \tex_setbox:D #1 \tex_vbox:D to \@@_dim_eval:n {#2}
- \c_group_begin_token
- \color_group_begin:
- }
-\cs_generate_variant:Nn \vbox_set_to_ht:Nnw { c }
-\cs_generate_variant:Nn \vbox_gset_to_ht:Nnw { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\vbox_unpack:N, \vbox_unpack:c}
-% \begin{macro}{\vbox_unpack_drop:N, \vbox_unpack_drop:c}
-% \testfile*
-% Unpacking a box and if requested also clear it.
-% \begin{macrocode}
-\cs_new_eq:NN \vbox_unpack:N \tex_unvcopy:D
-\cs_new_eq:NN \vbox_unpack_drop:N \tex_unvbox:D
-\cs_generate_variant:Nn \vbox_unpack:N { c }
-\cs_generate_variant:Nn \vbox_unpack_drop:N { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \vbox_set_split_to_ht:NNn, \vbox_set_split_to_ht:cNn,
-% \vbox_set_split_to_ht:Ncn, \vbox_set_split_to_ht:ccn,
-% \vbox_gset_split_to_ht:NNn, \vbox_gset_split_to_ht:cNn,
-% \vbox_gset_split_to_ht:Ncn, \vbox_gset_split_to_ht:ccn,
-% }
-% \testfile*
-% Splitting a vertical box in two.
-% \begin{macrocode}
-\cs_new_protected:Npn \vbox_set_split_to_ht:NNn #1#2#3
- { \tex_setbox:D #1 \tex_vsplit:D #2 to \@@_dim_eval:n {#3} }
-\cs_generate_variant:Nn \vbox_set_split_to_ht:NNn { c , Nc , cc }
-\cs_new_protected:Npn \vbox_gset_split_to_ht:NNn #1#2#3
- {
- \tex_global:D \tex_setbox:D #1
- \tex_vsplit:D #2 to \@@_dim_eval:n {#3}
- }
-\cs_generate_variant:Nn \vbox_gset_split_to_ht:NNn { c , Nc , cc }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Affine transformations}
-%
-% \begin{variable}{\l_@@_angle_fp}
-% When rotating boxes, the angle itself may be needed by the
-% engine-dependent code. This is done using the \pkg{fp} module so
-% that the value is tidied up properly.
-% \begin{macrocode}
-\fp_new:N \l_@@_angle_fp
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_cos_fp, \l_@@_sin_fp}
-% These are used to hold the calculated sine and cosine values while
-% carrying out a rotation.
-% \begin{macrocode}
-\fp_new:N \l_@@_cos_fp
-\fp_new:N \l_@@_sin_fp
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}
-% {\l_@@_top_dim, \l_@@_bottom_dim, \l_@@_left_dim, \l_@@_right_dim}
-% These are the positions of the four edges of a box before
-% manipulation.
-% \begin{macrocode}
-\dim_new:N \l_@@_top_dim
-\dim_new:N \l_@@_bottom_dim
-\dim_new:N \l_@@_left_dim
-\dim_new:N \l_@@_right_dim
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}
-% {
-% \l_@@_top_new_dim, \l_@@_bottom_new_dim ,
-% \l_@@_left_new_dim, \l_@@_right_new_dim
-% }
-% These are the positions of the four edges of a box after
-% manipulation.
-% \begin{macrocode}
-\dim_new:N \l_@@_top_new_dim
-\dim_new:N \l_@@_bottom_new_dim
-\dim_new:N \l_@@_left_new_dim
-\dim_new:N \l_@@_right_new_dim
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_internal_box}
-% Scratch space, but also needed by some parts of the driver.
-% \begin{macrocode}
-\box_new:N \l_@@_internal_box
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}
-% {
-% \box_rotate:Nn, \box_rotate:cn,
-% \box_grotate:Nn, \box_grotate:cn
-% }
-% \begin{macro}{\@@_rotate:NnN}
-% \begin{macro}{\@@_rotate:N}
-% \begin{macro}{\@@_rotate_xdir:nnN, \@@_rotate_ydir:nnN}
-% \begin{macro}
-% {
-% \@@_rotate_quadrant_one:, \@@_rotate_quadrant_two:,
-% \@@_rotate_quadrant_three:, \@@_rotate_quadrant_four:
-% }
-% Rotation of a box starts with working out the relevant sine and
-% cosine. The actual rotation is in an auxiliary to keep the flow slightly
-% clearer
-% \begin{macrocode}
-\cs_new_protected:Npn \box_rotate:Nn #1#2
- { \@@_rotate:NnN #1 {#2} \hbox_set:Nn }
-\cs_generate_variant:Nn \box_rotate:Nn { c }
-\cs_new_protected:Npn \box_grotate:Nn #1#2
- { \@@_rotate:NnN #1 {#2} \hbox_gset:Nn }
-\cs_generate_variant:Nn \box_grotate:Nn { c }
-\cs_new_protected:Npn \@@_rotate:NnN #1#2#3
- {
- #3 #1
- {
- \fp_set:Nn \l_@@_angle_fp {#2}
- \fp_set:Nn \l_@@_sin_fp { sind ( \l_@@_angle_fp ) }
- \fp_set:Nn \l_@@_cos_fp { cosd ( \l_@@_angle_fp ) }
- \@@_rotate:N #1
- }
- }
-% \end{macrocode}
-% The edges of the box are then recorded: the left edge is
-% always at zero. Rotation of the four edges then takes place: this is
-% most efficiently done on a quadrant by quadrant basis.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_rotate:N #1
- {
- \dim_set:Nn \l_@@_top_dim { \box_ht:N #1 }
- \dim_set:Nn \l_@@_bottom_dim { -\box_dp:N #1 }
- \dim_set:Nn \l_@@_right_dim { \box_wd:N #1 }
- \dim_zero:N \l_@@_left_dim
-% \end{macrocode}
-% The next step is to work out the $x$ and $y$ coordinates of vertices of
-% the rotated box in relation to its original coordinates. The box can be
-% visualized with vertices $B$, $C$, $D$ and $E$ is illustrated
-% (Figure~\ref{fig:l3box:rotation}). The vertex $O$ is the reference point
-% on the baseline, and in this implementation is also the centre of rotation.
-% \begin{figure}
-% \centering
-% \setlength{\unitlength}{3pt}^^A
-% \begin{picture}(34,36)(12,44)
-% \thicklines
-% \put(20,52){\dashbox{1}(20,21){}}
-% \put(20,80){\line(0,-1){36}}
-% \put(12,58){\line(1, 0){34}}
-% \put(41,59){A}
-% \put(40,74){B}
-% \put(21,74){C}
-% \put(21,49){D}
-% \put(40,49){E}
-% \put(21,59){O}
-% \end{picture}
-% \caption{Co-ordinates of a box prior to rotation.}
-% \label{fig:l3box:rotation}
-% \end{figure}
-% The formulae are, for a point $P$ and angle $\alpha$:
-% \[
-% \begin{array}{l}
-% P'_x = P_x - O_x \\
-% P'_y = P_y - O_y \\
-% P''_x = ( P'_x \cos(\alpha)) - ( P'_y \sin(\alpha) ) \\
-% P''_y = ( P'_x \sin(\alpha)) + ( P'_y \cos(\alpha) ) \\
-% P'''_x = P''_x + O_x + L_x \\
-% P'''_y = P''_y + O_y
-% \end{array}
-% \]
-% The \enquote{extra} horizontal translation $L_x$ at the end is calculated
-% so that the leftmost point of the resulting box has $x$-coordinate $0$.
-% This is desirable as \TeX{} boxes must have the reference point at
-% the left edge of the box. (As $O$ is always $(0,0)$, this part of the
-% calculation is omitted here.)
-% \begin{macrocode}
- \fp_compare:nNnTF \l_@@_sin_fp > \c_zero_fp
- {
- \fp_compare:nNnTF \l_@@_cos_fp > \c_zero_fp
- { \@@_rotate_quadrant_one: }
- { \@@_rotate_quadrant_two: }
- }
- {
- \fp_compare:nNnTF \l_@@_cos_fp < \c_zero_fp
- { \@@_rotate_quadrant_three: }
- { \@@_rotate_quadrant_four: }
- }
-% \end{macrocode}
-% The position of the box edges are now known, but the box at this
-% stage be misplaced relative to the current \TeX{} reference point. So the
-% content of the box is moved such that the reference point of the
-% rotated box is in the same place as the original.
-% \begin{macrocode}
- \hbox_set:Nn \l_@@_internal_box { \box_use:N #1 }
- \hbox_set:Nn \l_@@_internal_box
- {
- \__kernel_kern:n { -\l_@@_left_new_dim }
- \hbox:n
- {
- \@@_backend_rotate:Nn
- \l_@@_internal_box
- \l_@@_angle_fp
- }
- }
-% \end{macrocode}
-% Tidy up the size of the box so that the material is actually inside
-% the bounding box. The result can then be used to reset the original
-% box.
-% \begin{macrocode}
- \box_set_ht:Nn \l_@@_internal_box { \l_@@_top_new_dim }
- \box_set_dp:Nn \l_@@_internal_box { -\l_@@_bottom_new_dim }
- \box_set_wd:Nn \l_@@_internal_box
- { \l_@@_right_new_dim - \l_@@_left_new_dim }
- \box_use_drop:N \l_@@_internal_box
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% These functions take a general point $(|#1|, |#2|)$ and rotate its
-% location about the origin, using the previously-set sine and cosine
-% values. Each function gives only one component of the location of the
-% updated point. This is because for rotation of a box each step needs
-% only one value, and so performance is gained by avoiding working
-% out both $x'$ and $y'$ at the same time. Contrast this with
-% the equivalent function in the \pkg{l3coffins} module, where both parts
-% are needed.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_rotate_xdir:nnN #1#2#3
- {
- \dim_set:Nn #3
- {
- \fp_to_dim:n
- {
- \l_@@_cos_fp * \dim_to_fp:n {#1}
- - \l_@@_sin_fp * \dim_to_fp:n {#2}
- }
- }
- }
-\cs_new_protected:Npn \@@_rotate_ydir:nnN #1#2#3
- {
- \dim_set:Nn #3
- {
- \fp_to_dim:n
- {
- \l_@@_sin_fp * \dim_to_fp:n {#1}
- + \l_@@_cos_fp * \dim_to_fp:n {#2}
- }
- }
- }
-% \end{macrocode}
-% Rotation of the edges is done using a different formula for each
-% quadrant. In every case, the top and bottom edges only need the
-% resulting $y$-values, whereas the left and right edges need the
-% $x$-values. Each case is a question of picking out which corner
-% ends up at with the maximum top, bottom, left and right value. Doing
-% this by hand means a lot less calculating and avoids lots of
-% comparisons.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_rotate_quadrant_one:
- {
- \@@_rotate_ydir:nnN \l_@@_right_dim \l_@@_top_dim
- \l_@@_top_new_dim
- \@@_rotate_ydir:nnN \l_@@_left_dim \l_@@_bottom_dim
- \l_@@_bottom_new_dim
- \@@_rotate_xdir:nnN \l_@@_left_dim \l_@@_top_dim
- \l_@@_left_new_dim
- \@@_rotate_xdir:nnN \l_@@_right_dim \l_@@_bottom_dim
- \l_@@_right_new_dim
- }
-\cs_new_protected:Npn \@@_rotate_quadrant_two:
- {
- \@@_rotate_ydir:nnN \l_@@_right_dim \l_@@_bottom_dim
- \l_@@_top_new_dim
- \@@_rotate_ydir:nnN \l_@@_left_dim \l_@@_top_dim
- \l_@@_bottom_new_dim
- \@@_rotate_xdir:nnN \l_@@_right_dim \l_@@_top_dim
- \l_@@_left_new_dim
- \@@_rotate_xdir:nnN \l_@@_left_dim \l_@@_bottom_dim
- \l_@@_right_new_dim
- }
-\cs_new_protected:Npn \@@_rotate_quadrant_three:
- {
- \@@_rotate_ydir:nnN \l_@@_left_dim \l_@@_bottom_dim
- \l_@@_top_new_dim
- \@@_rotate_ydir:nnN \l_@@_right_dim \l_@@_top_dim
- \l_@@_bottom_new_dim
- \@@_rotate_xdir:nnN \l_@@_right_dim \l_@@_bottom_dim
- \l_@@_left_new_dim
- \@@_rotate_xdir:nnN \l_@@_left_dim \l_@@_top_dim
- \l_@@_right_new_dim
- }
-\cs_new_protected:Npn \@@_rotate_quadrant_four:
- {
- \@@_rotate_ydir:nnN \l_@@_left_dim \l_@@_top_dim
- \l_@@_top_new_dim
- \@@_rotate_ydir:nnN \l_@@_right_dim \l_@@_bottom_dim
- \l_@@_bottom_new_dim
- \@@_rotate_xdir:nnN \l_@@_left_dim \l_@@_bottom_dim
- \l_@@_left_new_dim
- \@@_rotate_xdir:nnN \l_@@_right_dim \l_@@_top_dim
- \l_@@_right_new_dim
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{variable}{\l_@@_scale_x_fp, \l_@@_scale_y_fp}
-% Scaling is potentially-different in the two axes.
-% \begin{macrocode}
-\fp_new:N \l_@@_scale_x_fp
-\fp_new:N \l_@@_scale_y_fp
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}
-% {
-% \box_resize_to_wd_and_ht_plus_dp:Nnn,
-% \box_resize_to_wd_and_ht_plus_dp:cnn,
-% \box_gresize_to_wd_and_ht_plus_dp:Nnn,
-% \box_gresize_to_wd_and_ht_plus_dp:cnn
-% }
-% \begin{macro}{\@@_resize_to_wd_and_ht_plus_dp:NnnN}
-% \begin{macro}{\@@_resize_set_corners:N}
-% \begin{macro}{\@@_resize:N}
-% \begin{macro}{\@@_resize:NNN}
-% Resizing a box starts by working out the various dimensions of the
-% existing box.
-% \begin{macrocode}
-\cs_new_protected:Npn \box_resize_to_wd_and_ht_plus_dp:Nnn #1#2#3
- {
- \@@_resize_to_wd_and_ht_plus_dp:NnnN #1 {#2} {#3}
- \hbox_set:Nn
- }
-\cs_generate_variant:Nn \box_resize_to_wd_and_ht_plus_dp:Nnn { c }
-\cs_new_protected:Npn \box_gresize_to_wd_and_ht_plus_dp:Nnn #1#2#3
- {
- \@@_resize_to_wd_and_ht_plus_dp:NnnN #1 {#2} {#3}
- \hbox_gset:Nn
- }
-\cs_generate_variant:Nn \box_gresize_to_wd_and_ht_plus_dp:Nnn { c }
-\cs_new_protected:Npn \@@_resize_to_wd_and_ht_plus_dp:NnnN #1#2#3#4
- {
- #4 #1
- {
- \@@_resize_set_corners:N #1
-% \end{macrocode}
-% The $x$-scaling and resulting box size is easy enough to work
-% out: the dimension is that given as |#2|, and the scale is simply the
-% new width divided by the old one.
-% \begin{macrocode}
- \fp_set:Nn \l_@@_scale_x_fp
- { \dim_to_fp:n {#2} / \dim_to_fp:n { \l_@@_right_dim } }
-% \end{macrocode}
-% The $y$-scaling needs both the height and the depth of the current box.
-% \begin{macrocode}
- \fp_set:Nn \l_@@_scale_y_fp
- {
- \dim_to_fp:n {#3}
- / \dim_to_fp:n { \l_@@_top_dim - \l_@@_bottom_dim }
- }
-% \end{macrocode}
-% Hand off to the auxiliary which does the rest of the work.
-% \begin{macrocode}
- \@@_resize:N #1
- }
- }
-\cs_new_protected:Npn \@@_resize_set_corners:N #1
- {
- \dim_set:Nn \l_@@_top_dim { \box_ht:N #1 }
- \dim_set:Nn \l_@@_bottom_dim { -\box_dp:N #1 }
- \dim_set:Nn \l_@@_right_dim { \box_wd:N #1 }
- \dim_zero:N \l_@@_left_dim
- }
-% \end{macrocode}
-% With at least one real scaling to do, the next phase is to find the new
-% edge co-ordinates. In the $x$~direction this is relatively easy: just
-% scale the right edge. In the $y$~direction, both dimensions have to be
-% scaled, and this again needs the absolute scale value.
-% Once that is all done, the common resize/rescale code can be employed.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_resize:N #1
- {
- \@@_resize:NNN \l_@@_right_new_dim
- \l_@@_scale_x_fp \l_@@_right_dim
- \@@_resize:NNN \l_@@_bottom_new_dim
- \l_@@_scale_y_fp \l_@@_bottom_dim
- \@@_resize:NNN \l_@@_top_new_dim
- \l_@@_scale_y_fp \l_@@_top_dim
- \@@_resize_common:N #1
- }
-\cs_new_protected:Npn \@@_resize:NNN #1#2#3
- {
- \dim_set:Nn #1
- { \fp_to_dim:n { \fp_abs:n { #2 } * \dim_to_fp:n { #3 } } }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \box_resize_to_ht:Nn, \box_resize_to_ht:cn,
-% \box_gresize_to_ht:Nn, \box_gresize_to_ht:cn
-% }
-% \begin{macro}{\@@_resize_to_ht:NnN}
-% \begin{macro}
-% {
-% \box_resize_to_ht_plus_dp:Nn, \box_resize_to_ht_plus_dp:cn,
-% \box_gresize_to_ht_plus_dp:Nn, \box_gresize_to_ht_plus_dp:cn
-% }
-% \begin{macro}{\@@_resize_to_ht_plus_dp:NnN}
-% \begin{macro}
-% {
-% \box_resize_to_wd:Nn, \box_resize_to_wd:cn,
-% \box_gresize_to_wd:Nn, \box_gresize_to_wd:cn
-% }
-% \begin{macro}{\@@_resize_to_wd:NnN}
-% \begin{macro}
-% {
-% \box_resize_to_wd_and_ht:Nnn, \box_resize_to_wd_and_ht:cnn,
-% \box_gresize_to_wd_and_ht:Nnn, \box_gresize_to_wd_and_ht:cnn
-% }
-% \begin{macro}{\@@_resize_to_wd_ht:NnnN}
-% Scaling to a (total) height or to a width is a simplified version of the main
-% resizing operation, with the scale simply copied between the two parts. The
-% internal auxiliary is called using the scaling value twice, as the sign for
-% both parts is needed (as this allows the same internal code to be used as
-% for the general case).
-% \begin{macrocode}
-\cs_new_protected:Npn \box_resize_to_ht:Nn #1#2
- { \@@_resize_to_ht:NnN #1 {#2} \hbox_set:Nn }
-\cs_generate_variant:Nn \box_resize_to_ht:Nn { c }
-\cs_new_protected:Npn \box_gresize_to_ht:Nn #1#2
- { \@@_resize_to_ht:NnN #1 {#2} \hbox_gset:Nn }
-\cs_generate_variant:Nn \box_gresize_to_ht:Nn { c }
-\cs_new_protected:Npn \@@_resize_to_ht:NnN #1#2#3
- {
- #3 #1
- {
- \@@_resize_set_corners:N #1
- \fp_set:Nn \l_@@_scale_y_fp
- {
- \dim_to_fp:n {#2}
- / \dim_to_fp:n { \l_@@_top_dim }
- }
- \fp_set_eq:NN \l_@@_scale_x_fp \l_@@_scale_y_fp
- \@@_resize:N #1
- }
- }
-\cs_new_protected:Npn \box_resize_to_ht_plus_dp:Nn #1#2
- { \@@_resize_to_ht_plus_dp:NnN #1 {#2} \hbox_set:Nn }
-\cs_generate_variant:Nn \box_resize_to_ht_plus_dp:Nn { c }
-\cs_new_protected:Npn \box_gresize_to_ht_plus_dp:Nn #1#2
- { \@@_resize_to_ht_plus_dp:NnN #1 {#2} \hbox_gset:Nn }
-\cs_generate_variant:Nn \box_gresize_to_ht_plus_dp:Nn { c }
-\cs_new_protected:Npn \@@_resize_to_ht_plus_dp:NnN #1#2#3
- {
- #3 #1
- {
- \@@_resize_set_corners:N #1
- \fp_set:Nn \l_@@_scale_y_fp
- {
- \dim_to_fp:n {#2}
- / \dim_to_fp:n { \l_@@_top_dim - \l_@@_bottom_dim }
- }
- \fp_set_eq:NN \l_@@_scale_x_fp \l_@@_scale_y_fp
- \@@_resize:N #1
- }
- }
-\cs_new_protected:Npn \box_resize_to_wd:Nn #1#2
- { \@@_resize_to_wd:NnN #1 {#2} \hbox_set:Nn }
-\cs_generate_variant:Nn \box_resize_to_wd:Nn { c }
-\cs_new_protected:Npn \box_gresize_to_wd:Nn #1#2
- { \@@_resize_to_wd:NnN #1 {#2} \hbox_gset:Nn }
-\cs_generate_variant:Nn \box_gresize_to_wd:Nn { c }
-\cs_new_protected:Npn \@@_resize_to_wd:NnN #1#2#3
- {
- #3 #1
- {
- \@@_resize_set_corners:N #1
- \fp_set:Nn \l_@@_scale_x_fp
- { \dim_to_fp:n {#2} / \dim_to_fp:n { \l_@@_right_dim } }
- \fp_set_eq:NN \l_@@_scale_y_fp \l_@@_scale_x_fp
- \@@_resize:N #1
- }
- }
-\cs_new_protected:Npn \box_resize_to_wd_and_ht:Nnn #1#2#3
- { \@@_resize_to_wd_and_ht:NnnN #1 {#2} {#3} \hbox_set:Nn }
-\cs_generate_variant:Nn \box_resize_to_wd_and_ht:Nnn { c }
-\cs_new_protected:Npn \box_gresize_to_wd_and_ht:Nnn #1#2#3
- { \@@_resize_to_wd_and_ht:NnnN #1 {#2} {#3} \hbox_gset:Nn }
-\cs_generate_variant:Nn \box_gresize_to_wd_and_ht:Nnn { c }
-\cs_new_protected:Npn \@@_resize_to_wd_and_ht:NnnN #1#2#3#4
- {
- #4 #1
- {
- \@@_resize_set_corners:N #1
- \fp_set:Nn \l_@@_scale_x_fp
- { \dim_to_fp:n {#2} / \dim_to_fp:n { \l_@@_right_dim } }
- \fp_set:Nn \l_@@_scale_y_fp
- {
- \dim_to_fp:n {#3}
- / \dim_to_fp:n { \l_@@_top_dim }
- }
- \@@_resize:N #1
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \box_scale:Nnn, \box_scale:cnn,
-% \box_gscale:Nnn, \box_gscale:cnn
-% }
-% \begin{macro}{\@@_scale:NnnN}
-% \begin{macro}{\@@_scale:N}
-% When scaling a box, setting the scaling itself is easy enough. The
-% new dimensions are also relatively easy to find, allowing only for
-% the need to keep them positive in all cases. Once that is done then
-% after a check for the trivial scaling a hand-off can be made to the
-% common code. The code here is split into two as this allows sharing
-% with the auto-resizing functions.
-% \begin{macrocode}
-\cs_new_protected:Npn \box_scale:Nnn #1#2#3
- { \@@_scale:NnnN #1 {#2} {#3} \hbox_set:Nn }
-\cs_generate_variant:Nn \box_scale:Nnn { c }
-\cs_new_protected:Npn \box_gscale:Nnn #1#2#3
- { \@@_scale:NnnN #1 {#2} {#3} \hbox_gset:Nn }
-\cs_generate_variant:Nn \box_gscale:Nnn { c }
-\cs_new_protected:Npn \@@_scale:NnnN #1#2#3#4
- {
- #4 #1
- {
- \fp_set:Nn \l_@@_scale_x_fp {#2}
- \fp_set:Nn \l_@@_scale_y_fp {#3}
- \@@_scale:N #1
- }
- }
-\cs_new_protected:Npn \@@_scale:N #1
- {
- \dim_set:Nn \l_@@_top_dim { \box_ht:N #1 }
- \dim_set:Nn \l_@@_bottom_dim { -\box_dp:N #1 }
- \dim_set:Nn \l_@@_right_dim { \box_wd:N #1 }
- \dim_zero:N \l_@@_left_dim
- \dim_set:Nn \l_@@_top_new_dim
- { \fp_abs:n { \l_@@_scale_y_fp } \l_@@_top_dim }
- \dim_set:Nn \l_@@_bottom_new_dim
- { \fp_abs:n { \l_@@_scale_y_fp } \l_@@_bottom_dim }
- \dim_set:Nn \l_@@_right_new_dim
- { \fp_abs:n { \l_@@_scale_x_fp } \l_@@_right_dim }
- \@@_resize_common:N #1
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \box_autosize_to_wd_and_ht:Nnn ,
-% \box_autosize_to_wd_and_ht:cnn ,
-% \box_gautosize_to_wd_and_ht:Nnn ,
-% \box_gautosize_to_wd_and_ht:cnn ,
-% \box_autosize_to_wd_and_ht_plus_dp:Nnn ,
-% \box_autosize_to_wd_and_ht_plus_dp:cnn ,
-% \box_gautosize_to_wd_and_ht_plus_dp:Nnn ,
-% \box_gautosize_to_wd_and_ht_plus_dp:cnn
-% }
-% \begin{macro}{\@@_autosize:NnnnN}
-% Although autosizing a box uses dimensions, it has more in common in
-% implementation with scaling. As such, most of the real work here is
-% done elsewhere.
-% \begin{macrocode}
-\cs_new_protected:Npn \box_autosize_to_wd_and_ht:Nnn #1#2#3
- { \@@_autosize:NnnnN #1 {#2} {#3} { \box_ht:N #1 } \hbox_set:Nn }
-\cs_generate_variant:Nn \box_autosize_to_wd_and_ht:Nnn { c }
-\cs_new_protected:Npn \box_gautosize_to_wd_and_ht:Nnn #1#2#3
- { \@@_autosize:NnnnN #1 {#2} {#3} { \box_ht:N #1 } \hbox_gset:Nn }
-\cs_generate_variant:Nn \box_gautosize_to_wd_and_ht:Nnn { c }
-\cs_new_protected:Npn \box_autosize_to_wd_and_ht_plus_dp:Nnn #1#2#3
- {
- \@@_autosize:NnnnN #1 {#2} {#3} { \box_ht:N #1 + \box_dp:N #1 }
- \hbox_set:Nn
- }
-\cs_generate_variant:Nn \box_autosize_to_wd_and_ht_plus_dp:Nnn { c }
-\cs_new_protected:Npn \box_gautosize_to_wd_and_ht_plus_dp:Nnn #1#2#3
- {
- \@@_autosize:NnnnN #1 {#2} {#3} { \box_ht:N #1 + \box_dp:N #1 }
- \hbox_gset:Nn
- }
-\cs_generate_variant:Nn \box_gautosize_to_wd_and_ht_plus_dp:Nnn { c }
-\cs_new_protected:Npn \@@_autosize:NnnnN #1#2#3#4#5
- {
- #5 #1
- {
- \fp_set:Nn \l_@@_scale_x_fp { ( \dim_to_fp:n {#2} ) / \box_wd:N #1 }
- \fp_set:Nn \l_@@_scale_y_fp
- { ( \dim_to_fp:n {#3} ) / ( \dim_to_fp:n {#4} ) }
- \fp_compare:nNnTF \l_@@_scale_x_fp > \l_@@_scale_y_fp
- { \fp_set_eq:NN \l_@@_scale_x_fp \l_@@_scale_y_fp }
- { \fp_set_eq:NN \l_@@_scale_y_fp \l_@@_scale_x_fp }
- \@@_scale:N #1
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_resize_common:N}
-% The main resize function places its input into a box which start
-% off with zero width, and includes the handles for engine rescaling.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_resize_common:N #1
- {
- \hbox_set:Nn \l_@@_internal_box
- {
- \@@_backend_scale:Nnn
- #1
- \l_@@_scale_x_fp
- \l_@@_scale_y_fp
- }
-% \end{macrocode}
-% The new height and depth can be applied directly.
-% \begin{macrocode}
- \fp_compare:nNnTF \l_@@_scale_y_fp > \c_zero_fp
- {
- \box_set_ht:Nn \l_@@_internal_box { \l_@@_top_new_dim }
- \box_set_dp:Nn \l_@@_internal_box { -\l_@@_bottom_new_dim }
- }
- {
- \box_set_dp:Nn \l_@@_internal_box { \l_@@_top_new_dim }
- \box_set_ht:Nn \l_@@_internal_box { -\l_@@_bottom_new_dim }
- }
-% \end{macrocode}
-% Things are not quite as obvious for the width, as the reference point
-% needs to remain unchanged. For positive scaling factors resizing the
-% box is all that is needed. However, for case of a negative scaling
-% the material must be shifted such that the reference point ends up in
-% the right place.
-% \begin{macrocode}
- \fp_compare:nNnTF \l_@@_scale_x_fp < \c_zero_fp
- {
- \hbox_to_wd:nn { \l_@@_right_new_dim }
- {
- \__kernel_kern:n { \l_@@_right_new_dim }
- \box_use_drop:N \l_@@_internal_box
- \tex_hss:D
- }
- }
- {
- \box_set_wd:Nn \l_@@_internal_box { \l_@@_right_new_dim }
- \hbox:n
- {
- \__kernel_kern:n { 0pt }
- \box_use_drop:N \l_@@_internal_box
- \tex_hss:D
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Viewing part of a box}
-%
-% \begin{macro}{\box_set_clipped:N, \box_set_clipped:c, \box_gset_clipped:N, \box_gset_clipped:c}
-% A wrapper around the driver-dependent code.
-% \begin{macrocode}
-\cs_new_protected:Npn \box_set_clipped:N #1
- { \hbox_set:Nn #1 { \@@_backend_clip:N #1 } }
-\cs_generate_variant:Nn \box_set_clipped:N { c }
-\cs_new_protected:Npn \box_gset_clipped:N #1
- { \hbox_gset:Nn #1 { \@@_backend_clip:N #1 } }
-\cs_generate_variant:Nn \box_gset_clipped:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \box_set_trim:Nnnnn, \box_set_trim:cnnnn,
-% \box_gset_trim:Nnnnn, \box_gset_trim:cnnnn
-% }
-% \begin{macro}{\@@_set_trim:NnnnnN}
-% Trimming from the left- and right-hand edges of the box is easy: kern the
-% appropriate parts off each side.
-% \begin{macrocode}
-\cs_new_protected:Npn \box_set_trim:Nnnnn #1#2#3#4#5
- { \@@_set_trim:NnnnnN #1 {#2} {#3} {#4} {#5} \box_set_eq:NN }
-\cs_generate_variant:Nn \box_set_trim:Nnnnn { c }
-\cs_new_protected:Npn \box_gset_trim:Nnnnn #1#2#3#4#5
- { \@@_set_trim:NnnnnN #1 {#2} {#3} {#4} {#5} \box_gset_eq:NN }
-\cs_generate_variant:Nn \box_gset_trim:Nnnnn { c }
-\cs_new_protected:Npn \@@_set_trim:NnnnnN #1#2#3#4#5#6
- {
- \hbox_set:Nn \l_@@_internal_box
- {
- \__kernel_kern:n { -#2 }
- \box_use:N #1
- \__kernel_kern:n { -#4 }
- }
-% \end{macrocode}
-% For the height and depth, there is a need to watch the baseline is
-% respected. Material always has to stay on the correct side, so trimming
-% has to check that there is enough material to trim. First, the bottom
-% edge. If there is enough depth, simply set the depth, or if not move
-% down so the result is zero depth. \cs{box_move_down:nn} is used in both
-% cases so the resulting box always contains a \tn{lower} primitive.
-% The internal box is used here as it allows safe use of \cs{box_set_dp:Nn}.
-% \begin{macrocode}
- \dim_compare:nNnTF { \box_dp:N #1 } > {#3}
- {
- \hbox_set:Nn \l_@@_internal_box
- {
- \box_move_down:nn \c_zero_dim
- { \box_use_drop:N \l_@@_internal_box }
- }
- \box_set_dp:Nn \l_@@_internal_box { \box_dp:N #1 - (#3) }
- }
- {
- \hbox_set:Nn \l_@@_internal_box
- {
- \box_move_down:nn { (#3) - \box_dp:N #1 }
- { \box_use_drop:N \l_@@_internal_box }
- }
- \box_set_dp:Nn \l_@@_internal_box \c_zero_dim
- }
-% \end{macrocode}
-% Same thing, this time from the top of the box.
-% \begin{macrocode}
- \dim_compare:nNnTF { \box_ht:N \l_@@_internal_box } > {#5}
- {
- \hbox_set:Nn \l_@@_internal_box
- {
- \box_move_up:nn \c_zero_dim
- { \box_use_drop:N \l_@@_internal_box }
- }
- \box_set_ht:Nn \l_@@_internal_box
- { \box_ht:N \l_@@_internal_box - (#5) }
- }
- {
- \hbox_set:Nn \l_@@_internal_box
- {
- \box_move_up:nn { (#5) - \box_ht:N \l_@@_internal_box }
- { \box_use_drop:N \l_@@_internal_box }
- }
- \box_set_ht:Nn \l_@@_internal_box \c_zero_dim
- }
- #6 #1 \l_@@_internal_box
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \box_set_viewport:Nnnnn, \box_set_viewport:cnnnn,
-% \box_gset_viewport:Nnnnn, \box_gset_viewport:cnnnn
-% }
-% \begin{macro}{\@@_viewport:NnnnnN}
-% The same general logic as for the trim operation, but with absolute
-% dimensions. As a result, there are some things to watch out for in the
-% vertical direction.
-% \begin{macrocode}
-\cs_new_protected:Npn \box_set_viewport:Nnnnn #1#2#3#4#5
- { \@@_set_viewport:NnnnnN #1 {#2} {#3} {#4} {#5} \box_set_eq:NN }
-\cs_generate_variant:Nn \box_set_viewport:Nnnnn { c }
-\cs_new_protected:Npn \box_gset_viewport:Nnnnn #1#2#3#4#5
- { \@@_set_viewport:NnnnnN #1 {#2} {#3} {#4} {#5} \box_gset_eq:NN }
-\cs_generate_variant:Nn \box_gset_viewport:Nnnnn { c }
-\cs_new_protected:Npn \@@_set_viewport:NnnnnN #1#2#3#4#5#6
- {
- \hbox_set:Nn \l_@@_internal_box
- {
- \__kernel_kern:n { -#2 }
- \box_use:N #1
- \__kernel_kern:n { #4 - \box_wd:N #1 }
- }
- \dim_compare:nNnTF {#3} < \c_zero_dim
- {
- \hbox_set:Nn \l_@@_internal_box
- {
- \box_move_down:nn \c_zero_dim
- { \box_use_drop:N \l_@@_internal_box }
- }
- \box_set_dp:Nn \l_@@_internal_box { - \@@_dim_eval:n {#3} }
- }
- {
- \hbox_set:Nn \l_@@_internal_box
- { \box_move_down:nn {#3} { \box_use_drop:N \l_@@_internal_box } }
- \box_set_dp:Nn \l_@@_internal_box \c_zero_dim
- }
- \dim_compare:nNnTF {#5} > \c_zero_dim
- {
- \hbox_set:Nn \l_@@_internal_box
- {
- \box_move_up:nn \c_zero_dim
- { \box_use_drop:N \l_@@_internal_box }
- }
- \box_set_ht:Nn \l_@@_internal_box
- {
- (#5)
- \dim_compare:nNnT {#3} > \c_zero_dim
- { - (#3) }
- }
- }
- {
- \hbox_set:Nn \l_@@_internal_box
- {
- \box_move_up:nn { - \@@_dim_eval:n {#5} }
- { \box_use_drop:N \l_@@_internal_box }
- }
- \box_set_ht:Nn \l_@@_internal_box \c_zero_dim
- }
- #6 #1 \l_@@_internal_box
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3cctab.dtx b/macros/latex/contrib/l3kernel/l3cctab.dtx
deleted file mode 100644
index 5cdaa3dc92..0000000000
--- a/macros/latex/contrib/l3kernel/l3cctab.dtx
+++ /dev/null
@@ -1,958 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3cctab.dtx
-%
-% Copyright (C) 2018-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% http://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3cctab} module\\ Category code tables^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% A category code table enables rapid switching of all category codes in
-% one operation. For \LuaTeX{}, this is possible over the entire Unicode
-% range. For other engines, only the $8$-bit range ($0$--$255$) is covered by
-% such tables. The implementation of category code tables in \pkg{expl3}
-% also saves and restores the \TeX{} \tn{endlinechar} primitive value, meaning
-% they could be used for example to implement \cs{ExplSyntaxOn}.
-%
-% \section{Creating and initialising category code tables}
-%
-% \begin{function}[updated = 2020-07-02]{\cctab_new:N,\cctab_new:c}
-% \begin{syntax}
-% \cs{cctab_new:N} \meta{category code table}
-% \end{syntax}
-% Creates a new \meta{category code table} variable or raises an error if
-% the name is already taken. The declaration is global. The
-% \meta{category code table} is initialised with the codes
-% as used by \IniTeX{}.
-% \end{function}
-%
-% \begin{function}[updated = 2020-07-07]{\cctab_const:Nn,\cctab_const:cn}
-% \begin{syntax}
-% \cs{cctab_const:Nn} \meta{category code table} \Arg{category code set up}
-% \end{syntax}
-% Creates a new \meta{category code table}, applies (in a group) the
-% \meta{category code set up} on top of \IniTeX{} settings,
-% then saves them globally as a constant
-% table. The \meta{category code set up} can include a call to
-% \cs{cctab_select:N}.
-% \end{function}
-%
-% \begin{function}[updated = 2020-07-07]{\cctab_gset:Nn,\cctab_gset:cn}
-% \begin{syntax}
-% \cs{cctab_gset:Nn} \meta{category code table} \Arg{category code set up}
-% \end{syntax}
-% Starting from the \IniTeX{} category codes,
-% applies (in a group) the \meta{category code set up}, then saves them
-% globally in the \meta{category code table}. The \meta{category code set up}
-% can include a call to \cs{cctab_select:N}.
-% \end{function}
-%
-% \begin{function}[added = 2023-05-26]
-% {\cctab_gsave_current:N,\cctab_gsave_current:c}
-% \begin{syntax}
-% \cs{cctab_gsave_current:N} \meta{category code table}
-% \end{syntax}
-% Saves the current prevailing category codes in the
-% \meta{category code table}.
-% \end{function}
-%
-% \section{Using category code tables}
-%
-% \begin{function}[updated = 2020-07-02]{\cctab_begin:N,\cctab_begin:c}
-% \begin{syntax}
-% \cs{cctab_begin:N} \meta{category code table}
-% \end{syntax}
-% Switches locally the category codes in force to those stored in the
-% \meta{category code table}. The prevailing codes before the
-% function is called are added to a stack, for use with
-% \cs{cctab_end:}. This function does not start a \TeX{} group.
-% \end{function}
-%
-% \begin{function}[updated = 2020-07-02]{\cctab_end:}
-% \begin{syntax}
-% \cs{cctab_end:}
-% \end{syntax}
-% Ends the scope of a \meta{category code table} started using
-% \cs{cctab_begin:N}, returning the codes to those in force before the
-% matching \cs{cctab_begin:N} was used. This must be used within the
-% same \TeX{} group (and at the same \TeX{} group level) as the
-% matching \cs{cctab_begin:N}.
-% \end{function}
-%
-% \begin{function}[added = 2020-05-19, updated = 2020-07-02]{\cctab_select:N, \cctab_select:c}
-% \begin{syntax}
-% \cs{cctab_select:N} \meta{category code table}
-% \end{syntax}
-% Selects the \meta{category code table} for the scope of the current
-% group. This is in particular useful in the \meta{setup} arguments
-% of \cs{tl_set_rescan:Nnn}, \cs{tl_rescan:nn}, \cs{cctab_const:Nn},
-% and \cs{cctab_gset:Nn}.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2021-05-10]{\cctab_item:Nn, \cctab_item:cn}
-% \begin{syntax}
-% \cs{cctab_item:Nn} \meta{category code table} \Arg{int expr}
-% \end{syntax}
-% Determines the \meta{character} with character code given by the
-% \meta{int expr} and expands to its category code specified
-% by the \meta{category code table}.
-% \end{function}
-%
-% \section{Category code table conditionals}
-%
-% \begin{function}[pTF]{\cctab_if_exist:N, \cctab_if_exist:c}
-% \begin{syntax}
-% \cs{cctab_if_exist_p:N} \meta{category code table}
-% \cs{cctab_if_exist:NTF} \meta{category code table} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests whether the \meta{category code table} is currently defined.
-% This does not check that the \meta{category code table} really is a
-% category code table.
-% \end{function}
-%
-% \section{Constant and scratch category code tables}
-%
-% \begin{variable}[updated = 2020-07-10]{\c_code_cctab}
-% Category code table for the \pkg{expl3} code environment; this does
-% \emph{not} include \texttt{@}, which is retained as an \enquote{other}
-% character. Sets the \tn{endlinechar} value to $32$ (a space).
-% \end{variable}
-%
-% \begin{variable}[updated = 2020-07-08]{\c_document_cctab}
-% Category code table for a standard \LaTeX{} document, as set by the \LaTeX{}
-% kernel. In particular, the upper-half of the $8$-bit range will be set to
-% \enquote{active} with \pdfTeX{} \emph{only}. No \pkg{babel} shorthands
-% will be activated. Sets the \tn{endlinechar} value to $13$ (normal
-% line ending).
-% \end{variable}
-%
-% \begin{variable}[updated = 2020-07-02]{\c_initex_cctab}
-% Category code table as set up by \IniTeX{}.
-% \end{variable}
-%
-% \begin{variable}[updated = 2020-07-02]{\c_other_cctab}
-% Category code table where all characters have category code $12$
-% (other). Sets the \tn{endlinechar} value to $-1$.
-% \end{variable}
-%
-% \begin{variable}[updated = 2020-07-02]{\c_str_cctab}
-% Category code table where all characters have category code $12$
-% (other) with the exception of spaces, which have category code
-% $10$ (space). Sets the \tn{endlinechar} value to $-1$.
-% \end{variable}
-%
-% \begin{variable}[added = 2023-05-26]{\g_tmpa_cctab, \g_tmpb_cctab}
-% Scratch category code tables.
-% \end{variable}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3cctab} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=cctab>
-% \end{macrocode}
-%
-% As \LuaTeX{} offers engine support for category code tables, and this
-% is entirely lacking from the other engines, we need two complementary
-% approaches. (Some future \XeTeX{} may add support, at which point the
-% conditionals below would be different.)
-%
-% \subsection{Variables}
-%
-% \begin{variable}{\g_@@_stack_seq, \g_@@_unused_seq}
-% List of catcode tables saved by nested \cs{cctab_begin:N}, to
-% restore catcodes at the matching \cs{cctab_end:}. When popped from
-% the \cs{g_@@_stack_seq} the table numbers are stored in
-% \cs{g_@@_unused_seq} for later reuse.
-% \begin{macrocode}
-\seq_new:N \g_@@_stack_seq
-\seq_new:N \g_@@_unused_seq
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\g_@@_group_seq}
-% A stack to store the group level when a catcode table started.
-% \begin{macrocode}
-\seq_new:N \g_@@_group_seq
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\g_@@_allocate_int}
-% Integer to keep track of what category code table to allocate. In
-% \LuaTeX{} it is only used in format mode to implement
-% \cs{cctab_new:N}. In other engines it is used to make csnames for
-% dynamic tables.
-% \begin{macrocode}
-\int_new:N \g_@@_allocate_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_internal_a_tl,\l_@@_internal_b_tl}
-% Scratch space. For instance, when popping
-% \cs{g_@@_stack_seq}/\cs{g_@@_unused_seq}, consists of the
-% catcodetable number (integer denotation) in \LuaTeX{}, or of an
-% intarray variable (as a single token) in other engines.
-% \begin{macrocode}
-\tl_new:N \l_@@_internal_a_tl
-\tl_new:N \l_@@_internal_b_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\g_@@_endlinechar_prop}
-% In \LuaTeX{} we store the \tn{endlinechar} associated to each
-% \tn{catcodetable} in a property list, unless it is the default
-% value~$13$.
-% \begin{macrocode}
-\prop_new:N \g_@@_endlinechar_prop
-% \end{macrocode}
-% \end{variable}
-%
-% \subsection{Allocating category code tables}
-%
-% \begin{macro}{\cctab_new:N, \cctab_new:c, \@@_new:N, \@@_gstore:Nnn}
-% The \cs{@@_new:N} auxiliary allocates a new catcode table but does
-% not attempt to set its value consistently across engines. It is
-% used both in \cs{cctab_new:N}, which sets catcodes to \IniTeX{}
-% values, and in \cs{cctab_begin:N}/\cs{cctab_end:} for dynamically
-% allocated tables.
-%
-% First, the \LuaTeX{} case.
-% Creating a new category code table is done like other registers.
-% In Con\TeX{}t, \tn{newcatcodetable} does not include the initialisation,
-% so that is added explicitly.
-% \begin{macrocode}
-\sys_if_engine_luatex:TF
- {
- \cs_new_protected:Npn \cctab_new:N #1
- {
- \__kernel_chk_if_free_cs:N #1
- \@@_new:N #1
- }
- \cs_new_protected:Npn \@@_new:N #1
- {
- \newcatcodetable #1
- \tex_initcatcodetable:D #1
- }
- }
-% \end{macrocode}
-% Now the case for other engines. Here, each table is an integer
-% array. Following the \LuaTeX{} pattern, a new table starts with
-% \IniTeX{} codes. The index base is out-by-one, so we have an
-% internal function to handle that. The \IniTeX{} \tn{endlinechar} is
-% $13$.
-% \begin{macrocode}
- {
- \cs_new_protected:Npn \@@_new:N #1
- { \intarray_new:Nn #1 { 257 } }
- \cs_new_protected:Npn \@@_gstore:Nnn #1#2#3
- { \intarray_gset:Nnn #1 { \int_eval:n { #2 + 1 } } {#3} }
- \cs_new_protected:Npn \cctab_new:N #1
- {
- \__kernel_chk_if_free_cs:N #1
- \@@_new:N #1
- \int_step_inline:nn { 256 }
- { \__kernel_intarray_gset:Nnn #1 {##1} { 12 } }
- \__kernel_intarray_gset:Nnn #1 { 257 } { 13 }
- \@@_gstore:Nnn #1 { 0 } { 9 }
- \@@_gstore:Nnn #1 { 13 } { 5 }
- \@@_gstore:Nnn #1 { 32 } { 10 }
- \@@_gstore:Nnn #1 { 37 } { 14 }
- \int_step_inline:nnn { 65 } { 90 }
- { \@@_gstore:Nnn #1 {##1} { 11 } }
- \@@_gstore:Nnn #1 { 92 } { 0 }
- \int_step_inline:nnn { 97 } { 122 }
- { \@@_gstore:Nnn #1 {##1} { 11 } }
- \@@_gstore:Nnn #1 { 127 } { 15 }
- }
- }
-\cs_generate_variant:Nn \cctab_new:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Saving category code tables}
-%
-% \begin{macro}{\@@_gset:n, \@@_gset_aux:n}
-% In various functions we need to save the current catcodes (globally)
-% in a table. In \LuaTeX{}, saving the catcodes is a primitives, but
-% the \tn{endlinechar} needs more work: to avoid filling
-% \cs{g_@@_endlinechar_prop} with many entries we special-case the
-% default value $13$. In other engines we store $256$ current
-% catcodes and the \tn{endlinechar} in an intarray variable.
-% \begin{macrocode}
-\sys_if_engine_luatex:TF
- {
- \cs_new_protected:Npn \@@_gset:n #1
- { \exp_args:Nf \@@_gset_aux:n { \int_eval:n {#1} } }
- \cs_new_protected:Npn \@@_gset_aux:n #1
- {
- \tex_savecatcodetable:D #1 \scan_stop:
- \int_compare:nNnTF { \tex_endlinechar:D } = { 13 }
- { \prop_gremove:Nn \g_@@_endlinechar_prop {#1} }
- {
- \prop_gput:NnV \g_@@_endlinechar_prop {#1}
- \tex_endlinechar:D
- }
- }
- }
- {
- \cs_new_protected:Npn \@@_gset:n #1
- {
- \int_step_inline:nn { 256 }
- {
- \__kernel_intarray_gset:Nnn #1 {##1}
- { \char_value_catcode:n { ##1 - 1 } }
- }
- \__kernel_intarray_gset:Nnn #1 { 257 }
- { \tex_endlinechar:D }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\cctab_gset:Nn, \cctab_gset:cn}
-% Category code tables are always global, so only one version of
-% assignments is needed. Simply run the setup in a group and save the
-% result in a category code table~|#1|, provided it is valid. The
-% internal function is defined above depending on the engine.
-% \begin{macrocode}
-\cs_new_protected:Npn \cctab_gset:Nn #1#2
- {
- \@@_chk_if_valid:NT #1
- {
- \group_begin:
- \cctab_select:N \c_initex_cctab
- #2 \scan_stop:
- \@@_gset:n {#1}
- \group_end:
- }
- }
-\cs_generate_variant:Nn \cctab_gset:Nn { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\cctab_gsave_current:N, \cctab_gsave_current:c}
-% Very simple.
-% \begin{macrocode}
-\cs_new_protected:Npn \cctab_gsave_current:N #1
- {
- \@@_chk_if_valid:NT #1
- { \@@_gset:n {#1} }
- }
-\cs_generate_variant:Nn \cctab_gsave_current:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Using category code tables}
-%
-% \begin{variable}{\g_@@_internal_cctab}
-% \begin{macro}[EXP]{\@@_internal_cctab_name:}
-% In \LuaTeX{}, we must ensure that the saved tables are read-only.
-% This is done by applying the saved table, then switching immediately
-% to a scratch table. Any later catcode assignment will affect that
-% scratch table rather than the saved one. If we simply switched to
-% the saved tables, then \cs{char_set_catcode_other:N} in the example
-% below would change \cs{c_document_cctab} and a later use of that
-% table would give the wrong category code to |_|.
-% \begin{verbatim}
-% \use:n
-% {
-% \cctab_begin:N \c_document_cctab
-% \char_set_catcode_other:N \_
-% \cctab_end:
-% \cctab_begin:N \c_document_cctab
-% \int_compare:nTF { \char_value_catcode:n { `_ } = 8 }
-% { \TRUE } { \ERROR }
-% \cctab_end:
-% }
-% \end{verbatim}
-% We must also make sure that a scratch table is never reused in a
-% nested group: in the following example, the scratch table used by
-% the first \cs{cctab_begin:N} would be changed globally by the second
-% one issuing \tn{savecatcodetable}, and after \cs{group_end:} the
-% wrong category codes (those of \cs{c_str_cctab}) would be imposed.
-% Note that the inner \cs{cctab_end:} restores the correct catcodes
-% only locally, so the problem really comes up because of the
-% different grouping level. The simplest is to use a scratch table
-% labeled by the \tn{currentgrouplevel}. We initialize one of them as
-% an example.
-% \begin{verbatim}
-% \use:n
-% {
-% \cctab_begin:N \c_document_cctab
-% \group_begin:
-% \cctab_begin:N \c_str_cctab
-% \cctab_end:
-% \group_end:
-% \cctab_end:
-% }
-% \end{verbatim}
-% \begin{macrocode}
-\sys_if_engine_luatex:T
- {
- \@@_new:N \g_@@_internal_cctab
- \cs_new:Npn \@@_internal_cctab_name:
- {
- g_@@_internal
- \tex_romannumeral:D \tex_currentgrouplevel:D
- _cctab
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{variable}
-%
-% \begin{macro}{\cctab_select:N, \cctab_select:c}
-% \begin{macro}{\@@_select:N}
-% The public function simply checks the \meta{cctab~var} exists before
-% using the engine-dependent \cs{@@_select:N}. Skipping these checks
-% would result in low-level engine-dependent errors. First, the
-% \LuaTeX{} case. In other engines, selecting a catcode table is a matter
-% of doing $256$ catcode assignments and setting the \tn{endlinechar}.
-% \begin{macrocode}
-\cs_new_protected:Npn \cctab_select:N #1
- { \@@_chk_if_valid:NT #1 { \@@_select:N #1 } }
-\cs_generate_variant:Nn \cctab_select:N { c }
-\sys_if_engine_luatex:TF
- {
- \cs_new_protected:Npn \@@_select:N #1
- {
- \tex_catcodetable:D #1
- \prop_get:NVNTF \g_@@_endlinechar_prop #1 \l_@@_internal_a_tl
- { \int_set:Nn \tex_endlinechar:D { \l_@@_internal_a_tl } }
- { \int_set:Nn \tex_endlinechar:D { 13 } }
- \cs_if_exist:cF { \@@_internal_cctab_name: }
- { \exp_args:Nc \@@_new:N { \@@_internal_cctab_name: } }
- \exp_args:Nc \tex_savecatcodetable:D { \@@_internal_cctab_name: }
- \exp_args:Nc \tex_catcodetable:D { \@@_internal_cctab_name: }
- }
- }
- {
- \cs_new_protected:Npn \@@_select:N #1
- {
- \int_step_inline:nn { 256 }
- {
- \char_set_catcode:nn { ##1 - 1 }
- { \__kernel_intarray_item:Nn #1 {##1} }
- }
- \int_set:Nn \tex_endlinechar:D
- { \__kernel_intarray_item:Nn #1 { 257 } }
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{variable}{\g_@@_next_cctab}
-% \begin{macro}{\@@_begin_aux:}
-% For \cs{cctab_begin:N}/\cs{cctab_end:} we will need to allocate
-% dynamic tables. This is done here by \cs{@@_begin_aux:}, which puts
-% a table number (in \LuaTeX{}) or name (in other engines) into
-% \cs{l_@@_internal_a_tl}. In \LuaTeX{} this simply calls \cs{@@_new:N}
-% and uses the resulting catcodetable number; in other engines we need
-% to give a name to the intarray variable and use that. In \LuaTeX{},
-% to restore catcodes at \cs{cctab_end:} we cannot just set
-% \tn{catcodetable} to its value before \cs{cctab_begin:N}, because
-% that table may have been altered by other code in the mean time. So
-% we must make sure to save the catcodes in a table we control and
-% restore them at \cs{cctab_end:}.
-% \begin{macrocode}
-\sys_if_engine_luatex:TF
- {
- \cs_new_protected:Npn \@@_begin_aux:
- {
- \@@_new:N \g_@@_next_cctab
- \tl_set:NV \l_@@_internal_a_tl \g_@@_next_cctab
- \cs_undefine:N \g_@@_next_cctab
- }
- }
- {
- \cs_new_protected:Npn \@@_begin_aux:
- {
- \int_gincr:N \g_@@_allocate_int
- \exp_args:Nc \@@_new:N
- { g_@@_ \int_use:N \g_@@_allocate_int _cctab }
- \exp_args:NNc \tl_set:Nn \l_@@_internal_a_tl
- { g_@@_ \int_use:N \g_@@_allocate_int _cctab }
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{variable}
-%
-% \begin{macro}{\cctab_begin:N, \cctab_begin:c}
-% Check the \meta{cctab~var} exists, to avoid low-level errors. Get
-% in \cs{l_@@_internal_a_tl} the number/name of a dynamic table, either
-% from \cs{g_@@_unused_seq} where we save tables that are not
-% currently in use, or from \cs{@@_begin_aux:} if none are available.
-% Then save the current catcodes into the table (pointed to by)
-% \cs{l_@@_internal_a_tl} and save that table number in a stack before
-% selecting the desired catcodes.
-% \begin{macrocode}
-\cs_new_protected:Npn \cctab_begin:N #1
- {
- \@@_chk_if_valid:NT #1
- {
- \seq_gpop:NNF \g_@@_unused_seq \l_@@_internal_a_tl
- { \@@_begin_aux: }
- \@@_chk_group_begin:e
- { \@@_nesting_number:N \l_@@_internal_a_tl }
- \seq_gpush:NV \g_@@_stack_seq \l_@@_internal_a_tl
- \exp_args:NV \@@_gset:n \l_@@_internal_a_tl
- \@@_select:N #1
- }
- }
-\cs_generate_variant:Nn \cctab_begin:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\cctab_end:}
-% Make sure a \cs{cctab_begin:N} was used some time earlier, get in
-% \cs{l_@@_internal_a_tl} the catcode table number/name in which the
-% prevailing catcodes were stored, then restore these catcodes. The
-% dynamic table is now unused hence stored in \cs{g_@@_unused_seq} for
-% recycling by later \cs{cctab_begin:N}.
-% \begin{macrocode}
-\cs_new_protected:Npn \cctab_end:
- {
- \seq_gpop:NNTF \g_@@_stack_seq \l_@@_internal_a_tl
- {
- \seq_gpush:NV \g_@@_unused_seq \l_@@_internal_a_tl
- \exp_args:Ne \@@_chk_group_end:n
- { \@@_nesting_number:N \l_@@_internal_a_tl }
- \@@_select:N \l_@@_internal_a_tl
- }
- { \msg_error:nn { cctab } { extra-end } }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {\@@_chk_group_begin:n,\@@_chk_group_begin:e, \@@_chk_group_end:n}
-% Catcode tables are not allowed to be intermixed with groups, so here
-% we check that they are properly nested regarding \TeX{} groups.
-% \cs{@@_chk_group_begin:n} stores the current group level in a stack,
-% and locally defines a dummy control sequence
-% \cs[no-index]{@@_group_\meta{cctab-level}_chk:}.
-%
-% \cs{@@_chk_group_end:n} pops the stack, and compares the returned
-% value with \cs{tex_currentgrouplevel:D}. If they differ,
-% \cs{cctab_end:} is in a different grouping level than the matching
-% \cs{cctab_begin:N}. If they are the same, both happened at the same
-% level, however a group might have ended and another started between
-% \cs{cctab_begin:N} and \cs{cctab_end:}:
-% \begin{verbatim}
-% \group_begin:
-% \cctab_begin:N \c_document_cctab
-% \group_end:
-% \group_begin:
-% \cctab_end:
-% \group_end:
-% \end{verbatim}
-% In this case checking \cs{tex_currentgrouplevel:D} is not enough, so
-% we locally define \cs[no-index]{@@_group_\meta{cctab-level}_chk:},
-% and then check if it exist in \cs{cctab_end:}. If it doesn't,
-% we know there was a group end where it shouldn't.
-%
-% The \meta{cctab-level} in the sentinel macro above cannot be
-% replaced by the more convenient \cs{tex_currentgrouplevel:D} because
-% with the latter we might be tricked. Suppose:
-% \begin{verbatim}
-% \group_begin:
-% \cctab_begin:N \c_code_cctab % A
-% \group_end:
-% \group_begin:
-% \cctab_begin:N \c_code_cctab % B
-% \cctab_end: % C
-% \cctab_end: % D
-% \group_end:
-% \end{verbatim}
-% The line marked with |A| would start a |cctab| with a sentinel token
-% named \cs[no-index]{@@_group_1_chk:}, which would disappear at the
-% \cs{group_end:} that follows. But |B| would create the same
-% sentinel token, since both are at the same group level. Line |C|
-% would end the |cctab| from line |B| correctly, but so would line |D|
-% because line |B| created the same sentinel token. Using
-% \meta{cctab-level} works correctly because it signals that certain
-% |cctab| level was activated somewhere, but if it doesn't exist when
-% the \cs{cctab_end:} is reached, we had a problem.
-%
-% Unfortunately these tests only flag the wrong usage at the
-% \cs{cctab_end:}, which might be far from the \cs{cctab_begin:N}.
-% However it isn't possible to signal the wrong usage at the
-% \cs{group_end:} without using \cs{tex_aftergroup:D}, which is
-% unsafe in certain types of groups.
-%
-% The three cases checked here just raise an error, and no recovery is
-% attempted: usually interleaving groups and catcode tables will work
-% predictably.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_chk_group_begin:n #1
- {
- \seq_gpush:Ne \g_@@_group_seq
- { \int_use:N \tex_currentgrouplevel:D }
- \cs_set_eq:cN { @@_group_ #1 _chk: } \prg_do_nothing:
- }
-\cs_generate_variant:Nn \@@_chk_group_begin:n { e }
-\cs_new_protected:Npn \@@_chk_group_end:n #1
- {
- \seq_gpop:NN \g_@@_group_seq \l_@@_internal_b_tl
- \bool_lazy_and:nnF
- {
- \int_compare_p:nNn
- { \tex_currentgrouplevel:D } = { \l_@@_internal_b_tl }
- }
- { \cs_if_exist_p:c { @@_group_ #1 _chk: } }
- {
- \msg_error:nne { cctab } { group-mismatch }
- {
- \int_sign:n
- { \tex_currentgrouplevel:D - \l_@@_internal_b_tl }
- }
- }
- \cs_undefine:c { @@_group_ #1 _chk: }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_nesting_number:N,\@@_nesting_number:w}
-% This macro returns the numeric index of the current catcode table.
-% In \LuaTeX{} this is just the argument, which is a count reference
-% to a \tn{catcodetable} register. In other engines, the number is
-% extracted from the |cctab| variable.
-% \begin{macrocode}
-\sys_if_engine_luatex:TF
- { \cs_new:Npn \@@_nesting_number:N #1 {#1} }
- {
- \cs_new:Npn \@@_nesting_number:N #1
- {
- \exp_after:wN \exp_after:wN \exp_after:wN \@@_nesting_number:w
- \exp_after:wN \token_to_str:N #1
- }
- \use:e
- {
- \cs_new:Npn \exp_not:N \@@_nesting_number:w
- #1 \tl_to_str:n { g_@@_ } #2 \tl_to_str:n { _cctab } {#2}
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% Finally, install some code at the end of the \TeX{} run to check that
-% all \cs{cctab_begin:N} were ended by some \cs{cctab_end:}.
-% \begin{macrocode}
-\cs_if_exist:NT \hook_gput_code:nnn
- {
- \hook_gput_code:nnn { enddocument/end } { cctab }
- {
- \seq_if_empty:NF \g_@@_stack_seq
- { \msg_error:nn { cctab } { missing-end } }
- }
- }
-% \end{macrocode}
-%
-%
-% \begin{macro}{\cctab_item:Nn, \cctab_item:cn}
-% Evaluate the integer argument only once. In most engines the
-% |cctab| variable only has $256$ entries so we only look up the
-% catcode for these entries, otherwise we use the current catcode. In
-% particular, for out-of-range values we use whatever fall-back
-% \cs{char_value_catcode:n}. In \LuaTeX{}, we use the
-% |tex.getcatcode| function.
-% \begin{macrocode}
-\cs_new:Npn \cctab_item:Nn #1#2
- { \exp_args:Nf \@@_item:nN { \int_eval:n {#2} } #1 }
-\sys_if_engine_luatex:TF
- {
- \cs_new:Npn \@@_item:nN #1#2
- { \lua_now:e { tex.print(-2, tex.getcatcode(\int_use:N #2, #1)) } }
- }
- {
- \cs_new:Npn \@@_item:nN #1#2
- {
- \int_compare:nNnTF {#1} < { 256 }
- { \intarray_item:Nn #2 { #1 + 1 } }
- { \char_value_catcode:n {#1} }
- }
- }
-\cs_generate_variant:Nn \cctab_item:Nn { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Category code table conditionals}
-%
-% \begin{macro}[pTF]{\cctab_if_exist:N,\cctab_if_exist:c}
-% Checks whether a \meta{cctab~var} is defined.
-% \begin{macrocode}
-\prg_new_eq_conditional:NNn \cctab_if_exist:N \cs_if_exist:N
- { TF , T , F , p }
-\prg_new_eq_conditional:NNn \cctab_if_exist:c \cs_if_exist:c
- { TF , T , F , p }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[TF]{\@@_chk_if_valid:N}
-% \begin{macro}{\@@_chk_if_valid_aux:NTF}
-% Checks whether the argument is defined and whether it is a valid
-% \meta{cctab~var}. In \LuaTeX{} the validity of the \meta{cctab~var}
-% is checked by the engine, which complains if the argument is not a
-% \cs{chardef}'ed constant. In other engines, check if the given
-% command is an intarray variable (the underlying definition is a copy
-% of the \texttt{cmr10} font).
-% \begin{macrocode}
-\prg_new_protected_conditional:Npnn \@@_chk_if_valid:N #1
- { TF , T , F }
- {
- \cctab_if_exist:NTF #1
- {
- \@@_chk_if_valid_aux:NTF #1
- { \prg_return_true: }
- {
- \msg_error:nne { cctab } { invalid-cctab }
- { \token_to_str:N #1 }
- \prg_return_false:
- }
- }
- {
- \msg_error:nne { kernel } { command-not-defined }
- { \token_to_str:N #1 }
- \prg_return_false:
- }
- }
-\sys_if_engine_luatex:TF
- {
- \cs_new_protected:Npn \@@_chk_if_valid_aux:NTF #1
- {
- \int_compare:nNnTF {#1-1} < { \e@alloc@ccodetable@count }
- }
- \cs_if_exist:NT \c_syst_catcodes_n
- {
- \cs_gset_protected:Npn \@@_chk_if_valid_aux:NTF #1
- {
- \int_compare:nTF { #1 <= \c_syst_catcodes_n }
- }
- }
- }
- {
- \cs_new_protected:Npn \@@_chk_if_valid_aux:NTF #1
- {
- \exp_args:Nf \str_if_in:nnTF
- { \cs_meaning:N #1 }
- { select~font~cmr10~at~ }
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Constant category code tables}
-%
-% \begin{macro}{\cctab_const:Nn,\cctab_const:cn}
-% Creates a new \meta{cctab~var} then sets it with the current and
-% user-supplied codes.
-% \begin{macrocode}
-\cs_new_protected:Npn \cctab_const:Nn #1#2
- {
- \cctab_new:N #1
- \cctab_gset:Nn #1 {#2}
- }
-\cs_generate_variant:Nn \cctab_const:Nn { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}
-% {
-% \c_initex_cctab ,
-% \c_other_cctab ,
-% \c_str_cctab
-% }
-% Creating category code tables means thinking starting from \IniTeX{}.
-% For all-other and the standard \enquote{string} tables that's easy.
-% \begin{macrocode}
-\cctab_new:N \c_initex_cctab
-\cctab_const:Nn \c_other_cctab
- {
- \cctab_select:N \c_initex_cctab
- \int_set:Nn \tex_endlinechar:D { -1 }
- \int_step_inline:nnn { 0 } { 127 }
- { \char_set_catcode_other:n {#1} }
- }
-\cctab_const:Nn \c_str_cctab
- {
- \cctab_select:N \c_other_cctab
- \char_set_catcode_space:n { 32 }
- }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\c_code_cctab, \c_document_cctab}
-% To pick up document-level category codes, we need to delay set up to the
-% end of the format, where that's possible. Also, as there are a \emph{lot}
-% of category codes to set, we avoid using the official interface and store the
-% document codes using internal code. Depending on whether we are in the hook
-% or not, the catcodes may be code or document, so we explicitly set up both
-% correctly.
-% \begin{macrocode}
-\cs_if_exist:NTF \@expl@finalise@setup@@@@
- { \tl_gput_right:Nn \@expl@finalise@setup@@@@ }
- { \use:n }
- {
- \@@_new:N \c_code_cctab
- \group_begin:
- \int_set:Nn \tex_endlinechar:D { 32 }
- \char_set_catcode_invalid:n { 0 }
- \bool_lazy_or:nnTF
- { \sys_if_engine_xetex_p: } { \sys_if_engine_luatex_p: }
- { \int_step_function:nN { 31 } \char_set_catcode_invalid:n }
- { \int_step_function:nN { 31 } \char_set_catcode_active:n }
- \int_step_function:nnN { 33 } { 64 } \char_set_catcode_other:n
- \int_step_function:nnN { 65 } { 90 } \char_set_catcode_letter:n
- \int_step_function:nnN { 91 } { 96 } \char_set_catcode_other:n
- \int_step_function:nnN { 97 } { 122 } \char_set_catcode_letter:n
- \char_set_catcode_ignore:n { 9 } % tab
- \char_set_catcode_other:n { 10 } % lf
- \char_set_catcode_active:n { 12 } % ff
- \char_set_catcode_end_line:n { 13 } % cr
- \char_set_catcode_ignore:n { 32 } % space
- \char_set_catcode_parameter:n { 35 } % hash
- \char_set_catcode_math_toggle:n { 36 } % dollar
- \char_set_catcode_comment:n { 37 } % percent
- \char_set_catcode_alignment:n { 38 } % ampersand
- \char_set_catcode_letter:n { 58 } % colon
- \char_set_catcode_escape:n { 92 } % backslash
- \char_set_catcode_math_superscript:n { 94 } % circumflex
- \char_set_catcode_letter:n { 95 } % underscore
- \char_set_catcode_group_begin:n { 123 } % left brace
- \char_set_catcode_other:n { 124 } % pipe
- \char_set_catcode_group_end:n { 125 } % right brace
- \char_set_catcode_space:n { 126 } % tilde
- \char_set_catcode_invalid:n { 127 } % ^^?
- \bool_lazy_or:nnF
- { \sys_if_engine_xetex_p: } { \sys_if_engine_luatex_p: }
- { \int_step_function:nnN { 128 } { 255 } \char_set_catcode_active:n }
- \@@_gset:n { \c_code_cctab }
- \group_end:
- \cctab_const:Nn \c_document_cctab
- {
- \cctab_select:N \c_code_cctab
- \int_set:Nn \tex_endlinechar:D { 13 }
- \char_set_catcode_space:n { 9 }
- \char_set_catcode_space:n { 32 }
- \char_set_catcode_other:n { 58 }
- \char_set_catcode_math_subscript:n { 95 }
- \char_set_catcode_active:n { 126 }
- }
- }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\g_tmpa_cctab, \g_tmpb_cctab}
-% \begin{macrocode}
-\cctab_new:N \g_tmpa_cctab
-\cctab_new:N \g_tmpb_cctab
-% \end{macrocode}
-% \end{variable}
-%
-% \subsection{Messages}
-%
-% \begin{macrocode}
-\msg_new:nnnn { cctab } { stack-full }
- { The~category~code~table~stack~is~exhausted. }
- {
- LaTeX~has~been~asked~to~switch~to~a~new~category~code~table,~
- but~there~is~no~more~space~to~do~this!
- }
-\msg_new:nnnn { cctab } { extra-end }
- { Extra~\iow_char:N\\cctab_end:~ignored~\msg_line_context:. }
- {
- LaTeX~came~across~a~\iow_char:N\\cctab_end:~without~a~matching~
- \iow_char:N\\cctab_begin:N.~This~command~will~be~ignored.
- }
-\msg_new:nnnn { cctab } { missing-end }
- { Missing~\iow_char:N\\cctab_end:~before~end~of~TeX~run. }
- {
- LaTeX~came~across~more~\iow_char:N\\cctab_begin:N~than~
- \iow_char:N\\cctab_end:.
- }
-\msg_new:nnnn { cctab } { invalid-cctab }
- { Invalid~\iow_char:N\\catcode~table. }
- {
- You~can~only~switch~to~a~\iow_char:N\\catcode~table~that~is~
- initialized~using~\iow_char:N\\cctab_new:N~or~
- \iow_char:N\\cctab_const:Nn.
- }
-\msg_new:nnnn { cctab } { group-mismatch }
- {
- \iow_char:N\\cctab_end:~occurred~in~a~
- \int_case:nn {#1}
- {
- { 0 } { different~group }
- { 1 } { higher~group~level }
- { -1 } { lower~group~level }
- } ~than~
- the~matching~\iow_char:N\\cctab_begin:N.
- }
- {
- Catcode~tables~and~groups~must~be~properly~nested,~but~
- you~tried~to~interleave~them.~LaTeX~will~try~to~proceed,~
- but~results~may~be~unexpected.
- }
-\prop_gput:Nnn \g_msg_module_name_prop { cctab } { LaTeX }
-\prop_gput:Nnn \g_msg_module_type_prop { cctab } { }
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-%\PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3clist.dtx b/macros/latex/contrib/l3kernel/l3clist.dtx
deleted file mode 100644
index ad65a4b174..0000000000
--- a/macros/latex/contrib/l3kernel/l3clist.dtx
+++ /dev/null
@@ -1,2248 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3clist.dtx
-%
-% Copyright (C) 2004-2011 Frank Mittelbach, The LaTeX Project
-% (C) 2012-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3clist} module\\ Comma separated lists^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% Comma lists (in short, |clist|) contain ordered data where items can
-% be added to the left or right end of the list. This data type allows
-% basic list
-% manipulations such as adding/removing items, applying a function to
-% every item, removing duplicate items, extracting a given item, using
-% the comma list with specified separators, and so on. Sequences
-% (defined in \pkg{l3seq}) are safer, faster, and provide more features,
-% so they should often be preferred to comma lists. Comma lists are
-% mostly useful when interfacing with \LaTeXe{} or other code that
-% expects or provides items separated by commas.
-%
-% Several items can be added at once. To ease input of comma lists from
-% data provided by a user outside an \cs{ExplSyntaxOn} \ldots{}
-% \cs{ExplSyntaxOff} block, spaces are removed from both sides of each
-% comma-delimited argument upon input. Blank arguments are ignored, to
-% allow for trailing commas or repeated commas (which may otherwise
-% arise when concatenating comma lists \enquote{by hand}). In addition,
-% a set of braces is removed if the result of space-trimming is braced:
-% this allows the storage of any item in a comma list. For instance,
-% \begin{verbatim}
-% \clist_new:N \l_my_clist
-% \clist_put_left:Nn \l_my_clist { ~a~ , ~{b}~ , c~\d }
-% \clist_put_right:Nn \l_my_clist { ~{e~} , , {{f}} , }
-% \end{verbatim}
-% results in |\l_my_clist| containing |a,b,c~\d,{e~},{{f}}| namely the
-% five items |a|, |b|, |c~\d|, |e~| and~|{f}|. Comma lists normally do
-% not contain empty or blank items so the following gives an empty comma list:
-% \begin{verbatim}
-% \clist_clear_new:N \l_my_clist
-% \clist_set:Nn \l_my_clist { , ~ , , }
-% \clist_if_empty:NTF \l_my_clist { true } { false }
-% \end{verbatim}
-% and it leaves \texttt{true} in the input stream. To include an
-% \enquote{unsafe} item (empty, or one that contains a comma, or starts
-% or ends with a space, or is a single brace group), surround it with
-% braces.
-%
-% Any |n|-type token list is a valid comma list input for \pkg{l3clist}
-% functions, which will split the token list at every comma and process
-% the items as described above. On the other hand, |N|-type functions
-% expect comma list variables, which are particular token list variables
-% in which this processing of items (and removal of blank items) has
-% already occurred. Because comma list variables are token list
-% variables, expanding them once yields their items separated by commas,
-% and \pkg{l3tl} functions such as \cs{tl_show:N} can be applied to
-% them. (These functions often have \pkg{l3clist} analogues, which
-% should be preferred.)
-%
-% Almost all operations on comma lists are
-% noticeably slower than those on sequences so converting the data to
-% sequences using \cs{seq_set_from_clist:Nn} (see \pkg{l3seq}) may be
-% advisable if speed is important. The exception is that
-% \cs{clist_if_in:NnTF} and \cs{clist_remove_duplicates:N} may be faster
-% than their sequence analogues for large lists. However, these
-% functions work slowly for \enquote{unsafe} items that must be braced,
-% and may produce errors when their argument contains |{|, |}| or |#|
-% (assuming the usual \TeX{} category codes apply). The sequence
-% data type should thus certainly be preferred to comma lists to store
-% such items.
-%
-% \section{Creating and initialising comma lists}
-%
-% \begin{function}{\clist_new:N, \clist_new:c}
-% \begin{syntax}
-% \cs{clist_new:N} \meta{clist~var}
-% \end{syntax}
-% Creates a new \meta{clist~var} or raises an error if the name is
-% already taken. The declaration is global. The \meta{clist~var}
-% initially contains no items.
-% \end{function}
-%
-% \begin{function}[added = 2014-07-05]
-% {
-% \clist_const:Nn, \clist_const:Ne,
-% \clist_const:cn, \clist_const:ce
-% }
-% \begin{syntax}
-% \cs{clist_const:Nn} \meta{clist~var} \Arg{comma list}
-% \end{syntax}
-% Creates a new constant \meta{clist~var} or raises an error
-% if the name is already taken. The value of the
-% \meta{clist~var} is set globally to the
-% \meta{comma list}.
-% \end{function}
-%
-% \begin{function}
-% {\clist_clear:N, \clist_clear:c, \clist_gclear:N, \clist_gclear:c}
-% \begin{syntax}
-% \cs{clist_clear:N} \meta{clist~var}
-% \end{syntax}
-% Clears all items from the \meta{clist~var}.
-% \end{function}
-%
-% \begin{function}
-% {
-% \clist_clear_new:N, \clist_clear_new:c,
-% \clist_gclear_new:N, \clist_gclear_new:c
-% }
-% \begin{syntax}
-% \cs{clist_clear_new:N} \meta{clist~var}
-% \end{syntax}
-% Ensures that the \meta{clist~var} exists globally by applying
-% \cs{clist_new:N} if necessary, then applies
-% \cs[index=clist_clear:N]{clist_(g)clear:N} to leave
-% the list empty.
-% \end{function}
-%
-% \begin{function}
-% {
-% \clist_set_eq:NN, \clist_set_eq:cN,
-% \clist_set_eq:Nc, \clist_set_eq:cc,
-% \clist_gset_eq:NN, \clist_gset_eq:cN,
-% \clist_gset_eq:Nc, \clist_gset_eq:cc
-% }
-% \begin{syntax}
-% \cs{clist_set_eq:NN} \meta{clist~var_1} \meta{clist~var_2}
-% \end{syntax}
-% Sets the content of \meta{clist~var_1} equal to that of
-% \meta{clist~var_2}. To set a token list variable equal to a comma
-% list variable, use \cs{tl_set_eq:NN}. Conversely, setting a comma
-% list variable to a token list is unadvisable unless one checks
-% space-trimming and related issues.
-% \end{function}
-%
-% \begin{function}[added = 2014-07-17]
-% {
-% \clist_set_from_seq:NN, \clist_set_from_seq:cN,
-% \clist_set_from_seq:Nc, \clist_set_from_seq:cc,
-% \clist_gset_from_seq:NN, \clist_gset_from_seq:cN,
-% \clist_gset_from_seq:Nc, \clist_gset_from_seq:cc
-% }
-% \begin{syntax}
-% \cs{clist_set_from_seq:NN} \meta{clist~var} \meta{seq~var}
-% \end{syntax}
-% Converts the data in the \meta{seq~var} into a \meta{clist~var}:
-% the original \meta{seq~var} is unchanged.
-% Items which contain either spaces or commas are surrounded by braces.
-% \end{function}
-%
-% \begin{function}
-% {
-% \clist_concat:NNN, \clist_concat:ccc,
-% \clist_gconcat:NNN, \clist_gconcat:ccc
-% }
-% \begin{syntax}
-% \cs{clist_concat:NNN} \meta{clist~var_1} \meta{clist~var_2} \meta{clist~var_3}
-% \end{syntax}
-% Concatenates the content of \meta{clist~var_2} and \meta{clist~var_3}
-% together and saves the result in \meta{clist~var_1}. The items in
-% \meta{clist~var_2} are placed at the left side of the new comma list.
-% \end{function}
-%
-% \begin{function}[EXP, pTF, added=2012-03-03]
-% {\clist_if_exist:N, \clist_if_exist:c}
-% \begin{syntax}
-% \cs{clist_if_exist_p:N} \meta{clist~var}
-% \cs{clist_if_exist:NTF} \meta{clist~var} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests whether the \meta{clist~var} is currently defined. This does
-% not check that the \meta{clist~var} really is a comma list.
-% \end{function}
-%
-% \section{Adding data to comma lists}
-%
-% \begin{function}[added = 2011-09-06]
-% {
-% \clist_set:Nn, \clist_set:NV, \clist_set:Ne,
-% \clist_set:No,
-% \clist_set:cn, \clist_set:cV, \clist_set:ce,
-% \clist_set:co,
-% \clist_gset:Nn, \clist_gset:NV, \clist_gset:Ne,
-% \clist_gset:No,
-% \clist_gset:cn, \clist_gset:cV, \clist_gset:ce,
-% \clist_gset:co
-% }
-% \begin{syntax}
-% \cs{clist_set:Nn} \meta{clist~var} |{|\meta{item_1},\ldots{},\meta{item_n}|}|
-% \end{syntax}
-% Sets \meta{clist~var} to contain the \meta{items},
-% removing any previous content from the variable.
-% Blank items are omitted, spaces are removed from both sides of each
-% item, then a set of braces is removed if the resulting space-trimmed
-% item is braced.
-% To store some \meta{tokens} as a single \meta{item} even if the
-% \meta{tokens} contain commas or spaces, add a set of braces:
-% \cs{clist_set:Nn} \meta{clist~var} |{| \Arg{tokens} |}|.
-% \end{function}
-%
-% \begin{function}[updated = 2011-09-05]
-% {
-% \clist_put_left:Nn, \clist_put_left:NV,
-% \clist_put_left:Nv, \clist_put_left:Ne,
-% \clist_put_left:No,
-% \clist_put_left:cn, \clist_put_left:cV,
-% \clist_put_left:cv, \clist_put_left:ce,
-% \clist_put_left:co,
-% \clist_gput_left:Nn, \clist_gput_left:NV,
-% \clist_gput_left:Nv, \clist_gput_left:Ne,
-% \clist_gput_left:No,
-% \clist_gput_left:cn, \clist_gput_left:cV,
-% \clist_gput_left:cv, \clist_gput_left:ce,
-% \clist_gput_left:co
-% }
-% \begin{syntax}
-% \cs{clist_put_left:Nn} \meta{clist~var} |{|\meta{item_1},\ldots{},\meta{item_n}|}|
-% \end{syntax}
-% Appends the \meta{items} to the left of the \meta{clist~var}.
-% Blank items are omitted, spaces are removed from both sides of each
-% item, then a set of braces is removed if the resulting space-trimmed
-% item is braced.
-% To append some \meta{tokens} as a single \meta{item} even if the
-% \meta{tokens} contain commas or spaces, add a set of braces:
-% \cs{clist_put_left:Nn} \meta{clist~var} |{| \Arg{tokens} |}|.
-% \end{function}
-%
-% \begin{function}[updated = 2011-09-05]
-% {
-% \clist_put_right:Nn, \clist_put_right:NV,
-% \clist_put_right:Nv, \clist_put_right:Ne,
-% \clist_put_right:No,
-% \clist_put_right:cn, \clist_put_right:cV,
-% \clist_put_right:cv, \clist_put_right:ce,
-% \clist_put_right:co,
-% \clist_gput_right:Nn, \clist_gput_right:NV,
-% \clist_gput_right:Nv, \clist_gput_right:Ne,
-% \clist_gput_right:No,
-% \clist_gput_right:cn, \clist_gput_right:cV,
-% \clist_gput_right:cv, \clist_gput_right:ce,
-% \clist_gput_right:co
-% }
-% \begin{syntax}
-% \cs{clist_put_right:Nn} \meta{clist~var} |{|\meta{item_1},\ldots{},\meta{item_n}|}|
-% \end{syntax}
-% Appends the \meta{items} to the right of the \meta{clist~var}.
-% Blank items are omitted, spaces are removed from both sides of each
-% item, then a set of braces is removed if the resulting space-trimmed
-% item is braced.
-% To append some \meta{tokens} as a single \meta{item} even if the
-% \meta{tokens} contain commas or spaces, add a set of braces:
-% \cs{clist_put_right:Nn} \meta{clist~var} |{| \Arg{tokens} |}|.
-% \end{function}
-%
-% \section{Modifying comma lists}
-%
-% While comma lists are normally used as ordered lists, it may be
-% necessary to modify the content. The functions here may be used
-% to update comma lists, while retaining the order of the unaffected
-% entries.
-%
-% \begin{function}
-% {
-% \clist_remove_duplicates:N, \clist_remove_duplicates:c,
-% \clist_gremove_duplicates:N, \clist_gremove_duplicates:c
-% }
-% \begin{syntax}
-% \cs{clist_remove_duplicates:N} \meta{clist~var}
-% \end{syntax}
-% Removes duplicate items from the \meta{clist~var}, leaving the
-% left most copy of each item in the \meta{clist~var}. The \meta{item}
-% comparison takes place on a token basis, as for \cs{tl_if_eq:nnTF}.
-% \begin{texnote}
-% This function iterates through every item in the \meta{clist~var} and
-% does a comparison with the \meta{items} already checked. It is therefore
-% relatively slow with large comma lists.
-% Furthermore, it may fail if any of the items in the
-% \meta{clist~var} contains |{|, |}|, or |#|
-% (assuming the usual \TeX{} category codes apply).
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[updated = 2011-09-06]
-% {
-% \clist_remove_all:Nn, \clist_remove_all:cn,
-% \clist_remove_all:NV, \clist_remove_all:cV,
-% \clist_gremove_all:Nn, \clist_gremove_all:cn,
-% \clist_gremove_all:NV, \clist_gremove_all:cV
-% }
-% \begin{syntax}
-% \cs{clist_remove_all:Nn} \meta{clist~var} \Arg{item}
-% \end{syntax}
-% Removes every occurrence of \meta{item} from the \meta{clist~var}.
-% The \meta{item} comparison takes place on a token basis, as for
-% \cs{tl_if_eq:nnTF}.
-% \begin{texnote}
-% The function may fail if the \meta{item} contains |{|, |}|, or |#|
-% (assuming the usual \TeX{} category codes apply).
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[added = 2014-07-18]
-% {
-% \clist_reverse:N, \clist_reverse:c,
-% \clist_greverse:N, \clist_greverse:c
-% }
-% \begin{syntax}
-% \cs{clist_reverse:N} \meta{clist~var}
-% \end{syntax}
-% Reverses the order of items stored in the \meta{clist~var}.
-% \end{function}
-%
-% \begin{function}[added = 2014-07-18]{\clist_reverse:n}
-% \begin{syntax}
-% \cs{clist_reverse:n} \Arg{comma list}
-% \end{syntax}
-% Leaves the items in the \meta{comma list} in the input stream in
-% reverse order. Contrarily to other what is done for other
-% \texttt{n}-type \meta{comma list} arguments, braces and spaces are
-% preserved by this process.
-% \begin{texnote}
-% The result is returned within \tn{unexpanded}, which means that the
-% comma list does not expand further when appearing in an
-% \texttt{e}-type or \texttt{x}-type argument expansion.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[added = 2017-02-06]
-% {\clist_sort:Nn, \clist_sort:cn, \clist_gsort:Nn, \clist_gsort:cn}
-% \begin{syntax}
-% \cs{clist_sort:Nn} \meta{clist var} \Arg{comparison code}
-% \end{syntax}
-% Sorts the items in the \meta{clist var} according to the
-% \meta{comparison code}, and assigns the result to
-% \meta{clist var}. The details of sorting comparison are
-% described in Section~\ref{sec:l3sort:mech}.
-% \end{function}
-%
-% \section{Comma list conditionals}
-%
-% \begin{function}[EXP,pTF]{\clist_if_empty:N, \clist_if_empty:c}
-% \begin{syntax}
-% \cs{clist_if_empty_p:N} \meta{clist~var}
-% \cs{clist_if_empty:NTF} \meta{clist~var} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the \meta{clist~var} is empty (containing no items).
-% \end{function}
-%
-% \begin{function}[EXP, pTF, added = 2014-07-05]{\clist_if_empty:n}
-% \begin{syntax}
-% \cs{clist_if_empty_p:n} \Arg{comma list}
-% \cs{clist_if_empty:nTF} \Arg{comma list} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the \meta{clist~var} is empty (containing no items).
-% The rules for space trimming are as for other \texttt{n}-type
-% comma-list functions, hence the comma list |{~,~,,~}| (without
-% outer braces) is empty, while |{~,{},}| (without outer braces)
-% contains one element, which happens to be empty: the comma-list
-% is not empty.
-% \end{function}
-%
-% \begin{function}[updated = 2011-09-06, TF]
-% {
-% \clist_if_in:Nn, \clist_if_in:NV, \clist_if_in:No,
-% \clist_if_in:cn, \clist_if_in:cV, \clist_if_in:co,
-% \clist_if_in:nn, \clist_if_in:nV, \clist_if_in:no
-% }
-% \begin{syntax}
-% \cs{clist_if_in:NnTF} \meta{clist~var} \Arg{item} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the \meta{item} is present in the \meta{clist~var}.
-% In the case of an \texttt{n}-type \meta{comma list}, the usual rules
-% of space trimming and brace stripping apply. Hence,
-% \begin{verbatim}
-% \clist_if_in:nnTF { a , {b}~ , {b} , c } { b } {true} {false}
-% \end{verbatim}
-% yields \texttt{true}.
-% \begin{texnote}
-% The function may fail if the \meta{item} contains |{|, |}|, or |#|
-% (assuming the usual \TeX{} category codes apply).
-% \end{texnote}
-% \end{function}
-%
-% \section{Mapping over comma lists}
-%
-% The functions described in this section apply a specified function
-% to each item of a comma list.
-% All mappings are done at the current group level, \emph{i.e.}~any
-% local assignments made by the \meta{function} or \meta{code} discussed
-% below remain in effect after the loop.
-%
-% When the comma list is given explicitly, as an \texttt{n}-type argument,
-% spaces are trimmed around each item.
-% If the result of trimming spaces is empty, the item is ignored.
-% Otherwise, if the item is surrounded by braces, one set is removed,
-% and the result is passed to the mapped function. Thus, if the
-% comma list that is being mapped is \verb*|{a , {{b} }, ,{}, {c},}|
-% then the arguments passed to the mapped function are
-% `\verb*|a|', `\verb*|{b} |', an empty argument, and `\verb*|c|'.
-%
-% When the comma list is given as an \texttt{N}-type argument, spaces
-% have already been trimmed on input, and items are simply stripped
-% of one set of braces if any. This case is more efficient than using
-% \texttt{n}-type comma lists.
-%
-% \begin{function}[rEXP, updated = 2012-06-29]
-% {\clist_map_function:NN, \clist_map_function:cN, \clist_map_function:nN, \clist_map_function:eN}
-% \begin{syntax}
-% \cs{clist_map_function:NN} \meta{clist~var} \meta{function}
-% \end{syntax}
-% Applies \meta{function} to every \meta{item} stored in the
-% \meta{clist~var}. The \meta{function} receives one argument for
-% each iteration. The \meta{items} are returned from left to right.
-% The function \cs{clist_map_inline:Nn} is in general more efficient
-% than \cs{clist_map_function:NN}.
-% \end{function}
-%
-% \begin{function}[updated = 2012-06-29]
-% {\clist_map_inline:Nn, \clist_map_inline:cn, \clist_map_inline:nn}
-% \begin{syntax}
-% \cs{clist_map_inline:Nn} \meta{clist~var} \Arg{inline function}
-% \end{syntax}
-% Applies \meta{inline function} to every \meta{item} stored
-% within the \meta{clist~var}. The \meta{inline function} should
-% consist of code which receives the \meta{item} as |#1|.
-% The \meta{items} are returned from left to right.
-% \end{function}
-%
-% \begin{function}[updated = 2012-06-29]
-% {\clist_map_variable:NNn, \clist_map_variable:cNn, \clist_map_variable:nNn}
-% \begin{syntax}
-% \cs{clist_map_variable:NNn} \meta{clist~var} \meta{variable} \Arg{code}
-% \end{syntax}
-% Stores each \meta{item} of the \meta{clist~var} in turn in the
-% (token list) \meta{variable} and applies the \meta{code}. The
-% \meta{code} will usually make use of the \meta{variable}, but this
-% is not enforced. The assignments to the \meta{variable} are local.
-% Its value after the loop is the last \meta{item} in the \meta{clist~var},
-% or its original value if there were no \meta{item}. The
-% \meta{items} are returned from left to right.
-% \end{function}
-%
-% \begin{function}[rEXP, added = 2021-05-05]
-% {\clist_map_tokens:Nn, \clist_map_tokens:cn, \clist_map_tokens:nn}
-% \begin{syntax}
-% \cs{clist_map_tokens:Nn} \meta{clist~var} \Arg{code}
-% \cs{clist_map_tokens:nn} \Arg{comma list} \Arg{code}
-% \end{syntax}
-% Calls \meta{code} \Arg{item} for every \meta{item} stored in the
-% \meta{clist~var}. The \meta{code} receives each \meta{item} as a
-% trailing brace group. If the \meta{code} consists of a single
-% function this is equivalent to \cs{clist_map_function:nN}.
-% \end{function}
-%
-% \begin{function}[rEXP, updated = 2012-06-29]{\clist_map_break:}
-% \begin{syntax}
-% \cs{clist_map_break:}
-% \end{syntax}
-% Used to terminate a \cs[no-index]{clist_map_\ldots{}} function before all
-% entries in the \meta{comma list} have been processed. This
-% normally takes place within a conditional statement, for example
-% \begin{verbatim}
-% \clist_map_inline:Nn \l_my_clist
-% {
-% \str_if_eq:nnTF { #1 } { bingo }
-% { \clist_map_break: }
-% {
-% % Do something useful
-% }
-% }
-% \end{verbatim}
-% Use outside of a \cs[no-index]{clist_map_\ldots{}} scenario leads to low
-% level \TeX{} errors.
-% \begin{texnote}
-% When the mapping is broken, additional tokens may be inserted
-% before further items are taken
-% from the input stream. This depends on the design of the mapping
-% function.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[updated = 2012-06-29, rEXP]{\clist_map_break:n}
-% \begin{syntax}
-% \cs{clist_map_break:n} \Arg{code}
-% \end{syntax}
-% Used to terminate a \cs[no-index]{clist_map_\ldots{}} function before all
-% entries in the \meta{comma list} have been processed, inserting
-% the \meta{code} after the mapping has ended. This
-% normally takes place within a conditional statement, for example
-% \begin{verbatim}
-% \clist_map_inline:Nn \l_my_clist
-% {
-% \str_if_eq:nnTF { #1 } { bingo }
-% { \clist_map_break:n { <code> } }
-% {
-% % Do something useful
-% }
-% }
-% \end{verbatim}
-% Use outside of a \cs[no-index]{clist_map_\ldots{}} scenario leads to low
-% level \TeX{} errors.
-% \begin{texnote}
-% When the mapping is broken, additional tokens may be inserted
-% before the \meta{code} is
-% inserted into the input stream.
-% This depends on the design of the mapping function.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[EXP, added = 2012-07-13]
-% {\clist_count:N, \clist_count:c, \clist_count:n, \clist_count:e}
-% \begin{syntax}
-% \cs{clist_count:N} \meta{clist~var}
-% \end{syntax}
-% Leaves the number of items in the \meta{clist~var} in the input
-% stream as an \meta{integer denotation}. The total number of items
-% in a \meta{clist~var} includes those which are duplicates,
-% \emph{i.e.}~every item in a \meta{clist~var} is counted.
-% \end{function}
-%
-% \section{Using the content of comma lists directly}
-%
-% \begin{function}[EXP, added = 2013-05-26]{\clist_use:Nnnn, \clist_use:cnnn}
-% \begin{syntax}
-% \cs{clist_use:Nnnn} \meta{clist~var} \Arg{separator~between~two} \Arg{separator~between~more~than~two} \Arg{separator~between~final~two}
-% \end{syntax}
-% Places the contents of the \meta{clist~var} in the input stream,
-% with the appropriate \meta{separator} between the items. Namely, if
-% the comma list has more than two items, the \meta{separator between
-% more than two} is placed between each pair of items except the
-% last, for which the \meta{separator between final two} is used. If
-% the comma list has exactly two items, then they are placed in the input
-% stream separated by the \meta{separator between two}. If the comma
-% list has a single item, it is placed in the input stream, and a comma
-% list with no items produces no output. An error is raised if
-% the variable does not exist or if it is invalid.
-%
-% For example,
-% \begin{verbatim}
-% \clist_set:Nn \l_tmpa_clist { a , b , , c , {de} , f }
-% \clist_use:Nnnn \l_tmpa_clist { ~and~ } { ,~ } { ,~and~ }
-% \end{verbatim}
-% inserts \enquote{\texttt{a, b, c, de, and f}} in the input
-% stream. The first separator argument is not used in this case
-% because the comma list has more than $2$ items.
-% \begin{texnote}
-% The result is returned within the \tn{unexpanded}
-% primitive (\cs{exp_not:n}), which means that the \meta{items}
-% do not expand further when appearing in an \texttt{e}-type
-% or \texttt{x}-type argument expansion.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[EXP, added = 2013-05-26]{\clist_use:Nn, \clist_use:cn}
-% \begin{syntax}
-% \cs{clist_use:Nn} \meta{clist~var} \Arg{separator}
-% \end{syntax}
-% Places the contents of the \meta{clist~var} in the input stream,
-% with the \meta{separator} between the items. If the comma
-% list has a single item, it is placed in the input stream, and a comma
-% list with no items produces no output. An error is raised if
-% the variable does not exist or if it is invalid.
-%
-% For example,
-% \begin{verbatim}
-% \clist_set:Nn \l_tmpa_clist { a , b , , c , {de} , f }
-% \clist_use:Nn \l_tmpa_clist { ~and~ }
-% \end{verbatim}
-% inserts \enquote{\texttt{a and b and c and de and f}} in the input
-% stream.
-% \begin{texnote}
-% The result is returned within the \tn{unexpanded}
-% primitive (\cs{exp_not:n}), which means that the \meta{items}
-% do not expand further when appearing in an \texttt{e}-type
-% or \texttt{x}-type argument expansion.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[EXP, added = 2021-05-10]{\clist_use:nnnn, \clist_use:nn}
-% \begin{syntax}
-% \cs{clist_use:nnnn} \meta{comma~list} \Arg{separator~between~two} \Arg{separator~between~more~than~two} \Arg{separator~between~final~two}
-% \cs{clist_use:nn} \meta{comma~list} \Arg{separator}
-% \end{syntax}
-% Places the contents of the \meta{comma~list} in the input stream,
-% with the appropriate \meta{separator} between the items. As for
-% \cs{clist_set:Nn}, blank items are omitted, spaces are removed from
-% both sides of each item, then a set of braces is removed if the
-% resulting space-trimmed item is braced. The \meta{separators} are
-% then inserted in the same way as for \cs{clist_use:Nnnn} and
-% \cs{clist_use:Nn}, respectively.
-% \begin{texnote}
-% The result is returned within the \tn{unexpanded}
-% primitive (\cs{exp_not:n}), which means that the \meta{items}
-% do not expand further when appearing in an \texttt{e}-type
-% or \texttt{x}-type argument expansion.
-% \end{texnote}
-% \end{function}
-%
-% \section{Comma lists as stacks}
-%
-% Comma lists can be used as stacks, where data is pushed to and popped
-% from the top of the comma list. (The left of a comma list is the top, for
-% performance reasons.) The stack functions for comma lists are not
-% intended to be mixed with the general ordered data functions detailed
-% in the previous section: a comma list should either be used as an
-% ordered data type or as a stack, but not in both ways.
-%
-% \begin{function}[noTF, added = 2012-05-14, updated = 2019-02-16]
-% {\clist_get:NN, \clist_get:cN}
-% \begin{syntax}
-% \cs{clist_get:NN} \meta{clist~var} \meta{token list variable}
-% \end{syntax}
-% Stores the left-most item from a \meta{clist~var} in the
-% \meta{token list variable} without removing it from the
-% \meta{clist~var}. The \meta{token list variable} is assigned locally.
-% In the non-branching version, if the \meta{clist~var} is empty the
-% \meta{token list variable} is set to the marker value \cs{q_no_value}.
-% \end{function}
-%
-% \begin{function}[updated = 2011-09-06]{\clist_pop:NN, \clist_pop:cN}
-% \begin{syntax}
-% \cs{clist_pop:NN} \meta{clist~var} \meta{token list variable}
-% \end{syntax}
-% Pops the left-most item from a \meta{clist~var} into the
-% \meta{token list variable}, \emph{i.e.}~removes the item from the
-% comma list and stores it in the \meta{token list variable}.
-% Both of the variables are assigned locally.
-% \end{function}
-%
-% \begin{function}{\clist_gpop:NN, \clist_gpop:cN}
-% \begin{syntax}
-% \cs{clist_gpop:NN} \meta{clist~var} \meta{token list variable}
-% \end{syntax}
-% Pops the left-most item from a \meta{clist~var} into the
-% \meta{token list variable}, \emph{i.e.}~removes the item from the
-% comma list and stores it in the \meta{token list variable}.
-% The \meta{clist~var} is modified globally, while the assignment of
-% the \meta{token list variable} is local.
-% \end{function}
-%
-% \begin{function}[TF, added = 2012-05-14]{\clist_pop:NN, \clist_pop:cN}
-% \begin{syntax}
-% \cs{clist_pop:NNTF} \meta{clist~var} \meta{token list variable} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% If the \meta{clist~var} is empty, leaves the \meta{false code} in the
-% input stream. The value of the \meta{token list variable} is
-% not defined in this case and should not be relied upon. If the
-% \meta{clist~var} is non-empty, pops the top item from the
-% \meta{clist~var} in the \meta{token list variable}, \emph{i.e.}~removes
-% the item from the \meta{clist~var}. Both the \meta{clist~var} and the
-% \meta{token list variable} are assigned locally.
-% \end{function}
-%
-% \begin{function}[TF, added = 2012-05-14]{\clist_gpop:NN, \clist_gpop:cN}
-% \begin{syntax}
-% \cs{clist_gpop:NNTF} \meta{clist~var} \meta{token list variable} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% If the \meta{clist~var} is empty, leaves the \meta{false code} in the
-% input stream. The value of the \meta{token list variable} is
-% not defined in this case and should not be relied upon. If the
-% \meta{clist~var} is non-empty, pops the top item from the
-% \meta{clist~var} in the \meta{token list variable}, \emph{i.e.}~removes
-% the item from the \meta{clist~var}. The \meta{clist~var} is modified
-% globally, while the \meta{token list variable} is assigned locally.
-% \end{function}
-%
-% \begin{function}
-% {
-% \clist_push:Nn, \clist_push:NV, \clist_push:No,
-% \clist_push:cn, \clist_push:cV, \clist_push:co,
-% \clist_gpush:Nn, \clist_gpush:NV, \clist_gpush:No,
-% \clist_gpush:cn, \clist_gpush:cV, \clist_gpush:co,
-% }
-% \begin{syntax}
-% \cs{clist_push:Nn} \meta{clist~var} \Arg{items}
-% \end{syntax}
-% Adds the \Arg{items} to the top of the \meta{clist~var}.
-% Spaces are removed from both sides of each item as for any
-% \texttt{n}-type comma list.
-% \end{function}
-%
-% \section{Using a single item}
-%
-% \begin{function}[added = 2014-07-17, EXP]
-% {\clist_item:Nn, \clist_item:cn, \clist_item:nn, \clist_item:en}
-% \begin{syntax}
-% \cs{clist_item:Nn} \meta{clist~var} \Arg{int expr}
-% \end{syntax}
-% Indexing items in the \meta{clist~var} from~$1$ at the top (left), this
-% function evaluates the \meta{int expr} and leaves the
-% appropriate item from the comma list in the input stream. If the
-% \meta{int expr} is negative, indexing occurs from the
-% bottom (right) of the comma list. When the \meta{int expr}
-% is larger than the number of items in the \meta{clist~var} (as
-% calculated by \cs{clist_count:N}) then the function expands to
-% nothing.
-% \begin{texnote}
-% The result is returned within the \tn{unexpanded}
-% primitive (\cs{exp_not:n}), which means that the \meta{item}
-% does not expand further when appearing in an \texttt{e}-type
-% or \texttt{x}-type argument expansion.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[EXP, added = 2016-12-06]
-% {\clist_rand_item:N, \clist_rand_item:n, \clist_rand_item:c}
-% \begin{syntax}
-% \cs{clist_rand_item:N} \meta{clist~var}
-% \cs{clist_rand_item:n} \Arg{comma list}
-% \end{syntax}
-% Selects a pseudo-random item of the \meta{clist~var}/\meta{comma list}.
-% If the \meta{comma list} has no item, the result is empty.
-% \begin{texnote}
-% The result is returned within the \tn{unexpanded}
-% primitive (\cs{exp_not:n}), which means that the \meta{item}
-% does not expand further when appearing in an \texttt{e}-type
-% or \texttt{x}-type argument expansion.
-% \end{texnote}
-% \end{function}
-%
-% \section{Viewing comma lists}
-%
-% \begin{function}[updated = 2021-04-29]{\clist_show:N, \clist_show:c}
-% \begin{syntax}
-% \cs{clist_show:N} \meta{clist~var}
-% \end{syntax}
-% Displays the entries in the \meta{clist~var} in the terminal.
-% \end{function}
-%
-% \begin{function}[updated = 2013-08-03]{\clist_show:n}
-% \begin{syntax}
-% \cs{clist_show:n} \Arg{tokens}
-% \end{syntax}
-% Displays the entries in the comma list in the terminal.
-% \end{function}
-%
-% \begin{function}[added = 2014-08-22, updated = 2021-04-29]{\clist_log:N, \clist_log:c}
-% \begin{syntax}
-% \cs{clist_log:N} \meta{clist~var}
-% \end{syntax}
-% Writes the entries in the \meta{clist~var} in the log file. See
-% also \cs{clist_show:N} which displays the result in the terminal.
-% \end{function}
-%
-% \begin{function}[added = 2014-08-22]{\clist_log:n}
-% \begin{syntax}
-% \cs{clist_log:n} \Arg{tokens}
-% \end{syntax}
-% Writes the entries in the comma list in the log file. See also
-% \cs{clist_show:n} which displays the result in the terminal.
-% \end{function}
-%
-% \section{Constant and scratch comma lists}
-%
-% \begin{variable}[added = 2012-07-02]{\c_empty_clist}
-% Constant that is always empty.
-% \end{variable}
-%
-% \begin{variable}[added = 2011-09-06]{\l_tmpa_clist, \l_tmpb_clist}
-% Scratch comma lists for local assignment. These are never used by
-% the kernel code, and so are safe for use with any \LaTeX3-defined
-% function. However, they may be overwritten by other non-kernel
-% code and so should only be used for short-term storage.
-% \end{variable}
-%
-% \begin{variable}[added = 2011-09-06]{\g_tmpa_clist, \g_tmpb_clist}
-% Scratch comma lists for global assignment. These are never used by
-% the kernel code, and so are safe for use with any \LaTeX3-defined
-% function. However, they may be overwritten by other non-kernel
-% code and so should only be used for short-term storage.
-% \end{variable}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3clist} implementation}
-%
-% \TestFiles{m3clist002}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=clist>
-% \end{macrocode}
-%
-% \begin{variable}{\c_empty_clist}
-% An empty comma list is simply an empty token list.
-% \begin{macrocode}
-\cs_new_eq:NN \c_empty_clist \c_empty_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_internal_clist}
-% Scratch space for various internal uses. This comma list variable
-% cannot be declared as such because it comes before \cs{clist_new:N}
-% \begin{macrocode}
-\tl_new:N \l_@@_internal_clist
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\s_@@_mark,\s_@@_stop}
-% Internal scan marks.
-% \begin{macrocode}
-\scan_new:N \s_@@_mark
-\scan_new:N \s_@@_stop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[EXP]{
-% \@@_use_none_delimit_by_s_mark:w,
-% \@@_use_none_delimit_by_s_stop:w,
-% \@@_use_i_delimit_by_s_stop:nw
-% }
-% Functions to gobble up to a scan mark.
-% \begin{macrocode}
-\cs_new:Npn \@@_use_none_delimit_by_s_mark:w #1 \s_@@_mark { }
-\cs_new:Npn \@@_use_none_delimit_by_s_stop:w #1 \s_@@_stop { }
-\cs_new:Npn \@@_use_i_delimit_by_s_stop:nw #1 #2 \s_@@_stop {#1}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_tmp:w}
-% A temporary function for various purposes.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_tmp:w { }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Removing spaces around items}
-%
-% \begin{macro}{\@@_trim_next:w}
-% Called as \cs{exp:w} \cs{@@_trim_next:w} \cs{prg_do_nothing:}
-% \meta{comma list} \ldots{} it expands to \Arg{trimmed item} where
-% the \meta{trimmed item} is the first non-empty result from removing
-% spaces from both ends of comma-delimited items in the \meta{comma
-% list}. The \cs{prg_do_nothing:} marker avoids losing braces. The
-% test for blank items is a somewhat optimized \cs{tl_if_empty:oTF}
-% construction; if blank, another item is sought, otherwise trim
-% spaces.
-% \begin{macrocode}
-\cs_new:Npn \@@_trim_next:w #1 ,
- {
- \tl_if_empty:oTF { \use_none:nn #1 ? }
- { \@@_trim_next:w \prg_do_nothing: }
- { \tl_trim_spaces_apply:oN {#1} \exp_end: }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_sanitize:n}
-% \begin{macro}{\@@_sanitize:Nn}
-% The auxiliary \cs{@@_sanitize:Nn} receives a delimiter
-% (\cs{c_empty_tl} the first time, afterwards a comma) and that item
-% as arguments. Unless we are done with the loop it calls
-% \cs{@@_wrap_item:w} to unbrace the item (using a comma delimiter is
-% safe since |#2| came from removing spaces from an argument delimited
-% by a comma) and possibly re-brace it if needed.
-% \begin{macrocode}
-\cs_new:Npn \@@_sanitize:n #1
- {
- \exp_after:wN \@@_sanitize:Nn \exp_after:wN \c_empty_tl
- \exp:w \@@_trim_next:w \prg_do_nothing:
- #1 , \s_@@_stop \prg_break: , \prg_break_point:
- }
-\cs_new:Npn \@@_sanitize:Nn #1#2
- {
- \@@_use_none_delimit_by_s_stop:w #2 \s_@@_stop
- #1 \@@_wrap_item:w #2 ,
- \exp_after:wN \@@_sanitize:Nn \exp_after:wN ,
- \exp:w \@@_trim_next:w \prg_do_nothing:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[TF]{\@@_if_wrap:n}
-% \begin{macro}{\@@_if_wrap:w}
-% True if the argument must be wrapped to avoid getting altered by some
-% clist operations. That is the case whenever the argument
-% \begin{itemize}
-% \item starts or end with a space or contains a comma,
-% \item is empty, or
-% \item consists of a single braced group.
-% \end{itemize}
-% If the argument starts or ends with a space or contains
-% a comma then one of the three arguments of \cs{@@_if_wrap:w} will
-% have its end delimiter (partly) in one of the three copies of |#1|
-% in \cs{@@_if_wrap:nTF}; this has a knock-on effect meaning that the
-% result of the expansion is not empty; in that case, wrap.
-% Otherwise, the argument is safe unless it starts with a brace group
-% (or is empty) and it is empty or consists of a single
-% \texttt{n}-type argument.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \@@_if_wrap:n #1 { TF }
- {
- \tl_if_empty:oTF
- {
- \@@_if_wrap:w
- \s_@@_mark ? #1 ~ \s_@@_mark ? ~ #1
- \s_@@_mark , ~ \s_@@_mark #1 ,
- }
- {
- \tl_if_head_is_group:nTF { #1 { } }
- {
- \tl_if_empty:nTF {#1}
- { \prg_return_true: }
- {
- \tl_if_empty:oTF { \use_none:n #1}
- { \prg_return_true: }
- { \prg_return_false: }
- }
- }
- { \prg_return_false: }
- }
- { \prg_return_true: }
- }
-\cs_new:Npn \@@_if_wrap:w #1 \s_@@_mark ? ~ #2 ~ \s_@@_mark #3 , { }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_wrap_item:w}
-% Safe items are put in \cs{exp_not:n}, otherwise we put an extra set
-% of braces.
-% \begin{macrocode}
-\cs_new:Npn \@@_wrap_item:w #1 ,
- { \@@_if_wrap:nTF {#1} { \exp_not:n { {#1} } } { \exp_not:n {#1} } }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Allocation and initialisation}
-%
-% \begin{macro}{\clist_new:N, \clist_new:c}
-% \UnitTested
-% Internally, comma lists are just token lists.
-% \begin{macrocode}
-\cs_new_eq:NN \clist_new:N \tl_new:N
-\cs_new_eq:NN \clist_new:c \tl_new:c
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \clist_const:Nn, \clist_const:Ne, \clist_const:Nx,
-% \clist_const:cn, \clist_const:ce, \clist_const:cx
-% }
-% Creating and initializing a constant comma list is done by
-% sanitizing all items (stripping spaces and braces).
-% \begin{macrocode}
-\cs_new_protected:Npn \clist_const:Nn #1#2
- { \tl_const:Ne #1 { \@@_sanitize:n {#2} } }
-\cs_generate_variant:Nn \clist_const:Nn { Ne , c , ce }
-\cs_generate_variant:Nn \clist_const:Nn { Nx , cx }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\clist_clear:N, \clist_clear:c}
-% \UnitTested
-% \begin{macro}{\clist_gclear:N, \clist_gclear:c}
-% \UnitTested
-% Clearing comma lists is just the same as clearing token lists.
-% \begin{macrocode}
-\cs_new_eq:NN \clist_clear:N \tl_clear:N
-\cs_new_eq:NN \clist_clear:c \tl_clear:c
-\cs_new_eq:NN \clist_gclear:N \tl_gclear:N
-\cs_new_eq:NN \clist_gclear:c \tl_gclear:c
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\clist_clear_new:N, \clist_clear_new:c}
-% \UnitTested
-% \begin{macro}{\clist_gclear_new:N, \clist_gclear_new:c}
-% \UnitTested
-% Once again a copy from the token list functions.
-% \begin{macrocode}
-\cs_new_eq:NN \clist_clear_new:N \tl_clear_new:N
-\cs_new_eq:NN \clist_clear_new:c \tl_clear_new:c
-\cs_new_eq:NN \clist_gclear_new:N \tl_gclear_new:N
-\cs_new_eq:NN \clist_gclear_new:c \tl_gclear_new:c
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {\clist_set_eq:NN, \clist_set_eq:cN, \clist_set_eq:Nc, \clist_set_eq:cc}
-% \UnitTested
-% \begin{macro}
-% {
-% \clist_gset_eq:NN, \clist_gset_eq:cN,
-% \clist_gset_eq:Nc, \clist_gset_eq:cc
-% }
-% \UnitTested
-% Once again, these are simple copies from the token list functions.
-% \begin{macrocode}
-\cs_new_eq:NN \clist_set_eq:NN \tl_set_eq:NN
-\cs_new_eq:NN \clist_set_eq:Nc \tl_set_eq:Nc
-\cs_new_eq:NN \clist_set_eq:cN \tl_set_eq:cN
-\cs_new_eq:NN \clist_set_eq:cc \tl_set_eq:cc
-\cs_new_eq:NN \clist_gset_eq:NN \tl_gset_eq:NN
-\cs_new_eq:NN \clist_gset_eq:Nc \tl_gset_eq:Nc
-\cs_new_eq:NN \clist_gset_eq:cN \tl_gset_eq:cN
-\cs_new_eq:NN \clist_gset_eq:cc \tl_gset_eq:cc
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \clist_set_from_seq:NN, \clist_set_from_seq:cN,
-% \clist_set_from_seq:Nc, \clist_set_from_seq:cc
-% }
-% \UnitTested
-% \begin{macro}
-% {
-% \clist_gset_from_seq:NN, \clist_gset_from_seq:cN,
-% \clist_gset_from_seq:Nc, \clist_gset_from_seq:cc
-% }
-% \UnitTested
-% \begin{macro}{\@@_set_from_seq:NNNN, \@@_set_from_seq:n}
-% Setting a comma list from a comma-separated list is done using a
-% simple mapping. Safe items are put in \cs{exp_not:n}, otherwise we
-% put an extra set of braces. The first comma must be removed, except
-% in the case of an empty comma-list.
-% \begin{macrocode}
-\cs_new_protected:Npn \clist_set_from_seq:NN
- { \@@_set_from_seq:NNNN \clist_clear:N \__kernel_tl_set:Nx }
-\cs_new_protected:Npn \clist_gset_from_seq:NN
- { \@@_set_from_seq:NNNN \clist_gclear:N \__kernel_tl_gset:Nx }
-\cs_new_protected:Npn \@@_set_from_seq:NNNN #1#2#3#4
- {
- \seq_if_empty:NTF #4
- { #1 #3 }
- {
- #2 #3
- {
- \exp_after:wN \use_none:n \exp:w \exp_end_continue_f:w
- \seq_map_function:NN #4 \@@_set_from_seq:n
- }
- }
- }
-\cs_new:Npn \@@_set_from_seq:n #1
- {
- ,
- \@@_if_wrap:nTF {#1}
- { \exp_not:n { {#1} } }
- { \exp_not:n {#1} }
- }
-\cs_generate_variant:Nn \clist_set_from_seq:NN { Nc }
-\cs_generate_variant:Nn \clist_set_from_seq:NN { c , cc }
-\cs_generate_variant:Nn \clist_gset_from_seq:NN { Nc }
-\cs_generate_variant:Nn \clist_gset_from_seq:NN { c , cc }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\clist_concat:NNN, \clist_concat:ccc}
-% \UnitTested
-% \begin{macro}{\clist_gconcat:NNN, \clist_gconcat:ccc}
-% \UnitTested
-% \begin{macro}{\@@_concat:NNNN}
-% Concatenating comma lists is not quite as easy as it seems, as
-% there needs to be the correct addition of a comma to the output. So
-% a little work to do.
-% \begin{macrocode}
-\cs_new_protected:Npn \clist_concat:NNN
- { \@@_concat:NNNN \__kernel_tl_set:Nx }
-\cs_new_protected:Npn \clist_gconcat:NNN
- { \@@_concat:NNNN \__kernel_tl_gset:Nx }
-\cs_new_protected:Npn \@@_concat:NNNN #1#2#3#4
- {
- #1 #2
- {
- \exp_not:o #3
- \clist_if_empty:NF #3 { \clist_if_empty:NF #4 { , } }
- \exp_not:o #4
- }
- }
-\cs_generate_variant:Nn \clist_concat:NNN { ccc }
-\cs_generate_variant:Nn \clist_gconcat:NNN { ccc }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\clist_if_exist:N, \clist_if_exist:c}
-% Copies of the \texttt{cs} functions defined in \pkg{l3basics}.
-% \begin{macrocode}
-\prg_new_eq_conditional:NNn \clist_if_exist:N \cs_if_exist:N
- { TF , T , F , p }
-\prg_new_eq_conditional:NNn \clist_if_exist:c \cs_if_exist:c
- { TF , T , F , p }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Adding data to comma lists}
-%
-% \begin{macro}
-% {
-% \clist_set:Nn, \clist_set:NV, \clist_set:Ne,
-% \clist_set:No, \clist_set:Nx,
-% \clist_set:cn, \clist_set:cV, \clist_set:ce,
-% \clist_set:co, \clist_set:cx
-% }
-% \begin{macro}
-% {
-% \clist_gset:Nn, \clist_gset:NV, \clist_gset:Ne,
-% \clist_gset:No, \clist_gset:Nx,
-% \clist_gset:cn, \clist_gset:cV, \clist_gset:ce,
-% \clist_gset:co, \clist_gset:cx,
-% }
-% \begin{macrocode}
-\cs_new_protected:Npn \clist_set:Nn #1#2
- { \__kernel_tl_set:Nx #1 { \@@_sanitize:n {#2} } }
-\cs_new_protected:Npn \clist_gset:Nn #1#2
- { \__kernel_tl_gset:Nx #1 { \@@_sanitize:n {#2} } }
-\cs_generate_variant:Nn \clist_set:Nn { NV , Ne , c , cV , ce }
-\cs_generate_variant:Nn \clist_set:Nn { No , Nx , co , cx }
-\cs_generate_variant:Nn \clist_gset:Nn { NV , Ne , c , cV , ce }
-\cs_generate_variant:Nn \clist_gset:Nn { No , Nx , co , cx }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \clist_put_left:Nn, \clist_put_left:NV,
-% \clist_put_left:Nv, \clist_put_left:Ne,
-% \clist_put_left:No, \clist_put_left:Nx,
-% \clist_put_left:cn, \clist_put_left:cV,
-% \clist_put_left:cv, \clist_put_left:ce,
-% \clist_put_left:co, \clist_put_left:cx,
-% }
-% \UnitTested
-% \begin{macro}
-% {
-% \clist_gput_left:Nn, \clist_gput_left:NV,
-% \clist_gput_left:Nv, \clist_gput_left:Ne,
-% \clist_gput_left:No, \clist_gput_left:Nx,
-% \clist_gput_left:cn, \clist_gput_left:cV,
-% \clist_gput_left:cv, \clist_gput_left:ce,
-% \clist_gput_left:co, \clist_gput_left:cx,
-% }
-% \UnitTested
-% \begin{macro}{\@@_put_left:NNNn}
-% Everything is based on concatenation after storing in
-% \cs{l_@@_internal_clist}. This avoids having to worry here about
-% space-trimming and so on.
-% \begin{macrocode}
-\cs_new_protected:Npn \clist_put_left:Nn
- { \@@_put_left:NNNn \clist_concat:NNN \clist_set:Nn }
-\cs_new_protected:Npn \clist_gput_left:Nn
- { \@@_put_left:NNNn \clist_gconcat:NNN \clist_set:Nn }
-\cs_new_protected:Npn \@@_put_left:NNNn #1#2#3#4
- {
- #2 \l_@@_internal_clist {#4}
- #1 #3 \l_@@_internal_clist #3
- }
-\cs_generate_variant:Nn \clist_put_left:Nn { NV , Nv , Ne , c , cV , cv , ce }
-\cs_generate_variant:Nn \clist_put_left:Nn { No , Nx , co , cx }
-\cs_generate_variant:Nn \clist_gput_left:Nn { NV , Nv , Ne , c , cV , cv , ce }
-\cs_generate_variant:Nn \clist_gput_left:Nn { No , Nx , co , cx }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \clist_put_right:Nn, \clist_put_right:NV,
-% \clist_put_right:Nv, \clist_put_right:Ne,
-% \clist_put_right:No, \clist_put_right:Nx,
-% \clist_put_right:cn, \clist_put_right:cV,
-% \clist_put_right:cv, \clist_put_right:ce,
-% \clist_put_right:co, \clist_put_right:cx
-% }
-% \UnitTested
-% \begin{macro}
-% {
-% \clist_gput_right:Nn, \clist_gput_right:NV,
-% \clist_gput_right:Nv, \clist_gput_right:Ne,
-% \clist_gput_right:No, \clist_gput_right:Nx,
-% \clist_gput_right:cn, \clist_gput_right:cV,
-% \clist_gput_right:cv, \clist_gput_right:ce,
-% \clist_gput_right:cx, \clist_gput_right:co
-% }
-% \UnitTested
-% \begin{macro}{\@@_put_right:NNNn}
-% \begin{macrocode}
-\cs_new_protected:Npn \clist_put_right:Nn
- { \@@_put_right:NNNn \clist_concat:NNN \clist_set:Nn }
-\cs_new_protected:Npn \clist_gput_right:Nn
- { \@@_put_right:NNNn \clist_gconcat:NNN \clist_set:Nn }
-\cs_new_protected:Npn \@@_put_right:NNNn #1#2#3#4
- {
- #2 \l_@@_internal_clist {#4}
- #1 #3 #3 \l_@@_internal_clist
- }
-\cs_generate_variant:Nn \clist_put_right:Nn
- { NV , Nv , Ne , c , cV , cv , ce }
-\cs_generate_variant:Nn \clist_put_right:Nn
- { No , Nx , co , cx }
-\cs_generate_variant:Nn \clist_gput_right:Nn
- { NV , Nv , Ne , c , cV , cv , ce }
-\cs_generate_variant:Nn \clist_gput_right:Nn
- { No , Nx , co , cx }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Comma lists as stacks}
-%
-% \begin{macro}{\clist_get:NN, \clist_get:cN}
-% \UnitTested
-% \begin{macro}{\@@_get:wN}
-% Getting an item from the left of a comma list is pretty easy: just
-% trim off the first item using the comma. No need to trim spaces as
-% comma-list \emph{variables} are assumed to have \enquote{cleaned-up}
-% items. (Note that grabbing a comma-delimited item removes an outer
-% pair of braces if present, exactly as needed to uncover the
-% underlying item.)
-% \begin{macrocode}
-\cs_new_protected:Npn \clist_get:NN #1#2
- {
- \if_meaning:w #1 \c_empty_clist
- \tl_set:Nn #2 { \q_no_value }
- \else:
- \exp_after:wN \@@_get:wN #1 , \s_@@_stop #2
- \fi:
- }
-\cs_new_protected:Npn \@@_get:wN #1 , #2 \s_@@_stop #3
- { \tl_set:Nn #3 {#1} }
-\cs_generate_variant:Nn \clist_get:NN { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\clist_pop:NN, \clist_pop:cN}
-% \UnitTested
-% \begin{macro}{\clist_gpop:NN, \clist_gpop:cN}
-% \UnitTested
-% \begin{macro}
-% {\@@_pop:NNN, \@@_pop:wwNNN, \@@_pop:wN}
-% An empty clist leads to \cs{q_no_value}, otherwise grab until the
-% first comma and assign to the variable. The second argument of
-% \cs{@@_pop:wwNNN} is a comma list ending in a comma and
-% \cs{s_@@_mark}, unless the original clist contained exactly one item:
-% then the argument is just \cs{s_@@_mark}. The next auxiliary picks
-% either \cs{exp_not:n} or \cs{use_none:n} as |#2|, ensuring that the
-% result can safely be an empty comma list.
-% \begin{macrocode}
-\cs_new_protected:Npn \clist_pop:NN
- { \@@_pop:NNN \__kernel_tl_set:Nx }
-\cs_new_protected:Npn \clist_gpop:NN
- { \@@_pop:NNN \__kernel_tl_gset:Nx }
-\cs_new_protected:Npn \@@_pop:NNN #1#2#3
- {
- \if_meaning:w #2 \c_empty_clist
- \tl_set:Nn #3 { \q_no_value }
- \else:
- \exp_after:wN \@@_pop:wwNNN #2 , \s_@@_mark \s_@@_stop #1#2#3
- \fi:
- }
-\cs_new_protected:Npn \@@_pop:wwNNN #1 , #2 \s_@@_stop #3#4#5
- {
- \tl_set:Nn #5 {#1}
- #3 #4
- {
- \@@_pop:wN \prg_do_nothing:
- #2 \exp_not:o
- , \s_@@_mark \use_none:n
- \s_@@_stop
- }
- }
-\cs_new:Npn \@@_pop:wN #1 , \s_@@_mark #2 #3 \s_@@_stop { #2 {#1} }
-\cs_generate_variant:Nn \clist_pop:NN { c }
-\cs_generate_variant:Nn \clist_gpop:NN { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[TF]{\clist_get:NN, \clist_get:cN}
-% \begin{macro}[TF]{\clist_pop:NN, \clist_pop:cN}
-% \begin{macro}[TF]{\clist_gpop:NN, \clist_gpop:cN}
-% \begin{macro}{\@@_pop_TF:NNN}
-% The same, as branching code: very similar to the above.
-% \begin{macrocode}
-\prg_new_protected_conditional:Npnn \clist_get:NN #1#2 { T , F , TF }
- {
- \if_meaning:w #1 \c_empty_clist
- \prg_return_false:
- \else:
- \exp_after:wN \@@_get:wN #1 , \s_@@_stop #2
- \prg_return_true:
- \fi:
- }
-\prg_generate_conditional_variant:Nnn \clist_get:NN { c } { T , F , TF }
-\prg_new_protected_conditional:Npnn \clist_pop:NN #1#2 { T , F , TF }
- { \@@_pop_TF:NNN \__kernel_tl_set:Nx #1 #2 }
-\prg_new_protected_conditional:Npnn \clist_gpop:NN #1#2 { T , F , TF }
- { \@@_pop_TF:NNN \__kernel_tl_gset:Nx #1 #2 }
-\cs_new_protected:Npn \@@_pop_TF:NNN #1#2#3
- {
- \if_meaning:w #2 \c_empty_clist
- \prg_return_false:
- \else:
- \exp_after:wN \@@_pop:wwNNN #2 , \s_@@_mark \s_@@_stop #1#2#3
- \prg_return_true:
- \fi:
- }
-\prg_generate_conditional_variant:Nnn \clist_pop:NN { c } { T , F , TF }
-\prg_generate_conditional_variant:Nnn \clist_gpop:NN { c } { T , F , TF }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{
-% \clist_push:Nn, \clist_push:NV, \clist_push:No, \clist_push:Nx,
-% \clist_push:cn, \clist_push:cV, \clist_push:co, \clist_push:cx,
-% }
-% \UnitTested
-% \begin{macro}{
-% \clist_gpush:Nn, \clist_gpush:NV, \clist_gpush:No, \clist_gpush:Nx,
-% \clist_gpush:cn, \clist_gpush:cV, \clist_gpush:co, \clist_gpush:cx,
-% }
-% \UnitTested
-% Pushing to a comma list is the same as adding on the left.
-% \begin{macrocode}
-\cs_new_eq:NN \clist_push:Nn \clist_put_left:Nn
-\cs_generate_variant:Nn \clist_push:Nn { NV , No , Nx , c , cV , co , cx }
-\cs_new_eq:NN \clist_gpush:Nn \clist_gput_left:Nn
-\cs_generate_variant:Nn \clist_gpush:Nn { NV , No , Nx , c , cV , co , cx }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Modifying comma lists}
-%
-% \begin{variable}{\l_@@_internal_remove_clist, \l_@@_internal_remove_seq}
-% An internal comma list and a sequence for the removal routines.
-% \begin{macrocode}
-\clist_new:N \l_@@_internal_remove_clist
-\seq_new:N \l_@@_internal_remove_seq
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\clist_remove_duplicates:N, \clist_remove_duplicates:c}
-% \UnitTested
-% \begin{macro}{\clist_gremove_duplicates:N, \clist_gremove_duplicates:c}
-% \UnitTested
-% \begin{macro}{\@@_remove_duplicates:NN}
-% Removing duplicates means making a new list then copying it.
-% \begin{macrocode}
-\cs_new_protected:Npn \clist_remove_duplicates:N
- { \@@_remove_duplicates:NN \clist_set_eq:NN }
-\cs_new_protected:Npn \clist_gremove_duplicates:N
- { \@@_remove_duplicates:NN \clist_gset_eq:NN }
-\cs_new_protected:Npn \@@_remove_duplicates:NN #1#2
- {
- \clist_clear:N \l_@@_internal_remove_clist
- \clist_map_inline:Nn #2
- {
- \clist_if_in:NnF \l_@@_internal_remove_clist {##1}
- {
- \tl_put_right:Ne \l_@@_internal_remove_clist
- {
- \clist_if_empty:NF \l_@@_internal_remove_clist { , }
- \@@_if_wrap:nTF {##1} { \exp_not:n { {##1} } } { \exp_not:n {##1} }
- }
- }
- }
- #1 #2 \l_@@_internal_remove_clist
- }
-\cs_generate_variant:Nn \clist_remove_duplicates:N { c }
-\cs_generate_variant:Nn \clist_gremove_duplicates:N { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \clist_remove_all:Nn, \clist_remove_all:cn,
-% \clist_remove_all:NV, \clist_remove_all:cV
-% }
-% \UnitTested
-% \begin{macro}
-% {
-% \clist_gremove_all:Nn, \clist_gremove_all:cn,
-% \clist_gremove_all:NV, \clist_gremove_all:cV
-% }
-% \UnitTested
-% \begin{macro}{\@@_remove_all:NNNn}
-% \begin{macro}{\@@_remove_all:w}
-% \begin{macro}{\@@_remove_all:}
-% The method used here for safe items is very similar to
-% \cs{tl_replace_all:Nnn}. However, if the item contains commas or
-% leading/trailing spaces, or is empty, or consists of a single brace
-% group, we know that it can only appear within braces so the code
-% would fail; instead just convert to a sequence and do the removal
-% with \pkg{l3seq} code (it involves somewhat elaborate code to do
-% most of the work expandably but the final token list comparisons
-% non-expandably).
-%
-% For \enquote{safe} items, build a function delimited by the
-% \meta{item} that should be removed,
-% surrounded with commas, and call that function followed by
-% the expanded comma list, and another copy of the \meta{item}.
-% The loop is controlled by the argument grabbed by
-% \cs{@@_remove_all:w}: when the item was found,
-% the \cs{s_@@_mark} delimiter used is the one inserted by
-% \cs{@@_tmp:w}, and \cs{@@_use_none_delimit_by_s_stop:w}
-% is deleted. At the end, the final \meta{item} is
-% grabbed, and the argument of \cs{@@_tmp:w} contains
-% \cs{s_@@_mark}: in that case, \cs{@@_remove_all:w}
-% removes the second \cs{s_@@_mark} (inserted by \cs{@@_tmp:w}),
-% and lets \cs{@@_use_none_delimit_by_s_stop:w} act.
-%
-% No brace is lost because items are always grabbed with a leading comma.
-% The result of the first assignment has an extra leading comma,
-% which we remove in a second assignment.
-% Two exceptions: if the clist lost all of its elements, the result
-% is empty, and we shouldn't remove anything; if the clist started up
-% empty, the first step happens to turn it into a single comma, and
-% the second step removes it.
-% \begin{macrocode}
-\cs_new_protected:Npn \clist_remove_all:Nn
- { \@@_remove_all:NNNn \clist_set_from_seq:NN \__kernel_tl_set:Nx }
-\cs_new_protected:Npn \clist_gremove_all:Nn
- { \@@_remove_all:NNNn \clist_gset_from_seq:NN \__kernel_tl_gset:Nx }
-\cs_new_protected:Npn \@@_remove_all:NNNn #1#2#3#4
- {
- \@@_if_wrap:nTF {#4}
- {
- \seq_set_from_clist:NN \l_@@_internal_remove_seq #3
- \seq_remove_all:Nn \l_@@_internal_remove_seq {#4}
- #1 #3 \l_@@_internal_remove_seq
- }
- {
- \cs_set:Npn \@@_tmp:w ##1 , #4 ,
- {
- ##1
- , \s_@@_mark , \@@_use_none_delimit_by_s_stop:w ,
- \@@_remove_all:
- }
- #2 #3
- {
- \exp_after:wN \@@_remove_all:
- #3 , \s_@@_mark , #4 , \s_@@_stop
- }
- \clist_if_empty:NF #3
- {
- #2 #3
- {
- \exp_args:No \exp_not:o
- { \exp_after:wN \use_none:n #3 }
- }
- }
- }
- }
-\cs_new:Npn \@@_remove_all:
- { \exp_after:wN \@@_remove_all:w \@@_tmp:w , }
-\cs_new:Npn \@@_remove_all:w #1 , \s_@@_mark , #2 , { \exp_not:n {#1} }
-\cs_generate_variant:Nn \clist_remove_all:Nn { c , NV , cV }
-\cs_generate_variant:Nn \clist_gremove_all:Nn { c , NV , cV }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \clist_reverse:N, \clist_reverse:c,
-% \clist_greverse:N, \clist_greverse:c
-% }
-% Use \cs{clist_reverse:n} in an \texttt{e}-expanding assignment. The
-% extra work that \cs{clist_reverse:n} does to preserve braces and
-% spaces would not be needed for the well-controlled case of
-% \texttt{N}-type comma lists, but the slow-down is not too bad.
-% \begin{macrocode}
-\cs_new_protected:Npn \clist_reverse:N #1
- { \__kernel_tl_set:Nx #1 { \exp_args:No \clist_reverse:n {#1} } }
-\cs_new_protected:Npn \clist_greverse:N #1
- { \__kernel_tl_gset:Nx #1 { \exp_args:No \clist_reverse:n {#1} } }
-\cs_generate_variant:Nn \clist_reverse:N { c }
-\cs_generate_variant:Nn \clist_greverse:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\clist_reverse:n}
-% \begin{macro}[EXP]{\@@_reverse:wwNww, \@@_reverse_end:ww}
-% The reversed token list is built one item at a time, and stored
-% between \cs{s_@@_stop} and \cs{s_@@_mark}, in the form of |?| followed by
-% zero or more instances of \enquote{\meta{item}\texttt{,}}. We start from a comma
-% list \enquote{\meta{item_1}\texttt{,\ldots,}\meta{item_n}}. During the loop,
-% the auxiliary \cs{@@_reverse:wwNww} receives \enquote{\texttt{?}\meta{item_i}} as
-% |#1|, \enquote{\meta{item_{i+1}}\texttt{,\ldots,}\meta{item_n}} as |#2|,
-% \cs{@@_reverse:wwNww} as |#3|, what remains until \cs{s_@@_stop} as
-% |#4|, and \enquote{\meta{item_{i-1}}\texttt{,\ldots,}\meta{item_1}\texttt{,}} as |#5|.
-% The auxiliary moves |#1| just before |#5|, with a comma, and calls
-% itself (|#3|). After the last item is moved, \cs{@@_reverse:wwNww}
-% receives \enquote{\cs{s_@@_mark} \cs{@@_reverse:wwNww} \texttt{!}} as its argument
-% |#1|, thus \cs{@@_reverse_end:ww} as its argument |#3|. This second
-% auxiliary cleans up until the marker~|!|, removes the trailing comma
-% (introduced when the first item was moved after \cs{s_@@_stop}), and
-% leaves its argument~|#1| within \cs{exp_not:n}. There is also a
-% need to remove a leading comma, hence \cs{exp_not:o} and
-% \cs{use_none:n}.
-% \begin{macrocode}
-\cs_new:Npn \clist_reverse:n #1
- {
- \@@_reverse:wwNww ? #1 ,
- \s_@@_mark \@@_reverse:wwNww ! ,
- \s_@@_mark \@@_reverse_end:ww
- \s_@@_stop ? \s_@@_mark
- }
-\cs_new:Npn \@@_reverse:wwNww
- #1 , #2 \s_@@_mark #3 #4 \s_@@_stop ? #5 \s_@@_mark
- { #3 ? #2 \s_@@_mark #3 #4 \s_@@_stop #1 , #5 \s_@@_mark }
-\cs_new:Npn \@@_reverse_end:ww #1 ! #2 , \s_@@_mark
- { \exp_not:o { \use_none:n #2 } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {\clist_sort:Nn, \clist_sort:cn, \clist_gsort:Nn, \clist_gsort:cn}
-% Implemented in \pkg{l3sort}.
-% \end{macro}
-%
-% \subsection{Comma list conditionals}
-%
-% \begin{macro}[pTF]{\clist_if_empty:N, \clist_if_empty:c}
-% \UnitTested
-% Simple copies from the token list variable material.
-% \begin{macrocode}
-\prg_new_eq_conditional:NNn \clist_if_empty:N \tl_if_empty:N
- { p , T , F , TF }
-\prg_new_eq_conditional:NNn \clist_if_empty:c \tl_if_empty:c
- { p , T , F , TF }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP, pTF]{\clist_if_empty:n}
-% \begin{macro}[EXP]{\@@_if_empty_n:w}
-% \begin{macro}[EXP]{\@@_if_empty_n:wNw}
-% As usual, we insert a token (here |?|) before grabbing
-% any argument: this avoids losing braces. The argument
-% of \cs{tl_if_empty:oTF} is empty if |#1| is |?| followed
-% by blank spaces (besides, this particular variant of
-% the emptiness test is optimized). If the item of the
-% comma list is blank, grab the next one. As soon as one
-% item is non-blank, exit: the second auxiliary grabs
-% \cs{prg_return_false:} as |#2|, unless every item in
-% the comma list was blank and the loop actually got broken
-% by the trailing \cs{s_@@_mark} \cs{prg_return_false:} item.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \clist_if_empty:n #1 { p , T , F , TF }
- {
- \@@_if_empty_n:w ? #1
- , \s_@@_mark \prg_return_false:
- , \s_@@_mark \prg_return_true:
- \s_@@_stop
- }
-\cs_new:Npn \@@_if_empty_n:w #1 ,
- {
- \tl_if_empty:oTF { \use_none:nn #1 ? }
- { \@@_if_empty_n:w ? }
- { \@@_if_empty_n:wNw }
- }
-\cs_new:Npn \@@_if_empty_n:wNw #1 \s_@@_mark #2#3 \s_@@_stop {#2}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[TF]
-% {
-% \clist_if_in:Nn, \clist_if_in:NV, \clist_if_in:No,
-% \clist_if_in:cn, \clist_if_in:cV, \clist_if_in:co,
-% \clist_if_in:nn, \clist_if_in:nV, \clist_if_in:no
-% }
-% \begin{macro}{\@@_if_in_return:nnN}
-% \UnitTested
-% For \enquote{safe} items, we simply surround the comma list, and the
-% item, with commas, then use the same code as for \cs{tl_if_in:Nn}.
-% For \enquote{unsafe} items we follow the same route as
-% \cs{seq_if_in:Nn}, mapping through the list a comparison function.
-% If found, return \texttt{true} and remove \cs{prg_return_false:}.
-% \begin{macrocode}
-\prg_new_protected_conditional:Npnn \clist_if_in:Nn #1#2 { T , F , TF }
- {
- \exp_args:No \@@_if_in_return:nnN #1 {#2} #1
- }
-\prg_new_protected_conditional:Npnn \clist_if_in:nn #1#2 { T , F , TF }
- {
- \clist_set:Nn \l_@@_internal_clist {#1}
- \exp_args:No \@@_if_in_return:nnN \l_@@_internal_clist {#2}
- \l_@@_internal_clist
- }
-\cs_new_protected:Npn \@@_if_in_return:nnN #1#2#3
- {
- \@@_if_wrap:nTF {#2}
- {
- \cs_set:Npe \@@_tmp:w ##1
- {
- \exp_not:N \tl_if_eq:nnT {##1}
- \exp_not:n
- {
- {#2}
- { \clist_map_break:n { \prg_return_true: \use_none:n } }
- }
- }
- \clist_map_function:NN #3 \@@_tmp:w
- \prg_return_false:
- }
- {
- \cs_set:Npn \@@_tmp:w ##1 ,#2, { }
- \tl_if_empty:oTF
- { \@@_tmp:w ,#1, {} {} ,#2, }
- { \prg_return_false: } { \prg_return_true: }
- }
- }
-\prg_generate_conditional_variant:Nnn \clist_if_in:Nn
- { NV , No , c , cV , co } { T , F , TF }
-\prg_generate_conditional_variant:Nnn \clist_if_in:nn
- { nV , no } { T , F , TF }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Mapping over comma lists}
-%
-% \begin{macro}{\clist_map_function:NN, \clist_map_function:cN}
-% \UnitTested
-% \begin{macro}{\@@_map_function:Nw, \@@_map_function_end:w}
-% If the variable is empty, the mapping is skipped (otherwise,
-% that comma-list would be seen as consisting of one empty item).
-% Then loop over the comma-list, grabbing eight comma-delimited items
-% at a time. The end is marked by \cs{s_@@_stop}, which may not appear
-% in any of the items. Once the last group of eight items has been
-% reached, we go through them more slowly using
-% \cs{@@_map_function_end:w}. The auxiliary function
-% \cs{@@_map_function:Nw} is also used in some other clist mappings.
-% \begin{macrocode}
-\cs_new:Npn \clist_map_function:NN #1#2
- {
- \clist_if_empty:NF #1
- {
- \exp_after:wN \@@_map_function:Nw \exp_after:wN #2 #1 ,
- \s_@@_stop , \s_@@_stop , \s_@@_stop , \s_@@_stop ,
- \s_@@_stop , \s_@@_stop , \s_@@_stop , \s_@@_stop ,
- \prg_break_point:Nn \clist_map_break: { }
- }
- }
-\cs_new:Npn \@@_map_function:Nw #1 #2, #3, #4, #5, #6, #7, #8, #9,
- {
- \@@_use_none_delimit_by_s_stop:w
- #9 \@@_map_function_end:w \s_@@_stop
- #1 {#2} #1 {#3} #1 {#4} #1 {#5} #1 {#6} #1 {#7} #1 {#8} #1 {#9}
- \@@_map_function:Nw #1
- }
-\cs_new:Npn \@@_map_function_end:w \s_@@_stop #1#2
- {
- \@@_use_none_delimit_by_s_stop:w #2 \clist_map_break: \s_@@_stop
- #1 {#2}
- \@@_map_function_end:w \s_@@_stop
- }
-\cs_generate_variant:Nn \clist_map_function:NN { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\clist_map_function:nN, \clist_map_function:eN}
-% \UnitTested
-% \begin{macro}{\@@_map_function_n:Nn}
-% \begin{macro}{\@@_map_unbrace:wn}
-% The \texttt{n}-type mapping function is a bit more awkward,
-% since spaces must be trimmed from each item.
-% Space trimming is again based on \cs{@@_trim_next:w}.
-% The auxiliary \cs{@@_map_function_n:Nn} receives as arguments the
-% function, and the next non-empty item (after space trimming but
-% before brace removal). One level of braces is removed by
-% \cs{@@_map_unbrace:wn}.
-% \begin{macrocode}
-\cs_new:Npn \clist_map_function:nN #1#2
- {
- \exp_after:wN \@@_map_function_n:Nn \exp_after:wN #2
- \exp:w \@@_trim_next:w \prg_do_nothing: #1 ,
- \s_@@_stop \clist_map_break: ,
- \prg_break_point:Nn \clist_map_break: { }
- }
-\cs_generate_variant:Nn \clist_map_function:nN { e }
-\cs_new:Npn \@@_map_function_n:Nn #1 #2
- {
- \@@_use_none_delimit_by_s_stop:w #2 \s_@@_stop
- \@@_map_unbrace:wn #2 , #1
- \exp_after:wN \@@_map_function_n:Nn \exp_after:wN #1
- \exp:w \@@_trim_next:w \prg_do_nothing:
- }
-\cs_new:Npn \@@_map_unbrace:wn #1, #2 { #2 {#1} }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\clist_map_inline:Nn, \clist_map_inline:cn}
-% \UnitTested
-% \begin{macro}{\clist_map_inline:nn}
-% \UnitTested
-% Inline mapping is done by creating a suitable function
-% \enquote{on the fly}: this is done globally to avoid
-% any issues with \TeX{}'s groups. We use a different
-% function for each level of nesting.
-%
-% Since the mapping is non-expandable, we can perform
-% the space-trimming needed by the \texttt{n} version
-% simply by storing the comma-list in a variable. We
-% don't need a different comma-list for each nesting
-% level: the comma-list is expanded before the mapping
-% starts.
-% \begin{macrocode}
-\cs_new_protected:Npn \clist_map_inline:Nn #1#2
- {
- \clist_if_empty:NF #1
- {
- \int_gincr:N \g__kernel_prg_map_int
- \cs_gset_protected:cpn
- { @@_map_ \int_use:N \g__kernel_prg_map_int :w } ##1 {#2}
- \exp_last_unbraced:Nco \@@_map_function:Nw
- { @@_map_ \int_use:N \g__kernel_prg_map_int :w }
- #1 ,
- \s_@@_stop , \s_@@_stop , \s_@@_stop , \s_@@_stop ,
- \s_@@_stop , \s_@@_stop , \s_@@_stop , \s_@@_stop ,
- \prg_break_point:Nn \clist_map_break:
- { \int_gdecr:N \g__kernel_prg_map_int }
- }
- }
-\cs_new_protected:Npn \clist_map_inline:nn #1
- {
- \clist_set:Nn \l_@@_internal_clist {#1}
- \clist_map_inline:Nn \l_@@_internal_clist
- }
-\cs_generate_variant:Nn \clist_map_inline:Nn { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\clist_map_variable:NNn, \clist_map_variable:cNn}
-% \UnitTested
-% \begin{macro}{\clist_map_variable:nNn}
-% \begin{macro}{\@@_map_variable:Nnn}
-% The |N|-type version is a straightforward application of
-% \cs{clist_map_tokens:Nn}, calling \cs{@@_map_variable:Nnn} for each
-% item to assign the variable and run the user's code. The |n|-type
-% version is \emph{not} implemented in terms of the |n|-type function
-% \cs{clist_map_tokens:Nn}, because here we are allowed to clean up
-% the |n|-type comma list non-expandably.
-% \begin{macrocode}
-\cs_new_protected:Npn \clist_map_variable:NNn #1#2#3
- { \clist_map_tokens:Nn #1 { \@@_map_variable:Nnn #2 {#3} } }
-\cs_generate_variant:Nn \clist_map_variable:NNn { c }
-\cs_new_protected:Npn \@@_map_variable:Nnn #1#2#3
- { \tl_set:Nn #1 {#3} #2 }
-\cs_new_protected:Npn \clist_map_variable:nNn #1
- {
- \clist_set:Nn \l_@@_internal_clist {#1}
- \clist_map_variable:NNn \l_@@_internal_clist
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\clist_map_tokens:Nn, \clist_map_tokens:cn}
-% \begin{macro}{\@@_map_tokens:nw, \@@_map_tokens_end:w}
-% Essentially a copy of \cs{clist_map_function:NN} with braces added.
-% \begin{macrocode}
-\cs_new:Npn \clist_map_tokens:Nn #1#2
- {
- \clist_if_empty:NF #1
- {
- \exp_last_unbraced:Nno \@@_map_tokens:nw {#2} #1 ,
- \s_@@_stop , \s_@@_stop , \s_@@_stop , \s_@@_stop ,
- \s_@@_stop , \s_@@_stop , \s_@@_stop , \s_@@_stop ,
- \prg_break_point:Nn \clist_map_break: { }
- }
- }
-\cs_new:Npn \@@_map_tokens:nw #1 #2, #3, #4, #5, #6, #7, #8, #9,
- {
- \@@_use_none_delimit_by_s_stop:w
- #9 \@@_map_tokens_end:w \s_@@_stop
- \use:n {#1} {#2} \use:n {#1} {#3} \use:n {#1} {#4} \use:n {#1} {#5}
- \use:n {#1} {#6} \use:n {#1} {#7} \use:n {#1} {#8} \use:n {#1} {#9}
- \@@_map_tokens:nw {#1}
- }
-\cs_new:Npn \@@_map_tokens_end:w \s_@@_stop \use:n #1#2
- {
- \@@_use_none_delimit_by_s_stop:w #2 \clist_map_break: \s_@@_stop
- #1 {#2}
- \@@_map_tokens_end:w \s_@@_stop
- }
-\cs_generate_variant:Nn \clist_map_tokens:Nn { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\clist_map_tokens:nn, \@@_map_tokens_n:nw}
-% Similar to \cs{clist_map_function:nN} but with a different way of
-% grabbing items because we cannot use \cs{exp_after:wN} to pass the
-% \meta{code}.
-% \begin{macrocode}
-\cs_new:Npn \clist_map_tokens:nn #1#2
- {
- \@@_map_tokens_n:nw {#2}
- \prg_do_nothing: #1 , \s_@@_stop \clist_map_break: ,
- \prg_break_point:Nn \clist_map_break: { }
- }
-\cs_new:Npn \@@_map_tokens_n:nw #1#2 ,
- {
- \tl_if_empty:oF { \use_none:nn #2 ? }
- {
- \@@_use_none_delimit_by_s_stop:w #2 \s_@@_stop
- \tl_trim_spaces_apply:oN {#2} \use_ii_i:nn
- \@@_map_unbrace:wn , {#1}
- }
- \@@_map_tokens_n:nw {#1} \prg_do_nothing:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\clist_map_break:, \clist_map_break:n}
-% The break statements use the general \cs{prg_map_break:Nn} mechanism.
-% \begin{macrocode}
-\cs_new:Npn \clist_map_break:
- { \prg_map_break:Nn \clist_map_break: { } }
-\cs_new:Npn \clist_map_break:n
- { \prg_map_break:Nn \clist_map_break: }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\clist_count:N, \clist_count:c, \clist_count:n, \clist_count:e}
-% \begin{macro}{\@@_count:n}
-% \begin{macro}{\@@_count:w}
-% Counting the items in a comma list is done using the same approach as for
-% other token count functions: turn each entry into a \texttt{+1} then use
-% integer evaluation to actually do the mathematics.
-% In the case of an \texttt{n}-type comma-list, we could of course use
-% \cs{clist_map_function:nN}, but that is very slow, because it carefully
-% removes spaces. Instead, we loop manually, and skip blank items
-% (but not |{}|, hence the extra spaces).
-% \begin{macrocode}
-\cs_new:Npn \clist_count:N #1
- {
- \int_eval:n
- {
- 0
- \clist_map_function:NN #1 \@@_count:n
- }
- }
-\cs_generate_variant:Nn \clist_count:N { c }
-\cs_new:Npn \@@_count:n #1 { + 1 }
-\cs_set_protected:Npn \@@_tmp:w #1
- {
- \cs_new:Npn \clist_count:n ##1
- {
- \int_eval:n
- {
- 0
- \@@_count:w #1
- ##1 , \s_@@_stop \prg_break: , \prg_break_point:
- }
- }
- \cs_new:Npn \@@_count:w ##1 ,
- {
- \@@_use_none_delimit_by_s_stop:w ##1 \s_@@_stop
- \tl_if_blank:nF {##1} { + 1 }
- \@@_count:w #1
- }
- }
-\exp_args:No \@@_tmp:w \c_space_tl
-\cs_generate_variant:Nn \clist_count:n { e }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Using comma lists}
-%
-% \begin{macro}[EXP]{\clist_use:Nnnn, \clist_use:cnnn}
-% \begin{macro}[EXP]
-% {\@@_use:wwn, \@@_use:nwwwwnwn, \@@_use:nwwn}
-% \begin{macro}[EXP]{\clist_use:Nn, \clist_use:cn}
-% First check that the variable exists. Then count the items in the
-% comma list. If it has none, output nothing. If it has one item,
-% output that item, brace stripped (note that space-trimming has
-% already been done when the comma list was assigned). If it has two,
-% place the \meta{separator~between~two} in the middle.
-%
-% Otherwise, \cs{@@_use:nwwwwnwn} takes the following arguments; 1:
-% a \meta{separator}, 2, 3, 4: three items from the comma list (or
-% quarks), 5: the rest of the comma list, 6: a \meta{continuation}
-% function (\texttt{use_ii} or \texttt{use_iii} with its
-% \meta{separator} argument), 7: junk, and 8: the temporary result,
-% which is built in a brace group following \cs{s_@@_stop}. The
-% \meta{separator} and the first of the three items are placed in the
-% result, then we use the \meta{continuation}, placing the remaining
-% two items after it. When we begin this loop, the three items really
-% belong to the comma list, the first \cs{s_@@_mark} is taken as a
-% delimiter to the \texttt{use_ii} function, and the continuation is
-% \texttt{use_ii} itself. When we reach the last two items of the
-% original token list, \cs{s_@@_mark} is taken as a third item, and now
-% the second \cs{s_@@_mark} serves as a delimiter to \texttt{use_ii},
-% switching to the other \meta{continuation}, \texttt{use_iii}, which
-% uses the \meta{separator between final two}.
-% \begin{macrocode}
-\cs_new:Npn \clist_use:Nnnn #1#2#3#4
- {
- \clist_if_exist:NTF #1
- {
- \int_case:nnF { \clist_count:N #1 }
- {
- { 0 } { }
- { 1 } { \exp_after:wN \@@_use:wwn #1 , , { } }
- { 2 } { \exp_after:wN \@@_use:wwn #1 , {#2} }
- }
- {
- \exp_after:wN \@@_use:nwwwwnwn
- \exp_after:wN { \exp_after:wN } #1 ,
- \s_@@_mark , { \@@_use:nwwwwnwn {#3} }
- \s_@@_mark , { \@@_use:nwwn {#4} }
- \s_@@_stop { }
- }
- }
- {
- \msg_expandable_error:nnn
- { kernel } { bad-variable } {#1}
- }
- }
-\cs_generate_variant:Nn \clist_use:Nnnn { c }
-\cs_new:Npn \@@_use:wwn #1 , #2 , #3 { \exp_not:n { #1 #3 #2 } }
-\cs_new:Npn \@@_use:nwwwwnwn
- #1#2 , #3 , #4 , #5 \s_@@_mark , #6#7 \s_@@_stop #8
- { #6 {#3} , {#4} , #5 \s_@@_mark , {#6} #7 \s_@@_stop { #8 #1 #2 } }
-\cs_new:Npn \@@_use:nwwn #1#2 , #3 \s_@@_stop #4
- { \exp_not:n { #4 #1 #2 } }
-\cs_new:Npn \clist_use:Nn #1#2
- { \clist_use:Nnnn #1 {#2} {#2} {#2} }
-\cs_generate_variant:Nn \clist_use:Nn { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \clist_use:nnnn, \clist_use:nn, \@@_use:Nw,
-% \@@_use_one:w, \@@_use_end:w, \@@_use_more:w
-% }
-% Items are grabbed by \cs{@@_use:Nw}, which detects blank items with
-% a \cs{tl_if_empty:oTF} test (in which case it recurses). Non-blank
-% items are either the end of the list, in which case the argument
-% |#1| of \cs{@@_use:Nw} is used to properly end the list, or are
-% normal items, which must be trimmed and properly unbraced. As we
-% find successive items, the long list of \cs{@@_use:Nw} calls gets
-% shortened and we end up calling \cs{@@_use_more:w} once we have
-% found $3$ items. This auxiliary leaves the first-found item and the
-% general separator, and calls \cs{@@_use:Nw} to find more items.
-% A subtlety is that we use \cs{@@_use_end:w} both in the case of a
-% two-item list and for the last two items of a general list: to get
-% the correct separator, \cs{@@_use_more:w} replaces the
-% separator-of-two by the last-separator when called, namely as soon
-% as we have found three items.
-% \begin{macrocode}
-\cs_new:Npn \clist_use:nnnn #1#2#3#4
- {
- \@@_use:Nw \@@_use_none_delimit_by_s_stop:w
- \@@_use:Nw \@@_use_one:w
- \@@_use:Nw \@@_use_end:w
- \@@_use_more:w ;
- {#2} {#3} {#4} ;
- \prg_do_nothing: #1 , \s_@@_mark ,
- \s_@@_stop
- }
-\cs_new:Npn \@@_use:Nw #1#2 ; #3 ; #4 ,
- {
- \tl_if_empty:oTF { \use_none:nn #4 ? }
- { \@@_use:Nw #1#2 ; }
- {
- \@@_use_none_delimit_by_s_mark:w #4 #1 \s_@@_mark
- \tl_trim_spaces_apply:oN {#4} \use_ii_i:nn
- \@@_map_unbrace:wn , { #2 ; }
- }
- #3 ; \prg_do_nothing:
- }
-\cs_new:Npn \@@_use_one:w \s_@@_mark #1 , #2#3#4 \s_@@_stop
- { \exp_not:n {#3} }
-\cs_new:Npn \@@_use_end:w
- \s_@@_mark #1 , #2#3#4#5#6 \s_@@_stop
- { \exp_not:n { #4 #5 #3 } }
-\cs_new:Npn \@@_use_more:w ; #1#2#3#4#5#6 ;
- {
- \exp_not:n { #3 #5 }
- \@@_use:Nw \@@_use_end:w \@@_use_more:w ;
- {#1} {#2} {#6} {#5} {#6} ;
- }
-\cs_new:Npn \clist_use:nn #1#2 { \clist_use:nnnn {#1} {#2} {#2} {#2} }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Using a single item}
-%
-% \begin{macro}{\clist_item:Nn, \clist_item:cn}
-% \begin{macro}{\@@_item:nnnN, \@@_item:ffoN, \@@_item:ffnN}
-% \begin{macro}{\@@_item_N_loop:nw}
-% To avoid needing to test the end of the list at each step,
-% we first compute the \meta{length} of the list. If the item number
-% is~$0$, less than $-\meta{length}$, or more than $\meta{length}$,
-% the result is empty. If it is negative, but not less than $-\meta{length}$,
-% add $\meta{length}+1$ to the item number before performing the loop.
-% The loop itself is very simple, return the item if the counter
-% reached~$1$, otherwise, decrease the counter and repeat.
-% \begin{macrocode}
-\cs_new:Npn \clist_item:Nn #1#2
- {
- \@@_item:ffoN
- { \clist_count:N #1 }
- { \int_eval:n {#2} }
- #1
- \@@_item_N_loop:nw
- }
-\cs_new:Npn \@@_item:nnnN #1#2#3#4
- {
- \int_compare:nNnTF {#2} < 0
- {
- \int_compare:nNnTF {#2} < { - #1 }
- { \@@_use_none_delimit_by_s_stop:w }
- { \exp_args:Nf #4 { \int_eval:n { #2 + 1 + #1 } } }
- }
- {
- \int_compare:nNnTF {#2} > {#1}
- { \@@_use_none_delimit_by_s_stop:w }
- { #4 {#2} }
- }
- { } , #3 , \s_@@_stop
- }
-\cs_generate_variant:Nn \@@_item:nnnN { ffo, ff }
-\cs_new:Npn \@@_item_N_loop:nw #1 #2,
- {
- \int_compare:nNnTF {#1} = 0
- { \@@_use_i_delimit_by_s_stop:nw { \exp_not:n {#2} } }
- { \exp_args:Nf \@@_item_N_loop:nw { \int_eval:n { #1 - 1 } } }
- }
-\cs_generate_variant:Nn \clist_item:Nn { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\clist_item:nn, \clist_item:en}
-% \begin{macro}{
-% \@@_item_n:nw,
-% \@@_item_n_loop:nw,
-% \@@_item_n_end:n,
-% \@@_item_n_strip:n,
-% \@@_item_n_strip:w}
-% This starts in the same way as \cs{clist_item:Nn} by counting the items
-% of the comma list. The final item should be space-trimmed before being
-% brace-stripped, hence we insert a couple of odd-looking
-% \cs{prg_do_nothing:} to avoid losing braces. Blank items are ignored.
-% \begin{macrocode}
-\cs_new:Npn \clist_item:nn #1#2
- {
- \@@_item:ffnN
- { \clist_count:n {#1} }
- { \int_eval:n {#2} }
- {#1}
- \@@_item_n:nw
- }
-\cs_generate_variant:Nn \clist_item:nn { e }
-\cs_new:Npn \@@_item_n:nw #1
- { \@@_item_n_loop:nw {#1} \prg_do_nothing: }
-\cs_new:Npn \@@_item_n_loop:nw #1 #2,
- {
- \exp_args:No \tl_if_blank:nTF {#2}
- { \@@_item_n_loop:nw {#1} \prg_do_nothing: }
- {
- \int_compare:nNnTF {#1} = 0
- { \exp_args:No \@@_item_n_end:n {#2} }
- {
- \exp_args:Nf \@@_item_n_loop:nw
- { \int_eval:n { #1 - 1 } }
- \prg_do_nothing:
- }
- }
- }
-\cs_new:Npn \@@_item_n_end:n #1 #2 \s_@@_stop
- { \tl_trim_spaces_apply:nN {#1} \@@_item_n_strip:n }
-\cs_new:Npn \@@_item_n_strip:n #1 { \@@_item_n_strip:w #1 , }
-\cs_new:Npn \@@_item_n_strip:w #1 , { \exp_not:n {#1} }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\clist_rand_item:n, \clist_rand_item:N, \clist_rand_item:c}
-% \begin{macro}{\@@_rand_item:nn}
-% The |N|-type function is not implemented through the |n|-type
-% function for efficiency: for instance comma-list variables do not
-% require space-trimming of their items. Even testing for emptyness
-% of an |n|-type comma-list is slow, so we count items first and use
-% that both for the emptyness test and the pseudo-random integer.
-% Importantly, \cs{clist_item:Nn} and \cs{clist_item:nn} only evaluate
-% their argument once.
-% \begin{macrocode}
-\cs_new:Npn \clist_rand_item:n #1
- { \exp_args:Nf \@@_rand_item:nn { \clist_count:n {#1} } {#1} }
-\cs_new:Npn \@@_rand_item:nn #1#2
- {
- \int_compare:nNnF {#1} = 0
- { \clist_item:nn {#2} { \int_rand:nn { 1 } {#1} } }
- }
-\cs_new:Npn \clist_rand_item:N #1
- {
- \clist_if_empty:NF #1
- { \clist_item:Nn #1 { \int_rand:nn { 1 } { \clist_count:N #1 } } }
- }
-\cs_generate_variant:Nn \clist_rand_item:N { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Viewing comma lists}
-%
-% \begin{macro}{\clist_show:N, \clist_show:c, \clist_log:N, \clist_log:c, \@@_show:NN}
-% Apply the general \cs{__kernel_chk_tl_type:NnnT} with \cs{exp_not:o}
-% |#2| serving as a dummy code to prevent a check performed by this
-% auxiliary.
-% \begin{macrocode}
-\cs_new_protected:Npn \clist_show:N { \@@_show:NN \msg_show:nneeee }
-\cs_generate_variant:Nn \clist_show:N { c }
-\cs_new_protected:Npn \clist_log:N { \@@_show:NN \msg_log:nneeee }
-\cs_generate_variant:Nn \clist_log:N { c }
-\cs_new_protected:Npn \@@_show:NN #1#2
- {
- \__kernel_chk_tl_type:NnnT #2 { clist } { \exp_not:o #2 }
- {
- \int_compare:nNnTF { \clist_count:N #2 }
- = { \exp_args:No \clist_count:n #2 }
- {
- #1 { clist } { show }
- { \token_to_str:N #2 }
- { \clist_map_function:NN #2 \msg_show_item:n }
- { } { }
- }
- {
- \msg_error:nnee { clist } { non-clist }
- { \token_to_str:N #2 } { \tl_to_str:N #2 }
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\clist_show:n, \clist_log:n, \@@_show:Nn}
-% A variant of the above: no existence check, empty first argument for
-% the message.
-% \begin{macrocode}
-\cs_new_protected:Npn \clist_show:n { \@@_show:Nn \msg_show:nneeee }
-\cs_new_protected:Npn \clist_log:n { \@@_show:Nn \msg_log:nneeee }
-\cs_new_protected:Npn \@@_show:Nn #1#2
- {
- #1 { clist } { show }
- { } { \clist_map_function:nN {#2} \msg_show_item:n } { } { }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Scratch comma lists}
-%
-% \begin{variable}{\l_tmpa_clist, \l_tmpb_clist}
-% \begin{variable}{\g_tmpa_clist, \g_tmpb_clist}
-% Temporary comma list variables.
-% \begin{macrocode}
-\clist_new:N \l_tmpa_clist
-\clist_new:N \l_tmpb_clist
-\clist_new:N \g_tmpa_clist
-\clist_new:N \g_tmpb_clist
-% \end{macrocode}
-% \end{variable}
-% \end{variable}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3coffins.dtx b/macros/latex/contrib/l3kernel/l3coffins.dtx
deleted file mode 100644
index ad41224aa0..0000000000
--- a/macros/latex/contrib/l3kernel/l3coffins.dtx
+++ /dev/null
@@ -1,2590 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3coffins.dtx
-%
-% Copyright (C) 2010-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3coffins} module\\ Coffin code layer^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% The material in this module provides the low-level support system
-% for coffins. For details about the design concept of a coffin, see
-% the \pkg{xcoffins} module (in the \pkg{l3experimental} bundle).
-%
-% \section{Creating and initialising coffins}
-%
-% \begin{function}[added = 2011-08-17]{\coffin_new:N, \coffin_new:c}
-% \begin{syntax}
-% \cs{coffin_new:N} \meta{coffin}
-% \end{syntax}
-% Creates a new \meta{coffin} or raises an error if the name is
-% already taken. The declaration is global. The \meta{coffin} is
-% initially empty.
-% \end{function}
-%
-% \begin{function}[added = 2011-08-17, updated = 2019-01-21]
-% {
-% \coffin_clear:N, \coffin_clear:c,
-% \coffin_gclear:N, \coffin_gclear:c
-% }
-% \begin{syntax}
-% \cs{coffin_clear:N} \meta{coffin}
-% \end{syntax}
-% Clears the content of the \meta{coffin}.
-% \end{function}
-%
-% \begin{function}[added = 2011-08-17, updated = 2019-01-21]
-% {
-% \coffin_set_eq:NN, \coffin_set_eq:Nc,
-% \coffin_set_eq:cN, \coffin_set_eq:cc,
-% \coffin_gset_eq:NN, \coffin_gset_eq:Nc,
-% \coffin_gset_eq:cN, \coffin_gset_eq:cc
-% }
-% \begin{syntax}
-% \cs{coffin_set_eq:NN} \meta{coffin_1} \meta{coffin_2}
-% \end{syntax}
-% Sets both the content and poles of \meta{coffin_1} equal to those
-% of \meta{coffin_2}.
-% \end{function}
-%
-% \begin{function}[EXP, pTF, added = 2012-06-20]
-% {\coffin_if_exist:N, \coffin_if_exist:c}
-% \begin{syntax}
-% \cs{coffin_if_exist_p:N} \meta{coffin}
-% \cs{coffin_if_exist:NTF} \meta{coffin} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests whether the \meta{coffin} is currently defined.
-% \end{function}
-%
-% \section{Setting coffin content and poles}
-%
-% \begin{function}[added = 2011-08-17, updated = 2019-01-21]
-% {
-% \hcoffin_set:Nn, \hcoffin_set:cn,
-% \hcoffin_gset:Nn, \hcoffin_gset:cn
-% }
-% \begin{syntax}
-% \cs{hcoffin_set:Nn} \meta{coffin} \Arg{material}
-% \end{syntax}
-% Typesets the \meta{material} in horizontal mode, storing the result
-% in the \meta{coffin}. The standard poles for the \meta{coffin} are
-% then set up based on the size of the typeset material.
-% \end{function}
-%
-% \begin{function}[added = 2011-09-10, updated = 2019-01-21]
-% {
-% \hcoffin_set:Nw, \hcoffin_set:cw, \hcoffin_set_end:,
-% \hcoffin_gset:Nw, \hcoffin_gset:cw, \hcoffin_gset_end:
-% }
-% \begin{syntax}
-% \cs{hcoffin_set:Nw} \meta{coffin} \meta{material} \cs{hcoffin_set_end:}
-% \end{syntax}
-% Typesets the \meta{material} in horizontal mode, storing the result
-% in the \meta{coffin}. The standard poles for the \meta{coffin} are
-% then set up based on the size of the typeset material.
-% These functions are useful for setting the entire contents of an
-% environment in a coffin.
-% \end{function}
-%
-% \begin{function}[added = 2011-08-17, updated = 2023-02-03]
-% {
-% \vcoffin_set:Nnn, \vcoffin_set:cnn,
-% \vcoffin_gset:Nnn, \vcoffin_gset:cnn
-% }
-% \begin{syntax}
-% \cs{vcoffin_set:Nnn} \meta{coffin} \Arg{width} \Arg{material}
-% \end{syntax}
-% Typesets the \meta{material} in vertical mode constrained to the
-% given \meta{width} and stores the result in the \meta{coffin}. The
-% standard poles for the \meta{coffin} are then set up based on the
-% size of the typeset material.
-% \end{function}
-%
-% \begin{function}[added = 2011-09-10, updated = 2023-02-03]
-% {
-% \vcoffin_set:Nnw, \vcoffin_set:cnw, \vcoffin_set_end:,
-% \vcoffin_gset:Nnw, \vcoffin_gset:cnw, \vcoffin_gset_end:
-% }
-% \begin{syntax}
-% \cs{vcoffin_set:Nnw} \meta{coffin} \Arg{width} \meta{material} \cs{vcoffin_set_end:}
-% \end{syntax}
-% Typesets the \meta{material} in vertical mode constrained to the
-% given \meta{width} and stores the result in the \meta{coffin}. The
-% standard poles for the \meta{coffin} are then set up based on the
-% size of the typeset material.
-% These functions are useful for setting the entire contents of an
-% environment in a coffin.
-% \end{function}
-%
-% \begin{function}[added = 2012-07-20, updated = 2019-01-21]
-% {
-% \coffin_set_horizontal_pole:Nnn, \coffin_set_horizontal_pole:cnn,
-% \coffin_gset_horizontal_pole:Nnn, \coffin_gset_horizontal_pole:cnn
-% }
-% \begin{syntax}
-% \cs{coffin_set_horizontal_pole:Nnn} \meta{coffin}
-% ~~\Arg{pole} \Arg{offset}
-% \end{syntax}
-% Sets the \meta{pole} to run horizontally through the \meta{coffin}.
-% The \meta{pole} is placed at the \meta{offset} from the
-% baseline of the \meta{coffin}. The
-% \meta{offset} should be given as a dimension expression.
-% \end{function}
-%
-% \begin{function}[added = 2012-07-20, updated = 2019-01-21]
-% {
-% \coffin_set_vertical_pole:Nnn, \coffin_set_vertical_pole:cnn,
-% \coffin_gset_vertical_pole:Nnn, \coffin_gset_vertical_pole:cnn
-% }
-% \begin{syntax}
-% \cs{coffin_set_vertical_pole:Nnn} \meta{coffin} \Arg{pole} \Arg{offset}
-% \end{syntax}
-% Sets the \meta{pole} to run vertically through the \meta{coffin}.
-% The \meta{pole} is placed at the \meta{offset} from the
-% left-hand edge of the bounding box of the \meta{coffin}. The
-% \meta{offset} should be given as a dimension expression.
-% \end{function}
-%
-% \begin{function}[added = 2023-05-17]{\coffin_reset_poles:N, \coffin_greset_poles:N}
-% \begin{syntax}
-% \cs{coffin_reset_poles:N} \meta{coffin}
-% \end{syntax}
-% Resets the poles of the \meta{coffin} to the standard set, removing any
-% custom or inherited poles. The poles will therefore be equal to those that
-% would be obtained from \cs{hcoffin_set:Nn} or similar; the bounding box
-% of the coffin is not reset, so any material outside of the formal bounding box
-% will not influence the poles.
-% \end{function}
-%
-% \section{Coffin affine transformations}
-%
-% \begin{function}[updated = 2019-01-23]
-% {
-% \coffin_resize:Nnn, \coffin_resize:cnn,
-% \coffin_gresize:Nnn, \coffin_gresize:cnn
-% }
-% \begin{syntax}
-% \cs{coffin_resize:Nnn} \meta{coffin} \Arg{width} \Arg{total-height}
-% \end{syntax}
-% Resized the \meta{coffin} to \meta{width} and \meta{total-height},
-% both of which should be given as dimension expressions.
-% \end{function}
-%
-% \begin{function}
-% {
-% \coffin_rotate:Nn, \coffin_rotate:cn,
-% \coffin_grotate:Nn, \coffin_grotate:cn
-% }
-% \begin{syntax}
-% \cs{coffin_rotate:Nn} \meta{coffin} \Arg{angle}
-% \end{syntax}
-% Rotates the \meta{coffin} by the given \meta{angle} (given in
-% degrees counter-clockwise). This process rotates both the
-% coffin content and poles. Multiple rotations do not result in
-% the bounding box of the coffin growing unnecessarily.
-% \end{function}
-%
-% \begin{function}[updated = 2019-01-23]
-% {
-% \coffin_scale:Nnn, \coffin_scale:cnn,
-% \coffin_gscale:Nnn, \coffin_gscale:cnn
-% }
-% \begin{syntax}
-% \cs{coffin_scale:Nnn} \meta{coffin} \Arg{x-scale} \Arg{y-scale}
-% \end{syntax}
-% Scales the \meta{coffin} by a factors \meta{x-scale} and
-% \meta{y-scale} in the horizontal and vertical directions,
-% respectively. The two scale factors should be given as real numbers.
-% \end{function}
-%
-% \section{Joining and using coffins}
-%
-% \begin{function}[updated = 2019-01-22]
-% {
-% \coffin_attach:NnnNnnnn, \coffin_attach:cnnNnnnn,
-% \coffin_attach:Nnncnnnn, \coffin_attach:cnncnnnn,
-% \coffin_gattach:NnnNnnnn, \coffin_gattach:cnnNnnnn,
-% \coffin_gattach:Nnncnnnn, \coffin_gattach:cnncnnnn
-% }
-% \begin{syntax}
-% \cs{coffin_attach:NnnNnnnn}
-% ~~\meta{coffin_1} \Arg{coffin_1-pole_1} \Arg{coffin_1-pole_2}
-% ~~\meta{coffin_2} \Arg{coffin_2-pole_1} \Arg{coffin_2-pole_2}
-% ~~\Arg{x-offset} \Arg{y-offset}
-% \end{syntax}
-% This function attaches \meta{coffin_2} to \meta{coffin_1} such that the bounding box
-% of \meta{coffin_1} is not altered, \emph{i.e.}~\meta{coffin_2} can
-% protrude outside of the bounding box of the coffin. The alignment
-% is carried out by first calculating \meta{handle_1}, the
-% point of intersection of \meta{coffin_1-pole_1} and
-% \meta{coffin_1-pole_2}, and \meta{handle_2}, the point of intersection
-% of \meta{coffin_2-pole_1} and \meta{coffin_2-pole_2}. \meta{coffin_2} is
-% then attached to \meta{coffin_1} such that the relationship between
-% \meta{handle_1} and \meta{handle_2} is described by the \meta{x-offset}
-% and \meta{y-offset}. The two offsets should be given as dimension
-% expressions.
-% \end{function}
-%
-% \begin{function}[updated = 2019-01-22]
-% {
-% \coffin_join:NnnNnnnn, \coffin_join:cnnNnnnn,
-% \coffin_join:Nnncnnnn, \coffin_join:cnncnnnn,
-% \coffin_gjoin:NnnNnnnn, \coffin_gjoin:cnnNnnnn,
-% \coffin_gjoin:Nnncnnnn, \coffin_gjoin:cnncnnnn
-% }
-% \begin{syntax}
-% \cs{coffin_join:NnnNnnnn}
-% ~~\meta{coffin_1} \Arg{coffin_1-pole_1} \Arg{coffin_1-pole_2}
-% ~~\meta{coffin_2} \Arg{coffin_2-pole_1} \Arg{coffin_2-pole_2}
-% ~~\Arg{x-offset} \Arg{y-offset}
-% \end{syntax}
-% This function joins \meta{coffin_2} to \meta{coffin_1} such that the bounding box
-% of \meta{coffin_1} may expand. The new bounding
-% box covers the area containing the bounding boxes of the two
-% original coffins. The alignment is carried out by first calculating
-% \meta{handle_1}, the point of intersection of \meta{coffin_1-pole_1} and
-% \meta{coffin_1-pole_2}, and \meta{handle_2}, the point of intersection
-% of \meta{coffin_2-pole_1} and \meta{coffin_2-pole_2}. \meta{coffin_2} is
-% then attached to \meta{coffin_1} such that the relationship between
-% \meta{handle_1} and \meta{handle_2} is described by the \meta{x-offset}
-% and \meta{y-offset}. The two offsets should be given as dimension
-% expressions.
-% \end{function}
-%
-% \begin{function}[updated = 2012-07-20]
-% {\coffin_typeset:Nnnnn, \coffin_typeset:cnnnn}
-% \begin{syntax}
-% \cs{coffin_typeset:Nnnnn} \meta{coffin} \Arg{pole_1} \Arg{pole_2}
-% ~~\Arg{x-offset} \Arg{y-offset}
-% \end{syntax}
-% Typesetting is carried out by first calculating \meta{handle}, the
-% point of intersection of \meta{pole_1} and \meta{pole_2}. The coffin
-% is then typeset in horizontal mode such that the relationship between the
-% current reference point in the document and the \meta{handle} is described
-% by the \meta{x-offset} and \meta{y-offset}. The two offsets should
-% be given as dimension expressions. Typesetting a coffin is
-% therefore analogous to carrying out an alignment where the
-% \enquote{parent} coffin is the current insertion point.
-% \end{function}
-%
-% \section{Measuring coffins}
-%
-% \begin{function}{\coffin_dp:N, \coffin_dp:c}
-% \begin{syntax}
-% \cs{coffin_dp:N} \meta{coffin}
-% \end{syntax}
-% Calculates the depth (below the baseline) of the \meta{coffin}
-% in a form suitable for use in a \meta{dim expr}.
-% \end{function}
-%
-% \begin{function}{\coffin_ht:N, \coffin_ht:c}
-% \begin{syntax}
-% \cs{coffin_ht:N} \meta{coffin}
-% \end{syntax}
-% Calculates the height (above the baseline) of the \meta{coffin}
-% in a form suitable for use in a \meta{dim expr}.
-% \end{function}
-%
-% \begin{function}{\coffin_wd:N, \coffin_wd:c}
-% \begin{syntax}
-% \cs{coffin_wd:N} \meta{coffin}
-% \end{syntax}
-% Calculates the width of the \meta{coffin} in a form
-% suitable for use in a \meta{dim expr}.
-% \end{function}
-%
-% \section{Coffin diagnostics}
-%
-% \begin{function}[updated = 2011-09-02]
-% {\coffin_display_handles:Nn, \coffin_display_handles:cn}
-% \begin{syntax}
-% \cs{coffin_display_handles:Nn} \meta{coffin} \Arg{color}
-% \end{syntax}
-% This function first calculates the intersections between all of
-% the \meta{poles} of the \meta{coffin} to give a set of
-% \meta{handles}. It then prints the \meta{coffin} at the current
-% location in the source, with the position of the \meta{handles}
-% marked on the coffin. The \meta{handles} are labelled as part
-% of this process: the locations of the \meta{handles} and the labels
-% are both printed in the \meta{color} specified.
-% \end{function}
-%
-% \begin{function}[updated = 2011-09-02]
-% {\coffin_mark_handle:Nnnn, \coffin_mark_handle:cnnn}
-% \begin{syntax}
-% \cs{coffin_mark_handle:Nnnn} \meta{coffin} \Arg{pole_1} \Arg{pole_2} \Arg{color}
-% \end{syntax}
-% This function first calculates the \meta{handle} for the
-% \meta{coffin} as defined by the intersection of \meta{pole_1} and
-% \meta{pole_2}. It then marks the position of the \meta{handle}
-% on the \meta{coffin}. The \meta{handle} are labelled as part of
-% this process: the location of the \meta{handle} and the label are
-% both printed in the \meta{color} specified.
-% \end{function}
-%
-% \begin{function}[updated = 2015-08-01]
-% {\coffin_show_structure:N, \coffin_show_structure:c}
-% \begin{syntax}
-% \cs{coffin_show_structure:N} \meta{coffin}
-% \end{syntax}
-% This function shows the structural information about the
-% \meta{coffin} in the terminal. The width, height and depth of the
-% typeset material are given, along with the location of all of the
-% poles of the coffin.
-%
-% Notice that the poles of a coffin are defined by four values:
-% the $x$ and $y$ co-ordinates of a point that the pole
-% passes through and the $x$- and $y$-components of a
-% vector denoting the direction of the pole. It is the ratio between
-% the later, rather than the absolute values, which determines the
-% direction of the pole.
-% \end{function}
-%
-% \begin{function}[added = 2014-08-22, updated = 2015-08-01]
-% {\coffin_log_structure:N, \coffin_log_structure:c}
-% \begin{syntax}
-% \cs{coffin_log_structure:N} \meta{coffin}
-% \end{syntax}
-% This function writes the structural information about the
-% \meta{coffin} in the log file. See also \cs{coffin_show_structure:N}
-% which displays the result in the terminal.
-% \end{function}
-%
-% \begin{function}[added = 2021-05-11]
-% {\coffin_show:N, \coffin_show:c, \coffin_log:N, \coffin_log:c}
-% \begin{syntax}
-% \cs{coffin_show:N} \meta{coffin}
-% \cs{coffin_log:N} \meta{coffin}
-% \end{syntax}
-% Shows full details of poles and contents of the \meta{coffin} in the
-% terminal or log file. See \cs{coffin_show_structure:N} and
-% \cs{box_show:N} to show separately the pole structure and the
-% contents.
-% \end{function}
-%
-% \begin{function}[added = 2021-05-11]
-% {\coffin_show:Nnn, \coffin_show:cnn, \coffin_log:Nnn, \coffin_log:cnn}
-% \begin{syntax}
-% \cs{coffin_show:Nnn} \meta{coffin} \Arg{int expr_1} \Arg{int expr_2}
-% \cs{coffin_log:Nnn} \meta{coffin} \Arg{int expr_1} \Arg{int expr_2}
-% \end{syntax}
-% Shows poles and contents of the \meta{coffin} in the terminal or log
-% file, showing the first \meta{int expr_1} items in the coffin, and
-% descending into \meta{int expr_2} group levels. See
-% \cs{coffin_show_structure:N} and \cs{box_show:Nnn} to show
-% separately the pole structure and the contents.
-% \end{function}
-%
-% \section{Constants and variables}
-%
-% \begin{variable}{\c_empty_coffin}
-% A permanently empty coffin.
-% \end{variable}
-%
-% \begin{variable}[added = 2012-06-19]{\l_tmpa_coffin, \l_tmpb_coffin}
-% Scratch coffins for local assignment. These are never used by
-% the kernel code, and so are safe for use with any \LaTeX3-defined
-% function. However, they may be overwritten by other non-kernel
-% code and so should only be used for short-term storage.
-% \end{variable}
-%
-% \begin{variable}[added = 2019-01-24]{\g_tmpa_coffin, \g_tmpb_coffin}
-% Scratch coffins for global assignment. These are never used by
-% the kernel code, and so are safe for use with any \LaTeX3-defined
-% function. However, they may be overwritten by other non-kernel
-% code and so should only be used for short-term storage.
-% \end{variable}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3coffins} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=coffin>
-% \end{macrocode}
-%
-% \subsection{Coffins: data structures and general variables}
-%
-% \begin{variable}{\l_@@_internal_box}
-% \begin{variable}{\l_@@_internal_dim}
-% \begin{variable}{\l_@@_internal_tl}
-% Scratch variables.
-% \begin{macrocode}
-\box_new:N \l_@@_internal_box
-\dim_new:N \l_@@_internal_dim
-\tl_new:N \l_@@_internal_tl
-% \end{macrocode}
-% \end{variable}
-% \end{variable}
-% \end{variable}
-%
-% \begin{variable}{\c_@@_corners_prop}
-% The \enquote{corners}; of a coffin define the real content, as
-% opposed to the \TeX{} bounding box. They all start off in the same
-% place, of course.
-% \begin{macrocode}
-\prop_const_from_keyval:Nn \c_@@_corners_prop
- {
- tl = { 0pt } { 0pt } ,
- tr = { 0pt } { 0pt } ,
- bl = { 0pt } { 0pt } ,
- br = { 0pt } { 0pt } ,
- }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\c_@@_poles_prop}
-% Pole positions are given for horizontal, vertical and reference-point
-% based values.
-% \begin{macrocode}
-\prop_const_from_keyval:Nn \c_@@_poles_prop
- {
- l = { 0pt } { 0pt } { 0pt } { 1000pt } ,
- hc = { 0pt } { 0pt } { 0pt } { 1000pt } ,
- r = { 0pt } { 0pt } { 0pt } { 1000pt } ,
- b = { 0pt } { 0pt } { 1000pt } { 0pt } ,
- vc = { 0pt } { 0pt } { 1000pt } { 0pt } ,
- t = { 0pt } { 0pt } { 1000pt } { 0pt } ,
- B = { 0pt } { 0pt } { 1000pt } { 0pt } ,
- H = { 0pt } { 0pt } { 1000pt } { 0pt } ,
- T = { 0pt } { 0pt } { 1000pt } { 0pt } ,
- }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_slope_A_fp}
-% \begin{variable}{\l_@@_slope_B_fp}
-% Used for calculations of intersections.
-% \begin{macrocode}
-\fp_new:N \l_@@_slope_A_fp
-\fp_new:N \l_@@_slope_B_fp
-% \end{macrocode}
-% \end{variable}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_error_bool}
-% For propagating errors so that parts of the code can work around them.
-% \begin{macrocode}
-\bool_new:N \l_@@_error_bool
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_offset_x_dim}
-% \begin{variable}{\l_@@_offset_y_dim}
-% The offset between two sets of coffin handles when typesetting. These
-% values are corrected from those requested in an alignment for the
-% positions of the handles.
-% \begin{macrocode}
-\dim_new:N \l_@@_offset_x_dim
-\dim_new:N \l_@@_offset_y_dim
-% \end{macrocode}
-% \end{variable}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_pole_a_tl}
-% \begin{variable}{\l_@@_pole_b_tl}
-% Needed for finding the intersection of two poles.
-% \begin{macrocode}
-\tl_new:N \l_@@_pole_a_tl
-\tl_new:N \l_@@_pole_b_tl
-% \end{macrocode}
-% \end{variable}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_x_dim}
-% \begin{variable}{\l_@@_y_dim}
-% \begin{variable}{\l_@@_x_prime_dim}
-% \begin{variable}{\l_@@_y_prime_dim}
-% For calculating intersections and so forth.
-% \begin{macrocode}
-\dim_new:N \l_@@_x_dim
-\dim_new:N \l_@@_y_dim
-\dim_new:N \l_@@_x_prime_dim
-\dim_new:N \l_@@_y_prime_dim
-% \end{macrocode}
-% \end{variable}
-% \end{variable}
-% \end{variable}
-% \end{variable}
-%
-% \subsection{Basic coffin functions}
-%
-% There are a number of basic functions needed for creating coffins and
-% placing material in them. This all relies on the following data
-% structures.
-%
-% \begin{macro}[EXP]{\@@_to_value:N}
-% Coffins are a two-part structure and we rely on the internal nature of
-% box allocation to make everything work. As such, we need an interface
-% to turn coffin identifiers into numbers. For the purposes here, the
-% signature allowed is |N| despite the nature of the underlying primitive.
-% \begin{macrocode}
-\cs_new_eq:NN \@@_to_value:N \tex_number:D
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP, pTF]{\coffin_if_exist:N, \coffin_if_exist:c}
-% Several of the higher-level coffin functions would give multiple
-% errors if the coffin does not exist. A cleaner way to handle this
-% is provided here: both the box and the coffin structure are
-% checked.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \coffin_if_exist:N #1 { p , T , F , TF }
- {
- \cs_if_exist:NTF #1
- {
- \cs_if_exist:cTF { coffin ~ \@@_to_value:N #1 ~ poles }
- { \prg_return_true: }
- { \prg_return_false: }
- }
- { \prg_return_false: }
- }
-\prg_generate_conditional_variant:Nnn \coffin_if_exist:N
- { c } { p , T , F , TF }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_if_exist:NT}
-% Several of the higher-level coffin functions would give multiple
-% errors if the coffin does not exist. So a wrapper is provided to deal
-% with this correctly, issuing an error on erroneous use.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_if_exist:NT #1#2
- {
- \coffin_if_exist:NTF #1
- { #2 }
- {
- \msg_error:nne { coffin } { unknown }
- { \token_to_str:N #1 }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \coffin_clear:N, \coffin_clear:c,
-% \coffin_gclear:N, \coffin_gclear:c
-% }
-% Clearing coffins means emptying the box and resetting all of the
-% structures.
-% \begin{macrocode}
-\cs_new_protected:Npn \coffin_clear:N #1
- {
- \@@_if_exist:NT #1
- {
- \box_clear:N #1
- \@@_reset_structure:N #1
- }
- }
-\cs_generate_variant:Nn \coffin_clear:N { c }
-\cs_new_protected:Npn \coffin_gclear:N #1
- {
- \@@_if_exist:NT #1
- {
- \box_gclear:N #1
- \@@_greset_structure:N #1
- }
- }
-\cs_generate_variant:Nn \coffin_gclear:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\coffin_new:N, \coffin_new:c}
-% Creating a new coffin means making the underlying box and adding the
-% data structures. The \cs{debug_suspend:} and \cs{debug_resume:} functions
-% prevent \cs{prop_gclear_new:c} from writing useless information to
-% the log file.
-% \begin{macrocode}
-\cs_new_protected:Npn \coffin_new:N #1
- {
- \box_new:N #1
- \debug_suspend:
- \prop_gclear_new:c { coffin ~ \@@_to_value:N #1 ~ corners }
- \prop_gclear_new:c { coffin ~ \@@_to_value:N #1 ~ poles }
- \prop_gset_eq:cN { coffin ~ \@@_to_value:N #1 ~ corners }
- \c_@@_corners_prop
- \prop_gset_eq:cN { coffin ~ \@@_to_value:N #1 ~ poles }
- \c_@@_poles_prop
- \debug_resume:
- }
-\cs_generate_variant:Nn \coffin_new:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \hcoffin_set:Nn, \hcoffin_set:cn,
-% \hcoffin_gset:Nn, \hcoffin_gset:cn
-% }
-% Horizontal coffins are relatively easy: set the appropriate box,
-% reset the structures then update the handle positions.
-% \begin{macrocode}
-\cs_new_protected:Npn \hcoffin_set:Nn #1#2
- {
- \@@_if_exist:NT #1
- {
- \hbox_set:Nn #1
- {
- \color_ensure_current:
- #2
- }
- \coffin_reset_poles:N #1
- }
- }
-\cs_generate_variant:Nn \hcoffin_set:Nn { c }
-\cs_new_protected:Npn \hcoffin_gset:Nn #1#2
- {
- \@@_if_exist:NT #1
- {
- \hbox_gset:Nn #1
- {
- \color_ensure_current:
- #2
- }
- \coffin_greset_poles:N #1
- }
- }
-\cs_generate_variant:Nn \hcoffin_gset:Nn { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \vcoffin_set:Nnn, \vcoffin_set:cnn,
-% \vcoffin_gset:Nnn, \vcoffin_gset:cnn
-% }
-% \begin{macro}{\@@_set_vertical:NnnNNN}
-% \begin{macro}{\@@_set_vertical_aux:}
-% Setting vertical coffins is more complex. First, the material is
-% typeset with a given width. The default handles and poles are set as
-% for a horizontal coffin, before finding the top baseline using a
-% temporary box. No \cs{color_ensure_current:} here as that would add a
-% whatsit to the start of the vertical box and mess up the location of the
-% \texttt{T}~pole (see \emph{\TeX{} by Topic} for discussion of the
-% \tn{vtop} primitive, used to do the measuring).
-% \begin{macrocode}
-\cs_new_protected:Npn \vcoffin_set:Nnn #1#2#3
- {
- \@@_set_vertical:NnnNNN #1 {#2} {#3}
- \vbox_set:Nn \coffin_reset_poles:N \@@_set_pole:Nnn
- }
-\cs_generate_variant:Nn \vcoffin_set:Nnn { c }
-\cs_new_protected:Npn \vcoffin_gset:Nnn #1#2#3
- {
- \@@_set_vertical:NnnNNN #1 {#2} {#3}
- \vbox_gset:Nn \coffin_greset_poles:N \@@_gset_pole:Nnn
- }
-\cs_generate_variant:Nn \vcoffin_gset:Nnn { c }
-\cs_new_protected:Npn \@@_set_vertical:NnnNNN #1#2#3#4#5#6
- {
- \@@_if_exist:NT #1
- {
- #4 #1
- {
- \dim_set:Nn \tex_hsize:D {#2}
- \@@_set_vertical_aux:
- #3
- }
- #5 #1
- \vbox_set_top:Nn \l_@@_internal_box { \vbox_unpack:N #1 }
- #6 #1 { T }
- {
- { 0pt }
- {
- \dim_eval:n
- { \box_ht:N #1 - \box_ht:N \l_@@_internal_box }
- }
- { 1000pt }
- { 0pt }
- }
- \box_clear:N \l_@@_internal_box
- }
- }
-\cs_new_protected:Npe \@@_set_vertical_aux:
- {
- \bool_lazy_and:nnT
- { \cs_if_exist_p:N \fmtname }
- { \str_if_eq_p:Vn \fmtname { LaTeX2e } }
- {
- \dim_set_eq:NN \exp_not:N \linewidth \tex_hsize:D
- \dim_set_eq:NN \exp_not:N \columnwidth \tex_hsize:D
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {\hcoffin_set:Nw, \hcoffin_set:cw, \hcoffin_gset:Nw, \hcoffin_gset:cw}
-% \begin{macro}{\hcoffin_set_end:, \hcoffin_gset_end:}
-% These are the \enquote{begin}/\enquote{end} versions of the above:
-% watch the grouping!
-% \begin{macrocode}
-\cs_new_protected:Npn \hcoffin_set:Nw #1
- {
- \@@_if_exist:NT #1
- {
- \hbox_set:Nw #1 \color_ensure_current:
- \cs_set_protected:Npn \hcoffin_set_end:
- {
- \hbox_set_end:
- \coffin_reset_poles:N #1
- }
- }
- }
-\cs_generate_variant:Nn \hcoffin_set:Nw { c }
-\cs_new_protected:Npn \hcoffin_gset:Nw #1
- {
- \@@_if_exist:NT #1
- {
- \hbox_gset:Nw #1 \color_ensure_current:
- \cs_set_protected:Npn \hcoffin_gset_end:
- {
- \hbox_gset_end:
- \coffin_greset_poles:N #1
- }
- }
- }
-\cs_generate_variant:Nn \hcoffin_gset:Nw { c }
-\cs_new_protected:Npn \hcoffin_set_end: { }
-\cs_new_protected:Npn \hcoffin_gset_end: { }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {\vcoffin_set:Nnw, \vcoffin_set:cnw, \vcoffin_gset:Nnw, \vcoffin_gset:cnw}
-% \begin{macro}{\@@_set_vertical:NnNNNNNw}
-% \begin{macro}{\vcoffin_set_end:, \vcoffin_gset_end:}
-% The same for vertical coffins.
-% \begin{macrocode}
-\cs_new_protected:Npn \vcoffin_set:Nnw #1#2
- {
- \@@_set_vertical:NnNNNNNw #1 {#2} \vbox_set:Nw
- \vcoffin_set_end:
- \vbox_set_end: \coffin_reset_poles:N \@@_set_pole:Nnn
- }
-\cs_generate_variant:Nn \vcoffin_set:Nnw { c }
-\cs_new_protected:Npn \vcoffin_gset:Nnw #1#2
- {
- \@@_set_vertical:NnNNNNNw #1 {#2} \vbox_gset:Nw
- \vcoffin_gset_end:
- \vbox_gset_end: \coffin_greset_poles:N \@@_gset_pole:Nnn
- }
-\cs_generate_variant:Nn \vcoffin_gset:Nnw { c }
-\cs_new_protected:Npn \@@_set_vertical:NnNNNNNw #1#2#3#4#5#6#7
- {
- \@@_if_exist:NT #1
- {
- #3 #1
- \dim_set:Nn \tex_hsize:D {#2}
- \@@_set_vertical_aux:
- \cs_set_protected:Npn #4
- {
- #5
- #6 #1
- \vbox_set_top:Nn \l_@@_internal_box { \vbox_unpack:N #1 }
- #7 #1 { T }
- {
- { 0pt }
- {
- \dim_eval:n
- { \box_ht:N #1 - \box_ht:N \l_@@_internal_box }
- }
- { 1000pt }
- { 0pt }
- }
- \box_clear:N \l_@@_internal_box
- }
- }
- }
-\cs_new_protected:Npn \vcoffin_set_end: { }
-\cs_new_protected:Npn \vcoffin_gset_end: { }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \coffin_set_eq:NN, \coffin_set_eq:Nc,
-% \coffin_set_eq:cN, \coffin_set_eq:cc,
-% \coffin_gset_eq:NN, \coffin_gset_eq:Nc,
-% \coffin_gset_eq:cN, \coffin_gset_eq:cc
-% }
-% Setting two coffins equal is just a wrapper around other functions.
-% \begin{macrocode}
-\cs_new_protected:Npn \coffin_set_eq:NN #1#2
- {
- \@@_if_exist:NT #1
- {
- \box_set_eq:NN #1 #2
- \prop_set_eq:cc { coffin ~ \@@_to_value:N #1 ~ corners }
- { coffin ~ \@@_to_value:N #2 ~ corners }
- \prop_set_eq:cc { coffin ~ \@@_to_value:N #1 ~ poles }
- { coffin ~ \@@_to_value:N #2 ~ poles }
- }
- }
-\cs_generate_variant:Nn \coffin_set_eq:NN { c , Nc , cc }
-\cs_new_protected:Npn \coffin_gset_eq:NN #1#2
- {
- \@@_if_exist:NT #1
- {
- \box_gset_eq:NN #1 #2
- \prop_gset_eq:cc { coffin ~ \@@_to_value:N #1 ~ corners }
- { coffin ~ \@@_to_value:N #2 ~ corners }
- \prop_gset_eq:cc { coffin ~ \@@_to_value:N #1 ~ poles }
- { coffin ~ \@@_to_value:N #2 ~ poles }
- }
- }
-\cs_generate_variant:Nn \coffin_gset_eq:NN { c , Nc , cc }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\c_empty_coffin}
-% \begin{variable}{\l_@@_aligned_coffin}
-% \begin{variable}{\l_@@_aligned_internal_coffin}
-% Special coffins: these cannot be set up earlier as they need
-% \cs{coffin_new:N}. The empty coffin is set as a box as the full
-% coffin-setting system needs some material which is not yet available.
-% The empty coffin is creted entirely by hand: not everything is in place
-% yet.
-% \begin{macrocode}
-\coffin_new:N \c_empty_coffin
-\coffin_new:N \l_@@_aligned_coffin
-\coffin_new:N \l_@@_aligned_internal_coffin
-% \end{macrocode}
-% \end{variable}
-% \end{variable}
-% \end{variable}
-%
-% \begin{variable}
-% {\l_tmpa_coffin, \l_tmpb_coffin, \g_tmpa_coffin, \g_tmpb_coffin}
-% The usual scratch space.
-% \begin{macrocode}
-\coffin_new:N \l_tmpa_coffin
-\coffin_new:N \l_tmpb_coffin
-\coffin_new:N \g_tmpa_coffin
-\coffin_new:N \g_tmpb_coffin
-% \end{macrocode}
-% \end{variable}
-%
-% \subsection{Measuring coffins}
-%
-% \begin{macro}
-% {
-% \coffin_dp:N, \coffin_dp:c, \coffin_ht:N, \coffin_ht:c,
-% \coffin_wd:N, \coffin_wd:c
-% }
-% Coffins are just boxes when it comes to measurement. However, semantically
-% a separate set of functions are required.
-% \begin{macrocode}
-\cs_new_eq:NN \coffin_dp:N \box_dp:N
-\cs_new_eq:NN \coffin_dp:c \box_dp:c
-\cs_new_eq:NN \coffin_ht:N \box_ht:N
-\cs_new_eq:NN \coffin_ht:c \box_ht:c
-\cs_new_eq:NN \coffin_wd:N \box_wd:N
-\cs_new_eq:NN \coffin_wd:c \box_wd:c
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Coffins: handle and pole management}
-%
-% \begin{macro}{\@@_get_pole:NnN}
-% A simple wrapper around the recovery of a coffin pole, with some
-% error checking and recovery built-in.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_get_pole:NnN #1#2#3
- {
- \prop_get:cnNF
- { coffin ~ \@@_to_value:N #1 ~ poles } {#2} #3
- {
- \msg_error:nnee { coffin } { unknown-pole }
- { \exp_not:n {#2} } { \token_to_str:N #1 }
- \tl_set:Nn #3 { { 0pt } { 0pt } { 0pt } { 0pt } }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_reset_structure:N, \@@_greset_structure:N}
-% Resetting the structure is a simple copy job.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_reset_structure:N #1
- {
- \prop_set_eq:cN { coffin ~ \@@_to_value:N #1 ~ corners }
- \c_@@_corners_prop
- \prop_set_eq:cN { coffin ~ \@@_to_value:N #1 ~ poles }
- \c_@@_poles_prop
- }
-\cs_new_protected:Npn \@@_greset_structure:N #1
- {
- \prop_gset_eq:cN { coffin ~ \@@_to_value:N #1 ~ corners }
- \c_@@_corners_prop
- \prop_gset_eq:cN { coffin ~ \@@_to_value:N #1 ~ poles }
- \c_@@_poles_prop
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \coffin_set_horizontal_pole:Nnn, \coffin_set_horizontal_pole:cnn,
-% \coffin_gset_horizontal_pole:Nnn, \coffin_gset_horizontal_pole:cnn
-% }
-% \begin{macro}{\@@_set_horizontal_pole:NnnN}
-% \begin{macro}
-% {
-% \coffin_set_vertical_pole:Nnn, \coffin_set_vertical_pole:cnn,
-% \coffin_gset_vertical_pole:Nnn, \coffin_gset_vertical_pole:cnn
-% }
-% \begin{macro}{\@@_set_vertical_pole:NnnN}
-% \begin{macro}{\@@_set_pole:Nnn, \@@_gset_pole:Nnn}
-% Setting the pole of a coffin at the user/designer level requires a
-% bit more care. The idea here is to provide a reasonable interface to
-% the system, then to do the setting with full expansion. The
-% three-argument version is used internally to do a direct setting.
-% \begin{macrocode}
-\cs_new_protected:Npn \coffin_set_horizontal_pole:Nnn #1#2#3
- { \@@_set_horizontal_pole:NnnN #1 {#2} {#3} \prop_put:cne }
-\cs_generate_variant:Nn \coffin_set_horizontal_pole:Nnn { c }
-\cs_new_protected:Npn \coffin_gset_horizontal_pole:Nnn #1#2#3
- { \@@_set_horizontal_pole:NnnN #1 {#2} {#3} \prop_gput:cne }
-\cs_generate_variant:Nn \coffin_gset_horizontal_pole:Nnn { c }
-\cs_new_protected:Npn \@@_set_horizontal_pole:NnnN #1#2#3#4
- {
- \@@_if_exist:NT #1
- {
- #4 { coffin ~ \@@_to_value:N #1 ~ poles }
- {#2}
- {
- { 0pt } { \dim_eval:n {#3} }
- { 1000pt } { 0pt }
- }
- }
- }
-\cs_new_protected:Npn \coffin_set_vertical_pole:Nnn #1#2#3
- { \@@_set_vertical_pole:NnnN #1 {#2} {#3} \prop_put:cne }
-\cs_generate_variant:Nn \coffin_set_vertical_pole:Nnn { c }
-\cs_new_protected:Npn \coffin_gset_vertical_pole:Nnn #1#2#3
- { \@@_set_vertical_pole:NnnN #1 {#2} {#3} \prop_gput:cne }
- \cs_generate_variant:Nn \coffin_gset_vertical_pole:Nnn { c }
-\cs_new_protected:Npn \@@_set_vertical_pole:NnnN #1#2#3#4
- {
- \@@_if_exist:NT #1
- {
- #4 { coffin ~ \@@_to_value:N #1 ~ poles }
- {#2}
- {
- { \dim_eval:n {#3} } { 0pt }
- { 0pt } { 1000pt }
- }
- }
- }
-\cs_new_protected:Npn \@@_set_pole:Nnn #1#2#3
- {
- \prop_put:cne { coffin ~ \@@_to_value:N #1 ~ poles }
- {#2} {#3}
- }
-\cs_new_protected:Npn \@@_gset_pole:Nnn #1#2#3
- {
- \prop_gput:cne { coffin ~ \@@_to_value:N #1 ~ poles }
- {#2} {#3}
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\coffin_reset_poles:N, \coffin_greset_poles:N}
-% Simple shortcuts.
-% \begin{macrocode}
-\cs_new_protected:Npn \coffin_reset_poles:N #1
- {
- \@@_reset_structure:N #1
- \@@_update_corners:N #1
- \@@_update_poles:N #1
- }
-\cs_new_protected:Npn \coffin_greset_poles:N #1
- {
- \@@_greset_structure:N #1
- \@@_gupdate_corners:N #1
- \@@_gupdate_poles:N #1
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_update_corners:N, \@@_gupdate_corners:N}
-% \begin{macro}{\@@_update_corners:NN}
-% \begin{macro}{\@@_update_corners:NNN}
-% Updating the corners of a coffin is straight-forward as at this stage
-% there can be no rotation. So the corners of the content are just those
-% of the underlying \TeX{} box.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_update_corners:N #1
- { \@@_update_corners:NN #1 \prop_put:Nne }
-\cs_new_protected:Npn \@@_gupdate_corners:N #1
- { \@@_update_corners:NN #1 \prop_gput:Nne }
-\cs_new_protected:Npn \@@_update_corners:NN #1#2
- {
- \exp_args:Nc \@@_update_corners:NNN
- { coffin ~ \@@_to_value:N #1 ~ corners }
- #1 #2
- }
-\cs_new_protected:Npn \@@_update_corners:NNN #1#2#3
- {
- #3 #1
- { tl }
- { { 0pt } { \dim_eval:n { \box_ht:N #2 } } }
- #3 #1
- { tr }
- {
- { \dim_eval:n { \box_wd:N #2 } }
- { \dim_eval:n { \box_ht:N #2 } }
- }
- #3 #1
- { bl }
- { { 0pt } { \dim_eval:n { -\box_dp:N #2 } } }
- #3 #1
- { br }
- {
- { \dim_eval:n { \box_wd:N #2 } }
- { \dim_eval:n { -\box_dp:N #2 } }
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_update_poles:N, \@@_gupdate_poles:N}
-% \begin{macro}{\@@_update_poles:NN}
-% \begin{macro}{\@@_update_poles:NNN}
-% This function is called when a coffin is set, and updates the poles to
-% reflect the nature of size of the box. Thus this function only alters
-% poles where the default position is dependent on the size of the box.
-% It also does not set poles which are relevant only to vertical
-% coffins.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_update_poles:N #1
- { \@@_update_poles:NN #1 \prop_put:Nne }
-\cs_new_protected:Npn \@@_gupdate_poles:N #1
- { \@@_update_poles:NN #1 \prop_gput:Nne }
-\cs_new_protected:Npn \@@_update_poles:NN #1#2
- {
- \exp_args:Nc \@@_update_poles:NNN
- { coffin ~ \@@_to_value:N #1 ~ poles }
- #1 #2
- }
-\cs_new_protected:Npn \@@_update_poles:NNN #1#2#3
- {
- #3 #1 { hc }
- {
- { \dim_eval:n { 0.5 \box_wd:N #2 } }
- { 0pt } { 0pt } { 1000pt }
- }
- #3 #1 { r }
- {
- { \dim_eval:n { \box_wd:N #2 } }
- { 0pt } { 0pt } { 1000pt }
- }
- #3 #1 { vc }
- {
- { 0pt }
- { \dim_eval:n { ( \box_ht:N #2 - \box_dp:N #2 ) / 2 } }
- { 1000pt }
- { 0pt }
- }
- #3 #1 { t }
- {
- { 0pt }
- { \dim_eval:n { \box_ht:N #2 } }
- { 1000pt }
- { 0pt }
- }
- #3 #1 { b }
- {
- { 0pt }
- { \dim_eval:n { -\box_dp:N #2 } }
- { 1000pt }
- { 0pt }
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Coffins: calculation of pole intersections}
-%
-% \begin{macro}{\@@_calculate_intersection:Nnn}
-% \begin{macro}{\@@_calculate_intersection:nnnnnnnn}
-% \begin{macro}{\@@_calculate_intersection:nnnnnn}
-% The lead off in finding intersections is to recover the two poles
-% and then hand off to the auxiliary for the actual calculation. There
-% may of course not be an intersection, for which an error trap is
-% needed.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_calculate_intersection:Nnn #1#2#3
- {
- \@@_get_pole:NnN #1 {#2} \l_@@_pole_a_tl
- \@@_get_pole:NnN #1 {#3} \l_@@_pole_b_tl
- \bool_set_false:N \l_@@_error_bool
- \exp_last_two_unbraced:Noo
- \@@_calculate_intersection:nnnnnnnn
- \l_@@_pole_a_tl \l_@@_pole_b_tl
- \bool_if:NT \l_@@_error_bool
- {
- \msg_error:nn { coffin } { no-pole-intersection }
- \dim_zero:N \l_@@_x_dim
- \dim_zero:N \l_@@_y_dim
- }
- }
-% \end{macrocode}
-% The two poles passed here each have four values (as dimensions),
-% ($a$, $b$, $c$, $d$) and
-% ($a'$, $b'$, $c'$, $d'$). These are arguments
-% $1$--$4$ and $5$--$8$, respectively. In both
-% cases $a$ and $b$ are the co-ordinates of a point on the
-% pole and $c$ and $d$ define the direction of the pole. Finding
-% the intersection depends on the directions of the poles, which are
-% given by $d / c$ and $d' / c'$. However, if one of the poles
-% is either horizontal or vertical then one or more of $c$, $d$,
-% $c'$ and $d'$ are zero and a special case is needed.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_calculate_intersection:nnnnnnnn
- #1#2#3#4#5#6#7#8
- {
- \dim_compare:nNnTF {#3} = \c_zero_dim
-% \end{macrocode}
-% The case where the first pole is vertical. So the $x$-component
-% of the interaction is at $a$. There is then a test on the
-% second pole: if it is also vertical then there is an error.
-% \begin{macrocode}
- {
- \dim_set:Nn \l_@@_x_dim {#1}
- \dim_compare:nNnTF {#7} = \c_zero_dim
- { \bool_set_true:N \l_@@_error_bool }
-% \end{macrocode}
-% The second pole may still be horizontal, in which case the
-% $y$-component of the intersection is $b'$. If not,
-% \[
-% y = \frac{d'}{c'} \left ( a - a' \right ) + b'
-% \]
-% with the $x$-component already known to be |#1|.
-% \begin{macrocode}
- {
- \dim_set:Nn \l_@@_y_dim
- {
- \dim_compare:nNnTF {#8} = \c_zero_dim
- {#6}
- {
- \fp_to_dim:n
- {
- ( \dim_to_fp:n {#8} / \dim_to_fp:n {#7} )
- * ( \dim_to_fp:n {#1} - \dim_to_fp:n {#5} )
- + \dim_to_fp:n {#6}
- }
- }
- }
- }
- }
-% \end{macrocode}
-% If the first pole is not vertical then it may be horizontal. If so,
-% then the procedure is essentially the same as that already done but
-% with the $x$- and $y$-components interchanged.
-% \begin{macrocode}
- {
- \dim_compare:nNnTF {#4} = \c_zero_dim
- {
- \dim_set:Nn \l_@@_y_dim {#2}
- \dim_compare:nNnTF {#8} = { \c_zero_dim }
- { \bool_set_true:N \l_@@_error_bool }
- {
-% \end{macrocode}
-% Now we deal with the case where the second pole may be vertical, or
-% if not we have
-% \[
-% x = \frac{c'}{d'} \left ( b - b' \right ) + a'
-% \]
-% which is again handled by the same auxiliary.
-% \begin{macrocode}
- \dim_set:Nn \l_@@_x_dim
- {
- \dim_compare:nNnTF {#7} = \c_zero_dim
- {#5}
- {
- \fp_to_dim:n
- {
- ( \dim_to_fp:n {#7} / \dim_to_fp:n {#8} )
- * ( \dim_to_fp:n {#4} - \dim_to_fp:n {#6} )
- + \dim_to_fp:n {#5}
- }
- }
- }
- }
- }
-% \end{macrocode}
-% The first pole is neither horizontal nor vertical. To avoid even
-% more complexity, we now work out both slopes and pass to an auxiliary.
-% \begin{macrocode}
- {
- \use:e
- {
- \@@_calculate_intersection:nnnnnn
- { \dim_to_fp:n {#4} / \dim_to_fp:n {#3} }
- { \dim_to_fp:n {#8} / \dim_to_fp:n {#7} }
- }
- {#1} {#2} {#5} {#6}
- }
- }
- }
-% \end{macrocode}
-% Assuming the two poles are not parallel, then the intersection point is
-% found in two steps. First we find the $x$-value with
-% \[
-% x = \frac { sa - s'a' - b + b' }{ s - s' }
-% \]
-% and then finding the $y$-value with
-% \[
-% y = s ( x - a ) + b
-% \]
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_calculate_intersection:nnnnnn #1#2#3#4#5#6
- {
- \fp_compare:nNnTF {#1} = {#2}
- { \bool_set_true:N \l_@@_error_bool }
- {
- \dim_set:Nn \l_@@_x_dim
- {
- \fp_to_dim:n
- {
- (
- #1 * \dim_to_fp:n {#3}
- - #2 * \dim_to_fp:n {#5}
- - \dim_to_fp:n {#4}
- + \dim_to_fp:n {#6}
- )
- /
- ( #1 - #2 )
- }
- }
- \dim_set:Nn \l_@@_y_dim
- {
- \fp_to_dim:n
- {
- #1 * ( \l_@@_x_dim - \dim_to_fp:n {#3} )
- + \dim_to_fp:n {#4}
- }
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Affine transformations}
-%
-% \begin{variable}{\l_@@_sin_fp}
-% \begin{variable}{\l_@@_cos_fp}
-% Used for rotations to get the sine and cosine values.
-% \begin{macrocode}
-\fp_new:N \l_@@_sin_fp
-\fp_new:N \l_@@_cos_fp
-% \end{macrocode}
-% \end{variable}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_bounding_prop}
-% A property list for the bounding box of a coffin. This is only needed
-% during the rotation, so there is just the one.
-% \begin{macrocode}
-\prop_new:N \l_@@_bounding_prop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_corners_prop, \l_@@_poles_prop}
-% Used to avoid needing to track scope for intermediate steps.
-% \begin{macrocode}
-\prop_new:N \l_@@_corners_prop
-\prop_new:N \l_@@_poles_prop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_bounding_shift_dim}
-% The shift of the bounding box of a coffin from the real content.
-% \begin{macrocode}
-\dim_new:N \l_@@_bounding_shift_dim
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_left_corner_dim}
-% \begin{variable}{\l_@@_right_corner_dim}
-% \begin{variable}{\l_@@_bottom_corner_dim}
-% \begin{variable}{\l_@@_top_corner_dim}
-% These are used to hold maxima for the various corner values: these
-% thus define the minimum size of the bounding box after rotation.
-% \begin{macrocode}
-\dim_new:N \l_@@_left_corner_dim
-\dim_new:N \l_@@_right_corner_dim
-\dim_new:N \l_@@_bottom_corner_dim
-\dim_new:N \l_@@_top_corner_dim
-% \end{macrocode}
-% \end{variable}
-% \end{variable}
-% \end{variable}
-% \end{variable}
-%
-% \begin{macro}
-% {
-% \coffin_rotate:Nn, \coffin_rotate:cn,
-% \coffin_grotate:Nn, \coffin_grotate:cn
-% }
-% \begin{macro}{\@@_rotate:NnNNN}
-% Rotating a coffin requires several steps which can be conveniently
-% run together. The sine and cosine of the angle in degrees are
-% computed. This is then used to set \cs{l_@@_sin_fp} and
-% \cs{l_@@_cos_fp}, which are carried through unchanged for the rest
-% of the procedure.
-% \begin{macrocode}
-\cs_new_protected:Npn \coffin_rotate:Nn #1#2
- { \@@_rotate:NnNNN #1 {#2} \box_rotate:Nn \prop_set_eq:cN \hbox_set:Nn }
-\cs_generate_variant:Nn \coffin_rotate:Nn { c }
-\cs_new_protected:Npn \coffin_grotate:Nn #1#2
- { \@@_rotate:NnNNN #1 {#2} \box_grotate:Nn \prop_gset_eq:cN \hbox_gset:Nn }
-\cs_generate_variant:Nn \coffin_grotate:Nn { c }
-\cs_new_protected:Npn \@@_rotate:NnNNN #1#2#3#4#5
- {
- \fp_set:Nn \l_@@_sin_fp { sind ( #2 ) }
- \fp_set:Nn \l_@@_cos_fp { cosd ( #2 ) }
-% \end{macrocode}
-% Use a local copy of the property lists to avoid needing to pass the
-% name and scope around.
-% \begin{macrocode}
- \prop_set_eq:Nc \l_@@_corners_prop
- { coffin ~ \@@_to_value:N #1 ~ corners }
- \prop_set_eq:Nc \l_@@_poles_prop
- { coffin ~ \@@_to_value:N #1 ~ poles }
-% \end{macrocode}
-% The corners and poles of the coffin can now be rotated around the
-% origin. This is best achieved using mapping functions.
-% \begin{macrocode}
- \prop_map_inline:Nn \l_@@_corners_prop
- { \@@_rotate_corner:Nnnn #1 {##1} ##2 }
- \prop_map_inline:Nn \l_@@_poles_prop
- { \@@_rotate_pole:Nnnnnn #1 {##1} ##2 }
-% \end{macrocode}
-% The bounding box of the coffin needs to be rotated, and to do this
-% the corners have to be found first. They are then rotated in the same
-% way as the corners of the coffin material itself.
-% \begin{macrocode}
- \@@_set_bounding:N #1
- \prop_map_inline:Nn \l_@@_bounding_prop
- { \@@_rotate_bounding:nnn {##1} ##2 }
-% \end{macrocode}
-% At this stage, there needs to be a calculation to find where the
-% corners of the content and the box itself will end up.
-% \begin{macrocode}
- \@@_find_corner_maxima:N #1
- \@@_find_bounding_shift:
- #3 #1 {#2}
-% \end{macrocode}
-% The correction of the box position itself takes place here. The idea
-% is that the bounding box for a coffin is tight up to the content, and
-% has the reference point at the bottom-left. The $x$-direction is
-% handled by moving the content by the difference in the positions of
-% the bounding box and the content left edge. The $y$-direction is
-% dealt with by moving the box down by any depth it has acquired. The
-% internal box is used here to allow for the next step.
-% \begin{macrocode}
- \hbox_set:Nn \l_@@_internal_box
- {
- \__kernel_kern:n
- { \l_@@_bounding_shift_dim - \l_@@_left_corner_dim }
- \box_move_down:nn { \l_@@_bottom_corner_dim }
- { \box_use:N #1 }
- }
-% \end{macrocode}
-% If there have been any previous rotations then the size of the
-% bounding box will be bigger than the contents. This can be corrected
-% easily by setting the size of the box to the height and width of the
-% content. As this operation requires setting box dimensions and these
-% transcend grouping, the safe way to do this is to use the internal box
-% and to reset the result into the target box.
-% \begin{macrocode}
- \box_set_ht:Nn \l_@@_internal_box
- { \l_@@_top_corner_dim - \l_@@_bottom_corner_dim }
- \box_set_dp:Nn \l_@@_internal_box { 0pt }
- \box_set_wd:Nn \l_@@_internal_box
- { \l_@@_right_corner_dim - \l_@@_left_corner_dim }
- #5 #1 { \box_use_drop:N \l_@@_internal_box }
-% \end{macrocode}
-% The final task is to move the poles and corners such that they are
-% back in alignment with the box reference point.
-% \begin{macrocode}
- \prop_map_inline:Nn \l_@@_corners_prop
- { \@@_shift_corner:Nnnn #1 {##1} ##2 }
- \prop_map_inline:Nn \l_@@_poles_prop
- { \@@_shift_pole:Nnnnnn #1 {##1} ##2 }
-% \end{macrocode}
-% Update the coffin data.
-% \begin{macrocode}
- #4 { coffin ~ \@@_to_value:N #1 ~ corners }
- \l_@@_corners_prop
- #4 { coffin ~ \@@_to_value:N #1 ~ poles }
- \l_@@_poles_prop
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_set_bounding:N}
-% The bounding box corners for a coffin are easy enough to find: this
-% is the same code as for the corners of the material itself, but
-% using a dedicated property list.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_set_bounding:N #1
- {
- \prop_put:Nne \l_@@_bounding_prop { tl }
- { { 0pt } { \dim_eval:n { \box_ht:N #1 } } }
- \prop_put:Nne \l_@@_bounding_prop { tr }
- {
- { \dim_eval:n { \box_wd:N #1 } }
- { \dim_eval:n { \box_ht:N #1 } }
- }
- \dim_set:Nn \l_@@_internal_dim { -\box_dp:N #1 }
- \prop_put:Nne \l_@@_bounding_prop { bl }
- { { 0pt } { \dim_use:N \l_@@_internal_dim } }
- \prop_put:Nne \l_@@_bounding_prop { br }
- {
- { \dim_eval:n { \box_wd:N #1 } }
- { \dim_use:N \l_@@_internal_dim }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_rotate_bounding:nnn}
-% \begin{macro}{\@@_rotate_corner:Nnnn}
-% Rotating the position of the corner of the coffin is just a case
-% of treating this as a vector from the reference point. The same
-% treatment is used for the corners of the material itself and the
-% bounding box.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_rotate_bounding:nnn #1#2#3
- {
- \@@_rotate_vector:nnNN {#2} {#3} \l_@@_x_dim \l_@@_y_dim
- \prop_put:Nne \l_@@_bounding_prop {#1}
- { { \dim_use:N \l_@@_x_dim } { \dim_use:N \l_@@_y_dim } }
- }
-\cs_new_protected:Npn \@@_rotate_corner:Nnnn #1#2#3#4
- {
- \@@_rotate_vector:nnNN {#3} {#4} \l_@@_x_dim \l_@@_y_dim
- \prop_put:Nne \l_@@_corners_prop {#2}
- { { \dim_use:N \l_@@_x_dim } { \dim_use:N \l_@@_y_dim } }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_rotate_pole:Nnnnnn}
-% Rotating a single pole simply means shifting the co-ordinate of
-% the pole and its direction. The rotation here is about the bottom-left
-% corner of the coffin.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_rotate_pole:Nnnnnn #1#2#3#4#5#6
- {
- \@@_rotate_vector:nnNN {#3} {#4} \l_@@_x_dim \l_@@_y_dim
- \@@_rotate_vector:nnNN {#5} {#6}
- \l_@@_x_prime_dim \l_@@_y_prime_dim
- \prop_put:Nne \l_@@_poles_prop {#2}
- {
- { \dim_use:N \l_@@_x_dim } { \dim_use:N \l_@@_y_dim }
- { \dim_use:N \l_@@_x_prime_dim }
- { \dim_use:N \l_@@_y_prime_dim }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_rotate_vector:nnNN}
-% A rotation function, which needs only an input vector (as dimensions)
-% and an output space. The values \cs{l_@@_cos_fp} and
-% \cs{l_@@_sin_fp} should previously have been set up correctly.
-% Working this way means that the floating point work is kept to a
-% minimum: for any given rotation the sin and cosine values do no
-% change, after all.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_rotate_vector:nnNN #1#2#3#4
- {
- \dim_set:Nn #3
- {
- \fp_to_dim:n
- {
- \dim_to_fp:n {#1} * \l_@@_cos_fp
- - \dim_to_fp:n {#2} * \l_@@_sin_fp
- }
- }
- \dim_set:Nn #4
- {
- \fp_to_dim:n
- {
- \dim_to_fp:n {#1} * \l_@@_sin_fp
- + \dim_to_fp:n {#2} * \l_@@_cos_fp
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_find_corner_maxima:N}
-% \begin{macro}{\@@_find_corner_maxima_aux:nn}
-% The idea here is to find the extremities of the content of the
-% coffin. This is done by looking for the smallest values for the bottom
-% and left corners, and the largest values for the top and right
-% corners. The values start at the maximum dimensions so that the
-% case where all are positive or all are negative works out correctly.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_find_corner_maxima:N #1
- {
- \dim_set:Nn \l_@@_top_corner_dim { -\c_max_dim }
- \dim_set:Nn \l_@@_right_corner_dim { -\c_max_dim }
- \dim_set:Nn \l_@@_bottom_corner_dim { \c_max_dim }
- \dim_set:Nn \l_@@_left_corner_dim { \c_max_dim }
- \prop_map_inline:Nn \l_@@_corners_prop
- { \@@_find_corner_maxima_aux:nn ##2 }
- }
-\cs_new_protected:Npn \@@_find_corner_maxima_aux:nn #1#2
- {
- \dim_set:Nn \l_@@_left_corner_dim
- { \dim_min:nn { \l_@@_left_corner_dim } {#1} }
- \dim_set:Nn \l_@@_right_corner_dim
- { \dim_max:nn { \l_@@_right_corner_dim } {#1} }
- \dim_set:Nn \l_@@_bottom_corner_dim
- { \dim_min:nn { \l_@@_bottom_corner_dim } {#2} }
- \dim_set:Nn \l_@@_top_corner_dim
- { \dim_max:nn { \l_@@_top_corner_dim } {#2} }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_find_bounding_shift:}
-% \begin{macro}{\@@_find_bounding_shift_aux:nn}
-% The approach to finding the shift for the bounding box is similar to
-% that for the corners. However, there is only one value needed here and
-% a fixed input property list, so things are a bit clearer.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_find_bounding_shift:
- {
- \dim_set:Nn \l_@@_bounding_shift_dim { \c_max_dim }
- \prop_map_inline:Nn \l_@@_bounding_prop
- { \@@_find_bounding_shift_aux:nn ##2 }
- }
-\cs_new_protected:Npn \@@_find_bounding_shift_aux:nn #1#2
- {
- \dim_set:Nn \l_@@_bounding_shift_dim
- { \dim_min:nn { \l_@@_bounding_shift_dim } {#1} }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_shift_corner:Nnnn}
-% \begin{macro}{\@@_shift_pole:Nnnnnn}
-% Shifting the corners and poles of a coffin means subtracting the
-% appropriate values from the $x$- and $y$-components. For
-% the poles, this means that the direction vector is unchanged.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_shift_corner:Nnnn #1#2#3#4
- {
- \prop_put:Nne \l_@@_corners_prop {#2}
- {
- { \dim_eval:n { #3 - \l_@@_left_corner_dim } }
- { \dim_eval:n { #4 - \l_@@_bottom_corner_dim } }
- }
- }
-\cs_new_protected:Npn \@@_shift_pole:Nnnnnn #1#2#3#4#5#6
- {
- \prop_put:Nne \l_@@_poles_prop {#2}
- {
- { \dim_eval:n { #3 - \l_@@_left_corner_dim } }
- { \dim_eval:n { #4 - \l_@@_bottom_corner_dim } }
- {#5} {#6}
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{variable}{\l_@@_scale_x_fp}
-% \begin{variable}{\l_@@_scale_y_fp}
-% Storage for the scaling factors in $x$ and $y$, respectively.
-% \begin{macrocode}
-\fp_new:N \l_@@_scale_x_fp
-\fp_new:N \l_@@_scale_y_fp
-% \end{macrocode}
-% \end{variable}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_scaled_total_height_dim}
-% \begin{variable}{\l_@@_scaled_width_dim}
-% When scaling, the values given have to be turned into absolute values.
-% \begin{macrocode}
-\dim_new:N \l_@@_scaled_total_height_dim
-\dim_new:N \l_@@_scaled_width_dim
-% \end{macrocode}
-% \end{variable}
-% \end{variable}
-%
-% \begin{macro}
-% {
-% \coffin_resize:Nnn, \coffin_resize:cnn,
-% \coffin_gresize:Nnn, \coffin_gresize:cnn
-% }
-% \begin{macro}{\@@_resize:NnnNN}
-% Resizing a coffin begins by setting up the user-friendly names for
-% the dimensions of the coffin box. The new sizes are then turned into
-% scale factor. This is the same operation as takes place for the
-% underlying box, but that operation is grouped and so the same
-% calculation is done here.
-% \begin{macrocode}
-\cs_new_protected:Npn \coffin_resize:Nnn #1#2#3
- {
- \@@_resize:NnnNN #1 {#2} {#3}
- \box_resize_to_wd_and_ht_plus_dp:Nnn
- \prop_set_eq:cN
- }
-\cs_generate_variant:Nn \coffin_resize:Nnn { c }
-\cs_new_protected:Npn \coffin_gresize:Nnn #1#2#3
- {
- \@@_resize:NnnNN #1 {#2} {#3}
- \box_gresize_to_wd_and_ht_plus_dp:Nnn
- \prop_gset_eq:cN
- }
-\cs_generate_variant:Nn \coffin_gresize:Nnn { c }
-\cs_new_protected:Npn \@@_resize:NnnNN #1#2#3#4#5
- {
- \fp_set:Nn \l_@@_scale_x_fp
- { \dim_to_fp:n {#2} / \dim_to_fp:n { \coffin_wd:N #1 } }
- \fp_set:Nn \l_@@_scale_y_fp
- {
- \dim_to_fp:n {#3}
- / \dim_to_fp:n { \coffin_ht:N #1 + \coffin_dp:N #1 }
- }
- #4 #1 {#2} {#3}
- \@@_resize_common:NnnN #1 {#2} {#3} #5
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_resize_common:NnnN}
-% The poles and corners of the coffin are scaled to the appropriate
-% places before actually resizing the underlying box.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_resize_common:NnnN #1#2#3#4
- {
- \prop_set_eq:Nc \l_@@_corners_prop
- { coffin ~ \@@_to_value:N #1 ~ corners }
- \prop_set_eq:Nc \l_@@_poles_prop
- { coffin ~ \@@_to_value:N #1 ~ poles }
- \prop_map_inline:Nn \l_@@_corners_prop
- { \@@_scale_corner:Nnnn #1 {##1} ##2 }
- \prop_map_inline:Nn \l_@@_poles_prop
- { \@@_scale_pole:Nnnnnn #1 {##1} ##2 }
-% \end{macrocode}
-% Negative $x$-scaling values place the poles in the wrong
-% location: this is corrected here.
-% \begin{macrocode}
- \fp_compare:nNnT \l_@@_scale_x_fp < \c_zero_fp
- {
- \prop_map_inline:Nn \l_@@_corners_prop
- { \@@_x_shift_corner:Nnnn #1 {##1} ##2 }
- \prop_map_inline:Nn \l_@@_poles_prop
- { \@@_x_shift_pole:Nnnnnn #1 {##1} ##2 }
- }
- #4 { coffin ~ \@@_to_value:N #1 ~ corners }
- \l_@@_corners_prop
- #4 { coffin ~ \@@_to_value:N #1 ~ poles }
- \l_@@_poles_prop
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \coffin_scale:Nnn, \coffin_scale:cnn,
-% \coffin_gscale:Nnn, \coffin_gscale:cnn
-% }
-% \begin{macro}{\@@_scale:NnnNN}
-% For scaling, the opposite calculation is done to find the new
-% dimensions for the coffin. Only the total height is needed, as this
-% is the shift required for corners and poles. The scaling is done
-% the \TeX{} way as this works properly with floating point values
-% without needing to use the \texttt{fp} module.
-% \begin{macrocode}
-\cs_new_protected:Npn \coffin_scale:Nnn #1#2#3
- { \@@_scale:NnnNN #1 {#2} {#3} \box_scale:Nnn \prop_set_eq:cN }
-\cs_generate_variant:Nn \coffin_scale:Nnn { c }
-\cs_new_protected:Npn \coffin_gscale:Nnn #1#2#3
- { \@@_scale:NnnNN #1 {#2} {#3} \box_gscale:Nnn \prop_gset_eq:cN }
-\cs_generate_variant:Nn \coffin_gscale:Nnn { c }
-\cs_new_protected:Npn \@@_scale:NnnNN #1#2#3#4#5
- {
- \fp_set:Nn \l_@@_scale_x_fp {#2}
- \fp_set:Nn \l_@@_scale_y_fp {#3}
- #4 #1 { \l_@@_scale_x_fp } { \l_@@_scale_y_fp }
- \dim_set:Nn \l_@@_internal_dim
- { \coffin_ht:N #1 + \coffin_dp:N #1 }
- \dim_set:Nn \l_@@_scaled_total_height_dim
- { \fp_abs:n { \l_@@_scale_y_fp } \l_@@_internal_dim }
- \dim_set:Nn \l_@@_scaled_width_dim
- { -\fp_abs:n { \l_@@_scale_x_fp } \coffin_wd:N #1 }
- \@@_resize_common:NnnN #1
- { \l_@@_scaled_width_dim } { \l_@@_scaled_total_height_dim }
- #5
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_scale_vector:nnNN}
-% This functions scales a vector from the origin using the pre-set scale
-% factors in $x$ and $y$. This is a much less complex operation
-% than rotation, and as a result the code is a lot clearer.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_scale_vector:nnNN #1#2#3#4
- {
- \dim_set:Nn #3
- { \fp_to_dim:n { \dim_to_fp:n {#1} * \l_@@_scale_x_fp } }
- \dim_set:Nn #4
- { \fp_to_dim:n { \dim_to_fp:n {#2} * \l_@@_scale_y_fp } }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_scale_corner:Nnnn}
-% \begin{macro}{\@@_scale_pole:Nnnnnn}
-% Scaling both corners and poles is a simple calculation using the
-% preceding vector scaling.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_scale_corner:Nnnn #1#2#3#4
- {
- \@@_scale_vector:nnNN {#3} {#4} \l_@@_x_dim \l_@@_y_dim
- \prop_put:Nne \l_@@_corners_prop {#2}
- { { \dim_use:N \l_@@_x_dim } { \dim_use:N \l_@@_y_dim } }
- }
-\cs_new_protected:Npn \@@_scale_pole:Nnnnnn #1#2#3#4#5#6
- {
- \@@_scale_vector:nnNN {#3} {#4} \l_@@_x_dim \l_@@_y_dim
- \prop_put:Nne \l_@@_poles_prop {#2}
- {
- { \dim_use:N \l_@@_x_dim } { \dim_use:N \l_@@_y_dim }
- {#5} {#6}
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_x_shift_corner:Nnnn}
-% \begin{macro}{\@@_x_shift_pole:Nnnnnn}
-% These functions correct for the $x$ displacement that takes
-% place with a negative horizontal scaling.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_x_shift_corner:Nnnn #1#2#3#4
- {
- \prop_put:Nne \l_@@_corners_prop {#2}
- {
- { \dim_eval:n { #3 + \box_wd:N #1 } } {#4}
- }
- }
-\cs_new_protected:Npn \@@_x_shift_pole:Nnnnnn #1#2#3#4#5#6
- {
- \prop_put:Nne \l_@@_poles_prop {#2}
- {
- { \dim_eval:n { #3 + \box_wd:N #1 } } {#4}
- {#5} {#6}
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Aligning and typesetting of coffins}
-%
-% \begin{macro}
-% {
-% \coffin_join:NnnNnnnn, \coffin_join:cnnNnnnn,
-% \coffin_join:Nnncnnnn, \coffin_join:cnncnnnn,
-% \coffin_gjoin:NnnNnnnn, \coffin_gjoin:cnnNnnnn,
-% \coffin_gjoin:Nnncnnnn, \coffin_gjoin:cnncnnnn
-% }
-% \begin{macro}{\@@_join:NnnNnnnnN}
-% This command joins two coffins, using a horizontal and vertical pole
-% from each coffin and making an offset between the two. The result
-% is stored as the as a third coffin, which has all of its handles
-% reset to standard values. First, the more basic alignment function is
-% used to get things started.
-% \begin{macrocode}
-\cs_new_protected:Npn \coffin_join:NnnNnnnn #1#2#3#4#5#6#7#8
- {
- \@@_join:NnnNnnnnN #1 {#2} {#3} #4 {#5} {#6} {#7} {#8}
- \coffin_set_eq:NN
- }
-\cs_generate_variant:Nn \coffin_join:NnnNnnnn { c , Nnnc , cnnc }
-\cs_new_protected:Npn \coffin_gjoin:NnnNnnnn #1#2#3#4#5#6#7#8
- {
- \@@_join:NnnNnnnnN #1 {#2} {#3} #4 {#5} {#6} {#7} {#8}
- \coffin_gset_eq:NN
- }
-\cs_generate_variant:Nn \coffin_gjoin:NnnNnnnn { c , Nnnc , cnnc }
-\cs_new_protected:Npn \@@_join:NnnNnnnnN #1#2#3#4#5#6#7#8#9
- {
- \@@_align:NnnNnnnnN
- #1 {#2} {#3} #4 {#5} {#6} {#7} {#8} \l_@@_aligned_coffin
-% \end{macrocode}
-% Correct the placement of the reference point. If the $x$-offset
-% is negative then the reference point of the second box is to the left
-% of that of the first, which is corrected using a kern. On the right
-% side the first box might stick out, which would show up if it is wider
-% than the sum of the $x$-offset and the width of the second box.
-% So a second kern may be needed.
-% \begin{macrocode}
- \hbox_set:Nn \l_@@_aligned_coffin
- {
- \dim_compare:nNnT { \l_@@_offset_x_dim } < \c_zero_dim
- { \__kernel_kern:n { -\l_@@_offset_x_dim } }
- \hbox_unpack:N \l_@@_aligned_coffin
- \dim_set:Nn \l_@@_internal_dim
- { \l_@@_offset_x_dim - \box_wd:N #1 + \box_wd:N #4 }
- \dim_compare:nNnT \l_@@_internal_dim < \c_zero_dim
- { \__kernel_kern:n { -\l_@@_internal_dim } }
- }
-% \end{macrocode}
-% The coffin structure is reset, and the corners are cleared: only
-% those from the two parent coffins are needed.
-% \begin{macrocode}
- \@@_reset_structure:N \l_@@_aligned_coffin
- \prop_clear:c
- {
- coffin ~ \@@_to_value:N \l_@@_aligned_coffin
- \c_space_tl corners
- }
- \@@_update_poles:N \l_@@_aligned_coffin
-% \end{macrocode}
-% The structures of the parent coffins are now transferred to the new
-% coffin, which requires that the appropriate offsets are applied. That
-% then depends on whether any shift was needed.
-% \begin{macrocode}
- \dim_compare:nNnTF \l_@@_offset_x_dim < \c_zero_dim
- {
- \@@_offset_poles:Nnn #1 { -\l_@@_offset_x_dim } { 0pt }
- \@@_offset_poles:Nnn #4 { 0pt } { \l_@@_offset_y_dim }
- \@@_offset_corners:Nnn #1 { -\l_@@_offset_x_dim } { 0pt }
- \@@_offset_corners:Nnn #4 { 0pt } { \l_@@_offset_y_dim }
- }
- {
- \@@_offset_poles:Nnn #1 { 0pt } { 0pt }
- \@@_offset_poles:Nnn #4
- { \l_@@_offset_x_dim } { \l_@@_offset_y_dim }
- \@@_offset_corners:Nnn #1 { 0pt } { 0pt }
- \@@_offset_corners:Nnn #4
- { \l_@@_offset_x_dim } { \l_@@_offset_y_dim }
- }
- \@@_update_vertical_poles:NNN #1 #4 \l_@@_aligned_coffin
- #9 #1 \l_@@_aligned_coffin
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \coffin_attach:NnnNnnnn, \coffin_attach:cnnNnnnn,
-% \coffin_attach:Nnncnnnn, \coffin_attach:cnncnnnn,
-% \coffin_gattach:NnnNnnnn, \coffin_gattach:cnnNnnnn,
-% \coffin_gattach:Nnncnnnn, \coffin_gattach:cnncnnnn
-% }
-% \begin{macro}{\@@_attach:NnnNnnnnN}
-% \begin{macro}{\@@_attach_mark:NnnNnnnn}
-% A more simple version of the above, as it simply uses the size of the
-% first coffin for the new one. This means that the work here is rather
-% simplified compared to the above code. The function used when marking
-% a position is hear also as it is similar but without the structure
-% updates.
-% \begin{macrocode}
-\cs_new_protected:Npn \coffin_attach:NnnNnnnn #1#2#3#4#5#6#7#8
- {
- \@@_attach:NnnNnnnnN #1 {#2} {#3} #4 {#5} {#6} {#7} {#8}
- \coffin_set_eq:NN
- }
-\cs_generate_variant:Nn \coffin_attach:NnnNnnnn { c , Nnnc , cnnc }
-\cs_new_protected:Npn \coffin_gattach:NnnNnnnn #1#2#3#4#5#6#7#8
- {
- \@@_attach:NnnNnnnnN #1 {#2} {#3} #4 {#5} {#6} {#7} {#8}
- \coffin_gset_eq:NN
- }
-\cs_generate_variant:Nn \coffin_gattach:NnnNnnnn { c , Nnnc , cnnc }
-\cs_new_protected:Npn \@@_attach:NnnNnnnnN #1#2#3#4#5#6#7#8#9
- {
- \@@_align:NnnNnnnnN
- #1 {#2} {#3} #4 {#5} {#6} {#7} {#8} \l_@@_aligned_coffin
- \box_set_ht:Nn \l_@@_aligned_coffin { \box_ht:N #1 }
- \box_set_dp:Nn \l_@@_aligned_coffin { \box_dp:N #1 }
- \box_set_wd:Nn \l_@@_aligned_coffin { \box_wd:N #1 }
- \@@_reset_structure:N \l_@@_aligned_coffin
- \prop_set_eq:cc
- {
- coffin ~ \@@_to_value:N \l_@@_aligned_coffin
- \c_space_tl corners
- }
- { coffin ~ \@@_to_value:N #1 ~ corners }
- \@@_update_poles:N \l_@@_aligned_coffin
- \@@_offset_poles:Nnn #1 { 0pt } { 0pt }
- \@@_offset_poles:Nnn #4
- { \l_@@_offset_x_dim } { \l_@@_offset_y_dim }
- \@@_update_vertical_poles:NNN #1 #4 \l_@@_aligned_coffin
- #9 #1 \l_@@_aligned_coffin
- }
-\cs_new_protected:Npn \@@_attach_mark:NnnNnnnn #1#2#3#4#5#6#7#8
- {
- \@@_align:NnnNnnnnN
- #1 {#2} {#3} #4 {#5} {#6} {#7} {#8} \l_@@_aligned_coffin
- \box_set_ht:Nn \l_@@_aligned_coffin { \box_ht:N #1 }
- \box_set_dp:Nn \l_@@_aligned_coffin { \box_dp:N #1 }
- \box_set_wd:Nn \l_@@_aligned_coffin { \box_wd:N #1 }
- \box_set_eq:NN #1 \l_@@_aligned_coffin
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_align:NnnNnnnnN}
-% The internal function aligns the two coffins into a third one, but
-% performs no corrections on the resulting coffin poles. The process
-% begins by finding the points of intersection for the poles for each
-% of the input coffins. Those for the first coffin are worked out after
-% those for the second coffin, as this allows the `primed'
-% storage area to be used for the second coffin. The `real' box
-% offsets are then calculated, before using these to re-box the
-% input coffins. The default poles are then set up, but the final result
-% depends on how the bounding box is being handled.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_align:NnnNnnnnN #1#2#3#4#5#6#7#8#9
- {
- \@@_calculate_intersection:Nnn #4 {#5} {#6}
- \dim_set:Nn \l_@@_x_prime_dim { \l_@@_x_dim }
- \dim_set:Nn \l_@@_y_prime_dim { \l_@@_y_dim }
- \@@_calculate_intersection:Nnn #1 {#2} {#3}
- \dim_set:Nn \l_@@_offset_x_dim
- { \l_@@_x_dim - \l_@@_x_prime_dim + #7 }
- \dim_set:Nn \l_@@_offset_y_dim
- { \l_@@_y_dim - \l_@@_y_prime_dim + #8 }
- \hbox_set:Nn \l_@@_aligned_internal_coffin
- {
- \box_use:N #1
- \__kernel_kern:n { -\box_wd:N #1 }
- \__kernel_kern:n { \l_@@_offset_x_dim }
- \box_move_up:nn { \l_@@_offset_y_dim } { \box_use:N #4 }
- }
- \coffin_set_eq:NN #9 \l_@@_aligned_internal_coffin
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_offset_poles:Nnn}
-% \begin{macro}{\@@_offset_pole:Nnnnnnn}
-% Transferring structures from one coffin to another requires that the
-% positions are updated by the offset between the two coffins. This is
-% done by mapping over the property list of the source coffins, moving
-% as appropriate and saving to the new coffin data structures. The
-% test for a |-| means that the structures from the parent coffins
-% are uniquely labelled and do not depend on the order of alignment.
-% The pay off for this is that |-| should not be used in coffin pole
-% or handle names, and that multiple alignments do not result in a
-% whole set of values.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_offset_poles:Nnn #1#2#3
- {
- \prop_map_inline:cn { coffin ~ \@@_to_value:N #1 ~ poles }
- { \@@_offset_pole:Nnnnnnn #1 {##1} ##2 {#2} {#3} }
- }
-\cs_new_protected:Npn \@@_offset_pole:Nnnnnnn #1#2#3#4#5#6#7#8
- {
- \dim_set:Nn \l_@@_x_dim { #3 + #7 }
- \dim_set:Nn \l_@@_y_dim { #4 + #8 }
- \tl_if_in:nnTF {#2} { - }
- { \tl_set:Nn \l_@@_internal_tl { {#2} } }
- { \tl_set:Nn \l_@@_internal_tl { { #1 - #2 } } }
- \exp_last_unbraced:NNo \@@_set_pole:Nnn \l_@@_aligned_coffin
- { \l_@@_internal_tl }
- {
- { \dim_use:N \l_@@_x_dim } { \dim_use:N \l_@@_y_dim }
- {#5} {#6}
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_offset_corners:Nnn}
-% \begin{macro}{\@@_offset_corner:Nnnnn}
-% Saving the offset corners of a coffin is very similar, except that
-% there is no need to worry about naming: every corner can be saved
-% here as order is unimportant.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_offset_corners:Nnn #1#2#3
- {
- \prop_map_inline:cn { coffin ~ \@@_to_value:N #1 ~ corners }
- { \@@_offset_corner:Nnnnn #1 {##1} ##2 {#2} {#3} }
- }
-\cs_new_protected:Npn \@@_offset_corner:Nnnnn #1#2#3#4#5#6
- {
- \prop_put:cne
- {
- coffin ~ \@@_to_value:N \l_@@_aligned_coffin
- \c_space_tl corners
- }
- { #1 - #2 }
- {
- { \dim_eval:n { #3 + #5 } }
- { \dim_eval:n { #4 + #6 } }
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_update_vertical_poles:NNN}
-% \begin{macro}{\@@_update_T:nnnnnnnnN}
-% \begin{macro}{\@@_update_B:nnnnnnnnN}
-% The \texttt{T} and \texttt{B} poles need to be recalculated
-% after alignment. These functions find the larger absolute value for
-% the poles, but this is of course only logical when the poles are
-% horizontal.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_update_vertical_poles:NNN #1#2#3
- {
- \@@_get_pole:NnN #3 { #1 -T } \l_@@_pole_a_tl
- \@@_get_pole:NnN #3 { #2 -T } \l_@@_pole_b_tl
- \exp_last_two_unbraced:Noo \@@_update_T:nnnnnnnnN
- \l_@@_pole_a_tl \l_@@_pole_b_tl #3
- \@@_get_pole:NnN #3 { #1 -B } \l_@@_pole_a_tl
- \@@_get_pole:NnN #3 { #2 -B } \l_@@_pole_b_tl
- \exp_last_two_unbraced:Noo \@@_update_B:nnnnnnnnN
- \l_@@_pole_a_tl \l_@@_pole_b_tl #3
- }
-\cs_new_protected:Npn \@@_update_T:nnnnnnnnN #1#2#3#4#5#6#7#8#9
- {
- \dim_compare:nNnTF {#2} < {#6}
- {
- \@@_set_pole:Nnn #9 { T }
- { { 0pt } {#6} { 1000pt } { 0pt } }
- }
- {
- \@@_set_pole:Nnn #9 { T }
- { { 0pt } {#2} { 1000pt } { 0pt } }
- }
- }
-\cs_new_protected:Npn \@@_update_B:nnnnnnnnN #1#2#3#4#5#6#7#8#9
- {
- \dim_compare:nNnTF {#2} < {#6}
- {
- \@@_set_pole:Nnn #9 { B }
- { { 0pt } {#2} { 1000pt } { 0pt } }
- }
- {
- \@@_set_pole:Nnn #9 { B }
- { { 0pt } {#6} { 1000pt } { 0pt } }
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{variable}{\c_@@_empty_coffin}
-% An empty-but-horizontal coffin.
-% \begin{macrocode}
-\coffin_new:N \c_@@_empty_coffin
-\tex_setbox:D \c_@@_empty_coffin = \tex_hbox:D { }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\coffin_typeset:Nnnnn, \coffin_typeset:cnnnn}
-% Typesetting a coffin means aligning it with the current position,
-% which is done using a coffin with no content at all. As well as aligning to
-% the empty coffin, there is also a need to leave vertical mode, if necessary.
-% \begin{macrocode}
-\cs_new_protected:Npn \coffin_typeset:Nnnnn #1#2#3#4#5
- {
- \mode_leave_vertical:
- \@@_align:NnnNnnnnN \c_@@_empty_coffin { H } { l }
- #1 {#2} {#3} {#4} {#5} \l_@@_aligned_coffin
- \box_use_drop:N \l_@@_aligned_coffin
- }
-\cs_generate_variant:Nn \coffin_typeset:Nnnnn { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Coffin diagnostics}
-%
-% \begin{variable}{\l_@@_display_coffin}
-% \begin{variable}{\l_@@_display_coord_coffin}
-% \begin{variable}{\l_@@_display_pole_coffin}
-% Used for printing coffins with data structures attached.
-% \begin{macrocode}
-\coffin_new:N \l_@@_display_coffin
-\coffin_new:N \l_@@_display_coord_coffin
-\coffin_new:N \l_@@_display_pole_coffin
-% \end{macrocode}
-% \end{variable}
-% \end{variable}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_display_handles_prop}
-% This property list is used to print coffin handles at suitable
-% positions. The offsets are expressed as multiples of the basic offset
-% value, which therefore acts as a scale-factor.
-% \begin{macrocode}
-\prop_new:N \l_@@_display_handles_prop
-\prop_put:Nnn \l_@@_display_handles_prop { tl }
- { { b } { r } { -1 } { 1 } }
-\prop_put:Nnn \l_@@_display_handles_prop { thc }
- { { b } { hc } { 0 } { 1 } }
-\prop_put:Nnn \l_@@_display_handles_prop { tr }
- { { b } { l } { 1 } { 1 } }
-\prop_put:Nnn \l_@@_display_handles_prop { vcl }
- { { vc } { r } { -1 } { 0 } }
-\prop_put:Nnn \l_@@_display_handles_prop { vchc }
- { { vc } { hc } { 0 } { 0 } }
-\prop_put:Nnn \l_@@_display_handles_prop { vcr }
- { { vc } { l } { 1 } { 0 } }
-\prop_put:Nnn \l_@@_display_handles_prop { bl }
- { { t } { r } { -1 } { -1 } }
-\prop_put:Nnn \l_@@_display_handles_prop { bhc }
- { { t } { hc } { 0 } { -1 } }
-\prop_put:Nnn \l_@@_display_handles_prop { br }
- { { t } { l } { 1 } { -1 } }
-\prop_put:Nnn \l_@@_display_handles_prop { Tl }
- { { t } { r } { -1 } { -1 } }
-\prop_put:Nnn \l_@@_display_handles_prop { Thc }
- { { t } { hc } { 0 } { -1 } }
-\prop_put:Nnn \l_@@_display_handles_prop { Tr }
- { { t } { l } { 1 } { -1 } }
-\prop_put:Nnn \l_@@_display_handles_prop { Hl }
- { { vc } { r } { -1 } { 1 } }
-\prop_put:Nnn \l_@@_display_handles_prop { Hhc }
- { { vc } { hc } { 0 } { 1 } }
-\prop_put:Nnn \l_@@_display_handles_prop { Hr }
- { { vc } { l } { 1 } { 1 } }
-\prop_put:Nnn \l_@@_display_handles_prop { Bl }
- { { b } { r } { -1 } { -1 } }
-\prop_put:Nnn \l_@@_display_handles_prop { Bhc }
- { { b } { hc } { 0 } { -1 } }
-\prop_put:Nnn \l_@@_display_handles_prop { Br }
- { { b } { l } { 1 } { -1 } }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_display_offset_dim}
-% The standard offset for the label from the handle position when
-% displaying handles.
-% \begin{macrocode}
-\dim_new:N \l_@@_display_offset_dim
-\dim_set:Nn \l_@@_display_offset_dim { 2pt }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_display_x_dim}
-% \begin{variable}{\l_@@_display_y_dim}
-% As the intersections of poles have to be calculated to find which
-% ones to print, there is a need to avoid repetition. This is done
-% by saving the intersection into two dedicated values.
-% \begin{macrocode}
-\dim_new:N \l_@@_display_x_dim
-\dim_new:N \l_@@_display_y_dim
-% \end{macrocode}
-% \end{variable}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_display_poles_prop}
-% A property list for printing poles: various things need to be deleted
-% from this to get a \enquote{nice} output.
-% \begin{macrocode}
-\prop_new:N \l_@@_display_poles_prop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_display_font_tl}
-% Stores the settings used to print coffin data: this keeps things
-% flexible.
-% \begin{macrocode}
-\tl_new:N \l_@@_display_font_tl
-\bool_lazy_and:nnT
- { \cs_if_exist_p:N \fmtname }
- { \str_if_eq_p:Vn \fmtname { LaTeX2e } }
- {
- \tl_set:Nn \l_@@_display_font_tl
- { \sffamily \tiny }
- }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\@@_rule:nn}
-% Abstract out creation of rules here until there is a higher-level interface.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_rule:nn #1#2
- {
- \mode_leave_vertical:
- \hbox:n { \tex_vrule:D width #1 height #2 \scan_stop: }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\coffin_mark_handle:Nnnn, \coffin_mark_handle:cnnn}
-% \begin{macro}{\@@_mark_handle_aux:nnnnNnn}
-% Marking a single handle is relatively easy. The standard attachment
-% function is used, meaning that there are two calculations for the
-% location. However, this is likely to be okay given the load expected.
-% Contrast with the more optimised version for showing all handles which
-% comes next.
-% \begin{macrocode}
-\cs_new_protected:Npn \coffin_mark_handle:Nnnn #1#2#3#4
- {
- \hcoffin_set:Nn \l_@@_display_pole_coffin
- {
- \color_select:n {#4}
- \@@_rule:nn { 1pt } { 1pt }
- }
- \@@_attach_mark:NnnNnnnn #1 {#2} {#3}
- \l_@@_display_pole_coffin { hc } { vc } { 0pt } { 0pt }
- \hcoffin_set:Nn \l_@@_display_coord_coffin
- {
- \color_select:n {#4}
- \l_@@_display_font_tl
- ( \tl_to_str:n { #2 , #3 } )
- }
- \prop_get:NnN \l_@@_display_handles_prop
- { #2 #3 } \l_@@_internal_tl
- \quark_if_no_value:NTF \l_@@_internal_tl
- {
- \prop_get:NnN \l_@@_display_handles_prop
- { #3 #2 } \l_@@_internal_tl
- \quark_if_no_value:NTF \l_@@_internal_tl
- {
- \@@_attach_mark:NnnNnnnn #1 {#2} {#3}
- \l_@@_display_coord_coffin { l } { vc }
- { 1pt } { 0pt }
- }
- {
- \exp_last_unbraced:No \@@_mark_handle_aux:nnnnNnn
- \l_@@_internal_tl #1 {#2} {#3}
- }
- }
- {
- \exp_last_unbraced:No \@@_mark_handle_aux:nnnnNnn
- \l_@@_internal_tl #1 {#2} {#3}
- }
- }
-\cs_new_protected:Npn \@@_mark_handle_aux:nnnnNnn #1#2#3#4#5#6#7
- {
- \@@_attach_mark:NnnNnnnn #5 {#6} {#7}
- \l_@@_display_coord_coffin {#1} {#2}
- { #3 \l_@@_display_offset_dim }
- { #4 \l_@@_display_offset_dim }
- }
-\cs_generate_variant:Nn \coffin_mark_handle:Nnnn { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\coffin_display_handles:Nn, \coffin_display_handles:cn}
-% \begin{macro}{\@@_display_handles_aux:nnnnnn}
-% \begin{macro}{\@@_display_handles_aux:nnnn}
-% \begin{macro}{\@@_display_attach:Nnnnn}
-% Printing the poles starts by removing any duplicates, for which the
-% \texttt{H} poles is used as the definitive version for the baseline
-% and bottom. Two loops are then used to find the combinations of
-% handles for all of these poles. This is done such that poles are
-% removed during the loops to avoid duplication.
-% \begin{macrocode}
-\cs_new_protected:Npn \coffin_display_handles:Nn #1#2
- {
- \hcoffin_set:Nn \l_@@_display_pole_coffin
- {
- \color_select:n {#2}
- \@@_rule:nn { 1pt } { 1pt }
- }
- \prop_set_eq:Nc \l_@@_display_poles_prop
- { coffin ~ \@@_to_value:N #1 ~ poles }
- \@@_get_pole:NnN #1 { H } \l_@@_pole_a_tl
- \@@_get_pole:NnN #1 { T } \l_@@_pole_b_tl
- \tl_if_eq:NNT \l_@@_pole_a_tl \l_@@_pole_b_tl
- { \prop_remove:Nn \l_@@_display_poles_prop { T } }
- \@@_get_pole:NnN #1 { B } \l_@@_pole_b_tl
- \tl_if_eq:NNT \l_@@_pole_a_tl \l_@@_pole_b_tl
- { \prop_remove:Nn \l_@@_display_poles_prop { B } }
- \coffin_set_eq:NN \l_@@_display_coffin #1
- \prop_map_inline:Nn \l_@@_display_poles_prop
- {
- \prop_remove:Nn \l_@@_display_poles_prop {##1}
- \@@_display_handles_aux:nnnnnn {##1} ##2 {#2}
- }
- \box_use_drop:N \l_@@_display_coffin
- }
-% \end{macrocode}
-% For each pole there is a check for an intersection, which here does
-% not give an error if none is found. The successful values are stored
-% and used to align the pole coffin with the main coffin for output.
-% The positions are recovered from the preset list if available.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_display_handles_aux:nnnnnn #1#2#3#4#5#6
- {
- \prop_map_inline:Nn \l_@@_display_poles_prop
- {
- \bool_set_false:N \l_@@_error_bool
- \@@_calculate_intersection:nnnnnnnn {#2} {#3} {#4} {#5} ##2
- \bool_if:NF \l_@@_error_bool
- {
- \dim_set:Nn \l_@@_display_x_dim { \l_@@_x_dim }
- \dim_set:Nn \l_@@_display_y_dim { \l_@@_y_dim }
- \@@_display_attach:Nnnnn
- \l_@@_display_pole_coffin { hc } { vc }
- { 0pt } { 0pt }
- \hcoffin_set:Nn \l_@@_display_coord_coffin
- {
- \color_select:n {#6}
- \l_@@_display_font_tl
- ( \tl_to_str:n { #1 , ##1 } )
- }
- \prop_get:NnN \l_@@_display_handles_prop
- { #1 ##1 } \l_@@_internal_tl
- \quark_if_no_value:NTF \l_@@_internal_tl
- {
- \prop_get:NnN \l_@@_display_handles_prop
- { ##1 #1 } \l_@@_internal_tl
- \quark_if_no_value:NTF \l_@@_internal_tl
- {
- \@@_display_attach:Nnnnn
- \l_@@_display_coord_coffin { l } { vc }
- { 1pt } { 0pt }
- }
- {
- \exp_last_unbraced:No
- \@@_display_handles_aux:nnnn
- \l_@@_internal_tl
- }
- }
- {
- \exp_last_unbraced:No \@@_display_handles_aux:nnnn
- \l_@@_internal_tl
- }
- }
- }
- }
-\cs_new_protected:Npn \@@_display_handles_aux:nnnn #1#2#3#4
- {
- \@@_display_attach:Nnnnn
- \l_@@_display_coord_coffin {#1} {#2}
- { #3 \l_@@_display_offset_dim }
- { #4 \l_@@_display_offset_dim }
- }
-\cs_generate_variant:Nn \coffin_display_handles:Nn { c }
-% \end{macrocode}
-% This is a dedicated version of \cs{coffin_attach:NnnNnnnn} with
-% a hard-wired first coffin. As the intersection is already known
-% and stored for the display coffin the code simply uses it directly,
-% with no calculation.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_display_attach:Nnnnn #1#2#3#4#5
- {
- \@@_calculate_intersection:Nnn #1 {#2} {#3}
- \dim_set:Nn \l_@@_x_prime_dim { \l_@@_x_dim }
- \dim_set:Nn \l_@@_y_prime_dim { \l_@@_y_dim }
- \dim_set:Nn \l_@@_offset_x_dim
- { \l_@@_display_x_dim - \l_@@_x_prime_dim + #4 }
- \dim_set:Nn \l_@@_offset_y_dim
- { \l_@@_display_y_dim - \l_@@_y_prime_dim + #5 }
- \hbox_set:Nn \l_@@_aligned_coffin
- {
- \box_use:N \l_@@_display_coffin
- \__kernel_kern:n { -\box_wd:N \l_@@_display_coffin }
- \__kernel_kern:n { \l_@@_offset_x_dim }
- \box_move_up:nn { \l_@@_offset_y_dim } { \box_use:N #1 }
- }
- \box_set_ht:Nn \l_@@_aligned_coffin
- { \box_ht:N \l_@@_display_coffin }
- \box_set_dp:Nn \l_@@_aligned_coffin
- { \box_dp:N \l_@@_display_coffin }
- \box_set_wd:Nn \l_@@_aligned_coffin
- { \box_wd:N \l_@@_display_coffin }
- \box_set_eq:NN \l_@@_display_coffin \l_@@_aligned_coffin
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \coffin_show_structure:N, \coffin_show_structure:c,
-% \coffin_log_structure:N, \coffin_log_structure:c,
-% \@@_show_structure:NN
-% }
-% For showing the various internal structures attached to a coffin in
-% a way that keeps things relatively readable. If there is no apparent
-% structure then the code complains.
-% \begin{macrocode}
-\cs_new_protected:Npn \coffin_show_structure:N
- { \@@_show_structure:NN \msg_show:nneeee }
-\cs_generate_variant:Nn \coffin_show_structure:N { c }
-\cs_new_protected:Npn \coffin_log_structure:N
- { \@@_show_structure:NN \msg_log:nneeee }
-\cs_generate_variant:Nn \coffin_log_structure:N { c }
-\cs_new_protected:Npn \@@_show_structure:NN #1#2
- {
- \@@_if_exist:NT #2
- {
- #1 { coffin } { show }
- { \token_to_str:N #2 }
- {
- \iow_newline: >~ ht ~=~ \dim_eval:n { \coffin_ht:N #2 }
- \iow_newline: >~ dp ~=~ \dim_eval:n { \coffin_dp:N #2 }
- \iow_newline: >~ wd ~=~ \dim_eval:n { \coffin_wd:N #2 }
- }
- {
- \prop_map_function:cN
- { coffin ~ \@@_to_value:N #2 ~ poles }
- \msg_show_item_unbraced:nn
- }
- { }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \coffin_show:N, \coffin_show:c, \coffin_log:N, \coffin_log:c,
-% \coffin_show:Nnn, \coffin_show:cnn, \coffin_log:Nnn, \coffin_log:cnn,
-% \@@_show:NNNnn
-% }
-% Essentially a combination of \cs{coffin_show_structure:N} and
-% \cs{box_show:Nnn}, but we need to avoid having two prompts, so we
-% use \cs{msg_term:nneeee} instead of
-% \cs{msg_show:nneeee} in the |show| case.
-% \begin{macrocode}
-\cs_new_protected:Npn \coffin_show:N #1
- { \coffin_show:Nnn #1 \c_max_int \c_max_int }
-\cs_generate_variant:Nn \coffin_show:N { c }
-\cs_new_protected:Npn \coffin_log:N #1
- { \coffin_log:Nnn #1 \c_max_int \c_max_int }
-\cs_generate_variant:Nn \coffin_log:N { c }
-\cs_new_protected:Npn \coffin_show:Nnn
- { \@@_show:NNNnn \msg_term:nneeee \box_show:Nnn }
-\cs_generate_variant:Nn \coffin_show:Nnn { c }
-\cs_new_protected:Npn \coffin_log:Nnn
- { \@@_show:NNNnn \msg_log:nneeee \box_show:Nnn }
-\cs_generate_variant:Nn \coffin_log:Nnn { c }
-\cs_new_protected:Npn \@@_show:NNNnn #1#2#3#4#5
- {
- \@@_if_exist:NT #3
- {
- \@@_show_structure:NN #1 #3
- #2 #3 {#4} {#5}
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Messages}
-%
-% \begin{macrocode}
-\msg_new:nnnn { coffin } { no-pole-intersection }
- { No~intersection~between~coffin~poles. }
- {
- LaTeX~was~asked~to~find~the~intersection~between~two~poles,~
- but~they~do~not~have~a~unique~meeting~point:~
- the~value~(0pt,~0pt)~will~be~used.
- }
-\msg_new:nnnn { coffin } { unknown }
- { Unknown~coffin~'#1'. }
- { The~coffin~'#1'~was~never~defined. }
-\msg_new:nnnn { coffin } { unknown-pole }
- { Pole~'#1'~unknown~for~coffin~'#2'. }
- {
- LaTeX~was~asked~to~find~a~typesetting~pole~for~a~coffin,~
- but~either~the~coffin~does~not~exist~or~the~pole~name~is~wrong.
- }
-\msg_new:nnn { coffin } { show }
- {
- Size~of~coffin~#1 : #2 \\
- Poles~of~coffin~#1 : #3 .
- }
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3color.dtx b/macros/latex/contrib/l3kernel/l3color.dtx
deleted file mode 100644
index 514ff326a4..0000000000
--- a/macros/latex/contrib/l3kernel/l3color.dtx
+++ /dev/null
@@ -1,3246 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3color.dtx
-%
-% Copyright (C) 2017-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% http://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3color} module\\ Color support^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \section{Color in boxes}
-%
-% Controlling the color of text in boxes requires a small number of control
-% functions, so that the boxed material uses the color at the point where
-% it is set, rather than where it is used.
-%
-% \begin{function}[added = 2011-09-03]{\color_group_begin:, \color_group_end:}
-% \begin{syntax}
-% \cs{color_group_begin:}
-% \ldots
-% \cs{color_group_end:}
-% \end{syntax}
-% Creates a color group: one used to \enquote{trap} color settings.
-% This grouping is built in to for example \cs{hbox_set:Nn}.
-% \end{function}
-%
-% \begin{function}[added = 2011-09-03]{\color_ensure_current:}
-% \begin{syntax}
-% \cs{color_ensure_current:}
-% \end{syntax}
-% Ensures that material inside a box uses the foreground color
-% at the point where the box is set, rather than that in force when the
-% box is used. This function should usually be used within a
-% \cs{color_group_begin:} \ldots \cs{color_group_end:} group.
-% \end{function}
-%
-% \section{Color models}
-%
-% A color \emph{model} is a way to represent sets of colors. Different models
-% are particularly suitable for different output methods, \emph{e.g.}~screen
-% or print. Parameter-based models can describe a very large number of unique
-% colors, and have a varying number of \emph{axes} which define a color
-% space. In contrast, various proprietary models are available which define
-% \emph{spot} colors (more formally separations).
-%
-% Core models are used to pass color information to output; these are
-% \enquote{native} to \pkg{l3color}. Core models use real numbers in the range
-% $[0,1]$ to represent values. The core models supported here are
-% \begin{itemize}
-% \item \texttt{gray} Grayscale color, with a single axis running from
-% $0$ (fully black) to $1$ (fully white)
-% \item \texttt{rgb} Red-green-blue color, with three axes, one for each of
-% the components
-% \item \texttt{cmyk} Cyan-magenta-yellow-black color, with four axes, one for
-% each of the components
-% \end{itemize}
-%
-% There are also interface models: these are convenient for users but have
-% to be manipulated before storing/passing to the backend. Interface models
-% are primarily integer-based: see below for more detail. The supported
-% interface models are
-% \begin{itemize}
-% \item \texttt{Gray} Grayscale color, with a single axis running from
-% $0$ (fully black) to $15$ (fully white)
-% \item \texttt{hsb} Hue-saturation-brightness color, with three axes,all
-% real values in the range $[0,1]$ for hue saturation and brightness
-% \item \texttt{Hsb} Hue-saturation-brightness color, with three axes, integer
-% in the range $[0,360]$ for hue, real values in the range $[0,1]$ for
-% saturation and brightness
-% \item \texttt{HSB} Hue-saturation-brightness color, with three axes, integers
-% in the range $[0,240]$ for hue, saturation and brightness
-% \item \texttt{HTML} HTML format representation of RGB color given as a
-% single six-digit hexadecimal number
-% \item \texttt{RGB} Red-green-blue color, with three axes, one for each of
-% the components, values as integers from $0$ to $255$
-% \item \texttt{wave} Light wavelength, a real number in the range
-% $380$ to $780$ (nanometres)
-% \end{itemize}
-% All interface models are internally stored as |rgb|.
-%
-% Finally, there are a small number of models which are parsed to allow
-% data transfer from \pkg{xcolor} but which should not be used by end-users.
-% These are
-% \begin{itemize}
-% \item \texttt{cmy} Cyan-magenta-yellow color with three axes, one for
-% each of the components; converted to |cmyk|
-% \item \texttt{tHsb} \enquote{Tuned} hue-saturation-brightness color with three
-% axes, integer in the range $[0,360]$ for hue, real values in the range
-% $[0,1]$ for saturation and brightness; converted to |rgb| using the
-% standard tuning map defined by \pkg{xcolor}
-% \item \texttt{\&spot} Spot color tint with one value; treated as a gray
-% tint as spot color data is not available for extraction
-% \end{itemize}
-%
-% To allow parsing of data from \pkg{xcolor}, any leading model up the first
-% \texttt{:} will be discarded; the approach of selecting an internal form
-% for data is \emph{not} used in \pkg{l3color}.
-%
-% Additional models may be created to allow mixing of separation colors
-% with each other or with those from other models. See
-% Section~\ref{l3color:sec:new-models} for more detail of color support
-% for additional models.
-%
-% When color is selected by model, the \meta{values} given are specified as
-% a comma-separated list. The length of the list will therefore be determined
-% by the detail of the model involved.
-%
-% Color models (and interconversion) are complex, and more details are given
-% in the manual to the \LaTeXe{} \pkg{xcolor} package and in the
-% \emph{PostScript Language Reference Manual}, published by Addison--Wesley.
-%
-% \section{Color expressions}
-%
-% In addition to allowing specification of color by model and values,
-% \pkg{l3color} also supports color expressions. These are created
-% by combining one or more color names, with the amount of each specified
-% as a value in the range $0$--$100$. The value should be given between
-% |!| symbols in the expression. Thus for example
-% \begin{verbatim}
-% red!50!green
-% \end{verbatim}
-% is a mixture of $50\,\%$ red and $50\,\%$ green. A trailing value is
-% interpreted as implicitly followed by |!white|, and so
-% \begin{verbatim}
-% red!25
-% \end{verbatim}
-% specifies $25\,\%$ red mixed with $75\,\%$ white.
-%
-% Where the models for the mixed colors are different, the model of the first
-% color is used. Thus
-% \begin{verbatim}
-% red!50!cyan
-% \end{verbatim}
-% will result in a color specification using the |rgb| model, made up of
-% $50\,\%$ red and $50\,\%$ of cyan \emph{expressed in \texttt{rgb}}.
-% This may be important as color model interconversion is not exact.
-%
-% The one exception to the above is where the first model in an expression is
-% |gray|. In this case, the order of mixing is \enquote{swapped} internally, so
-% that for example
-% \begin{verbatim}
-% black!50!red
-% \end{verbatim}
-% has the same result as
-% \begin{verbatim}
-% red!50!black
-% \end{verbatim}
-% (the predefined colors |black| and |white| use the |gray| model).
-%
-% Where more than two colors are mixed in an expression, evaluation takes place
-% in a stepwise fashion. Thus in
-% \begin{verbatim}
-% cyan!50!magenta!10!yellow
-% \end{verbatim}
-% the sub-expression
-% \begin{verbatim}
-% cyan!50!magenta
-% \end{verbatim}
-% is first evaluated to give an intermediate color specification, before
-% the second step
-% \begin{verbatim}
-% <intermediate>!10!yellow
-% \end{verbatim}
-% where |<intermediate>| represents this transitory calculated value.
-%
-% Within a color expression, |.| may be used to represent the color active
-% for typesetting (the current color). This allows for example
-% \begin{verbatim}
-% .!50
-% \end{verbatim}
-% to mean a mixture of $50\,\%$ of current color with white.
-%
-% (Color expressions supported here are a subset of those provided by
-% the \LaTeXe{} \pkg{xcolor} package. At present, only such features as are
-% clearly useful have been added here.)
-%
-% \section{Named colors}
-%
-% Color names are stored in a single namespace, which makes them accessible
-% as part of color expressions. Whilst they are not reserved in a technical
-% sense, the names |black|, |white|, |red|, |green|, |blue|, |cyan|, |magenta|
-% and |yellow| have special meaning and should not be redefined. Color names
-% should be made up of letters, numbers and spaces only: other characters are
-% reserved for use in color expressions. In particular, |.| represents the
-% current color at the start of a color expression.
-%
-% \begin{function}{\color_set:nn}
-% \begin{syntax}
-% \cs{color_set:nn} \Arg{name} \Arg{color expression}
-% \end{syntax}
-% Evaluates the \meta{color expression} and stores the resulting
-% color specification as the \meta{name}.
-% \end{function}
-%
-% \begin{function}{\color_set:nnn}
-% \begin{syntax}
-% \cs{color_set:nnn} \Arg{name} \Arg{model(s)} \Arg{value(s)}
-% \end{syntax}
-% Stores the color specification equivalent to the \meta{model(s)} and
-% \meta{values} as the \meta{name}.
-% \end{function}
-%
-% \begin{function}{\color_set_eq:nn}
-% \begin{syntax}
-% \cs{color_set_eq:nn} \Arg{name1} \Arg{name2}
-% \end{syntax}
-% Copies the color specification in \meta{name2} to \meta{name1}. The
-% special name |.| may be used to represent the current color, allowing
-% it to be saved to a name.
-% \end{function}
-%
-% \begin{function}[EXP, pTF, added = 2022-08-12]{\color_if_exist:n}
-% \begin{syntax}
-% \cs{color_if_exist_p:n} \Arg{name}
-% \cs{color_if_exist:nTF} \Arg{name} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests whether \meta{name} is currently defined to provide a color
-% specification.
-% \end{function}
-%
-% \begin{function}[added = 2021-05-11]{\color_show:n, \color_log:n}
-% \begin{syntax}
-% \cs{color_show:n} \Arg{name}
-% \cs{color_log:n} \Arg{name}
-% \end{syntax}
-% Displays the color specification stored in the \meta{name} on the
-% terminal or log file.
-% \end{function}
-%
-% \section{Selecting colors}
-%
-% General selection of color is safe when split across pages: a stack is
-% used to ensure that the correct color is re-selected on the new page.
-%
-% These commands set the current color (|.|): other more specialised functions
-% such as fill and stroke selectors do \emph{not} adjust this value.
-%
-% \begin{function}{\color_select:n}
-% \begin{syntax}
-% \cs{color_select:n} \Arg{color expression}
-% \end{syntax}
-% Parses the \meta{color expression} and then activates the resulting
-% color specification for typeset material.
-% \end{function}
-%
-% \begin{function}{\color_select:nn}
-% \begin{syntax}
-% \cs{color_select:nn} \Arg{model(s)} \Arg{value(s)}
-% \end{syntax}
-% Activates the color specification equivalent to the \meta{model(s)} and
-% \meta{value(s)} for typeset material.
-% \end{function}
-%
-% \begin{variable}{\l_color_fixed_model_tl}
-% When this is set to a non-empty value, colors will be converted to
-% the specified model when they are selected. Note that included images
-% and similar are not influenced by this setting.
-% \end{variable}
-%
-% \section{Colors for fills and strokes}
-%
-% Colors for drawing operations and so forth are split into strokes and fills
-% (the latter may also be referred to as non-stroke color). The fill color is
-% used for text under normal circumstances. Depending on the backend, stroke
-% color may use a \emph{stack}, in which case it exhibits the same page breaking
-% behavior as general color. However, \texttt{dvips}/\texttt{dvisvgm} do not
-% support this, and so color will need to be contained within a scope, such
-% as \cs{draw_begin:}/\cs{draw_end:}.
-%
-% \begin{function}{\color_fill:n, \color_stroke:n}
-% \begin{syntax}
-% \cs{color_fill:n} \Arg{color expression}
-% \end{syntax}
-% Parses the \meta{color expression} and then activates the resulting
-% color specification for filling or stroking.
-% \end{function}
-%
-% \begin{function}{\color_fill:nn, \color_stroke:nn}
-% \begin{syntax}
-% \cs{color_fill:nn} \Arg{model(s)} \Arg{value(s)}
-% \end{syntax}
-% Activates the color specification equivalent to the \meta{model(s)} and
-% \meta{value(s)} for filling or stroking.
-% \end{function}
-%
-% \begin{variable}[module = color]{color.sc}
-% When using \texttt{dvips}, this PostScript variables hold the stroke color.
-% \end{variable}
-%
-% \subsection{Coloring math mode material}
-%
-% Coloring math mode material using \cs[no-index]{color_select:nn(n)} has some restrictions
-% and often leads to spacing issues and/or poor input syntax. Avoiding generating
-% \tn{mathord} atoms whilst coloring only those parts of the input which are
-% required needs careful handling. The functionality here covers this important
-% use case.
-%
-% \begin{function}[added = 2022-01-26]{\color_math:nn, \color_math:nnn}
-% \begin{syntax}
-% \cs{color_math:nn} \Arg{color expression}\Arg{content}
-% \cs{color_math:nnn} \Arg{model(s)} \Arg{value(s)} \Arg{content}
-% \end{syntax}
-% Works as for \cs[no-index]{color_select:n(n)} but applies color only to the math mode
-% \meta{content}. The function does not generate a group and the \meta{content}
-% therefore retains its math atom states. Sub/superscripts are also properly
-% handled.
-% \end{function}
-%
-% \begin{variable}[added = 2022-01-26]{\l_color_math_active_tl}
-% This list controls which tokens are considered as math active and
-% should therefore be replaced by their definition during searching for
-% sub/superscripts.
-% \end{variable}
-%
-% \section{Multiple color models}
-%
-% When selecting or setting a color with an explicit model, it is possible
-% to give values for more than one model at one time. This is particularly
-% useful where automated conversion between models does not give the desired
-% outcome. To do this, the list of models and list of values are both subdivided
-% using |/| characters (as for the similar function in \pkg{xcolor}). For
-% example, to save a color with explicit |cmyk| and |rgb| values, one could
-% use
-% \begin{verbatim}
-% \color_set:nnn { foo } { cmyk / rgb }
-% { 0.1 , 0.2 , 0.3 , 0.4 / 0.1, 0.2 , 0.3 }
-% \end{verbatim}
-% The manually-specified conversion will be used in preference to automated
-% calculation whenever the model(s) listed are used: both in expressions and
-% when a fixed model is active.
-%
-% Similarly, the same syntax can be applied to directly selecting a color.
-% \begin{verbatim}
-% \color_select:nn { cmyk / rgb }
-% { 0.1 , 0.2 , 0.3 , 0.4 / 0.1, 0.2 , 0.3 }
-% \end{verbatim}
-% Again, this list is used when a fixed model is active: the first entry is used
-% unless there is a fixed model matching one of the other entries.
-%
-% \section{Exporting color specifications}
-%
-% The major use of color expressions is in setting typesetting output, but there
-% are other places in which some form of color information is required. These
-% may need data in a different format or using a different model to the internal
-% representation. Thus a set of functions are available to export colors in
-% different formats.
-%
-% Valid export targets are
-% \begin{itemize}
-% \item \texttt{backend} Two brace groups: the first containing the
-% model, the second containing space-separated values appropriate
-% for the model; this is the format required by backend functions
-% of \pkg{expl3}
-% \item \texttt{comma-sep-cmyk} Comma-separated cyan-magenta-yellow-black
-% values
-% \item \texttt{comma-sep-rgb} Comma-separated red-green-blue values
-% suitable for use as a PDF annotation color
-% \item \texttt{HTML} Uppercase two-digit hexadecimal values, expressing
-% a red-green-blue color; the digits are \emph{not} separated
-% \item \texttt{space-sep-cmyk} Space-separated cyan-magenta-yellow-black
-% values
-% \item \texttt{space-sep-rgb} Space-separated red-green-blue values
-% suitable for use as a PDF annotation color
-% \end{itemize}
-%
-% \begin{function}{\color_export:nnN}
-% \begin{syntax}
-% \cs{color_export:nnN} \Arg{color expression} \Arg{format} \Arg{tl}
-% \end{syntax}
-% Parses the \meta{color expression} as described earlier,
-% then converts to the \meta{format} specified and assigns the data to the
-% \meta{tl}.
-% \end{function}
-%
-% \begin{function}{\color_export:nnnN}
-% \begin{syntax}
-% \cs{color_export:nnnN} \Arg{model} \Arg{value(s)} \Arg{format} \Arg{tl}
-% \end{syntax}
-% Expresses the combination of \meta{model} and \meta{value(s)} in an
-% internal representation, then converts to the \meta{format} specified and
-% assigns the data to the \meta{tl}.
-% \end{function}
-%
-% \section{Creating new color models}
-% \label{l3color:sec:new-models}
-%
-% Additional color models are required to support specialist workflows, for
-% example those involving separations (see
-% \url{https://helpx.adobe.com/indesign/using/spot-process-colors.html}
-% for details of the use of separations in print). Color models may be split
-% into families; for the standard device-based color models (\texttt{DeviceCMYK},
-% \texttt{DeviceRGB}, \texttt{DeviceGray}), these are synonymous. This
-% is not generally the case: see the PDF reference for more details. (Note that
-% \pkg{l3color} uses the shorter names \texttt{cmyk}, etc.)
-%
-% \begin{function}{\color_model_new:nnn}
-% \begin{syntax}
-% \cs{color_model_new:nnn} \Arg{model} \Arg{family} \Arg{params}
-% \end{syntax}
-% Creates a new \meta{model} which is derived from the color model \meta{family}.
-% The latter should be one of
-% \begin{itemize}
-% \item \texttt{DeviceN}
-% \item \texttt{ICCBased}
-% \item \texttt{Separation}
-% \end{itemize}
-% (The \meta{family} may be given in mixed case as-in the PDF reference:
-% internally, case of these strings is folded.)
-% Depending on the \meta{family}, one or more \meta{params} are mandatory or
-% optional.
-% \end{function}
-%
-% For a \texttt{Separation} space, there are three \emph{compulsory} keys.
-% \begin{itemize}
-% \item \texttt{name} The name of the Separation, for example the formal
-% name of a spot color ink. Such a \meta{name} may contain spaces, etc.,
-% which are not permitted in the \meta{model}.
-% \item \texttt{alternative-model} An alternative device colorspace, one of
-% \texttt{cmyk}, \texttt{rgb}, \texttt{gray} or \texttt{CIELAB}. The three
-% parameter-based models work as described above; see below for
-% details of CIELAB colors.
-% \item \texttt{alternative-values} A comma-separated list of values
-% appropriate to the \texttt{alternative-model}. This information is used by
-% the PDF application if the \texttt{Separation} is not available.
-% \end{itemize}
-%
-% CIELAB color separations are created using the
-% \texttt{alternative-model = CIELAB} setting. These colors must also have an
-% \texttt{illuminant} key, one of \texttt{a}, \texttt{c}, \texttt{e},
-% \texttt{d50}, \texttt{d55}, \texttt{d65} or \texttt{d75}. The
-% \texttt{alternative-values} in this case are the three parameters $L*$, $a*$
-% and $b*$ of the CIELAB model. Full details of this device-independent color
-% approach are given in the documentation to the \pkg{colorspace} package.
-%
-% CIELAB colors \emph{cannot} be converted into other device-dependent color
-% spaces, and as such, mixing can only occur if colors set up using the CIELAB
-% model are also given with an alternative parameter-based model. If that is
-% not the case, \pkg{l3color} will fallback to using black as the colorant in
-% any mixing.
-%
-% For a \texttt{DeviceN} space, there is one \emph{compulsory} key.
-% \begin{itemize}
-% \item \texttt{names} The names of the components of the \texttt{DeviceN}
-% space. Each should be either the \meta{name} of a \texttt{Separation} model,
-% a process color name (\texttt{cyan}, etc.) or the special name \texttt{none}.
-% \end{itemize}
-%
-% For a \texttt{ICCBased} space, there is one \emph{compulsory} key.
-% \begin{itemize}
-% \item \texttt{file} The name of the file containing the profile.
-% \end{itemize}
-%
-% \subsection{Color profiles}
-%
-% Color profiles are used to ensure color accuracy by linking to collaboration.
-% Applying a profile can be used to standardise color which is otherwise
-% device-dependence.
-%
-% \begin{function}[added = 2021-02-23]{\color_profile_apply:nn}
-% \begin{syntax}
-% \cs{color_profile_apply:nn} \Arg{profile} \Arg{model}
-% \end{syntax}
-% This function applies a \meta{profile} to one of the device \meta{models}.
-% The profile will then apply to all color of the selected \meta{model}. The
-% \meta{profile} should specify an ICC profile file. The \meta{model} has to
-% be one the standard device models: \texttt{cmyk}, \texttt{gray} or
-% \texttt{rgb}.
-% \end{function}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3color} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=color>
-% \end{macrocode}
-%
-% \subsection{Basics}
-%
-% \begin{variable}
-% {\l_@@_current_tl}
-% The color currently active for foreground (text, \emph{etc.}) material.
-% This is stored in the form of a color model followed by one or more
-% values. There are four pre-defined models, three of which take numerical
-% values in the range $[0,1]$:
-% \begin{itemize}
-% \item \texttt{gray \meta{gray}} Grayscale color with the \meta{gray}
-% value running from $0$ (fully black) to $1$ (fully white)
-% \item \texttt{cmyk \meta{cyan} \meta{magenta} \meta{yellow} \meta{black}}
-% \item \texttt{rgb \meta{red} \meta{green} \meta{blue}}
-% \end{itemize}
-% Notice that the value are separated by spaces. There is a fourth pre-defined
-% model using a string value and a numerical one:
-% \begin{itemize}
-% \item \texttt{spot \meta{name} \meta{tint}} A pre-defined spot color,
-% where the \meta{name} should be a pre-defined string color name and the
-% \meta{tint} should be in the range $[0,1]$.
-% \end{itemize}
-%
-% Additional models may be created to allow mixing of spot colors. The
-% number of data entries these require will depend on the number of
-% colors to be mixed.
-% \begin{texnote}
-% The content of \cs{l_@@_current_tl} comprises two brace groups, the
-% first containing the color model and the second containing the value(s)
-% applicable in that model.
-% \end{texnote}
-% \end{variable}
-%
-% \begin{macro}{\color_group_begin:, \color_group_end:}
-% Grouping for color is the same as using the basic \cs{group_begin:}
-% and \cs{group_end:} functions. However, for semantic reasons, they
-% are renamed here.
-% \begin{macrocode}
-\cs_new_eq:NN \color_group_begin: \group_begin:
-\cs_new_eq:NN \color_group_end: \group_end:
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\color_ensure_current:}
-% A driver-independent wrapper for setting the foreground color to the
-% current color \enquote{now}.
-% \begin{macrocode}
-\cs_new_protected:Npn \color_ensure_current:
- { \@@_select:N \l_@@_current_tl }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\s_@@_stop}
-% Internal scan marks.
-% \begin{macrocode}
-\scan_new:N \s_@@_stop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\@@_select:N, \@@_select_math:N}
-% \begin{macro}{\@@_select:nn}
-% Take an internal color specification and pass it to the driver. This code
-% is needed to ensure the current color but will also be used by the
-% higher-level material.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_select:N #1
- {
- \exp_after:wN \@@_select:nn #1
- \group_insert_after:N \@@_backend_reset:
- }
-\cs_new_protected:Npn \@@_select_math:N #1
- { \exp_after:wN \@@_select:nn #1 }
-\cs_new_protected:Npn \@@_select:nn #1#2
- { \use:c { @@_backend_select_ #1 :n } {#2} }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{variable}{\l_@@_current_tl}
-% The current color, with the model and
-% \begin{macrocode}
-\tl_new:N \l_@@_current_tl
-\tl_set:Nn \l_@@_current_tl { { gray } { 0 } }
-% \end{macrocode}
-% \end{variable}
-%
-% \subsection{Predefined color names}
-%
-% The ability to predefine colors with a name is a key part of this module and
-% means there has to be a method for storing the results. At first sight, it
-% seems natural to follow the usual \pkg{expl3} model and create a
-% \texttt{color} variable type for the process. That would then allow both
-% local and global colors, constant colors and the like. However, these names
-% need to be accessible in some form at the user level, for selection of colors
-% either simply by name or as part of a more complex expression. This does not
-% require that the full name is exposed but does require that they can be
-% looked up in a predictable way. As such, it is more useful to expose just the
-% color names as part of the interface, with the result that only local color
-% names can be created. (This is also seen for example in key creation in
-% \pkg{l3keys}.) As a result, color names are declarative (no \texttt{new}
-% functions).
-%
-% Since there is no need to manipulate colors \emph{en masse}, each is stored
-% in a two-part structure: a \texttt{prop} for the colors themselves, and a
-% \texttt{tl} for the default model for each color.
-%
-% \subsection{Setup}
-%
-% \begin{variable}{\l_@@_internal_int, \l_@@_internal_tl}
-% \begin{macrocode}
-\int_new:N \l_@@_internal_int
-\tl_new:N \l_@@_internal_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\s_@@_mark}
-% Internal scan marks. \cs{s_@@_stop} is already defined in \pkg{l3color-base}.
-% \begin{macrocode}
-\scan_new:N \s_@@_mark
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_ignore_error_bool}
-% Used to avoid issuing multiple errors if there is a change-of-model with
-% input container an error.
-% \begin{macrocode}
-\bool_new:N \l_@@_ignore_error_bool
-% \end{macrocode}
-% \end{variable}
-%
-% \subsection{Utility functions}
-%
-% \begin{macro}[pTF, EXP]{\color_if_exist:n}
-% A simple wrapper to avoid needing to have the lookup repeated in too many
-% places.To guard against a color created in a group, we need to test for
-% entries in the |prop|.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \color_if_exist:n #1 { p , T, F, TF }
- {
- \prop_if_exist:cTF { l_@@_named_ #1 _prop }
- {
- \prop_if_empty:cTF { l_@@_named_ #1 _prop }
- \prg_return_false:
- \prg_return_true:
- }
- \prg_return_false:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_model:N, \@@_values:N}
-% Simple abstractions.
-% \begin{macrocode}
-\cs_new:Npn \@@_model:N #1 { \exp_after:wN \use_i:nn #1 }
-\cs_new:Npn \@@_values:N #1 { \exp_after:wN \use_ii:nn #1 }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_extract:nNN, \@@_extract:VNN}
-% Recover the values for the standard model for a color.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_extract:nNN #1#2#3
- {
- \tl_set_eq:Nc #2 { l_@@_named_ #1 _tl }
- \prop_get:cVN { l_@@_named_ #1 _prop } #2 #3
- }
-\cs_generate_variant:Nn \@@_extract:nNN { V }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Model conversion}
-%
-% \begin{macro}{\@@_convert:nnN, \@@_convert:VVN}
-% \begin{macro}{\@@_convert:nnnN, \@@_convert:nVnN, \@@_convert:nnVN}
-% \begin{macro}[EXP]
-% {
-% \@@_convert_gray_gray:w
-% \@@_convert_gray_rgb:w
-% \@@_convert_gray_cmyk:w
-% \@@_convert_cmyk_gray:w
-% \@@_convert_cmyk_rgb:w
-% \@@_convert_cmyk_cmyk:w
-% \@@_convert_rgb_gray:w
-% \@@_convert_rgb_rgb:w
-% \@@_convert_rgb_cmyk:w
-% }
-% \begin{macro}[EXP]{\@@_convert_rgb_cmyk:nnn}
-% \begin{macro}[EXP]{\@@_convert_rgb_cmyk:nnnn}
-% Model conversion is carried out using standard formulae for base models,
-% as described in the manual for \pkg{xcolor} (see also the \emph{PostScript
-% Language Reference Manual}). For other models direct conversion might not
-% be defined, so we go through the fallback models if necessary.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_convert:nnN #1#2#3
- { \@@_convert:nnVN {#1} {#2} #3 #3 }
-\cs_generate_variant:Nn \@@_convert:nnN { VV }
-\cs_generate_variant:Nn \exp_last_unbraced:Nf { c }
-\cs_new_protected:Npn \@@_convert:nnnN #1#2#3#4
- {
- \tl_set:Ne #4
- {
- \cs_if_exist_use:cTF { @@_convert_ #1 _ #2 :w }
- { #3 \s_@@_stop }
- {
- \cs_if_exist:cTF { @@_convert_ \use:c { c_@@_fallback_ #1 _tl } _ #2 :w }
- {
- \exp_last_unbraced:cf
- { @@_convert_ \use:c { c_@@_fallback_ #1 _tl } _ #2 :w }
- { \use:c { @@_convert_ #1 _ \use:c { c_@@_fallback_ #1 _tl } :w } #3 \s_@@_stop }
- \s_@@_stop
- }
- {
- \exp_last_unbraced:cf
- { @@_convert_ \use:c { c_@@_fallback_ #2 _tl } _ #2 :w }
- {
- \cs_if_exist_use:cTF { @@_convert_ #1 _ \use:c { c_@@_fallback_ #2 _tl } :w }
- { #3 \s_@@_stop }
- {
- \exp_last_unbraced:cf
- { @@_convert_ \use:c { c_@@_fallback_ #1 _tl } _ \use:c { c_@@_fallback_ #2 _tl } :w }
- { \use:c { @@_convert_ #1 _ \use:c { c_@@_fallback_ #1 _tl } :w } #3 \s_@@_stop }
- \s_@@_stop
- }
- }
- \s_@@_stop
- }
- }
- }
- }
-\cs_generate_variant:Nn \@@_convert:nnnN { nV , nnV }
-\cs_new:Npn \@@_convert_gray_gray:w #1 \s_@@_stop
- { #1 }
-\cs_new:Npn \@@_convert_gray_rgb:w #1 \s_@@_stop
- { #1 ~ #1 ~ #1 }
-\cs_new:Npn \@@_convert_gray_cmyk:w #1 \s_@@_stop
- { 0 ~ 0 ~ 0 ~ \fp_eval:n { 1 - #1 } }
-% \end{macrocode}
-% These rather odd values are based on \textsc{ntsc} television: the set are
-% used for the |cmyk| conversion.
-% \begin{macrocode}
-\cs_new:Npn \@@_convert_rgb_gray:w #1 ~ #2 ~ #3 \s_@@_stop
- { \fp_eval:n { 0.3 * #1 + 0.59 * #2 + 0.11 * #3 } }
-\cs_new:Npn \@@_convert_rgb_rgb:w #1 \s_@@_stop
- { #1 }
-% \end{macrocode}
-% The conversion from |rgb| to |cmyk| is the most complex: a two-step
-% procedure which requires \emph{black generation} and \emph{undercolor
-% removal} functions. The PostScript reference describes them as
-% device-dependent, but following \pkg{xcolor} we assume they are linear.
-% Moreover, as the likelihood of anyone using a non-unitary matrix here is
-% tiny, we simplify and treat those two concepts as no-ops. To allow code
-% sharing with parsing of |cmy| values, we have an intermediate function
-% here (\cs{@@_convert_rgb_cmyk:nnn}) which actually takes |cmy| values
-% as input.
-% \begin{macrocode}
-\cs_new:Npn \@@_convert_rgb_cmyk:w #1 ~ #2 ~ #3 \s_@@_stop
- {
- \exp_args:Neee \@@_convert_rgb_cmyk:nnn
- { \fp_eval:n { 1 - #1 } }
- { \fp_eval:n { 1 - #2 } }
- { \fp_eval:n { 1 - #3 } }
- }
-\cs_new:Npn \@@_convert_rgb_cmyk:nnn #1#2#3
- {
- \exp_args:Ne \@@_convert_rgb_cmyk:nnnn
- { \fp_eval:n { min( #1, #2 , #3 ) } } {#1} {#2} {#3}
- }
-\cs_new:Npn \@@_convert_rgb_cmyk:nnnn #1#2#3#4
- {
- \fp_eval:n { min ( 1 , max ( 0 , #2 - #1 ) ) } \c_space_tl
- \fp_eval:n { min ( 1 , max ( 0 , #3 - #1 ) ) } \c_space_tl
- \fp_eval:n { min ( 1 , max ( 0 , #4 - #1 ) ) } \c_space_tl
- #1
- }
-\cs_new:Npn \@@_convert_cmyk_gray:w #1 ~ #2 ~ #3 ~ #4 \s_@@_stop
- { \fp_eval:n { 1 - min ( 1 , 0.3 * #1 + 0.59 * #2 + 0.11 * #3 + #4 ) } }
-\cs_new:Npn \@@_convert_cmyk_rgb:w #1 ~ #2 ~ #3 ~ #4 \s_@@_stop
- {
- \fp_eval:n { 1 - min ( 1 , #1 + #4 ) } \c_space_tl
- \fp_eval:n { 1 - min ( 1 , #2 + #4 ) } \c_space_tl
- \fp_eval:n { 1 - min ( 1 , #3 + #4 ) }
- }
-\cs_new:Npn \@@_convert_cmyk_cmyk:w #1 \s_@@_stop
- { #1 }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Color expressions}
-%
-% \begin{variable}
-% {\l_@@_model_tl, \l_@@_value_tl, \l_@@_next_model_tl, \l_@@_next_value_tl}
-% Working space to store the color data whilst doing calculations: keeping
-% it on the stack is attractive but gets tricky (return is non-trivial).
-% \begin{macrocode}
-\tl_new:N \l_@@_model_tl
-\tl_new:N \l_@@_value_tl
-\tl_new:N \l_@@_next_model_tl
-\tl_new:N \l_@@_next_value_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\@@_parse:nN}
-% \begin{macro}{\@@_parse_aux:nN}
-% \begin{macro}{\@@_parse_eq:Nn}
-% \begin{macro}{\@@_parse_eq:nNn}
-% \begin{macro}{\@@_parse:Nw}
-% \begin{macro}{\@@_parse_loop_init:Nnn}
-% \begin{macro}{\@@_parse_loop:w}
-% \begin{macro}{\@@_parse_loop_check:nn}
-% \begin{macro}{\@@_parse_loop:nn}
-% \begin{macro}{\@@_parse_gray:n, \@@_parse_std:n}
-% \begin{macro}{\@@_parse_break:w}
-% \begin{macro}{\@@_parse_end:}
-% \begin{macro}[EXP]{\@@_parse_mix:Nnnn, \@@_parse_mix:NVVn}
-% \begin{macro}[EXP]{\@@_parse_mix:nNnn}
-% \begin{macro}[EXP]
-% {
-% \@@_parse_mix_gray:nw ,
-% \@@_parse_mix_rgb:nw ,
-% \@@_parse_mix_cmyk:nw
-% }
-% The main function for parsing color expressions removes actives but
-% otherwise expands, then starts working through the expression itself.
-% At the end, we apply the payload.
-% \begin{macrocode}
-\cs_new_protected:Npe \@@_parse:nN #1#2
- {
- \tl_set:Ne \exp_not:c { l_@@_named_ . _tl }
- { \exp_not:N \@@_model:N \exp_not:N \l_@@_current_tl }
- \prop_put:NVe \exp_not:c { l_@@_named_ . _prop }
- \exp_not:c { l_@@_named_ . _tl }
- { \exp_not:N \@@_values:N \exp_not:N \l_@@_current_tl }
- \exp_not:N \exp_args:Ne \exp_not:N \@@_parse_aux:nN
- { \exp_not:N \tl_to_str:n {#1} } #2
- }
-% \end{macrocode}
-% Before going to all of the effort of parsing an expression, these two
-% precursor functions look for a pre-defined name, either on its own or
-% with a trailing |!| (which is the same thing).
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_parse_aux:nN #1#2
- {
- \color_if_exist:nTF {#1}
- { \@@_parse_set_eq:Nn #2 {#1} }
- { \@@_parse:Nw #2#1 ! \s_@@_stop }
- \@@_check_model:N #2
- }
-\cs_new_protected:Npn \@@_parse_set_eq:Nn #1#2
- {
- \tl_if_empty:NTF \l_color_fixed_model_tl
- { \exp_args:Nv \@@_parse_set_eq:nNn { l_@@_named_ #2 _tl } }
- { \exp_args:NV \@@_parse_set_eq:nNn \l_color_fixed_model_tl }
- #1 {#2}
- }
-% \end{macrocode}
-% Here, we have to allow for the case where there is a fixed model:
-% that can't be swept up by generic conversion as we are dealing with a
-% named color.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_parse_set_eq:nNn #1#2#3
- {
- \prop_get:cnNTF
- { l_@@_named_ #3 _prop } {#1}
- \l_@@_value_tl
- { \tl_set:Ne #2 { {#1} { \l_@@_value_tl } } }
- {
- \tl_set_eq:Nc \l_@@_model_tl { l_@@_named_ #3 _tl }
- \prop_get:cVN { l_@@_named_ #3 _prop } \l_@@_model_tl
- \l_@@_value_tl
- \@@_convert:nnN
- \l_@@_model_tl {#1} \l_@@_value_tl
- \tl_set:Ne #2
- {
- {#1}
- { \l_@@_value_tl }
- }
- }
- }
-\cs_new_protected:Npn \@@_parse:Nw #1#2 ! #3 \s_@@_stop
- {
- \color_if_exist:nTF {#2}
- {
- \tl_if_blank:nTF {#3}
- { \@@_parse_set_eq:Nn #1 {#2} }
- { \@@_parse_loop_init:Nnn #1 {#2} {#3} }
- }
- {
- \msg_error:nnn { color } { unknown-color } {#2}
- \tl_set:Nn \l_@@_current_tl { { gray } { 0 } }
- }
- }
-% \end{macrocode}
-% Once we establish that a full parse is needed, the next job is to get the
-% detail of the first color. That will determine the model we use for the
-% calculation: splitting here makes checking that a bit easier.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_parse_loop_init:Nnn #1#2#3
- {
- \group_begin:
- \@@_extract:nNN {#2} \l_@@_model_tl \l_@@_value_tl
- \@@_parse_loop:w #3 ! ! ! ! \s_@@_stop
- \tl_set:Ne \l_@@_internal_tl
- { { \l_@@_model_tl } { \l_@@_value_tl } }
- \exp_args:NNNV \group_end:
- \tl_set:Nn #1 \l_@@_internal_tl
- }
-% \end{macrocode}
-% This is the loop proper: there can be an open-ended set of colors to parse,
-% separated by |!| tokens. There are a few cases to look out for. At the end
-% of the expression and with we find a mix of $100$ then we simply skip the
-% next color entirely (we can't stop the loop as there might be a further
-% valid color to mix in). On the other hand, if we get a mix of $0$ then
-% drop everything so far and start again. There is also a trailing
-% |white| to \enquote{read in} if the final explicit data is a mix.
-% Those conditions are separate from actually looping, which is therefore
-% sorted out by checking if we have further data to process: in contrast
-% to \pkg{xcolor}, we don't allow |!!| so the test can be simplified.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_parse_loop:w #1 ! #2 ! #3 ! #4 ! #5 \s_@@_stop
- {
- \tl_if_blank:nF {#1}
- {
- \bool_lazy_and:nnTF
- { \fp_compare_p:nNn {#1} > { 0 } }
- { \fp_compare_p:nNn {#1} < { 100 } }
- {
- \use:e
- {
- \@@_parse_loop:nn {#1}
- { \tl_if_blank:nTF {#2} { white } {#2} }
- }
- }
- { \@@_parse_loop_check:nn {#1} {#2} }
- }
- \tl_if_blank:nF {#3}
- { \@@_parse_loop:w #3 ! #4 ! #5 \s_@@_stop }
- \@@_parse_end:
- }
-% \end{macrocode}
-% As these are unusual cases, we accept slower performance here for clearer
-% code: check for the error conditions, handle the boundary cases after
-% that.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_parse_loop_check:nn #1#2
- {
- \bool_if:NF \l_@@_ignore_error_bool
- {
- \bool_lazy_or:nnT
- { \fp_compare_p:nNn {#1} < { 0 } }
- { \fp_compare_p:nNn {#1} > { 100 } }
- { \msg_error:nnnnn { color } { out-of-range } {#1} { 0 } { 100 } }
- }
- \fp_compare:nNnF {#1} > \c_zero_fp
- {
- \tl_if_blank:nTF {#2}
- { \@@_extract:nNN { white } }
- { \@@_extract:nNN {#2} }
- \l_@@_model_tl \l_@@_value_tl
- }
- }
-% \end{macrocode}
-% The \enquote{payload} of calculation in the loop first. If the model for
-% the upcoming color is different from that of the existing (partial) color,
-% convert the model. For |gray| the two are flipped round so that the outcome
-% is something with \enquote{real} color. We are then in a position to do the
-% actual calculation itself. The two auxiliaries here give us a way to break
-% the loop should an invalid name be found.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_parse_loop:nn #1#2
- {
- \color_if_exist:nTF {#2}
- {
- \@@_extract:nNN {#2} \l_@@_next_model_tl \l_@@_next_value_tl
- \tl_if_eq:NNF \l_@@_model_tl \l_@@_next_model_tl
- {
- \str_if_eq:VnTF \l_@@_model_tl { gray }
- { \@@_parse_gray:n {#2} }
- { \@@_parse_std:n {#2} }
- }
- \tl_set:Ne \l_@@_value_tl
- {
- \@@_parse_mix:NVVn
- \l_@@_model_tl \l_@@_value_tl \l_@@_next_value_tl {#1}
- }
- }
- {
- \msg_error:nnn { color } { unknown-color } {#2}
- \@@_extract:nNN { black } \l_@@_model_tl \l_@@_value_tl
- \@@_parse_break:w
- }
- }
-% \end{macrocode}
-% The \texttt{gray} model needs special handling: the models need to be
-% swapped: we do that using a dedicated function.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_parse_gray:n #1
- {
- \tl_set_eq:NN \l_@@_model_tl \l_@@_next_model_tl
- \tl_set:Nn \l_@@_next_model_tl { gray }
- \exp_args:NnV \@@_convert:nnN { gray } \l_@@_model_tl
- \l_@@_value_tl
- \prop_get:cVN { l_@@_named_ #1 _prop } \l_@@_model_tl
- \l_@@_next_value_tl
- }
-\cs_new_protected:Npn \@@_parse_std:n #1
- {
- \prop_get:cVNF { l_@@_named_ #1 _prop }
- \l_@@_model_tl
- \l_@@_next_value_tl
- {
- \@@_convert:VVN
- \l_@@_next_model_tl
- \l_@@_model_tl
- \l_@@_next_value_tl
- }
- }
-\cs_new_protected:Npn \@@_parse_break:w #1 \@@_parse_end: { }
-\cs_new_protected:Npn \@@_parse_end: { }
-% \end{macrocode}
-% Do the vector arithmetic: mainly a question of shuffling input, along
-% with one pre-calculation to keep down the use of division.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_mix:Nnnn #1#2#3#4
- {
- \exp_args:Nf \@@_parse_mix:nNnn
- { \fp_eval:n { #4 / 100 } }
- #1 {#2} {#3}
- }
-\cs_generate_variant:Nn \@@_parse_mix:Nnnn { NVV }
-\cs_new:Npn \@@_parse_mix:nNnn #1#2#3#4
- {
- \use:c { @@_parse_mix_ #2 :nw } {#1}
- #3 \s_@@_mark #4 \s_@@_stop
- }
-\cs_new:Npn \@@_parse_mix_gray:nw #1#2 \s_@@_mark #3 \s_@@_stop
- { \fp_eval:n { #2 * #1 + #3 * ( 1 - #1 ) } }
-\cs_new:Npn \@@_parse_mix_rgb:nw
- #1#2 ~ #3 ~ #4 \s_@@_mark #5 ~ #6 ~ #7 \s_@@_stop
- {
- \fp_eval:n { #2 * #1 + #5 * ( 1 - #1 ) } \c_space_tl
- \fp_eval:n { #3 * #1 + #6 * ( 1 - #1 ) } \c_space_tl
- \fp_eval:n { #4 * #1 + #7 * ( 1 - #1 ) }
- }
-\cs_new:Npn \@@_parse_mix_cmyk:nw
- #1#2 ~ #3 ~ #4 ~ #5 \s_@@_mark #6 ~ #7 ~ #8 ~ #9 \s_@@_stop
- {
- \fp_eval:n { #2 * #1 + #6 * ( 1 - #1 ) } \c_space_tl
- \fp_eval:n { #3 * #1 + #7 * ( 1 - #1 ) } \c_space_tl
- \fp_eval:n { #4 * #1 + #8 * ( 1 - #1 ) } \c_space_tl
- \fp_eval:n { #5 * #1 + #9 * ( 1 - #1 ) }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {
-% \@@_parse_model_gray:w, \@@_parse_model_rgb:w,
-% \@@_parse_model_cmyk:w
-% }
-% \begin{macro}[EXP]{\@@_parse_number:n}
-% \begin{macro}[EXP]{\@@_parse_number:w}
-% Turn the input into internal form, also tidying up the number quickly.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_model_gray:w #1 , #2 \s_@@_stop
- { { gray } { \@@_parse_number:n {#1} } }
-\cs_new:Npn \@@_parse_model_rgb:w #1 , #2 , #3 , #4 \s_@@_stop
- {
- { rgb }
- {
- \@@_parse_number:n {#1} ~
- \@@_parse_number:n {#2} ~
- \@@_parse_number:n {#3}
- }
- }
-\cs_new:Npn \@@_parse_model_cmyk:w #1 , #2 , #3 , #4 , #5 \s_@@_stop
- {
- { cmyk }
- {
- \@@_parse_number:n {#1} ~
- \@@_parse_number:n {#2} ~
- \@@_parse_number:n {#3} ~
- \@@_parse_number:n {#4}
- }
- }
-\cs_new:Npn \@@_parse_number:n #1
- { \@@_parse_number:w #1 . 0 . \s_@@_stop }
-\cs_new:Npn \@@_parse_number:w #1 . #2 . #3 \s_@@_stop
- { \tl_if_blank:nTF {#1} { 0 } {#1} . #2 }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {
-% \@@_parse_model_Gray:w, \@@_parse_model_hsb:w,
-% \@@_parse_model_Hsb:w, \@@_parse_model_HSB:w,
-% \@@_parse_model_HTML:w, \@@_parse_model_RGB:w
-% }
-% \begin{macro}[EXP]{\@@_parse_model_hsb:nnn, \@@_parse_model_hsb_aux:nnn}
-% \begin{macro}[EXP]{\@@_parse_model_hsb:nnnn}
-% \begin{macro}[EXP]{\@@_parse_model_hsb:nnnnn}
-% \begin{macro}[EXP]
-% {
-% \@@_parse_model_hsb_0:nnnn ,
-% \@@_parse_model_hsb_1:nnnn ,
-% \@@_parse_model_hsb_2:nnnn ,
-% \@@_parse_model_hsb_3:nnnn ,
-% \@@_parse_model_hsb_4:nnnn ,
-% \@@_parse_model_hsb_5:nnnn
-% }
-% \begin{macro}[EXP]{\@@_parse_model_wave:w}
-% \begin{macro}[EXP]
-% {\@@_parse_model_wave_auxi:nn, \@@_parse_model_wave_auxii:nn}
-% \begin{macro}[EXP]{\@@_parse_model_wave_rho:n}
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_model_Gray:w #1 , #2 \s_@@_stop
- { { gray } { \fp_eval:n { #1 / 15 } } }
-\cs_new:Npn \@@_parse_model_hsb:w #1 , #2 , #3 , #4 \s_@@_stop
- { \@@_parse_model_hsb:nnn {#1} {#2} {#3} }
-\cs_new:Npn \@@_parse_model_Hsb:w #1 , #2 , #3 , #4 \s_@@_stop
- {
- \exp_args:Ne \@@_parse_model_hsb:nnn { \fp_eval:n { #1 / 360 } }
- {#2} {#3}
- }
-% \end{macrocode}
-% The conversion here is non-trivial but is described at length
-% in the \pkg{xcolor} manual. For ease, we calculate the integer
-% and fractional parts of the hue first, then use them to work out the
-% possible values for $r$, $g$ and $b$ before putting them in the correct
-% places.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_model_hsb:nnn #1#2#3
- {
- { rgb }
- {
- \exp_args:Ne \@@_parse_model_hsb_aux:nnn
- { \fp_eval:n { 6 * (#1) } } {#2} {#3}
- }
- }
-\cs_new:Npn \@@_parse_model_hsb_aux:nnn #1#2#3
- {
- \exp_args:Nee \@@_parse_model_hsb_aux:nnnn
- { \fp_eval:n { floor(#1) } } { \fp_eval:n { #1 - floor(#1) } }
- {#2} {#3}
- }
-\cs_new:Npn \@@_parse_model_hsb_aux:nnnn #1#2#3#4
- {
- \use:e
- {
- \exp_not:N \@@_parse_model_hsb_aux:nnnnn
- { \@@_parse_number:n {#4} }
- { \fp_eval:n { round(#4 * (1 - #3) ,5) } }
- { \fp_eval:n { round(#4 * ( 1 - #3 * #2 ) ,5) } }
- { \fp_eval:n { round(#4 * ( 1 - #3 * (1 - #2) ) ,5) } }
- {#1}
- }
- }
-\cs_new:Npn \@@_parse_model_hsb_aux:nnnnn #1#2#3#4#5
- { \use:c { @@_parse_model_hsb_ #5 :nnnn } {#1} {#2} {#3} {#4} }
-\cs_new:cpn { @@_parse_model_hsb_0:nnnn } #1#2#3#4 { #1 ~ #4 ~ #2 }
-\cs_new:cpn { @@_parse_model_hsb_1:nnnn } #1#2#3#4 { #3 ~ #1 ~ #2 }
-\cs_new:cpn { @@_parse_model_hsb_2:nnnn } #1#2#3#4 { #2 ~ #1 ~ #4 }
-\cs_new:cpn { @@_parse_model_hsb_3:nnnn } #1#2#3#4 { #2 ~ #3 ~ #1 }
-\cs_new:cpn { @@_parse_model_hsb_4:nnnn } #1#2#3#4 { #4 ~ #2 ~ #1 }
-\cs_new:cpn { @@_parse_model_hsb_5:nnnn } #1#2#3#4 { #1 ~ #2 ~ #3 }
-\cs_new:cpn { @@_parse_model_hsb_6:nnnn } #1#2#3#4 { #1 ~ #2 ~ #2 }
-\cs_new:Npn \@@_parse_model_HSB:w #1 , #2 , #3 , #4 \s_@@_stop
- {
- \exp_args:Neee \@@_parse_model_hsb:nnn
- { \fp_eval:n { round((#1) / 240,5) } }
- { \fp_eval:n { round((#2) / 240,5) } }
- { \fp_eval:n { round((#3) / 240,5) } }
- }
-\cs_new:Npn \@@_parse_model_HTML:w #1 , #2 \s_@@_stop
- { \@@_parse_model_HTML_aux:w #1 0 0 0 0 0 0 \s_@@_stop }
-\cs_new:Npn \@@_parse_model_HTML_aux:w #1#2#3#4#5#6#7 \s_@@_stop
- {
- { rgb }
- {
- \fp_eval:n { round(\int_from_hex:n {#1#2} / 255,5) } ~
- \fp_eval:n { round(\int_from_hex:n {#3#4} / 255,5) } ~
- \fp_eval:n { round(\int_from_hex:n {#5#6} / 255,5) }
- }
- }
-\cs_new:Npn \@@_parse_model_RGB:w #1 , #2 , #3 , #4 \s_@@_stop
- {
- { rgb }
- {
- \fp_eval:n { round((#1) / 255,5) } ~
- \fp_eval:n { round((#2) / 255,5) } ~
- \fp_eval:n { round((#3) / 255,5) }
- }
- }
-% \end{macrocode}
-% Following the description in the \pkg{xcolor} manual. As we always use |rgb|,
-% there is no need to find the sixth, we just pas the information straight
-% to the |hsb| auxiliary defined earlier.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_model_wave:w #1 , #2 \s_@@_stop
- {
- { rgb }
- {
- \fp_compare:nNnTF {#1} < { 420 }
- { \@@_parse_model_wave_auxi:nn {#1} { 0.3 + 0.7 * (#1 - 380) / 40 }
- }
- {
- \fp_compare:nNnTF {#1} > { 700 }
- { \@@_parse_model_wave_auxi:nn {#1} { 0.3 + 0.7 * (#1 - 780) / -80 } }
- { \@@_parse_model_wave_auxi:nn {#1} { 1 } }
- }
- }
- }
-\cs_new:Npn \@@_parse_model_wave_auxi:nn #1#2
- {
- \fp_compare:nNnTF {#1} < { 440 }
- {
- \@@_parse_model_wave_auxii:nn
- { 4 + \@@_parse_model_wave_rho:n { (#1 - 440) / -60 } }
- {#2}
- }
- {
- \fp_compare:nNnTF {#1} < { 490 }
- {
- \@@_parse_model_wave_auxii:nn
- { 4 - \@@_parse_model_wave_rho:n { (#1 - 440) / 50 } }
- {#2}
- }
- {
- \fp_compare:nNnTF {#1} < { 510 }
- {
- \@@_parse_model_wave_auxii:nn
- { 2 + \@@_parse_model_wave_rho:n { (#1 - 510) / -20 } }
- {#2}
- }
- {
- \fp_compare:nNnTF {#1} < { 580 }
- {
- \@@_parse_model_wave_auxii:nn
- { 2 - \@@_parse_model_wave_rho:n { (#1 - 510) / 70 } }
- {#2}
- }
- {
- \fp_compare:nNnTF {#1} < { 645 }
- {
- \@@_parse_model_wave_auxii:nn
- { \@@_parse_model_wave_rho:n { (#1 - 645) / -65 } }
- {#2}
- }
- { \@@_parse_model_wave_auxii:nn { 0 } {#2} }
- }
- }
- }
- }
- }
-\cs_new:Npn \@@_parse_model_wave_auxii:nn #1#2
- {
- \exp_args:Neee \@@_parse_model_hsb_aux:nnn
- { \fp_eval:n {#1} }
- { 1 }
- { \@@_parse_model_wave_rho:n {#2} }
- }
-\cs_new:Npn \@@_parse_model_wave_rho:n #1
- { \fp_eval:n { min(1, max(0,#1) ) } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_parse_model_cmy:w}
-% Simply pass data to the conversion functions.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_model_cmy:w #1 , #2 , #3 , #4 \s_@@_stop
- {
- { cmyk }
- { \@@_convert_rgb_cmyk:nnn {#1} {#2} {#3} }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_parse_model_tHsb:w}
-% \begin{macro}{\@@_parse_model_tHsb:n}
-% \begin{macro}{\@@_parse_model_tHsb:nw}
-% There are three stages to the process here: bring the |tH| argument into
-% the normal range, divide through to get to |hsb| and finally convert that
-% to |rgb|. The final stage can be delegated to the parsing function for
-% |hsb|, and the conversion from |Hsb| to |hsb| is trivial, so the main focus
-% here is the first stage. We use a simple expandable loop to do the work,
-% and we implement the equation given in the \pkg{xcolor} manual
-% (number~85 there) as a simple expression.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_model_tHsb:w #1 , #2 , #3 , #4 \s_@@_stop
- {
- \exp_args:Ne \@@_parse_model_hsb:nnn
- { \@@_parse_model_tHsb:n {#1} } {#2} {#3}
- }
-\cs_new:Npn \@@_parse_model_tHsb:n #1
- {
- \@@_parse_model_tHsb:nw {#1}
- 0 , 0 ;
- 60 , 30 ;
- 120 , 60 ;
- 180 , 120 ;
- 210 , 180 ;
- 240 , 240 ;
- 360 , 360 ;
- \q_recursion_tail , ;
- \q_recursion_stop
- }
-\cs_new:Npn \@@_parse_model_tHsb:nw #1 #2 , #3 ; #4 , #5 ;
- {
- \quark_if_recursion_tail_stop_do:nn {#4} { 0 }
- \fp_compare:nNnTF {#1} > {#4}
- { \@@_parse_model_tHsb:nw {#1} #4 , #5 ; }
- {
- \use_i_delimit_by_q_recursion_stop:nw
- { \fp_eval:n { ((#1 - #2) / (#4 - #2) * (#5 - #3) + #3) / 360 } }
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_parse_model_&spot:w}
-% We cannot extract data here from that passed by \pkg{xcolor}, so
-% we fall back on a black tint.
-% \begin{macrocode}
-\cs_new:cpn { @@_parse_model_&spot:w } #1 , #2 \s_@@_stop
- { { gray } { #1 } }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Selecting colors (and color models)}
-%
-% \begin{variable}{\l_color_fixed_model_tl}
-% For selecting a single fixed model.
-% \begin{macrocode}
-\tl_new:N \l_color_fixed_model_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\@@_check_model:N}
-% \begin{macro}{\@@_check_model:nn}
-% Check that the model in use is the one required.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_check_model:N #1
- {
- \tl_if_empty:NF \l_color_fixed_model_tl
- {
- \exp_after:wN \@@_check_model:nn #1
- \tl_if_eq:NNF \l_@@_model_tl \l_color_fixed_model_tl
- {
- \@@_convert:VVN \l_@@_model_tl \l_color_fixed_model_tl
- \l_@@_value_tl
- }
- \tl_set:Ne #1
- { { \l_color_fixed_model_tl } { \l_@@_value_tl } }
- }
- }
-\cs_new_protected:Npn \@@_check_model:nn #1#2
- {
- \tl_set:Nn \l_@@_model_tl {#1}
- \tl_set:Nn \l_@@_value_tl {#2}
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_finalise_current:}
-% A backend-neutral location for \enquote{last minute} manipulations before
-% handing off to the backend code. We set the special |.| syntax here: this
-% will therefore always be available. The finalisation is separate from the
-% main function so it can also be applied to \emph{e.g.}~page color.
-% \begin{macrocode}
-\cs_new_protected:Npe \@@_finalise_current:
- {
- \tl_set:Ne \exp_not:c { l_@@_named_ . _tl }
- { \exp_not:N \@@_model:N \exp_not:N \l_@@_current_tl }
- \prop_clear:N \exp_not:c { l_@@_named_ . _prop }
- \prop_put:NVe \exp_not:c { l_@@_named_ . _prop }
- \exp_not:c { l_@@_named_ . _tl }
- { \exp_not:N \@@_values:N \exp_not:N \l_@@_current_tl }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\color_select:n}
-% \begin{macro}{\color_select:nn}
-% \begin{macro}{\@@_select_main:Nw, \@@_select_loop:Nw}
-% \begin{macro}{\@@_select:nnN}
-% \begin{macro}{\@@_select_swap:Nnn}
-% Parse the input expressions then get the backend to actually activate
-% them. The main complexity here is the need to check through multiple models.
-% That is done \enquote{locally} here as the approach is subtly different to
-% when different models are being stored.
-% \begin{macrocode}
-\cs_new_protected:Npn \color_select:n #1
- {
- \@@_parse:nN {#1} \l_@@_current_tl
- \@@_finalise_current:
- \@@_select:N \l_@@_current_tl
- }
-\cs_new_protected:Npn \color_select:nn #1#2
- {
- \@@_select_main:Nw \l_@@_current_tl
- #1 / / \s_@@_mark #2 / / \s_@@_stop
- \@@_finalise_current:
- \@@_select:N \l_@@_current_tl
- }
-% \end{macrocode}
-% If the first color model is the fixed one, or if there is no fixed
-% model, we don't need most of the data: just set up and apply the backend
-% function.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_select_main:Nw
- #1 #2 / #3 / #4 \s_@@_mark #5 / #6 / #7 \s_@@_stop
- {
- \@@_select:nnN {#2} {#5} #1
- \bool_lazy_or:nnF
- { \tl_if_empty_p:N \l_color_fixed_model_tl }
- { \str_if_eq_p:nV {#2} \l_color_fixed_model_tl }
- { \@@_select_loop:Nw #1 #3 / #4 \s_@@_mark #6 / #7 \s_@@_stop }
- }
-% \end{macrocode}
-% If a fixed model applies, we need to check each possible value in order.
-% If there is no hit at all, fall back on the generic formula-based
-% interchange.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_select_loop:Nw
- #1 #2 / #3 \s_@@_mark #4 / #5 \s_@@_stop
- {
- \str_if_eq:nVTF {#2} \l_color_fixed_model_tl
- { \@@_select:nnN {#2} {#4} #1 }
- {
- \tl_if_blank:nTF {#2}
- { \exp_after:wN \@@_select_swap:Nnn \exp_after:wN #1 #1 }
- { \@@_select_loop:Nw #1 #3 \s_@@_mark #5 \s_@@_stop }
- }
- }
-\cs_new_protected:Npn \@@_select:nnN #1#2#3
- {
- \cs_if_exist:cTF { @@_parse_model_ #1 :w }
- {
- \tl_set:Ne #3
- { \use:c { @@_parse_model_ #1 :w } #2 , 0 , 0 , 0 , 0 \s_@@_stop }
- }
- { \msg_error:nnn { color } { unknown-model } {#1} }
- }
-\cs_new_protected:Npn \@@_select_swap:Nnn #1#2#3
- {
- \@@_convert:nVnN {#2} \l_color_fixed_model_tl {#3} \l_@@_value_tl
- \tl_set:Ne #1
- { { \l_color_fixed_model_tl } { \l_@@_value_tl } }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Math color}
-%
-% The approach here is the same as for the \LaTeXe{} \cs{mathcolor} command,
-% but as we are working at the \pkg{expl3} level we can make some minor
-% changes.
-%
-% \begin{macro}{\l_color_math_active_tl}
-% Tokens representing active sub/superscripts.
-% \begin{macrocode}
-\tl_new:N \l_color_math_active_tl
-\tl_set:Nn \l_color_math_active_tl { ' }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\g_@@_math_seq}
-% Not all engines have multiple color stacks, and at the same time we are
-% not expecting breaking within a colored math fragment. So we track the
-% color stack ourselves.
-% \begin{macrocode}
-\seq_new:N \g_@@_math_seq
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\color_math:nn}
-% \begin{macro}{\color_math:nnn}
-% \begin{macro}{\@@_math:nn}
-% The basic set up here is relatively simple: store the current color,
-% parse the new color as-normal, then switch color before inserting the
-% tokens we are asked to change. The tricky part is right at the end,
-% handling the reset.
-% \begin{macrocode}
-\cs_new_protected:Npn \color_math:nn #1#2
- {
- \@@_math:nn {#2}
- { \@@_parse:nN {#1} \l_@@_current_tl }
- }
-\cs_new_protected:Npn \color_math:nnn #1#2#3
- {
- \@@_math:nn {#3}
- {
- \@@_select_main:Nw \l_@@_current_tl
- #1 / / \s_@@_mark #2 / / \s_@@_stop
- }
- }
-\cs_new_protected:Npn \@@_math:nn #1#2
- {
- \seq_gpush:NV \g_@@_math_seq \l_@@_current_tl
- #2
- \@@_select_math:N \l_@@_current_tl
- #1
- \@@_math_scan:w
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \@@_math_scan:w ,
-% \@@_math_scan_auxi: ,
-% \@@_math_scan_auxii: ,
-% \@@_math_scan_end:
-% }
-% The complication when changing the color back is due to the fact
-% that the \cs{color_math:nn(n)} may be followed by \verb=^= or \verb=_=
-% or the hidden superscript (for example \texttt{'}) and its argument may
-% end in a \tn{mathop} in which case the sub- and superscripts may be
-% attached as \cs{limits} instead of after the material. All cases
-% need separate treatment. To avoid repeatedly collecting the same
-% token, we first check for an alignment tab: assuming we don't have
-% one of those, we can \enquote{recycle} \cs{l_peek_token} safely.
-% As we have an explicit \cs{c_alignment_token}, there needs to be
-% an align-safe group present.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_math_scan:w
- {
- \peek_remove_filler:n
- {
- \group_align_safe_begin:
- \peek_catcode:NTF \c_alignment_token
- {
- \group_align_safe_end:
- \@@_math_scan_end:
- }
- {
- \group_align_safe_end:
- \@@_math_scan_auxi:
- }
- }
- }
-% \end{macrocode}
-% Dealing with literal |_| and |^| is easy, and as we have exactly two cases,
-% we can hard-code this. We use a hard-coded list for limits: these are all
-% primitives. The \cs{use_none:n} here also removes the test token so it is
-% left just in the right place.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_math_scan_auxi:
- {
- \token_case_catcode:NnTF \l_peek_token
- {
- \c_math_subscript_token { }
- \c_math_superscript_token { }
- }
- { \@@_math_scripts:Nw }
- {
- \token_case_meaning:NnTF \l_peek_token
- {
- \tex_limits:D { \tex_limits:D }
- \tex_nolimits:D { \tex_nolimits:D }
- \tex_displaylimits:D { \tex_displaylimits:D }
- }
- { \@@_math_scan:w \use_none:n }
- { \@@_math_scan_auxii: }
- }
- }
-% \end{macrocode}
-% The one final case to handle is math-active tokens, most obviously
-% \texttt{'}, as these won't be covered earlier.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_math_scan_auxii:
- {
- \tl_map_inline:Nn \l_color_math_active_tl
- {
- \token_if_eq_meaning:NNT \l_peek_token ##1
- {
- \tl_map_break:n
- {
- \use_i:nn
- { \@@_math_scan_auxiii:N ##1 }
- }
- }
- \@@_math_scan_end:
- }
- }
-\cs_new_protected:Npn \@@_math_scan_auxiii:N #1
- {
- \exp_after:wN \exp_after:wN \exp_after:wN \@@_math_scan:w
- \char_generate:nn { `#1 } { 13 }
- }
-\cs_new_protected:Npn \@@_math_scan_end:
- {
- \@@_backend_reset:
- \seq_gpop:NN \g_@@_math_seq \l_@@_current_tl
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_math_scripts:Nw}
-% \begin{macro}{\@@_math_script_aux:N}
-% The tricky part of handling sub and superscripts is that we have
-% to reset color to the one that is on the stack but reset it back
-% to what it was before to allow for cases like
-% \begin{verbatim}
-% \[ \color_math:n { red } { a + \sum } _ { i = 1 } ^ { n } \]
-% \end{verbatim}
-% Here, \TeX{} constructs a \cs{vbox} stacking subscript, summation
-% sign, and superscript. So technically the superscript comes first
-% and the \cs{sum} that should get colored red is the middle.
-%
-% The approach here is to set up a brace group immediately after the
-% script token, then to set the color appropriately in that argument.
-% We need an extra group to keep the color contained, and as we
-% need to allow for an explicit closing brace in the source, the
-% inner group also is a brace one rather than \cs{group_begin:}-based.
-% At the end of the outer group we need to insert \cs{@@_math_scan:w}
-% to continue the search for a second script token.
-%
-% Notice that here we \emph{don't} need to use the math-specific
-% color selector as we can allow the
-% |\group_insert_after:N \@@_backend_reset:| to operate normally.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_math_scripts:Nw #1
- {
- #1
- \c_group_begin_token
- \c_group_begin_token
- \seq_get:NN \g_@@_math_seq \l_@@_current_tl
- \@@_select:N \l_@@_current_tl
- \group_insert_after:N \c_group_end_token
- \group_insert_after:N \@@_math_scan:w
- \peek_remove_filler:n
- {
- \peek_catcode_remove:NF \c_group_begin_token
- { \@@_math_script_aux:N }
- }
- }
-% \end{macrocode}
-% Deal with the case where we do not have an explicit brace pair in the
-% source.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_math_script_aux:N #1 { #1 \c_group_end_token }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Fill and stroke color}
-%
-% \begin{macro}{\color_fill:n, \color_stroke:n}
-% \begin{macro}{\color_fill:nn, \color_stroke:nn}
-% \begin{macro}{\@@_draw:nnn}
-% \begin{macrocode}
-\cs_new_protected:Npn \color_fill:n #1
- {
- \@@_parse:nN {#1} \l_@@_current_tl
- \exp_after:wN \@@_draw:nnn \l_@@_current_tl { fill }
- }
-\cs_new_protected:Npn \color_stroke:n #1
- {
- \@@_parse:nN {#1} \l_@@_current_tl
- \exp_after:wN \@@_draw:nnn \l_@@_current_tl { stroke }
- }
-\cs_new_protected:Npn \color_fill:nn #1#2
- {
- \@@_select_main:Nw \l_@@_current_tl
- #1 / / \s_@@_mark #2 / / \s_@@_stop
- \exp_after:wN \@@_draw:nnn \l_@@_current_tl { fill }
- }
-\cs_new_protected:Npn \color_stroke:nn #1#2
- {
- \@@_select_main:Nw \l_@@_current_tl
- #1 / / \s_@@_mark #2 / / \s_@@_stop
- \exp_after:wN \@@_draw:nnn \l_@@_current_tl { stroke }
- }
-\cs_new_protected:Npn \@@_draw:nnn #1#2#3
- {
- \use:c { @@_backend_ #3 _ #1 :n } {#2}
- \exp_args:Nc \group_insert_after:N { @@_backend_ #3 _ reset: }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Defining named colors}
-%
-% \begin{variable}{\l_@@_named_tl}
-% Space to store the detail of the named color.
-% \begin{macrocode}
-\tl_new:N \l_@@_named_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\color_set:nn}
-% \begin{macro}{\@@_set:nnn}
-% \begin{macro}{\@@_set:nn}
-% \begin{macro}{\@@_set:nnw}
-% \begin{macro}{\color_set:nnn, \@@_set_aux:nnn}
-% \begin{macro}{\@@_set_colon:nnw}
-% \begin{macro}{\@@_set_loop:nw}
-% \begin{macro}{\color_set_eq:nn}
-% Defining named colors means working through the model list and saving
-% both the \enquote{main} color and any equivalents in other models. Even
-% if there is only one model, we store a |prop| as well as a |tl|, as there
-% could be grouping weirdness, etc. When setting using an expression,
-% we need to avoid any fixed model issues, which is done without a group as
-% in \pkg{l3keys}.
-% \begin{macrocode}
-\cs_new_protected:Npn \color_set:nn #1#2
- {
- \exp_args:NV \@@_set:nnn
- \l_color_fixed_model_tl {#1} {#2}
- }
-\cs_new_protected:Npn \@@_set:nnn #1#2#3
- {
- \tl_clear:N \l_color_fixed_model_tl
- \@@_set:nn {#2} {#3}
- \tl_set:Nn \l_color_fixed_model_tl {#1}
- }
-\cs_new_protected:Npn \@@_set:nn #1#2
- {
- \str_if_eq:nnF {#1} { . }
- {
- \@@_parse:nN {#2} \l_@@_named_tl
- \tl_clear_new:c { l_@@_named_ #1 _tl }
- \tl_set:ce { l_@@_named_ #1 _tl }
- { \@@_model:N \l_@@_named_tl }
- \prop_clear_new:c { l_@@_named_ #1 _prop }
- \prop_put:cve { l_@@_named_ #1 _prop } { l_@@_named_ #1 _tl }
- { \@@_values:N \l_@@_named_tl }
- \@@_set:nnw {#1} {#2} #2 ! \s_@@_stop
- }
- }
-% \end{macrocode}
-% When setting an expression-based color, there could be multiple model
-% data available for one or more of the input colors. Where that is true for
-% the \emph{first} named color in an expression, we re-parse the expression
-% when they are also parameter-based: only |cmyk|, |gray| and |rgb| make
-% any sense here. There is a bit of a performance hit but this should be
-% rare and taking place during set-up.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_set:nnw #1#2#3 ! #4 \s_@@_stop
- {
- \clist_map_inline:nn { cmyk , gray , rgb }
- {
- \prop_get:cnNT { l_@@_named_ #3 _prop } {##1} \l_@@_internal_tl
- {
- \prop_if_in:cnF { l_@@_named_ #1 _prop } {##1}
- {
- \group_begin:
- \bool_set_true:N \l_@@_ignore_error_bool
- \tl_set:cn { l_@@_named_ #3 _tl } {##1}
- \@@_parse:nN {#2} \l_@@_internal_tl
- \exp_args:NNNV \group_end:
- \tl_set:Nn \l_@@_internal_tl \l_@@_internal_tl
- \prop_put:cee { l_@@_named_ #1 _prop }
- { \@@_model:N \l_@@_internal_tl }
- { \@@_values:N \l_@@_internal_tl }
- }
- }
- }
- }
-\cs_new_protected:Npn \color_set:nnn #1#2#3
- {
- \str_if_eq:nnF {#1} { . }
- {
- \tl_clear_new:c { l_@@_named_ #1 _tl }
- \prop_clear_new:c { l_@@_named_ #1 _prop }
- \exp_args:Ne \@@_set_aux:nnn { \tl_to_str:n {#2} }
- {#1} {#3}
- }
- }
-\cs_new_protected:Npe \@@_set_aux:nnn #1#2#3
- {
- \exp_not:N \@@_set_colon:nnw {#2} {#3}
- #1 \c_colon_str \c_colon_str \exp_not:N \s_@@_stop
- }
-\use:e
- {
- \cs_new_protected:Npn \exp_not:N \@@_set_colon:nnw
- #1#2 #3 \c_colon_str #4 \c_colon_str
- #5 \exp_not:N \s_@@_stop
- }
- {
- \tl_if_blank:nTF {#4}
- { \@@_set_loop:nw {#1} #3 }
- { \@@_set_loop:nw {#1} #4 }
- / / \s_@@_mark #2 / / \s_@@_stop
- }
-\cs_new_protected:Npn \@@_set_loop:nw
- #1#2 / #3 \s_@@_mark #4 / #5 \s_@@_stop
- {
- \tl_if_blank:nF {#2}
- {
- \@@_select:nnN {#2} {#4} \l_@@_named_tl
- \tl_set:Ne \l_@@_internal_tl { \@@_model:N \l_@@_named_tl }
- \tl_if_empty:cT { l_@@_named_ #1 _tl }
- { \tl_set_eq:cN { l_@@_named_ #1 _tl } \l_@@_internal_tl }
- \prop_put:cVe { l_@@_named_ #1 _prop } \l_@@_internal_tl
- { \@@_values:N \l_@@_named_tl }
- \@@_set_loop:nw {#1} #3 \s_@@_mark #5 \s_@@_stop
- }
- }
-\cs_new_protected:Npn \color_set_eq:nn #1#2
- {
- \color_if_exist:nTF {#2}
- {
- \tl_clear_new:c { l_@@_named_ #1 _tl }
- \prop_clear_new:c { l_@@_named_ #1 _prop }
- \str_if_eq:nnTF {#2} { . }
- {
- \tl_set:ce { l_@@_named_ #1 _tl }
- { \@@_model:N \l_@@_current_tl }
- \prop_put:cve { l_@@_named_ #1 _prop } { l_@@_named_ #1 _tl }
- { \@@_values:N \l_@@_current_tl }
- }
- {
- \tl_set_eq:cc { l_@@_named_ #1 _tl } { l_@@_named_ #2 _tl }
- \prop_set_eq:cc { l_@@_named_ #1 _prop } { l_@@_named_ #2 _prop }
- }
- }
- {
- \msg_error:nnn { color } { unknown-color } {#2}
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% A small set of colors are always defined.
-% \begin{macrocode}
-\color_set:nnn { black } { gray } { 0 }
-\color_set:nnn { white } { gray } { 1 }
-\color_set:nnn { cyan } { cmyk } { 1 , 0 , 0 , 0 }
-\color_set:nnn { magenta } { cmyk } { 0 , 1 , 0 , 0 }
-\color_set:nnn { yellow } { cmyk } { 0 , 0 , 1 , 0 }
-\color_set:nnn { red } { rgb } { 1 , 0 , 0 }
-\color_set:nnn { green } { rgb } { 0 , 1 , 0 }
-\color_set:nnn { blue } { rgb } { 0 , 0 , 1 }
-% \end{macrocode}
-%
-% \begin{variable}{\l_@@_named_._prop, \l_@@_named_._tl}
-% A special named color: this is always defined though not fixed in
-% definition.
-% \begin{macrocode}
-\prop_new:c { l_@@_named_._prop }
-\tl_new:c { l_@@_named_._tl }
-\tl_set:ce { l_@@_named_._tl } { \@@_model:N \l_@@_current_tl }
-% \end{macrocode}
-% \end{variable}
-%
-% \subsection{Exporting colors}
-%
-% \begin{macro}{\color_export:nnN}
-% \begin{macro}{\color_export:nnnN}
-% \begin{macro}{\@@_export:nN}
-% \begin{macro}{\@@_export:nnnN}
-% \begin{macrocode}
-\cs_new_protected:Npn \color_export:nnN #1#2#3
- {
- \group_begin:
- \tl_if_exist:cT { c_@@_export_ #2 _tl }
- { \tl_set_eq:Nc \l_color_fixed_model_tl { c_@@_export_ #2 _tl } }
- \@@_parse:nN {#1} #3
- \@@_export:nN {#2} #3
- \exp_args:NNNV \group_end:
- \tl_set:Nn #3 #3
- }
-\cs_new_protected:Npn \color_export:nnnN #1#2#3#4
- {
- \@@_select_main:Nw #4
- #1 / / \s_@@_mark #2 / / \s_@@_stop
- \@@_export:nN {#3} #4
- }
-\cs_new_protected:Npn \@@_export:nN #1#2
- { \exp_after:wN \@@_export:nnnN #2 {#1} #2 }
-\cs_new:Npn \@@_export:nnnN #1#2#3#4
- {
- \cs_if_exist_use:cF { @@_export_format_ #3 :nnN }
- {
- \msg_error:nnn { color } { unknown-export-format } {#3}
- \use_none:nnn
- }
- {#1} {#2} #4
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_export_format_backend:nnN}
-% Simple.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_export_format_backend:nnN #1#2#3
- { \tl_set:Nn #3 { {#1} {#2} } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_export:nnnNN}
-% A generic auxiliary for cases where only one model is appropriate.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_export:nnnNN #1#2#3#4#5
- {
- \str_if_eq:nnTF {#2} {#1}
- { #5 #4 #3 \s_@@_stop }
- {
- \@@_convert:nnnN {#2} {#1} {#3} #4
- \exp_after:wN #5 \exp_after:wN #4
- #4 \s_@@_stop
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}
-% {
-% \c_@@_export_comma-sep-cmyk_tl ,
-% \c_@@_export_comma-sep-rgb_tl ,
-% \c_@@_export_HTML_tl ,
-% \c_@@_export_space-sep-cmyk_tl ,
-% \c_@@_export_space-sep-rgb_tl
-% }
-% \begin{macrocode}
-\tl_const:cn { c_@@_export_comma-sep-cmyk_tl } { cmyk }
-\tl_const:cn { c_@@_export_comma-sep-rgb_tl } { rgb }
-\tl_const:Nn \c_@@_export_HTML_tl { rgb }
-\tl_const:cn { c_@@_export_space-sep-cmyk_tl } { cmyk }
-\tl_const:cn { c_@@_export_space-sep-rgb_tl } { rgb }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}
-% {
-% \@@_export_format_comma-sep-cmyk:nnN ,
-% \@@_export_format_comma-sep-rgb:nnN ,
-% \@@_export_format_space-sep-cmyk:nnN ,
-% \@@_export_format_space-sep-rgb:nnN
-% }
-% \begin{macrocode}
-\group_begin:
- \cs_set_protected:Npn \@@_tmp:w #1#2
- {
- \cs_new_protected:cpe { @@_export_format_ #1 :nnN } ##1##2##3
- {
- \exp_not:N \@@_export:nnnNN {#2} {##1} {##2} ##3
- \exp_not:c { @@_export_ #1 :Nw }
- }
- }
- \@@_tmp:w { comma-sep-cmyk } { cmyk }
- \@@_tmp:w { comma-sep-rgb } { rgb }
- \@@_tmp:w { HTML } { rgb }
- \@@_tmp:w { space-sep-cmyk } { cmyk }
- \@@_tmp:w { space-sep-rgb } { rgb }
-
-\group_end:
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_export_space-sep-cmyk:Nw, \@@_export_comma-sep-cmyk:Nw}
-% \begin{macrocode}
-\cs_new_protected:cpn { @@_export_comma-sep-cmyk:Nw }
- #1#2 ~ #3 ~ #4 ~ #5 \s_@@_stop
- { \tl_set:Nn #1 { #2 , #3 , #4 , #5 } }
-\cs_new_protected:cpn { @@_export_space-sep-cmyk:Nw } #1#2 \s_@@_stop
- { \tl_set:Nn #1 {#2} }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \@@_export_comma-sep-rgb:Nw ,
-% \@@_export_HTML:Nw ,
-% \@@_export_space-sep-rgb:Nw
-% }
-% \begin{macro}[EXP]{\@@_export_HTML:n}
-% \textsc{html} values must be given in |rgb|: we force conversion if
-% required, then do some simple maths.
-% \begin{macrocode}
-\cs_new_protected:cpn { @@_export_comma-sep-rgb:Nw } #1#2 ~ #3 ~ #4 \s_@@_stop
- { \tl_set:Ne #1 { #2 , #3 , #4 } }
-\cs_new_protected:Npn \@@_export_HTML:Nw #1#2 ~ #3 ~ #4 \s_@@_stop
- {
- \tl_set:Ne #1
- {
- \@@_export_HTML:n {#2}
- \@@_export_HTML:n {#3}
- \@@_export_HTML:n {#4}
- }
- }
-\cs_new:Npn \@@_export_HTML:n #1
- {
- \fp_compare:nNnTF {#1} = { 0 }
- { 00 }
- {
- \fp_compare:nNnT { #1 * 255 } < { 16 } { 0 }
- \int_to_Hex:n { \fp_to_int:n { #1 * 255 } }
- }
- }
-\cs_new_protected:cpn { @@_export_space-sep-rgb:Nw } #1#2 \s_@@_stop
- { \tl_set:Nn #1 {#2} }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Additional color models}
-%
-% \begin{variable}{\l_@@_internal_prop}
-% \begin{macrocode}
-\prop_new:N \l_@@_internal_prop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\g_@@_model_int}
-% A tracker for the total number of new models.
-% \begin{macrocode}
-\int_new:N \g_@@_model_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}
-% {\c_@@_fallback_cmyk_tl, \c_@@_fallback_gray_tl, \c_@@_fallback_rgb_tl}
-% For every colorspace, we define one of the base colorspaces as a fallback.
-% The base colorspaces themselves are their own fallback.
-% \begin{macrocode}
-\tl_const:Nn \c_@@_fallback_cmyk_tl { cmyk }
-\tl_const:Nn \c_@@_fallback_gray_tl { gray }
-\tl_const:Nn \c_@@_fallback_rgb_tl { rgb }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\g_@@_colorants_prop}
-% Mapping from names to colorants.
-% \begin{macrocode}
-\prop_new:N \g_@@_colorants_prop
-\prop_gput:Nnn \g_@@_colorants_prop { black } { Black }
-\prop_gput:Nnn \g_@@_colorants_prop { blue } { Blue }
-\prop_gput:Nnn \g_@@_colorants_prop { cyan } { Cyan }
-\prop_gput:Nnn \g_@@_colorants_prop { green } { Green }
-\prop_gput:Nnn \g_@@_colorants_prop { magenta } { Magenta }
-\prop_gput:Nnn \g_@@_colorants_prop { none } { None }
-\prop_gput:Nnn \g_@@_colorants_prop { red } { Red }
-\prop_gput:Nnn \g_@@_colorants_prop { yellow } { Yellow }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}
-% {
-% \c_@@_model_whitepoint_CIELAB_a_tl ,
-% \c_@@_model_whitepoint_CIELAB_b_tl ,
-% \c_@@_model_whitepoint_CIELAB_e_tl ,
-% \c_@@_model_whitepoint_CIELAB_d50_tl ,
-% \c_@@_model_whitepoint_CIELAB_d55_tl ,
-% \c_@@_model_whitepoint_CIELAB_d65_tl ,
-% \c_@@_model_whitepoint_CIELAB_d75_tl
-% }
-% Whitepoint data for the CIELAB profiles.
-% \begin{macrocode}
-\tl_const:Nn \c_@@_model_whitepoint_CIELAB_a_tl { 1.0985 ~ 1 ~ 0.3558 }
-\tl_const:Nn \c_@@_model_whitepoint_CIELAB_b_tl { 0.9807 ~ 1 ~ 1.1822 }
-\tl_const:Nn \c_@@_model_whitepoint_CIELAB_e_tl { 1 ~ 1 ~ 1 }
-\tl_const:cn { c_@@_model_whitepoint_CIELAB_d50_tl } { 0.9642 ~ 1 ~ 0.8251 }
-\tl_const:cn { c_@@_model_whitepoint_CIELAB_d55_tl } { 0.9568 ~ 1 ~ 0.9214 }
-\tl_const:cn { c_@@_model_whitepoint_CIELAB_d65_tl } { 0.9504 ~ 1 ~ 1.0888 }
-\tl_const:cn { c_@@_model_whitepoint_CIELAB_d75_tl } { 0.9497 ~ 1 ~ 1.2261 }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\c_@@_model_range_CIELAB_tl}
-% The range for CIELAB color spaces.
-% \begin{macrocode}
-\tl_const:Nn \c_@@_model_range_CIELAB_tl { 0 ~ 100 ~ -128 ~ 127 ~ -128 ~ 127 }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\g_@@_alternative_model_prop}
-% For tracking the alternative model set up for separations, etc.
-% \begin{macrocode}
-\prop_new:N \g_@@_alternative_model_prop
-\clist_map_inline:nn { cyan , magenta , yellow , black }
- { \prop_gput:Nnn \g_@@_alternative_model_prop {#1} { cmyk } }
-\clist_map_inline:nn { red , green , blue }
- { \prop_gput:Nnn \g_@@_alternative_model_prop {#1} { rgb } }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\g_@@_alternative_values_prop}
-% Same for the values: a bit more involved.
-% \begin{macrocode}
-\prop_new:N \g_@@_alternative_values_prop
-\prop_gput:Nnn \g_@@_alternative_values_prop { cyan } { 1 , 0 , 0 , 0 }
-\prop_gput:Nnn \g_@@_alternative_values_prop { magenta } { 0 , 1 , 0 , 0 }
-\prop_gput:Nnn \g_@@_alternative_values_prop { yellow } { 0 , 0 , 1 , 0 }
-\prop_gput:Nnn \g_@@_alternative_values_prop { black } { 0 , 0 , 0 , 1 }
-\prop_gput:Nnn \g_@@_alternative_values_prop { red } { 1 , 0 , 0 }
-\prop_gput:Nnn \g_@@_alternative_values_prop { green } { 0 , 1 , 0 }
-\prop_gput:Nnn \g_@@_alternative_values_prop { blue } { 0 , 0 , 1 }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\color_model_new:nnn, \@@_model_new:nnn}
-% Set up a new model: in general this has to be handled by a family-dependent
-% function. To avoid some \enquote{interesting} questions with casing, we
-% fold the case of the family name. The key--value list should always be
-% present, so we convert it up-front to a |prop|, then deal with the detail
-% on a per-family basis.
-% \begin{macrocode}
-\cs_new_protected:Npn \color_model_new:nnn #1#2#3
- {
- \exp_args:Nee \@@_model_new:nnn
- { \tl_to_str:n {#1} }
- { \str_casefold:n {#2} } {#3}
- }
-\cs_new_protected:Npn \@@_model_new:nnn #1#2#3
- {
- \cs_if_exist:cTF { @@_parse_model_ #1 :w }
- {
- \msg_error:nnn { color } { model-already-defined } {#1}
- }
- {
- \cs_if_exist:cTF { @@_model_ #2 :n }
- {
- \prop_set_from_keyval:Nn \l_@@_internal_prop {#3}
- \use:c { @@_model_ #2 :n } {#1}
- }
- {
- \msg_error:nnn { color } { unknown-model-type } {#2}
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_model_init:nnn, \@@_model_init:nne}
-% A shared auxiliary to do the basics of setting up a new model: reserve a
-% number, create a white-equivalent, set up links to the backend.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_model_init:nnn #1#2#3
- {
- \int_gincr:N \g_@@_model_int
- \clist_map_inline:nn { fill , stroke , select }
- {
- \cs_new_protected:cpe { @@_backend_ ##1 _ #1 :n } ####1
- {
- \exp_not:c { @@_backend_ ##1 _ #2 :nn }
- { color \int_use:N \g_@@_model_int } {####1}
- }
- }
- \cs_new_protected:cpe { @@_model_ #1 _white: }
- {
- \prop_put:Nnn \exp_not:N \l_@@_named_white_prop {#1}
- { \exp_not:n {#3} }
- \exp_not:N \int_compare:nNnF { \tex_currentgrouplevel:D } = 0
- { \group_insert_after:N \exp_not:c { @@_model_ #1 _ white: } }
- }
- \use:c { @@_model_ #1 _white: }
- }
-\cs_generate_variant:Nn \@@_model_init:nnn { nne }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_model_separation:n}
-% \begin{macro}{\@@_model_separation:nn}
-% \begin{macro}{\@@_model_separation:nnn}
-% \begin{macro}{\@@_model_separation:w}
-% \begin{macro}
-% {
-% \@@_model_separation_cmyk:nnnnnn ,
-% \@@_model_separation_gray:nnnnnn ,
-% \@@_model_separation_rgb:nnnnnn
-% }
-% \begin{macro}{\@@_model_convert:nnn}
-% \begin{macro}{\@@_model_separation_CIELAB:nnnnnn}
-% \begin{macro}{\@@_model_separation_CIELAB:nnnnnnn}
-% Separations must have a \enquote{real} name, which is pretty easy to find.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_model_separation:n #1
- {
- \prop_get:NnNTF \l_@@_internal_prop { name }
- \l_@@_internal_tl
- {
- \exp_args:NV \@@_model_separation:nn
- \l_@@_internal_tl {#1}
- }
- {
- \msg_error:nnn { color }
- { separation-requires-name } {#1}
- }
- }
-% \end{macrocode}
-% We have two keys to find at this stage: the alternative space model
-% and linked values.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_model_separation:nn #1#2
- {
- \prop_get:NnNTF \l_@@_internal_prop { alternative-model }
- \l_@@_internal_tl
- {
- \exp_args:NV \@@_model_separation:nnn
- \l_@@_internal_tl {#2} {#1}
- }
- {
- \msg_error:nnn { color }
- { separation-alternative-model } {#2}
- }
- }
-\cs_new_protected:Npn \@@_model_separation:nnn #1#2#3
- {
- \cs_if_exist:cTF { @@_model_separation_ #1 :nnnnnn }
- {
- \prop_get:NnNTF \l_@@_internal_prop { alternative-values }
- \l_@@_internal_tl
- {
- \exp_after:wN \@@_model_separation:w \l_@@_internal_tl
- , 0 , 0 , 0 , 0 \s_@@_stop {#2} {#3} {#1}
- }
- {
- \msg_error:nnn { color }
- { separation-alternative-values } {#2}
- }
- }
- {
- \msg_error:nnn { color }
- { unknown-alternative-model } {#1}
- }
- }
-% \end{macrocode}
-% As each alternative space leads to a different requirement for conversion,
-% and as there are only a small number of choices, we manually split the data
-% and then set up. Notice that mixing tints is really just the same
-% as mixing \texttt{gray}. The \texttt{white} color is special, as it allows
-% tints to be adjusted without an additional color space. To make sure the
-% data is set for that at all group levels, we need to work on a per-level
-% basis. Within the output, only the set-up needs the \enquote{real} name
-% of the colorspace: we use a simple tracking number for general usage
-% as this is a clear namespace without issues of escaping chars.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_model_separation:w
- #1 , #2 , #3 , #4 , #5 \s_@@_stop #6#7#8
- {
- \@@_model_init:nnn {#6} { separation } { 0 }
- \cs_new_eq:cN { @@_parse_mix_ #6 :nw } \@@_parse_mix_gray:nw
- \cs_new:cpn { @@_parse_model_ #6 :w } ##1 , ##2 \s_@@_stop
- { {#6} { \@@_parse_number:n {##1} } }
- \use:c { @@_model_separation_ #8 :nnnnnn }
- {#6} {#7} {#1} {#2} {#3} {#4}
- \prop_gput:Nnn \g_@@_alternative_model_prop {#6} {#8}
- \prop_gput:Nne \g_@@_colorants_prop {#6}
- { \str_convert_pdfname:n {#7} }
- }
-\cs_new_protected:Npn \@@_model_separation_cmyk:nnnnnn #1#2#3#4#5#6
- {
- \tl_const:cn { c_@@_fallback_ #1 _tl } { cmyk }
- \cs_new:cpn { @@_convert_ #1 _cmyk:w } ##1 \s_@@_stop
- {
- \fp_eval:n {##1 * #3} ~
- \fp_eval:n {##1 * #4} ~
- \fp_eval:n {##1 * #5} ~
- \fp_eval:n {##1 * #6}
- }
- \cs_new:cpn { @@_convert_cmyk_ #1 :w } ##1 \s_@@_stop { 1 }
- \prop_gput:Nnn \g_@@_alternative_values_prop {#1} { #3 , #4 , #5 , #6 }
- \@@_backend_separation_init:nnnnn {#2} { /DeviceCMYK } { }
- { 0 ~ 0 ~ 0 ~ 0 } { #3 ~ #4 ~ #5 ~ #6 }
- }
-\cs_new_protected:Npn \@@_model_separation_rgb:nnnnnn #1#2#3#4#5#6
- {
- \tl_const:cn { c_@@_fallback_ #1 _tl } { rgb }
- \cs_new:cpn { @@_convert_ #1 _rgb:w } ##1 \s_@@_stop
- {
- \fp_eval:n {##1 * #3} ~
- \fp_eval:n {##1 * #4} ~
- \fp_eval:n {##1 * #5}
- }
- \cs_new:cpn { @@_convert_rgb_ #1 :w } ##1 \s_@@_stop { 1 }
- \prop_gput:Nnn \g_@@_alternative_values_prop {#1} { #3 , #4 , #5 }
- \@@_backend_separation_init:nnnnn {#2} { /DeviceRGB } { }
- { 0 ~ 0 ~ 0 } { #3 ~ #4 ~ #5 }
- }
-\cs_new_protected:Npn \@@_model_separation_gray:nnnnnn #1#2#3#4#5#6
- {
- \tl_const:cn { c_@@_fallback_ #1 _tl } { gray }
- \cs_new:cpn { @@_convert_ #1 _gray:w } ##1 \s_@@_stop
- { \fp_eval:n {##1 * #3} }
- \cs_new:cpn { @@_convert_gray_ #1 :w } ##1 \s_@@_stop { 1 }
- \prop_gput:Nnn \g_@@_alternative_values_prop {#1} {#3}
- \@@_backend_separation_init:nnnnn {#2} { /DeviceGray } { } { 0 } {#3}
- }
-% \end{macrocode}
-% Generic model conversion \emph{via} an alternative intermediate.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_model_convert:nnn #1#2#3
- {
- \cs_new:cpe { @@_convert_ #1 _ #3 :w } ##1 \s_@@_stop
- {
- \exp_not:N \exp_args:NNe \exp_not:N \use:nn
- \exp_not:c { @@_convert_ #2 _ #3 :w }
- { \exp_not:c { @@_convert_ #1 _ #2 :w } ##1 \s_@@_stop }
- \c_space_tl \exp_not:N \s_@@_stop
- }
- }
-% \end{macrocode}
-% Setting up for CIELAB needs a bit more work: there is the illuminant and
-% the need for an appropriate object.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_model_separation_CIELAB:nnnnnn #1#2#3#4#5#6
- {
- \prop_get:NnNF \l_@@_internal_prop { illuminant }
- \l_@@_internal_tl
- {
- \msg_error:nnn { color }
- { CIELAB-requires-illuminant } {#1}
- \tl_set:Nn \l_@@_internal_tl { d50 }
- }
- \exp_args:NV \@@_model_separation_CIELAB:nnnnnnn
- \l_@@_internal_tl {#1} {#2} {#3} {#4} {#5} {#6}
- }
-% \end{macrocode}
-% If a CIELAB space is being set up, we need the illuminant, then create
-% the appropriate set up. At present, this doesn't include \texttt{BlackPoint}
-% or \texttt{Range} data, but that may be added later. As CIELAB colors
-% cannot be converted to anything else, we fallback to producing black in the
-% gray colorspace: the user should set up a second model for colors set up this way.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_model_separation_CIELAB:nnnnnnn #1#2#3#4#5#6#7
- {
- \tl_if_exist:cTF { c_@@_model_whitepoint_CIELAB_ #1 _tl }
- {
- \@@_backend_separation_init_CIELAB:nnn {#1} {#3} { #4 ~ #5 ~ #6 }
- \tl_const:cn { c_@@_fallback_ #2 _tl } { gray }
- \cs_new:cpn { @@_convert_ #2 _gray:w } ##1 \s_@@_stop
- { 0 }
- \cs_new:cpn { @@_convert_gray_ #2 :w } ##1 \s_@@_stop
- { 1 }
- }
- {
- \msg_error:nnn { color }
- { unknown-CIELAB-illuminant } {#1}
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_model_devicen:n}
-% \begin{macro}{\@@_model_devicen:nn}
-% \begin{macro}{\@@_model_devicen:nnn}
-% \begin{macro}{\@@_model_devicen:nnnn}
-% \begin{macro}
-% {
-% \@@_model_devicen_parse_1:nn ,
-% \@@_model_devicen_parse_2:nn ,
-% \@@_model_devicen_parse_3:nn ,
-% \@@_model_devicen_parse_4:nn ,
-% \@@_model_devicen_parse_generic:nn
-% }
-% \begin{macro}[EXP]{\@@_model_devicen_parse:nw}
-% \begin{macro}[EXP]{\@@_model_devicen_mix:nw}
-% \begin{macro}{\@@_model_devicen_init:nnn}
-% \begin{macro}{\@@_model_devicen_init:nnnn}
-% \begin{macro}{\@@_model_devicen_tranform:w}
-% \begin{macro}
-% {
-% \@@_model_devicen_tranform_1:nnnnn ,
-% \@@_model_devicen_tranform_3:nnnnn ,
-% \@@_model_devicen_tranform_4:nnnnn ,
-% }
-% \begin{macro}{\@@_model_devicen_tranform:nnn}
-% \begin{macro}[EXP]{\@@_model_devicen_colorant:n}
-% \begin{macro}{\@@_model_devicen_convert:nnn}
-% \begin{macro}
-% {
-% \@@_model_devicen_convert_cmyk:n ,
-% \@@_model_devicen_convert_gray:n ,
-% \@@_model_devicen_convert_rgb:n
-% }
-% \begin{macro}{\@@_model_devicen_convert:nnnn}
-% \begin{macro}[EXP]{\@@_model_devicen_convert:n, \@@_model_devicen_convert_aux:n}
-% \begin{macro}[EXP]{\@@_model_devicen_convert:w}
-% \begin{macro}[EXP]{\@@_convert_devicen_cmyk:nnnnw}
-% \begin{macro}[EXP]{\@@_convert_devicen_cmyk:nnnnnnnnn}
-% \begin{macro}[EXP]{\@@_convert_devicen_cmyk_aux:nnnnw}
-% \begin{macro}[EXP]{\@@_convert_devicen_gray:nw}
-% \begin{macro}[EXP]{\@@_convert_devicen_gray:nnn}
-% \begin{macro}[EXP]{\@@_convert_devicen_gray_aux:nw}
-% \begin{macro}[EXP]{\@@_convert_devicen_rgb:nnnw}
-% \begin{macro}[EXP]{\@@_convert_devicen_rgb:nnnnnnn}
-% \begin{macro}[EXP]{\@@_convert_devicen_rgb_aux:nnnw}
-% We require a list of component names here: one might call them colorants,
-% but it's convenient to use \TeX{} names instead so we slightly adjust the
-% terminology.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_model_devicen:n #1
- {
- \prop_get:NnNTF \l_@@_internal_prop { names }
- \l_@@_internal_tl
- {
- \exp_args:NV \@@_model_devicen:nn
- \l_@@_internal_tl {#1}
- }
- {
- \msg_error:nnn { color }
- { DeviceN-requires-names } {#1}
- }
- }
-% \end{macrocode}
-% All valid models will have an alternative listed, either hard-coded for
-% the core device ones, or dynamically added for Separations, etc.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_model_devicen:nn #1#2
- {
- \tl_clear:N \l_@@_model_tl
- \clist_map_inline:nn {#1}
- {
- \prop_get:NnNTF \g_@@_alternative_model_prop {##1}
- \l_@@_internal_tl
- {
- \tl_if_empty:NTF \l_@@_model_tl
- { \tl_set_eq:NN \l_@@_model_tl \l_@@_internal_tl }
- {
- \str_if_eq:VVF \l_@@_model_tl \l_@@_internal_tl
- {
- \msg_error:nnn { color }
- { DeviceN-inconsistent-alternative }
- {#2}
- \clist_map_break:n { \use_none:nnnn }
- }
- }
- }
- {
- \str_if_eq:nnF {##1} { none }
- {
- \msg_error:nnn { color }
- { DeviceN-no-alternative }
- {#2}
- }
- }
- }
- \tl_if_empty:NTF \l_@@_model_tl
- {
- \msg_error:nnn { color }
- { DeviceN-no-alternative } {#2}
- }
- { \exp_args:NV \@@_model_devicen:nnn \l_@@_model_tl {#1} {#2} }
- }
-% \end{macrocode}
-% We now complete the data we require by first finding out how many
-% colorants there are, then moving on to begin constructing the function
-% required to map to the alternative color space.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_model_devicen:nnn #1#2#3
- {
- \exp_args:Ne \@@_model_devicen:nnnn
- { \clist_count:n {#2} } {#1} {#2} {#3}
- }
-% \end{macrocode}
-% At this stage, we have checked everything is in place, so we can set up
-% the \TeX{} and backend data structures. As for separations, it's not really
-% possible in general to have a fallback, so we simply provide
-% \enquote{black} for each element.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_model_devicen:nnnn #1#2#3#4
- {
- \@@_model_init:nne {#4} { devicen }
- {
- 0 \prg_replicate:nn { #1 - 1 } { ~ 0 }
- }
- \cs_if_exist_use:cF { @@_model_devicen_parse_ #1 :nn }
- { \@@_model_devicen_parse_generic:nn }
- {#4} {#1}
- \@@_model_devicen_init:nnn {#1} {#2} {#3}
- \@@_model_devicen_convert:nnne {#4} {#2} {#3}
- {
- 1 \prg_replicate:nn { #1 - 1 } { ~ 1 }
- }
- }
-% \end{macrocode}
-% For short lists of DeviceN colors, we can use hand-tuned parsing. This
-% lines up with other models, where we allow for up to four components. For
-% larger spaces, rather than limit artificially, we use a somewhat slow
-% approach based on open-ended commas-lists.
-% \begin{macrocode}
-\cs_new_protected:cpn { @@_model_devicen_parse_1:nn } #1#2
- {
- \cs_new:cpn { @@_parse_model_ #1 :w } ##1 , ##2 \s_@@_stop
- { {#1} { \@@_parse_number:n {##1} } }
- \cs_new_eq:cN { @@_parse_mix_ #1 :nw } \@@_parse_mix_gray:nw
- }
-\cs_new_protected:cpn { @@_model_devicen_parse_2:nn } #1#2
- {
- \cs_new:cpn { @@_parse_model_ #1 :w } ##1 , ##2 , ##3 \s_@@_stop
- { {#1} { \@@_parse_number:n {##1} ~ \@@_parse_number:n {##2} } }
- \cs_new:cpn { @@_parse_mix_ #1 :nw }
- ##1##2 ~ ##3 \s_@@_mark ##4 ~ ##5 \s_@@_stop
- {
- \fp_eval:n { ##2 * ##1 + ##4 * ( 1 - ##1 ) } \c_space_tl
- \fp_eval:n { ##3 * ##1 + ##5 * ( 1 - ##1 ) }
- }
- }
-\cs_new_protected:cpn { @@_model_devicen_parse_3:nn } #1#2
- {
- \cs_new:cpn { @@_parse_model_ #1 :w } ##1 , ##2 , ##3 , ##4 \s_@@_stop
- {
- {#1}
- {
- \@@_parse_number:n {##1} ~
- \@@_parse_number:n {##2} ~
- \@@_parse_number:n {##3}
- }
- }
- \cs_new_eq:cN { @@_parse_mix_ #1 :nw } \@@_parse_mix_rgb:nw
- }
-\cs_new_protected:cpn { @@_model_devicen_parse_4:nn } #1#2
- {
- \cs_new:cpn { @@_parse_model_ #1 :w }
- ##1 , ##2 , ##3 , ##4 , ##5 \s_@@_stop
- {
- {#1}
- {
- \@@_parse_number:n {##1} ~
- \@@_parse_number:n {##2} ~
- \@@_parse_number:n {##3} ~
- \@@_parse_number:n {##4}
- }
- }
- \cs_new_eq:cN { @@_parse_mix_ #1 :nw } \@@_parse_mix_cmyk:nw
- }
-\cs_new_protected:Npn \@@_model_devicen_parse_generic:nn #1#2
- {
- \cs_new:cpn { @@_parse_model_ #1 :w } ##1 , ##2 \s_@@_stop
- {
- {#1}
- { \@@_model_devicen_parse:nw {#2} ##1 , ##2 , \q_nil , \s_@@_stop }
- }
- \cs_new:cpe { @@_parse_mix_ #1 :nw }
- ##1 ##2 \s_@@_mark ##3 \s_@@_stop
- {
- \exp_not:N \@@_model_devicen_mix:nw {##1}
- ##2 \c_space_tl \exp_not:N \q_nil \c_space_tl \exp_not:N \s_@@_mark
- ##3 \c_space_tl \exp_not:N \q_nil \c_space_tl \exp_not:N \s_@@_stop
- }
- }
-\cs_new:Npn \@@_model_devicen_parse:nw #1#2 , #3 \s_@@_stop
- {
- \int_compare:nNnT {#1} > 0
- {
- \quark_if_nil:nTF {#2}
- { \prg_replicate:nn {#1} { 0 ~ } }
- {
- \@@_parse_number:n {#2}
- \int_compare:nNnT {#1} > 1 { ~ }
- \exp_args:Nf \@@_model_devicen_parse:nw
- { \int_eval:n { #1 - 1 } } #3 \s_@@_stop
- }
- }
- }
-\cs_new:Npn \@@_model_devicen_mix:nw #1#2 ~ #3 \s_@@_mark #4 ~ #5 \s_@@_stop
- {
- \fp_eval:n { #2 * #1 + #4 * ( 1 - #1 ) }
- \quark_if_nil:oF { \tl_head:w #3 \q_stop }
- {
- \c_space_tl
- \@@_model_devicen_mix:nw {#1} #3 \s_@@_mark #5 \s_@@_stop
- }
- }
-% \end{macrocode}
-% To construct the tint transformation, we have to use PostScript. The
-% aim is to have the final tint for each device colorant as
-% \[
-% 1 - \prod_{n} (1 - X_{n} D_{X_{n}})
-% \]
-% where $X$ is a DeviceN colorant and $D$ is the amount of device colorant
-% that the DeviceN colorant maps to. At the start of the process, the
-% PostScript stack will contain the $X_{n}$ values, whilst we have the
-% $D$ values on a per-DeviceN colorant basis. The more convenient approach
-% for us is therefore to take each DeviceN colorant in turn and find the
-% value $1 - X_{n} D_{X_{n}}$, multiplying as we go, and finalise with the
-% subtraction. That contrasts to \pkg{colorspace}: it splits the process
-% up by process color, which works better when you have a fixed list
-% of colorants. (\pkg{colorspace} only supports up to $4$ DeviceN colors,
-% and only \texttt{cmyk} as the alternative space.) To set this up,
-% we first need to know the number of values in the target color space:
-% this is easily handled as there are a very small range of possibles.
-% Once we have that information, it's relatively easy to build the required
-% PostScript using some generic code.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_model_devicen_init:nnn #1#2#3
- {
- \exp_args:Ne \@@_model_devicen_init:nnnn
- {
- \str_case:nn {#2}
- {
- { cmyk } { 4 }
- { gray } { 1 }
- { rgb } { 3 }
- }
- }
- {#1} {#2} {#3}
- }
-% \end{macrocode}
-% As we always need to split the alternative values into parts, we use a
-% shared auxiliary and only use a minimal difference between code paths.
-% Construction of the tint transformation is as far as possible done using
-% loops, which means there are some inefficiencies for device colors in
-% the \texttt{DeviceN} space: we roll the stack one-at-a-time even if there
-% is a potential shortcut. However, that way there is nothing to special-case.
-% Once this is sorted, we can write the tint transform object, which will
-% remain as the last object until we sort out the final step: the colorant
-% list.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_model_devicen_init:nnnn #1#2#3#4
- {
- \tl_set:Ne \l_@@_internal_tl
- { \prg_replicate:nn {#1} { 1.0 ~ } }
- \int_zero:N \l_@@_internal_int
- \clist_map_inline:nn {#4}
- {
- \int_incr:N \l_@@_internal_int
- \prop_get:NnN \g_@@_alternative_values_prop {##1}
- \l_@@_value_tl
- \exp_after:wN \@@_model_devicen_transform:w
- \l_@@_value_tl , 0 , 0 , 0 , \s_@@_stop {#1} {#2}
- }
- \tl_put_right:Ne \l_@@_internal_tl
- {
- \prg_replicate:nn {#1}
- { neg ~ 1.0 ~ add ~ #1 ~ -1 ~ roll ~ }
- \int_eval:n { #2 + #1 } ~ #1 ~ roll
- \prg_replicate:nn {#2} { ~ pop } ~
- #1 ~ 1 ~ roll
- }
- \use:e
- {
- \@@_backend_devicen_init:nnn
- {
- \clist_map_function:nN {#4}
- \@@_model_devicen_colorant:n
- }
- {
- \str_case:nn {#3}
- {
- { cmyk } { /DeviceCMYK }
- { gray } { /DeviceGray }
- { rgb } { /DeviceRGB }
- }
- }
- { \exp_not:V \l_@@_internal_tl }
- }
- }
-\cs_new_protected:Npn \@@_model_devicen_transform:w
- #1 , #2 , #3 , #4 , #5 \s_@@_stop #6#7
- {
- \use:c { @@_model_devicen_transform_ #6 :nnnnn }
- {#1} {#2} {#3} {#4} {#7}
- }
-\cs_new_protected:cpn { @@_model_devicen_transform_1:nnnnn } #1#2#3#4#5
- { \@@_model_devicen_transform:nnn {#5} { 1 } {#1} }
-\cs_new_protected:cpn { @@_model_devicen_transform_3:nnnnn } #1#2#3#4#5
- {
- \clist_map_inline:nn { #1 , #2 , #3 }
- { \@@_model_devicen_transform:nnn {#5} { 3 } {##1} }
- }
-\cs_new_protected:cpn { @@_model_devicen_transform_4:nnnnn } #1#2#3#4#5
- {
- \clist_map_inline:nn { #1 , #2 , #3 , #4 }
- { \@@_model_devicen_transform:nnn {#5} { 4 } {##1} }
- }
-\cs_new_protected:Npn \@@_model_devicen_transform:nnn #1#2#3
- {
- \tl_put_right:Ne \l_@@_internal_tl
- {
- \fp_compare:nNnF {#3} = \c_zero_fp
- {
- \int_eval:n { #1 - \l_@@_internal_int + #2 } ~ index ~
- -#3 ~ mul ~ 1.0 ~ add ~ mul ~
- }
- #2 ~ -1 ~ roll ~
- }
- }
-\cs_new:Npn \@@_model_devicen_colorant:n #1
- {
- / \prop_item:Nn \g_@@_colorants_prop {#1} ~
- }
-% \end{macrocode}
-% Here we need to set up conversion from the DeviceN space to the alternative
-% at the \TeX{} level. This also means supplying methods for inter-converting
-% to other parameter-based spaces. Essentially the approach is exactly the same
-% as the PostScript, just expressed in \TeX{} terms.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_model_devicen_convert:nnnn #1#2#3
- {
- \use:c { @@_model_devicen_convert_ #2 :nnn } {#1} {#3}
- }
-\cs_generate_variant:Nn \@@_model_devicen_convert:nnnn { nnne }
-\cs_new_protected:Npn \@@_model_devicen_convert_cmyk:nnn #1#2
- {
- \tl_const:cn { c_@@_fallback_ #1 _tl } { cmyk }
- \@@_model_devicen_convert:nnnnn {#1} { cmyk } { 4 } {#2}
- }
-\cs_new_protected:Npn \@@_model_devicen_convert_gray:nnn #1#2
- {
- \tl_const:cn { c_@@_fallback_ #1 _tl } { gray }
- \@@_model_devicen_convert:nnnnn {#1} { gray } { 1 } {#2}
- }
-\cs_new_protected:Npn \@@_model_devicen_convert_rgb:nnn #1#2
- {
- \tl_const:cn { c_@@_fallback_ #1 _tl } { rgb }
- \@@_model_devicen_convert:nnnnn {#1} { rgb } { 3 } {#2}
- }
-\cs_new_protected:Npn \@@_model_devicen_convert:nnnnn #1#2#3#4#5
- {
- \cs_new:cpn { @@_convert_ #2 _ #1 :w } ##1 \s_@@_stop {#5}
- \cs_new:cpe { @@_convert_ #1 _ #2 :w } ##1 \s_@@_stop
- {
- \exp_not:c { @@_convert_devicen_ #2 : \prg_replicate:nn {#3} { n } w }
- \prg_replicate:nn {#3} { { 1 } }
- ##1 ~ \exp_not:N \s_@@_mark
- \clist_map_function:nN {#4} \@@_model_devicen_convert:n
- {}
- \exp_not:N \s_@@_stop
- }
- }
-\cs_new:Npn \@@_model_devicen_convert:n #1
- {
- {
- \exp_args:Ne \@@_model_devicen_convert_aux:n
- { \prop_item:Nn \g_@@_alternative_values_prop {#1} }
- }
- }
-\cs_new:Npn \@@_model_devicen_convert_aux:n #1
- { \@@_model_devicen_convert_aux:w #1 , , , , \s_@@_stop }
-\cs_new:Npn \@@_model_devicen_convert_aux:w #1 , #2 , #3 , #4 , #5 \s_@@_stop
- {
- {#1}
- \tl_if_blank:nF {#2}
- {
- {#2}
- \tl_if_blank:nF {#3}
- {
- {#3}
- \tl_if_blank:nF {#4} { {#4} }
- }
- }
- }
-\cs_new:Npn \@@_convert_devicen_cmyk:nnnnw
- #1#2#3#4#5 ~ #6 \s_@@_mark #7#8 \s_@@_stop
- {
- \@@_convert_devicen_cmyk:nnnnnnnnn {#5} {#1} {#2} {#3} {#4} #7
- #6 \s_@@_mark #8 \s_@@_stop
- }
-\cs_new:Npn \@@_convert_devicen_cmyk:nnnnnnnnn #1#2#3#4#5#6#7#8#9
- {
- \use:e
- {
- \exp_not:N \@@_convert_devicen_cmyk_aux:nnnnw
- { \fp_eval:n { #2 * (1 - (#1 * #6)) } }
- { \fp_eval:n { #3 * (1 - (#1 * #7)) } }
- { \fp_eval:n { #4 * (1 - (#1 * #8)) } }
- { \fp_eval:n { #5 * (1 - (#1 * #9)) } }
- }
- }
-\cs_new:Npn \@@_convert_devicen_cmyk_aux:nnnnw
- #1#2#3#4 #5 \s_@@_mark #6 \s_@@_stop
- {
- \tl_if_blank:nTF {#5}
- {
- \fp_eval:n { 1 - #1 } ~
- \fp_eval:n { 1 - #2 } ~
- \fp_eval:n { 1 - #3 } ~
- \fp_eval:n { 1 - #4 }
- }
- {
- \@@_convert_devicen_cmyk:nnnnw {#1} {#2} {#3} {#4}
- #5 \s_@@_mark #6 \s_@@_stop
- }
- }
-\cs_new:Npn \@@_convert_devicen_gray:nw
- #1#2 ~ #3 \s_@@_mark #4#5 \s_@@_stop
- {
- \@@_convert_devicen_gray:nnn {#2} {#1} #4
- #3 \s_@@_mark #5 \s_@@_stop
- }
-\cs_new:Npn \@@_convert_devicen_gray:nnn #1#2#3
- {
- \exp_arsgs:Ne \@@_convert_devicen_gray_aux:nw
- { \fp_eval:n { #2 * (1 - (#1 * #3)) } }
- }
-\cs_new:Npn \@@_convert_devicen_gray_aux:nw
- #1 #2 \s_@@_mark #3 \s_@@_stop
- {
- \tl_if_blank:nTF {#2}
- { \fp_eval:n { 1 - #1 } }
- {
- \@@_convert_devicen_gray:nw {#1}
- #2 \s_@@_mark #3 \s_@@_stop
- }
- }
-\cs_new:Npn \@@_convert_devicen_rgb:nnnw
- #1#2#3#4 ~ #5 \s_@@_mark #6#7 \s_@@_stop
- {
- \@@_convert_devicen_rgb:nnnnnnn {#4} {#1} {#2} {#3} #6
- #5 \s_@@_mark #7 \s_@@_stop
- }
-\cs_new:Npn \@@_convert_devicen_rgb:nnnnnnn #1#2#3#4#5#6#7
- {
- \use:e
- {
- \exp_not:N \@@_convert_devicen_rgb_aux:nnnw
- { \fp_eval:n { #2 * (1 - (#1 * #5)) } }
- { \fp_eval:n { #3 * (1 - (#1 * #6)) } }
- { \fp_eval:n { #4 * (1 - (#1 * #7)) } }
- }
- }
-\cs_new:Npn \@@_convert_devicen_rgb_aux:nnnw
- #1#2#3 #4 \s_@@_mark #5 \s_@@_stop
- {
- \tl_if_blank:nTF {#4}
- {
- \fp_eval:n { 1 - #1 } ~
- \fp_eval:n { 1 - #2 } ~
- \fp_eval:n { 1 - #3 }
- }
- {
- \@@_convert_devicen_rgb:nnnw {#1} {#2} {#3}
- #4 \s_@@_mark #5 \s_@@_stop
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{variable}{\c_@@_icc_colorspace_signatures_prop}
-% The signatures in the ICC file header indicating the underlying
-% colorspace. We map it to three values: The number of components,
-% the values corresponding to white, and the range.
-% \begin{macrocode}
-\prop_const_from_keyval:Nn \c_@@_icc_colorspace_signatures_prop
- {
-% Gray
- 47524159 = {1} {1} {0} {},
-% RGB
- 52474220 = {3} {0~0~0} {1~1~1} {},
-% CMYK
- 434D594B = {4} {0~0~0~1} {0~0~0~0} {},
-% Lab
- 4C616220 = {3} {0~0~0} {100~0~0} {0~100~-128~127~-128~127}
- }
-% \end{macrocode}
-% \end{variable}
-% \begin{macro}{\@@_model_iccbased:n}
-% \begin{macro}{\@@_model_iccbased:nn}
-% \begin{macro}{\@@_model_iccbased:nnn, \@@_model_iccbased_aux:nnn}
-% For an ICC profile, we need a file name and a number of components. The
-% file name is processed here so the backend can treat it as a string.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_model_iccbased:n #1
- {
- \prop_get:NnNTF \l_@@_internal_prop { file }
- \l_@@_internal_tl
- {
- \exp_args:NV \@@_model_iccbased:nn
- \l_@@_internal_tl {#1}
- }
- {
- \msg_error:nnn { color }
- { ICCBased-requires-file } {#1}
- }
- }
-\cs_new_protected:Npn \@@_model_iccbased:nn #1#2
- {
- \prop_get:NeNTF \c_@@_icc_colorspace_signatures_prop
- { \file_hex_dump:nnn { #1 } { 17 } { 20 } } \l_@@_internal_tl
- {
- \exp_last_unbraced:NV \@@_model_iccbased_aux:nnnnnn
- \l_@@_internal_tl { #2 } { #1 }
- }
- {
- \msg_error:nnn { color }
- { ICCBased-unsupported-colorspace } {#2}
- }
- }
-% \end{macrocode}
-% Here, we can use the same internals as for DeviceN approach as we know the
-% number of components. No conversion is possible, so there is no need
-% to worry about that at all.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_model_iccbased_aux:nnnnnn #1#2#3#4#5#6
- {
- \@@_model_init:nnn {#5} { iccbased } {#3}
- \tl_const:cn { c_@@_fallback_ #5 _tl } { gray }
- \cs_new:cpn { @@_convert_ #5 _gray:w } ##1 \s_@@_stop { 0 }
- \cs_new:cpn { @@_convert_gray_ #5 :w } ##1 \s_@@_stop { #2 }
- \use:c { @@_model_devicen_parse_ #1 :nn } {#5} {#1}
- \exp_args:Ne \@@_backend_iccbased_init:nnn
- { \file_full_name:n {#6} } {#1} {#4}
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Applying profiles}
-%
-% \begin{macro}{\color_profile_apply:nn, \@@_profile_apply:nn}
-% \begin{macro}
-% {
-% \@@_profile_apply_gray:n ,
-% \@@_profile_apply_rgb:n ,
-% \@@_profile_apply_cmyk:n
-% }
-% With a limited range of outcomes, this is largely about getting data to the
-% backend.
-% \begin{macrocode}
-\cs_new_protected:Npn \color_profile_apply:nn #1#2
- {
- \exp_args:Ne \@@_profile_apply:nn
- { \file_full_name:n {#1} } {#2}
- }
-\cs_new_protected:Npn \@@_profile_apply:nn #1#2
- {
- \cs_if_exist_use:cF { @@_profile_apply_ \tl_to_str:n {#2} :n }
- {
- \msg_error:nnn { color } { ICC-Device-unknown } {#2}
- \use_none:n
- }
- {#1}
- }
-\cs_new_protected:Npn \@@_profile_apply_gray:n #1
- {
- \int_gincr:N \g_@@_model_int
- \@@_backend_iccbased_device:nnn {#1} { Gray } { 1 }
- }
-\cs_new_protected:Npn \@@_profile_apply_rgb:n #1
- {
- \int_gincr:N \g_@@_model_int
- \@@_backend_iccbased_device:nnn {#1} { RGB } { 3 }
- }
-\cs_new_protected:Npn \@@_profile_apply_cmyk:n #1
- {
- \int_gincr:N \g_@@_model_int
- \@@_backend_iccbased_device:nnn {#1} { CMYK } { 4 }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Diagnostics}
-%
-% \begin{macro}{\color_show:n, \color_log:n, \@@_show:Nn}
-% \begin{macro}[EXP]{\@@_show:n}
-% Extract the information about a color and format for the user: the approach
-% is similar to the keys module here.
-% \begin{macrocode}
-\cs_new_protected:Npn \color_show:n
- { \@@_show:Nn \msg_show:nneeee }
-\cs_new_protected:Npn \color_log:n
- { \@@_show:Nn \msg_log:nneeee }
-\cs_new_protected:Npn \@@_show:Nn #1#2
- {
- #1 { color } { show }
- {#2}
- {
- \color_if_exist:nT {#2}
- {
- \exp_args:Nv \@@_show:n { l_@@_named_ #2 _tl }
- \prop_map_function:cN
- { l_@@_named_ #2 _prop }
- \msg_show_item_unbraced:nn
- }
- }
- { }
- { }
- }
-\cs_new:Npn \@@_show:n #1
- {
- \msg_show_item_unbraced:nn { model } {#1}
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Messages}
-%
-% \begin{macrocode}
-\msg_new:nnnn { color } { CIELAB-requires-illuminant }
- { CIELAB~color~space~'#1'~require~an~illuminant. }
- {
- LaTeX~has~been~asked~to~create~a~separation~color~space~using~
- CIELAB~specifications,~but~no~\\ \\
- \iow_indent:n { illuminant~=~<basis> }
- \\ \\
- key~was~given~with~the~correct~information.~LaTeX~will~use~illuminant~
- 'd50'~for~recovery.
- }
-\msg_new:nnnn { color } { conversion-not-available }
- { No~model~conversion~available~from~'#1'~to~'#2'. }
- {
- LaTeX~has~been~asked~to~convert~a~color~from~model~'#1'~
- to~model'#2',~but~there~is~no~method~available~to~do~that.
- }
-\msg_new:nnnn { color } { DeviceN-inconsistent-alternative }
- { DeviceN~color~spaces~require~a~single~alternative~space. }
- {
- LaTeX~has~been~asked~to~create~a~DeviceN~color~space~'#1',~
- but~the~constituent~colors~do~not~have~a~common~alternative~
- color.
- }
-\msg_new:nnnn { color } { DeviceN-no-alternative }
- { DeviceN~color~spaces~require~an~alternative~space. }
- {
- LaTeX~has~been~asked~to~create~a~DeviceN~color~space~'#1',~
- but~the~constituent~colors~do~not~all~have~a~device-based~alternative.
- }
-\msg_new:nnnn { color } { DeviceN-requires-names }
- { DeviceN~color~space~'#1'~require~a~list~of~names. }
- {
- LaTeX~has~been~asked~to~create~a~DeviceN~color~space,~
- but~no~\\ \\
- \iow_indent:n { names~=~<names> }
- \\ \\
- key~was~given~with~the~correct~information.
- }
-\msg_new:nnnn { color } { ICC-Device-unknown }
- { Unknown~device~color~space~'#1'. }
- {
- LaTeX~has~been~asked~to~apply~an~ICC~profile~but~the~device~color~space~
- '#1'~is~unknown.
- }
-\msg_new:nnnn { color } { ICCBased-unsupported-colorspace }
- { ICCBased~color~space~'#1'~uses~an~unsupported~data~color~space. }
- {
- LaTeX~has~been~asked~to~create~a~ICCBased~colorspace,~but~the~
- used~data~colorspace~is~not~supported.~ICC~profiles~used~for~
- defining~a~ICCBased~colorspace~should~use~a~Lab,~RGB,~or~
- CMYK~data~colorspace.~LaTeX~will~ignore~this~request.
- }
-\msg_new:nnnn { color } { ICCBased-requires-file }
- { ICCBased~color~space~'#1'~require~an~file. }
- {
- LaTeX~has~been~asked~to~create~an~ICCBased~color~space,~but~no~\\ \\
- \iow_indent:n { file~=~<name> }
- \\ \\
- key~was~given~with~the~correct~information.~LaTeX~will~ignore~this~
- request.
- }
-\msg_new:nnnn { color } { model-already-defined }
- { Color~model~'#1'~already~defined. }
- {
- LaTeX~was~asked~to~define~a~new~color~model~called~'#1',~but~
- this~color~model~already~exists.
- }
-\msg_new:nnnn { color } { out-of-range }
- { Input~value~#1~out~of~range~[#2,~#3]. }
- {
- LaTeX~was~expecting~a~value~in~the~range~[#2,~#3]~as~part~of~a~color,~
- but~you~gave~#1.~LaTeX~will~assume~you~meant~the~limit~of~the~range~
- and~continue.
- }
-\msg_new:nnnn { color } { separation-alternative-model }
- { Separation~color~space~'#1'~require~an~alternative~model. }
- {
- LaTeX~has~been~asked~to~create~a~separation~color~space,~
- but~no~\\ \\
- \iow_indent:n { alternative-model~=~<model> }
- \\ \\
- key~was~given~with~the~correct~information.
- }
-\msg_new:nnnn { color } { separation-alternative-values }
- { Separation~color~space~'#1'~require~values~for~the~alternative~space. }
- {
- LaTeX~has~been~asked~to~create~a~separation~color~space,~
- but~no~\\ \\
- \iow_indent:n { alternative-values~=~<model> }
- \\ \\
- key~was~given~with~the~correct~information.
- }
-\msg_new:nnnn { color } { separation-requires-name }
- { Separation~color~space~'#1'~require~a~formal~name. }
- {
- LaTeX~has~been~asked~to~create~a~separation~color~space,~
- but~no~\\ \\
- \iow_indent:n { name~=~<formal~name> }
- \\ \\
- key~was~given~with~the~correct~information.
- }
-\msg_new:nnn { color } { unhandled-model }
- {
- Unhandled~color~model~in~LaTeX2e~value~"#1":
- \\ \\
- falling~back~on~grayscale.
- }
-\msg_new:nnnn { color } { unknown-color }
- { Unknown~color~'#1'. }
- {
- LaTeX~has~been~asked~to~use~a~color~named~'#1',~
- but~this~has~never~been~defined.
- }
-\msg_new:nnnn { color } { unknown-alternative-model }
- { Separation~color~space~'#1'~require~an~valid~alternative~space. }
- {
- LaTeX~has~been~asked~to~create~a~separation~color~space,~
- but~the~model~given~as\\ \\
- \iow_indent:n { alternative-model~=~<model> }
- \\ \\
- is~unknown.
- }
-\msg_new:nnnn { color } { unknown-export-format }
- { Unknown~export~format~'#1'. }
- {
- LaTeX~has~been~asked~to~export~a~color~in~format~'#1',~
- but~this~has~never~been~defined.
- }
-\msg_new:nnnn { color } { unknown-CIELAB-illuminant }
- { Unknown~illuminant~model~'#1'. }
- {
- LaTeX~has~been~asked~to~use~create~a~color~space~using~CIELAB~
- illuminant~'#1',~but~this~does~not~exist.
- }
-\msg_new:nnnn { color } { unknown-model }
- { Unknown~color~model~'#1'. }
- {
- LaTeX~has~been~asked~to~use~a~color~model~called~'#1',~
- but~this~model~is~not~set~up.
- }
-\msg_new:nnnn { color } { unknown-model-type }
- { Unknown~color~model~type~'#1'. }
- {
- LaTeX~has~been~asked~to~create~a~new~color~model~called~'#1',~
- but~this~type~of~model~was~never~set~up.
- }
-\prop_gput:Nnn \g_msg_module_name_prop { color } { LaTeX }
-\prop_gput:Nnn \g_msg_module_type_prop { color } { }
-% \end{macrocode}
-%
-% \begin{macrocode}
-\msg_new:nnn { color } { show }
- {
- The~color~#1~
- \tl_if_empty:nTF {#2}
- { is~undefined. }
- { has~the~properties: #2 }
- }
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3debug.dtx b/macros/latex/contrib/l3kernel/l3debug.dtx
deleted file mode 100644
index 6654b6d4cd..0000000000
--- a/macros/latex/contrib/l3kernel/l3debug.dtx
+++ /dev/null
@@ -1,1479 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3debug.dtx
-%
-% Copyright (C) 2019-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3debug} module\\ Debugging support^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3debug} implementation}
-%
-% Internal kernel functions that are only defined here are listed in
-% \pkg{l3kernel-functions},
-% see~\ref{sec:l3kernel-functions:l3debug-internals}.
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=debug>
-% \end{macrocode}
-%
-% Standard file identification.
-% \begin{macrocode}
-\ProvidesExplFile{l3debug.def}{2024-03-14}{}{L3 Debugging support}
-% \end{macrocode}
-%
-% \begin{variable}{\s_@@_stop}
-% Internal scan marks.
-% \begin{macrocode}
-\scan_new:N \s_@@_stop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[EXP]{\@@_use_i_delimit_by_s_stop:nw}
-% Functions to gobble up to a scan mark.
-% \begin{macrocode}
-\cs_new:Npn \@@_use_i_delimit_by_s_stop:nw #1 #2 \s_@@_stop {#1}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\q_@@_recursion_tail,\q_@@_recursion_stop}
-% Internal quarks.
-% \begin{macrocode}
-\quark_new:N \q_@@_recursion_tail
-\quark_new:N \q_@@_recursion_stop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[EXP]{\@@_if_recursion_tail_stop:N}
-% Functions to query recursion quarks.
-% \begin{macrocode}
-\cs_new:Npn \@@_use_none_delimit_by_q_recursion_stop:w
- #1 \q_@@_recursion_stop { }
-\__kernel_quark_new_test:N \@@_if_recursion_tail_stop:N
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\debug_on:n, \debug_off:n, \@@_all_on:, \@@_all_off:}
-% \begin{macrocode}
-\cs_gset_protected:Npn \debug_on:n #1
- {
- \exp_args:No \clist_map_inline:nn { \tl_to_str:n {#1} }
- {
- \cs_if_exist_use:cF { @@_ ##1 _on: }
- { \msg_error:nnn { debug } { debug } {##1} }
- }
- }
-\cs_gset_protected:Npn \debug_off:n #1
- {
- \exp_args:No \clist_map_inline:nn { \tl_to_str:n {#1} }
- {
- \cs_if_exist_use:cF { @@_ ##1 _off: }
- { \msg_error:nnn { debug } { debug } {##1} }
- }
- }
-\cs_new_protected:Npn \@@_all_on:
- {
- \debug_on:n
- {
- check-declarations ,
- check-expressions ,
- deprecation ,
- log-functions ,
- }
- }
-\cs_new_protected:Npn \@@_all_off:
- {
- \debug_off:n
- {
- check-declarations ,
- check-expressions ,
- deprecation ,
- log-functions ,
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\debug_suspend:, \debug_resume:}
-% \begin{macro}{\@@_suspended:T}
-% \begin{macro}{\l_@@_suspended_tl}
-% Suspend and resume locally all debug-related errors and logging
-% except deprecation errors. The \cs{debug_suspend:} and \cs{debug_resume:}
-% pairs can be nested. We keep track of nesting in a token list
-% containing a number of periods. At first begin with the
-% \enquote{non-suspended} version of \cs{@@_suspended:T}.
-% \begin{macrocode}
-\tl_new:N \l_@@_suspended_tl { }
-\cs_gset_protected:Npn \debug_suspend:
- {
- \tl_put_right:Nn \l_@@_suspended_tl { . }
- \cs_set_eq:NN \@@_suspended:T \use:n
- }
-\cs_gset_protected:Npn \debug_resume:
- {
- \__kernel_tl_set:Nx \l_@@_suspended_tl
- { \tl_tail:N \l_@@_suspended_tl }
- \tl_if_empty:NT \l_@@_suspended_tl
- {
- \cs_set_eq:NN \@@_suspended:T \use_none:n
- }
- }
-\cs_new_eq:NN \@@_suspended:T \use_none:n
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {\@@_check-declarations_on:, \@@_check-declarations_off:}
-% \begin{macro}
-% {
-% \__kernel_chk_var_exist:N,
-% \__kernel_chk_cs_exist:N,
-% \__kernel_chk_cs_exist:c
-% }
-% \begin{macro}[EXP]{\__kernel_chk_flag_exist:NN}
-% \begin{macro}{\__kernel_chk_var_local:N, \__kernel_chk_var_global:N}
-% \begin{macro}{\__kernel_chk_var_scope:NN}
-% When debugging is enabled these two functions set up functions that
-% test their argument (when \texttt{check-declarations} is active)
-% \begin{itemize}
-% \item \cs{__kernel_chk_var_exist:N} and \cs{__kernel_chk_cs_exist:N}, two
-% functions that test that their argument is defined;
-% \item \cs{__kernel_chk_var_scope:NN} that checks that its argument |#2|
-% has scope |#1|.
-% \item \cs{__kernel_chk_var_local:N} and \cs{__kernel_chk_var_global:N} that
-% perform both checks.
-% \end{itemize}
-% \begin{macrocode}
-\cs_new_protected:Npn \__kernel_chk_var_exist:N #1 { }
-\cs_new_protected:Npn \__kernel_chk_cs_exist:N #1 { }
-\cs_generate_variant:Nn \__kernel_chk_cs_exist:N { c }
-\cs_new:Npn \__kernel_chk_flag_exist:NN { }
-\cs_new_protected:Npn \__kernel_chk_var_local:N #1 { }
-\cs_new_protected:Npn \__kernel_chk_var_global:N #1 { }
-\cs_new_protected:Npn \__kernel_chk_var_scope:NN #1#2 { }
-\cs_new_protected:cpn { @@_check-declarations_on: }
- {
- \cs_set_protected:Npn \__kernel_chk_var_exist:N ##1
- {
- \@@_suspended:T \use_none:nnn
- \cs_if_exist:NF ##1
- {
- \msg_error:nne { debug } { non-declared-variable }
- { \token_to_str:N ##1 }
- }
- }
- \cs_set_protected:Npn \__kernel_chk_cs_exist:N ##1
- {
- \@@_suspended:T \use_none:nnn
- \cs_if_exist:NF ##1
- {
- \msg_error:nne { kernel } { command-not-defined }
- { \token_to_str:N ##1 }
- }
- }
- \cs_set:Npn \__kernel_chk_flag_exist:NN ##1##2
- {
- \@@_suspended:T \use_iii:nnnn
- \flag_if_exist:NTF ##2
- { ##1 ##2 }
- {
- \msg_expandable_error:nnn { kernel } { bad-variable } {##2}
- ##1 \l_tmpa_flag
- }
- }
- \cs_set_protected:Npn \__kernel_chk_var_scope:NN
- {
- \@@_suspended:T \use_none:nnn
- \@@_chk_var_scope_aux:NN
- }
- \cs_set_protected:Npn \__kernel_chk_var_local:N ##1
- {
- \@@_suspended:T \use_none:nnnnn
- \__kernel_chk_var_exist:N ##1
- \@@_chk_var_scope_aux:NN l ##1
- }
- \cs_set_protected:Npn \__kernel_chk_var_global:N ##1
- {
- \@@_suspended:T \use_none:nnnnn
- \__kernel_chk_var_exist:N ##1
- \@@_chk_var_scope_aux:NN g ##1
- }
- }
-\cs_new_protected:cpn { @@_check-declarations_off: }
- {
- \cs_set_protected:Npn \__kernel_chk_var_exist:N ##1 { }
- \cs_set_protected:Npn \__kernel_chk_cs_exist:N ##1 { }
- \cs_set:Npn \__kernel_chk_flag_exist:NN { }
- \cs_set_protected:Npn \__kernel_chk_var_local:N ##1 { }
- \cs_set_protected:Npn \__kernel_chk_var_global:N ##1 { }
- \cs_set_protected:Npn \__kernel_chk_var_scope:NN ##1##2 { }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_chk_var_scope_aux:NN}
-% \begin{macro}{\@@_chk_var_scope_aux:Nn}
-% \begin{macro}{\@@_chk_var_scope_aux:NNn}
-% First check whether the name of the variable |#2| starts with
-% \meta{letter}|_|. If it does then pass that letter, the
-% \meta{scope}, and the variable name to
-% \cs{@@_chk_var_scope_aux:NNn}. That function compares the two
-% letters and triggers an error if they differ (the \cs{scan_stop:}
-% case is not reachable here). If the second character was not |_|
-% then pass the same data to the same auxiliary, except for its first
-% argument which is now a control sequence. That control sequence is
-% actually a token list (but to avoid triggering the checking code we
-% manipulate it using \cs{cs_set_nopar:Npn}) containing a single
-% letter \meta{scope} according to what the first assignment to the
-% given variable was.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_chk_var_scope_aux:NN #1#2
- { \exp_args:NNf \@@_chk_var_scope_aux:Nn #1 { \cs_to_str:N #2 } }
-\cs_new_protected:Npn \@@_chk_var_scope_aux:Nn #1#2
- {
- \if:w _ \use_i:nn \@@_use_i_delimit_by_s_stop:nw #2 ? ? \s_@@_stop
- \exp_after:wN \@@_chk_var_scope_aux:NNn
- \@@_use_i_delimit_by_s_stop:nw #2 ? \s_@@_stop
- #1 {#2}
- \else:
- \exp_args:Nc \@@_chk_var_scope_aux:NNn
- { @@_chk_/ #2 }
- #1 {#2}
- \fi:
- }
-\cs_new_protected:Npn \@@_chk_var_scope_aux:NNn #1#2#3
- {
- \if:w #1 #2
- \else:
- \if:w #1 \scan_stop:
- \cs_gset_nopar:Npn #1 {#2}
- \else:
- \msg_error:nneee { debug } { local-global }
- {#1} {#2} { \iow_char:N \\ #3 }
- \fi:
- \fi:
- }
-\use:c { @@_check-declarations_off: }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_log-functions_on:, \@@_log-functions_off:}
-% \begin{macro}{\__kernel_debug_log:e}
-% These two functions (corresponding to the \pkg{expl3} option
-% \texttt{log-functions}) control whether \cs{__kernel_debug_log:e}
-% writes to the log file or not. By default, logging is off.
-% \begin{macrocode}
-\cs_new_protected:cpn { @@_log-functions_on: }
- {
- \cs_set_protected:Npn \__kernel_debug_log:e
- { \@@_suspended:T \use_none:nn \iow_log:e }
- }
-\cs_new_protected:cpn { @@_log-functions_off: }
- { \cs_set_protected:Npn \__kernel_debug_log:e { \use_none:n } }
-\cs_new_protected:Npn \__kernel_debug_log:e { \use_none:n }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {\@@_check-expressions_on:, \@@_check-expressions_off:}
-% \begin{macro}{\__kernel_chk_expr:nNnN}
-% \begin{macro}{\@@_chk_expr_aux:nNnN}
-% When debugging is enabled these two functions set
-% \cs{__kernel_chk_expr:nNnN} to test or not whether the given
-% expression is valid. The idea is to evaluate the expression within
-% a brace group (to catch trailing \cs{use_none:nn} or similar), then
-% test that the result is what we expect. This is done by turning it
-% to an integer and hitting that with \cs{tex_romannumeral:D} after
-% replacing the first character by |-0|. If all goes well, that
-% primitive finds a non-positive integer and gives an empty output.
-% If the original expression evaluation stopped early it leaves a
-% trailing \cs{tex_relax:D}, which stops the second evaluation (used
-% to convert to integer) before it encounters the final
-% \cs{tex_relax:D}. Since \cs{tex_romannumeral:D} does not absorb
-% \cs{tex_relax:D} the output will be nonempty. Note that |#3| is
-% empty except for mu expressions for which it is \cs{tex_mutoglue:D}
-% to avoid an \enquote{incompatible glue units} error. Note also that
-% if we had omitted the first \cs{tex_relax:D} then for instance
-% |1+2\relax+3| would incorrectly be accepted as a valid integer
-% expression.
-% \begin{macrocode}
-\cs_new_protected:cpn { @@_check-expressions_on: }
- {
- \cs_set:Npn \__kernel_chk_expr:nNnN ##1##2
- {
- \@@_suspended:T { ##1 \use_none:nnnnnnn }
- \exp_after:wN \@@_chk_expr_aux:nNnN
- \exp_after:wN { \tex_the:D ##2 ##1 \scan_stop: }
- ##2
- }
- }
-\cs_new_protected:cpn { @@_check-expressions_off: }
- { \cs_set:Npn \__kernel_chk_expr:nNnN ##1##2##3##4 {##1} }
-\cs_new:Npn \__kernel_chk_expr:nNnN #1#2#3#4 {#1}
-\cs_new:Npn \@@_chk_expr_aux:nNnN #1#2#3#4
- {
- \tl_if_empty:oF
- {
- \tex_romannumeral:D - 0
- \exp_after:wN \use_none:n
- \int_value:w #3 #2 #1 \scan_stop:
- }
- {
- \msg_expandable_error:nnnn
- { debug } { expr } {#4} {#1}
- }
- #1
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_deprecation_on:, \@@_deprecation_off:}
-% Some commands were more recently deprecated and not yet removed;
-% only make these into errors if the user requests it. This relies on
-% two token lists, filled up in \pkg{l3deprecation} by calls to
-% \cs{__kernel_deprecation_code:nn}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_deprecation_on:
- { \g_@@_deprecation_on_tl }
-\cs_new_protected:Npn \@@_deprecation_off:
- { \g_@@_deprecation_off_tl }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{
-% \l_@@_internal_tl,
-% \l_@@_tmpa_tl,
-% \l_@@_tmpb_tl,
-% }
-% For patching.
-% \begin{macrocode}
-\tl_new:N \l_@@_internal_tl
-\tl_new:N \l_@@_tmpa_tl
-\tl_new:N \l_@@_tmpb_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{
-% \@@_generate_parameter_list:NNN,
-% \@@_build_parm_text:n,
-% \@@_build_arg_list:n,
-% \@@_arg_list_from_signature:nNN,
-% \@@_arg_check_invalid:N,
-% \@@_parm_terminate:w,
-% \@@_arg_if_braced:n,
-% \@@_get_base_form:N,
-% \@@_arg_return:N,
-% }
-% \begin{macro}[TF]{\@@_arg_if_braced:N}
-% Some functions don't take the arguments their signature indicates.
-% For instance, \cs{clist_concat:NNN} doesn't take (directly) any
-% argument, so patching it with something that uses |#1|, |#2|, or
-% |#3| results in ``Illegal parameter number in definition of
-% \cs{clist_concat:NNN}''.
-%
-% Instead of changing \emph{the} definition of the macros, we'll
-% create a copy of such macros, say, \cs[no-index]{@@_clist_concat:NNN} which
-% will be defined as
-% |<debug code with #1, #2 and #3>\clist_concat:NNN#1#2#3|. For that
-% we need to identify the signature of every function and build the
-% appropriate parameter list.
-%
-% \cs{@@_generate_parameter_list:NNN} takes a function in |#1| and
-% returns teo parameter lists: |#2| contains the simple |#1#2#3| as
-% would be used in the \meta{parameter~text} of the definition and
-% |#3| contains the same parameters but with braces where necessary.
-%
-% With the current implementation the resulting |#3| is, for example
-% for |\some_function:NnNn|, |#1{#2}#3{#4}|. While this is correct,
-% it might be unnecessary. Bracing everything will usually have the
-% same outcome (unless the function was misused in the first place).
-% What should be done?
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_generate_parameter_list:NNN #1#2#3
- {
- \__kernel_tl_set:Nx \l_@@_internal_tl
- { \exp_last_unbraced:Nf \use_ii:nnn \cs_split_function:N #1 }
- \__kernel_tl_set:Nx #2
- { \exp_args:NV \@@_build_parm_text:n \l_@@_internal_tl }
- \__kernel_tl_set:Nx #3
- { \exp_args:NV \@@_build_arg_list:n \l_@@_internal_tl }
- }
-\cs_new:Npn \@@_build_parm_text:n #1
- {
- \@@_arg_list_from_signature:nNN { 1 } \c_false_bool #1
- \q_@@_recursion_tail \q_@@_recursion_stop
- }
-\cs_new:Npn \@@_build_arg_list:n #1
- {
- \@@_arg_list_from_signature:nNN { 1 } \c_true_bool #1
- \q_@@_recursion_tail \q_@@_recursion_stop
- }
-\cs_new:Npn \@@_arg_list_from_signature:nNN #1 #2 #3
- {
- \@@_if_recursion_tail_stop:N #3
- \@@_arg_check_invalid:N #3
- \bool_if:NT #2 { \@@_arg_if_braced:NT #3 { \use_none:n } }
- \use:n { \c_hash_str \int_eval:n {#1} }
- \exp_args:Nf \@@_arg_list_from_signature:nNN
- { \int_eval:n {#1+1} } #2
- }
-% \end{macrocode}
-% Argument types |w|, |p|, |T|, and |F| shouldn't be included in the
-% parameter lists, so we abort the loop if either is found.
-% \begin{macrocode}
-\cs_new:Npn \@@_arg_check_invalid:N #1
- {
- \if:w w #1 \@@_parm_terminate:w \else:
- \if:w p #1 \@@_parm_terminate:w \else:
- \if:w T #1 \@@_parm_terminate:w \else:
- \if:w F #1 \@@_parm_terminate:w \else:
- \exp:w
- \fi:
- \fi:
- \fi:
- \fi:
- \exp_end:
- }
-\cs_new:Npn \@@_parm_terminate:w
- { \exp_after:wN \@@_use_none_delimit_by_q_recursion_stop:w \exp:w }
-\prg_new_conditional:Npnn \@@_arg_if_braced:N #1 { T }
- { \exp_args:Nf \@@_arg_if_braced:n { \@@_get_base_form:N #1 } }
-\cs_new:Npn \@@_arg_if_braced:n #1
- {
- \if:w n #1 \prg_return_true: \else:
- \if:w N #1 \prg_return_false: \else:
- \msg_expandable_error:nnn
- { debug } { bad-arg-type } {#1}
- \fi:
- \fi:
- }
-\msg_new:nnn { debug } { bad-arg-type }
- { Wrong~argument~type~#1. }
-% \end{macrocode}
-% The macro below gets the base form of an
-% argument type given a variant. It serves only to differentiate
-% arguments which should be braced from ones which shouldn't. If all
-% were to be braced this would be unnecessary. I moved the |n| and |N|
-% variants to the beginning of the test as the are much more common
-% here.
-% \begin{macrocode}
-\cs_new:Npn \@@_get_base_form:N #1
- {
- \if:w n #1 \@@_arg_return:N n \else:
- \if:w N #1 \@@_arg_return:N N \else:
- \if:w c #1 \@@_arg_return:N N \else:
- \if:w o #1 \@@_arg_return:N n \else:
- \if:w V #1 \@@_arg_return:N n \else:
- \if:w v #1 \@@_arg_return:N n \else:
- \if:w f #1 \@@_arg_return:N n \else:
- \if:w e #1 \@@_arg_return:N n \else:
- \if:w x #1 \@@_arg_return:N n \else:
- \@@_arg_return:N \scan_stop:
- \fi:
- \fi:
- \fi:
- \fi:
- \fi:
- \fi:
- \fi:
- \fi:
- \fi:
- \exp_stop_f:
- }
-\cs_new:Npn \@@_arg_return:N #1
- { \exp_after:wN #1 \exp:w \exp_end_continue_f:w }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{
-% \__kernel_patch:nnn,
-% \__kernel_patch_aux:nnn,
-% \@@_setup_debug_code:Nnn,
-% \@@_add_to_debug_code:Nnn,
-% \@@_insert_debug_code:Nnn,
-% \__kernel_patch_weird:nnn,
-% \__kernel_patch_weird_aux:nnn,
-% \@@_patch_weird:Nnn,
-% }
-% Simple patching by adding material at the start and end of (a
-% collection of) functions is straight-forward as we know the catcode
-% set up. The approach is essentially that in \pkg{etoolbox}. Notice
-% the need to worry about spaces: those are otherwise lost as normally
-% in \pkg{expl3} code they would be~|~|.
-%
-% As discussed above, some functions don't take arguments, so we can't
-% patch something that uses an argument in them. For these functions
-% \cs{__kernel_patch:nnn} is used. It starts by creating a copy of the
-% function (say, \cs{clist_concat:NNN}) with a |__debug_| prefix in
-% the name. This copy won't be changed. The code redefines the
-% original function to take the exact same arguments as advertised in
-% its signature (see \cs{@@_generate_parameter_list:NNN} above).
-% The redefined function also contains the debug code in the proper
-% position. If a function with the same name and the |__debug_| prefix
-% was already defined, then the macro patches that definition by
-% adding more debug code to it.
-% \begin{macrocode}
-\group_begin:
- \cs_set_protected:Npn \__kernel_patch:nnn
- {
- \group_begin:
- \char_set_catcode_other:N \#
- \__kernel_patch_aux:nnn
- }
- \cs_set_protected:Npn \__kernel_patch_aux:nnn #1#2#3
- {
- \char_set_catcode_parameter:N \#
- \char_set_catcode_space:N \ %
- \tex_endlinechar:D -1 \scan_stop:
- \tl_map_inline:nn {#3}
- {
- \cs_if_exist:cTF { @@_ \cs_to_str:N ##1 }
- { \@@_add_to_debug_code:Nnn }
- { \@@_setup_debug_code:Nnn }
- ##1 {#1} {#2}
- }
- \group_end:
- }
- \cs_set_protected:Npn \@@_setup_debug_code:Nnn #1#2#3
- {
- \cs_gset_eq:cN { @@_ \cs_to_str:N #1 } #1
- \@@_generate_parameter_list:NNN #1 \l_@@_tmpa_tl \l_@@_tmpb_tl
- \exp_args:Ne \tex_scantokens:D
- {
- \tex_global:D \cs_prefix_spec:N #1
- \tex_def:D \exp_not:N #1
- \tl_use:N \l_@@_tmpa_tl
- {
- \tl_to_str:n {#2}
- \exp_not:c { @@_ \cs_to_str:N #1 }
- \tl_use:N \l_@@_tmpb_tl
- \tl_to_str:n {#3}
- }
- }
- }
- \cs_set_protected:Npn \@@_add_to_debug_code:Nnn #1#2#3
- {
- \use:e
- {
- \cs_set:Npn \exp_not:N \@@_tmp:w
- ##1 \tl_to_str:n { macro: }
- ##2 \tl_to_str:n { -> }
- ##3 \c_backslash_str \tl_to_str:n { @@_ }
- \cs_to_str:N #1
- ##4 \s_@@_stop
- {
- \exp_not:N \exp_args:Ne \exp_not:N \tex_scantokens:D
- {
- \tex_global:D ##1
- \tex_def:D \exp_not:N #1 ##2
- {
- ##3 \tl_to_str:n {#2}
- \c_backslash_str @@_ \cs_to_str:N #1
- ##4 \tl_to_str:n {#3}
- }
- }
- }
- }
- \exp_after:wN \@@_tmp:w \cs_meaning:N #1 \s_@@_stop
- }
-% \end{macrocode}
-% Some functions, however, won't work with the signature reading setup
-% above because their signature contains |w|eird arguments. These
-% functions need to be patched using \cs{__kernel_patch_weird:nnn},
-% which won't make a copy of the function, rather it will patch the
-% debug code directly into it. This means that whatever argument the
-% debug code uses must be actually used by the patched function.
-% \begin{macrocode}
- \cs_set_protected:Npn \__kernel_patch_weird:nnn
- {
- \group_begin:
- \char_set_catcode_other:N \#
- \__kernel_patch_weird_aux:nnn
- }
- \cs_set_protected:Npn \__kernel_patch_weird_aux:nnn #1#2#3
- {
- \char_set_catcode_parameter:N \#
- \char_set_catcode_space:N \ %
- \tex_endlinechar:D -1 \scan_stop:
- \tl_map_inline:nn {#3}
- { \@@_patch_weird:Nnn ##1 {#1} {#2} }
- \group_end:
- }
- \cs_set_protected:Npn \@@_patch_weird:Nnn #1#2#3
- {
- \use:e
- {
- \tex_endlinechar:D -1 \scan_stop:
- \exp_not:N \tex_scantokens:D
- {
- \tex_global:D \cs_prefix_spec:N #1
- \tex_def:D \exp_not:N #1
- \cs_parameter_spec:N #1
- {
- \tl_to_str:n {#2}
- \cs_replacement_spec:N #1
- \tl_to_str:n {#3}
- }
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% Patching the second argument to ensure it exists. This happens before
-% we alter |#1| so the ordering is correct. For many variable types
-% such as \texttt{int} a low-level error occurs when |#2| is unknown, so
-% adding a check is not needed.
-% \begin{macrocode}
- \__kernel_patch:nnn
- { \__kernel_chk_var_exist:N #2 }
- { }
- {
- \bool_set_eq:NN
- \bool_gset_eq:NN
- \clist_set_eq:NN
- \clist_gset_eq:NN
- \fp_set_eq:NN
- \fp_gset_eq:NN
- \prop_set_eq:NN
- \prop_gset_eq:NN
- \seq_set_eq:NN
- \seq_gset_eq:NN
- \str_set_eq:NN
- \str_gset_eq:NN
- \tl_set_eq:NN
- \tl_gset_eq:NN
- }
-% \end{macrocode}
-%
-% Patching both second and third arguments.
-% \begin{macrocode}
- \__kernel_patch:nnn
- {
- \__kernel_chk_var_exist:N #2
- \__kernel_chk_var_exist:N #3
- }
- { }
- {
- \clist_concat:NNN
- \clist_gconcat:NNN
- \prop_concat:NNN
- \prop_gconcat:NNN
- \seq_concat:NNN
- \seq_gconcat:NNN
- \str_concat:NNN
- \str_gconcat:NNN
- \tl_concat:NNN
- \tl_gconcat:NNN
- }
-% \end{macrocode}
-%
-%
-% \begin{macrocode}
-\cs_gset_protected:Npn \__kernel_tl_set:Nx { \cs_set_nopar:Npe }
-\cs_gset_protected:Npn \__kernel_tl_gset:Nx { \cs_gset_nopar:Npe }
-% \end{macrocode}
-%
-% Patching where the first argument to a function needs scope-checking:
-% either local or global (so two lists).
-% \begin{macrocode}
- \__kernel_patch:nnn
- { \__kernel_chk_var_local:N #1 }
- { }
- {
- \bool_set:Nn
- \bool_set_eq:NN
- \bool_set_true:N
- \bool_set_false:N
- \box_set_eq:NN
- \box_set_eq_drop:NN
- \box_set_to_last:N
- \clist_clear:N
- \clist_set_eq:NN
- \dim_zero:N
- \dim_set:Nn
- \dim_set_eq:NN
- \dim_add:Nn
- \dim_sub:Nn
- \fp_set_eq:NN
- \int_zero:N
- \int_set_eq:NN
- \int_add:Nn
- \int_sub:Nn
- \int_incr:N
- \int_decr:N
- \int_set:Nn
- \hbox_set:Nn
- \hbox_set_to_wd:Nnn
- \hbox_set:Nw
- \hbox_set_to_wd:Nnw
- \muskip_zero:N
- \muskip_set:Nn
- \muskip_add:Nn
- \muskip_sub:Nn
- \muskip_set_eq:NN
- \prop_clear:N
- \prop_concat:NNN
- \prop_pop:NnN
- \prop_pop:NnNT
- \prop_pop:NnNF
- \prop_pop:NnNTF
- \prop_put:Nnn
- \prop_put_if_new:Nnn
- \prop_put_from_keyval:Nn
- \prop_remove:Nn
- \prop_set_eq:NN
- \prop_set_from_keyval:Nn
- \seq_set_eq:NN
- \skip_zero:N
- \skip_set:Nn
- \skip_set_eq:NN
- \skip_add:Nn
- \skip_sub:Nn
- \str_clear:N
- \str_set_eq:NN
- \str_put_left:Nn
- \str_put_right:Nn
- \__kernel_tl_set:Nx
- \tl_clear:N
- \tl_set_eq:NN
- \tl_put_left:Nn
- \tl_put_left:NV
- \tl_put_left:Nv
- \tl_put_left:Ne
- \tl_put_left:No
- \tl_put_right:Nn
- \tl_put_right:NV
- \tl_put_right:Nv
- \tl_put_right:Ne
- \tl_put_right:No
- \tl_build_begin:N
- \tl_build_put_right:Nn
- \tl_build_put_left:Nn
- \vbox_set:Nn
- \vbox_set_top:Nn
- \vbox_set_to_ht:Nnn
- \vbox_set:Nw
- \vbox_set_to_ht:Nnw
- \vbox_set_split_to_ht:NNn
- }
- \__kernel_patch:nnn
- { \__kernel_chk_var_global:N #1 }
- { }
- {
- \bool_gset:Nn
- \bool_gset_eq:NN
- \bool_gset_true:N
- \bool_gset_false:N
- \box_gset_eq:NN
- \box_gset_eq_drop:NN
- \box_gset_to_last:N
- \cctab_gset:Nn
- \clist_gclear:N
- \clist_gset_eq:NN
- \dim_gset_eq:NN
- \dim_gzero:N
- \dim_gset:Nn
- \dim_gadd:Nn
- \dim_gsub:Nn
- \fp_gset_eq:NN
- \int_gzero:N
- \int_gset_eq:NN
- \int_gadd:Nn
- \int_gsub:Nn
- \int_gincr:N
- \int_gdecr:N
- \int_gset:Nn
- \hbox_gset:Nn
- \hbox_gset_to_wd:Nnn
- \hbox_gset:Nw
- \hbox_gset_to_wd:Nnw
- \muskip_gzero:N
- \muskip_gset:Nn
- \muskip_gadd:Nn
- \muskip_gsub:Nn
- \muskip_gset_eq:NN
- \prop_gclear:N
- \prop_gconcat:NNN
- \prop_gpop:NnN
- \prop_gpop:NnNT
- \prop_gpop:NnNF
- \prop_gpop:NnNTF
- \prop_gput:Nnn
- \prop_gput_if_new:Nnn
- \prop_gput_from_keyval:Nn
- \prop_gremove:Nn
- \prop_gset_eq:NN
- \prop_gset_from_keyval:Nn
- \seq_gset_eq:NN
- \skip_gzero:N
- \skip_gset:Nn
- \skip_gset_eq:NN
- \skip_gadd:Nn
- \skip_gsub:Nn
- \str_gclear:N
- \str_gset_eq:NN
- \str_gput_left:Nn
- \str_gput_right:Nn
- \__kernel_tl_gset:Nx
- \tl_gclear:N
- \tl_gset_eq:NN
- \tl_gput_left:Nn
- \tl_gput_left:NV
- \tl_gput_left:Nv
- \tl_gput_left:Ne
- \tl_gput_left:No
- \tl_gput_right:Nn
- \tl_gput_right:NV
- \tl_gput_right:Nv
- \tl_gput_right:Ne
- \tl_gput_right:No
- \tl_build_gbegin:N
- \tl_build_gput_right:Nn
- \tl_build_gput_left:Nn
- \vbox_gset:Nn
- \vbox_gset_top:Nn
- \vbox_gset_to_ht:Nnn
- \vbox_gset:Nw
- \vbox_gset_to_ht:Nnw
- \vbox_gset_split_to_ht:NNn
- }
-% \end{macrocode}
-%
-% Scoping for constants.
-% \begin{macrocode}
- \__kernel_patch:nnn
- { \__kernel_chk_var_scope:NN c #1 }
- { }
- {
- \bool_const:Nn
- \cctab_const:Nn
- \dim_const:Nn
- \int_const:Nn
- \intarray_const_from_clist:Nn
- \muskip_const:Nn
- \prop_const_from_keyval:Nn
- \prop_const_linked_from_keyval:Nn
- \skip_const:Nn
- \str_const:Nn
- \tl_const:Nn
- }
-% \end{macrocode}
-%
-% Flag functions.
-% \begin{macrocode}
- \__kernel_patch:nnn
- { \__kernel_chk_flag_exist:NN }
- { }
- {
- \flag_ensure_raised:N
- \flag_height:N
- \flag_if_raised:NT
- \flag_if_raised:NF
- \flag_if_raised:NTF
- \flag_if_raised_p:N
- \flag_raise:N
- }
-% \end{macrocode}
-%
-% Various one-offs.
-% \begin{macrocode}
- \__kernel_patch:nnn
- { \__kernel_chk_cs_exist:N #1 }
- { }
- { \cs_generate_variant:Nn }
- \__kernel_patch:nnn
- { \__kernel_chk_var_scope:NN g #1 }
- { }
- { \cctab_new:N }
- \__kernel_patch:nnn
- { \__kernel_chk_var_scope:NN l #1 }
- { }
- { \flag_new:N }
- \__kernel_patch:nnn
- {
- \__kernel_chk_var_scope:NN l #1
- \__kernel_chk_flag_exist:NN
- }
- { }
- { \flag_clear:N }
- \__kernel_patch:nnn
- { \__kernel_chk_var_scope:NN g #1 }
- { }
- { \intarray_new:Nn }
- \__kernel_patch:nnn
- { \__kernel_chk_var_scope:NN q #1 }
- { }
- { \quark_new:N }
- \__kernel_patch:nnn
- { \__kernel_chk_var_scope:NN s #1 }
- { }
- { \scan_new:N }
-% \end{macrocode}
-%
-% Patch various internal commands to log definitions of functions.
-% First, a kernel internal. Then internals from the \pkg{cs},
-% \pkg{keys} and \pkg{msg} modules.
-% \begin{macrocode}
- \__kernel_patch:nnn
- { }
- {
- \__kernel_debug_log:e
- { Defining~\token_to_str:N #1~ \msg_line_context: }
- }
- { \__kernel_chk_if_free_cs:N }
-%<@@=cs>
- \__kernel_patch_weird:nnn
- {
- \cs_if_free:NF #4
- {
- \__kernel_debug_log:e
- {
- Variant~\token_to_str:N #4~%
- already~defined;~ not~ changing~ it~ \msg_line_context:
- }
- }
- }
- { }
- { \@@_generate_variant:wwNN }
-%<@@=keys>
- \__kernel_patch:nnn
- {
- \cs_if_exist:cF { \c_@@_code_root_str #1 }
- { \__kernel_debug_log:e { Defining~key~#1~\msg_line_context: } }
- }
- { }
- { \@@_cmd_set_direct:nn }
-%<@@=msg>
- \__kernel_patch:nnn
- { }
- {
- \__kernel_debug_log:e
- { Defining~message~ #1 / #2 ~\msg_line_context: }
- }
- { \@@_chk_free:nn }
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=prg>
-% \end{macrocode}
-% Internal functions from \pkg{prg} module.
-% \begin{macrocode}
- \__kernel_patch_weird:nnn
- { \__kernel_chk_cs_exist:c { #5 _p : #6 } }
- { }
- { \@@_set_eq_conditional_p_form:wNnnnn }
- \__kernel_patch_weird:nnn
- { \__kernel_chk_cs_exist:c { #5 : #6 TF } }
- { }
- { \@@_set_eq_conditional_TF_form:wNnnnn }
- \__kernel_patch_weird:nnn
- { \__kernel_chk_cs_exist:c { #5 : #6 T } }
- { }
- { \@@_set_eq_conditional_T_form:wNnnnn }
- \__kernel_patch_weird:nnn
- { \__kernel_chk_cs_exist:c { #5 : #6 F } }
- { }
- { \@@_set_eq_conditional_F_form:wNnnnn }
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=regex>
-% \end{macrocode}
-% Internal functions from \pkg{regex} module.
-% \begin{macrocode}
- \__kernel_patch:nnn
- {
- \@@_trace_push:nnN { regex } { 1 } \@@_escape_use:nnnn
- \group_begin:
- \__kernel_tl_set:Nx \l_@@_internal_a_tl
- { \@@_trace_pop:nnN { regex } { 1 } \@@_escape_use:nnnn }
- \use_none:nnn
- }
- { }
- { \@@_escape_use:nnn }
- \__kernel_patch:nnn
- { \@@_trace_push:nnN { regex } { 1 } \@@_build:N }
- {
- \@@_trace_states:n { 2 }
- \@@_trace_pop:nnN { regex } { 1 } \@@_build:N
- }
- { \@@_build:N }
- \__kernel_patch:nnn
- { \@@_trace_push:nnN { regex } { 1 } \@@_build_for_cs:n }
- {
- \@@_trace_states:n { 2 }
- \@@_trace_pop:nnN { regex } { 1 } \@@_build_for_cs:n
- }
- { \@@_build_for_cs:n }
- \__kernel_patch:nnn
- {
- \@@_trace:nne { regex } { 2 }
- {
- regex~new~state~
- L=\int_use:N \l_@@_left_state_int ~ -> ~
- R=\int_use:N \l_@@_right_state_int ~ -> ~
- M=\int_use:N \l_@@_max_state_int ~ -> ~
- \int_eval:n { \l_@@_max_state_int + 1 }
- }
- }
- { }
- { \@@_build_new_state: }
- \__kernel_patch:nnn
- { \@@_trace_push:nnN { regex } { 1 } \@@_group_aux:nnnnN }
- { \@@_trace_pop:nnN { regex } { 1 } \@@_group_aux:nnnnN }
- { \@@_group_aux:nnnnN }
- \__kernel_patch:nnn
- { \@@_trace_push:nnN { regex } { 1 } \@@_branch:n }
- { \@@_trace_pop:nnN { regex } { 1 } \@@_branch:n }
- { \@@_branch:n }
- \__kernel_patch:nnn
- {
- \@@_trace_push:nnN { regex } { 1 } \@@_match:n
- \@@_trace:nne { regex } { 1 } { analyzing~query~token~list }
- }
- { \@@_trace_pop:nnN { regex } { 1 } \@@_match:n }
- { \@@_match:n }
- \__kernel_patch:nnn
- {
- \@@_trace_push:nnN { regex } { 1 } \@@_match_cs:n
- \@@_trace:nne { regex } { 1 } { analyzing~query~token~list }
- }
- { \@@_trace_pop:nnN { regex } { 1 } \@@_match_cs:n }
- { \@@_match_cs:n }
- \__kernel_patch:nnn
- { \@@_trace:nne { regex } { 1 } { initializing } }
- { }
- { \@@_match_init: }
- \__kernel_patch:nnn
- {
- \@@_trace:nne { regex } { 2 }
- { state~\int_use:N \l_@@_curr_state_int }
- }
- { }
- { \@@_use_state: }
- \__kernel_patch:nnn
- { \@@_trace_push:nnN { regex } { 1 } \@@_replacement:n }
- { \@@_trace_pop:nnN { regex } { 1 } \@@_replacement:n }
- { \@@_replacement:n }
-% \end{macrocode}
-%
-% \begin{macrocode}
-\group_end:
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=debug>
-% \end{macrocode}
-%
-% Patching arguments is a bit more involved: we do these one at a time.
-% The basic idea is the same, using a |#| token that is a string.
-% \begin{macrocode}
-\group_begin:
- \cs_set_protected:Npn \__kernel_patch:Nn #1
- {
- \group_begin:
- \char_set_catcode_other:N \#
- \__kernel_patch_aux:Nn #1
- }
- \cs_set_protected:Npn \__kernel_patch_aux:Nn #1#2
- {
- \char_set_catcode_parameter:N \#
- \tex_endlinechar:D -1 \scan_stop:
- \exp_args:Ne \tex_scantokens:D
- {
- \tex_global:D \cs_prefix_spec:N #1 \tex_def:D \exp_not:N #1
- \cs_parameter_spec:N #1
- { \exp_args:No \tl_to_str:n { #1 #2 } }
- }
- \group_end:
- }
-% \end{macrocode}
-%
-% The functions here can get a bit repetitive, so we define a helper
-% which can re-use the same patch code repeatedly. The main part of the
-% patch is the same, so we just have to deal with the part which varies
-% depending on the type of expression.
-% \begin{macrocode}
- \cs_set_protected:Npn \__kernel_patch_eval:nn #1#2
- {
- \tl_map_inline:nn {#1}
- {
- \exp_args:NNe \__kernel_patch:Nn ##1
- {
- { \c_hash_str 1 }
- {
- \exp_not:N \__kernel_chk_expr:nNnN { \c_hash_str 2 }
- \exp_not:n {#2}
- \exp_not:N ##1
- }
- }
- }
- }
-%<@@=dim>
- \__kernel_patch_eval:nn
- {
- \dim_set:Nn
- \dim_gset:Nn
- \dim_add:Nn
- \dim_gadd:Nn
- \dim_sub:Nn
- \dim_gsub:Nn
- \dim_const:Nn
- }
- { \@@_eval:w { } }
-%<@@=int>
- \__kernel_patch_eval:nn
- {
- \int_set:Nn
- \int_gset:Nn
- \int_add:Nn
- \int_gadd:Nn
- \int_sub:Nn
- \int_gsub:Nn
- \int_const:Nn
- }
- { \@@_eval:w { } }
- \__kernel_patch_eval:nn
- {
- \muskip_set:Nn
- \muskip_gset:Nn
- \muskip_add:Nn
- \muskip_gadd:Nn
- \muskip_sub:Nn
- \muskip_gsub:Nn
- \muskip_const:Nn
- }
- { \tex_muexpr:D { \tex_mutoglue:D } }
- \__kernel_patch_eval:nn
- {
- \skip_set:Nn
- \skip_gset:Nn
- \skip_add:Nn
- \skip_gadd:Nn
- \skip_sub:Nn
- \skip_gsub:Nn
- \skip_const:Nn
- }
- { \tex_glueexpr:D { } }
-% \end{macrocode}
-%
-% Patching expandable expressions, first the one-argument versions,
-% then the two-argument ones.
-% \begin{macrocode}
- \cs_set_protected:Npn \__kernel_patch_eval:nn #1#2
- {
- \tl_map_inline:nn {#1}
- {
- \exp_args:NNe \__kernel_patch:Nn ##1
- {
- {
- \exp_not:N \__kernel_chk_expr:nNnN { \c_hash_str 1 }
- \exp_not:n {#2}
- \exp_not:N ##1
- }
- }
- }
- }
-%<@@=box>
- \__kernel_patch_eval:nn
- { \@@_dim_eval:n }
- { \@@_dim_eval:w { } }
-%<@@=dim>
- \__kernel_patch_eval:nn
- {
- \dim_eval:n
- \dim_to_decimal:n
- \dim_to_decimal_in_sp:n
- \dim_abs:n
- \dim_sign:n
- }
- { \@@_eval:w { } }
-%<@@=int>
- \__kernel_patch_eval:nn
- {
- \int_eval:n
- \int_abs:n
- \int_sign:n
- }
- { \@@_eval:w { } }
- \__kernel_patch_eval:nn
- {
- \skip_eval:n
- \skip_horizontal:n
- \skip_vertical:n
- }
- { \tex_glueexpr:D { } }
- \__kernel_patch_eval:nn
- {
- \muskip_eval:n
- }
- { \tex_muexpr:D { \tex_mutoglue:D } }
- \cs_set_protected:Npn \__kernel_patch_eval:nn #1#2
- {
- \tl_map_inline:nn {#1}
- {
- \exp_args:NNe \__kernel_patch:Nn ##1
- {
- {
- \exp_not:N \__kernel_chk_expr:nNnN { \c_hash_str 1 }
- \exp_not:n {#2}
- \exp_not:N ##1
- }
- {
- \exp_not:N \__kernel_chk_expr:nNnN { \c_hash_str 2 }
- \exp_not:n {#2}
- \exp_not:N ##1
- }
- }
- }
- }
-%<@@=dim>
- \__kernel_patch_eval:nn
- {
- \dim_max:nn
- \dim_min:nn
- }
- { \@@_eval:w { } }
-%<@@=int>
- \__kernel_patch_eval:nn
- {
- \int_max:nn
- \int_min:nn
- \int_div_truncate:nn
- \int_mod:nn
- }
- { \@@_eval:w { } }
-% \end{macrocode}
-%
-% Conditionals: three argument ones then one argument ones
-% \begin{macrocode}
- \cs_set_protected:Npn \__kernel_patch_cond:nn #1#2
- {
- \clist_map_inline:nn { :nNnT , :nNnF , :nNnTF , _p:nNn }
- {
- \exp_args:Nce \__kernel_patch:Nn { #1 ##1 }
- {
- {
- \exp_not:N \__kernel_chk_expr:nNnN { \c_hash_str 1 }
- \exp_not:n {#2}
- \exp_not:c { #1 ##1 }
- }
- { \c_hash_str 2 }
- {
- \exp_not:N \__kernel_chk_expr:nNnN { \c_hash_str 3 }
- \exp_not:n {#2}
- \exp_not:c { #1 ##1 }
- }
- }
- }
- }
-%<@@=dim>
- \__kernel_patch_cond:nn { dim_compare } { \@@_eval:w { } }
-%<@@=int>
- \__kernel_patch_cond:nn { int_compare } { \@@_eval:w { } }
- \cs_set_protected:Npn \__kernel_patch_cond:nn #1#2
- {
- \clist_map_inline:nn { :nT , :nF , :nTF , _p:n }
- {
- \exp_args:Nce \__kernel_patch:Nn { #1 ##1 }
- {
- {
- \exp_not:N \__kernel_chk_expr:nNnN { \c_hash_str 1 }
- \exp_not:n {#2}
- \exp_not:c { #1 ##1 }
- }
- }
- }
- }
-%<@@=int>
- \__kernel_patch_cond:nn { int_if_even } { \@@_eval:w { } }
- \__kernel_patch_cond:nn { int_if_odd } { \@@_eval:w { } }
-% \end{macrocode}
-%
-% Step functions.
-% \begin{macrocode}
-%<@@=dim>
- \__kernel_patch:Nn \dim_step_function:nnnN
- {
- {
- \__kernel_chk_expr:nNnN {#1} \@@_eval:w { }
- \dim_step_function:nnnN
- }
- {
- \__kernel_chk_expr:nNnN {#2} \@@_eval:w { }
- \dim_step_function:nnnN
- }
- {
- \__kernel_chk_expr:nNnN {#3} \@@_eval:w { }
- \dim_step_function:nnnN
- }
- }
-%<@@=int>
- \__kernel_patch:Nn \int_step_function:nnnN
- {
- {
- \__kernel_chk_expr:nNnN {#1} \@@_eval:w { }
- \int_step_function:nnnN
- }
- {
- \__kernel_chk_expr:nNnN {#2} \@@_eval:w { }
- \int_step_function:nnnN
- }
- {
- \__kernel_chk_expr:nNnN {#3} \@@_eval:w { }
- \int_step_function:nnnN
- }
- }
-% \end{macrocode}
-%
-% Odds and ends
-% \begin{macrocode}
- \__kernel_patch:Nn \dim_to_fp:n { { (#1) } }
-% \end{macrocode}
-%
-% \begin{macrocode}
-\group_end:
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=skip>
-% \end{macrocode}
-% This one has catcode changes so must be done by hand.
-% \begin{macrocode}
-\cs_set_protected:Npn \@@_tmp:w #1
- {
- \prg_set_conditional:Npnn \skip_if_finite:n ##1 { p , T , F , TF }
- {
- \exp_after:wN \@@_if_finite:wwNw
- \skip_use:N \tex_glueexpr:D
- \__kernel_chk_expr:nNnN
- {##1} \tex_glueexpr:D { } \skip_if_finite:n
- ; \prg_return_false:
- #1 ; \prg_return_true: \s_@@_stop
- }
- }
-\exp_args:No \@@_tmp:w { \tl_to_str:n { fil } }
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=msg>
-% \end{macrocode}
-%
-% Messages.
-% \begin{macrocode}
-\msg_new:nnnn { debug } { debug }
- { The~debugging~option~'#1'~does~not~exist~\msg_line_context:. }
- {
- The~functions~'\iow_char:N\\debug_on:n'~and~
- '\iow_char:N\\debug_off:n'~only~accept~the~arguments~
- 'all',~'check-declarations',~'check-expressions',~
- 'deprecation',~'log-functions',~not~'#1'.
- }
-\msg_new:nnn { debug } { expr } { '#2'~in~#1 }
-\msg_new:nnnn { debug } { local-global }
- { Inconsistent~local/global~assignment }
- {
- \c_@@_coding_error_text_tl
- \if:w l #2 Local
- \else:
- \if:w g #2 Global \else: Constant \fi:
- \fi:
- \ %
- assignment~to~a~
- \if:w l #1 local
- \else:
- \if:w g #1 global \else: constant \fi:
- \fi:
- \ %
- variable~'#3'.
- }
-\msg_new:nnnn { debug } { non-declared-variable }
- { The~variable~#1~has~not~been~declared~\msg_line_context:. }
- {
- \c_@@_coding_error_text_tl
- Checking~is~active,~and~you~have~tried~do~so~something~like: \\
- \ \ \tl_set:Nn ~ #1 ~ \{ ~ ... ~ \} \\
- without~first~having: \\
- \ \ \tl_new:N ~ #1 \\
- \\
- LaTeX~will~continue,~creating~the~variable~where~it~is~the~one~being~set.
- }
-% \end{macrocode}
-%
-% \begin{macro}{\__kernel_if_debug:TF}
-% Flip the switch for deprecated code.
-% \begin{macrocode}
-\cs_set_protected:Npn \__kernel_if_debug:TF #1#2 {#1}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3deprecation.dtx b/macros/latex/contrib/l3kernel/l3deprecation.dtx
deleted file mode 100644
index 3906c6786e..0000000000
--- a/macros/latex/contrib/l3kernel/l3deprecation.dtx
+++ /dev/null
@@ -1,688 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3deprecation.dtx
-%
-% Copyright (C) 2017-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3deprecation} module\\ Deprecation errors^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \section{\pkg{l3deprecation} documentation}
-%
-% A few commands have had to be deprecated over the years. This module
-% defines deprecated and deleted commands to produce an error.
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3deprecation} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=deprecation>
-% \end{macrocode}
-%
-% \subsection{Patching definitions to deprecate}
-%
-% \begin{quote}
-% \cs{__kernel_patch_deprecation:nnNNpn} \Arg{date} \Arg{replacement}
-% \meta{definition} \meta{function} \meta{parameters} \Arg{code}
-% \end{quote}
-% defines the \meta{function} to produce a warning and run its
-% \meta{code}, or to produce an error and not run any \meta{code},
-% depending on the \pkg{expl3} date.
-% \begin{itemize}
-% \item If the \pkg{expl3} date is less than the \meta{date} (plus
-% $6$~months in case \texttt{undo-recent-deprecations} is used) then
-% we define the \meta{function} to produce a warning and run its code.
-% The warning is actually suppressed in two cases:
-% \begin{itemize}
-% \item if neither \texttt{undo-recent-deprecations} nor
-% \texttt{enable-debug} are in effect we may be in an end-user's
-% document so it is suppressed;
-% \item if the command is expandable then we cannot produce a warning.
-% \end{itemize}
-% \item Otherwise, we define the \meta{function} to produce an error.
-% \end{itemize}
-% In both cases we additionally make \cs{debug_on:n} |{deprecation}|
-% turn the \meta{function} into an \tn{outer} error, and
-% \cs{debug_off:n} |{deprecation}| restore whatever the behaviour was
-% without \cs{debug_on:n} |{deprecation}|.
-%
-% In later sections we use the \pkg{l3doc} key \texttt{deprecated} with
-% a date equal to that \meta{date} plus $6$~months, so that \pkg{l3doc}
-% will complain if we forget to remove the stale \meta{parameters} and
-% \Arg{code}.
-%
-% In the explanations below, \meta{definition} \meta{function}
-% \meta{parameters} \Arg{code} or assignments that only differ in the
-% scope of the \meta{definition} will be called \enquote{the standard
-% definition}.
-%
-% \begin{macro}
-% {
-% \__kernel_patch_deprecation:nnNNpn, \@@_patch_aux:nnNNnn,
-% \@@_warn_once:nnNnn,
-% \@@_patch_aux:Nn,
-% \@@_just_error:nnNN
-% }
-% (The parameter text is grabbed using |#5#|.) The arguments of
-% \cs{__kernel_deprecation_code:nn} are run upon \cs{debug_on:n}
-% |{deprecation}| and \cs{debug_off:n} |{deprecation}|, respectively.
-% In both scenarios we the \meta{function} may be \tn{outer} so we
-% undefine it with \cs{tex_let:D} before redefining it, with
-% \cs{__kernel_deprecation_error:Nnn} or with some code added shortly.
-% \begin{macrocode}
-\cs_new_protected:Npn \__kernel_patch_deprecation:nnNNpn #1#2#3#4#5#
- { \@@_patch_aux:nnNNnn {#1} {#2} #3 #4 {#5} }
-\cs_new_protected:Npn \@@_patch_aux:nnNNnn #1#2#3#4#5#6
- {
- \__kernel_deprecation_code:nn
- {
- \tex_let:D #4 \scan_stop:
- \__kernel_deprecation_error:Nnn #4 {#2} {#1}
- }
- { \tex_let:D #4 \scan_stop: }
- \cs_if_eq:NNTF #3 \cs_gset_protected:Npn
- { \@@_warn_once:nnNnn {#1} {#2} #4 {#5} {#6} }
- { \@@_patch_aux:Nn #3 { #4 #5 {#6} } }
- }
-% \end{macrocode}
-% In case we want a warning, the \meta{function} is defined to produce
-% such a warning without grabbing any argument, then redefine itself
-% to the standard definition that the \meta{function} should have,
-% with arguments, and call that definition. The \texttt{e}-type
-% expansion and \cs{exp_not:n} avoid needing to double the~|#|, which
-% we could not do anyways. We then deal with the code for
-% \cs{debug_off:n} |{deprecation}|: presumably someone doing that does
-% not need the warning so we simply do the standard definition.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_warn_once:nnNnn #1#2#3#4#5
- {
- \cs_gset_protected:Npe #3
- {
- \__kernel_if_debug:TF
- {
- \exp_not:N \msg_warning:nneee
- { deprecation } { deprecated-command }
- {#1}
- { \token_to_str:N #3 }
- { \tl_to_str:n {#2} }
- }
- { }
- \exp_not:n { \cs_gset_protected:Npn #3 #4 {#5} }
- \exp_not:N #3
- }
- \__kernel_deprecation_code:nn { }
- { \cs_set_protected:Npn #3 #4 {#5} }
- }
-% \end{macrocode}
-% In case we want neither warning nor error, the \meta{function} is
-% given its standard definition. Here |#1| is \cs{cs_new:Npn} or
-% \cs{cs_new_protected:Npn}) and |#2| is \meta{function}
-% \meta{parameters} \Arg{code}, so |#1#2| performs the assignment.
-% For \cs{debug_off:n} |{deprecation}| we want to use the same
-% assignment but with a different scope, hence the \cs{cs_if_eq:NNTF}
-% test.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_patch_aux:Nn #1#2
- {
- #1 #2
- \cs_if_eq:NNTF #1 \cs_gset_protected:Npn
- { \__kernel_deprecation_code:nn { } { \cs_set_protected:Npn #2 } }
- { \__kernel_deprecation_code:nn { } { \cs_set:Npn #2 } }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\__kernel_deprecation_error:Nnn}
-% The \tn{outer} definition here ensures the command cannot appear
-% in an argument. Use this auxiliary on all commands that have been
-% removed since 2015.
-% \begin{macrocode}
-\cs_new_protected:Npn \__kernel_deprecation_error:Nnn #1#2#3
- {
- \tex_protected:D \tex_outer:D \tex_edef:D #1
- {
- \exp_not:N \msg_expandable_error:nnnnn
- { deprecation } { deprecated-command }
- { \tl_to_str:n {#3} } { \token_to_str:N #1 } { \tl_to_str:n {#2} }
- \exp_not:N \msg_error:nneee
- { deprecation } { deprecated-command }
- { \tl_to_str:n {#3} } { \token_to_str:N #1 } { \tl_to_str:n {#2} }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-\msg_new:nnn { deprecation } { deprecated-command }
- {
- \tl_if_blank:nF {#3} { Use~ \tl_trim_spaces:n {#3} ~not~ }
- #2~deprecated~on~#1.
- }
-% \end{macrocode}
-%
-% \subsection{Deprecated \pkg{l3basics} functions}
-%
-% \begin{macrocode}
-%<@@=cs>
-% \end{macrocode}
-%
-% \begin{macro}[EXP, deprecated]{\cs_argument_spec:N}
-% For the present, do not deprecate fully as \LaTeXe{} will need to catch
-% up: one for Fall 2022.
-% \begin{macrocode}
-%\__kernel_patch_deprecation:nnNNpn { 2022-06-24 } { \cs_parameter_spec:N }
-\cs_new:Npn \cs_argument_spec:N { \cs_parameter_spec:N }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Deprecated \pkg{l3file} functions}
-%
-% \begin{macrocode}
-%<@@=file>
-% \end{macrocode}
-%
-% \begin{macro}[deprecated]
-% {
-% \iow_shipout_x:Nn, \iow_shipout_x:Nx,
-% \iow_shipout_x:cn, \iow_shipout_x:cx
-% }
-% Previously described as \texttt{x}-type, but the hash behaviour is really
-% \texttt{e}-type. Currently not \enquote{live} as we need to have a transition.
-% \begin{macrocode}
-% \__kernel_patch_deprecation:nnNNpn { 2023-10-10 } { \iow_shipout_e:Nn }
-\cs_new_protected:Npn \iow_shipout_x:Nn { \iow_shipout_e:Nn }
-\cs_generate_variant:Nn \iow_shipout_x:Nn { Nx , c, cx }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Deprecated \pkg{l3keys} functions}
-%
-% \begin{macrocode}
-%<@@=keys>
-% \end{macrocode}
-%
-% \begin{macro}[deprecated]{.str_set_x:N, .str_set_x:c}
-% \begin{macro}[deprecated]{.str_gset_x:N, .str_gset_x:c}
-% \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_str .str_set_x:N } #1
- { \@@_variable_set:NnnN #1 { str } { } x }
-\cs_new_protected:cpn { \c_@@_props_root_str .str_set_x:c } #1
- { \@@_variable_set:cnnN {#1} { str } { } x }
-\cs_new_protected:cpn { \c_@@_props_root_str .str_gset_x:N } #1
- { \@@_variable_set:NnnN #1 { str } { g } x }
-\cs_new_protected:cpn { \c_@@_props_root_str .str_gset_x:c } #1
- { \@@_variable_set:cnnN {#1} { str } { g } x }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[deprecated]{.tl_set_x:N, .tl_set_x:c}
-% \begin{macro}[deprecated]{.tl_gset_x:N, .tl_gset_x:c}
-% \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_str .tl_set_x:N } #1
- { \@@_variable_set:NnnN #1 { tl } { } x }
-\cs_new_protected:cpn { \c_@@_props_root_str .tl_set_x:c } #1
- { \@@_variable_set:cnnN {#1} { tl } { } x }
-\cs_new_protected:cpn { \c_@@_props_root_str .tl_gset_x:N } #1
- { \@@_variable_set:NnnN #1 { tl } { g } x }
-\cs_new_protected:cpn { \c_@@_props_root_str .tl_gset_x:c } #1
- { \@@_variable_set:cnnN {#1} { tl } { g } x }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[deprecated]
-% {
-% \keys_set_filter:nnnN, \keys_set_filter:nnVN,
-% \keys_set_filter:nnvN, \keys_set_filter:nnoN
-% }
-% \begin{macro}[deprecated]
-% {
-% \keys_set_filter:nnnnN, \keys_set_filter:nnVnN,
-% \keys_set_filter:nnvnN, \keys_set_filter:nnonN
-% }
-% \begin{macro}[deprecated]
-% {
-% \keys_set_filter:nnn, \keys_set_filter:nnV,
-% \keys_set_filter:nnv, \keys_set_filter:nno
-% }
-% We need a transition here so for the present this is commented out:
-% only needed for \texttt{latex-lab} code so this should not last for
-% too long.
-% \begin{macrocode}
-%\__kernel_patch_deprecation:nnNNpn { 2024-01-10 } { \keys_set_exclude_groups:nnn }
-\cs_new_protected:Npn \keys_set_filter:nnn { \keys_set_exclude_groups:nnn }
-\cs_generate_variant:Nn \keys_set_filter:nnn { nnV , nnv , nno }
-%\__kernel_patch_deprecation:nnNNpn { 2024-01-10 } { \keys_set_exclude_groups:nnnN }
-\cs_new_protected:Npn \keys_set_filter:nnnN { \keys_set_exclude_groups:nnnN }
-\cs_generate_variant:Nn \keys_set_filter:nnnN { nnV , nnv , nno }
-%\__kernel_patch_deprecation:nnNNpn { 2024-01-10 } { \keys_set_exclude_groups:nnnnN }
-\cs_new_protected:Npn \keys_set_filter:nnnnN { \keys_set_exclude_groups:nnnnN }
-\cs_generate_variant:Nn \keys_set_filter:nnnnN { nnV , nnv , nno }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Deprecated \pkg{l3msg} functions}
-%
-% \begin{macrocode}
-%<@@=msg>
-% \end{macrocode}
-%
-% \begin{macro}[deprecated]{\msg_gset:nnnn, \msg_gset:nnn}
-% \begin{macrocode}
-\__kernel_patch_deprecation:nnNNpn { 2024-02-13 } { \msg_set:nnnn }
-\cs_new_protected:Npn \msg_gset:nnnn { \msg_set:nnnn }
-\__kernel_patch_deprecation:nnNNpn { 2024-02-13 } { \msg_set:nnn }
-\cs_new_protected:Npn \msg_gset:nnn { \msg_set:nnn }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Deprecated \pkg{l3pdf} functions}
-%
-% \begin{macrocode}
-%<@@=pdf>
-% \end{macrocode}
-%
-% \begin{variable}[deprecated]{\g_@@_object_prop}
-% For tracking objects.
-% \begin{macrocode}
-\prop_new:N \g_@@_object_prop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[deprecated]
-% {\pdf_object_new:nn, \pdf_object_write:nn, \pdf_object_write:nx}
-% \begin{macrocode}
-\__kernel_patch_deprecation:nnNNpn { 2022-08-30 } { [\pdf_object_new:n] }
-\cs_new_protected:Npn \pdf_object_new:nn #1#2
- {
- \prop_gput:Nnn \g_@@_object_prop {#1} {#2}
- \@@_backend_object_new:n {#1}
- }
-\__kernel_patch_deprecation:nnNNpn { 2022-08-30 } { [\pdf_object_write:n] }
-\cs_new_protected:Npn \pdf_object_write:nn #1#2
- {
- \exp_args:Nne \@@_backend_object_write:nnn
- {#1} { \prop_item:Nn \g_@@_object_prop {#1} } {#2}
- \bool_gset_true:N \g_@@_init_bool
- }
-\cs_generate_variant:Nn \pdf_object_write:nn { nx }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Deprecated \pkg{l3prg} functions}
-%
-% \begin{macrocode}
-%<@@=cs>
-% \end{macrocode}
-%
-% \begin{macro}[EXP, noTF, deprecated]{\bool_case_true:n}
-% \begin{macrocode}
-\__kernel_patch_deprecation:nnNNpn { 2023-05-03 } { \bool_case:n }
-\cs_new:Npn \bool_case_true:n { \bool_case:n }
-\__kernel_patch_deprecation:nnNNpn { 2023-05-03 } { \bool_case:nT }
-\cs_new:Npn \bool_case_true:nT { \bool_case:nT }
-\__kernel_patch_deprecation:nnNNpn { 2023-05-03 } { \bool_case:nF }
-\cs_new:Npn \bool_case_true:nF { \bool_case:nF }
-\__kernel_patch_deprecation:nnNNpn { 2023-05-03 } { \bool_case:nTF }
-\cs_new:Npn \bool_case_true:nTF { \bool_case:nTF }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Deprecated \pkg{l3str} functions}
-%
-% \begin{macrocode}
-%<@@=str>
-% \end{macrocode}
-%
-% \begin{macro}[EXP, deprecated]
-% {
-% \str_lower_case:n, \str_lower_case:f,
-% \str_upper_case:n, \str_upper_case:f,
-% \str_fold_case:n, \str_fold_case:V
-% }
-% \begin{macrocode}
-\__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \str_lowercase:n }
-\cs_new:Npn \str_lower_case:n { \str_lowercase:n }
-\__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \str_lowercase:f }
-\cs_new:Npn \str_lower_case:f { \str_lowercase:f }
-\__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \str_uppercase:n }
-\cs_new:Npn \str_upper_case:n { \str_uppercase:n }
-\__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \str_uppercase:f }
-\cs_new:Npn \str_upper_case:f { \str_uppercase:f }
-\__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \str_casefold:n }
-\cs_new:Npn \str_fold_case:n { \str_casefold:n }
-\__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \str_casefold:V }
-\cs_new:Npn \str_fold_case:V { \str_casefold:V }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP, deprecated]
-% {\str_foldcase:n, \str_foldcase:V}
-% \begin{macrocode}
-\__kernel_patch_deprecation:nnNNpn { 2020-10-17 } { \str_casefold:n }
-\cs_new:Npn \str_foldcase:n { \str_casefold:n }
-\__kernel_patch_deprecation:nnNNpn { 2022-10-17 } { \str_casefold:V }
-\cs_new:Npn \str_foldcase:V { \str_casefold:V }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP, deprecated]
-% {\str_declare_eight_bit_encoding:nnn}
-% This command was made internal, with one more argument. There is no
-% easy way to compute a reasonable value for that extra argument so we
-% take a value that is big enough to accommodate all of Unicode.
-% \begin{macrocode}
-\__kernel_patch_deprecation:nnNNpn { 2020-08-20 } { }
-\cs_new_protected:Npn \str_declare_eight_bit_encoding:nnn #1
- { \@@_declare_eight_bit_encoding:nnnn {#1} { 1114112 } }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Deprecated \pkg{l3seq} functions}
-%
-% \begin{macrocode}
-%<@@=seq>
-% \end{macrocode}
-%
-% \begin{macro}[deprecated]{\seq_indexed_map_inline:Nn}
-% \begin{macro}[EXP, deprecated]{ \seq_indexed_map_function:NN}
-% \begin{macrocode}
-\__kernel_patch_deprecation:nnNNpn { 2020-06-18 } { \seq_map_indexed_inline:Nn }
-\cs_new_protected:Npn \seq_indexed_map_inline:Nn { \seq_map_indexed_inline:Nn }
-\__kernel_patch_deprecation:nnNNpn { 2020-06-18 } { \seq_map_indexed_function:NN }
-\cs_new:Npn \seq_indexed_map_function:NN { \seq_map_indexed_function:NN }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[deprecated]{\seq_mapthread_function:NNN}
-% \begin{macrocode}
-\__kernel_patch_deprecation:nnNNpn { 2023-05-10 } { \seq_map_pairwise_function:NNN }
-\cs_new:Npn \seq_mapthread_function:NNN { \seq_map_pairwise_function:NNN }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[deprecated]{\seq_set_map_x:NNn, \seq_gset_map_x:NNn}
-% \begin{macrocode}
-\__kernel_patch_deprecation:nnNNpn { 2023-10-26 } { \seq_set_map_e:NNn }
-\cs_new_protected:Npn \seq_set_map_x:NNn { \seq_set_map_e:NNn }
-\__kernel_patch_deprecation:nnNNpn { 2023-10-26 } { \seq_gset_map_e:NNn }
-\cs_new_protected:Npn \seq_gset_map_x:NNn { \seq_gset_map_e:NNn }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Deprecated \pkg{l3sys} functions}
-%
-% \begin{macrocode}
-%<@@=sys>
-% \end{macrocode}
-%
-% \begin{macro}[deprecated]{\sys_load_deprecation:}
-% \begin{macrocode}
-\__kernel_patch_deprecation:nnNNpn { 2021-01-11 } { (no~longer~required) }
-\cs_new_protected:Npn \sys_load_deprecation: { }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Deprecated \pkg{l3text} functions}
-%
-% \begin{macrocode}
-%<@@=text>
-% \end{macrocode}
-%
-% \begin{macro}[EXP, deprecated]{\text_titlecase:n}
-% \begin{macro}[EXP, deprecated]{\text_titlecase:nn}
-% \begin{macrocode}
-\__kernel_patch_deprecation:nnNNpn { 2023-07-08 } { \text_titlecase_first:n }
-\cs_new:Npn \text_titlecase:n #1
- { \text_titlecase_first:n { \text_lowercase:n {#1} } }
-\__kernel_patch_deprecation:nnNNpn { 2023-07-08 } { \text_titlecase_first:nn }
-\cs_new:Npn \text_titlecase:nn #1#2
- { \text_titlecase_first:nn {#1} { \text_lowercase:n {#2} } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Deprecated \pkg{l3tl} functions}
-%
-% \begin{macrocode}
-%<@@=tl>
-% \end{macrocode}
-%
-% \begin{macro}[deprecated]
-% {
-% \tl_lower_case:n, \tl_lower_case:nn,
-% \tl_upper_case:n, \tl_upper_case:nn,
-% \tl_mixed_case:n, \tl_mixed_case:nn,
-% }
-% \begin{macrocode}
-\__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \text_lowercase:n }
-\cs_new:Npn \tl_lower_case:n #1
- { \text_lowercase:n {#1} }
-\__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \text_lowercase:nn }
-\cs_new:Npn \tl_lower_case:nn #1#2
- { \text_lowercase:nn {#1} {#2} }
-\__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \text_uppercase:n }
-\cs_new:Npn \tl_upper_case:n #1
- { \text_uppercase:n {#1} }
-\__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \text_uppercase:nn }
-\cs_new:Npn \tl_upper_case:nn #1#2
- { \text_uppercase:nn {#1} {#2} }
-\__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \text_titlecase_first:n }
-\cs_new:Npn \tl_mixed_case:n #1
- { \text_titlecase_first:n {#1} }
-\__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \text_titlecase_first:nn }
-\cs_new:Npn \tl_mixed_case:nn #1#2
- { \text_titlecase_first:nn {#1} {#2} }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[noTF, deprecated]{\tl_case:Nn, \tl_case:cn}
-% \begin{macrocode}
-\__kernel_patch_deprecation:nnNNpn { 2022-05-23 } { \token_case_meaning:Nn }
-\cs_new:Npn \tl_case:Nn { \token_case_meaning:Nn }
-\__kernel_patch_deprecation:nnNNpn { 2022-05-23 } { \token_case_meaning:NnT }
-\cs_new:Npn \tl_case:NnT { \token_case_meaning:NnT }
-\__kernel_patch_deprecation:nnNNpn { 2022-05-23 } { \token_case_meaning:NnF }
-\cs_new:Npn \tl_case:NnF { \token_case_meaning:NnF }
-\__kernel_patch_deprecation:nnNNpn { 2022-05-23 } { \token_case_meaning:NnTF }
-\cs_new:Npn \tl_case:NnTF { \token_case_meaning:NnTF }
-\cs_generate_variant:Nn \tl_case:Nn { c }
-\prg_generate_conditional_variant:Nnn \tl_case:Nn
- { c } { T , F , TF }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[deprecated]{\tl_build_clear:N, \tl_build_gclear:N}
-% \begin{macrocode}
-\__kernel_patch_deprecation:nnNNpn { 2023-10-18 } { \tl_build_begin:N }
-\cs_new_protected:Npn \tl_build_clear:N { \tl_build_begin:N }
-\__kernel_patch_deprecation:nnNNpn { 2023-10-18 } { \tl_build_gbegin:N }
-\cs_new_protected:Npn \tl_build_gclear:N { \tl_build_gbegin:N }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[deprecated]{\tl_build_get:NN}
-% \begin{macrocode}
-\__kernel_patch_deprecation:nnNNpn { 2023-10-25 } { \tl_build_get_intermediate:NN }
-\cs_new_protected:Npn \tl_build_get:NN { \tl_build_get_intermediate:NN }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Deprecated \pkg{l3token} functions}
-%
-% \begin{macrocode}
-%<@@=char>
-% \end{macrocode}
-%
-% \begin{macro}[EXP, deprecated]{\char_to_utfviii_bytes:n}
-% \begin{macrocode}
-\__kernel_patch_deprecation:nnNNpn { 2022-10-09 } { [ \codepoint_generate:nn ] }
-\cs_new:Npn \char_to_utfviii_bytes:n { \__kernel_codepoint_to_bytes:n }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP, deprecated]{\char_to_nfd:N, \char_to_nfd:n}
-% \begin{macrocode}
-\__kernel_patch_deprecation:nnNNpn { 2022-10-09 } { \codepoint_to_nfd:n }
-\cs_new:Npn \char_to_nfd:N #1 { \codepoint_to_nfd:n {`#1} }
-\__kernel_patch_deprecation:nnNNpn { 2022-10-09 } { \codepoint_to_nfd:n }
-\cs_new:Npn \char_to_nfd:n { \codepoint_to_nfd:n }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP, deprecated]
-% {
-% \char_lower_case:N, \char_upper_case:N,
-% \char_mixed_case:Nn, \char_fold_case:N,
-% \char_str_lower_case:N, \char_str_upper_case:N,
-% \char_str_mixed_case:Nn, \char_str_fold_case:N,
-% }
-% \begin{macrocode}
-\__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \text_lowercase:n }
-\cs_new:Npn \char_lower_case:N { \text_lowercase:n }
-\__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \text_uppercase:n }
-\cs_new:Npn \char_upper_case:N { \text_uppercase:n }
-\__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \text_titlecase_first:n }
-\cs_new:Npn \char_mixed_case:N { \text_titlecase_first:n }
-\__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \str_casefold:n }
-\cs_new:Npn \char_fold_case:N { \str_casefold:n }
-\__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \str_lowercase:n }
-\cs_new:Npn \char_str_lower_case:N { \str_lowercase:n }
-\__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \str_uppercase:n }
-\cs_new:Npn \char_str_upper_case:N { \str_uppercase:n }
-\__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \str_titlecase:n }
-\cs_new:Npn \char_str_mixed_case:N { \str_titlecase:n }
-\__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \str_casefold:n }
-\cs_new:Npn \char_str_fold_case:N { \str_casefold:n }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP, deprecated]
-% {
-% \char_lowercase:N, \char_titlecase:N, \char_uppercase:N,
-% \char_foldcase:N,
-% \char_str_lowercase:N, \char_str_titlecase:N, \char_str_uppercase:N,
-% \char_str_foldcase:N,
-% }
-% \begin{macrocode}
-\__kernel_patch_deprecation:nnNNpn { 2022-10-17 } { \text_lowercase:n }
-\cs_new:Npn \char_lowercase:N { \text_lowercase:n }
-\__kernel_patch_deprecation:nnNNpn { 2022-10-17 } { \text_uppercase:n }
-\cs_new:Npn \char_uppercase:N { \text_uppercase:n }
-\__kernel_patch_deprecation:nnNNpn { 2022-10-17 } { \text_titlecase_first:n }
-\cs_new:Npn \char_titlecase:N { \text_titlecase_first:n }
-\__kernel_patch_deprecation:nnNNpn { 2022-10-17 } { \str_casefold:n }
-\cs_new:Npn \char_foldcase:N { \str_casefold:n }
-\__kernel_patch_deprecation:nnNNpn { 2022-10-17 } { \str_lowercase:n }
-\cs_new:Npn \char_str_lowercase:N { \str_lowercase:n }
-\__kernel_patch_deprecation:nnNNpn { 2022-10-17 }
- { \tl_to_str:e { \text_titlecase_first:n } }
-\cs_new:Npn \char_str_titlecase:N #1
- { \tl_to_str:e { \text_titlecase_first:n {#1} } }
-\__kernel_patch_deprecation:nnNNpn { 2022-10-17 } { \str_uppercase:n }
-\cs_new:Npn \char_str_uppercase:N { \str_uppercase:n }
-\__kernel_patch_deprecation:nnNNpn { 2022-10-17 } { \str_casefold:n }
-\cs_new:Npn \char_str_foldcase:N { \str_casefold:n }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[TF, deprecated]
-% {
-% \peek_catcode_ignore_spaces:N, \peek_catcode_remove_ignore_spaces:N,
-% \peek_charcode_ignore_spaces:N, \peek_charcode_remove_ignore_spaces:N,
-% \peek_meaning_ignore_spaces:N, \peek_meaning_remove_ignore_spaces:N
-% }
-% A little extra fun here to deal with the expansion.
-% \begin{macrocode}
-\tl_map_inline:nn
- {
- { catcode } { catcode_remove }
- { charcode } { charcode_remove }
- { meaning } { meaning_remove }
- }
- {
- \use:e
- {
- \__kernel_patch_deprecation:nnNNpn { 2022-01-11 } { \peek_remove_spaces:n }
- \cs_gset_protected:Npn \exp_not:c { peek_ #1 _ignore_spaces:NTF } ##1##2##3
- {
- \peek_remove_spaces:n
- { \exp_not:c { peek_ #1 :NTF } ##1 {##2} {##3} }
- }
- \__kernel_patch_deprecation:nnNNpn { 2022-01-11 } { \peek_remove_spaces:n }
- \cs_gset_protected:Npn \exp_not:c { peek_ #1 _ignore_spaces:NT } ##1##2
- {
- \peek_remove_spaces:n
- { \exp_not:c { peek_ #1 :NT } ##1 {##2} }
- }
- \__kernel_patch_deprecation:nnNNpn { 2022-01-11 } { \peek_remove_spaces:n }
- \cs_gset_protected:Npn \exp_not:c { peek_ #1 _ignore_spaces:NF } ##1##2
- {
- \peek_remove_spaces:n
- { \exp_not:c { peek_ #1 :NF } ##1 {##2} }
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3doc.dtx b/macros/latex/contrib/l3kernel/l3doc.dtx
deleted file mode 100644
index a48a24df23..0000000000
--- a/macros/latex/contrib/l3kernel/l3doc.dtx
+++ /dev/null
@@ -1,4800 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3doc.dtx
-%
-% Copyright (C) 1990-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\def\nameofplainTeX{plain}
-\ifx\fmtname\nameofplainTeX\else
- \expandafter\begingroup
-\fi
-\input docstrip %
-\askforoverwritefalse
-\preamble
-
-Copyright (C) 1990-2024 The LaTeX Project
-
-It may be distributed and/or modified under the conditions of
-the LaTeX Project Public License (LPPL), either version 1.3c of
-this license or (at your option) any later version. The latest
-version of this license is in the file:
-
- https://www.latex-project.org/lppl.txt
-
-This file is part of the "l3kernel bundle" (The Work in LPPL)
-and all files in that bundle must be distributed together.
-
-\endpreamble
-% stop docstrip adding \endinput
-\postamble
-\endpostamble
-\generate{\file{l3doc.cls}{\from{l3doc.dtx}{class,cfg}}}
-%\generate{\file{l3doc.ist}{\from{l3doc.dtx}{docist}}}
-\ifx\fmtname\nameofplainTeX
- \expandafter\endbatchfile
-\else
- \expandafter\endgroup
-\fi
-%</driver>
-%
-%<*driver|class>
-\RequirePackage{calc}
-%</driver|class>
-%
-%<*driver>
-\documentclass{l3doc}
-\usepackage{framed}
-\begin{document}
- \DocInput{l3doc.dtx}
-\end{document}
-%</driver>
-%
-% This isn't included in the typeset documentation because it's a bit
-% ugly:
-%<*class>
-\ProvidesExplClass{l3doc}{2024-03-14}{}
- {L3 Experimental documentation class}
-%</class>
-% \fi
-%
-% \title{The \cls{l3doc} class -- experimental\thanks{%
-% On popular request we now distribute the document for this
-% experimental class. However, please note that it is by no means
-% in final state and is \emph{likely} to undergo modifications,
-% even \emph{incompatible ones}! Thus, using it might therefore
-% require you to do updates, if the class changes.}}
-%
-% \author{\Team}
-% \date{Released 2024-03-14}
-% \maketitle
-% \tableofcontents
-%
-% \begin{documentation}
-%
-%
-% \section{Introduction}
-%
-% Code and documentation for this class have been written prior to the
-% change of \pkg{doc} from version 2 to version 3, which already shows
-% how far behind this class currently is. So take the following
-% warning seriously please:
-%
-% \begin{quote}
-% \textbf{It is much less stable than the main \pkg{expl3} packages.\\
-% Use at own risk!}
-% \end{quote}
-%
-% This is an ad-hoc class for documenting the \pkg{expl3} bundle, a
-% collection of modules or packages that make up \LaTeX3's programming
-% environment. Eventually it will replace the \cls{ltxdoc} class for
-% \LaTeX3, but not before the good ideas in \pkg{hypdoc}, \cls{xdoc2},
-% \pkg{docmfp}, and \cls{gmdoc} are incorporated.
-%
-% It is written as a \enquote{self-contained} docstrip file: executing
-% |latex l3doc.dtx| generates the \file{l3doc.cls} file and typesets
-% this documentation; execute |tex l3doc.dtx| to only generate
-% \file{l3doc.cls}.
-%
-% \section{Features of other packages}
-%
-% This class builds on the \pkg{ltxdoc} class and the \pkg{doc} package,
-% but in the time since they were originally written some improvements
-% and replacements have appeared that we would like to use as
-% inspiration.
-%
-% These packages or classes are \pkg{hypdoc}, \pkg{docmfp}, \pkg{gmdoc},
-% and \pkg{xdoc}. I have summarised them below in order to work out
-% what sort of features we should aim at a minimum for \pkg{l3doc}.
-%
-% \subsection{The \pkg{hypdoc} package}
-%
-% This package provides hyperlink support for the \pkg{doc} package. I
-% have included it in this list to remind me that cross-referencing
-% between documentation and implementation of methods is not very
-% good. (\emph{E.g.}, it would be nice to be able to automatically
-% hyperlink the documentation for a function from its implementation and
-% vice-versa.)
-%
-% \subsection{The \pkg{docmfp} package}
-%
-% \begin{itemize}
-% \item Provides \cs{DescribeRoutine} and the \env{routine}
-% environment (\emph{etc.}) for MetaFont and MetaPost code.
-% \item Provides \cs{DescribeVariable} and the \env{variable}
-% environment (\emph{etc.}) for more general code.
-% \item Provides \cs{Describe} and the \env{Code} environment
-% (\emph{etc.}) as a generalisation of the above two
-% instantiations.
-% \item Small tweaks to the DocStrip system to aid non-\LaTeX{} use.
-% \end{itemize}
-%
-% \subsection{The \pkg{xdoc2} package}
-%
-% \begin{itemize}
-% \item Two-sided printing.
-% \item \cs{NewMacroEnvironment}, \cs{NewDescribeEnvironment}; similar
-% idea to \pkg{docmfp} but more comprehensive.
-% \item Tons of small improvements.
-% \end{itemize}
-%
-% \subsection{The \pkg{gmdoc} package}
-%
-% Radical re-implementation of \pkg{doc} as a package or class.
-% \begin{itemize}
-% \item Requires no |\begin{macrocode}| blocks!
-% \item Automatically inserts |\begin{macro}| blocks!
-% \item And a whole bunch of other little things.
-% \end{itemize}
-%
-% \section{Problems \& Todo}
-%
-% Problems at the moment:
-% (1)~not flexible in the types of things that can be documented;
-% (2)~no obvious link between the |\begin{function}| environment for
-% documenting things to the |\begin{macro}| function that's used
-% analogously in the implementation.
-%
-% The \env{macro} should probably be renamed to \env{function} when it
-% is used within an implementation section. But they should have the
-% same syntax before that happens!
-%
-% Furthermore, we need another \enquote{layer} of documentation commands
-% to account for \enquote{user-macro} as opposed to
-% \enquote{code-functions}; the \pkg{expl3} functions should be
-% documented differently, probably, to the \pkg{ltcmd} user macros (at
-% least in terms of indexing).
-%
-% In no particular order, a list of things to do:
-% \begin{itemize}
-% \item Rename \env{function}/\env{macro} environments to better
-% describe their use.
-% \item Generalise \env{function}/\env{macro} for documenting
-% \enquote{other things}, such as environment names, package
-% options, even keyval options.
-% \item New function like \tn{part} but for files (remove awkward
-% \enquote{File} as \tn{partname}).
-% \item Something better to replace \cs{StopEventually}; I'm thinking
-% two environments \env{documentation} and \env{implementation} that
-% can conditionally typeset/ignore their material. (This has been
-% implemented but needs further consideration.)
-% \item Hyperlink documentation and implementation of macros (see the
-% \textsc{dtx} file of \pkg{svn-multi} v2 as an example). This is
-% partially done, now, but should be improved.
-% \end{itemize}
-%
-% \section{Documentation}
-%
-% \subsection{Configuration}
-%
-% Before class options are processed, \pkg{l3doc} loads a configuration
-% file \file{l3doc.cfg} if it exists, allowing you to customise the
-% behaviour of the class without having to change the documentation
-% source files.
-%
-% For example, to produce documentation on letter-sized paper instead of
-% the default A4 size, create \file{l3doc.cfg} and include the line
-% \begin{verbatim}
-% \PassOptionsToClass{letterpaper}{l3doc}
-% \end{verbatim}
-%
-% By default, \pkg{l3doc} selects the |T1| font encoding and loads the
-% Latin Modern fonts. To prevent this, use the class option
-% |cm-default|.
-%
-% \subsection{Class options}
-%
-% The class recognises a number of options, some of which are generally
-% useful and some of which are aimed squarely at use by the kernel team only.
-%
-% \DescribeOption{full}
-% \DescribeOption{onlydoc}
-% When the \texttt{full} option is set (the standard setting), both the
-% documentation and implementation parts of the source are typeset. If on the
-% other hand the \texttt{onlydoc} option is set, only the documentation part
-% is typeset.
-%
-% \DescribeOption{lm-default}
-% Selects whether the standard font set up is Latin Modern in the \texttt{T1}
-% encoding (the standard setting) or leaves the font setup unchanged.
-%
-% \DescribeOption{kernel}
-% Determines whether \pkg{l3doc} treats internal functions and variables
-% belonging to |kernel| module as allowable in code, for instance
-% \cs{__kernel_tl_to_str:w}, \cs{c__kernel_expl_date_tl}, and
-% \cs{l__kernel_expl_bool}. In general,
-% \emph{no} internal material from outside the current module is allowed.
-% However, for bootstrapping the \pkg{expl3} kernel, a small number of
-% cross-module functions are needed. To suppress the error message that
-% would otherwise arise, the class option \texttt{kernel} may be given.
-%
-% \DescribeOption{check}
-% When the \texttt{check} option is given, the class will record all commands
-% defined and documented in a \texttt{\meta{name}.cmds} file. This will show
-% which are both documented and defined, which are only documented and which
-% are only defined. (Here, \enquote{defined} means listed using a
-% \texttt{macro} or \texttt{variable} environment in the implementation part of
-% the source file).
-%
-% \DescribeOption{checktest}
-% When \texttt{checktest} is given as an option, the class will check that each
-% function entry in the implementation part of the source is marked using
-% \cs{UnitTest}.
-%
-% \DescribeOption{show-notes}
-% \DescribeOption{hide-notes}
-% These complementary options determine if the information given using the
-% \cs{NB} and \cs{NOTE} commands is printed.
-%
-% \DescribeOption{cs-break}
-% \DescribeOption{cs-break-nohyphen}
-% The commands \cs{cmd} and \cs{cs} allow hyphenation of control sequences
-% after (most) underscores. By default, a hyphen is used to mark the
-% hyphenation, but this can be changed with the \texttt{cs-break-nohyphen}
-% class option. To disable hyphenation of control sequences entirely, use
-% \texttt{cs-break = false}.
-%
-% By default, class options
-% \begin{verbatim}
-% full , check = false , checktest = false , lm-default
-% \end{verbatim}
-% are set.
-%
-% \subsection{Partitioning documentation and implementation}
-%
-% \pkg{doc} uses the \cs{OnlyDocumentation}/\cs{AlsoImplementation}
-% macros to guide the use of \cs{StopEventually}|{}|, which is intended
-% to be placed to partition the documentation and implementation within
-% a single \file{.dtx} file.
-%
-% This isn't very flexible, since it assumes that we \emph{always} want
-% to print the documentation. For the \pkg{expl3} sources, I wanted to
-% be able to input \file{.dtx} files in two modes: only displaying
-% the documentation, and only displaying the implementation. For
-% example:
-% \begin{verbatim}
-% \DisableImplementation
-% \DocInput{l3basics,l3prg,...}
-% \EnableImplementation
-% \DisableDocumentation
-% \DocInputAgain
-% \end{verbatim}
-%
-% The idea being that the entire \pkg{expl3} bundle can be documented,
-% with the implementation included at the back. Now, this isn't
-% perfect, but it's a start.
-%
-% Use |\begin{documentation}...\end{documentation}| around the
-% documentation, and |\begin{implementation}...\end{implementation}|
-% around the implementation. The
-% \cs{EnableDocumentation}/\cs{EnableImplementation} causes them to
-% be typeset when the \file{.dtx} file is \cs{DocInput}; use
-% \cs{DisableDocumentation}/\cs{DisableImplementation} to omit the
-% contents of those environments.
-%
-% Note that \cs{DocInput} now takes comma-separated arguments, and
-% \cs{DocInputAgain} can be used to re-input all \file{.dtx} files
-% previously input in this way.
-%
-% \subsection{General text markup}
-%
-% Many of the commands in this section come from \pkg{ltxdoc} with some
-% improvements.
-%
-% \begin{function}{\cmd, \cs}
-% \begin{syntax}
-% \cmd{\cmd} \oarg{options} \meta{control sequence}\\
-% \cs{cs} \oarg{options} \marg{csname}
-% \end{syntax}
-% These commands are provided to typeset control sequences.
-% |\cmd\foo| produces \enquote{\cmd\foo} and |\cs{foo}| produces the
-% same. In general, \cs{cs} is more robust since
-% it doesn't rely on catcodes being \enquote{correct} and is therefore
-% recommended.
-%
-% These commands are aware of the |@@| \pkg{DocStrip} syntax and
-% replace such instances correctly in the typeset documentation.
-% This only happens after a |%<@@=|\meta{module}|>| declaration.
-%
-% Additionally, commands can be used in the argument of \cs{cs}. For
-% instance, |\cs{\meta{name}:\meta{signature}}| produces
-% \cs[no-index]{\meta{name}:\meta{signature}}.
-%
-% The \meta{options} are a key--value list which can contain the
-% following keys:
-% \begin{itemize}
-% \item |index=|\meta{name}: the \meta{csname} is indexed as if
-% one had written \cs{cs}\Arg{name}.
-% \item |no-index|: the \meta{csname} is not indexed.
-% \item |module=|\meta{module}: the \meta{csname} is indexed in
-% the list of commands from the \meta{module}; the \meta{module}
-% can in particular be |TeX| for \enquote{\TeX{} and \LaTeXe{}}
-% commands, or empty for commands which should be placed in the
-% main index. By default, the \meta{module} is deduced
-% automatically from the command name.
-% \item |replace| is a boolean key (\texttt{true} by default) which
-% indicates whether to replace |@@| as \pkg{DocStrip} does.
-% \end{itemize}
-% These commands allow hyphenation of control sequences after (most) underscores.
-% By default, a hyphen is used to mark the hyphenation, but this can be changed with
-% the \texttt{cs-break-nohyphen} class option.
-% To disable hyphenation of control sequences entirely, use
-% \texttt{cs-break = false}.
-% \end{function}
-%
-%
-% \begin{function}{\tn}
-% \begin{syntax}
-% \cs{tn} \oarg{options} \marg{csname}
-% \end{syntax}
-% Analoguous to \cs{cs} but intended for \enquote{traditional} \TeX{}
-% or \LaTeXe{} commands; they are indexed accordingly. This is in
-% fact equivalent to \cs{cs} |[module=TeX, replace=false,|
-% \meta{options}|]| \Arg{csname}.
-% \end{function}
-%
-% \begin{function}{\meta}
-% \begin{syntax}
-% \cs{meta} \Arg{name}
-% \end{syntax}
-% \cs{meta} typesets the \meta{name} italicised in \meta{angle
-% brackets}. Within a \env{function} environment or similar, angle
-% brackets |<...>| are set up to be a shorthand for |\meta{...}|.
-%
-% This function has additional functionality over its \pkg{ltxdoc}
-% versions; underscores can be used to subscript material as in math
-% mode. For example, |\meta{arg_{xy}}| produces
-% \enquote{\meta{arg_{xy}}}.
-% \end{function}
-%
-% \begin{function}{\Arg, \marg, \oarg, \parg}
-% \begin{syntax}
-% |\Arg| \Arg{name}
-% \end{syntax}
-% Typesets the \meta{name} as for \cs{meta} and wraps it in braces.
-%
-% The \cs{marg}/\cs{oarg}/\cs{parg} versions follow from \pkg{ltxdoc}
-% in being used for \enquote{mandatory} or \enquote{optional} or
-% \enquote{picture} brackets as per \LaTeXe{} syntax.
-% \end{function}
-%
-% \begin{function}{\file, \env, \pkg, \cls}
-% \begin{syntax}
-% \cs{pkg} \Arg{name}
-% \end{syntax}
-% These all take one argument and are intended to be used as semantic
-% commands for representing files, environments, package names, and
-% class names, respectively.
-% \end{function}
-%
-% \begin{function}{\NB, \NOTE}
-% \begin{syntax}
-% \cs{NB} \marg{tag} \marg{comments}
-% \verb|\begin{NOTE}| \marg{tag}
-% \qquad\meta{comments}
-% \verb|\end{NOTE}|
-% \end{syntax}
-% Make notes in the source that are not typeset by default. When the \verb|show-notes|
-% class option is active, the comments are typeset in a detokenized and verbatim mode, respectively.
-% \end{function}
-%
-% \subsection{Describing functions in the documentation}
-%
-% \DescribeEnv{function}
-% \DescribeEnv{variable}
-% Two heavily-used environments are defined to describe \pkg{expl3} functions
-% and variables. If describing a variable, use the latter environment; it
-% behaves identically to the \env{function} environment.
-% \DescribeEnv{syntax}
-% Both of the above environments are typically combined with the \env{syntax}
-% environment, to describe their syntax.
-% \begin{framed}
-% \vspace{-\baselineskip}
-% \begin{verbatim}
-% \begin{function}{\package_function_one:N, \package_function_two:n}
-% \begin{syntax}
-% \cs{package_function_one:N} \meta{cs}
-% \cs{package_function_two:n} \marg{Argument}
-% \end{syntax}
-% Descriptive text here ...
-% \end{function}
-% \end{verbatim}
-% \hrulefill
-% \par
-% \hspace*{0.25\textwidth}
-% \begin{minipage}{0.5\textwidth}
-% \begin{function}{\package_function_one:N, \package_function_two:n}
-% \begin{syntax}
-% \cs[no-index]{package_function_one:N} \meta{cs}
-% \cs[no-index]{package_function_two:n} \marg{Argument}
-% \end{syntax}
-% \emph{Descriptive text here …}
-% \end{function}
-% \end{minipage}
-% \end{framed}
-%
-% Function environments take an optional argument to indicate whether
-% the function(s) it describes are expandable (use |EXP|) or
-% restricted-expandable (use |rEXP|) or defined in conditional forms
-% (use |TF|, |pTF|, or |noTF|). Note that |pTF| implies |EXP| since
-% predicates must always be expandable, and that |noTF| means that the
-% function without |TF| should be documented in addition to |TF|. For
-% the conditional forms |TF| and |pTF|, the argument of the
-% \env{function} environment is \emph{not} in fact a command that
-% exists: in the example below, \cs[no-index]{tl_if_empty:N} does not
-% exist, but its conditional forms \cs{tl_if_empty:NT},
-% \cs{tl_if_empty:NF}, \cs{tl_if_empty:NTF} and predicate form
-% \cs{tl_if_empty_p:N} exist:
-% \begin{framed}
-% \vspace{-\baselineskip}
-% \begin{verbatim}
-% \begin{function}[pTF]{\tl_if_empty:N, \tl_if_empty:c}
-% \begin{syntax}
-% \cs{tl_if_empty_p:N} \meta{tl~var}
-% \cs{tl_if_empty:NTF} \meta{tl~var} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the \meta{token list variable} is entirely empty
-% (\emph{i.e.}~contains no tokens at all).
-% \end{function}
-% \end{verbatim}
-% \hrulefill
-% \par
-% \hspace*{0.25\textwidth}
-% \begin{minipage}{0.5\textwidth}
-% \begin{function}[pTF]{\tl_if_empty:N, \tl_if_empty:c}
-% \begin{syntax}
-% \cs{tl_if_empty_p:N} \meta{tl~var}
-% \cs{tl_if_empty:NTF} \meta{tl~var} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the \meta{token list variable} is entirely empty
-% (\emph{i.e.}~contains no tokens at all).
-% \end{function}
-% \end{minipage}
-% \end{framed}
-%
-% \DescribeEnv{texnote}
-% This environment is used to call out sections within \env{function}
-% and similar environments that are only of interest to seasoned
-% \TeX{} developers.
-%
-% \subsection{Describing functions in the implementation}
-%
-% \DescribeEnv{macro}
-% The well-used environment from \LaTeXe{} for marking up the
-% implementation of macros/functions remains the \env{macro}
-% environment. Some changes in \pkg{l3doc}: it now accepts
-% comma-separated lists of functions, to avoid a very large number of
-% consecutive |\end{macro}| statements.
-% Spaces and new lines are ignored (the option |[verb]| prevents this).
-% \begin{verbatim}
-% % \begin{macro}{\foo:N, \foo:c}
-% % \begin{macrocode}
-% ... code for \foo:N and \foo:c ...
-% % \end{macrocode}
-% % \end{macro}
-% \end{verbatim}
-% If you are documenting an auxiliary macro, it's generally not
-% necessary to highlight it as much and you also don't need to check it
-% for, say, having a test function and having a documentation chunk
-% earlier in a \env{function} environment. \pkg{l3doc} will pick up these
-% cases from the presence of |__| in the name, or you may force marking
-% as internal by using |\begin{macro}[int]| to mark it as such. The margin
-% call-out is then printed in grey for such cases.
-%
-% For documenting \pkg{expl3}-type conditionals, you may also pass this
-% environment a |TF| option (and omit it from the function name) to
-% denote that the function is provided with |T|, |F|, and |TF| suffixes.
-% A similar |pTF| option prints both |TF| and |_p| predicate forms.
-% An option |noTF| prints both the |TF| forms and a form with neither
-% |T| nor |F|, to document functions such as \cs[no-index]{prop_get:NN}
-% which also have conditional forms (\cs[no-index]{prop_get:NNTF}).
-%
-% In a very small number of cases, there is no user documentation for
-% a \enquote{public} function. In these rare cases, the option
-% |no-user-doc| may be added to suppress the undefined reference that
-% would otherwise then arises.
-%
-% \DescribeMacro{\TestFiles}
-% \cs{TestFiles}\marg{list of files} is used to indicate which test
-% files are used for the current code; they are printed in the
-% documentation.
-%
-% \DescribeMacro{\UnitTested}
-% Within a \env{macro} environment, it is a good idea to mark whether a
-% unit test has been created for the commands it defines. This is
-% indicated by writing \cs{UnitTested} anywhere within |\begin{macro}|
-% \dots |\end{macro}|.
-%
-% If the class option |checktest| is enabled, then it is an \emph{error}
-% to have a \env{macro} environment without a call to
-% \file{Testfiles}. This is intended for large packages such as
-% \pkg{expl3} that should have absolutely comprehensive tests suites and
-% whose authors may not always be as sharp at adding new tests with new
-% code as they should be.
-%
-% \DescribeMacro{\TestMissing}
-% If a function is missing a test, this may be flagged by writing (as
-% many times as needed) \cs{TestMissing} \marg{explanation of test
-% required}. These missing tests are summarised in the listing
-% printed at the end of the compilation run.
-%
-% \DescribeEnv{variable}
-% When documenting variable definitions, use the \env{variable}
-% environment instead. Here it behaves identically to the
-% \env{macro} environment, except that if the class option |checktest|
-% is enabled, variables are not required to have a test file.
-%
-% \DescribeEnv{arguments}
-% Within a \env{macro} environment, you may use the \env{arguments}
-% environment to describe the arguments taken by the function(s). It
-% behaves like a modified enumerate environment.
-% \begin{verbatim}
-% % \begin{macro}{\foo:nn, \foo:VV}
-% % \begin{arguments}
-% % \item Name of froozle to be frazzled
-% % \item Name of muble to be jubled
-% % \end{arguments}
-% % \begin{macrocode}
-% ... code for \foo:nn and \foo:VV ...
-% % \end{macrocode}
-% % \end{macro}
-% \end{verbatim}
-%
-%
-% \subsection{Keeping things consistent}
-%
-% Whenever a function is either documented or defined with
-% \env{function} and \env{macro} respectively, its name is stored in a
-% sequence for later processing.
-%
-% At the end of the document (\emph{i.e.}, after the \file{.dtx} file
-% has finished processing), the list of names is analysed to check
-% whether all defined functions have been documented and vice versa. The
-% results are printed in the console output.
-%
-% If you need to do more serious work with these lists of names, take a
-% look at the implementation for the data structures and methods used to
-% store and access them directly.
-%
-% \subsection{Documenting templates}
-%
-% The following macros are provided for documenting templates; might end
-% up being something completely different but who knows.
-% \begin{quote}\parskip=0pt\obeylines
-% |\begin{TemplateInterfaceDescription}| \Arg{template type name}
-% | \TemplateArgument{none}{---}|
-% \textsc{or one or more of these:}
-% | \TemplateArgument| \Arg{arg no} \Arg{meaning}
-% \textsc{and}
-% |\TemplateSemantics|
-% | | \meta{text describing the template type semantics}
-% |\end{TemplateInterfaceDescription}|
-% \end{quote}
-%
-% \begin{quote}\parskip=0pt\obeylines
-% |\begin{TemplateDescription}| \Arg{template type name} \Arg{name}
-% \textsc{one or more of these:}
-% | \TemplateKey| \marg{key name} \marg{type of key}
-% | |\marg{textual description of meaning}
-% | |\marg{default value if any}
-% \textsc{and}
-% |\TemplateSemantics|
-% | | \meta{text describing special additional semantics of the template}
-% |\end{TemplateDescription}|
-% \end{quote}
-%
-% \begin{quote}\parskip=0pt\obeylines
-% |\begin{InstanceDescription}| \oarg{text to specify key column width (optional)}
-% \hfill\marg{template type name}\marg{instance name}\marg{template name}
-% \textsc{one or more of these:}
-% | \InstanceKey| \marg{key name} \marg{value}
-% \textsc{and}
-% |\InstanceSemantics|
-% | | \meta{text describing the result of this instance}
-% |\end{InstanceDescription}|
-% \end{quote}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3doc} implementation}
-%
-% \begin{macrocode}
-%<*class>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=codedoc>
-% \end{macrocode}
-%
-% \subsection{Variables}
-%
-% \begin{variable}{\g_docinput_clist}
-% The list of files which have been input through \cs{DocInput}.
-% \begin{macrocode}
-\clist_new:N \g_docinput_clist
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\g_doc_functions_seq, \g_doc_macros_seq}
-% All functions documented through \env{function}, and all macros
-% introduced through \env{macro}. They can be compared to see what
-% documentation or code is missing.
-% \begin{macrocode}
-\seq_new:N \g_doc_functions_seq
-\seq_new:N \g_doc_macros_seq
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_detect_internals_bool, \l_@@_detect_internals_tl}
-% If \texttt{true}, \pkg{l3doc} will check for use of internal
-% commands \cs[no-index]{__\meta{pkg}_\ldots{}} from other packages in
-% the argument of the \texttt{macro} environment, and in the code typeset in
-% \texttt{macrocode} environments, but not in~\cs{cs}. Also a token list
-% to store temporary data for this purpose.
-% \begin{macrocode}
-\bool_new:N \l_@@_detect_internals_bool
-\bool_set_true:N \l_@@_detect_internals_bool
-\tl_new:N \l_@@_detect_internals_tl
-\tl_new:N \l_@@_detect_internals_cs_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_output_coffin}
-% The \env{function} environment is typeset by combining coffins
-% containing various pieces (function names, description, \emph{etc.})
-% into this coffin.
-% \begin{macrocode}
-\coffin_new:N \l_@@_output_coffin
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}
-% {\l_@@_functions_coffin, \l_@@_descr_coffin, \l_@@_syntax_coffin}
-% These coffins contain respectively the list of function names
-% (argument of the \env{function} environment), the text between
-% |\begin{function}| and |\end{function}|, and the syntax given in the
-% \env{syntax} environment.
-% \begin{macrocode}
-\coffin_new:N \l_@@_functions_coffin
-\coffin_new:N \l_@@_descr_coffin
-\coffin_new:N \l_@@_syntax_coffin
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\g_@@_syntax_box}
-% The contents of the \env{syntax} environment are typeset in this box
-% before being transferred to \cs{l_@@_syntax_coffin}.
-% \begin{macrocode}
-\box_new:N \g_@@_syntax_box
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_in_function_bool}
-% True when inside a \texttt{function} or \texttt{variable}
-% environment. Used by the \texttt{syntax} environment to determine
-% its behaviour.
-% \begin{macrocode}
-\bool_new:N \l_@@_in_function_bool
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_long_name_bool, \l_@@_trial_width_dim}
-% The boolean \cs{l_@@_long_name_bool} is \texttt{true} if the width
-% \cs{l_@@_trial_width_dim} of the coffin \cs{l_@@_functions_coffin}
-% (containing the current function names) is bigger than the space
-% available in the margin.
-% \begin{macrocode}
-\bool_new:N \l_@@_long_name_bool
-\dim_new:N \l_@@_trial_width_dim
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_nested_macro_int}
-% The nesting of \env{macro} environments (this is now~$0$ outside a
-% \env{macro} environment).
-% \begin{macrocode}
-\int_new:N \l_@@_nested_macro_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}
-% {
-% \l_@@_macro_tested_bool,
-% \g_@@_missing_tests_prop,
-% \g_@@_not_tested_seq,
-% \g_@@_testfiles_seq,
-% }
-% A boolean describing whether the current macro has tests, and some
-% global structures which contain information about test files and
-% which tests are missing.
-% \begin{macrocode}
-\bool_new:N \l_@@_macro_tested_bool
-\prop_new:N \g_@@_missing_tests_prop
-\seq_new:N \g_@@_not_tested_seq
-\seq_new:N \g_@@_testfiles_seq
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}
-% {
-% \l_@@_macro_deprecated_bool ,
-% \l_@@_macro_internal_bool,
-% \l_@@_macro_nodoc_bool ,
-% \l_@@_macro_TF_bool,
-% \l_@@_macro_pTF_bool,
-% \l_@@_macro_noTF_bool,
-% \l_@@_macro_EXP_bool,
-% \l_@@_macro_rEXP_bool,
-% \l_@@_macro_var_bool,
-% \l_@@_override_module_tl,
-% \l_@@_macro_documented_tl,
-% }
-% Contain information about some options of function/macro
-% environments. We initialize \cs{l_@@_override_module_tl} to avoid
-% overriding module names by an empty name (meaning no module).
-% \begin{macrocode}
-\bool_new:N \l_@@_macro_deprecated_bool
-\bool_new:N \l_@@_macro_internal_bool
-\bool_new:N \l_@@_macro_nodoc_bool
-\bool_new:N \l_@@_macro_TF_bool
-\bool_new:N \l_@@_macro_pTF_bool
-\bool_new:N \l_@@_macro_noTF_bool
-\bool_new:N \l_@@_macro_EXP_bool
-\bool_new:N \l_@@_macro_rEXP_bool
-\bool_new:N \l_@@_macro_var_bool
-\tl_new:N \l_@@_override_module_tl
-\tl_set:Nn \l_@@_override_module_tl { \q_no_value }
-\tl_new:N \l_@@_macro_documented_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}
-% {
-% \g_@@_lmodern_bool,
-% \g_@@_checkfunc_bool,
-% \g_@@_checktest_bool,
-% \g_@@_cs_break_bool,
-% \g_@@_show_notes_bool,
-% \g_@@_kernel_bool
-% }
-% Information about package options.
-% \begin{macrocode}
-\bool_new:N \g_@@_lmodern_bool
-\bool_new:N \g_@@_checkfunc_bool
-\bool_new:N \g_@@_checktest_bool
-\bool_new:N \g_@@_kernel_bool
-\bool_new:N \g_@@_cs_break_bool
-\bool_new:N \g_@@_show_notes_bool
-\bool_gset_true:N \g_@@_cs_break_bool
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_tmpa_tl, \l_@@_tmpb_tl, \l_@@_tmpa_int, \l_@@_tmpa_seq}
-% Some temporary variables.
-% \begin{macrocode}
-\tl_new:N \l_@@_tmpa_tl
-\tl_new:N \l_@@_tmpb_tl
-\int_new:N \l_@@_tmpa_int
-\int_new:N \l_@@_tmpa_seq
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_names_block_tl}
-% List of local sequence variables (produced through
-% \cs{@@_lseq_name:n}), one for each set of variants in a
-% \env{function} or \env{macro} environment. More precisely these
-% sequences are named after the base forms, such as \cs{clist_count:n}
-% or \cs{clist_count:N} (which are not variants). Each of these
-% sequences have the base name (without any signature) as their first
-% item, followed by the list of variant's signatures, or
-% \cs{scan_stop:} to denote the absence of signature (no colon).
-% \begin{macrocode}
-\tl_new:N \l_@@_names_block_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\g_@@_variants_seq}
-% Stores rather temporarily the list of variants (signatures only) of
-% a function/macro that is being documented. It is global because we
-% need it to keep its value throughout cells of an alignment.
-% \begin{macrocode}
-\seq_new:N \g_@@_variants_seq
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_names_verb_bool}
-% Set to |true| if the main argument of a macro/function environment
-% should be used as is, without removing any comma or space.
-% \begin{macrocode}
-\bool_new:N \l_@@_names_verb_bool
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_names_seq}
-% List of functions/environments/\ldots{} appearing as arguments of a
-% given \env{function} or \env{macro} environment. These are the
-% names after conversion of |_@@| and |@@| to |__|\meta{module name}
-% and other sanitizing.
-% \begin{macrocode}
-\seq_new:N \l_@@_names_seq
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\g_@@_nested_names_seq}
-% Collects all macros in nested \env{macro} environments, to use them
-% in the \enquote{End definition} text.
-% \begin{macrocode}
-\seq_new:N \g_@@_nested_names_seq
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}
-% {
-% \l_@@_index_macro_tl, \l_@@_index_key_tl,
-% \l_@@_index_module_tl, \l_@@_index_internal_bool,
-% \l_@@_macro_do_not_index_tl
-% }
-% When analyzing a control sequence found within a \env{macrocode}
-% environment, \cs{l_@@_index_macro_tl} holds the control sequence
-% (partially a string), \cs{l_@@_index_key_tl} holds the future
-% sort key in the index, and \cs{l_@@_index_module_tl} is the
-% subindex in which the control sequence should be listed.
-% \cs{l_@@_index_internal_bool} indicates when the control sequence is
-% internal and should be indexed in a slightly different subindex.
-% Finally, \cs{l_@@_macro_do_not_index_tl} indicates control sequences
-% which should not be indexed in a specifiv \env{macro} envronment.
-% \begin{macrocode}
-\tl_new:N \l_@@_index_macro_tl
-\tl_new:N \l_@@_index_key_tl
-\tl_new:N \l_@@_index_module_tl
-\tl_new:N \l_@@_macro_do_not_index_tl
-\bool_new:N \l_@@_index_internal_bool
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\g_@@_module_name_tl}
-% The module name, set when reading a line |<@@=|\meta{module}|>|.
-% \begin{macrocode}
-\tl_new:N \g_@@_module_name_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\c_@@_iow_rule_tl, \c_@@_iow_midrule_tl}
-% $40$~equal signs.
-% \begin{macrocode}
-\tl_const:Nn \c_@@_iow_rule_tl
- { ======================================== }
-\tl_const:Nn \c_@@_iow_mid_rule_tl
- { -------------------------------------- }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}
-% {\l_@@_macro_box, \l_@@_macro_index_box, \l_@@_macro_int}
-% A vertical box in which the names given to the macro environment are
-% typeset, a horizontal box in which we store the targets created by
-% indexing commands, and the number of macros so far (including those
-% from surrounding \env{macro} environments).
-% \begin{macrocode}
-\box_new:N \l_@@_macro_box
-\box_new:N \l_@@_macro_index_box
-\int_new:N \l_@@_macro_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}
-% {
-% \l_@@_cmd_tl,
-% \l_@@_cmd_index_tl,
-% \l_@@_cmd_module_tl,
-% \l_@@_cmd_noindex_bool,
-% \l_@@_cmd_replace_bool,
-% }
-% Variables used to control the behaviour of \cs{cmd}, \cs{cs} and
-% \cs{tn}.
-% \begin{macrocode}
-\tl_new:N \l_@@_cmd_tl
-\tl_new:N \l_@@_cmd_index_tl
-\tl_new:N \l_@@_cmd_module_tl
-\bool_new:N \l_@@_cmd_noindex_bool
-\bool_new:N \l_@@_cmd_replace_bool
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_in_implementation_bool}
-% This boolean is \texttt{true} within the \env{implementation}
-% environment, and \texttt{false} anywhere else.
-% \begin{macrocode}
-\bool_new:N \l_@@_in_implementation_bool
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}
-% {
-% \g_@@_typeset_documentation_bool,
-% \g_@@_typeset_implementation_bool
-% }
-% These booleans control whether the documentation/implementation
-% should be typeset. By default both should be.
-% \begin{macrocode}
-\bool_new:N \g_@@_typeset_documentation_bool
-\bool_new:N \g_@@_typeset_implementation_bool
-\bool_set_true:N \g_@@_typeset_documentation_bool
-\bool_set_true:N \g_@@_typeset_implementation_bool
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\g_@@_base_name_tl, \l_@@_variants_prop}
-% The name of the macro which is being documented (without its
-% signature), and a property list mapping base forms of variants to
-% all variants which have the same base form.
-% \begin{macrocode}
-\tl_new:N \g_@@_base_name_tl
-\prop_new:N \l_@@_variants_prop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_function_label_clist, \l_@@_no_label_bool}
-% Option of a \env{function} environment which replaces the label that
-% would normally be inserted by labels for the given list of control
-% sequences. This is only useful to avoid duplicate labels when a
-% function's documentation appears multiple times.
-% \begin{macrocode}
-\clist_new:N \l_@@_function_label_clist
-\bool_new:N \l_@@_no_label_bool
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_date_added_tl, \l_@@_date_updated_tl}
-% Values of some options of the \env{function} environment.
-% \begin{macrocode}
-\tl_new:N \l_@@_date_added_tl
-\tl_new:N \l_@@_date_updated_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_macro_argument_tl}
-% Save the argument of a \env{macro} or \env{function} environment for
-% use in error messages.
-% \begin{macrocode}
-\tl_new:N \l_@@_macro_argument_tl
-% \end{macrocode}
-% \end{variable}
-%
-% ^^A Bruno: what does the next line do?
-% \begin{macrocode}
-% \int_new:N \c@CodelineNo
-% \end{macrocode}
-%
-% \subsection{Variants and helpers}
-%
-% \begin{macro}{\@@_tmpa:w, \@@_tmpb:w}
-% Auxiliary macros for temporary use.
-% \begin{macrocode}
-\cs_new_eq:NN \@@_tmpa:w ?
-\cs_new_eq:NN \@@_tmpb:w ?
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \seq_set_split:NoV,
-% \tl_to_str:f
-% }
-% A few missing variants.
-% \begin{macrocode}
-\cs_generate_variant:Nn \seq_set_split:Nnn { NoV }
-\cs_generate_variant:Nn \tl_to_str:n { f }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[TF]{\@@_if_almost_str:n}
-% Used to test if the argument of |\cmd| or other macros to be indexed
-% is almost a string or not: for instance this is \texttt{false} if |#1|
-% contains |\meta{...}|. The surprising |f|-expansion is there to
-% cope with the case of |#1| starting with \cs{c_backslash_str}
-% which should be expanded and considered to be \enquote{normal}.
-% \begin{macrocode}
-\prg_new_protected_conditional:Npnn \@@_if_almost_str:n #1 { TF , T , F }
- {
- \int_compare:nNnTF
- { \tl_count:n {#1} }
- < { \tl_count:e { \tl_to_str:f {#1} } }
- { \prg_return_false: }
- { \prg_return_true: }
- }
-\prg_generate_conditional_variant:Nnn \@@_if_almost_str:n { V } { T }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_trim_right:Nn, \@@_trim_right:No}
-% Removes all material after |#2| in the token list variable~|#1|.
-% Perhaps combine with \cs{@@_key_trim_module:n}?
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_trim_right:Nn #1#2
- {
- \cs_set:Npn \@@_tmp:w ##1 #2 ##2 \q_stop { \exp_not:n {##1} }
- \__kernel_tl_set:Nx #1 { \exp_after:wN \@@_tmp:w #1 #2 \q_stop }
- }
-\cs_generate_variant:Nn \@@_trim_right:Nn { No }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[TF]{\@@_str_if_begin:nn, \@@_str_if_begin:oo}
-% True if the first string starts with the second.
-% \begin{macrocode}
-\prg_new_protected_conditional:Npnn \@@_str_if_begin:nn #1#2 { TF , T , F }
- {
- \tl_if_in:ooTF
- { \exp_after:wN \scan_stop: \tl_to_str:n {#1} }
- { \exp_after:wN \scan_stop: \tl_to_str:n {#2} }
- { \prg_return_true: }
- { \prg_return_false: }
- }
-\prg_generate_conditional_variant:Nnn \@@_str_if_begin:nn
- { oo } { TF , T , F }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_replace_at_at:N}
-% \begin{macro}{\@@_replace_at_at_aux:Nn}
-% The goal is to replace |@@| by the current module name. We take
-% advantage of this function to also detect internal macros. If there is
-% no \meta{module~name}, do nothing. Otherwise, sanitize the catcodes
-% of |@| and~|_|, temporarily change |@@@@| to |aa| with different catcodes and later to |@@|, and replace |__@@| and |_@@| and |@@| by
-% |__|\meta{module~name}. The result contains |_| with category
-% code letter because this is what the |macrocode| environment
-% expects. Other use cases can apply \cs{tl_to_str:n} if needed.
-% Note that we include spaces between the
-% |@| in the code below, since it is also processed through the same
-% replacement rules.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_replace_at_at:N #1
- {
- \tl_if_empty:NF \g_@@_module_name_tl
- {
- \exp_args:NNo \@@_replace_at_at_aux:Nn
- #1 \g_@@_module_name_tl
- }
- }
-\cs_new_protected:Npe \@@_replace_at_at_aux:Nn #1#2
- {
- \tl_replace_all:Nnn #1 { \token_to_str:N @ } { @ }
- \tl_replace_all:Nnn #1 { \token_to_str:N _ } { _ }
- \tl_replace_all:Nnn #1 { @ @ @ @ } { \token_to_str:N a a }
- \tl_replace_all:Nnn #1 { _ _ @ @ } { _ _ #2 }
- \tl_replace_all:Nnn #1 { _ @ @ } { _ _ #2 }
- \tl_replace_all:Nnn #1 { @ @ } { _ _ #2 }
- \tl_replace_all:Nnn #1 { \token_to_str:N a a } { @ @ }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \@@_detect_internals:N,
-% \@@_detect_internals_aux:N,
-% \@@_if_detect_internals_ok:NF
-% }
-% After splitting at each |__| and removing the leading item from the
-% sequence (since it does not follow |__|), remove everything after
-% any space or end-of-line to get a good approximation of the control
-% sequence (for the warning message). Then check if that starts with
-% something allowed: |@@| module name and |:| or |_|, or if the
-% relevant boolean is set |kernel_| (it seems safe to assume we will
-% not define a |\__kernel:...| command). For the message itself
-% remove anything after any |_| or |:| (with either catcode) to get a
-% guess of the module name.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_detect_internals:N #1
- {
- \bool_if:NT \l_@@_detect_internals_bool
- { \@@_detect_internals_aux:N #1 }
- }
-\group_begin:
- \char_set_catcode_active:N \^^M
- \cs_new_protected:Npn \@@_detect_internals_aux:N #1
- {
- \tl_set_eq:NN \l_@@_detect_internals_tl #1
- \tl_replace_all:NVn \l_@@_detect_internals_tl \c_underscore_str { _ }
- \seq_set_split:NnV \l_@@_tmpa_seq { _ _ } \l_@@_detect_internals_tl
- \seq_pop_left:NN \l_@@_tmpa_seq \l_@@_detect_internals_tl
- \seq_map_variable:NNn \l_@@_tmpa_seq \l_@@_detect_internals_tl
- {
- \@@_trim_right:No \l_@@_detect_internals_tl
- \c_catcode_active_space_tl
- \@@_trim_right:Nn \l_@@_detect_internals_tl ^^M
- \@@_if_detect_internals_ok:NF \l_@@_detect_internals_tl
- {
- \tl_set_eq:NN \l_@@_detect_internals_cs_tl \l_@@_detect_internals_tl
- \@@_trim_right:Nn \l_@@_detect_internals_tl _
- \@@_trim_right:Nn \l_@@_detect_internals_tl :
- \@@_trim_right:No \l_@@_detect_internals_tl { \token_to_str:N : }
- \msg_warning:nneee { l3doc } { foreign-internal }
- { \tl_to_str:N \l_@@_detect_internals_cs_tl }
- { \tl_to_str:N \l_@@_detect_internals_tl }
- { \tl_to_str:N \g_@@_module_name_tl }
- }
- }
- }
-\group_end:
-\prg_new_protected_conditional:Npnn \@@_if_detect_internals_ok:N #1 { F }
- {
- \@@_str_if_begin:ooTF {#1} { \g_@@_module_name_tl _ }
- { \prg_return_true: }
- {
- \@@_str_if_begin:ooTF {#1} { \g_@@_module_name_tl : }
- { \prg_return_true: }
- {
- \bool_if:NTF \g_@@_kernel_bool
- {
- \@@_str_if_begin:ooTF {#1} { kernel _ }
- { \prg_return_true: }
- { \prg_return_false: }
- }
- { \prg_return_false: }
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_signature_base_form:n}
-% \begin{macro}
-% {\@@_signature_base_form_aux:n, \@@_signature_base_form_aux:w}
-% Expands to the \enquote{base form} of the signature. For instance,
-% given |noxcfvV| it would obtain |nnnNnnn|, or given |ow| it would
-% obtain |nw|. The loop stops at the first token that is not
-% recognized; the rest is enclosed in \cs{exp_not:n}.
-% \begin{macrocode}
-\cs_new:Npn \@@_signature_base_form:n #1
- { \@@_signature_base_form_aux:n #1 \q_stop }
-\cs_new:Npn \@@_signature_base_form_aux:n #1
- {
- \str_case:nnTF {#1}
- {
- { N } { N }
- { c } { N }
- { n } { n }
- { o } { n }
- { f } { n }
- { e } { n }
- { x } { n }
- { V } { n }
- { v } { n }
- }
- { \@@_signature_base_form_aux:n }
- { \@@_signature_base_form_aux:w #1 }
- }
-\cs_new:Npn \@@_signature_base_form_aux:w #1 \q_stop
- { \exp_not:n {#1} }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_predicate_from_base:n}
-% Get predicate from a function's base name. The code is not broken
-% by functions with no signature. The |n|-type version can be used
-% for keys and other non-control sequences. The output after
-% |e|-expansion is a string.
-% \begin{macrocode}
-\cs_new:Npn \@@_predicate_from_base:n #1
- {
- \@@_get_function_name:n {#1}
- \tl_to_str:n { _p: }
- \@@_get_function_signature:n {#1}
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_split_function_do:nn, \@@_split_function_do:on}
-% \begin{macro}{\@@_get_function_name:n, \@@_get_function_signature:n}
-% \begin{macro}{\@@_split_function_auxi:w, \@@_split_function_auxii:w}
-% Similar to internal functions defined in \pkg{l3basics}, but here we
-% operate on strings directly rather than control sequences.
-% \begin{macrocode}
-\cs_new:Npn \@@_get_function_name:n #1
- { \@@_split_function_do:nn {#1} { \use_i:nnn } }
-\cs_new:Npn \@@_get_function_signature:n #1
- { \@@_split_function_do:nn {#1} { \use_ii:nnn } }
-\cs_set_protected:Npn \@@_tmpa:w #1
- {
- \cs_new:Npn \@@_split_function_do:nn ##1
- {
- \exp_after:wN \@@_split_function_auxi:w
- \tl_to_str:n {##1} \q_mark \c_true_bool
- #1 \q_mark \c_false_bool
- \q_stop
- }
- \cs_new:Npn \@@_split_function_auxi:w
- ##1 #1 ##2 \q_mark ##3##4 \q_stop ##5
- { \@@_split_function_auxii:w {##5} ##1 \q_mark \q_stop {##2} ##3 }
- \cs_new:Npn \@@_split_function_auxii:w
- ##1##2 \q_mark ##3 \q_stop
- { ##1 {##2} }
- }
-\exp_args:No \@@_tmpa:w { \token_to_str:N : }
-\cs_generate_variant:Nn \@@_split_function_do:nn { o }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_key_get_base:nN}
-% Get the base form of a function and store it. As part of getting
-% the base form, change trailing |T| or |F| to |TF|, skipping that
-% change if the function contains no colon to avoid changing for
-% instance some names ending in \texttt{PDF} or similar. The various
-% letters |z| serve as end-delimiters different from any outcome of
-% \cs{tl_to_str:n}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_key_get_base:nN #1#2
- {
- \@@_if_almost_str:nTF {#1}
- {
- \@@_key_get_base_TF:nN {#1} \l_@@_tmpa_tl
- \__kernel_tl_set:Nx #2
- { \@@_split_function_do:on \l_@@_tmpa_tl { \@@_base_form_aux:nnN } }
- }
- { \tl_set:Nn #2 {#1} }
- }
-\cs_new:Npe \@@_key_get_base_TF:nN #1#2
- {
- \__kernel_tl_set:Nx #2 { \exp_not:N \tl_to_str:n {#1} }
- \tl_if_in:NoF #2 { \tl_to_str:n {:} }
- { \exp_not:N \prg_break: }
- \tl_if_in:onT { #2 z } { \tl_to_str:n {TF} z }
- { \exp_not:N \prg_break: }
- \tl_if_in:onT { #2 z } { \tl_to_str:n {T} z }
- {
- \tl_put_right:Nn #2 { \tl_to_str:n {F} }
- \exp_not:N \prg_break:
- }
- \tl_if_in:onT { #2 z } { \tl_to_str:n {F} z }
- {
- \tl_put_right:Nn #2 { z }
- \tl_replace_once:Nnn #2 { \tl_to_str:n {F} z } { \tl_to_str:n {TF} }
- \exp_not:N \prg_break:
- }
- \exp_not:N \prg_break_point:
- }
-\cs_new:Npn \@@_base_form_aux:nnN #1#2#3
- {
- \exp_not:n {#1}
- \bool_if:NT #3
- {
- \token_to_str:N :
- \bool_lazy_or:nnTF
- { \str_if_eq_p:nn { #1 ~ } { \exp_args } }
- { \str_if_eq_p:nn { #1 ~ } { \exp_last_unbraced } }
- { \exp_not:n {#2} }
- { \@@_signature_base_form:n {#2} }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_base_form_signature_do:nnn}
-% Do |#2{#1}| if there is no signature, or if |#1| contains two colons
-% in a row (this covers the weird function |\::N| and so on).
-% Otherwise apply |#3| with the following two arguments: the base form
-% of |#1|, and the original signature with an extra pair of braces.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_base_form_signature_do:nnn #1#2#3
- {
- \@@_split_function_do:nn {#1}
- { \@@_base_form_aux:nnnnnN {#1} {#2} {#3} }
- }
-\cs_new_protected:Npn \@@_base_form_aux:nnnnnN #1#2#3#4#5#6
- {
- \bool_if:NTF #6
- {
- \tl_if_head_eq_charcode:nNTF {#4} :
- { #2 {#1} }
- {
- \use:e
- {
- \exp_not:n {#3}
- { \@@_base_form_aux:nnN {#4} {#5} #6 }
- }
- {#4} {#5}
- }
- }
- { #2 {#1} }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\@@_date_compare:nNn}
-% \begin{macro}{\@@_date_compare_aux:nnnNnnn, \@@_date_compare_aux:w}
-% Expects |#1| and |#3| to be dates in the format YYYY-MM-DD (but
-% accepts YYYY or YYYY-MM too). Compares them using |#2| (one of |<|,
-% |=|, |>|), filling in zeros for missing data.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \@@_date_compare:nNn #1#2#3 { TF , T , F , p }
- { \@@_date_compare_aux:w #1--- \q_mark #2 #3--- \q_stop }
-\cs_new:Npn \@@_date_compare_aux:w
- #1 - #2 - #3 - #4 \q_mark #5 #6 - #7 - #8 - #9 \q_stop
- {
- \@@_date_compare_aux:nnnNnnn
- { \tl_if_empty:nTF {#1} { 0 } {#1} }
- { \tl_if_empty:nTF {#2} { 0 } {#2} }
- { \tl_if_empty:nTF {#3} { 0 } {#3} }
- #5
- { \tl_if_empty:nTF {#6} { 0 } {#6} }
- { \tl_if_empty:nTF {#7} { 0 } {#7} }
- { \tl_if_empty:nTF {#8} { 0 } {#8} }
- }
-\cs_new:Npn \@@_date_compare_aux:nnnNnnn #1#2#3#4#5#6#7
- {
- \int_compare:nNnTF {#1} = {#5}
- {
- \int_compare:nNnTF {#2} = {#6}
- {
- \int_compare:nNnTF {#3} #4 {#7}
- { \prg_return_true: } { \prg_return_false: }
- }
- {
- \int_compare:nNnTF {#2} #4 {#6}
- { \prg_return_true: } { \prg_return_false: }
- }
- }
- {
- \int_compare:nNnTF {#1} #4 {#5}
- { \prg_return_true: } { \prg_return_false: }
- }
- \use_none:n
- \q_stop
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_gprop_name:n, \@@_lseq_name:n}
-% We need to keep track of some information about control sequences
-% (and other strings) that are being (or have been) documented. Some
-% is stored into global props and some into local seqs, whose name
-% does not follow conventions: it is \cs[no-index]{g_@@} or
-% \cs[no-index]{l_@@} followed by a space and by the string, which can
-% be arbitrary. We cannot reasonably use a single big |prop| for
-% speed reasons.
-% \begin{macrocode}
-\cs_new:Npn \@@_gprop_name:n #1 { g_@@ ~ \tl_to_str:n {#1} }
-\cs_new:Npn \@@_lseq_name:n #1 { l_@@ ~ \tl_to_str:n {#1} }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Messages}
-%
-% \begin{macrocode}
-\msg_new:nnnn { l3doc } { no-signature-TF }
- { Function/macro~'#1'~cannot~be~turned~into~a~conditional. }
- {
- A~function~or~macro~environment~with~option~pTF,~TF~or~noTF~
- received~the~argument~'#1'.~This~function's~name~has~no~
- ':'~hence~it~is~not~clear~where~to~add~'_p'~or~'TF'.~
- Please~follow~expl3~naming~conventions.
- }
-\msg_new:nnn { l3doc } { date-format }
- { The~date~'#1'~should~be~given~in~YYYY-MM-DD~format. }
-\msg_new:nnn { l3doc } { future-date }
- { The~added/updated~date~'#2'~of~'#1'~is~in~the~future. }
-\msg_new:nnn { l3doc } { syntax-nested-function }
- {
- The~'syntax'~environment~should~be~used~in~the~
- innermost~'function'~environment.
- }
-\msg_new:nnn { l3doc } { multiple-syntax }
- {
- The~'syntax'~environment~should~only~be~used~once~in~
- a~'function'~environment.
- }
-\msg_new:nnn { l3doc } { deprecated-option }
- { The~option~'#1'~has~been~deprecated~for~'#2'. }
-\msg_new:nnn { l3doc } { foreign-internal }
- {
- A~control~sequence~of~the~form~'...__#1'~was~used.~
- It~should~only~be~used~in~the~module~'#2'
- \tl_if_empty:nF {#3} { ,~not~in~'#3' } .
- }
-% \end{macrocode}
-%
-% \subsection{Options and configuration}
-%
-% \begin{macrocode}
-\DeclareKeys [ l3doc / options ]
- {
- a5paper .code:n = \@latexerr { Option~not~supported } { } ,
- full .code:n =
- {
- \bool_gset_true:N \g_@@_typeset_documentation_bool
- \bool_gset_true:N \g_@@_typeset_implementation_bool
- } ,
- onlydoc .code:n =
- {
- \bool_gset_true:N \g_@@_typeset_documentation_bool
- \bool_gset_false:N \g_@@_typeset_implementation_bool
- } ,
- check .bool_gset:N = \g_@@_checkfunc_bool ,
- checktest .bool_gset:N = \g_@@_checktest_bool ,
- kernel .bool_gset:N = \g_@@_kernel_bool ,
- stdmodule .bool_gset_inverse:N = \g_@@_kernel_bool ,
- lm-default .bool_gset:N = \g_@@_lmodern_bool ,
- cs-break .bool_gset_inverse:N = \g_@@_cs_break_bool ,
- cs-break-nohyphen .code:n = \PassOptionsToPackage{nohyphen}{underscore} ,
- show-notes .bool_gset:N = \g_@@_show_notes_bool,
- hide-notes .bool_gset_inverse:N = \g_@@_show_notes_bool
- }
-% \end{macrocode}
-%
-% \begin{macrocode}
-\DeclareUnknownKeyHandler [ l3doc / options ]
- { \PassOptionsToClass { \CurrentOption } { article } }
-\SetKeys [ l3doc / options ]
- { full , check = false , checktest = false , lm-default }
-\PassOptionsToClass { a4paper } { article }
-% \end{macrocode}
-%
-% Input a local configuration file, if it exists, with a message to the
-% console that this has happened. Since we distribute a \file{.cfg} file
-% with the class, this should usually always be true. Therefore, check
-% for \cs{ExplMakeTitle} (defined in \enquote{our} \file{.cfg} file) and
-% only output the informational message if it's not found.
-%
-% \begin{macrocode}
-\msg_new:nnn { l3doc } { input-cfg }
- { Local~config~file~l3doc.cfg~loaded. }
-\file_if_exist:nT { l3doc.cfg }
- {
- \file_input:n { l3doc.cfg }
- \cs_if_exist:cF { ExplMakeTitle }
- { \msg_info:nn { l3doc } { input-cfg } }
- }
-% \end{macrocode}
-%
-% \begin{macrocode}
-\ProcessKeyOptions [ l3doc / options ]
-% \end{macrocode}
-%
-%
-% \subsection{Class and package loading}
-%
-% \begin{macrocode}
-\LoadClass{article}
-\RequirePackage{doc}
-\RequirePackage
- {
- array,
- alphalph,
- amsmath,
- amssymb,
- booktabs,
- color,
- colortbl,
- hologo,
- enumitem,
- pifont,
- textcomp,
- trace,
- csquotes,
- fancyvrb,
- underscore,
- verbatim
- }
-\raggedbottom
-% \end{macrocode}
-%
-% Depending on the option, load the package \pkg{lmodern} to set the
-% font. Then replace the italic typewriter font with the oblique shape
-% instead; the former makes my skin crawl. (Will, Aug 2011)
-% \begin{macrocode}
-\bool_if:NT \g_@@_lmodern_bool
- {
- \RequirePackage[T1]{fontenc}
- \RequirePackage{lmodern}
- \group_begin:
- \ttfamily
- \DeclareFontShape{T1}{lmtt}{m}{it}{<->ec-lmtto10}{}
- \group_end:
- }
-% \end{macrocode}
-%
-% Must be last, as usual.
-% \begin{macrocode}
-\RequirePackage{hypdoc}
-% \end{macrocode}
-%
-% \subsection{Configuration and tweaks}
-%
-% \begin{macro}{\MakePrivateLetters}
-% A few more letters are \enquote{private} in a \LaTeX3 programming
-% environment.
-% \begin{macrocode}
-\cs_gset:Npn \MakePrivateLetters
- {
- \char_set_catcode_letter:N \@
- \char_set_catcode_letter:N \_
- \char_set_catcode_letter:N \:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{CodelineNo}
-% Some configurations which have to do with line numbering.
-% \begin{macrocode}
-\setcounter{StandardModuleDepth}{1}
-\@addtoreset{CodelineNo}{part}
-\tl_replace_once:Nnn \theCodelineNo
- { \HDorg@theCodelineNo }
- { \textcolor[gray]{0.5} { \sffamily\tiny\arabic{CodelineNo} } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\verbatim, \endverbatim}
-% In \file{.dtx} documents, the \env{verbatim} environment adds extra
-% space because it only removes the first \enquote{\%} sign, and not
-% the indentation (typically a space). Fix it with \pkg{fancyvrb}:
-% \begin{macrocode}
-\fvset{gobble=2}
-\cs_gset_eq:NN \verbatim \Verbatim
-\cs_gset_eq:NN \endverbatim \endVerbatim
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\ifnot@excluded}
-% This function tests whether a macro name stored in
-% \tn{macro@namepart} was excluded from indexing by \tn{DoNotIndex}.
-% Rather than trying to fix catcodes that come into here, turn
-% everything to string catcodes. This is slightly inefficient as we
-% could have ensured that \tn{index@excludelist} has string catcodes
-% in the first place.
-% \begin{macrocode}
-\cs_set_protected:Npn \ifnot@excluded
- {
- \exp_args:Nee \expanded@notin
- { \c_backslash_str \tl_to_str:N \macro@namepart , }
- { \exp_args:NV \tl_to_str:n \index@excludelist }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\pdfstringnewline}
-% \begin{macro}{\@@_pdfstring_newline:w}
-% We avoid some hyperref warnings by making |\\| (almost) trivial in
-% bookmarks: more precisely it might be used with a star and an
-% optional argument, which we thus remove using an \pkg{ltcmd}
-% expandable command. Since there cannot be trailing optional
-% arguments, pick up an extra mandatory one and put it back.
-% \begin{macrocode}
-\cs_new:Npn \pdfstringnewline { : ~ }
-\DeclareExpandableDocumentCommand
- { \@@_pdfstring_newline:w } { s o m } { \pdfstringnewline #3 }
-\pdfstringdefDisableCommands
- { \cs_set_eq:NN \\ \@@_pdfstring_newline:w }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Design}
-%
-% Increase the text width slightly so that width the standard fonts
-% 72~columns of code may appear in a \env{macrocode} environment.
-% Increase the marginpar width slightly, for long command names. And
-% increase the left margin by a similar amount.
-% \begin{macrocode}
-\setlength \textwidth { 385pt }
-\addtolength \marginparwidth { 30pt }
-\addtolength \oddsidemargin { 20pt }
-\addtolength \evensidemargin { 20pt }
-% \end{macrocode}
-% (These were introduced when \cls{article} was the documentclass, but
-% I've left them here for now to remind me to do something about them
-% later.)
-%
-% \begin{macro}{\list}
-% \begin{macro}{\@@_oldlist:nn}
-% Customise lists.
-% \begin{macrocode}
-\cs_new_eq:NN \@@_oldlist:nn \list
-\cs_gset:Npn \list #1 #2
- { \@@_oldlist:nn {#1} { #2 \dim_zero:N \listparindent } }
-\setlength \parindent { 2em }
-\setlength \itemindent { 0pt }
-\setlength \parskip { 0pt plus 3pt minus 0pt }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\partname}
-% Use \enquote{File} as a name in Part titles.
-% \begin{macrocode}
-\tl_gset:Nn \partname {File}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\l@section, \l@subsection}
-% Customise the table of contents (as we have so many sections).
-% Different design and/or structure is called for.
-% \begin{macrocode}
-\@addtoreset{section}{part}
-\cs_gset:Npn \l@section #1#2
- {
- \ifnum \c@tocdepth >\z@
- \addpenalty\@secpenalty
- \addvspace{1.0em \@plus\p@}
- \setlength\@tempdima{2.5em} % was 1.5em
- \begingroup
- \parindent \z@ \rightskip \@pnumwidth
- \parfillskip -\@pnumwidth
- \leavevmode \bfseries
- \advance\leftskip\@tempdima
- \hskip -\leftskip
- #1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par
- \endgroup
- \fi
- }
-\cs_gset:Npn \l@subsection
- { \@dottedtocline{2}{2.5em}{2.3em} } % #2 = 1.5em
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Text markup}
-%
-% Make "|" and |"| be \enquote{short verb} characters, but not in the
-% document preamble, where an active character may interfere with
-% packages that are loaded. Remove these short-hands at the end of the
-% document before reading the \file{.aux} file, as they may appear in
-% labels (for instance, \pkg{l3fp} documents an operation "||").
-% \begin{macrocode}
-\AtBeginDocument
- {
- \MakeShortVerb \"
- \MakeShortVerb \|
- }
-\AtEndDocument
- {
- \DeleteShortVerb \"
- \DeleteShortVerb \|
- }
-% \end{macrocode}
-%
-% \begin{macro}{\eTeX, \IniTeX, \Lua, \LuaTeX, \pdfTeX, \XeTeX,
-% \pTeX, \upTeX, \epTeX, \eupTeX}
-% Some commands for logos.
-% \begin{macrocode}
-\providecommand*\eTeX{\hologo{eTeX}}
-\providecommand*\IniTeX{\hologo{iniTeX}}
-\providecommand*\Lua{Lua}
-\providecommand*\LuaTeX{\hologo{LuaTeX}}
-\providecommand*\pdfTeX{\hologo{pdfTeX}}
-\providecommand*\XeTeX{\hologo{XeTeX}}
-\providecommand*\pTeX{p\kern-.2em\hologo{TeX}}
-\providecommand*\upTeX{up\kern-.2em\hologo{TeX}}
-\providecommand*\epTeX{$\varepsilon$-\pTeX}
-\providecommand*\eupTeX{$\varepsilon$-\upTeX}
-\providecommand*\ConTeXt{\hologo{ConTeXt}}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\cmd, \cs, \tn}
-% They rely on a common auxiliary \cs{@@_cmd:nn} which receives as
-% arguments the options and some tokens whose string representation
-% starts with a backslash (to support cases such as |\cs{pkg_\ldots}|,
-% we do not turn the whole argument into a string).
-% \begin{macrocode}
-\DeclareDocumentCommand \cmd { O{} m }
- { \@@_cmd:no {#1} { \token_to_str:N #2 } }
-\DeclareDocumentCommand \cs { O{} m }
- { \@@_cmd:no {#1} { \c_backslash_str #2 } }
-\DeclareDocumentCommand \tn { O{} m }
- {
- \@@_cmd:no
- { module = TeX , replace = false , #1 }
- { \c_backslash_str #2 }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\meta}
-% A document-level command.
-% \begin{macrocode}
-\DeclareDocumentCommand \meta { m }
- { \texttt{ \@@_meta:n {#1} } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \@@_pdfstring_cmd:w,
-% \@@_pdfstring_cs:w,
-% \@@_pdfstring_meta:w
-% }
-% To work within a bookmark, these commands must be expandable.
-% \begin{macrocode}
-\DeclareExpandableDocumentCommand
- { \@@_pdfstring_cmd:w } { o m } { \token_to_str:N #2 }
-\DeclareExpandableDocumentCommand
- { \@@_pdfstring_cs:w } { o m } { \textbackslash \tl_to_str:n {#2} }
-\cs_new:Npn \@@_pdfstring_meta:w #1
- { < \tl_to_str:n {#1} > }
-\pdfstringdefDisableCommands
- {
- \cs_set_eq:NN \cmd \@@_pdfstring_cmd:w
- \cs_set_eq:NN \cs \@@_pdfstring_cs:w
- \cs_set_eq:NN \tn \@@_pdfstring_cs:w
- \cs_set_eq:NN \meta \@@_pdfstring_meta:w
- \cs_set_eq:NN \@@_meta:n \@@_pdfstring_meta:w
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\Arg, \marg, \oarg, \parg}
-% |\marg{text}| prints \marg{text}, \enquote{mandatory argument}.\\
-% |\oarg{text}| prints \oarg{text}, \enquote{optional argument}.\\
-% |\parg{te,xt}| prints \parg{te,xt}, \enquote{picture mode argument}.
-% Finally, \cs{Arg} is the same as \cs{marg}.
-% \begin{macrocode}
-\newcommand\Arg[1]
- { \texttt{\char`\{} \@@_meta:n {#1} \texttt{\char`\}} }
-\providecommand\marg[1]{ \Arg{#1} }
-\providecommand\oarg[1]{ \texttt[ \@@_meta:n {#1} \texttt] }
-\providecommand\parg[1]{ \texttt( \@@_meta:n {#1} \texttt) }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\file, \env, \pkg, \cls}
-% This list may change\dots this is just my preference for markup.
-% \begin{macrocode}
-\DeclareRobustCommand \file {\nolinkurl}
-\DeclareRobustCommand \env {\texttt}
-\DeclareRobustCommand \pkg {\textsf}
-\DeclareRobustCommand \cls {\textsf}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\EnableDocumentation, \EnableImplementation}
-% \begin{macro}{\DisableDocumentation, \DisableImplementation}
-% Control whether to typeset the documentation/implementation or not.
-% These simply set two switches.
-% \begin{macrocode}
-\NewDocumentCommand \EnableDocumentation { }
- { \bool_gset_true:N \g_@@_typeset_documentation_bool }
-\NewDocumentCommand \EnableImplementation { }
- { \bool_gset_true:N \g_@@_typeset_implementation_bool }
-\NewDocumentCommand \DisableDocumentation { }
- { \bool_gset_false:N \g_@@_typeset_documentation_bool }
-\NewDocumentCommand \DisableImplementation { }
- { \bool_gset_false:N \g_@@_typeset_implementation_bool }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{environment}{documentation}
-% \begin{environment}{implementation}
-% If the documentation/implementation should be typeset, then simply
-% set the boolean \cs{l_@@_in_implementation_bool} which indicates
-% whether we are within the implementation section. Otherwise use
-% \cs{comment} (and a paired \cs{endcomment}).
-% \begin{macrocode}
-\NewDocumentEnvironment { documentation } { }
- {
- \bool_if:NTF \g_@@_typeset_documentation_bool
- { \bool_set_false:N \l_@@_in_implementation_bool }
- { \comment }
- }
- { \bool_if:NF \g_@@_typeset_documentation_bool { \endcomment } }
-\NewDocumentEnvironment { implementation } { }
- {
- \bool_if:NTF \g_@@_typeset_implementation_bool
- { \bool_set_true:N \l_@@_in_implementation_bool }
- { \comment }
- }
- { \bool_if:NF \g_@@_typeset_implementation_bool { \endcomment } }
-% \end{macrocode}
-% \end{environment}
-% \end{environment}
-%
-% \begin{environment}{variable}
-% The \env{variable} environment behaves as a \env{function} or
-% \env{macro} environment depending on the part of the document.
-% \begin{macrocode}
-\DeclareDocumentEnvironment { variable } { O{} +v }
- {
- \bool_if:NTF \l_@@_in_implementation_bool
- { \@@_macro:nnw { var , #1 } {#2} }
- { \@@_function:nnw {#1} {#2} }
- }
- {
- \bool_if:NTF \l_@@_in_implementation_bool
- { \@@_macro_end: }
- { \@@_function_end: }
- }
-% \end{macrocode}
-% \end{environment}
-%
-% \begin{environment}{function}
-% \begin{environment}{macro}
-% Environment for documenting function(s), and environment for
-% documenting the implementation of a macro.
-% \begin{macrocode}
-\DeclareDocumentEnvironment { function } { O{} +v }
- { \@@_function:nnw {#1} {#2} }
- { \@@_function_end: }
-\DeclareDocumentEnvironment { macro } { O{} +v }
- { \@@_macro:nnw {#1} {#2} }
- { \@@_macro_end: }
-% \end{macrocode}
-% \end{environment}
-% \end{environment}
-%
-% \begin{environment}{syntax}
-% Syntax block placed next to the list of functions to illustrate
-% their use. TODO: test that the \env{syntax} environment is only
-% used inside the \env{function} environment, and that it only appears
-% once.
-% \begin{macrocode}
-\NewDocumentEnvironment { syntax } { }
- { \@@_syntax:w }
- {
- \@@_syntax_end:
- \ignorespacesafterend
- }
-% \end{macrocode}
-% \end{environment}
-%
-% \begin{environment}{texnote}
-% Used to describe information destined to \TeX{} experts only.
-% \begin{macrocode}
-\NewDocumentEnvironment { texnote } { }
- {
- \endgraf
- \vspace{3mm}
- \small\textbf{\TeX~hackers~note:}
- }
- {
- \vspace{3mm}
- }
-% \end{macrocode}
-% \end{environment}
-%
-% \begin{environment}{arguments}
-% This environment is designed to be used within a \env{macro}
-% environment to describe the arguments of the macro/function.
-% \begin{macrocode}
-\NewDocumentEnvironment { arguments } { }
- {
- \enumerate [
- nolistsep ,
- label = \texttt{\#\arabic*} ~ : ,
- labelsep = * ,
- ]
- }
- {
- \endenumerate
- }
-% \end{macrocode}
-% \end{environment}
-%
-% \begin{macro}{\CodedocExplain, \CodedocExplainEXP, \CodedocExplainREXP, \CodedocExplainTF}
-% Explanation of stars and |TF| notations, for use in third-party
-% packages.
-% \begin{macrocode}
-\NewDocumentCommand { \CodedocExplain } { }
- { \CodedocExplainEXP \ \CodedocExplainREXP \ \CodedocExplainTF }
-\NewDocumentCommand { \CodedocExplainEXP } { }
- {
- \raisebox{\baselineskip}[0pt][0pt]{\hypertarget{expstar}{}}%
- \write \@auxout { \def \string \Codedoc@expstar { } }
- \@@_typeset_exp:\ indicates~fully~expandable~functions,~which~
- can~be~used~within~an~\texttt{e}-type~argument~(inside~an~\tn{expanded}),~
- \texttt{x}-type~argument~(in~plain~\TeX{}~terms,~inside~an~\tn{edef}),~
- as~well~as~within~an~\texttt{f}-type~argument.
- }
-\NewDocumentCommand { \CodedocExplainREXP } { }
- {
- \raisebox{\baselineskip}[0pt][0pt]{\hypertarget{rexpstar}{}}%
- \write \@auxout { \def \string \Codedoc@rexpstar { } }
- \@@_typeset_rexp:\ indicates~
- restricted~expandable~functions,~which~can~be~used~within~an~
- \texttt{x}-type~argument~or~an~\texttt{e}-type~argument,~
- but~cannot~be~fully~expanded~within~an~\texttt{f}-type~argument.
- }
-\NewDocumentCommand { \CodedocExplainTF } { }
- {
- \raisebox{\baselineskip}[0pt][0pt]{\hypertarget{explTF}{}}%
- \write \@auxout { \def \string \Codedoc@explTF { } }
- \@@_typeset_TF:\ indicates~conditional~(\texttt{if})~functions~
- whose~variants~with~\texttt{T},~\texttt{F}~and~\texttt{TF}~
- argument~specifiers~expect~different~
- \enquote{true}/\enquote{false}~branches.
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Implementing text markup}
-%
-% Keys for \cs{cmd}, \cs{cs} and \cs{tn}.
-% \begin{macrocode}
-\keys_define:nn { l3doc/cmd }
- {
- index .tl_set:N = \l_@@_cmd_index_tl ,
- module .tl_set:N = \l_@@_cmd_module_tl ,
- no-index .bool_set:N = \l_@@_cmd_noindex_bool ,
- replace .bool_set:N = \l_@@_cmd_replace_bool ,
- }
-% \end{macrocode}
-%
-% \begin{macro}[do-not-index={\\,\_,\1,\c,\2}]{\@@_cmd:nn, \@@_cmd:no}
-% Apply the key--value \meta{options}~|#1| after setting some
-% default values. Then (unless |replace=false|) replace |@@| in~|#2|,
-% which is a bit tricky: the |_| must be given the catcode expected by
-% \cs{@@_replace_at_at:N}, but should be reverted to their original
-% catcode (normally active, needed for line-breaking) without
-% rescanning the whole argument. Then typeset the command in
-% \tn{verbatim@font}, after turning it to harmless characters if
-% needed (and keeping the underscore breakable); in any case, spaces
-% must be turned into \tn{@xobeysp} and we must use \tn{@} to avoid
-% longer spaces after a control sequence that ends for instance with a
-% colon (empty signature). Finally, produce an index entry.
-% Indexing is suppressed when \cs{l_@@_cmd_noindex_bool} is true.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_cmd:nn #1#2
- {
- \bool_set_false:N \l_@@_cmd_noindex_bool
- \bool_set_true:N \l_@@_cmd_replace_bool
- \tl_set:Nn \l_@@_cmd_index_tl { \q_no_value }
- \tl_set:Nn \l_@@_cmd_module_tl { \q_no_value }
- \keys_set:nn { l3doc/cmd } {#1}
- \tl_set:Nn \l_@@_cmd_tl {#2}
- \bool_if:NT \l_@@_cmd_replace_bool
- {
- \tl_set_rescan:Nnn \l_@@_tmpb_tl { } { _ }
- \tl_replace_all:NVn \l_@@_cmd_tl \l_@@_tmpb_tl { _ }
- \@@_replace_at_at:N \l_@@_cmd_tl
- \tl_replace_all:NnV \l_@@_cmd_tl { _ } \l_@@_tmpb_tl
- }
-% \end{macrocode}
-% Typesetting.
-% Note the replacement for the underscore is to permit linebreaks.
-% The \texttt{underscore} package adds the linebreak,
-% and the regex results in applying the breakable underscore only to the \emph{last}
-% of a run of underscores, and not if the underscore follows a backslash.
-% \begin{macrocode}
- \mode_if_math:T { \mbox }
- {
- \bool_if:NT \l_@@_allow_indexing_bool { \@@_target: }
- \verbatim@font
- \@@_if_almost_str:VT \l_@@_cmd_tl
- {
- \__kernel_tl_set:Nx \l_@@_cmd_tl { \tl_to_str:N \l_@@_cmd_tl }
- \bool_if:NT \g_@@_cs_break_bool
- {
- \regex_replace_all:nnN
- { ([^\\\_]\_*) \_ ([^\_]) }
- { \1 \c{BreakableUnderscore} \2 }
- \l_@@_cmd_tl
- }
- }
- \tl_replace_all:Nnn \l_@@_cmd_tl { ~ } { \@xobeysp }
- \l_@@_cmd_tl
- \@
- }
-% \end{macrocode}
-% Indexing.
-% \begin{macrocode}
- \bool_if:NT \l_@@_allow_indexing_bool
- {
- \bool_if:NF \l_@@_cmd_noindex_bool
- {
- \quark_if_no_value:NF \l_@@_cmd_index_tl
- {
- \__kernel_tl_set:Nx \l_@@_cmd_tl
- { \c_backslash_str \exp_not:o { \l_@@_cmd_index_tl } }
- }
- \exp_args:No \@@_key_get:n { \l_@@_cmd_tl }
- \quark_if_no_value:NF \l_@@_cmd_module_tl
- {
- \__kernel_tl_set:Nx \l_@@_index_module_tl
- { \tl_to_str:N \l_@@_cmd_module_tl }
- }
- \@@_special_index_module:ooonN
- { \l_@@_index_key_tl }
- { \l_@@_index_macro_tl }
- { \l_@@_index_module_tl }
- { usage }
- \l_@@_index_internal_bool
- }
- }
- }
-\cs_generate_variant:Nn \@@_cmd:nn { no }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \@@_meta:n,
-% \@@_ensuremath_sb:n,
-% \@@_meta_original:n
-% }
-% Store |#1| in \cs{l_@@_tmpa_tl} and replaces every underscore,
-% regardless of its category (\enquote{math toggle},
-% \enquote{alignment}, \enquote{superscript}, \enquote{subscript},
-% \enquote{letter}, \enquote{other}, or \enquote{active}) by
-% \cs{@@_ensuremath_sb:n} (which creates math subscripts), then runs
-% the code used for \tn{meta} in \pkg{doc.sty}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_meta:n #1
- {
- \tl_set:Nn \l_@@_tmpa_tl {#1}
- \tl_map_inline:nn
- { { 3 } { 4 } { 7 } { 8 } { 11 } { 12 } { 13 } }
- {
- \tl_set_rescan:Nnn \l_@@_tmpb_tl
- { \char_set_catcode:nn { `_ } {##1} } { _ }
- \tl_replace_all:NVn \l_@@_tmpa_tl \l_@@_tmpb_tl
- { \@@_ensuremath_sb:n }
- }
- \exp_args:NV \@@_meta_original:n \l_@@_tmpa_tl
- }
-\cs_new_protected:Npn \@@_ensuremath_sb:n #1
- { \ensuremath { \sb {#1} } }
-\cs_new_protected:Npn \@@_meta_original:n #1
- {
- \ensuremath \langle
- \mode_if_math:T { \nfss@text }
- {
- \meta@font@select
- \edef \meta@hyphen@restore
- { \hyphenchar \the \font \the \hyphenchar \font }
- \hyphenchar \font \m@ne
- \language \l@nohyphenation
- #1 \/
- \meta@hyphen@restore
- }
- \ensuremath \rangle
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Common between \env{macro} and \env{function}}
-%
-% \begin{macro}
-% {
-% \@@_typeset_exp:, \@@_typeset_rexp:,
-% \@@_typeset_TF:, \@@_typeset_aux:n
-% }
-% Used by \cs{@@_macro_single:nNN} and in the \env{function} environment
-% to typeset conditionals and auxiliary functions.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_typeset_exp:
- {
- \cs_if_exist:NTF \Codedoc@expstar
- { \hyperlink { expstar } }
- { \mbox }
- {$\star$}
- }
-\cs_new_protected:Npn \@@_typeset_rexp:
- {
- \cs_if_exist:NTF \Codedoc@rexpstar
- { \hyperlink { rexpstar } }
- { \mbox }
- { \ding { 73 } } % hollow star
- }
-\cs_new_protected:Npn \@@_typeset_TF:
- {
- \cs_if_exist:NTF \Codedoc@explTF
- { \hyperlink { explTF } }
- { \mbox }
- {
- \itshape TF
- \makebox[0pt][r]
- {
- \underline { \phantom{\itshape TF} \kern-0.1em }
- }
- }
- }
-\cs_new_protected:Npn \@@_typeset_aux:n #1
- {
- { \color[gray]{0.5} #1 }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {\@@_get_hyper_target:nN, \@@_get_hyper_target:oN, \@@_get_hyper_target:eN}
-% Create a \pkg{hyperref} anchor from a macro name~|#1| and stores it
-% in the token list variable~|#2|. For instance, |\prg_replicate:nn|
-% gives |doc/function//prg/replicate:nn|.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_get_hyper_target:nN #1#2
- {
- \__kernel_tl_set:Nx #2 { \tl_to_str:n {#1} }
- \tl_replace_all:NVn #2 \c_underscore_str { / }
- \tl_remove_all:NV #2 \c_backslash_str
- \tl_put_left:Nn #2 { doc/function// }
- }
-\cs_generate_variant:Nn \@@_get_hyper_target:nN { o , e }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_names_get_seq:nN}
-% The argument~|#1| (argument of a |function| or |macro| environment)
-% has catcodes $10$ (space), $12$ (other) and $13$ (active). Sanitize
-% catcodes. If the |verb| option was used, output a one-item
-% sequence. Otherwise, remove any \enquote{\%} character at the
-% beginning of a line. Remove tabs and newlines. Finally, convert
-% |_@@| and |@@| to |__|\meta{module name} (if it is non-empty). At
-% this point, \cs{l_@@_tmpa_tl} contains a comma-delimited list of
-% names, where |@| and~|_| have category code letter. Turn it to a
-% string, parse it as a comma-delimited list (in particular this
-% removes spaces), and output a sequence of function/macro names.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_names_get_seq:nN #1#2
- {
- \__kernel_tl_set:Nx \l_@@_tmpa_tl { \tl_to_str:n {#1} }
- \bool_if:NTF \l_@@_names_verb_bool
- {
- \seq_clear:N #2
- \seq_put_right:NV #2 \l_@@_tmpa_tl
- }
- {
- \tl_remove_all:Ne \l_@@_tmpa_tl
- { \iow_char:N \^^M \c_percent_str }
- \tl_remove_all:Ne \l_@@_tmpa_tl { \tl_to_str:n { ^ ^ A } }
- \tl_remove_all:Ne \l_@@_tmpa_tl { \iow_char:N \^^I }
- \tl_remove_all:Ne \l_@@_tmpa_tl { \iow_char:N \^^M }
- \@@_detect_internals:N \l_@@_tmpa_tl
- \@@_replace_at_at:N \l_@@_tmpa_tl
- \exp_args:NNe \seq_set_from_clist:Nn #2
- { \tl_to_str:N \l_@@_tmpa_tl }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_names_parse:, \@@_names_parse_one:n}
-% The goal is to group variants together. We populate
-% \cs{l_@@_names_block_tl} with local sequence variable named with
-% \cs{@@_lseq_name:n} after the base forms. When encountering a new
-% base form, set the corresponding local sequence to hold the
-% \meta{base name} (stripped of the signature) and add the local
-% sequence to the list \cs{l_@@_names_block_tl}. In all cases append
-% the signature to the local sequence, which thus takes the form
-% \meta{base name}, \meta{signature_1}, \meta{signature_2} and so on.
-% If the original function had no signature (no colon) then use
-% \cs{scan_stop:} as the signature (there can be no variant). We
-% special case commands |#1| starting with |\::|, namely weird
-% functions named |\::N| and the like.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_names_parse:
- {
- \tl_clear:N \l_@@_names_block_tl
- \seq_map_function:NN
- \l_@@_names_seq
- \@@_names_parse_one:n
- }
-\cs_new_protected:Npn \@@_names_parse_one:n #1
- {
- \@@_split_function_do:nn {#1}
- { \@@_names_parse_one_aux:nnNn }
- {#1}
- }
-\cs_new_protected:Npn \@@_names_parse_one_aux:nnNn #1#2#3#4
- {
- \bool_if:NTF #3
- {
- \tl_if_head_eq_charcode:nNTF {#2} :
- { \@@_names_parse_aux:nnn {#4} {#4} { \scan_stop: } }
- {
- \exp_args:Ne \@@_names_parse_aux:nnn
- { \@@_base_form_aux:nnN {#1} {#2} #3 }
- {#1} {#2}
- }
- }
- {
- \bool_if:NT \l_@@_macro_TF_bool
- { \msg_error:nne { l3doc } { no-signature-TF } {#4} }
- \@@_names_parse_aux:nnn {#4} {#4} { \scan_stop: }
- }
- }
-\cs_new_protected:Npn \@@_names_parse_aux:nnn #1
- { \exp_args:Nc \@@_names_parse_aux:Nnn { \@@_lseq_name:n {#1} } }
-\cs_new_protected:Npn \@@_names_parse_aux:Nnn #1#2#3
- {
- \tl_if_in:NnF \l_@@_names_block_tl {#1}
- {
- \tl_put_right:Nn \l_@@_names_block_tl {#1}
- \seq_clear_new:N #1
- \seq_put_right:Nn #1 {#2}
- }
- \seq_put_right:Nn #1 {#3}
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_names_typeset:}
-% \begin{macro}{\@@_names_typeset_auxi:n}
-% This code is in particular used when typesetting function names in a
-% \env{function} environment. The mapping over \cs{l_@@_names_block_tl}
-% cannot use \cs{tl_map_inline:Nn} because the code following |\\|
-% would not be expandable, thus breaking \tn{bottomrule}.
-%
-% Call \cs{@@_names_typeset_auxi:n} on each local sequence (which
-% holds a set of variants). The first step is to pop the base form
-% and change spaces to category other so
-% that they get displayed eventually. Then store the variants in
-% \cs{g_@@_variants_seq}, remove the first, which will be displayed
-% more prominently, and reconstruct the actual name, passing it to
-% \cs{@@_names_typeset_auxii:n}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_names_typeset:
- {
- \tl_map_function:NN \l_@@_names_block_tl
- \@@_names_typeset_auxi:n
- }
-\cs_new_protected:Npn \@@_names_typeset_auxi:n #1
- {
- \seq_pop:NN #1 \l_@@_tmpa_tl
- \tl_gset_eq:NN \g_@@_base_name_tl \l_@@_tmpa_tl
- \tl_greplace_all:NnV \g_@@_base_name_tl
- { ~ } \c_catcode_other_space_tl
- \seq_get:NN #1 \l_@@_tmpa_tl
- \str_if_eq:VnTF \l_@@_tmpa_tl { \scan_stop: }
- {
- \seq_gclear:N \g_@@_variants_seq
- \@@_names_typeset_auxii:e { \g_@@_base_name_tl }
- }
- {
- \seq_gset_eq:NN \g_@@_variants_seq #1
- \seq_gpop:NN \g_@@_variants_seq \l_@@_tmpb_tl
- \@@_names_typeset_auxii:e
- { \g_@@_base_name_tl : \l_@@_tmpb_tl }
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {\@@_names_typeset_auxii:n, \@@_names_typeset_auxii:e}
-% In case the option |pTF| was given, typeset predicates before the
-% |TF| functions. In case the option |noTF| was given, typeset the
-% non-|TF| function as well. Pass the relevant boolean in both cases
-% to control whether to append |TF|.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_names_typeset_auxii:n #1
- {
- \bool_if:NT \l_@@_macro_pTF_bool
- {
- \@@_names_typeset_block:eN
- { \@@_predicate_from_base:n {#1} }
- \c_false_bool
- }
- \bool_if:NT \l_@@_macro_noTF_bool
- { \@@_names_typeset_block:nN {#1} \c_false_bool }
- \@@_names_typeset_block:nN {#1} \l_@@_macro_TF_bool
- }
-\cs_generate_variant:Nn \@@_names_typeset_auxii:n { e }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_names_typeset_block:nN, \@@_names_typeset_block:eN}
-% Names in \env{function} and \env{macro} environments are typeset
-% differently. To distinguish the two note that
-% \cs{l_@@_nested_macro_int} is at least one when in an \env{macro}
-% environment (we assume \env{function} is not nested inside it). A
-% block is a function with all its variants.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_names_typeset_block:nN
- {
- \int_compare:nNnTF \l_@@_nested_macro_int = 0
- { \@@_typeset_function_block:nN }
- { \@@_macro_typeset_block:nN }
- }
-\cs_generate_variant:Nn \@@_names_typeset_block:nN { e }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\@@_if_macro_internal:n}
-% \begin{macro}[EXP]{\@@_if_macro_internal_aux:w}
-% Determines whether the given macro should be considered internal or
-% public. If an option such as |int| was given then the answer is
-% \cs{l_@@_macro_internal_bool}, otherwise check for whether the macro
-% name contains~|__|.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \@@_if_macro_internal:n #1 { p , T , F , TF }
- {
- \bool_if:NTF \l_@@_macro_internal_bool
- { \prg_return_true: }
- {
- \tl_if_empty:eTF
- {
- \exp_after:wN \@@_if_macro_internal_aux:w
- \tl_to_str:n { #1 ~ __ }
- }
- { \prg_return_false: } { \prg_return_true: }
- }
- }
-\exp_last_unbraced:NNNNo
- \cs_new:Npn \@@_if_macro_internal_aux:w #1 { \tl_to_str:n { __ } } { }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_names_block_base_map:N}
-% The \cs{l_@@_names_block_tl} contains sequence variables
-% corresponding to different base functions and their variants. For
-% each such sequence, put the first and second items in
-% \cs{l_@@_tmpa_tl} and \cs{l_@@_tmpb_tl} and build the base
-% function's name.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_names_block_base_map:N #1
- {
- \tl_map_inline:Nn \l_@@_names_block_tl
- {
- \group_begin:
- \seq_set_eq:NN \l_@@_tmpa_seq ##1
- \seq_pop:NN \l_@@_tmpa_seq \l_@@_tmpa_tl
- \seq_get:NN \l_@@_tmpa_seq \l_@@_tmpb_tl
- \exp_args:NNe
- \group_end:
- #1
- {
- \l_@@_tmpa_tl
- \str_if_eq:VnF \l_@@_tmpb_tl { \scan_stop: }
- { : \l_@@_tmpb_tl }
- \bool_if:NT \l_@@_macro_TF_bool { TF }
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{The \env{function} environment}
-%
-% \begin{macrocode}
-\keys_define:nn { l3doc/function }
- {
- TF .value_forbidden:n = true ,
- TF .code:n =
- {
- \bool_set_true:N \l_@@_macro_TF_bool
- } ,
- EXP .value_forbidden:n = true ,
- EXP .code:n =
- {
- \bool_set_true:N \l_@@_macro_EXP_bool
- \bool_set_false:N \l_@@_macro_rEXP_bool
- } ,
- rEXP .value_forbidden:n = true ,
- rEXP .code:n =
- {
- \bool_set_false:N \l_@@_macro_EXP_bool
- \bool_set_true:N \l_@@_macro_rEXP_bool
- } ,
- pTF .value_forbidden:n = true ,
- pTF .code:n =
- {
- \bool_set_true:N \l_@@_macro_pTF_bool
- \bool_set_true:N \l_@@_macro_TF_bool
- \bool_set_true:N \l_@@_macro_EXP_bool
- \bool_set_false:N \l_@@_macro_rEXP_bool
- } ,
- noTF .value_forbidden:n = true ,
- noTF .code:n =
- {
- \bool_set_true:N \l_@@_macro_noTF_bool
- \bool_set_true:N \l_@@_macro_TF_bool
- } ,
- added .code:n = { \@@_date_set_past:Nn \l_@@_date_added_tl {#1} },
- updated .code:n = { \@@_date_set_past:Nn \l_@@_date_updated_tl {#1} } ,
- deprecated .bool_set:N = \l_@@_macro_deprecated_bool ,
- no-user-doc .bool_set:N = \l_@@_macro_nodoc_bool ,
- tested .code:n = { } ,
- label .code:n =
- {
- \clist_set:Nn \l_@@_function_label_clist {#1}
- \bool_set_true:N \l_@@_no_label_bool
- } ,
- verb .value_forbidden:n = true ,
- verb .bool_set:N = \l_@@_names_verb_bool ,
- module .tl_set:N = \l_@@_override_module_tl ,
- }
-% \end{macrocode}
-%
-% \begin{macro}[do-not-index={\A,\Z,\d,\1,\2,\3}]
-% {\@@_date_set:Nn,\@@_date_set_past:Nn}
-% Normalize the date into the format \texttt{YYYY-MM-DD}; more
-% precisely month and day are allowed to be single digits. The
-% \cs{@@_date_set_past:Nn} function only allows dates in the past (or
-% same day).
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_date_set:Nn #1#2
- {
- \tl_set:Nn #1 {#2}
- \regex_replace_once:nnNF
- { \A(\d\d\d\d)[-/](\d\d?)[-/](\d\d?)\Z } { \1-\2-\3 } #1
- {
- \msg_error:nnn { l3doc } { date-format } {#2}
- \tl_set:Nn #1 { 1970-01-01 }
- }
- }
-\cs_new_protected:Npn \@@_date_set_past:Nn #1#2
- {
- \@@_date_set:Nn #1 {#2}
- \exp_args:No \@@_date_compare:nNnT
- {#1} > { \c_sys_year_int - \c_sys_month_int - \c_sys_day_int }
- {
- \msg_error:nnee { l3doc } { future-date }
- { \tl_to_str:N \l_@@_macro_argument_tl }
- {#1}
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_function:nnw}
-% \begin{arguments}
-% \item Key--value list.
-% \item Comma-separated list of functions; input has already been
-% sanitised by catcode changes before reading the argument.
-% \end{arguments}
-% \begin{macro}{\@@_function_end:}
-% Make sure any paragraph is finished, and similar safe practices at
-% the beginning of an environment which will typeset material.
-% Initialize some variables. Parse the key--value list. Clean up the
-% list of functions, then go through them to extract some data. After
-% this, typeset the function names in the coffin
-% \cs{l_@@_functions_coffin} and measure it to know if it fits in the
-% margin. Finally, start a vertical coffin for the main part of the
-% environment. This coffin stops when the environment ends, then all
-% the pieces are assembled into a single coffin, which is typeset.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_function:nnw #1#2
- {
- \@@_function_typeset_start:
- \@@_function_init:
- \tl_set:Nn \l_@@_macro_argument_tl {#2}
- \keys_set:nn { l3doc/function } {#1}
- \@@_names_get_seq:nN {#2} \l_@@_names_seq
- \@@_names_parse:
- \@@_function_typeset:
- \@@_function_reset:
- \@@_function_descr_start:w
- }
-\cs_new_protected:Npn \@@_function_end:
- {
- \@@_function_descr_stop:
- \@@_function_assemble:
- \@@_function_typeset_stop:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {\@@_function_typeset_start:, \@@_function_typeset_stop:}
-% At the start of the \env{function} environment, before performing
-% any assignment, close the last paragraph, and set up the typesetting
-% scene. Further code typesets a coffin, so we end the paragraph and
-% allow a page break.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_function_typeset_start:
- {
- \par \bigskip \noindent
- }
-\cs_new_protected:Npn \@@_function_typeset_stop:
- {
- \par
- \dim_set:Nn \prevdepth { \box_dp:N \l_@@_descr_coffin }
- \allowbreak
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_function_init:}
-% Complain if \texttt{function} environments are nested. Clear
-% various variables.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_function_init:
- {
- \box_if_empty:NF \g_@@_syntax_box
- { \msg_error:nn { l3doc } { syntax-nested-function } }
- \coffin_clear:N \l_@@_descr_coffin
- \box_gclear:N \g_@@_syntax_box
- \coffin_clear:N \l_@@_syntax_coffin
- \coffin_clear:N \l_@@_functions_coffin
- \bool_set_false:N \l_@@_macro_TF_bool
- \bool_set_false:N \l_@@_macro_pTF_bool
- \bool_set_false:N \l_@@_macro_noTF_bool
- \bool_set_false:N \l_@@_macro_EXP_bool
- \bool_set_false:N \l_@@_macro_rEXP_bool
- \bool_set_false:N \l_@@_no_label_bool
- \bool_set_false:N \l_@@_names_verb_bool
- \bool_set_true:N \l_@@_in_function_bool
- \clist_clear:N \l_@@_function_label_clist
- \tl_set:Nn \l_@@_override_module_tl { \q_no_value }
- \char_set_active_eq:NN \< \@@_shorthand_meta:
- \char_set_catcode_active:N \<
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_shorthand_meta:, \@@_shorthand_meta:w}
-% Allow |<...>| to be used as markup for |\meta{...}|.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_shorthand_meta:
- { \mode_if_math:TF { < } { \@@_shorthand_meta:w } }
-\cs_new_protected_nopar:Npn \@@_shorthand_meta:w #1 > { \meta {#1} }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_function_reset:}
-% Clear some variables.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_function_reset:
- {
- \tl_set:Nn \l_@@_override_module_tl { \q_no_value }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_function_typeset:}
-% Typeset in the coffin \cs{l_@@_functions_coffin} the functions listed in
-% \cs{l_@@_names_block_tl} and the relevant dates, then set
-% \cs{l_@@_long_name_bool} to be \texttt{true} if this coffin is
-% larger than the available width in the margin. The function
-% \cs{@@_typeset_functions:} is quite involved hence given later.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_function_typeset:
- {
- \dim_zero:N \l_@@_trial_width_dim
- \hcoffin_set:Nn \l_@@_functions_coffin { \@@_typeset_functions: }
- \dim_set:Nn \l_@@_trial_width_dim
- { \box_wd:N \l_@@_functions_coffin }
- \bool_set:Nn \l_@@_long_name_bool
- { \dim_compare_p:nNn \l_@@_trial_width_dim > \marginparwidth }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {\@@_function_descr_start:w, \@@_function_descr_stop:}
-% The last step in \cs{@@_function:nnw} (the beginning of a
-% \env{function} environment) is to open a coffin which will capture
-% the description of the function, namely the body of the
-% \env{function} environment. This is closed by \cs{@@_function_end:}
-% (the end of a \env{function} environment).
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_function_descr_start:w
- {
- \vcoffin_set:Nnw \l_@@_descr_coffin { \textwidth }
- \noindent \ignorespaces
- }
-\cs_new_protected:Npn \@@_function_descr_stop:
- { \vcoffin_set_end: }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_function_assemble:}
-% The box \cs{g_@@_syntax_box} contains the contents of the syntax
-% environment if it was used. Now that we have all the pieces, join
-% together the syntax coffin, the names coffin, and the description
-% coffin. The relative positions depend on whether the names coffin
-% fits in the margin. Then typeset the combination.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_function_assemble:
- {
- \hcoffin_set:Nn \l_@@_syntax_coffin
- { \box_use_drop:N \g_@@_syntax_box }
- \bool_if:NTF \l_@@_long_name_bool
- {
- \coffin_join:NnnNnnnn
- \l_@@_output_coffin {hc} {vc}
- \l_@@_syntax_coffin {l} {T}
- {0pt} {0pt}
- \coffin_join:NnnNnnnn
- \l_@@_output_coffin {l} {t}
- \l_@@_functions_coffin {r} {t}
- {-\marginparsep} {0pt}
- \coffin_join:NnnNnnnn
- \l_@@_output_coffin {l} {b}
- \l_@@_descr_coffin {l} {t}
- {0.75\marginparwidth + \marginparsep} {-\medskipamount}
- \coffin_typeset:Nnnnn \l_@@_output_coffin
- {\l_@@_descr_coffin-l} {\l_@@_descr_coffin-t}
- {0pt} {0pt}
- }
- {
- \coffin_join:NnnNnnnn
- \l_@@_output_coffin {hc} {vc}
- \l_@@_syntax_coffin {l} {t}
- {0pt} {0pt}
- \coffin_join:NnnNnnnn
- \l_@@_output_coffin {l} {b}
- \l_@@_descr_coffin {l} {t}
- {0pt} {-\medskipamount}
- \coffin_join:NnnNnnnn
- \l_@@_output_coffin {l} {t}
- \l_@@_functions_coffin {r} {t}
- {-\marginparsep} {0pt}
- \coffin_typeset:Nnnnn \l_@@_output_coffin
- {\l_@@_syntax_coffin-l} {\l_@@_syntax_coffin-T}
- {0pt} {0pt}
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_typeset_functions:}
-% This function builds the \cs{l_@@_functions_coffin} by typesetting the
-% function names (with variants) and the relevant dates in a
-% \env{tabular} environment. The use of rules \tn{toprule},
-% \tn{midrule} and \tn{bottomrule} requires whatever lies between the
-% last |\\| and the rule to be expandable, making our lives a bit
-% complicated.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_typeset_functions:
- {
- \small\ttfamily
- \@@_target:
- \Hy@MakeCurrentHref { HD. \int_use:N \c@HD@hypercount }
- \begin{tabular} [t] { @{} l @{} >{\hspace{\tabcolsep}} r @{} }
- \toprule
- \@@_function_extra_labels:
- \@@_names_typeset:
- \@@_typeset_dates:
- \bottomrule
- \end{tabular}
- \normalfont\normalsize
- }
-% \end{macrocode}
-% \end{macro}
-%
-% ^^A TODO: collect all index targets from a given function environment in a box and stick it at the top.
-% \begin{macro}
-% {\@@_typeset_function_block:nN, \@@_typeset_function_block:eN}
-% \begin{macro}{\@@_function_index:n, \@@_function_index:e}
-% |#1| is a csname, |#2| a boolean indicating whether to add |TF| or not.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_typeset_function_block:nN #1#2
- {
- \@@_function_index:e
- { #1 \bool_if:NT #2 { \tl_to_str:n {TF} } }
- \@@_function_label:eN {#1} #2
- #1
- \bool_if:NT #2 { \@@_typeset_TF: }
- \@@_typeset_expandability:
- \seq_if_empty:NF \g_@@_variants_seq
- { \@@_typeset_variant_list:nN {#1} #2 }
- \\
- }
-\cs_generate_variant:Nn \@@_typeset_function_block:nN { e }
-\cs_new_protected:Npn \@@_function_index:n #1
- {
- \seq_gput_right:Nn \g_doc_functions_seq {#1}
- \@@_special_index:nn {#1} { usage }
- }
-\cs_generate_variant:Nn \@@_function_index:n { e }
-% \end{macrocode}
-%
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_typeset_expandability:
- {
- &
- \bool_if:NT \l_@@_macro_EXP_bool { \@@_typeset_exp: }
- \bool_if:NT \l_@@_macro_rEXP_bool { \@@_typeset_rexp: }
- }
-% \end{macrocode}
-%
-% |#1| is the function, |#2| whether to add |TF|.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_typeset_variant_list:nN #1#2
- {
- \\
- \@@_typeset_aux:n { \@@_get_function_name:n {#1} }
- :
- \int_compare:nTF { \seq_count:N \g_@@_variants_seq == 1 }
- {
- \seq_use:Nn \g_@@_variants_seq { }
- \bool_if:NT #2 { \@@_typeset_TF: }
- }
- {
- \hbox_set:Nn \l_tmpa_box
- { \seq_use:Nn \g__@@_variants_seq { \textrm| \nolinebreak[2] } }
- \textrm(
-% \end{macrocode}
-%
-% Set long variant lists in a parbox, short lists set natural length.
-% \begin{macrocode}
- \dim_compare:nNnTF { \box_wd:N \l_tmpa_box } > { .4\columnwidth }
- {
- \parbox[t]{.4\columnwidth}
- {
- \raggedright
- \hbox_unpack_drop:N \l_tmpa_box
- \textrm)
- \bool_if:NT #2 { \@@_typeset_TF: }
- }
- }
- {
- \hbox_unpack_drop:N \l_tmpa_box
- \textrm)
- \bool_if:NT #2 { \@@_typeset_TF: }
- }
- }
- \@@_typeset_expandability:
- }
-% \end{macrocode}
-%
-% |#1| is the function name, |#2| whether to add |TF|.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_function_extra_labels:
- {
- \bool_if:NT \l_@@_no_label_bool
- {
- \clist_map_inline:Nn \l_@@_function_label_clist
- {
- \@@_get_hyper_target:oN { \token_to_str:N ##1 }
- \l_@@_tmpa_tl
- \exp_args:No \label { \l_@@_tmpa_tl }
- }
- }
- }
-\cs_new_protected:Npn \@@_function_label:nN #1#2
- {
- \bool_if:NF \l_@@_no_label_bool
- {
- \@@_get_hyper_target:eN
- {
- \exp_not:n {#1}
- \bool_if:NT #2 { \tl_to_str:n {TF} }
- }
- \l_@@_tmpa_tl
- \exp_args:No \label { \l_@@_tmpa_tl }
- }
- }
-\cs_generate_variant:Nn \@@_function_label:nN { e }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_typeset_dates:}
-% To display metadata for when functions are added/modified.
-% This function must be expandable since it produces rules for use in
-% alignments.
-% \begin{macrocode}
-\cs_new:Npn \@@_typeset_dates:
- {
- \bool_lazy_and:nnF
- { \tl_if_empty_p:N \l_@@_date_added_tl }
- { \tl_if_empty_p:N \l_@@_date_updated_tl }
- { \midrule }
- \tl_if_empty:NF \l_@@_date_added_tl
- {
- \multicolumn { 2 } { @{} r @{} }
- { \scriptsize New: \, \l_@@_date_added_tl } \\
- }
-
- \tl_if_empty:NF \l_@@_date_updated_tl
- {
- \multicolumn { 2 } { @{} r @{} }
- { \scriptsize Updated: \, \l_@@_date_updated_tl } \\
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_syntax:w, \@@_syntax_end:}
-% Implement the \env{syntax} environment.
-% \begin{macrocode}
-\dim_new:N \l_@@_syntax_dim
-\cs_new_protected:Npn \@@_syntax:w
- {
- \box_if_empty:NF \g_@@_syntax_box
- { \msg_error:nn { l3doc } { multiple-syntax } }
- \dim_set:Nn \l_@@_syntax_dim
- {
- \textwidth
- \bool_if:NT \l_@@_long_name_bool
- { + 0.75 \marginparwidth - \l_@@_trial_width_dim }
- }
- \hbox_gset:Nw \g_@@_syntax_box
- \small \ttfamily
- \arrayrulecolor{white}
- \begin{tabular} { @{} l @{} }
- \toprule
- \begin{minipage}[t]{\l_@@_syntax_dim}
- \raggedright
- \obeyspaces
- \obeylines
- }
-\cs_new_protected:Npn \@@_syntax_end:
- {
- \end{minipage}
- \end{tabular}
- \arrayrulecolor{black}
- \hbox_gset_end:
- \bool_if:NF \l_@@_in_function_bool
- {
- \begin{quote}
- \mode_leave_vertical:
- \box_use_drop:N \g_@@_syntax_box
- \end{quote}
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{The \env{macro} environment}
-%
-% Keyval for the \env{macro} environment.
-% TODO: provide document command for documenting keys.
-% \begin{macrocode}
-\keys_define:nn { l3doc/macro }
- {
- aux .value_forbidden:n = true ,
- aux .code:n =
- {
- \msg_warning:nnnn { l3doc } { deprecated-option }
- { aux } { function/macro }
- } ,
- deprecated .bool_set:N = \l_@@_macro_deprecated_bool ,
- internal .value_forbidden:n = true ,
- internal .code:n =
- { \bool_set_true:N \l_@@_macro_internal_bool } ,
- int .value_forbidden:n = true ,
- int .code:n =
- { \bool_set_true:N \l_@@_macro_internal_bool } ,
- no-user-doc .bool_set:N = \l_@@_macro_nodoc_bool ,
- var .value_forbidden:n = true ,
- var .code:n =
- { \bool_set_true:N \l_@@_macro_var_bool } ,
- TF .value_forbidden:n = true ,
- TF .code:n =
- { \bool_set_true:N \l_@@_macro_TF_bool } ,
- pTF .value_forbidden:n = true ,
- pTF .code:n =
- {
- \bool_set_true:N \l_@@_macro_TF_bool
- \bool_set_true:N \l_@@_macro_pTF_bool
- \bool_set_true:N \l_@@_macro_EXP_bool
- \bool_set_false:N \l_@@_macro_rEXP_bool
- } ,
- noTF .value_forbidden:n = true ,
- noTF .code:n =
- {
- \bool_set_true:N \l_@@_macro_TF_bool
- \bool_set_true:N \l_@@_macro_noTF_bool
- } ,
- EXP .value_forbidden:n = true ,
- EXP .code:n =
- {
- \bool_set_true:N \l_@@_macro_EXP_bool
- \bool_set_false:N \l_@@_macro_rEXP_bool
- } ,
- rEXP .value_forbidden:n = true ,
- rEXP .code:n =
- {
- \bool_set_false:N \l_@@_macro_EXP_bool
- \bool_set_true:N \l_@@_macro_rEXP_bool
- } ,
- tested .code:n =
- {
- \bool_set_true:N \l_@@_macro_tested_bool
- } ,
- added .code:n = {} , % TODO
- updated .code:n = {} , % TODO
- verb .bool_set:N = \l_@@_names_verb_bool ,
- module .tl_set:N = \l_@@_override_module_tl ,
- documented-as .tl_set:N = \l_@@_macro_documented_tl ,
- do-not-index .value_required:n = true ,
- do-not-index .tl_set:N = \l_@@_macro_do_not_index_tl ,
- % do-not-index .default:n = \q_no_value ,
- }
-% \end{macrocode}
-%
-% \begin{macro}{\@@_macro:nnw}
-% The arguments are a key--value list of \meta{options} and a
-% comma-list of \meta{names}, read verbatim by \pkg{ltcmd}. First
-% initialize some variables before applying the \meta{options}, then
-% parse the \meta{names} to get a sequence of macro names, then apply
-% \cs{@@_macro_single:nNN} to each (this step is more subtle than
-% \cs{seq_map_function:NN} because of |TF|/|pTF|/|noTF|). Finally typeset
-% the macro names in the margin.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_macro:nnw #1#2
- {
- \@@_macro_init:
- \tl_set:Nn \l_@@_macro_argument_tl {#2}
- \keys_set:nn { l3doc/macro } {#1}
- \@@_names_get_seq:nN {#2} \l_@@_names_seq
- \@@_names_parse:
- \@@_macro_exclude_index:
- \@@_macro_save_names:
- \@@_names_typeset:
- \@@_macro_dump:
- \@@_macro_reset:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_macro_init:}
-% The booleans hold various key--value options,
-% \cs{l_@@_nested_macro_int} counts the number of \env{macro}
-% environments around the current point (is $0$ outside).
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_macro_init:
- {
- \int_incr:N \l_@@_nested_macro_int
- \bool_set_false:N \l_@@_macro_deprecated_bool
- \bool_set_false:N \l_@@_macro_internal_bool
- \bool_set_false:N \l_@@_macro_TF_bool
- \bool_set_false:N \l_@@_macro_pTF_bool
- \bool_set_false:N \l_@@_macro_noTF_bool
- \bool_set_false:N \l_@@_macro_EXP_bool
- \bool_set_false:N \l_@@_macro_rEXP_bool
- \bool_set_false:N \l_@@_macro_var_bool
- \bool_set_false:N \l_@@_macro_tested_bool
- \bool_set_false:N \l_@@_names_verb_bool
- \tl_set:Nn \l_@@_override_module_tl { \q_no_value }
- \tl_clear:N \l_@@_macro_documented_tl
- \cs_set_eq:NN \testfile \@@_print_testfile:n
- \box_clear:N \l_@@_macro_index_box
- \vbox_set:Nn \l_@@_macro_box
- {
- \hbox:n
- {
- \strut
- \int_compare:nNnT \l_@@_macro_int = 0 { \@@_target: }
- }
- \vskip \int_eval:n { \l_@@_macro_int - 1 } \baselineskip
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_macro_reset:}
-% We ensure that \cs{cs} commands nested inside a macro whose module
-% is imposed are not affected.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_macro_reset:
- {
- \tl_set:Nn \l_@@_override_module_tl { \q_no_value }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_macro_save_names:}
-% \begin{macro}[EXP]{\@@_macro_save_names_aux:w}
-% The list of names defined in a set of \env{macro} environments is
-% eventually used to display on which page they are documented. If
-% the |documented-as| key is given, use that, otherwise find names in
-% \cs{l_@@_names_block_tl}. The |documented-as| needs to be detokenized
-% without adding a space, so it has to be treated in a slightly awkward
-% way.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_macro_save_names:
- {
- \tl_if_empty:NTF \l_@@_macro_documented_tl
- { \@@_names_block_base_map:N \@@_macro_save_names_aux:n }
- {
- \seq_gput_right:Ne \g_@@_nested_names_seq
- {
- \exp_after:wN \@@_macro_save_names_aux:w
- \l_@@_macro_documented_tl \q_@@_stop
- }
- }
- }
-\cs_new:Npn \@@_macro_save_names_aux:w #1#2 \q_@@_stop
- { \token_to_str:N #1 \tl_to_str:n {#2} }
-\cs_new_protected:Npn \@@_macro_save_names_aux:n #1
- { \seq_gput_right:Nn \g_@@_nested_names_seq {#1} }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_macro_exclude_index:}
-% Some control sequences in a \env{macrocode} environment shouldn't
-% be indexed, for different reasons. This macro parses the argument
-% of the |do-not-index| option and locally removes the given macros
-% from the index.
-%
-% The optional argument to \env{macro} is not scanned with verbatim
-% catcodes, so we use \cs{tl_set_rescan:NnV} to rescan the commands
-% with the same catcodes as \cs{DoNotIndex}. The scanned token list
-% contains spaces after control sequences, which are not there when
-% \cs{DoNotIndex} is used. Since \cs{seq_set_from_clist:Nn} removes
-% spaces around the items, we can abuse that and \cs{seq_use:Nn} to
-% normalise each item. After that \cs{DoNotIndex} can do its thing.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_macro_exclude_index:
- {
- \tl_if_empty:NF \l_@@_macro_do_not_index_tl
- {
- \tl_set_rescan:NnV \l_@@_macro_do_not_index_tl
- { \MakePrivateLetters \catcode`\\12 }
- \l_@@_macro_do_not_index_tl
- \exp_args:NNV \seq_set_from_clist:Nn
- \l_@@_tmpa_seq \l_@@_macro_do_not_index_tl
- \__kernel_tl_set:Nx \l_@@_macro_do_not_index_tl
- { \seq_use:Nn \l_@@_tmpa_seq { , } }
- \exp_args:NV \DoNotIndex \l_@@_macro_do_not_index_tl
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_macro_dump:}
-% This calls |\makelabel{}|
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_macro_dump:
- {
- \topsep\MacroTopsep
- \trivlist
- \cs_set:Npn \makelabel ##1
- {
- \llap
- {
- \hbox_unpack_drop:N \l_@@_macro_index_box
- \vtop to \baselineskip
- {
- \vbox_unpack_drop:N \l_@@_macro_box
- \vss
- }
- }
- }
- \item [ ]
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_macro_typeset_block:nN}
-% Used to typeset a macro and its variants. |#1| is the macro name,
-% |#2| is a boolean controlling whether to add |TF|.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_macro_typeset_block:nN #1#2
- {
- \@@_macro_single:nNN {#1} \c_true_bool #2
- \seq_if_empty:NF \g_@@_variants_seq
- {
- \@@_macro_typeset_variant_list:eN
- { \@@_get_function_name:n {#1} } #2
- }
- }
-\cs_new_protected:Npn \@@_macro_typeset_variant_list:nN #1#2
- {
- \seq_map_inline:Nn \g_@@_variants_seq
- { \@@_macro_single:nNN { #1 : ##1 } \c_false_bool #2 }
- }
-\cs_generate_variant:Nn \@@_macro_typeset_variant_list:nN { e }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_macro_single:nNN}
-% The arguments are |#1| a macro name (without |TF|), |#2| a boolean
-% determining whether or not to index, and |#3| whether or not to add |TF|.
-% Let's start to mess around with \cls{doc}'s \env{macro} environment.
-% See \file{doc.dtx} for a full explanation of the original
-% environment. It's rather \emph{enthusiastically} commented.
-% \begin{arguments}
-% \item Macro/function/whatever name; input has already been
-% sanitised.
-% \end{arguments}
-% The assignments to \cs{saved@macroname} and \cs{saved@indexname}
-% are used by \pkg{doc}'s \cs{changes} mechanism.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_macro_single:nNN #1#2#3
- {
- \tl_set:Nn \saved@macroname {#1}
- \@@_macro_typeset_one:nN {#1} #3
- \bool_if:NT #3 { \DoNotIndex {#1} }
- \exp_args:Ne \@@_macro_index:nN
- { #1 \bool_if:NT #3 { \tl_to_str:n { TF } } }
- #2
- }
-\cs_new_protected:Npn \@@_macro_index:nN #1#2
- {
- \DoNotIndex {#1}
- \bool_if:NT #2
- {
- \bool_lazy_any:nF
- {
- { \@@_if_macro_internal_p:n {#1} }
- { \l_@@_macro_deprecated_bool }
- { \l_@@_macro_nodoc_bool }
- }
- { \seq_gput_right:Nn \g_doc_macros_seq {#1} }
- \hbox_set:Nw \l_@@_macro_index_box
- \hbox_unpack_drop:N \l_@@_macro_index_box
- \int_gincr:N \c@CodelineNo
- \@@_special_index:nn {#1} { main }
- \int_gdecr:N \c@CodelineNo
- \exp_args:NNNo \hbox_set_end:
- \tl_set:Nn \saved@indexname { \l_@@_index_key_tl }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_macro_typeset_one:nN}
-% For a long time, \cls{l3doc} collected the macro names as labels in
-% the first items of nested \tn{trivlist}, but these were not closed
-% properly with \tn{endtrivlist}. Also, it interacted in surprising
-% ways with \pkg{hyperref} targets. Now, we collect typeset macro
-% names by hand in the box \cs{l_@@_macro_box}. The fixed-size space
-% |\MacroFont\ | could be replaced by an customizable horizontal
-% space; it is important for it to be the same for all macros.
-% |#1| is the macro name, |#2| whether to add |TF|.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_macro_typeset_one:nN #1#2
- {
- \vbox_set:Nn \l_@@_macro_box
- {
- \vbox_unpack_drop:N \l_@@_macro_box
- \hbox { \llap { \@@_print_macroname:nN {#1} #2
- \MacroFont \
- } }
- }
- \int_incr:N \l_@@_macro_int
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_print_macroname:nN}
-% In the name, spaces are replaced by other spaces to ensure they get
-% displayed in case there are any.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_print_macroname:nN #1#2
- {
- \strut
- \@@_get_hyper_target:eN
- {
- \exp_not:n {#1}
- \bool_if:NT #2 { \tl_to_str:n {TF} }
- }
- \l_@@_tmpa_tl
- \cs_if_exist:cTF { r@ \l_@@_tmpa_tl }
- { \exp_last_unbraced:NNo \hyperref [ \l_@@_tmpa_tl ] }
- { \use:n }
- {
- \int_compare:nTF { \str_count:n {#1} <= 28 }
- { \MacroFont } { \MacroLongFont }
- \tl_set:Nn \l_@@_tmpa_tl {#1}
- \tl_replace_all:NnV \l_@@_tmpa_tl
- { ~ } \c_catcode_other_space_tl
- \@@_print_macroname_aux:on
- \l_@@_tmpa_tl { \bool_if:NT #2 { \@@_typeset_TF: } }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_print_macroname_aux:nn}
-% |#1| is prefix, |#2| is optional |TF| suffix.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_print_macroname_aux:nn #1#2
- {
- \@@_if_macro_internal:nTF {#1}
- { \@@_typeset_aux:n { #1 #2 } } { #1 #2 }
- }
-\cs_generate_variant:Nn \@@_print_macroname_aux:nn { o }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\MacroLongFont}
-% \begin{macrocode}
-\providecommand \MacroLongFont
- {
- \fontfamily{lmtt}\fontseries{lc}\small
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_print_testfile:n, \@@_print_testfile_aux:n}
-% Used to show that a macro has a test, somewhere.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_print_testfile:n #1
- {
- \bool_set_true:N \l_@@_macro_tested_bool
- \tl_if_eq:nnF {#1} {*}
- {
- \seq_if_in:NnF \g_@@_testfiles_seq {#1}
- {
- \seq_gput_right:Nn \g_@@_testfiles_seq {#1}
- \par
- \@@_print_testfile_aux:n {#1}
- }
- }
- }
-\cs_new_protected:Npn \@@_print_testfile_aux:n #1
- {
- \footnotesize
- (
- \textit
- {
- The~ test~ suite~ for~ this~ command,~
- and~ others~ in~ this~ file,~ is~ \textsf{#1}
- }.
- )\par
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\TestFiles}
-% \begin{macrocode}
-\DeclareDocumentCommand \TestFiles {m}
- {
- \par
- \textit
- {
- The~ following~ test~ files~ are~
- used~ for~ this~ code:~ \textsf{#1}.
- }
- \par \ignorespaces
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\UnitTested}
-% \begin{macrocode}
-\DeclareDocumentCommand \UnitTested { } { \testfile* }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\TestMissing}
-% \begin{macrocode}
-\DeclareDocumentCommand \TestMissing { m }
- { \@@_test_missing:n {#1} }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_test_missing:n}
-% Keys in \cs{g_@@_missing_tests_prop} are lists of macros given as
-% arguments of one \env{macro} environment. Values are pairs of a
-% file name and a comment about the missing tests.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_test_missing:n #1
- {
- \@@_test_missing_aux:Nen
- \g_@@_missing_tests_prop
- { \seq_use:Nn \l_@@_names_seq { , } }
- { { \g_file_curr_name_str \c_space_tl (#1) } }
- }
-\cs_new_protected:Npn \@@_test_missing_aux:Nnn #1#2#3
- {
- \prop_get:NnNTF #1 {#2} \l_@@_tmpa_tl
- { \tl_put_right:Nn \l_@@_tmpa_tl { , #3 } }
- { \tl_set:Nn \l_@@_tmpa_tl {#3} }
- \prop_put:Nno #1 {#2} \l_@@_tmpa_tl
- }
-\cs_generate_variant:Nn \@@_test_missing_aux:Nnn { Ne }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_macro_end:}
-% It is too late for anyone to declare a test file for this macro, so
-% we can check now whether the macro is tested. If the \env{macro}
-% environment which is being ended is the outermost one, then wrap
-% each macro in \tn{texttt} (with the addition of |TF| if relevant)
-% and typeset two informations: that this ends the definition of some
-% macros, and that they are documented on some page.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_macro_end:
- {
- \endtrivlist
- \@@_macro_end_check_tested:
- \int_compare:nNnT \l_@@_nested_macro_int = 1
- { \@@_macro_end_style:n { \@@_print_end_definition: } }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_macro_end_check_tested:}
-% If the |checktest| option was issued and the macro is not an
-% auxiliary nor a variable (and it does not have a test), then add it
-% to the sequence of non-tested macros.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_macro_end_check_tested:
- {
- \bool_lazy_all:nT
- {
- { \g_@@_checktest_bool }
- { ! \l_@@_macro_var_bool }
- { ! \l_@@_macro_tested_bool }
- }
- {
- \seq_set_filter:NNn \l_@@_tmpa_seq \l_@@_names_seq
- { ! \@@_if_macro_internal_p:n {##1} }
- \seq_gput_right:Ne \g_@@_not_tested_seq
- {
- \seq_use:Nn \l_@@_tmpa_seq { , }
- \bool_if:NTF \l_@@_macro_pTF_bool {~(pTF)}
- { \bool_if:NT \l_@@_macro_TF_bool {~(TF)} }
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_macro_end_style:n}
-% Style for the extra information at the end of a top-level
-% \env{macro} environment.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_macro_end_style:n #1
- {
- \nobreak \noindent
- { \footnotesize ( \emph{#1} ) \par }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \@@_print_end_definition:,
-% \@@_macro_end_wrap_item:n,
-% \@@_print_documented:
-% }
-% Surround each item by \tn{texttt}, replacing |_|
-% by \tn{_} as well. Then list the
-% macro names through \cs{seq_use:Nnnn}, unless there are too many.
-% Finally, if the macro is neither auxiliary nor internal, add a link
-% to where it is documented.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_macro_end_wrap_item:n #1
- {
- \tl_set:Nn \l_@@_tmpa_tl {#1}
- \tl_replace_all:NVn \l_@@_tmpa_tl
- \c_underscore_str { \_ }
- \texttt { \l_@@_tmpa_tl }
- }
-\cs_new_protected:Npn \@@_print_end_definition:
- {
- \seq_set_map:NNn \l_@@_tmpa_seq
- \g_@@_nested_names_seq
- { \@@_macro_end_wrap_item:n {##1} }
- End~ of~ definition~ for~
- \int_compare:nTF { \seq_count:N \l_@@_tmpa_seq <= 3 }
- {
- \seq_use:Nnnn \l_@@_tmpa_seq
- { \,~and~ } { \,,~ } { \,,~and~ }
- }
- { \seq_item:Nn \l_@@_tmpa_seq {1}\,~and~others }
- \@.
- \@@_print_documented:
- }
-\cs_new_protected:Npn \@@_print_documented:
- {
- \seq_gset_filter:NNn \g_@@_nested_names_seq
- \g_@@_nested_names_seq
- {
- ! \bool_lazy_any_p:n
- {
- { \@@_if_macro_internal_p:n {##1} }
- { \l_@@_macro_deprecated_bool }
- { \l_@@_macro_nodoc_bool }
- }
- }
- \seq_if_empty:NF \g_@@_nested_names_seq
- {
- \int_set:Nn \l_@@_tmpa_int
- { \seq_count:N \g_@@_nested_names_seq }
- \int_compare:nNnTF \l_@@_tmpa_int = 1 {~This~} {~These~}
- \bool_if:NTF \l_@@_macro_var_bool {variable} {function}
- \int_compare:nNnTF \l_@@_tmpa_int = 1 {~is~} {s~are~}
- documented~on~page~
- \@@_get_hyper_target:eN
- { \seq_item:Nn \g_@@_nested_names_seq { 1 } }
- \l_@@_tmpa_tl
- \exp_args:Ne \pageref { \l_@@_tmpa_tl } .
- }
- \seq_gclear:N \g_@@_nested_names_seq
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Misc}
-%
-% \begin{macro}{\DescribeOption}
-% For describing package options: retained for consistency, but updated for
-% \pkg{doc}~v3.
-% \begin{macrocode}
-\NewDocElement[idxtype = option, idxgroup = options]{Option}{optionenv}
-% \end{macrocode}
-% \end{macro}
-%
-% Here are some definitions for additional markup that helps to
-% structure your documentation.
-%
-% \begin{environment}{danger}
-% \begin{environment}{ddanger}
-% \begin{syntax}
-% |\begin{[d]danger}|\\
-% dangerous code\\
-% |\end{[d]danger}|
-% \end{syntax}
-% \begin{danger}
-% Provides a danger bend, as known from the \TeX{}book.
-% \end{danger}
-% The actual character from the font |manfnt|:
-% \begin{macrocode}
-\font \manual = manfnt \scan_stop:
-\cs_gset:Npn \dbend { {\manual\char127} }
-% \end{macrocode}
-%
-% Defines the single danger bend. Use it whenever there is a feature in
-% your package that might be tricky to use. FIXME: Has to be fixed when
-% in combination with a macro-definition.
-% \begin{macrocode}
-\newenvironment {danger}
- {
- \begin{trivlist}\item[]\noindent
- \begingroup\hangindent=2pc\hangafter=-2
- \cs_set:Npn \par{\endgraf\endgroup}
- \hbox to0pt{\hskip-\hangindent\dbend\hfill}\ignorespaces
- }
- {
- \par\end{trivlist}
- }
-% \end{macrocode}
-%
-% \begin{ddanger}
-% Use the double danger bend if there is something which could cause
-% serious problems when used in a wrong way. Better the normal user
-% does not know about such things.
-% \end{ddanger}
-% \begin{macrocode}
-\newenvironment {ddanger}
- {
- \begin{trivlist}\item[]\noindent
- \begingroup\hangindent=3.5pc\hangafter=-2
- \cs_set:Npn \par{\endgraf\endgroup}
- \hbox to0pt{\hskip-\hangindent\dbend\kern2pt\dbend\hfill}\ignorespaces
- }{
- \par\end{trivlist}
- }
-% \end{macrocode}
-% \end{environment}
-% \end{environment}
-%
-% \subsubsection{NB and NOTE}
-%
-% These macros are intended for additional notes added to the source that are not typeset.
-%
-% \begin{macro}{\NB}
-% \NB{wspr}{this is what I think about this!}
-% \begin{verbatim}
-% \NB{wspr}{this is what I think about this!}
-% \end{verbatim}
-% \begin{macrocode}
-\bool_if:NTF \g_@@_show_notes_bool
- {
- \NewDocumentCommand\NB{mm}
- {
- (\emph{Note}\footnote{\ttfamily [#1]:~\detokenize{#2}})
- }
- }
- {
- \NewDocumentCommand\NB{mm}{}
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{environment}{NOTE}
-% \begin{NOTE}{wspr}
-% this is what I #$%& think about this!
-% \end{NOTE}
-% \begin{verbatim}
-% \begin{NOTE}{wspr}
-% this is what I #$%& think about this!
-% \end{NOTE}
-% \end{verbatim}
-% \begin{macrocode}
-\bool_if:NTF \g_@@_show_notes_bool
- {
- \NewDocumentEnvironment{NOTE}{m}
- {
- \par\noindent (\emph{Note}~[\texttt{#1}]:\par
- \verbatim
- }
- {
- \endverbatim
- \par\noindent \emph{Note~end})\par
- }
- }
- {
- \NewDocumentEnvironment{NOTE}{m}{\comment}{\endcomment}
- }
-% \end{macrocode}
-% \end{environment}
-%
-% \subsection{Footnote support}
-% The environments \env{function} and \env{variable} are boxes
-% and so looses footnotes. The following implements support.
-% It relies currently on an internal from hyperref to get the correct targets.
-%
-% \begin{macrocode}
-\providecommand\Hy@footnote@currentHref{}
-\prop_new:N\g_@@_fnmark_prop
-\cs_new_protected:Npn \@@_fn_store:
- {
- \prop_gput:Nee\g_@@_fnmark_prop
- {fn\int_use:N\c@footnote}{{\Hy@footnote@currentHref}{\int_use:N\c@footnote}}
- }
-\cs_new_protected:Npn \@@_fn_restore:n #1
- {
- \prop_get:NnN \g_@@_fnmark_prop {fn#1}\l_@@_tmpa_tl
- \tl_gset:Ne\Hy@footnote@currentHref
- {\exp_last_unbraced:NV\use_i:nn \l_@@_tmpa_tl }
- \setcounter{footnote}{\exp_last_unbraced:NV\use_ii:nn \l_@@_tmpa_tl}
- }
-
-\cs_generate_variant:Nn \hook_gput_next_code:nn {ne}
-\cs_new_protected:Npn \@@_fn_footnote:nn #1 #2
- {
- \footnotemark
- \@@_fn_store:
- \hook_gput_next_code:ne {env/#1/after}
- {\exp_not:N\@@_fn_restore:n{\int_use:N\c@footnote}{\exp_not:n{\footnotetext{#2}}}}}
-
-\AddToHook{env/function/begin}{\def\footnote{\@@_fn_footnote:nn{function}}}
-\AddToHook{env/variable/begin}{\def\footnote{\@@_fn_footnote:nn{variable}}}
-% \end{macrocode}
-%
-% \subsection{Documenting templates}
-%
-% \begin{macrocode}
-\newenvironment{TemplateInterfaceDescription}[1]
- {
- \subsection{The~object~type~`#1'}
- \begingroup
- \@beginparpenalty\@M
- \description
- \def\TemplateArgument##1##2{\item[Arg:~##1]##2\par}
- \def\TemplateSemantics
- {
- \enddescription\endgroup
- \subsubsection*{Semantics:}
- }
- }
- {
- \par\bigskip
- }
-% \end{macrocode}
-%
-% \begin{macrocode}
-\newenvironment{TemplateDescription}[2]
- {
- \subsection{The~template~`#2'~(object~type~#1)}
- \subsubsection*{Attributes:}
- \begingroup
- \@beginparpenalty\@M
- \description
- \def\TemplateKey##1##2##3##4
- {
- \item[##1~(##2)]##3%
- \ifx\TemplateKey##4\TemplateKey\else
-% \hskip0ptplus3em\penalty-500\hskip 0pt plus 1filll Default:~##4%
- \hfill\penalty500\hbox{}\hfill Default:~##4%
- \nobreak\hskip-\parfillskip\hskip0pt\relax
- \fi
- \par
- }
- \def\TemplateSemantics
- {
- \enddescription\endgroup
- \subsubsection*{Semantics~\&~Comments:}
- }
- }
- { \par \bigskip }
-% \end{macrocode}
-%
-% \begin{macrocode}
-\newenvironment{InstanceDescription}[4][xxxxxxxxxxxxxxx]
- {
- \subsubsection{The~instance~`#3'~(template~#2/#4)}
- \subsubsection*{Attribute~values:}
- \begingroup
- \@beginparpenalty\@M
- \def\InstanceKey##1##2{\>\textbf{##1}\>##2\\}
- \def\InstanceSemantics{\endtabbing\endgroup
- \vskip-30pt\vskip0pt
- \subsubsection*{Layout~description~\&~Comments:}}
- \tabbing
- xxxx\=#1\=\kill
- }
- { \par \bigskip }
-% \end{macrocode}
-%
-% \subsection{Inheriting doc}
-%
-% Code here is taken from \pkg{doc}, stripped of comments and translated
-% into \pkg{expl3} syntax. New features are added in various places.
-%
-% \begin{macro}
-% {\StopEventually, \MaybeStop, \Finale, \AlsoImplementation, \OnlyDescription}
-% \begin{variable}{\g_@@_finale_tl}
-% TODO: remove these four commands altogether, document that it is
-% better to use the \env{documentation} and \env{implementation}
-% environments.
-% \begin{macrocode}
-\DeclareDocumentCommand \OnlyDescription { }
- { \bool_gset_false:N \g_@@_typeset_implementation_bool }
-\DeclareDocumentCommand \AlsoImplementation { }
- { \bool_gset_true:N \g_@@_typeset_implementation_bool }
-\DeclareDocumentCommand \StopEventually { m }
- {
- \bool_if:NTF \g_@@_typeset_implementation_bool
- {
- \@bsphack
- \tl_gset:Nn \g_@@_finale_tl { #1 \check@checksum }
- \init@checksum
- \@esphack
- }
- { #1 \endinput }
- }
-% \end{macrocode}
-% We also need to support doc V3 \cs{MaybeStop} if it is around
-% (which may not be the case).
-% \begin{macrocode}
-\cs_if_exist:NT \MaybeStop
- { \RenewCommandCopy \MaybeStop \StopEventually }
-% \end{macrocode}
-%
-% \begin{macrocode}
-\DeclareDocumentCommand \Finale { }
- { \tl_use:N \g_@@_finale_tl }
-\tl_new:N \g_@@_finale_tl
-% \end{macrocode}
-% \end{variable}
-% \end{macro}
-%
-% \begin{macro}{\@@_input:n}
-% Inputting a file, with some setup: the module name should be empty
-% before the first |<@@=|\meta{module}|>| line in the file.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_input:n #1
- {
- \tl_gclear:N \g_@@_module_name_tl
- \MakePercentIgnore
- \input{#1}
- \MakePercentComment
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\DocInput}
-% Modified from \pkg{doc} to accept comma-list input (who has commas
-% in filenames?).
-% \begin{macrocode}
-\DeclareDocumentCommand \DocInput { m }
- {
- \clist_map_inline:nn {#1}
- {
- \clist_put_right:Nn \g_docinput_clist {##1}
- \@@_input:n {##1}
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\DocInputAgain}
-% Uses \cs{g_docinput_clist} to re-input whatever's already been
-% \tn{DocInput}-ed until now. May be used multiple times.
-% \begin{macrocode}
-\DeclareDocumentCommand \DocInputAgain { }
- { \clist_map_function:NN \g_docinput_clist \@@_input:n }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\DocInclude}
-% More or less exactly the same as \tn{include}, but uses
-% \tn{DocInput} on a \file{.fdd} or \file{.dtx} file (without file
-% extension), not \tn{input} on a \file{.tex} file.
-%
-% \begin{macrocode}
-\msg_new:nnn { l3doc } { missing-endgroup }
- {
- \str_if_eq:VnTF \@currenvir { document }
- {
- There~are~\int_use:N \tex_currentgrouplevel:D
- \c_space_tl unclosed~groups~in~#1.
- }
- {
- The~\@currenvir \c_space_tl environment~on~line~\@currenvline
- \c_space_tl doesn't~have~a~matching~\iow_char:N\\end{\@currenvir}.
- }
- }
-\NewDocumentCommand \DocInclude { m }
- {
- \relax\clearpage
- \docincludeaux
- \IfFileExists{#1.fdd}
- { \cs_set:Npn \currentfile{#1.fdd} }
- { \cs_set:Npn \currentfile{#1.dtx} }
- \int_compare:nNnTF \@auxout = \@partaux
- { \@latexerr{\string\include\space cannot~be~nested}\@eha }
- { \@docinclude {#1} }
- % check missing \endgroup, e.g., missing "\end{macro}" in time
- \int_compare:nNnF { \tex_currentgrouplevel:D } = { 0 }
- {
- \int_compare:nNnT { \tex_interactionmode:D } = { 0 }
- { \int_gset:Nn \tex_interactionmode:D { 1 } }
- \msg_fatal:nne { l3doc } { missing-endgroup } { \currentfile }
- }
- }
-% \end{macrocode}
-%
-% \begin{macrocode}
-\cs_gset:Npn \@docinclude #1
- {
- \clearpage
- \immediate\write\@mainaux{\string\@input{#1.aux}}
- \@tempswatrue
- \if@partsw
- \@tempswafalse
- \cs_set:Npe \@tempb {#1}
- \clist_map_inline:Nn \@partlist
- {
- \if_meaning:w \@tempa \@tempb
- \@tempswatrue
- \fi:
- }
- \fi
- \if@tempswa
- \cs_set_eq:NN \@auxout \@partaux
- \immediate\openout\@partaux #1.aux
- \immediate\write\@partaux{\relax}
- \cs_set_eq:NN \@ltxdoc@PrintIndex \PrintIndex
- \cs_set_eq:NN \PrintIndex \relax
- \cs_set_eq:NN \@ltxdoc@PrintChanges \PrintChanges
- \cs_set_eq:NN \PrintChanges \relax
- \cs_set_eq:NN \@ltxdoc@theglossary \theglossary
- \cs_set_eq:NN \@ltxdoc@endtheglossary \endtheglossary
- \part{\currentfile}
- {
- \cs_set_eq:NN \ttfamily\relax
- \cs_gset:Npe \filekey
- { \filekey,~ \thepart = { \ttfamily \currentfile } }
- }
- \DocInput{\currentfile}
- \cs_set_eq:NN \PrintIndex \@ltxdoc@PrintIndex
- \cs_set_eq:NN \PrintChanges \@ltxdoc@PrintChanges
- \cs_set_eq:NN \theglossary \@ltxdoc@theglossary
- \cs_set_eq:NN \endtheglossary \@ltxdoc@endtheglossary
- \clearpage
- \@writeckpt{#1}
- \immediate \closeout \@partaux
- \else
- \@nameuse{cp@#1}
- \fi
- \cs_set_eq:NN \@auxout \@mainaux
- }
-% \end{macrocode}
-%
-% Here, |MMMMI| (for page references) and |MMMMV| (for codeline
-% references) are interpreted by |makeindex| as an uppercase Roman
-% number pages, and should be large enough to avoid collisions with
-% other uses of uppercase Roman number pages. Two subtle differences
-% between \cs{@wrindex} and \cs{codeline@wrindex} are that the first
-% must be a delayed write because the page number is not known yet, and
-% it must close a group and finish some space-hack.
-%
-% We also provide versions for our use that refer
-% \begin{macrocode}
-\cs_gset_protected:Npn \@wrindex #1
- {
- \protected@write \@indexfile {}
- { \string \indexentry {#1} { MMMMI - \thepage } }
- \endgroup \@esphack
- }
-\cs_gset_protected:Npn \codeline@wrindex #1
- {
- \immediate\write\@indexfile
- {
- \string\indexentry{#1}
- { MMMMV - \filesep \int_use:N \c@CodelineNo }
- }
- }
-\tl_gclear:N \filesep
-\cs_new_protected:Npn \@@_index_page_hc:nn #1#2
- {
- \protected@write \@indexfile {}
- {
- \string \indexentry { #1 \encapchar hdpindex{#2} }
- { MMMMI - \thepage }
- }
- }
-\cs_new_protected:Npn \@@_index_codeline_hc:nn #1#2
- {
- \immediate\write\@indexfile
- {
- \string \indexentry { #1 \encapchar hdclindex{\the\c@HD@hypercount}{#2} }
- { MMMMV - \filesep \int_use:N \c@CodelineNo - MMMD - \the\c@HD@hypercount - M }
- }
- }
-% \end{macrocode}
-% We already have a single |HD.xx| target per code line. It would be
-% better to have a target |CL.\the\c@CodelineNo| per code line and
-% change |hdclindex{\the\c@HD@hypercount}| to a mechanism closer to
-% |hdpindex|, but we need to understand better the different types of
-% indexings, and there are subtleties with indexing |\{| and |\}|.
-% \end{macro}
-%
-% \begin{macro}{\docincludeaux}
-% \begin{macrocode}
-\cs_gset:Npn \docincludeaux
- {
- \tl_set:Nn \thepart { \alphalph { part } }
- \tl_set:Nn \filesep { \thepart - }
- \cs_set_eq:NN \filekey \use_none:n
- \tl_gput_right:Nn \index@prologue
- {
- \cs_gset:Npn \@oddfoot
- {
- \parbox { \textwidth }
- {
- \strut \footnotesize
- \raggedright { \bfseries File~Key: } ~ \filekey
- }
- }
- \cs_set_eq:NN \@evenfoot \@oddfoot
- }
- \cs_gset_eq:NN \docincludeaux \relax
- \cs_gset:Npn \@oddfoot
- {
- \cs_if_exist:cTF { ver @ \currentfile }
- { File~\thepart :~{\ttfamily\currentfile}~ }
- {
- \GetFileInfo{\currentfile}
- File~\thepart :~{\ttfamily\filename}~
- Date:~\ExplFileDate\ % space
- Version~\ExplFileVersion
- }
- \hfill \thepage
- }
- \cs_set_eq:NN \@evenfoot \@oddfoot
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{The \env{macrocode} environment}
-%
-% \begin{macro}{\xmacro@code, \@@_xmacro_code:n, \@@_xmacro_code:w}
-% Hook into the \texttt{macrocode} environment in a dirty way:
-% \tn{xmacro@code} is responsible for grabbing (and tokenizing) the
-% body of the environment. Redefine it to pass what it grabs to
-% \cs{@@_xmacro_code:n}. This new macro replaces all |@@| by the
-% appropriate module name. One exceptional case is the
-% |<@@=|\meta{module}|>| lines themselves, where |@@| should not be
-% modified. Actually, we search for such lines, to set the module
-% name automatically. We need to be careful: no |<@@=| should appear
-% as such in the code below since \pkg{l3doc} is also typeset using
-% this code.
-% At each |<@@=| found, replace the \meta{module} in the code behind
-% it, update the \meta{module}, and loop to check for further
-% occurrences of |<@@=|.
-% \begin{macrocode}
-\group_begin:
- \char_set_catcode_other:N \^^A
- \char_set_catcode_active:N \^^S
- \char_set_catcode_active:N \^^B
- \char_set_catcode_other:N \^^L
- \char_set_catcode_other:N \^^R
- \char_set_lccode:nn { `\^^A } { `\% }
- \char_set_lccode:nn { `\^^S } { `\ }
- \char_set_lccode:nn { `\^^B } { `\\ }
- \char_set_lccode:nn { `\^^L } { `\{ }
- \char_set_lccode:nn { `\^^R } { `\} }
- \tex_lowercase:D
- {
- \group_end:
- \cs_set_protected:Npn \xmacro@code
- #1 ^^A ^^S^^S^^S^^S ^^Bend ^^Lmacrocode^^R
- { \@@_xmacro_code:n {#1} \end{macrocode} }
- }
-\group_begin:
- \char_set_catcode_active:N \<
- \char_set_catcode_active:N \>
- \cs_new_protected:Npn \@@_xmacro_code:n #1
- {
- \tl_clear:N \l_@@_tmpa_tl
- \tl_if_in:nnTF {#1} { < @ @ = }
- { \@@_xmacro_code:w #1 < @ @ = \q_recursion_tail > \q_recursion_stop }
- {
- \tl_set:Nn \l_@@_tmpa_tl {#1}
- \@@_detect_internals:N \l_@@_tmpa_tl
- \@@_replace_at_at:N \l_@@_tmpa_tl
- \tl_use:N \l_@@_tmpa_tl
- }
- }
- \cs_new_protected:Npn \@@_xmacro_code:w #1 < @ @ = #2 >
- {
- % Add code before <@@@@=...>
- \tl_set:Nn \l_@@_tmpb_tl {#1}
- \@@_detect_internals:N \l_@@_tmpb_tl
- \@@_replace_at_at:N \l_@@_tmpb_tl
- \tl_put_right:NV \l_@@_tmpa_tl \l_@@_tmpb_tl
- % Check for \q_recursion_tail
- \quark_if_recursion_tail_stop_do:nn {#2}
- { \tl_use:N \l_@@_tmpa_tl }
- % Change module name and add <@@@@=#2> to typeset output
- \tl_gset:Nn \g_@@_module_name_tl {#2}
- \tl_put_right:Nn \l_@@_tmpa_tl { < \text { \verbatim@font @ @ = #2 } > }
- % Loop
- \@@_xmacro_code:w
- }
-\group_end:
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{At end document}
-%
-% Print all defined and documented macros/functions.
-%
-% \begin{macrocode}
-\iow_new:N \g_@@_func_iow
-% \end{macrocode}
-%
-% \begin{macrocode}
-\tl_new:N \l_@@_doc_def_tl
-\tl_new:N \l_@@_doc_undef_tl
-\tl_new:N \l_@@_undoc_def_tl
-\tl_const:Nn \c_@@_iow_separator_tl { ---- }
-\tl_const:Nn \c_@@_iow_midrule_tl { -- }
-% \end{macrocode}
-%
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_show_functions_defined:
- {
- \bool_lazy_and:nnT
- { \g_@@_typeset_implementation_bool } { \g_@@_checkfunc_bool }
- {
- \iow_term:e { \c_@@_iow_separator_tl \iow_newline: }
- \iow_open:Nn \g_@@_func_iow { \c_sys_jobname_str .cmds }
-
- \tl_clear:N \l_@@_doc_def_tl
- \tl_clear:N \l_@@_doc_undef_tl
- \tl_clear:N \l_@@_undoc_def_tl
- \seq_gremove_duplicates:N \g_doc_functions_seq
- \seq_gremove_duplicates:N \g_doc_macros_seq
- \seq_map_inline:Nn \g_doc_functions_seq
- {
- \seq_if_in:NnTF \g_doc_macros_seq {##1}
- {
- \tl_put_right:Ne \l_@@_doc_def_tl
- { \iow_newline: > ~ ##1 }
- }
- {
- \tl_put_right:Ne \l_@@_doc_undef_tl
- { \iow_newline: ! ~ ##1 }
- }
- }
- \seq_map_inline:Nn \g_doc_macros_seq
- {
- \seq_if_in:NnF \g_doc_functions_seq {##1}
- {
- \tl_put_right:Ne \l_@@_undoc_def_tl
- { \iow_newline: ? ~ ##1 }
- }
- }
- \@@_functions_typeout:nN
- {
- Functions~both~documented~and~defined: \iow_newline:
- (In~order~of~being~documented)
- }
- \l_@@_doc_def_tl
- \@@_functions_typeout:nN
- { Functions~documented~but~not~defined: }
- \l_@@_doc_undef_tl
- \@@_functions_typeout:nN
- { Functions~defined~but~not~documented: }
- \l_@@_undoc_def_tl
-
- \iow_close:N \g_@@_func_iow
- \iow_term:e { \c_@@_iow_separator_tl }
- }
- }
-\AtEndDocument { \@@_show_functions_defined: }
-% \end{macrocode}
-%
-% TODO: use \cs{iow_term:e}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_functions_typeout:nN #1#2
- {
- \tl_if_empty:NF #2
- {
- \iow_now:Ne \g_@@_func_iow
- {
- \c_@@_iow_midrule_tl \iow_newline:
- #1 \iow_newline:
- \c_@@_iow_midrule_tl
- #2
- }
- \tl_clear:N #2
- }
- }
-% \end{macrocode}
-%
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_show_not_tested:
- {
- \bool_if:NT \g_@@_checktest_bool
- {
- \tl_clear:N \l_@@_tmpa_tl
- \prop_if_empty:NF \g_@@_missing_tests_prop
- {
- \cs_set:Npn \@@_tmpa:w ##1##2
- {
- \iow_newline:
- \space\space\space\space \exp_not:n {##1}
- \clist_map_function:nN {##2} \@@_tmpb:w
- }
- \cs_set:Npn \@@_tmpb:w ##1
- {
- \iow_newline:
- \space\space\space\space\space\space * ~ ##1
- }
- \tl_put_right:Ne \l_@@_tmpa_tl
- {
- \iow_newline: \iow_newline:
- The~ following~ macro(s)~ have~ incomplete~ tests:
- \iow_newline:
- \prop_map_function:NN
- \g_@@_missing_tests_prop \@@_tmpa:w
- }
- }
- \seq_if_empty:NF \g_@@_not_tested_seq
- {
- \cs_set:Npn \@@_tmpa:w ##1
- { \clist_map_function:nN {##1} \@@_tmpb:w }
- \cs_set:Npn \@@_tmpb:w ##1
- {
- \iow_newline:
- \space\space\space\space ##1
- }
- \tl_put_right:Ne \l_@@_tmpa_tl
- {
- \iow_newline:
- \iow_newline:
- The~ following~ macro(s)~ do~ not~ have~ any~ tests:
- \iow_newline:
- \seq_map_function:NN
- \g_@@_not_tested_seq \@@_tmpa:w
- }
- }
- \tl_if_empty:NF \l_@@_tmpa_tl
- {
- \int_set:Nn \l_@@_tmpa_int { \tex_interactionmode:D }
- \errorstopmode
- \ClassError { l3doc } { \l_@@_tmpa_tl } { }
- \int_gset:Nn \tex_interactionmode:D { \l_@@_tmpa_int }
- }
- }
- }
-\AtEndDocument { \@@_show_not_tested: }
-% \end{macrocode}
-%
-% \subsection{Indexing}
-%
-% \subsubsection{Necessary patching}
-%
-% The following is useful to set up \pkg{hyperref} targets, for instance
-% for the purpose of indexing. Contrarily to \pkg{hypdoc} we do not try
-% to save pdf destinations, as this leads to too many \pdfTeX{} warnings
-% on early runs.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_target:
- {
- \mode_leave_vertical:
- \group_begin:
- \HD@savedestfalse \HD@target
- \group_end:
- }
-% \end{macrocode}
-% Force targets on every code line.
-% \begin{macrocode}
-\cs_set_nopar:Npe \theCodelineNo
- {
- \group_begin:
- \exp_not:N \HD@savedestfalse
- \exp_not:o \theCodelineNo
- \group_end:
- }
-% \end{macrocode}
-%
-% Inside the table of contents (and other similar lists introduced by
-% \cs{@starttoc}), we suppress indexing. This is because \cs{cmd},
-% \cs{cs}, or \cs{tn} appearing in titles only gets typeset in the
-% second run, and getting their indexing right would require even more
-% runs than we already need. Besides, it is not useful to index uses of
-% some command in the table of contents.
-% \begin{macrocode}
-\bool_new:N \l_@@_allow_indexing_bool
-\bool_set_true:N \l_@@_allow_indexing_bool
-\use:e
- {
- \exp_not:n { \cs_set_nopar:Npn \@starttoc #1 }
- {
- \group_begin:
- \bool_set_false:N \l_@@_allow_indexing_bool
- \exp_not:o { \@starttoc {#1} }
- \group_end:
- }
- }
-% \end{macrocode}
-%
-% \subsubsection{Userspace commands}
-%
-% Fix index (for now):
-% \begin{macrocode}
-\g@addto@macro \theindex { \MakePrivateLetters }
-\cs_gset:Npn \verbatimchar {&}
-% \end{macrocode}
-%
-% \begin{macrocode}
-\setcounter { IndexColumns } { 2 }
-% \end{macrocode}
-%
-% Set up the Index to use \tn{part}
-% \begin{macrocode}
-\IndexPrologue
- {
- \part*{Index}
- \markboth{Index}{Index}
- \addcontentsline{toc}{part}{Index}
- The~italic~numbers~denote~the~pages~where~the~
- corresponding~entry~is~described,~
- numbers~underlined~point~to~the~definition,~
- all~others~indicate~the~places~where~it~is~used.
- }
-% \end{macrocode}
-%
-% \begin{macro}{\SpecialIndex}
-% An attempt at affecting how commands which appear within the
-% \env{macrocode} environment are treated in the index.
-% \begin{macrocode}
-\cs_gset_protected:Npn \SpecialIndex #1
- {
- \@bsphack
- \@@_special_index:nn {#1} { }
- \@esphack
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-\msg_new:nnn { l3doc } { print-index-howto }
- {
- Generate~the~index~by~executing\\
- \iow_indent:n
- { makeindex~-s~gind.ist~-o~\c_sys_jobname_str.ind~\c_sys_jobname_str.idx }
- }
-\tl_gput_right:Nn \PrintIndex
- { \AtEndDocument { \msg_info:nn { l3doc } { print-index-howto } } }
-% \end{macrocode}
-%
-% \subsubsection{Internal index commands}
-%
-% \begin{macro}{\it@is@a}
-% The index of one-character commands within the \env{macrocode}
-% environment is produced using \tn{it@is@a} \meta{char}. Alter that
-% command.
-% \begin{macrocode}
-\cs_gset_protected:Npn \it@is@a #1
- {
- \use:e
- {
- \@@_special_index_module:nnnnN
- {#1}
- { \bslash #1 }
- { }
- { }
- \c_false_bool
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_special_index:nn}
-% ^^A TODO this override is somewhat a hack
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_special_index:nn #1#2
- {
- \@@_key_get:n {#1}
- \quark_if_no_value:NF \l_@@_override_module_tl
- { \tl_set_eq:NN \l_@@_index_module_tl \l_@@_override_module_tl }
- \@@_special_index_module:ooonN
- { \l_@@_index_key_tl }
- { \l_@@_index_macro_tl }
- { \l_@@_index_module_tl }
- {#2}
- \l_@@_index_internal_bool
- }
-\cs_generate_variant:Nn \@@_special_index:nn { o }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \@@_special_index_module:nnnnN,
-% \@@_special_index_module:ooonN,
-% \@@_special_index_aux:nnnnnn,
-% \@@_special_index_set:Nn,
-% }
-% Remotely based on Heiko's replacement to play nicely with
-% \pkg{hypdoc}. We use \tn{verb} or a \tn{verbatim@font} construction
-% depending on whether the number of tokens in |#2| is equal to its
-% number of characters: if it is not then that suggests that there is
-% a construct such as |\meta{...}|.
-% \begin{macrocode}
-\tl_new:N \l_@@_index_escaped_macro_tl
-\tl_new:N \l_@@_index_escaped_key_tl
-% \end{macrocode}
-%
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_special_index_module:nnnnN #1#2#3#4#5
-% \end{macrocode}
-% \begin{arguments}
-% \item key
-% \item macro
-% \item module
-% \item index `type' (\texttt{main}/\texttt{usage}/\emph{etc.})
-% \item boolean whether internal command
-% \end{arguments}
-% \begin{macrocode}
- {
- \use:e
- {
- \exp_not:n { \@@_special_index_aux:nnnnnn {#1} {#2} }
- \tl_if_empty:nTF {#3}
- { { } { } { } }
- {
- \str_if_eq:nnTF {#3} { TeX }
- {
- { TeX~and~LaTeX2e }
- { \string\TeX{}~and~\string\LaTeXe{} }
- }
- {
- {#3}
- { \string\pkg{#3} }
- }
- { \bool_if:NT #5 { ~internal } ~commands: }
- }
- }
- {#4}
- }
-% \end{macrocode}
-%
-% \begin{macrocode}
-\cs_generate_variant:Nn \@@_special_index_module:nnnnN { ooo }
-% \end{macrocode}
-%
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_special_index_aux:nnnnnn #1#2#3#4#5#6
-% \end{macrocode}
-% \begin{arguments}
-% \item key
-% \item macro
-% \item index subheading string
-% \item index subheading text
-% \item index subheading suffix (appended to both arg 3 and 4)
-% \item index `type' (\texttt{main}/\texttt{usage}/\emph{etc.})
-% \end{arguments}
-% \begin{macrocode}
- {
- \tl_set:Nn \l_@@_index_escaped_key_tl {#1}
- \@@_quote_special_char:N \l_@@_index_escaped_key_tl
- \@@_special_index_set:Nn \l_@@_index_escaped_macro_tl {#2}
- \str_if_eq:onTF { \@currenvir } { macrocode }
- { \@@_index_codeline_hc:nn }
- {
- \str_case:nnF {#6}
- {
- { main } { \@@_index_codeline_hc:nn }
- { usage } { \@@_index_page_hc:nn }
- }
- { \@@_target: \@@_index_page_hc:nn }
- }
- {
- \tl_if_empty:nF { #3 #4 #5 }
- { #3 #5 \actualchar #4 #5 \levelchar }
- \l_@@_index_escaped_key_tl
- \actualchar
- {
- \token_to_str:N \verbatim@font \c_space_tl
- \l_@@_index_escaped_macro_tl
- }
- }
- {#6}
- }
-% \end{macrocode}
-%
-% \begin{macro}{\hdpindex, \@@_old_hdpindex:nn, \hdclindex, \@@_old_hdclindex:nnn, \@@_hdindex:nn, \c_@@_active_minus_tl, \@@_hdindex_aux:nn, \@@_hdindex_aux:w}
-% Note that |#3| here could contain |MMMMI-| or |MMMMV-| more than once
-% if several successive code lines have been merged into a range
-% somehow. Note incidentally that the dash is active in some of our
-% sources, like |interface3.tex| or |source2e.tex|.
-% \begin{macrocode}
-\group_begin:
-\char_set_active_eq:NN - \scan_stop:
-\tl_const:Ne \c_@@_active_minus_tl { \char_generate:nn { `- } { 13 } }
-\group_end:
-\cs_new_eq:NN \@@_old_hdpindex:nn \hdpindex
-\cs_new_eq:NN \@@_old_hdclindex:nnn \hdclindex
-\cs_gset_protected:Npn \hdpindex #1
- { \@@_hdindex:nn { \@@_old_hdpindex:nn {#1} } }
-\cs_gset_protected:Npn \hdclindex #1#2
- { \@@_hdindex:nn { \@@_old_hdclindex:nnn {#1} {#2} } }
-\cs_new_protected:Npn \@@_hdindex:nn #1#2
- {
- \tl_set:Nn \l_@@_tmpa_tl {#2}
- \tl_replace_all:Nen \l_@@_tmpa_tl
- { \exp_not:V \c_@@_active_minus_tl \exp_not:V \c_@@_active_minus_tl }
- { -- }
- \seq_set_split:NnV \l_@@_tmpa_seq { -- } \l_@@_tmpa_tl
- \seq_set_map:NNn \l_@@_tmpa_seq \l_@@_tmpa_seq
- { \@@_hdindex_aux:nn {#1} {##1} }
- \seq_use:Nn \l_@@_tmpa_seq { -- }
- }
-\cs_new_protected:Npn \@@_hdindex_aux:nn #1#2
- {
- \tl_set:Nn \l_@@_tmpa_tl {#2}
- \tl_replace_all:Nnn \l_@@_tmpa_tl { MMMM } { \use_none:nn }
- \tl_if_in:NnT \l_@@_tmpa_tl { MMMD }
- {
- \tl_replace_all:Nen \l_@@_tmpa_tl
- { \exp_not:V \c_@@_active_minus_tl MMMD } { - MMMD }
- \tl_replace_all:Nnn \l_@@_tmpa_tl { - MMMD } { \@@_hdindex_aux:w }
- }
- \use:e { \exp_not:n {#1} { \exp_not:V \l_@@_tmpa_tl } }
- }
-\cs_new_protected:Npn \@@_hdindex_aux:w #1 M { }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_special_index_set:Nn #1#2
- {
- \__kernel_tl_set:Nx #1 { \tl_to_str:n {#2} }
- \@@_if_almost_str:nTF {#2}
- {
- \tl_replace_all:Nen #1 { \tl_to_str:n { __ } }
- {
- \verbatimchar
- \token_to_str:N \_ \token_to_str:N \_
- \token_to_str:N \verb * \verbatimchar
- }
- \exp_args:Ne \tl_map_inline:nn
- { \tl_to_str:N \verbatimchar \token_to_str:N _ }
- {
- \tl_replace_all:Nnn #1 {##1}
- {
- \verbatimchar \c_backslash_str ##1
- \token_to_str:N \verb * \verbatimchar
- }
- }
- \__kernel_tl_set:Nx #1
- {
- \token_to_str:N \verb * \verbatimchar
- #1 \verbatimchar
- }
- }
- {
- \tl_set:Nn #1 {#2}
- \tl_replace_all:NVn #1
- \c_backslash_str
- { \token_to_str:N \bslash \c_space_tl }
- }
- \@@_quote_special_char:N #1
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_quote_special_char:N}
-% Quote some special characters.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_quote_special_char:N #1
- {
- \tl_map_inline:nn { \quotechar \actualchar \encapchar \levelchar \bslash }
- {
- \tl_replace_all:Nen #1
- { \tl_to_str:N ##1 } { \quotechar \tl_to_str:N ##1 }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Finding sort-key and module}
-%
-% \begin{macro}{\@@_key_get:n}
-% Sets \cs{l_@@_index_macro_tl}, \cs{l_@@_index_key_tl}, and
-% \cs{l_@@_index_module_tl} from |#1|. The base function is stored by
-% \cs{@@_key_get_base:nN} in \cs{l_@@_index_macro_tl}, falling back to
-% |#1| if it contains markup or has no signature.
-%
-% The starting point for the \meta{key} is \cs{l_@@_index_key_tl} as a
-% string. If it the first character is a backslash, remove
-% it. Then recognize |expl| functions and variables by the presence
-% of |:| or~|_| and \TeX{}/\LaTeXe{} commands by the presence of~|@|.
-% For |expl| names, we call \cs{@@_key_func:} or \cs{@@_key_var:},
-% which are responsible for removing some characters and finding the
-% module name, while for \TeX{}/\LaTeXe{} commands the module name is
-% |TeX|, and others have an empty module name.
-% \begin{macrocode}
-\cs_new_protected:Npe \@@_key_get:n #1
- {
- \exp_not:N \@@_key_get_base:nN {#1} \exp_not:N \l_@@_index_macro_tl
- \__kernel_tl_set:Nx \exp_not:N \l_@@_index_key_tl
- { \exp_not:N \tl_to_str:N \exp_not:N \l_@@_index_macro_tl }
- \tl_clear:N \exp_not:N \l_@@_index_module_tl
- \tl_if_in:NnTF \exp_not:N \l_@@_index_key_tl { \tl_to_str:n { __ } }
- { \bool_set_true:N \exp_not:N \l_@@_index_internal_bool }
- { \bool_set_false:N \exp_not:N \l_@@_index_internal_bool }
- \exp_not:N \tl_if_head_eq_charcode:VNT
- \exp_not:N \l_@@_index_key_tl \c_backslash_str
- { \exp_not:N \@@_key_pop: }
- \tl_if_in:NnTF \exp_not:N \l_@@_index_key_tl { \token_to_str:N : }
- { \exp_not:N \@@_key_func: }
- {
- \tl_if_in:NnTF \exp_not:N \l_@@_index_key_tl { \token_to_str:N _ }
- { \exp_not:N \@@_key_var: }
- {
- \tl_if_in:NnT \exp_not:N \l_@@_index_key_tl { \token_to_str:N @ }
- { \tl_set:Nn \exp_not:N \l_@@_index_module_tl { TeX } }
- }
- }
- }
-\cs_new_protected:Npn \@@_key_pop:
- {
- \__kernel_tl_set:Nx \l_@@_index_key_tl
- { \tl_tail:N \l_@@_index_key_tl }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_key_trim_module:n, \@@_key_drop_underscores:}
-% Helper that removes from \cs{l_@@_index_module_tl} everything after
-% the first occurence of |#1|. Helper that removes any leading
-% underscore from \cs{l_@@_index_key_tl}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_key_trim_module:n #1
- {
- \cs_set:Npn \@@_tmpa:w ##1 #1 ##2 \q_stop
- { \exp_not:n {##1} }
- \__kernel_tl_set:Nx \l_@@_index_module_tl
- { \exp_after:wN \@@_tmpa:w \l_@@_index_module_tl #1 \q_stop }
- }
-\cs_new_protected:Npn \@@_key_drop_underscores:
- {
- \tl_if_head_eq_charcode:VNT \l_@@_index_key_tl _
- { \@@_key_pop: \@@_key_drop_underscores: }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_key_func:}
-% The function \cs{@@_key_func:} is used if there is a colon, so
-% either for usual \pkg{expl3} functions or for keys from
-% \pkg{l3keys}. After removing from the key a leading dot (for the
-% latter case), and any leading underscore, the module name is the
-% part before any colon or underscore.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_key_func:
- {
- \tl_if_head_eq_charcode:VNT \l_@@_index_key_tl .
- { \@@_key_pop: }
- \@@_key_drop_underscores:
- \tl_set_eq:NN \l_@@_index_module_tl \l_@@_index_key_tl
- \exp_args:No \@@_key_trim_module:n { \token_to_str:N : }
- \exp_args:No \@@_key_trim_module:n { \token_to_str:N _ }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_key_var:, \@@_key_get_module:}
-% The function \cs{@@_key_var:} covers cases with no~|:| but with~|_|,
-% typically variables but occasionally non-\pkg{expl3} functions such
-% as \Lua{} function with underscores. First test the second
-% character: if that is~|_| then assume we have a proper variable,
-% otherwise use the part before any underscore as the module name.
-% For variables, distinguish quarks and scan marks (starting with |q|
-% and~|s|), then drop the first letter (local/global/constant marker)
-% and underscores to improve the index sorting.
-% Then get the module as the first (underscore-delimited) \enquote{word}.
-% In the past, we distinguished according to how many such words there
-% were, to detect commands like \cs[no-index]{c_zero}, which should be
-% sorted as |int| variables, and \cs[no-index]{l_tmpa_dim}, which should
-% be sorted in the |dim| and not the |tmpa| module.
-% Now the first case has been deprecated for some time, while |tmpa| and
-% similar are special-cased through an explicit list given below.
-% The way it works is that if the module is in a list of special names
-% that are not valid modules, then we try the last word, and if that
-% also fails (for instance in the deprecated \cs[no-index]{c_one_hundred})
-% we empty the module completely.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_key_var:
- {
- \exp_args:Ne \tl_if_head_eq_charcode:nNTF
- { \exp_args:No \str_tail:n \l_@@_index_key_tl } _
- {
- \str_case:en { \str_head:N \l_@@_index_key_tl }
- {
- { q } { \tl_set:Nn \l_@@_index_module_tl { quark } }
- { s } { \tl_set:Nn \l_@@_index_module_tl { scan } }
- }
- \@@_key_pop:
- \@@_key_pop:
- \@@_key_drop_underscores:
- \tl_if_empty:NT \l_@@_index_module_tl
- {
- \seq_set_split:NoV \l_@@_tmpa_seq
- { \token_to_str:N _ } \l_@@_index_key_tl
- \seq_get_left:NN \l_@@_tmpa_seq \l_@@_index_module_tl
- \clist_if_in:NoT \g_@@_non_modules_clist \l_@@_index_module_tl
- {
- \seq_get_right:NN \l_@@_tmpa_seq \l_@@_index_module_tl
- \clist_if_in:NoT \g_@@_non_modules_clist \l_@@_index_module_tl
- {
- \tl_clear:N \l_@@_index_module_tl
- }
- }
- }
- }
- {
- \tl_set_eq:NN \l_@@_index_module_tl \l_@@_index_key_tl
- \exp_args:No \@@_key_trim_module:n { \token_to_str:N _ }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\g_@@_non_modules_clist}
-% List of names that appear as the first word in an \pkg{expl3}
-% command, but that are not true modules, so that they should be
-% sorted differently in an index.
-% \begin{macrocode}
-\clist_new:N \g_@@_non_modules_clist
-\clist_gset:Ne \g_@@_non_modules_clist
- {
- \tl_to_str:n
- {
-
- alignment, ampersand, atsign, backslash, catcode, circumflex,
- code, colon, document, dollar, e, empty, false, hash, inf,
- initex, job, left, log, math, mark, max, minus, nan, nil, no,
- novalue, other, parameter, percent, pi, recursion, right, space,
- stop, term, tilde, tmpa, tmpb, true, underscore, zero, one, two,
- three, four, five, six, seven, eight, nine, ten, eleven, twelve,
- thirteen, fourteen, fifteen, sixteen, thirty, hundred
-
- }
- }
-% \end{macrocode}
-% \end{variable}
-%
-% \subsection{Change history}
-%
-% Set the change history to use \tn{part}.
-% Allow control names to be hyphenated in here\dots
-% \begin{macrocode}
-\GlossaryPrologue
- {
- \part*{Change~History}
- {\GlossaryParms\ttfamily\hyphenchar\font=`\-}
- \markboth{Change~History}{Change~History}
- \addcontentsline{toc}{part}{Change~History}
- }
-% \end{macrocode}
-%
-% \begin{macrocode}
-\msg_new:nnn { l3doc } { print-changes-howto }
- {
- Generate~the~change~list~by~executing\\
- \iow_indent:n
- { makeindex~-s~gglo.ist~-o~\c_sys_jobname_str.gls~\c_sys_jobname_str.glo }
- }
-\tl_gput_right:Nn \PrintChanges
- { \AtEndDocument { \msg_info:nn { l3doc } { print-changes-howto } } }
-% \end{macrocode}
-%
-%^^A The standard \changes command modified slightly to better cope with
-%^^A this multiple file document.
-%^^A\def\changes@#1#2#3{%
-%^^A \let\protect\@unexpandable@protect
-%^^A \edef\@tempa{\noexpand\glossary{#2\space\currentfile\space#1\levelchar
-%^^A \ifx\saved@macroname\@empty
-%^^A \space
-%^^A \actualchar
-%^^A \generalname
-%^^A \else
-%^^A \expandafter\@gobble
-%^^A \saved@macroname
-%^^A \actualchar
-%^^A \string\verb\quotechar*%
-%^^A \verbatimchar\saved@macroname
-%^^A \verbatimchar
-%^^A \fi
-%^^A :\levelchar #3}}%
-%^^A \@tempa\endgroup\@esphack}
-%
-% \subsection{Default configuration}
-%
-% \begin{macrocode}
-\bool_if:NTF \g_@@_typeset_implementation_bool
- {
- \RecordChanges
- \CodelineIndex
- \EnableCrossrefs
- \AlsoImplementation
- }
- {
- \CodelineNumbered
- \DisableCrossrefs
- \OnlyDescription
- }
-% \end{macrocode}
-%
-%
-% \begin{macrocode}
-%</class>
-% \end{macrocode}
-%
-% \subsection{Internal macros for \LaTeX3 sources}
-%
-% These definitions are only used by the \LaTeX3 documentation; they are
-% not necessary for third-party users of \cls{l3doc}. In time this will
-% be broken into a separate package that is specifically loaded in the
-% various \pkg{expl3} modules, \emph{etc.}
-%
-% \begin{macrocode}
-%<*cfg>
-% \end{macrocode}
-%
-% The Guilty Parties.
-% \begin{macrocode}
-\tl_const:Nn \Team
- {
- The~\LaTeX3~Project\thanks
- {\url{https://www.latex-project.org/latex3/}}
- }
-% \end{macrocode}
-%
-% \begin{macrocode}
-\NewDocumentCommand{\ExplMakeTitle}{mm}
- {
- \title
- {
- The~\pkg{#1}~package \\ #2
- }
- \author
- {
- The~\LaTeX3~Project\thanks{E-mail:~
- \href{mailto:latex-l@listserv.uni-heidelberg.de}
- {latex-l@listserv.uni-heidelberg.de}}
- }
- \date{Released~\ExplFileDate}
- \maketitle
- }
-% \end{macrocode}
-%
-% \subsection{Math extras}
-%
-% For \pkg{l3fp}.
-%
-% \begin{macrocode}
-\AtBeginDocument
- {
- \clist_map_inline:nn
- {
- asin, acos, atan, acot,
- asinh, acosh, atanh, acoth, round, floor, ceil
- }
- { \exp_args:Nc \DeclareMathOperator{#1}{#1} }
- }
-% \end{macrocode}
-%
-% \begin{macro}{\nan}
-% \begin{macrocode}
-\NewDocumentCommand { \nan } { } { \text { \texttt { nan } } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</cfg>
-% \end{macrocode}
-%
-%
-% \subsection{Makeindex configuration}
-%
-% \begin{macrocode}
-%<*docist>
-% \end{macrocode}
-%
-% The makeindex style \file{l3doc.ist} is used in place of the usual
-% \file{gind.ist} to ensure that |I| is used in the sequence |I J K| not
-% |I II II|, which would be the default makeindex behaviour.
-%
-% Will: Do we need this?
-%
-% Frank: at the moment we do not distribute or generate this file.
-% \file{gind.ist} is used instead.
-%
-% \begin{macro}[do-not-index={\\,\n}]{}
-% \begin{macrocode}
-actual '='
-quote '!'
-level '>'
-preamble
-"\n \\begin{theindex} \n \\makeatletter\\scan@allowedfalse\n"
-postamble
-"\n\n \\end{theindex}\n"
-item_x1 "\\efill \n \\subitem "
-item_x2 "\\efill \n \\subsubitem "
-delim_0 "\\pfill "
-delim_1 "\\pfill "
-delim_2 "\\pfill "
-% The next lines will produce some warnings when
-% running Makeindex as they try to cover two different
-% versions of the program:
-lethead_prefix "{\\bfseries\\hfil "
-lethead_suffix "\\hfil}\\nopagebreak\n"
-lethead_flag 1
-heading_prefix "{\\bfseries\\hfil "
-heading_suffix "\\hfil}\\nopagebreak\n"
-headings_flag 1
-
-% and just for source3:
-% Remove R so I is treated in sequence I J K not I II III
-page_precedence "rnaA"
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</docist>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3doc.pdf b/macros/latex/contrib/l3kernel/l3doc.pdf
deleted file mode 100644
index 2f85329fdc..0000000000
--- a/macros/latex/contrib/l3kernel/l3doc.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3docstrip.dtx b/macros/latex/contrib/l3kernel/l3docstrip.dtx
deleted file mode 100644
index c973d593c5..0000000000
--- a/macros/latex/contrib/l3kernel/l3docstrip.dtx
+++ /dev/null
@@ -1,96 +0,0 @@
-% \iffalse
-%
-%% File l3dosctrip.dtx
-%
-% Copyright (C) 2012-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver|program>
-%</driver|program>
-%<*driver>
-% The same approach as used in \textsf{DocStrip}: if \cs{documentclass}
-% is undefined then skip the driver, allowing the file to be used to extract
-% \texttt{l3docstrip.tex} from \texttt{l3docstrip.dtx} directly. This works
-% as the \cs{fi} is only seen if \LaTeX{} is not in use. The odd \cs{jobname}
-% business allows the extraction to work with \LaTeX{} provided an appropriate
-% \texttt{.ins} file is set up.
-%<*gobble>
-\ifx\jobname\relax\let\documentclass\undefined\fi
-\ifx\documentclass\undefined
-\else \csname fi\endcsname
-%</gobble>
- \def\filename{docstrip.dtx}
- \documentclass[full,kernel]{l3doc}
- \ExplSyntaxOn
- \cs_set_eq:NN \__codedoc_replace_at_at:N \use_none:n
- \ExplSyntaxOff
- \begin{document}
- \DocInput{\jobname.dtx}
- \end{document}
-%<*gobble>
-\fi
-%</gobble>
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3docstrip} module\\ Code extraction and manipulation^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% This is a stub file to allow extraction of \texttt{l3docstrip}: all
-% functionality has been moved to the main DocStrip program.
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3docstrip} implementation}
-%
-% \begin{macrocode}
-%<*program>
-% \end{macrocode}
-%
-% Simply input DocStrip.
-% \begin{macrocode}
-\input docstrip %
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</program>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3docstrip.pdf b/macros/latex/contrib/l3kernel/l3docstrip.pdf
deleted file mode 100644
index f2e611b2c9..0000000000
--- a/macros/latex/contrib/l3kernel/l3docstrip.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3expan.dtx b/macros/latex/contrib/l3kernel/l3expan.dtx
deleted file mode 100644
index 7e507b7598..0000000000
--- a/macros/latex/contrib/l3kernel/l3expan.dtx
+++ /dev/null
@@ -1,2398 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3expan.dtx
-%
-% Copyright (C) 1990-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3expan} module\\ Argument expansion^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% This module provides generic methods for expanding \TeX{} arguments in a
-% systematic manner. The functions in this module all have prefix |exp|.
-%
-% Not all possible variations are implemented for every base
-% function. Instead only those that are used within the \LaTeX3 kernel
-% or otherwise seem to be of general interest are implemented.
-% Consult the module description to find out which functions are
-% actually defined. The next section explains how to define missing
-% variants.
-%
-% \section{Defining new variants}
-% \label{sec:l3expan:defining-variants}
-%
-% The definition of variant forms for base functions may be necessary
-% when writing new functions or when applying a kernel function in a
-% situation that we haven't thought of before.
-%
-% Internally preprocessing of arguments is done with functions of the form
-% \cs[no-index]{exp_\ldots{}}. They all look alike, an example would be
-% \cs{exp_args:NNo}. This function has three arguments, the first and the
-% second are a single tokens, while the third argument should be given
-% in braces. Applying \cs{exp_args:NNo} expands the content of third
-% argument once before any expansion of the first and second arguments.
-% If \cs{seq_gpush:No} was not defined it could be coded in the following way:
-% \begin{verbatim}
-% \exp_args:NNo \seq_gpush:Nn
-% \g_file_name_stack
-% { \l_tmpa_tl }
-% \end{verbatim}
-% In other words, the first argument to \cs{exp_args:NNo} is the base
-% function and the other arguments are preprocessed and then passed to
-% this base function. In the example the first argument to the base
-% function should be a single token which is left unchanged while the
-% second argument is expanded once. From this example we can also see
-% how the variants are defined. They just expand into the appropriate
-% |\exp_| function followed by the desired base function, \emph{e.g.}
-% \begin{quote}
-% |\cs_generate_variant:Nn \seq_gpush:Nn { No } |
-% \end{quote}
-% results in the definition of |\seq_gpush:No|
-% \begin{quote}
-% |\cs_new:Npn \seq_gpush:No { \exp_args:NNo \seq_gpush:Nn }|
-% \end{quote}
-% Providing variants in this way in style files is safe as the
-% \cs{cs_generate_variant:Nn} function will only create new definitions if
-% there is not already one available. Therefore adding
-% such definition to later releases of the kernel will not make such
-% style files obsolete.
-%
-% The steps above may be automated by using the function
-% \cs{cs_generate_variant:Nn}, described next.
-%
-% \section{Methods for defining variants}
-% \label{sec:l3expan:variants-method}
-%
-% We recall the set of available argument specifiers.
-% \begin{itemize}
-% \item |N|~is used for single-token arguments while |c|~constructs a
-% control sequence from its name and passes it to a parent function as
-% an |N|-type argument.
-% \item Many argument types extract or expand some tokens and provide it
-% as an |n|-type argument, namely a braced multiple-token argument:
-% |V|~extracts the value of a variable, |v|~extracts the value from
-% the name of a variable, |n|~uses the argument as it is, |o|~expands
-% once, |f|~expands fully the front of the token list, |e| and
-% |x|~expand fully all tokens (differences are explained later).
-% \item A few odd argument types remain: |T|~and |F|~for conditional
-% processing, otherwise identical to |n|-type arguments,
-% |p|~for the parameter text
-% in definitions, |w|~for arguments with a specific syntax, and |D|~to
-% denote primitives that should not be used directly.
-% \end{itemize}
-%
-% \begin{function}[updated = 2017-11-28]
-% {\cs_generate_variant:Nn, \cs_generate_variant:cn}
-% \begin{syntax}
-% \cs{cs_generate_variant:Nn} \meta{parent control sequence} \Arg{variant argument specifiers}
-% \end{syntax}
-% This function is used to define argument-specifier variants of the
-% \meta{parent control sequence} for \LaTeX3 code-level macros. The
-% \meta{parent control sequence} is first separated into the
-% \meta{base name} and \meta{original argument specifier}. The
-% comma-separated list of \meta{variant argument specifiers} is
-% then used to define variants of the
-% \meta{original argument specifier} if these are not already
-% defined; entries which correspond to existing functions are silently
-% ingored. For each \meta{variant} given, a function is created
-% that expands its arguments as detailed and passes them
-% to the \meta{parent control sequence}. So for example
-% \begin{verbatim}
-% \cs_set:Npn \foo:Nn #1#2 { code here }
-% \cs_generate_variant:Nn \foo:Nn { c }
-% \end{verbatim}
-% creates a new function |\foo:cn| which expands its first
-% argument into a control sequence name and passes the result to
-% |\foo:Nn|. Similarly
-% \begin{verbatim}
-% \cs_generate_variant:Nn \foo:Nn { NV , cV }
-% \end{verbatim}
-% generates the functions |\foo:NV| and |\foo:cV| in the same
-% way. The \cs{cs_generate_variant:Nn} function should only be applied if
-% the \meta{parent control sequence} is already defined. (This is only
-% enforced if debugging support \texttt{check-declarations} is enabled.)
-% If the \meta{parent
-% control sequence} is protected or if the \meta{variant} involves any
-% |x|~argument, then the \meta{variant control sequence} is also
-% protected. The \meta{variant} is created globally, as is any
-% \cs[no-index]{exp_args:N\meta{variant}} function needed to carry out the
-% expansion. There is no need to re-apply \cs{cs_generate_variant:Nn} after
-% changing the definition of the parent function: the variant will always
-% use the current definition of the parent. Providing variants repeatedly is
-% safe as \cs{cs_generate_variant:Nn} will only create new definitions if
-% there is not already one available.
-%
-% Only |n|~and |N| arguments can be changed to other types. The only
-% allowed changes are
-% \begin{itemize}
-% \item |c|~variant of an |N|~parent;
-% \item |o|, |V|, |v|, |f|, |e|, or~|x| variant of an |n|~parent;
-% \item |N|, |n|, |T|, |F|, or |p| argument unchanged.
-% \end{itemize}
-% This means the \meta{parent} of a \meta{variant} form is always
-% unambiguous, even in cases where both an |n|-type parent and an
-% |N|-type parent exist, such as for \cs{tl_count:n} and
-% \cs{tl_count:N}.
-%
-% When creating variants for conditional functions,
-% \cs{prg_generate_conditional_variant:Nnn} provides a convenient way
-% of handling the related function set.
-%
-% For backward compatibility it is currently possible to make |n|,
-% |o|, |V|, |v|, |f|, |e|, or |x|-type variants of an |N|-type argument or
-% |N| or |c|-type variants of an |n|-type argument. Both are
-% deprecated. The first because passing more than one token to an
-% |N|-type argument will typically break the parent function's code.
-% The second because programmers who use that most often want to
-% access the value of a variable given its name, hence should use a
-% |V|-type or |v|-type variant instead of |c|-type. In those cases,
-% using the lower-level \cs{exp_args:No} or \cs{exp_args:Nc}
-% functions explicitly is preferred to defining confusing variants.
-% \end{function}
-%
-% \begin{function}[added = 2018-04-04, updated = 2019-02-08]
-% {\exp_args_generate:n}
-% \begin{syntax}
-% \cs{exp_args_generate:n} \Arg{variant argument specifiers}
-% \end{syntax}
-% Defines \cs[no-index]{exp_args:N\meta{variant}} functions for each
-% \meta{variant} given in the comma list \Arg{variant argument
-% specifiers}. Each \meta{variant} should consist of the letters |N|,
-% |c|, |n|, |V|, |v|, |o|, |f|, |e|, |x|, |p| and the resulting function is
-% protected if the letter |x| appears in the \meta{variant}. This is
-% only useful for cases where \cs{cs_generate_variant:Nn} is not
-% applicable.
-% \end{function}
-%
-% \section{Introducing the variants}
-%
-% The |V| type returns the value of a register, which can be one of
-% |tl|, |clist|, |int|, |skip|, |dim|, |muskip|, or built-in \TeX{}
-% registers. The |v| type is the same except it first creates a
-% control sequence out of its argument before returning the
-% value.
-%
-% In general, the programmer should not need to be concerned with
-% expansion control. When simply using the content of a variable,
-% functions with a |V| specifier should be used. For those referred to by
-% (cs)name, the |v| specifier is available for the same purpose. Only when
-% specific expansion steps are needed, such as when using delimited
-% arguments, should the lower-level functions with |o| specifiers be employed.
-%
-% The |e| type expands all tokens fully, starting from the first. More
-% precisely the expansion is identical to that of \TeX{}'s \tn{message}
-% (in particular |#| needs not be doubled). It relies on the
-% primitive \tn{expanded} hence is fast.
-%
-% The |x| type expands all tokens fully, starting from the first. In
-% contrast to |e|, all macro parameter characters |#| must be doubled,
-% and omitting this leads to low-level errors. In addition this type of
-% expansion is not expandable, namely functions that have |x| in their
-% signature do not themselves expand when appearing inside |e| or |x|
-% expansion.
-%
-% The |f| type is so special that it deserves an example. It is
-% typically used in contexts where only expandable commands are allowed.
-% Then |x|-expansion cannot be used, and |f|-expansion provides an
-% alternative that expands the front of the token list
-% as much as can be done in such contexts. For
-% instance, say that we want to evaluate the integer expression $3 + 4$
-% and pass the result $7$ as an argument to an expandable function
-% |\example:n|. For this, one should define a variant using
-% \cs{cs_generate_variant:Nn} |\example:n| |{| |f| |}|, then do
-% \begin{quote}
-% |\example:f { \int_eval:n { 3 + 4 } }|
-% \end{quote}
-% Note that |x|-expansion would also expand \cs{int_eval:n} fully to its
-% result~$7$, but the variant |\example:x| cannot be expandable. Note
-% also that |o|-expansion would not expand \cs{int_eval:n} fully to its
-% result since that function requires several expansions. Besides the
-% fact that |x|-expansion is protected rather than expandable, another
-% difference between |f|-expansion and |x|-expansion is that
-% |f|-expansion expands tokens from the beginning and stops as soon as a
-% non-expandable token is encountered, while |x|-expansion continues
-% expanding further tokens. Thus, for instance
-% \begin{quote}
-% |\example:f { \int_eval:n { 1 + 2 } , \int_eval:n { 3 + 4 } }|
-% \end{quote}
-% results in the call
-% \begin{quote}
-% |\example:n { 3 , \int_eval:n { 3 + 4 } }|
-% \end{quote}
-% while using |\example:x| or |\example:e| instead results in
-% \begin{quote}
-% |\example:n { 3 , 7 }|
-% \end{quote}
-% at the cost of being protected for |x|-type.
-% If you use |f| type expansion in conditional processing then
-% you should stick to using |TF| type functions only as the expansion
-% does not finish any |\if... \fi:| itself!
-%
-% It is important to note that both \texttt{f}- and \texttt{o}-type
-% expansion are concerned with the expansion of tokens from left to
-% right in their arguments. In particular, \texttt{o}-type expansion
-% applies to the first \emph{token} in the argument it receives: it
-% is conceptually similar to
-% \begin{verbatim}
-% \exp_after:wN <base function> \exp_after:wN { <argument> }
-% \end{verbatim}
-% At the same time, \texttt{f}-type expansion stops at the \emph{first}
-% non-expandable token. This means for example that both
-% \begin{verbatim}
-% \tl_set:No \l_tmpa_tl { { \g_tmpb_tl } }
-% \end{verbatim}
-% and
-% \begin{verbatim}
-% \tl_set:Nf \l_tmpa_tl { { \g_tmpb_tl } }
-% \end{verbatim}
-% leave |\g_tmpb_tl| unchanged: |{| is the first token in the
-% argument and is non-expandable.
-%
-% It is usually best to keep the following in mind when using variant
-% forms.
-% \begin{itemize}
-% \item
-% Variants with |x|-type arguments (that are fully expanded before
-% being passed to the |n|-type base function) are never expandable
-% even when the base function is. Such variants cannot work
-% correctly in arguments that are themselves subject to expansion.
-% Consider using |f| or |e| expansion.
-% \item
-% In contrast, |e|~expansion (full expansion, almost like~|x| except
-% for the treatment of~|#|) does not prevent variants from being
-% expandable (if the base function is).
-% \item
-% Finally |f|~expansion only expands the front of the token list,
-% stopping at the first non-expandable token. This may fail to
-% fully expand the argument.
-% \end{itemize}
-%
-% When speed is essential (for functions that do very little work and
-% whose variants are used numerous times in a document) the following
-% considerations apply because the speed of internal functions that
-% expand the arguments of a base function depend on what needs doing
-% with each argument and where this happens in the list of arguments:
-% \begin{itemize}
-% \item for fastest processing any |c|-type arguments should come first
-% followed by all other modified arguments;
-% \item unchanged |N|-type args that appear before modified ones have
-% a small performance hit;
-% \item unchanged |n|-type args that appear before modified ones have
-% a relative larger performance hit.
-% \end{itemize}
-%
-% \section{Manipulating the first argument}
-%
-% These functions are described in detail: expansion of multiple tokens follows
-% the same rules but is described in a shorter fashion.
-%
-% \begin{function}[EXP]{\exp_args:Nc, \exp_args:cc}
-% \begin{syntax}
-% \cs{exp_args:Nc} \meta{function} \Arg{tokens}
-% \end{syntax}
-% This function absorbs two arguments (the \meta{function} name and
-% the \meta{tokens}). The \meta{tokens} are expanded until only characters
-% remain, and are then turned into a control sequence.
-% The result is inserted into the input stream \emph{after} reinsertion
-% of the \meta{function}. Thus the \meta{function} may take more than
-% one argument: all others are left unchanged.
-%
-% The |:cc| variant constructs the \meta{function} name in the same
-% manner as described for the \meta{tokens}.
-% \end{function}
-%
-% \begin{function}[EXP]{\exp_args:No}
-% \begin{syntax}
-% \cs{exp_args:No} \meta{function} \Arg{tokens} ...
-% \end{syntax}
-% This function absorbs two arguments (the \meta{function} name and
-% the \meta{tokens}). The \meta{tokens} are expanded once, and the result
-% is inserted in braces into the input stream \emph{after} reinsertion
-% of the \meta{function}. Thus the \meta{function} may take more than
-% one argument: all others are left unchanged.
-% \end{function}
-%
-% \begin{function}[EXP]{\exp_args:NV}
-% \begin{syntax}
-% \cs{exp_args:NV} \meta{function} \meta{variable}
-% \end{syntax}
-% This function absorbs two arguments (the names of the \meta{function} and
-% the \meta{variable}). The content of the \meta{variable} are recovered
-% and placed inside braces into the input stream \emph{after} reinsertion
-% of the \meta{function}. Thus the \meta{function} may take more than
-% one argument: all others are left unchanged.
-% \end{function}
-%
-% \begin{function}[EXP]{\exp_args:Nv}
-% \begin{syntax}
-% \cs{exp_args:Nv} \meta{function} \Arg{tokens}
-% \end{syntax}
-% This function absorbs two arguments (the \meta{function} name and
-% the \meta{tokens}). The \meta{tokens} are expanded until only characters
-% remain, and are then turned into a control sequence.
-% This control sequence should
-% be the name of a \meta{variable}. The content of the \meta{variable} are
-% recovered and placed inside braces into the input stream \emph{after}
-% reinsertion of the \meta{function}. Thus the \meta{function} may take more
-% than one argument: all others are left unchanged.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2018-05-15]{\exp_args:Ne}
-% \begin{syntax}
-% \cs{exp_args:Ne} \meta{function} \Arg{tokens}
-% \end{syntax}
-% This function absorbs two arguments (the \meta{function} name and
-% the \meta{tokens}) and exhaustively expands the \meta{tokens}.
-% The result is inserted in braces into the input stream
-% \emph{after} reinsertion of the \meta{function}.
-% Thus the \meta{function} may take more
-% than one argument: all others are left unchanged.
-% \end{function}
-%
-% \begin{function}[EXP]{\exp_args:Nf}
-% \begin{syntax}
-% \cs{exp_args:Nf} \meta{function} \Arg{tokens}
-% \end{syntax}
-% This function absorbs two arguments (the \meta{function} name and
-% the \meta{tokens}). The \meta{tokens} are fully expanded until the
-% first non-expandable token is found (if that is a space it is
-% removed), and the result
-% is inserted in braces into the input stream \emph{after} reinsertion
-% of the \meta{function}. Thus the \meta{function} may take more than
-% one argument: all others are left unchanged.
-% \end{function}
-%
-% \begin{function}{\exp_args:Nx}
-% \begin{syntax}
-% \cs{exp_args:Nx} \meta{function} \Arg{tokens}
-% \end{syntax}
-% This function absorbs two arguments (the \meta{function} name and
-% the \meta{tokens}) and exhaustively expands the \meta{tokens}.
-% The result is inserted in braces into the input stream
-% \emph{after} reinsertion of the \meta{function}.
-% Thus the \meta{function} may take more
-% than one argument: all others are left unchanged.
-% \end{function}
-%
-% \section{Manipulating two arguments}
-%
-% \begin{function}[EXP, updated = 2018-05-15]
-% {
-% \exp_args:NNc,
-% \exp_args:NNo,
-% \exp_args:NNV,
-% \exp_args:NNv,
-% \exp_args:NNe,
-% \exp_args:NNf,
-% \exp_args:Ncc,
-% \exp_args:Nco,
-% \exp_args:NcV,
-% \exp_args:Ncv,
-% \exp_args:Ncf,
-% \exp_args:NVV
-% }
-% \begin{syntax}
-% \cs{exp_args:NNc} \meta{token_1} \meta{token_2} \Arg{tokens}
-% \end{syntax}
-% These optimized functions absorb three arguments and expand the second and
-% third as detailed by their argument specifier. The first argument
-% of the function is then the next item on the input stream, followed
-% by the expansion of the second and third arguments.
-% \end{function}
-%
-% \begin{function}[EXP, updated = 2018-05-15]
-% {
-% \exp_args:Nnc,
-% \exp_args:Nno,
-% \exp_args:NnV,
-% \exp_args:Nnv,
-% \exp_args:Nne,
-% \exp_args:Nnf,
-% \exp_args:Noc,
-% \exp_args:Noo,
-% \exp_args:Nof,
-% \exp_args:NVo,
-% \exp_args:Nfo,
-% \exp_args:Nff,
-% \exp_args:Nee,
-% }
-% \begin{syntax}
-% \cs{exp_args:Noo} \meta{token} \Arg{tokens_1} \Arg{tokens_2}
-% \end{syntax}
-% These functions absorb three arguments and expand the second and
-% third as detailed by their argument specifier. The first argument
-% of the function is then the next item on the input stream, followed
-% by the expansion of the second and third arguments.
-% \end{function}
-%
-% \begin{function}
-% {
-% \exp_args:NNx,
-% \exp_args:Ncx,
-% \exp_args:Nnx,
-% \exp_args:Nox,
-% \exp_args:Nxo,
-% \exp_args:Nxx
-% }
-% \begin{syntax}
-% \cs{exp_args:NNx} \meta{token_1} \meta{token_2} \Arg{tokens}
-% \end{syntax}
-% These functions absorb three arguments and expand the second and
-% third as detailed by their argument specifier. The first argument
-% of the function is then the next item on the input stream, followed
-% by the expansion of the second and third arguments. These functions
-% are not expandable due to their |x|-type argument.
-% \end{function}
-%
-% \section{Manipulating three arguments}
-%
-% \begin{function}[EXP]
-% {
-% \exp_args:NNNo,
-% \exp_args:NNNV,
-% \exp_args:NNNv,
-% \exp_args:NNNe,
-% \exp_args:Nccc,
-% \exp_args:NcNc,
-% \exp_args:NcNo,
-% \exp_args:Ncco
-% }
-% \begin{syntax}
-% \cs{exp_args:NNNo} \meta{token_1} \meta{token_2} \meta{token_3} \Arg{tokens}
-% \end{syntax}
-% These optimized functions absorb four arguments and expand the second, third
-% and fourth as detailed by their argument specifier. The first
-% argument of the function is then the next item on the input stream,
-% followed by the expansion of the second argument, \emph{etc}.
-% \end{function}
-%
-% \begin{function}[EXP]
-% {
-% \exp_args:NNcf,
-% \exp_args:NNno,
-% \exp_args:NNnV,
-% \exp_args:NNoo,
-% \exp_args:NNVV,
-% \exp_args:Ncno,
-% \exp_args:NcnV,
-% \exp_args:Ncoo,
-% \exp_args:NcVV,
-% \exp_args:Nnnc,
-% \exp_args:Nnno,
-% \exp_args:Nnnf,
-% \exp_args:Nnff,
-% \exp_args:Nooo,
-% \exp_args:Noof,
-% \exp_args:Nffo,
-% \exp_args:Neee
-% }
-% \begin{syntax}
-% \cs{exp_args:NNoo} \meta{token_1} \meta{token_2} \Arg{token_3} \Arg{tokens}
-% \end{syntax}
-% These functions absorb four arguments and expand the second, third
-% and fourth as detailed by their argument specifier. The first
-% argument of the function is then the next item on the input stream,
-% followed by the expansion of the second argument, \emph{etc}.
-% \end{function}
-%
-% \begin{function}[added = 2015-08-12]
-% {
-% \exp_args:NNNx,
-% \exp_args:NNnx,
-% \exp_args:NNox,
-% \exp_args:Nccx,
-% \exp_args:Ncnx,
-% \exp_args:Nnnx,
-% \exp_args:Nnox,
-% \exp_args:Noox,
-% }
-% \begin{syntax}
-% \cs{exp_args:NNnx} \meta{token_1} \meta{token_2} \Arg{tokens_1} \Arg{tokens_2}
-% \end{syntax}
-% These functions absorb four arguments and expand the second, third
-% and fourth as detailed by their argument specifier. The first
-% argument of the function is then the next item on the input stream,
-% followed by the expansion of the second argument, \emph{etc.}
-% \end{function}
-%
-% \section{Unbraced expansion}
-%
-% \begin{function}[EXP, updated = 2018-05-15]
-% {
-% \exp_last_unbraced:No,
-% \exp_last_unbraced:NV,
-% \exp_last_unbraced:Nv,
-% \exp_last_unbraced:Ne,
-% \exp_last_unbraced:Nf,
-% \exp_last_unbraced:NNo,
-% \exp_last_unbraced:NNV,
-% \exp_last_unbraced:NNf,
-% \exp_last_unbraced:Nco,
-% \exp_last_unbraced:NcV,
-% \exp_last_unbraced:Nno,
-% \exp_last_unbraced:Nnf,
-% \exp_last_unbraced:Noo,
-% \exp_last_unbraced:Nfo,
-% \exp_last_unbraced:NNNo,
-% \exp_last_unbraced:NNNV,
-% \exp_last_unbraced:NNNf,
-% \exp_last_unbraced:NnNo,
-% \exp_last_unbraced:NNNNo,
-% \exp_last_unbraced:NNNNf,
-% }
-% \begin{syntax}
-% \cs{exp_last_unbraced:Nno} \meta{token} \Arg{tokens_1} \Arg{tokens_2}
-% \end{syntax}
-% These functions absorb the number of arguments given by their
-% specification, carry out the expansion
-% indicated and leave the results in the input stream, with the
-% last argument not surrounded by the usual braces.
-% Of these, the |:Nno|, |:Noo|, |:Nfo| and |:NnNo|
-% variants need slower processing.
-% \begin{texnote}
-% As an optimization, the last argument is unbraced by some
-% of those functions before expansion. This can cause problems
-% if the argument is empty: for instance,
-% \cs{exp_last_unbraced:Nf} |\foo_bar:w| |{ }| \cs{q_stop}
-% leads to an infinite loop, as the quark is \texttt{f}-expanded.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}{\exp_last_unbraced:Nx}
-% \begin{syntax}
-% \cs{exp_last_unbraced:Nx} \meta{function} \Arg{tokens}
-% \end{syntax}
-% This function fully expands the \meta{tokens} and leaves the result
-% in the input stream after reinsertion of the \meta{function}.
-% This function is not expandable.
-% \end{function}
-%
-% \begin{function}[EXP]{\exp_last_two_unbraced:Noo}
-% \begin{syntax}
-% \cs{exp_last_two_unbraced:Noo} \meta{token} \Arg{tokens_1} \Arg{tokens_2}
-% \end{syntax}
-% This function absorbs three arguments and expands the second and third
-% once. The first argument of the function is then the next item on the
-% input stream, followed by the expansion of the second and third arguments,
-% which are not wrapped in braces.
-% This function needs special (slower) processing.
-% \end{function}
-%
-% \begin{function}[EXP]{\exp_after:wN}
-% \begin{syntax}
-% \cs{exp_after:wN} \meta{token_1} \meta{token_2}
-% \end{syntax}
-% Carries out a single expansion of \meta{token_2} (which may consume
-% arguments) prior to the expansion of \meta{token_1}. If \meta{token_2} has
-% no expansion (for example, if it is a character) then it is left
-% unchanged. It is important to notice that \meta{token_1} may be
-% \emph{any} single token, including group-opening and -closing
-% tokens (|{| or |}| assuming normal \TeX{} category codes). Unless
-% specifically required this should be avoided: expansion should be carried out using an
-% appropriate argument specifier variant or the appropriate
-% \cs[no-index]{exp_args:N\meta{variant}} function.
-% \begin{texnote}
-% This is the \TeX{} primitive \tn{expandafter}.
-% \end{texnote}
-% \end{function}
-%
-%
-% \section{Preventing expansion}
-%
-% Despite the fact that the following functions are all about preventing
-% expansion, they're designed to be used in an expandable context and hence
-% are all marked as being `expandable' since they themselves disappear
-% after the expansion has completed.
-%
-% \begin{function}[EXP]{\exp_not:N}
-% \begin{syntax}
-% \cs{exp_not:N} \meta{token}
-% \end{syntax}
-% Prevents expansion of the \meta{token} in a context where it would
-% otherwise be expanded, for example an |e|-type or |x|-type argument or
-% the first token in an |o|-type or |f|-type argument.
-% \begin{texnote}
-% This is the \TeX{} primitive \tn{noexpand}. It only prevents
-% expansion. At the beginning of an |f|-type argument, a space
-% \meta{token} is removed even if it appears as \cs{exp_not:N}
-% \cs{c_space_token}. In an |e|-expanding definition
-% (\cs{cs_new:Npe}), a macro parameter introduces an argument even
-% if it appears as \cs{exp_not:N} |#| |1|. This differs from
-% \cs{exp_not:n}.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[EXP]{\exp_not:c}
-% \begin{syntax}
-% \cs{exp_not:c} \Arg{tokens}
-% \end{syntax}
-% Expands the \meta{tokens} until only characters remain, and then
-% converts this into a control sequence.
-% Further expansion of this control sequence is then inhibited using
-% \cs{exp_not:N}.
-% \end{function}
-%
-% \begin{function}[EXP]{\exp_not:n}
-% \begin{syntax}
-% \cs{exp_not:n} \Arg{tokens}
-% \end{syntax}
-% Prevents expansion of the \meta{tokens} in an |e|-type or |x|-type argument.
-% In all other cases the \meta{tokens} continue to be expanded, for
-% example in the input stream or in other types of arguments such as
-% \texttt{c}, \texttt{f}, \texttt{v}. The argument of \cs{exp_not:n}
-% \emph{must} be surrounded by braces.
-% \begin{texnote}
-% This is the \eTeX{} primitive \tn{unexpanded}. In an
-% |e|-expanding definition (\cs{cs_new:Npe}), \cs{exp_not:n}~|{#1}|
-% is equivalent to |##1| rather than to~|#1|, namely it inserts the
-% two characters |#| and~|1|, and
-% \cs{exp_not:n}~|{#}| is equivalent to |#|, namely it inserts the
-% character~|#|.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[EXP]{\exp_not:o}
-% \begin{syntax}
-% \cs{exp_not:o} \Arg{tokens}
-% \end{syntax}
-% Expands the \meta{tokens} once, then prevents any further expansion
-% in |e|-type or |x|-type arguments using \cs{exp_not:n}.
-% \end{function}
-%
-% \begin{function}[EXP]{\exp_not:V}
-% \begin{syntax}
-% \cs{exp_not:V} \meta{variable}
-% \end{syntax}
-% Recovers the content of the \meta{variable}, then prevents expansion
-% of this material in |e|-type or |x|-type arguments using \cs{exp_not:n}.
-% \end{function}
-%
-% \begin{function}[EXP]{\exp_not:v}
-% \begin{syntax}
-% \cs{exp_not:v} \Arg{tokens}
-% \end{syntax}
-% Expands the \meta{tokens} until only characters remains, and then
-% converts this into a control sequence which should be a \meta{variable}
-% name.
-% The content of the \meta{variable} is recovered, and further
-% expansion in |e|-type or |x|-type arguments is prevented using \cs{exp_not:n}.
-% \end{function}
-%
-% \begin{function}[EXP]{\exp_not:e}
-% \begin{syntax}
-% \cs{exp_not:e} \Arg{tokens}
-% \end{syntax}
-% Expands \meta{tokens} exhaustively, then protects the result of the
-% expansion (including any tokens which were not expanded) from
-% further expansion in |e|-type or |x|-type arguments using \cs{exp_not:n}.
-% This is very rarely useful but is provided for consistency.
-% \end{function}
-%
-% \begin{function}[EXP]{\exp_not:f}
-% \begin{syntax}
-% \cs{exp_not:f} \Arg{tokens}
-% \end{syntax}
-% Expands \meta{tokens} fully until the first unexpandable token is
-% found (if it is a space it is removed). Expansion then stops, and
-% the result of the expansion (including any tokens which were not
-% expanded) is protected from further expansion in |e|-type or |x|-type arguments
-% using \cs{exp_not:n}.
-% \end{function}
-%
-% \begin{function}[updated = 2011-06-03, EXP]{\exp_stop_f:}
-% \begin{syntax}
-% |\foo_bar:f| \{ \meta{tokens} \cs{exp_stop_f:} \meta{more tokens} \}
-% \end{syntax}
-% This function terminates an \texttt{f}-type expansion. Thus if
-% a function |\foo_bar:f| starts an \texttt{f}-type expansion
-% and all of \meta{tokens} are expandable \cs{exp_stop_f:}
-% terminates the expansion of tokens even if \meta{more tokens}
-% are also expandable. The function itself is an implicit space
-% token. Inside an \texttt{e}-type or \texttt{x}-type expansion, it retains its
-% form, but when typeset it produces the underlying space (\verb*| |).
-% \end{function}
-%
-%
-% \section{Controlled expansion}
-%
-% The \pkg{expl3} language makes all efforts to hide the complexity of
-% \TeX{} expansion from the programmer by providing concepts that
-% evaluate/expand arguments of functions prior to calling the \enquote{base}
-% functions. Thus, instead of using many \tn{expandafter} calls and
-% other trickery it is usually a matter of choosing the right variant
-% of a function to achieve a desired result.
-%
-% Of course, deep down \TeX{} is using expansion as always and there
-% are cases where a programmer needs to control that expansion
-% directly; typical situations are basic data manipulation tools. This
-% section documents the functions for that level. These
-% commands are used throughout the kernel code, but we hope that outside
-% the kernel there will be little need to resort to them. Instead the
-% argument manipulation methods document above should usually be sufficient.
-%
-% While \cs{exp_after:wN} expands one token (out of order) it is
-% sometimes necessary to expand several tokens in one go. The next set
-% of commands provide this functionality. Be aware that it is
-% absolutely required that the programmer has full control over the
-% tokens to be expanded, i.e., it is not possible to use these
-% functions to expand unknown input as part of
-% \meta{expandable-tokens} as that will break badly if unexpandable
-% tokens are encountered in that place!
-%
-% \begin{function}[added=2015-08-23,EXP]
-% {
-% \exp:w ,
-% \exp_end:
-% }
-% \begin{syntax}
-% \cs{exp:w} \meta{expandable tokens} \cs{exp_end:} \\
-% \end{syntax}
-% Expands \meta{expandable-tokens} until reaching \cs{exp_end:} at
-% which point expansion stops.
-% The full expansion of \meta{expandable tokens} has to be empty.
-% If any token in \meta{expandable tokens} or any token generated by
-% expanding the tokens therein is not expandable the expansion will end
-% prematurely and as a result \cs{exp_end:} will be misinterpreted
-% later on.\footnotemark
-%
-% In typical use cases the \cs{exp_end:} is hidden somewhere
-% in the replacement text of \meta{expandable-tokens} rather than
-% being on the same expansion level than \cs{exp:w}, e.g., you may
-% see code such as
-%\begin{verbatim}
-% \exp:w \@@_case:NnTF #1 {#2} { } { }
-%\end{verbatim}
-% where somewhere during the expansion of |\@@_case:NnTF| the
-% \cs{exp_end:} gets generated.
-% \begin{texnote}
-% The current implementation uses \tn{romannumeral} hence ignores
-% space tokens and explicit signs |+| and |-| in the expansion of the
-% \meta{expandable tokens}, but this should not be relied upon.
-% \end{texnote}
-% \end{function}
-% \footnotetext{Due to the implementation you might get the character
-% in position 0 in the current font (typically \enquote{\texttt{`}})
-% in the output without any error message!}
-%
-% \begin{function}[added=2015-08-23, EXP, label = \exp_end_continue_f:w]
-% {
-% \exp:w ,
-% \exp_end_continue_f:w
-% }
-% \begin{syntax}
-% \cs{exp:w} \meta{expandable-tokens} \cs{exp_end_continue_f:w} \meta{further-tokens}
-% \end{syntax}
-% Expands \meta{expandable-tokens} until reaching \cs{exp_end_continue_f:w} at
-% which point expansion continues as an \texttt{f}-type expansion expanding
-% \meta{further-tokens} until an unexpandable token is encountered (or
-% the \texttt{f}-type expansion is explicitly terminated by
-% \cs{exp_stop_f:}). As with all \texttt{f}-type expansions a space ending
-% the expansion gets removed.
-%
-% The full expansion of \meta{expandable-tokens} has to be empty.
-% If any token in \meta{expandable-tokens} or any token generated by
-% expanding the tokens therein is not expandable the expansion will end
-% prematurely and as a result \cs{exp_end_continue_f:w} will be misinterpreted
-% later on.\footnotemark
-%
-%
-% In typical use cases \meta{expandable-tokens} contains no tokens at all,
-% e.g., you will see code such as
-%\begin{verbatim}
-% \exp_after:wN { \exp:w \exp_end_continue_f:w #2 }
-%\end{verbatim}
-% where the \cs{exp_after:wN} triggers an \texttt{f}-expansion of the tokens
-% in |#2|. For technical reasons this has to happen using two tokens
-% (if they would be hidden inside another command \cs{exp_after:wN}
-% would only expand the command but not trigger any additional
-% |f|-expansion).
-%
-% You might wonder why there are two different approaches available,
-% after all the effect of
-% \begin{quote}
-% \cs{exp:w} \meta{expandable-tokens} \cs{exp_end:}
-% \end{quote}
-% can be alternatively achieved through an \texttt{f}-type expansion by using
-% \cs{exp_stop_f:}, i.e.
-% \begin{quote}
-% \cs{exp:w} \cs{exp_end_continue_f:w} \meta{expandable-tokens} \cs{exp_stop_f:}
-% \end{quote}
-% The reason is simply that the first approach is slightly faster
-% (one less token to parse and less expansion internally)
-% so in places where such performance really matters and where we
-% want to explicitly stop the expansion at a defined point the first
-% form is preferable.
-% \end{function}
-% \footnotetext{In this particular case you may get a character into
-% the output as well as an error message.}
-%
-% \begin{function}[added=2015-08-23, EXP, label = \exp_end_continue_f:nw]
-% {
-% \exp:w ,
-% \exp_end_continue_f:nw
-% }
-% \begin{syntax}
-% \cs{exp:w} \meta{expandable-tokens} \cs{exp_end_continue_f:nw} \meta{further-tokens}
-% \end{syntax}
-% The difference to \cs{exp_end_continue_f:w} is that we first we pick
-% up an argument which is then returned to the input stream. If
-% \meta{further-tokens} starts with space tokens then these space
-% tokens are removed while searching for the argument. If it starts
-% with a brace group then the braces are removed. Thus such spaces or
-% braces will not terminate the \texttt{f}-type expansion.
-% \end{function}
-%
-% \section{Internal functions}
-%
-% \begin{function}{\::n, \::N, \::p, \::c, \::o, \::e, \::f, \::x, \::v, \::V, \:::}
-% \begin{syntax}
-% |\cs_new:Npn \exp_args:Ncof { \::c \::o \::f \::: }|
-% \end{syntax}
-% Internal forms for the base expansion types. These names do \emph{not}
-% conform to the general \LaTeX3 approach as this makes them more readily
-% visible in the log and so forth. They should not be used outside this module.
-% \end{function}
-%
-% \begin{function}
-% {\::o_unbraced, \::e_unbraced, \::f_unbraced, \::x_unbraced, \::v_unbraced, \::V_unbraced}
-% \begin{syntax}
-% |\cs_new:Npn \exp_last_unbraced:Nno { \::n \::o_unbraced \::: }|
-% \end{syntax}
-% Internal forms for the expansion types which leave the terminal argument
-% unbraced. These names do \emph{not}
-% conform to the general \LaTeX3 approach as this makes them more readily
-% visible in the log and so forth. They should not be used outside this module.
-% \end{function}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3expan} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=exp>
-% \end{macrocode}
-%
-% \begin{variable}{\l_@@_internal_tl}
-% The |\exp_| module has its private variable to temporarily store the
-% result of |x|-type argument expansion. This is done to avoid interference
-% with other functions using temporary variables.
-% \end{variable}
-%
-% \begin{macro}{\exp_after:wN}
-% \begin{macro}{\exp_not:N}
-% \begin{macro}{\exp_not:n}
-% These are defined in \pkg{l3basics}, as they are needed
-% \enquote{early}. This is just a reminder of that fact!
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{General expansion}
-%
-% In this section a general mechanism for defining functions that handle
-% arguments is defined. These general expansion functions are
-% expandable unless |x| is used. (Any version of |x| is going to have
-% to use one of the \LaTeX3 names for \cs{cs_set:Npx} at some
-% point, and so is never going to be expandable.)
-%
-% The definition of expansion functions with this technique happens
-% in section~\ref{sec:l3expan:gendef}.
-% In section~\ref{sec:l3expan:handtune} some common cases are coded by a more direct
-% method for efficiency, typically using calls to \cs{exp_after:wN}.
-%
-% \begin{variable}{\l_@@_internal_tl}
-% This scratch token list variable is defined in \pkg{l3basics}.
-% \end{variable}
-%
-% This code uses internal functions with names that start with |\::| to
-% perform the expansions. All macros are |long| since the tokens
-% undergoing expansion may be arbitrary user input.
-%
-% An argument manipulator |\::|\meta{Z} always has signature |#1\:::#2#3|
-% where |#1| holds the remaining argument manipulations to be performed,
-% \cs{:::} serves as an end marker for the list of manipulations, |#2|
-% is the carried over result of the previous expansion steps and |#3| is
-% the argument about to be processed.
-% One exception to this rule is \cs{::p}, which has to grab an argument
-% delimited by a left brace.
-%
-% \begin{macro}[EXP]{\@@_arg_next:nnn}
-% \begin{macro}[EXP]{\@@_arg_next:Nnn}
-% |#1| is the result of an expansion step, |#2| is the remaining
-% argument manipulations and |#3| is the current result of the
-% expansion chain. This auxiliary function moves |#1| back after
-% |#3| in the input stream and checks if any expansion is left to
-% be done by calling |#2|. In by far the most cases we need
-% to add a set of braces to the result of an argument manipulation
-% so it is more effective to do it directly here. Actually, so far
-% only the |c| of the final argument manipulation variants does not
-% require a set of braces.
-% \begin{macrocode}
-\cs_new:Npn \@@_arg_next:nnn #1#2#3 { #2 \::: { #3 {#1} } }
-\cs_new:Npn \@@_arg_next:Nnn #1#2#3 { #2 \::: { #3 #1 } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\:::}
-% The end marker is just another name for the identity function.
-% \begin{macrocode}
-\cs_new:Npn \::: #1 {#1}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\::n}
-% This function is used to skip an argument that doesn't need to
-% be expanded.
-% \begin{macrocode}
-\cs_new:Npn \::n #1 \::: #2#3 { #1 \::: { #2 {#3} } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\::N}
-% This function is used to skip an argument that consists of a
-% single token and doesn't need to be expanded.
-% \begin{macrocode}
-\cs_new:Npn \::N #1 \::: #2#3 { #1 \::: {#2#3} }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\::p}
-% This function is used to skip an argument that is delimited by a
-% left brace and doesn't need to be expanded. It is not
-% wrapped in braces in the result.
-% \begin{macrocode}
-\cs_new:Npn \::p #1 \::: #2#3# { #1 \::: {#2#3} }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\::c}
-% This function is used to skip an argument that is turned into
-% a control sequence without expansion.
-% \begin{macrocode}
-\cs_new:Npn \::c #1 \::: #2#3
- { \exp_after:wN \@@_arg_next:Nnn \cs:w #3 \cs_end: {#1} {#2} }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\::o}
-% This function is used to expand an argument once.
-% \begin{macrocode}
-\cs_new:Npn \::o #1 \::: #2#3
- { \exp_after:wN \@@_arg_next:nnn \exp_after:wN {#3} {#1} {#2} }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\::e}
-% With the \tn{expanded} primitive available, just expand.
-% \begin{macrocode}
-\cs_new:Npn \::e #1 \::: #2#3
- { \tex_expanded:D { \exp_not:n { #1 \::: } { \exp_not:n {#2} {#3} } } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\::f}
-% \begin{macro}{\exp_stop_f:}
-% This function is used to expand a token list until the first
-% unexpandable token is found. This is achieved through \cs{exp:w}
-% \cs{exp_end_continue_f:w} that expands everything in its way
-% following it. This scanning procedure is terminated once the
-% expansion hits something non-expandable (if that is a space it is
-% removed). We introduce \cs{exp_stop_f:} to mark such an
-% end-of-expansion marker. For example, |f|-expanding
-% |\cs_set_eq:Nc \aaa { b \l_tmpa_tl b }| where |\l_tmpa_tl| contains
-% the characters |lur| gives |\tex_let:D \aaa = \blurb| which then
-% turns out to start with the non-expandable token |\tex_let:D|.
-% Since the expansion of \cs{exp:w} \cs{exp_end_continue_f:w} is
-% empty, we wind up with a fully expanded list, only \TeX{} has not
-% tried to execute any of the non-expandable tokens. This is what
-% differentiates this function from the |e| and |x| argument type.
-% \begin{macrocode}
-\cs_new:Npn \::f #1 \::: #2#3
- {
- \exp_after:wN \@@_arg_next:nnn
- \exp_after:wN { \exp:w \exp_end_continue_f:w #3 }
- {#1} {#2}
- }
-\use:nn { \cs_new_eq:NN \exp_stop_f: } { ~ }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\::x}
-% This function is used to expand an argument fully.
-% We build in the expansion of \cs{@@_arg_next:nnn}.
-% \begin{macrocode}
-\cs_new_protected:Npn \::x #1 \::: #2#3
- {
- \cs_set_nopar:Npe \l_@@_internal_tl
- { \exp_not:n { #1 \::: } { \exp_not:n {#2} {#3} } }
- \l_@@_internal_tl
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\::v}
-% \begin{macro}[EXP]{\::V}
-% These functions return the value of a register, i.e., one of
-% |tl|, |clist|, |int|, |skip|, |dim|, |muskip|, or built-in
-% \TeX{} register. The |V| version
-% expects a single token whereas |v| like |c| creates a csname from
-% its argument given in braces and then evaluates it as if it was a
-% |V|. The \cs{exp:w} sets off an expansion
-% similar to an |f|-type expansion, which we terminate using
-% \cs{exp_end:}. The argument is returned in braces.
-% \begin{macrocode}
-\cs_new:Npn \::V #1 \::: #2#3
- {
- \exp_after:wN \@@_arg_next:nnn
- \exp_after:wN { \exp:w \@@_eval_register:N #3 }
- {#1} {#2}
-}
-\cs_new:Npn \::v #1 \::: #2#3
- {
- \exp_after:wN \@@_arg_next:nnn
- \exp_after:wN { \exp:w \@@_eval_register:c {#3} }
- {#1} {#2}
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_eval_register:N, \@@_eval_register:c}
-% \begin{macro}[EXP]{\@@_eval_error_msg:w}
-% This function evaluates a register. Now a register might exist as
-% one of two things: A parameter-less macro or a built-in \TeX{}
-% register such as |\count|. For the \TeX{} registers we have to
-% utilize a \tn{the} whereas for the macros we merely have to
-% expand them once. The trick is to find out when to use
-% \tn{the} and when not to. What we want here is to find out
-% whether the token expands to something else when hit with
-% \cs{exp_after:wN}. The technique is to compare the meaning of the
-% token in question when it has been prefixed with \cs{exp_not:N}
-% and the token itself. If it is a macro, the prefixed
-% \cs{exp_not:N} temporarily turns it into the primitive
-% \cs{scan_stop:}.
-% \begin{macrocode}
-\cs_new:Npn \@@_eval_register:N #1
- {
- \exp_after:wN \if_meaning:w \exp_not:N #1 #1
-% \end{macrocode}
-% If the token was not a macro it may be a malformed variable from a
-% |c| expansion in which case it is equal to the primitive
-% \cs{scan_stop:}. In that case we throw an error. We could let \TeX{}
-% do it for us but that would result in the rather obscure
-% \begin{quote}
-% |! You can't use `\relax' after \the.|
-% \end{quote}
-% which while quite true doesn't give many hints as to what actually
-% went wrong. We provide something more sensible.
-% \begin{macrocode}
- \if_meaning:w \scan_stop: #1
- \@@_eval_error_msg:w
- \fi:
-% \end{macrocode}
-% The next bit requires some explanation. The function must be
-% initiated by \cs{exp:w} and we want to
-% terminate this expansion chain by inserting the \cs{exp_end:}
-% token.
-% However, we have to expand the register |#1| before we do
-% that. If it is a \TeX{} register, we need to execute the sequence
-% |\exp_after:wN \exp_end: \tex_the:D #1| and if it is a macro we
-% need to execute |\exp_after:wN \exp_end: #1|. We therefore issue
-% the longer of the two sequences and if the register is a macro, we
-% remove the \cs{tex_the:D}.
-% \begin{macrocode}
- \else:
- \exp_after:wN \use_i_ii:nnn
- \fi:
- \exp_after:wN \exp_end: \tex_the:D #1
- }
-\cs_new:Npn \@@_eval_register:c #1
- { \exp_after:wN \@@_eval_register:N \cs:w #1 \cs_end: }
-% \end{macrocode}
-% Clean up nicely, then call the undefined control sequence. The
-% result is an error message looking like this:
-% \begin{verbatim}
-% ! Undefined control sequence.
-% <argument> \LaTeX3 error:
-% Erroneous variable used!
-% l.55 \tl_set:Nv \l_tmpa_tl {undefined_tl}
-% \end{verbatim}
-% \begin{macrocode}
-\cs_new:Npn \@@_eval_error_msg:w #1 \tex_the:D #2
- {
- \fi:
- \fi:
- \msg_expandable_error:nnn { kernel } { bad-variable } {#2}
- \exp_end:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Hand-tuned definitions}
-% \label{sec:l3expan:handtune}
-%
-% One of the most important features of these functions is that they
-% are fully expandable.
-%
-% \begin{macro}[EXP]{\exp_args:Nc, \exp_args:cc}
-% In \pkg{l3basics}.
-% \end{macro}
-%
-% \begin{macro}[EXP]{\exp_args:NNc, \exp_args:Ncc, \exp_args:Nccc}
-% Here are the functions that turn their argument into csnames but are
-% expandable.
-% \begin{macrocode}
-\cs_new:Npn \exp_args:NNc #1#2#3
- { \exp_after:wN #1 \exp_after:wN #2 \cs:w # 3\cs_end: }
-\cs_new:Npn \exp_args:Ncc #1#2#3
- { \exp_after:wN #1 \cs:w #2 \exp_after:wN \cs_end: \cs:w #3 \cs_end: }
-\cs_new:Npn \exp_args:Nccc #1#2#3#4
- {
- \exp_after:wN #1
- \cs:w #2 \exp_after:wN \cs_end:
- \cs:w #3 \exp_after:wN \cs_end:
- \cs:w #4 \cs_end:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\exp_args:No}
-% \begin{macro}[EXP]{\exp_args:NNo}
-% \begin{macro}[EXP]{\exp_args:NNNo}
-% Those lovely runs of expansion!
-% \begin{macrocode}
-\cs_new:Npn \exp_args:No #1#2 { \exp_after:wN #1 \exp_after:wN {#2} }
-\cs_new:Npn \exp_args:NNo #1#2#3
- { \exp_after:wN #1 \exp_after:wN #2 \exp_after:wN {#3} }
-\cs_new:Npn \exp_args:NNNo #1#2#3#4
- { \exp_after:wN #1 \exp_after:wN#2 \exp_after:wN #3 \exp_after:wN {#4} }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\exp_args:Ne}
-% When the \tn{expanded} primitive is available, use it.
-% \begin{macrocode}
-\cs_new:Npn \exp_args:Ne #1#2
- { \exp_after:wN #1 \tex_expanded:D { {#2} } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\exp_args:Nf, \exp_args:NV, \exp_args:Nv}
-% \begin{macrocode}
-\cs_new:Npn \exp_args:Nf #1#2
- { \exp_after:wN #1 \exp_after:wN { \exp:w \exp_end_continue_f:w #2 } }
-\cs_new:Npn \exp_args:Nv #1#2
- {
- \exp_after:wN #1 \exp_after:wN
- { \exp:w \@@_eval_register:c {#2} }
- }
-\cs_new:Npn \exp_args:NV #1#2
- {
- \exp_after:wN #1 \exp_after:wN
- { \exp:w \@@_eval_register:N #2 }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {
-% \exp_args:NNV, \exp_args:NNv, \exp_args:NNe, \exp_args:NNf,
-% \exp_args:Nco, \exp_args:NcV, \exp_args:Ncv, \exp_args:Ncf,
-% \exp_args:NVV,
-% }
-% Some more hand-tuned function with three arguments.
-% If we forced that an |o| argument always has braces,
-% we could implement \cs{exp_args:Nco} with less tokens
-% and only two arguments.
-% \begin{macrocode}
-\cs_new:Npn \exp_args:NNV #1#2#3
- {
- \exp_after:wN #1
- \exp_after:wN #2
- \exp_after:wN { \exp:w \@@_eval_register:N #3 }
- }
-\cs_new:Npn \exp_args:NNv #1#2#3
- {
- \exp_after:wN #1
- \exp_after:wN #2
- \exp_after:wN { \exp:w \@@_eval_register:c {#3} }
- }
-\cs_new:Npn \exp_args:NNe #1#2#3
- {
- \exp_after:wN #1
- \exp_after:wN #2
- \tex_expanded:D { {#3} }
- }
-\cs_new:Npn \exp_args:NNf #1#2#3
- {
- \exp_after:wN #1
- \exp_after:wN #2
- \exp_after:wN { \exp:w \exp_end_continue_f:w #3 }
- }
-\cs_new:Npn \exp_args:Nco #1#2#3
- {
- \exp_after:wN #1
- \cs:w #2 \exp_after:wN \cs_end:
- \exp_after:wN {#3}
- }
-\cs_new:Npn \exp_args:NcV #1#2#3
- {
- \exp_after:wN #1
- \cs:w #2 \exp_after:wN \cs_end:
- \exp_after:wN { \exp:w \@@_eval_register:N #3 }
- }
-\cs_new:Npn \exp_args:Ncv #1#2#3
- {
- \exp_after:wN #1
- \cs:w #2 \exp_after:wN \cs_end:
- \exp_after:wN { \exp:w \@@_eval_register:c {#3} }
- }
-\cs_new:Npn \exp_args:Ncf #1#2#3
- {
- \exp_after:wN #1
- \cs:w #2 \exp_after:wN \cs_end:
- \exp_after:wN { \exp:w \exp_end_continue_f:w #3 }
- }
-\cs_new:Npn \exp_args:NVV #1#2#3
- {
- \exp_after:wN #1
- \exp_after:wN { \exp:w \exp_after:wN
- \@@_eval_register:N \exp_after:wN #2 \exp_after:wN }
- \exp_after:wN { \exp:w \@@_eval_register:N #3 }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {
-% \exp_args:NNNV, \exp_args:NNNv, \exp_args:NNNe,
-% \exp_args:NcNc, \exp_args:NcNo,
-% \exp_args:Ncco,
-% }
-% A few more that we can hand-tune.
-% \begin{macrocode}
-\cs_new:Npn \exp_args:NNNV #1#2#3#4
- {
- \exp_after:wN #1
- \exp_after:wN #2
- \exp_after:wN #3
- \exp_after:wN { \exp:w \@@_eval_register:N #4 }
- }
-\cs_new:Npn \exp_args:NNNv #1#2#3#4
- {
- \exp_after:wN #1
- \exp_after:wN #2
- \exp_after:wN #3
- \exp_after:wN { \exp:w \@@_eval_register:c {#4} }
- }
-\cs_new:Npn \exp_args:NNNe #1#2#3#4
- {
- \exp_after:wN #1
- \exp_after:wN #2
- \exp_after:wN #3
- \tex_expanded:D { {#4} }
- }
-\cs_new:Npn \exp_args:NcNc #1#2#3#4
- {
- \exp_after:wN #1
- \cs:w #2 \exp_after:wN \cs_end:
- \exp_after:wN #3
- \cs:w #4 \cs_end:
- }
-\cs_new:Npn \exp_args:NcNo #1#2#3#4
- {
- \exp_after:wN #1
- \cs:w #2 \exp_after:wN \cs_end:
- \exp_after:wN #3
- \exp_after:wN {#4}
- }
-\cs_new:Npn \exp_args:Ncco #1#2#3#4
- {
- \exp_after:wN #1
- \cs:w #2 \exp_after:wN \cs_end:
- \cs:w #3 \exp_after:wN \cs_end:
- \exp_after:wN {#4}
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\exp_args:Nx}
-% \begin{macrocode}
-\cs_new_protected:Npn \exp_args:Nx #1#2
- { \use:x { \exp_not:N #1 {#2} } }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Last-unbraced versions}
-%
-% \begin{macro}[EXP]{\@@_arg_last_unbraced:nn}
-% \begin{macro}[EXP]{\::o_unbraced}
-% \begin{macro}[EXP]{\::V_unbraced}
-% \begin{macro}[EXP]{\::v_unbraced}
-% \begin{macro}[EXP]{\::e_unbraced}
-% \begin{macro}[EXP]{\::f_unbraced}
-% \begin{macro}[EXP]{\::x_unbraced}
-% There are a few places where the last argument needs to be available
-% unbraced. First some helper macros.
-% \begin{macrocode}
-\cs_new:Npn \@@_arg_last_unbraced:nn #1#2 { #2#1 }
-\cs_new:Npn \::o_unbraced \::: #1#2
- { \exp_after:wN \@@_arg_last_unbraced:nn \exp_after:wN {#2} {#1} }
-\cs_new:Npn \::V_unbraced \::: #1#2
- {
- \exp_after:wN \@@_arg_last_unbraced:nn
- \exp_after:wN { \exp:w \@@_eval_register:N #2 } {#1}
- }
-\cs_new:Npn \::v_unbraced \::: #1#2
- {
- \exp_after:wN \@@_arg_last_unbraced:nn
- \exp_after:wN { \exp:w \@@_eval_register:c {#2} } {#1}
- }
-\cs_new:Npn \::e_unbraced \::: #1#2
- { \tex_expanded:D { \exp_not:n {#1} #2 } }
-\cs_new:Npn \::f_unbraced \::: #1#2
- {
- \exp_after:wN \@@_arg_last_unbraced:nn
- \exp_after:wN { \exp:w \exp_end_continue_f:w #2 } {#1}
- }
-\cs_new_protected:Npn \::x_unbraced \::: #1#2
- {
- \cs_set_nopar:Npe \l_@@_internal_tl { \exp_not:n {#1} #2 }
- \l_@@_internal_tl
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {
-% \exp_last_unbraced:No,
-% \exp_last_unbraced:NV,
-% \exp_last_unbraced:Nv,
-% \exp_last_unbraced:Ne,
-% \exp_last_unbraced:Nf,
-% \exp_last_unbraced:NNo,
-% \exp_last_unbraced:NNV,
-% \exp_last_unbraced:NNf,
-% \exp_last_unbraced:Nco,
-% \exp_last_unbraced:NcV,
-% \exp_last_unbraced:NNNo,
-% \exp_last_unbraced:NNNV,
-% \exp_last_unbraced:NNNf,
-% \exp_last_unbraced:Nno,
-% \exp_last_unbraced:Nnf,
-% \exp_last_unbraced:Noo,
-% \exp_last_unbraced:Nfo,
-% \exp_last_unbraced:NnNo,
-% \exp_last_unbraced:NNNNo,
-% \exp_last_unbraced:NNNNf,
-% }
-% \begin{macro}{\exp_last_unbraced:Nx}
-% Now the business end: most of these are hand-tuned for speed, but the
-% general system is in place.
-% \begin{macrocode}
-\cs_new:Npn \exp_last_unbraced:No #1#2 { \exp_after:wN #1 #2 }
-\cs_new:Npn \exp_last_unbraced:NV #1#2
- { \exp_after:wN #1 \exp:w \@@_eval_register:N #2 }
-\cs_new:Npn \exp_last_unbraced:Nv #1#2
- { \exp_after:wN #1 \exp:w \@@_eval_register:c {#2} }
-\cs_new:Npn \exp_last_unbraced:Ne #1#2
- { \exp_after:wN #1 \tex_expanded:D {#2} }
-\cs_new:Npn \exp_last_unbraced:Nf #1#2
- { \exp_after:wN #1 \exp:w \exp_end_continue_f:w #2 }
-\cs_new:Npn \exp_last_unbraced:NNo #1#2#3
- { \exp_after:wN #1 \exp_after:wN #2 #3 }
-\cs_new:Npn \exp_last_unbraced:NNV #1#2#3
- {
- \exp_after:wN #1
- \exp_after:wN #2
- \exp:w \@@_eval_register:N #3
- }
-\cs_new:Npn \exp_last_unbraced:NNf #1#2#3
- {
- \exp_after:wN #1
- \exp_after:wN #2
- \exp:w \exp_end_continue_f:w #3
- }
-\cs_new:Npn \exp_last_unbraced:Nco #1#2#3
- { \exp_after:wN #1 \cs:w #2 \exp_after:wN \cs_end: #3 }
-\cs_new:Npn \exp_last_unbraced:NcV #1#2#3
- {
- \exp_after:wN #1
- \cs:w #2 \exp_after:wN \cs_end:
- \exp:w \@@_eval_register:N #3
- }
-\cs_new:Npn \exp_last_unbraced:NNNo #1#2#3#4
- { \exp_after:wN #1 \exp_after:wN #2 \exp_after:wN #3 #4 }
-\cs_new:Npn \exp_last_unbraced:NNNV #1#2#3#4
- {
- \exp_after:wN #1
- \exp_after:wN #2
- \exp_after:wN #3
- \exp:w \@@_eval_register:N #4
- }
-\cs_new:Npn \exp_last_unbraced:NNNf #1#2#3#4
- {
- \exp_after:wN #1
- \exp_after:wN #2
- \exp_after:wN #3
- \exp:w \exp_end_continue_f:w #4
- }
-\cs_new:Npn \exp_last_unbraced:Nno { \::n \::o_unbraced \::: }
-\cs_new:Npn \exp_last_unbraced:Nnf { \::n \::f_unbraced \::: }
-\cs_new:Npn \exp_last_unbraced:Noo { \::o \::o_unbraced \::: }
-\cs_new:Npn \exp_last_unbraced:Nfo { \::f \::o_unbraced \::: }
-\cs_new:Npn \exp_last_unbraced:NnNo { \::n \::N \::o_unbraced \::: }
-\cs_new:Npn \exp_last_unbraced:NNNNo #1#2#3#4#5
- { \exp_after:wN #1 \exp_after:wN #2 \exp_after:wN #3 \exp_after:wN #4 #5 }
-\cs_new:Npn \exp_last_unbraced:NNNNf #1#2#3#4#5
- {
- \exp_after:wN #1
- \exp_after:wN #2
- \exp_after:wN #3
- \exp_after:wN #4
- \exp:w \exp_end_continue_f:w #5
- }
-\cs_new_protected:Npn \exp_last_unbraced:Nx { \::x_unbraced \::: }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\exp_last_two_unbraced:Noo}
-% \begin{macro}[EXP]{\@@_last_two_unbraced:noN}
-% If |#2| is a single token then this can be implemented as
-% \begin{verbatim}
-% \cs_new:Npn \exp_last_two_unbraced:Noo #1 #2 #3
-% { \exp_after:wN \exp_after:wN \exp_after:wN #1 \exp_after:wN #2 #3 }
-% \end{verbatim}
-% However, for robustness this is not suitable. Instead, a bit of a
-% shuffle is used to ensure that |#2| can be multiple tokens.
-% \begin{macrocode}
-\cs_new:Npn \exp_last_two_unbraced:Noo #1#2#3
- { \exp_after:wN \@@_last_two_unbraced:noN \exp_after:wN {#3} {#2} #1 }
-\cs_new:Npn \@@_last_two_unbraced:noN #1#2#3
- { \exp_after:wN #3 #2 #1 }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Preventing expansion}
-%
-% \begin{macro}{\__kernel_exp_not:w}
-% At the kernel level, we need the primitive behaviour to allow expansion
-% \emph{before} the brace group.
-% \begin{macrocode}
-\cs_new_eq:NN \__kernel_exp_not:w \tex_unexpanded:D
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\exp_not:c}
-% \begin{macro}[EXP]{\exp_not:o}
-% \begin{macro}[EXP]{\exp_not:e}
-% \begin{macro}[EXP]{\exp_not:f}
-% \begin{macro}[EXP]{\exp_not:V}
-% \begin{macro}[EXP]{\exp_not:v}
-% All these except \cs{exp_not:c} call the kernel-internal
-% \cs{__kernel_exp_not:w} namely \cs{tex_unexpanded:D}.
-% \begin{macrocode}
-\cs_new:Npn \exp_not:c #1 { \exp_after:wN \exp_not:N \cs:w #1 \cs_end: }
-\cs_new:Npn \exp_not:o #1 { \__kernel_exp_not:w \exp_after:wN {#1} }
-\cs_new:Npn \exp_not:e #1
- { \__kernel_exp_not:w \tex_expanded:D { {#1} } }
-\cs_new:Npn \exp_not:f #1
- { \__kernel_exp_not:w \exp_after:wN { \exp:w \exp_end_continue_f:w #1 } }
-\cs_new:Npn \exp_not:V #1
- {
- \__kernel_exp_not:w \exp_after:wN
- { \exp:w \@@_eval_register:N #1 }
- }
-\cs_new:Npn \exp_not:v #1
- {
- \__kernel_exp_not:w \exp_after:wN
- { \exp:w \@@_eval_register:c {#1} }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Controlled expansion}
-%
-% \begin{macro}{\exp:w}
-% \begin{macro}{\exp_end:}
-% \begin{macro}{\exp_end_continue_f:w}
-% \begin{macro}{\exp_end_continue_f:nw}
-% To trigger a sequence of \enquote{arbitrarily} many expansions we
-% need a method to invoke \TeX's expansion mechanism in such a way
-% that (a) we are able to stop it in a controlled manner and (b) the
-% result of what triggered the expansion in the first place is null,
-% i.e.\@, that we do not get any unwanted side effects. There aren't
-% that many possibilities in \TeX{}; in fact the one explained below
-% might well be the only one (as normally the result of expansion is
-% not null).
-%
-% The trick here is to make use of the fact that
-% \cs{tex_romannumeral:D} expands the tokens following it when looking
-% for a number and that its expansion is null if that number turns out
-% to be zero or negative. So we use that to start the expansion
-% sequence: \cs{exp:w} is set equal to \cs{tex_romannumeral:D} in
-% \pkg{l3basics}. To stop the expansion sequence in a controlled way
-% all we need to provide is a constant integer zero as part of
-% expanded tokens. As this is an integer constant it immediately stops
-% \cs{tex_romannumeral:D}'s search for a number. Again, the
-% definition of \cs{exp_end:} as the integer constant zero is in
-% \pkg{l3basics}. (Note that according to our specification all
-% tokens we expand initiated by \cs{exp:w} are supposed to be
-% expandable (as well as their replacement text in the expansion) so
-% we will not encounter a \enquote{number} that actually result in a
-% roman numeral being generated. Or if we do then the programmer made
-% a mistake.)
-%
-% If on the other hand we want to stop the initial expansion sequence
-% but continue with an \texttt{f}-type expansion we provide the
-% alphabetic constant |`^^@| that also represents |0| but this time
-% \TeX's syntax for a \meta{number} continues searching for an
-% optional space (and it continues expansion doing that) --- see
-% \TeX{}book page~269 for details.
-% \begin{macrocode}
-\group_begin:
- \tex_catcode:D `\^^@ = 13
- \cs_new_protected:Npn \exp_end_continue_f:w { `^^@ }
-% \end{macrocode}
-% If the above definition ever appears outside its proper context
-% the active character |^^@| will be executed so we turn this into an
-% error. The test for existence covers the (unlikely) case that some
-% other code has already defined |^^@|: this is true for example for
-% \texttt{xmltex.tex}.
-% \begin{macrocode}
- \if_cs_exist:N ^^@
- \else:
- \cs_new:Npn ^^@
- { \msg_expandable_error:nn { kernel } { bad-exp-end-f } }
- \fi:
-% \end{macrocode}
-% The same but grabbing an argument to remove spaces and braces.
-% \begin{macrocode}
- \cs_new:Npn \exp_end_continue_f:nw #1 { `^^@ #1 }
-\group_end:
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Defining function variants}
-%
-% \begin{macrocode}
-%<@@=cs>
-% \end{macrocode}
-%
-% \begin{variable}{\s_@@_mark,\s_@@_stop}
-% Internal scan marks. No \pkg{l3quark} yet, so do things by hand.
-% \begin{macrocode}
-\cs_new_eq:NN \s_@@_mark \scan_stop:
-\cs_new_eq:NN \s_@@_stop \scan_stop:
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\q_@@_recursion_stop}
-% Internal recursion quarks. No \pkg{l3quark} yet, so do things by hand.
-% \begin{macrocode}
-\cs_new:Npn \q_@@_recursion_stop { \q_@@_recursion_stop }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[EXP]{
-% \@@_use_none_delimit_by_s_stop:w,
-% \@@_use_i_delimit_by_s_stop:nw,
-% \@@_use_none_delimit_by_q_recursion_stop:w
-% }
-% Internal scan marks.
-% \begin{macrocode}
-\cs_new:Npn \@@_use_none_delimit_by_s_stop:w #1 \s_@@_stop { }
-\cs_new:Npn \@@_use_i_delimit_by_s_stop:nw #1 #2 \s_@@_stop {#1}
-\cs_new:Npn \@@_use_none_delimit_by_q_recursion_stop:w
- #1 \q_@@_recursion_stop { }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\cs_generate_variant:Nn, \cs_generate_variant:cn}
-% \begin{arguments}
-% \item Base form of a function; \emph{e.g.},~\cs{tl_set:Nn}
-% \item One or more variant argument specifiers; e.g., |{Nx,c,cx}|
-% \end{arguments}
-% After making sure that the base form exists, test whether it is
-% protected or not and define \cs{@@_tmp:w} as either
-% \cs{cs_new:Npe} or \cs{cs_new_protected:Npe}, which is
-% then used to define all the variants (except those involving
-% \texttt{x}-expansion, always protected). Split up the original base
-% function only once, to grab its name and signature. Then we wish to
-% iterate through the comma list of variant argument specifiers, which
-% we first convert to a string: the reason is explained later.
-% \begin{macrocode}
-\cs_new_protected:Npn \cs_generate_variant:Nn #1#2
- {
- \@@_generate_variant:N #1
- \use:e
- {
- \@@_generate_variant:nnNN
- \cs_split_function:N #1
- \exp_not:N #1
- \tl_to_str:n {#2} ,
- \exp_not:N \scan_stop: ,
- \exp_not:N \q_@@_recursion_stop
- }
- }
-\cs_new_protected:Npn \cs_generate_variant:cn
- { \exp_args:Nc \cs_generate_variant:Nn }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_generate_variant:N}
-% \begin{macro}{\@@_generate_variant:ww, \@@_generate_variant:wwNw}
-% The goal here is to pick up protected parent functions. There are
-% four cases: the parent function can be a primitive or a macro, and
-% can be expandable or not. For non-expandable primitives, all
-% variants should be protected; skipping the \cs{else:} branch is safe
-% because non-expandable primitives cannot be \TeX{} conditionals.
-%
-% The other case where variants should be protected is when the parent
-% function is a protected macro: then |protected| appears in the
-% meaning before the first occurrence of |macro|. The |ww| auxiliary
-% removes everything in the meaning string after the first |ma|. We
-% use |ma| rather than the full |macro| because the meaning of the
-% \tn{firstmark} primitive (and four others) can contain an arbitrary
-% string after a leading |firstmark:|. Then, look for |pr| in the
-% part we extracted: no need to look for anything longer: the only
-% strings we can have are an empty string, \verb*|\long |,
-% \verb*|\protected |, \verb*|\protected\long |, |\first|, |\top|,
-% |\bot|, |\splittop|, or |\splitbot|, with |\| replaced by the
-% appropriate escape character. If |pr| appears in the part before
-% |ma|, the first \cs{s_@@_mark} is taken as an argument of the |wwNw|
-% auxiliary, and |#3| is \cs{cs_new_protected:Npe}, otherwise it
-% is \cs{cs_new:Npe}.
-% \begin{macrocode}
-\cs_new_protected:Npe \@@_generate_variant:N #1
- {
- \exp_not:N \exp_after:wN \exp_not:N \if_meaning:w
- \exp_not:N \exp_not:N #1 #1
- \cs_set_eq:NN \exp_not:N \@@_tmp:w \cs_new_protected:Npe
- \exp_not:N \else:
- \exp_not:N \exp_after:wN \exp_not:N \@@_generate_variant:ww
- \exp_not:N \token_to_meaning:N #1 \tl_to_str:n { ma }
- \s_@@_mark
- \s_@@_mark \cs_new_protected:Npe
- \tl_to_str:n { pr }
- \s_@@_mark \cs_new:Npe
- \s_@@_stop
- \exp_not:N \fi:
- }
-\exp_last_unbraced:NNNNo
- \cs_new_protected:Npn \@@_generate_variant:ww
- #1 { \tl_to_str:n { ma } } #2 \s_@@_mark
- { \@@_generate_variant:wwNw #1 }
-\exp_last_unbraced:NNNNo
- \cs_new_protected:Npn \@@_generate_variant:wwNw
- #1 { \tl_to_str:n { pr } } #2 \s_@@_mark #3 #4 \s_@@_stop
- { \cs_set_eq:NN \@@_tmp:w #3 }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_generate_variant:nnNN}
-% \begin{arguments}
-% \item Base name.
-% \item Base signature.
-% \item Boolean.
-% \item Base function.
-% \end{arguments}
-% If the boolean is \cs{c_false_bool}, the base function has no colon
-% and we abort with an error; otherwise, set off a loop through the
-% desired variant forms. The original function is retained as |#4| for
-% efficiency.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_generate_variant:nnNN #1#2#3#4
- {
- \if_meaning:w \c_false_bool #3
- \msg_error:nne { kernel } { missing-colon }
- { \token_to_str:c {#1} }
- \exp_after:wN \@@_use_none_delimit_by_q_recursion_stop:w
- \fi:
- \@@_generate_variant:Nnnw #4 {#1}{#2}
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_generate_variant:Nnnw}
-% \begin{arguments}
-% \item Base function.
-% \item Base name.
-% \item Base signature.
-% \item Beginning of variant signature.
-% \end{arguments}
-% First check whether to terminate the loop over variant forms. Then,
-% for each variant form, construct a new function name using the
-% original base name, the variant signature consisting of $l$ letters
-% and the last $k-l$ letters of the base signature (of length $k$).
-% For example, for a base function \cs{prop_put:Nnn} which needs a
-% |cV| variant form, we want the new signature to be |cVn|.
-%
-% There are further subtleties:
-% \begin{itemize}
-% \item In \cs{cs_generate_variant:Nn} |\foo:nnTF| |{xxTF}|, we must define
-% |\foo:xxTF| using |\exp_args:Nxx|,
-% rather than a hypothetical |\exp_args:NxxTF|. Thus, we wish to
-% trim a common trailing part from the base signature and the
-% variant signature.
-% \item In \cs{cs_generate_variant:Nn} |\foo:on| |{ox}|, the
-% function |\foo:ox| must be defined using |\exp_args:Nnx|, not
-% |\exp_args:Nox|, to avoid double |o| expansion.
-% \item Lastly, \cs{cs_generate_variant:Nn} |\foo:on| |{xn}| must
-% trigger an error, because we do not have a means to replace
-% |o|-expansion by |x|-expansion.
-% More generally, we can only convert |N| to |c|, or convert |n|
-% to |V|, |v|, |o|, |e|, |f|, or |x|.
-% \end{itemize}
-% All this boils down to a few rules. Only |n| and |N|-type
-% arguments can be replaced by \cs{cs_generate_variant:Nn}. Other
-% argument types are allowed to be passed unchanged from the base
-% form to the variant: in the process they are changed to |n|
-% except for |N| and |p|-type arguments. A common trailing
-% part is ignored.
-%
-% We compare the base and variant signatures one character at a time
-% within |e|-expansion. The result is given to
-% \cs{@@_generate_variant:wwNN} (defined later) in the form
-% \meta{processed variant signature} \cs{s_@@_mark} \meta{errors}
-% \cs{s_@@_stop} \meta{base function} \meta{new function}. If all went
-% well, \meta{errors} is empty; otherwise, it is a kernel error
-% message and some clean-up code.
-%
-% Note the space after |#3| and after the following brace group.
-% Those are ignored by \TeX{} when fetching the last argument for
-% \cs{@@_generate_variant_loop:nNwN}, but can be used as a delimiter
-% for \cs{@@_generate_variant_loop_end:nwwwNNnn}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_generate_variant:Nnnw #1#2#3#4 ,
- {
- \if_meaning:w \scan_stop: #4
- \exp_after:wN \@@_use_none_delimit_by_q_recursion_stop:w
- \fi:
- \use:e
- {
- \exp_not:N \@@_generate_variant:wwNN
- \@@_generate_variant_loop:nNwN { }
- #4
- \@@_generate_variant_loop_end:nwwwNNnn
- \s_@@_mark
- #3 ~
- { ~ { } \fi: \@@_generate_variant_loop_long:wNNnn } ~
- { }
- \s_@@_stop
- \exp_not:N #1 {#2} {#4}
- }
- \@@_generate_variant:Nnnw #1 {#2} {#3}
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]
-% {
-% \@@_generate_variant_loop:nNwN,
-% \@@_generate_variant_loop_base:N,
-% \@@_generate_variant_loop_same:w,
-% \@@_generate_variant_loop_end:nwwwNNnn,
-% \@@_generate_variant_loop_long:wNNnn,
-% \@@_generate_variant_loop_invalid:NNwNNnn,
-% \@@_generate_variant_loop_special:NNwNNnn
-% }
-% \begin{arguments}
-% \item Last few consecutive letters common between the base and
-% variant (more precisely, \cs{@@_generate_variant_same:N}
-% \meta{letter} for each letter).
-% \item Next variant letter.
-% \item Remainder of variant form.
-% \item Next base letter.
-% \end{arguments}
-% The first argument is populated by
-% \cs{@@_generate_variant_loop_same:w} when a variant letter and a
-% base letter match. It is flushed into the input stream whenever the
-% two letters are different: if the loop ends before, the argument is
-% dropped, which means that trailing common letters are ignored.
-%
-% The case where the two letters are different is only allowed if the
-% base is |N| and the variant is |c|, or when the base is |n| and the
-% variant is |V|, |v|, |o|, |e|, |f|, or |x|. Otherwise, call
-% \cs{@@_generate_variant_loop_invalid:NNwNNnn} to remove the end of
-% the loop, get arguments at the end of the loop, and place an
-% appropriate error message as a second argument of
-% \cs{@@_generate_variant:wwNN}. If the letters are distinct and the
-% base letter is indeed |n| or |N|, leave in the input stream whatever
-% argument |#1| was collected, and the next variant letter |#2|, then
-% loop by calling \cs{@@_generate_variant_loop:nNwN}.
-%
-% The loop can stop in three ways.
-% \begin{itemize}
-% \item If the end of the variant form is encountered first, |#2| is
-% \cs{@@_generate_variant_loop_end:nwwwNNnn} (expanded by the
-% conditional \cs{if:w}), which inserts some tokens to end the
-% conditional; grabs the \meta{base name} as |#7|, the
-% \meta{variant signature} |#8|, the \meta{next base letter} |#1|
-% and the part |#3| of the base signature that wasn't read yet;
-% and combines those into the \meta{new function} to be defined.
-% \item If the end of the base form is encountered first, |#4| is
-% |~{}\fi:| which ends the conditional (with an empty expansion),
-% followed by \cs{@@_generate_variant_loop_long:wNNnn}, which
-% places an error as the second argument of
-% \cs{@@_generate_variant:wwNN}.
-% \item The loop can be interrupted early if the requested expansion
-% is unavailable, namely when the variant and base letters differ
-% and the base is not the right one (|n| or |N| to support the
-% variant). In that case too an error is placed as the second
-% argument of \cs{@@_generate_variant:wwNN}.
-% \end{itemize}
-% Note that if the variant form has the same length as the base form,
-% |#2| is as described in the first point, and |#4| as described in
-% the second point above. The \cs{@@_generate_variant_loop_end:nwwwNNnn}
-% breaking function takes the empty brace group in |#4| as its first
-% argument: this empty brace group produces the correct signature for
-% the full variant.
-% \begin{macrocode}
-\cs_new:Npn \@@_generate_variant_loop:nNwN #1#2#3 \s_@@_mark #4
- {
- \if:w #2 #4
- \exp_after:wN \@@_generate_variant_loop_same:w
- \else:
- \if:w #4 \@@_generate_variant_loop_base:N #2 \else:
- \if:w 0
- \if:w N #4 \else: \if:w n #4 \else: 1 \fi: \fi:
- \if:w \scan_stop: \@@_generate_variant_loop_base:N #2 1 \fi:
- 0
- \@@_generate_variant_loop_special:NNwNNnn #4#2
- \else:
- \@@_generate_variant_loop_invalid:NNwNNnn #4#2
- \fi:
- \fi:
- \fi:
- #1
- \prg_do_nothing:
- #2
- \@@_generate_variant_loop:nNwN { } #3 \s_@@_mark
- }
-\cs_new:Npn \@@_generate_variant_loop_base:N #1
- {
- \if:w c #1 N \else:
- \if:w o #1 n \else:
- \if:w V #1 n \else:
- \if:w v #1 n \else:
- \if:w f #1 n \else:
- \if:w e #1 n \else:
- \if:w x #1 n \else:
- \if:w n #1 n \else:
- \if:w N #1 N \else:
- \scan_stop:
- \fi:
- \fi:
- \fi:
- \fi:
- \fi:
- \fi:
- \fi:
- \fi:
- \fi:
- }
-\cs_new:Npn \@@_generate_variant_loop_same:w
- #1 \prg_do_nothing: #2#3#4
- { #3 { #1 \@@_generate_variant_same:N #2 } }
-\cs_new:Npn \@@_generate_variant_loop_end:nwwwNNnn
- #1#2 \s_@@_mark #3 ~ #4 \s_@@_stop #5#6#7#8
- {
- \scan_stop: \scan_stop: \fi:
- \s_@@_mark \s_@@_stop
- \exp_not:N #6
- \exp_not:c { #7 : #8 #1 #3 }
- }
-\cs_new:Npn \@@_generate_variant_loop_long:wNNnn #1 \s_@@_stop #2#3#4#5
- {
- \exp_not:n
- {
- \s_@@_mark
- \msg_error:nnee { kernel } { variant-too-long }
- {#5} { \token_to_str:N #3 }
- \use_none:nnn
- \s_@@_stop
- #3
- #3
- }
- }
-\cs_new:Npn \@@_generate_variant_loop_invalid:NNwNNnn
- #1#2 \fi: \fi: \fi: #3 \s_@@_stop #4#5#6#7
- {
- \fi: \fi: \fi:
- \exp_not:n
- {
- \s_@@_mark
- \msg_error:nneeee { kernel } { invalid-variant }
- {#7} { \token_to_str:N #5 } {#1} {#2}
- \use_none:nnn
- \s_@@_stop
- #5
- #5
- }
- }
-\cs_new:Npn \@@_generate_variant_loop_special:NNwNNnn
- #1#2#3 \s_@@_stop #4#5#6#7
- {
- #3 \s_@@_stop #4 #5 {#6} {#7}
- \exp_not:n
- {
- \msg_error:nneeee
- { kernel } { deprecated-variant }
- {#7} { \token_to_str:N #5 } {#1} {#2}
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_generate_variant_same:N}
-% When the base and variant letters are identical, don't do any
-% expansion. For most argument types, we can use the |n|-type
-% no-expansion, but the |N| and |p| types require a slightly different
-% behaviour with respect to braces. For |V|-type this function could
-% output |N| to avoid adding useless braces but that is not a problem.
-% \begin{macrocode}
-\cs_new:Npn \@@_generate_variant_same:N #1
- {
- \if:w N #1 #1 \else:
- \if:w p #1 #1 \else:
- \token_to_str:N n
- \if:w n #1 \else:
- \@@_generate_variant_loop_special:NNwNNnn #1#1
- \fi:
- \fi:
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_generate_variant:wwNN}
-% If the variant form has already been defined, log its existence
-% (provided \texttt{log-functions} is active).
-% Otherwise, make sure that the |\exp_args:N #3| form is defined, and
-% if it contains |x|, change \cs{@@_tmp:w} locally to
-% \cs{cs_new_protected:Npe}. Then define the variant by
-% combining the |\exp_args:N #3| variant and the base function.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_generate_variant:wwNN
- #1 \s_@@_mark #2 \s_@@_stop #3#4
- {
- #2
- \cs_if_free:NT #4
- {
- \group_begin:
- \@@_generate_internal_variant:n {#1}
- \@@_tmp:w #4 { \exp_not:c { exp_args:N #1 } \exp_not:N #3 }
- \group_end:
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_generate_internal_variant:n}
-% \begin{macro}[rEXP]{\@@_generate_internal_variant_loop:n}
-% First test for the presence of |x| (this is where working with
-% strings makes our lives easier), as the result should be protected,
-% and the next variant to be defined using that internal variant
-% should be protected (done by setting \cs{@@_tmp:w}). Then call
-% \cs{@@_generate_internal_variant:NNn} with arguments
-% \cs{cs_new_protected:cpn} \cs{use:x} (for protected) or
-% \cs{cs_new:cpn} \cs{tex_expanded:D} (expandable) and the signature. If |p|
-% appears in the signature, or if the function to be defined is
-% expandable and the primitive \tn{expanded} is not available, or if there
-% are more than $8$ arguments, call
-% some fall-back code that just puts the appropriate |\::| commands.
-% Otherwise, call \cs{@@_generate_internal_one_go:NNn} to construct
-% the \cs[no-index]{exp_args:N\dots} function as a macro taking up to
-% $9$~arguments and expanding them using \cs{use:x} or \cs{tex_expanded:D}.
-% \begin{macrocode}
-\cs_new_protected:Npe \@@_generate_internal_variant:n #1
- {
- \exp_not:N \@@_generate_internal_variant:wwnNwn
- #1 \s_@@_mark
- { \cs_set_eq:NN \exp_not:N \@@_tmp:w \cs_new_protected:Npe }
- \cs_new_protected:cpn
- \use:x
- \token_to_str:N x \s_@@_mark
- { }
- \cs_new:cpn
- \exp_not:N \tex_expanded:D
- \s_@@_stop
- {#1}
- }
-\exp_last_unbraced:NNNNo
- \cs_new_protected:Npn \@@_generate_internal_variant:wwnNwn #1
- { \token_to_str:N x } #2 \s_@@_mark #3#4#5#6 \s_@@_stop #7
- {
- #3
- \cs_if_free:cT { exp_args:N #7 }
- { \@@_generate_internal_variant:NNn #4 #5 {#7} }
- }
-\cs_set_protected:Npn \@@_tmp:w #1
- {
- \cs_new_protected:Npn \@@_generate_internal_variant:NNn ##1##2##3
- {
- \if_catcode:w X \use_none:nnnnnnnn ##3
- \prg_do_nothing: \prg_do_nothing: \prg_do_nothing:
- \prg_do_nothing: \prg_do_nothing: \prg_do_nothing:
- \prg_do_nothing: \prg_do_nothing: X
- \exp_after:wN \@@_generate_internal_test:Nw \exp_after:wN ##2
- \else:
- \exp_after:wN \@@_generate_internal_test_aux:w \exp_after:wN #1
- \fi:
- ##3
- \s_@@_mark
- {
- \use:e
- {
- ##1 { exp_args:N ##3 }
- { \@@_generate_internal_variant_loop:n ##3 { : \use_i:nn } }
- }
- }
- #1
- \s_@@_mark
- { \exp_not:n { \@@_generate_internal_one_go:NNn ##1 ##2 {##3} } }
- \s_@@_stop
- }
- \cs_new_protected:Npn \@@_generate_internal_test_aux:w
- ##1 #1 ##2 \s_@@_mark ##3 ##4 \s_@@_stop {##3}
- \cs_new_eq:NN \@@_generate_internal_test:Nw
- \@@_generate_internal_test_aux:w
- }
-\exp_args:No \@@_tmp:w { \token_to_str:N p }
-\cs_new_protected:Npn \@@_generate_internal_one_go:NNn #1#2#3
- {
- \@@_generate_internal_loop:nwnnw
- { \exp_not:N ##1 } 1 . { } { }
- #3 { ? \@@_generate_internal_end:w } X ;
- 23456789 { ? \@@_generate_internal_long:w } ;
- #1 #2 {#3}
- }
-\cs_new_protected:Npn \@@_generate_internal_loop:nwnnw #1#2 . #3#4#5#6 ; #7
- {
- \use_none:n #5
- \use_none:n #7
- \cs_if_exist_use:cF { @@_generate_internal_#5:NN }
- { \@@_generate_internal_other:NN }
- #5 #7
- #7 .
- { #3 #1 } { #4 ## #2 }
- #6 ;
- }
-\cs_new_protected:Npn \@@_generate_internal_N:NN #1#2
- { \@@_generate_internal_loop:nwnnw { \exp_not:N ###2 } }
-\cs_new_protected:Npn \@@_generate_internal_c:NN #1#2
- { \exp_args:No \@@_generate_internal_loop:nwnnw { \exp_not:c {###2} } }
-\cs_new_protected:Npn \@@_generate_internal_n:NN #1#2
- { \@@_generate_internal_loop:nwnnw { { \exp_not:n {###2} } } }
-\cs_new_protected:Npn \@@_generate_internal_x:NN #1#2
- { \@@_generate_internal_loop:nwnnw { {###2} } }
-\cs_new_protected:Npn \@@_generate_internal_other:NN #1#2
- {
- \exp_args:No \@@_generate_internal_loop:nwnnw
- {
- \exp_after:wN
- {
- \exp:w \exp_args:NNc \exp_after:wN \exp_end:
- { exp_not:#1 } {###2}
- }
- }
- }
-\cs_new_protected:Npn \@@_generate_internal_end:w #1 . #2#3#4 ; #5 ; #6#7#8
- { #6 { exp_args:N #8 } #3 { #7 {#2} } }
-\cs_new_protected:Npn \@@_generate_internal_long:w #1 N #2#3 . #4#5#6#
- {
- \exp_args:Nx \@@_generate_internal_long:nnnNNn
- { \@@_generate_internal_variant_loop:n #2 #6 { : \use_i:nn } }
- {#4} {#5}
- }
-\cs_new:Npn \@@_generate_internal_long:nnnNNn #1#2#3#4 ; ; #5#6#7
- { #5 { exp_args:N #7 } #3 { #6 { \exp_not:n {#1} {#2} } } }
-% \end{macrocode}
-% This command grabs char by char outputting |\::#1| (not expanded
-% further). We avoid tests by putting a trailing |: \use_i:nn|, which
-% leaves \cs{cs_end:} and removes the looping macro. The colon is in
-% fact also turned into \cs{:::} so that the required structure for
-% |\exp_args:N...| commands is correctly terminated.
-% \begin{macrocode}
-\cs_new:Npn \@@_generate_internal_variant_loop:n #1
- {
- \exp_after:wN \exp_not:N \cs:w :: #1 \cs_end:
- \@@_generate_internal_variant_loop:n
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \prg_generate_conditional_variant:Nnn,
-% \@@_generate_variant:nnNnn,
-% \@@_generate_variant:w,
-% \@@_generate_variant:n,
-% \@@_generate_variant_p_form:nnn,
-% \@@_generate_variant_T_form:nnn,
-% \@@_generate_variant_F_form:nnn,
-% \@@_generate_variant_TF_form:nnn,
-% }
-% \begin{macrocode}
-\cs_new_protected:Npn \prg_generate_conditional_variant:Nnn #1
- {
- \use:e
- {
- \@@_generate_variant:nnNnn
- \cs_split_function:N #1
- }
- }
-\cs_new_protected:Npn \@@_generate_variant:nnNnn #1#2#3#4#5
- {
- \if_meaning:w \c_false_bool #3
- \msg_error:nne { kernel } { missing-colon }
- { \token_to_str:c {#1} }
- \@@_use_i_delimit_by_s_stop:nw
- \fi:
- \exp_after:wN \@@_generate_variant:w
- \tl_to_str:n {#5} , \scan_stop: , \q_@@_recursion_stop
- \@@_use_none_delimit_by_s_stop:w \s_@@_mark {#1} {#2} {#4} \s_@@_stop
- }
-\cs_new_protected:Npn \@@_generate_variant:w
- #1 , #2 \s_@@_mark #3#4#5
- {
- \if_meaning:w \scan_stop: #1 \scan_stop:
- \if_meaning:w \q_@@_nil #1 \q_@@_nil
- \use_i:nnn
- \fi:
- \exp_after:wN \@@_use_none_delimit_by_q_recursion_stop:w
- \else:
- \cs_if_exist_use:cTF { @@_generate_variant_#1_form:nnn }
- { {#3} {#4} {#5} }
- {
- \msg_error:nnee
- { kernel } { conditional-form-unknown }
- {#1} { \token_to_str:c { #3 : #4 } }
- }
- \fi:
- \@@_generate_variant:w #2 \s_@@_mark {#3} {#4} {#5}
- }
-\cs_new_protected:Npn \@@_generate_variant_p_form:nnn #1#2
- { \cs_generate_variant:cn { #1 _p : #2 } }
-\cs_new_protected:Npn \@@_generate_variant_T_form:nnn #1#2
- { \cs_generate_variant:cn { #1 : #2 T } }
-\cs_new_protected:Npn \@@_generate_variant_F_form:nnn #1#2
- { \cs_generate_variant:cn { #1 : #2 F } }
-\cs_new_protected:Npn \@@_generate_variant_TF_form:nnn #1#2
- { \cs_generate_variant:cn { #1 : #2 TF } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\exp_args_generate:n}
-% This function is not used in the kernel hence we can use functions
-% that are defined in later modules. It also does not need to be fast
-% so use inline mappings. For each requested variant we check that
-% there are no characters besides |NnpcofVvx|, in particular that
-% there are no spaces. Then we just call the internal function.
-% \begin{macrocode}
-\cs_new_protected:Npn \exp_args_generate:n #1
- {
- \exp_args:No \clist_map_inline:nn { \tl_to_str:n {#1} }
- {
- \str_map_inline:nn {##1}
- {
- \str_if_in:nnF { NnpcofeVvx } {####1}
- {
- \msg_error:nnnn { kernel } { invalid-exp-args }
- {####1} {##1}
- \str_map_break:n { \use_none:nn }
- }
- }
- \@@_generate_internal_variant:n {##1}
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Definitions with the automated technique}
-% \label{sec:l3expan:gendef}
-%
-% Some of these could be done more efficiently, but the complexity of
-% coding then becomes an issue. Notice that the auto-generated functions
-% actually take no arguments themselves.
-%
-% \begin{macro}[EXP]
-% {
-% \exp_args:Nnc, \exp_args:Nno, \exp_args:NnV, \exp_args:Nnv, \exp_args:Nne, \exp_args:Nnf,
-% \exp_args:Noc, \exp_args:Noo, \exp_args:Nof,
-% \exp_args:NVo, \exp_args:Nfo, \exp_args:Nff, \exp_args:Nee
-% }
-% \begin{macro}
-% {
-% \exp_args:NNx, \exp_args:Ncx, \exp_args:Nnx,
-% \exp_args:Nox, \exp_args:Nxo, \exp_args:Nxx,
-% }
-% Here are the actual function definitions, using the helper
-% functions above. The group is used because
-% \cs{@@_generate_internal_variant:n} redefines \cs{@@_tmp:w} locally.
-% \begin{macrocode}
-\cs_set_protected:Npn \@@_tmp:w #1
- {
- \group_begin:
- \exp_args:No \@@_generate_internal_variant:n
- { \tl_to_str:n {#1} }
- \group_end:
- }
-\@@_tmp:w { nc }
-\@@_tmp:w { no }
-\@@_tmp:w { nV }
-\@@_tmp:w { nv }
-\@@_tmp:w { ne }
-\@@_tmp:w { nf }
-\@@_tmp:w { oc }
-\@@_tmp:w { oo }
-\@@_tmp:w { of }
-\@@_tmp:w { Vo }
-\@@_tmp:w { fo }
-\@@_tmp:w { ff }
-\@@_tmp:w { ee }
-\@@_tmp:w { Nx }
-\@@_tmp:w { cx }
-\@@_tmp:w { nx }
-\@@_tmp:w { ox }
-\@@_tmp:w { xo }
-\@@_tmp:w { xx }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {
-% \exp_args:NNcf,
-% \exp_args:NNno, \exp_args:NNnV, \exp_args:NNoo, \exp_args:NNVV,
-% \exp_args:Ncno, \exp_args:NcnV, \exp_args:Ncoo, \exp_args:NcVV,
-% \exp_args:Nnnc, \exp_args:Nnno, \exp_args:Nnnf, \exp_args:Nnff,
-% \exp_args:Nooo, \exp_args:Noof, \exp_args:Nffo, \exp_args:Neee
-% }
-% \begin{macro}
-% {
-% \exp_args:NNNx, \exp_args:NNnx, \exp_args:NNox,
-% \exp_args:Nccx, \exp_args:Ncnx,
-% \exp_args:Nnnx, \exp_args:Nnox, \exp_args:Noox,
-% }
-% \begin{macrocode}
-\@@_tmp:w { Ncf }
-\@@_tmp:w { Nno }
-\@@_tmp:w { NnV }
-\@@_tmp:w { Noo }
-\@@_tmp:w { NVV }
-\@@_tmp:w { cno }
-\@@_tmp:w { cnV }
-\@@_tmp:w { coo }
-\@@_tmp:w { cVV }
-\@@_tmp:w { nnc }
-\@@_tmp:w { nno }
-\@@_tmp:w { nnf }
-\@@_tmp:w { nff }
-\@@_tmp:w { ooo }
-\@@_tmp:w { oof }
-\@@_tmp:w { ffo }
-\@@_tmp:w { eee }
-\@@_tmp:w { NNx }
-\@@_tmp:w { Nnx }
-\@@_tmp:w { Nox }
-\@@_tmp:w { nnx }
-\@@_tmp:w { nox }
-\@@_tmp:w { ccx }
-\@@_tmp:w { cnx }
-\@@_tmp:w { oox }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Held-over variant generation}
-%
-% \begin{macro}[documented-as = \cs_generate_from_arg_count:NNnn]
-% {\cs_generate_from_arg_count:NNno}
-% \begin{macro}[documented-as = \cs_replacement_spec:N]{\cs_replacement_spec:c}
-% A couple of variants that are from early functions.
-% \begin{macrocode}
-\cs_generate_variant:Nn \cs_generate_from_arg_count:NNnn { NNno }
-\cs_generate_variant:Nn \cs_replacement_spec:N { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3file.dtx b/macros/latex/contrib/l3kernel/l3file.dtx
deleted file mode 100644
index 3a4d1c06dc..0000000000
--- a/macros/latex/contrib/l3kernel/l3file.dtx
+++ /dev/null
@@ -1,4019 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3file.dtx
-%
-% Copyright (C) 1990-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
-\DocInput{\jobname.dtx}
-\PrintIndex
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3file} module\\ File and I/O operations^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% This module provides functions for working with external files. Some of these
-% functions apply to an entire file, and have prefix \cs[no-index]{file_\ldots}, while
-% others are used to work with files on a line by line basis and have prefix
-% \cs[no-index]{ior_\ldots} (reading) or \cs[no-index]{iow_\ldots} (writing).
-%
-% It is important to remember that when reading external files \TeX{}
-% attempts to locate them using both the operating system path and entries in the
-% \TeX{} file database (most \TeX{} systems use such a database). Thus the
-% \enquote{current path} for \TeX{} is somewhat broader than that for other
-% programs.
-%
-% For functions which expect a \meta{file name} argument, this argument
-% may contain both literal items and expandable content, which should on
-% full expansion be the desired file name. Active characters (as
-% declared in \cs{l_char_active_seq}) are \emph{not} expanded,
-% allowing the direct use of these in file names. Quote tokens (|"|) are
-% not permitted in file names as they are reserved for internal use by some
-% \TeX{} primitives.
-%
-% Spaces are trimmed at the beginning and end of the file name:
-% this reflects the fact that some file systems do not allow or interact
-% unpredictably with spaces in these positions. When no extension is given,
-% this will trim spaces from the start of the name only.
-%
-% \section{Input--output stream management}
-%
-% As \TeX{} engines have a limited number of input and output streams, direct
-% use of the streams by the programmer is not supported in \LaTeX3. Instead, an
-% internal pool of streams is maintained, and these are allocated and
-% deallocated as needed by other modules. As a result, the programmer should
-% close streams when they are no longer needed, to release them for other
-% processes.
-%
-% Note that I/O operations are global: streams should all be declared
-% with global names and treated accordingly.
-%
-% \begin{function}[added = 2011-09-26, updated = 2011-12-27]
-% {\ior_new:N, \ior_new:c, \iow_new:N, \iow_new:c}
-% \begin{syntax}
-% \cs{ior_new:N} \meta{stream}
-% \cs{iow_new:N} \meta{stream}
-% \end{syntax}
-% Globally reserves the name of the \meta{stream}, either for reading
-% or for writing as appropriate. The \meta{stream} is not opened until
-% the appropriate \cs[no-index]{\ldots_open:Nn} function is used. Attempting to
-% use a \meta{stream} which has not been opened is an error, and the
-% \meta{stream} will behave as the corresponding \cs[no-index]{c_term_\ldots}.
-% \end{function}
-%
-% \begin{function}[updated = 2012-02-10]{\ior_open:Nn, \ior_open:cn}
-% \begin{syntax}
-% \cs{ior_open:Nn} \meta{stream} \Arg{file name}
-% \end{syntax}
-% Opens \meta{file name} for reading using \meta{stream} as the
-% control sequence for file access. If the \meta{stream} was already
-% open it is closed before the new operation begins. The
-% \meta{stream} is available for access immediately and will remain
-% allocated to \meta{file name} until a \cs{ior_close:N} instruction
-% is given or the \TeX{} run ends.
-% If the file is not found, an error is raised.
-% \end{function}
-%
-% \begin{function}[added = 2013-01-12, TF]{\ior_open:Nn, \ior_open:cn}
-% \begin{syntax}
-% \cs{ior_open:NnTF} \meta{stream} \Arg{file name} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Opens \meta{file name} for reading using \meta{stream} as the
-% control sequence for file access. If the \meta{stream} was already
-% open it is closed before the new operation begins. The
-% \meta{stream} is available for access immediately and will remain
-% allocated to \meta{file name} until a \cs{ior_close:N} instruction
-% is given or the \TeX{} run ends. The \meta{true code} is then inserted
-% into the input stream. If the file is not found, no error is raised and
-% the \meta{false code} is inserted into the input stream.
-% \end{function}
-%
-% \begin{function}[updated = 2012-02-09]
-% {\iow_open:Nn, \iow_open:NV, \iow_open:cn, \iow_open:cV}
-% \begin{syntax}
-% \cs{iow_open:Nn} \meta{stream} \Arg{file name}
-% \end{syntax}
-% Opens \meta{file name} for writing using \meta{stream} as the
-% control sequence for file access. If the \meta{stream} was already
-% open it is closed before the new operation begins. The
-% \meta{stream} is available for access immediately and will remain
-% allocated to \meta{file name} until a \cs{iow_close:N} instruction
-% is given or the \TeX{} run ends. Opening a file for writing clears
-% any existing content in the file (\emph{i.e.}~writing is \emph{not}
-% additive).
-% \end{function}
-%
-% \begin{function}[added = 2019-05-08]{\ior_shell_open:Nn}
-% \begin{syntax}
-% \cs{ior_shell_open:Nn} \meta{stream} \Arg{shell~command}
-% \end{syntax}
-% Opens the \emph{pseudo}-file created by the output of the
-% \meta{shell command} for reading using \meta{stream} as the
-% control sequence for access. If the \meta{stream} was already
-% open it is closed before the new operation begins. The
-% \meta{stream} is available for access immediately and will remain
-% allocated to \meta{shell command} until a \cs{ior_close:N} instruction
-% is given or the \TeX{} run ends.
-% If piped system calls are disabled an error is raised.
-%
-% For details of handling of the \meta{shell command}, see
-% \cs{sys_get_shell:nnNTF}.
-% \end{function}
-%
-% \begin{function}[added = 2023-05-25]{\iow_shell_open:Nn}
-% \begin{syntax}
-% \cs{iow_shell_open:Nn} \meta{stream} \Arg{shell~command}
-% \end{syntax}
-% Opens the \emph{pseudo}-file created by the output of the
-% \meta{shell command} for writing using \meta{stream} as the
-% control sequence for access. If the \meta{stream} was already
-% open it is closed before the new operation begins. The
-% \meta{stream} is available for access immediately and will remain
-% allocated to \meta{shell command} until a \cs{iow_close:N} instruction
-% is given or the \TeX{} run ends.
-% If piped system calls are disabled an error is raised.
-%
-% For details of handling of the \meta{shell command}, see
-% \cs{sys_get_shell:nnNTF}.
-% \end{function}
-%
-% \begin{function}[updated = 2012-07-31]
-% {\ior_close:N, \ior_close:c, \iow_close:N, \iow_close:c}
-% \begin{syntax}
-% \cs{ior_close:N} \meta{stream}
-% \cs{iow_close:N} \meta{stream}
-% \end{syntax}
-% Closes the \meta{stream}. Streams should always be closed when
-% they are finished with as this ensures that they remain available
-% to other programmers.
-% \end{function}
-%
-% \begin{function}[added = 2021-05-11]
-% {
-% \ior_show:N, \ior_show:c, \ior_log:N, \ior_log:c,
-% \iow_show:N, \iow_show:c, \iow_log:N, \iow_log:c
-% }
-% \begin{syntax}
-% \cs{ior_show:N} \meta{stream}
-% \cs{ior_log:N} \meta{stream}
-% \cs{iow_show:N} \meta{stream}
-% \cs{iow_log:N} \meta{stream}
-% \end{syntax}
-% Display (to the terminal or log file) the file name associated to
-% the (read or write) \meta{stream}.
-% \end{function}
-%
-% \begin{function}[added = 2017-06-27]
-% {
-% \ior_show_list:, \ior_log_list:,
-% \iow_show_list:, \iow_log_list:
-% }
-% \begin{syntax}
-% \cs{ior_show_list:}
-% \cs{ior_log_list:}
-% \cs{iow_show_list:}
-% \cs{iow_log_list:}
-% \end{syntax}
-% Display (to the terminal or log file) a list of the file names
-% associated with each open (read or write) stream. This is intended
-% for tracking down problems.
-% \end{function}
-%
-% \subsection{Reading from files}
-%
-% Reading from files and reading from the terminal are separate processes in
-% \pkg{expl3}. The functions \cs{ior_get:NN} and \cs{ior_str_get:NN}, and their
-% branching equivalents, are designed to work with \emph{files}.
-%
-% \begin{function}[noTF, added = 2012-06-24, updated = 2019-03-23]{\ior_get:NN}
-% \begin{syntax}
-% \cs{ior_get:NN} \meta{stream} \meta{token list variable}
-% \cs{ior_get:NNTF} \meta{stream} \meta{token list variable} \meta{true code} \meta{false code}
-% \end{syntax}
-% Function that reads one or more lines (until an equal number of left
-% and right braces are found) from the file input \meta{stream} and stores
-% the result locally in the \meta{token list} variable.
-% The material read from the \meta{stream} is tokenized by \TeX{}
-% according to the category codes and \tn{endlinechar} in force when
-% the function is used. Assuming normal settings, any lines which do
-% not end in a comment character~|%| have the line ending
-% converted to a space, so for example input
-% \begin{verbatim}
-% a b c
-% \end{verbatim}
-% results in a token list \verb*|a b c |. Any blank line is
-% converted to the token \cs{par}. Therefore, blank lines can be
-% skipped by using a test such as
-% \begin{verbatim}
-% \ior_get:NN \l_my_stream \l_tmpa_tl
-% \tl_set:Nn \l_tmpb_tl { \par }
-% \tl_if_eq:NNF \l_tmpa_tl \l_tmpb_tl
-% ...
-% \end{verbatim}
-% Also notice that if multiple lines are read to match braces
-% then the resulting token list can contain \cs{par} tokens.
-% In the non-branching version, where the \meta{stream} is not open
-% the \meta{tl var} is set to \cs{q_no_value}.
-% \begin{texnote}
-% This protected macro is a wrapper around the \TeX{} primitive
-% \tn{read}. Regardless of settings, \TeX{} replaces trailing space
-% and tab characters (character codes 32 and~9) in each line by an
-% end-of-line character (character code \tn{endlinechar}, omitted if
-% \tn{endlinechar} is negative or too large) before turning
-% characters into tokens according to current category codes. With
-% default settings, spaces appearing at the beginning of lines are
-% also ignored.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[noTF, added = 2016-12-04, updated = 2019-03-23]
-% {\ior_str_get:NN}
-% \begin{syntax}
-% \cs{ior_str_get:NN} \meta{stream} \meta{token list variable}
-% \cs{ior_str_get:NNTF} \meta{stream} \meta{token list variable} \meta{true code} \meta{false code}
-% \end{syntax}
-% Function that reads one line from the file input \meta{stream} and stores
-% the result locally in the \meta{token list} variable.
-% The material is read from the \meta{stream} as a series of tokens with
-% category code $12$ (other), with the exception of space
-% characters which are given category code $10$ (space).
-% Multiple whitespace characters are retained by this process. It
-% always only reads one line and any blank lines in the input
-% result in the \meta{token list variable} being empty. Unlike
-% \cs{ior_get:NN}, line ends do not receive any special treatment. Thus
-% input
-% \begin{verbatim}
-% a b c
-% \end{verbatim}
-% results in a token list |a b c| with the letters |a|, |b|, and |c|
-% having category code~12.
-% In the non-branching version, where the\meta{stream} is not open
-% the \meta{tl var} is set to \cs{q_no_value}.
-% \begin{texnote}
-% This protected macro is a wrapper around the \eTeX{} primitive
-% \tn{readline}. Regardless of settings, \TeX{} removes trailing
-% space and tab characters (character codes 32 and~9). However, the
-% end-line character normally added by this primitive is not
-% included in the result of \cs{ior_str_get:NN}.
-% \end{texnote}
-% \end{function}
-%
-% All mappings are done at the current group level, \emph{i.e.}~any
-% local assignments made by the \meta{function} or \meta{code} discussed
-% below remain in effect after the loop.
-%
-% \begin{function}[added = 2012-02-11]{\ior_map_inline:Nn}
-% \begin{syntax}
-% \cs{ior_map_inline:Nn} \meta{stream} \Arg{inline function}
-% \end{syntax}
-% Applies the \meta{inline function} to each set of \meta{lines}
-% obtained by calling \cs{ior_get:NN} until reaching the end of the
-% file. \TeX{} ignores any trailing new-line marker from the file it
-% reads. The \meta{inline function} should consist of code which
-% receives the \meta{line} as |#1|.
-% \end{function}
-%
-% \begin{function}[added = 2012-02-11]{\ior_str_map_inline:Nn}
-% \begin{syntax}
-% \cs{ior_str_map_inline:Nn} \meta{stream} \Arg{inline function}
-% \end{syntax}
-% Applies the \meta{inline function} to every \meta{line}
-% in the \meta{stream}. The material is read from the \meta{stream}
-% as a series of tokens with category code $12$ (other), with the
-% exception of space characters which are given category code $10$
-% (space). The \meta{inline function} should consist of code which
-% receives the \meta{line} as |#1|.
-% Note that \TeX{} removes trailing space and tab characters
-% (character codes 32 and 9) from every line upon input. \TeX{} also
-% ignores any trailing new-line marker from the file it reads.
-% \end{function}
-%
-% \begin{function}[added = 2019-01-13]{\ior_map_variable:NNn}
-% \begin{syntax}
-% \cs{ior_map_variable:NNn} \meta{stream} \meta{tl~var} \Arg{code}
-% \end{syntax}
-% For each set of \meta{lines} obtained by calling \cs{ior_get:NN}
-% until reaching the end of the file, stores the \meta{lines} in the
-% \meta{tl~var} then applies the \meta{code}. The \meta{code} will
-% usually make use of the \meta{variable}, but this is not enforced.
-% The assignments to the \meta{variable} are local.
-% Its value after the loop is the last set of \meta{lines}, or its
-% original value if the \meta{stream} is empty. \TeX{} ignores
-% any trailing new-line marker from the file it reads.
-% This function is typically faster than \cs{ior_map_inline:Nn}.
-% \end{function}
-%
-% \begin{function}[added = 2019-01-13]{\ior_str_map_variable:NNn}
-% \begin{syntax}
-% \cs{ior_str_map_variable:NNn} \meta{stream} \meta{variable} \Arg{code}
-% \end{syntax}
-% For each \meta{line} in the \meta{stream}, stores the \meta{line} in
-% the \meta{variable} then applies the \meta{code}. The material is
-% read from the \meta{stream} as a series of tokens with category code
-% $12$ (other), with the exception of space characters which are given
-% category code $10$ (space). The \meta{code} will usually make use
-% of the \meta{variable}, but this is not enforced. The assignments
-% to the \meta{variable} are local. Its value after the loop is the
-% last \meta{line}, or its original value if the \meta{stream} is
-% empty. Note that \TeX{} removes trailing
-% space and tab characters (character codes 32 and 9) from every line
-% upon input. \TeX{} also ignores any trailing new-line marker from
-% the file it reads.
-% This function is typically faster than \cs{ior_str_map_inline:Nn}.
-% \end{function}
-%
-% \begin{function}[added = 2012-06-29]{\ior_map_break:}
-% \begin{syntax}
-% \cs{ior_map_break:}
-% \end{syntax}
-% Used to terminate a \cs[no-index]{ior_map_\ldots} function before all
-% lines from the \meta{stream} have been processed. This
-% normally takes place within a conditional statement, for example
-% \begin{verbatim}
-% \ior_map_inline:Nn \l_my_ior
-% {
-% \str_if_eq:nnTF { #1 } { bingo }
-% { \ior_map_break: }
-% {
-% % Do something useful
-% }
-% }
-% \end{verbatim}
-% Use outside of a \cs[no-index]{ior_map_\ldots} scenario leads to low
-% level \TeX{} errors.
-% \begin{texnote}
-% When the mapping is broken, additional tokens may be inserted
-% before further items are taken
-% from the input stream. This depends on the design of the mapping
-% function.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[added = 2012-06-29]{\ior_map_break:n}
-% \begin{syntax}
-% \cs{ior_map_break:n} \Arg{code}
-% \end{syntax}
-% Used to terminate a \cs[no-index]{ior_map_\ldots} function before all
-% lines in the \meta{stream} have been processed, inserting
-% the \meta{code} after the mapping has ended. This
-% normally takes place within a conditional statement, for example
-% \begin{verbatim}
-% \ior_map_inline:Nn \l_my_ior
-% {
-% \str_if_eq:nnTF { #1 } { bingo }
-% { \ior_map_break:n { <code> } }
-% {
-% % Do something useful
-% }
-% }
-% \end{verbatim}
-% Use outside of a \cs[no-index]{ior_map_\ldots} scenario leads to low
-% level \TeX{} errors.
-% \begin{texnote}
-% When the mapping is broken, additional tokens may be inserted
-% before the \meta{code} is
-% inserted into the input stream.
-% This depends on the design of the mapping function.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[updated = 2012-02-10, EXP, pTF]{\ior_if_eof:N}
-% \begin{syntax}
-% \cs{ior_if_eof_p:N} \meta{stream} \\
-% \cs{ior_if_eof:NTF} \meta{stream} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the end of a file \meta{stream} has been reached during a reading
-% operation. The test also returns a \texttt{true} value if
-% the \meta{stream} is not open.
-% \end{function}
-%
-% \subsection{Reading from the terminal}
-%
-% \begin{function}[added = 2019-03-23]{\ior_get_term:nN, \ior_str_get_term:nN}
-% \begin{syntax}
-% \cs{ior_get_term:nN} \meta{prompt} \meta{token list variable}
-% \end{syntax}
-% Function that reads one or more lines (until an equal number of left
-% and right braces are found) from the terminal and stores
-% the result locally in the \meta{token list} variable. Tokenization
-% occurs as described for \cs{ior_get:NN} or \cs{ior_str_get:NN}, respectively.
-% When the \meta{prompt}
-% is empty, \TeX{} will wait for input without any other indication:
-% typically the programmer will have provided a suitable text using
-% e.g.~\cs{iow_term:n}. Where the \meta{prompt} is given, it will appear
-% in the terminal followed by an |=|, e.g.
-% \begin{verbatim}
-% prompt=
-% \end{verbatim}
-% \end{function}
-%
-% \subsection{Writing to files}
-%
-% \begin{function}[updated = 2012-06-05]
-% {
-% \iow_now:Nn, \iow_now:NV, \iow_now:Ne,
-% \iow_now:cn, \iow_now:cV, \iow_now:ce
-% }
-% \begin{syntax}
-% \cs{iow_now:Nn} \meta{stream} \Arg{tokens}
-% \end{syntax}
-% This function writes \meta{tokens} to the specified
-% \meta{stream} immediately (\emph{i.e.}~the write operation is called
-% on expansion of \cs{iow_now:Nn}).
-% \end{function}
-%
-% \begin{function}{\iow_log:n, \iow_log:e}
-% \begin{syntax}
-% \cs{iow_log:n} \Arg{tokens}
-% \end{syntax}
-% This function writes the given \meta{tokens} to the log (transcript)
-% file immediately: it is a dedicated version of \cs{iow_now:Nn}.
-% \end{function}
-%
-% \begin{function}{\iow_term:n, \iow_term:e}
-% \begin{syntax}
-% \cs{iow_term:n} \Arg{tokens}
-% \end{syntax}
-% This function writes the given \meta{tokens} to the terminal
-% file immediately: it is a dedicated version of \cs{iow_now:Nn}.
-% \end{function}
-%
-% \begin{function}
-% {
-% \iow_shipout:Nn, \iow_shipout:Ne,
-% \iow_shipout:cn, \iow_shipout:ce
-% }
-% \begin{syntax}
-% \cs{iow_shipout:Nn} \meta{stream} \Arg{tokens}
-% \end{syntax}
-% This function writes \meta{tokens} to the specified
-% \meta{stream} when the current page is finalised (\emph{i.e.}~at
-% shipout). The \texttt{e}-type variants expand the \meta{tokens}
-% at the point where the function is used but \emph{not} when the
-% resulting tokens are written to the \meta{stream}
-% (\emph{cf.}~\cs{iow_shipout_e:Nn}).
-% \begin{texnote}
-% When using \pkg{expl3} with a format other than \LaTeX{}, new line
-% characters inserted using \cs{iow_newline:} or using the
-% line-wrapping code \cs{iow_wrap:nnnN} are not recognized in
-% the argument of \cs{iow_shipout:Nn}. This may lead to the
-% insertion of additional unwanted line-breaks.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[updated = 2023-09-17]
-% {
-% \iow_shipout_e:Nn, \iow_shipout_e:Ne,
-% \iow_shipout_e:cn, \iow_shipout_e:ce
-% }
-% \begin{syntax}
-% \cs{iow_shipout_e:Nn} \meta{stream} \Arg{tokens}
-% \end{syntax}
-% This function writes \meta{tokens} to the specified
-% \meta{stream} when the current page is finalised (\emph{i.e.}~at
-% shipout). The \meta{tokens} are expanded at the time of writing
-% in addition to any expansion when the function is used. This makes
-% these functions suitable for including material finalised during
-% the page building process (such as the page number integer).
-% \begin{texnote}
-% This is a wrapper around the \TeX{} primitive \tn{write}.
-% When using \pkg{expl3} with a format other than \LaTeX{}, new line
-% characters inserted using \cs{iow_newline:} or using the
-% line-wrapping code \cs{iow_wrap:nnnN} are not recognized in
-% the argument of \cs{iow_shipout:Nn}. This may lead to the
-% insertion of additional unwanted line-breaks.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[EXP]{\iow_char:N}
-% \begin{syntax}
-% \cs{iow_char:N} |\|\meta{char}
-% \end{syntax}
-% Inserts \meta{char} into the output stream. Useful when trying to
-% write difficult characters such as |%|, |{|, |}|,
-% \emph{etc.}~in messages, for example:
-% \begin{verbatim}
-% \iow_now:Ne \g_my_iow { \iow_char:N \{ text \iow_char:N \} }
-% \end{verbatim}
-% The function has no effect if writing is taking place without
-% expansion (\emph{e.g.}~in the second argument of \cs{iow_now:Nn}).
-% \end{function}
-%
-% \begin{function}[EXP]{\iow_newline:}
-% \begin{syntax}
-% \cs{iow_newline:}
-% \end{syntax}
-% Function to add a new line within the \meta{tokens} written to a
-% file. The function has no effect if writing is taking place without
-% expansion (\emph{e.g.}~in the second argument of \cs{iow_now:Nn}).
-% \begin{texnote}
-% When using \pkg{expl3} with a format other than \LaTeX{}, the
-% character inserted by \cs{iow_newline:} is not recognized by
-% \TeX{}, which may lead to the insertion of additional unwanted
-% line-breaks. This issue only affects \cs{iow_shipout:Nn},
-% \cs{iow_shipout_e:Nn} and direct uses of primitive operations.
-% \end{texnote}
-% \end{function}
-%
-% \subsection{Wrapping lines in output}
-%
-% \begin{function}[added = 2012-06-28, updated = 2017-12-04]
-% {\iow_wrap:nnnN, \iow_wrap:nenN}
-% \begin{syntax}
-% \cs{iow_wrap:nnnN} \Arg{text} \Arg{run-on text} \Arg{set up} \meta{function}
-% \end{syntax}
-% This function wraps the \meta{text} to a fixed number of
-% characters per line. At the start of each line which is wrapped,
-% the \meta{run-on text} is inserted. The line character count
-% targeted is the value of \cs{l_iow_line_count_int} minus the
-% number of characters in the \meta{run-on text} for all lines except
-% the first, for which the target number of characters is simply
-% \cs{l_iow_line_count_int} since there is no run-on text. The
-% \meta{text} and \meta{run-on text} are exhaustively expanded by the
-% function, with the following substitutions:
-% \begin{itemize}
-% \item |\\| or \cs{iow_newline:} may be used to force a new line,
-% \item \verb*|\ | may be used to represent a forced space
-% (for example after a control sequence),
-% \item |\#|, |\%|, |\{|, |\}|, |\~| may be used to represent
-% the corresponding character,
-% \item \cs{iow_wrap_allow_break:} may be used to allow a line-break
-% without inserting a space,
-% \item \cs{iow_indent:n} may be used to indent a part of the
-% \meta{text} (not the \meta{run-on text}).
-% \end{itemize}
-% Additional functions may be added to the wrapping by using the
-% \meta{set up}, which is executed before the wrapping takes place: this
-% may include overriding the substitutions listed.
-%
-% Any expandable material in the \meta{text} which is not to be expanded
-% on wrapping should be converted to a string using \cs{token_to_str:N},
-% \cs{tl_to_str:n}, \cs{tl_to_str:N}, \emph{etc.}
-%
-% The result of the wrapping operation is passed as a braced argument to the
-% \meta{function}, which is typically a wrapper around a write
-% operation. The output of \cs{iow_wrap:nnnN} (\emph{i.e.}~the argument
-% passed to the \meta{function}) consists of characters of category
-% \enquote{other} (category code~12), with the exception of spaces which
-% have category \enquote{space} (category code~10). This means that the
-% output does \emph{not} expand further when written to a file.
-%
-% \begin{texnote}
-% Internally, \cs{iow_wrap:nnnN} carries out an \texttt{e}-type expansion
-% on the \meta{text} to expand it. This is done in such a way that
-% \cs{exp_not:N} or \cs{exp_not:n} \emph{could} be used to prevent
-% expansion of material. However, this is less conceptually clear than
-% conversion to a string, which is therefore the supported method for
-% handling expandable material in the \meta{text}.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[added = 2023-04-25]{\iow_wrap_allow_break:}
-% \begin{syntax}
-% \cs{iow_wrap_allow_break:}
-% \end{syntax}
-% In the first argument of \cs{iow_wrap:nnnN} (for instance in
-% messages), inserts a break-point that allows a line break. If
-% no break occurs, this function adds nothing to the output.
-% \end{function}
-%
-% \begin{function}[added = 2011-09-21]{\iow_indent:n}
-% \begin{syntax}
-% \cs{iow_indent:n} \Arg{text}
-% \end{syntax}
-% In the first argument of \cs{iow_wrap:nnnN} (for instance in messages),
-% indents \meta{text} by four spaces. This function does not cause
-% a line break, and only affects lines which start within the scope
-% of the \meta{text}. In case the indented \meta{text} should appear
-% on separate lines from the surrounding text, use |\\| to force
-% line breaks.
-% \end{function}
-%
-% \begin{variable}[added = 2012-06-24]{\l_iow_line_count_int}
-% The maximum number of characters in a line to be written
-% by the \cs{iow_wrap:nnnN}
-% function. This value depends on the \TeX{} system in use: the standard
-% value is $78$, which is typically correct for unmodified \TeX{} Live
-% and \hologo{MiKTeX} systems.
-% \end{variable}
-%
-% \subsection{Constant input--output streams, and variables}
-%
-% \begin{variable}[added = 2017-12-11]{\g_tmpa_ior, \g_tmpb_ior}
-% Scratch input stream for global use. These are never used by
-% the kernel code, and so are safe for use with any \LaTeX3-defined
-% function. However, they may be overwritten by other non-kernel
-% code and so should only be used for short-term storage.
-% \end{variable}
-%
-% \begin{variable}{\c_log_iow, \c_term_iow}
-% Constant output streams for writing to the log and to the terminal
-% (plus the log), respectively.
-% \end{variable}
-%
-% \begin{variable}[added = 2017-12-11]{\g_tmpa_iow, \g_tmpb_iow}
-% Scratch output stream for global use. These are never used by
-% the kernel code, and so are safe for use with any \LaTeX3-defined
-% function. However, they may be overwritten by other non-kernel
-% code and so should only be used for short-term storage.
-% \end{variable}
-%
-% \subsection{Primitive conditionals}
-%
-% \begin{function}[EXP]{\if_eof:w}
-% \begin{syntax}
-% \cs{if_eof:w} \meta{stream}
-% ~~\meta{true code}
-% \cs{else:}
-% ~~\meta{false code}
-% \cs{fi:}
-% \end{syntax}
-% Tests if the \meta{stream} returns \enquote{end of file}, which is true
-% for non-existent files. The \cs{else:} branch is optional.
-% \begin{texnote}
-% This is the \TeX{} primitive \tn{ifeof}.
-% \end{texnote}
-% \end{function}
-%
-% \section{File opertions}
-%
-% \subsection{Basic file operations}
-%
-% \begin{variable}[added = 2017-06-21]
-% {
-% \g_file_curr_dir_str,
-% \g_file_curr_name_str,
-% \g_file_curr_ext_str
-% }
-% Contain the directory, name and extension of the current file. The
-% directory is empty if the file was loaded without an explicit
-% path (\emph{i.e.}~if it is in the \TeX{} search path), and does
-% \emph{not} end in |/| other than the case that it is exactly equal
-% to the root directory. The \meta{name} and \meta{ext} parts together
-% make up the file name, thus the \meta{name} part may be thought of
-% as the \enquote{job name} for the current file.
-%
-% Note that \TeX{} does not provide information on the \meta{dir} and
-% \meta{ext} part for the main (top level) file and that this file
-% always has empty \meta{dir} and \meta{ext} components.
-% Also, the \meta{name} here will be equal to \cs{c_sys_jobname_str},
-% which may be different from the real file name (if set using
-% |--jobname|, for example).
-% \end{variable}
-%
-% \begin{variable}[added = 2017-06-18, updated = 2023-06-15]
-% {\l_file_search_path_seq}
-% Each entry is the path to a directory which should be searched when
-% seeking a file. Each path can be relative or absolute, and need
-% not include the trailing slash. Spaces need not be quoted.
-%
-% \begin{texnote}
-% When working as a package in \LaTeXe{}, \pkg{expl3} will
-% automatically append the current \tn{input@path} to the
-% set of values from \cs{l_file_search_path_seq}.
-% \end{texnote}
-% \end{variable}
-%
-% \begin{function}[EXP, pTF, updated = 2023-09-18]
-% {\file_if_exist:n, \file_if_exist:V}
-% \begin{syntax}
-% \cs{file_if_exist_p:n} \Arg{file name}
-% \cs{file_if_exist:nTF} \Arg{file name} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if \meta{file name} is found in the path as detailed for
-% \cs{file_if_exist:nTF}.
-% \end{function}
-%
-% \subsection{Information about files and file contents}
-%
-% Functions in this section return information about files as \pkg{expl3}
-% \texttt{str} data, \emph{except} that the non-expandable functions set their
-% return \emph{token list} to \cs{q_no_value} if the file requested is not
-% found. As such, comparison of file names, hashes, sizes, etc., should use
-% \cs{str_if_eq:nnTF} rather than \cs{tl_if_eq:nnTF} and so on.
-%
-% \begin{function}[rEXP, added = 2019-11-19]
-% {
-% \file_hex_dump:n, \file_hex_dump:V,
-% \file_hex_dump:nnn, \file_hex_dump:Vnn
-% }
-% \begin{syntax}
-% \cs{file_hex_dump:n} \Arg{file name}
-% \cs{file_hex_dump:nnn} \Arg{file name} \Arg{start index} \Arg{end index}
-% \end{syntax}
-% Searches for \meta{file name} using the current \TeX{} search
-% path and the additional paths controlled by \cs{l_file_search_path_seq}.
-% It then expands to leave the hexadecimal dump of the file content in the
-% input stream. The file is read as bytes, which means that in
-% contrast to most \TeX{} behaviour there will be a difference in result
-% depending on the line endings used in text files. The same file will
-% produce the same result between different engines: the algorithm used
-% is the same in all cases. When the file is not found, the result of
-% expansion is empty. The \Arg{start index} and \Arg{end index} values
-% work as described for \cs{str_range:nnn}.
-% \end{function}
-%
-% \begin{function}[noTF, added = 2019-11-19]
-% {
-% \file_get_hex_dump:nN, \file_get_hex_dump:VN,
-% \file_get_hex_dump:nnnN, \file_get_hex_dump:VnnN
-% }
-% \begin{syntax}
-% \cs{file_get_hex_dump:nN} \Arg{file name} \meta{tl var}
-% \cs{file_get_hex_dump:nnnN} \Arg{file name} \Arg{start index} \Arg{end index} \meta{tl var}
-% \end{syntax}
-% Sets the \meta{tl var} to the result of applying
-% \cs{file_hex_dump:n}/\cs{file_hex_dump:nnn} to the \meta{file}.
-% If the file is not found, the \meta{tl var} will be set to \cs{q_no_value}.
-% \end{function}
-%
-% \begin{function}[rEXP, added = 2019-09-03]
-% {\file_mdfive_hash:n, \file_mdfive_hash:V}
-% \begin{syntax}
-% \cs{file_mdfive_hash:n} \Arg{file name}
-% \end{syntax}
-% Searches for \meta{file name} using the current \TeX{} search
-% path and the additional paths controlled by \cs{l_file_search_path_seq}.
-% It then expands to leave the MD5 sum generated from the contents of
-% the file in the input stream. The file is read as bytes, which means that in
-% contrast to most \TeX{} behaviour there will be a difference in result
-% depending on the line endings used in text files. The same file will
-% produce the same result between different engines: the algorithm used
-% is the same in all cases. When the file is not found, the result of
-% expansion is empty.
-% \end{function}
-%
-% \begin{function}[noTF, added = 2017-07-11, updated = 2019-02-16]
-% {\file_get_mdfive_hash:nN, \file_get_mdfive_hash:VN}
-% \begin{syntax}
-% \cs{file_get_mdfive_hash:nN} \Arg{file name} \meta{tl var}
-% \end{syntax}
-% Sets the \meta{tl var} to the result of applying
-% \cs{file_mdfive_hash:n} to the \meta{file}. If the file is not found,
-% the \meta{tl var} will be set to \cs{q_no_value}.
-% \end{function}
-%
-% \begin{function}[rEXP, added = 2019-09-03]{\file_size:n, \file_size:V}
-% \begin{syntax}
-% \cs{file_size:n} \Arg{file name}
-% \end{syntax}
-% Searches for \meta{file name} using the current \TeX{} search
-% path and the additional paths controlled by \cs{l_file_search_path_seq}.
-% It then expands to leave the size of the file in bytes in the input stream.
-% When the file is not found, the result of expansion is empty.
-% \end{function}
-%
-% \begin{function}[noTF, added = 2017-07-09, updated = 2019-02-16]
-% {\file_get_size:nN, \file_get_size:VN}
-% \begin{syntax}
-% \cs{file_get_size:nN} \Arg{file name} \meta{tl var}
-% \end{syntax}
-% Sets the \meta{tl var} to the result of applying
-% \cs{file_size:n} to the \meta{file}. If the file is not found,
-% the \meta{tl var} will be set to \cs{q_no_value}.
-% This is not available in older versions of \XeTeX{}.
-% \end{function}
-%
-% \begin{function}[rEXP, added = 2019-09-03]
-% {\file_timestamp:n, \file_timestamp:V}
-% \begin{syntax}
-% \cs{file_timestamp:n} \Arg{file name}
-% \end{syntax}
-% Searches for \meta{file name} using the current \TeX{} search
-% path and the additional paths controlled by \cs{l_file_search_path_seq}.
-% It then expands to leave the modification timestamp of
-% the file in the input stream. The timestamp is of the form
-% |D:|\meta{year}\meta{month}\meta{day}\meta{hour}^^A
-% \meta{minute}\meta{second}\meta{offset}, where the latter may be |Z|
-% (UTC) or \meta{plus-minus}\meta{hours}|'|\meta{minutes}|'|.
-% When the file is not found, the result of expansion is empty.
-% This is not available in older versions of \XeTeX{}.
-% \end{function}
-%
-% \begin{function}[noTF, added = 2017-07-09, updated = 2019-02-16]
-% {\file_get_timestamp:nN, \file_get_timestamp:VN}
-% \begin{syntax}
-% \cs{file_get_timestamp:nN} \Arg{file name} \meta{tl var}
-% \end{syntax}
-% Sets the \meta{tl var} to the result of applying
-% \cs{file_timestamp:n} to the \meta{file}. If the file is not found,
-% the \meta{tl var} will be set to \cs{q_no_value}.
-% This is not available in older versions of \XeTeX{}.
-% \end{function}
-%
-% \begin{function}[added = 2019-05-13, updated = 2019-09-20, pTF, EXP]
-% {
-% \file_compare_timestamp:nNn,
-% \file_compare_timestamp:nNV,
-% \file_compare_timestamp:VNn,
-% \file_compare_timestamp:VNV
-% }
-% \begin{syntax}
-% \cs{file_compare_timestamp_p:nNn} \Arg{file-1} \meta{comparator} \Arg{file-2}
-% \cs{file_compare_timestamp:nNnTF} \Arg{file-1} \meta{comparator} \Arg{file-2} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Compares the file stamps on the two \meta{files} as indicated by
-% the \meta{comparator}, and inserts either the \meta{true code}
-% or \meta{false case} as required. A file which is not found
-% is treated as older than any file which is found. This allows for
-% example the construct
-% \begin{verbatim}
-% \file_compare_timestamp:nNnT { source-file } > { derived-file }
-% {
-% % Code to regenerate derived file
-% }
-% \end{verbatim}
-% to work when the derived file is entirely absent. The timestamp
-% of two absent files is regarded as different.
-% This is not available in older versions of \XeTeX{}.
-% \end{function}
-%
-% \begin{function}[noTF, updated = 2019-02-16]
-% {\file_get_full_name:nN, \file_get_full_name:VN}
-% \begin{syntax}
-% \cs{file_get_full_name:nN} \Arg{file name} \meta{tl}
-% \cs{file_get_full_name:nNTF} \Arg{file name} \meta{tl} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Searches for \meta{file name} in the path as detailed for
-% \cs{file_if_exist:nTF}, and if found sets the \meta{tl var} the
-% fully-qualified name of the file, \emph{i.e.}~the path and file name.
-% This includes an extension |.tex| when the given \meta{file name}
-% has no extension but the file found has that extension.
-% In the non-branching version, the \meta{tl var} will be set to
-% \cs{q_no_value} in the case that the file does not exist.
-% \end{function}
-%
-% \begin{function}[added = 2019-09-03, rEXP]{\file_full_name:n, \file_full_name:V}
-% \begin{syntax}
-% \cs{file_full_name:n} \Arg{file name}
-% \end{syntax}
-% Searches for \meta{file name} in the path as detailed for
-% \cs{file_if_exist:nTF}, and if found leaves the
-% fully-qualified name of the file, \emph{i.e.}~the path and file name,
-% in the input stream.
-% This includes an extension |.tex| when the given \meta{file name}
-% has no extension but the file found has that extension.
-% If the file is not found on the path, the expansion is empty.
-% \end{function}
-%
-% \begin{function}[added = 2017-06-23, updated = 2020-06-24]
-% {\file_parse_full_name:nNNN, \file_parse_full_name:VNNN}
-% \begin{syntax}
-% \cs{file_parse_full_name:nNNN} \Arg{full name} \meta{dir} \meta{name} \meta{ext}
-% \end{syntax}
-% Parses the \meta{full name} and splits it into three parts, each of
-% which is returned by setting the appropriate local string variable:
-% \begin{itemize}
-% \item The \meta{dir}: everything up to the last |/| (path separator)
-% in the \meta{file path}. As with system \texttt{PATH} variables
-% and related functions, the \meta{dir} does \emph{not} include the
-% trailing |/| unless it points to the root directory. If there is no path (only
-% a file name), \meta{dir} is empty.
-% \item The \meta{name}: everything after the last |/| up to the last |.|,
-% where both of those characters are optional. The \meta{name} may
-% contain multiple |.| characters. It is empty if \meta{full name}
-% consists only of a directory name.
-% \item The \meta{ext}: everything after the last |.| (including the dot).
-% The \meta{ext} is empty if there is no |.| after the last |/|.
-% \end{itemize}
-%
-% Before parsing, the \meta{full name} is expanded until only non-expandable
-% tokens remain, except that active characters are also not expanded.
-% Quotes (|"|) are invalid in file names and are discarded from the input.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2020-06-24]
-% {\file_parse_full_name:n, \file_parse_full_name:V}
-% \begin{syntax}
-% \cs{file_parse_full_name:n} \Arg{full name}
-% \end{syntax}
-% Parses the \meta{full name} as described for \cs{file_parse_full_name:nNNN},
-% and leaves \meta{dir}, \meta{name}, and \meta{ext} in the input stream,
-% each inside a pair of braces.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2020-06-24]
-% {\file_parse_full_name_apply:nN, \file_parse_full_name_apply:VN}
-% \begin{syntax}
-% \cs{file_parse_full_name_apply:nN} \Arg{full name} \meta{function}
-% \end{syntax}
-% Parses the \meta{full name} as described for \cs{file_parse_full_name:nNNN},
-% and passes \meta{dir}, \meta{name}, and \meta{ext} as arguments to \meta{function},
-% as an \texttt{n}-type argument each, in this order.
-% \end{function}
-%
-% \subsection{Accessing file contents}
-%
-% \begin{function}[noTF, added = 2019-01-16, updated = 2019-02-16]
-% {\file_get:nnN, \file_get:VnN}
-% \begin{syntax}
-% \cs{file_get:nnN} \Arg{file name} \Arg{setup} \meta{tl}
-% \cs{file_get:nnNTF} \Arg{file name} \Arg{setup} \meta{tl} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Defines \meta{tl} to the contents of \meta{file name}.
-% Category codes may need to be set appropriately via the \meta{setup}
-% argument.
-% The non-branching version sets the \meta{tl} to \cs{q_no_value} if the file is
-% not found. The branching version runs the \meta{true code} after the
-% assignment to \meta{tl} if the file is found, and \meta{false code}
-% otherwise. The file content will be tokenized using the current
-% category code régime,
-% \end{function}
-%
-% \begin{function}[updated = 2017-06-26]{\file_input:n, \file_input:V}
-% \begin{syntax}
-% \cs{file_input:n} \Arg{file name}
-% \end{syntax}
-% Searches for \meta{file name} in the path as detailed for
-% \cs{file_if_exist:nTF}, and if found reads in the file as
-% additional \LaTeX{} source. All files read are recorded
-% for information and the file name stack is updated by this
-% function. An error is raised if the file is not found.
-% \end{function}
-%
-% \begin{function}[added = 2023-05-18, EXP]
-% {\file_input_raw:n, \file_input_raw:V}
-% \begin{syntax}
-% \cs{file_input_raw:n} \Arg{file name}
-% \end{syntax}
-% Searches for \meta{file name} in the path as detailed for
-% \cs{file_if_exist:nTF}, and if found reads in the file as
-% additional \TeX{} source. No data concerning the file is
-% tracked. If the file is not found, no action is taken.
-% \begin{texnote}
-% This function is intended only for contexts where files must
-% be read purely by expansion, for example at the start of a
-% table cell in an \tn{halign}.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[added = 2014-07-02]
-% {
-% \file_if_exist_input:n,
-% \file_if_exist_input:V,
-% \file_if_exist_input:nF,
-% \file_if_exist_input:VF
-% }
-% \begin{syntax}
-% \cs{file_if_exist_input:n} \Arg{file name}
-% \cs{file_if_exist_input:nF} \Arg{file name} \Arg{false code}
-% \end{syntax}
-% Searches for \meta{file name} using the current \TeX{} search
-% path and the additional paths included in \cs{l_file_search_path_seq}.
-% If found then
-% reads in the file as additional \LaTeX{} source as described for
-% \cs{file_input:n}, otherwise inserts the \meta{false code}.
-% Note that these functions do not raise
-% an error if the file is not found, in contrast to \cs{file_input:n}.
-% \end{function}
-%
-% \begin{function}[added = 2017-07-07]{\file_input_stop:}
-% \begin{syntax}
-% \cs{file_input_stop:}
-% \end{syntax}
-% Ends the reading of a file started by \cs{file_input:n} or similar before
-% the end of the file is reached. Where the file reading is being terminated
-% due to an error, \cs[index = msg_critical:nn]{msg_critical:nn(nn)}
-% should be preferred.
-% \begin{texnote}
-% This function must be used on a line on its own: \TeX{} reads files
-% line-by-line and so any additional tokens in the \enquote{current} line
-% will still be read.
-%
-% This is also true if the function is hidden inside another function
-% (which will be the normal case), i.e., all tokens on the same line
-% in the source file are still processed. Putting it on a line by itself
-% in the definition doesn't help as it is the line where it is used that
-% counts!
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}{\file_show_list:, \file_log_list:}
-% \begin{syntax}
-% \cs{file_show_list:}
-% \cs{file_log_list:}
-% \end{syntax}
-% These functions list all files loaded by \LaTeXe{} commands that
-% populate \tn{@filelist} or by \cs{file_input:n}. While
-% \cs{file_show_list:} displays the list in the terminal,
-% \cs{file_log_list:} outputs it to the log file only.
-% \end{function}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3file} implementation}
-%
-% \TestFiles{m3file001}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \subsection{Input operations}
-%
-% \begin{macrocode}
-%<@@=ior>
-% \end{macrocode}
-%
-% \subsubsection{Variables and constants}
-%
-% \begin{variable}{\l_@@_internal_tl}
-% Used as a short-term scratch variable.
-% \begin{macrocode}
-\tl_new:N \l_@@_internal_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\c_@@_term_ior}
-% Reading from the terminal (with a prompt) is done using a positive
-% but non-existent stream number. Unlike writing, there is no concept
-% of reading from the log.
-% \begin{macrocode}
-\int_const:Nn \c_@@_term_ior { 16 }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\g_@@_streams_seq}
-% A list of the currently-available input streams to be used as a
-% stack.
-% \begin{macrocode}
-\seq_new:N \g_@@_streams_seq
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_stream_tl}
-% Used to recover the raw stream number from the stack.
-% \begin{macrocode}
-\tl_new:N \l_@@_stream_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\g_@@_streams_prop}
-% The name of the file attached to each stream is tracked in a property
-% list. To get the correct number of reserved streams in package mode the
-% underlying mechanism needs to be queried. For \LaTeXe{} and plain \TeX{}
-% this data is stored in |\count16|: with the \pkg{etex} package loaded
-% we need to subtract $1$ as the register holds the number of the next
-% stream to use. In \ConTeXt{}, we need to look at |\count38| but there
-% is no subtraction: like the original plain \TeX{}/\LaTeXe{} mechanism
-% it holds the value of the \emph{last} stream allocated.
-% \begin{macrocode}
-\prop_new:N \g_@@_streams_prop
-\int_step_inline:nnn
- { 0 }
- {
- \cs_if_exist:NTF \contextversion
- { \tex_count:D 38 ~ }
- {
- \tex_count:D 16 ~ %
- \cs_if_exist:NT \loccount { - 1 }
- }
- }
- {
- \prop_gput:Nnn \g_@@_streams_prop {#1} { Reserved~by~format }
- }
-% \end{macrocode}
-% \end{variable}
-%
-% \subsubsection{Stream management}
-%
-% \begin{macro}{\ior_new:N, \ior_new:c}
-% Reserving a new stream is done by defining the name as equal to using the
-% terminal.
-% \begin{macrocode}
-\cs_new_protected:Npn \ior_new:N #1 { \cs_new_eq:NN #1 \c_@@_term_ior }
-\cs_generate_variant:Nn \ior_new:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\g_tmpa_ior, \g_tmpb_ior}
-% The usual scratch space.
-% \begin{macrocode}
-\ior_new:N \g_tmpa_ior
-\ior_new:N \g_tmpb_ior
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\ior_open:Nn, \ior_open:cn}
-% Use the conditional version, with an error if the file is not found.
-% \begin{macrocode}
-\cs_new_protected:Npn \ior_open:Nn #1#2
- { \ior_open:NnF #1 {#2} { \__kernel_file_missing:n {#2} } }
-\cs_generate_variant:Nn \ior_open:Nn { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\l_@@_file_name_tl}
-% Data storage.
-% \begin{macrocode}
-\tl_new:N \l_@@_file_name_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[TF]{\ior_open:Nn, \ior_open:cn}
-% An auxiliary searches for the file in the \TeX{}, \LaTeXe{} and
-% \LaTeX3 paths. Then pass the file found to the lower-level function
-% which deals with streams. The |full_name| is empty when the file is
-% not found.
-% \begin{macrocode}
-\prg_new_protected_conditional:Npnn \ior_open:Nn #1#2 { T , F , TF }
- {
- \file_get_full_name:nNTF {#2} \l_@@_file_name_tl
- {
- \__kernel_ior_open:No #1 \l_@@_file_name_tl
- \prg_return_true:
- }
- { \prg_return_false: }
- }
-\prg_generate_conditional_variant:Nnn \ior_open:Nn { c } { T , F , TF }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_new:N}
-% Streams are reserved using \tn{newread} before they
-% can be managed by \pkg{ior}. To prevent \pkg{ior} from being
-% affected by redefinitions of \tn{newread} (such as done by the
-% third-party package \pkg{morewrites}), this macro is saved here
-% under a private name. The complicated code ensures that
-% \cs{@@_new:N} is not \tn{outer} despite plain \TeX{}'s \tn{newread}
-% being \tn{outer}. For \ConTeXt{}, we have to deal with the fact
-% that \tn{newread} works like our own: it actually checks before
-% altering definition.
-% \begin{macrocode}
-\exp_args:NNf \cs_new_protected:Npn \@@_new:N
- { \exp_args:NNc \exp_after:wN \exp_stop_f: { newread } }
-\cs_if_exist:NT \contextversion
- {
- \cs_new_eq:NN \@@_new_aux:N \@@_new:N
- \cs_gset_protected:Npn \@@_new:N #1
- {
- \cs_undefine:N #1
- \@@_new_aux:N #1
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\__kernel_ior_open:Nn, \__kernel_ior_open:No}
-% \begin{macro}{\@@_open_stream:Nn}
-% The stream allocation itself uses the fact that there is a list of all of
-% those available. Life gets more complex as it's
-% important to keep things in sync. That is done using a two-part approach:
-% any streams that have already been taken up by \pkg{ior} but are now free
-% are tracked, so we first try those. If that fails, ask plain \TeX{} or \LaTeXe{}
-% for a new stream and use that number (after a bit of conversion).
-% \begin{macrocode}
-\cs_new_protected:Npn \__kernel_ior_open:Nn #1#2
- {
- \ior_close:N #1
- \seq_gpop:NNTF \g_@@_streams_seq \l_@@_stream_tl
- { \@@_open_stream:Nn #1 {#2} }
- {
- \@@_new:N #1
- \__kernel_tl_set:Nx \l_@@_stream_tl { \int_eval:n {#1} }
- \@@_open_stream:Nn #1 {#2}
- }
- }
-\cs_generate_variant:Nn \__kernel_ior_open:Nn { No }
-% \end{macrocode}
-% Here, we act defensively in case \LuaTeX{} is in use with an
-% extensionless file name.
-% \begin{macrocode}
-\cs_new_protected:Npe \@@_open_stream:Nn #1#2
- {
- \tex_global:D \tex_chardef:D #1 = \exp_not:N \l_@@_stream_tl \scan_stop:
- \prop_gput:NVn \exp_not:N \g_@@_streams_prop #1 {#2}
- \tex_openin:D #1
- \sys_if_engine_luatex:TF
- { {#2} }
- { \exp_not:N \__kernel_file_name_quote:n {#2} \scan_stop: }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\ior_shell_open:Nn}
-% \begin{macro}{\@@_shell_open:nN, \@@_shell_open:oN}
-% Actually much easier than either the standard open or input versions!
-% When calling \cs{__kernel_ior_open:Nn} the file the pipe is added to
-% signal a shell command, but the quotes are not added yet---they are
-% added later by \cs{__kernel_file_name_quote:n}.
-% \begin{macrocode}
-\cs_new_protected:Npn \ior_shell_open:Nn #1#2
- {
- \sys_if_shell:TF
- { \@@_shell_open:oN { \tl_to_str:n {#2} } #1 }
- { \msg_error:nn { kernel } { pipe-failed } }
- }
-\cs_new_protected:Npn \@@_shell_open:nN #1#2
- {
- \tl_if_in:nnTF {#1} { " }
- {
- \msg_error:nne
- { kernel } { quote-in-shell } {#1}
- }
- { \__kernel_ior_open:Nn #2 { |#1 } }
- }
-\cs_generate_variant:Nn \@@_shell_open:nN { o }
-\msg_new:nnnn { kernel } { pipe-failed }
- { Cannot~run~piped~system~commands. }
- {
- LaTeX~tried~to~call~a~system~process~but~this~was~not~possible.\\
- Try~the~"--shell-escape"~(or~"--enable-pipes")~option.
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\ior_close:N, \ior_close:c}
-% Closing a stream means getting rid of it at the \TeX{} level and
-% removing from the various data structures. Unless the name passed
-% is an invalid stream number (outside the range $[0,15]$), it can be
-% closed. On the other hand, it only gets added to the stack if it
-% was not already there, to avoid duplicates building up.
-% \begin{macrocode}
-\cs_new_protected:Npn \ior_close:N #1
- {
- \int_compare:nT { -1 < #1 < \c_@@_term_ior }
- {
- \tex_closein:D #1
- \prop_gremove:NV \g_@@_streams_prop #1
- \seq_if_in:NVF \g_@@_streams_seq #1
- { \seq_gpush:NV \g_@@_streams_seq #1 }
- \cs_gset_eq:NN #1 \c_@@_term_ior
- }
- }
-\cs_generate_variant:Nn \ior_close:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\ior_show:N, \ior_log:N, \@@_show:NN}
-% Seek the stream in the \cs{g_@@_streams_prop} list, then show the
-% stream as open or closed accordingly.
-% \begin{macrocode}
-\cs_new_protected:Npn \ior_show:N { \@@_show:NN \tl_show:n }
-\cs_generate_variant:Nn \ior_show:N { c }
-\cs_new_protected:Npn \ior_log:N { \@@_show:NN \tl_log:n }
-\cs_generate_variant:Nn \ior_log:N { c }
-\cs_new_protected:Npn \@@_show:NN #1#2
- {
- \__kernel_chk_defined:NT #2
- {
- \prop_get:NVNTF \g_@@_streams_prop #2 \l_@@_internal_tl
- {
- \exp_args:Ne #1
- { \token_to_str:N #2 ~ open: ~ \l_@@_internal_tl }
- }
- { \exp_args:Ne #1 { \token_to_str:N #2 ~ closed } }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\ior_show_list:, \ior_log_list:}
-% \begin{macro}{\@@_list:N}
-% Show the property lists, but with some \enquote{pretty printing}.
-% See the \pkg{l3msg} module. The first argument of the message is
-% |ior| (as opposed to |iow|) and the second is empty if no read
-% stream is open and non-empty (the list of streams formatted using
-% \cs{msg_show_item_unbraced:nn}) otherwise. The code of the message
-% \texttt{show-streams} takes care of translating |ior|/|iow| to
-% English.
-% \begin{macrocode}
-\cs_new_protected:Npn \ior_show_list: { \@@_list:N \msg_show:nneeee }
-\cs_new_protected:Npn \ior_log_list: { \@@_list:N \msg_log:nneeee }
-\cs_new_protected:Npn \@@_list:N #1
- {
- #1 { kernel } { show-streams }
- { ior }
- {
- \prop_map_function:NN \g_@@_streams_prop
- \msg_show_item_unbraced:nn
- }
- { } { }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsubsection{Reading input}
-%
-% \begin{macro}{\if_eof:w}
-% The primitive conditional
-% \begin{macrocode}
-\cs_new_eq:NN \if_eof:w \tex_ifeof:D
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\ior_if_eof:N}
-% To test if some particular input stream is exhausted the following
-% conditional is provided. The primitive test can only deal with
-% numbers in the range $[0,15]$ so we catch outliers (they are
-% exhausted).
-% \begin{macrocode}
-\prg_new_conditional:Npnn \ior_if_eof:N #1 { p , T , F , TF }
- {
- \if_int_compare:w -1 < #1
- \if_int_compare:w #1 < \c_@@_term_ior
- \if_eof:w #1
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- \else:
- \prg_return_true:
- \fi:
- \else:
- \prg_return_true:
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\ior_get:NN, \@@_get:NN}
-% \begin{macro}[TF]{\ior_get:NN}
-% And here we read from files.
-% \begin{macrocode}
-\cs_new_protected:Npn \ior_get:NN #1#2
- { \ior_get:NNF #1 #2 { \tl_set:Nn #2 { \q_no_value } } }
-\cs_new_protected:Npn \@@_get:NN #1#2
- { \tex_read:D #1 to #2 }
-\prg_new_protected_conditional:Npnn \ior_get:NN #1#2 { T , F , TF }
- {
- \ior_if_eof:NTF #1
- { \prg_return_false: }
- {
- \@@_get:NN #1 #2
- \prg_return_true:
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\ior_str_get:NN, \@@_str_get:NN}
-% \begin{macro}[TF]{\ior_str_get:NN}
-% Reading as strings is a more complicated wrapper, as we wish to
-% remove the endline character and restore it afterwards.
-% \begin{macrocode}
-\cs_new_protected:Npn \ior_str_get:NN #1#2
- { \ior_str_get:NNF #1 #2 { \tl_set:Nn #2 { \q_no_value } } }
-\cs_new_protected:Npn \@@_str_get:NN #1#2
- {
- \exp_args:Nno \use:n
- {
- \int_set:Nn \tex_endlinechar:D { -1 }
- \tex_readline:D #1 to #2
- \int_set:Nn \tex_endlinechar:D
- } { \int_use:N \tex_endlinechar:D }
- }
-\prg_new_protected_conditional:Npnn \ior_str_get:NN #1#2 { T , F , TF }
- {
- \ior_if_eof:NTF #1
- { \prg_return_false: }
- {
- \@@_str_get:NN #1 #2
- \prg_return_true:
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{variable}{\c_@@_term_noprompt_ior}
-% For reading without a prompt.
-% \begin{macrocode}
-\int_const:Nn \c_@@_term_noprompt_ior { -1 }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\ior_get_term:nN, \ior_str_get_term:nN}
-% \begin{macro}{\@@_get_term:NnN}
-% Getting from the terminal is better with pretty-printing.
-% \begin{macrocode}
-\cs_new_protected:Npn \ior_get_term:nN #1#2
- { \@@_get_term:NnN \@@_get:NN {#1} #2 }
-\cs_new_protected:Npn \ior_str_get_term:nN #1#2
- { \@@_get_term:NnN \@@_str_get:NN {#1} #2 }
-\cs_new_protected:Npn \@@_get_term:NnN #1#2#3
- {
- \group_begin:
- \tex_escapechar:D = -1 \scan_stop:
- \tl_if_blank:nTF {#2}
- { \exp_args:NNc #1 \c_@@_term_noprompt_ior }
- { \exp_args:NNc #1 \c_@@_term_ior }
- {#2}
- \exp_args:NNNv \group_end:
- \tl_set:Nn #3 {#2}
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\ior_map_break:, \ior_map_break:n}
-% Usual map breaking functions.
-% \begin{macrocode}
-\cs_new:Npn \ior_map_break:
- { \prg_map_break:Nn \ior_map_break: { } }
-\cs_new:Npn \ior_map_break:n
- { \prg_map_break:Nn \ior_map_break: }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\ior_map_inline:Nn, \ior_str_map_inline:Nn}
-% \begin{macro}{\@@_map_inline:NNn}
-% \begin{macro}{\@@_map_inline:NNNn}
-% \begin{macro}{\@@_map_inline_loop:NNN}
-% Mapping over an input stream can be done on either a token or a string
-% basis, hence the set up. Within that, there is a check to avoid reading
-% past the end of a file, hence the two applications of \cs{ior_if_eof:N}
-% and its lower-level analogue \cs{if_eof:w}.
-% This mapping cannot be nested with twice the same stream, as the
-% stream has only one \enquote{current line}.
-% \begin{macrocode}
-\cs_new_protected:Npn \ior_map_inline:Nn
- { \@@_map_inline:NNn \@@_get:NN }
-\cs_new_protected:Npn \ior_str_map_inline:Nn
- { \@@_map_inline:NNn \@@_str_get:NN }
-\cs_new_protected:Npn \@@_map_inline:NNn
- {
- \int_gincr:N \g__kernel_prg_map_int
- \exp_args:Nc \@@_map_inline:NNNn
- { @@_map_ \int_use:N \g__kernel_prg_map_int :n }
- }
-\cs_new_protected:Npn \@@_map_inline:NNNn #1#2#3#4
- {
- \cs_gset_protected:Npn #1 ##1 {#4}
- \ior_if_eof:NF #3 { \@@_map_inline_loop:NNN #1#2#3 }
- \prg_break_point:Nn \ior_map_break:
- { \int_gdecr:N \g__kernel_prg_map_int }
- }
-\cs_new_protected:Npn \@@_map_inline_loop:NNN #1#2#3
- {
- #2 #3 \l_@@_internal_tl
- \if_eof:w #3
- \exp_after:wN \ior_map_break:
- \fi:
- \exp_args:No #1 \l_@@_internal_tl
- \@@_map_inline_loop:NNN #1#2#3
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\ior_map_variable:NNn, \ior_str_map_variable:NNn}
-% \begin{macro}{\@@_map_variable:NNNn}
-% \begin{macro}{\@@_map_variable_loop:NNNn}
-% Since the \TeX{} primitive (\tn{read} or \tn{readline}) assigns the
-% tokens read in the same way as a token list assignment, we simply
-% call the appropriate primitive. The end-of-loop is checked using
-% the primitive conditional for speed.
-% \begin{macrocode}
-\cs_new_protected:Npn \ior_map_variable:NNn
- { \@@_map_variable:NNNn \ior_get:NN }
-\cs_new_protected:Npn \ior_str_map_variable:NNn
- { \@@_map_variable:NNNn \ior_str_get:NN }
-\cs_new_protected:Npn \@@_map_variable:NNNn #1#2#3#4
- {
- \ior_if_eof:NF #2 { \@@_map_variable_loop:NNNn #1#2#3 {#4} }
- \prg_break_point:Nn \ior_map_break: { }
- }
-\cs_new_protected:Npn \@@_map_variable_loop:NNNn #1#2#3#4
- {
- #1 #2 #3
- \if_eof:w #2
- \exp_after:wN \ior_map_break:
- \fi:
- #4
- \@@_map_variable_loop:NNNn #1#2#3 {#4}
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Output operations}
-%
-% \begin{macrocode}
-%<@@=iow>
-% \end{macrocode}
-%
-% There is a lot of similarity here to the input operations, at least for
-% many of the basics. Thus quite a bit is copied from the earlier material
-% with minor alterations.
-%
-% \subsubsection{Variables and constants}
-%
-% \begin{variable}{\l_@@_internal_tl}
-% Used as a short-term scratch variable.
-% \begin{macrocode}
-\tl_new:N \l_@@_internal_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\c_log_iow, \c_term_iow}
-% Here we allocate two output streams for writing to the transcript
-% file only (\cs{c_log_iow}) and to both the terminal and transcript
-% file (\cs{c_term_iow}). Recent \LuaTeX{} provide $128$ write
-% streams; we also use \cs{c_term_iow} as the first non-allowed write
-% stream so its value depends on the engine.
-% \begin{macrocode}
-\int_const:Nn \c_log_iow { -1 }
-\int_const:Nn \c_term_iow
- {
- \bool_lazy_and:nnTF
- { \sys_if_engine_luatex_p: }
- { \int_compare_p:nNn \tex_luatexversion:D > { 80 } }
- { 128 }
- { 16 }
- }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\g_@@_streams_seq}
-% A list of the currently-available output streams to be used as a
-% stack.
-% \begin{macrocode}
-\seq_new:N \g_@@_streams_seq
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_stream_tl}
-% Used to recover the raw stream number from the stack.
-% \begin{macrocode}
-\tl_new:N \l_@@_stream_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\g_@@_streams_prop}
-% As for reads with the appropriate adjustment of the register numbers to
-% check on.
-% \begin{macrocode}
-\prop_new:N \g_@@_streams_prop
-\int_step_inline:nnn
- { 0 }
- {
- \cs_if_exist:NTF \contextversion
- { \tex_count:D 39 ~ }
- {
- \tex_count:D 17 ~
- \cs_if_exist:NT \loccount { - 1 }
- }
- }
- {
- \prop_gput:Nnn \g_@@_streams_prop {#1} { Reserved~by~format }
- }
-% \end{macrocode}
-% \end{variable}
-%
-% \subsubsection{Internal auxiliaries}
-%
-% \begin{variable}{\s_@@_mark,\s_@@_stop}
-% Internal scan marks.
-% \begin{macrocode}
-\scan_new:N \s_@@_mark
-\scan_new:N \s_@@_stop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[EXP]{\@@_use_i_delimit_by_s_stop:nw}
-% Functions to gobble up to a scan mark.
-% \begin{macrocode}
-\cs_new:Npn \@@_use_i_delimit_by_s_stop:nw #1 #2 \s_@@_stop {#1}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\q_@@_nil}
-% Internal quarks.
-% \begin{macrocode}
-\quark_new:N \q_@@_nil
-% \end{macrocode}
-% \end{variable}
-%
-% \subsection{Stream management}
-%
-% \begin{macro}{\iow_new:N, \iow_new:c}
-% Reserving a new stream is done by defining the name as equal to writing
-% to the terminal: odd but at least consistent.
-% \begin{macrocode}
-\cs_new_protected:Npn \iow_new:N #1 { \cs_new_eq:NN #1 \c_term_iow }
-\cs_generate_variant:Nn \iow_new:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\g_tmpa_iow, \g_tmpb_iow}
-% The usual scratch space.
-% \begin{macrocode}
-\iow_new:N \g_tmpa_iow
-\iow_new:N \g_tmpb_iow
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\@@_new:N}
-% As for read streams, copy \tn{newwrite}, making sure
-% that it is not \tn{outer}. For \ConTeXt{}, we have to
-% deal with the fact that \tn{newwrite} works like our
-% own: it actually checks before altering definition.
-% \begin{macrocode}
-\exp_args:NNf \cs_new_protected:Npn \@@_new:N
- { \exp_args:NNc \exp_after:wN \exp_stop_f: { newwrite } }
-\cs_if_exist:NT \contextversion
- {
- \cs_new_eq:NN \@@_new_aux:N \@@_new:N
- \cs_gset_protected:Npn \@@_new:N #1
- {
- \cs_undefine:N #1
- \@@_new_aux:N #1
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\l_@@_file_name_tl}
-% Data storage.
-% \begin{macrocode}
-\tl_new:N \l_@@_file_name_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\iow_open:Nn, \iow_open:NV, \iow_open:cn, \iow_open:cV}
-% \begin{macro}{\@@_open_stream:Nn, \@@_open_stream:NV}
-% The same idea as for reading, but without the path and without the need
-% to allow for a conditional version.
-% \begin{macrocode}
-\cs_new_protected:Npn \iow_open:Nn #1#2
- {
- \__kernel_tl_set:Nx \l_@@_file_name_tl
- { \__kernel_file_name_sanitize:n {#2} }
- \iow_close:N #1
- \seq_gpop:NNTF \g_@@_streams_seq \l_@@_stream_tl
- { \@@_open_stream:NV #1 \l_@@_file_name_tl }
- {
- \@@_new:N #1
- \__kernel_tl_set:Nx \l_@@_stream_tl { \int_eval:n {#1} }
- \@@_open_stream:NV #1 \l_@@_file_name_tl
- }
- }
-\cs_generate_variant:Nn \iow_open:Nn { NV , c , cV }
-\cs_new_protected:Npn \@@_open_stream:Nn #1#2
- {
- \tex_global:D \tex_chardef:D #1 = \l_@@_stream_tl \scan_stop:
- \prop_gput:NVn \g_@@_streams_prop #1 {#2}
- \tex_immediate:D \tex_openout:D
- #1 \__kernel_file_name_quote:n {#2} \scan_stop:
- }
-\cs_generate_variant:Nn \@@_open_stream:Nn { NV }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\iow_shell_open:Nn}
-% \begin{macro}{\@@_shell_open:nN, \@@_shell_open:oN}
-% Very similar to the \texttt{ior} version
-% \begin{macrocode}
-\cs_new_protected:Npn \iow_shell_open:Nn #1#2
- {
- \sys_if_shell:TF
- { \@@_shell_open:oN { \tl_to_str:n {#2} } #1 }
- { \msg_error:nn { kernel } { pipe-failed } }
- }
-\cs_new_protected:Npn \@@_shell_open:nN #1#2
- {
- \tl_if_in:nnTF {#1} { " }
- {
- \msg_error:nne
- { kernel } { quote-in-shell } {#1}
- }
- { \__kernel_iow_open:Nn #2 { |#1 } }
- }
-\cs_generate_variant:Nn \@@_shell_open:nN { o }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\iow_close:N, \iow_close:c}
-% Closing a stream is not quite the reverse of opening one. First,
-% the close operation is easier than the open one, and second as the
-% stream is actually a number we can use it directly to show that the
-% slot has been freed up.
-% \begin{macrocode}
-\cs_new_protected:Npn \iow_close:N #1
- {
- \int_compare:nT { \c_log_iow < #1 < \c_term_iow }
- {
- \tex_immediate:D \tex_closeout:D #1
- \prop_gremove:NV \g_@@_streams_prop #1
- \seq_if_in:NVF \g_@@_streams_seq #1
- { \seq_gpush:NV \g_@@_streams_seq #1 }
- \cs_gset_eq:NN #1 \c_term_iow
- }
- }
-\cs_generate_variant:Nn \iow_close:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\iow_show:N, \iow_log:N, \@@_show:NN}
-% Seek the stream in the \cs{g_@@_streams_prop} list, then show the
-% stream as open or closed accordingly.
-% \begin{macrocode}
-\cs_new_protected:Npn \iow_show:N { \@@_show:NN \tl_show:n }
-\cs_generate_variant:Nn \iow_show:N { c }
-\cs_new_protected:Npn \iow_log:N { \@@_show:NN \tl_log:n }
-\cs_generate_variant:Nn \iow_log:N { c }
-\cs_new_protected:Npn \@@_show:NN #1#2
- {
- \__kernel_chk_defined:NT #2
- {
- \prop_get:NVNTF \g_@@_streams_prop #2 \l_@@_internal_tl
- {
- \exp_args:Ne #1
- { \token_to_str:N #2 ~ open: ~ \l_@@_internal_tl }
- }
- { \exp_args:Ne #1 { \token_to_str:N #2 ~ closed } }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\iow_show_list:, \iow_log_list:}
-% \begin{macro}{\@@_list:N}
-% Done as for input, but with a copy of the auxiliary so the name is correct.
-% \begin{macrocode}
-\cs_new_protected:Npn \iow_show_list: { \@@_list:N \msg_show:nneeee }
-\cs_new_protected:Npn \iow_log_list: { \@@_list:N \msg_log:nneeee }
-\cs_new_protected:Npn \@@_list:N #1
- {
- #1 { kernel } { show-streams }
- { iow }
- {
- \prop_map_function:NN \g_@@_streams_prop
- \msg_show_item_unbraced:nn
- }
- { } { }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsubsection{Deferred writing}
-%
-% \begin{macro}
-% {
-% \iow_shipout_e:Nn, \iow_shipout_e:Ne,
-% \iow_shipout_e:cn, \iow_shipout_e:ce
-% }
-% First the easy part, this is the primitive, which expects its
-% argument to be braced.
-% \begin{macrocode}
-\cs_new_protected:Npn \iow_shipout_e:Nn #1#2
- { \tex_write:D #1 {#2} }
-\cs_generate_variant:Nn \iow_shipout_e:Nn { Ne , c, ce }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \iow_shipout:Nn, \iow_shipout:Ne,
-% \iow_shipout:Nx,
-% \iow_shipout:cn, \iow_shipout:ce,
-% \iow_shipout:cx
-% }
-% With \eTeX{} available deferred writing without expansion is easy.
-% \begin{macrocode}
-\cs_new_protected:Npn \iow_shipout:Nn #1#2
- { \tex_write:D #1 { \exp_not:n {#2} } }
-\cs_generate_variant:Nn \iow_shipout:Nn { Ne , c, ce }
-\cs_generate_variant:Nn \iow_shipout:Nn { Nx , cx }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Immediate writing}
-%
-% \begin{macro}{\__kernel_iow_with:Nnn}
-% \begin{macro}{\@@_with:nNnn, \@@_with:oNnn}
-% If the integer~|#1| is equal to~|#2|, just leave~|#3| in the input
-% stream. Otherwise, pass the old value to an auxiliary, which sets
-% the integer to the new value, runs the code, and restores the
-% integer.
-% \begin{macrocode}
-\cs_new_protected:Npn \__kernel_iow_with:Nnn #1#2
- {
- \int_compare:nNnTF {#1} = {#2}
- { \use:n }
- { \@@_with:oNnn { \int_use:N #1 } #1 {#2} }
- }
-\cs_new_protected:Npn \@@_with:nNnn #1#2#3#4
- {
- \int_set:Nn #2 {#3}
- #4
- \int_set:Nn #2 {#1}
- }
-\cs_generate_variant:Nn \@@_with:nNnn { o }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \iow_now:Nn, \iow_now:NV, \iow_now:Ne,
-% \iow_now:Nx,
-% \iow_now:cn, \iow_now:cV, \iow_now:ce,
-% \iow_now:cx
-% }
-% This routine writes the second argument onto the output stream without
-% expansion. If this stream isn't open, the output goes to the terminal
-% instead. If the first argument is no output stream at all, we get an
-% internal error. We don't use the expansion done by \tn{write} to
-% get the |Nx| variant, because it differs in subtle ways from
-% \texttt{x}-expansion, namely, macro parameter characters would not
-% need to be doubled. We set the \tn{newlinechar} to~$10$ using
-% \cs{__kernel_iow_with:Nnn} to support formats such as plain \TeX{}: otherwise,
-% \cs{iow_newline:} would not work. We do not do this for
-% \cs{iow_shipout:Nn} or \cs{iow_shipout_x:Nn}, as \TeX{} looks at the
-% value of the \tn{newlinechar} at shipout time in those cases.
-% \begin{macrocode}
-\cs_new_protected:Npn \iow_now:Nn #1#2
- {
- \__kernel_iow_with:Nnn \tex_newlinechar:D { `\^^J }
- { \tex_immediate:D \tex_write:D #1 { \exp_not:n {#2} } }
- }
-\cs_generate_variant:Nn \iow_now:Nn { NV , Ne , c , cV , ce }
-\cs_generate_variant:Nn \iow_now:Nn { Nx , cx }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\iow_log:n, \iow_log:e, \iow_log:x}
-% \begin{macro}{\iow_term:n, \iow_term:e, \iow_term:x}
-% Writing to the log and the terminal directly are relatively easy;
-% as we need the two \texttt{e}-type variants for bootstrapping,
-% they are redefinitions here.
-% \begin{macrocode}
-\cs_new_protected:Npn \iow_log:n { \iow_now:Nn \c_log_iow }
-\cs_set_protected:Npn \iow_log:e { \iow_now:Ne \c_log_iow }
-\cs_generate_variant:Nn \iow_log:n { x }
-\cs_new_protected:Npn \iow_term:n { \iow_now:Nn \c_term_iow }
-\cs_set_protected:Npn \iow_term:e { \iow_now:Ne \c_term_iow }
-\cs_generate_variant:Nn \iow_term:n { x }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsubsection{Special characters for writing}
-%
-% \begin{macro}{\iow_newline:}
-% Global variable holding the character that forces a new line when
-% something is written to an output stream.
-% \begin{macrocode}
-\cs_new:Npn \iow_newline: { ^^J }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\iow_char:N}
-% Function to write any escaped char to an output stream.
-% \begin{macrocode}
-\cs_new_eq:NN \iow_char:N \cs_to_str:N
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Hard-wrapping lines to a character count}
-%
-% The code here implements a generic hard-wrapping function. This is
-% used by the messaging system, but is designed such that it is
-% available for other uses.
-%
-% \begin{variable}{\l_iow_line_count_int}
-% This is the \enquote{raw} number of characters in a line which
-% can be written to the terminal.
-% The standard value is the line length typically used by
-% \TeX{} Live and \hologo{MiKTeX}.
-% \begin{macrocode}
-\int_new:N \l_iow_line_count_int
-\int_set:Nn \l_iow_line_count_int { 78 }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_newline_tl}
-% The token list inserted to produce a new line, with the
-% \meta{run-on text}.
-% \begin{macrocode}
-\tl_new:N \l_@@_newline_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_line_target_int}
-% This stores the target line count: the full number of characters
-% in a line, minus any part for a leader at the start of each line.
-% \begin{macrocode}
-\int_new:N \l_@@_line_target_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\@@_set_indent:n}
-% \begin{macro}{\@@_unindent:w}
-% \begin{variable}{\l_@@_one_indent_tl, \l_@@_one_indent_int}
-% The \texttt{one_indent} variables hold one indentation marker and
-% its length. The \cs{@@_unindent:w} auxiliary removes one
-% indentation. The function \cs{@@_set_indent:n} (that could possibly
-% be public) sets the indentation in a consistent way. We set it to
-% four spaces by default.
-% \begin{macrocode}
-\tl_new:N \l_@@_one_indent_tl
-\int_new:N \l_@@_one_indent_int
-\cs_new:Npn \@@_unindent:w { }
-\cs_new_protected:Npn \@@_set_indent:n #1
- {
- \__kernel_tl_set:Nx \l_@@_one_indent_tl
- { \exp_args:No \__kernel_str_to_other_fast:n { \tl_to_str:n {#1} } }
- \int_set:Nn \l_@@_one_indent_int
- { \str_count:N \l_@@_one_indent_tl }
- \exp_last_unbraced:NNo
- \cs_set:Npn \@@_unindent:w \l_@@_one_indent_tl { }
- }
-\exp_args:Ne \@@_set_indent:n { \prg_replicate:nn { 4 } { ~ } }
-% \end{macrocode}
-% \end{variable}
-% \end{macro}
-% \end{macro}
-%
-% \begin{variable}{\l_@@_indent_tl, \l_@@_indent_int}
-% The current indentation (some copies of \cs{l_@@_one_indent_tl}) and
-% its number of characters.
-% \begin{macrocode}
-\tl_new:N \l_@@_indent_tl
-\int_new:N \l_@@_indent_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_line_tl, \l_@@_line_part_tl}
-% These hold the current line of text and a partial line to be added
-% to it, respectively.
-% \begin{macrocode}
-\tl_new:N \l_@@_line_tl
-\tl_new:N \l_@@_line_part_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_line_break_bool}
-% Indicates whether the line was broken precisely at a chunk boundary.
-% \begin{macrocode}
-\bool_new:N \l_@@_line_break_bool
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_wrap_tl}
-% Used for the expansion step before detokenizing, and for the output
-% from wrapping text: fully expanded and with lines which are not
-% overly long.
-% \begin{macrocode}
-\tl_new:N \l_@@_wrap_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\c_@@_wrap_marker_tl}
-% \begin{variable}
-% {
-% \c_@@_wrap_end_marker_tl,
-% \c_@@_wrap_newline_marker_tl,
-% \c_@@_wrap_allow_break_marker_tl,
-% \c_@@_wrap_indent_marker_tl,
-% \c_@@_wrap_unindent_marker_tl
-% }
-% Every special action of the wrapping code is starts with
-% the same recognizable string, \cs{c_@@_wrap_marker_tl}.
-% Upon seeing that \enquote{word}, the wrapping code reads
-% one space-delimited argument to know what operation to
-% perform. The setting of \tn{escapechar} here is not
-% very important, but makes \cs{c_@@_wrap_marker_tl} look
-% marginally nicer.
-% \begin{macrocode}
-\group_begin:
- \int_set:Nn \tex_escapechar:D { -1 }
- \tl_const:Ne \c_@@_wrap_marker_tl
- { \tl_to_str:n { \^^I \^^O \^^W \^^_ \^^W \^^R \^^A \^^P } }
-\group_end:
-\tl_map_inline:nn
- { { end } { newline } { allow_break } { indent } { unindent } }
- {
- \tl_const:ce { c_@@_wrap_ #1 _marker_tl }
- {
- \c_@@_wrap_marker_tl
- #1
- \c_catcode_other_space_tl
- }
- }
-% \end{macrocode}
-% \end{variable}
-% \end{variable}
-%
-% \begin{macro}{\iow_wrap_allow_break:}
-% \begin{macro}[EXP]{\@@_wrap_allow_break:}
-% \begin{macro}[EXP]{\@@_wrap_allow_break_error:}
-% We set \cs{iow_wrap_allow_break:n} to produce an error when outside
-% messages. Within wrapped message, it is set to \cs{@@_wrap_allow_break:}
-% when valid and otherwise to \cs{@@_wrap_allow_break_error:}. The second
-% produces an error expandably.
-% \begin{macrocode}
-\cs_new_protected:Npn \iow_wrap_allow_break:
- {
- \msg_error:nnnn { kernel } { iow-indent }
- { \iow_wrap:nnnN } { \iow_wrap_allow_break: }
- }
-\cs_new:Npe \@@_wrap_allow_break: { \c_@@_wrap_allow_break_marker_tl }
-\cs_new:Npn \@@_wrap_allow_break_error:
- {
- \msg_expandable_error:nnnn { kernel } { iow-indent }
- { \iow_wrap:nnnN } { \iow_wrap_allow_break: }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\iow_indent:n}
-% \begin{macro}[EXP]{\@@_indent:n}
-% \begin{macro}[EXP]{\@@_indent_error:n}
-% We set \cs{iow_indent:n} to produce an error when outside
-% messages. Within wrapped message, it is set to \cs{@@_indent:n} when
-% valid and otherwise to \cs{@@_indent_error:n}. The first places the
-% instruction for increasing the indentation before its argument, and
-% the instruction for unindenting afterwards. The second produces an
-% error expandably. Note that there are no forced line-break, so
-% the indentation only changes when the next line is started.
-% \begin{macrocode}
-\cs_new_protected:Npn \iow_indent:n #1
- {
- \msg_error:nnnnn { kernel } { iow-indent }
- { \iow_wrap:nnnN } { \iow_indent:n } {#1}
- #1
- }
-\cs_new:Npe \@@_indent:n #1
- {
- \c_@@_wrap_indent_marker_tl
- #1
- \c_@@_wrap_unindent_marker_tl
- }
-\cs_new:Npn \@@_indent_error:n #1
- {
- \msg_expandable_error:nnnnn { kernel } { iow-indent }
- { \iow_wrap:nnnN } { \iow_indent:n } {#1}
- #1
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\iow_wrap:nnnN, \iow_wrap:nenN}
-% The main wrapping function works as follows. First give |\\|,
-% \verb*|\ | and other formatting commands the correct definition for
-% messages and perform the given setup~|#3|. The definition of
-% \verb*|\ | uses an \enquote{other} space rather than a normal space,
-% because the latter might be absorbed by \TeX{} to end a number or
-% other \texttt{f}-type expansions.
-% Use \cs{conditionally@traceoff} if defined; it is introduced by the
-% \pkg{trace} package and suppresses uninteresting tracing of the
-% wrapping code.
-% \begin{macrocode}
-\cs_new_protected:Npn \iow_wrap:nnnN #1#2#3#4
- {
- \group_begin:
- \cs_if_exist_use:N \conditionally@traceoff
- \int_set:Nn \tex_escapechar:D { -1 }
- \cs_set:Npe \{ { \token_to_str:N \{ }
- \cs_set:Npe \# { \token_to_str:N \# }
- \cs_set:Npe \} { \token_to_str:N \} }
- \cs_set:Npe \% { \token_to_str:N \% }
- \cs_set:Npe \~ { \token_to_str:N \~ }
- \int_set:Nn \tex_escapechar:D { 92 }
- \cs_set_eq:NN \\ \iow_newline:
- \cs_set_eq:NN \ \c_catcode_other_space_tl
- \cs_set_eq:NN \iow_wrap_allow_break: \@@_wrap_allow_break:
- \cs_set_eq:NN \iow_indent:n \@@_indent:n
- #3
-% \end{macrocode}
-% Then fully-expand the input: in package mode, the expansion uses
-% \LaTeXe{}'s \tn{protect} mechanism in the same way as \tn{typeout}.
-% In generic mode this setting is useless but harmless. As soon as
-% the expansion is done, reset \cs{iow_indent:n} to its error
-% definition: it only works in the first argument of
-% \cs{iow_wrap:nnnN}.
-% \begin{macrocode}
- \cs_set_eq:NN \protect \token_to_str:N
- \__kernel_tl_set:Nx \l_@@_wrap_tl {#1}
- \cs_set_eq:NN \iow_wrap_allow_break: \@@_wrap_allow_break_error:
- \cs_set_eq:NN \iow_indent:n \@@_indent_error:n
-% \end{macrocode}
-% Afterwards, set the newline marker (two assignments to fully expand,
-% then convert to a string) and initialize the target count for lines
-% (the first line has target count \cs{l_iow_line_count_int} instead).
-% \begin{macrocode}
- \__kernel_tl_set:Nx \l_@@_newline_tl { \iow_newline: #2 }
- \__kernel_tl_set:Nx \l_@@_newline_tl { \tl_to_str:N \l_@@_newline_tl }
- \int_set:Nn \l_@@_line_target_int
- { \l_iow_line_count_int - \str_count:N \l_@@_newline_tl + 1 }
-% \end{macrocode}
-% Sanity check.
-% \begin{macrocode}
- \int_compare:nNnT { \l_@@_line_target_int } < 0
- {
- \tl_set:Nn \l_@@_newline_tl { \iow_newline: }
- \int_set:Nn \l_@@_line_target_int
- { \l_iow_line_count_int + 1 }
- }
-% \end{macrocode}
-% There is then a loop over the input, which stores the wrapped
-% result in \cs{l_@@_wrap_tl}. After the loop, the resulting text is
-% passed on to the function which has been given as a post-processor.
-% The \cs{tl_to_str:N} step converts the \enquote{other} spaces back
-% to normal spaces. The \texttt{f}-expansion removes a leading space
-% from \cs{l_@@_wrap_tl}.
-% \begin{macrocode}
- \@@_wrap_do:
- \exp_args:NNf \group_end:
- #4 { \tl_to_str:N \l_@@_wrap_tl }
- }
-\cs_generate_variant:Nn \iow_wrap:nnnN { ne }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_wrap_do:, \@@_wrap_fix_newline:w, \@@_wrap_start:w}
-% Escape spaces and change newlines to \cs{c_@@_wrap_newline_marker_tl}.
-% Set up a few variables, in particular the initial
-% value of \cs{l_@@_wrap_tl}: the space stops the
-% \texttt{f}-expansion of the main wrapping function and
-% \cs{use_none:n} removes a newline marker inserted by later code.
-% The main loop consists of repeatedly calling the \texttt{chunk}
-% auxiliary to wrap chunks delimited by (newline or indentation)
-% markers.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_wrap_do:
- {
- \__kernel_tl_set:Nx \l_@@_wrap_tl
- {
- \exp_args:No \__kernel_str_to_other_fast:n \l_@@_wrap_tl
- \c_@@_wrap_end_marker_tl
- }
- \__kernel_tl_set:Nx \l_@@_wrap_tl
- {
- \exp_after:wN \@@_wrap_fix_newline:w \l_@@_wrap_tl
- ^^J \q_@@_nil ^^J \s_@@_stop
- }
- \exp_after:wN \@@_wrap_start:w \l_@@_wrap_tl
- }
-\cs_new:Npn \@@_wrap_fix_newline:w #1 ^^J #2 ^^J
- {
- #1
- \if_meaning:w \q_@@_nil #2
- \@@_use_i_delimit_by_s_stop:nw
- \fi:
- \c_@@_wrap_newline_marker_tl
- \@@_wrap_fix_newline:w #2 ^^J
- }
-\cs_new_protected:Npn \@@_wrap_start:w
- {
- \bool_set_false:N \l_@@_line_break_bool
- \tl_clear:N \l_@@_line_tl
- \tl_clear:N \l_@@_line_part_tl
- \tl_set:Nn \l_@@_wrap_tl { ~ \use_none:n }
- \int_zero:N \l_@@_indent_int
- \tl_clear:N \l_@@_indent_tl
- \@@_wrap_chunk:nw { \l_iow_line_count_int }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_wrap_chunk:nw, \@@_wrap_next:nw}
-% The \texttt{chunk} and \texttt{next} auxiliaries are defined
-% indirectly to obtain the expansions of \cs{c_catcode_other_space_tl}
-% and \cs{c_@@_wrap_marker_tl} in their definition. The \texttt{next}
-% auxiliary calls a function corresponding to the type of marker (its
-% |##2|), which can be \texttt{newline} or \texttt{indent} or
-% \texttt{unindent} or \texttt{end}. The first argument of the
-% \texttt{chunk} auxiliary is a target number of characters and the
-% second is some string to wrap. If the chunk is empty simply call
-% \texttt{next}. Otherwise, set up a call to \cs{@@_wrap_line:nw},
-% including the indentation if the current line is empty, and
-% including a trailing space (|#1|) before the
-% \cs{@@_wrap_end_chunk:w} auxiliary.
-% \begin{macrocode}
-\cs_set_protected:Npn \@@_tmp:w #1#2
- {
- \cs_new_protected:Npn \@@_wrap_chunk:nw ##1##2 #2
- {
- \tl_if_empty:nTF {##2}
- {
- \tl_clear:N \l_@@_line_part_tl
- \@@_wrap_next:nw {##1}
- }
- {
- \tl_if_empty:NTF \l_@@_line_tl
- {
- \@@_wrap_line:nw
- { \l_@@_indent_tl }
- ##1 - \l_@@_indent_int ;
- }
- { \@@_wrap_line:nw { } ##1 ; }
- ##2 #1
- \@@_wrap_end_chunk:w 7 6 5 4 3 2 1 0 \s_@@_stop
- }
- }
- \cs_new_protected:Npn \@@_wrap_next:nw ##1##2 #1
- { \use:c { @@_wrap_##2:n } {##1} }
- }
-\exp_args:NVV \@@_tmp:w \c_catcode_other_space_tl \c_@@_wrap_marker_tl
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_wrap_line:nw}
-% \begin{macro}[EXP]
-% {
-% \@@_wrap_line_loop:w,
-% \@@_wrap_line_aux:Nw,
-% \@@_wrap_line_seven:nnnnnnn,
-% \@@_wrap_line_end:NnnnnnnnN,
-% \@@_wrap_line_end:nw,
-% \@@_wrap_end_chunk:w
-% }
-% This is followed by \Arg{string} \meta{int expr} |;|. It stores the
-% \meta{string} and up to \meta{int expr} characters from the current
-% chunk into \cs{l_@@_line_part_tl}. Characters are grabbed 8~at a
-% time and left in \cs{l_@@_line_part_tl} by the \texttt{line_loop}
-% auxiliary. When $k<8$ remain to be found, the \texttt{line_aux}
-% auxiliary calls the \texttt{line_end} auxiliary followed by (the
-% single digit) $k$, then $7-k$ empty brace groups, then the chunk's
-% remaining characters. The \texttt{line_end} auxiliary leaves
-% $k$~characters from the chunk in the line part, then ends the
-% assignment. Ignore the \cs{use_none:nnnnn} line for now. If the
-% next character is a space the line can be broken there:
-% store what we found into the result and get the next line.
-% Otherwise some work is needed to find a break-point. So far we have
-% ignored what happens if the chunk is shorter than the requested
-% number of characters: this is dealt with by the \texttt{end_chunk}
-% auxiliary, which gets treated like a character by the rest of the
-% code. It ends up being called either as one of the arguments
-% |#2|--|#9| of the \texttt{line_loop} auxiliary or as one of the
-% arguments |#2|--|#8| of the \texttt{line_end} auxiliary. In both
-% cases stop the assignment and work out how many characters are still
-% needed. Notice that when we have exactly seven arguments to clean up,
-% a \cs{exp_stop_f:} has to be inserted to stop the \cs{exp:w}.
-% The weird \cs{use_none:nnnnn} ensures that the required
-% data is in the right place.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_wrap_line:nw #1
- {
- \tex_edef:D \l_@@_line_part_tl { \if_false: } \fi:
- #1
- \exp_after:wN \@@_wrap_line_loop:w
- \int_value:w \int_eval:w
- }
-\cs_new:Npn \@@_wrap_line_loop:w #1 ; #2#3#4#5#6#7#8#9
- {
- \if_int_compare:w #1 < 8 \exp_stop_f:
- \@@_wrap_line_aux:Nw #1
- \fi:
- #2 #3 #4 #5 #6 #7 #8 #9
- \exp_after:wN \@@_wrap_line_loop:w
- \int_value:w \int_eval:w #1 - 8 ;
- }
-\cs_new:Npn \@@_wrap_line_aux:Nw #1#2#3 \exp_after:wN #4 ;
- {
- #2
- \exp_after:wN \@@_wrap_line_end:NnnnnnnnN
- \exp_after:wN #1
- \exp:w \exp_end_continue_f:w
- \exp_after:wN \exp_after:wN
- \if_case:w #1 \exp_stop_f:
- \prg_do_nothing:
- \or: \use_none:n
- \or: \use_none:nn
- \or: \use_none:nnn
- \or: \use_none:nnnn
- \or: \use_none:nnnnn
- \or: \use_none:nnnnnn
- \or: \@@_wrap_line_seven:nnnnnnn
- \fi:
- { } { } { } { } { } { } { } #3
- }
-\cs_new:Npn \@@_wrap_line_seven:nnnnnnn #1#2#3#4#5#6#7 { \exp_stop_f: }
-\cs_new:Npn \@@_wrap_line_end:NnnnnnnnN #1#2#3#4#5#6#7#8#9
- {
- #2 #3 #4 #5 #6 #7 #8
- \use_none:nnnnn \int_eval:w 8 - ; #9
- \token_if_eq_charcode:NNTF \c_space_token #9
- { \@@_wrap_line_end:nw { } }
- { \if_false: { \fi: } \@@_wrap_break:w #9 }
- }
-\cs_new:Npn \@@_wrap_line_end:nw #1
- {
- \if_false: { \fi: }
- \@@_wrap_store_do:n {#1}
- \@@_wrap_next_line:w
- }
-\cs_new:Npn \@@_wrap_end_chunk:w
- #1 \int_eval:w #2 - #3 ; #4#5 \s_@@_stop
- {
- \if_false: { \fi: }
- \exp_args:Nf \@@_wrap_next:nw { \int_eval:n { #2 - #4 } }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_wrap_break:w}
-% \begin{macro}[EXP]
-% {
-% \@@_wrap_break_first:w,
-% \@@_wrap_break_none:w,
-% \@@_wrap_break_loop:w,
-% \@@_wrap_break_end:w,
-% }
-% Functions here are defined indirectly: \cs{@@_tmp:w} is eventually
-% called with an \enquote{other} space as its argument. The goal is
-% to remove from \cs{l_@@_line_part_tl} the part after the last space.
-% In most cases this is done by repeatedly calling the
-% \texttt{break_loop} auxiliary, which leaves \enquote{words}
-% (delimited by spaces) until it hits the trailing space: then its
-% argument |##3| is |?| \cs{@@_wrap_break_end:w} instead of a single
-% token, and that \texttt{break_end} auxiliary leaves in the
-% assignment the line until the last space, then calls
-% \cs{@@_wrap_line_end:nw} to finish up the line and move on to the
-% next. If there is no space in \cs{l_@@_line_part_tl} then the
-% \texttt{break_first} auxiliary calls the \texttt{break_none}
-% auxiliary. In that case, if the current line is empty, the complete
-% word (including |##4|, characters beyond what we had grabbed) is
-% added to the line, making it over-long. Otherwise, the word is
-% used for the following line (and the last space of the line so far
-% is removed because it was inserted due to the presence of a marker).
-% \begin{macrocode}
-\cs_set_protected:Npn \@@_tmp:w #1
- {
- \cs_new:Npn \@@_wrap_break:w
- {
- \tex_edef:D \l_@@_line_part_tl
- { \if_false: } \fi:
- \exp_after:wN \@@_wrap_break_first:w
- \l_@@_line_part_tl
- #1
- { ? \@@_wrap_break_end:w }
- \s_@@_mark
- }
- \cs_new:Npn \@@_wrap_break_first:w ##1 #1 ##2
- {
- \use_none:nn ##2 \@@_wrap_break_none:w
- \@@_wrap_break_loop:w ##1 #1 ##2
- }
- \cs_new:Npn \@@_wrap_break_none:w ##1##2 #1 ##3 \s_@@_mark ##4 #1
- {
- \tl_if_empty:NTF \l_@@_line_tl
- { ##2 ##4 \@@_wrap_line_end:nw { } }
- { \@@_wrap_line_end:nw { \@@_wrap_trim:N } ##2 ##4 #1 }
- }
- \cs_new:Npn \@@_wrap_break_loop:w ##1 #1 ##2 #1 ##3
- {
- \use_none:n ##3
- ##1 #1
- \@@_wrap_break_loop:w ##2 #1 ##3
- }
- \cs_new:Npn \@@_wrap_break_end:w ##1 #1 ##2 ##3 #1 ##4 \s_@@_mark
- { ##1 \@@_wrap_line_end:nw { } ##3 }
- }
-\exp_args:NV \@@_tmp:w \c_catcode_other_space_tl
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_wrap_next_line:w}
-% The special case where the end of a line coincides with the end of a
-% chunk is detected here, to avoid a spurious empty line. Otherwise,
-% call \cs{@@_wrap_line:nw} to find characters for the next line
-% (remembering to account for the indentation).
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_wrap_next_line:w #1#2 \s_@@_stop
- {
- \tl_clear:N \l_@@_line_tl
- \token_if_eq_meaning:NNTF #1 \@@_wrap_end_chunk:w
- {
- \tl_clear:N \l_@@_line_part_tl
- \bool_set_true:N \l_@@_line_break_bool
- \@@_wrap_next:nw { \l_@@_line_target_int }
- }
- {
- \@@_wrap_line:nw
- { \l_@@_indent_tl }
- \l_@@_line_target_int - \l_@@_indent_int ;
- #1 #2 \s_@@_stop
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_wrap_allow_break:n}
-% This is called after a chunk has been wrapped. The
-% \cs{l_@@_line_part_tl} typically ends with a space (except at the
-% beginning of a line?), which we remove since the
-% \texttt{allow\_break} marker should not insert a space. Then move
-% on with the next chunk, making sure to adjust the target number of
-% characters for the line in case we did remove a space.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_wrap_allow_break:n #1
- {
- \__kernel_tl_set:Nx \l_@@_line_tl
- { \l_@@_line_tl \@@_wrap_trim:N \l_@@_line_part_tl }
- \bool_set_false:N \l_@@_line_break_bool
- \tl_if_empty:NTF \l_@@_line_part_tl
- { \@@_wrap_chunk:nw {#1} }
- { \exp_args:Nf \@@_wrap_chunk:nw { \int_eval:n { #1 + 1 } } }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_wrap_indent:n, \@@_wrap_unindent:n}
-% These functions are called after a chunk has been wrapped, when
-% encountering \texttt{indent}/\texttt{unindent} markers. Add the
-% line part (last line part of the previous chunk) to the line so far
-% and reset a boolean denoting the presence of a line-break. Most
-% importantly, add or remove one indent from the current indent (both
-% the integer and the token list). Finally, continue wrapping.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_wrap_indent:n #1
- {
- \tl_put_right:Ne \l_@@_line_tl { \l_@@_line_part_tl }
- \bool_set_false:N \l_@@_line_break_bool
- \int_add:Nn \l_@@_indent_int { \l_@@_one_indent_int }
- \tl_put_right:No \l_@@_indent_tl { \l_@@_one_indent_tl }
- \@@_wrap_chunk:nw {#1}
- }
-\cs_new_protected:Npn \@@_wrap_unindent:n #1
- {
- \tl_put_right:Ne \l_@@_line_tl { \l_@@_line_part_tl }
- \bool_set_false:N \l_@@_line_break_bool
- \int_sub:Nn \l_@@_indent_int { \l_@@_one_indent_int }
- \__kernel_tl_set:Nx \l_@@_indent_tl
- { \exp_after:wN \@@_unindent:w \l_@@_indent_tl }
- \@@_wrap_chunk:nw {#1}
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_wrap_newline:n, \@@_wrap_end:n}
-% These functions are called after a chunk has been line-wrapped, when
-% encountering a \texttt{newline}/\texttt{end} marker. Unless we just
-% took a line-break, store the line part and the line so far into the
-% whole \cs{l_@@_wrap_tl}, trimming a trailing space. In the
-% \texttt{newline} case look for a new line (of length
-% \cs{l_@@_line_target_int}) in a new chunk.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_wrap_newline:n #1
- {
- \bool_if:NF \l_@@_line_break_bool
- { \@@_wrap_store_do:n { \@@_wrap_trim:N } }
- \bool_set_false:N \l_@@_line_break_bool
- \@@_wrap_chunk:nw { \l_@@_line_target_int }
- }
-\cs_new_protected:Npn \@@_wrap_end:n #1
- {
- \bool_if:NF \l_@@_line_break_bool
- { \@@_wrap_store_do:n { \@@_wrap_trim:N } }
- \bool_set_false:N \l_@@_line_break_bool
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_wrap_store_do:n}
-% First add the last line part to the line, then append it to
-% \cs{l_@@_wrap_tl} with the appropriate new line (with
-% \enquote{run-on} text), possibly with its last space removed (|#1|
-% is empty or \cs{@@_wrap_trim:N}).
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_wrap_store_do:n #1
- {
- \__kernel_tl_set:Nx \l_@@_line_tl
- { \l_@@_line_tl \l_@@_line_part_tl }
- \__kernel_tl_set:Nx \l_@@_wrap_tl
- {
- \l_@@_wrap_tl
- \l_@@_newline_tl
- #1 \l_@@_line_tl
- }
- \tl_clear:N \l_@@_line_tl
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_wrap_trim:N, \@@_wrap_trim:w, \@@_wrap_trim_aux:w}
-% Remove one trailing \enquote{other} space from the argument if present.
-% \begin{macrocode}
-\cs_set_protected:Npn \@@_tmp:w #1
- {
- \cs_new:Npn \@@_wrap_trim:N ##1
- { \exp_after:wN \@@_wrap_trim:w ##1 \s_@@_mark #1 \s_@@_mark \s_@@_stop }
- \cs_new:Npn \@@_wrap_trim:w ##1 #1 \s_@@_mark
- { \@@_wrap_trim_aux:w ##1 \s_@@_mark }
- \cs_new:Npn \@@_wrap_trim_aux:w ##1 \s_@@_mark ##2 \s_@@_stop {##1}
- }
-\exp_args:NV \@@_tmp:w \c_catcode_other_space_tl
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%<@@=file>
-% \end{macrocode}
-%
-% \subsection{File operations}
-%
-% \begin{variable}{\l_@@_internal_tl}
-% Used as a short-term scratch variable.
-% \begin{macrocode}
-\tl_new:N \l_@@_internal_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}
-% {
-% \g_file_curr_dir_str ,
-% \g_file_curr_ext_str ,
-% \g_file_curr_name_str
-% }
-% The name of the current file should be available at all times:
-% the name itself is set dynamically.
-% \begin{macrocode}
-\str_new:N \g_file_curr_dir_str
-\str_new:N \g_file_curr_ext_str
-\str_new:N \g_file_curr_name_str
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\g_@@_stack_seq}
-% The input list of files is stored as a sequence stack. In package
-% mode we can recover the information from the details held by
-% \LaTeXe{} (we must be in the preamble and loaded using \tn{usepackage}
-% or \tn{RequirePackage}). As \LaTeXe{} doesn't store directory and
-% name separately, we stick to the same convention here. In pre-loading,
-% \tn{@currnamestack} is empty so is skipped.
-% \begin{macrocode}
-\seq_new:N \g_@@_stack_seq
-\group_begin:
- \cs_set_protected:Npn \@@_tmp:w #1#2#3
- {
- \tl_if_blank:nTF {#1}
- {
- \cs_set:Npn \@@_tmp:w ##1 " ##2 " ##3 \s_@@_stop
- { { } {##2} { } }
- \seq_gput_right:Ne \g_@@_stack_seq
- {
- \exp_after:wN \@@_tmp:w \tex_jobname:D
- " \tex_jobname:D " \s_@@_stop
- }
- }
- {
- \seq_gput_right:Nn \g_@@_stack_seq { { } {#1} {#2} }
- \@@_tmp:w
- }
- }
- \cs_if_exist:NT \@currnamestack
- {
- \tl_if_empty:NF \@currnamestack
- { \exp_after:wN \@@_tmp:w \@currnamestack }
- }
-\group_end:
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\g_@@_record_seq}
-% The total list of files used is recorded separately from the current
-% file stack, as nothing is ever popped from this list. The current
-% file name should be included in the file list! We
-% will eventually copy the contents of \cs{@filelist}.
-% \begin{macrocode}
-\seq_new:N \g_@@_record_seq
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_base_name_tl, \l_@@_full_name_tl}
-% For storing the basename and full path whilst passing data internally.
-% \begin{macrocode}
-\tl_new:N \l_@@_base_name_tl
-\tl_new:N \l_@@_full_name_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_dir_str, \l_@@_ext_str, \l_@@_name_str}
-% Used in parsing a path into parts: in contrast to the above, these are
-% never used outside of the current module.
-% \begin{macrocode}
-\str_new:N \l_@@_dir_str
-\str_new:N \l_@@_ext_str
-\str_new:N \l_@@_name_str
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_file_search_path_seq}
-% The current search path.
-% \begin{macrocode}
-\seq_new:N \l_file_search_path_seq
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_tmp_seq}
-% Scratch space for comma list conversion.
-% \begin{macrocode}
-\seq_new:N \l_@@_tmp_seq
-% \end{macrocode}
-% \end{variable}
-%
-% \subsubsection{Internal auxiliaries}
-%
-% \begin{variable}{\s_@@_stop}
-% Internal scan marks.
-% \begin{macrocode}
-\scan_new:N \s_@@_stop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\q_@@_nil}
-% Internal quarks.
-% \begin{macrocode}
-\quark_new:N \q_@@_nil
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[pTF]{\@@_quark_if_nil:n}
-% Branching quark conditional.
-% \begin{macrocode}
-\__kernel_quark_new_conditional:Nn \@@_quark_if_nil:n { TF }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\q_@@_recursion_tail,\q_@@_recursion_stop}
-% Internal recursion quarks.
-% \begin{macrocode}
-\quark_new:N \q_@@_recursion_tail
-\quark_new:N \q_@@_recursion_stop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[EXP]{
-% \@@_if_recursion_tail_break:NN,
-% \@@_if_recursion_tail_stop_do:Nn
-% }
-% Functions to query recursion quarks.
-% \begin{macrocode}
-\__kernel_quark_new_test:N \@@_if_recursion_tail_stop:N
-\__kernel_quark_new_test:N \@@_if_recursion_tail_stop_do:nn
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\__kernel_file_name_sanitize:n}
-% \begin{macro}[EXP]{
-% \@@_name_expand:n,
-% \@@_name_expand_cleanup:Nw,
-% \@@_name_expand_cleanup:w,
-% \@@_name_expand_end:,
-% \@@_name_expand_error:Nw,
-% \@@_name_expand_error_aux:Nw,
-% }
-% \begin{macro}[EXP]{
-% \@@_name_strip_quotes:n,
-% \@@_name_strip_quotes:nnnw,
-% \@@_name_strip_quotes:nnn,
-% }
-% \begin{macro}[EXP]{
-% \@@_name_trim_spaces:n,
-% \@@_name_trim_spaces:nw,
-% \@@_name_trim_spaces_aux:n,
-% \@@_name_trim_spaces_aux:w,
-% }
-% Expanding the file name uses a \tn{csname}-based approach, and
-% relies on active characters (for example from UTF-8 characters)
-% being properly set up to expand to a expansion-safe version using
-% \cs{ifcsname}. This is less conservative than the token-by-token
-% approach used before, but it is much faster.
-% \begin{macrocode}
-\cs_new:Npn \__kernel_file_name_sanitize:n #1
- {
- \exp_args:Ne \@@_name_trim_spaces:n
- {
- \exp_args:Ne \@@_name_strip_quotes:n
- { \@@_name_expand:n {#1} }
- }
- }
-% \end{macrocode}
-%
-% We'll use \cs{cs:w} to start expanding the file name, and to avoid
-% creating csnames equal to \tn{relax} with \enquote{common} names,
-% there's a prefix |__file_name=| to the csname. There's also a guard
-% token at the end so we can check if there was an error during the
-% process and (try to) clean up gracefully.
-% \begin{macrocode}
-\cs_new:Npn \@@_name_expand:n #1
- {
- \exp_after:wN \@@_name_expand_cleanup:Nw
- \cs:w @@_name = #1 \cs_end:
- \@@_name_expand_end:
- }
-% \end{macrocode}
-% With the csname built, we grab it, and grab the remaining tokens
-% delimited by \cs{@@_name_expand_end:}. If there are any remaining
-% tokens, something bad happened, so we'll call the error procedure
-% \cs{@@_name_expand_error:Nw}.
-% If everything went according to plan, then use \cs{token_to_str:N}
-% on the csname built, and call \cs{@@_name_expand_cleanup:w} to
-% remove the prefix we added a while back.
-% \cs{@@_name_expand_cleanup:w} takes a leading argument so we don't
-% have to bother about the value of \cs{tex_escapechar:D}.
-% \begin{macrocode}
-\cs_new:Npn \@@_name_expand_cleanup:Nw #1 #2 \@@_name_expand_end:
- {
- \tl_if_empty:nF {#2}
- { \@@_name_expand_error:Nw #2 \@@_name_expand_end: }
- \exp_after:wN \@@_name_expand_cleanup:w \token_to_str:N #1
- }
-\exp_last_unbraced:NNNNo
-\cs_new:Npn \@@_name_expand_cleanup:w #1 \tl_to_str:n { @@_name = } { }
-% \end{macrocode}
-% In non-error cases \cs{@@_name_expand_end:} should not expand. It
-% will only do so in case there is a \cs{csname} too much in the file
-% name, so it will throw an error (while expanding), then insert the
-% missing \cs{cs_end:} and yet another \cs{@@_name_expand_end:} that
-% will be used as a delimiter by \cs{@@_name_expand_cleanup:Nw} (or
-% that will expand again if yet another \cs{endcsname} is missing).
-% \begin{macrocode}
-\cs_new:Npn \@@_name_expand_end:
- {
- \msg_expandable_error:nn
- { kernel } { filename-missing-endcsname }
- \cs_end: \@@_name_expand_end:
- }
-% \end{macrocode}
-% Now to the error case. \cs{@@_name_expand_error:Nw} adds an extra
-% \cs{cs_end:} so that in case there was an extra \tn{csname} in the
-% file name, then \cs{@@_name_expand_error_aux:Nw} throws the error.
-% \begin{macrocode}
-\cs_new:Npn \@@_name_expand_error:Nw #1 #2 \@@_name_expand_end:
- { \@@_name_expand_error_aux:Nw #1 #2 \cs_end: \@@_name_expand_end: }
-\cs_new:Npn \@@_name_expand_error_aux:Nw #1 #2 \cs_end: #3
- \@@_name_expand_end:
- {
- \msg_expandable_error:nnff
- { kernel } { filename-chars-lost }
- { \token_to_str:N #1 } { \exp_stop_f: #2 }
- }
-% \end{macrocode}
-% Quoting file name uses basically the same approach as for
-% \texttt{luaquotejobname}: count the |"| tokens and remove them.
-% \begin{macrocode}
-\cs_new:Npn \@@_name_strip_quotes:n #1
- {
- \@@_name_strip_quotes:nw { 0 }
- #1 " \q_@@_recursion_tail " \q_@@_recursion_stop {#1}
- }
-\cs_new:Npn \@@_name_strip_quotes:nw #1#2 "
- {
- \if_meaning:w \q_@@_recursion_tail #2
- \@@_name_strip_quotes_end:wnwn
- \fi:
- #2
- \@@_name_strip_quotes:nw { #1 + 1 }
- }
-\cs_new:Npn \@@_name_strip_quotes_end:wnwn \fi: #1
- \@@_name_strip_quotes:nw #2 \q_@@_recursion_stop #3
- {
- \fi:
- \int_if_odd:nT {#2}
- {
- \msg_expandable_error:nnn
- { kernel } { unbalanced-quote-in-filename } {#3}
- }
- }
-% \end{macrocode}
-% Spaces need to be trimmed from the start of the name and from the end of
-% any extension. However, the name we are passed might not have an extension:
-% that means we have to look for one. If there is no extension, we still use
-% the standard trimming function but deliberately prevent any spaces being
-% removed at the end.
-% \begin{macrocode}
-\cs_new:Npn \@@_name_trim_spaces:n #1
- { \@@_name_trim_spaces:nw {#1} #1 . \q_@@_nil . \s_@@_stop }
-\cs_new:Npn \@@_name_trim_spaces:nw #1#2 . #3 . #4 \s_@@_stop
- {
- \@@_quark_if_nil:nTF {#3}
- {
- \tl_trim_spaces_apply:nN { #1 \s_@@_stop }
- \@@_name_trim_spaces_aux:n
- }
- { \tl_trim_spaces:n {#1} }
- }
-\cs_new:Npn \@@_name_trim_spaces_aux:n #1
- { \@@_name_trim_spaces_aux:w #1 }
-\cs_new:Npn \@@_name_trim_spaces_aux:w #1 \s_@@_stop {#1}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\__kernel_file_name_quote:n}
-% \begin{macro}[EXP]{\@@_name_quote:nw}
-% \begin{macrocode}
-\cs_new:Npn \__kernel_file_name_quote:n #1
- { \@@_name_quote:nw {#1} #1 ~ \q_@@_nil \s_@@_stop }
-\cs_new:Npn \@@_name_quote:nw #1 #2 ~ #3 \s_@@_stop
- {
- \@@_quark_if_nil:nTF {#3}
- { #1 }
- { "#1" }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{variable}{\c_@@_marker_tl}
-% The same idea as the marker for rescanning token lists: this pair of
-% tokens cannot appear in a file that is being input.
-% \begin{macrocode}
-\tl_const:Ne \c_@@_marker_tl { : \token_to_str:N : }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[TF]{\file_get:nnN, \file_get:VnN}
-% \begin{macro}{\file_get:nnN,\@@_get_aux:nnN,\@@_get_do:Nw}
-% The approach here is similar to that for \cs{tl_set_rescan:Nnn}.
-% The file contents are grabbed as an argument delimited by
-% \cs{c_@@_marker_tl}. A few subtleties: braces in \cs{if_false:}
-% \ldots{} \cs{fi:} to deal with possible alignment tabs,
-% \tn{tracingnesting} to avoid a warning about a group being closed
-% inside the \tn{scantokens}, and \cs{prg_return_true:} is placed
-% after the end-of-file marker.
-% \begin{macrocode}
-\cs_new_protected:Npn \file_get:nnN #1#2#3
- {
- \file_get:nnNF {#1} {#2} #3
- { \tl_set:Nn #3 { \q_no_value } }
- }
-\cs_generate_variant:Nn \file_get:nnN { V }
-\prg_new_protected_conditional:Npnn \file_get:nnN #1#2#3 { T , F , TF }
- {
- \file_get_full_name:nNTF {#1} \l_@@_full_name_tl
- {
- \exp_args:NV \@@_get_aux:nnN
- \l_@@_full_name_tl
- {#2} #3
- \prg_return_true:
- }
- { \prg_return_false: }
- }
-\prg_generate_conditional_variant:Nnn \file_get:nnN { V } { T , F , TF }
-\cs_new_protected:Npe \@@_get_aux:nnN #1#2#3
- {
- \exp_not:N \if_false: { \exp_not:N \fi:
- \group_begin:
- \int_set_eq:NN \tex_tracingnesting:D \c_zero_int
- \exp_not:N \exp_args:No \tex_everyeof:D
- { \exp_not:N \c_@@_marker_tl }
- #2 \scan_stop:
- \exp_not:N \exp_after:wN \exp_not:N \@@_get_do:Nw
- \exp_not:N \exp_after:wN #3
- \exp_not:N \exp_after:wN \exp_not:N \prg_do_nothing:
- \exp_not:N \tex_input:D
- \sys_if_engine_luatex:TF
- { {#1} }
- { \exp_not:N \__kernel_file_name_quote:n {#1} \scan_stop: }
- \exp_not:N \if_false: } \exp_not:N \fi:
- }
-\exp_args:Nno \use:nn
- { \cs_new_protected:Npn \@@_get_do:Nw #1#2 }
- { \c_@@_marker_tl }
- {
- \group_end:
- \tl_set:No #1 {#2}
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_size:n}
-% A copy of the primitive where it's available.
-% \begin{macrocode}
-\cs_new_eq:NN \@@_size:n \tex_filesize:D
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\file_full_name:n, \@@_full_name:n, \@@_full_name_aux:n}
-% \begin{macro}[EXP]{\@@_full_name_auxi:nn, \@@_full_name_auxii:nn}
-% \begin{macro}[EXP]{\@@_full_name_aux:Nnn}
-% \begin{macro}[EXP]{\@@_full_name_slash:n}
-% \begin{macro}[EXP]{\@@_full_name_slash:w}
-% \begin{macro}[EXP]{\@@_full_name_aux:nN}
-% \begin{macro}[EXP]{\@@_full_name_aux:nnN}
-% \begin{macro}[EXP]{\@@_name_cleanup:w}
-% \begin{macro}[EXP]{\@@_name_end:}
-% \begin{macro}[EXP]{\@@_name_ext_check:nn}
-% \begin{macro}[EXP]{\@@_name_ext_check:nnw}
-% \begin{macro}[EXP]{\@@_name_ext_check:nnnw}
-% \begin{macro}[EXP]{\@@_name_ext_check:nnn}
-% \begin{macro}[EXP]{\@@_name_ext_check:nnnn}
-% File searching can be carried out if the \tn{pdffilesize} primitive
-% or an equivalent is available. That of course means we need to
-% arrange for everything else to here to be done by expansion too.
-% We start off by sanitizing the name and quoting if required: we
-% may need to remove those quotes, so the raw name is passed too.
-% \begin{macrocode}
-\cs_new:Npn \file_full_name:n #1
- {
- \exp_args:Ne \@@_full_name:n
- { \__kernel_file_name_sanitize:n {#1} }
- }
-\cs_generate_variant:Nn \file_full_name:n { V }
-% \end{macrocode}
-% First, we check of the file is just here: no mapping so we do not
-% need the break part of the broader auxiliary. We are using the fact
-% that the primitive here returns nothing if the file is entirely absent.
-% To avoid unnecessary filesystem lookups, the result of \tn{pdffilesize}
-% is kept available as an argument.
-% For package mode, \tn{input@path} is a token list not a sequence.
-% \begin{macrocode}
-\cs_new:Npn \@@_full_name:n #1
- {
- \tl_if_blank:nF {#1}
- { \exp_args:Nne \@@_full_name_auxii:nn {#1} { \@@_full_name_aux:n {#1} } }
- }
-% \end{macrocode}
-% To avoid repeated reading of files we need to cache the loading:
-% this is important as the code here is used by \emph{all} file checks.
-% The same marker is used in the \LaTeXe{} kernel, meaning that we get a
-% double-saving with for example \cs{IfFileExists}. As this is all about
-% performance, we use the low-level approach for the conditionals. For
-% a file already seen, the size is reported as $-1$ so it's distinct from
-% any non-cached ones.
-% \begin{macrocode}
-\cs_new:Npn \@@_full_name_aux:n #1
- {
- \if_cs_exist:w @@_seen_ \tl_to_str:n {#1} : \cs_end:
- -1
- \else:
- \exp_args:Ne \@@_full_name_auxi:nn { \@@_size:n {#1} } {#1}
- \fi:
- }
-% \end{macrocode}
-% We will need the size of files later, and we have to avoid the
-% \cs{scan_stop:} causing issues if we are raising the flag. Thus there is
-% a slightly odd gobble here.
-% \begin{macrocode}
-\cs_new:Npn \@@_full_name_auxi:nn #1#2
- {
- \if:w \scan_stop: #1 \scan_stop:
- \else:
- \exp_after:wN \use_none:n
- \cs:w @@_seen_ \tl_to_str:n {#2} : \cs_end:
- #1
- \fi:
- }
-\cs_new:Npn \@@_full_name_auxii:nn #1 #2
- {
- \tl_if_blank:nTF {#2}
- {
- \seq_map_tokens:Nn \l_file_search_path_seq
- { \@@_full_name_aux:Nnn \seq_map_break:n {#1} }
- \cs_if_exist:NT \input@path
- {
- \tl_map_tokens:Nn \input@path
- { \@@_full_name_aux:Nnn \tl_map_break:n {#1} }
- }
- \@@_name_end:
- }
- { \@@_ext_check:nn {#1} {#2} }
- }
-% \end{macrocode}
-% Two pars to the auxiliary here so we can avoid doing quoting
-% twice in the event we find the right file.
-% \begin{macrocode}
-\cs_new:Npn \@@_full_name_aux:Nnn #1#2#3
- {
- \exp_args:Ne \@@_full_name_aux:nN
- { \@@_full_name_slash:n {#3} #2 }
- #1
- }
-\cs_new:Npn \@@_full_name_slash:n #1
- {
- \@@_full_name_slash:nw {#1} #1 \q_nil / \q_nil / \q_nil \q_stop
- }
-\cs_new:Npn \@@_full_name_slash:nw #1#2 / \q_nil / #3 \q_stop
- {
- \quark_if_nil:nTF {#3}
- { #1 / }
- { #2 / }
- }
-\cs_new:Npn \@@_full_name_aux:nN #1
- { \exp_args:Nne \@@_full_name_aux:nnN {#1} { \@@_full_name_aux:n {#1} } }
-\cs_new:Npn \@@_full_name_aux:nnN #1 #2 #3
- {
- \tl_if_blank:nF {#2}
- {
- #3
- {
- \@@_ext_check:nn {#1} {#2}
- \@@_name_cleanup:w
- }
- }
- }
-\cs_new:Npn \@@_name_cleanup:w #1 \@@_name_end: { }
-\cs_new:Npn \@@_name_end: { }
-% \end{macrocode}
-% As \TeX{} automatically adds |.tex| if there is no extension,
-% there is a little clean up to do here. First, make sure we are not in the
-% directory part, saving that. Then check for an extension.
-% \begin{macrocode}
-\cs_new:Npn \@@_ext_check:nn #1 #2
-{ \@@_ext_check:nnw {#2} { / } #1 / \q_@@_nil / \s_@@_stop }
-\cs_new:Npn \@@_ext_check:nnw #1 #2 #3 / #4 / #5 \s_@@_stop
- {
- \@@_quark_if_nil:nTF {#4}
- {
- \exp_args:No \@@_ext_check:nnnw
- { \use_none:n #2 } {#1} {#3} #3 . \q_@@_nil . \s_@@_stop
- }
- { \@@_ext_check:nnw {#1} { #2 #3 / } #4 / #5 \s_@@_stop }
- }
-\cs_new:Npe \@@_ext_check:nnnw #1#2#3#4 . #5 . #6 \s_@@_stop
- {
- \exp_not:N \@@_quark_if_nil:nTF {#5}
- {
- \exp_not:N \@@_ext_check:nnn
- { #1 #3 \tl_to_str:n { .tex } } { #1 #3 } {#2}
- }
- { #1 #3 }
- }
-\cs_new:Npn \@@_ext_check:nnn #1
- { \exp_args:Nne \@@_ext_check:nnnn {#1} { \@@_full_name_aux:n {#1} } }
-\cs_new:Npn \@@_ext_check:nnnn #1#2#3#4
- {
- \tl_if_blank:nTF {#2}
- {#3}
- {
- \bool_lazy_or:nnTF
- { \int_compare_p:nNn {#4} = {#2} }
- { \int_compare_p:nNn {#2} = { -1 } }
- {#1}
- {#3}
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\file_get_full_name:nN, \file_get_full_name:VN}
-% \begin{macro}[TF]{\file_get_full_name:nN, \file_get_full_name:VN}
-% \begin{macro}{\@@_get_full_name_search:nN}
-% These functions pre-date using \cs{tex_filesize:D} for file searching,
-% so are |get| functions with protection. To avoid having different
-% search set ups, they are simply wrappers around the code above.
-% \begin{macrocode}
-\cs_new_protected:Npn \file_get_full_name:nN #1#2
- {
- \file_get_full_name:nNF {#1} #2
- { \tl_set:Nn #2 { \q_no_value } }
- }
-\cs_generate_variant:Nn \file_get_full_name:nN { V }
-\prg_new_protected_conditional:Npnn \file_get_full_name:nN #1#2 { T , F , TF }
- {
- \__kernel_tl_set:Nx #2
- { \file_full_name:n {#1} }
- \tl_if_empty:NTF #2
- { \prg_return_false: }
- { \prg_return_true: }
- }
-\prg_generate_conditional_variant:Nnn \file_get_full_name:nN
- { V } { T , F , TF }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{variable}{\g_@@_internal_ior}
-% A reserved stream to test for opening a shell.
-% \begin{macrocode}
-\ior_new:N \g_@@_internal_ior
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[rEXP]
-% {
-% \file_mdfive_hash:n, \file_mdfive_hash:V,
-% \file_size:n, \file_size:V,
-% \file_timestamp:n, \file_timestamp:V
-% }
-% \begin{macro}[rEXP]{\@@_details:nn, \@@_details_aux:nn}
-% \begin{macro}[rEXP]{\@@_mdfive_hash:n}
-% Getting file details by expansion is relatively easy if a bit repetitive.
-% As the MD5 function has a slightly different syntax from the other commands,
-% there is a little cleaning up to do.
-% \begin{macrocode}
-\cs_new:Npn \file_size:n #1
- { \@@_details:nn {#1} { size } }
-\cs_generate_variant:Nn \file_size:n { V }
-\cs_new:Npn \file_timestamp:n #1
- { \@@_details:nn {#1} { moddate } }
-\cs_generate_variant:Nn \file_timestamp:n { V }
-\cs_new:Npn \@@_details:nn #1#2
- {
- \exp_args:Ne \@@_details_aux:nn
- { \file_full_name:n {#1} } {#2}
- }
-\cs_new:Npn \@@_details_aux:nn #1#2
- {
- \tl_if_blank:nF {#1}
- { \use:c { tex_file #2 :D } {#1} }
- }
-\cs_new:Npn \file_mdfive_hash:n #1
- { \exp_args:Ne \@@_mdfive_hash:n { \file_full_name:n {#1} } }
-\cs_generate_variant:Nn \file_mdfive_hash:n { V }
-\cs_new:Npn \@@_mdfive_hash:n #1
- { \tex_mdfivesum:D file {#1} }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\file_hex_dump:nnn, \file_hex_dump:Vnn, \@@_hex_dump_auxi:nnn}
-% \begin{macro}[rEXP]{\@@_hex_dump_auxii:nnnn, \@@_hex_dump_auxiii:nnnn}
-% \begin{macro}[rEXP]{\@@_hex_dump_auxiiv:nnn}
-% \begin{macro}[rEXP]{\file_hex_dump:n, \file_hex_dump:V, \@@_hex_dump:n}
-% These are separate as they need multiple arguments \emph{or} the
-% file size. For \LuaTeX{}, the emulation does not need the file
-% size so we save a little on expansion.
-% \begin{macrocode}
-\cs_new:Npn \file_hex_dump:nnn #1#2#3
- {
- \exp_args:Neee \@@_hex_dump_auxi:nnn
- { \file_full_name:n {#1} }
- { \int_eval:n {#2} }
- { \int_eval:n {#3} }
- }
-\cs_generate_variant:Nn \file_hex_dump:nnn { V }
-\cs_new:Npn \@@_hex_dump_auxi:nnn #1#2#3
- {
- \bool_lazy_any:nF
- {
- { \tl_if_blank_p:n {#1} }
- { \int_compare_p:nNn {#2} = 0 }
- { \int_compare_p:nNn {#3} = 0 }
- }
- {
- \exp_args:Ne \@@_hex_dump_auxii:nnnn
- { \@@_details_aux:nn {#1} { size } }
- {#1} {#2} {#3}
- }
- }
-\cs_new:Npn \@@_hex_dump_auxii:nnnn #1#2#3#4
- {
- \int_compare:nNnTF {#3} > 0
- { \@@_hex_dump_auxiii:nnnn {#3} }
- {
- \exp_args:Ne \@@_hex_dump_auxiii:nnnn
- { \int_eval:n { #1 + #3 } }
- }
- {#1} {#2} {#4}
- }
-\cs_new:Npn \@@_hex_dump_auxiii:nnnn #1#2#3#4
- {
- \int_compare:nNnTF {#4} > 0
- { \@@_hex_dump_auxiv:nnn {#4} }
- {
- \exp_args:Ne \@@_hex_dump_auxiv:nnn
- { \int_eval:n { #2 + #4 } }
- }
- {#1} {#3}
- }
-\cs_new:Npn \@@_hex_dump_auxiv:nnn #1#2#3
- {
- \tex_filedump:D
- offset ~ \int_eval:n { #2 - 1 } ~
- length ~ \int_eval:n { #1 - #2 + 1 }
- {#3}
- }
-\cs_new:Npn \file_hex_dump:n #1
- { \exp_args:Ne \@@_hex_dump:n { \file_full_name:n {#1} } }
-\cs_generate_variant:Nn \file_hex_dump:n { V }
-\sys_if_engine_luatex:TF
- {
- \cs_new:Npn \@@_hex_dump:n #1
- {
- \tl_if_blank:nF {#1}
- { \tex_filedump:D whole {#1} {#1} }
- }
- }
- {
- \cs_new:Npn \@@_hex_dump:n #1
- {
- \tl_if_blank:nF {#1}
- { \tex_filedump:D length \tex_filesize:D {#1} {#1} }
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[noTF]
-% {
-% \file_get_hex_dump:nN, \file_get_hex_dump:VN,
-% \file_get_mdfive_hash:nN, \file_get_mdfive_hash:VN,
-% \file_get_size:nN, \file_get_size:VN,
-% \file_get_timestamp:nN, \file_get_timestamp:VN
-% }
-% \begin{macro}{\@@_get_details:nnN}
-% Non-expandable wrappers around the above in the case where appropriate
-% primitive support exists.
-% \begin{macrocode}
-\cs_new_protected:Npn \file_get_hex_dump:nN #1#2
- { \file_get_hex_dump:nNF {#1} #2 { \tl_set:Nn #2 { \q_no_value } } }
-\cs_generate_variant:Nn \file_get_hex_dump:nN { V }
-\cs_new_protected:Npn \file_get_mdfive_hash:nN #1#2
- { \file_get_mdfive_hash:nNF {#1} #2 { \tl_set:Nn #2 { \q_no_value } } }
-\cs_generate_variant:Nn \file_get_mdfive_hash:nN { V }
-\cs_new_protected:Npn \file_get_size:nN #1#2
- { \file_get_size:nNF {#1} #2 { \tl_set:Nn #2 { \q_no_value } } }
-\cs_generate_variant:Nn \file_get_size:nN { V }
-\cs_new_protected:Npn \file_get_timestamp:nN #1#2
- { \file_get_timestamp:nNF {#1} #2 { \tl_set:Nn #2 { \q_no_value } } }
-\cs_generate_variant:Nn \file_get_timestamp:nN { V }
-\prg_new_protected_conditional:Npnn \file_get_hex_dump:nN #1#2 { T , F , TF }
- { \@@_get_details:nnN {#1} { hex_dump } #2 }
-\prg_generate_conditional_variant:Nnn \file_get_hex_dump:nN
- { V } { T , F , TF }
-\prg_new_protected_conditional:Npnn \file_get_mdfive_hash:nN #1#2 { T , F , TF }
- { \@@_get_details:nnN {#1} { mdfive_hash } #2 }
-\prg_generate_conditional_variant:Nnn \file_get_mdfive_hash:nN
- { V } { T , F , TF }
-\prg_new_protected_conditional:Npnn \file_get_size:nN #1#2 { T , F , TF }
- { \@@_get_details:nnN {#1} { size } #2 }
-\prg_generate_conditional_variant:Nnn \file_get_size:nN
- { V } { T , F , TF }
-\prg_new_protected_conditional:Npnn \file_get_timestamp:nN #1#2 { T , F , TF }
- { \@@_get_details:nnN {#1} { timestamp } #2 }
-\prg_generate_conditional_variant:Nnn \file_get_timestamp:nN
- { V } { T , F , TF }
-\cs_new_protected:Npn \@@_get_details:nnN #1#2#3
- {
- \__kernel_tl_set:Nx #3
- { \use:c { file_ #2 :n } {#1} }
- \tl_if_empty:NTF #3
- { \prg_return_false: }
- { \prg_return_true: }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[noTF]{\file_get_hex_dump:nnnN, \file_get_hex_dump:VnnN}
-% Custom code due to the additional arguments.
-% \begin{macrocode}
-\cs_new_protected:Npn \file_get_hex_dump:nnnN #1#2#3#4
- {
- \file_get_hex_dump:nnnNF {#1} {#2} {#3} #4
- { \tl_set:Nn #4 { \q_no_value } }
- }
-\cs_generate_variant:Nn \file_get_hex_dump:nnnN { V }
-\prg_new_protected_conditional:Npnn \file_get_hex_dump:nnnN #1#2#3#4
- { T , F , TF }
- {
- \__kernel_tl_set:Nx #4
- { \file_hex_dump:nnn {#1} {#2} {#3} }
- \tl_if_empty:NTF #4
- { \prg_return_false: }
- { \prg_return_true: }
- }
-\prg_generate_conditional_variant:Nnn \file_get_hex_dump:nnnN
- { V } { T , F , TF }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_str_cmp:nn}
-% As we are doing a fixed-length \enquote{big} integer comparison, it
-% is easiest to use the low-level behavior of string comparisons.
-% \begin{macrocode}
-\cs_new_eq:NN \@@_str_cmp:nn \tex_strcmp:D
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP, pTF]
-% {
-% \file_compare_timestamp:nNn,
-% \file_compare_timestamp:nNV,
-% \file_compare_timestamp:VNn,
-% \file_compare_timestamp:VNV
-% }
-% \begin{macro}[EXP]{\@@_compare_timestamp:nnN}
-% \begin{macro}[EXP]{\@@_timestamp:n}
-% Comparison of file date can be done by using the low-level nature of the
-% string comparison functions.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \file_compare_timestamp:nNn #1#2#3
- { p , T , F , TF }
- {
- \exp_args:Nee \@@_compare_timestamp:nnN
- { \file_full_name:n {#1} }
- { \file_full_name:n {#3} }
- #2
- }
-\prg_generate_conditional_variant:Nnn \file_compare_timestamp:nNn
- { nNV , V , VNV } { p , T , F , TF }
-\cs_new:Npn \@@_compare_timestamp:nnN #1#2#3
- {
- \tl_if_blank:nTF {#1}
- {
- \if_charcode:w #3 <
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
- {
- \tl_if_blank:nTF {#2}
- {
- \if_charcode:w #3 >
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
- {
- \if_int_compare:w
- \@@_str_cmp:nn
- { \@@_timestamp:n {#1} }
- { \@@_timestamp:n {#2} }
- #3 \c_zero_int
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
- }
- }
-\cs_new_eq:NN \@@_timestamp:n \tex_filemoddate:D
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\file_if_exist:n, \file_if_exist:V}
-% The test for the existence of a file is a wrapper around the function to
-% add a path to a file. If the file was found, the path contains
-% something, whereas if the file was not located then the return value
-% is empty.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \file_if_exist:n #1 { p , T , F , TF }
- {
- \tl_if_blank:eTF { \file_full_name:n {#1} }
- { \prg_return_false: }
- { \prg_return_true: }
- }
-\prg_generate_conditional_variant:Nnn \file_if_exist:n { V } { p , T , F , TF }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \file_if_exist_input:n,
-% \file_if_exist_input:V,
-% \file_if_exist_input:nF,
-% \file_if_exist_input:VF
-% }
-% Input of a file with a test for existence. We do not define the |T|
-% or |TF| variants because the most useful place to place the
-% \meta{true code} would be inconsistent with other conditionals.
-% \begin{macrocode}
-\cs_new_protected:Npn \file_if_exist_input:n #1
- {
- \file_get_full_name:nNT {#1} \l_@@_full_name_tl
- { \@@_input:V \l_@@_full_name_tl }
- }
-\cs_generate_variant:Nn \file_if_exist_input:n { V }
-\cs_new_protected:Npn \file_if_exist_input:nF #1#2
- {
- \file_get_full_name:nNTF {#1} \l_@@_full_name_tl
- { \@@_input:V \l_@@_full_name_tl }
- {#2}
- }
-\cs_generate_variant:Nn \file_if_exist_input:nF { V }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\file_input_stop:}
-% A simple rename.
-% \begin{macrocode}
-\cs_new_protected:Npn \file_input_stop: { \tex_endinput:D }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\__kernel_file_missing:n}
-% An error message for a missing file, also used in \cs{ior_open:Nn}.
-% \begin{macrocode}
-\cs_new_protected:Npn \__kernel_file_missing:n #1
- {
- \msg_error:nne { kernel } { file-not-found }
- { \__kernel_file_name_sanitize:n {#1} }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\file_input:n, \file_input:V}
-% \begin{macro}{\@@_input:n, \@@_input:V}
-% \begin{macro}{\@@_input_push:n, \__kernel_file_input_push:n}
-% \begin{macro}{\@@_input_pop:, \__kernel_file_input_pop:}
-% \begin{macro}{\@@_input_pop:nnn}
-% Loading a file is done in a safe way, checking first that the file
-% exists and loading only if it does. Push the file name on the
-% \cs{g_@@_stack_seq}, and add it to the file list, either
-% \cs{g_@@_record_seq}, or \cs{@filelist} in package mode.
-% \begin{macrocode}
-\cs_new_protected:Npn \file_input:n #1
- {
- \file_get_full_name:nNTF {#1} \l_@@_full_name_tl
- { \@@_input:V \l_@@_full_name_tl }
- { \__kernel_file_missing:n {#1} }
- }
-\cs_generate_variant:Nn \file_input:n { V }
-\cs_new_protected:Npe \@@_input:n #1
- {
- \exp_not:N \clist_if_exist:NTF \exp_not:N \@filelist
- { \exp_not:N \@addtofilelist {#1} }
- { \seq_gput_right:Nn \exp_not:N \g_@@_record_seq {#1} }
- \exp_not:N \@@_input_push:n {#1}
- \exp_not:N \tex_input:D
- \sys_if_engine_luatex:TF
- { {#1} }
- { \exp_not:N \__kernel_file_name_quote:n {#1} \scan_stop: }
- \exp_not:N \@@_input_pop:
- }
-\cs_generate_variant:Nn \@@_input:n { V }
-% \end{macrocode}
-% Keeping a track of the file data is easy enough: we store the separated
-% parts so we do not need to parse them twice.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_input_push:n #1
- {
- \seq_gpush:Ne \g_@@_stack_seq
- {
- { \g_file_curr_dir_str }
- { \g_file_curr_name_str }
- { \g_file_curr_ext_str }
- }
- \file_parse_full_name:nNNN {#1}
- \l_@@_dir_str \l_@@_name_str \l_@@_ext_str
- \str_gset_eq:NN \g_file_curr_dir_str \l_@@_dir_str
- \str_gset_eq:NN \g_file_curr_name_str \l_@@_name_str
- \str_gset_eq:NN \g_file_curr_ext_str \l_@@_ext_str
- }
-\cs_new_eq:NN \__kernel_file_input_push:n \@@_input_push:n
-\cs_new_protected:Npn \@@_input_pop:
- {
- \seq_gpop:NN \g_@@_stack_seq \l_@@_internal_tl
- \exp_after:wN \@@_input_pop:nnn \l_@@_internal_tl
- }
-\cs_new_eq:NN \__kernel_file_input_pop: \@@_input_pop:
-\cs_new_protected:Npn \@@_input_pop:nnn #1#2#3
- {
- \str_gset:Nn \g_file_curr_dir_str {#1}
- \str_gset:Nn \g_file_curr_name_str {#2}
- \str_gset:Nn \g_file_curr_ext_str {#3}
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\file_input_raw:n, \file_input_raw:V, \@@_input_raw:nn}
-% No error checking, no tracking.
-% \begin{macrocode}
-\cs_new:Npn \file_input_raw:n #1
- { \exp_args:Ne \@@_input_raw:nn { \file_full_name:n {#1} } {#1} }
-\cs_generate_variant:Nn \file_input_raw:n { V }
-\cs_new:Npe \@@_input_raw:nn #1#2
- {
- \exp_not:N \tl_if_blank:nTF {#1}
- {
- \exp_not:N \exp_args:Nnne \exp_not:N \msg_expandable_error:nnn
- { kernel } { file-not-found }
- { \exp_not:N \__kernel_file_name_sanitize:n {#2} }
- }
- {
- \exp_not:N \tex_input:D
- \sys_if_engine_luatex:TF
- { {#1} }
- { \exp_not:N \__kernel_file_name_quote:n {#1} \scan_stop: }
- }
- }
-\exp_args_generate:n { nne }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\file_parse_full_name:n, \file_parse_full_name:V}
-% \begin{macro}{\file_parse_full_name_apply:nN, \file_parse_full_name_apply:VN}
-% The main parsing macro \cs{file_parse_full_name_apply:nN} passes the
-% file name |#1| through \cs{__kernel_file_name_sanitize:n} so that we
-% have a single normalised way to treat files internally.
-% \cs{file_parse_full_name:n} uses the former, with
-% \cs{prg_do_nothing:} to
-% leave each part of the name within a pair of braces.
-% \begin{macrocode}
-\cs_new:Npn \file_parse_full_name:n #1
- {
- \file_parse_full_name_apply:nN {#1}
- \prg_do_nothing:
- }
-\cs_generate_variant:Nn \file_parse_full_name:n { V }
-\cs_new:Npn \file_parse_full_name_apply:nN #1
- {
- \exp_args:Ne \@@_parse_full_name_auxi:nN
- { \__kernel_file_name_sanitize:n {#1} }
- }
-\cs_generate_variant:Nn \file_parse_full_name_apply:nN { V }
-% \end{macrocode}
-%
-% \begin{macro}{\@@_parse_full_name_auxi:nN}
-% \begin{macro}{\@@_parse_full_name_area:nw}
-% \cs{@@_parse_full_name_area:nw} splits the file name into chunks
-% separated by |/|, until the last one is reached. The last chunk is
-% the file name plus the extension, and everything before that is the
-% path. When \cs{@@_parse_full_name_area:nw} is done, it leaves
-% the path within braces after the scan mark \cs{s_@@_stop} and
-% proceeds parsing the actual file name.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_full_name_auxi:nN #1
- {
- \@@_parse_full_name_area:nw { } #1
- / \s_@@_stop
- }
-\cs_new:Npn \@@_parse_full_name_area:nw #1 #2 / #3 \s_@@_stop
- {
- \tl_if_empty:nTF {#3}
- { \@@_parse_full_name_base:nw { } #2 . \s_@@_stop {#1} }
- { \@@_parse_full_name_area:nw { #1 / #2 } #3 \s_@@_stop }
- }
-% \end{macrocode}
-%
-% \begin{macro}{\@@_parse_full_name_base:nw}
-% \cs{@@_parse_full_name_base:nw} does roughly the same as above, but
-% it separates the chunks at each period. However here there's some
-% extra complications: In case |#1| is empty, it is assumed that the
-% extension is actually empty, and the file name is |#2|. Besides, an
-% extra |.| has to be added to |#2| because it is later removed in
-% \cs{@@_parse_full_name_tidy:nnnN}. In any case, if there's an
-% extension, it is returned with a leading |.|.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_full_name_base:nw #1 #2 . #3 \s_@@_stop
- {
- \tl_if_empty:nTF {#3}
- {
- \tl_if_empty:nTF {#1}
- {
- \tl_if_empty:nTF {#2}
- { \@@_parse_full_name_tidy:nnnN { } { } }
- { \@@_parse_full_name_tidy:nnnN { .#2 } { } }
- }
- { \@@_parse_full_name_tidy:nnnN {#1} { .#2 } }
- }
- { \@@_parse_full_name_base:nw { #1 . #2 } #3 \s_@@_stop }
- }
-% \end{macrocode}
-%
-% \begin{macro}{\@@_parse_full_name_tidy:nnnN}
-% Now we just need to tidy some bits left loose before. The loop
-% used in the two macros above start with a leading |/| and |.| in the
-% file path an name, so here we need to remove them, except in the
-% path, if it is a single |/|, in which case it's left as is. After
-% all's done, pass to |#4|.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_full_name_tidy:nnnN #1 #2 #3 #4
- {
- \exp_args:Nee #4
- {
- \str_if_eq:nnF {#3} { / } { \use_none:n }
- #3 \prg_do_nothing:
- }
- { \use_none:n #1 \prg_do_nothing: }
- {#2}
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\file_parse_full_name:nNNN, \file_parse_full_name:VNNN}
-% \begin{macrocode}
-\cs_new_protected:Npn \file_parse_full_name:nNNN #1 #2 #3 #4
- {
- \file_parse_full_name_apply:nN {#1}
- \@@_full_name_assign:nnnNNN #2 #3 #4
- }
-\cs_new_protected:Npn \@@_full_name_assign:nnnNNN #1 #2 #3 #4 #5 #6
- {
- \str_set:Nn #4 {#1}
- \str_set:Nn #5 {#2}
- \str_set:Nn #6 {#3}
- }
-\cs_generate_variant:Nn \file_parse_full_name:nNNN { V }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\file_show_list:, \file_log_list:, \@@_list:N}
-% \begin{macro}[EXP]{\@@_list_aux:n}
-% A function to list all files used to the log, without duplicates.
-% In package mode, if \cs{@filelist} is still defined, we need to take
-% this list of file names into account (we capture it
-% \cs{AtBeginDocument} into \cs{g_@@_record_seq}), turning it to a
-% string (this does not affect the commas of this comma list).
-% \begin{macrocode}
-\cs_new_protected:Npn \file_show_list: { \@@_list:N \msg_show:nneeee }
-\cs_new_protected:Npn \file_log_list: { \@@_list:N \msg_log:nneeee }
-\cs_new_protected:Npn \@@_list:N #1
- {
- \seq_clear:N \l_@@_tmp_seq
- \clist_if_exist:NT \@filelist
- {
- \exp_args:NNe \seq_set_from_clist:Nn \l_@@_tmp_seq
- { \tl_to_str:N \@filelist }
- }
- \seq_concat:NNN \l_@@_tmp_seq \l_@@_tmp_seq \g_@@_record_seq
- \seq_remove_duplicates:N \l_@@_tmp_seq
- #1 { kernel } { file-list }
- { \seq_map_function:NN \l_@@_tmp_seq \@@_list_aux:n }
- { } { } { }
- }
-\cs_new:Npn \@@_list_aux:n #1 { \iow_newline: #1 }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% When used as a package, there is a need to hold onto the standard file
-% list as well as the new one here. File names recorded in
-% \cs{@filelist} must be turned to strings before being added to
-% \cs{g_@@_record_seq}.
-% \begin{macrocode}
-\cs_if_exist:NT \@filelist
- {
- \AtBeginDocument
- {
- \exp_args:NNe \seq_set_from_clist:Nn \l_@@_tmp_seq
- { \tl_to_str:N \@filelist }
- \seq_gconcat:NNN
- \g_@@_record_seq
- \g_@@_record_seq
- \l_@@_tmp_seq
- }
- }
-% \end{macrocode}
-%
-% \subsection{GetIdInfo}
-%
-% \begin{macro}{\GetIdInfo}
-% \begin{macro}{\@@_id_info_auxi:w, \@@_id_info_auxii:w, \@@_id_info_auxiii:w}
-% As documented in \pkg{expl3.dtx} this function extracts file name
-% etc from an \textsc{svn} \texttt{Id} line. This used to be how we
-% got version number and so on in all modules, so it had to be defined
-% in \pkg{l3bootstrap}. Now it's more convenient to define it after
-% we have set up quite a lot of tools, and \pkg{l3file} seems the
-% least unreasonable place for it.
-%
-% The idea here is to extract out the information needed from a standard
-% \textsc{svn} \texttt{Id} line, but to avoid a line that would get
-% changed when the file is checked in. Hence the fact that none of the
-% lines here include both a dollar sign and the \texttt{Id} keyword!
-% \begin{macrocode}
-\cs_new_protected:Npn \GetIdInfo
- {
- \tl_clear_new:N \ExplFileDescription
- \tl_clear_new:N \ExplFileDate
- \tl_clear_new:N \ExplFileName
- \tl_clear_new:N \ExplFileExtension
- \tl_clear_new:N \ExplFileVersion
- \group_begin:
- \char_set_catcode_space:n { 32 }
- \exp_after:wN
- \group_end:
- \@@_id_info_auxi:w
- }
-% \end{macrocode}
-% A first check for a completely empty \textsc{svn} field. If that is
-% not the case, there is a second case when a file created using
-% \texttt{svn cp} but has not been checked in. That leaves a special
-% marker \texttt{-1} version, which has no further data. Dealing
-% correctly with that is the reason for the space in the line to use
-% \cs{@@_id_info_auxii:w}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_id_info_auxi:w $ #1 $ #2
- {
- \tl_set:Nn \ExplFileDescription {#2}
- \str_if_eq:nnTF {#1} { Id }
- {
- \tl_set:Nn \ExplFileDate { 0000/00/00 }
- \tl_set:Nn \ExplFileName { [unknown] }
- \tl_set:Nn \ExplFileExtension { [unknown~extension] }
- \tl_set:Nn \ExplFileVersion {-1}
- }
- { \@@_id_info_auxii:w #1 ~ \s_@@_stop }
- }
-% \end{macrocode}
-% Here, |#1| is |Id|, |#2| is the file name, |#3| is the extension,
-% |#4| is the version, |#5| is the check in date and |#6| is the check
-% in time and user, plus some trailing spaces. If |#4| is the marker
-% |-1| value then |#5| and |#6| are empty.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_id_info_auxii:w
- #1 ~ #2.#3 ~ #4 ~ #5 ~ #6 \s_@@_stop
- {
- \tl_set:Nn \ExplFileName {#2}
- \tl_set:Nn \ExplFileExtension {#3}
- \tl_set:Nn \ExplFileVersion {#4}
- \str_if_eq:nnTF {#4} {-1}
- { \tl_set:Nn \ExplFileDate { 0000/00/00 } }
- { \@@_id_info_auxiii:w #5 - 0 - 0 - \s_@@_stop }
- }
-% \end{macrocode}
-% Convert an \textsc{svn}-style date into a \LaTeX{}-style one.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_id_info_auxiii:w #1 - #2 - #3 - #4 \s_@@_stop
- { \tl_set:Nn \ExplFileDate { #1/#2/#3 } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Checking the version of kernel dependencies}
-%
-% \begin{macro}{\__kernel_dependency_version_check:Nn}
-% \begin{macro}{\__kernel_dependency_version_check:nn}
-% \begin{macro}{\@@_kernel_dependency_compare:nnn,\@@_parse_version:w}
-% This function is responsible for checking if dependencies of the
-% \LaTeX3 kernel match the version preloaded in the \LaTeXe{} kernel.
-% If versions don't match, the function attempts to tell why by
-% searching for a possible stray format file.
-%
-% The function starts by checking that the kernel date is defined, and
-% if not zero is used to force the error route. The kernel date is
-% then compared with the argument requested date (ususally the
-% packaging date of the dependency). If the kernel date is less than
-% the required date, it's an error and the loading should abort.
-% \begin{macrocode}
-\cs_new_protected:Npn \__kernel_dependency_version_check:Nn #1
- { \exp_args:NV \__kernel_dependency_version_check:nn #1 }
-\cs_new_protected:Npn \__kernel_dependency_version_check:nn #1
- {
- \cs_if_exist:NTF \c__kernel_expl_date_tl
- {
- \exp_args:NV \@@_kernel_dependency_compare:nnn
- \c__kernel_expl_date_tl {#1}
- }
- { \@@_kernel_dependency_compare:nnn { 0000-00-00 } {#1} }
- }
-\cs_new_protected:Npn \@@_kernel_dependency_compare:nnn #1 #2 #3
- {
- \int_compare:nNnT
- { \@@_parse_version:w #1 \s_@@_stop } <
- { \@@_parse_version:w #2 \s_@@_stop }
- { \@@_mismatched_dependency_error:nn {#2} {#3} }
- }
-\cs_new:Npn \@@_parse_version:w #1 - #2 - #3 \s_@@_stop {#1#2#3}
-% \end{macrocode}
-%
-% \begin{macro}{\@@_mismatched_dependency_error:nn}
-% If the versions differ, then we try to give the user some guidance.
-% This function starts by taking the engine name \cs{c_sys_engine_str}
-% and replacing |tex| by |latex|, then building a command of the form:
-% \begin{texttt}
-% kpsewhich --all --engine=\meta{engine} \meta{format}[-dev].fmt
-% \end{texttt}
-% to query the format files available. A shell is opened and each
-% line is read into a sequence.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_mismatched_dependency_error:nn #1 #2
- {
- \exp_args:NNe \ior_shell_open:Nn \g_@@_internal_ior
- {
- kpsewhich ~ --all ~
- --engine = \c_sys_engine_exec_str
- \c_space_tl \c_sys_engine_format_str
- \bool_lazy_and:nnT
- { \tl_if_exist_p:N \development@branch@name }
- { ! \tl_if_empty_p:N \development@branch@name }
- { -dev } .fmt
- }
- \seq_clear:N \l_@@_tmp_seq
- \ior_map_inline:Nn \g_@@_internal_ior
- { \seq_put_right:Nn \l_@@_tmp_seq {##1} }
- \ior_close:N \g_@@_internal_ior
- \msg_error:nnnn { kernel } { mismatched-support-file }
- {#1} {#2}
-% \end{macrocode}
-% And finish by ending the current file.
-% \begin{macrocode}
- \tex_endinput:D
- }
-% \end{macrocode}
-%
-% Now define the actual error message:
-% \begin{macrocode}
-\msg_new:nnnn { kernel } { mismatched-support-file }
- {
- Mismatched~LaTeX~support~files~detected. \\
- Loading~'#2'~aborted!
-% \end{macrocode}
-% \cs{c__kernel_expl_date_tl} may not exist, due to an older format,
-% so only print the dates when the sentinel token list exists:
-% \begin{macrocode}
- \tl_if_exist:NT \c__kernel_expl_date_tl
- {
- \\ \\
- The~L3~programming~layer~in~the~LaTeX~format \\
- is~dated~\c__kernel_expl_date_tl,~but~in~your~TeX~
- tree~the~files~require \\ at~least~#1.
- }
- }
- {
-% \end{macrocode}
-% The sequence containing the format files should have exactly one
-% item: the format file currently being run. If that's the case, the
-% cause of the error is not that, so print a generic help with some
-% possible causes. If more than one format file was found, then print
-% the list to the user, with appropriate indications of what's in the
-% system and what's in the user tree.
-% \begin{macrocode}
- \int_compare:nNnTF { \seq_count:N \l_@@_tmp_seq } > 1
- {
- The~cause~seems~to~be~an~old~format~file~in~the~user~tree. \\
- LaTeX~found~these~files:
- \seq_map_tokens:Nn \l_@@_tmp_seq { \\~-~\use:n } \\
- Try~deleting~the~file~in~the~user~tree~then~run~LaTeX~again.
- }
- {
- The~most~likely~causes~are:
- \\~-~A~recent~format~generation~failed;
- \\~-~A~stray~format~file~in~the~user~tree~which~needs~
- to~be~removed~or~rebuilt;
- \\~-~You~are~running~a~manually~installed~version~of~#2 \\
- \ \ \ which~is~incompatible~with~the~version~in~LaTeX. \\
- }
- \\
- LaTeX~will~abort~loading~the~incompatible~support~files~
- but~this~may~lead~to \\ later~errors.~Please~ensure~that~
- your~LaTeX~format~is~correctly~regenerated.
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Messages}
-%
-% \begin{macrocode}
-\msg_new:nnnn { kernel } { file-not-found }
- { File~'#1'~not~found. }
- {
- The~requested~file~could~not~be~found~in~the~current~directory,~
- in~the~TeX~search~path~or~in~the~LaTeX~search~path.
- }
-\msg_new:nnn { kernel } { file-list }
- {
- >~File~List~<
- #1 \\
- .............
- }
-\msg_new:nnnn { kernel } { filename-chars-lost }
- { #1~invalid~in~file~name.~Lost:~#2. }
- {
- There~was~an~invalid~token~in~the~file~name~that~caused~
- the~characters~following~it~to~be~lost.
- }
-\msg_new:nnnn { kernel } { filename-missing-endcsname }
- { Missing~\iow_char:N\\endcsname~inserted~in~filename. }
- {
- The~file~name~had~more~\iow_char:N\\csname~commands~than~
- \iow_char:N\\endcsname~ones.~LaTeX~will~add~the~missing~
- \iow_char:N\\endcsname~and~try~to~continue~as~best~as~it~can.
- }
-\msg_new:nnnn { kernel } { unbalanced-quote-in-filename }
- { Unbalanced~quotes~in~file~name~'#1'. }
- {
- File~names~must~contain~balanced~numbers~of~quotes~(").
- }
-\msg_new:nnnn { kernel } { iow-indent }
- { Only~#1 allows~#2 }
- {
- The~command~#2 can~only~be~used~in~messages~
- which~will~be~wrapped~using~#1.
- \tl_if_empty:nF {#3} { ~ It~was~called~with~argument~'#3'. }
- }
-% \end{macrocode}
-%
-% \subsection{Functions delayed from earlier modules}
-%
-%<@@=sys>
-%
-% \begin{variable}{\c_sys_platform_str}
-% Detecting the platform on \LuaTeX{} is easy: for other engines, we use
-% the fact that the two common cases have special null files. It is possible
-% to probe further (see package \pkg{platform}), but that requires shell
-% escape and seems unlikely to be useful. This is set up here as it requires
-% file searching.
-% \begin{macrocode}
-\sys_if_engine_luatex:TF
- {
- \str_const:Ne \c_sys_platform_str
- { \tex_directlua:D { tex.print(os.type) } }
- }
- {
- \file_if_exist:nTF { nul: }
- {
- \file_if_exist:nF { /dev/null }
- { \str_const:Nn \c_sys_platform_str { windows } }
- }
- {
- \file_if_exist:nT { /dev/null }
- { \str_const:Nn \c_sys_platform_str { unix } }
- }
- }
-\cs_if_exist:NF \c_sys_platform_str
- { \str_const:Nn \c_sys_platform_str { unknown } }
-% \end{macrocode}
-% \end{variable}
-% \begin{macro}[pTF]{\sys_if_platform_unix:}
-% \begin{macro}[pTF]{\sys_if_platform_windows:}
-% We can now set up the tests.
-% \begin{macrocode}
-\clist_map_inline:nn { unix , windows }
- {
- \@@_const:nn { sys_if_platform_ #1 }
- { \str_if_eq_p:Vn \c_sys_platform_str { #1 } }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3flag.dtx b/macros/latex/contrib/l3kernel/l3flag.dtx
deleted file mode 100644
index 40614c7348..0000000000
--- a/macros/latex/contrib/l3kernel/l3flag.dtx
+++ /dev/null
@@ -1,396 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3flag.dtx
-%
-% Copyright (C) 2011-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3flag} module\\ Expandable flags^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% Flags are the only data-type that can be modified in expansion-only
-% contexts. This module is meant mostly for kernel use: in almost all
-% cases, booleans or integers should be preferred to flags because they
-% are very significantly faster.
-%
-% A flag can hold any (small) non-negative value, which we call its
-% \meta{height}. In expansion-only contexts, a flag can only be
-% \enquote{raised}: this increases the \meta{height} by $1$. The \meta{height}
-% can also be queried expandably. However, decreasing it, or setting it
-% to zero requires non-expandable assignments.
-%
-% Flag variables are always local.
-%
-% A typical use case of flags would be to keep track of whether an
-% exceptional condition has occurred during expandable processing, and
-% produce a meaningful (non-expandable) message after the end of the
-% expandable processing. This is exemplified by \pkg{l3str-convert},
-% which for performance reasons performs conversions of individual
-% characters expandably and for readability reasons produces a single
-% error message describing incorrect inputs that were encountered.
-%
-% Flags should not be used without carefully considering the fact that
-% raising a flag takes a time and memory proportional to its height and
-% that the memory cannot be reclaimed even if the flag is cleared.
-% Flags should not be used unless it is unavoidable.
-%
-% In earlier versions, flags were referenced by an \texttt{n}-type
-% \meta{flag name} such as \texttt{fp_overflow}, used as part of
-% \cs{use:c} constructions. All of the commands described below have
-% \texttt{n}-type analogues that can still appear in old code, but the
-% \texttt{N}-type commands are to be preferred moving forward. The
-% \texttt{n}-type \meta{flag name} is simply mapped to
-% \cs[no-index]{l_\meta{flag name}_flag}, which makes it easier for
-% packages using public flags (such as \pkg{l3fp}) to retain backwards
-% compatibility.
-%
-% \section{Setting up flags}
-%
-% \begin{function}[added = 2024-01-12]{\flag_new:N, \flag_new:c}
-% \begin{syntax}
-% \cs{flag_new:N} \meta{flag~var}
-% \end{syntax}
-% Creates a new \meta{flag~var}, or raises an error if the name is
-% already taken. The declaration is global, but flags are always local
-% variables. The \meta{flag~var} initially has zero height.
-% \end{function}
-%
-% \begin{function}[added = 2024-01-12]{\flag_clear:N, \flag_clear:c}
-% \begin{syntax}
-% \cs{flag_clear:N} \meta{flag~var}
-% \end{syntax}
-% Sets the height of the \meta{flag~var} to zero. The assignment is local.
-% \end{function}
-%
-% \begin{function}[added = 2024-01-12]{\flag_clear_new:N, \flag_clear_new:c}
-% \begin{syntax}
-% \cs{flag_clear_new:N} \meta{flag~var}
-% \end{syntax}
-% Ensures that the \meta{flag~var} exists globally by applying
-% \cs{flag_new:N} if necessary, then applies \cs{flag_clear:N}, setting
-% the height to zero locally.
-% \end{function}
-%
-% \begin{function}[added = 2024-01-12]{\flag_show:N, \flag_show:c}
-% \begin{syntax}
-% \cs{flag_show:N} \meta{flag~var}
-% \end{syntax}
-% Displays the height of the \meta{flag~var} in the terminal.
-% \end{function}
-%
-% \begin{function}[added = 2024-01-12]{\flag_log:N, \flag_log:c}
-% \begin{syntax}
-% \cs{flag_log:N} \meta{flag~var}
-% \end{syntax}
-% Writes the height of the \meta{flag~var} in the log file.
-% \end{function}
-%
-% \section{Expandable flag commands}
-%
-% \begin{function}[EXP, pTF, added = 2024-01-12]{\flag_if_exist:N, \flag_if_exist:c}
-% \begin{syntax}
-% \cs{flag_if_exist_p:N} \meta{flag~var}
-% \cs{flag_if_exist:NTF} \meta{flag~var} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% This function returns \texttt{true} if the \meta{flag~var} is
-% currently defined, and \texttt{false} otherwise. This does not check
-% that the \meta{flag~var} really is a flag variable.
-% \end{function}
-%
-% \begin{function}[EXP, pTF, added = 2024-01-12]{\flag_if_raised:N, \flag_if_raised:c}
-% \begin{syntax}
-% \cs{flag_if_raised_p:N} \meta{flag~var}
-% \cs{flag_if_raised:NTF} \meta{flag~var} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% This function returns \texttt{true} if the \meta{flag~var} has non-zero
-% height, and \texttt{false} if the \meta{flag~var} has zero height.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2024-01-12]{\flag_height:N, \flag_height:c}
-% \begin{syntax}
-% \cs{flag_height:N} \meta{flag~var}
-% \end{syntax}
-% Expands to the height of the \meta{flag~var} as an integer denotation.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2024-01-12]{\flag_raise:N, \flag_raise:c}
-% \begin{syntax}
-% \cs{flag_raise:N} \meta{flag~var}
-% \end{syntax}
-% The height of \meta{flag~var} is increased by $1$ locally.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2024-01-12]{\flag_ensure_raised:N, \flag_ensure_raised:c}
-% \begin{syntax}
-% \cs{flag_ensure_raised:N} \meta{flag~var}
-% \end{syntax}
-% Ensures the \meta{flag~var} is raised by making its height at least~$1$,
-% locally.
-% \end{function}
-%
-% \begin{variable}[added = 2024-01-12]{\l_tmpa_flag, \l_tmpb_flag}
-% Scratch flag for local assignment. These are never used by
-% the kernel code, and so are safe for use with any \LaTeX3-defined
-% function. However, they may be overwritten by other non-kernel
-% code and so should only be used for short-term storage.
-% \end{variable}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3flag} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=flag>
-% \end{macrocode}
-%
-% \TestFiles{m3flag001}
-%
-% \subsection{Protected flag commands}
-%
-% The height $h$ of a flag (which is initially zero) is stored by
-% setting control sequences of the form \cs[no-index]{\meta{flag
-% name}\meta{integer}} to \tn{relax} for $0\leq\meta{integer}<h$. These
-% control sequences are produced by \cs{cs:w} \meta{flag~var}
-% \meta{integer} \cs{cs_end:}, namely the \meta{flag~var} is actually a
-% (protected) macro expanding to its own csname.
-%
-% \begin{macro}{\flag_new:N, \flag_new:c}
-% Evaluate the csname of~|#1| for use in constructing the various
-% indexed macros.
-% \begin{macrocode}
-\cs_new_protected:Npn \flag_new:N #1
- { \cs_new_protected:Npe #1 { \cs_to_str:N #1 } }
-\cs_generate_variant:Nn \flag_new:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\l_tmpa_flag, \l_tmpb_flag}
-% Two flag variables for scratch use.
-% \begin{macrocode}
-\flag_new:N \l_tmpa_flag
-\flag_new:N \l_tmpb_flag
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\flag_clear:N, \flag_clear:c}
-% \begin{macro}{\@@_clear:wN}
-% Undefine control sequences, starting from the |0| flag, upwards,
-% until reaching an undefined control sequence. We don't use
-% \cs{cs_undefine:c} because that would act globally.
-% \begin{macrocode}
-\cs_new_protected:Npn \flag_clear:N #1
- {
- \@@_clear:wN 0 ; #1
- \prg_break_point:
- }
-\cs_generate_variant:Nn \flag_clear:N { c }
-\cs_new_protected:Npn \@@_clear:wN #1 ; #2
- {
- \if_cs_exist:w #2 #1 \cs_end: \else:
- \prg_break:n
- \fi:
- \cs_set_eq:cN { #2 #1 } \tex_undefined:D
- \exp_after:wN \@@_clear:wN
- \int_value:w \int_eval:w \c_one_int + #1 ; #2
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\flag_clear_new:N, \flag_clear_new:c}
-% As for other datatypes, clear the \meta{flag~var} or create a new one,
-% as appropriate.
-% \begin{macrocode}
-\cs_new_protected:Npn \flag_clear_new:N #1
- { \flag_if_exist:NTF #1 { \flag_clear:N } { \flag_new:N } #1 }
-\cs_generate_variant:Nn \flag_clear_new:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\flag_show:N, \flag_show:c, \flag_log:N, \flag_log:c, \@@_show:NN}
-% Show the height (terminal or log file) using appropriate \pkg{l3msg}
-% auxiliaries.
-% \begin{macrocode}
-\cs_new_protected:Npn \flag_show:N { \@@_show:NN \tl_show:n }
-\cs_generate_variant:Nn \flag_show:N { c }
-\cs_new_protected:Npn \flag_log:N { \@@_show:NN \tl_log:n }
-\cs_generate_variant:Nn \flag_log:N { c }
-\cs_new_protected:Npn \@@_show:NN #1#2
- {
- \__kernel_chk_defined:NT #2
- { \exp_args:Ne #1 { \tl_to_str:n { #2 height } = \flag_height:N #2 } }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Expandable flag commands}
-%
-% \begin{macro}[EXP, pTF]{\flag_if_exist:N, \flag_if_exist:c}
-% Copies of the \texttt{cs} functions defined in \pkg{l3basics}.
-% \begin{macrocode}
-\prg_new_eq_conditional:NNn \flag_if_exist:N \cs_if_exist:N
- { TF , T , F , p }
-\prg_new_eq_conditional:NNn \flag_if_exist:c \cs_if_exist:c
- { TF , T , F , p }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP, pTF]{\flag_if_raised:N, \flag_if_raised:c}
-% Test if the flag has a non-zero height, by checking the |0| control sequence.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \flag_if_raised:N #1 { p , T , F , TF }
- {
- \if_cs_exist:w #1 0 \cs_end:
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-\prg_generate_conditional_variant:Nnn \flag_if_raised:N
- { c } { p , T , F , TF }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\flag_height:N, \flag_height:c}
-% \begin{macro}[EXP]{\@@_height_loop:wN, \@@_height_end:wN}
-% Extract the value of the flag by going through all of the
-% control sequences starting from |0|.
-% \begin{macrocode}
-\cs_new:Npn \flag_height:N #1 { \@@_height_loop:wN 0; #1 }
-\cs_new:Npn \@@_height_loop:wN #1 ; #2
- {
- \if_cs_exist:w #2 #1 \cs_end: \else:
- \exp_after:wN \@@_height_end:wN
- \fi:
- \exp_after:wN \@@_height_loop:wN
- \int_value:w \int_eval:w \c_one_int + #1 ; #2
- }
-\cs_new:Npn \@@_height_end:wN #1 + #2 ; #3 {#2}
-\cs_generate_variant:Nn \flag_height:N { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\flag_raise:N, \flag_raise:c}
-% Change the appropriate control sequence to \tn{relax} by expanding a
-% \cs{cs:w} \ldots{} \cs{cs_end:} construction, then pass it to
-% \cs{use_none:n} to avoid leaving anything in the input stream.
-% \begin{macrocode}
-\cs_new:Npn \flag_raise:N #1
- { \exp_after:wN \use_none:n \cs:w #1 \flag_height:N #1 \cs_end: }
-\cs_generate_variant:Nn \flag_raise:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\flag_ensure_raised:N, \flag_ensure_raised:c}
-% Pass the control sequence with name \meta{flag name}\texttt{0} to
-% \cs{use_none:n}. Constructing the control sequence ensures that it
-% changes from being undefined (if it was so) to being \tn{relax}.
-% \begin{macrocode}
-\cs_new:Npn \flag_ensure_raised:N #1
- { \exp_after:wN \use_none:n \cs:w #1 0 \cs_end: }
-\cs_generate_variant:Nn \flag_ensure_raised:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Old \texttt{n}-type flag commands}
-%
-% Here we keep the old flag commands since our policy is to no longer
-% delete deprecated functions. The idea is to simply map \meta{flag
-% name} to \cs[no-index]{l_\meta{flag name}_flag}. When the debugging
-% code is activated, it checks existence of the \texttt{N}-type flag
-% variables that result.
-%
-% \begin{macro}[no-user-doc]{\flag_new:n, \flag_clear:n, \flag_clear_new:n}
-% \begin{macro}[EXP, pTF, no-user-doc]{\flag_if_exist:n, \flag_if_raised:n}
-% \begin{macro}[EXP, no-user-doc]{\flag_height:n, \flag_raise:n, \flag_ensure_raised:n}
-% \begin{macrocode}
-\cs_new_protected:Npn \flag_new:n #1 { \flag_new:c { l_#1_flag } }
-\cs_new_protected:Npn \flag_clear:n #1 { \flag_clear:c { l_#1_flag } }
-\cs_new_protected:Npn \flag_clear_new:n #1 { \flag_clear_new:c { l_#1_flag } }
-\cs_new:Npn \flag_if_exist_p:n #1 { \flag_if_exist_p:c { l_#1_flag } }
-\cs_new:Npn \flag_if_exist:nT #1 { \flag_if_exist:cT { l_#1_flag } }
-\cs_new:Npn \flag_if_exist:nF #1 { \flag_if_exist:cF { l_#1_flag } }
-\cs_new:Npn \flag_if_exist:nTF #1 { \flag_if_exist:cTF { l_#1_flag } }
-\cs_new:Npn \flag_if_raised_p:n #1 { \flag_if_raised_p:c { l_#1_flag } }
-\cs_new:Npn \flag_if_raised:nT #1 { \flag_if_raised:cT { l_#1_flag } }
-\cs_new:Npn \flag_if_raised:nF #1 { \flag_if_raised:cF { l_#1_flag } }
-\cs_new:Npn \flag_if_raised:nTF #1 { \flag_if_raised:cTF { l_#1_flag } }
-\cs_new:Npn \flag_height:n #1 { \flag_height:c { l_#1_flag } }
-\cs_new:Npn \flag_raise:n #1 { \flag_raise:c { l_#1_flag } }
-\cs_new:Npn \flag_ensure_raised:n #1 { \flag_ensure_raised:c { l_#1_flag } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[no-user-doc]{\flag_show:n, \flag_log:n, \@@_show:Nn}
-% To avoid changing the output here we mostly keep the old code.
-% \begin{macrocode}
-\cs_new_protected:Npn \flag_show:n { \@@_show:Nn \tl_show:n }
-\cs_new_protected:Npn \flag_log:n { \@@_show:Nn \tl_log:n }
-\cs_new_protected:Npn \@@_show:Nn #1#2
- {
- \exp_args:Nc \__kernel_chk_defined:NT { l_#2_flag }
- {
- \exp_args:Ne #1
- { \tl_to_str:n { flag~#2~height } = \flag_height:n {#2} }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3fp-assign.dtx b/macros/latex/contrib/l3kernel/l3fp-assign.dtx
deleted file mode 100644
index 6d00047e4d..0000000000
--- a/macros/latex/contrib/l3kernel/l3fp-assign.dtx
+++ /dev/null
@@ -1,316 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3fp-assign.dtx
-%
-% Copyright (C) 2011-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3fp-assign} module\\
-% Floating point expressions^^A
-% }
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-% \date{Released 2024-03-14}
-% \maketitle
-%
-% \begin{documentation}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3fp-assign} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=fp>
-% \end{macrocode}
-%
-% \subsection{Assigning values}
-%
-% \begin{macro}{\fp_new:N}
-% Floating point variables are initialized to be $+0$.
-% \begin{macrocode}
-\cs_new_protected:Npn \fp_new:N #1
- { \cs_new_eq:NN #1 \c_zero_fp }
-\cs_generate_variant:Nn \fp_new:N {c}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \fp_set:Nn, \fp_set:cn,
-% \fp_gset:Nn, \fp_gset:cn,
-% \fp_const:Nn, \fp_const:cn
-% }
-% Simply use \cs{@@_parse:n} within various \texttt{f}-expanding
-% assignments.
-% \begin{macrocode}
-\cs_new_protected:Npn \fp_set:Nn #1#2
- { \__kernel_tl_set:Nx #1 { \exp_not:f { \@@_parse:n {#2} } } }
-\cs_new_protected:Npn \fp_gset:Nn #1#2
- { \__kernel_tl_gset:Nx #1 { \exp_not:f { \@@_parse:n {#2} } } }
-\cs_new_protected:Npn \fp_const:Nn #1#2
- { \tl_const:Ne #1 { \exp_not:f { \@@_parse:n {#2} } } }
-\cs_generate_variant:Nn \fp_set:Nn {c}
-\cs_generate_variant:Nn \fp_gset:Nn {c}
-\cs_generate_variant:Nn \fp_const:Nn {c}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \fp_set_eq:NN , \fp_set_eq:cN , \fp_set_eq:Nc , \fp_set_eq:cc,
-% \fp_gset_eq:NN, \fp_gset_eq:cN, \fp_gset_eq:Nc, \fp_gset_eq:cc
-% }
-% Copying a floating point is the same as copying the underlying token
-% list.
-% \begin{macrocode}
-\cs_new_eq:NN \fp_set_eq:NN \tl_set_eq:NN
-\cs_new_eq:NN \fp_gset_eq:NN \tl_gset_eq:NN
-\cs_generate_variant:Nn \fp_set_eq:NN { c , Nc , cc }
-\cs_generate_variant:Nn \fp_gset_eq:NN { c , Nc , cc }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\fp_zero:N, \fp_zero:c, \fp_gzero:N, \fp_gzero:c}
-% Setting a floating point to zero: copy \cs{c_zero_fp}.
-% \begin{macrocode}
-\cs_new_protected:Npn \fp_zero:N #1 { \fp_set_eq:NN #1 \c_zero_fp }
-\cs_new_protected:Npn \fp_gzero:N #1 { \fp_gset_eq:NN #1 \c_zero_fp }
-\cs_generate_variant:Nn \fp_zero:N { c }
-\cs_generate_variant:Nn \fp_gzero:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {\fp_zero_new:N, \fp_zero_new:c, \fp_gzero_new:N, \fp_gzero_new:c}
-% Set the floating point to zero, or define it if needed.
-% \begin{macrocode}
-\cs_new_protected:Npn \fp_zero_new:N #1
- { \fp_if_exist:NTF #1 { \fp_zero:N #1 } { \fp_new:N #1 } }
-\cs_new_protected:Npn \fp_gzero_new:N #1
- { \fp_if_exist:NTF #1 { \fp_gzero:N #1 } { \fp_new:N #1 } }
-\cs_generate_variant:Nn \fp_zero_new:N { c }
-\cs_generate_variant:Nn \fp_gzero_new:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Updating values}
-%
-% These match the equivalent functions in \pkg{l3int} and \pkg{l3skip}.
-%
-% \begin{macro}
-% {
-% \fp_add:Nn, \fp_add:cn, \fp_gadd:Nn, \fp_gadd:cn,
-% \fp_sub:Nn, \fp_sub:cn, \fp_gsub:Nn, \fp_gsub:cn,
-% }
-% \begin{macro}{\@@_add:NNNn}
-% For the sake of error recovery we should not simply set |#1| to
-% $|#1| \pm (|#2|)$: for instance, if |#2| is % ^^A(
-% |0)+2|, the parsing error would be raised at the last closing
-% parenthesis rather than at the closing parenthesis in the user
-% argument. Thus we evaluate |#2| instead of just putting
-% parentheses. As an optimization we use \cs{@@_parse:n} rather than
-% \cs{fp_eval:n}, which would convert the result away from the
-% internal representation and back.
-% \begin{macrocode}
-\cs_new_protected:Npn \fp_add:Nn { \@@_add:NNNn \fp_set:Nn + }
-\cs_new_protected:Npn \fp_gadd:Nn { \@@_add:NNNn \fp_gset:Nn + }
-\cs_new_protected:Npn \fp_sub:Nn { \@@_add:NNNn \fp_set:Nn - }
-\cs_new_protected:Npn \fp_gsub:Nn { \@@_add:NNNn \fp_gset:Nn - }
-\cs_new_protected:Npn \@@_add:NNNn #1#2#3#4
- { #1 #3 { #3 #2 \@@_parse:n {#4} } }
-\cs_generate_variant:Nn \fp_add:Nn { c }
-\cs_generate_variant:Nn \fp_gadd:Nn { c }
-\cs_generate_variant:Nn \fp_sub:Nn { c }
-\cs_generate_variant:Nn \fp_gsub:Nn { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Showing values}
-%
-% \begin{macro}{\fp_show:N, \fp_show:c, \fp_log:N, \fp_log:c, \@@_show:NN}
-% This shows the result of computing its argument by
-% passing the right data to \cs{tl_show:n} or \cs{tl_log:n}.
-% \begin{macrocode}
-\cs_new_protected:Npn \fp_show:N { \@@_show:NN \tl_show:n }
-\cs_generate_variant:Nn \fp_show:N { c }
-\cs_new_protected:Npn \fp_log:N { \@@_show:NN \tl_log:n }
-\cs_generate_variant:Nn \fp_log:N { c }
-\cs_new_protected:Npn \@@_show:NN #1#2
- {
- \__kernel_chk_tl_type:NnnT #2 { fp }
- { \exp_args:No \@@_show_validate:n #2 }
- { \exp_args:Ne #1 { \token_to_str:N #2 = \fp_to_tl:N #2 } }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {
-% \@@_show_validate:n, \@@_show_validate_aux:n, \@@_show_validate:nn,
-% }
-% \begin{macro}[EXP]
-% {
-% \@@_show_validate:w,
-% \@@_tuple_show_validate:w,
-% \@@_symbolic_show_validate:w
-% }
-% To support symbolic expression, validation has to be done recursively.
-% Two |\@@_show_validate:nn| wrappers are used to distinguish between
-% initial and recursive calls, in which the former provides a demo of
-% possible forms a |fp| variable would have.
-% \begin{macrocode}
-\cs_new:Npn \@@_show_validate:n #1
- {
- \@@_show_validate:nn { #1 }
- {
- \s_@@ \@@_chk:w ??? ;~ or \iow_newline:
- \s_@@_tuple \_@@_tuple_chk:w ? ;~ or \iow_newline:
- \s_@@_symbolic \@@_symbolic_chk:w ? , ? ;
- }
- }
-\cs_new:Npn \@@_show_validate_aux:n #1
- {
- \@@_show_validate:nn { #1 } { }
- }
-\cs_new:Npn \@@_show_validate:nn #1#2
- {
- \tl_if_empty:nF { #1 }
- {
- \str_case:enF { \tl_head:n { #1 } }
- {
- { \s_@@ }
- {
- \@@_show_validate:w #1 \s_@@
- \@@_chk:w ??? ; \s_@@_stop
- }
- { \s_@@_tuple }
- {
- \@@_tuple_show_validate:w #1
- \s_@@_tuple \_@@_tuple_chk:w ?? ; \s_@@_stop
- }
- { \s_@@_symbolic }
- {
- \@@_symbolic_show_validate:w #1
- \s_@@_symbolic \@@_symbolic_chk:w ? , ?? ; \s_@@_stop
- }
- }
- { #2 }
- }
- }
-\cs_new:Npn \@@_show_validate:w
- #1 \s_@@ \@@_chk:w #2#3#4#5 ; #6 \s_@@_stop
- {
- \str_if_eq:nnF { #2 } {?}
- {
- \token_if_eq_meaning:NNTF #2 1
- { \s_@@ \@@_chk:w #2 #3 { #4 } #5 ; }
- { \s_@@ \@@_chk:w #2 #3 #4 #5 ; }
- \@@_show_validate_aux:n { #6 }
- }
- }
-\cs_new:Npn \@@_tuple_show_validate:w
- #1 \s_@@_tuple \_@@_tuple_chk:w #2#3 ; #4 \s_@@_stop
- {
- \str_if_eq:nnF { #2 } {?}
- { \s_@@_tuple \@@_tuple_chk:w { \@@_show_validate_aux:n { #2 } } ; }
- }
-\cs_new:Npn \@@_symbolic_show_validate:w
- #1 \s_@@_symbolic \@@_symbolic_chk:w #2 , #3#4 ; #5 \s_@@_stop
- {
- \str_if_eq:nnF { #2 } {?}
- {
- \s_@@_symbolic \@@_symbolic_chk:w \exp_not:n { #2 } ,
- { \@@_show_validate_aux:n { #3 } };
- \@@_show_validate_aux:n { #5 }
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\fp_show:n, \fp_log:n}
-% Use general tools.
-% \begin{macrocode}
-\cs_new_protected:Npn \fp_show:n
- { \__kernel_msg_show_eval:Nn \fp_to_tl:n }
-\cs_new_protected:Npn \fp_log:n
- { \__kernel_msg_log_eval:Nn \fp_to_tl:n }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Some useful constants and scratch variables}
-%
-% \begin{variable}{\c_one_fp, \c_e_fp}
-% Some constants.
-% \begin{macrocode}
-\fp_const:Nn \c_e_fp { 2.718 2818 2845 9045 }
-\fp_const:Nn \c_one_fp { 1 }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\c_pi_fp, \c_one_degree_fp}
-% We simply round $\pi$ to and $\pi/180$ to $16$ significant digits.
-% \begin{macrocode}
-\fp_const:Nn \c_pi_fp { 3.141 5926 5358 9793 }
-\fp_const:Nn \c_one_degree_fp { 0.0 1745 3292 5199 4330 }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_tmpa_fp, \l_tmpb_fp, \g_tmpa_fp, \g_tmpb_fp}
-% Scratch variables are simply initialized there.
-% \begin{macrocode}
-\fp_new:N \l_tmpa_fp
-\fp_new:N \l_tmpb_fp
-\fp_new:N \g_tmpa_fp
-\fp_new:N \g_tmpb_fp
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintChanges
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3fp-aux.dtx b/macros/latex/contrib/l3kernel/l3fp-aux.dtx
deleted file mode 100644
index 1f4ea5d34d..0000000000
--- a/macros/latex/contrib/l3kernel/l3fp-aux.dtx
+++ /dev/null
@@ -1,1291 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3fp-aux.dtx
-%
-% Copyright (C) 2011-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3fp-aux} module\\ Support for floating points^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3fp-aux} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=fp>
-% \end{macrocode}
-%
-% ^^A todo: make sanitize and pack more homogeneous between modules.
-%
-% \subsection{Access to primitives}
-%
-% \begin{macro}{\@@_int_eval:w, \@@_int_eval_end:, \@@_int_to_roman:w}
-% Largely for performance reasons, we need to directly access primitives
-% rather than use \cs{int_eval:n}. This happens \emph{a lot}, so we
-% use private names. The same is true for \tn{romannumeral}, although it
-% is used much less widely.
-% \begin{macrocode}
-\cs_new_eq:NN \@@_int_eval:w \tex_numexpr:D
-\cs_new_eq:NN \@@_int_eval_end: \scan_stop:
-\cs_new_eq:NN \@@_int_to_roman:w \tex_romannumeral:D
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Internal representation}
-%
-% Internally, a floating point number \meta{X} is a
-% token list containing
-% \begin{quote}
-% \cs{s_@@} \cs{@@_chk:w} \meta{case} \meta{sign} \meta{body} |;|
-% \end{quote}
-% Let us explain each piece separately.
-%
-% Internal floating point numbers are used in expressions,
-% and in this context are subject to \texttt{f}-expansion. They must
-% leave a recognizable mark after \texttt{f}-expansion, to prevent the
-% floating point number from being re-parsed. Thus, \cs{s_@@}
-% is simply another name for \tn{relax}.
-%
-% When used directly without an accessor function, floating points
-% should produce an error: this is the role of \cs{@@_chk:w}. We could
-% make floating point variables be protected to prevent them from
-% expanding under \texttt{e}/\texttt{x}-expansion, but it seems more
-% convenient to treat them as a subcase of token list variables.
-%
-% The (decimal part of the) IEEE-754-2008 standard requires the format
-% to be able to represent special floating point numbers besides the
-% usual positive and negative cases. We distinguish the various
-% possibilities by their \meta{case}, which is a single digit:
-% \begin{itemize}
-% \item[0] zeros: |+0| and |-0|,
-% \item[1] \enquote{normal} numbers (positive and negative),
-% \item[2] infinities: |+inf| and |-inf|,
-% \item[3] quiet and signalling \texttt{nan}.
-% \end{itemize}
-% The \meta{sign} is |0| (positive) or |2| (negative),
-% except in the case of \texttt{nan}, which have $\meta{sign} = 1$.
-% This ensures that changing the \meta{sign} digit to $2-\meta{sign}$
-% is exactly equivalent to changing the sign of the number.
-%
-% Special floating point numbers have the form
-% \begin{quote}
-% \cs{s_@@} \cs{@@_chk:w} \meta{case} \meta{sign} \cs[no-index]{s_@@_\ldots} |;|
-% \end{quote}
-% where \cs[no-index]{s_@@_\ldots} is a scan mark carrying information about how the
-% number was formed (useful for debugging).
-%
-% Normal floating point numbers ($\meta{case} = 1$) have the form
-% \begin{quote}
-% \cs{s_@@} \cs{@@_chk:w} 1 \meta{sign} \Arg{exponent}
-% \Arg{X_1} \Arg{X_2} \Arg{X_3} \Arg{X_4} |;|
-% \end{quote}
-% Here, the \meta{exponent} is an integer, between
-% $-\ExplSyntaxOn\int_use:N\c__fp_minus_min_exponent_int$ and
-% $\ExplSyntaxOn\int_use:N\c__fp_max_exponent_int$. The body consists
-% in four blocks of exactly $4$ digits,
-% $0000 \leq \meta{X_i} \leq 9999$, and the floating point is
-% \[
-% (-1)^{\meta{sign}/2} \meta{X_1}\meta{X_2}\meta{X_3}\meta{X_4}\cdot 10^{\meta{exponent}-16}
-% \]
-% where we have concatenated the $16$ digits. Currently, floating point numbers are normalized such that
-% the \meta{exponent} is minimal, in other words, $1000 \leq \meta{X_1} \leq 9999$.
-%
-% \begin{table}\centering
-% \caption{Internal representation of floating point numbers.}
-% \label{tab:fp-convert-special}
-% \begin{tabular}{ll}
-% \toprule
-% \multicolumn{1}{c}{Representation} & Meaning \\
-% \midrule
-% 0 0 \cs[no-index]{s_@@_\ldots} \texttt{;} & Positive zero. \\
-% 0 2 \cs[no-index]{s_@@_\ldots} \texttt{;} & Negative zero. \\
-% 1 0 \Arg{exponent} \Arg{X_1} \Arg{X_2} \Arg{X_3} \Arg{X_4} \texttt{;}
-% & Positive floating point. \\
-% 1 2 \Arg{exponent} \Arg{X_1} \Arg{X_2} \Arg{X_3} \Arg{X_4} \texttt{;}
-% & Negative floating point. \\
-% 2 0 \cs[no-index]{s_@@_\ldots} \texttt{;} & Positive infinity. \\
-% 2 2 \cs[no-index]{s_@@_\ldots} \texttt{;} & Negative infinity. \\
-% 3 1 \cs[no-index]{s_@@_\ldots} \texttt{;} & Quiet \texttt{nan}. \\
-% 3 1 \cs[no-index]{s_@@_\ldots} \texttt{;} & Signalling \texttt{nan}. \\
-% \bottomrule
-% \end{tabular}
-% \end{table}
-%
-% Calculations are done in base $10000$, \emph{i.e.} one myriad.
-%
-% \subsection{Using arguments and semicolons}
-%
-% \begin{macro}[EXP]{\@@_use_none_stop_f:n}
-% This function removes an argument (typically a digit) and replaces
-% it by \cs{exp_stop_f:}, a marker which stops \texttt{f}-type
-% expansion.
-% \begin{macrocode}
-\cs_new:Npn \@@_use_none_stop_f:n #1 { \exp_stop_f: }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_use_s:n, \@@_use_s:nn}
-% Those functions place a semicolon after one or two arguments
-% (typically digits).
-% \begin{macrocode}
-\cs_new:Npn \@@_use_s:n #1 { #1; }
-\cs_new:Npn \@@_use_s:nn #1#2 { #1#2; }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {\@@_use_none_until_s:w, \@@_use_i_until_s:nw, \@@_use_ii_until_s:nnw}
-% Those functions select specific arguments among a set of arguments
-% delimited by a semicolon.
-% \begin{macrocode}
-\cs_new:Npn \@@_use_none_until_s:w #1; { }
-\cs_new:Npn \@@_use_i_until_s:nw #1#2; {#1}
-\cs_new:Npn \@@_use_ii_until_s:nnw #1#2#3; {#2}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_reverse_args:Nww}
-% Many internal functions take arguments delimited by semicolons, and
-% it is occasionally useful to swap two such arguments.
-% \begin{macrocode}
-\cs_new:Npn \@@_reverse_args:Nww #1 #2; #3; { #1 #3; #2; }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_rrot:www}
-% Rotate three arguments delimited by semicolons. This is the inverse
-% (or the square) of the Forth primitive |ROT|, hence the name.
-% \begin{macrocode}
-\cs_new:Npn \@@_rrot:www #1; #2; #3; { #2; #3; #1; }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_use_i:ww, \@@_use_i:www}
-% Many internal functions take arguments delimited by semicolons, and
-% it is occasionally useful to remove one or two such arguments.
-% \begin{macrocode}
-\cs_new:Npn \@@_use_i:ww #1; #2; { #1; }
-\cs_new:Npn \@@_use_i:www #1; #2; #3; { #1; }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Constants, and structure of floating points}
-%
-% \begin{macro}{\@@_misused:n}
-% This receives a floating point object (floating point number or
-% tuple) and generates an error stating that it was misused. This is
-% called when for instance an |fp| variable is left in the input
-% stream and its contents reach \TeX{}'s stomach.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_misused:n #1
- { \msg_error:nne { fp } { misused } { \fp_to_tl:n {#1} } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\s_@@, \@@_chk:w}
-% Floating points numbers all start with \cs{s_@@} \cs{@@_chk:w},
-% where \cs{s_@@} is equal to the \TeX{} primitive \tn{relax}, and
-% \cs{@@_chk:w} is protected. The rest of the floating point number
-% is made of characters (or \tn{relax}). This ensures that nothing
-% expands under \texttt{f}-expansion, nor under
-% \texttt{e}/\texttt{x}-expansion.
-% However, when typeset, \cs{s_@@} does nothing, and \cs{@@_chk:w} is
-% expanded. We define \cs{@@_chk:w} to produce an error.
-% \begin{macrocode}
-\scan_new:N \s_@@
-\cs_new_protected:Npn \@@_chk:w #1 ;
- { \@@_misused:n { \s_@@ \@@_chk:w #1 ; } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\s_@@_expr_mark, \s_@@_expr_stop}
-% Aliases of \cs{tex_relax:D}, used to terminate expressions.
-% \begin{macrocode}
-\scan_new:N \s_@@_expr_mark
-\scan_new:N \s_@@_expr_stop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\s_@@_mark, \s_@@_stop}
-% Generic scan marks used throughout the module.
-% \begin{macrocode}
-\scan_new:N \s_@@_mark
-\scan_new:N \s_@@_stop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[EXP]{\@@_use_i_delimit_by_s_stop:nw}
-% Functions to gobble up to a scan mark.
-% \begin{macrocode}
-\cs_new:Npn \@@_use_i_delimit_by_s_stop:nw #1 #2 \s_@@_stop {#1}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \s_@@_invalid, \s_@@_underflow, \s_@@_overflow,
-% \s_@@_division, \s_@@_exact
-% }
-% A couple of scan marks used to indicate where special floating point
-% numbers come from.
-% \begin{macrocode}
-\scan_new:N \s_@@_invalid
-\scan_new:N \s_@@_underflow
-\scan_new:N \s_@@_overflow
-\scan_new:N \s_@@_division
-\scan_new:N \s_@@_exact
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}
-% {\c_zero_fp, \c_minus_zero_fp, \c_inf_fp, \c_minus_inf_fp, \c_nan_fp}
-% The special floating points. We define the floating points here as \enquote{exact}.
-% \begin{macrocode}
-\tl_const:Nn \c_zero_fp { \s_@@ \@@_chk:w 0 0 \s_@@_exact ; }
-\tl_const:Nn \c_minus_zero_fp { \s_@@ \@@_chk:w 0 2 \s_@@_exact ; }
-\tl_const:Nn \c_inf_fp { \s_@@ \@@_chk:w 2 0 \s_@@_exact ; }
-\tl_const:Nn \c_minus_inf_fp { \s_@@ \@@_chk:w 2 2 \s_@@_exact ; }
-\tl_const:Nn \c_nan_fp { \s_@@ \@@_chk:w 3 1 \s_@@_exact ; }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\c_@@_prec_int, \c_@@_half_prec_int, \c_@@_block_int}
-% The number of digits of floating points.
-% \begin{macrocode}
-\int_const:Nn \c_@@_prec_int { 16 }
-\int_const:Nn \c_@@_half_prec_int { 8 }
-\int_const:Nn \c_@@_block_int { 4 }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\c_@@_myriad_int}
-% Blocks have $4$~digits so this integer is useful.
-% \begin{macrocode}
-\int_const:Nn \c_@@_myriad_int { 10000 }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\c_@@_minus_min_exponent_int, \c_@@_max_exponent_int}
-% Normal floating point numbers have an exponent between $-$
-% \texttt{minus_min_exponent} and \texttt{max_exponent} inclusive.
-% Larger numbers are rounded to $\pm\infty$. Smaller numbers are
-% rounded to $\pm 0$. It would be more natural to define a
-% \texttt{min_exponent} with the opposite sign but that would waste
-% one \TeX{} count.
-% \begin{macrocode}
-\int_const:Nn \c_@@_minus_min_exponent_int { 10000 }
-\int_const:Nn \c_@@_max_exponent_int { 10000 }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\c_@@_max_exp_exponent_int}
-% If a number's exponent is larger than that, its exponential
-% overflows/underflows.
-% \begin{macrocode}
-\int_const:Nn \c_@@_max_exp_exponent_int { 5 }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\c_@@_overflowing_fp}
-% A floating point number that is bigger than all normal floating
-% point numbers. This replaces infinities when converting to formats
-% that do not support infinities.
-% \begin{macrocode}
-\tl_const:Ne \c_@@_overflowing_fp
- {
- \s_@@ \@@_chk:w 1 0
- { \int_eval:n { \c_@@_max_exponent_int + 1 } }
- {1000} {0000} {0000} {0000} ;
- }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[EXP]{\@@_zero_fp:N, \@@_inf_fp:N}
-% In case of overflow or underflow, we have to output
-% a zero or infinity with a given sign.
-% \begin{macrocode}
-\cs_new:Npn \@@_zero_fp:N #1
- { \s_@@ \@@_chk:w 0 #1 \s_@@_underflow ; }
-\cs_new:Npn \@@_inf_fp:N #1
- { \s_@@ \@@_chk:w 2 #1 \s_@@_overflow ; }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_exponent:w}
-% For normal numbers, the function expands to the exponent, otherwise
-% to $0$. This is used in \pkg{l3str-format}.
-% \begin{macrocode}
-\cs_new:Npn \@@_exponent:w \s_@@ \@@_chk:w #1
- {
- \if_meaning:w 1 #1
- \exp_after:wN \@@_use_ii_until_s:nnw
- \else:
- \exp_after:wN \@@_use_i_until_s:nw
- \exp_after:wN 0
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_neg_sign:N}
-% When appearing in an integer expression or after \cs{int_value:w},
-% this expands to the sign opposite to |#1|, namely $0$ (positive) is
-% turned to $2$ (negative), $1$ (\texttt{nan}) to $1$, and $2$ to $0$.
-% \begin{macrocode}
-\cs_new:Npn \@@_neg_sign:N #1
- { \@@_int_eval:w 2 - #1 \@@_int_eval_end: }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_kind:w}
-% Expands to $0$ for zeros, $1$ for normal floating point numbers, $2$
-% for infinities, $3$ for \nan{}, $4$ for tuples.
-% \begin{macrocode}
-\cs_new:Npn \@@_kind:w #1
- {
- \@@_if_type_fp:NTwFw
- #1 \@@_use_ii_until_s:nnw
- \s_@@ { \@@_use_i_until_s:nw 4 }
- \s_@@_stop
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Overflow, underflow, and exact zero}
-%
-%^^A todo: the sign of exact zeros should depend on the rounding mode.
-%
-% \begin{macro}[EXP]{\@@_sanitize:Nw, \@@_sanitize:wN}
-% \begin{macro}[EXP]{\@@_sanitize_zero:w}
-% Expects the sign and the exponent in some order, then the
-% significand (which we don't touch). Outputs the corresponding
-% floating point number, possibly underflowed to $\pm 0$ or overflowed
-% to $\pm\infty$. The functions \cs{@@_underflow:w} and
-% \cs{@@_overflow:w} are defined in \pkg{l3fp-traps}.
-% \begin{macrocode}
-\cs_new:Npn \@@_sanitize:Nw #1 #2;
- {
- \if_case:w
- \if_int_compare:w #2 > \c_@@_max_exponent_int 1 ~ \else:
- \if_int_compare:w #2 < - \c_@@_minus_min_exponent_int 2 ~ \else:
- \if_meaning:w 1 #1 3 ~ \fi: \fi: \fi: 0 ~
- \or: \exp_after:wN \@@_overflow:w
- \or: \exp_after:wN \@@_underflow:w
- \or: \exp_after:wN \@@_sanitize_zero:w
- \fi:
- \s_@@ \@@_chk:w 1 #1 {#2}
- }
-\cs_new:Npn \@@_sanitize:wN #1; #2 { \@@_sanitize:Nw #2 #1; }
-\cs_new:Npn \@@_sanitize_zero:w \s_@@ \@@_chk:w #1 #2 #3;
- { \c_zero_fp }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Expanding after a floating point number}
-%
-% \begin{macro}[EXP]{\@@_exp_after_o:w}
-% \begin{macro}[EXP]{\@@_exp_after_f:nw}
-% \begin{syntax}
-% \cs{@@_exp_after_o:w} \meta{floating point}
-% \cs{@@_exp_after_f:nw} \Arg{tokens} \meta{floating point}
-% \end{syntax}
-% Places \meta{tokens} (empty in the case of \cs{@@_exp_after_o:w})
-% between the \meta{floating point} and the following tokens, then
-% hits those tokens with \texttt{o} or \texttt{f}-expansion, and
-% leaves the floating point number unchanged.
-%
-% We first distinguish normal floating points, which have a significand,
-% from the much simpler special floating points.
-% \begin{macrocode}
-\cs_new:Npn \@@_exp_after_o:w \s_@@ \@@_chk:w #1
- {
- \if_meaning:w 1 #1
- \exp_after:wN \@@_exp_after_normal:nNNw
- \else:
- \exp_after:wN \@@_exp_after_special:nNNw
- \fi:
- { }
- #1
- }
-\cs_new:Npn \@@_exp_after_f:nw #1 \s_@@ \@@_chk:w #2
- {
- \if_meaning:w 1 #2
- \exp_after:wN \@@_exp_after_normal:nNNw
- \else:
- \exp_after:wN \@@_exp_after_special:nNNw
- \fi:
- { \exp:w \exp_end_continue_f:w #1 }
- #2
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_exp_after_special:nNNw}
-% \begin{syntax}
-% \cs{@@_exp_after_special:nNNw} \Arg{after} \meta{case} \meta{sign} \meta{scan mark} |;|
-% \end{syntax}
-% Special floating point numbers are easy to jump over since they
-% contain few tokens.
-% \begin{macrocode}
-\cs_new:Npn \@@_exp_after_special:nNNw #1#2#3#4;
- {
- \exp_after:wN \s_@@
- \exp_after:wN \@@_chk:w
- \exp_after:wN #2
- \exp_after:wN #3
- \exp_after:wN #4
- \exp_after:wN ;
- #1
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_exp_after_normal:nNNw}
-% For normal floating point numbers, life is slightly harder, since we
-% have many tokens to jump over. Here it would be slightly better if
-% the digits were not braced but instead were delimited arguments (for
-% instance delimited by |,|). That may be changed some day.
-% \begin{macrocode}
-\cs_new:Npn \@@_exp_after_normal:nNNw #1 1 #2 #3 #4#5#6#7;
- {
- \exp_after:wN \@@_exp_after_normal:Nwwwww
- \exp_after:wN #2
- \int_value:w #3 \exp_after:wN ;
- \int_value:w 1 #4 \exp_after:wN ;
- \int_value:w 1 #5 \exp_after:wN ;
- \int_value:w 1 #6 \exp_after:wN ;
- \int_value:w 1 #7 \exp_after:wN ; #1
- }
-\cs_new:Npn \@@_exp_after_normal:Nwwwww
- #1 #2; 1 #3 ; 1 #4 ; 1 #5 ; 1 #6 ;
- { \s_@@ \@@_chk:w 1 #1 {#2} {#3} {#4} {#5} {#6} ; }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Other floating point types}
-%
-% \begin{macro}{\s_@@_tuple, \@@_tuple_chk:w}
-% \begin{variable}{\c_@@_empty_tuple_fp}
-% Floating point tuples take the form \cs{s_@@_tuple}
-% \cs{@@_tuple_chk:w} |{| \meta{fp 1} \meta{fp 2} \dots |}| |;| where
-% each \meta{fp} is a floating point number or tuple, hence ends with
-% |;| itself. When a tuple is typeset, \cs{@@_tuple_chk:w} produces
-% an error, just like usual floating point numbers.
-% Tuples may have zero or one element.
-% \begin{macrocode}
-\scan_new:N \s_@@_tuple
-\cs_new_protected:Npn \@@_tuple_chk:w #1 ;
- { \@@_misused:n { \s_@@_tuple \@@_tuple_chk:w #1 ; } }
-\tl_const:Nn \c_@@_empty_tuple_fp
- { \s_@@_tuple \@@_tuple_chk:w { } ; }
-% \end{macrocode}
-% \end{variable}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_tuple_count:w, \@@_array_count:n}
-% \begin{macro}[EXP]{\@@_tuple_count_loop:Nw}
-% Count the number of items in a tuple of floating points by counting
-% semicolons. The technique is very similar to \cs{tl_count:n}, but
-% with the loop built-in. Checking for the end of the loop is done
-% with the |\use_none:n #1| construction.
-% \begin{macrocode}
-\cs_new:Npn \@@_array_count:n #1
- { \@@_tuple_count:w \s_@@_tuple \@@_tuple_chk:w {#1} ; }
-\cs_new:Npn \@@_tuple_count:w \s_@@_tuple \@@_tuple_chk:w #1 ;
- {
- \int_value:w \@@_int_eval:w 0
- \@@_tuple_count_loop:Nw #1 { ? \prg_break: } ;
- \prg_break_point:
- \@@_int_eval_end:
- }
-\cs_new:Npn \@@_tuple_count_loop:Nw #1#2;
- { \use_none:n #1 + 1 \@@_tuple_count_loop:Nw }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_if_type_fp:NTwFw}
-% Used as \cs{@@_if_type_fp:NTwFw} \meta{marker} \Arg{true code}
-% \cs{s_@@} \Arg{false code} \cs{s_@@_stop}, this test whether the
-% \meta{marker} is \cs{s_@@} or not and runs the appropriate
-% \meta{code}. The very unusual syntax is for optimization purposes
-% as that function is used for all floating point operations.
-% \begin{macrocode}
-\cs_new:Npn \@@_if_type_fp:NTwFw #1 \s_@@ #2 #3 \s_@@_stop {#2}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_array_if_all_fp:nTF, \@@_array_if_all_fp_loop:w}
-% True if all items are floating point numbers. Used for |min|.
-% \begin{macrocode}
-\cs_new:Npn \@@_array_if_all_fp:nTF #1
- {
- \@@_array_if_all_fp_loop:w #1 { \s_@@ \prg_break: } ;
- \prg_break_point: \use_i:nn
- }
-\cs_new:Npn \@@_array_if_all_fp_loop:w #1#2 ;
- {
- \@@_if_type_fp:NTwFw
- #1 \@@_array_if_all_fp_loop:w
- \s_@@ { \prg_break:n \use_iii:nnn }
- \s_@@_stop
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {\@@_type_from_scan:N, \@@_type_from_scan_other:N, \@@_type_from_scan:w}
-% Used as \cs{@@_type_from_scan:N} \meta{token}.
-% Grabs the pieces of the stringified \meta{token} which lies after
-% the first |s__fp|. If the \meta{token} does not contain that
-% string, the result is |_?|.
-% \begin{macrocode}
-\cs_new:Npn \@@_type_from_scan:N #1
- {
- \@@_if_type_fp:NTwFw
- #1 { }
- \s_@@ { \@@_type_from_scan_other:N #1 }
- \s_@@_stop
- }
-\cs_new:Npe \@@_type_from_scan_other:N #1
- {
- \exp_not:N \exp_after:wN \exp_not:N \@@_type_from_scan:w
- \exp_not:N \token_to_str:N #1 \s_@@_mark
- \tl_to_str:n { s_@@ _? } \s_@@_mark \s_@@_stop
- }
-\exp_last_unbraced:NNNNo
- \cs_new:Npn \@@_type_from_scan:w #1
- { \tl_to_str:n { s_@@ } } #2 \s_@@_mark #3 \s_@@_stop {#2}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_change_func_type:NNN}
-% \begin{macro}[EXP]{\@@_change_func_type_aux:w, \@@_change_func_type_chk:NNN}
-% Arguments are \meta{type marker} \meta{function} \meta{recovery}.
-% This gives the function obtained by placing the type after |@@|. If
-% the function is not defined then \meta{recovery} \meta{function} is
-% used instead; however that test is not run when the \meta{type
-% marker} is \cs{s_@@}.
-% \begin{macrocode}
-\cs_new:Npn \@@_change_func_type:NNN #1#2#3
- {
- \@@_if_type_fp:NTwFw
- #1 #2
- \s_@@
- {
- \exp_after:wN \@@_change_func_type_chk:NNN
- \cs:w
- @@ \@@_type_from_scan_other:N #1
- \exp_after:wN \@@_change_func_type_aux:w \token_to_str:N #2
- \cs_end:
- #2 #3
- }
- \s_@@_stop
- }
-\exp_last_unbraced:NNNNo
- \cs_new:Npn \@@_change_func_type_aux:w #1 { \tl_to_str:n { @@ } } { }
-\cs_new:Npn \@@_change_func_type_chk:NNN #1#2#3
- {
- \if_meaning:w \scan_stop: #1
- \exp_after:wN #3 \exp_after:wN #2
- \else:
- \exp_after:wN #1
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_exp_after_any_f:Nnw, \@@_exp_after_any_f:nw}
-% \begin{macro}[EXP]{\@@_exp_after_expr_stop_f:nw}
-% The |Nnw| function simply dispatches to the appropriate
-% \cs[no-index]{@@_exp_after\ldots{}_f:nw} with \enquote{\ldots{}}
-% (either empty or |_|\meta{type}) extracted from |#1|, which should
-% start with |\s__fp|. If it doesn't start with |\s__fp| the function
-% \cs{@@_exp_after_?_f:nw} defined in \pkg{l3fp-parse} gives an error;
-% another special \meta{type} is |stop|, useful for loops, see below.
-% The |nw| function has an important optimization for floating points
-% numbers; it also fetches its type marker |#2| from the floating
-% point.
-% \begin{macrocode}
-\cs_new:Npn \@@_exp_after_any_f:Nnw #1
- { \cs:w @@_exp_after \@@_type_from_scan_other:N #1 _f:nw \cs_end: }
-\cs_new:Npn \@@_exp_after_any_f:nw #1#2
- {
- \@@_if_type_fp:NTwFw
- #2 \@@_exp_after_f:nw
- \s_@@ { \@@_exp_after_any_f:Nnw #2 }
- \s_@@_stop
- {#1} #2
- }
-\cs_new_eq:NN \@@_exp_after_expr_stop_f:nw \use_none:nn
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_exp_after_tuple_o:w}
-% \begin{macro}[EXP]{\@@_exp_after_tuple_f:nw, \@@_exp_after_array_f:w}
-% The loop works by using the |n| argument of
-% \cs{@@_exp_after_any_f:nw} to place the loop macro after the next
-% item in the tuple and expand it.
-% \begin{quote}
-% \cs{@@_exp_after_array_f:w}\\
-% \meta{fp_1} |;|\\
-% \ldots{}\\
-% \meta{fp_n} |;|\\
-% \cs{s_@@_expr_stop}
-% \end{quote}
-% \begin{macrocode}
-\cs_new:Npn \@@_exp_after_tuple_o:w
- { \@@_exp_after_tuple_f:nw { \exp_after:wN \exp_stop_f: } }
-\cs_new:Npn \@@_exp_after_tuple_f:nw
- #1 \s_@@_tuple \@@_tuple_chk:w #2 ;
- {
- \exp_after:wN \s_@@_tuple
- \exp_after:wN \@@_tuple_chk:w
- \exp_after:wN {
- \exp:w \exp_end_continue_f:w
- \@@_exp_after_array_f:w #2 \s_@@_expr_stop
- \exp_after:wN }
- \exp_after:wN ;
- \exp:w \exp_end_continue_f:w #1
- }
-\cs_new:Npn \@@_exp_after_array_f:w
- { \@@_exp_after_any_f:nw { \@@_exp_after_array_f:w } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Packing digits}
-%
-% When a positive integer |#1| is known to be less than $10^8$, the
-% following trick splits it into two blocks of $4$ digits, padding
-% with zeros on the left.
-% \begin{verbatim}
-% \cs_new:Npn \pack:NNNNNw #1 #2#3#4#5 #6; { {#2#3#4#5} {#6} }
-% \exp_after:wN \pack:NNNNNw
-% \__fp_int_value:w \__fp_int_eval:w 1 0000 0000 + #1 ;
-% \end{verbatim}
-% The idea is that adding $10^8$ to the number ensures that it has
-% exactly $9$ digits, and can then easily find which digits correspond
-% to what position in the number. Of course, this can be modified
-% for any number of digits less or equal to~$9$ (we are limited by
-% \TeX{}'s integers). This method is very heavily relied upon in
-% \texttt{l3fp-basics}.
-%
-% More specifically, the auxiliary inserts |+ #1#2#3#4#5 ; {#6}|, which
-% allows us to compute several blocks of $4$ digits in a nested manner,
-% performing carries on the fly. Say we want to compute $1\,2345 \times
-% 6677\,8899$. With simplified names, we would do
-% \begin{verbatim}
-% \exp_after:wN \post_processing:w
-% \__fp_int_value:w \__fp_int_eval:w - 5 0000
-% \exp_after:wN \pack:NNNNNw
-% \__fp_int_value:w \__fp_int_eval:w 4 9995 0000
-% + 12345 * 6677
-% \exp_after:wN \pack:NNNNNw
-% \__fp_int_value:w \__fp_int_eval:w 5 0000 0000
-% + 12345 * 8899 ;
-% \end{verbatim}
-% The \cs{exp_after:wN} triggers \cs{int_value:w} \cs{@@_int_eval:w}, which
-% starts a first computation, whose initial value is $- 5\,0000$ (the
-% \enquote{leading shift}). In that computation appears an
-% \cs{exp_after:wN}, which triggers the nested computation
-% \cs{int_value:w} \cs{@@_int_eval:w} with starting value $4\,9995\,0000$ (the
-% \enquote{middle shift}). That, in turn, expands \cs{exp_after:wN}
-% which triggers the third computation. The third computation's value
-% is $5\,0000\,0000 + 12345 \times 8899$, which has $9$ digits. Adding
-% $5\cdot 10^{8}$ to the product allowed us to know how many digits to
-% expect as long as the numbers to multiply are not too big; it
-% also works to some extent with negative results. The \texttt{pack}
-% function puts the last $4$ of those $9$ digits into a brace group,
-% moves the semi-colon delimiter, and inserts a |+|, which combines the
-% carry with the previous computation. The shifts nicely combine into
-% $5\,0000\,0000 / 10^{4} + 4\,9995\,0000 = 5\,0000\,0000$. As long as
-% the operands are in some range, the result of this second computation
-% has $9$ digits. The corresponding \texttt{pack} function,
-% expanded after the result is computed, braces the last $4$ digits, and
-% leaves |+| \meta{5 digits} for the initial computation. The
-% \enquote{leading shift} cancels the combination of the other shifts,
-% and the |\post_processing:w| takes care of packing the last few
-% digits.
-%
-% Admittedly, this is quite intricate. It is probably the key in making
-% \pkg{l3fp} as fast as other pure \TeX{} floating point units despite
-% its increased precision. In fact, this is used so much that we
-% provide different sets of packing functions and shifts, depending on
-% ranges of input.
-%
-% \begin{macro}[EXP]{\@@_pack:NNNNNw}
-% \begin{variable}
-% {
-% \c_@@_trailing_shift_int ,
-% \c_@@_middle_shift_int ,
-% \c_@@_leading_shift_int ,
-% }
-% This set of shifts allows for computations involving results in the
-% range $[-4\cdot 10^{8}, 5\cdot 10^{8}-1]$. Shifted values all have
-% exactly $9$ digits.
-% \begin{macrocode}
-\int_const:Nn \c_@@_leading_shift_int { - 5 0000 }
-\int_const:Nn \c_@@_middle_shift_int { 5 0000 * 9999 }
-\int_const:Nn \c_@@_trailing_shift_int { 5 0000 * 10000 }
-\cs_new:Npn \@@_pack:NNNNNw #1 #2#3#4#5 #6; { + #1#2#3#4#5 ; {#6} }
-% \end{macrocode}
-% \end{variable}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_pack_big:NNNNNNw}
-% \begin{variable}
-% {
-% \c_@@_big_trailing_shift_int ,
-% \c_@@_big_middle_shift_int ,
-% \c_@@_big_leading_shift_int ,
-% }
-% This set of shifts allows for computations involving results in the
-% range $[-5\cdot 10^{8}, 6\cdot 10^{8}-1]$ (actually a bit more).
-% Shifted values all have exactly $10$ digits. Note that the upper
-% bound is due to \TeX{}'s limit of $2^{31}-1$ on integers. The
-% shifts are chosen to be roughly the mid-point of $10^{9}$ and
-% $2^{31}$, the two bounds on $10$-digit integers in \TeX{}.
-% \begin{macrocode}
-\int_const:Nn \c_@@_big_leading_shift_int { - 15 2374 }
-\int_const:Nn \c_@@_big_middle_shift_int { 15 2374 * 9999 }
-\int_const:Nn \c_@@_big_trailing_shift_int { 15 2374 * 10000 }
-\cs_new:Npn \@@_pack_big:NNNNNNw #1#2 #3#4#5#6 #7;
- { + #1#2#3#4#5#6 ; {#7} }
-% \end{macrocode}
-% \end{variable}
-% \end{macro}
-%
-% ^^A \@@_pack_Bigg:NNNNNNw = \@@_pack_big:NNNNNNw ?
-% \begin{macro}[EXP]{\@@_pack_Bigg:NNNNNNw}
-% \begin{variable}
-% {
-% \c_@@_Bigg_trailing_shift_int ,
-% \c_@@_Bigg_middle_shift_int ,
-% \c_@@_Bigg_leading_shift_int ,
-% }
-% This set of shifts allows for computations with results in the
-% range $[-1\cdot 10^{9}, 147483647]$; the end-point is $2^{31} - 1 -
-% 2\cdot 10^{9} \simeq 1.47\cdot 10^{8}$. Shifted values all have
-% exactly $10$ digits.
-% \begin{macrocode}
-\int_const:Nn \c_@@_Bigg_leading_shift_int { - 20 0000 }
-\int_const:Nn \c_@@_Bigg_middle_shift_int { 20 0000 * 9999 }
-\int_const:Nn \c_@@_Bigg_trailing_shift_int { 20 0000 * 10000 }
-\cs_new:Npn \@@_pack_Bigg:NNNNNNw #1#2 #3#4#5#6 #7;
- { + #1#2#3#4#5#6 ; {#7} }
-% \end{macrocode}
-% \end{variable}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_pack_twice_four:wNNNNNNNN}
-% \begin{syntax}
-% \cs{@@_pack_twice_four:wNNNNNNNN} \meta{tokens} |;| \meta{$\geq 8$ digits}
-% \end{syntax}
-% Grabs two sets of $4$ digits and places them before the semi-colon
-% delimiter. Putting several copies of this function before a
-% semicolon packs more digits since each takes the digits
-% packed by the others in its first argument.
-% \begin{macrocode}
-\cs_new:Npn \@@_pack_twice_four:wNNNNNNNN #1; #2#3#4#5 #6#7#8#9
- { #1 {#2#3#4#5} {#6#7#8#9} ; }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_pack_eight:wNNNNNNNN}
-% \begin{syntax}
-% \cs{@@_pack_eight:wNNNNNNNN} \meta{tokens} |;| \meta{$\geq 8$ digits}
-% \end{syntax}
-% Grabs one set of $8$ digits and places them before the semi-colon
-% delimiter as a single group. Putting several copies of this
-% function before a semicolon packs more digits since each
-% takes the digits packed by the others in its first argument.
-% \begin{macrocode}
-\cs_new:Npn \@@_pack_eight:wNNNNNNNN #1; #2#3#4#5 #6#7#8#9
- { #1 {#2#3#4#5#6#7#8#9} ; }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {
-% \@@_basics_pack_low:NNNNNw,
-% \@@_basics_pack_high:NNNNNw,
-% \@@_basics_pack_high_carry:w
-% }
-% Addition and multiplication of significands are done in two steps:
-% first compute a (more or less) exact result, then round and pack
-% digits in the final (braced) form. These functions take care of the
-% packing, with special attention given to the case where rounding has
-% caused a carry. Since rounding can only shift the final digit by
-% $1$, a carry always produces an exact power of $10$. Thus,
-% \cs{@@_basics_pack_high_carry:w} is always followed by four times
-% |{0000}|.
-%
-% This is used in \pkg{l3fp-basics} and \pkg{l3fp-extended}.
-% \begin{macrocode}
-\cs_new:Npn \@@_basics_pack_low:NNNNNw #1 #2#3#4#5 #6;
- { + #1 - 1 ; {#2#3#4#5} {#6} ; }
-\cs_new:Npn \@@_basics_pack_high:NNNNNw #1 #2#3#4#5 #6;
- {
- \if_meaning:w 2 #1
- \@@_basics_pack_high_carry:w
- \fi:
- ; {#2#3#4#5} {#6}
- }
-\cs_new:Npn \@@_basics_pack_high_carry:w \fi: ; #1
- { \fi: + 1 ; {1000} }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {
-% \@@_basics_pack_weird_low:NNNNw,
-% \@@_basics_pack_weird_high:NNNNNNNNw
-% }
-% This is used in \pkg{l3fp-basics} for additions and
-% divisions. Their syntax is confusing, hence the name.
-% \begin{macrocode}
-\cs_new:Npn \@@_basics_pack_weird_low:NNNNw #1 #2#3#4 #5;
- {
- \if_meaning:w 2 #1
- + 1
- \fi:
- \@@_int_eval_end:
- #2#3#4; {#5} ;
- }
-\cs_new:Npn \@@_basics_pack_weird_high:NNNNNNNNw
- 1 #1#2#3#4 #5#6#7#8 #9; { ; {#1#2#3#4} {#5#6#7#8} {#9} }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Decimate (dividing by a power of 10)}
-%
-% ^^A begin[todo]
-% \begin{macro}[EXP]{\@@_decimate:nNnnnn}
-% \begin{syntax}
-% \cs{@@_decimate:nNnnnn} \Arg{shift} \meta{f_1}
-% ~~\Arg{X_1} \Arg{X_2} \Arg{X_3} \Arg{X_4}
-% \end{syntax}
-% Each \meta{X_i} consists in $4$ digits exactly,
-% and $1000\leq\meta{X_1}<9999$. The first argument determines
-% by how much we shift the digits. \meta{f_1} is called as follows:
-% \begin{syntax}
-% \meta{f_1} \meta{rounding} \Arg{X'_1} \Arg{X'_2} \meta{extra-digits} |;|
-% \end{syntax}
-% where $0\leq\meta{X'_i}<10^{8}-1$ are $8$ digit integers,
-% forming the truncation of our number. In other words,
-% \[
-% \left(
-% \sum_{i=1}^{4} \meta{X_i} \cdot 10^{-4i} \cdot 10^{-\meta{shift}}
-% \right)
-% - \bigl( \meta{X'_1} \cdot 10^{-8} + \meta{X'_2} \cdot 10^{-16} \bigr)
-% = 0.\meta{extra-digits} \cdot 10^{-16}
-% \in [0,10^{-16}).
-% \]
-% To round properly later, we need to remember some information
-% about the difference. The \meta{rounding} digit is $0$ if and
-% only if the difference is exactly $0$, and $5$ if and only if
-% the difference is exactly $0.5\cdot 10^{-16}$. Otherwise, it
-% is the (non-$0$, non-$5$) digit closest to $10^{17}$ times the
-% difference. In particular, if the shift is $17$ or more, all
-% the digits are dropped, \meta{rounding} is $1$ (not $0$), and
-% \meta{X'_1} and \meta{X'_2} are both zero.
-%
-% If the shift is $1$, the \meta{rounding} digit is simply the
-% only digit that was pushed out of the brace groups (this is
-% important for subtraction). It would be more natural for the
-% \meta{rounding} digit to be placed after the \meta{X'_i},
-% but the choice we make involves less reshuffling.
-%
-% Note that this function treats negative \meta{shift} as $0$.
-% \begin{macrocode}
-\cs_new:Npn \@@_decimate:nNnnnn #1
- {
- \cs:w
- @@_decimate_
- \if_int_compare:w \@@_int_eval:w #1 > \c_@@_prec_int
- tiny
- \else:
- \@@_int_to_roman:w \@@_int_eval:w #1
- \fi:
- :Nnnnn
- \cs_end:
- }
-% \end{macrocode}
-% Each of the auxiliaries see the function \meta{f_1},
-% followed by $4$ blocks of $4$ digits.
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_decimate_:Nnnnn, \@@_decimate_tiny:Nnnnn}
-% If the \meta{shift} is zero, or too big, life is very easy.
-% \begin{macrocode}
-\cs_new:Npn \@@_decimate_:Nnnnn #1 #2#3#4#5
- { #1 0 {#2#3} {#4#5} ; }
-\cs_new:Npn \@@_decimate_tiny:Nnnnn #1 #2#3#4#5
- { #1 1 { 0000 0000 } { 0000 0000 } 0 #2#3#4#5 ; }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {
-% \@@_decimate_auxi:Nnnnn, \@@_decimate_auxii:Nnnnn,
-% \@@_decimate_auxiii:Nnnnn, \@@_decimate_auxiv:Nnnnn,
-% \@@_decimate_auxv:Nnnnn, \@@_decimate_auxvi:Nnnnn,
-% \@@_decimate_auxvii:Nnnnn, \@@_decimate_auxviii:Nnnnn,
-% \@@_decimate_auxix:Nnnnn, \@@_decimate_auxx:Nnnnn,
-% \@@_decimate_auxxi:Nnnnn, \@@_decimate_auxxii:Nnnnn,
-% \@@_decimate_auxxiii:Nnnnn, \@@_decimate_auxxiv:Nnnnn,
-% \@@_decimate_auxxv:Nnnnn, \@@_decimate_auxxvi:Nnnnn
-% }
-% \begin{syntax}
-% \cs{@@_decimate_auxi:Nnnnn} \meta{f_1} \Arg{X_1} \Arg{X_2} \Arg{X_3} \Arg{X_4}
-% \end{syntax}
-% Shifting happens in two steps: compute the \meta{rounding} digit,
-% and repack digits into two blocks of $8$. The sixteen functions
-% are very similar, and defined through \cs{@@_tmp:w}.
-% The arguments are as follows: |#1| indicates which function is
-% being defined; after one step of expansion, |#2| yields the
-% \enquote{extra digits} which are then converted by
-% \cs{@@_round_digit:Nw} to the \meta{rounding} digit (note the |+|
-% separating blocks of digits to avoid overflowing \TeX{}'s integers).
-% This triggers the \texttt{f}-expansion of
-% \cs{@@_decimate_pack:nnnnnnnnnnw},\footnote{No, the argument
-% spec is not a mistake: the function calls an auxiliary to
-% do half of the job.} responsible for building two blocks of
-% $8$ digits, and removing the rest. For this to work, |#3|
-% alternates between braced and unbraced blocks of $4$ digits,
-% in such a way that the $5$ first and $5$ next token groups
-% yield the correct blocks of $8$ digits.
-% \begin{macrocode}
-\cs_new:Npn \@@_tmp:w #1 #2 #3
- {
- \cs_new:cpn { @@_decimate_ #1 :Nnnnn } ##1 ##2##3##4##5
- {
- \exp_after:wN ##1
- \int_value:w
- \exp_after:wN \@@_round_digit:Nw #2 ;
- \@@_decimate_pack:nnnnnnnnnnw #3 ;
- }
- }
-\@@_tmp:w {i} {\use_none:nnn #50}{ 0{#2}#3{#4}#5 }
-\@@_tmp:w {ii} {\use_none:nn #5 }{ 00{#2}#3{#4}#5 }
-\@@_tmp:w {iii} {\use_none:n #5 }{ 000{#2}#3{#4}#5 }
-\@@_tmp:w {iv} { #5 }{ {0000}#2{#3}#4 #5 }
-\@@_tmp:w {v} {\use_none:nnn #4#5 }{ 0{0000}#2{#3}#4 #5 }
-\@@_tmp:w {vi} {\use_none:nn #4#5 }{ 00{0000}#2{#3}#4 #5 }
-\@@_tmp:w {vii} {\use_none:n #4#5 }{ 000{0000}#2{#3}#4 #5 }
-\@@_tmp:w {viii}{ #4#5 }{ {0000}0000{#2}#3 #4 #5 }
-\@@_tmp:w {ix} {\use_none:nnn #3#4+#5}{ 0{0000}0000{#2}#3 #4 #5 }
-\@@_tmp:w {x} {\use_none:nn #3#4+#5}{ 00{0000}0000{#2}#3 #4 #5 }
-\@@_tmp:w {xi} {\use_none:n #3#4+#5}{ 000{0000}0000{#2}#3 #4 #5 }
-\@@_tmp:w {xii} { #3#4+#5}{ {0000}0000{0000}#2 #3 #4 #5 }
-\@@_tmp:w {xiii}{\use_none:nnn#2#3+#4#5}{ 0{0000}0000{0000}#2 #3 #4 #5 }
-\@@_tmp:w {xiv} {\use_none:nn #2#3+#4#5}{ 00{0000}0000{0000}#2 #3 #4 #5 }
-\@@_tmp:w {xv} {\use_none:n #2#3+#4#5}{ 000{0000}0000{0000}#2 #3 #4 #5 }
-\@@_tmp:w {xvi} { #2#3+#4#5}{{0000}0000{0000}0000 #2 #3 #4 #5}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_decimate_pack:nnnnnnnnnnw}
-% The computation of the \meta{rounding} digit leaves an unfinished
-% \cs{int_value:w}, which expands the following functions. This
-% allows us to repack nicely the digits we keep. Those digits come
-% as an alternation of unbraced and braced blocks of $4$ digits,
-% such that the first $5$ groups of token consist in $4$ single digits,
-% and one brace group (in some order), and the next $5$ have the same
-% structure. This is followed by some digits and a semicolon.
-% \begin{macrocode}
-\cs_new:Npn \@@_decimate_pack:nnnnnnnnnnw #1#2#3#4#5
- { \@@_decimate_pack:nnnnnnw { #1#2#3#4#5 } }
-\cs_new:Npn \@@_decimate_pack:nnnnnnw #1 #2#3#4#5#6
- { {#1} {#2#3#4#5#6} }
-% \end{macrocode}
-% \end{macro}
-% ^^A end[todo]
-%
-% \subsection{Functions for use within primitive conditional branches}
-%
-% The functions described in this section are not pretty and can easily
-% be misused. When correctly used, each of them removes one \cs{fi:} as
-% part of its parameter text, and puts one back as part of its
-% replacement text.
-%
-% Many computation functions in \pkg{l3fp} must perform tests on the
-% type of floating points that they receive. This is often done in an
-% \cs{if_case:w} statement or another conditional statement, and only a
-% few cases lead to actual computations: most of the special cases are
-% treated using a few standard functions which we define now. A typical
-% use context for those functions would be
-% \begin{syntax}
-% \cs{if_case:w} \meta{integer} \cs{exp_stop_f:}
-% | |\cs{@@_case_return_o:Nw} \meta{fp var}
-% \cs{or:} \cs{@@_case_use:nw} \Arg{some computation}
-% \cs{or:} \cs{@@_case_return_same_o:w}
-% \cs{or:} \cs{@@_case_return:nw} \Arg{something}
-% \cs{fi:}
-% \meta{junk}
-% \meta{floating point}
-% \end{syntax}
-% In this example, the case $0$ returns the floating point
-% \meta{fp~var}, expanding once after that floating point. Case $1$
-% does \meta{some computation} using the \meta{floating point}
-% (presumably compute the operation requested by the user in that
-% non-trivial case). Case $2$ returns the \meta{floating point}
-% without modifying it, removing the \meta{junk} and expanding once
-% after. Case $3$ closes the conditional, removes the \meta{junk}
-% and the \meta{floating point}, and expands \meta{something} next. In
-% other cases, the \enquote{\meta{junk}} is expanded, performing some
-% other operation on the \meta{floating point}. We provide similar
-% functions with two trailing \meta{floating points}.
-%
-% \begin{macro}[EXP]{\@@_case_use:nw}
-% This function ends a \TeX{} conditional, removes junk until the next
-% floating point, and places its first argument before that floating
-% point, to perform some operation on the floating point.
-% \begin{macrocode}
-\cs_new:Npn \@@_case_use:nw #1#2 \fi: #3 \s_@@ { \fi: #1 \s_@@ }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_case_return:nw}
-% This function ends a \TeX{} conditional, removes junk and a floating
-% point, and places its first argument in the input stream. A quirk
-% is that we don't define this function requiring a floating point to
-% follow, simply anything ending in a semicolon. This, in turn, means
-% that the \meta{junk} may not contain semicolons.
-% \begin{macrocode}
-\cs_new:Npn \@@_case_return:nw #1#2 \fi: #3 ; { \fi: #1 }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_case_return_o:Nw}
-% This function ends a \TeX{} conditional, removes junk and a floating
-% point, and returns its first argument (an \meta{fp~var}) then expands
-% once after it.
-% \begin{macrocode}
-\cs_new:Npn \@@_case_return_o:Nw #1#2 \fi: #3 \s_@@ #4 ;
- { \fi: \exp_after:wN #1 }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_case_return_same_o:w}
-% This function ends a \TeX{} conditional, removes junk, and returns
-% the following floating point, expanding once after it.
-% \begin{macrocode}
-\cs_new:Npn \@@_case_return_same_o:w #1 \fi: #2 \s_@@
- { \fi: \@@_exp_after_o:w \s_@@ }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_case_return_o:Nww}
-% Same as \cs{@@_case_return_o:Nw} but with two trailing floating
-% points.
-% \begin{macrocode}
-\cs_new:Npn \@@_case_return_o:Nww #1#2 \fi: #3 \s_@@ #4 ; #5 ;
- { \fi: \exp_after:wN #1 }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_case_return_i_o:ww, \@@_case_return_ii_o:ww}
-% Similar to \cs{@@_case_return_same_o:w}, but this returns the first
-% or second of two trailing floating point numbers, expanding once
-% after the result.
-% \begin{macrocode}
-\cs_new:Npn \@@_case_return_i_o:ww #1 \fi: #2 \s_@@ #3 ; \s_@@ #4 ;
- { \fi: \@@_exp_after_o:w \s_@@ #3 ; }
-\cs_new:Npn \@@_case_return_ii_o:ww #1 \fi: #2 \s_@@ #3 ;
- { \fi: \@@_exp_after_o:w }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Integer floating points}
-%
-% \begin{macro}[EXP, pTF]{\@@_int:w}
-% Tests if the floating point argument is an integer. For normal
-% floating point numbers, this holds if the rounding digit resulting
-% from \cs{@@_decimate:nNnnnn} is~$0$.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \@@_int:w \s_@@ \@@_chk:w #1 #2 #3 #4;
- { TF , T , F , p }
- {
- \if_case:w #1 \exp_stop_f:
- \prg_return_true:
- \or:
- \if_charcode:w 0
- \@@_decimate:nNnnnn { \c_@@_prec_int - #3 }
- \@@_use_i_until_s:nw #4
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- \else: \prg_return_false:
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Small integer floating points}
-%
-% \begin{macro}[EXP]{\@@_small_int:wTF}
-% \begin{macro}[EXP]
-% {
-% \@@_small_int_true:wTF,
-% \@@_small_int_normal:NnwTF,
-% \@@_small_int_test:NnnwNTF
-% }
-% Tests if the floating point argument is an integer or $\pm\infty$.
-% If so, it is clipped to an integer in the range $[-10^{8},10^{8}]$
-% and fed as a braced argument to the \meta{true code}.
-% Otherwise, the \meta{false code} is performed.
-%
-% First filter special cases: zeros and infinities are integers,
-% \texttt{nan} is not. For normal numbers, decimate. If the rounding
-% digit is not $0$ run the \meta{false code}. If it is, then the
-% integer is |#2| |#3|; use |#3| if |#2| vanishes and otherwise
-% $10^{8}$.
-% \begin{macrocode}
-\cs_new:Npn \@@_small_int:wTF \s_@@ \@@_chk:w #1#2
- {
- \if_case:w #1 \exp_stop_f:
- \@@_case_return:nw { \@@_small_int_true:wTF 0 ; }
- \or: \exp_after:wN \@@_small_int_normal:NnwTF
- \or:
- \@@_case_return:nw
- {
- \exp_after:wN \@@_small_int_true:wTF \int_value:w
- \if_meaning:w 2 #2 - \fi: 1 0000 0000 ;
- }
- \else: \@@_case_return:nw \use_ii:nn
- \fi:
- #2
- }
-\cs_new:Npn \@@_small_int_true:wTF #1; #2#3 { #2 {#1} }
-\cs_new:Npn \@@_small_int_normal:NnwTF #1#2#3;
- {
- \@@_decimate:nNnnnn { \c_@@_prec_int - #2 }
- \@@_small_int_test:NnnwNw
- #3 #1
- }
-\cs_new:Npn \@@_small_int_test:NnnwNw #1#2#3#4; #5
- {
- \if_meaning:w 0 #1
- \exp_after:wN \@@_small_int_true:wTF
- \int_value:w \if_meaning:w 2 #5 - \fi:
- \if_int_compare:w #2 > \c_zero_int
- 1 0000 0000
- \else:
- #3
- \fi:
- \exp_after:wN ;
- \else:
- \exp_after:wN \use_ii:nn
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Fast string comparison}
-%
-% \begin{macro}{\@@_str_if_eq:nn}
-% A private version of the low-level string comparison function.
-% \begin{macrocode}
-\cs_new_eq:NN \@@_str_if_eq:nn \tex_strcmp:D
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Name of a function from its \pkg{l3fp-parse} name}
-%
-% \begin{macro}[EXP]{\@@_func_to_name:N, \@@_func_to_name_aux:w}
-% The goal is to convert for instance \cs{@@_sin_o:w} to |sin|.
-% This is used in error messages hence does not need to be fast.
-% \begin{macrocode}
-\cs_new:Npn \@@_func_to_name:N #1
- {
- \exp_last_unbraced:Nf
- \@@_func_to_name_aux:w { \cs_to_str:N #1 } X
- }
-\cs_set_protected:Npn \@@_tmp:w #1 #2
- { \cs_new:Npn \@@_func_to_name_aux:w ##1 #1 ##2 #2 ##3 X {##2} }
-\exp_args:Nff \@@_tmp:w { \tl_to_str:n { @@_ } }
- { \tl_to_str:n { _o: } }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Messages}
-%
-% Using a floating point directly is an error.
-% \begin{macrocode}
-\msg_new:nnnn { fp } { misused }
- { A~floating~point~with~value~'#1'~was~misused. }
- {
- To~obtain~the~value~of~a~floating~point~variable,~use~
- '\token_to_str:N \fp_to_decimal:N',~
- '\token_to_str:N \fp_to_tl:N',~or~other~
- conversion~functions.
- }
-\prop_gput:Nnn \g_msg_module_name_prop { fp } { LaTeX }
-\prop_gput:Nnn \g_msg_module_type_prop { fp } { }
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintChanges
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3fp-basics.dtx b/macros/latex/contrib/l3kernel/l3fp-basics.dtx
deleted file mode 100644
index a7401407cd..0000000000
--- a/macros/latex/contrib/l3kernel/l3fp-basics.dtx
+++ /dev/null
@@ -1,2181 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3fp-basics.dtx
-%
-% Copyright (C) 2011-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3fp-basics} module\\
-% Floating point arithmetic^^A
-% }
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3fp-basics} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=fp>
-% \end{macrocode}
-%
-% The \pkg{l3fp-basics} module implements addition, subtraction,
-% multiplication, and division of two floating points, and the absolute
-% value and sign-changing operations on one floating point.
-% All operations implemented in this module yield the outcome of
-% rounding the infinitely precise result of the operation to the
-% nearest floating point.
-%
-% Some algorithms used below end up being quite similar to some
-% described in \enquote{What Every Computer Scientist Should Know About
-% Floating Point Arithmetic}, by David Goldberg, which can be found at
-% \texttt{http://cr.yp.to/2005-590/goldberg.pdf}.
-%
-% \begin{macro}[EXP]
-% {
-% \@@_parse_word_abs:N ,
-% \@@_parse_word_logb:N ,
-% \@@_parse_word_sign:N ,
-% \@@_parse_word_sqrt:N ,
-% }
-% Unary functions.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_word_abs:N
- { \@@_parse_unary_function:NNN \@@_set_sign_o:w 0 }
-\cs_new:Npn \@@_parse_word_logb:N
- { \@@_parse_unary_function:NNN \@@_logb_o:w ? }
-\cs_new:Npn \@@_parse_word_sign:N
- { \@@_parse_unary_function:NNN \@@_sign_o:w ? }
-\cs_new:Npn \@@_parse_word_sqrt:N
- { \@@_parse_unary_function:NNN \@@_sqrt_o:w ? }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Addition and subtraction}
-%
-% We define here two functions, \cs{@@_-_o:ww} and \cs{@@_+_o:ww}, which
-% perform the subtraction and addition of their two floating point
-% operands, and expand the tokens following the result once.
-%
-% A more obscure function, \cs{@@_add_big_i_o:wNww}, is used in
-% \pkg{l3fp-expo}.
-%
-% The logic goes as follows:
-% \begin{itemize}
-% \item \cs{@@_-_o:ww} calls \cs{@@_+_o:ww} to do the work, with the
-% sign of the second operand flipped;
-% \item \cs{@@_+_o:ww} dispatches depending on the type of floating
-% point, calling specialized auxiliaries;
-% \item in all cases except summing two normal floating point numbers,
-% we return one or the other operands depending on the signs, or
-% detect an invalid operation in the case of $\infty - \infty$;
-% \item for normal floating point numbers, compare the signs;
-% \item to add two floating point numbers of the same sign or of
-% opposite signs, shift the significand of the smaller one to match the
-% bigger one, perform the addition or subtraction of significands,
-% check for a carry, round, and pack using the
-% \cs[no-index]{@@_basics_pack_\ldots{}} functions.
-% \end{itemize}
-% The trickiest part is to round correctly when adding or subtracting
-% normal floating point numbers.
-%
-% \subsubsection{Sign, exponent, and special numbers}
-%
-% \begin{macro}[EXP]{\@@_-_o:ww}
-% The \cs{@@_+_o:ww} auxiliary has a hook: it takes one argument
-% between the first \cs{s_@@} and \cs{@@_chk:w}, which is applied to
-% the sign of the second operand. Positioning the hook there means
-% that \cs{@@_+_o:ww} can still perform the sanity check that it was
-% followed by \cs{s_@@}.
-% \begin{macrocode}
-\cs_new:cpe { @@_-_o:ww } \s_@@
- {
- \exp_not:c { @@_+_o:ww }
- \exp_not:n { \s_@@ \@@_neg_sign:N }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_+_o:ww}
-% This function is either called directly with an empty |#1| to
-% compute an addition, or it is called by \cs{@@_-_o:ww} with
-% \cs{@@_neg_sign:N} as |#1| to compute a subtraction, in which case
-% the second operand's sign should be changed. If the
-% \meta{types} |#2| and |#4| are the same, dispatch to case |#2| ($0$,
-% $1$, $2$, or $3$), where we call specialized functions: thanks to
-% \cs{int_value:w}, those receive the tweaked \meta{sign_2}
-% (expansion of |#1#5|) as an argument. If the \meta{types} are
-% distinct, the result is simply the floating point number with the
-% highest \meta{type}. Since case $3$ (used for two \texttt{nan})
-% also picks the first operand, we can also use it when \meta{type_1}
-% is greater than \meta{type_2}. Also note that we don't need to
-% worry about \meta{sign_2} in that case since the second operand is
-% discarded.
-% \begin{macrocode}
-\cs_new:cpn { @@_+_o:ww }
- \s_@@ #1 \@@_chk:w #2 #3 ; \s_@@ \@@_chk:w #4 #5
- {
- \if_case:w
- \if_meaning:w #2 #4
- #2
- \else:
- \if_int_compare:w #2 > #4 \exp_stop_f:
- 3
- \else:
- 4
- \fi:
- \fi:
- \exp_stop_f:
- \exp_after:wN \@@_add_zeros_o:Nww \int_value:w
- \or: \exp_after:wN \@@_add_normal_o:Nww \int_value:w
- \or: \exp_after:wN \@@_add_inf_o:Nww \int_value:w
- \or: \@@_case_return_i_o:ww
- \else: \exp_after:wN \@@_add_return_ii_o:Nww \int_value:w
- \fi:
- #1 #5
- \s_@@ \@@_chk:w #2 #3 ;
- \s_@@ \@@_chk:w #4 #5
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_add_return_ii_o:Nww}
-% Ignore the first operand, and return the second, but using the sign
-% |#1| rather than |#4|. As usual, expand after the floating point.
-% \begin{macrocode}
-\cs_new:Npn \@@_add_return_ii_o:Nww #1 #2 ; \s_@@ \@@_chk:w #3 #4
- { \@@_exp_after_o:w \s_@@ \@@_chk:w #3 #1 }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_add_zeros_o:Nww}
-% Adding two zeros yields \cs{c_zero_fp}, except if both zeros were
-% $-0$.
-% \begin{macrocode}
-\cs_new:Npn \@@_add_zeros_o:Nww #1 \s_@@ \@@_chk:w 0 #2
- {
- \if_int_compare:w #2 #1 = 20 \exp_stop_f:
- \exp_after:wN \@@_add_return_ii_o:Nww
- \else:
- \@@_case_return_i_o:ww
- \fi:
- #1
- \s_@@ \@@_chk:w 0 #2
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_add_inf_o:Nww}
-% If both infinities have the same sign, just return that infinity,
-% otherwise, it is an invalid operation. We find out if that invalid
-% operation is an addition or a subtraction by testing whether the
-% tweaked \meta{sign_2} (|#1|) and the \meta{sign_2} (|#4|) are
-% identical.
-% \begin{macrocode}
-\cs_new:Npn \@@_add_inf_o:Nww
- #1 \s_@@ \@@_chk:w 2 #2 #3; \s_@@ \@@_chk:w 2 #4
- {
- \if_meaning:w #1 #2
- \@@_case_return_i_o:ww
- \else:
- \@@_case_use:nw
- {
- \exp_last_unbraced:Nf \@@_invalid_operation_o:Nww
- { \token_if_eq_meaning:NNTF #1 #4 + - }
- }
- \fi:
- \s_@@ \@@_chk:w 2 #2 #3;
- \s_@@ \@@_chk:w 2 #4
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_add_normal_o:Nww}
-% \begin{quote}
-% \cs{@@_add_normal_o:Nww} \meta{sign_2}
-% \cs{s_@@} \cs{@@_chk:w} |1| \meta{sign_1}
-% \meta{exp_1} \meta{body_1} |;|
-% \cs{s_@@} \cs{@@_chk:w} |1| \meta{initial sign_2}
-% \meta{exp_2} \meta{body_2} |;|
-% \end{quote}
-% We now have two normal numbers to add, and we have to check signs
-% and exponents more carefully before performing the addition.
-% \begin{macrocode}
-\cs_new:Npn \@@_add_normal_o:Nww #1 \s_@@ \@@_chk:w 1 #2
- {
- \if_meaning:w #1#2
- \exp_after:wN \@@_add_npos_o:NnwNnw
- \else:
- \exp_after:wN \@@_sub_npos_o:NnwNnw
- \fi:
- #2
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Absolute addition}
-%
-% In this subsection, we perform the addition of two positive normal
-% numbers.
-%
-% \begin{macro}[EXP]{\@@_add_npos_o:NnwNnw}
-% \begin{quote}
-% \cs{@@_add_npos_o:NnwNnw} \meta{sign_1} \meta{exp_1} \meta{body_1}
-% |;| \cs{s_@@} \cs{@@_chk:w} |1| \meta{initial sign_2} \meta{exp_2}
-% \meta{body_2} |;|
-% \end{quote}
-% Since we are doing an addition, the final sign is \meta{sign_1}.
-% Start an \cs{@@_int_eval:w}, responsible for computing the exponent:
-% the result, and the \meta{final sign} are then given to
-% \cs{@@_sanitize:Nw} which checks for overflow. The exponent is
-% computed as the largest exponent |#2| or |#5|, incremented if there
-% is a carry. To add the significands, we decimate the smaller number by
-% the difference between the exponents. This is done by
-% \cs{@@_add_big_i:wNww} or \cs{@@_add_big_ii:wNww}. We need to bring
-% the final sign with us in the midst of the calculation to round
-% properly at the end.
-% \begin{macrocode}
-\cs_new:Npn \@@_add_npos_o:NnwNnw #1#2#3 ; \s_@@ \@@_chk:w 1 #4 #5
- {
- \exp_after:wN \@@_sanitize:Nw
- \exp_after:wN #1
- \int_value:w \@@_int_eval:w
- \if_int_compare:w #2 > #5 \exp_stop_f:
- #2
- \exp_after:wN \@@_add_big_i_o:wNww \int_value:w -
- \else:
- #5
- \exp_after:wN \@@_add_big_ii_o:wNww \int_value:w
- \fi:
- \@@_int_eval:w #5 - #2 ; #1 #3;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_add_big_i_o:wNww}
-% \begin{macro}[rEXP]{\@@_add_big_ii_o:wNww}
-% \begin{quote}
-% \cs{@@_add_big_i_o:wNww} \meta{shift} |;| \meta{final sign}
-% \meta{body_1} |;| \meta{body_2} |;|
-% \end{quote}
-% Used in \pkg{l3fp-expo}.
-% Shift the significand of the small number, then add with
-% \cs{@@_add_significand_o:NnnwnnnnN}.
-% \begin{macrocode}
-\cs_new:Npn \@@_add_big_i_o:wNww #1; #2 #3; #4;
- {
- \@@_decimate:nNnnnn {#1}
- \@@_add_significand_o:NnnwnnnnN
- #4
- #3
- #2
- }
-\cs_new:Npn \@@_add_big_ii_o:wNww #1; #2 #3; #4;
- {
- \@@_decimate:nNnnnn {#1}
- \@@_add_significand_o:NnnwnnnnN
- #3
- #4
- #2
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_add_significand_o:NnnwnnnnN}
-% \begin{macro}[rEXP]
-% {\@@_add_significand_pack:NNNNNNN, \@@_add_significand_test_o:N}
-% \begin{quote}\raggedright
-% \cs{@@_add_significand_o:NnnwnnnnN}
-% \meta{rounding digit}
-% \Arg{Y'_1} \Arg{Y'_2} \meta{extra-digits} |;|
-% \Arg{X_1} \Arg{X_2} \Arg{X_3} \Arg{X_4}
-% \meta{final sign}
-% \end{quote}
-% To round properly, we must know at which digit the rounding
-% should occur. This requires to know whether the addition
-% produces an overall carry or not. Thus, we do the computation
-% now and check for a carry, then go back and do the rounding.
-% The rounding may cause a carry in very rare cases such as
-% $0.99\cdots 95 \to 1.00\cdots 0$, but this situation always
-% give an exact power of $10$, for which it is easy to correct
-% the result at the end.
-% \begin{macrocode}
-\cs_new:Npn \@@_add_significand_o:NnnwnnnnN #1 #2#3 #4; #5#6#7#8
- {
- \exp_after:wN \@@_add_significand_test_o:N
- \int_value:w \@@_int_eval:w 1#5#6 + #2
- \exp_after:wN \@@_add_significand_pack:NNNNNNN
- \int_value:w \@@_int_eval:w 1#7#8 + #3 ; #1
- }
-\cs_new:Npn \@@_add_significand_pack:NNNNNNN #1 #2#3#4#5#6#7
- {
- \if_meaning:w 2 #1
- + 1
- \fi:
- ; #2 #3 #4 #5 #6 #7 ;
- }
-\cs_new:Npn \@@_add_significand_test_o:N #1
- {
- \if_meaning:w 2 #1
- \exp_after:wN \@@_add_significand_carry_o:wwwNN
- \else:
- \exp_after:wN \@@_add_significand_no_carry_o:wwwNN
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_add_significand_no_carry_o:wwwNN}
-% \begin{quote}
-% \cs{@@_add_significand_no_carry_o:wwwNN}
-% \meta{8d} |;| \meta{6d} |;| \meta{2d} |;|
-% \meta{rounding digit} \meta{sign}
-% \end{quote}
-% If there's no carry, grab all the digits again and round. The
-% packing function \cs{@@_basics_pack_high:NNNNNw} takes care of the
-% case where rounding brings a carry.
-% \begin{macrocode}
-\cs_new:Npn \@@_add_significand_no_carry_o:wwwNN
- #1; #2; #3#4 ; #5#6
- {
- \exp_after:wN \@@_basics_pack_high:NNNNNw
- \int_value:w \@@_int_eval:w 1 #1
- \exp_after:wN \@@_basics_pack_low:NNNNNw
- \int_value:w \@@_int_eval:w 1 #2 #3#4
- + \@@_round:NNN #6 #4 #5
- \exp_after:wN ;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_add_significand_carry_o:wwwNN}
-% \begin{quote}
-% \cs{@@_add_significand_carry_o:wwwNN}
-% \meta{8d} |;| \meta{6d} |;| \meta{2d} |;|
-% \meta{rounding digit} \meta{sign}
-% \end{quote}
-% The case where there is a carry is very similar. Rounding can even
-% raise the first digit from $1$ to $2$, but we don't care.
-% \begin{macrocode}
-\cs_new:Npn \@@_add_significand_carry_o:wwwNN
- #1; #2; #3#4; #5#6
- {
- + 1
- \exp_after:wN \@@_basics_pack_weird_high:NNNNNNNNw
- \int_value:w \@@_int_eval:w 1 1 #1
- \exp_after:wN \@@_basics_pack_weird_low:NNNNw
- \int_value:w \@@_int_eval:w 1 #2#3 +
- \exp_after:wN \@@_round:NNN
- \exp_after:wN #6
- \exp_after:wN #3
- \int_value:w \@@_round_digit:Nw #4 #5 ;
- \exp_after:wN ;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Absolute subtraction}
-%
-% \begin{macro}[EXP]{\@@_sub_npos_o:NnwNnw}
-% \begin{macro}[EXP]{\@@_sub_eq_o:Nnwnw, \@@_sub_npos_ii_o:Nnwnw}
-% \begin{quote}
-% \cs{@@_sub_npos_o:NnwNnw}
-% \meta{sign_1} \meta{exp_1} \meta{body_1} |;|
-% \cs{s_@@} \cs{@@_chk:w} |1|
-% \meta{initial sign_2} \meta{exp_2} \meta{body_2} |;|
-% \end{quote}
-% Rounding properly in some modes requires to know what the sign of
-% the result will be. Thus, we start by comparing the exponents and
-% significands. If the numbers coincide, return zero. If the second
-% number is larger, swap the numbers and call
-% \cs{@@_sub_npos_i_o:Nnwnw} with the opposite of \meta{sign_1}.
-% \begin{macrocode}
-\cs_new:Npn \@@_sub_npos_o:NnwNnw #1#2#3; \s_@@ \@@_chk:w 1 #4#5#6;
- {
- \if_case:w \@@_compare_npos:nwnw {#2} #3; {#5} #6; \exp_stop_f:
- \exp_after:wN \@@_sub_eq_o:Nnwnw
- \or:
- \exp_after:wN \@@_sub_npos_i_o:Nnwnw
- \else:
- \exp_after:wN \@@_sub_npos_ii_o:Nnwnw
- \fi:
- #1 {#2} #3; {#5} #6;
- }
-\cs_new:Npn \@@_sub_eq_o:Nnwnw #1#2; #3; { \exp_after:wN \c_zero_fp }
-\cs_new:Npn \@@_sub_npos_ii_o:Nnwnw #1 #2; #3;
- {
- \exp_after:wN \@@_sub_npos_i_o:Nnwnw
- \int_value:w \@@_neg_sign:N #1
- #3; #2;
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_sub_npos_i_o:Nnwnw}
-% After the computation is done, \cs{@@_sanitize:Nw} checks for
-% overflow/underflow. It expects the \meta{final sign} and the
-% \meta{exponent} (delimited by |;|). Start an integer expression for
-% the exponent, which starts with the exponent of the largest number,
-% and may be decreased if the two numbers are very close. If the two
-% numbers have the same exponent, call the \texttt{near} auxiliary.
-% Otherwise, decimate $y$, then call the \texttt{far} auxiliary to
-% evaluate the difference between the two significands. Note that we
-% decimate by $1$ less than one could expect.
-% \begin{macrocode}
-\cs_new:Npn \@@_sub_npos_i_o:Nnwnw #1 #2#3; #4#5;
- {
- \exp_after:wN \@@_sanitize:Nw
- \exp_after:wN #1
- \int_value:w \@@_int_eval:w
- #2
- \if_int_compare:w #2 = #4 \exp_stop_f:
- \exp_after:wN \@@_sub_back_near_o:nnnnnnnnN
- \else:
- \exp_after:wN \@@_decimate:nNnnnn \exp_after:wN
- { \int_value:w \@@_int_eval:w #2 - #4 - 1 \exp_after:wN }
- \exp_after:wN \@@_sub_back_far_o:NnnwnnnnN
- \fi:
- #5
- #3
- #1
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_sub_back_near_o:nnnnnnnnN}
-% \begin{macro}[rEXP]
-% {\@@_sub_back_near_pack:NNNNNNw, \@@_sub_back_near_after:wNNNNw}
-% \begin{quote}
-% \cs{@@_sub_back_near_o:nnnnnnnnN}
-% \Arg{Y_1} \Arg{Y_2} \Arg{Y_3} \Arg{Y_4}
-% \Arg{X_1} \Arg{X_2} \Arg{X_3} \Arg{X_4}
-% \meta{final sign}
-% \end{quote}
-% In this case, the subtraction is exact, so we discard the
-% \meta{final sign} |#9|. The very large shifts of $10^{9}$ and
-% $1.1\cdot10^{9}$ are unnecessary here, but allow the auxiliaries to
-% be reused later. Each integer expression produces a $10$ digit
-% result. If the resulting $16$ digits start with a $0$, then we need
-% to shift the group, padding with trailing zeros.
-% \begin{macrocode}
-\cs_new:Npn \@@_sub_back_near_o:nnnnnnnnN #1#2#3#4 #5#6#7#8 #9
- {
- \exp_after:wN \@@_sub_back_near_after:wNNNNw
- \int_value:w \@@_int_eval:w 10#5#6 - #1#2 - 11
- \exp_after:wN \@@_sub_back_near_pack:NNNNNNw
- \int_value:w \@@_int_eval:w 11#7#8 - #3#4 \exp_after:wN ;
- }
-\cs_new:Npn \@@_sub_back_near_pack:NNNNNNw #1#2#3#4#5#6#7 ;
- { + #1#2 ; {#3#4#5#6} {#7} ; }
-\cs_new:Npn \@@_sub_back_near_after:wNNNNw 10 #1#2#3#4 #5 ;
- {
- \if_meaning:w 0 #1
- \exp_after:wN \@@_sub_back_shift:wnnnn
- \fi:
- ; {#1#2#3#4} {#5}
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_sub_back_shift:wnnnn}
-% \begin{macro}[rEXP]
-% {
-% \@@_sub_back_shift_ii:ww,
-% \@@_sub_back_shift_iii:NNNNNNNNw,
-% \@@_sub_back_shift_iv:nnnnw
-% }
-% \begin{quote}
-% \cs{@@_sub_back_shift:wnnnn} |;|
-% \Arg{Z_1} \Arg{Z_2} \Arg{Z_3} \Arg{Z_4} |;|
-% \end{quote}
-% This function is called with $\meta{Z_1}\leq 999$. Act with
-% \tn{number} to trim leading zeros from \meta{Z_1} \meta{Z_2} (we
-% don't do all four blocks at once, since non-zero blocks would then
-% overflow \TeX{}'s integers). If the first two blocks are zero, the
-% auxiliary receives an empty |#1| and trims |#2#30| from leading
-% zeros, yielding a total shift between $7$ and~$16$ to the exponent.
-% Otherwise we get the shift from |#1| alone, yielding a result
-% between $1$ and~$6$. Once the exponent is taken care of, trim
-% leading zeros from |#1#2#3| (when |#1| is empty, the space before
-% |#2#3| is ignored), get four blocks of $4$~digits and finally clean
-% up. Trailing zeros are added so that digits can be grabbed safely.
-% \begin{macrocode}
-\cs_new:Npn \@@_sub_back_shift:wnnnn ; #1#2
- {
- \exp_after:wN \@@_sub_back_shift_ii:ww
- \int_value:w #1 #2 0 ;
- }
-\cs_new:Npn \@@_sub_back_shift_ii:ww #1 0 ; #2#3 ;
- {
- \if_meaning:w @ #1 @
- - 7
- - \exp_after:wN \use_i:nnn
- \exp_after:wN \@@_sub_back_shift_iii:NNNNNNNNw
- \int_value:w #2#3 0 ~ 123456789;
- \else:
- - \@@_sub_back_shift_iii:NNNNNNNNw #1 123456789;
- \fi:
- \exp_after:wN \@@_pack_twice_four:wNNNNNNNN
- \exp_after:wN \@@_pack_twice_four:wNNNNNNNN
- \exp_after:wN \@@_sub_back_shift_iv:nnnnw
- \exp_after:wN ;
- \int_value:w
- #1 ~ #2#3 0 ~ 0000 0000 0000 000 ;
- }
-\cs_new:Npn \@@_sub_back_shift_iii:NNNNNNNNw #1#2#3#4#5#6#7#8#9; {#8}
-\cs_new:Npn \@@_sub_back_shift_iv:nnnnw #1 ; #2 ; { ; #1 ; }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_sub_back_far_o:NnnwnnnnN}
-% \begin{quote}\raggedright
-% \cs{@@_sub_back_far_o:NnnwnnnnN}
-% \meta{rounding} \Arg{Y'_1} \Arg{Y'_2} \meta{extra-digits} |;|
-% \Arg{X_1} \Arg{X_2} \Arg{X_3} \Arg{X_4}
-% \meta{final sign}
-% \end{quote}
-% If the difference is greater than $10^{\meta{expo_x}}$, call the
-% \texttt{very_far} auxiliary. If the result is less than
-% $10^{\meta{expo_x}}$, call the \texttt{not_far} auxiliary. If it is
-% too close a call to know yet, namely if $1 \meta{Y'_1} \meta{Y'_2} =
-% \meta{X_1} \meta{X_2} \meta{X_3} \meta{X_4} 0$, then call the
-% \texttt{quite_far} auxiliary. We use the odd combination of space
-% and semi-colon delimiters to allow the \texttt{not_far} auxiliary to
-% grab each piece individually, the \texttt{very_far} auxiliary to use
-% \cs{@@_pack_eight:wNNNNNNNN}, and the \texttt{quite_far} to ignore
-% the significands easily (using the |;| delimiter).
-% \begin{macrocode}
-\cs_new:Npn \@@_sub_back_far_o:NnnwnnnnN #1 #2#3 #4; #5#6#7#8
- {
- \if_case:w
- \if_int_compare:w 1 #2 = #5#6 \use_i:nnnn #7 \exp_stop_f:
- \if_int_compare:w #3 = \use_none:n #7#8 0 \exp_stop_f:
- 0
- \else:
- \if_int_compare:w #3 > \use_none:n #7#8 0 - \fi: 1
- \fi:
- \else:
- \if_int_compare:w 1 #2 > #5#6 \use_i:nnnn #7 - \fi: 1
- \fi:
- \exp_stop_f:
- \exp_after:wN \@@_sub_back_quite_far_o:wwNN
- \or: \exp_after:wN \@@_sub_back_very_far_o:wwwwNN
- \else: \exp_after:wN \@@_sub_back_not_far_o:wwwwNN
- \fi:
- #2 ~ #3 ; #5 #6 ~ #7 #8 ; #1
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_sub_back_quite_far_o:wwNN}
-% \begin{macro}[EXP]{\@@_sub_back_quite_far_ii:NN}
-% The easiest case is when $x-y$ is extremely close to a power of
-% $10$, namely the first digit of $x$ is $1$, and all others vanish
-% when subtracting $y$. Then the \meta{rounding} |#3| and the
-% \meta{final sign} |#4| control whether we get $1$ or $0.9999 9999
-% 9999 9999$. In the usual round-to-nearest mode, we get $1$
-% whenever the \meta{rounding} digit is less than or equal to $5$
-% (remember that the \meta{rounding} digit is only equal to $5$ if
-% there was no further non-zero digit).
-% \begin{macrocode}
-\cs_new:Npn \@@_sub_back_quite_far_o:wwNN #1; #2; #3#4
- {
- \exp_after:wN \@@_sub_back_quite_far_ii:NN
- \exp_after:wN #3
- \exp_after:wN #4
- }
-\cs_new:Npn \@@_sub_back_quite_far_ii:NN #1#2
- {
- \if_case:w \@@_round_neg:NNN #2 0 #1
- \exp_after:wN \use_i:nn
- \else:
- \exp_after:wN \use_ii:nn
- \fi:
- { ; {1000} {0000} {0000} {0000} ; }
- { - 1 ; {9999} {9999} {9999} {9999} ; }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_sub_back_not_far_o:wwwwNN}
-% In the present case, $x$ and $y$ have different exponents, but
-% $y$~is large enough that $x-y$ has a smaller exponent than~$x$.
-% Decrement the exponent (with |-1|). Then proceed in a way
-% similar to the \texttt{near} auxiliaries seen earlier, but
-% multiplying $x$ by~$10$ (|#30| and |#40| below), and with the added
-% quirk that the \meta{rounding} digit has to be taken into account.
-% Namely, we may have to decrease the result by one unit if
-% \cs{@@_round_neg:NNN} returns~$1$. This function expects the
-% \meta{final sign}~|#6|, the last digit of |1100000000+#40-#2|, and
-% the \meta{rounding} digit. Instead of redoing the computation for
-% the second argument, we note that \cs{@@_round_neg:NNN} only cares
-% about its parity, which is identical to that of the last digit
-% of~|#2|.
-% \begin{macrocode}
-\cs_new:Npn \@@_sub_back_not_far_o:wwwwNN #1 ~ #2; #3 ~ #4; #5#6
- {
- - 1
- \exp_after:wN \@@_sub_back_near_after:wNNNNw
- \int_value:w \@@_int_eval:w 1#30 - #1 - 11
- \exp_after:wN \@@_sub_back_near_pack:NNNNNNw
- \int_value:w \@@_int_eval:w 11 0000 0000 + #40 - #2
- - \exp_after:wN \@@_round_neg:NNN
- \exp_after:wN #6
- \use_none:nnnnnnn #2 #5
- \exp_after:wN ;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_sub_back_very_far_o:wwwwNN}
-% \begin{macro}[EXP]{\@@_sub_back_very_far_ii_o:nnNwwNN}
-% The case where $x-y$ and $x$ have the same exponent is a bit more
-% tricky, mostly because it cannot reuse the same auxiliaries. Shift
-% the $y$~significand by adding a leading~$0$. Then the logic is similar
-% to the \texttt{not_far} functions above. Rounding is a bit more
-% complicated: we have two \meta{rounding} digits |#3| and |#6| (from
-% the decimation, and from the new shift) to take into account, and
-% getting the parity of the main result requires a computation. The
-% first \cs{int_value:w} triggers the second one because the number
-% is unfinished; we can thus not use $0$ in place of $2$ there.
-% \begin{macrocode}
-\cs_new:Npn \@@_sub_back_very_far_o:wwwwNN #1#2#3#4#5#6#7
- {
- \@@_pack_eight:wNNNNNNNN
- \@@_sub_back_very_far_ii_o:nnNwwNN
- { 0 #1#2#3 #4#5#6#7 }
- ;
- }
-\cs_new:Npn \@@_sub_back_very_far_ii_o:nnNwwNN #1#2 ; #3 ; #4 ~ #5; #6#7
- {
- \exp_after:wN \@@_basics_pack_high:NNNNNw
- \int_value:w \@@_int_eval:w 1#4 - #1 - 1
- \exp_after:wN \@@_basics_pack_low:NNNNNw
- \int_value:w \@@_int_eval:w 2#5 - #2
- - \exp_after:wN \@@_round_neg:NNN
- \exp_after:wN #7
- \int_value:w
- \if_int_odd:w \@@_int_eval:w #5 - #2 \@@_int_eval_end:
- 1 \else: 2 \fi:
- \int_value:w \@@_round_digit:Nw #3 #6 ;
- \exp_after:wN ;
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Multiplication}
-%
-% \subsubsection{Signs, and special numbers}
-%
-% \begin{macro}[EXP]{\@@_*_o:ww}
-% We go through an auxiliary, which is common with \cs{@@_/_o:ww}.
-% The first argument is the operation, used for the invalid operation
-% exception. The second is inserted in a formula to dispatch cases
-% slightly differently between multiplication and division. The third
-% is the operation for normal floating points. The fourth is there
-% for extra cases needed in \cs{@@_/_o:ww}.
-% \begin{macrocode}
-\cs_new:cpn { @@_*_o:ww }
- {
- \@@_mul_cases_o:NnNnww
- *
- { - 2 + }
- \@@_mul_npos_o:Nww
- { }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_mul_cases_o:nNnnww}
-% Split into $10$ cases ($12$ for division).
-% If both numbers are normal, go to case $0$
-% (same sign) or case $1$ (opposite signs): in both cases, call
-% \cs{@@_mul_npos_o:Nww} to do the work. If the first operand is
-% \texttt{nan}, go to case $2$, in which the second operand is
-% discarded; if the second operand is \texttt{nan}, go to case $3$, in
-% which the first operand is discarded (note the weird interaction
-% with the final test on signs). Then we separate the case where the
-% first number is normal and the second is zero: this goes to cases
-% $4$ and $5$ for multiplication, $10$ and $11$ for division.
-% Otherwise, we do a computation which
-% dispatches the products $0\times 0 = 0\times 1 = 1\times 0 = 0$ to
-% case $4$ or $5$ depending on the combined sign, the products
-% $0\times\infty$ and $\infty\times0$ to case $6$ or $7$ (invalid
-% operation), and the products $1\times\infty = \infty\times1 =
-% \infty\times\infty = \infty$ to cases $8$ and $9$. Note that the
-% code for these two cases (which return $\pm\infty$) is inserted as
-% argument |#4|, because it differs in the case of divisions.
-% \begin{macrocode}
-\cs_new:Npn \@@_mul_cases_o:NnNnww
- #1#2#3#4 \s_@@ \@@_chk:w #5#6#7; \s_@@ \@@_chk:w #8#9
- {
- \if_case:w \@@_int_eval:w
- \if_int_compare:w #5 #8 = 11 ~
- 1
- \else:
- \if_meaning:w 3 #8
- 3
- \else:
- \if_meaning:w 3 #5
- 2
- \else:
- \if_int_compare:w #5 #8 = 10 ~
- 9 #2 - 2
- \else:
- (#5 #2 #8) / 2 * 2 + 7
- \fi:
- \fi:
- \fi:
- \fi:
- \if_meaning:w #6 #9 - 1 \fi:
- \@@_int_eval_end:
- \@@_case_use:nw { #3 0 }
- \or: \@@_case_use:nw { #3 2 }
- \or: \@@_case_return_i_o:ww
- \or: \@@_case_return_ii_o:ww
- \or: \@@_case_return_o:Nww \c_zero_fp
- \or: \@@_case_return_o:Nww \c_minus_zero_fp
- \or: \@@_case_use:nw { \@@_invalid_operation_o:Nww #1 }
- \or: \@@_case_use:nw { \@@_invalid_operation_o:Nww #1 }
- \or: \@@_case_return_o:Nww \c_inf_fp
- \or: \@@_case_return_o:Nww \c_minus_inf_fp
- #4
- \fi:
- \s_@@ \@@_chk:w #5 #6 #7;
- \s_@@ \@@_chk:w #8 #9
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Absolute multiplication}
-%
-% In this subsection, we perform the multiplication
-% of two positive normal numbers.
-%
-% \begin{macro}[EXP]{\@@_mul_npos_o:Nww}
-% \begin{quote}
-% \cs{@@_mul_npos_o:Nww} \meta{final sign}
-% \cs{s_@@} \cs{@@_chk:w} |1| \meta{sign_1} \Arg{exp_1} \meta{body_1} |;|
-% \cs{s_@@} \cs{@@_chk:w} |1| \meta{sign_2} \Arg{exp_2} \meta{body_2} |;|
-% \end{quote}
-% After the computation, \cs{@@_sanitize:Nw} checks for overflow or
-% underflow. As we did for addition, \cs{@@_int_eval:w} computes the
-% exponent, catching any shift coming from the computation in the
-% significand. The \meta{final sign} is needed to do the rounding
-% properly in the significand computation. We setup the post-expansion
-% here, triggered by \cs{@@_mul_significand_o:nnnnNnnnn}.
-%
-% This is also used in \pkg{l3fp-convert}.
-% \begin{macrocode}
-\cs_new:Npn \@@_mul_npos_o:Nww
- #1 \s_@@ \@@_chk:w #2 #3 #4 #5 ; \s_@@ \@@_chk:w #6 #7 #8 #9 ;
- {
- \exp_after:wN \@@_sanitize:Nw
- \exp_after:wN #1
- \int_value:w \@@_int_eval:w
- #4 + #8
- \@@_mul_significand_o:nnnnNnnnn #5 #1 #9
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_mul_significand_o:nnnnNnnnn}
-% \begin{macro}[EXP]
-% {\@@_mul_significand_drop:NNNNNw, \@@_mul_significand_keep:NNNNNw}
-% \begin{quote}
-% \cs{@@_mul_significand_o:nnnnNnnnn}
-% \Arg{X_1} \Arg{X_2} \Arg{X_3} \Arg{X_4} \meta{sign}
-% \Arg{Y_1} \Arg{Y_2} \Arg{Y_3} \Arg{Y_4}
-% \end{quote}
-% Note the three semicolons at the end of the definition. One is for
-% the last \cs{@@_mul_significand_drop:NNNNNw}; one is for
-% \cs{@@_round_digit:Nw} later on; and one, preceded by
-% \cs{exp_after:wN}, which is correctly expanded (within an
-% \cs{@@_int_eval:w}), is used by \cs{@@_basics_pack_low:NNNNNw}.
-%
-% The product of two $16$ digit integers has $31$ or $32$ digits,
-% but it is impossible to know which one before computing. The place
-% where we round depends on that number of digits, and may depend
-% on all digits until the last in some rare cases. The approach is
-% thus to compute the $5$ first blocks of $4$ digits (the first one
-% is between $100$ and $9999$ inclusive), and a compact version of
-% the remaining $3$ blocks. Afterwards, the number of digits is
-% known, and we can do the rounding within yet another set of
-% \cs{@@_int_eval:w}.
-% \begin{macrocode}
-\cs_new:Npn \@@_mul_significand_o:nnnnNnnnn #1#2#3#4 #5 #6#7#8#9
- {
- \exp_after:wN \@@_mul_significand_test_f:NNN
- \exp_after:wN #5
- \int_value:w \@@_int_eval:w 99990000 + #1*#6 +
- \exp_after:wN \@@_mul_significand_keep:NNNNNw
- \int_value:w \@@_int_eval:w 99990000 + #1*#7 + #2*#6 +
- \exp_after:wN \@@_mul_significand_keep:NNNNNw
- \int_value:w \@@_int_eval:w 99990000 + #1*#8 + #2*#7 + #3*#6 +
- \exp_after:wN \@@_mul_significand_drop:NNNNNw
- \int_value:w \@@_int_eval:w 99990000 + #1*#9 + #2*#8 +
- #3*#7 + #4*#6 +
- \exp_after:wN \@@_mul_significand_drop:NNNNNw
- \int_value:w \@@_int_eval:w 99990000 + #2*#9 + #3*#8 +
- #4*#7 +
- \exp_after:wN \@@_mul_significand_drop:NNNNNw
- \int_value:w \@@_int_eval:w 99990000 + #3*#9 + #4*#8 +
- \exp_after:wN \@@_mul_significand_drop:NNNNNw
- \int_value:w \@@_int_eval:w 100000000 + #4*#9 ;
- ; \exp_after:wN ;
- }
-\cs_new:Npn \@@_mul_significand_drop:NNNNNw #1#2#3#4#5 #6;
- { #1#2#3#4#5 ; + #6 }
-\cs_new:Npn \@@_mul_significand_keep:NNNNNw #1#2#3#4#5 #6;
- { #1#2#3#4#5 ; #6 ; }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_mul_significand_test_f:NNN}
-% \begin{quote}
-% \cs{@@_mul_significand_test_f:NNN} \meta{sign} |1|
-% \meta{digits 1--8} |;| \meta{digits 9--12} |;| \meta{digits 13--16} |;|
-% |+| \meta{digits 17--20} |+| \meta{digits 21--24}
-% |+| \meta{digits 25--28} |+| \meta{digits 29--32} |;|
-% \cs{exp_after:wN} |;|
-% \end{quote}
-% If the \meta{digit 1} is non-zero, then for rounding we only care
-% about the digits $16$ and $17$, and whether further digits are zero
-% or not (check for exact ties). On the other hand, if \meta{digit 1}
-% is zero, we care about digits $17$ and $18$, and whether further
-% digits are zero.
-% \begin{macrocode}
-\cs_new:Npn \@@_mul_significand_test_f:NNN #1 #2 #3
- {
- \if_meaning:w 0 #3
- \exp_after:wN \@@_mul_significand_small_f:NNwwwN
- \else:
- \exp_after:wN \@@_mul_significand_large_f:NwwNNNN
- \fi:
- #1 #3
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_mul_significand_large_f:NwwNNNN}
-% In this branch, \meta{digit 1} is non-zero. The result is thus
-% \meta{digits 1--16}, plus some rounding which depends on the digits
-% $16$, $17$, and whether all subsequent digits are zero or not.
-% Here, \cs{@@_round_digit:Nw} takes digits $17$ and further (as an
-% integer expression), and replaces it by a \meta{rounding digit},
-% suitable for \cs{@@_round:NNN}.
-% \begin{macrocode}
-\cs_new:Npn \@@_mul_significand_large_f:NwwNNNN #1 #2; #3; #4#5#6#7; +
- {
- \exp_after:wN \@@_basics_pack_high:NNNNNw
- \int_value:w \@@_int_eval:w 1#2
- \exp_after:wN \@@_basics_pack_low:NNNNNw
- \int_value:w \@@_int_eval:w 1#3#4#5#6#7
- + \exp_after:wN \@@_round:NNN
- \exp_after:wN #1
- \exp_after:wN #7
- \int_value:w \@@_round_digit:Nw
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_mul_significand_small_f:NNwwwN}
-% In this branch, \meta{digit 1} is zero. Our result is thus
-% \meta{digits 2--17}, plus some rounding which depends on the digits
-% $17$, $18$, and whether all subsequent digits are zero or not.
-% The $8$ digits |1#3| are followed, after expansion of the
-% \texttt{small_pack} auxiliary, by the next digit, to form a $9$
-% digit number.
-% \begin{macrocode}
-\cs_new:Npn \@@_mul_significand_small_f:NNwwwN #1 #2#3; #4#5; #6; + #7
- {
- - 1
- \exp_after:wN \@@_basics_pack_high:NNNNNw
- \int_value:w \@@_int_eval:w 1#3#4
- \exp_after:wN \@@_basics_pack_low:NNNNNw
- \int_value:w \@@_int_eval:w 1#5#6#7
- + \exp_after:wN \@@_round:NNN
- \exp_after:wN #1
- \exp_after:wN #7
- \int_value:w \@@_round_digit:Nw
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Division}
-%
-% \subsubsection{Signs, and special numbers}
-%
-% Time is now ripe to tackle the hardest of the four elementary
-% operations: division.
-%
-% \begin{macro}[EXP]{\@@_/_o:ww}
-% Filtering special floating point is very similar to what we did for
-% multiplications, with a few variations. Invalid operation
-% exceptions display |/| rather than |*|. In the formula for
-% dispatch, we replace |- 2 +| by |-|. The case of normal
-% numbers is treated using \cs{@@_div_npos_o:Nww} rather than
-% \cs{@@_mul_npos_o:Nww}. There are two additional cases: if the
-% first operand is normal and the second is a zero, then the division
-% by zero exception is raised: cases $10$ and $11$ of the
-% \cs{if_case:w} construction in \cs{@@_mul_cases_o:NnNnww} are
-% provided as the fourth argument here.
-% \begin{macrocode}
-\cs_new:cpn { @@_/_o:ww }
- {
- \@@_mul_cases_o:NnNnww
- /
- { - }
- \@@_div_npos_o:Nww
- {
- \or:
- \@@_case_use:nw
- { \@@_division_by_zero_o:NNww \c_inf_fp / }
- \or:
- \@@_case_use:nw
- { \@@_division_by_zero_o:NNww \c_minus_inf_fp / }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_div_npos_o:Nww}
-% \begin{quote}
-% \cs{@@_div_npos_o:Nww} \meta{final sign}
-% \cs{s_@@} \cs{@@_chk:w} |1| \meta{sign_A} \Arg{exp A}
-% \Arg{A_1} \Arg{A_2} \Arg{A_3} \Arg{A_4} |;|
-% \cs{s_@@} \cs{@@_chk:w} |1| \meta{sign_Z} \Arg{exp Z}
-% \Arg{Z_1} \Arg{Z_2} \Arg{Z_3} \Arg{Z_4} |;|
-% \end{quote}
-% We want to compute $A/Z$. As for multiplication,
-% \cs{@@_sanitize:Nw} checks for overflow or underflow; we provide it
-% with the \meta{final sign}, and an integer expression in which we
-% compute the exponent. We set up the arguments of
-% \cs{@@_div_significand_i_o:wnnw}, namely an integer \meta{y} obtained
-% by adding $1$ to the first $5$ digits of $Z$ (explanation given soon
-% below), then the four \Arg{A_{i}}, then the four \Arg{Z_{i}}, a
-% semi-colon, and the \meta{final sign}, used for rounding at the end.
-% \begin{macrocode}
-\cs_new:Npn \@@_div_npos_o:Nww
- #1 \s_@@ \@@_chk:w 1 #2 #3 #4 ; \s_@@ \@@_chk:w 1 #5 #6 #7#8#9;
- {
- \exp_after:wN \@@_sanitize:Nw
- \exp_after:wN #1
- \int_value:w \@@_int_eval:w
- #3 - #6
- \exp_after:wN \@@_div_significand_i_o:wnnw
- \int_value:w \@@_int_eval:w #7 \use_i:nnnn #8 + 1 ;
- #4
- {#7}{#8}#9 ;
- #1
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Work plan}
-%
-% In this subsection, we explain how to avoid overflowing \TeX{}'s
-% integers when performing the division of two positive normal numbers.
-%
-% We are given two numbers, $A=0.A_{1}A_{2}A_{3}A_{4}$ and
-% $Z=0.Z_{1}Z_{2}Z_{3}Z_{4}$, in blocks of $4$ digits, and we know that
-% the first digits of $A_{1}$ and of $Z_{1}$ are non-zero. To compute
-% $A/Z$, we proceed as follows.
-% \begin{itemize}
-% \item Find an integer $Q_{A} \simeq 10^{4} A / Z$.
-% \item Replace $A$ by $B = 10^{4} A - Q_{A} Z$.
-% \item Find an integer $Q_{B} \simeq 10^{4} B / Z$.
-% \item Replace $B$ by $C = 10^{4} B - Q_{B} Z$.
-% \item Find an integer $Q_{C} \simeq 10^{4} C / Z$.
-% \item Replace $C$ by $D = 10^{4} C - Q_{C} Z$.
-% \item Find an integer $Q_{D} \simeq 10^{4} D / Z$.
-% \item Consider $E = 10^{4} D - Q_{D} Z$, and ensure
-% correct rounding.
-% \end{itemize}
-% The result is then $Q = 10^{-4} Q_{A} + 10^{-8} Q_{B} + 10^{-12} Q_{C}
-% + 10^{-16} Q_{D} + \text{rounding}$. Since the $Q_{i}$ are integers,
-% $B$, $C$, $D$, and~$E$ are all exact multiples of $10^{-16}$, in other
-% words, computing with $16$ digits after the decimal separator yields
-% exact results. The problem is the risk of overflow: in general $B$, $C$,
-% $D$, and $E$ may be greater than $1$.
-%
-% Unfortunately, things are not as easy as they seem. In particular, we
-% want all intermediate steps to be positive, since negative results
-% would require extra calculations at the end. This requires that
-% $Q_{A} \leq 10^{4} A / Z$ \emph{etc.} A reasonable attempt would be
-% to define $Q_{A}$ as
-% \begin{equation*}
-% \cs{int_eval:n} \left\{
-% \frac{ A_{1} A_{2} }{ Z_{1} + 1 } - 1 \right\}
-% \leq 10^{4} \frac{A}{Z}
-% \end{equation*}
-% Subtracting $1$ at the end takes care of the fact that \eTeX{}'s
-% \cs{@@_int_eval:w} rounds divisions instead of truncating (really,
-% $1/2$ would be sufficient, but we work with integers). We add $1$ to
-% $Z_{1}$ because $Z_{1} \leq 10^{4}Z < Z_{1}+1$ and we need $Q_{A}$ to
-% be an underestimate. However, we are now underestimating $Q_{A}$ too
-% much: it can be wrong by up to $100$, for instance when $Z = 0.1$ and
-% $A \simeq 1$. Then $B$ could take values up to $10$ (maybe more), and
-% a few steps down the line, we would run into arithmetic overflow,
-% since \TeX{} can only handle integers less than roughly $2\cdot
-% 10^{9}$.
-%
-% A better formula is to take
-% \begin{equation*}
-% Q_{A} = \cs{int_eval:n} \left\{
-% \frac{ 10 \cdot A_{1} A_{2} }
-% { \left\lfloor 10^{-3} \cdot Z_{1} Z_{2} \right\rfloor + 1 }
-% - 1 \right\}.
-% \end{equation*}
-% This is always less than $10^{9} A / (10^{5} Z)$, as we wanted. In
-% words, we take the $5$ first digits of $Z$ into account, and the $8$
-% first digits of $A$, using $0$ as a $9$-th digit rather than the true
-% digit for efficiency reasons. We shall prove that using this formula
-% to define all the $Q_{i}$ avoids any overflow. For convenience, let
-% us denote
-% \begin{equation*}
-% y = \left\lfloor 10^{-3} \cdot Z_{1} Z_{2} \right\rfloor + 1,
-% \end{equation*}
-% so that, taking into account the fact that \eTeX{} rounds ties away
-% from zero,
-% \begin{align*}
-% Q_{A}
-% &= \left\lfloor \frac{A_{1}A_{2}0}{y} - \frac{1}{2} \right\rfloor
-% \\
-% &>\frac{A_{1}A_{2}0}{y} - \frac{3}{2}.
-% \end{align*}
-% Note that $10^{4}<y\leq 10^{5}$, and $999 \leq Q_{A} \leq 99989$.
-% Also note that this formula does not cause an overflow as long as $A <
-% (2^{31}-1) / 10^{9} \simeq 2.147\cdots$, since the numerator involves an
-% integer slightly smaller than $10^{9} A$.
-%
-% Let us bound $B$:
-% \begin{align*}
-% 10^{5} B
-% &=
-% A_{1}A_{2}0 + 10 \cdot 0.A_{3}A_{4}
-% - 10 \cdot Z_{1}.Z_{2}Z_{3}Z_{4} \cdot Q_{A}
-% \\
-% &<
-% A_{1}A_{2}0
-% \cdot \left( 1 - 10 \cdot \frac{Z_{1}.Z_{2}Z_{3}Z_{4}}{y} \right)
-% + \frac{3}{2} \cdot 10 \cdot Z_{1}.Z_{2}Z_{3}Z_{4} + 10
-% \\
-% &\leq
-% \frac{A_{1}A_{2}0 \cdot (y - 10 \cdot Z_{1}.Z_{2}Z_{3}Z_{4})}{y}
-% + \frac{3}{2} y + 10
-% \\
-% &\leq
-% \frac{A_{1}A_{2}0\cdot 1}{y} + \frac{3}{2} y + 10
-% \leq
-% \frac{10^{9} A}{y} + 1.6\cdot y.
-% \end{align*}
-% At the last step, we hide $10$ into the second term for later
-% convenience. The same reasoning yields
-% \begin{align*}
-% 10^{5} B &< 10^{9} A/y + 1.6 y, \\
-% 10^{5} C &< 10^{9} B/y + 1.6 y, \\
-% 10^{5} D &< 10^{9} C/y + 1.6 y, \\
-% 10^{5} E &< 10^{9} D/y + 1.6 y. \\
-% \end{align*}
-% The goal is now to prove that none of $B$, $C$, $D$, and $E$ can go
-% beyond $(2^{31}-1) / 10^{9} = 2.147\cdots$.
-%
-% Combining the various inequalities together with $A<1$, we get
-% \begin{align*}
-% 10^{5} B &< 10^{9}/y + 1.6 y, \\
-% 10^{5} C &< 10^{13}/y^{2} + 1.6 (y + 10^{4}), \\
-% 10^{5} D &< 10^{17}/y^{3} + 1.6 (y + 10^{4} + 10^{8}/y), \\
-% 10^{5} E &< 10^{21}/y^{4} + 1.6 (y + 10^{4} + 10^{8}/y + 10^{12}/y^{2}). \\
-% \end{align*}
-% All of those bounds are convex functions of $y$ (since every power of
-% $y$ involved is convex, and the coefficients are positive), and thus
-% maximal at one of the end-points of the allowed range $10^{4} < y \leq
-% 10^{5}$. Thus,
-% \begin{align*}
-% 10^{5} B &< \mathrm{max} ( 1.16\cdot 10^{5}, 1.7 \cdot 10^{5}), \\
-% 10^{5} C &< \mathrm{max} ( 1.32\cdot 10^{5}, 1.77 \cdot 10^{5}), \\
-% 10^{5} D &< \mathrm{max} ( 1.48\cdot 10^{5}, 1.777 \cdot 10^{5}), \\
-% 10^{5} E &< \mathrm{max} ( 1.64\cdot 10^{5}, 1.7777 \cdot 10^{5}). \\
-% \end{align*}
-% All of those bounds are less than $2.147\cdot 10^{5}$, and we are thus
-% within \TeX{}'s bounds in all cases!
-%
-% We later need to have a bound on the $Q_{i}$. Their definitions
-% imply that $Q_{A} < 10^{9} A/y - 1/2 < 10^{5} A$ and similarly for the
-% other $Q_{i}$. Thus, all of them are less than $177770$.
-%
-% The last step is to ensure correct rounding. We have
-% \begin{equation*}
-% A/Z = \sum_{i=1}^{4} \left(10^{-4i} Q_{i}\right) + 10^{-16} E/Z
-% \end{equation*}
-% exactly. Furthermore, we know that the result is in $[0.1,10)$,
-% hence will be rounded to a multiple of $10^{-16}$ or of $10^{-15}$, so
-% we only need to know the integer part of $E/Z$, and a
-% \enquote{rounding} digit encoding the rest. Equivalently, we need to
-% find the integer part of $2E/Z$, and determine whether it was an
-% exact integer or not (this serves to detect ties). Since
-% \begin{equation*}
-% \frac{2E}{Z} = 2\frac{10^{5} E}{10^{5} Z}
-% \leq 2\frac{10^{5} E}{10^{4}} < 36,
-% \end{equation*}
-% this integer part is between $0$ and $35$ inclusive. We let \eTeX{}
-% round
-% \begin{equation*}
-% P = \cs{int_eval:n} \left\{
-% \frac{2\cdot E_{1}E_{2}}{Z_{1}Z_{2}} \right\},
-% \end{equation*}
-% which differs from $2E/Z$ by at most
-% \begin{equation*}
-% \frac{1}{2}
-% + 2 \left\lvert \frac{E}{Z} - \frac{E}{10^{-8} Z_{1}Z_{2}}\right\rvert
-% + 2 \left\lvert \frac{10^{8} E - E_{1}E_{2}}{Z_{1}Z_{2}}\right\rvert
-% < 1,
-% \end{equation*}
-% ($1/2$ comes from \eTeX{}'s rounding) because each absolute value is
-% less than $10^{-7}$. Thus $P$ is either the correct integer part, or
-% is off by $1$; furthermore, if $2 E / Z$ is an integer, $P = 2 E / Z$.
-% We will check the sign of $2 E - P Z$. If it is negative, then $E / Z
-% \in \big((P - 1) / 2, P / 2\big)$. If it is zero, then $E / Z = P /
-% 2$. If it is positive, then $E / Z \in \big(P / 2, (P - 1) / 2\big)$.
-% In each case, we know how to round to an integer, depending on the
-% parity of $P$, and the rounding mode.
-%
-% \subsubsection{Implementing the significand division}
-%
-% \begin{macro}[rEXP]{\@@_div_significand_i_o:wnnw}
-% \begin{quote}
-% \cs{@@_div_significand_i_o:wnnw} \meta{y} |;|
-% \Arg{A_1} \Arg{A_2} \Arg{A_3} \Arg{A_4}
-% \Arg{Z_1} \Arg{Z_2} \Arg{Z_3} \Arg{Z_4} |;| \meta{sign}
-% \end{quote}
-% Compute $10^{6} + Q_{A}$ (a $7$~digit number thanks to the shift),
-% unbrace \meta{A_1} and \meta{A_2}, and prepare the
-% \meta{continuation} arguments for $4$ consecutive calls to
-% \cs{@@_div_significand_calc:wwnnnnnnn}. Each of these calls needs
-% \meta{y} (|#1|), and it turns out that we need post-expansion there,
-% hence the \cs{int_value:w}. Here, |#4| is six brace groups, which
-% give the six first |n|-type arguments of the \texttt{calc} function.
-% \begin{macrocode}
-\cs_new:Npn \@@_div_significand_i_o:wnnw #1 ; #2#3 #4 ;
- {
- \exp_after:wN \@@_div_significand_test_o:w
- \int_value:w \@@_int_eval:w
- \exp_after:wN \@@_div_significand_calc:wwnnnnnnn
- \int_value:w \@@_int_eval:w 999999 + #2 #3 0 / #1 ;
- #2 #3 ;
- #4
- { \exp_after:wN \@@_div_significand_ii:wwn \int_value:w #1 }
- { \exp_after:wN \@@_div_significand_ii:wwn \int_value:w #1 }
- { \exp_after:wN \@@_div_significand_ii:wwn \int_value:w #1 }
- { \exp_after:wN \@@_div_significand_iii:wwnnnnn \int_value:w #1 }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_div_significand_calc:wwnnnnnnn}
-% \begin{macro}[rEXP]
-% {
-% \@@_div_significand_calc_i:wwnnnnnnn,
-% \@@_div_significand_calc_ii:wwnnnnnnn,
-% }
-% \begin{quote}
-% \cs{@@_div_significand_calc:wwnnnnnnn} \meta{$10^{6}+{}$Q_{A}} |;|
-% \meta{A_1} \meta{A_2} |;| \Arg{A_3} \Arg{A_4}
-% \Arg{Z_1} \Arg{Z_2} \Arg{Z_3} \Arg{Z_4}
-% \Arg{continuation}
-% \end{quote}
-% expands to
-% \begin{quote}
-% \meta{$10^{6}+{}$Q_{A}} \meta{continuation} |;|
-% \meta{B_1} \meta{B_2} |;| \Arg{B_3} \Arg{B_4}
-% \Arg{Z_1} \Arg{Z_2} \Arg{Z_3} \Arg{Z_4}
-% \end{quote}
-% where $B = 10^{4} A - Q_{A} \cdot Z$. This function is also used to
-% compute $C$, $D$, $E$ (with the input shifted accordingly), and is
-% used in \pkg{l3fp-expo}.
-%
-% We know that $0<Q_{A}<1.8\cdot 10^{5}$, so the product of $Q_{A}$
-% with each $Z_{i}$ is within \TeX{}'s bounds. However, it is a
-% little bit too large for our purposes: we would not be able to use
-% the usual trick of adding a large power of $10$ to ensure that the
-% number of digits is fixed.
-%
-% The bound on $Q_{A}$, implies that $10^{6}+Q_{A}$ starts with the
-% digit $1$, followed by $0$ or $1$. We test, and call different
-% auxiliaries for the two cases. An earlier implementation did the
-% tests within the computation, but since we added a
-% \meta{continuation}, this is not possible because the macro has $9$
-% parameters.
-%
-% The result we want is then (the overall power of $10$ is arbitrary):
-% \begin{align*}
-% &10^{-4} ( \#2 - \#1 \cdot \#5 - 10 \cdot \meta{i} \cdot \#5\#6 )
-% + 10^{-8} ( \#3 - \#1 \cdot \#6 - 10 \cdot \meta{i} \cdot \#7 ) \\
-% &+ 10^{-12}( \#4 - \#1 \cdot \#7 - 10 \cdot \meta{i} \cdot \#8 )
-% + 10^{-16}( - \#1 \cdot \#8 ),
-% \end{align*}
-% where \meta{i} stands for the $10^{5}$ digit of $Q_{A}$, which is
-% $0$ or~$1$, and $\#1$, $\#2$, \emph{etc.\@} are the parameters of
-% either auxiliary. The factors of $10$ come from the fact that
-% $Q_{A} = 10\cdot 10^{4} \cdot \meta{i} + \#1$. As usual, to combine
-% all the terms, we need to choose some shifts which must ensure that
-% the number of digits of the second, third, and fourth terms are each
-% fixed. Here, the positive contributions are at most $10^{8}$ and
-% the negative contributions can go up to $10^{9}$. Indeed, for the
-% auxiliary with $\meta{i}=1$, |#1| is at most $80000$, leading to
-% contributions of at worse $-8\cdot 10^{8}4$, while the other
-% negative term is very small $<10^{6}$ (except in the first
-% expression, where we don't care about the number of digits); for the
-% auxiliary with $\meta{i}=0$, |#1| can go up to $99999$, but there is
-% no other negative term. Hence, a good choice is $2\cdot 10^{9}$,
-% which produces totals in the range $[10^{9}, 2.1\cdot 10^{9}]$. We
-% are flirting with \TeX{}'s limits once more.
-% \begin{macrocode}
-\cs_new:Npn \@@_div_significand_calc:wwnnnnnnn 1#1
- {
- \if_meaning:w 1 #1
- \exp_after:wN \@@_div_significand_calc_i:wwnnnnnnn
- \else:
- \exp_after:wN \@@_div_significand_calc_ii:wwnnnnnnn
- \fi:
- }
-\cs_new:Npn \@@_div_significand_calc_i:wwnnnnnnn
- #1; #2;#3#4 #5#6#7#8 #9
- {
- 1 1 #1
- #9 \exp_after:wN ;
- \int_value:w \@@_int_eval:w \c_@@_Bigg_leading_shift_int
- + #2 - #1 * #5 - #5#60
- \exp_after:wN \@@_pack_Bigg:NNNNNNw
- \int_value:w \@@_int_eval:w \c_@@_Bigg_middle_shift_int
- + #3 - #1 * #6 - #70
- \exp_after:wN \@@_pack_Bigg:NNNNNNw
- \int_value:w \@@_int_eval:w \c_@@_Bigg_middle_shift_int
- + #4 - #1 * #7 - #80
- \exp_after:wN \@@_pack_Bigg:NNNNNNw
- \int_value:w \@@_int_eval:w \c_@@_Bigg_trailing_shift_int
- - #1 * #8 ;
- {#5}{#6}{#7}{#8}
- }
-\cs_new:Npn \@@_div_significand_calc_ii:wwnnnnnnn
- #1; #2;#3#4 #5#6#7#8 #9
- {
- 1 0 #1
- #9 \exp_after:wN ;
- \int_value:w \@@_int_eval:w \c_@@_Bigg_leading_shift_int
- + #2 - #1 * #5
- \exp_after:wN \@@_pack_Bigg:NNNNNNw
- \int_value:w \@@_int_eval:w \c_@@_Bigg_middle_shift_int
- + #3 - #1 * #6
- \exp_after:wN \@@_pack_Bigg:NNNNNNw
- \int_value:w \@@_int_eval:w \c_@@_Bigg_middle_shift_int
- + #4 - #1 * #7
- \exp_after:wN \@@_pack_Bigg:NNNNNNw
- \int_value:w \@@_int_eval:w \c_@@_Bigg_trailing_shift_int
- - #1 * #8 ;
- {#5}{#6}{#7}{#8}
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_div_significand_ii:wwn}
-% \begin{quote}
-% \cs{@@_div_significand_ii:wwn} \meta{y} |;|
-% \meta{B_1} |;| \Arg{B_2} \Arg{B_3} \Arg{B_4}
-% \Arg{Z_1} \Arg{Z_2} \Arg{Z_3} \Arg{Z_4}
-% \meta{continuations} \meta{sign}
-% \end{quote}
-% Compute $Q_{B}$ by evaluating $\meta{B_1}\meta{B_2}0 / y - 1$. The
-% result is output to the left, in an \cs{@@_int_eval:w} which we
-% start now. Once that is evaluated (and the other $Q_{i}$ also,
-% since later expansions are triggered by this one), a packing
-% auxiliary takes care of placing the digits of $Q_{B}$ in an
-% appropriate way for the final addition to obtain $Q$. This
-% auxiliary is also used to compute $Q_{C}$ and $Q_{D}$ with the
-% inputs $C$ and $D$ instead of $B$.
-% \begin{macrocode}
-\cs_new:Npn \@@_div_significand_ii:wwn #1; #2;#3
- {
- \exp_after:wN \@@_div_significand_pack:NNN
- \int_value:w \@@_int_eval:w
- \exp_after:wN \@@_div_significand_calc:wwnnnnnnn
- \int_value:w \@@_int_eval:w 999999 + #2 #3 0 / #1 ; #2 #3 ;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_div_significand_iii:wwnnnnn}
-% \begin{quote}
-% \cs{@@_div_significand_iii:wwnnnnn} \meta{y} |;|
-% \meta{E_1} |;| \Arg{E_2} \Arg{E_3} \Arg{E_4}
-% \Arg{Z_1} \Arg{Z_2} \Arg{Z_3} \Arg{Z_4} \meta{sign}
-% \end{quote}
-% We compute $P \simeq 2E/Z$ by rounding $2 E_{1} E_{2}/Z_{1}Z_{2}$.
-% Note the first $0$, which multiplies $Q_{D}$ by $10$: we later
-% add (roughly) $5\cdot P$, which amounts to adding $P/2 \simeq E/Z$
-% to $Q_{D}$, the appropriate correction from a hypothetical $Q_{E}$.
-% \begin{macrocode}
-\cs_new:Npn \@@_div_significand_iii:wwnnnnn #1; #2;#3#4#5 #6#7
- {
- 0
- \exp_after:wN \@@_div_significand_iv:wwnnnnnnn
- \int_value:w \@@_int_eval:w ( 2 * #2 #3) / #6 #7 ; % <- P
- #2 ; {#3} {#4} {#5}
- {#6} {#7}
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]
-% {
-% \@@_div_significand_iv:wwnnnnnnn,
-% \@@_div_significand_v:NNw,
-% \@@_div_significand_vi:Nw
-% }
-% \begin{quote}
-% \cs{@@_div_significand_iv:wwnnnnnnn} \meta{P} |;|
-% \meta{E_1} |;| \Arg{E_2} \Arg{E_3} \Arg{E_4}
-% \Arg{Z_1} \Arg{Z_2} \Arg{Z_3} \Arg{Z_4} \meta{sign}
-% \end{quote}
-% This adds to the current expression ($10^{7} + 10\cdot Q_{D}$) a
-% contribution of $5 \cdot P + \operatorname{sign}(T)$ with $T = 2 E -
-% P Z$. This amounts to adding $P / 2$ to $Q_{D}$, with an extra
-% \meta{rounding} digit. This \meta{rounding} digit is $0$ or $5$ if
-% $T$ does not contribute, \emph{i.e.,} if $0 = T = 2 E - P Z$, in
-% other words if $10^{16} A / Z$ is an integer or half-integer.
-% Otherwise it is in the appropriate range, $[1,4]$ or $[6,9]$. This
-% is precise enough for rounding purposes (in any mode).
-%
-% It seems an overkill to compute $T$ exactly as I do here, but I see
-% no faster way right now.
-%
-% Once more, we need to be careful and show that the calculation
-% $\#1\cdot\#6\#7$ below does not cause an overflow: naively, $P$ can
-% be up to $35$, and $\#6\#7$ up to $10^{8}$, but both cannot happen
-% simultaneously. To show that things are fine, we split in two
-% (non-disjoint) cases.
-% \begin{itemize}
-% \item For $P < 10$, the product obeys $P\cdot\#6\#7 < 10^{8} \cdot P
-% < 10^{9} $.
-% \item For large $P\geq 3$, the rounding error on $P$, which is at
-% most $1$, is less than a factor of $2$, hence $P\leq 4E/Z$. Also,
-% $\#6\#7 \leq 10^{8} \cdot Z$, hence $P\cdot \#6\#7 \leq 4E\cdot
-% 10^{8} < 10^{9}$.
-% \end{itemize}
-% Both inequalities could be made tighter if needed.
-%
-% Note however that $P\cdot \#8\#9$ may overflow, since the two
-% factors are now independent, and the result may reach $3.5\cdot
-% 10^{9}$. Thus we compute the two lower levels separately. The rest
-% is standard, except that we use |+| as a separator (ending integer
-% expressions explicitly). $T$ is negative if the first character is
-% |-|, it is positive if the first character is neither |0| nor |-|.
-% It is also positive if the first character is |0| and second
-% argument of \cs{@@_div_significand_vi:Nw}, a sum of several terms, is
-% also zero. Otherwise, there was an exact agreement: $T = 0$.
-% \begin{macrocode}
-\cs_new:Npn \@@_div_significand_iv:wwnnnnnnn #1; #2;#3#4#5 #6#7#8#9
- {
- + 5 * #1
- \exp_after:wN \@@_div_significand_vi:Nw
- \int_value:w \@@_int_eval:w -50 + 2*#2#3 - #1*#6#7 +
- \exp_after:wN \@@_div_significand_v:NN
- \int_value:w \@@_int_eval:w 499950 + 2*#4 - #1*#8 +
- \exp_after:wN \@@_div_significand_v:NN
- \int_value:w \@@_int_eval:w 500000 + 2*#5 - #1*#9 ;
- }
-\cs_new:Npn \@@_div_significand_v:NN #1#2 { #1#2 \@@_int_eval_end: + }
-\cs_new:Npn \@@_div_significand_vi:Nw #1#2;
- {
- \if_meaning:w 0 #1
- \if_int_compare:w \@@_int_eval:w #2 > 0 + 1 \fi:
- \else:
- \if_meaning:w - #1 - \else: + \fi: 1
- \fi:
- ;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_div_significand_pack:NNN}
-% At this stage, we are in the following situation: \TeX{} is in the
-% process of expanding several integer expressions, thus functions at
-% the bottom expand before those above.
-% \begin{quote}
-% \cs{@@_div_significand_test_o:w} $10^{6} + Q_{A}$
-% \cs{@@_div_significand_pack:NNN} $10^{6} + Q_{B}$
-% \cs{@@_div_significand_pack:NNN} $10^{6} + Q_{C}$
-% \cs{@@_div_significand_pack:NNN}
-% $10^{7} + 10\cdot Q_{D} + 5 \cdot P + \varepsilon$ |;| \meta{sign}
-% \end{quote}
-% Here, $\varepsilon = \operatorname{sign}(T)$ is $0$ in case $2E=PZ$,
-% $1$ in case $2E>PZ$, which means that $P$ was the correct value, but
-% not with an exact quotient, and $-1$ if $2E<PZ$, \emph{i.e.}, $P$
-% was an overestimate. The packing function we define now does
-% nothing special: it removes the $10^{6}$ and carries two digits (for
-% the $10^{5}$'s and the $10^{4}$'s).
-% \begin{macrocode}
-\cs_new:Npn \@@_div_significand_pack:NNN 1 #1 #2 { + #1 #2 ; }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_div_significand_test_o:w}
-% \begin{quote}
-% \cs{@@_div_significand_test_o:w} |1| |0| \meta{5d} |;|
-% ~~\meta{4d} |;| \meta{4d} |;| \meta{5d} |;| \meta{sign}
-% \end{quote}
-% The reason we know that the first two digits are |1| and |0| is that
-% the final result is known to be between $0.1$ (inclusive) and $10$,
-% hence $\widetilde{Q_{A}}$ (the tilde denoting the contribution from
-% the other $Q_{i}$) is at most $99999$, and $10^{6}+\widetilde{Q_{A}}
-% = 10\cdots$.
-%
-% It is now time to round. This depends on how many digits the final
-% result will have.
-% \begin{macrocode}
-\cs_new:Npn \@@_div_significand_test_o:w 10 #1
- {
- \if_meaning:w 0 #1
- \exp_after:wN \@@_div_significand_small_o:wwwNNNNwN
- \else:
- \exp_after:wN \@@_div_significand_large_o:wwwNNNNwN
- \fi:
- #1
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_div_significand_small_o:wwwNNNNwN}
-% \begin{quote}
-% \cs{@@_div_significand_small_o:wwwNNNNwN} |0| \meta{4d} |;|
-% ~~\meta{4d} |;| \meta{4d} |;| \meta{5d} |;| \meta{final sign}
-% \end{quote}
-% Standard use of the functions \cs{@@_basics_pack_low:NNNNNw} and
-% \cs{@@_basics_pack_high:NNNNNw}. We finally get to use the
-% \meta{final sign} which has been sitting there for a while.
-% \begin{macrocode}
-\cs_new:Npn \@@_div_significand_small_o:wwwNNNNwN
- 0 #1; #2; #3; #4#5#6#7#8; #9
- {
- \exp_after:wN \@@_basics_pack_high:NNNNNw
- \int_value:w \@@_int_eval:w 1 #1#2
- \exp_after:wN \@@_basics_pack_low:NNNNNw
- \int_value:w \@@_int_eval:w 1 #3#4#5#6#7
- + \@@_round:NNN #9 #7 #8
- \exp_after:wN ;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_div_significand_large_o:wwwNNNNwN}
-% \begin{quote}
-% \cs{@@_div_significand_large_o:wwwNNNNwN} \meta{5d} |;|
-% ~~\meta{4d} |;| \meta{4d} |;| \meta{5d} |;| \meta{sign}
-% \end{quote}
-% We know that the final result cannot reach $10$, hence |1#1#2|,
-% together with contributions from the level below, cannot reach
-% $2\cdot 10^{9}$. For rounding, we build the \meta{rounding digit}
-% from the last two of our $18$ digits.
-% \begin{macrocode}
-\cs_new:Npn \@@_div_significand_large_o:wwwNNNNwN
- #1; #2; #3; #4#5#6#7#8; #9
- {
- + 1
- \exp_after:wN \@@_basics_pack_weird_high:NNNNNNNNw
- \int_value:w \@@_int_eval:w 1 #1 #2
- \exp_after:wN \@@_basics_pack_weird_low:NNNNw
- \int_value:w \@@_int_eval:w 1 #3 #4 #5 #6 +
- \exp_after:wN \@@_round:NNN
- \exp_after:wN #9
- \exp_after:wN #6
- \int_value:w \@@_round_digit:Nw #7 #8 ;
- \exp_after:wN ;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Square root}
-%
-% \begin{macro}[EXP]{\@@_sqrt_o:w}
-% Zeros are unchanged: $\sqrt{-0} = -0$ and $\sqrt{+0} = +0$.
-% Negative numbers (other than $-0$) have no real square root.
-% Positive infinity, and \texttt{nan}, are unchanged. Finally, for
-% normal positive numbers, there is some work to do.
-% \begin{macrocode}
-\cs_new:Npn \@@_sqrt_o:w #1 \s_@@ \@@_chk:w #2#3#4; @
- {
- \if_meaning:w 0 #2 \@@_case_return_same_o:w \fi:
- \if_meaning:w 2 #3
- \@@_case_use:nw { \@@_invalid_operation_o:nw { sqrt } }
- \fi:
- \if_meaning:w 1 #2 \else: \@@_case_return_same_o:w \fi:
- \@@_sqrt_npos_o:w
- \s_@@ \@@_chk:w #2 #3 #4;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_sqrt_npos_o:w}
-% \begin{macro}[rEXP]
-% {\@@_sqrt_npos_auxi_o:wwnnN, \@@_sqrt_npos_auxii_o:wNNNNNNNN}
-% Prepare \cs{@@_sanitize:Nw} to receive the final sign~|0| (the
-% result is always positive) and the exponent, equal to half of the
-% exponent~|#1| of the argument. If the exponent~|#1| is even, find a
-% first approximation of the square root of the significand $10^{8}
-% a_1 + a_2 = 10^{8} |#2#3| + |#4#5|$ through Newton's method,
-% starting at $x = 57234133 \simeq 10^{7.75}$. Otherwise, first shift
-% the significand of the argument by one digit, getting
-% $a_1'\in[10^{6}, 10^{7})$ instead of $[10^{7}, 10^{8})$, then use
-% Newton's method starting at $17782794 \simeq 10^{7.25}$.
-% \begin{macrocode}
-\cs_new:Npn \@@_sqrt_npos_o:w \s_@@ \@@_chk:w 1 0 #1#2#3#4#5;
- {
- \exp_after:wN \@@_sanitize:Nw
- \exp_after:wN 0
- \int_value:w \@@_int_eval:w
- \if_int_odd:w #1 \exp_stop_f:
- \exp_after:wN \@@_sqrt_npos_auxi_o:wwnnN
- \fi:
- #1 / 2
- \@@_sqrt_Newton_o:wwn 56234133; 0; {#2#3} {#4#5} 0
- }
-\cs_new:Npn \@@_sqrt_npos_auxi_o:wwnnN #1 / 2 #2; 0; #3#4#5
- {
- ( #1 + 1 ) / 2
- \@@_pack_eight:wNNNNNNNN
- \@@_sqrt_npos_auxii_o:wNNNNNNNN
- ;
- 0 #3 #4
- }
-\cs_new:Npn \@@_sqrt_npos_auxii_o:wNNNNNNNN #1; #2#3#4#5#6#7#8#9
- { \@@_sqrt_Newton_o:wwn 17782794; 0; {#1} {#2#3#4#5#6#7#8#9} }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_sqrt_Newton_o:wwn}
-% Newton's method maps $x\mapsto\bigl[(x + [10^{8} a_1 / x])/2\bigr]$
-% in each iteration, where $[b/c]$ denotes \eTeX{}'s division. This
-% division rounds the real number $b/c$ to the closest integer,
-% rounding ties away from zero, hence when $c$~is even,
-% $b/c - 1/2 + 1/c \leq [b/c] \leq b/c + 1/2$
-% and when $c$~is odd,
-% $b/c - 1/2 + 1/(2c) \leq [b/c] \leq b/c + 1/2 - 1/(2c)$.
-% For all~$c$, $b/c - 1/2 + 1/(2c) \leq [b/c] \leq b/c + 1/2$.
-%
-% Let us prove that the method converges when implemented with \eTeX{}
-% integer division, for any $10^{6} \leq a_1 < 10^{8}$ and starting
-% value $10^{6} \leq x < 10^{8}$. Using the inequalities above and
-% the arithmetic--geometric inequality $(x+t)/2 \geq \sqrt{xt}$ for $t
-% = 10^{8} a_1 / x$, we find
-% \[
-% x'
-% = \left[\frac{x + [10^{8} a_1 / x]}{2}\right]
-% \geq \frac{x + 10^{8} a_1 / x - 1/2 + 1/(2x)}{2}
-% \geq \sqrt{10^{8} a_1} - \frac{1}{4} + \frac{1}{4x} \,.
-% \]
-% After any step of iteration, we thus have $\delta = x - \sqrt{10^{8}
-% a_1} \geq -0.25 + 0.25 \cdot 10^{-8}$. The new difference
-% $\delta' = x' - \sqrt{10^{8} a_1}$ after one step is bounded above
-% as
-% \[
-% x' - \sqrt{10^{8} a_1}
-% \leq \frac{x + 10^{8} a_1 / x + 1/2}{2} + \frac{1}{2}
-% - \sqrt{10^{8} a_1}
-% \leq \frac{\delta}{2} \frac{\delta}{\sqrt{10^{8} a_1} + \delta}
-% + \frac{3}{4} \,.
-% \]
-% For $\delta > 3/2$, this last expression is
-% $\leq\delta/2+3/4<\delta$, hence $\delta$~decreases at each step:
-% since all~$x$ are integers, $\delta$~must reach a value
-% $-1/4<\delta\leq 3/2$. In this range of values, we get $\delta'
-% \leq \frac{3}{4} \frac{3}{2\sqrt{10^{8} a_1}} + \frac{3}{4} \leq
-% 0.75 + 1.125 \cdot 10^{-7}$. We deduce that the difference $\delta
-% = x - \sqrt{10^{8} a_1}$ eventually reaches a value in the interval
-% $[-0.25 + 0.25\cdot 10^{-8}, 0.75 + 11.25 \cdot 10^{-8}]$, whose
-% width is $1 + 11 \cdot 10^{-8}$. The corresponding interval for~$x$
-% may contain two integers, hence $x$~might oscillate between those
-% two values.
-%
-% However, the fact that $x\mapsto x-1$ and $x-1 \mapsto x$ puts
-% stronger constraints, which are not compatible: the first implies
-% \[
-% x + [10^{8} a_1 / x] \leq 2x - 2
-% \]
-% hence $10^{8} a_1 / x \leq x - 3/2$, while the second implies
-% \[
-% x - 1 + [10^{8} a_1 / (x - 1)] \geq 2x - 1
-% \]
-% hence $10^{8} a_1 / (x - 1) \geq x - 1/2$. Combining the two
-% inequalities yields $x^2 - 3x/2 \geq 10^{8} a_1 \geq x - 3x/2 +
-% 1/2$, which cannot hold. Therefore, the iteration always converges
-% to a single integer~$x$. To stop the iteration when two consecutive
-% results are equal, the function \cs{@@_sqrt_Newton_o:wwn} receives
-% the newly computed result as~|#1|, the previous result as~|#2|, and
-% $a_1$ as~|#3|. Note that \eTeX{} combines the computation of a
-% multiplication and a following division, thus avoiding overflow in
-% |#3 * 100000000 / #1|. In any case, the result is within $[10^{7},
-% 10^{8}]$.
-% \begin{macrocode}
-\cs_new:Npn \@@_sqrt_Newton_o:wwn #1; #2; #3
- {
- \if_int_compare:w #1 = #2 \exp_stop_f:
- \exp_after:wN \@@_sqrt_auxi_o:NNNNwnnN
- \int_value:w \@@_int_eval:w 9999 9999 +
- \exp_after:wN \@@_use_none_until_s:w
- \fi:
- \exp_after:wN \@@_sqrt_Newton_o:wwn
- \int_value:w \@@_int_eval:w (#1 + #3 * 1 0000 0000 / #1) / 2 ;
- #1; {#3}
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_sqrt_auxi_o:NNNNwnnN}
-% This function is followed by $10^{8}+x-1$, which has~$9$ digits
-% starting with~$1$, then |;| \Arg{a_1} \Arg{a_2} \meta{a'}. Here, $x
-% \simeq \sqrt{10^{8} a_1}$ and we want to estimate the square root of
-% $a = 10^{-8} a_1 + 10^{-16} a_2 + 10^{-17} a'$. We set up an
-% initial underestimate
-% \[
-% y = (x - 1) 10^{-8} + 0.2499998875 \cdot 10^{-8} \lesssim \sqrt{a}\,.
-% \]
-% From the inequalities shown earlier, we know that $y \leq
-% \sqrt{10^{-8} a_1} \leq \sqrt{a}$ and that $\sqrt{10^{-8} a_1} \leq
-% y + 10^{-8} + 11\cdot 10^{-16}$ hence (using $0.1\leq y\leq
-% \sqrt{a}\leq 1$)
-% \[
-% a - y^2 \leq 10^{-8} a_1 + 10^{-8} - y^2
-% \leq (y + 10^{-8} + 11\cdot 10^{-16})^2 - y^2 + 10^{-8}
-% < 3.2 \cdot 10^{-8} \,,
-% \]
-% and $\sqrt{a} - y = (a - y^2)/(\sqrt{a} + y) \leq 16 \cdot 10^{-8}$.
-% Next, \cs{@@_sqrt_auxii_o:NnnnnnnnN} is called several times to
-% get closer and closer underestimates of~$\sqrt{a}$. By
-% construction, the underestimates~$y$ are always increasing, $a - y^2
-% < 3.2 \cdot 10^{-8}$ for all. Also, $y<1$.
-% \begin{macrocode}
-\cs_new:Npn \@@_sqrt_auxi_o:NNNNwnnN 1 #1#2#3#4#5;
- {
- \@@_sqrt_auxii_o:NnnnnnnnN
- \@@_sqrt_auxiii_o:wnnnnnnnn
- {#1#2#3#4} {#5} {2499} {9988} {7500}
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_sqrt_auxii_o:NnnnnnnnN}
-% This receives a continuation function~|#1|, then five blocks of~$4$
-% digits for~$y$, then two $8$-digit blocks and a single digit
-% for~$a$. A common estimate of $\sqrt{a} - y = (a - y^2) / (\sqrt{a}
-% + y)$ is $(a - y^2)/(2y)$, which leads to alternating overestimates
-% and underestimates. We tweak this, to only work with underestimates
-% (no need then to worry about signs in the computation). Each step
-% finds the largest integer $j\leq 6$ such that $10^{4j}(a-y^2) <
-% 2\cdot 10^{8}$, then computes the integer (with \eTeX{}'s rounding
-% division)
-% \[
-% 10^{4j} z =
-% \Bigl[\bigl(\lfloor 10^{4j}(a-y^2)\rfloor - 257\bigr)
-% \cdot (0.5\cdot 10^{8})
-% \Bigm/ \lfloor 10^{8} y + 1\rfloor\Bigr] \,.
-% \]
-% The choice of~$j$ ensures that $10^{4j} z < 2\cdot 10^{8} \cdot
-% 0.5\cdot 10^{8} / 10^{7} = 10^{9}$, thus $10^{9} + 10^{4j} z$ has
-% exactly $10$~digits, does not overflow \TeX{}'s integer range, and
-% starts with~$1$. Incidentally, since all $a - y^2 \leq 3.2\cdot
-% 10^{-8}$, we know that $j\geq 3$.
-%
-% Let us show that $z$ is an underestimate of $\sqrt{a} - y$. On the
-% one hand, $\sqrt{a} - y \leq 16\cdot 10^{-8}$ because this holds for
-% the initial~$y$ and values of~$y$ can only increase. On the other
-% hand, the choice of~$j$ implies that $\sqrt{a} - y \leq
-% 5(\sqrt{a}+y)(\sqrt{a}-y) = 5(a - y^2) < 10^{9-4j}$. For $j=3$, the
-% first bound is better, while for larger~$j$, the second bound is
-% better. For all $j\in[3,6]$, we find $\sqrt{a}-y < 16\cdot
-% 10^{-2j}$. From this, we deduce that
-% \[
-% 10^{4j} (\sqrt{a}-y)
-% = \frac{10^{4j}\bigl(a-y^2-(\sqrt{a}-y)^2\bigr)}{2y}
-% \geq \frac{\bigl\lfloor 10^{4j}(a-y^2)\bigr\rfloor-257}
-% {2\cdot 10^{-8} \lfloor 10^{8}y+1\rfloor}
-% + \frac{1}{2}
-% \]
-% where we have replaced the bound $10^{4j}(16\cdot 10^{-2j}) = 256$
-% by~$257$ and extracted the corresponding term $1/\bigl(2\cdot
-% 10^{-8} \lfloor 10^{8}y+1\rfloor\bigr) \geq 1/2$. Given that
-% \eTeX{}'s integer division obeys $[b/c] \leq b/c + 1/2$, we deduce
-% that $10^{4j} z \leq 10^{4j} (\sqrt{a}-y)$, hence $y+z\leq\sqrt{a}$
-% is an underestimate of~$\sqrt{a}$, as claimed. One implementation
-% detail: because the computation involves |-#4*#4| |-| |2*#3*#5| |-|
-% |2*#2*#6| which may be as low as $-5\cdot 10^{8}$, we need to use
-% the \texttt{pack_big} functions, and the \texttt{big} shifts.
-% \begin{macrocode}
-\cs_new:Npn \@@_sqrt_auxii_o:NnnnnnnnN #1 #2#3#4#5#6 #7#8#9
- {
- \exp_after:wN #1
- \int_value:w \@@_int_eval:w \c_@@_big_leading_shift_int
- + #7 - #2 * #2
- \exp_after:wN \@@_pack_big:NNNNNNw
- \int_value:w \@@_int_eval:w \c_@@_big_middle_shift_int
- - 2 * #2 * #3
- \exp_after:wN \@@_pack_big:NNNNNNw
- \int_value:w \@@_int_eval:w \c_@@_big_middle_shift_int
- + #8 - #3 * #3 - 2 * #2 * #4
- \exp_after:wN \@@_pack_big:NNNNNNw
- \int_value:w \@@_int_eval:w \c_@@_big_middle_shift_int
- - 2 * #3 * #4 - 2 * #2 * #5
- \exp_after:wN \@@_pack_big:NNNNNNw
- \int_value:w \@@_int_eval:w \c_@@_big_middle_shift_int
- + #9 000 0000 - #4 * #4 - 2 * #3 * #5 - 2 * #2 * #6
- \exp_after:wN \@@_pack_big:NNNNNNw
- \int_value:w \@@_int_eval:w \c_@@_big_middle_shift_int
- - 2 * #4 * #5 - 2 * #3 * #6
- \exp_after:wN \@@_pack_big:NNNNNNw
- \int_value:w \@@_int_eval:w \c_@@_big_middle_shift_int
- - #5 * #5 - 2 * #4 * #6
- \exp_after:wN \@@_pack_big:NNNNNNw
- \int_value:w \@@_int_eval:w
- \c_@@_big_middle_shift_int
- - 2 * #5 * #6
- \exp_after:wN \@@_pack_big:NNNNNNw
- \int_value:w \@@_int_eval:w
- \c_@@_big_trailing_shift_int
- - #6 * #6 ;
- % (
- - 257 ) * 5000 0000 / (#2#3 + 1) + 10 0000 0000 ;
- {#2}{#3}{#4}{#5}{#6} {#7}{#8}#9
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]
-% {
-% \@@_sqrt_auxiii_o:wnnnnnnnn,
-% \@@_sqrt_auxiv_o:NNNNNw,
-% \@@_sqrt_auxv_o:NNNNNw,
-% \@@_sqrt_auxvi_o:NNNNNw,
-% \@@_sqrt_auxvii_o:NNNNNw
-% }
-% We receive here the difference $a-y^2=d=\sum_i d_i \cdot 10^{-4i}$,
-% as \meta{d_2} |;| \Arg{d_3} \ldots{} \Arg{d_{10}}, where each block
-% has~$4$ digits, except \meta{d_2}. This function finds the largest
-% $j\leq 6$ such that $10^{4j}(a-y^2) < 2\cdot 10^{8}$, then leaves an
-% open parenthesis and the integer
-% $\bigl\lfloor 10^{4j}(a-y^2)\bigr\rfloor$ in an integer
-% expression. The closing parenthesis is provided by the caller
-% \cs{@@_sqrt_auxii_o:NnnnnnnnN}, which completes the expression
-% \[
-% 10^{4j} z =
-% \Bigl[\bigl(\lfloor 10^{4j}(a-y^2)\rfloor - 257\bigr)
-% \cdot (0.5\cdot 10^{8})
-% \Bigm/ \lfloor 10^{8} y + 1\rfloor\Bigr]
-% \]
-% for an estimate of $10^{4j} (\sqrt{a} - y)$. If $d_2\geq 2$, $j=3$
-% and the \texttt{auxiv} auxiliary receives $10^{12} z$. If $d_2\leq
-% 1$ but $10^{4} d_2 + d_3 \geq 2$, $j=4$ and the \texttt{auxv}
-% auxiliary is called, and receives $10^{16} z$, and so on. In all
-% those cases, the \texttt{auxviii} auxiliary is set up to add~$z$
-% to~$y$, then go back to the \texttt{auxii} step with continuation
-% \texttt{auxiii} (the function we are currently describing). The
-% maximum value of $j$ is~$6$, regardless of whether $10^{12} d_2 +
-% 10^{8} d_3 + 10^{4} d_4 + d_5 \geq 1$. In this last case, we detect
-% when $10^{24} z < 10^{7}$, which essentially means $\sqrt{a} - y
-% \lesssim 10^{-17}$: once this threshold is reached, there is enough
-% information to find the correctly rounded~$\sqrt{a}$ with only one
-% more call to \cs{@@_sqrt_auxii_o:NnnnnnnnN}. Note that the
-% iteration cannot be stuck before reaching $j=6$, because for $j<6$,
-% one has $2\cdot 10^{8}\leq 10^{4(j+1)}(a-y^2)$, hence
-% \[
-% 10^{4j} z
-% \geq \frac{(20000-257)(0.5\cdot 10^{8})}{\lfloor 10^{8} y + 1\rfloor}
-% \geq (20000-257)\cdot 0.5 > 0 \,.
-% \]
-% \begin{macrocode}
-\cs_new:Npn \@@_sqrt_auxiii_o:wnnnnnnnn
- #1; #2#3#4#5#6#7#8#9
- {
- \if_int_compare:w #1 > \c_one_int
- \exp_after:wN \@@_sqrt_auxiv_o:NNNNNw
- \int_value:w \@@_int_eval:w (#1#2 %)
- \else:
- \if_int_compare:w #1#2 > \c_one_int
- \exp_after:wN \@@_sqrt_auxv_o:NNNNNw
- \int_value:w \@@_int_eval:w (#1#2#3 %)
- \else:
- \if_int_compare:w #1#2#3 > \c_one_int
- \exp_after:wN \@@_sqrt_auxvi_o:NNNNNw
- \int_value:w \@@_int_eval:w (#1#2#3#4 %)
- \else:
- \exp_after:wN \@@_sqrt_auxvii_o:NNNNNw
- \int_value:w \@@_int_eval:w (#1#2#3#4#5 %)
- \fi:
- \fi:
- \fi:
- }
-\cs_new:Npn \@@_sqrt_auxiv_o:NNNNNw 1#1#2#3#4#5#6;
- { \@@_sqrt_auxviii_o:nnnnnnn {#1#2#3#4#5#6} {00000000} }
-\cs_new:Npn \@@_sqrt_auxv_o:NNNNNw 1#1#2#3#4#5#6;
- { \@@_sqrt_auxviii_o:nnnnnnn {000#1#2#3#4#5} {#60000} }
-\cs_new:Npn \@@_sqrt_auxvi_o:NNNNNw 1#1#2#3#4#5#6;
- { \@@_sqrt_auxviii_o:nnnnnnn {0000000#1} {#2#3#4#5#6} }
-\cs_new:Npn \@@_sqrt_auxvii_o:NNNNNw 1#1#2#3#4#5#6;
- {
- \if_int_compare:w #1#2 = \c_zero_int
- \exp_after:wN \@@_sqrt_auxx_o:Nnnnnnnn
- \fi:
- \@@_sqrt_auxviii_o:nnnnnnn {00000000} {000#1#2#3#4#5}
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]
-% {\@@_sqrt_auxviii_o:nnnnnnn, \@@_sqrt_auxix_o:wnwnw}
-% Simply add the two $8$-digit blocks of~$z$, aligned to the last four
-% of the five $4$-digit blocks of~$y$, then call the \texttt{auxii}
-% auxiliary to evaluate $y'^{2} = (y+z)^{2}$.
-% \begin{macrocode}
-\cs_new:Npn \@@_sqrt_auxviii_o:nnnnnnn #1#2 #3#4#5#6#7
- {
- \exp_after:wN \@@_sqrt_auxix_o:wnwnw
- \int_value:w \@@_int_eval:w #3
- \exp_after:wN \@@_basics_pack_low:NNNNNw
- \int_value:w \@@_int_eval:w #1 + 1#4#5
- \exp_after:wN \@@_basics_pack_low:NNNNNw
- \int_value:w \@@_int_eval:w #2 + 1#6#7 ;
- }
-\cs_new:Npn \@@_sqrt_auxix_o:wnwnw #1; #2#3; #4#5;
- {
- \@@_sqrt_auxii_o:NnnnnnnnN
- \@@_sqrt_auxiii_o:wnnnnnnnn {#1}{#2}{#3}{#4}{#5}
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]
-% {\@@_sqrt_auxx_o:Nnnnnnnn, \@@_sqrt_auxxi_o:wwnnN}
-% At this stage, $j=6$ and $10^{24} z < 10^{7}$, hence
-% \[
-% 10^{7} + 1/2 > 10^{24} z + 1/2 \geq
-% \bigl(10^{24}(a-y^2) - 258\bigr) \cdot (0.5\cdot 10^{8})
-% \Bigm/ (10^{8} y + 1) \,,
-% \]
-% then $10^{24}(a-y^2) - 258 < 2 (10^{7} + 1/2) (y + 10^{-8})$, and
-% \[
-% 10^{24}(a-y^2)
-% < (10^{7} + 1290.5) (1 + 10^{-8}/y) (2y)
-% < (10^{7} + 1290.5) (1 + 10^{-7}) (y + \sqrt{a}) \,,
-% \]
-% which finally implies $0\leq\sqrt{a}-y < 0.2\cdot 10^{-16}$. In
-% particular, $y$~is an underestimate of~$\sqrt{a}$ and $y+0.5\cdot
-% 10^{-16}$ is a (strict) overestimate. There is at exactly one
-% multiple $m$~of $0.5\cdot 10^{-16}$ in the interval $[y, y+0.5\cdot
-% 10^{-16})$. If $m^2>a$, then the square root is inexact and is
-% obtained by rounding $m-\epsilon$ to a multiple of $10^{-16}$ (the
-% precise shift $0<\epsilon<0.5\cdot 10^{-16}$ is irrelevant for
-% rounding). If $m^2=a$ then the square root is exactly~$m$, and
-% there is no rounding. If $m^2<a$ then we round $m+\epsilon$. For
-% now, discard a few irrelevant arguments |#1|, |#2|, |#3|, and find
-% the multiple of $0.5\cdot 10^{-16}$ within $[y, y+0.5\cdot
-% 10^{-16})$; rather, only the last $4$~digits |#8| of~$y$ are
-% considered, and we do not perform any carry yet. The \texttt{auxxi}
-% auxiliary sets up \texttt{auxii} with a continuation function
-% \texttt{auxxii} instead of \texttt{auxiii} as before. To prevent
-% \texttt{auxii} from giving a negative results $a-m^2$, we compute
-% $a+10^{-16}-m^2$ instead, always positive since $m<\sqrt{a}+0.5\cdot
-% 10^{-16}$ and $a\leq 1-10^{-16}$.
-% \begin{macrocode}
-\cs_new:Npn \@@_sqrt_auxx_o:Nnnnnnnn #1#2#3 #4#5#6#7#8
- {
- \exp_after:wN \@@_sqrt_auxxi_o:wwnnN
- \int_value:w \@@_int_eval:w
- (#8 + 2499) / 5000 * 5000 ;
- {#4} {#5} {#6} {#7} ;
- }
-\cs_new:Npn \@@_sqrt_auxxi_o:wwnnN #1; #2; #3#4#5
- {
- \@@_sqrt_auxii_o:NnnnnnnnN
- \@@_sqrt_auxxii_o:nnnnnnnnw
- #2 {#1}
- {#3} { #4 + 1 } #5
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]
-% {\@@_sqrt_auxxii_o:nnnnnnnnw, \@@_sqrt_auxxiii_o:w}
-% The difference $0\leq a+10^{-16}-m^2\leq
-% 10^{-16}+(\sqrt{a}-m)(\sqrt{a}+m)\leq 2\cdot 10^{-16}$ was just
-% computed: its first $8$~digits vanish, as do the next four,~|#1|,
-% and most of the following four,~|#2|. The guess~$m$ is an
-% overestimate if $a+10^{-16}-m^2 < 10^{-16}$, that is, |#1#2|
-% vanishes. Otherwise it is an underestimate, unless
-% $a+10^{-16}-m^2=10^{-16}$ exactly. For an underestimate, call the
-% \texttt{auxxiv} function with argument~$9998$. For an exact result
-% call it with~$9999$, and for an overestimate call it with~$10000$.
-% \begin{macrocode}
-\cs_new:Npn \@@_sqrt_auxxii_o:nnnnnnnnw 0; #1#2#3#4#5#6#7#8 #9;
- {
- \if_int_compare:w #1#2 > \c_zero_int
- \if_int_compare:w #1#2 = \c_one_int
- \if_int_compare:w #3#4 = \c_zero_int
- \if_int_compare:w #5#6 = \c_zero_int
- \if_int_compare:w #7#8 = \c_zero_int
- \@@_sqrt_auxxiii_o:w
- \fi:
- \fi:
- \fi:
- \fi:
- \exp_after:wN \@@_sqrt_auxxiv_o:wnnnnnnnN
- \int_value:w 9998
- \else:
- \exp_after:wN \@@_sqrt_auxxiv_o:wnnnnnnnN
- \int_value:w 10000
- \fi:
- ;
- }
-\cs_new:Npn \@@_sqrt_auxxiii_o:w \fi: \fi: \fi: \fi: #1 \fi: ;
- {
- \fi: \fi: \fi: \fi: \fi:
- \@@_sqrt_auxxiv_o:wnnnnnnnN 9999 ;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_sqrt_auxxiv_o:wnnnnnnnN}
-% This receives $9998$, $9999$ or $10000$ as~|#1| when $m$~is an
-% underestimate, exact, or an overestimate, respectively. Then
-% comes~$m$ as five blocks of~$4$ digits, but where the last
-% block~|#6| may be $0$, $5000$, or~$10000$. In the latter case, we
-% need to add a carry, unless $m$~is an overestimate (|#1|~is then
-% $10000$). Then comes~$a$ as three arguments. Rounding is done by
-% \cs{@@_round:NNN}, whose first argument is the final sign~$0$
-% (square roots are positive). We fake its second argument. It
-% should be the last digit kept, but this is only used when ties are
-% \enquote{rounded to even}, and only when the result is exactly
-% half-way between two representable numbers rational square roots of
-% numbers with $16$~significant digits have: this situation never
-% arises for the square root, as any exact square root of a $16$~digit
-% number has at most $8$~significant digits. Finally, the last
-% argument is the next digit, possibly shifted by~$1$ when there are
-% further nonzero digits. This is achieved by \cs{@@_round_digit:Nw},
-% which receives (after removal of the $10000$'s digit) one of $0000$,
-% $0001$, $4999$, $5000$, $5001$, or~$9999$, which it converts to $0$,
-% $1$, $4$, $5$, $6$, and~$9$, respectively.
-% \begin{macrocode}
-\cs_new:Npn \@@_sqrt_auxxiv_o:wnnnnnnnN #1; #2#3#4#5#6 #7#8#9
- {
- \exp_after:wN \@@_basics_pack_high:NNNNNw
- \int_value:w \@@_int_eval:w 1 0000 0000 + #2#3
- \exp_after:wN \@@_basics_pack_low:NNNNNw
- \int_value:w \@@_int_eval:w 1 0000 0000
- + #4#5
- \if_int_compare:w #6 > #1 \exp_stop_f: + 1 \fi:
- + \exp_after:wN \@@_round:NNN
- \exp_after:wN 0
- \exp_after:wN 0
- \int_value:w
- \exp_after:wN \use_i:nn
- \exp_after:wN \@@_round_digit:Nw
- \int_value:w \@@_int_eval:w #6 + 19999 - #1 ;
- \exp_after:wN ;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{About the sign and exponent}
-%
-% \begin{macro}[EXP]{\@@_logb_o:w, \@@_logb_aux_o:w}
-% The exponent of a normal number is its \meta{exponent} minus one.
-% \begin{macrocode}
-\cs_new:Npn \@@_logb_o:w ? \s_@@ \@@_chk:w #1#2; @
- {
- \if_case:w #1 \exp_stop_f:
- \@@_case_use:nw
- { \@@_division_by_zero_o:Nnw \c_minus_inf_fp { logb } }
- \or: \exp_after:wN \@@_logb_aux_o:w
- \or: \@@_case_return_o:Nw \c_inf_fp
- \else: \@@_case_return_same_o:w
- \fi:
- \s_@@ \@@_chk:w #1 #2;
- }
-\cs_new:Npn \@@_logb_aux_o:w \s_@@ \@@_chk:w #1 #2 #3 #4 ;
- {
- \exp_after:wN \@@_parse:n \exp_after:wN
- { \int_value:w \int_eval:w #3 - 1 \exp_after:wN }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_sign_o:w}
-% \begin{macro}[EXP]{\@@_sign_aux_o:w}
-% Find the sign of the floating point: \texttt{nan}, |+0|, |-0|, |+1| or |-1|.
-% \begin{macrocode}
-\cs_new:Npn \@@_sign_o:w ? \s_@@ \@@_chk:w #1#2; @
- {
- \if_case:w #1 \exp_stop_f:
- \@@_case_return_same_o:w
- \or: \exp_after:wN \@@_sign_aux_o:w
- \or: \exp_after:wN \@@_sign_aux_o:w
- \else: \@@_case_return_same_o:w
- \fi:
- \s_@@ \@@_chk:w #1 #2;
- }
-\cs_new:Npn \@@_sign_aux_o:w \s_@@ \@@_chk:w #1 #2 #3 ;
- { \exp_after:wN \@@_set_sign_o:w \exp_after:wN #2 \c_one_fp @ }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_set_sign_o:w}
-% This function is used for the unary minus and for \texttt{abs}. It
-% leaves the sign of \texttt{nan} invariant, turns negative numbers
-% (sign~$2$) to positive numbers (sign~$0$) and positive numbers
-% (sign~$0$) to positive or negative numbers depending on~|#1|. It
-% also expands after itself in the input stream, just like
-% \cs{@@_+_o:ww}.
-% \begin{macrocode}
-\cs_new:Npn \@@_set_sign_o:w #1 \s_@@ \@@_chk:w #2#3#4; @
- {
- \exp_after:wN \@@_exp_after_o:w
- \exp_after:wN \s_@@
- \exp_after:wN \@@_chk:w
- \exp_after:wN #2
- \int_value:w
- \if_case:w #3 \exp_stop_f: #1 \or: 1 \or: 0 \fi: \exp_stop_f:
- #4;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Operations on tuples}
-%
-% \begin{macro}[EXP]{\@@_tuple_set_sign_o:w}
-% \begin{macro}[EXP]{\@@_tuple_set_sign_aux_o:Nnw, \@@_tuple_set_sign_aux_o:w}
-% Two cases: |abs(|\meta{tuple}|)| for which |#1| is $0$ (invalid for
-% tuples) and |-|\meta{tuple} for which |#1| is $2$. In that case,
-% map over all items in the tuple an auxiliary that dispatches to the
-% type-appropriate sign-flipping function.
-% \begin{macrocode}
-\cs_new:Npn \@@_tuple_set_sign_o:w #1#2 @
- {
- \if_meaning:w 2 #1
- \exp_after:wN \@@_tuple_set_sign_aux_o:Nnw
- \fi:
- \@@_invalid_operation_o:nw { abs }
- #2
- }
-\cs_new:Npn \@@_tuple_set_sign_aux_o:Nnw #1#2
- { \@@_tuple_map_o:nw \@@_tuple_set_sign_aux_o:w }
-\cs_new:Npn \@@_tuple_set_sign_aux_o:w #1#2 ;
- {
- \@@_change_func_type:NNN #1 \@@_set_sign_o:w
- \@@_parse_apply_unary_error:NNw
- 2 #1 #2 ; @
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_*_tuple_o:ww, \@@_tuple_*_o:ww, \@@_tuple_/_o:ww}
-% For \meta{number}|*|\meta{tuple} and \meta{tuple}|*|\meta{number}
-% and \meta{tuple}|/|\meta{number}, loop through the \meta{tuple} some
-% code that multiplies or divides by the appropriate \meta{number}.
-% Importantly we need to dispatch according to the type, and we make
-% sure to apply the operator in the correct order.
-% \begin{macrocode}
-\cs_new:cpn { @@_*_tuple_o:ww } #1 ;
- { \@@_tuple_map_o:nw { \@@_binary_type_o:Nww * #1 ; } }
-\cs_new:cpn { @@_tuple_*_o:ww } #1 ; #2 ;
- { \@@_tuple_map_o:nw { \@@_binary_rev_type_o:Nww * #2 ; } #1 ; }
-\cs_new:cpn { @@_tuple_/_o:ww } #1 ; #2 ;
- { \@@_tuple_map_o:nw { \@@_binary_rev_type_o:Nww / #2 ; } #1 ; }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_tuple_+_tuple_o:ww, \@@_tuple_-_tuple_o:ww}
-% Check the two tuples have the same number of items and map through
-% these a helper that dispatches appropriately depending on the types.
-% This means |(1,2)+((1,1),2)| gives |(nan,4)|.
-% \begin{macrocode}
-\cs_set_protected:Npn \@@_tmp:w #1
- {
- \cs_new:cpn { @@_tuple_#1_tuple_o:ww }
- \s_@@_tuple \@@_tuple_chk:w ##1 ;
- \s_@@_tuple \@@_tuple_chk:w ##2 ;
- {
- \int_compare:nNnTF
- { \@@_array_count:n {##1} } = { \@@_array_count:n {##2} }
- { \@@_tuple_mapthread_o:nww { \@@_binary_type_o:Nww #1 } }
- { \@@_invalid_operation_o:nww #1 }
- \s_@@_tuple \@@_tuple_chk:w {##1} ;
- \s_@@_tuple \@@_tuple_chk:w {##2} ;
- }
- }
-\@@_tmp:w +
-\@@_tmp:w -
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintChanges
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3fp-convert.dtx b/macros/latex/contrib/l3kernel/l3fp-convert.dtx
deleted file mode 100644
index 0459331326..0000000000
--- a/macros/latex/contrib/l3kernel/l3fp-convert.dtx
+++ /dev/null
@@ -1,630 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3fp-convert.dtx
-%
-% Copyright (C) 2011-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3fp-convert} module\\ Floating point conversion^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\texttt{l3fp-convert} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=fp>
-% \end{macrocode}
-%
-% \subsection{Dealing with tuples}
-%
-% \begin{macro}[EXP]
-% {\@@_tuple_convert:Nw, \@@_tuple_convert_loop:nNw, \@@_tuple_convert_end:w}
-% The first argument is for instance \cs{@@_to_tl_dispatch:w}, which
-% converts any floating point object to the appropriate
-% representation. We loop through all items, putting |,~| between all
-% of them and making sure to remove the leading |,~|.
-% \begin{macrocode}
-\cs_new:Npn \@@_tuple_convert:Nw #1 \s_@@_tuple \@@_tuple_chk:w #2 ;
- {
- \int_case:nnF { \@@_array_count:n {#2} }
- {
- { 0 } { ( ) }
- { 1 } { \@@_tuple_convert_end:w @ { #1 #2 , } }
- }
- {
- \@@_tuple_convert_loop:nNw { } #1
- #2 { ? \@@_tuple_convert_end:w } ;
- @ { \use_none:nn }
- }
- }
-\cs_new:Npn \@@_tuple_convert_loop:nNw #1#2#3#4; #5 @ #6
- {
- \use_none:n #3
- \exp_args:Nf \@@_tuple_convert_loop:nNw { #2 #3#4 ; } #2 #5
- @ { #6 , ~ #1 }
- }
-\cs_new:Npn \@@_tuple_convert_end:w #1 @ #2
- { \exp_after:wN ( \exp:w \exp_end_continue_f:w #2 ) }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Trimming trailing zeros}
-%
-% \begin{macro}[EXP]{\@@_trim_zeros:w}
-% \begin{macro}[EXP]
-% {\@@_trim_zeros_loop:w, \@@_trim_zeros_dot:w, \@@_trim_zeros_end:w}
-% If |#1| ends with a $0$, the \texttt{loop} auxiliary takes that zero
-% as an end-delimiter for its first argument, and the second argument
-% is the same \texttt{loop} auxiliary. Once the last trailing zero is
-% reached, the second argument is the \texttt{dot} auxiliary,
-% which removes a trailing dot if any. We then clean-up with the
-% \texttt{end} auxiliary, keeping only the number.
-% \begin{macrocode}
-\cs_new:Npn \@@_trim_zeros:w #1 ;
- {
- \@@_trim_zeros_loop:w #1
- ; \@@_trim_zeros_loop:w 0; \@@_trim_zeros_dot:w .; \s_@@_stop
- }
-\cs_new:Npn \@@_trim_zeros_loop:w #1 0; #2 { #2 #1 ; #2 }
-\cs_new:Npn \@@_trim_zeros_dot:w #1 .; { \@@_trim_zeros_end:w #1 ; }
-\cs_new:Npn \@@_trim_zeros_end:w #1 ; #2 \s_@@_stop { #1 }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Scientific notation}
-%
-% \begin{macro}[EXP]
-% {\fp_to_scientific:N, \fp_to_scientific:c, \fp_to_scientific:n}
-% The three public functions evaluate their argument, then pass it to
-% \cs{@@_to_scientific_dispatch:w}.
-% \begin{macrocode}
-\cs_new:Npn \fp_to_scientific:N #1
- { \exp_after:wN \@@_to_scientific_dispatch:w #1 }
-\cs_generate_variant:Nn \fp_to_scientific:N { c }
-\cs_new:Npn \fp_to_scientific:n
- {
- \exp_after:wN \@@_to_scientific_dispatch:w
- \exp:w \exp_end_continue_f:w \@@_parse:n
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {\@@_to_scientific_dispatch:w, \@@_to_scientific_recover:w, \@@_tuple_to_scientific:w}
-% We allow tuples.
-% \begin{macrocode}
-\cs_new:Npn \@@_to_scientific_dispatch:w #1
- {
- \@@_change_func_type:NNN
- #1 \@@_to_scientific:w \@@_to_scientific_recover:w
- #1
- }
-\cs_new:Npn \@@_to_scientific_recover:w #1 #2 ;
- {
- \@@_error:nffn { unknown-type } { \tl_to_str:n { #2 ; } } { } { }
- nan
- }
-\cs_new:Npn \@@_tuple_to_scientific:w
- { \@@_tuple_convert:Nw \@@_to_scientific_dispatch:w }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {
-% \@@_to_scientific:w,
-% \@@_to_scientific_normal:wnnnnn,
-% \@@_to_scientific_normal:wNw
-% }
-% Expressing an internal floating point number in scientific notation
-% is quite easy: no rounding, and the format is very well defined.
-% First cater for the sign: negative numbers ($|#2|=2$) start
-% with~|-|; we then only need to care about positive numbers and
-% \texttt{nan}. Then filter the special cases: $\pm0$~are represented
-% as~|0|; infinities are converted to a number slightly larger than
-% the largest after an \enquote{invalid_operation} exception;
-% \texttt{nan} is represented as~|0| after an
-% \enquote{invalid_operation} exception. In the normal case,
-% decrement the exponent and unbrace the $4$ brace groups, then in a
-% second step grab the first digit (previously hidden in braces) to
-% order the various parts correctly.
-% \begin{macrocode}
-\cs_new:Npn \@@_to_scientific:w \s_@@ \@@_chk:w #1#2
- {
- \if_meaning:w 2 #2 \exp_after:wN - \exp:w \exp_end_continue_f:w \fi:
- \if_case:w #1 \exp_stop_f:
- \@@_case_return:nw { 0.000000000000000e0 }
- \or: \exp_after:wN \@@_to_scientific_normal:wnnnnn
- \or:
- \@@_case_use:nw
- {
- \@@_invalid_operation:nnw
- { \fp_to_scientific:N \c_@@_overflowing_fp }
- { fp_to_scientific }
- }
- \or:
- \@@_case_use:nw
- {
- \@@_invalid_operation:nnw
- { \fp_to_scientific:N \c_zero_fp }
- { fp_to_scientific }
- }
- \fi:
- \s_@@ \@@_chk:w #1 #2
- }
-\cs_new:Npn \@@_to_scientific_normal:wnnnnn
- \s_@@ \@@_chk:w 1 #1 #2 #3#4#5#6 ;
- {
- \exp_after:wN \@@_to_scientific_normal:wNw
- \exp_after:wN e
- \int_value:w \@@_int_eval:w #2 - 1
- ; #3 #4 #5 #6 ;
- }
-\cs_new:Npn \@@_to_scientific_normal:wNw #1 ; #2#3;
- { #2.#3 #1 }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Decimal representation}
-%
-% \begin{macro}[EXP]
-% {\fp_to_decimal:N, \fp_to_decimal:c, \fp_to_decimal:n}
-% All three public variants are based on the same
-% \cs{@@_to_decimal_dispatch:w}
-% after evaluating their argument to an internal floating point.
-% \begin{macrocode}
-\cs_new:Npn \fp_to_decimal:N #1
- { \exp_after:wN \@@_to_decimal_dispatch:w #1 }
-\cs_generate_variant:Nn \fp_to_decimal:N { c }
-\cs_new:Npn \fp_to_decimal:n
- {
- \exp_after:wN \@@_to_decimal_dispatch:w
- \exp:w \exp_end_continue_f:w \@@_parse:n
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {\@@_to_decimal_dispatch:w, \@@_to_decimal_recover:w, \@@_tuple_to_decimal:w}
-% We allow tuples.
-% \begin{macrocode}
-\cs_new:Npn \@@_to_decimal_dispatch:w #1
- {
- \@@_change_func_type:NNN
- #1 \@@_to_decimal:w \@@_to_decimal_recover:w
- #1
- }
-\cs_new:Npn \@@_to_decimal_recover:w #1 #2 ;
- {
- \@@_error:nffn { unknown-type } { \tl_to_str:n { #2 ; } } { } { }
- nan
- }
-\cs_new:Npn \@@_tuple_to_decimal:w
- { \@@_tuple_convert:Nw \@@_to_decimal_dispatch:w }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {
-% \@@_to_decimal:w,
-% \@@_to_decimal_normal:wnnnnn,
-% \@@_to_decimal_large:Nnnw,
-% \@@_to_decimal_huge:wnnnn,
-% }
-% The structure is similar to \cs{@@_to_scientific:w}.
-% Insert |-| for
-% negative numbers. Zero gives $0$, $\pm\infty$ and \nan{} yield an
-% \enquote{invalid operation} exception; note that $\pm\infty$
-% produces a very large output, which we don't expand now since it
-% most likely won't be needed. Normal numbers with an exponent in the
-% range $[1,15]$ have that number of digits before the decimal
-% separator: \enquote{decimate} them, and remove leading zeros with
-% \cs{int_value:w}, then trim trailing zeros and dot. Normal
-% numbers with an exponent $16$ or larger have no decimal separator,
-% we only need to add trailing zeros. When the exponent is
-% non-positive, the result should be $0.\meta{zeros}\meta{digits}$,
-% trimmed.
-% \begin{macrocode}
-\cs_new:Npn \@@_to_decimal:w \s_@@ \@@_chk:w #1#2
- {
- \if_meaning:w 2 #2 \exp_after:wN - \exp:w \exp_end_continue_f:w \fi:
- \if_case:w #1 \exp_stop_f:
- \@@_case_return:nw { 0 }
- \or: \exp_after:wN \@@_to_decimal_normal:wnnnnn
- \or:
- \@@_case_use:nw
- {
- \@@_invalid_operation:nnw
- { \fp_to_decimal:N \c_@@_overflowing_fp }
- { fp_to_decimal }
- }
- \or:
- \@@_case_use:nw
- {
- \@@_invalid_operation:nnw
- { 0 }
- { fp_to_decimal }
- }
- \fi:
- \s_@@ \@@_chk:w #1 #2
- }
-\cs_new:Npn \@@_to_decimal_normal:wnnnnn
- \s_@@ \@@_chk:w 1 #1 #2 #3#4#5#6 ;
- {
- \int_compare:nNnTF {#2} > 0
- {
- \int_compare:nNnTF {#2} < \c_@@_prec_int
- {
- \@@_decimate:nNnnnn { \c_@@_prec_int - #2 }
- \@@_to_decimal_large:Nnnw
- }
- {
- \exp_after:wN \exp_after:wN
- \exp_after:wN \@@_to_decimal_huge:wnnnn
- \prg_replicate:nn { #2 - \c_@@_prec_int } { 0 } ;
- }
- {#3} {#4} {#5} {#6}
- }
- {
- \exp_after:wN \@@_trim_zeros:w
- \exp_after:wN 0
- \exp_after:wN .
- \exp:w \exp_end_continue_f:w \prg_replicate:nn { - #2 } { 0 }
- #3#4#5#6 ;
- }
- }
-\cs_new:Npn \@@_to_decimal_large:Nnnw #1#2#3#4;
- {
- \exp_after:wN \@@_trim_zeros:w \int_value:w
- \if_int_compare:w #2 > \c_zero_int
- #2
- \fi:
- \exp_stop_f:
- #3.#4 ;
- }
-\cs_new:Npn \@@_to_decimal_huge:wnnnn #1; #2#3#4#5 { #2#3#4#5 #1 }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Token list representation}
-%
-% \begin{macro}[EXP]{\fp_to_tl:N, \fp_to_tl:c, \fp_to_tl:n}
-% These three public functions evaluate their argument, then pass it
-% to \cs{@@_to_tl_dispatch:w}.
-% \begin{macrocode}
-\cs_new:Npn \fp_to_tl:N #1 { \exp_after:wN \@@_to_tl_dispatch:w #1 }
-\cs_generate_variant:Nn \fp_to_tl:N { c }
-\cs_new:Npn \fp_to_tl:n
- {
- \exp_after:wN \@@_to_tl_dispatch:w
- \exp:w \exp_end_continue_f:w \@@_parse:n
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_to_tl_dispatch:w, \@@_to_tl_recover:w, \@@_tuple_to_tl:w}
-% We allow tuples.
-% \begin{macrocode}
-\cs_new:Npn \@@_to_tl_dispatch:w #1
- { \@@_change_func_type:NNN #1 \@@_to_tl:w \@@_to_tl_recover:w #1 }
-\cs_new:Npn \@@_to_tl_recover:w #1 #2 ;
- {
- \@@_error:nffn { unknown-type } { \tl_to_str:n { #2 ; } } { } { }
- nan
- }
-\cs_new:Npn \@@_tuple_to_tl:w
- { \@@_tuple_convert:Nw \@@_to_tl_dispatch:w }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {
-% \@@_to_tl:w, \@@_to_tl_normal:nnnnn,
-% \@@_to_tl_scientific:wnnnnn, \@@_to_tl_scientific:wNw
-% }
-% A structure similar to \cs{@@_to_scientific_dispatch:w} and
-% \cs{@@_to_decimal_dispatch:w}, but without the \enquote{invalid operation}
-% exception. First filter special cases. We express normal numbers
-% in decimal notation if the exponent is in the range $[-2,16]$, and
-% otherwise use scientific notation.
-% \begin{macrocode}
-\cs_new:Npn \@@_to_tl:w \s_@@ \@@_chk:w #1#2
- {
- \if_meaning:w 2 #2 \exp_after:wN - \exp:w \exp_end_continue_f:w \fi:
- \if_case:w #1 \exp_stop_f:
- \@@_case_return:nw { 0 }
- \or: \exp_after:wN \@@_to_tl_normal:nnnnn
- \or: \@@_case_return:nw { inf }
- \else: \@@_case_return:nw { nan }
- \fi:
- }
-\cs_new:Npn \@@_to_tl_normal:nnnnn #1
- {
- \int_compare:nTF
- { -2 <= #1 <= \c_@@_prec_int }
- { \@@_to_decimal_normal:wnnnnn }
- { \@@_to_tl_scientific:wnnnnn }
- \s_@@ \@@_chk:w 1 0 {#1}
- }
-\cs_new:Npn \@@_to_tl_scientific:wnnnnn
- \s_@@ \@@_chk:w 1 #1 #2 #3#4#5#6 ;
- {
- \exp_after:wN \@@_to_tl_scientific:wNw
- \exp_after:wN e
- \int_value:w \@@_int_eval:w #2 - 1
- ; #3 #4 #5 #6 ;
- }
-\cs_new:Npn \@@_to_tl_scientific:wNw #1 ; #2#3;
- { \@@_trim_zeros:w #2.#3 ; #1 }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Formatting}
-%
-% This is not implemented yet, as it is not yet clear what a correct
-% interface would be, for this kind of structured conversion from a
-% floating point (or other types of variables) to a string. Ideas
-% welcome.
-%
-% \subsection{Convert to dimension or integer}
-%
-% \begin{macro}[EXP]{\fp_to_dim:N, \fp_to_dim:c, \fp_to_dim:n}
-% \begin{macro}[EXP]{\@@_to_dim_dispatch:w, \@@_to_dim_recover:w, \@@_to_dim:w}
-% All three public variants are based on the same
-% \cs{@@_to_dim_dispatch:w} after evaluating their argument to an
-% internal floating point.
-% We only allow floating point numbers, not tuples.
-% \begin{macrocode}
-\cs_new:Npn \fp_to_dim:N #1
- { \exp_after:wN \@@_to_dim_dispatch:w #1 }
-\cs_generate_variant:Nn \fp_to_dim:N { c }
-\cs_new:Npn \fp_to_dim:n
- {
- \exp_after:wN \@@_to_dim_dispatch:w
- \exp:w \exp_end_continue_f:w \@@_parse:n
- }
-\cs_new:Npn \@@_to_dim_dispatch:w #1#2 ;
- {
- \@@_change_func_type:NNN #1 \@@_to_dim:w \@@_to_dim_recover:w
- #1 #2 ;
- }
-\cs_new:Npn \@@_to_dim_recover:w #1
- { \@@_invalid_operation:nnw { 0pt } { fp_to_dim } }
-\cs_new:Npn \@@_to_dim:w #1 ; { \@@_to_decimal:w #1 ; pt }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\fp_to_int:N, \fp_to_int:c, \fp_to_int:n}
-% \begin{macro}[EXP]{\@@_to_int_dispatch:w, \@@_to_int_recover:w}
-% For the most part identical to \cs{fp_to_dim:N} but without |pt|,
-% and where \cs{@@_to_int:w} does more work.
-% To convert to an integer, first round to $0$ places (to the nearest
-% integer), then express the result as a decimal number: the
-% definition of \cs{@@_to_decimal_dispatch:w} is such that there are no
-% trailing dot nor zero.
-% \begin{macrocode}
-\cs_new:Npn \fp_to_int:N #1 { \exp_after:wN \@@_to_int_dispatch:w #1 }
-\cs_generate_variant:Nn \fp_to_int:N { c }
-\cs_new:Npn \fp_to_int:n
- {
- \exp_after:wN \@@_to_int_dispatch:w
- \exp:w \exp_end_continue_f:w \@@_parse:n
- }
-\cs_new:Npn \@@_to_int_dispatch:w #1#2 ;
- {
- \@@_change_func_type:NNN #1 \@@_to_int:w \@@_to_int_recover:w
- #1 #2 ;
- }
-\cs_new:Npn \@@_to_int_recover:w #1
- { \@@_invalid_operation:nnw { 0 } { fp_to_int } }
-\cs_new:Npn \@@_to_int:w #1;
- {
- \exp_after:wN \@@_to_decimal:w \exp:w \exp_end_continue_f:w
- \@@_round:Nwn \@@_round_to_nearest:NNN #1; { 0 }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Convert from a dimension}
-%
-% \begin{macro}[EXP]{\dim_to_fp:n}
-% \begin{macro}[EXP]
-% {
-% \@@_from_dim_test:ww,
-% \@@_from_dim:wNw,
-% \@@_from_dim:wNNnnnnnn,
-% \@@_from_dim:wnnnnwNw,
-% }
-% The dimension expression (which can in fact be a glue expression) is
-% evaluated, converted to a number (\emph{i.e.}, expressed in scaled
-% points), then multiplied by $2^{-16} = 0.0000152587890625$ to give a
-% value expressed in points. The auxiliary \cs{@@_mul_npos_o:Nww}
-% expects the desired \meta{final sign} and two floating point
-% operands (of the form \cs{s_@@} \ldots{} |;|) as arguments.
-% This set of functions is also used to convert dimension registers to
-% floating points while parsing expressions: in this context there is
-% an additional exponent, which is the first argument of
-% \cs{@@_from_dim_test:ww}, and is combined with the exponent $-4$
-% of $2^{-16}$. There is also a need to expand afterwards: this is
-% performed by \cs{@@_mul_npos_o:Nww}, and cancelled by
-% \cs{prg_do_nothing:} here.
-% \begin{macrocode}
-\cs_new:Npn \dim_to_fp:n #1
- {
- \exp_after:wN \@@_from_dim_test:ww
- \exp_after:wN 0
- \exp_after:wN ,
- \int_value:w \tex_glueexpr:D #1 ;
- }
-\cs_new:Npn \@@_from_dim_test:ww #1, #2
- {
- \if_meaning:w 0 #2
- \@@_case_return:nw { \exp_after:wN \c_zero_fp }
- \else:
- \exp_after:wN \@@_from_dim:wNw
- \int_value:w \@@_int_eval:w #1 - 4
- \if_meaning:w - #2
- \exp_after:wN , \exp_after:wN 2 \int_value:w
- \else:
- \exp_after:wN , \exp_after:wN 0 \int_value:w #2
- \fi:
- \fi:
- }
-\cs_new:Npn \@@_from_dim:wNw #1,#2#3;
- {
- \@@_pack_twice_four:wNNNNNNNN \@@_from_dim:wNNnnnnnn ;
- #3 000 0000 00 {10}987654321; #2 {#1}
- }
-\cs_new:Npn \@@_from_dim:wNNnnnnnn #1; #2#3#4#5#6#7#8#9
- { \@@_from_dim:wnnnnwNn #1 {#2#300} {0000} ; }
-\cs_new:Npn \@@_from_dim:wnnnnwNn #1; #2#3#4#5#6; #7#8
- {
- \@@_mul_npos_o:Nww #7
- \s_@@ \@@_chk:w 1 #7 {#5} #1 ;
- \s_@@ \@@_chk:w 1 0 {#8} {1525} {8789} {0625} {0000} ;
- \prg_do_nothing:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Use and eval}
-%
-% \begin{macro}[EXP]{\fp_use:N, \fp_use:c, \fp_eval:n}
-% Those public functions are simple copies of the decimal conversions.
-% \begin{macrocode}
-\cs_new_eq:NN \fp_use:N \fp_to_decimal:N
-\cs_generate_variant:Nn \fp_use:N { c }
-\cs_new_eq:NN \fp_eval:n \fp_to_decimal:n
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\fp_sign:n}
-% Trivial but useful. See the implementation of \cs{fp_add:Nn} for an
-% explanation of why to use \cs{@@_parse:n}, namely, for better error
-% reporting.
-% \begin{macrocode}
-\cs_new:Npn \fp_sign:n #1
- { \fp_to_decimal:n { sign \@@_parse:n {#1} } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\fp_abs:n}
-% Trivial but useful. See the implementation of \cs{fp_add:Nn} for an
-% explanation of why to use \cs{@@_parse:n}, namely, for better error
-% reporting.
-% \begin{macrocode}
-\cs_new:Npn \fp_abs:n #1
- { \fp_to_decimal:n { abs \@@_parse:n {#1} } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\fp_max:nn, \fp_min:nn}
-% Similar to \cs{fp_abs:n}, for consistency with \cs{int_max:nn}, \emph{etc.}
-% \begin{macrocode}
-\cs_new:Npn \fp_max:nn #1#2
- { \fp_to_decimal:n { max ( \@@_parse:n {#1} , \@@_parse:n {#2} ) } }
-\cs_new:Npn \fp_min:nn #1#2
- { \fp_to_decimal:n { min ( \@@_parse:n {#1} , \@@_parse:n {#2} ) } }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Convert an array of floating points to a comma list}
-%
-% \begin{macro}[EXP]{\@@_array_to_clist:n}
-% \begin{macro}[EXP]{\@@_array_to_clist_loop:Nw}
-% Converts an array of floating point numbers to a comma-list. If
-% speed here ends up irrelevant, we can simplify the code for the
-% auxiliary to become
-% \begin{verbatim}
-% \cs_new:Npn \__fp_array_to_clist_loop:Nw #1#2;
-% {
-% \use_none:n #1
-% { , ~ } \fp_to_tl:n { #1 #2 ; }
-% \__fp_array_to_clist_loop:Nw
-% }
-% \end{verbatim}
-% The \cs{use_ii:nn} function is expanded after \cs{@@_expand:n} is
-% done, and it removes |,~| from the start of the representation.
-% \begin{macrocode}
-\cs_new:Npn \@@_array_to_clist:n #1
- {
- \tl_if_empty:nF {#1}
- {
- \exp_last_unbraced:Ne \use_ii:nn
- {
- \@@_array_to_clist_loop:Nw #1 { ? \prg_break: } ;
- \prg_break_point:
- }
- }
- }
-\cs_new:Npn \@@_array_to_clist_loop:Nw #1#2;
- {
- \use_none:n #1
- , ~
- \exp_not:f { \@@_to_tl_dispatch:w #1 #2 ; }
- \@@_array_to_clist_loop:Nw
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintChanges
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3fp-expo.dtx b/macros/latex/contrib/l3kernel/l3fp-expo.dtx
deleted file mode 100644
index 5b5f947c38..0000000000
--- a/macros/latex/contrib/l3kernel/l3fp-expo.dtx
+++ /dev/null
@@ -1,1380 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3fp-expo.dtx
-%
-% Copyright (C) 2011-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3fp-expo} module\\
-% Floating point exponential-related functions^^A
-% }
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3fp-expo} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=fp>
-% \end{macrocode}
-%
-% \begin{macro}[EXP]
-% {
-% \@@_parse_word_exp:N ,
-% \@@_parse_word_ln:N ,
-% \@@_parse_word_fact:N,
-% }
-% Unary functions.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_word_exp:N
- { \@@_parse_unary_function:NNN \@@_exp_o:w ? }
-\cs_new:Npn \@@_parse_word_ln:N
- { \@@_parse_unary_function:NNN \@@_ln_o:w ? }
-\cs_new:Npn \@@_parse_word_fact:N
- { \@@_parse_unary_function:NNN \@@_fact_o:w ? }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Logarithm}
-%
-% \subsubsection{Work plan}
-%
-% As for many other functions, we filter out special cases in
-% \cs{@@_ln_o:w}. Then \cs{@@_ln_npos_o:w} receives a positive normal
-% number, which we write in the form $a\cdot 10^{b}$ with $a\in[0.1,1)$.
-%
-% \emph{The rest of this section is actually not in sync with the code.
-% Or is the code not in sync with the section? In the current code,
-% $c\in [1,10]$ is such that $0.7\leq ac < 1.4$.}
-%
-% We are given a positive normal number, of the form $a\cdot 10^{b}$
-% with $a\in[0.1,1)$. To compute its logarithm, we find a small integer
-% $5\leq c < 50$ such that $0.91 \leq a c / 5 < 1.1$, and use the
-% relation
-% \begin{equation*}
-% \ln (a \cdot 10^b) = b \cdot \ln (10) - \ln (c/5) + \ln (ac/5).
-% \end{equation*}
-% The logarithms $\ln(10)$ and $\ln(c/5)$ are looked up in a table. The
-% last term is computed using the following Taylor series of $\ln$ near
-% $1$:
-% \begin{equation*}
-% \ln\left(\frac{ac}{5}\right)
-% = \ln\left(\frac{1+t}{1-t}\right)
-% = 2t\left(1 + t^2 \left(\frac{1}{3} + t^2 \left(\frac{1}{5}
-% + t^2 \left(\frac{1}{7} + t^2 \left( \frac{1}{9} + \cdots
-% \right)\right)\right)\right)\right)
-% \end{equation*}
-% where $t=1-10/(ac+5)$. We can now see one reason for the choice of
-% $ac\sim 5$: then $ac+5=10(1-\epsilon)$ with $-0.05<\epsilon\leq
-% 0.045$, hence
-% \begin{equation*}
-% t = \frac{\epsilon}{1-\epsilon}
-% = \epsilon (1+\epsilon)(1+\epsilon^2)(1+\epsilon^4)\ldots,
-% \end{equation*}
-% is not too difficult to compute.
-%
-% \subsubsection{Some constants}
-%
-% \begin{variable}
-% {
-% \c_@@_ln_i_fixed_tl ,
-% \c_@@_ln_ii_fixed_tl ,
-% \c_@@_ln_iii_fixed_tl ,
-% \c_@@_ln_iv_fixed_tl ,
-% \c_@@_ln_vi_fixed_tl ,
-% \c_@@_ln_vii_fixed_tl ,
-% \c_@@_ln_viii_fixed_tl ,
-% \c_@@_ln_ix_fixed_tl ,
-% \c_@@_ln_x_fixed_tl,
-% }
-% A few values of the logarithm as extended fixed point numbers.
-% Those are needed in the implementation. It turns out that we don't
-% need the value of $\ln(5)$.
-% \begin{macrocode}
-\tl_const:Nn \c_@@_ln_i_fixed_tl { {0000}{0000}{0000}{0000}{0000}{0000};}
-\tl_const:Nn \c_@@_ln_ii_fixed_tl { {6931}{4718}{0559}{9453}{0941}{7232};}
-\tl_const:Nn \c_@@_ln_iii_fixed_tl {{10986}{1228}{8668}{1096}{9139}{5245};}
-\tl_const:Nn \c_@@_ln_iv_fixed_tl {{13862}{9436}{1119}{8906}{1883}{4464};}
-\tl_const:Nn \c_@@_ln_vi_fixed_tl {{17917}{5946}{9228}{0550}{0081}{2477};}
-\tl_const:Nn \c_@@_ln_vii_fixed_tl {{19459}{1014}{9055}{3133}{0510}{5353};}
-\tl_const:Nn \c_@@_ln_viii_fixed_tl{{20794}{4154}{1679}{8359}{2825}{1696};}
-\tl_const:Nn \c_@@_ln_ix_fixed_tl {{21972}{2457}{7336}{2193}{8279}{0490};}
-\tl_const:Nn \c_@@_ln_x_fixed_tl {{23025}{8509}{2994}{0456}{8401}{7991};}
-% \end{macrocode}
-% \end{variable}
-%
-% \subsubsection{Sign, exponent, and special numbers}
-%
-% \begin{macro}[EXP]{\@@_ln_o:w}
-% The logarithm of negative numbers (including $-\infty$ and $-0$)
-% raises the \enquote{invalid} exception. The logarithm of $+0$ is
-% $-\infty$, raising a division by zero exception. The logarithm of
-% $+\infty$ or a \texttt{nan} is itself. Positive normal numbers call
-% \cs{@@_ln_npos_o:w}.
-% \begin{macrocode}
-\cs_new:Npn \@@_ln_o:w #1 \s_@@ \@@_chk:w #2#3#4; @
- {
- \if_meaning:w 2 #3
- \@@_case_use:nw { \@@_invalid_operation_o:nw { ln } }
- \fi:
- \if_case:w #2 \exp_stop_f:
- \@@_case_use:nw
- { \@@_division_by_zero_o:Nnw \c_minus_inf_fp { ln } }
- \or:
- \else:
- \@@_case_return_same_o:w
- \fi:
- \@@_ln_npos_o:w \s_@@ \@@_chk:w #2#3#4;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Absolute ln}
-%
-% \begin{macro}[EXP]{\@@_ln_npos_o:w}
-% We catch the case of a significand very close to $0.1$ or to $1$.
-% In all other cases, the final result is at least $10^{-4}$, and
-% then an error of $0.5\cdot 10^{-20}$ is acceptable.
-% \begin{macrocode}
-\cs_new:Npn \@@_ln_npos_o:w \s_@@ \@@_chk:w 10#1#2#3;
- { %^^A todo: ln(1) should be "exact zero", not "underflow"
- \exp_after:wN \@@_sanitize:Nw
- \int_value:w % for the overall sign
- \if_int_compare:w #1 < \c_one_int
- 2
- \else:
- 0
- \fi:
- \exp_after:wN \exp_stop_f:
- \int_value:w \@@_int_eval:w % for the exponent
- \@@_ln_significand:NNNNnnnN #2#3
- \@@_ln_exponent:wn {#1}
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_ln_significand:NNNNnnnN}
-% \begin{syntax}
-% \cs{@@_ln_significand:NNNNnnnN} \meta{X_1} \Arg{X_2} \Arg{X_3} \Arg{X_4} \meta{continuation}
-% \end{syntax}
-% This function expands to
-% \begin{syntax}
-% \meta{continuation} \Arg{Y_1} \Arg{Y_2} \Arg{Y_3} \Arg{Y_4} \Arg{Y_5} \Arg{Y_6} |;|
-% \end{syntax}
-% where $Y = - \ln(X)$ as an extended fixed point.
-% \begin{macrocode}
-\cs_new:Npn \@@_ln_significand:NNNNnnnN #1#2#3#4
- {
- \exp_after:wN \@@_ln_x_ii:wnnnn
- \int_value:w
- \if_case:w #1 \exp_stop_f:
- \or:
- \if_int_compare:w #2 < 4 \exp_stop_f:
- \@@_int_eval:w 10 - #2
- \else:
- 6
- \fi:
- \or: 4
- \or: 3
- \or: 2
- \or: 2
- \or: 2
- \else: 1
- \fi:
- ; { #1 #2 #3 #4 }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_ln_x_ii:wnnnn}
-% We have thus found $c \in [1,10]$ such that $0.7\leq ac < 1.4$
-% in all cases. Compute $ 1 + x = 1 + ac \in [1.7,2.4)$.
-% \begin{macrocode}
-\cs_new:Npn \@@_ln_x_ii:wnnnn #1; #2#3#4#5
- {
- \exp_after:wN \@@_ln_div_after:Nw
- \cs:w c_@@_ln_ \@@_int_to_roman:w #1 _fixed_tl \exp_after:wN \cs_end:
- \int_value:w
- \exp_after:wN \@@_ln_x_iv:wnnnnnnnn
- \int_value:w \@@_int_eval:w
- \exp_after:wN \@@_ln_x_iii_var:NNNNNw
- \int_value:w \@@_int_eval:w 9999 9990 + #1*#2#3 +
- \exp_after:wN \@@_ln_x_iii:NNNNNNw
- \int_value:w \@@_int_eval:w 10 0000 0000 + #1*#4#5 ;
- {20000} {0000} {0000} {0000}
- } %^^A todo: reoptimize (a generalization attempt failed).
-\cs_new:Npn \@@_ln_x_iii:NNNNNNw #1#2 #3#4#5#6 #7;
- { #1#2; {#3#4#5#6} {#7} }
-\cs_new:Npn \@@_ln_x_iii_var:NNNNNw #1 #2#3#4#5 #6;
- {
- #1#2#3#4#5 + 1 ;
- {#1#2#3#4#5} {#6}
- }
-% \end{macrocode}
-% The Taylor series to be used is expressed in terms of
-% $t = (x-1)/(x+1) = 1 - 2/(x+1)$. We now compute the
-% quotient with extended precision, reusing some code
-% from \cs{@@_/_o:ww}. Note that $1+x$ is known exactly.
-%
-% To reuse notations from \pkg{l3fp-basics}, we want to
-% compute $ A / Z $ with $ A = 2 $ and $ Z = x + 1 $.
-% In \pkg{l3fp-basics}, we considered the case where
-% both $A$ and $Z$ are arbitrary, in the range $[0.1,1)$,
-% and we had to monitor the growth of the sequence of
-% remainders $A$, $B$, $C$, etc. to ensure that no overflow
-% occurred during the computation of the next quotient.
-% The main source of risk was our choice to define the
-% quotient as roughly $10^9 \cdot A / 10^5 \cdot Z$: then
-% $A$ was bound to be below $2.147\cdots$, and this limit
-% was never far.
-%
-% In our case, we can simply work with $10^8 \cdot A$ and
-% $10^4 \cdot Z$, because our reason to work with higher
-% powers has gone: we needed the integer $y \simeq 10^5 \cdot Z$
-% to be at least $10^4$, and now, the definition
-% $y \simeq 10^4 \cdot Z$ suffices.
-%
-% Let us thus define $y = \left\lfloor 10^4 \cdot Z \right\rfloor + 1
-% \in ( 1.7 \cdot 10^4, 2.4 \cdot 10^4 ] $, and
-% \[
-% Q_{1}
-% =
-% \left\lfloor
-% \frac {\left\lfloor 10^8 \cdot A\right\rfloor} {y} - \frac{1}{2}
-% \right\rfloor.
-% \]
-% (The $1/2$ comes from how \eTeX{} rounds.) As for division, it is
-% easy to see that $Q_{1} \leq 10^4 A / Z$, \emph{i.e.}, $Q_{1}$
-% is an underestimate.
-%
-% Exactly as we did for division, we set $B = 10^4 A - Q_{1}Z$. Then
-% \begin{align*}
-% 10^4 B
-% & \leq
-% A_{1}A_{2}.A_{3}A_{4}
-% - \left( \frac{A_{1}A_{2}}{y} - \frac{3}{2} \right) 10^4 Z
-% \\
-% & \leq
-% A_{1}A_{2} \left( 1 - \frac{10^4 Z}{y} \right) + 1 + \frac{3}{2} y
-% \\
-% & \leq
-% 10^8 \frac{A}{y} + 1 + \frac{3}{2} y
-% \end{align*}
-% In the same way, and using $1.7\cdot 10^4\leq y\leq 2.4\cdot 10^4$,
-% and convexity, we get
-% \begin{align*}
-% 10^4 A &= 2\cdot 10^4 \\
-% 10^4 B &\leq 10^8 \frac{A}{y} + 1.6 y \leq 4.7\cdot 10^4\\
-% 10^4 C &\leq 10^8 \frac{B}{y} + 1.6 y \leq 5.8\cdot 10^4\\
-% 10^4 D &\leq 10^8 \frac{C}{y} + 1.6 y \leq 6.3\cdot 10^4\\
-% 10^4 E &\leq 10^8 \frac{D}{y} + 1.6 y \leq 6.5\cdot 10^4\\
-% 10^4 F &\leq 10^8 \frac{E}{y} + 1.6 y \leq 6.6\cdot 10^4\\
-% \end{align*}
-% Note that we compute more steps than for division: since $t$ is
-% not the end result, we need to know it with more accuracy
-% (on the other hand, the ending is much simpler, as we don't
-% need an exact rounding for transcendental functions, but just
-% a faithful rounding).
-% ^^A todo: doc
-%
-% \begin{syntax}
-% \cs{@@_ln_x_iv:wnnnnnnnn} \meta{1 or 2} \meta{8d} |;| \Arg{4d} \Arg{4d} \meta{fixed-tl}
-% \end{syntax}
-% The number is $x$. Compute $y$ by adding 1 to the five first digits.
-% \begin{macrocode}
-\cs_new:Npn \@@_ln_x_iv:wnnnnnnnn #1; #2#3#4#5 #6#7#8#9
- {
- \exp_after:wN \@@_div_significand_pack:NNN
- \int_value:w \@@_int_eval:w
- \@@_ln_div_i:w #1 ;
- #6 #7 ; {#8} {#9}
- {#2} {#3} {#4} {#5}
- { \exp_after:wN \@@_ln_div_ii:wwn \int_value:w #1 }
- { \exp_after:wN \@@_ln_div_ii:wwn \int_value:w #1 }
- { \exp_after:wN \@@_ln_div_ii:wwn \int_value:w #1 }
- { \exp_after:wN \@@_ln_div_ii:wwn \int_value:w #1 }
- { \exp_after:wN \@@_ln_div_vi:wwn \int_value:w #1 }
- }
-\cs_new:Npn \@@_ln_div_i:w #1;
- {
- \exp_after:wN \@@_div_significand_calc:wwnnnnnnn
- \int_value:w \@@_int_eval:w 999999 + 2 0000 0000 / #1 ; % Q1
- }
-\cs_new:Npn \@@_ln_div_ii:wwn #1; #2;#3 % y; B1;B2 <- for k=1
- {
- \exp_after:wN \@@_div_significand_pack:NNN
- \int_value:w \@@_int_eval:w
- \exp_after:wN \@@_div_significand_calc:wwnnnnnnn
- \int_value:w \@@_int_eval:w 999999 + #2 #3 / #1 ; % Q2
- #2 #3 ;
- }
-\cs_new:Npn \@@_ln_div_vi:wwn #1; #2;#3#4#5 #6#7#8#9 %y;F1;F2F3F4x1x2x3x4
- {
- \exp_after:wN \@@_div_significand_pack:NNN
- \int_value:w \@@_int_eval:w 1000000 + #2 #3 / #1 ; % Q6
- }
-% \end{macrocode}
-% We now have essentially
-% ^^A todo: determine error on $Q_{6}$ (probably $6.7$),
-% ^^A todo: conclude the final result is off by $<10^{-23}$
-% \begin{syntax}
-% \cs{@@_ln_div_after:Nw} \meta{fixed tl}
-% \cs{@@_div_significand_pack:NNN} $10^6 + Q_{1}$
-% \cs{@@_div_significand_pack:NNN} $10^6 + Q_{2}$
-% \cs{@@_div_significand_pack:NNN} $10^6 + Q_{3}$
-% \cs{@@_div_significand_pack:NNN} $10^6 + Q_{4}$
-% \cs{@@_div_significand_pack:NNN} $10^6 + Q_{5}$
-% \cs{@@_div_significand_pack:NNN} $10^6 + Q_{6}$ |;|
-% \meta{exponent} |;| \meta{continuation}
-% \end{syntax}
-% where \meta{fixed tl} holds the logarithm of a number
-% in $[1,10]$, and \meta{exponent} is
-% the exponent. Also, the expansion is done backwards. Then
-% \cs{@@_div_significand_pack:NNN} puts things in the
-% correct order to add the $Q_{i}$ together and put semicolons
-% between each piece. Once those have been expanded, we get
-% \begin{syntax}
-% \cs{@@_ln_div_after:Nw} \meta{fixed-tl} \meta{1d} |;| \meta{4d} |;| \meta{4d} |;|
-% ~~\meta{4d} |;| \meta{4d} |;| \meta{4d} |;| \meta{4d} |;| \meta{exponent} |;|
-% \end{syntax}
-% ^^A todo: redoc.
-% Just as with division, we know that the first two digits
-% are |1| and |0| because of bounds on the final result of
-% the division $2/(x+1)$, which is between roughly $0.8$ and $1.2$.
-% We then compute $1-2/(x+1)$, after testing whether $2/(x+1)$ is
-% greater than or smaller than $1$.
-% \begin{macrocode}
-\cs_new:Npn \@@_ln_div_after:Nw #1#2;
- {
- \if_meaning:w 0 #2
- \exp_after:wN \@@_ln_t_small:Nw
- \else:
- \exp_after:wN \@@_ln_t_large:NNw
- \exp_after:wN -
- \fi:
- #1
- }
-\cs_new:Npn \@@_ln_t_small:Nw #1 #2; #3; #4; #5; #6; #7;
- {
- \exp_after:wN \@@_ln_t_large:NNw
- \exp_after:wN + % <sign>
- \exp_after:wN #1
- \int_value:w \@@_int_eval:w 9999 - #2 \exp_after:wN ;
- \int_value:w \@@_int_eval:w 9999 - #3 \exp_after:wN ;
- \int_value:w \@@_int_eval:w 9999 - #4 \exp_after:wN ;
- \int_value:w \@@_int_eval:w 9999 - #5 \exp_after:wN ;
- \int_value:w \@@_int_eval:w 9999 - #6 \exp_after:wN ;
- \int_value:w \@@_int_eval:w 1 0000 - #7 ;
- }
-% \end{macrocode}
-%
-% \begin{syntax}
-% \cs{@@_ln_t_large:NNw} \meta{sign} \meta{fixed tl}
-% ~~\meta{t_1}|;| \meta{t_2} |;| \meta{t_3}|;| \meta{t_4}|;| \meta{t_5} |;| \meta{t_6}|;|
-% ~~\meta{exponent} |;| \meta{continuation}
-% \end{syntax}
-% Compute the square $|t|^2$, and keep $|t|$ at the end with its
-% sign. We know that $|t|<0.1765$, so every piece has at most $4$
-% digits. However, since we were not careful in \cs{@@_ln_t_small:w},
-% they can have less than $4$ digits.
-% \begin{macrocode}
-\cs_new:Npn \@@_ln_t_large:NNw #1 #2 #3; #4; #5; #6; #7; #8;
- {
- \exp_after:wN \@@_ln_square_t_after:w
- \int_value:w \@@_int_eval:w 9999 0000 + #3*#3
- \exp_after:wN \@@_ln_square_t_pack:NNNNNw
- \int_value:w \@@_int_eval:w 9999 0000 + 2*#3*#4
- \exp_after:wN \@@_ln_square_t_pack:NNNNNw
- \int_value:w \@@_int_eval:w 9999 0000 + 2*#3*#5 + #4*#4
- \exp_after:wN \@@_ln_square_t_pack:NNNNNw
- \int_value:w \@@_int_eval:w 9999 0000 + 2*#3*#6 + 2*#4*#5
- \exp_after:wN \@@_ln_square_t_pack:NNNNNw
- \int_value:w \@@_int_eval:w
- 1 0000 0000 + 2*#3*#7 + 2*#4*#6 + #5*#5
- + (2*#3*#8 + 2*#4*#7 + 2*#5*#6) / 1 0000
- % ; ; ;
- \exp_after:wN \@@_ln_twice_t_after:w
- \int_value:w \@@_int_eval:w -1 + 2*#3
- \exp_after:wN \@@_ln_twice_t_pack:Nw
- \int_value:w \@@_int_eval:w 9999 + 2*#4
- \exp_after:wN \@@_ln_twice_t_pack:Nw
- \int_value:w \@@_int_eval:w 9999 + 2*#5
- \exp_after:wN \@@_ln_twice_t_pack:Nw
- \int_value:w \@@_int_eval:w 9999 + 2*#6
- \exp_after:wN \@@_ln_twice_t_pack:Nw
- \int_value:w \@@_int_eval:w 9999 + 2*#7
- \exp_after:wN \@@_ln_twice_t_pack:Nw
- \int_value:w \@@_int_eval:w 10000 + 2*#8 ; ;
- { \@@_ln_c:NwNw #1 }
- #2
- }
-\cs_new:Npn \@@_ln_twice_t_pack:Nw #1 #2; { + #1 ; {#2} }
-\cs_new:Npn \@@_ln_twice_t_after:w #1; { ;;; {#1} }
-\cs_new:Npn \@@_ln_square_t_pack:NNNNNw #1 #2#3#4#5 #6;
- { + #1#2#3#4#5 ; {#6} }
-\cs_new:Npn \@@_ln_square_t_after:w 1 0 #1#2#3 #4;
- { \@@_ln_Taylor:wwNw {0#1#2#3} {#4} }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_ln_Taylor:wwNw}
-% Denoting $T=t^2$, we get
-% \begin{syntax}
-% \cs{@@_ln_Taylor:wwNw}
-% ~~\Arg{T_1} \Arg{T_2} \Arg{T_3} \Arg{T_4} \Arg{T_5} \Arg{T_6} |;| |;|
-% ~~\Arg{(2t)_1} \Arg{(2t)_2} \Arg{(2t)_3} \Arg{(2t)_4} \Arg{(2t)_5} \Arg{(2t)_6} |;|
-% ~~|{| \cs{@@_ln_c:NwNw} \meta{sign} |}|
-% ~~\meta{fixed tl} \meta{exponent} |;| \meta{continuation}
-% \end{syntax}
-% And we want to compute
-% \[
-% \ln\left(\frac{1+t}{1-t}\right)
-% = 2t\left(1 + T \left(\frac{1}{3} + T \left(\frac{1}{5}
-% + T \left(\frac{1}{7} + T \left( \frac{1}{9} + \cdots
-% \right)\right)\right)\right)\right)
-% \]
-% The process looks as follows
-% \begin{verbatim}
-% \loop 5; A;
-% \div_int 5; 1.0; \add A; \mul T; {\loop \eval 5-2;}
-% \add 0.2; A; \mul T; {\loop \eval 5-2;}
-% \mul B; T; {\loop 3;}
-% \loop 3; C;
-% \end{verbatim}
-% ^^A todo: doc
-%
-% This uses the routine for dividing a number by a small integer
-% (${}<10^4$).
-% \begin{macrocode}
-\cs_new:Npn \@@_ln_Taylor:wwNw
- { \@@_ln_Taylor_loop:www 21 ; {0000}{0000}{0000}{0000}{0000}{0000} ; }
-\cs_new:Npn \@@_ln_Taylor_loop:www #1; #2; #3;
- {
- \if_int_compare:w #1 = \c_one_int
- \@@_ln_Taylor_break:w
- \fi:
- \exp_after:wN \@@_fixed_div_int:wwN \c_@@_one_fixed_tl #1;
- \@@_fixed_add:wwn #2;
- \@@_fixed_mul:wwn #3;
- {
- \exp_after:wN \@@_ln_Taylor_loop:www
- \int_value:w \@@_int_eval:w #1 - 2 ;
- }
- #3;
- }
-\cs_new:Npn \@@_ln_Taylor_break:w \fi: #1 \@@_fixed_add:wwn #2#3; #4 ;;
- {
- \fi:
- \exp_after:wN \@@_fixed_mul:wwn
- \exp_after:wN { \int_value:w \@@_int_eval:w 10000 + #2 } #3;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_ln_c:NwNw}
-% \begin{syntax}
-% \cs{@@_ln_c:NwNw} \meta{sign}
-% ~~\Arg{r_1} \Arg{r_2} \Arg{r_3} \Arg{r_4} \Arg{r_5} \Arg{r_6} |;|
-% ~~\meta{fixed tl} \meta{exponent} |;| \meta{continuation}
-% \end{syntax}
-% We are now reduced to finding $\ln(c)$ and $\meta{exponent}\ln(10)$
-% in a table, and adding it to the mixture. The first step is to
-% get $\ln(c) - \ln(x) = - \ln(a)$, then we get $|b|\ln(10)$ and add
-% or subtract.
-%
-% For now, $\ln(x)$ is given as $\cdot 10^0$. Unless both the exponent
-% is $1$ and $c=1$, we shift to working in units of $\cdot 10^4$,
-% since the final result is at least $\ln(10/7) \simeq 0.35$.
-% \begin{macrocode}
-\cs_new:Npn \@@_ln_c:NwNw #1 #2; #3
- {
- \if_meaning:w + #1
- \exp_after:wN \exp_after:wN \exp_after:wN \@@_fixed_sub:wwn
- \else:
- \exp_after:wN \exp_after:wN \exp_after:wN \@@_fixed_add:wwn
- \fi:
- #3 #2 ;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_ln_exponent:wn}
-% \begin{syntax}
-% \cs{@@_ln_exponent:wn}
-% ~~\Arg{s_1} \Arg{s_2} \Arg{s_3} \Arg{s_4} \Arg{s_5} \Arg{s_6} |;|
-% ~~\Arg{exponent}
-% \end{syntax}
-% Compute \meta{exponent} times $\ln(10)$. Apart from the cases where
-% \meta{exponent} is $0$ or $1$, the result is necessarily at
-% least $\ln(10) \simeq 2.3$ in magnitude. We can thus drop the least
-% significant $4$ digits. In the case of a very large (positive or
-% negative) exponent, we can (and we need to) drop $4$ additional
-% digits, since the result is of order $10^4$. Naively, one would
-% think that in both cases we can drop $4$ more digits than we do,
-% but that would be slightly too tight for rounding to happen correctly.
-% Besides, we already have addition and subtraction for $24$ digits
-% fixed point numbers.
-% \begin{macrocode}
-\cs_new:Npn \@@_ln_exponent:wn #1; #2
- {
- \if_case:w #2 \exp_stop_f:
- 0 \@@_case_return:nw { \@@_fixed_to_float_o:Nw 2 }
- \or:
- \exp_after:wN \@@_ln_exponent_one:ww \int_value:w
- \else:
- \if_int_compare:w #2 > \c_zero_int
- \exp_after:wN \@@_ln_exponent_small:NNww
- \exp_after:wN 0
- \exp_after:wN \@@_fixed_sub:wwn \int_value:w
- \else:
- \exp_after:wN \@@_ln_exponent_small:NNww
- \exp_after:wN 2
- \exp_after:wN \@@_fixed_add:wwn \int_value:w -
- \fi:
- \fi:
- #2; #1;
- }
-% \end{macrocode}
-% Now we painfully write all the cases.\footnote{Bruno: do rounding.}
-% No overflow nor underflow can happen, except when computing \texttt{ln(1)}.
-% \begin{macrocode}
-\cs_new:Npn \@@_ln_exponent_one:ww 1; #1;
- {
- 0
- \exp_after:wN \@@_fixed_sub:wwn \c_@@_ln_x_fixed_tl #1;
- \@@_fixed_to_float_o:wN 0
- }
-% \end{macrocode}
-% For small exponents, we just drop one block of digits, and set the
-% exponent of the log to $4$ (minus any shift coming from leading zeros
-% in the conversion from fixed point to floating point). Note that here
-% the exponent has been made positive.
-% \begin{macrocode}
-\cs_new:Npn \@@_ln_exponent_small:NNww #1#2#3; #4#5#6#7#8#9;
- {
- 4
- \exp_after:wN \@@_fixed_mul:wwn
- \c_@@_ln_x_fixed_tl
- {#3}{0000}{0000}{0000}{0000}{0000} ;
- #2
- {0000}{#4}{#5}{#6}{#7}{#8};
- \@@_fixed_to_float_o:wN #1
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Exponential}
-%
-% \subsubsection{Sign, exponent, and special numbers}
-%
-% \begin{macro}[EXP]{\@@_exp_o:w}
-% \begin{macrocode}
-\cs_new:Npn \@@_exp_o:w #1 \s_@@ \@@_chk:w #2#3#4; @
- {
- \if_case:w #2 \exp_stop_f:
- \@@_case_return_o:Nw \c_one_fp
- \or:
- \exp_after:wN \@@_exp_normal_o:w
- \or:
- \if_meaning:w 0 #3
- \exp_after:wN \@@_case_return_o:Nw
- \exp_after:wN \c_inf_fp
- \else:
- \exp_after:wN \@@_case_return_o:Nw
- \exp_after:wN \c_zero_fp
- \fi:
- \or:
- \@@_case_return_same_o:w
- \fi:
- \s_@@ \@@_chk:w #2#3#4;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_exp_normal_o:w, \@@_exp_pos_o:Nnwnw, \@@_exp_overflow:NN}
-% \begin{macrocode}
-\cs_new:Npn \@@_exp_normal_o:w \s_@@ \@@_chk:w 1#1
- {
- \if_meaning:w 0 #1
- \@@_exp_pos_o:NNwnw + \@@_fixed_to_float_o:wN
- \else:
- \@@_exp_pos_o:NNwnw - \@@_fixed_inv_to_float_o:wN
- \fi:
- }
-\cs_new:Npn \@@_exp_pos_o:NNwnw #1#2#3 \fi: #4#5;
- {
- \fi:
- \if_int_compare:w #4 > \c_@@_max_exp_exponent_int
- \token_if_eq_charcode:NNTF + #1
- { \@@_exp_overflow:NN \@@_overflow:w \c_inf_fp }
- { \@@_exp_overflow:NN \@@_underflow:w \c_zero_fp }
- \exp:w
- \else:
- \exp_after:wN \@@_sanitize:Nw
- \exp_after:wN 0
- \int_value:w #1 \@@_int_eval:w
- \if_int_compare:w #4 < \c_zero_int
- \exp_after:wN \use_i:nn
- \else:
- \exp_after:wN \use_ii:nn
- \fi:
- {
- 0
- \@@_decimate:nNnnnn { - #4 }
- \@@_exp_Taylor:Nnnwn
- }
- {
- \@@_decimate:nNnnnn { \c_@@_prec_int - #4 }
- \@@_exp_pos_large:NnnNwn
- }
- #5
- {#4}
- #1 #2 0
- \exp:w
- \fi:
- \exp_after:wN \exp_end:
- }
-\cs_new:Npn \@@_exp_overflow:NN #1#2
- {
- \exp_after:wN \exp_after:wN
- \exp_after:wN #1
- \exp_after:wN #2
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_exp_Taylor:Nnnwn}
-% \begin{macro}[EXP]{\@@_exp_Taylor_loop:www, \@@_exp_Taylor_break:Nww}
-% This function is called for numbers in the range $[10^{-9},
-% 10^{-1})$. We compute $10$ terms of the Taylor series. The
-% first argument is irrelevant (rounding digit used by some other
-% functions). The next three arguments, at least $16$ digits,
-% delimited by a semicolon, form a fixed point number, so we pack it
-% in blocks of $4$ digits.
-% \begin{macrocode}
-\cs_new:Npn \@@_exp_Taylor:Nnnwn #1#2#3 #4; #5 #6
- {
- #6
- \@@_pack_twice_four:wNNNNNNNN
- \@@_pack_twice_four:wNNNNNNNN
- \@@_pack_twice_four:wNNNNNNNN
- \@@_exp_Taylor_ii:ww
- ; #2#3#4 0000 0000 ;
- }
-\cs_new:Npn \@@_exp_Taylor_ii:ww #1; #2;
- { \@@_exp_Taylor_loop:www 10 ; #1 ; #1 ; \s_@@_stop }
-\cs_new:Npn \@@_exp_Taylor_loop:www #1; #2; #3;
- {
- \if_int_compare:w #1 = \c_one_int
- \exp_after:wN \@@_exp_Taylor_break:Nww
- \fi:
- \@@_fixed_div_int:wwN #3 ; #1 ;
- \@@_fixed_add_one:wN
- \@@_fixed_mul:wwn #2 ;
- {
- \exp_after:wN \@@_exp_Taylor_loop:www
- \int_value:w \@@_int_eval:w #1 - 1 ;
- #2 ;
- }
- }
-\cs_new:Npn \@@_exp_Taylor_break:Nww #1 #2; #3 \s_@@_stop
- { \@@_fixed_add_one:wN #2 ; }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{variable}{\c_@@_exp_intarray}
-% The integer array has $6\times 9\times 4=216$ items encoding the
-% values of $\exp(j\times 10^i)$ for $j=1,\dots,9$ and $i=-1,\dots,4$.
-% Each value is expressed as $\simeq 10^p \times 0.m_1m_2m_3$ with
-% three $8$-digit blocks $m_1$, $m_2$, $m_3$ and an integer
-% exponent~$p$ (one more than the scientific exponent), and these are
-% stored in the integer array as four items: $p$, $10^8+m_1$,
-% $10^8+m_2$, $10^8+m_3$. The various exponentials are stored in
-% increasing order of $j\times 10^i$.
-%
-% Storing this data in an integer array makes it slightly harder to
-% access (slower, too), but uses $16$ bytes of memory per exponential
-% stored, while storing as tokens used around $40$ tokens; tokens have
-% an especially large footprint in Unicode-aware engines.
-% \begin{macrocode}
-\intarray_const_from_clist:Nn \c_@@_exp_intarray
- {
- 1 , 1 1105 1709 , 1 1807 5647 , 1 6248 1171 ,
- 1 , 1 1221 4027 , 1 5816 0169 , 1 8339 2107 ,
- 1 , 1 1349 8588 , 1 0757 6003 , 1 1039 8374 ,
- 1 , 1 1491 8246 , 1 9764 1270 , 1 3178 2485 ,
- 1 , 1 1648 7212 , 1 7070 0128 , 1 1468 4865 ,
- 1 , 1 1822 1188 , 1 0039 0508 , 1 9748 7537 ,
- 1 , 1 2013 7527 , 1 0747 0476 , 1 5216 2455 ,
- 1 , 1 2225 5409 , 1 2849 2467 , 1 6045 7954 ,
- 1 , 1 2459 6031 , 1 1115 6949 , 1 6638 0013 ,
- 1 , 1 2718 2818 , 1 2845 9045 , 1 2353 6029 ,
- 1 , 1 7389 0560 , 1 9893 0650 , 1 2272 3043 ,
- 2 , 1 2008 5536 , 1 9231 8766 , 1 7740 9285 ,
- 2 , 1 5459 8150 , 1 0331 4423 , 1 9078 1103 ,
- 3 , 1 1484 1315 , 1 9102 5766 , 1 0342 1116 ,
- 3 , 1 4034 2879 , 1 3492 7351 , 1 2260 8387 ,
- 4 , 1 1096 6331 , 1 5842 8458 , 1 5992 6372 ,
- 4 , 1 2980 9579 , 1 8704 1728 , 1 2747 4359 ,
- 4 , 1 8103 0839 , 1 2757 5384 , 1 0077 1000 ,
- 5 , 1 2202 6465 , 1 7948 0671 , 1 6516 9579 ,
- 9 , 1 4851 6519 , 1 5409 7902 , 1 7796 9107 ,
- 14 , 1 1068 6474 , 1 5815 2446 , 1 2146 9905 ,
- 18 , 1 2353 8526 , 1 6837 0199 , 1 8540 7900 ,
- 22 , 1 5184 7055 , 1 2858 7072 , 1 4640 8745 ,
- 27 , 1 1142 0073 , 1 8981 5684 , 1 2836 6296 ,
- 31 , 1 2515 4386 , 1 7091 9167 , 1 0062 6578 ,
- 35 , 1 5540 6223 , 1 8439 3510 , 1 0525 7117 ,
- 40 , 1 1220 4032 , 1 9431 7840 , 1 8020 0271 ,
- 44 , 1 2688 1171 , 1 4181 6135 , 1 4484 1263 ,
- 87 , 1 7225 9737 , 1 6812 5749 , 1 2581 7748 ,
- 131 , 1 1942 4263 , 1 9524 1255 , 1 9365 8421 ,
- 174 , 1 5221 4696 , 1 8976 4143 , 1 9505 8876 ,
- 218 , 1 1403 5922 , 1 1785 2837 , 1 4107 3977 ,
- 261 , 1 3773 0203 , 1 0092 9939 , 1 8234 0143 ,
- 305 , 1 1014 2320 , 1 5473 5004 , 1 5094 5533 ,
- 348 , 1 2726 3745 , 1 7211 2566 , 1 5673 6478 ,
- 391 , 1 7328 8142 , 1 2230 7421 , 1 7051 8866 ,
- 435 , 1 1970 0711 , 1 1401 7046 , 1 9938 8888 ,
- 869 , 1 3881 1801 , 1 9428 4368 , 1 5764 8232 ,
- 1303 , 1 7646 2009 , 1 8905 4704 , 1 8893 1073 ,
- 1738 , 1 1506 3559 , 1 7005 0524 , 1 9009 7592 ,
- 2172 , 1 2967 6283 , 1 8402 3667 , 1 0689 6630 ,
- 2606 , 1 5846 4389 , 1 5650 2114 , 1 7278 5046 ,
- 3041 , 1 1151 7900 , 1 5080 6878 , 1 2914 4154 ,
- 3475 , 1 2269 1083 , 1 0850 6857 , 1 8724 4002 ,
- 3909 , 1 4470 3047 , 1 3316 5442 , 1 6408 6591 ,
- 4343 , 1 8806 8182 , 1 2566 2921 , 1 5872 6150 ,
- 8686 , 1 7756 0047 , 1 2598 6861 , 1 0458 3204 ,
- 13029 , 1 6830 5723 , 1 7791 4884 , 1 1932 7351 ,
- 17372 , 1 6015 5609 , 1 3095 3052 , 1 3494 7574 ,
- 21715 , 1 5297 7951 , 1 6443 0315 , 1 3251 3576 ,
- 26058 , 1 4665 6719 , 1 0099 3379 , 1 5527 2929 ,
- 30401 , 1 4108 9724 , 1 3326 3186 , 1 5271 5665 ,
- 34744 , 1 3618 6973 , 1 3140 0875 , 1 3856 4102 ,
- 39087 , 1 3186 9209 , 1 6113 3900 , 1 6705 9685 ,
- }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[rEXP]
-% {
-% \@@_exp_pos_large:NnnNwn ,
-% \@@_exp_large_after:wwn ,
-% \@@_exp_large:NwN ,
-% \@@_exp_intarray:w ,
-% \@@_exp_intarray_aux:w ,
-% }
-% The first two arguments are irrelevant (a rounding digit, and a
-% brace group with $8$ zeros). The third argument is the integer part
-% of our number, then we have the decimal part delimited by a
-% semicolon, and finally the exponent, in the range $[0,5]$. Remove
-% leading zeros from the integer part: putting |#4| in there too
-% ensures that an integer part of $0$ is also removed. Then read
-% digits one by one, looking up $\exp(\meta{digit}\cdot
-% 10^{\meta{exponent}})$ in a table, and multiplying that to the
-% current total. The loop is done by \cs{@@_exp_large:NwN}, whose
-% |#1| is the \meta{exponent}, |#2| is the current mantissa, and |#3|
-% is the \meta{digit}. At the end, \cs{@@_exp_large_after:wwn} moves
-% on to the Taylor series, eventually multiplied with the mantissa
-% that we have just computed.
-% \begin{macrocode}
-\cs_new:Npn \@@_exp_pos_large:NnnNwn #1#2#3 #4#5; #6
- {
- \exp_after:wN \exp_after:wN \exp_after:wN \@@_exp_large:NwN
- \exp_after:wN \exp_after:wN \exp_after:wN #6
- \exp_after:wN \c_@@_one_fixed_tl
- \int_value:w #3 #4 \exp_stop_f:
- #5 00000 ;
- }
-\cs_new:Npn \@@_exp_large:NwN #1#2; #3
- {
- \if_case:w #3 ~
- \exp_after:wN \@@_fixed_continue:wn
- \else:
- \exp_after:wN \@@_exp_intarray:w
- \int_value:w \@@_int_eval:w 36 * #1 + 4 * #3 \exp_after:wN ;
- \fi:
- #2;
- {
- \if_meaning:w 0 #1
- \exp_after:wN \@@_exp_large_after:wwn
- \else:
- \exp_after:wN \@@_exp_large:NwN
- \int_value:w \@@_int_eval:w #1 - 1 \exp_after:wN \scan_stop:
- \fi:
- }
- }
-\cs_new:Npn \@@_exp_intarray:w #1 ;
- {
- +
- \__kernel_intarray_item:Nn \c_@@_exp_intarray
- { \@@_int_eval:w #1 - 3 \scan_stop: }
- \exp_after:wN \use_i:nnn
- \exp_after:wN \@@_fixed_mul:wwn
- \int_value:w 0
- \exp_after:wN \@@_exp_intarray_aux:w
- \int_value:w \__kernel_intarray_item:Nn
- \c_@@_exp_intarray { \@@_int_eval:w #1 - 2 }
- \exp_after:wN \@@_exp_intarray_aux:w
- \int_value:w \__kernel_intarray_item:Nn
- \c_@@_exp_intarray { \@@_int_eval:w #1 - 1 }
- \exp_after:wN \@@_exp_intarray_aux:w
- \int_value:w \__kernel_intarray_item:Nn \c_@@_exp_intarray {#1} ; ;
- }
-\cs_new:Npn \@@_exp_intarray_aux:w 1 #1#2#3#4#5 ; { ; {#1#2#3#4} {#5} }
-\cs_new:Npn \@@_exp_large_after:wwn #1; #2; #3
- {
- \@@_exp_Taylor:Nnnwn ? { } { } 0 #2; {} #3
- \@@_fixed_mul:wwn #1;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Power}
-%
-% Raising a number $a$ to a power $b$ leads to many distinct situations.
-% \begin{center}\def\abs#1{\lvert #1\rvert}
-% \begin{tabular}{>{$}c<{$}|*8{>{$}l<{$}}}
-% a^b &-\infty &(-\infty,-0) &-\text{integer} &\pm 0 &+\text{integer} &(0,\infty) &+\infty &\nan \\ \hline
-% +\infty &+0 &\multicolumn{2}{c}{$+0$} &+1 &\multicolumn{2}{c}{$+\infty$} &+\infty &\nan \\
-% (1,\infty) &+0 &\multicolumn{2}{c}{$+\abs{a}^{b}$} &+1 &\multicolumn{2}{c}{$+\abs{a}^{b}$} &+\infty &\nan \\
-% +1 &+1 &\multicolumn{2}{c}{$+1$} &+1 &\multicolumn{2}{c}{$+1$} &+1 &+1 \\
-% (0,1) &+\infty &\multicolumn{2}{c}{$+\abs{a}^{b}$} &+1 &\multicolumn{2}{c}{$+\abs{a}^{b}$} &+0 &\nan \\
-% +0 &+\infty &\multicolumn{2}{c}{$+\infty$} &+1 &\multicolumn{2}{c}{$+0$} &+0 &\nan \\
-% -0 &+\infty &\nan &(-1)^b\infty &+1 &(-1)^b 0 &+0 &+0 &\nan \\
-% (-1,0) &+\infty &\nan &(-1)^b\abs{a}^{b} &+1 &(-1)^b\abs{a}^{b} &\nan &+0 &\nan \\
-% -1 &+1 &\nan &(-1)^b &+1 &(-1)^b &\nan &+1 &\nan \\
-% (-\infty,-1) &+0 &\nan &(-1)^b\abs{a}^{b} &+1 &(-1)^b\abs{a}^{b} &\nan &+\infty &\nan \\
-% -\infty &+0 &+0 &(-1)^b 0 &+1 &(-1)^b\infty &\nan &+\infty &\nan \\
-% \nan &\nan &\nan &\nan &+1 &\nan &\nan &\nan &\nan \\
-% \end{tabular}
-% \end{center}
-% We distinguished in this table the cases of finite (positive or
-% negative) integer exponents, as $(-1)^b$ is defined in that case.
-% One peculiarity of this operation is that $\nan^0 = 1^\nan = 1$,
-% because this relation is obeyed for any number, even $\pm\infty$.
-%
-% \begin{macro}[EXP]+\@@_^_o:ww+
-% We cram most of the tests into a single function to save csnames.
-% First treat the case $b=0$: $a^0=1$ for any $a$, even \texttt{nan}.
-% Then test the sign of $a$.
-% \begin{itemize}
-% \item If it is positive, and $a$ is a normal number, call
-% \cs{@@_pow_normal_o:ww} followed by the two \texttt{fp} $a$ and $b$.
-% For $a=+0$ or $+\inf$, call \cs{@@_pow_zero_or_inf:ww} instead, to
-% return either $+0$ or $+\infty$ as appropriate.
-% \item If $a$ is a \texttt{nan}, then skip to the next semicolon
-% (which happens to be conveniently the end of $b$) and return
-% \texttt{nan}.
-% \item Finally, if $a$ is negative, compute $|a|^b$
-% (\cs{@@_pow_normal_o:ww} which ignores the sign of its first
-% operand), and keep an extra copy of $a$ and $b$ (the second brace
-% group, containing \{~$b$~$a$~\}, is inserted between $a$ and $b$).
-% Then do some tests to find the final sign of the result if it
-% exists.
-% \end{itemize}
-% \begin{macrocode}
-\cs_new:cpn { @@_ \iow_char:N \^ _o:ww }
- \s_@@ \@@_chk:w #1#2#3; \s_@@ \@@_chk:w #4#5#6;
- {
- \if_meaning:w 0 #4
- \@@_case_return_o:Nw \c_one_fp
- \fi:
- \if_case:w #2 \exp_stop_f:
- \exp_after:wN \use_i:nn
- \or:
- \@@_case_return_o:Nw \c_nan_fp
- \else:
- \exp_after:wN \@@_pow_neg:www
- \exp:w \exp_end_continue_f:w \exp_after:wN \use:nn
- \fi:
- {
- \if_meaning:w 1 #1
- \exp_after:wN \@@_pow_normal_o:ww
- \else:
- \exp_after:wN \@@_pow_zero_or_inf:ww
- \fi:
- \s_@@ \@@_chk:w #1#2#3;
- }
- { \s_@@ \@@_chk:w #4#5#6; \s_@@ \@@_chk:w #1#2#3; }
- \s_@@ \@@_chk:w #4#5#6;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_pow_zero_or_inf:ww}
-% Raising $-0$ or $-\infty$ to \texttt{nan} yields \texttt{nan}. For
-% other powers, the result is $+0$ if $0$ is raised to a positive
-% power or $\infty$ to a negative power, and $+\infty$ otherwise.
-% Thus, if the type of $a$ and the sign of $b$ coincide, the result
-% is~$0$, since those conveniently take the same possible values, $0$
-% and~$2$. Otherwise, either $a=\pm\infty$ and $b>0$ and the result
-% is $+\infty$, or $a=\pm 0$ with $b<0$ and we have a division by zero
-% unless $b=-\infty$.
-% \begin{macrocode}
-\cs_new:Npn \@@_pow_zero_or_inf:ww
- \s_@@ \@@_chk:w #1#2; \s_@@ \@@_chk:w #3#4
- {
- \if_meaning:w 1 #4
- \@@_case_return_same_o:w
- \fi:
- \if_meaning:w #1 #4
- \@@_case_return_o:Nw \c_zero_fp
- \fi:
- \if_meaning:w 2 #1
- \@@_case_return_o:Nw \c_inf_fp
- \fi:
- \if_meaning:w 2 #3
- \@@_case_return_o:Nw \c_inf_fp
- \else:
- \@@_case_use:nw
- {
- \@@_division_by_zero_o:NNww \c_inf_fp ^
- \s_@@ \@@_chk:w #1 #2 ;
- }
- \fi:
- \s_@@ \@@_chk:w #3#4
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_pow_normal_o:ww}
-% We have in front of us $a$, and $b\neq 0$, we know that $a$ is a
-% normal number, and we wish to compute $\lvert a\rvert^{b}$. If
-% $\lvert a\rvert=1$, we return $1$, unless $a=-1$ and $b$ is
-% \texttt{nan}. Indeed, returning $1$ at this point would wrongly
-% raise \enquote{invalid} when the sign is considered. If $\lvert
-% a\rvert\neq 1$, test the type of $b$:
-% \begin{itemize}
-% \item[0] Impossible, we already filtered $b=\pm 0$.
-% \item[1] Call \cs{@@_pow_npos_o:Nww}.
-% \item[2] Return $+\infty$ or $+0$ depending on the sign of $b$ and
-% whether the exponent of $a$ is positive or not.
-% \item[3] Return $b$.
-% \end{itemize}
-% \begin{macrocode}
-\cs_new:Npn \@@_pow_normal_o:ww
- \s_@@ \@@_chk:w 1 #1#2#3; \s_@@ \@@_chk:w #4#5
- {
- \if:w 0 \@@_str_if_eq:nn { #2 #3 } { 1 {1000} {0000} {0000} {0000} }
- \if_int_compare:w #4 #1 = 32 \exp_stop_f:
- \exp_after:wN \@@_case_return_ii_o:ww
- \fi:
- \@@_case_return_o:Nww \c_one_fp
- \fi:
- \if_case:w #4 \exp_stop_f:
- \or:
- \exp_after:wN \@@_pow_npos_o:Nww
- \exp_after:wN #5
- \or:
- \if_meaning:w 2 #5 \exp_after:wN \reverse_if:N \fi:
- \if_int_compare:w #2 > \c_zero_int
- \exp_after:wN \@@_case_return_o:Nww
- \exp_after:wN \c_inf_fp
- \else:
- \exp_after:wN \@@_case_return_o:Nww
- \exp_after:wN \c_zero_fp
- \fi:
- \or:
- \@@_case_return_ii_o:ww
- \fi:
- \s_@@ \@@_chk:w 1 #1 {#2} #3 ;
- \s_@@ \@@_chk:w #4 #5
- }
-% \end{macrocode}
-% \end{macro}
-%
-% ^^A todo: check that we compute ln to 21 digits!
-% \begin{macro}[EXP]{\@@_pow_npos_o:Nww}
-% We now know that $a\neq\pm 1$ is a normal number, and $b$ is a
-% normal number too. We want to compute $\lvert a\rvert^{b} = (\lvert
-% x\rvert\cdot 10^{n})^{y\cdot 10^{p}} = \exp((\ln\lvert x\rvert + n
-% \ln(10))\cdot y \cdot 10^{p}) = \exp(z)$. To compute the
-% exponential accurately, we need to know the digits of $z$ up to the
-% $16$-th position. Since the exponential of $10^{5}$ is infinite, we
-% only need at most $21$ digits, hence the fixed point result of
-% \cs{@@_ln_o:w} is precise enough for our needs. Start an integer
-% expression for the decimal exponent of $e^{\lvert z\rvert}$. If $z$
-% is negative, negate that decimal exponent, and prepare to take the
-% inverse when converting from the fixed point to the floating point result.
-% \begin{macrocode}
-\cs_new:Npn \@@_pow_npos_o:Nww #1 \s_@@ \@@_chk:w 1#2#3
- {
- \exp_after:wN \@@_sanitize:Nw
- \exp_after:wN 0
- \int_value:w
- \if:w #1 \if_int_compare:w #3 > \c_zero_int 0 \else: 2 \fi:
- \exp_after:wN \@@_pow_npos_aux:NNnww
- \exp_after:wN +
- \exp_after:wN \@@_fixed_to_float_o:wN
- \else:
- \exp_after:wN \@@_pow_npos_aux:NNnww
- \exp_after:wN -
- \exp_after:wN \@@_fixed_inv_to_float_o:wN
- \fi:
- {#3}
- }
-% \end{macrocode}
-% \end{macro}
-%
-%^^A begin[todo]
-% \begin{macro}[EXP]{\@@_pow_npos_aux:NNnww}
-% The first argument is the conversion function from fixed point to
-% float. Then comes an exponent and the $4$ brace groups of $x$,
-% followed by $b$. Compute $-\ln(x)$.
-% \begin{macrocode}
-\cs_new:Npn \@@_pow_npos_aux:NNnww #1#2#3#4#5; \s_@@ \@@_chk:w 1#6#7#8;
- {
- #1
- \@@_int_eval:w
- \@@_ln_significand:NNNNnnnN #4#5
- \@@_pow_exponent:wnN {#3}
- \@@_fixed_mul:wwn #8 {0000}{0000} ;
- \@@_pow_B:wwN #7;
- #1 #2 0 % fixed_to_float_o:wN
- }
-\cs_new:Npn \@@_pow_exponent:wnN #1; #2
- {
- \if_int_compare:w #2 > \c_zero_int
- \exp_after:wN \@@_pow_exponent:Nwnnnnnw % n\ln(10) - (-\ln(x))
- \exp_after:wN +
- \else:
- \exp_after:wN \@@_pow_exponent:Nwnnnnnw % -(|n|\ln(10) + (-\ln(x)))
- \exp_after:wN -
- \fi:
- #2; #1;
- }
-\cs_new:Npn \@@_pow_exponent:Nwnnnnnw #1#2; #3#4#5#6#7#8;
- { %^^A todo: use that in ln.
- \exp_after:wN \@@_fixed_mul_after:wwn
- \int_value:w \@@_int_eval:w \c_@@_leading_shift_int
- \exp_after:wN \@@_pack:NNNNNw
- \int_value:w \@@_int_eval:w \c_@@_middle_shift_int
- #1#2*23025 - #1 #3
- \exp_after:wN \@@_pack:NNNNNw
- \int_value:w \@@_int_eval:w \c_@@_middle_shift_int
- #1 #2*8509 - #1 #4
- \exp_after:wN \@@_pack:NNNNNw
- \int_value:w \@@_int_eval:w \c_@@_middle_shift_int
- #1 #2*2994 - #1 #5
- \exp_after:wN \@@_pack:NNNNNw
- \int_value:w \@@_int_eval:w \c_@@_middle_shift_int
- #1 #2*0456 - #1 #6
- \exp_after:wN \@@_pack:NNNNNw
- \int_value:w \@@_int_eval:w \c_@@_trailing_shift_int
- #1 #2*8401 - #1 #7
- #1 ( #2*7991 - #8 ) / 1 0000 ; ;
- }
-\cs_new:Npn \@@_pow_B:wwN #1#2#3#4#5#6; #7;
- {
- \if_int_compare:w #7 < \c_zero_int
- \exp_after:wN \@@_pow_C_neg:w \int_value:w -
- \else:
- \if_int_compare:w #7 < 22 \exp_stop_f:
- \exp_after:wN \@@_pow_C_pos:w \int_value:w
- \else:
- \exp_after:wN \@@_pow_C_overflow:w \int_value:w
- \fi:
- \fi:
- #7 \exp_after:wN ;
- \int_value:w \@@_int_eval:w 10 0000 + #1 \@@_int_eval_end:
- #2#3#4#5#6 0000 0000 0000 0000 0000 0000 ; %^^A todo: how many 0?
- }
-\cs_new:Npn \@@_pow_C_overflow:w #1; #2; #3
- {
- + 2 * \c_@@_max_exponent_int
- \exp_after:wN \@@_fixed_continue:wn \c_@@_one_fixed_tl
- }
-\cs_new:Npn \@@_pow_C_neg:w #1 ; 1
- {
- \exp_after:wN \exp_after:wN \exp_after:wN \@@_pow_C_pack:w
- \prg_replicate:nn {#1} {0}
- }
-\cs_new:Npn \@@_pow_C_pos:w #1; 1
- { \@@_pow_C_pos_loop:wN #1; }
-\cs_new:Npn \@@_pow_C_pos_loop:wN #1; #2
- {
- \if_meaning:w 0 #1
- \exp_after:wN \@@_pow_C_pack:w
- \exp_after:wN #2
- \else:
- \if_meaning:w 0 #2
- \exp_after:wN \@@_pow_C_pos_loop:wN \int_value:w
- \else:
- \exp_after:wN \@@_pow_C_overflow:w \int_value:w
- \fi:
- \@@_int_eval:w #1 - 1 \exp_after:wN ;
- \fi:
- }
-\cs_new:Npn \@@_pow_C_pack:w
- {
- \exp_after:wN \@@_exp_large:NwN
- \exp_after:wN 5
- \c_@@_one_fixed_tl
- }
-% \end{macrocode}
-% \end{macro}
-%^^A end[todo]
-%
-% \begin{macro}[EXP]{\@@_pow_neg:www, \@@_pow_neg_aux:wNN}
-% This function is followed by three floating point numbers: $|a|^b$,
-% $a\in[-\infty,-0]$, and $b$. If $b$ is an even integer (case $-1$),
-% $a^b=|a|^b$. If $b$ is an odd integer (case $0$), $a^b=-|a|^b$,
-% obtained by a call to \cs{@@_pow_neg_aux:wNN}. Otherwise, the sign is
-% undefined. This is invalid, unless $|a|^b$ turns out to be $+0$ or
-% \texttt{nan}, in which case we return that as $a^b$. In particular,
-% since the underflow detection occurs before \cs{@@_pow_neg:www} is
-% called, |(-0.1)**(12345.67)| gives $+0$ rather than complaining
-% that the sign is not defined.
-% \begin{macrocode}
-\cs_new:Npn \@@_pow_neg:www \s_@@ \@@_chk:w #1#2; #3; #4;
- {
- \if_case:w \@@_pow_neg_case:w #4 ;
- \exp_after:wN \@@_pow_neg_aux:wNN
- \or:
- \if_int_compare:w \@@_int_eval:w #1 / 2 = \c_one_int
- \@@_invalid_operation_o:Nww ^ #3; #4;
- \exp:w \exp_end_continue_f:w
- \exp_after:wN \exp_after:wN
- \exp_after:wN \@@_use_none_until_s:w
- \fi:
- \fi:
- \@@_exp_after_o:w
- \s_@@ \@@_chk:w #1#2;
- }
-\cs_new:Npn \@@_pow_neg_aux:wNN #1 \s_@@ \@@_chk:w #2#3
- {
- \exp_after:wN \@@_exp_after_o:w
- \exp_after:wN \s_@@
- \exp_after:wN \@@_chk:w
- \exp_after:wN #2
- \int_value:w \@@_int_eval:w 2 - #3 \@@_int_eval_end:
- }
-% \end{macrocode}
-% ^^A todo: is this \@@_exp_after_o:w necessary? Appropriate?
-% \end{macro}
-%
-% \begin{macro}[rEXP]
-% {
-% \@@_pow_neg_case:w, \@@_pow_neg_case_aux:nnnnn,
-% \@@_pow_neg_case_aux:Nnnw
-% }
-% This function expects a floating point number, and determines its
-% \enquote{parity}. It should be used after \cs{if_case:w} or in an
-% integer expression. It gives $-1$ if the number is an even integer,
-% $0$~if the number is an odd integer, and $1$~otherwise. Zeros and
-% $\pm\infty$ are even (because very large finite floating points are
-% even), while \texttt{nan} is a non-integer. The sign of normal
-% numbers is irrelevant to parity. After \cs{@@_decimate:nNnnnn} the
-% argument |#1| of \cs{@@_pow_neg_case_aux:Nnnw} is a rounding digit,
-% |0|~if and only if the number was an integer, and |#3| is the $8$
-% least significant digits of that integer.
-% \begin{macrocode}
-\cs_new:Npn \@@_pow_neg_case:w \s_@@ \@@_chk:w #1#2#3;
- {
- \if_case:w #1 \exp_stop_f:
- -1
- \or: \@@_pow_neg_case_aux:nnnnn #3
- \or: -1
- \else: 1
- \fi:
- \exp_stop_f:
- }
-\cs_new:Npn \@@_pow_neg_case_aux:nnnnn #1#2#3#4#5
- {
- \if_int_compare:w #1 > \c_@@_prec_int
- -1
- \else:
- \@@_decimate:nNnnnn { \c_@@_prec_int - #1 }
- \@@_pow_neg_case_aux:Nnnw
- {#2} {#3} {#4} {#5}
- \fi:
- }
-\cs_new:Npn \@@_pow_neg_case_aux:Nnnw #1#2#3#4 ;
- {
- \if_meaning:w 0 #1
- \if_int_odd:w #3 \exp_stop_f:
- 0
- \else:
- -1
- \fi:
- \else:
- 1
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Factorial}
-%
-% \begin{variable}{\c_@@_fact_max_arg_int}
-% The maximum integer whose factorial fits in the exponent range is
-% $3248$, as $3249!\sim 10^{10000.8}$
-% \begin{macrocode}
-\int_const:Nn \c_@@_fact_max_arg_int { 3248 }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[EXP]{\@@_fact_o:w}
-% First detect $\pm 0$ and $+\infty$ and \texttt{nan}. Then note that
-% factorial of anything with a negative sign (except $-0$) is
-% undefined. Then call \cs{@@_small_int:wTF} to get an integer as the
-% argument, and start a loop. This is not the most efficient way of
-% computing the factorial, but it works all right. Of course we work
-% with $24$ digits instead of~$16$. It is easy to check that
-% computing factorials with this precision is enough.
-% \begin{macrocode}
-\cs_new:Npn \@@_fact_o:w #1 \s_@@ \@@_chk:w #2#3#4; @
- {
- \if_case:w #2 \exp_stop_f:
- \@@_case_return_o:Nw \c_one_fp
- \or:
- \or:
- \if_meaning:w 0 #3
- \exp_after:wN \@@_case_return_same_o:w
- \fi:
- \or:
- \@@_case_return_same_o:w
- \fi:
- \if_meaning:w 2 #3
- \@@_case_use:nw { \@@_invalid_operation_o:fw { fact } }
- \fi:
- \@@_fact_pos_o:w
- \s_@@ \@@_chk:w #2 #3 #4 ;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_fact_pos_o:w, \@@_fact_int_o:w}
-% Then check the input is an integer, and call
-% \cs{@@_facorial_int_o:n} with that \texttt{int} as an argument. If
-% it's too big the factorial overflows. Otherwise call
-% \cs{@@_sanitize:Nw} with a positive sign marker~|0| and an integer
-% expression that will mop up any exponent in the calculation.
-% \begin{macrocode}
-\cs_new:Npn \@@_fact_pos_o:w #1;
- {
- \@@_small_int:wTF #1;
- { \@@_fact_int_o:n }
- { \@@_invalid_operation_o:fw { fact } #1; }
- }
-\cs_new:Npn \@@_fact_int_o:n #1
- {
- \if_int_compare:w #1 > \c_@@_fact_max_arg_int
- \@@_case_return:nw
- {
- \exp_after:wN \exp_after:wN \exp_after:wN \@@_overflow:w
- \exp_after:wN \c_inf_fp
- }
- \fi:
- \exp_after:wN \@@_sanitize:Nw
- \exp_after:wN 0
- \int_value:w \@@_int_eval:w
- \@@_fact_loop_o:w #1 . 4 , { 1 } { } { } { } { } { } ;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_fact_loop_o:w}
-% The loop receives an integer |#1| whose factorial we want to
-% compute, which we progressively decrement, and the result so far as
-% an extended-precision number |#2| in the form
-% \meta{exponent}|,|\meta{mantissa}|;|. The loop goes in steps of two
-% because we compute |#1*#1-1| as an integer expression (it must fit
-% since |#1| is at most $3248$), then multiply with the result so far.
-% We don't need to fill in most of the mantissa with zeros because
-% \cs{@@_ep_mul:wwwwn} first normalizes the extended precision number
-% to avoid loss of precision. When reaching a small enough number
-% simply use a table of factorials less than $10^8$. This limit is
-% chosen because the normalization step cannot deal with larger
-% integers.
-% \begin{macrocode}
-\cs_new:Npn \@@_fact_loop_o:w #1 . #2 ;
- {
- \if_int_compare:w #1 < 12 \exp_stop_f:
- \@@_fact_small_o:w #1
- \fi:
- \exp_after:wN \@@_ep_mul:wwwwn
- \exp_after:wN 4 \exp_after:wN ,
- \exp_after:wN { \int_value:w \@@_int_eval:w #1 * (#1 - 1) }
- { } { } { } { } { } ;
- #2 ;
- {
- \exp_after:wN \@@_fact_loop_o:w
- \int_value:w \@@_int_eval:w #1 - 2 .
- }
- }
-\cs_new:Npn \@@_fact_small_o:w #1 \fi: #2 ; #3 ; #4
- {
- \fi:
- \exp_after:wN \@@_ep_mul:wwwwn
- \exp_after:wN 4 \exp_after:wN ,
- \exp_after:wN
- {
- \int_value:w
- \if_case:w #1 \exp_stop_f:
- 1 \or: 1 \or: 2 \or: 6 \or: 24 \or: 120 \or: 720 \or: 5040
- \or: 40320 \or: 362880 \or: 3628800 \or: 39916800
- \fi:
- } { } { } { } { } { } ;
- #3 ;
- \@@_ep_to_float_o:wwN 0
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintChanges
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3fp-extended.dtx b/macros/latex/contrib/l3kernel/l3fp-extended.dtx
deleted file mode 100644
index bcd16a4b68..0000000000
--- a/macros/latex/contrib/l3kernel/l3fp-extended.dtx
+++ /dev/null
@@ -1,1275 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3fp-extended.dtx
-%
-% Copyright (C) 2011-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3fp-extended} module\\
-% Manipulating numbers with extended precision, for internal use^^A
-% }
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3fp-extended} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=fp>
-% \end{macrocode}
-%
-% \subsection{Description of fixed point numbers}
-%
-% This module provides a few functions to manipulate positive floating
-% point numbers with extended precision ($24$ digits), but mostly
-% provides functions for fixed-point numbers with this precision ($24$
-% digits). Those are used in the computation of
-% Taylor series for the logarithm, exponential, and trigonometric
-% functions. Since we eventually only care about the $16$ first digits
-% of the final result, some of the calculations are not performed with
-% the full $24$-digit precision. In other words, the last two blocks of
-% each fixed point number may be wrong as long as the error is small
-% enough to be rounded away when converting back to a floating point
-% number. The fixed point numbers are expressed as
-% \begin{quote}
-% \Arg{a_1} \Arg{a_2} \Arg{a_3} \Arg{a_4} \Arg{a_5} \Arg{a_6} |;|
-% \end{quote}
-% where each \meta{a_i} is exactly $4$ digits (ranging from |0000| to
-% |9999|), except \meta{a_1}, which may be any \enquote{not-too-large}
-% non-negative integer, with or without leading zeros. Here,
-% \enquote{not-too-large} depends on the specific function (see the
-% corresponding comments for details). Checking for overflow is the
-% responsibility of the code calling those functions. The fixed point
-% number $a$ corresponding to the representation above is $a =
-% \sum_{i=1}^{6} \meta{a_i} \cdot 10^{-4i}$.
-%
-% Most functions we define here have the form
-% \begin{syntax}
-% \cs{@@_fixed_\meta{calculation}:wwn} \meta{operand_1} |;| \meta{operand_2} |;| \Arg{continuation}
-% \end{syntax}
-% They perform the \meta{calculation} on the two \meta{operands}, then
-% feed the result ($6$ brace groups followed by a semicolon) to the
-% \meta{continuation}, responsible for the next step of the calculation.
-% Some functions only accept an \texttt{N}-type \meta{continuation}.
-% This allows constructions such as
-% \begin{quote}
-% \cs{@@_fixed_add:wwn} \meta{X_1} |;| \meta{X_2} |;| \\
-% \cs{@@_fixed_mul:wwn} \meta{X_3} |;| \\
-% \cs{@@_fixed_add:wwn} \meta{X_4} |;| \\
-% \end{quote}
-% to compute $(X_1+X_2)\cdot X_3 + X_4$. This turns out to be very
-% appropriate for computing continued fractions and Taylor series.
-%
-% At the end of the calculation, the result is turned back to a floating
-% point number using \cs{@@_fixed_to_float_o:wN}. This function has to
-% change the exponent of the floating point number: it must be used
-% after starting an integer expression for the overall exponent of the
-% result.
-%
-% \subsection{Helpers for numbers with extended precision}
-%
-% \begin{variable}{\c_@@_one_fixed_tl}
-% The fixed-point number~$1$, used in \pkg{l3fp-expo}.
-% \begin{macrocode}
-\tl_const:Nn \c_@@_one_fixed_tl
- { {10000} {0000} {0000} {0000} {0000} {0000} ; }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[EXP]{\@@_fixed_continue:wn}
-% This function simply calls the next function.
-% \begin{macrocode}
-\cs_new:Npn \@@_fixed_continue:wn #1; #2 { #2 #1; }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_fixed_add_one:wN}
-% \begin{syntax}
-% \cs{@@_fixed_add_one:wN} \meta{a} |;| \meta{continuation}
-% \end{syntax}
-% This function adds $1$ to the fixed point \meta{a}, by changing
-% $a_1$ to $10000+a_1$, then calls the \meta{continuation}. This
-% requires $a_1 + 10000 < 2^{31}$.
-% \begin{macrocode}
-\cs_new:Npn \@@_fixed_add_one:wN #1#2; #3
- {
- \exp_after:wN #3 \exp_after:wN
- { \int_value:w \@@_int_eval:w \c_@@_myriad_int + #1 } #2 ;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_fixed_div_myriad:wn}
-% Divide a fixed point number by $10000$. This is a little bit more
-% subtle than just removing the last group and adding a leading group
-% of zeros: the first group~|#1| may have any number of digits, and we
-% must split~|#1| into the new first group and a second group of
-% exactly $4$~digits. The choice of shifts allows~|#1| to be in the
-% range $[0, 5\cdot 10^{8}-1]$.
-% \begin{macrocode}
-\cs_new:Npn \@@_fixed_div_myriad:wn #1#2#3#4#5#6;
- {
- \exp_after:wN \@@_fixed_mul_after:wwn
- \int_value:w \@@_int_eval:w \c_@@_leading_shift_int
- \exp_after:wN \@@_pack:NNNNNw
- \int_value:w \@@_int_eval:w \c_@@_trailing_shift_int
- + #1 ; {#2}{#3}{#4}{#5};
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_fixed_mul_after:wwn}
-% The fixed point operations which involve multiplication end by
-% calling this auxiliary. It braces the last block of digits, and
-% places the \meta{continuation} |#3| in front.
-% \begin{macrocode}
-\cs_new:Npn \@@_fixed_mul_after:wwn #1; #2; #3 { #3 {#1} #2; }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Multiplying a fixed point number by a short one}
-%
-% \begin{macro}[EXP]{\@@_fixed_mul_short:wwn}
-% \begin{syntax}\parskip=0pt\obeylines
-% \cs{@@_fixed_mul_short:wwn}
-% | |\Arg{a_1} \Arg{a_2} \Arg{a_3} \Arg{a_4} \Arg{a_5} \Arg{a_6} |;|
-% | |\Arg{b_0} \Arg{b_1} \Arg{b_2} |;| \Arg{continuation}
-% \end{syntax}
-% Computes the product $c=ab$ of $a=\sum_i \meta{a_i} 10^{-4i}$ and
-% $b=\sum_i \meta{b_i} 10^{-4i}$, rounds it to the closest multiple of
-% $10^{-24}$, and leaves \meta{continuation} \Arg{c_1} \ldots{}
-% \Arg{c_6} |;| in the input stream, where each of the \meta{c_i} are
-% blocks of $4$~digits, except \meta{c_1}, which is any \TeX{}
-% integer. Note that indices for \meta{b} start at~$0$: for instance
-% a second operand of |{0001}{0000}{0000}| leaves the first operand
-% unchanged (rather than dividing it by $10^{4}$, as
-% \cs{@@_fixed_mul:wwn} would).
-% \begin{macrocode}
-\cs_new:Npn \@@_fixed_mul_short:wwn #1#2#3#4#5#6; #7#8#9;
- {
- \exp_after:wN \@@_fixed_mul_after:wwn
- \int_value:w \@@_int_eval:w \c_@@_leading_shift_int
- + #1*#7
- \exp_after:wN \@@_pack:NNNNNw
- \int_value:w \@@_int_eval:w \c_@@_middle_shift_int
- + #1*#8 + #2*#7
- \exp_after:wN \@@_pack:NNNNNw
- \int_value:w \@@_int_eval:w \c_@@_middle_shift_int
- + #1*#9 + #2*#8 + #3*#7
- \exp_after:wN \@@_pack:NNNNNw
- \int_value:w \@@_int_eval:w \c_@@_middle_shift_int
- + #2*#9 + #3*#8 + #4*#7
- \exp_after:wN \@@_pack:NNNNNw
- \int_value:w \@@_int_eval:w \c_@@_middle_shift_int
- + #3*#9 + #4*#8 + #5*#7
- \exp_after:wN \@@_pack:NNNNNw
- \int_value:w \@@_int_eval:w \c_@@_trailing_shift_int
- + #4*#9 + #5*#8 + #6*#7
- + ( #5*#9 + #6*#8 + #6*#9 / \c_@@_myriad_int )
- / \c_@@_myriad_int ; ;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Dividing a fixed point number by a small integer}
-%
-% \begin{macro}[EXP]{\@@_fixed_div_int:wwN}
-% \begin{macro}[EXP]
-% {
-% \@@_fixed_div_int:wnN, \@@_fixed_div_int_auxi:wnn,
-% \@@_fixed_div_int_auxii:wnn, \@@_fixed_div_int_pack:Nw,
-% \@@_fixed_div_int_after:Nw
-% }
-% \begin{syntax}
-% \cs{@@_fixed_div_int:wwN} \meta{a} |;| \meta{n} |;| \meta{continuation}
-% \end{syntax}
-% Divides the fixed point number \meta{a} by the (small) integer
-% $0<\meta{n}<10^4$ and feeds the result to the \meta{continuation}.
-% There is no bound on $a_1$.
-%
-% The arguments of the \texttt{i} auxiliary are 1: one of the $a_{i}$,
-% 2: $n$, 3: the \texttt{ii} or the \texttt{iii} auxiliary. It
-% computes a (somewhat tight) lower bound $Q_{i}$ for the ratio
-% $a_{i}/n$.
-%
-% The \texttt{ii} auxiliary receives $Q_{i}$, $n$, and $a_{i}$ as
-% arguments. It adds $Q_{i}$ to a surrounding integer expression, and
-% starts a new one with the initial value $9999$, which ensures that
-% the result of this expression has $5$ digits. The auxiliary
-% also computes $a_{i}-n\cdot Q_{i}$, placing the result in front of
-% the $4$ digits of $a_{i+1}$. The resulting $a'_{i+1} = 10^{4}
-% (a_{i} - n \cdot Q_{i}) + a_{i+1}$ serves as the first argument for
-% a new call to the \texttt{i} auxiliary.
-%
-% When the \texttt{iii} auxiliary is called, the situation looks like
-% this:
-% \begin{quote}
-% \cs{@@_fixed_div_int_after:Nw} \meta{continuation} \\
-% $-1 + Q_{1}$ \\
-% \cs{@@_fixed_div_int_pack:Nw} $9999 + Q_{2}$ \\
-% \cs{@@_fixed_div_int_pack:Nw} $9999 + Q_{3}$ \\
-% \cs{@@_fixed_div_int_pack:Nw} $9999 + Q_{4}$ \\
-% \cs{@@_fixed_div_int_pack:Nw} $9999 + Q_{5}$ \\
-% \cs{@@_fixed_div_int_pack:Nw} $9999$ \\
-% \cs{@@_fixed_div_int_auxii:wnn} $Q_{6}$ |;| \Arg{n} \Arg{a_{6}}
-% \end{quote}
-% where expansion is happening from the last line up. The
-% \texttt{iii} auxiliary adds $Q_{6} + 2 \simeq a_{6}/n + 1$ to the
-% last $9999$, giving the integer closest to $10000 + a_{6}/n$.
-%
-% Each \texttt{pack} auxiliary receives $5$ digits followed by a
-% semicolon. The first digit is added as a carry to the integer
-% expression above, and the $4$ other digits are braced. Each call to
-% the \texttt{pack} auxiliary thus produces one brace group. The last
-% brace group is produced by the \texttt{after} auxiliary, which
-% places the \meta{continuation} as appropriate.
-% \begin{macrocode}
-\cs_new:Npn \@@_fixed_div_int:wwN #1#2#3#4#5#6 ; #7 ; #8
- {
- \exp_after:wN \@@_fixed_div_int_after:Nw
- \exp_after:wN #8
- \int_value:w \@@_int_eval:w - 1
- \@@_fixed_div_int:wnN
- #1; {#7} \@@_fixed_div_int_auxi:wnn
- #2; {#7} \@@_fixed_div_int_auxi:wnn
- #3; {#7} \@@_fixed_div_int_auxi:wnn
- #4; {#7} \@@_fixed_div_int_auxi:wnn
- #5; {#7} \@@_fixed_div_int_auxi:wnn
- #6; {#7} \@@_fixed_div_int_auxii:wnn ;
- }
-\cs_new:Npn \@@_fixed_div_int:wnN #1; #2 #3
- {
- \exp_after:wN #3
- \int_value:w \@@_int_eval:w #1 / #2 - 1 ;
- {#2}
- {#1}
- }
-\cs_new:Npn \@@_fixed_div_int_auxi:wnn #1; #2 #3
- {
- + #1
- \exp_after:wN \@@_fixed_div_int_pack:Nw
- \int_value:w \@@_int_eval:w 9999
- \exp_after:wN \@@_fixed_div_int:wnN
- \int_value:w \@@_int_eval:w #3 - #1*#2 \@@_int_eval_end:
- }
-\cs_new:Npn \@@_fixed_div_int_auxii:wnn #1; #2 #3 { + #1 + 2 ; }
-\cs_new:Npn \@@_fixed_div_int_pack:Nw #1 #2; { + #1; {#2} }
-\cs_new:Npn \@@_fixed_div_int_after:Nw #1 #2; { #1 {#2} }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Adding and subtracting fixed points}
-%
-% \begin{macro}[EXP]{\@@_fixed_add:wwn, \@@_fixed_sub:wwn}
-% \begin{macro}[EXP]
-% {
-% \@@_fixed_add:Nnnnnwnn,
-% \@@_fixed_add:nnNnnnwn,
-% \@@_fixed_add_pack:NNNNNwn,
-% \@@_fixed_add_after:NNNNNwn
-% }
-% \begin{syntax}
-% \cs{@@_fixed_add:wwn} \meta{a} |;| \meta{b} |;| \Arg{continuation}
-% \end{syntax}
-% Computes $a+b$ (resp.\ $a-b$) and feeds the result to the
-% \meta{continuation}. This function requires $0\leq a_{1},b_{1}\leq
-% 114748$, its result must be positive (this happens automatically for
-% addition) and its first group must have at most~$5$ digits: $(a\pm
-% b)_{1}<100000$. The two functions only differ by
-% a sign, hence use a common auxiliary. It would be nice to grab the
-% $12$ brace groups in one go; only $9$ parameters are allowed. Start
-% by grabbing the sign, $a_{1}, \ldots, a_{4}$, the rest of $a$,
-% and $b_{1}$ and $b_{2}$. The second auxiliary receives the rest of
-% $a$, the sign multiplying $b$, the rest of $b$, and the
-% \meta{continuation} as arguments. After going down through the
-% various level, we go back up, packing digits and bringing the
-% \meta{continuation} (|#8|, then |#7|) from the end of the argument
-% list to its start.
-% \begin{macrocode}
-\cs_new:Npn \@@_fixed_add:wwn { \@@_fixed_add:Nnnnnwnn + }
-\cs_new:Npn \@@_fixed_sub:wwn { \@@_fixed_add:Nnnnnwnn - }
-\cs_new:Npn \@@_fixed_add:Nnnnnwnn #1 #2#3#4#5 #6; #7#8
- {
- \exp_after:wN \@@_fixed_add_after:NNNNNwn
- \int_value:w \@@_int_eval:w 9 9999 9998 + #2#3 #1 #7#8
- \exp_after:wN \@@_fixed_add_pack:NNNNNwn
- \int_value:w \@@_int_eval:w 1 9999 9998 + #4#5
- \@@_fixed_add:nnNnnnwn #6 #1
- }
-\cs_new:Npn \@@_fixed_add:nnNnnnwn #1#2 #3 #4#5 #6#7 ; #8
- {
- #3 #4#5
- \exp_after:wN \@@_fixed_add_pack:NNNNNwn
- \int_value:w \@@_int_eval:w 2 0000 0000 #3 #6#7 + #1#2 ; {#8} ;
- }
-\cs_new:Npn \@@_fixed_add_pack:NNNNNwn #1 #2#3#4#5 #6; #7
- { + #1 ; {#7} {#2#3#4#5} {#6} }
-\cs_new:Npn \@@_fixed_add_after:NNNNNwn 1 #1 #2#3#4#5 #6; #7
- { #7 {#1#2#3#4#5} {#6} }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Multiplying fixed points}
-%
-% ^^A todo: may a_1 or b_1 be = 10000? Used in ediv_epsi later.
-% \begin{macro}[EXP]{\@@_fixed_mul:wwn}
-% \begin{macro}[EXP]{\@@_fixed_mul:nnnnnnnw}
-% \begin{syntax}
-% \cs{@@_fixed_mul:wwn} \meta{a} |;| \meta{b} |;| \Arg{continuation}
-% \end{syntax}
-% Computes $a\times b$ and feeds the result to \meta{continuation}.
-% This function requires $0\leq a_{1}, b_{1} < 10000$. Once more, we
-% need to play around the limit of $9$ arguments for \TeX{} macros.
-% Note that we don't need to obtain an exact rounding, contrarily to
-% the |*| operator, so things could be harder. We wish to perform
-% carries in
-% \begin{align*}
-% a \times b =
-% & a_{1} \cdot b_{1} \cdot 10^{-8} \\
-% & + (a_{1} \cdot b_{2} + a_{2} \cdot b_{1}) \cdot 10^{-12} \\
-% & + (a_{1} \cdot b_{3} + a_{2} \cdot b_{2}
-% + a_{3} \cdot b_{1}) \cdot 10^{-16} \\
-% & + (a_{1} \cdot b_{4} + a_{2} \cdot b_{3}
-% + a_{3} \cdot b_{2} + a_{4} \cdot b_{1}) \cdot 10^{-20} \\
-% & + \Bigl(a_{2} \cdot b_{4} + a_{3} \cdot b_{3} + a_{4} \cdot b_{2}
-% \\ & \qquad
-% + \frac{a_{3} \cdot b_{4} + a_{4} \cdot b_{3}
-% + a_{1} \cdot b_{6} + a_{2} \cdot b_{5}
-% + a_{5} \cdot b_{2} + a_{6} \cdot b_{1}}{10^{4}}
-% \\ & \qquad
-% + a_{1} \cdot b_{5} + a_{5} \cdot b_{1}\Bigr) \cdot 10^{-24}
-% + O(10^{-24}),
-% \end{align*}
-% where the $O(10^{-24})$ stands for terms which are at most $5\cdot
-% 10^{-24}$; ignoring those leads to an error of at most
-% $5$~\texttt{ulp}. Note how the first $15$~terms only depend on
-% $a_{1},\ldots{},a_{4}$ and $b_{1},\ldots,b_{4}$, while the last
-% $6$~terms only depend on $a_{1},a_{2},a_{5},a_{6}$, and the
-% corresponding parts of~$b$. Hence, the first function grabs
-% $a_{1},\ldots,a_{4}$, the rest of $a$, and $b_{1},\ldots,b_{4}$, and
-% writes the $15$ first terms of the expression, including a left
-% parenthesis for the fraction. The \texttt{i} auxiliary receives
-% $a_{5}$, $a_{6}$, $b_{1}$, $b_{2}$, $a_{1}$, $a_{2}$, $b_{5}$,
-% $b_{6}$ and finally the \meta{continuation} as arguments. It writes
-% the end of the expression, including the right parenthesis and the
-% denominator of the fraction. The \meta{continuation}
-% is finally placed in front of the $6$ brace groups by
-% \cs{@@_fixed_mul_after:wwn}.
-% \begin{macrocode}
-\cs_new:Npn \@@_fixed_mul:wwn #1#2#3#4 #5; #6#7#8#9
- {
- \exp_after:wN \@@_fixed_mul_after:wwn
- \int_value:w \@@_int_eval:w \c_@@_leading_shift_int
- \exp_after:wN \@@_pack:NNNNNw
- \int_value:w \@@_int_eval:w \c_@@_middle_shift_int
- + #1*#6
- \exp_after:wN \@@_pack:NNNNNw
- \int_value:w \@@_int_eval:w \c_@@_middle_shift_int
- + #1*#7 + #2*#6
- \exp_after:wN \@@_pack:NNNNNw
- \int_value:w \@@_int_eval:w \c_@@_middle_shift_int
- + #1*#8 + #2*#7 + #3*#6
- \exp_after:wN \@@_pack:NNNNNw
- \int_value:w \@@_int_eval:w \c_@@_middle_shift_int
- + #1*#9 + #2*#8 + #3*#7 + #4*#6
- \exp_after:wN \@@_pack:NNNNNw
- \int_value:w \@@_int_eval:w \c_@@_trailing_shift_int
- + #2*#9 + #3*#8 + #4*#7
- + ( #3*#9 + #4*#8
- + \@@_fixed_mul:nnnnnnnw #5 {#6}{#7} {#1}{#2}
- }
-\cs_new:Npn \@@_fixed_mul:nnnnnnnw #1#2 #3#4 #5#6 #7#8 ;
- {
- #1*#4 + #2*#3 + #5*#8 + #6*#7 ) / \c_@@_myriad_int
- + #1*#3 + #5*#7 ; ;
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Combining product and sum of fixed points}
-%
-% \begin{macro}[EXP]
-% {
-% \@@_fixed_mul_add:wwwn,
-% \@@_fixed_mul_sub_back:wwwn,
-% \@@_fixed_mul_one_minus_mul:wwn,
-% }
-% \begin{syntax}
-% \cs{@@_fixed_mul_add:wwwn} \meta{a} |;| \meta{b} |;| \meta{c} |;| \Arg{continuation}
-% \cs{@@_fixed_mul_sub_back:wwwn} \meta{a} |;| \meta{b} |;| \meta{c} |;| \Arg{continuation}
-% \cs{@@_fixed_one_minus_mul:wwn} \meta{a} |;| \meta{b} |;| \Arg{continuation}
-% \end{syntax}
-% Sometimes called |FMA| (fused multiply-add), these functions
-% compute $a\times b + c$, $c - a\times b$, and $1 - a\times b$ and
-% feed the result to the \meta{continuation}. Those functions require
-% $0\leq a_{1}, b_{1}, c_{1} \leq 10000$. Since those functions are
-% at the heart of the computation of Taylor expansions, we
-% over-optimize them a bit, and in particular we do not factor out the
-% common parts of the three functions.
-%
-% For definiteness, consider the task of computing $a\times b + c$.
-% We perform carries in
-% \begin{align*}
-% a \times b + c =
-% & (a_{1} \cdot b_{1} + c_{1} c_{2})\cdot 10^{-8} \\
-% & + (a_{1} \cdot b_{2} + a_{2} \cdot b_{1}) \cdot 10^{-12} \\
-% & + (a_{1} \cdot b_{3} + a_{2} \cdot b_{2} + a_{3} \cdot b_{1}
-% + c_{3} c_{4}) \cdot 10^{-16} \\
-% & + (a_{1} \cdot b_{4} + a_{2} \cdot b_{3} + a_{3} \cdot b_{2}
-% + a_{4} \cdot b_{1}) \cdot 10^{-20} \\
-% & + \Big(a_{2} \cdot b_{4} + a_{3} \cdot b_{3} + a_{4} \cdot b_{2}
-% \\ & \qquad
-% + \frac{a_{3} \cdot b_{4} + a_{4} \cdot b_{3}
-% + a_{1} \cdot b_{6} + a_{2} \cdot b_{5}
-% + a_{5} \cdot b_{2} + a_{6} \cdot b_{1}}{10^{4}}
-% \\ & \qquad
-% + a_{1} \cdot b_{5} + a_{5} \cdot b_{1}
-% + c_{5} c_{6} \Big) \cdot 10^{-24}
-% + O(10^{-24}),
-% \end{align*}
-% where $c_{1} c_{2}$, $c_{3} c_{4}$, $c_{5} c_{6}$ denote the
-% $8$-digit number obtained by juxtaposing the two blocks of digits of
-% $c$, and $\cdot$ denotes multiplication. The task is obviously
-% tough because we have $18$ brace groups in front of us.
-%
-% Each of the three function starts the first two levels (the first,
-% corresponding to $10^{-4}$, is empty), with $c_{1} c_{2}$ in the
-% first level, calls the \texttt{i} auxiliary with arguments described
-% later, and adds a trailing ${} + c_{5}c_{6}$ |;|
-% \Arg{continuation}~|;|. The ${} + c_{5}c_{6}$ piece, which is
-% omitted for \cs{@@_fixed_one_minus_mul:wwn}, is taken in the
-% integer expression for the $10^{-24}$ level.
-% \begin{macrocode}
-\cs_new:Npn \@@_fixed_mul_add:wwwn #1; #2; #3#4#5#6#7#8;
- {
- \exp_after:wN \@@_fixed_mul_after:wwn
- \int_value:w \@@_int_eval:w \c_@@_big_leading_shift_int
- \exp_after:wN \@@_pack_big:NNNNNNw
- \int_value:w \@@_int_eval:w \c_@@_big_middle_shift_int + #3 #4
- \@@_fixed_mul_add:Nwnnnwnnn +
- + #5 #6 ; #2 ; #1 ; #2 ; +
- + #7 #8 ; ;
- }
-\cs_new:Npn \@@_fixed_mul_sub_back:wwwn #1; #2; #3#4#5#6#7#8;
- {
- \exp_after:wN \@@_fixed_mul_after:wwn
- \int_value:w \@@_int_eval:w \c_@@_big_leading_shift_int
- \exp_after:wN \@@_pack_big:NNNNNNw
- \int_value:w \@@_int_eval:w \c_@@_big_middle_shift_int + #3 #4
- \@@_fixed_mul_add:Nwnnnwnnn -
- + #5 #6 ; #2 ; #1 ; #2 ; -
- + #7 #8 ; ;
- }
-\cs_new:Npn \@@_fixed_one_minus_mul:wwn #1; #2;
- {
- \exp_after:wN \@@_fixed_mul_after:wwn
- \int_value:w \@@_int_eval:w \c_@@_big_leading_shift_int
- \exp_after:wN \@@_pack_big:NNNNNNw
- \int_value:w \@@_int_eval:w \c_@@_big_middle_shift_int +
- 1 0000 0000
- \@@_fixed_mul_add:Nwnnnwnnn -
- ; #2 ; #1 ; #2 ; -
- ; ;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_fixed_mul_add:Nwnnnwnnn}
-% \begin{syntax}
-% \cs{@@_fixed_mul_add:Nwnnnwnnn} \meta{op} |+| \meta{c_3} \meta{c_4} |;|
-% ~~\meta{b} |;| \meta{a} |;| \meta{b} |;| \meta{op}
-% ~~|+| \meta{c_5} \meta{c_6} |;|
-% \end{syntax}
-% Here, \meta{op} is either |+| or |-|. Arguments |#3|, |#4|, |#5|
-% are \meta{b_1}, \meta{b_2}, \meta{b_3}; arguments |#7|, |#8|, |#9|
-% are \meta{a_1}, \meta{a_2}, \meta{a_3}. We can build three levels:
-% $a_{1} \cdot b_{1}$ for $10^{-8}$, $(a_{1} \cdot b_{2} + a_{2} \cdot
-% b_{1})$ for $10^{-12}$, and $(a_{1} \cdot b_{3} + a_{2} \cdot b_{2}
-% + a_{3} \cdot b_{1} + c_{3} c_{4})$ for $10^{-16}$. The $a$--$b$
-% products use the sign |#1|. Note that |#2| is empty for
-% \cs{@@_fixed_one_minus_mul:wwn}. We call the \texttt{ii} auxiliary
-% for levels $10^{-20}$ and $10^{-24}$, keeping the pieces of \meta{a}
-% we've read, but not \meta{b}, since there is another copy later in
-% the input stream.
-% \begin{macrocode}
-\cs_new:Npn \@@_fixed_mul_add:Nwnnnwnnn #1 #2; #3#4#5#6; #7#8#9
- {
- #1 #7*#3
- \exp_after:wN \@@_pack_big:NNNNNNw
- \int_value:w \@@_int_eval:w \c_@@_big_middle_shift_int
- #1 #7*#4 #1 #8*#3
- \exp_after:wN \@@_pack_big:NNNNNNw
- \int_value:w \@@_int_eval:w \c_@@_big_middle_shift_int
- #1 #7*#5 #1 #8*#4 #1 #9*#3 #2
- \exp_after:wN \@@_pack_big:NNNNNNw
- \int_value:w \@@_int_eval:w \c_@@_big_middle_shift_int
- #1 \@@_fixed_mul_add:nnnnwnnnn {#7}{#8}{#9}
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_fixed_mul_add:nnnnwnnnn}
-% \begin{syntax}
-% \cs{@@_fixed_mul_add:nnnnwnnnn} \meta{a} |;| \meta{b} |;| \meta{op}
-% ~~|+| \meta{c_5} \meta{c_6} |;|
-% \end{syntax}
-% Level $10^{-20}$ is $(a_{1} \cdot b_{4} + a_{2} \cdot b_{3} + a_{3}
-% \cdot b_{2} + a_{4} \cdot b_{1})$, multiplied by the sign, which was
-% inserted by the \texttt{i} auxiliary. Then we prepare level
-% $10^{-24}$. We don't have access to all parts of \meta{a} and
-% \meta{b} needed to make all products. Instead, we prepare the
-% partial expressions
-% \begin{align*}
-% & b_{1} + a_{4} \cdot b_{2} + a_{3} \cdot b_{3} + a_{2} \cdot b_{4} + a_{1} \\
-% & b_{2} + a_{4} \cdot b_{3} + a_{3} \cdot b_{4} + a_{2} .
-% \end{align*}
-% Obviously, those expressions make no mathematical sense: we
-% complete them with $a_{5} \cdot {}$ and ${} \cdot b_{5}$, and with
-% $a_{6} \cdot b_{1} + a_{5} \cdot {}$ and ${} \cdot b_{5} + a_{1}
-% \cdot b_{6}$, and of course with the trailing ${} + c_{5} c_{6}$.
-% To do all this, we keep $a_{1}$, $a_{5}$, $a_{6}$, and the
-% corresponding pieces of \meta{b}.
-% \begin{macrocode}
-\cs_new:Npn \@@_fixed_mul_add:nnnnwnnnn #1#2#3#4#5; #6#7#8#9
- {
- ( #1*#9 + #2*#8 + #3*#7 + #4*#6 )
- \exp_after:wN \@@_pack_big:NNNNNNw
- \int_value:w \@@_int_eval:w \c_@@_big_trailing_shift_int
- \@@_fixed_mul_add:nnnnwnnwN
- { #6 + #4*#7 + #3*#8 + #2*#9 + #1 }
- { #7 + #4*#8 + #3*#9 + #2 }
- {#1} #5;
- {#6}
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_fixed_mul_add:nnnnwnnwN}
-% \begin{syntax}
-% \cs{@@_fixed_mul_add:nnnnwnnwN} \Arg{partial_1} \Arg{partial_2}
-% ~~\Arg{a_1} \Arg{a_5} \Arg{a_6} |;| \Arg{b_1} \Arg{b_5} \Arg{b_6} |;|
-% ~~\meta{op} |+| \meta{c_5} \meta{c_6} |;|
-% \end{syntax}
-% Complete the \meta{partial_1} and \meta{partial_2} expressions as
-% explained for the \texttt{ii} auxiliary. The second one is divided
-% by $10000$: this is the carry from level $10^{-28}$. The trailing
-% ${} + c_{5} c_{6}$ is taken into the expression for level
-% $10^{-24}$. Note that the total of level $10^{-24}$ is in the
-% interval $[-5\cdot 10^{8}, 6\cdot 10^{8}$ (give or take a couple of
-% $10000$), hence adding it to the shift gives a $10$-digit number, as
-% expected by the packing auxiliaries. See \pkg{l3fp-aux} for the
-% definition of the shifts and packing auxiliaries.
-% \begin{macrocode}
-\cs_new:Npn \@@_fixed_mul_add:nnnnwnnwN #1#2 #3#4#5; #6#7#8; #9
- {
- #9 (#4* #1 *#7)
- #9 (#5*#6+#4* #2 *#7+#3*#8) / \c_@@_myriad_int
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Extended-precision floating point numbers}
-%
-% In this section we manipulate floating point numbers with roughly $24$
-% significant figures (\enquote{extended-precision} numbers, in short,
-% \enquote{ep}), which take the form of an integer exponent, followed by a
-% comma, then six groups of digits, ending with a semicolon. The first
-% group of digit may be any non-negative integer, while other groups of
-% digits have $4$~digits. In other words, an extended-precision number
-% is an exponent ending in a comma, then a fixed point number. The
-% corresponding value is $0.\meta{digits}\cdot 10^{\meta{exponent}}$.
-% This convention differs from floating points.
-%
-% \begin{macro}[EXP]{\@@_ep_to_fixed:wwn}
-% \begin{macro}[EXP]
-% {\@@_ep_to_fixed_auxi:www, \@@_ep_to_fixed_auxii:nnnnnnnwn}
-% Converts an extended-precision number with an exponent at most~$4$
-% and a first block less than $10^{8}$ to a fixed point number whose
-% first block has $12$~digits, hopefully starting with many zeros.
-% \begin{macrocode}
-\cs_new:Npn \@@_ep_to_fixed:wwn #1,#2
- {
- \exp_after:wN \@@_ep_to_fixed_auxi:www
- \int_value:w \@@_int_eval:w 1 0000 0000 + #2 \exp_after:wN ;
- \exp:w \exp_end_continue_f:w
- \prg_replicate:nn { 4 - \int_max:nn {#1} { -32 } } { 0 } ;
- }
-\cs_new:Npn \@@_ep_to_fixed_auxi:www 1#1; #2; #3#4#5#6#7;
- {
- \@@_pack_eight:wNNNNNNNN
- \@@_pack_twice_four:wNNNNNNNN
- \@@_pack_twice_four:wNNNNNNNN
- \@@_pack_twice_four:wNNNNNNNN
- \@@_ep_to_fixed_auxii:nnnnnnnwn ;
- #2 #1#3#4#5#6#7 0000 !
- }
-\cs_new:Npn \@@_ep_to_fixed_auxii:nnnnnnnwn #1#2#3#4#5#6#7; #8! #9
- { #9 {#1#2}{#3}{#4}{#5}{#6}{#7}; }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% ^^A todo: make it work when the arg is zero.
-% \begin{macro}[EXP]{\@@_ep_to_ep:wwN}
-% \begin{macro}[rEXP]{\@@_ep_to_ep_loop:N, \@@_ep_to_ep_end:www}
-% \begin{macro}[EXP]{\@@_ep_to_ep_zero:ww}
-% Normalize an extended-precision number. More precisely, leading
-% zeros are removed from the mantissa of the argument, decreasing its
-% exponent as appropriate. Then the digits are packed into $6$~groups
-% of~$4$ (discarding any remaining digit, not rounding). Finally, the
-% continuation~|#8| is placed before the resulting exponent--mantissa
-% pair. The input exponent may in fact be given as an integer
-% expression. The \texttt{loop} auxiliary grabs a digit: if it
-% is~$0$, decrement the exponent and continue looping, and otherwise
-% call the \texttt{end} auxiliary, which places all digits in the
-% right order (the digit that was not~$0$, and any remaining digits),
-% followed by some~$0$, then packs them up neatly in $3\times2=6$
-% blocks of four. At the end of the day, remove with \cs{@@_use_i:ww}
-% any digit that did not make it in the final mantissa (typically only
-% zeros, unless the original first block has more than~$4$ digits).
-% \begin{macrocode}
-\cs_new:Npn \@@_ep_to_ep:wwN #1,#2#3#4#5#6#7; #8
- {
- \exp_after:wN #8
- \int_value:w \@@_int_eval:w #1 + 4
- \exp_after:wN \use_i:nn
- \exp_after:wN \@@_ep_to_ep_loop:N
- \int_value:w \@@_int_eval:w 1 0000 0000 + #2 \@@_int_eval_end:
- #3#4#5#6#7 ; ; !
- }
-\cs_new:Npn \@@_ep_to_ep_loop:N #1
- {
- \if_meaning:w 0 #1
- - 1
- \else:
- \@@_ep_to_ep_end:www #1
- \fi:
- \@@_ep_to_ep_loop:N
- }
-\cs_new:Npn \@@_ep_to_ep_end:www
- #1 \fi: \@@_ep_to_ep_loop:N #2; #3!
- {
- \fi:
- \if_meaning:w ; #1
- - 2 * \c_@@_max_exponent_int
- \@@_ep_to_ep_zero:ww
- \fi:
- \@@_pack_twice_four:wNNNNNNNN
- \@@_pack_twice_four:wNNNNNNNN
- \@@_pack_twice_four:wNNNNNNNN
- \@@_use_i:ww , ;
- #1 #2 0000 0000 0000 0000 0000 0000 ;
- }
-\cs_new:Npn \@@_ep_to_ep_zero:ww \fi: #1; #2; #3;
- { \fi: , {1000}{0000}{0000}{0000}{0000}{0000} ; }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_ep_compare:wwww}
-% \begin{macro}[EXP]{\@@_ep_compare_aux:wwww}
-% In \pkg{l3fp-trig} we need to compare two extended-precision
-% numbers. This is based on the same function for positive floating
-% point numbers, with an extra test if comparing only $16$ decimals is
-% not enough to distinguish the numbers. Note that this function only
-% works if the numbers are normalized so that their first block is
-% in~$[1000,9999]$.
-% \begin{macrocode}
-\cs_new:Npn \@@_ep_compare:wwww #1,#2#3#4#5#6#7;
- { \@@_ep_compare_aux:wwww {#1}{#2}{#3}{#4}{#5}; #6#7; }
-\cs_new:Npn \@@_ep_compare_aux:wwww #1;#2;#3,#4#5#6#7#8#9;
- {
- \if_case:w
- \@@_compare_npos:nwnw #1; {#3}{#4}{#5}{#6}{#7}; \exp_stop_f:
- \if_int_compare:w #2 = #8#9 \exp_stop_f:
- 0
- \else:
- \if_int_compare:w #2 < #8#9 - \fi: 1
- \fi:
- \or: 1
- \else: -1
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% ^^A todo: doc that neither operand may be zero (or fix ep_to_ep above)
-% \begin{macro}[EXP]{\@@_ep_mul:wwwwn, \@@_ep_mul_raw:wwwwN}
-% Multiply two extended-precision numbers: first normalize them to
-% avoid losing too much precision, then multiply the mantissas |#2|
-% and~|#4| as fixed point numbers, and sum the exponents |#1|
-% and~|#3|. The result's first block is in $[100,9999]$.
-% \begin{macrocode}
-\cs_new:Npn \@@_ep_mul:wwwwn #1,#2; #3,#4;
- {
- \@@_ep_to_ep:wwN #3,#4;
- \@@_fixed_continue:wn
- {
- \@@_ep_to_ep:wwN #1,#2;
- \@@_ep_mul_raw:wwwwN
- }
- \@@_fixed_continue:wn
- }
-\cs_new:Npn \@@_ep_mul_raw:wwwwN #1,#2; #3,#4; #5
- {
- \@@_fixed_mul:wwn #2; #4;
- { \exp_after:wN #5 \int_value:w \@@_int_eval:w #1 + #3 , }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Dividing extended-precision numbers}
-%
-% \newcommand{\eTeXfrac}[2]{\left[\frac{#1}{#2}\right]}
-%
-% Divisions of extended-precision numbers are difficult to perform with
-% exact rounding: the technique used in \pkg{l3fp-basics} for $16$-digit
-% floating point numbers does not generalize easily to $24$-digit
-% numbers. Thankfully, there is no need for exact rounding.
-%
-% Let us call \meta{n} the numerator and \meta{d} the denominator.
-% After a simple normalization step, we can assume that
-% $\meta{n}\in[0.1,1)$ and $\meta{d}\in[0.1,1)$, and compute
-% $\meta{n}/(10\meta{d})\in(0.01,1)$. In terms of the $6$~blocks of
-% digits $\meta{n_1}\cdots\meta{n_6}$ and the $6$~blocks
-% $\meta{d_1}\cdots\meta{d_6}$, the condition translates to
-% $\meta{n_1},\meta{d_1}\in[1000,9999]$.
-%
-% We first find an integer estimate $a \simeq 10^{8} / \meta{d}$ by
-% computing
-% \begin{align*}
-% \alpha &= \eTeXfrac{10^{9}}{\meta{d_1}+1} \\
-% \beta &= \eTeXfrac{10^{9}}{\meta{d_1}} \\
-% a &= 10^{3} \alpha + (\beta-\alpha) \cdot
-% \left(10^{3}-\eTeXfrac{\meta{d_2}}{10}\right) - 1250,
-% \end{align*}
-% where $\eTeXfrac{\bullet}{\bullet}$ denotes \eTeX{}'s rounding
-% division, which rounds ties away from zero. The idea is to
-% interpolate between $10^{3}\alpha$ and $10^{3}\beta$ with a parameter
-% $\meta{d_2}/10^{4}$, so that when $\meta{d_2}=0$ one gets $a =
-% 10^{3}\beta-1250 \simeq 10^{12} / \meta{d_1} \simeq 10^{8} /
-% \meta{d}$, while when $\meta{d_2}=9999$ one gets $a =
-% 10^{3}\alpha-1250 \simeq 10^{12} / (\meta{d_1} + 1) \simeq 10^{8} /
-% \meta{d}$. The shift by $1250$ helps to ensure that $a$ is an
-% underestimate of the correct value. We shall prove that
-% \[
-% 1 - 1.755\cdot 10^{-5} < \frac{\meta{d}a}{10^{8}} < 1 .
-% \]
-% We can then compute the inverse of $\meta{d}a/10^{8} = 1 - \epsilon$
-% using the relation $1/(1-\epsilon) \simeq (1+\epsilon)(1+\epsilon^{2})
-% + \epsilon^{4}$, which is correct up to a relative error of
-% $\epsilon^5 < 1.6\cdot 10^{-24}$. This allows us to find the desired
-% ratio as
-% \[
-% \frac{\meta{n}}{\meta{d}}
-% = \frac{\meta{n}a}{10^{8}}
-% \bigl( (1+\epsilon)(1+\epsilon^{2}) + \epsilon^{4}\bigr) .
-% \]
-%
-% Let us prove the upper bound first (multiplied by $10^{15}$). Note
-% that $10^{7} \meta{d} < 10^{3} \meta{d_1} + 10^{-1} (\meta{d_2} + 1)$,
-% and that \eTeX{}'s division $\eTeXfrac{\meta{d_2}}{10}$ underestimates
-% $10^{-1}(\meta{d_2} + 1)$ by $0.5$ at most, as can be checked
-% for each possible last digit of \meta{d_2}. Then,
-% \begin{align}
-% 10^{7} \meta{d}a
-% & <
-% \left(10^{3}\meta{d_1}
-% + \eTeXfrac{\meta{d_2}}{10} + \frac{1}{2}\right)
-% \left(\left(10^{3}-\eTeXfrac{\meta{d_2}}{10}\right) \beta
-% + \eTeXfrac{\meta{d_2}}{10} \alpha - 1250\right)
-% \\
-% & <
-% \left(10^{3}\meta{d_1}
-% + \eTeXfrac{\meta{d_2}}{10} + \frac{1}{2}\right)
-% \\ & \qquad
-% \left(
-% \left(10^{3}-\eTeXfrac{\meta{d_2}}{10}\right)
-% \left(\frac{10^{9}}{\meta{d_1}} + \frac{1}{2} \right)
-% + \eTeXfrac{\meta{d_2}}{10}
-% \left(\frac{10^{9}}{\meta{d_1}+1} + \frac{1}{2} \right)
-% - 1250
-% \right)
-% \\
-% & <
-% \left(10^{3} \meta{d_1}
-% + \eTeXfrac{\meta{d_2}}{10} + \frac{1}{2}\right)
-% \left(\frac{10^{12}}{\meta{d_1}}
-% - \eTeXfrac{\meta{d_2}}{10}
-% \frac{10^{9}}{\meta{d_1}(\meta{d_1}+1)}
-% - 750\right)
-% \end{align}
-% We recognize a quadratic polynomial in $[\meta{d_2}/10]$ with a
-% negative leading coefficient: this polynomial is bounded above,
-% according to $([\meta{d_2}/10]+a)(b-c[\meta{d_2}/10]) \leq
-% (b+ca)^2/(4c)$. Hence,
-% \[
-% 10^{7} \meta{d}a
-% < \frac{10^{15}}{\meta{d_1}(\meta{d_1}+1)} \left(
-% \meta{d_1} + \frac{1}{2} + \frac{1}{4} 10^{-3}
-% - \frac{3}{8} \cdot 10^{-9} \meta{d_1}(\meta{d_1}+1) \right)^2
-% \]
-% Since \meta{d_1} takes integer values within $[1000,9999]$, it is a
-% simple programming exercise to check that the squared expression is
-% always less than $\meta{d_1}(\meta{d_1}+1)$, hence $10^{7} \meta{d} a
-% < 10^{15}$. The upper bound is proven. We also find that
-% $\frac{3}{8}$ can be replaced by slightly smaller numbers, but nothing
-% less than $0.374563\ldots$, and going back through the derivation of
-% the upper bound, we find that $1250$ is as small a shift as we can
-% obtain without breaking the bound.
-%
-% Now, the lower bound. The same computation as for the upper bound
-% implies
-% \[
-% 10^{7} \meta{d}a
-% > \left(10^{3} \meta{d_1} + \eTeXfrac{\meta{d_2}}{10}
-% - \frac{1}{2}\right)
-% \left(\frac{10^{12}}{\meta{d_1}}
-% - \eTeXfrac{\meta{d_2}}{10} \frac{10^{9}}{\meta{d_1}(\meta{d_1}+1)}
-% - 1750\right)
-% \]
-% This time, we want to find the minimum of this quadratic polynomial.
-% Since the leading coefficient is still negative, the minimum is
-% reached for one of the extreme values $[y/10]=0$ or $[y/10]=100$, and
-% we easily check the bound for those values.
-%
-% We have proven that the algorithm gives us a precise enough
-% answer. Incidentally, the upper bound that we derived tells us that
-% $a < 10^{8}/\meta{d} \leq 10^{9}$, hence we can compute $a$ safely as
-% a \TeX{} integer, and even add $10^{9}$ to it to ease grabbing of all
-% the digits. The lower bound implies $10^{8} - 1755 < a$, which we do
-% not care about.
-%
-% ^^A todo: provide ep_inv, not ep_div?
-% ^^A todo: make extra sure that the result's first block cannot be 99
-% ^^A todo: doc that neither operand may be zero (or fix ep_to_ep)
-% \begin{macro}[EXP]{\@@_ep_div:wwwwn}
-% Compute the ratio of two extended-precision numbers. The result is
-% an extended-precision number whose first block lies in the range
-% $[100,9999]$, and is placed after the \meta{continuation} once we
-% are done. First normalize the inputs so that both first block lie
-% in $[1000,9999]$, then call \cs{@@_ep_div_esti:wwwwn}
-% \meta{denominator} \meta{numerator}, responsible for estimating the
-% inverse of the denominator.
-% \begin{macrocode}
-\cs_new:Npn \@@_ep_div:wwwwn #1,#2; #3,#4;
- {
- \@@_ep_to_ep:wwN #1,#2;
- \@@_fixed_continue:wn
- {
- \@@_ep_to_ep:wwN #3,#4;
- \@@_ep_div_esti:wwwwn
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {
-% \@@_ep_div_esti:wwwwn,
-% \@@_ep_div_estii:wwnnwwn,
-% \@@_ep_div_estiii:NNNNNwwwn
-% }
-% The \texttt{esti} function evaluates $\alpha=10^{9} / (\meta{d_1} +
-% 1)$, which is used twice in the expression for $a$, and combines the
-% exponents |#1| and~|#4| (with a shift by~$1$ because we later compute
-% $\meta{n}/(10\meta{d})$. Then the \texttt{estii} function evaluates
-% $10^{9} + a$, and puts the exponent~|#2| after the
-% continuation~|#7|: from there on we can forget exponents and focus
-% on the mantissa. The \texttt{estiii} function multiplies the
-% denominator~|#7| by $10^{-8}a$ (obtained as $a$ split into the
-% single digit~|#1| and two blocks of $4$~digits, |#2#3#4#5|
-% and~|#6|). The result $10^{-8}a\meta{d}=(1-\epsilon)$, and a
-% partially packed $10^{-9}a$ (as a block of four digits, and five
-% individual digits, not packed by lack of available macro parameters
-% here) are passed to \cs{@@_ep_div_epsi:wnNNNNn}, which computes
-% $10^{-9}a/(1-\epsilon)$, that is, $1/(10\meta{d})$ and we finally
-% multiply this by the numerator~|#8|.
-% \begin{macrocode}
-\cs_new:Npn \@@_ep_div_esti:wwwwn #1,#2#3; #4,
- {
- \exp_after:wN \@@_ep_div_estii:wwnnwwn
- \int_value:w \@@_int_eval:w 10 0000 0000 / ( #2 + 1 )
- \exp_after:wN ;
- \int_value:w \@@_int_eval:w #4 - #1 + 1 ,
- {#2} #3;
- }
-\cs_new:Npn \@@_ep_div_estii:wwnnwwn #1; #2,#3#4#5; #6; #7
- {
- \exp_after:wN \@@_ep_div_estiii:NNNNNwwwn
- \int_value:w \@@_int_eval:w 10 0000 0000 - 1750
- + #1 000 + (10 0000 0000 / #3 - #1) * (1000 - #4 / 10) ;
- {#3}{#4}#5; #6; { #7 #2, }
- }
-\cs_new:Npn \@@_ep_div_estiii:NNNNNwwwn 1#1#2#3#4#5#6; #7;
- {
- \@@_fixed_mul_short:wwn #7; {#1}{#2#3#4#5}{#6};
- \@@_ep_div_epsi:wnNNNNNn {#1#2#3#4}#5#6
- \@@_fixed_mul:wwn
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {
-% \@@_ep_div_epsi:wnNNNNNn,
-% \@@_ep_div_eps_pack:NNNNNw,
-% \@@_ep_div_epsii:wwnNNNNNn,
-% }
-% The bounds shown above imply that the \texttt{epsi} function's first
-% operand is $(1-\epsilon)$ with $\epsilon\in[0,1.755\cdot 10^{-5}]$.
-% The \texttt{epsi} function computes $\epsilon$ as $1-(1-\epsilon)$.
-% Since $\epsilon<10^{-4}$, its first block vanishes and there is no
-% need to explicitly use~|#1| (which is $9999$). Then \texttt{epsii}
-% evaluates $10^{-9}a/(1-\epsilon)$ as
-% $(1+\epsilon^2)(1+\epsilon)(10^{-9}a \epsilon) + 10^{-9}a$.
-% Importantly, we compute $10^{-9}a \epsilon$ before multiplying it
-% with the rest, rather than multiplying by $\epsilon$ and then
-% $10^{-9}a$, as this second option loses more precision. Also, the
-% combination of \texttt{short_mul} and \texttt{div_myriad} is both
-% faster and more precise than a simple \texttt{mul}.
-% \begin{macrocode}
-\cs_new:Npn \@@_ep_div_epsi:wnNNNNNn #1#2#3#4#5#6;
- {
- \exp_after:wN \@@_ep_div_epsii:wwnNNNNNn
- \int_value:w \@@_int_eval:w 1 9998 - #2
- \exp_after:wN \@@_ep_div_eps_pack:NNNNNw
- \int_value:w \@@_int_eval:w 1 9999 9998 - #3#4
- \exp_after:wN \@@_ep_div_eps_pack:NNNNNw
- \int_value:w \@@_int_eval:w 2 0000 0000 - #5#6 ; ;
- }
-\cs_new:Npn \@@_ep_div_eps_pack:NNNNNw #1#2#3#4#5#6;
- { + #1 ; {#2#3#4#5} {#6} }
-\cs_new:Npn \@@_ep_div_epsii:wwnNNNNNn 1#1; #2; #3#4#5#6#7#8
- {
- \@@_fixed_mul:wwn {0000}{#1}#2; {0000}{#1}#2;
- \@@_fixed_add_one:wN
- \@@_fixed_mul:wwn {10000} {#1} #2 ;
- {
- \@@_fixed_mul_short:wwn {0000}{#1}#2; {#3}{#4#5#6#7}{#8000};
- \@@_fixed_div_myriad:wn
- \@@_fixed_mul:wwn
- }
- \@@_fixed_add:wwn {#3}{#4#5#6#7}{#8000}{0000}{0000}{0000};
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Inverse square root of extended precision numbers}
-%
-% The idea here is similar to division. Normalize the input,
-% multiplying by powers of $100$ until we have $x\in[0.01,1)$. Then
-% find an integer approximation $r \in [101, 1003]$ of
-% $10^{2}/\sqrt{x}$, as the fixed point of iterations of the Newton
-% method: essentially $r \mapsto (r + 10^{8} / (x_{1} r)) / 2$, starting
-% from a guess that optimizes the number of steps before convergence.
-% In fact, just as there is a slight shift when computing divisions to
-% ensure that some inequalities hold, we replace $10^{8}$ by a
-% slightly larger number which ensures that $r^2 x \geq 10^{4}$.
-% This also causes $r \in [101, 1003]$. Another correction to the above
-% is that the input is actually normalized to $[0.1,1)$, and we use
-% either $10^{8}$ or $10^{9}$ in the Newton method, depending on the
-% parity of the exponent. Skipping those technical hurdles, once we
-% have the approximation~$r$, we set $y = 10^{-4} r^{2} x$ (or rather,
-% the correct power of~$10$ to get $y\simeq 1$) and compute $y^{-1/2}$
-% through another application of Newton's method. This time, the
-% starting value is $z=1$, each step maps $z \mapsto z(1.5-0.5yz^2)$,
-% and we perform a fixed number of steps. Our final result combines~$r$
-% with $y^{-1/2}$ as $x^{-1/2} = 10^{-2} r y^{-1/2}$.
-%
-% ^^A todo: doc that the operand may not be zero (or fix ep_to_ep above)
-% \begin{macro}[EXP]{\@@_ep_isqrt:wwn}
-% \begin{macro}[EXP]
-% {\@@_ep_isqrt_aux:wwn, \@@_ep_isqrt_auxii:wwnnnwn}
-% First normalize the input, then check the parity of the
-% exponent~|#1|. If it is even, the result's exponent will be
-% $-|#1|/2$, otherwise it will be $(|#1|-1)/2$ (except in the case
-% where the input was an exact power of $100$). The \texttt{auxii}
-% function receives as~|#1| the result's exponent just computed, as
-% |#2| the starting value for the iteration giving~$r$ (the
-% values~$168$ and~$535$ lead to the least number of iterations before
-% convergence, on average), as |#3| and~|#4| one empty argument and
-% one~|0|, depending on the parity of the original exponent, as |#5|
-% and~|#6| the normalized mantissa ($|#5|\in[1000,9999]$), and as |#7|
-% the continuation. It sets up the iteration giving~$r$: the
-% \texttt{esti} function thus receives the initial two guesses |#2|
-% and~$0$, an approximation~|#5| of~$10^{4}x$ (its first block of
-% digits), and the empty/zero arguments |#3| and~|#4|, followed by the
-% mantissa and an altered continuation where we have stored the
-% result's exponent.
-% \begin{macrocode}
-\cs_new:Npn \@@_ep_isqrt:wwn #1,#2;
- {
- \@@_ep_to_ep:wwN #1,#2;
- \@@_ep_isqrt_auxi:wwn
- }
-\cs_new:Npn \@@_ep_isqrt_auxi:wwn #1,
- {
- \exp_after:wN \@@_ep_isqrt_auxii:wwnnnwn
- \int_value:w \@@_int_eval:w
- \int_if_odd:nTF {#1}
- { (1 - #1) / 2 , 535 , { 0 } { } }
- { 1 - #1 / 2 , 168 , { } { 0 } }
- }
-\cs_new:Npn \@@_ep_isqrt_auxii:wwnnnwn #1, #2, #3#4 #5#6; #7
- {
- \@@_ep_isqrt_esti:wwwnnwn #2, 0, #5, {#3} {#4}
- {#5} #6 ; { #7 #1 , }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {
-% \@@_ep_isqrt_esti:wwwnnwn,
-% \@@_ep_isqrt_estii:wwwnnwn,
-% \@@_ep_isqrt_estiii:NNNNNwwwn
-% }
-% If the last two approximations gave the same result, we are done:
-% call the \texttt{estii} function to clean up. Otherwise, evaluate
-% $(\meta{prev} + 1.005 \cdot 10^{\text{$8$ or $9$}} / (\meta{prev}
-% \cdot x)) / 2$, as the next approximation: omitting the $1.005$
-% factor, this would be Newton's method. We can check by brute force
-% that if |#4| is empty (the original exponent was even), the process
-% computes an integer slightly larger than $100 / \sqrt{x}$, while if
-% |#4| is~$0$ (the original exponent was odd), the result is an
-% integer slightly larger than $100 / \sqrt{x/10}$. Once we are done,
-% we evaluate $100 r^2 / 2$ or $10 r^2 / 2$ (when the exponent is even
-% or odd, respectively) and feed that to \texttt{estiii}. This third
-% auxiliary finds $y_{\text{even}} / 2 = 10^{-4} r^2 x / 2$ or
-% $y_{\text{odd}} / 2 = 10^{-5} r^2 x / 2$ (again, depending on
-% earlier parity). A simple program shows that $y\in [1, 1.0201]$.
-% The number $y/2$ is fed to \cs{@@_ep_isqrt_epsi:wN}, which computes
-% $1/\sqrt{y}$, and we finally multiply the result by~$r$.
-% \begin{macrocode}
-\cs_new:Npn \@@_ep_isqrt_esti:wwwnnwn #1, #2, #3, #4
- {
- \if_int_compare:w #1 = #2 \exp_stop_f:
- \exp_after:wN \@@_ep_isqrt_estii:wwwnnwn
- \fi:
- \exp_after:wN \@@_ep_isqrt_esti:wwwnnwn
- \int_value:w \@@_int_eval:w
- (#1 + 1 0050 0000 #4 / (#1 * #3)) / 2 ,
- #1, #3, {#4}
- }
-\cs_new:Npn \@@_ep_isqrt_estii:wwwnnwn #1, #2, #3, #4#5
- {
- \exp_after:wN \@@_ep_isqrt_estiii:NNNNNwwwn
- \int_value:w \@@_int_eval:w 1000 0000 + #2 * #2 #5 * 5
- \exp_after:wN , \int_value:w \@@_int_eval:w 10000 + #2 ;
- }
-\cs_new:Npn \@@_ep_isqrt_estiii:NNNNNwwwn 1#1#2#3#4#5#6, 1#7#8; #9;
- {
- \@@_fixed_mul_short:wwn #9; {#1} {#2#3#4#5} {#600} ;
- \@@_ep_isqrt_epsi:wN
- \@@_fixed_mul_short:wwn {#7} {#80} {0000} ;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_ep_isqrt_epsi:wN, \@@_ep_isqrt_epsii:wwN}
-% Here, we receive a fixed point number $y/2$ with $y\in[1,1.0201]$.
-% Starting from $z = 1$ we iterate $z \mapsto z(3/2 - z^2 y/2)$. In
-% fact, we start from the first iteration $z=3/2-y/2$ to avoid useless
-% multiplications. The \texttt{epsii} auxiliary receives $z$ as~|#1|
-% and $y$ as~|#2|.
-% \begin{macrocode}
-\cs_new:Npn \@@_ep_isqrt_epsi:wN #1;
- {
- \@@_fixed_sub:wwn {15000}{0000}{0000}{0000}{0000}{0000}; #1;
- \@@_ep_isqrt_epsii:wwN #1;
- \@@_ep_isqrt_epsii:wwN #1;
- \@@_ep_isqrt_epsii:wwN #1;
- }
-\cs_new:Npn \@@_ep_isqrt_epsii:wwN #1; #2;
- {
- \@@_fixed_mul:wwn #1; #1;
- \@@_fixed_mul_sub_back:wwwn #2;
- {15000}{0000}{0000}{0000}{0000}{0000};
- \@@_fixed_mul:wwn #1;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Converting from fixed point to floating point}
-% ^^A todo: doc
-%
-% After computing Taylor series, we wish to convert the result from
-% extended precision (with or without an exponent) to the public
-% floating point format. The functions here should be called within an
-% integer expression for the overall exponent of the floating point.
-%
-% \begin{macro}[rEXP]{\@@_ep_to_float_o:wwN, \@@_ep_inv_to_float_o:wwN}
-% An extended-precision number is simply a comma-delimited exponent
-% followed by a fixed point number. Leave the exponent in the current
-% integer expression then convert the fixed point number.
-% \begin{macrocode}
-\cs_new:Npn \@@_ep_to_float_o:wwN #1,
- { + \@@_int_eval:w #1 \@@_fixed_to_float_o:wN }
-\cs_new:Npn \@@_ep_inv_to_float_o:wwN #1,#2;
- {
- \@@_ep_div:wwwwn 1,{1000}{0000}{0000}{0000}{0000}{0000}; #1,#2;
- \@@_ep_to_float_o:wwN
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_fixed_inv_to_float_o:wN}
-% Another function which reduces to converting an extended precision
-% number to a float.
-% \begin{macrocode}
-\cs_new:Npn \@@_fixed_inv_to_float_o:wN
- { \@@_ep_inv_to_float_o:wwN 0, }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_fixed_to_float_rad_o:wN}
-% Converts the fixed point number~|#1| from degrees to radians then to
-% a floating point number. This could perhaps remain in
-% \pkg{l3fp-trig}.
-% \begin{macrocode}
-\cs_new:Npn \@@_fixed_to_float_rad_o:wN #1;
- {
- \@@_fixed_mul:wwn #1; {5729}{5779}{5130}{8232}{0876}{7981};
- { \@@_ep_to_float_o:wwN 2, }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% ^^A todo: make exponents end in ',' consistently throughout l3fp
-% \begin{macro}[rEXP]
-% {\@@_fixed_to_float_o:wN, \@@_fixed_to_float_o:Nw}
-% \begin{syntax}
-% \ldots{} \cs{@@_int_eval:w} \meta{exponent} \cs{@@_fixed_to_float_o:wN} \Arg{a_1} \Arg{a_2} \Arg{a_3} \Arg{a_4} \Arg{a_5} \Arg{a_6} |;| \meta{sign}
-% \end{syntax}
-% yields
-% \begin{quote}
-% \meta{exponent'} |;| \Arg{a'_1} \Arg{a'_2} \Arg{a'_3} \Arg{a'_4} |;|
-% \end{quote}
-% And the \texttt{to_fixed} version gives six brace groups instead of
-% $4$, ensuring that $1000\leq\meta{a'_1}\leq 9999$. At this stage, we
-% know that \meta{a_1} is positive (otherwise, it is sign of an error
-% before), and we assume that it is less than $10^8$.\footnote{Bruno:
-% I must double check this assumption.}
-%
-%^^A todo: round properly when rounding to infinity: I need the sign.
-% \begin{macrocode}
-\cs_new:Npn \@@_fixed_to_float_o:Nw #1#2;
- { \@@_fixed_to_float_o:wN #2; #1 }
-\cs_new:Npn \@@_fixed_to_float_o:wN #1#2#3#4#5#6; #7
- { % for the 8-digit-at-the-start thing
- + \@@_int_eval:w \c_@@_block_int
- \exp_after:wN \exp_after:wN
- \exp_after:wN \@@_fixed_to_loop:N
- \exp_after:wN \use_none:n
- \int_value:w \@@_int_eval:w
- 1 0000 0000 + #1 \exp_after:wN \@@_use_none_stop_f:n
- \int_value:w 1#2 \exp_after:wN \@@_use_none_stop_f:n
- \int_value:w 1#3#4 \exp_after:wN \@@_use_none_stop_f:n
- \int_value:w 1#5#6
- \exp_after:wN ;
- \exp_after:wN ;
- }
-\cs_new:Npn \@@_fixed_to_loop:N #1
- {
- \if_meaning:w 0 #1
- - 1
- \exp_after:wN \@@_fixed_to_loop:N
- \else:
- \exp_after:wN \@@_fixed_to_loop_end:w
- \exp_after:wN #1
- \fi:
- }
-\cs_new:Npn \@@_fixed_to_loop_end:w #1 #2 ;
- {
- \if_meaning:w ; #1
- \exp_after:wN \@@_fixed_to_float_zero:w
- \else:
- \exp_after:wN \@@_pack_twice_four:wNNNNNNNN
- \exp_after:wN \@@_pack_twice_four:wNNNNNNNN
- \exp_after:wN \@@_fixed_to_float_pack:ww
- \exp_after:wN ;
- \fi:
- #1 #2 0000 0000 0000 0000 ;
- }
-\cs_new:Npn \@@_fixed_to_float_zero:w ; 0000 0000 0000 0000 ;
- {
- - 2 * \c_@@_max_exponent_int ;
- {0000} {0000} {0000} {0000} ;
- }
-\cs_new:Npn \@@_fixed_to_float_pack:ww #1 ; #2#3 ; ;
- {
- \if_int_compare:w #2 > 4 \exp_stop_f:
- \exp_after:wN \@@_fixed_to_float_round_up:wnnnnw
- \fi:
- ; #1 ;
- }
-\cs_new:Npn \@@_fixed_to_float_round_up:wnnnnw ; #1#2#3#4 ;
- {
- \exp_after:wN \@@_basics_pack_high:NNNNNw
- \int_value:w \@@_int_eval:w 1 #1#2
- \exp_after:wN \@@_basics_pack_low:NNNNNw
- \int_value:w \@@_int_eval:w 1 #3#4 + 1 ;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintChanges
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3fp-functions.dtx b/macros/latex/contrib/l3kernel/l3fp-functions.dtx
deleted file mode 100644
index b26d8e7f26..0000000000
--- a/macros/latex/contrib/l3kernel/l3fp-functions.dtx
+++ /dev/null
@@ -1,288 +0,0 @@
-% \iffalse
-%
-%% File l3fp-functions.dtx (C) Copyright 2012-2018,2020,2021,2023 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% http://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full]{l3doc}
-\usepackage{amsmath}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3fp-functions} module\\ Floating point functions^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3fp-functions} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=fp>
-% \end{macrocode}
-%
-% \subsection{Declaring functions}
-%
-% \begin{macro}{\fp_new_function:n}
-% \begin{macro}{\@@_new_function:n}
-% \begin{macrocode}
-\cs_new_protected:Npn \fp_new_function:n #1
- { \exp_args:No \@@_new_function:n { \tl_to_str:n {#1} } }
-\cs_new_protected:Npn \@@_new_function:n #1
- {
- \@@_id_if_invalid:nTF {#1}
- { \msg_error:nnn { fp } { id-invalid } {#1} }
- {
- \cs_if_exist:cT { @@_parse_word_#1:N }
- {
- \msg_error:nnn
- { fp } { id-already-defined } {#1}
- \cs_undefine:c { @@_parse_word_#1:N }
- \cs_undefine:c { @@_#1_o:w }
- }
- \@@_function_set_parsing:Nn \cs_gset_eq:NN {#1}
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {\@@_function_set_parsing:Nn, \@@_function_set_parsing_aux:NNn}
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_function_set_parsing:Nn #1#2
- {
- \exp_args:NNc \@@_function_set_parsing_aux:NNn #1
- { @@_parse_word_#2:N } {#2}
- }
-\cs_new_protected:Npn \@@_function_set_parsing_aux:NNn #1#2#3
- {
- \cs_set:Npe \@@_tmp:w
- {
- \exp_not:N \@@_parse_function:NNN
- \exp_not:N \@@_function_o:w
- \exp_not:c { @@_#3_o:w }
- }
- \cs_if_eq:NNF #2 \@@_tmp:w
- {
- \cs_if_exist:NTF #2
- {
- \msg_warning:nnnn
- { fp } { id-used-elsewhere } {#3} { function }
- #1 #2 \@@_tmp:w
- }
- {
- \cs_new_eq:NN #2 \scan_stop: % to declare the function
- #1 #2 \@@_tmp:w
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_function_o:w}
-% \begin{macrocode}
-\cs_new:Npn \@@_function_o:w #1#2 @
- {
- \cs_if_exist:NTF #1
- { #1 #2 @ }
- {
- \exp_after:wN \s_@@_symbolic
- \exp_after:wN \@@_symbolic_chk:w
- \exp_after:wN \@@_function_o:w
- \exp_after:wN #1
- \exp_after:wN ,
- \exp_after:wN {
- \exp:w \exp_end_continue_f:w
- \@@_exp_after_array_f:w #2 \s_@@_expr_stop
- \exp_after:wN
- }
- \exp_after:wN ;
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Defining functions by their expression}
-%
-% \begin{variable}{\l_@@_function_arg_int}
-% Labels the arguments of a function being defined.
-% \begin{macrocode}
-\int_new:N \l_@@_function_arg_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\fp_set_function:nnn}
-% \begin{macro}{\@@_set_function:Nnnn}
-% \begin{syntax}
-% \cs{fp_set_function:nnn} \Arg{identifier}
-% \Arg{comma-list of variables} \Arg{expression}
-% \end{syntax}
-% Defines the \meta{identifier} to stand for a function which expects
-% some arguments defined by the \meta{comma-list of variables}, and
-% evaluates to the \meta{expression}.
-% \begin{macrocode}
-\cs_new_protected:Npn \fp_set_function:nnn #1
- {
- \exp_args:NNo \@@_set_function:Nnnn \cs_set_eq:cN
- { \tl_to_str:n {#1} }
- }
-\cs_new_protected:Npn \@@_set_function:Nnnn #1#2#3#4
- {
- \@@_id_if_invalid:nTF {#2}
- { \msg_error:nnn { fp } { id-invalid } {#2} }
- {
- \cs_if_exist:cF { @@_parse_word_#2:N }
- { \@@_function_set_parsing:Nn \cs_set_eq:NN {#2} }
- \group_begin:
- \int_zero:N \l_@@_function_arg_int
- \exp_args:No \clist_map_inline:nn { \tl_to_str:n {#3} }
- {
- \int_incr:N \l_@@_function_arg_int
- \exp_args:Ne \@@_clear_variable_aux:n
- {
- \c_underscore_str \tex_romannumeral:D \l_@@_function_arg_int
- }
- \fp_clear_variable:n {##1}
- \cs_set_nopar:cpe { l_@@_variable_##1_fp }
- {
- \exp_not:N \s__fp_symbolic
- \exp_not:N \@@_symbolic_chk:w
- \exp_not:N \@@_function_arg_o:w
- \int_use:N \l_@@_function_arg_int
- ########1 , { } ;
- }
- }
- \cs_set:Npn \@@_function_arg_o:w ##1 @
- {
- \exp_after:wN \s_@@_symbolic
- \exp_after:wN \@@_symbolic_chk:w
- \exp_after:wN \@@_function_arg_o:w
- \tex_romannumeral:D
- \@@_exp_after_symbolic_loop:N ##1
- { , \tex_romannumeral:D \use_none:nn }
- \exp_after:wN \c_zero_int
- \exp_after:wN { \exp_after:wN } \exp_after:wN ;
- }
- \fp_set:Nn \l_@@_symbolic_fp {#4}
- \use:e
- {
- \exp_not:n { \cs_gset:Npn \@@_tmp:w ##1 }
- { \exp_not:o { \l_@@_symbolic_fp } }
- }
- \use:e
- {
- \exp_not:n { \cs_gset:Npn \@@_tmp:w ##1 @ }
- {
- \exp_not:N \@@_exp_after_symbolic_f:nw
- \exp_not:n { { \exp_after:wN \exp_stop_f: } }
- \exp_not:o { \@@_tmp:w { . , {##1} } }
- }
- }
- \group_end:
- #1 { @@_#2_o:w } \@@_tmp:w
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {
-% \@@_function_arg_o:w,
-% \@@_function_arg_few:w,
-% \@@_function_arg_get:w
-% }
-% \begin{macrocode}
-\cs_new:Npn \@@_function_arg_o:w #1. #2
- {
- \if_meaning:w @ #2
- \exp_after:wN \@@_function_arg_few:w
- \fi:
- \if_int_compare:w #1 = \c_one_int
- \exp_after:wN \@@_function_arg_get:w
- \fi:
- \@@_use_i_until_s:nw
- {
- \exp_after:wN \@@_function_arg_o:w
- \int_value:w \int_eval:n { #1 - 1 } .
- }
- #2
- }
-\cs_new:Npn \@@_function_arg_few:w #1 @ { \exp_after:wN \c_nan_fp }
-\cs_new:Npn \@@_function_arg_get:w #1#2#3; #4 @
- {
- \@@_exp_after_array_f:w #3; \s_@@_expr_stop
- \exp_after:wN \exp_stop_f:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\fp_clear_function:n}
-% \begin{macro}{\@@_clear_function:n}
-% \begin{macrocode}
-\cs_new_protected:Npn \fp_clear_function:n #1
- { \exp_args:No \@@_clear_function:n { \tl_to_str:n {#1} } }
-\cs_new_protected:Npn \@@_clear_function:n #1
- {
- \@@_id_if_invalid:nTF {#1}
- { \msg_error:nnn { fp } { id-invalid } {#1} }
- {
- \cs_set_eq:cN { @@_#1_o:w } \tex_undefine:D
- \@@_function_set_parsing:Nn \cs_set_eq:NN {#1}
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% ^^A todo: add check for number of args
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3fp-logic.dtx b/macros/latex/contrib/l3kernel/l3fp-logic.dtx
deleted file mode 100644
index c95704085c..0000000000
--- a/macros/latex/contrib/l3kernel/l3fp-logic.dtx
+++ /dev/null
@@ -1,750 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3fp-logic.dtx
-%
-% Copyright (C) 2011-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3fp-logic} module\\
-% Floating point conditionals^^A
-% }
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3fp-logic} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=fp>
-% \end{macrocode}
-%
-% \begin{macro}[EXP]{\@@_parse_word_max:N , \@@_parse_word_min:N}
-% Those functions may receive a variable number of arguments.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_word_max:N
- { \@@_parse_function:NNN \@@_minmax_o:Nw 2 }
-\cs_new:Npn \@@_parse_word_min:N
- { \@@_parse_function:NNN \@@_minmax_o:Nw 0 }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Syntax of internal functions}
-%
-% \begin{itemize}
-% \item \cs{@@_compare_npos:nwnw} \Arg{expo_1} \meta{body_1} |;|
-% \Arg{expo_2} \meta{body_2} |;|
-% \item \cs{@@_minmax_o:Nw} \meta{sign} \meta{floating point array}
-% \item \cs{@@_not_o:w} |?| \meta{floating point array} (with one floating point number only)
-% \item \cs{@@_&_o:ww} \meta{floating point} \meta{floating point}
-% \item \cs{@@_|_o:ww} \meta{floating point} \meta{floating point}
-% \item \cs{@@_ternary:NwwN}, \cs{@@_ternary_auxi:NwwN},
-% \cs{@@_ternary_auxii:NwwN} have to be understood.
-% \end{itemize}
-%
-% \subsection{Tests}
-%
-% \begin{macro}[pTF]{\fp_if_exist:N, \fp_if_exist:c}
-% Copies of the \texttt{cs} functions defined in \pkg{l3basics}.
-% \begin{macrocode}
-\prg_new_eq_conditional:NNn \fp_if_exist:N \cs_if_exist:N { TF , T , F , p }
-\prg_new_eq_conditional:NNn \fp_if_exist:c \cs_if_exist:c { TF , T , F , p }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\fp_if_nan:n}
-% Evaluate and check if the result is a floating point of the same
-% kind as \nan{}.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \fp_if_nan:n #1 { TF , T , F , p }
- {
- \if:w 3 \exp_last_unbraced:Nf \@@_kind:w { \@@_parse:n {#1} }
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Comparison}
-%
-% \begin{macro}[pTF, EXP]{\fp_compare:n}
-% \begin{macro}[EXP]{\@@_compare_return:w}
-% Within floating point expressions, comparison operators are treated
-% as operations, so we evaluate |#1|, then compare with $\pm 0$.
-% Tuples are \texttt{true}.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \fp_compare:n #1 { p , T , F , TF }
- {
- \exp_after:wN \@@_compare_return:w
- \exp:w \exp_end_continue_f:w \@@_parse:n {#1}
- }
-\cs_new:Npn \@@_compare_return:w #1#2#3;
- {
- \if_charcode:w 0
- \@@_if_type_fp:NTwFw
- #1 { \@@_use_i_delimit_by_s_stop:nw #3 \s_@@_stop }
- \s_@@ 1 \s_@@_stop
- \prg_return_false:
- \else:
- \prg_return_true:
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[pTF, EXP]{\fp_compare:nNn}
-% \begin{macro}[EXP]{\@@_compare_aux:wn}
-% Evaluate |#1| and |#3|, using an auxiliary to expand both, and feed
-% the two floating point numbers swapped to \cs{@@_compare_back_any:ww},
-% defined below. Compare the result with |`#2-`=|, which is $-1$ for
-% |<|, $0$ for |=|, $1$ for |>| and $2$ for |?|.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \fp_compare:nNn #1#2#3 { p , T , F , TF }
- {
- \if_int_compare:w
- \exp_after:wN \@@_compare_aux:wn
- \exp:w \exp_end_continue_f:w \@@_parse:n {#1} {#3}
- = \@@_int_eval:w `#2 - `= \@@_int_eval_end:
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-\cs_new:Npn \@@_compare_aux:wn #1; #2
- {
- \exp_after:wN \@@_compare_back_any:ww
- \exp:w \exp_end_continue_f:w \@@_parse:n {#2} #1;
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_compare_back:ww, \@@_bcmp:ww, \@@_compare_back_any:ww, \@@_compare_nan:w}
-% \begin{quote}
-% \cs{@@_compare_back_any:ww} \meta{y} |;| \meta{x} |;|
-% \end{quote}
-% Expands (in the same way as \cs{int_eval:n}) to $-1$ if $x<y$, $0$
-% if $x=y$, $1$ if $x>y$, and $2$ otherwise (denoted as $x?y$). If
-% either operand is \texttt{nan}, stop the comparison with
-% \cs{@@_compare_nan:w} returning $2$. If $x$ is negative, swap the
-% outputs $1$ and $-1$ (\emph{i.e.}, $>$ and $<$); we can henceforth
-% assume that $x\geq 0$. If $y\geq 0$, and they have the same type,
-% either they are normal and we compare them with
-% \cs{@@_compare_npos:nwnw}, or they are equal. If $y\geq 0$, but of
-% a different type, the highest type is a larger number. Finally, if
-% $y\leq 0$, then $x>y$, unless both are zero.
-% \begin{macrocode}
-\cs_new:Npn \@@_compare_back:ww #1#2; #3#4;
- {
- \cs:w
- @@
- \@@_type_from_scan:N #1
- _bcmp
- \@@_type_from_scan:N #3
- :ww
- \cs_end:
- #1#2; #3#4;
- }
-\cs_new:Npn \@@_compare_back_any:ww #1#2; #3
- {
- \@@_if_type_fp:NTwFw
- #1 { \@@_if_type_fp:NTwFw #3 \use_i:nn \s_@@ \use_ii:nn \s_@@_stop }
- \s_@@ \use_ii:nn \s_@@_stop
- \@@_compare_back:ww
- {
- \cs:w
- @@
- \@@_type_from_scan:N #1
- _compare_back
- \@@_type_from_scan:N #3
- :ww
- \cs_end:
- }
- #1#2 ; #3
- }
-\cs_new:Npn \@@_bcmp:ww
- \s_@@ \@@_chk:w #1 #2 #3;
- \s_@@ \@@_chk:w #4 #5 #6;
- {
- \int_value:w
- \if_meaning:w 3 #1 \exp_after:wN \@@_compare_nan:w \fi:
- \if_meaning:w 3 #4 \exp_after:wN \@@_compare_nan:w \fi:
- \if_meaning:w 2 #5 - \fi:
- \if_meaning:w #2 #5
- \if_meaning:w #1 #4
- \if_meaning:w 1 #1
- \@@_compare_npos:nwnw #6; #3;
- \else:
- 0
- \fi:
- \else:
- \if_int_compare:w #4 < #1 - \fi: 1
- \fi:
- \else:
- \if_int_compare:w #1#4 = \c_zero_int
- 0
- \else:
- 1
- \fi:
- \fi:
- \exp_stop_f:
- }
-\cs_new:Npn \@@_compare_nan:w #1 \fi: \exp_stop_f: { 2 \exp_stop_f: }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_compare_back_tuple:ww, \@@_tuple_compare_back:ww, \@@_tuple_compare_back_tuple:ww}
-% \begin{macro}[EXP]{\@@_tuple_compare_back_loop:w}
-% Tuple and floating point numbers are not comparable so return $2$ in
-% mixed cases or when tuples have a different number of items.
-% Otherwise compare pairs of items with \cs{@@_compare_back_any:ww}
-% and if any don't match return~$2$ (as \cs{int_value:w} |02|
-% \cs{exp_stop_f:}).
-% \begin{macrocode}
-\cs_new:Npn \@@_compare_back_tuple:ww #1; #2; { 2 }
-\cs_new:Npn \@@_tuple_compare_back:ww #1; #2; { 2 }
-\cs_new:Npn \@@_tuple_compare_back_tuple:ww
- \s_@@_tuple \@@_tuple_chk:w #1;
- \s_@@_tuple \@@_tuple_chk:w #2;
- {
- \int_compare:nNnTF { \@@_array_count:n {#1} } =
- { \@@_array_count:n {#2} }
- {
- \int_value:w 0
- \@@_tuple_compare_back_loop:w
- #1 { \s_@@ \prg_break: } ; @
- #2 { \s_@@ \prg_break: } ;
- \prg_break_point:
- \exp_stop_f:
- }
- { 2 }
- }
-\cs_new:Npn \@@_tuple_compare_back_loop:w #1#2 ; #3 @ #4#5 ;
- {
- \use_none:n #1
- \use_none:n #4
- \if_int_compare:w
- \@@_compare_back_any:ww #1 #2 ; #4 #5 ; = \c_zero_int
- \else:
- 2 \exp_after:wN \prg_break:
- \fi:
- \@@_tuple_compare_back_loop:w #3 @
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_compare_npos:nwnw}
-% \begin{macro}[EXP]{\@@_compare_significand:nnnnnnnn}
-% \begin{quote}
-% \cs{@@_compare_npos:nwnw}
-% \Arg{expo_1} \meta{body_1} |;|
-% \Arg{expo_2} \meta{body_2} |;|
-% \end{quote}
-% Within an \cs{int_value:w} \ldots{} \cs{exp_stop_f:} construction,
-% this expands to $0$ if the two numbers are equal, $-1$ if the first
-% is smaller, and $1$ if the first is bigger. First compare the
-% exponents: the larger one denotes the larger number. If they are
-% equal, we must compare significands. If both the first $8$ digits and
-% the next $8$ digits coincide, the numbers are equal. If only the
-% first $8$ digits coincide, the next $8$ decide. Otherwise, the
-% first $8$ digits are compared.
-% \begin{macrocode}
-\cs_new:Npn \@@_compare_npos:nwnw #1#2; #3#4;
- {
- \if_int_compare:w #1 = #3 \exp_stop_f:
- \@@_compare_significand:nnnnnnnn #2 #4
- \else:
- \if_int_compare:w #1 < #3 - \fi: 1
- \fi:
- }
-\cs_new:Npn \@@_compare_significand:nnnnnnnn #1#2#3#4#5#6#7#8
- {
- \if_int_compare:w #1#2 = #5#6 \exp_stop_f:
- \if_int_compare:w #3#4 = #7#8 \exp_stop_f:
- 0
- \else:
- \if_int_compare:w #3#4 < #7#8 - \fi: 1
- \fi:
- \else:
- \if_int_compare:w #1#2 < #5#6 - \fi: 1
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Floating point expression loops}
-%
-% \begin{macro}[rEXP]
-% {
-% \fp_do_until:nn, \fp_do_while:nn,
-% \fp_until_do:nn, \fp_while_do:nn
-% }
-% These are quite easy given the above functions. The |do_until| and
-% |do_while| versions execute the body, then test. The |until_do| and
-% |while_do| do it the other way round.
-% \begin{macrocode}
-\cs_new:Npn \fp_do_until:nn #1#2
- {
- #2
- \fp_compare:nF {#1}
- { \fp_do_until:nn {#1} {#2} }
- }
-\cs_new:Npn \fp_do_while:nn #1#2
- {
- #2
- \fp_compare:nT {#1}
- { \fp_do_while:nn {#1} {#2} }
- }
-\cs_new:Npn \fp_until_do:nn #1#2
- {
- \fp_compare:nF {#1}
- {
- #2
- \fp_until_do:nn {#1} {#2}
- }
- }
-\cs_new:Npn \fp_while_do:nn #1#2
- {
- \fp_compare:nT {#1}
- {
- #2
- \fp_while_do:nn {#1} {#2}
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]
-% {
-% \fp_do_until:nNnn, \fp_do_while:nNnn,
-% \fp_until_do:nNnn, \fp_while_do:nNnn
-% }
-% As above but not using the |nNn| syntax.
-% \begin{macrocode}
-\cs_new:Npn \fp_do_until:nNnn #1#2#3#4
- {
- #4
- \fp_compare:nNnF {#1} #2 {#3}
- { \fp_do_until:nNnn {#1} #2 {#3} {#4} }
- }
-\cs_new:Npn \fp_do_while:nNnn #1#2#3#4
- {
- #4
- \fp_compare:nNnT {#1} #2 {#3}
- { \fp_do_while:nNnn {#1} #2 {#3} {#4} }
- }
-\cs_new:Npn \fp_until_do:nNnn #1#2#3#4
- {
- \fp_compare:nNnF {#1} #2 {#3}
- {
- #4
- \fp_until_do:nNnn {#1} #2 {#3} {#4}
- }
- }
-\cs_new:Npn \fp_while_do:nNnn #1#2#3#4
- {
- \fp_compare:nNnT {#1} #2 {#3}
- {
- #4
- \fp_while_do:nNnn {#1} #2 {#3} {#4}
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\fp_step_function:nnnN, \fp_step_function:nnnc}
-% \begin{macro}[EXP]{\@@_step:wwwN, \@@_step_fp:wwwN}
-% \begin{macro}[EXP]{\@@_step:NnnnnN, \@@_step:NfnnnN}
-% The approach here is somewhat similar to
-% \cs{int_step_function:nnnN}. There are two subtleties: we use the
-% internal parser \cs{@@_parse:n} to avoid converting back and forth
-% from the internal representation; and (due to rounding) even a
-% non-zero step does not guarantee that the loop counter increases.
-% \begin{macrocode}
-\cs_new:Npn \fp_step_function:nnnN #1#2#3
- {
- \exp_after:wN \@@_step:wwwN
- \exp:w \exp_end_continue_f:w \@@_parse_o:n {#1}
- \exp:w \exp_end_continue_f:w \@@_parse_o:n {#2}
- \exp:w \exp_end_continue_f:w \@@_parse:n {#3}
- }
-\cs_generate_variant:Nn \fp_step_function:nnnN { nnnc }
-% \end{macrocode}
-% Only floating point numbers (not tuples) are allowed arguments.
-% Only \enquote{normal} floating points (not $\pm 0$,
-% $\pm\texttt{inf}$, \texttt{nan}) can be used as step; if positive,
-% call \cs{@@_step:NnnnnN} with argument |>| otherwise~|<|. This
-% function has one more argument than its integer counterpart, namely
-% the previous value, to catch the case where the loop has made no
-% progress. Conversion to decimal is done just before calling the
-% user's function.
-% \begin{macrocode}
-\cs_new:Npn \@@_step:wwwN #1#2; #3#4; #5#6; #7
- {
- \@@_if_type_fp:NTwFw #1 { } \s_@@ \prg_break: \s_@@_stop
- \@@_if_type_fp:NTwFw #3 { } \s_@@ \prg_break: \s_@@_stop
- \@@_if_type_fp:NTwFw #5 { } \s_@@ \prg_break: \s_@@_stop
- \use_i:nnnn { \@@_step_fp:wwwN #1#2; #3#4; #5#6; #7 }
- \prg_break_point:
- \use:n
- {
- \@@_error:nfff { step-tuple } { \fp_to_tl:n { #1#2 ; } }
- { \fp_to_tl:n { #3#4 ; } } { \fp_to_tl:n { #5#6 ; } }
- }
- }
-\cs_new:Npn \@@_step_fp:wwwN #1 ; \s_@@ \@@_chk:w #2#3#4 ; #5; #6
- {
- \token_if_eq_meaning:NNTF #2 1
- {
- \token_if_eq_meaning:NNTF #3 0
- { \@@_step:NnnnnN > }
- { \@@_step:NnnnnN < }
- }
- {
- \token_if_eq_meaning:NNTF #2 0
- {
- \msg_expandable_error:nnn { kernel }
- { zero-step } {#6}
- }
- {
- \@@_error:nnfn { bad-step } { }
- { \fp_to_tl:n { \s_@@ \@@_chk:w #2#3#4 ; } } {#6}
- }
- \use_none:nnnnn
- }
- { #1 ; } { \c_nan_fp } { \s_@@ \@@_chk:w #2#3#4 ; } { #5 ; } #6
- }
-\cs_new:Npn \@@_step:NnnnnN #1#2#3#4#5#6
- {
- \fp_compare:nNnTF {#2} = {#3}
- {
- \@@_error:nffn { tiny-step }
- { \fp_to_tl:n {#3} } { \fp_to_tl:n {#4} } {#6}
- }
- {
- \fp_compare:nNnF {#2} #1 {#5}
- {
- \exp_args:Nf #6 { \@@_to_decimal_dispatch:w #2 }
- \@@_step:NfnnnN
- #1 { \@@_parse:n { #2 + #4 } } {#2} {#4} {#5} #6
- }
- }
- }
-\cs_generate_variant:Nn \@@_step:NnnnnN { Nf }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\fp_step_inline:nnnn, \fp_step_variable:nnnNn}
-% \begin{macro}{\@@_step:NNnnnn}
-% As for \cs{int_step_inline:nnnn}, create a global function and apply it,
-% following up with a break point.
-% \begin{macrocode}
-\cs_new_protected:Npn \fp_step_inline:nnnn
- {
- \int_gincr:N \g__kernel_prg_map_int
- \exp_args:NNc \@@_step:NNnnnn
- \cs_gset_protected:Npn
- { @@_map_ \int_use:N \g__kernel_prg_map_int :w }
- }
-\cs_new_protected:Npn \fp_step_variable:nnnNn #1#2#3#4#5
- {
- \int_gincr:N \g__kernel_prg_map_int
- \exp_args:NNc \@@_step:NNnnnn
- \cs_gset_protected:Npe
- { @@_map_ \int_use:N \g__kernel_prg_map_int :w }
- {#1} {#2} {#3}
- {
- \tl_set:Nn \exp_not:N #4 {##1}
- \exp_not:n {#5}
- }
- }
-\cs_new_protected:Npn \@@_step:NNnnnn #1#2#3#4#5#6
- {
- #1 #2 ##1 {#6}
- \fp_step_function:nnnN {#3} {#4} {#5} #2
- \prg_break_point:Nn \scan_stop: { \int_gdecr:N \g__kernel_prg_map_int }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macrocode}
-\msg_new:nnn { fp } { step-tuple }
- { Tuple~argument~in~fp_step_...~{#1}{#2}{#3}. }
-\msg_new:nnn { fp } { bad-step }
- { Invalid~step~size~#2~for~function~#3. }
-\msg_new:nnn { fp } { tiny-step }
- { Tiny~step~size~(#1+#2=#1)~for~function~#3. }
-% \end{macrocode}
-%
-% \subsection{Extrema}
-%
-% \begin{macro}[EXP]{\@@_minmax_o:Nw, \@@_minmax_aux_o:Nw}
-% First check all operands are floating point numbers.
-% The argument~|#1| is $2$~to find the maximum of an array~|#2| of
-% floating point numbers, and $0$~to find the minimum. We read
-% numbers sequentially, keeping track of the largest (smallest) number
-% found so far. If numbers are equal (for instance~$\pm0$), the first
-% is kept. We append $-\infty$ ($\infty$), for the case of an empty
-% array. Since no number is smaller (larger) than that, this
-% additional item only affects the maximum (minimum) in the case of
-% |max()| and |min()| with no argument. The weird
-% fp-like trailing marker breaks the loop correctly: see the precise
-% definition of \cs{@@_minmax_loop:Nww}.
-% \begin{macrocode}
-\cs_new:Npn \@@_minmax_o:Nw #1
- {
- \@@_parse_function_all_fp_o:fnw
- { \token_if_eq_meaning:NNTF 0 #1 { min } { max } }
- { \@@_minmax_aux_o:Nw #1 }
- }
-\cs_new:Npn \@@_minmax_aux_o:Nw #1#2 @
- {
- \if_meaning:w 0 #1
- \exp_after:wN \@@_minmax_loop:Nww \exp_after:wN +
- \else:
- \exp_after:wN \@@_minmax_loop:Nww \exp_after:wN -
- \fi:
- #2
- \s_@@ \@@_chk:w 2 #1 \s_@@_exact ;
- \s_@@ \@@_chk:w { 3 \@@_minmax_break_o:w } ;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_minmax_loop:Nww}
-% The first argument is $-$ or $+$ to denote the case where the
-% currently largest (smallest) number found (first floating point
-% argument) should be replaced by the new number (second floating
-% point argument). If the new number is \texttt{nan}, keep that as
-% the extremum, unless that extremum is already a \texttt{nan}.
-% Otherwise, compare the two numbers. If the new number is larger (in
-% the case of |max|) or smaller (in the case of |min|), the test
-% yields \texttt{true}, and we keep the second number as a new
-% maximum; otherwise we keep the first number. Then loop.
-% \begin{macrocode}
-\cs_new:Npn \@@_minmax_loop:Nww
- #1 \s_@@ \@@_chk:w #2#3; \s_@@ \@@_chk:w #4#5;
- {
- \if_meaning:w 3 #4
- \if_meaning:w 3 #2
- \@@_minmax_auxi:ww
- \else:
- \@@_minmax_auxii:ww
- \fi:
- \else:
- \if_int_compare:w
- \@@_compare_back:ww
- \s_@@ \@@_chk:w #4#5;
- \s_@@ \@@_chk:w #2#3;
- = #1 1 \exp_stop_f:
- \@@_minmax_auxii:ww
- \else:
- \@@_minmax_auxi:ww
- \fi:
- \fi:
- \@@_minmax_loop:Nww #1
- \s_@@ \@@_chk:w #2#3;
- \s_@@ \@@_chk:w #4#5;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_minmax_auxi:ww, \@@_minmax_auxii:ww}
-% Keep the first/second number, and remove the other.
-% \begin{macrocode}
-\cs_new:Npn \@@_minmax_auxi:ww #1 \fi: \fi: #2 \s_@@ #3 ; \s_@@ #4;
- { \fi: \fi: #2 \s_@@ #3 ; }
-\cs_new:Npn \@@_minmax_auxii:ww #1 \fi: \fi: #2 \s_@@ #3 ;
- { \fi: \fi: #2 }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_minmax_break_o:w}
-% This function is called from within an \cs{if_meaning:w} test. Skip
-% to the end of the tests, close the current test with \cs{fi:}, clean
-% up, and return the appropriate number with one post-expansion.
-% \begin{macrocode}
-\cs_new:Npn \@@_minmax_break_o:w #1 \fi: \fi: #2 \s_@@ #3; #4;
- { \fi: \@@_exp_after_o:w \s_@@ #3; }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Boolean operations}
-%
-% \begin{macro}[EXP]{\@@_not_o:w, \@@_tuple_not_o:w}
-% Return \texttt{true} or \texttt{false}, with two expansions, one to
-% exit the conditional, and one to please \pkg{l3fp-parse}. The first
-% argument is provided by \pkg{l3fp-parse} and is ignored.
-% \begin{macrocode}
-\cs_new:Npn \@@_not_o:w #1 \s_@@ \@@_chk:w #2#3; @
- {
- \if_meaning:w 0 #2
- \exp_after:wN \exp_after:wN \exp_after:wN \c_one_fp
- \else:
- \exp_after:wN \exp_after:wN \exp_after:wN \c_zero_fp
- \fi:
- }
-\cs_new:Npn \@@_tuple_not_o:w #1 @ { \exp_after:wN \c_zero_fp }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_&_o:ww, \@@_tuple_&_o:ww, \@@_&_tuple_o:ww, \@@_tuple_&_tuple_o:ww}
-% \begin{macro}[EXP]{\@@_|_o:ww, \@@_tuple_|_o:ww, \@@_|_tuple_o:ww, \@@_tuple_|_tuple_o:ww}
-% \begin{macro}[EXP]{\@@_and_return:wNw}
-% For \texttt{and}, if the first number is zero, return it (with the
-% same sign). Otherwise, return the second one. For \texttt{or}, the
-% logic is reversed: if the first number is non-zero, return it,
-% otherwise return the second number: we achieve that by hi-jacking
-% \cs{@@_&_o:ww}, inserting an extra argument, \cs{else:}, before
-% \cs{s_@@}. In all cases, expand after the floating point number.
-% \begin{macrocode}
-\group_begin:
- \char_set_catcode_letter:N &
- \char_set_catcode_letter:N |
- \cs_new:Npn \@@_&_o:ww #1 \s_@@ \@@_chk:w #2#3;
- {
- \if_meaning:w 0 #2 #1
- \@@_and_return:wNw \s_@@ \@@_chk:w #2#3;
- \fi:
- \@@_exp_after_o:w
- }
- \cs_new:Npn \@@_&_tuple_o:ww #1 \s_@@ \@@_chk:w #2#3;
- {
- \if_meaning:w 0 #2 #1
- \@@_and_return:wNw \s_@@ \@@_chk:w #2#3;
- \fi:
- \@@_exp_after_tuple_o:w
- }
- \cs_new:Npn \@@_tuple_&_o:ww #1; { \@@_exp_after_o:w }
- \cs_new:Npn \@@_tuple_&_tuple_o:ww #1; { \@@_exp_after_tuple_o:w }
- \cs_new:Npn \@@_|_o:ww { \@@_&_o:ww \else: }
- \cs_new:Npn \@@_|_tuple_o:ww { \@@_&_tuple_o:ww \else: }
- \cs_new:Npn \@@_tuple_|_o:ww #1; #2; { \@@_exp_after_tuple_o:w #1; }
- \cs_new:Npn \@@_tuple_|_tuple_o:ww #1; #2;
- { \@@_exp_after_tuple_o:w #1; }
-\group_end:
-\cs_new:Npn \@@_and_return:wNw #1; \fi: #2;
- { \fi: \@@_exp_after_o:w #1; }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Ternary operator}
-%
-% \begin{macro}[EXP]
-% {\@@_ternary:NwwN, \@@_ternary_auxi:NwwN, \@@_ternary_auxii:NwwN}
-% The first function receives the test and the true branch of the |?:|
-% ternary operator. It calls \cs{@@_ternary_auxii:NwwN} if the test
-% branch is a floating point number $\pm 0$, and otherwise calls
-% \cs{@@_ternary_auxi:NwwN}. These functions select one of their two
-% arguments.
-% \begin{macrocode}
-\cs_new:Npn \@@_ternary:NwwN #1 #2#3@ #4@ #5
- {
- \if_meaning:w \@@_parse_infix_::N #5
- \if_charcode:w 0
- \@@_if_type_fp:NTwFw
- #2 { \use_i:nn \@@_use_i_delimit_by_s_stop:nw #3 \s_@@_stop }
- \s_@@ 1 \s_@@_stop
- \exp_after:wN \exp_after:wN \exp_after:wN \@@_ternary_auxii:NwwN
- \else:
- \exp_after:wN \exp_after:wN \exp_after:wN \@@_ternary_auxi:NwwN
- \fi:
- \exp_after:wN #1
- \exp:w \exp_end_continue_f:w
- \@@_exp_after_array_f:w #4 \s_@@_expr_stop
- \exp_after:wN @
- \exp:w
- \@@_parse_operand:Nw \c_@@_prec_colon_int
- \@@_parse_expand:w
- \else:
- \msg_expandable_error:nnnn
- { fp } { missing } { : } { ~for~?: }
- \exp_after:wN \@@_parse_continue:NwN
- \exp_after:wN #1
- \exp:w \exp_end_continue_f:w
- \@@_exp_after_array_f:w #4 \s_@@_expr_stop
- \exp_after:wN #5
- \exp_after:wN #1
- \fi:
- }
-\cs_new:Npn \@@_ternary_auxi:NwwN #1#2@#3@#4
- {
- \exp_after:wN \@@_parse_continue:NwN
- \exp_after:wN #1
- \exp:w \exp_end_continue_f:w
- \@@_exp_after_array_f:w #2 \s_@@_expr_stop
- #4 #1
- }
-\cs_new:Npn \@@_ternary_auxii:NwwN #1#2@#3@#4
- {
- \exp_after:wN \@@_parse_continue:NwN
- \exp_after:wN #1
- \exp:w \exp_end_continue_f:w
- \@@_exp_after_array_f:w #3 \s_@@_expr_stop
- #4 #1
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintChanges
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3fp-parse.dtx b/macros/latex/contrib/l3kernel/l3fp-parse.dtx
deleted file mode 100644
index 53b85a7cc8..0000000000
--- a/macros/latex/contrib/l3kernel/l3fp-parse.dtx
+++ /dev/null
@@ -1,2899 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3fp-parse.dtx
-%
-% Copyright (C) 2011-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3fp-parse} module\\
-% Floating point expression parsing^^A
-% }
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3fp-parse} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=fp>
-% \end{macrocode}
-%
-% \subsection{Work plan}
-%
-% The task at hand is non-trivial, and some previous failed attempts
-% show that the code leads to unreadable logs, so we had better get it
-% (almost) right the first time. Let us first describe our goal, then
-% discuss the design precisely before writing any code.
-%
-% In this file at least, a \meta{floating point object} is a floating
-% point number or tuple. This can be extended to anything that starts
-% with \cs{s_@@} or \cs{s_@@_\meta{type}} and ends with |;| with some
-% internal structure that depends on the \meta{type}.
-%
-% \begin{macro}[EXP]{\@@_parse:n}
-% \begin{syntax}
-% \cs{@@_parse:n} \Arg{fp expr}
-% \end{syntax}
-% Evaluates the \meta{fp expr} and leaves the result
-% in the input stream as a floating point object. This
-% function forms the basis of almost all public \pkg{l3fp} functions.
-% During evaluation, each token is fully \texttt{f}-expanded.
-%
-% \cs{@@_parse_o:n} does the same but expands once after its result.
-% \begin{texnote}
-% Registers (integers, toks, etc.) are automatically unpacked,
-% without requiring a function such as \cs{int_use:N}. Invalid
-% tokens remaining after \texttt{f}-expansion lead to
-% unrecoverable low-level \TeX{} errors.
-% \end{texnote}
-% \end{macro}
-%
-% \begin{variable}
-% {
-% \c_@@_prec_func_int,
-% \c_@@_prec_hatii_int,
-% \c_@@_prec_hat_int,
-% \c_@@_prec_not_int,
-% \c_@@_prec_juxt_int,
-% \c_@@_prec_times_int,
-% \c_@@_prec_plus_int,
-% \c_@@_prec_comp_int,
-% \c_@@_prec_and_int,
-% \c_@@_prec_or_int,
-% \c_@@_prec_quest_int,
-% \c_@@_prec_colon_int,
-% \c_@@_prec_comma_int,
-% \c_@@_prec_tuple_int,
-% \c_@@_prec_end_int,
-% }
-% Floating point expressions are composed of numbers, given in various
-% forms, infix operators, such as |+|, |**|, or~|,| (which joins two
-% numbers into a list), and prefix operators, such as the unary~|-|,
-% functions, or opening parentheses. Here is a list of precedences
-% which control the order of evaluation (some distinctions are
-% irrelevant for the order of evaluation, but serve as signals), from
-% the tightest binding to the loosest binding.
-% \begin{itemize}
-% \item[16] Function calls.
-% \item[13/14] Binary |**| and~|^| (right to left).
-% \item[12] Unary |+|, |-|, |!| (right to left).
-% \item[11] Juxtaposition (implicit~|*|) with no parenthesis.
-% \item[10] Binary |*| and~|/|.
-% \item[9] Binary |+| and~|-|.
-% \item[7] Comparisons.
-% \item[6] Logical \texttt{and}, denoted by~|&&|.
-% \item[5] Logical \texttt{or}, denoted by~\verb*+||+.
-% \item[4] Ternary operator |?:|, piece~|?|.
-% \item[3] Ternary operator |?:|, piece~|:|.
-% \item[2] Commas.
-% \item[1] Place where a comma is allowed and generates a tuple.
-% \item[0] Start and end of the expression.
-% \end{itemize}
-% \begin{macrocode}
-\int_const:Nn \c_@@_prec_func_int { 16 }
-\int_const:Nn \c_@@_prec_hatii_int { 14 }
-\int_const:Nn \c_@@_prec_hat_int { 13 }
-\int_const:Nn \c_@@_prec_not_int { 12 }
-\int_const:Nn \c_@@_prec_juxt_int { 11 }
-\int_const:Nn \c_@@_prec_times_int { 10 }
-\int_const:Nn \c_@@_prec_plus_int { 9 }
-\int_const:Nn \c_@@_prec_comp_int { 7 }
-\int_const:Nn \c_@@_prec_and_int { 6 }
-\int_const:Nn \c_@@_prec_or_int { 5 }
-\int_const:Nn \c_@@_prec_quest_int { 4 }
-\int_const:Nn \c_@@_prec_colon_int { 3 }
-\int_const:Nn \c_@@_prec_comma_int { 2 }
-\int_const:Nn \c_@@_prec_tuple_int { 1 }
-\int_const:Nn \c_@@_prec_end_int { 0 }
-% \end{macrocode}
-% \end{variable}
-%
-% \subsubsection{Storing results}
-%
-% The main question in parsing expressions expandably is to decide where
-% to put the intermediate results computed for various subexpressions.
-%
-% One option is to store the values at the start of the expression, and
-% carry them together as the first argument of each macro. However, we
-% want to \texttt{f}-expand tokens one by one in the expression (as
-% \cs{int_eval:n} does), and with this approach, expanding the next
-% unread token forces us to jump with \cs{exp_after:wN} over every value
-% computed earlier in the expression. With this approach, the run-time
-% grows at least quadratically in the length of the expression, if
-% not as its cube (inserting the \cs{exp_after:wN} is tricky and slow).
-%
-% A second option is to place those values at the end of the expression.
-% Then expanding the next unread token is straightforward, but this
-% still hits a performance issue: for long expressions we would be
-% reaching all the way to the end of the expression at every step of the
-% calculation. The run-time is again quadratic.
-%
-% A variation of the above attempts to place the intermediate results
-% which appear when computing a parenthesized expression near the
-% closing parenthesis. This still lets us expand tokens as we go, and
-% avoids performance problems as long as there are enough parentheses.
-% However, it would be better to avoid requiring the closing
-% parenthesis to be present as soon as the corresponding opening
-% parenthesis is read: the closing parenthesis may still be hidden in a
-% macro yet to be expanded.
-%
-% Hence, we need to go for some fine expansion control: the result is
-% stored \emph{before} the start!
-%
-% Let us illustrate this idea in a simple model: adding positive
-% integers which may be resulting from the expansion of macros, or may
-% be values of registers. Assume that one number, say, $12345$, has
-% already been found, and that we want to parse the next number. The
-% current status of the code may look as follows.
-% \begin{syntax}
-% \cs{exp_after:wN} |\add:ww| \cs{int_value:w} 12345 \cs{exp_after:wN} ;
-% \cs{exp:w} |\operand:w| \meta{stuff}
-% \end{syntax}
-% One step of expansion expands \cs{exp_after:wN}, which triggers the
-% primitive \cs{int_value:w}, which reads the five digits we have
-% already found, |12345|. This integer is unfinished, causing the
-% second \cs{exp_after:wN} to expand, and to trigger the construction
-% \cs{exp:w}, which expands |\operand:w|, defined to read
-% what follows and make a number out of it, then leave \cs{exp_end:}, the
-% number, and a semicolon in the input stream. Once |\operand:w| is
-% done expanding, we obtain essentially
-% \begin{syntax}
-% \cs{exp_after:wN} |\add:ww| \cs{int_value:w} 12345 ;
-% \cs{exp:w} \cs{exp_end:} 333444 ;
-% \end{syntax}
-% where in fact \cs{exp_after:wN} has already been expanded,
-% \cs{int_value:w} has already seen |12345|, and
-% \cs{exp:w} is still looking for a number. It finds
-% \cs{exp_end:}, hence expands to nothing. Now, \cs{int_value:w} sees
-% the \texttt{;}, which cannot be part of a number. The expansion
-% stops, and we are left with
-% \begin{syntax}
-% |\add:ww| 12345 ; 333444 ;
-% \end{syntax}
-% which can safely perform the addition by grabbing two arguments
-% delimited by~|;|.
-%
-% If we were to continue parsing the expression, then the following
-% number should also be cleaned up before the next use of a binary
-% operation such as |\add:ww|. Just like \cs{int_value:w} |12345|
-% \cs{exp_after:wN}~|;| expanded what follows once, we need |\add:ww|
-% to do the calculation, and in the process to expand the following
-% once. This is also true in our real application: all the functions of
-% the form \cs[no-index]{@@_\ldots_o:ww} expand what follows once. This comes at the
-% cost of leaving tokens in the input stack, and we need to be
-% careful not to waste this memory. All of our discussion above is nice
-% but simplistic, as operations should not simply be performed in the
-% order they appear.
-%
-% \subsubsection{Precedence and infix operators}
-%
-% The various operators we will encounter have different precedences,
-% which influence the order of calculations: $1+2\times 3 = 1+(2\times
-% 3)$ because $\times$~has a higher precedence than~$+$. The true
-% analog of our macro |\operand:w| must thus take care of that. When
-% looking for an operand, it needs to perform calculations until
-% reaching an operator which has lower precedence than the one which
-% called |\operand:w|. This means that |\operand:w| must know what the
-% previous binary operator is, or rather, its precedence: we thus rename
-% it |\operand:Nw|. Let us describe as an example how we plan to do
-% the calculation |41-2^3*4+5|. More precisely we describe how to
-% perform the first operation in this expression. Here, we abuse
-% notations: the first argument of |\operand:Nw| should be an integer
-% constant (\cs{c_@@_prec_plus_int}, \ldots{}) equal to the precedence
-% of the given operator, not directly the operator itself.
-% \begin{itemize}
-% \item Clean up~|41| and find~|-|. We call |\operand:Nw|~|-| to find
-% the second operand.
-% \item Clean up~|2| and find~|^|.
-% \item Compare the precedences of |-| and~|^|. Since the latter is
-% higher, we need to compute the exponentiation. For this, find the
-% second operand with a nested call to |\operand:Nw|~|^|.
-% \item Clean up~|3| and find~|*|.
-% \item Compare the precedences of |^| and~|*|. Since the former is
-% higher, |\operand:Nw|~|^| has found the second operand of the
-% exponentiation, which is computed: $2^{3} = 8$.
-% \item We now have |41-8*4+5|, and |\operand:Nw|~|-| is still
-% looking for a second operand for the subtraction. Is it~$8$?
-% \item Compare the precedences of |-| and~|*|. Since the latter is
-% higher, we are not done with~$8$. Call |\operand:Nw|~|*| to find
-% the second operand of the multiplication.
-% \item Clean up~|4|, and find~|+|.
-% \item Compare the precedences of |*| and~|+|. Since the former is
-% higher, |\operand:Nw|~|*| has found the second operand of the
-% multiplication, which is computed: $8*4 = 32$.
-% \item We now have |41-32+5|, and |\operand:Nw|~|-| is still looking
-% for a second operand for the subtraction. Is it~$32$?
-% \item Compare the precedences of |-| and~|+|. Since they are equal,
-% |\operand:Nw|~|-| has found the second operand for the
-% subtraction, which is computed: $41-32=9$.
-% \item We now have |9+5|.
-% \end{itemize}
-% The procedure above stops short of performing all computations, but
-% adding a surrounding call to |\operand:Nw| with a very low precedence
-% ensures that all computations are performed before |\operand:Nw|
-% is done. Adding a trailing marker with the same very low precedence
-% prevents the surrounding |\operand:Nw| from going beyond the marker.
-%
-% The pattern above to find an operand for a given operator, is to find
-% one number and the next operator, then compare precedences to know if
-% the next computation should be done. If it should, then perform it
-% after finding its second operand, and look at the next operator, then
-% compare precedences to know if the next computation should be done.
-% This continues until we find that the next computation should not be
-% done. Then, we stop.
-%
-% We are now ready to get a bit more technical and describe which of the
-% \pkg{l3fp-parse} functions correspond to each step above.
-%
-% First, \cs{@@_parse_operand:Nw} is the |\operand:Nw| function above,
-% with small modifications due to expansion issues discussed later. We
-% denote by \meta{precedence} the argument of \cs{@@_parse_operand:Nw},
-% that is, the precedence of the binary operator whose operand we are
-% trying to find. The basic action is to read numbers from the input
-% stream. This is done by \cs{@@_parse_one:Nw}. A first approximation
-% of this function is that it reads one \meta{number}, performing no
-% computation, and finds the following binary \meta{operator}. Then it
-% expands to
-% \begin{quote}
-% \meta{number}\\
-% | \__fp_parse_infix_|\meta{operator}|:N| \meta{precedence}
-% \end{quote}
-% expanding the \texttt{infix} auxiliary before leaving the above in the
-% input stream.
-%
-% We now explain the \texttt{infix} auxiliaries. We need some
-% flexibility in how we treat the case of equal precedences: most often,
-% the first operation encountered should be performed, such as |1-2-3|
-% being computed as |(1-2)-3|, but |2^3^4| should be evaluated as
-% |2^(3^4)| instead. For this reason, and to support the equivalence
-% between |**| and~|^| more easily, each binary operator is converted to
-% a control sequence |\__fp_parse_infix_|\meta{operator}|:N| when it is
-% encountered for the first time. Instead of passing both precedences
-% to a test function to do the comparison steps above, we pass the
-% \meta{precedence} (of the earlier operator) to the \texttt{infix}
-% auxiliary for the following \meta{operator}, to know whether to
-% perform the computation of the \meta{operator}. If it should not be
-% performed, the \texttt{infix} auxiliary expands to
-% \begin{syntax}
-% |@| \cs{use_none:n} |\__fp_parse_infix_|\meta{operator}|:N|
-% \end{syntax}
-% and otherwise it calls \cs{@@_parse_operand:Nw} with the precedence of
-% the \meta{operator} to find its second operand \meta{number_2} and the
-% next \meta{operator_2}, and expands to
-% \begin{syntax}
-% |@| \cs{@@_parse_apply_binary:NwNwN}
-% ~~~~\meta{operator} \meta{number_2}
-% |@| |\__fp_parse_infix_|\meta{operator_2}|:N|
-% \end{syntax}
-% The \texttt{infix} function is responsible for comparing precedences,
-% but cannot directly call the computation functions, because the first
-% operand \meta{number} is before the \texttt{infix} function in the
-% input stream. This is why we stop the expansion here and give control
-% to another function to close the loop.
-%
-% A definition of \cs{@@_parse_operand:Nw} \meta{precedence} with some
-% of the expansion control removed is
-% \begin{syntax}
-% \cs{exp_after:wN} \cs{@@_parse_continue:NwN}
-% \cs{exp_after:wN} \meta{precedence}
-% \cs{exp:w} \cs{exp_end_continue_f:w}
-% ~~\cs{@@_parse_one:Nw} \meta{precedence}
-% \end{syntax}
-% This expands \cs{@@_parse_one:Nw} \meta{precedence} completely, which
-% finds a number, wraps the next \meta{operator} into an \texttt{infix}
-% function, feeds this function the \meta{precedence}, and expands it,
-% yielding either
-% \begin{syntax}
-% \cs{@@_parse_continue:NwN} \meta{precedence}
-% \meta{number} |@|
-% \cs{use_none:n} |\__fp_parse_infix_|\meta{operator}|:N|
-% \end{syntax}
-% or
-% \begin{syntax}
-% \cs{@@_parse_continue:NwN} \meta{precedence}
-% \meta{number} |@|
-% \cs{@@_parse_apply_binary:NwNwN}
-% ~~\meta{operator} \meta{number_2}
-% |@| |\__fp_parse_infix_|\meta{operator_2}|:N|
-% \end{syntax}
-% The definition of \cs{@@_parse_continue:NwN} is then very simple:
-% \begin{syntax}
-% |\cs_new:Npn \__fp_parse_continue:NwN #1#2@#3 { #3 #1 #2 @ }|
-% \end{syntax}
-% In the first case, |#3|~is \cs{use_none:n}, yielding
-% \begin{syntax}
-% \cs{use_none:n} \meta{precedence} \meta{number} |@|
-% |\__fp_parse_infix_|\meta{operator}|:N|
-% \end{syntax}
-% then \meta{number} |@| |\__fp_parse_infix_|\meta{operator}|:N|. In
-% the second case, |#3|~is \cs{@@_parse_apply_binary:NwNwN}, whose role
-% is to compute \meta{number} \meta{operator} \meta{number_2} and to
-% prepare for the next comparison of precedences: first we get
-% \begin{syntax}
-% \cs{@@_parse_apply_binary:NwNwN}
-% ~~\meta{precedence} \meta{number} |@|
-% ~~\meta{operator} \meta{number_2}
-% |@| |\__fp_parse_infix_|\meta{operator_2}|:N|
-% \end{syntax}
-% then
-% \begin{syntax}
-% \cs{exp_after:wN} \cs{@@_parse_continue:NwN}
-% \cs{exp_after:wN} \meta{precedence}
-% \cs{exp:w} \cs{exp_end_continue_f:w}
-% |\__fp_|\meta{operator}|_o:ww| \meta{number} \meta{number_2}
-% \cs{exp:w} \cs{exp_end_continue_f:w}
-% |\__fp_parse_infix_|\meta{operator_2}|:N| \meta{precedence}
-% \end{syntax}
-% where |\__fp_|\meta{operator}|_o:ww| computes \meta{number}
-% \meta{operator} \meta{number_2} and expands after the result, thus
-% triggers the comparison of the precedence of the \meta{operator_2} and
-% the \meta{precedence}, continuing the loop.
-%
-% We have introduced the most important functions here, and the next few
-% paragraphs we describe various subtleties.
-%
-% \subsubsection{Prefix operators, parentheses, and functions}
-%
-% Prefix operators (unary |-|, |+|,~|!|) and parentheses are taken care
-% of by the same mechanism, and functions (\texttt{sin}, \texttt{exp},
-% etc.) as well. Finding the argument of the unary~|-|, for instance,
-% is very similar to grabbing the second operand of a binary infix
-% operator, with a subtle precedence explained below. Once that operand
-% is found, the operator can be applied to it (for the unary~|-|, this
-% simply flips the sign). A left parenthesis is just a prefix operator
-% with a very low precedence equal to that of the closing parenthesis
-% (which is treated as an infix operator, since it normally appears just
-% after numbers), so that all computations are performed until the
-% closing parenthesis. The prefix operator associated to the left
-% parenthesis does not alter its argument, but it removes the closing
-% parenthesis (with some checks).
-%
-% Prefix operators are the reason why we only summarily described the
-% function \cs{@@_parse_one:Nw} earlier. This function is responsible
-% for reading in the input stream the first possible \meta{number} and
-% the next infix \meta{operator}. If what follows \cs{@@_parse_one:Nw}
-% \meta{precedence} is a prefix operator, then we must find the operand
-% of this prefix operator through a nested call to
-% \cs{@@_parse_operand:Nw} with the appropriate precedence, then apply
-% the operator to the operand found to yield the result of
-% \cs{@@_parse_one:Nw}. So far, all is simple.
-%
-% The unary operators |+|, |-|,~|!| complicate things a little bit:
-% |-3**2| should be $-(3^2)=-9$, and not $(-3)^2=9$. This would easily
-% be done by giving~|-| a lower precedence, equal to that of the infix
-% |+| and~|-|. Unfortunately, this fails in cases such as |3**-2*4|,
-% yielding $3^{-2\times 4}$ instead of the correct $3^{-2}\times 4$. A
-% second attempt would be to call \cs{@@_parse_operand:Nw} with the
-% \meta{precedence} of the previous operator, but |0>-2+3| is then
-% parsed as |0>-(2+3)|: the addition is performed because it binds more
-% tightly than the comparision which precedes~|-|. The correct approach
-% is for a unary~|-| to perform operations whose precedence is greater
-% than both that of the previous operation, and that of the unary~|-|
-% itself. The unary~|-| is given a precedence higher than
-% multiplication and division. This does not lead to any surprising
-% result, since $-(x/y) = (-x)/y$ and similarly for multiplication, and
-% it reduces the number of nested calls to \cs{@@_parse_operand:Nw}.
-%
-% Functions are implemented as prefix operators with very high
-% precedence, so that their argument is the first number that can
-% possibly be built.
-%
-% Note that contrarily to the \texttt{infix} functions discussed
-% earlier, the \texttt{prefix} functions do perform tests on the
-% previous \meta{precedence} to decide whether to find an argument or
-% not, since we know that we need a number, and must never stop there.
-%
-% \subsubsection{Numbers and reading tokens one by one}
-%
-% So far, we have glossed over one important point: what is a
-% \enquote{number}? A number is typically given in the form
-% \meta{significand}|e|\meta{exponent}, where the \meta{significand} is
-% any non-empty string composed of decimal digits and at most one
-% decimal separator (a period), the exponent
-% \enquote{\texttt{e}\meta{exponent}} is optional and is composed of an
-% exponent mark~|e| followed by a possibly empty string of signs
-% |+| or~|-| and a non-empty string of decimal digits. The
-% \meta{significand} can also be an integer, dimension, skip, or muskip
-% variable, in which case dimensions are converted from points (or mu
-% units) to floating points, and the \meta{exponent} can also be an
-% integer variable. Numbers can also be given as floating point
-% variables, or as named constants such as |nan|, |inf| or~|pi|. We may
-% add more types in the future.
-%
-% When \cs{@@_parse_one:Nw} is looking for a \enquote{number}, here is
-% what happens.
-% \begin{itemize}
-% \item If the next token is a control sequence with the meaning of
-% \cs{scan_stop:}, it can be: \cs{s_@@}, in which case our job is
-% done, as what follows is an internal floating point number, or
-% \cs{s_@@_expr_mark}, in which case the expression has come to an early
-% end, as we are still looking for a number here, or something else,
-% in which case we consider the control sequence to be a bad
-% variable resulting from \texttt{c}-expansion.
-% \item If the next token is a control sequence with a different
-% meaning, we assume that it is a register, unpack it with
-% \cs{tex_the:D}, and use its value (in \texttt{pt} for dimensions
-% and skips, \texttt{mu} for muskips) as the \meta{significand} of a
-% number: we look for an exponent.
-% \item If the next token is a digit, we remove any leading zeros,
-% then read a significand larger than~$1$ if the next character is a
-% digit, read a significand smaller than~$1$ if the next character
-% is a period, or we have found a significand equal to~$0$
-% otherwise, and look for an exponent.
-% \item If the next token is a letter, we collect more letters until
-% the first non-letter: the resulting word may denote a function
-% such as |asin|, a constant such as |pi| or be unknown. In the
-% first case, we call \cs{@@_parse_operand:Nw} to find the argument
-% of the function, then apply the function, before declaring that we
-% are done. Otherwise, we are done, either with the value of the
-% constant, or with the value |nan| for unknown words.
-% \item If the next token is anything else, we check whether it is a
-% known prefix operator, in which case \cs{@@_parse_operand:Nw}
-% finds its operand. If it is not known, then either a number is
-% missing (if the token is a known infix operator) or the token is
-% simply invalid in floating point expressions.
-% \end{itemize}
-% Once a number is found, \cs{@@_parse_one:Nw} also finds an infix
-% operator. This goes as follows.
-% \begin{itemize}
-% \item If the next token is a control sequence, it could be the
-% special marker \cs{s_@@_expr_mark}, and
-% otherwise it is a case of juxtaposing numbers, such as
-% |2\c_zero_int|, with an implied multiplication.
-% \item If the next token is a letter, it is also a case of
-% juxtaposition, as letters cannot be proper infix operators.
-% \item Otherwise (including in the case of digits), if the token is a
-% known infix operator, the appropriate
-% |\__fp_infix_|\meta{operator}|:N| function is built, and if it
-% does not exist, we complain. In particular, the juxtaposition
-% |\c_zero_int 2| is disallowed.
-% \end{itemize}
-%
-% In the above, we need to test whether a character token~|#1| is a
-% digit:
-% \begin{verbatim}
-% \if_int_compare:w 9 < 1 \token_to_str:N #1 \exp_stop_f:
-% is a digit
-% \else:
-% not a digit
-% \fi:
-% \end{verbatim}
-% To exclude |0|, replace |9| by |10|. The use of
-% \cs{token_to_str:N} ensures that a digit with any catcode is detected.
-% To test if a character token is a letter, we need to work with its
-% character code, testing if |`#1| lies in $[65,90]$ (uppercase letters)
-% or $[97,112]$ (lowercase letters)
-% \begin{verbatim}
-% \if_int_compare:w \__fp_int_eval:w
-% ( `#1 \if_int_compare:w `#1 > `Z - 32 \fi: ) / 26 = 3 \exp_stop_f:
-% is a letter
-% \else:
-% not a letter
-% \fi:
-% \end{verbatim}
-% At all steps, we try to accept all category codes: when |#1|~is kept
-% to be used later, it is almost always converted to category code other
-% through \cs{token_to_str:N}. More precisely, catcodes $\{3, 6, 7, 8,
-% 11, 12\}$ should work without trouble, but not $\{1, 2, 4, 10, 13\}$,
-% and of course $\{0, 5, 9\}$ cannot become tokens.
-%
-% Floating point expressions should behave as much as possible like
-% \eTeX{}-based integer expressions and dimension expressions. In
-% particular, \texttt{f}-expansion should be performed as the expression
-% is read, token by token, forcing the expansion of protected macros,
-% and ignoring spaces. One advantage of expanding at every step is that
-% restricted expandable functions can then be used in floating point
-% expressions just as they can be in other kinds of expressions.
-% Problematically, spaces stop \texttt{f}-expansion: for instance, the
-% macro~|\X| below would not be expanded if we simply performed
-% \texttt{f}-expansion.
-% \begin{verbatim}
-% \DeclareDocumentCommand {\test} {m} { \fp_eval:n {#1} }
-% \ExplSyntaxOff
-% \test { 1 + \X }
-% \end{verbatim}
-% Of course, spaces typically do not appear in a code setting, but may very
-% easily come in document-level input, from which some expressions may
-% come. To avoid this problem, at every step, we do essentially what
-% \cs{use:f} would do: take an argument, put it back in the input
-% stream, then \texttt{f}-expand it. This is not a complete solution,
-% since a macro's expansion could contain leading spaces which would stop
-% the \texttt{f}-expansion before further macro calls are performed.
-% However, in practice it should be enough: in particular, floating
-% point numbers are correctly expanded to the underlying \cs{s_@@}
-% \ldots{} structure. The \texttt{f}-expansion is performed by
-% \cs{@@_parse_expand:w}.
-%
-% ^^A begin[todo]
-%
-% \subsection{Main auxiliary functions}
-%
-% \begin{macro}[rEXP]{\@@_parse_operand:Nw}
-% \begin{syntax}
-% \cs{exp:w} \cs{@@_parse_operand:Nw} \meta{precedence} \cs{@@_parse_expand:w}
-% \end{syntax}
-% Reads the \enquote{\ttfamily\ldots{}}, performing every computation
-% with a precedence higher than \meta{precedence}, then expands to
-% \begin{syntax}
-% \meta{result} |@| |\__fp_parse_infix_|\meta{operation}|:N| \ldots{}
-% \end{syntax}
-% where the \meta{operation} is the first operation with a lower
-% precedence, possibly \texttt{end}, and the
-% \enquote{\ttfamily\ldots{}} start just after the \meta{operation}.
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_parse_infix_+:N}
-% \begin{syntax}
-% \cs{@@_parse_infix_+:N} \meta{precedence} \ldots{}
-% \end{syntax}
-% If |+|~has a precedence higher than the \meta{precedence}, cleans up
-% a second \meta{operand} and finds the \meta{operation_2} which
-% follows, and expands to
-% \begin{syntax}
-% |@| \cs{@@_parse_apply_binary:NwNwN} |+| \meta{operand} |@| \cs{@@_parse_infix_\meta{operation_2}:N} \ldots{}
-% \end{syntax}
-% Otherwise expands to
-% \begin{syntax}
-% |@| \cs{use_none:n} \cs{@@_parse_infix_+:N} \ldots{}
-% \end{syntax}
-% A similar function exists for each infix operator.
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_parse_one:Nw}
-% \begin{syntax}
-% \cs{@@_parse_one:Nw} \meta{precedence} \ldots{}
-% \end{syntax}
-% Cleans up one or two operands depending on how the precedence of the
-% next operation compares to the \meta{precedence}. If the following
-% \meta{operation} has a precedence higher than \meta{precedence},
-% expands to
-% \begin{syntax}
-% \meta{operand_1} |@| \cs{@@_parse_apply_binary:NwNwN} \meta{operation} \meta{operand_2} |@| |\__fp_parse_infix_|\meta{operation_2}|:N| \ldots{}
-% \end{syntax}
-% and otherwise expands to
-% \begin{syntax}
-% \meta{operand} |@| \cs{use_none:n} |\__fp_parse_infix_|\meta{operation}|:N| \ldots{}
-% \end{syntax}
-% \end{macro}
-%
-% ^^A end[todo]
-%
-% \subsection{Helpers}
-%
-% \begin{macro}[rEXP]{\@@_parse_expand:w}
-% \begin{syntax}
-% \cs{exp:w} \cs{@@_parse_expand:w} \meta{tokens}
-% \end{syntax}
-% This function must always come within a \cs{exp:w} expansion.
-% The \meta{tokens} should be the part of the expression that we have
-% not yet read. This requires in particular closing all conditionals
-% properly before expanding.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_expand:w #1 { \exp_end_continue_f:w #1 }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_parse_return_semicolon:w}
-% This very odd function swaps its position with the following
-% \cs{fi:} and removes \cs{@@_parse_expand:w} normally responsible for
-% expansion. That turns out to be useful.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_return_semicolon:w
- #1 \fi: \@@_parse_expand:w { \fi: ; #1 }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]
-% {
-% \@@_parse_digits_vii:N ,
-% \@@_parse_digits_vi:N ,
-% \@@_parse_digits_v:N ,
-% \@@_parse_digits_iv:N ,
-% \@@_parse_digits_iii:N ,
-% \@@_parse_digits_ii:N ,
-% \@@_parse_digits_i:N ,
-% \@@_parse_digits_:N
-% }
-% These functions must be called within an \cs{int_value:w} or
-% \cs{@@_int_eval:w} construction. The first token which follows must
-% be \texttt{f}-expanded prior to calling those functions. The
-% functions read tokens one by one, and output digits into the input
-% stream, until meeting a non-digit, or up to a number of digits equal
-% to their index. The full expansion is
-% \begin{syntax}
-% \meta{digits} |;| \meta{filling 0} |;| \meta{length}
-% \end{syntax}
-% where \meta{filling 0} is a string of zeros such that \meta{digits}
-% \meta{filling 0} has the length given by the index of the function,
-% and \meta{length} is the number of zeros in the \meta{filling 0}
-% string. Each function puts a digit into the input stream and calls
-% the next function, until we find a non-digit. We are careful to
-% pass the tested tokens through \cs{token_to_str:N} to normalize
-% their category code.
-% \begin{macrocode}
-\cs_set_protected:Npn \@@_tmp:w #1 #2 #3
- {
- \cs_new:cpn { @@_parse_digits_ #1 :N } ##1
- {
- \if_int_compare:w 9 < 1 \token_to_str:N ##1 \exp_stop_f:
- \token_to_str:N ##1 \exp_after:wN #2 \exp:w
- \else:
- \@@_parse_return_semicolon:w #3 ##1
- \fi:
- \@@_parse_expand:w
- }
- }
-\@@_tmp:w {vii} \@@_parse_digits_vi:N { 0000000 ; 7 }
-\@@_tmp:w {vi} \@@_parse_digits_v:N { 000000 ; 6 }
-\@@_tmp:w {v} \@@_parse_digits_iv:N { 00000 ; 5 }
-\@@_tmp:w {iv} \@@_parse_digits_iii:N { 0000 ; 4 }
-\@@_tmp:w {iii} \@@_parse_digits_ii:N { 000 ; 3 }
-\@@_tmp:w {ii} \@@_parse_digits_i:N { 00 ; 2 }
-\@@_tmp:w {i} \@@_parse_digits_:N { 0 ; 1 }
-\cs_new:Npn \@@_parse_digits_:N { ; ; 0 }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Parsing one number}
-%
-% \begin{macro}[EXP]{\@@_parse_one:Nw}
-% This function finds one number, and packs the symbol which follows
-% in an \cs[no-index]{@@_parse_infix_\ldots{}} csname.
-% |#1|~is the previous \meta{precedence},
-% and |#2|~the first token of the operand. We distinguish four cases:
-% |#2|~is equal to \cs{scan_stop:} in meaning, |#2|~is a different
-% control sequence, |#2|~is a digit, and |#2|~is something else (this
-% last case is split further later). Despite the earlier
-% \texttt{f}-expansion, |#2|~may still be expandable if it was
-% protected by \cs{exp_not:N}, as may happen with the \LaTeXe{} command
-% \tn{protect}. Using a well placed \cs{reverse_if:N}, this case is
-% sent to \cs{@@_parse_one_fp:NN} which deals with it robustly.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_one:Nw #1 #2
- {
- \if_catcode:w \scan_stop: \exp_not:N #2
- \exp_after:wN \if_meaning:w \exp_not:N #2 #2 \else:
- \exp_after:wN \reverse_if:N
- \fi:
- \if_meaning:w \scan_stop: #2
- \exp_after:wN \exp_after:wN
- \exp_after:wN \@@_parse_one_fp:NN
- \else:
- \exp_after:wN \exp_after:wN
- \exp_after:wN \@@_parse_one_register:NN
- \fi:
- \else:
- \if_int_compare:w 9 < 1 \token_to_str:N #2 \exp_stop_f:
- \exp_after:wN \exp_after:wN
- \exp_after:wN \@@_parse_one_digit:NN
- \else:
- \exp_after:wN \exp_after:wN
- \exp_after:wN \@@_parse_one_other:NN
- \fi:
- \fi:
- #1 #2
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {
-% \@@_parse_one_fp:NN,
-% \@@_exp_after_expr_mark_f:nw,
-% \@@_exp_after_?_f:nw
-% }
-% This function receives a \meta{precedence} and a control sequence
-% equal to \cs{scan_stop:} in meaning. There are three cases.
-% \begin{itemize}
-% \item \cs{s_@@} starts a floating point number, and we call
-% \cs{@@_exp_after_f:nw}, which |f|-expands after the floating
-% point.
-% \item \cs{s_@@_expr_mark} is a premature end, we call
-% \cs{@@_exp_after_expr_mark_f:nw}, which triggers an |fp-early-end|
-% error.
-% \item For a control sequence not containing \cs[no-index]{s_@@}, we call
-% \cs{@@_exp_after_?_f:nw}, causing a |bad-variable| error.
-% \end{itemize}
-% This scheme is extensible: additional types can be added by starting
-% the variables with a scan mark of the form \cs[no-index]{s_@@_\meta{type}} and
-% defining |\__fp_exp_after_|\meta{type}|_f:nw|. In all cases, we
-% make sure that the second argument of \cs{@@_parse_infix:NN} is
-% correctly expanded.
-% A special case only enabled in \LaTeXe{} is that if \tn{protect} is
-% encountered then the error message mentions the control sequence
-% which follows it rather than \tn{protect} itself. The test for
-% \LaTeXe{} uses \tn{@unexpandable@protect} rather than \tn{protect}
-% because \tn{protect} is often \cs{scan_stop:} hence \enquote{does
-% not exist}.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_one_fp:NN #1
- {
- \@@_exp_after_any_f:nw
- {
- \exp_after:wN \@@_parse_infix:NN
- \exp_after:wN #1 \exp:w \@@_parse_expand:w
- }
- }
-\cs_new:Npn \@@_exp_after_expr_mark_f:nw #1
- {
- \int_case:nnF { \exp_after:wN \use_i:nnn \use_none:nnn #1 }
- {
- \c_@@_prec_comma_int { }
- \c_@@_prec_tuple_int { }
- \c_@@_prec_end_int
- {
- \exp_after:wN \c_@@_empty_tuple_fp
- \exp:w \exp_end_continue_f:w
- }
- }
- {
- \msg_expandable_error:nn { fp } { early-end }
- \exp_after:wN \c_nan_fp \exp:w \exp_end_continue_f:w
- }
- #1
- }
-\cs_new:cpn { @@_exp_after_?_f:nw } #1#2
- {
- \msg_expandable_error:nnn { kernel } { bad-variable }
- {#2}
- \exp_after:wN \c_nan_fp \exp:w \exp_end_continue_f:w #1
- }
-\cs_set_protected:Npn \@@_tmp:w #1
- {
- \cs_if_exist:NT #1
- {
- \cs_gset:cpn { @@_exp_after_?_f:nw } ##1##2
- {
- \exp_after:wN \c_nan_fp \exp:w \exp_end_continue_f:w ##1
- \str_if_eq:nnTF {##2} { \protect }
- {
- \cs_if_eq:NNTF ##2 #1 { \use_i:nn } { \use:n }
- {
- \msg_expandable_error:nnn { fp }
- { robust-cmd }
- }
- }
- {
- \msg_expandable_error:nnn { kernel }
- { bad-variable } {##2}
- }
- }
- }
- }
-\exp_args:Nc \@@_tmp:w { @unexpandable@protect }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {
-% \@@_parse_one_register:NN,
-% \@@_parse_one_register_aux:Nw,
-% \@@_parse_one_register_auxii:wwwNw,
-% \@@_parse_one_register_int:www,
-% \@@_parse_one_register_mu:www,
-% \@@_parse_one_register_dim:ww,
-% }
-% This is called whenever~|#2| is a control sequence other than
-% \cs{scan_stop:} in meaning. We special-case \tn{wd}, \tn{ht}, \tn{dp}
-% (see later) and otherwise assume that it is a register, but
-% carefully unpack it with \cs{tex_the:D} within braces. First, we
-% find the exponent following~|#2|. Then we unpack~|#2| with
-% \cs{tex_the:D}, and the \texttt{auxii} auxiliary distinguishes
-% integer registers from dimensions/skips from muskips, according to
-% the presence of a period and/or of |pt|. For integers, simply
-% convert \meta{value}|e|\meta{exponent} to a floating point number
-% with \cs{@@_parse:n} (this is somewhat wasteful). For other
-% registers, the decimal rounding provided by \TeX{} does not
-% accurately represent the binary value that it manipulates, so we
-% extract this binary value as a number of scaled points with
-% \cs{int_value:w} \cs{dim_to_decimal_in_sp:n} |{| \meta{decimal value} |pt| |}|, and
-% use an auxiliary of \cs{dim_to_fp:n}, which performs the
-% multiplication by $2^{-16}$, correctly rounded.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_one_register:NN #1#2
- {
- \exp_after:wN \@@_parse_infix_after_operand:NwN
- \exp_after:wN #1
- \exp:w \exp_end_continue_f:w
- \@@_parse_one_register_special:N #2
- \exp_after:wN \@@_parse_one_register_aux:Nw
- \exp_after:wN #2
- \int_value:w
- \exp_after:wN \@@_parse_exponent:N
- \exp:w \@@_parse_expand:w
- }
-\cs_new:Npe \@@_parse_one_register_aux:Nw #1
- {
- \exp_not:n
- {
- \exp_after:wN \use:nn
- \exp_after:wN \@@_parse_one_register_auxii:wwwNw
- }
- \exp_not:N \exp_after:wN { \exp_not:N \tex_the:D #1 }
- ; \exp_not:N \@@_parse_one_register_dim:ww
- \tl_to_str:n { pt } ; \exp_not:N \@@_parse_one_register_mu:www
- . \tl_to_str:n { pt } ; \exp_not:N \@@_parse_one_register_int:www
- \s_@@_stop
- }
-\exp_args:Nno \use:nn
- { \cs_new:Npn \@@_parse_one_register_auxii:wwwNw #1 . #2 }
- { \tl_to_str:n { pt } #3 ; #4#5 \s_@@_stop }
- { #4 #1.#2; }
-\exp_args:Nno \use:nn
- { \cs_new:Npn \@@_parse_one_register_mu:www #1 }
- { \tl_to_str:n { mu } ; #2 ; }
- { \@@_parse_one_register_dim:ww #1 ; }
-\cs_new:Npn \@@_parse_one_register_int:www #1; #2.; #3;
- { \@@_parse:n { #1 e #3 } }
-\cs_new:Npn \@@_parse_one_register_dim:ww #1; #2;
- {
- \exp_after:wN \@@_from_dim_test:ww
- \int_value:w #2 \exp_after:wN ,
- \int_value:w \dim_to_decimal_in_sp:n { #1 pt } ;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \@@_parse_one_register_special:N,
-% \@@_parse_one_register_math:NNw,
-% \@@_parse_one_register_wd:w,
-% \@@_parse_one_register_wd:Nw
-% }
-% The \tn{wd}, \tn{dp}, \tn{ht} primitives expect an integer argument.
-% We abuse the exponent parser to find the integer argument: simply
-% include the exponent marker~|e|. Once that \enquote{exponent} is
-% found, use \cs{tex_the:D} to find the box dimension and then copy
-% what we did for dimensions.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_one_register_special:N #1
- {
- \if_meaning:w \box_wd:N #1 \@@_parse_one_register_wd:w \fi:
- \if_meaning:w \box_ht:N #1 \@@_parse_one_register_wd:w \fi:
- \if_meaning:w \box_dp:N #1 \@@_parse_one_register_wd:w \fi:
- \if_meaning:w \infty #1
- \@@_parse_one_register_math:NNw \infty #1
- \fi:
- \if_meaning:w \pi #1
- \@@_parse_one_register_math:NNw \pi #1
- \fi:
- }
-\cs_new:Npn \@@_parse_one_register_math:NNw
- #1#2#3#4 \@@_parse_expand:w
- {
- #3
- \str_if_eq:nnTF {#1} {#2}
- {
- \msg_expandable_error:nnn
- { fp } { infty-pi } {#1}
- \c_nan_fp
- }
- { #4 \@@_parse_expand:w }
- }
-\cs_new:Npn \@@_parse_one_register_wd:w
- #1#2 \exp_after:wN #3#4 \@@_parse_expand:w
- {
- #1
- \exp_after:wN \@@_parse_one_register_wd:Nw
- #4 \@@_parse_expand:w e
- }
-\cs_new:Npn \@@_parse_one_register_wd:Nw #1#2 ;
- {
- \exp_after:wN \@@_from_dim_test:ww
- \exp_after:wN 0 \exp_after:wN ,
- \int_value:w \dim_to_decimal_in_sp:n { #1 #2 } ;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_parse_one_digit:NN}
-% A digit marks the beginning of an explicit floating point number.
-% Once the number is found, we catch the case of overflow and
-% underflow with \cs{@@_sanitize:wN}, then
-% \cs{@@_parse_infix_after_operand:NwN} expands \cs{@@_parse_infix:NN}
-% after the number we find, to wrap the following infix operator as
-% required. Finding the number itself begins by removing leading
-% zeros: further steps are described later.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_one_digit:NN #1
- {
- \exp_after:wN \@@_parse_infix_after_operand:NwN
- \exp_after:wN #1
- \exp:w \exp_end_continue_f:w
- \exp_after:wN \@@_sanitize:wN
- \int_value:w \@@_int_eval:w 0 \@@_parse_trim_zeros:N
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_parse_one_other:NN}
-% For this function, |#2|~is a character token which is not a digit.
-% If it is an \textsc{ascii} letter, \cs{@@_parse_letters:N} beyond this one and give
-% the result to \cs{@@_parse_word:Nw}. Otherwise, the character is
-% assumed to be a prefix operator, and we build
-% |\__fp_parse_prefix_|\meta{operator}|:Nw|.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_one_other:NN #1 #2
- {
- \if_int_compare:w
- \@@_int_eval:w
- ( `#2 \if_int_compare:w `#2 > `Z - 32 \fi: ) / 26
- = 3 \exp_stop_f:
- \exp_after:wN \@@_parse_word:Nw
- \exp_after:wN #1
- \exp_after:wN #2
- \exp:w \exp_after:wN \@@_parse_letters:N
- \exp:w
- \else:
- \exp_after:wN \@@_parse_prefix:NNN
- \exp_after:wN #1
- \exp_after:wN #2
- \cs:w
- @@_parse_prefix_ \token_to_str:N #2 :Nw
- \exp_after:wN
- \cs_end:
- \exp:w
- \fi:
- \@@_parse_expand:w
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_parse_word:Nw}
-% \begin{macro}[rEXP]{\@@_parse_letters:N}
-% Finding letters is a simple recursion. Once \cs{@@_parse_letters:N}
-% has done its job, we try to build a control sequence from the
-% word~|#2|. If it is a known word, then the corresponding action is
-% taken, and otherwise, we complain about an unknown word, yield
-% \cs{c_nan_fp}, and look for the following infix operator. Note that
-% the unknown word could be a mistyped function as well as a mistyped
-% constant, so there is no way to tell whether to look for arguments;
-% we do not.
-% The standard requires \enquote{inf} and \enquote{infinity} and
-% \enquote{nan} to be recognized regardless of case, but we probably
-% don't want to allow every \pkg{l3fp} word to have an arbitrary
-% mixture of lower and upper case, so we test and use a
-% differently-named control sequence.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_word:Nw #1#2;
- {
- \cs_if_exist_use:cF { @@_parse_word_#2:N }
- {
- \cs_if_exist_use:cF
- { @@_parse_caseless_ \str_casefold:n {#2} :N }
- {
- \msg_expandable_error:nnn
- { fp } { unknown-fp-word } {#2}
- \exp_after:wN \c_nan_fp \exp:w \exp_end_continue_f:w
- \@@_parse_infix:NN
- }
- }
- #1
- }
-\cs_new:Npn \@@_parse_letters:N #1
- {
- \exp_end_continue_f:w
- \if_int_compare:w
- \if_catcode:w \scan_stop: \exp_not:N #1
- 0
- \else:
- \@@_int_eval:w
- ( `#1 \if_int_compare:w `#1 > `Z - 32 \fi: ) / 26
- \fi:
- = 3 \exp_stop_f:
- \exp_after:wN #1
- \exp:w \exp_after:wN \@@_parse_letters:N
- \exp:w
- \else:
- \@@_parse_return_semicolon:w #1
- \fi:
- \@@_parse_expand:w
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {\@@_parse_prefix:NNN, \@@_parse_prefix_unknown:NNN}
-% For this function, |#1|~is the previous \meta{precedence}, |#2|~is
-% the operator just seen, and |#3|~is a control sequence which
-% implements the operator if it is a known operator. If this control
-% sequence is \cs{scan_stop:}, then the operator is in fact unknown.
-% Either the expression is missing a number there (if the operator is
-% valid as an infix operator), and we put \texttt{nan}, wrapping the
-% infix operator in a csname as appropriate, or the character is
-% simply invalid in floating point expressions, and we continue
-% looking for a number, starting again from \cs{@@_parse_one:Nw}.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_prefix:NNN #1#2#3
- {
- \if_meaning:w \scan_stop: #3
- \exp_after:wN \@@_parse_prefix_unknown:NNN
- \exp_after:wN #2
- \fi:
- #3 #1
- }
-\cs_new:Npn \@@_parse_prefix_unknown:NNN #1#2#3
- {
- \cs_if_exist:cTF { @@_parse_infix_ \token_to_str:N #1 :N }
- {
- \msg_expandable_error:nnn
- { fp } { missing-number } {#1}
- \exp_after:wN \c_nan_fp \exp:w \exp_end_continue_f:w
- \@@_parse_infix:NN #3 #1
- }
- {
- \msg_expandable_error:nnn
- { fp } { unknown-symbol } {#1}
- \@@_parse_one:Nw #3
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Numbers: trimming leading zeros}
-%
-% Numbers are parsed as follows: first we trim leading zeros, then
-% if the next character is a digit, start reading a significand $\geq 1$
-% with the set of functions |\__fp_parse_large|\ldots{}; if it is a
-% period, the significand is~$<1$; and otherwise it is zero. In the
-% second case, trim additional zeros after the period, counting them for
-% an exponent shift $\meta{exp_1}<0$, then read the significand with the
-% set of functions |\__fp_parse_small|\ldots{} Once the significand is
-% read, read the exponent if |e|~is present.
-%
-% \begin{macro}[rEXP]{\@@_parse_trim_zeros:N, \@@_parse_trim_end:w}
-% This function expects an already expanded token. It removes any
-% leading zero, then distinguishes three cases: if the first non-zero
-% token is a digit, then call \cs{@@_parse_large:N} (the significand
-% is $\geq 1$); if it is |.|, then continue trimming zeros with
-% \cs{@@_parse_strim_zeros:N}; otherwise, our number is exactly zero,
-% and we call \cs{@@_parse_zero:} to take care of that case.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_trim_zeros:N #1
- {
- \if:w 0 \exp_not:N #1
- \exp_after:wN \@@_parse_trim_zeros:N
- \exp:w
- \else:
- \if:w . \exp_not:N #1
- \exp_after:wN \@@_parse_strim_zeros:N
- \exp:w
- \else:
- \@@_parse_trim_end:w #1
- \fi:
- \fi:
- \@@_parse_expand:w
- }
-\cs_new:Npn \@@_parse_trim_end:w #1 \fi: \fi: \@@_parse_expand:w
- {
- \fi:
- \fi:
- \if_int_compare:w 9 < 1 \token_to_str:N #1 \exp_stop_f:
- \exp_after:wN \@@_parse_large:N
- \else:
- \exp_after:wN \@@_parse_zero:
- \fi:
- #1
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]
-% {\@@_parse_strim_zeros:N, \@@_parse_strim_end:w}
-% If we have removed all digits until a period (or if the body started
-% with a period), then enter the \enquote{\texttt{small_trim}} loop
-% which outputs $-1$ for each removed~$0$. Those $-1$ are added to an
-% integer expression waiting for the exponent. If the first non-zero
-% token is a digit, call \cs{@@_parse_small:N} (our significand is
-% smaller than~$1$), and otherwise, the number is an exact zero. The
-% name \texttt{strim} stands for \enquote{small trim}.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_strim_zeros:N #1
- {
- \if:w 0 \exp_not:N #1
- - 1
- \exp_after:wN \@@_parse_strim_zeros:N \exp:w
- \else:
- \@@_parse_strim_end:w #1
- \fi:
- \@@_parse_expand:w
- }
-\cs_new:Npn \@@_parse_strim_end:w #1 \fi: \@@_parse_expand:w
- {
- \fi:
- \if_int_compare:w 9 < 1 \token_to_str:N #1 \exp_stop_f:
- \exp_after:wN \@@_parse_small:N
- \else:
- \exp_after:wN \@@_parse_zero:
- \fi:
- #1
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_parse_zero:}
-% After reading a significand of~$0$, find any exponent, then put a
-% sign of~|1| for \cs{@@_sanitize:wN}, which removes everything
-% and leaves an exact zero.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_zero:
- {
- \exp_after:wN ; \exp_after:wN 1
- \int_value:w \@@_parse_exponent:N
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Number: small significand}
-%
-% \begin{macro}[rEXP]{\@@_parse_small:N}
-% This function is called after we have passed the decimal separator
-% and removed all leading zeros from the significand. It is followed
-% by a non-zero digit (with any catcode). The goal is to read up to
-% $16$ digits. But we can't do that all at once, because
-% \cs{int_value:w} (which allows us to collect digits and continue
-% expanding) can only go up to $9$ digits. Hence we grab digits in
-% two steps of $8$ digits. Since |#1| is a digit, read seven more
-% digits using \cs{@@_parse_digits_vii:N}. The \texttt{small_leading}
-% auxiliary leaves those digits in the \cs{int_value:w}, and
-% grabs some more, or stops if there are no more digits. Then the
-% \texttt{pack_leading} auxiliary puts the various parts in the
-% appropriate order for the processing further up.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_small:N #1
- {
- \exp_after:wN \@@_parse_pack_leading:NNNNNww
- \int_value:w \@@_int_eval:w 1 \token_to_str:N #1
- \exp_after:wN \@@_parse_small_leading:wwNN
- \int_value:w 1
- \exp_after:wN \@@_parse_digits_vii:N
- \exp:w \@@_parse_expand:w
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_parse_small_leading:wwNN}
-% \begin{syntax}
-% \cs{@@_parse_small_leading:wwNN} |1| \meta{digits} |;| \meta{zeros} |;| \meta{number~of~zeros}
-% \end{syntax}
-% We leave \meta{digits} \meta{zeros} in the input stream: the
-% functions used to grab digits are such that this constitutes digits
-% $1$ through~$8$ of the significand. Then prepare to pack $8$~more
-% digits, with an exponent shift of zero (this shift is used in
-% the case of a large significand). If |#4|~is a digit, leave it
-% behind for the packing function, and read $6$~more digits to reach a
-% total of $15$~digits: further digits are involved in the rounding.
-% Otherwise put $8$~zeros in to complete the significand, then look
-% for an exponent.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_small_leading:wwNN 1 #1 ; #2; #3 #4
- {
- #1 #2
- \exp_after:wN \@@_parse_pack_trailing:NNNNNNww
- \exp_after:wN 0
- \int_value:w \@@_int_eval:w 1
- \if_int_compare:w 9 < 1 \token_to_str:N #4 \exp_stop_f:
- \token_to_str:N #4
- \exp_after:wN \@@_parse_small_trailing:wwNN
- \int_value:w 1
- \exp_after:wN \@@_parse_digits_vi:N
- \exp:w
- \else:
- 0000 0000 \@@_parse_exponent:Nw #4
- \fi:
- \@@_parse_expand:w
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_parse_small_trailing:wwNN}
-% \begin{syntax}
-% \cs{@@_parse_small_trailing:wwNN} |1| \meta{digits} |;| \meta{zeros} |;| \meta{number~of~zeros} \meta{next~token}
-% \end{syntax}
-% Leave digits $10$ to~$15$ (arguments |#1| and |#2|) in the input
-% stream. If the \meta{next~token} is a digit, it is the $16$th
-% digit, we keep it, then the \texttt{small_round} auxiliary considers
-% this digit and all further digits to perform the rounding: the
-% function expands to nothing, to |+0| or to |+1|.
-% Otherwise, there is no $16$-th digit, so we put a~$0$, and look for
-% an exponent.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_small_trailing:wwNN 1 #1 ; #2; #3 #4
- {
- #1 #2
- \if_int_compare:w 9 < 1 \token_to_str:N #4 \exp_stop_f:
- \token_to_str:N #4
- \exp_after:wN \@@_parse_small_round:NN
- \exp_after:wN #4
- \exp:w
- \else:
- 0 \@@_parse_exponent:Nw #4
- \fi:
- \@@_parse_expand:w
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]
-% {
-% \@@_parse_pack_trailing:NNNNNNww ,
-% \@@_parse_pack_leading:NNNNNww ,
-% \@@_parse_pack_carry:w
-% }
-% Those functions are expanded after all the digits are found, we took
-% care of the rounding, as well as the exponent. The last argument is
-% the exponent. The previous five arguments are $8$~digits which we
-% pack in groups of~$4$, and the argument before that is~$1$, except
-% in the rare case where rounding lead to a carry, in which case the
-% argument is~$2$. The \texttt{trailing} function has an exponent
-% shift as its first argument, which we add to the exponent found in
-% the |e...| syntax. If the trailing digits cause a carry, the
-% integer expression for the leading digits is incremented (|+1|
-% in the code below). If the leading digits propagate this carry all
-% the way up, the function \cs{@@_parse_pack_carry:w} increments the
-% exponent, and changes the significand from |0000...| to |1000...|:
-% this is simple because such a carry can only occur to give rise to a
-% power of~$10$.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_pack_trailing:NNNNNNww #1 #2 #3#4#5#6 #7; #8 ;
- {
- \if_meaning:w 2 #2 + 1 \fi:
- ; #8 + #1 ; {#3#4#5#6} {#7};
- }
-\cs_new:Npn \@@_parse_pack_leading:NNNNNww #1 #2#3#4#5 #6; #7;
- {
- + #7
- \if_meaning:w 2 #1 \@@_parse_pack_carry:w \fi:
- ; 0 {#2#3#4#5} {#6}
- }
-\cs_new:Npn \@@_parse_pack_carry:w \fi: ; 0 #1
- { \fi: + 1 ; 0 {1000} }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Number: large significand}
-%
-% Parsing a significand larger than~$1$ is a little bit more difficult
-% than parsing small significands. We need to count the number of
-% digits before the decimal separator, and add that to the final
-% exponent. We also need to test for the presence of a dot each time we
-% run out of digits, and branch to the appropriate \texttt{parse_small}
-% function in those cases.
-%
-% \begin{macro}[EXP]{\@@_parse_large:N}
-% This function is followed by the first non-zero digit of a
-% \enquote{large} significand ($\geq 1$). It is called within an
-% integer expression for the exponent. Grab up to $7$~more digits,
-% for a total of $8$~digits.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_large:N #1
- {
- \exp_after:wN \@@_parse_large_leading:wwNN
- \int_value:w 1 \token_to_str:N #1
- \exp_after:wN \@@_parse_digits_vii:N
- \exp:w \@@_parse_expand:w
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_parse_large_leading:wwNN}
-% \begin{syntax}
-% \cs{@@_parse_large_leading:wwNN} |1| \meta{digits} |;| \meta{zeros} |;| \meta{number~of~zeros} \meta{next~token}
-% \end{syntax}
-% We shift the exponent by the number of digits in~|#1|, namely the
-% target number, $8$, minus the \meta{number of zeros} (number of
-% digits missing). Then prepare to pack the $8$~first digits. If the
-% \meta{next token} is a digit, read up to $6$~more digits (digits
-% $10$ to~$15$). If it is a period, try to grab the end of our
-% $8$~first digits, branching to the \texttt{small} functions since
-% the number of digit does not affect the exponent anymore. Finally,
-% if this is the end of the significand, insert the \meta{zeros} to
-% complete the $8$~first digits, insert $8$~more, and look for an
-% exponent.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_large_leading:wwNN 1 #1 ; #2; #3 #4
- {
- + \c_@@_half_prec_int - #3
- \exp_after:wN \@@_parse_pack_leading:NNNNNww
- \int_value:w \@@_int_eval:w 1 #1
- \if_int_compare:w 9 < 1 \token_to_str:N #4 \exp_stop_f:
- \exp_after:wN \@@_parse_large_trailing:wwNN
- \int_value:w 1 \token_to_str:N #4
- \exp_after:wN \@@_parse_digits_vi:N
- \exp:w
- \else:
- \if:w . \exp_not:N #4
- \exp_after:wN \@@_parse_small_leading:wwNN
- \int_value:w 1
- \cs:w
- @@_parse_digits_
- \@@_int_to_roman:w #3
- :N \exp_after:wN
- \cs_end:
- \exp:w
- \else:
- #2
- \exp_after:wN \@@_parse_pack_trailing:NNNNNNww
- \exp_after:wN 0
- \int_value:w 1 0000 0000
- \@@_parse_exponent:Nw #4
- \fi:
- \fi:
- \@@_parse_expand:w
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_parse_large_trailing:wwNN}
-% \begin{syntax}
-% \cs{@@_parse_large_trailing:wwNN} |1| \meta{digits} |;| \meta{zeros} |;| \meta{number~of~zeros} \meta{next~token}
-% \end{syntax}
-% We have just read $15$~digits. If the \meta{next token} is a digit,
-% then the exponent shift caused by this block of $8$~digits is~$8$,
-% first argument to the \texttt{pack_trailing} function. We keep the
-% \meta{digits} and this $16$-th digit, and find how this should be
-% rounded using \cs{@@_parse_large_round:NN}. Otherwise, the exponent
-% shift is the number of \meta{digits}, $7$~minus the \meta{number of
-% zeros}, and we test for a decimal point. This case happens in
-% |123451234512345.67| with exactly $15$ digits before the decimal
-% separator. Then branch to the appropriate \texttt{small} auxiliary,
-% grabbing a few more digits to complement the digits we already
-% grabbed. Finally, if this is truly the end of the significand, look
-% for an exponent after using the \meta{zeros} and providing a $16$-th
-% digit of~$0$.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_large_trailing:wwNN 1 #1 ; #2; #3 #4
- {
- \if_int_compare:w 9 < 1 \token_to_str:N #4 \exp_stop_f:
- \exp_after:wN \@@_parse_pack_trailing:NNNNNNww
- \exp_after:wN \c_@@_half_prec_int
- \int_value:w \@@_int_eval:w 1 #1 \token_to_str:N #4
- \exp_after:wN \@@_parse_large_round:NN
- \exp_after:wN #4
- \exp:w
- \else:
- \exp_after:wN \@@_parse_pack_trailing:NNNNNNww
- \int_value:w \@@_int_eval:w 7 - #3 \exp_stop_f:
- \int_value:w \@@_int_eval:w 1 #1
- \if:w . \exp_not:N #4
- \exp_after:wN \@@_parse_small_trailing:wwNN
- \int_value:w 1
- \cs:w
- @@_parse_digits_
- \@@_int_to_roman:w #3
- :N \exp_after:wN
- \cs_end:
- \exp:w
- \else:
- #2 0 \@@_parse_exponent:Nw #4
- \fi:
- \fi:
- \@@_parse_expand:w
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Number: beyond 16 digits, rounding}
-%
-% \begin{macro}[rEXP]{\@@_parse_round_loop:N, \@@_parse_round_up:N}
-% This loop is called when rounding a number (whether the mantissa is
-% small or large). It should appear in an integer expression. This
-% function reads digits one by one, until reaching a non-digit, and
-% adds~$1$ to the integer expression for each digit. If all digits
-% found are~$0$, the function ends the expression by |;0|,
-% otherwise by |;1|. This is done by switching the loop to
-% |round_up| at the first non-zero digit, thus we avoid to test
-% whether digits are~$0$ or not once we see a first non-zero digit.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_round_loop:N #1
- {
- \if_int_compare:w 9 < 1 \token_to_str:N #1 \exp_stop_f:
- + 1
- \if:w 0 \token_to_str:N #1
- \exp_after:wN \@@_parse_round_loop:N
- \exp:w
- \else:
- \exp_after:wN \@@_parse_round_up:N
- \exp:w
- \fi:
- \else:
- \@@_parse_return_semicolon:w 0 #1
- \fi:
- \@@_parse_expand:w
- }
-\cs_new:Npn \@@_parse_round_up:N #1
- {
- \if_int_compare:w 9 < 1 \token_to_str:N #1 \exp_stop_f:
- + 1
- \exp_after:wN \@@_parse_round_up:N
- \exp:w
- \else:
- \@@_parse_return_semicolon:w 1 #1
- \fi:
- \@@_parse_expand:w
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_parse_round_after:wN}
-% After the loop \cs{@@_parse_round_loop:N}, this function fetches an
-% exponent with \cs{@@_parse_exponent:N}, and combines it with the
-% number of digits counted by \cs{@@_parse_round_loop:N}. At the same
-% time, the result |0| or |1| is added to the
-% surrounding integer expression.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_round_after:wN #1; #2
- {
- + #2 \exp_after:wN ;
- \int_value:w \@@_int_eval:w #1 + \@@_parse_exponent:N
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]
-% {\@@_parse_small_round:NN, \@@_parse_round_after:wN}
-% Here, |#1|~is the digit that we are currently rounding (we only care
-% whether it is even or odd). If |#2|~is not a digit, then fetch an
-% exponent and expand to |;|\meta{exponent} only. Otherwise, we
-% expand to |+0| or |+1|, then |;|\meta{exponent}. To
-% decide which, call \cs{@@_round_s:NNNw} to know whether to round up,
-% giving it as arguments a sign~$0$ (all explicit numbers are
-% positive), the digit |#1|~to round, the first following digit~|#2|,
-% and either |+0| or |+1| depending on whether the
-% following digits are all zero or not. This last argument is
-% obtained by \cs{@@_parse_round_loop:N}, whose number of digits we
-% discard by multiplying it by~$0$. The exponent which follows the
-% number is also fetched by \cs{@@_parse_round_after:wN}.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_small_round:NN #1#2
- {
- \if_int_compare:w 9 < 1 \token_to_str:N #2 \exp_stop_f:
- +
- \exp_after:wN \@@_round_s:NNNw
- \exp_after:wN 0
- \exp_after:wN #1
- \exp_after:wN #2
- \int_value:w \@@_int_eval:w
- \exp_after:wN \@@_parse_round_after:wN
- \int_value:w \@@_int_eval:w 0 * \@@_int_eval:w 0
- \exp_after:wN \@@_parse_round_loop:N
- \exp:w
- \else:
- \@@_parse_exponent:Nw #2
- \fi:
- \@@_parse_expand:w
- }
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}[rEXP]
-% {
-% \@@_parse_large_round:NN,
-% \@@_parse_large_round_test:NN,
-% \@@_parse_large_round_aux:wNN,
-% }
-% Large numbers are harder to round, as there may be a period in the
-% way. Again, |#1|~is the digit that we are currently rounding (we
-% only care whether it is even or odd). If there are no more digits
-% (|#2|~is not a digit), then we must test for a period: if there is
-% one, then switch to the rounding function for small significands,
-% otherwise fetch an exponent. If there are more digits (|#2|~is a
-% digit), then round, checking with \cs{@@_parse_round_loop:N} if all
-% further digits vanish, or some are non-zero. This loop is not
-% enough, as it is stopped by a period. After the loop, the
-% \texttt{aux} function tests for a period: if it is present, then we
-% must continue looking for digits, this time discarding the number of
-% digits we find.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_large_round:NN #1#2
- {
- \if_int_compare:w 9 < 1 \token_to_str:N #2 \exp_stop_f:
- +
- \exp_after:wN \@@_round_s:NNNw
- \exp_after:wN 0
- \exp_after:wN #1
- \exp_after:wN #2
- \int_value:w \@@_int_eval:w
- \exp_after:wN \@@_parse_large_round_aux:wNN
- \int_value:w \@@_int_eval:w 1
- \exp_after:wN \@@_parse_round_loop:N
- \else: %^^A could be dot, or e, or other
- \exp_after:wN \@@_parse_large_round_test:NN
- \exp_after:wN #1
- \exp_after:wN #2
- \fi:
- }
-\cs_new:Npn \@@_parse_large_round_test:NN #1#2
- {
- \if:w . \exp_not:N #2
- \exp_after:wN \@@_parse_small_round:NN
- \exp_after:wN #1
- \exp:w
- \else:
- \@@_parse_exponent:Nw #2
- \fi:
- \@@_parse_expand:w
- }
-\cs_new:Npn \@@_parse_large_round_aux:wNN #1 ; #2 #3
- {
- + #2
- \exp_after:wN \@@_parse_round_after:wN
- \int_value:w \@@_int_eval:w #1
- \if:w . \exp_not:N #3
- + 0 * \@@_int_eval:w 0
- \exp_after:wN \@@_parse_round_loop:N
- \exp:w \exp_after:wN \@@_parse_expand:w
- \else:
- \exp_after:wN ;
- \exp_after:wN 0
- \exp_after:wN #3
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Number: finding the exponent}
-%
-% Expansion is a little bit tricky here, in part because we accept input
-% where multiplication is implicit.
-% \begin{syntax}
-% \cs{@@_parse:n} |{ 3.2 erf(0.1) }|
-% \cs{@@_parse:n} |{ 3.2 e\l_my_int }|
-% \cs{@@_parse:n} |{ 3.2 \c_pi_fp }|
-% \end{syntax}
-% The first case indicates that just looking one character ahead for an
-% \enquote{\texttt{e}} is not enough, since we would mistake the
-% function \texttt{erf} for an exponent of \enquote{\texttt{rf}}. An
-% alternative would be to look two tokens ahead and check if what
-% follows is a sign or a digit, considering in that case that we must be
-% finding an exponent. But taking care of the second case requires that
-% we unpack registers after \texttt{e}. However, blindly expanding the
-% two tokens ahead completely would break the third example (unpacking
-% is even worse). Indeed, in the course of reading $3.2$, \cs{c_pi_fp}
-% is expanded to \cs{s_@@} \cs{@@_chk:w} |1| |0| |{-1}| |{3141}|
-% $\cdots$ |;| and \cs{s_@@} stops the expansion. Expanding two tokens
-% ahead would then force the expansion of \cs{@@_chk:w} (despite it
-% being protected), and that function tries to produce an error.
-%
-% What can we do? Really, the reason why this last case breaks is that
-% just as \TeX{} does, we should read ahead as little as possible.
-% Here, the only case where there may be an exponent is if the first
-% token ahead is |e|. Then we expand (and possibly unpack) the second
-% token.
-%
-% \begin{macro}[rEXP]{\@@_parse_exponent:Nw}
-% This auxiliary is convenient to smuggle some material through
-% \cs{fi:} ending conditional processing. We place those \cs{fi:}
-% (argument~|#2|) at a very odd place because this allows us to insert
-% \cs{@@_int_eval:w} \ldots{} there if needed.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_exponent:Nw #1 #2 \@@_parse_expand:w
- {
- \exp_after:wN ;
- \int_value:w #2 \@@_parse_exponent:N #1
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]
-% {\@@_parse_exponent:N, \@@_parse_exponent_aux:NN}
-% This function should be called within an \cs{int_value:w}
-% expansion (or within an integer expression). It leaves digits of the
-% exponent behind it in the input stream, and terminates the expansion
-% with a semicolon. If there is no~|e| (or~|E|), leave an exponent of~$0$. If
-% there is an~|e| or~|E|, expand the next token to run some tests on it. The
-% first rough test is that if the character code of~|#1| is greater
-% than that of~|9| (largest code valid for an exponent, less than any
-% code valid for an identifier), there was in fact no exponent;
-% otherwise, we search for the sign of the exponent.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_exponent:N #1
- {
- \if:w e \if:w E \exp_not:N #1 e \else: \exp_not:N #1 \fi:
- \exp_after:wN \@@_parse_exponent_aux:NN
- \exp_after:wN #1
- \exp:w
- \else:
- 0 \@@_parse_return_semicolon:w #1
- \fi:
- \@@_parse_expand:w
- }
-\cs_new:Npn \@@_parse_exponent_aux:NN #1#2
- {
- \if_int_compare:w \if_catcode:w \scan_stop: \exp_not:N #2
- 0 \else: `#2 \fi: > `9 \exp_stop_f:
- 0 \exp_after:wN ; \exp_after:wN #1
- \else:
- \exp_after:wN \@@_parse_exponent_sign:N
- \fi:
- #2
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_parse_exponent_sign:N}
-% Read signs one by one (if there is any).
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_exponent_sign:N #1
- {
- \if:w + \if:w - \exp_not:N #1 + \fi: \token_to_str:N #1
- \exp_after:wN \@@_parse_exponent_sign:N
- \exp:w \exp_after:wN \@@_parse_expand:w
- \else:
- \exp_after:wN \@@_parse_exponent_body:N
- \exp_after:wN #1
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_parse_exponent_body:N}
-% An exponent can be an explicit integer (most common case), or
-% various other things (most of which are invalid).
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_exponent_body:N #1
- {
- \if_int_compare:w 9 < 1 \token_to_str:N #1 \exp_stop_f:
- \token_to_str:N #1
- \exp_after:wN \@@_parse_exponent_digits:N
- \exp:w
- \else:
- \@@_parse_exponent_keep:NTF #1
- { \@@_parse_return_semicolon:w #1 }
- {
- \exp_after:wN ;
- \exp:w
- }
- \fi:
- \@@_parse_expand:w
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_parse_exponent_digits:N}
-% Read digits one by one, and leave them behind in the input stream.
-% When finding a non-digit, stop, and insert a semicolon. Note that
-% we do not check for overflow of the exponent, hence there can be a
-% \TeX{} error. It is mostly harmless, except when parsing
-% |0e9876543210|, which should be a valid representation of $0$, but
-% is not.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_exponent_digits:N #1
- {
- \if_int_compare:w 9 < 1 \token_to_str:N #1 \exp_stop_f:
- \token_to_str:N #1
- \exp_after:wN \@@_parse_exponent_digits:N
- \exp:w
- \else:
- \@@_parse_return_semicolon:w #1
- \fi:
- \@@_parse_expand:w
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_parse_exponent_keep:NTF}
-% This is the last building block for parsing exponents. The
-% argument~|#1| is already fully expanded, and neither |+| nor~|-| nor
-% a digit. It can be:
-% \begin{itemize}
-% \item \cs{s_@@}, marking the start of an internal floating point,
-% invalid here;
-% \item another control sequence equal to \tn{relax}, probably a bad
-% variable;
-% \item a register: in this case we make sure that it is an integer
-% register, not a dimension;
-% \item a character other than |+|, |-| or digits, again, an error.
-% \end{itemize}
-% \begin{macrocode}
-\prg_new_conditional:Npnn \@@_parse_exponent_keep:N #1 { TF }
- {
- \if_catcode:w \scan_stop: \exp_not:N #1
- \if_meaning:w \scan_stop: #1
- \if:w 0 \@@_str_if_eq:nn { \s_@@ } { \exp_not:N #1 }
- 0
- \msg_expandable_error:nnn
- { fp } { after-e } { floating~point~ }
- \prg_return_true:
- \else:
- 0
- \msg_expandable_error:nnn
- { kernel } { bad-variable } {#1}
- \prg_return_false:
- \fi:
- \else:
- \if:w 0 \@@_str_if_eq:nn { \int_value:w #1 } { \tex_the:D #1 }
- \int_value:w #1
- \else:
- 0
- \msg_expandable_error:nnn
- { fp } { after-e } { dimension~#1 }
- \fi:
- \prg_return_false:
- \fi:
- \else:
- 0
- \msg_expandable_error:nnn
- { fp } { missing } { exponent }
- \prg_return_true:
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Constants, functions and prefix operators}
-%
-% \subsubsection{Prefix operators}
-%
-% \begin{macro}[EXP]{\@@_parse_prefix_+:Nw}
-% A unary~|+| does nothing: we should continue looking for a number.
-% \begin{macrocode}
-\cs_new_eq:cN { @@_parse_prefix_+:Nw } \@@_parse_one:Nw
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_parse_apply_function:NNNwN}
-% Here, |#1| is a precedence, |#2| is some extra data used by some
-% functions, |#3| is \emph{e.g.}, \cs{@@_sin_o:w}, and expands once
-% after the calculation, |#4| is the operand, and |#5| is a
-% \cs[no-index]{@@_parse_infix_\ldots{}:N} function. We feed the data~|#2|, and the
-% argument~|#4|, to the function~|#3|, which expands
-% \cs{exp:w} thus the \texttt{infix} function~|#5|.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_apply_function:NNNwN #1#2#3#4@#5
- {
- #3 #2 #4 @
- \exp:w \exp_end_continue_f:w #5 #1
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_parse_apply_unary:NNNwN}
-% \begin{macro}[EXP]{\@@_parse_apply_unary_chk:NwNw, \@@_parse_apply_unary_chk:nNNNw}
-% \begin{macro}[EXP]{\@@_parse_apply_unary_type:NNN, \@@_parse_apply_unary_error:NNw}
-% In contrast to \cs{@@_parse_apply_function:NNNwN}, this checks that
-% the operand |#4| is a single argument (namely there is a single
-% |;|). We use the fact that any floating point starts with a
-% \enquote{safe} token like \cs{s_@@}. If there is no argument
-% produce the |fp-no-arg| error; if there are at least two produce
-% |fp-multi-arg|. For the error message extract the mathematical
-% function name (such as |sin|) from the \pkg{expl3} function that
-% computes it, such as \cs{@@_sin_o:w}.
-%
-% In addition, since there is a single argument we can dispatch on
-% type and check that the resulting function exists. This catches
-% things like |sin((1,2))| where it does not make sense to take the
-% sine of a tuple.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_apply_unary:NNNwN #1#2#3#4@#5
- {
- \@@_parse_apply_unary_chk:NwNw #4 @ ; . \s_@@_stop
- \@@_parse_apply_unary_type:NNN
- #3 #2 #4 @
- \exp:w \exp_end_continue_f:w #5 #1
- }
-\cs_new:Npn \@@_parse_apply_unary_chk:NwNw #1#2 ; #3#4 \s_@@_stop
- {
- \if_meaning:w @ #3 \else:
- \token_if_eq_meaning:NNTF . #3
- { \@@_parse_apply_unary_chk:nNNNNw { no } }
- { \@@_parse_apply_unary_chk:nNNNNw { multi } }
- \fi:
- }
-\cs_new:Npn \@@_parse_apply_unary_chk:nNNNNw #1#2#3#4#5#6 @
- {
- #2
- \@@_error:nffn { #1-arg } { \@@_func_to_name:N #4 } { } { }
- \exp_after:wN #4 \exp_after:wN #5 \c_nan_fp @
- }
-\cs_new:Npn \@@_parse_apply_unary_type:NNN #1#2#3
- {
- \@@_change_func_type:NNN #3 #1 \@@_parse_apply_unary_error:NNw
- #2 #3
- }
-\cs_new:Npn \@@_parse_apply_unary_error:NNw #1#2#3 @
- { \@@_invalid_operation_o:fw { \@@_func_to_name:N #1 } #3 }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_parse_prefix_-:Nw, \@@_parse_prefix_!:Nw}
-% The unary~|-| and boolean not are harder: we parse the operand using
-% a precedence equal to the maximum of the previous precedence~|##1|
-% and the precedence \cs{c_@@_prec_not_int} of the unary operator, then call
-% the appropriate |\__fp_|\meta{operation}|_o:w| function,
-% where the \meta{operation} is |set_sign| or |not|.
-% \begin{macrocode}
-\cs_set_protected:Npn \@@_tmp:w #1#2#3#4
- {
- \cs_new:cpn { @@_parse_prefix_ #1 :Nw } ##1
- {
- \exp_after:wN \@@_parse_apply_unary:NNNwN
- \exp_after:wN ##1
- \exp_after:wN #4
- \exp_after:wN #3
- \exp:w
- \if_int_compare:w #2 < ##1
- \@@_parse_operand:Nw ##1
- \else:
- \@@_parse_operand:Nw #2
- \fi:
- \@@_parse_expand:w
- }
- }
-\@@_tmp:w - \c_@@_prec_not_int \@@_set_sign_o:w 2
-\@@_tmp:w ! \c_@@_prec_not_int \@@_not_o:w ?
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_parse_prefix_.:Nw}
-% Numbers which start with a decimal separator (a~period) end up here.
-% Of course, we do not look for an operand, but for the rest of the
-% number. This function is very similar to \cs{@@_parse_one_digit:NN}
-% but calls \cs{@@_parse_strim_zeros:N} to trim zeros after the
-% decimal point, rather than the \texttt{trim_zeros} function for
-% zeros before the decimal point.
-% \begin{macrocode}
-\cs_new:cpn { @@_parse_prefix_.:Nw } #1
- {
- \exp_after:wN \@@_parse_infix_after_operand:NwN
- \exp_after:wN #1
- \exp:w \exp_end_continue_f:w
- \exp_after:wN \@@_sanitize:wN
- \int_value:w \@@_int_eval:w 0 \@@_parse_strim_zeros:N
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {\@@_parse_prefix_(:Nw, \@@_parse_lparen_after:NwN}
-% The left parenthesis is treated as a unary prefix operator because
-% it appears in exactly the same settings. If the previous precedence
-% is \cs{c_@@_prec_func_int} we are parsing arguments of a function
-% and commas should not build tuples; otherwise commas should build
-% tuples. We distinguish these cases by precedence:
-% \cs{c_@@_prec_comma_int} for the case of arguments,
-% \cs{c_@@_prec_tuple_int} for the case of tuples.
-% Once the operand is found, the \texttt{lparen_after} auxiliary makes
-% sure that there was a closing parenthesis (otherwise it complains),
-% and leaves in the input stream an operand,
-% fetching the following infix operator.
-% \begin{macrocode}
-\cs_new:cpn { @@_parse_prefix_(:Nw } #1
- {
- \exp_after:wN \@@_parse_lparen_after:NwN
- \exp_after:wN #1
- \exp:w
- \if_int_compare:w #1 = \c_@@_prec_func_int
- \@@_parse_operand:Nw \c_@@_prec_comma_int
- \else:
- \@@_parse_operand:Nw \c_@@_prec_tuple_int
- \fi:
- \@@_parse_expand:w
- }
-\cs_new:Npe \@@_parse_lparen_after:NwN #1#2 @ #3
- {
- \exp_not:N \token_if_eq_meaning:NNTF #3
- \exp_not:c { @@_parse_infix_):N }
- {
- \exp_not:N \@@_exp_after_array_f:w #2 \s_@@_expr_stop
- \exp_not:N \exp_after:wN
- \exp_not:N \@@_parse_infix_after_paren:NN
- \exp_not:N \exp_after:wN #1
- \exp_not:N \exp:w
- \exp_not:N \@@_parse_expand:w
- }
- {
- \exp_not:N \msg_expandable_error:nnn
- { fp } { missing } { ) }
- \exp_not:N \tl_if_empty:nT {#2} \exp_not:N \c_@@_empty_tuple_fp
- #2 @
- \exp_not:N \use_none:n #3
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_parse_prefix_):Nw}
-% The right parenthesis can appear as a prefix in two similar cases:
-% in an empty tuple or tuple ending with a comma, or in an empty
-% argument list or argument list ending with a comma, such as in
-% |max(1,2,)| or in |rand()|.
-% \begin{macrocode}
-\cs_new:cpn { @@_parse_prefix_):Nw } #1
- {
- \if_int_compare:w #1 = \c_@@_prec_comma_int
- \else:
- \if_int_compare:w #1 = \c_@@_prec_tuple_int
- \exp_after:wN \c_@@_empty_tuple_fp \exp:w
- \else:
- \msg_expandable_error:nnn
- { fp } { missing-number } { ) }
- \exp_after:wN \c_nan_fp \exp:w
- \fi:
- \exp_end_continue_f:w
- \fi:
- \@@_parse_infix_after_paren:NN #1 )
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Constants}
-%
-% \begin{macro}[EXP]
-% {
-% \@@_parse_word_inf:N , \@@_parse_word_nan:N ,
-% \@@_parse_word_pi:N , \@@_parse_word_deg:N ,
-% \@@_parse_word_true:N , \@@_parse_word_false:N ,
-% }
-% Some words correspond to constant floating points. The floating
-% point constant is left as a result of \cs{@@_parse_one:Nw} after
-% expanding \cs{@@_parse_infix:NN}.
-% \begin{macrocode}
-\cs_set_protected:Npn \@@_tmp:w #1 #2
- {
- \cs_new:cpn { @@_parse_word_#1:N }
- { \exp_after:wN #2 \exp:w \exp_end_continue_f:w \@@_parse_infix:NN }
- }
-\@@_tmp:w { inf } \c_inf_fp
-\@@_tmp:w { nan } \c_nan_fp
-\@@_tmp:w { pi } \c_pi_fp
-\@@_tmp:w { deg } \c_one_degree_fp
-\@@_tmp:w { true } \c_one_fp
-\@@_tmp:w { false } \c_zero_fp
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {
-% \@@_parse_caseless_inf:N,
-% \@@_parse_caseless_infinity:N,
-% \@@_parse_caseless_nan:N
-% }
-% Copies of \cs[no-index]{@@_parse_word_\ldots{}:N} commands, to allow
-% arbitrary case as mandated by the standard.
-% \begin{macrocode}
-\cs_new_eq:NN \@@_parse_caseless_inf:N \@@_parse_word_inf:N
-\cs_new_eq:NN \@@_parse_caseless_infinity:N \@@_parse_word_inf:N
-\cs_new_eq:NN \@@_parse_caseless_nan:N \@@_parse_word_nan:N
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {
-% \@@_parse_word_pt:N , \@@_parse_word_in:N ,
-% \@@_parse_word_pc:N , \@@_parse_word_cm:N , \@@_parse_word_mm:N ,
-% \@@_parse_word_dd:N , \@@_parse_word_cc:N , \@@_parse_word_nd:N ,
-% \@@_parse_word_nc:N , \@@_parse_word_bp:N , \@@_parse_word_sp:N ,
-% }
-% Dimension units are also floating point constants but their value is
-% not stored as a floating point constant. We give the values
-% explicitly here.
-% \begin{macrocode}
-\cs_set_protected:Npn \@@_tmp:w #1 #2
- {
- \cs_new:cpn { @@_parse_word_#1:N }
- {
- \@@_exp_after_f:nw { \@@_parse_infix:NN }
- \s_@@ \@@_chk:w 10 #2 ;
- }
- }
-\@@_tmp:w {pt} { {1} {1000} {0000} {0000} {0000} }
-\@@_tmp:w {in} { {2} {7227} {0000} {0000} {0000} }
-\@@_tmp:w {pc} { {2} {1200} {0000} {0000} {0000} }
-\@@_tmp:w {cm} { {2} {2845} {2755} {9055} {1181} }
-\@@_tmp:w {mm} { {1} {2845} {2755} {9055} {1181} }
-\@@_tmp:w {dd} { {1} {1070} {0085} {6496} {0630} }
-\@@_tmp:w {cc} { {2} {1284} {0102} {7795} {2756} }
-\@@_tmp:w {nd} { {1} {1066} {9783} {4645} {6693} }
-\@@_tmp:w {nc} { {2} {1280} {3740} {1574} {8031} }
-\@@_tmp:w {bp} { {1} {1003} {7500} {0000} {0000} }
-\@@_tmp:w {sp} { {-4} {1525} {8789} {0625} {0000} }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_parse_word_em:N, \@@_parse_word_ex:N}
-% The font-dependent units |em| and |ex| must be evaluated on the fly.
-% We reuse an auxiliary of \cs{dim_to_fp:n}.
-% \begin{macrocode}
-\tl_map_inline:nn { {em} {ex} }
- {
- \cs_new:cpn { @@_parse_word_#1:N }
- {
- \exp_after:wN \@@_from_dim_test:ww
- \exp_after:wN 0 \exp_after:wN ,
- \int_value:w \dim_to_decimal_in_sp:n { 1 #1 } \exp_after:wN ;
- \exp:w \exp_end_continue_f:w \@@_parse_infix:NN
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Functions}
-%
-% ^^A begin[todo]
-%
-% \begin{macro}[EXP]
-% {\@@_parse_unary_function:NNN, \@@_parse_function:NNN}
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_unary_function:NNN #1#2#3
- {
- \exp_after:wN \@@_parse_apply_unary:NNNwN
- \exp_after:wN #3
- \exp_after:wN #2
- \exp_after:wN #1
- \exp:w
- \@@_parse_operand:Nw \c_@@_prec_func_int \@@_parse_expand:w
- }
-\cs_new:Npn \@@_parse_function:NNN #1#2#3
- {
- \exp_after:wN \@@_parse_apply_function:NNNwN
- \exp_after:wN #3
- \exp_after:wN #2
- \exp_after:wN #1
- \exp:w
- \@@_parse_operand:Nw \c_@@_prec_func_int \@@_parse_expand:w
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Main functions}
-%
-% \begin{macro}[EXP]{\@@_parse:n, \@@_parse_o:n}
-% \begin{macro}[EXP]{\@@_parse_after:ww}
-% Start an \cs{exp:w} expansion so that \cs{@@_parse:n} expands
-% in two steps. The \cs{@@_parse_operand:Nw} function performs
-% computations until reaching an operation with precedence
-% \cs{c_@@_prec_end_int} or less, namely, the end of the expression. The
-% marker \cs{s_@@_expr_mark} indicates that the next token is an already
-% parsed version of an infix operator, and \cs{@@_parse_infix_end:N}
-% has infinitely negative precedence. Finally, clean up a
-% (well-defined) set of extra tokens and stop the initial expansion
-% with \cs{exp_end:}.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse:n #1
- {
- \exp:w
- \exp_after:wN \@@_parse_after:ww
- \exp:w
- \@@_parse_operand:Nw \c_@@_prec_end_int
- \@@_parse_expand:w #1
- \s_@@_expr_mark \@@_parse_infix_end:N
- \s_@@_expr_stop
- \exp_end:
- }
-\cs_new:Npn \@@_parse_after:ww
- #1@ \@@_parse_infix_end:N \s_@@_expr_stop #2 { #2 #1 }
-\cs_new:Npn \@@_parse_o:n #1
- {
- \exp:w
- \exp_after:wN \@@_parse_after:ww
- \exp:w
- \@@_parse_operand:Nw \c_@@_prec_end_int
- \@@_parse_expand:w #1
- \s_@@_expr_mark \@@_parse_infix_end:N
- \s_@@_expr_stop
- {
- \exp_end_continue_f:w
- \@@_exp_after_any_f:nw { \exp_after:wN \exp_stop_f: }
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_parse_operand:Nw}
-% \begin{macro}[EXP]{\@@_parse_continue:NwN}
-% This is just a shorthand which sets up both \cs{@@_parse_continue:NwN}
-% and \cs{@@_parse_one:Nw} with the same precedence. Note the
-% trailing \cs{exp:w}.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_operand:Nw #1
- {
- \exp_end_continue_f:w
- \exp_after:wN \@@_parse_continue:NwN
- \exp_after:wN #1
- \exp:w \exp_end_continue_f:w
- \exp_after:wN \@@_parse_one:Nw
- \exp_after:wN #1
- \exp:w
- }
-\cs_new:Npn \@@_parse_continue:NwN #1 #2 @ #3 { #3 #1 #2 @ }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_parse_apply_binary:NwNwN}
-% \begin{macro}[EXP]
-% {\@@_parse_apply_binary_chk:NN, \@@_parse_apply_binary_error:NNN}
-% Receives \meta{precedence} \meta{operand_1} |@| \meta{operation}
-% \meta{operand_2} |@| \meta{infix command}. Builds the appropriate
-% call to the \meta{operation}~|#3|, dispatching on both types.
-% If the resulting control sequence does not exist, the operation is
-% not allowed.
-%
-% This is redefined in \pkg{l3fp-extras}.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_apply_binary:NwNwN #1 #2#3@ #4 #5#6@ #7
- {
- \exp_after:wN \@@_parse_continue:NwN
- \exp_after:wN #1
- \exp:w \exp_end_continue_f:w
- \exp_after:wN \@@_parse_apply_binary_chk:NN
- \cs:w
- @@
- \@@_type_from_scan:N #2
- _#4
- \@@_type_from_scan:N #5
- _o:ww
- \cs_end:
- #4
- #2#3 #5#6
- \exp:w \exp_end_continue_f:w #7 #1
- }
-\cs_new:Npn \@@_parse_apply_binary_chk:NN #1#2
- {
- \if_meaning:w \scan_stop: #1
- \@@_parse_apply_binary_error:NNN #2
- \fi:
- #1
- }
-\cs_new:Npn \@@_parse_apply_binary_error:NNN #1#2#3
- {
- #2
- \@@_invalid_operation_o:Nww #1
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_binary_type_o:Nww, \@@_binary_rev_type_o:Nww}
-% Applies the operator |#1| to its two arguments, dispatching
-% according to their types, and expands once after the result.
-% The |rev| version swaps its arguments before doing this.
-% \begin{macrocode}
-\cs_new:Npn \@@_binary_type_o:Nww #1 #2#3 ; #4
- {
- \exp_after:wN \@@_parse_apply_binary_chk:NN
- \cs:w
- @@
- \@@_type_from_scan:N #2
- _ #1
- \@@_type_from_scan:N #4
- _o:ww
- \cs_end:
- #1
- #2 #3 ; #4
- }
-\cs_new:Npn \@@_binary_rev_type_o:Nww #1 #2#3 ; #4#5 ;
- {
- \exp_after:wN \@@_parse_apply_binary_chk:NN
- \cs:w
- @@
- \@@_type_from_scan:N #4
- _ #1
- \@@_type_from_scan:N #2
- _o:ww
- \cs_end:
- #1
- #4 #5 ; #2 #3 ;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Infix operators}
-%
-% \begin{macro}[EXP]{\@@_parse_infix_after_operand:NwN}
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_infix_after_operand:NwN #1 #2;
- {
- \@@_exp_after_f:nw { \@@_parse_infix:NN #1 }
- #2;
- }
-\cs_new:Npn \@@_parse_infix:NN #1 #2
- {
- \if_catcode:w \scan_stop: \exp_not:N #2
- \if:w 0 \@@_str_if_eq:nn { \s_@@_expr_mark } { \exp_not:N #2 }
- \exp_after:wN \exp_after:wN
- \exp_after:wN \@@_parse_infix_mark:NNN
- \else:
- \exp_after:wN \exp_after:wN
- \exp_after:wN \@@_parse_infix_juxt:N
- \fi:
- \else:
- \if_int_compare:w
- \@@_int_eval:w
- ( `#2 \if_int_compare:w `#2 > `Z - 32 \fi: ) / 26
- = 3 \exp_stop_f:
- \exp_after:wN \exp_after:wN
- \exp_after:wN \@@_parse_infix_juxt:N
- \else:
- \exp_after:wN \@@_parse_infix_check:NNN
- \cs:w
- @@_parse_infix_ \token_to_str:N #2 :N
- \exp_after:wN \exp_after:wN \exp_after:wN
- \cs_end:
- \fi:
- \fi:
- #1
- #2
- }
-\cs_new:Npn \@@_parse_infix_check:NNN #1#2#3
- {
- \if_meaning:w \scan_stop: #1
- \msg_expandable_error:nnn
- { fp } { missing } { * }
- \exp_after:wN \@@_parse_infix_mul:N
- \exp_after:wN #2
- \exp_after:wN #3
- \else:
- \exp_after:wN #1
- \exp_after:wN #2
- \exp:w \exp_after:wN \@@_parse_expand:w
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_parse_infix_after_paren:NN}
-% Variant of \cs{@@_parse_infix:NN} for use after a closing
-% parenthesis. The only difference is that \cs{@@_parse_infix_juxt:N}
-% is replaced by \cs{@@_parse_infix_mul:N}.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_infix_after_paren:NN #1 #2
- {
- \if_catcode:w \scan_stop: \exp_not:N #2
- \if:w 0 \@@_str_if_eq:nn { \s_@@_expr_mark } { \exp_not:N #2 }
- \exp_after:wN \exp_after:wN
- \exp_after:wN \@@_parse_infix_mark:NNN
- \else:
- \exp_after:wN \exp_after:wN
- \exp_after:wN \@@_parse_infix_mul:N
- \fi:
- \else:
- \if_int_compare:w
- \@@_int_eval:w
- ( `#2 \if_int_compare:w `#2 > `Z - 32 \fi: ) / 26
- = 3 \exp_stop_f:
- \exp_after:wN \exp_after:wN
- \exp_after:wN \@@_parse_infix_mul:N
- \else:
- \exp_after:wN \@@_parse_infix_check:NNN
- \cs:w
- @@_parse_infix_ \token_to_str:N #2 :N
- \exp_after:wN \exp_after:wN \exp_after:wN
- \cs_end:
- \fi:
- \fi:
- #1
- #2
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Closing parentheses and commas}
-%
-% \begin{macro}[EXP]{\@@_parse_infix_mark:NNN}
-% As an infix operator, \cs{s_@@_expr_mark} means that the next
-% token~(|#3|) has already gone through \cs{@@_parse_infix:NN} and
-% should be provided the precedence~|#1|. The scan mark~|#2| is
-% discarded.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_infix_mark:NNN #1#2#3 { #3 #1 }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_parse_infix_end:N}
-% This one is a little bit odd: force every previous operator to end,
-% regardless of the precedence.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_infix_end:N #1
- { @ \use_none:n \@@_parse_infix_end:N }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]+\@@_parse_infix_):N+
-% This is very similar to \cs{@@_parse_infix_end:N}, complaining about
-% an extra closing parenthesis if the previous operator was the
-% beginning of the expression, with precedence \cs{c_@@_prec_end_int}.
-% \begin{macrocode}
-\cs_set_protected:Npn \@@_tmp:w #1
- {
- \cs_new:Npn #1 ##1
- {
- \if_int_compare:w ##1 > \c_@@_prec_end_int
- \exp_after:wN @
- \exp_after:wN \use_none:n
- \exp_after:wN #1
- \else:
- \msg_expandable_error:nnn { fp } { extra } { ) }
- \exp_after:wN \@@_parse_infix:NN
- \exp_after:wN ##1
- \exp:w \exp_after:wN \@@_parse_expand:w
- \fi:
- }
- }
-\exp_args:Nc \@@_tmp:w { @@_parse_infix_):N }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[verb, EXP]{\__fp_parse_infix_,:N}
-% \begin{macro}[EXP]{\@@_parse_infix_comma:w, \@@_parse_apply_comma:NwNwN}
-% As for other infix operations, if the previous operations has higher
-% precedence the comma waits. Otherwise we call
-% \cs{@@_parse_operand:Nw} to read more comma-delimited arguments that
-% \cs{@@_parse_infix_comma:w} simply concatenates into a |@|-delimited
-% array. The first comma in a tuple that is not a function argument
-% is distinguished: in that case call \cs{@@_parse_apply_comma:NwNwN}
-% whose job is to convert the first item of the tuple and an array of
-% the remaining items into a tuple. In contrast to
-% \cs{@@_parse_apply_binary:NwNwN} this function's operands are not
-% single-object arrays.
-% \begin{macrocode}
-\cs_set_protected:Npn \@@_tmp:w #1
- {
- \cs_new:Npn #1 ##1
- {
- \if_int_compare:w ##1 > \c_@@_prec_comma_int
- \exp_after:wN @
- \exp_after:wN \use_none:n
- \exp_after:wN #1
- \else:
- \if_int_compare:w ##1 < \c_@@_prec_comma_int
- \exp_after:wN @
- \exp_after:wN \@@_parse_apply_comma:NwNwN
- \exp_after:wN ,
- \exp:w
- \else:
- \exp_after:wN \@@_parse_infix_comma:w
- \exp:w
- \fi:
- \@@_parse_operand:Nw \c_@@_prec_comma_int
- \exp_after:wN \@@_parse_expand:w
- \fi:
- }
- }
-\exp_args:Nc \@@_tmp:w { @@_parse_infix_,:N }
-\cs_new:Npn \@@_parse_infix_comma:w #1 @
- { #1 @ \use_none:n }
-\cs_new:Npn \@@_parse_apply_comma:NwNwN #1 #2@ #3 #4@ #5
- {
- \exp_after:wN \@@_parse_continue:NwN
- \exp_after:wN #1
- \exp:w \exp_end_continue_f:w
- \@@_exp_after_tuple_f:nw { }
- \s_@@_tuple \@@_tuple_chk:w { #2 #4 } ;
- #5 #1
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsubsection{Usual infix operators}
-%
-% \begin{macro}[EXP]
-% {
-% \@@_parse_infix_+:N, \@@_parse_infix_-:N,
-% \@@_parse_infix_juxt:N,
-% \@@_parse_infix_/:N, \@@_parse_infix_mul:N,
-% \@@_parse_infix_and:N, \@@_parse_infix_or:N,
-% }
-% \begin{macro}[EXP]+\@@_parse_infix_^:N+
-% As described in the \enquote{work plan}, each infix operator has an
-% associated |\..._infix_...| function, a computing function, and
-% precedence, given as arguments to \cs{@@_tmp:w}. Using the general
-% mechanism for arithmetic operations. The power operation must be
-% associative in the opposite order from all others. For this, we use
-% two distinct precedences.
-% \begin{macrocode}
-\cs_set_protected:Npn \@@_tmp:w #1#2#3#4
- {
- \cs_new:Npn #1 ##1
- {
- \if_int_compare:w ##1 < #3
- \exp_after:wN @
- \exp_after:wN \@@_parse_apply_binary:NwNwN
- \exp_after:wN #2
- \exp:w
- \@@_parse_operand:Nw #4
- \exp_after:wN \@@_parse_expand:w
- \else:
- \exp_after:wN @
- \exp_after:wN \use_none:n
- \exp_after:wN #1
- \fi:
- }
- }
-\exp_args:Nc \@@_tmp:w { @@_parse_infix_^:N } ^
- \c_@@_prec_hatii_int \c_@@_prec_hat_int
-\exp_args:Nc \@@_tmp:w { @@_parse_infix_juxt:N } *
- \c_@@_prec_juxt_int \c_@@_prec_juxt_int
-\exp_args:Nc \@@_tmp:w { @@_parse_infix_/:N } /
- \c_@@_prec_times_int \c_@@_prec_times_int
-\exp_args:Nc \@@_tmp:w { @@_parse_infix_mul:N } *
- \c_@@_prec_times_int \c_@@_prec_times_int
-\exp_args:Nc \@@_tmp:w { @@_parse_infix_-:N } -
- \c_@@_prec_plus_int \c_@@_prec_plus_int
-\exp_args:Nc \@@_tmp:w { @@_parse_infix_+:N } +
- \c_@@_prec_plus_int \c_@@_prec_plus_int
-\exp_args:Nc \@@_tmp:w { @@_parse_infix_and:N } &
- \c_@@_prec_and_int \c_@@_prec_and_int
-\exp_args:Nc \@@_tmp:w { @@_parse_infix_or:N } |
- \c_@@_prec_or_int \c_@@_prec_or_int
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsubsection{Juxtaposition}
-%
-% \begin{macro}[EXP]+\@@_parse_infix_(:N+
-% When an opening parenthesis appears where we expect an infix
-% operator, we compute the product of the previous operand and the
-% contents of the parentheses using \cs{@@_parse_infix_mul:N}.
-% \begin{macrocode}
-\cs_new:cpn { @@_parse_infix_(:N } #1
- { \@@_parse_infix_mul:N #1 ( }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Multi-character cases}
-%
-% \begin{macro}[EXP]{\@@_parse_infix_*:N}
-% \begin{macrocode}
-\cs_set_protected:Npn \@@_tmp:w #1
- {
- \cs_new:cpn { @@_parse_infix_*:N } ##1##2
- {
- \if:w * \exp_not:N ##2
- \exp_after:wN #1
- \exp_after:wN ##1
- \else:
- \exp_after:wN \@@_parse_infix_mul:N
- \exp_after:wN ##1
- \exp_after:wN ##2
- \fi:
- }
- }
-\exp_args:Nc \@@_tmp:w { @@_parse_infix_^:N }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]+\@@_parse_infix_|:Nw+
-% \begin{macro}[EXP]+\@@_parse_infix_&:Nw+
-% \begin{macrocode}
-\cs_set_protected:Npn \@@_tmp:w #1#2#3
- {
- \cs_new:Npn #1 ##1##2
- {
- \if:w #2 \exp_not:N ##2
- \exp_after:wN #1
- \exp_after:wN ##1
- \exp:w \exp_after:wN \@@_parse_expand:w
- \else:
- \exp_after:wN #3
- \exp_after:wN ##1
- \exp_after:wN ##2
- \fi:
- }
- }
-\exp_args:Nc \@@_tmp:w { @@_parse_infix_|:N } | \@@_parse_infix_or:N
-\exp_args:Nc \@@_tmp:w { @@_parse_infix_&:N } & \@@_parse_infix_and:N
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsubsection{Ternary operator}
-%
-% \begin{macro}[EXP]{\@@_parse_infix_?:N, \@@_parse_infix_::N}
-% \begin{macrocode}
-\cs_set_protected:Npn \@@_tmp:w #1#2#3#4
- {
- \cs_new:Npn #1 ##1
- {
- \if_int_compare:w ##1 < \c_@@_prec_quest_int
- #4
- \exp_after:wN @
- \exp_after:wN #2
- \exp:w
- \@@_parse_operand:Nw #3
- \exp_after:wN \@@_parse_expand:w
- \else:
- \exp_after:wN @
- \exp_after:wN \use_none:n
- \exp_after:wN #1
- \fi:
- }
- }
-\exp_args:Nc \@@_tmp:w { @@_parse_infix_?:N }
- \@@_ternary:NwwN \c_@@_prec_quest_int { }
-\exp_args:Nc \@@_tmp:w { @@_parse_infix_::N }
- \@@_ternary_auxii:NwwN \c_@@_prec_colon_int
- {
- \msg_expandable_error:nnnn
- { fp } { missing } { ? } { ~for~?: }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Comparisons}
-%
-% \begin{macro}[EXP]
-% {
-% \@@_parse_infix_<:N, \@@_parse_infix_=:N,
-% \@@_parse_infix_>:N, \@@_parse_infix_!:N
-% }
-% \begin{macro}[EXP]
-% {
-% \@@_parse_excl_error:,
-% \@@_parse_compare:NNNNNNN,
-% \@@_parse_compare_auxi:NNNNNNN,
-% \@@_parse_compare_auxii:NNNNN,
-% \@@_parse_compare_end:NNNNw,
-% \@@_compare:wNNNNw,
-% }
-% \begin{macrocode}
-\cs_new:cpn { @@_parse_infix_<:N } #1
- { \@@_parse_compare:NNNNNNN #1 1 0 0 0 0 < }
-\cs_new:cpn { @@_parse_infix_=:N } #1
- { \@@_parse_compare:NNNNNNN #1 1 0 0 0 0 = }
-\cs_new:cpn { @@_parse_infix_>:N } #1
- { \@@_parse_compare:NNNNNNN #1 1 0 0 0 0 > }
-\cs_new:cpn { @@_parse_infix_!:N } #1
- {
- \exp_after:wN \@@_parse_compare:NNNNNNN
- \exp_after:wN #1
- \exp_after:wN 0
- \exp_after:wN 1
- \exp_after:wN 1
- \exp_after:wN 1
- \exp_after:wN 1
- }
-\cs_new:Npn \@@_parse_excl_error:
- {
- \msg_expandable_error:nnnn
- { fp } { missing } { = } { ~after~!. }
- }
-\cs_new:Npn \@@_parse_compare:NNNNNNN #1
- {
- \if_int_compare:w #1 < \c_@@_prec_comp_int
- \exp_after:wN \@@_parse_compare_auxi:NNNNNNN
- \exp_after:wN \@@_parse_excl_error:
- \else:
- \exp_after:wN @
- \exp_after:wN \use_none:n
- \exp_after:wN \@@_parse_compare:NNNNNNN
- \fi:
- }
-\cs_new:Npn \@@_parse_compare_auxi:NNNNNNN #1#2#3#4#5#6#7
- {
- \if_case:w
- \@@_int_eval:w \exp_after:wN ` \token_to_str:N #7 - `<
- \@@_int_eval_end:
- \@@_parse_compare_auxii:NNNNN #2#2#4#5#6
- \or: \@@_parse_compare_auxii:NNNNN #2#3#2#5#6
- \or: \@@_parse_compare_auxii:NNNNN #2#3#4#2#6
- \or: \@@_parse_compare_auxii:NNNNN #2#3#4#5#2
- \else: #1 \@@_parse_compare_end:NNNNw #3#4#5#6#7
- \fi:
- }
-\cs_new:Npn \@@_parse_compare_auxii:NNNNN #1#2#3#4#5
- {
- \exp_after:wN \@@_parse_compare_auxi:NNNNNNN
- \exp_after:wN \prg_do_nothing:
- \exp_after:wN #1
- \exp_after:wN #2
- \exp_after:wN #3
- \exp_after:wN #4
- \exp_after:wN #5
- \exp:w \exp_after:wN \@@_parse_expand:w
- }
-\cs_new:Npn \@@_parse_compare_end:NNNNw #1#2#3#4#5 \fi:
- {
- \fi:
- \exp_after:wN @
- \exp_after:wN \@@_parse_apply_compare:NwNNNNNwN
- \exp_after:wN \c_one_fp
- \exp_after:wN #1
- \exp_after:wN #2
- \exp_after:wN #3
- \exp_after:wN #4
- \exp:w
- \@@_parse_operand:Nw \c_@@_prec_comp_int \@@_parse_expand:w #5
- }
-\cs_new:Npn \@@_parse_apply_compare:NwNNNNNwN
- #1 #2@ #3 #4#5#6#7 #8@ #9
- {
- \if_int_odd:w
- \if_meaning:w \c_zero_fp #3
- 0
- \else:
- \if_case:w \@@_compare_back_any:ww #8 #2 \exp_stop_f:
- #5 \or: #6 \or: #7 \else: #4
- \fi:
- \fi:
- \exp_stop_f:
- \exp_after:wN \@@_parse_apply_compare_aux:NNwN
- \exp_after:wN \c_one_fp
- \else:
- \exp_after:wN \@@_parse_apply_compare_aux:NNwN
- \exp_after:wN \c_zero_fp
- \fi:
- #1 #8 #9
- }
-\cs_new:Npn \@@_parse_apply_compare_aux:NNwN #1 #2 #3; #4
- {
- \if_meaning:w \@@_parse_compare:NNNNNNN #4
- \exp_after:wN \@@_parse_continue_compare:NNwNN
- \exp_after:wN #1
- \exp_after:wN #2
- \exp:w \exp_end_continue_f:w
- \@@_exp_after_o:w #3;
- \exp:w \exp_end_continue_f:w
- \else:
- \exp_after:wN \@@_parse_continue:NwN
- \exp_after:wN #2
- \exp:w \exp_end_continue_f:w
- \exp_after:wN #1
- \exp:w \exp_end_continue_f:w
- \fi:
- #4 #2
- }
-\cs_new:Npn \@@_parse_continue_compare:NNwNN #1#2 #3@ #4#5
- { #4 #2 #3@ #1 }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Tools for functions}
-%
-% \begin{macro}[EXP]{\@@_parse_function_all_fp_o:fnw}
-% Followed by \Arg{function name} \Arg{code} \meta{float array} |@|
-% this checks all floats are floating point numbers (no tuples).
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_function_all_fp_o:fnw #1#2#3 @
- {
- \@@_array_if_all_fp:nTF {#3}
- { #2 #3 @ }
- {
- \@@_error:nffn { bad-args }
- {#1}
- { \fp_to_tl:n { \s_@@_tuple \@@_tuple_chk:w {#3} ; } }
- { }
- \exp_after:wN \c_nan_fp
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_parse_function_one_two:nnw}
-% \begin{macro}[EXP]
-% {
-% \@@_parse_function_one_two_error_o:w,
-% \@@_parse_function_one_two_aux:nnw,
-% \@@_parse_function_one_two_auxii:nnw
-% }
-% This is followed by \Arg{function name} \Arg{code} \meta{float
-% array} |@|. It checks that the \meta{float array} consists of one
-% or two floating point numbers (not tuples), then leaves the
-% \meta{code} (if there is one float) or its tail (if there are two
-% floats) followed by the \meta{float array}. The \meta{code} should
-% start with a single token such as \cs{@@_atan_default:w} that deals
-% with the single-float case.
-%
-% The first \cs{@@_if_type_fp:NTwFw} test catches the case of no
-% argument and the case of a tuple argument. The next one
-% distinguishes the case of a single argument (no error, just add
-% \cs{c_one_fp}) from a tuple second argument. Finally check there is
-% no further argument.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_function_one_two:nnw #1#2#3
- {
- \@@_if_type_fp:NTwFw
- #3 { } \s_@@ \@@_parse_function_one_two_error_o:w \s_@@_stop
- \@@_parse_function_one_two_aux:nnw {#1} {#2} #3
- }
-\cs_new:Npn \@@_parse_function_one_two_error_o:w #1#2#3#4 @
- {
- \@@_error:nffn { bad-args }
- {#2}
- { \fp_to_tl:n { \s_@@_tuple \@@_tuple_chk:w {#4} ; } }
- { }
- \exp_after:wN \c_nan_fp
- }
-\cs_new:Npn \@@_parse_function_one_two_aux:nnw #1#2 #3; #4
- {
- \@@_if_type_fp:NTwFw
- #4 { }
- \s_@@
- {
- \if_meaning:w @ #4
- \exp_after:wN \use_iv:nnnn
- \fi:
- \@@_parse_function_one_two_error_o:w
- }
- \s_@@_stop
- \@@_parse_function_one_two_auxii:nnw {#1} {#2} #3; #4
- }
-\cs_new:Npn \@@_parse_function_one_two_auxii:nnw #1#2#3; #4; #5
- {
- \if_meaning:w @ #5 \else:
- \exp_after:wN \@@_parse_function_one_two_error_o:w
- \fi:
- \use_ii:nn {#1} { \use_none:n #2 } #3; #4; #5
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_tuple_map_o:nw, \@@_tuple_map_loop_o:nw}
-% Apply |#1| to all items in the following tuple and expand once
-% afterwards. The code |#1| should itself expand once after its
-% result.
-% \begin{macrocode}
-\cs_new:Npn \@@_tuple_map_o:nw #1 \s_@@_tuple \@@_tuple_chk:w #2 ;
- {
- \exp_after:wN \s_@@_tuple
- \exp_after:wN \@@_tuple_chk:w
- \exp_after:wN {
- \exp:w \exp_end_continue_f:w
- \@@_tuple_map_loop_o:nw {#1} #2
- { \s_@@ \prg_break: } ;
- \prg_break_point:
- \exp_after:wN } \exp_after:wN ;
- }
-\cs_new:Npn \@@_tuple_map_loop_o:nw #1#2#3 ;
- {
- \use_none:n #2
- #1 #2 #3 ;
- \exp:w \exp_end_continue_f:w
- \@@_tuple_map_loop_o:nw {#1}
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_tuple_mapthread_o:nww, \@@_tuple_mapthread_loop_o:nw}
-% Apply |#1| to pairs of items in the two following tuples and expand once
-% afterwards.
-% \begin{macrocode}
-\cs_new:Npn \@@_tuple_mapthread_o:nww #1
- \s_@@_tuple \@@_tuple_chk:w #2 ;
- \s_@@_tuple \@@_tuple_chk:w #3 ;
- {
- \exp_after:wN \s_@@_tuple
- \exp_after:wN \@@_tuple_chk:w
- \exp_after:wN {
- \exp:w \exp_end_continue_f:w
- \@@_tuple_mapthread_loop_o:nw {#1}
- #2 { \s_@@ \prg_break: } ; @
- #3 { \s_@@ \prg_break: } ;
- \prg_break_point:
- \exp_after:wN } \exp_after:wN ;
- }
-\cs_new:Npn \@@_tuple_mapthread_loop_o:nw #1#2#3 ; #4 @ #5#6 ;
- {
- \use_none:n #2
- \use_none:n #5
- #1 #2 #3 ; #5 #6 ;
- \exp:w \exp_end_continue_f:w
- \@@_tuple_mapthread_loop_o:nw {#1} #4 @
- }
-% \end{macrocode}
-% \end{macro}
-%
-% ^^A end[todo]
-%
-% \subsection{Messages}
-%
-% \begin{macrocode}
-\msg_new:nnn { fp } { deprecated }
- { '#1'~deprecated;~use~'#2' }
-\msg_new:nnn { fp } { unknown-fp-word }
- { Unknown~fp~word~#1. }
-\msg_new:nnn { fp } { missing }
- { Missing~#1~inserted #2. }
-\msg_new:nnn { fp } { extra }
- { Extra~#1~ignored. }
-\msg_new:nnn { fp } { early-end }
- { Premature~end~in~fp~expression. }
-\msg_new:nnn { fp } { after-e }
- { Cannot~use~#1 after~'e'. }
-\msg_new:nnn { fp } { missing-number }
- { Missing~number~before~'#1'. }
-\msg_new:nnn { fp } { unknown-symbol }
- { Unknown~symbol~#1~ignored. }
-\msg_new:nnn { fp } { extra-comma }
- { Unexpected~comma~turned~to~nan~result. }
-\msg_new:nnn { fp } { no-arg }
- { #1~got~no~argument;~used~nan. }
-\msg_new:nnn { fp } { multi-arg }
- { #1~got~more~than~one~argument;~used~nan. }
-\msg_new:nnn { fp } { num-args }
- { #1~expects~between~#2~and~#3~arguments. }
-\msg_new:nnn { fp } { bad-args }
- { Arguments~in~#1#2~are~invalid. }
-\msg_new:nnn { fp } { infty-pi }
- { Math~command~#1 is~not~an~fp }
-\cs_if_exist:cT { @unexpandable@protect }
- {
- \msg_new:nnn { fp } { robust-cmd }
- { Robust~command~#1 invalid~in~fp~expression! }
- }
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintChanges
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3fp-random.dtx b/macros/latex/contrib/l3kernel/l3fp-random.dtx
deleted file mode 100644
index cdbdf38ee1..0000000000
--- a/macros/latex/contrib/l3kernel/l3fp-random.dtx
+++ /dev/null
@@ -1,629 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3fp-random.dtx
-%
-% Copyright (C) 2016-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3fp-random} module\\
-% Floating point random numbers
-% }
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3fp-random} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=fp>
-% \end{macrocode}
-%
-% \begin{macro}[EXP]{\@@_parse_word_rand:N , \@@_parse_word_randint:N}
-% Those functions may receive a variable number of arguments. We
-% won't use the argument~|?|.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_word_rand:N
- { \@@_parse_function:NNN \@@_rand_o:Nw ? }
-\cs_new:Npn \@@_parse_word_randint:N
- { \@@_parse_function:NNN \@@_randint_o:Nw ? }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Engine support}
-%
-% Obviously, every word \enquote{random} below means
-% \enquote{pseudo-random}, as we have no access to entropy (except a
-% very unreliable source of entropy: the time it takes to run some
-% code).
-%
-% The primitive random number generator (RNG) is provided as
-% \cs{tex_uniformdeviate:D}. Under the hood, it maintains an array of
-% $55$ $28$-bit numbers, updated with a linear recursion relation
-% (similar to Fibonacci numbers) modulo $2^{28}$. When
-% \cs{tex_uniformdeviate:D} \meta{integer} is called (for brevity denote
-% by~$N$ the \meta{integer}), the next $28$-bit number is read from the
-% array, scaled by $N/2^{28}$, and rounded. To prevent $0$ and $N$ from
-% appearing half as often as other numbers, they are both mapped to the
-% result~$0$.
-%
-% This process means that \cs{tex_uniformdeviate:D} only gives a uniform
-% distribution from $0$ to $N-1$ if $N$ is a divisor of $2^{28}$, so we
-% will mostly call the RNG with such power of~$2$ arguments. If $N$
-% does not divide $2^{28}$, then the relative non-uniformity (difference
-% between probabilities of getting different numbers) is about
-% $N/2^{28}$. This implies that detecting deviation from $1/N$ of the
-% probability of a fixed value X requires about $2^{56}/N$ random
-% trials. But collective patterns can reduce this to about
-% $2^{56}/N^2$. For instance with $N=3\times 2^{k}$, the modulo~$3$
-% repartition of such random numbers is biased with a non-uniformity
-% about $2^k/2^{28}$ (which is much worse than the circa $3/2^{28}$
-% non-uniformity from taking directly $N=3$). This is detectable after
-% about $2^{56}/2^{2k} = 9\cdot 2^{56}/N^2$ random numbers. For $k=15$,
-% $N=98304$, this means roughly $2^{26}$ calls to the RNG
-% (experimentally this takes at the very least 16 seconds on a 2 giga-hertz
-% processor). While this bias is not quite problematic, it is
-% uncomfortably close to being so, and it becomes worse as $N$ is
-% increased. In our code, we shall thus combine several results from
-% the RNG\@.
-%
-% The RNG has three types of unexpected correlations. First, everything
-% is linear modulo~$2^{28}$, hence the lowest $k$ bits of the random
-% numbers only depend on the lowest $k$ bits of the seed (and of course
-% the number of times the RNG was called since setting the seed). The
-% recommended way to get a number from $0$ to $N-1$ is thus to scale the
-% raw $28$-bit integer, as the engine's RNG does. We will go further
-% and in fact typically we discard some of the lowest bits.
-%
-% Second, suppose that we call the RNG with the same argument~$N$ to get
-% a set of $K$ integers in $[0,N-1]$ (throwing away repeats), and
-% suppose that $N>K^3$ and $K>55$. The recursion used to construct more
-% $28$-bit numbers from previous ones is linear:
-% $x_n = x_{n-55} - x_{n-24}$ or $x_n = x_{n-55}-x_{n-24}+2^{28}$.
-% After rescaling and rounding we find that the result $N_n\in[0,N-1]$
-% is among $N_{n-55} - N_{n-24} + \{-1,0,1\}$ modulo~$N$ (a more
-% detailed analysis shows that $0$ appears with frequency close
-% to~$3/4$). The resulting set thus has more triplets $(a,b,c)$ than
-% expected obeying $a=b+c$ modulo~$N$. Namely it will have of order
-% $(K-55)\times 3/4$ such triplets, when one would expect $K^3/(6N)$.
-% This starts to be detectable around $N=2^{18}>55^3$ (earlier if one
-% keeps track of positions too, but this is more subtle than it looks
-% because the array of $28$-bit integers is read backwards by the
-% engine). Hopefully the correlation is subtle enough to not affect
-% realistic documents so we do not specifically mitigate against this.
-% Since we typically use two calls to the RNG per \cs{int_rand:nn} we
-% would need to investigate linear relations between the $x_{2n}$ on the
-% one hand and between the $x_{2n+1}$ on the other hand. Such relations
-% will have more complicated coefficients than $\pm 1$, which alleviates
-% the issue.
-%
-% Third, consider successive batches of $165$ calls to the RNG (with
-% argument $2^{28}$ or with argument~$2$ for instance), then most
-% batches have more odd than even numbers. Note that this does not mean
-% that there are more odd than even numbers overall. Similar issues are
-% discussed in Knuth's TAOCP volume 2 near exercise 3.3.2-31. We do not
-% have any mitigation strategy for this.
-%
-% Ideally, our algorithm should be:
-% \begin{itemize}
-% \item Uniform. The result should be as uniform as possible assuming
-% that the RNG's underlying $28$-bit integers are uniform.
-% \item Uncorrelated. The result should not have detectable
-% correlations between different seeds, similar to the lowest-bit ones
-% mentioned earlier.
-% \item Quick. The algorithm should be fast in \TeX{}, so no
-% \enquote{bit twiddling}, but \enquote{digit twiddling} is ok.
-% \item Simple. The behaviour must be documentable precisely.
-% \item Predictable. The number of calls to the RNG should be the same
-% for any \cs{int_rand:nn}, because then the algorithm can be modified
-% later without changing the result of other uses of the RNG\@.
-% \item Robust. It should work even for \cs{int_rand:nn} |{| |-|
-% \cs{c_max_int} |}| |{| \cs{c_max_int} |}| where the range is not
-% representable as an integer. In fact, we also provide later a
-% floating-point |randint| whose range can go all the way up to
-% $2\times 10^{16}-1$ possible values.
-% \end{itemize}
-% Some of these requirements conflict. For instance, uniformity cannot
-% be achieved with a fixed number of calls to the RNG\@.
-%
-% Denote by $\operatorname{random}(N)$ one call to
-% \cs{tex_uniformdeviate:D} with argument~$N$, and by
-% $\operatorname{ediv}(p,q)$ the \eTeX{} rounding division giving
-% $\lfloor p/q+1/2\rfloor$. Denote by $\meta{min}$, $\meta{max}$ and
-% $R=\meta{max}-\meta{min}+1$ the arguments of \cs{int_min:nn} and the
-% number of possible outcomes. Note that $R\in [1,2^{32}-1]$ cannot
-% necessarily be represented as an integer (however, $R-2^{31}$ can).
-% Our strategy is to get two $28$-bit integers $X$ and $Y$ from the RNG,
-% split each into $14$-bit integers, as $X=X_1\times 2^{14}+X_0$ and
-% $Y=Y_1\times 2^{14}+Y_0$ then return essentially
-% $\meta{min} + \lfloor R (X_1\times 2^{-14} + Y_1\times 2^{-28} +
-% Y_0\times 2^{-42} + X_0\times 2^{-56})\rfloor$. For small~$R$ the
-% $X_0$ term has a tiny effect so we ignore it and we can compute
-% $R\times Y/2^{28}$ much more directly by $\operatorname{random}(R)$.
-% \begin{itemize}
-% \item If $R \leq 2^{17}-1$ then return
-% $\operatorname{ediv}(R\operatorname{random}(2^{14}) +
-% \operatorname{random}(R) + 2^{13}, 2^{14}) - 1 + \meta{min}$. The
-% shifts by $2^{13}$ and $-1$ convert \eTeX{} division to truncated
-% division. The bound on $R$ ensures that the number obtained after
-% the shift is less than \cs{c_max_int}. The non-uniformity is at
-% most of order $2^{17}/2^{42} = 2^{-25}$.
-% \item Split $R=R_2\times 2^{28}+R_1\times 2^{14}+R_0$, where
-% $R_2\in [0,15]$. Compute
-% $\meta{min} + R_2 X_1 2^{14} + (R_2 Y_1 + R_1 X_1) +
-% \operatorname{ediv}(R_2 Y_0 + R_1 Y_1 + R_0 X_1 +
-% \operatorname{ediv}(R_2 X_0 + R_0 Y_1 + \operatorname{ediv}((2^{14}
-% R_1 + R_0) (2^{14} Y_0 + X_0), 2^{28}), 2^{14}), 2^{14})$ then map a
-% result of $\meta{max}+1$ to $\meta{min}$. Writing each
-% $\operatorname{ediv}$ in terms of truncated division with a shift,
-% and using
-% $\lfloor(p+\lfloor r/s\rfloor)/q\rfloor =
-% \lfloor(ps+r)/(sq)\rfloor$, what we compute is equal to
-% $\lfloor\meta{exact}+2^{-29}+2^{-15}+2^{-1}\rfloor$ with
-% $\meta{exact}=\meta{min} + R \times 0.X_1Y_1Y_0X_0$. Given we map
-% $\meta{max}+1$ to $\meta{min}$, the shift has no effect on
-% uniformity. The non-uniformity is bounded by $R/2^{56}<2^{-24}$. It
-% may be possible to speed up the code by dropping tiny terms such as
-% $R_0 X_0$, but the analysis of non-uniformity proves too difficult.
-%
-% To avoid the overflow when the computation yields $\meta{max}+1$
-% with $\meta{max}=2^{31}-1$ (note that $R$ is then arbitrary), we
-% compute the result in two pieces. Compute
-% $\meta{first} = \meta{min} + R_2 X_1 2^{14}$ if $R_2<8$ or
-% $\meta{min} + 8 X_1 2^{14} + (R_2-8) X_1 2^{14}$ if $R_2\geq 8$, the
-% expressions being chosen to avoid overflow. Compute
-% $\meta{second} = R_2 Y_1 + R_1 X_1 + \operatorname{ediv}({\dots})$,
-% at most
-% $R_2 2^{14} + R_1 2^{14} + R_0\leq 2^{28} + 15\times 2^{14} - 1$,
-% not at risk of overflowing. We have
-% $\meta{first}+\meta{second}=\meta{max}+1=\meta{min}+R$ if and only
-% if $\meta{second} = R1 2^{14} + R_0 + R_2 2^{14}$ and
-% $2^{14} R_2 X_1 = 2^{28} R_2 - 2^{14} R_2$ (namely $R_2=0$ or
-% $X_1=2^{14}-1$). In that case, return \meta{min}, otherwise return
-% $\meta{first}+\meta{second}$, which is safe because it is at most
-% \meta{max}. Note that the decision of what to return does not need
-% \meta{first} explicitly so we don't actually compute it, just put it
-% in an integer expression in which \meta{second} is eventually added
-% (or not).
-% \item To get a floating point number in $[0,1)$ just call the
-% $R=10000\leq 2^{17}-1$ procedure above to produce four blocks of four
-% digits.
-% \item To get an integer floating point number in a range (whose size
-% can be up to $2\times 10^{16}-1$), work with fixed-point numbers:
-% get six times four digits to build a fixed point number, multiply by
-% $R$ and add $\meta{min}$. This requires some care because
-% \pkg{l3fp-extended} only supports non-negative numbers.
-% \end{itemize}
-%
-% \begin{variable}{\c__kernel_randint_max_int}
-% Constant equal to $2^{17}-1$, the maximal size of a range that
-% \cs{int_range:nn} can do with its \enquote{simple} algorithm.
-% \begin{macrocode}
-\int_const:Nn \c__kernel_randint_max_int { 131071 }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[EXP]{\__kernel_randint:n}
-% Used in an integer expression, \cs{__kernel_randint:n} |{|$R$|}|
-% gives a random number
-% $1+\lfloor(R\operatorname{random}(2^{14}) +
-% \operatorname{random}(R))/2^{14}\rfloor$ that is in $[1,R]$.
-% Previous code was computing $\lfloor p/2^{14}\rfloor$ as
-% $\operatorname{ediv}(p-2^{13},2^{14})$ but that wrongly gives $-1$
-% for $p=0$.
-% \begin{macrocode}
-\cs_new:Npn \__kernel_randint:n #1
- {
- (#1 * \tex_uniformdeviate:D 16384
- + \tex_uniformdeviate:D #1 + 8192 ) / 16384
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {\@@_rand_myriads:n, \@@_rand_myriads_loop:w, \@@_rand_myriads_get:w}
-% Used as \cs{@@_rand_myriads:n} |{XXX}| with one letter |X|
-% (specifically) per block of four digit we want; it expands to |;|
-% followed by the requested number of brace groups, each containing
-% four (pseudo-random) digits. Digits are produced as a random number
-% in $[10000,19999]$ for the usual reason of preserving leading zeros.
-% \begin{macrocode}
-\cs_new:Npn \@@_rand_myriads:n #1
- { \@@_rand_myriads_loop:w #1 \prg_break: X \prg_break_point: ; }
-\cs_new:Npn \@@_rand_myriads_loop:w #1 X
- {
- #1
- \exp_after:wN \@@_rand_myriads_get:w
- \int_value:w \@@_int_eval:w 9999 +
- \__kernel_randint:n { 10000 }
- \@@_rand_myriads_loop:w
- }
-\cs_new:Npn \@@_rand_myriads_get:w 1 #1 ; { ; {#1} }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Random floating point}
-%
-% \begin{macro}[EXP]{\@@_rand_o:Nw, \@@_rand_o:w}
-% First we check that |random| was called without argument. Then get
-% four blocks of four digits and convert that fixed point number to a
-% floating point number (this correctly sets the exponent). This has
-% a minor bug: if all of the random numbers are zero then the result
-% is correctly~$0$ but it raises the \texttt{underflow} flag; it
-% should not do that.
-% \begin{macrocode}
-\cs_new:Npn \@@_rand_o:Nw ? #1 @
- {
- \tl_if_empty:nTF {#1}
- {
- \exp_after:wN \@@_rand_o:w
- \exp:w \exp_end_continue_f:w
- \@@_rand_myriads:n { XXXX } { 0000 } { 0000 } ; 0
- }
- {
- \msg_expandable_error:nnnnn
- { fp } { num-args } { rand() } { 0 } { 0 }
- \exp_after:wN \c_nan_fp
- }
- }
-\cs_new:Npn \@@_rand_o:w ;
- {
- \exp_after:wN \@@_sanitize:Nw
- \exp_after:wN 0
- \int_value:w \@@_int_eval:w \c_zero_int
- \@@_fixed_to_float_o:wN
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Random integer}
-%
-% \begin{macro}[EXP]{\@@_randint_o:Nw}
-% \begin{macro}[EXP]
-% {
-% \@@_randint_default:w,
-% \@@_randint_badarg:w,
-% \@@_randint_o:w,
-% \@@_randint_auxi_o:ww,
-% \@@_randint_auxii:wn,
-% \@@_randint_auxiii_o:ww,
-% \@@_randint_auxiv_o:ww,
-% \@@_randint_auxv_o:w,
-% }
-% Enforce that there is one argument (then add first argument~$1$)
-% or two arguments. Call \cs{@@_randint_badarg:w} on each; this
-% function inserts |1| \cs{exp_stop_f:} to end the \cs{if_case:w}
-% statement if either the argument is not an integer or if its
-% absolute value is $\geq 10^{16}$. Also bail out if
-% \cs{@@_compare_back:ww} yields~|1|, meaning that the bounds are
-% not in the right order. Otherwise an auxiliary converts each
-% argument times $10^{-16}$ (hence the shift in exponent) to a
-% $24$-digit fixed point number (see \pkg{l3fp-extended}).
-% Then compute the number of choices, $\meta{max}+1-\meta{min}$.
-% Create a random $24$-digit fixed-point number with
-% \cs{@@_rand_myriads:n}, then use a fused multiply-add instruction
-% to multiply the number of choices to that random number and add it
-% to \meta{min}. Then truncate to $16$ digits (namely select the
-% integer part of $10^{16}$ times the result) before converting back
-% to a floating point number (\cs{@@_sanitize:Nw} takes care of zero).
-% To avoid issues with negative numbers, add $1$ to all fixed point
-% numbers (namely $10^{16}$ to the integers they represent), except
-% of course when it is time to convert back to a float.
-% \begin{macrocode}
-\cs_new:Npn \@@_randint_o:Nw ?
- {
- \@@_parse_function_one_two:nnw
- { randint }
- { \@@_randint_default:w \@@_randint_o:w }
- }
-\cs_new:Npn \@@_randint_default:w #1 { \exp_after:wN #1 \c_one_fp }
-\cs_new:Npn \@@_randint_badarg:w \s_@@ \@@_chk:w #1#2#3;
- {
- \@@_int:wTF \s_@@ \@@_chk:w #1#2#3;
- {
- \if_meaning:w 1 #1
- \if_int_compare:w
- \@@_use_i_until_s:nw #3 ; > \c_@@_prec_int
- \c_one_int
- \fi:
- \fi:
- }
- { \c_one_int }
- }
-\cs_new:Npn \@@_randint_o:w #1; #2; @
- {
- \if_case:w
- \@@_randint_badarg:w #1;
- \@@_randint_badarg:w #2;
- \if:w 1 \@@_compare_back:ww #2; #1; \c_one_int \fi:
- \c_zero_int
- \@@_randint_auxi_o:ww #1; #2;
- \or:
- \@@_invalid_operation_tl_o:ff
- { randint } { \@@_array_to_clist:n { #1; #2; } }
- \exp:w
- \fi:
- \exp_after:wN \exp_end:
- }
-\cs_new:Npn \@@_randint_auxi_o:ww #1 ; #2 ; #3 \exp_end:
- {
- \fi:
- \@@_randint_auxii:wn #2 ;
- { \@@_randint_auxii:wn #1 ; \@@_randint_auxiii_o:ww }
- }
-\cs_new:Npn \@@_randint_auxii:wn \s_@@ \@@_chk:w #1#2#3#4 ;
- {
- \if_meaning:w 0 #1
- \exp_after:wN \use_i:nn
- \else:
- \exp_after:wN \use_ii:nn
- \fi:
- { \exp_after:wN \@@_fixed_continue:wn \c_@@_one_fixed_tl }
- {
- \exp_after:wN \@@_ep_to_fixed:wwn
- \int_value:w \@@_int_eval:w
- #3 - \c_@@_prec_int , #4 {0000} {0000} ;
- {
- \if_meaning:w 0 #2
- \exp_after:wN \use_i:nnnn
- \exp_after:wN \@@_fixed_add_one:wN
- \fi:
- \exp_after:wN \@@_fixed_sub:wwn \c_@@_one_fixed_tl
- }
- \@@_fixed_continue:wn
- }
- }
-\cs_new:Npn \@@_randint_auxiii_o:ww #1 ; #2 ;
- {
- \@@_fixed_add:wwn #2 ;
- {0000} {0000} {0000} {0001} {0000} {0000} ;
- \@@_fixed_sub:wwn #1 ;
- {
- \exp_after:wN \use_i:nn
- \exp_after:wN \@@_fixed_mul_add:wwwn
- \exp:w \exp_end_continue_f:w \@@_rand_myriads:n { XXXXXX } ;
- }
- #1 ;
- \@@_randint_auxiv_o:ww
- #2 ;
- \@@_randint_auxv_o:w #1 ; @
- }
-\cs_new:Npn \@@_randint_auxiv_o:ww #1#2#3#4#5 ; #6#7#8#9
- {
- \if_int_compare:w
- \if_int_compare:w #1#2 > #6#7 \exp_stop_f: 1 \else:
- \if_int_compare:w #1#2 < #6#7 \exp_stop_f: - \fi: \fi:
- #3#4 > #8#9 \exp_stop_f:
- \@@_use_i_until_s:nw
- \fi:
- \@@_randint_auxv_o:w {#1}{#2}{#3}{#4}#5
- }
-\cs_new:Npn \@@_randint_auxv_o:w #1#2#3#4#5 ; #6 @
- {
- \exp_after:wN \@@_sanitize:Nw
- \int_value:w
- \if_int_compare:w #1 < 10000 \exp_stop_f:
- 2
- \else:
- 0
- \exp_after:wN \exp_after:wN
- \exp_after:wN \@@_reverse_args:Nww
- \fi:
- \exp_after:wN \@@_fixed_sub:wwn \c_@@_one_fixed_tl
- {#1} {#2} {#3} {#4} {0000} {0000} ;
- {
- \exp_after:wN \exp_stop_f:
- \int_value:w \@@_int_eval:w \c_@@_prec_int
- \@@_fixed_to_float_o:wN
- }
- 0
- \exp:w \exp_after:wN \exp_end:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\int_rand:nn, \@@_randint:ww}
-% Evaluate the argument and filter out the case where the lower
-% bound~|#1| is more than the upper bound~|#2|. Then determine
-% whether the range is narrower than \cs{c__kernel_randint_max_int};
-% |#2-#1| may overflow for very large positive~|#2| and negative~|#1|.
-% If the range is narrow, call \cs{__kernel_randint:n} \Arg{choices}
-% where \meta{choices} is the number of possible outcomes. If the
-% range is wide, use somewhat slower code.
-% \begin{macrocode}
-\cs_new:Npn \int_rand:nn #1#2
- {
- \int_eval:n
- {
- \exp_after:wN \@@_randint:ww
- \int_value:w \int_eval:n {#1} \exp_after:wN ;
- \int_value:w \int_eval:n {#2} ;
- }
- }
-\cs_new:Npn \@@_randint:ww #1; #2;
- {
- \if_int_compare:w #1 > #2 \exp_stop_f:
- \msg_expandable_error:nnnn
- { kernel } { randint-backward-range } {#1} {#2}
- \@@_randint:ww #2; #1;
- \else:
- \if_int_compare:w \@@_int_eval:w #2
- \if_int_compare:w #1 > \c_zero_int
- - #1 < \@@_int_eval:w
- \else:
- < \@@_int_eval:w #1 +
- \fi:
- \c__kernel_randint_max_int
- \@@_int_eval_end:
- \__kernel_randint:n
- { \@@_int_eval:w #2 - #1 + 1 \@@_int_eval_end: }
- - 1 + #1
- \else:
- \__kernel_randint:nn {#1} {#2}
- \fi:
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \__kernel_randint:nn, \@@_randint_split_o:Nw, \@@_randint_split_aux:w,
-% \@@_randinat_wide_aux:w, \@@_randinat_wide_auxii:w,
-% }
-% Any $n\in[-2^{31}+1,2^{31}-1]$ is uniquely written as
-% $2^{14}n_1+n_2$ with $n_1\in[-2^{17},2^{17}-1]$ and
-% $n_2\in[0,2^{14}-1]$. Calling \cs{@@_randint_split_o:Nw} $n$ |;|
-% gives $n_1$|;| $n_2$|;| and expands the next token once. We do this
-% for two random numbers and apply \cs{@@_randint_split_o:Nw} twice to
-% fully decompose the range~$R$. One subtlety is that we compute
-% $R-2^{31}=\meta{max}-\meta{min}-(2^{31}-1)\in[-2^{31}+1,2^{31}-1]$
-% rather than $R$ to avoid overflow.
-%
-% Then we have \cs{@@_randint_wide_aux:w} \meta{X_1}|;|\meta{X_0}|;|
-% \meta{Y_1}|;|\meta{Y_0}|;| \meta{R_2}|;|\meta{R_1}|;|\meta{R_0}|;.|
-% and we apply the algorithm described earlier.
-% \begin{macrocode}
-\cs_new:Npn \__kernel_randint:nn #1#2
- {
- #1
- \exp_after:wN \@@_randint_wide_aux:w
- \int_value:w
- \exp_after:wN \@@_randint_split_o:Nw
- \tex_uniformdeviate:D 268435456 ;
- \int_value:w
- \exp_after:wN \@@_randint_split_o:Nw
- \tex_uniformdeviate:D 268435456 ;
- \int_value:w
- \exp_after:wN \@@_randint_split_o:Nw
- \int_value:w \@@_int_eval:w 131072 +
- \exp_after:wN \@@_randint_split_o:Nw
- \int_value:w
- \__kernel_int_add:nnn {#2} { -#1 } { -\c_max_int } ;
- .
- }
-\cs_new:Npn \@@_randint_split_o:Nw #1#2 ;
- {
- \if_meaning:w 0 #1
- 0 \exp_after:wN ; \int_value:w 0
- \else:
- \exp_after:wN \@@_randint_split_aux:w
- \int_value:w \@@_int_eval:w (#1#2 - 8192) / 16384 ;
- + #1#2
- \fi:
- \exp_after:wN ;
- }
-\cs_new:Npn \@@_randint_split_aux:w #1 ;
- {
- #1 \exp_after:wN ;
- \int_value:w \@@_int_eval:w - #1 * 16384
- }
-\cs_new:Npn \@@_randint_wide_aux:w #1;#2; #3;#4; #5;#6;#7; .
- {
- \exp_after:wN \@@_randint_wide_auxii:w
- \int_value:w \@@_int_eval:w #5 * #3 + #6 * #1 +
- (#5 * #4 + #6 * #3 + #7 * #1 +
- (#5 * #2 + #7 * #3 +
- (16384 * #6 + #7) * (16384 * #4 + #2) / 268435456) / 16384
- ) / 16384 \exp_after:wN ;
- \int_value:w \@@_int_eval:w (#5 + #6) * 16384 + #7 ;
- #1 ; #5 ;
- }
-\cs_new:Npn \@@_randint_wide_auxii:w #1; #2; #3; #4;
- {
- \if_int_odd:w 0
- \if_int_compare:w #1 = #2 \else: \exp_stop_f: \fi:
- \if_int_compare:w #4 = \c_zero_int 1 \fi:
- \if_int_compare:w #3 = 16383 ~ 1 \fi:
- \exp_stop_f:
- \exp_after:wN \prg_break:
- \fi:
- \if_int_compare:w #4 < 8 \exp_stop_f:
- + #4 * #3 * 16384
- \else:
- + 8 * #3 * 16384 + (#4 - 8) * #3 * 16384
- \fi:
- + #1
- \prg_break_point:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\int_rand:n, \@@_randint:n}
-% Similar to \cs{int_rand:nn}, but needs fewer checks.
-% \begin{macrocode}
-\cs_new:Npn \int_rand:n #1
- {
- \int_eval:n
- { \exp_args:Nf \@@_randint:n { \int_eval:n {#1} } }
- }
-\cs_new:Npn \@@_randint:n #1
- {
- \if_int_compare:w #1 < \c_one_int
- \msg_expandable_error:nnnn
- { kernel } { randint-backward-range } { 1 } {#1}
- \@@_randint:ww #1; 1;
- \else:
- \if_int_compare:w #1 > \c__kernel_randint_max_int
- \__kernel_randint:nn { 1 } {#1}
- \else:
- \__kernel_randint:n {#1}
- \fi:
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintChanges
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3fp-round.dtx b/macros/latex/contrib/l3kernel/l3fp-round.dtx
deleted file mode 100644
index bddb146be7..0000000000
--- a/macros/latex/contrib/l3kernel/l3fp-round.dtx
+++ /dev/null
@@ -1,592 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3fp-round.dtx
-%
-% Copyright (C) 2011-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3fp-round} module\\ Rounding floating points^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3fp-round} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=fp>
-% \end{macrocode}
-%
-% ^^A todo: provide an interface for rounding modes.
-% ^^A todo: provide a \l_@@_rounding_mode_int giving the current mode.
-% ^^A todo: make transcendental function obey the correct rounding mode.
-% ^^A todo: optimize all rounding functions for various rounding modes.
-% ^^A todo: reduce the number of almost identical functions.
-%
-% \begin{macro}[EXP]
-% {
-% \@@_parse_word_trunc:N,
-% \@@_parse_word_floor:N,
-% \@@_parse_word_ceil:N
-% }
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_word_trunc:N
- { \@@_parse_function:NNN \@@_round_o:Nw \@@_round_to_zero:NNN }
-\cs_new:Npn \@@_parse_word_floor:N
- { \@@_parse_function:NNN \@@_round_o:Nw \@@_round_to_ninf:NNN }
-\cs_new:Npn \@@_parse_word_ceil:N
- { \@@_parse_function:NNN \@@_round_o:Nw \@@_round_to_pinf:NNN }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {
-% \@@_parse_word_round:N, \@@_parse_round:Nw,
-% }
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_word_round:N #1#2
- {
- \@@_parse_function:NNN
- \@@_round_o:Nw \@@_round_to_nearest:NNN #1
- #2
- }
-\cs_new:Npn \@@_parse_round:Nw #1 #2 \@@_round_to_nearest:NNN #3#4
- { #2 #1 #3 }
-
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Rounding tools}
-%
-% \begin{variable}{\c_@@_five_int}
-% This is used as the half-point for which numbers are rounded
-% up/down.
-% \begin{macrocode}
-\int_const:Nn \c_@@_five_int { 5 }
-% \end{macrocode}
-% \end{variable}
-%
-% Floating point operations often yield a result that cannot be exactly
-% represented in a significand with $16$ digits. In that case, we need to
-% round the exact result to a representable number. The \textsc{ieee}
-% standard defines four rounding modes:
-% \begin{itemize}
-% \item Round to nearest: round to the representable floating point
-% number whose absolute difference with the exact result is the
-% smallest. If the exact result lies exactly at the mid-point
-% between two consecutive representable floating point numbers,
-% round to the floating point number whose last digit is even.
-% \item Round towards negative infinity: round to the greatest
-% floating point number not larger than the exact result.
-% \item Round towards zero: round to a floating point number with the
-% same sign as the exact result, with the largest absolute value not
-% larger than the absolute value of the exact result.
-% \item Round towards positive infinity: round to the least floating
-% point number not smaller than the exact result.
-% \end{itemize}
-% This is not fully implemented in \pkg{l3fp} yet, and transcendental
-% functions fall back on the \enquote{round to nearest} mode. All
-% rounding for basic algebra is done through the functions defined in
-% this module, which can be redefined to change their rounding behaviour
-% (but there is not interface for that yet).
-%
-% The rounding tools available in this module are many variations on a
-% base function \cs{@@_round:NNN}, which expands to |0\exp_stop_f:| or
-% |1\exp_stop_f:| depending on whether the final result should be rounded up
-% or down.
-% \begin{itemize}
-% \item \cs{@@_round:NNN} \meta{sign} \meta{digit_1} \meta{digit_2}
-% can expand to |0\exp_stop_f:| or |1\exp_stop_f:|.
-% \item \cs{@@_round_s:NNNw} \meta{sign} \meta{digit_1} \meta{digit_2}
-% \meta{more digits}|;| can expand to |0\exp_stop_f:;| or |1\exp_stop_f:;|.
-% \item \cs{@@_round_neg:NNN} \meta{sign} \meta{digit_1} \meta{digit_2}
-% can expand to |0\exp_stop_f:| or |1\exp_stop_f:|.
-% \end{itemize}
-% See implementation comments for details on the syntax.
-%
-% \begin{macro}[rEXP]{\@@_round:NNN}
-% \begin{macro}[rEXP]
-% {
-% \@@_round_to_nearest:NNN,
-% \@@_round_to_nearest_ninf:NNN,
-% \@@_round_to_nearest_zero:NNN,
-% \@@_round_to_nearest_pinf:NNN,
-% \@@_round_to_ninf:NNN,
-% \@@_round_to_zero:NNN,
-% \@@_round_to_pinf:NNN
-% }
-% \begin{syntax}
-% \cs{@@_round:NNN} \meta{final sign} \meta{digit_1} \meta{digit_2}
-% \end{syntax}
-% If rounding the number $\meta{final sign}
-% \meta{digit_1}.\meta{digit_2}$ to an integer rounds it towards zero
-% (truncates it), this function expands to |0\exp_stop_f:|, and otherwise
-% to |1\exp_stop_f:|. Typically used within the scope of an
-% \cs{@@_int_eval:w}, to add~$1$ if needed, and thereby round
-% correctly. The result depends on the rounding mode.
-%
-% It is very important that \meta{final sign} be the final sign of the
-% result. Otherwise, the result would be incorrect in the case of
-% rounding towards~$-\infty$ or towards~$+\infty$. Also recall that
-% \meta{final sign} is~$0$ for positive, and~$2$ for negative.
-%
-% By default, the functions below return |0\exp_stop_f:|, but this is
-% superseded by \cs{@@_round_return_one:}, which instead returns
-% |1\exp_stop_f:|, expanding everything and removing |0\exp_stop_f:| in the
-% process. In the case of rounding towards~$\pm\infty$ or
-% towards~$0$, this is not really useful, but it prepares us for the
-% \enquote{round to nearest, ties to even} mode.
-%
-% The \enquote{round to nearest} mode is the default. If the
-% \meta{digit_2} is larger than~$5$, then round up. If it is less
-% than~$5$, round down. If it is exactly $5$, then round such that
-% \meta{digit_1} plus the result is even. In other words, round up if
-% \meta{digit_1} is odd.
-%
-% The \enquote{round to nearest} mode has three variants, which differ
-% in how ties are rounded: down towards $-\infty$, truncated towards $0$,
-% or up towards $+\infty$.
-% \begin{macrocode}
-\cs_new:Npn \@@_round_return_one:
- { \exp_after:wN 1 \exp_after:wN \exp_stop_f: \exp:w }
-\cs_new:Npn \@@_round_to_ninf:NNN #1 #2 #3
- {
- \if_meaning:w 2 #1
- \if_int_compare:w #3 > \c_zero_int
- \@@_round_return_one:
- \fi:
- \fi:
- \c_zero_int
- }
-\cs_new:Npn \@@_round_to_zero:NNN #1 #2 #3 { \c_zero_int }
-\cs_new:Npn \@@_round_to_pinf:NNN #1 #2 #3
- {
- \if_meaning:w 0 #1
- \if_int_compare:w #3 > \c_zero_int
- \@@_round_return_one:
- \fi:
- \fi:
- \c_zero_int
- }
-\cs_new:Npn \@@_round_to_nearest:NNN #1 #2 #3
- {
- \if_int_compare:w #3 > \c_@@_five_int
- \@@_round_return_one:
- \else:
- \if_meaning:w 5 #3
- \if_int_odd:w #2 \exp_stop_f:
- \@@_round_return_one:
- \fi:
- \fi:
- \fi:
- \c_zero_int
- }
-\cs_new:Npn \@@_round_to_nearest_ninf:NNN #1 #2 #3
- {
- \if_int_compare:w #3 > \c_@@_five_int
- \@@_round_return_one:
- \else:
- \if_meaning:w 5 #3
- \if_meaning:w 2 #1
- \@@_round_return_one:
- \fi:
- \fi:
- \fi:
- \c_zero_int
- }
-\cs_new:Npn \@@_round_to_nearest_zero:NNN #1 #2 #3
- {
- \if_int_compare:w #3 > \c_@@_five_int
- \@@_round_return_one:
- \fi:
- \c_zero_int
- }
-\cs_new:Npn \@@_round_to_nearest_pinf:NNN #1 #2 #3
- {
- \if_int_compare:w #3 > \c_@@_five_int
- \@@_round_return_one:
- \else:
- \if_meaning:w 5 #3
- \if_meaning:w 0 #1
- \@@_round_return_one:
- \fi:
- \fi:
- \fi:
- \c_zero_int
- }
-\cs_new_eq:NN \@@_round:NNN \@@_round_to_nearest:NNN
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_round_s:NNNw}
-% \begin{syntax}
-% \cs{@@_round_s:NNNw} \meta{final sign} \meta{digit} \meta{more digits} |;|
-% \end{syntax}
-% Similar to \cs{@@_round:NNN}, but with an extra semicolon, this
-% function expands to |0\exp_stop_f:;| if rounding $\meta{final sign}
-% \meta{digit}.\meta{more digits}$ to an integer truncates, and to
-% |1\exp_stop_f:;| otherwise. The \meta{more digits} part must be a digit,
-% followed by something that does not overflow a \cs{int_use:N}
-% \cs{@@_int_eval:w} construction. The only relevant information about
-% this piece is whether it is zero or not.
-% \begin{macrocode}
-\cs_new:Npn \@@_round_s:NNNw #1 #2 #3 #4;
- {
- \exp_after:wN \@@_round:NNN
- \exp_after:wN #1
- \exp_after:wN #2
- \int_value:w \@@_int_eval:w
- \if_int_odd:w 0 \if_meaning:w 0 #3 1 \fi:
- \if_meaning:w 5 #3 1 \fi:
- \exp_stop_f:
- \if_int_compare:w \@@_int_eval:w #4 > \c_zero_int
- 1 +
- \fi:
- \fi:
- #3
- ;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_round_digit:Nw}
-% \begin{syntax}
-% \cs{int_value:w} \cs{@@_round_digit:Nw} \meta{digit} \meta{int expr} |;|
-% \end{syntax}
-% This function should always be called within an \cs{int_value:w}
-% or \cs{@@_int_eval:w} expansion; it may add an extra
-% \cs{@@_int_eval:w}, which means that the integer or integer
-% expression should not be ended with a synonym of \tn{relax}, but
-% with a semi-colon for instance.
-% \begin{macrocode}
-\cs_new:Npn \@@_round_digit:Nw #1 #2;
- {
- \if_int_odd:w \if_meaning:w 0 #1 1 \else:
- \if_meaning:w 5 #1 1 \else:
- 0 \fi: \fi: \exp_stop_f:
- \if_int_compare:w \@@_int_eval:w #2 > \c_zero_int
- \@@_int_eval:w 1 +
- \fi:
- \fi:
- #1
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_round_neg:NNN}
-% \begin{macro}[EXP]
-% {
-% \@@_round_to_nearest_neg:NNN,
-% \@@_round_to_nearest_ninf_neg:NNN,
-% \@@_round_to_nearest_zero_neg:NNN,
-% \@@_round_to_nearest_pinf_neg:NNN,
-% \@@_round_to_ninf_neg:NNN,
-% \@@_round_to_zero_neg:NNN,
-% \@@_round_to_pinf_neg:NNN
-% }
-% \begin{syntax}
-% \cs{@@_round_neg:NNN} \meta{final sign} \meta{digit_1} \meta{digit_2}
-% \end{syntax}
-% This expands to |0\exp_stop_f:| or |1\exp_stop_f:| after doing the following
-% test. Starting from a number of
-% the form $ \meta{final sign}0.\meta{15 digits}\meta{digit_1} $ with exactly
-% $15$ (non-all-zero) digits before \meta{digit_1}, subtract from it
-% $\meta{final sign}0.0\ldots{}0\meta{digit_2}$, where there are $16$~zeros.
-% If in the current rounding mode the result should be rounded down,
-% then this function returns |1\exp_stop_f:|. Otherwise, \emph{i.e.},
-% if the result is rounded back to the first operand, then this function
-% returns |0\exp_stop_f:|.
-%
-% It turns out that this negative \enquote{round to nearest}
-% is identical to the positive one. And this is the default mode.
-% \begin{macrocode}
-\cs_new_eq:NN \@@_round_to_ninf_neg:NNN \@@_round_to_pinf:NNN
-\cs_new:Npn \@@_round_to_zero_neg:NNN #1 #2 #3
- {
- \if_int_compare:w #3 > \c_zero_int
- \@@_round_return_one:
- \fi:
- \c_zero_int
- }
-\cs_new_eq:NN \@@_round_to_pinf_neg:NNN \@@_round_to_ninf:NNN
-\cs_new_eq:NN \@@_round_to_nearest_neg:NNN \@@_round_to_nearest:NNN
-\cs_new_eq:NN \@@_round_to_nearest_ninf_neg:NNN
- \@@_round_to_nearest_pinf:NNN
-\cs_new:Npn \@@_round_to_nearest_zero_neg:NNN #1 #2 #3
- {
- \if_int_compare:w #3 < \c_@@_five_int \else:
- \@@_round_return_one:
- \fi:
- \c_zero_int
- }
-\cs_new_eq:NN \@@_round_to_nearest_pinf_neg:NNN
- \@@_round_to_nearest_ninf:NNN
-\cs_new_eq:NN \@@_round_neg:NNN \@@_round_to_nearest_neg:NNN
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{The \texttt{round} function}
-%
-% ^^A todo: This macro is intermingled with l3fp-parse.
-% ^^A todo: Add explanations.
-% \begin{macro}[EXP]{\@@_round_o:Nw, \@@_round_aux_o:Nw}
-% First check that all arguments are floating point numbers.
-% The |trunc|, |ceil| and |floor| functions expect one or two
-% arguments (the second is $0$ by default), and the |round| function
-% also accepts a third argument (\texttt{nan} by default), which
-% changes |#1| from \cs{@@_round_to_nearest:NNN} to one of its
-% analogues.
-% \begin{macrocode}
-\cs_new:Npn \@@_round_o:Nw #1
- {
- \@@_parse_function_all_fp_o:fnw
- { \@@_round_name_from_cs:N #1 }
- { \@@_round_aux_o:Nw #1 }
- }
-\cs_new:Npn \@@_round_aux_o:Nw #1#2 @
- {
- \if_case:w
- \@@_int_eval:w \@@_array_count:n {#2} \@@_int_eval_end:
- \@@_round_no_arg_o:Nw #1 \exp:w
- \or: \@@_round:Nwn #1 #2 {0} \exp:w
- \or: \@@_round:Nww #1 #2 \exp:w
- \else: \@@_round:Nwww #1 #2 @ \exp:w
- \fi:
- \exp_after:wN \exp_end:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_round_no_arg_o:Nw}
-% \begin{macrocode}
-\cs_new:Npn \@@_round_no_arg_o:Nw #1
- {
- \cs_if_eq:NNTF #1 \@@_round_to_nearest:NNN
- { \@@_error:nnnn { num-args } { round () } { 1 } { 3 } }
- {
- \@@_error:nffn { num-args }
- { \@@_round_name_from_cs:N #1 () } { 1 } { 2 }
- }
- \exp_after:wN \c_nan_fp
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_round:Nwww}
-% Having three arguments is only allowed for |round|, not |trunc|,
-% |ceil|, |floor|, so check for that case. If all is well, construct
-% one of \cs{@@_round_to_nearest:NNN}, \cs{@@_round_to_nearest_zero:NNN},
-% \cs{@@_round_to_nearest_ninf:NNN}, \cs{@@_round_to_nearest_pinf:NNN}
-% and act accordingly.
-% \begin{macrocode}
-\cs_new:Npn \@@_round:Nwww #1#2 ; #3 ; \s_@@ \@@_chk:w #4#5#6 ; #7 @
- {
- \cs_if_eq:NNTF #1 \@@_round_to_nearest:NNN
- {
- \tl_if_empty:nTF {#7}
- {
- \exp_args:Nc \@@_round:Nww
- {
- @@_round_to_nearest
- \if_meaning:w 0 #4 _zero \else:
- \if_case:w #5 \exp_stop_f: _pinf \or: \else: _ninf \fi: \fi:
- :NNN
- }
- #2 ; #3 ;
- }
- {
- \@@_error:nnnn { num-args } { round () } { 1 } { 3 }
- \exp_after:wN \c_nan_fp
- }
- }
- {
- \@@_error:nffn { num-args }
- { \@@_round_name_from_cs:N #1 () } { 1 } { 2 }
- \exp_after:wN \c_nan_fp
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_round_name_from_cs:N}
-% \begin{macrocode}
-\cs_new:Npn \@@_round_name_from_cs:N #1
- {
- \cs_if_eq:NNTF #1 \@@_round_to_zero:NNN { trunc }
- {
- \cs_if_eq:NNTF #1 \@@_round_to_ninf:NNN { floor }
- {
- \cs_if_eq:NNTF #1 \@@_round_to_pinf:NNN { ceil }
- { round }
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_round:Nww, \@@_round:Nwn}
-% \begin{macro}[EXP]
-% {
-% \@@_round_normal:NwNNnw ,
-% \@@_round_normal:NnnwNNnn ,
-% \@@_round_pack:Nw ,
-% \@@_round_normal:NNwNnn ,
-% \@@_round_normal_end:wwNnn ,
-% \@@_round_special:NwwNnn ,
-% \@@_round_special_aux:Nw
-% }
-% If the number of digits to round to is an integer or infinity all is
-% good; if it is \texttt{nan} then just produce a \texttt{nan};
-% otherwise invalid as we have something like |round(1,3.14)| where
-% the number of digits is not an integer.
-% \begin{macrocode}
-\cs_new:Npn \@@_round:Nww #1#2 ; #3 ;
- {
- \@@_small_int:wTF #3; { \@@_round:Nwn #1#2; }
- {
- \if:w 3 \@@_kind:w #3 ;
- \exp_after:wN \use_i:nn
- \else:
- \exp_after:wN \use_ii:nn
- \fi:
- { \exp_after:wN \c_nan_fp }
- {
- \@@_invalid_operation_tl_o:ff
- { \@@_round_name_from_cs:N #1 }
- { \@@_array_to_clist:n { #2; #3; } }
- }
- }
- }
-\cs_new:Npn \@@_round:Nwn #1 \s_@@ \@@_chk:w #2#3#4; #5
- {
- \if_meaning:w 1 #2
- \exp_after:wN \@@_round_normal:NwNNnw
- \exp_after:wN #1
- \int_value:w #5
- \else:
- \exp_after:wN \@@_exp_after_o:w
- \fi:
- \s_@@ \@@_chk:w #2#3#4;
- }
-\cs_new:Npn \@@_round_normal:NwNNnw #1#2 \s_@@ \@@_chk:w 1#3#4#5;
- {
- \@@_decimate:nNnnnn { \c_@@_prec_int - #4 - #2 }
- \@@_round_normal:NnnwNNnn #5 #1 #3 {#4} {#2}
- }
-\cs_new:Npn \@@_round_normal:NnnwNNnn #1#2#3#4; #5#6
- {
- \exp_after:wN \@@_round_normal:NNwNnn
- \int_value:w \@@_int_eval:w
- \if_int_compare:w #2 > \c_zero_int
- 1 \int_value:w #2
- \exp_after:wN \@@_round_pack:Nw
- \int_value:w \@@_int_eval:w 1#3 +
- \else:
- \if_int_compare:w #3 > \c_zero_int
- 1 \int_value:w #3 +
- \fi:
- \fi:
- \exp_after:wN #5
- \exp_after:wN #6
- \use_none:nnnnnnn #3
- #1
- \@@_int_eval_end:
- 0000 0000 0000 0000 ; #6
- }
-\cs_new:Npn \@@_round_pack:Nw #1
- { \if_meaning:w 2 #1 + 1 \fi: \@@_int_eval_end: }
-\cs_new:Npn \@@_round_normal:NNwNnn #1 #2
- {
- \if_meaning:w 0 #2
- \exp_after:wN \@@_round_special:NwwNnn
- \exp_after:wN #1
- \fi:
- \@@_pack_twice_four:wNNNNNNNN
- \@@_pack_twice_four:wNNNNNNNN
- \@@_round_normal_end:wwNnn
- ; #2
- }
-\cs_new:Npn \@@_round_normal_end:wwNnn #1;#2;#3#4#5
- {
- \exp_after:wN \@@_exp_after_o:w \exp:w \exp_end_continue_f:w
- \@@_sanitize:Nw #3 #4 ; #1 ;
- }
-\cs_new:Npn \@@_round_special:NwwNnn #1#2;#3;#4#5#6
- {
- \if_meaning:w 0 #1
- \@@_case_return:nw
- { \exp_after:wN \@@_zero_fp:N \exp_after:wN #4 }
- \else:
- \exp_after:wN \@@_round_special_aux:Nw
- \exp_after:wN #4
- \int_value:w \@@_int_eval:w 1
- \if_meaning:w 1 #1 -#6 \else: +#5 \fi:
- \fi:
- ;
- }
-\cs_new:Npn \@@_round_special_aux:Nw #1#2;
- {
- \exp_after:wN \@@_exp_after_o:w \exp:w \exp_end_continue_f:w
- \@@_sanitize:Nw #1#2; {1000}{0000}{0000}{0000};
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintChanges
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3fp-symbolic.dtx b/macros/latex/contrib/l3kernel/l3fp-symbolic.dtx
deleted file mode 100644
index 26a084733d..0000000000
--- a/macros/latex/contrib/l3kernel/l3fp-symbolic.dtx
+++ /dev/null
@@ -1,688 +0,0 @@
-% \iffalse
-%
-%% File l3fp-symbolic.dtx (C) Copyright 2012-2015,2017,2018,2020,2021,2023 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% http://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full]{l3doc}
-\usepackage{amsmath}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3fp-symbolic} module\\ Symbolic expressions^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3fp-symbolic} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=fp>
-% \end{macrocode}
-%
-% \subsection{Misc}
-%
-% \begin{variable}{\l_@@_symbolic_fp}
-% Scratch floating point.
-% \begin{macrocode}
-\fp_new:N \l_@@_symbolic_fp
-% \end{macrocode}
-% \end{variable}
-%
-% \subsection{Building blocks for expressions}
-%
-% Every symbolic expression has the form \cs{s_@@_symbolic}
-% \cs{@@_symbolic_chk:w} \meta{operation} |,| \Arg{operands} \meta{junk}
-% |;| where the \meta{operation} is a list of \texttt{N}-type tokens,
-% the \meta{operands} is an array of floating point objects, and the
-% \meta{junk} is to be discarded. If the outermost operator (last to be
-% evaluated) is unary, the expression has the form
-% \begin{quote}
-% \cs{s_@@_symbolic} \cs{@@_symbolic_chk:w} \\
-% \cs{@@_types_unary:NNw} |\__fp_|\meta{op}|_o:w| \meta{token} |,| \\
-% |{| \meta{operand} |}| \meta{junk} |;|
-% \end{quote}
-% where the \meta{op} is a unary operation (|set_sign|, |cos|,
-% \ldots{}), and the \meta{token} and \meta{operand} are used as
-% arguments for \cs{@@_\meta{op}_o:w} (or the type-specific analog of
-% this function). If the outermost operator is binary, the expression
-% has the form
-% \begin{quote}
-% \cs{s_@@_symbolic} \cs{@@_symbolic_chk:w} \\
-% \cs{@@_types_binary:Nww} |\__fp_|\meta{op}|_o:ww| |,| \\
-% |{| \meta{operand_1} \meta{operand_2} |}| \meta{junk} |;|
-% \end{quote}
-% where the \meta{op} is an operation (|+|, |&|, \ldots{}), and
-% |\__fp_|\meta{op}|_o:ww| receives the \meta{operands} as arguments.
-% If the expression consists of a single variable, it is stored as
-% \begin{quote}
-% \cs{s_@@_symbolic} \cs{@@_symbolic_chk:w} \\
-% \cs{@@_variable_o:w} \meta{identifier} |,| \\
-% |{| |}| \meta{junk} |;|
-% \end{quote}
-%
-% Symbolic expressions are stored in a prefix form. When encountering a
-% symbolic expression in a floating point computation, we attempt to
-% evaluate the operands as much as possible, and if that yields floating
-% point numbers rather than expressions, we apply the operator which
-% follows (if the function is known).
-%
-% For instance, the expression |a + b * sin(c)| is stored as
-% \begin{verbatim}
-% \s__fp_symbolic \__fp_symbolic_chk:w
-% \__fp_types_binary:Nww \__fp_+_o:ww ,
-% {
-% \s__fp_symbolic \__fp_symbolic_chk:w
-% \__fp_variable_o:w a , { } ;
-% \s__fp_symbolic \__fp_symbolic_chk:w
-% \__fp_types_binary:Nww \__fp_*_o:ww ,
-% {
-% \s__fp_symbolic \__fp_symbolic_chk:w
-% \__fp_variable_o:w b , { } ;
-% \s__fp_symbolic \__fp_symbolic_chk:w
-% \__fp_types_unary:NNw \__fp_sin_o:w \use_i:nn ,
-% {
-% \s__fp_symbolic \__fp_symbolic_chk:w
-% \__fp_variable_o:w c , { } ;
-% } ;
-% } ;
-% } ;
-% \end{verbatim}
-%
-% \begin{variable}{\s_@@_symbolic}
-% Scan mark indicating the start of a symbolic expression.
-% \begin{macrocode}
-\scan_new:N \s_@@_symbolic
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\@@_symbolic_chk:w}
-% Analog of \cs{@@_chk:w} for symbolic expressions.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_symbolic_chk:w #1,#2#3;
- {
- \msg_error:nne { fp } { misused-fp }
- {
- \@@_to_tl_dispatch:w
- \s_@@_symbolic \@@_symbolic_chk:w #1,{#2};
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Expanding after a symbolic expression}
-%
-% \begin{macro}[EXP]
-% {\@@_if_has_symbolic:nTF, \@@_if_has_symbolic_aux:w}
-% Tests if |#1| contains \cs{s_@@_symbolic} at top-level. This test
-% should be precise enough to determine if a given array contains a
-% symbolic expression or only consists of floating points. Used in
-% \cs{@@_exp_after_symbolic_f:nw}.
-% \begin{macrocode}
-\cs_new:Npn \@@_if_has_symbolic:nTF #1
- {
- \@@_if_has_symbolic_aux:w
- #1 \s_@@_mark \use_i:nn
- \s_@@_symbolic \s_@@_mark \use_ii:nn
- \s_@@_stop
- }
-\cs_new:Npn \@@_if_has_symbolic_aux:w
- #1 \s_@@_symbolic #2 \s_@@_mark #3#4 \s_@@_stop { #3 }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_exp_after_symbolic_f:nw}
-% \begin{macro}[EXP]
-% {\@@_exp_after_symbolic_aux:w, \@@_exp_after_symbolic_loop:N}
-% This function does two things: trigger an \texttt{f}-expansion of
-% the argument~|#1| after the following symbolic expression, and
-% evaluate all pieces of the expression which can be evaluated.
-% \begin{macrocode}
-\cs_new:Npn \@@_exp_after_symbolic_f:nw
- #1 \s_@@_symbolic \@@_symbolic_chk:w #2, #3#4;
- {
- \exp_after:wN \@@_exp_after_symbolic_aux:w
- \exp:w
- \@@_exp_after_symbolic_loop:N #2
- { , \exp:w \use_none:nn }
- \exp_after:wN \exp_end: \exp_after:wN
- {
- \exp:w \exp_end_continue_f:w
- \@@_exp_after_array_f:w #3 \s_@@_expr_stop
- \exp_after:wN
- }
- \exp_after:wN ;
- \exp:w \exp_end_continue_f:w #1
- }
-\cs_new:Npn \@@_exp_after_symbolic_aux:w #1, #2;
- {
- \@@_if_has_symbolic:nTF {#2}
- { \s_@@_symbolic \@@_symbolic_chk:w #1, {#2} ; }
- { #1 #2 @ \prg_do_nothing: }
- }
-\cs_new:Npn \@@_exp_after_symbolic_loop:N #1
- {
- \exp_after:wN \exp_end:
- \exp_after:wN #1
- \exp:w
- \@@_exp_after_symbolic_loop:N
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Applying infix operators to expressions}
-%
-% \begin{macro}[EXP]{\@@_symbolic_binary_o:Nww}
-% Used when applying infix operators to expressions.
-% \begin{macrocode}
-\cs_new:Npn \@@_symbolic_binary_o:Nww #1 #2; #3;
- {
- \@@_exp_after_symbolic_f:nw { \exp_after:wN \exp_stop_f: }
- \s_@@_symbolic \@@_symbolic_chk:w
- \@@_types_binary:Nww #1 , { #2; #3; } ;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{@makeother}{^} %^^A Hack!
-% \begin{@makeother}{|} %^^A Hack!
-% \begin{@makeother}{&} %^^A Hack!
-% \begin{macro}[EXP]
-% {
-% \@@_symbolic_+_symbolic_o:ww,
-% \@@_symbolic_+_o:ww,
-% \@@_+_symbolic_o:ww,
-% \@@_symbolic_-_symbolic_o:ww,
-% \@@_symbolic_-_o:ww,
-% \@@_-_symbolic_o:ww,
-% \@@_symbolic_*_symbolic_o:ww,
-% \@@_symbolic_*_o:ww,
-% \@@_*_symbolic_o:ww,
-% \@@_symbolic_/_symbolic_o:ww,
-% \@@_symbolic_/_o:ww,
-% \@@_/_symbolic_o:ww,
-% \@@_symbolic_^_symbolic_o:ww,
-% \@@_symbolic_^_o:ww,
-% \@@_^_symbolic_o:ww,
-% \@@_symbolic_|_symbolic_o:ww,
-% \@@_symbolic_|_o:ww,
-% \@@_|_symbolic_o:ww,
-% \@@_symbolic_&_symbolic_o:ww,
-% \@@_symbolic_&_o:ww,
-% \@@_&_symbolic_o:ww,
-% }
-% \begin{macrocode}
-\cs_set_protected:Npn \@@_tmp:w #1#2
- {
- \cs_new:cpn
- { @@_symbolic_#2_symbolic_o:ww }
- { \@@_symbolic_binary_o:Nww #1 }
- \cs_new_eq:cc
- { @@_symbolic_#2 _o:ww }
- { @@_symbolic_#2_symbolic_o:ww }
- \cs_new_eq:cc
- { @@ _#2_symbolic_o:ww }
- { @@_symbolic_#2_symbolic_o:ww }
- }
-\tl_map_inline:nn { + - * / ^ & | }
- { \exp_args:Nc \@@_tmp:w { @@_#1_o:ww } {#1} }
-% \end{macrocode}
-% \end{macro}
-% \end{@makeother}
-% \end{@makeother}
-% \end{@makeother}
-%
-% \subsection{Applying prefix functions to expressions}
-%
-% \begin{macro}[EXP]{\@@_symbolic_unary_o:NNw}
-% Used when applying infix operators to expressions.
-% \begin{macrocode}
-\cs_new:Npn \@@_symbolic_unary_o:NNw #1#2#3; @
- {
- \@@_exp_after_symbolic_f:nw { \exp_after:wN \exp_stop_f: }
- \s_@@_symbolic \@@_symbolic_chk:w
- \@@_types_unary:NNw #1#2 , { #3; } ;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {
-% \@@_symbolic_acos_o:w ,
-% \@@_symbolic_acsc_o:w ,
-% \@@_symbolic_asec_o:w ,
-% \@@_symbolic_asin_o:w ,
-% \@@_symbolic_cos_o:w ,
-% \@@_symbolic_cot_o:w ,
-% \@@_symbolic_csc_o:w ,
-% \@@_symbolic_exp_o:w ,
-% \@@_symbolic_ln_o:w ,
-% \@@_symbolic_not_o:w ,
-% \@@_symbolic_sec_o:w ,
-% \@@_symbolic_set_sign_o:w ,
-% \@@_symbolic_sin_o:w ,
-% \@@_symbolic_tan_o:w ,
-% }
-% \begin{macrocode}
-\tl_map_inline:nn
- {
- {acos} {acsc} {asec} {asin} {cos} {cot} {csc} {exp} {ln}
- {not} {sec} {set_sign} {sin} {sqrt} {tan}
- }
- {
- \cs_new:cpe { @@_symbolic_#1_o:w }
- {
- \exp_not:N \@@_symbolic_unary_o:NNw
- \exp_not:c { @@_#1_o:w }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Conversions}
-%
-% \begin{macro}[EXP]
-% {
-% \@@_symbolic_to_decimal:w,
-% \@@_symbolic_to_int:w,
-% \@@_symbolic_to_scientific:w
-% }
-% \begin{macro}[EXP]{\@@_symbolic_convert:wnnN}
-% Symbolic expressions cannot be converted to decimal, integer, or
-% scientific notation unless they can be reduced to
-% \begin{macrocode}
-\cs_set_protected:Npn \@@_tmp:w #1#2#3
- {
- \cs_new:cpn { @@_symbolic_to_#1:w }
- {
- \exp_after:wN \@@_symbolic_convert:wnnN
- \exp:w \exp_end_continue_f:w
- \@@_exp_after_symbolic_f:nw { { #2 } { fp_to_#1 } #3 }
- }
- }
-\@@_tmp:w { decimal } { 0 } \@@_to_decimal_dispatch:w
-\@@_tmp:w { int } { 0 } \@@_to_int_dispatch:w
-\@@_tmp:w { scientific } { nan } \@@_to_scientific_dispatch:w
-\cs_new:Npn \@@_symbolic_convert:wnnN #1#2; #3#4#5
- {
- \str_if_eq:nnTF {#1} { \s_@@_symbolic }
- { \@@_invalid_operation:nnw {#3} {#4} #1#2; }
- { #5 #1#2; }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {\@@_symbolic_cs_arg_to_fn:NN, \@@_symbolic_op_arg_to_fn:nN}
-% \begin{macrocode}
-\cs_new:Npn \@@_symbolic_cs_arg_to_fn:NN #1
- {
- \exp_args:Nf \@@_symbolic_op_arg_to_fn:nN
- { \@@_types_cs_to_op:N #1 }
- }
-\cs_new:Npn \@@_symbolic_op_arg_to_fn:nN #1#2
- {
- \str_case:nnF { #1 #2 }
- {
- { not ? } { ! }
- { set_sign 0 } { abs }
- { set_sign 2 } { - }
- }
- {
- \token_if_eq_meaning:NNTF #2 \use_ii:nn
- { #1 d } {#1}
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_symbolic_to_tl:w}
-% \begin{macro}[rEXP]
-% {
-% \@@_symbolic_unary_to_tl:NNw,
-% \@@_symbolic_binary_to_tl:Nww,
-% \@@_symbolic_function_to_tl:Nw
-% }
-% Converting a symbolic expression to a token list is possible.
-% \begin{macrocode}
-\cs_new:Npn \@@_symbolic_to_tl:w
- \s_@@_symbolic \@@_symbolic_chk:w #1#2, #3#4;
- {
- \str_case:nnTF {#1}
- {
- { \@@_types_unary:NNw } { \@@_symbolic_unary_to_tl:NNw }
- { \@@_types_binary:Nww } { \@@_symbolic_binary_to_tl:Nww }
- { \@@_function_o:w } { \@@_symbolic_function_to_tl:Nw }
- }
- { #2, #3 @ }
- { \tl_to_str:n {#2} }
- }
-\cs_new:Npn \@@_symbolic_unary_to_tl:NNw #1#2 , #3 @
- {
- \use:e
- {
- \@@_symbolic_cs_arg_to_fn:NN #1#2
- ( \@@_to_tl_dispatch:w #3 )
- }
- }
-\cs_new:Npn \@@_symbolic_binary_to_tl:Nww #1, #2; #3; @
- {
- \use:e
- {
- ( \@@_to_tl_dispatch:w #2; )
- \@@_types_cs_to_op:N #1
- ( \@@_to_tl_dispatch:w #3; )
- }
- }
-\cs_new:Npn \@@_symbolic_function_to_tl:Nw #1, #2@
- {
- \use:e
- {
- \@@_types_cs_to_op:N #1
- ( \@@_array_to_clist:n {#2} )
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Identifiers}
-%
-% Functions defined here are not necessarily tied to symbolic
-% expressions.
-%
-% \begin{macro}[TF]{\@@_id_if_invalid:n}
-% \begin{macro}[EXP]{\@@_id_if_invalid_aux:N}
-% If |#1| contains a space, it is not a valid identifier. Otherwise,
-% loop through letters in |#1|: if it is not a letter, break the loop
-% and return \texttt{true}. If the end of the loop is reached
-% without finding any non-letter, return \texttt{false}.
-% Note |#1| must be a str (i.e., resulted from \cs{tl_to_str:n}).
-% \begin{macrocode}
-\prg_new_protected_conditional:Npnn
- \@@_id_if_invalid:n #1 { T , F , TF }
- {
- \tl_if_empty:nTF {#1}
- { \prg_return_true: }
- {
- \tl_if_in:nnTF { #1 } { ~ }
- { \prg_return_true: }
- {
- \@@_id_if_invalid_aux:N #1
- { ? \prg_break:n \prg_return_false: }
- \prg_break_point:
- }
- }
- }
-\cs_new:Npn \@@_id_if_invalid_aux:N #1
- {
- \use_none:n #1
- \int_compare:nF { `a <= `#1 <= `z }
- {
- \int_compare:nF { `A <= `#1 <= `Z }
- { \prg_break:n \prg_return_true: }
- }
- \@@_id_if_invalid_aux:N
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Declaring variables and assigning values}
-%
-% \begin{macro}[EXP]{\@@_variable_o:w}
-% We do not use \cs{exp_last_unbraced:Nv} to extract the value of
-% |\l__fp_variable_#1_fp| because in \cs{fp_set_variable:nn} we define
-% this \texttt{fp} variable to be something which \texttt{f}-expands
-% to an actual floating point, rather than a genuine floating point.
-% \begin{macrocode}
-\cs_new:Npn \@@_variable_o:w #1 @ #2
- {
- \fp_if_exist:cTF { l_@@_variable_#1_fp }
- {
- \exp_last_unbraced:Nf \@@_exp_after_array_f:w
- { \use:c { l_@@_variable_#1_fp } } \s_@@_expr_stop
- \exp_after:wN \exp_stop_f: #2
- }
- {
- \token_if_eq_meaning:NNTF #2 \prg_do_nothing:
- {
- \s_@@_symbolic \@@_symbolic_chk:w
- \@@_variable_o:w #1 , { } ;
- }
- {
- \exp_after:wN \s_@@_symbolic
- \exp_after:wN \@@_symbolic_chk:w
- \exp_after:wN \@@_variable_o:w
- \exp:w
- \@@_exp_after_symbolic_loop:N #1
- { , \exp:w \use_none:nn }
- \exp_after:wN \exp_end:
- \exp_after:wN { \exp_after:wN } \exp_after:wN ;
- #2
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {\@@_variable_set_parsing:Nn, \@@_variable_set_parsing_aux:NNn}
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_variable_set_parsing:Nn #1#2
- {
- \cs_set:Npn \@@_tmp:w
- {
- \@@_exp_after_symbolic_f:nw { \@@_parse_infix:NN }
- \s_@@_symbolic \@@_symbolic_chk:w
- \@@_variable_o:w #2 , { } ;
- }
- \exp_args:NNc \@@_variable_set_parsing_aux:NNn #1
- { @@_parse_word_#2:N } {#2}
- }
-\cs_new_protected:Npn \@@_variable_set_parsing_aux:NNn #1#2#3
- {
- \cs_if_eq:NNF #2 \@@_tmp:w
- {
- \cs_if_exist:NTF #2
- {
- \msg_warning:nnnn
- { fp } { id-used-elsewhere } {#3} { variable }
- #1 #2 \@@_tmp:w
- }
- {
- \cs_new_eq:NN #2 \scan_stop: % to declare the function
- #1 #2 \@@_tmp:w
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \fp_clear_variable:n,
-% \@@_clear_variable:n, \@@_clear_variable_aux:n
-% }
-% We need local undefining, so have to do it low-level.
-% \cs{@@_clear_variable_aux:n} is needed by \cs{@@_set_function:Nnnn}
-% to skip \cs{@@_id_if_invalid:nTF}.
-% \begin{macrocode}
-\cs_new_protected:Npn \fp_clear_variable:n #1
- {
- \exp_args:No \@@_clear_variable:n { \tl_to_str:n {#1} }
- }
-\cs_new_protected:Npn \@@_clear_variable:n #1
- {
- \@@_id_if_invalid:nTF {#1}
- { \msg_error:nnn { fp } { id-invalid } {#1} }
- { \@@_clear_variable_aux:n {#1} }
- }
-\cs_new_protected:Npn \@@_clear_variable_aux:n #1
- {
- \cs_set_eq:cN { l_@@_variable_#1_fp } \tex_undefined:D
- \@@_variable_set_parsing:Nn \cs_set_eq:NN {#1}
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\fp_new_variable:n}
-% \begin{macro}{\@@_new_variable:n}
-% Check that |#1| is a valid identifier. If the identifier is already
-% in use, complain. Then set |\__fp_parse_word_#1:N| to use
-% |\__fp_variable_o:w|.
-% \begin{macrocode}
-\cs_new_protected:Npn \fp_new_variable:n #1
- {
- \exp_args:No \@@_new_variable:n { \tl_to_str:n {#1} }
- }
-\cs_new_protected:Npn \@@_new_variable:n #1
- {
- \@@_id_if_invalid:nTF {#1}
- { \msg_error:nnn { fp } { id-invalid } {#1} }
- {
- \cs_if_exist:cT { @@_parse_word_#1:N }
- {
- \msg_error:nnn
- { fp } { id-already-defined } {#1}
- \cs_undefine:c { @@_parse_word_#1:N }
- \cs_set_eq:cN { l_@@_variable_#1_fp } \tex_undefined:D
- }
- \@@_variable_set_parsing:Nn \cs_gset_eq:NN {#1}
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{variable}{\l_@@_symbolic_flag}
-% \begin{macro}{\fp_set_variable:nn, \@@_set_variable:nn}
-% Refuse invalid identifiers. If the variable does not exist yet,
-% define it just as in \cs{fp_new_variable:n} (but without unnecessary
-% checks). Then evaluate~|#2|. If the result contains the
-% identifier~|#1|, we would later get a loop in cases such as
-% \begin{quote}
-% \cs{fp_set_variable:nn} |{A}| |{A}|\\
-% \cs{fp_show:n} |{A}|
-% \end{quote}
-% To detect this, define |\l__fp_variable_#1_fp| to raise an
-% internal flag and evaluate to \texttt{nan}. Then re-evaluate
-% \cs{l_@@_symbolic_fp}, and store the result in~|#1|. If the flag is
-% raised, |#1|~was present in \cs{l_@@_symbolic_fp}. In all cases,
-% the |#1|-free result ends up in |\l__fp_variable_#1_fp|.
-% \begin{macrocode}
-\flag_new:N \l_@@_symbolic_flag
-\cs_new_protected:Npn \fp_set_variable:nn #1
- {
- \exp_args:No \@@_set_variable:nn { \tl_to_str:n {#1} }
- }
-\cs_new_protected:Npn \@@_set_variable:nn #1#2
- {
- \@@_id_if_invalid:nTF {#1}
- { \msg_error:nnn { fp } { id-invalid } {#1} }
- {
- \@@_variable_set_parsing:Nn \cs_set_eq:NN {#1}
- \fp_set:Nn \l_@@_symbolic_fp {#2}
- \cs_set_nopar:cpn { l_@@_variable_#1_fp }
- { \flag_ensure_raised:N \l_@@_symbolic_flag \c_nan_fp }
- \flag_clear:N \l_@@_symbolic_flag
- \fp_set:cn { l_@@_variable_#1_fp } { \l_@@_symbolic_fp }
- \flag_if_raised:NT \l_@@_symbolic_flag
- {
- \msg_error:nneee { fp } { id-loop }
- { #1 }
- { \tl_to_str:n {#2} }
- { \fp_to_tl:N \l_@@_symbolic_fp }
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{variable}
-%
-% \subsection{Messages}
-%
-% \begin{macrocode}
-\msg_new:nnnn { fp } { id-invalid }
- { Floating~point~identifier~'#1'~invalid. }
- {
- LaTeX~has~been~asked~to~create~a~new~floating~point~identifier~'#1'~
- but~this~may~only~contain~ASCII~letters.
- }
-\msg_new:nnnn { fp } { id-already-defined }
- { Floating~point~identifier~'#1'~already~defined. }
- {
- LaTeX~has~been~asked~to~create~a~new~floating~point~identifier~'#1'~
- but~this~name~has~already~been~used~elsewhere.
- }
-\msg_new:nnnn { fp } { id-used-elsewhere }
- { Floating~point~identifier~'#1'~already~used~for~something~else. }
- {
- LaTeX~has~been~asked~to~create~a~new~floating~point~identifier~'#1'~
- but~this~name~is~used,~and~is~not~a~user-defined~#2.
- }
-\msg_new:nnnn { fp } { id-loop }
- { Variable~'#1'~used~in~the~definition~of~'#1'. }
- {
- LaTeX~has~been~asked~to~set~the~floating~point~identifier~'#1'~
- to~the~expression~'#2'.~Evaluating~this~expression~yields~'#3',~
- which~contains~'#1'~itself.
- }
-% \end{macrocode}
-%
-% \subsection{Road-map}
-%
-% The following functions are not implemented: |min|, |max|, |?:|,
-% comparisons, |round|, |atan|, |acot|.
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3fp-traps.dtx b/macros/latex/contrib/l3kernel/l3fp-traps.dtx
deleted file mode 100644
index e1a3dd89a0..0000000000
--- a/macros/latex/contrib/l3kernel/l3fp-traps.dtx
+++ /dev/null
@@ -1,402 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3fp-traps.dtx
-%
-% Copyright (C) 2011-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3fp-traps} module\\
-% Trapping floating-point exceptions^^A
-% }
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-% \date{Released 2024-03-14}
-% \maketitle
-%
-% \begin{documentation}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3fp-traps} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=fp>
-% \end{macrocode}
-%
-% Exceptions should be accessed by an \texttt{n}-type argument, among
-% \begin{itemize}
-% \item \texttt{invalid_operation}
-% \item \texttt{division_by_zero}
-% \item \texttt{overflow}
-% \item \texttt{underflow}
-% \item \texttt{inexact} (actually never used).
-% \end{itemize}
-%
-% \subsection{Flags}
-%
-% \begin{variable}[module = fp]
-% {
-% \l_fp_invalid_operation_flag,
-% \l_fp_division_by_zero_flag,
-% \l_fp_overflow_flag,
-% \l_fp_underflow_flag
-% }
-% Flags to denote exceptions.
-% \begin{macrocode}
-\flag_new:N \l_fp_invalid_operation_flag
-\flag_new:N \l_fp_division_by_zero_flag
-\flag_new:N \l_fp_overflow_flag
-\flag_new:N \l_fp_underflow_flag
-% \end{macrocode}
-% \end{variable}
-%
-% \subsection{Traps}
-%
-% Exceptions can be trapped to obtain custom behaviour. When an invalid
-% operation or a division by zero is trapped, the trap receives as
-% arguments the result as an |N|-type floating point number, the
-% function name (multiple letters for prefix operations, or a single
-% symbol for infix operations), and the operand(s). When an overflow or
-% underflow is trapped, the trap receives the resulting overly large or
-% small floating point number if it is not too big, otherwise it
-% receives $+\infty$. Currently, the inexact exception is entirely
-% ignored.
-%
-% The behaviour when an exception occurs is controlled by the
-% definitions of the functions
-% \begin{itemize}
-% \item \cs{@@_invalid_operation:nnw},
-% \item \cs{@@_invalid_operation_o:Nww},
-% \item \cs{@@_invalid_operation_tl_o:ff},
-% \item \cs{@@_division_by_zero_o:Nnw},
-% \item \cs{@@_division_by_zero_o:NNww},
-% \item \cs{@@_overflow:w},
-% \item \cs{@@_underflow:w}.
-% \end{itemize}
-% Rather than changing them directly, we provide a user interface as
-% \cs{fp_trap:nn} \Arg{exception} \Arg{way of trapping}, where the
-% \meta{way of trapping} is one of \texttt{error}, \texttt{flag}, or
-% \texttt{none}.
-%
-% We also provide \cs{@@_invalid_operation_o:nw}, defined in terms of
-% \cs{@@_invalid_operation:nnw}.
-%
-% \begin{macro}{\fp_trap:nn}
-% \begin{macrocode}
-\cs_new_protected:Npn \fp_trap:nn #1#2
- {
- \cs_if_exist_use:cF { @@_trap_#1_set_#2: }
- {
- \clist_if_in:nnTF
- { invalid_operation , division_by_zero , overflow , underflow }
- {#1}
- {
- \msg_error:nnee { fp }
- { unknown-fpu-trap-type } {#1} {#2}
- }
- {
- \msg_error:nne
- { fp } { unknown-fpu-exception } {#1}
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \@@_trap_invalid_operation_set_error: ,
-% \@@_trap_invalid_operation_set_flag: ,
-% \@@_trap_invalid_operation_set_none: ,
-% \@@_trap_invalid_operation_set:N ,
-% }
-% We provide three types of trapping for invalid operations: either
-% produce an error and raise the relevant flag; or only raise the
-% flag; or don't even raise the flag. In most cases, the function
-% produces as a result its first argument, possibly with
-% post-expansion.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_trap_invalid_operation_set_error:
- { \@@_trap_invalid_operation_set:N \prg_do_nothing: }
-\cs_new_protected:Npn \@@_trap_invalid_operation_set_flag:
- { \@@_trap_invalid_operation_set:N \use_none:nnnnn }
-\cs_new_protected:Npn \@@_trap_invalid_operation_set_none:
- { \@@_trap_invalid_operation_set:N \use_none:nnnnnnn }
-\cs_new_protected:Npn \@@_trap_invalid_operation_set:N #1
- {
- \exp_args:Nno \use:n
- { \cs_set:Npn \@@_invalid_operation:nnw ##1##2##3; }
- {
- #1
- \@@_error:nnfn { invalid } {##2} { \fp_to_tl:n { ##3; } } { }
- \flag_ensure_raised:N \l_fp_invalid_operation_flag
- ##1
- }
- \exp_args:Nno \use:n
- { \cs_set:Npn \@@_invalid_operation_o:Nww ##1##2; ##3; }
- {
- #1
- \@@_error:nffn { invalid-ii }
- { \fp_to_tl:n { ##2; } } { \fp_to_tl:n { ##3; } } {##1}
- \flag_ensure_raised:N \l_fp_invalid_operation_flag
- \exp_after:wN \c_nan_fp
- }
- \exp_args:Nno \use:n
- { \cs_set:Npn \@@_invalid_operation_tl_o:ff ##1##2 }
- {
- #1
- \@@_error:nffn { invalid } {##1} {##2} { }
- \flag_ensure_raised:N \l_fp_invalid_operation_flag
- \exp_after:wN \c_nan_fp
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \@@_trap_division_by_zero_set_error: ,
-% \@@_trap_division_by_zero_set_flag: ,
-% \@@_trap_division_by_zero_set_none: ,
-% \@@_trap_division_by_zero_set:N ,
-% }
-% We provide three types of trapping for invalid operations and
-% division by zero: either produce an error and raise the relevant
-% flag; or only raise the flag; or don't even raise the flag. In all
-% cases, the function must produce a result, namely its first
-% argument, $\pm\infty$ or \nan{}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_trap_division_by_zero_set_error:
- { \@@_trap_division_by_zero_set:N \prg_do_nothing: }
-\cs_new_protected:Npn \@@_trap_division_by_zero_set_flag:
- { \@@_trap_division_by_zero_set:N \use_none:nnnnn }
-\cs_new_protected:Npn \@@_trap_division_by_zero_set_none:
- { \@@_trap_division_by_zero_set:N \use_none:nnnnnnn }
-\cs_new_protected:Npn \@@_trap_division_by_zero_set:N #1
- {
- \exp_args:Nno \use:n
- { \cs_set:Npn \@@_division_by_zero_o:Nnw ##1##2##3; }
- {
- #1
- \@@_error:nnfn { zero-div } {##2} { \fp_to_tl:n { ##3; } } { }
- \flag_ensure_raised:N \l_fp_division_by_zero_flag
- \exp_after:wN ##1
- }
- \exp_args:Nno \use:n
- { \cs_set:Npn \@@_division_by_zero_o:NNww ##1##2##3; ##4; }
- {
- #1
- \@@_error:nffn { zero-div-ii }
- { \fp_to_tl:n { ##3; } } { \fp_to_tl:n { ##4; } } {##2}
- \flag_ensure_raised:N \l_fp_division_by_zero_flag
- \exp_after:wN ##1
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \@@_trap_overflow_set_error: ,
-% \@@_trap_overflow_set_flag: ,
-% \@@_trap_overflow_set_none: ,
-% \@@_trap_overflow_set:N ,
-% }
-% \begin{macro}
-% {
-% \@@_trap_underflow_set_error: ,
-% \@@_trap_underflow_set_flag: ,
-% \@@_trap_underflow_set_none: ,
-% \@@_trap_underflow_set:N ,
-% }
-% \begin{macro}{\@@_trap_overflow_set:NnNn}
-% Just as for invalid operations and division by zero, the three
-% different behaviours are obtained by feeding \cs{prg_do_nothing:},
-% \cs{use_none:nnnnn} or \cs{use_none:nnnnnnn} to an auxiliary, with a
-% further auxiliary common to overflow and underflow functions. In
-% most cases, the argument of the \cs{@@_overflow:w} and
-% \cs{@@_underflow:w} functions will be an (almost) normal number
-% (with an exponent outside the allowed range), and the error message
-% thus displays that number together with the result to which it
-% overflowed or underflowed. For extreme cases such as \texttt{10 **
-% 1e9999}, the exponent would be too large for \TeX{}, and
-% \cs{@@_overflow:w} receives $\pm \infty$ (\cs{@@_underflow:w} would
-% receive $\pm 0$); then we cannot do better than simply say an
-% overflow or underflow occurred.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_trap_overflow_set_error:
- { \@@_trap_overflow_set:N \prg_do_nothing: }
-\cs_new_protected:Npn \@@_trap_overflow_set_flag:
- { \@@_trap_overflow_set:N \use_none:nnnnn }
-\cs_new_protected:Npn \@@_trap_overflow_set_none:
- { \@@_trap_overflow_set:N \use_none:nnnnnnn }
-\cs_new_protected:Npn \@@_trap_overflow_set:N #1
- { \@@_trap_overflow_set:NnNn #1 { overflow } \@@_inf_fp:N { inf } }
-\cs_new_protected:Npn \@@_trap_underflow_set_error:
- { \@@_trap_underflow_set:N \prg_do_nothing: }
-\cs_new_protected:Npn \@@_trap_underflow_set_flag:
- { \@@_trap_underflow_set:N \use_none:nnnnn }
-\cs_new_protected:Npn \@@_trap_underflow_set_none:
- { \@@_trap_underflow_set:N \use_none:nnnnnnn }
-\cs_new_protected:Npn \@@_trap_underflow_set:N #1
- { \@@_trap_overflow_set:NnNn #1 { underflow } \@@_zero_fp:N { 0 } }
-\cs_new_protected:Npn \@@_trap_overflow_set:NnNn #1#2#3#4
- {
- \exp_args:Nno \use:n
- { \cs_set:cpn { @@_ #2 :w } \s_@@ \@@_chk:w ##1##2##3; }
- {
- #1
- \@@_error:nffn
- { flow \if_meaning:w 1 ##1 -to \fi: }
- { \fp_to_tl:n { \s_@@ \@@_chk:w ##1##2##3; } }
- { \token_if_eq_meaning:NNF 0 ##2 { - } #4 }
- {#2}
- \flag_ensure_raised:c { l_fp_#2_flag }
- #3 ##2
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {
-% \@@_invalid_operation:nnw, \@@_invalid_operation_o:Nww,
-% \@@_invalid_operation_tl_o:ff,
-% \@@_division_by_zero_o:Nnw, \@@_division_by_zero_o:NNww,
-% \@@_overflow:w , \@@_underflow:w
-% }
-% Initialize the control sequences (to log properly their
-% existence). Then set invalid operations to trigger an error, and
-% division by zero, overflow, and underflow to act silently on their
-% flag.
-% \begin{macrocode}
-\cs_new:Npn \@@_invalid_operation:nnw #1#2#3; { }
-\cs_new:Npn \@@_invalid_operation_o:Nww #1#2; #3; { }
-\cs_new:Npn \@@_invalid_operation_tl_o:ff #1 #2 { }
-\cs_new:Npn \@@_division_by_zero_o:Nnw #1#2#3; { }
-\cs_new:Npn \@@_division_by_zero_o:NNww #1#2#3; #4; { }
-\cs_new:Npn \@@_overflow:w { }
-\cs_new:Npn \@@_underflow:w { }
-\fp_trap:nn { invalid_operation } { error }
-\fp_trap:nn { division_by_zero } { flag }
-\fp_trap:nn { overflow } { flag }
-\fp_trap:nn { underflow } { flag }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {\@@_invalid_operation_o:nw, \@@_invalid_operation_o:fw}
-% Convenient short-hands for returning \cs{c_nan_fp} for a unary or
-% binary operation, and expanding after.
-% \begin{macrocode}
-\cs_new:Npn \@@_invalid_operation_o:nw
- { \@@_invalid_operation:nnw { \exp_after:wN \c_nan_fp } }
-\cs_generate_variant:Nn \@@_invalid_operation_o:nw { f }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Errors}
-%
-% \begin{macro}[EXP]{\@@_error:nnnn, \@@_error:nnfn, \@@_error:nffn, \@@_error:nfff}
-% \begin{macrocode}
-\cs_new:Npn \@@_error:nnnn
- { \msg_expandable_error:nnnnn { fp } }
-\cs_generate_variant:Nn \@@_error:nnnn { nnf, nff , nfff }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Messages}
-%
-% Some messages.
-% \begin{macrocode}
-\msg_new:nnnn { fp } { unknown-fpu-exception }
- {
- The~FPU~exception~'#1'~is~not~known:~
- that~trap~will~never~be~triggered.
- }
- {
- The~only~exceptions~to~which~traps~can~be~attached~are \\
- \iow_indent:n
- {
- * ~ invalid_operation \\
- * ~ division_by_zero \\
- * ~ overflow \\
- * ~ underflow
- }
- }
-\msg_new:nnnn { fp } { unknown-fpu-trap-type }
- { The~FPU~trap~type~'#2'~is~not~known. }
- {
- The~trap~type~must~be~one~of \\
- \iow_indent:n
- {
- * ~ error \\
- * ~ flag \\
- * ~ none
- }
- }
-\msg_new:nnn { fp } { flow }
- { An ~ #3 ~ occurred. }
-\msg_new:nnn { fp } { flow-to }
- { #1 ~ #3 ed ~ to ~ #2 . }
-\msg_new:nnn { fp } { zero-div }
- { Division~by~zero~in~ #1 (#2) }
-\msg_new:nnn { fp } { zero-div-ii }
- { Division~by~zero~in~ (#1) #3 (#2) }
-\msg_new:nnn { fp } { invalid }
- { Invalid~operation~ #1 (#2) }
-\msg_new:nnn { fp } { invalid-ii }
- { Invalid~operation~ (#1) #3 (#2) }
-\msg_new:nnn { fp } { unknown-type }
- { Unknown~type~for~'#1' }
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintChanges
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3fp-trig.dtx b/macros/latex/contrib/l3kernel/l3fp-trig.dtx
deleted file mode 100644
index 21cefc166c..0000000000
--- a/macros/latex/contrib/l3kernel/l3fp-trig.dtx
+++ /dev/null
@@ -1,1700 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3fp-trig.dtx
-%
-% Copyright (C) 2011-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3fp-trig} module\\
-% Floating point trigonometric functions^^A
-% }
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3fp-trig} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=fp>
-% \end{macrocode}
-%
-% \begin{macro}[EXP]
-% {
-% \@@_parse_word_acos:N ,
-% \@@_parse_word_acosd:N ,
-% \@@_parse_word_acsc:N ,
-% \@@_parse_word_acscd:N ,
-% \@@_parse_word_asec:N ,
-% \@@_parse_word_asecd:N ,
-% \@@_parse_word_asin:N ,
-% \@@_parse_word_asind:N ,
-% \@@_parse_word_cos:N ,
-% \@@_parse_word_cosd:N ,
-% \@@_parse_word_cot:N ,
-% \@@_parse_word_cotd:N ,
-% \@@_parse_word_csc:N ,
-% \@@_parse_word_cscd:N ,
-% \@@_parse_word_sec:N ,
-% \@@_parse_word_secd:N ,
-% \@@_parse_word_sin:N ,
-% \@@_parse_word_sind:N ,
-% \@@_parse_word_tan:N ,
-% \@@_parse_word_tand:N ,
-% }
-% Unary functions.
-% \begin{macrocode}
-\tl_map_inline:nn
- {
- {acos} {acsc} {asec} {asin}
- {cos} {cot} {csc} {sec} {sin} {tan}
- }
- {
- \cs_new:cpe { @@_parse_word_#1:N }
- {
- \exp_not:N \@@_parse_unary_function:NNN
- \exp_not:c { @@_#1_o:w }
- \exp_not:N \use_i:nn
- }
- \cs_new:cpe { @@_parse_word_#1d:N }
- {
- \exp_not:N \@@_parse_unary_function:NNN
- \exp_not:c { @@_#1_o:w }
- \exp_not:N \use_ii:nn
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {
-% \@@_parse_word_acot:N , \@@_parse_word_acotd:N,
-% \@@_parse_word_atan:N , \@@_parse_word_atand:N,
-% }
-% Those functions may receive a variable number of arguments.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_word_acot:N
- { \@@_parse_function:NNN \@@_acot_o:Nw \use_i:nn }
-\cs_new:Npn \@@_parse_word_acotd:N
- { \@@_parse_function:NNN \@@_acot_o:Nw \use_ii:nn }
-\cs_new:Npn \@@_parse_word_atan:N
- { \@@_parse_function:NNN \@@_atan_o:Nw \use_i:nn }
-\cs_new:Npn \@@_parse_word_atand:N
- { \@@_parse_function:NNN \@@_atan_o:Nw \use_ii:nn }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Direct trigonometric functions}
-%
-% The approach for all trigonometric functions (sine, cosine, tangent,
-% cotangent, cosecant, and secant), with arguments given in radians or
-% in degrees, is the same.
-% \begin{itemize}
-% \item Filter out special cases ($\pm 0$, $\pm\inf$ and \nan{}).
-% \item Keep the sign for later, and work with the absolute value
-% $\lvert x\rvert$ of the argument.
-% \item Small numbers ($\lvert x\rvert<1$ in radians, $\lvert
-% x\rvert<10$ in degrees) are converted to fixed point numbers (and
-% to radians if $\lvert x\rvert$ is in degrees).
-% \item For larger numbers, we need argument reduction. Subtract a
-% multiple of $\pi/2$ (in degrees,~$90$) to bring the number to the
-% range to $[0, \pi/2)$ (in degrees, $[0,90)$).
-% \item Reduce further to $[0, \pi/4]$ (in degrees, $[0,45]$) using
-% $\sin x = \cos (\pi/2-x)$, and when working in degrees, convert to
-% radians.
-% \item Use the appropriate power series depending on the octant
-% $\lfloor\frac{|x|}{\pi/4}\rfloor \mod 8$ (in degrees, the same
-% formula with $\pi/4\to 45$), the sign, and the function to
-% compute.
-% \end{itemize}
-%
-% \subsubsection{Filtering special cases}
-%
-% \begin{macro}[EXP]{\@@_sin_o:w}
-% This function, and its analogs for \texttt{cos}, \texttt{csc},
-% \texttt{sec}, \texttt{tan}, and \texttt{cot} instead of
-% \texttt{sin}, are followed either by \cs{use_i:nn} and a float in
-% radians or by \cs{use_ii:nn} and a float in degrees. The sine of
-% $\pm 0$ or \nan{} is the same float. The sine of $\pm\infty$ raises
-% an invalid operation exception with the appropriate function name.
-% Otherwise, call the \texttt{trig} function to perform argument
-% reduction and if necessary convert the reduced argument to radians.
-% Then, \cs{@@_sin_series_o:NNwwww} is called to compute the
-% Taylor series: this function receives a sign~|#3|, an initial octant
-% of~$0$, and the function \cs{@@_ep_to_float_o:wwN} which converts the
-% result of the series to a floating point directly rather than taking
-% its inverse, since $\sin(x) = \#3 \sin\lvert x\rvert$.
-% \begin{macrocode}
-\cs_new:Npn \@@_sin_o:w #1 \s_@@ \@@_chk:w #2#3#4; @
- {
- \if_case:w #2 \exp_stop_f:
- \@@_case_return_same_o:w
- \or: \@@_case_use:nw
- {
- \@@_trig:NNNNNwn #1 \@@_sin_series_o:NNwwww
- \@@_ep_to_float_o:wwN #3 0
- }
- \or: \@@_case_use:nw
- { \@@_invalid_operation_o:fw { #1 { sin } { sind } } }
- \else: \@@_case_return_same_o:w
- \fi:
- \s_@@ \@@_chk:w #2 #3 #4;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_cos_o:w}
-% The cosine of $\pm 0$ is $1$. The cosine of $\pm\infty$ raises an
-% invalid operation exception. The cosine of \nan{} is itself.
-% Otherwise, the \texttt{trig} function reduces the argument to at
-% most half a right-angle and converts if necessary to radians. We
-% then call the same series as for sine, but using a positive
-% sign~|0| regardless of the sign of~$x$, and with an initial octant
-% of~$2$, because $\cos(x) = + \sin(\pi/2 + \lvert x\rvert)$.
-% \begin{macrocode}
-\cs_new:Npn \@@_cos_o:w #1 \s_@@ \@@_chk:w #2#3; @
- {
- \if_case:w #2 \exp_stop_f:
- \@@_case_return_o:Nw \c_one_fp
- \or: \@@_case_use:nw
- {
- \@@_trig:NNNNNwn #1 \@@_sin_series_o:NNwwww
- \@@_ep_to_float_o:wwN 0 2
- }
- \or: \@@_case_use:nw
- { \@@_invalid_operation_o:fw { #1 { cos } { cosd } } }
- \else: \@@_case_return_same_o:w
- \fi:
- \s_@@ \@@_chk:w #2 #3;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_csc_o:w}
-% The cosecant of $\pm 0$ is $\pm \infty$ with the same sign, with a
-% division by zero exception (see \cs{@@_cot_zero_o:Nfw} defined
-% below), which requires the function name. The cosecant of
-% $\pm\infty$ raises an invalid operation exception. The cosecant of
-% \nan{} is itself. Otherwise, the \texttt{trig} function performs
-% the argument reduction, and converts if necessary to radians before
-% calling the same series as for sine, using the sign~|#3|, a starting
-% octant of~$0$, and inverting during the conversion from the fixed
-% point sine to the floating point result, because $\csc(x) = \#3
-% \big( \sin\lvert x\rvert\big)^{-1}$.
-% \begin{macrocode}
-\cs_new:Npn \@@_csc_o:w #1 \s_@@ \@@_chk:w #2#3#4; @
- {
- \if_case:w #2 \exp_stop_f:
- \@@_cot_zero_o:Nfw #3 { #1 { csc } { cscd } }
- \or: \@@_case_use:nw
- {
- \@@_trig:NNNNNwn #1 \@@_sin_series_o:NNwwww
- \@@_ep_inv_to_float_o:wwN #3 0
- }
- \or: \@@_case_use:nw
- { \@@_invalid_operation_o:fw { #1 { csc } { cscd } } }
- \else: \@@_case_return_same_o:w
- \fi:
- \s_@@ \@@_chk:w #2 #3 #4;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_sec_o:w}
-% The secant of $\pm 0$ is $1$. The secant of $\pm \infty$ raises an
-% invalid operation exception. The secant of \nan{} is itself.
-% Otherwise, the \texttt{trig} function reduces the argument and turns
-% it to radians before calling the same series as for sine, using a
-% positive sign~$0$, a starting octant of~$2$, and inverting upon
-% conversion, because $\sec(x) = + 1 / \sin(\pi/2 + \lvert x\rvert)$.
-% \begin{macrocode}
-\cs_new:Npn \@@_sec_o:w #1 \s_@@ \@@_chk:w #2#3; @
- {
- \if_case:w #2 \exp_stop_f:
- \@@_case_return_o:Nw \c_one_fp
- \or: \@@_case_use:nw
- {
- \@@_trig:NNNNNwn #1 \@@_sin_series_o:NNwwww
- \@@_ep_inv_to_float_o:wwN 0 2
- }
- \or: \@@_case_use:nw
- { \@@_invalid_operation_o:fw { #1 { sec } { secd } } }
- \else: \@@_case_return_same_o:w
- \fi:
- \s_@@ \@@_chk:w #2 #3;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_tan_o:w}
-% The tangent of $\pm 0$ or \nan{} is the same floating point number.
-% The tangent of $\pm\infty$ raises an invalid operation exception.
-% Once more, the \texttt{trig} function does the argument reduction
-% step and conversion to radians before calling
-% \cs{@@_tan_series_o:NNwwww}, with a sign~|#3| and an initial octant
-% of~$1$ (this shift is somewhat arbitrary). See \cs{@@_cot_o:w} for
-% an explanation of the $0$~argument.
-% \begin{macrocode}
-\cs_new:Npn \@@_tan_o:w #1 \s_@@ \@@_chk:w #2#3#4; @
- {
- \if_case:w #2 \exp_stop_f:
- \@@_case_return_same_o:w
- \or: \@@_case_use:nw
- {
- \@@_trig:NNNNNwn #1
- \@@_tan_series_o:NNwwww 0 #3 1
- }
- \or: \@@_case_use:nw
- { \@@_invalid_operation_o:fw { #1 { tan } { tand } } }
- \else: \@@_case_return_same_o:w
- \fi:
- \s_@@ \@@_chk:w #2 #3 #4;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_cot_o:w}
-% \begin{macro}[EXP]{\@@_cot_zero_o:Nfw}
-% The cotangent of $\pm 0$ is $\pm \infty$ with the same sign, with a
-% division by zero exception (see \cs{@@_cot_zero_o:Nfw}. The
-% cotangent of $\pm\infty$ raises an invalid operation exception. The
-% cotangent of \nan{} is itself. We use $\cot x = - \tan (\pi/2 +
-% x)$, and the initial octant for the tangent was chosen to be $1$, so
-% the octant here starts at $3$. The change in sign is obtained by
-% feeding \cs{@@_tan_series_o:NNwwww} two signs rather than just the
-% sign of the argument: the first of those indicates whether we
-% compute tangent or cotangent. Those signs are eventually combined.
-% \begin{macrocode}
-\cs_new:Npn \@@_cot_o:w #1 \s_@@ \@@_chk:w #2#3#4; @
- {
- \if_case:w #2 \exp_stop_f:
- \@@_cot_zero_o:Nfw #3 { #1 { cot } { cotd } }
- \or: \@@_case_use:nw
- {
- \@@_trig:NNNNNwn #1
- \@@_tan_series_o:NNwwww 2 #3 3
- }
- \or: \@@_case_use:nw
- { \@@_invalid_operation_o:fw { #1 { cot } { cotd } } }
- \else: \@@_case_return_same_o:w
- \fi:
- \s_@@ \@@_chk:w #2 #3 #4;
- }
-\cs_new:Npn \@@_cot_zero_o:Nfw #1#2#3 \fi:
- {
- \fi:
- \token_if_eq_meaning:NNTF 0 #1
- { \exp_args:NNf \@@_division_by_zero_o:Nnw \c_inf_fp }
- { \exp_args:NNf \@@_division_by_zero_o:Nnw \c_minus_inf_fp }
- {#2}
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsubsection{Distinguishing small and large arguments}
-%
-% \begin{macro}[EXP]{\@@_trig:NNNNNwn}
-% The first argument is \cs{use_i:nn} if the operand is in radians and
-% \cs{use_ii:nn} if it is in degrees. Arguments |#2| to~|#5| control
-% what trigonometric function we compute, and |#6| to~|#8| are pieces
-% of a normal floating point number. Call the \texttt{_series}
-% function~|#2|, with arguments |#3|, either a conversion function
-% (\cs{@@_ep_to_float_o:wN} or \cs{@@_ep_inv_to_float_o:wN}) or a sign $0$
-% or~$2$ when computing tangent or cotangent; |#4|, a sign $0$ or~$2$;
-% the octant, computed in an integer expression starting with~|#5| and
-% stopped by a period; and a fixed point number obtained from the
-% floating point number by argument reduction (if necessary) and
-% conversion to radians (if necessary). Any argument reduction
-% adjusts the octant accordingly by leaving a (positive) shift into
-% its integer expression. Let us explain the integer comparison. Two
-% of the four \cs{exp_after:wN} are expanded, the expansion hits the
-% test, which is true if the float is at least~$1$ when working in
-% radians, and at least $10$ when working in degrees. Then one of the
-% remaining \cs{exp_after:wN} hits |#1|, which picks the \texttt{trig}
-% or \texttt{trigd} function in whichever branch of the conditional
-% was taken. The final \cs{exp_after:wN} closes the conditional. At
-% the end of the day, a number is \texttt{large} if it is $\geq 1$ in
-% radians or $\geq 10$ in degrees, and \texttt{small} otherwise. All
-% four \texttt{trig}/\texttt{trigd} auxiliaries receive the operand as
-% an extended-precision number.
-% \begin{macrocode}
-\cs_new:Npn \@@_trig:NNNNNwn #1#2#3#4#5 \s_@@ \@@_chk:w 1#6#7#8;
- {
- \exp_after:wN #2
- \exp_after:wN #3
- \exp_after:wN #4
- \int_value:w \@@_int_eval:w #5
- \exp_after:wN \exp_after:wN \exp_after:wN \exp_after:wN
- \if_int_compare:w #7 > #1 0 1 \exp_stop_f:
- #1 \@@_trig_large:ww \@@_trigd_large:ww
- \else:
- #1 \@@_trig_small:ww \@@_trigd_small:ww
- \fi:
- #7,#8{0000}{0000};
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Small arguments}
-%
-% \begin{macro}[EXP]{\@@_trig_small:ww}
-% This receives a small extended-precision number in radians and
-% converts it to a fixed point number. Some trailing digits may be
-% lost in the conversion, so we keep the original floating point
-% number around: when computing sine or tangent (or their inverses),
-% the last step is to multiply by the floating point number (as
-% an extended-precision number) rather than the fixed point number.
-% The period serves to end the integer expression for the octant.
-% \begin{macrocode}
-\cs_new:Npn \@@_trig_small:ww #1,#2;
- { \@@_ep_to_fixed:wwn #1,#2; . #1,#2; }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_trigd_small:ww}
-% Convert the extended-precision number to radians, then call
-% \cs{@@_trig_small:ww} to massage it in the form appropriate for the
-% \texttt{_series} auxiliary.
-% \begin{macrocode}
-\cs_new:Npn \@@_trigd_small:ww #1,#2;
- {
- \@@_ep_mul_raw:wwwwN
- -1,{1745}{3292}{5199}{4329}{5769}{2369}; #1,#2;
- \@@_trig_small:ww
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Argument reduction in degrees}
-%
-% \begin{macro}[rEXP]
-% {
-% \@@_trigd_large:ww, \@@_trigd_large_auxi:nnnnwNNNN,
-% \@@_trigd_large_auxii:wNw, \@@_trigd_large_auxiii:www
-% }
-% Note that $25\times 360 = 9000$, so $10^{k+1} \equiv 10^{k}
-% \pmod{360}$ for $k\geq 3$. When the exponent~|#1| is very large, we
-% can thus safely replace it by~$22$ (or even~$19$). We turn the
-% floating point number into a fixed point number with two blocks of
-% $8$~digits followed by five blocks of $4$~digits. The original
-% float is $100\times\meta{block_1}\cdots\meta{block_3}.
-% \meta{block_4}\cdots\meta{block_7}$, or is equal to it modulo~$360$
-% if the exponent~|#1| is very large. The first auxiliary finds
-% $\meta{block_1} + \meta{block_2} \pmod{9}$, a single digit, and
-% prepends it to the $4$~digits of \meta{block_3}. It also unpacks
-% \meta{block_4} and grabs the $4$~digits of \meta{block_7}. The
-% second auxiliary grabs the \meta{block_3} plus any contribution from
-% the first two blocks as~|#1|, the first digit of \meta{block_4}
-% (just after the decimal point in hundreds of degrees) as~|#2|, and
-% the three other digits as~|#3|. It finds the quotient and remainder
-% of |#1#2| modulo~$9$, adds twice the quotient to the integer
-% expression for the octant, and places the remainder (between $0$
-% and~$8$) before |#3| to form a new \meta{block_4}. The resulting
-% fixed point number is $x\in [0, 0.9]$. If $x\geq 0.45$, we add~$1$
-% to the octant and feed $0.9-x$ with an exponent of~$2$ (to
-% compensate the fact that we are working in units of hundreds of
-% degrees rather than degrees) to \cs{@@_trigd_small:ww}. Otherwise,
-% we feed it~$x$ with an exponent of~$2$. The third auxiliary also
-% discards digits which were not packed into the various
-% \meta{blocks}. Since the original exponent~|#1| is at least~$2$,
-% those are all~$0$ and no precision is lost (|#6| and~|#7| are
-% four~$0$ each).
-% \begin{macrocode}
-\cs_new:Npn \@@_trigd_large:ww #1, #2#3#4#5#6#7;
- {
- \exp_after:wN \@@_pack_eight:wNNNNNNNN
- \exp_after:wN \@@_pack_eight:wNNNNNNNN
- \exp_after:wN \@@_pack_twice_four:wNNNNNNNN
- \exp_after:wN \@@_pack_twice_four:wNNNNNNNN
- \exp_after:wN \@@_trigd_large_auxi:nnnnwNNNN
- \exp_after:wN ;
- \exp:w \exp_end_continue_f:w
- \prg_replicate:nn { \int_max:nn { 22 - #1 } { 0 } } { 0 }
- #2#3#4#5#6#7 0000 0000 0000 !
- }
-\cs_new:Npn \@@_trigd_large_auxi:nnnnwNNNN #1#2#3#4#5; #6#7#8#9
- {
- \exp_after:wN \@@_trigd_large_auxii:wNw
- \int_value:w \@@_int_eval:w #1 + #2
- - (#1 + #2 - 4) / 9 * 9 \@@_int_eval_end:
- #3;
- #4; #5{#6#7#8#9};
- }
-\cs_new:Npn \@@_trigd_large_auxii:wNw #1; #2#3;
- {
- + (#1#2 - 4) / 9 * 2
- \exp_after:wN \@@_trigd_large_auxiii:www
- \int_value:w \@@_int_eval:w #1#2
- - (#1#2 - 4) / 9 * 9 \@@_int_eval_end: #3 ;
- }
-\cs_new:Npn \@@_trigd_large_auxiii:www #1; #2; #3!
- {
- \if_int_compare:w #1 < 4500 \exp_stop_f:
- \exp_after:wN \@@_use_i_until_s:nw
- \exp_after:wN \@@_fixed_continue:wn
- \else:
- + 1
- \fi:
- \@@_fixed_sub:wwn {9000}{0000}{0000}{0000}{0000}{0000};
- {#1}#2{0000}{0000};
- { \@@_trigd_small:ww 2, }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Argument reduction in radians}
-%
-% Arguments greater or equal to~$1$ need to be reduced to a range where
-% we only need a few terms of the Taylor series. We reduce to the range
-% $[0,2\pi]$ by subtracting multiples of~$2\pi$, then to the smaller
-% range $[0,\pi/2]$ by subtracting multiples of~$\pi/2$ (keeping track
-% of how many times~$\pi/2$ is subtracted), then to $[0,\pi/4]$ by
-% mapping $x\to \pi/2 - x$ if appropriate. When the argument is very
-% large, say, $10^{100}$, an equally large multiple of~$2\pi$ must be
-% subtracted, hence we must work with a very good approximation
-% of~$2\pi$ in order to get a sensible remainder modulo~$2\pi$.
-%
-% Specifically, we multiply the argument by an approximation
-% of~$1/(2\pi)$ with $\ExplSyntaxOn\int_eval:n { \c__fp_max_exponent_int
-% + 48 }\ExplSyntaxOff$~digits, then discard the integer part of the
-% result, keeping $52$~digits of the fractional part. From the
-% fractional part of $x/(2\pi)$ we deduce the octant (quotient of the
-% first three digits by~$125$). We then multiply by $8$ or~$-8$ (the
-% latter when the octant is odd), ignore any integer part (related to
-% the octant), and convert the fractional part to an extended precision
-% number, before multiplying by~$\pi/4$ to convert back to a value in
-% radians in $[0,\pi/4]$.
-%
-% It is possible to prove that given the precision of floating points
-% and their range of exponents, the $52$~digits may start at most with
-% $24$~zeros. The $5$~last digits are affected by carries from
-% computations which are not done, hence we are left with at least $52 -
-% 24 - 5 = 23$ significant digits, enough to round correctly up to
-% $0.6\cdot\text{ulp}$ in all cases.
-%
-% \begin{variable}[EXP]{\c_@@_trig_intarray}
-% This integer array stores blocks of $8$~decimals of
-% $10^{-16}/(2\pi)$. Each entry is $10^8$ plus an $8$~digit number
-% storing $8$ decimals. In total we store $10112$~decimals of
-% $10^{-16}/(2\pi)$. The number of decimals we really need is the
-% maximum exponent plus the number of digits we later need,~$52$,
-% plus~$12$ ($4-1$~groups of $4$~digits). The memory footprint ($1/2$
-% byte per digit) is the same as an earlier method of storing the data
-% as a control sequence name, but the major advantage is that we can
-% unpack specific subsets of the digits without unpacking the $10112$
-% decimals.
-% \begin{macrocode}
-\intarray_const_from_clist:Nn \c_@@_trig_intarray
- {
- 100000000, 100000000, 115915494, 130918953, 135768883, 176337251,
- 143620344, 159645740, 145644874, 176673440, 158896797, 163422653,
- 150901138, 102766253, 108595607, 128427267, 157958036, 189291184,
- 161145786, 152877967, 141073169, 198392292, 139966937, 140907757,
- 130777463, 196925307, 168871739, 128962173, 197661693, 136239024,
- 117236290, 111832380, 111422269, 197557159, 140461890, 108690267,
- 139561204, 189410936, 193784408, 155287230, 199946443, 140024867,
- 123477394, 159610898, 132309678, 130749061, 166986462, 180469944,
- 186521878, 181574786, 156696424, 110389958, 174139348, 160998386,
- 180991999, 162442875, 158517117, 188584311, 117518767, 116054654,
- 175369880, 109739460, 136475933, 137680593, 102494496, 163530532,
- 171567755, 103220324, 177781639, 171660229, 146748119, 159816584,
- 106060168, 103035998, 113391198, 174988327, 186654435, 127975507,
- 100162406, 177564388, 184957131, 108801221, 199376147, 168137776,
- 147378906, 133068046, 145797848, 117613124, 127314069, 196077502,
- 145002977, 159857089, 105690279, 167851315, 125210016, 131774602,
- 109248116, 106240561, 145620314, 164840892, 148459191, 143521157,
- 154075562, 100871526, 160680221, 171591407, 157474582, 172259774,
- 162853998, 175155329, 139081398, 117724093, 158254797, 107332871,
- 190406999, 175907657, 170784934, 170393589, 182808717, 134256403,
- 166895116, 162545705, 194332763, 112686500, 126122717, 197115321,
- 112599504, 138667945, 103762556, 108363171, 116952597, 158128224,
- 194162333, 143145106, 112353687, 185631136, 136692167, 114206974,
- 169601292, 150578336, 105311960, 185945098, 139556718, 170995474,
- 165104316, 123815517, 158083944, 129799709, 199505254, 138756612,
- 194458833, 106846050, 178529151, 151410404, 189298850, 163881607,
- 176196993, 107341038, 199957869, 118905980, 193737772, 106187543,
- 122271893, 101366255, 126123878, 103875388, 181106814, 106765434,
- 108282785, 126933426, 179955607, 107903860, 160352738, 199624512,
- 159957492, 176297023, 159409558, 143011648, 129641185, 157771240,
- 157544494, 157021789, 176979240, 194903272, 194770216, 164960356,
- 153181535, 144003840, 168987471, 176915887, 163190966, 150696440,
- 147769706, 187683656, 177810477, 197954503, 153395758, 130188183,
- 186879377, 166124814, 195305996, 155802190, 183598751, 103512712,
- 190432315, 180498719, 168687775, 194656634, 162210342, 104440855,
- 149785037, 192738694, 129353661, 193778292, 187359378, 143470323,
- 102371458, 137923557, 111863634, 119294601, 183182291, 196416500,
- 187830793, 131353497, 179099745, 186492902, 167450609, 189368909,
- 145883050, 133703053, 180547312, 132158094, 131976760, 132283131,
- 141898097, 149822438, 133517435, 169898475, 101039500, 168388003,
- 197867235, 199608024, 100273901, 108749548, 154787923, 156826113,
- 199489032, 168997427, 108349611, 149208289, 103776784, 174303550,
- 145684560, 183671479, 130845672, 133270354, 185392556, 120208683,
- 193240995, 162211753, 131839402, 109707935, 170774965, 149880868,
- 160663609, 168661967, 103747454, 121028312, 119251846, 122483499,
- 111611495, 166556037, 196967613, 199312829, 196077608, 127799010,
- 107830360, 102338272, 198790854, 102387615, 157445430, 192601191,
- 100543379, 198389046, 154921248, 129516070, 172853005, 122721023,
- 160175233, 113173179, 175931105, 103281551, 109373913, 163964530,
- 157926071, 180083617, 195487672, 146459804, 173977292, 144810920,
- 109371257, 186918332, 189588628, 139904358, 168666639, 175673445,
- 114095036, 137327191, 174311388, 106638307, 125923027, 159734506,
- 105482127, 178037065, 133778303, 121709877, 134966568, 149080032,
- 169885067, 141791464, 168350828, 116168533, 114336160, 173099514,
- 198531198, 119733758, 144420984, 116559541, 152250643, 139431286,
- 144403838, 183561508, 179771645, 101706470, 167518774, 156059160,
- 187168578, 157939226, 123475633, 117111329, 198655941, 159689071,
- 198506887, 144230057, 151919770, 156900382, 118392562, 120338742,
- 135362568, 108354156, 151729710, 188117217, 195936832, 156488518,
- 174997487, 108553116, 159830610, 113921445, 144601614, 188452770,
- 125114110, 170248521, 173974510, 138667364, 103872860, 109967489,
- 131735618, 112071174, 104788993, 168886556, 192307848, 150230570,
- 157144063, 163863202, 136852010, 174100574, 185922811, 115721968,
- 100397824, 175953001, 166958522, 112303464, 118773650, 143546764,
- 164565659, 171901123, 108476709, 193097085, 191283646, 166919177,
- 169387914, 133315566, 150669813, 121641521, 100895711, 172862384,
- 126070678, 145176011, 113450800, 169947684, 122356989, 162488051,
- 157759809, 153397080, 185475059, 175362656, 149034394, 145420581,
- 178864356, 183042000, 131509559, 147434392, 152544850, 167491429,
- 108647514, 142303321, 133245695, 111634945, 167753939, 142403609,
- 105438335, 152829243, 142203494, 184366151, 146632286, 102477666,
- 166049531, 140657343, 157553014, 109082798, 180914786, 169343492,
- 127376026, 134997829, 195701816, 119643212, 133140475, 176289748,
- 140828911, 174097478, 126378991, 181699939, 148749771, 151989818,
- 172666294, 160183053, 195832752, 109236350, 168538892, 128468247,
- 125997252, 183007668, 156937583, 165972291, 198244297, 147406163,
- 181831139, 158306744, 134851692, 185973832, 137392662, 140243450,
- 119978099, 140402189, 161348342, 173613676, 144991382, 171541660,
- 163424829, 136374185, 106122610, 186132119, 198633462, 184709941,
- 183994274, 129559156, 128333990, 148038211, 175011612, 111667205,
- 119125793, 103552929, 124113440, 131161341, 112495318, 138592695,
- 184904438, 146807849, 109739828, 108855297, 104515305, 139914009,
- 188698840, 188365483, 166522246, 168624087, 125401404, 100911787,
- 142122045, 123075334, 173972538, 114940388, 141905868, 142311594,
- 163227443, 139066125, 116239310, 162831953, 123883392, 113153455,
- 163815117, 152035108, 174595582, 101123754, 135976815, 153401874,
- 107394340, 136339780, 138817210, 104531691, 182951948, 179591767,
- 139541778, 179243527, 161740724, 160593916, 102732282, 187946819,
- 136491289, 149714953, 143255272, 135916592, 198072479, 198580612,
- 169007332, 118844526, 179433504, 155801952, 149256630, 162048766,
- 116134365, 133992028, 175452085, 155344144, 109905129, 182727454,
- 165911813, 122232840, 151166615, 165070983, 175574337, 129548631,
- 120411217, 116380915, 160616116, 157320000, 183306114, 160618128,
- 103262586, 195951602, 146321661, 138576614, 180471993, 127077713,
- 116441201, 159496011, 106328305, 120759583, 148503050, 179095584,
- 198298218, 167402898, 138551383, 123957020, 180763975, 150429225,
- 198476470, 171016426, 197438450, 143091658, 164528360, 132493360,
- 143546572, 137557916, 113663241, 120457809, 196971566, 134022158,
- 180545794, 131328278, 100552461, 132088901, 187421210, 192448910,
- 141005215, 149680971, 113720754, 100571096, 134066431, 135745439,
- 191597694, 135788920, 179342561, 177830222, 137011486, 142492523,
- 192487287, 113132021, 176673607, 156645598, 127260957, 141566023,
- 143787436, 129132109, 174858971, 150713073, 191040726, 143541417,
- 197057222, 165479803, 181512759, 157912400, 125344680, 148220261,
- 173422990, 101020483, 106246303, 137964746, 178190501, 181183037,
- 151538028, 179523433, 141955021, 135689770, 191290561, 143178787,
- 192086205, 174499925, 178975690, 118492103, 124206471, 138519113,
- 188147564, 102097605, 154895793, 178514140, 141453051, 151583964,
- 128232654, 106020603, 131189158, 165702720, 186250269, 191639375,
- 115278873, 160608114, 155694842, 110322407, 177272742, 116513642,
- 134366992, 171634030, 194053074, 180652685, 109301658, 192136921,
- 141431293, 171341061, 157153714, 106203978, 147618426, 150297807,
- 186062669, 169960809, 118422347, 163350477, 146719017, 145045144,
- 161663828, 146208240, 186735951, 102371302, 190444377, 194085350,
- 134454426, 133413062, 163074595, 113830310, 122931469, 134466832,
- 185176632, 182415152, 110179422, 164439571, 181217170, 121756492,
- 119644493, 196532222, 118765848, 182445119, 109401340, 150443213,
- 198586286, 121083179, 139396084, 143898019, 114787389, 177233102,
- 186310131, 148695521, 126205182, 178063494, 157118662, 177825659,
- 188310053, 151552316, 165984394, 109022180, 163144545, 121212978,
- 197344714, 188741258, 126822386, 102360271, 109981191, 152056882,
- 134723983, 158013366, 106837863, 128867928, 161973236, 172536066,
- 185216856, 132011948, 197807339, 158419190, 166595838, 167852941,
- 124187182, 117279875, 106103946, 106481958, 157456200, 160892122,
- 184163943, 173846549, 158993202, 184812364, 133466119, 170732430,
- 195458590, 173361878, 162906318, 150165106, 126757685, 112163575,
- 188696307, 145199922, 100107766, 176830946, 198149756, 122682434,
- 179367131, 108412102, 119520899, 148191244, 140487511, 171059184,
- 141399078, 189455775, 118462161, 190415309, 134543802, 180893862,
- 180732375, 178615267, 179711433, 123241969, 185780563, 176301808,
- 184386640, 160717536, 183213626, 129671224, 126094285, 140110963,
- 121826276, 151201170, 122552929, 128965559, 146082049, 138409069,
- 107606920, 103954646, 119164002, 115673360, 117909631, 187289199,
- 186343410, 186903200, 157966371, 103128612, 135698881, 176403642,
- 152540837, 109810814, 183519031, 121318624, 172281810, 150845123,
- 169019064, 166322359, 138872454, 163073727, 128087898, 130041018,
- 194859136, 173742589, 141812405, 167291912, 138003306, 134499821,
- 196315803, 186381054, 124578934, 150084553, 128031351, 118843410,
- 107373060, 159565443, 173624887, 171292628, 198074235, 139074061,
- 178690578, 144431052, 174262641, 176783005, 182214864, 162289361,
- 192966929, 192033046, 169332843, 181580535, 164864073, 118444059,
- 195496893, 153773183, 167266131, 130108623, 158802128, 180432893,
- 144562140, 147978945, 142337360, 158506327, 104399819, 132635916,
- 168734194, 136567839, 101281912, 120281622, 195003330, 112236091,
- 185875592, 101959081, 122415367, 194990954, 148881099, 175891989,
- 108115811, 163538891, 163394029, 123722049, 184837522, 142362091,
- 100834097, 156679171, 100841679, 157022331, 178971071, 102928884,
- 189701309, 195339954, 124415335, 106062584, 139214524, 133864640,
- 134324406, 157317477, 155340540, 144810061, 177612569, 108474646,
- 114329765, 143900008, 138265211, 145210162, 136643111, 197987319,
- 102751191, 144121361, 169620456, 193602633, 161023559, 162140467,
- 102901215, 167964187, 135746835, 187317233, 110047459, 163339773,
- 124770449, 118885134, 141536376, 100915375, 164267438, 145016622,
- 113937193, 106748706, 128815954, 164819775, 119220771, 102367432,
- 189062690, 170911791, 194127762, 112245117, 123546771, 115640433,
- 135772061, 166615646, 174474627, 130562291, 133320309, 153340551,
- 138417181, 194605321, 150142632, 180008795, 151813296, 175497284,
- 167018836, 157425342, 150169942, 131069156, 134310662, 160434122,
- 105213831, 158797111, 150754540, 163290657, 102484886, 148697402,
- 187203725, 198692811, 149360627, 140384233, 128749423, 132178578,
- 177507355, 171857043, 178737969, 134023369, 102911446, 196144864,
- 197697194, 134527467, 144296030, 189437192, 154052665, 188907106,
- 162062575, 150993037, 199766583, 167936112, 181374511, 104971506,
- 115378374, 135795558, 167972129, 135876446, 130937572, 103221320,
- 124605656, 161129971, 131027586, 191128460, 143251843, 143269155,
- 129284585, 173495971, 150425653, 199302112, 118494723, 121323805,
- 116549802, 190991967, 168151180, 122483192, 151273721, 199792134,
- 133106764, 121874844, 126215985, 112167639, 167793529, 182985195,
- 185453921, 106957880, 158685312, 132775454, 133229161, 198905318,
- 190537253, 191582222, 192325972, 178133427, 181825606, 148823337,
- 160719681, 101448145, 131983362, 137910767, 112550175, 128826351,
- 183649210, 135725874, 110356573, 189469487, 154446940, 118175923,
- 106093708, 128146501, 185742532, 149692127, 164624247, 183221076,
- 154737505, 168198834, 156410354, 158027261, 125228550, 131543250,
- 139591848, 191898263, 104987591, 115406321, 103542638, 190012837,
- 142615518, 178773183, 175862355, 117537850, 169565995, 170028011,
- 158412588, 170150030, 117025916, 174630208, 142412449, 112839238,
- 105257725, 114737141, 123102301, 172563968, 130555358, 132628403,
- 183638157, 168682846, 143304568, 105994018, 170010719, 152092970,
- 117799058, 132164175, 179868116, 158654714, 177489647, 116547948,
- 183121404, 131836079, 184431405, 157311793, 149677763, 173989893,
- 102277656, 107058530, 140837477, 152640947, 143507039, 152145247,
- 101683884, 107090870, 161471944, 137225650, 128231458, 172995869,
- 173831689, 171268519, 139042297, 111072135, 107569780, 137262545,
- 181410950, 138270388, 198736451, 162848201, 180468288, 120582913,
- 153390138, 135649144, 130040157, 106509887, 192671541, 174507066,
- 186888783, 143805558, 135011967, 145862340, 180595327, 124727843,
- 182925939, 157715840, 136885940, 198993925, 152416883, 178793572,
- 179679516, 154076673, 192703125, 164187609, 162190243, 104699348,
- 159891990, 160012977, 174692145, 132970421, 167781726, 115178506,
- 153008552, 155999794, 102099694, 155431545, 127458567, 104403686,
- 168042864, 184045128, 181182309, 179349696, 127218364, 192935516,
- 120298724, 169583299, 148193297, 183358034, 159023227, 105261254,
- 121144370, 184359584, 194433836, 138388317, 175184116, 108817112,
- 151279233, 137457721, 193398208, 119005406, 132929377, 175306906,
- 160741530, 149976826, 147124407, 176881724, 186734216, 185881509,
- 191334220, 175930947, 117385515, 193408089, 157124410, 163472089,
- 131949128, 180783576, 131158294, 100549708, 191802336, 165960770,
- 170927599, 101052702, 181508688, 197828549, 143403726, 142729262,
- 110348701, 139928688, 153550062, 106151434, 130786653, 196085995,
- 100587149, 139141652, 106530207, 100852656, 124074703, 166073660,
- 153338052, 163766757, 120188394, 197277047, 122215363, 138511354,
- 183463624, 161985542, 159938719, 133367482, 104220974, 149956672,
- 170250544, 164232439, 157506869, 159133019, 137469191, 142980999,
- 134242305, 150172665, 121209241, 145596259, 160554427, 159095199,
- 168243130, 184279693, 171132070, 121049823, 123819574, 171759855,
- 119501864, 163094029, 175943631, 194450091, 191506160, 149228764,
- 132319212, 197034460, 193584259, 126727638, 168143633, 109856853,
- 127860243, 132141052, 133076065, 188414958, 158718197, 107124299,
- 159592267, 181172796, 144388537, 196763139, 127431422, 179531145,
- 100064922, 112650013, 132686230, 121550837,
- }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[rEXP]
-% {
-% \@@_trig_large:ww,
-% \@@_trig_large_auxi:w,
-% \@@_trig_large_auxii:w,
-% \@@_trig_large_auxiii:w,
-% }
-% The exponent~|#1| is between $1$ and~$\ExplSyntaxOn \int_use:N
-% \c__fp_max_exponent_int$. We wish to look up decimals
-% $10^{\text{\texttt{\#1}}-16}/(2\pi)$ starting from the digit
-% $|#1|+1$. Since they are stored in batches of~$8$, compute
-% $\lfloor|#1|/8\rfloor$ and fetch blocks of $8$ digits starting
-% there. The numbering of items in \cs{c_@@_trig_intarray} starts
-% at~$1$, so the block $\lfloor|#1|/8\rfloor+1$ contains the digit we
-% want, at one of the eight positions. Each call to \cs{int_value:w}
-% \cs{__kernel_intarray_item:Nn} expands the next, until being stopped
-% by \cs{@@_trig_large_auxiii:w} using \cs{exp_stop_f:}. Once all
-% these blocks are unpacked, the \cs{exp_stop_f:} and $0$ to $7$
-% digits are removed by \cs[no-index]{use_none:n\ldots{}n}.
-% Finally, \cs{@@_trig_large_auxii:w} packs $64$ digits (there are
-% between $65$ and $72$ at this point) into groups of~$4$ and the
-% \texttt{auxv} auxiliary is called.
-% \begin{macrocode}
-\cs_new:Npn \@@_trig_large:ww #1, #2#3#4#5#6;
- {
- \exp_after:wN \@@_trig_large_auxi:w
- \int_value:w \@@_int_eval:w (#1 - 4) / 8 \exp_after:wN ,
- \int_value:w #1 , ;
- {#2}{#3}{#4}{#5} ;
- }
-\cs_new:Npn \@@_trig_large_auxi:w #1, #2,
- {
- \exp_after:wN \exp_after:wN
- \exp_after:wN \@@_trig_large_auxii:w
- \cs:w
- use_none:n \prg_replicate:nn { #2 - #1 * 8 } { n }
- \exp_after:wN
- \cs_end:
- \int_value:w
- \__kernel_intarray_item:Nn \c_@@_trig_intarray
- { \@@_int_eval:w #1 + 1 \scan_stop: }
- \exp_after:wN \@@_trig_large_auxiii:w \int_value:w
- \__kernel_intarray_item:Nn \c_@@_trig_intarray
- { \@@_int_eval:w #1 + 2 \scan_stop: }
- \exp_after:wN \@@_trig_large_auxiii:w \int_value:w
- \__kernel_intarray_item:Nn \c_@@_trig_intarray
- { \@@_int_eval:w #1 + 3 \scan_stop: }
- \exp_after:wN \@@_trig_large_auxiii:w \int_value:w
- \__kernel_intarray_item:Nn \c_@@_trig_intarray
- { \@@_int_eval:w #1 + 4 \scan_stop: }
- \exp_after:wN \@@_trig_large_auxiii:w \int_value:w
- \__kernel_intarray_item:Nn \c_@@_trig_intarray
- { \@@_int_eval:w #1 + 5 \scan_stop: }
- \exp_after:wN \@@_trig_large_auxiii:w \int_value:w
- \__kernel_intarray_item:Nn \c_@@_trig_intarray
- { \@@_int_eval:w #1 + 6 \scan_stop: }
- \exp_after:wN \@@_trig_large_auxiii:w \int_value:w
- \__kernel_intarray_item:Nn \c_@@_trig_intarray
- { \@@_int_eval:w #1 + 7 \scan_stop: }
- \exp_after:wN \@@_trig_large_auxiii:w \int_value:w
- \__kernel_intarray_item:Nn \c_@@_trig_intarray
- { \@@_int_eval:w #1 + 8 \scan_stop: }
- \exp_after:wN \@@_trig_large_auxiii:w \int_value:w
- \__kernel_intarray_item:Nn \c_@@_trig_intarray
- { \@@_int_eval:w #1 + 9 \scan_stop: }
- \exp_stop_f:
- }
-\cs_new:Npn \@@_trig_large_auxii:w
- {
- \@@_pack_twice_four:wNNNNNNNN \@@_pack_twice_four:wNNNNNNNN
- \@@_pack_twice_four:wNNNNNNNN \@@_pack_twice_four:wNNNNNNNN
- \@@_pack_twice_four:wNNNNNNNN \@@_pack_twice_four:wNNNNNNNN
- \@@_pack_twice_four:wNNNNNNNN \@@_pack_twice_four:wNNNNNNNN
- \@@_trig_large_auxv:www ;
- }
-\cs_new:Npn \@@_trig_large_auxiii:w 1 { \exp_stop_f: }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]
-% {
-% \@@_trig_large_auxv:www,
-% \@@_trig_large_auxvi:wnnnnnnnn,
-% \@@_trig_large_pack:NNNNNw
-% }
-% First come the first $64$~digits of the fractional part of
-% $10^{\text{\texttt{\#1}}-16}/(2\pi)$, arranged in $16$~blocks
-% of~$4$, and ending with a semicolon. Then a few more digits of the
-% same fractional part, ending with a semicolon, then $4$~blocks of
-% $4$~digits holding the significand of the original argument.
-% Multiply the $16$-digit significand with the $64$-digit fractional
-% part: the \texttt{auxvi} auxiliary receives the significand
-% as~|#2#3#4#5| and $16$~digits of the fractional part as~|#6#7#8#9|,
-% and computes one step of the usual ladder of \texttt{pack} functions
-% we use for multiplication (see \emph{e.g.,} \cs{@@_fixed_mul:wwn}),
-% then discards one block of the fractional part to set things up for
-% the next step of the ladder. We perform $13$~such steps, replacing
-% the last \texttt{middle} shift by the appropriate \texttt{trailing}
-% shift, then discard the significand and remaining $3$~blocks from
-% the fractional part, as there are not enough digits to compute any
-% more step in the ladder. The last semicolon closes the ladder, and
-% we return control to the \texttt{auxvii} auxiliary.
-% \begin{macrocode}
-\cs_new:Npn \@@_trig_large_auxv:www #1; #2; #3;
- {
- \exp_after:wN \@@_use_i_until_s:nw
- \exp_after:wN \@@_trig_large_auxvii:w
- \int_value:w \@@_int_eval:w \c_@@_leading_shift_int
- \prg_replicate:nn { 13 }
- { \@@_trig_large_auxvi:wnnnnnnnn }
- + \c_@@_trailing_shift_int - \c_@@_middle_shift_int
- \@@_use_i_until_s:nw
- ; #3 #1 ; ;
- }
-\cs_new:Npn \@@_trig_large_auxvi:wnnnnnnnn #1; #2#3#4#5#6#7#8#9
- {
- \exp_after:wN \@@_trig_large_pack:NNNNNw
- \int_value:w \@@_int_eval:w \c_@@_middle_shift_int
- + #2*#9 + #3*#8 + #4*#7 + #5*#6
- #1; {#2}{#3}{#4}{#5} {#7}{#8}{#9}
- }
-\cs_new:Npn \@@_trig_large_pack:NNNNNw #1#2#3#4#5#6;
- { + #1#2#3#4#5 ; #6 }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]
-% {
-% \@@_trig_large_auxvii:w,
-% \@@_trig_large_auxviii:w,
-% }
-% \begin{macro}[EXP]
-% {
-% \@@_trig_large_auxix:Nw,
-% \@@_trig_large_auxx:wNNNNN,
-% \@@_trig_large_auxxi:w
-% }
-% The \texttt{auxvii} auxiliary is followed by $52$~digits and a
-% semicolon. We find the octant as the integer part of $8$~times what
-% follows, or equivalently as the integer part of $|#1#2#3|/125$, and
-% add it to the surrounding integer expression for the octant. We
-% then compute $8$~times the $52$-digit number, with a minus sign if
-% the octant is odd. Again, the last \texttt{middle} shift is
-% converted to a \texttt{trailing} shift. Any integer part (including
-% negative values which come up when the octant is odd) is discarded
-% by \cs{@@_use_i_until_s:nw}. The resulting fractional part should
-% then be converted to radians by multiplying by~$2\pi/8$, but first,
-% build an extended precision number by abusing
-% \cs{@@_ep_to_ep_loop:N} with the appropriate trailing markers.
-% Finally, \cs{@@_trig_small:ww} sets up the argument for the
-% functions which compute the Taylor series.
-% \begin{macrocode}
-\cs_new:Npn \@@_trig_large_auxvii:w #1#2#3
- {
- \exp_after:wN \@@_trig_large_auxviii:ww
- \int_value:w \@@_int_eval:w (#1#2#3 - 62) / 125 ;
- #1#2#3
- }
-\cs_new:Npn \@@_trig_large_auxviii:ww #1;
- {
- + #1
- \if_int_odd:w #1 \exp_stop_f:
- \exp_after:wN \@@_trig_large_auxix:Nw
- \exp_after:wN -
- \else:
- \exp_after:wN \@@_trig_large_auxix:Nw
- \exp_after:wN +
- \fi:
- }
-\cs_new:Npn \@@_trig_large_auxix:Nw
- {
- \exp_after:wN \@@_use_i_until_s:nw
- \exp_after:wN \@@_trig_large_auxxi:w
- \int_value:w \@@_int_eval:w \c_@@_leading_shift_int
- \prg_replicate:nn { 13 }
- { \@@_trig_large_auxx:wNNNNN }
- + \c_@@_trailing_shift_int - \c_@@_middle_shift_int
- ;
- }
-\cs_new:Npn \@@_trig_large_auxx:wNNNNN #1; #2 #3#4#5#6
- {
- \exp_after:wN \@@_trig_large_pack:NNNNNw
- \int_value:w \@@_int_eval:w \c_@@_middle_shift_int
- #2 8 * #3#4#5#6
- #1; #2
- }
-\cs_new:Npn \@@_trig_large_auxxi:w #1;
- {
- \exp_after:wN \@@_ep_mul_raw:wwwwN
- \int_value:w \@@_int_eval:w 0 \@@_ep_to_ep_loop:N #1 ; ; !
- 0,{7853}{9816}{3397}{4483}{0961}{5661};
- \@@_trig_small:ww
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsubsection{Computing the power series}
-%
-% \begin{macro}[EXP]
-% {\@@_sin_series_o:NNwwww, \@@_sin_series_aux_o:NNnwww}
-% Here we receive a conversion function \cs{@@_ep_to_float_o:wwN} or
-% \cs{@@_ep_inv_to_float_o:wwN}, a \meta{sign} ($0$ or~$2$), a
-% (non-negative) \meta{octant} delimited by a dot, a \meta{fixed
-% point} number delimited by a semicolon, and an extended-precision
-% number. The auxiliary receives:
-% \begin{itemize}
-% \item the conversion function~|#1|;
-% \item the final sign, which depends on the octant~|#3| and the
-% sign~|#2|;
-% \item the octant~|#3|, which controls the series we use;
-% \item the square |#4 * #4| of the argument as a fixed point number,
-% computed with \cs{@@_fixed_mul:wwn};
-% \item the number itself as an extended-precision number.
-% \end{itemize}
-% If the octant is in $\{1,2,5,6,\ldots{}\}$, we are near an extremum
-% of the function and we use the series
-% \[
-% \cos(x) = 1 - x^2 \bigg( \frac{1}{2!} - x^2 \bigg( \frac{1}{4!}
-% - x^2 \bigg( \cdots \bigg) \bigg) \bigg) .
-% \]
-% Otherwise, the series
-% \[
-% \sin(x) = x \bigg( 1 - x^2 \bigg( \frac{1}{3!} - x^2 \bigg(
-% \frac{1}{5!} - x^2 \bigg( \cdots \bigg) \bigg) \bigg) \bigg)
-% \]
-% is used. Finally, the extended-precision number is converted to a
-% floating point number with the given sign, and \cs{@@_sanitize:Nw}
-% checks for overflow and underflow.
-% \begin{macrocode}
-\cs_new:Npn \@@_sin_series_o:NNwwww #1#2#3. #4;
- {
- \@@_fixed_mul:wwn #4; #4;
- {
- \exp_after:wN \@@_sin_series_aux_o:NNnwww
- \exp_after:wN #1
- \int_value:w
- \if_int_odd:w \@@_int_eval:w (#3 + 2) / 4 \@@_int_eval_end:
- #2
- \else:
- \if_meaning:w #2 0 2 \else: 0 \fi:
- \fi:
- {#3}
- }
- }
-\cs_new:Npn \@@_sin_series_aux_o:NNnwww #1#2#3 #4; #5,#6;
- {
- \if_int_odd:w \@@_int_eval:w #3 / 2 \@@_int_eval_end:
- \exp_after:wN \use_i:nn
- \else:
- \exp_after:wN \use_ii:nn
- \fi:
- { % 1/18!
- \@@_fixed_mul_sub_back:wwwn {0000}{0000}{0000}{0001}{5619}{2070};
- #4;{0000}{0000}{0000}{0477}{9477}{3324};
- \@@_fixed_mul_sub_back:wwwn #4;{0000}{0000}{0011}{4707}{4559}{7730};
- \@@_fixed_mul_sub_back:wwwn #4;{0000}{0000}{2087}{6756}{9878}{6810};
- \@@_fixed_mul_sub_back:wwwn #4;{0000}{0027}{5573}{1922}{3985}{8907};
- \@@_fixed_mul_sub_back:wwwn #4;{0000}{2480}{1587}{3015}{8730}{1587};
- \@@_fixed_mul_sub_back:wwwn #4;{0013}{8888}{8888}{8888}{8888}{8889};
- \@@_fixed_mul_sub_back:wwwn #4;{0416}{6666}{6666}{6666}{6666}{6667};
- \@@_fixed_mul_sub_back:wwwn #4;{5000}{0000}{0000}{0000}{0000}{0000};
- \@@_fixed_mul_sub_back:wwwn#4;{10000}{0000}{0000}{0000}{0000}{0000};
- { \@@_fixed_continue:wn 0, }
- }
- { % 1/17!
- \@@_fixed_mul_sub_back:wwwn {0000}{0000}{0000}{0028}{1145}{7254};
- #4;{0000}{0000}{0000}{7647}{1637}{3182};
- \@@_fixed_mul_sub_back:wwwn #4;{0000}{0000}{0160}{5904}{3836}{8216};
- \@@_fixed_mul_sub_back:wwwn #4;{0000}{0002}{5052}{1083}{8544}{1719};
- \@@_fixed_mul_sub_back:wwwn #4;{0000}{0275}{5731}{9223}{9858}{9065};
- \@@_fixed_mul_sub_back:wwwn #4;{0001}{9841}{2698}{4126}{9841}{2698};
- \@@_fixed_mul_sub_back:wwwn #4;{0083}{3333}{3333}{3333}{3333}{3333};
- \@@_fixed_mul_sub_back:wwwn #4;{1666}{6666}{6666}{6666}{6666}{6667};
- \@@_fixed_mul_sub_back:wwwn#4;{10000}{0000}{0000}{0000}{0000}{0000};
- { \@@_ep_mul:wwwwn 0, } #5,#6;
- }
- {
- \exp_after:wN \@@_sanitize:Nw
- \exp_after:wN #2
- \int_value:w \@@_int_eval:w #1
- }
- #2
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {\@@_tan_series_o:NNwwww, \@@_tan_series_aux_o:Nnwww}
-% Contrarily to \cs{@@_sin_series_o:NNwwww} which received a
-% conversion auxiliary as~|#1|, here, |#1| is $0$ for tangent
-% and $2$ for
-% cotangent. Consider first the case of the tangent. The octant |#3|
-% starts at $1$, which means that it is $1$ or $2$ for $\lvert
-% x\rvert\in[0,\pi/2]$, it is $3$ or $4$ for $\lvert
-% x\rvert\in[\pi/2,\pi]$, and so on: the intervals on which
-% $\tan\lvert x\rvert\geq 0$ coincide with those for which $\lfloor
-% (|#3| + 1) / 2\rfloor$ is odd. We also have to take into account
-% the original sign of $x$ to get the sign of the final result; it is
-% straightforward to check that the first \cs{int_value:w} expansion
-% produces $0$ for a positive final result, and $2$ otherwise. A
-% similar story holds for $\cot(x)$.
-%
-% The auxiliary receives the sign, the octant, the square of the
-% (reduced) input, and the (reduced) input (an extended-precision
-% number) as arguments. It then
-% computes the numerator and denominator of
-% \[
-% \tan(x) \simeq
-% \frac{x (1 - x^2 (a_1 - x^2 (a_2 - x^2 (a_3 - x^2 (a_4 - x^2 a_5)))))}
-% {1 - x^2 (b_1 - x^2 (b_2 - x^2 (b_3 - x^2 (b_4 - x^2 b_5))))} .
-% \]
-% The ratio is computed by \cs{@@_ep_div:wwwwn}, then converted to a
-% floating point number. For octants~|#3| (really, quadrants) next to
-% a pole of the
-% functions, the fixed point numerator and denominator are exchanged
-% before computing the ratio. Note that this \cs{if_int_odd:w} test
-% relies on the fact that the octant is at least~$1$.
-% \begin{macrocode}
-\cs_new:Npn \@@_tan_series_o:NNwwww #1#2#3. #4;
- {
- \@@_fixed_mul:wwn #4; #4;
- {
- \exp_after:wN \@@_tan_series_aux_o:Nnwww
- \int_value:w
- \if_int_odd:w \@@_int_eval:w #3 / 2 \@@_int_eval_end:
- \exp_after:wN \reverse_if:N
- \fi:
- \if_meaning:w #1#2 2 \else: 0 \fi:
- {#3}
- }
- }
-\cs_new:Npn \@@_tan_series_aux_o:Nnwww #1 #2 #3; #4,#5;
- {
- \@@_fixed_mul_sub_back:wwwn {0000}{0000}{1527}{3493}{0856}{7059};
- #3; {0000}{0159}{6080}{0274}{5257}{6472};
- \@@_fixed_mul_sub_back:wwwn #3; {0002}{4571}{2320}{0157}{2558}{8481};
- \@@_fixed_mul_sub_back:wwwn #3; {0115}{5830}{7533}{5397}{3168}{2147};
- \@@_fixed_mul_sub_back:wwwn #3; {1929}{8245}{6140}{3508}{7719}{2982};
- \@@_fixed_mul_sub_back:wwwn #3;{10000}{0000}{0000}{0000}{0000}{0000};
- { \@@_ep_mul:wwwwn 0, } #4,#5;
- {
- \@@_fixed_mul_sub_back:wwwn {0000}{0007}{0258}{0681}{9408}{4706};
- #3;{0000}{2343}{7175}{1399}{6151}{7670};
- \@@_fixed_mul_sub_back:wwwn #3;{0019}{2638}{4588}{9232}{8861}{3691};
- \@@_fixed_mul_sub_back:wwwn #3;{0536}{6357}{0691}{4344}{6852}{4252};
- \@@_fixed_mul_sub_back:wwwn #3;{5263}{1578}{9473}{6842}{1052}{6315};
- \@@_fixed_mul_sub_back:wwwn#3;{10000}{0000}{0000}{0000}{0000}{0000};
- {
- \reverse_if:N \if_int_odd:w
- \@@_int_eval:w (#2 - 1) / 2 \@@_int_eval_end:
- \exp_after:wN \@@_reverse_args:Nww
- \fi:
- \@@_ep_div:wwwwn 0,
- }
- }
- {
- \exp_after:wN \@@_sanitize:Nw
- \exp_after:wN #1
- \int_value:w \@@_int_eval:w \@@_ep_to_float_o:wwN
- }
- #1
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Inverse trigonometric functions}
-%
-% All inverse trigonometric functions (arcsine, arccosine, arctangent,
-% arccotangent, arccosecant, and arcsecant) are based on a function
-% often denoted \texttt{atan2}. This function is accessed directly by
-% feeding two arguments to arctangent, and is defined by \(\operatorname{atan}(y, x) =
-% \operatorname{atan}(y/x)\) for generic \(y\) and~\(x\). Its advantages over the
-% conventional arctangent is that it takes values in $[-\pi,\pi]$ rather
-% than $[-\pi/2,\pi/2]$, and that it is better behaved in boundary
-% cases. Other inverse trigonometric functions are expressed in terms
-% of \(\operatorname{atan}\) as
-% \begin{align}
-% \operatorname{acos} x & = \operatorname{atan}(\sqrt{1-x^2}, x) \\
-% \operatorname{asin} x & = \operatorname{atan}(x, \sqrt{1-x^2}) \\
-% \operatorname{asec} x & = \operatorname{atan}(\sqrt{x^2-1}, 1) \\
-% \operatorname{acsc} x & = \operatorname{atan}(1, \sqrt{x^2-1}) \\
-% \operatorname{atan} x & = \operatorname{atan}(x, 1) \\
-% \operatorname{acot} x & = \operatorname{atan}(1, x) .
-% \end{align}
-% Rather than introducing a new function, \texttt{atan2}, the arctangent
-% function \texttt{atan} is overloaded: it can take one or two
-% arguments. In the comments below, following many texts, we call the
-% first argument~$y$ and the second~$x$, because $\operatorname{atan}(y, x) = \operatorname{atan}(y
-% / x)$ is the angular coordinate of the point $(x, y)$.
-%
-% As for direct trigonometric functions, the first step in computing
-% $\operatorname{atan}(y, x)$ is argument reduction. The sign of~$y$ gives that
-% of the result. We distinguish eight regions where the point $(x,
-% \lvert y\rvert)$ can lie, of angular size roughly $\pi/8$,
-% characterized by their \enquote{octant}, between $0$ and~$7$ included. In
-% each region, we compute an arctangent as a Taylor series, then shift
-% this arctangent by the appropriate multiple of $\pi/4$ and sign to get
-% the result. Here is a list of octants, and how we compute the
-% arctangent (we assume $y>0$: otherwise replace $y$ by~$-y$ below):
-% \begin{itemize}
-% \item[0] $0 < \lvert y\rvert < 0.41421 x$, then
-% $\operatorname{atan}\frac{\lvert y\rvert}{x}$
-% is given by a nicely convergent Taylor series;
-% \item[1] $0 < 0.41421 x < \lvert y\rvert < x$, then
-% $\operatorname{atan}\frac{\lvert y\rvert}{x}
-% = \frac{\pi}{4}-\operatorname{atan}\frac{x-\lvert y\rvert}{x+\lvert y\rvert}$;
-% \item[2] $0 < 0.41421 \lvert y\rvert < x < \lvert y\rvert$, then
-% $\operatorname{atan}\frac{\lvert y\rvert}{x}
-% = \frac{\pi}{4}+\operatorname{atan}\frac{-x+\lvert y\rvert}{x+\lvert y\rvert}$;
-% \item[3] $0 < x < 0.41421 \lvert y\rvert$, then
-% $\operatorname{atan}\frac{\lvert y\rvert}{x}
-% = \frac{\pi}{2}-\operatorname{atan}\frac{x}{\lvert y\rvert}$;
-% \item[4] $0 < -x < 0.41421 \lvert y\rvert$, then
-% $\operatorname{atan}\frac{\lvert y\rvert}{x}
-% = \frac{\pi}{2}+\operatorname{atan}\frac{-x}{\lvert y\rvert}$;
-% \item[5] $0 < 0.41421 \lvert y\rvert < -x < \lvert y\rvert$, then
-% $\operatorname{atan}\frac{\lvert y\rvert}{x}
-% =\frac{3\pi}{4}-\operatorname{atan}\frac{x+\lvert y\rvert}{-x+\lvert y\rvert}$;
-% \item[6] $0 < -0.41421 x < \lvert y\rvert < -x$, then
-% $\operatorname{atan}\frac{\lvert y\rvert}{x}
-% =\frac{3\pi}{4}+\operatorname{atan}\frac{-x-\lvert y\rvert}{-x+\lvert y\rvert}$;
-% \item[7] $0 < \lvert y\rvert < -0.41421 x$, then
-% $\operatorname{atan}\frac{\lvert y\rvert}{x}
-% = \pi-\operatorname{atan}\frac{\lvert y\rvert}{-x}$.
-% \end{itemize}
-% In the following, we denote by~$z$ the ratio among
-% $\lvert\frac{y}{x}\rvert$, $\lvert\frac{x}{y}\rvert$,
-% $\lvert\frac{x+y}{x-y}\rvert$, $\lvert\frac{x-y}{x+y}\rvert$ which
-% appears in the right-hand side above.
-%
-% \subsubsection{Arctangent and arccotangent}
-%
-% \begin{macro}[EXP]{\@@_atan_o:Nw, \@@_acot_o:Nw, \@@_atan_default:w}
-% The parsing step manipulates \texttt{atan} and \texttt{acot} like
-% \texttt{min} and \texttt{max}, reading in an array of operands, but
-% also leaves \cs{use_i:nn} or \cs{use_ii:nn} depending on whether the
-% result should be given in radians or in degrees. The helper
-% \cs{@@_parse_function_one_two:nnw} checks that the operand is one or
-% two floating point numbers (not tuples) and leaves its second
-% argument or its tail accordingly (its first argument is used for
-% error messages). More precisely if we are given a single floating
-% point number \cs{@@_atan_default:w} places \cs{c_one_fp} (expanded)
-% after it; otherwise \cs{@@_atan_default:w} is omitted by
-% \cs{@@_parse_function_one_two:nnw}.
-% \begin{macrocode}
-\cs_new:Npn \@@_atan_o:Nw #1
- {
- \@@_parse_function_one_two:nnw
- { #1 { atan } { atand } }
- { \@@_atan_default:w \@@_atanii_o:Nww #1 }
- }
-\cs_new:Npn \@@_acot_o:Nw #1
- {
- \@@_parse_function_one_two:nnw
- { #1 { acot } { acotd } }
- { \@@_atan_default:w \@@_acotii_o:Nww #1 }
- }
-\cs_new:Npe \@@_atan_default:w #1#2#3 @ { #1 #2 #3 \c_one_fp @ }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_atanii_o:Nww, \@@_acotii_o:Nww}
-% If either operand is \texttt{nan}, we return it. If both are
-% normal, we call \cs{@@_atan_normal_o:NNnwNnw}. If both are zero or
-% both infinity, we call \cs{@@_atan_inf_o:NNNw} with argument~$2$,
-% leading to a result among $\{\pm\pi/4, \pm 3\pi/4\}$ (in degrees,
-% $\{\pm 45, \pm 135\}$). Otherwise, one is much bigger than the
-% other, and we call \cs{@@_atan_inf_o:NNNw} with either an argument
-% of~$4$, leading to the values $\pm\pi/2$ (in degrees,~$\pm 90$),
-% or~$0$, leading to $\{\pm 0, \pm\pi\}$ (in degrees, $\{\pm 0,\pm
-% 180\}$). Since $\operatorname{acot}(x, y) = \operatorname{atan}(y, x)$,
-% \cs{@@_acotii_o:ww} simply reverses its two arguments.
-% \begin{macrocode}
-\cs_new:Npn \@@_atanii_o:Nww
- #1 \s_@@ \@@_chk:w #2#3#4; \s_@@ \@@_chk:w #5 #6 @
- {
- \if_meaning:w 3 #2 \@@_case_return_i_o:ww \fi:
- \if_meaning:w 3 #5 \@@_case_return_ii_o:ww \fi:
- \if_case:w
- \if_meaning:w #2 #5
- \if_meaning:w 1 #2 10 \else: 0 \fi:
- \else:
- \if_int_compare:w #2 > #5 \exp_stop_f: 1 \else: 2 \fi:
- \fi:
- \exp_stop_f:
- \@@_case_return:nw { \@@_atan_inf_o:NNNw #1 #3 2 }
- \or: \@@_case_return:nw { \@@_atan_inf_o:NNNw #1 #3 4 }
- \or: \@@_case_return:nw { \@@_atan_inf_o:NNNw #1 #3 0 }
- \fi:
- \@@_atan_normal_o:NNnwNnw #1
- \s_@@ \@@_chk:w #2#3#4;
- \s_@@ \@@_chk:w #5 #6
- }
-\cs_new:Npn \@@_acotii_o:Nww #1#2; #3;
- { \@@_atanii_o:Nww #1#3; #2; }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_atan_inf_o:NNNw}
-% This auxiliary is called whenever one number is $\pm 0$ or
-% $\pm\infty$ (and neither is \nan{}). Then the result only depends
-% on the signs, and its value is a multiple of $\pi/4$. We use the
-% same auxiliary as for normal numbers,
-% \cs{@@_atan_combine_o:NwwwwwN}, with arguments the final sign~|#2|;
-% the octant~|#3|; $\operatorname{atan} z/z=1$ as a fixed point number; $z=0$~as a
-% fixed point number; and $z=0$~as an extended-precision number.
-% Given the values we provide, $\operatorname{atan} z$ is computed to be~$0$,
-% and the result is $[|#3|/2]\cdot\pi/4$ if the sign~|#5| of~$x$
-% is positive, and $[(7-|#3|)/2]\cdot\pi/4$ for negative~$x$, where
-% the divisions are rounded up.
-% \begin{macrocode}
-\cs_new:Npn \@@_atan_inf_o:NNNw #1#2#3 \s_@@ \@@_chk:w #4#5#6;
- {
- \exp_after:wN \@@_atan_combine_o:NwwwwwN
- \exp_after:wN #2
- \int_value:w \@@_int_eval:w
- \if_meaning:w 2 #5 7 - \fi: #3 \exp_after:wN ;
- \c_@@_one_fixed_tl
- {0000}{0000}{0000}{0000}{0000}{0000};
- 0,{0000}{0000}{0000}{0000}{0000}{0000}; #1
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_atan_normal_o:NNnwNnw}
-% Here we simply reorder the floating point data into a pair of signed
-% extended-precision numbers, that is, a sign, an exponent ending with
-% a comma, and a six-block mantissa ending with a semi-colon. This
-% extended precision is required by other inverse trigonometric
-% functions, to compute things like $\operatorname{atan}(x,\sqrt{1-x^2})$ without
-% intermediate rounding errors.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_atan_normal_o:NNnwNnw
- #1 \s_@@ \@@_chk:w 1#2#3#4; \s_@@ \@@_chk:w 1#5#6#7;
- {
- \@@_atan_test_o:NwwNwwN
- #2 #3, #4{0000}{0000};
- #5 #6, #7{0000}{0000}; #1
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_atan_test_o:NwwNwwN}
-% This receives: the sign~|#1| of~$y$, its exponent~|#2|, its $24$
-% digits~|#3| in groups of~$4$, and similarly for~$x$. We prepare to
-% call \cs{@@_atan_combine_o:NwwwwwN} which expects the sign~|#1|, the
-% octant, the ratio $(\operatorname{atan} z)/z = 1 - \cdots$, and the value of~$z$,
-% both as a fixed point number and as an extended-precision floating
-% point number with a mantissa in $[0.01,1)$. For now, we place |#1|
-% as a first argument, and start an integer expression for the octant.
-% The sign of $x$ does not affect~$z$, so we simply leave
-% a contribution to the octant: $\meta{octant} \to 7 - \meta{octant}$
-% for negative~$x$. Then we order $\lvert y\rvert$ and $\lvert
-% x\rvert$ in a non-decreasing order: if $\lvert y\rvert > \lvert
-% x\rvert$, insert $3-$ in the expression for the octant, and swap the
-% two numbers. The finer test with $0.41421$ is done by
-% \cs{@@_atan_div:wnwwnw} after the operands have been ordered.
-% \begin{macrocode}
-\cs_new:Npn \@@_atan_test_o:NwwNwwN #1#2,#3; #4#5,#6;
- {
- \exp_after:wN \@@_atan_combine_o:NwwwwwN
- \exp_after:wN #1
- \int_value:w \@@_int_eval:w
- \if_meaning:w 2 #4
- 7 - \@@_int_eval:w
- \fi:
- \if_int_compare:w
- \@@_ep_compare:wwww #2,#3; #5,#6; > \c_zero_int
- 3 -
- \exp_after:wN \@@_reverse_args:Nww
- \fi:
- \@@_atan_div:wnwwnw #2,#3; #5,#6;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_atan_div:wnwwnw, \@@_atan_near:wwwn}
-% \begin{macro}[EXP]{\@@_atan_near_aux:wwn}
-% This receives two positive numbers $a$ and~$b$ (equal to $\lvert
-% x\rvert$ and~$\lvert y\rvert$ in some order), each as an exponent
-% and $6$~blocks of $4$~digits, such that $0<a<b$. If $0.41421b<a$,
-% the two numbers are \enquote{near}, hence the point $(y,x)$ that we
-% started with is closer to the diagonals $\{\lvert y\rvert = \lvert
-% x\rvert\}$ than to the axes $\{xy = 0\}$. In that case, the octant
-% is~$1$ (possibly combined with the $7-$ and $3-$ inserted earlier)
-% and we wish to compute $\operatorname{atan}\frac{b-a}{a+b}$. Otherwise, the
-% octant is~$0$ (again, combined with earlier terms) and we wish to
-% compute $\operatorname{atan}\frac{a}{b}$. In any case, call \cs{@@_atan_auxi:ww}
-% followed by~$z$, as a comma-delimited exponent and a fixed point
-% number.
-% \begin{macrocode}
-\cs_new:Npn \@@_atan_div:wnwwnw #1,#2#3; #4,#5#6;
- {
- \if_int_compare:w
- \@@_int_eval:w 41421 * #5 < #2 000
- \if_case:w \@@_int_eval:w #4 - #1 \@@_int_eval_end:
- 00 \or: 0 \fi:
- \exp_stop_f:
- \exp_after:wN \@@_atan_near:wwwn
- \fi:
- 0
- \@@_ep_div:wwwwn #1,{#2}#3; #4,{#5}#6;
- \@@_atan_auxi:ww
- }
-\cs_new:Npn \@@_atan_near:wwwn
- 0 \@@_ep_div:wwwwn #1,#2; #3,
- {
- 1
- \@@_ep_to_fixed:wwn #1 - #3, #2;
- \@@_atan_near_aux:wwn
- }
-\cs_new:Npn \@@_atan_near_aux:wwn #1; #2;
- {
- \@@_fixed_add:wwn #1; #2;
- { \@@_fixed_sub:wwn #2; #1; { \@@_ep_div:wwwwn 0, } 0, }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_atan_auxi:ww, \@@_atan_auxii:w}
-% Convert~$z$ from a representation as an exponent and a fixed point
-% number in $[0.01,1)$ to a fixed point number only, then set up the
-% call to \cs{@@_atan_Taylor_loop:www}, followed by the fixed point
-% representation of~$z$ and the old representation.
-% \begin{macrocode}
-\cs_new:Npn \@@_atan_auxi:ww #1,#2;
- { \@@_ep_to_fixed:wwn #1,#2; \@@_atan_auxii:w #1,#2; }
-\cs_new:Npn \@@_atan_auxii:w #1;
- {
- \@@_fixed_mul:wwn #1; #1;
- {
- \@@_atan_Taylor_loop:www 39 ;
- {0000}{0000}{0000}{0000}{0000}{0000} ;
- }
- ! #1;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {\@@_atan_Taylor_loop:www, \@@_atan_Taylor_break:w}
-% We compute the series of $(\operatorname{atan} z)/z$. A typical intermediate
-% stage has $|#1|=2k-1$, $|#2| =
-% \frac{1}{2k+1}-z^2(\frac{1}{2k+3}-z^2(\cdots-z^2\frac{1}{39}))$, and
-% $|#3|=z^2$. To go to the next step $k\to k-1$, we compute
-% $\frac{1}{2k-1}$, then subtract from it $z^2$ times |#2|. The loop
-% stops when $k=0$: then |#2| is $(\operatorname{atan} z)/z$, and there is a need to
-% clean up all the unnecessary data, end the integer expression
-% computing the octant with a semicolon, and leave the result~|#2|
-% afterwards.
-% \begin{macrocode}
-\cs_new:Npn \@@_atan_Taylor_loop:www #1; #2; #3;
- {
- \if_int_compare:w #1 = - \c_one_int
- \@@_atan_Taylor_break:w
- \fi:
- \exp_after:wN \@@_fixed_div_int:wwN \c_@@_one_fixed_tl #1;
- \@@_rrot:www \@@_fixed_mul_sub_back:wwwn #2; #3;
- {
- \exp_after:wN \@@_atan_Taylor_loop:www
- \int_value:w \@@_int_eval:w #1 - 2 ;
- }
- #3;
- }
-\cs_new:Npn \@@_atan_Taylor_break:w
- \fi: #1 \@@_fixed_mul_sub_back:wwwn #2; #3 !
- { \fi: ; #2 ; }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {\@@_atan_combine_o:NwwwwwN, \@@_atan_combine_aux:ww}
-% This receives a \meta{sign}, an \meta{octant}, a fixed point value
-% of $(\operatorname{atan} z)/z$, a fixed point number~$z$, and another
-% representation of~$z$, as an \meta{exponent} and the fixed point
-% number $10^{-\meta{exponent}} z$, followed by either \cs{use_i:nn}
-% (when working in radians) or \cs{use_ii:nn} (when working in
-% degrees). The function computes the floating point result
-% \begin{equation}
-% \meta{sign} \left(
-% \left\lceil\frac{\meta{octant}}{2}\right\rceil
-% \frac{\pi}{4}
-% + (-1)^{\meta{octant}} \frac{\operatorname{atan} z}{z} \cdot z\right) \,,
-% \end{equation}
-% multiplied by $180/\pi$ if working in degrees, and using in any case
-% the most appropriate representation of~$z$. The floating point
-% result is passed to \cs{@@_sanitize:Nw}, which checks for overflow
-% or underflow. If the octant is~$0$, leave the exponent~|#5| for
-% \cs{@@_sanitize:Nw}, and multiply $|#3|=\frac{\operatorname{atan} z}{z}$
-% with~|#6|, the adjusted~$z$. Otherwise, multiply $|#3|=\frac{\operatorname{atan}
-% z}{z}$ with $|#4|=z$, then compute the appropriate multiple of
-% $\frac{\pi}{4}$ and add or subtract the product $|#3|\cdot|#4|$. In
-% both cases, convert to a floating point with
-% \cs{@@_fixed_to_float_o:wN}.
-% \begin{macrocode}
-\cs_new:Npn \@@_atan_combine_o:NwwwwwN #1 #2; #3; #4; #5,#6; #7
- {
- \exp_after:wN \@@_sanitize:Nw
- \exp_after:wN #1
- \int_value:w \@@_int_eval:w
- \if_meaning:w 0 #2
- \exp_after:wN \use_i:nn
- \else:
- \exp_after:wN \use_ii:nn
- \fi:
- { #5 \@@_fixed_mul:wwn #3; #6; }
- {
- \@@_fixed_mul:wwn #3; #4;
- {
- \exp_after:wN \@@_atan_combine_aux:ww
- \int_value:w \@@_int_eval:w #2 / 2 ; #2;
- }
- }
- { #7 \@@_fixed_to_float_o:wN \@@_fixed_to_float_rad_o:wN }
- #1
- }
-\cs_new:Npn \@@_atan_combine_aux:ww #1; #2;
- {
- \@@_fixed_mul_short:wwn
- {7853}{9816}{3397}{4483}{0961}{5661};
- {#1}{0000}{0000};
- {
- \if_int_odd:w #2 \exp_stop_f:
- \exp_after:wN \@@_fixed_sub:wwn
- \else:
- \exp_after:wN \@@_fixed_add:wwn
- \fi:
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Arcsine and arccosine}
-%
-% \begin{macro}[EXP]{\@@_asin_o:w}
-% Again, the first argument provided by \pkg{l3fp-parse} is
-% \cs{use_i:nn} if we are to work in radians and \cs{use_ii:nn} for
-% degrees. Then comes a floating point number. The arcsine of $\pm
-% 0$ or \nan{} is the same floating point number. The arcsine of
-% $\pm\infty$ raises an invalid operation exception. Otherwise, call
-% an auxiliary common with \cs{@@_acos_o:w}, feeding it information
-% about what function is being performed (for \enquote{invalid operation}
-% exceptions).
-% \begin{macrocode}
-\cs_new:Npn \@@_asin_o:w #1 \s_@@ \@@_chk:w #2#3; @
- {
- \if_case:w #2 \exp_stop_f:
- \@@_case_return_same_o:w
- \or:
- \@@_case_use:nw
- { \@@_asin_normal_o:NfwNnnnnw #1 { #1 { asin } { asind } } }
- \or:
- \@@_case_use:nw
- { \@@_invalid_operation_o:fw { #1 { asin } { asind } } }
- \else:
- \@@_case_return_same_o:w
- \fi:
- \s_@@ \@@_chk:w #2 #3;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_acos_o:w}
-% The arccosine of $\pm 0$ is $\pi / 2$ (in degrees,~$90$). The
-% arccosine of $\pm\infty$ raises an invalid operation exception. The
-% arccosine of \nan{} is itself. Otherwise, call an auxiliary common
-% with \cs{@@_sin_o:w}, informing it that it was called by
-% \texttt{acos} or \texttt{acosd}, and preparing to swap some
-% arguments down the line.
-% \begin{macrocode}
-\cs_new:Npn \@@_acos_o:w #1 \s_@@ \@@_chk:w #2#3; @
- {
- \if_case:w #2 \exp_stop_f:
- \@@_case_use:nw { \@@_atan_inf_o:NNNw #1 0 4 }
- \or:
- \@@_case_use:nw
- {
- \@@_asin_normal_o:NfwNnnnnw #1 { #1 { acos } { acosd } }
- \@@_reverse_args:Nww
- }
- \or:
- \@@_case_use:nw
- { \@@_invalid_operation_o:fw { #1 { acos } { acosd } } }
- \else:
- \@@_case_return_same_o:w
- \fi:
- \s_@@ \@@_chk:w #2 #3;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_asin_normal_o:NfwNnnnnw}
-% If the exponent~|#5| is at most $0$, the operand lies
-% within $(-1,1)$ and the operation is permitted: call
-% \cs{@@_asin_auxi_o:NnNww} with the appropriate arguments. If the
-% number is exactly~$\pm 1$ (the test works because we know that
-% $|#5|\geq 1$, $|#6#7|\geq 10000000$, $|#8#9|\geq 0$, with equality
-% only for $\pm 1$), we also call \cs{@@_asin_auxi_o:NnNww}.
-% Otherwise, \cs{@@_use_i:ww} gets rid of the \texttt{asin} auxiliary,
-% and raises instead an invalid operation, because the operand is
-% outside the domain of arcsine or arccosine.
-% \begin{macrocode}
-\cs_new:Npn \@@_asin_normal_o:NfwNnnnnw
- #1#2#3 \s_@@ \@@_chk:w 1#4#5#6#7#8#9;
- {
- \if_int_compare:w #5 < \c_one_int
- \exp_after:wN \@@_use_none_until_s:w
- \fi:
- \if_int_compare:w \@@_int_eval:w #5 + #6#7 + #8#9 = 1000 0001 ~
- \exp_after:wN \@@_use_none_until_s:w
- \fi:
- \@@_use_i:ww
- \@@_invalid_operation_o:fw {#2}
- \s_@@ \@@_chk:w 1#4{#5}{#6}{#7}{#8}{#9};
- \@@_asin_auxi_o:NnNww
- #1 {#3} #4 #5,{#6}{#7}{#8}{#9}{0000}{0000};
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_asin_auxi_o:NnNww, \@@_asin_isqrt:wn}
-% We compute $x/\sqrt{1-x^2}$. This function is used by \texttt{asin}
-% and \texttt{acos}, but also by \texttt{acsc} and \texttt{asec} after
-% inverting the operand, thus it must manipulate extended-precision
-% numbers. First evaluate $1-x^2$ as $(1+x)(1-x)$: this behaves
-% better near~$x=1$. We do the addition/subtraction with fixed point
-% numbers (they are not implemented for extended-precision floats),
-% but go back to extended-precision floats to multiply and compute the
-% inverse square root $1/\sqrt{1-x^2}$. Finally, multiply by the
-% (positive) extended-precision float $\lvert x\rvert$, and feed the
-% (signed) result, and the number~$+1$, as arguments to the arctangent
-% function. When computing the arccosine, the arguments
-% $x/\sqrt{1-x^2}$ and~$+1$ are swapped by~|#2|
-% (\cs{@@_reverse_args:Nww} in that case) before
-% \cs{@@_atan_test_o:NwwNwwN} is evaluated. Note that the arctangent
-% function requires normalized arguments, hence the need for
-% \texttt{ep_to_ep} and \texttt{continue} after \texttt{ep_mul}.
-% \begin{macrocode}
-\cs_new:Npn \@@_asin_auxi_o:NnNww #1#2#3#4,#5;
- {
- \@@_ep_to_fixed:wwn #4,#5;
- \@@_asin_isqrt:wn
- \@@_ep_mul:wwwwn #4,#5;
- \@@_ep_to_ep:wwN
- \@@_fixed_continue:wn
- { #2 \@@_atan_test_o:NwwNwwN #3 }
- 0 1,{1000}{0000}{0000}{0000}{0000}{0000}; #1
- }
-\cs_new:Npn \@@_asin_isqrt:wn #1;
- {
- \exp_after:wN \@@_fixed_sub:wwn \c_@@_one_fixed_tl #1;
- {
- \@@_fixed_add_one:wN #1;
- \@@_fixed_continue:wn { \@@_ep_mul:wwwwn 0, } 0,
- }
- \@@_ep_isqrt:wwn
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Arccosecant and arcsecant}
-%
-% \begin{macro}[EXP]{\@@_acsc_o:w}
-% Cases are mostly labelled by~|#2|, except when |#2| is~$2$: then we
-% use |#3#2|, which is $02=2$ when the number is $+\infty$ and
-% $22$~when the number is $-\infty$. The arccosecant of $\pm 0$
-% raises an invalid operation exception. The arccosecant of
-% $\pm\infty$ is $\pm 0$ with the same sign. The arcosecant of \nan{}
-% is itself. Otherwise, \cs{@@_acsc_normal_o:NfwNnw} does some more
-% tests, keeping the function name (\texttt{acsc} or \texttt{acscd})
-% as an argument for invalid operation exceptions.
-% \begin{macrocode}
-\cs_new:Npn \@@_acsc_o:w #1 \s_@@ \@@_chk:w #2#3#4; @
- {
- \if_case:w \if_meaning:w 2 #2 #3 \fi: #2 \exp_stop_f:
- \@@_case_use:nw
- { \@@_invalid_operation_o:fw { #1 { acsc } { acscd } } }
- \or: \@@_case_use:nw
- { \@@_acsc_normal_o:NfwNnw #1 { #1 { acsc } { acscd } } }
- \or: \@@_case_return_o:Nw \c_zero_fp
- \or: \@@_case_return_same_o:w
- \else: \@@_case_return_o:Nw \c_minus_zero_fp
- \fi:
- \s_@@ \@@_chk:w #2 #3 #4;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_asec_o:w}
-% The arcsecant of $\pm 0$ raises an invalid operation exception. The
-% arcsecant of $\pm\infty$ is $\pi / 2$ (in degrees,~$90$). The
-% arcosecant of \nan{} is itself. Otherwise, do some more tests,
-% keeping the function name \texttt{asec} (or \texttt{asecd}) as an
-% argument for invalid operation exceptions, and a
-% \cs{@@_reverse_args:Nww} following precisely that appearing in
-% \cs{@@_acos_o:w}.
-% \begin{macrocode}
-\cs_new:Npn \@@_asec_o:w #1 \s_@@ \@@_chk:w #2#3; @
- {
- \if_case:w #2 \exp_stop_f:
- \@@_case_use:nw
- { \@@_invalid_operation_o:fw { #1 { asec } { asecd } } }
- \or:
- \@@_case_use:nw
- {
- \@@_acsc_normal_o:NfwNnw #1 { #1 { asec } { asecd } }
- \@@_reverse_args:Nww
- }
- \or: \@@_case_use:nw { \@@_atan_inf_o:NNNw #1 0 4 }
- \else: \@@_case_return_same_o:w
- \fi:
- \s_@@ \@@_chk:w #2 #3;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_acsc_normal_o:NfwNnw}
-% If the exponent is non-positive, the operand is less than~$1$ in
-% absolute value, which is always an invalid operation: complain.
-% Otherwise, compute the inverse of the operand, and feed it to
-% \cs{@@_asin_auxi_o:NnNww} (with all the appropriate arguments). This
-% computes what we want thanks to
-% $\operatorname{acsc}(x)=\operatorname{asin}(1/x)$ and
-% $\operatorname{asec}(x)=\operatorname{acos}(1/x)$.
-% \begin{macrocode}
-\cs_new:Npn \@@_acsc_normal_o:NfwNnw #1#2#3 \s_@@ \@@_chk:w 1#4#5#6;
- {
- \int_compare:nNnTF {#5} < 1
- {
- \@@_invalid_operation_o:fw {#2}
- \s_@@ \@@_chk:w 1#4{#5}#6;
- }
- {
- \@@_ep_div:wwwwn
- 1,{1000}{0000}{0000}{0000}{0000}{0000};
- #5,#6{0000}{0000};
- { \@@_asin_auxi_o:NnNww #1 {#3} #4 }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintChanges
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3fp-types.dtx b/macros/latex/contrib/l3kernel/l3fp-types.dtx
deleted file mode 100644
index 0d589c9549..0000000000
--- a/macros/latex/contrib/l3kernel/l3fp-types.dtx
+++ /dev/null
@@ -1,184 +0,0 @@
-% \iffalse
-%
-%% File l3fp-types.dtx (C) Copyright 2012-2015,2017,2018,2020,2021,2023 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% http://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full]{l3doc}
-\usepackage{amsmath}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3fp-types} module\\ Floating point types^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3fp-types} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=fp>
-% \end{macrocode}
-%
-% \subsection{Support for types}
-%
-% Despite lack of documentation, the \pkg{l3fp} internals support types.
-% Each additional type must define
-% \begin{itemize}
-% \item |\s__fp_|\meta{type} and |\__fp_|\meta{type}|_chk:w|;
-% \item |\__fp_exp_after_|\meta{type}|_f:nw|;
-% \item |\__fp_|\meta{type}|_to_|\meta{out}|:w| for \meta{out} among
-% |decimal|, |scientific|, |tl|;
-% \end{itemize}
-% and may define
-% \begin{itemize}
-% \item |\__fp_|\meta{type}|_to_int:w| and |\__fp_|\meta{type}|_to_dim:w|;
-% \item |\__fp_|\meta{op}|_|\meta{type}|_o:w| for any of the \meta{op}
-% that the type implements, among |acos|, |acsc|, |asec|, |asin|,
-% |cos|, |cot|, |csc|, |exp|, |ln|, |not|, |sec|, |set_sign|, |sin|,
-% |tan|;
-% \item |\__fp_|\meta{type_1}|_|\meta{op}|_|\meta{type_2}|_o:ww| for
-% \meta{op} among |^*/-+&|\verb"|" and for every pair of types;
-% \item |\__fp_|\meta{type_1}|_bcmp_|\meta{type_2}|:ww| for every
-% pair of types.
-% \end{itemize}
-% The latter is set up in \pkg{l3fp-logic}.
-%
-% \subsection{Dispatch according to the type}
-%
-% \begin{macro}[EXP]
-% {\@@_types_cs_to_op:N, \@@_types_cs_to_op_auxi:wwwn}
-% From |\__fp_|\meta{op}|_o:w| produce \meta{op}, otherwise~|?|.
-% \begin{macrocode}
-\cs_new:Npe \@@_types_cs_to_op:N #1
- {
- \exp_not:N \exp_after:wN \exp_not:N \@@_types_cs_to_op_auxi:wwwn
- \exp_not:N \token_to_str:N #1 \s_@@_mark
- \exp_not:N \@@_use_i_delimit_by_s_stop:nw
- \tl_to_str:n { @@_ _o:w } \s_@@_mark
- { \exp_not:N \@@_use_i_delimit_by_s_stop:nw ? }
- \s_@@_stop
- }
-\use:e
- {
- \cs_new:Npn \exp_not:N \@@_types_cs_to_op_auxi:wwwn
- #1 \tl_to_str:n { @@_ } #2
- \tl_to_str:n { _o:w } #3 \s_@@_mark #4 { #4 {#2} }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_types_unary:NNw}
-% \begin{macro}[EXP]
-% {\@@_types_unary_auxi:nNw, \@@_types_unary_auxii:NnNw}
-% \begin{syntax}
-% \cs{@@_types_unary:NNw} |\__fp_|\meta{function}|_o:w|
-% ~~\meta{token} \meta{operand} |@|
-% \end{syntax}
-% \begin{macrocode}
-\cs_new:Npn \@@_types_unary:NNw #1
- {
- \exp_args:Nf \@@_types_unary_auxi:nNw
- { \@@_types_cs_to_op:N #1 }
- }
-\cs_new:Npn \@@_types_unary_auxi:nNw #1#2#3
- {
- \exp_after:wN \@@_types_unary_auxii:NnNw
- \cs:w @@_#1 \@@_type_from_scan:N #3 _o:w \cs_end:
- {#1}
- #2#3
- }
-\cs_new:Npn \@@_types_unary_auxii:NnNw #1#2#3
- {
- \token_if_eq_meaning:NNTF \scan_stop: #1
- { \@@_invalid_operation_o:nw {#2} }
- { #1 #3 }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_types_binary:Nww}
-% \begin{macro}[EXP]
-% {\@@_types_binary_auxi:Nww, \@@_types_binary_auxii:NNww}
-% \begin{syntax}
-% \cs{@@_types_binary:Nww} |\__fp_|\meta{binop}|_o:ww|
-% ~~\meta{operand_1} \meta{operand_2} |@|
-% \end{syntax}
-% \begin{macrocode}
-\cs_new:Npn \@@_types_binary:Nww #1
- {
- \exp_last_unbraced:Nf \@@_types_binary_auxi:Nww
- { \@@_types_cs_to_op:N #1 }
- }
-\cs_new:Npn \@@_types_binary_auxi:Nww #1#2#3; #4#5; @
- {
- \exp_after:wN \@@_types_binary_auxii:NNww
- \cs:w
- @@
- \@@_type_from_scan:N #2
- _#1
- \@@_type_from_scan:N #4
- _o:ww
- \cs_end:
- #1 #2#3; #4#5;
- }
-\cs_new:Npn \@@_types_binary_auxii:NNww #1#2
- {
- \token_if_eq_meaning:NNTF \scan_stop: #1
- { \@@_invalid_operation_o:Nww #2 }
- {#1}
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3fp.dtx b/macros/latex/contrib/l3kernel/l3fp.dtx
deleted file mode 100644
index 11dbcdceef..0000000000
--- a/macros/latex/contrib/l3kernel/l3fp.dtx
+++ /dev/null
@@ -1,1663 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3fp.dtx
-%
-% Copyright (C) 2011-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\usepackage{amsmath}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% ^^A need to provide this inside the file:
-%
-% \providecommand\nan{\texttt{NaN}}
-%
-%
-% \title{^^A
-% The \pkg{l3fp} module\\ Floating points^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% A decimal floating point number is one which is stored as a significand and a
-% separate exponent. The module implements expandably a wide set of
-% arithmetic, trigonometric, and other operations on decimal floating point
-% numbers, to be used within floating point expressions. \emph{Floating point
-% expressions} (\enquote{\meta{fp expr}}) support the following operations with their usual
-% precedence.
-% \begin{itemize}
-% \item Basic arithmetic: addition $x+y$, subtraction $x-y$,
-% multiplication $x*y$, division $x/y$, square root~$\sqrt{x}$,
-% and parentheses.
-% \item Comparison operators: $x\mathop{\mathtt{<}}y$,
-% $x\mathop{\mathtt{<=}}y$, $x\mathop{\mathtt{>?}}y$,
-% $x\mathop{\mathtt{!=}}y$ \emph{etc.}
-% \item Boolean logic: sign $\operatorname{sign} x$,
-% negation $\mathop{!}x$, conjunction
-% $x\mathop{\&\&}y$, disjunction $x\mathop{\vert\vert}y$, ternary
-% operator $x\mathop{?}y\mathop{:}z$.
-% \item Exponentials: $\exp x$, $\ln x$, $x^y$, $\operatorname{logb} x$.
-% \item Integer factorial: $\operatorname{fact} x$.
-% \item Trigonometry: $\sin x$, $\cos x$, $\tan x$, $\cot x$, $\sec
-% x$, $\csc x$ expecting their arguments in radians, and
-% $\operatorname{sind} x$, $\operatorname{cosd} x$,
-% $\operatorname{tand} x$, $\operatorname{cotd} x$,
-% $\operatorname{secd} x$, $\operatorname{cscd} x$ expecting their
-% arguments in degrees.
-% \item Inverse trigonometric functions: $\operatorname{asin} x$,
-% $\operatorname{acos} x$, $\operatorname{atan} x$,
-% $\operatorname{acot} x$, $\operatorname{asec} x$,
-% $\operatorname{acsc} x$ giving a result in radians, and
-% $\operatorname{asind} x$, $\operatorname{acosd} x$,
-% $\operatorname{atand} x$, $\operatorname{acotd} x$,
-% $\operatorname{asecd} x$, $\operatorname{acscd} x$ giving a result
-% in degrees.
-% \item [\emph{(not yet)}] Hyperbolic functions and their inverse
-% functions: $\sinh x$, $\cosh x$, $\tanh x$, $\coth x$,
-% $\operatorname{sech} x$, $\operatorname{csch}$, and
-% $\operatorname{asinh} x$, $\operatorname{acosh} x$,
-% $\operatorname{atanh} x$, $\operatorname{acoth} x$,
-% $\operatorname{asech} x$, $\operatorname{acsch} x$.
-% \item Extrema: $\max(x_{1},x_{2},\ldots)$, $\min(x_{1},x_{2},\ldots)$,
-% $\operatorname{abs}(x)$.
-% \item Rounding functions, controlled by two optional
-% values, $n$ (number of places, $0$ by default) and
-% $t$ (behavior on a tie, $\nan$ by default):
-% \begin{itemize}
-% \item $\operatorname{trunc}(x,n)$ rounds towards zero,
-% \item $\operatorname{floor}(x,n)$ rounds towards~$-\infty$,
-% \item $\operatorname{ceil}(x,n)$ rounds towards~$+\infty$,
-% \item $\operatorname{round}(x,n,t)$ rounds to the closest value, with
-% ties rounded to an even value by default, towards zero if $t=0$,
-% towards $+\infty$ if $t>0$ and towards $-\infty$ if $t<0$.
-% \end{itemize}
-% And \emph{(not yet)} modulo, and \enquote{quantize}.
-% \item Random numbers: $\mathop{rand}()$, $\mathop{randint}(m,n)$.
-% \item Constants: \texttt{pi}, \texttt{deg} (one degree in radians).
-% \item Dimensions, automatically expressed in points, \emph{e.g.},
-% \texttt{pc} is~$12$.
-% \item Automatic conversion (no need for \cs[no-index]{\meta{type}_use:N}) of
-% integer, dimension, and skip variables to floating point numbers,
-% expressing dimensions in points and ignoring the stretch and
-% shrink components of skips.
-% \item Tuples: $(x_1,\ldots{},x_n)$ that can be stored in variables,
-% added together, multiplied or divided by a floating point number,
-% and nested.
-% \end{itemize}
-% Floating point numbers can be given either explicitly (in a form such
-% as |1.234e-34|, or |-.0001|), or as a stored floating point variable,
-% which is automatically replaced by its current value.
-% A \enquote{floating point} is a floating point number or a tuple thereof. See
-% section~\ref{sec:l3fp:fp-floats} for a description of what a floating point is,
-% section~\ref{sec:l3fp:fp-precedence} for details about how an expression is
-% parsed, and section~\ref{sec:l3fp:fp-operations} to know what the various
-% operations do. Some operations may raise exceptions (error messages),
-% described in section~\ref{sec:l3fp:fp-exceptions}.
-%
-% An example of use could be the following.
-% \begin{verbatim}
-% \LaTeX{} can now compute: $ \frac{\sin (3.5)}{2} + 2\cdot 10^{-3}
-% = \ExplSyntaxOn \fp_to_decimal:n {sin(3.5)/2 + 2e-3} $.
-% \end{verbatim}
-% The operation \texttt{round} can be used to limit the result's
-% precision. Adding $+0$ avoids the possibly undesirable output |-0|,
-% replacing it by |+0|. However, the \pkg{l3fp} module is mostly meant
-% as an underlying tool for higher-level commands. For example, one
-% could provide a function to typeset nicely the result of floating
-% point computations.
-% \begin{verbatim}
-% \documentclass{article}
-% \usepackage{siunitx}
-% \ExplSyntaxOn
-% \NewDocumentCommand { \calcnum } { m }
-% { \num { \fp_to_scientific:n {#1} } }
-% \ExplSyntaxOff
-% \begin{document}
-% \calcnum { 2 pi * sin ( 2.3 ^ 5 ) }
-% \end{document}
-% \end{verbatim}
-% See the documentation of \pkg{siunitx} for various options of
-% \cs{num}.
-%
-% \section{Creating and initialising floating point variables}
-%
-% \begin{function}[updated = 2012-05-08, tested = m3fp001]
-% {\fp_new:N, \fp_new:c}
-% \begin{syntax}
-% \cs{fp_new:N} \meta{fp~var}
-% \end{syntax}
-% Creates a new \meta{fp~var} or raises an error if the name is
-% already taken. The declaration is global. The \meta{fp~var} is
-% initially~$+0$.
-% \end{function}
-%
-% \begin{function}[updated = 2012-05-08, tested = m3fp001]
-% {\fp_const:Nn, \fp_const:cn}
-% \begin{syntax}
-% \cs{fp_const:Nn} \meta{fp~var} \Arg{fp expr}
-% \end{syntax}
-% Creates a new constant \meta{fp~var} or raises an error if the name
-% is already taken. The \meta{fp~var} is set globally equal to
-% the result of evaluating the \meta{fp expr}.
-% \end{function}
-%
-% \begin{function}[updated = 2012-05-08, tested = m3fp001]
-% {\fp_zero:N, \fp_zero:c, \fp_gzero:N, \fp_gzero:c}
-% \begin{syntax}
-% \cs{fp_zero:N} \meta{fp~var}
-% \end{syntax}
-% Sets the \meta{fp~var} to~$+0$.
-% \end{function}
-%
-% \begin{function}[updated = 2012-05-08, tested = m3fp001]
-% {\fp_zero_new:N, \fp_zero_new:c, \fp_gzero_new:N, \fp_gzero_new:c}
-% \begin{syntax}
-% \cs{fp_zero_new:N} \meta{fp~var}
-% \end{syntax}
-% Ensures that the \meta{fp~var} exists globally
-% by applying \cs{fp_new:N} if necessary, then applies
-% \cs[index=fp_zero:N]{fp_(g)zero:N} to leave the \meta{fp~var} set to~$+0$.
-% \end{function}
-%
-% \section{Setting floating point variables}
-%
-% \begin{function}[updated = 2012-05-08, tested = m3fp002]
-% {\fp_set:Nn, \fp_set:cn, \fp_gset:Nn, \fp_gset:cn}
-% \begin{syntax}
-% \cs{fp_set:Nn} \meta{fp~var} \Arg{fp expr}
-% \end{syntax}
-% Sets \meta{fp~var} equal to the result of computing the
-% \meta{fp expr}.
-% \end{function}
-%
-% \begin{function}[updated = 2012-05-08, tested = m3fp002]
-% {
-% \fp_set_eq:NN , \fp_set_eq:cN , \fp_set_eq:Nc , \fp_set_eq:cc ,
-% \fp_gset_eq:NN, \fp_gset_eq:cN, \fp_gset_eq:Nc, \fp_gset_eq:cc
-% }
-% \begin{syntax}
-% \cs{fp_set_eq:NN} \meta{fp~var_1} \meta{fp~var_2}
-% \end{syntax}
-% Sets the floating point variable \meta{fp~var_1} equal to the current
-% value of \meta{fp~var_2}.
-% \end{function}
-%
-% \begin{function}[updated = 2012-05-08, tested = m3fp002]
-% {\fp_add:Nn, \fp_add:cn, \fp_gadd:Nn, \fp_gadd:cn}
-% \begin{syntax}
-% \cs{fp_add:Nn} \meta{fp~var} \Arg{fp expr}
-% \end{syntax}
-% Adds the result of computing the \meta{fp expr} to
-% the \meta{fp~var}.
-% This also applies if \meta{fp~var} and \meta{floating point
-% expression} evaluate to tuples of the same size.
-% \end{function}
-%
-% \begin{function}[updated = 2012-05-08, tested = m3fp002]
-% {\fp_sub:Nn, \fp_sub:cn, \fp_gsub:Nn, \fp_gsub:cn}
-% \begin{syntax}
-% \cs{fp_sub:Nn} \meta{fp~var} \Arg{fp expr}
-% \end{syntax}
-% Subtracts the result of computing the \meta{floating point
-% expression} from the \meta{fp~var}.
-% This also applies if \meta{fp~var} and \meta{floating point
-% expression} evaluate to tuples of the same size.
-% \end{function}
-%
-% \section{Using floating points}
-%
-% \begin{function}[EXP, added = 2012-05-08, updated = 2012-07-08,
-% tested = m3fp-convert003]{\fp_eval:n}
-% \begin{syntax}
-% \cs{fp_eval:n} \Arg{fp expr}
-% \end{syntax}
-% Evaluates the \meta{fp expr} and expresses the
-% result as a decimal number with no
-% exponent. Leading or trailing zeros may be inserted to compensate
-% for the exponent. Non-significant trailing zeros are trimmed, and
-% integers are expressed without a decimal separator. The values
-% $\pm\infty$ and \nan{} trigger an \enquote{invalid operation}
-% exception.
-% For a tuple, each item is converted using \cs{fp_eval:n} and they are combined as
-% |(|\meta{fp_1}\verb*|, |\meta{fp_2}\verb*|, |\ldots{}\meta{fp_n}|)|
-% if $n>1$ and |(|\meta{fp_1}|,)| or |()| for fewer items.
-% This function is identical to \cs{fp_to_decimal:n}.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2018-11-03]{\fp_sign:n}
-% \begin{syntax}
-% \cs{fp_sign:n} \Arg{fp expr}
-% \end{syntax}
-% Evaluates the \meta{fp expr} and leaves its sign in the input stream
-% using \cs{fp_eval:n} |{sign(|\meta{result}|)}|: $+1$ for positive
-% numbers and for $+\infty$, $-1$ for negative numbers and for
-% $-\infty$, $\pm 0$ for $\pm 0$. If the operand is a tuple or is
-% \nan{}, then \enquote{invalid operation} occurs and the result
-% is~$0$.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2012-05-08, updated = 2012-07-08]
-% {\fp_to_decimal:N, \fp_to_decimal:c, \fp_to_decimal:n}
-% \begin{syntax}
-% \cs{fp_to_decimal:N} \meta{fp~var}
-% \cs{fp_to_decimal:n} \Arg{fp expr}
-% \end{syntax}
-% Evaluates the \meta{fp expr} and expresses the
-% result as a decimal number with no
-% exponent. Leading or trailing zeros may be inserted to compensate
-% for the exponent. Non-significant trailing zeros are trimmed, and
-% integers are expressed without a decimal separator. The values
-% $\pm\infty$ and~\nan{} trigger an \enquote{invalid operation}
-% exception.
-% For a tuple, each item is converted using \cs{fp_to_decimal:n} and they are combined as
-% |(|\meta{fp_1}\verb*|, |\meta{fp_2}\verb*|, |\ldots{}\meta{fp_n}|)|
-% if $n>1$ and |(|\meta{fp_1}|,)| or |()| for fewer items.
-% \end{function}
-%
-% \begin{function}[EXP, updated = 2016-03-22]
-% {\fp_to_dim:N, \fp_to_dim:c, \fp_to_dim:n}
-% \begin{syntax}
-% \cs{fp_to_dim:N} \meta{fp~var}
-% \cs{fp_to_dim:n} \Arg{fp expr}
-% \end{syntax}
-% Evaluates the \meta{fp expr} and expresses the
-% result as a dimension (in~\texttt{pt}) suitable for use in dimension
-% expressions. The output is identical to \cs{fp_to_decimal:n}, with
-% an additional trailing~\texttt{pt} (both letter tokens).
-% In particular, the result may
-% be outside the range $[- 2^{14} + 2^{-17}, 2^{14} - 2^{-17}]$ of
-% valid \TeX{} dimensions, leading to overflow errors if used as a
-% dimension. Tuples, as well as the values $\pm\infty$ and~\nan{},
-% trigger an \enquote{invalid operation} exception.
-% \end{function}
-%
-% \begin{function}[EXP, updated = 2012-07-08]
-% {\fp_to_int:N, \fp_to_int:c, \fp_to_int:n}
-% \begin{syntax}
-% \cs{fp_to_int:N} \meta{fp~var}
-% \cs{fp_to_int:n} \Arg{fp expr}
-% \end{syntax}
-% Evaluates the \meta{fp expr}, and rounds the
-% result to the closest integer, rounding exact ties to an even
-% integer.
-% The result may be outside the range $[- 2^{31} + 1, 2^{31} - 1]$ of
-% valid \TeX{}~integers, leading to overflow errors if used in an
-% integer expression. Tuples, as well as the values $\pm\infty$
-% and~\nan{}, trigger an \enquote{invalid operation} exception.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2012-05-08, updated = 2016-03-22]
-% {\fp_to_scientific:N, \fp_to_scientific:c, \fp_to_scientific:n}
-% \begin{syntax}
-% \cs{fp_to_scientific:N} \meta{fp~var}
-% \cs{fp_to_scientific:n} \Arg{fp expr}
-% \end{syntax}
-% Evaluates the \meta{fp expr} and expresses the
-% result in scientific notation:
-% \begin{quote}
-% \meta{optional \texttt{-}}\meta{digit}\texttt{.}\meta{15 digits}\texttt{e}\meta{optional sign}\meta{exponent}
-% \end{quote}
-% The leading \meta{digit} is non-zero except in the case of $\pm 0$.
-% The values $\pm\infty$ and~\nan{} trigger an \enquote{invalid
-% operation} exception. Normal category codes apply: thus the |e| is
-% category code~$11$ (a letter).
-% For a tuple, each item is converted using \cs{fp_to_scientific:n} and they are combined as
-% |(|\meta{fp_1}\verb*|, |\meta{fp_2}\verb*|, |\ldots{}\meta{fp_n}|)|
-% if $n>1$ and |(|\meta{fp_1}|,)| or |()| for fewer items.
-% \end{function}
-%
-% \begin{function}[EXP, updated = 2016-03-22]
-% {\fp_to_tl:N, \fp_to_tl:c, \fp_to_tl:n}
-% \begin{syntax}
-% \cs{fp_to_tl:N} \meta{fp~var}
-% \cs{fp_to_tl:n} \Arg{fp expr}
-% \end{syntax}
-% Evaluates the \meta{fp expr} and expresses the
-% result in (almost) the shortest possible form. Numbers in the
-% ranges $(0,10^{-3})$ and $[10^{16},\infty)$ are expressed in
-% scientific notation with trailing zeros trimmed and no decimal
-% separator when there is a single significant digit (this differs from
-% \cs{fp_to_scientific:n}). Numbers in the range $[10^{-3},10^{16})$
-% are expressed in a decimal notation without exponent, with trailing
-% zeros trimmed, and no decimal separator for integer values (see
-% \cs{fp_to_decimal:n}. Negative numbers start with~|-|. The
-% special values $\pm 0$, $\pm\infty$ and~\nan{} are rendered as
-% |0|, |-0|, \texttt{inf}, \texttt{-inf}, and~\texttt{nan}
-% respectively. Normal category codes apply and thus \texttt{inf} or
-% \texttt{nan}, if produced, are made up of letters.
-% For a tuple, each item is converted using \cs{fp_to_tl:n} and they are combined as
-% |(|\meta{fp_1}\verb*|, |\meta{fp_2}\verb*|, |\ldots{}\meta{fp_n}|)|
-% if $n>1$ and |(|\meta{fp_1}|,)| or |()| for fewer items.
-% \end{function}
-%
-% \begin{function}[EXP, updated = 2012-07-08]
-% {\fp_use:N, \fp_use:c}
-% \begin{syntax}
-% \cs{fp_use:N} \meta{fp~var}
-% \end{syntax}
-% Inserts the value of the \meta{fp~var} into the input stream as a
-% decimal number with no exponent.
-% Leading or trailing zeros may be inserted to compensate for the
-% exponent. Non-significant trailing zeros are trimmed. Integers are
-% expressed without a decimal separator. The values $\pm\infty$
-% and~\nan{} trigger an \enquote{invalid operation} exception.
-% For a tuple, each item is converted using \cs{fp_to_decimal:n} and they are combined as
-% |(|\meta{fp_1}\verb*|, |\meta{fp_2}\verb*|, |\ldots{}\meta{fp_n}|)|
-% if $n>1$ and |(|\meta{fp_1}|,)| or |()| for fewer items.
-% This function is identical to \cs{fp_to_decimal:N}.
-% \end{function}
-%
-% \section{Floating point conditionals}
-%
-% \begin{function}[EXP, pTF, updated = 2012-05-08, tested = m3fp002]
-% {\fp_if_exist:N, \fp_if_exist:c}
-% \begin{syntax}
-% \cs{fp_if_exist_p:N} \meta{fp~var}
-% \cs{fp_if_exist:NTF} \meta{fp~var} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests whether the \meta{fp~var} is currently defined. This does not
-% check that the \meta{fp~var} really is a floating point variable.
-% \end{function}
-%
-% \begin{function}[EXP, pTF, updated = 2012-05-08,
-% tested = m3fp-logic001]{\fp_compare:nNn}
-% \begin{syntax}
-% \cs{fp_compare_p:nNn} \Arg{fp expr_1} \meta{relation} \Arg{fp expr_2}
-% \cs{fp_compare:nNnTF} \Arg{fp expr_1} \meta{relation} \Arg{fp expr_2} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Compares the \meta{fp expr_1} and the \meta{fp expr_2}, and returns
-% \texttt{true} if the \meta{relation} is obeyed. Two floating points
-% $x$ and~$y$ may obey four mutually exclusive relations:
-% $x<y$, $x=y$, $x>y$, or $x?y$ (\enquote{not ordered}). The last
-% case occurs exactly if one or both operands is~\nan{} or is a tuple,
-% unless they are equal tuples. Note that a~\nan{} is distinct from
-% any value, even another~\nan{}, hence $x=x$ is not true for
-% a~\nan{}. To test if a value is~\nan{}, compare it to an arbitrary
-% number with the \enquote{not ordered} relation.
-% \begin{verbatim}
-% \fp_compare:nNnTF { <value> } ? { 0 }
-% { } % <value> is nan
-% { } % <value> is not nan
-% \end{verbatim}
-% Tuples are equal if they have the same number of items and items
-% compare equal (in particular there must be no~\nan{}).
-% At present any other comparison with tuples yields |?| (not ordered).
-% This is experimental.
-%
-% This function is less flexible than \cs{fp_compare:nTF} but slightly
-% faster. It is provided for consistency with \cs{int_compare:nNnTF}
-% and \cs{dim_compare:nNnTF}.
-% \end{function}
-%
-% \begin{function}[EXP, pTF, updated = 2013-12-14,
-% tested = m3fp-logic001]{\fp_compare:n}
-% \begin{syntax}
-% \cs{fp_compare_p:n} \\
-% ~~\{ \\
-% ~~~~\meta{fp expr_1} \meta{relation_1} \\
-% ~~~~\ldots{} \\
-% ~~~~\meta{fp expr_N} \meta{relation_N} \\
-% ~~~~\meta{fp expr_{N+1}} \\
-% ~~\} \\
-% \cs{fp_compare:nTF}
-% ~~\{ \\
-% ~~~~\meta{fp expr_1} \meta{relation_1} \\
-% ~~~~\ldots{} \\
-% ~~~~\meta{fp expr_N} \meta{relation_N} \\
-% ~~~~\meta{fp expr_{N+1}} \\
-% ~~\} \\
-% ~~\Arg{true code} \Arg{false code}
-% \end{syntax}
-% Evaluates the \meta{fp exprs} as described for
-% \cs{fp_eval:n} and compares consecutive result using the
-% corresponding \meta{relation}, namely it compares \meta{fp expr_1}
-% and \meta{fp expr_2} using the \meta{relation_1}, then
-% \meta{fp expr_2} and \meta{fp expr_3} using the \meta{relation_2},
-% until finally comparing \meta{fp expr_N} and \meta{fp expr_{N+1}}
-% using the \meta{relation_N}. The test yields \texttt{true} if all
-% comparisons are \texttt{true}. Each \meta{floating point
-% expression} is evaluated only once. Contrarily to
-% \cs{int_compare:nTF}, all \meta{fp exprs} are
-% computed, even if one comparison is \texttt{false}. Two floating
-% points $x$ and~$y$ may obey four mutually exclusive
-% relations: $x<y$, $x=y$, $x>y$, or $x?y$ (\enquote{not ordered}).
-% The last case occurs exactly if one or both operands is~\nan{} or is
-% a tuple, unless they are equal tuples. Each \meta{relation}
-% can be any (non-empty) combination of |<|, |=|, |>|, and~|?|, plus
-% an optional leading~|!| (which negates the \meta{relation}), with
-% the restriction that the \meta{relation} may not start with~|?|, as
-% this symbol has a different meaning (in combination with~|:|) within
-% floating point expressions. The comparison $x$~\meta{relation}~$y$
-% is then \texttt{true} if the \meta{relation} does not start with~|!|
-% and the actual relation (|<|, |=|, |>|, or~|?|) between $x$ and~$y$
-% appears within the \meta{relation}, or on the contrary if the
-% \meta{relation} starts with~|!| and the relation between $x$ and~$y$
-% does not appear within the \meta{relation}. Common choices of
-% \meta{relation} include |>=|~(greater or equal), |!=|~(not equal),
-% |!?|~or~|<=>| (comparable).
-%
-% This function is more flexible than \cs{fp_compare:nNnTF} and only
-% slightly slower.
-% \end{function}
-%
-% \begin{function}[pTF, added = 2019-08-25]{\fp_if_nan:n}
-% \begin{syntax}
-% \cs{fp_if_nan_p:n} \Arg{fp expr}
-% \cs{fp_if_nan:nTF} \Arg{fp expr} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Evaluates the \meta{fp expr} and tests whether the result is exactly
-% \nan{}. The test returns \texttt{false} for any other result, even
-% a tuple containing \nan{}.
-% \end{function}
-%
-% \section{Floating point expression loops}
-%
-% \begin{function}[rEXP, added = 2012-08-16, tested = m3fp-logic003]
-% {\fp_do_until:nNnn}
-% \begin{syntax}
-% \cs{fp_do_until:nNnn} \Arg{fp expr_1} \meta{relation} \Arg{fp expr_2} \Arg{code}
-% \end{syntax}
-% Places the \meta{code} in the input stream for \TeX{} to process,
-% and then evaluates the relationship between the two \meta{floating
-% point expressions} as described for \cs{fp_compare:nNnTF}. If the
-% test is \texttt{false} then the \meta{code} is inserted into
-% the input stream again and a loop occurs until the
-% \meta{relation} is \texttt{true}.
-% \end{function}
-%
-% \begin{function}[rEXP, added = 2012-08-16, tested = m3fp-logic003]
-% {\fp_do_while:nNnn}
-% \begin{syntax}
-% \cs{fp_do_while:nNnn} \Arg{fp expr_1} \meta{relation} \Arg{fp expr_2} \Arg{code}
-% \end{syntax}
-% Places the \meta{code} in the input stream for \TeX{} to process,
-% and then evaluates the relationship between the two \meta{floating
-% point expressions} as described for \cs{fp_compare:nNnTF}. If the
-% test is \texttt{true} then the \meta{code} is inserted into the
-% input stream again and a loop occurs until the \meta{relation}
-% is \texttt{false}.
-% \end{function}
-%
-% \begin{function}[rEXP, added = 2012-08-16, tested = m3fp-logic003]
-% {\fp_until_do:nNnn}
-% \begin{syntax}
-% \cs{fp_until_do:nNnn} \Arg{fp expr_1} \meta{relation} \Arg{fp expr_2} \Arg{code}
-% \end{syntax}
-% Evaluates the relationship between the two \meta{floating point
-% expressions} as described for \cs{fp_compare:nNnTF}, and then
-% places the \meta{code} in the input stream if the \meta{relation} is
-% \texttt{false}. After the \meta{code} has been processed by \TeX{}
-% the test is repeated, and a loop occurs until the test is
-% \texttt{true}.
-% \end{function}
-%
-% \begin{function}[rEXP, added = 2012-08-16, tested = m3fp-logic003]
-% {\fp_while_do:nNnn}
-% \begin{syntax}
-% \cs{fp_while_do:nNnn} \Arg{fp expr_1} \meta{relation} \Arg{fp expr_2} \Arg{code}
-% \end{syntax}
-% Evaluates the relationship between the two \meta{floating point
-% expressions} as described for \cs{fp_compare:nNnTF}, and then
-% places the \meta{code} in the input stream if the \meta{relation} is
-% \texttt{true}. After the \meta{code} has been processed by \TeX{}
-% the test is repeated, and a loop occurs until the test is
-% \texttt{false}.
-% \end{function}
-%
-% \begin{function}[rEXP, added = 2012-08-16, updated = 2013-12-14, tested = m3fp-logic003]
-% {\fp_do_until:nn}
-% \begin{syntax}
-% \cs{fp_do_until:nn} \{ \meta{fp expr_1} \meta{relation} \meta{fp expr_2} \} \Arg{code}
-% \end{syntax}
-% Places the \meta{code} in the input stream for \TeX{} to process,
-% and then evaluates the relationship between the two \meta{floating
-% point expressions} as described for \cs{fp_compare:nTF}. If the
-% test is \texttt{false} then the \meta{code} is inserted into
-% the input stream again and a loop occurs until the
-% \meta{relation} is \texttt{true}.
-% \end{function}
-%
-% \begin{function}[rEXP, added = 2012-08-16, updated = 2013-12-14, tested = m3fp-logic003]
-% {\fp_do_while:nn}
-% \begin{syntax}
-% \cs{fp_do_while:nn} \{ \meta{fp expr_1} \meta{relation} \meta{fp expr_2} \} \Arg{code}
-% \end{syntax}
-% Places the \meta{code} in the input stream for \TeX{} to process,
-% and then evaluates the relationship between the two \meta{floating
-% point expressions} as described for \cs{fp_compare:nTF}. If the
-% test is \texttt{true} then the \meta{code} is inserted into the
-% input stream again and a loop occurs until the \meta{relation}
-% is \texttt{false}.
-% \end{function}
-%
-% \begin{function}[rEXP, added = 2012-08-16, updated = 2013-12-14, tested = m3fp-logic003]
-% {\fp_until_do:nn}
-% \begin{syntax}
-% \cs{fp_until_do:nn} \{ \meta{fp expr_1} \meta{relation} \meta{fp expr_2} \} \Arg{code}
-% \end{syntax}
-% Evaluates the relationship between the two \meta{floating point
-% expressions} as described for \cs{fp_compare:nTF}, and then places
-% the \meta{code} in the input stream if the \meta{relation} is
-% \texttt{false}. After the \meta{code} has been processed by \TeX{}
-% the test is repeated, and a loop occurs until the test is
-% \texttt{true}.
-% \end{function}
-%
-% \begin{function}[rEXP, added = 2012-08-16, updated = 2013-12-14, tested = m3fp-logic003]
-% {\fp_while_do:nn}
-% \begin{syntax}
-% \cs{fp_while_do:nn} \{ \meta{fp expr_1} \meta{relation} \meta{fp expr_2} \} \Arg{code}
-% \end{syntax}
-% Evaluates the relationship between the two \meta{floating point
-% expressions} as described for \cs{fp_compare:nTF}, and then places
-% the \meta{code} in the input stream if the \meta{relation} is
-% \texttt{true}. After the \meta{code} has been processed by \TeX{}
-% the test is repeated, and a loop occurs until the test is
-% \texttt{false}.
-% \end{function}
-%
-% \begin{function}[added = 2016-11-21, updated = 2016-12-06, rEXP]
-% {\fp_step_function:nnnN, \fp_step_function:nnnc}
-% \begin{syntax}
-% \cs{fp_step_function:nnnN} \Arg{initial value} \Arg{step} \Arg{final value} \meta{function}
-% \end{syntax}
-% This function first evaluates the \meta{initial value}, \meta{step}
-% and \meta{final value}, each of which should be a floating point
-% expression evaluating to a floating point number, not a tuple.
-% The \meta{function} is then placed in front of each \meta{value}
-% from the \meta{initial value} to the \meta{final value} in turn
-% (using \meta{step} between each \meta{value}). The \meta{step} must
-% be non-zero. If the \meta{step} is positive, the loop stops when
-% the \meta{value} becomes larger than the \meta{final value}. If the
-% \meta{step} is negative, the loop stops when the \meta{value}
-% becomes smaller than the \meta{final value}. The \meta{function}
-% should absorb one numerical argument. For example
-% \begin{verbatim}
-% \cs_set:Npn \my_func:n #1 { [I~saw~#1] \quad }
-% \fp_step_function:nnnN { 1.0 } { 0.1 } { 1.5 } \my_func:n
-% \end{verbatim}
-% would print
-% \begin{quote}
-% [I saw 1.0] \quad
-% [I saw 1.1] \quad
-% [I saw 1.2] \quad
-% [I saw 1.3] \quad
-% [I saw 1.4] \quad
-% [I saw 1.5] \quad
-% \end{quote}
-% \begin{texnote}
-% Due to rounding, it may happen that adding the \meta{step} to the
-% \meta{value} does not change the \meta{value}; such cases give an
-% error, as they would otherwise lead to an infinite loop.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[added = 2016-11-21, updated = 2016-12-06]
-% {\fp_step_inline:nnnn}
-% \begin{syntax}
-% \cs{fp_step_inline:nnnn} \Arg{initial value} \Arg{step} \Arg{final value} \Arg{code}
-% \end{syntax}
-% This function first evaluates the \meta{initial value}, \meta{step}
-% and \meta{final value}, all of which should be floating point
-% expressions evaluating to a floating point number, not a tuple.
-% Then for each \meta{value} from the \meta{initial value} to the
-% \meta{final value} in turn (using \meta{step} between each
-% \meta{value}), the \meta{code} is inserted into the input stream
-% with |#1| replaced by the current \meta{value}. Thus the
-% \meta{code} should define a function of one argument~(|#1|).
-% \end{function}
-%
-% \begin{function}[added = 2017-04-12]{\fp_step_variable:nnnNn}
-% \begin{syntax}
-% \cs{fp_step_variable:nnnNn} \\
-% ~~\Arg{initial value} \Arg{step} \Arg{final value} \meta{tl~var} \Arg{code}
-% \end{syntax}
-% This function first evaluates the \meta{initial value}, \meta{step}
-% and \meta{final value}, all of which should be floating point
-% expressions evaluating to a floating point number, not a tuple.
-% Then for each \meta{value} from the \meta{initial value} to the
-% \meta{final value} in turn (using \meta{step} between each
-% \meta{value}), the \meta{code} is inserted into the input stream,
-% with the \meta{tl~var} defined as the current \meta{value}. Thus
-% the \meta{code} should make use of the \meta{tl~var}.
-% \end{function}
-%
-% \section{Symbolic expressions}
-%
-% Floating point expressions support variables: these can only be set locally,
-% so act like standard \cs[no-index]{l_\dots} variables.
-% \begin{quote}\let\obeyedline=\newline\obeylines^^A
-% \cs{fp_new_variable:n} |{ A }|
-% \cs{fp_set:Nn} \cs{l_tmpb_fp} |{ 1 * sin(A) + 3**2 }|
-% \cs{fp_show:n} |{| \cs{l_tmpb_fp} |}|
-% \cs{fp_show:N} \cs{l_tmpb_fp}
-% \cs{fp_set_variable:nn} |{ A }| |{ pi/2 }|
-% \cs{fp_show:n} |{| \cs{l_tmpb_fp} |}|
-% \cs{fp_show:N} \cs{l_tmpb_fp}
-% \cs{fp_set_variable:nn} |{ A }| |{ 0 }|
-% \cs{fp_show:n} |{| \cs{l_tmpb_fp} |}|
-% \cs{fp_show:N} \cs{l_tmpb_fp}
-% \end{quote}
-% defines~|A| to be a variable, then defines \cs{l_tmpb_fp} to stand for
-% |1*sin(A)+9| (note that |3**2| is evaluated, but the |1*|~product is
-% not simplified away). Until \cs{l_tmpb_fp} is changed, \cs{fp_show:N}
-% \cs{l_tmpb_fp} will show |((1*sin(A))+9)| regardless of the value
-% of~|A|. The next step defines~|A| to be equal to~|pi/2|: then
-% \cs{fp_show:n} |{| \cs{l_tmpb_fp} |}| will evaluate \cs{l_tmpb_fp} and
-% show~|10|. We then redefine~|A| to be~|0|: since \cs{l_tmpb_fp} still
-% stands for |1*sin(A)+9|, the value shown is then~|9|. Variables can
-% be set with \cs{fp_set_variable:nn} to arbitrary floating point
-% expressions including other variables.
-%
-% \begin{function}[added = 2023-10-19]{\fp_new_variable:n}
-% \begin{syntax}
-% \cs{fp_new_variable:n} \Arg{identifier}
-% \end{syntax}
-% Declares the \meta{identifier} as a variable, which allows it to be
-% used in floating point expressions. For instance,
-% \begin{quote}
-% \cs{fp_new_variable:n} |{ A }| \\
-% \cs{fp_show:n} |{ A**2 - A + 1 }|
-% \end{quote}
-% shows |(((A^2)-A)+1)|. If the declaration was missing, the parser
-% would complain about an \enquote{\texttt{Unknown fp word 'A'}}. The
-% \meta{identifier} must consist entirely of Latin letters among
-% |[a-zA-Z]|.
-% \end{function}
-%
-% \begin{function}[added = 2023-10-19]{\fp_set_variable:nn}
-% \begin{syntax}
-% \cs{fp_set_variable:nn} \Arg{identifier} \Arg{fp expr}
-% \end{syntax}
-% Defines the \meta{identifier} to stand in any further expression for
-% the result of evaluating the \meta{floating point expression} as
-% much as possible. The result may contain other variables, which are
-% then replaced by their values if they have any. For instance,
-% \begin{quote}\let\obeyedline=\newline\obeylines^^A
-% \cs{fp_new_variable:n} |{ A }|
-% \cs{fp_new_variable:n} |{ B }|
-% \cs{fp_new_variable:n} |{ C }|
-% \cs{fp_set_variable:nn} |{ A } { 3 }|
-% \cs{fp_set_variable:nn} |{ C } { A ** 2 + B * 1 }|
-% \cs{fp_show:n} |{ C + 4 }|
-% \cs{fp_set_variable:nn} |{ A } { 4 }|
-% \cs{fp_show:n} |{ C + 4 }|
-% \end{quote}
-% shows |((9+(B*1))+4)| twice: changing the value of~|A| to~|4| does
-% not alter~|C| because |A|~was replaced by its value~|3| when
-% evaluating |A**2+B*1|.
-% \end{function}
-%
-% \begin{function}[added = 2023-10-19]{\fp_clear_variable:n}
-% \begin{syntax}
-% \cs{fp_clear_variable:n} \Arg{identifier}
-% \end{syntax}
-% Removes any value given by \cs{fp_set_variable:nn} to the variable
-% with this \meta{identifier}. For instance,
-% \begin{quote}\let\obeyedline=\newline\obeylines^^A
-% \cs{fp_new_variable:n} |{ A }|
-% \cs{fp_set_variable:nn} |{ A } { 3 }|
-% \cs{fp_show:n} |{ A ^ 2 }|
-% \cs{fp_clear_variable:n} |{ A }|
-% \cs{fp_show:n} |{ A ^ 2 }|
-% \end{quote}
-% shows~|9|, then~|(A^2)|.
-% \end{function}
-%
-% \section{User-defined functions}
-%
-% It is possible to define new user functions which can be used inside
-% the argument to \cs{fp_eval:n}, etc. These functions may take one or
-% more named arguments, and should be implemented using expansion methods
-% only.
-%
-% \begin{function}[added = 2023-10-19]{\fp_new_function:n}
-% \begin{syntax}
-% \cs{fp_new_function:n} \Arg{identifier}
-% \end{syntax}
-% Declares the \meta{identifier} as a function, which allows it to be
-% used in floating point expressions. For instance,
-% \begin{quote}
-% \cs{fp_new_function:n} |{ foo }| \\
-% \cs{fp_show:n} |{ foo ( 1 + 2 , foo(3), A ) ** 2 } }|
-% \end{quote}
-% shows |(foo(3, foo(3), A))^(2)|. If the declaration was missing,
-% the parser would complain about an \enquote{\texttt{Unknown fp word 'foo'}}.
-% The \meta{identifier} must consist entirely of Latin letters |[a-zA-Z]|.
-% \end{function}
-%
-% \begin{function}[added = 2023-10-19]{\fp_set_function:nnn}
-% \begin{syntax}
-% \cs{fp_set_function:nnn} \Arg{identifier} \Arg{vars} \Arg{fp expr}
-% \end{syntax}
-% Defines the \meta{identifier} to stand in any further expression for
-% the result of evaluating the \meta{floating point expression}, with
-% the \meta{identifier} accepting the \meta{vars} (a non-empty
-% comma-separated list).
-% The result may contain other functions, which are
-% then replaced by their results if they have any. For instance,
-% \begin{quote}
-% \cs{fp_new_function:n} |{ foo }| \\
-% \cs{fp_set_function:nnn} |{ npow } { a,b } { a**b }| \\
-% \cs{fp_show:n} |{ npow(16,0.25) } }|
-% \end{quote}
-% shows |2|. The names of the \meta{vars} must
-% consist entirely of Latin letters |[a-zA-Z]|, but are otherwise not
-% restricted: in particular, they are independent of any variables
-% declared by \cs{fp_new_variable:n}.
-% \end{function}
-%
-% \begin{function}[added = 2023-10-19]{\fp_clear_function:n}
-% \begin{syntax}
-% \cs{fp_clear_function:n} \Arg{identifier}
-% \end{syntax}
-% Removes any definition given by \cs{fp_set_function:nnn} to the function
-% with this \meta{identifier}.
-% \end{function}
-%
-% \section{Some useful constants, and scratch variables}
-%
-% \begin{variable}[added = 2012-05-08, module = fp]{\c_zero_fp, \c_minus_zero_fp}
-% Zero, with either sign.
-% \end{variable}
-%
-% \begin{variable}[added = 2012-05-08, module = fp]{\c_one_fp}
-% One as an \texttt{fp}: useful for comparisons in some places.
-% \end{variable}
-%
-% \begin{variable}[added = 2012-05-08, module = fp]{\c_inf_fp, \c_minus_inf_fp}
-% Infinity, with either sign. These can be input directly in a
-% floating point expression as \texttt{inf} and \texttt{-inf}.
-% \end{variable}
-%
-% \begin{variable}[added = 2012-05-08, module = fp]{\c_nan_fp}
-% Not a number. This can be input directly in a floating point expression
-% as \texttt{nan}.
-% \end{variable}
-%
-% \begin{variable}[updated = 2012-05-08, module = fp]{\c_e_fp}
-% The value of the base of the natural logarithm, $\mathrm{e} = \exp(1)$.
-% \end{variable}
-%
-% \begin{variable}[updated = 2013-11-17, module = fp]{\c_pi_fp}
-% The value of~$\pi$. This can be input directly in a floating point
-% expression as~\texttt{pi}.
-% \end{variable}
-%
-% \begin{variable}[added = 2012-05-08, updated = 2013-11-17, module = fp]
-% {\c_one_degree_fp}
-% The value of $1^{\circ}$ in radians. Multiply an angle given in
-% degrees by this value to obtain a result in radians. Note that
-% trigonometric functions expecting an argument in radians or in
-% degrees are both available. Within floating point expressions, this
-% can be accessed as \texttt{deg}.
-% \end{variable}
-%
-% \section{Scratch variables}
-%
-% \begin{variable}[module = fp]{\l_tmpa_fp, \l_tmpb_fp}
-% Scratch floating points for local assignment. These are never used by
-% the kernel code, and so are safe for use with any \LaTeX3-defined
-% function. However, they may be overwritten by other non-kernel
-% code and so should only be used for short-term storage.
-% \end{variable}
-%
-% \begin{variable}[module = fp]{\g_tmpa_fp, \g_tmpb_fp}
-% Scratch floating points for global assignment. These are never used by
-% the kernel code, and so are safe for use with any \LaTeX3-defined
-% function. However, they may be overwritten by other non-kernel
-% code and so should only be used for short-term storage.
-% \end{variable}
-%
-% \section{Floating point exceptions}
-% \label{sec:l3fp:fp-exceptions}
-%
-% \emph{The functions defined in this section are experimental, and
-% their functionality may be altered or removed altogether.}
-%
-% \enquote{Exceptions} may occur when performing some floating point
-% operations, such as \texttt{0 / 0}, or \texttt{10 ** 1e9999}. The
-% relevant \textsc{IEEE} standard defines $5$ types of exceptions,
-% of which we implement~$4$.
-% \begin{itemize}
-% \item \emph{Overflow} occurs whenever the result of an operation is
-% too large to be represented as a normal floating point number. This
-% results in $\pm \infty$.
-% \item \emph{Underflow} occurs whenever the result of an operation is
-% too close to $0$ to be represented as a normal floating point
-% number. This results in $\pm 0$.
-% \item \emph{Invalid operation} occurs for operations with no defined
-% outcome, for instance $0/0$ or $\sin(\infty)$, and results in a \nan{}.
-% It also occurs for conversion functions whose target type does not
-% have the appropriate infinite or \nan{} value (\emph{e.g.},
-% \cs{fp_to_dim:n}).
-% \item \emph{Division by zero} occurs when dividing a non-zero number
-% by $0$, or when evaluating functions at poles, \emph{e.g.},
-% $\ln(0)$ or $\cot(0)$. This results in $\pm\infty$.
-% \item [\emph{(not yet)}] \emph{Inexact} occurs whenever the result of
-% a computation is not exact, in other words, almost always. At the
-% moment, this exception is entirely ignored in \LaTeX3.
-% \end{itemize}
-% To each exception we associate a \enquote{flag}: \cs{l_fp_overflow_flag},
-% \cs{l_fp_underflow_flag}, \cs{l_fp_invalid_operation_flag} and
-% \cs{l_fp_division_by_zero_flag}. The state of these flags can be tested
-% and modified with commands from \pkg{l3flag}
-%
-% By default, the \enquote{invalid operation} exception triggers an
-% (expandable) error, and raises the corresponding flag. Other
-% exceptions raise the corresponding flag but do not trigger an error.
-% The behaviour when an exception occurs can be modified (using
-% \cs{fp_trap:nn}) to either produce an error and raise the flag, or
-% only raise the flag, or do nothing at all.
-%
-% \begin{function}[added = 2012-07-19, updated = 2017-02-13,
-% tested = m3fp-traps001]{\fp_trap:nn}
-% \begin{syntax}
-% \cs{fp_trap:nn} \Arg{exception} \Arg{trap type}
-% \end{syntax}
-% All occurrences of the \meta{exception} (\texttt{overflow},
-% \texttt{underflow}, \texttt{invalid_operation} or
-% \texttt{division_by_zero}) within the current
-% group are treated as \meta{trap type}, which can be
-% \begin{itemize}
-% \item \texttt{none}: the \meta{exception} will be entirely
-% ignored, and leave no trace;
-% \item \texttt{flag}: the \meta{exception} will turn the
-% corresponding flag on when it occurs;
-% \item \texttt{error}: additionally, the \meta{exception} will halt
-% the \TeX{} run and display some information about the current
-% operation in the terminal.
-% \end{itemize}
-% \emph{This function is experimental, and may be altered or removed.}
-% \end{function}
-%
-% \begin{variable}
-% {
-% \l_fp_overflow_flag,
-% \l_fp_underflow_flag,
-% \l_fp_invalid_operation_flag,
-% \l_fp_division_by_zero_flag
-% }
-% Flags denoting the occurrence of various floating-point exceptions.
-% \end{variable}
-%
-% \section{Viewing floating points}
-%
-% \begin{function}[added = 2012-05-08, updated = 2021-04-29,
-% tested = m3fp002]{\fp_show:N, \fp_show:c, \fp_show:n}
-% \begin{syntax}
-% \cs{fp_show:N} \meta{fp~var}
-% \cs{fp_show:n} \Arg{fp expr}
-% \end{syntax}
-% Evaluates the \meta{fp expr} and displays the
-% result in the terminal.
-% \end{function}
-%
-% \begin{function}[added = 2014-08-22, updated = 2021-04-29]
-% {\fp_log:N, \fp_log:c, \fp_log:n}
-% \begin{syntax}
-% \cs{fp_log:N} \meta{fp~var}
-% \cs{fp_log:n} \Arg{fp expr}
-% \end{syntax}
-% Evaluates the \meta{fp expr} and writes the
-% result in the log file.
-% \end{function}
-%
-% \section{Floating point expressions}
-%
-% \subsection{Input of floating point numbers} \label{sec:l3fp:fp-floats}
-%
-% We support four types of floating point numbers:
-% \begin{itemize}
-% \item $\pm m \cdot 10^{n}$, a floating
-% point number, with integer $1\leq m\leq 10^{16}$, and
-% $-{\ExplSyntaxOn\int_use:N\c__fp_minus_min_exponent_int}\leq
-% n\leq {\ExplSyntaxOn\int_use:N\c__fp_max_exponent_int}$;
-% \item $\pm 0$, zero, with a given sign;
-% \item $\pm \infty$, infinity, with a given sign;
-% \item \nan{}, is \enquote{not a number}, and can be either quiet
-% or signalling (\emph{not yet}: this distinction is currently
-% unsupported);
-% \end{itemize}
-% Normal floating point numbers are stored in base $10$, with up to $16$
-% significant figures.
-%
-% On input, a normal floating point number consists of:
-% \begin{itemize}
-% \item \meta{sign}: a possibly empty string of |+| and |-| characters;
-% \item \meta{significand}: a non-empty string of digits together with zero
-% or one dot;
-% \item \meta{exponent} optionally: the character |e| or |E|, followed by a
-% possibly empty string of |+|~and~|-| tokens, and a non-empty string
-% of digits.
-% \end{itemize}
-% The sign of the resulting number is |+| if \meta{sign} contains an
-% even number of |-|, and |-| otherwise, hence, an empty \meta{sign}
-% denotes a non-negative input. The stored significand is obtained from
-% \meta{significand} by omitting the decimal separator and leading zeros,
-% and rounding to $16$ significant digits, filling with trailing zeros
-% if necessary. In particular, the value stored is exact if the input
-% \meta{significand} has at most $16$ digits. The stored \meta{exponent}
-% is obtained by combining the input \meta{exponent} ($0$ if absent)
-% with a shift depending on the position of the significand and the number
-% of leading zeros.
-%
-% A special case arises if the resulting \meta{exponent} is either too
-% large or too small for the floating point number to be
-% represented. This results either in an overflow (the number is then
-% replaced by $\pm\infty$), or an underflow (resulting in $\pm 0$).
-%
-% The result is thus $\pm 0$ if and only if \meta{significand} contains no
-% non-zero digit (\emph{i.e.}, consists only in characters~|0|, and an
-% optional period), or if there is an underflow. Note that a
-% single dot is currently a valid floating point number, equal to~$+0$,
-% but that is not guaranteed to remain true.
-%
-% The \meta{significand} must be non-empty, so |e1| and |e-1| are not
-% valid floating point numbers. Note that the latter could be mistaken
-% with the difference of \enquote{\texttt{e}} and $1$. To avoid
-% confusions, the base of natural logarithms cannot be input as |e| and
-% should be input as \texttt{exp(1)} or \cs[module = fp]{c_e_fp} (which is faster).
-%
-% Special numbers are input as follows:
-% \begin{itemize}
-% \item \texttt{inf} represents $+\infty$, and can be preceded by any
-% \meta{sign}, yielding $\pm\infty$ as appropriate.
-% \item \texttt{nan} represents a (quiet) non-number. It can be
-% preceded by any sign, but that sign is ignored.
-% \item Any unrecognizable string triggers an error, and produces a
-% \nan{}.
-% \item Note that commands such as \tn{infty}, \tn{pi}, or \tn{sin}
-% \emph{do not} work in floating point expressions. They may
-% silently be interpreted as completely unexpected numbers, because
-% integer constants (allowed in expressions) are commonly stored as
-% mathematical characters.
-% \end{itemize}
-%
-% \subsection{Precedence of operators}
-% \label{sec:l3fp:fp-precedence}
-%
-% We list here all the operations supported in floating point
-% expressions, in order of decreasing precedence: operations listed
-% earlier bind more tightly than operations listed below them.
-% \begin{itemize}
-% \item Function calls (\texttt{sin}, \texttt{ln}, \emph{etc}).
-% \item Binary |**| and |^| (right associative).
-% \item Unary |+|, |-|, |!|.
-% \item Implicit multiplication by juxtaposition (\texttt{2pi})
-% when neither factor is in parentheses.
-% \item Binary |*| and |/|, implicit multiplication by juxtaposition with parentheses (for instance \texttt{3(4+5)}).
-% \item Binary |+| and |-|.
-% \item Comparisons |>=|, |!=|, |<?|, \emph{etc}.
-% \item Logical \texttt{and}, denoted by |&&|.
-% \item Logical \texttt{or}, denoted by \verb+||+.
-% \item Ternary operator |?:| (right associative).
-% \item Comma (to build tuples).
-% \end{itemize}
-% The precedence of operations can be overridden using parentheses.
-% In particular, the precedence of juxtaposition implies that
-% \begin{align*}
-% \mathtt{1/2pi} & = 1/(2\pi), \\
-% \mathtt{1/2pi(pi+pi)} & = (2\pi)^{-1}(\pi+\pi) \simeq 1, \\
-% \mathtt{sin 2pi} & = \sin(2)\pi \neq 0, \\
-% \mathtt{2\char`\^2max(3,5)} & = 2^2 \max(3,5) = 20, \\
-% \mathtt{1in/1cm} & = (1\mathrm{in})/(1\mathrm{cm}) = 2.54 .
-% \end{align*}
-% Functions are called on the value of their argument, contrarily to
-% \TeX{} macros.
-%
-% \subsection{Operations} \label{sec:l3fp:fp-operations}
-%
-% We now present the various operations allowed in floating point
-% expressions, from the lowest precedence to the highest. When used as
-% a truth value, a floating point expression is \texttt{false} if it is
-% $\pm 0$, and \texttt{true} otherwise, including when it is \nan{} or a
-% tuple such as $(0,0)$. Tuples are only supported to some extent by
-% operations that work with truth values (|?:|, \verb"||", |&&|, |!|),
-% by comparisons (|!<=>?|), and by |+|, |-|, |*|, |/|. Unless otherwise
-% specified, providing a tuple as an argument of any other operation
-% yields the \enquote{invalid operation} exception and a \nan{} result.
-%
-% \begin{function}[tested = m3fp-logic002, module = {}]{?:}
-% \begin{syntax}
-% \cs{fp_eval:n} \{ \meta{operand_1} |?| \meta{operand_2} |:| \meta{operand_3} \}
-% \end{syntax}
-% The ternary operator |?:| results in \meta{operand_2} if
-% \meta{operand_1} is true (not $\pm 0$), and \meta{operand_3} if \meta{operand_1}
-% is false ($\pm 0$). All three \meta{operands} are evaluated in all
-% cases; they may be tuples. The operator is right associative, hence
-% \begin{verbatim}
-% \fp_eval:n
-% {
-% 1 + 3 > 4 ? 1 :
-% 2 + 4 > 5 ? 2 :
-% 3 + 5 > 6 ? 3 : 4
-% }
-% \end{verbatim}
-% first tests whether $1 + 3 > 4$; since this isn't true, the branch
-% following |:| is taken, and $2 + 4 > 5$ is compared; since this is
-% true, the branch before |:| is taken, and everything else is
-% (evaluated then) ignored. That allows testing for various cases in
-% a concise manner, with the drawback that all computations are made
-% in all cases.
-% \end{function}
-%
-% \begin{function}[tested = m3fp-logic002]{||}
-% \begin{syntax}
-% \cs{fp_eval:n} \{ \meta{operand_1} \verb"||" \meta{operand_2} \}
-% \end{syntax}
-% If \meta{operand_1} is true (not $\pm 0$), use that value, otherwise the
-% value of \meta{operand_2}. Both \meta{operands} are evaluated in all
-% cases; they may be tuples. In \meta{operand_1} \verb"||"
-% \meta{operand_2} \verb"||" \ldots{} \verb"||" \meta{operands_n}, the
-% first true (nonzero) \meta{operand} is used and if all are zero the
-% last one ($\pm 0$) is used.
-% \end{function}
-%
-% \begin{function}[tested = m3fp-logic002]{&&}
-% \begin{syntax}
-% \cs{fp_eval:n} \{ \meta{operand_1} |&&| \meta{operand_2} \}
-% \end{syntax}
-% If \meta{operand_1} is false (equal to~$\pm 0$), use that value,
-% otherwise the value of \meta{operand_2}. Both \meta{operands} are
-% evaluated in all cases; they may be tuples. In \meta{operand_1}
-% |&&| \meta{operand_2} |&&| \ldots{} |&&| \meta{operands_n}, the
-% first false ($\pm 0$) \meta{operand} is used and if none is zero the
-% last one is used.
-% \end{function}
-%
-% \begin{function}[tested = m3fp-logic001, updated = 2013-12-14]
-% {<, =, >, ?}
-% \begin{syntax}
-% \cs{fp_eval:n} \\
-% ~~\{ \\
-% ~~~~\meta{operand_1} \meta{relation_1} \\
-% ~~~~\ldots{} \\
-% ~~~~\meta{operand_N} \meta{relation_N} \\
-% ~~~~\meta{operand_{N+1}} \\
-% ~~\}
-% \end{syntax}
-% Each \meta{relation} consists of a non-empty string of |<|, |=|,
-% |>|, and~|?|, optionally preceded by~|!|, and may not start
-% with~|?|. This evaluates to $+1$ if all comparisons
-% \meta{operand_i} \meta{relation_i} \meta{operand_{i+1}} are true, and
-% $+0$ otherwise. All \meta{operands} are evaluated (once) in all cases.
-% See \cs{fp_compare:nTF} for details.
-% \end{function}
-%
-% \begin{function}[tested = m3fp-basics001]{+, -}
-% \begin{syntax}
-% \cs{fp_eval:n} \{ \meta{operand_1} |+| \meta{operand_2} \}
-% \cs{fp_eval:n} \{ \meta{operand_1} |-| \meta{operand_2} \}
-% \end{syntax}
-% Computes the sum or the difference of its two \meta{operands}. The
-% \enquote{invalid operation} exception occurs for $\infty-\infty$.
-% \enquote{Underflow} and \enquote{overflow} occur when appropriate.
-% These operations supports the itemwise addition or subtraction of
-% two tuples, but if they have a different number of items the
-% \enquote{invalid operation} exception occurs and the result is \nan{}.
-% \end{function}
-%
-% \begin{function}[tested = {m3fp-basics002, m3fp-basics003}]{*, /}
-% \begin{syntax}
-% \cs{fp_eval:n} \{ \meta{operand_1} |*| \meta{operand_2} \}
-% \cs{fp_eval:n} \{ \meta{operand_1} |/| \meta{operand_2} \}
-% \end{syntax}
-% Computes the product or the ratio of its two \meta{operands}. The
-% \enquote{invalid operation} exception occurs for $\infty/\infty$,
-% $0/0$, or $0*\infty$. \enquote{Division by zero} occurs when
-% dividing a finite non-zero number by $\pm 0$. \enquote{Underflow}
-% and \enquote{overflow} occur when appropriate.
-% When \meta{operand_1} is a tuple and \meta{operand_2} is a floating
-% point number, each item of \meta{operand_1} is multiplied or divided
-% by \meta{operand_2}. Multiplication also supports the case where
-% \meta{operand_1} is a floating point number and \meta{operand_2} a
-% tuple. Other combinations yield an \enquote{invalid operation}
-% exception and a \nan{} result.
-% \end{function}
-%
-% \begin{function}[tested = m3fp-basics004, label = !]{+, -, !}
-% \begin{syntax}
-% \cs{fp_eval:n} \{ |+| \meta{operand} \}
-% \cs{fp_eval:n} \{ |-| \meta{operand} \}
-% \cs{fp_eval:n} \{ |!| \meta{operand} \}
-% \end{syntax}
-% The unary |+| does nothing, the unary |-| changes the sign of the
-% \meta{operand} (for a tuple, of all its components), and
-% |!| \meta{operand} evaluates to $1$ if \meta{operand} is false
-% (is $\pm 0$) and $0$ otherwise (this is the \texttt{not}
-% boolean function). Those operations never raise exceptions.
-% \end{function}
-%
-% \begin{function}[tested = m3fp-expo001]{**, ^}
-% \begin{syntax}
-% \cs{fp_eval:n} \{ \meta{operand_1} |**| \meta{operand_2} \}
-% \cs{fp_eval:n} \{ \meta{operand_1} |^| \meta{operand_2} \}
-% \end{syntax}
-% Raises \meta{operand_1} to the power \meta{operand_2}. This
-% operation is right associative, hence \texttt{2 ** 2 ** 3} equals
-% $2^{2^{3}} = 256$. If \meta{operand_1} is negative or $-0$ then:
-% the result's sign is $+$ if the \meta{operand_2} is infinite and
-% $(-1)^p$ if the \meta{operand_2} is $p/5^q$ with $p$, $q$ integers;
-% the result is $+0$ if
-% |abs(|\meta{operand_1}|)^|\meta{operand_2} evaluates to zero; in
-% other cases the \enquote{invalid operation} exception occurs because
-% the sign cannot be determined. \enquote{Division by zero} occurs
-% when raising $\pm 0$ to a finite strictly negative power.
-% \enquote{Underflow} and \enquote{overflow} occur when appropriate.
-% If either operand is a tuple, \enquote{invalid operation} occurs.
-% \end{function}
-%
-% \begin{function}[tested = m3fp-basics004]{abs}
-% \begin{syntax}
-% \cs{fp_eval:n} \{ |abs(| \meta{fp expr} |)| \}
-% \end{syntax}
-% Computes the absolute value of the \meta{fp expr}. If the operand is
-% a tuple, \enquote{invalid operation} occurs. This operation does
-% not raise exceptions in other cases. See also \cs{fp_abs:n}.
-% \end{function}
-%
-% \begin{function}[tested = m3fp-expo001]{exp}
-% \begin{syntax}
-% \cs{fp_eval:n} \{ |exp(| \meta{fp expr} |)| \}
-% \end{syntax}
-% Computes the exponential of the \meta{fp expr}. \enquote{Underflow}
-% and \enquote{overflow} occur when appropriate.
-% If the operand is a tuple, \enquote{invalid operation} occurs.
-% \end{function}
-%
-% \begin{function}[tested = m3fp-expo001]{fact}
-% \begin{syntax}
-% \cs{fp_eval:n} \{ |fact(| \meta{fp expr} |)| \}
-% \end{syntax}
-% Computes the factorial of the \meta{fp expr}. If the \meta{fp expr}
-% is an integer between $-0$ and $3248$ included, the result is finite
-% and correctly rounded. Larger positive integers give $+\infty$ with
-% \enquote{overflow}, while $|fact(|{+\infty}|)|=+\infty$ and
-% $|fact(nan)|=|nan|$ with no exception. All other inputs give \nan{}
-% with the \enquote{invalid operation} exception.
-% \end{function}
-%
-% \begin{function}[tested = m3fp-expo001]{ln}
-% \begin{syntax}
-% \cs{fp_eval:n} \{ |ln(| \meta{fp expr} |)| \}
-% \end{syntax}
-% Computes the natural logarithm of the \meta{fp expr}. Negative
-% numbers have no (real) logarithm, hence the \enquote{invalid
-% operation} is raised in that case, including for $\ln(-0)$.
-% \enquote{Division by zero} occurs when evaluating
-% $\ln(+0) = -\infty$. \enquote{Underflow} and \enquote{overflow}
-% occur when appropriate. If the operand is a tuple, \enquote{invalid
-% operation} occurs.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2018-11-03]{logb}
-% \begin{syntax}
-% \cs{fp_eval:n} \{ |logb(| \meta{fp expr} |)| \}
-% \end{syntax}
-% Determines the exponent of the \meta{fp expr}, namely the floor of
-% the base-$10$ logarithm of its absolute value. \enquote{Division by
-% zero} occurs when evaluating $\operatorname{logb}(\pm 0) = -\infty$.
-% Other special values are $\operatorname{logb}(\pm\infty)=+\infty$
-% and $\operatorname{logb}(\nan{})=\nan{}$. If the operand is a tuple
-% or is \nan{}, then \enquote{invalid operation} occurs and the result
-% is \nan{}.
-% \end{function}
-%
-% \begin{function}[tested = m3fp-logic002]{max, min}
-% \begin{syntax}
-% \cs{fp_eval:n} \{ |max(| \meta{fp expr_1} |,| \meta{fp expr_2} |,| \ldots{} |)| \}
-% \cs{fp_eval:n} \{ |min(| \meta{fp expr_1} |,| \meta{fp expr_2} |,| \ldots{} |)| \}
-% \end{syntax}
-% Evaluates each \meta{fp expr} and computes the largest (smallest) of
-% those. If any of the \meta{fp expr} is a \nan{} or tuple, the result
-% is \nan{}. If any operand is a tuple, \enquote{invalid operation}
-% occurs; these operations do not raise exceptions in other cases.
-% \end{function}
-%
-% \begin{function}
-% [tested = {m3fp-round001, m3fp-round002}, added = 2013-12-14, updated = 2015-08-08]
-% {round, trunc, ceil, floor}
-% \begin{syntax}
-% \cs{fp_eval:n} \{ |round| |(| \meta{fp expr} |)| \}
-% \cs{fp_eval:n} \{ |round| |(| \meta{fp expr_1} , \meta{fp expr_2} |)| \}
-% \cs{fp_eval:n} \{ |round| |(| \meta{fp expr_1} , \meta{fp expr_2} , \meta{fp expr_3} |)| \}
-% \end{syntax}
-% Only |round| accepts a third argument.
-% Evaluates $\meta{fp expr_1}=x$ and $\meta{fp expr_2}=n$ and $\meta{fp expr_3}=t$ then rounds
-% $x$~to $n$~places. If $n$~is an integer, this rounds~$x$ to a
-% multiple of~$10^{-n}$; if $n=+\infty$, this always yields~$x$; if
-% $n=-\infty$, this yields one of $\pm 0$, $\pm\infty$, or~\nan{}; if
-% $n=\nan{}$, this yields \nan{}; if
-% $n$~is neither $\pm\infty$ nor an integer, then an \enquote{invalid
-% operation} exception is raised. When \meta{fp expr_2} is omitted,
-% $n=0$, \emph{i.e.}, \meta{fp expr_1} is rounded to an integer. The
-% rounding direction depends on the function.
-% \begin{itemize}
-% \item |round| yields the multiple of~$10^{-n}$ closest to~$x$,
-% with ties ($x$ half-way between two such multiples) rounded
-% as follows. If $t$ is \texttt{nan} (or not given) the even
-% multiple is chosen (\enquote{ties to even}), if $t=\pm 0$ the
-% multiple closest to $0$ is chosen (\enquote{ties to zero}),
-% if $t$ is positive/negative the multiple closest to $\infty$/$-\infty$ is chosen
-% (\enquote{ties towards positive/negative infinity}).
-% \item |floor| yields the largest
-% multiple of~$10^{-n}$ smaller or equal to~$x$ (\enquote{round
-% towards negative infinity});
-% \item |ceil| yields the smallest
-% multiple of~$10^{-n}$ greater or equal to~$x$ (\enquote{round
-% towards positive infinity});
-% \item |trunc| yields a multiple
-% of~$10^{-n}$ with the same sign as~$x$ and with the largest
-% absolute value less than that of~$x$ (\enquote{round towards
-% zero}).
-% \end{itemize}
-% \enquote{Overflow} occurs if $x$~is finite and the result is
-% infinite (this can only happen if $\meta{fp expr_2}\string<-9984$).
-% If any operand is a tuple, \enquote{invalid operation} occurs.
-% \end{function}
-%
-% \begin{function}[tested = m3fp-logic002]{sign}
-% \begin{syntax}
-% \cs{fp_eval:n} \{ |sign(| \meta{fp expr} |)| \}
-% \end{syntax}
-% Evaluates the \meta{fp expr} and determines its sign: $+1$ for
-% positive numbers and for $+\infty$, $-1$ for negative numbers and
-% for $-\infty$, $\pm 0$ for $\pm 0$, and \nan{} for \nan{}.
-% If the operand is a tuple, \enquote{invalid operation} occurs.
-% This operation does not raise exceptions in other cases.
-% \end{function}
-%
-% \begin{function}[updated = 2013-11-17, tested = m3fp-trig001]
-% {sin, cos, tan, cot, csc, sec}
-% \begin{syntax}
-% \cs{fp_eval:n} \{ |sin(| \meta{fp expr} |)| \}
-% \cs{fp_eval:n} \{ |cos(| \meta{fp expr} |)| \}
-% \cs{fp_eval:n} \{ |tan(| \meta{fp expr} |)| \}
-% \cs{fp_eval:n} \{ |cot(| \meta{fp expr} |)| \}
-% \cs{fp_eval:n} \{ |csc(| \meta{fp expr} |)| \}
-% \cs{fp_eval:n} \{ |sec(| \meta{fp expr} |)| \}
-% \end{syntax}
-% Computes the sine, cosine, tangent, cotangent, cosecant, or secant
-% of the \meta{fp expr} given in radians. For arguments given in
-% degrees, see \texttt{sind}, \texttt{cosd}, \emph{etc.} Note that
-% since $\pi$~is irrational, $\operatorname{sin}(8\mathrm{pi})$ is not quite
-% zero, while its analogue $\operatorname{sind}(8\times 180)$ is exactly
-% zero. The trigonometric functions are undefined for
-% an argument of $\pm\infty$, leading to the \enquote{invalid
-% operation} exception. Additionally, evaluating tangent,
-% cotangent, cosecant, or secant at one of their poles leads to a
-% \enquote{division by zero} exception. \enquote{Underflow} and
-% \enquote{overflow} occur when appropriate.
-% If the operand is a tuple, \enquote{invalid operation} occurs.
-% \end{function}
-%
-% \begin{function}[added = 2013-11-02, tested = m3fp-trig003]
-% {sind, cosd, tand, cotd, cscd, secd}
-% \begin{syntax}
-% \cs{fp_eval:n} \{ |sind(| \meta{fp expr} |)| \}
-% \cs{fp_eval:n} \{ |cosd(| \meta{fp expr} |)| \}
-% \cs{fp_eval:n} \{ |tand(| \meta{fp expr} |)| \}
-% \cs{fp_eval:n} \{ |cotd(| \meta{fp expr} |)| \}
-% \cs{fp_eval:n} \{ |cscd(| \meta{fp expr} |)| \}
-% \cs{fp_eval:n} \{ |secd(| \meta{fp expr} |)| \}
-% \end{syntax}
-% Computes the sine, cosine, tangent, cotangent, cosecant, or secant
-% of the \meta{fp expr} given in degrees. For arguments given in
-% radians, see \texttt{sin}, \texttt{cos}, \emph{etc.} Note that
-% since $\pi$~is irrational, $\operatorname{sin}(8\mathrm{pi})$ is not quite
-% zero, while its analogue $\operatorname{sind}(8\times 180)$ is exactly
-% zero. The trigonometric functions are undefined for
-% an argument of $\pm\infty$, leading to the \enquote{invalid
-% operation} exception. Additionally, evaluating tangent,
-% cotangent, cosecant, or secant at one of their poles leads to a
-% \enquote{division by zero} exception. \enquote{Underflow} and
-% \enquote{overflow} occur when appropriate.
-% If the operand is a tuple, \enquote{invalid operation} occurs.
-% \end{function}
-%
-% \begin{function}[added = 2013-11-02, tested = m3fp-trig002]
-% {asin, acos, acsc, asec}
-% \begin{syntax}
-% \cs{fp_eval:n} \{ |asin(| \meta{fp expr} |)| \}
-% \cs{fp_eval:n} \{ |acos(| \meta{fp expr} |)| \}
-% \cs{fp_eval:n} \{ |acsc(| \meta{fp expr} |)| \}
-% \cs{fp_eval:n} \{ |asec(| \meta{fp expr} |)| \}
-% \end{syntax}
-% Computes the arcsine, arccosine, arccosecant, or arcsecant of the
-% \meta{fp expr} and returns the result in radians, in the range
-% $[-\pi/2,\pi/2]$ for \texttt{asin} and \texttt{acsc} and $[0,\pi]$
-% for \texttt{acos} and \texttt{asec}. For a result in degrees, use
-% \texttt{asind}, \emph{etc.} If the argument of |asin| or |acos|
-% lies outside the range $[-1,1]$, or the argument of |acsc| or |asec|
-% inside the range $(-1,1)$, an \enquote{invalid operation} exception
-% is raised. \enquote{Underflow} and \enquote{overflow} occur when
-% appropriate.
-% If the operand is a tuple, \enquote{invalid operation} occurs.
-% \end{function}
-%
-% \begin{function}[added = 2013-11-02, tested = m3fp-trig004]
-% {asind, acosd, acscd, asecd}
-% \begin{syntax}
-% \cs{fp_eval:n} \{ |asind(| \meta{fp expr} |)| \}
-% \cs{fp_eval:n} \{ |acosd(| \meta{fp expr} |)| \}
-% \cs{fp_eval:n} \{ |acscd(| \meta{fp expr} |)| \}
-% \cs{fp_eval:n} \{ |asecd(| \meta{fp expr} |)| \}
-% \end{syntax}
-% Computes the arcsine, arccosine, arccosecant, or arcsecant of the
-% \meta{fp expr} and returns the result in degrees, in the range
-% $[-90,90]$ for \texttt{asind} and \texttt{acscd} and $[0,180]$ for
-% \texttt{acosd} and \texttt{asecd}. For a result in radians, use
-% \texttt{asin}, \emph{etc.} If the argument of |asind| or |acosd| lies
-% outside the range $[-1,1]$, or the argument of |acscd| or |asecd|
-% inside the range $(-1,1)$, an \enquote{invalid operation} exception
-% is raised. \enquote{Underflow} and \enquote{overflow} occur when
-% appropriate.
-% If the operand is a tuple, \enquote{invalid operation} occurs.
-% \end{function}
-%
-% \begin{function}[added = 2013-11-02, tested = m3fp-trig002]
-% {atan, acot}
-% \begin{syntax}
-% \cs{fp_eval:n} \{ |atan(| \meta{fp expr} |)| \}
-% \cs{fp_eval:n} \{ |atan(| \meta{fp expr_1} , \meta{fp expr_2} |)| \}
-% \cs{fp_eval:n} \{ |acot(| \meta{fp expr} |)| \}
-% \cs{fp_eval:n} \{ |acot(| \meta{fp expr_1} , \meta{fp expr_2} |)| \}
-% \end{syntax}
-% Those functions yield an angle in radians: \texttt{atand} and
-% \texttt{acotd} are their analogs in degrees. The one-argument
-% versions compute the arctangent or arccotangent of the
-% \meta{fp expr}: arctangent takes values in the range
-% $[-\pi/2,\pi/2]$, and arccotangent in the range $[0,\pi]$. The
-% two-argument arctangent computes the angle in polar coordinates of
-% the point with Cartesian coordinates $(\meta{fp expr_2},
-% \meta{fp expr_1})$: this is the arctangent of
-% $\meta{fp expr_1}/\meta{fp expr_2}$, possibly shifted by~$\pi$
-% depending on the signs of \meta{fp expr_1} and \meta{fp expr_2}. The
-% two-argument arccotangent computes the angle in polar coordinates of
-% the point $(\meta{fp expr_1}, \meta{fp expr_2})$, equal to the
-% arccotangent of $\meta{fp expr_1}/\meta{fp expr_2}$, possibly shifted
-% by~$\pi$. Both two-argument functions take values in the wider
-% range $[-\pi,\pi]$. The ratio $\meta{fp expr_1}/\meta{fp expr_2}$
-% need not be defined for the two-argument arctangent: when both
-% expressions yield~$\pm 0$, or when both yield~$\pm\infty$, the
-% resulting angle is one of $\{\pm\pi/4,\pm 3\pi/4\}$ depending on
-% signs. The \enquote{underflow} exception can occur.
-% If any operand is a tuple, \enquote{invalid operation} occurs.
-% \end{function}
-%
-% \begin{function}[added = 2013-11-02, tested = m3fp-trig004]
-% {atand, acotd}
-% \begin{syntax}
-% \cs{fp_eval:n} \{ |atand(| \meta{fp expr} |)| \}
-% \cs{fp_eval:n} \{ |atand(| \meta{fp expr_1} , \meta{fp expr_2} |)| \}
-% \cs{fp_eval:n} \{ |acotd(| \meta{fp expr} |)| \}
-% \cs{fp_eval:n} \{ |acotd(| \meta{fp expr_1} , \meta{fp expr_2} |)| \}
-% \end{syntax}
-% Those functions yield an angle in degrees: \texttt{atan} and
-% \texttt{acot} are their analogs in radians. The one-argument
-% versions compute the arctangent or arccotangent of the
-% \meta{fp expr}: arctangent takes values in the range $[-90,90]$, and
-% arccotangent in the range $[0,180]$. The two-argument arctangent
-% computes the angle in polar coordinates of the point with Cartesian
-% coordinates $(\meta{fp expr_2}, \meta{fp expr_1})$: this is the
-% arctangent of $\meta{fp expr_1}/\meta{fp expr_2}$, possibly shifted
-% by~$180$ depending on the signs of \meta{fp expr_1} and
-% \meta{fp expr_2}. The two-argument arccotangent computes the angle
-% in polar coordinates of the point $(\meta{fp expr_1},
-% \meta{fp expr_2})$, equal to the arccotangent of
-% $\meta{fp expr_1}/\meta{fp expr_2}$, possibly shifted by~$180$. Both
-% two-argument functions take values in the wider range $[-180,180]$.
-% The ratio $\meta{fp expr_1}/\meta{fp expr_2}$ need not be defined for
-% the two-argument arctangent: when both expressions yield~$\pm 0$, or
-% when both yield~$\pm\infty$, the resulting angle is one of $\{\pm
-% 45,\pm 135\}$ depending on signs. The \enquote{underflow}
-% exception can occur.
-% If any operand is a tuple, \enquote{invalid operation} occurs.
-% \end{function}
-%
-% \begin{function}[added = 2013-12-14, tested = m3fp-basics005]{sqrt}
-% \begin{syntax}
-% \cs{fp_eval:n} \{ |sqrt(| \meta{fp expr} |)| \}
-% \end{syntax}
-% Computes the square root of the \meta{fp expr}. The \enquote{invalid
-% operation} is raised when the \meta{fp expr} is negative or is a tuple; no other
-% exception can occur. Special values yield $\sqrt{-0} = -0$,
-% $\sqrt{+0} = +0$, $\sqrt{+\infty} = +\infty$ and
-% $\sqrt{\text{\nan{}}}=\text{\nan{}}$.
-% \end{function}
-%
-% \begin{function}[added = 2016-12-05]{rand}
-% \begin{syntax}
-% \cs{fp_eval:n} \{ |rand()| \}
-% \end{syntax}
-% Produces a pseudo-random floating-point number (multiple of
-% $10^{-16}$) between $0$~included and $1$~excluded. This is not available
-% in older versions of \XeTeX{}. The random seed can be queried using
-% \cs{sys_rand_seed:} and set using \cs{sys_gset_rand_seed:n}.
-% \begin{texnote}
-% This is based on pseudo-random numbers provided by the engine's
-% primitive \tn{pdfuniformdeviate} in \pdfTeX{}, \pTeX{}, \upTeX{}
-% and \tn{uniformdeviate} in \LuaTeX{} and \XeTeX{}. The underlying code is
-% based on Metapost, which follows an additive scheme recommended in
-% Section 3.6 of \enquote{The Art of Computer Programming,
-% Volume~2}.
-%
-% While we are more careful than \tn{uniformdeviate} to preserve
-% uniformity of the underlying stream of $28$-bit pseudo-random
-% integers, these pseudo-random numbers should of course not be
-% relied upon for serious numerical computations nor cryptography.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[added = 2016-12-05]{randint}
-% \begin{syntax}
-% \cs{fp_eval:n} \{ |randint(| \meta{fp expr} |)| \}
-% \cs{fp_eval:n} \{ |randint(| \meta{fp expr_1} , \meta{fp expr_2} |)| \}
-% \end{syntax}
-% Produces a pseudo-random integer between $1$~and \meta{fp expr} or
-% between \meta{fp expr_1} and \meta{fp expr_2} inclusive. The bounds
-% must be integers in the range $(-10^{16},10^{16})$ and the first
-% must be smaller or equal to the second. See \texttt{rand} for
-% important comments on how these pseudo-random numbers are generated.
-% \end{function}
-%
-% \begin{variable}[tested = m3fp-parse001]{inf, nan}
-% The special values $+\infty$, $-\infty$, and \nan{} are represented
-% as \texttt{inf}, \texttt{-inf} and \texttt{nan} (see \cs[module = fp]{c_inf_fp},
-% \cs[module = fp]{c_minus_inf_fp} and \cs[module = fp]{c_nan_fp}).
-% \end{variable}
-%
-% \begin{variable}[tested = m3fp-parse001]{pi}
-% The value of $\pi$ (see \cs[module = fp]{c_pi_fp}).
-% \end{variable}
-%
-% \begin{variable}[tested = m3fp-parse001]{deg}
-% The value of $1^{\circ}$ in radians (see \cs[module = fp]{c_one_degree_fp}).
-% \end{variable}
-%
-% \begin{variable}[tested = m3fp-parse001]
-% {em, ex, in, pt, pc, cm, mm, dd, cc, nd, nc, bp, sp}
-% \newcommand{\unit}[1]{\ifmmode\,\fi\text{\texttt{#1}}}
-% Those units of measurement are equal to their values in \unit{pt},
-% namely
-% \begin{align*}
-% 1 \unit{in} & = 72.27 \unit{pt} \\
-% 1 \unit{pt} & = 1 \unit{pt} \\
-% 1 \unit{pc} & = 12 \unit{pt} \\
-% 1 \unit{cm} & = \frac{1}{2.54} \unit{in} = 28.45275590551181 \unit{pt} \\
-% 1 \unit{mm} & = \frac{1}{25.4} \unit{in} = 2.845275590551181 \unit{pt} \\
-% 1 \unit{dd} & = 0.376065 \unit{mm} = 1.07000856496063 \unit{pt} \\
-% 1 \unit{cc} & = 12 \unit{dd} = 12.84010277952756 \unit{pt} \\
-% 1 \unit{nd} & = 0.375 \unit{mm} = 1.066978346456693 \unit{pt} \\
-% 1 \unit{nc} & = 12 \unit{nd} = 12.80374015748031 \unit{pt} \\
-% 1 \unit{bp} & = \frac{1}{72} \unit{in} = 1.00375 \unit{pt} \\
-% 1 \unit{sp} & = 2^{-16} \unit{pt} = 1.52587890625 \times 10^{-5} \unit{pt}.
-% \end{align*}
-% The values of the (font-dependent) units \unit{em} and \unit{ex} are
-% gathered from \TeX{} when the surrounding floating point expression
-% is evaluated.
-% \end{variable}
-%
-% \begin{variable}[tested = m3fp-parse001]{true, false}
-% Other names for $1$ and $+0$.
-% \end{variable}
-%
-% \begin{function}[EXP, added = 2012-05-14, updated = 2012-07-08,
-% tested = m3fp-convert003]{\fp_abs:n}
-% \begin{syntax}
-% \cs{fp_abs:n} \Arg{fp expr}
-% \end{syntax}
-% Evaluates the \meta{fp expr} as described for
-% \cs{fp_eval:n} and leaves the absolute value of the result in the
-% input stream. If the argument is $\pm\infty$, \nan{} or a tuple,
-% \enquote{invalid operation} occurs. Within floating point
-% expressions, |abs()| can be used; it accepts $\pm\infty$ and \nan{}
-% as arguments.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2012-09-26, tested = m3fp-convert003]
-% {\fp_max:nn, \fp_min:nn}
-% \begin{syntax}
-% \cs{fp_max:nn} \Arg{fp expr_1} \Arg{fp expr_2}
-% \end{syntax}
-% Evaluates the \meta{fp exprs} as described for
-% \cs{fp_eval:n} and leaves the resulting larger (\texttt{max}) or
-% smaller (\texttt{min}) value in the input stream. If the argument
-% is a tuple, \enquote{invalid operation} occurs, but no other case
-% raises exceptions. Within floating point expressions, |max()| and
-% |min()| can be used.
-% \end{function}
-%
-% \section{Disclaimer and roadmap}
-%
-% This module may break if the escape character is among
-% |0123456789_+|, or if it receives a \TeX{} primitive conditional affected
-% by \cs{exp_not:N}.
-%
-% The following need to be done. I'll try to time-order the items.
-% \begin{itemize}
-% \item Function to count items in a tuple (and to determine if something is a tuple).
-% \item Decide what exponent range to consider.
-% \item Support signalling \texttt{nan}.
-% \item Modulo and remainder, and rounding function |quantize| (and its friends analogous to |trunc|, |ceil|, |floor|).
-% \item \cs{fp_format:nn} \Arg{fp expr} \Arg{format}, but what should
-% \meta{format} be? More general pretty printing?
-% \item Add |and|, |or|, |xor|? Perhaps under the names \texttt{all},
-% \texttt{any}, and \texttt{xor}?
-% \item Add $\log(x,b)$ for logarithm of $x$ in base $b$.
-% \item \texttt{hypot} (Euclidean length).
-% Cartesian-to-polar transform.
-% \item Hyperbolic functions \texttt{cosh}, \texttt{sinh}, \texttt{tanh}.
-% \item Inverse hyperbolics.
-% \item Base conversion, input such as \texttt{0xAB.CDEF}.
-% \item Factorial (not with |!|), gamma function.
-% \item Improve coefficients of the \texttt{sin} and \texttt{tan}
-% series.
-% \item Treat upper and lower case letters identically in
-% identifiers, and ignore underscores.
-% \item Add an |array(1,2,3)| and |i=complex(0,1)|.
-% \item Provide an experimental |map| function? Perhaps easier to
-% implement if it is a single character, |@sin(1,2)|?
-% \item Provide an |isnan| function analogue of \cs{fp_if_nan:nTF}?
-% \item Support keyword arguments?
-% \end{itemize}
-% \pkg{Pgfmath} also provides box-measurements (depth, height, width), but
-% boxes are not possible expandably.
-%
-% Bugs, and tests to add.
-% \begin{itemize}
-% \item Check that functions are monotonic when they should.
-% \item Add exceptions to |?:|, |!<=>?|, |&&|, \verb"||", and |!|.
-% \item Logarithms of numbers very close to $1$ are inaccurate.
-% \item When rounding towards $-\infty$, |\dim_to_fp:n {0pt}| should
-% return $-0$, not $+0$.
-% \item The result of $(\pm0)+(\pm0)$, of $x+(-x)$, and of $(-x)+x$
-% should depend on the rounding mode.
-% \item \texttt{0e9999999999} gives a \TeX{} \enquote{number too
-% large} error.
-% \item Subnormals are not implemented.
-% \end{itemize}
-%
-% Possible optimizations/improvements.
-% \begin{itemize}
-% \item Document that \pkg{l3trial/l3fp-types} introduces tools for
-% adding new types.
-% \item In subsection~\ref{sec:l3fp:fp-floats}, write a grammar.
-% \item It would be nice if the \texttt{parse} auxiliaries for each
-% operation were set up in the corresponding module, rather than
-% centralizing in \pkg{l3fp-parse}.
-% \item Some functions should get an |_o| ending to indicate that they
-% expand after their result.
-% \item More care should be given to distinguish expandable/restricted
-% expandable (auxiliary and internal) functions.
-% \item The code for the \texttt{ternary} set of functions is ugly.
-% \item There are many |~| missing in the doc to avoid bad line-breaks.
-% \item The algorithm for computing the logarithm of the significand
-% could be made to use a $5$ terms Taylor series instead of $10$
-% terms by taking $c = 2000/(\lfloor 200x\rfloor +1) \in [10,95]$
-% instead of $c\in [1,10]$. Also, it would then be possible to
-% simplify the computation of $t$. However, we would then have to
-% hard-code the logarithms of $44$ small integers instead of $9$.
-% \item Improve notations in the explanations of the division
-% algorithm (\pkg{l3fp-basics}).
-% \item Understand and document \cs[no-index]{__fp_basics_pack_weird_low:NNNNw}
-% and \cs[no-index]{__fp_basics_pack_weird_high:NNNNNNNNw} better. Move the
-% other \texttt{basics_pack} auxiliaries to \pkg{l3fp-aux} under a
-% better name.
-% \item Find out if underflow can really occur for trigonometric
-% functions, and redoc as appropriate.
-% \item Add bibliography. Some of Kahan's articles, some previous
-% \TeX{} fp packages, the international standards,\ldots{}
-% \item Also take into account the \enquote{inexact} exception?
-% \item Support multi-character prefix operators (\emph{e.g.}, |@/| or
-% whatever)?
-% \end{itemize}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3fp} implementation}
-%
-% Nothing to see here: everything is in the subfiles!
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3fparray.dtx b/macros/latex/contrib/l3kernel/l3fparray.dtx
deleted file mode 100644
index 1517840431..0000000000
--- a/macros/latex/contrib/l3kernel/l3fparray.dtx
+++ /dev/null
@@ -1,398 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3fparray.dtx
-%
-% Copyright (C) 2018-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-%
-% \title{^^A
-% The \pkg{l3fparray} module\\ Fast global floating point arrays^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \section{\pkg{l3fparray} documentation}
-%
-% For applications requiring heavy use of floating points, this module
-% provides arrays which can be accessed in constant time (contrast
-% \pkg{l3seq}, where access time is linear). The interface is very
-% close to that of \pkg{l3intarray}. The size of the array is fixed and
-% must be given at point of initialisation
-%
-% \begin{function}[added = 2018-05-05]{\fparray_new:Nn, \fparray_new:cn}
-% \begin{syntax}
-% \cs{fparray_new:Nn} \meta{fparray~var} \Arg{size}
-% \end{syntax}
-% Evaluates the integer expression \meta{size} and allocates an
-% \meta{floating point array variable} with that number of (zero)
-% entries. The variable name should start with |\g_| because
-% assignments are always global.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2018-05-05]{\fparray_count:N, \fparray_count:c}
-% \begin{syntax}
-% \cs{fparray_count:N} \meta{fparray~var}
-% \end{syntax}
-% Expands to the number of entries in the \meta{floating point array
-% variable}. This is performed in constant time.
-% \end{function}
-%
-% \begin{function}[added = 2018-05-05]{\fparray_gset:Nnn, \fparray_gset:cnn}
-% \begin{syntax}
-% \cs{fparray_gset:Nnn} \meta{fparray~var} \Arg{position} \Arg{value}
-% \end{syntax}
-% Stores the result of evaluating the floating point expression
-% \meta{value} into the \meta{floating point array variable} at the
-% (integer expression) \meta{position}. If the \meta{position} is not
-% between $1$ and the \cs{fparray_count:N}, an error occurs.
-% Assignments are always global.
-% \end{function}
-%
-% \begin{function}[added = 2018-05-05]{\fparray_gzero:N, \fparray_gzero:c}
-% \begin{syntax}
-% \cs{fparray_gzero:N} \meta{fparray~var}
-% \end{syntax}
-% Sets all entries of the \meta{floating point array variable} to
-% $+0$. Assignments are always global.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2018-05-05]
-% {
-% \fparray_item:Nn, \fparray_item:cn
-% \fparray_item_to_tl:Nn, \fparray_item_to_tl:cn
-% }
-% \begin{syntax}
-% \cs{fparray_item:Nn} \meta{fparray~var} \Arg{position}
-% \end{syntax}
-% Applies \cs{fp_use:N} or \cs{fp_to_tl:N} (respectively) to the
-% floating point entry stored at the (integer expression)
-% \meta{position} in the \meta{floating point array variable}. If the
-% \meta{position} is not between $1$ and the \cs{fparray_count:N}, an
-% error occurs.
-% \end{function}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3fparray} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=fp>
-% \end{macrocode}
-%
-% In analogy to \pkg{l3intarray} it would make sense to have
-% |<@@=fparray>|, but we need direct access to \cs{@@_parse:n} from
-% \pkg{l3fp-parse}, and a few other (less crucial) internals of the
-% \pkg{l3fp} family.
-%
-% \subsection{Allocating arrays}
-%
-% There are somewhat more than $(2^{31}-1)^2$ floating point numbers so
-% we store each floating point number as three entries in integer
-% arrays. To avoid having to multiply indices by three or to add 1 etc,
-% a floating point array is just a token list consisting of three
-% tokens: integer arrays of the same size.
-%
-% \begin{variable}{\g_@@_array_int}
-% Used to generate unique names for the three integer arrays.
-% \begin{macrocode}
-\int_new:N \g_@@_array_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_array_loop_int}
-% Used to loop in \cs{@@_array_gzero:N}.
-% \begin{macrocode}
-\int_new:N \l_@@_array_loop_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\fparray_new:Nn, \fparray_new:cn}
-% \begin{macro}{\@@_array_new:nNNN}
-% Build a three-token token list, then define all three tokens to be
-% integer arrays of the same size. No need to initialize the data:
-% the integer arrays start with zeros, and three zeros denote
-% precisely \cs{c_zero_fp}, as we want.
-% \begin{macrocode}
-\cs_new_protected:Npn \fparray_new:Nn #1#2
- {
- \tl_new:N #1
- \prg_replicate:nn { 3 }
- {
- \int_gincr:N \g_@@_array_int
- \exp_args:NNc \tl_gput_right:Nn #1
- { g_@@_array_ \@@_int_to_roman:w \g_@@_array_int _intarray }
- }
- \exp_last_unbraced:Nfo \@@_array_new:nNNNN
- { \int_eval:n {#2} } #1 #1
- }
-\cs_generate_variant:Nn \fparray_new:Nn { c }
-\cs_new_protected:Npn \@@_array_new:nNNNN #1#2#3#4#5
- {
- \int_compare:nNnTF {#1} < 0
- {
- \msg_error:nnn { kernel } { negative-array-size } {#1}
- \cs_undefine:N #1
- \int_gsub:Nn \g_@@_array_int { 3 }
- }
- {
- \intarray_new:Nn #2 {#1}
- \intarray_new:Nn #3 {#1}
- \intarray_new:Nn #4 {#1}
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\fparray_count:N, \fparray_count:c}
-% Size of any of the intarrays, here we pick the third.
-% \begin{macrocode}
-\cs_new:Npn \fparray_count:N #1
- {
- \exp_after:wN \use_i:nnn
- \exp_after:wN \intarray_count:N #1
- }
-\cs_generate_variant:Nn \fparray_count:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Array items}
-%
-% \begin{macro}[EXP]{\@@_array_bounds:NNnTF, \@@_array_bounds_error:NNn}
-% See the \pkg{l3intarray} analogue: only names change.
-% The functions \cs{fparray_gset:Nnn} and \cs{fparray_item:Nn} share
-% bounds checking. The |T| branch is used if |#3| is within bounds of
-% the array |#2|.
-% \begin{macrocode}
-\cs_new:Npn \@@_array_bounds:NNnTF #1#2#3#4#5
- {
- \if_int_compare:w 1 > #3 \exp_stop_f:
- \@@_array_bounds_error:NNn #1 #2 {#3}
- #5
- \else:
- \if_int_compare:w #3 > \fparray_count:N #2 \exp_stop_f:
- \@@_array_bounds_error:NNn #1 #2 {#3}
- #5
- \else:
- #4
- \fi:
- \fi:
- }
-\cs_new:Npn \@@_array_bounds_error:NNn #1#2#3
- {
- #1 { kernel } { out-of-bounds }
- { \token_to_str:N #2 } {#3} { \fparray_count:N #2 }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\fparray_gset:Nnn, \fparray_gset:cnn}
-% \begin{macro}
-% {
-% \@@_array_gset:NNNNww, \@@_array_gset:w,
-% \@@_array_gset_recover:Nw, \@@_array_gset_special:nnNNN,
-% \@@_array_gset_normal:w
-% }
-% Evaluate, then store exponent in one intarray, sign and $8$ digits
-% of mantissa in the next, and $8$ trailing digits in the last.
-% \begin{macrocode}
-\cs_new_protected:Npn \fparray_gset:Nnn #1#2#3
- {
- \exp_after:wN \exp_after:wN
- \exp_after:wN \@@_array_gset:NNNNww
- \exp_after:wN #1
- \exp_after:wN #1
- \int_value:w \int_eval:n {#2} \exp_after:wN ;
- \exp:w \exp_end_continue_f:w \@@_parse:n {#3}
- }
-\cs_generate_variant:Nn \fparray_gset:Nnn { c }
-\cs_new_protected:Npn \@@_array_gset:NNNNww #1#2#3#4#5 ; #6 ;
- {
- \@@_array_bounds:NNnTF \msg_error:nneee #4 {#5}
- {
- \exp_after:wN \@@_change_func_type:NNN
- \@@_use_i_until_s:nw #6 ;
- \@@_array_gset:w
- \@@_array_gset_recover:Nw
- #6 ; {#5} #1 #2 #3
- }
- { }
- }
-\cs_new_protected:Npn \@@_array_gset_recover:Nw #1#2 ;
- {
- \@@_error:nffn { unknown-type } { \tl_to_str:n { #2 ; } } { } { }
- \exp_after:wN #1 \c_nan_fp
- }
-\cs_new_protected:Npn \@@_array_gset:w \s_@@ \@@_chk:w #1#2
- {
- \if_case:w #1 \exp_stop_f:
- \@@_case_return:nw { \@@_array_gset_special:nnNNN {#2} }
- \or: \exp_after:wN \@@_array_gset_normal:w
- \or: \@@_case_return:nw { \@@_array_gset_special:nnNNN { #2 3 } }
- \or: \@@_case_return:nw { \@@_array_gset_special:nnNNN { 1 } }
- \fi:
- \s_@@ \@@_chk:w #1 #2
- }
-\cs_new_protected:Npn \@@_array_gset_normal:w
- \s_@@ \@@_chk:w 1 #1 #2 #3#4#5 ; #6#7#8#9
- {
- \__kernel_intarray_gset:Nnn #7 {#6} {#2}
- \__kernel_intarray_gset:Nnn #8 {#6}
- { \if_meaning:w 2 #1 3 \else: 1 \fi: #3#4 }
- \__kernel_intarray_gset:Nnn #9 {#6} { 1 \use:nn #5 }
- }
-\cs_new_protected:Npn \@@_array_gset_special:nnNNN #1#2#3#4#5
- {
- \__kernel_intarray_gset:Nnn #3 {#2} {#1}
- \__kernel_intarray_gset:Nnn #4 {#2} {0}
- \__kernel_intarray_gset:Nnn #5 {#2} {0}
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\fparray_gzero:N, \fparray_gzero:c}
-% \begin{macrocode}
-\cs_new_protected:Npn \fparray_gzero:N #1
- {
- \int_zero:N \l_@@_array_loop_int
- \prg_replicate:nn { \fparray_count:N #1 }
- {
- \int_incr:N \l_@@_array_loop_int
- \exp_after:wN \@@_array_gset_special:nnNNN
- \exp_after:wN 0
- \exp_after:wN \l_@@_array_loop_int
- #1
- }
- }
-\cs_generate_variant:Nn \fparray_gzero:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {
-% \fparray_item:Nn,
-% \fparray_item:cn,
-% \fparray_item_to_tl:Nn,
-% \fparray_item_to_tl:cn,
-% }
-% \begin{macro}[EXP]
-% {
-% \@@_array_item:NwN,
-% \@@_array_item:NNNnN,
-% \@@_array_item:N,
-% \@@_array_item:w,
-% \@@_array_item_special:w,
-% \@@_array_item_normal:w
-% }
-% \begin{macrocode}
-\cs_new:Npn \fparray_item:Nn #1#2
- {
- \exp_after:wN \@@_array_item:NwN
- \exp_after:wN #1
- \int_value:w \int_eval:n {#2} ;
- \@@_to_decimal:w
- }
-\cs_generate_variant:Nn \fparray_item:Nn { c }
-\cs_new:Npn \fparray_item_to_tl:Nn #1#2
- {
- \exp_after:wN \@@_array_item:NwN
- \exp_after:wN #1
- \int_value:w \int_eval:n {#2} ;
- \@@_to_tl:w
- }
-\cs_generate_variant:Nn \fparray_item_to_tl:Nn { c }
-\cs_new:Npn \@@_array_item:NwN #1#2 ; #3
- {
- \@@_array_bounds:NNnTF \msg_expandable_error:nnfff #1 {#2}
- { \exp_after:wN \@@_array_item:NNNnN #1 {#2} #3 }
- { \exp_after:wN #3 \c_nan_fp }
- }
-\cs_new:Npn \@@_array_item:NNNnN #1#2#3#4
- {
- \exp_after:wN \@@_array_item:N
- \int_value:w \__kernel_intarray_item:Nn #2 {#4} \exp_after:wN ;
- \int_value:w \__kernel_intarray_item:Nn #3 {#4} \exp_after:wN ;
- \int_value:w \__kernel_intarray_item:Nn #1 {#4} ;
- }
-\cs_new:Npn \@@_array_item:N #1
- {
- \if_meaning:w 0 #1 \exp_after:wN \@@_array_item_special:w \fi:
- \@@_array_item:w #1
- }
-\cs_new:Npn \@@_array_item:w #1 #2#3#4#5 #6 ; 1 #7 ;
- {
- \exp_after:wN \@@_array_item_normal:w
- \int_value:w \if_meaning:w #1 1 0 \else: 2 \fi: \exp_stop_f:
- #7 ; {#2#3#4#5} {#6} ;
- }
-\cs_new:Npn \@@_array_item_special:w #1 ; #2 ; #3 ; #4
- {
- \exp_after:wN #4
- \exp:w \exp_end_continue_f:w
- \if_case:w #3 \exp_stop_f:
- \exp_after:wN \c_zero_fp
- \or: \exp_after:wN \c_nan_fp
- \or: \exp_after:wN \c_minus_zero_fp
- \or: \exp_after:wN \c_inf_fp
- \else: \exp_after:wN \c_minus_inf_fp
- \fi:
- }
-\cs_new:Npn \@@_array_item_normal:w #1 #2#3#4#5 #6 ; #7 ; #8 ; #9
- { #9 \s_@@ \@@_chk:w 1 #1 {#8} #7 {#2#3#4#5} {#6} ; }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3int.dtx b/macros/latex/contrib/l3kernel/l3int.dtx
deleted file mode 100644
index 9fa2a547ff..0000000000
--- a/macros/latex/contrib/l3kernel/l3int.dtx
+++ /dev/null
@@ -1,2679 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3int.dtx
-%
-% Copyright (C) 1990-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3int} module\\ Integers^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% Calculation and comparison of integer values can be carried out
-% using literal numbers, \texttt{int} registers, constants and
-% integers stored in token list variables. The standard operators
-% \texttt{+}, \texttt{-}, \texttt{/} and \texttt{*} and
-% parentheses can be used within such expressions to carry
-% arithmetic operations. This module carries out these functions
-% on \emph{integer expressions} (\enquote{\meta{int expr}}).
-%
-% \section{Integer expressions}
-%
-% Throughout this module, (almost) all \texttt{n}-type argument allow
-% for an \meta{intexpr} argument with the following syntax. The
-% \meta{integer expression} should consist,
-% after expansion, of \texttt{+}, \texttt{-}, \texttt{*}, \texttt{/},
-% \texttt{(}, \texttt{)} and of course integer operands. The result
-% is calculated by applying standard mathematical rules with the
-% following peculiarities:
-% \begin{itemize}
-% \item \texttt{/} denotes division rounded to the closest integer with
-% ties rounded away from zero;
-% \item there is an error and the overall expression evaluates to zero
-% whenever the absolute value of any intermediate result exceeds
-% $2^{31}-1$, except in the case of scaling operations
-% $a$\texttt{*}$b$\texttt{/}$c$, for which $a$\texttt{*}$b$ may be
-% arbitrarily large (but the operands $a$, $b$, $c$ are still
-% constrained to an absolute value at most $2^{31}-1$);
-% \item parentheses may not appear after unary \texttt{+} or
-% \texttt{-}, namely placing \texttt{+(} or \texttt{-(} at the start
-% of an expression or after \texttt{+}, \texttt{-}, \texttt{*},
-% \texttt{/} or~\texttt{(} leads to an error.
-% \end{itemize}
-% Each integer operand can be either an integer variable (with no need
-% for \cs{int_use:N}) or an integer denotation. For example both
-% \begin{verbatim}
-% \int_show:n { 5 + 4 * 3 - ( 3 + 4 * 5 ) }
-% \end{verbatim}
-% and
-% \begin{verbatim}
-% \tl_new:N \l_my_tl
-% \tl_set:Nn \l_my_tl { 5 }
-% \int_new:N \l_my_int
-% \int_set:Nn \l_my_int { 4 }
-% \int_show:n { \l_my_tl + \l_my_int * 3 - ( 3 + 4 * 5 ) }
-% \end{verbatim}
-% show the same result $-6$ because \cs[no-index]{l_my_tl} expands to
-% the integer denotation~|5| while the integer variable \cs[no-index]{l_my_int}
-% takes the value~$4$. As the \meta{integer expression} is fully
-% expanded from left to right during evaluation, fully expandable and
-% restricted-expandable functions can both be used, and \cs{exp_not:n}
-% and its variants have no effect while \cs{exp_not:N} may incorrectly
-% interrupt the expression.
-% \begin{texnote}
-% Exactly two expansions are needed to evaluate \cs{int_eval:n}.
-% The result is \emph{not} an \meta{internal integer}, and therefore
-% should be terminated by a space if used in \cs{int_value:w} or in
-% a \TeX{}-style integer assignment.
-%
-% As all \TeX{} integers, integer operands can also be:
-% \tn{value}\Arg{\LaTeXe{} counter}; dimension or skip variables,
-% converted to integers in~\texttt{sp}; the character code of some
-% character given as \texttt{`}\meta{char} or
-% \texttt{`\textbackslash}\meta{char}; octal numbers given as
-% \texttt{'} followed by digits from \texttt{0} to \texttt{7}; or
-% hexadecimal numbers given as |"| followed by digits and upper case
-% letters from \texttt{A} to~\texttt{F}.
-% \end{texnote}
-%
-% \begin{function}[EXP]{\int_eval:n}
-% \begin{syntax}
-% \cs{int_eval:n} \Arg{int expr}
-% \end{syntax}
-% Evaluates the \meta{int expr} and leaves the result in the
-% input stream as an integer denotation: for positive results an
-% explicit sequence of decimal digits not starting with~\texttt{0},
-% for negative results \texttt{-}~followed by such a sequence, and
-% \texttt{0}~for zero. The \meta{int expr} should consist,
-% after expansion, of \texttt{+}, \texttt{-}, \texttt{*}, \texttt{/},
-% \texttt{(}, \texttt{)} and of course integer operands. The result
-% is calculated by applying standard mathematical rules with the
-% following peculiarities:
-% \begin{itemize}
-% \item \texttt{/} denotes division rounded to the closest integer with
-% ties rounded away from zero;
-% \item there is an error and the overall expression evaluates to zero
-% whenever the absolute value of any intermediate result exceeds
-% $2^{31}-1$, except in the case of scaling operations
-% $a$\texttt{*}$b$\texttt{/}$c$, for which $a$\texttt{*}$b$ may be
-% arbitrarily large;
-% \item parentheses may not appear after unary \texttt{+} or
-% \texttt{-}, namely placing \texttt{+(} or \texttt{-(} at the start
-% of an expression or after \texttt{+}, \texttt{-}, \texttt{*},
-% \texttt{/} or~\texttt{(} leads to an error.
-% \end{itemize}
-% Each integer operand can be either an integer variable (with no need
-% for \cs{int_use:N}) or an integer denotation. For example both
-% \begin{verbatim}
-% \int_eval:n { 5 + 4 * 3 - ( 3 + 4 * 5 ) }
-% \end{verbatim}
-% and
-% \begin{verbatim}
-% \tl_new:N \l_my_tl
-% \tl_set:Nn \l_my_tl { 5 }
-% \int_new:N \l_my_int
-% \int_set:Nn \l_my_int { 4 }
-% \int_eval:n { \l_my_tl + \l_my_int * 3 - ( 3 + 4 * 5 ) }
-% \end{verbatim}
-% evaluate to $-6$ because \cs[no-index]{l_my_tl} expands to the
-% integer denotation~|5|. As the \meta{int expr} is fully
-% expanded from left to right during evaluation, fully expandable and
-% restricted-expandable functions can both be used, and \cs{exp_not:n}
-% and its variants have no effect while \cs{exp_not:N} may incorrectly
-% interrupt the expression.
-% \begin{texnote}
-% Exactly two expansions are needed to evaluate \cs{int_eval:n}.
-% The result is \emph{not} an \meta{internal integer}, and therefore
-% requires suitable termination if used in a \TeX{}-style integer
-% assignment.
-%
-% As all \TeX{} integers, integer operands can also be dimension or
-% skip variables, converted to integers in~\texttt{sp}, or octal
-% numbers given as \texttt{'} followed by digits other than
-% \texttt{8} and \texttt{9}, or hexadecimal numbers given as
-% |"| followed by digits or upper case letters from
-% \texttt{A} to~\texttt{F}, or the character code of some character
-% or one-character control sequence, given as \texttt{`}\meta{char}.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[EXP, added = 2018-03-30]{\int_eval:w}
-% \begin{syntax}
-% \cs{int_eval:w} \meta{int expr}
-% \end{syntax}
-% Evaluates the \meta{int expr} as described for
-% \cs{int_eval:n}. The end of the expression is the first token
-% encountered that cannot form part of such an expression. If that
-% token is \cs{scan_stop:} it is removed, otherwise not. Spaces do
-% \emph{not} terminate the expression. However, spaces terminate
-% explict integers, and this may terminate the expression: for
-% instance, \cs{int_eval:w} \verb*|1 + 1 9| (with explicit space
-% tokens inserted using |~| in a code setting) expands to \texttt{29}
-% since the digit~\texttt{9} is not part of the expression. Expansion
-% details, etc., are as given for \cs{int_eval:n}.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2018-11-03]{\int_sign:n}
-% \begin{syntax}
-% \cs{int_sign:n} \Arg{int expr}
-% \end{syntax}
-% Evaluates the \meta{int expr} then leaves $1$ or $0$ or
-% $-1$ in the input stream according to the sign of the result.
-% \end{function}
-%
-% \begin{function}[EXP, updated = 2012-09-26]{\int_abs:n}
-% \begin{syntax}
-% \cs{int_abs:n} \Arg{int expr}
-% \end{syntax}
-% Evaluates the \meta{int expr} as described for
-% \cs{int_eval:n} and leaves the absolute value of the result in
-% the input stream as an \meta{integer denotation} after two
-% expansions.
-% \end{function}
-%
-% \begin{function}[EXP, updated = 2012-09-26]{\int_div_round:nn}
-% \begin{syntax}
-% \cs{int_div_round:nn} \Arg{int expr_1} \Arg{int expr_2}
-% \end{syntax}
-% Evaluates the two \meta{int expr}s as described earlier,
-% then divides the first value by the second, and rounds the result
-% to the closest integer. Ties are rounded away from zero.
-% Note that this is identical to using
-% |/| directly in an \meta{int expr}. The result is left in
-% the input stream as an \meta{integer denotation} after two expansions.
-% \end{function}
-%
-% \begin{function}[EXP, updated = 2012-02-09]{\int_div_truncate:nn}
-% \begin{syntax}
-% \cs{int_div_truncate:nn} \Arg{int expr_1} \Arg{int expr_2}
-% \end{syntax}
-% Evaluates the two \meta{int expr}s as described earlier,
-% then divides the first value by the second, and rounds the result
-% towards zero. Note that division using |/|
-% rounds to the closest integer instead.
-% The result is left in the input stream as an
-% \meta{integer denotation} after two expansions.
-% \end{function}
-%
-% \begin{function}[EXP, updated = 2012-09-26]{\int_max:nn, \int_min:nn}
-% \begin{syntax}
-% \cs{int_max:nn} \Arg{int expr_1} \Arg{int expr_2}
-% \cs{int_min:nn} \Arg{int expr_1} \Arg{int expr_2}
-% \end{syntax}
-% Evaluates the \meta{int expr}s as described for
-% \cs{int_eval:n} and leaves either the larger or smaller value
-% in the input stream as an \meta{integer denotation} after two
-% expansions.
-% \end{function}
-%
-% \begin{function}[EXP, updated = 2012-09-26]{\int_mod:nn}
-% \begin{syntax}
-% \cs{int_mod:nn} \Arg{int expr_1} \Arg{int expr_2}
-% \end{syntax}
-% Evaluates the two \meta{int expr}s as described earlier,
-% then calculates the integer remainder of dividing the first
-% expression by the second. This is obtained by subtracting
-% \cs{int_div_truncate:nn} \Arg{int expr_1} \Arg{int expr_2} times
-% \meta{int expr_2} from \meta{int expr_1}. Thus, the result has the
-% same sign as \meta{int expr_1} and its absolute value is strictly
-% less than that of \meta{int expr_2}. The result is left in the input
-% stream as an \meta{integer denotation} after two expansions.
-% \end{function}
-%
-% \section{Creating and initialising integers}
-%
-% \begin{function}{\int_new:N, \int_new:c}
-% \begin{syntax}
-% \cs{int_new:N} \meta{integer}
-% \end{syntax}
-% Creates a new \meta{integer} or raises an error if the name is
-% already taken. The declaration is global. The \meta{integer} is
-% initially equal to $0$.
-% \end{function}
-%
-% \begin{function}[updated = 2011-10-22]{\int_const:Nn, \int_const:cn}
-% \begin{syntax}
-% \cs{int_const:Nn} \meta{integer} \Arg{int expr}
-% \end{syntax}
-% Creates a new constant \meta{integer} or raises an error if the name
-% is already taken. The value of the \meta{integer} is set
-% globally to the \meta{int expr}.
-% \end{function}
-%
-% \begin{function}{\int_zero:N, \int_zero:c, \int_gzero:N, \int_gzero:c}
-% \begin{syntax}
-% \cs{int_zero:N} \meta{integer}
-% \end{syntax}
-% Sets \meta{integer} to $0$.
-% \end{function}
-%
-% \begin{function}[added = 2011-12-13]
-% {\int_zero_new:N, \int_zero_new:c, \int_gzero_new:N, \int_gzero_new:c}
-% \begin{syntax}
-% \cs{int_zero_new:N} \meta{integer}
-% \end{syntax}
-% Ensures that the \meta{integer} exists globally by applying
-% \cs{int_new:N} if necessary, then applies
-% \cs[index=int_zero:N]{int_(g)zero:N} to leave
-% the \meta{integer} set to zero.
-% \end{function}
-%
-% \begin{function}
-% {
-% \int_set_eq:NN, \int_set_eq:cN, \int_set_eq:Nc, \int_set_eq:cc,
-% \int_gset_eq:NN, \int_gset_eq:cN, \int_gset_eq:Nc, \int_gset_eq:cc
-% }
-% \begin{syntax}
-% \cs{int_set_eq:NN} \meta{integer_1} \meta{integer_2}
-% \end{syntax}
-% Sets the content of \meta{integer_1} equal to that of
-% \meta{integer_2}.
-% \end{function}
-%
-% \begin{function}[EXP, pTF, added=2012-03-03]
-% {\int_if_exist:N, \int_if_exist:c}
-% \begin{syntax}
-% \cs{int_if_exist_p:N} \meta{int}
-% \cs{int_if_exist:NTF} \meta{int} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests whether the \meta{int} is currently defined. This does not
-% check that the \meta{int} really is an integer variable.
-% \end{function}
-%
-% \section{Setting and incrementing integers}
-%
-% \begin{function}[updated = 2011-10-22]
-% {\int_add:Nn, \int_add:cn, \int_gadd:Nn, \int_gadd:cn}
-% \begin{syntax}
-% \cs{int_add:Nn} \meta{integer} \Arg{int expr}
-% \end{syntax}
-% Adds the result of the \meta{int expr} to the current
-% content of the \meta{integer}.
-% \end{function}
-%
-% \begin{function}{\int_decr:N, \int_decr:c, \int_gdecr:N, \int_gdecr:c}
-% \begin{syntax}
-% \cs{int_decr:N} \meta{integer}
-% \end{syntax}
-% Decreases the value stored in \meta{integer} by $1$.
-% \end{function}
-%
-% \begin{function}{\int_incr:N, \int_incr:c, \int_gincr:N, \int_gincr:c}
-% \begin{syntax}
-% \cs{int_incr:N} \meta{integer}
-% \end{syntax}
-% Increases the value stored in \meta{integer} by $1$.
-% \end{function}
-%
-% \begin{function}[updated = 2011-10-22]
-% {\int_set:Nn, \int_set:cn, \int_gset:Nn, \int_gset:cn}
-% \begin{syntax}
-% \cs{int_set:Nn} \meta{integer} \Arg{int expr}
-% \end{syntax}
-% Sets \meta{integer} to the value of \meta{int expr},
-% which must evaluate to an integer (as described for
-% \cs{int_eval:n}).
-% \end{function}
-%
-% \begin{function}[updated = 2011-10-22]
-% {\int_sub:Nn, \int_sub:cn, \int_gsub:Nn, \int_gsub:cn}
-% \begin{syntax}
-% \cs{int_sub:Nn} \meta{integer} \Arg{int expr}
-% \end{syntax}
-% Subtracts the result of the \meta{int expr} from the
-% current content of the \meta{integer}.
-% \end{function}
-%
-% \section{Using integers}
-%
-% \begin{function}[updated = 2011-10-22, EXP]{\int_use:N, \int_use:c}
-% \begin{syntax}
-% \cs{int_use:N} \meta{integer}
-% \end{syntax}
-% Recovers the content of an \meta{integer} and places it directly
-% in the input stream. An error is raised if the variable does
-% not exist or if it is invalid. Can be omitted in places where an
-% \meta{integer} is required (such as in the first and third arguments
-% of \cs{int_compare:nNnTF}).
-% \begin{texnote}
-% \cs{int_use:N} is the \TeX{} primitive \tn{the}: this is one of
-% several \LaTeX3 names for this primitive.
-% \end{texnote}
-% \end{function}
-%
-% \section{Integer expression conditionals}
-%
-% \begin{function}[EXP,pTF]{\int_compare:nNn}
-% \begin{syntax}
-% \cs{int_compare_p:nNn} \Arg{int expr_1} \meta{relation} \Arg{int expr_2} \\
-% \cs{int_compare:nNnTF}
-% ~~\Arg{int expr_1} \meta{relation} \Arg{int expr_2}
-% ~~\Arg{true code} \Arg{false code}
-% \end{syntax}
-% This function first evaluates each of the \meta{int expr}s
-% as described for \cs{int_eval:n}. The two results are then
-% compared using the \meta{relation}:
-% \begin{center}
-% \begin{tabular}{ll}
-% Equal & |=| \\
-% Greater than & |>| \\
-% Less than & |<| \\
-% \end{tabular}
-% \end{center}
-% This function is less flexible than \cs{int_compare:nTF} but around
-% $5$~times faster.
-% \end{function}
-%
-% \begin{function}[updated = 2013-01-13, EXP, pTF]{\int_compare:n}
-% \begin{syntax}
-% \cs{int_compare_p:n} \\
-% ~~\{ \\
-% ~~~~\meta{int expr_1} \meta{relation_1} \\
-% ~~~~\ldots{} \\
-% ~~~~\meta{int expr_N} \meta{relation_N} \\
-% ~~~~\meta{int expr_{N+1}} \\
-% ~~\} \\
-% \cs{int_compare:nTF}
-% ~~\{ \\
-% ~~~~\meta{int expr_1} \meta{relation_1} \\
-% ~~~~\ldots{} \\
-% ~~~~\meta{int expr_N} \meta{relation_N} \\
-% ~~~~\meta{int expr_{N+1}} \\
-% ~~\} \\
-% ~~\Arg{true code} \Arg{false code}
-% \end{syntax}
-% This function evaluates the \meta{int expr}s as described
-% for \cs{int_eval:n} and compares consecutive result using the
-% corresponding \meta{relation}, namely it compares \meta{int expr_1}
-% and \meta{int expr_2} using the \meta{relation_1}, then
-% \meta{int expr_2} and \meta{int expr_3} using the \meta{relation_2},
-% until finally comparing \meta{int expr_N} and \meta{int expr_{N+1}}
-% using the \meta{relation_N}. The test yields \texttt{true} if all
-% comparisons are \texttt{true}. Each \meta{int expr} is
-% evaluated only once, and the evaluation is lazy, in the sense that
-% if one comparison is \texttt{false}, then no other \meta{integer
-% expression} is evaluated and no other comparison is performed.
-% The \meta{relations} can be any of the following:
-% \begin{center}
-% \begin{tabular}{ll}
-% Equal & |=| or |==| \\
-% Greater than or equal to & |>=| \\
-% Greater than & |>| \\
-% Less than or equal to & |<=| \\
-% Less than & |<| \\
-% Not equal & |!=| \\
-% \end{tabular}
-% \end{center}
-% This function is more flexible than \cs{int_compare:nNnTF} but
-% around $5$~times slower.
-% \end{function}
-%
-% \begin{function}[added = 2013-07-24, EXP, noTF]{\int_case:nn}
-% \begin{syntax}
-% \cs{int_case:nnTF} \Arg{test int expr} \\
-% ~~|{| \\
-% ~~~~\Arg{int expr case_1} \Arg{code case_1} \\
-% ~~~~\Arg{int expr case_2} \Arg{code case_2} \\
-% ~~~~\ldots \\
-% ~~~~\Arg{int expr case_n} \Arg{code case_n} \\
-% ~~|}| \\
-% ~~\Arg{true code}
-% ~~\Arg{false code}
-% \end{syntax}
-% This function evaluates the \meta{test int expr} and
-% compares this in turn to each of the
-% \meta{int expr cases}. If the two are equal then the
-% associated \meta{code} is left in the input stream
-% and other cases are discarded. If any of the
-% cases are matched, the \meta{true code} is also inserted into the
-% input stream (after the code for the appropriate case), while if none
-% match then the \meta{false code} is inserted. The function
-% \cs{int_case:nn}, which does nothing if there is no match, is also
-% available. For example
-% \begin{verbatim}
-% \int_case:nnF
-% { 2 * 5 }
-% {
-% { 5 } { Small }
-% { 4 + 6 } { Medium }
-% { -2 * 10 } { Negative }
-% }
-% { No idea! }
-% \end{verbatim}
-% leaves \enquote{\texttt{Medium}} in the input stream.
-% \end{function}
-%
-% \begin{function}[EXP,pTF]{\int_if_even:n, \int_if_odd:n}
-% \begin{syntax}
-% \cs{int_if_odd_p:n} \Arg{int expr}
-% \cs{int_if_odd:nTF} \Arg{int expr}
-% ~~\Arg{true code} \Arg{false code}
-% \end{syntax}
-% This function first evaluates the \meta{int expr}
-% as described for \cs{int_eval:n}. It then evaluates if this
-% is odd or even, as appropriate.
-% \end{function}
-%
-% \begin{function}[EXP,pTF, added = 2023-05-17]{\int_if_zero:n}
-% \begin{syntax}
-% \cs{int_if_zero_p:n} \Arg{int expr}
-% \cs{int_if_zero:nTF} \Arg{int expr}
-% ~~\Arg{true code} \Arg{false code}
-% \end{syntax}
-% This function first evaluates the \meta{int expr}
-% as described for \cs{int_eval:n}. It then evaluates if this
-% is zero or not.
-% \end{function}
-%
-% \section{Integer expression loops}
-%
-% \begin{function}[rEXP]{\int_do_until:nNnn}
-% \begin{syntax}
-% \cs{int_do_until:nNnn} \Arg{int expr_1} \meta{relation} \Arg{int expr_2} \Arg{code}
-% \end{syntax}
-% Places the \meta{code} in the input stream for \TeX{} to process, and
-% then evaluates the relationship between the two
-% \meta{int expr}s as described for \cs{int_compare:nNnTF}.
-% If the test is \texttt{false} then the \meta{code} is inserted
-% into the input stream again and a loop occurs until the
-% \meta{relation} is \texttt{true}.
-% \end{function}
-%
-% \begin{function}[rEXP]{\int_do_while:nNnn}
-% \begin{syntax}
-% \cs{int_do_while:nNnn} \Arg{int expr_1} \meta{relation} \Arg{int expr_2} \Arg{code}
-% \end{syntax}
-% Places the \meta{code} in the input stream for \TeX{} to process, and
-% then evaluates the relationship between the two
-% \meta{int expr}s as described for \cs{int_compare:nNnTF}.
-% If the test is \texttt{true} then the \meta{code} is inserted
-% into the input stream again and a loop occurs until the
-% \meta{relation} is \texttt{false}.
-% \end{function}
-%
-% \begin{function}[rEXP]{\int_until_do:nNnn}
-% \begin{syntax}
-% \cs{int_until_do:nNnn} \Arg{int expr_1} \meta{relation} \Arg{int expr_2} \Arg{code}
-% \end{syntax}
-% Evaluates the relationship between the two \meta{int expr}s
-% as described for \cs{int_compare:nNnTF}, and then places the
-% \meta{code} in the input stream if the \meta{relation} is
-% \texttt{false}. After the \meta{code} has been processed by \TeX{} the
-% test is repeated, and a loop occurs until the test is
-% \texttt{true}.
-% \end{function}
-%
-% \begin{function}[rEXP]{\int_while_do:nNnn}
-% \begin{syntax}
-% \cs{int_while_do:nNnn} \Arg{int expr_1} \meta{relation} \Arg{int expr_2} \Arg{code}
-% \end{syntax}
-% Evaluates the relationship between the two \meta{int expr}s
-% as described for \cs{int_compare:nNnTF}, and then places the
-% \meta{code} in the input stream if the \meta{relation} is
-% \texttt{true}. After the \meta{code} has been processed by \TeX{} the
-% test is repeated, and a loop occurs until the test is
-% \texttt{false}.
-% \end{function}
-%
-% \begin{function}[updated = 2013-01-13, rEXP]{\int_do_until:nn}
-% \begin{syntax}
-% \cs{int_do_until:nn} \Arg{integer relation} \Arg{code}
-% \end{syntax}
-% Places the \meta{code} in the input stream for \TeX{} to process, and
-% then evaluates the \meta{integer relation}
-% as described for \cs{int_compare:nTF}.
-% If the test is \texttt{false} then the \meta{code} is inserted
-% into the input stream again and a loop occurs until the
-% \meta{relation} is \texttt{true}.
-% \end{function}
-%
-% \begin{function}[updated = 2013-01-13, rEXP]{\int_do_while:nn}
-% \begin{syntax}
-% \cs{int_do_while:nn} \Arg{integer relation} \Arg{code}
-% \end{syntax}
-% Places the \meta{code} in the input stream for \TeX{} to process, and
-% then evaluates the \meta{integer relation}
-% as described for \cs{int_compare:nTF}.
-% If the test is \texttt{true} then the \meta{code} is inserted
-% into the input stream again and a loop occurs until the
-% \meta{relation} is \texttt{false}.
-% \end{function}
-%
-% \begin{function}[updated = 2013-01-13, rEXP]{\int_until_do:nn}
-% \begin{syntax}
-% \cs{int_until_do:nn} \Arg{integer relation} \Arg{code}
-% \end{syntax}
-% Evaluates the \meta{integer relation}
-% as described for \cs{int_compare:nTF}, and then places the
-% \meta{code} in the input stream if the \meta{relation} is
-% \texttt{false}. After the \meta{code} has been processed by \TeX{} the
-% test is repeated, and a loop occurs until the test is
-% \texttt{true}.
-% \end{function}
-%
-% \begin{function}[updated = 2013-01-13, rEXP]{\int_while_do:nn}
-% \begin{syntax}
-% \cs{int_while_do:nn} \Arg{integer relation} \Arg{code}
-% \end{syntax}
-% Evaluates the \meta{integer relation}
-% as described for \cs{int_compare:nTF}, and then places the
-% \meta{code} in the input stream if the \meta{relation} is
-% \texttt{true}. After the \meta{code} has been processed by \TeX{} the
-% test is repeated, and a loop occurs until the test is
-% \texttt{false}.
-% \end{function}
-%
-% \section{Integer step functions}
-%
-% \begin{function}[added = 2012-06-04, updated = 2018-04-22, rEXP]
-% {\int_step_function:nN, \int_step_function:nnN, \int_step_function:nnnN}
-% \begin{syntax}
-% \cs{int_step_function:nN} \Arg{final value} \meta{function}
-% \cs{int_step_function:nnN} \Arg{initial value} \Arg{final value} \meta{function}
-% \cs{int_step_function:nnnN} \Arg{initial value} \Arg{step} \Arg{final value} \meta{function}
-% \end{syntax}
-% This function first evaluates the \meta{initial value}, \meta{step}
-% and \meta{final value}, all of which should be integer expressions.
-% The \meta{function} is then placed in front of each \meta{value}
-% from the \meta{initial value} to the \meta{final value} in turn
-% (using \meta{step} between each \meta{value}). The \meta{step} must
-% be non-zero. If the \meta{step} is positive, the loop stops when
-% the \meta{value} becomes larger than the \meta{final value}. If the
-% \meta{step} is negative, the loop stops when the \meta{value}
-% becomes smaller than the \meta{final value}. The \meta{function}
-% should absorb one numerical argument. For example
-% \begin{verbatim}
-% \cs_set:Npn \my_func:n #1 { [I~saw~#1] \quad }
-% \int_step_function:nnnN { 1 } { 1 } { 5 } \my_func:n
-% \end{verbatim}
-% would print
-% \begin{quote}
-% [I saw 1] \quad
-% [I saw 2] \quad
-% [I saw 3] \quad
-% [I saw 4] \quad
-% [I saw 5] \quad
-% \end{quote}
-%
-% The functions \cs{int_step_function:nN} and \cs{int_step_function:nnN}
-% both use a fixed \meta{step} of $1$, and in the case of
-% \cs{int_step_function:nN} the \meta{initial value} is also fixed as
-% $1$. These functions are provided as simple short-cuts for code clarity.
-% \end{function}
-%
-% \begin{function}[added = 2012-06-04, updated = 2018-04-22]
-% {\int_step_inline:nn, \int_step_inline:nnn, \int_step_inline:nnnn}
-% \begin{syntax}
-% \cs{int_step_inline:nn} \Arg{final value} \Arg{code}
-% \cs{int_step_inline:nnn} \Arg{initial value} \Arg{final value} \Arg{code}
-% \cs{int_step_inline:nnnn} \Arg{initial value} \Arg{step} \Arg{final value} \Arg{code}
-% \end{syntax}
-% This function first evaluates the \meta{initial value}, \meta{step}
-% and \meta{final value}, all of which should be integer expressions.
-% Then for each \meta{value} from the \meta{initial value} to the
-% \meta{final value} in turn (using \meta{step} between each
-% \meta{value}), the \meta{code} is inserted into the input stream
-% with |#1| replaced by the current \meta{value}. Thus the
-% \meta{code} should define a function of one argument~(|#1|).
-%
-% The functions \cs{int_step_inline:nn} and \cs{int_step_inline:nnn}
-% both use a fixed \meta{step} of $1$, and in the case of
-% \cs{int_step_inline:nn} the \meta{initial value} is also fixed as
-% $1$. These functions are provided as simple short-cuts for code clarity.
-% \end{function}
-%
-% \begin{function}[added = 2012-06-04, updated = 2018-04-22]
-% {\int_step_variable:nNn, \int_step_variable:nnNn, \int_step_variable:nnnNn}
-% \begin{syntax}
-% \cs{int_step_variable:nNn} \Arg{final value} \meta{tl~var} \Arg{code}
-% \cs{int_step_variable:nnNn} \Arg{initial value} \Arg{final value} \meta{tl~var} \Arg{code}
-% \cs{int_step_variable:nnnNn} \Arg{initial value} \Arg{step} \Arg{final value} \meta{tl~var} \Arg{code}
-% \end{syntax}
-% This function first evaluates the \meta{initial value}, \meta{step}
-% and \meta{final value}, all of which should be integer expressions.
-% Then for each \meta{value} from the \meta{initial value} to the
-% \meta{final value} in turn (using \meta{step} between each
-% \meta{value}), the \meta{code} is inserted into the input stream,
-% with the \meta{tl~var} defined as the current \meta{value}. Thus
-% the \meta{code} should make use of the \meta{tl~var}.
-%
-% The functions \cs{int_step_variable:nNn} and \cs{int_step_variable:nnNn}
-% both use a fixed \meta{step} of $1$, and in the case of
-% \cs{int_step_variable:nNn} the \meta{initial value} is also fixed as
-% $1$. These functions are provided as simple short-cuts for code clarity.
-% \end{function}
-%
-% \section{Formatting integers}
-%
-% Integers can be placed into the output stream with formatting. These
-% conversions apply to any integer expressions.
-%
-% \begin{function}[updated = 2011-10-22, EXP]{\int_to_arabic:n, \int_to_arabic:v}
-% \begin{syntax}
-% \cs{int_to_arabic:n} \Arg{int expr}
-% \end{syntax}
-% Places the value of the \meta{int expr} in the input
-% stream as digits, with category code $12$ (other).
-% \end{function}
-%
-% \begin{function}[updated = 2011-09-17, EXP]{\int_to_alph:n, \int_to_Alph:n}
-% \begin{syntax}
-% \cs{int_to_alph:n} \Arg{int expr}
-% \end{syntax}
-% Evaluates the \meta{int expr} and converts the result
-% into a series of letters, which are then left in the input stream.
-% The conversion rule uses the $26$ letters of the English
-% alphabet, in order, adding letters when necessary to increase the total
-% possible range of representable numbers. Thus
-% \begin{verbatim}
-% \int_to_alph:n { 1 }
-% \end{verbatim}
-% places |a| in the input stream,
-% \begin{verbatim}
-% \int_to_alph:n { 26 }
-% \end{verbatim}
-% is represented as |z| and
-% \begin{verbatim}
-% \int_to_alph:n { 27 }
-% \end{verbatim}
-% is converted to |aa|. For conversions using other alphabets, use
-% \cs{int_to_symbols:nnn} to define an alphabet-specific
-% function. The basic \cs{int_to_alph:n} and \cs{int_to_Alph:n}
-% functions should not be modified.
-% The resulting tokens are digits with category code $12$ (other) and
-% letters with category code $11$ (letter).
-% \end{function}
-%
-% \begin{function}[updated = 2011-09-17, EXP]{\int_to_symbols:nnn}
-% \begin{syntax}
-% \cs{int_to_symbols:nnn}
-% ~~\Arg{int expr} \Arg{total symbols}
-% ~~\Arg{value to symbol mapping}
-% \end{syntax}
-% This is the low-level function for conversion of an
-% \meta{int expr} into a symbolic form (often
-% letters). The \meta{total symbols} available should be given
-% as an integer expression. Values are actually converted to symbols
-% according to the \meta{value to symbol mapping}. This should be given
-% as \meta{total symbols} pairs of entries, a number and the
-% appropriate symbol. Thus the \cs{int_to_alph:n} function is defined
-% as
-% \begin{verbatim}
-% \cs_new:Npn \int_to_alph:n #1
-% {
-% \int_to_symbols:nnn {#1} { 26 }
-% {
-% { 1 } { a }
-% { 2 } { b }
-% ...
-% { 26 } { z }
-% }
-% }
-% \end{verbatim}
-% \end{function}
-%
-% \begin{function}[added = 2014-02-11, EXP]{\int_to_bin:n}
-% \begin{syntax}
-% \cs{int_to_bin:n} \Arg{int expr}
-% \end{syntax}
-% Calculates the value of the \meta{int expr} and places
-% the binary representation of the result in the input stream.
-% \end{function}
-%
-% \begin{function}[added = 2014-02-11, EXP]{\int_to_hex:n, \int_to_Hex:n}
-% \begin{syntax}
-% \cs{int_to_hex:n} \Arg{int expr}
-% \end{syntax}
-% Calculates the value of the \meta{int expr} and places
-% the hexadecimal (base~$16$) representation of the result in the
-% input stream. Letters are used for digits beyond~$9$: lower
-% case letters for \cs{int_to_hex:n} and upper case ones for
-% \cs{int_to_Hex:n}.
-% The resulting tokens are digits with category code $12$ (other) and
-% letters with category code $11$ (letter).
-% \end{function}
-%
-% \begin{function}[added = 2014-02-11, EXP]{\int_to_oct:n}
-% \begin{syntax}
-% \cs{int_to_oct:n} \Arg{int expr}
-% \end{syntax}
-% Calculates the value of the \meta{int expr} and places
-% the octal (base~$8$) representation of the result in the input
-% stream.
-% The resulting tokens are digits with category code $12$ (other) and
-% letters with category code $11$ (letter).
-% \end{function}
-%
-% \begin{function}[updated = 2014-02-11, EXP]
-% {\int_to_base:nn, \int_to_Base:nn}
-% \begin{syntax}
-% \cs{int_to_base:nn} \Arg{int expr} \Arg{base}
-% \end{syntax}
-% Calculates the value of the \meta{int expr} and
-% converts it into the appropriate representation in the \meta{base};
-% the later may be given as an integer expression. For bases greater
-% than $10$ the higher \enquote{digits} are represented by
-% letters from the English alphabet: lower
-% case letters for \cs{int_to_base:n} and upper case ones for
-% \cs{int_to_Base:n}.
-% The maximum \meta{base} value is $36$.
-% The resulting tokens are digits with category code $12$ (other) and
-% letters with category code $11$ (letter).
-% \begin{texnote}
-% This is a generic version of \cs{int_to_bin:n}, \emph{etc.}
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[updated = 2011-10-22, rEXP]{\int_to_roman:n, \int_to_Roman:n}
-% \begin{syntax}
-% \cs{int_to_roman:n} \Arg{int expr}
-% \end{syntax}
-% Places the value of the \meta{int expr} in the input
-% stream as Roman numerals, either lower case (\cs{int_to_roman:n}) or
-% upper case (\cs{int_to_Roman:n}). If the value is negative or zero,
-% the output is empty. The Roman numerals are letters with category
-% code $11$ (letter). The letters used are |mdclxvi|, repeated as
-% needed: the notation with bars (such as $\bar{\mbox{v}}$ for $5000$)
-% is \emph{not} used. For instance \cs{int_to_roman:n} |{| 8249 |}|
-% expands to |mmmmmmmmccxlix|.
-% \end{function}
-%
-% \section{Converting from other formats to integers}
-%
-% \begin{function}[updated = 2014-08-25, EXP]{\int_from_alph:n}
-% \begin{syntax}
-% \cs{int_from_alph:n} \Arg{letters}
-% \end{syntax}
-% Converts the \meta{letters} into the integer (base~$10$)
-% representation and leaves this in the input stream. The
-% \meta{letters} are first converted to a string, with no expansion.
-% Lower and upper case letters from the English alphabet may be used,
-% with \enquote{a} equal to $1$ through to \enquote{z} equal to $26$.
-% The function also accepts a leading sign, made of |+| and~|-|. This
-% is the inverse function of \cs{int_to_alph:n} and
-% \cs{int_to_Alph:n}.
-% \end{function}
-%
-% \begin{function}[added = 2014-02-11, updated = 2014-08-25, EXP]
-% {\int_from_bin:n}
-% \begin{syntax}
-% \cs{int_from_bin:n} \Arg{binary number}
-% \end{syntax}
-% Converts the \meta{binary number} into the integer (base~$10$)
-% representation and leaves this in the input stream.
-% The \meta{binary number} is first converted to a string, with no
-% expansion. The function accepts a leading sign, made of |+|
-% and~|-|, followed by binary digits. This is the inverse function
-% of \cs{int_to_bin:n}.
-% \end{function}
-%
-% \begin{function}[added = 2014-02-11, updated = 2014-08-25, EXP]
-% {\int_from_hex:n}
-% \begin{syntax}
-% \cs{int_from_hex:n} \Arg{hexadecimal number}
-% \end{syntax}
-% Converts the \meta{hexadecimal number} into the integer (base~$10$)
-% representation and leaves this in the input stream. Digits greater
-% than $9$ may be represented in the \meta{hexadecimal number} by
-% upper or lower case letters. The \meta{hexadecimal number} is first
-% converted to a string, with no expansion. The function also accepts
-% a leading sign, made of |+| and~|-|. This is the inverse function
-% of \cs{int_to_hex:n} and \cs{int_to_Hex:n}.
-% \end{function}
-%
-% \begin{function}[added = 2014-02-11, updated = 2014-08-25, EXP]
-% {\int_from_oct:n}
-% \begin{syntax}
-% \cs{int_from_oct:n} \Arg{octal number}
-% \end{syntax}
-% Converts the \meta{octal number} into the integer (base~$10$)
-% representation and leaves this in the input stream.
-% The \meta{octal number} is first converted to a string, with no
-% expansion. The function accepts a leading sign, made of |+|
-% and~|-|, followed by octal digits. This is the inverse function
-% of \cs{int_to_oct:n}.
-% \end{function}
-%
-% \begin{function}[updated = 2014-08-25, updated = 2014-08-25, EXP]
-% {\int_from_roman:n}
-% \begin{syntax}
-% \cs{int_from_roman:n} \Arg{roman numeral}
-% \end{syntax}
-% Converts the \meta{roman numeral} into the integer (base~$10$)
-% representation and leaves this in the input stream. The \meta{roman
-% numeral} is first converted to a string, with no expansion. The
-% \meta{roman numeral} may be in upper or lower case; if the numeral
-% contains characters besides |mdclxvi| or |MDCLXVI| then the
-% resulting value is $-1$. This is the inverse function of
-% \cs{int_to_roman:n} and \cs{int_to_Roman:n}.
-% \end{function}
-%
-% \begin{function}[updated = 2014-08-25, EXP]{\int_from_base:nn}
-% \begin{syntax}
-% \cs{int_from_base:nn} \Arg{number} \Arg{base}
-% \end{syntax}
-% Converts the \meta{number} expressed in \meta{base} into the
-% appropriate value in base $10$. The \meta{number} is first
-% converted to a string, with no expansion. The \meta{number} should
-% consist of digits and letters (either lower or upper case), plus
-% optionally a leading sign. The maximum \meta{base} value is $36$.
-% This is the inverse function of \cs{int_to_base:nn} and
-% \cs{int_to_Base:nn}.
-% \end{function}
-%
-% \section{Random integers}
-%
-% \begin{function}[EXP, added = 2016-12-06, updated = 2018-04-27]{\int_rand:nn}
-% \begin{syntax}
-% \cs{int_rand:nn} \Arg{int expr_1} \Arg{int expr_2}
-% \end{syntax}
-% Evaluates the two \meta{int expr}s and produces a
-% pseudo-random number between the two (with bounds included).
-% This is not available in older versions of \XeTeX{}.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2018-05-05]{\int_rand:n}
-% \begin{syntax}
-% \cs{int_rand:n} \Arg{int expr}
-% \end{syntax}
-% Evaluates the \meta{int expr} then produces a
-% pseudo-random number between $1$ and the \meta{int expr} (included).
-% This is not available in older versions of \XeTeX{}.
-% \end{function}
-%
-% \section{Viewing integers}
-%
-% \begin{function}{\int_show:N, \int_show:c}
-% \begin{syntax}
-% \cs{int_show:N} \meta{integer}
-% \end{syntax}
-% Displays the value of the \meta{integer} on the terminal.
-% \end{function}
-%
-% \begin{function}[added = 2011-11-22, updated = 2015-08-07]{\int_show:n}
-% \begin{syntax}
-% \cs{int_show:n} \Arg{int expr}
-% \end{syntax}
-% Displays the result of evaluating the \meta{int expr}
-% on the terminal.
-% \end{function}
-%
-% \begin{function}[added = 2014-08-22, updated = 2015-08-03]{\int_log:N, \int_log:c}
-% \begin{syntax}
-% \cs{int_log:N} \meta{integer}
-% \end{syntax}
-% Writes the value of the \meta{integer} in the log file.
-% \end{function}
-%
-% \begin{function}[added = 2014-08-22, updated = 2015-08-07]{\int_log:n}
-% \begin{syntax}
-% \cs{int_log:n} \Arg{int expr}
-% \end{syntax}
-% Writes the result of evaluating the \meta{int expr}
-% in the log file.
-% \end{function}
-%
-% \section{Constant integers}
-%
-% \begin{variable}[added = 2018-05-07]{\c_zero_int, \c_one_int}
-% Integer values used with primitive tests and assignments: their
-% self-terminating nature makes these more convenient and faster than
-% literal numbers.
-% \end{variable}
-%
-% \begin{variable}[module = int]{\c_max_int}
-% The maximum value that can be stored as an integer.
-% \end{variable}
-%
-% \begin{variable}[module = int]{\c_max_register_int}
-% Maximum number of registers.
-% \end{variable}
-%
-% \begin{variable}[module = int]{\c_max_char_int}
-% Maximum character code completely supported by the engine.
-% \end{variable}
-%
-% \section{Scratch integers}
-%
-% \begin{variable}{\l_tmpa_int, \l_tmpb_int}
-% Scratch integer for local assignment. These are never used by
-% the kernel code, and so are safe for use with any \LaTeX3-defined
-% function. However, they may be overwritten by other non-kernel
-% code and so should only be used for short-term storage.
-% \end{variable}
-%
-% \begin{variable}{\g_tmpa_int, \g_tmpb_int}
-% Scratch integer for global assignment. These are never used by
-% the kernel code, and so are safe for use with any \LaTeX3-defined
-% function. However, they may be overwritten by other non-kernel
-% code and so should only be used for short-term storage.
-% \end{variable}
-%
-% \section{Direct number expansion}
-%
-% \begin{function}[EXP, added = 2018-03-27]{\int_value:w}
-% \begin{syntax}
-% \cs{int_value:w} \meta{integer}
-% \cs{int_value:w} \meta{integer denotation} \meta{optional space}
-% \end{syntax}
-% Expands the following tokens until an \meta{integer} is formed, and
-% leaves a normalized form (no leading sign except for negative
-% numbers, no leading digit~|0| except for zero) in the input stream
-% as category code $12$ (other) characters. The \meta{integer} can
-% consist of any number of signs (with intervening spaces) followed
-% by
-% \begin{itemize}
-% \item an integer variable (in fact, any \TeX{} register except
-% \tn{toks}) or
-% \item explicit digits (or by |'|\meta{octal digits} or |"|\meta{hexadecimal digits} or |`|\meta{character}).
-% \end{itemize}
-% In this last case expansion stops once a non-digit is found; if that is a
-% space it is removed as in \texttt{f}-expansion, and so \cs{exp_stop_f:}
-% may be employed as an end marker. Note that protected functions
-% \emph{are} expanded by this process.
-%
-% This function requires exactly one expansion to produce a value, and so
-% is suitable for use in cases where a number is required \enquote{directly}.
-% In general, \cs{int_eval:n} is the preferred approach to generating
-% numbers.
-% \begin{texnote}
-% This is the \TeX{} primitive \tn{number}.
-% \end{texnote}
-% \end{function}
-%
-% \section{Primitive conditionals}
-%
-% \begin{function}[EXP]{\if_int_compare:w}
-% \begin{syntax}
-% \cs{if_int_compare:w} \meta{integer_1} \meta{relation} \meta{integer_2}
-% ~~\meta{true code}
-% \cs{else:}
-% ~~\meta{false code}
-% \cs{fi:}
-% \end{syntax}
-% Compare two integers using \meta{relation}, which must be one of
-% |=|, |<| or |>| with category code $12$.
-% The \cs{else:} branch is optional.
-% \begin{texnote}
-% This is the \TeX{} primitive \tn{ifnum}.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[EXP]{\if_case:w, \or:}
-% \begin{syntax}
-% \cs{if_case:w} \meta{integer} \meta{case_0}
-% ~~\cs{or:} \meta{case_1}
-% ~~\cs{or:} |...|
-% ~~\cs{else:} \meta{default}
-% \cs{fi:}
-% \end{syntax}
-% Selects a case to execute based on the value of the \meta{integer}. The
-% first case (\meta{case_0}) is executed if \meta{integer} is $0$, the second
-% (\meta{case_1}) if the \meta{integer} is $1$, \emph{etc.} The
-% \meta{integer} may be a literal, a constant or an integer
-% expression (\emph{e.g.}~using \cs{int_eval:n}).
-% \begin{texnote}
-% These are the \TeX{} primitives \tn{ifcase} and \tn{or}.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[EXP]{\if_int_odd:w}
-% \begin{syntax}
-% \cs{if_int_odd:w} \meta{tokens} \meta{optional space}
-% ~~\meta{true code}
-% \cs{else:}
-% ~~\meta{true code}
-% \cs{fi:}
-% \end{syntax}
-% Expands \meta{tokens} until a non-numeric token or a space is found, and
-% tests whether the resulting \meta{integer} is odd. If so, \meta{true code}
-% is executed. The \cs{else:} branch is optional.
-% \begin{texnote}
-% This is the \TeX{} primitive \tn{ifodd}.
-% \end{texnote}
-% \end{function}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3int} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=int>
-% \end{macrocode}
-%
-% \TestFiles{m3int001,m3int002,m3int03}
-%
-% \begin{variable}{\c_max_register_int}
-% Done in \pkg{l3basics}.
-% \end{variable}
-%
-% \begin{macro}{\@@_to_roman:w}
-% \begin{macro}{\if_int_compare:w}
-% Done in \pkg{l3basics}.
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\or:}
-% Done in \pkg{l3basics}.
-% \end{macro}
-%
-% \begin{macro}{\int_value:w}
-% \begin{macro}{\@@_eval:w}
-% \begin{macro}{\@@_eval_end:}
-% \begin{macro}{\if_int_odd:w}
-% \begin{macro}{\if_case:w}
-% Here are the remaining primitives for number comparisons and
-% expressions.
-% \begin{macrocode}
-\cs_new_eq:NN \int_value:w \tex_number:D
-\cs_new_eq:NN \@@_eval:w \tex_numexpr:D
-\cs_new_eq:NN \@@_eval_end: \tex_relax:D
-\cs_new_eq:NN \if_int_odd:w \tex_ifodd:D
-\cs_new_eq:NN \if_case:w \tex_ifcase:D
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{variable}{\s_@@_mark,\s_@@_stop}
-% Scan marks used throughout the module.
-% \begin{macrocode}
-\scan_new:N \s_@@_mark
-\scan_new:N \s_@@_stop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[EXP]{\@@_use_none_delimit_by_s_stop:w}
-% Function to gobble until a scan mark.
-% \begin{macrocode}
-\cs_new:Npn \@@_use_none_delimit_by_s_stop:w #1 \s_@@_stop { }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\q_@@_recursion_tail,\q_@@_recursion_stop}
-% Quarks for recursion.
-% \begin{macrocode}
-\quark_new:N \q_@@_recursion_tail
-\quark_new:N \q_@@_recursion_stop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[EXP]{\@@_if_recursion_tail_stop_do:Nn,\@@_if_recursion_tail_stop:N}
-% Functions to query quarks.
-% \begin{macrocode}
-\__kernel_quark_new_test:N \@@_if_recursion_tail_stop_do:Nn
-\__kernel_quark_new_test:N \@@_if_recursion_tail_stop:N
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Integer expressions}
-%
-% \begin{macro}{\int_eval:n}
-% \begin{macro}{\int_eval:w}
-% Wrapper for \cs{@@_eval:w}: can be used in an integer expression or
-% directly in the input stream. It is very slightly faster to use
-% \tn{the} rather than \tn{number} to turn the expression to a number.
-% When debugging, we introduce parentheses to catch early termination (see \pkg{l3debug}).
-% \begin{macrocode}
-\cs_new:Npn \int_eval:n #1
- { \tex_the:D \@@_eval:w #1 \@@_eval_end: }
-\cs_new:Npn \int_eval:w { \tex_the:D \@@_eval:w }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\int_sign:n, \@@_sign:Nw}
-% See \cs{int_abs:n}. Evaluate the expression once (and when
-% debugging is enabled, check that the expression is well-formed),
-% then test the first character to determine the sign. This is
-% wrapped in \cs{int_value:w} \ldots{} \cs{exp_stop_f:} to ensure a
-% fixed number of expansions and to avoid dealing with closing the
-% conditionals.
-% \begin{macrocode}
-\cs_new:Npn \int_sign:n #1
- {
- \int_value:w \exp_after:wN \@@_sign:Nw
- \int_value:w \@@_eval:w #1 \@@_eval_end: ;
- \exp_stop_f:
- }
-\cs_new:Npn \@@_sign:Nw #1#2 ;
- {
- \if_meaning:w 0 #1
- 0
- \else:
- \if_meaning:w - #1 - \fi: 1
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\int_abs:n}
-% \begin{macro}[EXP]{\@@_abs:N}
-% \UnitTested
-% \begin{macro}[EXP]{\int_max:nn}
-% \begin{macro}[EXP]{\int_min:nn}
-% \begin{macro}[EXP]{\@@_maxmin:wwN}
-% \UnitTested
-% \UnitTested
-% Functions for $\min$, $\max$, and absolute value with only one
-% evaluation. The absolute value is obtained by removing a leading
-% sign if any. All three functions expand in two steps.
-% \begin{macrocode}
-\cs_new:Npn \int_abs:n #1
- {
- \int_value:w \exp_after:wN \@@_abs:N
- \int_value:w \@@_eval:w #1 \@@_eval_end:
- \exp_stop_f:
- }
-\cs_new:Npn \@@_abs:N #1
- { \if_meaning:w - #1 \else: \exp_after:wN #1 \fi: }
-\cs_new:Npn \int_max:nn #1#2
- {
- \int_value:w \exp_after:wN \@@_maxmin:wwN
- \int_value:w \@@_eval:w #1 \exp_after:wN ;
- \int_value:w \@@_eval:w #2 ;
- >
- \exp_stop_f:
- }
-\cs_new:Npn \int_min:nn #1#2
- {
- \int_value:w \exp_after:wN \@@_maxmin:wwN
- \int_value:w \@@_eval:w #1 \exp_after:wN ;
- \int_value:w \@@_eval:w #2 ;
- <
- \exp_stop_f:
- }
-\cs_new:Npn \@@_maxmin:wwN #1 ; #2 ; #3
- {
- \if_int_compare:w #1 #3 #2 ~
- #1
- \else:
- #2
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\int_div_truncate:nn}
-% \UnitTested
-% \begin{macro}[EXP]{\int_div_round:nn}
-% \UnitTested
-% \begin{macro}[EXP]{\int_mod:nn}
-% \UnitTested
-% \begin{macro}[EXP]{\@@_div_truncate:NwNw}
-% \begin{macro}[EXP]{\@@_mod:ww}
-% As \cs{@@_eval:w} rounds the result of a division we also provide a
-% version that truncates the result. We use an auxiliary to make sure
-% numerator and denominator are only evaluated once: this comes in
-% handy when those are more expressions are expensive to evaluate
-% (\emph{e.g.}, \cs{tl_count:n}). If the numerator |#1#2| is $0$,
-% then we divide $0$ by the denominator (this ensures that $0/0$ is
-% correctly reported as an error). Otherwise, shift the numerator
-% |#1#2| towards $0$ by $(\left\vert\texttt{\#3\#4}\right\vert-1)/2$, which we
-% round away from zero. It turns out that this quantity exactly
-% compensates the difference between \eTeX{}'s rounding and the
-% truncating behaviour that we want. The details are thanks to Heiko
-% Oberdiek: getting things right in all cases is not so easy.
-% \begin{macrocode}
-\cs_new:Npn \int_div_truncate:nn #1#2
- {
- \int_value:w \@@_eval:w
- \exp_after:wN \@@_div_truncate:NwNw
- \int_value:w \@@_eval:w #1 \exp_after:wN ;
- \int_value:w \@@_eval:w #2 ;
- \@@_eval_end:
- }
-\cs_new:Npn \@@_div_truncate:NwNw #1#2; #3#4;
- {
- \if_meaning:w 0 #1
- 0
- \else:
- (
- #1#2
- \if_meaning:w - #1 + \else: - \fi:
- ( \if_meaning:w - #3 - \fi: #3#4 - 1 ) / 2
- )
- \fi:
- / #3#4
- }
-% \end{macrocode}
-% For the sake of completeness:
-% \begin{macrocode}
-\cs_new:Npn \int_div_round:nn #1#2
- { \int_value:w \@@_eval:w ( #1 ) / ( #2 ) \@@_eval_end: }
-% \end{macrocode}
-% Finally there's the modulus operation.
-% \begin{macrocode}
-\cs_new:Npn \int_mod:nn #1#2
- {
- \int_value:w \@@_eval:w \exp_after:wN \@@_mod:ww
- \int_value:w \@@_eval:w #1 \exp_after:wN ;
- \int_value:w \@@_eval:w #2 ;
- \@@_eval_end:
- }
-\cs_new:Npn \@@_mod:ww #1; #2;
- { #1 - ( \@@_div_truncate:NwNw #1 ; #2 ; ) * #2 }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\__kernel_int_add:nnn}
-% Equivalent to \cs{int_eval:n} |{#1+#2+#3}| except that overflow only
-% occurs if the final result overflows $[-2^{31}+1,2^{31}-1]$. The
-% idea is to choose the order in which the three numbers are added
-% together. If |#1| and |#2| have opposite signs (one is in
-% $[-2^{31}+1,-1]$ and the other in $[0,2^{31}-1]$) then |#1+#2|
-% cannot overflow so we compute the result as |#1+#2+#3|. If they
-% have the same sign, then either |#3| has the same sign and the order
-% does not matter, or |#3| has the opposite sign and any order in
-% which |#3| is not last will work. We use |#1+#3+#2|.
-% \begin{macrocode}
-\cs_new:Npn \__kernel_int_add:nnn #1#2#3
- {
- \int_value:w \@@_eval:w #1
- \if_int_compare:w #2 < \c_zero_int \exp_after:wN \reverse_if:N \fi:
- \if_int_compare:w #1 < \c_zero_int + #2 + #3 \else: + #3 + #2 \fi:
- \@@_eval_end:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Creating and initialising integers}
-%
-% \begin{macro}{\int_new:N, \int_new:c}
-% \UnitTested
-% Two ways to do this: one for the format and one for the \LaTeXe{}
-% package. In plain \TeX{}, \cs{newcount} (and other allocators) are
-% \cs{outer}: to allow the code here to work in \enquote{generic} mode
-% this is therefore accessed by name. (The same applies to \cs{newbox},
-% \cs{newdimen} and so on.)
-% \begin{macrocode}
-\cs_new_protected:Npn \int_new:N #1
- {
- \__kernel_chk_if_free_cs:N #1
- \cs:w newcount \cs_end: #1
- }
-\cs_generate_variant:Nn \int_new:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\int_const:Nn, \int_const:cn}
-% \begin{macro}{\@@_const:nN, \@@_const:eN}
-% \begin{macro}{\@@_constdef:Nw}
-% \begin{variable}{\c_@@_max_constdef_int}
-% \UnitTested
-% As stated, most constants can be defined as \tn{chardef} or
-% \tn{mathchardef} but that's engine dependent. As a result, there is some
-% set up code to determine what can be done. No full engine testing just yet
-% so everything is a little awkward.
-% We cannot use \cs{int_gset:Nn} because (when |check-declarations| is
-% enabled) this runs some checks that constants would fail.
-% \begin{macrocode}
-\cs_new_protected:Npn \int_const:Nn #1#2
- { \@@_const:eN { \int_eval:n {#2} } #1 }
-\cs_generate_variant:Nn \int_const:Nn { c }
-\cs_new_protected:Npn \@@_const:nN #1#2
- {
- \int_compare:nNnTF {#1} < \c_zero_int
- {
- \int_new:N #2
- \tex_global:D
- }
- {
- \int_compare:nNnTF {#1} > \c_@@_max_constdef_int
- {
- \int_new:N #2
- \tex_global:D
- }
- {
- \__kernel_chk_if_free_cs:N #2
- \tex_global:D \@@_constdef:Nw
- }
- }
- #2 = \@@_eval:w #1 \@@_eval_end:
- }
-\cs_generate_variant:Nn \@@_const:nN { e }
-\if_int_odd:w 0
- \cs_if_exist:NT \tex_luatexversion:D { 1 }
- \cs_if_exist:NT \tex_omathchardef:D { 1 }
- \cs_if_exist:NT \tex_XeTeXversion:D { 1 } ~
- \cs_if_exist:NTF \tex_omathchardef:D
- { \cs_new_eq:NN \@@_constdef:Nw \tex_omathchardef:D }
- { \cs_new_eq:NN \@@_constdef:Nw \tex_chardef:D }
- \tex_global:D \@@_constdef:Nw \c_@@_max_constdef_int 1114111 ~
-\else:
- \cs_new_eq:NN \@@_constdef:Nw \tex_mathchardef:D
- \tex_global:D \@@_constdef:Nw \c_@@_max_constdef_int 32767 ~
-\fi:
-% \end{macrocode}
-% \end{variable}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\int_zero:N, \int_zero:c}
-% \UnitTested
-% \begin{macro}{\int_gzero:N, \int_gzero:c}
-% \UnitTested
-% Functions that reset an \meta{integer} register to zero.
-% \begin{macrocode}
-\cs_new_protected:Npn \int_zero:N #1 { #1 = \c_zero_int }
-\cs_new_protected:Npn \int_gzero:N #1 { \tex_global:D #1 = \c_zero_int }
-\cs_generate_variant:Nn \int_zero:N { c }
-\cs_generate_variant:Nn \int_gzero:N { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {\int_zero_new:N, \int_zero_new:c, \int_gzero_new:N, \int_gzero_new:c}
-% Create a register if needed, otherwise clear it.
-% \begin{macrocode}
-\cs_new_protected:Npn \int_zero_new:N #1
- { \int_if_exist:NTF #1 { \int_zero:N #1 } { \int_new:N #1 } }
-\cs_new_protected:Npn \int_gzero_new:N #1
- { \int_if_exist:NTF #1 { \int_gzero:N #1 } { \int_new:N #1 } }
-\cs_generate_variant:Nn \int_zero_new:N { c }
-\cs_generate_variant:Nn \int_gzero_new:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\int_set_eq:NN, \int_set_eq:cN, \int_set_eq:Nc, \int_set_eq:cc}
-% \UnitTested
-% \begin{macro}
-% {\int_gset_eq:NN, \int_gset_eq:cN, \int_gset_eq:Nc, \int_gset_eq:cc}
-% \UnitTested
-% Setting equal means using one integer inside the set function of
-% another. Check that assigned integer is local/global. No need to
-% check that the other one is defined as \TeX{} does it for us.
-% \begin{macrocode}
-\cs_new_protected:Npn \int_set_eq:NN #1#2 { #1 = #2 }
-\cs_generate_variant:Nn \int_set_eq:NN { c , Nc , cc }
-\cs_new_protected:Npn \int_gset_eq:NN #1#2 { \tex_global:D #1 = #2 }
-\cs_generate_variant:Nn \int_gset_eq:NN { c , Nc , cc }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\int_if_exist:N, \int_if_exist:c}
-% Copies of the \texttt{cs} functions defined in \pkg{l3basics}.
-% \begin{macrocode}
-\prg_new_eq_conditional:NNn \int_if_exist:N \cs_if_exist:N
- { TF , T , F , p }
-\prg_new_eq_conditional:NNn \int_if_exist:c \cs_if_exist:c
- { TF , T , F , p }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Setting and incrementing integers}
-%
-% \begin{macro}{\int_add:Nn, \int_add:cn}
-% \UnitTested
-% \begin{macro}{\int_gadd:Nn, \int_gadd:cn}
-% \UnitTested
-% \begin{macro}{\int_sub:Nn, \int_sub:cn}
-% \UnitTested
-% \begin{macro}{\int_gsub:Nn, \int_gsub:cn}
-% \UnitTested
-% Adding and subtracting to and from a counter.
-% Including here the optional |by| would slow down these operations
-% by a few percent.
-% \begin{macrocode}
-\cs_new_protected:Npn \int_add:Nn #1#2
- { \tex_advance:D #1 \@@_eval:w #2 \@@_eval_end: }
-\cs_new_protected:Npn \int_sub:Nn #1#2
- { \tex_advance:D #1 - \@@_eval:w #2 \@@_eval_end: }
-\cs_new_protected:Npn \int_gadd:Nn #1#2
- { \tex_global:D \tex_advance:D #1 \@@_eval:w #2 \@@_eval_end: }
-\cs_new_protected:Npn \int_gsub:Nn #1#2
- { \tex_global:D \tex_advance:D #1 - \@@_eval:w #2 \@@_eval_end: }
-\cs_generate_variant:Nn \int_add:Nn { c }
-\cs_generate_variant:Nn \int_gadd:Nn { c }
-\cs_generate_variant:Nn \int_sub:Nn { c }
-\cs_generate_variant:Nn \int_gsub:Nn { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\int_incr:N, \int_incr:c}
-% \UnitTested
-% \begin{macro}{\int_gincr:N, \int_gincr:c}
-% \UnitTested
-% \begin{macro}{\int_decr:N, \int_decr:c}
-% \UnitTested
-% \begin{macro}{\int_gdecr:N, \int_gdecr:c}
-% \UnitTested
-% Incrementing and decrementing of integer registers is done with
-% the following functions.
-% \begin{macrocode}
-\cs_new_protected:Npn \int_incr:N #1
- { \tex_advance:D #1 \c_one_int }
-\cs_new_protected:Npn \int_decr:N #1
- { \tex_advance:D #1 - \c_one_int }
-\cs_new_protected:Npn \int_gincr:N #1
- { \tex_global:D \tex_advance:D #1 \c_one_int }
-\cs_new_protected:Npn \int_gdecr:N #1
- { \tex_global:D \tex_advance:D #1 - \c_one_int }
-\cs_generate_variant:Nn \int_incr:N { c }
-\cs_generate_variant:Nn \int_decr:N { c }
-\cs_generate_variant:Nn \int_gincr:N { c }
-\cs_generate_variant:Nn \int_gdecr:N { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\int_set:Nn, \int_set:cn}
-% \UnitTested
-% \begin{macro}{\int_gset:Nn, \int_gset:cn}
-% \UnitTested
-% As integers are register-based \TeX{} issues an error
-% if they are not defined. While the |=| sign is optional, this
-% version with |=| is slightly quicker than without, while adding the
-% optional space after |=| slows things down minutely.
-% \begin{macrocode}
-\cs_new_protected:Npn \int_set:Nn #1#2
- { #1 = \@@_eval:w #2 \@@_eval_end: }
-\cs_new_protected:Npn \int_gset:Nn #1#2
- { \tex_global:D #1 = \@@_eval:w #2 \@@_eval_end: }
-\cs_generate_variant:Nn \int_set:Nn { c }
-\cs_generate_variant:Nn \int_gset:Nn { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Using integers}
-%
-% \begin{macro}{\int_use:N, \int_use:c}
-% \UnitTested
-% Here is how counters are accessed.
-% We hand-code the |c| variant for some speed gain.
-% \begin{macrocode}
-\cs_new_eq:NN \int_use:N \tex_the:D
-\cs_new:Npn \int_use:c #1 { \tex_the:D \cs:w #1 \cs_end: }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Integer expression conditionals}
-%
-% \begin{macro}[EXP]{\@@_compare_error:, \@@_compare_error:Nw}
-% Those functions are used for comparison tests which use a simple
-% syntax where only one set of braces is required and additional
-% operators such as |!=| and |>=| are supported. The tests first
-% evaluate their left-hand side, with a trailing
-% \cs{@@_compare_error:}. This marker is normally not expanded,
-% but if the relation symbol is missing from the test's argument, then
-% the marker inserts |=| (and itself) after triggering the relevant
-% \TeX{} error. If the first token which appears after evaluating and
-% removing the left-hand side is not a known relation symbol, then a
-% judiciously placed \cs{@@_compare_error:Nw} gets expanded,
-% cleaning up the end of the test and telling the user what the
-% problem was.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_compare_error:
- {
- \if_int_compare:w \c_zero_int \c_zero_int \fi:
- =
- \@@_compare_error:
- }
-\cs_new:Npn \@@_compare_error:Nw
- #1#2 \s_@@_stop
- {
- { }
- \c_zero_int \fi:
- \msg_expandable_error:nnn
- { kernel } { unknown-comparison } {#1}
- \prg_return_false:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[pTF, EXP]{\int_compare:n}
-% \begin{macro}[EXP]
-% {\@@_compare:w, \@@_compare:Nw, \@@_compare:NNw, \@@_compare:nnN}
-% \begin{macro}[EXP]
-% {
-% \@@_compare_end_=:NNw,
-% \@@_compare_=:NNw,
-% \@@_compare_<:NNw,
-% \@@_compare_>:NNw,
-% \@@_compare_==:NNw,
-% \@@_compare_!=:NNw,
-% \@@_compare_<=:NNw,
-% \@@_compare_>=:NNw
-% }
-% Comparison tests using a simple syntax where only one set of braces
-% is required, additional operators such as |!=| and |>=| are
-% supported, and multiple comparisons can be performed at once, for
-% instance |0 < 5 <= 1|. The idea is to loop through the argument,
-% finding one operand at a time, and comparing it to the previous one.
-% The looping auxiliary \cs{@@_compare:Nw} reads one \meta{operand}
-% and one \meta{comparison} symbol, and leaves roughly
-% \begin{quote}
-% \meta{operand} \cs{prg_return_false:} \cs{fi:} \\
-% \cs{reverse_if:N} \cs{if_int_compare:w} \meta{operand} \meta{comparison} \\
-% \cs{@@_compare:Nw}
-% \end{quote}
-% in the input stream. Each call to this auxiliary provides the
-% second operand of the last call's \cs{if_int_compare:w}. If one of
-% the \meta{comparisons} is \texttt{false}, the \texttt{true} branch
-% of the \TeX{} conditional is taken (because of \cs{reverse_if:N}),
-% immediately returning \texttt{false} as the result of the test.
-% There is no \TeX{} conditional waiting the first operand, so we add
-% an \cs{if_false:} and expand by hand with \cs{int_value:w}, thus
-% skipping \cs{prg_return_false:} on the first iteration.
-%
-% Before starting the loop, the first step is to make sure that there
-% is at least one relation symbol. We first let \TeX{} evaluate this
-% left hand side of the (in)equality using \cs{@@_eval:w}. Since the
-% relation symbols |<|, |>|, |=| and |!| are not allowed in integer
-% expressions, they would terminate the expression. If the argument contains no
-% relation symbol, \cs{@@_compare_error:} is expanded,
-% inserting~|=| and itself after an error. In all cases,
-% \cs{@@_compare:w} receives as its argument an integer, a relation
-% symbol, and some more tokens. We then setup the loop, which is
-% ended by the two odd-looking items |e| and |{=nd_}|, with a trailing
-% \cs{s_@@_stop} used to grab the entire argument when necessary.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \int_compare:n #1 { p , T , F , TF }
- {
- \exp_after:wN \@@_compare:w
- \int_value:w \@@_eval:w #1 \@@_compare_error:
- }
-\cs_new:Npn \@@_compare:w #1 \@@_compare_error:
- {
- \exp_after:wN \if_false: \int_value:w
- \@@_compare:Nw #1 e { = nd_ } \s_@@_stop
- }
-% \end{macrocode}
-% The goal here is to find an \meta{operand} and a \meta{comparison}.
-% The \meta{operand} is already evaluated, but we cannot yet grab it
-% as an argument. To access the following relation symbol, we remove
-% the number by applying \cs{@@_to_roman:w}, after making sure that
-% the argument becomes non-positive: its roman numeral representation
-% is then empty. Then probe the first two tokens with
-% \cs{@@_compare:NNw} to determine the relation symbol, building a
-% control sequence from it (\cs{token_to_str:N} gives better errors if
-% |#1| is not a character). All the extended forms have an extra |=|
-% hence the test for that as a second token. If the relation symbol
-% is unknown, then the control sequence is turned by \TeX{} into
-% \cs{scan_stop:}, ignored thanks to \tn{unexpanded}, and
-% \cs{@@_compare_error:Nw} raises an error.
-% \begin{macrocode}
-\cs_new:Npn \@@_compare:Nw #1#2 \s_@@_stop
- {
- \exp_after:wN \@@_compare:NNw
- \@@_to_roman:w - 0 #2 \s_@@_mark
- #1#2 \s_@@_stop
- }
-\cs_new:Npn \@@_compare:NNw #1#2#3 \s_@@_mark
- {
- \__kernel_exp_not:w
- \use:c
- {
- @@_compare_ \token_to_str:N #1
- \if_meaning:w = #2 = \fi:
- :NNw
- }
- \@@_compare_error:Nw #1
- }
-% \end{macrocode}
-% When the last \meta{operand} is seen, \cs{@@_compare:NNw} receives
-% |e| and |=nd_| as arguments, hence calling
-% \cs{@@_compare_end_=:NNw} to end the loop: return the result of the
-% last comparison (involving the operand that we just found). When a
-% normal relation is found, the appropriate auxiliary calls
-% \cs{@@_compare:nnN} where |#1| is \cs{if_int_compare:w} or
-% \cs{reverse_if:N} \cs{if_int_compare:w}, |#2| is the \meta{operand},
-% and |#3| is one of |<|, |=|, or~|>|. As announced earlier, we leave
-% the \meta{operand} for the previous conditional. If this
-% conditional is true the result of the test is known, so we remove
-% all tokens and return \texttt{false}. Otherwise, we apply the
-% conditional |#1| to the \meta{operand} |#2| and the comparison |#3|,
-% and call \cs{@@_compare:Nw} to look for additional operands, after
-% evaluating the following expression.
-% \begin{macrocode}
-\cs_new:cpn { @@_compare_end_=:NNw } #1#2#3 e #4 \s_@@_stop
- {
- {#3} \exp_stop_f:
- \prg_return_false: \else: \prg_return_true: \fi:
- }
-\cs_new:Npn \@@_compare:nnN #1#2#3
- {
- {#2} \exp_stop_f:
- \prg_return_false: \exp_after:wN \@@_use_none_delimit_by_s_stop:w
- \fi:
- #1 #2 #3 \exp_after:wN \@@_compare:Nw \int_value:w \@@_eval:w
- }
-% \end{macrocode}
-% The actual comparisons are then simple function calls, using the
-% relation as delimiter for a delimited argument and discarding
-% \cs{@@_compare_error:Nw} \meta{token} responsible for error
-% detection.
-% \begin{macrocode}
-\cs_new:cpn { @@_compare_=:NNw } #1#2#3 =
- { \@@_compare:nnN { \reverse_if:N \if_int_compare:w } {#3} = }
-\cs_new:cpn { @@_compare_<:NNw } #1#2#3 <
- { \@@_compare:nnN { \reverse_if:N \if_int_compare:w } {#3} < }
-\cs_new:cpn { @@_compare_>:NNw } #1#2#3 >
- { \@@_compare:nnN { \reverse_if:N \if_int_compare:w } {#3} > }
-\cs_new:cpn { @@_compare_==:NNw } #1#2#3 ==
- { \@@_compare:nnN { \reverse_if:N \if_int_compare:w } {#3} = }
-\cs_new:cpn { @@_compare_!=:NNw } #1#2#3 !=
- { \@@_compare:nnN { \if_int_compare:w } {#3} = }
-\cs_new:cpn { @@_compare_<=:NNw } #1#2#3 <=
- { \@@_compare:nnN { \if_int_compare:w } {#3} > }
-\cs_new:cpn { @@_compare_>=:NNw } #1#2#3 >=
- { \@@_compare:nnN { \if_int_compare:w } {#3} < }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\int_compare:nNn}
-% \UnitTested
-% More efficient but less natural in typing.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \int_compare:nNn #1#2#3 { p , T , F , TF }
- {
- \if_int_compare:w \@@_eval:w #1 #2 \@@_eval:w #3 \@@_eval_end:
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\int_if_zero:n}
-% \begin{macrocode}
-\prg_new_conditional:Npnn \int_if_zero:n #1 { p , T , F , TF }
- {
- \if_int_compare:w \@@_eval:w #1 = \c_zero_int
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP, noTF]{\int_case:nn}
-% \begin{macro}{\@@_case:nnTF}
-% \begin{macro}{\@@_case:nw, \@@_case_end:nw}
-% For integer cases, the first task to fully expand the check
-% condition. The over all idea is then much the same as for
-% \cs{str_case:nnTF} as described in \pkg{l3str}.
-% \begin{macrocode}
-\cs_new:Npn \int_case:nnTF #1
- {
- \exp:w
- \exp_args:Nf \@@_case:nnTF { \int_eval:n {#1} }
- }
-\cs_new:Npn \int_case:nnT #1#2#3
- {
- \exp:w
- \exp_args:Nf \@@_case:nnTF { \int_eval:n {#1} } {#2} {#3} { }
- }
-\cs_new:Npn \int_case:nnF #1#2
- {
- \exp:w
- \exp_args:Nf \@@_case:nnTF { \int_eval:n {#1} } {#2} { }
- }
-\cs_new:Npn \int_case:nn #1#2
- {
- \exp:w
- \exp_args:Nf \@@_case:nnTF { \int_eval:n {#1} } {#2} { } { }
- }
-\cs_new:Npn \@@_case:nnTF #1#2#3#4
- { \@@_case:nw {#1} #2 {#1} { } \s_@@_mark {#3} \s_@@_mark {#4} \s_@@_stop }
-\cs_new:Npn \@@_case:nw #1#2#3
- {
- \int_compare:nNnTF {#1} = {#2}
- { \@@_case_end:nw {#3} }
- { \@@_case:nw {#1} }
- }
-\cs_new:Npn \@@_case_end:nw #1#2#3 \s_@@_mark #4#5 \s_@@_stop
- { \exp_end: #1 #4 }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\int_if_odd:n}
-% \UnitTested
-% \begin{macro}[pTF]{\int_if_even:n}
-% \UnitTested
-% A predicate function.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \int_if_odd:n #1 { p , T , F , TF}
- {
- \if_int_odd:w \@@_eval:w #1 \@@_eval_end:
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-\prg_new_conditional:Npnn \int_if_even:n #1 { p , T , F , TF}
- {
- \reverse_if:N \if_int_odd:w \@@_eval:w #1 \@@_eval_end:
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Integer expression loops}
-%
-% \begin{macro}{\int_while_do:nn}
-% \UnitTested
-% \TestMissing{Boundary cases}
-% \begin{macro}{\int_until_do:nn}
-% \UnitTested
-% \TestMissing{Boundary cases}
-% \begin{macro}{\int_do_while:nn}
-% \UnitTested
-% \TestMissing{Boundary cases}
-% \begin{macro}{\int_do_until:nn}
-% \UnitTested
-% \TestMissing{Boundary cases}
-% These are quite easy given the above functions. The |while| versions
-% test first and then execute the body. The |do_while| does it the
-% other way round.
-% \begin{macrocode}
-\cs_new:Npn \int_while_do:nn #1#2
- {
- \int_compare:nT {#1}
- {
- #2
- \int_while_do:nn {#1} {#2}
- }
- }
-\cs_new:Npn \int_until_do:nn #1#2
- {
- \int_compare:nF {#1}
- {
- #2
- \int_until_do:nn {#1} {#2}
- }
- }
-\cs_new:Npn \int_do_while:nn #1#2
- {
- #2
- \int_compare:nT {#1}
- { \int_do_while:nn {#1} {#2} }
- }
-\cs_new:Npn \int_do_until:nn #1#2
- {
- #2
- \int_compare:nF {#1}
- { \int_do_until:nn {#1} {#2} }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\int_while_do:nNnn}
-% \begin{macro}{\int_until_do:nNnn}
-% \begin{macro}{\int_do_while:nNnn}
-% \begin{macro}{\int_do_until:nNnn}
-% As above but not using the more natural syntax.
-% \begin{macrocode}
-\cs_new:Npn \int_while_do:nNnn #1#2#3#4
- {
- \int_compare:nNnT {#1} #2 {#3}
- {
- #4
- \int_while_do:nNnn {#1} #2 {#3} {#4}
- }
- }
-\cs_new:Npn \int_until_do:nNnn #1#2#3#4
- {
- \int_compare:nNnF {#1} #2 {#3}
- {
- #4
- \int_until_do:nNnn {#1} #2 {#3} {#4}
- }
- }
-\cs_new:Npn \int_do_while:nNnn #1#2#3#4
- {
- #4
- \int_compare:nNnT {#1} #2 {#3}
- { \int_do_while:nNnn {#1} #2 {#3} {#4} }
- }
-\cs_new:Npn \int_do_until:nNnn #1#2#3#4
- {
- #4
- \int_compare:nNnF {#1} #2 {#3}
- { \int_do_until:nNnn {#1} #2 {#3} {#4} }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Integer step functions}
-%
-% \begin{macro}{\int_step_function:nnnN}
-% \begin{macro}{\@@_step:wwwN, \@@_step:NwnnN}
-% \begin{macro}{\int_step_function:nN}
-% \begin{macro}{\int_step_function:nnN}
-% Before all else, evaluate the initial value, step, and final value.
-% Repeating a function by steps first needs a check on the direction
-% of the steps. After that, do the function for the start value then
-% step and loop around. It would be more symmetrical to test for a
-% step size of zero before checking the sign, but we optimize for the
-% most frequent case (positive step).
-% \begin{macrocode}
-\cs_new:Npn \int_step_function:nnnN #1#2#3
- {
- \exp_after:wN \@@_step:wwwN
- \int_value:w \@@_eval:w #1 \exp_after:wN ;
- \int_value:w \@@_eval:w #2 \exp_after:wN ;
- \int_value:w \@@_eval:w #3 ;
- }
-\cs_new:Npn \@@_step:wwwN #1; #2; #3; #4
- {
- \int_compare:nNnTF {#2} > \c_zero_int
- { \@@_step:NwnnN > }
- {
- \int_compare:nNnTF {#2} = \c_zero_int
- {
- \msg_expandable_error:nnn
- { kernel } { zero-step } {#4}
- \prg_break:
- }
- { \@@_step:NwnnN < }
- }
- #1 ; {#2} {#3} #4
- \prg_break_point:
- }
-\cs_new:Npn \@@_step:NwnnN #1#2 ; #3#4#5
- {
- \if_int_compare:w #2 #1 #4 \exp_stop_f:
- \prg_break:n
- \fi:
- #5 {#2}
- \exp_after:wN \@@_step:NwnnN
- \exp_after:wN #1
- \int_value:w \@@_eval:w #2 + #3 ; {#3} {#4} #5
- }
-\cs_new:Npn \int_step_function:nN
- { \int_step_function:nnnN { 1 } { 1 } }
-\cs_new:Npn \int_step_function:nnN #1
- { \int_step_function:nnnN {#1} { 1 } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\int_step_inline:nn, \int_step_inline:nnn, \int_step_inline:nnnn}
-% \begin{macro}{\int_step_variable:nNn, \int_step_variable:nnNn, \int_step_variable:nnnNn}
-% \UnitTested
-% \begin{macro}{\@@_step:NNnnnn}
-% The approach here is to build a function, with a global integer
-% required to make the nesting safe (as seen in other in line
-% functions), and map that function using \cs{int_step_function:nnnN}.
-% We put a \cs{prg_break_point:Nn} so that \texttt{map_break}
-% functions from other modules correctly decrement \cs{g__kernel_prg_map_int}
-% before looking for their own break point. The first argument is
-% \cs{scan_stop:}, so that no breaking function recognizes this break
-% point as its own.
-% \begin{macrocode}
-\cs_new_protected:Npn \int_step_inline:nn
- { \int_step_inline:nnnn { 1 } { 1 } }
-\cs_new_protected:Npn \int_step_inline:nnn #1
- { \int_step_inline:nnnn {#1} { 1 } }
-\cs_new_protected:Npn \int_step_inline:nnnn
- {
- \int_gincr:N \g__kernel_prg_map_int
- \exp_args:NNc \@@_step:NNnnnn
- \cs_gset_protected:Npn
- { @@_map_ \int_use:N \g__kernel_prg_map_int :w }
- }
-\cs_new_protected:Npn \int_step_variable:nNn
- { \int_step_variable:nnnNn { 1 } { 1 } }
-\cs_new_protected:Npn \int_step_variable:nnNn #1
- { \int_step_variable:nnnNn {#1} { 1 } }
-\cs_new_protected:Npn \int_step_variable:nnnNn #1#2#3#4#5
- {
- \int_gincr:N \g__kernel_prg_map_int
- \exp_args:NNc \@@_step:NNnnnn
- \cs_gset_protected:Npe
- { @@_map_ \int_use:N \g__kernel_prg_map_int :w }
- {#1}{#2}{#3}
- {
- \tl_set:Nn \exp_not:N #4 {##1}
- \exp_not:n {#5}
- }
- }
-\cs_new_protected:Npn \@@_step:NNnnnn #1#2#3#4#5#6
- {
- #1 #2 ##1 {#6}
- \int_step_function:nnnN {#3} {#4} {#5} #2
- \prg_break_point:Nn \scan_stop: { \int_gdecr:N \g__kernel_prg_map_int }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Formatting integers}
-%
-% \begin{macro}{\int_to_arabic:n, \int_to_arabic:v}
-% \UnitTested
-% Nothing exciting here.
-% \begin{macrocode}
-\cs_new_eq:NN \int_to_arabic:n \int_eval:n
-\cs_generate_variant:Nn \int_to_arabic:n { v }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\int_to_symbols:nnn}
-% \UnitTested
-% \begin{macro}{\@@_to_symbols:nnnn, \@@_to_symbols:ennn}
-% For conversion of integers to arbitrary symbols the method is in
-% general as follows. The input number (|#1|) is compared to the total
-% number of symbols available at each place (|#2|). If the input is larger
-% than the total number of symbols available then the modulus is needed,
-% with one added so that the positions don't have to number from
-% zero. Using an \texttt{f}-type expansion, this is done so that the system
-% is recursive. The actual conversion function therefore gets a `nice'
-% number at each stage. Of course, if the initial input was small enough
-% then there is no problem and everything is easy.
-% \begin{macrocode}
-\cs_new:Npn \int_to_symbols:nnn #1#2#3
- {
- \int_compare:nNnTF {#1} > {#2}
- {
- \@@_to_symbols:ennn
- {
- \int_case:nn
- { 1 + \int_mod:nn { #1 - 1 } {#2} }
- {#3}
- }
- {#1} {#2} {#3}
- }
- { \int_case:nn {#1} {#3} }
- }
-\cs_new:Npn \@@_to_symbols:nnnn #1#2#3#4
- {
- \exp_args:Nf \int_to_symbols:nnn
- { \int_div_truncate:nn { #2 - 1 } {#3} } {#3} {#4}
- #1
- }
-\cs_generate_variant:Nn \@@_to_symbols:nnnn { e }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\int_to_alph:n, \int_to_Alph:n}
-% \UnitTested
-% These both use the above function with input functions that make sense
-% for the alphabet in English.
-% \begin{macrocode}
-\cs_new:Npn \int_to_alph:n #1
- {
- \int_to_symbols:nnn {#1} { 26 }
- {
- { 1 } { a }
- { 2 } { b }
- { 3 } { c }
- { 4 } { d }
- { 5 } { e }
- { 6 } { f }
- { 7 } { g }
- { 8 } { h }
- { 9 } { i }
- { 10 } { j }
- { 11 } { k }
- { 12 } { l }
- { 13 } { m }
- { 14 } { n }
- { 15 } { o }
- { 16 } { p }
- { 17 } { q }
- { 18 } { r }
- { 19 } { s }
- { 20 } { t }
- { 21 } { u }
- { 22 } { v }
- { 23 } { w }
- { 24 } { x }
- { 25 } { y }
- { 26 } { z }
- }
- }
-\cs_new:Npn \int_to_Alph:n #1
- {
- \int_to_symbols:nnn {#1} { 26 }
- {
- { 1 } { A }
- { 2 } { B }
- { 3 } { C }
- { 4 } { D }
- { 5 } { E }
- { 6 } { F }
- { 7 } { G }
- { 8 } { H }
- { 9 } { I }
- { 10 } { J }
- { 11 } { K }
- { 12 } { L }
- { 13 } { M }
- { 14 } { N }
- { 15 } { O }
- { 16 } { P }
- { 17 } { Q }
- { 18 } { R }
- { 19 } { S }
- { 20 } { T }
- { 21 } { U }
- { 22 } { V }
- { 23 } { W }
- { 24 } { X }
- { 25 } { Y }
- { 26 } { Z }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\int_to_base:nn, \int_to_Base:nn}
-% \UnitTested
-% \begin{macro}{\@@_to_base:nn, \@@_to_Base:nn,
-% \@@_to_base:nnN, \@@_to_Base:nnN, \@@_to_base:nnnN, \@@_to_Base:nnnN}
-% \begin{macro}{\@@_to_letter:n, \@@_to_Letter:n}
-% \UnitTested
-% Converting from base ten (|#1|) to a second base (|#2|) starts with
-% computing |#1|: if it is a complicated calculation, we shouldn't
-% perform it twice. Then check the sign, store it, either \texttt{-}
-% or \cs{c_empty_tl}, and feed the absolute value to the next auxiliary
-% function.
-% \begin{macrocode}
-\cs_new:Npn \int_to_base:nn #1
- { \exp_args:Nf \@@_to_base:nn { \int_eval:n {#1} } }
-\cs_new:Npn \int_to_Base:nn #1
- { \exp_args:Nf \@@_to_Base:nn { \int_eval:n {#1} } }
-\cs_new:Npn \@@_to_base:nn #1#2
- {
- \int_compare:nNnTF {#1} < 0
- { \exp_args:No \@@_to_base:nnN { \use_none:n #1 } {#2} - }
- { \@@_to_base:nnN {#1} {#2} \c_empty_tl }
- }
-\cs_new:Npn \@@_to_Base:nn #1#2
- {
- \int_compare:nNnTF {#1} < 0
- { \exp_args:No \@@_to_Base:nnN { \use_none:n #1 } {#2} - }
- { \@@_to_Base:nnN {#1} {#2} \c_empty_tl }
- }
-% \end{macrocode}
-% Here, the idea is to provide a recursive system to deal with the
-% input. The output is built up after the end of the function.
-% At each pass, the value in |#1| is checked to see if it is less
-% than the new base (|#2|). If it is, then it is converted directly,
-% putting the sign back in front.
-% On the other hand, if the value to convert is greater than or equal
-% to the new base then the modulus and remainder values are found. The
-% modulus is converted to a symbol and put on the right,
-% and the remainder is carried forward to the next round.
-% \begin{macrocode}
-\cs_new:Npn \@@_to_base:nnN #1#2#3
- {
- \int_compare:nNnTF {#1} < {#2}
- { \exp_last_unbraced:Nf #3 { \@@_to_letter:n {#1} } }
- {
- \exp_args:Nf \@@_to_base:nnnN
- { \@@_to_letter:n { \int_mod:nn {#1} {#2} } }
- {#1}
- {#2}
- #3
- }
- }
-\cs_new:Npn \@@_to_base:nnnN #1#2#3#4
- {
- \exp_args:Nf \@@_to_base:nnN
- { \int_div_truncate:nn {#2} {#3} }
- {#3}
- #4
- #1
- }
-\cs_new:Npn \@@_to_Base:nnN #1#2#3
- {
- \int_compare:nNnTF {#1} < {#2}
- { \exp_last_unbraced:Nf #3 { \@@_to_Letter:n {#1} } }
- {
- \exp_args:Nf \@@_to_Base:nnnN
- { \@@_to_Letter:n { \int_mod:nn {#1} {#2} } }
- {#1}
- {#2}
- #3
- }
- }
-\cs_new:Npn \@@_to_Base:nnnN #1#2#3#4
- {
- \exp_args:Nf \@@_to_Base:nnN
- { \int_div_truncate:nn {#2} {#3} }
- {#3}
- #4
- #1
- }
-% \end{macrocode}
-% Convert to a letter only if necessary, otherwise simply return the
-% value unchanged. It would be cleaner to use \cs{int_case:nn},
-% but in our case, the cases are contiguous, so it is forty times faster
-% to use the \cs{if_case:w} primitive. The first \cs{exp_after:wN}
-% expands the conditional, jumping to the correct case, the second one
-% expands after the resulting character to close the conditional.
-% Since |#1| might be an expression, and not directly a single digit,
-% we need to evaluate it properly, and expand the trailing \cs{fi:}.
-% \begin{macrocode}
-\cs_new:Npn \@@_to_letter:n #1
- {
- \exp_after:wN \exp_after:wN
- \if_case:w \@@_eval:w #1 - 10 \@@_eval_end:
- a
- \or: b
- \or: c
- \or: d
- \or: e
- \or: f
- \or: g
- \or: h
- \or: i
- \or: j
- \or: k
- \or: l
- \or: m
- \or: n
- \or: o
- \or: p
- \or: q
- \or: r
- \or: s
- \or: t
- \or: u
- \or: v
- \or: w
- \or: x
- \or: y
- \or: z
- \else: \int_value:w \@@_eval:w #1 \exp_after:wN \@@_eval_end:
- \fi:
- }
-\cs_new:Npn \@@_to_Letter:n #1
- {
- \exp_after:wN \exp_after:wN
- \if_case:w \@@_eval:w #1 - 10 \@@_eval_end:
- A
- \or: B
- \or: C
- \or: D
- \or: E
- \or: F
- \or: G
- \or: H
- \or: I
- \or: J
- \or: K
- \or: L
- \or: M
- \or: N
- \or: O
- \or: P
- \or: Q
- \or: R
- \or: S
- \or: T
- \or: U
- \or: V
- \or: W
- \or: X
- \or: Y
- \or: Z
- \else: \int_value:w \@@_eval:w #1 \exp_after:wN \@@_eval_end:
- \fi:
- }
-% \end{macrocode}
-%\end{macro}
-%\end{macro}
-%\end{macro}
-%
-% \begin{macro}{\int_to_bin:n, \int_to_hex:n, \int_to_Hex:n, \int_to_oct:n}
-% \UnitTested
-% Wrappers around the generic function.
-% \begin{macrocode}
-\cs_new:Npn \int_to_bin:n #1
- { \int_to_base:nn {#1} { 2 } }
-\cs_new:Npn \int_to_hex:n #1
- { \int_to_base:nn {#1} { 16 } }
-\cs_new:Npn \int_to_Hex:n #1
- { \int_to_Base:nn {#1} { 16 } }
-\cs_new:Npn \int_to_oct:n #1
- { \int_to_base:nn {#1} { 8 } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\int_to_roman:n, \int_to_Roman:n}
-% \UnitTested
-% \begin{macro}{\@@_to_roman:N, \@@_to_roman:N}
-% \begin{macro}
-% {
-% \@@_to_roman_i:w, \@@_to_roman_v:w, \@@_to_roman_x:w,
-% \@@_to_roman_l:w, \@@_to_roman_c:w, \@@_to_roman_d:w,
-% \@@_to_roman_m:w, \@@_to_roman_Q:w,
-% \@@_to_Roman_i:w, \@@_to_Roman_v:w, \@@_to_Roman_x:w,
-% \@@_to_Roman_l:w, \@@_to_Roman_c:w, \@@_to_Roman_d:w,
-% \@@_to_Roman_m:w, \@@_to_Roman_Q:w,
-% }
-% The \cs{@@_to_roman:w} primitive creates tokens of category
-% code $12$ (other). Usually, what is actually wanted is letters.
-% The approach here is to convert the output of the primitive into
-% letters using appropriate control sequence names. That keeps
-% everything expandable. The loop is terminated by the conversion
-% of the |Q|.
-% \begin{macrocode}
-\cs_new:Npn \int_to_roman:n #1
- {
- \exp_after:wN \@@_to_roman:N
- \@@_to_roman:w \int_eval:n {#1} Q
- }
-\cs_new:Npn \@@_to_roman:N #1
- {
- \use:c { @@_to_roman_ #1 :w }
- \@@_to_roman:N
- }
-\cs_new:Npn \int_to_Roman:n #1
- {
- \exp_after:wN \@@_to_Roman_aux:N
- \@@_to_roman:w \int_eval:n {#1} Q
- }
-\cs_new:Npn \@@_to_Roman_aux:N #1
- {
- \use:c { @@_to_Roman_ #1 :w }
- \@@_to_Roman_aux:N
- }
-\cs_new:Npn \@@_to_roman_i:w { i }
-\cs_new:Npn \@@_to_roman_v:w { v }
-\cs_new:Npn \@@_to_roman_x:w { x }
-\cs_new:Npn \@@_to_roman_l:w { l }
-\cs_new:Npn \@@_to_roman_c:w { c }
-\cs_new:Npn \@@_to_roman_d:w { d }
-\cs_new:Npn \@@_to_roman_m:w { m }
-\cs_new:Npn \@@_to_roman_Q:w #1 { }
-\cs_new:Npn \@@_to_Roman_i:w { I }
-\cs_new:Npn \@@_to_Roman_v:w { V }
-\cs_new:Npn \@@_to_Roman_x:w { X }
-\cs_new:Npn \@@_to_Roman_l:w { L }
-\cs_new:Npn \@@_to_Roman_c:w { C }
-\cs_new:Npn \@@_to_Roman_d:w { D }
-\cs_new:Npn \@@_to_Roman_m:w { M }
-\cs_new:Npn \@@_to_Roman_Q:w #1 { }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Converting from other formats to integers}
-%
-% \begin{macro}[rEXP]{\@@_pass_signs:wn, \@@_pass_signs_end:wn}
-% Called as \cs{@@_pass_signs:wn} \meta{signs and digits} \cs{s_@@_stop}
-% \Arg{code}, this function leaves in the input stream any sign it
-% finds, then inserts the \meta{code} before the first non-sign token
-% (and removes \cs{s_@@_stop}). More precisely, it deletes any~|+| and
-% passes any~|-| to the input stream, hence should be called in an
-% integer expression.
-% \begin{macrocode}
-\cs_new:Npn \@@_pass_signs:wn #1
- {
- \if:w + \if:w - \exp_not:N #1 + \fi: \exp_not:N #1
- \exp_after:wN \@@_pass_signs:wn
- \else:
- \exp_after:wN \@@_pass_signs_end:wn
- \exp_after:wN #1
- \fi:
- }
-\cs_new:Npn \@@_pass_signs_end:wn #1 \s_@@_stop #2 { #2 #1 }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\int_from_alph:n}
-% \UnitTested
-% \begin{macro}{\@@_from_alph:nN, \@@_from_alph:N}
-% First take care of signs then loop through the input using the
-% \texttt{recursion} quarks. The \cs{@@_from_alph:nN} auxiliary
-% collects in its first argument the value obtained so far, and the
-% auxiliary \cs{@@_from_alph:N} converts one letter to an expression
-% which evaluates to the correct number.
-% \begin{macrocode}
-\cs_new:Npn \int_from_alph:n #1
- {
- \int_eval:n
- {
- \exp_after:wN \@@_pass_signs:wn \tl_to_str:n {#1}
- \s_@@_stop { \@@_from_alph:nN { 0 } }
- \q_@@_recursion_tail \q_@@_recursion_stop
- }
- }
-\cs_new:Npn \@@_from_alph:nN #1#2
- {
- \@@_if_recursion_tail_stop_do:Nn #2 {#1}
- \exp_args:Nf \@@_from_alph:nN
- { \int_eval:n { #1 * 26 + \@@_from_alph:N #2 } }
- }
-\cs_new:Npn \@@_from_alph:N #1
- { `#1 - \int_compare:nNnTF { `#1 } < { 91 } { 64 } { 96 } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\int_from_base:nn}
-% \UnitTested
-% \begin{macro}{\@@_from_base:nnN, \@@_from_base:N}
-% Leave the signs into the integer expression, then loop through
-% characters, collecting the value found so far in the first argument
-% of \cs{@@_from_base:nnN}. To convert a single character,
-% \cs{@@_from_base:N} checks first for digits, then distinguishes
-% lower from upper case letters, turning them into the appropriate
-% number. Note that this auxiliary does not use \cs{int_eval:n},
-% hence is not safe for general use.
-% \begin{macrocode}
-\cs_new:Npn \int_from_base:nn #1#2
- {
- \int_eval:n
- {
- \exp_after:wN \@@_pass_signs:wn \tl_to_str:n {#1}
- \s_@@_stop { \@@_from_base:nnN { 0 } {#2} }
- \q_@@_recursion_tail \q_@@_recursion_stop
- }
- }
-\cs_new:Npn \@@_from_base:nnN #1#2#3
- {
- \@@_if_recursion_tail_stop_do:Nn #3 {#1}
- \exp_args:Nf \@@_from_base:nnN
- { \int_eval:n { #1 * #2 + \@@_from_base:N #3 } }
- {#2}
- }
-\cs_new:Npn \@@_from_base:N #1
- {
- \int_compare:nNnTF { `#1 } < { 58 }
- {#1}
- { `#1 - \int_compare:nNnTF { `#1 } < { 91 } { 55 } { 87 } }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\int_from_bin:n, \int_from_hex:n, \int_from_oct:n}
-% \UnitTested
-% Wrappers around the generic function.
-% \begin{macrocode}
-\cs_new:Npn \int_from_bin:n #1
- { \int_from_base:nn {#1} { 2 } }
-\cs_new:Npn \int_from_hex:n #1
- { \int_from_base:nn {#1} { 16 } }
-\cs_new:Npn \int_from_oct:n #1
- { \int_from_base:nn {#1} { 8 } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}
-% {
-% \c_@@_from_roman_i_int, \c_@@_from_roman_v_int,
-% \c_@@_from_roman_x_int, \c_@@_from_roman_l_int,
-% \c_@@_from_roman_c_int, \c_@@_from_roman_d_int,
-% \c_@@_from_roman_m_int,
-% \c_@@_from_roman_I_int, \c_@@_from_roman_V_int,
-% \c_@@_from_roman_X_int, \c_@@_from_roman_L_int,
-% \c_@@_from_roman_C_int, \c_@@_from_roman_D_int,
-% \c_@@_from_roman_M_int
-% }
-% Constants used to convert from Roman numerals to integers.
-% \begin{macrocode}
-\int_const:cn { c_@@_from_roman_i_int } { 1 }
-\int_const:cn { c_@@_from_roman_v_int } { 5 }
-\int_const:cn { c_@@_from_roman_x_int } { 10 }
-\int_const:cn { c_@@_from_roman_l_int } { 50 }
-\int_const:cn { c_@@_from_roman_c_int } { 100 }
-\int_const:cn { c_@@_from_roman_d_int } { 500 }
-\int_const:cn { c_@@_from_roman_m_int } { 1000 }
-\int_const:cn { c_@@_from_roman_I_int } { 1 }
-\int_const:cn { c_@@_from_roman_V_int } { 5 }
-\int_const:cn { c_@@_from_roman_X_int } { 10 }
-\int_const:cn { c_@@_from_roman_L_int } { 50 }
-\int_const:cn { c_@@_from_roman_C_int } { 100 }
-\int_const:cn { c_@@_from_roman_D_int } { 500 }
-\int_const:cn { c_@@_from_roman_M_int } { 1000 }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\int_from_roman:n}
-% \UnitTested
-% \TestMissing{boundary cases / wrong input?}
-% \begin{macro}{\@@_from_roman:NN}
-% \begin{macro}{\@@_from_roman_error:w}
-% The method here is to iterate through the input, finding the
-% appropriate value for each letter and building up a sum. This is
-% then evaluated by \TeX{}. If any unknown letter is found, skip to
-% the closing parenthesis and insert |*0-1| afterwards, to replace the
-% value by $-1$.
-% \begin{macrocode}
-\cs_new:Npn \int_from_roman:n #1
- {
- \int_eval:n
- {
- (
- 0
- \exp_after:wN \@@_from_roman:NN \tl_to_str:n {#1}
- \q_@@_recursion_tail \q_@@_recursion_tail \q_@@_recursion_stop
- )
- }
- }
-\cs_new:Npn \@@_from_roman:NN #1#2
- {
- \@@_if_recursion_tail_stop:N #1
- \int_if_exist:cF { c_@@_from_roman_ #1 _int }
- { \@@_from_roman_error:w }
- \@@_if_recursion_tail_stop_do:Nn #2
- { + \use:c { c_@@_from_roman_ #1 _int } }
- \int_if_exist:cF { c_@@_from_roman_ #2 _int }
- { \@@_from_roman_error:w }
- \int_compare:nNnTF
- { \use:c { c_@@_from_roman_ #1 _int } }
- <
- { \use:c { c_@@_from_roman_ #2 _int } }
- {
- + \use:c { c_@@_from_roman_ #2 _int }
- - \use:c { c_@@_from_roman_ #1 _int }
- \@@_from_roman:NN
- }
- {
- + \use:c { c_@@_from_roman_ #1 _int }
- \@@_from_roman:NN #2
- }
- }
-\cs_new:Npn \@@_from_roman_error:w #1 \q_@@_recursion_stop #2
- { #2 * 0 - 1 }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Viewing integer}
-%
-% \begin{macro}{\int_show:N, \int_show:c}
-% \UnitTested
-% \begin{macro}{\@@_show:nN}
-% Diagnostics.
-% \begin{macrocode}
-\cs_new_eq:NN \int_show:N \__kernel_register_show:N
-\cs_generate_variant:Nn \int_show:N { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\int_show:n}
-% \UnitTested
-% We don't use the \TeX{} primitive \tn{showthe} to show integer
-% expressions: this gives a more unified output.
-% \begin{macrocode}
-\cs_new_protected:Npn \int_show:n
- { \__kernel_msg_show_eval:Nn \int_eval:n }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\int_log:N, \int_log:c}
-% Diagnostics.
-% \begin{macrocode}
-\cs_new_eq:NN \int_log:N \__kernel_register_log:N
-\cs_generate_variant:Nn \int_log:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\int_log:n}
-% Similar to \cs{int_show:n}.
-% \begin{macrocode}
-\cs_new_protected:Npn \int_log:n
- { \__kernel_msg_log_eval:Nn \int_eval:n }
-% \end{macrocode}
-% \end{macro}
-%
-%\subsection{Random integers}
-%
-% \begin{macro}{\int_rand:nn}
-% Defined in \pkg{l3fp-random}.
-% \end{macro}
-%
-% \subsection{Constant integers}
-%
-% \begin{variable}{\c_zero_int, \c_one_int}
-% The zero is defined in \pkg{l3basics}.
-% \begin{macrocode}
-\int_const:Nn \c_one_int { 1 }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\c_max_int}
-% The largest number allowed is $2^{31}-1$
-% \begin{macrocode}
-\int_const:Nn \c_max_int { 2 147 483 647 }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\c_max_char_int}
-% The largest character code is $1114111$ (hexadecimal |10FFFF|) in
-% \XeTeX{} and \LuaTeX{} and $255$ in other engines. In many places
-% \pTeX{} and \upTeX{} support larger character codes but for instance
-% the values of \tn{lccode} are restricted to $[0,255]$.
-% \begin{macrocode}
-\int_const:Nn \c_max_char_int
- {
- \if_int_odd:w 0
- \cs_if_exist:NT \tex_luatexversion:D { 1 }
- \cs_if_exist:NT \tex_XeTeXversion:D { 1 } ~
- "10FFFF
- \else:
- "FF
- \fi:
- }
-% \end{macrocode}
-% \end{variable}
-%
-% \subsection{Scratch integers}
-%
-% \begin{variable}{\l_tmpa_int, \l_tmpb_int}
-% \begin{variable}{\g_tmpa_int, \g_tmpb_int}
-% We provide two local and two global scratch counters, maybe we
-% need more or less.
-% \begin{macrocode}
-\int_new:N \l_tmpa_int
-\int_new:N \l_tmpb_int
-\int_new:N \g_tmpa_int
-\int_new:N \g_tmpb_int
-% \end{macrocode}
-% \end{variable}
-% \end{variable}
-%
-% \subsection{Integers for earlier modules}
-%
-%<@@=seq>
-%
-% \begin{variable}{\l_@@_internal_a_int, \l_@@_internal_b_int}
-% \begin{macrocode}
-\int_new:N \l_@@_internal_a_int
-\int_new:N \l_@@_internal_b_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3intarray.dtx b/macros/latex/contrib/l3kernel/l3intarray.dtx
deleted file mode 100644
index 5704a2ab75..0000000000
--- a/macros/latex/contrib/l3kernel/l3intarray.dtx
+++ /dev/null
@@ -1,943 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3intarray.dtx
-%
-% Copyright (C) 2017-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-%
-% \title{^^A
-% The \pkg{l3intarray} module\\ Fast global integer arrays^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \section{\pkg{l3intarray} documentation}
-%
-% For applications requiring heavy use of integers, this module provides
-% arrays which can be accessed in constant time (contrast \pkg{l3seq},
-% where access time is linear). These arrays have several important
-% features
-% \begin{itemize}
-% \item The size of the array is fixed and must be given at
-% point of initialisation
-% \item The absolute value of each entry has maximum $2^{30}-1$
-% (\emph{i.e.}~one power lower than the usual \cs{c_max_int}
-% ceiling of $2^{31}-1$)
-% \end{itemize}
-% The use of \texttt{intarray} data is therefore recommended for cases where
-% the need for fast access is of paramount importance.
-%
-% \begin{function}[added = 2018-03-29]{\intarray_new:Nn, \intarray_new:cn}
-% \begin{syntax}
-% \cs{intarray_new:Nn} \meta{intarray~var} \Arg{size}
-% \end{syntax}
-% Evaluates the integer expression \meta{size} and allocates an
-% \meta{integer array variable} with that number of (zero) entries.
-% The variable name should start with |\g_| because assignments are
-% always global.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2018-03-29]{\intarray_count:N, \intarray_count:c}
-% \begin{syntax}
-% \cs{intarray_count:N} \meta{intarray~var}
-% \end{syntax}
-% Expands to the number of entries in the \meta{integer array variable}.
-% Contrarily to \cs{seq_count:N} this is performed in constant time.
-% \end{function}
-%
-% \begin{function}[added = 2018-03-29]{\intarray_gset:Nnn, \intarray_gset:cnn}
-% \begin{syntax}
-% \cs{intarray_gset:Nnn} \meta{intarray~var} \Arg{position} \Arg{value}
-% \end{syntax}
-% Stores the result of evaluating the integer expression \meta{value}
-% into the \meta{integer array variable} at the (integer expression)
-% \meta{position}. If the \meta{position} is not between $1$ and the
-% \cs{intarray_count:N}, or the \meta{value}'s absolute value is
-% bigger than $2^{30}-1$, an error occurs. Assignments are always
-% global.
-% \end{function}
-%
-% \begin{function}[added = 2018-05-04]
-% {\intarray_const_from_clist:Nn, \intarray_const_from_clist:cn}
-% \begin{syntax}
-% \cs{intarray_const_from_clist:Nn} \meta{intarray~var} \meta{int expr clist}
-% \end{syntax}
-% Creates a new constant \meta{integer array variable} or raises an
-% error if the name is already taken. The \meta{integer array
-% variable} is set (globally) to contain as its items the results of
-% evaluating each \meta{integer expression} in the \meta{comma list}.
-% \end{function}
-%
-% \begin{function}[added = 2018-05-04]{\intarray_gzero:N, \intarray_gzero:c}
-% \begin{syntax}
-% \cs{intarray_gzero:N} \meta{intarray~var}
-% \end{syntax}
-% Sets all entries of the \meta{integer array variable} to zero.
-% Assignments are always global.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2018-03-29]{\intarray_item:Nn, \intarray_item:cn}
-% \begin{syntax}
-% \cs{intarray_item:Nn} \meta{intarray~var} \Arg{position}
-% \end{syntax}
-% Expands to the integer entry stored at the (integer expression)
-% \meta{position} in the \meta{integer array variable}. If the
-% \meta{position} is not between $1$ and the \cs{intarray_count:N}, an
-% error occurs.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2018-05-05]
-% {\intarray_rand_item:N, \intarray_rand_item:c}
-% \begin{syntax}
-% \cs{intarray_rand_item:N} \meta{intarray~var}
-% \end{syntax}
-% Selects a pseudo-random item of the \meta{integer array}. If the
-% \meta{integer array} is empty, produce an error.
-% \end{function}
-%
-% \begin{function}[added = 2018-05-04]
-% {\intarray_show:N, \intarray_show:c, \intarray_log:N, \intarray_log:c}
-% \begin{syntax}
-% \cs{intarray_show:N} \meta{intarray~var}
-% \cs{intarray_log:N} \meta{intarray~var}
-% \end{syntax}
-% Displays the items in the \meta{integer array variable} in the
-% terminal or writes them in the log file.
-% \end{function}
-%
-% \subsection{Implementation notes}
-%
-% It is a wrapper around the \tn{fontdimen} primitive, used to store
-% arrays of integers (with a restricted range: absolute value at most
-% $2^{30}-1$). In contrast to \pkg{l3seq} sequences the access to
-% individual entries is done in constant time rather than linear time,
-% but only integers can be stored. More precisely, the primitive
-% \tn{fontdimen} stores dimensions but the \pkg{l3intarray} module
-% transparently converts these from/to integers. Assignments are always
-% global.
-%
-% While \LuaTeX{}'s memory is extensible, other engines can
-% \enquote{only} deal with a bit less than $4\times 10^6$ entries in all
-% \tn{fontdimen} arrays combined (with default \TeX{} Live settings).
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3intarray} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=intarray>
-% \end{macrocode}
-%
-% There are two implementations for this module: One \cs{fontdimen} based one
-% for more traditional \TeX\ engines and a Lua based one for engines with Lua support.
-%
-% Both versions do not allow negative array sizes.
-% \begin{macrocode}
-%<*tex>
-\msg_new:nnn { kernel } { negative-array-size }
- { Size~of~array~may~not~be~negative:~#1 }
-% \end{macrocode}
-%
-% \begin{variable}{\l_@@_loop_int}
-% A loop index.
-% \begin{macrocode}
-\int_new:N \l_@@_loop_int
-% \end{macrocode}
-% \end{variable}
-%
-% \subsection{Lua implementation}
-% First, let's look at the Lua variant:
-%
-% We select the Lua version if the Lua helpers were defined. This can be detected by
-% the presence of \cs{@@_gset_count:Nw}.
-%
-% \begin{macrocode}
-\cs_if_exist:NTF \@@_gset_count:Nw
- {
-% \end{macrocode}
-%
-% \subsubsection{Allocating arrays}
-%
-% \begin{variable}{\g_@@_table_int, \l_@@_bad_index_int}
-% Used to differentiate intarrays in Lua and to record an invalid index.
-% \begin{macrocode}
- \int_new:N \g_@@_table_int
- \int_new:N \l_@@_bad_index_int
-%</tex>
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\@@:w}
-% Used as marker for intarrays in Lua. Followed by an unbraced number
-% identifying the array and a single space. This format is used to make it
-% easy to scan from Lua.
-% \begin{macrocode}
-%<*lua>
-luacmd('@@:w', function()
- scan_int()
- tex.error'LaTeX Error: Isolated intarray ignored'
-end, 'protected', 'global')
-%</lua>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\intarray_new:Nn, \intarray_new:cn}
-% \begin{macro}{\@@_new:N}
-% Declare |#1| as a tokenlist with the scanmark and a unique number.
-% Pass the array's size to the Lua helper.
-% Every \texttt{intarray} must be global; it's enough to run this
-% check in \cs{intarray_new:Nn}.
-% \begin{macrocode}
-%<*tex>
- \cs_new_protected:Npn \@@_new:N #1
- {
- \__kernel_chk_if_free_cs:N #1
- \int_gincr:N \g_@@_table_int
- \cs_gset_nopar:Npe #1 { \@@:w \int_use:N \g_@@_table_int \c_space_tl }
- }
- \cs_new_protected:Npn \intarray_new:Nn #1#2
- {
- \@@_new:N #1
- \@@_gset_count:Nw #1 \int_eval:n {#2} \scan_stop:
- \int_compare:nNnT { \intarray_count:N #1 } < 0
- {
- \msg_error:nne { kernel } { negative-array-size }
- { \intarray_count:N #1 }
- }
- }
- \cs_generate_variant:Nn \intarray_new:Nn { c }
-%</tex>
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% Before we get to the first command implmented in Lua, we first need some
-% definitions. Since \texttt{token.create} only works correctly if \TeX{}
-% has seen the tokens before, we first run a short \TeX{} sequence to ensure
-% that all relevant control sequences are known.
-% \begin{macrocode}
-%<*lua>
-
-local scan_token = token.scan_token
-local put_next = token.put_next
-local intarray_marker = token_create_safe'@@:w'
-local use_none = token_create_safe'use_none:n'
-local use_i = token_create_safe'use:n'
-local expand_after_scan_stop = {token_create_safe'exp_after:wN',
- token_create_safe'scan_stop:'}
-local comma = token_create(string.byte',')
-% \end{macrocode}
-%
-% \begin{macro}{@@_table}
-% Internal helper to scan an intarray token, extract the associated
-% Lua table and return an error if the input is invalid.
-%
-% \begin{macrocode}
-local @@_table do
- local tables = get_luadata and get_luadata'@@' or {[0] = {}}
- function @@_table()
- local t = scan_token()
- if t ~= intarray_marker then
- put_next(t)
- tex.error'LaTeX Error: intarray expected'
- return tables[0]
- end
- local i = scan_int()
- local current_table = tables[i]
- if current_table then return current_table end
- current_table = {}
- tables[i] = current_table
- return current_table
- end
-% \end{macrocode}
-% Since in \LaTeX{} this is loaded in the format, we want to preserve any intarrays
-% which are created while format building for the actual run.
-%
-% To do this, we use the \texttt{register_luadata} mechanism from \pkg{l3luatex}:
-% Directly before the format get dumped, the following function gets invoked and serializes
-% all existing tables into a string. This string gets compiled and dumped into the format and
-% is made available at the beginning of regular runs as \texttt{get_luadata'@@'}.
-% \begin{macrocode}
- if register_luadata then
- register_luadata('@@', function()
- local t = "{[0]={},"
- for i=1, #tables do
- t = string.format("%s{%s},", t, table.concat(tables[i], ','))
- end
- return t .. "}"
- end)
- end
-end
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\intarray_count:N, \intarray_count:c}
-% \begin{macro}[EXP]{\@@_gset_count:Nw}
-% Set and get the size of an array. ``Setting the size'' means in this context that
-% we add zeros until we reach the desired size.
-% \begin{macrocode}
-
-local sprint = tex.sprint
-
-luacmd('@@_gset_count:Nw', function()
- local t = @@_table()
- local n = scan_int()
- for i=#t+1, n do t[i] = 0 end
-end, 'protected', 'global')
-
-luacmd('intarray_count:N', function()
- sprint(-2, #@@_table())
-end, 'global')
-%</lua>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*tex>
- \cs_generate_variant:Nn \intarray_count:N { c }
-%</tex>
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsubsection{Array items}
-%
-% \begin{macro}{\@@_gset:wF, \@@_gset:w}
-% The setter provided by Lua. The argument order somewhat emulates the |\fontdimen|:
-% First the array index, followed by the intarray and then the new value.
-% This has been chosen over a more conventional order to provide a delimiter for the numbers.
-% \begin{macrocode}
-%<*lua>
-luacmd('@@_gset:wF', function()
- local i = scan_int()
- local t = @@_table()
- if t[i] then
- t[i] = scan_int()
- put_next(use_none)
- else
- tex.count.l_@@_bad_index_int = i
- scan_int()
- put_next(use_i)
- end
-end, 'protected', 'global')
-
-luacmd('@@_gset:w', function()
- local i = scan_int()
- local t = @@_table()
- t[i] = scan_int()
-end, 'protected', 'global')
-%</lua>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\intarray_gset:Nnn, \intarray_gset:cnn, \__kernel_intarray_gset:Nnn}
-% The \cs{__kernel_intarray_gset:Nnn} function does not use
-% \cs{int_eval:n}, namely its arguments must be suitable for
-% \cs{int_value:w}. The user version checks the position and value
-% are within bounds.
-% \begin{macrocode}
-%<*tex>
- \cs_new_protected:Npn \__kernel_intarray_gset:Nnn #1#2#3
- { \@@_gset:w #2 #1 #3 \scan_stop: }
- \cs_new_protected:Npn \intarray_gset:Nnn #1#2#3
- {
- \@@_gset:wF \int_eval:n {#2} #1 \int_eval:n{#3}
- {
- \msg_error:nneee { kernel } { out-of-bounds }
- { \token_to_str:N #1 } { \int_use:N \l_@@_bad_index_int } { \intarray_count:N #1 }
- }
- }
- \cs_generate_variant:Nn \intarray_gset:Nnn { c }
-%</tex>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\intarray_gzero:N, \intarray_gzero:c}
-% Set the appropriate array entry to zero. No bound checking
-% needed.
-% \begin{macrocode}
-%<*lua>
-luacmd('intarray_gzero:N', function()
- local t = @@_table()
- for i=1, #t do
- t[i] = 0
- end
-end, 'global', 'protected')
-%</lua>
-%<*tex>
- \cs_generate_variant:Nn \intarray_gzero:N { c }
-%</tex>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\intarray_item:Nn, \intarray_item:cn, \__kernel_intarray_item:Nn}
-% \begin{macro}{\@@_item:wF,\@@_item:w}
-% Get the appropriate entry and perform bound checks. The
-% \cs{__kernel_intarray_item:Nn} function omits bound checks and omits
-% \cs{int_eval:n}, namely its argument must be a \TeX{} integer
-% suitable for \cs{int_value:w}.
-% \begin{macrocode}
-%<*lua>
-luacmd('@@_item:wF', function()
- local i = scan_int()
- local t = @@_table()
- local item = t[i]
- if item then
- put_next(use_none)
- else
- tex.l_@@_bad_index_int = i
- put_next(use_i)
- end
- put_next(expand_after_scan_stop)
- scan_token()
- if item then
- sprint(-2, item)
- end
-end, 'global')
-
-luacmd('@@_item:w', function()
- local i = scan_int()
- local t = @@_table()
- sprint(-2, t[i])
-end, 'global')
-%</lua>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*tex>
- \cs_new:Npn \__kernel_intarray_item:Nn #1#2
- { \@@_item:w #2 #1 }
- \cs_new:Npn \intarray_item:Nn #1#2
- {
- \@@_item:wF \int_eval:n {#2} #1
- {
- \msg_expandable_error:nnfff { kernel } { out-of-bounds }
- { \token_to_str:N #1 } { \int_use:N \l_@@_bad_index_int } { \intarray_count:N #1 }
- 0
- }
- }
- \cs_generate_variant:Nn \intarray_item:Nn { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\intarray_rand_item:N, \intarray_rand_item:c}
-% Importantly, \cs{intarray_item:Nn} only evaluates its argument once.
-% \begin{macrocode}
- \cs_new:Npn \intarray_rand_item:N #1
- { \intarray_item:Nn #1 { \int_rand:n { \intarray_count:N #1 } } }
- \cs_generate_variant:Nn \intarray_rand_item:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Working with contents of integer arrays}
-%
-% \begin{macro}{\intarray_const_from_clist:Nn, \intarray_const_from_clist:cn}
-% We use the \cs{__kernel_intarray_gset:Nnn} which does not do bounds checking
-% and instead automatically resizes the array.
-% This is not implemented in Lua to ensure that the clist parsing is consistent
-% with the clist module.
-% \begin{macrocode}
- \cs_new_protected:Npn \intarray_const_from_clist:Nn #1#2
- {
- \@@_new:N #1
- \int_zero:N \l_@@_loop_int
- \clist_map_inline:nn {#2}
- {
- \int_incr:N \l_@@_loop_int
- \__kernel_intarray_gset:Nnn #1 \l_@@_loop_int { \int_eval:n {##1} } }
- }
- \cs_generate_variant:Nn \intarray_const_from_clist:Nn { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_to_clist:Nn, \@@_to_clist:w}
-% The \cs{@@_to_clist:Nn} auxiliary allows to choose the delimiter and
-% is also used in \cs{intarray_show:N}. Here we just pass the information
-% to Lua and let \texttt{table.concat} do the actual work.
-% We discard the category codes of the passed delimiter but this is not
-% an issue since the delimiter is always just a comma or a comma and a space.
-% In both cases \texttt{sprint(2, ...)} provides the right catcodes.
-% \begin{macrocode}
-%</tex>
-%<*lua>
-local concat = table.concat
-luacmd('@@_to_clist:Nn', function()
- local t = @@_table()
- local sep = token.scan_string()
- sprint(-2, concat(t, sep))
-end, 'global')
-%</lua>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\__kernel_intarray_range_to_clist:Nnn, \@@_range_to_clist:w}
-% Loop through part of the array.
-% \begin{macrocode}
-%<*tex>
- \cs_new:Npn \__kernel_intarray_range_to_clist:Nnn #1#2#3
- {
- \@@_range_to_clist:w #1
- \int_eval:n {#2} ~ \int_eval:n {#3} ~
- }
-%</tex>
-%<*lua>
-luacmd('@@_range_to_clist:w', function()
- local t = @@_table()
- local from = scan_int()
- local to = scan_int()
- sprint(-2, concat(t, ',', from, to))
-end, 'global')
-%</lua>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\__kernel_intarray_gset_range_from_clist:Nnn, \@@_gset_range:nNw}
-% Loop through part of the array. We allow additional commas at the end.
-% \begin{macrocode}
-%<*tex>
- \cs_new_protected:Npn \__kernel_intarray_gset_range_from_clist:Nnn #1#2#3
- {
- \@@_gset_range:w \int_eval:w #2 #1 #3 , , \scan_stop:
- }
-%</tex>
-%<*lua>
-luacmd('@@_gset_range:w', function()
- local from = scan_int()
- local t = @@_table()
- while true do
- local tok = scan_token()
- if tok == comma then
- repeat
- tok = scan_token()
- until tok ~= comma
- break
- else
- put_next(tok)
- end
- t[from] = scan_int()
- scan_token()
- from = from + 1
- end
- end, 'global', 'protected')
-%</lua>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_gset_overflow_test:nw}
-% In order to allow some code sharing later we provide the
-% \cs{@@_gset_overflow_test:nw} name here. It doesn't actually test anything
-% since the Lua implementation accepts all integers which could be tested with
-% \cs{tex_ifabsnum:D}.
-% \begin{macrocode}
-%<*tex>
- \cs_new_protected:Npn \@@_gset_overflow_test:nw #1
- {
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Font dimension based implementation}
-%
-% Go to the false branch of the conditional above.
-% \begin{macrocode}
- }
- {
-% \end{macrocode}
-%
-% \subsubsection{Allocating arrays}
-%
-% \begin{macro}{\@@_entry:w, \@@_count:w}
-% We use these primitives quite a lot in this module.
-% \begin{macrocode}
- \cs_new_eq:NN \@@_entry:w \tex_fontdimen:D
- \cs_new_eq:NN \@@_count:w \tex_hyphenchar:D
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\c_@@_sp_dim}
-% Used to convert integers to dimensions fast.
-% \begin{macrocode}
- \dim_const:Nn \c_@@_sp_dim { 1 sp }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\g_@@_font_int}
-% Used to assign one font per array.
-% \begin{macrocode}
- \int_new:N \g_@@_font_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\intarray_new:Nn, \intarray_new:cn}
-% \begin{macro}{\@@_new:N}
-% Declare |#1| to be a font (arbitrarily |cmr10| at a never-used
-% size). Store the array's size as the \tn{hyphenchar} of that font
-% and make sure enough \tn{fontdimen} are allocated, by setting the
-% last one. Then clear any \tn{fontdimen} that |cmr10| starts with.
-% It seems \LuaTeX{}'s |cmr10| has an extra \tn{fontdimen} parameter
-% number $8$ compared to other engines (for a math font we would
-% replace $8$ by $22$ or some such).
-% Every \texttt{intarray} must be global; it's enough to run this
-% check in \cs{intarray_new:Nn}.
-% \begin{macrocode}
- \cs_new_protected:Npn \@@_new:N #1
- {
- \__kernel_chk_if_free_cs:N #1
- \int_gincr:N \g_@@_font_int
- \tex_global:D \tex_font:D #1
- = cmr10~at~ \g_@@_font_int \c_@@_sp_dim \scan_stop:
- \int_step_inline:nn { 8 }
- { \__kernel_intarray_gset:Nnn #1 {##1} \c_zero_int }
- }
- \cs_new_protected:Npn \intarray_new:Nn #1#2
- {
- \@@_new:N #1
- \@@_count:w #1 = \int_eval:n {#2} \scan_stop:
- \int_compare:nNnT { \intarray_count:N #1 } < 0
- {
- \msg_error:nne { kernel } { negative-array-size }
- { \intarray_count:N #1 }
- }
- \int_compare:nNnT { \intarray_count:N #1 } > 0
- { \__kernel_intarray_gset:Nnn #1 { \intarray_count:N #1 } { 0 } }
- }
- \cs_generate_variant:Nn \intarray_new:Nn { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\intarray_count:N, \intarray_count:c}
-% Size of an array.
-% \begin{macrocode}
- \cs_new:Npn \intarray_count:N #1 { \int_value:w \@@_count:w #1 }
- \cs_generate_variant:Nn \intarray_count:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Array items}
-%
-% \begin{macro}[EXP]{\@@_signed_max_dim:n}
-% Used when an item to be stored is larger than \cs{c_max_dim} in
-% absolute value; it is replaced by $\pm\cs{c_max_dim}$.
-% \begin{macrocode}
- \cs_new:Npn \@@_signed_max_dim:n #1
- { \int_value:w \int_compare:nNnT {#1} < 0 { - } \c_max_dim }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_bounds:NNnTF, \@@_bounds_error:NNnw}
-% The functions \cs{intarray_gset:Nnn} and \cs{intarray_item:Nn} share
-% bounds checking. The |T| branch is used if |#3| is within bounds of
-% the array |#2|.
-% \begin{macrocode}
- \cs_new:Npn \@@_bounds:NNnTF #1#2#3
- {
- \if_int_compare:w 1 > #3 \exp_stop_f:
- \@@_bounds_error:NNnw #1 #2 {#3}
- \else:
- \if_int_compare:w #3 > \intarray_count:N #2 \exp_stop_f:
- \@@_bounds_error:NNnw #1 #2 {#3}
- \fi:
- \fi:
- \use_i:nn
- }
- \cs_new:Npn \@@_bounds_error:NNnw #1#2#3#4 \use_i:nn #5#6
- {
- #4
- #1 { kernel } { out-of-bounds }
- { \token_to_str:N #2 } {#3} { \intarray_count:N #2 }
- #6
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\intarray_gset:Nnn, \intarray_gset:cnn, \__kernel_intarray_gset:Nnn}
-% \begin{macro}{\@@_gset:Nnn, \@@_gset_overflow:Nnn}
-% Set the appropriate \tn{fontdimen}. The
-% \cs{__kernel_intarray_gset:Nnn} function does not use
-% \cs{int_eval:n}, namely its arguments must be suitable for
-% \cs{int_value:w}. The user version checks the position and value
-% are within bounds.
-% \begin{macrocode}
- \cs_new_protected:Npn \__kernel_intarray_gset:Nnn #1#2#3
- { \@@_entry:w #2 #1 #3 \c_@@_sp_dim }
- \cs_new_protected:Npn \intarray_gset:Nnn #1#2#3
- {
- \exp_after:wN \@@_gset:Nww
- \exp_after:wN #1
- \int_value:w \int_eval:n {#2} \exp_after:wN ;
- \int_value:w \int_eval:n {#3} ;
- }
- \cs_generate_variant:Nn \intarray_gset:Nnn { c }
- \cs_new_protected:Npn \@@_gset:Nww #1#2 ; #3 ;
- {
- \@@_bounds:NNnTF \msg_error:nneee #1 {#2}
- {
- \@@_gset_overflow_test:nw {#3}
- \__kernel_intarray_gset:Nnn #1 {#2} {#3}
- }
- { }
- }
- \cs_if_exist:NTF \tex_ifabsnum:D
- {
- \cs_new_protected:Npn \@@_gset_overflow_test:nw #1
- {
- \tex_ifabsnum:D #1 > \c_max_dim
- \exp_after:wN \@@_gset_overflow:NNnn
- \fi:
- }
- }
- {
- \cs_new_protected:Npn \@@_gset_overflow_test:nw #1
- {
- \if_int_compare:w \int_abs:n {#1} > \c_max_dim
- \exp_after:wN \@@_gset_overflow:NNnn
- \fi:
- }
- }
- \cs_new_protected:Npn \@@_gset_overflow:NNnn #1#2#3#4
- {
- \msg_error:nneeee { kernel } { overflow }
- { \token_to_str:N #2 } {#3} {#4} { \@@_signed_max_dim:n {#4} }
- #1 #2 {#3} { \@@_signed_max_dim:n {#4} }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\intarray_gzero:N, \intarray_gzero:c}
-% Set the appropriate \tn{fontdimen} to zero. No bound checking
-% needed. The \cs{prg_replicate:nn} possibly uses quite a lot of
-% memory, but this is somewhat comparable to the size of the array,
-% and it is much faster than an \cs{int_step_inline:nn} loop.
-% \begin{macrocode}
- \cs_new_protected:Npn \intarray_gzero:N #1
- {
- \int_zero:N \l_@@_loop_int
- \prg_replicate:nn { \intarray_count:N #1 }
- {
- \int_incr:N \l_@@_loop_int
- \@@_entry:w \l_@@_loop_int #1 \c_zero_dim
- }
- }
- \cs_generate_variant:Nn \intarray_gzero:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\intarray_item:Nn, \intarray_item:cn, \__kernel_intarray_item:Nn}
-% \begin{macro}{\@@_item:Nw}
-% Get the appropriate \tn{fontdimen} and perform bound checks. The
-% \cs{__kernel_intarray_item:Nn} function omits bound checks and omits
-% \cs{int_eval:n}, namely its argument must be a \TeX{} integer
-% suitable for \cs{int_value:w}.
-% \begin{macrocode}
- \cs_new:Npn \__kernel_intarray_item:Nn #1#2
- { \int_value:w \@@_entry:w #2 #1 }
- \cs_new:Npn \intarray_item:Nn #1#2
- {
- \exp_after:wN \@@_item:Nw
- \exp_after:wN #1
- \int_value:w \int_eval:n {#2} ;
- }
- \cs_generate_variant:Nn \intarray_item:Nn { c }
- \cs_new:Npn \@@_item:Nw #1#2 ;
- {
- \@@_bounds:NNnTF \msg_expandable_error:nnfff #1 {#2}
- { \__kernel_intarray_item:Nn #1 {#2} }
- { 0 }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\intarray_rand_item:N, \intarray_rand_item:c}
-% Importantly, \cs{intarray_item:Nn} only evaluates its argument once.
-% \begin{macrocode}
- \cs_new:Npn \intarray_rand_item:N #1
- { \intarray_item:Nn #1 { \int_rand:n { \intarray_count:N #1 } } }
- \cs_generate_variant:Nn \intarray_rand_item:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Working with contents of integer arrays}
-%
-% \begin{macro}{\intarray_const_from_clist:Nn, \intarray_const_from_clist:cn}
-% \begin{macro}{\@@_const_from_clist:nN}
-% Similar to \cs{intarray_new:Nn} (which we don't use because when
-% debugging is enabled that function checks the variable name starts
-% with |g_|). We make use of the fact that \TeX{} allows allocation
-% of successive \tn{fontdimen} as long as no other font has been
-% declared: no need to count the comma list items first. We need the
-% code in \cs{intarray_gset:Nnn} that checks the item value is not too
-% big, namely \cs{@@_gset_overflow_test:nw}, but not the code that
-% checks bounds. At the end, set the size of the intarray.
-% \begin{macrocode}
- \cs_new_protected:Npn \intarray_const_from_clist:Nn #1#2
- {
- \@@_new:N #1
- \int_zero:N \l_@@_loop_int
- \clist_map_inline:nn {#2}
- { \exp_args:Nf \@@_const_from_clist:nN { \int_eval:n {##1} } #1 }
- \@@_count:w #1 \l_@@_loop_int
- }
- \cs_generate_variant:Nn \intarray_const_from_clist:Nn { c }
- \cs_new_protected:Npn \@@_const_from_clist:nN #1#2
- {
- \int_incr:N \l_@@_loop_int
- \@@_gset_overflow_test:nw {#1}
- \__kernel_intarray_gset:Nnn #2 \l_@@_loop_int {#1}
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_to_clist:Nn, \@@_to_clist:w}
-% Loop through the array, putting a comma before each item. Remove
-% the leading comma with |f|-expansion. We also use the auxiliary in
-% \cs{intarray_show:N} with argument comma, space.
-% \begin{macrocode}
- \cs_new:Npn \@@_to_clist:Nn #1#2
- {
- \int_compare:nNnF { \intarray_count:N #1 } = \c_zero_int
- {
- \exp_last_unbraced:Nf \use_none:n
- { \@@_to_clist:w 1 ; #1 {#2} \prg_break_point: }
- }
- }
- \cs_new:Npn \@@_to_clist:w #1 ; #2#3
- {
- \if_int_compare:w #1 > \@@_count:w #2
- \prg_break:n
- \fi:
- #3 \__kernel_intarray_item:Nn #2 {#1}
- \exp_after:wN \@@_to_clist:w
- \int_value:w \int_eval:w #1 + \c_one_int ; #2 {#3}
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\__kernel_intarray_range_to_clist:Nnn, \@@_range_to_clist:ww}
-% Loop through part of the array.
-% \begin{macrocode}
- \cs_new:Npn \__kernel_intarray_range_to_clist:Nnn #1#2#3
- {
- \exp_last_unbraced:Nf \use_none:n
- {
- \exp_after:wN \@@_range_to_clist:ww
- \int_value:w \int_eval:w #2 \exp_after:wN ;
- \int_value:w \int_eval:w #3 ;
- #1 \prg_break_point:
- }
- }
- \cs_new:Npn \@@_range_to_clist:ww #1 ; #2 ; #3
- {
- \if_int_compare:w #1 > #2 \exp_stop_f:
- \prg_break:n
- \fi:
- , \__kernel_intarray_item:Nn #3 {#1}
- \exp_after:wN \@@_range_to_clist:ww
- \int_value:w \int_eval:w #1 + \c_one_int ; #2 ; #3
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\__kernel_intarray_gset_range_from_clist:Nnn, \@@_gset_range:Nw}
-% Loop through part of the array.
-% \begin{macrocode}
- \cs_new_protected:Npn \__kernel_intarray_gset_range_from_clist:Nnn #1#2#3
- {
- \int_set:Nn \l_@@_loop_int {#2}
- \@@_gset_range:Nw #1 #3 , , \prg_break_point:
- }
- \cs_new_protected:Npn \@@_gset_range:Nw #1 #2 ,
- {
- \if_catcode:w \scan_stop: \tl_to_str:n {#2} \scan_stop:
- \prg_break:n
- \fi:
- \__kernel_intarray_gset:Nnn #1 \l_@@_loop_int {#2}
- \int_incr:N \l_@@_loop_int
- \@@_gset_range:Nw #1
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
- }
-% \end{macrocode}
-%
-% \subsection{Common parts}
-%
-% \begin{macro}{\intarray_show:N, \intarray_show:c, \intarray_log:N, \intarray_log:c}
-% Convert the list to a comma list (with spaces after each comma)
-% \begin{macrocode}
-\cs_new_protected:Npn \intarray_show:N { \@@_show:NN \msg_show:nneeee }
-\cs_generate_variant:Nn \intarray_show:N { c }
-\cs_new_protected:Npn \intarray_log:N { \@@_show:NN \msg_log:nneeee }
-\cs_generate_variant:Nn \intarray_log:N { c }
-\cs_new_protected:Npn \@@_show:NN #1#2
- {
- \__kernel_chk_defined:NT #2
- {
- #1 { intarray } { show }
- { \token_to_str:N #2 }
- { \intarray_count:N #2 }
- { >~ \@@_to_clist:Nn #2 { , ~ } }
- { }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</tex>
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3kernel-functions.dtx b/macros/latex/contrib/l3kernel/l3kernel-functions.dtx
deleted file mode 100644
index 480425d730..0000000000
--- a/macros/latex/contrib/l3kernel/l3kernel-functions.dtx
+++ /dev/null
@@ -1,714 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3kernel-functions.dtx
-%
-% Copyright (C) 2018-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3kernel-functions} module\\ Kernel-reserved functions^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3kernel-functions}: kernel-reserved functions}
-%
-% \subsection{Internal \pkg{l3debug} kernel functions}
-% \label{sec:l3kernel-functions:l3debug-internals}
-%
-% These function are only created if debugging is enabled, hence they are
-% actually defined in \pkg{l3debug}.
-%
-% \begin{function}{\__kernel_chk_var_local:N, \__kernel_chk_var_global:N}
-% \begin{syntax}
-% \cs{__kernel_chk_var_local:N} \meta{var}
-% \cs{__kernel_chk_var_global:N} \meta{var}
-% \end{syntax}
-% Applies \cs{__kernel_chk_var_exist:N} \meta{var} as well as
-% \cs{__kernel_chk_var_scope:NN} \meta{scope} \meta{var}, where
-% \meta{scope} is |l| or~|g|.
-% \end{function}
-%
-% \begin{function}{\__kernel_chk_var_scope:NN}
-% \begin{syntax}
-% \cs{__kernel_chk_var_scope:NN} \meta{scope} \meta{var}
-% \end{syntax}
-% Checks the \meta{var} has the correct \meta{scope}, and if not
-% raises a kernel-level error.
-% The \meta{scope} is a single letter |l|, |g|,
-% |c| denoting local variables, global variables, or constants. More
-% precisely, if the variable name starts with a letter and an
-% underscore (normal \pkg{expl3} convention) the function checks that
-% this single letter matches the \meta{scope}. Otherwise the function
-% cannot know the scope \meta{var} the first time: instead, it defines
-% |\__debug_chk_/|\meta{var name} to store that information for the
-% next call. Thus, if a given \meta{var} is subject to assignments of
-% different scopes a kernel error will result.
-% \end{function}
-%
-% \begin{function}
-% {
-% \__kernel_chk_cs_exist:N,
-% \__kernel_chk_cs_exist:c,
-% \__kernel_chk_var_exist:N
-% }
-% \begin{syntax}
-% \cs{__kernel_chk_cs_exist:N} \meta{cs}
-% \cs{__kernel_chk_var_exist:N} \meta{var}
-% \end{syntax}
-% Checks that their argument is defined according to the criteria for
-% \cs{cs_if_exist_p:N},
-% and if not raises a kernel-level error. Error messages are
-% different.
-% \end{function}
-%
-% \begin{function}[EXP]{\__kernel_chk_flag_exist:NN}
-% \begin{syntax}
-% \cs{__kernel_chk_flag_exist:NN}
-% \meta{function} \meta{flag}
-% \end{syntax}
-% Checks that the \meta{flag} is defined according to the criterion for
-% \cs{flag_if_exist_p:N}, and if not raises a kernel-level error and
-% calls the function with the argument \cs{l_tmpa_flag} to proceed
-% somehow without producing too many errors.
-% \end{function}
-%
-% \begin{function}{\__kernel_debug_log:e}
-% \begin{syntax}
-% \cs{__kernel_debug_log:e} \Arg{message text}
-% \end{syntax}
-% If the \texttt{log-functions} option is active, this function writes
-% the \meta{message text} to the log file using \cs{iow_log:e}.
-% Otherwise, the \meta{message text} is ignored using \cs{use_none:n}.
-% \end{function}
-%
-% \subsection{Internal kernel functions}
-%
-% \begin{function}{\__kernel_chk_defined:NT}
-% \begin{syntax}
-% \cs{__kernel_chk_defined:NT} \meta{variable} \Arg{true code}
-% \end{syntax}
-% If \meta{variable} is not defined (according to
-% \cs{cs_if_exist:NTF}), this triggers an error, otherwise the
-% \meta{true code} is run.
-% \end{function}
-%
-% \begin{function}{\__kernel_chk_expr:nNnN}
-% \begin{syntax}
-% \cs{__kernel_chk_expr:nNnN} \Arg{expr} \meta{eval} \Arg{convert} \meta{caller}
-% \end{syntax}
-% This function is only created if debugging is enabled. By default
-% it is equivalent to \cs{use_i:nnnn}. When expression checking is
-% enabled, it leaves in the input stream the result of \cs{tex_the:D}
-% \meta{eval} \meta{expr} \cs{tex_relax:D} after checking that no
-% token was left over. If any token was not taken as part of the
-% expression, there is an error message displaying the result of the
-% evaluation as well as the \meta{caller}. For instance \meta{eval}
-% can be \cs{__int_eval:w} and \meta{caller} can be \cs{int_eval:n} or
-% \cs{int_set:Nn}. The argument \meta{convert} is empty except for mu
-% expressions where it is \cs{tex_mutoglue:D}, used for internal
-% purposes.
-% \end{function}
-%
-% \begin{function}{\__kernel_chk_tl_type:NnnT}
-% \begin{syntax}\parskip=0pt\obeylines
-% \cs{__kernel_chk_tl_type:NnnT} \meta{control sequence} \Arg{specific type} \\
-% | |\Arg{reconstruction} \Arg{true code}
-% \end{syntax}
-% Helper to test that the \meta{control sequence} is a variable of the
-% given \meta{specific type} of token list. Produces suitable error
-% messages if the \meta{control sequence} does not exist, or if it is
-% not a token list variable at all, or if the \meta{control sequence}
-% differs from the result of |e|-expanding \meta{reconstruction}. If
-% all of these tests succeed then the \meta{true code} is run.
-% \end{function}
-%
-% \begin{function}[EXP]{\__kernel_codepoint_to_bytes:n}
-% \begin{syntax}
-% \cs{__kernel_codepoint_to_bytes:n} \Arg{codepoint}
-% \end{syntax}
-% Converts the \meta{codepoint} to UTF-8 bytes. The expansion
-% of this function comprises four brace groups, each of which will contain
-% a hexadecimal value: the appropriate byte. As UTF-8 is a variable-length,
-% one or more of the groups may be empty: the bytes read in the logical order,
-% such that a two-byte codepoint will have groups |#1| and |#2| filled
-% and |#3| and |#4| empty.
-% \end{function}
-%
-% \begin{function}{\__kernel_cs_parm_from_arg_count:nnF}
-% \begin{syntax}
-% \cs{__kernel_cs_parm_from_arg_count:nnF} \Arg{follow-on} \Arg{args} \Arg{false code}
-% \end{syntax}
-% Evaluates the number of \meta{args} and leaves the \meta{follow-on} code
-% followed by a brace group containing the required number of primitive
-% parameter markers (|#1|, \emph{etc}.). If the number of \meta{args} is outside
-% the range $[0,9]$, the \meta{false code} is inserted \emph{instead} of
-% the \meta{follow-on}.
-% \end{function}
-%
-% \begin{function}{
-% \__kernel_dependency_version_check:Nn,
-% \__kernel_dependency_version_check:nn,
-% }
-% \begin{syntax}
-% \cs{__kernel_dependency_version_check:Nn} \Arg{\cs{date}} \Arg{file}
-% \cs{__kernel_dependency_version_check:nn} \Arg{date} \Arg{file}
-% \end{syntax}
-% Checks if the loaded version of the \pkg{expl3} kernel is at least \meta{date},
-% required by \meta{file}. If the kernel date is older than \meta{date}, the
-% loading of \meta{file} is aborted and an error is raised.
-% \end{function}
-%
-% \begin{function}{\__kernel_deprecation_code:nn}
-% \begin{syntax}
-% \cs{__kernel_deprecation_code:nn} \Arg{error code} \Arg{working code}
-% \end{syntax}
-% Stores both an \meta{error} and \meta{working} definition for given material
-% such that they can be exchanged by \cs{debug_on:n} and \cs{debug_off:n}.
-% \end{function}
-%
-% \begin{function}[EXP]{\__kernel_exp_not:w}
-% \begin{syntax}
-% \cs{__kernel_exp_not:w} \meta{expandable tokens} \Arg{content}
-% \end{syntax}
-% Carries out expansion on the \meta{expandable tokens} before preventing
-% further expansion of the \meta{content} as for \cs{exp_not:n}. Typically,
-% the \meta{expandable tokens} will alter the nature of the \meta{content},
-% \emph{i.e.}~allow it to be generated in some way.
-% \end{function}
-%
-% \begin{variable}{\l__kernel_expl_bool}
-% A boolean which records the current code syntax status: \texttt{true} if
-% currently inside a code environment. This variable should only be
-% set by \cs{ExplSyntaxOn}/\cs{ExplSyntaxOff}.
-% \end{variable}
-%
-% \begin{variable}{\c__kernel_expl_date_tl}
-% A token list containing the release date of the \pkg{l3kernel} preloaded
-% in \LaTeXe{} used to check if dependencies match.
-% \end{variable}
-%
-% \begin{function}{\__kernel_file_missing:n}
-% \begin{syntax}
-% \cs{__kernel_file_missing:n} \Arg{name}
-% \end{syntax}
-% Expands the \meta{name} as per \cs{__kernel_file_name_sanitize:n} then
-% produces an error message indicating that this file was not found.
-% \end{function}
-%
-% \begin{function}[EXP,updated = 2021-04-17]{\__kernel_file_name_sanitize:n}
-% \begin{syntax}
-% \cs{__kernel_file_name_sanitize:n} \Arg{name}
-% \end{syntax}
-% Expands the file name using a \tn{csname}-based approach, and
-% relies on active characters (for example from UTF-8 characters)
-% being properly set up to expand to a expansion-safe version using
-% \cs{ifcsname}. This is less conservative than the token-by-token
-% approach used before, but it is much faster.
-% \end{function}
-%
-% \begin{function}{\__kernel_file_input_push:n, \__kernel_file_input_pop:}
-% \begin{syntax}
-% \cs{__kernel_file_input_push:n} \Arg{name}
-% \cs{__kernel_file_input_pop:}
-% \end{syntax}
-% Used to push and pop data from the internal file stack: needed only
-% in package mode, where interfacing with the \LaTeXe{} kernel is necessary.
-% \end{function}
-%
-% \begin{function}[EXP]{\__kernel_int_add:nnn}
-% \begin{syntax}
-% \cs{__kernel_int_add:nnn} \Arg{integer_1} \Arg{integer_2} \Arg{integer_3}
-% \end{syntax}
-% Expands to the result of adding the three \meta{integers} (which
-% must be suitable input for \cs{int_eval:w}), avoiding intermediate
-% overflow. Overflow occurs only if the overall result is outside
-% $[-2^{31}+1,2^{31}-1]$. The \meta{integers} may be of the form
-% \cs{int_eval:w} \dots{} \cs{scan_stop:} but may be evaluated more
-% than once.
-% \end{function}
-%
-% \begin{function}[added = 2018-03-31]{\__kernel_intarray_gset:Nnn}
-% \begin{syntax}
-% \cs{__kernel_intarray_gset:Nnn} \meta{intarray~var} \Arg{index} \Arg{value}
-% \end{syntax}
-% Faster version of \cs{intarray_gset:Nnn}. Stores the \meta{value}
-% into the \meta{integer array variable} at the \meta{position}. The
-% \meta{index} and \meta{value} must be suitable for a direct
-% assignment to a \TeX{} count register, for instance expanding to an
-% integer denotation or obtained through the primitive \tn{numexpr}
-% (which may be un-terminated). No bound checking is performed: the
-% caller is responsible for ensuring that the \meta{position} is
-% between $1$ and the \cs{intarray_count:N}, and the \meta{value}'s
-% absolute value is at most $2^{30}-1$. Assignments are always
-% global.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2018-03-31]{\__kernel_intarray_item:Nn}
-% \begin{syntax}
-% \cs{__kernel_intarray_item:Nn} \meta{intarray~var} \Arg{index}
-% \end{syntax}
-% Faster version of \cs{intarray_item:Nn}. Expands to the integer
-% entry stored at the \meta{index} in the \meta{integer array
-% variable}. The \meta{index} must be suitable for a direct
-% assignment to a \TeX{} count register and must be between $1$ and
-% the \cs{intarray_count:N}, lest a low-level \TeX{} error occur.
-% \end{function}
-%
-% \begin{function}[rEXP, added = 2020-07-12]{\__kernel_intarray_range_to_clist:Nnn}
-% \begin{syntax}
-% \cs{__kernel_intarray_range_to_clist:Nnn} \meta{intarray~var} \Arg{start index} \Arg{end index}
-% \end{syntax}
-% Converts to integer denotations separated by commas the entries of
-% the \meta{intarray} from positions \meta{start index} to \meta{end
-% index} included. The \meta{start index} and \meta{end index} must
-% be suitable for a direct assignment to a \TeX{} count register, must
-% be between $1$ and the \cs{intarray_count:N}, and be suitably
-% ordered. All tokens have category code other.
-% \end{function}
-%
-% \begin{function}[added = 2020-07-12]{\__kernel_intarray_gset_range_from_clist:Nnn}
-% \begin{syntax}
-% \cs{__kernel_intarray_gset_range_from_clist:Nnn} \meta{intarray~var} \Arg{start index} \Arg{integer clist}
-% \end{syntax}
-% Stores the entries of the \meta{clist} as entries of the
-% \meta{intarray~var} starting from the \meta{start index}, upwards.
-% This is done without any bound checking. The \meta{start index} and
-% all entries of the \meta{integer comma list} (which do not undergo
-% space trimming and brace stripping as in normal clist mappings) must
-% be suitable for a direct assignment to a \TeX{} count register. An
-% empty entry may stop the loop.
-% \end{function}
-%
-% \begin{function}{\__kernel_ior_open:Nn, \__kernel_ior_open:No}
-% \begin{syntax}
-% \cs{__kernel_ior_open:Nn} \meta{stream} \Arg{file name}
-% \end{syntax}
-% This function has identical syntax to the public version. However,
-% is does not take precautions against active characters in the
-% \meta{file name}, and it does not attempt to add a \meta{path} to
-% the \meta{file name}: it is therefore intended to be used by
-% higher-level
-% functions which have already fully expanded the \meta{file name} and which
-% need to perform multiple open or close operations. See for example the
-% implementation of \cs{file_get_full_name:nN},
-% \end{function}
-%
-% \begin{function}{\__kernel_iow_with:Nnn}
-% \begin{syntax}
-% \cs{__kernel_iow_with:Nnn} \meta{integer} \Arg{value} \Arg{code}
-% \end{syntax}
-% If the \meta{integer} is equal to the \meta{value} then this
-% function simply runs the \meta{code}. Otherwise it saves the
-% current value of the \meta{integer}, sets it to the \meta{value},
-% runs the \meta{code}, and restores the \meta{integer} to its former
-% value. This is used to ensure that the \tn{newlinechar} is~$10$
-% when writing to a stream, which lets \cs{iow_newline:} work, and
-% that \tn{errorcontextlines} is $-1$ when displaying a message.
-% \end{function}
-%
-% \begin{variable}{\__kernel_kern:n}
-% \begin{syntax}
-% \cs{__kernel_kern:n} \Arg{length}
-% \end{syntax}
-% Inserts a kern of the specified \meta{length}, a dimension expression.
-% \end{variable}
-%
-% \begin{function}{\__kernel_msg_show_eval:Nn, \__kernel_msg_log_eval:Nn}
-% \begin{syntax}
-% \cs{__kernel_msg_show_eval:Nn} \meta{function} \Arg{expression}
-% \end{syntax}
-% Shows or logs the \meta{expression} (turned into a string), an equal
-% sign, and the result of applying the \meta{function} to the
-% \Arg{expression} (with \texttt{f}-expansion). For instance, if the
-% \meta{function} is \cs{int_eval:n} and the \meta{expression} is
-% |1+2| then this logs |> 1+2=3.|
-% \end{function}
-%
-% \begin{variable}{\g__kernel_prg_map_int}
-% This integer is used by non-expandable mapping functions to track
-% the level of nesting in force. The functions
-% \cs[no-index]{\meta{type}_map_1:w},
-% \cs[no-index]{\meta{type}_map_2:w}, \emph{etc.}, labelled by
-% \cs{g__kernel_prg_map_int}
-% hold functions to be mapped over various list datatypes in inline
-% and variable mappings.
-% \end{variable}
-%
-% \begin{function}{\__kernel_quark_new_test:N}
-% \begin{syntax}
-% \cs{__kernel_quark_new_test:N} \cs[no-index]{\meta{name}:\meta{arg spec}}
-% \end{syntax}
-% Defines a quark-test function \cs[no-index]{\meta{name}:\meta{arg spec}}
-% which tests if its argument is \cs[no-index]{q__\meta{namespace}_recursion_tail},
-% then acts accordingly, as described below for each possible
-% \meta{arg spec}.
-%
-% The \meta{namespace} is determined as the first (nonempty)
-% |_|-delimited word in \meta{name} and is used internally
-% in the definition of auxiliaries. The function
-% \cs{__kernel_quark_new_test:N} does \emph{not} define
-% the \cs[no-index]{q__\meta{namespace}_recursion_tail} and
-% \cs[no-index]{q__\meta{namespace}_recursion_stop} quarks.
-% They should be manually defined with \cs{quark_new:N}.
-%
-% There are $6$ different types of quark-test functions. Which one is
-% defined depends on the \meta{arg spec}, which \emph{must} be one of
-% the options listed now. Four of them are modeled after
-% \cs[no-index]{quark_if_recursion_tail:(N|n)} and
-% \cs[no-index]{quark_if_recursion_tail_do:(N|n)n}.
-% \begin{description}
-% \def\makelabel#1{\texttt{#1}}
-% \item[n] defines \cs[no-index]{\meta{name}:n} such that it
-% checks if |#1| contains only \cs[no-index]{q__\meta{namespace}_recursion_tail}, and
-% if so consumes all tokens up to \cs[no-index]{q__\meta{namespace}_recursion_stop}
-% (\emph{c.f.}~\cs{quark_if_recursion_tail_stop:n}).
-% \item[nn] defines \cs[no-index]{\meta{name}:nn} such that it
-% checks if |#1| contains only \cs[no-index]{q__\meta{namespace}_recursion_tail}, and
-% if so consumes all tokens up to \cs[no-index]{q__\meta{namespace}_recursion_stop},
-% then executes the code |#2| after that
-% (\emph{c.f.}~\cs{quark_if_recursion_tail_stop_do:nn}).
-% \item[N] defines \cs[no-index]{\meta{name}:N} such that it
-% checks if |#1| is \cs[no-index]{q__\meta{namespace}_recursion_tail}, and if so consumes
-% all tokens up to \cs[no-index]{q__\meta{namespace}_recursion_stop}
-% (\emph{c.f.}~\cs{quark_if_recursion_tail_stop:N}).
-% \item[Nn] defines \cs[no-index]{\meta{name}:Nn} such that it
-% checks if |#1| is \cs[no-index]{q__\meta{namespace}_recursion_tail}, and if so consumes
-% all tokens up to \cs[no-index]{q__\meta{namespace}_recursion_stop}, then executes
-% the code |#2| after that
-% (\emph{c.f.}~\cs{quark_if_recursion_tail_stop_do:Nn}).
-% \end{description}
-% The last two are modeled after
-% \cs[no-index]{quark_if_recursion_tail_break:(n|N)N}, and in those
-% cases the quark \cs[no-index]{q__\meta{namespace}_recursion_stop} is
-% not used (and thus needs not be defined).
-% \begin{description}
-% \def\makelabel#1{\texttt{#1}}
-% \item[nN] defines \cs[no-index]{\meta{name}:nN} such that it
-% checks if |#1| contains only \cs[no-index]{q__\meta{namespace}_recursion_tail}, and
-% if so uses the \cs[no-index]{\meta{type}_map_break:} function |#2|.
-% \item[NN] defines \cs[no-index]{\meta{name}:NN} such that it
-% checks if |#1| is \cs[no-index]{q__\meta{namespace}_recursion_tail}, and if so uses
-% the \cs[no-index]{\meta{type}_map_break:} function |#2|.
-% \end{description}
-% Any other signature, as well as a function without signature
-% are errors, and in such case the definition is aborted.
-% \end{function}
-%
-% \begin{function}{\__kernel_quark_new_conditional:Nn}
-% \begin{syntax}
-% \cs{__kernel_quark_new_conditional:Nn} \cs[no-index]{__\meta{namespace}_quark_if_\meta{name}:\meta{arg spec}} \Arg{conditions}
-% \end{syntax}
-% Defines a collection of quark conditionals that test if their
-% argument is the quark \cs[no-index]{q__\meta{namespace}_\meta{name}}
-% and perform suitable actions. The \meta{conditions} are a
-% comma-separated list of one or more of |p|, |T|, |F|, and |TF|, and
-% one conditional is defined for each \meta{condition} in the list, as
-% described for \cs{prg_new_conditional:Npnn}. The conditionals are
-% defined using \cs{prg_new_conditional:Npnn}, so that their name is
-% obtained by adding |p|, |T|, |F|, or |TF| to the base name
-% \cs[no-index]{__\meta{namespace}_quark_if_\meta{name}:\meta{arg spec}}.
-%
-% The first argument of \cs{__kernel_quark_new_conditional:Nn} must
-% contain |_quark_if_| and |:|, as these markers are used to determine
-% the \meta{name} of the quark
-% \cs[no-index]{q__\meta{namespace}_\meta{name}} to be tested. This
-% quark should be manually defined with \cs{quark_new:N}, as
-% \cs{__kernel_quark_new_conditional:Nn} does \emph{not} define it.
-%
-% The function \cs{__kernel_quark_new_conditional:Nn} can define $2$
-% different types of quark conditionals. Which one is defined depends
-% on the \meta{arg spec}, which \emph{must} be one of the following
-% options, modeled after \cs[index=quark_if_nil:NTF]{quark_if_nil:(N|n)(TF)}.
-% \begin{description}
-% \def\makelabel#1{\texttt{#1}}
-% \item[n] defines \cs[no-index]{__\meta{namespace}_quark_if_\meta{name}:n(TF)} such that it
-% checks if |#1| contains only \cs[no-index]{q__\meta{namespace}_\meta{name}}, and
-% executes the proper conditional branch.
-% \item[N] defines \cs[no-index]{__\meta{namespace}_quark_if_\meta{name}:N(TF)} such that it
-% checks if |#1| is \cs[no-index]{q__\meta{namespace}_\meta{name}}, and
-% executes the proper conditional branch.
-% \end{description}
-% Any other signature, as well as a function without signature
-% are errors, and in such case the definition is aborted.
-% \end{function}
-%
-% \begin{function}{\__kernel_sys_everyjob:}
-% \begin{syntax}
-% \cs{__kernel_sys_everyjob:}
-% \end{syntax}
-% Inserts the internal token list required at the start of every run (job).
-% \end{function}
-%
-% \begin{variable}{\c__kernel_randint_max_int}
-% Maximal allowed argument to \cs{__kernel_randint:n}. Equal to
-% $2^{17}-1$.
-% \end{variable}
-%
-% \begin{function}{\__kernel_randint:n}
-% \begin{syntax}
-% \cs{__kernel_randint:n} \Arg{max}
-% \end{syntax}
-% Used in an integer expression this gives a pseudo-random number
-% between $1$ and $\meta{max}$ included. One must have
-% $\meta{max}\leq 2^{17}-1$. The \meta{max} must be suitable for
-% \cs{int_value:w} (and any \cs{int_eval:w} must be terminated by
-% \cs{scan_stop:} or equivalent).
-% \end{function}
-%
-% \begin{function}{\__kernel_randint:nn}
-% \begin{syntax}
-% \cs{__kernel_randint:nn} \Arg{min} \Arg{max}
-% \end{syntax}
-% Used in an integer expression this gives a pseudo-random number
-% between $\meta{min}$ and $\meta{max}$ included. The \meta{min} and
-% \meta{max} must be suitable for \cs{int_value:w} (and any
-% \cs{int_eval:w} must be terminated by \cs{scan_stop:} or
-% equivalent). For small ranges
-% $R=\meta{max}-\meta{min}+1\leq 2^{17}-1$,
-% $\meta{min} - 1 + \cs{__kernel_randint:n} |{|R|}|$ is faster.
-% \end{function}
-%
-% \begin{function}{\__kernel_register_show:N, \__kernel_register_show:c}
-% \begin{syntax}
-% \cs{__kernel_register_show:N} \meta{register}
-% \end{syntax}
-% Used to show the contents of a \TeX{} register at the terminal, formatted
-% such that internal parts of the mechanism are not visible.
-% \end{function}
-%
-% \begin{function}
-% {\__kernel_register_log:N, \__kernel_register_log:c}
-% \begin{syntax}
-% \cs{__kernel_register_log:N} \meta{register}
-% \end{syntax}
-% Used to write the contents of a \TeX{} register to the log file in a
-% form similar to \cs{__kernel_register_show:N}.
-% \end{function}
-%
-% \begin{function}[EXP]{\__kernel_str_to_other:n}
-% \begin{syntax}
-% \cs{__kernel_str_to_other:n} \Arg{token list}
-% \end{syntax}
-% Converts the \meta{token list} to a \meta{other string}, where
-% spaces have category code \enquote{other}. This function can be
-% \texttt{f}-expanded without fear of losing a leading space, since
-% spaces do not have category code $10$ in its result. It takes a
-% time quadratic in the character count of the string.
-% \end{function}
-%
-% \begin{function}[rEXP]{\__kernel_str_to_other_fast:n}
-% \begin{syntax}
-% \cs{__kernel_str_to_other_fast:n} \Arg{token list}
-% \end{syntax}
-% Same behaviour \cs{__kernel_str_to_other:n} but only restricted-expandable.
-% It takes a time linear in the character count of the string.
-% \end{function}
-%
-% \begin{function}[EXP]{\__kernel_tl_to_str:w}
-% \begin{syntax}
-% \cs{__kernel_tl_to_str:w} \meta{expandable tokens} \Arg{tokens}
-% \end{syntax}
-% Carries out expansion on the \meta{expandable tokens} before conversion of
-% the \meta{tokens} to a string as describe for \cs{tl_to_str:n}. Typically,
-% the \meta{expandable tokens} will alter the nature of the \meta{tokens},
-% \emph{i.e.}~allow it to be generated in some way. This function requires
-% only a single expansion.
-% \end{function}
-%
-% \begin{function}{\__kernel_tl_set:Nx, \__kernel_tl_gset:Nx}
-% \begin{syntax}
-% \cs{__kernel_tl_set:Nx} \meta{tl~var} \Arg{tokens}
-% \end{syntax}
-% Fully expands \meta{tokens} and assigns the result to \meta{tl~var}.
-% \meta{tokens} must be given in braces and there must be no token between
-% \meta{tl~var} and \meta{tokens}.
-% \end{function}
-%
-% \begin{function}[EXP]{\__kernel_codepoint_data:nn}
-% \begin{syntax}
-% \cs{__kernel_codepoint_data:nn} \Arg{type} \Arg{codepoint}
-% \end{syntax}
-% Expands to the appropriate value for the \meta{type} of data
-% requested for a \meta{codepoint}. The current list of \meta{types} and
-% results are
-% \begin{description}
-% \item[\texttt{lowercase}] The \emph{single} codepoint specified by
-% \texttt{UnicodeData.txt} for lowercase mapping of the codepoint:
-% will be equal to the input \meta{codepoint} if there is no mapping
-% specified in \texttt{UnicodeData.txt}
-% \item[\texttt{uppercase}] The \emph{single} codepoint specified by
-% \texttt{UnicodeData.txt} for uppercase mapping of the codepoint:
-% will be equal to the input \meta{codepoint} if there is no mapping
-% specified in \texttt{UnicodeData.txt}
-% \end{description}
-% \end{function}
-%
-% \begin{function}[EXP]{\__kernel_codepoint_case:nn}
-% \begin{syntax}
-% \cs{__kernel_codepoint_case:nn} \Arg{mapping} \Arg{codepoint}
-% \end{syntax}
-% Expands to a list of three balanced text, of which at least the first
-% will contain a codepoint. This list of up to three codepoints specifies
-% the full case mapping for the input \meta{codepoint}. The \meta{mapping}
-% should be one of
-% \begin{itemize}
-% \item \texttt{casefold}
-% \item \texttt{lowercase}
-% \item \texttt{titlecase}
-% \item \texttt{uppercase}
-% \end{itemize}
-% \end{function}
-%
-% \subsection{Kernel backend functions}
-%
-% These functions are required to pass information to the backend. The nature
-% of these means that they are defined only when the relevant backend is in
-% use.
-%
-% \begin{function}
-% {
-% \__kernel_backend_literal:n,
-% \__kernel_backend_literal:e,
-% \__kernel_backend_literal:e
-% }
-% \begin{syntax}
-% \cs{__kernel_backend_literal:n} \Arg{content}
-% \end{syntax}
-% Adds the \meta{content} literally to the current vertical list as a
-% whatsit. The nature of the \meta{content} will depend on the backend in
-% use.
-% \end{function}
-%
-% \begin{function}
-% {
-% \__kernel_backend_literal_postscript:n,
-% \__kernel_backend_literal_postscript:e
-% }
-% \begin{syntax}
-% \cs{__kernel_backend_literal_postscript:n} \Arg{PostScript}
-% \end{syntax}
-% Adds the \meta{PostScript} literally to the current vertical list as a
-% whatsit. No positioning is applied.
-% \end{function}
-%
-% \begin{function}
-% {
-% \__kernel_backend_literal_pdf:n,
-% \__kernel_backend_literal_pdf:e
-% }
-% \begin{syntax}
-% \cs{__kernel_backend_literal_pdf:n} \Arg{PDF instructions}
-% \end{syntax}
-% Adds the \meta{PDF instructions} literally to the current vertical list as
-% a whatsit. No positioning is applied.
-% \end{function}
-%
-% \begin{function}
-% {
-% \__kernel_backend_literal_svg:n,
-% \__kernel_backend_literal_svg:e
-% }
-% \begin{syntax}
-% \cs{__kernel_backend_literal_svg:n} \Arg{SVG instructions}
-% \end{syntax}
-% Adds the \meta{SVG instructions} literally to the current vertical list as
-% a whatsit. No positioning is applied.
-% \end{function}
-%
-% \begin{function}
-% {
-% \__kernel_backend_postscript:n,
-% \__kernel_backend_postscript:e
-% }
-% \begin{syntax}
-% \cs{__kernel_backend_postscript:n} \Arg{PostScript}
-% \end{syntax}
-% Adds the \meta{PostScript} to the current vertical list as a
-% whatsit. The PostScript reference point is adjusted to match the
-% current position. The PostScript is inserted inside a |SDict begin|/|end|
-% pair.
-% \end{function}
-%
-% \begin{function}{\__kernel_backend_align_begin:, \__kernel_backend_align_end:}
-% \begin{syntax}
-% \cs{__kernel_backend_align_begin:}
-% \meta{PostScript literals}
-% \cs{__kernel_backend_align_end:}
-% \end{syntax}
-% Arranges to align the PostScript and DVI current positions and scales.
-% \end{function}
-%
-% \begin{function}{\__kernel_backend_scope_begin:, \__kernel_backend_scope_end:}
-% \begin{syntax}
-% \cs{__kernel_backend_scope_begin:}
-% \meta{content}
-% \cs{__kernel_backend_scope_end:}
-% \end{syntax}
-% Creates a scope for instructions at the backend level.
-% \end{function}
-%
-% \begin{function}
-% {
-% \__kernel_backend_matrix:n,
-% \__kernel_backend_matrix:e
-% }
-% \begin{syntax}
-% \cs{__kernel_backend_matrix:n} \Arg{matrix}
-% \end{syntax}
-% Applies the \meta{matrix} to the current transformation matrix.
-% \end{function}
-%
-% \begin{function}{\g__kernel_backend_header_bool}
-% Specifies whether to write headers for the backend.
-% \end{function}
-%
-% \begin{function}{\l__kernel_color_stack_int}
-% The color stack used in \pdfTeX{} and \LuaTeX{} for the main color.
-% \end{function}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3keys.dtx b/macros/latex/contrib/l3kernel/l3keys.dtx
deleted file mode 100644
index 5ea436176f..0000000000
--- a/macros/latex/contrib/l3kernel/l3keys.dtx
+++ /dev/null
@@ -1,3649 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3keys.dtx
-%
-% Copyright (C) 2006-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3keys} module\\ Key--value interfaces^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% The key--value method is a popular system for creating large numbers
-% of settings for controlling function or package behaviour. The
-% system normally results in input of the form
-% \begin{verbatim}
-% \MyModuleSetup{
-% key-one = value one,
-% key-two = value two
-% }
-% \end{verbatim}
-% or
-% \begin{verbatim}
-% \MyModuleMacro[
-% key-one = value one,
-% key-two = value two
-% ]{argument}
-% \end{verbatim}
-% for the user.
-%
-% The high level functions here are intended as a method to create
-% key--value controls. Keys are themselves created using a key--value
-% interface, minimising the number of functions and arguments
-% required. Each key is created by setting one or more \emph{properties}
-% of the key:
-% \begin{verbatim}
-% \keys_define:nn { mymodule }
-% {
-% key-one .code:n = code including parameter #1,
-% key-two .tl_set:N = \l_mymodule_store_tl
-% }
-% \end{verbatim}
-% These values can then be set as with other key--value approaches:
-% \begin{verbatim}
-% \keys_set:nn { mymodule }
-% {
-% key-one = value one,
-% key-two = value two
-% }
-% \end{verbatim}
-% As illustrated, keys are created inside a \meta{module}: a set of related
-% keys, typically those for a single module/\LaTeXe{} package. See
-% Section~\ref{sec:l3keys:subdivision} for suggestions on how to divide
-% large numbers of keys for a single module.
-%
-% At a document level, \cs{keys_set:nn} is used within a
-% document function, for example
-% \begin{verbatim}
-% \DeclareDocumentCommand \MyModuleSetup { m }
-% { \keys_set:nn { mymodule } { #1 } }
-% \DeclareDocumentCommand \MyModuleMacro { o m }
-% {
-% \group_begin:
-% \keys_set:nn { mymodule } { #1 }
-% % Main code for \MyModuleMacro
-% \group_end:
-% }
-% \end{verbatim}
-%
-% Key names may contain any tokens, as they are handled internally
-% using \cs{tl_to_str:n}. As discussed in
-% section~\ref{sec:l3keys:subdivision}, it is suggested that the character
-% |/| is reserved for sub-division of keys into different subsets.
-% Functions and variables are \emph{not} expanded when creating
-% key names, and so
-% \begin{verbatim}
-% \tl_set:Nn \l_mymodule_tmp_tl { key }
-% \keys_define:nn { mymodule }
-% {
-% \l_mymodule_tmp_tl .code:n = code
-% }
-% \end{verbatim}
-% creates a key called |\l_mymodule_tmp_tl|, and not one called
-% \texttt{key}.
-%
-% \section{Creating keys}
-%
-% \begin{function}[updated = 2017-11-14]
-% {\keys_define:nn, \keys_define:ne}
-% \begin{syntax}
-% \cs{keys_define:nn} \Arg{module} \Arg{keyval list}
-% \end{syntax}
-% Parses the \meta{keyval list} and defines the keys listed there for
-% \meta{module}. The \meta{module} name is treated as a string.
-% In practice the
-% \meta{module} should be chosen to be unique to the module in question
-% (unless deliberately adding keys to an existing module).
-%
-% The \meta{keyval list} should consist of one or more key names along
-% with an associated key \emph{property}. The properties of a key
-% determine how it acts. The individual properties are described
-% in the following text; a typical use of \cs{keys_define:nn} might
-% read
-% \begin{verbatim}
-% \keys_define:nn { mymodule }
-% {
-% keyname .code:n = Some~code~using~#1,
-% keyname .value_required:n = true
-% }
-% \end{verbatim}
-% where the properties of the key begin from the |.| after the key
-% name.
-% \end{function}
-%
-% The various properties available take either no arguments at
-% all, or require one or more arguments. This is indicated in the
-% name of the property using an argument specification. In the following
-% discussion, each property is illustrated attached to an
-% arbitrary \meta{key}, which when used may be supplied with a
-% \meta{value}. All key \emph{definitions} are local.
-%
-% Key properties are applied in the reading order and so the ordering
-% is significant. Key properties which define \enquote{actions}, such
-% as |.code:n|, |.tl_set:N|, \emph{etc.}, override one another.
-% Some other properties are mutually exclusive, notably |.value_required:n|
-% and |.value_forbidden:n|, and so they replace one another. However,
-% properties covering non-exclusive behaviours may be given in any order. Thus
-% for example the following definitions are equivalent.
-% \begin{verbatim}
-% \keys_define:nn { mymodule }
-% {
-% keyname .code:n = Some~code~using~#1,
-% keyname .value_required:n = true
-% }
-% \keys_define:nn { mymodule }
-% {
-% keyname .value_required:n = true,
-% keyname .code:n = Some~code~using~#1
-% }
-% \end{verbatim}
-% Note that all key properties define the key within the current \TeX{} group,
-% with an exception that the special |.undefine:| property \emph{undefines} the
-% key within the current \TeX{} group.
-%
-% \begin{function}[updated = 2013-07-08]
-% {.bool_set:N, .bool_set:c, .bool_gset:N, .bool_gset:c}
-% \begin{syntax}
-% \meta{key} .bool_set:N = \meta{boolean variable}
-% \end{syntax}
-% Defines \meta{key} to set \meta{boolean variable} to \meta{value} (which
-% must be either \enquote{\texttt{true}} or \enquote{\texttt{false}}). If the variable
-% does not exist, it will be created globally at the point that
-% the key is set up.
-% \end{function}
-%
-% \begin{function}[added = 2011-08-28, updated = 2013-07-08]
-% {
-% .bool_set_inverse:N, .bool_set_inverse:c,
-% .bool_gset_inverse:N, .bool_gset_inverse:c
-% }
-% \begin{syntax}
-% \meta{key} .bool_set_inverse:N = \meta{boolean variable}
-% \end{syntax}
-% Defines \meta{key} to set \meta{boolean variable} to the logical
-% inverse of \meta{value} (which must be either \enquote{\texttt{true}} or
-% \enquote{\texttt{false}}).
-% If the \meta{boolean variable} does not exist, it will be created globally
-% at the point that the key is set up.
-% \end{function}
-%
-% \begin{function}{.choice:}
-% \begin{syntax}
-% \meta{key} .choice:
-% \end{syntax}
-% Sets \meta{key} to act as a choice key. Each valid choice
-% for \meta{key} must then be created, as discussed in
-% section~\ref{sec:l3keys:choice}.
-% \end{function}
-%
-% \begin{function}[added = 2011-08-21, updated = 2013-07-10]
-% {.choices:nn, .choices:Vn, .choices:en, .choices:on}
-% \begin{syntax}
-% \meta{key} .choices:nn = \Arg{choices} \Arg{code}
-% \end{syntax}
-% Sets \meta{key} to act as a choice key, and defines a series \meta{choices}
-% which are implemented using the \meta{code}. Inside \meta{code},
-% \cs{l_keys_choice_tl} will be the name of the choice made, and
-% \cs{l_keys_choice_int} will be the position of the choice in the list
-% of \meta{choices} (indexed from~$1$).
-% Choices are discussed in detail in section~\ref{sec:l3keys:choice}.
-% \end{function}
-%
-% \begin{function}[added = 2011-09-11]
-% {.clist_set:N, .clist_set:c, .clist_gset:N, .clist_gset:c}
-% \begin{syntax}
-% \meta{key} .clist_set:N = \meta{comma list variable}
-% \end{syntax}
-% Defines \meta{key} to set \meta{comma list variable} to \meta{value}.
-% Spaces around commas and empty items will be stripped.
-% If the variable does not exist, it
-% is created globally at the point that the key is set up.
-% \end{function}
-%
-% \begin{function}[updated = 2013-07-10]{.code:n}
-% \begin{syntax}
-% \meta{key} .code:n = \Arg{code}
-% \end{syntax}
-% Stores the \meta{code} for execution when \meta{key} is used.
-% The \meta{code} can include one parameter (|#1|), which will be the
-% \meta{value} given for the \meta{key}.
-% \end{function}
-%
-% \begin{function}[added = 2020-01-11]
-% {
-% .cs_set:Np, .cs_set:cp,
-% .cs_set_protected:Np, .cs_set_protected:cp,
-% .cs_gset:Np, .cs_gset:cp,
-% .cs_gset_protected:Np, .cs_gset_protected:cp,
-% }
-% \begin{syntax}
-% \meta{key} .cs_set:Np = \meta{control sequence} \meta{arg.~spec.}
-% \end{syntax}
-% Defines \meta{key} to set \meta{control sequence} to have \meta{arg.~spec.}
-% and replacement text \meta{value}.
-% \end{function}
-%
-% \begin{function}[updated = 2013-07-09]
-% {.default:n, .default:V, .default:e, .default:o}
-% \begin{syntax}
-% \meta{key} .default:n = \Arg{default}
-% \end{syntax}
-% Creates a \meta{default} value for \meta{key}, which is used if no
-% value is given. This will be used if only the key name is given,
-% but not if a blank \meta{value} is given:
-% \begin{verbatim}
-% \keys_define:nn { mymodule }
-% {
-% key .code:n = Hello~#1,
-% key .default:n = World
-% }
-% \keys_set:nn { mymodule }
-% {
-% key = Fred, % Prints 'Hello Fred'
-% key, % Prints 'Hello World'
-% key = , % Prints 'Hello '
-% }
-% \end{verbatim}
-% The default does not affect keys where values are required or
-% forbidden. Thus a required value cannot be supplied by a default
-% value, and giving a default value for a key which cannot take a value
-% does not trigger an error.
-%
-% When no value is given for a key as part of \cs{keys_set:nn}, the
-% \texttt{.default:n} value provides the value before key properties are
-% considered. The only exception is when the \texttt{.value_required:n}
-% property is active: a required value cannot be supplied by the default,
-% and must be explicitly given as part of \cs{keys_set:nn}.
-% \end{function}
-%
-% \begin{function}[updated = 2020-01-17]
-% {.dim_set:N, .dim_set:c, .dim_gset:N, .dim_gset:c}
-% \begin{syntax}
-% \meta{key} .dim_set:N = \meta{dimension}
-% \end{syntax}
-% Defines \meta{key} to set \meta{dimension} to \meta{value} (which
-% must a dimension expression). If the variable does not exist, it
-% is created globally at the point that the key is set up. The key will
-% require a value at point-of-use unless a default is set.
-% \end{function}
-%
-% \begin{function}[updated = 2020-01-17]
-% {.fp_set:N, .fp_set:c, .fp_gset:N, .fp_gset:c}
-% \begin{syntax}
-% \meta{key} .fp_set:N = \meta{floating point}
-% \end{syntax}
-% Defines \meta{key} to set \meta{floating point} to \meta{value}
-% (which must a floating point expression). If the variable does not exist,
-% it is created globally at the point that the key is set up. The key will
-% require a value at point-of-use unless a default is set.
-% \end{function}
-%
-% \begin{function}[added = 2013-07-14]
-% {.groups:n}
-% \begin{syntax}
-% \meta{key} .groups:n = \Arg{groups}
-% \end{syntax}
-% Defines \meta{key} as belonging to the \meta{groups} (a
-% comma-separated list). Groups
-% provide a \enquote{secondary axis} for selectively setting keys, and are
-% described in Section~\ref{sec:l3keys:selective}.
-% \begin{texnote}
-% The \meta{groups} argument is turned into a string then
-% interpreted as a comma-separated list, so group names cannot
-% contain commas nor start or end with a space character.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[added = 2016-11-22]{.inherit:n}
-% \begin{syntax}
-% \meta{key} .inherit:n = \Arg{parents}
-% \end{syntax}
-% Specifies that the \meta{key} path should inherit the keys listed
-% as any of the \meta{parents} (a comma list), which can be a module
-% or a sub-division thereof. For example, after setting
-% \begin{verbatim}
-% \keys_define:nn { foo } { test .code:n = \tl_show:n {#1} }
-% \keys_define:nn { } { bar .inherit:n = foo }
-% \end{verbatim}
-% setting
-% \begin{verbatim}
-% \keys_set:nn { bar } { test = a }
-% \end{verbatim}
-% will be equivalent to
-% \begin{verbatim}
-% \keys_set:nn { foo } { test = a }
-% \end{verbatim}
-% Inheritance applies at point of use, not at definition, thus keys may
-% be added to the \meta{parent} after the use of \texttt{.inherit:n}
-% and will be active.
-% If more than one \meta{parent} is specified, the presence of the
-% \meta{key} will be tested for each in turn, with the first successful
-% hit taking priority.
-% \end{function}
-%
-% \begin{function}[updated = 2013-07-09]
-% {.initial:n, .initial:V, .initial:e, .initial:o}
-% \begin{syntax}
-% \meta{key} .initial:n = \Arg{value}
-% \end{syntax}
-% Initialises the \meta{key} with the \meta{value}, equivalent to
-% \begin{quote}
-% \cs{keys_set:nn} \Arg{module} \{ \meta{key} = \meta{value} \}
-% \end{quote}
-% \end{function}
-%
-% \begin{function}[updated = 2020-01-17]
-% {.int_set:N, .int_set:c, .int_gset:N, .int_gset:c}
-% \begin{syntax}
-% \meta{key} .int_set:N = \meta{integer}
-% \end{syntax}
-% Defines \meta{key} to set \meta{integer} to \meta{value} (which
-% must be an integer expression). If the variable does not exist, it
-% is created globally at the point that the key is set up. The key will
-% require a value at point-of-use unless a default is set.
-% \end{function}
-%
-% \begin{function}[updated = 2022-01-15]
-% {
-% .legacy_if_set:n, .legacy_if_gset:n,
-% .legacy_if_set_inverse:n, .legacy_if_gset_inverse:n
-% }
-% \begin{syntax}
-% \meta{key} .legacy_if_set:n = \meta{switch}
-% \end{syntax}
-% Defines \meta{key} to set legacy \cs[no-index]{if\meta{switch}} to \meta{value}
-% (which must be either \enquote{\texttt{true}} or \enquote{\texttt{false}}).
-% The \meta{switch} is the name of the switch \emph{without the leading
-% \texttt{if}}.
-%
-% The \texttt{inverse} versions will set the \meta{switch} to the logical
-% opposite of the \meta{value}.
-% \end{function}
-%
-% \begin{function}[updated = 2013-07-10]{.meta:n}
-% \begin{syntax}
-% \meta{key} .meta:n = \Arg{keyval list}
-% \end{syntax}
-% Makes \meta{key} a meta-key, which will set \meta{keyval list} in
-% one go. The \meta{keyval list} can refer as |#1| to the value given
-% at the time the \meta{key} is used (or, if no value is given, the
-% \meta{key}'s default value).
-% \end{function}
-%
-% \begin{function}[added = 2013-07-10]{.meta:nn}
-% \begin{syntax}
-% \meta{key} .meta:nn = \Arg{path} \Arg{keyval list}
-% \end{syntax}
-% Makes \meta{key} a meta-key, which will set \meta{keyval list} in
-% one go using the \meta{path} in place of the current one. The
-% \meta{keyval list} can refer as |#1| to the value given at the time
-% the \meta{key} is used (or, if no value is given, the \meta{key}'s
-% default value).
-% \end{function}
-%
-% \begin{function}[added = 2011-08-21]{.multichoice:}
-% \begin{syntax}
-% \meta{key} .multichoice:
-% \end{syntax}
-% Sets \meta{key} to act as a multiple choice key. Each valid choice
-% for \meta{key} must then be created, as discussed in
-% section~\ref{sec:l3keys:choice}.
-% \end{function}
-%
-% \begin{function}[added = 2011-08-21, updated = 2013-07-10]
-% {.multichoices:nn, .multichoices:Vn, .multichoices:en, .multichoices:on}
-% \begin{syntax}
-% \meta{key} .multichoices:nn \Arg{choices} \Arg{code}
-% \end{syntax}
-% Sets \meta{key} to act as a multiple choice key, and defines a series
-% \meta{choices}
-% which are implemented using the \meta{code}. Inside \meta{code},
-% \cs{l_keys_choice_tl} will be the name of the choice made, and
-% \cs{l_keys_choice_int} will be the position of the choice in the list
-% of \meta{choices} (indexed from~$1$).
-% Choices are discussed in detail in section~\ref{sec:l3keys:choice}.
-% \end{function}
-%
-% \begin{function}[added = 2019-05-05, updated = 2020-01-17]
-% {.muskip_set:N, .muskip_set:c, .muskip_gset:N, .muskip_gset:c}
-% \begin{syntax}
-% \meta{key} .muskip_set:N = \meta{muskip}
-% \end{syntax}
-% Defines \meta{key} to set \meta{muskip} to \meta{value} (which
-% must be a muskip expression). If the variable does not exist, it
-% is created globally at the point that the key is set up. The key will
-% require a value at point-of-use unless a default is set.
-% \end{function}
-%
-% \begin{function}[added = 2019-01-31]
-% {.prop_put:N, .prop_put:c, .prop_gput:N, .prop_gput:c}
-% \begin{syntax}
-% \meta{key} .prop_put:N = \meta{property list}
-% \end{syntax}
-% Defines \meta{key} to put the \meta{value} onto the \meta{property list}
-% stored under the \meta{key}.
-% If the variable does not exist, it
-% is created globally at the point that the key is set up.
-% \end{function}
-%
-% \begin{function}[updated = 2020-01-17]
-% {.skip_set:N, .skip_set:c, .skip_gset:N, .skip_gset:c}
-% \begin{syntax}
-% \meta{key} .skip_set:N = \meta{skip}
-% \end{syntax}
-% Defines \meta{key} to set \meta{skip} to \meta{value} (which
-% must be a skip expression). If the variable does not exist, it
-% is created globally at the point that the key is set up. The key will
-% require a value at point-of-use unless a default is set.
-% \end{function}
-%
-% \begin{function}[added = 2021-10-30]
-% {.str_set:N, .str_set:c, .str_gset:N, .str_gset:c}
-% \begin{syntax}
-% \meta{key} .str_set:N = \meta{string variable}
-% \end{syntax}
-% Defines \meta{key} to set \meta{string variable} to \meta{value}.
-% If the variable does not exist, it is created globally
-% at the point that the key is set up.
-% \end{function}
-%
-% \begin{function}[added = 2023-09-18]
-% {.str_set_e:N, .str_set_e:c, .str_gset_e:N, .str_gset_e:c}
-% \begin{syntax}
-% \meta{key} .str_set_e:N = \meta{string variable}
-% \end{syntax}
-% Defines \meta{key} to set \meta{string variable} to \meta{value},
-% which will be subjected to an \texttt{e}-type expansion
-% (\emph{i.e.}~using \cs{str_set:Ne}). If the variable does not exist,
-% it is created globally at the point that the key is set up.
-% \end{function}
-%
-% \begin{function}{.tl_set:N, .tl_set:c, .tl_gset:N, .tl_gset:c}
-% \begin{syntax}
-% \meta{key} .tl_set:N = \meta{token list variable}
-% \end{syntax}
-% Defines \meta{key} to set \meta{token list variable} to \meta{value}.
-% If the variable does not exist, it is created globally
-% at the point that the key is set up.
-% \end{function}
-%
-% \begin{function}[added = 2023-09-18]
-% {.tl_set_e:N, .tl_set_e:c, .tl_gset_e:N, .tl_gset_e:c}
-% \begin{syntax}
-% \meta{key} .tl_set_e:N = \meta{token list variable}
-% \end{syntax}
-% Defines \meta{key} to set \meta{token list variable} to \meta{value},
-% which will be subjected to an \texttt{e}-type expansion
-% (\emph{i.e.}~using \cs{tl_set:Ne}). If the variable does not exist,
-% it is created globally at the point that the key is set up.
-% \end{function}
-%
-% \begin{function}[added = 2015-07-14]{.undefine:}
-% \begin{syntax}
-% \meta{key} .undefine:
-% \end{syntax}
-% Removes the definition of the \meta{key} within the current \TeX{} group.
-% \end{function}
-%
-% \begin{function}[added = 2015-07-14]{.value_forbidden:n}
-% \begin{syntax}
-% \meta{key} .value_forbidden:n = \texttt{true\string|false}
-% \end{syntax}
-% Specifies that \meta{key} cannot receive a \meta{value} when used.
-% If a \meta{value} is given then an error will be issued. Setting
-% the property \enquote{\texttt{false}} cancels the restriction.
-% \end{function}
-%
-% \begin{function}[added = 2015-07-14]{.value_required:n}
-% \begin{syntax}
-% \meta{key} .value_required:n = \texttt{true\string|false}
-% \end{syntax}
-% Specifies that \meta{key} must receive a \meta{value} when used.
-% If a \meta{value} is not given then an error will be issued. Setting
-% the property \enquote{\texttt{false}} cancels the restriction.
-% \end{function}
-%
-% \section{Sub-dividing keys}
-% \label{sec:l3keys:subdivision}
-%
-% When creating large numbers of keys, it may be desirable to divide
-% them into several subsets for a given module. This can be achieved
-% either by adding a sub-division to the module name:
-% \begin{verbatim}
-% \keys_define:nn { mymodule / subset }
-% { key .code:n = code }
-% \end{verbatim}
-% or to the key name:
-% \begin{verbatim}
-% \keys_define:nn { mymodule }
-% { subset / key .code:n = code }
-% \end{verbatim}
-% As illustrated, the best choice of token for sub-dividing keys in
-% this way is |/|. This is because of the method that is
-% used to represent keys internally. Both of the above code fragments
-% set the same key, which has full name \texttt{mymodule/subset/key}.
-%
-% As illustrated in the next section, this subdivision is
-% particularly relevant to making multiple choices.
-%
-% \section{Choice and multiple choice keys}
-% \label{sec:l3keys:choice}
-%
-% The \pkg{l3keys} system supports two types of choice key, in which a series
-% of pre-defined input values are linked to varying implementations. Choice
-% keys are usually created so that the various values are mutually-exclusive:
-% only one can apply at any one time. \enquote{Multiple} choice keys are also
-% supported: these allow a selection of values to be chosen at the same time.
-%
-% Mutually-exclusive choices are created by setting the \texttt{.choice:}
-% property:
-% \begin{verbatim}
-% \keys_define:nn { mymodule }
-% { key .choice: }
-% \end{verbatim}
-% For keys which are set up as choices, the valid choices are generated
-% by creating sub-keys of the choice key. This can be carried out in
-% two ways.
-%
-% In many cases, choices execute similar code which is dependant only
-% on the name of the choice or the position of the choice in the
-% list of all possibilities. Here, the keys can share the same code, and can
-% be rapidly created using the \texttt{.choices:nn} property.
-% \begin{verbatim}
-% \keys_define:nn { mymodule }
-% {
-% key .choices:nn =
-% { choice-a, choice-b, choice-c }
-% {
-% You~gave~choice~'\tl_use:N \l_keys_choice_tl',~
-% which~is~in~position~\int_use:N \l_keys_choice_int \c_space_tl
-% in~the~list.
-% }
-% }
-% \end{verbatim}
-% The index \cs{l_keys_choice_int} in the list of choices starts at~$1$.
-%
-% \begin{variable}{\l_keys_choice_int, \l_keys_choice_tl}
-% Inside the code block for a choice generated using \texttt{.choices:nn},
-% the variables \cs{l_keys_choice_tl} and \cs{l_keys_choice_int} are
-% available to indicate the name of the current choice, and its position in
-% the comma list. The position is indexed from~$1$. Note that, as with
-% standard key code generated using \texttt{.code:n}, the value passed to
-% the key (i.e.~the choice name) is also available as |#1|.
-% \end{variable}
-%
-% On the other hand, it is sometimes useful to create choices which
-% use entirely different code from one another. This can be achieved
-% by setting the \texttt{.choice:} property of a key, then manually
-% defining sub-keys.
-% \begin{verbatim}
-% \keys_define:nn { mymodule }
-% {
-% key .choice:,
-% key / choice-a .code:n = code-a,
-% key / choice-b .code:n = code-b,
-% key / choice-c .code:n = code-c,
-% }
-% \end{verbatim}
-%
-% It is possible to mix the two methods, but manually-created choices
-% should \emph{not} use \cs{l_keys_choice_tl} or \cs{l_keys_choice_int}.
-% These variables do not have defined behaviour when used outside of
-% code created using \texttt{.choices:nn}
-% (\emph{i.e.}~anything might happen).
-%
-% It is possible to allow choice keys to take values which have not previously
-% been defined by adding code for the special \texttt{unknown} choice. The
-% general behavior of the \texttt{unknown} key is described in
-% Section~\ref{sec:l3keys:unknown}. A typical example in the case of a choice
-% would be to issue a custom error message:
-% \begin{verbatim}
-% \keys_define:nn { mymodule }
-% {
-% key .choice:,
-% key / choice-a .code:n = code-a,
-% key / choice-b .code:n = code-b,
-% key / choice-c .code:n = code-c,
-% key / unknown .code:n =
-% \msg_error:nneee { mymodule } { unknown-choice }
-% { key } % Name of choice key
-% { choice-a , choice-b , choice-c } % Valid choices
-% { \exp_not:n {#1} } % Invalid choice given
-% %
-% %
-% }
-% \end{verbatim}
-%
-% Multiple choices are created in a very similar manner to mutually-exclusive
-% choices, using the properties \texttt{.multichoice:} and
-% \texttt{.multichoices:nn}. As with mutually exclusive choices, multiple
-% choices are define as sub-keys. Thus both
-% \begin{verbatim}
-% \keys_define:nn { mymodule }
-% {
-% key .multichoices:nn =
-% { choice-a, choice-b, choice-c }
-% {
-% You~gave~choice~'\tl_use:N \l_keys_choice_tl',~
-% which~is~in~position~
-% \int_use:N \l_keys_choice_int \c_space_tl
-% in~the~list.
-% }
-% }
-% \end{verbatim}
-% and
-% \begin{verbatim}
-% \keys_define:nn { mymodule }
-% {
-% key .multichoice:,
-% key / choice-a .code:n = code-a,
-% key / choice-b .code:n = code-b,
-% key / choice-c .code:n = code-c,
-% }
-% \end{verbatim}
-% are valid.
-%
-% When a multiple choice key is set
-% \begin{verbatim}
-% \keys_set:nn { mymodule }
-% {
-% key = { a , b , c } % 'key' defined as a multiple choice
-% }
-% \end{verbatim}
-% each choice is applied in turn, equivalent to a \texttt{clist} mapping or
-% to applying each value individually:
-% \begin{verbatim}
-% \keys_set:nn { mymodule }
-% {
-% key = a ,
-% key = b ,
-% key = c ,
-% }
-% \end{verbatim}
-% Thus each separate choice will have passed to it the
-% \cs{l_keys_choice_tl} and \cs{l_keys_choice_int} in exactly
-% the same way as described for \texttt{.choices:nn}.
-%
-% \section{Key usage scope}
-%
-% Some keys will be used as settings which have a strictly limited scope
-% of usage. Some will be only available once, others will only be valid
-% until typesetting begins. To allow formats to support this in a structured
-% way, \pkg{l3keys} allows this information to be specified using the
-% \texttt{.usage:n} property.
-%
-% \begin{function}[added = 2022-01-10]{.usage:n}
-% \begin{syntax}
-% \meta{key} .usage:n = \meta{scope}
-% \end{syntax}
-% Defines the \meta{key} to have usage within the \meta{scope}, which
-% should be one of \texttt{general}, \texttt{preamble} or \texttt{load}.
-% \end{function}
-%
-% \begin{variable}[added = 2022-01-10]
-% {\l_keys_usage_load_prop, \l_keys_usage_preamble_prop}
-% \pkg{l3keys} itself does \emph{not} attempt to redefine keys based on the
-% usage scope. Rather, this information is made available with these
-% two property lists. These hold an entry for each module (prefix); the
-% value of each entry is a comma-separated list of the usage-restricted
-% key(s).
-% \end{variable}
-%
-% \section{Setting keys}
-%
-% \begin{function}[updated = 2017-11-14]
-% {
-% \keys_set:nn, \keys_set:nV, \keys_set:nv, \keys_set:ne,
-% \keys_set:no,
-% }
-% \begin{syntax}
-% \cs{keys_set:nn} \Arg{module} \Arg{keyval list}
-% \end{syntax}
-% Parses the \meta{keyval list}, and sets those keys which are defined
-% for \meta{module}. The behaviour on finding an unknown key can be set
-% by defining a special \texttt{unknown} key: this is illustrated
-% later.
-% \end{function}
-%
-% \begin{variable}[updated = 2020-02-08]
-% {\l_keys_path_str, \l_keys_key_str, \l_keys_value_tl}
-% For each key processed, information of the full \emph{path} of the
-% key, the \emph{name} of the key and the \emph{value} of the key is
-% available within two string and one token list variables.
-% These may be used within the code of the key.
-%
-% The \emph{path} of the key is a \enquote{full} description of the key,
-% and is unique for each key. It consists of the module and full key name,
-% thus for example
-% \begin{verbatim}
-% \keys_set:nn { mymodule } { key-a = some-value }
-% \end{verbatim}
-% has path \texttt{mymodule/key-a} while
-% \begin{verbatim}
-% \keys_set:nn { mymodule } { subset / key-a = some-value }
-% \end{verbatim}
-% has path \texttt{mymodule/subset/key-a}. This information is stored in
-% \cs{l_keys_path_str}.
-%
-% The \emph{name} of the key is the part of the path after the last
-% \texttt{/}, and thus is not unique. In the preceding examples, both keys
-% have name \texttt{key-a} despite having different paths. This information
-% is stored in \cs{l_keys_key_str}.
-%
-% The \emph{value} is everything after the \texttt{=}, which may be
-% empty if no value was given. This is stored in \cs{l_keys_value_tl}, and
-% is not processed in any way by \cs{keys_set:nn}.
-% \end{variable}
-%
-% \section{Handling of unknown keys}
-% \label{sec:l3keys:unknown}
-%
-% If a key has not previously been defined (is unknown), \cs{keys_set:nn}
-% looks for a special \texttt{unknown} key for the same module, and if this is
-% not defined raises an error indicating that the key name was unknown. This
-% mechanism can be used for example to issue custom error texts. The
-% \texttt{unknown} key also supports the \texttt{.default:n} property.
-% \begin{verbatim}
-% \keys_define:nn { mymodule }
-% {
-% unknown .code:n =
-% You~tried~to~set~key~'\l_keys_key_str'~to~'#1'. ,
-% unknown .default:V = \c_novalue_tl
-% }
-% \end{verbatim}
-%
-% \begin{function}[added = 2011-08-23, updated = 2019-01-29]
-% {
-% \keys_set_known:nn, \keys_set_known:nV,
-% \keys_set_known:nv, \keys_set_known:ne,
-% \keys_set_known:no,
-% \keys_set_known:nnN, \keys_set_known:nVN,
-% \keys_set_known:nvN, \keys_set_known:neN,
-% \keys_set_known:noN,
-% \keys_set_known:nnnN, \keys_set_known:nVnN,
-% \keys_set_known:nvnN, \keys_set_known:nenN,
-% \keys_set_known:nonN
-% }
-% \begin{syntax}
-% \cs{keys_set_known:nn} \Arg{module} \Arg{keyval list}
-% \cs{keys_set_known:nnN} \Arg{module} \Arg{keyval list} \meta{tl}
-% \cs{keys_set_known:nnnN} \Arg{module} \Arg{keyval list} \Arg{root} \meta{tl}
-% \end{syntax}
-% These functions set keys which are known for the \meta{module}, and
-% simply ignore other keys. The \cs{keys_set_known:nn} function parses the
-% \meta{keyval list}, and sets those keys which are defined for
-% \meta{module}. Any keys which are unknown are not processed further by
-% the parser. In addition, \cs{keys_set_known:nnN} stores the key--value
-% pairs in the \meta{tl} in comma-separated form (\emph{i.e.}~an edited
-% version of the \meta{keyval list}). When a \meta{root} is given
-% (\cs{keys_set_known:nnnN}), the key--value entries are returned
-% relative to this point in the key tree. When it is absent, only the
-% key name and value are provided. The correct list is returned by
-% nested calls.
-% \end{function}
-%
-% \section{Selective key setting}
-% \label{sec:l3keys:selective}
-%
-% In some cases it may be useful to be able to select only some keys for
-% setting, even though these keys have the same path. For example, with
-% a set of keys defined using
-% \begin{verbatim}
-% \keys_define:nn { mymodule }
-% {
-% key-one .code:n = { \my_func:n {#1} } ,
-% key-two .tl_set:N = \l_my_a_tl ,
-% key-three .tl_set:N = \l_my_b_tl ,
-% key-four .fp_set:N = \l_my_a_fp ,
-% }
-% \end{verbatim}
-% the use of \cs{keys_set:nn} attempts to set all four keys. However, in
-% some contexts it may only be sensible to set some keys, or to control the
-% order of setting. To do this, keys may be assigned to \emph{groups}:
-% arbitrary sets which are independent of the key tree. Thus modifying the
-% example to read
-% \begin{verbatim}
-% \keys_define:nn { mymodule }
-% {
-% key-one .code:n = { \my_func:n {#1} } ,
-% key-one .groups:n = { first } ,
-% key-two .tl_set:N = \l_my_a_tl ,
-% key-two .groups:n = { first } ,
-% key-three .tl_set:N = \l_my_b_tl ,
-% key-three .groups:n = { second } ,
-% key-four .fp_set:N = \l_my_a_fp ,
-% }
-% \end{verbatim}
-% assigns \texttt{key-one} and \texttt{key-two} to group \texttt{first},
-% \texttt{key-three} to group \texttt{second}, while \texttt{key-four} is
-% not assigned to a group.
-%
-% Selective key setting may be achieved either by selecting one or more
-% groups to be made \enquote{active}, or by marking one or more groups to
-% be ignored in key setting.
-%
-% \begin{function}[added = 2024-01-10]
-% {
-% \keys_set_exclude_groups:nnn, \keys_set_exclude_groups:nnV,
-% \keys_set_exclude_groups:nnv, \keys_set_exclude_groups:nno,
-% \keys_set_exclude_groups:nnnN, \keys_set_exclude_groups:nnVN,
-% \keys_set_exclude_groups:nnvN, \keys_set_exclude_groups:nnoN,
-% \keys_set_exclude_groups:nnnnN, \keys_set_exclude_groups:nnVnN,
-% \keys_set_exclude_groups:nnvnN, \keys_set_exclude_groups:nnonN,
-% }
-% \begin{syntax}
-% \cs{keys_set_exclude_groups:nnn} \Arg{module} \Arg{groups} \Arg{keyval list}
-% \cs{keys_set_exclude_groups:nnnN} \Arg{module} \Arg{groups} \Arg{keyval list} \meta{tl}
-% \cs{keys_set_exclude_groups:nnnnN} \Arg{module} \Arg{groups} \Arg{keyval list} \meta{root} \meta{tl}
-% \end{syntax}
-% Sets keys by excluding those in the specificied \meta{groups}.
-% The \meta{groups} are
-% given as a comma-separated list. Unknown keys are not assigned to any
-% group and are thus always set. The key--value pairs for each
-% key which is filtered out are stored in the \meta{tl} in a
-% comma-separated form (\emph{i.e.}~an edited version of the \meta{keyval
-% list}). The \cs{keys_set_exclude_groups:nnn} version skips this stage.
-%
-% Use of \cs{keys_set_exclude_groups:nnnN} can be nested, with the correct residual
-% \meta{keyval list} returned at each stage. In the version which takes
-% a \meta{root} argument, the key list is returned relative to that point
-% in the key tree. In the cases without a \meta{root} argument, only
-% the key names and values are returned.
-% \end{function}
-%
-% \begin{function}[added = 2013-07-14, updated = 2017-05-27]
-% {
-% \keys_set_groups:nnn, \keys_set_groups:nnV,
-% \keys_set_groups:nnv, \keys_set_groups:nno
-% }
-% \begin{syntax}
-% \cs{keys_set_groups:nnn} \Arg{module} \Arg{groups} \Arg{keyval list}
-% \end{syntax}
-% Activates key filtering in an \enquote{opt-in} sense: only keys assigned to
-% one or more of the \meta{groups} specified are set. The \meta{groups} are
-% given as a comma-separated list. Unknown keys are not assigned to any
-% group and are thus never set.
-% \end{function}
-%
-% \section{Digesting keys}
-%
-% \begin{function}[added = 2022-03-09]{\keys_precompile:nnN}
-% \begin{syntax}
-% \cs{keys_precompile:nnN} \Arg{module} \Arg{keyval list} \meta{tl}
-% \end{syntax}
-% Parses the \meta{keyval list} as for \cs{keys_set:nn}, placing the
-% resulting code for those which set variables or functions into the
-% \meta{tl}. Thus this function \enquote{precompiles} the keyval list into
-% a set of results which can be applied rapidly.
-% \end{function}
-%
-% \section{Utility functions for keys}
-%
-% \begin{function}[EXP, pTF, updated = 2022-01-10]
-% {\keys_if_exist:nn, \keys_if_exist:ne}
-% \begin{syntax}
-% \cs{keys_if_exist_p:nn} \Arg{module} \Arg{key} \\
-% \cs{keys_if_exist:nnTF} \Arg{module} \Arg{key} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the \meta{key} exists for \meta{module}, \emph{i.e.}~if any code
-% has been defined for \meta{key}.
-% \end{function}
-%
-% \begin{function}[added = 2011-08-21,EXP,pTF, updated = 2017-11-14]
-% {\keys_if_choice_exist:nnn}
-% \begin{syntax}
-% \cs{keys_if_choice_exist_p:nnn} \Arg{module} \Arg{key} \Arg{choice} \\
-% \cs{keys_if_choice_exist:nnnTF} \Arg{module} \Arg{key} \Arg{choice} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the \meta{choice} is defined for the \meta{key} within the
-% \meta{module}, \emph{i.e.}~if any code has been defined for
-% \meta{key}/\meta{choice}. The test is \texttt{false} if the \meta{key}
-% itself is not defined.
-% \end{function}
-%
-% \begin{function}[updated = 2015-08-09]{\keys_show:nn}
-% \begin{syntax}
-% \cs{keys_show:nn} \Arg{module} \Arg{key}
-% \end{syntax}
-% Displays in the terminal
-% the information associated to the \meta{key} for a \meta{module},
-% including the function which is used to actually implement it.
-% \end{function}
-%
-% \begin{function}[added = 2014-08-22, updated = 2015-08-09]{\keys_log:nn}
-% \begin{syntax}
-% \cs{keys_log:nn} \Arg{module} \Arg{key}
-% \end{syntax}
-% Writes in the log file the information associated to the \meta{key}
-% for a \meta{module}. See also \cs{keys_show:nn} which displays the
-% result in the terminal.
-% \end{function}
-%
-% \section{Low-level interface for parsing key--val lists}
-%
-% To re-cap from earlier, a key--value list is input of the form
-% \begin{verbatim}
-% KeyOne = ValueOne ,
-% KeyTwo = ValueTwo ,
-% KeyThree
-% \end{verbatim}
-% where each key--value pair is separated by a comma from the rest of
-% the list, and each key--value pair does not necessarily contain an
-% equals sign or a value! Processing this type of input correctly
-% requires a number of careful steps, to correctly account for
-% braces, spaces and the category codes of separators.
-%
-% While the functions described earlier are used as a high-level interface
-% for processing such input, in special circumstances you may wish to use
-% a lower-level approach.
-% The low-level parsing system converts a \meta{key--value list}
-% into \meta{keys} and associated \meta{values}. After the parsing phase
-% is completed, the resulting keys and values (or keys alone) are
-% available for further processing. This processing is not carried out by the
-% low-level parser itself, and so the parser requires the names of
-% two functions along with the key--value list. One function is
-% needed to process key--value pairs (it receives two arguments),
-% and a second function is required for keys given without any value
-% (it is called with a single argument).
-%
-% The parser does not double |#| tokens or expand any input. Active
-% tokens |=| and |,| appearing at the outer level of braces are converted
-% to category \enquote{other} (12) so that the parser does not \enquote{miss}
-% any due to category code changes. Spaces are removed from the ends
-% of the keys and values. Keys and values which are given in braces
-% have exactly one set removed (after space trimming), thus
-% \begin{verbatim}
-% key = {value here},
-% \end{verbatim}
-% and
-% \begin{verbatim}
-% key = value here,
-% \end{verbatim}
-% are treated identically.
-%
-% \begin{function}[rEXP, added=2020-12-19, updated = 2021-05-10]
-% {\keyval_parse:nnn, \keyval_parse:nnV, \keyval_parse:nnv}
-% \begin{syntax}
-% \cs{keyval_parse:nnn} \Arg{code_1} \Arg{code_2} \Arg{key--value list}
-% \end{syntax}
-% Parses the \meta{key--value list} into a series of \meta{keys} and
-% associated \meta{values}, or keys alone (if no \meta{value} was
-% given). \meta{code_1} receives each \meta{key} (with no \meta{value}) as a
-% trailing brace group, whereas \meta{code_2} is appended by two brace groups,
-% the \meta{key} and \meta{value}.
-% The order of the \meta{keys} in the \meta{key--value list}
-% is preserved. Thus
-% \begin{verbatim}
-% \keyval_parse:nnn
-% { \use_none:nn { code 1 } }
-% { \use_none:nnn { code 2 } }
-% { key1 = value1 , key2 = value2, key3 = , key4 }
-% \end{verbatim}
-% is converted into an input stream
-% \begin{verbatim}
-% \use_none:nnn { code 2 } { key1 } { value1 }
-% \use_none:nnn { code 2 } { key2 } { value2 }
-% \use_none:nnn { code 2 } { key3 } { }
-% \use_none:nn { code 1 } { key4 }
-% \end{verbatim}
-% Note that there is a difference between an empty value (an equals
-% sign followed by nothing) and a missing value (no equals sign at
-% all). Spaces are trimmed from the ends of the \meta{key} and \meta{value},
-% then one \emph{outer} set of braces is removed from the \meta{key}
-% and \meta{value} as part of the processing. If you need exactly the output
-% shown above, you'll need to either \texttt{e}-type or \texttt{x}-type expand
-% the function.
-% \begin{texnote}
-% The result of each list element is returned within \cs{exp_not:n}, which
-% means that the converted input stream does not expand further when
-% appearing in an \texttt{e}-type or \texttt{x}-type argument expansion.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[rEXP, updated = 2021-05-10]
-% {\keyval_parse:NNn, \keyval_parse:NNV, \keyval_parse:NNv}
-% \begin{syntax}
-% \cs{keyval_parse:NNn} \meta{function_1} \meta{function_2} \Arg{key--value list}
-% \end{syntax}
-% Parses the \meta{key--value list} into a series of \meta{keys} and
-% associated \meta{values}, or keys alone (if no \meta{value} was
-% given). \meta{function_1} should take one argument, while
-% \meta{function_2} should absorb two arguments. After
-% \cs{keyval_parse:NNn} has parsed the \meta{key--value list},
-% \meta{function_1} is used to process keys given with no value
-% and \meta{function_2} is used to process keys given with a
-% value. The order of the \meta{keys} in the \meta{key--value list}
-% is preserved. Thus
-% \begin{verbatim}
-% \keyval_parse:NNn \function:n \function:nn
-% { key1 = value1 , key2 = value2, key3 = , key4 }
-% \end{verbatim}
-% is converted into an input stream
-% \begin{verbatim}
-% \function:nn { key1 } { value1 }
-% \function:nn { key2 } { value2 }
-% \function:nn { key3 } { }
-% \function:n { key4 }
-% \end{verbatim}
-% Note that there is a difference between an empty value (an equals
-% sign followed by nothing) and a missing value (no equals sign at
-% all). Spaces are trimmed from the ends of the \meta{key} and \meta{value},
-% then one \emph{outer} set of braces is removed from the \meta{key}
-% and \meta{value} as part of the processing.
-%
-% This shares the implementation of \cs{keyval_parse:nnn}, the difference is
-% only semantically.
-% \begin{texnote}
-% The result is returned within \cs{exp_not:n}, which means that the
-% converted input stream does not expand further when appearing in an
-% \texttt{e}-type or \texttt{x}-type argument expansion.
-% \end{texnote}
-% \end{function}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3keys} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \subsection{Low-level interface}
-%
-% The low-level key parser's implementation is based heavily on \pkg{expkv}.
-% Compared to \pkg{keyval} it adds a number of additional \enquote{safety}
-% requirements and allows to process the parsed list of key--value pairs in a
-% variety of ways. The net result is that this code needs around one and a half
-% the amount of time as \pkg{keyval} to parse the same list of keys. To optimise
-% speed as far as reasonably practical, a number of lower-level approaches are
-% taken rather than using the higher-level \pkg{expl3} interfaces.
-%
-% \begin{macrocode}
-%<@@=keyval>
-% \end{macrocode}
-%
-% \begin{variable}{\s_@@_nil,\s_@@_mark,\s_@@_stop,\s_@@_tail}
-% \begin{macrocode}
-\scan_new:N \s_@@_nil
-\scan_new:N \s_@@_mark
-\scan_new:N \s_@@_stop
-\scan_new:N \s_@@_tail
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l__kernel_keyval_allow_blank_keys_bool}
-% The general behavior of the \pkg{l3keys} module is to throw an error on
-% blank key names. However to support the usage of \cs{keyval_parse:nnn} in
-% the \pkg{l3prop} module we allow this error to be switched off temporarily
-% and just ignore blank names.
-% \begin{macrocode}
-\bool_new:N \l__kernel_keyval_allow_blank_keys_bool
-% \end{macrocode}
-% \end{variable}
-%
-% This temporary macro will be used since some of the definitions will need an
-% active comma or equals sign. Inside of this macro |#1| will be the active
-% comma and |#2| will be the active equals sign.
-% \begin{macrocode}
-\group_begin:
- \cs_set_protected:Npn \@@_tmp:w #1#2
- {
-% \end{macrocode}
-%
-% \begin{macro}[EXP]
-% {
-% \keyval_parse:nnn, \keyval_parse:nnV, \keyval_parse:nnv,
-% \keyval_parse:NNn, \keyval_parse:NNV, \keyval_parse:NNv
-% }
-% The main function starts the first of two loops. The outer loop splits the
-% key--value list at active commas, the inner loop will do so at other commas.
-% The use of \cs{s_@@_mark} here prevents loss of braces from the key
-% argument.
-% \begin{macrocode}
- \cs_new:Npn \keyval_parse:nnn ##1 ##2 ##3
- {
- \__kernel_exp_not:w \tex_expanded:D
- {
- {
- \@@_loop_active:nnw {##1} {##2}
- \s_@@_mark ##3 #1 \s_@@_tail #1
- }
- }
- }
- \cs_new_eq:NN \keyval_parse:NNn \keyval_parse:nnn
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_loop_active:nnw}
-% First a fast test for the end of the loop is done, it'll gobble everything
-% up to a \cs{s_@@_tail}. The loop ending macro will gobble everything to the
-% last comma in this definition.
-% If the end isn't reached yet, start the second loop splitting at other
-% commas, the next iteration of this first loop will be inserted by the end of
-% \cs{@@_loop_other:nnw}.
-% \begin{macrocode}
- \cs_new:Npn \@@_loop_active:nnw ##1 ##2 ##3 #1
- {
- \@@_if_recursion_tail:w ##3
- \@@_end_loop_active:w \s_@@_tail
- \@@_loop_other:nnw {##1} {##2} ##3 , \s_@@_tail ,
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_split_other:w, \@@_split_active:w}
-% These two macros allow to split at the first equals sign of category 12 or
-% 13. At the same time they also execute branching by inserting the first
-% token following \cs{s_@@_mark} that followed the equals sign. Hence they
-% also test for the presence of such an equals sign simultaneously.
-% \begin{macrocode}
- \cs_new:Npn \@@_split_other:w ##1 = ##2 \s_@@_mark ##3
- { ##3 ##1 \s_@@_stop \s_@@_mark ##2 }
- \cs_new:Npn \@@_split_active:w ##1 #2 ##2 \s_@@_mark ##3
- { ##3 ##1 \s_@@_stop \s_@@_mark ##2 }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_loop_other:nnw}
-% The second loop uses the same test for its end as the first loop, next it
-% splits at the first active equals sign using \cs{@@_split_active:w}. The
-% \cs{s_@@_nil} prevents accidental brace stripping and acts as a delimiter in
-% the next steps. First testing for an active equals sign will reduce the
-% number of necessary expansion steps for the expected average use case of
-% other equals signs and hence perform better on average.
-% \begin{macrocode}
- \cs_new:Npn \@@_loop_other:nnw ##1 ##2 ##3 ,
- {
- \@@_if_recursion_tail:w ##3
- \@@_end_loop_other:w \s_@@_tail
- \@@_split_active:w ##3 \s_@@_nil
- \s_@@_mark \@@_split_active_auxi:w
- #2 \s_@@_mark \@@_clean_up_active:w
- {##1} {##2}
- \s_@@_mark
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_split_active_auxi:w}
-% \begin{macro}[EXP]{\@@_split_active_auxii:w}
-% \begin{macro}[EXP]{\@@_split_active_auxiii:w}
-% \begin{macro}[EXP]{\@@_split_active_auxiv:w}
-% \begin{macro}[EXP]{\@@_split_active_auxv:w}
-% After \cs{@@_split_active:w} the following will only be called if there was
-% at least one active equals sign in the current key--value pair. Therefore
-% this is the execution branch for a key--value pair with an active equals
-% sign. |##1| will be everything up to the first active equals sign. First it
-% tests for other equals signs in the key name, which will eventually throw an
-% error via \cs{@@_misplaced_equal_after_active_error:w}. If none was found we
-% forward the key to \cs{@@_split_active_auxii:w}.
-% \begin{macrocode}
- \cs_new:Npn \@@_split_active_auxi:w ##1 \s_@@_stop
- {
- \@@_split_other:w ##1 \s_@@_nil
- \s_@@_mark \@@_misplaced_equal_after_active_error:w
- = \s_@@_mark \@@_split_active_auxii:w
- }
-% \end{macrocode}
-% \cs{@@_split_active_auxii:w} gets the correct key name with a leading
-% \cs{s_@@_mark} as |##1|. It has to sanitise the remainder of the previous
-% test and trims the key name which will be forwarded to
-% \cs{@@_split_active_auxiii:w}.
-% \begin{macrocode}
- \cs_new:Npn \@@_split_active_auxii:w
- ##1 \s_@@_nil \s_@@_mark \@@_misplaced_equal_after_active_error:w
- \s_@@_stop \s_@@_mark
- ##2 \s_@@_nil #2 \s_@@_mark \@@_clean_up_active:w
- { \@@_trim:nN {##1} \@@_split_active_auxiii:w ##2 \s_@@_nil }
-% \end{macrocode}
-% Next we test for a misplaced active equals sign in the value, if none is
-% found \cs{@@_split_active_auxiv:w} will be called.
-% \begin{macrocode}
- \cs_new:Npn \@@_split_active_auxiii:w ##1 ##2 \s_@@_nil
- {
- \@@_split_active:w ##2 \s_@@_nil
- \s_@@_mark \@@_misplaced_equal_in_split_error:w
- #2 \s_@@_mark \@@_split_active_auxiv:w
- {##1}
- }
-% \end{macrocode}
-% This runs the last test after sanitising the remainder of the previous one.
-% This time test for a misplaced equals sign of category 12 in the value.
-% Finally the last auxiliary macro will be called.
-% \begin{macrocode}
- \cs_new:Npn \@@_split_active_auxiv:w
- ##1 \s_@@_nil \s_@@_mark \@@_misplaced_equal_in_split_error:w
- \s_@@_stop \s_@@_mark
- {
- \@@_split_other:w ##1 \s_@@_nil
- \s_@@_mark \@@_misplaced_equal_in_split_error:w
- = \s_@@_mark \@@_split_active_auxv:w
- }
-% \end{macrocode}
-% This last macro in this execution branch sanitises the last test, trims the
-% value and passes it to \cs{@@_pair:nnnn}.
-% \begin{macrocode}
- \cs_new:Npn \@@_split_active_auxv:w
- ##1 \s_@@_nil \s_@@_mark \@@_misplaced_equal_in_split_error:w
- \s_@@_stop \s_@@_mark
- { \@@_trim:nN { ##1 } \@@_pair:nnnn }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_clean_up_active:w}
-% The following is the branch taken if the key--value pair doesn't contain an
-% active equals sign. The remainder of that test will be cleaned up by
-% \cs{@@_clean_up_active:w} which will then split at an equals sign of
-% category other.
-% \begin{macrocode}
- \cs_new:Npn \@@_clean_up_active:w
- ##1 \s_@@_nil \s_@@_mark \@@_split_active_auxi:w \s_@@_stop \s_@@_mark
- {
- \@@_split_other:w ##1 \s_@@_nil
- \s_@@_mark \@@_split_other_auxi:w
- = \s_@@_mark \@@_clean_up_other:w
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_split_other_auxi:w}
-% \begin{macro}[EXP]{\@@_split_other_auxii:w}
-% \begin{macro}[EXP]{\@@_split_other_auxiii:w}
-% This is executed if the key--value pair doesn't contain an active equals
-% sign but at least one other. |##1| of \cs{@@_split_other_auxi:w} will
-% contain the complete key name, which is trimmed and forwarded to the next
-% auxiliary macro.
-% \begin{macrocode}
- \cs_new:Npn \@@_split_other_auxi:w ##1 \s_@@_stop
- { \@@_trim:nN { ##1 } \@@_split_other_auxii:w }
-% \end{macrocode}
-% We know that the value doesn't contain misplaced active equals signs but we
-% have to test for others. Also we need to sanitise the previous test, which
-% is done here and not earlier to avoid superfluous argument grabbing.
-% \begin{macrocode}
- \cs_new:Npn \@@_split_other_auxii:w
- ##1 ##2 \s_@@_nil = \s_@@_mark \@@_clean_up_other:w
- {
- \@@_split_other:w ##2 \s_@@_nil
- \s_@@_mark \@@_misplaced_equal_in_split_error:w
- = \s_@@_mark \@@_split_other_auxiii:w
- { ##1 }
- }
-% \end{macrocode}
-% \cs{@@_split_other_auxiii:w} sanitises the test for other equals signs,
-% trims the value and forwards it to \cs{@@_pair:nnnn}.
-% \begin{macrocode}
- \cs_new:Npn \@@_split_other_auxiii:w
- ##1 \s_@@_nil \s_@@_mark \@@_misplaced_equal_in_split_error:w
- \s_@@_stop \s_@@_mark
- { \@@_trim:nN { ##1 } \@@_pair:nnnn }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_clean_up_other:w}
-% \cs{@@_clean_up_other:w} is the last branch that might exist. It is called
-% if no equals sign was found, hence the only possibilities left are a blank
-% list element, which is to be skipped, or a lonely key. If it's no empty list
-% element this will trim the key name and forward it to \cs{@@_key:nn}.
-% \begin{macrocode}
- \cs_new:Npn \@@_clean_up_other:w
- ##1 \s_@@_nil \s_@@_mark \@@_split_other_auxi:w \s_@@_stop \s_@@_mark
- {
- \@@_if_blank:w ##1 \s_@@_nil \s_@@_stop \@@_blank_true:w
- \s_@@_mark \s_@@_stop
- \@@_trim:nN { ##1 } \@@_key:nn
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_misplaced_equal_after_active_error:w}
-% \begin{macro}[EXP]{\@@_misplaced_equal_in_split_error:w}
-% All these two macros do is gobble the remainder of the current other loop
-% execution and throw an error. Afterwards they have to insert the next loop
-% iteration.
-% \begin{macrocode}
- \cs_new:Npn \@@_misplaced_equal_after_active_error:w
- \s_@@_mark ##1 \s_@@_stop \s_@@_mark ##2 \s_@@_nil
- = \s_@@_mark \@@_split_active_auxii:w
- \s_@@_mark ##3 \s_@@_nil
- #2 \s_@@_mark \@@_clean_up_active:w
- {
- \msg_expandable_error:nn
- { keyval } { misplaced-equals-sign }
- \@@_loop_other:nnw
- }
- \cs_new:Npn \@@_misplaced_equal_in_split_error:w
- \s_@@_mark ##1 \s_@@_stop \s_@@_mark ##2 \s_@@_nil
- ##3 \s_@@_mark ##4 ##5
- {
- \msg_expandable_error:nn
- { keyval } { misplaced-equals-sign }
- \@@_loop_other:nnw
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_end_loop_other:w, \@@_end_loop_active:w}
-% All that's left for the parsing loops are the macros which end the
-% recursion. Both just gobble the remaining tokens of the respective loop
-% including the next recursion call. \cs{@@_end_loop_other:w} also has to
-% insert the next iteration of the active loop.
-% \begin{macrocode}
- \cs_new:Npn \@@_end_loop_other:w
- \s_@@_tail
- \@@_split_active:w
- \s_@@_mark \s_@@_tail
- \s_@@_nil \s_@@_mark
- \@@_split_active_auxi:w
- #2 \s_@@_mark \@@_clean_up_active:w
- { \@@_loop_active:nnw }
- \cs_new:Npn \@@_end_loop_active:w
- \s_@@_tail
- \@@_loop_other:nnw ##1 \s_@@_mark \s_@@_tail , \s_@@_tail ,
- { }
-% \end{macrocode}
-% \end{macro}
-%
-% The parsing loops are done, so here ends the definition of \cs{@@_tmp:w},
-% which will finally set up the macros.
-% \begin{macrocode}
- }
- \char_set_catcode_active:n { `\, }
- \char_set_catcode_active:n { `\= }
- \@@_tmp:w , =
-\group_end:
-\cs_generate_variant:Nn \keyval_parse:NNn { NNV , NNv }
-\cs_generate_variant:Nn \keyval_parse:nnn { nnV , nnv }
-% \end{macrocode}
-%
-% \begin{macro}[EXP]{\@@_pair:nnnn, \@@_key:nn}
-% These macros will be called on the parsed keys and values of the key--value
-% list. All arguments are completely trimmed. They test for blank key names
-% and call the functions passed to \cs{keyval_parse:nnn} inside of
-% \cs{exp_not:n} with the correct arguments. Afterwards they insert the next
-% iteration of the other loop.
-% \begin{macrocode}
-\group_begin:
- \cs_set_protected:Npn \@@_tmp:w #1#2
- {
- \cs_new:Npn \@@_pair:nnnn ##1 ##2 ##3 ##4
- {
- \@@_if_blank:w \s_@@_mark ##2 \s_@@_nil \s_@@_stop \@@_blank_key_error:w
- \s_@@_mark \s_@@_stop
- #1
- \exp_not:n { ##4 {##2} {##1} }
- #2
- \@@_loop_other:nnw {##3} {##4}
- }
- \cs_new:Npn \@@_key:nn ##1 ##2
- {
- \@@_if_blank:w \s_@@_mark ##1 \s_@@_nil \s_@@_stop \@@_blank_key_error:w
- \s_@@_mark \s_@@_stop
- #1
- \exp_not:n { ##2 {##1} }
- #2
- \@@_loop_other:nnw {##2}
- }
- }
- \@@_tmp:w { } { }
-\group_end:
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_if_empty:w,\@@_if_blank:w,\@@_if_recursion_tail:w}
-% All these tests work by gobbling tokens until a certain combination is met,
-% which makes them pretty fast. The test for a blank argument should be called
-% with an arbitrary token following the argument. Each of these utilize the
-% fact that the argument will contain a leading \cs{s_@@_mark}.
-% \begin{macrocode}
-\cs_new:Npn \@@_if_empty:w #1 \s_@@_mark \s_@@_stop { }
-\cs_new:Npn \@@_if_blank:w \s_@@_mark #1 { \@@_if_empty:w \s_@@_mark }
-\cs_new:Npn \@@_if_recursion_tail:w \s_@@_mark #1 \s_@@_tail { }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_blank_true:w,\@@_blank_key_error:w}
-% These macros will be called if the tests above didn't gobble them, they
-% execute the branching.
-% \begin{macrocode}
-\cs_new:Npn \@@_blank_true:w \s_@@_mark \s_@@_stop \@@_trim:nN #1 \@@_key:nn
- { \@@_loop_other:nnw }
-\cs_new:Npn \@@_blank_key_error:w \s_@@_mark \s_@@_stop #1 \@@_loop_other:nnw
- {
- \bool_if:NTF \l__kernel_keyval_allow_blank_keys_bool
- { #1 }
- { \msg_expandable_error:nn { keyval } { blank-key-name } }
- \@@_loop_other:nnw
- }
-% \end{macrocode}
-% \end{macro}
-%
-% Two messages for the low level parsing system.
-% \begin{macrocode}
-\msg_new:nnn { keyval } { misplaced-equals-sign }
- { Misplaced~'='~in~key-value~input~\msg_line_context: }
-\msg_new:nnn { keyval } { blank-key-name }
- { Blank~key~name~in~key-value~input~\msg_line_context: }
-\prop_gput:Nnn \g_msg_module_name_prop { keyval } { LaTeX }
-\prop_gput:Nnn \g_msg_module_type_prop { keyval } { }
-% \end{macrocode}
-%
-% \begin{macro}[EXP]{\@@_trim:nN}
-% \begin{macro}[EXP]
-% {\@@_trim_auxi:w,\@@_trim_auxii:w,\@@_trim_auxiii:w,\@@_trim_auxiv:w}
-% And an adapted version of \cs{__tl_trim_spaces:nn} which is a bit faster for
-% our use case, as it can strip the braces at the end. This is pretty much the
-% same concept, so I won't comment on it here. The speed gain by using this
-% instead of \cs{tl_trim_spaces_apply:nN} is about 10\,\% of the total time for
-% \cs{keyval_parse:NNn} with one key and one key--value pair, so I think it's
-% worth it.
-% \begin{macrocode}
-\group_begin:
- \cs_set_protected:Npn \@@_tmp:w #1
- {
- \cs_new:Npn \@@_trim:nN ##1
- {
- \@@_trim_auxi:w
- ##1
- \s_@@_nil
- \s_@@_mark #1 { }
- \s_@@_mark \@@_trim_auxii:w
- \@@_trim_auxiii:w
- #1 \s_@@_nil
- \@@_trim_auxiv:w
- }
- \cs_new:Npn \@@_trim_auxi:w ##1 \s_@@_mark #1 ##2 \s_@@_mark ##3
- {
- ##3
- \@@_trim_auxi:w
- \s_@@_mark
- ##2
- \s_@@_mark #1 {##1}
- }
- \cs_new:Npn \@@_trim_auxii:w \@@_trim_auxi:w \s_@@_mark \s_@@_mark ##1
- {
- \@@_trim_auxiii:w
- ##1
- }
- \cs_new:Npn \@@_trim_auxiii:w ##1 #1 \s_@@_nil ##2
- {
- ##2
- ##1 \s_@@_nil
- \@@_trim_auxiii:w
- }
-% \end{macrocode}
-% This is the one macro which differs from the original definition.
-% \begin{macrocode}
- \cs_new:Npn \@@_trim_auxiv:w
- \s_@@_mark ##1 \s_@@_nil
- \@@_trim_auxiii:w \s_@@_nil \@@_trim_auxiii:w
- ##2
- { ##2 { ##1 } }
- }
- \@@_tmp:w { ~ }
-\group_end:
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Constants and variables}
-%
-% \begin{macrocode}
-%<@@=keys>
-% \end{macrocode}
-%
-% \begin{variable}
-% {
-% \c_@@_code_root_str ,
-% \c_@@_check_root_str ,
-% \c_@@_default_root_str ,
-% \c_@@_groups_root_str ,
-% \c_@@_inherit_root_str ,
-% \c_@@_type_root_str
-% }
-% Various storage areas for the different data which make up keys.
-% \begin{macrocode}
-\str_const:Nn \c_@@_code_root_str { key~code~>~ }
-\str_const:Nn \c_@@_check_root_str { key~check~>~ }
-\str_const:Nn \c_@@_default_root_str { key~default~>~ }
-\str_const:Nn \c_@@_groups_root_str { key~groups~>~ }
-\str_const:Nn \c_@@_inherit_root_str { key~inherit~>~ }
-\str_const:Nn \c_@@_type_root_str { key~type~>~ }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\c_@@_props_root_str}
-% The prefix for storing properties.
-% \begin{macrocode}
-\str_const:Nn \c_@@_props_root_str { key~prop~>~ }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_keys_choice_int, \l_keys_choice_tl}
-% Publicly accessible data on which choice is being used when several
-% are generated as a set.
-% \begin{macrocode}
-\int_new:N \l_keys_choice_int
-\tl_new:N \l_keys_choice_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_groups_clist}
-% Used for storing and recovering the list of groups which apply to a key:
-% set as a comma list but at one point we have to use this for a token
-% list recovery.
-% \begin{macrocode}
-\clist_new:N \l_@@_groups_clist
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_inherit_clist}
-% For normalisation.
-% \begin{macrocode}
-\clist_new:N \l_@@_inherit_clist
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_keys_key_str}
-% The name of a key itself: needed when setting keys.
-% \begin{macrocode}
-\str_new:N \l_keys_key_str
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}[deprecated]{\l_keys_key_tl}
-% The |tl| version is deprecated but has to be handled manually.
-% \begin{macrocode}
-\tl_new:N \l_keys_key_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_module_str}
-% The module for an entire set of keys.
-% \begin{macrocode}
-\str_new:N \l_@@_module_str
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_no_value_bool}
-% A marker is needed internally to show if only a key or a key plus a
-% value was seen: this is recorded here.
-% \begin{macrocode}
-\bool_new:N \l_@@_no_value_bool
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_only_known_bool}
-% Used to track if only \enquote{known} keys are being set.
-% \begin{macrocode}
-\bool_new:N \l_@@_only_known_bool
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_keys_path_str}
-% The \enquote{path} of the current key is stored here: this is
-% available to the programmer and so is public.
-% \begin{macrocode}
-\str_new:N \l_keys_path_str
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}[deprecated]{\l_keys_path_tl}
-% The older version is deprecated but has to be handled manually.
-% \begin{macrocode}
-\tl_new:N \l_keys_path_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_inherit_str}
-% \begin{macrocode}
-\str_new:N \l_@@_inherit_str
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_relative_tl}
-% The relative path for passing keys back to the user. As this can
-% be explicitly no-value, it must be a token list.
-% \begin{macrocode}
-\tl_new:N \l_@@_relative_tl
-\tl_set:Nn \l_@@_relative_tl { \q_@@_no_value }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_property_str}
-% The \enquote{property} begin set for a key at definition time is
-% stored here.
-% \begin{macrocode}
-\str_new:N \l_@@_property_str
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_selective_bool, \l_@@_filtered_bool}
-% Two booleans for using key groups: one to indicate that \enquote{selective}
-% setting is active, a second to specify which type (\enquote{opt-in}
-% or \enquote{opt-out}).
-% \begin{macrocode}
-\bool_new:N \l_@@_selective_bool
-\bool_new:N \l_@@_filtered_bool
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_selective_seq}
-% The list of key groups being filtered in or out during selective setting.
-% \begin{macrocode}
-\seq_new:N \l_@@_selective_seq
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_unused_clist}
-% Used when setting only some keys to store those left over.
-% \begin{macrocode}
-\clist_new:N \l_@@_unused_clist
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_keys_value_tl}
-% The value given for a key: may be empty if no value was given.
-% \begin{macrocode}
-\tl_new:N \l_keys_value_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_tmp_bool, \l_@@_tmpa_tl, \l_@@_tmpb_tl}
-% Scratch space.
-% \begin{macrocode}
-\bool_new:N \l_@@_tmp_bool
-\tl_new:N \l_@@_tmpa_tl
-\tl_new:N \l_@@_tmpb_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_precompile_bool, \l_@@_precompile_tl}
-% For digesting keys.
-% \begin{macrocode}
-\bool_new:N \l_@@_precompile_bool
-\tl_new:N \l_@@_precompile_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_keys_usage_load_prop, \l_keys_usage_preamble_prop}
-% Global data for document-level information.
-% \begin{macrocode}
-\prop_new:N \l_keys_usage_load_prop
-\prop_new:N \l_keys_usage_preamble_prop
-% \end{macrocode}
-% \end{variable}
-%
-% \subsubsection{Internal auxiliaries}
-%
-% \begin{variable}{\s_@@_nil,\s_@@_mark,\s_@@_stop}
-% Internal scan marks.
-% \begin{macrocode}
-\scan_new:N \s_@@_nil
-\scan_new:N \s_@@_mark
-\scan_new:N \s_@@_stop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\q_@@_no_value}
-% Internal quarks.
-% \begin{macrocode}
-\quark_new:N \q_@@_no_value
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[pTF]{\@@_quark_if_no_value:N}
-% Branching quark conditional.
-% \begin{macrocode}
-\__kernel_quark_new_conditional:Nn \@@_quark_if_no_value:N { TF }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_precompile:n}
-% An auxiliary to allow cleaner showing of code.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_precompile:n #1
- {
- \bool_if:NTF \l_@@_precompile_bool
- { \tl_put_right:Nn \l_@@_precompile_tl }
- { \use:n }
- {#1}
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_cs_undefine:c}
-% Local version of \cs{cs_undefine:c} to avoid sprinkling
-% \cs{tex_undefined:D} everywhere.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_cs_undefine:c #1
- {
- \if_cs_exist:w #1 \cs_end:
- \else:
- \use_i:nnnn
- \fi:
- \cs_set_eq:cN {#1} \tex_undefined:D
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{The key defining mechanism}
-%
-% \begin{macro}{\keys_define:nn, \keys_define:ne, \keys_define:nx}
-% \begin{macro}{\@@_define:nnn, \@@_define:onn}
-% The public function for definitions is just a wrapper for the lower
-% level mechanism, more or less. The outer function is designed to
-% keep a track of the current module, to allow safe nesting. The module is set
-% removing any leading |/| (which is not needed here).
-% \begin{macrocode}
-\cs_new_protected:Npn \keys_define:nn
- { \@@_define:onn \l_@@_module_str }
-\cs_generate_variant:Nn \keys_define:nn { ne , nx }
-\cs_new_protected:Npn \@@_define:nnn #1#2#3
- {
- \str_set:Ne \l_@@_module_str { \@@_trim_spaces:n {#2} }
- \keyval_parse:NNn \@@_define:n \@@_define:nn {#3}
- \str_set:Nn \l_@@_module_str {#1}
- }
-\cs_generate_variant:Nn \@@_define:nnn { o }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_define:n}
-% \begin{macro}{\@@_define:nn}
-% \begin{macro}{\@@_define_aux:nn}
-% The outer functions here record whether a value was given and then
-% converge on a common internal mechanism. There is first a search for
-% a property in the current key name, then a check to make sure it is
-% known before the code hands off to the next step.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_define:n #1
- {
- \bool_set_true:N \l_@@_no_value_bool
- \@@_define_aux:nn {#1} { }
- }
-\cs_new_protected:Npn \@@_define:nn #1#2
- {
- \bool_set_false:N \l_@@_no_value_bool
- \@@_define_aux:nn {#1} {#2}
- }
-\cs_new_protected:Npn \@@_define_aux:nn #1#2
- {
- \@@_property_find:n {#1}
- \cs_if_exist:cTF { \c_@@_props_root_str \l_@@_property_str }
- { \@@_define_code:n {#2} }
- {
- \str_if_empty:NF \l_@@_property_str
- {
- \msg_error:nnee { keys } { property-unknown }
- \l_@@_property_str \l_keys_path_str
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_property_find:n}
-% \begin{macro}[EXP]{\@@_property_find_auxi:w}
-% \begin{macro}{\@@_property_find_auxii:w}
-% \begin{macro}[EXP]
-% {
-% \@@_property_find_auxiii:w ,
-% \@@_property_find_auxiv:w
-% }
-% \begin{macro}{\@@_property_find_err:w}
-% Searching for a property means finding the last |.| in the input,
-% and storing the text before and after it. Everything is first turned into
-% strings, so there is no problem using \cs{cs_set_nopar:Npe} instead of
-% \cs{str_set:Ne} to set \cs{l_keys_path_str}. To gain further speed, brace
-% tricks are used and \cs{@@_property_find_auxiv:w} is defined as expandable.
-% Since spaces will already be trimmed from the module we can omit it from the
-% argument to \cs{@@_trim_spaces:n}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_property_find:n #1
- {
- \exp_after:wN \@@_property_find_auxi:w \tl_to_str:n {#1}
- \s_@@_nil \@@_property_find_auxii:w
- . \s_@@_nil \@@_property_find_err:w
- }
-\cs_new:Npn \@@_property_find_auxi:w #1 . #2 \s_@@_nil #3
- {
- #3 #1 \s_@@_mark #2 \s_@@_nil #3
- }
-\cs_new_protected:Npn \@@_property_find_auxii:w
- #1 \s_@@_mark #2 \s_@@_nil \@@_property_find_auxii:w . \s_@@_nil
- \@@_property_find_err:w
- {
- \cs_set_nopar:Npe \l_keys_path_str
- {
- \str_if_empty:NF \l_@@_module_str { \l_@@_module_str / }
- \exp_after:wN \@@_trim_spaces:n \tex_expanded:D {{
- #1
- \if_false: }}} \fi:
- \@@_property_find_auxi:w #2 \s_@@_nil \@@_property_find_auxiii:w
- . \s_@@_nil \@@_property_find_auxiv:w
- }
-\cs_new:Npn \@@_property_find_auxiii:w #1 \s_@@_mark #2 . #3 \s_@@_nil #4
- {
- . #1 #4 #2 \s_@@_mark #3 \s_@@_nil #4
- }
-\cs_new:Npn \@@_property_find_auxiv:w
- #1 \s_@@_nil \@@_property_find_auxiii:w
- \s_@@_mark \s_@@_nil \@@_property_find_auxiv:w
- {
- \if_false: {{{ \fi: }}}
- \cs_set_nopar:Npe \l_@@_property_str { . #1 }
- \tl_set_eq:NN \l_keys_path_tl \l_keys_path_str
- }
-\cs_new_protected:Npn \@@_property_find_err:w
- #1 \s_@@_nil #2 \@@_property_find_err:w
- {
- \str_clear:N \l_@@_property_str
- \msg_error:nnn { keys } { no-property } {#1}
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_define_code:n}
-% \begin{macro}[EXP]{\@@_define_code:w}
-% Two possible cases. If there is a value for the key, then just use
-% the function. If not, then a check to make sure there is no need for
-% a value with the property. If there should be one then complain,
-% otherwise execute it. There is no need to check for a |:| as if it
-% was missing the earlier tests would have failed.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_define_code:n #1
- {
- \bool_if:NTF \l_@@_no_value_bool
- {
- \exp_after:wN \@@_define_code:w
- \l_@@_property_str \s_@@_stop
- { \use:c { \c_@@_props_root_str \l_@@_property_str } }
- {
- \msg_error:nnee { keys } { property-requires-value }
- \l_@@_property_str \l_keys_path_str
- }
- }
- { \use:c { \c_@@_props_root_str \l_@@_property_str } {#1} }
- }
-\exp_last_unbraced:NNNNo
- \cs_new:Npn \@@_define_code:w #1 \c_colon_str #2 \s_@@_stop
- { \tl_if_empty:nTF {#2} }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Turning properties into actions}
-%
-% \begin{macro}
-% {
-% \@@_bool_set:Nn, \@@_bool_set:cn,
-% \@@_bool_set_inverse:Nn, \@@_bool_set_inverse:cn
-% }
-% \begin{macro}{\@@_bool_set:Nnnn}
-% Boolean keys are really just choices, but all done by hand. The
-% second argument here is the scope: either empty or \texttt{ g } for
-% global.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_bool_set:Nn #1#2
- { \@@_bool_set:Nnnn #1 {#2} { true } { false } }
-\cs_generate_variant:Nn \@@_bool_set:Nn { c }
-\cs_new_protected:Npn \@@_bool_set_inverse:Nn #1#2
- { \@@_bool_set:Nnnn #1 {#2} { false } { true } }
-\cs_generate_variant:Nn \@@_bool_set_inverse:Nn { c }
-\cs_new_protected:Npn \@@_bool_set:Nnnn #1#2#3#4
- {
- \bool_if_exist:NF #1 { \bool_new:N #1 }
- \@@_choice_make:
- \@@_cmd_set:ne { \l_keys_path_str / true }
- { \exp_not:c { bool_ #2 set_ #3 :N } \exp_not:N #1 }
- \@@_cmd_set:ne { \l_keys_path_str / false }
- { \exp_not:c { bool_ #2 set_ #4 :N } \exp_not:N #1 }
- \@@_cmd_set_direct:nn { \l_keys_path_str / unknown }
- {
- \msg_error:nne { keys } { boolean-values-only }
- \l_keys_path_str
- }
- \@@_default_set:n { true }
- }
-\cs_generate_variant:Nn \@@_bool_set:Nn { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_choice_make:, \@@_multichoice_make:}
-% \begin{macro}{\@@_choice_make:N}
-% \begin{macro}{\@@_choice_make_aux:N}
-% To make a choice from a key, two steps: set the code, and set the
-% unknown key. As multichoices and choices are essentially the same bar one
-% function, the code is given together.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_choice_make:
- { \@@_choice_make:N \@@_choice_find:n }
-\cs_new_protected:Npn \@@_multichoice_make:
- { \@@_choice_make:N \@@_multichoice_find:n }
-\cs_new_protected:Npn \@@_choice_make:N #1
- {
- \cs_if_exist:cTF
- { \c_@@_type_root_str \@@_parent:o \l_keys_path_str }
- {
- \str_if_eq:vnTF
- { \c_@@_type_root_str \@@_parent:o \l_keys_path_str }
- { choice }
- {
- \msg_error:nnee { keys } { nested-choice-key }
- \l_keys_path_tl { \@@_parent:o \l_keys_path_str }
- }
- { \@@_choice_make_aux:N #1 }
- }
- { \@@_choice_make_aux:N #1 }
- }
-\cs_new_protected:Npn \@@_choice_make_aux:N #1
- {
- \cs_set_nopar:cpn { \c_@@_type_root_str \l_keys_path_str }
- { choice }
- \@@_cmd_set_direct:nn \l_keys_path_str { #1 {##1} }
- \@@_cmd_set_direct:nn { \l_keys_path_str / unknown }
- {
- \msg_error:nnee { keys } { choice-unknown }
- \l_keys_path_str {##1}
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_choices_make:nn, \@@_multichoices_make:nn}
-% \begin{macro}{\@@_choices_make:Nnn}
-% Auto-generating choices means setting up the root key as a choice, then
-% defining each choice in turn.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_choices_make:nn
- { \@@_choices_make:Nnn \@@_choice_make: }
-\cs_new_protected:Npn \@@_multichoices_make:nn
- { \@@_choices_make:Nnn \@@_multichoice_make: }
-\cs_new_protected:Npn \@@_choices_make:Nnn #1#2#3
- {
- #1
- \int_zero:N \l_keys_choice_int
- \clist_map_inline:nn {#2}
- {
- \int_incr:N \l_keys_choice_int
- \@@_cmd_set:ne
- { \l_keys_path_str / \@@_trim_spaces:n {##1} }
- {
- \tl_set:Nn \exp_not:N \l_keys_choice_tl {##1}
- \int_set:Nn \exp_not:N \l_keys_choice_int
- { \int_use:N \l_keys_choice_int }
- \exp_not:n {#3}
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \@@_cmd_set:nn, \@@_cmd_set:Vn, \@@_cmd_set:ne, \@@_cmd_set:Vo,
-% \@@_cmd_set_direct:nn
-% }
-% Setting the code for a key first logs if appropriate that we are
-% defining a new key, then saves the code.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_cmd_set:nn #1#2
- { \@@_cmd_set_direct:nn {#1} { \@@_precompile:n {#2} } }
-\cs_generate_variant:Nn \@@_cmd_set:nn { ne , Vn , Vo }
-\cs_new_protected:Npn \@@_cmd_set_direct:nn #1#2
- { \cs_set_protected:cpn { \c_@@_code_root_str #1 } ##1 {#2} }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_cs_set:NNpn, \@@_cs_set:Ncpn}
-% Creating control sequences is a bit more tricky than other cases as
-% we need to pick up the |p| argument. To make the internals look clearer,
-% the trailing |n| argument here is just for appearance.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_cs_set:NNpn #1#2#3#
- {
- \cs_set_protected:cpe { \c_@@_code_root_str \l_keys_path_str } ##1
- {
- \@@_precompile:n
- { #1 \exp_not:N #2 \exp_not:n {#3} {##1} }
- }
- \use_none:n
- }
-\cs_generate_variant:Nn \@@_cs_set:NNpn { Nc }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_default_set:n}
-% Setting a default value is easy. These are stored using \cs{cs_set_nopar:cpe} as this
-% avoids any worries about whether a token list exists.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_default_set:n #1
- {
- \tl_if_empty:nTF {#1}
- {
- \@@_cs_undefine:c
- { \c_@@_default_root_str \l_keys_path_str }
- }
- {
- \cs_set_nopar:cpe
- { \c_@@_default_root_str \l_keys_path_str }
- { \exp_not:n {#1} }
- \@@_value_requirement:nn { required } { false }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_groups_set:n}
-% Assigning a key to one or more groups uses comma lists. As the list of
-% groups only exists if there is anything to do, the setting is done using
-% a scratch list. For the usual grouping reasons we use the low-level
-% approach to undefining a list. We also use the low-level approach for
-% the other case to avoid tripping up the |check-declarations| code.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_groups_set:n #1
- {
- \clist_set:Ne \l_@@_groups_clist { \tl_to_str:n {#1} }
- \clist_if_empty:NTF \l_@@_groups_clist
- {
- \@@_cs_undefine:c
- { \c_@@_groups_root_str \l_keys_path_str }
- }
- {
- \cs_set_eq:cN { \c_@@_groups_root_str \l_keys_path_str }
- \l_@@_groups_clist
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_inherit:n}
-% Inheritance means ignoring anything already said about the key:
-% zap the lot and set up.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_inherit:n #1
- {
- \@@_undefine:
- \clist_set:Nn \l_@@_inherit_clist {#1}
- \cs_set_eq:cN { \c_@@_inherit_root_str \l_keys_path_str }
- \l_@@_inherit_clist
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_initialise:n}
-% A set up for initialisation: just run the code if it exists.
-% We need to set the key string here, using the deprecated \texttt{tl}
-% as a piece of scratch space.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_initialise:n #1
- {
- \cs_if_exist:cTF
- { \c_@@_inherit_root_str \@@_parent:o \l_keys_path_str }
- { \@@_execute_inherit: }
- {
- \str_clear:N \l_@@_inherit_str
- \cs_if_exist:cT { \c_@@_code_root_str \l_keys_path_str }
- {
- \exp_after:wN \@@_find_key_module:wNN
- \l_keys_path_str \s_@@_stop
- \l_keys_key_tl \l_keys_key_str
- \tl_set_eq:NN \l_keys_key_tl \l_keys_key_str
- \tl_set:Nn \l_keys_value_tl {#1}
- \@@_execute:no \l_keys_path_str \l_keys_value_tl
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_legacy_if_set:nn, \@@_legacy_if_inverse:nn}
-% \begin{macro}{\@@_legacy_if_inverse:nnnn}
-% Much the same as \pkg{expl3} booleans, except we assume that the switch
-% exists.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_legacy_if_set:nn #1#2
- { \@@_legacy_if_set:nnnn {#1} {#2} { true } { false } }
-\cs_new_protected:Npn \@@_legacy_if_set_inverse:nn #1#2
- { \@@_legacy_if_set:nnnn {#1} {#2} { false } { true } }
-\cs_new_protected:Npn \@@_legacy_if_set:nnnn #1#2#3#4
- {
- \@@_choice_make:
- \@@_cmd_set:ne { \l_keys_path_str / true }
- { \exp_not:c { legacy_if_#2 set_ #3 :n } { \exp_not:n {#1} } }
- \@@_cmd_set:ne { \l_keys_path_str / false }
- { \exp_not:c { legacy_if_#2 set_ #4 :n } { \exp_not:n {#1} } }
- \@@_cmd_set:nn { \l_keys_path_str / unknown }
- {
- \msg_error:nne { keys } { boolean-values-only }
- \l_keys_path_str
- }
- \@@_default_set:n { true }
- \cs_if_exist:cF { if#1 }
- {
- \cs:w newif \exp_after:wN \cs_end:
- \cs:w if#1 \cs_end:
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_meta_make:n}
-% \begin{macro}{\@@_meta_make:nn}
-% To create a meta-key, simply set up to pass data through. The internal
-% function is used here as a meta key should respect the prevailing
-% filtering, etc.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_meta_make:n #1
- {
- \exp_args:NVo \@@_cmd_set_direct:nn \l_keys_path_str
- {
- \exp_after:wN \@@_set:nn \exp_after:wN
- { \l_@@_module_str } {#1}
- }
- }
-\cs_new_protected:Npn \@@_meta_make:nn #1#2
- {
- \exp_args:NV \@@_cmd_set_direct:nn
- \l_keys_path_str { \@@_set:nn {#1} {#2} }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_prop_put:Nn, \@@_prop_put:cn}
-% Much the same as other variables, but needs a dedicated auxiliary.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_prop_put:Nn #1#2
- {
- \prop_if_exist:NF #1 { \prop_new:N #1 }
- \exp_after:wN \@@_find_key_module:wNN \l_keys_path_str \s_@@_stop
- \l_@@_tmpa_tl \l_@@_tmpb_tl
- \@@_cmd_set:ne \l_keys_path_str
- {
- \exp_not:c { prop_ #2 put:Nnn }
- \exp_not:N #1
- { \l_@@_tmpb_tl }
- \exp_not:n { {##1} }
- }
- }
-\cs_generate_variant:Nn \@@_prop_put:Nn { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_undefine:}
-% Undefining a key has to be done without \cs{cs_undefine:c} as that
-% function acts globally.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_undefine:
- {
- \clist_map_inline:nn
- { code , default , groups , inherit , type , check }
- {
- \@@_cs_undefine:c
- { \tl_use:c { c_@@_ ##1 _root_str } \l_keys_path_str }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_value_requirement:nn}
-% \begin{macro}{\@@_check_forbidden:, \@@_check_required:}
-% Validating key input is done using a second function which runs before
-% the main key code. Setting that up means setting it equal to a generic
-% stub which does the check. This approach makes the lookup very fast at
-% the cost of one additional csname per key that needs it. The cleanup here
-% has to know the structure of the following code.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_value_requirement:nn #1#2
- {
- \str_case:nnF {#2}
- {
- { true }
- {
- \cs_set_eq:cc
- { \c_@@_check_root_str \l_keys_path_str }
- { @@_check_ #1 : }
- }
- { false }
- {
- \cs_if_eq:ccT
- { \c_@@_check_root_str \l_keys_path_str }
- { @@_check_ #1 : }
- {
- \@@_cs_undefine:c
- { \c_@@_check_root_str \l_keys_path_str }
- }
- }
- }
- {
- \msg_error:nne { keys }
- { boolean-values-only }
- { .value_ #1 :n }
- }
- }
-\cs_new_protected:Npn \@@_check_forbidden:
- {
- \bool_if:NF \l_@@_no_value_bool
- {
- \msg_error:nnee { keys } { value-forbidden }
- \l_keys_path_str \l_keys_value_tl
- \use_none:nnn
- }
- }
-\cs_new_protected:Npn \@@_check_required:
- {
- \bool_if:NT \l_@@_no_value_bool
- {
- \msg_error:nne { keys } { value-required }
- \l_keys_path_str
- \use_none:nnn
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_usage:n}
-% \begin{macro}{\@@_usage:NN}
-% \begin{macro}{\@@_usage:w}
-% Save the relevant data.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_usage:n #1
- {
- \str_case:nnF {#1}
- {
- { general }
- {
- \@@_usage:NN \l_keys_usage_load_prop
- \c_false_bool
- \@@_usage:NN \l_keys_usage_preamble_prop
- \c_false_bool
- }
- { load }
- {
- \@@_usage:NN \l_keys_usage_load_prop
- \c_true_bool
- \@@_usage:NN \l_keys_usage_preamble_prop
- \c_false_bool
- }
- { preamble }
- {
- \@@_usage:NN \l_keys_usage_load_prop
- \c_false_bool
- \@@_usage:NN \l_keys_usage_preamble_prop
- \c_true_bool
- }
- }
- {
- \msg_error:nnnn { keys }
- { choice-unknown }
- { .usage:n }
- {#1}
- }
- }
-\cs_new_protected:Npn \@@_usage:NN #1#2
- {
- \prop_get:NVNF #1 \l_@@_module_str \l_@@_tmpa_tl
- { \tl_clear:N \l_@@_tmpa_tl }
- \tl_set:Ne \l_@@_tmpb_tl
- { \exp_after:wN \@@_usage:w \l_keys_path_str \s_@@_stop }
- \bool_if:NTF #2
- { \clist_put_right:NV \l_@@_tmpa_tl \l_@@_tmpb_tl }
- { \clist_remove_all:NV \l_@@_tmpa_tl \l_@@_tmpb_tl }
- \prop_put:NVV #1 \l_@@_module_str
- \l_@@_tmpa_tl
- }
-\cs_new:Npn \@@_usage:w #1 / #2 \s_@@_stop {#2}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_variable_set:NnnN, \@@_variable_set:cnnN}
-% \begin{macro}{\@@_variable_set_required:NnnN, \@@_variable_set_required:cnnN}
-% Setting a variable takes the type and scope separately so that
-% it is easy to make a new variable if needed.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_variable_set:NnnN #1#2#3#4
- {
- \use:c { #2_if_exist:NF } #1 { \use:c { #2 _new:N } #1 }
- \@@_cmd_set:ne \l_keys_path_str
- {
- \exp_not:c { #2 _ #3 set:N #4 }
- \exp_not:N #1
- \exp_not:n { {##1} }
- }
- }
-\cs_generate_variant:Nn \@@_variable_set:NnnN { c }
-\cs_new_protected:Npn \@@_variable_set_required:NnnN #1#2#3#4
- {
- \@@_variable_set:NnnN #1 {#2} {#3} #4
- \@@_value_requirement:nn { required } { true }
- }
-\cs_generate_variant:Nn \@@_variable_set_required:NnnN { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Creating key properties}
-%
-% The key property functions are all wrappers for internal functions,
-% meaning that things stay readable and can also be altered later on.
-%
-% Importantly, while key properties have \enquote{normal} argument specs, the
-% underlying code always supplies one braced argument to these. As such, argument
-% expansion is handled by hand rather than using the standard tools. This shows
-% up particularly for the two-argument properties, where things would otherwise
-% go badly wrong.
-%
-% \begin{macro}{.bool_set:N, .bool_set:c}
-% \begin{macro}{.bool_gset:N, .bool_gset:c}
-% One function for this.
-% \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_str .bool_set:N } #1
- { \@@_bool_set:Nn #1 { } }
-\cs_new_protected:cpn { \c_@@_props_root_str .bool_set:c } #1
- { \@@_bool_set:cn {#1} { } }
-\cs_new_protected:cpn { \c_@@_props_root_str .bool_gset:N } #1
- { \@@_bool_set:Nn #1 { g } }
-\cs_new_protected:cpn { \c_@@_props_root_str .bool_gset:c } #1
- { \@@_bool_set:cn {#1} { g } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{.bool_set_inverse:N, .bool_set_inverse:c}
-% \begin{macro}{.bool_gset_inverse:N, .bool_gset_inverse:c}
-% One function for this.
-% \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_str .bool_set_inverse:N } #1
- { \@@_bool_set_inverse:Nn #1 { } }
-\cs_new_protected:cpn { \c_@@_props_root_str .bool_set_inverse:c } #1
- { \@@_bool_set_inverse:cn {#1} { } }
-\cs_new_protected:cpn { \c_@@_props_root_str .bool_gset_inverse:N } #1
- { \@@_bool_set_inverse:Nn #1 { g } }
-\cs_new_protected:cpn { \c_@@_props_root_str .bool_gset_inverse:c } #1
- { \@@_bool_set_inverse:cn {#1} { g } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{.choice:}
-% Making a choice is handled internally, as it is also needed by
-% \texttt{.generate_choices:n}.
-% \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_str .choice: }
- { \@@_choice_make: }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{.choices:nn, .choices:Vn, .choices:en, .choices:on, .choices:xn}
-% For auto-generation of a series of mutually-exclusive choices.
-% Here, |#1| consists of two separate
-% arguments, hence the slightly odd-looking implementation.
-% \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_str .choices:nn } #1
- { \@@_choices_make:nn #1 }
-\cs_new_protected:cpn { \c_@@_props_root_str .choices:Vn } #1
- { \exp_args:NV \@@_choices_make:nn #1 }
-\cs_new_protected:cpn { \c_@@_props_root_str .choices:en } #1
- { \exp_args:Ne \@@_choices_make:nn #1 }
-\cs_new_protected:cpn { \c_@@_props_root_str .choices:on } #1
- { \exp_args:No \@@_choices_make:nn #1 }
-\cs_new_protected:cpn { \c_@@_props_root_str .choices:xn } #1
- { \exp_args:Nx \@@_choices_make:nn #1 }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{.code:n}
-% Creating code is simply a case of passing through to the underlying
-% \texttt{set} function.
-% \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_str .code:n } #1
- { \@@_cmd_set:nn \l_keys_path_str {#1} }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{.clist_set:N, .clist_set:c}
-% \begin{macro}{.clist_gset:N, .clist_gset:c}
-% \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_str .clist_set:N } #1
- { \@@_variable_set:NnnN #1 { clist } { } n }
-\cs_new_protected:cpn { \c_@@_props_root_str .clist_set:c } #1
- { \@@_variable_set:cnnN {#1} { clist } { } n }
-\cs_new_protected:cpn { \c_@@_props_root_str .clist_gset:N } #1
- { \@@_variable_set:NnnN #1 { clist } { g } n }
-\cs_new_protected:cpn { \c_@@_props_root_str .clist_gset:c } #1
- { \@@_variable_set:cnnN {#1} { clist } { g } n }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {.cs_set:Np, .cs_set:cp, .cs_set_protected:Np, .cs_set_protected:cp}
-% \begin{macro}
-% {.cs_gset:Np, .cs_gset:cp, .cs_gset_protected:Np, .cs_gset_protected:cp}
-% \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_str .cs_set:Np } #1
- { \@@_cs_set:NNpn \cs_set:Npn #1 { } }
-\cs_new_protected:cpn { \c_@@_props_root_str .cs_set:cp } #1
- { \@@_cs_set:Ncpn \cs_set:Npn #1 { } }
-\cs_new_protected:cpn { \c_@@_props_root_str .cs_set_protected:Np } #1
- { \@@_cs_set:NNpn \cs_set_protected:Npn #1 { } }
-\cs_new_protected:cpn { \c_@@_props_root_str .cs_set_protected:cp } #1
- { \@@_cs_set:Ncpn \cs_set_protected:Npn #1 { } }
-\cs_new_protected:cpn { \c_@@_props_root_str .cs_gset:Np } #1
- { \@@_cs_set:NNpn \cs_gset:Npn #1 { } }
-\cs_new_protected:cpn { \c_@@_props_root_str .cs_gset:cp } #1
- { \@@_cs_set:Ncpn \cs_gset:Npn #1 { } }
-\cs_new_protected:cpn { \c_@@_props_root_str .cs_gset_protected:Np } #1
- { \@@_cs_set:NNpn \cs_gset_protected:Npn #1 { } }
-\cs_new_protected:cpn { \c_@@_props_root_str .cs_gset_protected:cp } #1
- { \@@_cs_set:Ncpn \cs_gset_protected:Npn #1 { } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{.default:n, .default:V, .default:e, .default:o, .default:x}
-% Expansion is left to the internal functions.
-% \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_str .default:n } #1
- { \@@_default_set:n {#1} }
-\cs_new_protected:cpn { \c_@@_props_root_str .default:V } #1
- { \exp_args:NV \@@_default_set:n #1 }
-\cs_new_protected:cpn { \c_@@_props_root_str .default:e } #1
- { \exp_args:Ne \@@_default_set:n {#1} }
-\cs_new_protected:cpn { \c_@@_props_root_str .default:o } #1
- { \exp_args:No \@@_default_set:n {#1} }
-\cs_new_protected:cpn { \c_@@_props_root_str .default:x } #1
- { \exp_args:Nx \@@_default_set:n {#1} }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{.dim_set:N, .dim_set:c}
-% \begin{macro}{.dim_gset:N, .dim_gset:c}
-% Setting a variable is very easy: just pass the data along.
-% \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_str .dim_set:N } #1
- { \@@_variable_set_required:NnnN #1 { dim } { } n }
-\cs_new_protected:cpn { \c_@@_props_root_str .dim_set:c } #1
- { \@@_variable_set_required:cnnN {#1} { dim } { } n }
-\cs_new_protected:cpn { \c_@@_props_root_str .dim_gset:N } #1
- { \@@_variable_set_required:NnnN #1 { dim } { g } n }
-\cs_new_protected:cpn { \c_@@_props_root_str .dim_gset:c } #1
- { \@@_variable_set_required:cnnN {#1} { dim } { g } n }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{.fp_set:N, .fp_set:c}
-% \begin{macro}{.fp_gset:N, .fp_gset:c}
-% Setting a variable is very easy: just pass the data along.
-% \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_str .fp_set:N } #1
- { \@@_variable_set_required:NnnN #1 { fp } { } n }
-\cs_new_protected:cpn { \c_@@_props_root_str .fp_set:c } #1
- { \@@_variable_set_required:cnnN {#1} { fp } { } n }
-\cs_new_protected:cpn { \c_@@_props_root_str .fp_gset:N } #1
- { \@@_variable_set_required:NnnN #1 { fp } { g } n }
-\cs_new_protected:cpn { \c_@@_props_root_str .fp_gset:c } #1
- { \@@_variable_set_required:cnnN {#1} { fp } { g } n }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{.groups:n}
-% A single property to create groups of keys.
-% \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_str .groups:n } #1
- { \@@_groups_set:n {#1} }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{.inherit:n}
-% Nothing complex: only one variant at the moment!
-% \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_str .inherit:n } #1
- { \@@_inherit:n {#1} }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{.initial:n, .initial:V, .initial:e, .initial:o, .initial:x}
-% The standard hand-off approach.
-% \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_str .initial:n } #1
- { \@@_initialise:n {#1} }
-\cs_new_protected:cpn { \c_@@_props_root_str .initial:V } #1
- { \exp_args:NV \@@_initialise:n #1 }
-\cs_new_protected:cpn { \c_@@_props_root_str .initial:e } #1
- { \exp_args:Ne \@@_initialise:n {#1} }
-\cs_new_protected:cpn { \c_@@_props_root_str .initial:o } #1
- { \exp_args:No \@@_initialise:n {#1} }
-\cs_new_protected:cpn { \c_@@_props_root_str .initial:x } #1
- { \exp_args:Nx \@@_initialise:n {#1} }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{.int_set:N, .int_set:c}
-% \begin{macro}{.int_gset:N, .int_gset:c}
-% Setting a variable is very easy: just pass the data along.
-% \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_str .int_set:N } #1
- { \@@_variable_set_required:NnnN #1 { int } { } n }
-\cs_new_protected:cpn { \c_@@_props_root_str .int_set:c } #1
- { \@@_variable_set_required:cnnN {#1} { int } { } n }
-\cs_new_protected:cpn { \c_@@_props_root_str .int_gset:N } #1
- { \@@_variable_set_required:NnnN #1 { int } { g } n }
-\cs_new_protected:cpn { \c_@@_props_root_str .int_gset:c } #1
- { \@@_variable_set_required:cnnN {#1} { int } { g } n }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% .legacy_if_set:n, .legacy_if_gset:n,
-% .legacy_if_set_inverse:n, .legacy_if_gset_inverse:n
-% }
-% \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_str .legacy_if_set:n } #1
- { \@@_legacy_if_set:nn {#1} { } }
-\cs_new_protected:cpn { \c_@@_props_root_str .legacy_if_gset:n } #1
- { \@@_legacy_if_set:nn {#1} { g } }
-\cs_new_protected:cpn { \c_@@_props_root_str .legacy_if_set_inverse:n } #1
- { \@@_legacy_if_set_inverse:nn {#1} { } }
-\cs_new_protected:cpn { \c_@@_props_root_str .legacy_if_gset_inverse:n } #1
- { \@@_legacy_if_set_inverse:nn {#1} { g } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{.meta:n}
-% Making a meta is handled internally.
-% \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_str .meta:n } #1
- { \@@_meta_make:n {#1} }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{.meta:nn}
-% Meta with path: potentially lots of variants, but for the moment
-% no so many defined.
-% \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_str .meta:nn } #1
- { \@@_meta_make:nn #1 }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{.multichoice:}
-% \begin{macro}{.multichoices:nn, .multichoices:Vn, .multichoices:en, .multichoices:on, .multichoices:xn}
-% The same idea as \texttt{.choice:} and \texttt{.choices:nn}, but
-% where more than one choice is allowed.
-% \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_str .multichoice: }
- { \@@_multichoice_make: }
-\cs_new_protected:cpn { \c_@@_props_root_str .multichoices:nn } #1
- { \@@_multichoices_make:nn #1 }
-\cs_new_protected:cpn { \c_@@_props_root_str .multichoices:Vn } #1
- { \exp_args:NV \@@_multichoices_make:nn #1 }
-\cs_new_protected:cpn { \c_@@_props_root_str .multichoices:en } #1
- { \exp_args:Ne \@@_multichoices_make:nn #1 }
-\cs_new_protected:cpn { \c_@@_props_root_str .multichoices:on } #1
- { \exp_args:No \@@_multichoices_make:nn #1 }
-\cs_new_protected:cpn { \c_@@_props_root_str .multichoices:xn } #1
- { \exp_args:Nx \@@_multichoices_make:nn #1 }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{.muskip_set:N, .muskip_set:c, .muskip_gset:N, .muskip_gset:c}
-% Setting a variable is very easy: just pass the data along.
-% \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_str .muskip_set:N } #1
- { \@@_variable_set_required:NnnN #1 { muskip } { } n }
-\cs_new_protected:cpn { \c_@@_props_root_str .muskip_set:c } #1
- { \@@_variable_set_required:cnnN {#1} { muskip } { } n }
-\cs_new_protected:cpn { \c_@@_props_root_str .muskip_gset:N } #1
- { \@@_variable_set_required:NnnN #1 { muskip } { g } n }
-\cs_new_protected:cpn { \c_@@_props_root_str .muskip_gset:c } #1
- { \@@_variable_set_required:cnnN {#1} { muskip } { g } n }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{.prop_put:N, .prop_put:c, .prop_gput:N, .prop_gput:c}
-% Setting a variable is very easy: just pass the data along.
-% \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_str .prop_put:N } #1
- { \@@_prop_put:Nn #1 { } }
-\cs_new_protected:cpn { \c_@@_props_root_str .prop_put:c } #1
- { \@@_prop_put:cn {#1} { } }
-\cs_new_protected:cpn { \c_@@_props_root_str .prop_gput:N } #1
- { \@@_prop_put:Nn #1 { g } }
-\cs_new_protected:cpn { \c_@@_props_root_str .prop_gput:c } #1
- { \@@_prop_put:cn {#1} { g } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{.skip_set:N, .skip_set:c}
-% \begin{macro}{.skip_gset:N, .skip_gset:c}
-% Setting a variable is very easy: just pass the data along.
-% \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_str .skip_set:N } #1
- { \@@_variable_set_required:NnnN #1 { skip } { } n }
-\cs_new_protected:cpn { \c_@@_props_root_str .skip_set:c } #1
- { \@@_variable_set_required:cnnN {#1} { skip } { } n }
-\cs_new_protected:cpn { \c_@@_props_root_str .skip_gset:N } #1
- { \@@_variable_set_required:NnnN #1 { skip } { g } n }
-\cs_new_protected:cpn { \c_@@_props_root_str .skip_gset:c } #1
- { \@@_variable_set_required:cnnN {#1} { skip } { g } n }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{.str_set:N, .str_set:c}
-% \begin{macro}{.str_gset:N, .str_gset:c}
-% \begin{macro}{.str_set_e:N, .str_set_e:c}
-% \begin{macro}{.str_gset_e:N, .str_gset_e:c}
-% Setting a variable is very easy: just pass the data along.
-% \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_str .str_set:N } #1
- { \@@_variable_set:NnnN #1 { str } { } n }
-\cs_new_protected:cpn { \c_@@_props_root_str .str_set:c } #1
- { \@@_variable_set:cnnN {#1} { str } { } n }
-\cs_new_protected:cpn { \c_@@_props_root_str .str_set_e:N } #1
- { \@@_variable_set:NnnN #1 { str } { } e }
-\cs_new_protected:cpn { \c_@@_props_root_str .str_set_e:c } #1
- { \@@_variable_set:cnnN {#1} { str } { } e }
-\cs_new_protected:cpn { \c_@@_props_root_str .str_gset:N } #1
- { \@@_variable_set:NnnN #1 { str } { g } n }
-\cs_new_protected:cpn { \c_@@_props_root_str .str_gset:c } #1
- { \@@_variable_set:cnnN {#1} { str } { g } n }
-\cs_new_protected:cpn { \c_@@_props_root_str .str_gset_e:N } #1
- { \@@_variable_set:NnnN #1 { str } { g } e }
-\cs_new_protected:cpn { \c_@@_props_root_str .str_gset_e:c } #1
- { \@@_variable_set:cnnN {#1} { str } { g } e }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{.tl_set:N, .tl_set:c}
-% \begin{macro}{.tl_gset:N, .tl_gset:c}
-% \begin{macro}{.tl_set_e:N, .tl_set_e:c}
-% \begin{macro}{.tl_gset_e:N, .tl_gset_e:c}
-% Setting a variable is very easy: just pass the data along.
-% \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_str .tl_set:N } #1
- { \@@_variable_set:NnnN #1 { tl } { } n }
-\cs_new_protected:cpn { \c_@@_props_root_str .tl_set:c } #1
- { \@@_variable_set:cnnN {#1} { tl } { } n }
-\cs_new_protected:cpn { \c_@@_props_root_str .tl_set_e:N } #1
- { \@@_variable_set:NnnN #1 { tl } { } e }
-\cs_new_protected:cpn { \c_@@_props_root_str .tl_set_e:c } #1
- { \@@_variable_set:cnnN {#1} { tl } { } e }
-\cs_new_protected:cpn { \c_@@_props_root_str .tl_gset:N } #1
- { \@@_variable_set:NnnN #1 { tl } { g } n }
-\cs_new_protected:cpn { \c_@@_props_root_str .tl_gset:c } #1
- { \@@_variable_set:cnnN {#1} { tl } { g } n }
-\cs_new_protected:cpn { \c_@@_props_root_str .tl_gset_e:N } #1
- { \@@_variable_set:NnnN #1 { tl } { g } e }
-\cs_new_protected:cpn { \c_@@_props_root_str .tl_gset_e:c } #1
- { \@@_variable_set:cnnN {#1} { tl } { g } e }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{.undefine:}
-% Another simple wrapper.
-% \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_str .undefine: }
- { \@@_undefine: }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{.usage:n}
-% \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_str .usage:n } #1
- { \@@_usage:n {#1} }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{.value_forbidden:n}
-% \begin{macro}{.value_required:n}
-% These are very similar, so both call the same function.
-% \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_str .value_forbidden:n } #1
- { \@@_value_requirement:nn { forbidden } {#1} }
-\cs_new_protected:cpn { \c_@@_props_root_str .value_required:n } #1
- { \@@_value_requirement:nn { required } {#1} }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Setting keys}
-%
-% \begin{macro}
-% {
-% \keys_set:nn, \keys_set:nV, \keys_set:nv, \keys_set:ne,
-% \keys_set:no, \keys_set:nx,
-% \@@_set:nn
-% }
-% \begin{macro}{\@@_set:nnn}
-% A simple wrapper allowing for nesting.
-% \begin{macrocode}
-\cs_new_protected:Npn \keys_set:nn #1#2
- {
- \use:e
- {
- \bool_set_false:N \exp_not:N \l_@@_only_known_bool
- \bool_set_false:N \exp_not:N \l_@@_filtered_bool
- \bool_set_false:N \exp_not:N \l_@@_selective_bool
- \tl_set:Nn \exp_not:N \l_@@_relative_tl
- { \exp_not:N \q_@@_no_value }
- \@@_set:nn \exp_not:n { {#1} {#2} }
- \bool_if:NT \l_@@_only_known_bool
- { \bool_set_true:N \exp_not:N \l_@@_only_known_bool }
- \bool_if:NT \l_@@_filtered_bool
- { \bool_set_true:N \exp_not:N \l_@@_filtered_bool }
- \bool_if:NT \l_@@_selective_bool
- { \bool_set_true:N \exp_not:N \l_@@_selective_bool }
- \tl_set:Nn \exp_not:N \l_@@_relative_tl
- { \exp_not:o \l_@@_relative_tl }
- }
- }
-\cs_generate_variant:Nn \keys_set:nn { nV , nv , ne , no , nx }
-\cs_new_protected:Npn \@@_set:nn #1#2
- { \exp_args:No \@@_set:nnn \l_@@_module_str {#1} {#2} }
-\cs_new_protected:Npn \@@_set:nnn #1#2#3
- {
- \str_set:Ne \l_@@_module_str { \@@_trim_spaces:n {#2} }
- \keyval_parse:NNn \@@_set_keyval:n \@@_set_keyval:nn {#3}
- \str_set:Nn \l_@@_module_str {#1}
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \keys_set_known:nnN, \keys_set_known:nVN,
-% \keys_set_known:nvN, \keys_set_known:neN,
-% \keys_set_known:noN
-% }
-% \begin{macro}
-% {
-% \keys_set_known:nnnN, \keys_set_known:nVnN,
-% \keys_set_known:nvnN, \keys_set_known:nenN,
-% \keys_set_known:nonN
-% }
-% \begin{macro}{\@@_set_known:nnnnN}
-% \begin{macro}
-% {
-% \keys_set_known:nn, \keys_set_known:nV,
-% \keys_set_known:nv, \keys_set_known:ne,
-% \keys_set_known:no
-% }
-% \begin{macro}{\@@_set_known:nnn}
-% Setting known keys simply means setting the appropriate boolean, then
-% running the standard code. To allow for nested setting, any existing
-% value of \cs{l_@@_unused_clist} is saved on the stack and reset
-% afterwards. Note that for speed/simplicity reasons we use a \texttt{tl}
-% operation to set the \texttt{clist} here!
-% \begin{macrocode}
-\cs_new_protected:Npn \keys_set_known:nnN #1#2#3
- {
- \exp_args:No \@@_set_known:nnnnN
- \l_@@_unused_clist \q_@@_no_value {#1} {#2} #3
- }
-\cs_generate_variant:Nn \keys_set_known:nnN { nV , nv , ne , no }
-\cs_new_protected:Npn \keys_set_known:nnnN #1#2#3#4
- {
- \exp_args:No \@@_set_known:nnnnN
- \l_@@_unused_clist {#3} {#1} {#2} #4
- }
-\cs_generate_variant:Nn \keys_set_known:nnnN { nV , nv , ne , no }
-\cs_new_protected:Npn \@@_set_known:nnnnN #1#2#3#4#5
- {
- \clist_clear:N \l_@@_unused_clist
- \@@_set_known:nnn {#2} {#3} {#4}
- \__kernel_tl_set:Nx #5 { \exp_not:o \l_@@_unused_clist }
- \__kernel_tl_set:Nx \l_@@_unused_clist { \exp_not:n {#1} }
- }
-\cs_new_protected:Npn \keys_set_known:nn #1#2
- { \@@_set_known:nnn \q_@@_no_value {#1} {#2} }
-\cs_generate_variant:Nn \keys_set_known:nn { nV , nv , ne , no }
-\cs_new_protected:Npn \@@_set_known:nnn #1#2#3
- {
- \use:e
- {
- \bool_set_true:N \exp_not:N \l_@@_only_known_bool
- \bool_set_false:N \exp_not:N \l_@@_filtered_bool
- \bool_set_false:N \exp_not:N \l_@@_selective_bool
- \tl_set:Nn \exp_not:N \l_@@_relative_tl { \exp_not:n {#1} }
- \@@_set:nn \exp_not:n { {#2} {#3} }
- \bool_if:NF \l_@@_only_known_bool
- { \bool_set_false:N \exp_not:N \l_@@_only_known_bool }
- \bool_if:NT \l_@@_filtered_bool
- { \bool_set_true:N \exp_not:N \l_@@_filtered_bool }
- \bool_if:NT \l_@@_selective_bool
- { \bool_set_true:N \exp_not:N \l_@@_selective_bool }
- \tl_set:Nn \exp_not:N \l_@@_relative_tl
- { \exp_not:o \l_@@_relative_tl }
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \keys_set_exclude_groups:nnnN, \keys_set_exclude_groups:nnVN,
-% \keys_set_exclude_groups:nnvN, \keys_set_exclude_groups:nnoN
-% }
-% \begin{macro}
-% {
-% \keys_set_exclude_groups:nnnnN, \keys_set_exclude_groups:nnVnN,
-% \keys_set_exclude_groups:nnvnN, \keys_set_exclude_groups:nnonN
-% }
-% \begin{macro}{\@@_set_exclude_groups:nnnnnN}
-% \begin{macro}
-% {
-% \keys_set_exclude_groups:nnn, \keys_set_exclude_groups:nnV,
-% \keys_set_exclude_groups:nnv, \keys_set_exclude_groups:nno
-% }
-% \begin{macro}{\@@_set_exclude_groups:nnnn}
-% \begin{macro}
-% {
-% \keys_set_groups:nnn, \keys_set_groups:nnV, \keys_set_groups:nnv,
-% \keys_set_groups:nno
-% }
-% \begin{macro}{\@@_set_selective:nnn}
-% \begin{macro}{\@@_set_selective:nnnn}
-% The idea of setting keys in a selective manner again uses booleans
-% wrapped around the basic code. The comments on \cs{keys_set_known:nnN}
-% also apply here. We have a bit more shuffling to do to keep everything
-% nestable.
-% \begin{macrocode}
-\cs_new_protected:Npn \keys_set_exclude_groups:nnnN #1#2#3#4
- {
- \exp_args:No \@@_set_exclude_groups:nnnnnN
- \l_@@_unused_clist
- \q_@@_no_value {#1} {#2} {#3} #4
- }
-\cs_generate_variant:Nn \keys_set_exclude_groups:nnnN { nnV , nnv , nno }
-\cs_new_protected:Npn \keys_set_exclude_groups:nnnnN #1#2#3#4#5
- {
- \exp_args:No \@@_set_exclude_groups:nnnnnN
- \l_@@_unused_clist {#4} {#1} {#2} {#3} #5
- }
-\cs_generate_variant:Nn \keys_set_exclude_groups:nnnnN { nnV , nnv , nno }
-\cs_new_protected:Npn \@@_set_exclude_groups:nnnnnN #1#2#3#4#5#6
- {
- \clist_clear:N \l_@@_unused_clist
- \@@_set_exclude_groups:nnnn {#2} {#3} {#4} {#5}
- \__kernel_tl_set:Nx #6 { \exp_not:o \l_@@_unused_clist }
- \__kernel_tl_set:Nx \l_@@_unused_clist { \exp_not:n {#1} }
- }
-\cs_new_protected:Npn \keys_set_exclude_groups:nnn #1#2#3
- {\@@_set_exclude_groups:nnnn \q_@@_no_value {#1} {#2} {#3} }
-\cs_generate_variant:Nn \keys_set_exclude_groups:nnn { nnV , nnv , nno }
-\cs_new_protected:Npn \@@_set_exclude_groups:nnnn #1#2#3#4
- {
- \use:e
- {
- \bool_set_false:N \exp_not:N \l_@@_only_known_bool
- \bool_set_true:N \exp_not:N \l_@@_filtered_bool
- \bool_set_true:N \exp_not:N \l_@@_selective_bool
- \tl_set:Nn \exp_not:N \l_@@_relative_tl { \exp_not:n {#1} }
- \@@_set_selective:nnn \exp_not:n { {#2} {#3} {#4} }
- \bool_if:NT \l_@@_only_known_bool
- { \bool_set_true:N \exp_not:N \l_@@_only_known_bool }
- \bool_if:NF \l_@@_filtered_bool
- { \bool_set_false:N \exp_not:N \l_@@_filtered_bool }
- \bool_if:NF \l_@@_selective_bool
- { \bool_set_false:N \exp_not:N \l_@@_selective_bool }
- \tl_set:Nn \exp_not:N \l_@@_relative_tl
- { \exp_not:o \l_@@_relative_tl }
- }
- }
-\cs_new_protected:Npn \keys_set_groups:nnn #1#2#3
- {
- \use:e
- {
- \bool_set_false:N \exp_not:N \l_@@_only_known_bool
- \bool_set_false:N \exp_not:N \l_@@_filtered_bool
- \bool_set_true:N \exp_not:N \l_@@_selective_bool
- \tl_set:Nn \exp_not:N \l_@@_relative_tl
- { \exp_not:N \q_@@_no_value }
- \@@_set_selective:nnn \exp_not:n { {#1} {#2} {#3} }
- \bool_if:NT \l_@@_only_known_bool
- { \bool_set_true:N \exp_not:N \l_@@_only_known_bool }
- \bool_if:NF \l_@@_filtered_bool
- { \bool_set_true:N \exp_not:N \l_@@_filtered_bool }
- \bool_if:NF \l_@@_selective_bool
- { \bool_set_false:N \exp_not:N \l_@@_selective_bool }
- \tl_set:Nn \exp_not:N \l_@@_relative_tl
- { \exp_not:o \l_@@_relative_tl }
- }
- }
-\cs_generate_variant:Nn \keys_set_groups:nnn { nnV , nnv , nno }
-\cs_new_protected:Npn \@@_set_selective:nnn
- { \exp_args:No \@@_set_selective:nnnn \l_@@_selective_seq }
-\cs_new_protected:Npn \@@_set_selective:nnnn #1#2#3#4
- {
- \exp_args:NNe \seq_set_from_clist:Nn
- \l_@@_selective_seq { \tl_to_str:n {#3} }
- \@@_set:nn {#2} {#4}
- \tl_set:Nn \l_@@_selective_seq {#1}
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\keys_precompile:nnN}
-% A simple wrapper.
-% \begin{macrocode}
-\cs_new_protected:Npn \keys_precompile:nnN #1#2#3
- {
- \bool_set_true:N \l_@@_precompile_bool
- \tl_clear:N \l_@@_precompile_tl
- \keys_set:nn {#1} {#2}
- \bool_set_false:N \l_@@_precompile_bool
- \tl_set_eq:NN #3 \l_@@_precompile_tl
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_set_keyval:n, \@@_set_keyval:nn}
-% \begin{macro}{\@@_set_keyval:nnn, \@@_set_keyval:onn}
-% \begin{macro}{\@@_find_key_module:wNN}
-% \begin{macro}
-% {
-% \@@_find_key_module_auxi:Nw ,
-% \@@_find_key_module_auxii:Nw ,
-% \@@_find_key_module_auxiii:Nn ,
-% \@@_find_key_module_auxiv:Nw
-% }
-% \begin{macro}{\@@_set_selective:}
-% A shared system once again. First, set the current path and add a
-% default if needed. There are then checks to see if a value is
-% required or forbidden. If everything passes, move on to execute the
-% code.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_set_keyval:n #1
- {
- \bool_set_true:N \l_@@_no_value_bool
- \@@_set_keyval:onn \l_@@_module_str {#1} { }
- }
-\cs_new_protected:Npn \@@_set_keyval:nn #1#2
- {
- \bool_set_false:N \l_@@_no_value_bool
- \@@_set_keyval:onn \l_@@_module_str {#1} {#2}
- }
-% \end{macrocode}
-% The key path here can be fully defined, after which there is a search
-% for the key and module names: the user may have passed them with part
-% of what is actually the module (for our purposes) in the key name. As
-% that happens on a per-key basis, we use the stack approach to restore
-% the module name without a group.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_set_keyval:nnn #1#2#3
- {
- \__kernel_tl_set:Nx \l_keys_path_str
- {
- \tl_if_blank:nF {#1}
- { #1 / }
- \@@_trim_spaces:n {#2}
- }
- \str_clear:N \l_@@_module_str
- \str_clear:N \l_@@_inherit_str
- \exp_after:wN \@@_find_key_module:wNN \l_keys_path_str \s_@@_stop
- \l_@@_module_str \l_keys_key_str
- \tl_set_eq:NN \l_keys_key_tl \l_keys_key_str
- \@@_value_or_default:n {#3}
- \bool_if:NTF \l_@@_selective_bool
- \@@_set_selective:
- \@@_execute:
- \str_set:Nn \l_@@_module_str {#1}
- }
-\cs_generate_variant:Nn \@@_set_keyval:nnn { o }
-% \end{macrocode}
-% This function uses \cs{cs_set_nopar:Npe} internally for performance reasons,
-% the argument |#1| is already a string in every usage, so turning it into a
-% string again seems unnecessary.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_find_key_module:wNN #1 \s_@@_stop #2 #3
- {
- \@@_find_key_module_auxi:Nw #2 #1 \s_@@_nil \@@_find_key_module_auxii:Nw
- / \s_@@_nil \@@_find_key_module_auxiv:Nw #3
- }
-\cs_new_protected:Npn \@@_find_key_module_auxi:Nw #1 #2 / #3 \s_@@_nil #4
- {
- #4 #1 #2 \s_@@_mark #3 \s_@@_nil #4
- }
-\cs_new_protected:Npn \@@_find_key_module_auxii:Nw
- #1 #2 \s_@@_mark #3 \s_@@_nil \@@_find_key_module_auxii:Nw
- {
- \cs_set_nopar:Npe #1 { \tl_if_empty:NF #1 { #1 / } #2 }
- \@@_find_key_module_auxi:Nw #1 #3 \s_@@_nil \@@_find_key_module_auxiii:Nw
- }
-\cs_new_protected:Npn \@@_find_key_module_auxiii:Nw #1 #2 \s_@@_mark
- {
- \cs_set_nopar:Npe #1 { \tl_if_empty:NF #1 { #1 / } #2 }
- \@@_find_key_module_auxi:Nw #1
- }
-\cs_new_protected:Npn \@@_find_key_module_auxiv:Nw
- #1 #2 \s_@@_nil #3 \s_@@_mark
- \s_@@_nil \@@_find_key_module_auxiv:Nw #4
- {
- \cs_set_nopar:Npn #4 { #2 }
- }
-% \end{macrocode}
-% If selective setting is active, there are a number of possible sub-cases
-% to consider. The key name may not be known at all or if it is, it may not
-% have any groups assigned. There is then the question of whether the
-% selection is opt-in or opt-out.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_set_selective:
- {
- \cs_if_exist:cTF { \c_@@_groups_root_str \l_keys_path_str }
- {
- \clist_set_eq:Nc \l_@@_groups_clist
- { \c_@@_groups_root_str \l_keys_path_str }
- \@@_check_groups:
- }
- {
- \bool_if:NTF \l_@@_filtered_bool
- \@@_execute:
- \@@_store_unused:
- }
- }
-% \end{macrocode}
-% In the case where selective setting requires a comparison of the list
-% of groups which apply to a key with the list of those which have been
-% set active. That requires two mappings, and again a different outcome
-% depending on whether opt-in or opt-out is set.
-% It is safe to use \cs{clist_if_in:NnTF} because
-% both \cs{l_@@_selective_seq} and \cs{l_@@_groups_clist} contain the
-% groups as strings, without leading/trailing spaces in any item,
-% since the \pkg{l3clist} functions were applied to the result of
-% applying \cs{tl_to_str:n}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_check_groups:
- {
- \bool_set_false:N \l_@@_tmp_bool
- \seq_map_inline:Nn \l_@@_selective_seq
- {
- \clist_if_in:NnT \l_@@_groups_clist {##1}
- {
- \bool_set_true:N \l_@@_tmp_bool
- \seq_map_break:
- }
- }
- \bool_if:NTF \l_@@_tmp_bool
- {
- \bool_if:NTF \l_@@_filtered_bool
- \@@_store_unused:
- \@@_execute:
- }
- {
- \bool_if:NTF \l_@@_filtered_bool
- \@@_execute:
- \@@_store_unused:
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_value_or_default:n}
-% \begin{macro}{\@@_default_inherit:}
-% If a value is given, return it as |#1|, otherwise send a default if
-% available.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_value_or_default:n #1
- {
- \bool_if:NTF \l_@@_no_value_bool
- {
- \cs_if_exist:cTF { \c_@@_default_root_str \l_keys_path_str }
- {
- \tl_set_eq:Nc
- \l_keys_value_tl
- { \c_@@_default_root_str \l_keys_path_str }
- }
- {
- \tl_clear:N \l_keys_value_tl
- \cs_if_exist:cT
- { \c_@@_inherit_root_str \@@_parent:o \l_keys_path_str }
- { \@@_default_inherit: }
- }
- }
- { \tl_set:Nn \l_keys_value_tl {#1} }
- }
-\cs_new_protected:Npn \@@_default_inherit:
- {
- \clist_map_inline:cn
- { \c_@@_inherit_root_str \@@_parent:o \l_keys_path_str }
- {
- \cs_if_exist:cT
- { \c_@@_default_root_str ##1 / \l_keys_key_str }
- {
- \tl_set_eq:Nc
- \l_keys_value_tl
- { \c_@@_default_root_str ##1 / \l_keys_key_str }
- \clist_map_break:
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_execute:, \@@_execute_inherit:, \@@_execute_unknown:}
-% \begin{macro}[EXP]{\@@_execute:nn, \@@_execute:no}
-% \begin{macro}{\@@_store_unused:,\@@_store_unused_aux:}
-% Actually executing a key is done in two parts. First, look for the
-% key itself, then look for the \texttt{unknown} key with the same
-% path. If both of these fail, complain. What exactly happens if a key
-% is unknown depends on whether unknown keys are being skipped or if
-% an error should be raised.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_execute:
- {
- \cs_if_exist:cTF { \c_@@_code_root_str \l_keys_path_str }
- {
- \cs_if_exist_use:c { \c_@@_check_root_str \l_keys_path_str }
- \@@_execute:no \l_keys_path_str \l_keys_value_tl
- }
- {
- \cs_if_exist:cTF
- { \c_@@_inherit_root_str \@@_parent:o \l_keys_path_str }
- { \@@_execute_inherit: }
- { \@@_execute_unknown: }
- }
- }
-% \end{macrocode}
-% To deal with the case where there is no hit, we leave
-% \cs{@@_execute_unknown:} in the input stream and clean it up using the
-% break function: that avoids needing a boolean.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_execute_inherit:
- {
- \clist_map_inline:cn
- { \c_@@_inherit_root_str \@@_parent:o \l_keys_path_str }
- {
- \cs_if_exist:cT
- { \c_@@_code_root_str ##1 / \l_keys_key_str }
- {
- \str_set:Nn \l_@@_inherit_str {##1}
- \cs_if_exist_use:c { \c_@@_check_root_str ##1 / \l_keys_key_str }
- \@@_execute:no { ##1 / \l_keys_key_str } \l_keys_value_tl
- \clist_map_break:n \use_none:n
- }
- }
- \@@_execute_unknown:
- }
-\cs_new_protected:Npn \@@_execute_unknown:
- {
- \bool_if:NTF \l_@@_only_known_bool
- { \@@_store_unused: }
- {
- \cs_if_exist:cTF
- { \c_@@_code_root_str \l_@@_module_str / unknown }
- {
- \bool_if:NT \l_@@_no_value_bool
- {
- \cs_if_exist:cT
- { \c_@@_default_root_str \l_@@_module_str / unknown }
- {
- \tl_set_eq:Nc
- \l_keys_value_tl
- { \c_@@_default_root_str \l_@@_module_str / unknown }
- }
- }
- \@@_execute:no { \l_@@_module_str / unknown } \l_keys_value_tl
- }
- {
- \msg_error:nnee { keys } { unknown }
- \l_keys_path_str \l_@@_module_str
- }
- }
- }
-% \end{macrocode}
-% A key's code is in the control sequence with csname
-% \cs{c_@@_code_root_str} |#1|. We expand it once to get the
-% replacement text (with argument |#2|) and call \cs{use:n}
-% with this replacement as its argument. This ensures that any
-% undefined control sequence error in the key's code will lead to an
-% error message of the form |<argument>|\ldots{}\meta{control
-% sequence} in which one can read the (undefined) \meta{control
-% sequence} in full, rather than an error message that starts with the
-% potentially very long key name, which would make the (undefined)
-% \meta{control sequence} be truncated or sometimes completely hidden.
-% See \url{https://github.com/latex3/latex2e/issues/351}.
-% \begin{macrocode}
-\cs_new:Npn \@@_execute:nn #1#2
- { \@@_execute:no {#1} { \prg_do_nothing: #2 } }
-\cs_new:Npn \@@_execute:no #1#2
- {
- \exp_args:NNo \exp_args:No \use:n
- {
- \cs:w \c_@@_code_root_str #1 \exp_after:wN \cs_end:
- \exp_after:wN {#2}
- }
- }
-% \end{macrocode}
-% When there is no relative path, things here are easy: just save the key
-% name and value. When we are working with a relative path, first we
-% need to turn it into a string: that can't happen earlier as we need
-% to store \cs{q_@@_no_value}. Then, use a standard delimited approach to fish
-% out the partial path.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_store_unused:
- {
- \@@_quark_if_no_value:NTF \l_@@_relative_tl
- {
- \clist_put_right:Ne \l_@@_unused_clist
- {
- \l_keys_key_str
- \bool_if:NF \l_@@_no_value_bool
- { = { \exp_not:o \l_keys_value_tl } }
- }
- }
- {
- \tl_if_empty:NTF \l_@@_relative_tl
- {
- \clist_put_right:Ne \l_@@_unused_clist
- {
- \l_keys_path_str
- \bool_if:NF \l_@@_no_value_bool
- { = { \exp_not:o \l_keys_value_tl } }
- }
- }
- { \@@_store_unused_aux: }
- }
- }
-\cs_new_protected:Npn \@@_store_unused_aux:
- {
- \__kernel_tl_set:Nx \l_@@_relative_tl
- { \exp_args:No \@@_trim_spaces:n \l_@@_relative_tl }
- \use:e
- {
- \cs_set_protected:Npn \@@_store_unused:w
- ##1 \l_@@_relative_tl /
- ##2 \l_@@_relative_tl /
- ##3 \s_@@_stop
- }
- {
- \tl_if_blank:nF {##1}
- {
- \msg_error:nnee { keys } { bad-relative-key-path }
- \l_keys_path_str
- \l_@@_relative_tl
- }
- \clist_put_right:Ne \l_@@_unused_clist
- {
- \exp_not:n {##2}
- \bool_if:NF \l_@@_no_value_bool
- { = { \exp_not:o \l_keys_value_tl } }
- }
- }
- \use:e
- {
- \@@_store_unused:w \l_keys_path_str
- \l_@@_relative_tl / \l_@@_relative_tl /
- \s_@@_stop
- }
- }
-\cs_new_protected:Npn \@@_store_unused:w { }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_choice_find:n}
-% \begin{macro}[EXP]{\@@_choice_find:nn}
-% \begin{macro}[EXP]{\@@_multichoice_find:n}
-% Executing a choice has two parts. First, try the choice given, then
-% if that fails call the unknown key. That always exists, as it is created
-% when a choice is first made. So there is no need for any escape code.
-% For multiple choices, the same code ends up used in a mapping.
-% \begin{macrocode}
-\cs_new:Npn \@@_choice_find:n #1
- {
- \str_if_empty:NTF \l_@@_inherit_str
- { \@@_choice_find:nn \l_keys_path_str {#1} }
- {
- \@@_choice_find:nn
- { \l_@@_inherit_str / \l_keys_key_str } {#1}
- }
- }
-\cs_new:Npn \@@_choice_find:nn #1#2
- {
- \cs_if_exist:cTF { \c_@@_code_root_str #1 / \@@_trim_spaces:n {#2} }
- { \@@_execute:nn { #1 / \@@_trim_spaces:n {#2} } {#2} }
- { \@@_execute:nn { #1 / unknown } {#2} }
- }
-\cs_new:Npn \@@_multichoice_find:n #1
- { \clist_map_function:nN {#1} \@@_choice_find:n }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Utilities}
-%
-% \begin{macro}[EXP]{\@@_parent:o}
-% \begin{macro}[EXP]
-% {
-% \@@_parent_auxi:w ,
-% \@@_parent_auxii:w ,
-% \@@_parent_auxiii:n ,
-% \@@_parent_auxiv:w
-% }
-% Used to strip off the ending part of the key path after the last~|/|.
-% \begin{macrocode}
-\cs_new:Npn \@@_parent:o #1
- {
- \exp_after:wN \@@_parent_auxi:w #1 \q_nil \@@_parent_auxii:w
- / \q_nil \@@_parent_auxiv:w
- }
-\cs_new:Npn \@@_parent_auxi:w #1 / #2 \q_nil #3
- {
- #3 { #1 } #2 \q_nil #3
- }
-\cs_new:Npn \@@_parent_auxii:w #1 #2 \q_nil \@@_parent_auxii:w
- {
- #1 \@@_parent_auxi:w #2 \q_nil \@@_parent_auxiii:n
- }
-\cs_new:Npn \@@_parent_auxiii:n #1
- {
- / #1 \@@_parent_auxi:w
- }
-\cs_new:Npn \@@_parent_auxiv:w #1 \q_nil \@@_parent_auxiv:w
- {
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_trim_spaces:n}
-% \begin{macro}[EXP]
-% {
-% \@@_trim_spaces_auxi:w ,
-% \@@_trim_spaces_auxii:w ,
-% \@@_trim_spaces_auxiii:w
-% }
-% Space stripping has to allow for the fact that the key here might have
-% several parts, and spaces need to be stripped from each part. Since the key
-% name is turned into a string groups can't be stripped accidentally and the
-% precautions of \cs{tl_trim_spaces:n} aren't necessary, in this case it is
-% much faster to just directly strip spaces around |/|.
-% \begin{macrocode}
-\group_begin:
- \cs_set:Npn \@@_tmp:w #1
- {
- \cs_new:Npn \@@_trim_spaces:n ##1
- {
- \exp_after:wN \@@_trim_spaces_auxi:w \tl_to_str:n { / ##1 } /
- \s_@@_nil \@@_trim_spaces_auxi:w
- \s_@@_mark \@@_trim_spaces_auxii:w
- #1 / #1
- \s_@@_nil \@@_trim_spaces_auxii:w
- \s_@@_mark \@@_trim_spaces_auxiii:w
- }
- }
- \@@_tmp:w { ~ }
-\group_end:
-\cs_new:Npn \@@_trim_spaces_auxi:w #1 ~ / #2 \s_@@_nil #3
- {
- #3 #1 / #2 \s_@@_nil #3
- }
-\cs_new:Npn \@@_trim_spaces_auxii:w #1 / ~ #2 \s_@@_mark #3
- {
- #3 #1 / #2 \s_@@_mark #3
- }
-\cs_new:Npn \@@_trim_spaces_auxiii:w
- / #1 /
- \s_@@_nil \@@_trim_spaces_auxi:w
- \s_@@_mark \@@_trim_spaces_auxii:w
- /
- \s_@@_nil \@@_trim_spaces_auxii:w
- \s_@@_mark \@@_trim_spaces_auxiii:w
- {
- #1
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP,pTF]{\keys_if_exist:nn}
-% A utility for others to see if a key exists.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \keys_if_exist:nn #1#2 { p , T , F , TF }
- {
- \cs_if_exist:cTF
- { \c_@@_code_root_str \@@_trim_spaces:n { #1 / #2 } }
- { \prg_return_true: }
- { \prg_return_false: }
- }
-\prg_generate_conditional_variant:Nnn \keys_if_exist:nn { ne } { p , T , F , TF }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP,pTF]{\keys_if_choice_exist:nnn}
-% Just an alternative view on \cs{keys_if_exist:nnTF}.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \keys_if_choice_exist:nnn #1#2#3
- { p , T , F , TF }
- {
- \cs_if_exist:cTF
- { \c_@@_code_root_str \@@_trim_spaces:n { #1 / #2 / #3 } }
- { \prg_return_true: }
- { \prg_return_false: }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\keys_show:nn, \keys_log:nn}
-% \begin{macro}{\@@_show:Nnn}
-% \begin{macro}{\@@_show:n}
-% \begin{macro}{\@@_show:w}
-% \begin{macro}{\@@_show:Nw}
-% To show a key, show its code using a message.
-% \begin{macrocode}
-\cs_new_protected:Npn \keys_show:nn
- { \@@_show:Nnn \msg_show:nneeee }
-\cs_new_protected:Npn \keys_log:nn
- { \@@_show:Nnn \msg_log:nneeee }
-\cs_new_protected:Npn \@@_show:Nnn #1#2#3
- {
- #1 { keys } { show-key }
- { \@@_trim_spaces:n { #2 / #3 } }
- {
- \keys_if_exist:nnT {#2} {#3}
- {
- \exp_args:Nnf \msg_show_item_unbraced:nn { code }
- {
- \exp_args:Ne \@@_show:n
- {
- \exp_args:Nc \cs_replacement_spec:N
- {
- \c_@@_code_root_str
- \@@_trim_spaces:n { #2 / #3 }
- }
- }
- }
- }
- }
- { } { }
- }
-\cs_new:Npe \@@_show:n #1
- {
- \exp_not:N \@@_show:w
- #1
- \tl_to_str:n { \@@_precompile:n }
- #1
- \tl_to_str:n { \@@_precompile:n }
- \exp_not:N \s_@@_stop
- }
-\use:e
- {
- \cs_new:Npn \exp_not:N \@@_show:w
- #1 \tl_to_str:n { \@@_precompile:n }
- #2 \tl_to_str:n { \@@_precompile:n }
- #3 \exp_not:N \s_@@_stop
- }
- {
- \tl_if_blank:nTF {#2}
- {#1}
- { \@@_show:Nw #2 \s_@@_stop }
- }
-\use:e
- {
- \cs_new:Npn \exp_not:N \@@_show:Nw #1#2
- \c_right_brace_str \exp_not:N \s_@@_stop
- }
- {#2}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Messages}
-%
-% For when there is a need to complain.
-% \begin{macrocode}
-\msg_new:nnnn { keys } { bad-relative-key-path }
- { The~key~'#1'~is~not~inside~the~'#2'~path. }
- { The~key~'#1'~cannot~be~expressed~relative~to~path~'#2'. }
-\msg_new:nnnn { keys } { boolean-values-only }
- { Key~'#1'~accepts~boolean~values~only. }
- { The~key~'#1'~only~accepts~the~values~'true'~and~'false'. }
-\msg_new:nnnn { keys } { choice-unknown }
- { Key~'#1'~accepts~only~a~fixed~set~of~choices. }
- {
- The~key~'#1'~only~accepts~predefined~values,~
- and~'#2'~is~not~one~of~these.
- }
-\msg_new:nnnn { keys } { unknown }
- { The~key~'#1'~is~unknown~and~is~being~ignored. }
- {
- The~module~'#2'~does~not~have~a~key~called~'#1'.\\
- Check~that~you~have~spelled~the~key~name~correctly.
- }
-\msg_new:nnnn { keys } { nested-choice-key }
- { Attempt~to~define~'#1'~as~a~nested~choice~key. }
- {
- The~key~'#1'~cannot~be~defined~as~a~choice~as~the~parent~key~'#2'~is~
- itself~a~choice.
- }
-\msg_new:nnnn { keys } { value-forbidden }
- { The~key~'#1'~does~not~take~a~value. }
- {
- The~key~'#1'~should~be~given~without~a~value.\\
- The~value~'#2'~was~present:~the~key~will~be~ignored.
- }
-\msg_new:nnnn { keys } { value-required }
- { The~key~'#1'~requires~a~value. }
- {
- The~key~'#1'~must~have~a~value.\\
- No~value~was~present:~the~key~will~be~ignored.
- }
-\msg_new:nnn { keys } { show-key }
- {
- The~key~#1~
- \tl_if_empty:nTF {#2}
- { is~undefined. }
- { has~the~properties: #2 . }
- }
-\prop_gput:Nnn \g_msg_module_name_prop { keys } { LaTeX }
-\prop_gput:Nnn \g_msg_module_type_prop { keys } { }
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-%\end{implementation}
-%
-%\PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3legacy.dtx b/macros/latex/contrib/l3kernel/l3legacy.dtx
deleted file mode 100644
index bd56f1ed3a..0000000000
--- a/macros/latex/contrib/l3kernel/l3legacy.dtx
+++ /dev/null
@@ -1,161 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3legacy.dtx
-%
-% Copyright (C) 2019-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3legacy} module\\ Interfaces to legacy concepts^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% There are a small number of \TeX{} or \LaTeXe{} concepts which are not used
-% in \pkg{expl3} code but which need to be manipulated when working as a \LaTeXe{}
-% package. To allow these to be integrated cleanly into \pkg{expl3} code, a set
-% of legacy interfaces are provided here.
-%
-% \begin{function}[EXP,pTF]{\legacy_if:n}
-% \begin{syntax}
-% \cs{legacy_if_p:n} \Arg{name}
-% \cs{legacy_if:nTF} \Arg{name} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the \LaTeXe{}/plain \TeX{} conditional (generated by \tn{newif})
-% is \texttt{true} or \texttt{false} and branches accordingly. The
-% \meta{name} of the conditional should \emph{omit} the leading \texttt{if}.
-% \end{function}
-%
-% \begin{function}[added = 2021-05-10]
-% {
-% \legacy_if_set_true:n, \legacy_if_set_false:n,
-% \legacy_if_gset_true:n, \legacy_if_gset_false:n
-% }
-% \begin{syntax}
-% \cs{legacy_if_set_true:n} \Arg{name}
-% \cs{legacy_if_set_false:n} \Arg{name}
-% \end{syntax}
-% Sets the \LaTeXe{}/plain \TeX{} conditional |\if|\meta{name}
-% (generated by \tn{newif}) to be \texttt{true} or \texttt{false}.
-% \end{function}
-%
-% \begin{function}[added = 2021-05-10]{\legacy_if_set:nn, \legacy_if_gset:nn}
-% \begin{syntax}
-% \cs{legacy_if_set:nn} \Arg{name} \Arg{boolexpr}
-% \end{syntax}
-% Sets the \LaTeXe{}/plain \TeX{} conditional |\if|\meta{name}
-% (generated by \tn{newif}) to the result of evaluating the
-% \meta{boolean expression}.
-% \end{function}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3legacy} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=legacy>
-% \end{macrocode}
-%
-% \begin{macro}[EXP,pTF]{\legacy_if:n}
-% A friendly wrapper. We need to use the \cs{if:w} approach here, rather than
-% testing against \tn{iftrue}/\tn{iffalse} as the latter approach fails for
-% primitive conditionals such as \tn{ifmmode}. The \cs{reverse_if:N} here
-% means that we get a slightly more useful error if the name is undefined.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \legacy_if:n #1 { p , T , F , TF }
- {
- \exp_after:wN \reverse_if:N
- \cs:w if#1 \cs_end:
- \prg_return_false:
- \else:
- \prg_return_true:
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \legacy_if_set_true:n, \legacy_if_set_false:n,
-% \legacy_if_gset_true:n, \legacy_if_gset_false:n
-% }
-% A friendly wrapper.
-% \begin{macrocode}
-\cs_new_protected:Npn \legacy_if_set_true:n #1
- { \cs_set_eq:cN { if#1 } \if_true: }
-\cs_new_protected:Npn \legacy_if_set_false:n #1
- { \cs_set_eq:cN { if#1 } \if_false: }
-\cs_new_protected:Npn \legacy_if_gset_true:n #1
- { \cs_gset_eq:cN { if#1 } \if_true: }
-\cs_new_protected:Npn \legacy_if_gset_false:n #1
- { \cs_gset_eq:cN { if#1 } \if_false: }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\legacy_if_set:nn, \legacy_if_gset:nn}
-% A more elaborate wrapper.
-% \begin{macrocode}
-\cs_new_protected:Npn \legacy_if_set:nn #1#2
- {
- \bool_if:nTF {#2} \legacy_if_set_true:n \legacy_if_set_false:n
- {#1}
- }
-\cs_new_protected:Npn \legacy_if_gset:nn #1#2
- {
- \bool_if:nTF {#2} \legacy_if_gset_true:n \legacy_if_gset_false:n
- {#1}
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3luatex.dtx b/macros/latex/contrib/l3kernel/l3luatex.dtx
deleted file mode 100644
index 3d177f6345..0000000000
--- a/macros/latex/contrib/l3kernel/l3luatex.dtx
+++ /dev/null
@@ -1,750 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3luatex.dtx
-%
-% Copyright (C) 2010-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3luatex} module\\ \LuaTeX-specific functions^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% The \LuaTeX{} engine provides access to the \Lua{} programming language,
-% and with it access to the \enquote{internals} of \TeX{}. In order to use
-% this within the framework provided here, a family of functions is
-% available. When used with \pdfTeX{}, \pTeX{}, \upTeX{} or \XeTeX{} these raise an
-% error: use \cs{sys_if_engine_luatex:T} to avoid this. Details on using
-% \Lua{} with the \LuaTeX{} engine are given in the \LuaTeX{} manual.
-%
-% \section{Breaking out to \Lua{}}
-%
-% \begin{function}[EXP, added = 2018-06-18]{\lua_now:n, \lua_now:e}
-% \begin{syntax}
-% \cs{lua_now:n} \Arg{token list}
-% \end{syntax}
-% The \meta{token list} is first tokenized by \TeX{}, which includes
-% converting line ends to spaces in the usual \TeX{} manner and which
-% respects currently-applicable \TeX{} category codes. The resulting
-% \meta{\Lua{} input} is passed to the \Lua{} interpreter for processing.
-% Each \cs{lua_now:n} block is treated by \Lua{} as a separate chunk.
-% The \Lua{} interpreter executes the \meta{\Lua{} input} immediately,
-% and in an expandable manner.
-% \begin{texnote}
-% \cs{lua_now:e} is a macro wrapper around \tn{directlua}: when
-% \LuaTeX{} is in use two expansions are required to yield the
-% result of the \Lua{} code.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[added = 2018-06-18]{\lua_shipout_e:n, \lua_shipout:n}
-% \begin{syntax}
-% \cs{lua_shipout:n} \Arg{token list}
-% \end{syntax}
-% The \meta{token list} is first tokenized by \TeX{}, which includes
-% converting line ends to spaces in the usual \TeX{} manner and which
-% respects currently-applicable \TeX{} category codes. The resulting
-% \meta{\Lua{} input} is passed to the \Lua{} interpreter when the
-% current page is finalised (\emph{i.e.}~at shipout). Each
-% \cs{lua_shipout:n} block is treated by \Lua{} as a separate chunk.
-% The \Lua{} interpreter will execute the \meta{\Lua{} input} during the
-% page-building routine: no \TeX{} expansion of the \meta{\Lua{} input}
-% will occur at this stage.
-%
-% In the case of the \cs{lua_shipout_e:n} version the input is fully
-% expanded by \TeX{} in an \texttt{e}-type manner during the shipout
-% operation.
-% \begin{texnote}
-% At a \TeX{} level, the \meta{\Lua{} input} is stored as a
-% \enquote{whatsit}.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[EXP, added = 2015-06-29]{\lua_escape:n, \lua_escape:e}
-% \begin{syntax}
-% \cs{lua_escape:n} \Arg{token list}
-% \end{syntax}
-% Converts the \meta{token list} such that it can safely be passed to
-% \Lua{}: embedded backslashes, double and single quotes, and newlines
-% and carriage returns are escaped. This is done by prepending an extra
-% token consisting of a backslash with category code~$12$, and for the line
-% endings, converting them to |\n| and |\r|, respectively.
-% \begin{texnote}
-% \cs{lua_escape:e} is a macro wrapper around \tn{luaescapestring}:
-% when \LuaTeX{} is in use two expansions are required to yield the
-% result of the \Lua{} code.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[added = 2022-05-14]{\lua_load_module:n}
-% \begin{syntax}
-% \cs{lua_load_module:n} \Arg{Lua module name}
-% \end{syntax}
-% Loads a Lua module into the Lua interpreter.
-%
-% \cs{lua_now:n} passes its \Arg{token list} argument to the Lua interpreter
-% as a single line, with characters interpreted under the current catcode
-% regime. These two facts mean that \cs{lua_now:n} rarely behaves as expected
-% for larger pieces of code. Therefore, package authors should \textbf{not}
-% write significant amounts of Lua code in the arguments to \cs{lua_now:n}.
-% Instead, it is strongly recommended that they write the majorty of their Lua
-% code in a separate file, and then load it using \cs{lua_load_module:n}.
-% \begin{texnote}
-% This is a wrapper around the Lua call |require '|\meta{module}|'|.
-% \end{texnote}
-% \end{function}
-%
-% \section{Lua interfaces}
-%
-% As well as interfaces for \TeX{}, there are a small number of Lua functions
-% provided here.
-%
-% \begin{function}{ltx.utils}
-% Most public interfaces provided by the module are stored within the
-% |ltx.utils| table.
-% \end{function}
-%
-% \begin{function}{ltx.utils.filedump}
-% \begin{syntax}
-% \meta{dump}| = ltx.utils.filedump(|\meta{file}|,|\meta{offset}|,|\meta{length}|)| \\
-% \end{syntax}
-% Returns the uppercase hexadecimal representation of the content of the
-% \meta{file} read as bytes. If the \meta{length} is given, only this part
-% of the file is returned; similarly, one may specify the \meta{offset} from
-% the start of the file. If the \meta{length} is not given, the entire file
-% is read starting at the \meta{offset}.
-% \end{function}
-%
-% \begin{function}{ltx.utils.filemd5sum}
-% \begin{syntax}
-% \meta{hash}| = ltx.utils.filemd5sum(|\meta{file}|)| \\
-% \end{syntax}
-% Returns the MD5 sum of the file contents read as bytes; note that
-% the result will depend on the nature of the line endings used in the file,
-% in contrast to normal \TeX{} behaviour. If the \meta{file} is not found,
-% nothing is returned with \emph{no error raised}.
-% \end{function}
-%
-% \begin{function}{ltx.utils.filemoddate}
-% \begin{syntax}
-% \meta{date}| = ltx.utils.filemoddate(|\meta{file}|)| \\
-% \end{syntax}
-% Returns the date/time of last modification of the \meta{file} in the
-% format
-% \begin{quote}
-% |D:|\meta{year}\meta{month}\meta{day}\meta{hour}\meta{minute}^^A
-% \meta{second}\meta{offset}
-% \end{quote}
-% where the latter may be |Z| (UTC) or
-% \meta{plus-minus}\meta{hours}|'|\meta{minutes}|'|. If the \meta{file} is
-% not found, nothing is returned with \emph{no error raised}.
-% \end{function}
-%
-% \begin{function}{ltx.utils.filesize}
-% \begin{syntax}
-% |size = ltx.utils.filesize(|\meta{file}|)| \\
-% \end{syntax}
-% Returns the size of the \meta{file} in bytes. If the \meta{file} is not
-% found, nothing is returned with \emph{no error raised}.
-% \end{function}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3luatex} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \subsection{Breaking out to \Lua{}}
-%
-% \begin{macrocode}
-%<*tex>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=lua>
-% \end{macrocode}
-%
-% \begin{macro}[EXP]{\@@_escape:n, \@@_now:n, \@@_shipout:n}
-% Copies of primitives.
-% \begin{macrocode}
-\cs_new_eq:NN \@@_escape:n \tex_luaescapestring:D
-\cs_new_eq:NN \@@_now:n \tex_directlua:D
-\cs_new_eq:NN \@@_shipout:n \tex_latelua:D
-% \end{macrocode}
-% \end{macro}
-%
-% These functions are set up in \pkg{l3str} for bootstrapping: we want to
-% replace them with a \enquote{proper} version at this stage, so clean up.
-% \begin{macrocode}
-\cs_undefine:N \lua_escape:e
-\cs_undefine:N \lua_now:e
-% \end{macrocode}
-%
-% \begin{macro}[EXP]{\lua_now:n, \lua_now:e}
-% \begin{macro}{\lua_shipout_e:n, \lua_shipout:n}
-% \begin{macro}[EXP]{\lua_escape:n, \lua_escape:e}
-% Wrappers around the primitives.
-% \begin{macrocode}
-\cs_new:Npn \lua_now:e #1 { \@@_now:n {#1} }
-\cs_new:Npn \lua_now:n #1 { \lua_now:e { \exp_not:n {#1} } }
-\cs_new_protected:Npn \lua_shipout_e:n #1 { \@@_shipout:n {#1} }
-\cs_new_protected:Npn \lua_shipout:n #1
- { \lua_shipout_e:n { \exp_not:n {#1} } }
-\cs_new:Npn \lua_escape:e #1 { \@@_escape:n {#1} }
-\cs_new:Npn \lua_escape:n #1 { \lua_escape:e { \exp_not:n {#1} } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\lua_load_module:n}
-% Wrapper around |require'|\meta{module}|'|.
-% \begin{macrocode}
-\str_new:N \l_@@_err_msg_str
-\cs_new_protected:Npn \lua_load_module:n #1
- {
- \bool_if:nF { \@@_load_module_p:n { #1 } }
- {
- \msg_error:nnnV
- { luatex } { module-not-found } { #1 } \l_@@_err_msg_str
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% As with engines other than \LuaTeX{}
-% these have to be macros, we give them the same status in all cases.
-% When \LuaTeX{} is not in use, simply give an error message/
-% \begin{macrocode}
-\sys_if_engine_luatex:F
- {
- \clist_map_inline:nn
- {
- \lua_escape:n , \lua_escape:e ,
- \lua_now:n , \lua_now:e
- }
- {
- \cs_gset:Npn #1 ##1
- {
- \msg_expandable_error:nnn
- { luatex } { luatex-required } { #1 }
- }
- }
- \clist_map_inline:nn
- { \lua_shipout_e:n , \lua_shipout:n, \lua_load_module:n }
- {
- \cs_gset_protected:Npn #1 ##1
- {
- \msg_error:nnn
- { luatex } { luatex-required } { #1 }
- }
- }
- }
-% \end{macrocode}
-% \subsection{Messages}
-%
-% \begin{macrocode}
-\msg_new:nnnn { luatex } { luatex-required }
- { LuaTeX~engine~not~in~use!~Ignoring~#1. }
- {
- The~feature~you~are~using~is~only~available~
- with~the~LuaTeX~engine.~LaTeX3~ignored~'#1'.
- }
-
-\msg_new:nnnn { luatex } { module-not-found }
- { Lua~module~`#1'~not~found. }
- {
- The~file~`#1.lua'~could~not~be~found.~Please~ensure~
- that~the~file~was~properly~installed~and~that~the~
- filename~database~is~current. \\ \\
- The~Lua~loader~provided~this~additional~information: \\
- #2
- }
-
-\prop_gput:Nnn \g_msg_module_name_prop { luatex } { LaTeX }
-\prop_gput:Nnn \g_msg_module_type_prop { luatex } { }
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</tex>
-% \end{macrocode}
-%
-% \subsection{\Lua{} functions for internal use}
-%
-% \begin{macrocode}
-%<*lua>
-% \end{macrocode}
-%
-% Most of the emulation of \pdfTeX{} here is based heavily on Heiko Oberdiek's
-% \pkg{pdftexcmds} package.
-%
-% \begin{macro}{ltx.utils}
-% Create a table for the kernel's own use.
-% \begin{macrocode}
-ltx = ltx or {utils={}}
-ltx.utils = ltx.utils or { }
-local ltxutils = ltx.utils
-% \end{macrocode}
-% \end{macro}
-%
-% Local copies of global tables.
-% \begin{macrocode}
-local io = io
-local kpse = kpse
-local lfs = lfs
-local math = math
-local md5 = md5
-local os = os
-local string = string
-local tex = tex
-local texio = texio
-local tonumber = tonumber
-% \end{macrocode}
-%
-% Local copies of standard functions.
-% \begin{macrocode}
-local abs = math.abs
-local byte = string.byte
-local floor = math.floor
-local format = string.format
-local gsub = string.gsub
-local lfs_attr = lfs.attributes
-local open = io.open
-local os_date = os.date
-local setcatcode = tex.setcatcode
-local sprint = tex.sprint
-local cprint = tex.cprint
-local write = tex.write
-local write_nl = texio.write_nl
-local utf8_char = utf8.char
-local package_loaded = package.loaded
-local package_searchers = package.searchers
-local table_concat = table.concat
-
-local scan_int = token.scan_int or token.scan_integer
-local scan_string = token.scan_string
-local scan_keyword = token.scan_keyword
-local put_next = token.put_next
-local token_create = token.create
-local token_new = token.new
-local set_macro = token.set_macro
-% \end{macrocode}
-%
-% Since token.create only returns useful values after the tokens
-% has been added to TeX's hash table, we define a variant which
-% defines it first if necessary.
-% \begin{macrocode}
-local token_create_safe
-do
- local is_defined = token.is_defined
- local set_char = token.set_char
- local runtoks = tex.runtoks
- local let_token = token_create'let'
-
- function token_create_safe(s)
- local orig_token = token_create(s)
- if is_defined(s, true) then
- return orig_token
- end
- set_char(s, 0)
- local new_token = token_create(s)
- runtoks(function()
- put_next(let_token, new_token, orig_token)
- end)
- return new_token
- end
-end
-
-local true_tok = token_create_safe'prg_return_true:'
-local false_tok = token_create_safe'prg_return_false:'
-% \end{macrocode}
-% In Con\TeX{}t lmtx \texttt{token.command_id} does not exist,
-% but it can easily be emulated with Con\TeX{}t's \texttt{tokens.commands}.
-% \begin{macrocode}
-local command_id = token.command_id
-if not command_id and tokens and tokens.commands then
- local id_map = tokens.commands
- function command_id(name)
- return id_map[name]
- end
-end
-% \end{macrocode}
-%
-% Deal with Con\TeX{}t: doesn't use |kpse| library.
-% \begin{macrocode}
-local kpse_find = (resolvers and resolvers.findfile) or kpse.find_file
-% \end{macrocode}
-%
-% \begin{macro}[int]{escapehex}
-% An internal auxiliary to convert a string to the matching hex escape.
-% This works on a byte basis: extension to handled UTF-8 input is
-% covered in \pkg{pdftexcmds} but is not currently required here.
-% \begin{macrocode}
-local function escapehex(str)
- return (gsub(str, ".",
- function (ch) return format("%02X", byte(ch)) end))
-end
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{ltx.utils.filedump}
-% Similar comments here to the next function: read the file in binary mode
-% to avoid any line-end weirdness.
-% \begin{macrocode}
-local function filedump(name,offset,length)
- local file = kpse_find(name,"tex",true)
- if not file then return end
- local f = open(file,"rb")
- if not f then return end
- if offset and offset > 0 then
- f:seek("set", offset)
- end
- local data = f:read(length or 'a')
- f:close()
- return escapehex(data)
-end
-ltxutils.filedump = filedump
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[int]{md5.HEX}
-% Hash a string and return the hash in uppercase hexadecimal format.
-% In some engines, this is build-in. For traditional \LuaTeX{}, the conversion
-% to hexadecimal has to be done by us.
-% \begin{macrocode}
-local md5_HEX = md5.HEX
-if not md5_HEX then
- local md5_sum = md5.sum
- function md5_HEX(data)
- return escapehex(md5_sum(data))
- end
- md5.HEX = md5_HEX
-end
-% \end{macrocode}
-% \end{macro}
-% \begin{macro}{ltx.utils.filemd5sum}
-% Read an entire file and hash it: the hash function itself is a built-in.
-% As Lua is byte-based there is no work needed here in terms of UTF-8
-% (see \pkg{pdftexcmds} and how it handles strings that have passed through
-% \LuaTeX{}). The file is read in binary mode so that no line ending
-% normalisation occurs.
-% \begin{macrocode}
-local function filemd5sum(name)
- local file = kpse_find(name, "tex", true) if not file then return end
- local f = open(file, "rb") if not f then return end
-
- local data = f:read("*a")
- f:close()
- return md5_HEX(data)
-end
-ltxutils.filemd5sum = filemd5sum
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{ltx.utils.filemoddate}
-% There are two cases: If the C standard library is C99 compliant,
-% we can use |%z| to get the timezone in almost the right format.
-% We only have to add primes and replace a zero or missing offset
-% with |Z|.
-%
-% Of course this would be boring, so Windows does things differently.
-% There we have to manually calculate the offset.
-% See procedure \texttt{makepdftime} in \texttt{utils.c} of
-% \pdfTeX{}.
-% \begin{macrocode}
-local filemoddate
-if os_date'%z':match'^[+-]%d%d%d%d$' then
- local pattern = lpeg.Cs(16 *
- (lpeg.Cg(lpeg.S'+-' * '0000' * lpeg.Cc'Z')
- + 3 * lpeg.Cc"'" * 2 * lpeg.Cc"'"
- + lpeg.Cc'Z')
- * -1)
- function filemoddate(name)
- local file = kpse_find(name, "tex", true)
- if not file then return end
- local date = lfs_attr(file, "modification")
- if not date then return end
- return pattern:match(os_date("D:%Y%m%d%H%M%S%z", date))
- end
-else
- local function filemoddate(name)
- local file = kpse_find(name, "tex", true)
- if not file then return end
- local date = lfs_attr(file, "modification")
- if not date then return end
- local d = os_date("*t", date)
- local u = os_date("!*t", date)
- local off = 60 * (d.hour - u.hour) + d.min - u.min
- if d.year ~= u.year then
- if d.year > u.year then
- off = off + 1440
- else
- off = off - 1440
- end
- elseif d.yday ~= u.yday then
- if d.yday > u.yday then
- off = off + 1440
- else
- off = off - 1440
- end
- end
- local timezone
- if off == 0 then
- timezone = "Z"
- else
- if off < 0 then
- timezone = "-"
- off = -off
- else
- timezone = "+"
- end
- timezone = format("%s%02d'%02d'", timezone, hours // 60, hours % 60)
- end
- return format("D:%04d%02d%02d%02d%02d%02d%s",
- d.year, d.month, d.day, d.hour, d.min, d.sec, timezone)
- end
-end
-ltxutils.filemoddate = filemoddate
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{ltx.utils.filesize}
-% A simple disk lookup.
-% \begin{macrocode}
-local function filesize(name)
- local file = kpse_find(name, "tex", true)
- if file then
- local size = lfs_attr(file, "size")
- if size then
- return size
- end
- end
-end
-ltxutils.filesize = filesize
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[int]{luadef}
-% An internal function for defining control sequences form Lua which behave
-% like primitives. This acts as a wrapper around |token.set_lua| which accepts
-% a function instead of an index into the functions table.
-% \begin{macrocode}
-local luacmd do
- local set_lua = token.set_lua
- local undefined_cs = command_id'undefined_cs'
-
- if not context and not luatexbase then require'ltluatex' end
- if luatexbase then
- local new_luafunction = luatexbase.new_luafunction
- local functions = lua.get_functions_table()
- function luacmd(name, func, ...)
- local id
- local tok = token_create(name)
- if tok.command == undefined_cs then
- id = new_luafunction(name)
- set_lua(name, id, ...)
- else
- id = tok.index or tok.mode
- end
- functions[id] = func
- end
- elseif context then
- local register = context.functions.register
- local functions = context.functions.known
- function luacmd(name, func, ...)
- local tok = token_create(name)
- if tok.command == undefined_cs then
- token.set_lua(name, register(func), ...)
- else
- functions[tok.index or tok.mode] = func
- end
- end
- end
-end
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[int]{try_require}
-% Loads a Lua module. This function loads the module similarly to the standard
-% Lua global function |require|, with a few differences. On success,
-% |try_require| returns |true, module|. If the module cannot be found, it
-% returns |false, err_msg|. If the module is found, but something goes wrong
-% when loading it, the function throws an error.
-% \begin{macrocode}
-local function try_require(name)
- if package_loaded[name] then
- return true, package_loaded[name]
- end
-
- local failure_details = {}
- for _, searcher in ipairs(package_searchers) do
- local loader, data = searcher(name)
- if type(loader) == 'function' then
- package_loaded[name] = loader(name, data) or true
- return true, package_loaded[name]
- elseif type(loader) == 'string' then
- failure_details[#failure_details + 1] = loader
- end
- end
-
- return false, table_concat(failure_details, '\n')
-end
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_load_module_p:n}
-% Check to see if we can load a module using |require|. If we
-% can load the module, then we load it immediately. Otherwise, we save the
-% error message in |\l_@@_err_msg_str|.
-% \begin{macrocode}
-local char_given = command_id'char_given'
-local c_true_bool = token_create(1, char_given)
-local c_false_bool = token_create(0, char_given)
-local c_str_cctab = token_create('c_str_cctab').mode
-
-luacmd('@@_load_module_p:n', function()
- local success, result = try_require(scan_string())
- if success then
- set_macro(c_str_cctab, 'l_@@_err_msg_str', '')
- put_next(c_true_bool)
- else
- set_macro(c_str_cctab, 'l_@@_err_msg_str', result)
- put_next(c_false_bool)
- end
-end)
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Preserving iniTeX Lua data for runs}
-%
-% \begin{macrocode}
-%<@@=lua>
-% \end{macrocode}
-%
-% The Lua state is not dumped when a forat is written, therefore any Lua
-% variables filled doing format building need to be restored in order to
-% be accessible during normal runs.
-%
-% We provide some kernel-internal helpers for this. They will only be available if
-% \texttt{luatexbase} is available. This is not a big restriction though, because
-% Con\TeX{}t (which does not use \texttt{luatexbase}) does not load \pkg{expl3}
-% in the format.
-%
-% \begin{macrocode}
-local register_luadata, get_luadata
-
-if luatexbase then
- local register = token_create'@expl@luadata@bytecode'.index
- if status.ini_version then
-% \end{macrocode}
-%
-% \begin{macro}[int]{register_luadata}
-% \texttt{register_luadata} is only available during format generation.
-% It accept a string which uniquely identifies the data object and has to be
-% provided to retrieve it later. Additionally it accepts a function which is
-% called in the \texttt{pre_dump} callback and which has to return a string that
-% evaluates to a valid Lua object to be preserved.
-% \begin{macrocode}
- local luadata, luadata_order = {}, {}
-
- function register_luadata(name, func)
- if luadata[name] then
- error(format("LaTeX error: data name %q already in use", name))
- end
- luadata[name] = func
- luadata_order[#luadata_order + 1] = func and name
- end
-% \end{macrocode}
-% \end{macro}
-%
-% The actual work is done in \texttt{pre_dump}. The \texttt{luadata_order} is used
-% to ensure that the order is consistent over multiple runs.
-% \begin{macrocode}
- luatexbase.add_to_callback("pre_dump", function()
- if next(luadata) then
- local str = "return {"
- for i=1, #luadata_order do
- local name = luadata_order[i]
- str = format('%s[%q]=%s,', str, name, luadata[name]())
- end
- lua.bytecode[register] = assert(load(str .. "}"))
- end
- end, "ltx.luadata")
- else
-% \end{macrocode}
-%
-% \begin{macro}[int]{get_luadata}
-% \texttt{get_luadata} is only available if data should be restored.
-% It accept the identifier which was used when the data object was registered and
-% returns the associated object. Every object can only be retrieved once.
-% \begin{macrocode}
- local luadata = lua.bytecode[register]
- if luadata then
- lua.bytecode[register] = nil
- luadata = luadata()
- end
- function get_luadata(name)
- if not luadata then return end
- local data = luadata[name]
- luadata[name] = nil
- return data
- end
- end
-end
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</lua>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-%\end{implementation}
-%
-%\PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3msg.dtx b/macros/latex/contrib/l3kernel/l3msg.dtx
deleted file mode 100644
index 3acae8d111..0000000000
--- a/macros/latex/contrib/l3kernel/l3msg.dtx
+++ /dev/null
@@ -1,2443 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3msg.dtx
-%
-% Copyright (C) 2009-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3msg} module\\ Messages^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% Messages need to be passed to the user by modules, either when errors
-% occur or to indicate how the code is proceeding. The \pkg{l3msg}
-% module provides a consistent method for doing this (as opposed to
-% writing directly to the terminal or log).
-%
-% The system used by \pkg{l3msg} to create messages divides the process
-% into two distinct parts. Named messages are created in the first part
-% of the process; at this stage, no decision is made about the type of
-% output that the message will produce. The second part of the process
-% is actually producing a message. At this stage a choice of message
-% \emph{class} has to be made, for example \texttt{error},
-% \texttt{warning} or \texttt{info}.
-%
-% By separating out the creation and use of messages, several benefits
-% are available. First, the messages can be altered later without
-% needing details of where they are used in the code. This makes it
-% possible to alter the language used, the detail level and so on.
-% Secondly, the output which results from a given message can be
-% altered. This can be done on a message class, module or message name
-% basis. In this way, message behaviour can be altered and messages can
-% be entirely suppressed.
-%
-% \section{Creating new messages}
-%
-% All messages have to be created before they can be used.
-% The text of messages is automatically wrapped to the length
-% available in the console. As a result, formatting is only needed
-% where it helps to show meaning. In particular, |\\| may be
-% used to force a new line and \verb*|\ | forces an explicit space.
-% Additionally, |\{|, |\#|, |\}|, |\%| and |\~| can be used to produce
-% the corresponding character.
-%
-% Messages may be subdivided \emph{by one level} using the~|/|
-% character. This is used within the message filtering system to allow
-% for example the \LaTeX{} kernel messages to belong to the module
-% \texttt{LaTeX} while still being filterable at a more granular level.
-% Thus for example
-% \begin{verbatim}
-% \msg_new:nnnn { mymodule } { submodule / message } ...
-% \end{verbatim}
-% will allow to filter out specifically messages from the \texttt{submodule}.
-%
-% Some authors may find the need to include spaces as |~| characters
-% tedious. This can be avoided by locally reseting the cateogry code
-% of \verb*| |.
-% \begin{verbatim}
-% \char_set_catcode_space:n { `\ }
-% \msg_new:nnn { foo } { bar }
-% {Some message text using '#1' and usual message shorthands \{ \ \ \}.}
-% \char_set_catcode_ignore:n { `\ }
-% \end{verbatim}
-% although in general this may be confusing; simply writing the messages
-% using |~| characters is the method favored by the team.
-%
-% \begin{function}[updated = 2011-08-16]
-% {
-% \msg_new:nnnn, \msg_new:nnee,
-% \msg_new:nnn, \msg_new:nne
-% }
-% \begin{syntax}
-% \cs{msg_new:nnnn} \Arg{module} \Arg{message} \Arg{text} \Arg{more text}
-% \end{syntax}
-% Creates a \meta{message} for a given \meta{module}.
-% The message is defined to first give \meta{text} and then
-% \meta{more text} if the user requests it. If no \meta{more text} is
-% available then a standard text is given instead. Within \meta{text}
-% and \meta{more text} four parameters (|#1| to |#4|) can be used:
-% these will be supplied at the time the message is
-% used. An error is raised if the \meta{message} already exists.
-% \end{function}
-%
-% \begin{function}{\msg_set:nnnn, \msg_set:nnn}
-% \begin{syntax}
-% \cs{msg_set:nnnn} \Arg{module} \Arg{message} \Arg{text} \Arg{more text}
-% \end{syntax}
-% Sets up the text for a \meta{message} for a given \meta{module}.
-% The message is defined to first give \meta{text} and then
-% \meta{more text} if the user requests it. If no \meta{more text} is
-% available then a standard text is given instead. Within \meta{text}
-% and \meta{more text} four parameters (|#1| to |#4|) can be used:
-% these will be supplied at the time the message is used.
-% \end{function}
-%
-% \begin{function}[EXP, pTF, added = 2012-03-03]{\msg_if_exist:nn}
-% \begin{syntax}
-% \cs{msg_if_exist_p:nn} \Arg{module} \Arg{message}
-% \cs{msg_if_exist:nnTF} \Arg{module} \Arg{message} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests whether the \meta{message} for the \meta{module} is currently
-% defined.
-% \end{function}
-%
-% \section{Customizable information for message modules}
-%
-% \begin{function}[EXP, added = 2018-10-10]{\msg_module_name:n}
-% \begin{syntax}
-% \cs{msg_module_name:n} \Arg{module}
-% \end{syntax}
-% Expands to the public name of the \meta{module} as defined by
-% \cs{g_msg_module_name_prop} (or otherwise leaves the \meta{module}
-% unchanged).
-% \end{function}
-%
-% \begin{function}[EXP, added = 2018-10-10]{\msg_module_type:n}
-% \begin{syntax}
-% \cs{msg_module_type:n} \Arg{module}
-% \end{syntax}
-% Expands to the description which applies to the \meta{module},
-% for example a |Package| or |Class|. The information here is defined
-% in \cs{g_msg_module_type_prop}, and will default to |Package| if an
-% entry is not present.
-% \end{function}
-%
-% \begin{variable}[added = 2018-10-10]{\g_msg_module_name_prop}
-% Provides a mapping between the module name used for messages, and that
-% for documentation.
-% \end{variable}
-%
-% \begin{variable}[added = 2018-10-10]{\g_msg_module_type_prop}
-% Provides a mapping between the module name used for messages, and that
-% type of module. For example, for \LaTeX{}3 core messages, an empty entry
-% is set here meaning that they are not described using the standard
-% |Package| text.
-% \end{variable}
-%
-% \section{Contextual information for messages}
-%
-% \begin{function}[rEXP]{\msg_line_context:}
-% \begin{syntax}
-% \cs{msg_line_context:}
-% \end{syntax}
-% Prints the current line number when a message is given, and
-% thus suitable for giving context to messages. The number itself
-% is proceeded by the text |on line|.
-% \end{function}
-%
-% \begin{function}[EXP]{\msg_line_number:}
-% \begin{syntax}
-% \cs{msg_line_number:}
-% \end{syntax}
-% Prints the current line number when a message is given.
-% \end{function}
-%
-% \begin{function}[EXP]{\msg_fatal_text:n}
-% \begin{syntax}
-% \cs{msg_fatal_text:n} \Arg{module}
-% \end{syntax}
-% Produces the standard text
-% \begin{quote}
-% \ttfamily
-% Fatal Package \meta{module} Error
-% \end{quote}
-% This function can be redefined to alter the language in which the
-% message is given, using |#1| as the name of the \meta{module} to
-% be included.
-% \end{function}
-%
-% \begin{function}[EXP]{\msg_critical_text:n}
-% \begin{syntax}
-% \cs{msg_critical_text:n} \Arg{module}
-% \end{syntax}
-% Produces the standard text
-% \begin{quote}
-% \ttfamily
-% Critical Package \meta{module} Error
-% \end{quote}
-% This function can be redefined to alter the language in which the
-% message is given, using |#1| as the name of the \meta{module} to
-% be included.
-% \end{function}
-%
-% \begin{function}[EXP]{\msg_error_text:n}
-% \begin{syntax}
-% \cs{msg_error_text:n} \Arg{module}
-% \end{syntax}
-% Produces the standard text
-% \begin{quote}
-% \ttfamily
-% Package \meta{module} Error
-% \end{quote}
-% This function can be redefined to alter the language in which the
-% message is given, using |#1| as the name of the \meta{module} to
-% be included.
-% \end{function}
-%
-% \begin{function}[EXP]{\msg_warning_text:n}
-% \begin{syntax}
-% \cs{msg_warning_text:n} \Arg{module}
-% \end{syntax}
-% Produces the standard text
-% \begin{quote}
-% \ttfamily
-% Package \meta{module} Warning
-% \end{quote}
-% This function can be redefined to alter the language in which the
-% message is given, using |#1| as the name of the \meta{module} to
-% be included. The \meta{type} of \meta{module} may be adjusted:
-% |Package| is the standard outcome: see \cs{msg_module_type:n}.
-% \end{function}
-%
-% \begin{function}[EXP]{\msg_info_text:n}
-% \begin{syntax}
-% \cs{msg_info_text:n} \Arg{module}
-% \end{syntax}
-% Produces the standard text:
-% \begin{quote}
-% \ttfamily
-% Package \meta{module} Info
-% \end{quote}
-% This function can be redefined to alter the language in which the
-% message is given, using |#1| as the name of the \meta{module} to
-% be included. The \meta{type} of \meta{module} may be adjusted:
-% |Package| is the standard outcome: see \cs{msg_module_type:n}.
-% \end{function}
-%
-% \begin{function}[EXP,updated = 2018-09-30]{\msg_see_documentation_text:n}
-% \begin{syntax}
-% \cs{msg_see_documentation_text:n} \Arg{module}
-% \end{syntax}
-% Produces the standard text
-% \begin{quote}
-% \ttfamily
-%
-% See the \meta{module} documentation for further information.
-% \end{quote}
-% This function can be redefined to alter the language in which the
-% message is given, using |#1| as the name of the \meta{module} to
-% be included. The name of the \meta{module} is produced using
-% \cs{msg_module_name:n}.
-% \end{function}
-%
-% \section{Issuing messages}
-%
-% Messages behave differently depending on the message class. In all cases,
-% the message may be issued supplying~$0$ to~$4$ arguments. If the number of
-% arguments supplied here does not match the number in the definition of the
-% message, extra arguments are ignored, or empty arguments added (of
-% course the sense of the message may be impaired). The four arguments are
-% converted to strings before being added to the message text: the
-% \texttt{e}-type variants should be used to expand material.
-% Note that this expansion takes place with the standard definitions in
-% effect, which means that shorthands such as |\~| or |\\| are
-% \emph{not} available; instead one should use \cs{iow_char:N} |\~| and
-% \cs{iow_newline:}, respectively.
-% The following message classes exist:
-% \begin{itemize}
-% \item \texttt{fatal}, ending the \TeX{} run;
-% \item \texttt{critical}, ending the file being input;
-% \item \texttt{error}, interrupting the \TeX{} run without ending it;
-% \item \texttt{warning}, written to terminal and log file, for
-% important messages that may require corrections by the user;
-% \item \texttt{note} (less common than \texttt{info}) for important
-% information messages written to the terminal and log file;
-% \item \texttt{info} for normal information messages written to the log
-% file only;
-% \item \texttt{term} and \texttt{log} for un-decorated messages written
-% to the terminal and log file, or to the log file only;
-% \item \texttt{none} for suppressed messages.
-% \end{itemize}
-%
-% \begin{function}[updated = 2012-08-11]
-% {
-% \msg_fatal:nnnnnn ,
-% \msg_fatal:nnnnn ,
-% \msg_fatal:nnnn ,
-% \msg_fatal:nnn ,
-% \msg_fatal:nn ,
-% \msg_fatal:nnVV ,
-% \msg_fatal:nnVn ,
-% \msg_fatal:nnnV ,
-% \msg_fatal:nnV ,
-% \msg_fatal:nneeee ,
-% \msg_fatal:nneee ,
-% \msg_fatal:nnnee ,
-% \msg_fatal:nnee ,
-% \msg_fatal:nnne ,
-% \msg_fatal:nne
-% }
-% \begin{syntax}
-% \cs{msg_fatal:nnnnnn} \Arg{module} \Arg{message} \Arg{arg one} \Arg{arg two} \Arg{arg three} \Arg{arg four}
-% \end{syntax}
-% Issues \meta{module} error \meta{message}, passing \meta{arg one} to
-% \meta{arg four} to the text-creating functions. After issuing a
-% fatal error the \TeX{} run halts. No PDF file will be produced in
-% this case (DVI mode runs may produce a truncated DVI file).
-% \end{function}
-%
-% \begin{function}[updated = 2012-08-11]
-% {
-% \msg_critical:nnnnnn ,
-% \msg_critical:nnnnn ,
-% \msg_critical:nnnn ,
-% \msg_critical:nnn ,
-% \msg_critical:nn ,
-% \msg_critical:nnVV ,
-% \msg_critical:nnVn ,
-% \msg_critical:nnnV ,
-% \msg_critical:nnV ,
-% \msg_critical:nneeee ,
-% \msg_critical:nneee ,
-% \msg_critical:nnnee ,
-% \msg_critical:nnee ,
-% \msg_critical:nnne ,
-% \msg_critical:nne
-% }
-% \begin{syntax}
-% \cs{msg_critical:nnnnnn} \Arg{module} \Arg{message} \Arg{arg one} \Arg{arg two} \Arg{arg three} \Arg{arg four}
-% \end{syntax}
-% Issues \meta{module} error \meta{message}, passing \meta{arg one} to
-% \meta{arg four} to the text-creating functions. After issuing a
-% critical error, \TeX{} stops reading the current input file.
-% This may halt the \TeX{} run (if the current file is the main file)
-% or may abort reading a sub-file.
-% \begin{texnote}
-% The \TeX{} \tn{endinput} primitive is used to exit the file. In
-% particular, the rest of the current line remains in the input
-% stream.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[updated = 2012-08-11]
-% {
-% \msg_error:nnnnnn ,
-% \msg_error:nnnnn ,
-% \msg_error:nnnn ,
-% \msg_error:nnn ,
-% \msg_error:nn ,
-% \msg_error:nnVV ,
-% \msg_error:nnVn ,
-% \msg_error:nnnV ,
-% \msg_error:nnV ,
-% \msg_error:nneeee ,
-% \msg_error:nneee ,
-% \msg_error:nnnee ,
-% \msg_error:nnee ,
-% \msg_error:nnne ,
-% \msg_error:nne
-% }
-% \begin{syntax}
-% \cs{msg_error:nnnnnn} \Arg{module} \Arg{message} \Arg{arg one} \Arg{arg two} \Arg{arg three} \Arg{arg four}
-% \end{syntax}
-% Issues \meta{module} error \meta{message}, passing \meta{arg one} to
-% \meta{arg four} to the text-creating functions. The error
-% interrupts processing and issues the text at the terminal. After user
-% input, the run continues.
-% \end{function}
-%
-% \begin{function}[updated = 2012-08-11]
-% {
-% \msg_warning:nnnnnn ,
-% \msg_warning:nnnnn ,
-% \msg_warning:nnnn ,
-% \msg_warning:nnn ,
-% \msg_warning:nn ,
-% \msg_warning:nnVV ,
-% \msg_warning:nnVn ,
-% \msg_warning:nnnV ,
-% \msg_warning:nnV ,
-% \msg_warning:nneeee ,
-% \msg_warning:nneee ,
-% \msg_warning:nnnee ,
-% \msg_warning:nnee ,
-% \msg_warning:nnne ,
-% \msg_warning:nne
-% }
-% \begin{syntax}
-% \cs{msg_warning:nnnnnn} \Arg{module} \Arg{message} \Arg{arg one} \Arg{arg two} \Arg{arg three} \Arg{arg four}
-% \end{syntax}
-% Issues \meta{module} warning \meta{message}, passing \meta{arg one}
-% to \meta{arg four} to the text-creating functions. The warning text
-% is added to the log file and the terminal, but the \TeX{} run
-% is not interrupted.
-% \end{function}
-%
-% \begin{function}[added = 2021-05-18]
-% {
-% \msg_note:nnnnnn ,
-% \msg_note:nnnnn ,
-% \msg_note:nnnn ,
-% \msg_note:nnn ,
-% \msg_note:nn ,
-% \msg_note:nnVV ,
-% \msg_note:nnVn ,
-% \msg_note:nnnV ,
-% \msg_note:nnV ,
-% \msg_note:nneeee ,
-% \msg_note:nneee ,
-% \msg_note:nnnee ,
-% \msg_note:nnee ,
-% \msg_note:nnne ,
-% \msg_note:nne ,
-% \msg_info:nnnnnn ,
-% \msg_info:nnnnn ,
-% \msg_info:nnnn ,
-% \msg_info:nnn ,
-% \msg_info:nn ,
-% \msg_info:nnVV ,
-% \msg_info:nnVn ,
-% \msg_info:nnnV ,
-% \msg_info:nnV ,
-% \msg_info:nneeee ,
-% \msg_info:nneee ,
-% \msg_info:nnnee ,
-% \msg_info:nnee ,
-% \msg_info:nnne ,
-% \msg_info:nne
-% }
-% \begin{syntax}
-% \cs{msg_note:nnnnnn} \Arg{module} \Arg{message} \Arg{arg one} \Arg{arg two} \Arg{arg three} \Arg{arg four}
-% \cs{msg_info:nnnnnn} \Arg{module} \Arg{message} \Arg{arg one} \Arg{arg two} \Arg{arg three} \Arg{arg four}
-% \end{syntax}
-% Issues \meta{module} information \meta{message}, passing
-% \meta{arg one} to \meta{arg four} to the text-creating functions.
-% For the more common \cs{msg_info:nnnnnn}, the information text is
-% added to the log file only, while \cs{msg_note:nnnnnn} adds the
-% info text to both the log file and the terminal. The \TeX{} run is
-% not interrupted.
-% \end{function}
-%
-% \begin{function}[updated = 2012-08-11]
-% {
-% \msg_term:nnnnnn ,
-% \msg_term:nnnnn ,
-% \msg_term:nnnn ,
-% \msg_term:nnn ,
-% \msg_term:nn ,
-% \msg_term:nnVV ,
-% \msg_term:nnVn ,
-% \msg_term:nnnV ,
-% \msg_term:nnV ,
-% \msg_term:nneeee ,
-% \msg_term:nneee ,
-% \msg_term:nnnee ,
-% \msg_term:nnee ,
-% \msg_term:nnne ,
-% \msg_term:nne ,
-% \msg_log:nnnnnn ,
-% \msg_log:nnnnn ,
-% \msg_log:nnnn ,
-% \msg_log:nnn ,
-% \msg_log:nn ,
-% \msg_log:nnVV ,
-% \msg_log:nnVn ,
-% \msg_log:nnnV ,
-% \msg_log:nnV ,
-% \msg_log:nneeee ,
-% \msg_log:nneee ,
-% \msg_log:nnnee ,
-% \msg_log:nnee ,
-% \msg_log:nnne ,
-% \msg_log:nne
-% }
-% \begin{syntax}
-% \cs{msg_term:nnnnnn} \Arg{module} \Arg{message} \Arg{arg one} \Arg{arg two} \Arg{arg three} \Arg{arg four}
-% \cs{msg_log:nnnnnn} \Arg{module} \Arg{message} \Arg{arg one} \Arg{arg two} \Arg{arg three} \Arg{arg four}
-% \end{syntax}
-% Issues \meta{module} information \meta{message}, passing
-% \meta{arg one} to \meta{arg four} to the text-creating functions.
-% The output is briefer than \cs{msg_info:nnnnnn}, omitting for
-% instance the module name. It is added to the log file by
-% \cs{msg_log:nnnnnn} while \cs{msg_term:nnnnnn} also prints it on the
-% terminal.
-% \end{function}
-%
-% \begin{function}[updated = 2012-08-11]
-% {
-% \msg_none:nnnnnn ,
-% \msg_none:nnnnn ,
-% \msg_none:nnnn ,
-% \msg_none:nnn ,
-% \msg_none:nn ,
-% \msg_none:nnVV ,
-% \msg_none:nnVn ,
-% \msg_none:nnnV ,
-% \msg_none:nnV ,
-% \msg_none:nneeee ,
-% \msg_none:nneee ,
-% \msg_none:nnnee ,
-% \msg_none:nnee ,
-% \msg_none:nnne ,
-% \msg_none:nne
-% }
-% \begin{syntax}
-% \cs{msg_none:nnnnnn} \Arg{module} \Arg{message} \Arg{arg one} \Arg{arg two} \Arg{arg three} \Arg{arg four}
-% \end{syntax}
-% Does nothing: used as a message class to prevent any output at
-% all (see the discussion of message redirection).
-% \end{function}
-%
-% \subsection{Messages for showing material}
-%
-% \begin{function}[added = 2017-12-04]
-% {
-% \msg_show:nnnnnn ,
-% \msg_show:nnnnn ,
-% \msg_show:nnnn ,
-% \msg_show:nnn ,
-% \msg_show:nn ,
-% \msg_show:nnVV ,
-% \msg_show:nnVn ,
-% \msg_show:nnnV ,
-% \msg_show:nnV ,
-% \msg_show:nneeee ,
-% \msg_show:nneee ,
-% \msg_show:nnnee ,
-% \msg_show:nnee ,
-% \msg_show:nnne ,
-% \msg_show:nne
-% }
-% \begin{syntax}
-% \cs{msg_show:nnnnnn} \Arg{module} \Arg{message} \Arg{arg one} \Arg{arg two} \Arg{arg three} \Arg{arg four}
-% \end{syntax}
-% Issues \meta{module} information \meta{message}, passing \meta{arg
-% one} to \meta{arg four} to the text-creating functions. The
-% information text is shown on the terminal and the \TeX{} run is
-% interrupted in a manner similar to \cs{tl_show:n}. This is used in
-% conjunction with \cs{msg_show_item:n} and similar functions to print
-% complex variable contents completely. If the formatted text does
-% not contain |>~| at the start of a line, an additional line |>~.|
-% will be put at the end. In addition, a final period is added if not
-% present.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2017-12-04]
-% {\msg_show_item:n, \msg_show_item_unbraced:n, \msg_show_item:nn, \msg_show_item_unbraced:nn}
-% \begin{syntax}
-% \cs{seq_map_function:NN} \meta{seq} \cs{msg_show_item:n}
-% \cs{prop_map_function:NN} \meta{prop} \cs{msg_show_item:nn}
-% \end{syntax}
-% Used in the text of messages for \cs{msg_show:nnnnnn} to show or log
-% a list of items or key--value pairs. The output of
-% \cs{msg_show_item:n} produces a newline, the prefix |>|, two spaces,
-% then the braced string representation of its argument.
-% The two-argument versions separates the key and value using
-% \verb*| => |, and the \texttt{unbraced} versions don't print the
-% surrounding braces.
-%
-% These functions are suitable for usage with iterator functions like
-% \cs{seq_map_function:NN}, \cs{prop_map_function:NN}, etc. For
-% example, with a sequence \cs[no-index]{l_tmpa_seq} containing |a|,
-% |{b}| and |\c|,
-% \begin{verbatim}
-% \seq_map_function:NN \l_tmpa_seq \msg_show_item:n
-% \end{verbatim}
-% would expand to three lines:
-% \begin{quotation}
-% \noindent\verb*|> {a}|\\
-% \verb*|> {{b}}|\\
-% \verb*|> {\c }|
-% \end{quotation}
-% \end{function}
-%
-% \subsection{Expandable error messages}
-%
-% In very rare cases it may be necessary to produce errors in an
-% expansion-only context. The functions in this section should only be
-% used if there is no alternative approach using \cs{msg_error:nnnnnn}
-% or other non-expandable commands from the previous section. Despite
-% having a similar interface as non-expandable messages, expandable
-% errors must be handled internally very differently from normal error
-% messages, as none of the tools to print to the terminal or the log
-% file are expandable. As a result, short-hands such as |\{| or |\\| do
-% not work, and messages must be very short (with default settings,
-% they are truncated after approximately 50 characters). It is
-% advisable to ensure that the message is understandable even when
-% truncated, by putting the most important information up front.
-% Another particularity of expandable messages is that they
-% cannot be redirected or turned off by the user.
-%
-% \begin{function}[EXP, added = 2015-08-06, updated = 2019-02-28]
-% {
-% \msg_expandable_error:nnnnnn ,
-% \msg_expandable_error:nnnnn ,
-% \msg_expandable_error:nnnn ,
-% \msg_expandable_error:nnn ,
-% \msg_expandable_error:nn ,
-% \msg_expandable_error:nnffff ,
-% \msg_expandable_error:nnfff ,
-% \msg_expandable_error:nnff ,
-% \msg_expandable_error:nnf ,
-% }
-% \begin{syntax}
-% \cs{msg_expandable_error:nnnnnn} \Arg{module} \Arg{message} \Arg{arg one} \Arg{arg two} \Arg{arg three} \Arg{arg four}
-% \end{syntax}
-% Issues an \enquote{Undefined error} message from \TeX{} itself
-% using the undefined control sequence \cs{???} then prints
-% \enquote{! \meta{module}: }\meta{error message}, which should be
-% short. With default settings, anything beyond approximately $60$
-% characters long (or bytes in some engines) is cropped. A leading
-% space might be removed as well.
-% \end{function}
-%
-% \section{Redirecting messages}
-%
-% Each message has a \enquote{name}, which can be used to alter the behaviour
-% of the message when it is given. Thus we might have
-% \begin{verbatim}
-% \msg_new:nnnn { module } { my-message } { Some~text } { Some~more~text }
-% \end{verbatim}
-% to define a message, with
-% \begin{verbatim}
-% \msg_error:nn { module } { my-message }
-% \end{verbatim}
-% when it is used. With no filtering, this raises an error. However, we
-% could alter the behaviour with
-% \begin{verbatim}
-% \msg_redirect_class:nn { error } { warning }
-% \end{verbatim}
-% to turn all errors into warnings, or with
-% \begin{verbatim}
-% \msg_redirect_module:nnn { module } { error } { warning }
-% \end{verbatim}
-% to alter only messages from that module, or even
-% \begin{verbatim}
-% \msg_redirect_name:nnn { module } { my-message } { warning }
-% \end{verbatim}
-% to target just one message. Redirection applies first to individual messages,
-% then to messages from one module and finally to messages of one class. Thus
-% it is possible to select out an individual message for special treatment
-% even if the entire class is already redirected.
-%
-% Multiple redirections are possible. Redirections can be cancelled by
-% providing an empty argument for the target class. Redirection to a
-% missing class raises an error immediately. Infinite loops are
-% prevented by eliminating the redirection starting from the target of
-% the redirection that caused the loop to appear. Namely, if
-% redirections are requested as $A \to B$, $B \to C$ and $C \to A$ in
-% this order, then the $A \to B$ redirection is cancelled.
-%
-% \begin{function}[updated = 2012-04-27]{\msg_redirect_class:nn}
-% \begin{syntax}
-% \cs{msg_redirect_class:nn} \Arg{class one} \Arg{class two}
-% \end{syntax}
-% Changes the behaviour of messages of \meta{class one} so that they
-% are processed using the code for those of \meta{class two}.
-% Each \meta{class} can be one of \texttt{fatal}, \texttt{critical},
-% \texttt{error}, \texttt{warning}, \texttt{note}, \texttt{info},
-% \texttt{term}, \texttt{log}, \texttt{none}.
-% \end{function}
-%
-% \begin{function}[updated = 2012-04-27]{\msg_redirect_module:nnn}
-% \begin{syntax}
-% \cs{msg_redirect_module:nnn} \Arg{module} \Arg{class one} \Arg{class two}
-% \end{syntax}
-% Redirects message of \meta{class one} for \meta{module} to act as
-% though they were from \meta{class two}. Messages of \meta{class one}
-% from sources other than \meta{module} are not affected by this
-% redirection. This function can be used to make some messages
-% \enquote{silent} by default. For example, all of the
-% \texttt{warning} messages of \meta{module} could be turned off with:
-% \begin{verbatim}
-% \msg_redirect_module:nnn { module } { warning } { none }
-% \end{verbatim}
-% \end{function}
-%
-% \begin{function}[updated = 2012-04-27]{\msg_redirect_name:nnn}
-% \begin{syntax}
-% \cs{msg_redirect_name:nnn} \Arg{module} \Arg{message} \Arg{class}
-% \end{syntax}
-% Redirects a specific \meta{message} from a specific \meta{module} to
-% act as a member of \meta{class} of messages. No further redirection
-% is performed. This function can be used to make a selected message
-% \enquote{silent} without changing global parameters:
-% \begin{verbatim}
-% \msg_redirect_name:nnn { module } { annoying-message } { none }
-% \end{verbatim}
-% \end{function}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3msg} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=msg>
-% \end{macrocode}
-%
-% \begin{variable}{\l_@@_internal_tl}
-% A general scratch for the module.
-% \begin{macrocode}
-\tl_new:N \l_@@_internal_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_name_str, \l_@@_text_str}
-% Used to save module info when creating messages.
-% \begin{macrocode}
-\str_new:N \l_@@_name_str
-\str_new:N \l_@@_text_str
-% \end{macrocode}
-% \end{variable}
-%
-% \subsection{Internal auxiliaries}
-%
-% \begin{variable}{\s_@@_mark,\s_@@_stop}
-% Internal scan marks.
-% \begin{macrocode}
-\scan_new:N \s_@@_mark
-\scan_new:N \s_@@_stop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[EXP]{\@@_use_none_delimit_by_s_stop:w}
-% Functions to gobble up to a scan mark.
-% \begin{macrocode}
-\cs_new:Npn \@@_use_none_delimit_by_s_stop:w #1 \s_@@_stop { }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Creating messages}
-%
-% Messages are created and used separately, so there two parts to
-% the code here. First, a mechanism for creating message text.
-% This is pretty simple, as there is not actually a lot to do.
-%
-% \begin{variable}{\c_@@_text_prefix_tl, \c_@@_more_text_prefix_tl}
-% Locations for the text of messages.
-% \begin{macrocode}
-\tl_const:Nn \c_@@_text_prefix_tl { msg~text~>~ }
-\tl_const:Nn \c_@@_more_text_prefix_tl { msg~extra~text~>~ }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[EXP,pTF]{\msg_if_exist:nn}
-% Test whether the control sequence containing the message text exists
-% or not.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \msg_if_exist:nn #1#2 { p , T , F , TF }
- {
- \cs_if_exist:cTF { \c_@@_text_prefix_tl #1 / #2 }
- { \prg_return_true: } { \prg_return_false: }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_chk_if_free:nn}
-% This auxiliary is similar to \cs{__kernel_chk_if_free_cs:N}, and is used when
-% defining messages with \cs{msg_new:nnnn}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_chk_free:nn #1#2
- {
- \msg_if_exist:nnT {#1} {#2}
- {
- \msg_error:nnnn { msg } { already-defined }
- {#1} {#2}
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \msg_new:nnnn, \msg_new:nnee, \msg_new:nnxx,
-% \msg_new:nnn, \msg_new:nne, \msg_new:nnx
-% }
-% \begin{macro}{\msg_set:nnnn, \msg_set:nnn}
-% Setting a message simply means saving the appropriate text
-% into two functions. A sanity check first.
-% \begin{macrocode}
-\cs_new_protected:Npn \msg_new:nnnn #1#2#3#4
- {
- \@@_chk_free:nn {#1} {#2}
- \cs_gset:cpn { \c_@@_text_prefix_tl #1 / #2 }
- ##1##2##3##4 {#3}
- \cs_gset:cpn { \c_@@_more_text_prefix_tl #1 / #2 }
- ##1##2##3##4 {#4}
- }
-\cs_generate_variant:Nn \msg_new:nnnn { nnee , nnxx }
-\cs_new_protected:Npn \msg_new:nnn #1#2#3
- { \msg_new:nnnn {#1} {#2} {#3} { } }
-\cs_generate_variant:Nn \msg_new:nnn { nne , nnx }
-\cs_new_protected:Npn \msg_set:nnnn #1#2#3#4
- {
- \cs_set:cpn { \c_@@_text_prefix_tl #1 / #2 }
- ##1##2##3##4 {#3}
- \cs_set:cpn { \c_@@_more_text_prefix_tl #1 / #2 }
- ##1##2##3##4 {#4}
- }
-\cs_new_protected:Npn \msg_set:nnn #1#2#3
- { \msg_set:nnnn {#1} {#2} {#3} { } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Messages: support functions and text}
-%
-% \begin{variable}
-% {
-% \c_@@_coding_error_text_tl ,
-% \c_@@_continue_text_tl ,
-% \c_@@_critical_text_tl ,
-% \c_@@_fatal_text_tl ,
-% \c_@@_help_text_tl ,
-% \c_@@_no_info_text_tl ,
-% \c_@@_on_line_text_tl ,
-% \c_@@_return_text_tl ,
-% \c_@@_trouble_text_tl
-% }
-% Simple pieces of text for messages.
-% \begin{macrocode}
-\tl_const:Nn \c_@@_coding_error_text_tl
- {
- This~is~a~coding~error.
- \\ \\
- }
-\tl_const:Nn \c_@@_continue_text_tl
- { Type~<return>~to~continue }
-\tl_const:Nn \c_@@_critical_text_tl
- { Reading~the~current~file~'\g_file_curr_name_str'~will~stop. }
-\tl_const:Nn \c_@@_fatal_text_tl
- { This~is~a~fatal~error:~LaTeX~will~abort. }
-\tl_const:Nn \c_@@_help_text_tl
- { For~immediate~help~type~H~<return> }
-\tl_const:Nn \c_@@_no_info_text_tl
- {
- LaTeX~does~not~know~anything~more~about~this~error,~sorry.
- \c_@@_return_text_tl
- }
-\tl_const:Nn \c_@@_on_line_text_tl { on~line }
-\tl_const:Nn \c_@@_return_text_tl
- {
- \\ \\
- Try~typing~<return>~to~proceed.
- \\
- If~that~doesn't~work,~type~X~<return>~to~quit.
- }
-\tl_const:Nn \c_@@_trouble_text_tl
- {
- \\ \\
- More~errors~will~almost~certainly~follow: \\
- the~LaTeX~run~should~be~aborted.
- }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\msg_line_number:, \msg_line_context:}
-% For writing the line number nicely. \cs{msg_line_context:} was set up
-% earlier, so this is not \texttt{new}.
-% \begin{macrocode}
-\cs_new:Npn \msg_line_number: { \int_use:N \tex_inputlineno:D }
-\cs_gset:Npn \msg_line_context:
- {
- \c_@@_on_line_text_tl
- \c_space_tl
- \msg_line_number:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Showing messages: low level mechanism}
-%
-% \begin{macro}{\@@_interrupt:Nnnn}
-% \begin{macro}{\@@_no_more_text:nnnn}
-% The low-level interruption macro is rather opaque, unfortunately.
-% Depending on the availability of more information there is a choice
-% of how to set up the further help. We feed the extra help text and
-% the message itself to a wrapping auxiliary, in this order because we
-% must first setup \TeX{}'s \tn{errhelp} register before issuing an
-% \tn{errmessage}. To deal with the various cases of critical or fatal
-% errors with and without help text, there is a bit of argument-passing
-% to do.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_interrupt:NnnnN #1#2#3#4#5
- {
- \str_set:Ne \l_@@_text_str { #1 {#2} }
- \str_set:Ne \l_@@_name_str { \msg_module_name:n {#2} }
- \cs_if_eq:cNTF
- { \c_@@_more_text_prefix_tl #2 / #3 }
- \@@_no_more_text:nnnn
- {
- \@@_interrupt_wrap:nnn
- { \use:c { \c_@@_text_prefix_tl #2 / #3 } #4 }
- { \c_@@_continue_text_tl }
- {
- \c_@@_no_info_text_tl
- \tl_if_empty:NF #5
- { \\ \\ #5 }
- }
- }
- {
- \@@_interrupt_wrap:nnn
- { \use:c { \c_@@_text_prefix_tl #2 / #3 } #4 }
- { \c_@@_help_text_tl }
- {
- \use:c { \c_@@_more_text_prefix_tl #2 / #3 } #4
- \tl_if_empty:NF #5
- { \\ \\ #5 }
- }
- }
- }
-\cs_new:Npn \@@_no_more_text:nnnn #1#2#3#4 { }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_interrupt_wrap:nnn}
-% \begin{macro}{\@@_interrupt_text:n, \@@_interrupt_more_text:n}
-% First setup \TeX{}'s \tn{errhelp} register with the extra help |#1|,
-% then build a nice-looking error message with |#2|. Everything is
-% done using \texttt{e}-type expansion as the new line markers are
-% different for the two type of text and need to be correctly set up.
-% The auxiliary \cs{@@_interrupt_more_text:n} receives its argument
-% as a line-wrapped string, which is thus unaffected by expansion.
-% We ave to split the main text into two parts as only the \enquote{message}
-% itself is wrapped with a leader: the generic help is wrapped at full
-% width. We also have to allow for the two characters used by \tn{errmessage}
-% itself.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_interrupt_wrap:nnn #1#2#3
- {
- \iow_wrap:nnnN { \\ #3 } { } { } \@@_interrupt_more_text:n
- \group_begin:
- \int_sub:Nn \l_iow_line_count_int { 2 }
- \iow_wrap:nenN { \l_@@_text_str : ~ #1 }
- {
- ( \l_@@_name_str )
- \prg_replicate:nn
- {
- \str_count:N \l_@@_text_str
- - \str_count:N \l_@@_name_str
- + 2
- }
- { ~ }
- }
- { } \@@_interrupt_text:n
- \iow_wrap:nnnN { \l_@@_internal_tl \\ \\ #2 } { } { }
- \@@_interrupt:n
- }
-\cs_new_protected:Npn \@@_interrupt_text:n #1
- {
- \group_end:
- \tl_set:Nn \l_@@_internal_tl {#1}
- }
-\cs_new_protected:Npn \@@_interrupt_more_text:n #1
- { \exp_args:Ne \tex_errhelp:D { #1 \iow_newline: } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_interrupt:n}
-% The business end of the process starts by producing some visual
-% separation of the message from the main part of the log. The error
-% message needs to be printed with everything made
-% \enquote{invisible}: \TeX{}'s own information involves the macro in
-% which \tn{errmessage} is called, and the end of the argument of the
-% \tn{errmessage}, including the closing brace. We use an active |!|
-% to call the \tn{errmessage} primitive, and end its argument with
-% \cs{use_none:n} \Arg{spaces} which fills the output with spaces. Two
-% trailing closing braces are turned into spaces to hide them as well.
-% The group in which we alter the definition of the active |!| is
-% closed before producing the message: this ensures that tokens
-% inserted by typing |I| in the command-line are inserted after
-% the message is entirely cleaned up.
-%
-% The \cs{__kernel_iow_with:Nnn} auxiliary, defined in \pkg{l3file}, expects
-% an \meta{integer variable}, an integer \meta{value}, and some
-% \meta{code}. It runs the \meta{code} after ensuring that the
-% \meta{integer variable} takes the given \meta{value}, then restores
-% the former value of the \meta{integer variable} if needed. We use
-% it to ensure that the \tn{newlinechar} is $10$, as needed for
-% \cs{iow_newline:} to work, and that \tn{errorcontextlines} is $-1$,
-% to avoid showing irrelevant context. Note that restoring the former
-% value of these integers requires inserting tokens after the
-% \tn{errmessage}, which go in the way of tokens which could be
-% inserted by the user. This is unavoidable.
-% \begin{macrocode}
-\group_begin:
- \char_set_lccode:nn { 38 } { 32 } % &
- \char_set_lccode:nn { 46 } { 32 } % .
- \char_set_lccode:nn { 123 } { 32 } % {
- \char_set_lccode:nn { 125 } { 32 } % }
- \char_set_catcode_active:N \&
-\tex_lowercase:D
- {
- \group_end:
- \cs_new_protected:Npn \@@_interrupt:n #1
- {
- \iow_term:n { }
- \__kernel_iow_with:Nnn \tex_newlinechar:D { `\^^J }
- {
- \__kernel_iow_with:Nnn \tex_errorcontextlines:D { -1 }
- {
- \group_begin:
- \cs_set_protected:Npn &
- {
- \tex_errmessage:D
- {
- #1
- \use_none:n
- { ............................................ }
- }
- }
- \exp_after:wN
- \group_end:
- &
- }
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Displaying messages}
-%
-% \LaTeX{} is handling error messages and so the \TeX{} ones are disabled.
-% \begin{macrocode}
-\int_gset:Nn \tex_errorcontextlines:D { -1 }
-% \end{macrocode}
-%
-% \begin{macro}[EXP]
-% {
-% \msg_fatal_text:n ,
-% \msg_critical_text:n ,
-% \msg_error_text:n ,
-% \msg_warning_text:n ,
-% \msg_info_text:n
-% }
-% \begin{macro}[EXP]{\@@_text:nn}
-% \begin{macro}[EXP]{\@@_text:n}
-% A function for issuing messages: both the text and order could
-% in principle vary. The module name may be empty for kernel messages,
-% hence the slightly contorted code path for a space.
-% \begin{macrocode}
-\cs_new:Npn \msg_fatal_text:n #1
- {
- Fatal ~
- \msg_error_text:n {#1}
- }
-\cs_new:Npn \msg_critical_text:n #1
- {
- Critical ~
- \msg_error_text:n {#1}
- }
-\cs_new:Npn \msg_error_text:n #1
- { \@@_text:nn {#1} { Error } }
-\cs_new:Npn \msg_warning_text:n #1
- { \@@_text:nn {#1} { Warning } }
-\cs_new:Npn \msg_info_text:n #1
- { \@@_text:nn {#1} { Info } }
-\cs_new:Npn \@@_text:nn #1#2
- {
- \exp_args:Nf \@@_text:n { \msg_module_type:n {#1} }
- \exp_args:Nf \@@_text:n { \msg_module_name:n {#1} }
- #2
- }
-\cs_new:Npn \@@_text:n #1
- {
- \tl_if_blank:nF {#1}
- { #1 ~ }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{variable}{\g_msg_module_name_prop, \g_msg_module_type_prop}
-% For storing public module information: the kernel data is set up
-% in advance.
-% \begin{macrocode}
-\prop_new:N \g_msg_module_name_prop
-\prop_new:N \g_msg_module_type_prop
-\prop_gput:Nnn \g_msg_module_type_prop { LaTeX } { }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[EXP]{\msg_module_type:n}
-% Contextual footer information, with the potential to give modules an
-% alternative name.
-% \begin{macrocode}
-\cs_new:Npn \msg_module_type:n #1
- {
- \prop_if_in:NnTF \g_msg_module_type_prop {#1}
- { \prop_item:Nn \g_msg_module_type_prop {#1} }
- { Package }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\msg_module_name:n, \msg_see_documentation_text:n}
-% Contextual footer information, with the potential to give modules an
-% alternative name.
-% \begin{macrocode}
-\cs_new:Npn \msg_module_name:n #1
- {
- \prop_if_in:NnTF \g_msg_module_name_prop {#1}
- { \prop_item:Nn \g_msg_module_name_prop {#1} }
- {#1}
- }
-\cs_new:Npn \msg_see_documentation_text:n #1
- {
- See~the~ \msg_module_name:n {#1} ~
- documentation~for~further~information.
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_class_new:nn}
-% \begin{macrocode}
-\group_begin:
- \cs_set_protected:Npn \@@_class_new:nn #1#2
- {
- \prop_new:c { l_@@_redirect_ #1 _prop }
- \cs_new_protected:cpn { @@_ #1 _code:nnnnnn }
- ##1##2##3##4##5##6 {#2}
- \cs_new_protected:cpn { msg_ #1 :nnnnnn } ##1##2##3##4##5##6
- {
- \use:e
- {
- \exp_not:n { \@@_use:nnnnnnn {#1} {##1} {##2} }
- { \tl_to_str:n {##3} } { \tl_to_str:n {##4} }
- { \tl_to_str:n {##5} } { \tl_to_str:n {##6} }
- }
- }
- \cs_new_protected:cpe { msg_ #1 :nnnnn } ##1##2##3##4##5
- { \exp_not:c { msg_ #1 :nnnnnn } {##1} {##2} {##3} {##4} {##5} { } }
- \cs_new_protected:cpe { msg_ #1 :nnnn } ##1##2##3##4
- { \exp_not:c { msg_ #1 :nnnnnn } {##1} {##2} {##3} {##4} { } { } }
- \cs_new_protected:cpe { msg_ #1 :nnn } ##1##2##3
- { \exp_not:c { msg_ #1 :nnnnnn } {##1} {##2} {##3} { } { } { } }
- \cs_new_protected:cpe { msg_ #1 :nn } ##1##2
- { \exp_not:c { msg_ #1 :nnnnnn } {##1} {##2} { } { } { } { } }
- \cs_generate_variant:cn { msg_ #1 :nnn }
- { nnV , nne , nnx }
- \cs_generate_variant:cn { msg_ #1 :nnnn }
- { nnVV , nnVn , nnnV , nnne , nnnx , nnee , nnxx }
- \cs_generate_variant:cn { msg_ #1 :nnnnn }
- { nnnee , nnnxx , nneee , nnxxx }
- \cs_generate_variant:cn { msg_ #1 :nnnnnn } { nneeee , nnxxxx }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \msg_fatal:nnnnnn ,
-% \msg_fatal:nnnnn ,
-% \msg_fatal:nnnn ,
-% \msg_fatal:nnn ,
-% \msg_fatal:nn ,
-% \msg_fatal:nnVV ,
-% \msg_fatal:nnVn ,
-% \msg_fatal:nnnV ,
-% \msg_fatal:nnV ,
-% \msg_fatal:nneeee ,
-% \msg_fatal:nneee ,
-% \msg_fatal:nnxxxx ,
-% \msg_fatal:nnxxx ,
-% \msg_fatal:nnnee ,
-% \msg_fatal:nnee ,
-% \msg_fatal:nnnxx ,
-% \msg_fatal:nnxx ,
-% \msg_fatal:nnnx ,
-% \msg_fatal:nnne ,
-% \msg_fatal:nne ,
-% \msg_fatal:nnx
-% }
-% \begin{macro}{\@@_fatal_exit:}
-% For fatal errors, after the error message \TeX{} bails out. We force
-% a bail out rather than using \tn{end} as this means it does not
-% matter if we are in a context where normally the run cannot end.
-% \begin{macrocode}
- \@@_class_new:nn { fatal }
- {
- \@@_interrupt:NnnnN
- \msg_fatal_text:n {#1} {#2}
- { {#3} {#4} {#5} {#6} }
- \c_@@_fatal_text_tl
- \@@_fatal_exit:
- }
- \cs_new_protected:Npn \@@_fatal_exit:
- {
- \tex_batchmode:D
- \tex_read:D -1 to \l_@@_internal_tl
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \msg_critical:nnnnnn ,
-% \msg_critical:nnnnn ,
-% \msg_critical:nnnn ,
-% \msg_critical:nnn ,
-% \msg_critical:nn ,
-% \msg_critical:nnVV ,
-% \msg_critical:nnVn ,
-% \msg_critical:nnnV ,
-% \msg_critical:nnV ,
-% \msg_critical:nneeee ,
-% \msg_critical:nneee ,
-% \msg_critical:nnxxxx ,
-% \msg_critical:nnxxx ,
-% \msg_critical:nnnee ,
-% \msg_critical:nnee ,
-% \msg_critical:nnnxx ,
-% \msg_critical:nnxx ,
-% \msg_critical:nnnx ,
-% \msg_critical:nnne ,
-% \msg_critical:nne ,
-% \msg_critical:nnx
-% }
-% Not quite so bad: just end the current file.
-% \begin{macrocode}
- \@@_class_new:nn { critical }
- {
- \@@_interrupt:NnnnN
- \msg_critical_text:n {#1} {#2}
- { {#3} {#4} {#5} {#6} }
- \c_@@_critical_text_tl
- \tex_endinput:D
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \msg_error:nnnnnn ,
-% \msg_error:nnnnn ,
-% \msg_error:nnnn ,
-% \msg_error:nnn ,
-% \msg_error:nn ,
-% \msg_error:nnVV ,
-% \msg_error:nnVn ,
-% \msg_error:nnnV ,
-% \msg_error:nnV ,
-% \msg_error:nneeee ,
-% \msg_error:nneee ,
-% \msg_error:nnxxxx ,
-% \msg_error:nnxxx ,
-% \msg_error:nnnee ,
-% \msg_error:nnee ,
-% \msg_error:nnnxx ,
-% \msg_error:nnxx ,
-% \msg_error:nnnx ,
-% \msg_error:nnne ,
-% \msg_error:nne ,
-% \msg_error:nnx
-% }
-% For an error, the interrupt routine is called. We check if there is
-% a \enquote{more text} by comparing that control sequence with a
-% permanently empty text. We have to undefine the bootstrap versions
-% here.
-% \begin{macrocode}
- \cs_undefine:N \msg_error:nnee
- \cs_undefine:N \msg_error:nne
- \cs_undefine:N \msg_error:nn
- \@@_class_new:nn { error }
- {
- \@@_interrupt:NnnnN
- \msg_error_text:n {#1} {#2}
- { {#3} {#4} {#5} {#6} }
- \c_empty_tl
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \@@_info_aux:NNnnnnnn ,
-% \msg_warning:nnnnnn ,
-% \msg_warning:nnnnn ,
-% \msg_warning:nnnn ,
-% \msg_warning:nnn ,
-% \msg_warning:nn ,
-% \msg_warning:nnVV ,
-% \msg_warning:nnVn ,
-% \msg_warning:nnnV ,
-% \msg_warning:nnV ,
-% \msg_warning:nneeee ,
-% \msg_warning:nneee ,
-% \msg_warning:nnxxxx ,
-% \msg_warning:nnxxx ,
-% \msg_warning:nnnee ,
-% \msg_warning:nnee ,
-% \msg_warning:nnnxx ,
-% \msg_warning:nnxx ,
-% \msg_warning:nnnx ,
-% \msg_warning:nnne ,
-% \msg_warning:nne ,
-% \msg_warning:nnx ,
-% \msg_note:nnnnnn ,
-% \msg_note:nnnnn ,
-% \msg_note:nnnn ,
-% \msg_note:nnn ,
-% \msg_note:nn ,
-% \msg_note:nnVV ,
-% \msg_note:nnVn ,
-% \msg_note:nnnV ,
-% \msg_note:nnV ,
-% \msg_note:nneeee ,
-% \msg_note:nneee ,
-% \msg_note:nnxxxx ,
-% \msg_note:nnxxx ,
-% \msg_note:nnnee ,
-% \msg_note:nnee ,
-% \msg_note:nnnxx ,
-% \msg_note:nnxx ,
-% \msg_note:nnnx ,
-% \msg_note:nnne ,
-% \msg_note:nne ,
-% \msg_note:nnx ,
-% \msg_info:nnnnnn ,
-% \msg_info:nnnnn ,
-% \msg_info:nnnn ,
-% \msg_info:nnn ,
-% \msg_info:nn ,
-% \msg_info:nnVV ,
-% \msg_info:nnVn ,
-% \msg_info:nnnV ,
-% \msg_info:nnV ,
-% \msg_info:nneeee ,
-% \msg_info:nneee ,
-% \msg_info:nnxxxx ,
-% \msg_info:nnxxx ,
-% \msg_info:nnnee ,
-% \msg_info:nnee ,
-% \msg_info:nnnxx ,
-% \msg_info:nnxx ,
-% \msg_info:nnnx ,
-% \msg_info:nnne ,
-% \msg_info:nne ,
-% \msg_info:nnx
-% }
-% Warnings and information messages have no decoration. Warnings are
-% printed to the terminal while information can either go to the log
-% or both log and terminal.
-% \begin{macrocode}
- \cs_new_protected:Npn \@@_info_aux:NNnnnnnn #1#2#3#4#5#6#7#8
- {
- \str_set:Ne \l_@@_text_str { #2 {#3} }
- \str_set:Ne \l_@@_name_str { \msg_module_name:n {#3} }
- #1 { }
- \iow_wrap:nenN
- {
- \l_@@_text_str : ~
- \use:c { \c_@@_text_prefix_tl #3 / #4 } {#5} {#6} {#7} {#8}
- }
- {
- ( \l_@@_name_str )
- \prg_replicate:nn
- {
- \str_count:N \l_@@_text_str
- - \str_count:N \l_@@_name_str
- }
- { ~ }
- }
- { } #1
- #1 { }
- }
- \@@_class_new:nn { warning }
- {
- \@@_info_aux:NNnnnnnn \iow_term:n \msg_warning_text:n
- {#1} {#2} {#3} {#4} {#5} {#6}
- }
- \@@_class_new:nn { note }
- {
- \@@_info_aux:NNnnnnnn \iow_term:n \msg_info_text:n
- {#1} {#2} {#3} {#4} {#5} {#6}
- }
- \@@_class_new:nn { info }
- {
- \@@_info_aux:NNnnnnnn \iow_log:n \msg_info_text:n
- {#1} {#2} {#3} {#4} {#5} {#6}
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \msg_term:nnnnnn ,
-% \msg_term:nnnnn ,
-% \msg_term:nnnn ,
-% \msg_term:nnn ,
-% \msg_term:nn ,
-% \msg_term:nnVV ,
-% \msg_term:nnVn ,
-% \msg_term:nnnV ,
-% \msg_term:nnV ,
-% \msg_term:nneeee ,
-% \msg_term:nneee ,
-% \msg_term:nnxxxx ,
-% \msg_term:nnxxx ,
-% \msg_term:nnnee ,
-% \msg_term:nnee ,
-% \msg_term:nnnxx ,
-% \msg_term:nnxx ,
-% \msg_term:nnnx ,
-% \msg_term:nnne ,
-% \msg_term:nne ,
-% \msg_term:nnx ,
-% \msg_log:nnnnnn ,
-% \msg_log:nnnnn ,
-% \msg_log:nnnn ,
-% \msg_log:nnn ,
-% \msg_log:nn ,
-% \msg_log:nnVV ,
-% \msg_log:nnVn ,
-% \msg_log:nnnV ,
-% \msg_log:nnV ,
-% \msg_log:nneeee ,
-% \msg_log:nneee ,
-% \msg_log:nnxxxx ,
-% \msg_log:nnxxx ,
-% \msg_log:nnnee ,
-% \msg_log:nnee ,
-% \msg_log:nnnxx ,
-% \msg_log:nnxx ,
-% \msg_log:nnnx ,
-% \msg_log:nnne ,
-% \msg_log:nne ,
-% \msg_log:nnx
-% }
-% \enquote{Log} data is very similar to information, but with no extras
-% added.
-% \enquote{Term} is used for communicating with the user through the
-% terminal, like diagnostic messages, and debugging. This is similar
-% to \enquote{log} messages, but uses the terminal output.
-% \begin{macrocode}
- \@@_class_new:nn { log }
- {
- \iow_wrap:nnnN
- { \use:c { \c_@@_text_prefix_tl #1 / #2 } {#3} {#4} {#5} {#6} }
- { } { } \iow_log:n
- }
- \@@_class_new:nn { term }
- {
- \iow_wrap:nnnN
- { \use:c { \c_@@_text_prefix_tl #1 / #2 } {#3} {#4} {#5} {#6} }
- { } { } \iow_term:n
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \msg_none:nnnnnn ,
-% \msg_none:nnnnn ,
-% \msg_none:nnnn ,
-% \msg_none:nnn ,
-% \msg_none:nn ,
-% \msg_none:nnVV ,
-% \msg_none:nnVn ,
-% \msg_none:nnnV ,
-% \msg_none:nnV ,
-% \msg_none:nneeee ,
-% \msg_none:nneee ,
-% \msg_none:nnxxxx ,
-% \msg_none:nnxxx ,
-% \msg_none:nnnee ,
-% \msg_none:nnee ,
-% \msg_none:nnnxx ,
-% \msg_none:nnxx ,
-% \msg_none:nnnx ,
-% \msg_none:nnne ,
-% \msg_none:nne ,
-% \msg_none:nnx
-% }
-% The \texttt{none} message type is needed so that input can be gobbled.
-% \begin{macrocode}
- \@@_class_new:nn { none } { }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \msg_show:nnnnnn ,
-% \msg_show:nnnnn ,
-% \msg_show:nnnn ,
-% \msg_show:nnn ,
-% \msg_show:nn ,
-% \msg_show:nnVV ,
-% \msg_show:nnVn ,
-% \msg_show:nnnV ,
-% \msg_show:nnV ,
-% \msg_show:nneeee ,
-% \msg_show:nneee ,
-% \msg_show:nnxxxx ,
-% \msg_show:nnxxx ,
-% \msg_show:nnnee ,
-% \msg_show:nnee ,
-% \msg_show:nnnxx ,
-% \msg_show:nnxx ,
-% \msg_show:nnnx ,
-% \msg_show:nnne ,
-% \msg_show:nne ,
-% \msg_show:nnx
-% }
-% \begin{macro}{\@@_show:n, \@@_show:w, \@@_show_dot:w, \@@_show:nn}
-% The \texttt{show} message type is used for \cs{seq_show:N} and
-% similar complicated data structures. Wrap the given text with a
-% trailing dot (important later) then pass it to \cs{@@_show:n}. If
-% there is |\\>~| (or if the whole thing starts with |>~|) we split
-% there, print the first part and show the second part using
-% \tn{showtokens} (the \cs{exp_after:wN} ensure a nice display). Note
-% that this primitive adds a leading |>~| and trailing dot. That is
-% why we included a trailing dot before wrapping and removed it
-% afterwards. If there is no |\\>~| do the same but with an empty
-% second part which adds a spurious but inevitable |>~.|
-% \begin{macrocode}
- \@@_class_new:nn { show }
- {
- \iow_wrap:nnnN
- { \use:c { \c_@@_text_prefix_tl #1 / #2 } {#3} {#4} {#5} {#6} }
- { } { } \@@_show:n
- }
- \cs_new_protected:Npn \@@_show:n #1
- {
- \tl_if_in:nnTF { ^^J #1 } { ^^J > ~ }
- {
- \tl_if_in:nnTF { #1 \s_@@_mark } { . \s_@@_mark }
- { \@@_show_dot:w } { \@@_show:w }
- ^^J #1 \s_@@_stop
- }
- { \@@_show:nn { ? #1 } { } }
- }
- \cs_new:Npn \@@_show_dot:w #1 ^^J > ~ #2 . \s_@@_stop
- { \@@_show:nn {#1} {#2} }
- \cs_new:Npn \@@_show:w #1 ^^J > ~ #2 \s_@@_stop
- { \@@_show:nn {#1} {#2} }
- \cs_new_protected:Npn \@@_show:nn #1#2
- {
- \tl_if_empty:nF {#1}
- { \exp_args:No \iow_term:n { \use_none:n #1 } }
- \tl_set:Nn \l_@@_internal_tl {#2}
- \__kernel_iow_with:Nnn \tex_newlinechar:D { 10 }
- {
- \__kernel_iow_with:Nnn \tex_errorcontextlines:D { -1 }
- {
- \tex_showtokens:D \exp_after:wN \exp_after:wN \exp_after:wN
- { \exp_after:wN \l_@@_internal_tl }
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% End the group to eliminate \cs{@@_class_new:nn}.
-% \begin{macrocode}
-\group_end:
-% \end{macrocode}
-%
-% \begin{macro}[EXP]{\msg_show_item:n}
-% \begin{macro}[EXP]{\msg_show_item_unbraced:n}
-% \begin{macro}[EXP]{\msg_show_item:nn}
-% \begin{macro}[EXP]{\msg_show_item_unbraced:nn}
-% Each item in the variable is formatted using one of the following
-% functions. We cannot use |\\| and so on because these short-hands
-% cannot be used inside the arguments of messages, only when defining
-% the messages. We need to use |^^J| here directly as \pkg{l3file} is
-% not yet loaded.
-% \begin{macrocode}
-\cs_new:Npe \msg_show_item:n #1
- { ^^J > ~ \c_space_tl \exp_not:N \tl_to_str:n { {#1} } }
-\cs_new:Npe \msg_show_item_unbraced:n #1
- { ^^J > ~ \c_space_tl \exp_not:N \tl_to_str:n {#1} }
-\cs_new:Npe \msg_show_item:nn #1#2
- {
- ^^J > \use:nn { ~ } { ~ }
- \exp_not:N \tl_to_str:n { {#1} }
- \use:nn { ~ } { ~ } => \use:nn { ~ } { ~ }
- \exp_not:N \tl_to_str:n { {#2} }
- }
-\cs_new:Npe \msg_show_item_unbraced:nn #1#2
- {
- ^^J > \use:nn { ~ } { ~ }
- \exp_not:N \tl_to_str:n {#1}
- \use:nn { ~ } { ~ } => \use:nn { ~ } { ~ }
- \exp_not:N \tl_to_str:n {#2}
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_class_chk_exist:nT}
-% Checking that a message class exists. We build this from
-% \cs{cs_if_free:cTF} rather than \cs{cs_if_exist:cTF} because that
-% avoids reading the second argument earlier than necessary.
-% \begin{macrocode}
-\cs_new:Npn \@@_class_chk_exist:nT #1
- {
- \cs_if_free:cTF { @@_ #1 _code:nnnnnn }
- { \msg_error:nnn { msg } { class-unknown } {#1} }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\l_@@_class_tl, \l_@@_current_class_tl}
-% Support variables needed for the redirection system.
-% \begin{macrocode}
-\tl_new:N \l_@@_class_tl
-\tl_new:N \l_@@_current_class_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_redirect_prop}
-% For redirection of individually-named messages
-% \begin{macrocode}
-\prop_new:N \l_@@_redirect_prop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_hierarchy_seq}
-% During redirection, split the message name into a sequence:
-% |{/module/submodule}|, |{/module}|, and |{}|.
-% \begin{macrocode}
-\seq_new:N \l_@@_hierarchy_seq
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_class_loop_seq}
-% Classes encountered when following redirections to check for loops.
-% \begin{macrocode}
-\seq_new:N \l_@@_class_loop_seq
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\@@_use:nnnnnnn}
-% \begin{macro}
-% {
-% \@@_use_redirect_name:n , \@@_use_hierarchy:nwwN ,
-% \@@_use_redirect_module:n, \@@_use_code:
-% }
-% Actually using a message is a multi-step process. First, some
-% safety checks on the message and class requested. The code and
-% arguments are then stored to avoid passing them around. The
-% assignment to \cs{@@_use_code:} is similar to \cs{tl_set:Nn}.
-% The message is eventually produced with whatever \cs{l_@@_class_tl}
-% is when \cs{@@_use_code:} is called.
-% Here is also a good place to suppress tracing output if the
-% \pkg{trace} package is loaded since all (non-expandable) messages go
-% through this auxiliary.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_use:nnnnnnn #1#2#3#4#5#6#7
- {
- \cs_if_exist_use:N \conditionally@traceoff
- \msg_if_exist:nnTF {#2} {#3}
- {
- \@@_class_chk_exist:nT {#1}
- {
- \tl_set:Nn \l_@@_current_class_tl {#1}
- \cs_set_protected:Npe \@@_use_code:
- {
- \exp_not:n
- {
- \use:c { @@_ \l_@@_class_tl _code:nnnnnn }
- {#2} {#3} {#4} {#5} {#6} {#7}
- }
- }
- \@@_use_redirect_name:n { #2 / #3 }
- }
- }
- { \msg_error:nnnn { msg } { unknown } {#2} {#3} }
- \cs_if_exist_use:N \conditionally@traceon
- }
-\cs_new_protected:Npn \@@_use_code: { }
-% \end{macrocode}
-% The first check is for a individual message redirection. If this
-% applies then no further redirection is attempted. Otherwise, split
-% the message name into \meta{module}, \meta{submodule} and \meta{message}
-% (with an
-% arbitrary number of slashes), and store |{/module/submodule}|,
-% |{/module}| and |{}| into \cs{l_@@_hierarchy_seq}. We then
-% map through this sequence, applying the most specific redirection.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_use_redirect_name:n #1
- {
- \prop_get:NnNTF \l_@@_redirect_prop { / #1 } \l_@@_class_tl
- { \@@_use_code: }
- {
- \seq_clear:N \l_@@_hierarchy_seq
- \@@_use_hierarchy:nwwN { }
- #1 \s_@@_mark \@@_use_hierarchy:nwwN
- / \s_@@_mark \@@_use_none_delimit_by_s_stop:w
- \s_@@_stop
- \@@_use_redirect_module:n { }
- }
- }
-\cs_new_protected:Npn \@@_use_hierarchy:nwwN #1#2 / #3 \s_@@_mark #4
- {
- \seq_put_left:Nn \l_@@_hierarchy_seq {#1}
- #4 { #1 / #2 } #3 \s_@@_mark #4
- }
-% \end{macrocode}
-% At this point, the items of \cs{l_@@_hierarchy_seq} are the
-% various levels at which we should look for a redirection.
-% Redirections which are less specific than the argument of
-% \cs{@@_use_redirect_module:n} are not attempted. This argument is
-% empty for a class redirection, \texttt{/module} for a module
-% redirection, \emph{etc.} Loop through the sequence to find the most
-% specific redirection, with module |##1|. The loop is interrupted
-% after testing for a redirection for |##1| equal to the argument |#1|
-% (least specific redirection allowed). When a redirection is found,
-% break the mapping, then if the redirection targets the same class,
-% output the code with that class, and otherwise set the target as the
-% new current class, and search for further redirections. Those
-% redirections should be at least as specific as |##1|.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_use_redirect_module:n #1
- {
- \seq_map_inline:Nn \l_@@_hierarchy_seq
- {
- \prop_get:cnNTF { l_@@_redirect_ \l_@@_current_class_tl _prop }
- {##1} \l_@@_class_tl
- {
- \seq_map_break:n
- {
- \tl_if_eq:NNTF \l_@@_current_class_tl \l_@@_class_tl
- { \@@_use_code: }
- {
- \tl_set_eq:NN \l_@@_current_class_tl \l_@@_class_tl
- \@@_use_redirect_module:n {##1}
- }
- }
- }
- {
- \str_if_eq:nnT {##1} {#1}
- {
- \tl_set_eq:NN \l_@@_class_tl \l_@@_current_class_tl
- \seq_map_break:n { \@@_use_code: }
- }
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\msg_redirect_name:nnn}
-% Named message always use the given class even if that class is
-% redirected further. An empty target class cancels any existing
-% redirection for that message.
-% \begin{macrocode}
-\cs_new_protected:Npn \msg_redirect_name:nnn #1#2#3
- {
- \tl_if_empty:nTF {#3}
- { \prop_remove:Nn \l_@@_redirect_prop { / #1 / #2 } }
- {
- \@@_class_chk_exist:nT {#3}
- { \prop_put:Nnn \l_@@_redirect_prop { / #1 / #2 } {#3} }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\msg_redirect_class:nn, \msg_redirect_module:nnn}
-% \begin{macro}{\@@_redirect:nnn, \@@_redirect_loop_chk:nnn}
-% \begin{macro}{\@@_redirect_loop_list:n}
-% If the target class is empty, eliminate the corresponding
-% redirection. Otherwise, add the redirection. We must then check
-% for a loop: as an initialization, we start by storing the initial
-% class in \cs{l_@@_current_class_tl}.
-% \begin{macrocode}
-\cs_new_protected:Npn \msg_redirect_class:nn
- { \@@_redirect:nnn { } }
-\cs_new_protected:Npn \msg_redirect_module:nnn #1
- { \@@_redirect:nnn { / #1 } }
-\cs_new_protected:Npn \@@_redirect:nnn #1#2#3
- {
- \@@_class_chk_exist:nT {#2}
- {
- \tl_if_empty:nTF {#3}
- { \prop_remove:cn { l_@@_redirect_ #2 _prop } {#1} }
- {
- \@@_class_chk_exist:nT {#3}
- {
- \prop_put:cnn { l_@@_redirect_ #2 _prop } {#1} {#3}
- \tl_set:Nn \l_@@_current_class_tl {#2}
- \seq_clear:N \l_@@_class_loop_seq
- \@@_redirect_loop_chk:nnn {#2} {#3} {#1}
- }
- }
- }
- }
-% \end{macrocode}
-% Since multiple redirections can only happen with increasing
-% specificity, a loop requires that all steps are of the same
-% specificity. The new redirection can thus only create a loop with
-% other redirections for the exact same module, |#1|, and not
-% submodules. After some initialization above, follow redirections
-% with \cs{l_@@_class_tl}, and keep track in
-% \cs{l_@@_class_loop_seq} of the various classes encountered. A
-% redirection from a class to itself, or the absence of redirection
-% both mean that there is no loop. A redirection to the initial class
-% marks a loop. To break it, we must decide which redirection to
-% cancel. The user most likely wants the newly added redirection to
-% hold with no further redirection. We thus remove the redirection
-% starting from |#2|, target of the new redirection. Note that no
-% message is emitted by any of the underlying functions: otherwise we
-% may get an infinite loop because of a message from the message
-% system itself.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_redirect_loop_chk:nnn #1#2#3
- {
- \seq_put_right:Nn \l_@@_class_loop_seq {#1}
- \prop_get:cnNT { l_@@_redirect_ #1 _prop } {#3} \l_@@_class_tl
- {
- \str_if_eq:VnF \l_@@_class_tl {#1}
- {
- \tl_if_eq:NNTF \l_@@_class_tl \l_@@_current_class_tl
- {
- \prop_put:cnn { l_@@_redirect_ #2 _prop } {#3} {#2}
- \msg_warning:nneeee
- { msg } { redirect-loop }
- { \seq_item:Nn \l_@@_class_loop_seq { 1 } }
- { \seq_item:Nn \l_@@_class_loop_seq { 2 } }
- {#3}
- {
- \seq_map_function:NN \l_@@_class_loop_seq
- \@@_redirect_loop_list:n
- { \seq_item:Nn \l_@@_class_loop_seq { 1 } }
- }
- }
- { \@@_redirect_loop_chk:onn \l_@@_class_tl {#2} {#3} }
- }
- }
- }
-\cs_generate_variant:Nn \@@_redirect_loop_chk:nnn { o }
-\cs_new:Npn \@@_redirect_loop_list:n #1 { {#1} ~ => ~ }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Kernel-specific functions}
-%
-% \begin{macro}{\__kernel_msg_show_eval:Nn, \__kernel_msg_log_eval:Nn, \@@_show_eval:nnN}
-% A short-hand used for \cs{int_show:n} and similar functions that
-% passes to \cs{tl_show:n} the result of applying |#1| (a
-% function such as \cs{int_eval:n}) to the expression |#2|. The use of
-% \texttt{f}-expansion ensures that |#1| is expanded in the scope in which the
-% show command is called, rather than in the group created by
-% \cs{iow_wrap:nnnN}. This is only important for expressions
-% involving the \tn{currentgrouplevel} or \tn{currentgrouptype}.
-% On the other hand we want the expression to be converted to a string
-% with the usual escape character, hence within the wrapping code.
-% \begin{macrocode}
-\cs_new_protected:Npn \__kernel_msg_show_eval:Nn #1#2
- { \exp_args:Nf \@@_show_eval:nnN { #1 {#2} } {#2} \tl_show:n }
-\cs_new_protected:Npn \__kernel_msg_log_eval:Nn #1#2
- { \exp_args:Nf \@@_show_eval:nnN { #1 {#2} } {#2} \tl_log:n }
-\cs_new_protected:Npn \@@_show_eval:nnN #1#2#3 { #3 { #2 = #1 } }
-% \end{macrocode}
-% \end{macro}
-%
-% These are all retained purely for older \pkg{xparse} support.
-%
-% \begin{macro}{\__kernel_msg_new:nnnn, \__kernel_msg_new:nnn}
-% \begin{macrocode}
-\cs_new_protected:Npn \__kernel_msg_new:nnnn #1
- { \msg_new:nnnn { LaTeX / #1 } }
-\cs_new_protected:Npn \__kernel_msg_new:nnn #1
- { \msg_new:nnn { LaTeX / #1 } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \__kernel_msg_info:nnxx ,
-% \__kernel_msg_warning:nnx ,
-% \__kernel_msg_warning:nnxx ,
-% \__kernel_msg_error:nnx ,
-% \__kernel_msg_error:nnxx ,
-% \__kernel_msg_error:nnxxx
-% }
-% \begin{macrocode}
-\cs_new_protected:Npn \__kernel_msg_info:nnxx #1
- { \msg_info:nnee { LaTeX / #1 } }
-\cs_new_protected:Npn \__kernel_msg_warning:nnx #1
- { \msg_warning:nne { LaTeX / #1 } }
-\cs_new_protected:Npn \__kernel_msg_warning:nnxx #1
- { \msg_warning:nnee { LaTeX / #1 } }
-\cs_new_protected:Npn \__kernel_msg_error:nnx #1
- { \msg_error:nne { LaTeX / #1 } }
-\cs_new_protected:Npn \__kernel_msg_error:nnxx #1
- { \msg_error:nnee { LaTeX / #1 } }
-\cs_new_protected:Npn \__kernel_msg_error:nnxxx #1
- { \msg_error:nneee { LaTeX / #1 } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \__kernel_msg_expandable_error:nnn ,
-% \__kernel_msg_expandable_error:nnf ,
-% \__kernel_msg_expandable_error:nnff
-% }
-% \begin{macrocode}
-\cs_new:Npn \__kernel_msg_expandable_error:nnn #1
- { \msg_expandable_error:nnn { LaTeX / #1 } }
-\cs_new:Npn \__kernel_msg_expandable_error:nnf #1
- { \msg_expandable_error:nnf { LaTeX / #1 } }
-\cs_new:Npn \__kernel_msg_expandable_error:nnff #1
- { \msg_expandable_error:nnff { LaTeX / #1 } }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Internal messages}
-%
-% Error messages needed to actually implement the message system
-% itself.
-% \begin{macrocode}
-\msg_new:nnnn { msg } { already-defined }
- { Message~'#2'~for~module~'#1'~already~defined. }
- {
- \c_@@_coding_error_text_tl
- LaTeX~was~asked~to~define~a~new~message~called~'#2'\\
- by~the~module~'#1':~this~message~already~exists.
- \c_@@_return_text_tl
- }
-\msg_new:nnnn { msg } { unknown }
- { Unknown~message~'#2'~for~module~'#1'. }
- {
- \c_@@_coding_error_text_tl
- LaTeX~was~asked~to~display~a~message~called~'#2'\\
- by~the~module~'#1':~this~message~does~not~exist.
- \c_@@_return_text_tl
- }
-\msg_new:nnnn { msg } { class-unknown }
- { Unknown~message~class~'#1'. }
- {
- LaTeX~has~been~asked~to~redirect~messages~to~a~class~'#1':\\
- this~was~never~defined.
- \c_@@_return_text_tl
- }
-\msg_new:nnnn { msg } { redirect-loop }
- {
- Message~redirection~loop~caused~by~ {#1} ~=>~ {#2}
- \tl_if_empty:nF {#3} { ~for~module~' \use_none:n #3 ' } .
- }
- {
- Adding~the~message~redirection~ {#1} ~=>~ {#2}
- \tl_if_empty:nF {#3} { ~for~the~module~' \use_none:n #3 ' } ~
- created~an~infinite~loop\\\\
- \iow_indent:n { #4 \\\\ }
- }
-% \end{macrocode}
-%
-% Messages for earlier kernel modules plus a few for \pkg{l3keys} which
-% cover coding errors.
-% \begin{macrocode}
-\msg_new:nnnn { kernel } { bad-number-of-arguments }
- { Function~'#1'~cannot~be~defined~with~#2~arguments. }
- {
- \c_@@_coding_error_text_tl
- LaTeX~has~been~asked~to~define~a~function~'#1'~with~
- #2~arguments.~
- TeX~allows~between~0~and~9~arguments~for~a~single~function.
- }
-\msg_new:nnnn { kernel } { command-already-defined }
- { Control~sequence~#1~already~defined. }
- {
- \c_@@_coding_error_text_tl
- LaTeX~has~been~asked~to~create~a~new~control~sequence~'#1'~
- but~this~name~has~already~been~used~elsewhere. \\ \\
- The~current~meaning~is:\\
- \ \ #2
- }
-\msg_new:nnnn { kernel } { command-not-defined }
- { Control~sequence~#1~undefined. }
- {
- \c_@@_coding_error_text_tl
- LaTeX~has~been~asked~to~use~a~control~sequence~'#1':\\
- this~has~not~been~defined~yet.
- }
-\msg_new:nnnn { kernel } { empty-search-pattern }
- { Empty~search~pattern. }
- {
- \c_@@_coding_error_text_tl
- LaTeX~has~been~asked~to~replace~an~empty~pattern~by~'#1':~that~
- would~lead~to~an~infinite~loop!
- }
-\cs_if_exist:NF \tex_elapsedtime:D
- {
- \msg_new:nnnn { kernel } { no-elapsed-time }
- { No~clock~detected~for~#1. }
- { The~current~engine~provides~no~way~to~access~the~system~time. }
- }
-\msg_new:nnnn { kernel } { non-base-function }
- { Function~'#1'~is~not~a~base~function }
- {
- \c_@@_coding_error_text_tl
- Functions~defined~through~\iow_char:N\\cs_new:Nn~must~have~
- a~signature~consisting~of~only~normal~arguments~'N'~and~'n'.~
- The~signature~'#2'~of~'#1'~contains~other~arguments~'#3'.~
- To~define~variants~use~\iow_char:N\\cs_generate_variant:Nn~
- and~to~define~other~functions~use~\iow_char:N\\cs_new:Npn.
- }
-\msg_new:nnnn { kernel } { missing-colon }
- { Function~'#1'~contains~no~':'. }
- {
- \c_@@_coding_error_text_tl
- Code-level~functions~must~contain~':'~to~separate~the~
- argument~specification~from~the~function~name.~This~is~
- needed~when~defining~conditionals~or~variants,~or~when~building~a~
- parameter~text~from~the~number~of~arguments~of~the~function.
- }
-\msg_new:nnnn { kernel } { overflow }
- { Integers~larger~than~2^{30}-1~cannot~be~stored~in~arrays. }
- {
- An~attempt~was~made~to~store~#3~
- \tl_if_empty:nF {#2} { at~position~#2~ } in~the~array~'#1'.~
- The~largest~allowed~value~#4~will~be~used~instead.
- }
-\msg_new:nnnn { kernel } { out-of-bounds }
- { Access~to~an~entry~beyond~an~array's~bounds. }
- {
- An~attempt~was~made~to~access~or~store~data~at~position~#2~of~the~
- array~'#1',~but~this~array~has~entries~at~positions~from~1~to~#3.
- }
-\msg_new:nnnn { kernel } { protected-predicate }
- { Predicate~'#1'~must~be~expandable. }
- {
- \c_@@_coding_error_text_tl
- LaTeX~has~been~asked~to~define~'#1'~as~a~protected~predicate.~
- Only~expandable~tests~can~have~a~predicate~version.
- }
-\msg_new:nnn { kernel } { randint-backward-range }
- { Wrong~order~of~bounds~in~\iow_char:N\\int_rand:nn{#1}{#2}. }
-\msg_new:nnnn { kernel } { conditional-form-unknown }
- { Conditional~form~'#1'~for~function~'#2'~unknown. }
- {
- \c_@@_coding_error_text_tl
- LaTeX~has~been~asked~to~define~the~conditional~form~'#1'~of~
- the~function~'#2',~but~only~'TF',~'T',~'F',~and~'p'~forms~exist.
- }
-\msg_new:nnnn { kernel } { variant-too-long }
- { Variant~form~'#1'~longer~than~base~signature~of~'#2'. }
- {
- \c_@@_coding_error_text_tl
- LaTeX~has~been~asked~to~create~a~variant~of~the~function~'#2'~
- with~a~signature~starting~with~'#1',~but~that~is~longer~than~
- the~signature~(part~after~the~colon)~of~'#2'.
- }
-\msg_new:nnnn { kernel } { invalid-variant }
- { Variant~form~'#1'~invalid~for~base~form~'#2'. }
- {
- \c_@@_coding_error_text_tl
- LaTeX~has~been~asked~to~create~a~variant~of~the~function~'#2'~
- with~a~signature~starting~with~'#1',~but~cannot~change~an~argument~
- from~type~'#3'~to~type~'#4'.
- }
-\msg_new:nnnn { kernel } { invalid-exp-args }
- { Invalid~variant~specifier~'#1'~in~'#2'. }
- {
- \c_@@_coding_error_text_tl
- LaTeX~has~been~asked~to~create~an~\iow_char:N\\exp_args:N...~
- function~with~signature~'N#2'~but~'#1'~is~not~a~valid~argument~
- specifier.
- }
-\msg_new:nnn { kernel } { deprecated-variant }
- {
- Variant~form~'#1'~deprecated~for~base~form~'#2'.~
- One~should~not~change~an~argument~from~type~'#3'~to~type~'#4'
- \str_case:nnF {#3}
- {
- { n } { :~use~a~'\token_if_eq_charcode:NNTF #4 c v V'~variant? }
- { N } { :~base~form~only~accepts~a~single~token~argument. }
- {#4} { :~base~form~is~already~a~variant. }
- } { . }
- }
-\msg_new:nnn { char } { active }
- { Cannot~generate~active~chars. }
-\msg_new:nnn { char } { invalid-catcode }
- { Invalid~catcode~for~char~generation. }
-\msg_new:nnn { char } { null-space }
- { Cannot~generate~null~char~as~a~space. }
-\msg_new:nnn { char } { out-of-range }
- { Charcode~requested~out~of~engine~range. }
-\msg_new:nnn { dim } { zero-unit }
- { Zero~unit~in~conversion. }
-\msg_new:nnnn { kernel } { quote-in-shell }
- { Quotes~in~shell~command~'#1'. }
- { Shell~commands~cannot~contain~quotes~("). }
-\msg_new:nnnn { keys } { no-property }
- { No~property~given~in~definition~of~key~'#1'. }
- {
- \c_@@_coding_error_text_tl
- Inside~\keys_define:nn each~key~name~
- needs~a~property: \\ \\
- \iow_indent:n { #1 .<property> } \\ \\
- LaTeX~did~not~find~a~'.'~to~indicate~the~start~of~a~property.
- }
-\msg_new:nnnn { keys } { property-boolean-values-only }
- { The~property~'#1'~accepts~boolean~values~only. }
- {
- \c_@@_coding_error_text_tl
- The~property~'#1'~only~accepts~the~values~'true'~and~'false'.
- }
-\msg_new:nnnn { keys } { property-requires-value }
- { The~property~'#1'~requires~a~value. }
- {
- \c_@@_coding_error_text_tl
- LaTeX~was~asked~to~set~property~'#1'~for~key~'#2'.\\
- No~value~was~given~for~the~property,~and~one~is~required.
- }
-\msg_new:nnnn { keys } { property-unknown }
- { The~key~property~'#1'~is~unknown. }
- {
- \c_@@_coding_error_text_tl
- LaTeX~has~been~asked~to~set~the~property~'#1'~for~key~'#2':~
- this~property~is~not~defined.
- }
-\msg_new:nnnn { quark } { invalid-function }
- { Quark~test~function~'#1'~is~invalid. }
- {
- \c_@@_coding_error_text_tl
- LaTeX~has~been~asked~to~create~quark~test~function~'#1'~
- \tl_if_empty:nTF {#2}
- { but~that~name~ }
- { with~signature~'#2',~but~that~signature~ }
- is~not~valid.
- }
-\__kernel_msg_new:nnn { quark } { invalid }
- { Invalid~quark~variable~'#1'. }
-\msg_new:nnnn { scanmark } { already-defined }
- { Scan~mark~#1~already~defined. }
- {
- \c_@@_coding_error_text_tl
- LaTeX~has~been~asked~to~create~a~new~scan~mark~'#1'~
- but~this~name~has~already~been~used~for~a~scan~mark.
- }
-\msg_new:nnnn { seq } { item-too-large }
- { Sequence~'#1'~does~not~have~an~item~#3 }
- {
- An~attempt~was~made~to~push~or~pop~the~item~at~position~#3~
- of~'#1',~but~this~
- \int_compare:nTF { #3 = 0 }
- { position~does~not~exist. }
- { sequence~only~has~#2~item \int_compare:nF { #2 = 1 } {s}. }
- }
-\msg_new:nnnn { seq } { shuffle-too-large }
- { The~sequence~#1~is~too~long~to~be~shuffled~by~TeX. }
- {
- TeX~has~ \int_eval:n { \c_max_register_int + 1 } ~
- toks~registers:~this~only~allows~to~shuffle~up~to~
- \int_use:N \c_max_register_int \ items.~
- The~list~will~not~be~shuffled.
- }
-\msg_new:nnnn { kernel } { variable-not-defined }
- { Variable~#1~undefined. }
- {
- \c_@@_coding_error_text_tl
- LaTeX~has~been~asked~to~show~a~variable~#1,~but~this~has~not~
- been~defined~yet.
- }
-\msg_new:nnnn { kernel } { bad-type }
- { Variable~'#1'~is~not~a~valid~#3. }
- {
- \c_@@_coding_error_text_tl
- The~variable~'#1'~with~\tl_if_empty:nTF {#4} {meaning} {value}\\\\
- \iow_indent:n {#2}\\\\
- should~be~a~#3~variable,~but~
- \tl_if_empty:nTF {#4}
- { it~is~not \str_if_eq:nnF {#3} { bool } { ~a~short~macro } . }
- {
- it~does~not~have~the~correct~
- \str_if_eq:nnTF {#2} {#4}
- { category~codes. }
- { internal~structure:\\\\\iow_indent:n {#4} }
- }
- }
-\msg_new:nnnn { prop } { bad-link }
- { Variable~'#1'~is~not~a~valid~(linked)~prop. }
- {
- \c_@@_coding_error_text_tl
- The~variable~'#1'~has~an~incorrect~internal~structure.~
- Its~internal~entry~'#2'~points~to~'#3',~whose~name~is~not~of~the~
- form~'#4~<key>'.
- }
-\msg_new:nnnn { clist } { non-clist }
- { Variable~'#1'~is~not~a~valid~clist. }
- {
- \c_@@_coding_error_text_tl
- The~variable~'#1'~with~value\\\\
- \iow_indent:n {#2}\\\\
- should~be~a~clist~variable,~but~it~includes~empty~or~blank~items~
- without~braces.
- }
-\msg_new:nnnn { prop } { misused }
- { A~property~list~was~misused. }
- {
- \c_@@_coding_error_text_tl
- A~property~list~variable~was~used~without~an~accessor~function.~
- It~
- \tl_if_empty:nTF {#1}
- { is~empty. }
- { contains~the~key-value~pairs \use_none:n #1 . }
- }
-\msg_new:nnnn { prop } { inner-make }
- { '#1'~ cannot~ be~ used~ in~ a~ group. }
- {
- \c_@@_coding_error_text_tl
- The~ command~ '#1'~ was~ applied~ to~ the~ property~ list~
- variable~ '#2', but~ the~ storage~ type~ can~ only~ be~ changed~
- at~ the~ outermost~ group~ level.
- }
-% \end{macrocode}
-%
-% Some errors only appear in expandable settings,
-% hence don't need a \enquote{more-text} argument.
-% \begin{macrocode}
-\msg_new:nnn { kernel } { bad-exp-end-f }
- { Misused~\exp_end_continue_f:w or~:nw }
-\msg_new:nnn { kernel } { bad-variable }
- { Erroneous~variable~#1 used! }
-\msg_new:nnn { seq } { misused }
- { A~sequence~was~misused. }
-\msg_new:nnn { prg } { negative-replication }
- { Negative~argument~for~\iow_char:N\\prg_replicate:nn. }
-\msg_new:nnn { prop } { prop-keyval }
- { Missing~'='~in~'#1'~(in~'..._keyval:Nn') }
-\msg_new:nnn { kernel } { unknown-comparison }
- { Relation~'#1'~not~among~=,<,>,==,!=,<=,>=. }
-\msg_new:nnn { kernel } { zero-step }
- { Zero~step~size~for~function~#1. }
-% \end{macrocode}
-%
-% Messages used by the \enquote{\texttt{show}} functions.
-% \begin{macrocode}
-\msg_new:nnn { clist } { show }
- {
- The~comma~list~ \tl_if_empty:nF {#1} { #1 ~ }
- \tl_if_empty:nTF {#2}
- { is~empty \\>~ . }
- { contains~the~items~(without~outer~braces): #2 . }
- }
-\msg_new:nnn { intarray } { show }
- { The~integer~array~#1~contains~#2~items: \\ #3 . }
-\msg_new:nnn { prop } { show }
- {
- The~ \str_if_eq:nnF {#3} { flat } { #3~ }
- property~list~#1~
- \tl_if_empty:nTF {#2}
- { is~empty \\>~ . }
- { contains~the~pairs~(without~outer~braces): #2 . }
- }
-\msg_new:nnn { seq } { show }
- {
- The~sequence~#1~
- \tl_if_empty:nTF {#2}
- { is~empty \\>~ . }
- { contains~the~items~(without~outer~braces): #2 . }
- }
-\msg_new:nnn { kernel } { show-streams }
- {
- \tl_if_empty:nTF {#2} { No~ } { The~following~ }
- \str_case:nn {#1}
- {
- { ior } { input ~ }
- { iow } { output ~ }
- }
- streams~are~
- \tl_if_empty:nTF {#2} { open } { in~use: #2 . }
- }
-% \end{macrocode}
-%
-% System layer messages
-% \begin{macrocode}
-\msg_new:nnnn { sys } { backend-set }
- { Backend~configuration~already~set. }
- {
- Run-time~backend~selection~may~only~be~carried~out~once~during~a~run.~
- This~second~attempt~to~set~them~will~be~ignored.
- }
-\msg_new:nnnn { sys } { load-debug-in-preamble }
- { Load~debug~support~in~the~preamble. }
- {
- Debugging~requires~support~loaded~in~the~preamble: \\
- Use~\sys_load_debug:~before~\begin{document}.
- }
-\msg_new:nnnn { sys } { wrong-backend }
- { Backend~request~inconsistent~with~engine:~using~'#2'~backend. }
- {
- You~have~requested~backend~'#1',~but~this~is~not~suitable~for~use~with~the~
- active~engine.~LaTeX~will~use~the~'#2'~backend~instead.
- }
-% \end{macrocode}
-%
-% \subsection{Expandable errors}
-%
-% \begin{macro}{\@@_expandable_error:nn}
-% In expansion only context, we cannot use the normal means of
-% reporting errors. Instead, we rely on a low-level \TeX{} error
-% caused by expanding a macro \cs{???} with parameter text ``|?|''
-% (this could be any token) which we used followed by something else
-% (here, a space). This shows
-% the context, which thanks to the odd-looking \cs{use:n} is
-% \begin{verbatim}
-% <argument> \???
-% ! mypkg Error: The error message.
-% \end{verbatim}
-% In other words, \TeX{} is processing the argument of \cs{use:n},
-% which is \cs{???} \meta{space} |!| \meta{error type} |:| \meta{error message}.
-% \begin{macrocode}
-\cs_set_protected:Npn \@@_tmp:w #1
- {
- \cs_new:Npn #1 ? { }
- \cs_new:Npn \@@_expandable_error:nn ##1##2
- {
- \exp_after:wN \exp_after:wN
- \exp_after:wN \@@_use_none_delimit_by_s_stop:w
- \use:n { #1 ~ ! ~ ##2 : ~ ##1 } \s_@@_stop
- }
- }
-\exp_args:Nc \@@_tmp:w { ??? }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {
-% \msg_expandable_error:nnnnnn ,
-% \msg_expandable_error:nnnnn ,
-% \msg_expandable_error:nnnn ,
-% \msg_expandable_error:nnn ,
-% \msg_expandable_error:nn ,
-% \msg_expandable_error:nnffff ,
-% \msg_expandable_error:nnfff ,
-% \msg_expandable_error:nnff ,
-% \msg_expandable_error:nnf
-% }
-% The command built from the csname
-% \cs{c_@@_text_prefix_tl} |#1 / #2|
-% takes four arguments and builds the error text, which is fed to
-% \cs{@@_expandable_error:n} with appropriate expansion: just as for
-% usual messages the arguments are first turned to strings, then the
-% message is fully expanded. The module name also has to be determined.
-% \begin{macrocode}
-\exp_args_generate:n { oooo }
-\cs_new:Npn \msg_expandable_error:nnnnnn #1#2#3#4#5#6
- {
- \exp_args:Nee \@@_expandable_error:nn
- {
- \exp_args:Nc \exp_args:Noooo
- { \c_@@_text_prefix_tl #1 / #2 }
- { \tl_to_str:n {#3} }
- { \tl_to_str:n {#4} }
- { \tl_to_str:n {#5} }
- { \tl_to_str:n {#6} }
- }
- { \msg_error_text:n {#1} }
- }
-\cs_new:Npn \msg_expandable_error:nnnnn #1#2#3#4#5
- { \msg_expandable_error:nnnnnn {#1} {#2} {#3} {#4} {#5} { } }
-\cs_new:Npn \msg_expandable_error:nnnn #1#2#3#4
- { \msg_expandable_error:nnnnnn {#1} {#2} {#3} {#4} { } { } }
-\cs_new:Npn \msg_expandable_error:nnn #1#2#3
- { \msg_expandable_error:nnnnnn {#1} {#2} {#3} { } { } { } }
-\cs_new:Npn \msg_expandable_error:nn #1#2
- { \msg_expandable_error:nnnnnn {#1} {#2} { } { } { } { } }
-\cs_generate_variant:Nn \msg_expandable_error:nnnnnn { nnffff }
-\cs_generate_variant:Nn \msg_expandable_error:nnnnn { nnfff }
-\cs_generate_variant:Nn \msg_expandable_error:nnnn { nnff }
-\cs_generate_variant:Nn \msg_expandable_error:nnn { nnf }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Message formatting}
-%
-% \begin{macrocode}
-\prop_gput:Nnn \g_msg_module_name_prop { kernel } { LaTeX }
-\prop_gput:Nnn \g_msg_module_type_prop { kernel } { }
-\clist_map_inline:nn
- {
- char , clist , coffin , debug , deprecation , dim, msg ,
- quark , prg , prop , scanmark , seq , sys
- }
- {
- \prop_gput:Nnn \g_msg_module_name_prop {#1} { LaTeX }
- \prop_gput:Nnn \g_msg_module_type_prop {#1} { }
- }
-\prop_gput:Nnn \g_msg_module_name_prop { LaTeX / cmd } { LaTeX }
-\prop_gput:Nnn \g_msg_module_type_prop { LaTeX / cmd } { }
-\prop_gput:Nnn \g_msg_module_name_prop { LaTeX / ltcmd } { LaTeX }
-\prop_gput:Nnn \g_msg_module_type_prop { LaTeX / ltcmd } { }
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3names.dtx b/macros/latex/contrib/l3kernel/l3names.dtx
deleted file mode 100644
index 3e78d86acf..0000000000
--- a/macros/latex/contrib/l3kernel/l3names.dtx
+++ /dev/null
@@ -1,1568 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3names.dtx
-%
-% Copyright (C) 1990-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3names} module\\ Namespace for primitives^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \section{Setting up the \LaTeX3 programming language}
-%
-% This module is at the core of the \LaTeX3 programming language. It
-% performs the following tasks:
-% \begin{itemize}
-% \item defines new names for all \TeX{} primitives;
-% \item emulate required primitives not provided by default in \LuaTeX;
-% \item switches to the category code r{\'e}gime for programming;
-% \end{itemize}
-%
-% This module is entirely dedicated to primitives (and emulations of
-% these), which should not be used directly within \LaTeX3 code
-% (outside of \enquote{kernel-level} code). As such, the primitives
-% are not documented here: \emph{The \TeX{}book}, \emph{\TeX{} by
-% Topic} and the manuals for \pdfTeX{}, \XeTeX{}, \LuaTeX{}, \pTeX{}
-% and \upTeX{} should be consulted for details of the primitives.
-% These are named \cs[no-index]{tex_\meta{name}:D}, typically based
-% on the primitive's \meta{name} in \pdfTeX{} and omitting a leading
-% |pdf| when the primitive is not related to pdf output.
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3names} implementation}
-%
-% \begin{macrocode}
-%<*package&tex>
-% \end{macrocode}
-%
-% The prefix here is \texttt{kernel}. A few places need |@@| to be left
-% as is; this is obtained as |@@@@|.
-% \begin{macrocode}
-%<@@=kernel>
-% \end{macrocode}
-%
-% The code here simply renames all of the primitives to new, internal,
-% names.
-%
-% The \tn{let} primitive is renamed by hand first as it is essential for
-% the entire process to follow. This also uses \tn{global}, as that way
-% we avoid leaving an unneeded csname in the hash table.
-% \begin{macrocode}
-\let \tex_global:D \global
-\let \tex_let:D \let
-% \end{macrocode}
-%
-% Everything is inside a (rather long) group, which keeps
-% \cs{@@_primitive:NN} trapped.
-% \begin{macrocode}
-\begingroup
-% \end{macrocode}
-%
-% \begin{macro}{\@@_primitive:NN}
-% A temporary function to actually do the renaming.
-% \begin{macrocode}
- \long \def \@@_primitive:NN #1#2
- { \tex_global:D \tex_let:D #2 #1 }
-% \end{macrocode}
-%\end{macro}
-%
-% To allow extracting \enquote{just the names}, a bit of DocStrip fiddling.
-% \begin{macrocode}
-%</package&tex>
-%<*names|tex>
-%<*names|package>
-% \end{macrocode}
-%
-% In the current incarnation of this module, all \TeX{} primitives
-% are given a new name of the form |\tex_|\emph{oldname}|:D|.
-% But first three special cases which have symbolic original names.
-% These are given modified new names, so that they may be entered
-% without catcode tricks.
-% \begin{macrocode}
- \@@_primitive:NN \ \tex_space:D
- \@@_primitive:NN \/ \tex_italiccorrection:D
- \@@_primitive:NN \- \tex_hyphen:D
-% \end{macrocode}
-%
-% Now all the other primitives.
-% \begin{macrocode}
- \@@_primitive:NN \above \tex_above:D
- \@@_primitive:NN \abovedisplayshortskip \tex_abovedisplayshortskip:D
- \@@_primitive:NN \abovedisplayskip \tex_abovedisplayskip:D
- \@@_primitive:NN \abovewithdelims \tex_abovewithdelims:D
- \@@_primitive:NN \accent \tex_accent:D
- \@@_primitive:NN \adjdemerits \tex_adjdemerits:D
- \@@_primitive:NN \advance \tex_advance:D
- \@@_primitive:NN \afterassignment \tex_afterassignment:D
- \@@_primitive:NN \aftergroup \tex_aftergroup:D
- \@@_primitive:NN \atop \tex_atop:D
- \@@_primitive:NN \atopwithdelims \tex_atopwithdelims:D
- \@@_primitive:NN \badness \tex_badness:D
- \@@_primitive:NN \baselineskip \tex_baselineskip:D
- \@@_primitive:NN \batchmode \tex_batchmode:D
- \@@_primitive:NN \begingroup \tex_begingroup:D
- \@@_primitive:NN \belowdisplayshortskip \tex_belowdisplayshortskip:D
- \@@_primitive:NN \belowdisplayskip \tex_belowdisplayskip:D
- \@@_primitive:NN \binoppenalty \tex_binoppenalty:D
- \@@_primitive:NN \botmark \tex_botmark:D
- \@@_primitive:NN \box \tex_box:D
- \@@_primitive:NN \boxmaxdepth \tex_boxmaxdepth:D
- \@@_primitive:NN \brokenpenalty \tex_brokenpenalty:D
- \@@_primitive:NN \catcode \tex_catcode:D
- \@@_primitive:NN \char \tex_char:D
- \@@_primitive:NN \chardef \tex_chardef:D
- \@@_primitive:NN \cleaders \tex_cleaders:D
- \@@_primitive:NN \closein \tex_closein:D
- \@@_primitive:NN \closeout \tex_closeout:D
- \@@_primitive:NN \clubpenalty \tex_clubpenalty:D
- \@@_primitive:NN \copy \tex_copy:D
- \@@_primitive:NN \count \tex_count:D
- \@@_primitive:NN \countdef \tex_countdef:D
- \@@_primitive:NN \cr \tex_cr:D
- \@@_primitive:NN \crcr \tex_crcr:D
- \@@_primitive:NN \csname \tex_csname:D
- \@@_primitive:NN \day \tex_day:D
- \@@_primitive:NN \deadcycles \tex_deadcycles:D
- \@@_primitive:NN \def \tex_def:D
- \@@_primitive:NN \defaulthyphenchar \tex_defaulthyphenchar:D
- \@@_primitive:NN \defaultskewchar \tex_defaultskewchar:D
- \@@_primitive:NN \delcode \tex_delcode:D
- \@@_primitive:NN \delimiter \tex_delimiter:D
- \@@_primitive:NN \delimiterfactor \tex_delimiterfactor:D
- \@@_primitive:NN \delimitershortfall \tex_delimitershortfall:D
- \@@_primitive:NN \dimen \tex_dimen:D
- \@@_primitive:NN \dimendef \tex_dimendef:D
- \@@_primitive:NN \discretionary \tex_discretionary:D
- \@@_primitive:NN \displayindent \tex_displayindent:D
- \@@_primitive:NN \displaylimits \tex_displaylimits:D
- \@@_primitive:NN \displaystyle \tex_displaystyle:D
- \@@_primitive:NN \displaywidowpenalty \tex_displaywidowpenalty:D
- \@@_primitive:NN \displaywidth \tex_displaywidth:D
- \@@_primitive:NN \divide \tex_divide:D
- \@@_primitive:NN \doublehyphendemerits \tex_doublehyphendemerits:D
- \@@_primitive:NN \dp \tex_dp:D
- \@@_primitive:NN \dump \tex_dump:D
- \@@_primitive:NN \edef \tex_edef:D
- \@@_primitive:NN \else \tex_else:D
- \@@_primitive:NN \emergencystretch \tex_emergencystretch:D
- \@@_primitive:NN \end \tex_end:D
- \@@_primitive:NN \endcsname \tex_endcsname:D
- \@@_primitive:NN \endgroup \tex_endgroup:D
- \@@_primitive:NN \endinput \tex_endinput:D
- \@@_primitive:NN \endlinechar \tex_endlinechar:D
- \@@_primitive:NN \eqno \tex_eqno:D
- \@@_primitive:NN \errhelp \tex_errhelp:D
- \@@_primitive:NN \errmessage \tex_errmessage:D
- \@@_primitive:NN \errorcontextlines \tex_errorcontextlines:D
- \@@_primitive:NN \errorstopmode \tex_errorstopmode:D
- \@@_primitive:NN \escapechar \tex_escapechar:D
- \@@_primitive:NN \everycr \tex_everycr:D
- \@@_primitive:NN \everydisplay \tex_everydisplay:D
- \@@_primitive:NN \everyhbox \tex_everyhbox:D
- \@@_primitive:NN \everyjob \tex_everyjob:D
- \@@_primitive:NN \everymath \tex_everymath:D
- \@@_primitive:NN \everypar \tex_everypar:D
- \@@_primitive:NN \everyvbox \tex_everyvbox:D
- \@@_primitive:NN \exhyphenpenalty \tex_exhyphenpenalty:D
- \@@_primitive:NN \expandafter \tex_expandafter:D
- \@@_primitive:NN \fam \tex_fam:D
- \@@_primitive:NN \fi \tex_fi:D
- \@@_primitive:NN \finalhyphendemerits \tex_finalhyphendemerits:D
- \@@_primitive:NN \firstmark \tex_firstmark:D
- \@@_primitive:NN \floatingpenalty \tex_floatingpenalty:D
- \@@_primitive:NN \font \tex_font:D
- \@@_primitive:NN \fontdimen \tex_fontdimen:D
- \@@_primitive:NN \fontname \tex_fontname:D
- \@@_primitive:NN \futurelet \tex_futurelet:D
- \@@_primitive:NN \gdef \tex_gdef:D
- \@@_primitive:NN \global \tex_global:D
- \@@_primitive:NN \globaldefs \tex_globaldefs:D
- \@@_primitive:NN \halign \tex_halign:D
- \@@_primitive:NN \hangafter \tex_hangafter:D
- \@@_primitive:NN \hangindent \tex_hangindent:D
- \@@_primitive:NN \hbadness \tex_hbadness:D
- \@@_primitive:NN \hbox \tex_hbox:D
- \@@_primitive:NN \hfil \tex_hfil:D
- \@@_primitive:NN \hfill \tex_hfill:D
- \@@_primitive:NN \hfilneg \tex_hfilneg:D
- \@@_primitive:NN \hfuzz \tex_hfuzz:D
- \@@_primitive:NN \hoffset \tex_hoffset:D
- \@@_primitive:NN \holdinginserts \tex_holdinginserts:D
- \@@_primitive:NN \hrule \tex_hrule:D
- \@@_primitive:NN \hsize \tex_hsize:D
- \@@_primitive:NN \hskip \tex_hskip:D
- \@@_primitive:NN \hss \tex_hss:D
- \@@_primitive:NN \ht \tex_ht:D
- \@@_primitive:NN \hyphenation \tex_hyphenation:D
- \@@_primitive:NN \hyphenchar \tex_hyphenchar:D
- \@@_primitive:NN \hyphenpenalty \tex_hyphenpenalty:D
- \@@_primitive:NN \if \tex_if:D
- \@@_primitive:NN \ifcase \tex_ifcase:D
- \@@_primitive:NN \ifcat \tex_ifcat:D
- \@@_primitive:NN \ifdim \tex_ifdim:D
- \@@_primitive:NN \ifeof \tex_ifeof:D
- \@@_primitive:NN \iffalse \tex_iffalse:D
- \@@_primitive:NN \ifhbox \tex_ifhbox:D
- \@@_primitive:NN \ifhmode \tex_ifhmode:D
- \@@_primitive:NN \ifinner \tex_ifinner:D
- \@@_primitive:NN \ifmmode \tex_ifmmode:D
- \@@_primitive:NN \ifnum \tex_ifnum:D
- \@@_primitive:NN \ifodd \tex_ifodd:D
- \@@_primitive:NN \iftrue \tex_iftrue:D
- \@@_primitive:NN \ifvbox \tex_ifvbox:D
- \@@_primitive:NN \ifvmode \tex_ifvmode:D
- \@@_primitive:NN \ifvoid \tex_ifvoid:D
- \@@_primitive:NN \ifx \tex_ifx:D
- \@@_primitive:NN \ignorespaces \tex_ignorespaces:D
- \@@_primitive:NN \immediate \tex_immediate:D
- \@@_primitive:NN \indent \tex_indent:D
- \@@_primitive:NN \input \tex_input:D
- \@@_primitive:NN \inputlineno \tex_inputlineno:D
- \@@_primitive:NN \insert \tex_insert:D
- \@@_primitive:NN \insertpenalties \tex_insertpenalties:D
- \@@_primitive:NN \interlinepenalty \tex_interlinepenalty:D
- \@@_primitive:NN \jobname \tex_jobname:D
- \@@_primitive:NN \kern \tex_kern:D
- \@@_primitive:NN \language \tex_language:D
- \@@_primitive:NN \lastbox \tex_lastbox:D
- \@@_primitive:NN \lastkern \tex_lastkern:D
- \@@_primitive:NN \lastpenalty \tex_lastpenalty:D
- \@@_primitive:NN \lastskip \tex_lastskip:D
- \@@_primitive:NN \lccode \tex_lccode:D
- \@@_primitive:NN \leaders \tex_leaders:D
- \@@_primitive:NN \left \tex_left:D
- \@@_primitive:NN \lefthyphenmin \tex_lefthyphenmin:D
- \@@_primitive:NN \leftskip \tex_leftskip:D
- \@@_primitive:NN \leqno \tex_leqno:D
- \@@_primitive:NN \let \tex_let:D
- \@@_primitive:NN \limits \tex_limits:D
- \@@_primitive:NN \linepenalty \tex_linepenalty:D
- \@@_primitive:NN \lineskip \tex_lineskip:D
- \@@_primitive:NN \lineskiplimit \tex_lineskiplimit:D
- \@@_primitive:NN \long \tex_long:D
- \@@_primitive:NN \looseness \tex_looseness:D
- \@@_primitive:NN \lower \tex_lower:D
- \@@_primitive:NN \lowercase \tex_lowercase:D
- \@@_primitive:NN \mag \tex_mag:D
- \@@_primitive:NN \mark \tex_mark:D
- \@@_primitive:NN \mathaccent \tex_mathaccent:D
- \@@_primitive:NN \mathbin \tex_mathbin:D
- \@@_primitive:NN \mathchar \tex_mathchar:D
- \@@_primitive:NN \mathchardef \tex_mathchardef:D
- \@@_primitive:NN \mathchoice \tex_mathchoice:D
- \@@_primitive:NN \mathclose \tex_mathclose:D
- \@@_primitive:NN \mathcode \tex_mathcode:D
- \@@_primitive:NN \mathinner \tex_mathinner:D
- \@@_primitive:NN \mathop \tex_mathop:D
- \@@_primitive:NN \mathopen \tex_mathopen:D
- \@@_primitive:NN \mathord \tex_mathord:D
- \@@_primitive:NN \mathpunct \tex_mathpunct:D
- \@@_primitive:NN \mathrel \tex_mathrel:D
- \@@_primitive:NN \mathsurround \tex_mathsurround:D
- \@@_primitive:NN \maxdeadcycles \tex_maxdeadcycles:D
- \@@_primitive:NN \maxdepth \tex_maxdepth:D
- \@@_primitive:NN \meaning \tex_meaning:D
- \@@_primitive:NN \medmuskip \tex_medmuskip:D
- \@@_primitive:NN \message \tex_message:D
- \@@_primitive:NN \mkern \tex_mkern:D
- \@@_primitive:NN \month \tex_month:D
- \@@_primitive:NN \moveleft \tex_moveleft:D
- \@@_primitive:NN \moveright \tex_moveright:D
- \@@_primitive:NN \mskip \tex_mskip:D
- \@@_primitive:NN \multiply \tex_multiply:D
- \@@_primitive:NN \muskip \tex_muskip:D
- \@@_primitive:NN \muskipdef \tex_muskipdef:D
- \@@_primitive:NN \newlinechar \tex_newlinechar:D
- \@@_primitive:NN \noalign \tex_noalign:D
- \@@_primitive:NN \noboundary \tex_noboundary:D
- \@@_primitive:NN \noexpand \tex_noexpand:D
- \@@_primitive:NN \noindent \tex_noindent:D
- \@@_primitive:NN \nolimits \tex_nolimits:D
- \@@_primitive:NN \nonscript \tex_nonscript:D
- \@@_primitive:NN \nonstopmode \tex_nonstopmode:D
- \@@_primitive:NN \nulldelimiterspace \tex_nulldelimiterspace:D
- \@@_primitive:NN \nullfont \tex_nullfont:D
- \@@_primitive:NN \number \tex_number:D
- \@@_primitive:NN \omit \tex_omit:D
- \@@_primitive:NN \openin \tex_openin:D
- \@@_primitive:NN \openout \tex_openout:D
- \@@_primitive:NN \or \tex_or:D
- \@@_primitive:NN \outer \tex_outer:D
- \@@_primitive:NN \output \tex_output:D
- \@@_primitive:NN \outputpenalty \tex_outputpenalty:D
- \@@_primitive:NN \over \tex_over:D
- \@@_primitive:NN \overfullrule \tex_overfullrule:D
- \@@_primitive:NN \overline \tex_overline:D
- \@@_primitive:NN \overwithdelims \tex_overwithdelims:D
- \@@_primitive:NN \pagedepth \tex_pagedepth:D
- \@@_primitive:NN \pagefilllstretch \tex_pagefilllstretch:D
- \@@_primitive:NN \pagefillstretch \tex_pagefillstretch:D
- \@@_primitive:NN \pagefilstretch \tex_pagefilstretch:D
- \@@_primitive:NN \pagegoal \tex_pagegoal:D
- \@@_primitive:NN \pageshrink \tex_pageshrink:D
- \@@_primitive:NN \pagestretch \tex_pagestretch:D
- \@@_primitive:NN \pagetotal \tex_pagetotal:D
- \@@_primitive:NN \par \tex_par:D
- \@@_primitive:NN \parfillskip \tex_parfillskip:D
- \@@_primitive:NN \parindent \tex_parindent:D
- \@@_primitive:NN \parshape \tex_parshape:D
- \@@_primitive:NN \parskip \tex_parskip:D
- \@@_primitive:NN \patterns \tex_patterns:D
- \@@_primitive:NN \pausing \tex_pausing:D
- \@@_primitive:NN \penalty \tex_penalty:D
- \@@_primitive:NN \postdisplaypenalty \tex_postdisplaypenalty:D
- \@@_primitive:NN \predisplaypenalty \tex_predisplaypenalty:D
- \@@_primitive:NN \predisplaysize \tex_predisplaysize:D
- \@@_primitive:NN \pretolerance \tex_pretolerance:D
- \@@_primitive:NN \prevdepth \tex_prevdepth:D
- \@@_primitive:NN \prevgraf \tex_prevgraf:D
- \@@_primitive:NN \radical \tex_radical:D
- \@@_primitive:NN \raise \tex_raise:D
- \@@_primitive:NN \read \tex_read:D
- \@@_primitive:NN \relax \tex_relax:D
- \@@_primitive:NN \relpenalty \tex_relpenalty:D
- \@@_primitive:NN \right \tex_right:D
- \@@_primitive:NN \righthyphenmin \tex_righthyphenmin:D
- \@@_primitive:NN \rightskip \tex_rightskip:D
- \@@_primitive:NN \romannumeral \tex_romannumeral:D
- \@@_primitive:NN \scriptfont \tex_scriptfont:D
- \@@_primitive:NN \scriptscriptfont \tex_scriptscriptfont:D
- \@@_primitive:NN \scriptscriptstyle \tex_scriptscriptstyle:D
- \@@_primitive:NN \scriptspace \tex_scriptspace:D
- \@@_primitive:NN \scriptstyle \tex_scriptstyle:D
- \@@_primitive:NN \scrollmode \tex_scrollmode:D
- \@@_primitive:NN \setbox \tex_setbox:D
- \@@_primitive:NN \setlanguage \tex_setlanguage:D
- \@@_primitive:NN \sfcode \tex_sfcode:D
- \@@_primitive:NN \shipout \tex_shipout:D
- \@@_primitive:NN \show \tex_show:D
- \@@_primitive:NN \showbox \tex_showbox:D
- \@@_primitive:NN \showboxbreadth \tex_showboxbreadth:D
- \@@_primitive:NN \showboxdepth \tex_showboxdepth:D
- \@@_primitive:NN \showlists \tex_showlists:D
- \@@_primitive:NN \showthe \tex_showthe:D
- \@@_primitive:NN \skewchar \tex_skewchar:D
- \@@_primitive:NN \skip \tex_skip:D
- \@@_primitive:NN \skipdef \tex_skipdef:D
- \@@_primitive:NN \spacefactor \tex_spacefactor:D
- \@@_primitive:NN \spaceskip \tex_spaceskip:D
- \@@_primitive:NN \span \tex_span:D
- \@@_primitive:NN \special \tex_special:D
- \@@_primitive:NN \splitbotmark \tex_splitbotmark:D
- \@@_primitive:NN \splitfirstmark \tex_splitfirstmark:D
- \@@_primitive:NN \splitmaxdepth \tex_splitmaxdepth:D
- \@@_primitive:NN \splittopskip \tex_splittopskip:D
- \@@_primitive:NN \string \tex_string:D
- \@@_primitive:NN \tabskip \tex_tabskip:D
- \@@_primitive:NN \textfont \tex_textfont:D
- \@@_primitive:NN \textstyle \tex_textstyle:D
- \@@_primitive:NN \the \tex_the:D
- \@@_primitive:NN \thickmuskip \tex_thickmuskip:D
- \@@_primitive:NN \thinmuskip \tex_thinmuskip:D
- \@@_primitive:NN \time \tex_time:D
- \@@_primitive:NN \toks \tex_toks:D
- \@@_primitive:NN \toksdef \tex_toksdef:D
- \@@_primitive:NN \tolerance \tex_tolerance:D
- \@@_primitive:NN \topmark \tex_topmark:D
- \@@_primitive:NN \topskip \tex_topskip:D
- \@@_primitive:NN \tracingcommands \tex_tracingcommands:D
- \@@_primitive:NN \tracinglostchars \tex_tracinglostchars:D
- \@@_primitive:NN \tracingmacros \tex_tracingmacros:D
- \@@_primitive:NN \tracingonline \tex_tracingonline:D
- \@@_primitive:NN \tracingoutput \tex_tracingoutput:D
- \@@_primitive:NN \tracingpages \tex_tracingpages:D
- \@@_primitive:NN \tracingparagraphs \tex_tracingparagraphs:D
- \@@_primitive:NN \tracingrestores \tex_tracingrestores:D
- \@@_primitive:NN \tracingstats \tex_tracingstats:D
- \@@_primitive:NN \uccode \tex_uccode:D
- \@@_primitive:NN \uchyph \tex_uchyph:D
- \@@_primitive:NN \underline \tex_underline:D
- \@@_primitive:NN \unhbox \tex_unhbox:D
- \@@_primitive:NN \unhcopy \tex_unhcopy:D
- \@@_primitive:NN \unkern \tex_unkern:D
- \@@_primitive:NN \unpenalty \tex_unpenalty:D
- \@@_primitive:NN \unskip \tex_unskip:D
- \@@_primitive:NN \unvbox \tex_unvbox:D
- \@@_primitive:NN \unvcopy \tex_unvcopy:D
- \@@_primitive:NN \uppercase \tex_uppercase:D
- \@@_primitive:NN \vadjust \tex_vadjust:D
- \@@_primitive:NN \valign \tex_valign:D
- \@@_primitive:NN \vbadness \tex_vbadness:D
- \@@_primitive:NN \vbox \tex_vbox:D
- \@@_primitive:NN \vcenter \tex_vcenter:D
- \@@_primitive:NN \vfil \tex_vfil:D
- \@@_primitive:NN \vfill \tex_vfill:D
- \@@_primitive:NN \vfilneg \tex_vfilneg:D
- \@@_primitive:NN \vfuzz \tex_vfuzz:D
- \@@_primitive:NN \voffset \tex_voffset:D
- \@@_primitive:NN \vrule \tex_vrule:D
- \@@_primitive:NN \vsize \tex_vsize:D
- \@@_primitive:NN \vskip \tex_vskip:D
- \@@_primitive:NN \vsplit \tex_vsplit:D
- \@@_primitive:NN \vss \tex_vss:D
- \@@_primitive:NN \vtop \tex_vtop:D
- \@@_primitive:NN \wd \tex_wd:D
- \@@_primitive:NN \widowpenalty \tex_widowpenalty:D
- \@@_primitive:NN \write \tex_write:D
- \@@_primitive:NN \xdef \tex_xdef:D
- \@@_primitive:NN \xleaders \tex_xleaders:D
- \@@_primitive:NN \xspaceskip \tex_xspaceskip:D
- \@@_primitive:NN \year \tex_year:D
-% \end{macrocode}
-% Primitives introduced by \eTeX{}.
-% \begin{macrocode}
- \@@_primitive:NN \beginL \tex_beginL:D
- \@@_primitive:NN \beginR \tex_beginR:D
- \@@_primitive:NN \botmarks \tex_botmarks:D
- \@@_primitive:NN \clubpenalties \tex_clubpenalties:D
- \@@_primitive:NN \currentgrouplevel \tex_currentgrouplevel:D
- \@@_primitive:NN \currentgrouptype \tex_currentgrouptype:D
- \@@_primitive:NN \currentifbranch \tex_currentifbranch:D
- \@@_primitive:NN \currentiflevel \tex_currentiflevel:D
- \@@_primitive:NN \currentiftype \tex_currentiftype:D
- \@@_primitive:NN \detokenize \tex_detokenize:D
- \@@_primitive:NN \dimexpr \tex_dimexpr:D
- \@@_primitive:NN \displaywidowpenalties \tex_displaywidowpenalties:D
- \@@_primitive:NN \endL \tex_endL:D
- \@@_primitive:NN \endR \tex_endR:D
- \@@_primitive:NN \eTeXrevision \tex_eTeXrevision:D
- \@@_primitive:NN \eTeXversion \tex_eTeXversion:D
- \@@_primitive:NN \everyeof \tex_everyeof:D
- \@@_primitive:NN \firstmarks \tex_firstmarks:D
- \@@_primitive:NN \fontchardp \tex_fontchardp:D
- \@@_primitive:NN \fontcharht \tex_fontcharht:D
- \@@_primitive:NN \fontcharic \tex_fontcharic:D
- \@@_primitive:NN \fontcharwd \tex_fontcharwd:D
- \@@_primitive:NN \glueexpr \tex_glueexpr:D
- \@@_primitive:NN \glueshrink \tex_glueshrink:D
- \@@_primitive:NN \glueshrinkorder \tex_glueshrinkorder:D
- \@@_primitive:NN \gluestretch \tex_gluestretch:D
- \@@_primitive:NN \gluestretchorder \tex_gluestretchorder:D
- \@@_primitive:NN \gluetomu \tex_gluetomu:D
- \@@_primitive:NN \ifcsname \tex_ifcsname:D
- \@@_primitive:NN \ifdefined \tex_ifdefined:D
- \@@_primitive:NN \iffontchar \tex_iffontchar:D
- \@@_primitive:NN \interactionmode \tex_interactionmode:D
- \@@_primitive:NN \interlinepenalties \tex_interlinepenalties:D
- \@@_primitive:NN \lastlinefit \tex_lastlinefit:D
- \@@_primitive:NN \lastnodetype \tex_lastnodetype:D
- \@@_primitive:NN \marks \tex_marks:D
- \@@_primitive:NN \middle \tex_middle:D
- \@@_primitive:NN \muexpr \tex_muexpr:D
- \@@_primitive:NN \mutoglue \tex_mutoglue:D
- \@@_primitive:NN \numexpr \tex_numexpr:D
- \@@_primitive:NN \pagediscards \tex_pagediscards:D
- \@@_primitive:NN \parshapedimen \tex_parshapedimen:D
- \@@_primitive:NN \parshapeindent \tex_parshapeindent:D
- \@@_primitive:NN \parshapelength \tex_parshapelength:D
- \@@_primitive:NN \predisplaydirection \tex_predisplaydirection:D
- \@@_primitive:NN \protected \tex_protected:D
- \@@_primitive:NN \readline \tex_readline:D
- \@@_primitive:NN \savinghyphcodes \tex_savinghyphcodes:D
- \@@_primitive:NN \savingvdiscards \tex_savingvdiscards:D
- \@@_primitive:NN \scantokens \tex_scantokens:D
- \@@_primitive:NN \showgroups \tex_showgroups:D
- \@@_primitive:NN \showifs \tex_showifs:D
- \@@_primitive:NN \showtokens \tex_showtokens:D
- \@@_primitive:NN \splitbotmarks \tex_splitbotmarks:D
- \@@_primitive:NN \splitdiscards \tex_splitdiscards:D
- \@@_primitive:NN \splitfirstmarks \tex_splitfirstmarks:D
- \@@_primitive:NN \TeXXeTstate \tex_TeXXeTstate:D
- \@@_primitive:NN \topmarks \tex_topmarks:D
- \@@_primitive:NN \tracingassigns \tex_tracingassigns:D
- \@@_primitive:NN \tracinggroups \tex_tracinggroups:D
- \@@_primitive:NN \tracingifs \tex_tracingifs:D
- \@@_primitive:NN \tracingnesting \tex_tracingnesting:D
- \@@_primitive:NN \tracingscantokens \tex_tracingscantokens:D
- \@@_primitive:NN \unexpanded \tex_unexpanded:D
- \@@_primitive:NN \unless \tex_unless:D
- \@@_primitive:NN \widowpenalties \tex_widowpenalties:D
-% \end{macrocode}
-% Post-\eTeX{} primitives do not always end up with the same name in all
-% engines, if indeed they are available cross-engine anyway. We therefore
-% take the approach of preferring the shortest name that makes sense. First,
-% we deal with the primitives introduced by \pdfTeX{} which directly
-% relate to PDF output: these are copied with the names unchanged.
-% \begin{macrocode}
- \@@_primitive:NN \pdfannot \tex_pdfannot:D
- \@@_primitive:NN \pdfcatalog \tex_pdfcatalog:D
- \@@_primitive:NN \pdfcompresslevel \tex_pdfcompresslevel:D
- \@@_primitive:NN \pdfcolorstack \tex_pdfcolorstack:D
- \@@_primitive:NN \pdfcolorstackinit \tex_pdfcolorstackinit:D
- \@@_primitive:NN \pdfdecimaldigits \tex_pdfdecimaldigits:D
- \@@_primitive:NN \pdfdest \tex_pdfdest:D
- \@@_primitive:NN \pdfdestmargin \tex_pdfdestmargin:D
- \@@_primitive:NN \pdfendlink \tex_pdfendlink:D
- \@@_primitive:NN \pdfendthread \tex_pdfendthread:D
- \@@_primitive:NN \pdffakespace \tex_pdffakespace:D
- \@@_primitive:NN \pdffontattr \tex_pdffontattr:D
- \@@_primitive:NN \pdffontname \tex_pdffontname:D
- \@@_primitive:NN \pdffontobjnum \tex_pdffontobjnum:D
- \@@_primitive:NN \pdfgamma \tex_pdfgamma:D
- \@@_primitive:NN \pdfgentounicode \tex_pdfgentounicode:D
- \@@_primitive:NN \pdfglyphtounicode \tex_pdfglyphtounicode:D
- \@@_primitive:NN \pdfhorigin \tex_pdfhorigin:D
- \@@_primitive:NN \pdfimageapplygamma \tex_pdfimageapplygamma:D
- \@@_primitive:NN \pdfimagegamma \tex_pdfimagegamma:D
- \@@_primitive:NN \pdfimagehicolor \tex_pdfimagehicolor:D
- \@@_primitive:NN \pdfimageresolution \tex_pdfimageresolution:D
- \@@_primitive:NN \pdfincludechars \tex_pdfincludechars:D
- \@@_primitive:NN \pdfinclusioncopyfonts \tex_pdfinclusioncopyfonts:D
- \@@_primitive:NN \pdfinclusionerrorlevel
- \tex_pdfinclusionerrorlevel:D
- \@@_primitive:NN \pdfinfo \tex_pdfinfo:D
- \@@_primitive:NN \pdfinfoomitdate \tex_pdfinfoomitdate:D
- \@@_primitive:NN \pdfinterwordspaceoff \tex_pdfinterwordspaceoff:D
- \@@_primitive:NN \pdfinterwordspaceon \tex_pdfinterwordspaceon:D
- \@@_primitive:NN \pdflastannot \tex_pdflastannot:D
- \@@_primitive:NN \pdflastlink \tex_pdflastlink:D
- \@@_primitive:NN \pdflastobj \tex_pdflastobj:D
- \@@_primitive:NN \pdflastxform \tex_pdflastxform:D
- \@@_primitive:NN \pdflastximage \tex_pdflastximage:D
- \@@_primitive:NN \pdflastximagecolordepth
- \tex_pdflastximagecolordepth:D
- \@@_primitive:NN \pdflastximagepages \tex_pdflastximagepages:D
- \@@_primitive:NN \pdflinkmargin \tex_pdflinkmargin:D
- \@@_primitive:NN \pdfliteral \tex_pdfliteral:D
- \@@_primitive:NN \pdfmapfile \tex_pdfmapfile:D
- \@@_primitive:NN \pdfmapline \tex_pdfmapline:D
- \@@_primitive:NN \pdfmajorversion \tex_pdfmajorversion:D
- \@@_primitive:NN \pdfminorversion \tex_pdfminorversion:D
- \@@_primitive:NN \pdfnames \tex_pdfnames:D
- \@@_primitive:NN \pdfnobuiltintounicode \tex_pdfnobuiltintounicode:D
- \@@_primitive:NN \pdfobj \tex_pdfobj:D
- \@@_primitive:NN \pdfobjcompresslevel \tex_pdfobjcompresslevel:D
- \@@_primitive:NN \pdfomitcharset \tex_pdfomitcharset:D
- \@@_primitive:NN \pdfoutline \tex_pdfoutline:D
- \@@_primitive:NN \pdfoutput \tex_pdfoutput:D
- \@@_primitive:NN \pdfpageattr \tex_pdfpageattr:D
- \@@_primitive:NN \pdfpagesattr \tex_pdfpagesattr:D
- \@@_primitive:NN \pdfpagebox \tex_pdfpagebox:D
- \@@_primitive:NN \pdfpageref \tex_pdfpageref:D
- \@@_primitive:NN \pdfpageresources \tex_pdfpageresources:D
- \@@_primitive:NN \pdfpagesattr \tex_pdfpagesattr:D
- \@@_primitive:NN \pdfrefobj \tex_pdfrefobj:D
- \@@_primitive:NN \pdfrefxform \tex_pdfrefxform:D
- \@@_primitive:NN \pdfrefximage \tex_pdfrefximage:D
- \@@_primitive:NN \pdfrestore \tex_pdfrestore:D
- \@@_primitive:NN \pdfretval \tex_pdfretval:D
- \@@_primitive:NN \pdfrunninglinkoff \tex_pdfrunninglinkoff:D
- \@@_primitive:NN \pdfrunninglinkon \tex_pdfrunninglinkon:D
- \@@_primitive:NN \pdfsave \tex_pdfsave:D
- \@@_primitive:NN \pdfsetmatrix \tex_pdfsetmatrix:D
- \@@_primitive:NN \pdfstartlink \tex_pdfstartlink:D
- \@@_primitive:NN \pdfstartthread \tex_pdfstartthread:D
- \@@_primitive:NN \pdfsuppressptexinfo \tex_pdfsuppressptexinfo:D
- \@@_primitive:NN \pdfsuppresswarningdupdest
- \tex_pdfsuppresswarningdupdest:D
- \@@_primitive:NN \pdfsuppresswarningdupmap
- \tex_pdfsuppresswarningdupmap:D
- \@@_primitive:NN \pdfsuppresswarningpagegroup
- \tex_pdfsuppresswarningpagegroup:D
- \@@_primitive:NN \pdfthread \tex_pdfthread:D
- \@@_primitive:NN \pdfthreadmargin \tex_pdfthreadmargin:D
- \@@_primitive:NN \pdftrailer \tex_pdftrailer:D
- \@@_primitive:NN \pdftrailerid \tex_pdftrailerid:D
- \@@_primitive:NN \pdfuniqueresname \tex_pdfuniqueresname:D
- \@@_primitive:NN \pdfvorigin \tex_pdfvorigin:D
- \@@_primitive:NN \pdfxform \tex_pdfxform:D
- \@@_primitive:NN \pdfxformname \tex_pdfxformname:D
- \@@_primitive:NN \pdfximage \tex_pdfximage:D
- \@@_primitive:NN \pdfximagebbox \tex_pdfximagebbox:D
-% \end{macrocode}
-% These are not related to PDF output and either already appear in other
-% engines without the |\pdf| prefix, or might reasonably do so at some
-% future stage. We therefore drop the leading |pdf| here.
-% \begin{macrocode}
- \@@_primitive:NN \ifpdfabsdim \tex_ifabsdim:D
- \@@_primitive:NN \ifpdfabsnum \tex_ifabsnum:D
- \@@_primitive:NN \ifpdfprimitive \tex_ifprimitive:D
- \@@_primitive:NN \pdfadjustinterwordglue
- \tex_adjustinterwordglue:D
- \@@_primitive:NN \pdfadjustspacing \tex_adjustspacing:D
- \@@_primitive:NN \pdfappendkern \tex_appendkern:D
- \@@_primitive:NN \pdfcopyfont \tex_copyfont:D
- \@@_primitive:NN \pdfcreationdate \tex_creationdate:D
- \@@_primitive:NN \pdfdraftmode \tex_draftmode:D
- \@@_primitive:NN \pdfeachlinedepth \tex_eachlinedepth:D
- \@@_primitive:NN \pdfeachlineheight \tex_eachlineheight:D
- \@@_primitive:NN \pdfelapsedtime \tex_elapsedtime:D
- \@@_primitive:NN \pdfescapehex \tex_escapehex:D
- \@@_primitive:NN \pdfescapename \tex_escapename:D
- \@@_primitive:NN \pdfescapestring \tex_escapestring:D
- \@@_primitive:NN \pdffirstlineheight \tex_firstlineheight:D
- \@@_primitive:NN \pdffontexpand \tex_fontexpand:D
- \@@_primitive:NN \pdffontsize \tex_fontsize:D
- \@@_primitive:NN \pdfignoreddimen \tex_ignoreddimen:D
- \@@_primitive:NN \pdfinsertht \tex_insertht:D
- \@@_primitive:NN \pdflastlinedepth \tex_lastlinedepth:D
- \@@_primitive:NN \pdflastmatch \tex_lastmatch:D
- \@@_primitive:NN \pdflastxpos \tex_lastxpos:D
- \@@_primitive:NN \pdflastypos \tex_lastypos:D
- \@@_primitive:NN \pdfmatch \tex_match:D
- \@@_primitive:NN \pdfnoligatures \tex_noligatures:D
- \@@_primitive:NN \pdfnormaldeviate \tex_normaldeviate:D
- \@@_primitive:NN \pdfpageheight \tex_pageheight:D
- \@@_primitive:NN \pdfpagewidth \tex_pagewidth:D
- \@@_primitive:NN \pdfpkmode \tex_pkmode:D
- \@@_primitive:NN \pdfpkresolution \tex_pkresolution:D
- \@@_primitive:NN \pdfprimitive \tex_primitive:D
- \@@_primitive:NN \pdfprependkern \tex_prependkern:D
- \@@_primitive:NN \pdfprotrudechars \tex_protrudechars:D
- \@@_primitive:NN \pdfpxdimen \tex_pxdimen:D
- \@@_primitive:NN \pdfrandomseed \tex_randomseed:D
- \@@_primitive:NN \pdfresettimer \tex_resettimer:D
- \@@_primitive:NN \pdfsavepos \tex_savepos:D
- \@@_primitive:NN \pdfsetrandomseed \tex_setrandomseed:D
- \@@_primitive:NN \pdfshellescape \tex_shellescape:D
- \@@_primitive:NN \pdftracingfonts \tex_tracingfonts:D
- \@@_primitive:NN \pdfunescapehex \tex_unescapehex:D
- \@@_primitive:NN \pdfuniformdeviate \tex_uniformdeviate:D
-% \end{macrocode}
-% The version primitives are not related to PDF mode but are
-% \pdfTeX{}-specific, so again are carried forward unchanged.
-% \begin{macrocode}
- \@@_primitive:NN \pdftexbanner \tex_pdftexbanner:D
- \@@_primitive:NN \pdftexrevision \tex_pdftexrevision:D
- \@@_primitive:NN \pdftexversion \tex_pdftexversion:D
-% \end{macrocode}
-% These ones appear in \pdfTeX{} but don't have |pdf| in the name at all:
-% no decisions to make.
-% \begin{macrocode}
- \@@_primitive:NN \efcode \tex_efcode:D
- \@@_primitive:NN \ifincsname \tex_ifincsname:D
- \@@_primitive:NN \knaccode \tex_knaccode:D
- \@@_primitive:NN \knbccode \tex_knbccode:D
- \@@_primitive:NN \knbscode \tex_knbscode:D
- \@@_primitive:NN \leftmarginkern \tex_leftmarginkern:D
- \@@_primitive:NN \letterspacefont \tex_letterspacefont:D
- \@@_primitive:NN \lpcode \tex_lpcode:D
- \@@_primitive:NN \quitvmode \tex_quitvmode:D
- \@@_primitive:NN \rightmarginkern \tex_rightmarginkern:D
- \@@_primitive:NN \rpcode \tex_rpcode:D
- \@@_primitive:NN \shbscode \tex_shbscode:D
- \@@_primitive:NN \stbscode \tex_stbscode:D
- \@@_primitive:NN \synctex \tex_synctex:D
- \@@_primitive:NN \tagcode \tex_tagcode:D
-% \end{macrocode}
-% Post \pdfTeX{} primitive availability gets more complex. Both \XeTeX{} and
-% \LuaTeX{} have varying names for some primitives from \pdfTeX{}. Particularly
-% for \LuaTeX{} tracking all of that would be hard. Instead, we now check that
-% we only save primitives if they actually exist.
-% \begin{macrocode}
-%</names|package>
-%<*package>
- \tex_long:D \tex_def:D \use_ii:nn #1#2 {#2}
- \tex_long:D \tex_def:D \use_none:n #1 { }
- \tex_long:D \tex_def:D \@@_primitive:NN #1#2
- {
- \tex_ifdefined:D #1
- \tex_expandafter:D \use_ii:nn
- \tex_fi:D
- \use_none:n { \tex_global:D \tex_let:D #2 #1 }
- }
-%</package>
-%<*names|package>
-% \end{macrocode}
-% Some \pdfTeX{} primitives are handled here because they got dropped in
-% \LuaTeX{} but the corresponding internal names are emulated later. The
-% Lua code is already loaded at this point, so we shouldn't overwrite them.
-% \begin{macrocode}
- \@@_primitive:NN \pdfstrcmp \tex_strcmp:D
- \@@_primitive:NN \pdffilesize \tex_filesize:D
- \@@_primitive:NN \pdfmdfivesum \tex_mdfivesum:D
- \@@_primitive:NN \pdffilemoddate \tex_filemoddate:D
- \@@_primitive:NN \pdffiledump \tex_filedump:D
-% \end{macrocode}
-% \XeTeX{}-specific primitives. Note that \XeTeX{}'s \tn{strcmp} is
-% handled earlier and is \enquote{rolled up} into \tn{pdfstrcmp}.
-% A few cross-compatibility names which lack
-% the |pdf| of the original are handled later.
-% \begin{macrocode}
- \@@_primitive:NN \suppressfontnotfounderror
- \tex_suppressfontnotfounderror:D
- \@@_primitive:NN \XeTeXcharclass \tex_XeTeXcharclass:D
- \@@_primitive:NN \XeTeXcharglyph \tex_XeTeXcharglyph:D
- \@@_primitive:NN \XeTeXcountfeatures \tex_XeTeXcountfeatures:D
- \@@_primitive:NN \XeTeXcountglyphs \tex_XeTeXcountglyphs:D
- \@@_primitive:NN \XeTeXcountselectors \tex_XeTeXcountselectors:D
- \@@_primitive:NN \XeTeXcountvariations \tex_XeTeXcountvariations:D
- \@@_primitive:NN \XeTeXdefaultencoding \tex_XeTeXdefaultencoding:D
- \@@_primitive:NN \XeTeXdashbreakstate \tex_XeTeXdashbreakstate:D
- \@@_primitive:NN \XeTeXfeaturecode \tex_XeTeXfeaturecode:D
- \@@_primitive:NN \XeTeXfeaturename \tex_XeTeXfeaturename:D
- \@@_primitive:NN \XeTeXfindfeaturebyname
- \tex_XeTeXfindfeaturebyname:D
- \@@_primitive:NN \XeTeXfindselectorbyname
- \tex_XeTeXfindselectorbyname:D
- \@@_primitive:NN \XeTeXfindvariationbyname
- \tex_XeTeXfindvariationbyname:D
- \@@_primitive:NN \XeTeXfirstfontchar \tex_XeTeXfirstfontchar:D
- \@@_primitive:NN \XeTeXfonttype \tex_XeTeXfonttype:D
- \@@_primitive:NN \XeTeXgenerateactualtext
- \tex_XeTeXgenerateactualtext:D
- \@@_primitive:NN \XeTeXglyph \tex_XeTeXglyph:D
- \@@_primitive:NN \XeTeXglyphbounds \tex_XeTeXglyphbounds:D
- \@@_primitive:NN \XeTeXglyphindex \tex_XeTeXglyphindex:D
- \@@_primitive:NN \XeTeXglyphname \tex_XeTeXglyphname:D
- \@@_primitive:NN \XeTeXinputencoding \tex_XeTeXinputencoding:D
- \@@_primitive:NN \XeTeXinputnormalization
- \tex_XeTeXinputnormalization:D
- \@@_primitive:NN \XeTeXinterchartokenstate
- \tex_XeTeXinterchartokenstate:D
- \@@_primitive:NN \XeTeXinterchartoks \tex_XeTeXinterchartoks:D
- \@@_primitive:NN \XeTeXisdefaultselector
- \tex_XeTeXisdefaultselector:D
- \@@_primitive:NN \XeTeXisexclusivefeature
- \tex_XeTeXisexclusivefeature:D
- \@@_primitive:NN \XeTeXlastfontchar \tex_XeTeXlastfontchar:D
- \@@_primitive:NN \XeTeXlinebreakskip \tex_XeTeXlinebreakskip:D
- \@@_primitive:NN \XeTeXlinebreaklocale \tex_XeTeXlinebreaklocale:D
- \@@_primitive:NN \XeTeXlinebreakpenalty \tex_XeTeXlinebreakpenalty:D
- \@@_primitive:NN \XeTeXOTcountfeatures \tex_XeTeXOTcountfeatures:D
- \@@_primitive:NN \XeTeXOTcountlanguages \tex_XeTeXOTcountlanguages:D
- \@@_primitive:NN \XeTeXOTcountscripts \tex_XeTeXOTcountscripts:D
- \@@_primitive:NN \XeTeXOTfeaturetag \tex_XeTeXOTfeaturetag:D
- \@@_primitive:NN \XeTeXOTlanguagetag \tex_XeTeXOTlanguagetag:D
- \@@_primitive:NN \XeTeXOTscripttag \tex_XeTeXOTscripttag:D
- \@@_primitive:NN \XeTeXpdffile \tex_XeTeXpdffile:D
- \@@_primitive:NN \XeTeXpdfpagecount \tex_XeTeXpdfpagecount:D
- \@@_primitive:NN \XeTeXpicfile \tex_XeTeXpicfile:D
- \@@_primitive:NN \XeTeXrevision \tex_XeTeXrevision:D
- \@@_primitive:NN \XeTeXselectorname \tex_XeTeXselectorname:D
- \@@_primitive:NN \XeTeXtracingfonts \tex_XeTeXtracingfonts:D
- \@@_primitive:NN \XeTeXupwardsmode \tex_XeTeXupwardsmode:D
- \@@_primitive:NN \XeTeXuseglyphmetrics \tex_XeTeXuseglyphmetrics:D
- \@@_primitive:NN \XeTeXvariation \tex_XeTeXvariation:D
- \@@_primitive:NN \XeTeXvariationdefault \tex_XeTeXvariationdefault:D
- \@@_primitive:NN \XeTeXvariationmax \tex_XeTeXvariationmax:D
- \@@_primitive:NN \XeTeXvariationmin \tex_XeTeXvariationmin:D
- \@@_primitive:NN \XeTeXvariationname \tex_XeTeXvariationname:D
- \@@_primitive:NN \XeTeXversion \tex_XeTeXversion:D
- \@@_primitive:NN \XeTeXselectorcode \tex_XeTeXselectorcode:D
- \@@_primitive:NN \XeTeXinterwordspaceshaping
- \tex_XeTeXinterwordspaceshaping:D
- \@@_primitive:NN \XeTeXhyphenatablelength
- \tex_XeTeXhyphenatablelength:D
-% \end{macrocode}
-% Primitives from \pdfTeX{} that \XeTeX{} renames: also helps with
-% \LuaTeX{}.
-% \begin{macrocode}
- \@@_primitive:NN \creationdate \tex_creationdate:D
- \@@_primitive:NN \elapsedtime \tex_elapsedtime:D
- \@@_primitive:NN \filedump \tex_filedump:D
- \@@_primitive:NN \filemoddate \tex_filemoddate:D
- \@@_primitive:NN \filesize \tex_filesize:D
- \@@_primitive:NN \mdfivesum \tex_mdfivesum:D
- \@@_primitive:NN \ifprimitive \tex_ifprimitive:D
- \@@_primitive:NN \primitive \tex_primitive:D
- \@@_primitive:NN \resettimer \tex_resettimer:D
- \@@_primitive:NN \shellescape \tex_shellescape:D
- \@@_primitive:NN \XeTeXprotrudechars \tex_protrudechars:D
-% \end{macrocode}
-% Primitives from \LuaTeX{}, some of which have been ported back to
-% \XeTeX{}.
-% \begin{macrocode}
- \@@_primitive:NN \alignmark \tex_alignmark:D
- \@@_primitive:NN \aligntab \tex_aligntab:D
- \@@_primitive:NN \attribute \tex_attribute:D
- \@@_primitive:NN \attributedef \tex_attributedef:D
- \@@_primitive:NN \automaticdiscretionary
- \tex_automaticdiscretionary:D
- \@@_primitive:NN \automatichyphenmode \tex_automatichyphenmode:D
- \@@_primitive:NN \automatichyphenpenalty
- \tex_automatichyphenpenalty:D
- \@@_primitive:NN \begincsname \tex_begincsname:D
- \@@_primitive:NN \bodydir \tex_bodydir:D
- \@@_primitive:NN \bodydirection \tex_bodydirection:D
- \@@_primitive:NN \boundary \tex_boundary:D
- \@@_primitive:NN \boxdir \tex_boxdir:D
- \@@_primitive:NN \boxdirection \tex_boxdirection:D
- \@@_primitive:NN \breakafterdirmode \tex_breakafterdirmode:D
- \@@_primitive:NN \catcodetable \tex_catcodetable:D
- \@@_primitive:NN \clearmarks \tex_clearmarks:D
-% \@@_primitive:NN \compoundhyphenmode
-% \tex_compoundhyphenmode:D % not documented in manual
- \@@_primitive:NN \crampeddisplaystyle \tex_crampeddisplaystyle:D
- \@@_primitive:NN \crampedscriptscriptstyle
- \tex_crampedscriptscriptstyle:D
- \@@_primitive:NN \crampedscriptstyle \tex_crampedscriptstyle:D
- \@@_primitive:NN \crampedtextstyle \tex_crampedtextstyle:D
- \@@_primitive:NN \csstring \tex_csstring:D
- \@@_primitive:NN \deferred \tex_deferred:D
- \@@_primitive:NN \discretionaryligaturemode
- \tex_discretionaryligaturemode:D
- \@@_primitive:NN \directlua \tex_directlua:D
- \@@_primitive:NN \dviextension \tex_dviextension:D
- \@@_primitive:NN \dvifeedback \tex_dvifeedback:D
- \@@_primitive:NN \dvivariable \tex_dvivariable:D
- \@@_primitive:NN \eTeXglueshrinkorder \tex_eTeXglueshrinkorder:D
- \@@_primitive:NN \eTeXgluestretchorder \tex_eTeXgluestretchorder:D
- \@@_primitive:NN \endlocalcontrol \tex_endlocalcontrol:D
- \@@_primitive:NN \etoksapp \tex_etoksapp:D
- \@@_primitive:NN \etokspre \tex_etokspre:D
- \@@_primitive:NN \exceptionpenalty \tex_exceptionpenalty:D
- \@@_primitive:NN \exhyphenchar \tex_exhyphenchar:D
- \@@_primitive:NN \explicithyphenpenalty \tex_explicithyphenpenalty:D
- \@@_primitive:NN \expanded \tex_expanded:D
- \@@_primitive:NN \explicitdiscretionary \tex_explicitdiscretionary:D
- \@@_primitive:NN \firstvalidlanguage \tex_firstvalidlanguage:D
-% \@@_primitive:NN \fixupboxesmode
-% \tex_fixupboxesmode:D % not documented in manual
- \@@_primitive:NN \fontid \tex_fontid:D
- \@@_primitive:NN \formatname \tex_formatname:D
- \@@_primitive:NN \hjcode \tex_hjcode:D
- \@@_primitive:NN \hpack \tex_hpack:D
- \@@_primitive:NN \hyphenationbounds \tex_hyphenationbounds:D
- \@@_primitive:NN \hyphenationmin \tex_hyphenationmin:D
- \@@_primitive:NN \hyphenpenaltymode \tex_hyphenpenaltymode:D
- \@@_primitive:NN \gleaders \tex_gleaders:D
- \@@_primitive:NN \glet \tex_glet:D
- \@@_primitive:NN \glyphdimensionsmode \tex_glyphdimensionsmode:D
- \@@_primitive:NN \gtoksapp \tex_gtoksapp:D
- \@@_primitive:NN \gtokspre \tex_gtokspre:D
- \@@_primitive:NN \ifcondition \tex_ifcondition:D
- \@@_primitive:NN \immediateassigned \tex_immediateassigned:D
- \@@_primitive:NN \immediateassignment \tex_immediateassignment:D
- \@@_primitive:NN \initcatcodetable \tex_initcatcodetable:D
- \@@_primitive:NN \lastnamedcs \tex_lastnamedcs:D
- \@@_primitive:NN \latelua \tex_latelua:D
- \@@_primitive:NN \lateluafunction \tex_lateluafunction:D
- \@@_primitive:NN \leftghost \tex_leftghost:D
- \@@_primitive:NN \letcharcode \tex_letcharcode:D
- \@@_primitive:NN \linedir \tex_linedir:D
- \@@_primitive:NN \linedirection \tex_linedirection:D
- \@@_primitive:NN \localbrokenpenalty \tex_localbrokenpenalty:D
- \@@_primitive:NN \localinterlinepenalty \tex_localinterlinepenalty:D
- \@@_primitive:NN \luabytecode \tex_luabytecode:D
- \@@_primitive:NN \luabytecodecall \tex_luabytecodecall:D
- \@@_primitive:NN \luacopyinputnodes \tex_luacopyinputnodes:D
- \@@_primitive:NN \luadef \tex_luadef:D
- \@@_primitive:NN \localleftbox \tex_localleftbox:D
- \@@_primitive:NN \localrightbox \tex_localrightbox:D
- \@@_primitive:NN \luaescapestring \tex_luaescapestring:D
- \@@_primitive:NN \luafunction \tex_luafunction:D
- \@@_primitive:NN \luafunctioncall \tex_luafunctioncall:D
- \@@_primitive:NN \luatexbanner \tex_luatexbanner:D
- \@@_primitive:NN \luatexrevision \tex_luatexrevision:D
- \@@_primitive:NN \luatexversion \tex_luatexversion:D
- \@@_primitive:NN \mathdefaultsmode \tex_mathdefaultsmode:D
- \@@_primitive:NN \mathdelimitersmode \tex_mathdelimitersmode:D
- \@@_primitive:NN \mathdir \tex_mathdir:D
- \@@_primitive:NN \mathdirection \tex_mathdirection:D
- \@@_primitive:NN \mathdisplayskipmode \tex_mathdisplayskipmode:D
- \@@_primitive:NN \matheqdirmode \tex_matheqdirmode:D
- \@@_primitive:NN \matheqnogapstep \tex_matheqnogapstep:D
- \@@_primitive:NN \mathflattenmode \tex_mathflattenmode:D
- \@@_primitive:NN \mathitalicsmode \tex_mathitalicsmode:D
- \@@_primitive:NN \mathnolimitsmode \tex_mathnolimitsmode:D
- \@@_primitive:NN \mathoption \tex_mathoption:D
- \@@_primitive:NN \mathpenaltiesmode \tex_mathpenaltiesmode:D
- \@@_primitive:NN \mathrulesfam \tex_mathrulesfam:D
-% \@@_primitive:NN \mathrulesmode
-% \tex_mathrulesmode:D % not documented in manual
-% \@@_primitive:NN \mathrulethicknessmode
-% \tex_mathrulethicknessmode:D % not documented in manual
- \@@_primitive:NN \mathscriptsmode \tex_mathscriptsmode:D
- \@@_primitive:NN \mathscriptboxmode \tex_mathscriptboxmode:D
- \@@_primitive:NN \mathscriptcharmode \tex_mathscriptcharmode:D
- \@@_primitive:NN \mathstyle \tex_mathstyle:D
- \@@_primitive:NN \mathsurroundmode \tex_mathsurroundmode:D
- \@@_primitive:NN \mathsurroundskip \tex_mathsurroundskip:D
- \@@_primitive:NN \nohrule \tex_nohrule:D
- \@@_primitive:NN \nokerns \tex_nokerns:D
- \@@_primitive:NN \noligs \tex_noligs:D
- \@@_primitive:NN \nospaces \tex_nospaces:D
- \@@_primitive:NN \novrule \tex_novrule:D
- \@@_primitive:NN \outputbox \tex_outputbox:D
- \@@_primitive:NN \pagebottomoffset \tex_pagebottomoffset:D
- \@@_primitive:NN \pagedir \tex_pagedir:D
- \@@_primitive:NN \pagedirection \tex_pagedirection:D
- \@@_primitive:NN \pageleftoffset \tex_pageleftoffset:D
- \@@_primitive:NN \pagerightoffset \tex_pagerightoffset:D
- \@@_primitive:NN \pagetopoffset \tex_pagetopoffset:D
- \@@_primitive:NN \pardir \tex_pardir:D
- \@@_primitive:NN \pardirection \tex_pardirection:D
- \@@_primitive:NN \pdfextension \tex_pdfextension:D
- \@@_primitive:NN \pdffeedback \tex_pdffeedback:D
- \@@_primitive:NN \pdfvariable \tex_pdfvariable:D
- \@@_primitive:NN \postexhyphenchar \tex_postexhyphenchar:D
- \@@_primitive:NN \posthyphenchar \tex_posthyphenchar:D
- \@@_primitive:NN \prebinoppenalty \tex_prebinoppenalty:D
- \@@_primitive:NN \predisplaygapfactor \tex_predisplaygapfactor:D
- \@@_primitive:NN \preexhyphenchar \tex_preexhyphenchar:D
- \@@_primitive:NN \prehyphenchar \tex_prehyphenchar:D
- \@@_primitive:NN \prerelpenalty \tex_prerelpenalty:D
- \@@_primitive:NN \protrusionboundary \tex_protrusionboundary:D
- \@@_primitive:NN \rightghost \tex_rightghost:D
- \@@_primitive:NN \savecatcodetable \tex_savecatcodetable:D
- \@@_primitive:NN \scantextokens \tex_scantextokens:D
- \@@_primitive:NN \setfontid \tex_setfontid:D
- \@@_primitive:NN \shapemode \tex_shapemode:D
- \@@_primitive:NN \suppressifcsnameerror \tex_suppressifcsnameerror:D
- \@@_primitive:NN \suppresslongerror \tex_suppresslongerror:D
- \@@_primitive:NN \suppressmathparerror \tex_suppressmathparerror:D
- \@@_primitive:NN \suppressoutererror \tex_suppressoutererror:D
- \@@_primitive:NN \suppressprimitiveerror
- \tex_suppressprimitiveerror:D
- \@@_primitive:NN \textdir \tex_textdir:D
- \@@_primitive:NN \textdirection \tex_textdirection:D
- \@@_primitive:NN \toksapp \tex_toksapp:D
- \@@_primitive:NN \tokspre \tex_tokspre:D
- \@@_primitive:NN \tpack \tex_tpack:D
- \@@_primitive:NN \variablefam \tex_variablefam:D
- \@@_primitive:NN \vpack \tex_vpack:D
- \@@_primitive:NN \wordboundary \tex_wordboundary:D
- \@@_primitive:NN \xtoksapp \tex_xtoksapp:D
- \@@_primitive:NN \xtokspre \tex_xtokspre:D
-% \end{macrocode}
-% Primitives from \pdfTeX{} that \LuaTeX{} renames.
-% \begin{macrocode}
- \@@_primitive:NN \adjustspacing \tex_adjustspacing:D
- \@@_primitive:NN \copyfont \tex_copyfont:D
- \@@_primitive:NN \draftmode \tex_draftmode:D
- \@@_primitive:NN \expandglyphsinfont \tex_fontexpand:D
- \@@_primitive:NN \ifabsdim \tex_ifabsdim:D
- \@@_primitive:NN \ifabsnum \tex_ifabsnum:D
- \@@_primitive:NN \ignoreligaturesinfont \tex_ignoreligaturesinfont:D
- \@@_primitive:NN \insertht \tex_insertht:D
- \@@_primitive:NN \lastsavedboxresourceindex
- \tex_pdflastxform:D
- \@@_primitive:NN \lastsavedimageresourceindex
- \tex_pdflastximage:D
- \@@_primitive:NN \lastsavedimageresourcepages
- \tex_pdflastximagepages:D
- \@@_primitive:NN \lastxpos \tex_lastxpos:D
- \@@_primitive:NN \lastypos \tex_lastypos:D
- \@@_primitive:NN \normaldeviate \tex_normaldeviate:D
- \@@_primitive:NN \outputmode \tex_pdfoutput:D
- \@@_primitive:NN \pageheight \tex_pageheight:D
- \@@_primitive:NN \pagewidth \tex_pagewidth:D
- \@@_primitive:NN \protrudechars \tex_protrudechars:D
- \@@_primitive:NN \pxdimen \tex_pxdimen:D
- \@@_primitive:NN \randomseed \tex_randomseed:D
- \@@_primitive:NN \useboxresource \tex_pdfrefxform:D
- \@@_primitive:NN \useimageresource \tex_pdfrefximage:D
- \@@_primitive:NN \savepos \tex_savepos:D
- \@@_primitive:NN \saveboxresource \tex_pdfxform:D
- \@@_primitive:NN \saveimageresource \tex_pdfximage:D
- \@@_primitive:NN \setrandomseed \tex_setrandomseed:D
- \@@_primitive:NN \tracingfonts \tex_tracingfonts:D
- \@@_primitive:NN \uniformdeviate \tex_uniformdeviate:D
-% \end{macrocode}
-% The set of Unicode math primitives were introduced by \XeTeX{} and \LuaTeX{}
-% in a somewhat complex fashion: a few first as |\XeTeX...| which were then
-% renamed with \LuaTeX{} having a lot more. These names now all start
-% |\U...| and mainly |\Umath...|.
-% \begin{macrocode}
- \@@_primitive:NN \Uchar \tex_Uchar:D
- \@@_primitive:NN \Ucharcat \tex_Ucharcat:D
- \@@_primitive:NN \Udelcode \tex_Udelcode:D
- \@@_primitive:NN \Udelcodenum \tex_Udelcodenum:D
- \@@_primitive:NN \Udelimiter \tex_Udelimiter:D
- \@@_primitive:NN \Udelimiterover \tex_Udelimiterover:D
- \@@_primitive:NN \Udelimiterunder \tex_Udelimiterunder:D
- \@@_primitive:NN \Uhextensible \tex_Uhextensible:D
- \@@_primitive:NN \Uleft \tex_Uleft:D
- \@@_primitive:NN \Umathaccent \tex_Umathaccent:D
- \@@_primitive:NN \Umathaxis \tex_Umathaxis:D
- \@@_primitive:NN \Umathbinbinspacing \tex_Umathbinbinspacing:D
- \@@_primitive:NN \Umathbinclosespacing \tex_Umathbinclosespacing:D
- \@@_primitive:NN \Umathbininnerspacing \tex_Umathbininnerspacing:D
- \@@_primitive:NN \Umathbinopenspacing \tex_Umathbinopenspacing:D
- \@@_primitive:NN \Umathbinopspacing \tex_Umathbinopspacing:D
- \@@_primitive:NN \Umathbinordspacing \tex_Umathbinordspacing:D
- \@@_primitive:NN \Umathbinpunctspacing \tex_Umathbinpunctspacing:D
- \@@_primitive:NN \Umathbinrelspacing \tex_Umathbinrelspacing:D
- \@@_primitive:NN \Umathchar \tex_Umathchar:D
- \@@_primitive:NN \Umathcharclass \tex_Umathcharclass:D
- \@@_primitive:NN \Umathchardef \tex_Umathchardef:D
- \@@_primitive:NN \Umathcharfam \tex_Umathcharfam:D
- \@@_primitive:NN \Umathcharnum \tex_Umathcharnum:D
- \@@_primitive:NN \Umathcharnumdef \tex_Umathcharnumdef:D
- \@@_primitive:NN \Umathcharslot \tex_Umathcharslot:D
- \@@_primitive:NN \Umathclosebinspacing \tex_Umathclosebinspacing:D
- \@@_primitive:NN \Umathcloseclosespacing
- \tex_Umathcloseclosespacing:D
- \@@_primitive:NN \Umathcloseinnerspacing
- \tex_Umathcloseinnerspacing:D
- \@@_primitive:NN \Umathcloseopenspacing \tex_Umathcloseopenspacing:D
- \@@_primitive:NN \Umathcloseopspacing \tex_Umathcloseopspacing:D
- \@@_primitive:NN \Umathcloseordspacing \tex_Umathcloseordspacing:D
- \@@_primitive:NN \Umathclosepunctspacing
- \tex_Umathclosepunctspacing:D
- \@@_primitive:NN \Umathcloserelspacing \tex_Umathcloserelspacing:D
- \@@_primitive:NN \Umathcode \tex_Umathcode:D
- \@@_primitive:NN \Umathcodenum \tex_Umathcodenum:D
- \@@_primitive:NN \Umathconnectoroverlapmin
- \tex_Umathconnectoroverlapmin:D
- \@@_primitive:NN \Umathfractiondelsize \tex_Umathfractiondelsize:D
- \@@_primitive:NN \Umathfractiondenomdown
- \tex_Umathfractiondenomdown:D
- \@@_primitive:NN \Umathfractiondenomvgap
- \tex_Umathfractiondenomvgap:D
- \@@_primitive:NN \Umathfractionnumup \tex_Umathfractionnumup:D
- \@@_primitive:NN \Umathfractionnumvgap \tex_Umathfractionnumvgap:D
- \@@_primitive:NN \Umathfractionrule \tex_Umathfractionrule:D
- \@@_primitive:NN \Umathinnerbinspacing \tex_Umathinnerbinspacing:D
- \@@_primitive:NN \Umathinnerclosespacing
- \tex_Umathinnerclosespacing:D
- \@@_primitive:NN \Umathinnerinnerspacing
- \tex_Umathinnerinnerspacing:D
- \@@_primitive:NN \Umathinneropenspacing \tex_Umathinneropenspacing:D
- \@@_primitive:NN \Umathinneropspacing \tex_Umathinneropspacing:D
- \@@_primitive:NN \Umathinnerordspacing \tex_Umathinnerordspacing:D
- \@@_primitive:NN \Umathinnerpunctspacing
- \tex_Umathinnerpunctspacing:D
- \@@_primitive:NN \Umathinnerrelspacing \tex_Umathinnerrelspacing:D
- \@@_primitive:NN \Umathlimitabovebgap \tex_Umathlimitabovebgap:D
- \@@_primitive:NN \Umathlimitabovekern \tex_Umathlimitabovekern:D
- \@@_primitive:NN \Umathlimitabovevgap \tex_Umathlimitabovevgap:D
- \@@_primitive:NN \Umathlimitbelowbgap \tex_Umathlimitbelowbgap:D
- \@@_primitive:NN \Umathlimitbelowkern \tex_Umathlimitbelowkern:D
- \@@_primitive:NN \Umathlimitbelowvgap \tex_Umathlimitbelowvgap:D
- \@@_primitive:NN \Umathnolimitsubfactor \tex_Umathnolimitsubfactor:D
- \@@_primitive:NN \Umathnolimitsupfactor \tex_Umathnolimitsupfactor:D
- \@@_primitive:NN \Umathopbinspacing \tex_Umathopbinspacing:D
- \@@_primitive:NN \Umathopclosespacing \tex_Umathopclosespacing:D
- \@@_primitive:NN \Umathopenbinspacing \tex_Umathopenbinspacing:D
- \@@_primitive:NN \Umathopenclosespacing \tex_Umathopenclosespacing:D
- \@@_primitive:NN \Umathopeninnerspacing \tex_Umathopeninnerspacing:D
- \@@_primitive:NN \Umathopenopenspacing \tex_Umathopenopenspacing:D
- \@@_primitive:NN \Umathopenopspacing \tex_Umathopenopspacing:D
- \@@_primitive:NN \Umathopenordspacing \tex_Umathopenordspacing:D
- \@@_primitive:NN \Umathopenpunctspacing \tex_Umathopenpunctspacing:D
- \@@_primitive:NN \Umathopenrelspacing \tex_Umathopenrelspacing:D
- \@@_primitive:NN \Umathoperatorsize \tex_Umathoperatorsize:D
- \@@_primitive:NN \Umathopinnerspacing \tex_Umathopinnerspacing:D
- \@@_primitive:NN \Umathopopenspacing \tex_Umathopopenspacing:D
- \@@_primitive:NN \Umathopopspacing \tex_Umathopopspacing:D
- \@@_primitive:NN \Umathopordspacing \tex_Umathopordspacing:D
- \@@_primitive:NN \Umathoppunctspacing \tex_Umathoppunctspacing:D
- \@@_primitive:NN \Umathoprelspacing \tex_Umathoprelspacing:D
- \@@_primitive:NN \Umathordbinspacing \tex_Umathordbinspacing:D
- \@@_primitive:NN \Umathordclosespacing \tex_Umathordclosespacing:D
- \@@_primitive:NN \Umathordinnerspacing \tex_Umathordinnerspacing:D
- \@@_primitive:NN \Umathordopenspacing \tex_Umathordopenspacing:D
- \@@_primitive:NN \Umathordopspacing \tex_Umathordopspacing:D
- \@@_primitive:NN \Umathordordspacing \tex_Umathordordspacing:D
- \@@_primitive:NN \Umathordpunctspacing \tex_Umathordpunctspacing:D
- \@@_primitive:NN \Umathordrelspacing \tex_Umathordrelspacing:D
- \@@_primitive:NN \Umathoverbarkern \tex_Umathoverbarkern:D
- \@@_primitive:NN \Umathoverbarrule \tex_Umathoverbarrule:D
- \@@_primitive:NN \Umathoverbarvgap \tex_Umathoverbarvgap:D
- \@@_primitive:NN \Umathoverdelimiterbgap
- \tex_Umathoverdelimiterbgap:D
- \@@_primitive:NN \Umathoverdelimitervgap
- \tex_Umathoverdelimitervgap:D
- \@@_primitive:NN \Umathpunctbinspacing \tex_Umathpunctbinspacing:D
- \@@_primitive:NN \Umathpunctclosespacing
- \tex_Umathpunctclosespacing:D
- \@@_primitive:NN \Umathpunctinnerspacing
- \tex_Umathpunctinnerspacing:D
- \@@_primitive:NN \Umathpunctopenspacing \tex_Umathpunctopenspacing:D
- \@@_primitive:NN \Umathpunctopspacing \tex_Umathpunctopspacing:D
- \@@_primitive:NN \Umathpunctordspacing \tex_Umathpunctordspacing:D
- \@@_primitive:NN \Umathpunctpunctspacing
- \tex_Umathpunctpunctspacing:D
- \@@_primitive:NN \Umathpunctrelspacing \tex_Umathpunctrelspacing:D
- \@@_primitive:NN \Umathquad \tex_Umathquad:D
- \@@_primitive:NN \Umathradicaldegreeafter
- \tex_Umathradicaldegreeafter:D
- \@@_primitive:NN \Umathradicaldegreebefore
- \tex_Umathradicaldegreebefore:D
- \@@_primitive:NN \Umathradicaldegreeraise
- \tex_Umathradicaldegreeraise:D
- \@@_primitive:NN \Umathradicalkern \tex_Umathradicalkern:D
- \@@_primitive:NN \Umathradicalrule \tex_Umathradicalrule:D
- \@@_primitive:NN \Umathradicalvgap \tex_Umathradicalvgap:D
- \@@_primitive:NN \Umathrelbinspacing \tex_Umathrelbinspacing:D
- \@@_primitive:NN \Umathrelclosespacing \tex_Umathrelclosespacing:D
- \@@_primitive:NN \Umathrelinnerspacing \tex_Umathrelinnerspacing:D
- \@@_primitive:NN \Umathrelopenspacing \tex_Umathrelopenspacing:D
- \@@_primitive:NN \Umathrelopspacing \tex_Umathrelopspacing:D
- \@@_primitive:NN \Umathrelordspacing \tex_Umathrelordspacing:D
- \@@_primitive:NN \Umathrelpunctspacing \tex_Umathrelpunctspacing:D
- \@@_primitive:NN \Umathrelrelspacing \tex_Umathrelrelspacing:D
- \@@_primitive:NN \Umathskewedfractionhgap
- \tex_Umathskewedfractionhgap:D
- \@@_primitive:NN \Umathskewedfractionvgap
- \tex_Umathskewedfractionvgap:D
- \@@_primitive:NN \Umathspaceafterscript \tex_Umathspaceafterscript:D
- \@@_primitive:NN \Umathstackdenomdown \tex_Umathstackdenomdown:D
- \@@_primitive:NN \Umathstacknumup \tex_Umathstacknumup:D
- \@@_primitive:NN \Umathstackvgap \tex_Umathstackvgap:D
- \@@_primitive:NN \Umathsubshiftdown \tex_Umathsubshiftdown:D
- \@@_primitive:NN \Umathsubshiftdrop \tex_Umathsubshiftdrop:D
- \@@_primitive:NN \Umathsubsupshiftdown \tex_Umathsubsupshiftdown:D
- \@@_primitive:NN \Umathsubsupvgap \tex_Umathsubsupvgap:D
- \@@_primitive:NN \Umathsubtopmax \tex_Umathsubtopmax:D
- \@@_primitive:NN \Umathsupbottommin \tex_Umathsupbottommin:D
- \@@_primitive:NN \Umathsupshiftdrop \tex_Umathsupshiftdrop:D
- \@@_primitive:NN \Umathsupshiftup \tex_Umathsupshiftup:D
- \@@_primitive:NN \Umathsupsubbottommax \tex_Umathsupsubbottommax:D
- \@@_primitive:NN \Umathunderbarkern \tex_Umathunderbarkern:D
- \@@_primitive:NN \Umathunderbarrule \tex_Umathunderbarrule:D
- \@@_primitive:NN \Umathunderbarvgap \tex_Umathunderbarvgap:D
- \@@_primitive:NN \Umathunderdelimiterbgap
- \tex_Umathunderdelimiterbgap:D
- \@@_primitive:NN \Umathunderdelimitervgap
- \tex_Umathunderdelimitervgap:D
- \@@_primitive:NN \Umiddle \tex_Umiddle:D
- \@@_primitive:NN \Unosubscript \tex_Unosubscript:D
- \@@_primitive:NN \Unosuperscript \tex_Unosuperscript:D
- \@@_primitive:NN \Uoverdelimiter \tex_Uoverdelimiter:D
- \@@_primitive:NN \Uradical \tex_Uradical:D
- \@@_primitive:NN \Uright \tex_Uright:D
- \@@_primitive:NN \Uroot \tex_Uroot:D
- \@@_primitive:NN \Uskewed \tex_Uskewed:D
- \@@_primitive:NN \Uskewedwithdelims \tex_Uskewedwithdelims:D
- \@@_primitive:NN \Ustack \tex_Ustack:D
- \@@_primitive:NN \Ustartdisplaymath \tex_Ustartdisplaymath:D
- \@@_primitive:NN \Ustartmath \tex_Ustartmath:D
- \@@_primitive:NN \Ustopdisplaymath \tex_Ustopdisplaymath:D
- \@@_primitive:NN \Ustopmath \tex_Ustopmath:D
- \@@_primitive:NN \Usubscript \tex_Usubscript:D
- \@@_primitive:NN \Usuperscript \tex_Usuperscript:D
- \@@_primitive:NN \Uunderdelimiter \tex_Uunderdelimiter:D
- \@@_primitive:NN \Uvextensible \tex_Uvextensible:D
-% \end{macrocode}
-% Primitives from \pTeX{}.
-% \begin{macrocode}
- \@@_primitive:NN \autospacing \tex_autospacing:D
- \@@_primitive:NN \autoxspacing \tex_autoxspacing:D
- \@@_primitive:NN \currentcjktoken \tex_currentcjktoken:D
- \@@_primitive:NN \currentspacingmode \tex_currentspacingmode:D
- \@@_primitive:NN \currentxspacingmode \tex_currentxspacingmode:D
- \@@_primitive:NN \disinhibitglue \tex_disinhibitglue:D
- \@@_primitive:NN \dtou \tex_dtou:D
- \@@_primitive:NN \epTeXinputencoding \tex_epTeXinputencoding:D
- \@@_primitive:NN \epTeXversion \tex_epTeXversion:D
- \@@_primitive:NN \euc \tex_euc:D
- \@@_primitive:NN \hfi \tex_hfi:D
- \@@_primitive:NN \ifdbox \tex_ifdbox:D
- \@@_primitive:NN \ifddir \tex_ifddir:D
- \@@_primitive:NN \ifjfont \tex_ifjfont:D
- \@@_primitive:NN \ifmbox \tex_ifmbox:D
- \@@_primitive:NN \ifmdir \tex_ifmdir:D
- \@@_primitive:NN \iftbox \tex_iftbox:D
- \@@_primitive:NN \iftfont \tex_iftfont:D
- \@@_primitive:NN \iftdir \tex_iftdir:D
- \@@_primitive:NN \ifybox \tex_ifybox:D
- \@@_primitive:NN \ifydir \tex_ifydir:D
- \@@_primitive:NN \inhibitglue \tex_inhibitglue:D
- \@@_primitive:NN \inhibitxspcode \tex_inhibitxspcode:D
- \@@_primitive:NN \jcharwidowpenalty \tex_jcharwidowpenalty:D
- \@@_primitive:NN \jfam \tex_jfam:D
- \@@_primitive:NN \jfont \tex_jfont:D
- \@@_primitive:NN \jis \tex_jis:D
- \@@_primitive:NN \kanjiskip \tex_kanjiskip:D
- \@@_primitive:NN \kansuji \tex_kansuji:D
- \@@_primitive:NN \kansujichar \tex_kansujichar:D
- \@@_primitive:NN \kcatcode \tex_kcatcode:D
- \@@_primitive:NN \kuten \tex_kuten:D
- \@@_primitive:NN \lastnodechar \tex_lastnodechar:D
- \@@_primitive:NN \lastnodefont \tex_lastnodefont:D
- \@@_primitive:NN \lastnodesubtype \tex_lastnodesubtype:D
- \@@_primitive:NN \noautospacing \tex_noautospacing:D
- \@@_primitive:NN \noautoxspacing \tex_noautoxspacing:D
- \@@_primitive:NN \pagefistretch \tex_pagefistretch:D
- \@@_primitive:NN \postbreakpenalty \tex_postbreakpenalty:D
- \@@_primitive:NN \prebreakpenalty \tex_prebreakpenalty:D
- \@@_primitive:NN \ptexfontname \tex_ptexfontname:D
- \@@_primitive:NN \ptexlineendmode \tex_lineendmode:D
- \@@_primitive:NN \ptexminorversion \tex_ptexminorversion:D
- \@@_primitive:NN \ptexrevision \tex_ptexrevision:D
- \@@_primitive:NN \ptextracingfonts \tex_ptextracingfonts:D
- \@@_primitive:NN \ptexversion \tex_ptexversion:D
- \@@_primitive:NN \readpapersizespecial \tex_readpapersizespecial:D
- \@@_primitive:NN \scriptbaselineshiftfactor
- \tex_scriptbaselineshiftfactor:D
- \@@_primitive:NN \scriptscriptbaselineshiftfactor
- \tex_scriptscriptbaselineshiftfactor:D
- \@@_primitive:NN \showmode \tex_showmode:D
- \@@_primitive:NN \sjis \tex_sjis:D
- \@@_primitive:NN \tate \tex_tate:D
- \@@_primitive:NN \tbaselineshift \tex_tbaselineshift:D
- \@@_primitive:NN \textbaselineshiftfactor
- \tex_textbaselineshiftfactor:D
- \@@_primitive:NN \tfont \tex_tfont:D
- \@@_primitive:NN \tojis \tex_tojis:D
- \@@_primitive:NN \toucs \tex_toucs:D
- \@@_primitive:NN \ucs \tex_ucs:D
- \@@_primitive:NN \xkanjiskip \tex_xkanjiskip:D
- \@@_primitive:NN \xspcode \tex_xspcode:D
- \@@_primitive:NN \ybaselineshift \tex_ybaselineshift:D
- \@@_primitive:NN \yoko \tex_yoko:D
- \@@_primitive:NN \vfi \tex_vfi:D
-% \end{macrocode}
-% Primitives from \upTeX{}.
-% \begin{macrocode}
- \@@_primitive:NN \currentcjktoken \tex_currentcjktoken:D
- \@@_primitive:NN \disablecjktoken \tex_disablecjktoken:D
- \@@_primitive:NN \enablecjktoken \tex_enablecjktoken:D
- \@@_primitive:NN \forcecjktoken \tex_forcecjktoken:D
- \@@_primitive:NN \kchar \tex_kchar:D
- \@@_primitive:NN \kchardef \tex_kchardef:D
- \@@_primitive:NN \kuten \tex_kuten:D
- \@@_primitive:NN \uptexrevision \tex_uptexrevision:D
- \@@_primitive:NN \uptexversion \tex_uptexversion:D
-% \end{macrocode}
-% Omega primitives provided by \pTeX{} (listed separately mainly to allow
-% understanding of their source).
-% \begin{macrocode}
- \@@_primitive:NN \odelcode \tex_odelcode:D
- \@@_primitive:NN \odelimiter \tex_odelimiter:D
- \@@_primitive:NN \omathaccent \tex_omathaccent:D
- \@@_primitive:NN \omathchar \tex_omathchar:D
- \@@_primitive:NN \omathchardef \tex_omathchardef:D
- \@@_primitive:NN \omathcode \tex_omathcode:D
- \@@_primitive:NN \oradical \tex_oradical:D
-% \end{macrocode}
-% Newer cross-engine primitives.
-% \begin{macrocode}
- \@@_primitive:NN \partokencontext \tex_partokencontext:D
- \@@_primitive:NN \partokenname \tex_partokenname:D
- \@@_primitive:NN \showstream \tex_showstream:D
- \@@_primitive:NN \tracingstacklevels \tex_tracingstacklevels:D
-% \end{macrocode}
-% End of the \enquote{just the names} part of the source.
-% \begin{macrocode}
-%</names|package>
-%</names|tex>
-%<*package>
-%<*tex>
-% \end{macrocode}
-%
-% The job is done: close the group (using the primitive renamed!).
-% \begin{macrocode}
-\tex_endgroup:D
-% \end{macrocode}
-%
-% \LaTeXe{} moves a few primitives, so these are sorted out.
-% In newer versions of \LaTeXe{}, \pkg{expl3} is loaded rather early, so
-% only some primitives are already renamed, so we need two tests here.
-% At the beginning of the \LaTeXe{} format, the primitives \tn{end} and
-% \tn{input} are renamed, and only later on the other ones.
-% \begin{macrocode}
-\tex_ifdefined:D \@@@@end
- \tex_let:D \tex_end:D \@@@@end
- \tex_let:D \tex_input:D \@@@@input
-\tex_fi:D
-% \end{macrocode}
-%
-% If \tn{@@@@hyph} is defined, we are loading \pkg{expl3} in a
-% pre-2020/10/01 release of \LaTeXe{}, so a few other primitives have to
-% be tested as well.
-% \begin{macrocode}
-\tex_ifdefined:D \@@@@hyph
- \tex_let:D \tex_everydisplay:D \frozen@everydisplay
- \tex_let:D \tex_everymath:D \frozen@everymath
- \tex_let:D \tex_hyphen:D \@@@@hyph
- \tex_let:D \tex_italiccorrection:D \@@@@italiccorr
- \tex_let:D \tex_underline:D \@@@@underline
-% \end{macrocode}
-% The \tn{shipout} primitive is particularly tricky as a number of packages
-% want to hook in here. First, we see if a sufficiently-new kernel has saved
-% a copy: if it has, just use that. Otherwise, we need to check each of the
-% possible packages/classes that might move it: here, we are looking for those
-% which do \emph{not} delay action to the \tn{AtBeginDocument} hook. (We
-% cannot use \tn{primitive} as that doesn't
-% allow us to make a direct copy of the primitive \emph{itself}.) As we know
-% that \LaTeXe{} is in use, we use it's \tn{@tfor} loop here.
-% \begin{macrocode}
- \tex_ifdefined:D \@@@@shipout
- \tex_let:D \tex_shipout:D \@@@@shipout
- \tex_fi:D
- \tex_begingroup:D
- \tex_edef:D \l_tmpa_tl { \tex_string:D \shipout }
- \tex_edef:D \l_tmpb_tl { \tex_meaning:D \shipout }
- \tex_ifx:D \l_tmpa_tl \l_tmpb_tl
- \tex_else:D
- \tex_expandafter:D \@tfor \tex_expandafter:D \@tempa \tex_string:D :=
- \CROP@shipout
- \dup@shipout
- \GPTorg@shipout
- \LL@shipout
- \mem@oldshipout
- \opem@shipout
- \pgfpages@originalshipout
- \pr@shipout
- \Shipout
- \verso@orig@shipout
- \do
- {
- \tex_edef:D \l_tmpb_tl
- { \tex_expandafter:D \tex_meaning:D \@tempa }
- \tex_ifx:D \l_tmpa_tl \l_tmpb_tl
- \tex_global:D \tex_expandafter:D \tex_let:D
- \tex_expandafter:D \tex_shipout:D \@tempa
- \tex_fi:D
- }
- \tex_fi:D
- \tex_endgroup:D
-% \end{macrocode}
-% Some tidying up is needed for \tn[index=tracingfonts]{(pdf)tracingfonts}.
-% Newer \LuaTeX{} has
-% this simply as \tn{tracingfonts}, but that is overwritten by
-% the \LaTeXe{} kernel. So any spurious definition has to be removed, then
-% the real version saved either from the \pdfTeX{} name or from \LuaTeX{}.
-% In the latter case, we leave \tn{@@tracingfonts} available: this might
-% be useful and almost all \LaTeXe{} users will have \pkg{expl3} loaded by
-% \pkg{fontspec}. (We follow the usual kernel convention that |@@| is used
-% for saved primitives.)
-% \begin{macrocode}
- \tex_let:D \tex_tracingfonts:D \tex_undefined:D
- \tex_ifdefined:D \pdftracingfonts
- \tex_let:D \tex_tracingfonts:D \pdftracingfonts
- \tex_else:D
- \tex_ifdefined:D \tex_directlua:D
- \tex_directlua:D { tex.enableprimitives("@@@@", {"tracingfonts"}) }
- \tex_let:D \tex_tracingfonts:D \@@@@tracingfonts
- \tex_fi:D
- \tex_fi:D
-\tex_fi:D
-% \end{macrocode}
-% Only \pdfTeX{} and \LuaTeX{} define \tn{pdfmapfile} and \tn{pdfmapline}:
-% Tidy up the fact that some format-building processes leave
-% a couple of questionable decisions about that!
-% \begin{macrocode}
-\tex_ifnum:D 0
- \tex_ifdefined:D \tex_pdftexversion:D 1 \tex_fi:D
- \tex_ifdefined:D \tex_luatexversion:D 1 \tex_fi:D
- = 0 %
- \tex_let:D \tex_pdfmapfile:D \tex_undefined:D
- \tex_let:D \tex_pdfmapline:D \tex_undefined:D
-\tex_fi:D
-% \end{macrocode}
-% A few packages do unfortunate things to date-related primitives.
-% \begin{macrocode}
-\tex_begingroup:D
- \tex_edef:D \l_tmpa_tl { \tex_meaning:D \tex_time:D }
- \tex_edef:D \l_tmpb_tl { \tex_string:D \time }
- \tex_ifx:D \l_tmpa_tl \l_tmpb_tl
- \tex_else:D
- \tex_global:D \tex_let:D \tex_time:D \tex_undefined:D
- \tex_fi:D
- \tex_edef:D \l_tmpa_tl { \tex_meaning:D \tex_day:D }
- \tex_edef:D \l_tmpb_tl { \tex_string:D \day }
- \tex_ifx:D \l_tmpa_tl \l_tmpb_tl
- \tex_else:D
- \tex_global:D \tex_let:D \tex_day:D \tex_undefined:D
- \tex_fi:D
- \tex_edef:D \l_tmpa_tl { \tex_meaning:D \tex_month:D }
- \tex_edef:D \l_tmpb_tl { \tex_string:D \month }
- \tex_ifx:D \l_tmpa_tl \l_tmpb_tl
- \tex_else:D
- \tex_global:D \tex_let:D \tex_month:D \tex_undefined:D
- \tex_fi:D
- \tex_edef:D \l_tmpa_tl { \tex_meaning:D \tex_year:D }
- \tex_edef:D \l_tmpb_tl { \tex_string:D \year }
- \tex_ifx:D \l_tmpa_tl \l_tmpb_tl
- \tex_else:D
- \tex_global:D \tex_let:D \tex_year:D \tex_undefined:D
- \tex_fi:D
-\tex_endgroup:D
-% \end{macrocode}
-% \pkg{cslatex} moves a couple of primitives which we recover here; as there
-% is no other marker, we can only work by looking for the names.
-% \begin{macrocode}
-\tex_ifdefined:D \orieveryjob
- \tex_let:D \tex_everyjob:D \orieveryjob
-\tex_fi:D
-\tex_ifdefined:D \oripdfoutput
- \tex_let:D \tex_pdfoutput:D \oripdfoutput
-\tex_fi:D
-% \end{macrocode}
-%
-% For \ConTeXt{}, two tests are needed. Both Mark~II and Mark~IV move several
-% primitives: these are all covered by the first test, again using \cs{end}
-% as a marker. For Mark~IV, a few more primitives are moved: they are
-% implemented using some Lua code in the current \ConTeXt{}.
-% \begin{macrocode}
-\tex_ifdefined:D \normalend
- \tex_let:D \tex_end:D \normalend
- \tex_let:D \tex_everyjob:D \normaleveryjob
- \tex_let:D \tex_input:D \normalinput
- \tex_let:D \tex_language:D \normallanguage
- \tex_let:D \tex_mathop:D \normalmathop
- \tex_let:D \tex_month:D \normalmonth
- \tex_let:D \tex_outer:D \normalouter
- \tex_let:D \tex_over:D \normalover
- \tex_let:D \tex_vcenter:D \normalvcenter
- \tex_let:D \tex_unexpanded:D \normalunexpanded
- \tex_let:D \tex_expanded:D \normalexpanded
-\tex_fi:D
-\tex_ifdefined:D \normalitaliccorrection
- \tex_let:D \tex_hoffset:D \normalhoffset
- \tex_let:D \tex_italiccorrection:D \normalitaliccorrection
- \tex_let:D \tex_voffset:D \normalvoffset
- \tex_let:D \tex_showtokens:D \normalshowtokens
- \tex_let:D \tex_bodydir:D \spac_directions_normal_body_dir
- \tex_let:D \tex_pagedir:D \spac_directions_normal_page_dir
-\tex_fi:D
-\tex_ifdefined:D \normalleft
- \tex_let:D \tex_left:D \normalleft
- \tex_let:D \tex_middle:D \normalmiddle
- \tex_let:D \tex_right:D \normalright
-\tex_fi:D
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</tex>
-% \end{macrocode}
-%
-% In \LuaTeX{}, we additionally emulate some primitives using Lua code.
-% \begin{macrocode}
-%<*lua>
-% \end{macrocode}
-%
-% \begin{macro}[no-user-doc]{\tex_strcmp:D}
-% Compare two strings, expanding to |0| if they are equal,
-% |-1| if the first one is smaller and |1| if the second one is smaller.
-% Here \enquote{smaller} refers to codepoint order which does not correspond to
-% the user expected order for most non-ASCII strings.
-% \begin{macrocode}
-local minus_tok = token_new(string.byte'-', 12)
-local zero_tok = token_new(string.byte'0', 12)
-local one_tok = token_new(string.byte'1', 12)
-luacmd('tex_strcmp:D', function()
- local first = scan_string()
- local second = scan_string()
- if first < second then
- put_next(minus_tok, one_tok)
- else
- put_next(first == second and zero_tok or one_tok)
- end
-end, 'global')
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[no-user-doc]{\tex_Ucharcat:D}
-% Creating arbitrary chars using |tex.cprint|.
-% The alternative approach using |token.new(...)| is about 10\% slower
-% but needed to create arbitrary space tokens.
-% \begin{macrocode}
-local sprint = tex.sprint
-local cprint = tex.cprint
-luacmd('tex_Ucharcat:D', function()
- local charcode = scan_int()
- local catcode = scan_int()
- if catcode == 10 then
- sprint(token_new(charcode, 10))
- else
- cprint(catcode, utf8_char(charcode))
- end
-end, 'global')
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[no-user-doc]{\tex_filesize:D}
-% Wrap the function from |ltxutils|.
-% \begin{macrocode}
-luacmd('tex_filesize:D', function()
- local size = filesize(scan_string())
- if size then write(size) end
-end, 'global')
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[no-user-doc]{\tex_mdfivesum:D}
-% There are two cases: Either hash a file or a string.
-% Both are already implemented in l3luatex or built-in.
-% \begin{macrocode}
-luacmd('tex_mdfivesum:D', function()
- local hash
- if scan_keyword"file" then
- hash = filemd5sum(scan_string())
- else
- hash = md5_HEX(scan_string())
- end
- if hash then write(hash) end
-end, 'global')
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[no-user-doc]{\tex_filemoddate:D}
-% A primitive for getting the modification date of a file.
-% \begin{macrocode}
-luacmd('tex_filemoddate:D', function()
- local date = filemoddate(scan_string())
- if date then write(date) end
-end, 'global')
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[no-user-doc]{\tex_filedump:D}
-% An emulated primitive for getting a hexdump from a (partial) file.
-% The length has a default of |0|. This is consistent with
-% \pdfTeX, but it effectivly makes the primitive useless without an
-% explicit |length|. Therefore we allow the keyword |whole| to be used
-% instead of a length, indicating that the whole remaining file should
-% be read.
-% \begin{macrocode}
-luacmd('tex_filedump:D', function()
- local offset = scan_keyword'offset' and scan_int() or nil
- local length = scan_keyword'length' and scan_int()
- or not scan_keyword'whole' and 0 or nil
- local data = filedump(scan_string(), offset, length)
- if data then write(data) end
-end, 'global')
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</lua>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3news.pdf b/macros/latex/contrib/l3kernel/l3news.pdf
deleted file mode 100644
index 87f01af5a7..0000000000
--- a/macros/latex/contrib/l3kernel/l3news.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news.tex b/macros/latex/contrib/l3kernel/l3news.tex
deleted file mode 100644
index b8f0de5c72..0000000000
--- a/macros/latex/contrib/l3kernel/l3news.tex
+++ /dev/null
@@ -1,187 +0,0 @@
-% Copyright 2019-2021 The LaTeX Project
-
-\providecommand*{\lastissue}{12}
-
-\documentclass{ltnews}
-
-\AtBeginDocument{%
- \renewcommand{\LaTeXNews}{\LaTeX3~News}%
- \RaggedRight
- \setlength\parindent{1em}%
-}
-\usepackage{catchfile}
-\usepackage{csquotes}
-\usepackage{enumitem}
-\usepackage{fancyvrb}
-\usepackage{hologo}
-\usepackage{metalogo}
-\usepackage{multicol}
-\usepackage{ragged2e}
-\usepackage{siunitx}
-\usepackage{tikz}
-\usepackage{underscore}
-\usepackage{xparse}
-\usepackage{hyperref}
-\hypersetup{colorlinks}
-\usepackage{bookmark}
-
-\MakeOuterQuote{"}
-
-\pdfstringdefDisableCommands
- {%
- \RenewExpandableDocumentCommand \cs { O{} m }
- {\textbackslash#2}%
- }
-
-\makeatletter
-\newcounter{issue}
-\renewcommand*{\theissue}{%
- \ifnum\value{issue}<10 0\fi
- \number\value{issue}%
-}
-\newcommand*{\MonthJanuary}{01}
-\newcommand*{\MonthFebruary}{02}
-\newcommand*{\MonthMarch}{03}
-\newcommand*{\MonthApril}{04}
-\newcommand*{\MonthMay}{05}
-\newcommand*{\MonthJune}{06}
-\newcommand*{\MonthJuly}{07}
-\newcommand*{\MonthAugust}{08}
-\newcommand*{\MonthSeptember}{09}
-\newcommand*{\MonthOctober}{10}
-\newcommand*{\MonthNovember}{11}
-\newcommand*{\MonthDecember}{12}
-\newcommand*{\printissue}{%
- Issue %
- \texorpdfstring{\number\value{issue}}{\theissue}, %
- \texorpdfstring{\@month\space\@year}{\@year/\@nameuse{Month\@month}}%
-}
-\let\l@part\l@section
-\let\l@section\l@subsection
-\let\l@subsection\l@subsubsection
-\let\l@subsubsection\l@paragraph
-\let\l@paragraph\l@subparagraph
-\newcommand*{\makefirsttitle}{%
- \twocolumn[{%
- \parbox[t][4\baselineskip]{\textwidth}{%
- \@titlefont\@title, Issues 1--\lastissue
- }%
- }]%
-}
-
-% show the page number on first page of issues:
-
-\renewcommand{\ps@titlepage}{%
- \renewcommand{\@oddhead}{\hfill}%
- \renewcommand{\@evenhead}{\hfill}%
- \renewcommand{\@oddfoot}{\@indiciafont\@indicia\hfill --\thepage}%
- \renewcommand{\@evenfoot}{\@indiciafont\@indicia\hfill --\thepage}%
-}
-
-% only needed if the old ltnews class is used
-\renewcommand{\@oddfoot}{\@indiciafont\mbox{}\hfill --\thepage}%
-\renewcommand{\@evenfoot}{\@indiciafont\mbox{}\hfill --\thepage}%
-
-
-\makeatother
-
-\begin{document}
-
-%%% Title and Table of Contents
-
-\makefirsttitle
-\pdfbookmark[0]{\contentsname}{toc}
-\tableofcontents
-\clearpage
-
-\begingroup
- \renewcommand*{\AtBeginDocument}[1]{#1}%
- \renewcommand*{\PassOptionsToPackage}[2]{}%
- \renewcommand*{\usepackage}[2][]{}%
- \renewcommand*{\RequirePackage}[2][]{}%
- \renewcommand*{\documentclass}[2][]{%
- \setcounter{footnote}{0}%
- \gobbleopt
- }%
- \newcommand*{\gobbleopt}[1][]{}%
- \makeatletter
- \let\org@twocolumn\twocolumn
- \renewenvironment{document}{%
- \clearpage
- \ifnum\@issue=20 %
- \addtocontents{toc}{\protect\setcounter{tocdepth}{5}}%
- \addtocontents{toc}{%
- \protect\makeatletter
- }%
- \addtocontents{toc}{%
- \let\protect\saved@l@paragraph\protect\l@paragraph
- }%
- \addtocontents{toc}{%
- \let\protect\l@paragraph\protect\l@subsection
- }%
- \fi
- \ifnum\@issue>9\space % we may have issue tocs ...
- \addtocontents{toc}{%
- \let\protect\l@paragraph\protect\saved@l@paragraph
- }%
- \def\toclevel@subsection{1}%
- \def\toclevel@subsubsection{2}%
- \addtocontents{toc}{\protect\setcounter{tocdepth}{4}}%
- \renewcommand*{\tableofcontents}{%
- \section*{\contentsname}%
- \@starttoc{toc\theissue}%
- }%
- \let\saved@addtocontents\addtocontents
- \renewcommand*{\addtocontents}[2]{%
- \saved@addtocontents{##1}{##2}%
- \def\temp@toc{toc}%
- \def\temp@param{##1}%
- \ifx\temp@toc\temp@param
- \saved@addtocontents{toc\theissue}{##2}%
- \fi
- }%
- \let\l@subsubsection\l@subsection
- \let\l@subsection\l@section
- \let\l@section\l@part
- \let\l@part\@gobbletwo
- \fi
- \def\twocolumn[{%
- \let\twocolumn\org@twocolumn
- \org@twocolumn[%
- {% because of optional argument of \twocolumn
- \pdfbookmark[0]{\printissue}{issue\theissue}%
- }%
- \begingroup
- \let\WriteBookmarks\relax
- \@firstofone{% inside opt. arg. of \twocolumn: protect "]"
- \renewcommand*{\Hy@writebookmark}[5]{}%
- }%
- \phantomsection
- \addcontentsline{toc}{part}{\printissue}%
- \endgroup
- }%
- }{%
- \clearpage
- }%
- \def\MakeOuterQuote#1{%
- \if\noexpand"\noexpand#1%
- \else
- \@latex@error{Unexpected \string\MakeOuterQuote
- {\detokenize{#1}}\MessageBreak%
- Check if output is valid in `l3news\theissue.tex'}%
- \fi}
- \makeatother
- \loop
- \ifnum\value{issue}<\lastissue
- \stepcounter{issue}%
- \input{l3news\theissue}%
- \repeat
- \stepcounter{issue}%
- \IfFileExists{l3news\theissue}{%
- \@latex@error{\jobname.tex is out of date,\MessageBreak
- there is `l3news\theissue.tex'%
- }\@ehc
- }{}%
-\endgroup
-
-\end{document}
diff --git a/macros/latex/contrib/l3kernel/l3news01.pdf b/macros/latex/contrib/l3kernel/l3news01.pdf
deleted file mode 100644
index 5a6d4af9e2..0000000000
--- a/macros/latex/contrib/l3kernel/l3news01.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news01.tex b/macros/latex/contrib/l3kernel/l3news01.tex
deleted file mode 100644
index b4841ac24b..0000000000
--- a/macros/latex/contrib/l3kernel/l3news01.tex
+++ /dev/null
@@ -1,102 +0,0 @@
-% Copyright 2009 The LaTeX Project
-\documentclass{ltnews}
-\PassOptionsToPackage{colorlinks}{hyperref}
-
-\usepackage{metalogo,ragged2e}
-
-\AtBeginDocument{
- \renewcommand{\LaTeXNews}{\LaTeX3~News}
- \RaggedRight
-}
-
-\publicationmonth{February}
-\publicationyear{2009}
-\publicationissue{1}
-
-\begin{document}
-\maketitle
-
-\section{Welcome to \LaTeX3}
-
-Momentum is again starting to build behind The \LaTeX{} Project. For the
-last few releases of \TeX~Live, the experimental programming foundation for
-\LaTeX3 has been available under the name \package{expl3}. Despite large
-warnings that the code would probably change in the future, we wanted to show
-that there was progress being made, no matter how slowly. Since then, some
-people have looked at the code, provided feedback, and~--- most
-importantly~--- actually tried using it. Although it is yet early days, we
-believe that the ideas behind the code are sound and there are only `cosmetic
-improvements' that need to be made before \package{expl3} is ready for the
-\LaTeX~package author masses.
-
-\section{What currently exists}
-
-The current \LaTeX3 code consists of two main branches: the
-\package{expl3} modules that define the underlying programming environment,
-and the `\package{xpackage}s', which are a suite of packages that are written
-with the \package{expl3} programming interface and provide some higher-level
-functionality for what will one day become \LaTeX3 proper. Both \package{expl3} and
-parts of the \package{xpackages} are designed to be used \emph{on top} of
-\LaTeXe, so new packages can take advantage of the new features while still
-allowing to be used alongside many of the vast number of \LaTeXe\ packages on
-\textsc{ctan}.
-
-\section{What's happening now}
-
-In preparation for a minor overhaul of the \package{expl3} code, we are
-writing a comprehensive test suite for each module. These tests allow us to
-make implementation changes and then test if the code still works as before.
-They are also highlighting any minor shortcomings or omissions in the code.
-As the tests are being written, our assumptions about what should be called
-what and the underlying naming conventions for the functions and datatypes are
-being questioned, challenged, and noted for further rumination.
-
-At the time of writing, we are approximately half-way through writing the test
-suite. Once this task is complete, which we plan for the first
-half of 2009, we will be ready to make changes without worrying about breaking
-anything.
-
-\section{What's happening soon}
-
-So what do we want to change? The current \package{expl3} codebase has
-portions that date to the pre-\LaTeXe\ days, while other modules have been
-more recently conceived. It is quite apparent when reading through the sources
-that some unification and tidying up would improve the simplicity and
-consistency of the code. In many cases, such changes will mean nothing more
-than a tweak or a rename.
-
-Beyond these minor changes, we are also re-thinking the exact notation behind
-the way functions are defined. There are currently a handful of different
-types of arguments that functions may be passed (from an untouched single
-token to a complete expansion of a token list) and we're not entirely happy
-with how the original choices have evolved now that the system has grown
-somewhat. We have received good feedback from several people on ways that we
-could improve the argument syntax, and as part of the upcoming changes to the
-\package{expl3} packages we hope to address the problems that we currently
-perceive in the present syntax.
-
-\section{What's happening later}
-
-After the changes discussed above are finished, we will begin freezing the core
-interface of the \package{expl3} modules, and we hope that more package
-authors will be interested in using the new ideas to write their own code.
-While the core functions will then remain unchanged, more features and new
-modules will be added as \LaTeX3 starts to grow.
-
-Some new and/or experimental packages will be changing to use the
-\package{expl3} programming interface, including \package{breqn},
-\package{mathtools}, \package{empheq}, \package{fontspec}, and
-\package{unicode-math}. (Which is one reason for the lack of progress in
-these latter two in recent times.) There will also be a version of the
-\package{siunitx} package written in \package{expl3}, in parallel to the
-current \LaTeXe\ version. These developments will provide improvements to
-everyday \LaTeX\ users who haven't even heard of The \LaTeX{} Project.
-
-Looking towards the long term, \LaTeX3 as a document preparation system needs
-to be written almost from scratch. A high-level user syntax needs to be
-designed and scores of packages will be used as inspiration for the
-`out-of-the-box' default document templates. \LaTeXe\ has stood up to the test
-of time~--- some fifteen years and still going strong~--- and it is now time
-to write a successor that will survive another score.
-
-\end{document}
diff --git a/macros/latex/contrib/l3kernel/l3news02.pdf b/macros/latex/contrib/l3kernel/l3news02.pdf
deleted file mode 100644
index 8cda69f971..0000000000
--- a/macros/latex/contrib/l3kernel/l3news02.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news02.tex b/macros/latex/contrib/l3kernel/l3news02.tex
deleted file mode 100644
index a3d5467c8e..0000000000
--- a/macros/latex/contrib/l3kernel/l3news02.tex
+++ /dev/null
@@ -1,153 +0,0 @@
-% Copyright 2009 The LaTeX Project
-\documentclass{ltnews}
-\PassOptionsToPackage{colorlinks}{hyperref}
-
-\usepackage{metalogo,ragged2e}
-
-\AtBeginDocument{
- \renewcommand{\LaTeXNews}{\LaTeX3~News}
- \RaggedRight
-}
-
-\usepackage{url}
-\newcommand\TUG[1]{\textsc{tug}~#1}
-
-\publicationmonth{June}
-\publicationyear{2009}
-\publicationissue{2}
-
-\begin{document}
-\maketitle
-
-\section{\TeX~Live and the \textsf{expl3} code}
-
-\TeX~Live 2009 is almost upon us, and the \LaTeX3 team have been
-readying a new release of the experimental \LaTeX3 code for this.
-Very dramatic changes have occurred since the
-last public release of the code in \TeX~Live~2008; no backwards compatibility has been
-maintained (as warned in the beginning of the documentation) but we
-believe the changes made are all much for the better. Almost every
-single part of \textsf{expl3} has been scrutinized, resulting in a far
-more coherent code base.
-
-The \textsf{expl3} code is now considered to be much more stable than
-it was before; a comprehensive test suite has been written that helps
-to ensure that we don't make any mistakes as we change things in the
-future. In the process of writing the test
-suite, many minor bugs were fixed; we recommend such test suites for
-all similar developmental projects!
-Some small underlying changes are still expected in the
-\textsf{expl3} code, but major, disruptive, changes aren't planned.
-
-\section{Planned updates}
-
-Until now, the last update to \textsc{ctan} of the \textsf{expl3}
-bundle was for \TeX~Live~2008. Now that work on the code is happening
-on a semi-steady basis, we plan to keep updates rolling out to
-\textsc{ctan} more frequently. This will allow anyone who wishes to
-experiment with the new code to use the \TeX~Live or MiK\TeX\
-updaters to install a recent version without having to `check out' the
-\textsc{svn} repository and install the packages manually.
-
-\section{New members}
-
-We didn't say anything about it in the last status update, but Joseph
-Wright and Will Robertson are now members of the \LaTeX\ Team. They
-have been working fairly exclusively on the \textsf{expl3} code.
-
-It's worth repeating that \LaTeXe\ is essentially frozen in order to
-prevent any backwards compatibility problems. As desirable as it is
-to benefit from the new features offered by new engines \XeTeX\ and
-Lua\TeX, we cannot risk the stability of production servers running
-older versions of \LaTeXe\ which will inevitably end up processing
-documents written into the future.
-
-\LaTeX3 will not be inheriting the same restraints, so stay tuned.
-
-\newpage
-
-\section{Some specifics}
-
-Morten H\o gholm will be presenting the recent changes in much more detail at
-\TUG{2009}. Here are some quick specifics for those interested. New code written
-and broad changes made to the \textsf{expl3} modules:
-\begin{description}
-\item [More logical function names]
- Many function names that were hold-outs from the \TeX\ naming system
- have been changed to fit into the more logical scheme of \textsf{expl3}; e.g.,
- \verb|\def:Npn| and \verb|\let:NN| are now \verb|\cs_set:Npn| and
- \verb|\cs_set_eq:NN|.
-
-\item [Defining functions and conditionals]
- Much thought was put into new ways to define
- functions and conditionals with a minimum of code.
- See \verb|\cs_set:Nn| and \verb|\prg_set_conditional:Nnn|.
-
-\item [Smart comparisons]
- Comparisons can be made much more easily now, with familiar notation such as
- \verb|\intexpr_compare_p:n{ #1+3 != \l_tmpa_int }|.
-
-\item [Data from variables] A new function argument specifier \texttt{V} has
- been added for extracting information from variables of different types,
- without needing to know the underlying variable structure. Some other
- tidy-ups on the argument specifiers offered, partially as a result of the
- addition of this new one.
-
-\item [l3msg] New module to deal with communication between \LaTeX3 code
- and the user (info messages, warnings, and errors), including message
- filtering partially inspired by the \textsf{silence} package.
- \end{description}
-
-\section{The next six months}
-
-Having overhauled the \textsf{expl3} code, we now plan to perform an
-analogous process with the foundations of the
-\textsf{xpackages}. These are the higher-level packages that will
-provide the basic needs such as control of the page layout and rich
-document-level interaction with the user. As the groundwork for this
-layer of the document processing matures, we will be able to start
-building more packages for a \LaTeX3 kernel; these packages will also
-be usable on top of \LaTeXe\ and serve as broadly customisable
-templates for future document design.
-
-As gaps in the functionality offered by \textsf{expl3} are found (in
-some cases, we know that they exist already), the programming layer
-will be extended to support our needs. In other cases, wrappers around
-\TeX\ functions that can be more usefully handled at a higher level
-will be written.
-
-In terms of what we're planning to work on next, three \textsf{xpackage}s
-will take the focus of our attention.
-\begin{description}
-\item [xbase]
- `\textsf{xbase}' is actually two packages: \textsf{xparse} and
- \textsf{template}. These contain code for, respectively, defining new
- document commands (such that a user would use; e.g., \verb|\section|,
- \verb|\makebox|, \dots) and for handling keyval lists for user input and
- document specification. \textsf{xparse} was presented at \TUG{1999}%
- \footnote{\url{http://www.latex-project.org/papers/tug99.pdf}}
- and Lars Hellstr\"om wrote some notes on \textsf{template} in 2000%
- \footnote{\url{http://www.latex-project.org/papers/template-notes.pdf}}.
- Functionality coverage for these packages is good but concepts need a good
- ``airing''. There are various approaches taken for keyval input, some more
- recent than the \textsf{template} code, so there are some alternatives to
- evaluate.
-\item [galley2] Sophisticated handling for \mbox{constructing} paragraphs and
- other document elements. Morten spoke on this at \TUG{2008}%
- \footnote{\url{http://river-valley.tv/the-galley-module/}}.
- Design needs to be revisited after some stress testing.
-\item [xor] This is the \LaTeX3 output routine for splitting the galley into
- page and sub-page sized chunks. Ideas and code need work to move to
- ``production ready'' status. Early developments with this package were
- published by Frank in 2000%
- \footnote{\url{http://www.latex-project.org/papers/xo-pfloat.pdf}}.
-\end{description}
-
-Expect to hear again from us at Christmas. If you'd like to discuss any
-of these ideas, please join us on the \textsc{latex-l} mailing list%
-\footnote{\url{http://www.latex-project.org/code.html}}.
-
-\end{document}
-
-
-
diff --git a/macros/latex/contrib/l3kernel/l3news03.pdf b/macros/latex/contrib/l3kernel/l3news03.pdf
deleted file mode 100644
index f16bb58750..0000000000
--- a/macros/latex/contrib/l3kernel/l3news03.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news03.tex b/macros/latex/contrib/l3kernel/l3news03.tex
deleted file mode 100644
index e3e245f051..0000000000
--- a/macros/latex/contrib/l3kernel/l3news03.tex
+++ /dev/null
@@ -1,128 +0,0 @@
-% Copyright 2009,2010 The LaTeX Project
-\documentclass{ltnews}
-\PassOptionsToPackage{colorlinks}{hyperref}
-
-\usepackage{metalogo,ragged2e}
-
-\AtBeginDocument{
- \renewcommand{\LaTeXNews}{\LaTeX3~News}
- \RaggedRight
-}
-
-\usepackage{url}
-
-\publicationmonth{January}
-\publicationyear{2010}
-\publicationissue{3}
-
-\begin{document}
-\maketitle
-\raisefirstsection
-
-\section{Happy New Year}
-
-Welcome to the holiday season edition of `news of our activities' for
-the \LaTeX3 team.
-
-\section{Recent developments}
-
-The last six months has seen two significant releases in the \LaTeX3 code.
-In the \textsc{ctan} repository for the \pkg{xpackages},\footnote{\url{http://mirror.ctan.org/tex-archive/macros/latex/contrib/xpackages/}} you'll find two items of interest:
-\begin{itemize}
-\item A revised version of \textsf{xparse}; and
-\item The new package \textsf{xtemplate}, a re-implementation of \textsf{template} with a new syntax.
-\end{itemize}
-Special thanks to Joseph Wright who handled the implementations above almost single-handedly (with lots of input and feedback from other members of the team and members of the \textsc{latex-l} mailing list).
-
-These two packages are designed for the \LaTeX\ package author who wishes to define document commands and designer interfaces in a high-level manner.
-
-\paragraph{\textsf{xparse}}
-This package allows complex document commands to be constructed with all sorts of optional arguments and flags. Think of how \verb|\newcommand| allows you to create a command with a single optional argument and \textsf{xparse} is a generalisation of that idea.
-
-\paragraph{\textsf{xtemplate}}
-This package requires more explanation.
-\textsf{Xtemplate} is designed to separate the logical information in a
-document from its visual representation. `Templates' are constructed to fulfil
-individual typesetting requirements for each set of arguments; to change
-the look of a certain part of a document, instantiations of templates can be
-swapped out for another without (a) having to change the markup of the source
-document, or (b) having to edit some internal \LaTeX\ macro.
-
-
-\LaTeXe{} packages, such as \textsf{geometry} or \textsf{titlesec}, already provide
-parameterized interfaces to specific document elements. For example,
-one may use \textsf{titlesec} to change the
-layout of a \verb|\section|: one modifies its layout parameters via \verb|\titleformat| and \verb|\titlespacing|.
-In a way, such packages define a template for a specific document element and
-some manipulation commands to instantiate it.
-\pagebreak
-However, the moment the intended
-layout is not achievable with one package you are on your own: either you have
-to resort to low-level programming or find some other high-level package which, of course, comes with its own set of conventions and manipulation commands.
-
-The \textsf{xtemplate} package can be thought of a generalization of such
-ideas. It provides a uniform interface for defining and managing templates for
-any kind of document element and most importantly provides a uniform interface
-for instantiating the layout.
-
-Thus the designer activity of defining or modifying a document class is
-limited to selecting the document elements that should be provided by the
-class (e.g., \verb|\chapter|, \verb|\section| \verb|\footnote|, lists, \ldots), selecting
-appropriate ``named'' templates for each of them, and instantiating these
-templates by specifying values for their layout parameters. If a desired
-layout can't be achieved with a given template a different template for the
-same document element can be selected.
-
-Programming is only necessary
-if no suitable template for the intended layout is available.
-It is then that a \LaTeX{} programmer has to build a new template
-that supports the layout requirements. Once this task is complete, the
-template may be
-added to the selection of templates that designers and users may choose from
-to define or adjust document layouts seamlessly.
-
-This is a slight gloss over the complexities of the package itself, which you can read about in the documentation. We've tried to document \textsf{xtemplate} clearly but we'd love feedback on whether the ideas make sense to you.
-
-As an addendum to the introduction of \textsf{xtemplate}, the older \textsf{template} package will be retired in the near future. To our knowledge there is only a single package on \textsc{ctan} that uses \textsf{template}, namely \textsf{xfrac}, and members of the \LaTeX\ team are in the process of switching this package over to \textsf{xtemplate}. If you have any private code that uses \textsf{template}, please let us know!
-
-
-\section{Upcoming plans}
-
-Having announced the updated \textsf{xparse} and the new \textsf{xtemplate}, the next stage of development will revolve around using these two systems in the other components of the \textsf{xpackages}, feeding back our experience in practise with the original ideas behind the designs and evaluating if the packages are meeting our expectations.
-
-\subsection{Packages to tackle}
-
-\paragraph{\textsf{xhead}}
-The first work will be to create a new \textsf{xpackage} (probably called \textsf{xhead}), for typesetting section headings and other document divisions.
-Section headings are one of the more complex areas to work with, so
-the work should stress \textsf{xtemplate} enough to know if its
-current design is sufficient for most needs. Nothing has been
-released yet, but we'll announce further developments on the
-\textsc{latex-l} mailing
-list\footnote{For details, see
- \url{http://www.latex-project.org/code.html}} in the
-mean time.
-
-
-\paragraph{\textsf{galley}}
-We also need to give \textsf{galley} the same treatment as
-\textsf{xparse} and \textsf{xtemplate} have already had. That is, we have an
-older implementation (in fact two) that needs some work before we're ready to release it to \textsc{ctan}.
-
-The \textsf{galley} package is used to place material into the
-vertical list while typesetting but before page breaks occur. Since it
-works at such a low level, it is important to solidify this package
-before writing higher level design templates.
-
-An issue we have to face is that to achieve best results,
-\textsf{galley} cannot be used in concert with \LaTeXe\ code. This
-could limit its usefulness, and we may decide that it's better to
-scale back the features we're attempting, to allow better
-interoperability for existing packages and documents. More work
-remains before we can decide between these options.
-
-
-\end{document}
-
-
-
diff --git a/macros/latex/contrib/l3kernel/l3news04.pdf b/macros/latex/contrib/l3kernel/l3news04.pdf
deleted file mode 100644
index 52c33e516a..0000000000
--- a/macros/latex/contrib/l3kernel/l3news04.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news04.tex b/macros/latex/contrib/l3kernel/l3news04.tex
deleted file mode 100644
index a0fc82f3de..0000000000
--- a/macros/latex/contrib/l3kernel/l3news04.tex
+++ /dev/null
@@ -1,123 +0,0 @@
-% Copyright 2009,2010 The LaTeX Project
-\documentclass{ltnews}
-\PassOptionsToPackage{colorlinks}{hyperref}
-
-\usepackage{metalogo,ragged2e}
-
-\AtBeginDocument{
- \renewcommand{\LaTeXNews}{\LaTeX3~News}
- \RaggedRight
-}
-
-\usepackage{url,hologo}
-
-\publicationmonth{July}
-\publicationyear{2010}
-\publicationissue{4}
-
-\begin{document}
-\maketitle
-
-\noindent
-Now that we're back from the \TeX\ Users Group conference in San
-Francisco, it's time to discuss what's been going on over the last six months.
-Due to some extra travel plans after the conference, this issue is slightly
-late in coming out.
-
-
-\section{\textsf{expl3} in practice}
-
-Joseph Wright and Will Robertson have both released significant new versions
-of their packages, resp., \textsf{siunitx} and \textsf{fontspec}. These have
-been re-written in the \LaTeX3 programming language \textsf{expl3}, which we
-have discussed here previously. Using \textsf{expl3} for production code has
-been very successful, both in demonstrating that the concepts are sound and
-highlighting areas that still need some attention.
-% The \textsf{expl3}
-% code will continue to evolve as more people use it for their work.
-
-In the case of \textsf{fontspec}, \textsf{expl3} programming is being used to
-target \LaTeX\ running on either \XeTeX\ and \hologo{LuaTeX}. In the latter
-case, the package is a mixture of Lua code and \pkg{expl3} code; Will
-presented the \pkg{unicode-math} package at TUG~2010, which is developed in
-the same style.
-
-
-\section{New \textsf{xpackages}}
-
-Frank Mittelbach has started to work on a new experimental \LaTeX3 package
-\textsf{xhead} that provides templates for one of the most complex areas of
-document design: section headings and document divisions. This
-is the beginning of an ambitious idea to map out the requirements for
-typesetting most documents currently processed with \LaTeX.
-
-One of the challenges here is providing a ``natural'' design language for
-describing the two-dimensional spatial relationships of objects participating
-in the design, e.g., the placement of a heading number in relation to the
-heading title, a possible sub-title, etc. In answer to this challenge Frank
-developed the \textsf{xcoffin} package, which he presented at TUG~2010. It is
-designed as a high-level interface for placing and aligning boxes on a page,
-allowing a `designer's approach' for indicating the positional relationship
-between boxes. (A `coffin' is a box with handles.) As an example, it is
-possible to represent ideas such as `align the lower-left corner of box A with
-the upper-right corner of box B after rotating it ninety degrees', without
-having to calculate the intermediate positions.
-
-We expect a future version of \textsf{xcoffin} (after some further work on its
-interface layer and its internal implementation) to play a major role in all
-packages providing layout templates for higher-level document objects, such as
-table of contents designs, floats, etc.
-
-Finally,
-Joseph Wright has begun work with the current `galley' packages, producing the
-new, minimal, \textsf{xgalley} based on \textsf{xfm-galley} as a testbed for
-what we need and what will work.
-
-
-\section{Developments with \textsf{expl3}}
-
-Meanwhile, Joseph's \emph{also} been writing a new floating-point calculation
-module, called \textsf{l3fp}, for \pkg{expl3}. This module allows manipulation
-and calculation of numbers with a much larger range than \TeX\ allows
-naturally. The \textsf{l3fp} module has already been utilised in the
-\pkg{xcoffin} code for calculatations such as coordinate rotations and
-intersection points of vectors.
-
-The modules \pkg{l3io} and \pkg{l3file} have been revised, rethinking the way
-that read and write streams are dealt with. \TeX\ has a hard limit of sixteen
-input and output streams open at any one time, and the new implementation for
-\pkg{expl3} provides more flexibility in how they are allocated; there's now
-much less chance of running into a `\verb|No room for a new \read|' (or
-\verb|\write|) error.
-
-Sometimes we discuss ideas for \textsf{expl3} that \emph{don't} end up making
-it into the final code. One example of this is the concept of having `local
-registers' for integers, boxes, and so on, that do not survive outside of the
-group they are defined in (in contrast to Plain \TeX\ and \LaTeX, where
-allocators such as \verb|\newcount| and \verb|\newbox| are always global).
-Despite the scope for some small benefit, we decided that the extra complexity
-that the additional functions required, in both syntax and documentation, was
-not justified.
-
-
-\section{TUG 2010 reflections}
-
-% added most of it back in: -fmi
-
-%% Most of the active \LaTeX3 Project team were able to attend the TUG~2010
-%% conference and (for Will) meet everyone in person for the first time.
-
-Our interpretation of the broad themes discussed at the conference are that
-\TeX-based systems are still thriving and there are some big problems to solve
-with robust solutions to transform \LaTeX\ source, including mathematics, into
-a form such as HTML. While there are big pushes for standardising various aspects
-of the \LaTeX\ syntax, we also believe that it is \LaTeX's very
-flexibility---its inherently non-standardised markup---that has allowed it to
-survive for so many years. There is a delicate trade-off here between moving
-forward into more standards-based territory while also retaining the
-extensibility of the third-party package system.
-
-\end{document}
-
-
-
diff --git a/macros/latex/contrib/l3kernel/l3news05.pdf b/macros/latex/contrib/l3kernel/l3news05.pdf
deleted file mode 100644
index 1f6bda9687..0000000000
--- a/macros/latex/contrib/l3kernel/l3news05.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news05.tex b/macros/latex/contrib/l3kernel/l3news05.tex
deleted file mode 100644
index 43ec2a8d19..0000000000
--- a/macros/latex/contrib/l3kernel/l3news05.tex
+++ /dev/null
@@ -1,64 +0,0 @@
-% Copyright 2011 The LaTeX Project
-\documentclass{ltnews}
-\PassOptionsToPackage{colorlinks}{hyperref}
-
-\usepackage{metalogo,ragged2e}
-
-\AtBeginDocument{
- \renewcommand{\LaTeXNews}{\LaTeX3~News}
- \RaggedRight
-}
-
-\usepackage{hologo}
-
-\publicationmonth{January}
-\publicationyear{2011}
-\publicationissue{5}
-
-\begin{document}
-\maketitle
-
-
-\section{Happy new year}
-
-Seasons greetings for 2011!
-As the previous news issue was released late, this season's issue will be shorter than usual.
-
-\section{The LPPL is now OSI-approved}
-
-We are happy to report that earlier this year the \LaTeX\ Project Public License (LPPL) has been approved by the OSI as an open source licence.\footnote{\url{http://www.opensource.org/licenses/lppl}} Frank Mittelbach will be publishing further details on this news in a retrospective on the LPPL in an upcoming TUGboat article.
-
-\section{Reflections on 2010}
-
-We are pleased to see the continued development and discussion in the \TeX\ world.
-The \LaTeX\ ecosystem continues to see new developments and a selection of notable news from the second half of last year include:
-\begin{itemize}
-\item[June] The TUG~2010 conference was held very successfully in San
-Francisco; videos, slides, and papers from \LaTeX3 Project members are available from our website.\footnote{\url{http://www.latex-project.org/papers/}}
-\item[Aug.]
-The \TeX\ Stack Exchange\footnote{\url{http://tex.stackexchange.com}} question\,\&\,answer website was created and has since grown quickly. At time of writing, some 2800 people have asked 2600 questions with 5600 answers total, and 2200 users are currently visiting daily.
-\item[Sept.] \TeX\ Live 2010 was released: each year the shipping date is earlier; the production process is becoming more streamlined and we congratulate all involved for their hard work. One of the most notable new components of \TeX\ Live 2010 includes the `restricted shell escape' feature to allow, among other things, automatic EPS figure conversion for pdf\LaTeX\ documents.
-\item[Oct.] TLContrib\footnote{\url{http://tlcontrib.metatex.org/}} was opened by Taco Hoekwater as a way to update a \TeX~Live installation with material that is not distributable through \verb|tlmgr| itself. Such material includes executables (e.g., new versions of Lua\TeX), non-free code, or test versions of packages.
-\item[Nov.] Philipp Lehman released the first stable version of \textsf{biblatex}. One of the most ambitious \LaTeX\ packages in recent memory, \textsf{biblatex} is a highly flexible package for managing citation cross-referencing and bibliography typesetting. In `beta' status for some years now, reaching this point is a great milestone.
-\item[Dec.] Lua\TeX\ 0.65. We are happy to see Lua\TeX\ development steadily continuing. \LaTeX\ users may use Lua\TeX\ with the \verb|lualatex| program. Like \verb|xelatex|, this allows \LaTeX\ documents to use multilingual OpenType fonts and Unicode text input.
-\end{itemize}
-
-\section{Current progress}
-
-The \textsf{expl3} programming modules continue to see revision and expansion; we have added a Lua\TeX\ module, but \textsf{expl3} continues to support all three of pdf\LaTeX, \XeLaTeX, and Lua\LaTeX\ equally.
-
-The \textsf{l3fp} module for performing floating-point arithmetic has been extended and improved. Floating point maths is important for some of the calculations required for complex box typesetting performed in the new `coffins' code.
-The \textsf{l3coffin} module has been added based on the original \textsf{xcoffins} package introduced at TUG~2010 as reported in the last news issue; this code is now available from CTAN for testing and feedback.
-
-We have consolidated the \textsf{l3int} and \textsf{l3intexpr} modules (which were separate for historical purposes); all integer/count-related functions are now contained within the `\textsf{int}' code and have prefix \verb|\int_|. Backwards compatibility is provided for, but eventually we will drop support for the older \verb|\intexpr_| function names.
-
-\section{Plans for 2011}
-
-In the following year, we plan to use the current \LaTeX3 infrastructure to continue work in building high-level code for designing \LaTeX\ documents using the \textsf{xtemplate} package. Our first priority is to look at section headings and document divisions, as we see this area as one of the most difficult, design-wise, of the areas to address. From there we will broaden our scope to more document elements.
-
-We will also do some low-level work on the `galley', which is the code that \LaTeX3 uses to build material for constructing pages, and we will continue to extend \textsf{expl3} into a more complete system from which we can, one day, create a pure \LaTeX3 format.
-
-\end{document}
-
-
-
diff --git a/macros/latex/contrib/l3kernel/l3news06.pdf b/macros/latex/contrib/l3kernel/l3news06.pdf
deleted file mode 100644
index cd65bce3a6..0000000000
--- a/macros/latex/contrib/l3kernel/l3news06.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news06.tex b/macros/latex/contrib/l3kernel/l3news06.tex
deleted file mode 100644
index 63ee6c7c75..0000000000
--- a/macros/latex/contrib/l3kernel/l3news06.tex
+++ /dev/null
@@ -1,141 +0,0 @@
-% Copyright 2011 The LaTeX Project
-\documentclass{ltnews}
-\PassOptionsToPackage{colorlinks}{hyperref}
-
-\usepackage{metalogo,ragged2e}
-
-\AtBeginDocument{
- \renewcommand{\LaTeXNews}{\LaTeX3~News}
- \RaggedRight
-}
-
-\usepackage{hologo}
-
-\publicationmonth{June}
-\publicationyear{2011}
-\publicationissue{6}
-
-\begin{document}
-\maketitle
-
-\noindent
-A key aim of releasing `stable' \LaTeX3 material to CTAN is to allow users to
-benefit from new ideas \emph{now}, and also to raise the profile of usable
-\LaTeX3 ideas. This is clearly being successful, with \pkg{xparse} being of
-particular utility to end users. This increase in interest has been
-particularly notable on the new
-\href{http://tex.stackexchange.com/}{TeX.SX Q\&A site}.
-
-\section{The \LaTeX3 Team expands}
-
-Raising interest in \LaTeX3 developments has inevitably led to feedback on
-cases where the code base has required attention. It has also attracted new
-programmers to using \LaTeX3 ideas, some more than others! Bruno Le Floch has
-over the past few months made many useful contributions to \LaTeX3, and we are
-very pleased that he has recently joined The \LaTeX{} Project.
-
-Bruno has taken a particular interest in improving the performance and
-reliability of the \pkg{expl3} language. This has already resulted in new
-implementations for the \texttt{prop} and \texttt{seq} data types. At the same
-time, he has identified and fixed several edge-case issues in core \pkg{expl3}
-macros.
-
-\section{The `Big Bang'}
-
-In parallel to Bruno's improvements, Joseph Wright initiated a series of `Big
-Bang' improvements to \LaTeX3. The aim of the Big Bang was to address a number
-of long-standing issues with the \LaTeX3 code base. Development has taken place
-over many years, with the status of some of the resulting code being less
-than clear, even to members of The \LaTeX{} Project! At the same time, different
-conventions had been applied to different parts of the code, which made reading
-some of the code rather `interesting'. A key part of the Big Bang has been to
-address these issues, cleaning up the existing code and ensuring that the
-status of each part is clear.
-
-The arrangement of \LaTeX3 code is now the same in the development
-repository and on CTAN, and splits the code into three parts.
-\begin{description}
- \item[\pkg{l3kernel}] The core of \LaTeX3, code which
- is expected to be used in a \LaTeX3 kernel in more or less the
- current form. Currently, this part is made up of the \LaTeX3
- programming layer, \pkg{expl3}.
- \item[\pkg{l3packages}] \LaTeXe{} packages making use of \LaTeX3
- concepts and with stable interfaces. The \pkg{xparse} and
- \pkg{xtemplate} packages are the core of this area. While many of
- the \emph{ideas} explored here may eventually appear in a \LaTeX3
- kernel, the interfaces here are tied to \LaTeXe{}.
- \item[\pkg{l3experimental}] \LaTeXe{} packages which explore more
- experimental \LaTeX3 ideas, and which may see interface changes as
- development continues. Over time, we expect code to move from this area
- to either \pkg{l3kernel} or \pkg{l3packages}, as appropriate.
-\end{description}
-
-In addition to these release areas, the development code also features a
-\pkg{l3trial} section for exploring code ideas. Code in \pkg{l3trial} may be
-used to improve or replace other parts of \LaTeX3, or may simply be dropped!
-
-As well as these improvements to the \emph{code} used in \LaTeX3, much of the
-documentation for \pkg{expl3} has been made more precise as part of the Big
-Bang. This means that \texttt{source3.pdf} is now rather longer than it was
-previously, but also should mean that many of the inaccuracies in earlier
-versions have been removed. Of course, we are very pleased to receive
-suggestions for further improvement.
-
-\section{\LaTeX3 on GitHub}
-
-The core development repository for \LaTeX3 is held in an SVN repository, which
-is \href{http://www.latex-project.org/code.html}{publicly viewable \emph{via}
-the Project website}. However, this interface misses out on some of the `bells
-and whistles' of newer code-hosting sites such as
-\href{http://gitbug.com/}{GitHub} and \href{http://bitbucket.org/}{BitBucket}.
-We have therefore established a mirror of the master repository on GitHub%
-\footnote{\url{http://github.com/latex3/svn-mirror}}. This is kept in
-synchronisation with the main SVN repository by Will Robertson (or at least
-by his laptop!).
-
-The GitHub mirror offers several useful features for people who wish to
-follow the \LaTeX3 code changes. GitHub offers facilities such as highlighted
-differences and notification of changes. It also makes it possible for
-non-Team members to submit patches for \LaTeX3 as `pull requests' on
-GitHub.
-
-As well as offering a convenient interface to the \LaTeX3 code, the GitHub
-site also includes an issue database\footnote{%
-\url{http://github.com/latex3/svn-mirror/issues}}. Given the very
-active nature of \LaTeX3 development, and the transitory nature of many
-of the issues, this provides a better approach to tracking issues than
-the main \LaTeX{} bug database\footnote{\url{http://www.latex-project.org/bugs.html}}.
-Developers and users are
-therefore asked to report any issues with \LaTeX3 code \emph{via} the GitHub
-database, rather than on the main Project homepage.
-Discussion on the \href{http://www.latex-project.org/code.html}{\mbox{LaTeX-L} mailing list}
-is also encouraged.
-
-\section{Next steps}
-
-The `Big Bang' involves making a number of changes to \pkg{expl3} function
-names, and is likely to break at least some third-party code. As a result,
-the updates will not appear on the \TeX{} Live 2011 DVD release, but will
-instead be added to \TeX{} Live once regular updates restart (probably
-August).
-
-Bruno is working on a significant overhaul of the \pkg{l3fp} floating-point
-unit for \LaTeX3. He has developed an approach which allows expandable
-parsing of floating-point expressions, which will eventually allow syntax
-such as
-\begin{verbatim}
- \fp_parse:n { 3 * 4 ( ln(5) + 1 ) }
-\end{verbatim}
-This will result in some changes in the interface for floating-point numbers, but
-we feel that the long-term benefit is worth a small amount of recoding in other
-areas.
-
-Joseph has completed documentation of the \pkg{xgalley} module, and this is
-currently being discussed. Joseph is hoping to move on to implement other
-more visible ideas based on the \pkg{xtemplate} concept over the next few
-months.
-
-\end{document}
-
-
-
diff --git a/macros/latex/contrib/l3kernel/l3news07.pdf b/macros/latex/contrib/l3kernel/l3news07.pdf
deleted file mode 100644
index 721252a9b0..0000000000
--- a/macros/latex/contrib/l3kernel/l3news07.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news07.tex b/macros/latex/contrib/l3kernel/l3news07.tex
deleted file mode 100644
index 2b433da4c4..0000000000
--- a/macros/latex/contrib/l3kernel/l3news07.tex
+++ /dev/null
@@ -1,111 +0,0 @@
-% Copyright 2012 The LaTeX3 Project
-\documentclass{ltnews}
-\PassOptionsToPackage{colorlinks}{hyperref}
-
-\usepackage{metalogo,ragged2e}
-
-\AtBeginDocument{
- \renewcommand{\LaTeXNews}{\LaTeX3~News}
- \RaggedRight
-}
-
-\publicationmonth{February}
-\publicationyear{2012}
-\publicationissue{7}
-
-\begin{document}
-\maketitle
-
-\section{After the `Big Bang'}
-
-The last \LaTeX3 News gave details of the `Big Bang', in which the team have
-revised the layout and coverage of the \LaTeX3 codebase. This process has
-made the status of different modules clearer, so that both the team themselves
-and everyone else know what is going on.
-
-The `Big Bang' changes were not shipped to \textsc{ctan} until after the \TeX{}
-Live 2011 freeze, as we did not want to end up with a \textsc{dvd} containing
-badly broken code. The update went to \textsc{ctan} soon after \TeX{} Live 2011
-shipped, and has now propagated around the world. The new package naming
-(\pkg{l3kernel}, \pkg{l3packages} and \pkg{l3experimental}) has caused some
-surprises for a small number of users, but there have not been any major
-issues with the changes at the code level.
-
-The `Big Bang' has attracted attention from programmers outside of the
-\LaTeX3 team, with useful feedback arriving on the
-\texttt{LaTeX-L} list and TeX.sx, in particular. One area that this has
-highlighted is the need to document carefully when changes to the `stable'
-parts of the \LaTeX3 codebase occur. All changes to \pkg{l3kernel} now
-come with an explicit date for the change in the documentation, which means
-that programmers can check exactly when the features they want were introduced.
-
-Another key part of supporting \LaTeX3 use beyond the team is making it easy
-to check on the version of \LaTeX3 installed. To support that, the file date
-of the main \pkg{expl3} package is now set each time there is a release of the
-\LaTeX3 material to \textsc{ctan}. This means that the \LaTeXe{}
-\cs{@ifpackagelater} test can be used reliably to detect if the installed
-version of \LaTeX3 is going to supply the functions that a programmer is
-using.
-
-\section{Deforming boxes}
-
-Additions to both the \LaTeX3 stable material and more experimental modules
-continue. Joseph Wright has been working on adding `native' drivers for
-\LaTeX3 to support box transformations. These allow box rotation, clipping
-and scaling with the drivers \texttt{dvips}, \texttt{xdvipdfmx} and direct
-\textsc{pdf} output.
-
-The development of clipping support for the \texttt{xdvipdfmx} driver has also allowed
-us to suggest improvements to the \LaTeXe{} graphics drivers, enabling clipping
-with the \XeTeX{} engine.
-
-\section{A \TeX{}-based regex engine}
-
-Bruno Le Floch has been %working across the codebase, %% omitted to avoid page break
-improving the efficiency
-and robustness of a number of \LaTeX3 functions. Most notably, he has
-created a purely \TeX{}-based regular expression (regex) system for \LaTeX3.
-This is currently experimental, but is already proving useful and will
-hopefully stabilise over the coming months.
-
-Bruno's regex system works with all of the supported engines (pdf\TeX{},
-\XeTeX{} and \LuaTeX{}). He has implemented the core ideas of standard
-regex systems, along with some \TeX{}-specifics to allow matching and
-replacing
-the content of token lists % correct?
-by category code.
-
-\section{\pkg{xparse} improves}
-
-The \pkg{xparse} module has been overhauled, making the internal code
-more efficient and adding additional argument types. This has also allowed
-us to deal with a number of internal bugs, meaning that argument grabbing
-is now more reliable.
-
-The argument grabbers themselves have been reworked so that in the event of an error,
-the user will normally get a meaningful message from \TeX{} rather than
-one pointing to \pkg{xparse} internal function names. This should help
-in tracking down erroneous input in real documents.
-
-\section{The galley}
-
-As detailed in the last issue, work on the galley module has been continuing.
-Discussion of Joseph's reimplementation of the galley concepts highlighted
-some important areas to work on, with the nature of the template concept
-being particularly significant.
-
-More work is still needed to finalise the galley concepts, but it is clear that
-some of this will require feedback from other areas. Joseph therefore hopes
-to finish work on the current round of galley improvements by the end of
-February, and to return to them once some other areas have been addressed.
-
-\section{Relationships between document items}
-
-The \textsc{tug}2011 meeting took place in October in India. Frank Mittelbach
-spoke there about ideas for describing the design relationship between document elements.
-% omit calling it "ldb" here because that name will likely change (last I heard?)
-These ideas allow a document designer to specify the design of a document element
-based on its context within a document, and progress in this area will likely
-lead to an extension in the \pkg{xtemplate} system.
-
-\end{document}
diff --git a/macros/latex/contrib/l3kernel/l3news08.pdf b/macros/latex/contrib/l3kernel/l3news08.pdf
deleted file mode 100644
index 855db5bdc5..0000000000
--- a/macros/latex/contrib/l3kernel/l3news08.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news08.tex b/macros/latex/contrib/l3kernel/l3news08.tex
deleted file mode 100644
index 17107f8360..0000000000
--- a/macros/latex/contrib/l3kernel/l3news08.tex
+++ /dev/null
@@ -1,170 +0,0 @@
-% Copyright 2012 The LaTeX3 Project
-\documentclass{ltnews}
-
-\PassOptionsToPackage{colorlinks}{hyperref}
-
-\usepackage{metalogo,ragged2e}
-
-\AtBeginDocument{
- \renewcommand{\LaTeXNews}{\LaTeX3~News}
- \RaggedRight
-}
-
-\usepackage{expl3,siunitx,catchfile}
-\usepackage{hologo}
-\usepackage{verbatim}% avoid ltnews' "special" verbatim processing
-
-\publicationmonth{July}
-\publicationyear{2012}
-\publicationissue{8}
-
-\def\DTX{\texttt{.dtx}}
-\def\STY{\texttt{.sty}}
-
-\ExplSyntaxOn
-\NewDocumentCommand { \calcnum } { m }
- { \num { \fp_to_scientific:n {#1} } }
-\ExplSyntaxOff
-
-\begin{document}
-\maketitle
-
-\raisefirstsection
-\section{Extended floating point support}
-
-Bruno Le Floch has been re-writing the floating point module to function in an `expandable' manner. This allows floating point calculations to be computed far more flexibly and efficiently than before.
-The expandable nature of the new code allows its use inside operations such as writing to external files, for which previously any such calculations would have to be pre-calculated before any of the writing operations began.
-
-Bruno's work on the floating point module has been officially released into the main \textsc{svn} repository for \texttt{l3kernel}; \TeX\ Live 2012 will contain the `old' code for stability while this year is spent testing the new code in production environments and ironing out any wrinkles.
-
-Here's a neat example as suggested in the documentation, which produces `\calcnum { round ( 200 pi * sin ( 2.3 ^ 5 ) , 2 ) }':
-
-\begin{verbatim}
-\usepackage{xparse, siunitx}
-\ExplSyntaxOn
-\NewDocumentCommand { \calcnum } { m }
- { \num { \fp_to_scientific:n {#1} } }
-\ExplSyntaxOff
-
-\calcnum {
- round ( 200 pi * sin ( 2.3 ^ 5 ) , 2 )
-}
-\end{verbatim}
-
-This feature is invaluable for simple (and not-so-simple) calculations in document and package authoring, and has been lacking a robust solution for many years.
-While \hologo{LuaLaTeX} can perform similar tasks within its Lua environment, the floating point support is written using the \texttt{expl3} programming language only, and is thus available in \hologo{pdfLaTeX} and \hologo{XeLaTeX} as well.
-
-\section{Regular expressions in \TeX}
-
-As if expandable floating point support wasn't enough, Bruno has also written a complete regular expression engine in \texttt{expl3} as well.
-% [Ed: Consider my mind blown.]
-Many reading this will be familiar with the quote attributed to Jamie Zawinski:
-\begin{quote}\itshape
-Some people, when confronted with a problem, think
-``I know, I'll use regular expressions.''
-Now they have two problems.
-\end{quote}
-And as humorous as the saying is, it's still fair to say that regular expressions are a great tool for manipulating streams of text.
-We desperately hope that people will \emph{not} start using the regex code to do things like parse \textsc{xml} documents; however, for general search--replace duties, there's never been anything like \texttt{l3regex} for the \LaTeX\ world.
-As a trivial example, there are
-\CatchFileDef\thisfile{\jobname.tex}{}%
-\ExplSyntaxOn
-\exp_args:Nno \regex_count:nnN { \b (?i) W e \b } {\thisfile} \l_tmpa_int
-\int_use:N \l_tmpa_int
-\ExplSyntaxOff
-~instances of the word `We' or `we' in this document (including those two).
-This value is counted automatically in two lines of code.
-
-And again, it is available for \hologo{pdfLaTeX} and \hologo{XeLaTeX} users as well as \hologo{LuaLaTeX} ones; it also bears noting that this provides an easy solution for applying regular expression processing to \LaTeX\ documents and text data even on the Windows operating system that does not have native support for such things.
-
-
-\section{Separating internal and external code}
-
-\LaTeX\ packages are written by a wide range of package authors and consist of code and commands for various purposes.
-Some of these commands will be intended for use by document authors (such as \verb|\pbox| from the \textsf{pbox} package); others are intended for use by other package writers (such as \verb|\@ifmtarg| from the \textsf{ifmtarg} package).
-
-However, a large portion of them are internal, i.e., are intended to
-be used only within the package or within the \LaTeX{} kernel and
-should not be used elsewhere. For example, \verb|\@float| is the
-\LaTeX{} kernel interface for floats to be used in class files, but
-the actual work is done by a command called \verb|\@xfloat| which
-should not be used directly. Unfortunately the \LaTeXe{} language
-makes no clear distinction between the two, so it is tempting for
-programmers to directly call the latter to save some ``unnecessary''
-parsing activity.
-
-The downside of this is that the ``internal'' commands suddenly act as
-interfaces and a reimplementation or fix in any of them would then
-break add-on packages as they rely on internal behavior. Over the
-course of the last twenty years probably 80\% of such ``internal''
-commands have found their way into one or another package. The
-consequences of this is that nowadays it is next to impossible to
-change anything in the \LaTeXe{} kernel (even if it is clearly just an
-internal command) without breaking something.
-
-
-In \LaTeX3 we hope to improve this situation drastically by
-clearly separating public interfaces (that extension packages can use
-and rely on) and private functions and variables (that should not
-appear outside of their module). There is (nearly) no way to enforce
-this without severe computing overhead, so we implement it only
-through a naming convention, and some support mechanisms. However, we
-think that this naming convention is easy to understand and to follow,
-so that we are confident that this will be adopted and provides the
-desired results.
-
-\subsection{Naming convention for internals}
-
-We've been throwing around some ideas for this for a number of years but nothing quite fit; the issue comes down to the fact that \TeX\ does not have a `name-spacing' mechanism so any internal command needs to have a specific prefix to avoid clashing with other packages' commands.
-The prefix we have finally decided on for \textsf{expl3} code is a double underscore, such that functions like \verb|\seq_count:N| are intended for external use and \verb|\__seq_item:n| is an internal command that should not be used or relied upon by others.
-
-All this is well and good, but it can be inconvenient to type long prefixes such as \verb|\__seq_| before all command names, especially in a package for which nearly \emph{all} package functions are internal.
-
-We therefore also extended \textsf{DocStrip} slightly by adding a `shorthand' for internal package prefixes.
-Commands and variables in \DTX\ code may now contain \texttt{@@} which is expanded to the function prefix when the \STY\ file is extracted.
-As an example, writing
-\begin{verbatim}
- %<@@=seq>
- \cs_new:Npn \@@_item:n
- ...
-\end{verbatim}
-is equivalent to
-\begin{verbatim}
- \cs_new:Npn \__seq_item:n
- ...
-\end{verbatim}
-There are clear advantages to this syntax.
-Function names are shorter and therefore easier to type, and code can still be prototyped using the \texttt{@@} syntax
-(e.g., pasting code between a \DTX\ file and a regular \texttt{.tex} document).
-Most importantly, it is explicitly clear from the code source which commands are intended to be used externally and which should be avoided.
-
-We hope that this syntax will prove popular; in our initial experiments we think it works very well. In fact we found a good number of smaller errors when being forced to think about what is internal and what is an external function.
-
-\section{Continual revolution---the `small bang'}
-
-In addition to the major additions introduced above, Frank Mittelbach has been examining \texttt{expl3} with a fresh eye to resolve any outstanding issues in the consistency or logic of the names of functions.
-
-We are very mindful of the fact that for people to find \texttt{expl3} a useful tool, it must have a stable interface.
-This said, there are still some musty corners that we can show where people simply haven't been using certain functions.
-In select cases, we're re-assessing whether all of the (sometimes esoteric) odds and ends that have been added to \texttt{expl3} really belong; in other cases, it's now clear that some naming or behaviour choices weren't correct the first time around.
-
-To address this tarnish, we're carefully making some minor changes to parts of the \texttt{expl3} interface and we'd like to allay any fears that \texttt{expl3} isn't stable.
-The \texttt{expl3} language now offers a wide range of functions plus their variants, and we're talking about changing but a very small percentage of these, and not common ones at that.
-We don't want it to become a mess, so we think it's better to tidy things up as we go.
-Follow the \texttt{LaTeX-L} mailing list for such details as they arise.
-
-\end{document}
-
-
-dropped/replaced:
-
-The \LaTeX3 codebases ranges between these two extremes; the packages
-in \texttt{l3packages} are largely the former while the modules
-composing \textsf{expl3} are largely the latter type. In both cases,
-the `external' commands (whether for document author or package
-writer) are usually defined in terms of other internal package
-commands that should not be used by anyone else, but often when
-reading the internal package code it's not always clear which is
-which.
-
-For \LaTeX3 we are experimenting with an extension to the \textsf{DocStrip} mechanism to provide a clear distinction between internal and external package commands.
diff --git a/macros/latex/contrib/l3kernel/l3news09.pdf b/macros/latex/contrib/l3kernel/l3news09.pdf
deleted file mode 100644
index 5dc3a3b9ad..0000000000
--- a/macros/latex/contrib/l3kernel/l3news09.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news09.tex b/macros/latex/contrib/l3kernel/l3news09.tex
deleted file mode 100644
index 55ed700a2c..0000000000
--- a/macros/latex/contrib/l3kernel/l3news09.tex
+++ /dev/null
@@ -1,1433 +0,0 @@
-% Copyright 2014 The LaTeX3 Project
-\documentclass{ltnews}
-
-\PassOptionsToPackage{colorlinks}{hyperref}
-\usepackage{metalogo,ragged2e}
-
-\AtBeginDocument{
- \renewcommand{\LaTeXNews}{\LaTeX3~News}
- \RaggedRight
- \setlength\parindent{1em}
-}
-
-\hbadness=10000
-\def\Dash{\,---\,}
-
-\providecommand\LuaLaTeX{Lua\LaTeX}
-\setcounter{tocdepth}{2}
-
-\usepackage{enumitem,csquotes}
-\MakeOuterQuote{"}
-\usepackage{fancyvrb}% to allow \Verb"<ul>" to typeset properly since ltnews patches \verb
-
-\makeatletter
-\renewcommand{\@subheadingfont}{%
- \sffamily\slshape
- \let\LaTeX\cmssLaTeX\let\TeX\cmssTeX
-}
-\renewcommand{\subsection}{%
- \@startsection
- {subsection}{2}{\z@}{-1.3ex \@plus -1ex \@minus -.2ex}%
- {0.8ex \@plus.2ex}{\@subheadingfont}%
-}
-\makeatother
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\RequirePackage{tikz}
-\definecolor{basecolor}{RGB}{0,128,128}
-\definecolor{maincolor}{RGB}{55,200,113}
-
-
-\newcommand \explbanner{%
-\begin{tikzpicture}[y=0.80pt,x=0.80pt,yscale=-1, inner sep=0pt, outer sep=0pt]
- \path[fill=basecolor,rounded corners=0.0000cm] (248.7785,295.7529) rectangle
- (465.3586,478.5802);
- \path[fill=white,rounded corners=0.0000cm] (257.9199,304.5427) rectangle
- (456.2172,469.7905);
- \path[fill=basecolor] (283.2386,478.5760) -- (289.5259,453.4125) .. controls
- (302.2770,439.6121) and (314.0060,425.3008) .. (319.5695,407.9067) .. controls
- (355.0759,401.0374) and (383.7853,403.5174) .. (413.7371,404.2858) .. controls
- (411.0072,403.8309) and (322.2852,388.7992) .. (322.2852,388.7992) .. controls
- (298.7181,356.5528) and (264.6380,373.5409) .. (249.0663,403.2205) --
- (248.7470,478.6397) -- cycle;
- \path[color=black,fill=white,nonzero rule,line width=1.253pt]
- (288.4249,394.4251) -- (288.2061,394.8313) .. controls (287.2860,396.5455) and
- (285.7381,397.6863) .. (283.5499,398.3938) .. controls (281.3616,399.1013) and
- (278.5647,399.3476) .. (275.2999,399.2063) -- (273.2374,399.1126) --
- (274.7061,400.5501) .. controls (275.4640,401.2791) and (275.6960,401.8541) ..
- (275.7061,402.3626) .. controls (275.7162,402.8712) and (275.5103,403.4284) ..
- (275.0186,404.0501) .. controls (274.0353,405.2935) and (272.0593,406.6472) ..
- (270.2374,408.0189) -- (269.6749,408.4564) -- (270.0499,409.0501) .. controls
- (271.5698,411.3818) and (272.2617,413.2035) .. (272.4249,414.5814) .. controls
- (272.5880,415.9592) and (272.2796,416.9162) .. (271.6436,417.7689) .. controls
- (270.3717,419.4743) and (267.6257,420.6198) .. (265.1124,422.0501) --
- (264.6124,422.3314) -- (264.7061,422.8626) .. controls (264.9221,424.1742) and
- (264.5793,425.2316) .. (263.6436,426.3001) .. controls (262.7079,427.3687) and
- (261.1571,428.4020) .. (259.0498,429.3001) -- (258.4873,429.5189) --
- (258.5810,430.1126) .. controls (259.0013,432.9207) and (259.8134,435.3978) ..
- (261.5810,436.9564) .. controls (263.1945,438.3790) and (265.6272,438.7418) ..
- (268.7373,438.1126) .. controls (269.2811,441.1124) and (270.0885,443.8463) ..
- (271.8935,445.6439) .. controls (273.7365,447.4793) and (276.5967,448.0631) ..
- (280.5185,447.0189) .. controls (281.3879,449.0885) and (282.6104,450.5771) ..
- (284.0498,451.5501) .. controls (285.6426,452.6269) and (287.4312,453.1746) ..
- (289.1435,453.7064) -- (289.5810,452.2376) .. controls (287.8816,451.7099) and
- (286.2778,451.1522) .. (284.9248,450.2376) .. controls (283.5718,449.3230) and
- (282.4412,448.0628) .. (281.6748,445.8939) -- (281.4248,445.1751) --
- (280.7060,445.3939) .. controls (276.7309,446.6155) and (274.5047,446.0613) ..
- (272.9873,444.5501) .. controls (271.4699,443.0389) and (270.6337,440.3179) ..
- (270.1123,437.1439) -- (269.9873,436.3001) -- (269.1435,436.5189) .. controls
- (265.8672,437.3737) and (263.9323,436.9328) .. (262.6123,435.7689) .. controls
- (261.3919,434.6928) and (260.6559,432.7860) .. (260.2373,430.4251) .. controls
- (262.1657,429.5404) and (263.7732,428.5395) .. (264.8310,427.3314) .. controls
- (265.8589,426.1576) and (266.3097,424.7444) .. (266.2373,423.2376) .. controls
- (268.5457,421.9725) and (271.2938,420.8514) .. (272.8935,418.7064) .. controls
- (273.7344,417.5788) and (274.1920,416.1226) .. (273.9873,414.3939) .. controls
- (273.8023,412.8317) and (273.0178,411.0042) .. (271.7060,408.8626) .. controls
- (273.3411,407.6578) and (275.1128,406.4408) .. (276.2373,405.0189) .. controls
- (276.8610,404.2302) and (277.3196,403.3287) .. (277.2998,402.3314) .. controls
- (277.2890,401.7896) and (277.0912,401.2653) .. (276.7998,400.7376) .. controls
- (279.5102,400.7514) and (281.9952,400.5582) .. (284.0498,399.8939) .. controls
- (286.3053,399.1646) and (288.0426,397.8495) .. (289.2060,396.0189) .. controls
- (292.5635,396.0371) and (296.0636,396.7806) .. (299.5810,397.2376) .. controls
- (303.1955,397.7073) and (306.8484,397.8601) .. (310.3310,396.3314) --
- (309.7060,394.8939) .. controls (306.6247,396.2464) and (303.2846,396.1632) ..
- (299.7685,395.7064) .. controls (296.2524,395.2495) and (292.5819,394.3984) ..
- (288.8935,394.4251) -- (288.4248,394.4251) -- cycle;
- \path[fill=white] (301.5159,393.8637) .. controls (301.5159,397.5244) and
- (298.5484,400.4920) .. (294.8877,400.4920) .. controls (291.2270,400.4920) and
- (288.2595,397.5244) .. (288.2595,393.8637) .. controls (288.2595,390.2031) and
- (291.2270,387.2355) .. (294.8877,387.2355) .. controls (298.5484,387.2355) and
- (301.5159,390.2031) .. (301.5159,393.8637) -- cycle;
- \path[color=black,fill=white,nonzero rule,line width=1.253pt]
- (321.0186,387.9251) .. controls (315.0680,395.6662) and (313.8600,393.4088) ..
- (310.2374,394.7063) -- (309.6124,394.9251) -- (309.7374,395.5813) .. controls
- (311.1321,403.3566) and (315.5160,405.7238) .. (319.1124,408.5501) --
- (320.0811,407.3313) .. controls (316.4798,404.5012) and (312.9249,402.6094) ..
- (311.4874,396.0188) .. controls (314.1361,395.3813) and (316.6278,396.2007) ..
- (322.2686,388.8626) -- (321.0186,387.9251) -- cycle;
- \path[fill=maincolor] (301.5159,393.8637) .. controls (301.5159,397.5244) and
- (298.5484,400.4920) .. (294.8877,400.4920) .. controls (291.2270,400.4920) and
- (288.2595,397.5244) .. (288.2595,393.8637) .. controls (288.2595,390.2031) and
- (291.2270,387.2355) .. (294.8877,387.2355) .. controls (298.5484,387.2355) and
- (301.5159,390.2031) .. (301.5159,393.8637) -- cycle;
- \path[color=black,fill=white,nonzero rule,line width=1.253pt]
- (294.8936,386.4563) .. controls (290.8098,386.4563) and (287.4874,389.7788) ..
- (287.4874,393.8626) .. controls (287.4874,397.9464) and (290.8098,401.2688) ..
- (294.8936,401.2688) .. controls (298.9774,401.2688) and (302.2999,397.9464) ..
- (302.2999,393.8626) .. controls (302.2999,389.7788) and (298.9774,386.4563) ..
- (294.8936,386.4563) -- cycle(294.8936,388.0188) .. controls
- (298.1312,388.0188) and (300.7374,390.6250) .. (300.7374,393.8626) .. controls
- (300.7374,397.1002) and (298.1312,399.7063) .. (294.8936,399.7063) .. controls
- (291.6560,399.7063) and (289.0499,397.1002) .. (289.0499,393.8626) .. controls
- (289.0499,390.6250) and (291.6560,388.0188) .. (294.8936,388.0188) -- cycle;
- \path[color=black,fill=white,nonzero rule,line width=1.253pt]
- (291.5499,370.7063) .. controls (288.4841,370.7722) and (285.4193,371.2673) ..
- (282.4249,372.1438) .. controls (269.6164,375.8932) and (256.6677,387.2311) ..
- (248.7622,400.8596) -- (248.7662,404.0176) .. controls (256.4832,389.5161) and
- (269.8419,377.4553) .. (282.8625,373.6438) .. controls (286.1465,372.6825) and
- (289.4914,372.1880) .. (292.8312,372.2376) .. controls (302.8507,372.3862) and
- (312.9146,377.4187) .. (321.6437,389.3626) -- (321.8312,389.6126) --
- (322.1437,389.6751) .. controls (322.1437,389.6751) and (383.4924,400.0668) ..
- (402.2375,403.2376) .. controls (376.3035,402.3430) and (350.4290,401.2333) ..
- (319.3937,407.2376) -- (318.9250,407.3313) -- (318.8000,407.7688) .. controls
- (313.2958,424.9775) and (301.6553,439.2096) .. (288.9250,452.9875) --
- (288.8000,453.1125) -- (288.7375,453.3313) -- (282.4611,478.5810) --
- (283.9307,478.5810) -- (290.2375,453.8937) .. controls (302.8375,440.2444) and
- (314.4843,426.0036) .. (320.1437,408.7062) .. controls (355.3332,401.9651) and
- (383.8501,404.4090) .. (413.7062,405.1750) -- (413.8312,403.6125) .. controls
- (413.8282,403.6120) and (413.7403,403.6129) .. (413.7375,403.6125) .. controls
- (410.8928,403.1379) and (323.2219,388.2676) .. (322.6750,388.1750) .. controls
- (313.7728,376.1342) and (303.2902,370.9006) .. (292.8625,370.7062) .. controls
- (292.4247,370.6982) and (291.9880,370.6972) .. (291.5500,370.7062) -- cycle;
- \path[fill=maincolor,miter limit=4.00,line width=0.977pt] (370.0353,433.6332) --
- (333.5033,433.6332) -- (333.5033,428.6205) .. controls (334.6678,428.5193) and
- (335.9083,428.4180) .. (337.2248,428.3167) .. controls (338.5413,428.1648) and
- (339.6299,427.9623) .. (340.4907,427.7091) .. controls (341.9084,427.2534) and
- (342.9717,426.4686) .. (343.6806,425.3547) .. controls (344.3895,424.1901) and
- (344.7439,422.6964) .. (344.7439,420.8736) -- (344.7439,334.1385) .. controls
- (344.7439,332.3158) and (344.3388,330.6195) .. (343.5287,329.0498) .. controls
- (342.7692,327.4296) and (341.7565,326.1638) .. (340.4907,325.2523) .. controls
- (339.5793,324.6448) and (337.9084,324.0878) .. (335.4780,323.5814) .. controls
- (333.0476,323.0752) and (331.0982,322.7714) .. (329.6298,322.6700) --
- (329.6298,317.8092) -- (357.8073,316.0623) -- (358.8706,317.2016) --
- (358.8706,419.9622) .. controls (358.8706,421.7344) and (359.1997,423.2028) ..
- (359.8580,424.3673) .. controls (360.5162,425.4813) and (361.5795,426.3420) ..
- (363.0479,426.9496) .. controls (364.1618,427.4560) and (365.2504,427.8357) ..
- (366.3138,428.0889) .. controls (367.4277,428.3420) and (368.6682,428.5193) ..
- (370.0353,428.6205) -- (370.0353,433.6332);
- \path[color=black,fill=white,nonzero rule,line width=0.977pt]
- (357.7812,315.4375) -- (329.5938,317.1875) -- (329.0312,317.2500) --
- (329.0312,317.8125) -- (329.0312,322.6562) -- (329.0312,323.2500) --
- (329.5938,323.2813) .. controls (331.0155,323.3795) and (332.9294,323.6847) ..
- (335.3438,324.1875) .. controls (337.7273,324.6842) and (339.3512,325.2404) ..
- (340.1250,325.7500) .. controls (340.1300,325.7530) and (340.1517,325.7471) ..
- (340.1563,325.7500) .. controls (341.3216,326.5942) and (342.2496,327.7784) ..
- (342.9688,329.3125) -- (343.0001,329.3438) .. controls (343.7660,330.8280) and
- (344.1251,332.3928) .. (344.1251,334.1251) -- (344.1251,420.8751) .. controls
- (344.1251,422.6188) and (343.7916,423.9876) .. (343.1563,425.0313) .. controls
- (342.5262,426.0216) and (341.6206,426.7047) .. (340.3126,427.1251) .. controls
- (339.5087,427.3615) and (338.4639,427.5701) .. (337.1876,427.7188) .. controls
- (337.1753,427.7198) and (337.1687,427.7178) .. (337.1563,427.7188) .. controls
- (335.8502,427.8194) and (334.5947,427.8995) .. (333.4375,428.0001) --
- (332.9063,428.0626) -- (332.9063,428.6251) -- (332.9063,433.6251) --
- (332.9063,434.2501) -- (333.5000,434.2501) -- (370.0313,434.2501) --
- (370.0313,433.6251) -- (370.6563,433.6251) -- (370.6563,428.6251) --
- (370.6563,428.0626) -- (370.0938,428.0001) .. controls (368.7631,427.9015) and
- (367.5404,427.7420) .. (366.4688,427.5001) .. controls (366.4598,427.4981) and
- (366.4466,427.5021) .. (366.4375,427.5001) .. controls (365.4251,427.2570) and
- (364.3851,426.8939) .. (363.3125,426.4063) -- (363.2812,426.3750) .. controls
- (361.9048,425.8055) and (360.9567,425.0472) .. (360.3750,424.0625) .. controls
- (359.7820,423.0135) and (359.4687,421.6654) .. (359.4687,419.9688) --
- (359.4687,317.1875) -- (359.4687,316.9688) -- (359.3125,316.7813) --
- (358.2500,315.6563) -- (358.0625,315.4375) -- (357.7812,315.4375) --
- cycle(357.5625,316.6875) -- (358.2500,317.4062) -- (358.2500,419.9688) ..
- controls (358.2500,421.8165) and (358.5889,423.3762) .. (359.3125,424.6562) --
- (359.3438,424.6875) .. controls (360.0742,425.9238) and (361.2340,426.8546) ..
- (362.7813,427.5000) .. controls (362.7903,427.5041) and (362.8037,427.4960) ..
- (362.8126,427.5000) .. controls (363.9485,428.0145) and (365.0908,428.4264) ..
- (366.1876,428.6875) .. controls (367.1668,428.9101) and (368.2823,429.0175) ..
- (369.4376,429.1250) -- (369.4376,433.0313) -- (334.1251,433.0313) --
- (334.1251,429.1875) .. controls (335.1314,429.1017) and (336.1652,429.0234) ..
- (337.2813,428.9375) .. controls (338.6211,428.7830) and (339.7464,428.5489) ..
- (340.6563,428.2813) -- (340.6876,428.2813) .. controls (342.2151,427.7903) and
- (343.4000,426.9252) .. (344.1876,425.6875) .. controls (344.9701,424.4021) and
- (345.3439,422.7770) .. (345.3439,420.8750) -- (345.3439,334.1250) .. controls
- (345.3439,332.2119) and (344.9169,330.4366) .. (344.0626,328.7813) --
- (344.0939,328.7813) .. controls (343.2978,327.0829) and (342.2020,325.7280) ..
- (340.8439,324.7500) .. controls (339.7893,324.0471) and (338.0571,323.4821) ..
- (335.5939,322.9688) .. controls (333.3923,322.5102) and (331.6955,322.2871) ..
- (330.2502,322.1563) -- (330.2502,318.3750) -- (357.5627,316.6875) -- cycle;
- \path[fill=basecolor,miter limit=4.00,line width=0.977pt] (411.1244,461.3551) ..
- controls (406.3648,461.3550) and (402.0103,460.7474) .. (398.0609,459.5323) ..
- controls (394.1115,458.3677) and (390.7191,456.7727) .. (387.8836,454.7474) ..
- controls (385.0481,452.7220) and (382.8456,450.3929) .. (381.2759,447.7600) ..
- controls (379.7569,445.1270) and (378.9974,442.4181) .. (378.9974,439.6333) ..
- controls (378.9974,437.1523) and (379.6050,434.9244) .. (380.8202,432.9497) ..
- controls (382.0354,430.9244) and (383.9848,429.9117) .. (386.6684,429.9117) ..
- controls (389.7064,429.9117) and (392.0102,430.6712) .. (393.5799,432.1902) ..
- controls (395.2001,433.6586) and (396.0103,435.3548) .. (396.0103,437.2789) ..
- controls (396.0103,438.8991) and (395.7318,440.9498) .. (395.1748,443.4308) ..
- controls (394.6685,445.9118) and (394.2634,447.6840) .. (393.9596,448.7473) ..
- controls (394.3140,449.2030) and (394.9470,449.8106) .. (395.8584,450.5701) ..
- controls (396.8204,451.3296) and (397.9850,452.0132) .. (399.3521,452.6208) ..
- controls (400.9723,453.3803) and (402.6686,453.9879) .. (404.4408,454.4436) ..
- controls (406.2129,454.8993) and (408.7192,455.1271) .. (411.9598,455.1272) ..
- controls (414.9978,455.1271) and (417.9092,454.6208) .. (420.6941,453.6081) ..
- controls (423.5295,452.5955) and (426.0106,450.9752) .. (428.1372,448.7473) ..
- controls (430.3650,446.4182) and (432.0866,443.6840) .. (433.3018,440.5447) ..
- controls (434.5676,437.4561) and (435.2005,433.3801) .. (435.2006,428.3167) ..
- controls (435.2005,425.5825) and (434.8967,422.8736) .. (434.2892,420.1901) ..
- controls (433.7322,417.5065) and (432.6689,415.1774) .. (431.0993,413.2026) ..
- controls (429.5296,411.2280) and (427.3777,409.7090) .. (424.6435,408.6456) ..
- controls (421.9599,407.5317) and (418.5421,406.9747) .. (414.3902,406.9747) --
- (404.4408,406.9747) -- (404.4408,398.2404) -- (411.0484,398.2404) .. controls
- (418.0358,398.2405) and (423.0738,396.3164) .. (426.1625,392.4682) .. controls
- (429.2511,388.6201) and (430.7954,382.8226) .. (430.7955,375.0756) .. controls
- (430.7954,368.7465) and (429.3017,363.9870) .. (426.3144,360.7970) .. controls
- (423.3270,357.5565) and (419.0991,355.9363) .. (413.6307,355.9362) .. controls
- (410.9978,355.9363) and (408.8205,356.2654) .. (407.0990,356.9235) .. controls
- (405.4281,357.5312) and (404.0610,358.1388) .. (402.9977,358.7463) .. controls
- (401.7318,359.4553) and (400.6939,360.2401) .. (399.8838,361.1008) .. controls
- (399.0736,361.9616) and (398.4660,362.5946) .. (398.0609,362.9995) .. controls
- (398.4153,364.6199) and (398.8457,366.6199) .. (399.3521,368.9996) .. controls
- (399.8584,371.3288) and (400.1116,373.5567) .. (400.1116,375.6832) .. controls
- (400.1116,377.5567) and (399.3014,379.2529) .. (397.6812,380.7719) .. controls
- (396.1115,382.2403) and (393.7824,382.9745) .. (390.6938,382.9744) .. controls
- (388.0102,382.9745) and (386.0355,382.0125) .. (384.7697,380.0883) .. controls
- (383.5544,378.1643) and (382.9468,375.9365) .. (382.9469,373.4047) .. controls
- (382.9468,370.7718) and (383.6810,368.0883) .. (385.1494,365.3540) .. controls
- (386.6178,362.6199) and (388.7950,360.0629) .. (391.6811,357.6830) .. controls
- (394.5672,355.3033) and (398.0862,353.3793) .. (402.2382,351.9108) .. controls
- (406.3901,350.4425) and (411.1750,349.7083) .. (416.5928,349.7083) .. controls
- (422.8207,349.7083) and (427.9599,350.6451) .. (432.0107,352.5184) .. controls
- (436.1119,354.3413) and (439.3271,356.5692) .. (441.6564,359.2020) .. controls
- (443.9348,361.7844) and (445.5044,364.4933) .. (446.3653,367.3287) .. controls
- (447.2260,370.1642) and (447.6564,372.5947) .. (447.6564,374.6199) .. controls
- (447.6563,377.1517) and (447.3019,379.7087) .. (446.5931,382.2909) .. controls
- (445.8842,384.8226) and (444.7196,387.1771) .. (443.0994,389.3543) .. controls
- (441.3272,391.7341) and (438.9727,393.9113) .. (436.0360,395.8860) .. controls
- (433.1499,397.8101) and (429.5043,399.3797) .. (425.0992,400.5949) --
- (425.0992,401.8101) .. controls (427.9346,402.0633) and (430.9473,402.6962) ..
- (434.1373,403.7089) .. controls (437.3778,404.7216) and (440.2892,406.2152) ..
- (442.8716,408.1899) .. controls (445.5551,410.2659) and (447.7576,412.9495) ..
- (449.4792,416.2406) .. controls (451.2007,419.4812) and (452.0615,423.6078) ..
- (452.0615,428.6205) .. controls (452.0615,438.3422) and (448.1627,446.2156) ..
- (440.3652,452.2410) .. controls (432.5676,458.3170) and (422.8207,461.3550) ..
- (411.1244,461.3551);
- \path[color=black,fill=white,nonzero rule,line width=0.977pt]
- (416.5938,349.0938) .. controls (411.1208,349.0938) and (406.2619,349.8476) ..
- (402.0312,351.3438) .. controls (397.8235,352.8319) and (394.2307,354.7869) ..
- (391.2812,357.2188) .. controls (388.3458,359.6393) and (386.1373,362.2465) ..
- (384.6250,365.0625) .. controls (383.1180,367.8687) and (382.3437,370.6599) ..
- (382.3438,373.4062) .. controls (382.3437,376.0357) and (382.9702,378.3800) ..
- (384.2500,380.4062) -- (384.2500,380.4375) .. controls (385.6247,382.5272) and
- (387.8580,383.5938) .. (390.6875,383.5938) .. controls (393.8729,383.5938) and
- (396.3782,382.8237) .. (398.0938,381.2188) .. controls (399.8054,379.6142) and
- (400.7187,377.7371) .. (400.7188,375.6875) .. controls (400.7187,373.5126) and
- (400.4520,371.2419) .. (399.9375,368.8750) .. controls (399.4598,366.6301) and
- (399.0615,364.7892) .. (398.7188,363.2188) .. controls (399.1249,362.8074) and
- (399.6263,362.2937) .. (400.3438,361.5313) .. controls (401.1024,360.7253) and
- (402.0588,359.9659) .. (403.2812,359.2813) -- (403.3125,359.2813) .. controls
- (404.3323,358.6986) and (405.6639,358.0996) .. (407.3125,357.5000) .. controls
- (408.9371,356.8790) and (411.0429,356.5314) .. (413.6250,356.5313) .. controls
- (418.9728,356.5314) and (423.0134,358.1148) .. (425.8750,361.2188) .. controls
- (428.7247,364.2617) and (430.1875,368.8295) .. (430.1875,375.0625) .. controls
- (430.1875,382.7284) and (428.6509,388.4017) .. (425.6875,392.0938) .. controls
- (422.7395,395.7667) and (417.9378,397.6251) .. (411.0625,397.6250) --
- (404.4375,397.6250) -- (403.8438,397.6250) -- (403.8438,398.2500) --
- (403.8438,406.9688) -- (403.8438,407.5938) -- (404.4375,407.5938) --
- (414.3750,407.5938) .. controls (418.4724,407.5938) and (421.8256,408.1476) ..
- (424.4063,409.2188) -- (424.4376,409.2188) .. controls (427.0895,410.2502) and
- (429.1296,411.7125) .. (430.6251,413.5938) .. controls (432.1327,415.4906) and
- (433.1477,417.7115) .. (433.6876,420.3125) .. controls (434.2853,422.9526) and
- (434.5938,425.6236) .. (434.5938,428.3125) .. controls (434.5938,433.3250) and
- (433.9715,437.3322) .. (432.7501,440.3125) -- (432.7188,440.3125) .. controls
- (431.5305,443.3821) and (429.8590,446.0423) .. (427.6875,448.3125) .. controls
- (425.6226,450.4758) and (423.2475,452.0501) .. (420.5000,453.0313) .. controls
- (417.7822,454.0196) and (414.9389,454.5313) .. (411.9688,454.5313) .. controls
- (408.7568,454.5313) and (406.2790,454.2771) .. (404.5938,453.8438) .. controls
- (402.8574,453.3973) and (401.2103,452.8056) .. (399.6250,452.0625) --
- (399.5938,452.0625) .. controls (398.2643,451.4717) and (397.1638,450.8152) ..
- (396.2500,450.0938) .. controls (395.4421,449.4205) and (394.9503,448.9158) ..
- (394.6250,448.5313) .. controls (394.9285,447.4218) and (395.3093,445.8751) ..
- (395.7812,443.5625) .. controls (396.3444,441.0538) and (396.6250,438.9715) ..
- (396.6250,437.2813) .. controls (396.6250,435.1859) and (395.7186,433.3075) ..
- (394.0000,431.7500) .. controls (392.2889,430.0942) and (389.7960,429.3125) ..
- (386.6562,429.3125) .. controls (383.8191,429.3125) and (381.5985,430.4297) ..
- (380.2812,432.6250) -- (380.3125,432.6250) .. controls (379.0375,434.6970) and
- (378.3750,437.0443) .. (378.3750,439.6250) .. controls (378.3750,442.5209) and
- (379.1845,445.3489) .. (380.7500,448.0625) .. controls (382.3672,450.7752) and
- (384.6374,453.1829) .. (387.5313,455.2500) .. controls (390.4308,457.3211) and
- (393.8715,458.9445) .. (397.8750,460.1250) .. controls (401.8903,461.3605) and
- (406.3135,461.9688) .. (411.1250,461.9688) .. controls (422.9271,461.9688) and
- (432.8357,458.8858) .. (440.7500,452.7188) .. controls (448.6732,446.5963) and
- (452.6875,438.5099) .. (452.6875,428.6250) .. controls (452.6875,423.5424) and
- (451.8139,419.3245) .. (450.0313,415.9688) .. controls (448.2737,412.6089) and
- (446.0071,409.8517) .. (443.2500,407.7188) .. controls (440.6098,405.6999) and
- (437.6168,404.1577) .. (434.3125,403.1250) .. controls (431.2903,402.1656) and
- (428.4437,401.5684) .. (425.7188,401.2813) -- (425.7188,401.0313) .. controls
- (429.9462,399.8234) and (433.5316,398.3019) .. (436.3750,396.4063) .. controls
- (439.3588,394.4000) and (441.7734,392.1633) .. (443.5938,389.7188) .. controls
- (445.2562,387.4849) and (446.4583,385.0731) .. (447.1875,382.4688) --
- (447.1875,382.4375) .. controls (447.9098,379.8061) and (448.2812,377.2137) ..
- (448.2813,374.6250) .. controls (448.2812,372.5132) and (447.8100,370.0304) ..
- (446.9375,367.1562) .. controls (446.0482,364.2269) and (444.4516,361.4494) ..
- (442.1250,358.8125) .. controls (439.7295,356.1046) and (436.4304,353.8164) ..
- (432.2813,351.9688) .. controls (432.2733,351.9647) and (432.2585,351.9728) ..
- (432.2500,351.9688) .. controls (428.0952,350.0532) and (422.8701,349.0938) ..
- (416.5938,349.0938) -- cycle(416.5938,350.3125) .. controls
- (422.7604,350.3126) and (427.8075,351.2392) .. (431.7500,353.0625) .. controls
- (435.7908,354.8585) and (438.9298,357.0417) .. (441.1875,359.5938) .. controls
- (443.4178,362.1216) and (444.9489,364.7586) .. (445.7812,367.5000) .. controls
- (446.6302,370.2969) and (447.0312,372.6862) .. (447.0312,374.6250) .. controls
- (447.0312,377.0998) and (446.6953,379.5919) .. (446.0000,382.1250) .. controls
- (445.3114,384.5842) and (444.2030,386.8795) .. (442.6250,389.0000) .. controls
- (440.9009,391.3151) and (438.5771,393.4320) .. (435.6875,395.3750) .. controls
- (432.8713,397.2525) and (429.2959,398.7977) .. (424.9375,400.0000) --
- (424.5000,400.1250) -- (424.5000,400.5938) -- (424.5000,401.8125) --
- (424.5000,402.3750) -- (425.0312,402.4063) .. controls (427.8151,402.6549) and
- (430.7833,403.2800) .. (433.9375,404.2813) -- (433.9688,404.2813) .. controls
- (437.1455,405.2741) and (439.9756,406.7571) .. (442.5000,408.6875) .. controls
- (445.1100,410.7067) and (447.2519,413.3089) .. (448.9375,416.5313) .. controls
- (450.5978,419.6567) and (451.4375,423.6822) .. (451.4375,428.6250) .. controls
- (451.4375,438.1834) and (447.6718,445.8218) .. (440.0000,451.7500) .. controls
- (432.3192,457.7351) and (422.7156,460.7500) .. (411.1250,460.7500) .. controls
- (406.4174,460.7500) and (402.1335,460.1325) .. (398.2500,458.9375) --
- (398.2188,458.9375) .. controls (394.3234,457.7889) and (391.0214,456.2296) ..
- (388.2500,454.2500) .. controls (385.4806,452.2719) and (383.3338,450.0134) ..
- (381.8125,447.4688) .. controls (381.8075,447.4598) and (381.8175,447.4462) ..
- (381.8125,447.4375) .. controls (380.3501,444.8937) and (379.5938,442.2897) ..
- (379.5938,439.6250) .. controls (379.5938,437.2436) and (380.1884,435.1587) ..
- (381.3438,433.2812) -- (381.3438,433.2500) .. controls (382.4569,431.3946) and
- (384.1263,430.5312) .. (386.6562,430.5312) .. controls (389.5925,430.5312) and
- (391.7280,431.2428) .. (393.1562,432.6250) -- (393.1562,432.6562) .. controls
- (394.6782,434.0355) and (395.4062,435.5285) .. (395.4062,437.2812) .. controls
- (395.4062,438.8316) and (395.1445,440.8592) .. (394.5938,443.3125) --
- (394.5625,443.3125) .. controls (394.0575,445.7868) and (393.6689,447.5649) ..
- (393.3750,448.5938) -- (393.2812,448.8750) -- (393.4688,449.1250) .. controls
- (393.8779,449.6511) and (394.5411,450.2582) .. (395.4688,451.0312) --
- (395.4688,451.0625) .. controls (396.4790,451.8601) and (397.6889,452.5632) ..
- (399.0938,453.1875) .. controls (400.7490,453.9634) and (402.4733,454.5664) ..
- (404.2812,455.0313) .. controls (406.1403,455.5093) and (408.6995,455.7500) ..
- (411.9688,455.7500) .. controls (415.0746,455.7500) and (418.0544,455.2246) ..
- (420.9062,454.1875) .. controls (423.8297,453.1434) and (426.4054,451.4488) ..
- (428.5938,449.1563) .. controls (430.8716,446.7748) and (432.6333,443.9792) ..
- (433.8750,440.7813) .. controls (433.8780,440.7723) and (433.8720,440.7589) ..
- (433.8750,440.7500) .. controls (435.1781,437.5565) and (435.8124,433.4132) ..
- (435.8125,428.3125) .. controls (435.8124,425.5331) and (435.4924,422.7896) ..
- (434.8750,420.0625) .. controls (434.3008,417.2964) and (433.1940,414.8651) ..
- (431.5625,412.8125) .. controls (429.9186,410.7444) and (427.6914,409.1578) ..
- (424.8750,408.0625) -- (424.8750,408.0938) .. controls (422.0884,406.9371) and
- (418.5815,406.3751) .. (414.3750,406.3750) -- (405.0625,406.3750) --
- (405.0625,398.8438) -- (411.0625,398.8438) .. controls (418.1619,398.8438) and
- (423.3956,396.8673) .. (426.6250,392.8438) .. controls (429.8388,388.8397) and
- (431.4062,382.8907) .. (431.4062,375.0625) .. controls (431.4062,368.6374) and
- (429.8750,363.7121) .. (426.7500,360.3750) .. controls (423.6367,356.9981) and
- (419.2140,355.3126) .. (413.6250,355.3125) .. controls (410.9412,355.3126) and
- (408.6935,355.6486) .. (406.8750,356.3438) .. controls (405.1817,356.9596) and
- (403.7942,357.5864) .. (402.6875,358.2188) .. controls (401.3782,358.9521) and
- (400.2991,359.7722) .. (399.4375,360.6875) .. controls (398.6294,361.5462) and
- (398.0210,362.1666) .. (397.6250,362.5625) -- (397.4062,362.8125) --
- (397.4688,363.1250) .. controls (397.8228,364.7437) and (398.2438,366.7461) ..
- (398.7500,369.1250) .. controls (399.2481,371.4166) and (399.5000,373.6095) ..
- (399.5000,375.6875) .. controls (399.5000,377.3850) and (398.7789,378.8793) ..
- (397.2500,380.3125) .. controls (395.8262,381.6445) and (393.6794,382.3751) ..
- (390.6875,382.3750) .. controls (388.1498,382.3751) and (386.4382,381.5087) ..
- (385.2812,379.7500) .. controls (384.1306,377.9283) and (383.5625,375.8403) ..
- (383.5625,373.4063) .. controls (383.5625,370.8869) and (384.2578,368.3186) ..
- (385.6875,365.6563) .. controls (387.1119,363.0040) and (389.2257,360.4955) ..
- (392.0625,358.1563) .. controls (394.8853,355.8288) and (398.3413,353.9488) ..
- (402.4375,352.5000) .. controls (406.5107,351.0596) and (411.2311,350.3126) ..
- (416.5938,350.3125) -- cycle;
-\end{tikzpicture}
-}
-
-
-
-\newcommand \explogo{%
-\begin{tikzpicture}[y=0.45pt,x=0.45pt,yscale=-1, inner sep=0pt, outer sep=0pt]
- \path[fill=black] (188.1546,427.4287) .. controls (190.5345,431.7164) and
- (193.0099,435.4077) .. (195.5921,438.5850) -- (195.6233,438.6163) .. controls
- (195.6323,438.6274) and (195.6455,438.6365) .. (195.6545,438.6476) .. controls
- (194.4650,438.4740) and (193.2397,438.3529) .. (191.9670,438.3663) .. controls
- (189.4530,438.3928) and (186.7534,438.8247) .. (183.8420,439.7413) .. controls
- (188.8419,443.9283) and (193.0993,446.9893) .. (196.8420,449.3663) .. controls
- (196.7505,449.3362) and (196.6520,449.3022) .. (196.5607,449.2726) --
- (196.8420,449.4289) .. controls (191.0442,447.6143) and (184.7895,447.3923) ..
- (177.4670,450.8664) .. controls (182.7247,454.1565) and (187.1369,456.5570) ..
- (191.0295,458.3664) .. controls (190.9155,458.3495) and (190.7995,458.3198) ..
- (190.6857,458.3039) -- (190.9670,458.4601) .. controls (184.8999,457.4153) and
- (178.6035,458.0026) .. (171.7482,462.5226) .. controls (176.2179,464.5144) and
- (180.1011,466.0179) .. (183.5607,467.1789) -- (183.5919,467.1789) --
- (183.8107,467.3039) .. controls (178.0253,467.5288) and (172.2917,469.3302) ..
- (166.6857,474.6476) .. controls (171.5829,475.8624) and (175.7757,476.6736) ..
- (179.4669,477.2101) .. controls (179.3633,477.2310) and (179.2580,477.2503) ..
- (179.1544,477.2726) .. controls (179.0103,477.2696) and (178.8604,477.2746) ..
- (178.7169,477.2726) -- (178.8732,477.3351) .. controls (174.5605,478.3144) and
- (170.3552,480.4767) .. (166.2482,484.6164) .. controls (169.5756,485.3353) and
- (172.5696,485.8937) .. (175.3107,486.3039) .. controls (171.9361,487.9351) and
- (168.7309,490.4629) .. (165.8107,494.3351) .. controls (169.6449,494.6328) and
- (173.0419,494.7600) .. (176.0919,494.7726) .. controls (172.4017,496.4801) and
- (168.9244,499.1610) .. (165.8419,503.4914) .. controls (171.3184,503.7651) and
- (175.8960,503.7533) .. (179.8419,503.5226) .. controls (179.7681,503.5528) and
- (179.6968,503.5855) .. (179.6232,503.6163) .. controls (179.3834,503.6377) and
- (179.1427,503.6531) .. (178.9044,503.6788) -- (179.2482,503.8038) .. controls
- (175.1462,505.6048) and (171.3495,508.5232) .. (168.0919,513.4600) .. controls
- (174.8980,513.5594) and (180.2892,513.2381) .. (184.8107,512.6788) .. controls
- (184.6730,512.7162) and (184.5417,512.7645) .. (184.4044,512.8038) .. controls
- (184.2299,512.8144) and (184.0455,512.8223) .. (183.8732,512.8350) --
- (184.0919,512.8975) .. controls (178.7598,514.4860) and (173.8363,517.5457) ..
- (169.7482,523.7412) .. controls (175.2461,523.8214) and (179.8367,523.6133) ..
- (183.7794,523.2412) .. controls (183.6938,523.2879) and (183.6146,523.3500) ..
- (183.5294,523.3975) .. controls (178.8190,526.0253) and (174.7697,529.9721) ..
- (172.0919,536.6475) .. controls (176.9272,535.7317) and (180.9801,534.7653) ..
- (184.4982,533.7412) .. controls (184.4398,533.7875) and (184.3686,533.8191) ..
- (184.3107,533.8662) -- (184.5294,533.8350) .. controls (180.9081,536.5374) and
- (177.8636,540.3240) .. (175.8107,545.9288) .. controls (179.1397,545.1929) and
- (182.1140,544.4194) .. (184.7794,543.6475) .. controls (182.3867,546.5404) and
- (180.5386,550.1515) .. (179.4982,554.8975) .. controls (183.1131,553.5663) and
- (186.2487,552.2854) .. (189.0294,551.0225) .. controls (188.9958,551.0619) and
- (188.9691,551.1079) .. (188.9357,551.1475) .. controls (188.8789,551.1923) and
- (188.8034,551.2277) .. (188.7482,551.2725) -- (188.8419,551.2413) .. controls
- (186.2910,554.2981) and (184.3447,558.1421) .. (183.3732,563.2413) .. controls
- (188.4628,561.2062) and (192.6027,559.2529) .. (196.0919,557.3976) .. controls
- (195.9933,557.4930) and (195.8722,557.5825) .. (195.7794,557.6788) --
- (195.8731,557.6476) .. controls (192.7873,561.0321) and (190.4833,565.3800) ..
- (189.5606,571.3664) .. controls (195.5682,568.7142) and (200.1972,566.2494) ..
- (203.9981,563.9289) .. controls (203.9580,563.9700) and (203.9127,564.0127) ..
- (203.8731,564.0539) -- (204.1231,563.9289) .. controls (199.8075,567.6248) and
- (196.4969,572.5288) .. (195.3419,580.0226) .. controls (203.4387,576.4482) and
- (209.1016,573.2112) .. (213.4981,570.2101) .. controls (211.6101,574.0286) and
- (210.6125,578.4777) .. (211.0919,584.0539) .. controls (218.9172,578.0502) and
- (223.8713,573.2098) .. (227.5606,568.9289) .. controls (227.5546,568.9906) and
- (227.5656,569.0545) .. (227.5606,569.1164) .. controls (227.3369,571.8296) and
- (227.5060,574.7714) .. (228.3106,578.0226) .. controls (232.9500,570.0520) and
- (237.5899,566.7480) .. (242.3106,564.0226) .. controls (236.4069,567.8493) and
- (237.4669,570.9503) .. (237.4669,574.4914) .. controls (244.4870,567.0983) and
- (254.2537,559.2459) .. (257.2481,554.3351) .. controls (253.2445,560.3478) and
- (251.6457,566.0579) .. (250.5919,571.0851) .. controls (230.1065,581.9187) and
- (217.6060,584.7541) .. (203.6231,589.0851) .. controls (209.0471,591.0745) and
- (214.8691,593.0070) .. (212.4669,595.7726) -- (206.0606,602.1789) .. controls
- (210.1567,600.9056) and (214.3405,599.0697) .. (217.9669,601.5539) .. controls
- (217.6110,604.9137) and (213.3733,606.6264) .. (209.7481,608.5851) .. controls
- (216.1304,606.2854) and (217.5075,606.8270) .. (219.1856,607.3664) .. controls
- (220.0240,611.3923) and (217.1123,613.5511) .. (215.2169,616.2101) .. controls
- (231.2927,603.9867) and (252.2574,594.3357) .. (267.0294,590.3039) .. controls
- (287.8076,583.3065) and (314.6175,576.0122) .. (321.9044,558.2726) --
- (329.1856,529.0226) .. controls (337.7280,519.7775) and (345.5838,510.2065) ..
- (349.3108,498.5539) .. controls (373.0973,493.9520) and (392.3393,495.6016) ..
- (412.4046,496.1164) .. controls (410.5758,495.8116) and (351.1546,485.7414) ..
- (351.1546,485.7414) .. controls (333.7856,461.9756) and (307.8721,478.1391) ..
- (299.3421,501.6164) .. controls (297.1891,507.5420) and (284.9022,507.5289) ..
- (281.3421,501.5852) .. controls (267.2670,471.2820) and (224.5286,439.2367) ..
- (188.1546,427.4289) -- cycle;
- \path[fill=basecolor] (187.7346,425.7215) .. controls (190.1312,430.0392) and
- (192.6231,433.7232) .. (195.2248,436.9158) .. controls (194.0353,436.7423) and
- (192.8098,436.6402) .. (191.5371,436.6536) .. controls (189.0231,436.6801) and
- (186.3356,437.0974) .. (183.4241,438.0140) .. controls (188.5047,442.2685) and
- (192.7982,445.3733) .. (196.5852,447.7660) .. controls (190.7343,445.8972) and
- (184.4338,445.6311) .. (177.0321,449.1427) .. controls (182.4382,452.5257) and
- (186.9760,454.9705) .. (190.9471,456.7968) .. controls (184.7555,455.6556) and
- (178.3356,456.1756) .. (171.3284,460.7959) .. controls (175.9548,462.8576) and
- (179.9558,464.4054) .. (183.5061,465.5818) .. controls (177.6784,465.7855) and
- (171.9101,467.5854) .. (166.2639,472.9408) .. controls (171.1611,474.1557) and
- (175.3568,474.9612) .. (179.0480,475.4977) .. controls (174.5307,476.4104) and
- (170.0996,478.5772) .. (165.8050,482.9059) .. controls (169.1324,483.6248) and
- (172.1275,484.1674) .. (174.8686,484.5777) .. controls (171.4940,486.2088) and
- (168.2990,488.7365) .. (165.3788,492.6087) .. controls (169.2130,492.9064) and
- (172.6053,493.0386) .. (175.6553,493.0512) .. controls (171.9650,494.7587) and
- (168.5104,497.4567) .. (165.4280,501.7871) .. controls (170.9044,502.0608) and
- (175.4790,502.0342) .. (179.4250,501.8034) .. controls (175.0884,503.5763) and
- (171.0915,506.5720) .. (167.6734,511.7521) .. controls (174.4795,511.8515) and
- (179.8697,511.5247) .. (184.3911,510.9654) .. controls (178.7800,512.4888) and
- (173.5859,515.5521) .. (169.3124,522.0286) .. controls (174.8103,522.1088) and
- (179.3994,521.9089) .. (183.3421,521.5369) .. controls (178.5221,524.1635) and
- (174.3823,528.1477) .. (171.6562,534.9438) .. controls (176.6186,534.0040) and
- (180.7774,532.9979) .. (184.3583,531.9445) .. controls (180.6281,534.6591) and
- (177.4926,538.4719) .. (175.3930,544.2041) .. controls (178.7220,543.4682) and
- (181.6765,542.6978) .. (184.3419,541.9259) .. controls (181.9491,544.8188) and
- (180.1048,548.4397) .. (179.0644,553.1858) .. controls (182.6793,551.8545) and
- (185.8062,550.5643) .. (188.5869,549.3014) .. controls (185.9451,552.3928) and
- (183.9273,556.3063) .. (182.9324,561.5282) .. controls (188.0220,559.4931) and
- (192.1617,557.5487) .. (195.6510,555.6934) .. controls (192.4524,559.1128) and
- (190.0726,563.5113) .. (189.1278,569.6412) .. controls (195.3243,566.9057) and
- (200.0785,564.3715) .. (203.9442,561.9871) .. controls (199.5047,565.7077) and
- (196.0910,570.6550) .. (194.9134,578.2951) .. controls (203.0102,574.7206) and
- (208.6604,571.4786) .. (213.0570,568.4775) .. controls (211.1690,572.2961) and
- (210.1683,576.7672) .. (210.6477,582.3434) .. controls (218.4730,576.3397) and
- (223.4302,571.4800) .. (227.1195,567.1991) .. controls (226.8707,569.9634) and
- (227.0669,572.9701) .. (227.8899,576.2955) .. controls (233.5078,566.6437) and
- (239.0905,563.8256) .. (244.8678,560.6045) .. controls (235.6654,565.2375) and
- (237.0296,568.7253) .. (237.0296,572.7723) .. controls (244.0497,565.3793) and
- (253.8400,557.5393) .. (256.8344,552.6285) .. controls (252.8308,558.6412) and
- (251.2011,564.3353) .. (250.1474,569.3626) .. controls (229.6620,580.1962) and
- (217.1896,583.0276) .. (203.2067,587.3587) .. controls (208.6306,589.3481) and
- (214.4431,591.2965) .. (212.0409,594.0622) -- (205.6324,600.4542) .. controls
- (209.7285,599.1810) and (213.9051,597.3636) .. (217.5315,599.8478) .. controls
- (217.1756,603.2077) and (212.9289,604.9040) .. (209.3037,606.8627) .. controls
- (215.6860,604.5630) and (217.0662,605.0941) .. (218.7443,605.6335) .. controls
- (219.5827,609.6594) and (216.6733,611.8250) .. (214.7780,614.4840) .. controls
- (230.8537,602.2606) and (251.8308,592.6034) .. (266.6028,588.5716) .. controls
- (287.3810,581.5741) and (314.1729,574.3016) .. (321.4598,556.5621) --
- (328.7697,527.3061) .. controls (337.3119,518.0610) and (345.1694,508.4736) ..
- (348.8965,496.8210) .. controls (372.6829,492.2191) and (391.9159,493.8805) ..
- (411.9812,494.3952) .. controls (410.1524,494.0905) and (350.7157,484.0204) ..
- (350.7157,484.0204) .. controls (333.3467,460.2547) and (307.4537,476.4086) ..
- (298.9237,499.8859) .. controls (296.7707,505.8115) and (284.4877,505.8133) ..
- (280.9276,499.8695) .. controls (266.8525,469.5663) and (224.1086,437.5293) ..
- (187.7346,425.7216) -- cycle;
- \path[color=black,fill=white,nonzero rule,line width=0.839pt]
- (328.0690,487.7425) -- (327.9127,487.9925) .. controls (327.2963,489.1409) and
- (326.2537,489.9248) .. (324.7877,490.3988) .. controls (323.3218,490.8728) and
- (321.4437,491.0247) .. (319.2565,490.9300) -- (317.8815,490.8675) --
- (318.8815,491.8363) .. controls (319.3892,492.3246) and (319.5310,492.7144) ..
- (319.5377,493.0550) .. controls (319.5447,493.3957) and (319.3983,493.7636) ..
- (319.0690,494.1800) .. controls (318.4103,495.0130) and (317.1020,495.9174) ..
- (315.8815,496.8363) -- (315.4752,497.1175) -- (315.7565,497.5238) .. controls
- (316.7747,499.0858) and (317.2409,500.2883) .. (317.3502,501.2113) .. controls
- (317.4595,502.1343) and (317.2450,502.7963) .. (316.8190,503.3675) .. controls
- (315.9669,504.5101) and (314.0965,505.2843) .. (312.4127,506.2425) --
- (312.1002,506.3988) -- (312.1627,506.7738) .. controls (312.3075,507.6524) and
- (312.0708,508.3704) .. (311.4440,509.0863) .. controls (310.8171,509.8021) and
- (309.7619,510.4847) .. (308.3502,511.0863) -- (307.9752,511.2425) --
- (308.0377,511.6488) .. controls (308.3193,513.5300) and (308.8848,515.1671) ..
- (310.0690,516.2113) .. controls (311.1523,517.1665) and (312.7911,517.4184) ..
- (314.8815,516.9925) .. controls (315.2459,518.9979) and (315.7682,520.8217) ..
- (316.9752,522.0238) .. controls (318.1986,523.2421) and (320.1355,523.6024) ..
- (322.7252,522.9300) .. controls (323.3080,524.3346) and (324.1596,525.3355) ..
- (325.1315,525.9925) .. controls (326.1986,526.7139) and (327.5930,527.0049) ..
- (328.7401,527.3612) -- (329.4197,526.6303) .. controls (328.2812,526.2767) and
- (326.6004,525.7302) .. (325.6940,525.1175) .. controls (324.7876,524.5048) and
- (324.0512,523.6643) .. (323.5377,522.2113) -- (323.3815,521.7113) --
- (322.8815,521.8675) .. controls (320.2185,522.6859) and (318.7418,522.3174) ..
- (317.7252,521.3050) .. controls (316.7087,520.2927) and (316.1370,518.4626) ..
- (315.7877,516.3363) -- (315.6940,515.7738) -- (315.1315,515.9300) .. controls
- (312.9366,516.5027) and (311.6408,516.2098) .. (310.7565,515.4300) .. controls
- (309.9304,514.7016) and (309.4415,513.4103) .. (309.1628,511.8050) .. controls
- (310.4344,511.2171) and (311.5245,510.5741) .. (312.2253,509.7738) .. controls
- (312.9099,508.9919) and (313.2063,508.0267) .. (313.1628,507.0238) .. controls
- (314.7142,506.1705) and (316.5854,505.4372) .. (317.6628,503.9925) .. controls
- (318.2261,503.2372) and (318.5187,502.2444) .. (318.3815,501.0863) .. controls
- (318.2568,500.0326) and (317.7408,498.8152) .. (316.8503,497.3675) .. controls
- (317.9434,496.5623) and (319.1300,495.7554) .. (319.8815,494.8050) .. controls
- (320.2994,494.2767) and (320.6136,493.6919) .. (320.6003,493.0238) .. controls
- (320.5933,492.6554) and (320.2387,492.3198) .. (320.0378,491.9613) .. controls
- (321.9389,491.9861) and (323.6709,491.8609) .. (325.1003,491.3988) .. controls
- (326.6062,490.9119) and (327.7892,490.0245) .. (328.5690,488.8050) .. controls
- (330.8191,488.8168) and (333.1492,489.3112) .. (335.5065,489.6175) .. controls
- (337.9280,489.9322) and (340.3922,490.0166) .. (342.7253,488.9925) --
- (342.2878,488.0238) .. controls (340.2235,488.9299) and (338.0183,488.8923) ..
- (335.6628,488.5863) .. controls (333.3073,488.2802) and (330.8524,487.7246) ..
- (328.3815,487.7425) -- cycle;
- \path[draw=white,fill=white,miter limit=4.00,line width=0.839pt]
- (336.8186,487.3469) .. controls (336.8186,489.7993) and (334.8306,491.7873) ..
- (332.3782,491.7873) .. controls (329.9259,491.7873) and (327.9379,489.7993) ..
- (327.9379,487.3469) .. controls (327.9379,484.8946) and (329.9259,482.9065) ..
- (332.3782,482.9065) .. controls (334.8306,482.9065) and (336.8186,484.8945) ..
- (336.8186,487.3469) -- cycle;
- \path[color=black,fill=white,nonzero rule,line width=0.839pt]
- (350.0784,483.1829) .. controls (346.0920,488.3688) and (345.0896,487.0295) ..
- (342.6627,487.8988) -- (342.2565,488.0550) -- (342.3190,488.4925) .. controls
- (343.2534,493.7013) and (346.3404,495.3564) .. (348.7497,497.2498) --
- (348.8842,496.8285) -- (349.5255,496.7063) .. controls (347.1103,494.8083) and
- (344.4675,493.2007) .. (343.5065,488.7738) .. controls (345.2738,488.3557) and
- (346.9603,488.8903) .. (350.7252,483.9925) -- cycle;
- \path[color=black,fill=white,nonzero rule,line width=0.839pt]
- (196.5832,447.7548) .. controls (204.1159,452.4256) and (216.5138,457.2421) ..
- (224.4752,462.2738) .. controls (228.8554,465.0628) and (232.7896,467.8418) ..
- (235.8502,470.2425) .. controls (238.9108,472.6433) and (241.1740,475.1236) ..
- (242.0065,475.9300) .. controls (242.8390,476.7364) and (243.4041,476.3554) ..
- (242.8502,475.3050) .. controls (242.2964,474.2547) and (239.5701,471.8264) ..
- (236.4752,469.3988) .. controls (233.3804,466.9712) and (229.4438,464.2043) ..
- (225.0377,461.3988) .. controls (216.2255,455.7878) and (205.8833,450.7708) ..
- (196.5832,447.7548) -- cycle;
- \path[color=black,fill=white,nonzero rule,line width=0.839pt]
- (195.2242,436.9074) .. controls (198.3819,437.6366) and (203.0426,440.3298) ..
- (208.2252,443.2113) .. controls (213.4079,446.0928) and (219.0564,449.6386) ..
- (224.2252,453.0863) .. controls (229.3940,456.5340) and (233.3791,459.5515) ..
- (236.5649,461.9823) .. controls (239.5902,464.5711) and (241.0838,466.2475) ..
- (241.6627,466.2425) .. controls (241.7421,466.2585) and (241.8203,466.2597) ..
- (241.9440,466.2425) .. controls (242.0677,466.2253) and (242.2764,466.1299) ..
- (242.3815,465.9300) .. controls (242.4865,465.7302) and (242.4459,465.5623) ..
- (242.4128,465.4613) .. controls (242.3796,465.3603) and (242.3618,465.3067) ..
- (242.3191,465.2425) .. controls (242.1482,464.9858) and (241.8873,464.7454) ..
- (241.5066,464.3988) .. controls (240.7451,463.7056) and (239.4870,462.6862) ..
- (237.8816,461.4613) .. controls (234.6708,459.0114) and (230.0051,455.6705) ..
- (224.8191,452.2113) .. controls (219.6331,448.7521) and (213.9447,445.1757) ..
- (208.7253,442.2738) .. controls (206.8700,441.5863) and (197.7714,436.7746) ..
- (195.2243,436.9074) -- cycle;
- \path[color=black,fill=white,nonzero rule,line width=0.839pt]
- (190.9046,456.7968) .. controls (200.5728,460.7431) and (214.3261,465.3785) ..
- (223.5065,471.1488) .. controls (228.4392,474.2811) and (232.7356,477.4014) ..
- (235.9440,479.9613) .. controls (237.5482,481.2412) and (238.8881,482.3917) ..
- (239.8815,483.3050) .. controls (240.8749,484.2184) and (241.4352,485.0475) ..
- (241.7565,485.2738) .. controls (242.4289,485.7475) and (242.9436,485.4328) ..
- (242.6315,484.6800) .. controls (242.3958,484.1116) and (241.6181,483.4596) ..
- (240.6002,482.5238) .. controls (239.5823,481.5880) and (238.2198,480.4410) ..
- (236.6002,479.1488) .. controls (233.3611,476.5644) and (229.0363,473.3968) ..
- (224.0690,470.2425) .. controls (214.1344,463.9341) and (202.2573,458.3877) ..
- (190.9046,456.7968) -- cycle;
- \path[color=black,fill=white,nonzero rule,line width=0.839pt]
- (183.4711,465.5716) .. controls (191.0060,465.5766) and (206.5713,472.4735) ..
- (213.1315,475.9300) .. controls (223.7689,481.6031) and (233.4415,488.8954) ..
- (238.7877,493.9925) .. controls (239.3805,494.5577) and (240.2465,494.0588) ..
- (239.5690,493.2738) .. controls (234.6033,487.5198) and (224.3477,480.7388) ..
- (213.6315,475.0238) .. controls (202.9153,469.3087) and (191.8189,465.5632) ..
- (183.4711,465.5716) -- cycle;
- \path[color=black,fill=white,nonzero rule,line width=0.839pt]
- (179.1133,475.4956) .. controls (190.4411,477.1531) and (204.0196,481.7255) ..
- (213.9127,486.6800) .. controls (219.4336,489.4832) and (224.3566,492.4856) ..
- (228.1315,495.1488) .. controls (231.9064,497.8120) and (234.6937,500.8104) ..
- (235.3815,501.5863) .. controls (236.0693,502.3622) and (236.8886,502.3945) ..
- (236.2565,501.0238) .. controls (235.6244,499.6531) and (232.5499,496.9721) ..
- (228.7252,494.2738) .. controls (224.9006,491.5755) and (219.9456,488.5676) ..
- (214.3815,485.7425) .. controls (203.2533,480.0924) and (190.5800,475.6473) ..
- (179.1133,475.4956) -- cycle;
- \path[color=black,fill=white,nonzero rule,line width=0.839pt]
- (182.8502,483.9300) .. controls (180.0362,483.6845) and (177.5032,484.2615) ..
- (174.9224,484.5841) .. controls (184.9876,483.6409) and (199.0622,488.2631) ..
- (208.4440,492.5863) .. controls (219.4960,497.7676) and (228.6734,504.8810) ..
- (233.0690,509.3988) .. controls (233.7572,510.1061) and (234.2435,509.2048) ..
- (233.8815,508.7425) .. controls (229.7881,503.5164) and (220.0397,496.8487) ..
- (208.8815,491.6175) .. controls (200.5128,487.6942) and (191.2924,484.6668) ..
- (182.8502,483.9300) -- cycle;
- \path[color=black,fill=white,nonzero rule,line width=0.839pt]
- (175.7074,492.9973) .. controls (185.6124,493.7315) and (198.8738,496.1032) ..
- (208.1627,500.3675) .. controls (217.5053,504.7372) and (224.5953,510.4032) ..
- (228.1627,513.6175) .. controls (228.7116,514.1121) and (229.6823,513.7617) ..
- (228.9127,512.8675) .. controls (225.6572,509.0849) and (218.0877,503.8529) ..
- (208.6315,499.4300) .. controls (199.1753,495.0072) and (187.6892,492.1744) ..
- (175.7074,492.9973) -- cycle;
- \path[color=black,fill=white,nonzero rule,line width=0.839pt]
- (184.6002,501.2425) .. controls (182.5105,501.1718) and (181.5301,501.5628) ..
- (179.5141,501.7805) .. controls (186.2367,502.0768) and (196.9195,503.8647) ..
- (202.8190,505.8675) .. controls (210.4747,508.5236) and (216.7699,512.5245) ..
- (220.3502,515.6488) .. controls (221.0416,516.2521) and (221.5570,515.4427) ..
- (221.1002,514.9300) .. controls (217.7467,511.1667) and (210.9312,507.5627) ..
- (203.1627,504.8675) .. controls (197.3364,502.8461) and (190.8693,501.4545) ..
- (184.6002,501.2425) -- cycle;
- \path[color=black,fill=white,nonzero rule,line width=0.839pt]
- (184.3157,510.9926) .. controls (198.6871,511.9623) and (207.3770,514.4944) ..
- (214.0377,520.4613) .. controls (214.5368,520.9084) and (215.3247,520.2930) ..
- (214.7877,519.7113) .. controls (207.9520,512.3054) and (194.4933,510.2417) ..
- (184.3157,510.9926) -- cycle;
- \path[color=black,fill=white,nonzero rule,line width=0.839pt]
- (195.3815,519.6175) .. controls (191.0251,519.2671) and (187.3797,520.2191) ..
- (183.4094,521.5412) .. controls (195.0282,519.6893) and (199.8590,520.5773) ..
- (208.6627,524.7113) .. controls (209.6662,525.1825) and (209.6073,524.0723) ..
- (209.1627,523.8050) .. controls (204.4864,520.9942) and (199.7378,519.9679) ..
- (195.3815,519.6175) -- cycle;
- \path[color=black,fill=white,nonzero rule,line width=0.839pt]
- (194.9584,527.7065) .. controls (190.8394,528.0717) and (187.3420,529.4861) ..
- (184.4584,531.8315) .. controls (195.9645,527.3967) and (199.1447,528.2791) ..
- (207.9440,530.7738) .. controls (209.1013,531.1019) and (208.7417,529.9871) ..
- (208.2877,529.8050) .. controls (203.0183,527.6924) and (199.0774,527.3413) ..
- (194.9584,527.7065) -- cycle;
- \path[color=black,fill=white,nonzero rule,line width=0.839pt]
- (217.7565,534.8363) .. controls (211.6177,534.1725) and (204.7011,534.9170) ..
- (198.6315,536.0238) .. controls (192.5618,537.1306) and (187.3415,539.3794) ..
- (184.3947,541.7762) .. controls (194.4866,537.5140) and (196.3258,537.5231) ..
- (198.8190,537.0550) .. controls (204.7989,535.9646) and (210.7264,535.5394) ..
- (217.6940,535.8675) .. controls (218.3258,535.8973) and (218.2935,534.8944) ..
- (217.7565,534.8363) -- cycle;
- \path[color=black,fill=white,nonzero rule,line width=0.839pt]
- (221.3190,539.8050) .. controls (214.6662,539.5537) and (207.7944,541.2000) ..
- (201.8502,542.8988) .. controls (195.9061,544.5976) and (191.4940,546.9158) ..
- (188.5846,549.2822) .. controls (194.4716,546.4504) and (199.9499,544.5335) ..
- (202.1315,543.8988) .. controls (207.9926,542.2237) and (213.9052,540.7736) ..
- (221.3815,540.8675) .. controls (221.9623,540.8745) and (222.3377,539.8435) ..
- (221.3190,539.8050) -- cycle;
- \path[color=black,fill=white,nonzero rule,line width=0.839pt]
- (226.7565,543.8988) .. controls (220.4907,544.8239) and (213.9208,546.6745) ..
- (208.1940,548.6175) .. controls (202.4671,550.5606) and (198.3906,552.8682) ..
- (195.7313,555.6308) .. controls (202.5433,551.7206) and (206.2895,550.3495) ..
- (208.5065,549.5863) .. controls (214.1631,547.6670) and (219.4450,546.3315) ..
- (226.9440,544.9300) .. controls (227.8440,544.7618) and (227.1212,543.8449) ..
- (226.7565,543.8988) -- cycle;
- \path[color=black,fill=white,nonzero rule,line width=0.839pt]
- (229.9440,549.1175) .. controls (217.3782,551.1190) and (209.2362,556.5404) ..
- (204.0606,561.9168) .. controls (212.0814,555.8737) and (217.6610,552.6260) ..
- (230.1627,550.1488) .. controls (230.9540,549.9920) and (230.7150,548.9947) ..
- (229.9440,549.1175) -- cycle;
- \path[color=black,fill=white,nonzero rule,line width=0.839pt]
- (236.0690,553.7113) .. controls (223.4309,555.6581) and (216.1430,563.3408) ..
- (213.1075,568.4120) .. controls (221.1036,560.4242) and (227.3269,556.0769) ..
- (236.2877,554.7425) .. controls (237.1946,554.6075) and (236.9632,553.5735) ..
- (236.0690,553.7113) -- cycle;
- \path[color=black,fill=white,nonzero rule,line width=0.839pt]
- (239.8815,557.7113) .. controls (237.9104,557.9574) and (235.2282,559.3533) ..
- (232.6940,560.9613) .. controls (230.1598,562.5693) and (228.2477,564.5258) ..
- (227.1075,567.0466) .. controls (230.1601,563.8962) and (231.3821,563.0437) ..
- (233.2565,561.8363) .. controls (235.6896,560.2924) and (238.1414,559.3201) ..
- (240.1315,558.7425) .. controls (241.0644,558.4718) and (240.3594,557.6516) ..
- (239.8815,557.7113) -- cycle;
- \path[draw=white,fill=white,miter limit=4.00,line width=0.839pt]
- (336.8186,487.3469) .. controls (336.8186,489.7993) and (334.8306,491.7873) ..
- (332.3782,491.7873) .. controls (329.9259,491.7873) and (327.9379,489.7993) ..
- (327.9379,487.3469) .. controls (327.9379,484.8946) and (329.9259,482.9065) ..
- (332.3782,482.9065) .. controls (334.8306,482.9065) and (336.8186,484.8945) ..
- (336.8186,487.3469) -- cycle;
- \path[draw=white,fill=maincolor,miter limit=4.00,line width=0.839pt]
- (336.8186,487.3469) .. controls (336.8186,489.7993) and (334.8306,491.7873) ..
- (332.3782,491.7873) .. controls (329.9259,491.7873) and (327.9379,489.7993) ..
- (327.9379,487.3469) .. controls (327.9379,484.8946) and (329.9259,482.9065) ..
- (332.3782,482.9065) .. controls (334.8306,482.9065) and (336.8186,484.8945) ..
- (336.8186,487.3469) -- cycle;
- \path[fill=black] (240.9977,587.6605) .. controls (237.8583,593.6353) and
- (233.6558,598.3948) .. (228.3899,601.9391) .. controls (223.1240,605.4835) and
- (217.0733,607.2556) .. (210.2379,607.2556) .. controls (204.2124,607.2556) and
- (198.9212,606.1923) .. (194.3643,604.0657) .. controls (189.8579,601.9391) and
- (186.1363,599.0530) .. (183.1996,595.4074) .. controls (180.2628,591.7618) and
- (178.0603,587.5086) .. (176.5919,582.6478) .. controls (175.1742,577.7870) and
- (174.4653,572.6477) .. (174.4653,567.2299) .. controls (174.4653,562.3691) and
- (175.2248,557.6096) .. (176.7438,552.9512) .. controls (178.3134,548.2424) and
- (180.5919,544.0145) .. (183.5793,540.2676) .. controls (186.4654,536.6727) and
- (190.0351,533.7866) .. (194.2883,531.6092) .. controls (198.5921,529.3814) and
- (203.4023,528.2675) .. (208.7188,528.2674) .. controls (214.1872,528.2675) and
- (218.8708,529.1283) .. (222.7696,530.8497) .. controls (226.6684,532.5713) and
- (229.8329,534.9258) .. (232.2634,537.9131) .. controls (234.5925,540.7486) and
- (236.3140,544.0905) .. (237.4280,547.9385) .. controls (238.5925,551.7867) and
- (239.1748,555.9640) .. (239.1749,560.4703) -- (239.1749,565.4830) --
- (189.5794,565.4830) .. controls (189.5794,570.3945) and (190.0351,574.8503) ..
- (190.9465,578.8503) .. controls (191.9085,582.8503) and (193.4022,586.3694) ..
- (195.4276,589.4073) .. controls (197.4022,592.3441) and (199.9845,594.6732) ..
- (203.1745,596.3948) .. controls (206.3644,598.0657) and (210.1619,598.9011) ..
- (214.5670,598.9011) .. controls (219.0733,598.9011) and (222.9468,597.8631) ..
- (226.1874,595.7872) .. controls (229.4785,593.6606) and (232.6431,589.8631) ..
- (235.6812,584.3946) -- (240.9977,587.6605)(224.2127,559.1032) .. controls
- (224.2126,556.2678) and (223.9595,553.2298) .. (223.4532,549.9892) .. controls
- (222.9974,546.7487) and (222.2379,544.0398) .. (221.1747,541.8625) .. controls
- (220.0101,539.5334) and (218.4151,537.6347) .. (216.3898,536.1663) .. controls
- (214.3644,534.6980) and (211.7568,533.9638) .. (208.5669,533.9637) .. controls
- (203.2504,533.9638) and (198.8200,536.1916) .. (195.2757,540.6473) .. controls
- (191.7819,545.0525) and (189.8832,551.2044) .. (189.5794,559.1032) --
- (224.2127,559.1032);
- \path[fill=black] (321.9606,605.2809) -- (287.6311,605.2809) --
- (287.6311,600.2682) .. controls (289.9096,600.0151) and (291.8336,599.7619) ..
- (293.4033,599.5087) .. controls (295.0236,599.2556) and (295.8337,598.5973) ..
- (295.8337,597.5340) .. controls (295.8337,597.0783) and (295.5805,596.3695) ..
- (295.0742,595.4074) .. controls (294.5679,594.4454) and (294.0615,593.5593) ..
- (293.5552,592.7492) .. controls (292.2893,590.7745) and (290.5425,588.1415) ..
- (288.3147,584.8503) .. controls (286.1374,581.5086) and (283.4538,577.5338) ..
- (280.2639,572.9262) .. controls (277.6310,576.2174) and (275.2006,579.4326) ..
- (272.9727,582.5718) .. controls (270.7448,585.6605) and (268.4157,588.9517) ..
- (265.9853,592.4454) .. controls (265.6309,592.9517) and (265.2511,593.5846) ..
- (264.8460,594.3441) .. controls (264.4916,595.1036) and (264.3144,595.7112) ..
- (264.3144,596.1669) .. controls (264.3144,597.2809) and (265.0232,598.2176) ..
- (266.4410,598.9771) .. controls (267.9093,599.6860) and (270.0866,600.1670) ..
- (272.9727,600.4201) -- (272.9727,605.2809) -- (245.2509,605.2809) --
- (245.2509,600.5720) .. controls (248.6940,599.5594) and (251.4535,598.3442) ..
- (253.5295,596.9264) .. controls (255.6561,595.4581) and (257.6054,593.6606) ..
- (259.3776,591.5340) .. controls (260.9472,589.5086) and (263.1245,586.7238) ..
- (265.9093,583.1794) .. controls (268.7448,579.6351) and (272.3904,574.8249) ..
- (276.8462,568.7489) .. controls (274.2638,565.0527) and (271.0993,560.5463) ..
- (267.3524,555.2298) .. controls (263.6561,549.8627) and (260.5928,545.4069) ..
- (258.1624,541.8625) .. controls (256.8459,539.9385) and (255.3269,538.3942) ..
- (253.6054,537.2296) .. controls (251.9345,536.0144) and (249.5547,535.4068) ..
- (246.4661,535.4068) -- (246.4661,530.3940) -- (279.0487,530.3940) --
- (279.0487,535.4068) .. controls (277.4284,535.4068) and (275.8335,535.5081) ..
- (274.2639,535.7106) .. controls (272.6942,535.9132) and (271.9094,536.3689) ..
- (271.9094,537.0777) .. controls (271.9094,537.5334) and (272.0613,538.0398) ..
- (272.3651,538.5967) .. controls (272.6689,539.1537) and (273.0486,539.7613) ..
- (273.5044,540.4195) .. controls (274.6183,542.1411) and (276.3398,544.7993) ..
- (278.6690,548.3942) .. controls (281.0487,551.9893) and (283.6057,555.7868) ..
- (286.3400,559.7868) .. controls (288.1121,557.3564) and (290.1627,554.5209) ..
- (292.4919,551.2803) .. controls (294.8716,548.0399) and (297.0489,544.9512) ..
- (299.0236,542.0144) .. controls (299.2261,541.6600) and (299.4286,541.2297) ..
- (299.6312,540.7233) .. controls (299.8337,540.1664) and (299.9350,539.6347) ..
- (299.9350,539.1283) .. controls (299.9350,538.0651) and (299.0489,537.2296) ..
- (297.2768,536.6220) .. controls (295.5552,535.9638) and (293.9096,535.5081) ..
- (292.3400,535.2549) -- (292.3400,530.3940) -- (319.9859,530.3940) --
- (319.9859,535.1030) .. controls (316.0870,536.1157) and (313.0490,537.3309) ..
- (310.8719,538.7486) .. controls (308.6946,540.1157) and (306.8464,541.7107) ..
- (305.3275,543.5334) .. controls (303.6565,545.6095) and (301.6565,548.1664) ..
- (299.3274,551.2044) .. controls (297.0489,554.2425) and (293.8337,558.4957) ..
- (289.6818,563.9640) .. controls (294.2894,570.4451) and (298.0362,575.7617) ..
- (300.9224,579.9136) .. controls (303.8084,584.0655) and (306.7199,588.3441) ..
- (309.6567,592.7492) .. controls (311.1250,594.9770) and (312.7452,596.7492) ..
- (314.5175,598.0657) .. controls (316.3402,599.3315) and (318.8212,600.0657) ..
- (321.9606,600.2682) -- (321.9606,605.2809);
- \path[fill=black] (396.9235,539.2802) .. controls (399.9107,542.8246) and
- (402.2146,546.9512) .. (403.8349,551.6601) .. controls (405.5057,556.3184) and
- (406.3412,561.6602) .. (406.3413,567.6856) .. controls (406.3412,573.6097) and
- (405.3538,579.0275) .. (403.3792,583.9389) .. controls (401.4044,588.7998) and
- (398.7968,592.9517) .. (395.5563,596.3948) .. controls (392.1638,599.8885) and
- (388.3916,602.5721) .. (384.2398,604.4455) .. controls (380.0878,606.3189) and
- (375.6826,607.2556) .. (371.0244,607.2556) .. controls (366.5180,607.2556) and
- (362.8218,606.7493) .. (359.9357,605.7366) .. controls (357.0495,604.7240) and
- (354.6951,603.5341) .. (352.8723,602.1670) -- (352.2647,602.1670) --
- (352.2647,624.6482) .. controls (352.2647,626.4710) and (352.6191,627.9900) ..
- (353.3280,629.2053) .. controls (354.0369,630.4204) and (355.1255,631.3065) ..
- (356.5939,631.8635) .. controls (357.8090,632.3192) and (359.5306,632.7496) ..
- (361.7585,633.1547) .. controls (364.0370,633.6103) and (365.9104,633.8635) ..
- (367.3788,633.9142) -- (367.3788,639.0028) -- (325.5302,639.0028) --
- (325.5302,633.9142) .. controls (327.0999,633.8129) and (328.6189,633.6863) ..
- (330.0873,633.5344) .. controls (331.5556,633.3825) and (332.8721,633.1293) ..
- (334.0367,632.7749) .. controls (335.5557,632.2686) and (336.6190,631.3825) ..
- (337.2266,630.1167) .. controls (337.8342,628.8508) and (338.1380,627.3571) ..
- (338.1380,625.6356) -- (338.1380,545.9638) .. controls (338.1380,544.4449) and
- (337.7582,542.9765) .. (336.9987,541.5587) .. controls (336.2392,540.1410) and
- (335.2519,539.0018) .. (334.0367,538.1410) .. controls (333.1253,537.5334) and
- (331.8594,537.0777) .. (330.2392,536.7739) .. controls (328.6189,536.4195) and
- (327.0492,536.1916) .. (325.5302,536.0903) -- (325.5302,531.1535) --
- (351.0495,529.4826) -- (352.1128,530.3940) -- (352.1128,538.8245) --
- (352.7204,538.9764) .. controls (355.3533,535.9385) and (358.6192,533.4068) ..
- (362.5180,531.3814) .. controls (366.4167,529.3561) and (370.2902,528.3435) ..
- (374.1384,528.3434) .. controls (378.7966,528.3435) and (383.0498,529.3308) ..
- (386.8980,531.3054) .. controls (390.7967,533.2802) and (394.1385,535.9385) ..
- (396.9234,539.2802)(384.5436,593.1289) .. controls (386.5688,589.9896) and
- (388.0625,586.3440) .. (389.0246,582.1921) .. controls (389.9866,578.0402) and
- (390.4676,573.4072) .. (390.4677,568.2932) .. controls (390.4676,564.5464) and
- (390.0625,560.7235) .. (389.2525,556.8247) .. controls (388.4423,552.9260) and
- (387.1764,549.5335) .. (385.4550,546.6474) .. controls (383.7334,543.7107) and
- (381.4802,541.3309) .. (378.6954,539.5081) .. controls (375.9105,537.6853) and
- (372.5687,536.7739) .. (368.6700,536.7739) .. controls (364.9230,536.7739) and
- (361.7331,537.6094) .. (359.1002,539.2802) .. controls (356.4673,540.9005) and
- (354.1888,542.8499) .. (352.2647,545.1284) -- (352.2647,589.4073) .. controls
- (352.7204,590.7745) and (353.4546,592.1922) .. (354.4673,593.6606) .. controls
- (355.5305,595.1289) and (356.6951,596.3948) .. (357.9610,597.4581) .. controls
- (359.5306,598.7239) and (361.2268,599.7619) .. (363.0496,600.5720) .. controls
- (364.8724,601.3315) and (367.1003,601.7113) .. (369.7333,601.7113) .. controls
- (372.5687,601.7113) and (375.3029,600.9771) .. (377.9359,599.5087) .. controls
- (380.5688,597.9897) and (382.7713,595.8631) .. (384.5436,593.1289);
- \path[fill=black] (452.5949,605.2809) -- (416.0629,605.2809) --
- (416.0629,600.2682) .. controls (417.2275,600.1670) and (418.4680,600.0657) ..
- (419.7845,599.9644) .. controls (421.1009,599.8125) and (422.1895,599.6100) ..
- (423.0503,599.3568) .. controls (424.4680,598.9011) and (425.5313,598.1163) ..
- (426.2402,597.0024) .. controls (426.9491,595.8378) and (427.3035,594.3441) ..
- (427.3035,592.5213) -- (427.3035,505.7862) .. controls (427.3035,503.9635) and
- (426.8985,502.2672) .. (426.0883,500.6975) .. controls (425.3288,499.0773) and
- (424.3161,497.8115) .. (423.0503,496.9000) .. controls (422.1389,496.2925) and
- (420.4680,495.7355) .. (418.0376,495.2291) .. controls (415.6072,494.7229) and
- (413.6578,494.4191) .. (412.1894,494.3177) -- (412.1894,489.4569) --
- (440.3670,487.7100) -- (441.4303,488.8493) -- (441.4303,591.6099) .. controls
- (441.4302,593.3821) and (441.7593,594.8505) .. (442.4176,596.0150) .. controls
- (443.0758,597.1290) and (444.1391,597.9897) .. (445.6075,598.5973) .. controls
- (446.7214,599.1037) and (447.8100,599.4834) .. (448.8734,599.7366) .. controls
- (449.9873,599.9897) and (451.2278,600.1670) .. (452.5949,600.2682) --
- (452.5949,605.2809);
- \path[fill=black] (493.6840,633.0028) .. controls (488.9244,633.0027) and
- (484.5700,632.3951) .. (480.6206,631.1800) .. controls (476.6711,630.0154) and
- (473.2787,628.4204) .. (470.4432,626.3951) .. controls (467.6078,624.3697) and
- (465.4052,622.0406) .. (463.8356,619.4077) .. controls (462.3166,616.7747) and
- (461.5571,614.0658) .. (461.5571,611.2810) .. controls (461.5571,608.8000) and
- (462.1647,606.5721) .. (463.3799,604.5974) .. controls (464.5951,602.5721) and
- (466.5445,601.5594) .. (469.2280,601.5594) .. controls (472.2660,601.5594) and
- (474.5699,602.3189) .. (476.1395,603.8379) .. controls (477.7598,605.3063) and
- (478.5699,607.0025) .. (478.5699,608.9266) .. controls (478.5699,610.5468) and
- (478.2914,612.5975) .. (477.7345,615.0785) .. controls (477.2281,617.5596) and
- (476.8230,619.3317) .. (476.5193,620.3950) .. controls (476.8737,620.8507) and
- (477.5066,621.4583) .. (478.4180,622.2178) .. controls (479.3800,622.9773) and
- (480.5446,623.6609) .. (481.9117,624.2685) .. controls (483.5320,625.0280) and
- (485.2282,625.6356) .. (487.0004,626.0913) .. controls (488.7725,626.5470) and
- (491.2789,626.7748) .. (494.5195,626.7749) .. controls (497.5574,626.7748) and
- (500.4689,626.2685) .. (503.2537,625.2559) .. controls (506.0892,624.2432) and
- (508.5702,622.6229) .. (510.6969,620.3950) .. controls (512.9247,618.0659) and
- (514.6462,615.3317) .. (515.8615,612.1924) .. controls (517.1272,609.1038) and
- (517.7602,605.0278) .. (517.7602,599.9644) .. controls (517.7602,597.2302) and
- (517.4564,594.5213) .. (516.8488,591.8378) .. controls (516.2918,589.1542) and
- (515.2285,586.8251) .. (513.6589,584.8503) .. controls (512.0892,582.8757) and
- (509.9373,581.3566) .. (507.2031,580.2933) .. controls (504.5195,579.1794) and
- (501.1018,578.6224) .. (496.9499,578.6224) -- (487.0004,578.6224) --
- (487.0004,569.8881) -- (493.6081,569.8881) .. controls (500.5954,569.8882) and
- (505.6335,567.9641) .. (508.7221,564.1159) .. controls (511.8107,560.2678) and
- (513.3551,554.4703) .. (513.3551,546.7233) .. controls (513.3551,540.3942) and
- (511.8614,535.6347) .. (508.8740,532.4447) .. controls (505.8866,529.2042) and
- (501.6587,527.5840) .. (496.1904,527.5839) .. controls (493.5574,527.5840) and
- (491.3801,527.9131) .. (489.6586,528.5712) .. controls (487.9877,529.1789) and
- (486.6206,529.7865) .. (485.5573,530.3940) .. controls (484.2915,531.1030) and
- (483.2535,531.8878) .. (482.4434,532.7485) .. controls (481.6332,533.6093) and
- (481.0256,534.2423) .. (480.6206,534.6472) .. controls (480.9750,536.2676) and
- (481.4054,538.2676) .. (481.9117,540.6473) .. controls (482.4180,542.9765) and
- (482.6712,545.2044) .. (482.6712,547.3309) .. controls (482.6712,549.2044) and
- (481.8611,550.9006) .. (480.2408,552.4196) .. controls (478.6712,553.8880) and
- (476.3420,554.6222) .. (473.2534,554.6222) .. controls (470.5698,554.6222) and
- (468.5951,553.6602) .. (467.3293,551.7360) .. controls (466.1141,549.8120) and
- (465.5065,547.5842) .. (465.5065,545.0524) .. controls (465.5065,542.4195) and
- (466.2407,539.7360) .. (467.7090,537.0017) .. controls (469.1774,534.2676) and
- (471.3546,531.7106) .. (474.2408,529.3307) .. controls (477.1268,526.9510) and
- (480.6459,525.0270) .. (484.7978,523.5585) .. controls (488.9497,522.0902) and
- (493.7346,521.3560) .. (499.1524,521.3560) .. controls (505.3803,521.3560) and
- (510.5196,522.2928) .. (514.5703,524.1661) .. controls (518.6716,525.9890) and
- (521.8868,528.2169) .. (524.2160,530.8497) .. controls (526.4944,533.4321) and
- (528.0641,536.1410) .. (528.9249,538.9764) .. controls (529.7856,541.8119) and
- (530.2160,544.2424) .. (530.2161,546.2676) .. controls (530.2160,548.7994) and
- (529.8615,551.3563) .. (529.1527,553.9386) .. controls (528.4438,556.4703) and
- (527.2792,558.8248) .. (525.6590,561.0020) .. controls (523.8868,563.3818) and
- (521.5323,565.5590) .. (518.5957,567.5337) .. controls (515.7095,569.4578) and
- (512.0639,571.0274) .. (507.6588,572.2426) -- (507.6588,573.4578) .. controls
- (510.4943,573.7110) and (513.5070,574.3439) .. (516.6969,575.3566) .. controls
- (519.9374,576.3693) and (522.8488,577.8629) .. (525.4312,579.8376) .. controls
- (528.1147,581.9136) and (530.3172,584.5972) .. (532.0389,587.8883) .. controls
- (533.7603,591.1289) and (534.6211,595.2555) .. (534.6212,600.2682) .. controls
- (534.6211,609.9898) and (530.7223,617.8633) .. (522.9248,623.8887) .. controls
- (515.1272,629.9647) and (505.3803,633.0027) .. (493.6840,633.0028);
- \path[fill=maincolor] (239.7096,586.3724) .. controls (236.5703,592.3472) and
- (232.3677,597.1067) .. (227.1019,600.6510) .. controls (221.8359,604.1954) and
- (215.7852,605.9676) .. (208.9498,605.9676) .. controls (202.9244,605.9676) and
- (197.6332,604.9043) .. (193.0762,602.7777) .. controls (188.5698,600.6510) and
- (184.8482,597.7649) .. (181.9115,594.1193) .. controls (178.9748,590.4737) and
- (176.7722,586.2205) .. (175.3038,581.3597) .. controls (173.8861,576.4989) and
- (173.1772,571.3596) .. (173.1772,565.9418) .. controls (173.1772,561.0810) and
- (173.9367,556.3215) .. (175.4557,551.6632) .. controls (177.0254,546.9543) and
- (179.3039,542.7264) .. (182.2913,538.9795) .. controls (185.1773,535.3846) and
- (188.7470,532.4985) .. (193.0002,530.3212) .. controls (197.3040,528.0934) and
- (202.1142,526.9794) .. (207.4308,526.9794) .. controls (212.8991,526.9794) and
- (217.5827,527.8402) .. (221.4816,529.5617) .. controls (225.3803,531.2833) and
- (228.5449,533.6377) .. (230.9753,536.6250) .. controls (233.3044,539.4606) and
- (235.0259,542.8024) .. (236.1399,546.6505) .. controls (237.3045,550.4987) and
- (237.8867,554.6759) .. (237.8868,559.1822) -- (237.8868,564.1950) --
- (188.2913,564.1950) .. controls (188.2913,569.1064) and (188.7470,573.5622) ..
- (189.6584,577.5622) .. controls (190.6204,581.5623) and (192.1141,585.0813) ..
- (194.1395,588.1193) .. controls (196.1142,591.0560) and (198.6965,593.3852) ..
- (201.8864,595.1067) .. controls (205.0763,596.7776) and (208.8738,597.6131) ..
- (213.2789,597.6130) .. controls (217.7853,597.6131) and (221.6587,596.5751) ..
- (224.8993,594.4991) .. controls (228.1904,592.3725) and (231.3550,588.5750) ..
- (234.3931,583.1066) -- (239.7096,586.3724)(222.9246,557.8151) .. controls
- (222.9246,554.9797) and (222.6714,551.9417) .. (222.1651,548.7011) .. controls
- (221.7094,545.4606) and (220.9499,542.7517) .. (219.8866,540.5744) .. controls
- (218.7220,538.2454) and (217.1270,536.3466) .. (215.1017,534.8782) .. controls
- (213.0764,533.4099) and (210.4687,532.6757) .. (207.2789,532.6756) .. controls
- (201.9623,532.6757) and (197.5319,534.9036) .. (193.9876,539.3592) .. controls
- (190.4939,543.7644) and (188.5951,549.9164) .. (188.2913,557.8151) --
- (222.9246,557.8151);
- \path[fill=maincolor] (320.6725,603.9929) -- (286.3430,603.9929) --
- (286.3430,598.9801) .. controls (288.6215,598.7270) and (290.5456,598.4738) ..
- (292.1152,598.2206) .. controls (293.7355,597.9675) and (294.5456,597.3093) ..
- (294.5457,596.2459) .. controls (294.5456,595.7902) and (294.2924,595.0814) ..
- (293.7862,594.1193) .. controls (293.2798,593.1573) and (292.7734,592.2712) ..
- (292.2672,591.4611) .. controls (291.0013,589.4864) and (289.2544,586.8535) ..
- (287.0266,583.5623) .. controls (284.8493,580.2205) and (282.1657,576.2457) ..
- (278.9759,571.6381) .. controls (276.3429,574.9293) and (273.9125,578.1445) ..
- (271.6846,581.2838) .. controls (269.4567,584.3724) and (267.1276,587.6636) ..
- (264.6972,591.1573) .. controls (264.3428,591.6636) and (263.9630,592.2965) ..
- (263.5580,593.0560) .. controls (263.2035,593.8155) and (263.0263,594.4231) ..
- (263.0263,594.8788) .. controls (263.0263,595.9928) and (263.7352,596.9295) ..
- (265.1529,597.6890) .. controls (266.6213,598.3979) and (268.7985,598.8789) ..
- (271.6846,599.1321) -- (271.6846,603.9929) -- (243.9628,603.9929) --
- (243.9628,599.2840) .. controls (247.4059,598.2713) and (250.1654,597.0561) ..
- (252.2414,595.6383) .. controls (254.3680,594.1700) and (256.3174,592.3725) ..
- (258.0896,590.2459) .. controls (259.6592,588.2206) and (261.8364,585.4357) ..
- (264.6213,581.8914) .. controls (267.4567,578.3470) and (271.1023,573.5369) ..
- (275.5581,567.4608) .. controls (272.9758,563.7646) and (269.8112,559.2582) ..
- (266.0643,553.9417) .. controls (262.3681,548.5746) and (259.3047,544.1188) ..
- (256.8744,540.5744) .. controls (255.5579,538.6504) and (254.0389,537.1061) ..
- (252.3173,535.9415) .. controls (250.6464,534.7263) and (248.2667,534.1187) ..
- (245.1780,534.1187) -- (245.1780,529.1060) -- (277.7607,529.1060) --
- (277.7607,534.1187) .. controls (276.1404,534.1187) and (274.5454,534.2200) ..
- (272.9758,534.4225) .. controls (271.4061,534.6251) and (270.6213,535.0808) ..
- (270.6213,535.7896) .. controls (270.6213,536.2453) and (270.7732,536.7517) ..
- (271.0770,537.3086) .. controls (271.3808,537.8656) and (271.7606,538.4732) ..
- (272.2163,539.1314) .. controls (273.3302,540.8530) and (275.0517,543.5112) ..
- (277.3809,547.1062) .. controls (279.7606,550.7012) and (282.3176,554.4987) ..
- (285.0519,558.4987) .. controls (286.8240,556.0683) and (288.8747,553.2329) ..
- (291.2038,549.9923) .. controls (293.5836,546.7518) and (295.7608,543.6631) ..
- (297.7356,540.7263) .. controls (297.9380,540.3720) and (298.1406,539.9416) ..
- (298.3432,539.4352) .. controls (298.5456,538.8783) and (298.6469,538.3466) ..
- (298.6470,537.8402) .. controls (298.6469,536.7770) and (297.7608,535.9415) ..
- (295.9887,535.3339) .. controls (294.2671,534.6757) and (292.6215,534.2200) ..
- (291.0519,533.9668) -- (291.0519,529.1060) -- (318.6978,529.1060) --
- (318.6978,533.8149) .. controls (314.7990,534.8276) and (311.7610,536.0428) ..
- (309.5838,537.4605) .. controls (307.4065,538.8277) and (305.5584,540.4226) ..
- (304.0394,542.2453) .. controls (302.3685,544.3214) and (300.3684,546.8784) ..
- (298.0394,549.9163) .. controls (295.7608,552.9544) and (292.5456,557.2076) ..
- (288.3937,562.6760) .. controls (293.0013,569.1571) and (296.7482,574.4736) ..
- (299.6343,578.6255) .. controls (302.5204,582.7775) and (305.4318,587.0560) ..
- (308.3686,591.4611) .. controls (309.8369,593.6890) and (311.4572,595.4611) ..
- (313.2294,596.7776) .. controls (315.0521,598.0434) and (317.5332,598.7776) ..
- (320.6725,598.9801) -- (320.6725,603.9929);
- \path[fill=maincolor] (395.6354,537.9921) .. controls (398.6227,541.5365) and
- (400.9265,545.6632) .. (402.5468,550.3720) .. controls (404.2177,555.0303) and
- (405.0531,560.3722) .. (405.0532,566.3975) .. controls (405.0531,572.3216) and
- (404.0658,577.7394) .. (402.0911,582.6508) .. controls (400.1164,587.5117) and
- (397.5087,591.6636) .. (394.2683,595.1067) .. controls (390.8758,598.6004) and
- (387.1036,601.2840) .. (382.9517,603.1574) .. controls (378.7997,605.0308) and
- (374.3946,605.9676) .. (369.7363,605.9676) .. controls (365.2299,605.9676) and
- (361.5337,605.4612) .. (358.6476,604.4486) .. controls (355.7615,603.4359) and
- (353.4070,602.2460) .. (351.5843,600.8789) -- (350.9766,600.8789) --
- (350.9766,623.3602) .. controls (350.9766,625.1829) and (351.3311,626.7019) ..
- (352.0400,627.9172) .. controls (352.7488,629.1323) and (353.8374,630.0184) ..
- (355.3058,630.5754) .. controls (356.5210,631.0311) and (358.2425,631.4615) ..
- (360.4704,631.8666) .. controls (362.7489,632.3223) and (364.6223,632.5754) ..
- (366.0907,632.6261) -- (366.0907,637.7147) -- (324.2422,637.7147) --
- (324.2422,632.6261) .. controls (325.8118,632.5248) and (327.3308,632.3982) ..
- (328.7992,632.2463) .. controls (330.2676,632.0944) and (331.5840,631.8412) ..
- (332.7486,631.4868) .. controls (334.2676,630.9805) and (335.3309,630.0944) ..
- (335.9385,628.8286) .. controls (336.5461,627.5627) and (336.8499,626.0690) ..
- (336.8499,624.3475) -- (336.8499,544.6758) .. controls (336.8499,543.1568) and
- (336.4701,541.6884) .. (335.7107,540.2706) .. controls (334.9511,538.8530) and
- (333.9638,537.7137) .. (332.7486,536.8529) .. controls (331.8372,536.2453) and
- (330.5714,535.7896) .. (328.9511,535.4858) .. controls (327.3308,535.1314) and
- (325.7612,534.9036) .. (324.2422,534.8022) -- (324.2422,529.8655) --
- (349.7614,528.1945) -- (350.8247,529.1060) -- (350.8247,537.5364) --
- (351.4323,537.6883) .. controls (354.0653,534.6504) and (357.3311,532.1187) ..
- (361.2299,530.0933) .. controls (365.1287,528.0680) and (369.0021,527.0554) ..
- (372.8503,527.0553) .. controls (377.5085,527.0554) and (381.7617,528.0427) ..
- (385.6099,530.0174) .. controls (389.5087,531.9921) and (392.8505,534.6504) ..
- (395.6354,537.9921)(383.2555,591.8408) .. controls (385.2808,588.7016) and
- (386.7744,585.0560) .. (387.7365,580.9040) .. controls (388.6985,576.7521) and
- (389.1795,572.1191) .. (389.1796,567.0051) .. controls (389.1795,563.2583) and
- (388.7745,559.4354) .. (387.9644,555.5366) .. controls (387.1542,551.6379) and
- (385.8884,548.2455) .. (384.1669,545.3593) .. controls (382.4453,542.4226) and
- (380.1921,540.0428) .. (377.4073,538.2200) .. controls (374.6224,536.3972) and
- (371.2806,535.4858) .. (367.3819,535.4858) .. controls (363.6350,535.4858) and
- (360.4451,536.3213) .. (357.8122,537.9921) .. controls (355.1792,539.6125) and
- (352.9007,541.5618) .. (350.9766,543.8403) -- (350.9766,588.1193) .. controls
- (351.4323,589.4864) and (352.1665,590.9041) .. (353.1792,592.3725) .. controls
- (354.2425,593.8409) and (355.4070,595.1067) .. (356.6729,596.1700) .. controls
- (358.2425,597.4358) and (359.9387,598.4738) .. (361.7616,599.2839) .. controls
- (363.5843,600.0434) and (365.8122,600.4232) .. (368.4452,600.4232) .. controls
- (371.2806,600.4232) and (374.0148,599.6890) .. (376.6478,598.2206) .. controls
- (379.2807,596.7016) and (381.4833,594.5750) .. (383.2555,591.8408);
- \path[fill=basecolor] (451.3069,603.9929) -- (414.7748,603.9929) --
- (414.7748,598.9801) .. controls (415.9394,598.8789) and (417.1799,598.7776) ..
- (418.4964,598.6763) .. controls (419.8128,598.5245) and (420.9015,598.3219) ..
- (421.7622,598.0687) .. controls (423.1800,597.6130) and (424.2433,596.8282) ..
- (424.9521,595.7143) .. controls (425.6610,594.5497) and (426.0154,593.0560) ..
- (426.0155,591.2332) -- (426.0155,504.4981) .. controls (426.0154,502.6754) and
- (425.6104,500.9792) .. (424.8002,499.4094) .. controls (424.0407,497.7893) and
- (423.0281,496.5234) .. (421.7622,495.6119) .. controls (420.8508,495.0044) and
- (419.1799,494.4475) .. (416.7495,493.9410) .. controls (414.3191,493.4348) and
- (412.3697,493.1310) .. (410.9014,493.0296) -- (410.9014,488.1688) --
- (439.0789,486.4219) -- (440.1422,487.5612) -- (440.1422,590.3218) .. controls
- (440.1422,592.0940) and (440.4713,593.5624) .. (441.1295,594.7269) .. controls
- (441.7877,595.8409) and (442.8510,596.7016) .. (444.3195,597.3092) .. controls
- (445.4334,597.8156) and (446.5220,598.1953) .. (447.5853,598.4485) .. controls
- (448.6992,598.7017) and (449.9397,598.8789) .. (451.3069,598.9801) --
- (451.3069,603.9929);
- \path[fill=basecolor] (492.3959,631.7147) .. controls (487.6364,631.7147) and
- (483.2819,631.1071) .. (479.3325,629.8919) .. controls (475.3831,628.7273) and
- (471.9906,627.1323) .. (469.1552,625.1070) .. controls (466.3197,623.0817) and
- (464.1171,620.7525) .. (462.5475,618.1196) .. controls (461.0285,615.4866) and
- (460.2690,612.7778) .. (460.2690,609.9929) .. controls (460.2690,607.5119) and
- (460.8766,605.2840) .. (462.0918,603.3093) .. controls (463.3070,601.2840) and
- (465.2564,600.2713) .. (467.9400,600.2713) .. controls (470.9780,600.2713) and
- (473.2818,601.0308) .. (474.8514,602.5498) .. controls (476.4717,604.0182) and
- (477.2818,605.7144) .. (477.2819,607.6385) .. controls (477.2818,609.2587) and
- (477.0033,611.3094) .. (476.4464,613.7904) .. controls (475.9400,616.2715) and
- (475.5350,618.0436) .. (475.2312,619.1069) .. controls (475.5856,619.5626) and
- (476.2185,620.1702) .. (477.1300,620.9298) .. controls (478.0920,621.6892) and
- (479.2565,622.3728) .. (480.6237,622.9804) .. controls (482.2439,623.7399) and
- (483.9401,624.3475) .. (485.7123,624.8032) .. controls (487.4845,625.2589) and
- (489.9908,625.4868) .. (493.2314,625.4868) .. controls (496.2694,625.4868) and
- (499.1808,624.9804) .. (501.9657,623.9678) .. controls (504.8011,622.9551) and
- (507.2821,621.3348) .. (509.4088,619.1069) .. controls (511.6366,616.7778) and
- (513.3581,614.0436) .. (514.5734,610.9043) .. controls (515.8392,607.8157) and
- (516.4721,603.7397) .. (516.4721,598.6763) .. controls (516.4721,595.9421) and
- (516.1683,593.2333) .. (515.5607,590.5497) .. controls (515.0037,587.8661) and
- (513.9404,585.5370) .. (512.3708,583.5622) .. controls (510.8011,581.5876) and
- (508.6492,580.0686) .. (505.9151,579.0052) .. controls (503.2314,577.8913) and
- (499.8137,577.3344) .. (495.6618,577.3343) -- (485.7123,577.3343) --
- (485.7123,568.6001) -- (492.3200,568.6001) .. controls (499.3074,568.6001) and
- (504.3454,566.6760) .. (507.4341,562.8279) .. controls (510.5227,558.9797) and
- (512.0670,553.1822) .. (512.0670,545.4352) .. controls (512.0670,539.1061) and
- (510.5733,534.3466) .. (507.5860,531.1566) .. controls (504.5985,527.9162) and
- (500.3707,526.2959) .. (494.9023,526.2958) .. controls (492.2693,526.2959) and
- (490.0921,526.6250) .. (488.3706,527.2831) .. controls (486.6996,527.8908) and
- (485.3325,528.4984) .. (484.2693,529.1060) .. controls (483.0034,529.8149) and
- (481.9654,530.5997) .. (481.1553,531.4604) .. controls (480.3451,532.3213) and
- (479.7375,532.9542) .. (479.3325,533.3592) .. controls (479.6869,534.9795) and
- (480.1173,536.9795) .. (480.6237,539.3592) .. controls (481.1300,541.6884) and
- (481.3831,543.9163) .. (481.3832,546.0429) .. controls (481.3831,547.9164) and
- (480.5730,549.6126) .. (478.9527,551.1315) .. controls (477.3831,552.5999) and
- (475.0539,553.3341) .. (471.9653,553.3341) .. controls (469.2817,553.3341) and
- (467.3070,552.3721) .. (466.0412,550.4480) .. controls (464.8260,548.5240) and
- (464.2184,546.2961) .. (464.2184,543.7643) .. controls (464.2184,541.1315) and
- (464.9526,538.4479) .. (466.4210,535.7136) .. controls (467.8893,532.9795) and
- (470.0666,530.4225) .. (472.9527,528.0426) .. controls (475.8388,525.6630) and
- (479.3578,523.7389) .. (483.5098,522.2704) .. controls (487.6617,520.8021) and
- (492.4465,520.0680) .. (497.8643,520.0679) .. controls (504.0922,520.0680) and
- (509.2315,521.0047) .. (513.2822,522.8780) .. controls (517.3835,524.7009) and
- (520.5987,526.9288) .. (522.9279,529.5617) .. controls (525.2064,532.1440) and
- (526.7760,534.8529) .. (527.6368,537.6883) .. controls (528.4975,540.5239) and
- (528.9279,542.9543) .. (528.9280,544.9795) .. controls (528.9279,547.5113) and
- (528.5735,550.0683) .. (527.8647,552.6505) .. controls (527.1557,555.1822) and
- (525.9912,557.5367) .. (524.3710,559.7139) .. controls (522.5987,562.0937) and
- (520.2443,564.2709) .. (517.3076,566.2456) .. controls (514.4214,568.1697) and
- (510.7758,569.7393) .. (506.3708,570.9545) -- (506.3708,572.1697) .. controls
- (509.2062,572.4229) and (512.2189,573.0558) .. (515.4088,574.0685) .. controls
- (518.6493,575.0812) and (521.5607,576.5749) .. (524.1431,578.5495) .. controls
- (526.8266,580.6255) and (529.0292,583.3091) .. (530.7508,586.6003) .. controls
- (532.4722,589.8408) and (533.3330,593.9674) .. (533.3331,598.9801) .. controls
- (533.3330,608.7018) and (529.4342,616.5753) .. (521.6368,622.6007) .. controls
- (513.8391,628.6766) and (504.0922,631.7147) .. (492.3959,631.7147);
-\end{tikzpicture}
-}
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\publicationmonth{March}
-\publicationyear{2014}
-\publicationissue{9}
-
-\usepackage{multicol}
-\usepackage{xparse}
-\newcommand\ctanpkg[1]{\href{http://ctan.org/pkg/#1}{\pkg{#1}}}
-
-\begin{document}
-\maketitle
-
-\raisefirstsection
-
-\tableofcontents % could drop this and raise first section instead
-
-\section{Hiatus?}
-
-Well, it's been a busy couple of years.
-Work has slowed on the \LaTeX3 codebase as all active members of the team have been\Dash shall we say\Dash busily occupied with more pressing concerns in their day-to-day activities.
-
-Nonetheless, Joseph and Bruno have continued to fine-tune the \LaTeX3 kernel and add-on packages.
-Browsing through the commit history shows bug fixes and improvements to documentation, test files, and internal code across the entire breadth of the codebase.
-
-Members of the team have presented at two TUG conferences since the last \LaTeX3 news. (Has it really been so long?)
-In July 2012, Frank and Will travelled to Boston; Frank discussed the challenges faced in the past and continuing to the present day due to the limits of the various \TeX\ engines; and, Frank and Will together covered a brief history and recent developments of the \pkg{expl3} code.
-
-In 2013, Joseph and Frank wrote a talk on complex layouts, and the "layers" ideas discussed in \LaTeX3; Frank went to Tokyo in October to present the work.
-Slides of and recordings from these talks are available on the \LaTeX3 website.
-
-These conferences are good opportunities to introduce the \pkg{expl3} language to a wider group of people; in many cases, explaining the rationale behind why \pkg{expl3} looks a little strange at first helps to convince the audience that it's not so weird after all.
-In our experience, anyone that's been exposed to some of the more awkward expansion aspects of \TeX\ programming appreciates how \pkg{expl3} makes life much easier for us.
-
-\section{\pkg{expl3} in the community}
-
-While things have been slightly quieter for the team, more and more people are adopting \pkg{expl3} for their own use.
-A search on the \TeX\ Stack Exchange website for either "\texttt{expl3}" or "\texttt{latex3}" at time of writing yield around one thousand results each.
-
-In order to help standardise the prefixes used in \pkg{expl3} modules, we have developed a registration procedure for package authors (which amounts to little more than notifying us that their package uses a specific prefix, which will often be the name of the package itself).
-Please contact us via the \texttt{latex-l} mailing list to register your module prefixes and package names; we ask that you avoid using package names that begin with \texttt{l3...}\ since \pkg{expl3} packages use this internally.
-Some authors have started using the package prefix \texttt{lt3...}\ as a way of indicating their package builds on \pkg{expl3} in some way but is not maintained by the \LaTeX3 team.
-
-In the prefix database at present, some thirty package prefixes are registered by fifteen separate individuals (unrelated to The \LaTeX{} Project\Dash the number of course grows if you include packages by members of the team).
-These packages cover a broad range of functionality:
-\begin{description}
-\item[\ctanpkg{acro}] Interface for creating (classes of) acronyms
-\item[\ctanpkg{hobby}]
-Hobby's algorithm in PGF/TiKZ for drawing optimally smooth curves.
-\item[\ctanpkg{chemmacros}] Typesetting in the field of chemistry.
-\item[\ctanpkg{classics}] Traditional-style citations for the classics.
-\item[\ctanpkg{conteq}] Continued (in)equalities in mathematics.
-\item[\ctanpkg{ctex}] A collection of macro packages and document classes for Chinese typesetting.
-\item[\ctanpkg{endiagram}] Draw potential energy curve diagrams.
-\item[\ctanpkg{enotez}] Support for end-notes.
-\item[\ctanpkg{exsheets}] Question sheets and exams with metadata.
-%(Note to self: remember to use this for teaching this semester!)
-\item[\ctanpkg{lt3graph}] A graph data structure.
-\item[\ctanpkg{newlfm}] The venerable class for memos and letters.
-\item[\ctanpkg{fnpct}] Interaction between footnotes and punctuation.
-\item[\ctanpkg{GS1}] Barcodes and so forth.
-\item[\ctanpkg{hobete}] Beamer theme for the Univ.\ of Hohenheim.
-\item[\ctanpkg{kantlipsum}] Generate sentences in Kant's style.
-\item[\ctanpkg{lualatex-math}] Extended support for mathematics in \LuaLaTeX.
-\item[\ctanpkg{media9}] Multimedia inclusion for Adobe Reader.
-\item[\ctanpkg{pkgloader}] Managing the options and loading order of other packages.
-\item[\ctanpkg{substances}] Lists of chemicals, etc., in a document.
-\item[\ctanpkg{withargs}] Ephemeral macro use.
-\item[\ctanpkg{xecjk}] Support for CJK documents in \XeLaTeX.
-\item[\ctanpkg{xpatch}, \ctanpkg{regexpatch}] Patch command definitions.
-\item[\ctanpkg{xpeek}] Commands that peek ahead in the input stream.
-\item[\ctanpkg{xpinjin}] Automatically add pinyin to Chinese characters
-\item[\ctanpkg{zhnumber}] Typeset Chinese representations of numbers
-\item[\ctanpkg{zxjatype}] Standards-conforming typesetting of Japanese for \XeLaTeX.
-\end{description}
-Some of these packages are marked by their authors as experimental, but it is clear that these packages have been developed to solve specific needs for typesetting and document production.
-
-The \pkg{expl3} language has well and truly gained traction after many years of waiting patiently.
-
-\section[Logo for the \LaTeX3 Programming Language]
- {A logo for the \LaTeX3 Programming Language}
-
-To show that \pkg{expl3} is ready for general use Paulo Cereda drew up a nice logo for us, showing a \mbox{hummingbird} (agile and fast\Dash but needs huge amounts of energy) picking at "l3". Big thanks to Paulo!
-\begin{center}
-\explogo
-\end{center}
-
-\section{Recent activity}
-
-\LaTeX3 work has only slowed, not ground to a halt.
-While changes have tended to be minor in recent times, there are a number of improvements worth discussing explicitly.
-\begin{enumerate}
-\item
-Bruno has extended the floating point code to cover additional functions such as inverse trigonometric functions.
-These additions round out the functionality well and make it viable for use in most cases needing floating point mathematics.
-\item
-Joseph's refinement of the experimental galley code now allows separation of paragraph shapes from margins/cutouts.
-This still needs some testing!
-\item
-For some time now \pkg{expl3} has provided "native" drivers although they have not been selected by default in most cases.
-These have been revised to improve robustness, which makes them probably ready to enable by default.
-The improvements made to the drivers have also fed back to more "general" \LaTeX\ code.
-\end{enumerate}
-
-
-\section{Work in progress}
-
-We're still actively discussing a variety of areas to tackle next.
-We are aware of various "odds and ends" in \pkg{expl3} that still need sorting out.
-In particular, some experimental functions have been working quite well and it's time to assess moving them into the "stable" modules, in particular the \pkg{l3str} module for dealing with catcode-twelve token lists more commonly known in \pkg{expl3} as \emph{strings}.
-
-Areas of active discussion including issues around uppercasing and lowercasing (and the esoteric ways that this can be achieved in \TeX) and space skipping (or not) in commands and environments with optional arguments.
-These two issues are discussed next.
-
-\subsection{Uppercasing and lowercasing}
-
-The commands \verb"\tl_to_lowercase:n" and \verb"\tl_to_uppercase:n" have long been overdue for a good hard look.
-From a traditional \TeX\ viewpoint, these commands are simply the primitive \verb"\lowercase" and \verb"\uppercase", and in practice it's well known that there are various limitations and peculiarities associated with them.
-We know these commands are good, to one extent or another, for three things:
-\begin{enumerate}
-\item
-Uppercasing text for typesetting purposes such as all-uppercase titles.
-\item
-Lowercasing text for normalisation in sorting and other applications such as filename comparisons.
-\item
-Achieving special effects, in concert with manipulating \verb"\uccode" and the like, such as defining commands that contain characters with different catcodes than usual.
-\end{enumerate}
-We are working on providing a set of commands to achieve all three of these functions in a more direct and easy-to-use fashion, including support for Unicode in \LuaLaTeX\ and \XeLaTeX.
-
-\pagebreak
-
-\subsection{Space-skipping in \pkg{xparse}}
-
-We have also re-considered the behaviour of space-skipping in \pkg{xparse}.
-Consider the following examples:
-\begin{verbatim}
-\begin{dmath} \begin{dmath}[label=foo]
-[x y z] = [1 2 3] x^2 + y^2 = z^2
-\end{dmath} \end{dmath}
-\end{verbatim}
-In the first case, we are typesetting some mathematics that contains square brackets.
-In the second, we are assigning a label to the equation using an optional argument, which also uses brackets.
-The fact that both work correctly is due to behaviour that is specifically programmed into the workings of the \texttt{dmath} environment of \pkg{breqn}: spaces before an optional argument are explicitly forbidden.
-At present, this is also how commands and environments defined using \pkg{xparse} behave.
-But consider a \pkg{pgfplots} environment:
-\begin{verbatim}
-\begin{pgfplot}
- [
- % plot options
- ]
- \begin{axis}
- [
- % axis options
- ]
- ...
- \end{axis}
-\end{pgfplot}
-\end{verbatim}
-This would seem like quite a natural way to write such environments, but with the current state of \pkg{xparse} this syntax would be incorrect. One would have to write either of these instead:
-\begin{multicols}{2}
-\begin{verbatim}
-\begin{pgfplot}%
- [
- % plot options
- ]
-\end{verbatim}
-\begin{verbatim}
-\begin{pgfplot}[
- % plot options
- ]
-\end{verbatim}
-\end{multicols}
-Is this an acceptable compromise?
-We're not entirely sure here\Dash we're in a corner because the humble \texttt{[} has ended up being part of both the syntax and semantics of a \LaTeX\ document.
-
-%There is one further matter to consider and that is how "control symbols" such as \verb"\\" behave in such matters.
-%Because \TeX\ does not skip spaces after control symbols, neither does \pkg{xparse}; therefore control symbols are a solution if one desires a command to use in a mathematics context where an optional argument could cause issues.
-%An example for this from \pkg{amsmath} is line breaks in multi-line display equations:
-%\begin{verbatim}
-%\begin{align}
-%a &= b+c \\
-%[x y z] &= [1 2 3]
-%\end{align}
-%\end{verbatim}
-%In \pkg{amsmath} this requires specific measures to be taken to allow \verb"\\" to behave correctly; with \pkg{xparse} this functionality is built in.
-
-Despite the current design covering most regular use-cases, we have considered adding a further option to \pkg{xparse} to define the space-skipping behaviour as desired by a package author.
-But at this very moment we've rejected adding this additional complexity, because environments that change their parsing behaviour based on their intended use make a \LaTeX-based language more difficult to predict; one could imagine such behaviour causing difficulties down the road for automatic syntax checkers and so forth.
-However, we don't make such decisions in a vacuum and we're always happy to continue to discuss such matters.
-
-
-\section{\ldots and for 2014 onwards}
-
-There is one (understandable) misconception that shows up once in a while with people claiming that
-\[
- \textrm{\pkg{expl3}} = \textrm{\LaTeX3}.
-\]
-However, the correct relation would be a subset,
-\[
- \textrm{\pkg{expl3}} \subset \textrm{\LaTeX3},
-\]
-with \pkg{expl3} forming the Core Language Layer on which there will eventually be several other layers on top that \mbox{provide}
-\begin{itemize}
-\item higher-level concepts for typesetting (Typesetting Foundation Layer),
-\item a designer interface for specifying document structures and layouts (Designer Layer),
-\item and finally a Document Representation Layer that implements document level syntax.
-\end{itemize}
-Of those four layers, the lowest one\Dash\pkg{expl3}\Dash is available for use and with \pkg{xparse} we have an instance of the Document Representation Layer modeled largely after \LaTeXe{} syntax (there could be others). Both can be successfully used within the current \LaTeXe{} framework and as mentioned above this is increasingly happening.
-
-The middle layers, however, where the rubber meets the road, are still at the level of prototypes and ideas (templates, \pkg{ldb}, galley, \pkg{xor} and all the good stuff) that need to be revised and further developed to arrive at a \LaTeX3 environment that can stand on its own and that is to where we want to return in 2014.
-
-An overview on this can be found in the answer to "What can *I* do to help The \LaTeX{} Project?"\ on Stack Exchange,\footnote{\url{http://tex.stackexchange.com/questions/45838}}
-which is reproduced below in slightly abridged form.
-This is of course not the first time that we have discussed such matters, and you can find similar material in other publications such as those at \url{http://latex-project.org}; e.g., the architecture talk given at the TUG 2011 conference.
-
-\bigskip
-
-\begin{center}
-\explbanner
-\end{center}
-
-\newpage
-\section{What can you do for The \LaTeX{} Project?}
-\textbf{By Frank Mittelbach}
-
-My vision of \LaTeX3 is really a system with multiple layers that provide interfaces for different kinds of roles. These layers are
-\begin{itemize}
-\item the underlying engine (some \TeX\ variant)
-\item the programming layer (the core language, i.e., \pkg{expl3})
-\item the typesetting foundation layer (providing higher-level concepts for typesetting)
-\item the typesetting element layer (templates for all types of document elements)
-\item the designer interface foundation layer
-\item the class designer layer (where instances of document elements with specific settings are defined)
-\item document representation layer (that provides the input syntax, i.e., how the author uses elements)
-\end{itemize}
-If you look at it from the perspective of user roles then there are at least three or four roles that you can clearly distinguish:
-\begin{itemize}
-\item The Programmer (template and functionality provider)
-\item The Document Type Designer (defines which elements are available; abstract syntax and semantics)
-\item The Designer (typography and layout)
-\item The Author (content)
-\end{itemize}
-As a consequence The \LaTeX{} Project needs different kinds of help depending on what layer or role we are looking at.
-
-The "Author" is using, say, list structures by specifying something like \verb"\begin{itemize} \item" in his documents. Or perhaps by writing \Verb|<ul> ... </ul>| or whatever the UI representation offers to him.
-
-The "Document Type Designer" defines what kind of abstract document elements are available, and what attributes or arguments those elements provide at the author level. E.g., he may specify that a certain class of documents provides the display lists "enumerate", "itemize" and "description".
-
-The "Programmer" on the other hand implements templates (that offer customizations) for such document elements, e.g., for display lists. What kind of customization possibilities should be provided by the "Programmer" is the domain of the "Document Designer"; he drives what kind of flexibility he needs for the design. In most cases the "Document Designer" should be able to simply select templates (already written) from a template library and only focus on the design, i.e., instantiating the templates with values so that the desired layout for "itemize" lists, etc., is created.
-
-In real life a single person may end up playing more than one role, but it is important to recognise that all of them come with different requirements with respect to interfaces and functionality.
-
-\subsection{Programming Layer}
-
-The programming layer consists of a core language layer (called \pkg{expl3} (EXP erimental L aTeX 3) for historical reasons and now we are stuck with it \texttt{:-)}) and two more components: the "Typesetting Foundation Layer" that we are currently working on and the "Typesetting Element Layer" that is going to provide customizable objects for the design layer. While \pkg{expl3} is in many parts already fairly complete and usable the other two are under construction.
-
-Help is needed for the programming layer in
-\begin{itemize}
-\item helping by extending and completing the regression test suite for \pkg{expl3}
-\item helping with providing good or better documentation, including tutorials
-\item possibly helping in coding additional core functionality\Dash but that requires, in contrast to the first two points, a good amount of commitment and experience with the core language as otherwise the danger is too high that the final results will end up being inconsistent
-\end{itemize}
-Once we are a bit further along with the "Typesetting Foundation Layer" we would need help in
-providing higher-level functionality, perhaps rewriting existing packages/code for elements making use of extended possibilities.
-Two steps down the road (once the "\mbox{Designer} Layer" is closer to being finalized) we would need help with developing templates for all kinds of elements.
-
-In summary for this part, we need help from people interested in programming in \TeX\ and \pkg{expl3} and/or interested in providing documentation (but for this a thorough understanding of the programming concepts is necessary too).
-
-\subsection{Design Layer}
-
-The intention of the design layer is to provide interfaces that allow specifying layout and typography styles in a declarative way. On the implementation side there are a number of prototypes (most notably \pkg{xtemplate} and the recent reimplementation of \pkg{ldb}).
-These need to be unified into a common model which requires some more experimentation and probably also some further thoughts.
-
-But the real importance of this layer is not the implementation of its interfaces but the conceptual view of it: provisioning a rich declarative method (or methods) to describe design and layout. I.e., enabling a designer to think not in programs but in visual representations and relationships.
-
-So here is the big area where people who do not feel they can or want to program \TeX's bowels can help. What would be extremely helpful (and in fact not just for \LaTeX3) would be
-\begin{itemize}
-\item collecting and classifying a \emph{huge} set of layouts and designs
-\begin{itemize}[nosep]
-\item designs for individual document elements (such as headings, TOCs, etc)
-\item document designs that include relationships between document elements
-\end{itemize}
-\item thinking about good, declarative ways to specify such designs
-\begin{itemize}[nosep]
-\item what needs to be specified
-\item to what extent and with what flexibility
-\end{itemize}
-\end{itemize}
-I believe that this is a huge task (but rewarding in itself) and already the first part of collecting existing design specifications will be a major undertaking and will need coordination and probably a lot of work. But it will be a huge asset towards testing any implementations and interfaces for this layer later on.
-
-\subsection{Document Interface Layer}
-
-If we get the separation done correctly, then this layer should effectively offer nothing more than a front end for parsing the document syntax and transforming it into an internal standardised form. This means that on this layer one should not see any (or not much) coding or computation.
-
-It is envisioned that alternative document syntax models can be provided.
-At the moment we have a draft solution in \pkg{xparse}.
-This package offers a document syntax in the style of \LaTeXe, that is with \verb|*|-forms, optional arguments in brackets, etc., but with a few more bells and whistles such as a more generalized concept of default values, support for additional delimiters for arguments, verbatim-style arguments, and so on.
-It is fairly conventional though.
-In addition when it was written the clear separation of layers wasn't well-defined and so the package also contains components for conditional programming that I no longer think should be there.
-
-Bottom line on what is needed for this layer is to
-\begin{itemize}
-\item think about good syntax for providing document content from "the author" perspective
-\item think about good syntax for providing document content from an "application to typesetting" perspective, i.e., the syntax and structure for automated typesetting where the content is prepared by a system/application rather than by a human
-\end{itemize}
-These two areas most likely need strict structure (as automation works much better with structures that do not have a lot of alternative possibilities and shortcuts, etc.) and even when just looking at the human author a lot of open questions need answering.
-And these answers may or may not be to painfully stick with existing \LaTeXe\ conventions in all cases (or perhaps with any?).
-
-None of this requires coding or \pkg{expl3} experience. What it requires is familiarity with existing input concepts, a feel for where the pain points currently are and the willingness to think and discuss what alternatives and extensions could look like.
-
-\subsection{In Summary}
-
-Basically help is possible on any level and it doesn't need to involve programming. Thoughts are sprinkled throughout this article, but here are a few more highlights:
-\begin{itemize}
-\item help with developing/improving the core programming layer by
-\begin{itemize}[nosep]
-\item joining the effort to improve the test suite
-\item help improving the existing (or not existing) documentation
-\item joining the effort to produce core or auxiliary code modules
-\end{itemize}
-\item help on the design layer by
-\begin{itemize}[nosep]
-\item collecting and classifying design tasks
-\item thinking and suggesting ways to describe layout requirements in a declarative manner
-\end{itemize}
-\item help on shaping the document interface layer
-\end{itemize}
-These concepts, as well as their implementation, are under discussion on the list \texttt{latex-l}.\footnote{Instructions for joining and browsing archives at:\\ \url{http://latex-project.org/code.html}}
-The list has only a fairly low level of traffic right now as actual implementation and development tasks are typically discussed directly among the few active implementors. But this might change if more people join.
-
-\subsection{And something else \dots}
-
-The people on the \LaTeX3 team are also committed to keeping \LaTeXe\ stable and even while there isn't that much to do these days there remains the need to resolve bug reports (if they concern the 2e core), provide new distributions once in a while, etc. All this is work that takes effort or remains undone or incomplete. Thus here too, it helps the \LaTeX3 efforts if we get help to free up resources.
-
-\end{document}
-
-
-
diff --git a/macros/latex/contrib/l3kernel/l3news10.pdf b/macros/latex/contrib/l3kernel/l3news10.pdf
deleted file mode 100644
index e921d2c81b..0000000000
--- a/macros/latex/contrib/l3kernel/l3news10.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news10.tex b/macros/latex/contrib/l3kernel/l3news10.tex
deleted file mode 100644
index 88291e848f..0000000000
--- a/macros/latex/contrib/l3kernel/l3news10.tex
+++ /dev/null
@@ -1,220 +0,0 @@
-% Copyright 2016 The LaTeX3 Project
-\documentclass{ltnews}
-
-\PassOptionsToPackage{colorlinks}{hyperref}
-
-\usepackage{csquotes}
-\usepackage{hologo}
-\usepackage{ragged2e}
-\usepackage{underscore}
-
-\AtBeginDocument{%
- \renewcommand*{\LaTeXNews}{\LaTeX3~News}%
- \RaggedRight
- \setlength\parindent{1em}%
-}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\publicationmonth{November}
-\publicationyear{2016}
-\publicationissue{10}
-
-% Avoid hyphenation of csnames
-\makeatletter
-\protected\edef\cs#1{%
- \noexpand\path{\@backslashchar#1}%
-}
-\makeatother
-
-\begin{document}
-
-\maketitle
-
-There has been something of a gap since the last \LaTeX3 News, but this does
-not mean that work has not been going on. The Team have been working on a
-number of areas, many of which reflect wider take-up of \pkg{expl3}. There have
-also been a number of significant new developments in the \LaTeX3
-\enquote{sphere} in the last two years.
-
-\section{\pkg{l3build}: Testing \LaTeX{} packages}
-
-Testing has been an important part of the work of the team since they assumed
-maintenance of \LaTeX{} over twenty years ago. Various scripts have been used
-over that time by the team for testing, but these have until recently not been
-set up for wider use.
-
-With the general availability of \hologo{LuaTeX} it is now possible to be sure
-that every \TeX{} user has a powerful general scripting language available:
-Lua. The team have used this to create a new general testing system for \TeX{}
-code, \pkg{l3build}. This \emph{is} designed to be used beyond the team, so is
-now available in \TeX{} Live and \hologo{MiKTeX} and is fully documented.
-Testing using \pkg{l3build} makes use of a normalised version of the
-\texttt{.log} file, so can test any aspect of \TeX{} output (e.g., by using
-\cs{showbox}) or its algorithms (by displaying results in the \texttt{.log}).
-
-Part of the remit for creating \pkg{l3build} was to enable the team to work
-truly cross-platform and to allow testing using multiple \TeX{} engines
-(earlier systems were limited to a single engine, normally \eTeX{}). The new
-testing system means we are in a much stronger position to support a variety of
-engines (see below). It has also enabled us to give useful feedback on
-development of the \hologo{LuaTeX} engine.
-
-As well as the core capability in testing, \pkg{l3build} also provides a
-\enquote{one stop} script for creating release bundles. The script is
-sufficiently flexible that for many common \LaTeX{} package structures, setting
-up for creating releases will require only a few lines of configuration.
-
-In addition to the documentation distributed with \pkg{l3build}, the project
-website~\cite[publications in 2014]{10:project-publications} contains some
-articles, videos and conference presentations that explain how to use
-\pkg{l3build} to manage and test any type of (\LaTeX{}) package.
-
-\section{Automating \pkg{expl3} testing}
-
-As well as developing \pkg{l3build} for local use, the team have also set up
-integration testing for \pkg{expl3} using the Travis-CI system. This means that
-\emph{every} commit to the \LaTeX3 code base now results in a full set of tests
-being run. This has allowed us to significantly reduce the number of occasions
-where \pkg{expl3} needs attention before being released to CTAN.
-
-Automated testing has also enabled us to check that \pkg{expl3} updates do not
-break a number of key third-party packages which use the programming
-environment.
-
-\section{Refining \pkg{expl3}}
-
-Work continues to improve \pkg{expl3} both in scope and robustness. Increased
-use of the programming environment means that code which has to-date been
-under-explored is being used, and this sometimes requires changes to the code.
-
-The team have extended formal support in \pkg{expl3} to cover the engines
-p\TeX{} and up\TeX{}, principally used by Japanese \TeX{} users. This has been
-possible in part due to the \pkg{l3build} system discussed above.
-Engine-dependent variations between \hologo{pdfTeX}, \hologo{XeTeX},
-\hologo{LuaTeX} and (u)p\TeX{} are now well-understood and documented. As part
-of this process, the \enquote{low-level} part of \pkg{expl3}, which saves all
-primitives, now covers essentially all primitives found in all of these
-engines.
-
-The code in \pkg{expl3} is now entirely self-contained, loading no other
-third-party packages, and can also be loaded as a generic package with plain
-\TeX{}, \emph{etc.} These changes make it much easier to diagnose problems and
-make \pkg{expl3} more useful. In particular it can be used as a programming
-language for generic packages, that then can run without modifications under
-different formats!
-
-The team have made a range of small refinements to both internals and
-\pkg{expl3} interfaces. Internal self-consistency has also been improved, for
-example removing almost all use of \texttt{nopar} functions. Performance
-enhancements to the \pkg{l3keys} part of \pkg{expl3} are ongoing and should
-result in significantly faster key setting. As keyval methods are increasingly
-widely used in defining behaviours, this will have an impact on compile times
-for end users.
-
-\section{Replacing \cs{lowercase} and \cs{uppercase}}
-
-As discussed in the last \LaTeX3 News, the team have for some time been keen to
-provide new interfaces which do not directly expose (or in some cases even use)
-the \TeX{} primitives \cs{lowercase} and \cs{uppercase}. We have now created a
-series of different interfaces that provide support for the different
-conceptual uses which may flow from the primitives:
-\begin{itemize}
- \item For case changing text, \cs{tl_upper_case:n}, \cs{tl_lower_case:n},
- \cs{tl_mixed_case:n} and related language-aware functions. These are
- Unicode-capable and designed for working with text. They also allow for
- accents, expansion of stored text and leaving math mode unchanged. At
- present some of the interface decisions are not finalised so they are
- marked as experimental, but the team expect the core concept to be stable.
- \item For case changing programming strings, \cs{str_upper_case:n},
- \cs{str_lower_case:n} and \cs{str_fold_case:n}. Again these are
- Unicode-aware, but in contrast to the functions for text are not
- context-dependent. They are intended for caseless comparisons, constructing
- command names on-the-fly and so forth.
- \item For creating arbitrary character tokens, \cs{char_generate:nn}. This
- is based on the \cs{Ucharcat} primitive introduced by \hologo{XeTeX}, but
- with the ideas extended to other engines. This function can be used to
- create almost any reasonable token.
- \item For defining active characters, \cs{char_set_active_eq:NN} and
- related functions. The concept here is that active characters should be
- equivalent to some named function, so one does not directly define the
- active character.
-\end{itemize}
-
-\section{Extending \pkg{xparse}}
-
-After discussions at TUG2015 and some experimentation, the team have added a
-new argument type, \texttt{e} (\enquote{embellishment}), to \pkg{xparse}.
-This allows arguments similar to
-\TeX{} primitive sub- and superscripts to be accepted. Thus
-\begin{verbatim}
-\DeclareDocumentCommand\foo{e{^_}}
- {\showtokens{"#1"}}
-\foo^{Hello} world
-\end{verbatim}
-will show
-\begin{verbatim}
-"{Hello}{-NoValue-}".
-\end{verbatim}
-
-At present, this argument type is experimental: there are a number of models
-which may make sense for this interface.
-
-\section{A new \cs{parshape} model}
-
-As part of development of \pkg{l3galley}, Joseph Wright has proposed a new
-model for splitting up the functions of the \cs{parshape} primitive into three
-logical elements:
-\begin{itemize}
- \item Margins between the edges of the galley and the paragraph (for example
- an indented block);
- \item Cut-out sections running over a fixed number of lines, to support
- \enquote{in place} figures and so forth;
- \item Running or single-paragraph shape.
-\end{itemize}
-
-There are additional elements to consider here, for example whether lines are
-the best way to model the length of shaping, how to handle headings, cut-outs
-at page breaks, \emph{etc.}
-
-
-\section{Globally optimized pagination of documents}
-
-Throughout 2016 Frank Mittelbach has worked on methods and algorithms for
-globally optimizing the pagination of documents including those that contain
-floats. Early research results have been presented at Bacho\TeX{} 2016, TUG
-2016 in Toronto and later in the year at \mbox{DocEng'16}, the ACM Symposium on
-Document Engineering in Vienna. A link to the ACM paper (that allows a download
-free of charge) can be found on the project
-website~\cite{10:project-publications}. The site also holds the speaker notes from
-Toronto and will host a link to a video of the presentation once it becomes
-available.
-
-The framework developed by Frank is based on the extended functionality
-provided by \hologo{LuaTeX}, in particular its callback functions that allow
-interacting with the typesetting process at various points. The algorithm that
-determines the optimal pagination of a given document is implemented in {Lua}
-and its results are then used to direct the formatting done by the \TeX{}
-engine.
-
-At the current point in time this a working prototype but not yet anywhere near
-a production-ready system. However, the work so far shows great potential and
-Frank is fairly confident that it will eventually become a generally usable
-solution.
-
-\section{Looking forward}
-
-The \hologo{LuaTeX} engine has recently reached version~1.0. This may presage a
-stable \hologo{LuaTeX} and is likely to result in wider use of this engine in
-production documents.If that happens we expect to implement some of the more
-complex functionality (such as complex pagination requirements and models) only
-for \hologo{LuaTeX}.
-
-\begin{thebibliography}{10}
- \raggedright
- \bibitem{10:project-publications}
- Links to various publications by members of the \LaTeX{} Project Team.
- \newblock \url{https://www.latex-project.org/publications}.
-\end{thebibliography}
-
-\end{document}
diff --git a/macros/latex/contrib/l3kernel/l3news11.pdf b/macros/latex/contrib/l3kernel/l3news11.pdf
deleted file mode 100644
index a4866d55e7..0000000000
--- a/macros/latex/contrib/l3kernel/l3news11.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news11.tex b/macros/latex/contrib/l3kernel/l3news11.tex
deleted file mode 100644
index a1fd8a129c..0000000000
--- a/macros/latex/contrib/l3kernel/l3news11.tex
+++ /dev/null
@@ -1,208 +0,0 @@
-% Copyright 2017-2018 The LaTeX3 Project
-
-\documentclass{ltnews}
-
-\PassOptionsToPackage{colorlinks}{hyperref}
-
-\usepackage{csquotes}
-\usepackage{hologo}
-\usepackage{ragged2e}
-\usepackage{underscore}
-
-
-%%% wrong in ltnews.cls ... so some tmp fix here at the moment:
-\makeatletter
-\renewcommand{\subsubsection}{%
- \@startsection
- {subsubsection}{2}{\leftmargini}{-1.5ex \@plus -1ex \@minus -.2ex}%
- {1sp}{\@subheadingfont}%
-}
-\makeatother
-
-
-\AtBeginDocument{%
- \renewcommand*{\LaTeXNews}{\LaTeX3~News}%
- \RaggedRight
- \setlength\parindent{1em}%
-}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\publicationmonth{February}
-\publicationyear{2018}
-\publicationissue{11}
-
-% Avoid hyphenation of csnames
-\makeatletter
-\protected\edef\cs#1{%
- \noexpand\path{\@backslashchar#1}%
-}
-\makeatother
-\hyphenpenalty=10000 \exhyphenpenalty=10000
-
-\begin{document}
-
-\maketitle
-
-\tableofcontents
-
-\section{Move of sources from Subversion to Git}
-
-The \LaTeX{} team have used a variety of version control systems over the life
-of the \LaTeX3 sources. For a long time we maintained the \LaTeX3 sources in
-Subversion (\texttt{svn}) but also provided a read-only clone of them on GitHub using
-SubGit from TMate Software~\cite{SubGit} to synchronize the two
-repositories---a solution that worked very well.
-
-We have now retired the Subversion repository and completely moved over to Git,
-with the master \LaTeX3 repository hosted on GitHub:
-\url{https://github.com/latex3/latex3}. This new approach means we are (slowly)
-adopting some new approaches to development, for example branches and accepting
-pull requests.
-
-\subsection{Version identifiers}
-
-Following this change, we have removed Subversion \verb=$Id= lines from the
-\LaTeX3 sources. At present, we will be retaining \cs{GetIdInfo} as there are
-several possible use cases. The \LaTeX3 sources now have only release date
-strings as identifiers. However, the team recommend that package authors
-include version information directly in \cs{ProvidesExplPackage} (or similar)
-lines.
-
-\section{\pkg{expl3} updates and extensions}
-
-Work has continued on the codebase over the last year, with both small
-changes/fixes and more substantial changes taking place. The following sections
-summarise some of the more notable changes.
-
-\subsection{\pkg{l3sort} moves to the kernel}
-
-Sorting is an important ability, and for some time the team have provided a
-stand-alone \pkg{l3sort} to support this. The functionality has seen wide take
-up, and so has now been integrated directly into the kernel. This took place in
-parallel with some interface changes to \enquote{round out} the code.
-
-\subsection{Boolean functions}
-
-For some time, the team have been aware that boolean expressions can fail in
-certain circumstances, leading to low-level errors. This is linked to two
-features of the long-standing \cs{bool_if:n(TF)} function: expandable operation
-and short-circuit evaluation.
-
-Addressing that has meant two changes: altering \cs{bool_if:n(TF)} to
-\emph{always} evaluate each part of the expression, and introducing new
-short-circuit functions without the issue. The latter are \verb|lazy| in \pkg{expl3}
-terms:
-\begin{itemize}
-\item \cs{bool_lazy_all:n(TF)}
-\item \cs{bool_lazy_and:nn(TF)}
-\item \cs{bool_lazy_any:n(TF)}
-\item \cs{bool_lazy_or:nn(TF)}
-\end{itemize}
-These new, stable functions are now the recommended way of handling boolean
-evaluations. Package authors are encouraged to employ these new functions as
-appropriate.
-
-\subsection{Revision of \pkg{l3file}}
-
-Large parts of \pkg{l3file} have been revised to give a better separation of
-path/file/extension. This has resulted in the addition of a number of new support
-functions and variables.
-
-At the same time, new experimental functions have been added to utilise a
-number of useful primitives in \hologo{pdfTeX}{}: \cs{file_get_mdfive_hash:nN},
-\cs{file_get_size:nN} and \cs{file_get_timestamp:nN}. Currently, \hologo{XeTeX}
-does not support getting file size/timestamp information: this is available in
-other engines.
-
-Paralleling these changes, we have added (experimental) support for shell
-escape to the \pkg{l3sys} module, most notably \cs{sys_shell_now:n}. A range of
-test booleans are also available to check whether shell escape is enabled.
-
-\subsection{Detection of \cs{cs_generate_variant:Nn} errors}
-
-The ability to generate variants is an important feature of \pkg{expl3}. At
-the same time, there are crucial aspects of this approach that can be
-misunderstood by users. In particular, the requirement that variants map
-correctly to an underlying \verb|N|- or \verb|n|-type base function is sometimes
-misunderstood.
-
-To help detect and correct these cases, \cs{cs_generate_variant:Nn} now
-carries out error checking on its arguments, and raises a warning where
-it is mis-applied. At present, the team have avoided making this an error
-as it is likely to be seen by end users rather than directly by package
-developers. In time, we are likely to revisit this and tighten up
-further on this key requirement.
-
-\subsection{Accessing random data}
-
-To support randomised data selection, we have introduced a family of
-experimental functions which use under\-lying engine support for random values,
-and provide one entry at random from the data type.
-
-At the same time, we have addressed some issues with uniformity stemming from
-the random number function used by \hologo{pdfTeX}{} and inherited by other
-engines. This means that \pkg{expl3}'s FPU will generate \emph{pseudo}-random
-values across the range of possible outputs.
-
-\subsection{More powerful debugging}
-
-A new set of debugging functions have been added to the kernel. These allow
-debug code to be enabled locally using the new option \verb|enable-debug| along
-with functions \cs{debug_on:n} and \cs{debug_off:n}. Accompanying this change, we
-have improved the handling of global/local consistency in variable setting.
-
-\subsection{Mark-up changes in \pkg{l3doc}}
-
-Since the introduction of the \verb|__| syntax to mark internal functions, the
-need for explicit markup of internal material in sources has been negated.
-As such, we have now dropped the requirement to mark internal material with
-\verb|[aux]| when using \pkg{l3doc}. Instead, the status of functions and
-variables is auto-detected from the presence of \verb|__|. For cases where
-non-standard names are used for internal code, the mark-up \verb|[int]| is
-retained, \emph{e.g.}
-\begin{verbatim}
-\begin{macro}[int]{\l@expl@enable@debug@bool}
-\end{verbatim}
-
-\newpage
-\section{\pkg{l3build} updates}
-
-Work on \pkg{l3build} has continued in parallel with \pkg{expl3} work, in
-particular continuing to develop features to allow wider use of the tool.
-
-Paralleling the move of the \LaTeX3 codebase to Git, \pkg{l3build} now has its
-own separate Git repository: \url{https://github.com/latex3/l3build}. This will
-enable us to involve other developers in the Lua code required for the build
-system. At the same time, we have split the code into a number of small source
-files, again to ease development both for the team ourselves and for potential
-collaborators.
-
-Another major change is that \pkg{l3build} can now retain the structure of
-source repositories when creating a CTAN archive. Whilst the team favor `flat'
-source setups, other users prefer structured approaches. Most notably, this
-new \pkg{l3build} functionality means that it is now used to carry out
-\pkg{beamer} releases.
-
-The other major new feature is a new approach to multiple test setups, which
-replaces the older \verb|--testfiledir| option. In the new approach, separate
-configuration files are listed in the main \verb|build.lua| script, and can be
-selected manually using a new \verb|--config| switch. This new approach allows
-complex test setups to be run in a totally automated fashion, which is
-important for kernel testing.
-
-Some changes to the normalisation routines have been carried out, some to deal
-with upcoming \hologo{LuaTeX} changes, others to address aspects which show up
-only in some tests. This has required \verb|.tlg| updates in some cases: as far
-as possible, we strive to avoid requiring changes to the reference files.
-
-\begin{thebibliography}{10}
- \raggedright
- \bibitem{SubGit}
- \emph{SubGit}, TMate Software, \url{https://subgit.com}
- \bibitem{11:project-publications}
- Links to various publications by members of the \LaTeX{} Project Team.
- \newblock \url{https://www.latex-project.org/publications}
-\end{thebibliography}
-
-\end{document}
diff --git a/macros/latex/contrib/l3kernel/l3news12.pdf b/macros/latex/contrib/l3kernel/l3news12.pdf
deleted file mode 100644
index 4b6072bca1..0000000000
--- a/macros/latex/contrib/l3kernel/l3news12.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news12.tex b/macros/latex/contrib/l3kernel/l3news12.tex
deleted file mode 100644
index f41e4b3690..0000000000
--- a/macros/latex/contrib/l3kernel/l3news12.tex
+++ /dev/null
@@ -1,383 +0,0 @@
-% Copyright 2019 The LaTeX3 Project
-\documentclass{ltnews}
-
-\usepackage{csquotes}
-\usepackage{hologo}
-\usepackage{ragged2e}
-
-\PassOptionsToPackage{colorlinks}{hyperref}
-
-%%% wrong in ltnews.cls ... so some tmp fix here at the moment:
-\makeatletter
-\renewcommand{\subsubsection}{%
- \@startsection
- {subsubsection}{2}{\leftmargini}{-1.5ex \@plus -1ex \@minus -.2ex}%
- {1sp}{\@subheadingfont}%
-}
-\makeatother
-
-\AtBeginDocument{%
- \renewcommand*{\LaTeXNews}{\LaTeX3~News}%
- \RaggedRight
- \setlength\parindent{1em}%
-}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\publicationmonth{January}
-\publicationyear{2020}
-\publicationissue{12}
-
-% Avoid hyphenation of csnames
-\makeatletter
-\protected\edef\cs#1{%
- \noexpand\path{\@backslashchar#1}%
-}
-\makeatother
-\hyphenpenalty=10000
-\exhyphenpenalty=10000
-\hbadness=2500
-
-\makeatletter
-\renewcommand*\l@section[2]{%
- \ifnum \c@tocdepth >\z@
- \addpenalty\@secpenalty
- \addvspace{0.7em \@plus\p@}% reduce from 1.0em
- \setlength\@tempdima{1.5em}%
- \begingroup
- \parindent \z@ \rightskip \@pnumwidth
- \parfillskip -\@pnumwidth
- \leavevmode \bfseries
- \advance\leftskip\@tempdima
- \hskip -\leftskip
- #1\nobreak\hfil
- \nobreak\hb@xt@\@pnumwidth{\hss #2%
- \kern-\p@\kern\p@}\par
- \endgroup
- \fi}
-\makeatother
-
-\newenvironment{compactitemize}%
- {\begin{itemize}%
- \setlength{\itemsep}{0pt}%
- \setlength{\parskip}{0pt}%
- \setlength{\parsep} {0pt}%
- }%
- {\end{itemize}}
-
-
-\begin{document}
-
-\maketitle
-
-\tableofcontents
-
-\section{Introduction}
-
-There has been quite a gap since the last \emph{\LaTeX3 News} (Issue~11,
-February 2018), and so there is quite a bit to cover here. Luckily, one of the
-things there \emph{is} to cover is that we are using a more formalised approach
-for logging changes, so writing up what has happened is a bit easier.
-(By mistake \LaTeX3 News~11 itself did not get \emph{published} when written, but is
-now available: we have kept the information it contains separate as it
-is a good summary of the work that had happened in 2017.)
-
-Work has continued apace across the \LaTeX3 codebase in the last (nearly) two
-years. A lot of this is ultimately focussed on making the core of \pkg{expl3}
-even more stable: \emph{squeezing} out more experimental ideas, refining
-ones we have and making it a serious option for core \LaTeX{} programming.
-
-As a result of these activities, the \LaTeX3 programming layer will be
-available as part of the kernel of \LaTeXe{} from 2020-02-02 onwards, i.e., can
-be used without explicitly loading \pkg{expl3}. See \emph{\LaTeX{}
- News~31}~\cite{12:site-news} for more details on this.
-
-\section{New features in \pkg{expl3}}
-
-\subsection{A new argument specifier: \texttt{e}-type}
-
-During 2018, the team worked with the \TeX{} Live, \hologo{XeTeX} and
-(u)p\TeX{} developers to add the \cs{expanded} primitive to \hologo{pdfTeX}{},
-\hologo{XeTeX} and (u)p\TeX{}. This primitive was originally suggested for
-\hologo{pdfTeX}{} v1.50 (never released), and was present in \hologo{LuaTeX}{}
-from the start of that project.
-
-Adding \cs{expanded} lets us create a new argument specifier: \texttt{e}-type
-expansion. This is \emph{almost} the same as \texttt{x}-type, but is itself
-expandable. (It also doesn't need doubled \verb|#| tokens.) That's incredibly
-useful for creating function-like macros: you can ensure that \emph{everything}
-is expanded in an argument before you go near it, with not an \cs{expandafter}
-in sight.
-
-\subsection{New functions}
-
-New programming tools have appeared in various places across \pkg{expl3}.
-The highlights are
-\begin{compactitemize}
- \item Shuffling of sequences to allow randomization
- \item Arrays of integers and floating point values; these have constant-time
- access
- \item Functions to return values after system shell usage
- \item Expandable access to file information, including file size, MD5
- hash and modification date
-\end{compactitemize}
-
-For the latter, we have revised handling of file names considerably. There is
-now support for finding files in expansion contexts (by using the
-\cs{(pdf)filesize} primitive). Spaces and quotes in file names are now fully
-normalised, in a similar manner to the approach used by the latest \LaTeXe{}
-kernel.
-
-\subsection{String conversion moves to \pkg{expl3}}
-
-In addition to entirely new functions, the team have moved the
-\pkg{l3str-convert} module from the \pkg{l3experimental} bundle into the
-\pkg{expl3} core. This module is essential for dealing with the need to produce
-UTF-16 and UTF-32 strings in some contexts, and also offers
-built-in escape for url and PDF strings.
-
-\subsection{Case changing of text}
-
-Within \pkg{expl3}, the team have renamed and reworked the ideas from
-\cs{tl_upper_case:n} and so on, creating a new module \pkg{l3text}. This is a
-\enquote{final} home for functions to manipulate \emph{text}; token lists that
-can reasonably be expected to expand to plain text plus limited markup, for
-example emphasis and labels/references. Moving these functions, we have also
-made a small number of changes in other modules to give consistent names to
-functions: see the change log for full details.
-
-Over time, we anticipate that functions for other textual manipulation will be
-added to this module.
-
-\section{Notable fixes and changes}
-
-\subsection{File name parsing}
-
-The functions for parsing file names have been entirely rewritten, partly as
-this is required for the expandable access to file information mentioned above.
-The new code correctly deals with spaces and quote marks in file names and
-splits the path/name/extension.
-
-\subsection{Message formatting}
-
-The format of messages in \pkg{expl3} was originally quite text-heavy, the idea
-being that they would stand out in the \texttt{.log} file. However, this made
-them hard to find by a regular expression search, and was very different from
-the \LaTeXe{} message approach. The formatting of \pkg{expl3} messages has been
-aligned with that from the \LaTeXe{} kernel, such that IDE scripts and
-similar will be able to find and extract them directly.
-
-\subsection{Key inheritance}
-
-A number of changes have been made to the inheritance code for keys,
-to allow inheritance to work \enquote{as expected} in (almost) all
-cases.
-
-\subsection{Floating point juxtaposition}
-
-Implicit multiplication by juxtaposition, such as \verb|2pi|, is now handled
-separately from parenthetic values. Thus for example \verb|1in/1cm| is treated
-as equal to \verb|(1in)/(1cm)| and thus yields \verb|2.54|, and \verb|1/2(pi+pi)| is
-equal to \verb|pi|.
-
-\subsection{Changing box dimensions}
-
-\TeX{}'s handling of boxes is subtly different from other registers, and this
-shows up in particular when you want to resize a box. To bring treatment of
-boxes, or rather the grouping behavior of boxes, into line with other
-registers, we have made some internal changes to how functions such as
-\cs{box_set_wd:N} are implemented. This will be transparent for
-\enquote{well-behaved} use cases of these functions.
-
-\subsection{More functions moved to stable}
-
-A large number of functions which were introduced as candidates have been
-evaluated and moved to stable status. The team hopes to move all functions
-in \pkg{expl3} to stable status, or move them out of the core, over the coming
-months.
-
-\subsection{Deprecations}
-
-There have been two notable sets of deprecations over the past 18 months.
-First, we have rationalised all of the \enquote{raw} primitive names to the
-form \cs{tex_<name>:D}. This means that the older names, starting
-\mbox{\cs{pdftex_...}}, \cs{xetex_...}, etc., have been removed.
-
-Secondly, the use of integer constants, which dates back to the earliest days
-of \pkg{expl3}, is today more likely to make the code harder to read than
-anything else. Speed improvements in engines mean that the tiny enhancements in
-reading such constants are no longer required. Thus for example \cs{c_two} is
-deprecated in favour of simply using \texttt{2}.
-
-In parallel with this, a number of older \texttt{.sty} files have been removed.
-These older files provided legacy stubs for files which have now been
-integrated in the \pkg{expl3} core. They have now had sufficient time to allow
-users to update their code.
-
-\section{Internal improvements}
-
-\subsection{Cross-module functions}
-
-The team introduced the idea of internal module functions some time ago. Within
-the kernel, there are places where functions need to be used in multiple
-modules. To make the nature of the kernel interactions clearer, we have worked
-on several aspects
-\begin{compactitemize}
- \item Reducing as far as possible cross-module functions
- \item Making more generally-useful functions public, for example
- scan marks
- \item Creating an explicit cross-kernel naming convention for
- functions which are internal but are essential to use in multiple
- kernel modules
-\end{compactitemize}
-
-\subsection{The backend}
-
-Creating graphics, working with color, setting up hyperlinks and so on require
-backend-specific code. Here, backends are for example \texttt{dvips},
-\texttt{xdvipdfmx} and the direct PDF mode in \hologo{pdfTeX} and
-\hologo{LuaTeX}. These functions are needed across the \LaTeX3 codebase and
-have to be updated separately from the \pkg{expl3} core. To facilitate that, we
-have split those sources into a separate bundle, which can be updated as
-required.
-
-At the same time, the code these files contain is very low-level and is best
-described as internal. We have re-structured how the entire set of functions
-are referred to such that they are now internal for the area they implement,
-for example image inclusion, box affine transformations, etc.
-
-\section{Better support for (u)p\texorpdfstring{\kern-.05em}{}\TeX{}}
-
-The developers behind (u)p\TeX{} (Japanese \TeX{}) have recently enhanced their
-English documentation (see \url{https://github.com/texjporg/ptex-manual}).
-Using this new information, we have been able to make internal adjustments to
-\pkg{expl3} to better support these engines.
-
-\section{Options}
-
-A new option \texttt{undo-recent-deprecations} is now available for cases where
-a document (or package) requires some \pkg{expl3} functions that have been
-formally removed after deprecation. This is to allow \emph{temporary}
-work-arounds for documents to be compiled whilst code is begin updated.
-
-The \enquote{classical} options for selecting backends (\texttt{dvips},
-\texttt{pdftex}, etc.)\ are now recognised in addition to the native key--value
-versions. This should make it much easier to use the \pkg{expl3} image and color
-support as it is brought up to fully-workable standards.
-
-\section{Engine requirements}
-
-The minimum engine versions needed to use \pkg{expl3} have been
-incremented a little:
-\begin{compactitemize}
- \item \hologo{pdfTeX} v1.40
- \item \hologo{XeTeX} v0.99992
- \item \hologo{LuaTeX} v0.95
- \item $\varepsilon$-(u)p\TeX{} mid-2012
-\end{compactitemize}
-
-The team have also worked with the \hologo{XeTeX} and (u)p\TeX{} developers to
-standardise the set of post-\eTeX{} utility primitives that are available: the
-so-called \enquote{\hologo{pdfTeX} utilities}. These are now available in all
-supported engines, and in time will all be \emph{required}. This primarily
-impacts \hologo{XeTeX}, which gained most of these primitives in the 2019
-\TeX{} Live cycle. (Examples are the random number primitives and expandable
-file data provision.) See \emph{\LaTeX{} News~31}~\cite{12:site-news}
-for more.
-
-\section{Documentation}
-
-\subsection{News}
-
-The \emph{\LaTeX3 News} files were until recently only used to create
-PDF files on the team website~\cite{12:site}. We have now
-integrated those into the \pkg{l3kernel} (\pkg{expl3} core)
-bundle. The news files cover all of \LaTeX3 files, as the core files
-are always available.
-
-\subsection{ChangeLog}
-
-Since the start of 2018, the team have commenced a comprehensive
-change log for each of the bundles which make up the \LaTeX3 code.
-These are simple Markdown text files, which means that they can be displayed
-formatted in web views.
-
-\section{Changes in \pkg{xparse}}
-
-A number of new features have been added to \pkg{xparse}. To allow
-handling of the fact that skipping spaces may be required only in
-some cases when searching for optional arguments, a new modifier
-\texttt{!} is available in argument specifiers. This causes
-\pkg{xparse} to \emph{require} that an optional argument follows
-immediately with no intervening spaces.
-
-There is a new argument type purely for environments: \texttt{b}-type
-for collecting a \cs{begin}\texttt{...}\cs{end} pair, i.e., collecting the body of
-an environment. This is similar in concept to the \pkg{environ} package,
-but is integrated directly into \pkg{xparse}.
-
-Finally, it is now possible to refer to one argument as the
-default for another optional one, for example
-\begin{verbatim}
-\NewDocumentCommand{\caption}{O{#2} m} ...
-\end{verbatim}
-
-\section{New experimental modules}
-
-A number of new experimental modules have been added within the
-\pkg{l3experimental} bundle:
-\begin{description}
- \item[\pkg{l3benchmark}] Performance-testing system using the timing
- function in modern \TeX{} engines
- \item[\pkg{l3cctab}] Category code tables for all engines, not
- just \hologo{LuaTeX}
- \item[\pkg{l3color}] Color support, similar in interface to \pkg{xcolor}
- \item[\pkg{l3draw}] Creation of drawings, inspired by \pkg{pgf}, but
- using the \LaTeX3 FPU for calculations
- \item[\pkg{l3pdf}] Support for PDF features such as compression,
- hyperlinks, etc.
- \item[\pkg{l3sys-shell}] Shell escape functions for file manipulation
-\end{description}
-
-\section{\pkg{l3build} changes}
-
-The \pkg{l3build} tool for testing and releasing \TeX{} packages
-has seen a number of incremental improvements. It is now available directly
-as a script in \TeX{} Live and MiK\TeX{}, meaning you can call it simply
-as
-\begin{verbatim}
-l3build <target>
-\end{verbatim}
-Accompanying this, we have added support for installing scripts and script
-\texttt{man} files.
-
-There is a new \texttt{upload} target that can take a zip file and send it to
-CTAN: you just have to fill in release information for \emph{this}
-upload at the prompts.
-
-Testing using PDF files rather than logs has been heavily revised:
-this is vital for work on PDF tagging.
-
-There is also better support for complex directory structures, including the
-ability to manually specify TDS location for all installed files. This
-is particularly targeted at packages with both generic and format-specific files
-to install.
-
-
-\begin{thebibliography}{9}
-
-\fontsize{9.9}{11.9}\selectfont
-
-
-\bibitem{12:site}
- \emph{\LaTeX{} Project Website}.
- \hfil\break\url{https://latex-project.org/}
-
-\bibitem{12:site-news}
- \emph{\LaTeXe{} release newsletters on the \LaTeX{} Project Website}.
- \url{https://latex-project.org/news/latex2e-news/}
-
-
-\end{thebibliography}
-
-\end{document}
diff --git a/macros/latex/contrib/l3kernel/l3pdf.dtx b/macros/latex/contrib/l3kernel/l3pdf.dtx
deleted file mode 100644
index 7ffd0c1c05..0000000000
--- a/macros/latex/contrib/l3kernel/l3pdf.dtx
+++ /dev/null
@@ -1,531 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3pdf.dtx
-%
-% Copyright(C) 2019-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% http://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3pdf} module\\ Core PDF support^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \section{Objects}
-%
-% \begin{function}[added = 2022-08-23]{\pdf_object_new:n}
-% \begin{syntax}
-% \cs{pdf_object_new:n} \Arg{object}
-% \end{syntax}
-% Declares \meta{object} as a PDF object. The object may be referenced
-% from this point on, and written later using \cs{pdf_object_write:nnn}.
-% \end{function}
-%
-% \begin{function}[added = 2022-08-23]
-% {\pdf_object_write:nnn, \pdf_object_write:nne}
-% \begin{syntax}
-% \cs{pdf_object_write:nn} \Arg{object} \Arg{type} \Arg{content}
-% \end{syntax}
-% Writes the \meta{content} as content of the \meta{object}. Depending on the
-% \meta{type} declared for the object, the format required for the
-% \meta{data} will vary
-% \begin{itemize}
-% \item[\texttt{array}] A space-separated list of values
-% \item[\texttt{dict}] Key--value pairs in the form
-% \texttt{/\meta{key} \meta{value}}
-% \item[\texttt{fstream}] Two brace groups: \meta{file name} and
-% \meta{file content}
-% \item[\texttt{stream}] Two brace groups: \meta{attributes (dictionary)}
-% and \meta{stream contents}
-% \end{itemize}
-% \end{function}
-%
-% \begin{function}[EXP, added = 2021-02-10]{\pdf_object_ref:n}
-% \begin{syntax}
-% \cs{pdf_object_ref:n} \Arg{object}
-% \end{syntax}
-% Inserts the appropriate information to reference the \meta{object}
-% in for example page resource allocation
-% \end{function}
-%
-% \begin{function}[added = 2021-02-10]
-% {\pdf_object_unnamed_write:nn, \pdf_object_unnamed_write:ne}
-% \begin{syntax}
-% \cs{pdf_object_unnamed_write:nn} \Arg{type} \Arg{content}
-% \end{syntax}
-% Writes the \meta{content} as content of an anonymous object. Depending on the
-% \meta{type}, the format required for the \meta{data} will vary
-% \begin{itemize}
-% \item[\texttt{array}] A space-separated list of values
-% \item[\texttt{dict}] Key--value pairs in the form
-% \texttt{/\meta{key} \meta{value}}
-% \item[\texttt{fstream}] Two brace groups: \meta{attributes (dictionary)}
-% and \meta{file name}
-% \item[\texttt{stream}] Two brace groups: \meta{attributes (dictionary)}
-% and \meta{stream contents}
-% \end{itemize}
-% \end{function}
-%
-% \begin{function}[EXP, added = 2021-02-10]{\pdf_object_ref_last:}
-% \begin{syntax}
-% \cs{pdf_object_ref_last:}
-% \end{syntax}
-% Inserts the appropriate information to reference the last \meta{object}
-% created. This is particularly useful for anonymous objects.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2021-02-10]{\pdf_pageobject_ref:n}
-% \begin{syntax}
-% \cs{pdf_pagobject_ref:n} \Arg{pageobject}
-% \end{syntax}
-% Inserts the appropriate information to reference the \meta{pageobject}.
-% \end{function}
-%
-% \begin{function}[EXP, pTF, added = 2020-05-15]{\pdf_object_if_exist:n}
-% \begin{syntax}
-% \cs{pdf_object_if_exist_p:n} \Arg{object}
-% \cs{pdf_object_if_exist:nTF} \Arg{object}
-% \end{syntax}
-% Tests whether an object with name \Arg{object} has been defined.
-% \end{function}
-%
-% \section{Version}
-%
-% \begin{function}[pTF, EXP, added = 2021-02-10]{\pdf_version_compare:Nn}
-% \begin{syntax}
-% \cs{pdf_version_compare_p:Nn} \meta{comparator} \Arg{version}
-% \cs{pdf_version_compare:NnTF} \meta{comparator} \Arg{version} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Compares the version of the PDF being created with the \meta{version}
-% string specified, using the \meta{comparator}. Either the \meta{true code}
-% or \meta{false code} will be left in the output stream.
-% \end{function}
-%
-% \begin{function}[added = 2021-02-10]
-% {\pdf_version_gset:n, \pdf_version_min_gset:n}
-% \begin{syntax}
-% \cs{pdf_version_gset:n} \Arg{version}
-% \end{syntax}
-% Sets the \meta{version} of the PDF being created. The |min| version will
-% not alter the output version unless it is currently lower than the
-% \meta{version} requested.
-%
-% This function may only be used up to the point where the PDF file is
-% initialised. With dvips it sets \cs{pdf_version_major:} and \cs{pdf_version_minor:}
-% and allows to compare the values with \cs{pdf_version_compare:Nn}, but the
-% PDF version itself still has to be set with the command line option
-% |-dCompatibilityLevel| of |ps2pdf|.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2021-02-10]
-% {\pdf_version:, \pdf_version_major:, \pdf_version_minor:}
-% \begin{syntax}
-% \cs{pdf_version:}
-% \end{syntax}
-% Expands to the currently-active PDF version.
-% \end{function}
-%
-% \section{Page (media) size}
-%
-% \begin{function}[added = 2023-01-14]{\pdf_pagesize_gset:nn}
-% \begin{syntax}
-% \cs{pdf_pagesize_gset:nn} \Arg{width} \Arg{height}
-% \end{syntax}
-% Sets the page size (mediabox) of the PDF being created to the
-% \meta{width} and \meta{height}, both of which are \meta{dimexpr}.
-% \end{function}
-%
-% \section{Compression}
-%
-% \begin{function}[added = 2021-02-10]{\pdf_uncompress:}
-% \begin{syntax}
-% \cs{pdf_uncompress:}
-% \end{syntax}
-% Disables any compression of the PDF, where possible.
-%
-% This function may only be used up to the point where the PDF file is
-% initialised.
-% \end{function}
-%
-% \section{Destinations}
-%
-% Destinations are the places a link jumped too.
-% Unlike the name may suggest they don't described
-% an exact location in the PDF. Instead a destination contains a reference to
-% a page along with an instruction how to display this page.
-% The normally used \enquote{XYZ \textit{top left zoom}} for example instructs
-% the viewer to show the page with the given \textit{zoom} and
-% the top left corner at the \textit{top left} coordinates---which then gives
-% the impression that there is an anchor at this position.
-%
-% If an instruction takes a coordinate, it is calculated by the following
-% commands relative to the location the command is issued.
-% So to get a specific coordinate one has to move the command to the right place.
-%
-% \begin{function}[added = 2021-01-03]
-% {\pdf_destination:nn}
-% \begin{syntax}
-% \cs{pdf_destination:nn} \Arg{name} \Arg{type or integer}
-% \end{syntax}
-% This creates a destination. \Arg{type or integer} can be one of |fit|, |fith|,
-% |fitv|, |fitb|, |fitbh|, |fitbv|, |fitr|, |xyz|
-% or an integer representing a scale factor in percent.
-% |fitr| here gives only a lightweight version of |/FitR|:
-% The backend code defines |fitr| so that it will with pdf\LaTeX{} and
-% Lua\LaTeX{} use the coordinates of the surrounding box,
-% with \texttt{dvips} and \texttt{dvipdfmx} it falls back to |fit|.
-% For full control use \cs{pdf_destination:nnnn}.
-%
-% The keywords match to the PDF names as described in the following tabular.
-%
-% \medskip
-% \noindent\begin{tabular}{ll>{\raggedright\arraybackslash}p{6cm}}
-% \toprule
-% Keyword & PDF & Remarks \\ \midrule
-% |fit| & |/Fit|
-% & Fits the page to the window\\
-% |fith| & |/FitH| \textit{top}
-% & Fits the width of the page to the window \\
-% |fitv| & |/FitV| \textit{left}
-% & Fits the height of the page to the window \\
-% |fitb| & |/FitB|
-% & Fits the page bounding box to the window \\
-% |fitbh|& |/FitBH| \textit{top}
-% & Fits the width of the page bounding box to the window. \\
-% |fitbv|& |/FitBV| \textit{left}
-% & Fits the height of the page bounding box to the window. \\
-% |fitr| & |/FitR| \textit{left bottom right top}
-% & Fits the rectangle specified by the four coordinates to the window
-% (see above for the restrictions)\\
-% |xyz| & |/XYZ| \textit{left top} null
-% & Sets a coordinate but doesn't change the zoom.\\
-% \Arg{integer} & |/XYZ| \textit{left top zoom}
-% & Sets a coordinate and a zoom meaning \Arg{integer}\%.
-% \\\bottomrule
-% \end{tabular}
-%
-% \end{function}
-%
-% \begin{function}[added = 2021-01-17]
-% {\pdf_destination:nnnn}
-% \begin{syntax}
-% \cs{pdf_destination:nnnn} \Arg{name} \Arg{width} \Arg{height} \Arg{depth}
-% \end{syntax}
-% This creates a destination with |/FitR| type with the given dimensions relative
-% to the current location. The destination is in a box of size zero, but it doesn't
-% switch to horizontal mode.
-% \end{function}
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3pdf} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=pdf>
-% \end{macrocode}
-%
-% \begin{variable}{\s_@@_stop}
-% Internal scan marks.
-% \begin{macrocode}
-\scan_new:N \s_@@_stop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\g_@@_init_bool}
-% A boolean so we have some chance of avoiding setting things we are not
-% allowed to. As we are potentially early in the format, we have to work
-% a bit harder than ideal.
-% \begin{macrocode}
-\bool_new:N \g_@@_init_bool
-\bool_lazy_and:nnT
- { \str_if_eq_p:Vn \fmtname { LaTeX2e } }
- { \tl_if_exist_p:N \@expl@finalise@setup@@@@ }
- {
- \tl_gput_right:Nn \@expl@finalise@setup@@@@
- {
- \tl_gput_right:Nn \@kernel@after@begindocument
- { \bool_gset_true:N \g_@@_init_bool }
- }
- }
-% \end{macrocode}
-% \end{variable}
-%
-% \subsection{Compression}
-%
-% \begin{macro}{\pdf_uncompress:}
-% Simple to do.
-% \begin{macrocode}
-\cs_new_protected:Npn \pdf_uncompress:
- {
- \bool_if:NF \g_@@_init_bool
- {
- \@@_backend_compresslevel:n { 0 }
- \@@_backend_compress_objects:n { \c_false_bool }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Objects}
-%
-% \begin{macro}{\pdf_object_new:n}
-% \begin{macro}
-% {\pdf_object_write:nnn, \pdf_object_write:nne, \pdf_object_write:nnx}
-% \begin{macro}{\pdf_object_ref:n}
-% \begin{macro}
-% {
-% \pdf_object_unnamed_write:nn, \pdf_object_unnamed_write:ne,
-% \pdf_object_unnamed_write:nx
-% }
-% \begin{macro}{\pdf_object_ref_last:}
-% \begin{macro}[pTF]{\pdf_object_if_exist:n}
-% Simple to do: all objects create a constant |int| so it is not a
-% backend-specific name.
-% \begin{macrocode}
-\cs_new_protected:Npn \pdf_object_new:n #1
- {
- \@@_backend_object_new:n {#1}
- \cs_new_eq:cc
- { c_@@_backend_object_ \tl_to_str:n {#1} _int }
- { c_@@_object_ \tl_to_str:n {#1} _int }
- }
-\cs_new_protected:Npn \pdf_object_write:nnn #1#2#3
- {
- \@@_backend_object_write:nnn {#1} {#2} {#3}
- \bool_gset_true:N \g_@@_init_bool
- }
-\cs_generate_variant:Nn \pdf_object_write:nnn { nne , nnx }
-\cs_new:Npn \pdf_object_ref:n #1 { \@@_backend_object_ref:n {#1} }
-\cs_new_protected:Npn \pdf_object_unnamed_write:nn #1#2
- {
- \@@_backend_object_now:nn {#1} {#2}
- \bool_gset_true:N \g_@@_init_bool
- }
-\cs_generate_variant:Nn \pdf_object_unnamed_write:nn { ne , nx }
-\cs_new:Npn \pdf_object_ref_last: { \@@_backend_object_last: }
-\prg_new_conditional:Npnn \pdf_object_if_exist:n #1 { p , T , F , TF }
- {
- \int_if_exist:cTF { c_@@_object_ \tl_to_str:n {#1} _int }
- \prg_return_true:
- \prg_return_false:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\pdf_pageobject_ref:n}
-% \begin{macrocode}
-\cs_new:Npn \pdf_pageobject_ref:n #1
- { \@@_backend_pageobject_ref:n {#1} }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Version}
-%
-% \begin{macro}[pTF,EXP]{\pdf_version_compare:Nn}
-% \begin{macro}
-% {
-% @@_version_compare_=:w ,
-% @@_version_compare_<:w ,
-% @@_version_compare_>:w
-% }
-% To compare version, we need to split the given value then deal with both
-% major and minor version
-% \begin{macrocode}
-\prg_new_conditional:Npnn \pdf_version_compare:Nn #1#2 { p , T , F , TF }
- { \use:c { @@_version_compare_ #1 :w } #2 . . \s_@@_stop }
-\cs_new:cpn { @@_version_compare_=:w } #1 . #2 . #3 \s_@@_stop
- {
- \bool_lazy_and:nnTF
- { \int_compare_p:nNn \@@_backend_version_major: = {#1} }
- { \int_compare_p:nNn \@@_backend_version_minor: = {#2} }
- { \prg_return_true: }
- { \prg_return_false: }
- }
-\cs_new:cpn { @@_version_compare_<:w } #1 . #2 . #3 \s_@@_stop
- {
- \bool_lazy_or:nnTF
- { \int_compare_p:nNn \@@_backend_version_major: < {#1} }
- {
- \bool_lazy_and_p:nn
- { \int_compare_p:nNn \@@_backend_version_major: = {#1} }
- { \int_compare_p:nNn \@@_backend_version_minor: < {#2} }
- }
- { \prg_return_true: }
- { \prg_return_false: }
- }
-\cs_new:cpn { @@_version_compare_>:w } #1 . #2 . #3 \s_@@_stop
- {
- \bool_lazy_or:nnTF
- { \int_compare_p:nNn \@@_backend_version_major: > {#1} }
- {
- \bool_lazy_and_p:nn
- { \int_compare_p:nNn \@@_backend_version_major: = {#1} }
- { \int_compare_p:nNn \@@_backend_version_minor: > {#2} }
- }
- { \prg_return_true: }
- { \prg_return_false: }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\pdf_version_gset:n, \pdf_version_min_gset:n}
-% \begin{macro}{\@@_version_gset:w}
-% Split the version and set.
-% \begin{macrocode}
-\cs_new_protected:Npn \pdf_version_gset:n #1
- { \@@_version_gset:w #1 . . \s_@@_stop }
-\cs_new_protected:Npn \pdf_version_min_gset:n #1
- {
- \pdf_version_compare:NnT < {#1}
- { \@@_version_gset:w #1 . . \s_@@_stop }
- }
-\cs_new_protected:Npn \@@_version_gset:w #1 . #2 . #3\s_@@_stop
- {
- \bool_if:NF \g_@@_init_bool
- {
- \@@_backend_version_major_gset:n {#1}
- \@@_backend_version_minor_gset:n {#2}
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\pdf_version:, \pdf_version_major:, \pdf_version_minor:}
-% Wrappers.
-% \begin{macrocode}
-\cs_new:Npn \pdf_version:
- { \@@_backend_version_major: . \@@_backend_version_minor: }
-\cs_new:Npn \pdf_version_major: { \@@_backend_version_major: }
-\cs_new:Npn \pdf_version_minor: { \@@_backend_version_minor: }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Page size}
-%
-% \begin{macro}{\pdf_pagesize_gset:nn}
-% \begin{macrocode}
-\cs_new_protected:Npn \pdf_pagesize_gset:nn #1#2
- { \@@_backend_pagesize_gset:nn {#1} {#2} }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Destinations}
-%
-% \begin{macro}{\pdf_destination:nn}
-% \begin{macrocode}
-\cs_new_protected:Npn \pdf_destination:nn #1#2
- { \@@_backend_destination:nn {#1} {#2} }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\pdf_destination:nnnn}
-% \begin{macrocode}
-\cs_new_protected:Npn \pdf_destination:nnnn #1#2#3#4
- {
- \hbox_to_zero:n
- { \@@_backend_destination:nnnn {#1} {#2} {#3} {#4} }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{PDF Page size (media box)}
-%
-% Everything here is delayed to the start of the document so that the
-% backend will definitely be loaded.
-% \begin{macrocode}
-\cs_if_exist:NT \@kernel@before@begindocument
- {
- \tl_gput_right:Nn \@kernel@before@begindocument
- {
- \bool_lazy_all:nT
- {
- { \cs_if_exist_p:N \stockheight }
- { \cs_if_exist_p:N \stockwidth }
- { \cs_if_exist_p:N \IfDocumentMetadataTF }
- { \IfDocumentMetadataTF { \c_true_bool } { \c_false_bool } }
- { \int_compare_p:nNn \tex_mag:D = { 1000 } }
- }
- {
- \bool_lazy_and:nnTF
- { \dim_compare_p:nNn \stockheight > { 0pt } }
- { \dim_compare_p:nNn \stockwidth > { 0pt } }
- {
- \@@_backend_pagesize_gset:nn
- \stockwidth \stockheight
- }
- {
- \bool_lazy_or:nnF
- { \dim_compare_p:nNn \stockheight < { 0pt } }
- { \dim_compare_p:nNn \stockwidth < { 0pt } }
- {
- \bool_lazy_and:nnT
- { \dim_compare_p:nNn \paperheight > { 0pt } }
- { \dim_compare_p:nNn \paperwidth > { 0pt } }
- {
- \@@_backend_pagesize_gset:nn
- \paperwidth \paperheight
- }
- }
- }
- }
- }
- }
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3prefixes.csv b/macros/latex/contrib/l3kernel/l3prefixes.csv
deleted file mode 100644
index 54fb41bdeb..0000000000
--- a/macros/latex/contrib/l3kernel/l3prefixes.csv
+++ /dev/null
@@ -1,296 +0,0 @@
-Prefix,Module or package,Registrant,Homepage,Source repository,Issue tracker,First registered,Last update,Notes
-ENdiagram,endiagram,Clemens Niederberger,https://bitbucket.org/cgnieder/endiagram/,git@bitbucket.org:cgnieder/endiagram.git,https://bitbucket.org/cgnieder/endiagram/issues,2013-03-16,2013-03-16,
-GS,gs1,Markus Kohm,,,,2013-03-16,2013-03-16,
-MOdiagram,modiagram,Clemens Niederberger,https://bitbucket.org/cgnieder/modiagram/,git@bitbucket.org:cgnieder/modiagram.git,https://bitbucket.org/cgnieder/modiagram/issues,2013-03-16,2013-03-16,
-UFca,citeall,Ulrike Fischer,,,,2015-04-09,2016-02-26,
-acro,acro,Clemens Niederberger,https://github.com/cgnieder/acro/,https://github.com/cgnieder/acro.git,https://github.com/cgnieder/acro/issues,2013-03-16,2020-04-14,
-affiliations,langsci-affiliations,Felix Kopecky,https://ctan.org/pkg/langsci-affiliations,https://github.com/langsci/langsci-affiliations,https://github.com/langsci/langsci-affiliations/issues,2021-02-18,2021-02-18,
-akshar,akshar,Vu Van Dung,https://github.com/joulev/akshar,https://github.com/joulev/akshar.git,https://github.com/joulev/akshar/issues,2020-05-27,2020-05-27,
-algobox,algobox,Julien Rivaud,,,,2018-06-13,2018-06-13,
-alignment,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-alloc,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,Internal only but reserved
-ampersand,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-apfs,apfontspec,Qing Lee,https://github.com/CTeX-org/apfontspec,https://github.com/CTeX-org/apfontspec.git,https://github.com/CTeX-org/apfontspec/issues,2020-05-17,2020-05-17,
-arch,archaeologie,Lukas C. Bossert,http://www.biblatex-archaeologie.de,https://github.com/LukasCBossert/biblatex-archaeologie.git,https://github.com/LukasCBossert/biblatex-archaeologie/issues,2017-03-24,2017-03-24,
-array,hobby,Andrew Stacey,https://github.com/loopspace/hobby,https://github.com/loopspace/hobby,https://github.com/loopspace/hobby/issues,2013-03-16,2020-10-29,
-arsenal,arsenal,Boris Veytsman,https://github.com/borisveytsman/arsenal,https://github.com/borisveytsman/arsenal,https://github.com/borisveytsman/arsenal/issues,2023-09-04,2023-09-04,
-atsign,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-avm,langsci-avm,Felix Kopecky,https://ctan.org/pkg/langsci-avm,https://github.com/langsci/langsci-avm,https://github.com/langsci/langsci-avm/issues,2020-03-11,2020-03-11,
-babellatin,babel-latin,Keno Wehr,https://ctan.org/pkg/babel-latin,https://github.com/wehro/babel-latin,https://github.com/wehro/babel-latin/issues,2021-08-23,2021-08-23,
-backend,l3backend,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2019-06-04,2019-06-04,
-backslash,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-bearwear,bearwear,Ulrike Fischer,https://github.com/u-fischer/bearwear,https://github.com/u-fischer/bearwear,https://github.com/u-fischer/bearwear/issues,2020-04-24,2020-04-24,
-beuron,beuron,Keno Wehr,https://ctan.org/pkg/beuron,,,2021-08-23,2021-08-23,
-bitset,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2020-12-26,2020-12-26,
-block,latex2e,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex2e.git,https://github.com/latex3/latex2e/issues,2023-10-17,2023-10-17,
-bool,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-box,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-bxjh,BXjaholiday,Takuto Asakura,https://github.com/wtsnjp/BXjaholiday,https://github.com/wtsnjp/BXjaholiday.git,https://github.com/wtsnjp/BXjaholiday/issues,2018-02-02,2019-02-02,
-cascade,cascade,F. Pantigny,,,,2020-07-21,2020-07-21,
-catcode,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-cctab,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-28,2012-09-28,
-cellprops,cellprops,Julien Rivaud,,,,2018-06-13,2018-06-13,
-chaos,"chaos,schleuderpackung",Marei Peischl,https://ds.ccc.de/,,,2021-05-28,2021-05-28,
-char,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-chemformula,chemformula,Clemens Niederberger,https://github.com/cgnieder/chemformula/,https://github.com/cgnieder/chemformula.git,https://github.com/cgnieder/chemformula/issues,2013-03-16,2020-04-14,
-chemmacros,chemmacros,Clemens Niederberger,https://github.com/cgnieder/chemmacros/,https://github.com/cgnieder/chemmacros.git,https://github.com/cgnieder/chemmacros/issues,2013-03-16,2020-04-14,
-chemnum,chemnum,Clemens Niederberger,https://github.com/cgnieder/chemnum/,https://github.com/cgnieder/chemnum.git,https://github.com/cgnieder/chemnum/issues,2013-03-16,2020-04-14,
-chk,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,Currently internal-only but reserved
-circumflex,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-classics,classics,Eduardo C. Lourenço de Lima,,,,2013-03-16,2013-03-16,
-clist,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-cmd,latex2e,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex2e.git,https://github.com/latex3/latex2e/issues,2021-01-20,2021-03-03,
-code,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2021-04-23,2021-04-23,
-codedesc,codedescribe,Alceu Frigeri,https://github.com/alceu-frigeri/codedescribe,https://github.com/alceu-frigeri/codedescribe,https://github.com/alceu-frigeri/codedescribe/issues,2023-05-15,2023-05-15,
-codedoc,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,Somewhat experimental: may change
-codehigh,codehigh,Jianrui Lyu,https://github.com/lvjr/codehigh,https://github.com/lvjr/codehigh.git,https://github.com/lvjr/codehigh/issues,2022-04-02,2022-04-02,
-codelist,codelisting,Alceu Frigeri,https://github.com/alceu-frigeri/codedescribe,https://github.com/alceu-frigeri/codedescribe,https://github.com/alceu-frigeri/codedescribe/issues,2023-05-15,2023-05-15,
-codepoint,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-coffin,"l3kernel,xcoffins",The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-colon,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-color,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-conteq,conteq,Joachim Breitner,https://github.com/nomeata/conteq,https://github.com/nomeata/conteq.git,https://github.com/nomeata/conteq/issues,2013-05-26,2013-05-27,
-cookingunits,cooking-units,Ben Vitecek,https://github.com/Vidabe/cooking-units,https://github.com/Vidabe/cooking-units.git,https://github.com/Vidabe/cooking-units/issues,2018-09-26,2018-09-26,
-cs,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-csl,citation-style-language,Zeping Lee,https://github.com/zepinglee/citeproc-lua,https://github.com/zepinglee/citeproc-lua.git,https://github.com/zepinglee/citeproc-lua/issues,2022-05-09,2022-05-09,
-csvsim,csvsimple,Thomas F. Sturm,https://github.com/T-F-S/csvsimple,https://github.com/T-F-S/csvsimple.git,https://github.com/T-F-S/csvsimple/issues,2020-02-19,2020-02-19,
-ctex,ctex,Qing Lee,https://github.com/CTeX-org/ctex-kit,https://github.com/CTeX-org/ctex-kit.git,https://github.com/CTeX-org/ctex-kit/issues,2014-03-08,2014-03-08,
-ctuthesis,ctuthesis,Tom Hejda,https://github.com/tohecz/ctuthesis,https://github.com/tohecz/ctuthesis.git,https://github.com/tohecz/ctuthesis/issues,2015-07-26,2015-07-26,
-debug,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2017-07-15,2017-07-15,
-denisbdoc,denisbdoc,Denis Bitouzé,https://github.com/dbitouze/denisbdoc,git@github.com:dbitouze/denisbdoc.git,,2020-05-13,2020-05-13,
-deriv,derivative,Simon Jensen,,,,2019-07-24,2019-07-24,
-didec,didec,Thomas F. Sturm,https://github.com/T-F-S/didec,https://github.com/T-F-S/didec.git,https://github.com/T-F-S/didec/issues,2024-02-02,2024-02-02,
-diffcoeff,diffcoeff,Andrew Parsloe,,,,2019-08-26,2019-08-26,
-dim,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-document,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2019-06-02,2019-06-02,
-dollar,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-driver,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-dry,dry,Michiel Helvensteijn,,,,2013-01-18,2013-01-18,
-ducksay,ducksay,Jonathan P. Spratte,https://github.com/Skillmon/ltx_ducksay,git@github.com:Skillmon/ltx_ducksay.git,https://github.com/Skillmon/ltx_ducksay/issues,2019-06-07,2019-06-07,
-duckuments,duckuments,Jonathan P. Spratte,https://github.com/Skillmon/ltx_duckuments,git@github.com:Skillmon/ltx_duckuments.git,https://github.com/Skillmon/ltx_duckuments/issues,2019-06-07,2019-06-07,
-e,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-else,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-28,2012-09-28,
-emoji,emoji,Xiangdong Zeng,https://github.com/stone-zeng/latex-emoji,https://github.com/stone-zeng/latex-emoji.git,https://github.com/stone-zeng/latex-emoji/issues,2020-03-08,2020-03-08,
-emojicite,emojicite,Leon Sixt,https://github.com/berleon/emojicite,https://github.com/berleon/emojicite.git,https://github.com/berleon/emojicite/issues/,2020-04-14,2020-04-20,
-empty,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-enotez,enotez,Clemens Niederberger,https://github.com/cgnieder/enotez/,https://github.com/cgnieder/enotez.git,https://github.com/cgnieder/enotez/issues,2013-03-16,2020-04-14,
-etex,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-etl,etl,Jonathan P. Spratte,https://github.com/Skillmon/ltx_etl,git@github.com:Skillmon/ltx_etl.git,https://github.com/Skillmon/ltx_etl/issues,2021-08-16,2021-08-16,
-exp,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-expl,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-exsheets,exsheets,Clemens Niederberger,https://bitbucket.org/cgnieder/exsheets/,git@bitbucket.org:cgnieder/exsheets.git,https://bitbucket.org/cgnieder/exsheets/issues,2013-03-16,2013-03-16,
-extblx,biblatex-ext,Moritz Wemheuer,https://github.com/moewew/biblatex-ext/,https://github.com/moewew/biblatex-ext.git,https://github.com/moewew/biblatex-ext/issues,2020-02-09,2020-02-09,
-exwf,exwrapfig,Takuto Asakura,https://github.com/wtsnjp/exwrapfig,https://github.com/wtsnjp/exwrapfig.git,https://github.com/wtsnjp/exwrapfig/issues,2018-06-07,2018-06-07,
-false,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2021-04-23,2021-04-23,
-fdu,fduthesis,Xiangdong Zeng,https://github.com/stone-zeng/fduthesis,https://github.com/stone-zeng/fduthesis.git,https://github.com/stone-zeng/fduthesis/issues,2018-06-14,2020-03-08,
-fdudoc,fduthesis,Xiangdong Zeng,https://github.com/stone-zeng/fduthesis,https://github.com/stone-zeng/fduthesis.git,https://github.com/stone-zeng/fduthesis/issues,2018-06-14,2020-03-08,
-fdulogo,fduthesis,Xiangdong Zeng,https://github.com/stone-zeng/fduthesis,https://github.com/stone-zeng/fduthesis.git,https://github.com/stone-zeng/fduthesis/issues,2018-06-14,2020-03-08,
-fi,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-28,2012-09-28,
-file,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-filehook,latex2e,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex2e.git,https://github.com/latex3/latex2e/issues,2020-10-01,2021-03-03,
-fingering,recorder-fingering,Alan Munn,https://github.com/amunn/recorder-fingering,https://github.com/amunn/recorder-fingering,https://github.com/amunn/recorder-fingering/issues,2023-02-17,2023-02-17,
-flag,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2017-02-13,
-fltr,newlfm,Paul Thomson,,,,2013-01-29,2013-01-29,
-fmdug,dashundergaps,Frank Mittelbach,https://www.latex-project.org/,https://github.com/FrankMittelbach/fmitex-dashundergaps.git,https://github.com/FrankMittelbach/fmitex-dashundergaps/issues,2018-06-24,2021-10-11,
-fmuft,unicodefonttable,Frank Mittelbach,https://www.latex-project.org/,https://github.com/FrankMittelbach/fmitex-unicodefonttable.git,https://github.com/FrankMittelbach/fmitex-unicodefonttable/issues,2020-02-17,2021-10-11,
-fmwao,widows-and-orphans,Frank Mittelbach,https://www.latex-project.org/,https://github.com/FrankMittelbach/fmitex-widows-and-orphans.git,https://github.com/FrankMittelbach/fmitex-widows-and-orphans/issues,2018-09-26,2018-09-26,
-fnote,latex2e,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex2e.git,https://github.com/latex3/latex2e/issues,2023-10-17,2023-10-17,
-fnpct,fnpct,Clemens Niederberger,https://github.com/cgnieder/fnpct/,https://github.com/cgnieder/fnpct.git,https://github.com/cgnieder/fnpct/issues,2013-03-16,2020-04-14,
-fontsizes,fontsizes,Julien Rivaud,,,,,2018-06-13,
-fontspec,fontspec,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/fontspec.git,https://github.com/latex3/fontspec/issues,2013-03-16,2024-02-15,
-fp,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-fun,functional,Jianrui Lyu,https://github.com/lvjr/functional,https://github.com/lvjr/functional.git,https://github.com/lvjr/functional/issues,2022-04-02,2022-04-02,
-galley,l3galley,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-gatherenum,gatherenum,Julien Rivaud,,,,2018-06-13,2018-06-14,
-getree,genealogytree,Thomas F. Sturm,https://github.com/T-F-S/genealogytree,https://github.com/T-F-S/genealogytree.git,https://github.com/T-F-S/genealogytree/issues,2020-02-19,2020-02-19,
-ghsystem,ghsystem,Clemens Niederberger,https://github.com/cgnieder/ghsystem/,https://github.com/cgnieder/ghsystem.git,https://github.com/cgnieder/ghsystem/issues,2013-03-16,2020-04-14,
-graph,lt3graph,Michiel Helvensteijn,,,,2014-02-05,2014-02-05,
-group,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-gtl,gtl,Bruno Le Floch,https://github.com/blefloch/latex-gtl,https://github.com/blefloch/latex-gtl.git,https://github.com/blefloch/latex-gtl/issues,2015-09-22,2015-09-22,
-gzt,gzt,Denis Bitouzé,https://github.com/dbitouze/gzt,git@github.com:dbitouze/gzt.git,,2020-05-13,2020-05-13,
-hash,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-hbox,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-hcoffin,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-28,2012-09-28,
-hobete,hobete,Tobias Görlach,http://www.disk0s1.de,,,2012-11-07,2012-11-07,
-hook,latex2e,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex2e.git,https://github.com/latex3/latex2e/issues,2019-06-03,2021-03-03,
-hyp,hyperref,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/hyperref.git,https://github.com/latex3/hyperref/issues,2020-11-27,2020-11-27,
-if,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-incgra,incgraph,Thomas F. Sturm,https://github.com/T-F-S/incgraph,https://github.com/T-F-S/incgraph.git,https://github.com/T-F-S/incgraph/issues,2021-10-11,2021-10-11,
-inf,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-initex,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2021-04-23,2021-04-23,
-insert,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-28,2012-09-28,
-int,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-intarray,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-04-06,2018-04-06,
-ior,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-iot,iot,Island of TeX,https://islandoftex.gitlab.io,https://gitlab.com/islandoftex/texmf,https://gitlab.com/groups/islandoftex/texmf/-/issues,2023-07-18,2023-07-18,
-iow,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-iwonamath,iwonamath,Boris Veytsman,https://github.com/borisveytsman/iwonamath,https://github.com/borisveytsman/iwonamath,https://github.com/borisveytsman/iwonamath/issues,2023-09-04,2023-09-04,
-jiazhu,jiazhu,Qing Lee,https://github.com/CTeX-org/ctex-kit,https://github.com/CTeX-org/ctex-kit.git,https://github.com/CTeX-org/ctex-kit/issues,2020-05-17,2020-05-17,
-job,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2021-04-23,2021-04-23,
-kernel,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-keys,"l3kernel,l3keys2e,ltkeys",The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-keyval,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-kgl,kantlipsum,Enrico Gregorio,,,,2013-03-16,2013-03-16,
-kivitendo,"kiviletter, kivitables",Marei Peischl for Kivitendo,https://www.kivitendo.de/,https://github.com/kivitendo/kivitendo-erp,https://forum.kivitendo.de/,2021-05-28,2021-05-28,
-langsci,langscibook,Language Science Press,https://langsci-press.org,https://github.com/langsci/langscibook,https://github.com/langsci/langscibook/issues,2021-07-20,2021-07-21,
-left,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-lltxmath,lualatex-math,Philipp Stephani,https://github.com/phst/lualatex-math,https://github.com/phst/lualatex-math.git,https://github.com/phst/lualatex-math/issues,2012-11-07,2012-11-07,
-log,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-lua,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-luabridge,lt3luabridge,Vít Novotný,https://ctan.org/pkg/lt3luabridge,https://github.com/witiko/lt3luabridge.git,https://github.com/witiko/lt3luabridge/issues,2022-06-25,2022-06-25,
-luatex,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-lwc,lua-widow-control,Max Chernoff,https://github.com/gucci-on-fleek/lua-widow-control,https://github.com/gucci-on-fleek/lua-widow-control.git,https://github.com/gucci-on-fleek/lua-widow-control/issues,2022-02-24,2022-02-24,
-mark,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-markdown,markdown,Vít Novotný,https://ctan.org/pkg/markdown,https://github.com/witiko/markdown.git,https://github.com/witiko/markdown/issues,2021-09-08,2021-09-08,
-marks,l3kernel/xmarks,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2020-02-17,2020-02-17,
-marks,latex2e,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex2e.git,https://github.com/latex3/latex2e/issues,2021-03-03,2021-03-03,
-math,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-mathcolor,latex2e,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex2e.git,https://github.com/latex3/latex2e/issues,2022-01-20,2022-01-20,
-max,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-mcrule,multicolrule,Karl Hagen,https://github.com/polysyllabic/multicolrule,https://github.com/polysyllabic/multicolrule.git,https://github.com/polysyllabic/multicolrule/issues,2018-12-24,2018-12-24,
-mermap,mercatormap,Thomas F. Sturm,https://github.com/T-F-S/mercatormap,https://github.com/T-F-S/mercatormap.git,https://github.com/T-F-S/mercatormap/issues,2020-02-19,2020-02-19,
-meta,latex2e,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex2e.git,https://github.com/latex3/latex2e/issues,2022-01-20,2022-01-20,
-metrix,metrix,Tobias Weh,https://github.com/tweh/metrix,git@github.com:tweh/metrix.git,https://github.com/tweh/metrix/issues,2020-10-31,2019-10-09,
-mhchem,mhchem,Martin Hensel,,,,2014-02-05,2014-02-05,
-minibox,minibox,Will Robertson,,https://github.com/wspr/will2e.git,https://github.com/wspr/will2e/issues,2020-04-24,2020-04-24,
-minus,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-mix,media9,Alexander Grahn,,https://gitlab.com/agrahn/media9,https://gitlab.com/agrahn/media9/issues,2013-01-18,2020-04-15,
-mode,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-morewrites,morewrites,Bruno Le Floch,https://github.com/blefloch/latex-morewrites,https://github.com/blefloch/latex-morewrites.git,https://github.com/blefloch/latex-morewrites/issues,2013-03-16,2015-09-22,
-msg,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-msvg,media4svg,Alexander Grahn,,https://gitlab.com/agrahn/media4svg,https://gitlab.com/agrahn/media4svg/issues,2020-04-15,2020-04-15,
-muskip,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-namedef,namedef,Phelype Oleinik,https://github.com/PhelypeOleinik/namedef,https://github.com/PhelypeOleinik/namedef.git,https://github.com/PhelypeOleinik/namedef/issues,2020-06-22,2020-06-22,
-nan,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-nicematrix,nicematrix,François Pantigny,,,,2019-12-19,2019-12-19,
-nil,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-ninecolors,ninecolors,Jianrui Lyu,https://github.com/lvjr/ninecolors,https://github.com/lvjr/ninecolors.git,https://github.com/lvjr/ninecolors/issues,2022-04-02,2022-04-02,
-nmc,numerica,Andrew Parsloe,,,,2021-06-30,2021-06-30,
-no,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-notestobib,notes2bib,Joseph Wright,https://github.com/josephwright/notes2bib,https://github.com/josephwright/notes2bib.git,https://github.com/josephwright/notes2bib/issues,2012-11-07,2012-11-07,
-novalue,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-nwejm,nwejm,Denis Bitouzé,https://github.com/dbitouze/nwejm,git@github.com:dbitouze/nwejm.git,,2020-05-13,2020-05-13,
-ocgbase,ocgx2,Alexander Grahn,,https://gitlab.com/agrahn/ocgx2,https://gitlab.com/agrahn/ocgx2/issues,2016-02-26,2020-04-15,
-ocgxii,ocgx2,Alexander Grahn,,https://gitlab.com/agrahn/ocgx2,https://gitlab.com/agrahn/ocgx2/issues,2016-02-26,2020-04-15,
-one,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-or,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-28,2012-09-28,
-other,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2021-04-23,2021-04-23,
-overleaf,overleaf,Overleaf,https://www.overleaf.com/about,,support+tex-dev@overleaf.com,2020-05-27,2020-05-27,
-para,latex2e,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex2e.git,https://github.com/latex3/latex2e/issues,2021-03-03,2021-03-03,
-parameter,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-pbs,media9,Alexander Grahn,,https://gitlab.com/agrahn/media9,https://gitlab.com/agrahn/media9/issues,2016-02-26,2020-04-15,
-pdf,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2019-06-02,2019-06-02,
-pdfannot,l3pdfmanagement,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2021-02-23,2021-02-23,
-pdffile,l3pdfmanagement,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2021-02-23,2021-02-23,
-pdfmanagement,l3pdfmanagement,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2020-11-27,2020-11-27,
-pdfmeta,l3pdfmanagement,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2021-02-23,2021-02-23,
-pdfoverlay,pdfoverlay,David Purton,https://github.com/dcpurton/pdfoverlay,https://github.com/dcpurton/pdfoverlay.git,https://github.com/dcpurton/pdfoverlay/issues,2020-06-22,2020-06-22,
-pdftex,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-pdfxform,l3pdfmanagement,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2021-02-23,2021-02-23,
-peek,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-percent,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-pgf,pgf,The PGF/TikZ Team,https://pgf-tikz.github.io,https://github.com/pgf-tikz/pgf,https://github.com/pgf-tikz/pgf/issues,2020-07-03,2020-07-03,
-pgfmxfp,pgfmath-xfp,Jonathan P. Spratte,https://github.com/Skillmon/ltx_pgfmath-xfp,https://github.com/Skillmon/ltx_pgfmath-xfp,https://github.com/Skillmon/ltx_pgfmath-xfp/issues,2021-05-20,2021-05-20,
-phone,phonenumbers,Keno Wehr,https://ctan.org/pkg/phonenumbers,https://github.com/wehro/phonenumbers,https://github.com/wehro/phonenumbers/issues,2021-08-23,2021-08-23,
-pi,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-piton,piton,François Pantigny,,,,29/09/2022,29/09/2022,
-pkgploader,pkgploader,Michiel Helvensteijn,,,,2014-02-05,2014-02-05,
-platex,platex,Japanese TeX Development Community,https://github.com/texjporg/platex,https://github.com/texjporg/platex.git,https://github.com/texjporg/platex/issues,2020-09-30,2020-09-30,
-polyglossia,polyglossia,Arthur Reutenauer,https://www.polyglossia.org/,https://github.com/reutenauer/polyglossia,https://github.com/reutenauer/polyglossia/issues,2019-09-03,,
-postnotes,postnotes,gusbrs,https://github.com/gusbrs/postnotes,https://github.com/gusbrs/postnotes.git,https://github.com/gusbrs/postnotes/issues,2022-04-23,2022-04-23,
-prelim,prelim2e,Marei Peischl,https://github.com/TeXhackse/prelim2e,https://github.com/TeXhackse/prelim2e.git,https://github.com/TeXhackse/prelim2e/issues,2020-11-24,2020-11-24,
-prg,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-primargs,morewrites,Bruno Le Floch,https://github.com/blefloch/latex-morewrites,https://github.com/blefloch/latex-morewrites.git,https://github.com/blefloch/latex-morewrites/issues,2013-03-16,2015-09-22,
-prop,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-property,latex2e,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex2e.git,https://github.com/latex3/latex2e/issues,2021-01-20,2021-03-03,
-pseudo,pseudo,Magnus Lie Hetland,https://github.com/mlhetland/pseudo.sty,https://github.com/mlhetland/pseudo.sty.git,https://github.com/mlhetland/pseudo.sty/issues,2019-06-24,2019-06-24,
-ptex,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2015-07-28,2015-07-28,
-ptxcd,ptxcd,Marei Peischl,,,,2020-07-27,2020-07-27,Used for specific corporate design templates
-qrbill,qrbill,Marei Peischl,https://github.com/peiTeX/qrbill,https://github.com/peiTeX/qrbill.git,https://github.com/peiTeX/qrbill/issues,2020-06-27,2020-06-27,
-quark,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-rainbow,beamertheme-rainbow,samcarter,https://github.com/samcarter/beamertheme-rainbow,https://github.com/samcarter/beamertheme-rainbow,https://github.com/samcarter/beamertheme-rainbow/issues,2023-07-04,2023-07-04,
-randomwalk,randomwalk,Bruno Le Floch,https://github.com/blefloch/latex-randomwalk,https://github.com/blefloch/latex-randomwalk.git,https://github.com/blefloch/latex-randomwalk/issues,2013-03-16,2015-09-22,
-rawobjects,rawobjects,Paolo De Donato,https://github.com/Loara/lt3rawobjects,https://github.com/Loara/lt3rawobjects/lt3rawobjects.git,https://github.com/Loara/lt3rawobjects/issues,2022-07-19,2022-07-19,
-recursion,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-ref,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2020-12-24,2020-12-24,
-regex,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2018-04-06,
-reverse,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-28,2012-09-28,
-right,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-rivbook,rivbook,Julien Rivaud,,,,2018-06-13,2018-06-14,
-rivmath,rivmath,Julien Rivaud,,,,2018-06-13,2018-06-13,
-sanuml,sanitize-umlaut,Thomas F. Sturm,https://github.com/T-F-S/sanitize-umlaut,https://github.com/T-F-S/sanitize-umlaut.git,https://github.com/T-F-S/sanitize-umlaut/issues,2022-07-19,2022-07-19,
-scan,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-schulma,schulmathematik,Keno Wehr,https://ctan.org/pkg/schulmathematik,,,2021-08-23,2021-08-23,
-scontents,scontents,Pablo González,https://github.com/pablgonz/scontents,git@github.com:pablgonz/scontents.git,https://github.com/pablgonz/scontents/issues,2019-12-05,2019-12-05,
-scripture,scripture,David Purton,https://github.com/dcpurton/scripture,https://github.com/dcpurton/scripture.git,https://github.com/dcpurton/scripture/issues,2022-07-27,2022-07-27,
-sdaps,sdaps,Benjamin Berg,https://sdaps.org,https://github.com/sdaps/sdaps-class.git,https://github.com/sdaps/sdaps-class/issues,2020-02-17,2020-02-17,
-seq,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-shipout,latex2e,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex2e.git,https://github.com/latex3/latex2e/issues,2020-10-01,2021-03-03,
-silly,sillypage,Paulo Cereda,https://github.com/cereda/sillypage,https://github.com/cereda/sillypage.git,https://github.com/cereda/sillypage/issues,2022-02-01,2022-02-01,
-siunitx,siunitx,Joseph Wright,https://github.com/josephwright/siunitx,https://github.com/josephwright/siunitx.git,https://github.com/josephwright/siunitx/issues,2012-11-04,2012-11-04,
-skel,skeldoc,Magnus Lie Hetland,https://github.com/mlhetland/skeldoc.sty,https://github.com/mlhetland/skeldoc.sty.git,https://github.com/mlhetland/skeldoc.sty/issues,2021-01-04,2021-01-04,
-skip,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-slcd,se2thesis,Stephan Lukasczyk,https://github.com/se2p/se2thesis,https://github.com/se2p/se2thesis,https://github.com/se2p/se2thesis/issues,2023-10-18,2023-10-18,
-socket,latex2e,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex2e.git,https://github.com/latex3/latex2e/issues,2023-10-17,2023-10-17,
-sort,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2017-02-13,
-space,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-starray,starray,Alceu Frigeri,https://github.com/alceu-frigeri/starray,https://github.com/alceu-frigeri/starray,https://github.com/alceu-frigeri/starray/issues,2023-05-15,2023-05-15,
-statistics,statistics,Julien Rivaud,https://gitlab.com/frnchfrgg-latex/statistics,https://gitlab.com/frnchfrgg-latex/statistics.git,https://gitlab.com/frnchfrgg-latex/statistics/issues,2018-06-25,2018-06-25,
-stm,lt3-stm,CV Radhakrishnan,http://www.cvr.cc/,,,2014-02-26,2014-02-26,
-stop,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-str,"l3kernel,l3str-format",The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-stycmd,styledcmd,Paolo De Donato,https://github.com/Loara/styledcmd,https://github.com/Loara/styledcmd.git,https://github.com/Loara/styledcmd/issues,2021-08-30,2021-08-30,
-substances,substances,Clemens Niederberger,https://github.com/cgnieder/substances/,https://github.com/cgnieder/substances.git,https://github.com/cgnieder/substances/issues,2013-03-16,2020-04-14,
-sys,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2015-09-07,2015-09-08,
-tag,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2019-06-02,2019-06-02,
-tasks,tasks,Clemens Niederberger,https://github.com/cgnieder/tasks/,https://github.com/cgnieder/tasks.git,https://github.com/cgnieder/cgnieder/tasks/issues,2013-03-16,2020-04-14,
-tbl,latex2e,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex2e.git,https://github.com/latex3/latex2e/issues,2023-10-23,2023-10-23,
-tblr,tabularray,Jianrui Lyu,https://github.com/lvjr/tabularray,https://github.com/lvjr/tabularray.git,https://github.com/lvjr/tabularray/issues,2022-04-02,2022-04-02,
-tcobox,tcolorbox,Thomas F. Sturm,https://github.com/T-F-S/tcolorbox,https://github.com/T-F-S/tcolorbox.git,https://github.com/T-F-S/tcolorbox/issues,2020-02-19,2020-02-19,
-template,latex2e,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex2e.git,https://github.com/latex3/latex2e/issues,2021-01-20,2021-03-03,
-term,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-tex,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-text,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2020-01-15,2020-01-15,
-tikzfill,tikzfill,Thomas F. Sturm,https://github.com/T-F-S/tikzfill,https://github.com/T-F-S/tikzfill.git,https://github.com/T-F-S/tikzfill/issues,2022-07-19,2022-07-19,
-tikzlings,tikzlings,samcarter,https://github.com/samcarter/tikzlings,git@github.com:samcarter/tikzlings.git,https://github.com/samcarter/tikzlings/issues,2023-02-17,2023-02-17,
-tikzsymbols,tikzsymbols,Ben Vitecek,https://github.com/Vidabe/tikzsymbols,https://github.com/Vidabe/tikzsymbols.git,https://github.com/Vidabe/tikzsymbols/issues,2018-09-26,2018-09-26,
-tilde,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-tl,"l3kernel,l3tl-build",The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-tmpa,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-tmpb,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-token,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-true,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2021-04-23,2021-04-23,
-twmk,menukeys,Tobias Weh,https://github.com/tweh/menukeys,git@github.com:tweh/menukeys.git,https://github.com/tweh/menukeys/issues,2020-10-31,2020-10-31,“classic” L2 package using only some expl3 code
-ufcombo,combofont,Ulrike Fischer,https://github.com/u-fischer/combofont,https://github.com/u-fischer/combofont,https://github.com/u-fischer/combofont/issues,2020-04-24,2020-04-24,
-ufgrid,returntogrid,Ulrike Fischer,https://github.com/u-fischer/returntogrid,https://github.com/u-fischer/returntogrid,https://github.com/u-fischer/returntogrid/issues,2020-04-24,2020-04-24,
-uftag,tagpdf,Ulrike Fischer,,,,2018-07-15,2018-07-15,
-um,unicode-math,Will Robertson,https://github.com/wspr/unicode-math,https://github.com/wspr/unicode-math.git,https://github.com/wspr/unicode-math/issues,2013-03-16,2013-03-16,
-underscore,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-unravel,unravel,Bruno Le Floch,https://github.com/blefloch/latex-unravel,https://github.com/blefloch/latex-unravel.git,https://github.com/blefloch/latex-unravel/issues,2015-09-22,2015-09-22,
-uptex,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2015-07-28,2015-07-28,
-use,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-utex,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2015-07-28,2015-07-28,
-vbox,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-vcoffin,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-28,2012-09-28,
-wheelchart,wheelchart,Matthias Floré,,,,2023-12-07,2023-12-07,
-withargs,withargs,Michiel Helvensteijn,,,,2014-02-05,2014-02-05,
-witharrows,witharrows,François Pantigny,,,,2019-12-19,2019-12-19,
-xeCJK,xecjk,Qing Lee,https://github.com/CTeX-org/ctex-kit,https://github.com/CTeX-org/ctex-kit.git,https://github.com/CTeX-org/ctex-kit/issues,2013-05-26,2013-05-26,
-xetex,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-xfrac,xfrac,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/xfrac.git,https://github.com/latex3/xfrac/issues,2012-09-27,2024-02-14,
-xmarks,latex2e,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex2e.git,https://github.com/latex3/latex2e/issues,2021-03-03,2021-03-03,
-xparse,xparse,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-xpatch,"regexpatch,xpatch",Enrico Gregorio,,,,2013-03-16,2013-03-16,
-xpeek,xpeek,Joel C. Salomon,,,,2013-03-16,2013-03-16,
-xpinyin,xpinyin,Qing Lee,https://github.com/CTeX-org/ctex-kit,https://github.com/CTeX-org/ctex-kit.git,https://github.com/CTeX-org/ctex-kit/issues,2013-03-16,2013-05-26,
-xsb,xsavebox,Alexander Grahn,,https://gitlab.com/agrahn/xsavebox,https://gitlab.com/agrahn/xsavebox/issues,2016-02-26,2020-04-15,
-xsim,xsim,Clemens Niederberger,https://github.com/cgnieder/xsim/,https://github.com/cgnieder/xsim.git,https://github.com/cgnieder/xsim/issues,2020-04-14,2020-04-14,
-xtemplate,xtemplate,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
-yoin,yoin,Tom Hejda,https://github.com/tohecz/yoin,https://github.com/tohecz/yoin.git,https://github.com/tohecz/yoin/issues,2016-02-22,2016-02-22,
-zero,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
-zhlipsum,zhlipsum,Xiangdong Zeng,https://github.com/stone-zeng/zhlipsum,https://github.com/stone-zeng/zhlipsum.git,https://github.com/stone-zeng/zhlipsum/issues,2018-06-14,2018-06-14,
-zhnum,zhnumber,Qing Lee,https://github.com/CTeX-org/ctex-kit,https://github.com/CTeX-org/ctex-kit.git,https://github.com/CTeX-org/ctex-kit/issues,2013-03-16,2013-05-26,
-zrefcheck,zref-check,gusbrs,https://github.com/gusbrs/zref-check,https://github.com/gusbrs/zref-check,https://github.com/gusbrs/zref-check/issues,2021-08-05,2021-08-05,
-zrefclever,zref-clever,gusbrs,https://github.com/gusbrs/zref-clever,https://github.com/gusbrs/zref-clever,https://github.com/gusbrs/zref-clever/issues,2021-11-29,2021-11-29,
-zrefvario,zref-vario,gusbrs,https://github.com/gusbrs/zref-vario,https://github.com/gusbrs/zref-vario,https://github.com/gusbrs/zref-vario/issues,2022-02-02,2022-02-02,
-zxjt,zxjatype,Takayuki Yato,,,,2013-03-16,2013-03-16,
diff --git a/macros/latex/contrib/l3kernel/l3prefixes.pdf b/macros/latex/contrib/l3kernel/l3prefixes.pdf
deleted file mode 100644
index 9b2e9b407e..0000000000
--- a/macros/latex/contrib/l3kernel/l3prefixes.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3prefixes.tex b/macros/latex/contrib/l3kernel/l3prefixes.tex
deleted file mode 100644
index 6c7cf24244..0000000000
--- a/macros/latex/contrib/l3kernel/l3prefixes.tex
+++ /dev/null
@@ -1,91 +0,0 @@
-\iffalse meta-comment
-
-File:l3prefixes.tex
-
-Copyright (C) 2019,2021 The LaTeX Project
-
-It may be distributed and/or modified under the conditions of the
-LaTeX Project Public License (LPPL), either version 1.3c of this
-license or (at your option) any later version. The latest version
-of this license is in the file
-
- https://www.latex-project.org/lppl.txt
-
-This file is part of the "l3kernel bundle" (The Work in LPPL)
-and all files in that bundle must be distributed together.
-
-The released version of this bundle is available from CTAN.
-
------------------------------------------------------------------------
-
-The development version of the bundle can be found at
-
- https://github.com/latex3/latex3
-
-for those people who are interested.
-
-\fi
-
-\documentclass{article}
-\usepackage{expl3}
-\usepackage{array}
-\usepackage{booktabs}
-\usepackage{longtable}
-\ExplSyntaxOn
-\cs_new_protected:Npn \__prefix_readi:w #1 " #2 " #3 \q_stop
- {
- \quark_if_nil:nTF {#2}
- { \__prefix_readii:w #1 \q_stop }
- { \__prefix_readi:w #1 {#2} #3 \q_stop }
- }
-\cs_new_protected:Npn \__prefix_readii:w #1 , #2 , #3 , #4 \q_stop
- { \__prefix_readiii:nnw {#1} {#3} #2 , \q_stop }
-\cs_new_protected:Npn \__prefix_readiii:nnw #1 #2 #3 , #4 \q_stop
- {
- \tl_put_right:Nn \l_tmpb_tl { #1 & #3 & #2 \\ }
- \tl_if_blank:nF {#4}
- { \clist_map_inline:nn {#4} { \tl_put_right:Nn \l_tmpb_tl { & ##1 \\ } } }
- }
-\ior_new:N \l_tmpa_ior
-\ior_open:Nn \l_tmpa_ior { l3prefixes.csv }
-\ior_get:NN \l_tmpa_ior \l_tmpa_tl % Throw away
-\cs_new_protected:Npn \PrintTable
- {
- \tl_set:Nn \l_tmpb_tl
- {
- \begin { longtable } { @{} *{2}{>{\ttfamily}l} l @{} }
- \toprule
- \multicolumn{1}{@{}l}{Prefix}
- & \multicolumn{1}{l@{}}{Module}
- & Registrant \\
- \midrule
- \endhead
- \bottomrule
- \endfoot
- }
- \ior_map_inline:Nn \l_tmpa_ior
- { \__prefix_readi:w ##1 " \q_nil " \q_stop }
- \tl_put_right:Nn \l_tmpb_tl { \end { longtable } }
- \tl_replace_all:Nnn \l_tmpb_tl { LaTeX3 } { \LaTeX3 }
- \tl_use:N \l_tmpb_tl
- }
-\ExplSyntaxOff
-\begin{document}
-
-This file lists the prefixes which have been registered with the \LaTeX{}
-team for use in \textsf{expl3} code. Programmers are invited to register their
-(public) prefix use by contacting the team at
-\begin{quote}
- \texttt{modules@latex-project.org}
-\end{quote}
-with the relevant information for the \texttt{.csv} file, i.e.,
-\textit{Prefix, Module or package, Registrant, Homepage, Source repository, Issue tracker}.
-
-
-We recommend that short prefixes are avoided as there are a limited
-number of these very general names available. The
-file \texttt{l3prefixes.csv} contains more details on each module, for
-example any information on source repository or issue tracker.
-
-\PrintTable
-\end{document}
diff --git a/macros/latex/contrib/l3kernel/l3prg.dtx b/macros/latex/contrib/l3kernel/l3prg.dtx
deleted file mode 100644
index 8bbdd6a587..0000000000
--- a/macros/latex/contrib/l3kernel/l3prg.dtx
+++ /dev/null
@@ -1,1829 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3prg.dtx
-%
-% Copyright (C) 2005-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3prg} module\\ Control structures^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% Conditional processing in \LaTeX3 is defined as something that
-% performs a series of tests, possibly involving assignments and
-% calling other functions that do not read further ahead in the input
-% stream. After processing the input, a \emph{state} is returned. The
-% states returned are \meta{true} and \meta{false}.
-%
-% \LaTeX3 has two forms of conditional flow processing based
-% on these states. The first form is predicate functions that turn the
-% returned state into a boolean \meta{true} or \meta{false}. For
-% example, the function \cs{cs_if_free_p:N} checks whether the control
-% sequence given as its argument is free and then returns the boolean
-% \meta{true} or \meta{false} values to be used in testing with
-% \cs{if_predicate:w} or in functions to be described below. The second form
-% is the kind of functions choosing a particular argument from the
-% input stream based on the result of the testing as in
-% \cs{cs_if_free:NTF} which also takes one argument (the |N|) and then
-% executes either \texttt{true} or \texttt{false} depending on the
-% result.
-%
-% \begin{texnote}
-% The arguments are executed after exiting the underlying
-% |\if...\fi:| structure.
-% \end{texnote}
-%
-% \section{Defining a set of conditional functions}
-% \label{sec:l3prg:new-conditional-functions}
-%
-% \begin{function}[updated = 2022-11-01]
-% {
-% \prg_new_conditional:Npnn, \prg_set_conditional:Npnn, \prg_gset_conditional:Npnn,
-% \prg_new_conditional:Nnn, \prg_set_conditional:Nnn, \prg_gset_conditional:Nnn
-% }
-% \begin{syntax}
-% \cs{prg_new_conditional:Npnn} \cs[no-index]{\meta{name}:\meta{arg spec}} \meta{parameters} \Arg{conditions} \Arg{code} \\
-% \cs{prg_new_conditional:Nnn} \cs[no-index]{\meta{name}:\meta{arg spec}} \Arg{conditions} \Arg{code}
-% \end{syntax}
-% These functions create a family of conditionals using the same
-% \Arg{code} to perform the test created. Those conditionals are
-% expandable if \meta{code} is. The \texttt{new} versions check
-% for existing definitions and perform assignments globally
-% (\emph{cf.}~\cs{cs_new:Npn}) whereas the \texttt{set} versions do no
-% check and perform assignments locally (\emph{cf.}~\cs{cs_set:Npn}).
-% The conditionals created are dependent on the comma-separated list
-% of \meta{conditions}, which should be one or more of \texttt{p},
-% \texttt{T}, \texttt{F} and \texttt{TF}.
-% \end{function}
-%
-% \begin{function}[updated = 2012-02-06]
-% {
-% \prg_new_protected_conditional:Npnn, \prg_set_protected_conditional:Npnn, \prg_gset_protected_conditional:Npnn,
-% \prg_new_protected_conditional:Nnn, \prg_set_protected_conditional:Nnn, \prg_gset_protected_conditional:Nnn
-% }
-% \begin{syntax}
-% \cs{prg_new_protected_conditional:Npnn} \cs[no-index]{\meta{name}:\meta{arg spec}} \meta{parameters} \Arg{conditions} \Arg{code} \\
-% \cs{prg_new_protected_conditional:Nnn} \cs[no-index]{\meta{name}:\meta{arg spec}} \Arg{conditions} \Arg{code}
-% \end{syntax}
-% These functions create a family of protected conditionals using the
-% same \Arg{code} to perform the test created. The \meta{code} does
-% not need to be expandable. The \texttt{new} version check for
-% existing definitions and perform assignments globally
-% (\emph{cf.}~\cs{cs_new:Npn}) whereas the \texttt{set} version do
-% not (\emph{cf.}~\cs{cs_set:Npn}). The conditionals created are
-% depended on the comma-separated list of \meta{conditions}, which
-% should be one or more of \texttt{T}, \texttt{F} and \texttt{TF} (not
-% \texttt{p}).
-% \end{function}
-%
-% The conditionals are defined by \cs{prg_new_conditional:Npnn} and
-% friends as:
-% \begin{itemize}
-% \item \cs[no-index]{\meta{name}_p:\meta{arg spec}} --- a predicate function
-% which will supply either a logical \texttt{true} or logical
-% \texttt{false}. This function is intended for use in cases where
-% one or more logical tests are combined to lead to a final outcome.
-% This function cannot be defined for \texttt{protected}
-% conditionals.
-% \item \cs[no-index]{\meta{name}:\meta{arg spec}T} --- a function with one more
-% argument than the original \meta{arg spec} demands. The \meta{true
-% branch} code in this additional argument will be left on the
-% input stream only if the test is \texttt{true}.
-% \item \cs[no-index]{\meta{name}:\meta{arg spec}F} --- a function with one more
-% argument than the original \meta{arg spec} demands. The
-% \meta{false branch} code in this additional argument will be left
-% on the input stream only if the test is \texttt{false}.
-% \item \cs[no-index]{\meta{name}:\meta{arg spec}TF} --- a function with two
-% more argument than the original \meta{arg spec} demands. The
-% \meta{true branch} code in the first additional argument will be
-% left on the input stream if the test is \texttt{true}, while the
-% \meta{false branch} code in the second argument will be left on
-% the input stream if the test is \texttt{false}.
-% \end{itemize}
-% The \meta{code} of the test may use \meta{parameters} as specified by
-% the second argument to \cs{prg_set_conditional:Npnn}: this should
-% match the \meta{argument specification} but this is not enforced. The
-% |Nnn| versions infer the number of arguments from the argument
-% specification given (\emph{cf.}~\cs{cs_new:Nn}, \emph{etc.}). Within
-% the \meta{code}, the functions \cs{prg_return_true:} and
-% \cs{prg_return_false:} are used to indicate the logical outcomes of
-% the test.
-%
-% An example can easily clarify matters here:
-% \begin{verbatim}
-% \prg_set_conditional:Npnn \foo_if_bar:NN #1#2 { p , T , TF }
-% {
-% \if_meaning:w \l_tmpa_tl #1
-% \prg_return_true:
-% \else:
-% \if_meaning:w \l_tmpa_tl #2
-% \prg_return_true:
-% \else:
-% \prg_return_false:
-% \fi:
-% \fi:
-% }
-% \end{verbatim}
-% This defines the function |\foo_if_bar_p:NN|, |\foo_if_bar:NNTF| and
-% |\foo_if_bar:NNT| but not |\foo_if_bar:NNF| (because |F| is missing
-% from the \meta{conditions} list). The return statements take care of
-% resolving the remaining \cs{else:} and \cs{fi:} before returning the
-% state. There must be a return statement for each branch; failing to do
-% so will result in erroneous output if that branch is executed.
-%
-% The special case where the code of a conditional ends with
-% \cs{prg_return_true:} \cs{else:} \cs{prg_return_false:} \cs{fi:} is
-% optimized.
-%
-% \begin{function}[updated = 2023-05-26]
-% {
-% \prg_new_eq_conditional:NNn,
-% \prg_set_eq_conditional:NNn,
-% \prg_gset_eq_conditional:NNn
-% }
-% \begin{syntax}
-% \cs{prg_new_eq_conditional:NNn} \cs[no-index]{\meta{name_1}:\meta{arg spec_1}} \cs[no-index]{\meta{name_2}:\meta{arg spec_2}} \Arg{conditions}
-% \end{syntax}
-% These functions copy a family of conditionals. The \texttt{new} version
-% checks for existing definitions (\emph{cf.}~\cs{cs_new_eq:NN}) whereas
-% the \texttt{set} version does not (\emph{cf.}~\cs{cs_set_eq:NN}). The
-% conditionals copied are depended on the comma-separated list of
-% \meta{conditions}, which should be one or more of \texttt{p}, \texttt{T},
-% \texttt{F} and \texttt{TF}.
-% \end{function}
-%
-% \begin{function}[EXP]{\prg_return_true:, \prg_return_false:}
-% \begin{syntax}
-% \cs{prg_return_true:}
-% \cs{prg_return_false:}
-% \end{syntax}
-% These \enquote{return} functions define the logical state of a conditional statement.
-% They appear within the code for a conditional
-% function generated by \cs{prg_set_conditional:Npnn}, \emph{etc}, to indicate
-% when a true or false branch should be taken.
-% While they may appear multiple times each within the code of such conditionals,
-% the execution of the conditional must result in the expansion of one of these
-% two functions \emph{exactly once}.
-%
-% The return functions trigger what is internally an \texttt{f}-expansion process to complete
-% the evaluation of the conditional. Therefore, after \cs{prg_return_true:} or \cs{prg_return_false:}
-% there must be no non-expandable material in the input stream for the remainder of
-% the expansion of the conditional code. This includes other instances of either of these functions.
-% \end{function}
-%
-% \begin{function}[added = 2017-12-12]{\prg_generate_conditional_variant:Nnn}
-% \begin{syntax}
-% \cs{prg_generate_conditional_variant:Nnn} \cs[no-index]{\meta{name}:\meta{arg spec}} \Arg{variant argument specifiers} \Arg{condition specifiers}
-% \end{syntax}
-% Defines argument-specifier variants of conditionals. This is
-% equivalent to running \cs{cs_generate_variant:Nn} \meta{conditional}
-% \Arg{variant argument specifiers} on each \meta{conditional}
-% described by the \meta{condition specifiers}. These base-form
-% \meta{conditionals} are obtained from the \meta{name} and \meta{arg
-% spec} as described for \cs{prg_new_conditional:Npnn}, and they
-% should be defined.
-% \end{function}
-%
-% \section{The boolean data type}
-%
-% This section describes a boolean data type which is closely
-% connected to conditional processing as sometimes you want to
-% execute some code depending on the value of a switch
-% (\emph{e.g.},~draft/final) and other times you perhaps want to use it as a
-% predicate function in an \cs{if_predicate:w} test. The problem of the
-% primitive \cs{if_false:} and \cs{if_true:} tokens is that it is not
-% always safe to pass them around as they may interfere with scanning
-% for termination of primitive conditional processing. Therefore, we
-% employ two canonical booleans: \cs{c_true_bool} or
-% \cs{c_false_bool}. Besides preventing problems as described above, it
-% also allows us to implement a simple boolean parser supporting the
-% logical operations And, Or, Not, \emph{etc.}\ which can then be used on
-% both the boolean type and predicate functions.
-%
-% All conditional |\bool_| functions except assignments are expandable
-% and expect the input to also be fully expandable (which generally
-% means being constructed from predicate functions and booleans, possibly nested).
-%
-% \begin{texnote}
-% The \texttt{bool} data type is not implemented using the
-% \tn{iffalse}/\tn{iftrue} primitives, in contrast to \tn{newif},
-% \emph{etc.}, in plain \TeX{}, \LaTeXe{} and so on. Programmers should
-% not base use of \texttt{bool} switches on any particular expectation
-% of the implementation.
-% \end{texnote}
-%
-% \begin{function}{\bool_new:N, \bool_new:c}
-% \begin{syntax}
-% \cs{bool_new:N} \meta{boolean}
-% \end{syntax}
-% Creates a new \meta{boolean} or raises an error if the
-% name is already taken. The declaration is global. The
-% \meta{boolean} is initially \texttt{false}.
-% \end{function}
-%
-% \begin{function}[added = 2017-11-28]{\bool_const:Nn, \bool_const:cn}
-% \begin{syntax}
-% \cs{bool_const:Nn} \meta{boolean} \Arg{boolexpr}
-% \end{syntax}
-% Creates a new constant \meta{boolean} or raises an error if the name
-% is already taken. The value of the \meta{boolean} is set globally to
-% the result of evaluating the \meta{boolexpr}.
-% \end{function}
-%
-% \begin{function}
-% {
-% \bool_set_false:N , \bool_set_false:c ,
-% \bool_gset_false:N, \bool_gset_false:c
-% }
-% \begin{syntax}
-% \cs{bool_set_false:N} \meta{boolean}
-% \end{syntax}
-% Sets \meta{boolean} logically \texttt{false}.
-% \end{function}
-%
-% \begin{function}
-% {
-% \bool_set_true:N , \bool_set_true:c ,
-% \bool_gset_true:N , \bool_gset_true:c
-% }
-% \begin{syntax}
-% \cs{bool_set_true:N} \meta{boolean}
-% \end{syntax}
-% Sets \meta{boolean} logically \texttt{true}.
-% \end{function}
-%
-% \begin{function}
-% {
-% \bool_set_eq:NN , \bool_set_eq:cN , \bool_set_eq:Nc , \bool_set_eq:cc ,
-% \bool_gset_eq:NN, \bool_gset_eq:cN, \bool_gset_eq:Nc, \bool_gset_eq:cc
-% }
-% \begin{syntax}
-% \cs{bool_set_eq:NN} \meta{boolean_1} \meta{boolean_2}
-% \end{syntax}
-% Sets \meta{boolean_1} to the current value of \meta{boolean_2}.
-% \end{function}
-%
-% \begin{function}[updated = 2017-07-15]
-% {\bool_set:Nn, \bool_set:cn, \bool_gset:Nn, \bool_gset:cn}
-% \begin{syntax}
-% \cs{bool_set:Nn} \meta{boolean} \Arg{boolexpr}
-% \end{syntax}
-% Evaluates the \meta{boolean expression} as described for
-% \cs{bool_if:nTF}, and sets the \meta{boolean} variable to
-% the logical truth of this evaluation.
-% \end{function}
-%
-% \begin{function}[added = 2018-05-10]
-% {
-% \bool_set_inverse:N , \bool_set_inverse:c ,
-% \bool_gset_inverse:N, \bool_gset_inverse:c
-% }
-% \begin{syntax}
-% \cs{bool_set_inverse:N} \meta{boolean}
-% \end{syntax}
-% Toggles the \meta{boolean} from \texttt{true} to \texttt{false} and
-% conversely: sets it to the inverse of its current value.
-% \end{function}
-%
-% \begin{function}[EXP,pTF, updated = 2017-07-15]{\bool_if:N, \bool_if:c}
-% \begin{syntax}
-% \cs{bool_if_p:N} \meta{boolean}
-% \cs{bool_if:NTF} \meta{boolean} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests the current truth of \meta{boolean}, and continues expansion
-% based on this result.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2021-11-01, updated = 2023-11-14]
-% {\bool_to_str:N, \bool_to_str:c, \bool_to_str:n}
-% \begin{syntax}
-% \cs{bool_to_str:N} \meta{boolean}
-% \cs{bool_to_str:n} \meta{boolean expression}
-% \end{syntax}
-% Expands to the string \texttt{true} or \texttt{false} depending on
-% the logical truth of the \meta{boolean} or \meta{boolean
-% expression}.
-% \end{function}
-%
-% \begin{function}[added = 2012-02-09, updated = 2021-04-29]{\bool_show:N, \bool_show:c}
-% \begin{syntax}
-% \cs{bool_show:N} \meta{boolean}
-% \end{syntax}
-% Displays the logical truth of the \meta{boolean} on the terminal.
-% \end{function}
-%
-% \begin{function}[added = 2012-02-09, updated = 2017-07-15]{\bool_show:n}
-% \begin{syntax}
-% \cs{bool_show:n} \Arg{boolean expression}
-% \end{syntax}
-% Displays the logical truth of the \meta{boolean expression} on the
-% terminal.
-% \end{function}
-%
-% \begin{function}[added = 2014-08-22, updated = 2021-04-29]{\bool_log:N, \bool_log:c}
-% \begin{syntax}
-% \cs{bool_log:N} \meta{boolean}
-% \end{syntax}
-% Writes the logical truth of the \meta{boolean} in the log file.
-% \end{function}
-%
-% \begin{function}[added = 2014-08-22, updated = 2017-07-15]{\bool_log:n}
-% \begin{syntax}
-% \cs{bool_log:n} \Arg{boolean expression}
-% \end{syntax}
-% Writes the logical truth of the \meta{boolean expression} in the log
-% file.
-% \end{function}
-%
-% \begin{function}[EXP, pTF, added=2012-03-03]
-% {\bool_if_exist:N, \bool_if_exist:c}
-% \begin{syntax}
-% \cs{bool_if_exist_p:N} \meta{boolean}
-% \cs{bool_if_exist:NTF} \meta{boolean} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests whether the \meta{boolean} is currently defined. This does not
-% check that the \meta{boolean} really is a boolean variable.
-% \end{function}
-%
-% \subsection{Constant and scratch booleans}
-%
-% \begin{variable}{\c_true_bool, \c_false_bool}
-% Constants that represent |true| and |false|, respectively. Used to
-% implement predicates.
-% \end{variable}
-%
-% \begin{variable}{\l_tmpa_bool, \l_tmpb_bool}
-% A scratch boolean for local assignment. It is never used by
-% the kernel code, and so is safe for use with any \LaTeX3-defined
-% function. However, it may be overwritten by other non-kernel
-% code and so should only be used for short-term storage.
-% \end{variable}
-%
-% \begin{variable}{\g_tmpa_bool, \g_tmpb_bool}
-% A scratch boolean for global assignment. It is never used by
-% the kernel code, and so is safe for use with any \LaTeX3-defined
-% function. However, it may be overwritten by other non-kernel
-% code and so should only be used for short-term storage.
-% \end{variable}
-%
-% \section{Boolean expressions}
-%
-% As we have a boolean datatype and predicate functions returning
-% boolean \meta{true} or \meta{false} values, it seems only fitting
-% that we also provide a parser for \meta{boolean expressions}.
-%
-% A boolean expression is an expression which given input in the form
-% of predicate functions and boolean variables, return boolean
-% \meta{true} or \meta{false}. It supports the logical operations And,
-% Or and Not as the well-known infix operators |&&| and \verb"||" and prefix~|!|
-% with their usual precedences (namely, |&&| binds more tightly than
-% \verb"||"). In addition to this, parentheses can be used to isolate
-% sub-expressions. For example,
-% \begin{verbatim}
-% \int_compare_p:n { 1 = 1 } &&
-% (
-% \int_compare_p:n { 2 = 3 } ||
-% \int_compare_p:n { 4 <= 4 } ||
-% \str_if_eq_p:nn { abc } { def }
-% ) &&
-% ! \int_compare_p:n { 2 = 4 }
-% \end{verbatim}
-% is a valid boolean expression.
-%
-% Contrarily to some other programming languages, the operators |&&| and
-% \verb"||" evaluate both operands in all cases, even when the first
-% operand is enough to determine the result. This \enquote{eager}
-% evaluation should be contrasted with the \enquote{lazy} evaluation of
-% \cs[no-index]{bool_lazy_\ldots{}} functions.
-%
-% \begin{texnote}
-% The eager evaluation of boolean expressions is unfortunately
-% necessary in \TeX{}. Indeed, a lazy parser can get confused if |&&|
-% or \verb"||" or parentheses appear as (unbraced) arguments of some
-% predicates. For instance, the innocuous-looking expression below
-% would break (in a lazy parser) if |#1| were a closing parenthesis
-% and \cs[no-index]{l_tmpa_bool} were \texttt{true}.
-% \begin{verbatim}
-% ( \l_tmpa_bool || \token_if_eq_meaning_p:NN X #1 )
-% \end{verbatim}
-% \end{texnote}
-%
-% Minimal (lazy) evaluation can be obtained using the conditionals
-% \cs{bool_lazy_all:nTF}, \cs{bool_lazy_and:nnTF}, \cs{bool_lazy_any:nTF}, or
-% \cs{bool_lazy_or:nnTF}, which only evaluate their boolean expression
-% arguments when they are needed to determine the resulting truth
-% value. For example, when evaluating the boolean expression
-% \begin{verbatim}
-% \bool_lazy_and_p:nn
-% {
-% \bool_lazy_any_p:n
-% {
-% { \int_compare_p:n { 2 = 3 } }
-% { \int_compare_p:n { 4 <= 4 } }
-% { \int_compare_p:n { 1 = \error } } % skipped
-% }
-% }
-% { ! \int_compare_p:n { 2 = 4 } }
-% \end{verbatim}
-% the line marked with |skipped| is not expanded because the result
-% of \cs{bool_lazy_any_p:n} is known once the second boolean expression is
-% found to be logically \texttt{true}. On the other hand, the last
-% line is expanded because its logical value is needed to determine the
-% result of \cs{bool_lazy_and_p:nn}.
-%
-% \begin{function}[EXP, pTF, updated = 2017-07-15]{\bool_if:n}
-% \begin{syntax}
-% \cs{bool_if_p:n} \Arg{boolean expression}
-% \cs{bool_if:nTF} \Arg{boolean expression} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests the current truth of \meta{boolean expression}, and
-% continues expansion based on this result. The
-% \meta{boolean expression} should consist of a series of predicates
-% or boolean variables with the logical relationship between these
-% defined using |&&| (\enquote{And}), \verb"||" (\enquote{Or}),
-% |!| (\enquote{Not}) and parentheses. The logical Not applies to
-% the next predicate or group.
-% \end{function}
-%
-% \begin{function}[EXP, pTF, added = 2015-11-15, updated = 2017-07-15]{\bool_lazy_all:n}
-% \begin{syntax}
-% \cs{bool_lazy_all_p:n} \{ \Arg{boolexpr_1} \Arg{boolexpr_2} $\cdots$ \Arg{boolexpr_N} \}
-% \cs{bool_lazy_all:nTF} \{ \Arg{boolexpr_1} \Arg{boolexpr_2} $\cdots$ \Arg{boolexpr_N} \} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Implements the \enquote{And} operation on the \meta{boolean
-% expressions}, hence is \texttt{true} if all of them are
-% \texttt{true} and \texttt{false} if any of them is \texttt{false}.
-% Contrarily to the infix operator |&&|, only the \meta{boolean
-% expressions} which are needed to determine the result of
-% \cs{bool_lazy_all:nTF} are evaluated. See also \cs{bool_lazy_and:nnTF}
-% when there are only two \meta{boolean expressions}.
-% \end{function}
-%
-% \begin{function}[EXP, pTF, added = 2015-11-15, updated = 2017-07-15]{\bool_lazy_and:nn}
-% \begin{syntax}
-% \cs{bool_lazy_and_p:nn} \Arg{boolexpr_1} \Arg{boolexpr_2}
-% \cs{bool_lazy_and:nnTF} \Arg{boolexpr_1} \Arg{boolexpr_2} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Implements the \enquote{And} operation between two boolean
-% expressions, hence is \texttt{true} if both are \texttt{true}.
-% Contrarily to the infix operator |&&|, the \meta{boolexpr_2} is only
-% evaluated if it is needed to determine the result of
-% \cs{bool_lazy_and:nnTF}. See also \cs{bool_lazy_all:nTF} when there are more
-% than two \meta{boolean expressions}.
-% \end{function}
-%
-% \begin{function}[EXP, pTF, added = 2015-11-15, updated = 2017-07-15]{\bool_lazy_any:n}
-% \begin{syntax}
-% \cs{bool_lazy_any_p:n} \{ \Arg{boolexpr_1} \Arg{boolexpr_2} $\cdots$ \Arg{boolexpr_N} \}
-% \cs{bool_lazy_any:nTF} \{ \Arg{boolexpr_1} \Arg{boolexpr_2} $\cdots$ \Arg{boolexpr_N} \} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Implements the \enquote{Or} operation on the \meta{boolean
-% expressions}, hence is \texttt{true} if any of them is
-% \texttt{true} and \texttt{false} if all of them are \texttt{false}.
-% Contrarily to the infix operator \verb"||", only the \meta{boolean
-% expressions} which are needed to determine the result of
-% \cs{bool_lazy_any:nTF} are evaluated. See also \cs{bool_lazy_or:nnTF}
-% when there are only two \meta{boolean expressions}.
-% \end{function}
-%
-% \begin{function}[EXP, pTF, added = 2015-11-15, updated = 2017-07-15]{\bool_lazy_or:nn}
-% \begin{syntax}
-% \cs{bool_lazy_or_p:nn} \Arg{boolexpr_1} \Arg{boolexpr_2}
-% \cs{bool_lazy_or:nnTF} \Arg{boolexpr_1} \Arg{boolexpr_2} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Implements the \enquote{Or} operation between two boolean
-% expressions, hence is \texttt{true} if either one is \texttt{true}.
-% Contrarily to the infix operator \verb"||", the \meta{boolexpr_2}
-% is only evaluated if it is needed to determine the result of
-% \cs{bool_lazy_or:nnTF}. See also \cs{bool_lazy_any:nTF} when there are more
-% than two \meta{boolean expressions}.
-% \end{function}
-%
-% \begin{function}[EXP, updated = 2017-07-15]{\bool_not_p:n}
-% \begin{syntax}
-% \cs{bool_not_p:n} \Arg{boolean expression}
-% \end{syntax}
-% Function version of |!(|\meta{boolean expression}|)| within a boolean
-% expression.
-% \end{function}
-%
-% \begin{function}[EXP, pTF, added = 2018-05-09]{\bool_xor:nn}
-% \begin{syntax}
-% \cs{bool_xor_p:nn} \Arg{boolexpr_1} \Arg{boolexpr_2}
-% \cs{bool_xor:nnTF} \Arg{boolexpr_1} \Arg{boolexpr_2} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Implements an \enquote{exclusive or} operation between two boolean
-% expressions. There is no infix operation for this logical operation.
-% \end{function}
-%
-% \section{Logical loops}
-%
-% Loops using either boolean expressions or stored boolean values.
-%
-% \begin{function}[rEXP, updated = 2017-07-15]{\bool_do_until:Nn, \bool_do_until:cn}
-% \begin{syntax}
-% \cs{bool_do_until:Nn} \meta{boolean} \Arg{code}
-% \end{syntax}
-% Places the \meta{code} in the input stream for \TeX{} to process,
-% and then checks the logical value of the \meta{boolean}. If it is
-% \texttt{false} then the \meta{code} is inserted into the input
-% stream again and the process loops until the \meta{boolean} is
-% \texttt{true}.
-% \end{function}
-%
-% \begin{function}[rEXP, updated = 2017-07-15]{\bool_do_while:Nn, \bool_do_while:cn}
-% \begin{syntax}
-% \cs{bool_do_while:Nn} \meta{boolean} \Arg{code}
-% \end{syntax}
-% Places the \meta{code} in the input stream for \TeX{} to process,
-% and then checks the logical value of the \meta{boolean}. If it is
-% \texttt{true} then the \meta{code} is inserted into the input
-% stream again and the process loops until the \meta{boolean} is
-% \texttt{false}.
-% \end{function}
-%
-% \begin{function}[rEXP, updated = 2017-07-15]{\bool_until_do:Nn, \bool_until_do:cn}
-% \begin{syntax}
-% \cs{bool_until_do:Nn} \meta{boolean} \Arg{code}
-% \end{syntax}
-% This function first checks the logical value of the \meta{boolean}.
-% If it is \texttt{false} the \meta{code} is placed in the input stream
-% and expanded. After the completion of the \meta{code} the truth
-% of the \meta{boolean} is re-evaluated. The process then loops
-% until the \meta{boolean} is \texttt{true}.
-% \end{function}
-%
-% \begin{function}[rEXP, updated = 2017-07-15]{\bool_while_do:Nn, \bool_while_do:cn}
-% \begin{syntax}
-% \cs{bool_while_do:Nn} \meta{boolean} \Arg{code}
-% \end{syntax}
-% This function first checks the logical value of the \meta{boolean}.
-% If it is \texttt{true} the \meta{code} is placed in the input stream
-% and expanded. After the completion of the \meta{code} the truth
-% of the \meta{boolean} is re-evaluated. The process then loops
-% until the \meta{boolean} is \texttt{false}.
-% \end{function}
-%
-% \begin{function}[rEXP, updated = 2017-07-15]{\bool_do_until:nn}
-% \begin{syntax}
-% \cs{bool_do_until:nn} \Arg{boolean expression} \Arg{code}
-% \end{syntax}
-% Places the \meta{code} in the input stream for \TeX{} to process,
-% and then checks the logical value of the \meta{boolean expression}
-% as described for \cs{bool_if:nTF}. If it is \texttt{false} then the
-% \meta{code} is inserted into the input stream again and the
-% process loops until the \meta{boolean expression} evaluates to
-% \texttt{true}.
-% \end{function}
-%
-% \begin{function}[rEXP, updated = 2017-07-15]{\bool_do_while:nn}
-% \begin{syntax}
-% \cs{bool_do_while:nn} \Arg{boolean expression} \Arg{code}
-% \end{syntax}
-% Places the \meta{code} in the input stream for \TeX{} to process,
-% and then checks the logical value of the \meta{boolean expression}
-% as described for \cs{bool_if:nTF}. If it is \texttt{true} then the
-% \meta{code} is inserted into the input stream again and the
-% process loops until the \meta{boolean expression} evaluates to
-% \texttt{false}.
-% \end{function}
-%
-% \begin{function}[rEXP, updated = 2017-07-15]{\bool_until_do:nn}
-% \begin{syntax}
-% \cs{bool_until_do:nn} \Arg{boolean expression} \Arg{code}
-% \end{syntax}
-% This function first checks the logical value of the
-% \meta{boolean expression} (as described for \cs{bool_if:nTF}).
-% If it is \texttt{false} the \meta{code} is placed in the input stream
-% and expanded. After the completion of the \meta{code} the truth
-% of the \meta{boolean expression} is re-evaluated. The process
-% then loops until the \meta{boolean expression} is \texttt{true}.
-% \end{function}
-%
-% \begin{function}[rEXP, updated = 2017-07-15]{\bool_while_do:nn}
-% \begin{syntax}
-% \cs{bool_while_do:nn} \Arg{boolean expression} \Arg{code}
-% \end{syntax}
-% This function first checks the logical value of the
-% \meta{boolean expression} (as described for \cs{bool_if:nTF}).
-% If it is \texttt{true} the \meta{code} is placed in the input stream
-% and expanded. After the completion of the \meta{code} the truth
-% of the \meta{boolean expression} is re-evaluated. The process
-% then loops until the \meta{boolean expression} is \texttt{false}.
-% \end{function}
-%
-% \begin{function}[added = 2023-05-03, EXP, noTF]{\bool_case:n}
-% \begin{syntax}
-% \cs{bool_case:nTF} \\
-% ~~|{| \\
-% ~~~~\Arg{boolexpr case_1} \Arg{code case_1} \\
-% ~~~~\Arg{boolexpr case_2} \Arg{code case_2} \\
-% ~~~~\ldots \\
-% ~~~~\Arg{boolexpr case_n} \Arg{code case_n} \\
-% ~~|}| \\
-% ~~\Arg{true code}
-% ~~\Arg{false code}
-% \end{syntax}
-% Evaluates in turn each of the \meta{boolean expression cases} until
-% the first one that evaluates to \texttt{true}.
-% The \meta{code} associated to this first case is left in the input
-% stream, followed by the \meta{true code}, and other cases are
-% discarded. If none of the cases match then only the \meta{false
-% code} is inserted. The function \cs{bool_case:n},
-% which does nothing if there is no match, is
-% also available. For example
-% \begin{verbatim}
-% \bool_case:nF
-% {
-% { \dim_compare_p:n { \l__mypkg_wd_dim <= 10pt } }
-% { Fits }
-% { \int_compare_p:n { \l__mypkg_total_int >= 10 } }
-% { Many }
-% { \l__mypkg_special_bool }
-% { Special }
-% }
-% { No idea! }
-% \end{verbatim}
-% leaves \enquote{\texttt{Fits}} or \enquote{\texttt{Many}} or
-% \enquote{\texttt{Special}} or \enquote{\texttt{No idea!}} in the
-% input stream, in a way similar to some other language's
-% \enquote{\texttt{if} \ldots\ \texttt{elseif} \ldots\ \texttt{elseif} \ldots\
-% \texttt{else} \ldots}.
-% \end{function}
-%
-% \section{Producing multiple copies}
-%
-% \begin{function}[updated = 2011-07-04, EXP]{\prg_replicate:nn}
-% \begin{syntax}
-% \cs{prg_replicate:nn} \Arg{integer expression} \Arg{tokens}
-% \end{syntax}
-% Evaluates the \meta{integer expression} (which should be
-% zero or positive) and creates the resulting number of copies
-% of the \meta{tokens}. The function is both expandable and safe for
-% nesting. It yields its result after two expansion steps.
-% \end{function}
-%
-% \section{Detecting \TeX{}'s mode}
-%
-% \begin{function}[EXP,pTF]{\mode_if_horizontal:}
-% \begin{syntax}
-% \cs{mode_if_horizontal_p:}
-% \cs{mode_if_horizontal:TF} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Detects if \TeX{} is currently in horizontal mode.
-% \end{function}
-%
-% \begin{function}[EXP,pTF]{\mode_if_inner:}
-% \begin{syntax}
-% \cs{mode_if_inner_p:}
-% \cs{mode_if_inner:TF} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Detects if \TeX{} is currently in inner mode.
-% \end{function}
-%
-% \begin{function}[updated = 2011-09-05, EXP,pTF]{\mode_if_math:}
-% \begin{syntax}
-% \cs{mode_if_math_p:}
-% \cs{mode_if_math:TF} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Detects if \TeX{} is currently in maths mode.
-% \end{function}
-%
-% \begin{function}[EXP,pTF]{\mode_if_vertical:}
-% \begin{syntax}
-% \cs{mode_if_vertical_p:}
-% \cs{mode_if_vertical:TF} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Detects if \TeX{} is currently in vertical mode.
-% \end{function}
-%
-% \section{Primitive conditionals}
-%
-% \begin{function}[EXP]{\if_predicate:w}
-% \begin{syntax}
-% \cs{if_predicate:w} \meta{predicate} \meta{true code} \cs{else:} \meta{false code} \cs{fi:}
-% \end{syntax}
-% This function takes a predicate function and
-% branches according to the result. (In practice this function would also
-% accept a single boolean variable in place of the \meta{predicate} but to make the
-% coding clearer this should be done through \cs{if_bool:N}.)
-% \end{function}
-%
-% \begin{function}[EXP]{\if_bool:N}
-% \begin{syntax}
-% \cs{if_bool:N} \meta{boolean} \meta{true code} \cs{else:} \meta{false code} \cs{fi:}
-% \end{syntax}
-% This function takes a boolean variable and
-% branches according to the result.
-% \end{function}
-%
-% \section{Nestable recursions and mappings}
-%
-% There are a number of places where recursion or mapping constructs are used in
-% \pkg{expl3}. At a low-level, these typically require insertion of tokens
-% at the end of the content to allow \enquote{clean up}. To support such
-% mappings in a nestable form, the following functions are provided.
-%
-% \begin{function}[EXP, added = 2018-03-26]{\prg_break_point:Nn}
-% \begin{syntax}
-% \cs{prg_break_point:Nn} \cs[no-index]{\meta{type}_map_break:} \Arg{code}
-% \end{syntax}
-% Used to mark the end of a recursion or mapping: the functions
-% \cs[no-index]{\meta{type}_map_break:} and
-% \cs[no-index]{\meta{type}_map_break:n} use this to break out of the loop
-% (see \cs{prg_map_break:Nn} for how to set these up).
-% After the loop ends, the \meta{code} is inserted into the input stream. This
-% occurs even if the break functions are \emph{not} applied:
-% \cs{prg_break_point:Nn} is functionally-equivalent in these cases
-% to \cs{use_ii:nn}.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2018-03-26]{\prg_map_break:Nn}
-% \begin{syntax}
-% \cs{prg_map_break:Nn} \cs[no-index]{\meta{type}_map_break:} \Arg{user code}
-% \ldots{}
-% \cs{prg_break_point:Nn} \cs[no-index]{\meta{type}_map_break:} \Arg{ending code}
-% \end{syntax}
-% Breaks a recursion in mapping contexts, inserting in the input
-% stream the \meta{user code} after the \meta{ending code} for the
-% loop. The function breaks loops, inserting their \meta{ending
-% code}, until reaching a loop with the same \meta{type} as its
-% first argument. This \cs[no-index]{\meta{type}_map_break:} argument
-% must be defined; it is simply used as a recognizable marker for the \meta{type}.
-%
-% For types with mappings defined in the kernel,
-% \cs[no-index]{\meta{type}_map_break:} and \cs[no-index]{\meta{type}_map_break:n}
-% are defined as \cs{prg_map_break:Nn} \cs[no-index]{\meta{type}_map_break:} |{}|
-% and the same with |{}| omitted.
-% \end{function}
-%
-% \subsection{Simple mappings}
-%
-% In addition to the more complex mappings above, non-nestable mappings are
-% used in a number of locations and support is provided for these.
-%
-% \begin{function}[EXP, added = 2018-03-27]{\prg_break_point:}
-% This copy of \cs{prg_do_nothing:} is used to mark the end of a fast
-% short-term recursion: the function \cs{prg_break:n} uses this to
-% break out of the loop.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2018-03-27]{\prg_break:, \prg_break:n}
-% \begin{syntax}
-% \cs{prg_break:n} \Arg{code} \ldots{} \cs{prg_break_point:}
-% \end{syntax}
-% Breaks a recursion which has no \meta{ending code} and which is not
-% a user-breakable mapping (see for instance
-% implementation of \cs{int_step_function:nnnN}), and
-% inserts the \meta{code} in the input stream.
-% \end{function}
-%
-% \section{Internal programming functions}
-%
-% \begin{function}[updated = 2011-08-11, EXP]
-% {\group_align_safe_begin:, \group_align_safe_end:}
-% \begin{syntax}
-% \cs{group_align_safe_begin:}
-% \ldots
-% \cs{group_align_safe_end:}
-% \end{syntax}
-% These functions are used to enclose material in a \TeX{} alignment
-% environment within a specially-constructed group. This group is
-% designed in such a way that it does not add brace groups to the
-% output but does act as a group for the |&| token inside
-% \tn{halign}. This is necessary to allow grabbing of tokens
-% for testing purposes, as \TeX{} uses group level to determine the
-% effect of alignment tokens. Without the special grouping, the use of
-% a function such as \cs{peek_after:Nw} would result in a forbidden
-% comparison of the internal \tn{endtemplate} token, yielding a
-% fatal error. Each \cs{group_align_safe_begin:} must be matched by a
-% \cs{group_align_safe_end:}, although this does not have to occur
-% within the same function.
-% \end{function}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3prg} implementation}
-%
-% \TestFiles{m3prg001.lvt,m3prg002.lvt,m3prg003.lvt}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \subsection{Primitive conditionals}
-%
-% \begin{macro}{\if_bool:N}
-% \begin{macro}{\if_predicate:w}
-% Those two primitive \TeX{} conditionals are synonyms.
-% \cs{if_bool:N} is defined in \pkg{l3basics}, as it's needed
-% earlier to define quark test functions.
-% \begin{macrocode}
-\cs_new_eq:NN \if_predicate:w \tex_ifodd:D
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Defining a set of conditional functions}
-%
-% \begin{macro}
-% {
-% \prg_set_conditional:Npnn,
-% \prg_new_conditional:Npnn,
-% \prg_set_protected_conditional:Npnn,
-% \prg_new_protected_conditional:Npnn
-% }
-% \begin{macro}
-% {
-% \prg_set_conditional:Nnn,
-% \prg_new_conditional:Nnn,
-% \prg_set_protected_conditional:Nnn,
-% \prg_new_protected_conditional:Nnn
-% }
-% \begin{macro}{\prg_set_eq_conditional:NNn, \prg_new_eq_conditional:NNn}
-% \begin{macro}{\prg_return_true:}
-% \TestMissing
-% {This function is implicitly tested with all other conditionals!}
-% \begin{macro}{\prg_return_false:}
-% \TestMissing
-% {This function is also implicitly tested with all other conditionals!}
-% These are all defined in \pkg{l3basics}, as they are needed
-% \enquote{early}. This is just a reminder!
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{The boolean data type}
-%
-% \begin{macrocode}
-%<@@=bool>
-% \end{macrocode}
-%
-% \begin{macro}{\bool_new:N, \bool_new:c}
-% \UnitTested
-% Boolean variables have to be initiated when they are created. Other
-% than that there is not much to say here.
-% \begin{macrocode}
-\cs_new_protected:Npn \bool_new:N #1 { \cs_new_eq:NN #1 \c_false_bool }
-\cs_generate_variant:Nn \bool_new:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[added = 2017-11-28]{\bool_const:Nn, \bool_const:cn}
-% A merger between \cs{tl_const:Nn} and \cs{bool_set:Nn}.
-% \begin{macrocode}
-\cs_new_protected:Npn \bool_const:Nn #1#2
- {
- \__kernel_chk_if_free_cs:N #1
- \tex_global:D \tex_chardef:D #1 = \bool_if_p:n {#2}
- }
-\cs_generate_variant:Nn \bool_const:Nn { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \bool_set_true:N, \bool_set_true:c,
-% \bool_gset_true:N, \bool_gset_true:c,
-% \bool_set_false:N, \bool_set_false:c,
-% \bool_gset_false:N, \bool_gset_false:c
-% }
-% \UnitTested
-% Setting is already pretty easy.
-% When \texttt{check-declarations} is active, the definitions are patched to
-% make sure the boolean exists. This is needed because booleans are
-% not based on token lists nor on \TeX{} registers.
-% \begin{macrocode}
-\cs_new_protected:Npn \bool_set_true:N #1
- { \cs_set_eq:NN #1 \c_true_bool }
-\cs_new_protected:Npn \bool_set_false:N #1
- { \cs_set_eq:NN #1 \c_false_bool }
-\cs_new_protected:Npn \bool_gset_true:N #1
- { \cs_gset_eq:NN #1 \c_true_bool }
-\cs_new_protected:Npn \bool_gset_false:N #1
- { \cs_gset_eq:NN #1 \c_false_bool }
-\cs_generate_variant:Nn \bool_set_true:N { c }
-\cs_generate_variant:Nn \bool_set_false:N { c }
-\cs_generate_variant:Nn \bool_gset_true:N { c }
-\cs_generate_variant:Nn \bool_gset_false:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \bool_set_eq:NN, \bool_set_eq:cN,
-% \bool_set_eq:Nc, \bool_set_eq:cc,
-% \bool_gset_eq:NN, \bool_gset_eq:cN,
-% \bool_gset_eq:Nc, \bool_gset_eq:cc
-% }
-% \UnitTested
-% The usual copy code. While it would be cleaner semantically to copy
-% the \cs{cs_set_eq:NN} family of functions, we copy \cs{tl_set_eq:NN}
-% because that has the correct checking code.
-% \begin{macrocode}
-\cs_new_eq:NN \bool_set_eq:NN \tl_set_eq:NN
-\cs_new_eq:NN \bool_gset_eq:NN \tl_gset_eq:NN
-\cs_generate_variant:Nn \bool_set_eq:NN { Nc, cN, cc }
-\cs_generate_variant:Nn \bool_gset_eq:NN { Nc, cN, cc }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\bool_set:Nn, \bool_set:cn}
-% \begin{macro}{\bool_gset:Nn, \bool_gset:cn}
-% This function evaluates a boolean expression and assigns the first
-% argument the meaning \cs{c_true_bool} or \cs{c_false_bool}. Again,
-% we include some checking code. It is important to evaluate the
-% expression before applying the \tn{chardef} primitive, because that
-% primitive sets the left-hand side to \cs{scan_stop:} before looking
-% for the right-hand side.
-% \begin{macrocode}
-\cs_new_protected:Npn \bool_set:Nn #1#2
- {
- \exp_last_unbraced:NNNf
- \tex_chardef:D #1 = { \bool_if_p:n {#2} }
- }
-\cs_new_protected:Npn \bool_gset:Nn #1#2
- {
- \exp_last_unbraced:NNNNf
- \tex_global:D \tex_chardef:D #1 = { \bool_if_p:n {#2} }
- }
-\cs_generate_variant:Nn \bool_set:Nn { c }
-\cs_generate_variant:Nn \bool_gset:Nn { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[added = 2018-05-10]
-% {\bool_set_inverse:N, \bool_set_inverse:c, \bool_gset_inverse:N, \bool_gset_inverse:c}
-% Set to \texttt{false} or \texttt{true} locally or globally.
-% \begin{macrocode}
-\cs_new_protected:Npn \bool_set_inverse:N #1
- { \bool_if:NTF #1 { \bool_set_false:N } { \bool_set_true:N } #1 }
-\cs_generate_variant:Nn \bool_set_inverse:N { c }
-\cs_new_protected:Npn \bool_gset_inverse:N #1
- { \bool_if:NTF #1 { \bool_gset_false:N } { \bool_gset_true:N } #1 }
-\cs_generate_variant:Nn \bool_gset_inverse:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Internal auxiliaries}
-%
-% \begin{variable}{\q_@@_recursion_tail,\q_@@_recursion_stop}
-% Internal recursion quarks.
-% \begin{macrocode}
-\quark_new:N \q_@@_recursion_tail
-\quark_new:N \q_@@_recursion_stop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[EXP]{\@@_use_i_delimit_by_q_recursion_stop:nw}
-% Functions to gobble up to a quark.
-% \begin{macrocode}
-\cs_new:Npn \@@_use_i_delimit_by_q_recursion_stop:nw
- #1 #2 \q_@@_recursion_stop {#1}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_if_recursion_tail_stop_do:nn}
-% Functions to query recursion quarks.
-% \begin{macrocode}
-\__kernel_quark_new_test:N \@@_if_recursion_tail_stop_do:nn
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\bool_if:N, \bool_if:c}
-% \UnitTested
-% Straight forward here. We could optimize here if we wanted to as
-% the boolean can just be input directly.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \bool_if:N #1 { p , T , F , TF }
- {
- \if_bool:N #1
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-\prg_generate_conditional_variant:Nnn \bool_if:N { c } { p , T , F , TF }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\bool_to_str:N, \bool_to_str:c, \bool_to_str:n}
-% Expands to string literal \texttt{true} or \texttt{false}.
-% \begin{macrocode}
-\cs_new:Npe \bool_to_str:N #1
- {
- \exp_not:N \bool_if:NTF #1
- { \tl_to_str:n { true } } { \tl_to_str:n { false } }
- }
-\cs_generate_variant:Nn \bool_to_str:N { c }
-\cs_new:Npe \bool_to_str:n #1
- {
- \exp_not:N \bool_if:nTF {#1}
- { \tl_to_str:n { true } } { \tl_to_str:n { false } }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\bool_show:n, \bool_log:n}
-% Show the truth value of the boolean.
-% \begin{macrocode}
-\cs_new_protected:Npn \bool_show:n
- { \__kernel_msg_show_eval:Nn \bool_to_str:n }
-\cs_new_protected:Npn \bool_log:n
- { \__kernel_msg_log_eval:Nn \bool_to_str:n }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\bool_show:N, \bool_show:c, \bool_log:N, \bool_log:c, \@@_show:NN}
-% Show the truth value of the boolean, as \texttt{true} or
-% \texttt{false}.
-% \begin{macrocode}
-\cs_new_protected:Npn \bool_show:N { \@@_show:NN \tl_show:n }
-\cs_generate_variant:Nn \bool_show:N { c }
-\cs_new_protected:Npn \bool_log:N { \@@_show:NN \tl_log:n }
-\cs_generate_variant:Nn \bool_log:N { c }
-\cs_new_protected:Npn \@@_show:NN #1#2
- {
- \__kernel_chk_defined:NT #2
- {
- \token_case_meaning:NnF #2
- {
- \c_true_bool { \exp_args:Ne #1 { \token_to_str:N #2 = true } }
- \c_false_bool { \exp_args:Ne #1 { \token_to_str:N #2 = false } }
- }
- {
- \msg_error:nneee { kernel } { bad-type }
- { \token_to_str:N #2 } { \token_to_meaning:N #2 } { bool }
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\l_tmpa_bool, \l_tmpb_bool, \g_tmpa_bool, \g_tmpb_bool}
-% A few booleans just if you need them.
-% \begin{macrocode}
-\bool_new:N \l_tmpa_bool
-\bool_new:N \l_tmpb_bool
-\bool_new:N \g_tmpa_bool
-\bool_new:N \g_tmpb_bool
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[pTF]{\bool_if_exist:N, \bool_if_exist:c}
-% Copies of the \texttt{cs} functions defined in \pkg{l3basics}.
-% \begin{macrocode}
-\prg_new_eq_conditional:NNn \bool_if_exist:N \cs_if_exist:N
- { TF , T , F , p }
-\prg_new_eq_conditional:NNn \bool_if_exist:c \cs_if_exist:c
- { TF , T , F , p }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Boolean expressions}
-%
-% \begin{macro}[pTF]{\bool_if:n}
-% \UnitTested
-% Evaluating the truth value of a list of predicates is done using an
-% input syntax somewhat similar to the one found in other programming
-% languages with |(| and |)| for grouping, |!| for logical
-% \enquote{Not}, |&&| for logical \enquote{And} and \verb"||" for
-% logical \enquote{Or}. However, they perform eager evaluation.
-% We shall use the terms Not, And, Or, Open and
-% Close for these operations.
-%
-% Any expression is terminated by a Close operation. Evaluation
-% happens from left to right in the following manner using a GetNext
-% function:
-% \begin{itemize}
-% \item If an Open is seen, start evaluating a new expression using
-% the Eval function and call GetNext again.
-% \item If a Not is seen, remove the |!| and call a GetNext
-% function with the logic reversed.
-% \item If none of the above, reinsert the token found (this is
-% supposed to be a predicate function) in front of an Eval
-% function, which evaluates it to the boolean value \meta{true} or
-% \meta{false}.
-% \end{itemize}
-% The Eval function then contains a post-processing operation which
-% grabs the instruction following the predicate. This is either And,
-% Or or Close. In each case the truth value is used to determine
-% where to go next. The following situations can arise:
-% \begin{description}
-% \item[\meta{true}And] Current truth value is true, logical And
-% seen, continue with GetNext to examine truth value of next
-% boolean (sub-)expression.
-% \item[\meta{false}And] Current truth value is false, logical And
-% seen, stop using the values of predicates within this
-% sub-expression until the next Close. Then return \meta{false}.
-% \item[\meta{true}Or] Current truth value is true, logical Or seen,
-% stop using the values of predicates within this sub-expression
-% until the nearest Close. Then return \meta{true}.
-% \item[\meta{false}Or] Current truth value is false, logical Or
-% seen, continue with GetNext to examine truth value of next
-% boolean (sub-)expression.
-% \item[\meta{true}Close] Current truth value is true, Close
-% seen, return \meta{true}.
-% \item[\meta{false}Close] Current truth value is false, Close
-% seen, return \meta{false}.
-% \end{description}
-% \begin{macrocode}
-\prg_new_conditional:Npnn \bool_if:n #1 { T , F , TF }
- {
- \if_predicate:w \bool_if_p:n {#1}
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\bool_if_p:n, \@@_if_p:n, \@@_if_p_aux:w}
-% To speed up the case of a single predicate, \texttt{f}-expand and
-% check whether the result is one token (possibly surrounded by
-% spaces), which must be \cs{c_true_bool} or \cs{c_false_bool}. We
-% use a version of \cs{tl_if_single:nTF} optimized for speed since we
-% know that an empty~|#1| is an error. The auxiliary
-% \cs{@@_if_p_aux:w} removes the trailing parenthesis and gets rid of
-% any space, then returns \cs{c_true_bool} or \cs{c_false_bool} as
-% appropriate. This extra work around is because in a
-% \cs{bool_set:Nn}, the underlying \tn{chardef} turns the bool being
-% set temporarily equal to \tn{relax}, thus assigning a boolean to
-% itself would fail (gh/1055). For the general case, first issue a
-% \cs{group_align_safe_begin:} as we are using |&&| as
-% syntax shorthand for the And operation and we need to hide it for
-% \TeX{}. This group is closed after \cs{@@_get_next:NN} returns
-% \cs{c_true_bool} or \cs{c_false_bool}. That function requires the
-% trailing parenthesis to know where the expression ends.
-% \begin{macrocode}
-\cs_new:Npn \bool_if_p:n { \exp_args:Nf \@@_if_p:n }
-\cs_new:Npn \@@_if_p:n #1
- {
- \tl_if_empty:oT { \use_none:nn #1 . } { \@@_if_p_aux:w }
- \group_align_safe_begin:
- \exp_after:wN
- \group_align_safe_end:
- \exp:w \exp_end_continue_f:w % (
- \@@_get_next:NN \use_i:nnnn #1 )
- }
-\cs_new:Npn \@@_if_p_aux:w #1 \use_i:nnnn #2#3
- { \bool_if:NTF #2 \c_true_bool \c_false_bool }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_get_next:NN}
-% The GetNext operation. Its first argument is \cs{use_i:nnnn},
-% \cs{use_ii:nnnn}, \cs{use_iii:nnnn}, or \cs{use_iv:nnnn} (we call
-% these \enquote{states}). In the first state, this function
-% eventually expand to the truth value \cs{c_true_bool} or
-% \cs{c_false_bool} of the expression which follows until the next
-% unmatched closing parenthesis. For instance
-% \enquote{\cs{@@_get_next:NN} \cs{use_i:nnnn} \cs{c_true_bool}
-% \texttt{\&\&} \cs{c_true_bool} \texttt{)}} (including the closing
-% parenthesis) expands to \cs{c_true_bool}. In the second state
-% (after a |!|) the logic is reversed. We call these two states
-% \enquote{normal} and the next two \enquote{skipping}. In the third
-% state (after \cs{c_true_bool}\verb"||") it always returns
-% \cs{c_true_bool}. In the fourth state (after \cs{c_false_bool}|&&|)
-% it always returns \cs{c_false_bool} and also stops when encountering
-% \verb"||", not only parentheses. This code itself is a switch: if
-% what follows is neither |!| nor |(|, we assume it is a predicate.
-% \begin{macrocode}
-\cs_new:Npn \@@_get_next:NN #1#2
- {
- \use:c
- {
- @@_
- \if_meaning:w !#2 ! \else: \if_meaning:w (#2 ( \else: p \fi: \fi:
- :Nw
- }
- #1 #2
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_!:Nw}
-% The Not operation reverses the logic: it discards the |!|~token and
-% calls the GetNext operation with the appropriate first argument.
-% Namely the first and second states are interchanged, but after
-% \cs{c_true_bool}\verb"||" or \cs{c_false_bool}|&&| the |!|~is
-% ignored.
-% \begin{macrocode}
-\cs_new:cpn { @@_!:Nw } #1#2
- {
- \exp_after:wN \@@_get_next:NN
- #1 \use_ii:nnnn \use_i:nnnn \use_iii:nnnn \use_iv:nnnn
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_(:Nw}
-% The Open operation starts a sub-expression after discarding the open
-% parenthesis. This is done by calling GetNext (which eventually
-% discards the corresponding closing parenthesis), with a
-% post-processing step which looks for And, Or or Close after the
-% group.
-% \begin{macrocode}
-\cs_new:cpn { @@_(:Nw } #1#2
- {
- \exp_after:wN \@@_choose:NNN \exp_after:wN #1
- \int_value:w \@@_get_next:NN \use_i:nnnn
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_p:Nw}
-% If what follows GetNext is neither |!| nor |(|, evaluate the
-% predicate using the primitive \cs{int_value:w}. The canonical
-% \texttt{true} and \texttt{false} values have numerical values $1$
-% and $0$ respectively. Look for And, Or or Close afterwards.
-% \begin{macrocode}
-\cs_new:cpn { @@_p:Nw } #1
- { \exp_after:wN \@@_choose:NNN \exp_after:wN #1 \int_value:w }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_choose:NNN}
-% \begin{macro}+\@@_)_0:+
-% \begin{macro}+\@@_)_1:+
-% \begin{macro}+\@@_)_2:+
-% \begin{macro}+\@@_&_0:+
-% \begin{macro}+\@@_&_1:+
-% \begin{macro}+\@@_&_2:+
-% \begin{macro}+\@@_|_0:+
-% \begin{macro}+\@@_|_1:+
-% \begin{macro}+\@@_|_2:+
-% The arguments are |#1|: a function such as \cs{use_i:nnnn}, |#2|:
-% $0$ or $1$ encoding the current truth value, |#3|: the next
-% operation, And, Or or Close. We distinguish three cases according
-% to a combination of |#1| and |#2|. Case~2 is when |#1| is
-% \cs{use_iii:nnnn} (state~3), namely after
-% \cs{c_true_bool}~\verb"||". Case~1 is when |#1| is \cs{use_i:nnnn}
-% and |#2| is \texttt{true} or when |#1| is \cs{use_ii:nnnn} and |#2|
-% is \texttt{false}, for instance for |!|\cs{c_false_bool}. Case~0
-% includes the same with \texttt{true}/\texttt{false} interchanged and
-% the case where |#1| is \cs{use_iv:nnnn} namely after
-% \cs{c_false_bool}~|&&|.
-%
-% When seeing~|)| the current subexpression is done, leave the
-% appropriate boolean. When seeing~|&| in case~0 go into state~4,
-% equivalent to having seen \cs{c_false_bool}~|&&|. In case~1, namely
-% when the argument is \texttt{true} and we are in a normal state
-% continue in the normal state~1. In case~2, namely when skipping
-% alternatives in an Or, continue in the same state. When
-% seeing~\verb"|" in case~0, continue in a normal state; in particular
-% stop skipping for \cs{c_false_bool}~|&&| because that binds more
-% tightly than~\verb"||". In the other two cases start skipping for
-% \cs{c_true_bool}~\verb"||".
-% \begin{macrocode}
-\cs_new:Npn \@@_choose:NNN #1#2#3
- {
- \use:c
- {
- @@_ \token_to_str:N #3 _
- #1 #2 { \if_meaning:w 0 #2 1 \else: 0 \fi: } 2 0 :
- }
- }
-\cs_new:cpn { @@_)_0: } { \c_false_bool }
-\cs_new:cpn { @@_)_1: } { \c_true_bool }
-\cs_new:cpn { @@_)_2: } { \c_true_bool }
-\cs_new:cpn { @@_&_0: } & { \@@_get_next:NN \use_iv:nnnn }
-\cs_new:cpn { @@_&_1: } & { \@@_get_next:NN \use_i:nnnn }
-\cs_new:cpn { @@_&_2: } & { \@@_get_next:NN \use_iii:nnnn }
-\cs_new:cpn { @@_|_0: } | { \@@_get_next:NN \use_i:nnnn }
-\cs_new:cpn { @@_|_1: } | { \@@_get_next:NN \use_iii:nnnn }
-\cs_new:cpn { @@_|_2: } | { \@@_get_next:NN \use_iii:nnnn }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\bool_lazy_all:n}
-% \begin{macro}{\@@_lazy_all:n}
-% \UnitTested
-% Go through the list of expressions, stopping whenever an expression
-% is \texttt{false}. If the end is reached without finding any
-% \texttt{false} expression, then the result is \texttt{true}.
-% \begin{macrocode}
-\cs_new:Npn \bool_lazy_all_p:n #1
- { \@@_lazy_all:n #1 \q_@@_recursion_tail \q_@@_recursion_stop }
-\prg_new_conditional:Npnn \bool_lazy_all:n #1 { T , F , TF }
- {
- \if_predicate:w \bool_lazy_all_p:n {#1}
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-\cs_new:Npn \@@_lazy_all:n #1
- {
- \@@_if_recursion_tail_stop_do:nn {#1} { \c_true_bool }
- \bool_if:nF {#1}
- { \@@_use_i_delimit_by_q_recursion_stop:nw { \c_false_bool } }
- \@@_lazy_all:n
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\bool_lazy_and:nn}
-% \UnitTested
-% Only evaluate the second expression if the first is \texttt{true}.
-% Note that |#2| must be removed as an argument, not just by skipping
-% to the \cs{else:} branch of the conditional since |#2| may contain
-% unbalanced \TeX{} conditionals.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \bool_lazy_and:nn #1#2 { p , T , F , TF }
- {
- \if_predicate:w
- \bool_if:nTF {#1} { \bool_if_p:n {#2} } { \c_false_bool }
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\bool_lazy_any:n}
-% \begin{macro}{\@@_lazy_any:n}
-% \UnitTested
-% Go through the list of expressions, stopping whenever an expression
-% is \texttt{true}. If the end is reached without finding any
-% \texttt{true} expression, then the result is \texttt{false}.
-% \begin{macrocode}
-\cs_new:Npn \bool_lazy_any_p:n #1
- { \@@_lazy_any:n #1 \q_@@_recursion_tail \q_@@_recursion_stop }
-\prg_new_conditional:Npnn \bool_lazy_any:n #1 { T , F , TF }
- {
- \if_predicate:w \bool_lazy_any_p:n {#1}
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-\cs_new:Npn \@@_lazy_any:n #1
- {
- \@@_if_recursion_tail_stop_do:nn {#1} { \c_false_bool }
- \bool_if:nT {#1}
- { \@@_use_i_delimit_by_q_recursion_stop:nw { \c_true_bool } }
- \@@_lazy_any:n
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\bool_lazy_or:nn}
-% \UnitTested
-% Only evaluate the second expression if the first is \texttt{false}.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \bool_lazy_or:nn #1#2 { p , T , F , TF }
- {
- \if_predicate:w
- \bool_if:nTF {#1} { \c_true_bool } { \bool_if_p:n {#2} }
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\bool_not_p:n}
-% \UnitTested
-% The Not variant just reverses the outcome of \cs{bool_if_p:n}. Can
-% be optimized but this is nice and simple and according to the
-% implementation plan. Not even particularly useful to have it when
-% the infix notation is easier to use.
-% \begin{macrocode}
-\cs_new:Npn \bool_not_p:n #1 { \bool_if_p:n { ! ( #1 ) } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\bool_xor:nn}
-% \UnitTested
-% Exclusive or. If the boolean expressions have same truth value,
-% return \texttt{false}, otherwise return \texttt{true}.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \bool_xor:nn #1#2 { p , T , F , TF }
- {
- \bool_if:nT {#1} \reverse_if:N
- \if_predicate:w \bool_if_p:n {#2}
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Logical loops}
-%
-% \begin{macro}{\bool_while_do:Nn, \bool_while_do:cn}
-% \UnitTested
-% \begin{macro}{\bool_until_do:Nn, \bool_until_do:cn}
-% \UnitTested
-% A |while| loop where the boolean is tested before executing the
-% statement. The \enquote{while} version executes the code as long as the
-% boolean is true; the \enquote{until} version executes the code as
-% long as the boolean is false.
-% \begin{macrocode}
-\cs_new:Npn \bool_while_do:Nn #1#2
- { \bool_if:NT #1 { #2 \bool_while_do:Nn #1 {#2} } }
-\cs_new:Npn \bool_until_do:Nn #1#2
- { \bool_if:NF #1 { #2 \bool_until_do:Nn #1 {#2} } }
-\cs_generate_variant:Nn \bool_while_do:Nn { c }
-\cs_generate_variant:Nn \bool_until_do:Nn { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\bool_do_while:Nn, \bool_do_while:cn}
-% \UnitTested
-% \begin{macro}{\bool_do_until:Nn, \bool_do_until:cn}
-% \UnitTested
-% A |do-while| loop where the body is performed at least once and the
-% boolean is tested after executing the body. Otherwise identical to
-% the above functions.
-% \begin{macrocode}
-\cs_new:Npn \bool_do_while:Nn #1#2
- { #2 \bool_if:NT #1 { \bool_do_while:Nn #1 {#2} } }
-\cs_new:Npn \bool_do_until:Nn #1#2
- { #2 \bool_if:NF #1 { \bool_do_until:Nn #1 {#2} } }
-\cs_generate_variant:Nn \bool_do_while:Nn { c }
-\cs_generate_variant:Nn \bool_do_until:Nn { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \bool_while_do:nn, \bool_do_while:nn ,
-% \bool_until_do:nn, \bool_do_until:nn
-% }
-% \UnitTested
-% Loop functions with the test either before or after the first body
-% expansion.
-% \begin{macrocode}
-\cs_new:Npn \bool_while_do:nn #1#2
- {
- \bool_if:nT {#1}
- {
- #2
- \bool_while_do:nn {#1} {#2}
- }
- }
-\cs_new:Npn \bool_do_while:nn #1#2
- {
- #2
- \bool_if:nT {#1} { \bool_do_while:nn {#1} {#2} }
- }
-\cs_new:Npn \bool_until_do:nn #1#2
- {
- \bool_if:nF {#1}
- {
- #2
- \bool_until_do:nn {#1} {#2}
- }
- }
-\cs_new:Npn \bool_do_until:nn #1#2
- {
- #2
- \bool_if:nF {#1} { \bool_do_until:nn {#1} {#2} }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\s_@@_mark,\s_@@_stop}
-% Internal scan marks.
-% \begin{macrocode}
-\scan_new:N \s_@@_mark
-\scan_new:N \s_@@_stop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[EXP, noTF]{\bool_case:n}
-% \begin{macro}{\@@_case:NnTF}
-% \begin{macro}{\@@_case:w,a\@@_case_end:nw}
-% For boolean cases the overall idea is the same as for
-% \cs{str_case:nnTF} as described in \pkg{l3str}.
-% \begin{macrocode}
-\cs_new:Npn \bool_case:nTF
- { \exp:w \@@_case:nTF }
-\cs_new:Npn \bool_case:nT #1#2
- { \exp:w \@@_case:nTF {#1} {#2} { } }
-\cs_new:Npn \bool_case:nF #1
- { \exp:w \@@_case:nTF {#1} { } }
-\cs_new:Npn \bool_case:n #1
- { \exp:w \@@_case:nTF {#1} { } { } }
-\cs_new:Npn \@@_case:nTF #1#2#3
- {
- \@@_case:w
- #1 \c_true_bool { } \s_@@_mark {#2} \s_@@_mark {#3} \s_@@_stop
- }
-\cs_new:Npn \@@_case:w #1#2
- {
- \bool_if:nTF {#1}
- { \@@_case_end:nw {#2} }
- { \@@_case:w }
- }
-\cs_new:Npn \@@_case_end:nw #1#2#3 \s_@@_mark #4#5 \s_@@_stop
- { \exp_end: #1 #4 }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Producing multiple copies}
-%
-% \begin{macrocode}
-%<@@=prg>
-% \end{macrocode}
-%
-% \begin{macro}{\prg_replicate:nn}
-% \UnitTested
-% \begin{macro}{\@@_replicate:N, \@@_replicate_first:N}
-% \begin{macro}{\@@_replicate_}
-% \begin{macro}
-% {
-% \@@_replicate_0:n,
-% \@@_replicate_1:n,
-% \@@_replicate_2:n,
-% \@@_replicate_3:n,
-% \@@_replicate_4:n,
-% \@@_replicate_5:n,
-% \@@_replicate_6:n,
-% \@@_replicate_7:n,
-% \@@_replicate_8:n,
-% \@@_replicate_9:n
-% }
-% \begin{macro}
-% {
-% \@@_replicate_first_-:n,
-% \@@_replicate_first_0:n,
-% \@@_replicate_first_1:n,
-% \@@_replicate_first_2:n,
-% \@@_replicate_first_3:n,
-% \@@_replicate_first_4:n,
-% \@@_replicate_first_5:n,
-% \@@_replicate_first_6:n,
-% \@@_replicate_first_7:n,
-% \@@_replicate_first_8:n,
-% \@@_replicate_first_9:n
-% }
-% This function uses a cascading csname technique by David Kastrup
-% (who else :-)
-%
-% The idea is to make the input |25| result in first adding five, and
-% then 20 copies of the code to be replicated. The technique uses
-% cascading csnames which means that we start building several csnames
-% so we end up with a list of functions to be called in reverse
-% order. This is important here (and other places) because it means
-% that we can for instance make the function that inserts five copies
-% of something to also hand down ten to the next function in
-% line. This is exactly what happens here: in the example with |25|
-% then the next function is the one that inserts two copies but it
-% sees the ten copies handed down by the previous function. In order
-% to avoid the last function to insert say, $100$ copies of the original
-% argument just to gobble them again we define separate functions to
-% be inserted first. These functions also close the expansion of
-% \cs{exp:w}, which ensures that \cs{prg_replicate:nn} only
-% requires two steps of expansion.
-%
-% This function has one flaw though: Since it constantly passes down
-% ten copies of its previous argument it severely affects the main
-% memory once you start demanding hundreds of thousands of copies. Now
-% I don't think this is a real limitation for any ordinary use, and if
-% necessary, it is possible to write \cs{prg_replicate:nn} |{1000}|
-% |{| \cs{prg_replicate:nn} |{1000}| \Arg{code}~|}|. An
-% alternative approach is to create a string of |m|'s with
-% \cs{exp:w} which can be done with just four macros but that
-% method has its own problems since it can exhaust the string
-% pool. Also, it is considerably slower than what we use here so the
-% few extra csnames are well spent I would say.
-% \begin{macrocode}
-\cs_new:Npn \prg_replicate:nn #1
- {
- \exp:w
- \exp_after:wN \@@_replicate_first:N
- \int_value:w \int_eval:n {#1}
- \cs_end:
- }
-\cs_new:Npn \@@_replicate:N #1
- { \cs:w @@_replicate_#1 :n \@@_replicate:N }
-\cs_new:Npn \@@_replicate_first:N #1
- { \cs:w @@_replicate_first_ #1 :n \@@_replicate:N }
-% \end{macrocode}
-% Then comes all the functions that do the hard work of inserting all
-% the copies. The first function takes |:n| as a parameter.
-% \begin{macrocode}
-\cs_new:Npn \@@_replicate_ :n #1 { \cs_end: }
-\cs_new:cpn { @@_replicate_0:n } #1
- { \cs_end: {#1#1#1#1#1#1#1#1#1#1} }
-\cs_new:cpn { @@_replicate_1:n } #1
- { \cs_end: {#1#1#1#1#1#1#1#1#1#1} #1 }
-\cs_new:cpn { @@_replicate_2:n } #1
- { \cs_end: {#1#1#1#1#1#1#1#1#1#1} #1#1 }
-\cs_new:cpn { @@_replicate_3:n } #1
- { \cs_end: {#1#1#1#1#1#1#1#1#1#1} #1#1#1 }
-\cs_new:cpn { @@_replicate_4:n } #1
- { \cs_end: {#1#1#1#1#1#1#1#1#1#1} #1#1#1#1 }
-\cs_new:cpn { @@_replicate_5:n } #1
- { \cs_end: {#1#1#1#1#1#1#1#1#1#1} #1#1#1#1#1 }
-\cs_new:cpn { @@_replicate_6:n } #1
- { \cs_end: {#1#1#1#1#1#1#1#1#1#1} #1#1#1#1#1#1 }
-\cs_new:cpn { @@_replicate_7:n } #1
- { \cs_end: {#1#1#1#1#1#1#1#1#1#1} #1#1#1#1#1#1#1 }
-\cs_new:cpn { @@_replicate_8:n } #1
- { \cs_end: {#1#1#1#1#1#1#1#1#1#1} #1#1#1#1#1#1#1#1 }
-\cs_new:cpn { @@_replicate_9:n } #1
- { \cs_end: {#1#1#1#1#1#1#1#1#1#1} #1#1#1#1#1#1#1#1#1 }
-% \end{macrocode}
-% Users shouldn't ask for something to be replicated once or even
-% not at all but\dots
-% \begin{macrocode}
-\cs_new:cpn { @@_replicate_first_-:n } #1
- {
- \exp_end:
- \msg_expandable_error:nn { prg } { negative-replication }
- }
-\cs_new:cpn { @@_replicate_first_0:n } #1 { \exp_end: }
-\cs_new:cpn { @@_replicate_first_1:n } #1 { \exp_end: #1 }
-\cs_new:cpn { @@_replicate_first_2:n } #1 { \exp_end: #1#1 }
-\cs_new:cpn { @@_replicate_first_3:n } #1 { \exp_end: #1#1#1 }
-\cs_new:cpn { @@_replicate_first_4:n } #1 { \exp_end: #1#1#1#1 }
-\cs_new:cpn { @@_replicate_first_5:n } #1 { \exp_end: #1#1#1#1#1 }
-\cs_new:cpn { @@_replicate_first_6:n } #1 { \exp_end: #1#1#1#1#1#1 }
-\cs_new:cpn { @@_replicate_first_7:n } #1 { \exp_end: #1#1#1#1#1#1#1 }
-\cs_new:cpn { @@_replicate_first_8:n } #1 { \exp_end: #1#1#1#1#1#1#1#1 }
-\cs_new:cpn { @@_replicate_first_9:n } #1
- { \exp_end: #1#1#1#1#1#1#1#1#1 }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Detecting \TeX{}'s mode}
-%
-% \begin{macro}[pTF]{\mode_if_vertical:}
-% \UnitTested
-% For testing vertical mode. Strikes me here on the bus with David,
-% that as long as we are just talking about returning true and
-% false states, we can just use the primitive conditionals for this
-% and gobbling the \cs{exp_end:} in the input stream. However this
-% requires knowledge of the implementation so we keep things nice
-% and clean and use the return statements.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \mode_if_vertical: { p , T , F , TF }
- { \if_mode_vertical: \prg_return_true: \else: \prg_return_false: \fi: }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\mode_if_horizontal:}
-% \UnitTested
-% For testing horizontal mode.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \mode_if_horizontal: { p , T , F , TF }
- { \if_mode_horizontal: \prg_return_true: \else: \prg_return_false: \fi: }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\mode_if_inner:}
-% \UnitTested
-% For testing inner mode.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \mode_if_inner: { p , T , F , TF }
- { \if_mode_inner: \prg_return_true: \else: \prg_return_false: \fi: }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\mode_if_math:}
-% \UnitTested
-% For testing math mode. At the beginning of an alignment cell,
-% this should be used only inside a non-expandable function.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \mode_if_math: { p , T , F , TF }
- { \if_mode_math: \prg_return_true: \else: \prg_return_false: \fi: }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Internal programming functions}
-%
-% \begin{macro}{\group_align_safe_begin:, \group_align_safe_end:}
-% \TeX{}'s alignment structures present many problems. As Knuth says
-% himself in \emph{\TeX : The Program}: \enquote{It's sort of a miracle
-% whenever \tn{halign} or \tn{valign} work, [\ldots]} One problem relates
-% to commands that internally issue a \tn{cr} but also peek ahead for
-% the next character for use in, say, an optional argument. If the
-% next token happens to be a |&| with category code~4 we get some
-% sort of weird error message because the underlying
-% \tn{futurelet} stores the token at the end of the alignment
-% template. This could be a |&|$_4$ giving a message like
-% |! Misplaced \cr.| or even worse: it could be the \tn{endtemplate}
-% token causing even more trouble! To solve this we have to open a
-% special group so that \TeX{} still thinks it's on safe ground but at
-% the same time we don't want to introduce any brace group that may
-% find its way to the output. The following functions help with this
-% by using behaviour documented only in Appendix~D of
-% \emph{The \TeX{}book}\dots
-% In short evaluating |`{| and |`}| as numbers will not change the counter
-% \TeX{} uses to keep track of its state in an alignment, whereas gobbling a
-% brace using \cs{if_false:} will affect \TeX's state without producing any
-% real group.
-% We place the \cs{if_false:} |{| \cs{fi:} part at that place so
-% that the successive expansions of \cs{group_align_safe_begin/end:}
-% are always brace balanced.
-% \begin{macrocode}
-\group_begin:
-\tex_catcode:D `\^^@ = 2 \exp_stop_f:
-\cs_new:Npn \group_align_safe_begin:
- { \exp:w \if_false: { \fi: `^^@ \exp_stop_f: }
-\tex_catcode:D `\^^@ = 1 \exp_stop_f:
-\cs_new:Npn \group_align_safe_end:
- { \exp:w `^^@ \if_false: } \fi: \exp_stop_f: }
-\group_end:
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\g__kernel_prg_map_int}
-% A nesting counter for mapping.
-% \begin{macrocode}
-\int_new:N \g__kernel_prg_map_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\prg_break_point:Nn}
-% \begin{macro}{\prg_map_break:Nn}
-% These are defined in \pkg{l3basics}, as they are needed
-% \enquote{early}. This is just a reminder that is the case!
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\prg_break_point:}
-% \begin{macro}{\prg_break:, \prg_break:n}
-% Also done in \pkg{l3basics}.
-% \end{macro}
-% \end{macro}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3prop.dtx b/macros/latex/contrib/l3kernel/l3prop.dtx
deleted file mode 100644
index 878b9eb758..0000000000
--- a/macros/latex/contrib/l3kernel/l3prop.dtx
+++ /dev/null
@@ -1,2602 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3prop.dtx
-%
-% Copyright (C) 1990-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3prop} module\\ Property lists^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \pkg{expl3} implements a \enquote{property list} data type, which contain
-% an unordered list of entries each of which consists of a \meta{key} (string)
-% and an associated \meta{value} (token list). The \meta{key} and \meta{value}
-% may both be given as any balanced text, and the \meta{key} is processed using
-% \cs{tl_to_str:n}, meaning that category codes are ignored. Entries can be
-% manipulated individually, as well as collectively by applying a function to
-% every key--value pair within the list.
-%
-% Each entry in a property list must have a unique \meta{key}: if an entry is
-% added to a property list which already contains the \meta{key} then the new
-% entry overwrites the existing one. The \meta{keys} are compared on a
-% string basis, using the same method as \cs{str_if_eq:nnTF}.
-%
-% Property lists are intended for storing key-based information for use within
-% code. They can be converted from and to key--value lists, which are a form of
-% \emph{input} parsed by the \pkg{l3keys} module. If a key--value list contains
-% a \meta{key} multiple times, only the last \meta{value} associated to it will
-% be kept in the conversion to a property list.
-%
-% Internally, property lists can use two distinct implementations with different
-% data storage, which are decided when declaring the property list variable
-% using \cs{prop_new:N} (\enquote{flat} storage) or \cs{prop_new_linked:N}
-% (\enquote{linked} storage). After a property list is declared with
-% \cs{prop_new:N} or \cs{prop_new_linked:N}, the type of internal data storage
-% can be changed by \cs{prop_make_flat:N} or \cs{prop_make_linked:N}, but only
-% at the outermost group level. All other \pkg{l3prop} functions transparently
-% manipulate either storage method and convert as needed.
-% \begin{itemize}
-% \item
-% The (default) \enquote{flat} storage method is suited for a relatively
-% small number of entries, or when the property list is likely to be
-% manipulated (copied, mapped) as a whole rather than entry-wise. It is
-% significantly faster for \cs{prop_set_eq:NN}, and only slightly faster for
-% \cs{prop_clear:N}, \cs{prop_concat:NNN}, and mapping functions
-% \cs[no-index]{prop_map_\ldots{}}.
-%
-% \item
-% The \enquote{linked} storage method is meant for property lists with a
-% large numbers of entries. It takes up more of \TeX{}'s memory during a run, but is
-% significantly faster (for long lists) when accessing or modifying
-% individual entries using functions such as \cs{prop_if_in:Nn},
-% \cs{prop_item:Nn}, \cs{prop_put:Nnn}, \cs{prop_get:NnN},
-% \cs{prop_pop:NnN}, \cs{prop_remove:Nn}, as it takes a constant
-% time for these operations (rather than the number of items for a
-% \enquote{flat} property list). A technical drawback is that
-% memory is permanently used\footnote{Until the end of the run, that
-% is.} by \meta{keys} stored in a \enquote{linked} property list,
-% even after they are removed and the property list is deleted.
-% \end{itemize}
-%
-% \section{Creating and initialising property lists}
-%
-% \begin{function}{\prop_new:N, \prop_new:c}
-% \begin{syntax}
-% \cs{prop_new:N} \meta{property list}
-% \end{syntax}
-% Creates a new \enquote{flat} \meta{property list} or raises an error if the
-% name is already taken. The declaration is global. The \meta{property list}
-% initially contains no entries. See also \cs{prop_new_linked:N}.
-% \end{function}
-%
-% \begin{function}[added = 2024-02-12]{\prop_new_linked:N, \prop_new_linked:c}
-% \begin{syntax}
-% \cs{prop_new_linked:N} \meta{property list}
-% \end{syntax}
-% Creates a new \enquote{linked} \meta{property list} or raises an error if
-% the name is already taken. The declaration is global. The \meta{property
-% list} initially contains no entries. The internal data storage differs from
-% that produced by \cs{prop_new:N} and it is optimized for property lists with
-% a large number of entries.
-% \end{function}
-%
-% \begin{function}
-% {\prop_clear:N, \prop_clear:c, \prop_gclear:N, \prop_gclear:c}
-% \begin{syntax}
-% \cs{prop_clear:N} \meta{property list}
-% \end{syntax}
-% Clears all entries from the \meta{property list}.
-% \end{function}
-%
-% \begin{function}
-% {
-% \prop_clear_new:N, \prop_clear_new:c,
-% \prop_gclear_new:N, \prop_gclear_new:c
-% }
-% \begin{syntax}
-% \cs{prop_clear_new:N} \meta{property list}
-% \end{syntax}
-% Ensures that the \meta{property list} exists globally by applying
-% \cs{prop_new:N} if necessary, then applies
-% \cs[index=prop_clear:N]{prop_(g)clear:N} to leave the list empty.
-% \begin{texnote}
-% If the property list exists and is of \enquote{linked} type, it
-% is cleared but not made into a flat property list.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[added = 2024-02-12]
-% {
-% \prop_clear_new_linked:N, \prop_clear_new_linked:c,
-% \prop_gclear_new_linked:N, \prop_gclear_new_linked:c
-% }
-% \begin{syntax}
-% \cs{prop_clear_new_linked:N} \meta{property list}
-% \end{syntax}
-% Ensures that the \meta{property list} exists globally by applying
-% \cs{prop_new_linked:N} if necessary, then applies
-% \cs[index=prop_clear:N]{prop_(g)clear:N} to leave the list empty.
-% \begin{texnote}
-% If the property list exists and is of \enquote{flat} type, it
-% is cleared but not made into a linked property list.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}
-% {
-% \prop_set_eq:NN, \prop_set_eq:cN, \prop_set_eq:Nc, \prop_set_eq:cc,
-% \prop_gset_eq:NN, \prop_gset_eq:cN, \prop_gset_eq:Nc, \prop_gset_eq:cc
-% }
-% \begin{syntax}
-% \cs{prop_set_eq:NN} \meta{property list_1} \meta{property list_2}
-% \end{syntax}
-% Sets the content of \meta{property list_1} equal to that of \meta{property
-% list_2}. This converts as needed between the two storage types.
-% \end{function}
-%
-% \begin{function}[added = 2017-11-28, updated = 2021-11-07]
-% {
-% \prop_set_from_keyval:Nn, \prop_set_from_keyval:cn,
-% \prop_gset_from_keyval:Nn, \prop_gset_from_keyval:cn,
-% }
-% \begin{syntax}
-% \cs{prop_set_from_keyval:Nn} \meta{property list}
-% \{
-% \meta{key1} |=| \meta{value1} |,|
-% \meta{key2} |=| \meta{value2} |,| \ldots{}
-% \}
-% \end{syntax}
-% Sets \meta{property list} to contain key--value pairs given in the second
-% argument. If duplicate keys appear only the last of the values is kept.
-% In contrast to most keyval lists (\emph{e.g.}~those in \pkg{l3keys}), each
-% key here \emph{must} be followed with an \texttt{=} sign even to specify an
-% empty \meta{value}.
-%
-% Spaces are trimmed around every \meta{key} and every \meta{value},
-% and if the result of trimming spaces consists of a single brace
-% group then a set of outer braces is removed. This enables both the
-% \meta{key} and the \meta{value} to contain spaces, commas or equal
-% signs. The \meta{key} is then processed by \cs{tl_to_str:n}.
-% This function correctly detects the |=| and |,| signs provided they
-% have the standard category code~$12$ or they are active.
-% \end{function}
-%
-% \begin{function}[added = 2017-11-28, updated = 2021-11-07]
-% {\prop_const_from_keyval:Nn, \prop_const_from_keyval:cn}
-% \begin{syntax}
-% \cs{prop_const_from_keyval:Nn} \meta{property list}
-% \{
-% \meta{key1} |=| \meta{value1} |,|
-% \meta{key2} |=| \meta{value2} |,| \ldots{}
-% \}
-% \end{syntax}
-% Creates a new constant \enquote{flat} \meta{property list} or raises
-% an error if the
-% name is already taken. The \meta{property list} is set globally to
-% contain key--value pairs given in the second argument, processed in
-% the way described for \cs{prop_set_from_keyval:Nn}. If duplicate
-% keys appear only the last of the values is kept.
-% This function correctly detects the |=| and |,| signs provided they
-% have the standard category code~$12$ or they are active.
-% \end{function}
-%
-% \begin{function}[added = 2024-02-12]
-% {\prop_const_linked_from_keyval:Nn, \prop_const_linked_from_keyval:cn}
-% \begin{syntax}
-% \cs{prop_const_linked_from_keyval:Nn} \meta{prop~var}
-% \{
-% \meta{key1} |=| \meta{value1} |,|
-% \meta{key2} |=| \meta{value2} |,| \ldots{}
-% \}
-% \end{syntax}
-% Creates a new constant \enquote{linked} \meta{prop~var} or raises an
-% error if the
-% name is already taken. The \meta{prop~var} is set globally to
-% contain key--value pairs given in the second argument, processed in
-% the way described for \cs{prop_set_from_keyval:Nn}. If duplicate
-% keys appear only the last of the values is kept.
-% This function correctly detects the |=| and |,| signs provided they
-% have the standard category code~$12$ or they are active.
-% \end{function}
-%
-% \begin{function}[added = 2024-02-12]{\prop_make_flat:N, \prop_make_flat:c}
-% \begin{syntax}
-% \cs{prop_make_flat:N} \meta{property list}
-% \end{syntax}
-% Changes the internal storage type of the \meta{property list} to be
-% the same \enquote{flat} storage as \cs{prop_new:N}. The key--value
-% pairs of the \meta{property list} are preserved by the change. If
-% the property list was already flat then nothing is done. This
-% function can only be used at the outermost group level.
-% \end{function}
-%
-% \begin{function}[added = 2024-02-12]{\prop_make_linked:N, \prop_make_linked:c}
-% \begin{syntax}
-% \cs{prop_make_linked:N} \meta{property list}
-% \end{syntax}
-% Changes the internal storage type of the \meta{property list} to be
-% the same \enquote{linked} storage as \cs{prop_new_linked:N}. The
-% key--value pairs of the \meta{property list} are preserved by the
-% change. If the property list was already linked then nothing is
-% done. This function can only be used at the outermost group level.
-% \end{function}
-%
-% \section{Adding and updating property list entries}
-%
-% \begin{function}[updated = 2012-07-09]
-% {
-% \prop_put:Nnn, \prop_put:NnV, \prop_put:Nnv, \prop_put:Nne,
-% \prop_put:NVn, \prop_put:NVV, \prop_put:NVv, \prop_put:NVe,
-% \prop_put:Nvn, \prop_put:NvV, \prop_put:Nvv, \prop_put:Nve,
-% \prop_put:Nen, \prop_put:NeV, \prop_put:Nev, \prop_put:Nee,
-% \prop_put:Nno, \prop_put:Non, \prop_put:Noo,
-% \prop_put:cnn, \prop_put:cnV, \prop_put:cnv, \prop_put:cne,
-% \prop_put:cVn, \prop_put:cVV, \prop_put:cVv, \prop_put:cVe,
-% \prop_put:cvn, \prop_put:cvV, \prop_put:cvv, \prop_put:cve,
-% \prop_put:cen, \prop_put:ceV, \prop_put:cev, \prop_put:cee,
-% \prop_put:cno, \prop_put:con, \prop_put:coo,
-% \prop_gput:Nnn, \prop_gput:NnV, \prop_gput:Nnv, \prop_gput:Nne,
-% \prop_gput:NVn, \prop_gput:NVV, \prop_gput:NVv, \prop_gput:NVe,
-% \prop_gput:Nvn, \prop_gput:NvV, \prop_gput:Nvv, \prop_gput:Nve,
-% \prop_gput:Nen, \prop_gput:NeV, \prop_gput:Nev, \prop_gput:Nee,
-% \prop_gput:Nno, \prop_gput:Non, \prop_gput:Noo,
-% \prop_gput:cnn, \prop_gput:cnV, \prop_gput:cnv, \prop_gput:cne,
-% \prop_gput:cVn, \prop_gput:cVV, \prop_gput:cVv, \prop_gput:cVe,
-% \prop_gput:cvn, \prop_gput:cvV, \prop_gput:cvv, \prop_gput:cve,
-% \prop_gput:cen, \prop_gput:ceV, \prop_gput:cev, \prop_gput:cee,
-% \prop_gput:cno, \prop_gput:con, \prop_gput:coo
-% }
-% \begin{syntax}
-% \cs{prop_put:Nnn} \meta{property list} \Arg{key} \Arg{value}
-% \end{syntax}
-% Adds an entry to the \meta{property list} which may be accessed
-% using the \meta{key} and which has \meta{value}. If the \meta{key}
-% is already present in the \meta{property list}, the existing entry
-% is overwritten by the new \meta{value}. Both the \meta{key} and
-% \meta{value} may contain any \meta{balanced text}. The \meta{key} is
-% stored after processing with \cs{tl_to_str:n}, meaning that category
-% codes are ignored.
-% \end{function}
-%
-% \begin{function}
-% {
-% \prop_put_if_new:Nnn, \prop_put_if_new:NVn, \prop_put_if_new:NnV,
-% \prop_put_if_new:cnn, \prop_put_if_new:cVn, \prop_put_if_new:cnV,
-% \prop_gput_if_new:Nnn, \prop_gput_if_new:NVn, \prop_gput_if_new:NnV,
-% \prop_gput_if_new:cnn, \prop_gput_if_new:cVn, \prop_gput_if_new:cnV
-% }
-% \begin{syntax}
-% \cs{prop_put_if_new:Nnn} \meta{property list} \Arg{key} \Arg{value}
-% \end{syntax}
-% If the \meta{key} is present in the \meta{property list} then no
-% action is taken. Otherwise, a new entry is added as described for
-% \cs{prop_put:Nnn}.
-% \end{function}
-%
-% \begin{function}[added = 2021-05-16]
-% {
-% \prop_concat:NNN, \prop_concat:ccc,
-% \prop_gconcat:NNN, \prop_gconcat:ccc
-% }
-% \begin{syntax}
-% \cs{prop_concat:NNN} \meta{property list_1} \meta{property list_2} \meta{property list3}
-% \end{syntax}
-% Combines the key--value pairs of \meta{property list_2} and
-% \meta{property list_3}, and saves the result in \meta{property list_1}. If a
-% key appears in both \meta{property list_2} and \meta{property list_3} then the
-% last value, namely the value in \meta{property list_3} is kept.
-% This converts as needed between the two storage types.
-% \end{function}
-%
-% \begin{function}[added = 2021-05-16, updated = 2021-11-07]
-% {
-% \prop_put_from_keyval:Nn, \prop_put_from_keyval:cn,
-% \prop_gput_from_keyval:Nn, \prop_gput_from_keyval:cn,
-% }
-% \begin{syntax}
-% \cs{prop_put_from_keyval:Nn} \meta{property list}
-% \{
-% \meta{key1} |=| \meta{value1} |,|
-% \meta{key2} |=| \meta{value2} |,| \ldots{}
-% \}
-% \end{syntax}
-% Updates the \meta{property list} by adding entries for each key--value
-% pair given in the second argument. The addition is done through
-% \cs{prop_put:Nnn}, hence if the \meta{property list} already contains
-% some of the keys, the corresponding values are discarded and
-% replaced by those given in the key--value list. If duplicate keys
-% appear in the key--value list then only the last of the values is kept.
-%
-% The function is equivalent to storing the key--value pairs in a
-% temporary property list using \cs{prop_set_from_keyval:Nn}, then
-% combining \meta{property list} with the temporary variable using
-% \cs{prop_concat:NNN}. In particular, the \meta{keys} and
-% \meta{values} are space-trimmed and unbraced as described in
-% \cs{prop_set_from_keyval:Nn}.
-% This function correctly detects the |=| and |,| signs provided they
-% have the standard category code~$12$ or they are active.
-% \end{function}
-%
-% \section{Recovering values from property lists}
-%
-% \begin{function}[updated = 2011-08-28]
-% {
-% \prop_get:NnN, \prop_get:NVN, \prop_get:NvN, \prop_get:NeN,
-% \prop_get:NoN,
-% \prop_get:cnN, \prop_get:cVN, \prop_get:cvN, \prop_get:ceN,
-% \prop_get:coN,
-% \prop_get:cnc
-% }
-% \begin{syntax}
-% \cs{prop_get:NnN} \meta{property list} \Arg{key} \meta{tl var}
-% \end{syntax}
-% Recovers the \meta{value} stored with \meta{key} from the
-% \meta{property list}, and places this in the \meta{token list
-% variable}. If the \meta{key} is not found in the
-% \meta{property list} then the \meta{token list variable} is set
-% to the special marker \cs{q_no_value}. The \meta{token list
-% variable} is set within the current \TeX{} group. See also
-% \cs{prop_get:NnNTF}.
-% \end{function}
-%
-% \begin{function}[updated = 2011-08-18]
-% {
-% \prop_pop:NnN, \prop_pop:NVN,
-% \prop_pop:NoN,
-% \prop_pop:cnN, \prop_pop:cVN,
-% \prop_pop:coN
-% }
-% \begin{syntax}
-% \cs{prop_pop:NnN} \meta{property list} \Arg{key} \meta{tl var}
-% \end{syntax}
-% Recovers the \meta{value} stored with \meta{key} from the
-% \meta{property list}, and places this in the \meta{token list
-% variable}. If the \meta{key} is not found in the
-% \meta{property list} then the \meta{token list variable} is set
-% to the special marker \cs{q_no_value}. The \meta{key} and
-% \meta{value} are then deleted from the property list. Both
-% assignments are local. See also \cs{prop_pop:NnNTF}.
-% \end{function}
-%
-% \begin{function}[updated = 2011-08-18]
-% {
-% \prop_gpop:NnN, \prop_gpop:NVN,
-% \prop_gpop:NoN,
-% \prop_gpop:cnN, \prop_gpop:cVN,
-% \prop_gpop:coN
-% }
-% \begin{syntax}
-% \cs{prop_gpop:NnN} \meta{property list} \Arg{key} \meta{tl var}
-% \end{syntax}
-% Recovers the \meta{value} stored with \meta{key} from the
-% \meta{property list}, and places this in the \meta{token list
-% variable}. If the \meta{key} is not found in the
-% \meta{property list} then the \meta{token list variable} is set
-% to the special marker \cs{q_no_value}. The \meta{key} and
-% \meta{value} are then deleted from the property list.
-% The \meta{property list} is modified globally, while the assignment of
-% the \meta{token list variable} is local. See also \cs{prop_gpop:NnNTF}.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2014-07-17]
-% {
-% \prop_item:Nn, \prop_item:NV, \prop_item:Ne, \prop_item:No,
-% \prop_item:cn, \prop_item:cV, \prop_item:ce, \prop_item:co
-% }
-% \begin{syntax}
-% \cs{prop_item:Nn} \meta{property list} \Arg{key}
-% \end{syntax}
-% Expands to the \meta{value} corresponding to the \meta{key} in
-% the \meta{property list}. If the \meta{key} is missing, this has
-% an empty expansion.
-% \begin{texnote}
-% For \enquote{flat} property lists, this expandable function iterates
-% through every key--value pair and is therefore slower than a
-% non-expandable approach based on \cs{prop_get:NnN}.
-% (For \enquote{linked} property lists both functions are fast.)
-%
-% The result is returned within the \tn{unexpanded}
-% primitive (\cs{exp_not:n}), which means that the \meta{value}
-% does not expand further when appearing in an \texttt{e}-type
-% or \texttt{x}-type argument expansion.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[EXP]{\prop_count:N, \prop_count:c}
-% \begin{syntax}
-% \cs{prop_count:N} \meta{property list}
-% \end{syntax}
-% Leaves the number of key--value pairs in the \meta{property list} in
-% the input stream as an \meta{integer denotation}.
-% \end{function}
-%
-% \begin{function}[EXP]{\prop_to_keyval:N}
-% \begin{syntax}
-% \cs{prop_to_keyval:N} \meta{property list}
-% \end{syntax}
-% Expands to the \meta{property list} in a key--value notation. Keep in mind
-% that a \meta{property list} is \emph{unordered}, while key--value interfaces
-% are not necessarily, so this cannot be used for arbitrary interfaces.
-% \begin{texnote}
-% The result is returned within the \tn{unexpanded} primitive
-% (\cs{exp_not:n}), which means that the key--value list does not expand
-% further when appearing in an \texttt{e}-type or \texttt{x}-type argument expansion.
-% It also needs exactly two steps of expansion.
-% \end{texnote}
-% \end{function}
-%
-% \section{Modifying property lists}
-%
-% \begin{function}[added = 2012-05-12]
-% {
-% \prop_remove:Nn, \prop_remove:NV, \prop_remove:Ne,
-% \prop_remove:cn, \prop_remove:cV, \prop_remove:ce,
-% \prop_gremove:Nn, \prop_gremove:NV, \prop_gremove:Ne,
-% \prop_gremove:cn, \prop_gremove:cV, \prop_gremove:ce,
-% }
-% \begin{syntax}
-% \cs{prop_remove:Nn} \meta{property list} \Arg{key}
-% \end{syntax}
-% Removes the entry listed under \meta{key} from the
-% \meta{property list}. If the \meta{key} is
-% not found in the \meta{property list} no change occurs,
-% \emph{i.e}~there is no need to test for the existence of a key before
-% deleting it.
-% \end{function}
-%
-% \section{Property list conditionals}
-%
-% \begin{function}[EXP, pTF, added = 2012-03-03]
-% {\prop_if_exist:N, \prop_if_exist:c}
-% \begin{syntax}
-% \cs{prop_if_exist_p:N} \meta{property list}
-% \cs{prop_if_exist:NTF} \meta{property list} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests whether the \meta{property list} is currently defined. This does not
-% check that the \meta{property list} really is a property list variable.
-% \end{function}
-%
-% \begin{function}[EXP, pTF]{\prop_if_empty:N, \prop_if_empty:c}
-% \begin{syntax}
-% \cs{prop_if_empty_p:N} \meta{property list}
-% \cs{prop_if_empty:NTF} \meta{property list} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the \meta{property list} is empty (containing no entries).
-% \end{function}
-%
-% \begin{function}[EXP, pTF, updated = 2011-09-15]
-% {
-% \prop_if_in:Nn, \prop_if_in:NV, \prop_if_in:Ne, \prop_if_in:No,
-% \prop_if_in:cn, \prop_if_in:cV, \prop_if_in:ce, \prop_if_in:co
-% }
-% \begin{syntax}
-% \cs{prop_if_in_p:Nn} \meta{property list} \Arg{key}
-% \cs{prop_if_in:NnTF} \meta{property list} \Arg{key} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the \meta{key} is present in the \meta{property list},
-% making the comparison using the method described by \cs{str_if_eq:nnTF}.
-% \begin{texnote}
-% For \enquote{flat} property lists, this expandable function iterates
-% through every key--value pair and is therefore slower than a
-% non-expandable approach based on \cs{prop_get:NnNTF}.
-% (For \enquote{linked} property lists both functions are fast.)
-% \end{texnote}
-% \end{function}
-%
-% \section{Recovering values from property lists with branching}
-%
-% The functions in this section combine tests for the presence of a key
-% in a property list with recovery of the associated valued. This makes them
-% useful for cases where different code follows depending on the presence
-% or absence of a key in a property list. They offer increased readability
-% and performance over separate testing and recovery phases.
-%
-% \begin{function}[TF, updated = 2012-05-19]
-% {
-% \prop_get:NnN, \prop_get:NVN, \prop_get:NvN, \prop_get:NeN,
-% \prop_get:NoN,
-% \prop_get:cnN, \prop_get:cVN, \prop_get:cvN, \prop_get:ceN,
-% \prop_get:coN,
-% \prop_get:cnc
-% }
-% \begin{syntax}
-% \cs{prop_get:NnNTF} \meta{property list} \Arg{key} \meta{token list variable} \\
-% ~~\Arg{true code} \Arg{false code}
-% \end{syntax}
-% If the \meta{key} is not present in the \meta{property list}, leaves
-% the \meta{false code} in the input stream. The value of the
-% \meta{token list variable} is not defined in this case and should
-% not be relied upon. If the \meta{key} is present in the
-% \meta{property list}, stores the corresponding \meta{value} in the
-% \meta{token list variable} without removing it from the
-% \meta{property list}, then leaves the \meta{true code} in the input
-% stream. The \meta{token list variable} is assigned locally.
-% \end{function}
-%
-% \begin{function}[TF, added = 2011-08-18, updated = 2012-05-19]
-% {
-% \prop_pop:NnN, \prop_pop:NVN,
-% \prop_pop:NoN,
-% \prop_pop:cnN, \prop_pop:cVN,
-% \prop_pop:coN
-% }
-% \begin{syntax}
-% \cs{prop_pop:NnNTF} \meta{property list} \Arg{key} \meta{token list variable} \\
-% ~~\Arg{true code} \Arg{false code}
-% \end{syntax}
-% If the \meta{key} is not present in the \meta{property list}, leaves
-% the \meta{false code} in the input stream. The value of the
-% \meta{token list variable} is not defined in this case and should
-% not be relied upon. If the \meta{key} is present in
-% the \meta{property list}, pops the corresponding \meta{value}
-% in the \meta{token list variable}, \emph{i.e.}~removes the item from
-% the \meta{property list}.
-% Both the \meta{property list} and the \meta{token list variable}
-% are assigned locally.
-% \end{function}
-%
-% \begin{function}[TF, added = 2011-08-18, updated = 2012-05-19]
-% {
-% \prop_gpop:NnN, \prop_gpop:NVN,
-% \prop_gpop:NoN,
-% \prop_gpop:cnN, \prop_gpop:cVN,
-% \prop_gpop:coN
-% }
-% \begin{syntax}
-% \cs{prop_gpop:NnNTF} \meta{property list} \Arg{key} \meta{token list variable} \\
-% ~~\Arg{true code} \Arg{false code}
-% \end{syntax}
-% If the \meta{key} is not present in the \meta{property list}, leaves
-% the \meta{false code} in the input stream. The value of the
-% \meta{token list variable} is not defined in this case and should
-% not be relied upon. If the \meta{key} is present in
-% the \meta{property list}, pops the corresponding \meta{value}
-% in the \meta{token list variable}, \emph{i.e.}~removes the item from
-% the \meta{property list}.
-% The \meta{property list} is modified globally, while the
-% \meta{token list variable} is assigned locally.
-% \end{function}
-%
-% \section{Mapping over property lists}
-%
-% All mappings are done at the current group level, \emph{i.e.}~any
-% local assignments made by the \meta{function} or \meta{code} discussed
-% below remain in effect after the loop.
-%
-% \begin{function}[rEXP, updated = 2013-01-08]
-% {\prop_map_function:NN, \prop_map_function:cN}
-% \begin{syntax}
-% \cs{prop_map_function:NN} \meta{property list} \meta{function}
-% \end{syntax}
-% Applies \meta{function} to every \meta{entry} stored in the
-% \meta{property list}. The \meta{function} receives two arguments for
-% each iteration: the \meta{key} and associated \meta{value}.
-% The order in which \meta{entries} are returned is not defined and
-% should not be relied upon.
-% To pass further arguments to the \meta{function}, see
-% \cs{prop_map_inline:Nn} (non-expandable) or \cs{prop_map_tokens:Nn}.
-% \end{function}
-%
-% \begin{function}[updated = 2013-01-08]
-% {\prop_map_inline:Nn, \prop_map_inline:cn}
-% \begin{syntax}
-% \cs{prop_map_inline:Nn} \meta{property list} \Arg{inline function}
-% \end{syntax}
-% Applies \meta{inline function} to every \meta{entry} stored
-% within the \meta{property list}. The \meta{inline function} should
-% consist of code which receives the \meta{key} as |#1| and the
-% \meta{value} as |#2|.
-% The order in which \meta{entries} are returned is not defined and
-% should not be relied upon.
-% \end{function}
-%
-% \begin{function}[rEXP]
-% {\prop_map_tokens:Nn, \prop_map_tokens:cn}
-% \begin{syntax}
-% \cs{prop_map_tokens:Nn} \meta{property list} \Arg{code}
-% \end{syntax}
-% Analogue of \cs{prop_map_function:NN} which maps several tokens
-% instead of a single function. The \meta{code} receives each
-% key--value pair in the \meta{property list} as two trailing brace
-% groups. For instance,
-% \begin{verbatim}
-% \prop_map_tokens:Nn \l_my_prop { \str_if_eq:nnT { mykey } }
-% \end{verbatim}
-% expands to the value corresponding to \texttt{mykey}: for each
-% pair in |\l_my_prop| the function \cs{str_if_eq:nnT} receives
-% \texttt{mykey}, the \meta{key} and the \meta{value} as its three
-% arguments. For that specific task, \cs{prop_item:Nn} is faster.
-% \end{function}
-%
-% \begin{function}[rEXP, updated = 2012-06-29]{\prop_map_break:}
-% \begin{syntax}
-% \cs{prop_map_break:}
-% \end{syntax}
-% Used to terminate a \cs[no-index]{prop_map_\ldots} function before all
-% entries in the \meta{property list} have been processed. This
-% normally takes place within a conditional statement, for example
-% \begin{verbatim}
-% \prop_map_inline:Nn \l_my_prop
-% {
-% \str_if_eq:nnTF { #1 } { bingo }
-% { \prop_map_break: }
-% {
-% % Do something useful
-% }
-% }
-% \end{verbatim}
-% Use outside of a \cs[no-index]{prop_map_\ldots} scenario leads to low
-% level \TeX{} errors.
-% \begin{texnote}
-% When the mapping is broken, additional tokens may be inserted
-% before further items are taken
-% from the input stream. This depends on the design of the mapping
-% function.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[rEXP, updated = 2012-06-29]{\prop_map_break:n}
-% \begin{syntax}
-% \cs{prop_map_break:n} \Arg{code}
-% \end{syntax}
-% Used to terminate a \cs[no-index]{prop_map_\ldots} function before all
-% entries in the \meta{property list} have been processed, inserting
-% the \meta{code} after the mapping has ended. This
-% normally takes place within a conditional statement, for example
-% \begin{verbatim}
-% \prop_map_inline:Nn \l_my_prop
-% {
-% \str_if_eq:nnTF { #1 } { bingo }
-% { \prop_map_break:n { <code> } }
-% {
-% % Do something useful
-% }
-% }
-% \end{verbatim}
-% Use outside of a \cs[no-index]{prop_map_\ldots} scenario leads to low
-% level \TeX{} errors.
-% \begin{texnote}
-% When the mapping is broken, additional tokens may be inserted
-% before the \meta{code} is
-% inserted into the input stream.
-% This depends on the design of the mapping function.
-% \end{texnote}
-% \end{function}
-%
-% \section{Viewing property lists}
-%
-% \begin{function}[updated = 2021-04-29]{\prop_show:N, \prop_show:c}
-% \begin{syntax}
-% \cs{prop_show:N} \meta{property list}
-% \end{syntax}
-% Displays the entries in the \meta{property list} in the terminal,
-% and specifies its storage type.
-% \end{function}
-%
-% \begin{function}[added = 2014-08-12, updated = 2021-04-29]{\prop_log:N, \prop_log:c}
-% \begin{syntax}
-% \cs{prop_log:N} \meta{property list}
-% \end{syntax}
-% Writes the entries in the \meta{property list} in the log file,
-% and specifies its storage type.
-% \end{function}
-%
-% \section{Scratch property lists}
-%
-% There is no need to include both flat and linked property lists as
-% scratch variables. We arbitrarily pick the older implementation.
-%
-% \begin{variable}[added = 2012-06-23]{\l_tmpa_prop, \l_tmpb_prop}
-% Scratch \enquote{flat} property lists for local assignment.
-% These are never used by
-% the kernel code, and so are safe for use with any \LaTeX3-defined
-% function. However, they may be overwritten by other non-kernel
-% code and so should only be used for short-term storage.
-% \end{variable}
-%
-% \begin{variable}[added = 2012-06-23]{\g_tmpa_prop, \g_tmpb_prop}
-% Scratch \enquote{flat} property lists for global assignment.
-% These are never used by
-% the kernel code, and so are safe for use with any \LaTeX3-defined
-% function. However, they may be overwritten by other non-kernel
-% code and so should only be used for short-term storage.
-% \end{variable}
-%
-% \section{Constants}
-%
-% \begin{variable}{\c_empty_prop}
-% A permanently-empty property list used for internal comparisons.
-% \end{variable}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3prop} implementation}
-%
-% \TestFiles{m3prop001, m3prop002, m3prop003, m3prop004, m3show001}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=prop>
-% \end{macrocode}
-%
-% With the (default) flat data storage, a property list is a macro whose
-% top-level expansion is of the form
-% \begin{quote}
-% \cs{s_@@} \cs{@@_chk:w}
-% \cs{@@_pair:wn} \meta{key_1} \cs{s_@@} \Arg{value_1} \\
-% \ldots{} \\
-% \cs{@@_pair:wn} \meta{key_n} \cs{s_@@} \Arg{value_n} \\
-% \end{quote}
-% where \cs{s_@@} is a scan mark (equal to \cs{scan_stop:}), \cs{@@_chk:w}
-% produces a suitable error if the property list is used directly in the input
-% stream, and \cs{@@_pair:wn} can be used to map through the property list.
-%
-% With the linked data storage, each property list entry
-% \meta{key_i}--\meta{value_i} is stored into a token list
-% \cs[no-index]{@@~\meta{prefix}~\meta{key_i}}. The \meta{prefix} is one or
-% more characters (no spaces), constructed automatically only once, when the
-% property list is initially declared. The control sequence name does not
-% conform to standard naming for variables because (1) this is an internal
-% control sequence, not really a \pkg{expl3} variable; (2) keeping track of the
-% scope |l| or~|g| throughout all functions would be a pretty big mess,
-% especially if users accidentally mix local and global use (we would have to
-% always check for such mistakes, rather than only checking when suitable debug
-% options are set); (3) shorter control sequence names use less memory and are
-% quicker in case of hash collisions, which may matter since we are using many
-% control sequences.
-%
-% We need to enable mapping through such a property list, but without storing a
-% list of all entries anywhere: this is achieved by making each of these token
-% lists also store a pointer to the next entry. To enable efficient deletion,
-% the token lists also store a pointer to the previous entry. This means we
-% have a doubly-linked list. To avoid having to special-case the two ends of
-% the doubly-linked list when deleting entries, we include as a zeroth entry in
-% the doubly-linked list the property list variable itself, and we include as an
-% $(n+1)$-th entry in the doubly-linked list an end-pointer
-% \cs{@@~\meta{prefix}} (no trailing space, so it differs from an empty key).
-% The space before \meta{prefix} ensures there is no collision with
-% other \pkg{l3prop} internal functions, even if we have very many
-% linked property lists being defined.
-%
-% The property list variable itself is a token list of the form
-% \begin{quote}
-% \cs{@@_flatten:w} \cs{@@~\meta{prefix}} \cs{s_@@} \Arg{prefix}
-% \cs[no-index]{@@~\meta{prefix}~\meta{key_1}}
-% \end{quote}
-% Here, \cs{@@_flatten:w} serves as an efficiently recognized marker, and when
-% \texttt{f}-expanded it is tasked with fully unpacking the property list into
-% the same form as the default data storage so as to ease conversion. The
-% \meta{prefix} is used when looking up an entry. The token list
-% \cs{@@~\meta{prefix}} (see below) contains a pointer to the last key to help
-% insert a new entry. The pointer to \meta{key_1} is needed to start a mapping.
-% The token list labeled by \meta{key_i} is of the form
-% \begin{quote}
-% \cs{use_none:n} \cs[no-index]{@@~\meta{prefix}~\meta{key$_{i-1}$}}
-% \cs{@@_pair:wn} \meta{key_i} \cs{s_@@} \Arg{value_i}
-% \cs[no-index]{@@~\meta{prefix}~\meta{key$_{i+1}$}}
-% \end{quote}
-% where the pointer to \meta{key$_{i-1}$} is needed when deleting the
-% \meta{key_i}. Expanding this will run \cs{@@_pair:wn} on the
-% \meta{key_i}--\meta{value_i} pair (for speed, \meta{key_i} is kept as explicit
-% tokens rather than slowly extracting it from a control sequence name), then
-% move on to the next key, thus mapping through the whole list. The mapping is
-% ended upon expanding \cs{@@~\meta{prefix}}, which is the token list
-% \begin{quote}
-% \cs{use_none:n} \cs[no-index]{@@~\meta{prefix}~\meta{key_n}}
-% \end{quote}
-% Let us think about deleting the \meta{key_i}. We need to update the
-% \meta{key$_{i-1}$} and \meta{key$_{i+1}$} to point to each other
-% instead of \meta{key_i}. To edit the corresponding token lists, it is
-% important that \cs[no-index]{@@~\meta{prefix}~\meta{key_i}} be at the
-% \enquote{same place} in the token lists also in the boundary cases
-% $i=1$ or $i=n$, namely as the second token, or as the second argument
-% after \cs{s_@@}.
-%
-% \subsection{Internal auxiliaries}
-%
-% \begin{macro}{\@@_tmp:w}
-% Scratch macro, defined as needed, for instance to save \cs{@@_pair:wn} when
-% concatenating.
-% \begin{macrocode}
-\cs_new_eq:NN \@@_tmp:w ?
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\l_@@_internal_tl}
-% Token list used in various places: for the prefix; when converting from flat
-% to linked props; and to store the new key--value pair inserted by
-% \cs{prop_put:Nnn}.
-% \begin{macrocode}
-\tl_new:N \l_@@_internal_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\s_@@_mark,\s_@@_stop}
-% Internal scan marks.
-% \begin{macrocode}
-\scan_new:N \s_@@_mark
-\scan_new:N \s_@@_stop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\q_@@_recursion_tail,\q_@@_recursion_stop}
-% Internal recursion quarks.
-% \begin{macrocode}
-\quark_new:N \q_@@_recursion_tail
-\quark_new:N \q_@@_recursion_stop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[EXP]{\@@_if_recursion_tail_stop:n}
-% \begin{macro}[EXP]{\@@_if_recursion_tail_stop:o}
-% Functions to query recursion quarks.
-% \begin{macrocode}
-\__kernel_quark_new_test:N \@@_if_recursion_tail_stop:n
-\cs_generate_variant:Nn \@@_if_recursion_tail_stop:n { o }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Structure of a property list}
-%
-% \begin{macro}{\s_@@}
-% A private scan mark is used as a marker after each key, and at the
-% very beginning of the property list.
-% \begin{macrocode}
-\scan_new:N \s_@@
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_chk:w, \@@_chk_loop:nw, \@@_chk_get:nw}
-% This removes the flat property list from the input stream and complains
-% about a bad use of a property list. Since property lists do not have an
-% end-marker, we slowly peek ahead in a loop. Speed does not matter since
-% this is for an error situation. While \cs{@@_pair:wn} does not keep a fixed
-% definition, it always includes the internal \cs{s_@@} in its argument
-% specification, so that there is no risk of accidentally picking up a public
-% token instead of \cs{@@_pair:wn} when doing a meaning test. We collect the
-% keys and values to produce a more useful error message.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_chk:w { \@@_chk_loop:nw { } }
-\cs_new_protected:Npn \@@_chk_loop:nw #1
- {
- \peek_meaning:NTF \@@_pair:wn
- { \@@_chk_get:nw {#1} }
- { \msg_error:nne { prop } { misused } {#1} }
- }
-\cs_new_protected:Npn \@@_chk_get:nw #1 \@@_pair:wn #2 \s_@@ #3
- { \@@_chk_loop:nw { #1 , ~ {#2} = { \tl_to_str:n {#3} } } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_pair:wn}
-% Used as \cs{@@_pair:wn} \meta{key} \cs{s_@@} \Arg{item} for both storage
-% types, this internal token starts each key--value pair in the property list.
-% This default definition is changed globally by any mapping function, so
-% there is not much point trying to make it an error. Instead, the error is
-% produced by \cs{@@_chk:w}.
-% \begin{macrocode}
-\cs_new:Npn \@@_pair:wn #1 \s_@@ #2 { }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_flatten:w}
-% We implement here the fact that \texttt{f}-expanding a linked property list
-% gives a flat property list.
-% Leaving a linked property list in the input stream will turn it into a flat
-% property list so that the error implemented by \cs{@@_chk:w} will correctly
-% be triggered.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_flatten:w #1 \s_@@ #2#3
- { \use:e { \@@_flatten_aux:N #3 } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]
-% {\@@_flatten:N, \@@_flatten_aux:w, \@@_flatten_aux:N, \@@_flatten_loop:w}
-% The main function \cs{@@_flatten:N} receives a linked property list and
-% flattens it. The auxiliary \cs{@@_flatten_aux:N} receives a pointer to the
-% first key and flattens the linked property list into a flat property list.
-% This is only restricted-expandable as it involves mapping through all of the
-% property list's entries starting from \meta{key_1}. The looping function
-% \cs{@@_flatten_loop:w} removes \cs{use_none:n} and a backwards pointer~|#2|,
-% leaves the key--value pair for \cs{use:e} to receive, and calls itself
-% again after expanding the next key's token list. Its argument |#3| is
-% empty, except at the end where it is the \cs{use_none:nnnn} appearing in the
-% definition of~\cs{@@_flatten_aux:N}, which ends the loop.
-% \begin{macrocode}
-\cs_new:Npn \@@_flatten:N #1
- { \exp_after:wN \@@_flatten_aux:w #1 }
-\cs_new:Npn \@@_flatten_aux:w #1 \s_@@ #2 { \@@_flatten_aux:N }
-\cs_new:Npn \@@_flatten_aux:N #1
- {
- \s_@@ \@@_chk:w
- \exp_after:wN \@@_flatten_loop:w #1
- \use_none:nnnn \@@_pair:wn \s_@@ { }
- }
-\cs_new:Npn \@@_flatten_loop:w #1#2#3 \@@_pair:wn #4 \s_@@ #5
- {
- #3
- \exp_not:n { \@@_pair:wn #4 \s_@@ {#5} }
- \exp_after:wN \@@_flatten_loop:w
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\g_@@_prefix_int, \c_@@_basis_int}
-% Used to assign prefixes for each linked property list. It is converted to
-% base \cs{c_@@_basis_int}, then each digit is converted to a character,
-% starting at |!| (the character after space).
-% \begin{macrocode}
-\int_new:N \g_@@_prefix_int
-\int_const:Nn \c_@@_basis_int { \c_max_char_int - `\! }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\@@_next_prefix:, \@@_to_prefix:n}
-% Store in \cs{l_@@_internal_tl} the conversion of \cs{g_@@_prefix_int} to
-% characters, and increment this integer for use in the next linked property
-% list. No need to optimize since this is only used when declaring the
-% property list the first time.
-% The aim here is to make this string as short as we can, given the
-% range of distinct characters available. This speeds up the work of
-% \cs{cs:w} \ldots{} \cs{cs_end:} that looks up keys in the hash table.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_next_prefix:
- {
- \tl_set:Ne \l_@@_internal_tl
- { \@@_to_prefix:n { \g_@@_prefix_int } }
- \int_gincr:N \g_@@_prefix_int
- }
-\cs_new:Npn \@@_to_prefix:n #1
- {
- \int_compare:nNnTF {#1} > \c_@@_basis_int
- {
- \exp_args:Nf \@@_to_prefix:n
- { \int_div_truncate:nn {#1} \c_@@_basis_int }
- \exp_args:Nf \@@_to_prefix:n
- { \int_mod:nn {#1} \c_@@_basis_int }
- }
- { \char_generate:nn { `\! + #1 } { 12 } }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_if_flat:NTF, \@@_if_flat_aux:w}
-% We could either test for the presence of \cs{@@_chk:w} (flat
-% property list) or of \cs{@@_flatten:w} (linked property list). We
-% make the second choice; this way props that are accidentally
-% \tn{relax} are treated as they were before. The auxiliary receives
-% \cs{use_i:nn} or \cs{use_ii:nn} as~|#3|.
-% As a transitional fix we avoid erroring in case the prop is undefined (the \cs{exp_after:wN} is omitted in that case, taking the flat branch).
-% \begin{macrocode}
-\cs_new:Npn \@@_if_flat:NTF #1
- {
- \prop_if_exist:NT #1
- \exp_after:wN \@@_if_flat_aux:w #1
- \s_@@_mark \use_ii:nn
- \@@_flatten:w \s_@@_mark \use_i:nn \s_@@_stop
- }
-\cs_new:Npn \@@_if_flat_aux:w
- #1 \@@_flatten:w #2 \s_@@_mark #3 #4 \s_@@_stop {#3}
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Allocation and initialisation}
-%
-% \begin{variable}[tested = m3prop004]{\c_empty_prop}
-% An empty flat prop.
-% \begin{macrocode}
-\tl_const:Nn \c_empty_prop { \s_@@ \@@_chk:w }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[tested = m3prop001]{\prop_new:N, \prop_new:c}
-% Flat property lists are initialized with the value \cs{c_empty_prop}.
-% \begin{macrocode}
-\cs_new_protected:Npn \prop_new:N #1
- {
- \__kernel_chk_if_free_cs:N #1
- \cs_gset_eq:NN #1 \c_empty_prop
- }
-\cs_generate_variant:Nn \prop_new:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[tested = m3prop001]{\prop_new_linked:N, \prop_new_linked:c}
-% \begin{macro}{\@@_new_linked:N}
-% The auxiliary is used in \cs{prop_make_linked:N}.
-% For linked property lists, get a new prefix in \cs{l_@@_internal_tl}, then
-% use it to set up the internal structure: the last token in~|#1| is usually a
-% pointer to the first key, which is here the end-pointer. That end-pointer
-% has a pointer to the previous key (usually the last key), which is the
-% variable~|#1| itself that begins the doubly-linked list.
-% \begin{macrocode}
-\cs_new_protected:Npn \prop_new_linked:N #1
- {
- \__kernel_chk_if_free_cs:N #1
- \@@_new_linked:N #1
- }
-\cs_new_protected:Npn \@@_new_linked:N #1
- {
- \@@_next_prefix:
- \cs_gset_nopar:Npe #1
- {
- \@@_flatten:w
- \exp_not:c { @@ ~ \l_@@_internal_tl }
- \s_@@ { \l_@@_internal_tl }
- \exp_not:c { @@ ~ \l_@@_internal_tl }
- }
- \cs_gset_nopar:cpe { @@ ~ \l_@@_internal_tl }
- {
- \exp_not:N \use_none:n
- \exp_not:N #1
- }
- }
-\cs_generate_variant:Nn \prop_new_linked:N { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[tested = m3prop001]{\prop_clear:N, \prop_clear:c}
-% \begin{macro}[tested = m3prop001]{\prop_gclear:N, \prop_gclear:c}
-% \begin{macro}{\@@_clear:NNN, \@@_clear:wNNN, \@@_clear_loop:Nw}
-% Clearing a flat property list is like declaring it anew, simply setting it
-% equal to \cs{c_empty_prop}. For linked property lists we must clear all of
-% the variables storing individual keys, which requires a loop. At each step
-% of the loop, \cs{@@_clear_loop:Nw} receives
-% \cs[index=cs_set_eq:NN]{cs_(g)set_eq:NN}, \cs{use_none:n}, the backwards
-% pointer, an empty~|#4| (except at the end of the loop), and the key--value
-% pair |#5=#6| which we disregard. The looping auxiliary undefines the
-% previous key's token list (this includes the main token list, but that is
-% fine because it is restored at the end) and calls itself after expanding the
-% next key's token list. The loop ends when |#4| is \cs{use_none:nnnn}.
-% After the loop, \cs{@@_clear:wNNN} correctly sets up the main variable~|#6|
-% and the end-pointer~|#1|. Importantly, this is done using
-% \cs[index=cs_set_nopar:Npe]{cs_(g)set_nopar:Npe} and \cs{exp_not:n} because
-% the almost-equivalent \cs{tl_set:Nn} would complain in debug mode about the
-% fact that the main variable is undefined at this stage. Importantly,
-% \cs{@@_clear_entries:NN} is used in the implementation of
-% \cs{prop_set_eq:NN}.
-% \begin{macrocode}
-\cs_new_protected:Npn \prop_clear:N
- { \@@_clear:NNN \cs_set_eq:NN \cs_set_nopar:Npe }
-\cs_generate_variant:Nn \prop_clear:N { c }
-\cs_new_protected:Npn \prop_gclear:N
- { \@@_clear:NNN \cs_gset_eq:NN \cs_gset_nopar:Npe }
-\cs_generate_variant:Nn \prop_gclear:N { c }
-\cs_new_protected:Npn \@@_clear:NNN #1#2#3
- {
- \@@_if_flat:NTF #3
- { #1 #3 \c_empty_prop }
- { \exp_after:wN \@@_clear:wNNN #3 #1 #2 #3 }
- }
-\cs_new_protected:Npn \@@_clear:wNNN
- \@@_flatten:w #1 \s_@@ #2#3#4#5#6
- {
- \@@_clear_entries:NN #4 #3
- #5 #6 { \exp_not:n { \@@_flatten:w #1 \s_@@ {#2} #1 } }
- #5 #1 { \exp_not:n { \use_none:n #6 } }
- }
-\cs_new_protected:Npn \@@_clear_entries:NN #1#2
- {
- \exp_after:wN \@@_clear_loop:Nw \exp_after:wN #1 #2
- \use_none:nnnn \@@_pair:wn \s_@@ { }
- }
-\cs_new_protected:Npn \@@_clear_loop:Nw
- #1#2#3#4 \@@_pair:wn #5 \s_@@ #6
- {
- #1 #3 \tex_undefined:D
- #4
- \exp_after:wN \@@_clear_loop:Nw
- \exp_after:wN #1
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[tested = m3prop001]
-% {
-% \prop_clear_new:N, \prop_clear_new:c,
-% \prop_gclear_new:N, \prop_gclear_new:c,
-% \prop_clear_new_linked:N, \prop_clear_new_linked:c,
-% \prop_gclear_new_linked:N, \prop_gclear_new_linked:c
-% }
-% A simple variation of the token list functions.
-% \begin{macrocode}
-\cs_new_protected:Npn \prop_clear_new:N #1
- { \prop_if_exist:NTF #1 { \prop_clear:N #1 } { \prop_new:N #1 } }
-\cs_generate_variant:Nn \prop_clear_new:N { c }
-\cs_new_protected:Npn \prop_gclear_new:N #1
- { \prop_if_exist:NTF #1 { \prop_gclear:N #1 } { \prop_new:N #1 } }
-\cs_generate_variant:Nn \prop_gclear_new:N { c }
-\cs_new_protected:Npn \prop_clear_new_linked:N #1
- { \prop_if_exist:NTF #1 { \prop_clear:N #1 } { \prop_new_linked:N #1 } }
-\cs_generate_variant:Nn \prop_clear_new_linked:N { c }
-\cs_new_protected:Npn \prop_gclear_new_linked:N #1
- { \prop_if_exist:NTF #1 { \prop_gclear:N #1 } { \prop_new_linked:N #1 } }
-\cs_generate_variant:Nn \prop_gclear_new_linked:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[tested = m3prop001]
-% {\prop_set_eq:NN, \prop_set_eq:cN, \prop_set_eq:Nc, \prop_set_eq:cc}
-% \begin{macro}[tested = m3prop001]
-% {\prop_gset_eq:NN, \prop_gset_eq:cN, \prop_gset_eq:Nc, \prop_gset_eq:cc}
-% \begin{macro}
-% {
-% \@@_set_eq:NNNN, \@@_set_eq:wNNNN, \@@_set_eq:nNnNN,
-% \@@_set_eq_loop:NNnw, \@@_set_eq_end:w
-% }
-% If both variables are accidentally the same variable (or equal flat property
-% lists, as it turns out) we do nothing, otherwise the following code would
-% lose all entries. If the target variable~|#3| is a flat prop, either copy
-% directly or flatten before copying. If it is a linked prop, we must clear
-% it, then go through the entries in~|#4| to add them to~|#3|.
-% \begin{macrocode}
-\cs_new_protected:Npn \prop_set_eq:NN
- { \@@_set_eq:NNNN \cs_set_eq:NN \cs_set_nopar:Npe }
-\cs_generate_variant:Nn \prop_set_eq:NN { Nc , cN , cc }
-\cs_new_protected:Npn \prop_gset_eq:NN
- { \@@_set_eq:NNNN \cs_gset_eq:NN \cs_gset_nopar:Npe }
-\cs_generate_variant:Nn \prop_gset_eq:NN { Nc , cN , cc }
-\cs_new_protected:Npn \@@_set_eq:NNNN #1#2#3#4
- {
- \cs_if_eq:NNF #3#4
- {
- \@@_if_flat:NTF #3
- {
- \@@_if_flat:NTF #4
- { #1 #3 #4 }
- { #2 #3 { \@@_flatten:N #4 } }
- }
- { \exp_after:wN \@@_set_eq:wNNNN #3 #1#2#3#4 }
- }
- }
-\cs_new_protected:Npn \@@_set_eq:wNNNN
- \@@_flatten:w #1 \s_@@ #2#3#4#5#6#7
- {
- \@@_clear_entries:NN #4 #3
- \exp_args:Nf \@@_set_eq:nNnNN {#7} #1 {#2} #5 #6
- }
-% \end{macrocode}
-% We have used that |f|-expanding either type of prop gives a flat prop. At
-% this stage \cs{@@_set_eq:nNnNN} receives the second variable as a flat prop,
-% the end-pointer, the prefix, the suitable
-% \cs[index=cs_set_nopar:Npe]{cs_(g)set_nopar:Npe} assignment, and the first
-% variable itself. Remove the leading \cs{s_@@} and \cs{@@_chk:w} with
-% \cs{use_i:nnn}, then start the loop.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_set_eq:nNnNN #1#2#3#4#5
- {
- \use_i:nnn
- {
- \@@_set_eq_loop:NNnw #5 #4 {#3}
- \@@_flatten:w #2 \s_@@ {#3}
- }
- #1
- \use_none:n \@@_pair:wn ? \s_@@
- }
-% \end{macrocode}
-% The looping function receives the current pointer~|#1| (initially the
-% variable itself), the defining function~|#2| and the prefix~|#3|, then a
-% partial definition~|#4| (which in later stages includes the backwards
-% pointer), followed by the current value as \cs{s_@@} |{#5}|. It seeks the
-% next key~|#7| to construct in \cs{l_@@_internal_tl} the next pointer
-% \cs[no-index]{@@~\meta{prefix}~\meta{next key}} (the
-% argument~|#6| is empty, except at the end of the loop, where it is
-% \cs{use_none:n} in such a way as to delete the \meta{space} and \meta{next
-% key}). Then the token list (current pointer)~|#1| is set-up to contain the
-% partial definition and current value, as well as the newly constructed next
-% pointer. After a line responsible for correctly ending the loop with
-% \cs{@@_set_eq_end:w}, we loop, setting up the next definition, which starts
-% with \cs{use_none:n} and a backwards pointer to~|#1| followed by the
-% \meta{next key}~|#7| and so on.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_set_eq_loop:NNnw
- #1#2#3#4 \s_@@ #5#6 \@@_pair:wn #7 \s_@@
- {
- \tl_set:Ne \l_@@_internal_tl { \exp_not:c { @@ ~ #3 #6 ~ #7 } }
- #2 #1 { \exp_not:n { #4 \s_@@ {#5} } \exp_not:o \l_@@_internal_tl }
- \use_none:n #6 \@@_set_eq_end:w
- \exp_after:wN \@@_set_eq_loop:NNnw \l_@@_internal_tl #2 {#3}
- \use_none:n #1 \@@_pair:wn #7 \s_@@
- }
-% \end{macrocode}
-% The end-code picks up what is needed to correctly assign the last token
-% list (the end pointer), which is simply \cs{use_none:n}
-% \cs[no-index]{@@_\meta{prefix}\meta{space}\meta{key_n}}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_set_eq_end:w
- \exp_after:wN \@@_set_eq_loop:NNnw #1#2#3
- \use_none:n #4#5 \s_@@
- {
- \exp_after:wN #2 \l_@@_internal_tl { \exp_not:n { \use_none:n #4 } }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\prop_make_flat:N, \prop_make_flat:c \@@_make_flat:Nn}
-% The only interesting case is when given a linked prop. Clear the
-% linked property list using \cs{@@_clear:wNNN} with local assignments
-% (it does not matter since we are at the outermost group level, and
-% \cs{cs_set_eq:NN} is very slightly faster than its global version.
-% Then store the contents (expanded preventively by \cs{exp_args:NNf})
-% with an assignment \cs{cs_set_nopar:Npe} that does not perform
-% \pkg{l3debug} checks.
-% \begin{macrocode}
-\cs_new_protected:Npn \prop_make_flat:N #1
- {
- \int_compare:nNnTF { \tex_currentgrouplevel:D } = 0
- {
- \@@_if_flat:NTF #1 { }
- { \exp_args:NNf \@@_make_flat:Nn #1 {#1} }
- }
- {
- \msg_error:nnee { prop } { inner-make }
- { \token_to_str:N \prop_make_flat:N } { \token_to_str:N #1 }
- }
- }
-\cs_generate_variant:Nn \prop_make_flat:N { c }
-\cs_new_protected:Npn \@@_make_flat:Nn #1#2
- {
- \exp_after:wN \@@_clear:wNNN #1 \cs_set_eq:NN \cs_set_nopar:Npe #1
- \cs_set_nopar:Npe #1 { \exp_not:n {#2} }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\prop_make_linked:N, \prop_make_linked:c, \@@_make_linked:Nn}
-% The only interesting case is when given a flat prop. We expand the
-% contents for later use. Then \cs{@@_new_linked:N} disregards that
-% previous value of~|#1| and initializes the linked prop. We can then
-% use an auxiliary \cs{@@_set_eq:wNNNN} underlying
-% \cs{prop_set_eq:NN}, with the prop contents saved as
-% \cs{l_@@_internal_tl}. That step is a bit unsafe, as
-% \cs{l_@@_internal_tl} (really, a flat prop here) is used within
-% \cs{@@_set_eq:wNNNN} itself, but it is in fact expanded early enough
-% to be ok.
-% \begin{macrocode}
-\cs_new_protected:Npn \prop_make_linked:N #1
- {
- \int_compare:nNnTF { \tex_currentgrouplevel:D } = 0
- {
- \@@_if_flat:NTF #1
- { \exp_args:NNo \@@_make_linked:Nn #1 {#1} } { }
- }
- {
- \msg_error:nnee { prop } { inner-make }
- { \token_to_str:N \prop_make_linked:N } { \token_to_str:N #1 }
- }
- }
-\cs_generate_variant:Nn \prop_make_linked:N { c }
-\cs_new_protected:Npn \@@_make_linked:Nn #1#2
- {
- \@@_new_linked:N #1
- \tl_set:Nn \l_@@_internal_tl {#2}
- \exp_after:wN \@@_set_eq:wNNNN #1
- \cs_set_eq:NN \cs_set_nopar:Npe #1 \l_@@_internal_tl
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}[tested = m3prop004]{\l_tmpa_prop, \l_tmpb_prop}
-% \begin{variable}[tested = m3prop004]{\g_tmpa_prop, \g_tmpb_prop}
-% We can now initialize the scratch variables.
-% \begin{macrocode}
-\prop_new:N \l_tmpa_prop
-\prop_new:N \l_tmpb_prop
-\prop_new:N \g_tmpa_prop
-\prop_new:N \g_tmpb_prop
-% \end{macrocode}
-% \end{variable}
-% \end{variable}
-%
-% \begin{macro}
-% {
-% \prop_concat:NNN, \prop_concat:ccc,
-% \prop_gconcat:NNN, \prop_gconcat:ccc,
-% \@@_concat:NNNNN, \@@_concat:nNNN
-% }
-% The basic strategy is to copy the first variable into the target,
-% then loop through the second variable, calling
-% \cs[index=prop_put:Nnn]{prop_(g)put:Nnn} on each item. To avoid
-% running the \pkg{l3debug} scope checks on each of these steps, we
-% use the auxiliaries that underly \cs{prop_set_eq:NN} and
-% \cs{prop_put:Nnn}, whose syntax is a bit unwieldy.
-% We work directly with the target prop |#3| as a scratch space,
-% because copying over from a temporary variable to |#3| would be slow
-% in the linked case. If |#5| is |#3| itself we have to be careful
-% not to lose the data, and we even take the opportunity to skip the
-% copying step completely. To keep the correct version of the
-% duplicate keys we use the code underlying \cs{prop_put_if_new:Nnn},
-% which involves passing \cs{use_none:nnn} to the auxiliary instead of
-% nothing.
-% There is no need to check for the case where |#3| is equal to~|#4|
-% because in that case \cs[index=prop_set_eq:NN]{prop_(g)set_eq:NN}
-% |#3| |#4| (or rather the underlying auxiliary) is correctly set up
-% to do no needless work.
-% \begin{macrocode}
-\cs_new_protected:Npn \prop_concat:NNN
- { \@@_concat:NNNNN \cs_set_eq:NN \cs_set_nopar:Npe }
-\cs_generate_variant:Nn \prop_concat:NNN { ccc }
-\cs_new_protected:Npn \prop_gconcat:NNN
- { \@@_concat:NNNNN \cs_gset_eq:NN \cs_gset_nopar:Npe }
-\cs_generate_variant:Nn \prop_gconcat:NNN { ccc }
-\cs_new_protected:Npn \@@_concat:NNNNN #1#2#3#4#5
- {
- \cs_if_eq:NNTF #3 #5
- { \@@_concat:nNNN \use_none:nnn #2 #3 #4 }
- {
- \@@_set_eq:NNNN #1 #2 #3 #4
- \@@_concat:nNNN { } #2 #3 #5
- }
- }
-\cs_new_protected:Npn \@@_concat:nNNN #1#2#3#4
- {
- \cs_gset_eq:NN \@@_tmp:w \@@_pair:wn
- \cs_gset_protected:Npn \@@_pair:wn ##1 \s_@@
- { \@@_put:nNNnn {#1} #2 #3 {##1} }
- \exp_last_unbraced:Nf \use_none:nn #4
- \cs_gset_eq:NN \@@_pair:wn \@@_tmp:w
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \prop_put_from_keyval:Nn, \prop_put_from_keyval:cn,
-% \prop_gput_from_keyval:Nn, \prop_gput_from_keyval:cn,
-% \@@_from_keyval:nn, \@@_from_keyval:Nnn,
-% \@@_missing_eq:n
-% }
-% The core is a call to \cs{keyval_parse:nnn}, with an error message
-% \cs{@@_missing_eq:n} for entries without~|=|, and a call to (essentially)
-% \cs[index=prop_put:Nnn]{prop_(g)put:Nnn} for valid key--value pairs.
-% To avoid repeated scope checks (and errors) when \pkg{l3debug} is
-% active, we instead use the auxiliary underlying \cs{prop_put:Nnn}.
-% Because blank keys are valid here, in contrast to \pkg{l3keys}, we set and
-% restore \cs{l__kernel_keyval_allow_blank_keys_bool}.
-% The key--value argument may be quite large so we avoid reading it until it
-% is really necessary.
-% \begin{macrocode}
-\cs_new_protected:Npn \prop_put_from_keyval:Nn #1
- { \@@_from_keyval:nn { \@@_put:nNNnn { } \cs_set_nopar:Npe #1 } }
-\cs_generate_variant:Nn \prop_put_from_keyval:Nn { c }
-\cs_new_protected:Npn \prop_gput_from_keyval:Nn #1
- { \@@_from_keyval:nn { \@@_put:nNNnn { } \cs_gset_nopar:Npe #1 } }
-\cs_generate_variant:Nn \prop_gput_from_keyval:Nn { c }
-\cs_new_protected:Npn \@@_from_keyval:nn
- {
- \bool_if:NTF \l__kernel_keyval_allow_blank_keys_bool
- { \@@_from_keyval:Nnn \c_true_bool }
- { \@@_from_keyval:Nnn \c_false_bool }
- }
-\cs_new_protected:Npn \@@_from_keyval:Nnn #1#2#3
- {
- \bool_set_eq:NN \l__kernel_keyval_allow_blank_keys_bool \c_true_bool
- \keyval_parse:nnn \@@_missing_eq:n {#2} {#3}
- \bool_set_eq:NN \l__kernel_keyval_allow_blank_keys_bool #1
- }
-\cs_new_protected:Npn \@@_missing_eq:n
- { \msg_error:nnn { prop } { prop-keyval } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \prop_set_from_keyval:Nn, \prop_set_from_keyval:cn,
-% \prop_gset_from_keyval:Nn, \prop_gset_from_keyval:cn,
-% }
-% Just empty the prop (with the auxiliary underlying
-% \cs{prop_clear:N} to avoid \pkg{l3debug} problems) and push
-% key--value entries using
-% \cs[index=prop_put_from_keyval:Nn]{prop_(g)put_from_keyval:Nn}.
-% \begin{macrocode}
-\cs_new_protected:Npn \prop_set_from_keyval:Nn #1
- {
- \@@_clear:NNN \cs_set_eq:NN \cs_set_nopar:Npe #1
- \prop_put_from_keyval:Nn #1
- }
-\cs_generate_variant:Nn \prop_set_from_keyval:Nn { c }
-\cs_new_protected:Npn \prop_gset_from_keyval:Nn #1
- {
- \@@_clear:NNN \cs_gset_eq:NN \cs_gset_nopar:Npe #1
- \prop_gput_from_keyval:Nn #1
- }
-\cs_generate_variant:Nn \prop_gset_from_keyval:Nn { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \prop_const_from_keyval:Nn, \prop_const_from_keyval:cn,
-% \prop_const_linked_from_keyval:Nn, \prop_const_linked_from_keyval:cn
-% }
-% For both flat and linked constant props, we create |#1| then use the
-% same auxiliary as for \cs{prop_gput_from_keyval:Nn}. It is most
-% natural to use the already packaged \cs{prop_gput:Nnn}, but that
-% would mean doing an assignment on a supposedly constant property
-% list. To avoid errors when \pkg{l3debug} is activated, we use the
-% auxiliary underlying \cs{prop_gput:Nnn}.
-% \begin{macrocode}
-\cs_new_protected:Npn \prop_const_from_keyval:Nn #1
- {
- \prop_new:N #1
- \@@_from_keyval:nn { \@@_put:nNNnn { } \cs_gset_nopar:Npe #1 }
- }
-\cs_generate_variant:Nn \prop_const_from_keyval:Nn { c }
-\cs_new_protected:Npn \prop_const_linked_from_keyval:Nn #1
- {
- \prop_new_linked:N #1
- \@@_from_keyval:nn { \@@_put:nNNnn { } \cs_gset_nopar:Npe #1 }
- }
-\cs_generate_variant:Nn \prop_const_linked_from_keyval:Nn { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Accessing data in property lists}
-%
-% Accessing/deleting/adding entries is mostly done by \cs{@@_split:NnTFn}, which
-% must be fast because it is used in many \pkg{l3prop} functions. Its syntax is
-% as follows.
-% \begin{quote}
-% \cs{@@_split:NnTFn} \meta{property list} \Arg{key} \\
-% ~~\Arg{true code} \Arg{false code} \Arg{link code}
-% \end{quote}
-% If the \meta{property list} uses the linked data storage, then it runs
-% the \meta{link code}, otherwise it does as follows.
-%
-% It splits the \meta{property list} at the \meta{key}, giving three
-% token lists: the \meta{entries before} the \meta{key}, the
-% \meta{value} associated with the \meta{key} and the \meta{entries
-% after} the \meta{key}. Both the \meta{entries before} and the
-% \meta{entries after} can be empty or consist of some number of
-% consecutive entries \cs{@@_pair:wn} \meta{key_i} \cs{s_@@}
-% \Arg{value_i}. If the \meta{key} is present in the \meta{property
-% list} then the \meta{true code} is left in the input stream, with
-% |#1|, |#2|, and |#3| replaced by the \meta{entries before},
-% \meta{value}, and \meta{entries after}. If the \meta{key} is not
-% present in the \meta{property list} then the \meta{false code} is left
-% in the input stream. Only the \meta{true code} is used in the
-% replacement text of a macro defined internally, which requires
-% |##|~doubling.
-%
-% \begin{macro}
-% {
-% \@@_split:NnTFn, \@@_split_aux:nNTFn, \@@_split_test:wn,
-% \@@_split_flat:w, \@@_split_linked:w, \@@_split_wrong:Nw
-% }
-% The aim is to distinguish four cases: a flat prop that contains the
-% given \meta{key}, a flat prop that does not contain it, a linked
-% prop, and an invalid prop. The last case includes those that are
-% set to \tn{relax} by \texttt{c}-expansion, as well as unrelated
-% token list variables since these unfortunately used to
-% \enquote{work} in earlier implementations.
-% In the first three cases we run the \texttt{T}, \texttt{F}, and
-% \texttt{n} arguments, and in the last case we raise an error, set
-% the variable to a known state (empty prop), and run the \texttt{F}
-% code (some conditionals such as \cs{prop_pop:NnNTF} otherwise blow
-% up pretty badly).
-%
-% The first distinction between these cases is done by
-% \cs{@@_split_test:wn}, which looks for the argument after \cs{s_@@}.
-% For a flat prop it will be \cs{@@_chk:w}, which leads to running
-% \cs{@@_split_flat:w}, explained below. For a linked prop it is the
-% prefix, consisting of characters, so we end up running
-% \cs{@@_split_linked:w}, which cleans up and selects the
-% aforementioned \texttt{n} argument. For invalid props, or rather,
-% variables that do not contain \cs{s_@@}, the argument includes
-% \cs{fi:}, and we end up calling \cs{@@_split_wrong:Nw}, which calls
-% \cs{prop_show:N} to raise a detailed error stating how the variable
-% is wrong.
-%
-% Let us return to \cs{@@_split_flat:w}. This function is defined
-% dynamically as
-% \begin{quote}
-% \cs{cs_set:Npn} \cs{@@_split_flat:w} \cs{@@_split_linked:w} |#1| \\
-% \quad \cs{@@_pair:wn} \meta{key} \cs{s_@@} |#2| \\
-% \quad |#3| \cs{s_@@_mark} |#4| |#5| \cs{s_@@_stop} \\
-% \quad |{| |#4| \Arg{true code} |}|
-% \end{quote}
-% Its job is to seek the \meta{key} in the property list (known to be
-% flat at this stage) by using an argument |#1| delimited essentially
-% by that key. If indeed the variable contained the \meta{key}, then
-% |#1|~is the \meta{extract_1} before the key--value pair, |#2|~is the
-% \meta{value} associated with the \meta{key}, |#3|~is the
-% \meta{extract_2} after the key--value pair, |#4|~is \cs{use_i:nnn},
-% and we run \cs{use_i:nnn} \Arg{true code} \Arg{false code} \Arg{link
-% code}, selecting the \meta{true code}. Otherwise, the whole
-% property list together with \cs{s_@@_mark} \cs{use_i:nnn} is taken
-% in as |#1|, then |#2| is some tokens |?| \cs{fi:}
-% \cs{@@_split_wrong:Nw} \meta{variable} that were only useful in the
-% case of invalid props, |#3|~is empty, and most importantly |#4| is
-% \cs{use_ii:nnn}. This command selects the \meta{false code}.
-%
-% Note that we define \cs{@@_split_flat:w} in all cases even though it
-% is only used in the flat case. Indeed, to avoid taking in the whole
-% property list (which may be large) as an argument more than strictly
-% necessary, we would have to keep the \meta{true code} positioned
-% before the expansion of the prop variable in order to use it in the
-% definition. The only way to do that is to store it using an
-% assignment so we might as well just perform the assignment that we
-% can actually use in the flat case.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_split:NnTFn #1#2
- {
- \exp_after:wN \@@_split_aux:nNTFn
- \exp_after:wN { \tl_to_str:n {#2} } #1
- }
-\cs_new_protected:Npn \@@_split_aux:nNTFn #1#2#3
- {
- \cs_set:Npn \@@_split_flat:w \@@_split_linked:w ##1
- \@@_pair:wn #1 \s_@@ ##2 ##3 \s_@@_mark ##4 ##5 \s_@@_stop
- { ##4 {#3} }
- \exp_after:wN \@@_split_test:wn #2 \s_@@_mark \use_i:nnn
- \@@_pair:wn #1 \s_@@ { ? \fi: \@@_split_wrong:Nw #2 }
- \s_@@_mark \use_ii:nnn
- \s_@@_stop
- }
-\cs_new:Npn \@@_split_flat:w { }
-\cs_new_protected:Npn \@@_split_test:wn #1 \s_@@ #2
- {
- \if_meaning:w \@@_chk:w #2 \exp_after:wN \@@_split_flat:w \fi:
- \@@_split_linked:w
- }
-\cs_new_protected:Npn \@@_split_linked:w #1 \s_@@_stop #2#3 {#3}
-\cs_new_protected:Npn \@@_split_wrong:Nw #1#2 \s_@@_stop #3#4
- {
- \prop_show:N #1
- \cs_gset_eq:NN #1 \c_empty_prop
- #3
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[tested = m3prop002]
-% {
-% \prop_get:NnN, \prop_get:NVN, \prop_get:NvN, \prop_get:NeN,
-% \prop_get:NoN, \prop_get:NxN,
-% \prop_get:cnN, \prop_get:cVN, \prop_get:cvN, \prop_get:ceN,
-% \prop_get:coN, \prop_get:cxN,
-% \prop_get:cnc
-% }
-% \begin{macro}[TF, tested = m3prop004]
-% {
-% \prop_get:NnN, \prop_get:NVN, \prop_get:NvN, \prop_get:NeN,
-% \prop_get:NoN, \prop_get:NxN,
-% \prop_get:cnN, \prop_get:cVN, \prop_get:cvN, \prop_get:ceN,
-% \prop_get:coN, \prop_get:cxN,
-% \prop_get:cnc
-% }
-% \begin{macro}{\@@_get:NnnTF}
-% \begin{macro}[EXP]{\@@_get_linked:w, \@@_get_linked_aux:w}
-% Here we implement both \cs{prop_get:NnN} and its branching version through
-% \cs{@@_get:NnnTF}. It receives the prop and key, followed by an assignment
-% used when the value is found, \meta{true code} to run after the assignment,
-% and some fall-back \meta{false code} for absent values. It relies on
-% \cs{@@_split:NnTFn}. For a flat prop, the first four arguments of
-% \cs{@@_split:NnTFn} are used, and run either the assignment~|#3{##3}| and
-% \meta{true code}~|#4|, or the \meta{false code}~|#5|.
-% \begin{macrocode}
-\cs_new_protected:Npn \prop_get:NnN #1#2#3
- {
- \@@_get:NnnTF #1 {#2}
- { \tl_set:Nn #3 } { } { \tl_set:Nn #3 { \q_no_value } }
- }
-\cs_generate_variant:Nn \prop_get:NnN { NV , Nv , Ne , c , cV , cv , ce }
-\cs_generate_variant:Nn \prop_get:NnN { No , Nx , co , cx }
-\cs_generate_variant:Nn \prop_get:NnN { cnc }
-\prg_new_protected_conditional:Npnn \prop_get:NnN #1#2#3 { T , F , TF }
- {
- \@@_get:NnnTF #1 {#2}
- { \tl_set:Nn #3 } \prg_return_true: \prg_return_false:
- }
-\prg_generate_conditional_variant:Nnn \prop_get:NnN
- { NV , Nv , Ne , c , cV , cv , ce } { T , F , TF }
-\prg_generate_conditional_variant:Nnn \prop_get:NnN
- { No , Nx , co , cx } { T , F , TF }
-\prg_generate_conditional_variant:Nnn \prop_get:NnN
- { cnc } { T , F , TF }
-\cs_new_protected:Npn \@@_get:NnnTF #1#2#3#4#5
- {
- \@@_split:NnTFn #1 {#2}
- { #3 {##2} #4 }
- {#5}
- { \exp_after:wN \@@_get_linked:w #1 {#2} {#3} {#4} {#5} }
- }
-% \end{macrocode}
-% For a linked prop we must work a bit: \cs{@@_get_linked:w} is followed by
-% the expansion of the prop, then by four brace groups: the key~|#4|, the
-% assignment code~|#5|, \meta{true code}~|#6|, and \meta{false code}~|#7|. If
-% the key is present, its value is stored in the token list
-% \cs[no-index]{@@_}|#2~#4|. If that token list exists,
-% \cs{@@_get_linked_aux:w} gets called followed by the expansion of that token
-% list and we grab as~|#2| the value associated to that key, which we feed to
-% the assignment code and follow-up code. If the key is absent the token list
-% can be \tn{undefined} or \tn{relax}. In both cases \cs{@@_get_linked_aux:w}
-% finds an empty brace group as~|#2|, \cs{use_none:n} as~|#4| and the
-% \meta{false code} as~|#5|.
-% Note that we made \cs{@@_get_linked:w} and subsequent auxiliaries
-% expandable, because they are also used in \cs{prop_item:Nn}.
-% \begin{macrocode}
-\cs_new:Npn \@@_get_linked:w
- \@@_flatten:w #1 \s_@@ #2#3#4#5#6#7
- {
- \if_cs_exist:w @@ ~ #2 ~ \tl_to_str:n {#4} \cs_end:
- \exp_after:wN \exp_after:wN \exp_after:wN \@@_get_linked_aux:w
- \cs:w @@ ~ #2 ~ \tl_to_str:n {#4} \exp_after:wN \cs_end:
- \else:
- \exp_after:wN \@@_get_linked_aux:w
- \fi:
- \s_@@_mark {#5} {#6}
- \s_@@ { } \s_@@_mark \use_none:n {#7}
- \s_@@_stop
- }
-\cs_new:Npn \@@_get_linked_aux:w
- #1 \s_@@ #2 #3 \s_@@_mark #4 #5 #6 \s_@@_stop { #4 {#2} #5 }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {
-% \prop_item:Nn, \prop_item:NV, \prop_item:No, \prop_item:Ne,
-% \prop_item:cn, \prop_item:cV, \prop_item:co, \prop_item:ce
-% }
-% \begin{macro}[EXP]{\@@_item:nnn}
-% Getting the value corresponding to a key in a flat property list in an
-% expandable fashion simply uses \cs{prop_map_tokens:Nn} to go through
-% the property list. The auxiliary \cs{@@_item:nnn} receives the
-% search string~|#1|, the key~|#2| and the value~|#3| and returns as
-% appropriate.
-% \begin{macrocode}
-\cs_new:Npn \prop_item:Nn #1#2
- {
- \@@_if_flat:NTF #1
- {
- \exp_args:NNo \prop_map_tokens:Nn #1
- {
- \exp_after:wN \@@_item:nnn
- \exp_after:wN { \tl_to_str:n {#2} }
- }
- }
- { \exp_after:wN \@@_get_linked:w #1 {#2} \use:n { } { } }
- }
-\cs_new:Npn \@@_item:nnn #1#2#3
- {
- \str_if_eq:eeT {#1} {#2}
- { \prop_map_break:n { \exp_not:n {#3} } }
- }
-\cs_generate_variant:Nn \prop_item:Nn { NV , No , Ne , c , cV , co , ce }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Removing data from property lists}
-%
-% \begin{macro}
-% {
-% \@@_pop:NnNNnTF,
-% \@@_pop_linked:wnNNnTF, \@@_pop_linked:NNNn,
-% \@@_pop_linked:w,
-% \@@_pop_linked_prev:w, \@@_pop_linked_next:w
-% }
-% This auxiliary is used by both the \cs[no-index]{prop_pop} family and
-% the \cs[no-index]{prop_remove} family of functions.
-% It receives a \meta{prop} and a \Arg{key}, three assignment functions
-% (\cs{tl_set:Nn} \cs{cs_set_eq:NN} \cs{cs_set_nopar:Npe} or their global
-% versions), then \Arg{code} \Arg{true code} \Arg{false code}.
-%
-% For a flat prop, split it. If the \meta{key} is there, reconstruct the rest
-% of the prop from the two extracts |##2| |##4| and assign using
-% \cs[index=tl_set:Nn]{tl_(g)set:Nn}, then run \meta{code} \Arg{value} with
-% the \meta{value} found, and run the \meta{true code}. If the \meta{key} is
-% absent, run the \meta{false code}.
-%
-% For a linked prop, the removal is done by \cs{@@_pop_linked:wnNNnTF}, which
-% removes the key--value pair from the doubly-linked list and runs its last
-% three arguments \Arg{code} \Arg{true code} \Arg{false code} depending on
-% whether the key--value is found, in the same way as for flat props.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_pop:NnNNnTF #1#2#3#4#5#6#7
- {
- \@@_split:NnTFn #1 {#2}
- {
- #4 #1 { \exp_not:n { \s_@@ \@@_chk:w ##1 ##3 } }
- #5 {##2}
- #6
- }
- {#7}
- {
- \exp_after:wN \@@_pop_linked:wnNNnTF #1 {#2}
- #3 #4 {#5} {#6} {#7}
- }
- }
-% \end{macrocode}
-% The next auxiliary \cs{@@_pop_linked:wnNNnTF}, together with the |NNNn|
-% auxiliary, checks if the key is present in the \meta{linked prop}, then the
-% corresponding value (if present) is passed as a braced argument to the
-% \meta{code} and the \meta{true code} or \meta{false code} is run as
-% appropriate. Before that, there are also three assignments: the token lists
-% for the previous key and next key are made to point to each other, cf.\
-% \cs{@@_pop_linked:w}, and the token list for the given key is made
-% undefined.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_pop_linked:wnNNnTF
- \@@_flatten:w #1 \s_@@ #2#3#4#5#6#7
- {
- \if_cs_exist:w @@ ~ #2 ~ \tl_to_str:n {#4} \cs_end:
- \exp_after:wN \@@_pop_linked:NNNn
- \cs:w @@ ~ #2 ~ \tl_to_str:n {#4} \cs_end:
- #5 #6 {#7}
- \else:
- \exp_after:wN \use_iii:nnn
- \fi:
- \use_i:nn
- }
-\cs_new_protected:Npn \@@_pop_linked:NNNn #1#2#3#4
- {
- \if_meaning:w \scan_stop: #1
- \exp_after:wN \exp_after:wN \exp_after:wN \use_iii:nnn
- \else:
- \exp_after:wN \@@_pop_linked:w #1 #1 #2 #3 {#4}
- \fi:
- }
-\cs_new_protected:Npn \@@_pop_linked:w
- \use_none:n #1#2 \s_@@ #3#4#5#6#7#8
- {
- #6 #5 \tex_undefined:D
- #7 #1
- {
- \exp_after:wN \@@_pop_linked_prev:w #1
- \exp_not:N #4
- }
- #7 #4
- {
- \exp_not:n { \use_none:n #1 }
- \exp_not:f { \exp_after:wN \@@_pop_linked_next:w #4 }
- }
- #8 {#3}
- }
-\cs_new:Npn \@@_pop_linked_prev:w #1 \s_@@ #2#3
- { \exp_not:n { #1 \s_@@ {#2} } }
-\cs_new:Npn \@@_pop_linked_next:w \use_none:n #1 { \exp_stop_f: }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[tested = m3prop002]
-% {
-% \prop_remove:Nn, \prop_remove:NV, \prop_remove:Ne,
-% \prop_remove:cn, \prop_remove:cV, \prop_remove:ce
-% }
-% \begin{macro}[tested = m3prop002]
-% {
-% \prop_gremove:Nn, \prop_gremove:NV, \prop_gremove:Ne,
-% \prop_gremove:cn, \prop_gremove:cV, \prop_gremove:ce
-% }
-% Deleting from a property relies on \cs{@@_pop:NnNNnTF}. The three
-% assignment functions are suitably local or global. The last three arguments
-% are \cs{use_none:n} and two empty brace groups: if the key is found we get
-% \cs{use_none:n} \Arg{key} \meta{empty}, which expands to nothing, and
-% otherwise we just get \meta{empty}. The auxiliary takes care of actually
-% removing the entry from the prop.
-% \begin{macrocode}
-\cs_new_protected:Npn \prop_remove:Nn #1#2
- {
- \@@_pop:NnNNnTF #1 {#2}
- \cs_set_eq:NN \cs_set_nopar:Npe
- \use_none:n { } { }
- }
-\cs_new_protected:Npn \prop_gremove:Nn #1#2
- {
- \@@_pop:NnNNnTF #1 {#2}
- \cs_gset_eq:NN \cs_gset_nopar:Npe
- \use_none:n { } { }
- }
-\cs_generate_variant:Nn \prop_remove:Nn { NV , Ne , c , cV , ce }
-\cs_generate_variant:Nn \prop_gremove:Nn { NV , Ne , c , cV , ce }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[tested = m3prop002]
-% {
-% \prop_pop:NnN, \prop_pop:NVN, \prop_pop:NoN,
-% \prop_pop:cnN, \prop_pop:cVN, \prop_pop:coN,
-% \prop_gpop:NnN, \prop_gpop:NVN, \prop_gpop:NoN,
-% \prop_gpop:cnN, \prop_gpop:cVN, \prop_gpop:coN,
-% }
-% \begin{macro}[TF, tested = m3prop004]
-% {
-% \prop_pop:NnN, \prop_pop:NVN, \prop_pop:NoN,
-% \prop_pop:cnN, \prop_pop:cVN, \prop_pop:coN,
-% \prop_gpop:NnN, \prop_gpop:NVN, \prop_gpop:NoN,
-% \prop_gpop:cnN, \prop_gpop:cVN, \prop_gpop:coN,
-% }
-% Popping a value is almost the same, but the value found is kept.
-% For the non-branching version, we additionally set the target token list to
-% \cs{q_no_value}, while for the branching version we must produce
-% \cs{prg_return_true:} or \cs{prg_return_false:}.
-% \begin{macrocode}
-\cs_new_protected:Npn \prop_pop:NnN #1#2#3
- {
- \@@_pop:NnNNnTF #1 {#2}
- \cs_set_eq:NN \cs_set_nopar:Npe
- { \tl_set:Nn #3 } { } { \tl_set:Nn #3 { \q_no_value } }
- }
-\cs_new_protected:Npn \prop_gpop:NnN #1#2#3
- {
- \@@_pop:NnNNnTF #1 {#2}
- \cs_gset_eq:NN \cs_gset_nopar:Npe
- { \tl_set:Nn #3 } { } { \tl_set:Nn #3 { \q_no_value } }
- }
-\cs_generate_variant:Nn \prop_pop:NnN { NV , No }
-\cs_generate_variant:Nn \prop_pop:NnN { c , cV , co }
-\cs_generate_variant:Nn \prop_gpop:NnN { NV , No }
-\cs_generate_variant:Nn \prop_gpop:NnN { c , cV , co }
-\prg_new_protected_conditional:Npnn \prop_pop:NnN #1#2#3 { T , F , TF }
- {
- \@@_pop:NnNNnTF #1 {#2}
- \cs_set_eq:NN \cs_set_nopar:Npe
- { \tl_set:Nn #3 } \prg_return_true: \prg_return_false:
- }
-\prg_new_protected_conditional:Npnn \prop_gpop:NnN #1#2#3 { T , F , TF }
- {
- \@@_pop:NnNNnTF #1 {#2}
- \cs_gset_eq:NN \cs_gset_nopar:Npe
- { \tl_set:Nn #3 } \prg_return_true: \prg_return_false:
- }
-\prg_generate_conditional_variant:Nnn \prop_pop:NnN
- { NV , No , c , cV , co } { T , F , TF }
-\prg_generate_conditional_variant:Nnn \prop_gpop:NnN
- { NV , No , c , cV , co } { T , F , TF }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Adding data to property lists}
-%
-% \begin{macro}[tested = m3prop002]
-% {
-% \prop_put:Nnn, \prop_put:NnV, \prop_put:Nnv, \prop_put:Nne,
-% \prop_put:NVn, \prop_put:NVV, \prop_put:NVv, \prop_put:NVe,
-% \prop_put:Nvn, \prop_put:NvV, \prop_put:Nvv, \prop_put:Nve,
-% \prop_put:Nen, \prop_put:NeV, \prop_put:Nev, \prop_put:Nee,
-% \prop_put:Nno, \prop_put:Non, \prop_put:Noo,
-% \prop_put:Nnx, \prop_put:NVx, \prop_put:NxV, \prop_put:Nxx,
-% \prop_put:cnn, \prop_put:cnV, \prop_put:cnv, \prop_put:cne,
-% \prop_put:cVn, \prop_put:cVV, \prop_put:cVv, \prop_put:cVe,
-% \prop_put:cvn, \prop_put:cvV, \prop_put:cvv, \prop_put:cve,
-% \prop_put:cen, \prop_put:ceV, \prop_put:cev, \prop_put:cee,
-% \prop_put:cno, \prop_put:con, \prop_put:coo,
-% \prop_put:cnx, \prop_put:cVx, \prop_put:cxV, \prop_put:cxx
-% }
-% \begin{macro}[tested = m3prop002]
-% {
-% \prop_gput:Nnn, \prop_gput:NnV, \prop_gput:Nnv, \prop_gput:Nne,
-% \prop_gput:NVn, \prop_gput:NVV, \prop_gput:NVv, \prop_gput:NVe,
-% \prop_gput:Nvn, \prop_gput:NvV, \prop_gput:Nvv, \prop_gput:Nve,
-% \prop_gput:Nen, \prop_gput:NeV, \prop_gput:Nev, \prop_gput:Nee,
-% \prop_gput:Nno, \prop_gput:Non, \prop_gput:Noo,
-% \prop_gput:Nnx, \prop_gput:NVx, \prop_gput:NxV, \prop_gput:Nxx,
-% \prop_gput:cnn, \prop_gput:cnV, \prop_gput:cnv, \prop_gput:cne,
-% \prop_gput:cVn, \prop_gput:cVV, \prop_gput:cVv, \prop_gput:cVe,
-% \prop_gput:cvn, \prop_gput:cvV, \prop_gput:cvv, \prop_gput:cve,
-% \prop_gput:cen, \prop_gput:ceV, \prop_gput:cev, \prop_gput:cee,
-% \prop_gput:cno, \prop_gput:con, \prop_gput:coo,
-% \prop_gput:cnx, \prop_gput:cVx, \prop_gput:cxV, \prop_gput:cxx
-% }
-% \begin{macro}[tested = m3prop002]
-% {
-% \prop_put_if_new:Nnn, \prop_put_if_new:NVn, \prop_put_if_new:NnV,
-% \prop_put_if_new:cnn, \prop_put_if_new:cVn, \prop_put_if_new:cnV,
-% \prop_gput_if_new:Nnn, \prop_gput_if_new:NVn, \prop_gput_if_new:NnV,
-% \prop_gput_if_new:cnn, \prop_gput_if_new:cVn, \prop_gput_if_new:cnV
-% }
-% \begin{macro}[tested = m3prop002]
-% {
-% \@@_put:NNNnn, \@@_put_linked:wnNN,
-% \@@_put_linked:NNNN, \@@_put_linked_old:w,
-% \@@_put_linked_new:w
-% }
-% All of the \cs[no-index]{prop_(g)put(_if_new):Nnn} functions are
-% based on the same auxiliary, which receives \meta{code} and an
-% \enquote{assignment}, followed by \meta{prop} \Arg{key} \Arg{new
-% value}. The
-% assignment \cs[index=cs_set_nopar:Npe]{cs_(g)set_nopar:Npe} is the
-% primitive assignment without any checking: in the case of linked
-% props it is applied to individual
-% pieces of the linked prop, which are typically not yet defined.
-% Debugging the scope of the variable is done at a higher level by
-% letting \pkg{l3debug} change \cs{prop_put:Nnn} and friends. This
-% allows other \pkg{l3prop} commands to directly call the underlying
-% auxiliary to skip this checking step and avoid getting multiple
-% error messages for the same error.
-% The \meta{code} (empty for |put| and \cs{use_none:nnn} for
-% |put_if_new|) is placed before the assignment in cases where the key
-% is already present, in order to suppress the assignment in the
-% |put_if_new| case.
-% \begin{macrocode}
-\cs_new_protected:Npn \prop_put:Nnn
- { \@@_put:nNNnn { } \cs_set_nopar:Npe }
-\cs_new_protected:Npn \prop_gput:Nnn
- { \@@_put:nNNnn { } \cs_gset_nopar:Npe }
-\cs_new_protected:Npn \prop_put_if_new:Nnn
- { \@@_put:nNNnn \use_none:nnn \cs_set_nopar:Npe }
-\cs_new_protected:Npn \prop_gput_if_new:Nnn
- { \@@_put:nNNnn \use_none:nnn \cs_gset_nopar:Npe }
-\cs_generate_variant:Nn \prop_put:Nnn
- {
- NnV , Nnv , Nne , NV , NVV , NVv , NVe ,
- Nv , NvV , Nvv , Nve , Ne , NeV , Nev , Nee
- }
-\cs_generate_variant:Nn \prop_put:Nnn
- { Nno , No , Noo , Nnx , NVx , NxV , Nxx }
-\cs_generate_variant:Nn \prop_put:Nnn
- {
- c , cnV , cnv , cne , cV , cVV , cVv , cVe ,
- cv , cvV , cvv , cve , ce , ceV , cev , cee
- }
-\cs_generate_variant:Nn \prop_put:Nnn
- { cno , co , coo , cnx , cVx , cxV , cxx }
-\cs_generate_variant:Nn \prop_gput:Nnn
- {
- NnV , Nnv , Nne , NV , NVV , NVv , NVe ,
- Nv , NvV , Nvv , Nve , Ne , NeV , Nev , Nee
- }
-\cs_generate_variant:Nn \prop_gput:Nnn
- { Nno , No , Noo , Nnx , NVx , NxV , Nxx }
-\cs_generate_variant:Nn \prop_gput:Nnn
- {
- c , cnV , cnv , cne , cV , cVV , cVv , cVe ,
- cv , cvV , cvv , cve , ce , ceV , cev , cee
- }
-\cs_generate_variant:Nn \prop_gput:Nnn
- { cno , co , coo , cnx , cVx , cxV , cxx }
-\cs_generate_variant:Nn \prop_put_if_new:Nnn
- { NnV , NV , cnV , cV }
-\cs_generate_variant:Nn \prop_gput_if_new:Nnn
- { NnV , NV , cnV , cV }
-% \end{macrocode}
-% Since the true branch of \cs{@@_split:NnTFn} is used as the
-% replacement text of an internal macro, and since the \meta{key} and
-% new \meta{value} may contain arbitrary tokens, it is not safe to
-% include them in the argument of \cs{@@_split:NnTFn}. We thus start
-% by storing in \cs{l_@@_internal_tl} tokens which (after
-% \texttt{x}-expansion) encode the key--value pair. This variable can
-% safely be used in \cs{@@_split:NnTFn}. For a flat prop, if the
-% \meta{key} was absent, append the new key--value to the list;
-% otherwise concatenate the extracts |##2| and |##4| with the new
-% key--value pair \cs{l_@@_internal_tl}. The updated entry is placed
-% at the same spot as the original \meta{key} in the property list,
-% preserving the order of entries. For a linked prop, call
-% \cs{@@_put_linked:wnNN}, which constructs the control sequence in
-% which we will place the new value. If it matches \cs{scan_stop:}
-% then the key was not yet there and we add it using
-% \cs{@@_put_linked_new:w}, otherwise it was already there and we use
-% \cs{@@_put_linked_old:w}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_put:nNNnn #1#2#3#4#5
- {
- \tl_set:Nn \l_@@_internal_tl
- {
- \exp_not:N \@@_pair:wn \tl_to_str:n {#4}
- \s_@@ { \exp_not:n {#5} }
- }
- \@@_split:NnTFn #3 {#4}
- {
- #1 #2 #3
- {
- \s_@@ \@@_chk:w \exp_not:n {##1}
- \l_@@_internal_tl \exp_not:n {##3}
- }
- }
- { #2 #3 { \exp_not:o {#3} \l_@@_internal_tl } }
- { \exp_after:wN \@@_put_linked:wnnN #3 {#4} {#1} #2 }
- }
-\cs_new_protected:Npn \@@_put_linked:wnnN
- \@@_flatten:w #1 \s_@@ #2#3#4
- {
- \exp_after:wN \@@_put_linked:NNnN
- \cs:w @@ ~ #2 ~ \tl_to_str:n {#4} \cs_end:
- #1
- }
-\cs_new_protected:Npn \@@_put_linked:NNnN #1#2#3#4
- {
- \if_meaning:w \scan_stop: #1
- \exp_after:wN \@@_put_linked_new:w #2 #1 #2 #4
- \else:
- \exp_after:wN \@@_put_linked_old:w #1 { #3 #4 #1 }
- \fi:
- }
-% \end{macrocode}
-% To add a new entry, \cs{@@_put_linked_new:w} receives the expansion
-% of the end-pointer, namely \cs{use_none:n} \meta{last key pointer},
-% followed by the new key pointer~|#2|, the end pointer~|#3|, and an
-% assignment function~|#4|. Set up the doubly-linked list in the
-% order |#1|, |#2|, |#3|, placing the key--value pair
-% \cs{l_@@_internal_tl} in~|#2|. To replace an old entry,
-% \cs{@@_put_linked_old:w} receives the expansion of that entry, and
-% it reassigns it (|#5|) using the assignment~|#6|, by simply
-% replacing the payload |#2| \cs{s_@@} |#3| by \cs{l_@@_internal_tl}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_put_linked_new:w
- \use_none:n #1#2#3#4
- {
- #4 #1
- {
- \exp_after:wN \@@_pop_linked_prev:w #1
- \exp_not:N #2
- }
- #4 #2
- {
- \exp_not:n { \use_none:n #1 }
- \l_@@_internal_tl
- \exp_not:N #3
- }
- #4 #3 { \exp_not:n { \use_none:n #2 } }
- }
-\cs_new_protected:Npn \@@_put_linked_old:w
- \use_none:n #1#2 \s_@@ #3#4#5
- {
- #5
- {
- \exp_not:n { \use_none:n #1 }
- \l_@@_internal_tl
- \exp_not:N #4
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Property list conditionals}
-%
-% \begin{macro}[pTF, tested = m3prop004]{\prop_if_exist:N, \prop_if_exist:c}
-% Copies of the \texttt{cs} functions defined in \pkg{l3basics}.
-% \begin{macrocode}
-\prg_new_eq_conditional:NNn \prop_if_exist:N \cs_if_exist:N
- { TF , T , F , p }
-\prg_new_eq_conditional:NNn \prop_if_exist:c \cs_if_exist:c
- { TF , T , F , p }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[pTF, tested = m3prop003]{\prop_if_empty:N, \prop_if_empty:c}
-% \begin{macro}{\@@_if_empty_return:w}
-% A flat property list is empty if it matches \cs{c_empty_prop}. A linked
-% property list is empty if its second token (the end pointer) and last token
-% (the first key pointer) are equal. There cannot be false positives because
-% the end pointer takes the form \cs{use_none:n} \meta{pointer} while the
-% other pointers have more elaborate structure. The subtle code branch here
-% is when a non-empty flat property list is given: then \cs{@@_if_empty:w}
-% reads the whole property list as~|#1| and |#2|, |#3|, |#4| are |2|, |3|,
-% |4|, respectively.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \prop_if_empty:N #1 { p , T , F , TF }
- {
- \if_meaning:w #1 \c_empty_prop
- \prg_return_true:
- \else:
- \exp_after:wN \@@_if_empty_return:w #1
- \@@_flatten:w 2 \s_@@ 34 \s_@@_stop
- \fi:
- }
-\cs_new:Npn \@@_if_empty_return:w
- #1 \@@_flatten:w #2 \s_@@ #3#4#5 \s_@@_stop
- {
- \if_meaning:w #2 #4
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-\prg_generate_conditional_variant:Nnn \prop_if_empty:N
- { c } { p , T , F , TF }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[pTF, tested = m3prop003]
-% {
-% \prop_if_in:Nn, \prop_if_in:NV, \prop_if_in:Ne, \prop_if_in:No,
-% \prop_if_in:cn, \prop_if_in:cV, \prop_if_in:ce, \prop_if_in:co
-% }
-% \begin{macro}[EXP]{\@@_if_in_flat:nnn}
-% For a linked prop, use \cs{@@_get_linked:w} to look up whether the control
-% sequence constructed from the prefix and the sought-after key exists; this
-% auxiliary calls \cs{use_none:n} \Arg{value} \cs{prg_return_true:} if the key
-% is found, and otherwise \cs{prg_return_false:}. For a flat prop, testing
-% expandably if a key is there requires to go through the key--value pairs one
-% by one. This is rather slow, and a faster test would be
-% \begin{verbatim}
-% \prg_new_protected_conditional:Npnn \prop_if_in:Nn #1 #2
-% {
-% \@@_split:NnTFn #1 {#2}
-% { \prg_return_true: }
-% { \prg_return_false: }
-% { ... }
-% }
-% \end{verbatim}
-% but \cs{@@_split:NnTFn} is non-expandable.
-% Instead, we use \cs{prop_map_tokens:Nn} to compare the search key to
-% each key in turn using \cs{str_if_eq:ee}, which is expandable.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \prop_if_in:Nn #1#2 { p , T , F , TF }
- {
- \@@_if_flat:NTF #1
- {
- \exp_after:wN \prop_map_tokens:Nn \exp_after:wN #1
- {
- \exp_after:wN \@@_if_in_flat:nnn
- \exp_after:wN { \tl_to_str:n {#2} }
- }
- \prg_return_false:
- }
- {
- \exp_after:wN \@@_get_linked:w #1 {#2}
- \use_none:n \prg_return_true: \prg_return_false:
- }
- }
-\cs_new:Npn \@@_if_in_flat:nnn #1#2#3
- {
- \str_if_eq:eeT {#1} {#2}
- { \prop_map_break:n { \use_i:nn \prg_return_true: } }
- }
-\prg_generate_conditional_variant:Nnn \prop_if_in:Nn
- { NV , Ne , No , c , cV , ce , co } { p , T , F , TF }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Mapping over property lists}
-%
-% \begin{macro}[tested = m3prop003]
-% {
-% \prop_map_function:NN, \prop_map_function:Nc,
-% \prop_map_function:cN, \prop_map_function:cc
-% }
-% \begin{macro}{\@@_map_function:Nw}
-% We first |f|-expand to flatten~|#1| in case it was a linked list.
-% The \cs{use_i:nnn} removes the leading \cs{s_@@} \cs{@@_chk:w} of
-% the flattened prop.
-% The even-numbered arguments of \cs{@@_map_function:Nw} are keys,
-% hence have string catcodes, except at the end where they are
-% \cs{fi:} \cs{prop_map_break:}. The \cs{fi:} ends the \cs{if_false:}
-% |#|\meta{even} \cs{fi:} construction and we jump out of the loop.
-% No need for any quark test.
-% \begin{macrocode}
-\cs_new:Npn \prop_map_function:NN #1#2
- {
- \exp_last_unbraced:Nnf
- \use_i:nnn { \@@_map_function:Nw #2 } #1
- \@@_pair:wn \fi: \prop_map_break: \s_@@ { }
- \@@_pair:wn \fi: \prop_map_break: \s_@@ { }
- \@@_pair:wn \fi: \prop_map_break: \s_@@ { }
- \@@_pair:wn \fi: \prop_map_break: \s_@@ { }
- \prg_break_point:Nn \prop_map_break: { }
- }
-\cs_new:Npn \@@_map_function:Nw #1
- \@@_pair:wn #2 \s_@@ #3
- \@@_pair:wn #4 \s_@@ #5
- \@@_pair:wn #6 \s_@@ #7
- \@@_pair:wn #8 \s_@@ #9
- {
- \if_false: #2 \fi: #1 {#2} {#3}
- \if_false: #4 \fi: #1 {#4} {#5}
- \if_false: #6 \fi: #1 {#6} {#7}
- \if_false: #8 \fi: #1 {#8} {#9}
- \@@_map_function:Nw #1
- }
-\cs_generate_variant:Nn \prop_map_function:NN { Nc , c , cc }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[tested = m3prop003]{\prop_map_inline:Nn, \prop_map_inline:cn}
-% Mapping in line requires a nesting level counter. Store the current
-% definition of \cs{@@_pair:wn}, and define it anew. At the end of
-% the loop, revert to the earlier definition. Note that besides pairs
-% of the form \cs{@@_pair:wn} \meta{key} \cs{s_@@} \Arg{value}, there
-% are a leading and a trailing tokens, but both are equal to
-% \cs{scan_stop:}, hence have no effect in such inline mapping.
-% Such \cs{scan_stop:} could have affected ligatures if they appeared
-% during the mapping.
-% \begin{macrocode}
-\cs_new_protected:Npn \prop_map_inline:Nn #1#2
- {
- \cs_gset_eq:cN
- { @@_map_ \int_use:N \g__kernel_prg_map_int :wn } \@@_pair:wn
- \int_gincr:N \g__kernel_prg_map_int
- \cs_gset_protected:Npn \@@_pair:wn ##1 \s_@@ ##2 {#2}
- \exp_last_unbraced:Nf \use_none:nn #1
- \prg_break_point:Nn \prop_map_break:
- {
- \int_gdecr:N \g__kernel_prg_map_int
- \cs_gset_eq:Nc \@@_pair:wn
- { @@_map_ \int_use:N \g__kernel_prg_map_int :wn }
- }
- }
-\cs_generate_variant:Nn \prop_map_inline:Nn { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\prop_map_tokens:Nn, \prop_map_tokens:cn}
-% \begin{macro}{\@@_map_tokens:nw}
-% The mapping is very similar to \cs{prop_map_function:NN}.
-% The odd construction
-% |\use:n {#1}| allows |#1| to contain any token without interfering
-% with \cs{prop_map_break:}. The loop stops when the \meta{key}
-% between \cs{@@_pair:wn} and \cs{s_@@} is \cs{fi:}
-% \cs{prop_map_break:} instead of being a string.
-% \begin{macrocode}
-\cs_new:Npn \prop_map_tokens:Nn #1#2
- {
- \exp_last_unbraced:Nnf
- \use_i:nnn { \@@_map_tokens:nw {#2} } #1
- \@@_pair:wn \fi: \prop_map_break: \s_@@ { }
- \@@_pair:wn \fi: \prop_map_break: \s_@@ { }
- \@@_pair:wn \fi: \prop_map_break: \s_@@ { }
- \@@_pair:wn \fi: \prop_map_break: \s_@@ { }
- \prg_break_point:Nn \prop_map_break: { }
- }
-\cs_new:Npn \@@_map_tokens:nw #1
- \@@_pair:wn #2 \s_@@ #3
- \@@_pair:wn #4 \s_@@ #5
- \@@_pair:wn #6 \s_@@ #7
- \@@_pair:wn #8 \s_@@ #9
- {
- \if_false: #2 \fi: \use:n {#1} {#2} {#3}
- \if_false: #4 \fi: \use:n {#1} {#4} {#5}
- \if_false: #6 \fi: \use:n {#1} {#6} {#7}
- \if_false: #8 \fi: \use:n {#1} {#8} {#9}
- \@@_map_tokens:nw {#1}
- }
-\cs_generate_variant:Nn \prop_map_tokens:Nn { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-%
-% \begin{macro}[tested = m3prop003]{\prop_map_break:}
-% \begin{macro}[tested = m3prop003]{\prop_map_break:n}
-% The break statements are based on the general \cs{prg_map_break:Nn}.
-% \begin{macrocode}
-\cs_new:Npn \prop_map_break:
- { \prg_map_break:Nn \prop_map_break: { } }
-\cs_new:Npn \prop_map_break:n
- { \prg_map_break:Nn \prop_map_break: }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Uses of mapping over property lists}
-%
-% \begin{macro}[EXP]{\prop_count:N, \prop_count:c}
-% \begin{macro}[EXP]{\@@_count:nn}
-% Counting the key--value pairs in a property list is done using the
-% same approach as for other count functions: turn each entry into a
-% \texttt{+1} then use integer evaluation to actually do the
-% mathematics.
-% \begin{macrocode}
-\cs_new:Npn \prop_count:N #1
- {
- \int_eval:n
- {
- 0
- \prop_map_function:NN #1 \@@_count:nn
- }
- }
-\cs_new:Npn \@@_count:nn #1#2 { + 1 }
-\cs_generate_variant:Nn \prop_count:N { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\prop_to_keyval:N}
-% \begin{macro}[EXP]
-% {\@@_to_keyval_exp_after:wN, \@@_to_keyval:nn, \@@_to_keyval:nnw}
-% Each property name and value pair will be returned in the form
-% \verb*| |\marg{name}\verb*|= |\marg{value}. As one of the main use cases for
-% this macro is to pass the \meta{property list} on to a key--value parser, we
-% have to make sure that the behaviour is as good as possible. Using a space
-% before the opening brace we get the correct brace stripping behaviour for
-% most of the key--value parsers available in \LaTeX{}.
-% Iterate over the
-% \meta{property list} and remove the leading comma afterwards. Only the value
-% has to be protected in \cs{__kernel_exp_not:w} as the property name is
-% always a string. After the loop the leading comma is removed by
-% \cs{use_none:n} and afterwards \cs{__kernel_exp_not:w} eventually finds the
-% opening brace of its argument.
-% \begin{macrocode}
-\cs_new:Npn \prop_to_keyval:N #1
- {
- \__kernel_exp_not:w
- \prop_if_empty:NTF #1
- { {} }
- {
- \exp_after:wN \exp_after:wN \exp_after:wN
- {
- \tex_expanded:D
- {
- \exp_not:N \use_none:n
- \prop_map_function:NN #1 \@@_to_keyval:nn
- }
- }
- }
- }
-\cs_new:Npn \@@_to_keyval:nn #1#2
- { , ~ {#1} =~ { \__kernel_exp_not:w {#2} } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Viewing property lists}
-%
-% \begin{macro}[tested = m3show001]
-% {\prop_show:N, \prop_show:c, \prop_log:N, \prop_log:c}
-% \begin{macro}{\@@_show:NN, \@@_show_finally:NNn, \@@_show_prepare:w, \@@_show_loop:NNw, \@@_show_bad_name:NNN, \@@_show_end:NNN, \@@_show_loop_key:wNNN}
-% \begin{macro}[rEXP]{\@@_show_flat:w, \@@_show_linked:w}
-% Experience shows one source of problems is very hard to debug: when
-% a data structure such as a |seq| or~|prop| gets corrupted. In the
-% past, \cs{prop_show:N} would in some cases happily show items of
-% such a |prop|, even though other more demanding \pkg{l3prop}
-% functions would choke. It is thus best to make \cs{prop_show:N}
-% check very thoroughly the structure and flag issues, even though
-% that is very painful for linked props. Throughout the code below,
-% we strive to remain as safe as possible, but in the explanations we
-% only state what the arguments are when the prop is correctly formed,
-% rather than saying at every step that various arguments can be
-% arbitrary junk, made safe by using \cs{tl_to_str:n} generously.
-%
-% The general \cs{__kernel_chk_tl_type:NnnT} checks that its first
-% argument is a token list, and if it is, then it \texttt{e}-expands
-% its second argument and compares with the contents of its first
-% argument. Thus, within this \texttt{e}-expansion it is safe to use
-% \cs{@@_if_flat:NTF} to check if the prop is flat or linked. In the
-% flat case we simply reconstruct the expected structure using
-% \cs{@@_show_flat:w}, which loops through the prop and correctly
-% turns all keys to strings for instance. In the linked case, we use
-% \cs{@@_show_linked:w}, which ensures the form \cs{@@_flatten:w}
-% \cs[no-index]{@@~\meta{prefix}} \cs{s_@@} \Arg{prefix} \meta{rest},
-% where \meta{prefix} is made into a string and \meta{rest} cannot be
-% a brace group or multiple tokens since \cs{@@_show_linked:w} would
-% in such cases give a different result from the original token list.
-% \begin{macrocode}
-\cs_new_protected:Npn \prop_show:N { \@@_show:NN \msg_show:nneeee }
-\cs_generate_variant:Nn \prop_show:N { c }
-\cs_new_protected:Npn \prop_log:N { \@@_show:NN \msg_log:nneeee }
-\cs_generate_variant:Nn \prop_log:N { c }
-\cs_new_protected:Npn \@@_show:NN #1#2
- {
- \__kernel_chk_tl_type:NnnT #2 { prop }
- {
- \@@_if_flat:NTF #2
- {
- \s_@@ \@@_chk:w
- \exp_after:wN \@@_show_flat:w #2
- \s_@@ { }
- \@@_pair:wn \q_@@_recursion_tail \s_@@ { }
- \q_@@_recursion_stop
- }
- { \exp_after:wN \@@_show_linked:w #2 \s_@@ ! ? \s_@@_stop }
- }
- {
- \@@_if_flat:NTF #2
- { \@@_show_finally:NNn #1 #2 { flat } }
- {
- \tl_set:Nn \l_@@_internal_tl { #1 #2 }
- \exp_after:wN \@@_show_prepare:w #2 #2
- }
- }
- }
-\cs_new:Npn \@@_show_flat:w #1 \@@_pair:wn #2 \s_@@ #3
- {
- \@@_if_recursion_tail_stop:n {#2}
- \exp_not:N \@@_pair:wn \tl_to_str:n {#2} \s_@@ \exp_not:n { {#3} }
- \@@_show_flat:w
- }
-\cs_new:Npn \@@_show_linked:w #1 \s_@@ #2#3#4 \s_@@_stop
- {
- \exp_not:N \@@_flatten:w
- \exp_not:c { @@ ~ \tl_to_str:n {#2} }
- \s_@@ { \tl_to_str:n {#2} }
- \exp_not:n {#3}
- }
-% \end{macrocode}
-% For flat props we are done by using \cs{msg_show:nneeee} or
-% \cs{msg_log:nneeee}. The auxiliary \cs{@@_show_finally:NNn} is
-% eventually also used in the linked case after some more tests. To
-% avoid having to bring along the message function and the property
-% list, we store them into \cs{l_@@_internal_tl}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_show_finally:NNn #1#2#3
- {
- #1 { prop } { show }
- { \token_to_str:N #2 }
- { \prop_map_function:NN #2 \msg_show_item:nn }
- {#3} { }
- }
-% \end{macrocode}
-% For linked props, we now know they have a reasonable form so that we
-% are calling \cs{@@_show_prepare:w} \cs{@@_flatten:w}
-% \cs[no-index]{@@~\meta{prefix}} \cs{s_@@} \Arg{prefix} \meta{token}
-% \meta{property list}, and the task is to loop through the linked
-% list and check integrity. We first set things up: the auxiliary
-% \cs{@@_tmp:w} will be in charge of checking that various tokens
-% start with \cs[no-index]{@@~\meta{prefix}} (in the sense of string
-% representations), and calling one of \cs{@@_show_loop_key:wNNN},
-% \cs{@@_show_end:NNN}, \cs{@@_show_bad_name:NNN}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_show_prepare:w
- \@@_flatten:w #1 \s_@@ #2#3#4
- {
- \use:e
- {
- \cs_set_nopar:Npn \exp_not:N \@@_tmp:w
- ##1 \token_to_str:N #1 ##2 \s_@@_mark ##3 \s_@@_stop
- {
- \exp_not:N \tl_if_empty:nTF {##1}
- {
- \exp_not:N \tl_if_head_is_space:nTF {##2}
- { \exp_not:N \exp_args:Nf \@@_show_loop_key:wNNN }
- { \exp_not:N \tl_if_empty:nTF }
- {##2}
- }
- { \exp_not:N \use_ii:nn }
- \@@_show_end:NNN
- \@@_show_bad_name:NNN
- }
- }
- \exp_last_unbraced:NNNo \@@_show_loop:NNw #1 #4 #4
- }
-% \end{macrocode}
-% The loop will consist of calls to \cs{@@_show_loop:NNw}
-% \cs[no-index]{@@~\meta{prefix}} \meta{token} \meta{expansion}, where
-% \meta{token} is one of the items in the list, specifically the key
-% container for \meta{key$_{i-1}$} (starting at $i=1$ with the
-% property list variable itself), and \meta{expansion} stands for the
-% expansion of that token, which has already been checked, and takes
-% the form \meta{junk} \cs{s_@@} \Arg{value}
-% \cs[no-index]{@@~\meta{prefix}~\meta{key_i}}. Thus, the loop
-% auxiliary receives the prefix command as |#1|, and the $(i-1)$-th
-% and $i$-th key containers as |#2| and~|#5|. Then \cs{@@_tmp:w}
-% checks that the name of the $i$-th key container is valid.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_show_loop:NNw #1#2 #3 \s_@@ #4#5
- {
- \exp_last_two_unbraced:Noo \@@_tmp:w
- { \token_to_str:N #5 \s_@@_mark }
- { \token_to_str:N #1 \s_@@_mark \s_@@_stop }
- #1 #2 #5
- }
-% \end{macrocode}
-% If the $i$-th key container has the wrong name we get
-% \cs{@@_show_bad_name:NNN} \cs[no-index]{@@~\meta{prefix}}
-% \meta{previous container} \meta{current container with bad name}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_show_bad_name:NNN #1#2#3
- {
- \msg_error:nneeee { prop } { bad-link }
- { \tl_tail:N \l_@@_internal_tl }
- { \token_to_str:N #2 }
- { \token_to_str:N #3 }
- { \token_to_str:N #1 }
- }
-% \end{macrocode}
-% If the $i$-th key container has the name
-% \cs[no-index]{@@~\meta{prefix}} (without space), it is the trailing
-% one. We check that it is the right kind of macro to be a token
-% list, and that it has the right contents \cs{use_none:n}
-% \meta{previous container}. If so, we are done checking everything,
-% and we display the property list using the message function and
-% property list name stored in \cs{l_@@_internal_tl}. Note that we
-% also use this \cs{l_@@_internal_tl} in the type argument of
-% \cs{__kernel_chk_tl_type:NnnT}, to build up the name
-% \enquote{\meta{property list} prop entry} used in error messages.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_show_end:NNN #1#2#3
- {
- \__kernel_chk_tl_type:NnnT #3
- { \tl_tail:N \l_@@_internal_tl prop~entry }
- { \exp_not:n { \use_none:n #2 } }
- {
- \exp_after:wN \@@_show_finally:NNn
- \l_@@_internal_tl { linked }
- }
- }
-% \end{macrocode}
-% If the $i$-th container has a name \cs[no-index]{@@~\meta{prefix}
-% \meta{key}} (with a space before the key), then we have a call to
-% \cs{@@_show_loop_key:wNNN} \Arg{key} \meta{junk_1} \meta{junk_2}
-% \cs[no-index]{@@~\meta{prefix}} \meta{previous container}
-% \meta{current container}. (with an \texttt{f}-expansion to eliminate
-% the space). The first argument is the \meta{key} without a leading
-% space, thanks to a judicious \texttt{f}-expansion earlier on. We
-% check that the \meta{current container} is a token list with the
-% expected structure \cs{use_none:n} \meta{previous container}
-% \cs{@@_pair:wn} \meta{string} \cs{s_@@} \Arg{anything} \meta{single
-% token}. The auxiliary \cs{@@_show_flat:w} is reused to produce the
-% \cs{@@_pair:wn} part, and the last token is produced by
-% \cs{tl_item:Nn} (we don't waste a specialized auxiliary to speed
-% that up). If the check succeed, move on to the next item.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_show_loop_key:wNNN #1#2#3#4#5#6
- {
- \__kernel_chk_tl_type:NnnT #6
- { \tl_tail:N \l_@@_internal_tl prop~entry }
- {
- \exp_not:n { \use_none:n #5 }
- \exp_after:wN \@@_show_flat:w #6 \s_@@ { }
- \@@_pair:wn \q_@@_recursion_tail \s_@@ { }
- \q_@@_recursion_stop
- \tl_item:Nn #6 { -1 }
- }
- { \exp_last_unbraced:NNNo \@@_show_loop:NNw #4 #6 #6 }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3quark.dtx b/macros/latex/contrib/l3kernel/l3quark.dtx
deleted file mode 100644
index 000063bc00..0000000000
--- a/macros/latex/contrib/l3kernel/l3quark.dtx
+++ /dev/null
@@ -1,1008 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3quark.dtx
-%
-% Copyright (C) 1990-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3quark} module\\ Quarks and scan marks^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% Two special types of constants in \LaTeX3 are \enquote{quarks} and
-% \enquote{scan marks}. By convention all constants of type quark
-% start out with |\q_|, and scan marks start with |\s_|.
-%
-% \section{Quarks}
-%
-% Quarks are control sequences (and in fact, token lists) that expand
-% to themselves and should
-% therefore \emph{never} be executed directly in the code.
-% This would result in an endless loop!
-%
-% They are meant to be used as delimiter in weird functions, the most
-% common use case being the `stop token' (\emph{i.e.}~\cs{q_stop}).
-% For example, when writing a macro to parse a user-defined date
-% \begin{verbatim}
-% \date_parse:n {19/June/1981}
-% \end{verbatim}
-% one might write a command such as
-% \begin{verbatim}
-% \cs_new:Npn \date_parse:n #1 { \date_parse_aux:w #1 \q_stop }
-% \cs_new:Npn \date_parse_aux:w #1 / #2 / #3 \q_stop
-% { <do something with the date> }
-% \end{verbatim}
-%
-% Quarks are sometimes also used as error return values for functions
-% that receive erroneous input.
-% For example, in the function \cs{prop_get:NnN} to retrieve a value stored
-% in some key of a property list, if the key does not exist then the return value
-% is the quark \cs{q_no_value}.
-% As mentioned above, such quarks are extremely fragile and it is imperative
-% when using such functions that code is carefully written to check for
-% pathological cases to avoid leakage of a quark into an uncontrolled
-% environment.
-%
-% Quarks also permit the
-% following ingenious trick when parsing tokens:
-% when you pick up a token in a temporary variable
-% and you want to know whether you have picked up a particular quark,
-% all you have to do is compare the temporary variable to the quark using
-% \cs{tl_if_eq:NNTF}. A set of special quark testing functions is set up
-% below. All the quark testing functions are expandable although the
-% ones testing only single tokens are much faster.
-%
-% \section{Defining quarks}
-%
-% \begin{function}{\quark_new:N}
-% \begin{syntax}
-% \cs{quark_new:N} \meta{quark}
-% \end{syntax}
-% Creates a new \meta{quark} which expands only to \meta{quark}.
-% The \meta{quark} is defined globally, and an error message
-% is raised if the name was already taken.
-% \end{function}
-%
-% \begin{variable}{\q_stop}
-% Used as a marker for delimited arguments, such as
-% \begin{verbatim}
-% \cs_set:Npn \tmp:w #1#2 \q_stop {#1}
-% \end{verbatim}
-% \end{variable}
-%
-% \begin{variable}{\q_mark}
-% Used as a marker for delimited arguments when \cs{q_stop} is
-% already in use.
-% \end{variable}
-%
-% \begin{variable}{\q_nil}
-% Quark to mark a null value in structured variables or functions. Used
-% as an end delimiter when this may itself need to be tested
-% (in contrast to \cs{q_stop}, which is only ever used as a delimiter).
-% \end{variable}
-%
-% \begin{variable}{\q_no_value}
-% A canonical value for a missing value, when one is requested from
-% a data structure. This is therefore used as a \enquote{return} value
-% by functions such as \cs{prop_get:NnN} if there is no data to
-% return.
-% \end{variable}
-%
-% \section{Quark tests}
-%
-% The method used to define quarks means that the single token (\texttt{N})
-% tests are faster than the multi-token (\texttt{n}) tests. The latter
-% should therefore only be used when the argument can definitely take
-% more than a single token.
-%
-% \begin{function}[EXP,pTF]{\quark_if_nil:N}
-% \begin{syntax}
-% \cs{quark_if_nil_p:N} \meta{token}
-% \cs{quark_if_nil:NTF} \meta{token} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the \meta{token} is equal to \cs{q_nil}.
-% \end{function}
-%
-% \begin{function}[EXP,pTF]{\quark_if_nil:n, \quark_if_nil:o, \quark_if_nil:V}
-% \begin{syntax}
-% \cs{quark_if_nil_p:n} \Arg{token list} \\
-% \cs{quark_if_nil:nTF} \Arg{token list} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the \meta{token list} contains only \cs{q_nil} (distinct
-% from \meta{token list} being empty or containing \cs{q_nil} plus one
-% or more other tokens).
-% \end{function}
-%
-% \begin{function}[EXP,pTF]{\quark_if_no_value:N, \quark_if_no_value:c}
-% \begin{syntax}
-% \cs{quark_if_no_value_p:N} \meta{token} \\
-% \cs{quark_if_no_value:NTF} \meta{token} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the \meta{token} is equal to \cs{q_no_value}.
-% \end{function}
-%
-% \begin{function}[EXP,pTF]{\quark_if_no_value:n}
-% \begin{syntax}
-% \cs{quark_if_no_value_p:n} \Arg{token list} \\
-% \cs{quark_if_no_value:nTF} \Arg{token list} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the \meta{token list} contains only \cs{q_no_value}
-% (distinct from \meta{token list} being empty or containing
-% \cs{q_no_value} plus one or more other tokens).
-% \end{function}
-%
-% \section{Recursion}
-%
-% This module provides a uniform interface to intercepting and
-% terminating loops as when one is doing tail recursion. The building
-% blocks follow below and an example is shown in
-% Section~\ref{sec:l3quark:quark-example}.
-%
-% \begin{variable}{\q_recursion_tail}
-% This quark is appended to the data structure in question and
-% appears as a real element there. This means it gets any list
-% separators around it.
-% \end{variable}
-%
-% \begin{variable}{\q_recursion_stop}
-% This quark is added \emph{after} the data structure. Its purpose
-% is to make it possible to terminate the recursion at any point
-% easily.
-% \end{variable}
-%
-% \begin{function}[EXP]{\quark_if_recursion_tail_stop:N}
-% \begin{syntax}
-% \cs{quark_if_recursion_tail_stop:N} \meta{token}
-% \end{syntax}
-% Tests if \meta{token} contains only the marker
-% \cs{q_recursion_tail}, and if so uses
-% \cs{use_none_delimit_by_q_recursion_stop:w} to terminate the
-% recursion that this belongs to. The
-% recursion input must include the marker tokens \cs{q_recursion_tail}
-% and \cs{q_recursion_stop} as the last two items.
-% \end{function}
-%
-% \begin{function}[EXP,updated = 2011-09-06]
-% {\quark_if_recursion_tail_stop:n, \quark_if_recursion_tail_stop:o}
-% \begin{syntax}
-% \cs{quark_if_recursion_tail_stop:n} \Arg{token list}
-% \end{syntax}
-% Tests if the \meta{token list} contains only
-% \cs{q_recursion_tail}, and if so uses
-% \cs{use_none_delimit_by_q_recursion_stop:w} to terminate the
-% recursion that this belongs to. The
-% recursion input must include the marker tokens \cs{q_recursion_tail}
-% and \cs{q_recursion_stop} as the last two items.
-% \end{function}
-%
-% \begin{function}[EXP]{\quark_if_recursion_tail_stop_do:Nn}
-% \begin{syntax}
-% \cs{quark_if_recursion_tail_stop_do:Nn} \meta{token} \Arg{insertion}
-% \end{syntax}
-% Tests if \meta{token} contains only the marker
-% \cs{q_recursion_tail}, and if so uses
-% \cs{use_i_delimit_by_q_recursion_stop:w} to terminate the
-% recursion that this belongs to. The
-% recursion input must include the marker tokens \cs{q_recursion_tail}
-% and \cs{q_recursion_stop} as the last two items. The \meta{insertion}
-% code is then added to the input stream after the recursion has
-% ended.
-% \end{function}
-%
-% \begin{function}[EXP,updated = 2011-09-06]
-% {\quark_if_recursion_tail_stop_do:nn, \quark_if_recursion_tail_stop_do:on}
-% \begin{syntax}
-% \cs{quark_if_recursion_tail_stop_do:nn} \Arg{token list} \Arg{insertion}
-% \end{syntax}
-% Tests if the \meta{token list} contains only
-% \cs{q_recursion_tail}, and if so uses
-% \cs{use_i_delimit_by_q_recursion_stop:w} to terminate the
-% recursion that this belongs to. The
-% recursion input must include the marker tokens \cs{q_recursion_tail}
-% and \cs{q_recursion_stop} as the last two items. The \meta{insertion}
-% code is then added to the input stream after the recursion has
-% ended.
-% \end{function}
-%
-%
-% \begin{function}[EXP,added = 2018-04-10]
-% {
-% \quark_if_recursion_tail_break:NN,
-% \quark_if_recursion_tail_break:nN
-% }
-% \begin{syntax}
-% \cs{quark_if_recursion_tail_break:nN} \Arg{token list} \cs[no-index]{\meta{type}_map_break:}
-% \end{syntax}
-% Tests if \meta{token list} contains only \cs{q_recursion_tail}, and
-% if so terminates the recursion using \cs[no-index]{\meta{type}_map_break:}.
-% The recursion end should be marked by \cs{prg_break_point:Nn}
-% \cs[no-index]{\meta{type}_map_break:}.
-% \end{function}
-%
-% \subsection{An example of recursion with quarks}
-% \label{sec:l3quark:quark-example}
-%
-% Quarks are mainly used internally in the \pkg{expl3} code to define
-% recursion functions such as \cs{tl_map_inline:nn} and so on.
-% Here is a small example to demonstrate how to use quarks in this fashion.
-% We shall define a command called |\my_map_dbl:nn| which takes a token list
-% and applies an operation to every \emph{pair} of tokens.
-% For example, |\my_map_dbl:nn {abcd} {[--#1--#2--]~}| would produce
-% \enquote{\ttfamily [--a--b--]~[--c--d--]~}.
-% Using quarks to define such functions simplifies their logic and ensures
-% robustness in many cases.
-%
-%
-% Here's the definition of |\my_map_dbl:nn|.
-% First of all, define the function that does the processing based on the
-% inline function argument |#2|.
-% Then initiate the recursion using an internal function.
-% The token list |#1| is terminated using \cs{q_recursion_tail}, with
-% delimiters according to the type of recursion (here a pair of
-% \cs{q_recursion_tail}), concluding with \cs{q_recursion_stop}.
-% These quarks are used to mark the end of the token list being operated upon.
-%\begin{verbatim}
-% \cs_new:Npn \my_map_dbl:nn #1#2
-% {
-% \cs_set:Npn \__my_map_dbl_fn:nn ##1 ##2 {#2}
-% \__my_map_dbl:nn #1 \q_recursion_tail \q_recursion_tail
-% \q_recursion_stop
-% }
-%\end{verbatim}
-%
-% The definition of the internal recursion function follows.
-% First check if either of the input tokens are the termination quarks.
-% Then, if not, apply the inline function to the two arguments.
-%\begin{verbatim}
-% \cs_new:Nn \__my_map_dbl:nn
-% {
-% \quark_if_recursion_tail_stop:n {#1}
-% \quark_if_recursion_tail_stop:n {#2}
-% \__my_map_dbl_fn:nn {#1} {#2}
-%\end{verbatim}
-% Finally, recurse:
-%\begin{verbatim}
-% \__my_map_dbl:nn
-% }
-%\end{verbatim}
-% Note that contrarily to \LaTeX3 built-in mapping functions, this
-% mapping function cannot be nested, since the second map would overwrite
-% the definition of |\__my_map_dbl_fn:nn|.
-%
-% \section{Scan marks}
-%
-% Scan marks are control sequences set equal to \cs{scan_stop:},
-% hence never expand in an expansion context and are (largely)
-% invisible if they are encountered in a typesetting context.
-%
-% Like quarks, they can be used as delimiters in weird functions
-% and are often safer to use for this purpose.
-% Since they are harmless when executed by \TeX{} in non-expandable
-% contexts, they can be used to mark the end of a set of instructions.
-% This allows to skip to that point if the end of the instructions
-% should not be performed (see \pkg{l3regex}).
-%
-% \begin{function}[added = 2018-04-01]{\scan_new:N}
-% \begin{syntax}
-% \cs{scan_new:N} \meta{scan mark}
-% \end{syntax}
-% Creates a new \meta{scan mark} which is set equal to \cs{scan_stop:}.
-% The \meta{scan mark} is defined globally, and an error message
-% is raised if the name was already taken by another scan mark.
-% \end{function}
-%
-% \begin{variable}[added = 2018-04-01]{\s_stop}
-% Used at the end of a set of instructions, as a marker
-% that can be jumped to using \cs{use_none_delimit_by_s_stop:w}.
-% \end{variable}
-%
-% \begin{function}[EXP,added = 2018-04-01]{\use_none_delimit_by_s_stop:w}
-% \begin{syntax}
-% \cs{use_none_delimit_by_s_stop:w} \meta{tokens} \cs{s_stop}
-% \end{syntax}
-% Removes the \meta{tokens} and \cs{s_stop} from the input stream.
-% This leads to a low-level \TeX{} error if \cs{s_stop} is absent.
-% \end{function}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3quark} implementation}
-%
-% \TestFiles{m3quark001.lvt}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \subsection{Quarks}
-%
-% \begin{macrocode}
-%<@@=quark>
-% \end{macrocode}
-%
-% \begin{macro}{\quark_new:N}
-% \UnitTested
-% Allocate a new quark.
-% \begin{macrocode}
-\cs_new_protected:Npn \quark_new:N #1
- {
- \__kernel_chk_if_free_cs:N #1
- \cs_gset_nopar:Npn #1 {#1}
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\q_nil, \q_mark, \q_no_value, \q_stop}
-% Some \enquote{public} quarks. \cs{q_stop} is an \enquote{end of
-% argument} marker, \cs{q_nil} is a empty value and \cs{q_no_value}
-% marks an empty argument.
-% \begin{macrocode}
-\quark_new:N \q_nil
-\quark_new:N \q_mark
-\quark_new:N \q_no_value
-\quark_new:N \q_stop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\q_recursion_tail, \q_recursion_stop}
-% Quarks for ending recursions. Only ever used there!
-% \cs{q_recursion_tail} is appended to whatever list structure we are
-% doing recursion on, meaning it is added as a proper list item with
-% whatever list separator is in use. \cs{q_recursion_stop} is placed
-% directly after the list.
-% \begin{macrocode}
-\quark_new:N \q_recursion_tail
-\quark_new:N \q_recursion_stop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\s_@@}
-% Private scan mark used in \pkg{l3quark}. We don't have \pkg{l3scan}
-% yet, so we declare the scan mark here and add it to the scan mark pool
-% later.
-% \begin{macrocode}
-\cs_new_eq:NN \s_@@ \scan_stop:
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\q_@@_nil}
-% Private quark use for some tests.
-% \begin{macrocode}
-\quark_new:N \q_@@_nil
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[EXP]{\quark_if_recursion_tail_stop:N}
-% \UnitTested
-% \begin{macro}[EXP]{\quark_if_recursion_tail_stop_do:Nn}
-% \UnitTested
-% When doing recursions, it is easy to spend a lot of time testing if the
-% end marker has been found. To avoid this, a dedicated end marker is used
-% each time a recursion is set up. Thus if the marker is found everything
-% can be wrapper up and finished off. The simple case is when the test
-% can guarantee that only a single token is being tested. In this case,
-% there is just a dedicated copy of the standard quark test. Both a gobbling
-% version and one inserting end code are provided.
-% \begin{macrocode}
-\cs_new:Npn \quark_if_recursion_tail_stop:N #1
- {
- \if_meaning:w \q_recursion_tail #1
- \exp_after:wN \use_none_delimit_by_q_recursion_stop:w
- \fi:
- }
-\cs_new:Npn \quark_if_recursion_tail_stop_do:Nn #1
- {
- \if_meaning:w \q_recursion_tail #1
- \exp_after:wN \use_i_delimit_by_q_recursion_stop:nw
- \else:
- \exp_after:wN \use_none:n
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {\quark_if_recursion_tail_stop:n, \quark_if_recursion_tail_stop:o}
-% \UnitTested
-% \begin{macro}[EXP]
-% {\quark_if_recursion_tail_stop_do:nn, \quark_if_recursion_tail_stop_do:on}
-% \UnitTested
-% \begin{macro}[EXP]{\@@_if_recursion_tail:w}
-% See \cs{quark_if_nil:nTF} for the details. Expanding
-% \cs{@@_if_recursion_tail:w} once in front of the tokens chosen here
-% gives an empty result if and only if |#1|~is exactly
-% \cs{q_recursion_tail}.
-% \begin{macrocode}
-\cs_new:Npn \quark_if_recursion_tail_stop:n #1
- {
- \tl_if_empty:oTF
- { \@@_if_recursion_tail:w {} #1 {} ?! \q_recursion_tail ??! }
- { \use_none_delimit_by_q_recursion_stop:w }
- { }
- }
-\cs_new:Npn \quark_if_recursion_tail_stop_do:nn #1
- {
- \tl_if_empty:oTF
- { \@@_if_recursion_tail:w {} #1 {} ?! \q_recursion_tail ??! }
- { \use_i_delimit_by_q_recursion_stop:nw }
- { \use_none:n }
- }
-\cs_new:Npn \@@_if_recursion_tail:w
- #1 \q_recursion_tail #2 ? #3 ?! { #1 #2 }
-\cs_generate_variant:Nn \quark_if_recursion_tail_stop:n { o }
-\cs_generate_variant:Nn \quark_if_recursion_tail_stop_do:nn { o }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\quark_if_recursion_tail_break:NN}
-% \begin{macro}[EXP]{\quark_if_recursion_tail_break:nN}
-% Analogues of the \cs[index=quark_if_recursion_tail_stop:n]
-% {quark_if_recursion_tail_stop\ldots{}} functions.
-% Break the mapping using |#2|.
-% \begin{macrocode}
-\cs_new:Npn \quark_if_recursion_tail_break:NN #1#2
- {
- \if_meaning:w \q_recursion_tail #1
- \exp_after:wN #2
- \fi:
- }
-\cs_new:Npn \quark_if_recursion_tail_break:nN #1#2
- {
- \tl_if_empty:oT
- { \@@_if_recursion_tail:w {} #1 {} ?! \q_recursion_tail ??! }
- {#2}
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\quark_if_nil:N}
-% \UnitTested
-% \begin{macro}[pTF]{\quark_if_no_value:N, \quark_if_no_value:c}
-% \UnitTested
-% Here we test if we found a special quark as the first argument.
-% We better start with \cs{q_no_value} as the first argument since
-% the whole thing may otherwise loop if |#1| is wrongly given
-% a string like |aabc| instead of a single token.\footnote{It may
-% still loop in special circumstances however!}
-% \begin{macrocode}
-\prg_new_conditional:Npnn \quark_if_nil:N #1 { p, T , F , TF }
- {
- \if_meaning:w \q_nil #1
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-\prg_new_conditional:Npnn \quark_if_no_value:N #1 { p, T , F , TF }
- {
- \if_meaning:w \q_no_value #1
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-\prg_generate_conditional_variant:Nnn \quark_if_no_value:N
- { c } { p , T , F , TF }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\quark_if_nil:n, \quark_if_nil:V, \quark_if_nil:o}
-% \UnitTested
-% \begin{macro}[pTF]{\quark_if_no_value:n}
-% \UnitTested
-% \begin{macro}{\@@_if_nil:w, \@@_if_no_value:w}
-% \begin{macro}[EXP]{\@@_if_empty_if:o}
-% Let us explain \cs{quark_if_nil:nTF}. Expanding \cs{@@_if_nil:w}
-% once is safe thanks to the trailing \cs{q_nil} |??!|. The result of
-% expanding once is empty if and only if both delimited arguments |#1|
-% and~|#2| are empty and |#3|~is delimited by the last tokens~|?!|.
-% Thanks to the leading~|{}|, the argument~|#1| is empty if and only
-% if the argument of \cs{quark_if_nil:n} starts with \cs{q_nil}. The
-% argument~|#2| is empty if and only if this \cs{q_nil} is followed
-% immediately by~|?| or by~|{}?|, coming either from the trailing
-% tokens in the definition of \cs{quark_if_nil:n}, or from its
-% argument. In the first case, \cs{@@_if_nil:w} is followed by
-% |{}\q_nil| |{}?| |!\q_nil|~|??!|, hence |#3|~is delimited by the
-% final~|?!|, and the test returns \texttt{true} as wanted. In the
-% second case, the result is not empty since the first~|?!| in the
-% definition of \cs{quark_if_nil:n} stop~|#3|. The auxiliary here
-% is the same as \cs{__tl_if_empty_if:o}, with the same comments
-% applying.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \quark_if_nil:n #1 { p, T , F , TF }
- {
- \@@_if_empty_if:o
- { \@@_if_nil:w {} #1 {} ? ! \q_nil ? ? ! }
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-\cs_new:Npn \@@_if_nil:w #1 \q_nil #2 ? #3 ? ! { #1 #2 }
-\prg_new_conditional:Npnn \quark_if_no_value:n #1 { p, T , F , TF }
- {
- \@@_if_empty_if:o
- { \@@_if_no_value:w {} #1 {} ? ! \q_no_value ? ? ! }
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-\cs_new:Npn \@@_if_no_value:w #1 \q_no_value #2 ? #3 ? ! { #1 #2 }
-\prg_generate_conditional_variant:Nnn \quark_if_nil:n
- { V , o } { p , TF , T , F }
-\cs_new:Npn \@@_if_empty_if:o #1
- {
- \exp_after:wN \if_meaning:w \exp_after:wN \q_nil
- \__kernel_tl_to_str:w \exp_after:wN {#1} \q_nil
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\__kernel_quark_new_test:N}
-% The function \cs{__kernel_quark_new_test:N} defines |#1| in a
-% similar way as \cs[no-index]{quark_if_recursion_tail_...} functions
-% (as described below), using
-% \cs[no-index]{q__\meta{namespace}_recursion_tail} as the test quark
-% and \cs[no-index]{q__\meta{namespace}_recursion_stop} as the
-% delimiter quark, where the \meta{namespace} is determined as the
-% first |_|-delimited part in~|#1|.
-%
-% There are six possible function types which this function can define,
-% and which is defined depends on the signature of the function being
-% defined:
-% \begin{description}
-% \def\makelabel#1{\texttt{:#1}~}
-% \item[n] gives an analogue of \cs{quark_if_recursion_tail_stop:n}
-% \item[nn] gives an analogue of \cs{quark_if_recursion_tail_stop_do:nn}
-% \item[nN] gives an analogue of \cs{quark_if_recursion_tail_break:nN}
-% \item[N] gives an analogue of \cs{quark_if_recursion_tail_stop:N}
-% \item[Nn] gives an analogue of \cs{quark_if_recursion_tail_stop_do:Nn}
-% \item[NN] gives an analogue of \cs{quark_if_recursion_tail_break:NN}
-% \end{description}
-% Any other signature causes an error, as does a function without signature.
-%
-% \begin{macro}{\__kernel_quark_new_conditional:Nn}
-% Similar to \cs{__kernel_quark_new_test:N}, but defines quark
-% branching conditionals like \cs{quark_if_nil:nTF} that test for the
-% quark \cs[no-index]{q__\meta{namespace}_\meta{name}}.
-% The \meta{namespace} and \meta{name} are determined from the
-% conditional~|#1|, which must take the rather rigid form
-% \cs[no-index]{__\meta{namespace}_quark_if_\meta{name}:\meta{arg spec}}.
-% There are only two cases for the \meta{arg spec} here:
-% \begin{description}
-% \def\makelabel#1{\texttt{:#1}~}
-% \item[n] gives an analogue of \cs{quark_if_nil:nTF}
-% \item[N] gives an analogue of \cs{quark_if_nil:NTF}
-% \end{description}
-% Any other signature causes an error, as does a function without signature.
-% We use low-level emptiness tests as \pkg{l3tl} is not available yet when these
-% functions are used; thankfully we only care about whether strings
-% are empty so a simple \cs{if_meaning:w} \cs{q_nil} \meta{string}
-% \cs{q_nil} suffices.
-%
-% \begin{macro}{\@@_new_test:NNNn, \@@_new_test:Nccn,
-% \@@_new_test_aux:nnNNnnnn}
-% \begin{macro}{\@@_new_conditional:Nnnn, \@@_new_conditional:Neen}
-% \begin{macrocode}
-\cs_new_protected:Npn \__kernel_quark_new_test:N #1
- { \@@_new_test_aux:Ne #1 { \@@_module_name:N #1 } }
-\cs_new_protected:Npn \@@_new_test_aux:Nn #1 #2
- {
- \if_meaning:w \q_nil #2 \q_nil
- \msg_error:nne { quark } { invalid-function }
- { \token_to_str:N #1 }
- \else:
- \@@_new_test:Nccn #1
- { q__#2_recursion_tail } { q__#2_recursion_stop } { __#2 }
- \fi:
- }
-\cs_generate_variant:Nn \@@_new_test_aux:Nn { Ne }
-\cs_new_protected:Npn \@@_new_test:NNNn #1
- {
- \exp_last_unbraced:Nf \@@_new_test_aux:nnNNnnnn
- { \cs_split_function:N #1 }
- #1 { test }
- }
-\cs_generate_variant:Nn \@@_new_test:NNNn { Ncc }
-\cs_new_protected:Npn \__kernel_quark_new_conditional:Nn #1
- {
- \@@_new_conditional:Neen #1
- { \@@_quark_conditional_name:N #1 }
- { \@@_module_name:N #1 }
- }
-\cs_new_protected:Npn \@@_new_conditional:Nnnn #1#2#3#4
- {
- \if_meaning:w \q_nil #2 \q_nil
- \msg_error:nne { quark } { invalid-function }
- { \token_to_str:N #1 }
- \else:
- \if_meaning:w \q_nil #3 \q_nil
- \msg_error:nne { quark } { invalid-function }
- { \token_to_str:N #1 }
- \else:
- \exp_last_unbraced:Nf \@@_new_test_aux:nnNNnnnn
- { \cs_split_function:N #1 }
- #1 { conditional }
- {#2} {#3} {#4}
- \fi:
- \fi:
- }
-\cs_generate_variant:Nn \@@_new_conditional:Nnnn { Nee }
-\cs_new_protected:Npn \@@_new_test_aux:nnNNnnnn #1 #2 #3 #4 #5
- {
- \cs_if_exist_use:cTF { @@_new_#5_#2:Nnnn } { #4 }
- {
- \msg_error:nnee { quark } { invalid-function }
- { \token_to_str:N #4 } {#2}
- \use_none:nnn
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{
-% \@@_new_test_n:Nnnn, \@@_new_test_nn:Nnnn,
-% \@@_new_test_N:Nnnn, \@@_new_test_Nn:Nnnn,
-% \@@_new_test_NN:Nnnn, \@@_new_test_NN:Nnnn,
-% }
-% These macros implement the six possibilities mentioned above, passing
-% the right arguments to \cs{@@_new_test_aux_do:nNNnnnnNNn},
-% which defines some auxiliaries, and then to
-% \cs{@@_new_test_define_tl:nNnNNn} (|:n(n)| variants) or to
-% \cs{@@_new_test_define_ifx:nNnNNn} (|:N(n)|) which define the
-% main conditionals.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_new_test_n:Nnnn #1 #2 #3 #4
- {
- \@@_new_test_aux_do:nNNnnnnNNn {#4} #2 #3 { none } { } { } { }
- \@@_new_test_define_tl:nNnNNn #1 { }
- }
-\cs_new_protected:Npn \@@_new_test_nn:Nnnn #1 #2 #3 #4
- {
- \@@_new_test_aux_do:nNNnnnnNNn {#4} #2 #3 { i } { n } {##1} {##2}
- \@@_new_test_define_tl:nNnNNn #1 { \use_none:n }
- }
-\cs_new_protected:Npn \@@_new_test_nN:Nnnn #1 #2 #3 #4
- {
- \@@_new_test_aux_do:nNNnnnnNNn {#4} #2 #3 { i } { n } {##1} {##2}
- \@@_new_test_define_break_tl:nNNNNn #1 { }
- }
-\cs_new_protected:Npn \@@_new_test_N:Nnnn #1 #2 #3 #4
- {
- \@@_new_test_aux_do:nNNnnnnNNn {#4} #2 #3 { none } { } { } { }
- \@@_new_test_define_ifx:nNnNNn #1 { }
- }
-\cs_new_protected:Npn \@@_new_test_Nn:Nnnn #1 #2 #3 #4
- {
- \@@_new_test_aux_do:nNNnnnnNNn {#4} #2 #3 { i } { n } {##1} {##2}
- \@@_new_test_define_ifx:nNnNNn #1
- { \else: \exp_after:wN \use_none:n }
- }
-\cs_new_protected:Npn \@@_new_test_NN:Nnnn #1 #2 #3 #4
- {
- \@@_new_test_aux_do:nNNnnnnNNn {#4} #2 #3 { i } { n } {##1} {##2}
- \@@_new_test_define_break_ifx:nNNNNn #1 { }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{
-% \@@_new_test_aux_do:nNNnnnnNNn,
-% \@@_test_define_aux:NNNNnnNNn
-% }
-% \cs{@@_new_test_aux_do:nNNnnnnNNn} makes the control sequence names
-% which will be used by \cs{@@_test_define_aux:NNNNnnNNn}, and then later
-% by \cs{@@_new_test_define_tl:nNnNNn} or
-% \cs{@@_new_test_define_ifx:nNnNNn}. The control sequences defined
-% here are analogous to \cs{@@_if_recursion_tail:w} and to
-% \cs[no-index]{use_(none|i)_delimit_by_q_recursion_stop:(|n)w}.
-%
-% The name is composed by the name-space and the name of the quarks.
-% Suppose \cs{__kernel_quark_new_test:N} was used with:
-% \begin{verbatim}
-% \__kernel_quark_new_test:N \__test_quark_tail:n
-% \end{verbatim}
-% then the first auxiliary will be \cs[no-index]{__test_quark_recursion_tail:w},
-% and the second one will be
-% \cs[no-index]{__test_use_none_delimit_by_q_recursion_stop:w}.
-%
-% Note that the actual quarks are \emph{not} defined here. They should
-% be defined separately using \cs{quark_new:N}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_new_test_aux_do:nNNnnnnNNn #1 #2 #3 #4 #5
- {
- \exp_args:Ncc \@@_test_define_aux:NNNNnnNNn
- { #1 _quark_recursion_tail:w }
- { #1 _use_ #4 _delimit_by_q_recursion_stop: #5 w }
- #2 #3
- }
-\cs_new_protected:Npn \@@_test_define_aux:NNNNnnNNn #1 #2 #3 #4 #5 #6 #7
- {
- \cs_gset:Npn #1 ##1 #3 ##2 ? ##3 ?! { ##1 ##2 }
- \cs_gset:Npn #2 ##1 #6 #4 {#5}
- #7 {##1} #1 #2 #3
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{
-% \@@_new_test_define_tl:nNnNNn,
-% \@@_new_test_define_ifx:nNnNNn
-% }
-% \begin{macro}{
-% \@@_new_test_define_break_tl:nNNNNn,
-% \@@_new_test_define_break_ifx:nNNNNn
-% }
-% Finally, these two macros define the main conditional function using
-% what's been set up before.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_new_test_define_tl:nNnNNn #1 #2 #3 #4 #5 #6
- {
- \cs_new:Npn #5 #1
- {
- \tl_if_empty:oTF
- { #2 {} ##1 {} ?! #4 ??! }
- {#3} {#6}
- }
- }
-\cs_new_protected:Npn \@@_new_test_define_ifx:nNnNNn #1 #2 #3 #4 #5 #6
- {
- \cs_new:Npn #5 #1
- {
- \if_meaning:w #4 ##1
- \exp_after:wN #3
- #6
- \fi:
- }
- }
-\cs_new_protected:Npn \@@_new_test_define_break_tl:nNNNNn #1 #2 #3
- { \@@_new_test_define_tl:nNnNNn {##1##2} #2 {##2} }
-\cs_new_protected:Npn \@@_new_test_define_break_ifx:nNNNNn #1 #2 #3
- { \@@_new_test_define_ifx:nNnNNn {##1##2} #2 {##2} }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{
-% \@@_new_conditional_n:Nnnn,
-% \@@_new_conditional_N:Nnnn,
-% \@@_new_conditional_n_aux:NNNn,
-% \@@_new_conditional_N_aux:NNNn
-% }
-% These macros implement the two possibilities for branching quark
-% conditionals. To avoid constructing without defining the
-% \cs[no-index]{__\meta{type}_if_quark_\meta{name}:w} helper,
-% \texttt{N}-type function accepts a \cs{prg_do_nothing:} as
-% a placeholder.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_new_conditional_n:Nnnn #1 #2 #3
- {
- \exp_args:Ncc \@@_new_conditional_n_aux:NNNn
- { __ #3 _if_quark_ #2 :w } { q__ #3 _ #2 } #1
- }
-\cs_new_protected:Npn \@@_new_conditional_N:Nnnn #1 #2 #3
- {
- \exp_args:NNc \@@_new_conditional_N_aux:NNNn
- \prg_do_nothing: { q__ #3 _ #2 } #1
- }
-\cs_new_protected:Npn \@@_new_conditional_n_aux:NNNn #1 #2 #3 #4
- {
- \cs_gset:Npn #1 ##1 #2 ##2 ? ##3 ?! { ##1##2 }
- \prg_new_conditional:Npnn #3 ##1 {#4}
- {
- \@@_if_empty_if:o { #1 {} ##1 {} ?! #2 ??! }
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
- }
-\cs_new_protected:Npn \@@_new_conditional_N_aux:NNNn #1 #2 #3 #4
- {
- \prg_new_conditional:Npnn #3 ##1 {#4}
- {
- \if_meaning:w #2 ##1
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_module_name:N}
-% \begin{macro}[EXP]{
-% \@@_module_name:w,
-% \@@_module_name_loop:w,
-% \@@_module_name_end:w
-% }
-% \cs{@@_module_name:N} takes a control sequence and returns its
-% \meta{module} name, determined as the first non-empty
-% non-single-character word, separated by |_| or~|:|. These rules
-% give the correct result for public functions
-% \cs[no-index]{\meta{module}_\ldots{}}, private functions
-% \cs[no-index]{__\meta{module}_\ldots{}}, and variables such as
-% \cs[no-index]{l_\meta{module}_\ldots{}}. If no valid module is
-% found the result is an empty string. The approach is to first cut
-% off everything after the (first) |:| if any is present, then
-% repeatedly grab |_|-delimited words until finding one of length at
-% least~$2$ (we use low-level tests as \pkg{l3tl} is not fully
-% available when \cs{__kernel_quark_new_test:N} is first used.
-% If no \meta{module} is found (such as in \cs{::n}) we
-% get the trailing marker \cs{use_none:n} |{}|, which expands to
-% nothing.
-% \begin{macrocode}
-\cs_set:Npn \@@_tmp:w #1#2
- {
- \cs_new:Npn \@@_module_name:N ##1
- {
- \exp_last_unbraced:Nf \@@_module_name:w
- { \cs_to_str:N ##1 } #1 \s_@@
- }
- \cs_new:Npn \@@_module_name:w ##1 #1 ##2 \s_@@
- { \@@_module_name_loop:w ##1 #2 \use_none:n { } #2 \s_@@ }
- \cs_new:Npn \@@_module_name_loop:w ##1 #2
- {
- \use_i_ii:nnn \if_meaning:w \prg_do_nothing:
- ##1 \prg_do_nothing: \prg_do_nothing:
- \exp_after:wN \@@_module_name_loop:w
- \else:
- \@@_module_name_end:w ##1
- \fi:
- }
- \cs_new:Npn \@@_module_name_end:w
- ##1 \fi: ##2 \s_@@ { \fi: ##1 }
- }
-\exp_after:wN \@@_tmp:w \tl_to_str:n { : _ }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_quark_conditional_name:N, \@@_quark_conditional_name:w}
-% \cs{@@_quark_conditional_name:N} determines the quark name that the quark
-% conditional function~|##1| queries, as the part of the function name
-% between |_quark_if_| and the trailing~|:|. Again we define it
-% through \cs{@@_tmp:w}, which receives |:| as |#1| and |_quark_if_|
-% as |#2|. The auxiliary \cs{@@_quark_conditional_name:w} returns the part
-% between the first |_quark_if_| and the next~|:|, and we apply this
-% auxiliary to the function name followed by |:| (in case the function
-% name is lacking a signature), and |_quark_if_:| so that
-% \cs{@@_quark_conditional_name:N} returns an empty string if |_quark_if_| is
-% not present.
-% \begin{macrocode}
-\cs_set:Npn \@@_tmp:w #1 #2 \s_@@
- {
- \cs_new:Npn \@@_quark_conditional_name:N ##1
- {
- \exp_last_unbraced:Nf \@@_quark_conditional_name:w
- { \cs_to_str:N ##1 } #1 #2 #1 \s_@@
- }
- \cs_new:Npn \@@_quark_conditional_name:w
- ##1 #2 ##2 #1 ##3 \s_@@ {##2}
- }
-\exp_after:wN \@@_tmp:w \tl_to_str:n { : _quark_if_ } \s_@@
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Scan marks}
-%
-% \begin{macrocode}
-%<@@=scan>
-% \end{macrocode}
-%
-% \begin{macro}{\scan_new:N}
-% \UnitTested
-% Check whether the variable is already a scan mark,
-% then declare it to be equal to \cs{scan_stop:} globally.
-% \begin{macrocode}
-\cs_new_protected:Npn \scan_new:N #1
- {
- \tl_if_in:NnTF \g_@@_marks_tl { #1 }
- {
- \msg_error:nne { scanmark } { already-defined }
- { \token_to_str:N #1 }
- }
- {
- \tl_gput_right:Nn \g_@@_marks_tl {#1}
- \cs_new_eq:NN #1 \scan_stop:
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\s_stop}
-% \begin{variable}{\g_@@_marks_tl}
-% \UnitTested
-% We only declare one scan mark here, more can be defined
-% by specific modules.
-% Can't use \cs{scan_new:N} yet because \pkg{l3tl} isn't loaded,
-% so define \cs{s_stop} by hand and add it to \cs{g_@@_marks_tl}.
-% We also add the scan marks declared earlier to the pool here.
-% Since they lives in a different namespace, a little \pkg{DocStrip}
-% cheating is necessary.
-% \begin{macrocode}
-\cs_new_eq:NN \s_stop \scan_stop:
-\cs_gset_nopar:Npn \g_@@_marks_tl
- {
- \s_stop
-%<@@=quark>
- \s_@@
-%<@@=cs>
- \s_@@_mark
- \s_@@_stop
-%<@@=scan>
- }
-% \end{macrocode}
-% \end{variable}
-% \end{variable}
-%
-% \begin{macro}[EXP]{\use_none_delimit_by_s_stop:w}
-% \UnitTested
-% Similar to \cs{use_none_delimit_by_q_stop:w}.
-% \begin{macrocode}
-\cs_new:Npn \use_none_delimit_by_s_stop:w #1 \s_stop { }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3regex.dtx b/macros/latex/contrib/l3kernel/l3regex.dtx
deleted file mode 100644
index 395be76907..0000000000
--- a/macros/latex/contrib/l3kernel/l3regex.dtx
+++ /dev/null
@@ -1,8205 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3regex.dtx
-%
-% Copyright (C) 2011-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3regex} module\\ Regular expressions in \TeX{}^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-% \newenvironment{l3regex-syntax}
-% {\begin{itemize}\def\\{\char`\\}\def\makelabel##1{\hss\llap{\ttfamily##1}}}
-% {\end{itemize}}
-%
-% The \pkg{l3regex} module provides regular expression testing,
-% extraction of submatches, splitting, and replacement, all acting
-% on token lists. The syntax of regular expressions is mostly a subset
-% of the \textsc{pcre} syntax (and very close to \textsc{posix}),
-% with some additions
-% due to the fact that \TeX{} manipulates tokens rather than characters.
-% For performance reasons, only a limited set of features are implemented.
-% Notably, back-references are not supported.
-%
-% Let us give a few examples. After
-% \begin{verbatim}
-% \tl_set:Nn \l_my_tl { That~cat. }
-% \regex_replace_once:nnN { at } { is } \l_my_tl
-% \end{verbatim}
-% the token list variable \cs[no-index]{l_my_tl} holds the text
-% \enquote{\texttt{This cat.}}, where the first
-% occurrence of \enquote{\texttt{at}} was replaced
-% by \enquote{\texttt{is}}. A more complicated example is
-% a pattern to emphasize each word and add a comma after it:
-% \begin{verbatim}
-% \regex_replace_all:nnN { \w+ } { \c{emph}\cB\{ \0 \cE\} , } \l_my_tl
-% \end{verbatim}
-% The |\w| sequence represents any \enquote{word} character, and |+|
-% indicates that the |\w| sequence should be repeated as many times as
-% possible (at least once), hence matching a word in the input token
-% list. In the replacement text, |\0| denotes the full match (here, a
-% word). The command |\emph| is inserted using |\c{emph}|, and its
-% argument |\0| is put between braces |\cB\{| and |\cE\}|.
-%
-% If a regular expression is to be used several times,
-% it can be compiled once, and stored in a regex
-% variable using \cs{regex_set:Nn}. For example,
-% \begin{verbatim}
-% \regex_new:N \l_foo_regex
-% \regex_set:Nn \l_foo_regex { \c{begin} \cB. (\c[^BE].*) \cE. }
-% \end{verbatim}
-% stores in \cs[no-index]{l_foo_regex} a regular expression which matches the
-% starting marker for an environment: \cs[no-index]{begin}, followed by a
-% begin-group token (|\cB.|), then any number of tokens which are
-% neither begin-group nor end-group character tokens (|\c[^BE].*|),
-% ending with an end-group token (|\cE.|). As explained in the next
-% section, the parentheses \enquote{capture} the result of |\c[^BE].*|,
-% giving us access to the name of the environment when doing
-% replacements.
-%
-% \section{Syntax of regular expressions}
-%
-% \subsection{Regular expression examples}
-%
-% We start with a few examples, and encourage the reader to apply
-% \cs{regex_show:n} to these regular expressions.
-% \begin{itemize}
-% \item |Cat| matches the word \enquote{Cat} capitalized in this way,
-% but also matches the beginning of the word \enquote{Cattle}: use
-% |\bCat\b| to match a complete word only.
-% \item |[abc]| matches one letter among \enquote{a}, \enquote{b},
-% \enquote{c}; the pattern \verb"(a|b|c)" matches the same three
-% possible letters (but see the discussion of submatches below).
-% \item |[A-Za-z]*| matches any number (due to the quantifier
-% \verb"*") of Latin letters (not accented).
-% \item |\c{[A-Za-z]*}| matches a control sequence made of Latin
-% letters.
-% \item |\_[^\_]*\_| matches an underscore, any number of characters
-% other than underscore, and another underscore; it is equivalent to
-% |\_.*?\_| where |.| matches arbitrary characters and the
-% lazy quantifier |*?| means to match as few characters as
-% possible, thus avoiding matching underscores.
-% \item |[\+\-]?\d+| matches an explicit integer with at most one
-% sign.
-% \item \verb*"[\+\-\ ]*\d+\ *" matches an explicit integer with any
-% number of $+$ and $-$ signs, with spaces allowed except within the
-% mantissa, and surrounded by spaces.
-% \item \verb*"[\+\-\ ]*(\d+|\d*\.\d+)\ *" matches an explicit integer or
-% decimal number; using \verb*"[.,]" instead of \verb*"\." would allow
-% the comma as a decimal marker.
-% \item
-% \verb*"[\+\-\ ]*(\d+|\d*\.\d+)\ *((?i)pt|in|[cem]m|ex|[bs]p|[dn]d|[pcn]c)\ *"
-% \allowbreak matches an explicit dimension with any unit that \TeX{} knows, where
-% \verb*"(?i)" means to treat lowercase and uppercase letters
-% identically.
-% \item \verb*"[\+\-\ ]*((?i)nan|inf|(\d+|\d*\.\d+)(\ *e[\+\-\ ]*\d+)?)\ *"
-% matches an explicit floating point number or the special values
-% \verb*"nan" and \verb*"inf" (with signs and spaces allowed).
-% \item \verb*"[\+\-\ ]*(\d+|\cC.)\ *" matches an explicit integer or
-% control sequence (without checking whether it is an integer
-% variable).
-% \item |\G.*?\K| at the beginning of a regular expression matches and
-% discards (due to |\K|) everything between the end of the previous
-% match (|\G|) and what is matched by the rest of the regular
-% expression; this is useful in \cs{regex_replace_all:nnN} when the
-% goal is to extract matches or submatches in a finer way than with
-% \cs{regex_extract_all:nnN}.
-% \end{itemize}
-% While it is impossible for a regular expression to match only integer
-% expressions, \verb*"[\+\-\(]*\d+\)*([\+\-*/][\+\-\(]*\d+\)*)*" matches among
-% other things all valid integer expressions (made only with explicit
-% integers). One should follow it with further testing.
-%
-% \subsection{Characters in regular expressions}
-%
-% Most characters match exactly themselves,
-% with an arbitrary category code. Some characters are
-% special and must be escaped with a backslash (\emph{e.g.}, |\*|
-% matches a star character). Some escape sequences of
-% the form backslash--letter also have a special meaning
-% (for instance |\d| matches any digit). As a rule,
-% \begin{itemize}
-% \item every alphanumeric character (\texttt{A}--\texttt{Z},
-% \texttt{a}--\texttt{z}, \texttt{0}--\texttt{9}) matches
-% exactly itself, and should not be escaped, because
-% |\A|, |\B|, \ldots{} have special meanings;
-% \item non-alphanumeric printable ascii characters can (and should)
-% always be escaped: many of them have special meanings (\emph{e.g.},
-% use |\(|, |\)|, |\?|, |\.|, |\^|);
-% \item spaces should always be escaped (even in character
-% classes);
-% \item any other character may be escaped or not, without any
-% effect: both versions match exactly that character.
-% \end{itemize}
-% Note that these rules play nicely with the fact that many
-% non-alphanumeric characters are difficult to input into \TeX{}
-% under normal category codes. For instance, |\\abc\%|
-% matches the characters |\abc%| (with arbitrary category codes),
-% but does not match the control sequence |\abc| followed by a
-% percent character. Matching control sequences can be done
-% using the |\c|\Arg{regex} syntax (see below).
-%
-% Any special character which appears at a place where its special
-% behaviour cannot apply matches itself instead (for instance, a
-% quantifier appearing at the beginning of a string), after raising a
-% warning.
-%
-% Characters.
-% \begin{l3regex-syntax}
-% \item[\\x\{hh\ldots{}\}] Character with hex code \texttt{hh\ldots{}}
-% \item[\\xhh] Character with hex code \texttt{hh}.
-% \item[\\a] Alarm (hex 07).
-% \item[\\e] Escape (hex 1B).
-% \item[\\f] Form-feed (hex 0C).
-% \item[\\n] New line (hex 0A).
-% \item[\\r] Carriage return (hex 0D).
-% \item[\\t] Horizontal tab (hex 09).
-% \end{l3regex-syntax}
-%
-% \subsection{Characters classes}
-%
-% Character properties.
-% \begin{l3regex-syntax}
-% \item[.] A single period matches any token.
-% \item[\\d] Any decimal digit.
-% \item[\\h] Any horizontal space character,
-% equivalent to |[\ \^^I]|: space and tab.
-% \item[\\s] Any space character,
-% equivalent to |[\ \^^I\^^J\^^L\^^M]|.
-% \item[\\v] Any vertical space character,
-% equivalent to |[\^^J\^^K\^^L\^^M]|. Note that |\^^K| is a vertical space,
-% but not a space, for compatibility with Perl.
-% \item[\\w] Any word character, \emph{i.e.},
-% alphanumerics and underscore, equivalent to the explicit
-% class |[A-Za-z0-9\_]|.
-% \item[\\D] Any token not matched by |\d|.
-% \item[\\H] Any token not matched by |\h|.
-% \item[\\N] Any token other than the |\n| character (hex 0A).
-% \item[\\S] Any token not matched by |\s|.
-% \item[\\V] Any token not matched by |\v|.
-% \item[\\W] Any token not matched by |\w|.
-% \end{l3regex-syntax}
-% Of those, |.|, |\D|, |\H|, |\N|, |\S|, |\V|, and |\W| match arbitrary
-% control sequences.
-%
-% Character classes match exactly one token in the subject.
-% \begin{l3regex-syntax}
-% \item[{[\ldots{}]}] Positive character class.
-% Matches any of the specified tokens.
-% \item[{[\char`\^\ldots{}]}] Negative character class.
-% Matches any token other than the specified characters.
-% \item[{[x-y]}] Within a character class, this denotes a range (can be
-% used with escaped characters).
-% \item[{[:\meta{name}:]}] Within a character class (one more set of
-% brackets), this denotes the \textsc{posix} character class
-% \meta{name}, which can be \texttt{alnum}, \texttt{alpha},
-% \texttt{ascii}, \texttt{blank}, \texttt{cntrl}, \texttt{digit},
-% \texttt{graph}, \texttt{lower}, \texttt{print}, \texttt{punct},
-% \texttt{space}, \texttt{upper}, \texttt{word}, or \texttt{xdigit}.
-% \item[{[:\char`\^\meta{name}:]}] Negative \textsc{posix} character class.
-% \end{l3regex-syntax}
-% For instance, |[a-oq-z\cC.]| matches any lowercase latin letter
-% except |p|, as well as control sequences (see below for a description
-% of |\c|).
-%
-% In character classes, only |[|, |^|, |-|, |]|, |\| and spaces are
-% special, and should be escaped. Other non-alphanumeric characters can
-% still be escaped without harm. Any escape sequence which matches a
-% single character (|\d|, |\D|, \emph{etc.}) is supported in character
-% classes. If the first character is |^|, then
-% the meaning of the character class is inverted; |^| appearing anywhere
-% else in the range is not special. If the first character (possibly
-% following a leading |^|) is |]| then it does not need to be escaped
-% since ending the range there would make it empty.
-% Ranges of characters
-% can be expressed using |-|, for instance, |[\D 0-5]| and |[^6-9]| are
-% equivalent.
-%
-% \subsection{Structure: alternatives, groups, repetitions}
-%
-% Quantifiers (repetition).
-% \begin{l3regex-syntax}
-% \item[?] $0$ or $1$, greedy.
-% \item[??] $0$ or $1$, lazy.
-% \item[*] $0$ or more, greedy.
-% \item[*?] $0$ or more, lazy.
-% \item[+] $1$ or more, greedy.
-% \item[+?] $1$ or more, lazy.
-% \item[\{$n$\}] Exactly $n$.
-% \item[\{$n,$\}] $n$ or more, greedy.
-% \item[\{$n,$\}?] $n$ or more, lazy.
-% \item[\{$n,m$\}] At least $n$, no more than $m$, greedy.
-% \item[\{$n,m$\}?] At least $n$, no more than $m$, lazy.
-% \end{l3regex-syntax}
-% For greedy quantifiers the regex code will first investigate matches
-% that involve as many repetitions as possible, while for lazy
-% quantifiers it investigates matches with as few repetitions as
-% possible first.
-%
-% Alternation and capturing groups.
-% \begin{l3regex-syntax}
-% \item[A\char`|B\char`|C] Either one of \texttt{A}, \texttt{B},
-% or \texttt{C}, investigating \texttt{A} first.
-% \item[(\ldots{})] Capturing group.
-% \item[(?:\ldots{})] Non-capturing group.
-% \item[(?\char`|\ldots{})] Non-capturing group which resets
-% the group number for capturing groups in each alternative.
-% The following group is numbered with the first unused
-% group number.
-% \end{l3regex-syntax}
-%
-% Capturing groups are a means of extracting information about the
-% match. Parenthesized groups are labelled in the order of their
-% opening parenthesis, starting at $1$. The contents of those groups
-% corresponding to the \enquote{best} match (leftmost longest)
-% can be extracted and stored in a sequence of token lists using for
-% instance \cs{regex_extract_once:nnNTF}.
-%
-% The |\K| escape sequence resets the beginning of the match to the
-% current position in the token list. This only affects what is reported
-% as the full match. For instance,
-% \begin{verbatim}
-% \regex_extract_all:nnN { a \K . } { a123aaxyz } \l_foo_seq
-% \end{verbatim}
-% results in \cs[no-index]{l_foo_seq} containing the items |{1}| and |{a}|: the
-% true matches are |{a1}| and |{aa}|, but they are trimmed by the use of
-% |\K|. The |\K| command does not affect capturing groups: for instance,
-% \begin{verbatim}
-% \regex_extract_once:nnN { (. \K c)+ \d } { acbc3 } \l_foo_seq
-% \end{verbatim}
-% results in \cs[no-index]{l_foo_seq} containing the items |{c3}| and |{bc}|: the
-% true match is |{acbc3}|, with first submatch |{bc}|, but |\K| resets
-% the beginning of the match to the last position where it appears.
-%
-% \subsection{Matching exact tokens}
-%
-% The |\c| escape sequence allows to test the category code of tokens,
-% and match control sequences. Each character category is represented
-% by a single uppercase letter:
-% \begin{itemize}
-% \item |C| for control sequences;
-% \item |B| for begin-group tokens;
-% \item |E| for end-group tokens;
-% \item |M| for math shift;
-% \item |T| for alignment tab tokens;
-% \item |P| for macro parameter tokens;
-% \item |U| for superscript tokens (up);
-% \item |D| for subscript tokens (down);
-% \item |S| for spaces;
-% \item |L| for letters;
-% \item |O| for others; and
-% \item |A| for active characters.
-% \end{itemize}
-% The |\c| escape sequence is used as follows.
-% \begin{l3regex-syntax}
-% \item[\\c\Arg{regex}] A control sequence whose csname matches the
-% \meta{regex}, anchored at the beginning and end, so that |\c{begin}|
-% matches exactly \cs[no-index]{begin}, and nothing else.
-% \item[\\cX] Applies to the next object, which can be a character,
-% escape character sequence such as |\x{0A}|, character class, or
-% group, and forces this object to only match tokens with category
-% |X| (any of |CBEMTPUDSLOA|. For instance, |\cL[A-Z\d]| matches
-% uppercase letters and digits of category code letter, |\cC.|
-% matches any control sequence, and |\cO(abc)| matches |abc| where
-% each character has category other.\footnote{This last example also
-% captures \enquote{\texttt{abc}} as a regex group; to avoid this
-% use a non-capturing group \texttt{\textbackslash cO(?:abc)}.}
-% \item[{\\c[XYZ]}] Applies to the next object, and forces it to only
-% match tokens with category |X|, |Y|, or |Z| (each being any of
-% |CBEMTPUDSLOA|). For instance, |\c[LSO](..)| matches two tokens of
-% category letter, space, or other.
-% \item[{\\c[\char`\^XYZ]}] Applies to the next object and prevents it
-% from matching any token with category |X|, |Y|, or |Z| (each being
-% any of |CBEMTPUDSLOA|). For instance, |\c[^O]\d| matches digits
-% which have any category different from other.
-% \end{l3regex-syntax}
-% The category code tests can be used inside classes; for instance,
-% |[\cO\d \c[LO][A-F]]| matches what \TeX{} considers as hexadecimal
-% digits, namely digits with category other, or uppercase letters from
-% |A| to |F| with category either letter or other. Within a group
-% affected by a category code test, the outer test can be overridden by
-% a nested test: for instance, |\cL(ab\cO\*cd)| matches |ab*cd| where
-% all characters are of category letter, except |*| which has category
-% other.
-%
-% The |\u| escape sequence allows to insert the contents of a token list
-% directly into a regular expression or a replacement, avoiding the need
-% to escape special characters. Namely, |\u|\Arg{var~name} matches
-% the exact contents (both character codes and category codes) of the
-% variable \cs[no-index]{\meta{var~name}},
-% which are obtained by applying \cs{exp_not:v} \Arg{var~name} at the
-% time the regular expression is compiled. Within a |\c{...}|
-% control sequence matching, the |\u| escape sequence only expands its
-% argument once, in effect performing \cs{tl_to_str:v}.
-% Quantifiers are supported.
-%
-% The |\ur| escape sequence allows to insert the contents of a |regex|
-% variable into a larger regular expression. For instance,
-% |A\ur{l_tmpa_regex}D| matches the tokens |A| and |D| separated by
-% something that matches the regular expression
-% \cs[no-index]{l_tmpa_regex}. This behaves as if a non-capturing group
-% were surrounding \cs[no-index]{l_tmpa_regex}, and any group contained
-% in \cs[no-index]{l_tmpa_regex} is converted to a non-capturing group.
-% Quantifiers are supported.
-%
-% For instance, if \cs[no-index]{l_tmpa_regex} has value \verb"B|C",
-% then |A\ur{l_tmpa_regex}D| is equivalent to \verb"A(?:B|C)D" (matching
-% |ABD| or |ACD|) and not to \verb"AB|CD" (matching |AB| or |CD|). To
-% get the latter effect, it is simplest to use \TeX{}'s expansion
-% machinery directly: if \cs[no-index]{l_mymodule_BC_tl} contains
-% \verb"B|C" then the following two lines show the same result:
-% \begin{quote}
-% \cs{regex_show:n} |{ A \u{l_mymodule_BC_tl} D }| \\
-% \cs{regex_show:n} \verb"{ A B | C D }"
-% \end{quote}
-%
-% \subsection{Miscellaneous}
-%
-% Anchors and simple assertions.
-% \begin{l3regex-syntax}
-% \item[\\b] Word boundary: either the previous token is matched by
-% |\w| and the next by |\W|, or the opposite. For this purpose,
-% the ends of the token list are considered as |\W|.
-% \item[\\B] Not a word boundary: between two |\w| tokens
-% or two |\W| tokens (including the boundary).
-% \item[\char`^ \textrm{or} \\A]
-% Start of the subject token list.
-% \item[\char`$\textrm{,} \\Z \textrm{or} \\z] ^^A $
-% End of the subject token list.
-% \item[\\G] Start of the current match. This is only different from |^|
-% in the case of multiple matches: for instance
-% |\regex_count:nnN { \G a } { aaba } \l_tmpa_int| yields $2$, but
-% replacing |\G| by |^| would result in \cs{l_tmpa_int} holding the
-% value $1$.
-% \end{l3regex-syntax}
-%
-% The option |(?i)| makes the match case insensitive (treating
-% \texttt{A}--\texttt{Z} and \texttt{a}--\texttt{z} as equivalent, with
-% no support yet for Unicode case changing). This
-% applies until the end of the group in which it appears, and
-% can be reverted using |(?-i)|. For instance, in
-% \verb"(?i)(a(?-i)b|c)d", the letters |a| and |d| are affected by the
-% |i| option. Characters within ranges and classes are affected
-% individually: |(?i)[\?-B]| is equivalent to |[\?@ABab]|
-% (and differs from the much larger class |[\?-b]|), and
-% |(?i)[^aeiou]| matches any character which is not a vowel.
-% The |i|~option has no effect on |\c{...}|, on |\u{...}|, on character
-% properties, or on character classes, for instance it has no effect at
-% all in |(?i)\u{l_foo_tl}\d\d[[:lower:]]|.
-%
-% \section{Syntax of the replacement text}
-%
-% Most of the features described in regular expressions do not make
-% sense within the replacement text. Backslash introduces various
-% special constructions, described further below:
-% \begin{itemize}
-% \item |\0| is the whole match;
-% \item |\1| is the submatch that was matched by the first (capturing)
-% group |(...)|; similarly for |\2|, \ldots{}, |\9| and
-% |\g{|\meta{number}|}|;
-% \item \verb*|\ | inserts a space (spaces are ignored when not
-% escaped);
-% \item |\a|, |\e|, |\f|, |\n|, |\r|, |\t|, |\xhh|, |\x{hhh}|
-% correspond to single characters as in regular expressions;
-% \item |\c|\Arg{cs~name} inserts a control sequence;
-% \item |\c|\meta{category}\meta{character} (see below);
-% \item |\u|\Arg{tl~var~name} inserts the contents of the
-% \meta{tl~var} (see below).
-% \end{itemize}
-% Characters other than backslash and space are simply inserted in the
-% result (but since the replacement text is first converted to a string,
-% one should also escape characters that are special for \TeX{}, for
-% instance use~|\#|). Non-alphanumeric characters can always be safely
-% escaped with a backslash.
-%
-% For instance,
-% \begin{verbatim}
-% \tl_set:Nn \l_my_tl { Hello,~world! }
-% \regex_replace_all:nnN { ([er]?l|o) . } { (\0--\1) } \l_my_tl
-% \end{verbatim}
-% results in \cs[no-index]{l_my_tl} holding |H(ell--el)(o,--o) w(or--o)(ld--l)!|
-%
-% The submatches are numbered according to the order in which the
-% opening parenthesis of capturing groups appear in the regular
-% expression to match. The $n$-th submatch is empty if there are fewer
-% than $n$ capturing groups or for capturing groups that appear in
-% alternatives that were not used for the match. In case a capturing
-% group matches several times during a match (due to quantifiers) only
-% the last match is used in the replacement text. Submatches always keep
-% the same category codes as in the original token list.
-%
-% By default, the category code of characters inserted by the
-% replacement are determined by the prevailing category code regime at
-% the time where the replacement is made, with two exceptions:
-% \begin{itemize}
-% \item space characters (with character code $32$) inserted with
-% \verb*|\ | or |\x20| or |\x{20}| have category code~$10$ regardless
-% of the prevailing category code regime;
-% \item if the category code would be $0$~(escape), $5$~(newline),
-% $9$~(ignore), $14$~(comment) or $15$~(invalid), it is replaced by
-% $12$~(other) instead.
-% \end{itemize}
-% The escape sequence |\c| allows to insert characters
-% with arbitrary category codes, as well as control sequences.
-% \begin{l3regex-syntax}
-% \item[\\cX(\ldots{})] Produces the characters \enquote{\ldots{}} with
-% category~|X|, which must be one of |CBEMTPUDSLOA| as in regular
-% expressions. Parentheses are optional for a single character (which
-% can be an escape sequence). When nested, the innermost category
-% code applies, for instance |\cL(Hello\cS\ world)!| gives this text
-% with standard category codes.
-% \item[\\c\Arg{text}] Produces the control sequence with csname
-% \meta{text}. The \meta{text} may contain references to the
-% submatches |\0|, |\1|, and so on, as in the example for |\u| below.
-% \end{l3regex-syntax}
-%
-% The escape sequence |\u|\Arg{var~name} allows to insert the
-% contents of the variable with name \meta{var~name} directly into
-% the replacement, giving an easier control of category codes. When
-% nested in |\c{|\ldots{}|}| and |\u{|\ldots{}|}| constructions, the
-% |\u| and |\c|~escape sequences perform \cs{tl_to_str:v}, namely
-% extract the value of the control sequence and turn it into a string.
-% Matches can also be used within the arguments of |\c| and |\u|. For
-% instance,
-% \begin{verbatim}
-% \tl_set:Nn \l_my_one_tl { first }
-% \tl_set:Nn \l_my_two_tl { \emph{second} }
-% \tl_set:Nn \l_my_tl { one , two , one , one }
-% \regex_replace_all:nnN { [^,]+ } { \u{l_my_\0_tl} } \l_my_tl
-% \end{verbatim}
-% results in \cs[no-index]{l_my_tl} holding |first,\emph{second},first,first|.
-%
-% Regex replacement is also a convenient way to produce token lists
-% with arbitrary category codes. For instance
-% \begin{verbatim}
-% \tl_clear:N \l_tmpa_tl
-% \regex_replace_all:nnN { } { \cU\% \cA\~ } \l_tmpa_tl
-% \end{verbatim}
-% results in \cs[no-index]{l_tmpa_tl} containing the percent character
-% with category code~$7$ (superscript) and an active tilde character.
-%
-% \section{Pre-compiling regular expressions}
-%
-% If a regular expression is to be used several times,
-% it is better to compile it once rather than doing it
-% each time the regular expression is used. The compiled
-% regular expression is stored in a variable. All
-% of the \pkg{l3regex} module's functions can be given their
-% regular expression argument either as an explicit string
-% or as a compiled regular expression.
-%
-% \begin{function}[added = 2017-05-26]{\regex_new:N}
-% \begin{syntax}
-% \cs{regex_new:N} \meta{regex~var}
-% \end{syntax}
-% Creates a new \meta{regex~var} or raises an error if the
-% name is already taken. The declaration is global. The
-% \meta{regex~var} is initially such that it never matches.
-% \end{function}
-%
-% \begin{function}[added = 2017-05-26]{\regex_set:Nn, \regex_gset:Nn}
-% \begin{syntax}
-% \cs{regex_set:Nn} \meta{regex~var} \Arg{regex}
-% \end{syntax}
-% Stores a compiled version of the \meta{regular expression} in the
-% \meta{regex~var}. The assignment is local for \cs{regex_set:Nn} and
-% global for \cs{regex_gset:Nn}. For instance, this function can be
-% used as
-% \begin{verbatim}
-% \regex_new:N \l_my_regex
-% \regex_set:Nn \l_my_regex { my\ (simple\ )? reg(ex|ular\ expression) }
-% \end{verbatim}
-% \end{function}
-%
-% \begin{function}[added = 2017-05-26]{\regex_const:Nn}
-% \begin{syntax}
-% \cs{regex_const:Nn} \meta{regex~var} \Arg{regex}
-% \end{syntax}
-% Creates a new constant \meta{regex~var} or raises an error if the name
-% is already taken. The value of the \meta{regex~var} is set
-% globally to the compiled version of the \meta{regular expression}.
-% \end{function}
-%
-% \begin{function}[added = 2021-04-26, updated = 2021-04-29]
-% {\regex_show:N, \regex_show:n, \regex_log:N, \regex_log:n}
-% \begin{syntax}
-% \cs{regex_show:n} \Arg{regex}
-% \cs{regex_log:n} \Arg{regex}
-% \end{syntax}
-% Displays in the terminal or writes in the log file (respectively)
-% how \pkg{l3regex} interprets the \meta{regex}. For instance,
-% \cs{regex_show:n} \verb+{\A X|Y}+ shows
-% \begin{verbatim}
-% +-branch
-% anchor at start (\A)
-% char code 88 (X)
-% +-branch
-% char code 89 (Y)
-% \end{verbatim}
-% indicating that the anchor |\A| only applies to the first branch:
-% the second branch is not anchored to the beginning of the match.
-% \end{function}
-%
-% \section{Matching}
-%
-% All regular expression functions are available in both |:n| and |:N|
-% variants. The former require a \enquote{standard} regular expression,
-% while the later require a compiled expression as generated by
-% \cs{regex_set:Nn}.
-%
-% \begin{function}[TF, added = 2017-05-26]
-% {
-% \regex_match:nn, \regex_match:nV,
-% \regex_match:Nn, \regex_match:NV
-% }
-% \begin{syntax}
-% \cs{regex_match:nnTF} \Arg{regex} \Arg{token list} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests whether the \meta{regular expression} matches any part
-% of the \meta{token list}. For instance,
-% \begin{verbatim}
-% \regex_match:nnTF { b [cde]* } { abecdcx } { TRUE } { FALSE }
-% \regex_match:nnTF { [b-dq-w] } { example } { TRUE } { FALSE }
-% \end{verbatim}
-% leaves \texttt{TRUE} then \texttt{FALSE} in the input stream.
-% \end{function}
-%
-% \begin{function}[added = 2017-05-26]
-% {
-% \regex_count:nnN, \regex_count:nVN,
-% \regex_count:NnN, \regex_count:NVN
-% }
-% \begin{syntax}
-% \cs{regex_count:nnN} \Arg{regex} \Arg{token list} \meta{int var}
-% \end{syntax}
-% Sets \meta{int var} within the current \TeX{} group level
-% equal to the number of times
-% \meta{regular expression} appears in \meta{token list}.
-% The search starts by finding the left-most longest match,
-% respecting greedy and lazy (non-greedy) operators. Then the search
-% starts again from the character following the last character
-% of the previous match, until reaching the end of the token list.
-% Infinite loops are prevented in the case where the regular expression
-% can match an empty token list: then we count one match between each
-% pair of characters.
-% For instance,
-% \begin{verbatim}
-% \int_new:N \l_foo_int
-% \regex_count:nnN { (b+|c) } { abbababcbb } \l_foo_int
-% \end{verbatim}
-% results in \cs[no-index]{l_foo_int} taking the value $5$.
-% \end{function}
-%
-% \begin{function}[noTF, added = 2022-01-10]{\regex_match_case:nn}
-% \begin{syntax}
-% \cs{regex_match_case:nnTF}
-% ~~|{| \\
-% ~~~~\Arg{regex_1} \Arg{code case_1} \\
-% ~~~~\Arg{regex_2} \Arg{code case_2} \\
-% ~~~~\ldots \\
-% ~~~~\Arg{regex_n} \Arg{code case_n} \\
-% ~~|}| \Arg{token list}
-% ~~\Arg{true code} \Arg{false code}
-% \end{syntax}
-% Determines which of the \meta{regular expressions} matches at the
-% earliest point in the \meta{token list}, and leaves the
-% corresponding \meta{code_i} followed by the \meta{true code} in the
-% input stream. If several \meta{regex} match starting at the same
-% point, then the first one in the list is selected and the others are
-% discarded. If none of the \meta{regex} match, the \meta{false code}
-% is left in the input stream. Each \meta{regex} can either be given
-% as a regex variable or as an explicit regular expression.
-%
-% In detail, for each starting position in the \meta{token list}, each
-% of the \meta{regex} is searched in turn. If one of them matches
-% then the corresponding \meta{code} is used and everything else is
-% discarded, while if none of the \meta{regex} match at a given
-% position then the next starting position is attempted. If none of
-% the \meta{regex} match anywhere in the \meta{token list} then
-% nothing is left in the input stream. Note that this differs from
-% nested \cs{regex_match:nnTF} statements since all \meta{regex} are
-% attempted at each position rather than attempting to match
-% \meta{regex_1} at every position before moving on to \meta{regex_2}.
-% \end{function}
-%
-% \section{Submatch extraction}
-%
-% \begin{function}[noTF, added = 2017-05-26]
-% {
-% \regex_extract_once:nnN, \regex_extract_once:nVN,
-% \regex_extract_once:NnN, \regex_extract_once:NVN
-% }
-% \begin{syntax}
-% \cs{regex_extract_once:nnN} \Arg{regex} \Arg{token list} \meta{seq~var}
-% \cs{regex_extract_once:nnNTF} \Arg{regex} \Arg{token list} \meta{seq~var} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Finds the first match of the \meta{regular expression} in the
-% \meta{token list}. If it exists, the match is stored as the first
-% item of the \meta{seq~var}, and further items are the contents of
-% capturing groups, in the order of their opening parenthesis. The
-% \meta{seq~var} is assigned locally. If there is no match, the
-% \meta{seq~var} is cleared. The testing versions insert the
-% \meta{true code} into the input stream if a match was found, and the
-% \meta{false code} otherwise.
-%
-% For instance, assume that you type
-% \begin{verbatim}
-% \regex_extract_once:nnNTF { \A(La)?TeX(!*)\Z } { LaTeX!!! } \l_foo_seq
-% { true } { false }
-% \end{verbatim}
-% Then the regular expression (anchored at the start with |\A| and
-% at the end with |\Z|) must match the whole token list. The first
-% capturing group, |(La)?|, matches |La|, and the second capturing
-% group, |(!*)|, matches |!!!|. Thus, \cs[no-index]{l_foo_seq} contains as a result
-% the items |{LaTeX!!!}|, |{La}|, and |{!!!}|, and the \texttt{true}
-% branch is left in the input stream.
-% Note that the $n$-th item of \cs[no-index]{l_foo_seq}, as obtained using
-% \cs{seq_item:Nn}, correspond to the submatch numbered $(n-1)$ in
-% functions such as \cs{regex_replace_once:nnN}.
-% \end{function}
-%
-% \begin{function}[noTF, added = 2017-05-26]
-% {
-% \regex_extract_all:nnN, \regex_extract_all:nVN,
-% \regex_extract_all:NnN, \regex_extract_all:NVN
-% }
-% \begin{syntax}
-% \cs{regex_extract_all:nnN} \Arg{regex} \Arg{token list} \meta{seq~var}
-% \cs{regex_extract_all:nnNTF} \Arg{regex} \Arg{token list} \meta{seq~var} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Finds all matches of the \meta{regular expression}
-% in the \meta{token list}, and stores all the submatch information
-% in a single sequence (concatenating the results of
-% multiple \cs{regex_extract_once:nnN} calls).
-% The \meta{seq~var} is assigned locally. If there is no match,
-% the \meta{seq~var} is cleared.
-% The testing versions insert the \meta{true code} into the input
-% stream if a match was found, and the \meta{false code} otherwise.
-% For instance, assume that you type
-% \begin{verbatim}
-% \regex_extract_all:nnNTF { \w+ } { Hello,~world! } \l_foo_seq
-% { true } { false }
-% \end{verbatim}
-% Then the regular expression matches twice, the resulting
-% sequence contains the two items |{Hello}| and |{world}|,
-% and the \texttt{true} branch is left in the input stream.
-% \end{function}
-%
-% \begin{function}[noTF, added = 2017-05-26]
-% {
-% \regex_split:nnN, \regex_split:nVN,
-% \regex_split:NnN, \regex_split:NVN,
-% }
-% \begin{syntax}
-% \cs{regex_split:nnN} \Arg{regular expression} \Arg{token list} \meta{seq~var}
-% \cs{regex_split:nnNTF} \Arg{regular expression} \Arg{token list} \meta{seq~var} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Splits the \meta{token list} into a sequence of parts, delimited by
-% matches of the \meta{regular expression}. If the \meta{regular expression}
-% has capturing groups, then the token lists that they match are stored as
-% items of the sequence as well. The assignment to \meta{seq~var} is local.
-% If no match is found the resulting \meta{seq~var} has the
-% \meta{token list} as its sole item. If the \meta{regular expression}
-% matches the empty token list, then the \meta{token list} is split
-% into single tokens.
-% The testing versions insert the \meta{true code} into the input
-% stream if a match was found, and the \meta{false code} otherwise.
-% For example, after
-% \begin{verbatim}
-% \seq_new:N \l_path_seq
-% \regex_split:nnNTF { / } { the/path/for/this/file.tex } \l_path_seq
-% { true } { false }
-% \end{verbatim}
-% the sequence |\l_path_seq| contains the items |{the}|, |{path}|,
-% |{for}|, |{this}|, and |{file.tex}|, and the \texttt{true} branch
-% is left in the input stream.
-% \end{function}
-%
-% \section{Replacement}
-%
-% \begin{function}[noTF, added = 2017-05-26]
-% {
-% \regex_replace_once:nnN,\regex_replace_once:nVN,
-% \regex_replace_once:NnN,\regex_replace_once:NVN
-% }
-% \begin{syntax}
-% \cs{regex_replace_once:nnN} \Arg{regular expression} \Arg{replacement} \meta{tl~var}
-% \cs{regex_replace_once:nnNTF} \Arg{regular expression} \Arg{replacement} \meta{tl~var} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Searches for the \meta{regular expression} in the contents of the
-% \meta{tl~var} and replaces the first match with the
-% \meta{replacement}. In the \meta{replacement},
-% |\0| represents the full match, |\1| represent the contents of the
-% first capturing group, |\2| of the second, \emph{etc.}
-% The result is assigned locally to \meta{tl~var}.
-% \end{function}
-%
-% \begin{function}[noTF, added = 2017-05-26]
-% {
-% \regex_replace_all:nnN,\regex_replace_all:nVN,
-% \regex_replace_all:NnN,\regex_replace_all:NVN
-% }
-% \begin{syntax}
-% \cs{regex_replace_all:nnN} \Arg{regular expression} \Arg{replacement} \meta{tl~var}
-% \cs{regex_replace_all:nnNTF} \Arg{regular expression} \Arg{replacement} \meta{tl~var} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Replaces all occurrences of the \meta{regular expression} in the
-% contents of the \meta{tl~var}
-% by the \meta{replacement}, where |\0| represents
-% the full match, |\1| represent the contents of the first capturing
-% group, |\2| of the second, \emph{etc.} Every match is treated
-% independently, and matches cannot overlap. The result is assigned
-% locally to \meta{tl~var}.
-% \end{function}
-%
-% \begin{function}[noTF, added = 2022-01-10]{\regex_replace_case_once:nN}
-% \begin{syntax}
-% \cs{regex_replace_case_once:nNTF}
-% ~~|{| \\
-% ~~~~\Arg{regex_1} \Arg{replacement_1} \\
-% ~~~~\Arg{regex_2} \Arg{replacement_2} \\
-% ~~~~\ldots \\
-% ~~~~\Arg{regex_n} \Arg{replacement_n} \\
-% ~~|}| \meta{tl~var}
-% ~~\Arg{true code} \Arg{false code}
-% \end{syntax}
-% Replaces the earliest match of the regular expression
-% "(?|"\meta{regex_1}"|"\dots"|"\meta{regex_n}")" in the \meta{token
-% list variable} by the \meta{replacement} corresponding to which
-% \meta{regex_i} matched, then leaves the \meta{true code} in the
-% input stream. If none of the \meta{regex} match, then the
-% \meta{tl~var} is not modified, and the \meta{false code} is left in
-% the input stream. Each \meta{regex} can either be given as a regex
-% variable or as an explicit regular expression.
-%
-% In detail, for each starting position in the \meta{token list}, each
-% of the \meta{regex} is searched in turn. If one of them matches
-% then it is replaced by the corresponding \meta{replacement} as
-% described for \cs{regex_replace_once:nnN}. This is equivalent to
-% checking with \cs{regex_match_case:nn} which \meta{regex} matches,
-% then performing the replacement with \cs{regex_replace_once:nnN}.
-% \end{function}
-%
-% \begin{function}[noTF, added = 2022-01-10]{\regex_replace_case_all:nN}
-% \begin{syntax}
-% \cs{regex_replace_case_all:nNTF}
-% ~~|{| \\
-% ~~~~\Arg{regex_1} \Arg{replacement_1} \\
-% ~~~~\Arg{regex_2} \Arg{replacement_2} \\
-% ~~~~\ldots \\
-% ~~~~\Arg{regex_n} \Arg{replacement_n} \\
-% ~~|}| \meta{tl~var}
-% ~~\Arg{true code} \Arg{false code}
-% \end{syntax}
-% Replaces all occurrences of all \meta{regex} in the \meta{token
-% list} by the corresponding \meta{replacement}. Every match is
-% treated independently, and matches cannot overlap. The result is
-% assigned locally to \meta{tl~var}, and the \meta{true code} or
-% \meta{false code} is left in the input stream depending on whether
-% any replacement was made or not.
-%
-% In detail, for each starting position in the \meta{token list}, each
-% of the \meta{regex} is searched in turn. If one of them matches
-% then it is replaced by the corresponding \meta{replacement}, and the
-% search resumes at the position that follows this match (and
-% replacement). For instance
-% \begin{verbatim}
-% \tl_set:Nn \l_tmpa_tl { Hello,~world! }
-% \regex_replace_case_all:nN
-% {
-% { [A-Za-z]+ } { ``\0'' }
-% { \b } { --- }
-% { . } { [\0] }
-% } \l_tmpa_tl
-% \end{verbatim}
-% results in \cs{l_tmpa_tl} having the contents
-% \verb*|``Hello''---[,][ ]``world''---[!]|. Note in particular that
-% the word-boundary assertion |\b| did not match at the start of words
-% because the case |[A-Za-z]+| matched at these positions. To change
-% this, one could simply swap the order of the two cases in the
-% argument of \cs{regex_replace_case_all:nN}.
-% \end{function}
-%
-% \section{Scratch regular expressions}
-%
-% \begin{variable}[added = 2017-12-11]{\l_tmpa_regex, \l_tmpb_regex}
-% Scratch regex for local assignment. These are never used by
-% the kernel code, and so are safe for use with any \LaTeX3-defined
-% function. However, they may be overwritten by other non-kernel
-% code and so should only be used for short-term storage.
-% \end{variable}
-%
-% \begin{variable}[added = 2017-12-11]{\g_tmpa_regex, \g_tmpb_regex}
-% Scratch regex for global assignment. These are never used by
-% the kernel code, and so are safe for use with any \LaTeX3-defined
-% function. However, they may be overwritten by other non-kernel
-% code and so should only be used for short-term storage.
-% \end{variable}
-%
-% \section{Bugs, misfeatures, future work, and other possibilities}
-%
-% The following need to be done now.
-% \begin{itemize}
-% \item Rewrite the documentation in a more ordered way, perhaps add a
-% \textsc{bnf}?
-% \end{itemize}
-%
-% Additional error-checking to come.
-% \begin{itemize}
-% \item Clean up the use of messages.
-% \item Cleaner error reporting in the replacement phase.
-% \item Add tracing information.
-% \item Detect attempts to use back-references and other
-% non-implemented syntax.
-% \item Test for the maximum register \cs[no-index]{c_max_register_int}.
-% \item Find out whether the fact that |\W| and friends match the
-% end-marker leads to bugs. Possibly update \cs[no-index]{__regex_item_reverse:n}.
-% \item The empty cs should be matched by |\c{}|, not by
-% |\c{csname.?endcsname\s?}|.
-% \end{itemize}
-%
-% Code improvements to come.
-% \begin{itemize}
-% \item Shift arrays so that the useful information starts at
-% position~$1$.
-% \item Only build |\c{...}| once.
-% \item Use arrays for the left and right state stacks when
-% compiling a regex.
-% \item Should \cs[no-index]{__regex_action_free_group:n} only be used for greedy
-% |{n,}| quantifier? (I think not.)
-% \item Quantifiers for |\u| and assertions.
-% \item When matching, keep track of an explicit stack of
-% \texttt{curr_state} and \texttt{curr_submatches}.
-% \item If possible, when a state is reused by the same thread, kill
-% other subthreads.
-% \item Use an array rather than \cs[no-index]{g__regex_balance_tl}
-% to build the function \cs[no-index]{__regex_replacement_balance_one_match:n}.
-% \item Reduce the number of epsilon-transitions in alternatives.
-% \item Optimize simple strings: use less states (|abcade| should give
-% two states, for |abc| and |ade|). [Does that really make sense?]
-% \item Optimize groups with no alternative.
-% \item Optimize states with a single \cs[no-index]{__regex_action_free:n}.
-% \item Optimize the use of \cs[no-index]{__regex_action_success:} by inserting it
-% in state $2$ directly instead of having an extra transition.
-% \item Optimize the use of \cs[no-index]{int_step_...} functions.
-% \item Groups don't capture within regexes for csnames; optimize and
-% document.
-% \item Better \enquote{show} for anchors, properties, and catcode tests.
-% \item Does |\K| really need a new state for itself?
-% \item When compiling, use a boolean \texttt{in_cs} and less magic
-% numbers.
-% \end{itemize}
-%
-% The following features are likely to be implemented at some point
-% in the future.
-% \begin{itemize}
-% \item General look-ahead/behind assertions.
-% \item Regex matching on external files.
-% \item Conditional subpatterns with look ahead/behind: \enquote{if
-% what follows is [\ldots{}], then [\ldots{}]}.
-% \item |(*..)| and |(?..)| sequences to set some options.
-% \item UTF-8 mode for \pdfTeX{}.
-% \item Newline conventions are not done.
-% In particular, we should have an option for |.| not to match newlines.
-% Also, |\A| should differ from |^|, and |\Z|, |\z| and |$| should
-% differ.
-% \item Unicode properties: |\p{..}| and |\P{..}|;
-% |\X| which should match any \enquote{extended} Unicode sequence.
-% This requires to manipulate a lot of data, probably using tree-boxes.
-% \end{itemize}
-%
-% The following features of \textsc{pcre} or Perl may or may not be
-% implemented.
-% \begin{itemize}
-% \item Callout with |(?C...)| or other syntax: some internal code
-% changes make that possible, and it can be useful for instance in
-% the replacement code to stop a regex replacement when some marker
-% has been found; this raises the question of a potential
-% |\regex_break:| and then of playing well with \cs{tl_map_break:}
-% called from within the code in a regex. It also raises the
-% question of nested calls to the regex machinery, which is a
-% problem since \tn{fontdimen} are global.
-% \item Conditional subpatterns (other than with a look-ahead or
-% look-behind condition): this is non-regular, isn't it?
-% \item Named subpatterns: \TeX{} programmers have lived so far
-% without any need for named macro parameters.
-% \end{itemize}
-%
-% The following features of \textsc{pcre} or Perl will definitely not be
-% implemented.
-% \begin{itemize}
-% \item Back-references: non-regular feature, this requires
-% backtracking, which is prohibitively slow.
-% \item Recursion: this is a non-regular feature.
-% \item Atomic grouping, possessive quantifiers: those tools, mostly
-% meant to fix catastrophic backtracking, are unnecessary in a
-% non-backtracking algorithm, and difficult to implement.
-% \item Subroutine calls: this syntactic sugar is difficult to include
-% in a non-backtracking algorithm, in particular because the
-% corresponding group should be treated as atomic.
-% \item Backtracking control verbs: intrinsically tied to
-% backtracking.
-% \item |\ddd|, matching the character with octal code \texttt{ddd}:
-% we already have |\x{...}| and the syntax is confusingly close to
-% what we could have used for backreferences (|\1|, |\2|, \ldots{}),
-% making it harder to produce useful error message.
-% \item |\cx|, similar to \TeX{}'s own |\^^x|.
-% \item Comments: \TeX{} already has its own system for comments.
-% \item |\Q...\E| escaping: this would require to read the argument
-% verbatim, which is not in the scope of this module.
-% \item |\C| single byte in UTF-8 mode: \XeTeX{} and \LuaTeX{} serve
-% us characters directly, and splitting those into bytes is tricky,
-% encoding dependent, and most likely not useful anyways.
-% \end{itemize}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3regex} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=regex>
-% \end{macrocode}
-%
-% \subsection{Plan of attack}
-%
-% Most regex engines use backtracking. This allows to provide very
-% powerful features (back-references come to mind first), but it is
-% costly, and raises the problem of catastrophic backtracking. Since
-% \TeX{} is not first and foremost a programming language, complicated
-% code tends to run slowly, and we must use faster, albeit slightly more
-% restrictive, techniques, coming from automata theory.
-%
-% Given a regular expression of $n$ characters, we do the following:
-% \begin{itemize}
-% \item (Compiling.) Analyse the regex, finding invalid input, and
-% convert it to an internal representation.
-% \item (Building.) Convert the compiled regex to a non-deterministic
-% finite automaton (\textsc{nfa}) with $O(n)$ states which
-% accepts precisely token lists matching that regex.
-% \item (Matching.) Loop through the query token list one token (one
-% \enquote{position}) at a time, exploring in parallel every
-% possible path (\enquote{active thread}) through the \textsc{nfa},
-% considering active threads in an order determined by the
-% quantifiers' greediness.
-% \end{itemize}
-%
-% We use the following vocabulary in the code comments (and in variable
-% names).
-% \begin{itemize}
-% \item \emph{Group}: index of the capturing group, $-1$ for
-% non-capturing groups. ^^A start/end index?
-% \item \emph{Position}: each token in the query is labelled by an
-% integer \meta{position}, with $\texttt{min_pos} - 1 \leq
-% \meta{position} \leq \texttt{max_pos}$. The lowest and highest
-% positions $\texttt{min_pos} - 1$ and $\texttt{max_pos}$
-% correspond to imaginary begin and end markers (with
-% non-existent category code and character code).
-% $\texttt{max_pos}$ is only set quite late in the processing.
-% \item \emph{Query}: the token list to which we apply the regular
-% expression.
-% \item \emph{State}: each state of the \textsc{nfa} is labelled by an
-% integer \meta{state} with $\texttt{min_state} \leq \meta{state} <
-% \texttt{max_state}$.
-% \item \emph{Active thread}: state of the \textsc{nfa} that is reached
-% when reading the query token list for the matching. Those threads
-% are ordered according to the greediness of quantifiers.
-% \item \emph{Step}: used when matching, starts at $0$, incremented
-% every time a character is read, and is not reset when searching
-% for repeated matches. The integer \cs{l_@@_step_int} is a
-% unique id for all the steps of the matching algorithm.
-% \end{itemize}
-%
-% We use \pkg{l3intarray} to manipulate arrays of integers.
-% We also abuse \TeX{}'s
-% \tn{toks} registers, by accessing them directly by number rather than
-% tying them to control sequence using the \tn{newtoks} allocation
-% functions. Specifically, these arrays and \tn{toks} are used as
-% follows. When building,
-% \tn{toks}\meta{state} holds the tests and actions to perform in the
-% \meta{state} of the \textsc{nfa}. When matching,
-% \begin{itemize}
-% \item \cs{g_@@_state_active_intarray} holds the last \meta{step} in
-% which each \meta{state} was active.
-% \item \cs{g_@@_thread_info_intarray} consists of blocks for each
-% \meta{thread} (with $\texttt{min_thread} \leq \meta{thread} <
-% \texttt{max_thread}$). Each block has
-% $1+2\cs{l_@@_capturing_group_int}$ entries: the \meta{state} in
-% which the \meta{thread} currently is, followed by the beginnings
-% of all submatches, and then the ends of all submatches. The
-% \meta{threads} are ordered starting from the best to the least
-% preferred.
-% \item \cs{g_@@_submatch_prev_intarray}, \cs{g_@@_submatch_begin_intarray}
-% and \cs{g_@@_submatch_end_intarray} hold, for each submatch (as would
-% be extracted by \cs{regex_extract_all:nnN}), the place where the
-% submatch started to be looked for and its two end-points. For
-% historical reasons, the minimum index is twice \texttt{max_state},
-% and the used registers go up to \cs{l_@@_submatch_int}. They are
-% organized in blocks of \cs{l_@@_capturing_group_int} entries, each
-% block corresponding to one match with all its submatches stored in
-% consecutive entries.
-% \end{itemize}
-% When actually building the result,
-% \begin{itemize}
-% \item \tn{toks}\meta{position} holds \meta{tokens} which \texttt{o}-
-% and \texttt{e}-expand to the \meta{position}-th token in the query.
-% \item \cs{g_@@_balance_intarray} holds the balance of begin-group and
-% end-group character tokens which appear before that point in the
-% token list.
-% \end{itemize}
-%
-% The code is structured as follows. Variables are introduced in the
-% relevant section. First we present some generic helper functions. Then
-% comes the code for compiling a regular expression, and for showing the
-% result of the compilation. The building phase converts a compiled
-% regex to \textsc{nfa} states, and the automaton is run by the code in
-% the following section. The only remaining brick is parsing the
-% replacement text and performing the replacement. We are then ready for
-% all the user functions. Finally, messages, and a little bit of tracing
-% code.
-%
-% \subsection{Helpers}
-%
-% \begin{macro}{\@@_int_eval:w}
-% Access the primitive: performance is key here, so we do not use
-% the slower route \emph{via} \cs{int_eval:n}.
-% \begin{macrocode}
-\cs_new_eq:NN \@@_int_eval:w \tex_numexpr:D
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_standard_escapechar:}
-% Make the \tn{escapechar} into the standard backslash.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_standard_escapechar:
- { \int_set:Nn \tex_escapechar:D { `\\ } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_toks_use:w}
-% Unpack a \tn{toks} given its number.
-% \begin{macrocode}
-\cs_new:Npn \@@_toks_use:w { \tex_the:D \tex_toks:D }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_toks_clear:N, \@@_toks_set:Nn, \@@_toks_set:No}
-% Empty a \tn{toks} or set it to a value, given its number.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_toks_clear:N #1
- { \tex_toks:D #1 = { } }
-\cs_new_eq:NN \@@_toks_set:Nn \tex_toks:D
-\cs_new_protected:Npn \@@_toks_set:No #1
- { \tex_toks:D #1 = \exp_after:wN }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_toks_memcpy:NNn}
-% Copy |#3| \tn{toks} registers from |#2| onwards to |#1| onwards,
-% like |C|'s |memcpy|.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_toks_memcpy:NNn #1#2#3
- {
- \prg_replicate:nn {#3}
- {
- \tex_toks:D #1 = \tex_toks:D #2
- \int_incr:N #1
- \int_incr:N #2
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_toks_put_left:Ne}
-% \begin{macro}{\@@_toks_put_right:Ne, \@@_toks_put_right:Nn}
-% During the building phase we wish to add \texttt{e}-expanded
-% material to \tn{toks}, either to the left or to the right. The
-% expansion is done \enquote{by hand} for optimization (these
-% operations are used quite a lot). The \texttt{Nn} version of
-% \cs{@@_toks_put_right:Ne} is provided because it is more
-% efficient than \texttt{e}-expanding with \cs{exp_not:n}.
-% \begin{macrocode}
-\cs_if_exist:NTF \tex_etokspre:D
- { \cs_new_eq:NN \@@_toks_put_left:Ne \tex_etokspre:D }
- {
- \cs_new_protected:Npn \@@_toks_put_left:Ne #1#2
- { \tex_toks:D #1 = \tex_expanded:D {{ #2 \tex_the:D \tex_toks:D #1 }} }
- }
-\cs_if_exist:NTF \tex_etoksapp:D
- { \cs_new_eq:NN \@@_toks_put_right:Ne \tex_etoksapp:D }
- {
- \cs_new_protected:Npn \@@_toks_put_right:Ne #1#2
- { \tex_toks:D #1 = \tex_expanded:D {{ \tex_the:D \tex_toks:D #1 #2 }} }
- }
-\cs_if_exist:NTF \tex_toksapp:D
- { \cs_new_eq:NN \@@_toks_put_right:Nn \tex_toksapp:D }
- {
- \cs_new_protected:Npn \@@_toks_put_right:Nn #1#2
- { \tex_toks:D #1 = \exp_after:wN { \tex_the:D \tex_toks:D #1 #2 } }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_curr_cs_to_str:}
-% Expands to the string representation of the token (known to be a
-% control sequence) at the current position \cs{l_@@_curr_pos_int}.
-% It should only be used in \texttt{e}/\texttt{x}-expansion to avoid losing a
-% leading space.
-% \begin{macrocode}
-\cs_new:Npn \@@_curr_cs_to_str:
- {
- \exp_after:wN \exp_after:wN \exp_after:wN \cs_to_str:N
- \l_@@_curr_token_tl
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_intarray_item:NnF, \@@_intarray_item_aux:nNF}
-% Item of intarray, with a default value.
-% \begin{macrocode}
-\cs_new:Npn \@@_intarray_item:NnF #1#2
- { \exp_args:No \@@_intarray_item_aux:nNF { \tex_the:D \@@_int_eval:w #2 } #1 }
-\cs_new:Npn \@@_intarray_item_aux:nNF #1#2
- {
- \if_int_compare:w #1 > \c_zero_int
- \exp_after:wN \use_ii:nnn
- \fi:
- \use_ii:nn { \__kernel_intarray_item:Nn #2 {#1} }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_maplike_break:}
-% Analogous to \cs{tl_map_break:}, this correctly exits
-% \cs{tl_map_inline:nn} and similar constructions and jumps to the
-% matching \cs{prg_break_point:Nn} \cs{@@_maplike_break:} |{| |}|.
-% \begin{macrocode}
-\cs_new:Npn \@@_maplike_break:
- { \prg_map_break:Nn \@@_maplike_break: { } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_tl_odd_items:n, \@@_tl_even_items:n, \@@_tl_even_items_loop:nn}
-% Map through a token list one pair at a time, leaving the
-% odd-numbered or even-numbered items (the first item is
-% numbered~$1$).
-% \begin{macrocode}
-\cs_new:Npn \@@_tl_odd_items:n #1 { \@@_tl_even_items:n { ? #1 } }
-\cs_new:Npn \@@_tl_even_items:n #1
- {
- \@@_tl_even_items_loop:nn #1 \q_@@_nil \q_@@_nil
- \prg_break_point:
- }
-\cs_new:Npn \@@_tl_even_items_loop:nn #1#2
- {
- \@@_use_none_delimit_by_q_nil:w #2 \prg_break: \q_@@_nil
- { \exp_not:n {#2} }
- \@@_tl_even_items_loop:nn
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Constants and variables}
-%
-% \begin{macro}{\@@_tmp:w}
-% Temporary function used for various short-term purposes.
-% \begin{macrocode}
-\cs_new:Npn \@@_tmp:w { }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}
-% {
-% \l_@@_internal_a_tl, \l_@@_internal_b_tl,
-% \l_@@_internal_a_int, \l_@@_internal_b_int,
-% \l_@@_internal_c_int, \l_@@_internal_bool,
-% \l_@@_internal_seq, \g_@@_internal_tl,
-% }
-% Temporary variables used for various purposes.
-% \begin{macrocode}
-\tl_new:N \l_@@_internal_a_tl
-\tl_new:N \l_@@_internal_b_tl
-\int_new:N \l_@@_internal_a_int
-\int_new:N \l_@@_internal_b_int
-\int_new:N \l_@@_internal_c_int
-\bool_new:N \l_@@_internal_bool
-\seq_new:N \l_@@_internal_seq
-\tl_new:N \g_@@_internal_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_build_tl}
-% This temporary variable is specifically for use with the |tl_build|
-% machinery.
-% \begin{macrocode}
-\tl_new:N \l_@@_build_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\c_@@_no_match_regex}
-% This regular expression matches nothing, but is still a valid
-% regular expression. We could use a failing assertion, but I went for
-% an empty class. It is used as the initial value for regular
-% expressions declared using \cs{regex_new:N}.
-% \begin{macrocode}
-\tl_const:Nn \c_@@_no_match_regex
- {
- \@@_branch:n
- { \@@_class:NnnnN \c_true_bool { } { 1 } { 0 } \c_true_bool }
- }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_balance_int}
-% During this phase, \cs{l_@@_balance_int} counts the balance of
-% begin-group and end-group character tokens which appear before a
-% given point in the token list. This variable is also used to keep
-% track of the balance in the replacement text.
-% \begin{macrocode}
-\int_new:N \l_@@_balance_int
-% \end{macrocode}
-% \end{variable}
-%
-% \subsubsection{Testing characters}
-%
-% \begin{macro}{\c_@@_ascii_min_int, \c_@@_ascii_max_control_int, \c_@@_ascii_max_int}
-% \begin{macrocode}
-\int_const:Nn \c_@@_ascii_min_int { 0 }
-\int_const:Nn \c_@@_ascii_max_control_int { 31 }
-\int_const:Nn \c_@@_ascii_max_int { 127 }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\c_@@_ascii_lower_int}
-% \begin{macrocode}
-\int_const:Nn \c_@@_ascii_lower_int { `a - `A }
-% \end{macrocode}
-% \end{variable}
-%
-% \subsubsection{Internal auxiliaries}
-%
-% \begin{variable}{\q_@@_recursion_stop}
-% Internal recursion quarks.
-% \begin{macrocode}
-\quark_new:N \q_@@_recursion_stop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\q_@@_nil}
-% Internal quarks.
-% \begin{macrocode}
-\quark_new:N \q_@@_nil
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[EXP]{
-% \@@_use_none_delimit_by_q_recursion_stop:w,
-% \@@_use_i_delimit_by_q_recursion_stop:nw,
-% \@@_use_none_delimit_by_q_nil:w,
-% }
-% Functions to gobble up to a quark.
-% \begin{macrocode}
-\cs_new:Npn \@@_use_none_delimit_by_q_recursion_stop:w
- #1 \q_@@_recursion_stop { }
-\cs_new:Npn \@@_use_i_delimit_by_q_recursion_stop:nw
- #1 #2 \q_@@_recursion_stop {#1}
-\cs_new:Npn \@@_use_none_delimit_by_q_nil:w #1 \q_@@_nil { }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\@@_quark_if_nil:n}
-% Branching quark conditional.
-% \begin{macrocode}
-\__kernel_quark_new_conditional:Nn \@@_quark_if_nil:N { F }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_break_point:TF}
-% \begin{macro}{\@@_break_true:w}
-% When testing whether a character of the query token list matches
-% a given character class in the regular expression, we often
-% have to test it against several ranges of characters, checking
-% if any one of those matches. This is done with a structure like
-% \begin{quote}
-% \meta{test1} \ldots{} \meta{test$\sb{n}$} \\
-% \cs{@@_break_point:TF} \Arg{true code} \Arg{false code}
-% \end{quote}
-% If any of the tests succeeds, it calls \cs{@@_break_true:w},
-% which cleans up and leaves \meta{true code} in the input stream.
-% Otherwise, \cs{@@_break_point:TF} leaves the \meta{false code}
-% in the input stream.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_break_true:w
- #1 \@@_break_point:TF #2 #3 {#2}
-\cs_new_protected:Npn \@@_break_point:TF #1 #2 { #2 }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_item_reverse:n}
-% This function makes showing regular expressions easier, and lets us
-% define |\D| in terms of |\d| for instance. There is a subtlety: the
-% end of the query is marked by $-2$, and thus matches |\D| and
-% other negated properties; this case is caught by another part of
-% the code.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_item_reverse:n #1
- {
- #1
- \@@_break_point:TF { } \@@_break_true:w
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {\@@_item_caseful_equal:n, \@@_item_caseful_range:nn}
-% Simple comparisons triggering \cs{@@_break_true:w} when true.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_item_caseful_equal:n #1
- {
- \if_int_compare:w #1 = \l_@@_curr_char_int
- \exp_after:wN \@@_break_true:w
- \fi:
- }
-\cs_new_protected:Npn \@@_item_caseful_range:nn #1 #2
- {
- \reverse_if:N \if_int_compare:w #1 > \l_@@_curr_char_int
- \reverse_if:N \if_int_compare:w #2 < \l_@@_curr_char_int
- \exp_after:wN \exp_after:wN \exp_after:wN \@@_break_true:w
- \fi:
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {\@@_item_caseless_equal:n, \@@_item_caseless_range:nn}
-% For caseless matching, we perform the test both on the
-% \texttt{curr_char} and on the \texttt{case_changed_char}. Before
-% doing the second set of tests, we make sure that
-% \texttt{case_changed_char} has been computed.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_item_caseless_equal:n #1
- {
- \if_int_compare:w #1 = \l_@@_curr_char_int
- \exp_after:wN \@@_break_true:w
- \fi:
- \@@_maybe_compute_ccc:
- \if_int_compare:w #1 = \l_@@_case_changed_char_int
- \exp_after:wN \@@_break_true:w
- \fi:
- }
-\cs_new_protected:Npn \@@_item_caseless_range:nn #1 #2
- {
- \reverse_if:N \if_int_compare:w #1 > \l_@@_curr_char_int
- \reverse_if:N \if_int_compare:w #2 < \l_@@_curr_char_int
- \exp_after:wN \exp_after:wN \exp_after:wN \@@_break_true:w
- \fi:
- \fi:
- \@@_maybe_compute_ccc:
- \reverse_if:N \if_int_compare:w #1 > \l_@@_case_changed_char_int
- \reverse_if:N \if_int_compare:w #2 < \l_@@_case_changed_char_int
- \exp_after:wN \exp_after:wN \exp_after:wN \@@_break_true:w
- \fi:
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_compute_case_changed_char:}
-% This function is called when \cs{l_@@_case_changed_char_int} has
-% not yet been computed. If the current character code is in the range
-% $[65,90]$ (upper-case), then add $32$, making it lowercase. If it is
-% in the lower-case letter range $[97,122]$, subtract $32$.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_compute_case_changed_char:
- {
- \int_set_eq:NN \l_@@_case_changed_char_int \l_@@_curr_char_int
- \if_int_compare:w \l_@@_curr_char_int > `Z \exp_stop_f:
- \if_int_compare:w \l_@@_curr_char_int > `z \exp_stop_f: \else:
- \if_int_compare:w \l_@@_curr_char_int < `a \exp_stop_f: \else:
- \int_sub:Nn \l_@@_case_changed_char_int \c_@@_ascii_lower_int
- \fi:
- \fi:
- \else:
- \if_int_compare:w \l_@@_curr_char_int < `A \exp_stop_f: \else:
- \int_add:Nn \l_@@_case_changed_char_int \c_@@_ascii_lower_int
- \fi:
- \fi:
- \cs_set_eq:NN \@@_maybe_compute_ccc: \prg_do_nothing:
- }
-\cs_new_eq:NN \@@_maybe_compute_ccc: \@@_compute_case_changed_char:
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_item_equal:n, \@@_item_range:nn}
-% Those must always be defined to expand to a \texttt{caseful}
-% (default) or \texttt{caseless} version, and not be protected: they
-% must expand when compiling, to hard-code which tests are caseless or
-% caseful.
-% \begin{macrocode}
-\cs_new_eq:NN \@@_item_equal:n ?
-\cs_new_eq:NN \@@_item_range:nn ?
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_item_catcode:nT, \@@_item_catcode_reverse:nT}
-% \begin{macro}{\@@_item_catcode:}
-% The argument is a sum of powers of $4$ with exponents given by the
-% allowed category codes (between $0$ and $13$). Dividing by a given
-% power of $4$ gives an odd result if and only if that category code
-% is allowed. If the catcode does not match, then skip the character
-% code tests which follow.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_item_catcode:
- {
- "
- \if_case:w \l_@@_curr_catcode_int
- 1 \or: 4 \or: 10 \or: 40
- \or: 100 \or: \or: 1000 \or: 4000
- \or: 10000 \or: \or: 100000 \or: 400000
- \or: 1000000 \or: 4000000 \else: 1*0
- \fi:
- }
-\prg_new_protected_conditional:Npnn \@@_item_catcode:n #1 { T }
- {
- \if_int_odd:w \@@_int_eval:w #1 / \@@_item_catcode: \scan_stop:
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-\cs_new_protected:Npn \@@_item_catcode_reverse:nT #1#2
- { \@@_item_catcode:nT {#1} { \@@_item_reverse:n {#2} } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_item_exact:nn, \@@_item_exact_cs:n}
-% This matches an exact \meta{category}-\meta{character code} pair, or
-% an exact control sequence, more precisely one of several possible
-% control sequences, separated by \cs{scan_stop:}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_item_exact:nn #1#2
- {
- \if_int_compare:w #1 = \l_@@_curr_catcode_int
- \if_int_compare:w #2 = \l_@@_curr_char_int
- \exp_after:wN \exp_after:wN \exp_after:wN \@@_break_true:w
- \fi:
- \fi:
- }
-\cs_new_protected:Npn \@@_item_exact_cs:n #1
- {
- \int_compare:nNnTF \l_@@_curr_catcode_int = \c_zero_int
- {
- \__kernel_tl_set:Nx \l_@@_internal_a_tl
- { \scan_stop: \@@_curr_cs_to_str: \scan_stop: }
- \tl_if_in:noTF { \scan_stop: #1 \scan_stop: }
- \l_@@_internal_a_tl
- { \@@_break_true:w } { }
- }
- { }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_item_cs:n}
-% Match a control sequence (the argument is a compiled regex).
-% First test the catcode of the current token to be zero.
-% Then perform the matching test, and break if the csname
-% indeed matches.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_item_cs:n #1
- {
- \int_compare:nNnT \l_@@_curr_catcode_int = \c_zero_int
- {
- \group_begin:
- \@@_single_match:
- \@@_disable_submatches:
- \@@_build_for_cs:n {#1}
- \bool_set_eq:NN \l_@@_saved_success_bool
- \g_@@_success_bool
- \exp_args:Ne \@@_match_cs:n { \@@_curr_cs_to_str: }
- \if_meaning:w \c_true_bool \g_@@_success_bool
- \group_insert_after:N \@@_break_true:w
- \fi:
- \bool_gset_eq:NN \g_@@_success_bool
- \l_@@_saved_success_bool
- \group_end:
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Character property tests}
-%
-% \begin{macro}
-% {
-% \@@_prop_d:, \@@_prop_h:, \@@_prop_s:,
-% \@@_prop_v:, \@@_prop_w:, \@@_prop_N:
-% }
-% Character property tests for |\d|, |\W|, \emph{etc.} These character
-% properties are not affected by the |(?i)| option. The characters
-% recognized by each one are as follows: |\d=[0-9]|,
-% |\w=[0-9A-Z_a-z]|, \verb*+\s=[\ \^^I\^^J\^^L\^^M]+,
-% \verb*+\h=[\ \^^I]+, |\v=[\^^J-\^^M]|, and the upper case
-% counterparts match anything that the lower case does not match. The
-% order in which the various tests appear is optimized for usual
-% mostly lower case letter text.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_prop_d:
- { \@@_item_caseful_range:nn { `0 } { `9 } }
-\cs_new_protected:Npn \@@_prop_h:
- {
- \@@_item_caseful_equal:n { `\ }
- \@@_item_caseful_equal:n { `\^^I }
- }
-\cs_new_protected:Npn \@@_prop_s:
- {
- \@@_item_caseful_equal:n { `\ }
- \@@_item_caseful_equal:n { `\^^I }
- \@@_item_caseful_equal:n { `\^^J }
- \@@_item_caseful_equal:n { `\^^L }
- \@@_item_caseful_equal:n { `\^^M }
- }
-\cs_new_protected:Npn \@@_prop_v:
- { \@@_item_caseful_range:nn { `\^^J } { `\^^M } } % lf, vtab, ff, cr
-\cs_new_protected:Npn \@@_prop_w:
- {
- \@@_item_caseful_range:nn { `a } { `z }
- \@@_item_caseful_range:nn { `A } { `Z }
- \@@_item_caseful_range:nn { `0 } { `9 }
- \@@_item_caseful_equal:n { `_ }
- }
-\cs_new_protected:Npn \@@_prop_N:
- {
- \@@_item_reverse:n
- { \@@_item_caseful_equal:n { `\^^J } }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \@@_posix_alnum:, \@@_posix_alpha:, \@@_posix_ascii:,
-% \@@_posix_blank:, \@@_posix_cntrl:, \@@_posix_digit:,
-% \@@_posix_graph:, \@@_posix_lower:, \@@_posix_print:,
-% \@@_posix_punct:, \@@_posix_space:, \@@_posix_upper:,
-% \@@_posix_word: , \@@_posix_xdigit:
-% }
-% \textsc{posix} properties. No surprise.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_posix_alnum:
- { \@@_posix_alpha: \@@_posix_digit: }
-\cs_new_protected:Npn \@@_posix_alpha:
- { \@@_posix_lower: \@@_posix_upper: }
-\cs_new_protected:Npn \@@_posix_ascii:
- {
- \@@_item_caseful_range:nn
- \c_@@_ascii_min_int
- \c_@@_ascii_max_int
- }
-\cs_new_eq:NN \@@_posix_blank: \@@_prop_h:
-\cs_new_protected:Npn \@@_posix_cntrl:
- {
- \@@_item_caseful_range:nn
- \c_@@_ascii_min_int
- \c_@@_ascii_max_control_int
- \@@_item_caseful_equal:n \c_@@_ascii_max_int
- }
-\cs_new_eq:NN \@@_posix_digit: \@@_prop_d:
-\cs_new_protected:Npn \@@_posix_graph:
- { \@@_item_caseful_range:nn { `! } { `\~ } }
-\cs_new_protected:Npn \@@_posix_lower:
- { \@@_item_caseful_range:nn { `a } { `z } }
-\cs_new_protected:Npn \@@_posix_print:
- { \@@_item_caseful_range:nn { `\ } { `\~ } }
-\cs_new_protected:Npn \@@_posix_punct:
- {
- \@@_item_caseful_range:nn { `! } { `/ }
- \@@_item_caseful_range:nn { `: } { `@ }
- \@@_item_caseful_range:nn { `[ } { `` }
- \@@_item_caseful_range:nn { `\{ } { `\~ }
- }
-\cs_new_protected:Npn \@@_posix_space:
- {
- \@@_item_caseful_equal:n { `\ }
- \@@_item_caseful_range:nn { `\^^I } { `\^^M }
- }
-\cs_new_protected:Npn \@@_posix_upper:
- { \@@_item_caseful_range:nn { `A } { `Z } }
-\cs_new_eq:NN \@@_posix_word: \@@_prop_w:
-\cs_new_protected:Npn \@@_posix_xdigit:
- {
- \@@_posix_digit:
- \@@_item_caseful_range:nn { `A } { `F }
- \@@_item_caseful_range:nn { `a } { `f }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Simple character escape}
-%
-% Before actually parsing the regular expression or the replacement
-% text, we go through them once, converting |\n| to the character $10$,
-% \emph{etc.} In this pass, we also convert any special character
-% (\texttt{*}, \texttt{?}, \texttt{\{}, etc.) or escaped alphanumeric
-% character into a marker indicating that this was a special sequence,
-% and replace escaped special characters and non-escaped alphanumeric
-% characters by markers indicating that those were \enquote{raw}
-% characters. The rest of the code can then avoid caring about escaping
-% issues (those can become quite complex to handle in combination with
-% ranges in character classes).
-%
-% Usage: \cs{@@_escape_use:nnnn} \meta{inline~1} \meta{inline~2}
-% \meta{inline~3} \Arg{token list} The \meta{token list} is converted to
-% a string, then read from left to right, interpreting backslashes as
-% escaping the next character. Unescaped characters are fed to the
-% function \meta{inline~1}, and escaped characters are fed to the function
-% \meta{inline~2} within an \texttt{e}-expansion context (typically those
-% functions perform some tests on their argument to decide how to output
-% them). The escape sequences |\a|, |\e|, |\f|, |\n|, |\r|, |\t| and
-% |\x| are recognized, and those are replaced by the corresponding
-% character, then fed to \meta{inline~3}. The result is then left in the
-% input stream. Spaces are ignored unless escaped.
-%
-% The conversion is done within an \texttt{e}-expanding assignment.
-%
-% \begin{macro}{\@@_escape_use:nnnn}
-% The result is built in \cs{l_@@_internal_a_tl}, which is then left
-% in the input stream. Tracing code is added as appropriate inside
-% this token list. Go through |#4| once, applying |#1|,
-% |#2|, or |#3| as relevant to each character (after de-escaping
-% it).
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_escape_use:nnnn #1#2#3#4
- {
- \group_begin:
- \tl_clear:N \l_@@_internal_a_tl
- \cs_set:Npn \@@_escape_unescaped:N ##1 { #1 }
- \cs_set:Npn \@@_escape_escaped:N ##1 { #2 }
- \cs_set:Npn \@@_escape_raw:N ##1 { #3 }
- \@@_standard_escapechar:
- \__kernel_tl_gset:Nx \g_@@_internal_tl
- { \__kernel_str_to_other_fast:n {#4} }
- \tl_put_right:Ne \l_@@_internal_a_tl
- {
- \exp_after:wN \@@_escape_loop:N \g_@@_internal_tl
- \scan_stop: \prg_break_point:
- }
- \exp_after:wN
- \group_end:
- \l_@@_internal_a_tl
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_escape_loop:N}
-% \begin{macro}+\@@_escape_\:w+
-% \cs{@@_escape_loop:N} reads one character: if it is special
-% (space, backslash, or end-marker), perform the associated action,
-% otherwise it is simply an unescaped character. After a backslash,
-% the same is done, but unknown characters are \enquote{escaped}.
-% \begin{macrocode}
-\cs_new:Npn \@@_escape_loop:N #1
- {
- \cs_if_exist_use:cF { @@_escape_\token_to_str:N #1:w }
- { \@@_escape_unescaped:N #1 }
- \@@_escape_loop:N
- }
-\cs_new:cpn { @@_escape_ \c_backslash_str :w }
- \@@_escape_loop:N #1
- {
- \cs_if_exist_use:cF { @@_escape_/\token_to_str:N #1:w }
- { \@@_escape_escaped:N #1 }
- \@@_escape_loop:N
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {\@@_escape_unescaped:N, \@@_escape_escaped:N, \@@_escape_raw:N}
-% Those functions are never called before being given a new meaning,
-% so their definitions here don't matter.
-% \begin{macrocode}
-\cs_new_eq:NN \@@_escape_unescaped:N ?
-\cs_new_eq:NN \@@_escape_escaped:N ?
-\cs_new_eq:NN \@@_escape_raw:N ?
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \@@_escape_\scan_stop::w, \@@_escape_/\scan_stop::w,
-% \@@_escape_/a:w, \@@_escape_/e:w, \@@_escape_/f:w,
-% \@@_escape_/n:w, \@@_escape_/r:w, \@@_escape_/t:w
-% }
-% \begin{macro}+\@@_escape_ :w+
-% The loop is ended upon seeing the end-marker
-% \enquote{\texttt{break}}, with an error if the string ended in a
-% backslash. Spaces are ignored, and |\a|, |\e|, |\f|, |\n|, |\r|,
-% |\t| take their meaning here.
-% \begin{macrocode}
-\cs_new_eq:cN { @@_escape_ \iow_char:N\\scan_stop: :w } \prg_break:
-\cs_new:cpn { @@_escape_/ \iow_char:N\\scan_stop: :w }
- {
- \msg_expandable_error:nn { regex } { trailing-backslash }
- \prg_break:
- }
-\cs_new:cpn { @@_escape_~:w } { }
-\cs_new:cpe { @@_escape_/a:w }
- { \exp_not:N \@@_escape_raw:N \iow_char:N \^^G }
-\cs_new:cpe { @@_escape_/t:w }
- { \exp_not:N \@@_escape_raw:N \iow_char:N \^^I }
-\cs_new:cpe { @@_escape_/n:w }
- { \exp_not:N \@@_escape_raw:N \iow_char:N \^^J }
-\cs_new:cpe { @@_escape_/f:w }
- { \exp_not:N \@@_escape_raw:N \iow_char:N \^^L }
-\cs_new:cpe { @@_escape_/r:w }
- { \exp_not:N \@@_escape_raw:N \iow_char:N \^^M }
-\cs_new:cpe { @@_escape_/e:w }
- { \exp_not:N \@@_escape_raw:N \iow_char:N \^^[ }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_escape_/x:w}
-% \begin{macro}{\@@_escape_x_end:w, \@@_escape_x_large:n}
-% When |\x| is encountered, \cs{@@_escape_x_test:N} is responsible for
-% grabbing some hexadecimal digits, and feeding the result to
-% \cs{@@_escape_x_end:w}. If the number is too big interrupt the
-% assignment and produce an error, otherwise call \cs{@@_escape_raw:N}
-% on the corresponding character token.
-% \begin{macrocode}
-\cs_new:cpn { @@_escape_/x:w } \@@_escape_loop:N
- {
- \exp_after:wN \@@_escape_x_end:w
- \int_value:w "0 \@@_escape_x_test:N
- }
-\cs_new:Npn \@@_escape_x_end:w #1 ;
- {
- \int_compare:nNnTF {#1} > \c_max_char_int
- {
- \msg_expandable_error:nnff { regex } { x-overflow }
- {#1} { \int_to_Hex:n {#1} }
- }
- {
- \exp_last_unbraced:Nf \@@_escape_raw:N
- { \char_generate:nn {#1} { 12 } }
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_escape_x_test:N, \@@_escape_x_testii:N}
-% Find out whether the first character is a left brace (allowing any
-% number of hexadecimal digits), or not (allowing up to two
-% hexadecimal digits). We need to check for the end-of-string marker.
-% Eventually, call either \cs{@@_escape_x_loop:N} or
-% \cs{@@_escape_x:N}.
-% \begin{macrocode}
-\cs_new:Npn \@@_escape_x_test:N #1
- {
- \if_meaning:w \scan_stop: #1
- \exp_after:wN \use_i:nnn \exp_after:wN ;
- \fi:
- \use:n
- {
- \if_charcode:w \c_space_token #1
- \exp_after:wN \@@_escape_x_test:N
- \else:
- \exp_after:wN \@@_escape_x_testii:N
- \exp_after:wN #1
- \fi:
- }
- }
-\cs_new:Npn \@@_escape_x_testii:N #1
- {
- \if_charcode:w \c_left_brace_str #1
- \exp_after:wN \@@_escape_x_loop:N
- \else:
- \@@_hexadecimal_use:NTF #1
- { \exp_after:wN \@@_escape_x:N }
- { ; \exp_after:wN \@@_escape_loop:N \exp_after:wN #1 }
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_escape_x:N}
-% This looks for the second digit in the unbraced case.
-% \begin{macrocode}
-\cs_new:Npn \@@_escape_x:N #1
- {
- \if_meaning:w \scan_stop: #1
- \exp_after:wN \use_i:nnn \exp_after:wN ;
- \fi:
- \use:n
- {
- \@@_hexadecimal_use:NTF #1
- { ; \@@_escape_loop:N }
- { ; \@@_escape_loop:N #1 }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_escape_x_loop:N, \@@_escape_x_loop_error:}
-% Grab hexadecimal digits, skip spaces, and at the end, check that
-% there is a right brace, otherwise raise an error outside the
-% assignment.
-% \begin{macrocode}
-\cs_new:Npn \@@_escape_x_loop:N #1
- {
- \if_meaning:w \scan_stop: #1
- \exp_after:wN \use_ii:nnn
- \fi:
- \use_ii:nn
- { ; \@@_escape_x_loop_error:n { } {#1} }
- {
- \@@_hexadecimal_use:NTF #1
- { \@@_escape_x_loop:N }
- {
- \token_if_eq_charcode:NNTF \c_space_token #1
- { \@@_escape_x_loop:N }
- {
- ;
- \exp_after:wN
- \token_if_eq_charcode:NNTF \c_right_brace_str #1
- { \@@_escape_loop:N }
- { \@@_escape_x_loop_error:n {#1} }
- }
- }
- }
- }
-\cs_new:Npn \@@_escape_x_loop_error:n #1
- {
- \msg_expandable_error:nnn { regex } { x-missing-rbrace } {#1}
- \@@_escape_loop:N #1
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_hexadecimal_use:NTF}
-% \TeX{} detects uppercase hexadecimal digits for us but not the
-% lowercase letters, which we need to detect and replace by their
-% uppercase counterpart.
-% \begin{macrocode}
-\cs_new:Npn \@@_hexadecimal_use:NTF #1
- {
- \if_int_compare:w \c_one_int < "1 \token_to_str:N #1 \exp_stop_f:
- #1
- \else:
- \if_case:w
- \@@_int_eval:w \exp_after:wN ` \token_to_str:N #1 - `a \scan_stop:
- A
- \or: B
- \or: C
- \or: D
- \or: E
- \or: F
- \else:
- \exp_after:wN \exp_after:wN \exp_after:wN \use_iii:nnn
- \fi:
- \fi:
- \use_i:nn
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {\@@_char_if_alphanumeric:NTF, \@@_char_if_special:NTF}
-% These two tests are used in the first pass when parsing a regular
-% expression. That pass is responsible for finding escaped and
-% non-escaped characters, and recognizing which ones have special
-% meanings and which should be interpreted as \enquote{raw}
-% characters. Namely,
-% \begin{itemize}
-% \item alphanumerics are \enquote{raw} if they are not escaped, and
-% may have a special meaning when escaped;
-% \item non-alphanumeric printable ascii characters are
-% \enquote{raw} if they are escaped, and may have a special
-% meaning when not escaped;
-% \item characters other than printable ascii are always
-% \enquote{raw}.
-% \end{itemize}
-% The code is ugly, and highly based on magic numbers and the ascii
-% codes of characters. This is mostly unavoidable for performance
-% reasons. Maybe the tests can be optimized a little bit more.
-% Here, \enquote{alphanumeric} means \texttt{0}--\texttt{9},
-% \texttt{A}--\texttt{Z}, \texttt{a}--\texttt{z};
-% \enquote{special} character means non-alphanumeric
-% but printable ascii, from space (hex \texttt{20}) to
-% \texttt{del} (hex \texttt{7E}).
-% \begin{macrocode}
-\prg_new_conditional:Npnn \@@_char_if_special:N #1 { TF }
- {
- \if:w
- T
- \if_int_compare:w `#1 > `Z \exp_stop_f:
- \if_int_compare:w `#1 > `z \exp_stop_f:
- \if_int_compare:w `#1 < \c_@@_ascii_max_int
- \else: F \fi:
- \else:
- \if_int_compare:w `#1 < `a \exp_stop_f:
- \else: F \fi:
- \fi:
- \else:
- \if_int_compare:w `#1 > `9 \exp_stop_f:
- \if_int_compare:w `#1 < `A \exp_stop_f:
- \else: F \fi:
- \else:
- \if_int_compare:w `#1 < `0 \exp_stop_f:
- \if_int_compare:w `#1 < `\ \exp_stop_f:
- F \fi:
- \else: F \fi:
- \fi:
- \fi:
- T
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-\prg_new_conditional:Npnn \@@_char_if_alphanumeric:N #1 { TF }
- {
- \if:w
- T
- \if_int_compare:w `#1 > `Z \exp_stop_f:
- \if_int_compare:w `#1 > `z \exp_stop_f:
- F
- \else:
- \if_int_compare:w `#1 < `a \exp_stop_f:
- F \fi:
- \fi:
- \else:
- \if_int_compare:w `#1 > `9 \exp_stop_f:
- \if_int_compare:w `#1 < `A \exp_stop_f:
- F \fi:
- \else:
- \if_int_compare:w `#1 < `0 \exp_stop_f:
- F \fi:
- \fi:
- \fi:
- T
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Compiling}
-%
-% A regular expression starts its life as a string of characters. In
-% this section, we convert it to internal instructions, resulting in a
-% \enquote{compiled} regular expression. This compiled expression is
-% then turned into states of an automaton in the building
-% phase. Compiled regular expressions consist of the following:
-% \begin{itemize}
-% \item \cs{@@_class:NnnnN} \meta{boolean} \Arg{tests} \Arg{min}
-% \Arg{more} \meta{lazyness}
-% \item \cs{@@_group:nnnN} \Arg{branches} \Arg{min} \Arg{more}
-% \meta{lazyness}, also \cs{@@_group_no_capture:nnnN} and
-% \cs{@@_group_resetting:nnnN} with the same syntax.
-% \item \cs{@@_branch:n} \Arg{contents}
-% \item \cs{@@_command_K:}
-% \item \cs{@@_assertion:Nn} \meta{boolean} \Arg{assertion test},
-% where the \meta{assertion test} is \cs{@@_b_test:} or
-% \cs{@@_Z_test:} or \cs{@@_A_test:} or \cs{@@_G_test:}
-% \end{itemize}
-% Tests can be the following:
-% \begin{itemize}
-% \item \cs{@@_item_caseful_equal:n} \Arg{char code}
-% \item \cs{@@_item_caseless_equal:n} \Arg{char code}
-% \item \cs{@@_item_caseful_range:nn} \Arg{min} \Arg{max}
-% \item \cs{@@_item_caseless_range:nn} \Arg{min} \Arg{max}
-% \item \cs{@@_item_catcode:nT} \Arg{catcode bitmap} \Arg{tests}
-% \item \cs{@@_item_catcode_reverse:nT} \Arg{catcode bitmap} \Arg{tests}
-% \item \cs{@@_item_reverse:n} \Arg{tests}
-% \item \cs{@@_item_exact:nn} \Arg{catcode} \Arg{char code}
-% \item \cs{@@_item_exact_cs:n} \Arg{csnames}, more precisely given as
-% \meta{csname} \cs{scan_stop:} \meta{csname} \cs{scan_stop:}
-% \meta{csname} and so on in a brace group.
-% \item \cs{@@_item_cs:n} \Arg{compiled regex}
-% \end{itemize}
-%
-% \subsubsection{Variables used when compiling}
-%
-% \begin{variable}{\l_@@_group_level_int}
-% We make sure to open the same number of groups as we close.
-% \begin{macrocode}
-\int_new:N \l_@@_group_level_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_mode_int}
-% \begin{variable}
-% {
-% \c_@@_cs_in_class_mode_int,
-% \c_@@_cs_mode_int,
-% \c_@@_outer_mode_int,
-% \c_@@_catcode_mode_int,
-% \c_@@_class_mode_int,
-% \c_@@_catcode_in_class_mode_int
-% }
-% While compiling, ten modes are recognized, labelled $-63$, $-23$,
-% $-6$, $-2$, $0$, $2$, $3$, $6$, $23$, $63$. See
-% section~\ref{sec:regex-modes}. We only define some of these as
-% constants.
-% \begin{macrocode}
-\int_new:N \l_@@_mode_int
-\int_const:Nn \c_@@_cs_in_class_mode_int { -6 }
-\int_const:Nn \c_@@_cs_mode_int { -2 }
-\int_const:Nn \c_@@_outer_mode_int { 0 }
-\int_const:Nn \c_@@_catcode_mode_int { 2 }
-\int_const:Nn \c_@@_class_mode_int { 3 }
-\int_const:Nn \c_@@_catcode_in_class_mode_int { 6 }
-% \end{macrocode}
-% \end{variable}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_catcodes_int, \l_@@_default_catcodes_int}
-% \begin{variable}{\l_@@_catcodes_bool}
-% We wish to allow constructions such as |\c[^BE](..\cL[a-z]..)|,
-% where the outer catcode test applies to the whole group, but is
-% superseded by the inner catcode test. For this to work, we need to
-% keep track of lists of allowed category codes:
-% \cs{l_@@_catcodes_int} and \cs{l_@@_default_catcodes_int} are
-% bitmaps, sums of $4^c$, for all allowed catcodes $c$. The latter is
-% local to each capturing group, and we reset
-% \cs{l_@@_catcodes_int} to that value after each character or
-% class, changing it only when encountering a |\c| escape. The boolean
-% records whether the list of categories of a catcode test has to be
-% inverted: compare |\c[^BE]| and |\c[BE]|.
-% \begin{macrocode}
-\int_new:N \l_@@_catcodes_int
-\int_new:N \l_@@_default_catcodes_int
-\bool_new:N \l_@@_catcodes_bool
-% \end{macrocode}
-% \end{variable}
-% \end{variable}
-%
-% \begin{variable}
-% {
-% \c_@@_catcode_C_int, \c_@@_catcode_B_int, \c_@@_catcode_E_int,
-% \c_@@_catcode_M_int, \c_@@_catcode_T_int, \c_@@_catcode_P_int,
-% \c_@@_catcode_U_int, \c_@@_catcode_D_int, \c_@@_catcode_S_int,
-% \c_@@_catcode_L_int, \c_@@_catcode_O_int, \c_@@_catcode_A_int
-% }
-% \begin{variable}{\c_@@_all_catcodes_int}
-% Constants: $4^c$ for each category, and the sum of all powers of $4$.
-% \begin{macrocode}
-\int_const:Nn \c_@@_catcode_C_int { "1 }
-\int_const:Nn \c_@@_catcode_B_int { "4 }
-\int_const:Nn \c_@@_catcode_E_int { "10 }
-\int_const:Nn \c_@@_catcode_M_int { "40 }
-\int_const:Nn \c_@@_catcode_T_int { "100 }
-\int_const:Nn \c_@@_catcode_P_int { "1000 }
-\int_const:Nn \c_@@_catcode_U_int { "4000 }
-\int_const:Nn \c_@@_catcode_D_int { "10000 }
-\int_const:Nn \c_@@_catcode_S_int { "100000 }
-\int_const:Nn \c_@@_catcode_L_int { "400000 }
-\int_const:Nn \c_@@_catcode_O_int { "1000000 }
-\int_const:Nn \c_@@_catcode_A_int { "4000000 }
-\int_const:Nn \c_@@_all_catcodes_int { "5515155 }
-% \end{macrocode}
-% \end{variable}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_internal_regex}
-% The compilation step stores its result in this variable.
-% \begin{macrocode}
-\cs_new_eq:NN \l_@@_internal_regex \c_@@_no_match_regex
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_show_prefix_seq}
-% This sequence holds the prefix that makes up the line displayed to
-% the user. The various items must be removed from the right, which is
-% tricky with a token list, hence we use a sequence.
-% \begin{macrocode}
-\seq_new:N \l_@@_show_prefix_seq
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_show_lines_int}
-% A hack. To know whether a given class has a single item in it or
-% not, we count the number of lines when showing the class.
-% \begin{macrocode}
-\int_new:N \l_@@_show_lines_int
-% \end{macrocode}
-% \end{variable}
-%
-% \subsubsection{Generic helpers used when compiling}
-%
-% \begin{macro}{\@@_two_if_eq:NNNNTF}
-% Used to compare pairs of things like \cs{@@_compile_special:N} |?|
-% together. It's often inconvenient to get the catcodes of the
-% character to match so we just compare the character code.
-% Besides, the expanding behaviour of \cs{if:w} is very useful as that
-% means we can use \cs{c_left_brace_str} and the like.
-% \begin{macrocode}
-\cs_new:Npn \@@_two_if_eq:NNNNTF #1#2#3#4
- {
- \if_meaning:w #1 #3
- \if:w #2 #4
- \exp_after:wN \exp_after:wN \exp_after:wN \use_ii:nnn
- \fi:
- \fi:
- \use_ii:nn
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_get_digits:NTFw}
-% \begin{macro}[rEXP]{\@@_get_digits_loop:w}
-% If followed by some raw digits, collect them one by one in the
-% integer variable |#1|, and take the \texttt{true} branch. Otherwise,
-% take the \texttt{false} branch.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_get_digits:NTFw #1#2#3#4#5
- {
- \@@_if_raw_digit:NNTF #4 #5
- { #1 = #5 \@@_get_digits_loop:nw {#2} }
- { #3 #4 #5 }
- }
-\cs_new:Npn \@@_get_digits_loop:nw #1#2#3
- {
- \@@_if_raw_digit:NNTF #2 #3
- { #3 \@@_get_digits_loop:nw {#1} }
- { \scan_stop: #1 #2 #3 }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_if_raw_digit:NNTF}
-% Test used when grabbing digits for the |{m,n}| quantifier.
-% It only accepts non-escaped digits.
-% \begin{macrocode}
-\cs_new:Npn \@@_if_raw_digit:NNTF #1#2
- {
- \if_meaning:w \@@_compile_raw:N #1
- \if_int_compare:w \c_one_int < 1 #2 \exp_stop_f:
- \exp_after:wN \exp_after:wN \exp_after:wN \use_ii:nnn
- \fi:
- \fi:
- \use_ii:nn
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Mode}
-% \label{sec:regex-modes}
-%
-% When compiling the \textsc{nfa} corresponding to a given regex string,
-% we can be in ten distinct modes, which we label by some magic numbers:
-% \begin{itemize}
-% \item[-6] |[\c{...}]| control sequence in a class,
-% \item[-2] |\c{...}| control sequence,
-% \item[0] |...| outer,
-% \item[2] |\c...| catcode test,
-% \item[6] |[\c...]| catcode test in a class,
-% \item[-63] |[\c{[...]}]| class inside mode $-6$,
-% \item[-23] |\c{[...]}| class inside mode $-2$,
-% \item[3] |[...]| class inside mode $0$,
-% \item[23] |\c[...]| class inside mode $2$,
-% \item[63] |[\c[...]]| class inside mode $6$.
-% \end{itemize}
-% This list is exhaustive, because |\c| escape sequences cannot be
-% nested, and character classes cannot be nested directly. The choice of
-% numbers is such as to optimize the most useful tests, and make
-% transitions from one mode to another as simple as possible.
-% \begin{itemize}
-% \item Even modes mean that we are not directly in a character class.
-% In this case, a left bracket appends $3$ to the mode. In a
-% character class, a right bracket changes the mode as $m\to
-% (m-15)/13$, truncated.
-% \item Grouping, assertion, and anchors are allowed in non-positive
-% even modes ($0$, $-2$, $-6$), and do not change the
-% mode. Otherwise, they trigger an error.
-% \item A left bracket is special in even modes, appending $3$ to the
-% mode; in those modes, quantifiers and the dot are recognized, and
-% the right bracket is normal. In odd modes (within classes), the
-% left bracket is normal, but the right bracket ends the class,
-% changing the mode from $m$ to $(m-15)/13$, truncated; also, ranges
-% are recognized.
-% \item In non-negative modes, left and right braces are normal. In
-% negative modes, however, left braces trigger a warning; right
-% braces end the control sequence, going from $-2$ to $0$ or $-6$ to
-% $3$, with error recovery for odd modes.
-% \item Properties (such as the |\d| character class) can appear in
-% any mode.
-% \end{itemize}
-%
-% \begin{macro}[EXP]{\@@_if_in_class:TF}
-% Test whether we are directly in a character class (at the innermost
-% level of nesting). There, many escape sequences are not recognized,
-% and special characters are normal. Also, for every raw character, we
-% must look ahead for a possible raw dash.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \@@_if_in_class: { TF }
- {
- \if_int_odd:w \l_@@_mode_int
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_if_in_cs:TF}
-% Right braces are special only directly inside control sequences (at
-% the inner-most level of nesting, not counting groups).
-% \begin{macrocode}
-\cs_new:Npn \@@_if_in_cs:TF
- {
- \if_int_odd:w \l_@@_mode_int
- \else:
- \if_int_compare:w \l_@@_mode_int < \c_@@_outer_mode_int
- \exp_after:wN \exp_after:wN \exp_after:wN \use_ii:nnn
- \fi:
- \fi:
- \use_ii:nn
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_if_in_class_or_catcode:TF}
-% Assertions are only allowed in modes $0$, $-2$, and $-6$,
-% \emph{i.e.}, even, non-positive modes.
-% \begin{macrocode}
-\cs_new:Npn \@@_if_in_class_or_catcode:TF
- {
- \if_int_odd:w \l_@@_mode_int
- \else:
- \if_int_compare:w \l_@@_mode_int > \c_@@_outer_mode_int
- \else:
- \exp_after:wN \exp_after:wN \exp_after:wN \use_iii:nnn
- \fi:
- \fi:
- \use_i:nn
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_if_within_catcode:TF}
-% This test takes the true branch if we are in a catcode test, either
-% immediately following it (modes $2$ and $6$) or in a class on which
-% it applies (modes $23$ and $63$). This is used to tweak how left
-% brackets behave in modes $2$ and $6$.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \@@_if_within_catcode: { TF }
- {
- \if_int_compare:w \l_@@_mode_int > \c_@@_outer_mode_int
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_chk_c_allowed:T}
-% The |\c| escape sequence is only allowed in modes $0$ and $3$,
-% \emph{i.e.}, not within any other |\c| escape sequence.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_chk_c_allowed:T
- {
- \if_int_compare:w \l_@@_mode_int = \c_@@_outer_mode_int
- \else:
- \if_int_compare:w \l_@@_mode_int = \c_@@_class_mode_int
- \else:
- \msg_error:nn { regex } { c-bad-mode }
- \exp_after:wN \use_i:nnn
- \fi:
- \fi:
- \use:n
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_mode_quit_c:}
-% This function changes the mode as it is needed just after a catcode
-% test.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_mode_quit_c:
- {
- \if_int_compare:w \l_@@_mode_int = \c_@@_catcode_mode_int
- \int_set_eq:NN \l_@@_mode_int \c_@@_outer_mode_int
- \else:
- \if_int_compare:w \l_@@_mode_int =
- \c_@@_catcode_in_class_mode_int
- \int_set_eq:NN \l_@@_mode_int \c_@@_class_mode_int
- \fi:
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Framework}
-%
-% \begin{macro}{\@@_compile:w, \@@_compile_end:}
-% Used when compiling a user regex or a regex for the |\c{...}| escape
-% sequence within another regex. Start building a token list within a
-% group (with \texttt{e}-expansion at the outset), and set a few
-% variables (group level, catcodes), then start the first branch. At
-% the end, make sure there are no dangling classes nor groups, close
-% the last branch: we are done building \cs{l_@@_internal_regex}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_compile:w
- {
- \group_begin:
- \tl_build_begin:N \l_@@_build_tl
- \int_zero:N \l_@@_group_level_int
- \int_set_eq:NN \l_@@_default_catcodes_int
- \c_@@_all_catcodes_int
- \int_set_eq:NN \l_@@_catcodes_int \l_@@_default_catcodes_int
- \cs_set:Npn \@@_item_equal:n { \@@_item_caseful_equal:n }
- \cs_set:Npn \@@_item_range:nn { \@@_item_caseful_range:nn }
- \tl_build_put_right:Nn \l_@@_build_tl
- { \@@_branch:n { \if_false: } \fi: }
- }
-\cs_new_protected:Npn \@@_compile_end:
- {
- \@@_if_in_class:TF
- {
- \msg_error:nn { regex } { missing-rbrack }
- \use:c { @@_compile_]: }
- \prg_do_nothing: \prg_do_nothing:
- }
- { }
- \if_int_compare:w \l_@@_group_level_int > \c_zero_int
- \msg_error:nne { regex } { missing-rparen }
- { \int_use:N \l_@@_group_level_int }
- \prg_replicate:nn
- \l_@@_group_level_int
- {
- \tl_build_put_right:Nn \l_@@_build_tl
- {
- \if_false: { \fi: }
- \if_false: { \fi: } { 1 } { 0 } \c_true_bool
- }
- \tl_build_end:N \l_@@_build_tl
- \exp_args:NNNo
- \group_end:
- \tl_build_put_right:Nn \l_@@_build_tl
- { \l_@@_build_tl }
- }
- \fi:
- \tl_build_put_right:Nn \l_@@_build_tl { \if_false: { \fi: } }
- \tl_build_end:N \l_@@_build_tl
- \exp_args:NNNe
- \group_end:
- \tl_set:Nn \l_@@_internal_regex { \l_@@_build_tl }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_compile:n}
-% The compilation is done between \cs{@@_compile:w} and
-% \cs{@@_compile_end:}, starting in mode~$0$. Then
-% \cs{@@_escape_use:nnnn} distinguishes special characters, escaped
-% alphanumerics, and raw characters, interpreting |\a|, |\x| and other
-% sequences. The $4$ trailing \cs{prg_do_nothing:} are needed because
-% some functions defined later look up to $4$ tokens ahead. Before
-% ending, make sure that any |\c{...}| is properly closed. No need to
-% check that brackets are closed properly since \cs{@@_compile_end:}
-% does that. However, catch the case of a trailing |\cL|
-% construction.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_compile:n #1
- {
- \@@_compile:w
- \@@_standard_escapechar:
- \int_set_eq:NN \l_@@_mode_int \c_@@_outer_mode_int
- \@@_escape_use:nnnn
- {
- \@@_char_if_special:NTF ##1
- \@@_compile_special:N \@@_compile_raw:N ##1
- }
- {
- \@@_char_if_alphanumeric:NTF ##1
- \@@_compile_escaped:N \@@_compile_raw:N ##1
- }
- { \@@_compile_raw:N ##1 }
- { #1 }
- \prg_do_nothing: \prg_do_nothing:
- \prg_do_nothing: \prg_do_nothing:
- \int_compare:nNnT \l_@@_mode_int = \c_@@_catcode_mode_int
- { \msg_error:nn { regex } { c-trailing } }
- \int_compare:nNnT \l_@@_mode_int < \c_@@_outer_mode_int
- {
- \msg_error:nn { regex } { c-missing-rbrace }
- \@@_compile_end_cs:
- \prg_do_nothing: \prg_do_nothing:
- \prg_do_nothing: \prg_do_nothing:
- }
- \@@_compile_end:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_compile_use:n}
-% Use a regex, regardless of whether it is given as a string (in which
-% case we need to compile) or as a regex variable. This is used for
-% \cs{regex_match_case:nn} and related functions to allow a mixture of
-% explicit regex and regex variables.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_compile_use:n #1
- {
- \tl_if_single_token:nT {#1}
- {
- \exp_after:wN \@@_compile_use_aux:w
- \token_to_meaning:N #1 ~ \q_@@_nil
- }
- \@@_compile:n {#1} \l_@@_internal_regex
- }
-\cs_new_protected:Npn \@@_compile_use_aux:w #1 ~ #2 \q_@@_nil
- {
- \str_if_eq:nnT { #1 ~ } { macro:->\@@_branch:n }
- { \use_ii:nnn }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_compile_escaped:N, \@@_compile_special:N}
-% If the special character or escaped alphanumeric has a particular
-% meaning in regexes, the corresponding function is used. Otherwise,
-% it is interpreted as a raw character. We distinguish special
-% characters from escaped alphanumeric characters because they behave
-% differently when appearing as an end-point of a range.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_compile_special:N #1
- {
- \cs_if_exist_use:cF { @@_compile_#1: }
- { \@@_compile_raw:N #1 }
- }
-\cs_new_protected:Npn \@@_compile_escaped:N #1
- {
- \cs_if_exist_use:cF { @@_compile_/#1: }
- { \@@_compile_raw:N #1 }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_compile_one:n}
-% This is used after finding one \enquote{test}, such as |\d|, or a
-% raw character. If that followed a catcode test (\emph{e.g.}, |\cL|),
-% then restore the mode. If we are not in a class, then the test is
-% \enquote{standalone}, and we need to add \cs{@@_class:NnnnN} and
-% search for quantifiers. In any case, insert the test, possibly
-% together with a catcode test if appropriate.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_compile_one:n #1
- {
- \@@_mode_quit_c:
- \@@_if_in_class:TF { }
- {
- \tl_build_put_right:Nn \l_@@_build_tl
- { \@@_class:NnnnN \c_true_bool { \if_false: } \fi: }
- }
- \tl_build_put_right:Ne \l_@@_build_tl
- {
- \if_int_compare:w \l_@@_catcodes_int <
- \c_@@_all_catcodes_int
- \@@_item_catcode:nT { \int_use:N \l_@@_catcodes_int }
- { \exp_not:N \exp_not:n {#1} }
- \else:
- \exp_not:N \exp_not:n {#1}
- \fi:
- }
- \int_set_eq:NN \l_@@_catcodes_int \l_@@_default_catcodes_int
- \@@_if_in_class:TF { } { \@@_compile_quantifier:w }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {\@@_compile_abort_tokens:n, \@@_compile_abort_tokens:e}
-% This function places the collected tokens back in the input stream,
-% each as a raw character. Spaces are not preserved.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_compile_abort_tokens:n #1
- {
- \use:e
- {
- \exp_args:No \tl_map_function:nN { \tl_to_str:n {#1} }
- \@@_compile_raw:N
- }
- }
-\cs_generate_variant:Nn \@@_compile_abort_tokens:n { e }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Quantifiers}
-%
-% \begin{macro}{\@@_compile_if_quantifier:TFw}
-% This looks ahead and checks whether there are any quantifier
-% (special character equal to either of \texttt{?+*\{}). This is
-% useful for the |\u| and |\ur| escape sequences.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_compile_if_quantifier:TFw #1#2#3#4
- {
- \token_if_eq_meaning:NNTF #3 \@@_compile_special:N
- { \cs_if_exist:cTF { @@_compile_quantifier_#4:w } }
- { \use_ii:nn }
- {#1} {#2} #3 #4
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_compile_quantifier:w}
-% This looks ahead and finds any quantifier (special character equal
-% to either of \texttt{?+*\{}).
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_compile_quantifier:w #1#2
- {
- \token_if_eq_meaning:NNTF #1 \@@_compile_special:N
- {
- \cs_if_exist_use:cF { @@_compile_quantifier_#2:w }
- { \@@_compile_quantifier_none: #1 #2 }
- }
- { \@@_compile_quantifier_none: #1 #2 }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_compile_quantifier_none:}
-% \begin{macro}{\@@_compile_quantifier_abort:eNN}
-% Those functions are called whenever there is no quantifier, or a
-% braced construction is invalid (equivalent to no quantifier, and
-% whatever characters were grabbed are left raw).
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_compile_quantifier_none:
- {
- \tl_build_put_right:Nn \l_@@_build_tl
- { \if_false: { \fi: } { 1 } { 0 } \c_false_bool }
- }
-\cs_new_protected:Npn \@@_compile_quantifier_abort:eNN #1#2#3
- {
- \@@_compile_quantifier_none:
- \msg_warning:nnee { regex } { invalid-quantifier } {#1} {#3}
- \@@_compile_abort_tokens:e {#1}
- #2 #3
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_compile_quantifier_lazyness:nnNN}
-% Once the \enquote{main} quantifier (\texttt{?}, \texttt{*},
-% \texttt{+} or a braced construction) is found, we check whether it
-% is lazy (followed by a question mark). We then add to the compiled
-% regex a closing brace (ending \cs{@@_class:NnnnN} and friends),
-% the start-point of the range, its end-point, and a boolean,
-% \texttt{true} for lazy and \texttt{false} for greedy operators.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_compile_quantifier_lazyness:nnNN #1#2#3#4
- {
- \@@_two_if_eq:NNNNTF #3 #4 \@@_compile_special:N ?
- {
- \tl_build_put_right:Nn \l_@@_build_tl
- { \if_false: { \fi: } { #1 } { #2 } \c_true_bool }
- }
- {
- \tl_build_put_right:Nn \l_@@_build_tl
- { \if_false: { \fi: } { #1 } { #2 } \c_false_bool }
- #3 #4
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \@@_compile_quantifier_?:w,
-% \@@_compile_quantifier_*:w,
-% \@@_compile_quantifier_+:w
-% }
-% For each \enquote{basic} quantifier, |?|, |*|, |+|, feed the correct
-% arguments to \cs{@@_compile_quantifier_lazyness:nnNN}, $-1$ means
-% that there is no upper bound on the number of repetitions.
-% \begin{macrocode}
-\cs_new_protected:cpn { @@_compile_quantifier_?:w }
- { \@@_compile_quantifier_lazyness:nnNN { 0 } { 1 } }
-\cs_new_protected:cpn { @@_compile_quantifier_*:w }
- { \@@_compile_quantifier_lazyness:nnNN { 0 } { -1 } }
-\cs_new_protected:cpn { @@_compile_quantifier_+:w }
- { \@@_compile_quantifier_lazyness:nnNN { 1 } { -1 } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}+\@@_compile_quantifier_{:w+ ^^A}
-% \begin{macro}
-% {
-% \@@_compile_quantifier_braced_auxi:w,
-% \@@_compile_quantifier_braced_auxii:w,
-% \@@_compile_quantifier_braced_auxiii:w,
-% }
-% Three possible syntaxes: \texttt{\{\meta{int}\}},
-% \texttt{\{\meta{int},\}}, or \texttt{\{\meta{int},\meta{int}\}}. Any
-% other syntax causes us to abort and put whatever we collected back
-% in the input stream, as \texttt{raw} characters, including the
-% opening brace. Grab a number into \cs{l_@@_internal_a_int}. If
-% the number is followed by a right brace, the range is $[a,a]$. If
-% followed by a comma, grab one more number, and call the \texttt{_ii}
-% or \texttt{_iii} auxiliary. Those auxiliaries check for a closing
-% brace, leading to the range $[a,\infty]$ or $[a,b]$, encoded as
-% $\{a\}\{-1\}$ and $\{a\}\{b-a\}$.
-% \begin{macrocode}
-\cs_new_protected:cpn { @@_compile_quantifier_ \c_left_brace_str :w }
- {
- \@@_get_digits:NTFw \l_@@_internal_a_int
- { \@@_compile_quantifier_braced_auxi:w }
- { \@@_compile_quantifier_abort:eNN { \c_left_brace_str } }
- }
-\cs_new_protected:Npn \@@_compile_quantifier_braced_auxi:w #1#2
- {
- \str_case_e:nnF { #1 #2 }
- {
- { \@@_compile_special:N \c_right_brace_str }
- {
- \exp_args:No \@@_compile_quantifier_lazyness:nnNN
- { \int_use:N \l_@@_internal_a_int } 0
- }
- { \@@_compile_special:N , }
- {
- \@@_get_digits:NTFw \l_@@_internal_b_int
- { \@@_compile_quantifier_braced_auxiii:w }
- { \@@_compile_quantifier_braced_auxii:w }
- }
- }
- {
- \@@_compile_quantifier_abort:eNN
- { \c_left_brace_str \int_use:N \l_@@_internal_a_int }
- #1 #2
- }
- }
-\cs_new_protected:Npn \@@_compile_quantifier_braced_auxii:w #1#2
- {
- \@@_two_if_eq:NNNNTF #1 #2 \@@_compile_special:N \c_right_brace_str
- {
- \exp_args:No \@@_compile_quantifier_lazyness:nnNN
- { \int_use:N \l_@@_internal_a_int } { -1 }
- }
- {
- \@@_compile_quantifier_abort:eNN
- { \c_left_brace_str \int_use:N \l_@@_internal_a_int , }
- #1 #2
- }
- }
-\cs_new_protected:Npn \@@_compile_quantifier_braced_auxiii:w #1#2
- {
- \@@_two_if_eq:NNNNTF #1 #2 \@@_compile_special:N \c_right_brace_str
- {
- \if_int_compare:w \l_@@_internal_a_int >
- \l_@@_internal_b_int
- \msg_error:nnee { regex } { backwards-quantifier }
- { \int_use:N \l_@@_internal_a_int }
- { \int_use:N \l_@@_internal_b_int }
- \int_zero:N \l_@@_internal_b_int
- \else:
- \int_sub:Nn \l_@@_internal_b_int \l_@@_internal_a_int
- \fi:
- \exp_args:Noo \@@_compile_quantifier_lazyness:nnNN
- { \int_use:N \l_@@_internal_a_int }
- { \int_use:N \l_@@_internal_b_int }
- }
- {
- \@@_compile_quantifier_abort:eNN
- {
- \c_left_brace_str
- \int_use:N \l_@@_internal_a_int ,
- \int_use:N \l_@@_internal_b_int
- }
- #1 #2
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsubsection{Raw characters}
-%
-% \begin{macro}{\@@_compile_raw_error:N}
-% Within character classes, and following catcode tests, some escaped
-% alphanumeric sequences such as |\b| do not have any meaning. They
-% are replaced by a raw character, after spitting out an error.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_compile_raw_error:N #1
- {
- \msg_error:nne { regex } { bad-escape } {#1}
- \@@_compile_raw:N #1
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_compile_raw:N}
-% If we are in a character class and the next character is an
-% unescaped dash, this denotes a range. Otherwise, the current
-% character |#1| matches itself.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_compile_raw:N #1#2#3
- {
- \@@_if_in_class:TF
- {
- \@@_two_if_eq:NNNNTF #2 #3 \@@_compile_special:N -
- { \@@_compile_range:Nw #1 }
- {
- \@@_compile_one:n
- { \@@_item_equal:n { \int_value:w `#1 } }
- #2 #3
- }
- }
- {
- \@@_compile_one:n
- { \@@_item_equal:n { \int_value:w `#1 } }
- #2 #3
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_compile_range:Nw, \@@_if_end_range:NNTF}
-% We have just read a raw character followed by a dash; this should be
-% followed by an end-point for the range. Valid end-points are: any
-% raw character; any special character, except a right bracket. In
-% particular, escaped characters are forbidden.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_if_end_range:NNTF #1#2
- {
- \if_meaning:w \@@_compile_raw:N #1
- \else:
- \if_meaning:w \@@_compile_special:N #1
- \if_charcode:w ] #2
- \use_i:nn
- \fi:
- \else:
- \exp_after:wN \exp_after:wN \exp_after:wN \use_iii:nnn
- \fi:
- \fi:
- \use_i:nn
- }
-\cs_new_protected:Npn \@@_compile_range:Nw #1#2#3
- {
- \@@_if_end_range:NNTF #2 #3
- {
- \if_int_compare:w `#1 > `#3 \exp_stop_f:
- \msg_error:nnee { regex } { range-backwards } {#1} {#3}
- \else:
- \tl_build_put_right:Ne \l_@@_build_tl
- {
- \if_int_compare:w `#1 = `#3 \exp_stop_f:
- \@@_item_equal:n
- \else:
- \@@_item_range:nn { \int_value:w `#1 }
- \fi:
- { \int_value:w `#3 }
- }
- \fi:
- }
- {
- \msg_warning:nnee { regex } { range-missing-end }
- {#1} { \c_backslash_str #3 }
- \tl_build_put_right:Ne \l_@@_build_tl
- {
- \@@_item_equal:n { \int_value:w `#1 \exp_stop_f: }
- \@@_item_equal:n { \int_value:w `- \exp_stop_f: }
- }
- #2#3
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Character properties}
-%
-% \begin{macro}{\@@_compile_.:, \@@_prop_.:}
-% In a class, the dot has no special meaning. Outside, insert
-% \cs{@@_prop_.:}, which matches any character or control
-% sequence, and refuses $-2$ (end-marker).
-% \begin{macrocode}
-\cs_new_protected:cpe { @@_compile_.: }
- {
- \exp_not:N \@@_if_in_class:TF
- { \@@_compile_raw:N . }
- { \@@_compile_one:n \exp_not:c { @@_prop_.: } }
- }
-\cs_new_protected:cpn { @@_prop_.: }
- {
- \if_int_compare:w \l_@@_curr_char_int > - 2 \exp_stop_f:
- \exp_after:wN \@@_break_true:w
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \@@_compile_/d:, \@@_compile_/D:,
-% \@@_compile_/h:, \@@_compile_/H:,
-% \@@_compile_/s:, \@@_compile_/S:,
-% \@@_compile_/v:, \@@_compile_/V:,
-% \@@_compile_/w:, \@@_compile_/W:,
-% \@@_compile_/N:,
-% }
-% The constants \cs{@@_prop_d:}, \emph{etc.} hold
-% a list of tests which match the corresponding character
-% class, and jump to the \cs{@@_break_point:TF} marker.
-% As for a normal character, we check for quantifiers.
-% \begin{macrocode}
-\cs_set_protected:Npn \@@_tmp:w #1#2
- {
- \cs_new_protected:cpe { @@_compile_/#1: }
- { \@@_compile_one:n \exp_not:c { @@_prop_#1: } }
- \cs_new_protected:cpe { @@_compile_/#2: }
- {
- \@@_compile_one:n
- { \@@_item_reverse:n { \exp_not:c { @@_prop_#1: } } }
- }
- }
-\@@_tmp:w d D
-\@@_tmp:w h H
-\@@_tmp:w s S
-\@@_tmp:w v V
-\@@_tmp:w w W
-\cs_new_protected:cpn { @@_compile_/N: }
- { \@@_compile_one:n \@@_prop_N: }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Anchoring and simple assertions}
-%
-% \begin{macro}{\@@_compile_anchor_letter:NNN}
-% \begin{macro}{\@@_compile_/A:, \@@_compile_/G:, \@@_compile_/Z:, \@@_compile_/z:, \@@_compile_/b:, \@@_compile_/B:}
-% \begin{macro}+\@@_compile_^:+
-% \begin{macro}+\@@_compile_$:+
-% In modes where assertions are forbidden, anchors such as |\A|
-% produce an error (|\A|~is invalid in classes); otherwise they add an
-% \cs{@@_assertion:Nn} test as appropriate (the only negative
-% assertion is~|\B|). The test functions are defined later. The
-% implementation for
-% |$| and |^| is only different from |\A| etc because these are valid
-% in a class.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_compile_anchor_letter:NNN #1#2#3
- {
- \@@_if_in_class_or_catcode:TF { \@@_compile_raw_error:N #1 }
- {
- \tl_build_put_right:Nn \l_@@_build_tl
- { \@@_assertion:Nn #2 {#3} }
- }
- }
-\cs_new_protected:cpn { @@_compile_/A: }
- { \@@_compile_anchor_letter:NNN A \c_true_bool \@@_A_test: }
-\cs_new_protected:cpn { @@_compile_/G: }
- { \@@_compile_anchor_letter:NNN G \c_true_bool \@@_G_test: }
-\cs_new_protected:cpn { @@_compile_/Z: }
- { \@@_compile_anchor_letter:NNN Z \c_true_bool \@@_Z_test: }
-\cs_new_protected:cpn { @@_compile_/z: }
- { \@@_compile_anchor_letter:NNN z \c_true_bool \@@_Z_test: }
-\cs_new_protected:cpn { @@_compile_/b: }
- { \@@_compile_anchor_letter:NNN b \c_true_bool \@@_b_test: }
-\cs_new_protected:cpn { @@_compile_/B: }
- { \@@_compile_anchor_letter:NNN B \c_false_bool \@@_b_test: }
-\cs_set_protected:Npn \@@_tmp:w #1#2
- {
- \cs_new_protected:cpn { @@_compile_#1: }
- {
- \@@_if_in_class_or_catcode:TF { \@@_compile_raw:N #1 }
- {
- \tl_build_put_right:Nn \l_@@_build_tl
- { \@@_assertion:Nn \c_true_bool {#2} }
- }
- }
- }
-\exp_args:Ne \@@_tmp:w { \iow_char:N \^ } { \@@_A_test: }
-\exp_args:Ne \@@_tmp:w { \iow_char:N \$ } { \@@_Z_test: }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsubsection{Character classes}
-%
-% \begin{macro}{\@@_compile_]:}
-% Outside a class, right brackets have no meaning. In a class, change
-% the mode ($m\to (m-15)/13$, truncated) to reflect the fact that we
-% are leaving the class. Look for quantifiers, unless we are still in
-% a class after leaving one (the case of |[...\cL[...]...]|).
-% quantifiers.
-% \begin{macrocode}
-\cs_new_protected:cpn { @@_compile_]: }
- {
- \@@_if_in_class:TF
- {
- \if_int_compare:w \l_@@_mode_int >
- \c_@@_catcode_in_class_mode_int
- \tl_build_put_right:Nn \l_@@_build_tl { \if_false: { \fi: } }
- \fi:
- \tex_advance:D \l_@@_mode_int - 15 \exp_stop_f:
- \tex_divide:D \l_@@_mode_int 13 \exp_stop_f:
- \if_int_odd:w \l_@@_mode_int \else:
- \exp_after:wN \@@_compile_quantifier:w
- \fi:
- }
- { \@@_compile_raw:N ] }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_compile_[:}
-% In a class, left brackets might introduce a \textsc{posix} character
-% class, or mean nothing. Immediately following |\c|\meta{category},
-% we must insert the appropriate catcode test, then parse the class; we
-% pre-expand the catcode as an optimization. Otherwise (modes $0$,
-% $-2$ and $-6$) just parse the class. The mode is updated later.
-% \begin{macrocode}
-\cs_new_protected:cpn { @@_compile_[: }
- {
- \@@_if_in_class:TF
- { \@@_compile_class_posix_test:w }
- {
- \@@_if_within_catcode:TF
- {
- \exp_after:wN \@@_compile_class_catcode:w
- \int_use:N \l_@@_catcodes_int ;
- }
- { \@@_compile_class_normal:w }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_compile_class_normal:w}
-% In the \enquote{normal} case, we insert \cs{@@_class:NnnnN}
-% \meta{boolean} in the compiled code. The \meta{boolean} is true for
-% positive classes, and false for negative classes, characterized by a
-% leading |^|. The auxiliary \cs{@@_compile_class:TFNN} also
-% checks for a leading |]| which has a special meaning.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_compile_class_normal:w
- {
- \@@_compile_class:TFNN
- { \@@_class:NnnnN \c_true_bool }
- { \@@_class:NnnnN \c_false_bool }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_compile_class_catcode:w}
-% This function is called for a left bracket in modes $2$ or $6$
-% (catcode test, and catcode test within a class). In mode $2$ the
-% whole construction needs to be put in a class (like single
-% character). Then determine if the class is positive or negative,
-% inserting \cs{@@_item_catcode:nT} or the \texttt{reverse} variant
-% as appropriate, each with the current catcodes bitmap |#1| as an
-% argument, and reset the catcodes.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_compile_class_catcode:w #1;
- {
- \if_int_compare:w \l_@@_mode_int = \c_@@_catcode_mode_int
- \tl_build_put_right:Nn \l_@@_build_tl
- { \@@_class:NnnnN \c_true_bool { \if_false: } \fi: }
- \fi:
- \int_set_eq:NN \l_@@_catcodes_int \l_@@_default_catcodes_int
- \@@_compile_class:TFNN
- { \@@_item_catcode:nT {#1} }
- { \@@_item_catcode_reverse:nT {#1} }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {\@@_compile_class:TFNN, \@@_compile_class:NN}
-% If the first character is |^|, then the class is negative (use
-% |#2|), otherwise it is positive (use |#1|). If the next character
-% is a right bracket, then it should be changed to a raw one.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_compile_class:TFNN #1#2#3#4
- {
- \l_@@_mode_int = \int_value:w \l_@@_mode_int 3 \exp_stop_f:
- \@@_two_if_eq:NNNNTF #3 #4 \@@_compile_special:N ^
- {
- \tl_build_put_right:Nn \l_@@_build_tl { #2 { \if_false: } \fi: }
- \@@_compile_class:NN
- }
- {
- \tl_build_put_right:Nn \l_@@_build_tl { #1 { \if_false: } \fi: }
- \@@_compile_class:NN #3 #4
- }
- }
-\cs_new_protected:Npn \@@_compile_class:NN #1#2
- {
- \token_if_eq_charcode:NNTF #2 ]
- { \@@_compile_raw:N #2 }
- { #1 #2 }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \@@_compile_class_posix_test:w,
-% \@@_compile_class_posix:NNNNw,
-% \@@_compile_class_posix_loop:w,
-% \@@_compile_class_posix_end:w
-% }
-% Here we check for a syntax such as |[:alpha:]|. We also detect |[=|
-% and |[.| which have a meaning in \textsc{posix} regular expressions,
-% but are not implemented in \pkg{l3regex}. In case we see |[:|, grab
-% raw characters until hopefully reaching |:]|. If that's missing, or
-% the \textsc{posix} class is unknown, abort. If all is right, add the
-% test to the current class, with an extra \cs{@@_item_reverse:n}
-% for negative classes (we make sure to wrap its argument in braces
-% otherwise \cs{regex_show:N} would not recognize the regex as valid).
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_compile_class_posix_test:w #1#2
- {
- \token_if_eq_meaning:NNT \@@_compile_special:N #1
- {
- \str_case:nn { #2 }
- {
- : { \@@_compile_class_posix:NNNNw }
- = {
- \msg_warning:nne { regex }
- { posix-unsupported } { = }
- }
- . {
- \msg_warning:nne { regex }
- { posix-unsupported } { . }
- }
- }
- }
- \@@_compile_raw:N [ #1 #2
- }
-\cs_new_protected:Npn \@@_compile_class_posix:NNNNw #1#2#3#4#5#6
- {
- \@@_two_if_eq:NNNNTF #5 #6 \@@_compile_special:N ^
- {
- \bool_set_false:N \l_@@_internal_bool
- \__kernel_tl_set:Nx \l_@@_internal_a_tl { \if_false: } \fi:
- \@@_compile_class_posix_loop:w
- }
- {
- \bool_set_true:N \l_@@_internal_bool
- \__kernel_tl_set:Nx \l_@@_internal_a_tl { \if_false: } \fi:
- \@@_compile_class_posix_loop:w #5 #6
- }
- }
-\cs_new:Npn \@@_compile_class_posix_loop:w #1#2
- {
- \token_if_eq_meaning:NNTF \@@_compile_raw:N #1
- { #2 \@@_compile_class_posix_loop:w }
- { \if_false: { \fi: } \@@_compile_class_posix_end:w #1 #2 }
- }
-\cs_new_protected:Npn \@@_compile_class_posix_end:w #1#2#3#4
- {
- \@@_two_if_eq:NNNNTF #1 #2 \@@_compile_special:N :
- { \@@_two_if_eq:NNNNTF #3 #4 \@@_compile_special:N ] }
- { \use_ii:nn }
- {
- \cs_if_exist:cTF { @@_posix_ \l_@@_internal_a_tl : }
- {
- \@@_compile_one:n
- {
- \bool_if:NTF \l_@@_internal_bool \use:n \@@_item_reverse:n
- { \exp_not:c { @@_posix_ \l_@@_internal_a_tl : } }
- }
- }
- {
- \msg_warning:nne { regex } { posix-unknown }
- { \l_@@_internal_a_tl }
- \@@_compile_abort_tokens:e
- {
- [: \bool_if:NF \l_@@_internal_bool { ^ }
- \l_@@_internal_a_tl :]
- }
- }
- }
- {
- \msg_error:nnee { regex } { posix-missing-close }
- { [: \l_@@_internal_a_tl } { #2 #4 }
- \@@_compile_abort_tokens:e { [: \l_@@_internal_a_tl }
- #1 #2 #3 #4
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Groups and alternations}
-%
-% \begin{macro}{\@@_compile_group_begin:N, \@@_compile_group_end:}
-% The contents of a regex group are turned into compiled code in
-% \cs{l_@@_build_tl}, which ends up with items of the form
-% \cs{@@_branch:n} \Arg{concatenation}. This construction is done
-% using \cs[no-index]{tl_build_\ldots{}} functions within a \TeX{} group, which automatically
-% makes sure that options (case-sensitivity and default catcode) are
-% reset at the end of the group. The argument |#1| is
-% \cs{@@_group:nnnN} or a variant thereof. A small subtlety to
-% support |\cL(abc)| as a shorthand for |(\cLa\cLb\cLc)|: exit any
-% pending catcode test, save the category code at the start of the
-% group as the default catcode for that group, and make sure that the
-% catcode is restored to the default outside the group.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_compile_group_begin:N #1
- {
- \tl_build_put_right:Nn \l_@@_build_tl { #1 { \if_false: } \fi: }
- \@@_mode_quit_c:
- \group_begin:
- \tl_build_begin:N \l_@@_build_tl
- \int_set_eq:NN \l_@@_default_catcodes_int \l_@@_catcodes_int
- \int_incr:N \l_@@_group_level_int
- \tl_build_put_right:Nn \l_@@_build_tl
- { \@@_branch:n { \if_false: } \fi: }
- }
-\cs_new_protected:Npn \@@_compile_group_end:
- {
- \if_int_compare:w \l_@@_group_level_int > \c_zero_int
- \tl_build_put_right:Nn \l_@@_build_tl { \if_false: { \fi: } }
- \tl_build_end:N \l_@@_build_tl
- \exp_args:NNNe
- \group_end:
- \tl_build_put_right:Nn \l_@@_build_tl { \l_@@_build_tl }
- \int_set_eq:NN \l_@@_catcodes_int \l_@@_default_catcodes_int
- \exp_after:wN \@@_compile_quantifier:w
- \else:
- \msg_warning:nn { regex } { extra-rparen }
- \exp_after:wN \@@_compile_raw:N \exp_after:wN )
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_compile_(:}
-% In a class, parentheses are not special. In a catcode test inside a
-% class, a left parenthesis gives an error, to catch |[a\cL(bcd)e]|.
-% Otherwise check for a |?|, denoting special groups, and run the code
-% for the corresponding special group.
-% \begin{macrocode}
-\cs_new_protected:cpn { @@_compile_(: }
- {
- \@@_if_in_class:TF { \@@_compile_raw:N ( }
- {
- \if_int_compare:w \l_@@_mode_int =
- \c_@@_catcode_in_class_mode_int
- \msg_error:nn { regex } { c-lparen-in-class }
- \exp_after:wN \@@_compile_raw:N \exp_after:wN (
- \else:
- \exp_after:wN \@@_compile_lparen:w
- \fi:
- }
- }
-\cs_new_protected:Npn \@@_compile_lparen:w #1#2#3#4
- {
- \@@_two_if_eq:NNNNTF #1 #2 \@@_compile_special:N ?
- {
- \cs_if_exist_use:cF
- { @@_compile_special_group_\token_to_str:N #4 :w }
- {
- \msg_warning:nne { regex } { special-group-unknown }
- { (? #4 }
- \@@_compile_group_begin:N \@@_group:nnnN
- \@@_compile_raw:N ? #3 #4
- }
- }
- {
- \@@_compile_group_begin:N \@@_group:nnnN
- #1 #2 #3 #4
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}+\@@_compile_|:+
-% In a class, the pipe is not special. Otherwise, end the current
-% branch and open another one.
-% \begin{macrocode}
-\cs_new_protected:cpn { @@_compile_|: }
- {
- \@@_if_in_class:TF { \@@_compile_raw:N | }
- {
- \tl_build_put_right:Nn \l_@@_build_tl
- { \if_false: { \fi: } \@@_branch:n { \if_false: } \fi: }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_compile_):}
-% Within a class, parentheses are not special. Outside, close a group.
-% \begin{macrocode}
-\cs_new_protected:cpn { @@_compile_): }
- {
- \@@_if_in_class:TF { \@@_compile_raw:N ) }
- { \@@_compile_group_end: }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_compile_special_group_::w}
-% \begin{macro}+\@@_compile_special_group_|:w+
-% Non-capturing, and resetting groups are easy to take care of during
-% compilation; for those groups, the harder parts come when building.
-% \begin{macrocode}
-\cs_new_protected:cpn { @@_compile_special_group_::w }
- { \@@_compile_group_begin:N \@@_group_no_capture:nnnN }
-\cs_new_protected:cpn { @@_compile_special_group_|:w }
- { \@@_compile_group_begin:N \@@_group_resetting:nnnN }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {\@@_compile_special_group_i:w, \@@_compile_special_group_-:w}
-% The match can be made case-insensitive by setting the option with
-% \texttt{(?i)}; the original behaviour is restored by \texttt{(?-i)}.
-% This is the only supported option.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_compile_special_group_i:w #1#2
- {
- \@@_two_if_eq:NNNNTF #1 #2 \@@_compile_special:N )
- {
- \cs_set:Npn \@@_item_equal:n
- { \@@_item_caseless_equal:n }
- \cs_set:Npn \@@_item_range:nn
- { \@@_item_caseless_range:nn }
- }
- {
- \msg_warning:nne { regex } { unknown-option } { (?i #2 }
- \@@_compile_raw:N (
- \@@_compile_raw:N ?
- \@@_compile_raw:N i
- #1 #2
- }
- }
-\cs_new_protected:cpn { @@_compile_special_group_-:w } #1#2#3#4
- {
- \@@_two_if_eq:NNNNTF #1 #2 \@@_compile_raw:N i
- { \@@_two_if_eq:NNNNTF #3 #4 \@@_compile_special:N ) }
- { \use_ii:nn }
- {
- \cs_set:Npn \@@_item_equal:n
- { \@@_item_caseful_equal:n }
- \cs_set:Npn \@@_item_range:nn
- { \@@_item_caseful_range:nn }
- }
- {
- \msg_warning:nne { regex } { unknown-option } { (?-#2#4 }
- \@@_compile_raw:N (
- \@@_compile_raw:N ?
- \@@_compile_raw:N -
- #1 #2 #3 #4
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Catcodes and csnames}
-%
-% \begin{macro}{\@@_compile_/c:, \@@_compile_c_test:NN}
-% The |\c| escape sequence can be followed by a capital letter
-% representing a character category, by a left bracket which starts a
-% list of categories, or by a brace group holding a regular expression
-% for a control sequence name. Otherwise, raise an error.
-% \begin{macrocode}
-\cs_new_protected:cpn { @@_compile_/c: }
- { \@@_chk_c_allowed:T { \@@_compile_c_test:NN } }
-\cs_new_protected:Npn \@@_compile_c_test:NN #1#2
- {
- \token_if_eq_meaning:NNTF #1 \@@_compile_raw:N
- {
- \int_if_exist:cTF { c_@@_catcode_#2_int }
- {
- \int_set_eq:Nc \l_@@_catcodes_int
- { c_@@_catcode_#2_int }
- \l_@@_mode_int
- = \if_case:w \l_@@_mode_int
- \c_@@_catcode_mode_int
- \else:
- \c_@@_catcode_in_class_mode_int
- \fi:
- \token_if_eq_charcode:NNT C #2 { \@@_compile_c_C:NN }
- }
- }
- { \cs_if_exist_use:cF { @@_compile_c_#2:w } }
- {
- \msg_error:nne { regex } { c-missing-category } {#2}
- #1 #2
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_compile_c_C:NN}
-% If |\cC| is not followed by |.| or |(...)| then complain because
-% that construction cannot match anything, except in cases like
-% |\cC[\c{...}]|, where it has no effect.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_compile_c_C:NN #1#2
- {
- \token_if_eq_meaning:NNTF #1 \@@_compile_special:N
- {
- \token_if_eq_charcode:NNTF #2 .
- { \use_none:n }
- { \token_if_eq_charcode:NNF #2 ( } % )
- }
- { \use:n }
- { \msg_error:nnn { regex } { c-C-invalid } {#2} }
- #1 #2
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \@@_compile_c_[:w,
-% \@@_compile_c_lbrack_loop:NN,
-% \@@_compile_c_lbrack_add:N,
-% \@@_compile_c_lbrack_end:,
-% }
-% When encountering |\c[|, the task is to collect uppercase letters
-% representing character categories. First check for |^| which negates
-% the list of category codes.
-% \begin{macrocode}
-\cs_new_protected:cpn { @@_compile_c_[:w } #1#2
- {
- \l_@@_mode_int
- = \if_case:w \l_@@_mode_int
- \c_@@_catcode_mode_int
- \else:
- \c_@@_catcode_in_class_mode_int
- \fi:
- \int_zero:N \l_@@_catcodes_int
- \@@_two_if_eq:NNNNTF #1 #2 \@@_compile_special:N ^
- {
- \bool_set_false:N \l_@@_catcodes_bool
- \@@_compile_c_lbrack_loop:NN
- }
- {
- \bool_set_true:N \l_@@_catcodes_bool
- \@@_compile_c_lbrack_loop:NN
- #1 #2
- }
- }
-\cs_new_protected:Npn \@@_compile_c_lbrack_loop:NN #1#2
- {
- \token_if_eq_meaning:NNTF #1 \@@_compile_raw:N
- {
- \int_if_exist:cTF { c_@@_catcode_#2_int }
- {
- \exp_args:Nc \@@_compile_c_lbrack_add:N
- { c_@@_catcode_#2_int }
- \@@_compile_c_lbrack_loop:NN
- }
- }
- {
- \token_if_eq_charcode:NNTF #2 ]
- { \@@_compile_c_lbrack_end: }
- }
- {
- \msg_error:nne { regex } { c-missing-rbrack } {#2}
- \@@_compile_c_lbrack_end:
- #1 #2
- }
- }
-\cs_new_protected:Npn \@@_compile_c_lbrack_add:N #1
- {
- \if_int_odd:w \@@_int_eval:w \l_@@_catcodes_int / #1 \scan_stop:
- \else:
- \int_add:Nn \l_@@_catcodes_int {#1}
- \fi:
- }
-\cs_new_protected:Npn \@@_compile_c_lbrack_end:
- {
- \if_meaning:w \c_false_bool \l_@@_catcodes_bool
- \int_set:Nn \l_@@_catcodes_int
- { \c_@@_all_catcodes_int - \l_@@_catcodes_int }
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}+\@@_compile_c_{:+
-% The case of a left brace is easy, based on what we have done so far:
-% in a group, compile the regular expression, after changing the mode
-% to forbid nesting |\c|. Additionally, disable submatch tracking
-% since groups don't escape the scope of |\c{...}|.
-% \begin{macrocode}
-\cs_new_protected:cpn { @@_compile_c_ \c_left_brace_str :w }
- {
- \@@_compile:w
- \@@_disable_submatches:
- \l_@@_mode_int
- = \if_case:w \l_@@_mode_int
- \c_@@_cs_mode_int
- \else:
- \c_@@_cs_in_class_mode_int
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}+\@@_compile_{:+
-% We forbid unescaped left braces inside a |\c{...}| escape because
-% they otherwise lead to the confusing question of whether the first
-% right brace in |\c{{}x}| should end |\c| or whether one should
-% match braces.
-% \begin{macrocode}
-\cs_new_protected:cpn { @@_compile_ \c_left_brace_str : }
- {
- \@@_if_in_cs:TF
- { \msg_error:nnn { regex } { cu-lbrace } { c } }
- { \exp_after:wN \@@_compile_raw:N \c_left_brace_str }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\l_@@_cs_flag}
-% \begin{macro}+\@@_compile_}:+
-% \begin{macro}{\@@_compile_end_cs:}
-% \begin{macro}[EXP]{\@@_compile_cs_aux:Nn, \@@_compile_cs_aux:NNnnnN}
-% Non-escaped right braces are only special if they appear when
-% compiling the regular expression for a csname, but not within a
-% class: |\c{[{}]}| matches the control sequences |\{| and |\}|. So,
-% end compiling the inner regex (this closes any dangling class or
-% group). Then insert the corresponding test in the outer regex. As
-% an optimization, if the control sequence test simply consists of
-% several explicit possibilities (branches) then use
-% \cs{@@_item_exact_cs:n} with an argument consisting of all
-% possibilities separated by \cs{scan_stop:}.
-% \begin{macrocode}
-\flag_new:N \l_@@_cs_flag
-\cs_new_protected:cpn { @@_compile_ \c_right_brace_str : }
- {
- \@@_if_in_cs:TF
- { \@@_compile_end_cs: }
- { \exp_after:wN \@@_compile_raw:N \c_right_brace_str }
- }
-\cs_new_protected:Npn \@@_compile_end_cs:
- {
- \@@_compile_end:
- \flag_clear:N \l_@@_cs_flag
- \__kernel_tl_set:Nx \l_@@_internal_a_tl
- {
- \exp_after:wN \@@_compile_cs_aux:Nn \l_@@_internal_regex
- \q_@@_nil \q_@@_nil \q_@@_recursion_stop
- }
- \exp_args:Ne \@@_compile_one:n
- {
- \flag_if_raised:NTF \l_@@_cs_flag
- { \@@_item_cs:n { \exp_not:o \l_@@_internal_regex } }
- {
- \@@_item_exact_cs:n
- { \tl_tail:N \l_@@_internal_a_tl }
- }
- }
- }
-\cs_new:Npn \@@_compile_cs_aux:Nn #1#2
- {
- \cs_if_eq:NNTF #1 \@@_branch:n
- {
- \scan_stop:
- \@@_compile_cs_aux:NNnnnN #2
- \q_@@_nil \q_@@_nil \q_@@_nil
- \q_@@_nil \q_@@_nil \q_@@_nil \q_@@_recursion_stop
- \@@_compile_cs_aux:Nn
- }
- {
- \@@_quark_if_nil:NF #1 { \flag_ensure_raised:N \l_@@_cs_flag }
- \@@_use_none_delimit_by_q_recursion_stop:w
- }
- }
-\cs_new:Npn \@@_compile_cs_aux:NNnnnN #1#2#3#4#5#6
- {
- \bool_lazy_all:nTF
- {
- { \cs_if_eq_p:NN #1 \@@_class:NnnnN }
- {#2}
- { \tl_if_head_eq_meaning_p:nN {#3} \@@_item_caseful_equal:n }
- { \int_compare_p:nNn { \tl_count:n {#3} } = { 2 } }
- { \int_compare_p:nNn {#5} = \c_zero_int }
- }
- {
- \prg_replicate:nn {#4}
- { \char_generate:nn { \use_ii:nn #3 } {12} }
- \@@_compile_cs_aux:NNnnnN
- }
- {
- \@@_quark_if_nil:NF #1
- {
- \flag_ensure_raised:N \l_@@_cs_flag
- \@@_use_i_delimit_by_q_recursion_stop:nw
- }
- \@@_use_none_delimit_by_q_recursion_stop:w
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{variable}
-%
-% \subsubsection{Raw token lists with \cs[no-index]{u}}
-%
-% \begin{macro}{\@@_compile_/u:}
-% The |\u| escape is invalid in classes and directly following a
-% catcode test. Otherwise test for a following |r| (for |\ur|), and
-% call an auxiliary responsible for finding the variable name.
-% \begin{macrocode}
-\cs_new_protected:cpn { @@_compile_/u: } #1#2
- {
- \@@_if_in_class_or_catcode:TF
- { \@@_compile_raw_error:N u #1 #2 }
- {
- \@@_two_if_eq:NNNNTF #1 #2 \@@_compile_raw:N r
- { \@@_compile_u_brace:NNN \@@_compile_ur_end: }
- { \@@_compile_u_brace:NNN \@@_compile_u_end: #1 #2 }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_compile_u_brace:NNN}
-% This enforces the presence of a left brace, then starts a loop to
-% find the variable name.
-% \begin{macrocode}
-\cs_new:Npn \@@_compile_u_brace:NNN #1#2#3
- {
- \@@_two_if_eq:NNNNTF #2 #3 \@@_compile_special:N \c_left_brace_str
- {
- \tl_set:Nn \l_@@_internal_b_tl {#1}
- \__kernel_tl_set:Nx \l_@@_internal_a_tl { \if_false: } \fi:
- \@@_compile_u_loop:NN
- }
- {
- \msg_error:nn { regex } { u-missing-lbrace }
- \token_if_eq_meaning:NNTF #1 \@@_compile_ur_end:
- { \@@_compile_raw:N u \@@_compile_raw:N r }
- { \@@_compile_raw:N u }
- #2 #3
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_compile_u_loop:NN}
-% We collect the characters for the argument of |\u| within an
-% \texttt{e}-expanding assignment. In principle we could just wait to
-% encounter a right brace, but this is unsafe: if the right brace was
-% missing, then we would reach the end-markers of the regex, and
-% continue, leading to obscure fatal errors. Instead, we only allow
-% raw and special characters, and stop when encountering a special
-% right brace, any escaped character, or the end-marker.
-% \begin{macrocode}
-\cs_new:Npn \@@_compile_u_loop:NN #1#2
- {
- \token_if_eq_meaning:NNTF #1 \@@_compile_raw:N
- { #2 \@@_compile_u_loop:NN }
- {
- \token_if_eq_meaning:NNTF #1 \@@_compile_special:N
- {
- \exp_after:wN \token_if_eq_charcode:NNTF \c_right_brace_str #2
- { \if_false: { \fi: } \l_@@_internal_b_tl }
- {
- \if_charcode:w \c_left_brace_str #2
- \msg_expandable_error:nnn { regex } { cu-lbrace } { u }
- \else:
- #2
- \fi:
- \@@_compile_u_loop:NN
- }
- }
- {
- \if_false: { \fi: }
- \msg_error:nne { regex } { u-missing-rbrace } {#2}
- \l_@@_internal_b_tl
- #1 #2
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_compile_ur_end:, \@@_compile_ur:n}
-% \begin{macro}[EXP]{\@@_compile_ur_aux:w}
-% For the |\ur{...}| construction, once we have extracted the
-% variable's name, we replace all groups by non-capturing groups in
-% the compiled regex (passed as the
-% argument of \cs{@@_compile_ur:n}). If that has a single branch
-% (namely \cs{tl_if_empty:oTF} is false) and there is no quantifier,
-% then simply insert the contents of this branch (obtained by
-% \cs{use_ii:nn}, which is expanded later). In all other cases,
-% insert a non-capturing group and look for quantifiers to determine
-% the number of repetition etc.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_compile_ur_end:
- {
- \group_begin:
- \cs_set:Npn \@@_group:nnnN { \@@_group_no_capture:nnnN }
- \cs_set:Npn \@@_group_resetting:nnnN { \@@_group_no_capture:nnnN }
- \exp_args:NNe
- \group_end:
- \@@_compile_ur:n { \use:c { \l_@@_internal_a_tl } }
- }
-\cs_new_protected:Npn \@@_compile_ur:n #1
- {
- \tl_if_empty:oTF { \@@_compile_ur_aux:w #1 {} ? ? \q_@@_nil }
- { \@@_compile_if_quantifier:TFw }
- { \use_i:nn }
- {
- \tl_build_put_right:Nn \l_@@_build_tl
- { \@@_group_no_capture:nnnN { \if_false: } \fi: #1 }
- \@@_compile_quantifier:w
- }
- { \tl_build_put_right:Nn \l_@@_build_tl { \use_ii:nn #1 } }
- }
-\cs_new:Npn \@@_compile_ur_aux:w \@@_branch:n #1#2#3 \q_@@_nil {#2}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_compile_u_end:, \@@_compile_u_payload:}
-% Once we have extracted the variable's name, we check for
-% quantifiers, in which case we set up a non-capturing group with a
-% single branch. Inside this branch (we omit it and the group if
-% there is no quantifier), \cs{@@_compile_u_payload:} puts
-% the right tests corresponding to the contents of the variable, which
-% we store in \cs{l_@@_internal_a_tl}. The behaviour of |\u|
-% then depends on whether we are within a |\c{...}| escape (in this
-% case, the variable is turned to a string), or not.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_compile_u_end:
- {
- \@@_compile_if_quantifier:TFw
- {
- \tl_build_put_right:Nn \l_@@_build_tl
- {
- \@@_group_no_capture:nnnN { \if_false: } \fi:
- \@@_branch:n { \if_false: } \fi:
- }
- \@@_compile_u_payload:
- \tl_build_put_right:Nn \l_@@_build_tl { \if_false: { \fi: } }
- \@@_compile_quantifier:w
- }
- { \@@_compile_u_payload: }
- }
-\cs_new_protected:Npn \@@_compile_u_payload:
- {
- \tl_set:Nv \l_@@_internal_a_tl { \l_@@_internal_a_tl }
- \if_int_compare:w \l_@@_mode_int = \c_@@_outer_mode_int
- \@@_compile_u_not_cs:
- \else:
- \@@_compile_u_in_cs:
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_compile_u_in_cs:}
-% When |\u| appears within a control sequence, we convert the variable
-% to a string with escaped spaces. Then for each character insert a
-% class matching exactly that character, once.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_compile_u_in_cs:
- {
- \__kernel_tl_gset:Nx \g_@@_internal_tl
- {
- \exp_args:No \__kernel_str_to_other_fast:n
- { \l_@@_internal_a_tl }
- }
- \tl_build_put_right:Ne \l_@@_build_tl
- {
- \tl_map_function:NN \g_@@_internal_tl
- \@@_compile_u_in_cs_aux:n
- }
- }
-\cs_new:Npn \@@_compile_u_in_cs_aux:n #1
- {
- \@@_class:NnnnN \c_true_bool
- { \@@_item_caseful_equal:n { \int_value:w `#1 } }
- { 1 } { 0 } \c_false_bool
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_compile_u_not_cs:}
-% In mode $0$, the |\u| escape adds one state to the NFA for each
-% token in \cs{l_@@_internal_a_tl}. If a given \meta{token} is a
-% control sequence, then insert a string comparison test, otherwise,
-% \cs{@@_item_exact:nn} which compares catcode and character code.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_compile_u_not_cs:
- {
- \tl_analysis_map_inline:Nn \l_@@_internal_a_tl
- {
- \tl_build_put_right:Ne \l_@@_build_tl
- {
- \@@_class:NnnnN \c_true_bool
- {
- \if_int_compare:w "##3 = \c_zero_int
- \@@_item_exact_cs:n
- { \exp_after:wN \cs_to_str:N ##1 }
- \else:
- \@@_item_exact:nn { \int_value:w "##3 } { ##2 }
- \fi:
- }
- { 1 } { 0 } \c_false_bool
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Other}
-%
-% \begin{macro}{\@@_compile_/K:}
-% The |\K| control sequence is currently the only \enquote{command},
-% which performs some action, rather than matching something. It is
-% allowed in the same contexts as |\b|. At the compilation stage, we
-% leave it as a single control sequence, defined later.
-% \begin{macrocode}
-\cs_new_protected:cpn { @@_compile_/K: }
- {
- \int_compare:nNnTF \l_@@_mode_int = \c_@@_outer_mode_int
- { \tl_build_put_right:Nn \l_@@_build_tl { \@@_command_K: } }
- { \@@_compile_raw_error:N K }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Showing regexes}
-%
-% \begin{macro}[rEXP]
-% {
-% \@@_clean_bool:n, \@@_clean_int:n, \@@_clean_int_aux:N,
-% \@@_clean_regex:n, \@@_clean_regex_loop:w, \@@_clean_branch:n,
-% \@@_clean_branch_loop:n, \@@_clean_assertion:Nn,
-% \@@_clean_class:NnnnN, \@@_clean_group:nnnN, \@@_clean_class:n,
-% \@@_clean_class_loop:nnn, \@@_clean_exact_cs:n,
-% \@@_clean_exact_cs:w
-% }
-% Before showing a regex we check that it is \enquote{clean} in the
-% sense that it has the correct internal structure. We do this (in
-% the implementation of \cs{regex_show:N} and \cs{regex_log:N}) by
-% comparing it with a cleaned-up version of the same regex. Along the
-% way we also need similar functions for other types: all
-% \cs[no-index]{@@_clean_\meta{type}:n} functions produce valid
-% \meta{type} tokens (bool, explicit integer, etc.\@) from arbitrary
-% input, and the output coincides with the input if that was valid.
-% \begin{macrocode}
-\cs_new:Npn \@@_clean_bool:n #1
- {
- \tl_if_single:nTF {#1}
- { \bool_if:NTF #1 \c_true_bool \c_false_bool }
- { \c_true_bool }
- }
-\cs_new:Npn \@@_clean_int:n #1
- {
- \tl_if_head_eq_meaning:nNTF {#1} -
- { - \exp_args:No \@@_clean_int:n { \use_none:n #1 } }
- { \int_eval:n { 0 \str_map_function:nN {#1} \@@_clean_int_aux:N } }
- }
-\cs_new:Npn \@@_clean_int_aux:N #1
- {
- \if_int_compare:w \c_one_int < 1 #1 ~
- #1
- \else:
- \str_map_break:n
- \fi:
- }
-\cs_new:Npn \@@_clean_regex:n #1
- {
- \@@_clean_regex_loop:w #1
- \@@_branch:n { \q_recursion_tail } \q_recursion_stop
- }
-\cs_new:Npn \@@_clean_regex_loop:w #1 \@@_branch:n #2
- {
- \quark_if_recursion_tail_stop:n {#2}
- \@@_branch:n { \@@_clean_branch:n {#2} }
- \@@_clean_regex_loop:w
- }
-\cs_new:Npn \@@_clean_branch:n #1
- {
- \@@_clean_branch_loop:n #1
- ? ? ? ? ? ? \prg_break_point:
- }
-\cs_new:Npn \@@_clean_branch_loop:n #1
- {
- \tl_if_single:nF {#1} \prg_break:
- \token_case_meaning:NnF #1
- {
- \@@_command_K: { #1 \@@_clean_branch_loop:n }
- \@@_assertion:Nn { #1 \@@_clean_assertion:Nn }
- \@@_class:NnnnN { #1 \@@_clean_class:NnnnN }
- \@@_group:nnnN { #1 \@@_clean_group:nnnN }
- \@@_group_no_capture:nnnN { #1 \@@_clean_group:nnnN }
- \@@_group_resetting:nnnN { #1 \@@_clean_group:nnnN }
- }
- \prg_break:
- }
-\cs_new:Npn \@@_clean_assertion:Nn #1#2
- {
- \@@_clean_bool:n {#1}
- \tl_if_single:nF {#2} { { \@@_A_test: } \prg_break: }
- \token_case_meaning:NnTF #2
- {
- \@@_A_test: { }
- \@@_G_test: { }
- \@@_Z_test: { }
- \@@_b_test: { }
- }
- { {#2} }
- { { \@@_A_test: } \prg_break: }
- \@@_clean_branch_loop:n
- }
-\cs_new:Npn \@@_clean_class:NnnnN #1#2#3#4#5
- {
- \@@_clean_bool:n {#1}
- { \@@_clean_class:n {#2} }
- { \int_max:nn \c_zero_int { \@@_clean_int:n {#3} } }
- { \int_max:nn { -\c_one_int } { \@@_clean_int:n {#4} } }
- \@@_clean_bool:n {#5}
- \@@_clean_branch_loop:n
- }
-\cs_new:Npn \@@_clean_group:nnnN #1#2#3#4
- {
- { \@@_clean_regex:n {#1} }
- { \int_max:nn \c_zero_int { \@@_clean_int:n {#2} } }
- { \int_max:nn { -\c_one_int } { \@@_clean_int:n {#3} } }
- \@@_clean_bool:n {#4}
- \@@_clean_branch_loop:n
- }
-\cs_new:Npn \@@_clean_class:n #1
- { \@@_clean_class_loop:nnn #1 ????? \prg_break_point: }
-% \end{macrocode}
-% When cleaning a class there are many cases, including a dozen or so
-% like \cs{@@_prop_d:} or \cs{@@_posix_alpha:}. To avoid listing all of
-% them we allow any command that starts with the
-% $13$ characters |__regex_prop_| or |__regex_posix| (handily these have
-% the same length, except for the trailing underscore).
-% \begin{macrocode}
-\cs_new:Npn \@@_clean_class_loop:nnn #1#2#3
- {
- \tl_if_single:nF {#1} \prg_break:
- \token_case_meaning:NnTF #1
- {
- \@@_item_cs:n { #1 { \@@_clean_regex:n {#2} } }
- \@@_item_exact_cs:n { #1 { \@@_clean_exact_cs:n {#2} } }
- \@@_item_caseful_equal:n { #1 { \@@_clean_int:n {#2} } }
- \@@_item_caseless_equal:n { #1 { \@@_clean_int:n {#2} } }
- \@@_item_reverse:n { #1 { \@@_clean_class:n {#2} } }
- }
- { \@@_clean_class_loop:nnn {#3} }
- {
- \token_case_meaning:NnTF #1
- {
- \@@_item_caseful_range:nn { }
- \@@_item_caseless_range:nn { }
- \@@_item_exact:nn { }
- }
- {
- #1 { \@@_clean_int:n {#2} } { \@@_clean_int:n {#3} }
- \@@_clean_class_loop:nnn
- }
- {
- \token_case_meaning:NnTF #1
- {
- \@@_item_catcode:nT { }
- \@@_item_catcode_reverse:nT { }
- }
- {
- #1 { \@@_clean_int:n {#2} } { \@@_clean_class:n {#3} }
- \@@_clean_class_loop:nnn
- }
- {
- \exp_args:Ne \str_case:nnTF
- {
- \exp_args:Ne \str_range:nnn
- { \cs_to_str:N #1 } \c_one_int { 13 }
- }
- {
- { @@_prop_ } { }
- { @@_posix } { }
- }
- {
- #1
- \@@_clean_class_loop:nnn {#2} {#3}
- }
- \prg_break:
- }
- }
- }
- }
-\cs_new:Npn \@@_clean_exact_cs:n #1
- {
- \exp_last_unbraced:Nf \use_none:n
- {
- \@@_clean_exact_cs:w #1
- \scan_stop: \q_recursion_tail \scan_stop:
- \q_recursion_stop
- }
- }
-\cs_new:Npn \@@_clean_exact_cs:w #1 \scan_stop:
- {
- \quark_if_recursion_tail_stop:n {#1}
- \scan_stop: \tl_to_str:n {#1}
- \@@_clean_exact_cs:w
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_show:N}
-% Within a group and within \cs{tl_build_begin:N} \ldots{} \cs{tl_build_end:N} we
-% redefine all the function that can appear in a compiled regex, then
-% run the regex. The result stored in \cs{l_@@_internal_a_tl} is then
-% meant to be shown.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_show:N #1
- {
- \group_begin:
- \tl_build_begin:N \l_@@_build_tl
- \cs_set_protected:Npn \@@_branch:n
- {
- \seq_pop_right:NN \l_@@_show_prefix_seq
- \l_@@_internal_a_tl
- \@@_show_one:n { +-branch }
- \seq_put_right:No \l_@@_show_prefix_seq
- \l_@@_internal_a_tl
- \use:n
- }
- \cs_set_protected:Npn \@@_group:nnnN
- { \@@_show_group_aux:nnnnN { } }
- \cs_set_protected:Npn \@@_group_no_capture:nnnN
- { \@@_show_group_aux:nnnnN { ~(no~capture) } }
- \cs_set_protected:Npn \@@_group_resetting:nnnN
- { \@@_show_group_aux:nnnnN { ~(resetting) } }
- \cs_set_eq:NN \@@_class:NnnnN \@@_show_class:NnnnN
- \cs_set_protected:Npn \@@_command_K:
- { \@@_show_one:n { reset~match~start~(\iow_char:N\\K) } }
- \cs_set_protected:Npn \@@_assertion:Nn ##1##2
- {
- \@@_show_one:n
- { \bool_if:NF ##1 { negative~ } assertion:~##2 }
- }
- \cs_set:Npn \@@_b_test: { word~boundary }
- \cs_set:Npn \@@_Z_test: { anchor~at~end~(\iow_char:N\\Z) }
- \cs_set:Npn \@@_A_test: { anchor~at~start~(\iow_char:N\\A) }
- \cs_set:Npn \@@_G_test: { anchor~at~start~of~match~(\iow_char:N\\G) }
- \cs_set_protected:Npn \@@_item_caseful_equal:n ##1
- { \@@_show_one:n { char~code~\@@_show_char:n{##1} } }
- \cs_set_protected:Npn \@@_item_caseful_range:nn ##1##2
- {
- \@@_show_one:n
- { range~[\@@_show_char:n{##1}, \@@_show_char:n{##2}] }
- }
- \cs_set_protected:Npn \@@_item_caseless_equal:n ##1
- { \@@_show_one:n { char~code~\@@_show_char:n{##1}~(caseless) } }
- \cs_set_protected:Npn \@@_item_caseless_range:nn ##1##2
- {
- \@@_show_one:n
- { Range~[\@@_show_char:n{##1}, \@@_show_char:n{##2}]~(caseless) }
- }
- \cs_set_protected:Npn \@@_item_catcode:nT
- { \@@_show_item_catcode:NnT \c_true_bool }
- \cs_set_protected:Npn \@@_item_catcode_reverse:nT
- { \@@_show_item_catcode:NnT \c_false_bool }
- \cs_set_protected:Npn \@@_item_reverse:n
- { \@@_show_scope:nn { Reversed~match } }
- \cs_set_protected:Npn \@@_item_exact:nn ##1##2
- { \@@_show_one:n { char~\@@_show_char:n{##2},~catcode~##1 } }
- \cs_set_eq:NN \@@_item_exact_cs:n \@@_show_item_exact_cs:n
- \cs_set_protected:Npn \@@_item_cs:n
- { \@@_show_scope:nn { control~sequence } }
- \cs_set:cpn { @@_prop_.: } { \@@_show_one:n { any~token } }
- \seq_clear:N \l_@@_show_prefix_seq
- \@@_show_push:n { ~ }
- \cs_if_exist_use:N #1
- \tl_build_end:N \l_@@_build_tl
- \exp_args:NNNo
- \group_end:
- \tl_set:Nn \l_@@_internal_a_tl { \l_@@_build_tl }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_show_char:n}
-% Show a single character, together with its ascii representation if available.
-% This could be extended to beyond ascii. It is not ideal for parentheses themselves.
-% \begin{macrocode}
-\cs_new:Npn \@@_show_char:n #1
- {
- \int_eval:n {#1}
- \int_compare:nT { 32 <= #1 <= 126 }
- { ~ ( \char_generate:nn {#1} {12} ) }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_show_one:n}
-% Every part of the final message go through this function, which adds
-% one line to the output, with the appropriate prefix.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_show_one:n #1
- {
- \int_incr:N \l_@@_show_lines_int
- \tl_build_put_right:Ne \l_@@_build_tl
- {
- \exp_not:N \iow_newline:
- \seq_map_function:NN \l_@@_show_prefix_seq \use:n
- #1
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {\@@_show_push:n, \@@_show_pop:, \@@_show_scope:nn}
-% Enter and exit levels of nesting. The \texttt{scope} function prints
-% its first argument as an \enquote{introduction}, then performs its
-% second argument in a deeper level of nesting.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_show_push:n #1
- { \seq_put_right:Ne \l_@@_show_prefix_seq { #1 ~ } }
-\cs_new_protected:Npn \@@_show_pop:
- { \seq_pop_right:NN \l_@@_show_prefix_seq \l_@@_internal_a_tl }
-\cs_new_protected:Npn \@@_show_scope:nn #1#2
- {
- \@@_show_one:n {#1}
- \@@_show_push:n { ~ }
- #2
- \@@_show_pop:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_show_group_aux:nnnnN}
-% We display all groups in the same way, simply adding a message,
-% \texttt{(no capture)} or \texttt{(resetting)}, to special groups.
-% The odd \cs{use_ii:nn} avoids printing a spurious \texttt{+-branch}
-% for the first branch.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_show_group_aux:nnnnN #1#2#3#4#5
- {
- \@@_show_one:n { ,-group~begin #1 }
- \@@_show_push:n { | }
- \use_ii:nn #2
- \@@_show_pop:
- \@@_show_one:n
- { `-group~end \@@_msg_repeated:nnN {#3} {#4} #5 }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_show_class:NnnnN}
-% I'm entirely unhappy about this function: I couldn't find a way to
-% test if a class is a single test. Instead, collect the
-% representation of the tests in the class. If that had more than one
-% line, write \texttt{Match} or \texttt{Don't match} on its own line,
-% with the repeating information if any. Then the various tests on
-% lines of their own, and finally a line. Otherwise, we need to
-% evaluate the representation of the tests again (since the prefix is
-% incorrect). That's clunky, but not too expensive, since it's only
-% one test.
-% \begin{macrocode}
-\cs_new:Npn \@@_show_class:NnnnN #1#2#3#4#5
- {
- \group_begin:
- \tl_build_begin:N \l_@@_build_tl
- \int_zero:N \l_@@_show_lines_int
- \@@_show_push:n {~}
- #2
- \int_compare:nTF { \l_@@_show_lines_int = \c_zero_int }
- {
- \group_end:
- \@@_show_one:n { \bool_if:NTF #1 { Fail } { Pass } }
- }
- {
- \bool_if:nTF
- { #1 && \int_compare_p:n { \l_@@_show_lines_int = \c_one_int } }
- {
- \group_end:
- #2
- \tl_build_put_right:Nn \l_@@_build_tl
- { \@@_msg_repeated:nnN {#3} {#4} #5 }
- }
- {
- \tl_build_end:N \l_@@_build_tl
- \exp_args:NNNo
- \group_end:
- \tl_set:Nn \l_@@_internal_a_tl \l_@@_build_tl
- \@@_show_one:n
- {
- \bool_if:NTF #1 { Match } { Don't~match }
- \@@_msg_repeated:nnN {#3} {#4} #5
- }
- \tl_build_put_right:Ne \l_@@_build_tl
- { \exp_not:o \l_@@_internal_a_tl }
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_show_item_catcode:NnT}
-% Produce a sequence of categories which the catcode bitmap |#2|
-% contains, and show it, indenting the tests on which this catcode
-% constraint applies.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_show_item_catcode:NnT #1#2
- {
- \seq_set_split:Nnn \l_@@_internal_seq { } { CBEMTPUDSLOA }
- \seq_set_filter:NNn \l_@@_internal_seq \l_@@_internal_seq
- { \int_if_odd_p:n { #2 / \int_use:c { c_@@_catcode_##1_int } } }
- \@@_show_scope:nn
- {
- categories~
- \seq_map_function:NN \l_@@_internal_seq \use:n
- , ~
- \bool_if:NF #1 { negative~ } class
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_show_item_exact_cs:n}
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_show_item_exact_cs:n #1
- {
- \seq_set_split:Nnn \l_@@_internal_seq { \scan_stop: } {#1}
- \seq_set_map_e:NNn \l_@@_internal_seq
- \l_@@_internal_seq { \iow_char:N\\##1 }
- \@@_show_one:n
- { control~sequence~ \seq_use:Nn \l_@@_internal_seq { ~or~ } }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Building}
-%
-% \subsubsection{Variables used while building}
-%
-% \begin{variable}{\l_@@_min_state_int, \l_@@_max_state_int}
-% The last state that was allocated is
-% $\cs{l_@@_max_state_int}-1$, so that \cs{l_@@_max_state_int} always
-% points to a free state. The \texttt{min_state} variable is
-% $1$ to begin with, but gets shifted in nested calls to the matching
-% code, namely in |\c{...}| constructions.
-% \begin{macrocode}
-\int_new:N \l_@@_min_state_int
-\int_set:Nn \l_@@_min_state_int { 1 }
-\int_new:N \l_@@_max_state_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_left_state_int, \l_@@_right_state_int}
-% \begin{variable}{\l_@@_left_state_seq, \l_@@_right_state_seq}
-% Alternatives are implemented by branching from a \texttt{left} state
-% into the various choices, then merging those into a \texttt{right}
-% state. We store information about those states in two sequences.
-% Those states are also used to implement group quantifiers. Most
-% often, the left and right pointers only differ by~$1$.
-% \begin{macrocode}
-\int_new:N \l_@@_left_state_int
-\int_new:N \l_@@_right_state_int
-\seq_new:N \l_@@_left_state_seq
-\seq_new:N \l_@@_right_state_seq
-% \end{macrocode}
-% \end{variable}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_capturing_group_int}
-% \cs{l_@@_capturing_group_int} is the next \textsc{id} number to
-% be assigned to a capturing group. This starts
-% at $0$ for the group enclosing the full regular expression, and
-% groups are counted in the order of their left parenthesis, except
-% when encountering \texttt{resetting} groups.
-% \begin{macrocode}
-\int_new:N \l_@@_capturing_group_int
-% \end{macrocode}
-% \end{variable}
-%
-% \subsubsection{Framework}
-%
-% This phase is about going from a compiled regex to an \textsc{nfa}.
-% Each state of the \textsc{nfa} is stored in a \tn{toks}. The
-% operations which can appear in the \tn{toks} are
-% \begin{itemize}
-% \item \cs{@@_action_start_wildcard:N} \meta{boolean} inserted at the
-% start of the regular expression, where a \texttt{true}
-% \meta{boolean} makes it unanchored.
-% \item \cs{@@_action_success:} marks the exit state of the
-% \textsc{nfa}.
-% \item \cs{@@_action_cost:n} \Arg{shift} is a transition from the
-% current \meta{state} to $\meta{state}+\meta{shift}$, which
-% consumes the current character: the target state is saved and will
-% be considered again when matching at the next position.
-% \item \cs{@@_action_free:n} \Arg{shift}, and
-% \cs{@@_action_free_group:n} \Arg{shift} are free transitions,
-% which immediately perform the actions for the state
-% $\meta{state}+\meta{shift}$ of the \textsc{nfa}. They differ in
-% how they detect and avoid infinite loops. For now, we just need to
-% know that the \texttt{group} variant must be used for transitions
-% back to the start of a group.
-% \item \cs{@@_action_submatch:nN} \Arg{group} \meta{key} where the
-% \meta{key} is |<| or |>| for the beginning or end of group
-% numbered \meta{group}. This causes the current position in the
-% query to be stored as the \meta{key} submatch boundary.
-% \item One of these actions, within a conditional.
-% \end{itemize}
-%
-% We strive to preserve the following properties while building.
-% \begin{itemize}
-% \item The current capturing group is
-% $\text{\texttt{capturing_group}}-1$, and if a group opened now
-% it would be labelled \texttt{capturing_group}.
-% \item The last allocated state is $\text{\texttt{max_state}}-1$, so
-% \texttt{max_state} is a free state.
-% \item The \texttt{left_state} points to a state to the left of the
-% current group or of the last class.
-% \item The \texttt{right_state} points to a newly created,
-% empty state, with some transitions leading to it.
-% \item The \texttt{left/right} sequences hold a list of the
-% corresponding end-points of nested groups.
-% \end{itemize}
-%
-% \begin{macro}{\@@_build:n, \@@_build_aux:Nn, \@@_build:N, \@@_build_aux:NN}
-% The \texttt{n}-type function first compiles its argument. Reset some
-% variables. Allocate two states, and put a wildcard in state $0$
-% (transitions to state $1$ and $0$ state). Then build the regex
-% within a (capturing) group numbered $0$ (current
-% value of \texttt{capturing_group}). Finally, if the match reaches the
-% last state, it is successful. A \texttt{false} boolean for argument
-% |#1| for the auxiliaries will suppress the wildcard and make the
-% match anchored: used for \cs{peek_regex:nTF} and similar.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_build:n
- { \@@_build_aux:Nn \c_true_bool }
-\cs_new_protected:Npn \@@_build:N
- { \@@_build_aux:NN \c_true_bool }
-\cs_new_protected:Npn \@@_build_aux:Nn #1#2
- {
- \@@_compile:n {#2}
- \@@_build_aux:NN #1 \l_@@_internal_regex
- }
-\cs_new_protected:Npn \@@_build_aux:NN #1#2
- {
- \@@_standard_escapechar:
- \int_zero:N \l_@@_capturing_group_int
- \int_set_eq:NN \l_@@_max_state_int \l_@@_min_state_int
- \@@_build_new_state:
- \@@_build_new_state:
- \@@_toks_put_right:Nn \l_@@_left_state_int
- { \@@_action_start_wildcard:N #1 }
- \@@_group:nnnN {#2} { 1 } { 0 } \c_false_bool
- \@@_toks_put_right:Nn \l_@@_right_state_int
- { \@@_action_success: }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\g_@@_case_int}
-% Case number that was successfully matched in
-% \cs{regex_match_case:nn} and related functions.
-% \begin{macrocode}
-\int_new:N \g_@@_case_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_case_max_group_int}
-% The largest group number appearing in any of the \meta{regex} in the
-% argument of \cs{regex_match_case:nn} and related functions.
-% \begin{macrocode}
-\int_new:N \l_@@_case_max_group_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\@@_case_build:n, \@@_case_build:e, \@@_case_build_aux:Nn, \@@_case_build_loop:n}
-% See \cs{@@_build:n}, but with a loop.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_case_build:n #1
- {
- \@@_case_build_aux:Nn \c_true_bool {#1}
- \int_gzero:N \g_@@_case_int
- }
-\cs_generate_variant:Nn \@@_case_build:n { e }
-\cs_new_protected:Npn \@@_case_build_aux:Nn #1#2
- {
- \@@_standard_escapechar:
- \int_set_eq:NN \l_@@_max_state_int \l_@@_min_state_int
- \@@_build_new_state:
- \@@_build_new_state:
- \@@_toks_put_right:Nn \l_@@_left_state_int
- { \@@_action_start_wildcard:N #1 }
- %
- \@@_build_new_state:
- \@@_toks_put_left:Ne \l_@@_left_state_int
- { \@@_action_submatch:nN \c_zero_int < }
- \@@_push_lr_states:
- \int_zero:N \l_@@_case_max_group_int
- \int_gzero:N \g_@@_case_int
- \tl_map_inline:nn {#2}
- {
- \int_gincr:N \g_@@_case_int
- \@@_case_build_loop:n {##1}
- }
- \int_set_eq:NN \l_@@_capturing_group_int \l_@@_case_max_group_int
- \@@_pop_lr_states:
- }
-\cs_new_protected:Npn \@@_case_build_loop:n #1
- {
- \int_set_eq:NN \l_@@_capturing_group_int \c_one_int
- \@@_compile_use:n {#1}
- \int_set:Nn \l_@@_case_max_group_int
- { \int_max:nn \l_@@_case_max_group_int \l_@@_capturing_group_int }
- \seq_pop:NN \l_@@_right_state_seq \l_@@_internal_a_tl
- \int_set:Nn \l_@@_right_state_int \l_@@_internal_a_tl
- \@@_toks_put_left:Ne \l_@@_right_state_int
- {
- \@@_action_submatch:nN \c_zero_int >
- \int_gset:Nn \g_@@_case_int
- { \int_use:N \g_@@_case_int }
- \@@_action_success:
- }
- \@@_toks_clear:N \l_@@_max_state_int
- \seq_push:No \l_@@_right_state_seq
- { \int_use:N \l_@@_max_state_int }
- \int_incr:N \l_@@_max_state_int
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_build_for_cs:n}
-% The matching code relies on some global intarray variables, but only
-% uses a range of their entries. Specifically,
-% \begin{itemize}
-% \item \cs{g_@@_state_active_intarray} from \cs{l_@@_min_state_int}
-% to $\cs{l_@@_max_state_int}-1$;
-% \end{itemize}
-% Here, in this nested call to the
-% matching code, we need the new versions of this range to involve
-% completely new entries of the intarray variables, so we begin by
-% setting (the new) \cs{l_@@_min_state_int} to (the old)
-% \cs{l_@@_max_state_int} to use higher entries.
-%
-% When using a regex to match a cs, we don't insert a wildcard, we
-% anchor at the end, and since we ignore submatches, there is no need
-% to surround the expression with a group. However, for branches to
-% work properly at the outer level, we need to put the appropriate
-% \texttt{left} and \texttt{right} states in their sequence.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_build_for_cs:n #1
- {
- \int_set_eq:NN \l_@@_min_state_int \l_@@_max_state_int
- \@@_build_new_state:
- \@@_build_new_state:
- \@@_push_lr_states:
- #1
- \@@_pop_lr_states:
- \@@_toks_put_right:Nn \l_@@_right_state_int
- {
- \if_int_compare:w -2 = \l_@@_curr_char_int
- \exp_after:wN \@@_action_success:
- \fi:
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Helpers for building an \textsc{nfa}}
-%
-% \begin{macro}{\@@_push_lr_states:, \@@_pop_lr_states:}
-% When building the regular expression, we keep track of pointers to
-% the left-end and right-end of each group without help from \TeX{}'s
-% grouping.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_push_lr_states:
- {
- \seq_push:No \l_@@_left_state_seq
- { \int_use:N \l_@@_left_state_int }
- \seq_push:No \l_@@_right_state_seq
- { \int_use:N \l_@@_right_state_int }
- }
-\cs_new_protected:Npn \@@_pop_lr_states:
- {
- \seq_pop:NN \l_@@_left_state_seq \l_@@_internal_a_tl
- \int_set:Nn \l_@@_left_state_int \l_@@_internal_a_tl
- \seq_pop:NN \l_@@_right_state_seq \l_@@_internal_a_tl
- \int_set:Nn \l_@@_right_state_int \l_@@_internal_a_tl
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \@@_build_transition_left:NNN,
-% \@@_build_transition_right:nNn
-% }
-% Add a transition from |#2| to |#3| using the function |#1|. The
-% \texttt{left} function is used for higher priority transitions, and
-% the \texttt{right} function for lower priority transitions (which
-% should be performed later). The signatures differ to reflect the
-% differing usage later on. Both functions could be optimized.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_build_transition_left:NNN #1#2#3
- { \@@_toks_put_left:Ne #2 { #1 { \tex_the:D \@@_int_eval:w #3 - #2 } } }
-\cs_new_protected:Npn \@@_build_transition_right:nNn #1#2#3
- { \@@_toks_put_right:Ne #2 { #1 { \tex_the:D \@@_int_eval:w #3 - #2 } } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_build_new_state:}
-% Add a new empty state to the \textsc{nfa}. Then update the
-% \texttt{left}, \texttt{right}, and \texttt{max} states, so that the
-% \texttt{right} state is the new empty state, and the \texttt{left}
-% state points to the previously \enquote{current} state.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_build_new_state:
- {
- \@@_toks_clear:N \l_@@_max_state_int
- \int_set_eq:NN \l_@@_left_state_int \l_@@_right_state_int
- \int_set_eq:NN \l_@@_right_state_int \l_@@_max_state_int
- \int_incr:N \l_@@_max_state_int
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_build_transitions_lazyness:NNNNN}
-% This function creates a new state, and puts two transitions starting
-% from the old current state. The order of the transitions is
-% controlled by |#1|, true for lazy quantifiers, and false for greedy
-% quantifiers.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_build_transitions_lazyness:NNNNN #1#2#3#4#5
- {
- \@@_build_new_state:
- \@@_toks_put_right:Ne \l_@@_left_state_int
- {
- \if_meaning:w \c_true_bool #1
- #2 { \tex_the:D \@@_int_eval:w #3 - \l_@@_left_state_int }
- #4 { \tex_the:D \@@_int_eval:w #5 - \l_@@_left_state_int }
- \else:
- #4 { \tex_the:D \@@_int_eval:w #5 - \l_@@_left_state_int }
- #2 { \tex_the:D \@@_int_eval:w #3 - \l_@@_left_state_int }
- \fi:
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Building classes}
-%
-% \begin{macro}{\@@_class:NnnnN}
-% \begin{macro}[rEXP]{\@@_tests_action_cost:n}
-% The arguments are: \meta{boolean} \Arg{tests} \Arg{min} \Arg{more}
-% \meta{lazyness}. First store the tests with a trailing
-% \cs{@@_action_cost:n}, in the true branch of
-% \cs{@@_break_point:TF} for positive classes, or the false branch
-% for negative classes. The integer \meta{more} is $0$ for fixed
-% repetitions, $-1$ for unbounded repetitions, and
-% $\meta{max}-\meta{min}$ for a range of repetitions.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_class:NnnnN #1#2#3#4#5
- {
- \cs_set:Npe \@@_tests_action_cost:n ##1
- {
- \exp_not:n { \exp_not:n {#2} }
- \bool_if:NTF #1
- { \@@_break_point:TF { \@@_action_cost:n {##1} } { } }
- { \@@_break_point:TF { } { \@@_action_cost:n {##1} } }
- }
- \if_case:w - #4 \exp_stop_f:
- \@@_class_repeat:n {#3}
- \or: \@@_class_repeat:nN {#3} #5
- \else: \@@_class_repeat:nnN {#3} {#4} #5
- \fi:
- }
-\cs_new:Npn \@@_tests_action_cost:n { \@@_action_cost:n }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_class_repeat:n}
-% This is used for a fixed number of repetitions. Build one state for
-% each repetition, with a transition controlled by the tests that we
-% have collected. That works just fine for |#1|${}=0$ repetitions:
-% nothing is built.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_class_repeat:n #1
- {
- \prg_replicate:nn {#1}
- {
- \@@_build_new_state:
- \@@_build_transition_right:nNn \@@_tests_action_cost:n
- \l_@@_left_state_int \l_@@_right_state_int
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_class_repeat:nN}
-% This implements unbounded repetitions of a single class (\emph{e.g.}
-% the |*| and |+| quantifiers). If the minimum number |#1| of
-% repetitions is $0$, then build a transition from the current state
-% to itself governed by the tests, and a free transition to a new
-% state (hence skipping the tests). Otherwise, call
-% \cs{@@_class_repeat:n} for the code to match |#1| repetitions,
-% and add free transitions from the last state to the previous one,
-% and to a new one. In both cases, the order of transitions is
-% controlled by the lazyness boolean |#2|.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_class_repeat:nN #1#2
- {
- \if_int_compare:w #1 = \c_zero_int
- \@@_build_transitions_lazyness:NNNNN #2
- \@@_action_free:n \l_@@_right_state_int
- \@@_tests_action_cost:n \l_@@_left_state_int
- \else:
- \@@_class_repeat:n {#1}
- \int_set_eq:NN \l_@@_internal_a_int \l_@@_left_state_int
- \@@_build_transitions_lazyness:NNNNN #2
- \@@_action_free:n \l_@@_right_state_int
- \@@_action_free:n \l_@@_internal_a_int
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_class_repeat:nnN}
-% We want to build the code to match from |#1| to $|#1|+|#2|$
-% repetitions. Match |#1| repetitions (can be $0$). Compute the final
-% state of the next construction as \texttt{a}. Build $|#2|>0$ states,
-% each with a transition to the next state governed by the tests, and
-% a transition to the final state \texttt{a}. The computation of
-% \texttt{a} is safe because states are allocated in order, starting
-% from \texttt{max_state}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_class_repeat:nnN #1#2#3
- {
- \@@_class_repeat:n {#1}
- \int_set:Nn \l_@@_internal_a_int
- { \l_@@_max_state_int + #2 - \c_one_int }
- \prg_replicate:nn { #2 }
- {
- \@@_build_transitions_lazyness:NNNNN #3
- \@@_action_free:n \l_@@_internal_a_int
- \@@_tests_action_cost:n \l_@@_right_state_int
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Building groups}
-%
-% \begin{macro}{\@@_group_aux:nnnnN}
-% Arguments: \Arg{label} \Arg{contents} \Arg{min} \Arg{more}
-% \meta{lazyness}. If \meta{min} is $0$, we need to add a state before
-% building the group, so that the thread which skips the group does
-% not also set the start-point of the submatch. After adding one more
-% state, the \texttt{left_state} is the left end of the group, from
-% which all branches stem, and the \texttt{right_state} is the
-% right end of the group, and all branches end their course in that
-% state. We store those two integers to be queried for each branch, we
-% build the \textsc{nfa} states for the contents |#2| of the group,
-% and we forget about the two integers. Once this is done, perform the
-% repetition: either exactly |#3| times, or |#3| or more times, or
-% between |#3| and $|#3|+|#4|$ times, with lazyness |#5|. The
-% \meta{label} |#1| is used for submatch tracking. Each of the three
-% auxiliaries expects \texttt{left_state} and \texttt{right_state} to
-% be set properly.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_group_aux:nnnnN #1#2#3#4#5
- {
- \if_int_compare:w #3 = \c_zero_int
- \@@_build_new_state:
- \@@_build_transition_right:nNn \@@_action_free_group:n
- \l_@@_left_state_int \l_@@_right_state_int
- \fi:
- \@@_build_new_state:
- \@@_push_lr_states:
- #2
- \@@_pop_lr_states:
- \if_case:w - #4 \exp_stop_f:
- \@@_group_repeat:nn {#1} {#3}
- \or: \@@_group_repeat:nnN {#1} {#3} #5
- \else: \@@_group_repeat:nnnN {#1} {#3} {#4} #5
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_group:nnnN, \@@_group_no_capture:nnnN}
-% Hand to \cs{@@_group_aux:nnnnnN} the label of that group
-% (expanded), and the group itself, with some extra commands to
-% perform.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_group:nnnN #1
- {
- \exp_args:No \@@_group_aux:nnnnN
- { \int_use:N \l_@@_capturing_group_int }
- {
- \int_incr:N \l_@@_capturing_group_int
- #1
- }
- }
-\cs_new_protected:Npn \@@_group_no_capture:nnnN
- { \@@_group_aux:nnnnN { -1 } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_group_resetting:nnnN}
-% \begin{macro}{\@@_group_resetting_loop:nnNn}
-% Again, hand the label $-1$ to \cs{@@_group_aux:nnnnN}, but this
-% time we work a little bit harder to keep track of the maximum group
-% label at the end of any branch, and to reset the group number at
-% each branch. This relies on the fact that a compiled regex always is
-% a sequence of items of the form \cs{@@_branch:n} \Arg{branch}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_group_resetting:nnnN #1
- {
- \@@_group_aux:nnnnN { -1 }
- {
- \exp_args:Noo \@@_group_resetting_loop:nnNn
- { \int_use:N \l_@@_capturing_group_int }
- { \int_use:N \l_@@_capturing_group_int }
- #1
- { ?? \prg_break:n } { }
- \prg_break_point:
- }
- }
-\cs_new_protected:Npn \@@_group_resetting_loop:nnNn #1#2#3#4
- {
- \use_none:nn #3 { \int_set:Nn \l_@@_capturing_group_int {#1} }
- \int_set:Nn \l_@@_capturing_group_int {#2}
- #3 {#4}
- \exp_args:Ne \@@_group_resetting_loop:nnNn
- { \int_max:nn {#1} \l_@@_capturing_group_int }
- {#2}
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_branch:n}
-% Add a free transition from the left state of the current group to a
-% brand new state, starting point of this branch. Once the branch is
-% built, add a transition from its last state to the right state of
-% the group. The left and right states of the group are extracted from
-% the relevant sequences.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_branch:n #1
- {
- \@@_build_new_state:
- \seq_get:NN \l_@@_left_state_seq \l_@@_internal_a_tl
- \int_set:Nn \l_@@_left_state_int \l_@@_internal_a_tl
- \@@_build_transition_right:nNn \@@_action_free:n
- \l_@@_left_state_int \l_@@_right_state_int
- #1
- \seq_get:NN \l_@@_right_state_seq \l_@@_internal_a_tl
- \@@_build_transition_right:nNn \@@_action_free:n
- \l_@@_right_state_int \l_@@_internal_a_tl
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_group_repeat:nn}
-% This function is called to repeat a group a fixed number of times
-% |#2|; if this is $0$ we remove the group altogether (but don't reset
-% the \texttt{capturing_group} label). Otherwise, the auxiliary
-% \cs{@@_group_repeat_aux:n} copies |#2| times the \tn{toks} for
-% the group, and leaves \texttt{internal_a} pointing to the left end
-% of the last repetition. We only record the submatch information at
-% the last repetition. Finally, add a state at the end (the transition
-% to it has been taken care of by the replicating auxiliary).
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_group_repeat:nn #1#2
- {
- \if_int_compare:w #2 = \c_zero_int
- \int_set:Nn \l_@@_max_state_int
- { \l_@@_left_state_int - \c_one_int }
- \@@_build_new_state:
- \else:
- \@@_group_repeat_aux:n {#2}
- \@@_group_submatches:nNN {#1}
- \l_@@_internal_a_int \l_@@_right_state_int
- \@@_build_new_state:
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_group_submatches:nNN}
-% This inserts in states |#2| and |#3| the code for tracking
-% submatches of the group |#1|, unless inhibited by a label of $-1$.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_group_submatches:nNN #1#2#3
- {
- \if_int_compare:w #1 > - \c_one_int
- \@@_toks_put_left:Ne #2 { \@@_action_submatch:nN {#1} < }
- \@@_toks_put_left:Ne #3 { \@@_action_submatch:nN {#1} > }
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_group_repeat_aux:n}
-% Here we repeat \tn{toks} ranging from \texttt{left_state} to
-% \texttt{max_state}, $|#1|>0$ times. First add a transition so that
-% the copies \enquote{chain} properly. Compute the shift
-% \texttt{c} between the original copy and the last copy we
-% want. Shift the \texttt{right_state} and \texttt{max_state} to their
-% final values. We then want to perform \texttt{c} copy operations. At
-% the end, \texttt{b} is equal to the \texttt{max_state}, and
-% \texttt{a} points to the left of the last copy of the group.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_group_repeat_aux:n #1
- {
- \@@_build_transition_right:nNn \@@_action_free:n
- \l_@@_right_state_int \l_@@_max_state_int
- \int_set_eq:NN \l_@@_internal_a_int \l_@@_left_state_int
- \int_set_eq:NN \l_@@_internal_b_int \l_@@_max_state_int
- \if_int_compare:w \@@_int_eval:w #1 > \c_one_int
- \int_set:Nn \l_@@_internal_c_int
- {
- ( #1 - \c_one_int )
- * ( \l_@@_internal_b_int - \l_@@_internal_a_int )
- }
- \int_add:Nn \l_@@_right_state_int \l_@@_internal_c_int
- \int_add:Nn \l_@@_max_state_int \l_@@_internal_c_int
- \@@_toks_memcpy:NNn
- \l_@@_internal_b_int
- \l_@@_internal_a_int
- \l_@@_internal_c_int
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_group_repeat:nnN}
-% This function is called to repeat a group at least $n$ times; the
-% case $n=0$ is very different from $n>0$. Assume first that $n=0$.
-% Insert submatch tracking information at the start and end of the
-% group, add a free transition from the right end to the
-% \enquote{true} left state \texttt{a} (remember: in this case we had
-% added an extra state before the left state). This forms the loop,
-% which we break away from by adding a free transition from \texttt{a}
-% to a new state.
-%
-% Now consider the case $n>0$. Repeat the group $n$ times, chaining
-% various copies with a free transition. Add submatch tracking only to
-% the last copy, then add a free transition from the right end back to
-% the left end of the last copy, either before or after the transition
-% to move on towards the rest of the \textsc{nfa}. This transition can
-% end up before submatch tracking, but that is irrelevant since it
-% only does so when going again through the group, recording new
-% matches. Finally, add a state; we already have a transition pointing
-% to it from \cs{@@_group_repeat_aux:n}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_group_repeat:nnN #1#2#3
- {
- \if_int_compare:w #2 = \c_zero_int
- \@@_group_submatches:nNN {#1}
- \l_@@_left_state_int \l_@@_right_state_int
- \int_set:Nn \l_@@_internal_a_int
- { \l_@@_left_state_int - \c_one_int }
- \@@_build_transition_right:nNn \@@_action_free:n
- \l_@@_right_state_int \l_@@_internal_a_int
- \@@_build_new_state:
- \if_meaning:w \c_true_bool #3
- \@@_build_transition_left:NNN \@@_action_free:n
- \l_@@_internal_a_int \l_@@_right_state_int
- \else:
- \@@_build_transition_right:nNn \@@_action_free:n
- \l_@@_internal_a_int \l_@@_right_state_int
- \fi:
- \else:
- \@@_group_repeat_aux:n {#2}
- \@@_group_submatches:nNN {#1}
- \l_@@_internal_a_int \l_@@_right_state_int
- \if_meaning:w \c_true_bool #3
- \@@_build_transition_right:nNn \@@_action_free_group:n
- \l_@@_right_state_int \l_@@_internal_a_int
- \else:
- \@@_build_transition_left:NNN \@@_action_free_group:n
- \l_@@_right_state_int \l_@@_internal_a_int
- \fi:
- \@@_build_new_state:
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_group_repeat:nnnN}
-% We wish to repeat the group between |#2| and $|#2|+|#3|$ times, with
-% a lazyness controlled by |#4|. We insert submatch tracking up front:
-% in principle, we could avoid recording submatches for the first |#2|
-% copies of the group, but that forces us to treat specially the case
-% $|#2|=0$. Repeat that group with submatch tracking $|#2|+|#3|$ times
-% (the maximum number of repetitions). Then our goal is to add |#3|
-% transitions from the end of the |#2|-th group, and each subsequent
-% groups, to the end. For a lazy quantifier, we add those transitions
-% to the left states, before submatch tracking. For the greedy case,
-% we add the transitions to the right states, after submatch tracking
-% and the transitions which go on with more repetitions. In the greedy
-% case with $|#2|=0$, the transition which skips over all copies of
-% the group must be added separately, because its starting state does
-% not follow the normal pattern: we had to add it \enquote{by hand}
-% earlier.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_group_repeat:nnnN #1#2#3#4
- {
- \@@_group_submatches:nNN {#1}
- \l_@@_left_state_int \l_@@_right_state_int
- \@@_group_repeat_aux:n { #2 + #3 }
- \if_meaning:w \c_true_bool #4
- \int_set_eq:NN \l_@@_left_state_int \l_@@_max_state_int
- \prg_replicate:nn { #3 }
- {
- \int_sub:Nn \l_@@_left_state_int
- { \l_@@_internal_b_int - \l_@@_internal_a_int }
- \@@_build_transition_left:NNN \@@_action_free:n
- \l_@@_left_state_int \l_@@_max_state_int
- }
- \else:
- \prg_replicate:nn { #3 - \c_one_int }
- {
- \int_sub:Nn \l_@@_right_state_int
- { \l_@@_internal_b_int - \l_@@_internal_a_int }
- \@@_build_transition_right:nNn \@@_action_free:n
- \l_@@_right_state_int \l_@@_max_state_int
- }
- \if_int_compare:w #2 = \c_zero_int
- \int_set:Nn \l_@@_right_state_int
- { \l_@@_left_state_int - \c_one_int }
- \else:
- \int_sub:Nn \l_@@_right_state_int
- { \l_@@_internal_b_int - \l_@@_internal_a_int }
- \fi:
- \@@_build_transition_right:nNn \@@_action_free:n
- \l_@@_right_state_int \l_@@_max_state_int
- \fi:
- \@@_build_new_state:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Others}
-%
-% \begin{macro}{\@@_assertion:Nn, \@@_b_test:, \@@_A_test:, \@@_G_test:, \@@_Z_test:}
-% Usage: \cs{@@_assertion:Nn} \meta{boolean} \Arg{test}, where the
-% \meta{test} is either of the two other functions. Add a free
-% transition to a new state, conditionally to the assertion test. The
-% \cs{@@_b_test:} test is used by the |\b| and |\B| escape: check
-% if the last character was a word character or not, and do the same
-% to the current character. The boundary-markers of the string are
-% non-word characters for this purpose.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_assertion:Nn #1#2
- {
- \@@_build_new_state:
- \@@_toks_put_right:Ne \l_@@_left_state_int
- {
- \exp_not:n {#2}
- \@@_break_point:TF
- \bool_if:NF #1 { { } }
- {
- \@@_action_free:n
- {
- \tex_the:D \@@_int_eval:w
- \l_@@_right_state_int - \l_@@_left_state_int
- }
- }
- \bool_if:NT #1 { { } }
- }
- }
-\cs_new_protected:Npn \@@_b_test:
- {
- \group_begin:
- \int_set_eq:NN \l_@@_curr_char_int \l_@@_last_char_int
- \@@_prop_w:
- \@@_break_point:TF
- { \group_end: \@@_item_reverse:n { \@@_prop_w: } }
- { \group_end: \@@_prop_w: }
- }
-\cs_new_protected:Npn \@@_Z_test:
- {
- \if_int_compare:w -2 = \l_@@_curr_char_int
- \exp_after:wN \@@_break_true:w
- \fi:
- }
-\cs_new_protected:Npn \@@_A_test:
- {
- \if_int_compare:w -2 = \l_@@_last_char_int
- \exp_after:wN \@@_break_true:w
- \fi:
- }
-\cs_new_protected:Npn \@@_G_test:
- {
- \if_int_compare:w \l_@@_curr_pos_int = \l_@@_start_pos_int
- \exp_after:wN \@@_break_true:w
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_command_K:}
-% Change the starting point of the $0$-th submatch (full match), and
-% transition to a new state, pretending that this is a fresh thread.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_command_K:
- {
- \@@_build_new_state:
- \@@_toks_put_right:Ne \l_@@_left_state_int
- {
- \@@_action_submatch:nN \c_zero_int <
- \bool_set_true:N \l_@@_fresh_thread_bool
- \@@_action_free:n
- {
- \tex_the:D \@@_int_eval:w
- \l_@@_right_state_int - \l_@@_left_state_int
- }
- \bool_set_false:N \l_@@_fresh_thread_bool
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Matching}
-%
-% We search for matches by running all the execution threads through the
-% \textsc{nfa} in parallel, reading one token of the query at each step.
-% The \textsc{nfa} contains \enquote{free} transitions to other states,
-% and transitions which \enquote{consume} the current token. For free
-% transitions, the instruction at the new state of the \textsc{nfa} is
-% performed immediately. When a transition consumes a character, the
-% new state is appended to a list of \enquote{active states}, stored in
-% \cs{g_@@_thread_info_intarray} (together with submatch information):
-% this thread is made active again when the next
-% token is read from the query. At every step (for each token in the
-% query), we unpack that list of active states and the corresponding
-% submatch props, and empty those.
-%
-% If two paths through the \textsc{nfa} \enquote{collide} in the sense
-% that they reach the same state after reading a given token, then they
-% only differ in how they previously matched, and any future execution
-% would be identical for both. (Note that this would be wrong in the
-% presence of back-references.) Hence, we only need to keep one of the
-% two threads: the thread with the highest priority. Our \textsc{nfa} is
-% built in such a way that higher priority actions always come before
-% lower priority actions, which makes things work.
-%
-% The explanation in the previous paragraph may make us think that we
-% simply need to keep track of which states were visited at a given
-% step: after all, the loop generated when matching |(a?)*| against |a|
-% is broken, isn't it? No. The group first matches |a|, as it should,
-% then repeats; it attempts to match |a| again but fails; it skips |a|,
-% and finds out that this state has already been seen at this position
-% in the query: the match stops. The capturing group is (wrongly) |a|.
-% What went wrong is that a thread collided with itself, and the later
-% version, which has gone through the group one more times with an empty
-% match, should have a higher priority than not going through the group.
-%
-% We solve this by distinguishing \enquote{normal} free transitions
-% \cs{@@_action_free:n} from transitions
-% \cs{@@_action_free_group:n} which go back to the start of the
-% group. The former keeps threads unless they have been visited by a
-% \enquote{completed} thread, while the latter kind of transition also
-% prevents going back to a state visited by the current thread.
-%
-% \subsubsection{Variables used when matching}
-%
-% \begin{variable}
-% {
-% \l_@@_min_pos_int,
-% \l_@@_max_pos_int,
-% \l_@@_curr_pos_int,
-% \l_@@_start_pos_int,
-% \l_@@_success_pos_int,
-% }
-% The tokens in the query are indexed from \texttt{min_pos} for the
-% first to $\texttt{max_pos}-1$ for the last, and their information is
-% stored in several arrays and \tn{toks} registers with those numbers.
-% We match
-% without backtracking, keeping all threads in lockstep at the
-% \texttt{curr_pos} in the query. The starting point of the current
-% match attempt is \texttt{start_pos}, and \texttt{success_pos},
-% updated whenever a thread succeeds, is used as the next starting
-% position.
-% \begin{macrocode}
-\int_new:N \l_@@_min_pos_int
-\int_new:N \l_@@_max_pos_int
-\int_new:N \l_@@_curr_pos_int
-\int_new:N \l_@@_start_pos_int
-\int_new:N \l_@@_success_pos_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}
-% {
-% \l_@@_curr_char_int,
-% \l_@@_curr_catcode_int,
-% \l_@@_curr_token_tl,
-% \l_@@_last_char_int,
-% \l_@@_last_char_success_int,
-% \l_@@_case_changed_char_int
-% }
-% The character and category codes of the token at the current
-% position and a token list expanding to that token; the character
-% code of the token at the previous position;
-% the character code of the token just before a successful match;
-% and the character code of the result of changing the case of the
-% current token (|A-Z|$\leftrightarrow$|a-z|). This last integer is
-% only computed when necessary, and is otherwise \cs{c_max_int}. The
-% \texttt{curr_char} variable is also used in various other phases
-% to hold a character code.
-% \begin{macrocode}
-\int_new:N \l_@@_curr_char_int
-\int_new:N \l_@@_curr_catcode_int
-\tl_new:N \l_@@_curr_token_tl
-\int_new:N \l_@@_last_char_int
-\int_new:N \l_@@_last_char_success_int
-\int_new:N \l_@@_case_changed_char_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_curr_state_int}
-% For every character in the token list, each of the active states is
-% considered in turn. The variable \cs{l_@@_curr_state_int}
-% holds the state of the \textsc{nfa} which is currently considered:
-% transitions are then given as shifts relative to the current state.
-% \begin{macrocode}
-\int_new:N \l_@@_curr_state_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}
-% {\l_@@_curr_submatches_tl, \l_@@_success_submatches_tl}
-% The submatches for the thread which is currently active are stored
-% in the \texttt{curr_submatches} list, which is almost a comma list,
-% but ends with a comma. This list is stored by \cs{@@_store_state:n}
-% into an intarray variable, to be retrieved when matching at the next
-% position. When a thread succeeds, this list is copied to
-% \cs{l_@@_success_submatches_tl}: only the last successful thread
-% remains there.
-% \begin{macrocode}
-\tl_new:N \l_@@_curr_submatches_tl
-\tl_new:N \l_@@_success_submatches_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_step_int}
-% This integer, always even, is increased every time a character in
-% the query is read, and not reset when doing multiple matches. We
-% store in \cs{g_@@_state_active_intarray} the last step in which each
-% \meta{state} in the \textsc{nfa} was encountered. This lets us break
-% infinite loops by not visiting the same state twice in the same
-% step. In fact, the step we store is equal to \texttt{step} when we
-% have started performing the operations of \tn{toks}\meta{state}, but
-% not finished yet. However, once we finish, we store
-% $\text{\texttt{step}}+1$ in \cs{g_@@_state_active_intarray}. This is
-% needed to track submatches
-% properly (see building phase). The \texttt{step} is also used to
-% attach each set of submatch information to a given iteration (and
-% automatically discard it when it corresponds to a past step).
-% \begin{macrocode}
-\int_new:N \l_@@_step_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_min_thread_int, \l_@@_max_thread_int}
-% All the currently active threads are kept in order of precedence in
-% \cs{g_@@_thread_info_intarray} together with the corresponding
-% submatch information. Data in this intarray is organized as blocks
-% from \texttt{min_thread} (included) to \texttt{max_thread}
-% (excluded). At the start of every step, the whole array is
-% unpacked, so that the space can immediately be reused, and
-% \texttt{max_thread} is reset to \texttt{min_thread}, effectively
-% clearing the array.
-% \begin{macrocode}
-\int_new:N \l_@@_min_thread_int
-\int_new:N \l_@@_max_thread_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\g_@@_state_active_intarray, \g_@@_thread_info_intarray}
-% \cs{g_@@_state_active_intarray} stores the last \meta{step} in which
-% each \meta{state} was active. \cs{g_@@_thread_info_intarray} stores
-% threads to be considered in the next step, more precisely the
-% states in which these threads are.
-% \begin{macrocode}
-\intarray_new:Nn \g_@@_state_active_intarray { 65536 }
-\intarray_new:Nn \g_@@_thread_info_intarray { 65536 }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_matched_analysis_tl, \l_@@_curr_analysis_tl}
-% The list \cs{l_@@_curr_analysis_tl} consists of a brace group
-% containing three brace groups corresponding to the current token,
-% with the same syntax as \cs{tl_analysis_map_inline:nn}. The list
-% \cs{l_@@_matched_analysis_tl} (constructed under the
-% \texttt{tl\_build} machinery) has one item for each token that has
-% already been treated so far in a given match attempt: each item
-% consists of three brace groups with the same syntax as
-% \cs{tl_analysis_map_inline:nn}.
-% \begin{macrocode}
-\tl_new:N \l_@@_matched_analysis_tl
-\tl_new:N \l_@@_curr_analysis_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_every_match_tl}
-% Every time a match is found, this token list is used. For single
-% matching, the token list is empty. For multiple matching, the token
-% list is set to repeat the matching, after performing some operation
-% which depends on the user function. See \cs{@@_single_match:} and
-% \cs{@@_multi_match:n}.
-% \begin{macrocode}
-\tl_new:N \l_@@_every_match_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_fresh_thread_bool, \l_@@_empty_success_bool}
-% \begin{macro}{\@@_if_two_empty_matches:F}
-% When doing multiple matches, we need to avoid infinite loops where
-% each iteration matches the same empty token list. When an empty
-% token list is matched, the next successful match of the same empty
-% token list is suppressed. We detect empty matches by setting
-% \cs{l_@@_fresh_thread_bool} to \texttt{true} for threads which
-% directly come from the start of the regex or from the |\K| command,
-% and testing that boolean whenever a thread succeeds. The function
-% \cs{@@_if_two_empty_matches:F} is redefined at every match
-% attempt, depending on whether the previous match was empty or not:
-% if it was, then the function must cancel a purported success if it
-% is empty and at the same spot as the previous match; otherwise, we
-% definitely don't have two identical empty matches, so the function
-% is \cs{use:n}.
-% \begin{macrocode}
-\bool_new:N \l_@@_fresh_thread_bool
-\bool_new:N \l_@@_empty_success_bool
-\cs_new_eq:NN \@@_if_two_empty_matches:F \use:n
-% \end{macrocode}
-% \end{macro}
-% \end{variable}
-%
-% \begin{variable}
-% {
-% \g_@@_success_bool,
-% \l_@@_saved_success_bool,
-% \l_@@_match_success_bool
-% }
-% The boolean \cs{l_@@_match_success_bool} is true if the current
-% match attempt was successful, and \cs{g_@@_success_bool} is true
-% if there was at least one successful match. This is the only global
-% variable in this whole module, but we would need it to be local when
-% matching a control sequence with |\c{...}|. This is done by saving
-% the global variable into \cs{l_@@_saved_success_bool}, which is
-% local, hence not affected by the changes due to inner regex
-% functions.
-% \begin{macrocode}
-\bool_new:N \g_@@_success_bool
-\bool_new:N \l_@@_saved_success_bool
-\bool_new:N \l_@@_match_success_bool
-% \end{macrocode}
-% \end{variable}
-%
-% \subsubsection{Matching: framework}
-%
-% \begin{macro}{\@@_match:n, \@@_match_cs:n}
-% \begin{macro}{\@@_match_init:}
-% Initialize the variables that should
-% be set once for each user function (even for multiple
-% matches). Namely, the overall matching is not yet successful; none of
-% the states should be marked as visited (\cs{g_@@_state_active_intarray}), and
-% we start at step $0$; we pretend that there was a previous match
-% ending at the start of the query, which was not empty (to avoid
-% smothering an empty match at the start). Once all this is set up, we
-% are ready for the ride. Find the first match.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_match:n #1
- {
- \@@_match_init:
- \@@_match_once_init:
- \tl_analysis_map_inline:nn {#1}
- { \@@_match_one_token:nnN {##1} {##2} ##3 }
- \@@_match_one_token:nnN { } { -2 } F
- \prg_break_point:Nn \@@_maplike_break: { }
- }
-\cs_new_protected:Npn \@@_match_cs:n #1
- {
- \int_set_eq:NN \l_@@_min_thread_int \l_@@_max_thread_int
- \@@_match_init:
- \@@_match_once_init:
- \str_map_inline:nn {#1}
- {
- \tl_if_blank:nTF {##1}
- { \@@_match_one_token:nnN {##1} {`##1} A }
- { \@@_match_one_token:nnN {##1} {`##1} C }
- }
- \@@_match_one_token:nnN { } { -2 } F
- \prg_break_point:Nn \@@_maplike_break: { }
- }
-\cs_new_protected:Npn \@@_match_init:
- {
- \bool_gset_false:N \g_@@_success_bool
- \int_step_inline:nnn
- \l_@@_min_state_int { \l_@@_max_state_int - \c_one_int }
- {
- \__kernel_intarray_gset:Nnn
- \g_@@_state_active_intarray {##1} \c_one_int
- }
- \int_zero:N \l_@@_step_int
- \int_set:Nn \l_@@_min_pos_int { 2 }
- \int_set_eq:NN \l_@@_success_pos_int \l_@@_min_pos_int
- \int_set:Nn \l_@@_last_char_success_int { -2 }
- \tl_build_begin:N \l_@@_matched_analysis_tl
- \tl_clear:N \l_@@_curr_analysis_tl
- \int_set_eq:NN \l_@@_min_submatch_int \c_one_int
- \int_set_eq:NN \l_@@_submatch_int \l_@@_min_submatch_int
- \bool_set_false:N \l_@@_empty_success_bool
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_match_once_init:}
-% This function resets various variables used when finding one match.
-% It is called before the loop through characters, and every time we
-% find a match, before searching for another match (this is controlled
-% by the \texttt{every_match} token list).
-%
-% First initialize some variables: set the
-% conditional which detects identical empty matches; this match
-% attempt starts at the previous \texttt{success_pos}, is not yet
-% successful, and has no submatches yet; clear the array of active
-% threads, and put the starting state $0$ in it. We are then almost
-% ready to read our first token in the query, but we actually start
-% one position earlier than the start because
-% \cs{@@_match_one_token:nnN} increments \cs{l_@@_curr_pos_int} and
-% saves \cs{l_@@_curr_char_int} as the \texttt{last_char} so that word
-% boundaries can be correctly identified.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_match_once_init:
- {
- \if_meaning:w \c_true_bool \l_@@_empty_success_bool
- \cs_set:Npn \@@_if_two_empty_matches:F
- {
- \int_compare:nNnF
- \l_@@_start_pos_int = \l_@@_curr_pos_int
- }
- \else:
- \cs_set_eq:NN \@@_if_two_empty_matches:F \use:n
- \fi:
- \int_set_eq:NN \l_@@_start_pos_int \l_@@_success_pos_int
- \bool_set_false:N \l_@@_match_success_bool
- \tl_set:Ne \l_@@_curr_submatches_tl
- { \prg_replicate:nn { 2 * \l_@@_capturing_group_int } { 0 , } }
- \int_set_eq:NN \l_@@_max_thread_int \l_@@_min_thread_int
- \@@_store_state:n { \l_@@_min_state_int }
- \int_set:Nn \l_@@_curr_pos_int { \l_@@_start_pos_int - \c_one_int }
- \int_set_eq:NN \l_@@_curr_char_int \l_@@_last_char_success_int
- \tl_build_get_intermediate:NN \l_@@_matched_analysis_tl \l_@@_internal_a_tl
- \exp_args:NNf \@@_match_once_init_aux:
- \tl_map_inline:nn
- { \exp_after:wN \l_@@_internal_a_tl \l_@@_curr_analysis_tl }
- { \@@_match_one_token:nnN ##1 }
- \prg_break_point:Nn \@@_maplike_break: { }
- }
-\cs_new_protected:Npn \@@_match_once_init_aux:
- {
- \tl_build_begin:N \l_@@_matched_analysis_tl
- \tl_clear:N \l_@@_curr_analysis_tl
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_single_match:, \@@_multi_match:n}
-% For a single match, the overall success is determined by whether the
-% only match attempt is a success. When doing multiple matches, the
-% overall matching is successful as soon as any match
-% succeeds. Perform the action |#1|, then find the next match.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_single_match:
- {
- \tl_set:Nn \l_@@_every_match_tl
- {
- \bool_gset_eq:NN
- \g_@@_success_bool
- \l_@@_match_success_bool
- \@@_maplike_break:
- }
- }
-\cs_new_protected:Npn \@@_multi_match:n #1
- {
- \tl_set:Nn \l_@@_every_match_tl
- {
- \if_meaning:w \c_false_bool \l_@@_match_success_bool
- \exp_after:wN \@@_maplike_break:
- \fi:
- \bool_gset_true:N \g_@@_success_bool
- #1
- \@@_match_once_init:
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_match_one_token:nnN}
-% \begin{macro}[rEXP]{\@@_match_one_active:n}
-% At each new position, set some variables and get the new character
-% and category from the query. Then unpack the array of active
-% threads, and clear it by resetting its length
-% (\texttt{max_thread}). This results in a sequence of
-% \cs{@@_use_state_and_submatches:w} \meta{state}|,|\meta{submatch-clist}|;| and
-% we consider those states one by one in order. As soon as a thread
-% succeeds, exit the step, and, if there are threads to consider at the
-% next position, and we have not reached the end of the string,
-% repeat the loop. Otherwise, the last thread that succeeded is the
-% match. We explain the \texttt{fresh_thread} business when
-% describing \cs{@@_action_wildcard:}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_match_one_token:nnN #1#2#3
- {
- \int_add:Nn \l_@@_step_int { 2 }
- \int_incr:N \l_@@_curr_pos_int
- \int_set_eq:NN \l_@@_last_char_int \l_@@_curr_char_int
- \cs_set_eq:NN \@@_maybe_compute_ccc: \@@_compute_case_changed_char:
- \tl_set:Nn \l_@@_curr_token_tl {#1}
- \int_set:Nn \l_@@_curr_char_int {#2}
- \int_set:Nn \l_@@_curr_catcode_int { "#3 }
- \tl_build_put_right:Ne \l_@@_matched_analysis_tl
- { \exp_not:o \l_@@_curr_analysis_tl }
- \tl_set:Nn \l_@@_curr_analysis_tl { { {#1} {#2} #3 } }
- \use:e
- {
- \int_set_eq:NN \l_@@_max_thread_int \l_@@_min_thread_int
- \int_step_function:nnN
- \l_@@_min_thread_int
- { \l_@@_max_thread_int - \c_one_int }
- \@@_match_one_active:n
- }
- \prg_break_point:
- \bool_set_false:N \l_@@_fresh_thread_bool
- \if_int_compare:w \l_@@_max_thread_int > \l_@@_min_thread_int
- \if_int_compare:w -2 < \l_@@_curr_char_int
- \exp_after:wN \use_i:nn
- \fi:
- \fi:
- \l_@@_every_match_tl
- }
-\cs_new:Npn \@@_match_one_active:n #1
- {
- \@@_use_state_and_submatches:w
- \__kernel_intarray_range_to_clist:Nnn
- \g_@@_thread_info_intarray
- { \c_one_int + #1 * (\l_@@_capturing_group_int * 2 + \c_one_int) }
- { (\c_one_int + #1) * (\l_@@_capturing_group_int * 2 + \c_one_int) }
- ;
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsubsection{Using states of the \textsc{nfa}}
-%
-% \begin{macro}{\@@_use_state:}
-% Use the current \textsc{nfa} instruction. The state is initially
-% marked as belonging to the current \texttt{step}: this allows normal
-% free transition to repeat, but group-repeating transitions
-% won't. Once we are done exploring all the branches it spawned, the
-% state is marked as $\texttt{step}+1$: any thread hitting it at that
-% point will be terminated.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_use_state:
- {
- \__kernel_intarray_gset:Nnn \g_@@_state_active_intarray
- \l_@@_curr_state_int \l_@@_step_int
- \@@_toks_use:w \l_@@_curr_state_int
- \__kernel_intarray_gset:Nnn \g_@@_state_active_intarray
- \l_@@_curr_state_int
- { \@@_int_eval:w \l_@@_step_int + \c_one_int \scan_stop: }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_use_state_and_submatches:w}
-% This function is called as one item in the array of active threads
-% after that array has been unpacked for a new step. Update the
-% \texttt{curr_state} and \texttt{curr_submatches} and use the
-% state if it has not yet been encountered at this step.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_use_state_and_submatches:w #1 , #2 ;
- {
- \int_set:Nn \l_@@_curr_state_int {#1}
- \if_int_compare:w
- \__kernel_intarray_item:Nn \g_@@_state_active_intarray
- \l_@@_curr_state_int
- < \l_@@_step_int
- \tl_set:Nn \l_@@_curr_submatches_tl { #2 , }
- \exp_after:wN \@@_use_state:
- \fi:
- \scan_stop:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Actions when matching}
-%
-% \begin{macro}{\@@_action_start_wildcard:N}
-% For an unanchored match, state $0$ has a free transition to the next
-% and a costly one to itself, to repeat at the next position. To catch
-% repeated identical empty matches, we need to know if a successful
-% thread corresponds to an empty match. The instruction resetting
-% \cs{l_@@_fresh_thread_bool} may be skipped by a successful
-% thread, hence we had to add it to \cs{@@_match_one_token:nnN} too.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_action_start_wildcard:N #1
- {
- \bool_set_true:N \l_@@_fresh_thread_bool
- \@@_action_free:n {1}
- \bool_set_false:N \l_@@_fresh_thread_bool
- \bool_if:NT #1 { \@@_action_cost:n {0} }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_action_free:n, \@@_action_free_group:n}
-% \begin{macro}{\@@_action_free_aux:nn}
-% These functions copy a thread after checking that the \textsc{nfa}
-% state has not already been used at this position. If not, store
-% submatches in the new state, and insert the instructions for that
-% state in the input stream. Then restore the old value of
-% \cs{l_@@_curr_state_int} and of the current submatches. The
-% two types of free transitions differ by how they test that the state
-% has not been encountered yet: the \texttt{group} version is
-% stricter, and will not use a state if it was used earlier in the
-% current thread, hence forcefully breaking the loop, while the
-% \enquote{normal} version will revisit a state even within the thread
-% itself.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_action_free:n
- { \@@_action_free_aux:nn { > \l_@@_step_int \else: } }
-\cs_new_protected:Npn \@@_action_free_group:n
- { \@@_action_free_aux:nn { < \l_@@_step_int } }
-\cs_new_protected:Npn \@@_action_free_aux:nn #1#2
- {
- \use:e
- {
- \int_add:Nn \l_@@_curr_state_int {#2}
- \exp_not:n
- {
- \if_int_compare:w
- \__kernel_intarray_item:Nn \g_@@_state_active_intarray
- \l_@@_curr_state_int
- #1
- \exp_after:wN \@@_use_state:
- \fi:
- }
- \int_set:Nn \l_@@_curr_state_int
- { \int_use:N \l_@@_curr_state_int }
- \tl_set:Nn \exp_not:N \l_@@_curr_submatches_tl
- { \exp_not:o \l_@@_curr_submatches_tl }
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_action_cost:n}
-% A transition which consumes the current character and shifts the
-% state by |#1|. The resulting state is stored in the appropriate array
-% for use at the next position, and we also store the current
-% submatches.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_action_cost:n #1
- {
- \exp_args:No \@@_store_state:n
- { \tex_the:D \@@_int_eval:w \l_@@_curr_state_int + #1 }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_store_state:n}
-% \begin{macro}{\@@_store_submatches:}
-% Put the given state and current submatch information in
-% \cs{g_@@_thread_info_intarray}, and increment the length of the
-% array.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_store_state:n #1
- {
- \exp_args:No \@@_store_submatches:nn
- \l_@@_curr_submatches_tl {#1}
- \int_incr:N \l_@@_max_thread_int
- }
-\cs_new_protected:Npn \@@_store_submatches:nn #1#2
- {
- \__kernel_intarray_gset_range_from_clist:Nnn
- \g_@@_thread_info_intarray
- {
- \@@_int_eval:w
- \c_one_int + \l_@@_max_thread_int *
- (\l_@@_capturing_group_int * 2 + \c_one_int)
- }
- { #2 , #1 }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_disable_submatches:}
-% Some user functions don't require tracking submatches.
-% We get a performance improvement by simply defining the
-% relevant functions to remove their argument and do nothing
-% with it.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_disable_submatches:
- {
- \cs_set_protected:Npn \@@_store_submatches:n ##1 { }
- \cs_set_protected:Npn \@@_action_submatch:nN ##1##2 { }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_action_submatch:nN, \@@_action_submatch_aux:w, \@@_action_submatch_auxii:w, \@@_action_submatch_auxiii:w, \@@_action_submatch_auxiv:w}
-% Update the current submatches with the information from the current
-% position. Maybe a bottleneck.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_action_submatch:nN #1#2
- {
- \exp_after:wN \@@_action_submatch_aux:w
- \l_@@_curr_submatches_tl ; {#1} #2
- }
-\cs_new_protected:Npn \@@_action_submatch_aux:w #1 ; #2#3
- {
- \tl_set:Ne \l_@@_curr_submatches_tl
- {
- \prg_replicate:nn
- { #2 \if_meaning:w > #3 + \l_@@_capturing_group_int \fi: }
- { \@@_action_submatch_auxii:w }
- \@@_action_submatch_auxiii:w
- #1
- }
- }
-\cs_new:Npn \@@_action_submatch_auxii:w
- #1 \@@_action_submatch_auxiii:w #2 ,
- { #2 , #1 \@@_action_submatch_auxiii:w }
-\cs_new:Npn \@@_action_submatch_auxiii:w #1 ,
- { \int_use:N \l_@@_curr_pos_int , }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_action_success:}
-% There is a successful match when an execution path reaches the last
-% state in the \textsc{nfa}, unless this marks a second identical
-% empty match. Then mark that there was a successful match; it is
-% empty if it is \enquote{fresh}; and we store the current position
-% and submatches. The current step is then interrupted with
-% \cs{prg_break:}, and only paths with higher precedence are
-% pursued further. The values stored here may be overwritten by a
-% later success of a path with higher precedence.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_action_success:
- {
- \@@_if_two_empty_matches:F
- {
- \bool_set_true:N \l_@@_match_success_bool
- \bool_set_eq:NN \l_@@_empty_success_bool
- \l_@@_fresh_thread_bool
- \int_set_eq:NN \l_@@_success_pos_int \l_@@_curr_pos_int
- \int_set_eq:NN \l_@@_last_char_success_int \l_@@_last_char_int
- \tl_build_begin:N \l_@@_matched_analysis_tl
- \tl_set_eq:NN \l_@@_success_submatches_tl
- \l_@@_curr_submatches_tl
- \prg_break:
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Replacement}
-%
-% \subsubsection{Variables and helpers used in replacement}
-%
-% \begin{variable}{\l_@@_replacement_csnames_int}
-% The behaviour of closing braces inside a replacement text depends on
-% whether a sequences |\c{| or |\u{| has been encountered. The number
-% of \enquote{open} such sequences that should be closed by |}| is
-% stored in \cs{l_@@_replacement_csnames_int}, and decreased by
-% $1$ by each |}|.
-% \begin{macrocode}
-\int_new:N \l_@@_replacement_csnames_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_replacement_category_tl, \l_@@_replacement_category_seq}
-% This sequence of letters is used to correctly restore categories in
-% nested constructions such as |\cL(abc\cD(_)d)|.
-% \begin{macrocode}
-\tl_new:N \l_@@_replacement_category_tl
-\seq_new:N \l_@@_replacement_category_seq
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\g_@@_balance_tl}
-% This token list holds the replacement text for
-% \cs{@@_replacement_balance_one_match:n} while it is being built
-% incrementally.
-% \begin{macrocode}
-\tl_new:N \g_@@_balance_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[rEXP]{\@@_replacement_balance_one_match:n}
-% This expects as an argument the first index of a set of entries in
-% \cs{g_@@_submatch_begin_intarray} (and related arrays) which hold the
-% submatch information for a given match. It
-% can be used within an integer expression to obtain the brace balance
-% incurred by performing the replacement on that match. This combines
-% the braces lost by removing the match, braces added by all the
-% submatches appearing in the replacement, and braces appearing
-% explicitly in the replacement. Even though it is always redefined
-% before use, we initialize it as for an empty replacement. An
-% important property is that concatenating several calls to that
-% function must result in a valid integer expression (hence a leading
-% |+| in the actual definition).
-% \begin{macrocode}
-\cs_new:Npn \@@_replacement_balance_one_match:n #1
- { - \@@_submatch_balance:n {#1} }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_replacement_do_one_match:n}
-% The input is the same as \cs{@@_replacement_balance_one_match:n}.
-% This function is redefined to expand to the part of the token list
-% from the end of the previous match to a given match, followed by the
-% replacement text. Hence concatenating the result of this function
-% with all possible arguments (one call for each match), as well as
-% the range from the end of the last match to the end of the string,
-% produces the fully replaced token list. The initialization does
-% not matter, but (as an example) we set it as for an empty replacement.
-% \begin{macrocode}
-\cs_new:Npn \@@_replacement_do_one_match:n #1
- {
- \@@_query_range:nn
- { \__kernel_intarray_item:Nn \g_@@_submatch_prev_intarray {#1} }
- { \__kernel_intarray_item:Nn \g_@@_submatch_begin_intarray {#1} }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_replacement_exp_not:N}
-% This function lets us navigate around the fact that the primitive
-% \cs{exp_not:n} requires a braced argument. As far as I can tell, it
-% is only needed if the user tries to include in the replacement text
-% a control sequence set equal to a macro parameter character, such as
-% \cs{c_parameter_token}. Indeed, within an \texttt{e}/\texttt{x}-expanding
-% assignment, \cs{exp_not:N}~|#| behaves as a single |#|, whereas
-% \cs{exp_not:n}~|{#}| behaves as a doubled |##|.
-% \begin{macrocode}
-\cs_new:Npn \@@_replacement_exp_not:N #1 { \exp_not:n {#1} }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_replacement_exp_not:V}
-% This is used for the implementation of~|\u|, and it gets redefined
-% for \cs{peek_regex_replace_once:nnTF}.
-% \begin{macrocode}
-\cs_new_eq:NN \@@_replacement_exp_not:V \exp_not:V
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Query and brace balance}
-%
-% \begin{macro}[rEXP]{\@@_query_range:nn}
-% \begin{macro}[rEXP]{\@@_query_range_loop:ww}
-% When it is time to extract submatches from the token list, the
-% various tokens are stored in \tn{toks} registers numbered from
-% \cs{l_@@_min_pos_int} inclusive to \cs{l_@@_max_pos_int}
-% exclusive. The function \cs{@@_query_range:nn} \Arg{min}
-% \Arg{max} unpacks registers from the position \meta{min} to the
-% position $\meta{max}-1$ included. Once this is expanded, a second
-% \texttt{e}-expansion results in the actual tokens from the
-% query. That second expansion is only done by user functions at the
-% very end of their operation, after checking (and correcting) the
-% brace balance first.
-% \begin{macrocode}
-\cs_new:Npn \@@_query_range:nn #1#2
- {
- \exp_after:wN \@@_query_range_loop:ww
- \int_value:w \@@_int_eval:w #1 \exp_after:wN ;
- \int_value:w \@@_int_eval:w #2 ;
- \prg_break_point:
- }
-\cs_new:Npn \@@_query_range_loop:ww #1 ; #2 ;
- {
- \if_int_compare:w #1 < #2 \exp_stop_f:
- \else:
- \prg_break:n
- \fi:
- \@@_toks_use:w #1 \exp_stop_f:
- \exp_after:wN \@@_query_range_loop:ww
- \int_value:w \@@_int_eval:w #1 + \c_one_int ; #2 ;
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_query_submatch:n}
-% Find the start and end positions for a given submatch (of a given match).
-% \begin{macrocode}
-\cs_new:Npn \@@_query_submatch:n #1
- {
- \@@_query_range:nn
- { \__kernel_intarray_item:Nn \g_@@_submatch_begin_intarray {#1} }
- { \__kernel_intarray_item:Nn \g_@@_submatch_end_intarray {#1} }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_submatch_balance:n}
-% Every user function must result in a balanced token list (unbalanced
-% token lists cannot be stored by TeX). When we unpacked the query, we
-% kept track of the brace balance, hence the contribution from a given
-% range is the difference between the brace balances at the
-% \meta{max~pos} and \meta{min~pos}. These two positions are found in
-% the corresponding \enquote{submatch} arrays.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_submatch_balance:n #1
- {
- \tex_the:D \@@_int_eval:w
- \@@_intarray_item:NnF \g_@@_balance_intarray
- {
- \__kernel_intarray_item:Nn
- \g_@@_submatch_end_intarray {#1}
- }
- \c_zero_int
- -
- \@@_intarray_item:NnF \g_@@_balance_intarray
- {
- \__kernel_intarray_item:Nn
- \g_@@_submatch_begin_intarray {#1}
- }
- \c_zero_int
- \scan_stop:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Framework}
-%
-% \begin{macro}{\@@_replacement:n, \@@_replacement:e}
-% \begin{macro}{\@@_replacement_apply:Nn, \@@_replacement_set:n}
-% The replacement text is built incrementally. We keep track in
-% \cs{l_@@_balance_int} of the balance of explicit begin- and
-% end-group tokens and we store in \cs{g_@@_balance_tl} some
-% code to compute the brace balance from submatches (see its
-% description). Detect unescaped right braces, and escaped characters,
-% with trailing \cs{prg_do_nothing:} because some of the later
-% function look-ahead. Once the whole replacement text has been
-% parsed, make sure that there is no open csname. Finally, define the
-% \texttt{balance_one_match} and \texttt{do_one_match} functions.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_replacement:n
- { \@@_replacement_apply:Nn \@@_replacement_set:n }
-\cs_new_protected:Npn \@@_replacement_apply:Nn #1#2
- {
- \group_begin:
- \tl_build_begin:N \l_@@_build_tl
- \int_zero:N \l_@@_balance_int
- \tl_gclear:N \g_@@_balance_tl
- \@@_escape_use:nnnn
- {
- \if_charcode:w \c_right_brace_str ##1
- \@@_replacement_rbrace:N
- \else:
- \if_charcode:w \c_left_brace_str ##1
- \@@_replacement_lbrace:N
- \else:
- \@@_replacement_normal:n
- \fi:
- \fi:
- ##1
- }
- { \@@_replacement_escaped:N ##1 }
- { \@@_replacement_normal:n ##1 }
- {#2}
- \prg_do_nothing: \prg_do_nothing:
- \if_int_compare:w \l_@@_replacement_csnames_int > \c_zero_int
- \msg_error:nne { regex } { replacement-missing-rbrace }
- { \int_use:N \l_@@_replacement_csnames_int }
- \tl_build_put_right:Ne \l_@@_build_tl
- { \prg_replicate:nn \l_@@_replacement_csnames_int \cs_end: }
- \fi:
- \seq_if_empty:NF \l_@@_replacement_category_seq
- {
- \msg_error:nne { regex } { replacement-missing-rparen }
- { \seq_count:N \l_@@_replacement_category_seq }
- \seq_clear:N \l_@@_replacement_category_seq
- }
- \tl_gput_right:Ne \g_@@_balance_tl
- { + \int_use:N \l_@@_balance_int }
- \tl_build_end:N \l_@@_build_tl
- \exp_args:NNo
- \group_end:
- #1 \l_@@_build_tl
- }
-\cs_generate_variant:Nn \@@_replacement:n { e }
-\cs_new_protected:Npn \@@_replacement_set:n #1
- {
- \cs_set:Npn \@@_replacement_do_one_match:n ##1
- {
- \@@_query_range:nn
- {
- \__kernel_intarray_item:Nn
- \g_@@_submatch_prev_intarray {##1}
- }
- {
- \__kernel_intarray_item:Nn
- \g_@@_submatch_begin_intarray {##1}
- }
- #1
- }
- \exp_args:Nno \use:n
- { \cs_gset:Npn \@@_replacement_balance_one_match:n ##1 }
- {
- \g_@@_balance_tl
- - \@@_submatch_balance:n {##1}
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_case_replacement:n, \@@_case_replacement:e}
-% \begin{macrocode}
-\tl_new:N \g_@@_case_replacement_tl
-\tl_new:N \g_@@_case_balance_tl
-\cs_new_protected:Npn \@@_case_replacement:n #1
- {
- \tl_gset:Nn \g_@@_case_balance_tl
- {
- \if_case:w
- \__kernel_intarray_item:Nn
- \g_@@_submatch_case_intarray {##1}
- }
- \tl_gset_eq:NN \g_@@_case_replacement_tl \g_@@_case_balance_tl
- \tl_map_tokens:nn {#1}
- { \@@_replacement_apply:Nn \@@_case_replacement_aux:n }
- \tl_gset:No \g_@@_balance_tl
- { \g_@@_case_balance_tl \fi: }
- \exp_args:No \@@_replacement_set:n
- { \g_@@_case_replacement_tl \fi: }
- }
-\cs_generate_variant:Nn \@@_case_replacement:n { e }
-\cs_new_protected:Npn \@@_case_replacement_aux:n #1
- {
- \tl_gput_right:Nn \g_@@_case_replacement_tl { \or: #1 }
- \tl_gput_right:No \g_@@_case_balance_tl
- { \exp_after:wN \or: \g_@@_balance_tl }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_replacement_put:n}
-% This gets redefined for \cs{peek_regex_replace_once:nnTF}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_replacement_put:n
- { \tl_build_put_right:Nn \l_@@_build_tl }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_replacement_normal:n, \@@_replacement_normal_aux:N}
-% Most characters are simply sent to the output by
-% \cs{tl_build_put_right:Nn}, unless a particular category code has been
-% requested: then \cs{@@_replacement_c_A:w} or a similar auxiliary is
-% called. One exception is right parentheses, which restore the
-% category code in place before the group started. Note that the
-% sequence is non-empty there: it contains an empty entry
-% corresponding to the initial value of
-% \cs{l_@@_replacement_category_tl}.
-% The argument |#1| is a single character (including the case of a catcode-other space).
-% In case no specific catcode is requested, we taked into account the
-% current catcode regime (at the time the replacement is performed)
-% as much as reasonable, with all impossible catcodes (escape,
-% newline, etc.) being mapped to \enquote{other}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_replacement_normal:n #1
- {
- \int_compare:nNnTF \l_@@_replacement_csnames_int > \c_zero_int
- { \exp_args:No \@@_replacement_put:n { \token_to_str:N #1 } }
- {
- \tl_if_empty:NTF \l_@@_replacement_category_tl
- { \@@_replacement_normal_aux:N #1 }
- { % (
- \token_if_eq_charcode:NNTF #1 )
- {
- \seq_pop:NN \l_@@_replacement_category_seq
- \l_@@_replacement_category_tl
- }
- {
- \use:c { @@_replacement_c_ \l_@@_replacement_category_tl :w }
- ? #1
- }
- }
- }
- }
-\cs_new_protected:Npn \@@_replacement_normal_aux:N #1
- {
- \token_if_eq_charcode:NNTF #1 \c_space_token
- { \@@_replacement_c_S:w }
- {
- \exp_after:wN \exp_after:wN
- \if_case:w \tex_catcode:D `#1 \exp_stop_f:
- \@@_replacement_c_O:w
- \or: \@@_replacement_c_B:w
- \or: \@@_replacement_c_E:w
- \or: \@@_replacement_c_M:w
- \or: \@@_replacement_c_T:w
- \or: \@@_replacement_c_O:w
- \or: \@@_replacement_c_P:w
- \or: \@@_replacement_c_U:w
- \or: \@@_replacement_c_D:w
- \or: \@@_replacement_c_O:w
- \or: \@@_replacement_c_S:w
- \or: \@@_replacement_c_L:w
- \or: \@@_replacement_c_O:w
- \or: \@@_replacement_c_A:w
- \else: \@@_replacement_c_O:w
- \fi:
- }
- ? #1
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_replacement_escaped:N}
-% As in parsing a regular expression, we use an auxiliary built from
-% |#1| if defined. Otherwise, check for escaped digits (standing from
-% submatches from $0$ to $9$): anything else is a raw character.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_replacement_escaped:N #1
- {
- \cs_if_exist_use:cF { @@_replacement_#1:w }
- {
- \if_int_compare:w \c_one_int < 1#1 \exp_stop_f:
- \@@_replacement_put_submatch:n {#1}
- \else:
- \@@_replacement_normal:n {#1}
- \fi:
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Submatches}
-%
-% \begin{macro}{\@@_replacement_put_submatch:n, \@@_replacement_put_submatch_aux:n}
-% Insert a submatch in the replacement text. This is dropped if the
-% submatch number is larger than the number of capturing groups.
-% Unless the submatch appears inside a |\c{...}| or |\u{...}|
-% construction, it must be taken into account in the brace balance.
-% Later on, |##1| will be replaced by a pointer to the $0$-th submatch for a
-% given match.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_replacement_put_submatch:n #1
- {
- \if_int_compare:w #1 < \l_@@_capturing_group_int
- \@@_replacement_put_submatch_aux:n {#1}
- \else:
- \msg_expandable_error:nnff { regex } { submatch-too-big }
- {#1} { \int_eval:n { \l_@@_capturing_group_int - \c_one_int } }
- \fi:
- }
-\cs_new_protected:Npn \@@_replacement_put_submatch_aux:n #1
- {
- \tl_build_put_right:Nn \l_@@_build_tl
- { \@@_query_submatch:n { \@@_int_eval:w #1 + ##1 \scan_stop: } }
- \if_int_compare:w \l_@@_replacement_csnames_int = \c_zero_int
- \tl_gput_right:Nn \g_@@_balance_tl
- { + \@@_submatch_balance:n { \@@_int_eval:w #1 + ##1 \scan_stop: } }
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_replacement_g:w}
-% \begin{macro}[rEXP]{\@@_replacement_g_digits:NN}
-% Grab digits for the |\g| escape sequence in a primitive assignment
-% to the integer \cs{l_@@_internal_a_int}. At the end of the run of
-% digits, check that it ends with a right brace.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_replacement_g:w #1#2
- {
- \token_if_eq_meaning:NNTF #1 \@@_replacement_lbrace:N
- { \l_@@_internal_a_int = \@@_replacement_g_digits:NN }
- { \@@_replacement_error:NNN g #1 #2 }
- }
-\cs_new:Npn \@@_replacement_g_digits:NN #1#2
- {
- \token_if_eq_meaning:NNTF #1 \@@_replacement_normal:n
- {
- \if_int_compare:w \c_one_int < 1#2 \exp_stop_f:
- #2
- \exp_after:wN \use_i:nnn
- \exp_after:wN \@@_replacement_g_digits:NN
- \else:
- \exp_stop_f:
- \exp_after:wN \@@_replacement_error:NNN
- \exp_after:wN g
- \fi:
- }
- {
- \exp_stop_f:
- \if_meaning:w \@@_replacement_rbrace:N #1
- \exp_args:No \@@_replacement_put_submatch:n
- { \int_use:N \l_@@_internal_a_int }
- \exp_after:wN \use_none:nn
- \else:
- \exp_after:wN \@@_replacement_error:NNN
- \exp_after:wN g
- \fi:
- }
- #1 #2
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsubsection{Csnames in replacement}
-%
-% \begin{macro}{\@@_replacement_c:w}
-% |\c| may only be followed by an unescaped character. If followed by
-% a left brace, start a control sequence by calling an auxiliary
-% common with |\u|. Otherwise test whether the category is known; if
-% it is not, complain.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_replacement_c:w #1#2
- {
- \token_if_eq_meaning:NNTF #1 \@@_replacement_normal:n
- {
- \cs_if_exist:cTF { @@_replacement_c_#2:w }
- { \@@_replacement_cat:NNN #2 }
- { \@@_replacement_error:NNN c #1#2 }
- }
- {
- \token_if_eq_meaning:NNTF #1 \@@_replacement_lbrace:N
- { \@@_replacement_cu_aux:Nw \@@_replacement_exp_not:N }
- { \@@_replacement_error:NNN c #1#2 }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_replacement_cu_aux:Nw}
-% Start a control sequence with \cs{cs:w}, protected
-% from expansion by |#1| (either \cs{@@_replacement_exp_not:N} or
-% \cs{exp_not:V}), or turned to a string by \cs{tl_to_str:V} if inside
-% another csname construction |\c| or |\u|. We use \cs{tl_to_str:V}
-% rather than \cs{tl_to_str:N} to deal with integers and other
-% registers.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_replacement_cu_aux:Nw #1
- {
- \if_case:w \l_@@_replacement_csnames_int
- \tl_build_put_right:Nn \l_@@_build_tl
- { \exp_not:n { \exp_after:wN #1 \cs:w } }
- \else:
- \tl_build_put_right:Nn \l_@@_build_tl
- { \exp_not:n { \exp_after:wN \tl_to_str:V \cs:w } }
- \fi:
- \int_incr:N \l_@@_replacement_csnames_int
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_replacement_u:w}
-% Check that |\u| is followed by a left brace. If so, start a control
-% sequence with \cs{cs:w}, which is then unpacked either with
-% \cs{exp_not:V} or \cs{tl_to_str:V} depending on the current context.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_replacement_u:w #1#2
- {
- \token_if_eq_meaning:NNTF #1 \@@_replacement_lbrace:N
- { \@@_replacement_cu_aux:Nw \@@_replacement_exp_not:V }
- { \@@_replacement_error:NNN u #1#2 }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_replacement_rbrace:N}
-% Within a |\c{...}| or |\u{...}| construction, end the control
-% sequence, and decrease the brace count. Otherwise, this is a raw
-% right brace.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_replacement_rbrace:N #1
- {
- \if_int_compare:w \l_@@_replacement_csnames_int > \c_zero_int
- \tl_build_put_right:Nn \l_@@_build_tl { \cs_end: }
- \int_decr:N \l_@@_replacement_csnames_int
- \else:
- \@@_replacement_normal:n {#1}
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_replacement_lbrace:N}
-% Within a |\c{...}| or |\u{...}| construction, this is
-% forbidden. Otherwise, this is a raw left brace.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_replacement_lbrace:N #1
- {
- \if_int_compare:w \l_@@_replacement_csnames_int > \c_zero_int
- \msg_error:nnn { regex } { cu-lbrace } { u }
- \else:
- \@@_replacement_normal:n {#1}
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Characters in replacement}
-%
-% \begin{macro}{\@@_replacement_cat:NNN}
-% Here, |#1| is a letter among |BEMTPUDSLOA| and |#2#3| denote the
-% next character. Complain if we reach the end of the replacement or
-% if the construction appears inside |\c{|\ldots{}|}| or
-% |\u{|\ldots{}|}|, and detect the case of a parenthesis. In that
-% case, store the current category in a sequence and switch to a new
-% one.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_replacement_cat:NNN #1#2#3
- {
- \token_if_eq_meaning:NNTF \prg_do_nothing: #3
- { \msg_error:nn { regex } { replacement-catcode-end } }
- {
- \int_compare:nNnTF \l_@@_replacement_csnames_int > \c_zero_int
- {
- \msg_error:nnnn
- { regex } { replacement-catcode-in-cs } {#1} {#3}
- #2 #3
- }
- {
- \@@_two_if_eq:NNNNTF #2 #3 \@@_replacement_normal:n (
- {
- \seq_push:NV \l_@@_replacement_category_seq
- \l_@@_replacement_category_tl
- \tl_set:Nn \l_@@_replacement_category_tl {#1}
- }
- {
- \token_if_eq_meaning:NNT #2 \@@_replacement_escaped:N
- {
- \@@_char_if_alphanumeric:NTF #3
- {
- \msg_error:nnnn
- { regex } { replacement-catcode-escaped }
- {#1} {#3}
- }
- { }
- }
- \use:c { @@_replacement_c_#1:w } #2 #3
- }
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% We now need to change the category code of the null character many
-% times, hence work in a group. The catcode-specific macros below are
-% defined in alphabetical order; if you are trying to understand the
-% code, start from the end of the alphabet as those categories are
-% simpler than active or begin-group.
-% \begin{macrocode}
-\group_begin:
-% \end{macrocode}
-%
-% \begin{macro}{\@@_replacement_char:nNN}
-% The only way to produce an arbitrary character--catcode pair is to
-% use the \tn{lowercase} or \tn{uppercase} primitives. This is a
-% wrapper for our purposes. The first argument is the null character
-% with various catcodes. The second and third arguments are grabbed
-% from the input stream: |#3| is the character whose character code to
-% reproduce. We could use \cs{char_generate:nn} but only for some
-% catcodes (active characters and spaces are not supported).
-% \begin{macrocode}
- \cs_new_protected:Npn \@@_replacement_char:nNN #1#2#3
- {
- \tex_lccode:D \c_zero_int = `#3 \scan_stop:
- \tex_lowercase:D { \@@_replacement_put:n {#1} }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_replacement_c_A:w}
-% For an active character, expansion must be avoided, twice because we
-% later do two \texttt{e}-expansions, to unpack \tn{toks} for the
-% query, and to expand their contents to tokens of the query.
-% \begin{macrocode}
- \char_set_catcode_active:N \^^@
- \cs_new_protected:Npn \@@_replacement_c_A:w
- { \@@_replacement_char:nNN { \exp_not:n { \exp_not:N ^^@ } } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_replacement_c_B:w}
-% An explicit begin-group token increases the balance, unless within a
-% |\c{...}| or |\u{...}| construction. Add the desired begin-group
-% character, using the standard \cs{if_false:} trick. We eventually
-% \texttt{e}-expand twice. The first time must yield a balanced token
-% list, and the second one gives the bare begin-group token. The
-% \cs{exp_after:wN} is not strictly needed, but is more consistent
-% with \pkg{l3tl-analysis}.
-% \begin{macrocode}
- \char_set_catcode_group_begin:N \^^@
- \cs_new_protected:Npn \@@_replacement_c_B:w
- {
- \if_int_compare:w \l_@@_replacement_csnames_int = \c_zero_int
- \int_incr:N \l_@@_balance_int
- \fi:
- \@@_replacement_char:nNN
- { \exp_not:n { \exp_after:wN ^^@ \if_false: } \fi: } }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_replacement_c_C:w}
-% This is not quite catcode-related: when the user requests a
-% character with category \enquote{control sequence}, the
-% one-character control symbol is returned. As for the active
-% character, we prepare for two \texttt{e}-expansions.
-% \begin{macrocode}
- \cs_new_protected:Npn \@@_replacement_c_C:w #1#2
- {
- \tl_build_put_right:Nn \l_@@_build_tl
- { \exp_not:N \@@_replacement_exp_not:N \exp_not:c {#2} }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_replacement_c_D:w}
-% Subscripts fit the mould: \tn{lowercase} the null byte with the
-% correct category.
-% \begin{macrocode}
- \char_set_catcode_math_subscript:N \^^@
- \cs_new_protected:Npn \@@_replacement_c_D:w
- { \@@_replacement_char:nNN { ^^@ } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_replacement_c_E:w}
-% Similar to the begin-group case, the second \texttt{e}-expansion
-% produces the bare end-group token.
-% \begin{macrocode}
- \char_set_catcode_group_end:N \^^@
- \cs_new_protected:Npn \@@_replacement_c_E:w
- {
- \if_int_compare:w \l_@@_replacement_csnames_int = \c_zero_int
- \int_decr:N \l_@@_balance_int
- \fi:
- \@@_replacement_char:nNN
- { \exp_not:n { \if_false: { \fi: ^^@ } }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_replacement_c_L:w}
-% Simply \tn{lowercase} a letter null byte to produce an arbitrary letter.
-% \begin{macrocode}
- \char_set_catcode_letter:N \^^@
- \cs_new_protected:Npn \@@_replacement_c_L:w
- { \@@_replacement_char:nNN { ^^@ } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_replacement_c_M:w}
-% No surprise here, we lowercase the null math toggle.
-% \begin{macrocode}
- \char_set_catcode_math_toggle:N \^^@
- \cs_new_protected:Npn \@@_replacement_c_M:w
- { \@@_replacement_char:nNN { ^^@ } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_replacement_c_O:w}
-% Lowercase an other null byte.
-% \begin{macrocode}
- \char_set_catcode_other:N \^^@
- \cs_new_protected:Npn \@@_replacement_c_O:w
- { \@@_replacement_char:nNN { ^^@ } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_replacement_c_P:w}
-% For macro parameters, expansion is a tricky issue. We need to
-% prepare for two \texttt{e}-expansions and passing through various
-% macro definitions. Note that we cannot replace one \cs{exp_not:n} by
-% doubling the macro parameter characters because this would misbehave
-% if a mischievous user asks for |\c{\cP\#}|, since that macro
-% parameter character would be doubled.
-% \begin{macrocode}
- \char_set_catcode_parameter:N \^^@
- \cs_new_protected:Npn \@@_replacement_c_P:w
- {
- \@@_replacement_char:nNN
- { \exp_not:n { \exp_not:n { ^^@^^@^^@^^@ } } }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_replacement_c_S:w}
-% Spaces are normalized on input by \TeX{} to have character code
-% $32$. It is in fact impossible to get a token with character code
-% $0$ and category code $10$. Hence we use $32$ instead of $0$ as our
-% base character.
-% \begin{macrocode}
- \cs_new_protected:Npn \@@_replacement_c_S:w #1#2
- {
- \if_int_compare:w `#2 = \c_zero_int
- \msg_error:nn { regex } { replacement-null-space }
- \fi:
- \tex_lccode:D `\ = `#2 \scan_stop:
- \tex_lowercase:D { \@@_replacement_put:n {~} }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_replacement_c_T:w}
-% No surprise for alignment tabs here. Those are surrounded by the
-% appropriate braces whenever necessary, hence they don't cause
-% trouble in alignment settings.
-% \begin{macrocode}
- \char_set_catcode_alignment:N \^^@
- \cs_new_protected:Npn \@@_replacement_c_T:w
- { \@@_replacement_char:nNN { ^^@ } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_replacement_c_U:w}
-% Simple call to \cs{@@_replacement_char:nNN} which lowercases the
-% math superscript |^^@|.
-% \begin{macrocode}
- \char_set_catcode_math_superscript:N \^^@
- \cs_new_protected:Npn \@@_replacement_c_U:w
- { \@@_replacement_char:nNN { ^^@ } }
-% \end{macrocode}
-% \end{macro}
-%
-% Restore the catcode of the null byte.
-% \begin{macrocode}
-\group_end:
-% \end{macrocode}
-%
-% \subsubsection{An error}
-%
-% \begin{macro}{\@@_replacement_error:NNN}
-% Simple error reporting by calling one of the messages
-% \texttt{replacement-c}, \texttt{replacement-g}, or
-% \texttt{replacement-u}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_replacement_error:NNN #1#2#3
- {
- \msg_error:nne { regex } { replacement-#1 } {#3}
- #2 #3
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{User functions}
-%
-% \begin{macro}{\regex_new:N}
-% Before being assigned a sensible value, a regex variable matches
-% nothing.
-% \begin{macrocode}
-\cs_new_protected:Npn \regex_new:N #1
- { \cs_new_eq:NN #1 \c_@@_no_match_regex }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\l_tmpa_regex, \l_tmpb_regex, \g_tmpa_regex, \g_tmpb_regex}
-% The usual scratch space.
-% \begin{macrocode}
-\regex_new:N \l_tmpa_regex
-\regex_new:N \l_tmpb_regex
-\regex_new:N \g_tmpa_regex
-\regex_new:N \g_tmpb_regex
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\regex_set:Nn, \regex_gset:Nn, \regex_const:Nn}
-% Compile, then store the result in the user variable with the
-% appropriate assignment function.
-% \begin{macrocode}
-\cs_new_protected:Npn \regex_set:Nn #1#2
- {
- \@@_compile:n {#2}
- \tl_set_eq:NN #1 \l_@@_internal_regex
- }
-\cs_new_protected:Npn \regex_gset:Nn #1#2
- {
- \@@_compile:n {#2}
- \tl_gset_eq:NN #1 \l_@@_internal_regex
- }
-\cs_new_protected:Npn \regex_const:Nn #1#2
- {
- \@@_compile:n {#2}
- \tl_const:Ne #1 { \exp_not:o \l_@@_internal_regex }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \regex_show:n, \regex_log:n, \@@_show:Nn,
-% \regex_show:N, \regex_log:N, \@@_show:NN
-% }
-% User functions: the \texttt{n} variant requires compilation first.
-% Then show the variable with some appropriate text. The auxiliary
-% \cs{@@_show:N} is defined in a different section.
-% \begin{macrocode}
-\cs_new_protected:Npn \regex_show:n { \@@_show:Nn \msg_show:nneeee }
-\cs_new_protected:Npn \regex_log:n { \@@_show:Nn \msg_log:nneeee }
-\cs_new_protected:Npn \@@_show:Nn #1#2
- {
- \@@_compile:n {#2}
- \@@_show:N \l_@@_internal_regex
- #1 { regex } { show }
- { \tl_to_str:n {#2} } { }
- { \l_@@_internal_a_tl } { }
- }
-\cs_new_protected:Npn \regex_show:N { \@@_show:NN \msg_show:nneeee }
-\cs_new_protected:Npn \regex_log:N { \@@_show:NN \msg_log:nneeee }
-\cs_new_protected:Npn \@@_show:NN #1#2
- {
- \__kernel_chk_tl_type:NnnT #2 { regex }
- { \exp_args:No \@@_clean_regex:n {#2} }
- {
- \@@_show:N #2
- #1 { regex } { show }
- { } { \token_to_str:N #2 }
- { \l_@@_internal_a_tl } { }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[TF]
-% {
-% \regex_match:nn, \regex_match:nV,
-% \regex_match:Nn, \regex_match:NV
-% }
-% Those conditionals are based on a common auxiliary defined
-% later. Its first argument builds the \textsc{nfa} corresponding to
-% the regex, and the second argument is the query token list. Once we
-% have performed the match, convert the resulting boolean to
-% \cs{prg_return_true:} or \texttt{false}.
-% \begin{macrocode}
-\prg_new_protected_conditional:Npnn \regex_match:nn #1#2 { T , F , TF }
- {
- \@@_if_match:nn { \@@_build:n {#1} } {#2}
- \@@_return:
- }
-\prg_generate_conditional_variant:Nnn \regex_match:nn { nV } { T , F , TF }
-\prg_new_protected_conditional:Npnn \regex_match:Nn #1#2 { T , F , TF }
- {
- \@@_if_match:nn { \@@_build:N #1 } {#2}
- \@@_return:
- }
-\prg_generate_conditional_variant:Nnn \regex_match:Nn { NV } { T , F , TF }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {\regex_count:nnN, \regex_count:nVN, \regex_count:NnN, \regex_count:NVN}
-% Again, use an auxiliary whose first argument builds the \textsc{nfa}.
-% \begin{macrocode}
-\cs_new_protected:Npn \regex_count:nnN #1
- { \@@_count:nnN { \@@_build:n {#1} } }
-\cs_new_protected:Npn \regex_count:NnN #1
- { \@@_count:nnN { \@@_build:N #1 } }
-\cs_generate_variant:Nn \regex_count:nnN { nV }
-\cs_generate_variant:Nn \regex_count:NnN { NV }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[noTF]{\regex_match_case:nn}
-% The auxiliary errors if |#1| has an odd number of items, and
-% otherwise it sets \cs{g_@@_case_int} according to which case was
-% found (zero if not found). The \texttt{true} branch leaves the
-% corresponding code in the input stream.
-% \begin{macrocode}
-\cs_new_protected:Npn \regex_match_case:nnTF #1#2#3
- {
- \@@_match_case:nnTF {#1} {#2}
- {
- \tl_item:nn {#1} { 2 * \g_@@_case_int }
- #3
- }
- }
-\cs_new_protected:Npn \regex_match_case:nn #1#2
- { \regex_match_case:nnTF {#1} {#2} { } { } }
-\cs_new_protected:Npn \regex_match_case:nnT #1#2#3
- { \regex_match_case:nnTF {#1} {#2} {#3} { } }
-\cs_new_protected:Npn \regex_match_case:nnF #1#2
- { \regex_match_case:nnTF {#1} {#2} { } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[noTF]
-% {
-% \regex_extract_once:nnN, \regex_extract_once:nVN,
-% \regex_extract_once:NnN, \regex_extract_once:NVN,
-% \regex_extract_all:nnN, \regex_extract_all:nVN,
-% \regex_extract_all:NnN, \regex_extract_all:NVN,
-% \regex_replace_once:nnN, \regex_replace_once:nVN,
-% \regex_replace_once:NnN, \regex_replace_once:NVN,
-% \regex_replace_all:nnN, \regex_replace_all:nVN,
-% \regex_replace_all:NnN, \regex_replace_all:NVN,
-% \regex_split:NnN, \regex_split:NVN,
-% \regex_split:nnN, \regex_split:nVN
-% }
-% We define here $40$ user functions, following a common pattern in
-% terms of \texttt{:nnN} auxiliaries, defined in the coming
-% subsections. The auxiliary is handed \cs{@@_build:n} or
-% \cs{@@_build:N} with the appropriate regex argument, then all
-% other necessary arguments (replacement text, token list, \emph{etc.}
-% The conditionals call \cs{@@_return:} to return either
-% \texttt{true} or \texttt{false} once matching has been performed.
-% \begin{macrocode}
-\cs_set_protected:Npn \@@_tmp:w #1#2#3
- {
- \cs_new_protected:Npn #2 ##1 { #1 { \@@_build:n {##1} } }
- \cs_new_protected:Npn #3 ##1 { #1 { \@@_build:N ##1 } }
- \prg_new_protected_conditional:Npnn #2 ##1##2##3 { T , F , TF }
- { #1 { \@@_build:n {##1} } {##2} ##3 \@@_return: }
- \prg_new_protected_conditional:Npnn #3 ##1##2##3 { T , F , TF }
- { #1 { \@@_build:N ##1 } {##2} ##3 \@@_return: }
- \cs_generate_variant:Nn #2 { nV }
- \prg_generate_conditional_variant:Nnn #2 { nV } { T , F , TF }
- \cs_generate_variant:Nn #3 { NV }
- \prg_generate_conditional_variant:Nnn #3 { NV } { T , F , TF }
- }
-\@@_tmp:w \@@_extract_once:nnN
- \regex_extract_once:nnN \regex_extract_once:NnN
-\@@_tmp:w \@@_extract_all:nnN
- \regex_extract_all:nnN \regex_extract_all:NnN
-\@@_tmp:w \@@_replace_once:nnN
- \regex_replace_once:nnN \regex_replace_once:NnN
-\@@_tmp:w \@@_replace_all:nnN
- \regex_replace_all:nnN \regex_replace_all:NnN
-\@@_tmp:w \@@_split:nnN \regex_split:nnN \regex_split:NnN
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[noTF]{\regex_replace_case_once:nN}
-% If the input is bad (odd number of items) then take the false
-% branch. Otherwise, use the same auxiliary as
-% \cs{regex_replace_once:nnN}, but with more complicated code to build
-% the automaton, and to find what replacement text to use. The
-% \cs{tl_item:nn} is only expanded once we know the value of
-% \cs{g_@@_case_int}, namely which case matched.
-% \begin{macrocode}
-\cs_new_protected:Npn \regex_replace_case_once:nNTF #1#2
- {
- \int_if_odd:nTF { \tl_count:n {#1} }
- {
- \msg_error:nneeee { regex } { case-odd }
- { \token_to_str:N \regex_replace_case_once:nN(TF) } { code }
- { \tl_count:n {#1} } { \tl_to_str:n {#1} }
- \use_ii:nn
- }
- {
- \@@_replace_once_aux:nnN
- { \@@_case_build:e { \@@_tl_odd_items:n {#1} } }
- { \@@_replacement:e { \tl_item:nn {#1} { 2 * \g_@@_case_int } } }
- #2
- \bool_if:NTF \g_@@_success_bool
- }
- }
-\cs_new_protected:Npn \regex_replace_case_once:nN #1#2
- { \regex_replace_case_once:nNTF {#1} {#2} { } { } }
-\cs_new_protected:Npn \regex_replace_case_once:nNT #1#2#3
- { \regex_replace_case_once:nNTF {#1} {#2} {#3} { } }
-\cs_new_protected:Npn \regex_replace_case_once:nNF #1#2
- { \regex_replace_case_once:nNTF {#1} {#2} { } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[noTF]{\regex_replace_case_all:nN}
-% If the input is bad (odd number of items) then take the false
-% branch. Otherwise, use the same auxiliary as
-% \cs{regex_replace_all:nnN}, but with more complicated code to build
-% the automaton, and to find what replacement text to use.
-% \begin{macrocode}
-\cs_new_protected:Npn \regex_replace_case_all:nNTF #1#2
- {
- \int_if_odd:nTF { \tl_count:n {#1} }
- {
- \msg_error:nneeee { regex } { case-odd }
- { \token_to_str:N \regex_replace_case_all:nN(TF) } { code }
- { \tl_count:n {#1} } { \tl_to_str:n {#1} }
- \use_ii:nn
- }
- {
- \@@_replace_all_aux:nnN
- { \@@_case_build:e { \@@_tl_odd_items:n {#1} } }
- { \@@_case_replacement:e { \@@_tl_even_items:n {#1} } }
- #2
- \bool_if:NTF \g_@@_success_bool
- }
- }
-\cs_new_protected:Npn \regex_replace_case_all:nN #1#2
- { \regex_replace_case_all:nNTF {#1} {#2} { } { } }
-\cs_new_protected:Npn \regex_replace_case_all:nNT #1#2#3
- { \regex_replace_case_all:nNTF {#1} {#2} {#3} { } }
-\cs_new_protected:Npn \regex_replace_case_all:nNF #1#2
- { \regex_replace_case_all:nNTF {#1} {#2} { } }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Variables and helpers for user functions}
-%
-% \begin{variable}{\l_@@_match_count_int}
-% The number of matches found so far is stored
-% in \cs{l_@@_match_count_int}. This is only used
-% in the \cs{regex_count:nnN} functions.
-% \begin{macrocode}
-\int_new:N \l_@@_match_count_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_begin_flag, \l_@@_end_flag}
-% Those flags are raised to indicate begin-group or end-group tokens
-% that had to be added when extracting submatches.
-% \begin{macrocode}
-\flag_new:N \l_@@_begin_flag
-\flag_new:N \l_@@_end_flag
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_min_submatch_int, \l_@@_submatch_int, \l_@@_zeroth_submatch_int}
-% The end-points of each submatch are stored in two arrays whose index \meta{submatch} ranges
-% from \cs{l_@@_min_submatch_int} (inclusive) to
-% \cs{l_@@_submatch_int} (exclusive). Each successful match comes
-% with a $0$-th submatch (the full match), and one match for each
-% capturing group: submatches corresponding to the last successful
-% match are labelled starting at \texttt{zeroth_submatch}. The entry
-% \cs{l_@@_zeroth_submatch_int} in \cs{g_@@_submatch_prev_intarray} holds
-% the position at which that match attempt started: this is used for
-% splitting and replacements.
-% \begin{macrocode}
-\int_new:N \l_@@_min_submatch_int
-\int_new:N \l_@@_submatch_int
-\int_new:N \l_@@_zeroth_submatch_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\g_@@_submatch_prev_intarray, \g_@@_submatch_begin_intarray, \g_@@_submatch_end_intarray, \g_@@_submatch_case_intarray}
-% Hold the place where the match attempt begun, the end-points of each
-% submatch, and which regex case the match corresponds to, respectively.
-% \begin{macrocode}
-\intarray_new:Nn \g_@@_submatch_prev_intarray { 65536 }
-\intarray_new:Nn \g_@@_submatch_begin_intarray { 65536 }
-\intarray_new:Nn \g_@@_submatch_end_intarray { 65536 }
-\intarray_new:Nn \g_@@_submatch_case_intarray { 65536 }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\g_@@_balance_intarray}
-% The first thing we do when matching is to store the balance of
-% begin-group/end-group characters into \cs{g_@@_balance_intarray}.
-% \begin{macrocode}
-\intarray_new:Nn \g_@@_balance_intarray { 65536 }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_added_begin_int, \l_@@_added_end_int}
-% Keep track of the number of left/right braces to add when performing
-% a regex operation such as a replacement.
-% \begin{macrocode}
-\int_new:N \l_@@_added_begin_int
-\int_new:N \l_@@_added_end_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\@@_return:}
-% This function triggers either \cs{prg_return_false:} or
-% \cs{prg_return_true:} as appropriate to whether a match was found or
-% not. It is used by all user conditionals.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_return:
- {
- \if_meaning:w \c_true_bool \g_@@_success_bool
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_query_set:n, \@@_query_set_aux:nN}
-% To easily extract subsets of the input once we found the positions
-% at which to cut, store the input tokens one by one into successive
-% \tn{toks} registers. Also store the brace balance (used to check
-% for overall brace balance) in an array.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_query_set:n #1
- {
- \int_zero:N \l_@@_balance_int
- \int_zero:N \l_@@_curr_pos_int
- \@@_query_set_aux:nN { } F
- \tl_analysis_map_inline:nn {#1}
- { \@@_query_set_aux:nN {##1} ##3 }
- \@@_query_set_aux:nN { } F
- \int_set_eq:NN \l_@@_max_pos_int \l_@@_curr_pos_int
- }
-\cs_new_protected:Npn \@@_query_set_aux:nN #1#2
- {
- \int_incr:N \l_@@_curr_pos_int
- \@@_toks_set:Nn \l_@@_curr_pos_int {#1}
- \__kernel_intarray_gset:Nnn \g_@@_balance_intarray
- \l_@@_curr_pos_int \l_@@_balance_int
- \if_case:w "#2 \exp_stop_f:
- \or: \int_incr:N \l_@@_balance_int
- \or: \int_decr:N \l_@@_balance_int
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Matching}
-%
-% \begin{macro}{\@@_if_match:nn}
-% We don't track submatches, and stop after a single match. Build the
-% \textsc{nfa} with |#1|, and perform the match on the query |#2|.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_if_match:nn #1#2
- {
- \group_begin:
- \@@_disable_submatches:
- \@@_single_match:
- #1
- \@@_match:n {#2}
- \group_end:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_match_case:nnTF}
-% \begin{macro}[EXP]{\@@_match_case_aux:nn}
-% The code would get badly messed up if the number of items in |#1|
-% were not even, so we catch this case, then follow the same code as
-% \cs{regex_match:nnTF} but using \cs{@@_case_build:n} and without
-% returning a result.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_match_case:nnTF #1#2
- {
- \int_if_odd:nTF { \tl_count:n {#1} }
- {
- \msg_error:nneeee { regex } { case-odd }
- { \token_to_str:N \regex_match_case:nn(TF) } { code }
- { \tl_count:n {#1} } { \tl_to_str:n {#1} }
- \use_ii:nn
- }
- {
- \@@_if_match:nn
- { \@@_case_build:e { \@@_tl_odd_items:n {#1} } }
- {#2}
- \bool_if:NTF \g_@@_success_bool
- }
- }
-\cs_new:Npn \@@_match_case_aux:nn #1#2 { \exp_not:n { {#1} } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_count:nnN}
-% Again, we don't care about submatches. Instead of aborting after the
-% first \enquote{longest match} is found, we search for multiple
-% matches, incrementing \cs{l_@@_match_count_int} every time to
-% record the number of matches. Build the \textsc{nfa} and match. At
-% the end, store the result in the user's variable.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_count:nnN #1#2#3
- {
- \group_begin:
- \@@_disable_submatches:
- \int_zero:N \l_@@_match_count_int
- \@@_multi_match:n { \int_incr:N \l_@@_match_count_int }
- #1
- \@@_match:n {#2}
- \exp_args:NNNo
- \group_end:
- \int_set:Nn #3 { \int_use:N \l_@@_match_count_int }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Extracting submatches}
-%
-% \begin{macro}{\@@_extract_once:nnN, \@@_extract_all:nnN}
-% Match once or multiple times. After each match (or after the only
-% match), extract the submatches using \cs{@@_extract:}. At the
-% end, store the sequence containing all the submatches into the user
-% variable |#3| after closing the group.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_extract_once:nnN #1#2#3
- {
- \group_begin:
- \@@_single_match:
- #1
- \@@_match:n {#2}
- \@@_extract:
- \@@_query_set:n {#2}
- \@@_group_end_extract_seq:N #3
- }
-\cs_new_protected:Npn \@@_extract_all:nnN #1#2#3
- {
- \group_begin:
- \@@_multi_match:n { \@@_extract: }
- #1
- \@@_match:n {#2}
- \@@_query_set:n {#2}
- \@@_group_end_extract_seq:N #3
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_split:nnN}
-% Splitting at submatches is a bit more tricky. For each match,
-% extract all submatches, and replace the zeroth submatch by the part
-% of the query between the start of the match attempt and the start of
-% the zeroth submatch. This is inhibited if the delimiter matched an
-% empty token list at the start of this match attempt. After the last
-% match, store the last part of the token list, which ranges from the
-% start of the match attempt to the end of the query. This step is
-% inhibited if the last match was empty and at the very end: decrement
-% \cs{l_@@_submatch_int}, which controls which matches will be used.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_split:nnN #1#2#3
- {
- \group_begin:
- \@@_multi_match:n
- {
- \if_int_compare:w
- \l_@@_start_pos_int < \l_@@_success_pos_int
- \@@_extract:
- \__kernel_intarray_gset:Nnn \g_@@_submatch_prev_intarray
- \l_@@_zeroth_submatch_int \c_zero_int
- \__kernel_intarray_gset:Nnn \g_@@_submatch_end_intarray
- \l_@@_zeroth_submatch_int
- {
- \__kernel_intarray_item:Nn \g_@@_submatch_begin_intarray
- \l_@@_zeroth_submatch_int
- }
- \__kernel_intarray_gset:Nnn \g_@@_submatch_begin_intarray
- \l_@@_zeroth_submatch_int
- \l_@@_start_pos_int
- \fi:
- }
- #1
- \@@_match:n {#2}
- \@@_query_set:n {#2}
- \__kernel_intarray_gset:Nnn \g_@@_submatch_prev_intarray
- \l_@@_submatch_int \c_zero_int
- \__kernel_intarray_gset:Nnn \g_@@_submatch_end_intarray
- \l_@@_submatch_int
- \l_@@_max_pos_int
- \__kernel_intarray_gset:Nnn \g_@@_submatch_begin_intarray
- \l_@@_submatch_int
- \l_@@_start_pos_int
- \int_incr:N \l_@@_submatch_int
- \if_meaning:w \c_true_bool \l_@@_empty_success_bool
- \if_int_compare:w \l_@@_start_pos_int = \l_@@_max_pos_int
- \int_decr:N \l_@@_submatch_int
- \fi:
- \fi:
- \@@_group_end_extract_seq:N #3
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_group_end_extract_seq:N}
-% \begin{macro}{\@@_extract_seq:N}
-% \begin{macro}{\@@_extract_seq:NNn}
-% \begin{macro}{\@@_extract_seq_loop:Nw}
-% The end-points of submatches are stored as entries of two arrays
-% from \cs{l_@@_min_submatch_int} to \cs{l_@@_submatch_int}
-% (exclusive). Extract the relevant ranges into \cs{g_@@_internal_tl},
-% separated by \cs{@@_tmp:w} |{}|. We keep track in the two flags
-% \texttt{__regex_begin} and \texttt{__regex_end} of the number of
-% begin-group or end-group tokens added to make each of these items
-% overall balanced. At this step, |}{| is counted as being balanced
-% (same number of begin-group and end-group tokens). This problem is
-% caught by \cs{@@_extract_check:w}, explained later. After
-% complaining about any begin-group or end-group tokens we had to add,
-% we are ready to construct the user's sequence outside the group.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_group_end_extract_seq:N #1
- {
- \flag_clear:N \l_@@_begin_flag
- \flag_clear:N \l_@@_end_flag
- \cs_set_eq:NN \@@_tmp:w \scan_stop:
- \__kernel_tl_gset:Nx \g_@@_internal_tl
- {
- \int_step_function:nnN \l_@@_min_submatch_int
- { \l_@@_submatch_int - \c_one_int } \@@_extract_seq_aux:n
- \@@_tmp:w
- }
- \int_set:Nn \l_@@_added_begin_int
- { \flag_height:N \l_@@_begin_flag }
- \int_set:Nn \l_@@_added_end_int
- { \flag_height:N \l_@@_end_flag }
- \tex_afterassignment:D \@@_extract_check:w
- \__kernel_tl_gset:Nx \g_@@_internal_tl
- { \g_@@_internal_tl \if_false: { \fi: } }
- \int_compare:nNnT
- { \l_@@_added_begin_int + \l_@@_added_end_int } > \c_zero_int
- {
- \msg_error:nneee { regex } { result-unbalanced }
- { splitting~or~extracting~submatches }
- { \int_use:N \l_@@_added_begin_int }
- { \int_use:N \l_@@_added_end_int }
- }
- \group_end:
- \@@_extract_seq:N #1
- }
-\cs_gset_protected:Npn \@@_extract_seq:N #1
- {
- \seq_clear:N #1
- \cs_set_eq:NN \@@_tmp:w \@@_extract_seq_loop:Nw
- \exp_after:wN \@@_extract_seq:NNn
- \exp_after:wN #1
- \g_@@_internal_tl \use_none:nnn
- }
-\cs_new_protected:Npn \@@_extract_seq:NNn #1#2#3
- { #3 #2 #1 \prg_do_nothing: }
-\cs_new_protected:Npn \@@_extract_seq_loop:Nw #1#2 \@@_tmp:w #3
- {
- \seq_put_right:No #1 {#2}
- #3 \@@_extract_seq_loop:Nw #1 \prg_do_nothing:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_extract_seq_aux:n, \@@_extract_seq_aux:ww}
-% The \texttt{:n} auxiliary builds one item of the sequence of
-% submatches. First compute the brace balance of the submatch, then
-% extract the submatch from the query, adding the appropriate braces
-% and raising a flag if the submatch is not balanced.
-% \begin{macrocode}
-\cs_new:Npn \@@_extract_seq_aux:n #1
- {
- \@@_tmp:w { }
- \exp_after:wN \@@_extract_seq_aux:ww
- \int_value:w \@@_submatch_balance:n {#1} ; #1;
- }
-\cs_new:Npn \@@_extract_seq_aux:ww #1; #2;
- {
- \if_int_compare:w #1 < \c_zero_int
- \prg_replicate:nn {-#1}
- {
- \flag_raise:N \l_@@_begin_flag
- \exp_not:n { { \if_false: } \fi: }
- }
- \fi:
- \@@_query_submatch:n {#2}
- \if_int_compare:w #1 > \c_zero_int
- \prg_replicate:nn {#1}
- {
- \flag_raise:N \l_@@_end_flag
- \exp_not:n { \if_false: { \fi: } }
- }
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \@@_extract_check:w, \@@_extract_check:n,
-% \@@_extract_check_loop:w, \@@_extract_check_end:w
-% }
-% In \cs{@@_group_end_extract_seq:N} we had to expand
-% \cs{g_@@_internal_tl} to turn \cs{if_false:} constructions into
-% actual begin-group and end-group tokens. This is done with a
-% \cs{__kernel_tl_gset:Nx} assignment, and \cs{@@_extract_check:w} is
-% run immediately after this assignment ends, thanks to the
-% \tn{afterassignment} primitive. If all of the items were properly
-% balanced (enough begin-group tokens before end-group tokens, so |}{|
-% is not) then \cs{@@_extract_check:w} is called just before the
-% closing brace of the \cs{__kernel_tl_gset:Nx} (thanks to our sneaky
-% \cs{if_false:} |{| \cs{fi:} |}| construction), and finds that there
-% is nothing left to expand. If any of the items is unbalanced, the
-% assignment gets ended early by an extra end-group token, and our
-% check finds more tokens needing to be expanded in a new
-% \cs{__kernel_tl_gset:Nx} assignment. We need to add a begin-group
-% and an end-group tokens to the unbalanced item, namely to the last
-% item found so far, which we reach through a loop.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_extract_check:w
- {
- \exp_after:wN \@@_extract_check:n
- \exp_after:wN { \if_false: } \fi:
- }
-\cs_new_protected:Npn \@@_extract_check:n #1
- {
- \tl_if_empty:nF {#1}
- {
- \int_incr:N \l_@@_added_begin_int
- \int_incr:N \l_@@_added_end_int
- \tex_afterassignment:D \@@_extract_check:w
- \__kernel_tl_gset:Nx \g_@@_internal_tl
- {
- \exp_after:wN \@@_extract_check_loop:w
- \g_@@_internal_tl
- \@@_tmp:w \@@_extract_check_end:w
- #1
- }
- }
- }
-\cs_new:Npn \@@_extract_check_loop:w #1 \@@_tmp:w #2
- {
- #2
- \exp_not:o {#1}
- \@@_tmp:w { }
- \@@_extract_check_loop:w \prg_do_nothing:
- }
-% \end{macrocode}
-% Arguments of \cs{@@_extract_check_end:w} are: |#1| is the part of
-% the item before the extra end-group token; |#2| is junk; |#3| is
-% \cs{prg_do_nothing:} followed by the not-yet-expanded part of the
-% item after the extra end-group token. In the replacement text, the
-% first brace and the \cs{if_false:} |{| \cs{fi:} |}| construction are
-% the added begin-group and end-group tokens (the latter being not-yet
-% expanded, just like~|#3|), while the closing brace after
-% \cs{exp_not:o} |{#1}| replaces the extra end-group token that had
-% ended the assignment early. In particular this means that the
-% character code of that end-group token is lost.
-% \begin{macrocode}
-\cs_new:Npn \@@_extract_check_end:w
- \exp_not:o #1#2 \@@_extract_check_loop:w #3 \@@_tmp:w
- {
- { \exp_not:o {#1} }
- #3
- \if_false: { \fi: }
- \@@_tmp:w
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_extract:, \@@_extract_aux:w}
-% Our task here is to store the list of end-points of submatches, and
-% store them in appropriate array entries, from
-% \cs{l_@@_zeroth_submatch_int} upwards. First, we store in
-% \cs{g_@@_submatch_prev_intarray} the position at which the match
-% attempt started. We extract the rest from the comma list
-% \cs{l_@@_success_submatches_tl}, which starts with entries to be
-% stored in \cs{g_@@_submatch_begin_intarray} and continues with
-% entries for \cs{g_@@_submatch_end_intarray}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_extract:
- {
- \if_meaning:w \c_true_bool \g_@@_success_bool
- \int_set_eq:NN \l_@@_zeroth_submatch_int \l_@@_submatch_int
- \prg_replicate:nn \l_@@_capturing_group_int
- {
- \__kernel_intarray_gset:Nnn \g_@@_submatch_prev_intarray
- \l_@@_submatch_int \c_zero_int
- \__kernel_intarray_gset:Nnn \g_@@_submatch_case_intarray
- \l_@@_submatch_int \c_zero_int
- \int_incr:N \l_@@_submatch_int
- }
- \__kernel_intarray_gset:Nnn \g_@@_submatch_prev_intarray
- \l_@@_zeroth_submatch_int \l_@@_start_pos_int
- \__kernel_intarray_gset:Nnn \g_@@_submatch_case_intarray
- \l_@@_zeroth_submatch_int \g_@@_case_int
- \int_zero:N \l_@@_internal_a_int
- \exp_after:wN \@@_extract_aux:w \l_@@_success_submatches_tl
- \prg_break_point: \@@_use_none_delimit_by_q_recursion_stop:w ,
- \q_@@_recursion_stop
- \fi:
- }
-\cs_new_protected:Npn \@@_extract_aux:w #1 ,
- {
- \prg_break: #1 \prg_break_point:
- \if_int_compare:w \l_@@_internal_a_int < \l_@@_capturing_group_int
- \__kernel_intarray_gset:Nnn \g_@@_submatch_begin_intarray
- { \@@_int_eval:w \l_@@_zeroth_submatch_int + \l_@@_internal_a_int } {#1}
- \else:
- \__kernel_intarray_gset:Nnn \g_@@_submatch_end_intarray
- {
- \@@_int_eval:w
- \l_@@_zeroth_submatch_int + \l_@@_internal_a_int
- - \l_@@_capturing_group_int
- }
- {#1}
- \fi:
- \int_incr:N \l_@@_internal_a_int
- \@@_extract_aux:w
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Replacement}
-%
-% \begin{macro}{\@@_replace_once:nnN, \@@_replace_once_aux:nnN}
-% Build the \textsc{nfa} and the replacement functions, then find a
-% single match. If the match failed, simply exit the
-% group. Otherwise, we do the replacement. Extract submatches. Compute
-% the brace balance corresponding to replacing this match by the
-% replacement (this depends on submatches). Prepare the replaced token
-% list: the replacement function produces the tokens from the start of
-% the query to the start of the match and the replacement text for
-% this match; we need to add the tokens from the end of the match to
-% the end of the query. Finally, store the result in the user's
-% variable after closing the group: this step involves an additional
-% \texttt{e}-expansion, and checks that braces are balanced in the
-% final result.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_replace_once:nnN #1#2
- { \@@_replace_once_aux:nnN {#1} { \@@_replacement:n {#2} } }
-\cs_new_protected:Npn \@@_replace_once_aux:nnN #1#2#3
- {
- \group_begin:
- \@@_single_match:
- #1
- \exp_args:No \@@_match:n {#3}
- \bool_if:NTF \g_@@_success_bool
- {
- \@@_extract:
- \exp_args:No \@@_query_set:n {#3}
- #2
- \int_set:Nn \l_@@_balance_int
- { \@@_replacement_balance_one_match:n \l_@@_zeroth_submatch_int }
- \__kernel_tl_set:Nx \l_@@_internal_a_tl
- {
- \@@_replacement_do_one_match:n \l_@@_zeroth_submatch_int
- \@@_query_range:nn
- {
- \__kernel_intarray_item:Nn \g_@@_submatch_end_intarray
- \l_@@_zeroth_submatch_int
- }
- \l_@@_max_pos_int
- }
- \@@_group_end_replace:N #3
- }
- { \group_end: }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_replace_all:nnN}
-% Match multiple times, and for every match, extract submatches and
-% additionally store the position at which the match attempt started.
-% The entries from \cs{l_@@_min_submatch_int} to
-% \cs{l_@@_submatch_int} hold information about submatches of every
-% match in order; each match corresponds to
-% \cs{l_@@_capturing_group_int} consecutive entries.
-% Compute the brace balance corresponding to doing all the
-% replacements: this is the sum of brace balances for replacing each
-% match. Join together the replacement texts for each match (including
-% the part of the query before the match), and the end of the query.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_replace_all:nnN #1#2
- { \@@_replace_all_aux:nnN {#1} { \@@_replacement:n {#2} } }
-\cs_new_protected:Npn \@@_replace_all_aux:nnN #1#2#3
- {
- \group_begin:
- \@@_multi_match:n { \@@_extract: }
- #1
- \exp_args:No \@@_match:n {#3}
- \exp_args:No \@@_query_set:n {#3}
- #2
- \int_set:Nn \l_@@_balance_int
- {
- \c_zero_int
- \int_step_function:nnnN
- \l_@@_min_submatch_int
- \l_@@_capturing_group_int
- { \l_@@_submatch_int - \c_one_int }
- \@@_replacement_balance_one_match:n
- }
- \__kernel_tl_set:Nx \l_@@_internal_a_tl
- {
- \int_step_function:nnnN
- \l_@@_min_submatch_int
- \l_@@_capturing_group_int
- { \l_@@_submatch_int - \c_one_int }
- \@@_replacement_do_one_match:n
- \@@_query_range:nn
- \l_@@_start_pos_int \l_@@_max_pos_int
- }
- \@@_group_end_replace:N #3
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \@@_group_end_replace:N, \@@_group_end_replace_try:,
-% \@@_group_end_replace_check:w, \@@_group_end_replace_check:n
-% }
-% At this stage \cs{l_@@_internal_a_tl} (|e|-expands to the desired
-% result). Guess from \cs{l_@@_balance_int} the number of braces to
-% add before or after the result then try expanding. The simplest
-% case is when \cs{l_@@_internal_a_tl} together with the braces we
-% insert via \cs{prg_replicate:nn} give a balanced result, and the
-% assignment ends at the \cs{if_false:} |{| \cs{fi:} |}| construction:
-% then \cs{@@_group_end_replace_check:w} sees that there is no
-% material left and we successfully found the result. The harder case
-% is that expanding \cs{l_@@_internal_a_tl} may produce extra closing
-% braces and end the assignment early. Then we grab the remaining code
-% using; importantly, what follows has not yet been expanded so that
-% \cs{@@_group_end_replace_check:n} grabs everything until the last
-% brace in \cs{@@_group_end_replace_try:}, letting us try again with
-% an extra surrounding pair of braces.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_group_end_replace:N #1
- {
- \int_set:Nn \l_@@_added_begin_int
- { \int_max:nn { - \l_@@_balance_int } \c_zero_int }
- \int_set:Nn \l_@@_added_end_int
- { \int_max:nn \l_@@_balance_int \c_zero_int }
- \@@_group_end_replace_try:
- \int_compare:nNnT { \l_@@_added_begin_int + \l_@@_added_end_int }
- > \c_zero_int
- {
- \msg_error:nneee { regex } { result-unbalanced }
- { replacing } { \int_use:N \l_@@_added_begin_int }
- { \int_use:N \l_@@_added_end_int }
- }
- \group_end:
- \tl_set_eq:NN #1 \g_@@_internal_tl
- }
-\cs_new_protected:Npn \@@_group_end_replace_try:
- {
- \tex_afterassignment:D \@@_group_end_replace_check:w
- \__kernel_tl_gset:Nx \g_@@_internal_tl
- {
- \prg_replicate:nn \l_@@_added_begin_int { { \if_false: } \fi: }
- \l_@@_internal_a_tl
- \prg_replicate:nn \l_@@_added_end_int { \if_false: { \fi: } }
- \if_false: { \fi: }
- }
- }
-\cs_new_protected:Npn \@@_group_end_replace_check:w
- {
- \exp_after:wN \@@_group_end_replace_check:n
- \exp_after:wN { \if_false: } \fi:
- }
-\cs_new_protected:Npn \@@_group_end_replace_check:n #1
- {
- \tl_if_empty:nF {#1}
- {
- \int_incr:N \l_@@_added_begin_int
- \int_incr:N \l_@@_added_end_int
- \@@_group_end_replace_try:
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Peeking ahead}
-%
-% \begin{variable}{\l_@@_peek_true_tl, \l_@@_peek_false_tl}
-% True/false code arguments of \cs{peek_regex:nTF} or similar.
-% \begin{macrocode}
-\tl_new:N \l_@@_peek_true_tl
-\tl_new:N \l_@@_peek_false_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_replacement_tl}
-% When peeking in \cs{peek_regex_replace_once:nnTF} we need to store
-% the replacement text.
-% \begin{macrocode}
-\tl_new:N \l_@@_replacement_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_input_tl}
-% \begin{macro}{\@@_input_item:n}
-% Stores each token found as \cs{@@_input_item:n} \Arg{tokens}, where
-% the \meta{tokens} \texttt{o}-expand to the token found, as for
-% \cs{tl_analysis_map_inline:nn}.
-% \begin{macrocode}
-\tl_new:N \l_@@_input_tl
-\cs_new_eq:NN \@@_input_item:n ?
-% \end{macrocode}
-% \end{macro}
-% \end{variable}
-%
-% \begin{macro}[TF]
-% {\peek_regex:n, \peek_regex:N, \peek_regex_remove_once:n, \peek_regex_remove_once:N}
-% The |T| and |F| functions just call the corresponding |TF| function.
-% The four |TF| functions differ along two axes: whether to remove the
-% token or not, distinguished by using \cs{@@_peek_end:} or
-% \cs{@@_peek_remove_end:n} (the latter case needs an argument, as we
-% will see), and whether the regex has to be compiled or is already in
-% an |N|-type variable, distinguished by calling \cs{@@_build_aux:Nn}
-% or \cs{@@_build_aux:NN}. The first argument of these functions is
-% \cs{c_false_bool} to indicate that there should be no implicit
-% insertion of a wildcard at the start of the pattern: otherwise the
-% code would keep looking further into the input stream until matching
-% the regex.
-% \begin{macrocode}
-\cs_new_protected:Npn \peek_regex:nTF #1
- {
- \@@_peek:nnTF
- { \@@_build_aux:Nn \c_false_bool {#1} }
- { \@@_peek_end: }
- }
-\cs_new_protected:Npn \peek_regex:nT #1#2
- { \peek_regex:nTF {#1} {#2} { } }
-\cs_new_protected:Npn \peek_regex:nF #1 { \peek_regex:nTF {#1} { } }
-\cs_new_protected:Npn \peek_regex:NTF #1
- {
- \@@_peek:nnTF
- { \@@_build_aux:NN \c_false_bool #1 }
- { \@@_peek_end: }
- }
-\cs_new_protected:Npn \peek_regex:NT #1#2
- { \peek_regex:NTF #1 {#2} { } }
-\cs_new_protected:Npn \peek_regex:NF #1 { \peek_regex:NTF {#1} { } }
-\cs_new_protected:Npn \peek_regex_remove_once:nTF #1
- {
- \@@_peek:nnTF
- { \@@_build_aux:Nn \c_false_bool {#1} }
- { \@@_peek_remove_end:n {##1} }
- }
-\cs_new_protected:Npn \peek_regex_remove_once:nT #1#2
- { \peek_regex_remove_once:nTF {#1} {#2} { } }
-\cs_new_protected:Npn \peek_regex_remove_once:nF #1
- { \peek_regex_remove_once:nTF {#1} { } }
-\cs_new_protected:Npn \peek_regex_remove_once:NTF #1
- {
- \@@_peek:nnTF
- { \@@_build_aux:NN \c_false_bool #1 }
- { \@@_peek_remove_end:n {##1} }
- }
-\cs_new_protected:Npn \peek_regex_remove_once:NT #1#2
- { \peek_regex_remove_once:NTF #1 {#2} { } }
-\cs_new_protected:Npn \peek_regex_remove_once:NF #1
- { \peek_regex_remove_once:NTF #1 { } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_peek:nnTF, \@@_peek_aux:nnTF}
-% Store the user's true/false codes (plus \cs{group_end:}) into two
-% token lists. Then build the automaton with |#1|, without submatch
-% tracking, and aiming for a single match. Then start matching by
-% setting up a few variables like for any regex matching like
-% \cs{regex_match:nnTF}, with the addition of \cs{l_@@_input_tl}
-% that keeps track of the tokens seen, to reinsert them at the
-% end. Instead of \cs{tl_analysis_map_inline:nn} on the input, we
-% call \cs{peek_analysis_map_inline:n} to go through tokens in the
-% input stream. Since \cs{@@_match_one_token:nnN} calls
-% \cs{@@_maplike_break:} we need to catch that and break the
-% \cs{peek_analysis_map_inline:n} loop instead.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_peek:nnTF #1
- {
- \@@_peek_aux:nnTF
- {
- \@@_disable_submatches:
- #1
- }
- }
-\cs_new_protected:Npn \@@_peek_aux:nnTF #1#2#3#4
- {
- \group_begin:
- \tl_set:Nn \l_@@_peek_true_tl { \group_end: #3 }
- \tl_set:Nn \l_@@_peek_false_tl { \group_end: #4 }
- \@@_single_match:
- #1
- \@@_match_init:
- \tl_build_begin:N \l_@@_input_tl
- \@@_match_once_init:
- \peek_analysis_map_inline:n
- {
- \tl_build_put_right:Nn \l_@@_input_tl
- { \@@_input_item:n {##1} }
- \@@_match_one_token:nnN {##1} {##2} ##3
- \use_none:nnn
- \prg_break_point:Nn \@@_maplike_break:
- { \peek_analysis_map_break:n {#2} }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_peek_end:, \@@_peek_remove_end:n}
-% Once the regex matches (or permanently fails to match) we call
-% \cs{@@_peek_end:}, or \cs{@@_peek_remove_end:n} with argument the
-% last token seen. For \cs{peek_regex:nTF} we reinsert tokens seen by
-% calling \cs{@@_peek_reinsert:N} regardless of the result of the
-% match. For \cs{peek_regex_remove_once:nTF} we reinsert the tokens
-% seen only if the match failed; otherwise we just reinsert the
-% tokens~|#1|, with one expansion. To be more precise, |#1| consists
-% of tokens that \texttt{o}-expand and \texttt{e}-expand to the last
-% token seen, for example it is \cs{exp_not:N} \meta{cs} for a control
-% sequence. This means that just doing \cs{exp_after:wN}
-% \cs{l_@@_peek_true_tl} |#1| would be unsafe because the expansion of
-% \meta{cs} would be suppressed.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_peek_end:
- {
- \bool_if:NTF \g_@@_success_bool
- { \@@_peek_reinsert:N \l_@@_peek_true_tl }
- { \@@_peek_reinsert:N \l_@@_peek_false_tl }
- }
-\cs_new_protected:Npn \@@_peek_remove_end:n #1
- {
- \bool_if:NTF \g_@@_success_bool
- { \exp_args:NNo \use:nn \l_@@_peek_true_tl {#1} }
- { \@@_peek_reinsert:N \l_@@_peek_false_tl }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_peek_reinsert:N, \@@_reinsert_item:n}
-% Insert the true/false code |#1|, followed by the tokens found, which
-% were stored in \cs{l_@@_input_tl}. For this, loop through that
-% token list using \cs{@@_reinsert_item:n}, which expands |#1| once to
-% get a single token, and jumps over it to expand what follows, with
-% suitable \cs{exp:w} and \cs{exp_end:}. We cannot just use
-% \cs{use:e} on the whole token list because the result may be
-% unbalanced, which would stop the primitive prematurely, or let it
-% continue beyond where we would like.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_peek_reinsert:N #1
- {
- \tl_build_end:N \l_@@_input_tl
- \cs_set_eq:NN \@@_input_item:n \@@_reinsert_item:n
- \exp_after:wN #1 \exp:w \l_@@_input_tl \exp_end:
- }
-\cs_new_protected:Npn \@@_reinsert_item:n #1
- {
- \exp_after:wN \exp_after:wN
- \exp_after:wN \exp_end:
- \exp_after:wN \exp_after:wN
- #1
- \exp:w
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[noTF]
-% {\peek_regex_replace_once:nn, \peek_regex_replace_once:Nn}
-% Similar to \cs{peek_regex:nTF} above.
-% \begin{macrocode}
-\cs_new_protected:Npn \peek_regex_replace_once:nnTF #1
- { \@@_peek_replace:nnTF { \@@_build_aux:Nn \c_false_bool {#1} } }
-\cs_new_protected:Npn \peek_regex_replace_once:nnT #1#2#3
- { \peek_regex_replace_once:nnTF {#1} {#2} {#3} { } }
-\cs_new_protected:Npn \peek_regex_replace_once:nnF #1#2
- { \peek_regex_replace_once:nnTF {#1} {#2} { } }
-\cs_new_protected:Npn \peek_regex_replace_once:nn #1#2
- { \peek_regex_replace_once:nnTF {#1} {#2} { } { } }
-\cs_new_protected:Npn \peek_regex_replace_once:NnTF #1
- { \@@_peek_replace:nnTF { \@@_build_aux:NN \c_false_bool #1 } }
-\cs_new_protected:Npn \peek_regex_replace_once:NnT #1#2#3
- { \peek_regex_replace_once:NnTF #1 {#2} {#3} { } }
-\cs_new_protected:Npn \peek_regex_replace_once:NnF #1#2
- { \peek_regex_replace_once:NnTF #1 {#2} { } }
-\cs_new_protected:Npn \peek_regex_replace_once:Nn #1#2
- { \peek_regex_replace_once:NnTF #1 {#2} { } { } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_peek_replace:nnTF}
-% Same as \cs{@@_peek:nnTF} (used for \cs{peek_regex:nTF} above), but
-% without disabling submatches, and with a different end. The
-% replacement text |#2| is stored, to be analyzed later.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_peek_replace:nnTF #1#2
- {
- \tl_set:Nn \l_@@_replacement_tl {#2}
- \@@_peek_aux:nnTF {#1} { \@@_peek_replace_end: }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_peek_replace_end:}
-% If the match failed \cs{@@_peek_reinsert:N} reinserts the tokens
-% found. Otherwise, finish storing the submatch information using
-% \cs{@@_extract:}, and store the input into \tn{toks}. Redefine a
-% few auxiliaries to change slightly their expansion behaviour as
-% explained below. Analyse the replacement text with
-% \cs{@@_replacement:n}, which as usual defines
-% \cs{@@_replacement_do_one_match:n} to insert the tokens from the
-% start of the match attempt to the beginning of the match, followed
-% by the replacement text. The \cs{use:e} expands for instance the
-% trailing \cs{@@_query_range:nn} down to a sequence of
-% \cs{@@_reinsert_item:n} \Arg{tokens} where \meta{tokens}
-% \texttt{o}-expand to a single token that we want to insert. After
-% \texttt{e}-expansion, \cs{use:e} does \cs{use:n}, so we have
-% \cs{exp_after:wN} \cs{l_@@_peek_true_tl} \cs{exp:w} \ldots{}
-% \cs{exp_end:}. This is set up such as to obtain
-% \cs{l_@@_peek_true_tl} followed by the replaced tokens (possibly
-% unbalanced) in the input stream.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_peek_replace_end:
- {
- \bool_if:NTF \g_@@_success_bool
- {
- \@@_extract:
- \@@_query_set_from_input_tl:
- \cs_set_eq:NN \@@_replacement_put:n \@@_peek_replacement_put:n
- \cs_set_eq:NN \@@_replacement_put_submatch_aux:n
- \@@_peek_replacement_put_submatch_aux:n
- \cs_set_eq:NN \@@_input_item:n \@@_reinsert_item:n
- \cs_set_eq:NN \@@_replacement_exp_not:N \@@_peek_replacement_token:n
- \cs_set_eq:NN \@@_replacement_exp_not:V \@@_peek_replacement_var:N
- \exp_args:No \@@_replacement:n { \l_@@_replacement_tl }
- \use:e
- {
- \exp_not:n { \exp_after:wN \l_@@_peek_true_tl \exp:w }
- \@@_replacement_do_one_match:n \l_@@_zeroth_submatch_int
- \@@_query_range:nn
- {
- \__kernel_intarray_item:Nn \g_@@_submatch_end_intarray
- \l_@@_zeroth_submatch_int
- }
- \l_@@_max_pos_int
- \exp_end:
- }
- }
- { \@@_peek_reinsert:N \l_@@_peek_false_tl }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_query_set_from_input_tl:, \@@_query_set_item:n}
-% The input was stored into \cs{l_@@_input_tl} as successive items
-% \cs{@@_input_item:n} \Arg{tokens}. Store that in successive
-% \tn{toks}. It's not clear whether the empty entries before and
-% after are both useful.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_query_set_from_input_tl:
- {
- \tl_build_end:N \l_@@_input_tl
- \int_zero:N \l_@@_curr_pos_int
- \cs_set_eq:NN \@@_input_item:n \@@_query_set_item:n
- \@@_query_set_item:n { }
- \l_@@_input_tl
- \@@_query_set_item:n { }
- \int_set_eq:NN \l_@@_max_pos_int \l_@@_curr_pos_int
- }
-\cs_new_protected:Npn \@@_query_set_item:n #1
- {
- \int_incr:N \l_@@_curr_pos_int
- \@@_toks_set:Nn \l_@@_curr_pos_int { \@@_input_item:n {#1} }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_peek_replacement_put:n}
-% While building the replacement function
-% \cs{@@_replacement_do_one_match:n}, we often want to put simple
-% material, given as |#1|, whose \texttt{e}-expansion
-% \texttt{o}-expands to a single token. Normally we can just add the
-% token to \cs{l_@@_build_tl}, but for
-% \cs{peek_regex_replace_once:nnTF} we eventually want to do some
-% strange expansion that is basically using \cs{exp_after:wN} to jump
-% through numerous tokens (we cannot use \texttt{e}-expansion like for
-% \cs{regex_replace_once:nnNTF} because it is ok for the result to be
-% unbalanced since we insert it in the input stream rather than
-% storing it. When within a csname we don't do any such shenanigan
-% because \cs{cs:w} \ldots{} \cs{cs_end:} does all the expansion we
-% need.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_peek_replacement_put:n #1
- {
- \if_case:w \l_@@_replacement_csnames_int
- \tl_build_put_right:Nn \l_@@_build_tl
- { \exp_not:N \@@_reinsert_item:n {#1} }
- \else:
- \tl_build_put_right:Nn \l_@@_build_tl {#1}
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_peek_replacement_token:n}
-% When hit with \cs{exp:w}, \cs{@@_peek_replacement_token:n}
-% \Arg{token} stops \cs{exp_end:} and does \cs{exp_after:wN}
-% \meta{token} \cs{exp:w} to continue expansion after it.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_peek_replacement_token:n #1
- { \exp_after:wN \exp_end: \exp_after:wN #1 \exp:w }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_peek_replacement_put_submatch_aux:n}
-% While analyzing the replacement we also have to insert submatches
-% found in the query. Since query items \cs{@@_input_item:n}
-% \Arg{tokens} expand correctly only when surrounded by \cs{exp:w}
-% \ldots{} \cs{exp_end:}, and since these expansion controls are not
-% there within csnames (because \cs{cs:w} \ldots{} \cs{cs_end:} make
-% them unnecessary in most cases), we have to put \cs{exp:w} and
-% \cs{exp_end:} by hand here.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_peek_replacement_put_submatch_aux:n #1
- {
- \if_case:w \l_@@_replacement_csnames_int
- \tl_build_put_right:Nn \l_@@_build_tl
- { \@@_query_submatch:n { \@@_int_eval:w #1 + ##1 \scan_stop: } }
- \else:
- \tl_build_put_right:Nn \l_@@_build_tl
- {
- \exp:w
- \@@_query_submatch:n { \@@_int_eval:w #1 + ##1 \scan_stop: }
- \exp_end:
- }
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_peek_replacement_var:N}
-% This is used for |\u| outside csnames. It makes sure to continue
-% expansion with \cs{exp:w} before expanding the variable~|#1| and
-% stopping the \cs{exp:w} that precedes.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_peek_replacement_var:N #1
- {
- \exp_after:wN \exp_last_unbraced:NV
- \exp_after:wN \exp_end:
- \exp_after:wN #1
- \exp:w
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Messages}
-%
-% Messages for the preparsing phase.
-% \begin{macrocode}
-\use:e
- {
- \msg_new:nnn { regex } { trailing-backslash }
- { Trailing~'\iow_char:N\\'~in~regex~or~replacement. }
- \msg_new:nnn { regex } { x-missing-rbrace }
- {
- Missing~brace~'\iow_char:N\}'~in~regex~
- '...\iow_char:N\\x\iow_char:N\{...##1'.
- }
- \msg_new:nnn { regex } { x-overflow }
- {
- Character~code~##1~too~large~in~
- \iow_char:N\\x\iow_char:N\{##2\iow_char:N\}~regex.
- }
- }
-% \end{macrocode}
-%
-% Invalid quantifier.
-% \begin{macrocode}
-\msg_new:nnnn { regex } { invalid-quantifier }
- { Braced~quantifier~'#1'~may~not~be~followed~by~'#2'. }
- {
- The~character~'#2'~is~invalid~in~the~braced~quantifier~'#1'.~
- The~only~valid~quantifiers~are~'*',~'?',~'+',~'{<int>}',~
- '{<min>,}'~and~'{<min>,<max>}',~optionally~followed~by~'?'.
- }
-% \end{macrocode}
-%
-% Messages for missing or extra closing brackets and parentheses, with
-% some fancy singular/plural handling for the case of parentheses.
-% \begin{macrocode}
-\msg_new:nnnn { regex } { missing-rbrack }
- { Missing~right~bracket~inserted~in~regular~expression. }
- {
- LaTeX~was~given~a~regular~expression~where~a~character~class~
- was~started~with~'[',~but~the~matching~']'~is~missing.
- }
-\msg_new:nnnn { regex } { missing-rparen }
- {
- Missing~right~
- \int_compare:nTF { #1 = 1 } { parenthesis } { parentheses } ~
- inserted~in~regular~expression.
- }
- {
- LaTeX~was~given~a~regular~expression~with~\int_eval:n {#1} ~
- more~left~parentheses~than~right~parentheses.
- }
-\msg_new:nnnn { regex } { extra-rparen }
- { Extra~right~parenthesis~ignored~in~regular~expression. }
- {
- LaTeX~came~across~a~closing~parenthesis~when~no~submatch~group~
- was~open.~The~parenthesis~will~be~ignored.
- }
-% \end{macrocode}
-%
-% Some escaped alphanumerics are not allowed everywhere.
-% \begin{macrocode}
-\msg_new:nnnn { regex } { bad-escape }
- {
- Invalid~escape~'\iow_char:N\\#1'~
- \@@_if_in_cs:TF { within~a~control~sequence. }
- {
- \@@_if_in_class:TF
- { in~a~character~class. }
- { following~a~category~test. }
- }
- }
- {
- The~escape~sequence~'\iow_char:N\\#1'~may~not~appear~
- \@@_if_in_cs:TF
- {
- within~a~control~sequence~test~introduced~by~
- '\iow_char:N\\c\iow_char:N\{'.
- }
- {
- \@@_if_in_class:TF
- { within~a~character~class~ }
- { following~a~category~test~such~as~'\iow_char:N\\cL'~ }
- because~it~does~not~match~exactly~one~character.
- }
- }
-% \end{macrocode}
-%
-% Range errors.
-% \begin{macrocode}
-\msg_new:nnnn { regex } { range-missing-end }
- { Invalid~end-point~for~range~'#1-#2'~in~character~class. }
- {
- The~end-point~'#2'~of~the~range~'#1-#2'~may~not~serve~as~an~
- end-point~for~a~range:~alphanumeric~characters~should~not~be~
- escaped,~and~non-alphanumeric~characters~should~be~escaped.
- }
-\msg_new:nnnn { regex } { range-backwards }
- { Range~'[#1-#2]'~out~of~order~in~character~class. }
- {
- In~ranges~of~characters~'[x-y]'~appearing~in~character~classes,~
- the~first~character~code~must~not~be~larger~than~the~second.~
- Here,~'#1'~has~character~code~\int_eval:n {`#1},~while~
- '#2'~has~character~code~\int_eval:n {`#2}.
- }
-% \end{macrocode}
-%
-% Errors related to |\c| and |\u|.
-% \begin{macrocode}
-\msg_new:nnnn { regex } { c-bad-mode }
- { Invalid~nested~'\iow_char:N\\c'~escape~in~regular~expression. }
- {
- The~'\iow_char:N\\c'~escape~cannot~be~used~within~
- a~control~sequence~test~'\iow_char:N\\c{...}'~
- nor~another~category~test.~
- To~combine~several~category~tests,~use~'\iow_char:N\\c[...]'.
- }
-\msg_new:nnnn { regex } { c-C-invalid }
- { '\iow_char:N\\cC'~should~be~followed~by~'.'~or~'(',~not~'#1'. }
- {
- The~'\iow_char:N\\cC'~construction~restricts~the~next~item~to~be~a~
- control~sequence~or~the~next~group~to~be~made~of~control~sequences.~
- It~only~makes~sense~to~follow~it~by~'.'~or~by~a~group.
- }
-\msg_new:nnnn { regex } { cu-lbrace }
- { Left~braces~must~be~escaped~in~'\iow_char:N\\#1{...}'. }
- {
- Constructions~such~as~'\iow_char:N\\#1{...\iow_char:N\{...}'~are~
- not~allowed~and~should~be~replaced~by~
- '\iow_char:N\\#1{...\token_to_str:N\{...}'.
- }
-\msg_new:nnnn { regex } { c-lparen-in-class }
- { Catcode~test~cannot~apply~to~group~in~character~class }
- {
- Construction~such~as~'\iow_char:N\\cL(abc)'~are~not~allowed~inside~a~
- class~'[...]'~because~classes~do~not~match~multiple~characters~at~once.
- }
-\msg_new:nnnn { regex } { c-missing-rbrace }
- { Missing~right~brace~inserted~for~'\iow_char:N\\c'~escape. }
- {
- LaTeX~was~given~a~regular~expression~where~a~
- '\iow_char:N\\c\iow_char:N\{...'~construction~was~not~ended~
- with~a~closing~brace~'\iow_char:N\}'.
- }
-\msg_new:nnnn { regex } { c-missing-rbrack }
- { Missing~right~bracket~inserted~for~'\iow_char:N\\c'~escape. }
- {
- A~construction~'\iow_char:N\\c[...'~appears~in~a~
- regular~expression,~but~the~closing~']'~is~not~present.
- }
-\msg_new:nnnn { regex } { c-missing-category }
- { Invalid~character~'#1'~following~'\iow_char:N\\c'~escape. }
- {
- In~regular~expressions,~the~'\iow_char:N\\c'~escape~sequence~
- may~only~be~followed~by~a~left~brace,~a~left~bracket,~or~a~
- capital~letter~representing~a~character~category,~namely~
- one~of~'ABCDELMOPSTU'.
- }
-\msg_new:nnnn { regex } { c-trailing }
- { Trailing~category~code~escape~'\iow_char:N\\c'... }
- {
- A~regular~expression~ends~with~'\iow_char:N\\c'~followed~
- by~a~letter.~It~will~be~ignored.
- }
-\msg_new:nnnn { regex } { u-missing-lbrace }
- { Missing~left~brace~following~'\iow_char:N\\u'~escape. }
- {
- The~'\iow_char:N\\u'~escape~sequence~must~be~followed~by~
- a~brace~group~with~the~name~of~the~variable~to~use.
- }
-\msg_new:nnnn { regex } { u-missing-rbrace }
- { Missing~right~brace~inserted~for~'\iow_char:N\\u'~escape. }
- {
- LaTeX~
- \str_if_eq:eeTF { } {#2}
- { reached~the~end~of~the~string~ }
- { encountered~an~escaped~alphanumeric~character '\iow_char:N\\#2'~ }
- when~parsing~the~argument~of~an~
- '\iow_char:N\\u\iow_char:N\{...\}'~escape.
- }
-% \end{macrocode}
-%
-% Errors when encountering the \textsc{posix} syntax |[:...:]|.
-% \begin{macrocode}
-\msg_new:nnnn { regex } { posix-unsupported }
- { POSIX~collating~element~'[#1 ~ #1]'~not~supported. }
- {
- The~'[.foo.]'~and~'[=bar=]'~syntaxes~have~a~special~meaning~
- in~POSIX~regular~expressions.~This~is~not~supported~by~LaTeX.~
- Maybe~you~forgot~to~escape~a~left~bracket~in~a~character~class?
- }
-\msg_new:nnnn { regex } { posix-unknown }
- { POSIX~class~'[:#1:]'~unknown. }
- {
- '[:#1:]'~is~not~among~the~known~POSIX~classes~
- '[:alnum:]',~'[:alpha:]',~'[:ascii:]',~'[:blank:]',~
- '[:cntrl:]',~'[:digit:]',~'[:graph:]',~'[:lower:]',~
- '[:print:]',~'[:punct:]',~'[:space:]',~'[:upper:]',~
- '[:word:]',~and~'[:xdigit:]'.
- }
-\msg_new:nnnn { regex } { posix-missing-close }
- { Missing~closing~':]'~for~POSIX~class. }
- { The~POSIX~syntax~'#1'~must~be~followed~by~':]',~not~'#2'. }
-% \end{macrocode}
-%
-% In various cases, the result of a \pkg{l3regex} operation can leave us
-% with an unbalanced token list, which we must re-balance by adding
-% begin-group or end-group character tokens.
-% \begin{macrocode}
-\msg_new:nnnn { regex } { result-unbalanced }
- { Missing~brace~inserted~when~#1. }
- {
- LaTeX~was~asked~to~do~some~regular~expression~operation,~
- and~the~resulting~token~list~would~not~have~the~same~number~
- of~begin-group~and~end-group~tokens.~Braces~were~inserted:~
- #2~left,~#3~right.
- }
-% \end{macrocode}
-%
-% Error message for unknown options.
-% \begin{macrocode}
-\msg_new:nnnn { regex } { unknown-option }
- { Unknown~option~'#1'~for~regular~expressions. }
- {
- The~only~available~option~is~'case-insensitive',~toggled~by~
- '(?i)'~and~'(?-i)'.
- }
-\msg_new:nnnn { regex } { special-group-unknown }
- { Unknown~special~group~'#1~...'~in~a~regular~expression. }
- {
- The~only~valid~constructions~starting~with~'(?'~are~
- '(?:~...~)',~'(?|~...~)',~'(?i)',~and~'(?-i)'.
- }
-% \end{macrocode}
-%
-% Errors in the replacement text.
-% \begin{macrocode}
-\msg_new:nnnn { regex } { replacement-c }
- { Misused~'\iow_char:N\\c'~command~in~a~replacement~text. }
- {
- In~a~replacement~text,~the~'\iow_char:N\\c'~escape~sequence~
- can~be~followed~by~one~of~the~letters~'ABCDELMOPSTU'~
- or~a~brace~group,~not~by~'#1'.
- }
-\msg_new:nnnn { regex } { replacement-u }
- { Misused~'\iow_char:N\\u'~command~in~a~replacement~text. }
- {
- In~a~replacement~text,~the~'\iow_char:N\\u'~escape~sequence~
- must~be~~followed~by~a~brace~group~holding~the~name~of~the~
- variable~to~use.
- }
-\msg_new:nnnn { regex } { replacement-g }
- {
- Missing~brace~for~the~'\iow_char:N\\g'~construction~
- in~a~replacement~text.
- }
- {
- In~the~replacement~text~for~a~regular~expression~search,~
- submatches~are~represented~either~as~'\iow_char:N \\g{dd..d}',~
- or~'\\d',~where~'d'~are~single~digits.~Here,~a~brace~is~missing.
- }
-\msg_new:nnnn { regex } { replacement-catcode-end }
- {
- Missing~character~for~the~'\iow_char:N\\c<category><character>'~
- construction~in~a~replacement~text.
- }
- {
- In~a~replacement~text,~the~'\iow_char:N\\c'~escape~sequence~
- can~be~followed~by~one~of~the~letters~'ABCDELMOPSTU'~representing~
- the~character~category.~Then,~a~character~must~follow.~LaTeX~
- reached~the~end~of~the~replacement~when~looking~for~that.
- }
-\msg_new:nnnn { regex } { replacement-catcode-escaped }
- {
- Escaped~letter~or~digit~after~category~code~in~replacement~text.
- }
- {
- In~a~replacement~text,~the~'\iow_char:N\\c'~escape~sequence~
- can~be~followed~by~one~of~the~letters~'ABCDELMOPSTU'~representing~
- the~character~category.~Then,~a~character~must~follow,~not~
- '\iow_char:N\\#2'.
- }
-\msg_new:nnnn { regex } { replacement-catcode-in-cs }
- {
- Category~code~'\iow_char:N\\c#1#3'~ignored~inside~
- '\iow_char:N\\c\{...\}'~in~a~replacement~text.
- }
- {
- In~a~replacement~text,~the~category~codes~of~the~argument~of~
- '\iow_char:N\\c\{...\}'~are~ignored~when~building~the~control~
- sequence~name.
- }
-\msg_new:nnnn { regex } { replacement-null-space }
- { TeX~cannot~build~a~space~token~with~character~code~0. }
- {
- You~asked~for~a~character~token~with~category~space,~
- and~character~code~0,~for~instance~through~
- '\iow_char:N\\cS\iow_char:N\\x00'.~
- This~specific~case~is~impossible~and~will~be~replaced~
- by~a~normal~space.
- }
-\msg_new:nnnn { regex } { replacement-missing-rbrace }
- { Missing~right~brace~inserted~in~replacement~text. }
- {
- There~ \int_compare:nTF { #1 = 1 } { was } { were } ~ #1~
- missing~right~\int_compare:nTF { #1 = 1 } { brace } { braces } .
- }
-\msg_new:nnnn { regex } { replacement-missing-rparen }
- { Missing~right~parenthesis~inserted~in~replacement~text. }
- {
- There~ \int_compare:nTF { #1 = 1 } { was } { were } ~ #1~
- missing~right~
- \int_compare:nTF { #1 = 1 } { parenthesis } { parentheses } .
- }
-\msg_new:nnn { regex } { submatch-too-big }
- { Submatch~#1~used~but~regex~only~has~#2~group(s) }
-% \end{macrocode}
-%
-% Some escaped alphanumerics are not allowed everywhere.
-% \begin{macrocode}
-\msg_new:nnnn { regex } { backwards-quantifier }
- { Quantifer~"{#1,#2}"~is~backwards. }
- { The~values~given~in~a~quantifier~must~be~in~order. }
-% \end{macrocode}
-%
-% Used in user commands, and when showing a regex.
-% \begin{macrocode}
-\msg_new:nnnn { regex } { case-odd }
- { #1~with~odd~number~of~items }
- {
- There~must~be~a~#2~part~for~each~regex:~
- found~odd~number~of~items~(#3)~in\\
- \iow_indent:n {#4}
- }
-\msg_new:nnn { regex } { show }
- {
- >~Compiled~regex~
- \tl_if_empty:nTF {#1} { variable~ #2 } { {#1} } :
- #3
- }
-\prop_gput:Nnn \g_msg_module_name_prop { regex } { LaTeX }
-\prop_gput:Nnn \g_msg_module_type_prop { regex } { }
-% \end{macrocode}
-%
-% \begin{macro}{\@@_msg_repeated:nnN}
-% This is not technically a message, but seems related enough to go
-% there. The arguments are: |#1| is the minimum number of repetitions;
-% |#2| is the number of allowed extra repetitions ($-1$ for infinite
-% number), and |#3| tells us about lazyness.
-% \begin{macrocode}
-\cs_new:Npn \@@_msg_repeated:nnN #1#2#3
- {
- \str_if_eq:eeF { #1 #2 } { 1 0 }
- {
- , ~ repeated ~
- \int_case:nnF {#2}
- {
- { -1 } { #1~or~more~times,~\bool_if:NTF #3 { lazy } { greedy } }
- { 0 } { #1~times }
- }
- {
- between~#1~and~\int_eval:n {#1+#2}~times,~
- \bool_if:NTF #3 { lazy } { greedy }
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Code for tracing}
-%
-% There is a more extensive implementation of tracing in the l3trial
-% package \pkg{l3trace}. Function names are a bit different but could
-% be merged.
-%
-% \begin{macro}
-% {\@@_trace_push:nnN, \@@_trace_pop:nnN, \@@_trace:nne}
-% Here |#1| is the module name (\texttt{regex}) and |#2| is
-% typically~1. If the module's current tracing level is less than
-% |#2| show nothing, otherwise write |#3| to the terminal.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_trace_push:nnN #1#2#3
- { \@@_trace:nne {#1} {#2} { entering~ \token_to_str:N #3 } }
-\cs_new_protected:Npn \@@_trace_pop:nnN #1#2#3
- { \@@_trace:nne {#1} {#2} { leaving~ \token_to_str:N #3 } }
-\cs_new_protected:Npn \@@_trace:nne #1#2#3
- {
- \int_compare:nNnF
- { \int_use:c { g_@@_trace_#1_int } } < {#2}
- { \iow_term:e { Trace:~#3 } }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\g_@@_trace_regex_int}
-% No tracing when that is zero.
-% \begin{macrocode}
-\int_new:N \g_@@_trace_regex_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\@@_trace_states:n}
-% This function lists the contents of all states of the \textsc{nfa},
-% stored in \tn{toks} from $0$ to \cs{l_@@_max_state_int}
-% (excluded).
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_trace_states:n #1
- {
- \int_step_inline:nnn
- \l_@@_min_state_int
- { \l_@@_max_state_int - \c_one_int }
- {
- \@@_trace:nne { regex } {#1}
- { \iow_char:N \\toks ##1 = { \@@_toks_use:w ##1 } }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
-% \endinput
-%^^A NOT IMPLEMENTED
-%^^A \p{xx} a character with the xx property
-%^^A \P{xx} a character without the xx property
-%^^A (?=...) positive look ahead
-%^^A (?!...) negative look ahead
-%^^A (?<=...) positive look behind
-%^^A (?<!...) negative look behind
-%^^A (?<name>...) or (?'name'...) or (?P<name>...)
-%^^A named capturing group
-%^^A \R a newline sequence
-%^^A \X an extended Unicode sequence
-%^^A (?C) or (?Cn) callout with data n
-%^^A (?R) recurse whole pattern
-%^^A (?[+-]n) or \g<[+-]n> or (?&name) or (?P>name) or \g<name>
-%^^A call subpattern
-%^^A (?([+-]n)... or (?(<name>)...
-%^^A reference condition
-%^^A (?(R)... or (?(Rn)... or (?(R&name)...
-%^^A recursion condition
-%^^A (?(DEFINE)... define subpattern for reference
-%^^A (?(assert)... assertion condition
-%^^A (?(?=..)..|..) positive/negative look ahead/behind condition
-%^^A (*ACCEPT) force successful match
-%^^A (*FAIL) force backtrack; synonym (*F)
-%^^A (*COMMIT) overall failure, no advance of starting point
-%^^A (*PRUNE) advance to next starting character
-%^^A (*SKIP) advance start to current matching position
-%^^A (*THEN) local failure, backtrack to next alternation
-%^^A (*CR) or (*LF) or (*CRLF) or (*ANYCRLF) or (*ANY)
-%^^A newline convention
-%^^A (*BSR_ANYCRLF) or (*BSR_UNICODE)
-%^^A change what \R matches.
-%^^A
-%^^A \cx "control-x", where x is any ASCII character
-%^^A \C one byte, even in UTF-8 mode (best avoided)
-%^^A + possessive quantifiers
-%^^A (?>...) atomic, non-capturing group
-%^^A (?#....) comment (not nestable)
-%^^A (?Jms-UxX) options (duplicate names; multiline; single line;
-%^^A unset what follows; ungreedy; extended;
-%^^A error on bad escapes)
-%^^A (?i:...|...) convenient shorthand for (?:(?i)...|...)
-%^^A (*NO_START_OPT) no start-match optimization (PCRE_NO_START_OPTIMIZE)
-%^^A (*UTF8) set UTF-8 mode (PCRE_UTF8)
-%^^A (*UCP) set PCRE_UCP (use Unicode properties for \d etc)
-%^^A \n or \gn or \g{[-]n} or \g{name} or (?P=name)
-%^^A or \k<name> or \k'name' or \k{name}
-%^^A back-references
diff --git a/macros/latex/contrib/l3kernel/l3seq.dtx b/macros/latex/contrib/l3kernel/l3seq.dtx
deleted file mode 100644
index 5334e8fd88..0000000000
--- a/macros/latex/contrib/l3kernel/l3seq.dtx
+++ /dev/null
@@ -1,2681 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3seq.dtx
-%
-% Copyright (C) 1990-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3seq} module\\ Sequences and stacks^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \LaTeX3 implements a \enquote{sequence} data type, which contain
-% an ordered list of entries which may contain any \meta{balanced text}.
-% It is possible to map functions to sequences such that the function
-% is applied to every item in the sequence.
-%
-% Sequences are also used to implement stack functions in \LaTeX3. This
-% is achieved using a number of dedicated stack functions.
-%
-% \section{Creating and initialising sequences}
-%
-% \begin{function}{\seq_new:N, \seq_new:c}
-% \begin{syntax}
-% \cs{seq_new:N} \meta{seq~var}
-% \end{syntax}
-% Creates a new \meta{seq~var} or raises an error if the name is
-% already taken. The declaration is global. The \meta{seq~var}
-% initially contains no items.
-% \end{function}
-%
-% \begin{function}{\seq_clear:N, \seq_clear:c, \seq_gclear:N, \seq_gclear:c}
-% \begin{syntax}
-% \cs{seq_clear:N} \meta{seq~var}
-% \end{syntax}
-% Clears all items from the \meta{seq~var}.
-% \end{function}
-%
-% \begin{function}
-% {\seq_clear_new:N, \seq_clear_new:c, \seq_gclear_new:N, \seq_gclear_new:c}
-% \begin{syntax}
-% \cs{seq_clear_new:N} \meta{seq~var}
-% \end{syntax}
-% Ensures that the \meta{seq~var} exists globally by applying
-% \cs{seq_new:N} if necessary, then applies
-% \cs[index=seq_clear:N]{seq_(g)clear:N} to leave
-% the \meta{seq~var} empty.
-% \end{function}
-%
-% \begin{function}
-% {
-% \seq_set_eq:NN, \seq_set_eq:cN, \seq_set_eq:Nc, \seq_set_eq:cc,
-% \seq_gset_eq:NN, \seq_gset_eq:cN, \seq_gset_eq:Nc, \seq_gset_eq:cc
-% }
-% \begin{syntax}
-% \cs{seq_set_eq:NN} \meta{seq~var_1} \meta{seq~var_2}
-% \end{syntax}
-% Sets the content of \meta{seq~var_1} equal to that of
-% \meta{seq~var_2}.
-% \end{function}
-%
-% \begin{function}[added = 2014-07-17]
-% {
-% \seq_set_from_clist:NN, \seq_set_from_clist:cN,
-% \seq_set_from_clist:Nc, \seq_set_from_clist:cc,
-% \seq_set_from_clist:Nn, \seq_set_from_clist:cn,
-% \seq_gset_from_clist:NN, \seq_gset_from_clist:cN,
-% \seq_gset_from_clist:Nc, \seq_gset_from_clist:cc,
-% \seq_gset_from_clist:Nn, \seq_gset_from_clist:cn
-% }
-% \begin{syntax}
-% \cs{seq_set_from_clist:NN} \meta{seq~var} \meta{comma-list}
-% \end{syntax}
-% Converts the data in the \meta{comma list} into a \meta{seq~var}:
-% the original \meta{comma list} is unchanged.
-% \end{function}
-%
-% \begin{function}[added = 2017-11-28]
-% {\seq_const_from_clist:Nn, \seq_const_from_clist:cn}
-% \begin{syntax}
-% \cs{seq_const_from_clist:Nn} \meta{seq~var} \Arg{comma-list}
-% \end{syntax}
-% Creates a new constant \meta{seq~var} or raises an error if the name
-% is already taken. The \meta{seq~var} is set globally to contain the
-% items in the \meta{comma list}.
-% \end{function}
-%
-% \begin{function}[added = 2011-08-15, updated = 2012-07-02]
-% {
-% \seq_set_split:Nnn ,
-% \seq_set_split:NVn , \seq_set_split:NnV , \seq_set_split:NVV ,
-% \seq_set_split:Nne , \seq_set_split:Nee ,
-% \seq_gset_split:Nnn,
-% \seq_gset_split:NVn , \seq_gset_split:NnV, \seq_gset_split:NVV,
-% \seq_gset_split:Nne , \seq_gset_split:Nee
-% }
-% \begin{syntax}
-% \cs{seq_set_split:Nnn} \meta{seq~var} \Arg{delimiter} \Arg{token list}
-% \end{syntax}
-% Splits the \meta{token list} into \meta{items} separated
-% by \meta{delimiter}, and assigns the result to the \meta{seq~var}.
-% Spaces on both sides of each \meta{item} are ignored,
-% then one set of outer braces is removed (if any);
-% this space trimming behaviour is identical to that of
-% \pkg{l3clist} functions. Empty \meta{items} are preserved by
-% \cs{seq_set_split:Nnn}, and can be removed afterwards using
-% \cs{seq_remove_all:Nn} \meta{seq~var} |{}|.
-% The \meta{delimiter} may not contain |{|, |}| or |#|
-% (assuming \TeX{}'s normal category code r\'egime).
-% If the \meta{delimiter} is empty, the \meta{token list} is split
-% into \meta{items} as a \meta{token list}.
-% See also \cs{seq_set_split_keep_spaces:Nnn}, which omits space stripping.
-% \end{function}
-%
-% \begin{function}[added = 2021-03-24]
-% {
-% \seq_set_split_keep_spaces:Nnn , \seq_set_split_keep_spaces:NnV ,
-% \seq_gset_split_keep_spaces:Nnn, \seq_gset_split_keep_spaces:NnV
-% }
-% \begin{syntax}
-% \cs{seq_set_split_keep_spaces:Nnn} \meta{seq~var} \Arg{delimiter} \Arg{token list}
-% \end{syntax}
-% Splits the \meta{token list} into \meta{items} separated
-% by \meta{delimiter}, and assigns the result to the \meta{seq~var}.
-% One set of outer braces is removed (if any) but any surrounding spaces
-% are retained: any braces \emph{inside} one or more spaces are
-% therefore kept. Empty \meta{items} are preserved by
-% \cs{seq_set_split_keep_spaces:Nnn}, and can be removed afterwards using
-% \cs{seq_remove_all:Nn} \meta{seq~var} |{}|.
-% The \meta{delimiter} may not contain |{|, |}| or |#|
-% (assuming \TeX{}'s normal category code r\'egime).
-% If the \meta{delimiter} is empty, the \meta{token list} is split
-% into \meta{items} as a \meta{token list}.
-% See also \cs{seq_set_split:Nnn}, which removes spaces around the delimiters.
-% \end{function}
-%
-% \begin{function}[added = 2012-06-15]
-% {\seq_set_filter:NNn, \seq_gset_filter:NNn}
-% \begin{syntax}
-% \cs{seq_set_filter:NNn} \meta{seq~var_1} \meta{seq~var_2} \Arg{inline boolexpr}
-% \end{syntax}
-% Evaluates the \meta{inline boolexpr} for every \meta{item} stored
-% within the \meta{seq~var_2}. The \meta{inline boolexpr}
-% receives the \meta{item} as |#1|. The sequence of all \meta{items}
-% for which the \meta{inline boolexpr} evaluated to \texttt{true}
-% is assigned to \meta{seq~var_1}.
-% \begin{texnote}
-% Contrarily to other mapping functions, \cs{seq_map_break:} cannot
-% be used in this function, and would lead to low-level \TeX{} errors.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}
-% {\seq_concat:NNN, \seq_concat:ccc, \seq_gconcat:NNN, \seq_gconcat:ccc}
-% \begin{syntax}
-% \cs{seq_concat:NNN} \meta{seq~var_1} \meta{seq~var_2} \meta{seq~var_3}
-% \end{syntax}
-% Concatenates the content of \meta{seq~var_2} and \meta{seq~var_3}
-% together and saves the result in \meta{seq~var_1}. The items in
-% \meta{seq~var_2} are placed at the left side of the new sequence.
-% \end{function}
-%
-% \begin{function}[EXP, pTF, added=2012-03-03]
-% {\seq_if_exist:N, \seq_if_exist:c}
-% \begin{syntax}
-% \cs{seq_if_exist_p:N} \meta{seq~var}
-% \cs{seq_if_exist:NTF} \meta{seq~var} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests whether the \meta{seq~var} is currently defined. This does not
-% check that the \meta{seq~var} really is a sequence variable.
-% \end{function}
-%
-% \section{Appending data to sequences}
-%
-% \begin{function}{
-% \seq_put_left:Nn, \seq_put_left:NV, \seq_put_left:Nv, \seq_put_left:Ne,
-% \seq_put_left:No,
-% \seq_put_left:cn, \seq_put_left:cV, \seq_put_left:cv, \seq_put_left:ce,
-% \seq_put_left:co,
-% \seq_gput_left:Nn, \seq_gput_left:NV, \seq_gput_left:Nv, \seq_gput_left:Ne,
-% \seq_gput_left:No,
-% \seq_gput_left:cn, \seq_gput_left:cV, \seq_gput_left:cv, \seq_gput_left:ce,
-% \seq_gput_left:co
-% }
-% \begin{syntax}
-% \cs{seq_put_left:Nn} \meta{seq~var} \Arg{item}
-% \end{syntax}
-% Appends the \meta{item} to the left of the \meta{seq~var}.
-% \end{function}
-%
-% \begin{function}{
-% \seq_put_right:Nn, \seq_put_right:NV, \seq_put_right:Nv, \seq_put_right:Ne,
-% \seq_put_right:No,
-% \seq_put_right:cn, \seq_put_right:cV, \seq_put_right:cv, \seq_put_right:ce,
-% \seq_put_right:co,
-% \seq_gput_right:Nn, \seq_gput_right:NV, \seq_gput_right:Nv, \seq_gput_right:Ne,
-% \seq_gput_right:No,
-% \seq_gput_right:cn, \seq_gput_right:cV, \seq_gput_right:cv, \seq_gput_right:ce,
-% \seq_gput_right:co,
-% }
-% \begin{syntax}
-% \cs{seq_put_right:Nn} \meta{seq~var} \Arg{item}
-% \end{syntax}
-% Appends the \meta{item} to the right of the \meta{seq~var}.
-% \end{function}
-%
-% \section{Recovering items from sequences}
-%
-% Items can be recovered from either the left or the right of sequences.
-% For implementation reasons, the actions at the left of the sequence are
-% faster than those acting on the right. These functions all assign the
-% recovered material locally, \emph{i.e.}~setting the
-% \meta{token list variable} used with \cs{tl_set:Nn} and \emph{never}
-% \cs{tl_gset:Nn}.
-%
-% \begin{function}[updated = 2012-05-14]{\seq_get_left:NN, \seq_get_left:cN}
-% \begin{syntax}
-% \cs{seq_get_left:NN} \meta{seq~var} \meta{token list variable}
-% \end{syntax}
-% Stores the left-most item from a \meta{seq~var} in the
-% \meta{token list variable} without removing it from the
-% \meta{seq~var}. The \meta{token list variable} is assigned locally.
-% If \meta{seq~var} is empty the \meta{token list variable}
-% is set to the special marker \cs{q_no_value}.
-% \end{function}
-%
-% \begin{function}[updated = 2012-05-19]{\seq_get_right:NN, \seq_get_right:cN}
-% \begin{syntax}
-% \cs{seq_get_right:NN} \meta{seq~var} \meta{token list variable}
-% \end{syntax}
-% Stores the right-most item from a \meta{seq~var} in the
-% \meta{token list variable} without removing it from the
-% \meta{seq~var}. The \meta{token list variable} is assigned locally.
-% If \meta{seq~var} is empty the \meta{token list variable}
-% is set to the special marker \cs{q_no_value}.
-% \end{function}
-%
-% \begin{function}[updated = 2012-05-14]{\seq_pop_left:NN, \seq_pop_left:cN}
-% \begin{syntax}
-% \cs{seq_pop_left:NN} \meta{seq~var} \meta{token list variable}
-% \end{syntax}
-% Pops the left-most item from a \meta{seq~var} into the
-% \meta{token list variable}, \emph{i.e.}~removes the item from the
-% sequence and stores it in the \meta{token list variable}.
-% Both of the variables are assigned locally. If \meta{seq~var} is
-% empty the \meta{token list variable} is set to
-% the special marker \cs{q_no_value}.
-% \end{function}
-%
-% \begin{function}[updated = 2012-05-14]{\seq_gpop_left:NN, \seq_gpop_left:cN}
-% \begin{syntax}
-% \cs{seq_gpop_left:NN} \meta{seq~var} \meta{token list variable}
-% \end{syntax}
-% Pops the left-most item from a \meta{seq~var} into the
-% \meta{token list variable}, \emph{i.e.}~removes the item from the
-% sequence and stores it in the \meta{token list variable}.
-% The \meta{seq~var} is modified globally, while the assignment of
-% the \meta{token list variable} is local.
-% If \meta{seq~var} is empty the \meta{token list variable} is set to
-% the special marker \cs{q_no_value}.
-% \end{function}
-%
-% \begin{function}[updated = 2012-05-19]{\seq_pop_right:NN, \seq_pop_right:cN}
-% \begin{syntax}
-% \cs{seq_pop_right:NN} \meta{seq~var} \meta{token list variable}
-% \end{syntax}
-% Pops the right-most item from a \meta{seq~var} into the
-% \meta{token list variable}, \emph{i.e.}~removes the item from the
-% sequence and stores it in the \meta{token list variable}.
-% Both of the variables are assigned locally. If \meta{seq~var} is
-% empty the \meta{token list variable} is set to
-% the special marker \cs{q_no_value}.
-% \end{function}
-%
-% \begin{function}[updated = 2012-05-19]{\seq_gpop_right:NN, \seq_gpop_right:cN}
-% \begin{syntax}
-% \cs{seq_gpop_right:NN} \meta{seq~var} \meta{token list variable}
-% \end{syntax}
-% Pops the right-most item from a \meta{seq~var} into the
-% \meta{token list variable}, \emph{i.e.}~removes the item from the
-% sequence and stores it in the \meta{token list variable}.
-% The \meta{seq~var} is modified globally, while the assignment of
-% the \meta{token list variable} is local.
-% If \meta{seq~var} is empty the \meta{token list variable} is set to
-% the special marker \cs{q_no_value}.
-% \end{function}
-%
-% \begin{function}[added = 2014-07-17, EXP]
-% {
-% \seq_item:Nn, \seq_item:NV, \seq_item:Ne,
-% \seq_item:cn, \seq_item:cV, \seq_item:ce
-% }
-% \begin{syntax}
-% \cs{seq_item:Nn} \meta{seq~var} \Arg{integer expression}
-% \end{syntax}
-% Indexing items in the \meta{seq~var} from~$1$ at the top (left), this
-% function evaluates the \meta{integer expression} and leaves the
-% appropriate item from the sequence in the input stream. If the
-% \meta{integer expression} is negative, indexing occurs from the
-% bottom (right) of the sequence. If the \meta{integer expression}
-% is larger than the number of items in the \meta{seq~var} (as
-% calculated by \cs{seq_count:N}) then the function expands to
-% nothing.
-% \begin{texnote}
-% The result is returned within the \tn{unexpanded}
-% primitive (\cs{exp_not:n}), which means that the \meta{item}
-% does not expand further when appearing in an \texttt{e}-type
-% or \texttt{x}-type argument expansion.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[EXP, added = 2016-12-06]{\seq_rand_item:N, \seq_rand_item:c}
-% \begin{syntax}
-% \cs{seq_rand_item:N} \meta{seq~var}
-% \end{syntax}
-% Selects a pseudo-random item of the \meta{seq~var}. If the
-% \meta{seq~var} is empty the result is empty.
-% This is not available in older versions of \XeTeX{}.
-% \begin{texnote}
-% The result is returned within the \tn{unexpanded}
-% primitive (\cs{exp_not:n}), which means that the \meta{item}
-% does not expand further when appearing in an \texttt{e}-type
-% or \texttt{x}-type argument expansion.
-% \end{texnote}
-% \end{function}
-%
-% \section{Recovering values from sequences with branching}
-%
-% The functions in this section combine tests for non-empty sequences
-% with recovery of an item from the sequence. They offer increased readability
-% and performance over separate testing and recovery phases.
-%
-% \begin{function}[TF, added = 2012-05-14, updated = 2012-05-19]
-% {\seq_get_left:NN, \seq_get_left:cN}
-% \begin{syntax}
-% \cs{seq_get_left:NNTF} \meta{seq~var} \meta{token list variable} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% If the \meta{seq~var} is empty, leaves the \meta{false code} in the
-% input stream. The value of the \meta{token list variable} is
-% not defined in this case and should not be relied upon. If the
-% \meta{seq~var} is non-empty, stores the left-most item from the
-% \meta{seq~var}
-% in the \meta{token list variable} without removing it from the
-% \meta{seq~var}, then leaves the \meta{true code} in the input stream.
-% The \meta{token list variable} is assigned locally.
-% \end{function}
-%
-% \begin{function}[TF, added = 2012-05-19]
-% {\seq_get_right:NN, \seq_get_right:cN}
-% \begin{syntax}
-% \cs{seq_get_right:NNTF} \meta{seq~var} \meta{token list variable} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% If the \meta{seq~var} is empty, leaves the \meta{false code} in the
-% input stream. The value of the \meta{token list variable} is
-% not defined in this case and should not be relied upon. If the
-% \meta{seq~var} is non-empty, stores the right-most item from the
-% \meta{seq~var}
-% in the \meta{token list variable} without removing it from the
-% \meta{seq~var}, then leaves the \meta{true code} in the input stream.
-% The \meta{token list variable} is assigned locally.
-% \end{function}
-%
-% \begin{function}[TF, added = 2012-05-14, updated = 2012-05-19]
-% {\seq_pop_left:NN, \seq_pop_left:cN}
-% \begin{syntax}
-% \cs{seq_pop_left:NNTF} \meta{seq~var} \meta{token list variable} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% If the \meta{seq~var} is empty, leaves the \meta{false code} in the
-% input stream. The value of the \meta{token list variable} is
-% not defined in this case and should not be relied upon. If the
-% \meta{seq~var} is non-empty, pops the left-most item from the
-% \meta{seq~var}
-% in the \meta{token list variable}, \emph{i.e.}~removes the item from the
-% \meta{seq~var}, then leaves the \meta{true code} in the input stream.
-% Both the \meta{seq~var} and the \meta{token list variable} are assigned
-% locally.
-% \end{function}
-%
-% \begin{function}[TF, added = 2012-05-14, updated = 2012-05-19]
-% {\seq_gpop_left:NN, \seq_gpop_left:cN}
-% \begin{syntax}
-% \cs{seq_gpop_left:NNTF} \meta{seq~var} \meta{token list variable} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% If the \meta{seq~var} is empty, leaves the \meta{false code} in the
-% input stream. The value of the \meta{token list variable} is
-% not defined in this case and should not be relied upon. If the
-% \meta{seq~var} is non-empty, pops the left-most item from the \meta{seq~var}
-% in the \meta{token list variable}, \emph{i.e.}~removes the item from the
-% \meta{seq~var}, then leaves the \meta{true code} in the input stream.
-% The \meta{seq~var} is modified globally, while the \meta{token list variable}
-% is assigned locally.
-% \end{function}
-%
-% \begin{function}[TF, added = 2012-05-19]
-% {\seq_pop_right:NN, \seq_pop_right:cN}
-% \begin{syntax}
-% \cs{seq_pop_right:NNTF} \meta{seq~var} \meta{token list variable} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% If the \meta{seq~var} is empty, leaves the \meta{false code} in the
-% input stream. The value of the \meta{token list variable} is
-% not defined in this case and should not be relied upon. If the
-% \meta{seq~var} is non-empty, pops the right-most item from the \meta{seq~var}
-% in the \meta{token list variable}, \emph{i.e.}~removes the item from the
-% \meta{seq~var}, then leaves the \meta{true code} in the input stream.
-% Both the \meta{seq~var} and the \meta{token list variable} are assigned
-% locally.
-% \end{function}
-%
-% \begin{function}[TF, added = 2012-05-19]
-% {\seq_gpop_right:NN, \seq_gpop_right:cN}
-% \begin{syntax}
-% \cs{seq_gpop_right:NNTF} \meta{seq~var} \meta{token list variable} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% If the \meta{seq~var} is empty, leaves the \meta{false code} in the
-% input stream. The value of the \meta{token list variable} is
-% not defined in this case and should not be relied upon. If the
-% \meta{seq~var} is non-empty, pops the right-most item from the \meta{seq~var}
-% in the \meta{token list variable}, \emph{i.e.}~removes the item from the
-% \meta{seq~var}, then leaves the \meta{true code} in the input stream.
-% The \meta{seq~var} is modified globally, while the
-% \meta{token list variable} is assigned locally.
-% \end{function}
-%
-% \section{Modifying sequences}
-%
-% While sequences are normally used as ordered lists, it may be
-% necessary to modify the content. The functions here may be used
-% to update sequences, while retaining the order of the unaffected
-% entries.
-%
-% \begin{function}
-% {
-% \seq_remove_duplicates:N, \seq_remove_duplicates:c,
-% \seq_gremove_duplicates:N, \seq_gremove_duplicates:c
-% }
-% \begin{syntax}
-% \cs{seq_remove_duplicates:N} \meta{seq~var}
-% \end{syntax}
-% Removes duplicate items from the \meta{seq~var}, leaving the
-% left most copy of each item in the \meta{seq~var}. The \meta{item}
-% comparison takes place on a token basis, as for \cs{tl_if_eq:nnTF}.
-% \begin{texnote}
-% This function iterates through every item in the \meta{seq~var} and
-% does a comparison with the \meta{items} already checked. It is therefore
-% relatively slow with large sequences.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}
-% {
-% \seq_remove_all:Nn, \seq_remove_all:NV, \seq_remove_all:Ne,
-% \seq_remove_all:cn, \seq_remove_all:cV, \seq_remove_all:ce,
-% \seq_gremove_all:Nn, \seq_gremove_all:NV, \seq_gremove_all:Ne,
-% \seq_gremove_all:cn, \seq_gremove_all:cV, \seq_gremove_all:ce
-% }
-% \begin{syntax}
-% \cs{seq_remove_all:Nn} \meta{seq~var} \Arg{item}
-% \end{syntax}
-% Removes every occurrence of \meta{item} from the \meta{seq~var}.
-% The \meta{item} comparison takes place on a token basis, as for
-% \cs{tl_if_eq:nnTF}.
-% \end{function}
-%
-% \begin{function}[added = 2021-04-29, noTF]
-% {\seq_set_item:Nnn, \seq_set_item:cnn, \seq_gset_item:Nnn, \seq_gset_item:cnn}
-% \begin{syntax}
-% \cs{seq_set_item:Nnn} \meta{seq~var} \Arg{int expr} \Arg{item}
-% \cs{seq_set_item:NnnTF} \meta{seq~var} \Arg{int expr} \Arg{item} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Removes the item of \meta{seq~var} at the position given by
-% evaluating the \meta{int expr} and replaces it by
-% \meta{item}. Items are indexed from $1$ on the left/top of the
-% \meta{seq~var}, or from $-1$ on the right/bottom. If the
-% \meta{int expr} is zero or is larger (in absolute value)
-% than the number of items in the sequence, the \meta{seq~var} is not
-% modified. In these cases, \cs{seq_set_item:Nnn} raises an error
-% while \cs{seq_set_item:NnnTF} runs the \meta{false code}. In cases
-% where the assignment was successful, \meta{true code} is run
-% afterwards.
-% \end{function}
-%
-% \begin{function}[added = 2014-07-18]
-% {
-% \seq_reverse:N, \seq_reverse:c,
-% \seq_greverse:N, \seq_greverse:c
-% }
-% \begin{syntax}
-% \cs{seq_reverse:N} \meta{seq~var}
-% \end{syntax}
-% Reverses the order of the items stored in the \meta{seq~var}.
-% \end{function}
-%
-% \begin{function}[added = 2017-02-06]
-% {\seq_sort:Nn, \seq_sort:cn, \seq_gsort:Nn, \seq_gsort:cn}
-% \begin{syntax}
-% \cs{seq_sort:Nn} \meta{seq~var} \Arg{comparison code}
-% \end{syntax}
-% Sorts the items in the \meta{seq~var} according to the
-% \meta{comparison code}, and assigns the result to
-% \meta{seq~var}. The details of sorting comparison are
-% described in Section~\ref{sec:l3sort:mech}.
-% \end{function}
-%
-% \begin{function}[added = 2018-04-29]
-% {\seq_shuffle:N, \seq_shuffle:c, \seq_gshuffle:N, \seq_gshuffle:c}
-% \begin{syntax}
-% \cs{seq_shuffle:N} \meta{seq~var}
-% \end{syntax}
-% Sets the \meta{seq~var} to the result of placing the items of the
-% \meta{seq~var} in a random order. Each item is (roughly) as likely
-% to end up in any given position.
-% \begin{texnote}
-% For sequences with more than $13$ items or so, only a small
-% proportion of all possible permutations can be reached, because
-% the random seed \cs{sys_rand_seed:} only has $28$-bits. The use
-% of \tn{toks} internally means that sequences with more than
-% $32767$ or $65535$ items (depending on the engine) cannot be
-% shuffled.
-% \end{texnote}
-% \end{function}
-%
-% \section{Sequence conditionals}
-%
-% \begin{function}[EXP,pTF]{\seq_if_empty:N, \seq_if_empty:c}
-% \begin{syntax}
-% \cs{seq_if_empty_p:N} \meta{seq~var}
-% \cs{seq_if_empty:NTF} \meta{seq~var} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the \meta{seq~var} is empty (containing no items).
-% \end{function}
-%
-% \begin{function}[TF]
-% {
-% \seq_if_in:Nn, \seq_if_in:NV, \seq_if_in:Nv, \seq_if_in:Ne,
-% \seq_if_in:No,
-% \seq_if_in:cn, \seq_if_in:cV, \seq_if_in:cv, \seq_if_in:ce,
-% \seq_if_in:co,
-% }
-% \begin{syntax}
-% \cs{seq_if_in:NnTF} \meta{seq~var} \Arg{item} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the \meta{item} is present in the \meta{seq~var}.
-% \end{function}
-%
-% \section{Mapping over sequences}
-%
-% All mappings are done at the current group level, \emph{i.e.}~any
-% local assignments made by the \meta{function} or \meta{code} discussed
-% below remain in effect after the loop.
-%
-% \begin{function}[rEXP, updated = 2012-06-29]
-% {\seq_map_function:NN, \seq_map_function:cN}
-% \begin{syntax}
-% \cs{seq_map_function:NN} \meta{seq~var} \meta{function}
-% \end{syntax}
-% Applies \meta{function} to every \meta{item} stored in the
-% \meta{seq~var}. The \meta{function} will receive one argument for
-% each iteration. The \meta{items} are returned from left to right.
-% To pass further arguments to the \meta{function}, see
-% \cs{seq_map_tokens:Nn}.
-% The function \cs{seq_map_inline:Nn} is faster than
-% \cs{seq_map_function:NN} for sequences with more than about~$10$
-% items.
-% \end{function}
-%
-% \begin{function}[updated = 2012-06-29]
-% {\seq_map_inline:Nn, \seq_map_inline:cn}
-% \begin{syntax}
-% \cs{seq_map_inline:Nn} \meta{seq~var} \Arg{inline function}
-% \end{syntax}
-% Applies \meta{inline function} to every \meta{item} stored
-% within the \meta{seq~var}. The \meta{inline function} should
-% consist of code which will receive the \meta{item} as |#1|.
-% The \meta{items} are returned from left to right.
-% \end{function}
-%
-% \begin{function}[rEXP, added = 2019-08-30]
-% {\seq_map_tokens:Nn, \seq_map_tokens:cn}
-% \begin{syntax}
-% \cs{seq_map_tokens:Nn} \meta{seq~var} \Arg{code}
-% \end{syntax}
-% Analogue of \cs{seq_map_function:NN} which maps several tokens
-% instead of a single function. The \meta{code} receives each item in
-% the \meta{seq~var} as a trailing brace group. For instance,
-% \begin{verbatim}
-% \seq_map_tokens:Nn \l_my_seq { \prg_replicate:nn { 2 } }
-% \end{verbatim}
-% expands to twice each item in the \meta{seq~var}: for each item in
-% |\l_my_seq| the function \cs{prg_replicate:nn} receives |2| and
-% \meta{item} as its two arguments. The function
-% \cs{seq_map_inline:Nn} is typically faster but it is not expandable.
-% \end{function}
-%
-% \begin{function}[updated = 2012-06-29]
-% {
-% \seq_map_variable:NNn, \seq_map_variable:Ncn,
-% \seq_map_variable:cNn, \seq_map_variable:ccn
-% }
-% \begin{syntax}
-% \cs{seq_map_variable:NNn} \meta{seq~var} \meta{variable} \Arg{code}
-% \end{syntax}
-% Stores each \meta{item} of the \meta{seq~var} in turn in the (token
-% list) \meta{variable} and applies the \meta{code}. The \meta{code}
-% will usually make use of the \meta{variable}, but this is not
-% enforced. The assignments to the \meta{variable} are local. Its
-% value after the loop is the last \meta{item} in the \meta{seq~var},
-% or its original value if the \meta{seq~var} is empty. The
-% \meta{items} are returned from left to right.
-% \end{function}
-%
-% \begin{function}[rEXP,added = 2018-05-03]{\seq_map_indexed_function:NN}
-% \begin{syntax}
-% \cs{seq_map_indexed_function:NN} \meta{seq~var} \meta{function}
-% \end{syntax}
-% Applies \meta{function} to every entry in the \meta{seq~var}.
-% The \meta{function} should have signature |:nn|. It
-% receives two arguments for each iteration: the \meta{index} (namely
-% |1| for the first entry, then |2| and so on) and the \meta{item}.
-% \end{function}
-%
-% \begin{function}[added = 2018-05-03]{\seq_map_indexed_inline:Nn}
-% \begin{syntax}
-% \cs{seq_map_indexed_inline:Nn} \meta{seq~var} \Arg{inline function}
-% \end{syntax}
-% Applies \meta{inline function} to every entry in the \meta{seq~var}.
-% The \meta{inline function} should consist of code which
-% receives the \meta{index} (namely |1| for the first entry, then |2|
-% and so on) as~|#1| and the \meta{item} as~|#2|.
-% \end{function}
-%
-% \begin{function}[rEXP, added = 2023-05-10]
-% {
-% \seq_map_pairwise_function:NNN, \seq_map_pairwise_function:NcN,
-% \seq_map_pairwise_function:cNN, \seq_map_pairwise_function:ccN
-% }
-% \begin{syntax}
-% \cs{seq_map_pairwise_function:NNN} \meta{seq_1} \meta{seq_2} \meta{function}
-% \end{syntax}
-% Applies \meta{function} to every pair of items
-% \meta{seq_1-item}--\meta{seq_2-item} from the two sequences, returning
-% items from both sequences from left to right. The \meta{function}
-% receives two \texttt{n}-type arguments for each iteration. The mapping
-% terminates when
-% the end of either sequence is reached (\emph{i.e.}~whichever sequence has
-% fewer items determines how many iterations
-% occur).
-% \end{function}
-%
-% \begin{function}[rEXP, updated = 2012-06-29]{\seq_map_break:}
-% \begin{syntax}
-% \cs{seq_map_break:}
-% \end{syntax}
-% Used to terminate a \cs[no-index]{seq_map_\ldots} function before all
-% entries in the \meta{seq~var} have been processed. This
-% normally takes place within a conditional statement, for example
-% \begin{verbatim}
-% \seq_map_inline:Nn \l_my_seq
-% {
-% \str_if_eq:nnTF { #1 } { bingo }
-% { \seq_map_break: }
-% {
-% % Do something useful
-% }
-% }
-% \end{verbatim}
-% Use outside of a \cs[no-index]{seq_map_\ldots} scenario leads to low
-% level \TeX{} errors.
-% \begin{texnote}
-% When the mapping is broken, additional tokens may be inserted
-% before further items are taken
-% from the input stream. This depends on the design of the mapping
-% function.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[rEXP, updated = 2012-06-29]{\seq_map_break:n}
-% \begin{syntax}
-% \cs{seq_map_break:n} \Arg{code}
-% \end{syntax}
-% Used to terminate a \cs[no-index]{seq_map_\ldots} function before all
-% entries in the \meta{seq~var} have been processed, inserting
-% the \meta{code} after the mapping has ended. This
-% normally takes place within a conditional statement, for example
-% \begin{verbatim}
-% \seq_map_inline:Nn \l_my_seq
-% {
-% \str_if_eq:nnTF { #1 } { bingo }
-% { \seq_map_break:n { <code> } }
-% {
-% % Do something useful
-% }
-% }
-% \end{verbatim}
-% Use outside of a \cs[no-index]{seq_map_\ldots} scenario leads to low
-% level \TeX{} errors.
-% \begin{texnote}
-% When the mapping is broken, additional tokens may be inserted
-% before the \meta{code} is
-% inserted into the input stream.
-% This depends on the design of the mapping function.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[added = 2011-12-22, updated = 2020-07-16]
-% {\seq_set_map:NNn, \seq_gset_map:NNn}
-% \begin{syntax}
-% \cs{seq_set_map:NNn} \meta{seq~var_1} \meta{seq~var_2} \Arg{inline function}
-% \end{syntax}
-% Applies \meta{inline function} to every \meta{item} stored
-% within the \meta{seq~var_2}. The \meta{inline function} should
-% consist of code which will receive the \meta{item} as |#1|.
-% The sequence resulting applying \meta{inline function} to each
-% \meta{item} is assigned to \meta{seq~var_1}.
-% \begin{texnote}
-% Contrarily to other mapping functions, \cs{seq_map_break:} cannot
-% be used in this function, and would lead to low-level \TeX{} errors.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[added = 2020-07-16, updated = 2023-10-26]
-% {\seq_set_map_e:NNn, \seq_gset_map_e:NNn}
-% \begin{syntax}
-% \cs{seq_set_map_e:NNn} \meta{seq~var_1} \meta{seq~var_2} \Arg{inline function}
-% \end{syntax}
-% Applies \meta{inline function} to every \meta{item} stored
-% within the \meta{seq~var_2}. The \meta{inline function} should
-% consist of code which will receive the \meta{item} as |#1|.
-% The sequence resulting from \texttt{e}-expanding
-% \meta{inline function} applied to each \meta{item}
-% is assigned to \meta{seq~var_1}. As such, the code
-% in \meta{inline function} should be expandable.
-% \begin{texnote}
-% Contrarily to other mapping functions, \cs{seq_map_break:} cannot
-% be used in this function, and would lead to low-level \TeX{} errors.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[EXP, added = 2012-07-13]{\seq_count:N, \seq_count:c}
-% \begin{syntax}
-% \cs{seq_count:N} \meta{seq~var}
-% \end{syntax}
-% Leaves the number of items in the \meta{seq~var} in the input
-% stream as an \meta{integer denotation}. The total number of items
-% in a \meta{seq~var} includes those which are empty and duplicates,
-% \emph{i.e.}~every item in a \meta{seq~var} is unique.
-% \end{function}
-%
-% \section{Using the content of sequences directly}
-%
-% \begin{function}[EXP, added = 2013-05-26]{\seq_use:Nnnn, \seq_use:cnnn}
-% \begin{syntax}
-% \cs{seq_use:Nnnn} \meta{seq~var} \Arg{separator~between~two} \Arg{separator~between~more~than~two} \Arg{separator~between~final~two}
-% \end{syntax}
-% Places the contents of the \meta{seq~var} in the input stream, with
-% the appropriate \meta{separator} between the items. Namely, if the
-% sequence has more than two items, the \meta{separator between more
-% than two} is placed between each pair of items except the last,
-% for which the \meta{separator between final two} is used. If the
-% sequence has exactly two items, then they are placed in the input stream
-% separated by the \meta{separator between two}. If the sequence has
-% a single item, it is placed in the input stream, and an empty sequence
-% produces no output. An error is raised if the variable does
-% not exist or if it is invalid.
-%
-% For example,
-% \begin{verbatim}
-% \seq_set_split:Nnn \l_tmpa_seq { | } { a | b | c | {de} | f }
-% \seq_use:Nnnn \l_tmpa_seq { ~and~ } { ,~ } { ,~and~ }
-% \end{verbatim}
-% inserts \enquote{\texttt{a, b, c, de, and f}} in the input
-% stream. The first separator argument is not used in this case
-% because the sequence has more than $2$ items.
-% \begin{texnote}
-% The result is returned within the \tn{unexpanded}
-% primitive (\cs{exp_not:n}), which means that the \meta{items}
-% do not expand further when appearing in an \texttt{e}-type
-% or \texttt{x}-type argument expansion.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[EXP, added = 2013-05-26]{\seq_use:Nn, \seq_use:cn}
-% \begin{syntax}
-% \cs{seq_use:Nn} \meta{seq~var} \Arg{separator}
-% \end{syntax}
-% Places the contents of the \meta{seq~var} in the input stream, with
-% the \meta{separator} between the items. If the sequence has
-% a single item, it is placed in the input stream with no \meta{separator},
-% and an empty sequence produces no output. An error is raised if
-% the variable does not exist or if it is invalid.
-%
-% For example,
-% \begin{verbatim}
-% \seq_set_split:Nnn \l_tmpa_seq { | } { a | b | c | {de} | f }
-% \seq_use:Nn \l_tmpa_seq { ~and~ }
-% \end{verbatim}
-% inserts \enquote{\texttt{a and b and c and de and f}} in the input
-% stream.
-% \begin{texnote}
-% The result is returned within the \tn{unexpanded}
-% primitive (\cs{exp_not:n}), which means that the \meta{items}
-% do not expand further when appearing in an \texttt{e}-type
-% or \texttt{x}-type argument expansion.
-% \end{texnote}
-% \end{function}
-%
-% \section{Sequences as stacks}
-%
-% Sequences can be used as stacks, where data is pushed to and popped
-% from the top of the sequence. (The left of a sequence is the top, for
-% performance reasons.) The stack functions for sequences are not
-% intended to be mixed with the general ordered data functions detailed
-% in the previous section: a sequence should either be used as an
-% ordered data type or as a stack, but not in both ways.
-%
-% \begin{function}[updated = 2012-05-14]{\seq_get:NN, \seq_get:cN}
-% \begin{syntax}
-% \cs{seq_get:NN} \meta{seq~var} \meta{token list variable}
-% \end{syntax}
-% Reads the top item from a \meta{seq~var} into the
-% \meta{token list variable} without removing it from the
-% \meta{seq~var}. The \meta{token list variable} is assigned locally.
-% If \meta{seq~var} is empty the \meta{token list variable} is set to
-% the special marker \cs{q_no_value}.
-% \end{function}
-%
-% \begin{function}[updated = 2012-05-14]{\seq_pop:NN, \seq_pop:cN}
-% \begin{syntax}
-% \cs{seq_pop:NN} \meta{seq~var} \meta{token list variable}
-% \end{syntax}
-% Pops the top item from a \meta{seq~var} into the
-% \meta{token list variable}. Both of the variables are assigned
-% locally. If \meta{seq~var} is empty the \meta{token list variable}
-% is set to the special marker \cs{q_no_value}.
-% \end{function}
-%
-% \begin{function}[updated = 2012-05-14]{\seq_gpop:NN, \seq_gpop:cN}
-% \begin{syntax}
-% \cs{seq_gpop:NN} \meta{seq~var} \meta{token list variable}
-% \end{syntax}
-% Pops the top item from a \meta{seq~var} into the
-% \meta{token list variable}. The \meta{seq~var} is modified globally,
-% while the \meta{token list variable} is assigned locally. If
-% \meta{seq~var} is empty the \meta{token list variable} is set to
-% the special marker \cs{q_no_value}.
-% \end{function}
-%
-% \begin{function}[TF, added = 2012-05-14, updated = 2012-05-19]{\seq_get:NN, \seq_get:cN}
-% \begin{syntax}
-% \cs{seq_get:NNTF} \meta{seq~var} \meta{token list variable} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% If the \meta{seq~var} is empty, leaves the \meta{false code} in the
-% input stream. The value of the \meta{token list variable} is
-% not defined in this case and should not be relied upon. If the
-% \meta{seq~var} is non-empty, stores the top item from a
-% \meta{seq~var} in the \meta{token list variable} without removing it from
-% the \meta{seq~var}. The \meta{token list variable} is assigned locally.
-% \end{function}
-%
-% \begin{function}[TF, added = 2012-05-14, updated = 2012-05-19]{\seq_pop:NN, \seq_pop:cN}
-% \begin{syntax}
-% \cs{seq_pop:NNTF} \meta{seq~var} \meta{token list variable} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% If the \meta{seq~var} is empty, leaves the \meta{false code} in the
-% input stream. The value of the \meta{token list variable} is
-% not defined in this case and should not be relied upon. If the
-% \meta{seq~var} is non-empty, pops the top item from the
-% \meta{seq~var} in the \meta{token list variable}, \emph{i.e.}~removes the
-% item from the \meta{seq~var}. Both the \meta{seq~var} and the
-% \meta{token list variable} are assigned locally.
-% \end{function}
-%
-% \begin{function}[TF, added = 2012-05-14, updated = 2012-05-19]{\seq_gpop:NN, \seq_gpop:cN}
-% \begin{syntax}
-% \cs{seq_gpop:NNTF} \meta{seq~var} \meta{token list variable} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% If the \meta{seq~var} is empty, leaves the \meta{false code} in the
-% input stream. The value of the \meta{token list variable} is
-% not defined in this case and should not be relied upon. If the
-% \meta{seq~var} is non-empty, pops the top item from the \meta{seq~var}
-% in the \meta{token list variable}, \emph{i.e.}~removes the item from the
-% \meta{seq~var}. The \meta{seq~var} is modified globally, while the
-% \meta{token list variable} is assigned locally.
-% \end{function}
-%
-% \begin{function}
-% {
-% \seq_push:Nn, \seq_push:NV, \seq_push:Nv, \seq_push:Ne,
-% \seq_push:No,
-% \seq_push:cn, \seq_push:cV, \seq_push:cv, \seq_push:ce,
-% \seq_push:co,
-% \seq_gpush:Nn, \seq_gpush:NV, \seq_gpush:Nv, \seq_gpush:Ne,
-% \seq_gpush:No,
-% \seq_gpush:cn, \seq_gpush:cV, \seq_gpush:cv, \seq_gpush:ce,
-% \seq_gpush:co
-% }
-% \begin{syntax}
-% \cs{seq_push:Nn} \meta{seq~var} \Arg{item}
-% \end{syntax}
-% Adds the \Arg{item} to the top of the \meta{seq~var}.
-% \end{function}
-%
-% \section{Sequences as sets}
-%
-% Sequences can also be used as sets, such that all of their items are
-% distinct. Usage of sequences as sets is not currently widespread,
-% hence no specific set function is provided. Instead, it is explained
-% here how common set operations can be performed by combining several
-% functions described in earlier sections. When using sequences to
-% implement sets, one should be careful not to rely on the order of
-% items in the sequence representing the set.
-%
-% Sets should not contain several occurrences of a given item. To make
-% sure that a \meta{seq~var} only has distinct items, use
-% \cs{seq_remove_duplicates:N} \meta{seq~var}. This function
-% is relatively slow, and to avoid performance issues one should only
-% use it when necessary.
-%
-% Some operations on a set \meta{seq~var} are straightforward. For
-% instance, \cs{seq_count:N} \meta{seq~var} expands to the number of
-% items, while \cs{seq_if_in:NnTF} \meta{seq~var} \Arg{item} tests if
-% the \meta{item} is in the set.
-%
-% Adding an \meta{item} to a set \meta{seq~var} can be done by appending
-% it to the \meta{seq~var} if it is not already in the \meta{seq~var}:
-% \begin{quote}\ttfamily\parskip=0pt\obeylines
-% \cs{seq_if_in:NnF} \meta{seq~var} \Arg{item}
-% | |\{ \cs{seq_put_right:Nn} \meta{seq~var} \Arg{item} \}
-% \end{quote}
-% Removing an \meta{item} from a set \meta{seq~var} can be done using
-% \cs{seq_remove_all:Nn},
-% \begin{quote}\ttfamily
-% \cs{seq_remove_all:Nn} \meta{seq~var} \Arg{item}
-% \end{quote}
-%
-% The intersection of two sets \meta{seq~var_1} and \meta{seq~var_2} can
-% be stored into \meta{seq~var_3} by collecting items of
-% \meta{seq~var_1} which are in \meta{seq~var_2}.
-% \begin{quote}\ttfamily\parskip=0pt\obeylines
-% \cs{seq_clear:N} \meta{seq~var_3}
-% \cs{seq_map_inline:Nn} \meta{seq~var_1}
-% | |\{
-% | |\cs{seq_if_in:NnT} \meta{seq~var_2} \{\#1\}
-% | |\{ \cs{seq_put_right:Nn} \meta{seq~var_3} \{\#1\} \}
-% | |\}
-% \end{quote}
-% The code as written here only works if \meta{seq~var_3} is different
-% from the other two sequence variables. To cover all cases, items
-% should first be collected in a sequence
-% |\l__|\meta{pkg}|_internal_seq|, then \meta{seq~var_3} should be set
-% equal to this internal sequence. The same remark applies to other set
-% functions.
-%
-% The union of two sets \meta{seq~var_1} and \meta{seq~var_2} can be
-% stored into \meta{seq~var_3} through
-% \begin{quote}\ttfamily
-% \cs{seq_concat:NNN} \meta{seq~var_3} \meta{seq~var_1} \meta{seq~var_2} \\
-% \cs{seq_remove_duplicates:N} \meta{seq~var_3}
-% \end{quote}
-% or by adding items to (a copy of) \meta{seq~var_1} one by one
-% \begin{quote}\ttfamily\parskip=0pt\obeylines
-% \cs{seq_set_eq:NN} \meta{seq~var_3} \meta{seq~var_1}
-% \cs{seq_map_inline:Nn} \meta{seq~var_2}
-% | |\{
-% | |\cs{seq_if_in:NnF} \meta{seq~var_3} \{\#1\}
-% | |\{ \cs{seq_put_right:Nn} \meta{seq~var_3} \{\#1\} \}
-% | |\}
-% \end{quote}
-% The second approach is faster than the first when the \meta{seq~var_2}
-% is short compared to \meta{seq~var_1}.
-%
-% The difference of two sets \meta{seq~var_1} and \meta{seq~var_2} can
-% be stored into \meta{seq~var_3} by removing items of the
-% \meta{seq~var_2} from (a copy of) the \meta{seq~var_1} one by one.
-% \begin{quote}\ttfamily\parskip=0pt\obeylines
-% \cs{seq_set_eq:NN} \meta{seq~var_3} \meta{seq~var_1}
-% \cs{seq_map_inline:Nn} \meta{seq~var_2}
-% | |\{ \cs{seq_remove_all:Nn} \meta{seq~var_3} \{\#1\} \}
-% \end{quote}
-%
-% The symmetric difference of two sets \meta{seq~var_1} and
-% \meta{seq~var_2} can be stored into \meta{seq~var_3} by computing the
-% difference between \meta{seq~var_1} and \meta{seq~var_2} and storing
-% the result as |\l__|\meta{pkg}|_internal_seq|, then the difference
-% between \meta{seq~var_2} and \meta{seq~var_1}, and finally
-% concatenating the two differences to get the symmetric differences.
-% \begin{quote}\ttfamily\parskip=0pt\obeylines
-% \cs{seq_set_eq:NN} |\l__|\meta{pkg}|_internal_seq| \meta{seq~var_1}
-% \cs{seq_map_inline:Nn} \meta{seq~var_2}
-% | |\{ \cs{seq_remove_all:Nn} |\l__|\meta{pkg}|_internal_seq| \{\#1\} \}
-% \cs{seq_set_eq:NN} \meta{seq~var_3} \meta{seq~var_2}
-% \cs{seq_map_inline:Nn} \meta{seq~var_1}
-% | |\{ \cs{seq_remove_all:Nn} \meta{seq~var_3} \{\#1\} \}
-% \cs{seq_concat:NNN} \meta{seq~var_3} \meta{seq~var_3} |\l__|\meta{pkg}|_internal_seq|
-% \end{quote}
-%
-% \section{Constant and scratch sequences}
-%
-% \begin{variable}[added = 2012-07-02]{\c_empty_seq}
-% Constant that is always empty.
-% \end{variable}
-%
-% \begin{variable}[added = 2012-04-26]{\l_tmpa_seq, \l_tmpb_seq}
-% Scratch sequences for local assignment. These are never used by
-% the kernel code, and so are safe for use with any \LaTeX3-defined
-% function. However, they may be overwritten by other non-kernel
-% code and so should only be used for short-term storage.
-% \end{variable}
-%
-% \begin{variable}[added = 2012-04-26]{\g_tmpa_seq, \g_tmpb_seq}
-% Scratch sequences for global assignment. These are never used by
-% the kernel code, and so are safe for use with any \LaTeX3-defined
-% function. However, they may be overwritten by other non-kernel
-% code and so should only be used for short-term storage.
-% \end{variable}
-%
-% \section{Viewing sequences}
-%
-% \begin{function}[updated = 2021-04-29]{\seq_show:N, \seq_show:c}
-% \begin{syntax}
-% \cs{seq_show:N} \meta{seq~var}
-% \end{syntax}
-% Displays the entries in the \meta{seq~var} in the terminal.
-% \end{function}
-%
-% \begin{function}[added = 2014-08-12, updated = 2021-04-29]{\seq_log:N, \seq_log:c}
-% \begin{syntax}
-% \cs{seq_log:N} \meta{seq~var}
-% \end{syntax}
-% Writes the entries in the \meta{seq~var} in the log file.
-% \end{function}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3seq} implementation}
-%
-% \TestFiles{m3seq002,m3seq003}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=seq>
-% \end{macrocode}
-%
-% A sequence is a control sequence whose top-level expansion is of the
-% form \enquote{\cs{s_@@} \cs{@@_item:n} \marg{item_1} \ldots
-% \cs{@@_item:n} \marg{item_n}}, with a leading scan
-% mark followed by $n$~items of the same form. An
-% earlier implementation used the structure \enquote{\cs{seq_elt:w}
-% \meta{item_1} \cs{seq_elt_end:} \ldots \cs{seq_elt:w} \meta{item_n}
-% \cs{seq_elt_end:}}. This allowed rapid searching using a delimited
-% function, but was not suitable for items containing |{|, |}| and |#|
-% tokens, and also lead to the loss of surrounding braces around items
-%
-% \begin{function}[EXP]{\@@_item:n}
-% \begin{syntax}
-% \cs{@@_item:n} \Arg{item}
-% \end{syntax}
-% The internal token used to begin each sequence entry. If expanded
-% outside of a mapping or manipulation function, an error is
-% raised. The definition should always be set globally.
-% \end{function}
-%
-% \begin{function}{\@@_push_item_def:n, \@@_push_item_def:e}
-% \begin{syntax}
-% \cs{@@_push_item_def:n} \Arg{code}
-% \end{syntax}
-% Saves the definition of \cs{@@_item:n} and redefines it to
-% accept one parameter and expand to \meta{code}. This function
-% should always be balanced by use of \cs{@@_pop_item_def:}.
-% \end{function}
-%
-% \begin{function}{\@@_pop_item_def:}
-% \begin{syntax}
-% \cs{@@_pop_item_def:}
-% \end{syntax}
-% Restores the definition of \cs{@@_item:n} most recently saved by
-% \cs{@@_push_item_def:n}. This function should always be used in
-% a balanced pair with \cs{@@_push_item_def:n}.
-% \end{function}
-%
-% \begin{variable}{\s_@@}
-% This private scan mark.
-% \begin{macrocode}
-\scan_new:N \s_@@
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\s_@@_mark,\s_@@_stop}
-% Private scan marks.
-% \begin{macrocode}
-\scan_new:N \s_@@_mark
-\scan_new:N \s_@@_stop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[EXP]{\@@_item:n}
-% The delimiter is always defined, but when used incorrectly simply
-% removes its argument and hits an undefined control sequence to
-% raise an error.
-% \begin{macrocode}
-\cs_new:Npn \@@_item:n
- {
- \msg_expandable_error:nn { seq } { misused }
- \use_none:n
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\l_@@_internal_a_tl, \l_@@_internal_b_tl}
-% Scratch space for various internal uses.
-% \begin{macrocode}
-\tl_new:N \l_@@_internal_a_tl
-\tl_new:N \l_@@_internal_b_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\@@_tmp:w}
-% Scratch function for internal use.
-% \begin{macrocode}
-\cs_new_eq:NN \@@_tmp:w ?
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\c_empty_seq}
-% A sequence with no item, following the structure mentioned above.
-% \begin{macrocode}
-\tl_const:Nn \c_empty_seq { \s_@@ }
-% \end{macrocode}
-% \end{variable}
-%
-% \subsection{Allocation and initialisation}
-%
-% \begin{macro}{\seq_new:N, \seq_new:c}
-% \UnitTested
-% Sequences are initialized to \cs{c_empty_seq}.
-% \begin{macrocode}
-\cs_new_protected:Npn \seq_new:N #1
- {
- \__kernel_chk_if_free_cs:N #1
- \cs_gset_eq:NN #1 \c_empty_seq
- }
-\cs_generate_variant:Nn \seq_new:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\seq_clear:N, \seq_clear:c}
-% \UnitTested
-% \begin{macro}{\seq_gclear:N, \seq_gclear:c}
-% \UnitTested
-% Clearing a sequence is similar to setting it equal to the empty one.
-% \begin{macrocode}
-\cs_new_protected:Npn \seq_clear:N #1
- { \seq_set_eq:NN #1 \c_empty_seq }
-\cs_generate_variant:Nn \seq_clear:N { c }
-\cs_new_protected:Npn \seq_gclear:N #1
- { \seq_gset_eq:NN #1 \c_empty_seq }
-\cs_generate_variant:Nn \seq_gclear:N { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\seq_clear_new:N, \seq_clear_new:c}
-% \UnitTested
-% \begin{macro}{\seq_gclear_new:N, \seq_gclear_new:c}
-% \UnitTested
-% Once again we copy code from the token list functions.
-% \begin{macrocode}
-\cs_new_protected:Npn \seq_clear_new:N #1
- { \seq_if_exist:NTF #1 { \seq_clear:N #1 } { \seq_new:N #1 } }
-\cs_generate_variant:Nn \seq_clear_new:N { c }
-\cs_new_protected:Npn \seq_gclear_new:N #1
- { \seq_if_exist:NTF #1 { \seq_gclear:N #1 } { \seq_new:N #1 } }
-\cs_generate_variant:Nn \seq_gclear_new:N { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\seq_set_eq:NN, \seq_set_eq:cN, \seq_set_eq:Nc, \seq_set_eq:cc}
-% \UnitTested
-% \begin{macro}
-% {\seq_gset_eq:NN, \seq_gset_eq:cN, \seq_gset_eq:Nc, \seq_gset_eq:cc}
-% \UnitTested
-% Copying a sequence is the same as copying the underlying token list.
-% \begin{macrocode}
-\cs_new_eq:NN \seq_set_eq:NN \tl_set_eq:NN
-\cs_new_eq:NN \seq_set_eq:Nc \tl_set_eq:Nc
-\cs_new_eq:NN \seq_set_eq:cN \tl_set_eq:cN
-\cs_new_eq:NN \seq_set_eq:cc \tl_set_eq:cc
-\cs_new_eq:NN \seq_gset_eq:NN \tl_gset_eq:NN
-\cs_new_eq:NN \seq_gset_eq:Nc \tl_gset_eq:Nc
-\cs_new_eq:NN \seq_gset_eq:cN \tl_gset_eq:cN
-\cs_new_eq:NN \seq_gset_eq:cc \tl_gset_eq:cc
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \seq_set_from_clist:NN, \seq_set_from_clist:cN,
-% \seq_set_from_clist:Nc, \seq_set_from_clist:cc,
-% \seq_set_from_clist:Nn, \seq_set_from_clist:cn
-% }
-% \begin{macro}
-% {
-% \seq_gset_from_clist:NN, \seq_gset_from_clist:cN,
-% \seq_gset_from_clist:Nc, \seq_gset_from_clist:cc,
-% \seq_gset_from_clist:Nn, \seq_gset_from_clist:cn
-% }
-% Setting a sequence from a comma-separated list is done using a simple
-% mapping.
-% \begin{macrocode}
-\cs_new_protected:Npn \seq_set_from_clist:NN #1#2
- {
- \__kernel_tl_set:Nx #1
- { \s_@@ \clist_map_function:NN #2 \@@_wrap_item:n }
- }
-\cs_new_protected:Npn \seq_set_from_clist:Nn #1#2
- {
- \__kernel_tl_set:Nx #1
- { \s_@@ \clist_map_function:nN {#2} \@@_wrap_item:n }
- }
-\cs_new_protected:Npn \seq_gset_from_clist:NN #1#2
- {
- \__kernel_tl_gset:Nx #1
- { \s_@@ \clist_map_function:NN #2 \@@_wrap_item:n }
- }
-\cs_new_protected:Npn \seq_gset_from_clist:Nn #1#2
- {
- \__kernel_tl_gset:Nx #1
- { \s_@@ \clist_map_function:nN {#2} \@@_wrap_item:n }
- }
-\cs_generate_variant:Nn \seq_set_from_clist:NN { Nc }
-\cs_generate_variant:Nn \seq_set_from_clist:NN { c , cc }
-\cs_generate_variant:Nn \seq_set_from_clist:Nn { c }
-\cs_generate_variant:Nn \seq_gset_from_clist:NN { Nc }
-\cs_generate_variant:Nn \seq_gset_from_clist:NN { c , cc }
-\cs_generate_variant:Nn \seq_gset_from_clist:Nn { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\seq_const_from_clist:Nn, \seq_const_from_clist:cn}
-% Almost identical to \cs{seq_set_from_clist:Nn}.
-% \begin{macrocode}
-\cs_new_protected:Npn \seq_const_from_clist:Nn #1#2
- {
- \tl_const:Ne #1
- { \s_@@ \clist_map_function:nN {#2} \@@_wrap_item:n }
- }
-\cs_generate_variant:Nn \seq_const_from_clist:Nn { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \seq_set_split:Nnn ,
-% \seq_set_split:NVn , \seq_set_split:NnV , \seq_set_split:NVV ,
-% \seq_set_split:Nne , \seq_set_split:Nee ,
-% \seq_set_split:Nnx , \seq_set_split:Nxx ,
-% \seq_gset_split:Nnn,
-% \seq_gset_split:NVn, \seq_gset_split:NnV, \seq_gset_split:NVV,
-% \seq_gset_split:Nne, \seq_gset_split:Nee,
-% \seq_gset_split:Nnx, \seq_gset_split:Nxx
-% }
-% \begin{macro}
-% {
-% \seq_set_split_keep_spaces:Nnn , \seq_set_split_keep_spaces:NnV ,
-% \seq_gset_split_keep_spaces:Nnn, \seq_gset_split_keep_spaces:NnV
-% }
-% \begin{macro}{\@@_set_split:NNnn}
-% \begin{macro}
-% {
-% \@@_set_split:Nw, \@@_set_split:w,
-% \@@_set_split_end:
-% }
-% When the separator is empty, everything is very simple, just map
-% \cs{@@_wrap_item:n} through the items of the last argument.
-% For non-trivial separators, the goal is to split a given token list
-% at the marker, strip spaces from each item, and remove one set of
-% outer braces if after removing leading and trailing
-% spaces the item is enclosed within braces. After
-% \cs{tl_replace_all:Nnn}, the token list \cs{l_@@_internal_a_tl}
-% is a repetition of the pattern
-% \cs{@@_set_split:Nw} \cs{prg_do_nothing:}
-% \meta{item with spaces} \cs{@@_set_split_end:}.
-% Then, \texttt{e}-expansion causes \cs{@@_set_split:Nw}
-% to trim spaces, and leaves its result as
-% \cs{@@_set_split:w} \meta{trimmed item}
-% \cs{@@_set_split_end:}. This is then converted
-% to the \pkg{l3seq} internal structure by another
-% \texttt{e}-expansion. In the first step, we insert
-% \cs{prg_do_nothing:} to avoid losing braces too early:
-% that would cause space trimming to act within those
-% lost braces. The second step is solely there to strip
-% braces which are outermost after space trimming.
-% \begin{macrocode}
-\cs_new_protected:Npn \seq_set_split:Nnn
- { \@@_set_split:NNNnn \__kernel_tl_set:Nx \tl_trim_spaces:n }
-\cs_new_protected:Npn \seq_gset_split:Nnn
- { \@@_set_split:NNNnn \__kernel_tl_gset:Nx \tl_trim_spaces:n }
-\cs_new_protected:Npn \seq_set_split_keep_spaces:Nnn
- { \@@_set_split:NNNnn \__kernel_tl_set:Nx \exp_not:n }
-\cs_new_protected:Npn \seq_gset_split_keep_spaces:Nnn
- { \@@_set_split:NNNnn \__kernel_tl_gset:Nx \exp_not:n }
-\cs_new_protected:Npn \@@_set_split:NNNnn #1#2#3#4#5
- {
- \tl_if_empty:nTF {#4}
- {
- \tl_set:Nn \l_@@_internal_a_tl
- { \tl_map_function:nN {#5} \@@_wrap_item:n }
- }
- {
- \tl_set:Nn \l_@@_internal_a_tl
- {
- \@@_set_split:Nw #2 \prg_do_nothing:
- #5
- \@@_set_split_end:
- }
- \tl_replace_all:Nnn \l_@@_internal_a_tl {#4}
- {
- \@@_set_split_end:
- \@@_set_split:Nw #2 \prg_do_nothing:
- }
- \__kernel_tl_set:Nx \l_@@_internal_a_tl { \l_@@_internal_a_tl }
- }
- #1 #3 { \s_@@ \l_@@_internal_a_tl }
- }
-\cs_new:Npn \@@_set_split:Nw #1#2 \@@_set_split_end:
- {
- \exp_not:N \@@_set_split:w
- \exp_args:No #1 {#2}
- \exp_not:N \@@_set_split_end:
- }
-\cs_new:Npn \@@_set_split:w #1 \@@_set_split_end:
- { \@@_wrap_item:n {#1} }
-\cs_generate_variant:Nn \seq_set_split:Nnn { NV , NnV , NVV , Nne , Nee }
-\cs_generate_variant:Nn \seq_set_split:Nnn { Nnx , Nxx }
-\cs_generate_variant:Nn \seq_gset_split:Nnn { NV , NnV , NVV , Nne , Nee }
-\cs_generate_variant:Nn \seq_gset_split:Nnn { Nnx , Nxx }
-\cs_generate_variant:Nn \seq_set_split_keep_spaces:Nnn { NnV }
-\cs_generate_variant:Nn \seq_gset_split_keep_spaces:Nnn { NnV }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\seq_set_filter:NNn, \seq_gset_filter:NNn}
-% \begin{macro}{\@@_set_filter:NNNn}
-% Similar to \cs{seq_map_inline:Nn}, without a
-% \cs{prg_break_point:} because the user's code
-% is performed within the evaluation of a boolean expression,
-% and skipping out of that would break horribly.
-% The \cs{@@_wrap_item:n} function inserts the relevant
-% \cs{@@_item:n} without expansion in the input stream,
-% hence in the \texttt{e}-expanding assignment.
-% \begin{macrocode}
-\cs_new_protected:Npn \seq_set_filter:NNn
- { \@@_set_filter:NNNn \__kernel_tl_set:Nx }
-\cs_new_protected:Npn \seq_gset_filter:NNn
- { \@@_set_filter:NNNn \__kernel_tl_gset:Nx }
-\cs_new_protected:Npn \@@_set_filter:NNNn #1#2#3#4
- {
- \@@_push_item_def:n { \bool_if:nT {#4} { \@@_wrap_item:n {##1} } }
- #1 #2 { #3 }
- \@@_pop_item_def:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\seq_concat:NNN, \seq_concat:ccc}
-% \UnitTested
-% \begin{macro}{\seq_gconcat:NNN, \seq_gconcat:ccc}
-% \UnitTested
-% When concatenating sequences, one must remove the leading \cs{s_@@}
-% of the second sequence. The result starts with \cs{s_@@} (of the
-% first sequence), which stops \texttt{f}-expansion.
-% \begin{macrocode}
-\cs_new_protected:Npn \seq_concat:NNN #1#2#3
- { \tl_set:Nf #1 { \exp_after:wN \use_i:nn \exp_after:wN #2 #3 } }
-\cs_new_protected:Npn \seq_gconcat:NNN #1#2#3
- { \tl_gset:Nf #1 { \exp_after:wN \use_i:nn \exp_after:wN #2 #3 } }
-\cs_generate_variant:Nn \seq_concat:NNN { ccc }
-\cs_generate_variant:Nn \seq_gconcat:NNN { ccc }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\seq_if_exist:N, \seq_if_exist:c}
-% Copies of the \texttt{cs} functions defined in \pkg{l3basics}.
-% \begin{macrocode}
-\prg_new_eq_conditional:NNn \seq_if_exist:N \cs_if_exist:N
- { TF , T , F , p }
-\prg_new_eq_conditional:NNn \seq_if_exist:c \cs_if_exist:c
- { TF , T , F , p }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Appending data to either end}
-%
-% \begin{macro}{
-% \seq_put_left:Nn, \seq_put_left:NV, \seq_put_left:Nv, \seq_put_left:Ne,
-% \seq_put_left:No, \seq_put_left:Nx,
-% \seq_put_left:cn, \seq_put_left:cV, \seq_put_left:cv,\seq_put_left:ce,
-% \seq_put_left:co, \seq_put_left:cx
-% }
-% \UnitTested
-% \begin{macro}{
-% \seq_gput_left:Nn, \seq_gput_left:NV, \seq_gput_left:Nv, \seq_gput_left:Ne,
-% \seq_gput_left:No, \seq_gput_left:Nx,
-% \seq_gput_left:cn, \seq_gput_left:cV, \seq_gput_left:cv, \seq_gput_left:ce,
-% \seq_gput_left:co, \seq_gput_left:cx
-% }
-% \begin{macro}[EXP]{\@@_put_left_aux:w}
-% When adding to the left of a sequence, remove \cs{s_@@}. This is
-% done by \cs{@@_put_left_aux:w}, which also stops
-% \texttt{f}-expansion.
-% \begin{macrocode}
-\cs_new_protected:Npn \seq_put_left:Nn #1#2
- {
- \__kernel_tl_set:Nx #1
- {
- \exp_not:n { \s_@@ \@@_item:n {#2} }
- \exp_not:f { \exp_after:wN \@@_put_left_aux:w #1 }
- }
- }
-\cs_new_protected:Npn \seq_gput_left:Nn #1#2
- {
- \__kernel_tl_gset:Nx #1
- {
- \exp_not:n { \s_@@ \@@_item:n {#2} }
- \exp_not:f { \exp_after:wN \@@_put_left_aux:w #1 }
- }
- }
-\cs_new:Npn \@@_put_left_aux:w \s_@@ { \exp_stop_f: }
-\cs_generate_variant:Nn \seq_put_left:Nn { NV , Nv , Ne , No , Nx }
-\cs_generate_variant:Nn \seq_put_left:Nn { c , cV , cv , ce , co ,cx }
-\cs_generate_variant:Nn \seq_gput_left:Nn { NV , Nv , Ne , No , Nx }
-\cs_generate_variant:Nn \seq_gput_left:Nn { c , cV , cv , ce , co , cx }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \seq_put_right:Nn, \seq_put_right:NV, \seq_put_right:Nv, \seq_put_right:Ne,
-% \seq_put_right:No, \seq_put_right:Nx,
-% \seq_put_right:cn, \seq_put_right:cV, \seq_put_right:cv, \seq_put_right:cx,
-% \seq_put_right:co, \seq_put_right:cx
-% }
-% \UnitTested
-% \begin{macro}
-% {
-% \seq_gput_right:Nn, \seq_gput_right:NV, \seq_gput_right:Nv, \seq_gput_right:Ne,
-% \seq_gput_right:No, \seq_gput_right:Nx,
-% \seq_gput_right:cn, \seq_gput_right:cV, \seq_gput_right:cv, \seq_gput_right:ce,
-% \seq_gput_right:co, \seq_gput_right:cx
-% }
-% Since there is no trailing marker, adding an item to the right of a
-% sequence simply means wrapping it in \cs{@@_item:n}.
-% \begin{macrocode}
-\cs_new_protected:Npn \seq_put_right:Nn #1#2
- { \tl_put_right:Nn #1 { \@@_item:n {#2} } }
-\cs_new_protected:Npn \seq_gput_right:Nn #1#2
- { \tl_gput_right:Nn #1 { \@@_item:n {#2} } }
-\cs_generate_variant:Nn \seq_put_right:Nn { NV , Nv , Ne , No , Nx }
-\cs_generate_variant:Nn \seq_put_right:Nn { c , cV , cv , ce , co , cx }
-\cs_generate_variant:Nn \seq_gput_right:Nn { NV , Nv , Ne , No , Nx }
-\cs_generate_variant:Nn \seq_gput_right:Nn { c , cV , cv , ce , co , cx }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Modifying sequences}
-%
-% \begin{macro}{\@@_wrap_item:n}
-% This function converts its argument to a proper sequence item
-% in an \texttt{e}-expansion context.
-% \begin{macrocode}
-\cs_new:Npn \@@_wrap_item:n #1 { \exp_not:n { \@@_item:n {#1} } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\l_@@_remove_seq}
-% An internal sequence for the removal routines.
-% \begin{macrocode}
-\seq_new:N \l_@@_remove_seq
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\seq_remove_duplicates:N, \seq_remove_duplicates:c}
-% \UnitTested
-% \begin{macro}{\seq_gremove_duplicates:N, \seq_gremove_duplicates:c}
-% \UnitTested
-% \begin{macro}{\@@_remove_duplicates:NN}
-% Removing duplicates means making a new list then copying it.
-% \begin{macrocode}
-\cs_new_protected:Npn \seq_remove_duplicates:N
- { \@@_remove_duplicates:NN \seq_set_eq:NN }
-\cs_new_protected:Npn \seq_gremove_duplicates:N
- { \@@_remove_duplicates:NN \seq_gset_eq:NN }
-\cs_new_protected:Npn \@@_remove_duplicates:NN #1#2
- {
- \seq_clear:N \l_@@_remove_seq
- \seq_map_inline:Nn #2
- {
- \seq_if_in:NnF \l_@@_remove_seq {##1}
- { \seq_put_right:Nn \l_@@_remove_seq {##1} }
- }
- #1 #2 \l_@@_remove_seq
- }
-\cs_generate_variant:Nn \seq_remove_duplicates:N { c }
-\cs_generate_variant:Nn \seq_gremove_duplicates:N { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \seq_remove_all:Nn, \seq_remove_all:NV, \seq_remove_all:Ne,
-% \seq_remove_all:Nx,
-% \seq_remove_all:cn, \seq_remove_all:cV, \seq_remove_all:ce,
-% \seq_remove_all:cx,
-% }
-% \UnitTested
-% \begin{macro}
-% {
-% \seq_gremove_all:Nn, \seq_gremove_all:NV, \seq_gremove_all:Ne,
-% \seq_gremove_all:Nx,
-% \seq_gremove_all:cn, \seq_gremove_all:cV, \seq_gremove_all:ce,
-% \seq_gremove_all:Nx
-% }
-% \UnitTested
-% \begin{macro}{\@@_remove_all_aux:NNn}
-% The idea of the code here is to avoid a relatively expensive addition of
-% items one at a time to an intermediate sequence.
-% The approach taken is therefore similar to
-% that in \cs{@@_pop_right:NNN}, using a \enquote{flexible}
-% \texttt{e}-type expansion to do most of the work. As \cs{tl_if_eq:nnT}
-% is not expandable, a two-part strategy is needed. First, the
-% \texttt{e}-type expansion uses \cs{str_if_eq:nnT} to find potential
-% matches. If one is found, the expansion is halted and the necessary
-% set up takes place to use the \cs{tl_if_eq:NNT} test. The \texttt{e}-type
-% is started again, including all of the items copied already. This
-% happens repeatedly until the entire sequence has been scanned. The code
-% is set up to avoid needing an intermediate scratch list: the lead-off
-% \texttt{e}-type expansion (|#1 #2 {#2}|) ensures that nothing is lost.
-% \begin{macrocode}
-\cs_new_protected:Npn \seq_remove_all:Nn
- { \@@_remove_all_aux:NNn \__kernel_tl_set:Nx }
-\cs_new_protected:Npn \seq_gremove_all:Nn
- { \@@_remove_all_aux:NNn \__kernel_tl_gset:Nx }
-\cs_new_protected:Npn \@@_remove_all_aux:NNn #1#2#3
- {
- \@@_push_item_def:n
- {
- \str_if_eq:nnT {##1} {#3}
- {
- \if_false: { \fi: }
- \tl_set:Nn \l_@@_internal_b_tl {##1}
- #1 #2
- { \if_false: } \fi:
- \exp_not:o {#2}
- \tl_if_eq:NNT \l_@@_internal_a_tl \l_@@_internal_b_tl
- { \use_none:nn }
- }
- \@@_wrap_item:n {##1}
- }
- \tl_set:Nn \l_@@_internal_a_tl {#3}
- #1 #2 {#2}
- \@@_pop_item_def:
- }
-\cs_generate_variant:Nn \seq_remove_all:Nn { NV , Ne , c , cV , ce }
-\cs_generate_variant:Nn \seq_remove_all:Nn { Nx , cx }
-\cs_generate_variant:Nn \seq_gremove_all:Nn { NV , Ne , c , cV , ce }
-\cs_generate_variant:Nn \seq_gremove_all:Nn { Nx , cx }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_int_eval:w}
-% Useful to more quickly go through items.
-% \begin{macrocode}
-\cs_new_eq:NN \@@_int_eval:w \tex_numexpr:D
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[noTF]{\seq_set_item:Nnn, \seq_set_item:cnn, \seq_gset_item:Nnn, \seq_gset_item:cnn}
-% \begin{macro}{\@@_set_item:NnnNN, \@@_set_item:nnNNNN, \@@_set_item_false:nnNNNN, \@@_set_item:nNnnNNNN}
-% \begin{macro}[rEXP]{\@@_set_item:wn, \@@_set_item_end:w}
-% The conditionals are distinguished from the |Nnn| versions by the
-% last argument \cs{use_ii:nn} vs \cs{use_i:nn}.
-% \begin{macrocode}
-\cs_new_protected:Npn \seq_set_item:Nnn #1#2#3
- { \@@_set_item:NnnNN #1 {#2} {#3} \__kernel_tl_set:Nx \use_i:nn }
-\cs_new_protected:Npn \seq_gset_item:Nnn #1#2#3
- { \@@_set_item:NnnNN #1 {#2} {#3} \__kernel_tl_gset:Nx \use_i:nn }
-\cs_generate_variant:Nn \seq_set_item:Nnn { c }
-\cs_generate_variant:Nn \seq_gset_item:Nnn { c }
-\prg_new_protected_conditional:Npnn \seq_set_item:Nnn #1#2#3 { TF , T , F }
- { \@@_set_item:NnnNN #1 {#2} {#3} \__kernel_tl_set:Nx \use_ii:nn }
-\prg_new_protected_conditional:Npnn \seq_gset_item:Nnn #1#2#3 { TF , T , F }
- { \@@_set_item:NnnNN #1 {#2} {#3} \__kernel_tl_gset:Nx \use_ii:nn }
-\prg_generate_conditional_variant:Nnn \seq_set_item:Nnn { c } { TF , T , F }
-\prg_generate_conditional_variant:Nnn \seq_gset_item:Nnn { c } { TF , T , F }
-% \end{macrocode}
-% Save the item to be stored and evaluate the position and the sequence
-% length only once. Then depending on the sign of the position, check
-% that it is not bigger than the length (in absolute value) nor zero.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_set_item:NnnNN #1#2#3
- {
- \tl_set:Nn \l_@@_internal_a_tl { \@@_item:n {#3} }
- \exp_args:Nff \@@_set_item:nnNNNN
- { \int_eval:n {#2} } { \seq_count:N #1 } #1 \use_none:nn
- }
-\cs_new_protected:Npn \@@_set_item:nnNNNN #1#2
- {
- \int_compare:nNnTF {#1} > 0
- { \int_compare:nNnF {#1} > {#2} { \@@_set_item:nNnnNNNN { #1 - 1 } } }
- {
- \int_compare:nNnF {#1} < {-#2}
- {
- \int_compare:nNnF {#1} = 0
- { \@@_set_item:nNnnNNNN { #2 + #1 } }
- }
- }
- \@@_set_item_false:nnNNNN {#1} {#2}
- }
-% \end{macrocode}
-% If the position is not ok, \cs{@@_set_item_false:nnNNNN} calls an
-% error or returns \texttt{false} (depending on the \cs{use_i:nn} vs
-% \cs{use_ii:nn} argument mentioned above).
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_set_item_false:nnNNNN #1#2#3#4#5#6
- {
- #6
- {
- \msg_error:nneee { seq } { item-too-large }
- { \token_to_str:N #3 } {#2} {#1}
- }
- { \prg_return_false: }
- }
-% \end{macrocode}
-% If the position is ok, \cs{@@_set_item:nNnnNNNN} makes the assignment
-% and returns \texttt{true} (in the case of conditionnals). Here |#1|
-% is an integer expression (position minus one), it needs to be
-% evaluated. The sequence |#5| starts with \cs{s_@@} (even if empty),
-% which stops the integer expression and is absorbed by it. The
-% \cs{if_meaning:w} test is slightly faster than an integer test (but
-% only works when testing against zero, hence the offset we chose in
-% the position). When we are done skipping items, insert the saved
-% item \cs{l_@@_internal_a_tl}. For |put| functions the last argument
-% of \cs{@@_set_item_end:w} is \cs{use_none:nn} and it absorbs the
-% item |#2| that we are removing: this is only useful for the |pop|
-% functions.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_set_item:nNnnNNNN #1#2#3#4#5#6#7#8
- {
- #7 #5
- {
- \s_@@
- \exp_after:wN \@@_set_item:wn
- \int_value:w \@@_int_eval:w #1
- #5 \s_@@_stop #6
- }
- #8 { } { \prg_return_true: }
- }
-\cs_new:Npn \@@_set_item:wn #1 \@@_item:n #2
- {
- \if_meaning:w 0 #1 \@@_set_item_end:w \fi:
- \exp_not:n { \@@_item:n {#2} }
- \exp_after:wN \@@_set_item:wn
- \int_value:w \@@_int_eval:w #1 - 1 \s_@@
- }
-\cs_new:Npn \@@_set_item_end:w #1 \exp_not:n #2 #3 \s_@@ #4 \s_@@_stop #5
- {
- #1
- \exp_not:o \l_@@_internal_a_tl
- \exp_not:n {#4}
- #5 #2
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {\seq_reverse:N, \seq_reverse:c, \seq_greverse:N, \seq_greverse:c}
-% \begin{macro}{\@@_reverse:NN}
-% \begin{macro}[EXP]{\@@_reverse_item:nwn}
-% Previously, \cs{seq_reverse:N} was coded by collecting the items
-% in reverse order after an \cs{exp_stop_f:} marker.
-% \begin{verbatim}
-% \cs_new_protected:Npn \seq_reverse:N #1
-% {
-% \cs_set_eq:NN \@@_item:n \@@_reverse_item:nw
-% \tl_set:Nf #2 { #2 \exp_stop_f: }
-% }
-% \cs_new:Npn \@@_reverse_item:nw #1 #2 \exp_stop_f:
-% {
-% #2 \exp_stop_f:
-% \@@_item:n {#1}
-% }
-% \end{verbatim}
-% At first, this seems optimal, since we can forget about each item
-% as soon as it is placed after \cs{exp_stop_f:}. Unfortunately,
-% \TeX{}'s usual tail recursion does not take place in this case:
-% since the following \cs{@@_reverse_item:nw} only reads
-% tokens until \cs{exp_stop_f:}, and never reads the
-% |\@@_item:n {#1}| left by the previous call, \TeX{} cannot
-% remove that previous call from the stack, and in particular
-% must retain the various macro parameters in memory, until the
-% end of the replacement text is reached. The stack is thus
-% only flushed after all the \cs{@@_reverse_item:nw} are
-% expanded. Keeping track of the arguments of all those calls
-% uses up a memory quadratic in the length of the sequence.
-% \TeX{} can then not cope with more than a few thousand items.
-%
-% Instead, we collect the items in the argument
-% of \cs{exp_not:n}. The previous calls are cleanly removed
-% from the stack, and the memory consumption becomes linear.
-% \begin{macrocode}
-\cs_new_protected:Npn \seq_reverse:N
- { \@@_reverse:NN \__kernel_tl_set:Nx }
-\cs_new_protected:Npn \seq_greverse:N
- { \@@_reverse:NN \__kernel_tl_gset:Nx }
-\cs_new_protected:Npn \@@_reverse:NN #1 #2
- {
- \cs_set_eq:NN \@@_tmp:w \@@_item:n
- \cs_set_eq:NN \@@_item:n \@@_reverse_item:nwn
- #1 #2 { #2 \exp_not:n { } }
- \cs_set_eq:NN \@@_item:n \@@_tmp:w
- }
-\cs_new:Npn \@@_reverse_item:nwn #1 #2 \exp_not:n #3
- {
- #2
- \exp_not:n { \@@_item:n {#1} #3 }
- }
-\cs_generate_variant:Nn \seq_reverse:N { c }
-\cs_generate_variant:Nn \seq_greverse:N { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\seq_sort:Nn, \seq_sort:cn, \seq_gsort:Nn, \seq_gsort:cn}
-% Implemented in \pkg{l3sort}.
-% \end{macro}
-%
-% \subsection{Sequence conditionals}
-%
-% \begin{macro}[pTF]{\seq_if_empty:N, \seq_if_empty:c}
-% \UnitTested
-% Similar to token lists, we compare with the empty sequence.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \seq_if_empty:N #1 { p , T , F , TF }
- {
- \if_meaning:w #1 \c_empty_seq
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-\prg_generate_conditional_variant:Nnn \seq_if_empty:N
- { c } { p , T , F , TF }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\seq_shuffle:N, \seq_shuffle:c, \seq_gshuffle:N, \seq_gshuffle:c}
-% \begin{macro}{\@@_shuffle:NN}
-% \begin{macro}{\@@_shuffle_item:n}
-% \begin{variable}{\g_@@_internal_seq}
-% We apply the Fisher--Yates shuffle, storing items in \tn{toks}
-% registers. We use the primitive \cs{tex_uniformdeviate:D} for
-% speed reasons. Its non-uniformity is of order its argument divided
-% by $2^{28}$, not too bad for small lists. For sequences with more
-% than $13$ elements there are more possible permutations than
-% possible seeds ($13!>2^{28}$) so the question of uniformity is
-% somewhat moot. The integer variables are declared in \pkg{l3int}:
-% load-order issues.
-% \begin{macrocode}
-\seq_new:N \g_@@_internal_seq
-\cs_new_protected:Npn \seq_shuffle:N { \@@_shuffle:NN \seq_set_eq:NN }
-\cs_new_protected:Npn \seq_gshuffle:N { \@@_shuffle:NN \seq_gset_eq:NN }
-\cs_new_protected:Npn \@@_shuffle:NN #1#2
- {
- \int_compare:nNnTF { \seq_count:N #2 } > \c_max_register_int
- {
- \msg_error:nne { seq } { shuffle-too-large }
- { \token_to_str:N #2 }
- }
- {
- \group_begin:
- \int_zero:N \l_@@_internal_a_int
- \@@_push_item_def:
- \cs_gset_eq:NN \@@_item:n \@@_shuffle_item:n
- #2
- \@@_pop_item_def:
- \seq_gclear:N \g_@@_internal_seq
- \int_step_inline:nn \l_@@_internal_a_int
- {
- \seq_gput_right:Ne \g_@@_internal_seq
- { \tex_the:D \tex_toks:D ##1 }
- }
- \group_end:
- #1 #2 \g_@@_internal_seq
- \seq_gclear:N \g_@@_internal_seq
- }
- }
-\cs_new_protected:Npn \@@_shuffle_item:n
- {
- \int_incr:N \l_@@_internal_a_int
- \int_set:Nn \l_@@_internal_b_int
- { 1 + \tex_uniformdeviate:D \l_@@_internal_a_int }
- \tex_toks:D \l_@@_internal_a_int
- = \tex_toks:D \l_@@_internal_b_int
- \tex_toks:D \l_@@_internal_b_int
- }
-\cs_generate_variant:Nn \seq_shuffle:N { c }
-\cs_generate_variant:Nn \seq_gshuffle:N { c }
-% \end{macrocode}
-% \end{variable}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[TF]
-% {
-% \seq_if_in:Nn, \seq_if_in:NV, \seq_if_in:Nv, \seq_if_in:Ne,
-% \seq_if_in:No, \seq_if_in:Nx,
-% \seq_if_in:cn, \seq_if_in:cV, \seq_if_in:cv,\seq_if_in:ce,
-% \seq_if_in:co, \seq_if_in:cx
-% }
-% \UnitTested
-% \begin{macro}{\@@_if_in:}
-% The approach here is to define \cs{@@_item:n} to compare its
-% argument with the test sequence. If the two items are equal, the
-% mapping is terminated and \cs{group_end:} \cs{prg_return_true:}
-% is inserted after skipping over the rest of the recursion. On the
-% other hand, if there is no match then the loop breaks, returning
-% \cs{prg_return_false:}.
-% Everything is inside a group so that \cs{@@_item:n} is preserved
-% in nested situations.
-% \begin{macrocode}
-\prg_new_protected_conditional:Npnn \seq_if_in:Nn #1#2
- { T , F , TF }
- {
- \group_begin:
- \tl_set:Nn \l_@@_internal_a_tl {#2}
- \cs_set_protected:Npn \@@_item:n ##1
- {
- \tl_set:Nn \l_@@_internal_b_tl {##1}
- \if_meaning:w \l_@@_internal_a_tl \l_@@_internal_b_tl
- \exp_after:wN \@@_if_in:
- \fi:
- }
- #1
- \group_end:
- \prg_return_false:
- \prg_break_point:
- }
-\cs_new:Npn \@@_if_in:
- { \prg_break:n { \group_end: \prg_return_true: } }
-\prg_generate_conditional_variant:Nnn \seq_if_in:Nn
- { NV , Nv , Ne , No , Nx , c , cV , cv , ce , co , cx } { T , F , TF }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Recovering data from sequences}
-%
-% \begin{macro}{\@@_pop:NNNN, \@@_pop_TF:NNNN}
-% The two \texttt{pop} functions share their emptiness tests. We also
-% use a common emptiness test for all branching \texttt{get} and
-% \texttt{pop} functions.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_pop:NNNN #1#2#3#4
- {
- \if_meaning:w #3 \c_empty_seq
- \tl_set:Nn #4 { \q_no_value }
- \else:
- #1#2#3#4
- \fi:
- }
-\cs_new_protected:Npn \@@_pop_TF:NNNN #1#2#3#4
- {
- \if_meaning:w #3 \c_empty_seq
- % \tl_set:Nn #4 { \q_no_value }
- \prg_return_false:
- \else:
- #1#2#3#4
- \prg_return_true:
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\seq_get_left:NN, \seq_get_left:cN}
-% \UnitTested
-% \begin{macro}{\@@_get_left:wnw}
-% Getting an item from the left of a sequence is pretty easy: just
-% trim off the first item after \cs{@@_item:n} at the start. We
-% append a \cs{q_no_value} item to cover the case of an empty sequence
-% \begin{macrocode}
-\cs_new_protected:Npn \seq_get_left:NN #1#2
- {
- \__kernel_tl_set:Nx #2
- {
- \exp_after:wN \@@_get_left:wnw
- #1 \@@_item:n { \q_no_value } \s_@@_stop
- }
- }
-\cs_new:Npn \@@_get_left:wnw #1 \@@_item:n #2#3 \s_@@_stop
- { \exp_not:n {#2} }
-\cs_generate_variant:Nn \seq_get_left:NN { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\seq_pop_left:NN, \seq_pop_left:cN}
-% \UnitTested
-% \begin{macro}{\seq_gpop_left:NN, \seq_gpop_left:cN}
-% \UnitTested
-% \begin{macro}{\@@_pop_left:NNN, \@@_pop_left:wnwNNN}
-% The approach to popping an item is pretty similar to that to get
-% an item, with the only difference being that the sequence itself has
-% to be redefined. This makes it more sensible to use an auxiliary
-% function for the local and global cases.
-% \begin{macrocode}
-\cs_new_protected:Npn \seq_pop_left:NN
- { \@@_pop:NNNN \@@_pop_left:NNN \tl_set:Nn }
-\cs_new_protected:Npn \seq_gpop_left:NN
- { \@@_pop:NNNN \@@_pop_left:NNN \tl_gset:Nn }
-\cs_new_protected:Npn \@@_pop_left:NNN #1#2#3
- { \exp_after:wN \@@_pop_left:wnwNNN #2 \s_@@_stop #1#2#3 }
-\cs_new_protected:Npn \@@_pop_left:wnwNNN
- #1 \@@_item:n #2#3 \s_@@_stop #4#5#6
- {
- #4 #5 { #1 #3 }
- \tl_set:Nn #6 {#2}
- }
-\cs_generate_variant:Nn \seq_pop_left:NN { c }
-\cs_generate_variant:Nn \seq_gpop_left:NN { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\seq_get_right:NN, \seq_get_right:cN}
-% \UnitTested
-% \begin{macro}[EXP]{\@@_get_right_loop:nw, \@@_get_right_end:NnN}
-% First remove \cs{s_@@} and prepend \cs{q_no_value}. The first
-% argument of \cs{@@_get_right_loop:nw} is the last item found, and
-% the second argument is empty until the end of the loop, where it is
-% code that applies \cs{exp_not:n} to the last item and ends the loop.
-% \begin{macrocode}
-\cs_new_protected:Npn \seq_get_right:NN #1#2
- {
- \__kernel_tl_set:Nx #2
- {
- \exp_after:wN \use_i_ii:nnn
- \exp_after:wN \@@_get_right_loop:nw
- \exp_after:wN \q_no_value
- #1
- \@@_get_right_end:NnN \@@_item:n
- }
- }
-\cs_new:Npn \@@_get_right_loop:nw #1#2 \@@_item:n
- {
- #2 \use_none:n {#1}
- \@@_get_right_loop:nw
- }
-\cs_new:Npn \@@_get_right_end:NnN #1#2#3 { \exp_not:n {#2} }
-\cs_generate_variant:Nn \seq_get_right:NN { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\seq_pop_right:NN, \seq_pop_right:cN}
-% \UnitTested
-% \begin{macro}{\seq_gpop_right:NN, \seq_gpop_right:cN}
-% \UnitTested
-% \begin{macro}{\@@_pop_right:NNN, \@@_pop_right_loop:nn}
-% The approach to popping from the right is a bit more involved, but does
-% use some of the same ideas as getting from the right. What is needed is a
-% \enquote{flexible length} way to set a token list variable. This is
-% supplied by the |{ \if_false: } \fi:| \ldots
-% |\if_false: { \fi: }| construct. Using an \texttt{e}-type
-% expansion and a \enquote{non-expanding} definition for \cs{@@_item:n},
-% the left-most $n - 1$ entries in a sequence of $n$ items are stored
-% back in the sequence. That needs a loop of unknown length, hence using the
-% strange \cs{if_false:} way of including braces. When the last item
-% of the sequence is reached, the closing brace for the assignment is
-% inserted, and |\tl_set:Nn #3| is inserted in front of the final
-% entry. This therefore does the pop assignment. One more iteration
-% is performed, with an empty argument and \cs{use_none:nn}, which
-% finally stops the loop.
-% \begin{macrocode}
-\cs_new_protected:Npn \seq_pop_right:NN
- { \@@_pop:NNNN \@@_pop_right:NNN \__kernel_tl_set:Nx }
-\cs_new_protected:Npn \seq_gpop_right:NN
- { \@@_pop:NNNN \@@_pop_right:NNN \__kernel_tl_gset:Nx }
-\cs_new_protected:Npn \@@_pop_right:NNN #1#2#3
- {
- \cs_set_eq:NN \@@_tmp:w \@@_item:n
- \cs_set_eq:NN \@@_item:n \scan_stop:
- #1 #2
- { \if_false: } \fi: \s_@@
- \exp_after:wN \use_i:nnn
- \exp_after:wN \@@_pop_right_loop:nn
- #2
- {
- \if_false: { \fi: }
- \__kernel_tl_set:Nx #3
- }
- { } \use_none:nn
- \cs_set_eq:NN \@@_item:n \@@_tmp:w
- }
-\cs_new:Npn \@@_pop_right_loop:nn #1#2
- {
- #2 { \exp_not:n {#1} }
- \@@_pop_right_loop:nn
- }
-\cs_generate_variant:Nn \seq_pop_right:NN { c }
-\cs_generate_variant:Nn \seq_gpop_right:NN { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[TF]{\seq_get_left:NN, \seq_get_left:cN}
-% \begin{macro}[TF]{\seq_get_right:NN, \seq_get_right:cN}
-% Getting from the left or right with a check on the results. The
-% first argument to \cs{@@_pop_TF:NNNN} is left unused.
-% \begin{macrocode}
-\prg_new_protected_conditional:Npnn \seq_get_left:NN #1#2 { T , F , TF }
- { \@@_pop_TF:NNNN \prg_do_nothing: \seq_get_left:NN #1#2 }
-\prg_new_protected_conditional:Npnn \seq_get_right:NN #1#2 { T , F , TF }
- { \@@_pop_TF:NNNN \prg_do_nothing: \seq_get_right:NN #1#2 }
-\prg_generate_conditional_variant:Nnn \seq_get_left:NN
- { c } { T , F , TF }
-\prg_generate_conditional_variant:Nnn \seq_get_right:NN
- { c } { T , F , TF }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[TF]{\seq_pop_left:NN, \seq_pop_left:cN}
-% \begin{macro}[TF]{\seq_gpop_left:NN, \seq_gpop_left:cN}
-% \begin{macro}[TF]{\seq_pop_right:NN, \seq_pop_right:cN}
-% \begin{macro}[TF]{\seq_gpop_right:NN, \seq_gpop_right:cN}
-% More or less the same for popping.
-% \begin{macrocode}
-\prg_new_protected_conditional:Npnn \seq_pop_left:NN #1#2
- { T , F , TF }
- { \@@_pop_TF:NNNN \@@_pop_left:NNN \tl_set:Nn #1 #2 }
-\prg_new_protected_conditional:Npnn \seq_gpop_left:NN #1#2
- { T , F , TF }
- { \@@_pop_TF:NNNN \@@_pop_left:NNN \tl_gset:Nn #1 #2 }
-\prg_new_protected_conditional:Npnn \seq_pop_right:NN #1#2
- { T , F , TF }
- { \@@_pop_TF:NNNN \@@_pop_right:NNN \__kernel_tl_set:Nx #1 #2 }
-\prg_new_protected_conditional:Npnn \seq_gpop_right:NN #1#2
- { T , F , TF }
- { \@@_pop_TF:NNNN \@@_pop_right:NNN \__kernel_tl_gset:Nx #1 #2 }
-\prg_generate_conditional_variant:Nnn \seq_pop_left:NN { c }
- { T , F , TF }
-\prg_generate_conditional_variant:Nnn \seq_gpop_left:NN { c }
- { T , F , TF }
-\prg_generate_conditional_variant:Nnn \seq_pop_right:NN { c }
- { T , F , TF }
-\prg_generate_conditional_variant:Nnn \seq_gpop_right:NN { c }
- { T , F , TF }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {\seq_item:Nn, \seq_item:NV, \seq_item:Ne, \seq_item:cn, \seq_item:cV, \seq_item:ce}
-% \begin{macro}{\@@_item:wNn, \@@_item:nN, \@@_item:nwn}
-% The idea here is to find the offset of the item from the left, then use
-% a loop to grab the correct item. If the resulting offset is too large,
-% then the argument delimited by \cs{@@_item:n} is \cs{prg_break:} instead
-% of being empty, terminating the loop and returning nothing at all.
-% \begin{macrocode}
-\cs_new:Npn \seq_item:Nn #1
- { \exp_after:wN \@@_item:wNn #1 \s_@@_stop #1 }
-\cs_new:Npn \@@_item:wNn \s_@@ #1 \s_@@_stop #2#3
- {
- \exp_args:Nf \@@_item:nwn
- { \exp_args:Nf \@@_item:nN { \int_eval:n {#3} } #2 }
- #1
- \prg_break: \@@_item:n { }
- \prg_break_point:
- }
-\cs_new:Npn \@@_item:nN #1#2
- {
- \int_compare:nNnTF {#1} < 0
- { \int_eval:n { \seq_count:N #2 + 1 + #1 } }
- {#1}
- }
-\cs_new:Npn \@@_item:nwn #1#2 \@@_item:n #3
- {
- #2
- \int_compare:nNnTF {#1} = 1
- { \prg_break:n { \exp_not:n {#3} } }
- { \exp_args:Nf \@@_item:nwn { \int_eval:n { #1 - 1 } } }
- }
-\cs_generate_variant:Nn \seq_item:Nn { NV , Ne , c , cV , ce }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\seq_rand_item:N, \seq_rand_item:c}
-% Importantly, \cs{seq_item:Nn} only evaluates its argument once.
-% \begin{macrocode}
-\cs_new:Npn \seq_rand_item:N #1
- {
- \seq_if_empty:NF #1
- { \seq_item:Nn #1 { \int_rand:nn { 1 } { \seq_count:N #1 } } }
- }
-\cs_generate_variant:Nn \seq_rand_item:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Mapping over sequences}
-%
-% \begin{macro}{\seq_map_break:}
-% \UnitTested
-% \begin{macro}{\seq_map_break:n}
-% \UnitTested
-% To break a function, the special token \cs{prg_break_point:Nn} is
-% used to find the end of the code. Any ending code is then inserted
-% before the return value of \cs{seq_map_break:n} is inserted.
-% \begin{macrocode}
-\cs_new:Npn \seq_map_break:
- { \prg_map_break:Nn \seq_map_break: { } }
-\cs_new:Npn \seq_map_break:n
- { \prg_map_break:Nn \seq_map_break: }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\seq_map_function:NN, \seq_map_function:cN}
-% \UnitTested
-% \begin{macro}[rEXP]{\@@_map_function:Nw}
-% The idea here is to apply the code of |#2| to each item in the
-% sequence without altering the definition of \cs{@@_item:n}. The
-% even-numbered arguments of \cs{@@_map_function:Nw} delimited by
-% \cs{@@_item:n} are almost always empty, except
-% at the end of the loop where it is \cs{prg_break:}. This allows to
-% break the loop without needing to do a (relatively-expensive) quark
-% test.
-% \begin{macrocode}
-\cs_new:Npn \seq_map_function:NN #1#2
- {
- \exp_after:wN \use_i_ii:nnn
- \exp_after:wN \@@_map_function:Nw
- \exp_after:wN #2
- #1
- \prg_break:
- \@@_item:n { } \@@_item:n { } \@@_item:n { } \@@_item:n { }
- \prg_break_point:
- \prg_break_point:Nn \seq_map_break: { }
- }
-\cs_new:Npn \@@_map_function:Nw #1
- #2 \@@_item:n #3
- #4 \@@_item:n #5
- #6 \@@_item:n #7
- #8 \@@_item:n #9
- {
- #2 #1 {#3}
- #4 #1 {#5}
- #6 #1 {#7}
- #8 #1 {#9}
- \@@_map_function:Nw #1
- }
-\cs_generate_variant:Nn \seq_map_function:NN { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_push_item_def:n, \@@_push_item_def:e}
-% \begin{macro}{\@@_push_item_def:}
-% \begin{macro}{\@@_pop_item_def:}
-% The definition of \cs{@@_item:n} needs to be saved and restored at
-% various points within the mapping and manipulation code. That is handled
-% here: as always, this approach uses global assignments.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_push_item_def:n
- {
- \@@_push_item_def:
- \cs_gset:Npn \@@_item:n ##1
- }
-\cs_new_protected:Npn \@@_push_item_def:e
- {
- \@@_push_item_def:
- \cs_gset:Npe \@@_item:n ##1
- }
-\cs_new_protected:Npn \@@_push_item_def:
- {
- \int_gincr:N \g__kernel_prg_map_int
- \cs_gset_eq:cN { @@_map_ \int_use:N \g__kernel_prg_map_int :w }
- \@@_item:n
- }
-\cs_new_protected:Npn \@@_pop_item_def:
- {
- \cs_gset_eq:Nc \@@_item:n
- { @@_map_ \int_use:N \g__kernel_prg_map_int :w }
- \int_gdecr:N \g__kernel_prg_map_int
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\seq_map_inline:Nn, \seq_map_inline:cn}
-% \UnitTested
-% The idea here is that \cs{@@_item:n} is already \enquote{applied} to
-% each item in a sequence, and so an in-line mapping is just a case of
-% redefining \cs{@@_item:n}.
-% \begin{macrocode}
-\cs_new_protected:Npn \seq_map_inline:Nn #1#2
- {
- \@@_push_item_def:n {#2}
- #1
- \prg_break_point:Nn \seq_map_break: { \@@_pop_item_def: }
- }
-\cs_generate_variant:Nn \seq_map_inline:Nn { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\seq_map_tokens:Nn, \seq_map_tokens:cn}
-% \begin{macro}{\@@_map_tokens:nw}
-% This is based on the function mapping but using the same tricks as
-% described for \cs{prop_map_tokens:Nn}. The idea is to remove the leading
-% \cs{s_@@} and apply the tokens such that they are safe with the
-% break points, hence the \cs{use:n}.
-% \begin{macrocode}
-\cs_new:Npn \seq_map_tokens:Nn #1#2
- {
- \exp_last_unbraced:Nno
- \use_i:nn { \@@_map_tokens:nw {#2} } #1
- \prg_break:
- \@@_item:n { } \@@_item:n { } \@@_item:n { } \@@_item:n { }
- \prg_break_point:
- \prg_break_point:Nn \seq_map_break: { }
- }
-\cs_generate_variant:Nn \seq_map_tokens:Nn { c }
-\cs_new:Npn \@@_map_tokens:nw #1
- #2 \@@_item:n #3
- #4 \@@_item:n #5
- #6 \@@_item:n #7
- #8 \@@_item:n #9
- {
- #2 \use:n {#1} {#3}
- #4 \use:n {#1} {#5}
- #6 \use:n {#1} {#7}
- #8 \use:n {#1} {#9}
- \@@_map_tokens:nw {#1}
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \seq_map_variable:NNn, \seq_map_variable:Ncn,
-% \seq_map_variable:cNn, \seq_map_variable:ccn
-% }
-% \UnitTested
-% This is just a specialised version of the in-line mapping function,
-% using an \texttt{e}-type expansion for the code set up so that the
-% number of |#| tokens required is as expected.
-% \begin{macrocode}
-\cs_new_protected:Npn \seq_map_variable:NNn #1#2#3
- {
- \@@_push_item_def:e
- {
- \tl_set:Nn \exp_not:N #2 {##1}
- \exp_not:n {#3}
- }
- #1
- \prg_break_point:Nn \seq_map_break: { \@@_pop_item_def: }
- }
-\cs_generate_variant:Nn \seq_map_variable:NNn { Nc }
-\cs_generate_variant:Nn \seq_map_variable:NNn { c , cc }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \seq_map_indexed_function:NN, \seq_map_indexed_inline:Nn,
-% \@@_map_indexed:nNN, \@@_map_indexed:Nw
-% }
-% Similar to \cs{seq_map_function:NN} but we keep track of the item
-% index as a |;|-delimited argument of \cs{@@_map_indexed:Nw}.
-% \begin{macrocode}
-\cs_new:Npn \seq_map_indexed_function:NN #1#2
- {
- \@@_map_indexed:NN #1#2
- \prg_break_point:Nn \seq_map_break: { }
- }
-\cs_new_protected:Npn \seq_map_indexed_inline:Nn #1#2
- {
- \int_gincr:N \g__kernel_prg_map_int
- \cs_gset_protected:cpn
- { @@_map_ \int_use:N \g__kernel_prg_map_int :w } ##1##2 {#2}
- \exp_args:NNc \@@_map_indexed:NN #1
- { @@_map_ \int_use:N \g__kernel_prg_map_int :w }
- \prg_break_point:Nn \seq_map_break:
- { \int_gdecr:N \g__kernel_prg_map_int }
- }
-\cs_new:Npn \@@_map_indexed:NN #1#2
- {
- \exp_after:wN \@@_map_indexed:Nw
- \exp_after:wN #2
- \int_value:w 1
- \exp_after:wN \use_i:nn
- \exp_after:wN ;
- #1
- \prg_break: \@@_item:n { } \prg_break_point:
- }
-\cs_new:Npn \@@_map_indexed:Nw #1#2 ; #3 \@@_item:n #4
- {
- #3
- #1 {#2} {#4}
- \exp_after:wN \@@_map_indexed:Nw
- \exp_after:wN #1
- \int_value:w \int_eval:w 1 + #2 ;
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \seq_map_pairwise_function:NNN, \seq_map_pairwise_function:NcN,
-% \seq_map_pairwise_function:cNN, \seq_map_pairwise_function:ccN
-% }
-% \begin{macro}
-% {
-% \@@_map_pairwise_function:wNN, \@@_map_pairwise_function:wNw,
-% \@@_map_pairwise_function:Nnnwnn
-% }
-% The idea is to first expand both sequences, adding the
-% usual |{ ? \prg_break: } { }| to the end of each one. This is
-% most conveniently done in two steps using an auxiliary function.
-% The mapping then throws away the first tokens of |#2| and |#5|,
-% which for items in both sequences are \cs{s_@@}
-% \cs{@@_item:n}. The function to be mapped are then be applied to
-% the two entries. When the code hits the end of one of the
-% sequences, the break material stops the entire loop and tidy up.
-% This avoids needing to find the count of the two sequences, or
-% worrying about which is longer.
-% \begin{macrocode}
-\cs_new:Npn \seq_map_pairwise_function:NNN #1#2#3
- { \exp_after:wN \@@_map_pairwise_function:wNN #2 \s_@@_stop #1 #3 }
-\cs_new:Npn \@@_map_pairwise_function:wNN \s_@@ #1 \s_@@_stop #2#3
- {
- \exp_after:wN \@@_map_pairwise_function:wNw #2 \s_@@_stop #3
- #1 { ? \prg_break: } { }
- \prg_break_point:
- }
-\cs_new:Npn \@@_map_pairwise_function:wNw \s_@@ #1 \s_@@_stop #2
- {
- \@@_map_pairwise_function:Nnnwnn #2
- #1 { ? \prg_break: } { }
- \s_@@_stop
- }
-\cs_new:Npn \@@_map_pairwise_function:Nnnwnn #1#2#3#4 \s_@@_stop #5#6
- {
- \use_none:n #2
- \use_none:n #5
- #1 {#3} {#6}
- \@@_map_pairwise_function:Nnnwnn #1 #4 \s_@@_stop
- }
-\cs_generate_variant:Nn \seq_map_pairwise_function:NNN { Nc , c , cc }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\seq_set_map_e:NNn, \seq_gset_map_e:NNn}
-% \begin{macro}{\@@_set_map_e:NNNn}
-% Very similar to \cs{seq_set_filter:NNn}. We could actually
-% merge the two within a single function, but it would have weird
-% semantics.
-% \begin{macrocode}
-\cs_new_protected:Npn \seq_set_map_e:NNn
- { \@@_set_map_e:NNNn \__kernel_tl_set:Nx }
-\cs_new_protected:Npn \seq_gset_map_e:NNn
- { \@@_set_map_e:NNNn \__kernel_tl_gset:Nx }
-\cs_new_protected:Npn \@@_set_map_e:NNNn #1#2#3#4
- {
- \@@_push_item_def:n { \exp_not:N \@@_item:n {#4} }
- #1 #2 { #3 }
- \@@_pop_item_def:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\seq_set_map:NNn, \seq_gset_map:NNn}
-% \begin{macro}{\@@_set_map:NNNn}
-% Similar to \cs{seq_set_map_e:NNn}, but prevents expansion of the
-% <inline function>.
-% \begin{macrocode}
-\cs_new_protected:Npn \seq_set_map:NNn
- { \@@_set_map:NNNn \__kernel_tl_set:Nx }
-\cs_new_protected:Npn \seq_gset_map:NNn
- { \@@_set_map:NNNn \__kernel_tl_gset:Nx }
-\cs_new_protected:Npn \@@_set_map:NNNn #1#2#3#4
- {
- \@@_push_item_def:n { \exp_not:n { \@@_item:n {#4} } }
- #1 #2 { #3 }
- \@@_pop_item_def:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\seq_count:N, \seq_count:c}
-% \begin{macro}{\@@_count:w, \@@_count_end:w}
-% Since counting the items in a sequence is quite common, we optimize
-% it by grabbing $8$~items at a time and correspondingly adding $8$ to
-% an integer expression. At the end of the loop, |#9| is
-% \cs{@@_count_end:w} instead of being empty. It removes |8+| and
-% instead places the number of \cs{@@_item:n} that \cs{@@_count:w}
-% grabbed before reaching the end of the sequence.
-% \begin{macrocode}
-\cs_new:Npn \seq_count:N #1
- {
- \int_eval:n
- {
- \exp_after:wN \use_i:nn
- \exp_after:wN \@@_count:w
- #1
- \@@_count_end:w \@@_item:n 7
- \@@_count_end:w \@@_item:n 6
- \@@_count_end:w \@@_item:n 5
- \@@_count_end:w \@@_item:n 4
- \@@_count_end:w \@@_item:n 3
- \@@_count_end:w \@@_item:n 2
- \@@_count_end:w \@@_item:n 1
- \@@_count_end:w \@@_item:n 0
- \prg_break_point:
- }
- }
-\cs_new:Npn \@@_count:w
- #1 \@@_item:n #2 \@@_item:n #3 \@@_item:n #4 \@@_item:n
- #5 \@@_item:n #6 \@@_item:n #7 \@@_item:n #8 #9 \@@_item:n
- { #9 8 + \@@_count:w }
-\cs_new:Npn \@@_count_end:w 8 + \@@_count:w #1#2 \prg_break_point: {#1}
-\cs_generate_variant:Nn \seq_count:N { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Using sequences}
-%
-% \begin{macro}[EXP]{\seq_use:Nnnn, \seq_use:cnnn}
-% \begin{macro}[EXP]
-% {\@@_use:NNnNnn, \@@_use_setup:w, \@@_use:nwwwwnwn, \@@_use:nwwn}
-% \begin{macro}[EXP]{\seq_use:Nn, \seq_use:cn}
-% See \cs{clist_use:Nnnn} for a general explanation. The main
-% difference is that we use \cs{@@_item:n} as a delimiter rather than
-% commas. We also need to add \cs{@@_item:n} at various places, and
-% \cs{s_@@}.
-% \begin{macrocode}
-\cs_new:Npn \seq_use:Nnnn #1#2#3#4
- {
- \seq_if_exist:NTF #1
- {
- \int_case:nnF { \seq_count:N #1 }
- {
- { 0 } { }
- { 1 } { \exp_after:wN \@@_use:NNnNnn #1 ? { } { } }
- { 2 } { \exp_after:wN \@@_use:NNnNnn #1 {#2} }
- }
- {
- \exp_after:wN \@@_use_setup:w #1 \@@_item:n
- \s_@@_mark { \@@_use:nwwwwnwn {#3} }
- \s_@@_mark { \@@_use:nwwn {#4} }
- \s_@@_stop { }
- }
- }
- {
- \msg_expandable_error:nnn
- { kernel } { bad-variable } {#1}
- }
- }
-\cs_generate_variant:Nn \seq_use:Nnnn { c }
-\cs_new:Npn \@@_use:NNnNnn #1#2#3#4#5#6 { \exp_not:n { #3 #6 #5 } }
-\cs_new:Npn \@@_use_setup:w \s_@@ { \@@_use:nwwwwnwn { } }
-\cs_new:Npn \@@_use:nwwwwnwn
- #1 \@@_item:n #2 \@@_item:n #3 \@@_item:n #4#5
- \s_@@_mark #6#7 \s_@@_stop #8
- {
- #6 \@@_item:n {#3} \@@_item:n {#4} #5
- \s_@@_mark {#6} #7 \s_@@_stop { #8 #1 #2 }
- }
-\cs_new:Npn \@@_use:nwwn #1 \@@_item:n #2 #3 \s_@@_stop #4
- { \exp_not:n { #4 #1 #2 } }
-\cs_new:Npn \seq_use:Nn #1#2
- { \seq_use:Nnnn #1 {#2} {#2} {#2} }
-\cs_generate_variant:Nn \seq_use:Nn { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Sequence stacks}
-%
-% The same functions as for sequences, but with the correct naming.
-%
-% \begin{macro}{
-% \seq_push:Nn, \seq_push:NV, \seq_push:Nv, \seq_push:Ne,
-% \seq_push:No, \seq_push:Nx,
-% \seq_push:cn, \seq_push:cV, \seq_push:cv, \seq_push:ce,
-% \seq_push:co, \seq_push:cx
-% }
-% \UnitTested
-% \begin{macro}{
-% \seq_gpush:Nn, \seq_gpush:NV, \seq_gpush:Nv, \seq_gpush:Ne,
-% \seq_gpush:No, \seq_gpush:Nx,
-% \seq_gpush:cn, \seq_gpush:cV, \seq_gpush:cv, \seq_gpush:ce,
-% \seq_gpush:co, \seq_gpush:cx
-% }
-% \UnitTested
-% Pushing to a sequence is the same as adding on the left.
-% \begin{macrocode}
-\cs_new_eq:NN \seq_push:Nn \seq_put_left:Nn
-\cs_generate_variant:Nn \seq_push:Nn { NV , Nv , Ne , c , cV , cv , ce }
-\cs_generate_variant:Nn \seq_push:Nn { No , Nx , co , cx }
-\cs_new_eq:NN \seq_gpush:Nn \seq_gput_left:Nn
-\cs_generate_variant:Nn \seq_gpush:Nn { NV , Nv , Ne , c , cV , cv , ce }
-\cs_generate_variant:Nn \seq_gpush:Nn { No , Nx , co , cx }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\seq_get:NN, \seq_get:cN}
-% \UnitTested
-% \begin{macro}{\seq_pop:NN, \seq_pop:cN}
-% \UnitTested
-% \begin{macro}{\seq_gpop:NN, \seq_gpop:cN}
-% \UnitTested
-% In most cases, getting items from the stack does not need to specify
-% that this is from the left. So alias are provided.
-% \begin{macrocode}
-\cs_new_eq:NN \seq_get:NN \seq_get_left:NN
-\cs_new_eq:NN \seq_get:cN \seq_get_left:cN
-\cs_new_eq:NN \seq_pop:NN \seq_pop_left:NN
-\cs_new_eq:NN \seq_pop:cN \seq_pop_left:cN
-\cs_new_eq:NN \seq_gpop:NN \seq_gpop_left:NN
-\cs_new_eq:NN \seq_gpop:cN \seq_gpop_left:cN
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[TF]{\seq_get:NN, \seq_get:cN}
-% \begin{macro}[TF]{\seq_pop:NN, \seq_pop:cN}
-% \begin{macro}[TF]{\seq_gpop:NN, \seq_gpop:cN}
-% More copies.
-% \begin{macrocode}
-\prg_new_eq_conditional:NNn \seq_get:NN \seq_get_left:NN { T , F , TF }
-\prg_new_eq_conditional:NNn \seq_get:cN \seq_get_left:cN { T , F , TF }
-\prg_new_eq_conditional:NNn \seq_pop:NN \seq_pop_left:NN { T , F , TF }
-\prg_new_eq_conditional:NNn \seq_pop:cN \seq_pop_left:cN { T , F , TF }
-\prg_new_eq_conditional:NNn \seq_gpop:NN \seq_gpop_left:NN { T , F , TF }
-\prg_new_eq_conditional:NNn \seq_gpop:cN \seq_gpop_left:cN { T , F , TF }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Viewing sequences}
-%
-% \begin{macro}{\seq_show:N, \seq_show:c, \seq_log:N, \seq_log:c, \@@_show:NN}
-% \begin{macro}[rEXP]{\@@_show_validate:nn}
-% \UnitTested
-% Apply the general \cs{__kernel_chk_tl_type:NnnT}.
-% \begin{macrocode}
-\cs_new_protected:Npn \seq_show:N { \@@_show:NN \msg_show:nneeee }
-\cs_generate_variant:Nn \seq_show:N { c }
-\cs_new_protected:Npn \seq_log:N { \@@_show:NN \msg_log:nneeee }
-\cs_generate_variant:Nn \seq_log:N { c }
-\cs_new_protected:Npn \@@_show:NN #1#2
- {
- \__kernel_chk_tl_type:NnnT #2 { seq }
- {
- \s_@@
- \exp_after:wN \use_i:nn \exp_after:wN \@@_show_validate:nn #2
- \q_recursion_tail \q_recursion_tail \q_recursion_stop
- }
- {
- #1 { seq } { show }
- { \token_to_str:N #2 }
- { \seq_map_function:NN #2 \msg_show_item:n }
- { } { }
- }
- }
-\cs_new:Npn \@@_show_validate:nn #1#2
- {
- \quark_if_recursion_tail_stop:n {#2}
- \@@_wrap_item:n {#2}
- \@@_show_validate:nn
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Scratch sequences}
-%
-% \begin{variable}{\l_tmpa_seq, \l_tmpb_seq, \g_tmpa_seq, \g_tmpb_seq}
-% Temporary comma list variables.
-% \begin{macrocode}
-\seq_new:N \l_tmpa_seq
-\seq_new:N \l_tmpb_seq
-\seq_new:N \g_tmpa_seq
-\seq_new:N \g_tmpb_seq
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3skip.dtx b/macros/latex/contrib/l3kernel/l3skip.dtx
deleted file mode 100644
index 1839c8a2e5..0000000000
--- a/macros/latex/contrib/l3kernel/l3skip.dtx
+++ /dev/null
@@ -1,2600 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3skip.dtx
-%
-% Copyright (C) 2004-2011 Frank Mittelbach, The LaTeX Project
-% (C) 2012-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3skip} module\\ Dimensions and skips^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \LaTeX3 provides two general length variables: \texttt{dim} and
-% \texttt{skip}. Lengths stored as \texttt{dim} variables have a fixed
-% length, whereas \texttt{skip} lengths have a rubber (stretch/shrink)
-% component. In addition, the \texttt{muskip} type is available for
-% use in math mode: this is a special form of \texttt{skip} where the
-% lengths involved are determined by the current math font (in
-% \texttt{mu)}. There are common features in the creation and setting of
-% length variables, but for clarity the functions are grouped by variable
-% type.
-%
-% Many functions take
-% \emph{dimension expressions} (\enquote{\meta{dim expr}}) or
-% \emph{skip expressions} (\enquote{\meta{skip expr}}) as arguments.
-%
-%
-% \section{Creating and initialising \texttt{dim} variables}
-%
-% \begin{function}{\dim_new:N, \dim_new:c}
-% \begin{syntax}
-% \cs{dim_new:N} \meta{dimension}
-% \end{syntax}
-% Creates a new \meta{dimension} or raises an error if the name is
-% already taken. The declaration is global. The \meta{dimension}
-% is initially equal to $0$\,pt.
-% \end{function}
-%
-% \begin{function}[added = 2012-03-05]{\dim_const:Nn, \dim_const:cn}
-% \begin{syntax}
-% \cs{dim_const:Nn} \meta{dimension} \Arg{dim expr}
-% \end{syntax}
-% Creates a new constant \meta{dimension} or raises an error if the
-% name is already taken. The value of the \meta{dimension} is set
-% globally to the \meta{dim expr}.
-% \end{function}
-%
-% \begin{function}{\dim_zero:N, \dim_zero:c, \dim_gzero:N, \dim_gzero:c}
-% \begin{syntax}
-% \cs{dim_zero:N} \meta{dimension}
-% \end{syntax}
-% Sets \meta{dimension} to $0$\,pt.
-% \end{function}
-%
-% \begin{function}[added = 2012-01-07]
-% {\dim_zero_new:N, \dim_zero_new:c, \dim_gzero_new:N, \dim_gzero_new:c}
-% \begin{syntax}
-% \cs{dim_zero_new:N} \meta{dimension}
-% \end{syntax}
-% Ensures that the \meta{dimension} exists globally by applying
-% \cs{dim_new:N} if necessary, then applies
-% \cs[index=dim_zero:N]{dim_(g)zero:N} to leave
-% the \meta{dimension} set to zero.
-% \end{function}
-%
-% \begin{function}[EXP, pTF, added=2012-03-03]{\dim_if_exist:N, \dim_if_exist:c}
-% \begin{syntax}
-% \cs{dim_if_exist_p:N} \meta{dimension}
-% \cs{dim_if_exist:NTF} \meta{dimension} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests whether the \meta{dimension} is currently defined. This does
-% not check that the \meta{dimension} really is a dimension variable.
-% \end{function}
-%
-% \section{Setting \texttt{dim} variables}
-%
-% \begin{function}[updated = 2011-10-22]
-% {\dim_add:Nn, \dim_add:cn, \dim_gadd:Nn, \dim_gadd:cn}
-% \begin{syntax}
-% \cs{dim_add:Nn} \meta{dimension} \Arg{dim expr}
-% \end{syntax}
-% Adds the result of the \meta{dim expr} to the current
-% content of the \meta{dimension}.
-% \end{function}
-%
-% \begin{function}[updated = 2011-10-22]
-% {\dim_set:Nn, \dim_set:cn, \dim_gset:Nn, \dim_gset:cn}
-% \begin{syntax}
-% \cs{dim_set:Nn} \meta{dimension} \Arg{dim expr}
-% \end{syntax}
-% Sets \meta{dimension} to the value of \meta{dim expr}, which
-% must evaluate to a length with units.
-% \end{function}
-%
-% \begin{function}
-% {
-% \dim_set_eq:NN, \dim_set_eq:cN, \dim_set_eq:Nc, \dim_set_eq:cc,
-% \dim_gset_eq:NN, \dim_gset_eq:cN, \dim_gset_eq:Nc, \dim_gset_eq:cc
-% }
-% \begin{syntax}
-% \cs{dim_set_eq:NN} \meta{dimension_1} \meta{dimension_2}
-% \end{syntax}
-% Sets the content of \meta{dimension_1} equal to that of
-% \meta{dimension_2}.
-% \end{function}
-%
-% \begin{function}[updated = 2011-10-22]
-% {\dim_sub:Nn, \dim_sub:cn, \dim_gsub:Nn, \dim_gsub:cn}
-% \begin{syntax}
-% \cs{dim_sub:Nn} \meta{dimension} \Arg{dim expr}
-% \end{syntax}
-% Subtracts the result of the \meta{dim expr} from the
-% current content of the \meta{dimension}.
-% \end{function}
-%
-% \section{Utilities for dimension calculations}
-%
-% \begin{function}[updated = 2012-09-26, EXP]{\dim_abs:n}
-% \begin{syntax}
-% \cs{dim_abs:n} \Arg{dim expr}
-% \end{syntax}
-% Converts the \meta{dim expr} to its absolute value, leaving the result
-% in the input stream as a \meta{dimension denotation}.
-% \end{function}
-%
-% \begin{function}[added = 2012-09-09, updated = 2012-09-26, EXP]
-% {\dim_max:nn, \dim_min:nn}
-% \begin{syntax}
-% \cs{dim_max:nn} \Arg{dim expr_1} \Arg{dim expr_2}
-% \cs{dim_min:nn} \Arg{dim expr_1} \Arg{dim expr_2}
-% \end{syntax}
-% Evaluates the two \meta{dim exprs} and leaves either the
-% maximum or minimum value in the input stream as appropriate, as a
-% \meta{dimension denotation}.
-% \end{function}
-%
-% \begin{function}[updated = 2011-10-22, rEXP]{\dim_ratio:nn}
-% \begin{syntax}
-% \cs{dim_ratio:nn} \Arg{dim expr_1} \Arg{dim expr_2}
-% \end{syntax}
-% Parses the two \meta{dim exprs} and converts the ratio of
-% the two to a form suitable for use inside a \meta{dim expr}.
-% This ratio is then left in the input stream, allowing syntax such as
-% \begin{verbatim}
-% \dim_set:Nn \l_my_dim
-% { 10 pt * \dim_ratio:nn { 5 pt } { 10 pt } }
-% \end{verbatim}
-% The output of \cs{dim_ratio:nn} on full expansion is a ratio expression
-% between two integers, with all distances converted to scaled points.
-% Thus
-% \begin{verbatim}
-% \tl_set:Ne \l_my_tl { \dim_ratio:nn { 5 pt } { 10 pt } }
-% \tl_show:N \l_my_tl
-% \end{verbatim}
-% displays |327680/655360| on the terminal.
-% \end{function}
-%
-% \section{Dimension expression conditionals}
-%
-% \begin{function}[EXP,pTF]{\dim_compare:nNn}
-% \begin{syntax}
-% \cs{dim_compare_p:nNn} \Arg{dim expr_1} \meta{relation} \Arg{dim expr_2} \\
-% \cs{dim_compare:nNnTF}
-% ~~\Arg{dim expr_1} \meta{relation} \Arg{dim expr_2}
-% ~~\Arg{true code} \Arg{false code}
-% \end{syntax}
-% This function first evaluates each of the \meta{dim exprs}
-% as described for \cs{dim_eval:n}. The two results are then
-% compared using the \meta{relation}:
-% \begin{center}
-% \begin{tabular}{ll}
-% Equal & |=| \\
-% Greater than & |>| \\
-% Less than & |<| \\
-% \end{tabular}
-% \end{center}
-% This function is less flexible than \cs{dim_compare:nTF} but around
-% $5$~times faster.
-% \end{function}
-%
-% \begin{function}[updated = 2013-01-13, EXP, pTF]{\dim_compare:n}
-% \begin{syntax}
-% \cs{dim_compare_p:n} \\
-% ~~\{ \\
-% ~~~~\meta{dim expr_1} \meta{relation_1} \\
-% ~~~~\ldots{} \\
-% ~~~~\meta{dim expr_N} \meta{relation_N} \\
-% ~~~~\meta{dim expr_{N+1}} \\
-% ~~\} \\
-% \cs{dim_compare:nTF}
-% ~~\{ \\
-% ~~~~\meta{dim expr_1} \meta{relation_1} \\
-% ~~~~\ldots{} \\
-% ~~~~\meta{dim expr_N} \meta{relation_N} \\
-% ~~~~\meta{dim expr_{N+1}} \\
-% ~~\} \\
-% ~~\Arg{true code} \Arg{false code}
-% \end{syntax}
-% This function evaluates the \meta{dim exprs} as
-% described for \cs{dim_eval:n} and compares consecutive result using
-% the corresponding \meta{relation}, namely it compares
-% \meta{dim expr_1} and \meta{dim expr_2} using the \meta{relation_1},
-% then \meta{dim expr_2} and \meta{dim expr_3} using the
-% \meta{relation_2}, until finally comparing \meta{dim expr_N} and
-% \meta{dim expr_{N+1}} using the \meta{relation_N}. The test yields
-% \texttt{true} if all comparisons are \texttt{true}. Each
-% \meta{dim expr} is evaluated only once, and the
-% evaluation is lazy, in the sense that if one comparison is
-% \texttt{false}, then no other \meta{dim expr} is
-% evaluated and no other comparison is performed. The
-% \meta{relations} can be any of the following:
-% \begin{center}
-% \begin{tabular}{ll}
-% Equal & |=| or |==| \\
-% Greater than or equal to & |>=| \\
-% Greater than & |>| \\
-% Less than or equal to & |<=| \\
-% Less than & |<| \\
-% Not equal & |!=| \\
-% \end{tabular}
-% \end{center}
-% This function is more flexible than \cs{dim_compare:nNnTF} but
-% around $5$~times slower.
-% \end{function}
-%
-% \begin{function}[added = 2013-07-24, EXP, noTF]{\dim_case:nn}
-% \begin{syntax}
-% \cs{dim_case:nnTF} \Arg{test dim expr} \\
-% ~~|{| \\
-% ~~~~\Arg{dim expr case_1} \Arg{code case_1} \\
-% ~~~~\Arg{dim expr case_2} \Arg{code case_2} \\
-% ~~~~\ldots \\
-% ~~~~\Arg{dim expr case_n} \Arg{code case_n} \\
-% ~~|}| \\
-% ~~\Arg{true code}
-% ~~\Arg{false code}
-% \end{syntax}
-% This function evaluates the \meta{test dim expr} and
-% compares this in turn to each of the
-% \meta{dim expr cases}. If the two are equal then the
-% associated \meta{code} is left in the input stream
-% and other cases are discarded. If any of the
-% cases are matched, the \meta{true code} is also inserted into the
-% input stream (after the code for the appropriate case), while if none
-% match then the \meta{false code} is inserted. The function
-% \cs{dim_case:nn}, which does nothing if there is no match, is also
-% available. For example
-% \begin{verbatim}
-% \dim_set:Nn \l_tmpa_dim { 5 pt }
-% \dim_case:nnF
-% { 2 \l_tmpa_dim }
-% {
-% { 5 pt } { Small }
-% { 4 pt + 6 pt } { Medium }
-% { - 10 pt } { Negative }
-% }
-% { No idea! }
-% \end{verbatim}
-% leaves \enquote{\texttt{Medium}} in the input stream.
-% \end{function}
-%
-% \section{Dimension expression loops}
-%
-% \begin{function}[rEXP]{\dim_do_until:nNnn}
-% \begin{syntax}
-% \cs{dim_do_until:nNnn} \Arg{dim expr_1} \meta{relation} \Arg{dim expr_2} \Arg{code}
-% \end{syntax}
-% Places the \meta{code} in the input stream for \TeX{} to process, and
-% then evaluates the relationship between the two
-% \meta{dim exprs} as described for \cs{dim_compare:nNnTF}.
-% If the test is \texttt{false} then the \meta{code} is inserted
-% into the input stream again and a loop occurs until the
-% \meta{relation} is \texttt{true}.
-% \end{function}
-%
-% \begin{function}[rEXP]{\dim_do_while:nNnn}
-% \begin{syntax}
-% \cs{dim_do_while:nNnn} \Arg{dim expr_1} \meta{relation} \Arg{dim expr_2} \Arg{code}
-% \end{syntax}
-% Places the \meta{code} in the input stream for \TeX{} to process, and
-% then evaluates the relationship between the two
-% \meta{dim exprs} as described for \cs{dim_compare:nNnTF}.
-% If the test is \texttt{true} then the \meta{code} is inserted
-% into the input stream again and a loop occurs until the
-% \meta{relation} is \texttt{false}.
-% \end{function}
-%
-% \begin{function}[rEXP]{\dim_until_do:nNnn}
-% \begin{syntax}
-% \cs{dim_until_do:nNnn} \Arg{dim expr_1} \meta{relation} \Arg{dim expr_2} \Arg{code}
-% \end{syntax}
-% Evaluates the relationship between the two \meta{dim exprs}
-% as described for \cs{dim_compare:nNnTF}, and then places the
-% \meta{code} in the input stream if the \meta{relation} is
-% \texttt{false}. After the \meta{code} has been processed by \TeX{} the
-% test is repeated, and a loop occurs until the test is
-% \texttt{true}.
-% \end{function}
-%
-% \begin{function}[rEXP]{\dim_while_do:nNnn}
-% \begin{syntax}
-% \cs{dim_while_do:nNnn} \Arg{dim expr_1} \meta{relation} \Arg{dim expr_2} \Arg{code}
-% \end{syntax}
-% Evaluates the relationship between the two \meta{dim exprs}
-% as described for \cs{dim_compare:nNnTF}, and then places the
-% \meta{code} in the input stream if the \meta{relation} is
-% \texttt{true}. After the \meta{code} has been processed by \TeX{} the
-% test is repeated, and a loop occurs until the test is
-% \texttt{false}.
-% \end{function}
-%
-% \begin{function}[updated = 2013-01-13, rEXP]{\dim_do_until:nn}
-% \begin{syntax}
-% \cs{dim_do_until:nn} \Arg{dimension relation} \Arg{code}
-% \end{syntax}
-% Places the \meta{code} in the input stream for \TeX{} to process, and
-% then evaluates the \meta{dimension relation}
-% as described for \cs{dim_compare:nTF}.
-% If the test is \texttt{false} then the \meta{code} is inserted
-% into the input stream again and a loop occurs until the
-% \meta{relation} is \texttt{true}.
-% \end{function}
-%
-% \begin{function}[updated = 2013-01-13, rEXP]{\dim_do_while:nn}
-% \begin{syntax}
-% \cs{dim_do_while:nn} \Arg{dimension relation} \Arg{code}
-% \end{syntax}
-% Places the \meta{code} in the input stream for \TeX{} to process, and
-% then evaluates the \meta{dimension relation}
-% as described for \cs{dim_compare:nTF}.
-% If the test is \texttt{true} then the \meta{code} is inserted
-% into the input stream again and a loop occurs until the
-% \meta{relation} is \texttt{false}.
-% \end{function}
-%
-% \begin{function}[updated = 2013-01-13, rEXP]{\dim_until_do:nn}
-% \begin{syntax}
-% \cs{dim_until_do:nn} \Arg{dimension relation} \Arg{code}
-% \end{syntax}
-% Evaluates the \meta{dimension relation}
-% as described for \cs{dim_compare:nTF}, and then places the
-% \meta{code} in the input stream if the \meta{relation} is
-% \texttt{false}. After the \meta{code} has been processed by \TeX{} the
-% test is repeated, and a loop occurs until the test is
-% \texttt{true}.
-% \end{function}
-%
-% \begin{function}[updated = 2013-01-13, rEXP]{\dim_while_do:nn}
-% \begin{syntax}
-% \cs{dim_while_do:nn} \Arg{dimension relation} \Arg{code}
-% \end{syntax}
-% Evaluates the \meta{dimension relation}
-% as described for \cs{dim_compare:nTF}, and then places the
-% \meta{code} in the input stream if the \meta{relation} is
-% \texttt{true}. After the \meta{code} has been processed by \TeX{} the
-% test is repeated, and a loop occurs until the test is
-% \texttt{false}.
-% \end{function}
-%
-% \section{Dimension step functions}
-%
-% \begin{function}[added = 2018-02-18, rEXP]
-% {\dim_step_function:nnnN}
-% \begin{syntax}
-% \cs{dim_step_function:nnnN} \Arg{initial value} \Arg{step} \Arg{final value} \meta{function}
-% \end{syntax}
-% This function first evaluates the \meta{initial value}, \meta{step}
-% and \meta{final value}, all of which should be dimension expressions.
-% The \meta{function} is then placed in front of each \meta{value}
-% from the \meta{initial value} to the \meta{final value} in turn
-% (using \meta{step} between each \meta{value}). The \meta{step} must
-% be non-zero. If the \meta{step} is positive, the loop stops when
-% the \meta{value} becomes larger than the \meta{final value}. If the
-% \meta{step} is negative, the loop stops when the \meta{value}
-% becomes smaller than the \meta{final value}. The \meta{function}
-% should absorb one argument.
-% \end{function}
-%
-% \begin{function}[added = 2018-02-18]
-% {\dim_step_inline:nnnn}
-% \begin{syntax}
-% \cs{dim_step_inline:nnnn} \Arg{initial value} \Arg{step} \Arg{final value} \Arg{code}
-% \end{syntax}
-% This function first evaluates the \meta{initial value}, \meta{step}
-% and \meta{final value}, all of which should be dimension expressions.
-% Then for each \meta{value} from the \meta{initial value} to the
-% \meta{final value} in turn (using \meta{step} between each
-% \meta{value}), the \meta{code} is inserted into the input stream
-% with |#1| replaced by the current \meta{value}. Thus the
-% \meta{code} should define a function of one argument~(|#1|).
-% \end{function}
-%
-% \begin{function}[added = 2018-02-18]
-% {\dim_step_variable:nnnNn}
-% \begin{syntax}
-% \cs{dim_step_variable:nnnNn} \\
-% ~~\Arg{initial value} \Arg{step} \Arg{final value} \meta{tl~var} \Arg{code}
-% \end{syntax}
-% This function first evaluates the \meta{initial value}, \meta{step}
-% and \meta{final value}, all of which should be dimension expressions.
-% Then for each \meta{value} from the \meta{initial value} to the
-% \meta{final value} in turn (using \meta{step} between each
-% \meta{value}), the \meta{code} is inserted into the input stream,
-% with the \meta{tl~var} defined as the current \meta{value}. Thus
-% the \meta{code} should make use of the \meta{tl~var}.
-% \end{function}
-%
-% \section{Using \texttt{dim} expressions and variables}
-%
-% \begin{function}[updated = 2011-10-22, EXP]{\dim_eval:n}
-% \begin{syntax}
-% \cs{dim_eval:n} \Arg{dim expr}
-% \end{syntax}
-% Evaluates the \meta{dim expr}, expanding any
-% dimensions and token list variables within the \meta{expression}
-% to their content (without requiring \cs{dim_use:N}/\cs{tl_use:N})
-% and applying the standard mathematical rules. The result of the
-% calculation is left in the input stream as a
-% \meta{dimension denotation} after two expansions. This is
-% expressed in points (\texttt{pt}), and requires suitable
-% termination if used in a \TeX{}-style assignment as it is \emph{not}
-% an \meta{internal dimension}.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2018-11-03]{\dim_sign:n}
-% \begin{syntax}
-% \cs{dim_sign:n} \Arg{dim expr}
-% \end{syntax}
-% Evaluates the \meta{dim expr} then leaves $1$ or $0$ or $-1$ in the
-% input stream according to the sign of the result.
-% \end{function}
-%
-% \begin{function}[EXP]{\dim_use:N, \dim_use:c}
-% \begin{syntax}
-% \cs{dim_use:N} \meta{dimension}
-% \end{syntax}
-% Recovers the content of a \meta{dimension} and places it directly
-% in the input stream. An error is raised if the variable does
-% not exist or if it is invalid. Can be omitted in places where a
-% \meta{dimension} is required (such as in the argument of
-% \cs{dim_eval:n}).
-% \begin{texnote}
-% \cs{dim_use:N} is the \TeX{} primitive \tn{the}: this is one of
-% several \LaTeX3 names for this primitive.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[added = 2014-07-15, EXP]{\dim_to_decimal:n}
-% \begin{syntax}
-% \cs{dim_to_decimal:n} \Arg{dim expr}
-% \end{syntax}
-% Evaluates the \meta{dim expr}, and leaves the result,
-% expressed in points (\texttt{pt}) in the input stream, with \emph{no
-% units}. The result is rounded by \TeX{} to at most five decimal
-% places. If the decimal part of the result is zero, it is omitted,
-% together with the decimal marker.
-%
-% For example
-% \begin{verbatim}
-% \dim_to_decimal:n { 1bp }
-% \end{verbatim}
-% leaves |1.00374| in the input stream, \emph{i.e.}~the magnitude of
-% one \enquote{big point} when converted to (\TeX{}) points.
-% \end{function}
-%
-% \begin{function}[added = 2014-07-15, updated = 2023-05-20, EXP]
-% {\dim_to_decimal_in_bp:n}
-% \begin{syntax}
-% \cs{dim_to_decimal_in_bp:n} \Arg{dim expr}
-% \end{syntax}
-% Evaluates the \meta{dim expr}, and leaves the result,
-% expressed in big points (\texttt{bp}) in the input stream, with \emph{no
-% units}. The result is rounded by \TeX{} to at most five decimal
-% places. If the decimal part of the result is zero, it is omitted,
-% together with the decimal marker.
-%
-% For example
-% \begin{verbatim}
-% \dim_to_decimal_in_bp:n { 1pt }
-% \end{verbatim}
-% leaves |0.99628| in the input stream, \emph{i.e.}~the magnitude of
-% one (\TeX{}) point when converted to big points.
-% \begin{texnote}
-% The implementation of this function is re-entrant: the result of
-% \begin{verbatim}
-% \dim_compare:nNnTF
-% { <x>bp } =
-% { \dim_to_decimal_in_bp:n { <x>bp } bp }
-% \end{verbatim}
-% will be logically \texttt{true}. The decimal representations may
-% differ provided they produce the same \TeX{} dimension.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[added = 2023-05-20, EXP]
-% {
-% \dim_to_decimal_in_cc:n ,
-% \dim_to_decimal_in_cm:n ,
-% \dim_to_decimal_in_dd:n ,
-% \dim_to_decimal_in_in:n ,
-% \dim_to_decimal_in_mm:n ,
-% \dim_to_decimal_in_pc:n
-% }
-% \begin{syntax}
-% \cs{dim_to_decimal_in_cm:n} \Arg{dim expr}
-% \end{syntax}
-% Evaluates the \meta{dim expr}, and leaves the result,
-% expressed with the appropriate scaling in the input stream, with
-% \emph{no units}. If the decimal part of the result is zero, it is omitted,
-% together with the decimal marker. The precisions of the result is limited
-% to a maximum of five decimal places with trailing zeros omitted.
-%
-% The maximum \TeX{} allowable dimension value (available as
-% \tn{maxdimen} in plain \TeX{} and \LaTeX{} and \cs{c_max_dim} in
-% \pkg{expl3}) can only be expressed exactly in the units
-% \texttt{pt}, \texttt{bp} and \texttt{sp}. The maximum allowable
-% input values to five decimal places are\\
-% \begin{center}
-% \begin{tabular}{@{}>{$}r<{$}@{\,}l@{}}
-% 1276.00215 & cc \\
-% 575.83174 & cm \\
-% 15312.02584 & dd \\
-% 226.70540 & in \\
-% 5758.31742 & mm \\
-% 1365.33333 & pc \\
-% \end{tabular}
-% \end{center}
-% (Note that these are not all equal, but rather any larger value will overflow
-% due to the way \TeX{} converts to \texttt{sp}.)
-% Values given to five decimal places larger that these will result in \TeX{}
-% errors; the behavior if additional decimal places are given depends on the
-% \TeX{} internals and thus larger values are \emph{not} supported by
-% \pkg{expl3}.
-% \begin{texnote}
-% The implementation of these functions is re-entrant: the result of
-% \begin{verbatim}
-% \dim_compare:nNnTF
-% { <x><unit> } =
-% { \dim_to_decimal_in_<unit>:n { <x><unit> } <unit> }
-% \end{verbatim}
-% will be logically \texttt{true}. The decimal representations may
-% differ provided they produce the same \TeX{} dimension.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[added = 2015-05-18, EXP]{\dim_to_decimal_in_sp:n}
-% \begin{syntax}
-% \cs{dim_to_decimal_in_sp:n} \Arg{dim expr}
-% \end{syntax}
-% Evaluates the \meta{dim expr}, and leaves the result,
-% expressed in scaled points (\texttt{sp}) in the input stream, with \emph{no
-% units}. The result is necessarily an integer.
-% \end{function}
-%
-% \begin{function}[added = 2014-07-15, updated = 2023-05-20, EXP]
-% {\dim_to_decimal_in_unit:nn}
-% \begin{syntax}
-% \cs{dim_to_decimal_in_unit:nn} \Arg{dim expr_1} \Arg{dim expr_2}
-% \end{syntax}
-% Evaluates the \meta{dim exprs}, and leaves the value of
-% \meta{dim expr_1}, expressed in a unit given by \meta{dim expr_2}, in
-% the input stream. If the decimal part of the result
-% is zero, it is omitted, together with the decimal marker.
-% The precisions of the result is limited
-% to a maximum of five decimal places with trailing zeros omitted.
-%
-% For example
-% \begin{verbatim}
-% \dim_to_decimal_in_unit:nn { 1bp } { 1mm }
-% \end{verbatim}
-% leaves |0.35278| in the input stream, \emph{i.e.}~the magnitude of
-% one big point when expressed in millimetres. The conversions do
-% \emph{not} guarantee that \TeX{} would yield identical results
-% for the direct input in an equality test, thus for instance
-% \begin{verbatim}
-% \dim_compare:nNnTF
-% { 1bp } =
-% { \dim_to_decimal_in_unit:nn { 1bp } { 1mm } mm }
-% \end{verbatim}
-% will take the \texttt{false} branch.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2012-05-08, tested = m3fp-convert002]
-% {\dim_to_fp:n}
-% \begin{syntax}
-% \cs{dim_to_fp:n} \Arg{dim expr}
-% \end{syntax}
-% Expands to an internal floating point number equal to the value of
-% the \meta{dim expr} in \texttt{pt}. Since dimension expressions are
-% evaluated much faster than their floating point equivalent,
-% \cs{dim_to_fp:n} can be used to speed up parts of a computation
-% where a low precision and a smaller range are acceptable.
-% \end{function}
-%
-% \section{Viewing \texttt{dim} variables}
-%
-% \begin{function}{\dim_show:N, \dim_show:c}
-% \begin{syntax}
-% \cs{dim_show:N} \meta{dimension}
-% \end{syntax}
-% Displays the value of the \meta{dimension} on the terminal.
-% \end{function}
-%
-% \begin{function}[added = 2011-11-22, updated = 2015-08-07]{\dim_show:n}
-% \begin{syntax}
-% \cs{dim_show:n} \Arg{dim expr}
-% \end{syntax}
-% Displays the result of evaluating the \meta{dim expr}
-% on the terminal.
-% \end{function}
-%
-% \begin{function}[added = 2014-08-22, updated = 2015-08-03]{\dim_log:N, \dim_log:c}
-% \begin{syntax}
-% \cs{dim_log:N} \meta{dimension}
-% \end{syntax}
-% Writes the value of the \meta{dimension} in the log file.
-% \end{function}
-%
-% \begin{function}[added = 2014-08-22, updated = 2015-08-07]{\dim_log:n}
-% \begin{syntax}
-% \cs{dim_log:n} \Arg{dim expr}
-% \end{syntax}
-% Writes the result of evaluating the \meta{dim expr}
-% in the log file.
-% \end{function}
-%
-% \section{Constant dimensions}
-%
-% \begin{variable}{\c_max_dim}
-% The maximum value that can be stored as a dimension. This can also
-% be used as a component of a skip.
-% \end{variable}
-%
-% \begin{variable}{\c_zero_dim}
-% A zero length as a dimension. This can also be used as a component
-% of a skip.
-% \end{variable}
-%
-% \section{Scratch dimensions}
-%
-% \begin{variable}{\l_tmpa_dim, \l_tmpb_dim}
-% Scratch dimension for local assignment. These are never used by
-% the kernel code, and so are safe for use with any \LaTeX3-defined
-% function. However, they may be overwritten by other non-kernel
-% code and so should only be used for short-term storage.
-% \end{variable}
-%
-% \begin{variable}{\g_tmpa_dim, \g_tmpb_dim}
-% Scratch dimension for global assignment. These are never used by
-% the kernel code, and so are safe for use with any \LaTeX3-defined
-% function. However, they may be overwritten by other non-kernel
-% code and so should only be used for short-term storage.
-% \end{variable}
-%
-% \section{Creating and initialising \texttt{skip} variables}
-%
-% \begin{function}{\skip_new:N, \skip_new:c}
-% \begin{syntax}
-% \cs{skip_new:N} \meta{skip}
-% \end{syntax}
-% Creates a new \meta{skip} or raises an error if the name is
-% already taken. The declaration is global. The \meta{skip}
-% is initially equal to $0$\,pt.
-% \end{function}
-%
-% \begin{function}[added = 2012-03-05]{\skip_const:Nn, \skip_const:cn}
-% \begin{syntax}
-% \cs{skip_const:Nn} \meta{skip} \Arg{skip expr}
-% \end{syntax}
-% Creates a new constant \meta{skip} or raises an error if the
-% name is already taken. The value of the \meta{skip} is set
-% globally to the \meta{skip expr}.
-% \end{function}
-%
-% \begin{function}{\skip_zero:N, \skip_zero:c, \skip_gzero:N, \skip_gzero:c}
-% \begin{syntax}
-% \cs{skip_zero:N} \meta{skip}
-% \end{syntax}
-% Sets \meta{skip} to $0$\,pt.
-% \end{function}
-%
-% \begin{function}[added = 2012-01-07]
-% {\skip_zero_new:N, \skip_zero_new:c, \skip_gzero_new:N, \skip_gzero_new:c}
-% \begin{syntax}
-% \cs{skip_zero_new:N} \meta{skip}
-% \end{syntax}
-% Ensures that the \meta{skip} exists globally by applying
-% \cs{skip_new:N} if necessary, then applies
-% \cs[index=skip_zero:N]{skip_(g)zero:N} to leave
-% the \meta{skip} set to zero.
-% \end{function}
-%
-% \begin{function}[EXP, pTF, added=2012-03-03]
-% {\skip_if_exist:N, \skip_if_exist:c}
-% \begin{syntax}
-% \cs{skip_if_exist_p:N} \meta{skip}
-% \cs{skip_if_exist:NTF} \meta{skip} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests whether the \meta{skip} is currently defined. This does not
-% check that the \meta{skip} really is a skip variable.
-% \end{function}
-%
-% \section{Setting \texttt{skip} variables}
-%
-% \begin{function}[updated = 2011-10-22]
-% {\skip_add:Nn, \skip_add:cn, \skip_gadd:Nn, \skip_gadd:cn}
-% \begin{syntax}
-% \cs{skip_add:Nn} \meta{skip} \Arg{skip expr}
-% \end{syntax}
-% Adds the result of the \meta{skip expr} to the current
-% content of the \meta{skip}.
-% \end{function}
-%
-% \begin{function}[updated = 2011-10-22]
-% {\skip_set:Nn, \skip_set:cn, \skip_gset:Nn, \skip_gset:cn}
-% \begin{syntax}
-% \cs{skip_set:Nn} \meta{skip} \Arg{skip expr}
-% \end{syntax}
-% Sets \meta{skip} to the value of \meta{skip expr}, which
-% must evaluate to a length with units and may include a rubber
-% component (for example |1 cm plus 0.5 cm|.
-% \end{function}
-%
-% \begin{function}
-% {
-% \skip_set_eq:NN, \skip_set_eq:cN, \skip_set_eq:Nc, \skip_set_eq:cc,
-% \skip_gset_eq:NN, \skip_gset_eq:cN, \skip_gset_eq:Nc, \skip_gset_eq:cc
-% }
-% \begin{syntax}
-% \cs{skip_set_eq:NN} \meta{skip_1} \meta{skip_2}
-% \end{syntax}
-% Sets the content of \meta{skip_1} equal to that of \meta{skip_2}.
-% \end{function}
-%
-% \begin{function}[updated = 2011-10-22]
-% {\skip_sub:Nn, \skip_sub:cn, \skip_gsub:Nn, \skip_gsub:cn}
-% \begin{syntax}
-% \cs{skip_sub:Nn} \meta{skip} \Arg{skip expr}
-% \end{syntax}
-% Subtracts the result of the \meta{skip expr} from the
-% current content of the \meta{skip}.
-% \end{function}
-%
-% \section{Skip expression conditionals}
-%
-% \begin{function}[EXP,pTF]{\skip_if_eq:nn}
-% \begin{syntax}
-% \cs{skip_if_eq_p:nn} \Arg{skip expr_1} \Arg{skip expr_2}
-% \cs{skip_if_eq:nnTF}
-% ~~\Arg{skip expr_1} \Arg{skip expr_2}
-% ~~\Arg{true code} \Arg{false code}
-% \end{syntax}
-% This function first evaluates each of the
-% \meta{skip exprs} as described for \cs{skip_eval:n}.
-% The two results are then compared for exact equality,
-% \emph{i.e.}~both the fixed and rubber components must be the same
-% for the test to be true.
-% \end{function}
-%
-% \begin{function}[EXP, pTF, added = 2012-03-05]{\skip_if_finite:n}
-% \begin{syntax}
-% \cs{skip_if_finite_p:n} \Arg{skip expr}
-% \cs{skip_if_finite:nTF} \Arg{skip expr} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Evaluates the \meta{skip expr} as described for \cs{skip_eval:n},
-% and then tests if all of its components are finite.
-% \end{function}
-%
-% \section{Using \texttt{skip} expressions and variables}
-%
-% \begin{function}[updated = 2011-10-22, EXP]{\skip_eval:n}
-% \begin{syntax}
-% \cs{skip_eval:n} \Arg{skip expr}
-% \end{syntax}
-% Evaluates the \meta{skip expr}, expanding any skips
-% and token list variables within the \meta{expression}
-% to their content (without requiring \cs{skip_use:N}/\cs{tl_use:N})
-% and applying the standard mathematical rules. The result of the
-% calculation is left in the input stream as a \meta{glue denotation}
-% after two expansions. This is expressed in points (\texttt{pt}),
-% and requires suitable termination if used in a \TeX{}-style
-% assignment as it is \emph{not} an \meta{internal glue}.
-% \end{function}
-%
-% \begin{function}[EXP]{\skip_use:N, \skip_use:c}
-% \begin{syntax}
-% \cs{skip_use:N} \meta{skip}
-% \end{syntax}
-% Recovers the content of a \meta{skip} and places it directly
-% in the input stream. An error is raised if the variable does
-% not exist or if it is invalid. Can be omitted in places where a
-% \meta{dimension} or \meta{skip} is required (such as in the argument of
-% \cs{skip_eval:n}).
-% \begin{texnote}
-% \cs{skip_use:N} is the \TeX{} primitive \tn{the}: this is one of
-% several \LaTeX3 names for this primitive.
-% \end{texnote}
-% \end{function}
-%
-% \section{Viewing \texttt{skip} variables}
-%
-% \begin{function}[updated = 2015-08-03]{\skip_show:N, \skip_show:c}
-% \begin{syntax}
-% \cs{skip_show:N} \meta{skip}
-% \end{syntax}
-% Displays the value of the \meta{skip} on the terminal.
-% \end{function}
-%
-% \begin{function}[added = 2011-11-22, updated = 2015-08-07]{\skip_show:n}
-% \begin{syntax}
-% \cs{skip_show:n} \Arg{skip expr}
-% \end{syntax}
-% Displays the result of evaluating the \meta{skip expr}
-% on the terminal.
-% \end{function}
-%
-% \begin{function}[added = 2014-08-22, updated = 2015-08-03]{\skip_log:N, \skip_log:c}
-% \begin{syntax}
-% \cs{skip_log:N} \meta{skip}
-% \end{syntax}
-% Writes the value of the \meta{skip} in the log file.
-% \end{function}
-%
-% \begin{function}[added = 2014-08-22, updated = 2015-08-07]{\skip_log:n}
-% \begin{syntax}
-% \cs{skip_log:n} \Arg{skip expr}
-% \end{syntax}
-% Writes the result of evaluating the \meta{skip expr}
-% in the log file.
-% \end{function}
-%
-% \section{Constant skips}
-%
-% \begin{variable}[updated = 2012-11-02]{\c_max_skip}
-% The maximum value that can be stored as a skip (equal to
-% \cs{c_max_dim} in length), with no stretch nor shrink component.
-% \end{variable}
-%
-% \begin{variable}[updated = 2012-11-01]{\c_zero_skip}
-% A zero length as a skip, with no stretch nor shrink component.
-% \end{variable}
-%
-% \section{Scratch skips}
-%
-% \begin{variable}{\l_tmpa_skip, \l_tmpb_skip}
-% Scratch skip for local assignment. These are never used by
-% the kernel code, and so are safe for use with any \LaTeX3-defined
-% function. However, they may be overwritten by other non-kernel
-% code and so should only be used for short-term storage.
-% \end{variable}
-%
-% \begin{variable}{\g_tmpa_skip, \g_tmpb_skip}
-% Scratch skip for global assignment. These are never used by
-% the kernel code, and so are safe for use with any \LaTeX3-defined
-% function. However, they may be overwritten by other non-kernel
-% code and so should only be used for short-term storage.
-% \end{variable}
-%
-% \section{Inserting skips into the output}
-%
-% \begin{function}[updated = 2011-10-22]
-% {\skip_horizontal:N, \skip_horizontal:c, \skip_horizontal:n}
-% \begin{syntax}
-% \cs{skip_horizontal:N} \meta{skip}
-% \cs{skip_horizontal:n} \Arg{skip expr}
-% \end{syntax}
-% Inserts a horizontal \meta{skip} into the current list.
-% The argument can also be a \meta{dim}.
-% \begin{texnote}
-% \cs{skip_horizontal:N} is the \TeX{} primitive \tn{hskip}.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[updated = 2011-10-22]
-% {\skip_vertical:N, \skip_vertical:c, \skip_vertical:n}
-% \begin{syntax}
-% \cs{skip_vertical:N} \meta{skip}
-% \cs{skip_vertical:n} \Arg{skip expr}
-% \end{syntax}
-% Inserts a vertical \meta{skip} into the current list.
-% The argument can also be a \meta{dim}.
-% \begin{texnote}
-% \cs{skip_vertical:N} is the \TeX{} primitive \tn{vskip}.
-% \end{texnote}
-% \end{function}
-%
-% \section{Creating and initialising \texttt{muskip} variables}
-%
-% \begin{function}{\muskip_new:N, \muskip_new:c}
-% \begin{syntax}
-% \cs{muskip_new:N} \meta{muskip}
-% \end{syntax}
-% Creates a new \meta{muskip} or raises an error if the name is
-% already taken. The declaration is global. The \meta{muskip}
-% is initially equal to $0$\,mu.
-% \end{function}
-%
-% \begin{function}[added = 2012-03-05]{\muskip_const:Nn, \muskip_const:cn}
-% \begin{syntax}
-% \cs{muskip_const:Nn} \meta{muskip} \Arg{muskip expr}
-% \end{syntax}
-% Creates a new constant \meta{muskip} or raises an error if the
-% name is already taken. The value of the \meta{muskip} is set
-% globally to the \meta{muskip expr}.
-% \end{function}
-%
-% \begin{function}
-% {\muskip_zero:N, \muskip_zero:c, \muskip_gzero:N, \muskip_gzero:c}
-% \begin{syntax}
-% \cs{skip_zero:N} \meta{muskip}
-% \end{syntax}
-% Sets \meta{muskip} to $0$\,mu.
-% \end{function}
-%
-% \begin{function}[added = 2012-01-07]
-% {
-% \muskip_zero_new:N, \muskip_zero_new:c,
-% \muskip_gzero_new:N, \muskip_gzero_new:c
-% }
-% \begin{syntax}
-% \cs{muskip_zero_new:N} \meta{muskip}
-% \end{syntax}
-% Ensures that the \meta{muskip} exists globally by applying
-% \cs{muskip_new:N} if necessary, then applies
-% \cs[index=muskip_zero:N]{muskip_(g)zero:N}
-% to leave the \meta{muskip} set to zero.
-% \end{function}
-%
-% \begin{function}[EXP, pTF, added=2012-03-03]
-% {\muskip_if_exist:N, \muskip_if_exist:c}
-% \begin{syntax}
-% \cs{muskip_if_exist_p:N} \meta{muskip}
-% \cs{muskip_if_exist:NTF} \meta{muskip} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests whether the \meta{muskip} is currently defined. This does not
-% check that the \meta{muskip} really is a muskip variable.
-% \end{function}
-%
-% \section{Setting \texttt{muskip} variables}
-%
-% \begin{function}[updated = 2011-10-22]
-% {\muskip_add:Nn, \muskip_add:cn, \muskip_gadd:Nn, \muskip_gadd:cn}
-% \begin{syntax}
-% \cs{muskip_add:Nn} \meta{muskip} \Arg{muskip expr}
-% \end{syntax}
-% Adds the result of the \meta{muskip expr} to the current
-% content of the \meta{muskip}.
-% \end{function}
-%
-% \begin{function}[updated = 2011-10-22]
-% {\muskip_set:Nn, \muskip_set:cn, \muskip_gset:Nn, \muskip_gset:cn}
-% \begin{syntax}
-% \cs{muskip_set:Nn} \meta{muskip} \Arg{muskip expr}
-% \end{syntax}
-% Sets \meta{muskip} to the value of \meta{muskip expr}, which
-% must evaluate to a math length with units and may include a rubber
-% component (for example |1 mu plus 0.5 mu|.
-% \end{function}
-%
-% \begin{function}
-% {
-% \muskip_set_eq:NN, \muskip_set_eq:cN,
-% \muskip_set_eq:Nc, \muskip_set_eq:cc,
-% \muskip_gset_eq:NN, \muskip_gset_eq:cN,
-% \muskip_gset_eq:Nc, \muskip_gset_eq:cc
-% }
-% \begin{syntax}
-% \cs{muskip_set_eq:NN} \meta{muskip_1} \meta{muskip_2}
-% \end{syntax}
-% Sets the content of \meta{muskip_1} equal to that of
-% \meta{muskip_2}.
-% \end{function}
-%
-% \begin{function}[updated = 2011-10-22]
-% {\muskip_sub:Nn, \muskip_sub:cn, \muskip_gsub:Nn, \muskip_gsub:cn}
-% \begin{syntax}
-% \cs{muskip_sub:Nn} \meta{muskip} \Arg{muskip expr}
-% \end{syntax}
-% Subtracts the result of the \meta{muskip expr} from the
-% current content of the \meta{muskip}.
-% \end{function}
-%
-% \section{Using \texttt{muskip} expressions and variables}
-%
-% \begin{function}[updated = 2011-10-22, EXP]{\muskip_eval:n}
-% \begin{syntax}
-% \cs{muskip_eval:n} \Arg{muskip expr}
-% \end{syntax}
-% Evaluates the \meta{muskip expr}, expanding any skips
-% and token list variables within the \meta{expression}
-% to their content (without requiring \cs{muskip_use:N}/\cs{tl_use:N})
-% and applying the standard mathematical rules. The result of the
-% calculation is left in the input stream as a \meta{muglue denotation}
-% after two expansions. This is expressed in \texttt{mu},
-% and requires suitable termination if used in a \TeX{}-style
-% assignment as it is \emph{not} an \meta{internal muglue}.
-% \end{function}
-%
-% \begin{function}[EXP]{\muskip_use:N, \muskip_use:c}
-% \begin{syntax}
-% \cs{muskip_use:N} \meta{muskip}
-% \end{syntax}
-% Recovers the content of a \meta{skip} and places it directly
-% in the input stream. An error is raised if the variable does
-% not exist or if it is invalid. Can be omitted in places where a
-% \meta{dimension} is required (such as in the argument of
-% \cs{muskip_eval:n}).
-% \begin{texnote}
-% \cs{muskip_use:N} is the \TeX{} primitive \tn{the}: this is one of
-% several \LaTeX3 names for this primitive.
-% \end{texnote}
-% \end{function}
-%
-% \section{Viewing \texttt{muskip} variables}
-%
-% \begin{function}[updated = 2015-08-03]{\muskip_show:N, \muskip_show:c}
-% \begin{syntax}
-% \cs{muskip_show:N} \meta{muskip}
-% \end{syntax}
-% Displays the value of the \meta{muskip} on the terminal.
-% \end{function}
-%
-% \begin{function}[added = 2011-11-22, updated = 2015-08-07]{\muskip_show:n}
-% \begin{syntax}
-% \cs{muskip_show:n} \Arg{muskip expr}
-% \end{syntax}
-% Displays the result of evaluating the \meta{muskip expr}
-% on the terminal.
-% \end{function}
-%
-% \begin{function}[added = 2014-08-22, updated = 2015-08-03]{\muskip_log:N, \muskip_log:c}
-% \begin{syntax}
-% \cs{muskip_log:N} \meta{muskip}
-% \end{syntax}
-% Writes the value of the \meta{muskip} in the log file.
-% \end{function}
-%
-% \begin{function}[added = 2014-08-22, updated = 2015-08-07]{\muskip_log:n}
-% \begin{syntax}
-% \cs{muskip_log:n} \Arg{muskip expr}
-% \end{syntax}
-% Writes the result of evaluating the \meta{muskip expr}
-% in the log file.
-% \end{function}
-%
-% \section{Constant muskips}
-%
-% \begin{variable}{\c_max_muskip}
-% The maximum value that can be stored as a muskip, with no stretch
-% nor shrink component.
-% \end{variable}
-%
-% \begin{variable}{\c_zero_muskip}
-% A zero length as a muskip, with no stretch nor shrink component.
-% \end{variable}
-%
-% \section{Scratch muskips}
-%
-% \begin{variable}{\l_tmpa_muskip, \l_tmpb_muskip}
-% Scratch muskip for local assignment. These are never used by
-% the kernel code, and so are safe for use with any \LaTeX3-defined
-% function. However, they may be overwritten by other non-kernel
-% code and so should only be used for short-term storage.
-% \end{variable}
-%
-% \begin{variable}{\g_tmpa_muskip, \g_tmpb_muskip}
-% Scratch muskip for global assignment. These are never used by
-% the kernel code, and so are safe for use with any \LaTeX3-defined
-% function. However, they may be overwritten by other non-kernel
-% code and so should only be used for short-term storage.
-% \end{variable}
-%
-% \section{Primitive conditional}
-%
-% \begin{function}[EXP]{\if_dim:w}
-% \begin{syntax}
-% \cs{if_dim:w} \meta{dimen_1} \meta{relation} \meta{dimen_2}
-% ~~\meta{true code}
-% \cs{else:}
-% ~~\meta{false}
-% \cs{fi:}
-% \end{syntax}
-% Compare two dimensions. The \meta{relation} is one of
-% |<|, |=| or |>| with category code $12$.
-% \begin{texnote}
-% This is the \TeX{} primitive \tn{ifdim}.
-% \end{texnote}
-% \end{function}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3skip} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=dim>
-% \end{macrocode}
-%
-% \subsection{Length primitives renamed}
-%
-% \begin{macro}{\if_dim:w}
-% \begin{macro}{\@@_eval:w}
-% \begin{macro}{\@@_eval_end:}
-% Primitives renamed.
-% \begin{macrocode}
-\cs_new_eq:NN \if_dim:w \tex_ifdim:D
-\cs_new_eq:NN \@@_eval:w \tex_dimexpr:D
-\cs_new_eq:NN \@@_eval_end: \tex_relax:D
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Internal auxiliaries}
-%
-% \begin{variable}{\s_@@_mark,\s_@@_stop}
-% Internal scan marks.
-% \begin{macrocode}
-\scan_new:N \s_@@_mark
-\scan_new:N \s_@@_stop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[EXP]{\@@_use_none_delimit_by_s_stop:w}
-% Functions to gobble up to a scan mark.
-% \begin{macrocode}
-\cs_new:Npn \@@_use_none_delimit_by_s_stop:w #1 \s_@@_stop { }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Creating and initialising \texttt{dim} variables}
-%
-% \begin{macro}{\dim_new:N, \dim_new:c}
-% Allocating \meta{dim} registers \ldots
-% \begin{macrocode}
-\cs_new_protected:Npn \dim_new:N #1
- {
- \__kernel_chk_if_free_cs:N #1
- \cs:w newdimen \cs_end: #1
- }
-\cs_generate_variant:Nn \dim_new:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\dim_const:Nn, \dim_const:cn}
-% Contrarily to integer constants, we cannot avoid using a register,
-% even for constants. We cannot use \cs{dim_gset:Nn} because
-% debugging code would complain that the constant is not a global
-% variable. Since \cs{dim_const:Nn} does not need to be fast, use
-% \cs{dim_eval:n} to avoid needing a debugging patch that wraps the
-% expression in checking code.
-% \begin{macrocode}
-\cs_new_protected:Npn \dim_const:Nn #1#2
- {
- \dim_new:N #1
- \tex_global:D #1 = \dim_eval:n {#2} \scan_stop:
- }
-\cs_generate_variant:Nn \dim_const:Nn { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\dim_zero:N, \dim_zero:c}
-% \begin{macro}{\dim_gzero:N, \dim_gzero:c}
-% Reset the register to zero. Using \cs{c_zero_skip} deals with the
-% case where the variable passed is incorrectly a skip (for example a
-% \LaTeXe{} length). Besides, these functions are then simply copied
-% for \cs{skip_zero:N} and related functions.
-% \begin{macrocode}
-\cs_new_protected:Npn \dim_zero:N #1 { #1 = \c_zero_skip }
-\cs_new_protected:Npn \dim_gzero:N #1
- { \tex_global:D #1 = \c_zero_skip }
-\cs_generate_variant:Nn \dim_zero:N { c }
-\cs_generate_variant:Nn \dim_gzero:N { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {\dim_zero_new:N, \dim_zero_new:c, \dim_gzero_new:N, \dim_gzero_new:c}
-% Create a register if needed, otherwise clear it.
-% \begin{macrocode}
-\cs_new_protected:Npn \dim_zero_new:N #1
- { \dim_if_exist:NTF #1 { \dim_zero:N #1 } { \dim_new:N #1 } }
-\cs_new_protected:Npn \dim_gzero_new:N #1
- { \dim_if_exist:NTF #1 { \dim_gzero:N #1 } { \dim_new:N #1 } }
-\cs_generate_variant:Nn \dim_zero_new:N { c }
-\cs_generate_variant:Nn \dim_gzero_new:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\dim_if_exist:N, \dim_if_exist:c}
-% Copies of the \texttt{cs} functions defined in \pkg{l3basics}.
-% \begin{macrocode}
-\prg_new_eq_conditional:NNn \dim_if_exist:N \cs_if_exist:N
- { TF , T , F , p }
-\prg_new_eq_conditional:NNn \dim_if_exist:c \cs_if_exist:c
- { TF , T , F , p }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Setting \texttt{dim} variables}
-%
-% \begin{macro}{\dim_set:Nn, \dim_set:cn}
-% \begin{macro}{\dim_gset:Nn, \dim_gset:cn}
-% Setting dimensions is easy enough but when debugging we want both to
-% check that the variable is correctly local/global and to wrap the
-% expression in some code. The \cs{scan_stop:} deals with the case
-% where the variable passed is a skip (for example a \LaTeXe{}
-% length).
-% \begin{macrocode}
-\cs_new_protected:Npn \dim_set:Nn #1#2
- { #1 = \@@_eval:w #2 \@@_eval_end: \scan_stop: }
-\cs_new_protected:Npn \dim_gset:Nn #1#2
- { \tex_global:D #1 = \@@_eval:w #2 \@@_eval_end: \scan_stop: }
-\cs_generate_variant:Nn \dim_set:Nn { c }
-\cs_generate_variant:Nn \dim_gset:Nn { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\dim_set_eq:NN, \dim_set_eq:cN, \dim_set_eq:Nc, \dim_set_eq:cc}
-% \begin{macro}
-% {\dim_gset_eq:NN, \dim_gset_eq:cN, \dim_gset_eq:Nc, \dim_gset_eq:cc}
-% All straightforward, with a \cs{scan_stop:} to deal with the case
-% where |#1| is (incorrectly) a skip.
-% \begin{macrocode}
-\cs_new_protected:Npn \dim_set_eq:NN #1#2
- { #1 = #2 \scan_stop: }
-\cs_generate_variant:Nn \dim_set_eq:NN { c , Nc , cc }
-\cs_new_protected:Npn \dim_gset_eq:NN #1#2
- { \tex_global:D #1 = #2 \scan_stop: }
-\cs_generate_variant:Nn \dim_gset_eq:NN { c , Nc , cc }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\dim_add:Nn, \dim_add:cn}
-% \begin{macro}{\dim_gadd:Nn, \dim_gadd:cn}
-% \begin{macro}{\dim_sub:Nn, \dim_sub:cn}
-% \begin{macro}{\dim_gsub:Nn, \dim_gsub:cn}
-% Using |by| here would slow things down just to detect nonsensical
-% cases such as passing |\dimen 123| as the first argument.
-% Using \cs{scan_stop:} deals with skip variables. Since
-% debugging checks that the variable is correctly local/global, the
-% global versions cannot be defined as \cs{tex_global:D} followed by
-% the local versions.
-% \begin{macrocode}
-\cs_new_protected:Npn \dim_add:Nn #1#2
- { \tex_advance:D #1 \@@_eval:w #2 \@@_eval_end: \scan_stop: }
-\cs_new_protected:Npn \dim_gadd:Nn #1#2
- {
- \tex_global:D \tex_advance:D #1
- \@@_eval:w #2 \@@_eval_end: \scan_stop:
- }
-\cs_generate_variant:Nn \dim_add:Nn { c }
-\cs_generate_variant:Nn \dim_gadd:Nn { c }
-\cs_new_protected:Npn \dim_sub:Nn #1#2
- { \tex_advance:D #1 - \@@_eval:w #2 \@@_eval_end: \scan_stop: }
-\cs_new_protected:Npn \dim_gsub:Nn #1#2
- {
- \tex_global:D \tex_advance:D #1
- -\@@_eval:w #2 \@@_eval_end: \scan_stop:
- }
-\cs_generate_variant:Nn \dim_sub:Nn { c }
-\cs_generate_variant:Nn \dim_gsub:Nn { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Utilities for dimension calculations}
-%
-% \begin{macro}[EXP]{\dim_abs:n}
-% \begin{macro}[EXP]{\@@_abs:N}
-% \UnitTested
-% \begin{macro}[EXP]{\dim_max:nn}
-% \begin{macro}[EXP]{\dim_min:nn}
-% \begin{macro}[EXP]{\@@_maxmin:wwN}
-% \UnitTested
-% \UnitTested
-% Functions for $\min$, $\max$, and absolute value with only one evaluation.
-% The absolute value is evaluated by removing a leading~|-| if present.
-% \begin{macrocode}
-\cs_new:Npn \dim_abs:n #1
- {
- \exp_after:wN \@@_abs:N
- \dim_use:N \@@_eval:w #1 \@@_eval_end:
- }
-\cs_new:Npn \@@_abs:N #1
- { \if_meaning:w - #1 \else: \exp_after:wN #1 \fi: }
-\cs_new:Npn \dim_max:nn #1#2
- {
- \dim_use:N \@@_eval:w \exp_after:wN \@@_maxmin:wwN
- \dim_use:N \@@_eval:w #1 \exp_after:wN ;
- \dim_use:N \@@_eval:w #2 ;
- >
- \@@_eval_end:
- }
-\cs_new:Npn \dim_min:nn #1#2
- {
- \dim_use:N \@@_eval:w \exp_after:wN \@@_maxmin:wwN
- \dim_use:N \@@_eval:w #1 \exp_after:wN ;
- \dim_use:N \@@_eval:w #2 ;
- <
- \@@_eval_end:
- }
-\cs_new:Npn \@@_maxmin:wwN #1 ; #2 ; #3
- {
- \if_dim:w #1 #3 #2 ~
- #1
- \else:
- #2
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\dim_ratio:nn}
-% \begin{macro}{\@@_ratio:n}
-% With dimension expressions, something like |10 pt * ( 5 pt / 10 pt )| does
-% not work. Instead, the ratio part needs to be converted to an integer
-% expression. Using \cs{int_value:w} forces everything into |sp|, avoiding
-% any decimal parts.
-% \begin{macrocode}
-\cs_new:Npn \dim_ratio:nn #1#2
- { \@@_ratio:n {#1} / \@@_ratio:n {#2} }
-\cs_new:Npn \@@_ratio:n #1
- { \int_value:w \@@_eval:w (#1) \@@_eval_end: }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Dimension expression conditionals}
-%
-% \begin{macro}[pTF, EXP]{\dim_compare:nNn}
-% Simple comparison.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \dim_compare:nNn #1#2#3 { p , T , F , TF }
- {
- \if_dim:w \@@_eval:w #1 #2 \@@_eval:w #3 \@@_eval_end:
- \prg_return_true: \else: \prg_return_false: \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[pTF, EXP]{\dim_compare:n}
-% \begin{macro}[EXP]{\@@_compare:w, \@@_compare:wNN}
-% \begin{macro}[EXP]
-% {
-% \@@_compare_=:w,
-% \@@_compare_!:w,
-% \@@_compare_<:w,
-% \@@_compare_>:w
-% }
-% \begin{macro}{\@@_compare_error:}
-% This code is adapted from the \cs{int_compare:nTF} function. First
-% make sure that there is at least one relation operator, by
-% evaluating a dimension expression with a trailing
-% \cs{@@_compare_error:}. Just like for integers, the looping
-% auxiliary \cs{@@_compare:wNN} closes a primitive conditional and
-% opens a new one. It is actually easier to grab a dimension operand
-% than an integer one, because once evaluated, dimensions all end with
-% \texttt{pt} (with category other). Thus we do not need specific
-% auxiliaries for the three \enquote{simple} relations |<|, |=|,
-% and~|>|.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \dim_compare:n #1 { p , T , F , TF }
- {
- \exp_after:wN \@@_compare:w
- \dim_use:N \@@_eval:w #1 \@@_compare_error:
- }
-\cs_new:Npn \@@_compare:w #1 \@@_compare_error:
- {
- \exp_after:wN \if_false: \exp:w \exp_end_continue_f:w
- \@@_compare:wNN #1 ? { = \@@_compare_end:w \else: } \s_@@_stop
- }
-\exp_args:Nno \use:nn
- { \cs_new:Npn \@@_compare:wNN #1 } { \tl_to_str:n {pt} #2#3 }
- {
- \if_meaning:w = #3
- \use:c { @@_compare_#2:w }
- \fi:
- #1 pt \exp_stop_f:
- \prg_return_false:
- \exp_after:wN \@@_use_none_delimit_by_s_stop:w
- \fi:
- \reverse_if:N \if_dim:w #1 pt #2
- \exp_after:wN \@@_compare:wNN
- \dim_use:N \@@_eval:w #3
- }
-\cs_new:cpn { @@_compare_ ! :w }
- #1 \reverse_if:N #2 ! #3 = { #1 #2 = #3 }
-\cs_new:cpn { @@_compare_ = :w }
- #1 \@@_eval:w = { #1 \@@_eval:w }
-\cs_new:cpn { @@_compare_ < :w }
- #1 \reverse_if:N #2 < #3 = { #1 #2 > #3 }
-\cs_new:cpn { @@_compare_ > :w }
- #1 \reverse_if:N #2 > #3 = { #1 #2 < #3 }
-\cs_new:Npn \@@_compare_end:w #1 \prg_return_false: #2 \s_@@_stop
- { #1 \prg_return_false: \else: \prg_return_true: \fi: }
-\cs_new_protected:Npn \@@_compare_error:
- {
- \if_int_compare:w \c_zero_int \c_zero_int \fi:
- =
- \@@_compare_error:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP, noTF]{\dim_case:nn}
-% \begin{macro}{\@@_case:nnTF}
-% \begin{macro}{\@@_case:nw, \@@_case_end:nw}
-% For dimension cases, the first task to fully expand the check
-% condition. The over all idea is then much the same as for
-% \cs{str_case:nnTF} as described in \pkg{l3basics}.
-% \begin{macrocode}
-\cs_new:Npn \dim_case:nnTF #1
- {
- \exp:w
- \exp_args:Nf \@@_case:nnTF { \dim_eval:n {#1} }
- }
-\cs_new:Npn \dim_case:nnT #1#2#3
- {
- \exp:w
- \exp_args:Nf \@@_case:nnTF { \dim_eval:n {#1} } {#2} {#3} { }
- }
-\cs_new:Npn \dim_case:nnF #1#2
- {
- \exp:w
- \exp_args:Nf \@@_case:nnTF { \dim_eval:n {#1} } {#2} { }
- }
-\cs_new:Npn \dim_case:nn #1#2
- {
- \exp:w
- \exp_args:Nf \@@_case:nnTF { \dim_eval:n {#1} } {#2} { } { }
- }
-\cs_new:Npn \@@_case:nnTF #1#2#3#4
- { \@@_case:nw {#1} #2 {#1} { } \s_@@_mark {#3} \s_@@_mark {#4} \s_@@_stop }
-\cs_new:Npn \@@_case:nw #1#2#3
- {
- \dim_compare:nNnTF {#1} = {#2}
- { \@@_case_end:nw {#3} }
- { \@@_case:nw {#1} }
- }
-\cs_new:Npn \@@_case_end:nw #1#2#3 \s_@@_mark #4#5 \s_@@_stop
- { \exp_end: #1 #4 }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Dimension expression loops}
-%
-% \begin{macro}{\dim_while_do:nn}
-% \begin{macro}{\dim_until_do:nn}
-% \begin{macro}{\dim_do_while:nn}
-% \begin{macro}{\dim_do_until:nn}
-% |while_do| and |do_while| functions for dimensions. Same as for the
-% |int| type only the names have changed.
-% \begin{macrocode}
-\cs_new:Npn \dim_while_do:nn #1#2
- {
- \dim_compare:nT {#1}
- {
- #2
- \dim_while_do:nn {#1} {#2}
- }
- }
-\cs_new:Npn \dim_until_do:nn #1#2
- {
- \dim_compare:nF {#1}
- {
- #2
- \dim_until_do:nn {#1} {#2}
- }
- }
-\cs_new:Npn \dim_do_while:nn #1#2
- {
- #2
- \dim_compare:nT {#1}
- { \dim_do_while:nn {#1} {#2} }
- }
-\cs_new:Npn \dim_do_until:nn #1#2
- {
- #2
- \dim_compare:nF {#1}
- { \dim_do_until:nn {#1} {#2} }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\dim_while_do:nNnn}
-% \begin{macro}{\dim_until_do:nNnn}
-% \begin{macro}{\dim_do_while:nNnn}
-% \begin{macro}{\dim_do_until:nNnn}
-% |while_do| and |do_while| functions for dimensions. Same as for the
-% |int| type only the names have changed.
-% \begin{macrocode}
-\cs_new:Npn \dim_while_do:nNnn #1#2#3#4
- {
- \dim_compare:nNnT {#1} #2 {#3}
- {
- #4
- \dim_while_do:nNnn {#1} #2 {#3} {#4}
- }
- }
-\cs_new:Npn \dim_until_do:nNnn #1#2#3#4
- {
- \dim_compare:nNnF {#1} #2 {#3}
- {
- #4
- \dim_until_do:nNnn {#1} #2 {#3} {#4}
- }
- }
-\cs_new:Npn \dim_do_while:nNnn #1#2#3#4
- {
- #4
- \dim_compare:nNnT {#1} #2 {#3}
- { \dim_do_while:nNnn {#1} #2 {#3} {#4} }
- }
-\cs_new:Npn \dim_do_until:nNnn #1#2#3#4
- {
- #4
- \dim_compare:nNnF {#1} #2 {#3}
- { \dim_do_until:nNnn {#1} #2 {#3} {#4} }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Dimension step functions}
-%
-% \begin{macro}{\dim_step_function:nnnN}
-% \begin{macro}{\@@_step:wwwN, \@@_step:NnnnN}
-% Before all else, evaluate the initial value, step, and final value.
-% Repeating a function by steps first needs a check on the direction
-% of the steps. After that, do the function for the start value then
-% step and loop around. It would be more symmetrical to test for a
-% step size of zero before checking the sign, but we optimize for the
-% most frequent case (positive step).
-% \begin{macrocode}
-\cs_new:Npn \dim_step_function:nnnN #1#2#3
- {
- \exp_after:wN \@@_step:wwwN
- \tex_the:D \@@_eval:w #1 \exp_after:wN ;
- \tex_the:D \@@_eval:w #2 \exp_after:wN ;
- \tex_the:D \@@_eval:w #3 ;
- }
-\cs_new:Npn \@@_step:wwwN #1; #2; #3; #4
- {
- \dim_compare:nNnTF {#2} > \c_zero_dim
- { \@@_step:NnnnN > }
- {
- \dim_compare:nNnTF {#2} = \c_zero_dim
- {
- \msg_expandable_error:nnn { kernel } { zero-step } {#4}
- \use_none:nnnn
- }
- { \@@_step:NnnnN < }
- }
- {#1} {#2} {#3} #4
- }
-\cs_new:Npn \@@_step:NnnnN #1#2#3#4#5
- {
- \dim_compare:nNnF {#2} #1 {#4}
- {
- #5 {#2}
- \exp_args:NNf \@@_step:NnnnN
- #1 { \dim_eval:n { #2 + #3 } } {#3} {#4} #5
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\dim_step_inline:nnnn}
-% \begin{macro}{\dim_step_variable:nnnNn}
-% \begin{macro}{\@@_step:NNnnnn}
-% The approach here is to build a function, with a global integer
-% required to make the nesting safe (as seen in other in line
-% functions), and map that function using \cs{dim_step_function:nnnN}.
-% We put a \cs{prg_break_point:Nn} so that \texttt{map_break}
-% functions from other modules correctly decrement \cs{g__kernel_prg_map_int}
-% before looking for their own break point. The first argument is
-% \cs{scan_stop:}, so that no breaking function recognizes this break
-% point as its own.
-% \begin{macrocode}
-\cs_new_protected:Npn \dim_step_inline:nnnn
- {
- \int_gincr:N \g__kernel_prg_map_int
- \exp_args:NNc \@@_step:NNnnnn
- \cs_gset_protected:Npn
- { @@_map_ \int_use:N \g__kernel_prg_map_int :w }
- }
-\cs_new_protected:Npn \dim_step_variable:nnnNn #1#2#3#4#5
- {
- \int_gincr:N \g__kernel_prg_map_int
- \exp_args:NNc \@@_step:NNnnnn
- \cs_gset_protected:Npe
- { @@_map_ \int_use:N \g__kernel_prg_map_int :w }
- {#1}{#2}{#3}
- {
- \tl_set:Nn \exp_not:N #4 {##1}
- \exp_not:n {#5}
- }
- }
-\cs_new_protected:Npn \@@_step:NNnnnn #1#2#3#4#5#6
- {
- #1 #2 ##1 {#6}
- \dim_step_function:nnnN {#3} {#4} {#5} #2
- \prg_break_point:Nn \scan_stop: { \int_gdecr:N \g__kernel_prg_map_int }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Using \texttt{dim} expressions and variables}
-%
-% \begin{macro}{\dim_eval:n}
-% Evaluating a dimension expression expandably.
-% \begin{macrocode}
-\cs_new:Npn \dim_eval:n #1
- { \dim_use:N \@@_eval:w #1 \@@_eval_end: }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\dim_sign:n, \@@_sign:Nw}
-% See \cs{dim_abs:n}. Contrarily to \cs{int_sign:n} the case of a
-% zero dimension cannot be distinguished from a positive dimension by
-% looking only at the first character, since |0.2pt| and |0pt| start
-% the same way. We need explicit comparisons. We start by
-% distinguishing the most common case of a positive dimension.
-% \begin{macrocode}
-\cs_new:Npn \dim_sign:n #1
- {
- \int_value:w \exp_after:wN \@@_sign:Nw
- \dim_use:N \@@_eval:w #1 \@@_eval_end: ;
- \exp_stop_f:
- }
-\cs_new:Npn \@@_sign:Nw #1#2 ;
- {
- \if_dim:w #1#2 > \c_zero_dim
- 1
- \else:
- \if_meaning:w - #1
- -1
- \else:
- 0
- \fi:
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\dim_use:N, \dim_use:c}
-% Accessing a \meta{dim}. We hand-code the |c| variant for some speed gain.
-% \begin{macrocode}
-\cs_new_eq:NN \dim_use:N \tex_the:D
-\cs_new:Npn \dim_use:c #1 { \tex_the:D \cs:w #1 \cs_end: }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\dim_to_decimal:n}
-% \begin{macro}[EXP]{\@@_to_decimal:w}
-% A function which comes up often enough to deserve a place in the
-% kernel. Evaluate the dimension expression~|#1| then remove the
-% trailing \texttt{pt}. When debugging is enabled, the argument is
-% put in parentheses as this prevents the dimension expression from
-% terminating early and leaving extra tokens lying around. This is
-% used a lot by low-level manipulations.
-% \begin{macrocode}
-\cs_new:Npn \dim_to_decimal:n #1
- {
- \exp_after:wN
- \@@_to_decimal:w \dim_use:N \@@_eval:w #1 \@@_eval_end:
- }
-\use:e
- {
- \cs_new:Npn \exp_not:N \@@_to_decimal:w
- #1 . #2 \tl_to_str:n { pt }
- }
- {
- \int_compare:nNnTF {#2} > \c_zero_int
- { #1 . #2 }
- { #1 }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\dim_to_fp:n}
-% Defined in \pkg{l3fp-convert}, documented here.
-% \end{macro}
-%
-% \subsection{Conversion of \texttt{dim} to other units}
-%
-% The conversion from \texttt{pt} or \texttt{sp} to other units is complicated
-% by the fact that \TeX{}'s conversion to \texttt{sp} involves rounding and
-% hard-coded ratios. In order to give re-entrant outcomes, we therefore need
-% to do quite a bit of work: see
-% \url{https://github.com/latex3/latex3/issues/954} for detailed discussion.
-% After dealing with the trivial case, we therefore have some work to do.
-% The code to do this is contributed by Ruixi Zhang.
-%
-% \begin{macro}[EXP]{\dim_to_decimal_in_sp:n}
-% The one easy case: the only requirement here is that we avoid an
-% overflow.
-% \begin{macrocode}
-\cs_new:Npn \dim_to_decimal_in_sp:n #1
- { \int_value:w \@@_eval:w #1 \@@_eval_end: }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {
-% \dim_to_decimal_in_bp:n ,
-% \dim_to_decimal_in_cc:n ,
-% \dim_to_decimal_in_cm:n ,
-% \dim_to_decimal_in_dd:n ,
-% \dim_to_decimal_in_in:n ,
-% \dim_to_decimal_in_mm:n ,
-% \dim_to_decimal_in_pc:n
-% }
-% \begin{macro}[EXP]{\@@_to_decimal_aux:w}
-% We first set up a helper macro \cs[no-index]{@@_tmp:w} which takes two
-% arguments. The first argument is one of the following engine-defined
-% units: |in|,~|pc|, |cm|, |mm|, |bp|, |dd|, |cc|, |nd|, and~|nc|.
-% The second argument is $\frac{1}{2}\delta^{-1}$ in reduced fraction,
-% where $\delta>1$~is the engine-defined conversion factor for each unit.
-% Note that $\delta$~must be strictly larger than~$1$ for the following
-% algorithm to work.
-%
-% Here is how the algorithm works: Suppose that a user inputs a
-% non-negative dimension in a unit that has conversion factor~$\delta>1$.
-% Then this dimension is internally represented as $X$\,sp, where
-% $X=\lfloor N\delta\rfloor$ for some integer $N\ge0$. We then seek a
-% formula to express this $N$ using~$X$.
-% The \cs[no-index]{dim_to_decimal_in_<unit>:n} functions shall return
-% the number $N/2^{16}$ in decimal. This way, we guarantee the returned
-% decimal followed by the original unit will parse to exactly~$X$\,sp.
-%
-% So how do we get $N$ from~$X$? Well, since $X=\lfloor N\delta\rfloor$,
-% we have $X\le N\delta<X+1$ and $X\delta^{-1}\le N<(X+1)\delta^{-1}$.
-% Let's focus on the midpoint of this bounding interval for~$N$. The
-% midpoint is $(X+\frac{1}{2})\delta^{-1}$. The fact $\delta>1$ implies
-% that the bounding interval is shorter than~$1$ in length. Thus,
-% (1)~$\hbox{midpoint}+\frac{1}{2}>N$ and
-% (2)~$\hbox{midpoint}+\frac{1}{2}<N+1$. In other words,
-% $N=\lfloor\hbox{midpoint}+\frac{1}{2}\rfloor$. As long as we can
-% rewrite the midpoint as the result of a \enquote{scaling operation} of \eTeX,
-% the $\lfloor\ldots+\frac{1}{2}\rfloor$ part will follow naturally.
-% Indeed we can: $\hbox{midpoint}=(2X+1)\times(\frac{1}{2}\delta^{-1})$.
-%
-% Addendum: If $\delta\ge2$, then the bounding interval for~$N$ is at
-% most~$\frac{1}{2}$ wide in length. In this case, the leftpoint
-% $X\delta^{-1}$ suffices as $N=\lfloor X\delta^{-1}+\frac{1}{2}\rfloor$.
-% Six out of the nine units listed above can be handled in this way,
-% which is much simpler than using midpoint. But three remaining units
-% have $1<\delta<2$; they are |bp|~($\delta=7227/7200$),
-% |nd|~($\delta=685/642$), and |dd|~($\delta=1238/1157$),
-% and these three must be handled using midpoint.
-% For consistency, we shall use the midpoint approach for all nine units.
-% \begin{macrocode}
-\group_begin:
- \cs_set_protected:Npn \@@_tmp:w #1#2
- {
- \cs_new:cpn { dim_to_decimal_in_ #1 :n } ##1
- {
- \exp_after:wN \@@_to_decimal_aux:w
- \int_value:w \@@_eval:w ##1 \@@_eval_end: ; #2 ;
- }
- }
-% \end{macrocode}
-% Conversions to other units are now coded.
-% Consult the pdf\/\TeX{} source for each conversion factor~$\delta$.
-% Each factor $\frac{1}{2}\delta^{-1}$ is hand-coded
-% for accuracy (and speed). As the units \texttt{nc} and \texttt{nd}
-% are not supported by \XeTeX{} or (u)p\TeX{}, they are not included
-% here.
-% \begin{macrocode}
- \@@_tmp:w { in } { 50 / 7227 } % delta = 7227/100
- \@@_tmp:w { pc } { 1 / 24 } % delta = 12/1
- \@@_tmp:w { cm } { 127 / 7227 } % delta = 7227/254
- \@@_tmp:w { mm } { 1270 / 7227 } % delta = 7227/2540
- \@@_tmp:w { bp } { 400 / 803 } % delta = 7227/7200
- \@@_tmp:w { dd } { 1157 / 2476 } % delta = 1238/1157
- \@@_tmp:w { cc } { 1157 / 29712 } % delta = 14856/1157
-\group_end:
-% \end{macrocode}
-% The tokens after \cs{@@_to_decimal_aux:w} shall have the following form:
-% |<number>;<half of delta inverse>;|, where |<number>| represents the
-% input dimension in |sp| unit.
-% If |<number>| is positive, then |#1| is its leading digit and |#2|
-% (possibly empty) is all the remaining digits;
-% If |<number>| is zero, then |#1| is~|0|$_{12}$ and |#2| is empty;
-% If |<number>| is negative, then |#1| is its sign~|-|$_{12}$ and |#2|
-% is all its digits.
-% In all three cases, |#1#2| is the original |<number>|. We can use |#1|
-% to decide whether to use the |-1| formula or the |+1| formula.
-% \begin{macrocode}
-\cs_new:Npn \@@_to_decimal_aux:w #1#2 ; #3 ;
- {
- \dim_to_decimal:n
- {
-% \end{macrocode}
-% We need different formulae depending on whether the user input dimension
-% is negative or not.
-% For negative dimension (internally represented as $X$\,sp), the formula
-% is $(2X-1)\times(\frac{1}{2}\delta^{-1})$.
-% For non-negative dimension, the formula
-% is $(2X+1)\times(\frac{1}{2}\delta^{-1})$.
-% The intermediate step doubles the dimension~$X$.
-% To avoid overflow, we must invoke \cs[no-index]{int_eval:n}.
-% \begin{macrocode}
- \int_eval:n
- { ( 2 * #1#2 \if:w #1 - - \else: + \fi: 1 ) * #3 }
-% \end{macrocode}
-% Now we append~|sp| to finish the dimension specification.
-% \begin{macrocode}
- sp
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\dim_to_decimal_in_unit:nn}
-% \begin{macrocode}
-\cs_new:Npn \dim_to_decimal_in_unit:nn #1#2
- {
- \exp_after:wN \@@_chk_unit:w
- \int_value:w \@@_eval:w #2 \@@_eval_end: ; {#1}
- }
-% \end{macrocode}
-% \end{macro}
-% \begin{macro}[EXP]{\@@_chk_unit:w}
-% The tokens after \cs{@@_chk_unit:w} shall have the following form:
-% |<number2>;{<dimexpr1>}|, where |<number2>| represents |<dimexpr2>| in
-% |sp| unit.
-% If |#1| is~|0|$_{12}$, the \enquote{unit} |<dimexpr2>| must also be zero.
-% So we throw out a \enquote{division by zero} error message at this point.
-% Otherwise, if |#1| is~|-|$_{12}$, we shall negate both |<dimexpr1>| and
-% |<dimexpr2>| for later procedures.
-% \begin{macrocode}
-\cs_new:Npn \@@_chk_unit:w #1#2;#3
- {
- \token_if_eq_charcode:NNTF #1 0
- { \msg_expandable_error:nn { dim } { zero-unit } }
- {
- \exp_after:wN \@@_branch_unit:w
- \int_value:w \if:w #1 - - \fi: \@@_eval:w #3 \exp_after:wN ;
- \int_value:w \if:w #1 - - \fi: #1#2 ;
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \begin{macro}[EXP]{\@@_branch_unit:w}
-% The tokens after \cs{@@_branch_unit:w} shall have the following form:
-% |<number1>;<number2>;|, where |<number1>| represents |<dimexpr1>| in
-% |sp| unit (whose sign is taken care of) and |<number2>| represents the
-% absolute value of |<dimexpr2>| in |sp| unit (which is strictly positive).
-%
-% As explained, the formulae $(2X\pm1)\times(\frac{1}{2}\delta^{-1})$ work
-% if and only if $\delta=|<number2>|/65536>1$. This corresponds to
-% |<dimexpr2>| strictly larger than 1\,pt in absolute value.
-% In this case, we simply call \cs{@@_to_decimal_aux:w} and supply
-% $\frac{1}{2}\delta^{-1}=32768/|<number2>|$ as |<half of delta inverse>|.
-%
-% Otherwise if $|<number2>|=65536$, then |<dimexpr2>| is 1\,pt in absolute
-% value and we call \cs{dim_to_decimal:n} directly.
-%
-% Otherwise $0<|<number2>|<65536$ and we shall proceed differently.
-%
-% For unit less than 1\,pt, write $n=|<number2>|$, then $\delta=n/65536<1$.
-% The midpoint formulae are not optimal. Let's go back to the inequalities
-% $X\delta^{-1}\le N<(X+1)\delta^{-1}$. Since now $\delta<1$, the bounding
-% interval is wider than~$1$ in length. Consider the ceiling integer
-% $M=\lceil X\delta^{-1}\rceil$, then $X\delta^{-1}\le M<(X+1)\delta^{-1}$,
-% or equivalently $X\le M\delta<X+1$, and thus $\lfloor M\delta\rfloor=X$.
-% The key point here is that we \emph{don't} need to solve for~$N$;
-% in fact, any integer that can reproduce~$X$ (such as~$M$) is good enough.
-% So the algorithm goes like this: (1)~Compute rounding of $X\delta^{-1}$,
-% i.e., $M'=\lfloor X\delta^{-1}+\frac{1}{2}\rfloor$; this $M'$ could be
-% either $M$ or $M-1$. (2)~Check if $\lfloor M'\delta\rfloor=X$, i.e.,
-% whether our candidate $M'$ can reproduce~$X$. If so, then this $M'$ is
-% good enough; if not, then we add one to~$M'$.
-%
-% But when $0<n<65536$, we cannot delay the problem of overflow any more.
-% For $X\delta^{-1}=X\times65536/n$, where $X$ can go up to $2^{30}-1$ and
-% $n$ can be as small as~$1$, the result is well over $2^{31}-1$ (largest
-% integer allowed within |\numexpr|).
-% For example, |\dim_to_decimal_in_unit:nn { \maxdimen } { 1sp }|.
-% Here, all inputs are legal, so we should be able to output |1073741823|
-% \emph{without} causing arithmetic overflow.
-%
-% As a workaround, let's write $X=qn+r$ with some $q\ge0$ and $0\le r<n$.
-% Then $X\delta^{-1}=65536q+65536r/n$, and so
-% $M'=65536q+\lfloor65536r/n+\frac{1}{2}\rfloor=65536q+R'$.
-% Computing $R'$ will never overflow. If this $R'$ can reproduce~$r$, then
-% it is good enough; otherwise we add one to~$R'$. In the end, we shall
-% output $q+R'/65536$ in decimal.
-%
-% Note: $q=\lfloor X/n\rfloor=\lfloor\frac{2X-n}{2n}+\frac{1}{2}\rfloor$
-% represents the \enquote{integer} part, while $0\le R'\le65536$ represents the
-% \enquote{fractional} part. (Can $R'=65536$ really happen? Didn't investigate.)
-% \begin{macrocode}
-\cs_new:Npn \@@_branch_unit:w #1;#2;
- {
- \int_compare:nNnTF {#2} > { 65536 }
- { \@@_to_decimal_aux:w #1 ; 32768 / #2 ; }
- {
- \int_compare:nNnTF {#2} = { 65536 }
- { \dim_to_decimal:n { #1sp } }
- { \@@_get_quotient:w #1 ; #2 ; }
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \begin{macro}[EXP]{\@@_get_quotient:w}
-% We wish to get the quotient $q$ via rounding of $\frac{2X-n}{2n}$.
-% When $0\le X<n/2$, we have $\frac{2X-n}{2n}<0$. So, strictly speaking,
-% |\numexpr| performs its rounding as
-% $\lceil\frac{2X-n}{2n}-\frac{1}{2}\rceil$, not exactly what we want.
-% However, lucky for us, only $X=0$ makes
-% $\lceil\frac{2X-n}{2n}-\frac{1}{2}\rceil=-1\neq0$ (we want~$0$);
-% all other $0<X<n/2$ make $\lceil\frac{2X-n}{2n}-\frac{1}{2}\rceil=0=q$.
-% Thus, let's filter out $X=0$ early.
-% If $X\neq0$, we extract its sign and leave the sign to the back.
-% The sign does not participate in any calculations (also the code works
-% with positive integers only). The sign is used at the last stages when
-% we parse the decimal output.
-%
-% After \cs{@@_get_quotient:w} has done its job, either we have the
-% decimal~|0|, or we have \cs{@@_get_remainder:w} followed by
-% $q$|;|$\lvert X\rvert$|;|$n$|;<sign of X>;|.
-% \begin{macrocode}
-\cs_new:Npn \@@_get_quotient:w #1#2;#3;
- {
- \token_if_eq_charcode:NNTF #1 0
- { 0 }
- {
- \token_if_eq_charcode:NNTF #1 -
- {
- \exp_after:wN \exp_after:wN \exp_after:wN \@@_get_remainder:w
- \int_eval:n { ( 2 * #2 - #3 ) / ( 2 * #3 ) } ;
- #2 ; #3 ; - ;
- }
- {
- \exp_after:wN \exp_after:wN \exp_after:wN \@@_get_remainder:w
- \int_eval:n { ( 2 * #1#2 - #3 ) / ( 2 * #3 ) } ;
- #1#2 ; #3 ; ;
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \begin{macro}[EXP]{\@@_get_remainder:w}
-% \cs{@@_get_remainder:w} does not need to read the sign.
-% After finding the remainder~$r$, the number~$\lvert X\rvert$ is no longer
-% needed. We should then have \cs{@@_convert_remainder:w} followed by
-% $r$|;|$n$|;|$q$|;<sign of X>;|.
-% \begin{macrocode}
-\cs_new:Npn \@@_get_remainder:w #1;#2;#3;
- {
- \exp_after:wN \exp_after:wN \exp_after:wN \@@_convert_remainder:w
- \int_eval:n { #2 - #1 * #3 } ;
- #3 ; #1 ;
- }
-% \end{macrocode}
-% \end{macro}
-% \begin{macro}[EXP]{\@@_convert_remainder:w}
-% This is trivial. We compute $R'=\lfloor65536r/n+\frac{1}{2}\rfloor$,
-% then leave \cs{@@_test_candidate:w} followed by
-% $R'$|;|$r$|;|$n$|;|$q$|;<sign of X>;|.
-% \begin{macrocode}
-\cs_new:Npn \@@_convert_remainder:w #1;#2;
- {
- \exp_after:wN \exp_after:wN \exp_after:wN \@@_test_candidate:w
- \int_eval:n { #1 * 65536 / #2 } ;
- #1 ; #2 ;
- }
-% \end{macrocode}
-% \end{macro}
-% \begin{macro}[EXP]{\@@_test_candidate:w}
-% Now the fun part: We take $R'$, $r$ and~$n$ to test whether
-% $r=\lfloor R'\delta\rfloor$. This is done as a dimension comparison.
-% The left-hand side, $r$, is simply |r sp|. The right-hand side,
-% $\lfloor R'\delta\rfloor$, is exactly |<R' as decimal><dimen = n sp>|.
-% If the result is true, then we've found~$R'$;
-% otherwise we add one to~$R'$.
-% After this step, $r$ and~$n$ are no longer needed. We should then have
-% \cs{@@_parse_decimal:w} followed by $R'$|;|$q$|;<sign of X>;|.
-% \begin{macrocode}
-\cs_new:Npn \@@_test_candidate:w #1;#2;#3;
- {
- \dim_compare:nNnTF { #2sp } =
- { \dim_to_decimal:n { #1sp } \@@_eval:w #3sp \@@_eval_end: }
- { \@@_parse_decimal:w #1 ; }
- {
- \@@_parse_decimal:w \int_eval:n { #1 + 1 } ;
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \begin{macro}[EXP]{\@@_parse_decimal:w, \@@_parse_decimal_aux:w}
-% The Grand Finale: We sum $q$ and $R'/65536$ together, and negate the
-% result if necessary. These are all done expandably.
-% If $0<R'/65536<1$, the integer summation is naturally terminated at the
-% decimal point. If $R'/65536=0$ (or~$1$?), the summation is terminated
-% at the semicolon. The auxiliary function \cs{@@_parse_decimal_aux:w}
-% takes care of both cases.
-% \begin{macrocode}
-\cs_new:Npn \@@_parse_decimal:w #1;#2;#3;
- {
- \exp_after:wN \@@_parse_decimal_aux:w
- \int_value:w #3 \int_eval:w #2 + \dim_to_decimal:n { #1sp } ;
- }
-\cs_new:Npn \@@_parse_decimal_aux:w #1 ; {#1}
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Viewing \texttt{dim} variables}
-%
-% \begin{macro}{\dim_show:N, \dim_show:c}
-% Diagnostics.
-% \begin{macrocode}
-\cs_new_eq:NN \dim_show:N \__kernel_register_show:N
-\cs_generate_variant:Nn \dim_show:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\dim_show:n}
-% Diagnostics. We don't use the \TeX{} primitive \tn{showthe} to show
-% dimension expressions: this gives a more unified output.
-% \begin{macrocode}
-\cs_new_protected:Npn \dim_show:n
- { \__kernel_msg_show_eval:Nn \dim_eval:n }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\dim_log:N, \dim_log:c, \dim_log:n}
-% Diagnostics. Redirect output of \cs{dim_show:n} to the log.
-% \begin{macrocode}
-\cs_new_eq:NN \dim_log:N \__kernel_register_log:N
-\cs_new_eq:NN \dim_log:c \__kernel_register_log:c
-\cs_new_protected:Npn \dim_log:n
- { \__kernel_msg_log_eval:Nn \dim_eval:n }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Constant dimensions}
-%
-% \begin{variable}{\c_zero_dim, \c_max_dim}
-% Constant dimensions.
-% \begin{macrocode}
-\dim_const:Nn \c_zero_dim { 0 pt }
-\dim_const:Nn \c_max_dim { 16383.99999 pt }
-% \end{macrocode}
-% \end{variable}
-%
-% \subsection{Scratch dimensions}
-%
-% \begin{variable}{\l_tmpa_dim, \l_tmpb_dim}
-% \begin{variable}{\g_tmpa_dim, \g_tmpb_dim}
-% We provide two local and two global scratch registers, maybe we
-% need more or less.
-% \begin{macrocode}
-\dim_new:N \l_tmpa_dim
-\dim_new:N \l_tmpb_dim
-\dim_new:N \g_tmpa_dim
-\dim_new:N \g_tmpb_dim
-% \end{macrocode}
-% \end{variable}
-% \end{variable}
-%
-% \subsection{Creating and initialising \texttt{skip} variables}
-%
-% \begin{macrocode}
-%<@@=skip>
-% \end{macrocode}
-%
-% \begin{variable}{\s_@@_stop}
-% Internal scan marks.
-% \begin{macrocode}
-\scan_new:N \s_@@_stop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\skip_new:N, \skip_new:c}
-% Allocation of a new internal registers.
-% \begin{macrocode}
-\cs_new_protected:Npn \skip_new:N #1
- {
- \__kernel_chk_if_free_cs:N #1
- \cs:w newskip \cs_end: #1
- }
-\cs_generate_variant:Nn \skip_new:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\skip_const:Nn, \skip_const:cn}
-% Contrarily to integer constants, we cannot avoid using a register,
-% even for constants. See \cs{dim_const:Nn} for why we cannot use
-% \cs{skip_gset:Nn}.
-% \begin{macrocode}
-\cs_new_protected:Npn \skip_const:Nn #1#2
- {
- \skip_new:N #1
- \tex_global:D #1 = \skip_eval:n {#2} \scan_stop:
- }
-\cs_generate_variant:Nn \skip_const:Nn { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\skip_zero:N, \skip_zero:c}
-% \begin{macro}{\skip_gzero:N, \skip_gzero:c}
-% Reset the register to zero.
-% \begin{macrocode}
-\cs_new_eq:NN \skip_zero:N \dim_zero:N
-\cs_new_eq:NN \skip_gzero:N \dim_gzero:N
-\cs_generate_variant:Nn \skip_zero:N { c }
-\cs_generate_variant:Nn \skip_gzero:N { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {\skip_zero_new:N, \skip_zero_new:c, \skip_gzero_new:N, \skip_gzero_new:c}
-% Create a register if needed, otherwise clear it.
-% \begin{macrocode}
-\cs_new_protected:Npn \skip_zero_new:N #1
- { \skip_if_exist:NTF #1 { \skip_zero:N #1 } { \skip_new:N #1 } }
-\cs_new_protected:Npn \skip_gzero_new:N #1
- { \skip_if_exist:NTF #1 { \skip_gzero:N #1 } { \skip_new:N #1 } }
-\cs_generate_variant:Nn \skip_zero_new:N { c }
-\cs_generate_variant:Nn \skip_gzero_new:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\skip_if_exist:N, \skip_if_exist:c}
-% Copies of the \texttt{cs} functions defined in \pkg{l3basics}.
-% \begin{macrocode}
-\prg_new_eq_conditional:NNn \skip_if_exist:N \cs_if_exist:N
- { TF , T , F , p }
-\prg_new_eq_conditional:NNn \skip_if_exist:c \cs_if_exist:c
- { TF , T , F , p }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Setting \texttt{skip} variables}
-%
-% \begin{macro}{\skip_set:Nn, \skip_set:cn}
-% \begin{macro}{\skip_gset:Nn, \skip_gset:cn}
-% Much the same as for dimensions.
-% \begin{macrocode}
-\cs_new_protected:Npn \skip_set:Nn #1#2
- { #1 = \tex_glueexpr:D #2 \scan_stop: }
-\cs_new_protected:Npn \skip_gset:Nn #1#2
- { \tex_global:D #1 = \tex_glueexpr:D #2 \scan_stop: }
-\cs_generate_variant:Nn \skip_set:Nn { c }
-\cs_generate_variant:Nn \skip_gset:Nn { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {\skip_set_eq:NN, \skip_set_eq:cN, \skip_set_eq:Nc, \skip_set_eq:cc}
-% \begin{macro}
-% {\skip_gset_eq:NN, \skip_gset_eq:cN, \skip_gset_eq:Nc, \skip_gset_eq:cc}
-% All straightforward.
-% \begin{macrocode}
-\cs_new_protected:Npn \skip_set_eq:NN #1#2 { #1 = #2 }
-\cs_generate_variant:Nn \skip_set_eq:NN { c , Nc , cc }
-\cs_new_protected:Npn \skip_gset_eq:NN #1#2 { \tex_global:D #1 = #2 }
-\cs_generate_variant:Nn \skip_gset_eq:NN { c , Nc , cc }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\skip_add:Nn, \skip_add:cn}
-% \begin{macro}{\skip_gadd:Nn, \skip_gadd:cn}
-% \begin{macro}{\skip_sub:Nn, \skip_sub:cn}
-% \begin{macro}{\skip_gsub:Nn, \skip_gsub:cn}
-% Using |by| here deals with the (incorrect) case |\skip123|.
-% \begin{macrocode}
-\cs_new_protected:Npn \skip_add:Nn #1#2
- { \tex_advance:D #1 \tex_glueexpr:D #2 \scan_stop: }
-\cs_new_protected:Npn \skip_gadd:Nn #1#2
- { \tex_global:D \tex_advance:D #1 \tex_glueexpr:D #2 \scan_stop: }
-\cs_generate_variant:Nn \skip_add:Nn { c }
-\cs_generate_variant:Nn \skip_gadd:Nn { c }
-\cs_new_protected:Npn \skip_sub:Nn #1#2
- { \tex_advance:D #1 - \tex_glueexpr:D #2 \scan_stop: }
-\cs_new_protected:Npn \skip_gsub:Nn #1#2
- { \tex_global:D \tex_advance:D #1 - \tex_glueexpr:D #2 \scan_stop: }
-\cs_generate_variant:Nn \skip_sub:Nn { c }
-\cs_generate_variant:Nn \skip_gsub:Nn { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Skip expression conditionals}
-%
-% \begin{macro}[pTF]{\skip_if_eq:nn}
-% Comparing skips means doing two expansions to make strings, and then
-% testing them. As a result, only equality is tested.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \skip_if_eq:nn #1#2 { p , T , F , TF }
- {
- \str_if_eq:eeTF { \skip_eval:n {#1} } { \skip_eval:n {#2} }
- { \prg_return_true: }
- { \prg_return_false: }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP,pTF]{\skip_if_finite:n}
-% \begin{macro}[EXP]{\@@_if_finite:wwNw}
-% With \eTeX{}, we have an easy access to the order of infinities of
-% the stretch and shrink components of a skip. However, to access
-% both, we either need to evaluate the expression twice, or evaluate
-% it, then call an auxiliary to extract both pieces of information
-% from the result. Since we are going to need an auxiliary anyways,
-% it is quicker to make it search for the string \texttt{fil} which
-% characterizes infinite glue.
-% \begin{macrocode}
-\cs_set_protected:Npn \@@_tmp:w #1
- {
- \prg_new_conditional:Npnn \skip_if_finite:n ##1 { p , T , F , TF }
- {
- \exp_after:wN \@@_if_finite:wwNw
- \skip_use:N \tex_glueexpr:D ##1 ; \prg_return_false:
- #1 ; \prg_return_true: \s_@@_stop
- }
- \cs_new:Npn \@@_if_finite:wwNw ##1 #1 ##2 ; ##3 ##4 \s_@@_stop {##3}
- }
-\exp_args:No \@@_tmp:w { \tl_to_str:n { fil } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Using \texttt{skip} expressions and variables}
-%
-% \begin{macro}{\skip_eval:n}
-% Evaluating a skip expression expandably.
-% \begin{macrocode}
-\cs_new:Npn \skip_eval:n #1
- { \skip_use:N \tex_glueexpr:D #1 \scan_stop: }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\skip_use:N, \skip_use:c}
-% Accessing a \meta{skip}.
-% \begin{macrocode}
-\cs_new_eq:NN \skip_use:N \dim_use:N
-\cs_new_eq:NN \skip_use:c \dim_use:c
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Inserting skips into the output}
-%
-% \begin{macro}{\skip_horizontal:N, \skip_horizontal:c, \skip_horizontal:n}
-% \begin{macro}{\skip_vertical:N, \skip_vertical:c, \skip_vertical:n}
-% Inserting skips.
-% \begin{macrocode}
-\cs_new_eq:NN \skip_horizontal:N \tex_hskip:D
-\cs_new:Npn \skip_horizontal:n #1
- { \skip_horizontal:N \tex_glueexpr:D #1 \scan_stop: }
-\cs_new_eq:NN \skip_vertical:N \tex_vskip:D
-\cs_new:Npn \skip_vertical:n #1
- { \skip_vertical:N \tex_glueexpr:D #1 \scan_stop: }
-\cs_generate_variant:Nn \skip_horizontal:N { c }
-\cs_generate_variant:Nn \skip_vertical:N { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Viewing \texttt{skip} variables}
-%
-% \begin{macro}{\skip_show:N, \skip_show:c}
-% Diagnostics.
-% \begin{macrocode}
-\cs_new_eq:NN \skip_show:N \__kernel_register_show:N
-\cs_generate_variant:Nn \skip_show:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\skip_show:n}
-% Diagnostics. We don't use the \TeX{} primitive \tn{showthe} to show
-% skip expressions: this gives a more unified output.
-% \begin{macrocode}
-\cs_new_protected:Npn \skip_show:n
- { \__kernel_msg_show_eval:Nn \skip_eval:n }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\skip_log:N, \skip_log:c, \skip_log:n}
-% Diagnostics. Redirect output of \cs{skip_show:n} to the log.
-% \begin{macrocode}
-\cs_new_eq:NN \skip_log:N \__kernel_register_log:N
-\cs_new_eq:NN \skip_log:c \__kernel_register_log:c
-\cs_new_protected:Npn \skip_log:n
- { \__kernel_msg_log_eval:Nn \skip_eval:n }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Constant skips}
-%
-% \begin{macro}{\c_zero_skip, \c_max_skip}
-% Skips with no rubber component are just dimensions but need to terminate
-% correctly.
-% \begin{macrocode}
-\skip_const:Nn \c_zero_skip { \c_zero_dim }
-\skip_const:Nn \c_max_skip { \c_max_dim }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Scratch skips}
-%
-% \begin{variable}{\l_tmpa_skip, \l_tmpb_skip}
-% \begin{variable}{\g_tmpa_skip, \g_tmpb_skip}
-% We provide two local and two global scratch registers, maybe we
-% need more or less.
-% \begin{macrocode}
-\skip_new:N \l_tmpa_skip
-\skip_new:N \l_tmpb_skip
-\skip_new:N \g_tmpa_skip
-\skip_new:N \g_tmpb_skip
-% \end{macrocode}
-% \end{variable}
-% \end{variable}
-%
-% \subsection{Creating and initialising \texttt{muskip} variables}
-%
-% \begin{macro}{\muskip_new:N, \muskip_new:c}
-% And then we add muskips.
-% \begin{macrocode}
-\cs_new_protected:Npn \muskip_new:N #1
- {
- \__kernel_chk_if_free_cs:N #1
- \cs:w newmuskip \cs_end: #1
- }
-\cs_generate_variant:Nn \muskip_new:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\muskip_const:Nn, \muskip_const:cn}
-% See \cs{skip_const:Nn}.
-% \begin{macrocode}
-\cs_new_protected:Npn \muskip_const:Nn #1#2
- {
- \muskip_new:N #1
- \tex_global:D #1 = \muskip_eval:n {#2} \scan_stop:
- }
-\cs_generate_variant:Nn \muskip_const:Nn { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\muskip_zero:N, \muskip_zero:c}
-% \begin{macro}{\muskip_gzero:N, \muskip_gzero:c}
-% Reset the register to zero.
-% \begin{macrocode}
-\cs_new_protected:Npn \muskip_zero:N #1
- { #1 = \c_zero_muskip }
-\cs_new_protected:Npn \muskip_gzero:N #1
- { \tex_global:D #1 = \c_zero_muskip }
-\cs_generate_variant:Nn \muskip_zero:N { c }
-\cs_generate_variant:Nn \muskip_gzero:N { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \muskip_zero_new:N, \muskip_zero_new:c,
-% \muskip_gzero_new:N, \muskip_gzero_new:c
-% }
-% Create a register if needed, otherwise clear it.
-% \begin{macrocode}
-\cs_new_protected:Npn \muskip_zero_new:N #1
- { \muskip_if_exist:NTF #1 { \muskip_zero:N #1 } { \muskip_new:N #1 } }
-\cs_new_protected:Npn \muskip_gzero_new:N #1
- { \muskip_if_exist:NTF #1 { \muskip_gzero:N #1 } { \muskip_new:N #1 } }
-\cs_generate_variant:Nn \muskip_zero_new:N { c }
-\cs_generate_variant:Nn \muskip_gzero_new:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\muskip_if_exist:N, \muskip_if_exist:c}
-% Copies of the \texttt{cs} functions defined in \pkg{l3basics}.
-% \begin{macrocode}
-\prg_new_eq_conditional:NNn \muskip_if_exist:N \cs_if_exist:N
- { TF , T , F , p }
-\prg_new_eq_conditional:NNn \muskip_if_exist:c \cs_if_exist:c
- { TF , T , F , p }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Setting \texttt{muskip} variables}
-%
-% \begin{macro}{\muskip_set:Nn, \muskip_set:cn}
-% \begin{macro}{\muskip_gset:Nn, \muskip_gset:cn}
-% This should be pretty familiar.
-% \begin{macrocode}
-\cs_new_protected:Npn \muskip_set:Nn #1#2
- { #1 = \tex_muexpr:D #2 \scan_stop: }
-\cs_new_protected:Npn \muskip_gset:Nn #1#2
- { \tex_global:D #1 = \tex_muexpr:D #2 \scan_stop: }
-\cs_generate_variant:Nn \muskip_set:Nn { c }
-\cs_generate_variant:Nn \muskip_gset:Nn { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \muskip_set_eq:NN, \muskip_set_eq:cN,
-% \muskip_set_eq:Nc, \muskip_set_eq:cc
-% }
-% \begin{macro}
-% {
-% \muskip_gset_eq:NN, \muskip_gset_eq:cN,
-% \muskip_gset_eq:Nc, \muskip_gset_eq:cc
-% }
-% All straightforward.
-% \begin{macrocode}
-\cs_new_protected:Npn \muskip_set_eq:NN #1#2 { #1 = #2 }
-\cs_generate_variant:Nn \muskip_set_eq:NN { c , Nc , cc }
-\cs_new_protected:Npn \muskip_gset_eq:NN #1#2 { \tex_global:D #1 = #2 }
-\cs_generate_variant:Nn \muskip_gset_eq:NN { c , Nc , cc }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\muskip_add:Nn, \muskip_add:cn}
-% \begin{macro}{\muskip_gadd:Nn, \muskip_gadd:cn}
-% \begin{macro}{\muskip_sub:Nn, \muskip_sub:cn}
-% \begin{macro}{\muskip_gsub:Nn, \muskip_gsub:cn}
-% Using |by| here deals with the (incorrect) case |\muskip123|.
-% \begin{macrocode}
-\cs_new_protected:Npn \muskip_add:Nn #1#2
- { \tex_advance:D #1 \tex_muexpr:D #2 \scan_stop: }
-\cs_new_protected:Npn \muskip_gadd:Nn #1#2
- { \tex_global:D \tex_advance:D #1 \tex_muexpr:D #2 \scan_stop: }
-\cs_generate_variant:Nn \muskip_add:Nn { c }
-\cs_generate_variant:Nn \muskip_gadd:Nn { c }
-\cs_new_protected:Npn \muskip_sub:Nn #1#2
- { \tex_advance:D #1 - \tex_muexpr:D #2 \scan_stop: }
-\cs_new_protected:Npn \muskip_gsub:Nn #1#2
- { \tex_global:D \tex_advance:D #1 - \tex_muexpr:D #2 \scan_stop: }
-\cs_generate_variant:Nn \muskip_sub:Nn { c }
-\cs_generate_variant:Nn \muskip_gsub:Nn { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Using \texttt{muskip} expressions and variables}
-%
-% \begin{macro}{\muskip_eval:n}
-% Evaluating a muskip expression expandably.
-% \begin{macrocode}
-\cs_new:Npn \muskip_eval:n #1
- { \muskip_use:N \tex_muexpr:D #1 \scan_stop: }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\muskip_use:N, \muskip_use:c}
-% Accessing a \meta{muskip}.
-% \begin{macrocode}
-\cs_new_eq:NN \muskip_use:N \dim_use:N
-\cs_new_eq:NN \muskip_use:c \dim_use:c
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Viewing \texttt{muskip} variables}
-%
-% \begin{macro}{\muskip_show:N, \muskip_show:c}
-% Diagnostics.
-% \begin{macrocode}
-\cs_new_eq:NN \muskip_show:N \__kernel_register_show:N
-\cs_generate_variant:Nn \muskip_show:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\muskip_show:n}
-% Diagnostics. We don't use the \TeX{} primitive \tn{showthe} to show
-% muskip expressions: this gives a more unified output.
-% \begin{macrocode}
-\cs_new_protected:Npn \muskip_show:n
- { \__kernel_msg_show_eval:Nn \muskip_eval:n }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\muskip_log:N, \muskip_log:c, \muskip_log:n}
-% Diagnostics. Redirect output of \cs{muskip_show:n} to the log.
-% \begin{macrocode}
-\cs_new_eq:NN \muskip_log:N \__kernel_register_log:N
-\cs_new_eq:NN \muskip_log:c \__kernel_register_log:c
-\cs_new_protected:Npn \muskip_log:n
- { \__kernel_msg_log_eval:Nn \muskip_eval:n }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Constant muskips}
-%
-% \begin{macro}{\c_zero_muskip}
-% \begin{macro}{\c_max_muskip}
-% Constant muskips given by their value.
-% \begin{macrocode}
-\muskip_const:Nn \c_zero_muskip { 0 mu }
-\muskip_const:Nn \c_max_muskip { 16383.99999 mu }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Scratch muskips}
-%
-% \begin{variable}{\l_tmpa_muskip, \l_tmpb_muskip}
-% \begin{variable}{\g_tmpa_muskip, \g_tmpb_muskip}
-% We provide two local and two global scratch registers, maybe we
-% need more or less.
-% \begin{macrocode}
-\muskip_new:N \l_tmpa_muskip
-\muskip_new:N \l_tmpb_muskip
-\muskip_new:N \g_tmpa_muskip
-\muskip_new:N \g_tmpb_muskip
-% \end{macrocode}
-% \end{variable}
-% \end{variable}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3sort.dtx b/macros/latex/contrib/l3kernel/l3sort.dtx
deleted file mode 100644
index 818f605e07..0000000000
--- a/macros/latex/contrib/l3kernel/l3sort.dtx
+++ /dev/null
@@ -1,1097 +0,0 @@
-% \iffalse
-%
-%% File l3sort.dtx
-%
-% Copyright (C) 2012-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3sort} module\\ Sorting functions^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \section{Controlling sorting}
-%
-% \label{sec:l3sort:mech}
-%
-% \LaTeX3 comes with a facility to sort list variables (sequences,
-% token lists, or comma-lists) according to some user-defined
-% comparison. For instance,
-% \begin{verbatim}
-% \clist_set:Nn \l_foo_clist { 3 , 01 , -2 , 5 , +1 }
-% \clist_sort:Nn \l_foo_clist
-% {
-% \int_compare:nNnTF { #1 } > { #2 }
-% { \sort_return_swapped: }
-% { \sort_return_same: }
-% }
-% \end{verbatim}
-% results in \cs[no-index]{l_foo_clist} holding the values
-% |{ -2 , 01 , +1 , 3 , 5 }| sorted in non-decreasing order.
-%
-% The code defining the comparison should call
-% \cs{sort_return_swapped:} if the two items given as |#1|
-% and |#2| are not in the correct order, and otherwise it
-% should call \cs{sort_return_same:} to indicate that
-% the order of this pair of items should not be changed.
-%
-% For instance, a \meta{comparison code} consisting only
-% of \cs{sort_return_same:} with no test yields a trivial
-% sort: the final order is identical to the original order.
-% Conversely, using a \meta{comparison code} consisting only
-% of \cs{sort_return_swapped:} reverses the list (in a fairly
-% inefficient way).
-%
-% \begin{texnote}
-% The current implementation is limited to sorting approximately
-% $20000$ items ($40000$ in \LuaTeX{}), depending on what other
-% packages are loaded.
-%
-% Internally, the code from \pkg{l3sort} stores items in \tn{toks}
-% registers allocated locally. Thus, the \meta{comparison code}
-% should not call \tn{newtoks} or other commands that allocate new
-% \tn{toks} registers. On the other hand, altering the value of a
-% previously allocated \tn{toks} register is not a problem.
-% \end{texnote}
-%
-% \begin{function}[added = 2017-02-06]{\sort_return_same:, \sort_return_swapped:}
-% \begin{syntax}
-% \cs{seq_sort:Nn} \meta{seq~var}
-% ~~|{| \ldots{} \cs{sort_return_same:} or \cs{sort_return_swapped:} \ldots{} |}|
-% \end{syntax}
-% Indicates whether to keep the order or swap the order of two items
-% that are compared in the sorting code. Only one of the
-% \cs[no-index]{sort_return_\ldots{}} functions should be used by the
-% code, according to the results of some tests on the items |#1| and
-% |#2| to be compared.
-% \end{function}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3sort} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=sort>
-% \end{macrocode}
-%
-% \subsection{Variables}
-%
-% \begin{variable}{\g_@@_internal_seq, \g_@@_internal_tl}
-% Sorting happens in a group; the result is stored in those global
-% variables before being copied outside the group to the proper
-% places. For seq and tl this is more efficient than using \cs{use:e}
-% (or some \cs{exp_args:NNNe}) to smuggle the definition outside the
-% group since \TeX{} does not need to re-read tokens. For clist we
-% don't gain anything since the result is converted from seq to clist
-% anyways.
-% \begin{macrocode}
-\seq_new:N \g_@@_internal_seq
-\tl_new:N \g_@@_internal_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}
-% {
-% \l_@@_length_int, \l_@@_min_int, \l_@@_top_int, \l_@@_max_int,
-% \l_@@_true_max_int
-% }
-% The sequence has \cs{l_@@_length_int} items and is stored from
-% \cs{l_@@_min_int} to $\cs{l_@@_top_int}-1$. While reading the
-% sequence in memory, we check that \cs{l_@@_top_int} remains at most
-% \cs{l_@@_max_int}, precomputed by \cs{@@_compute_range:}. That
-% bound is such that the merge sort only uses \tn{toks} registers
-% less than \cs{l_@@_true_max_int}, namely those that have not been
-% allocated for use in other code: the user's comparison code could
-% alter these.
-% \begin{macrocode}
-\int_new:N \l_@@_length_int
-\int_new:N \l_@@_min_int
-\int_new:N \l_@@_top_int
-\int_new:N \l_@@_max_int
-\int_new:N \l_@@_true_max_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_block_int}
-% Merge sort is done in several passes. In each pass, blocks of size
-% \cs{l_@@_block_int} are merged in pairs. The block size starts
-% at $1$, and, for a length in the range $[2^k+1,2^{k+1}]$, reaches
-% $2^{k}$ in the last pass.
-% \begin{macrocode}
-\int_new:N \l_@@_block_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_begin_int}
-% \begin{variable}{\l_@@_end_int}
-% When merging two blocks, \cs{l_@@_begin_int} marks the lowest
-% index in the two blocks, and \cs{l_@@_end_int} marks the
-% highest index, plus $1$.
-% \begin{macrocode}
-\int_new:N \l_@@_begin_int
-\int_new:N \l_@@_end_int
-% \end{macrocode}
-% \end{variable}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_A_int}
-% \begin{variable}{\l_@@_B_int}
-% \begin{variable}{\l_@@_C_int}
-% When merging two blocks (whose end-points are \texttt{beg}
-% and \texttt{end}), $A$ starts from the high end of the low
-% block, and decreases until reaching \texttt{beg}. The index
-% $B$ starts from the top of the range and marks the register
-% in which a sorted item should be put. Finally, $C$ points
-% to the copy of the high block in the interval of registers
-% starting at \cs{l_@@_length_int}, upwards. $C$ starts
-% from the upper limit of that range.
-% \begin{macrocode}
-\int_new:N \l_@@_A_int
-\int_new:N \l_@@_B_int
-\int_new:N \l_@@_C_int
-% \end{macrocode}
-% \end{variable}
-% \end{variable}
-% \end{variable}
-%
-% \begin{variable}{\s_@@_mark,\s_@@_stop}
-% Internal scan marks.
-% \begin{macrocode}
-\scan_new:N \s_@@_mark
-\scan_new:N \s_@@_stop
-% \end{macrocode}
-% \end{variable}
-%
-% \subsection{Finding available \tn{toks} registers}
-%
-% \begin{macro}{\@@_shrink_range:}
-% \begin{macro}{\@@_shrink_range_loop:}
-% After \cs{@@_compute_range:} (defined below) determines that
-% \tn{toks} registers between \cs{l_@@_min_int} (included) and
-% \cs{l_@@_true_max_int} (excluded) have not yet been assigned,
-% \cs{@@_shrink_range:} computes \cs{l_@@_max_int} to reflect the need
-% for a buffer when merging blocks in the merge sort. Given
-% $2^{n}\leq A\leq 2^{n}+2^{n-1}$ registers we can sort $\lfloor
-% A/2\rfloor+2^{n-2}$ items while if we have $2^{n}+2^{n-1}\leq A\leq
-% 2^{n+1}$ registers we can sort $A-2^{n-1}$ items. We first find out
-% a power $2^{n}$ such that $2^{n}\leq A\leq 2^{n+1}$ by repeatedly
-% halving \cs{l_@@_block_int}, starting at $2^{15}$ or $2^{14}$ namely
-% half the total number of registers, then we use the formulas and set
-% \cs{l_@@_max_int}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_shrink_range:
- {
- \int_set:Nn \l_@@_A_int
- { \l_@@_true_max_int - \l_@@_min_int + 1 }
- \int_set:Nn \l_@@_block_int { \c_max_register_int / 2 }
- \@@_shrink_range_loop:
- \int_set:Nn \l_@@_max_int
- {
- \int_compare:nNnTF
- { \l_@@_block_int * 3 / 2 } > \l_@@_A_int
- {
- \l_@@_min_int
- + ( \l_@@_A_int - 1 ) / 2
- + \l_@@_block_int / 4
- - 1
- }
- { \l_@@_true_max_int - \l_@@_block_int / 2 }
- }
- }
-\cs_new_protected:Npn \@@_shrink_range_loop:
- {
- \if_int_compare:w \l_@@_A_int < \l_@@_block_int
- \tex_divide:D \l_@@_block_int 2 \exp_stop_f:
- \exp_after:wN \@@_shrink_range_loop:
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_compute_range:, \@@_redefine_compute_range:}
-% \begin{variable}{\c_@@_max_length_int}
-% First find out what \tn{toks} have not yet been assigned. There are
-% many cases. In \LaTeXe{} with no package, available \tn{toks} range
-% from $\tn{count}15+1$ to \cs{c_max_register_int} included (this was
-% not altered despite the 2015 changes). When \tn{loctoks} is
-% defined, namely in plain (e)\TeX{}, or when the package \pkg{etex}
-% is loaded in \LaTeXe{}, redefine \cs{@@_compute_range:} to use the
-% range $\tn{count}265$ to $\tn{count}275-1$. The \pkg{elocalloc}
-% package also defines \tn{loctoks} but uses yet another number for
-% the upper bound, namely \cs{e@alloc@top} (minus one). We must check
-% for \tn{loctoks} every time a sorting function is called, as
-% \pkg{etex} or \pkg{elocalloc} could be loaded.
-%
-% In \ConTeXt{} MkIV the range is from
-% $|\c_syst_last_allocated_toks|+1$ to \cs{c_max_register_int}, and in
-% MkII it is from $|\lastallocatedtoks|+1$ to \cs{c_max_register_int}.
-% In all these cases, call \cs{@@_shrink_range:}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_compute_range:
- {
- \int_set:Nn \l_@@_min_int { \tex_count:D 15 + 1 }
- \int_set:Nn \l_@@_true_max_int { \c_max_register_int + 1 }
- \@@_shrink_range:
- \if_meaning:w \loctoks \tex_undefined:D \else:
- \if_meaning:w \loctoks \scan_stop: \else:
- \@@_redefine_compute_range:
- \@@_compute_range:
- \fi:
- \fi:
- }
-\cs_new_protected:Npn \@@_redefine_compute_range:
- {
- \cs_if_exist:cTF { ver@elocalloc.sty }
- {
- \cs_gset_protected:Npn \@@_compute_range:
- {
- \int_set:Nn \l_@@_min_int { \tex_count:D 265 }
- \int_set_eq:NN \l_@@_true_max_int \e@alloc@top
- \@@_shrink_range:
- }
- }
- {
- \cs_gset_protected:Npn \@@_compute_range:
- {
- \int_set:Nn \l_@@_min_int { \tex_count:D 265 }
- \int_set:Nn \l_@@_true_max_int { \tex_count:D 275 }
- \@@_shrink_range:
- }
- }
- }
-\cs_if_exist:NT \loctoks { \@@_redefine_compute_range: }
-\tl_map_inline:nn { \lastallocatedtoks \c_syst_last_allocated_toks }
- {
- \cs_if_exist:NT #1
- {
- \cs_gset_protected:Npn \@@_compute_range:
- {
- \int_set:Nn \l_@@_min_int { #1 + 1 }
- \int_set:Nn \l_@@_true_max_int { \c_max_register_int + 1 }
- \@@_shrink_range:
- }
- }
- }
-% \end{macrocode}
-% \end{variable}
-% \end{macro}
-%
-% \subsection{Protected user commands}
-%
-% \begin{macro}{\@@_main:NNNn}
-% Sorting happens in three steps. First store items in \tn{toks}
-% registers ranging from \cs{l_@@_min_int} to $\cs{l_@@_top_int}-1$,
-% while checking that the list is not too long. If we reach the
-% maximum length, that's an error; exit the group. Secondly, sort the
-% array of \tn{toks} registers, using the user-defined sorting
-% function: \cs{@@_level:} calls \cs{@@_compare:nn} as needed.
-% Finally, unpack the \tn{toks} registers (now sorted) into the target
-% tl, or into \cs{g_@@_internal_seq} for seq and clist. This is done
-% by \cs{@@_seq:NNNNn} and \cs{@@_tl:NNn}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_main:NNNn #1#2#3#4
- {
- \@@_disable_toksdef:
- \@@_compute_range:
- \int_set_eq:NN \l_@@_top_int \l_@@_min_int
- #1 #3
- {
- \if_int_compare:w \l_@@_top_int = \l_@@_max_int
- \@@_too_long_error:NNw #2 #3
- \fi:
- \tex_toks:D \l_@@_top_int {##1}
- \int_incr:N \l_@@_top_int
- }
- \int_set:Nn \l_@@_length_int
- { \l_@@_top_int - \l_@@_min_int }
- \cs_set:Npn \@@_compare:nn ##1 ##2 {#4}
- \int_set:Nn \l_@@_block_int { 1 }
- \@@_level:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\tl_sort:Nn, \tl_sort:cn, \tl_gsort:Nn, \tl_gsort:cn}
-% \begin{macro}{\@@_tl:NNn}
-% \begin{macro}[EXP]{\@@_tl_toks:w}
-% Call the main sorting function then unpack \tn{toks} registers
-% outside the group into the target token list. The unpacking is done
-% by \cs{@@_tl_toks:w}; registers are numbered from \cs{l_@@_min_int}
-% to $\cs{l_@@_top_int}-1$. For expansion behaviour we need a couple
-% of primitives. The \cs{tl_gclear:N} reduces memory usage. The
-% \cs{prg_break_point:} is used by \cs{@@_main:NNNn} when the list is
-% too long.
-% \begin{macrocode}
-\cs_new_protected:Npn \tl_sort:Nn { \@@_tl:NNn \tl_set_eq:NN }
-\cs_generate_variant:Nn \tl_sort:Nn { c }
-\cs_new_protected:Npn \tl_gsort:Nn { \@@_tl:NNn \tl_gset_eq:NN }
-\cs_generate_variant:Nn \tl_gsort:Nn { c }
-\cs_new_protected:Npn \@@_tl:NNn #1#2#3
- {
- \group_begin:
- \@@_main:NNNn \tl_map_inline:Nn \tl_map_break:n #2 {#3}
- \__kernel_tl_gset:Nx \g_@@_internal_tl
- { \@@_tl_toks:w \l_@@_min_int ; }
- \group_end:
- #1 #2 \g_@@_internal_tl
- \tl_gclear:N \g_@@_internal_tl
- \prg_break_point:
- }
-\cs_new:Npn \@@_tl_toks:w #1 ;
- {
- \if_int_compare:w #1 < \l_@@_top_int
- { \tex_the:D \tex_toks:D #1 }
- \exp_after:wN \@@_tl_toks:w
- \int_value:w \int_eval:n { #1 + 1 } \exp_after:wN ;
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\seq_sort:Nn, \seq_sort:cn, \seq_gsort:Nn, \seq_gsort:cn}
-% \begin{macro}{\clist_sort:Nn, \clist_sort:cn, \clist_gsort:Nn, \clist_gsort:cn}
-% \begin{macro}{\@@_seq:NNNNn}
-% Use the same general framework for seq and clist. Apply the general
-% sorting code, then unpack \tn{toks} into \cs{g_@@_internal_seq}.
-% Outside the group copy or convert (for clist) the data to the target
-% variable. The \cs{seq_gclear:N} reduces memory usage. The
-% \cs{prg_break_point:} is used by \cs{@@_main:NNNn} when the list is
-% too long.
-% \begin{macrocode}
-\cs_new_protected:Npn \seq_sort:Nn
- { \@@_seq:NNNNn \seq_map_inline:Nn \seq_map_break:n \seq_set_eq:NN }
-\cs_generate_variant:Nn \seq_sort:Nn { c }
-\cs_new_protected:Npn \seq_gsort:Nn
- { \@@_seq:NNNNn \seq_map_inline:Nn \seq_map_break:n \seq_gset_eq:NN }
-\cs_generate_variant:Nn \seq_gsort:Nn { c }
-\cs_new_protected:Npn \clist_sort:Nn
- {
- \@@_seq:NNNNn \clist_map_inline:Nn \clist_map_break:n
- \clist_set_from_seq:NN
- }
-\cs_generate_variant:Nn \clist_sort:Nn { c }
-\cs_new_protected:Npn \clist_gsort:Nn
- {
- \@@_seq:NNNNn \clist_map_inline:Nn \clist_map_break:n
- \clist_gset_from_seq:NN
- }
-\cs_generate_variant:Nn \clist_gsort:Nn { c }
-\cs_new_protected:Npn \@@_seq:NNNNn #1#2#3#4#5
- {
- \group_begin:
- \@@_main:NNNn #1 #2 #4 {#5}
- \seq_gclear:N \g_@@_internal_seq
- \int_step_inline:nnn
- \l_@@_min_int { \l_@@_top_int - 1 }
- {
- \seq_gput_right:Ne \g_@@_internal_seq
- { \tex_the:D \tex_toks:D ##1 }
- }
- \group_end:
- #3 #4 \g_@@_internal_seq
- \seq_gclear:N \g_@@_internal_seq
- \prg_break_point:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Merge sort}
-%
-% \begin{macro}{\@@_level:}
-% This function is called once blocks of size \cs{l_@@_block_int}
-% (initially $1$) are each sorted. If the whole list fits in one
-% block, then we are done (this also takes care of the case of an
-% empty list or a list with one item). Otherwise, go through pairs
-% of blocks starting from $0$, then double the block size, and repeat.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_level:
- {
- \if_int_compare:w \l_@@_block_int < \l_@@_length_int
- \l_@@_end_int \l_@@_min_int
- \@@_merge_blocks:
- \tex_advance:D \l_@@_block_int \l_@@_block_int
- \exp_after:wN \@@_level:
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_merge_blocks:}
-% This function is called to merge a pair of blocks, starting at
-% the last value of \cs{l_@@_end_int} (end-point of the previous
-% pair of blocks). If shifting by one block to the right we reach
-% the end of the list, then this pass has ended: the end of the
-% list is sorted already. Otherwise, store the result of that shift in $A$,
-% which indexes the first block starting from the top end.
-% Then locate the end-point (maximum) of the second block: shift
-% \texttt{end} upwards by one more block, but keeping it
-% $\leq\texttt{top}$. Copy this upper block of \tn{toks}
-% registers in registers above \texttt{length}, indexed by $C$:
-% this is covered by \cs{@@_copy_block:}. Once this is done we
-% are ready to do the actual merger using \cs{@@_merge_blocks_aux:},
-% after shifting $A$, $B$ and $C$ so that they point to the largest
-% index in their respective ranges rather than pointing just beyond
-% those ranges. Of course, once that pair of blocks is merged,
-% move on to the next pair.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_merge_blocks:
- {
- \l_@@_begin_int \l_@@_end_int
- \tex_advance:D \l_@@_end_int \l_@@_block_int
- \if_int_compare:w \l_@@_end_int < \l_@@_top_int
- \l_@@_A_int \l_@@_end_int
- \tex_advance:D \l_@@_end_int \l_@@_block_int
- \if_int_compare:w \l_@@_end_int > \l_@@_top_int
- \l_@@_end_int \l_@@_top_int
- \fi:
- \l_@@_B_int \l_@@_A_int
- \l_@@_C_int \l_@@_top_int
- \@@_copy_block:
- \int_decr:N \l_@@_A_int
- \int_decr:N \l_@@_B_int
- \int_decr:N \l_@@_C_int
- \exp_after:wN \@@_merge_blocks_aux:
- \exp_after:wN \@@_merge_blocks:
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_copy_block:}
-% We wish to store a copy of the \enquote{upper} block of
-% \tn{toks} registers, ranging between the initial value of
-% \cs{l_@@_B_int} (included) and \cs{l_@@_end_int}
-% (excluded) into a new range starting at the initial value
-% of \cs{l_@@_C_int}, namely \cs{l_@@_top_int}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_copy_block:
- {
- \tex_toks:D \l_@@_C_int \tex_toks:D \l_@@_B_int
- \int_incr:N \l_@@_C_int
- \int_incr:N \l_@@_B_int
- \if_int_compare:w \l_@@_B_int = \l_@@_end_int
- \use_i:nn
- \fi:
- \@@_copy_block:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_merge_blocks_aux:}
-% At this stage, the first block starts at \cs{l_@@_begin_int},
-% and ends at \cs{l_@@_A_int}, and the second block starts at
-% \cs{l_@@_top_int} and ends at \cs{l_@@_C_int}. The result
-% of the merger is stored at positions indexed by \cs{l_@@_B_int},
-% which starts at $\cs{l_@@_end_int}-1$ and decreases down to
-% \cs{l_@@_begin_int}, covering the full range of the two blocks.
-% In other words, we are building the merger starting with the
-% largest values.
-% The comparison function is defined to return either
-% \texttt{swapped} or \texttt{same}. Of course, this
-% means the arguments need to be given in the order they
-% appear originally in the list.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_merge_blocks_aux:
- {
- \exp_after:wN \@@_compare:nn \exp_after:wN
- { \tex_the:D \tex_toks:D \exp_after:wN \l_@@_A_int \exp_after:wN }
- \exp_after:wN { \tex_the:D \tex_toks:D \l_@@_C_int }
- \prg_do_nothing:
- \@@_return_mark:w
- \@@_return_mark:w
- \s_@@_mark
- \@@_return_none_error:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\sort_return_same:, \sort_return_swapped:}
-% \begin{macro}{\@@_return_mark:w}
-% \begin{macro}{\@@_return_none_error:, \@@_return_two_error:}
-% Each comparison should call \cs{sort_return_same:} or
-% \cs{sort_return_swapped:} exactly once. If neither is called,
-% \cs{@@_return_none_error:} is called, since the \texttt{return_mark}
-% removes tokens until \cs{s_@@_mark}. If one is called, the
-% \texttt{return_mark} auxiliary removes everything except
-% \cs{@@_return_same:w} (or its \texttt{swapped} analogue) followed by
-% \cs{@@_return_none_error:}. Finally if two or more are called,
-% \cs{@@_return_two_error:} ends up before any \cs{@@_return_mark:w},
-% so that it produces an error.
-% \begin{macrocode}
-\cs_new_protected:Npn \sort_return_same:
- #1 \@@_return_mark:w #2 \s_@@_mark
- {
- #1
- #2
- \@@_return_two_error:
- \@@_return_mark:w
- \s_@@_mark
- \@@_return_same:w
- }
-\cs_new_protected:Npn \sort_return_swapped:
- #1 \@@_return_mark:w #2 \s_@@_mark
- {
- #1
- #2
- \@@_return_two_error:
- \@@_return_mark:w
- \s_@@_mark
- \@@_return_swapped:w
- }
-\cs_new_protected:Npn \@@_return_mark:w #1 \s_@@_mark { }
-\cs_new_protected:Npn \@@_return_none_error:
- {
- \msg_error:nnee { sort } { return-none }
- { \tex_the:D \tex_toks:D \l_@@_A_int }
- { \tex_the:D \tex_toks:D \l_@@_C_int }
- \@@_return_same:w \@@_return_none_error:
- }
-\cs_new_protected:Npn \@@_return_two_error:
- {
- \msg_error:nnee { sort } { return-two }
- { \tex_the:D \tex_toks:D \l_@@_A_int }
- { \tex_the:D \tex_toks:D \l_@@_C_int }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_return_same:w}
-% If the comparison function returns \texttt{same},
-% then the second argument fed to \cs{@@_compare:nn}
-% should remain to the right of the other one. Since
-% we build the merger starting from the right, we copy
-% that \tn{toks} register into the allotted range, then
-% shift the pointers $B$ and $C$, and go on to do one
-% more step in the merger, unless the second block has
-% been exhausted: then the remainder of the first block
-% is already in the correct registers and we are done
-% with merging those two blocks.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_return_same:w #1 \@@_return_none_error:
- {
- \tex_toks:D \l_@@_B_int \tex_toks:D \l_@@_C_int
- \int_decr:N \l_@@_B_int
- \int_decr:N \l_@@_C_int
- \if_int_compare:w \l_@@_C_int < \l_@@_top_int
- \use_i:nn
- \fi:
- \@@_merge_blocks_aux:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_return_swapped:w}
-% If the comparison function returns \texttt{swapped},
-% then the next item to add to the merger is the first
-% argument, contents of the \tn{toks} register $A$.
-% Then shift the pointers $A$ and $B$ to the left, and
-% go for one more step for the merger, unless the left
-% block was exhausted ($A$ goes below the threshold).
-% In that case, all remaining \tn{toks} registers in
-% the second block, indexed by $C$, are copied
-% to the merger by \cs{@@_merge_blocks_end:}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_return_swapped:w #1 \@@_return_none_error:
- {
- \tex_toks:D \l_@@_B_int \tex_toks:D \l_@@_A_int
- \int_decr:N \l_@@_B_int
- \int_decr:N \l_@@_A_int
- \if_int_compare:w \l_@@_A_int < \l_@@_begin_int
- \@@_merge_blocks_end: \use_i:nn
- \fi:
- \@@_merge_blocks_aux:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_merge_blocks_end:}
-% This function's task is to copy the \tn{toks} registers
-% in the block indexed by $C$ to the merger indexed by $B$.
-% The end can equally be detected by checking when $B$ reaches
-% the threshold \texttt{begin}, or when $C$ reaches
-% \texttt{top}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_merge_blocks_end:
- {
- \tex_toks:D \l_@@_B_int \tex_toks:D \l_@@_C_int
- \int_decr:N \l_@@_B_int
- \int_decr:N \l_@@_C_int
- \if_int_compare:w \l_@@_B_int < \l_@@_begin_int
- \use_i:nn
- \fi:
- \@@_merge_blocks_end:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Expandable sorting}
-%
-% Sorting expandably is very different from sorting and assigning to a
-% variable. Since tokens cannot be stored, they must remain in the
-% input stream, and be read through at every step. It is thus
-% necessarily much slower (at best $O(n^2\ln n)$) than non-expandable
-% sorting functions ($O(n\ln n)$).
-%
-% A prototypical version of expandable quicksort is as follows. If the
-% argument has no item, return nothing, otherwise partition, using the
-% first item as a pivot (argument |#4| of \cs{@@:nnNnn}). The
-% arguments of \cs{@@:nnNnn} are 1.~items less than |#4|, 2.~items
-% greater or equal to |#4|, 3.~comparison, 4.~pivot, 5.~next item to
-% test. If |#5| is the tail of the list, call \cs{tl_sort:nN} on |#1|
-% and on |#2|, placing |#4| in between; |\use:ff| expands the parts to
-% make \cs{tl_sort:nN} \texttt{f}-expandable. Otherwise, compare |#4|
-% and |#5| using |#3|. If they are ordered, place |#5| amongst the
-% \enquote{greater} items, otherwise amongst the \enquote{lesser} items,
-% and continue partitioning.
-% \begin{verbatim}
-% \cs_new:Npn \tl_sort:nN #1#2
-% {
-% \tl_if_blank:nF {#1}
-% {
-% \__sort:nnNnn { } { } #2
-% #1 \q__sort_recursion_tail \q__sort_recursion_stop
-% }
-% }
-% \cs_new:Npn \__sort:nnNnn #1#2#3#4#5
-% {
-% \quark_if_recursion_tail_stop_do:nn {#5}
-% { \use:ff { \tl_sort:nN {#1} #3 {#4} } { \tl_sort:nN {#2} #3 } }
-% #3 {#4} {#5}
-% { \__sort:nnNnn {#1} { #2 {#5} } #3 {#4} }
-% { \__sort:nnNnn { #1 {#5} } {#2} #3 {#4} }
-% }
-% \cs_generate_variant:Nn \use:nn { ff }
-% \end{verbatim}
-% There are quite a few optimizations available here: the code below is
-% less legible, but more than twice as fast.
-%
-% In the simple version of the code, \cs{@@:nnNnn} is called
-% \(O(n\ln n)\) times on average (the number of comparisons required by
-% the quicksort algorithm). Hence most of our focus is on
-% optimizing that function.
-%
-% The first speed up is to avoid testing for the end of the list at
-% every call to \cs{@@:nnNnn}. For this, the list is prepared by
-% changing each \meta{item} of the original token list into
-% \meta{command} \Arg{item}, just like sequences are stored. We arrange
-% things such that the \meta{command} is the \meta{conditional} provided
-% by the user: the loop over the \meta{prepared tokens} then looks like
-% \begin{quote}
-% \ttfamily
-% \cs{cs_new:Npn}~\cs{@@_loop:wNn}~\ldots{}~|#6#7|\\
-% ~~|{|\\
-% ~~~~|#6|~\Arg{pivot}~|{#7}|~\meta{loop big}~\meta{loop small}\\
-% ~~~~~~\meta{extra arguments}\\
-% ~~|}|\\
-% \cs{@@_loop:wNn}~\ldots{}~\meta{prepared tokens}\\
-% ~~\meta{end-loop}~|{}|~\cs{s_@@_stop}
-% \end{quote}
-% In this example, which matches the structure of
-% \cs{@@_quick_split_i:NnnnnNn} and a few other functions below, the
-% \cs{@@_loop:wNn} auxiliary normally receives the user's
-% \meta{conditional} as~|#6| and an \meta{item} as~|#7|. This is
-% compared to the \meta{pivot} (the argument~|#5|, not shown here), and
-% the \meta{conditional} leaves the \meta{loop big} or \meta{loop small}
-% auxiliary, which both have the same form as \cs{@@_loop:wNn},
-% receiving the next pair \meta{conditional} \Arg{item} as |#6|
-% and~|#7|. At the end, |#6| is the \meta{end-loop} function, which
-% terminates the loop.
-%
-% The second speed up is to minimize the duplicated tokens between the
-% \texttt{true} and \texttt{false} branches of the conditional. For
-% this, we introduce two versions of \cs{@@:nnNnn}, which receive
-% the new item as~|#1| and place it either into the list~|#2| of items
-% less than the pivot~|#4| or into the list~|#3| of items greater or
-% equal to the pivot.
-% \begin{verbatim}
-% \cs_new:Npn \__sort_i:nnnnNn #1#2#3#4#5#6
-% {
-% #5 {#4} {#6} \__sort_ii:nnnnNn \__sort_i:nnnnNn
-% {#6} { #2 {#1} } {#3} {#4}
-% }
-% \cs_new:Npn \__sort_ii:nnnnNn #1#2#3#4#5#6
-% {
-% #5 {#4} {#6} \__sort_ii:nnnnNn \__sort_i:nnnnNn
-% {#6} {#2} { #3 {#1} } {#4}
-% }
-% \end{verbatim}
-% Note that the two functions have the form of \cs{@@_loop:wNn} above,
-% receiving as~|#5| the conditional or a function to end the loop. In
-% fact, the lists~|#2| and~|#3| must be made of pairs \meta{conditional}
-% \Arg{item}, so we have to replace~|{#6}| above by |{|~|#5|~|{#6}|~|}|,
-% and |{#1}|~by~|#1|. The actual functions have one more argument, so
-% all argument numbers are shifted compared to this code.
-%
-% The third speed up is to avoid |\use:ff| using a continuation-passing
-% style: \cs{@@_quick_split:NnNn} expects a list followed by
-% \cs{s_@@_mark} \Arg{code}, and expands to \meta{code} \meta{sorted list}.
-% Sorting the two parts of the list around the pivot is done with
-% \begin{quote}
-% \ttfamily
-% \cs{@@_quick_split:NnNn} |#2| \ldots{} \cs{s_@@_mark}\\
-% ~~|{|\\
-% ~~~~\cs{@@_quick_split:NnNn} |#1| \ldots{} \cs{s_@@_mark} \Arg{code}\\
-% ~~~~\Arg{pivot}\\
-% ~~|}|
-% \end{quote}
-% Items which are larger than the \meta{pivot} are sorted, then placed
-% after code that sorts the smaller items, and after the (braced)
-% \meta{pivot}.
-%
-% The fourth speed up is avoid the recursive call to \cs{tl_sort:nN}
-% with an empty first argument. For this, we introduce functions
-% similar to the \cs{@@_i:nnnnNn} of the last example, but aware of
-% whether the list of \meta{conditional} \Arg{item} read so far that are
-% less than the pivot, and the list of those greater or equal, are empty
-% or not: see \cs{@@_quick_split:NnNn} and functions defined below.
-% Knowing whether the lists are empty or not is useless if we do not use
-% distinct ending codes as appropriate. The splitting auxiliaries
-% communicate to the \meta{end-loop} function (that is initially placed
-% after the ``prepared'' list) by placing a specific ending function,
-% ignored when looping, but useful at the end. In fact, the
-% \meta{end-loop} function does nothing but place the appropriate ending
-% function in front of all its arguments. The ending functions take
-% care of sorting non-empty sublists, placing the pivot in between, and
-% the continuation before.
-%
-% The final change in fact slows down the code a little, but is required
-% to avoid memory issues: schematically, when \TeX{} encounters
-% \begin{verbatim}
-% \use:n { \use:n { \use:n { ... } ... } ... }
-% \end{verbatim}
-% the argument of the first \cs{use:n} is not completely read by the
-% second \cs{use:n}, hence must remain in memory; then the argument of
-% the second \cs{use:n} is not completely read when grabbing the
-% argument of the third \cs{use:n}, hence must remain in memory, and so
-% on. The memory consumption grows quadratically with the number of
-% nested \cs{use:n}. In practice, this means that we must read
-% everything until a trailing \cs{s_@@_stop} once in a while, otherwise
-% sorting lists of more than a few thousand items would exhaust a
-% typical \TeX{}'s memory.
-%
-% \begin{macro}[EXP]{\tl_sort:nN}
-% \begin{macro}[EXP]
-% {
-% \@@_quick_prepare:Nnnn,
-% \@@_quick_prepare_end:NNNnw,
-% \@@_quick_cleanup:w
-% }
-% The code within the \cs{exp_not:f} sorts the list, leaving in most
-% cases a leading \cs{exp_not:f}, which stops the expansion, letting
-% the result be return within \cs{exp_not:n}. We filter out the case
-% of a list with no item, which would otherwise cause problems. Then
-% prepare the token list~|#1| by inserting the conditional~|#2| before
-% each item. The \texttt{prepare} auxiliary receives the conditional
-% as~|#1|, the prepared token list so far as~|#2|, the next prepared
-% item as~|#3|, and the item after that as~|#4|. The loop ends
-% when~|#4| contains \cs{prg_break_point:}, then the
-% \texttt{prepare_end} auxiliary finds the prepared token list
-% as~|#4|. The scene is then set up for \cs{@@_quick_split:NnNn},
-% which sorts the prepared list and perform the post action placed
-% after \cs{s_@@_mark}, namely removing the trailing \cs{s_@@_stop} and
-% \cs{s_@@_stop} and leaving \cs{exp_stop_f:} to stop
-% \texttt{f}-expansion.
-% \begin{macrocode}
-\cs_new:Npn \tl_sort:nN #1#2
- {
- \exp_not:f
- {
- \tl_if_blank:nF {#1}
- {
- \@@_quick_prepare:Nnnn #2 { } { }
- #1
- { \prg_break_point: \@@_quick_prepare_end:NNNnw }
- \s_@@_stop
- }
- }
- }
-\cs_new:Npn \@@_quick_prepare:Nnnn #1#2#3#4
- {
- \prg_break: #4 \prg_break_point:
- \@@_quick_prepare:Nnnn #1 { #2 #3 } { #1 {#4} }
- }
-\cs_new:Npn \@@_quick_prepare_end:NNNnw #1#2#3#4#5 \s_@@_stop
- {
- \@@_quick_split:NnNn #4 \@@_quick_end:nnTFNn { }
- \s_@@_mark { \@@_quick_cleanup:w \exp_stop_f: }
- \s_@@_mark \s_@@_stop
- }
-\cs_new:Npn \@@_quick_cleanup:w #1 \s_@@_mark \s_@@_stop {#1}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {
-% \@@_quick_split:NnNn,
-% \@@_quick_only_i:NnnnnNn,
-% \@@_quick_only_ii:NnnnnNn,
-% \@@_quick_split_i:NnnnnNn,
-% \@@_quick_split_ii:NnnnnNn
-% }
-% The \texttt{only_i}, \texttt{only_ii}, \texttt{split_i} and
-% \texttt{split_ii} auxiliaries receive a useless first argument, the
-% new item~|#2| (that they append to either one of the next two
-% arguments), the list~|#3| of items less than the pivot, bigger
-% items~|#4|, the pivot~|#5|, a \meta{function}~|#6|, and an
-% item~|#7|. The \meta{function} is the user's \meta{conditional}
-% except at the end of the list where it is
-% \cs{@@_quick_end:nnTFNn}. The comparison is applied to the
-% \meta{pivot} and the \meta{item}, and calls the \texttt{only_i} or
-% \texttt{split_i} auxiliaries if the \meta{item} is smaller, and the
-% \texttt{only_ii} or \texttt{split_ii} auxiliaries otherwise. In
-% both cases, the next auxiliary goes to work right away, with no
-% intermediate expansion that would slow down operations. Note that
-% the argument~|#2| left for the next call has the form
-% \meta{conditional} \Arg{item}, so that the lists~|#3| and~|#4| keep
-% the right form to be fed to the next sorting function.
-% The \texttt{split} auxiliary differs from these in that it is
-% missing three of the arguments, which would be empty, and its first
-% argument is always the user's \meta{conditional} rather than an
-% ending function.
-% \begin{macrocode}
-\cs_new:Npn \@@_quick_split:NnNn #1#2#3#4
- {
- #3 {#2} {#4} \@@_quick_only_ii:NnnnnNn
- \@@_quick_only_i:NnnnnNn
- \@@_quick_single_end:nnnwnw
- { #3 {#4} } { } { } {#2}
- }
-\cs_new:Npn \@@_quick_only_i:NnnnnNn #1#2#3#4#5#6#7
- {
- #6 {#5} {#7} \@@_quick_split_ii:NnnnnNn
- \@@_quick_only_i:NnnnnNn
- \@@_quick_only_i_end:nnnwnw
- { #6 {#7} } { #3 #2 } { } {#5}
- }
-\cs_new:Npn \@@_quick_only_ii:NnnnnNn #1#2#3#4#5#6#7
- {
- #6 {#5} {#7} \@@_quick_only_ii:NnnnnNn
- \@@_quick_split_i:NnnnnNn
- \@@_quick_only_ii_end:nnnwnw
- { #6 {#7} } { } { #4 #2 } {#5}
- }
-\cs_new:Npn \@@_quick_split_i:NnnnnNn #1#2#3#4#5#6#7
- {
- #6 {#5} {#7} \@@_quick_split_ii:NnnnnNn
- \@@_quick_split_i:NnnnnNn
- \@@_quick_split_end:nnnwnw
- { #6 {#7} } { #3 #2 } {#4} {#5}
- }
-\cs_new:Npn \@@_quick_split_ii:NnnnnNn #1#2#3#4#5#6#7
- {
- #6 {#5} {#7} \@@_quick_split_ii:NnnnnNn
- \@@_quick_split_i:NnnnnNn
- \@@_quick_split_end:nnnwnw
- { #6 {#7} } {#3} { #4 #2 } {#5}
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {
-% \@@_quick_end:nnTFNn,
-% \@@_quick_single_end:nnnwnw,
-% \@@_quick_only_i_end:nnnwnw,
-% \@@_quick_only_ii_end:nnnwnw,
-% \@@_quick_split_end:nnnwnw,
-% }
-% The \cs{@@_quick_end:nnTFNn} appears instead of the user's
-% conditional, and receives as its arguments the pivot~|#1|, a fake
-% item~|#2|, a \texttt{true} and a \texttt{false} branches |#3|
-% and~|#4|, followed by an ending function~|#5| (one of the four
-% auxiliaries here) and another copy~|#6| of the fake item. All those
-% are discarded except the function~|#5|. This function receives
-% lists~|#1| and~|#2| of items less than or greater than the
-% pivot~|#3|, then a continuation code~|#5| just after \cs{s_@@_mark}.
-% To avoid a memory problem described earlier, all of the ending
-% functions read~|#6| until \cs{s_@@_stop} and place~|#6| back into the
-% input stream. When the lists |#1| and~|#2| are empty, the
-% \texttt{single} auxiliary simply places the continuation~|#5| before
-% the pivot~|{#3}|. When |#2|~is empty, |#1|~is sorted and placed
-% before the pivot~|{#3}|, taking care to feed the continuation~|#5|
-% as a continuation for the function sorting~|#1|. When |#1|~is
-% empty, |#2|~is sorted, and the continuation argument is used to
-% place the continuation~|#5| and the pivot~|{#3}| before the sorted
-% result. Finally, when both lists are non-empty, items larger than
-% the pivot are sorted, then items less than the pivot, and the
-% continuations are done in such a way to place the pivot in between.
-% \begin{macrocode}
-\cs_new:Npn \@@_quick_end:nnTFNn #1#2#3#4#5#6 {#5}
-\cs_new:Npn \@@_quick_single_end:nnnwnw #1#2#3#4 \s_@@_mark #5#6 \s_@@_stop
- { #5 {#3} #6 \s_@@_stop }
-\cs_new:Npn \@@_quick_only_i_end:nnnwnw #1#2#3#4 \s_@@_mark #5#6 \s_@@_stop
- {
- \@@_quick_split:NnNn #1
- \@@_quick_end:nnTFNn { } \s_@@_mark {#5}
- {#3}
- #6 \s_@@_stop
- }
-\cs_new:Npn \@@_quick_only_ii_end:nnnwnw #1#2#3#4 \s_@@_mark #5#6 \s_@@_stop
- {
- \@@_quick_split:NnNn #2
- \@@_quick_end:nnTFNn { } \s_@@_mark { #5 {#3} }
- #6 \s_@@_stop
- }
-\cs_new:Npn \@@_quick_split_end:nnnwnw #1#2#3#4 \s_@@_mark #5#6 \s_@@_stop
- {
- \@@_quick_split:NnNn #2 \@@_quick_end:nnTFNn { } \s_@@_mark
- {
- \@@_quick_split:NnNn #1
- \@@_quick_end:nnTFNn { } \s_@@_mark {#5}
- {#3}
- }
- #6 \s_@@_stop
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Messages}
-%
-% \begin{macro}{\@@_error:}
-% Bailing out of the sorting code is a bit tricky. It may not be safe
-% to use a delimited argument, so instead we redefine many
-% \pkg{l3sort} commands to be trivial, with \cs{@@_level:} jumping to
-% the break point. This error recovery won't work in a group.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_error:
- {
- \cs_set_eq:NN \@@_merge_blocks_aux: \prg_do_nothing:
- \cs_set_eq:NN \@@_merge_blocks: \prg_do_nothing:
- \cs_set_protected:Npn \@@_level: { \group_end: \prg_break: }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_disable_toksdef:, \@@_disabled_toksdef:n}
-% While sorting, \tn{toksdef} is locally disabled to prevent users
-% from using \tn{newtoks} or similar commands in their comparison
-% code: the \tn{toks} registers that would be assigned are in use by
-% \pkg{l3sort}. In format mode, none of this is needed since there is
-% no \tn{toks} allocator.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_disable_toksdef:
- { \cs_set_eq:NN \toksdef \@@_disabled_toksdef:n }
-\cs_new_protected:Npn \@@_disabled_toksdef:n #1
- {
- \msg_error:nne { sort } { toksdef }
- { \token_to_str:N #1 }
- \@@_error:
- \tex_toksdef:D #1
- }
-\msg_new:nnnn { sort } { toksdef }
- { Allocation~of~\iow_char:N\\toks~registers~impossible~while~sorting. }
- {
- The~comparison~code~used~for~sorting~a~list~has~attempted~to~
- define~#1~as~a~new~\iow_char:N\\toks~register~using~
- \iow_char:N\\newtoks~
- or~a~similar~command.~The~list~will~not~be~sorted.
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_too_long_error:NNw}
-% When there are too many items in a sequence, this is an error, and
-% we clean up properly the mapping over items in the list: break using
-% the type-specific breaking function |#1|.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_too_long_error:NNw #1#2 \fi:
- {
- \fi:
- \msg_error:nneee { sort } { too-large }
- { \token_to_str:N #2 }
- { \int_eval:n { \l_@@_true_max_int - \l_@@_min_int } }
- { \int_eval:n { \l_@@_top_int - \l_@@_min_int } }
- #1 \@@_error:
- }
-\msg_new:nnnn { sort } { too-large }
- { The~list~#1~is~too~long~to~be~sorted~by~TeX. }
- {
- TeX~has~#2~toks~registers~still~available:~
- this~only~allows~to~sort~with~up~to~#3~
- items.~The~list~will~not~be~sorted.
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-\msg_new:nnnn { sort } { return-none }
- { The~comparison~code~did~not~return. }
- {
- When~sorting~a~list,~the~code~to~compare~items~#1~and~#2~
- did~not~call~
- \iow_char:N\\sort_return_same: ~nor~
- \iow_char:N\\sort_return_swapped: .~
- Exactly~one~of~these~should~be~called.
- }
-\msg_new:nnnn { sort } { return-two }
- { The~comparison~code~returned~multiple~times. }
- {
- When~sorting~a~list,~the~code~to~compare~items~#1~and~#2~called~
- \iow_char:N\\sort_return_same: ~or~
- \iow_char:N\\sort_return_swapped: ~multiple~times.~
- Exactly~one~of~these~should~be~called.
- }
-\prop_gput:Nnn \g_msg_module_name_prop { sort } { LaTeX }
-\prop_gput:Nnn \g_msg_module_type_prop { sort } { }
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3str-convert.dtx b/macros/latex/contrib/l3kernel/l3str-convert.dtx
deleted file mode 100644
index be850b3109..0000000000
--- a/macros/latex/contrib/l3kernel/l3str-convert.dtx
+++ /dev/null
@@ -1,3566 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3str-convert.dtx
-%
-% Copyright (C) 2013-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-%
-% \title{^^A
-% The \pkg{l3str-convert} module\\ String encoding conversions^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \section{Encoding and escaping schemes}
-%
-% Traditionally, string encodings only specify how strings of characters
-% should be stored as bytes. However, the resulting lists of bytes are
-% often to be used in contexts where only a restricted subset of bytes
-% are permitted (\emph{e.g.}, \textsc{pdf} string objects,
-% \textsc{url}s). Hence, storing a string of characters is done in two
-% steps.
-% \begin{itemize}
-% \item The code points (\enquote{character codes}) are expressed as
-% bytes following a given \enquote{encoding}. This can be
-% \textsc{utf-16}, \textsc{iso 8859-1}, \emph{etc.} See
-% Table~\ref{tab:encodings} for a list of supported
-% encodings.\footnote{Encodings and escapings will be added as they
-% are requested.}
-% \item Bytes are translated to \TeX{} tokens through a given
-% \enquote{escaping}. Those are defined for the most part by the
-% \texttt{pdf} file format. See Table~\ref{tab:escapings} for a
-% list of escaping methods supported.\footnotemark[\csname c@footnote\endcsname]
-% \end{itemize}
-%
-% \begin{table}\centering
-% \caption{\label{tab:encodings}Supported encodings.
-% Non-alphanumeric characters are ignored,
-% and capital letters are lower-cased
-% before searching for the encoding in this list.}
-% \begin{tabular}{cc}
-% \toprule
-% \meta{Encoding} & description \\
-% \midrule
-% \texttt{utf8} & \textsc{utf-8} \\
-% \texttt{utf16} & \textsc{utf-16}, with byte-order mark \\
-% \texttt{utf16be} & \textsc{utf-16}, big-endian \\
-% \texttt{utf16le} & \textsc{utf-16}, little-endian \\
-% \texttt{utf32} & \textsc{utf-32}, with byte-order mark \\
-% \texttt{utf32be} & \textsc{utf-32}, big-endian \\
-% \texttt{utf32le} & \textsc{utf-32}, little-endian \\
-% \midrule
-% \texttt{iso88591}, \texttt{latin1} & \textsc{iso 8859-1} \\
-% \texttt{iso88592}, \texttt{latin2} & \textsc{iso 8859-2} \\
-% \texttt{iso88593}, \texttt{latin3} & \textsc{iso 8859-3} \\
-% \texttt{iso88594}, \texttt{latin4} & \textsc{iso 8859-4} \\
-% \texttt{iso88595} & \textsc{iso 8859-5} \\
-% \texttt{iso88596} & \textsc{iso 8859-6} \\
-% \texttt{iso88597} & \textsc{iso 8859-7} \\
-% \texttt{iso88598} & \textsc{iso 8859-8} \\
-% \texttt{iso88599}, \texttt{latin5} & \textsc{iso 8859-9} \\
-% \texttt{iso885910}, \texttt{latin6} & \textsc{iso 8859-10} \\
-% \texttt{iso885911} & \textsc{iso 8859-11} \\
-% \texttt{iso885913}, \texttt{latin7} & \textsc{iso 8859-13} \\
-% \texttt{iso885914}, \texttt{latin8} & \textsc{iso 8859-14} \\
-% \texttt{iso885915}, \texttt{latin9} & \textsc{iso 8859-15} \\
-% \texttt{iso885916}, \texttt{latin10} & \textsc{iso 8859-16} \\
-% \midrule
-% \texttt{clist} & comma-list of integers \\
-% \meta{empty} & native (Unicode) string \\
-% \texttt{default} & like \texttt{utf8} with 8-bit engines,
-% and like native with unicode-engines \\
-% \bottomrule
-% \end{tabular}
-% \end{table}
-%
-% \begin{table}\centering
-% \caption{\label{tab:escapings}Supported escapings.
-% Non-alphanumeric characters are ignored,
-% and capital letters are lower-cased
-% before searching for the escaping in this list.}
-% \begin{tabular}{cc}
-% \toprule
-% \meta{Escaping} & description \\
-% \midrule
-% \texttt{bytes}, or empty
-% & arbitrary bytes \\
-% \texttt{hex}, \texttt{hexadecimal}
-% & byte $=$ two hexadecimal digits \\
-% \texttt{name}
-% & see \tn{pdfescapename} \\
-% \texttt{string}
-% & see \tn{pdfescapestring} \\
-% \texttt{url}
-% & encoding used in \textsc{url}s \\
-% \bottomrule
-% \end{tabular}
-% \end{table}
-%
-% \section{Conversion functions}
-%
-% \begin{function}{\str_set_convert:Nnnn, \str_gset_convert:Nnnn}
-% \begin{syntax}
-% \cs{str_set_convert:Nnnn} \meta{str~var} \Arg{string} \Arg{name~1} \Arg{name~2}
-% \end{syntax}
-% This function converts the \meta{string} from the encoding given by
-% \meta{name~1} to the encoding given by \meta{name~2}, and stores the
-% result in the \meta{str~var}. Each \meta{name} can have the form
-% \meta{encoding} or \meta{encoding}\texttt{/}\meta{escaping}, where
-% the possible values of \meta{encoding} and \meta{escaping} are given
-% in Tables~\ref{tab:encodings} and~\ref{tab:escapings}, respectively.
-% The default escaping is to input and output bytes directly. The
-% special case of an empty \meta{name} indicates the use of
-% \enquote{native} strings, 8-bit for \pdfTeX{}, and Unicode strings
-% for the other two engines.
-%
-% For example,
-% \begin{verbatim}
-% \str_set_convert:Nnnn \l_foo_str { Hello! } { } { utf16/hex }
-% \end{verbatim}
-% results in the variable \cs[no-index]{l_foo_str} holding the string
-% \texttt{FEFF00480065006C006C006F0021}. This is obtained by
-% converting each character in the (native) string \texttt{Hello!} to
-% the \textsc{utf-16} encoding, and expressing each byte as a pair of
-% hexadecimal digits. Note the presence of a (big-endian) byte order
-% mark \hexnum{FEFF}, which can be avoided by specifying the encoding
-% \texttt{utf16be/hex}.
-%
-% An error is raised if the \meta{string} is not valid according to
-% the \meta{escaping~1} and \meta{encoding~1}, or if it cannot be
-% reencoded in the \meta{encoding~2} and \meta{escaping~2} (for
-% instance, if a character does not exist in the \meta{encoding~2}).
-% Erroneous input is replaced by the Unicode replacement character
-% \hexnum{FFFD}, and characters which cannot be reencoded are replaced
-% by either the replacement character \hexnum{FFFD} if it exists in
-% the \meta{encoding~2}, or an encoding-specific replacement
-% character, or the question mark character.
-% \end{function}
-%
-% \begin{function}[TF]{\str_set_convert:Nnnn, \str_gset_convert:Nnnn}
-% \begin{syntax}
-% \cs{str_set_convert:NnnnTF} \meta{str~var} \Arg{string} \Arg{name~1} \Arg{name~2} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% As \cs{str_set_convert:Nnnn}, converts the \meta{string} from the
-% encoding given by \meta{name~1} to the encoding given by
-% \meta{name~2}, and assigns the result to \meta{str~var}. Contrarily
-% to \cs{str_set_convert:Nnnn}, the conditional variant does not raise
-% errors in case the \meta{string} is not valid according to the
-% \meta{name~1} encoding, or cannot be expressed in the \meta{name~2}
-% encoding. Instead, the \meta{false code} is performed.
-% \end{function}
-%
-% \section{Conversion by expansion (for PDF contexts)}
-%
-% A small number of expandable functions are provided for use in PDF string/name
-% contexts. These \emph{assume UTF-8} and \emph{no escaping} in the input.
-%
-% \begin{function}[EXP]{\str_convert_pdfname:n}
-% \begin{syntax}
-% \cs{str_convert_pdfname:n} \meta{string}
-% \end{syntax}
-% As \cs{str_set_convert:Nnnn}, converts the \meta{string} on a byte-by-byte
-% basis with non-ASCII codepoints escaped using hashes.
-% \end{function}
-%
-% \section{Possibilities, and things to do}
-%
-% Encoding/escaping-related tasks.
-% \begin{itemize}
-% \item In \XeTeX{}/\LuaTeX{}, would it be better to use the
-% |^^^^....| approach to build a string from a given list of
-% character codes? Namely, within a group, assign |0-9a-f| and all
-% characters we want to category ``other'', then assign~|^| the
-% category superscript, and use \tn{scantokens}.
-% \item Change \cs{str_set_convert:Nnnn} to expand its last two
-% arguments.
-% \item Describe the internal format in the code comments. Refuse code
-% points in $[\hexnum{D800}, \hexnum{DFFF}]$ in the internal
-% representation?
-% \item Add documentation about each encoding and escaping method, and
-% add examples.
-% \item The \texttt{hex} unescaping should raise an error for
-% odd-token count strings.
-% \item Decide what bytes should be escaped in the \texttt{url}
-% escaping. Perhaps the characters |!'()*-./0123456789_| are safe,
-% and all other characters should be escaped?
-% \item Automate generation of 8-bit mapping files.
-% \item Change the framework for 8-bit encodings: for decoding from
-% 8-bit to Unicode, use $256$ integer registers; for encoding, use a
-% tree-box.
-% \item More encodings (see Heiko's \pkg{stringenc}). CESU?
-% \item More escapings: \textsc{ascii85}, shell escapes, lua escapes,
-% \emph{etc.}?
-% \end{itemize}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3str-convert} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=str>
-% \end{macrocode}
-%
-% \subsection{Helpers}
-%
-% \subsubsection{Variables and constants}
-%
-% \begin{macro}{\@@_tmp:w}
-% \begin{variable}{\l_@@_internal_tl}
-% Internal scratch space for some functions.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_tmp:w { }
-\tl_new:N \l_@@_internal_tl
-% \end{macrocode}
-% \end{variable}
-% \end{macro}
-%
-% \begin{variable}{\g_@@_result_tl}
-% The \cs{g_@@_result_tl} variable is used to hold the result of
-% various internal string operations (mostly conversions) which are
-% typically performed in a group. The variable is global so that it
-% remains defined outside the group, to be assigned to a user-provided
-% variable.
-% \begin{macrocode}
-\tl_new:N \g_@@_result_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\c_@@_replacement_char_int}
-% When converting, invalid bytes are replaced by the Unicode
-% replacement character \hexnum{FFFD}.
-% \begin{macrocode}
-\int_const:Nn \c_@@_replacement_char_int { "FFFD }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\c_@@_max_byte_int}
-% The maximal byte number.
-% \begin{macrocode}
-\int_const:Nn \c_@@_max_byte_int { 255 }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\s_@@}
-% Internal scan marks.
-% \begin{macrocode}
-\scan_new:N \s_@@
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\q_@@_nil}
-% Internal quarks.
-% \begin{macrocode}
-\quark_new:N \q_@@_nil
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\g_@@_alias_prop}
-% To avoid needing one file per encoding/escaping alias, we keep track
-% of those in a property list.
-% \begin{macrocode}
-\prop_new:N \g_@@_alias_prop
-\prop_gput:Nnn \g_@@_alias_prop { latin1 } { iso88591 }
-\prop_gput:Nnn \g_@@_alias_prop { latin2 } { iso88592 }
-\prop_gput:Nnn \g_@@_alias_prop { latin3 } { iso88593 }
-\prop_gput:Nnn \g_@@_alias_prop { latin4 } { iso88594 }
-\prop_gput:Nnn \g_@@_alias_prop { latin5 } { iso88599 }
-\prop_gput:Nnn \g_@@_alias_prop { latin6 } { iso885910 }
-\prop_gput:Nnn \g_@@_alias_prop { latin7 } { iso885913 }
-\prop_gput:Nnn \g_@@_alias_prop { latin8 } { iso885914 }
-\prop_gput:Nnn \g_@@_alias_prop { latin9 } { iso885915 }
-\prop_gput:Nnn \g_@@_alias_prop { latin10 } { iso885916 }
-\prop_gput:Nnn \g_@@_alias_prop { utf16le } { utf16 }
-\prop_gput:Nnn \g_@@_alias_prop { utf16be } { utf16 }
-\prop_gput:Nnn \g_@@_alias_prop { utf32le } { utf32 }
-\prop_gput:Nnn \g_@@_alias_prop { utf32be } { utf32 }
-\prop_gput:Nnn \g_@@_alias_prop { hexadecimal } { hex }
-\bool_lazy_any:nTF
- {
- \sys_if_engine_luatex_p:
- \sys_if_engine_xetex_p:
- }
- {
- \prop_gput:Nnn \g_@@_alias_prop { default } { }
- }
- {
- \prop_gput:Nnn \g_@@_alias_prop { default } { utf8 }
- }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\g_@@_error_bool}
-% In conversion functions with a built-in conditional, errors are not
-% reported directly to the user, but the information is collected in
-% this boolean, used at the end to decide on which branch of the
-% conditional to take.
-% \begin{macrocode}
-\bool_new:N \g_@@_error_bool
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_byte_flag, \l_@@_error_flag}
-% Conversions from one \meta{encoding}/\meta{escaping} pair to another
-% are done within \texttt{e}-expanding assignments. Errors are
-% signalled by raising the relevant flag.
-% \begin{macrocode}
-\flag_new:N \l_@@_byte_flag
-\flag_new:N \l_@@_error_flag
-% \end{macrocode}
-% \end{variable}
-%
-% \subsection{String conditionals}
-%
-% \begin{macro}[EXP]{\@@_if_contains_char:NnT, \@@_if_contains_char:NnTF}
-% \begin{macro}[EXP]{\@@_if_contains_char:nnTF}
-% \begin{macro}[EXP]{\@@_if_contains_char_aux:nn,\@@_if_contains_char_auxi:nN}
-% \begin{macro}[EXP]{\@@_if_contains_char_true:}
-% \begin{syntax}
-% \cs{@@_if_contains_char:nnTF} \Arg{token list} \meta{char}
-% \end{syntax}
-% Expects the \meta{token list} to be an \meta{other string}: the
-% caller is responsible for ensuring that no (too-)special catcodes
-% remain.
-% Loop over the characters of the string, comparing character codes.
-% The loop is broken if character codes match. Otherwise we return
-% \enquote{false}.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \@@_if_contains_char:Nn #1#2 { T , TF }
- {
- \exp_after:wN \@@_if_contains_char_aux:nn \exp_after:wN {#1} {#2}
- { \prg_break:n { ? \fi: } }
- \prg_break_point:
- \prg_return_false:
- }
-\cs_new:Npn \@@_if_contains_char_aux:nn #1#2
- { \@@_if_contains_char_auxi:nN {#2} #1 }
-\prg_new_conditional:Npnn \@@_if_contains_char:nn #1#2 { TF }
- {
- \@@_if_contains_char_auxi:nN {#2} #1 { \prg_break:n { ? \fi: } }
- \prg_break_point:
- \prg_return_false:
- }
-\cs_new:Npn \@@_if_contains_char_auxi:nN #1#2
- {
- \if_charcode:w #1 #2
- \exp_after:wN \@@_if_contains_char_true:
- \fi:
- \@@_if_contains_char_auxi:nN {#1}
- }
-\cs_new:Npn \@@_if_contains_char_true:
- { \prg_break:n { \prg_return_true: \use_none:n } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_octal_use:NTF}
-% \begin{syntax}
-% \cs{@@_octal_use:NTF} \meta{token} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% If the \meta{token} is an octal digit, it is left in the input
-% stream, \emph{followed} by the \meta{true code}. Otherwise, the
-% \meta{false code} is left in the input stream.
-% \begin{texnote}
-% This function will fail if the escape character is an octal
-% digit. We are thus careful to set the escape character to a known
-% value before using it.
-% \end{texnote}
-% \TeX{} dutifully detects octal digits for us: if |#1| is an octal
-% digit, then the right-hand side of the comparison is |'1#1|, greater
-% than $1$. Otherwise, the right-hand side stops as |'1|, and the
-% conditional takes the \texttt{false} branch.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \@@_octal_use:N #1 { TF }
- {
- \if_int_compare:w 1 < '1 \token_to_str:N #1 \exp_stop_f:
- #1 \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_hexadecimal_use:NTF}
-% \TeX{} detects uppercase hexadecimal digits for us (see
-% \cs{@@_octal_use:NTF}), but not the lowercase letters, which we
-% need to detect and replace by their uppercase counterpart.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \@@_hexadecimal_use:N #1 { TF }
- {
- \if_int_compare:w 1 < "1 \token_to_str:N #1 \exp_stop_f:
- #1 \prg_return_true:
- \else:
- \if_case:w \int_eval:n { \exp_after:wN ` \token_to_str:N #1 - `a }
- A
- \or: B
- \or: C
- \or: D
- \or: E
- \or: F
- \else:
- \prg_return_false:
- \exp_after:wN \use_none:n
- \fi:
- \prg_return_true:
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Conversions}
-%
-% \subsubsection{Producing one byte or character}
-%
-% \begin{variable}{\c_@@_byte_0_tl, \c_@@_byte_1_tl, \c_@@_byte_255_tl}
-% \begin{variable}{\c_@@_byte_-1_tl}
-% For each integer $N$ in the range $[0,255]$, we create a constant
-% token list which holds three character tokens with category code
-% other: the character with character code $N$, followed by the
-% representation of $N$ as two hexadecimal digits. The value $-1$ is
-% given a default token list which ensures that later functions give
-% an empty result for the input $-1$.
-% \begin{macrocode}
-\group_begin:
- \__kernel_tl_set:Nx \l_@@_internal_tl { \tl_to_str:n { 0123456789ABCDEF } }
- \tl_map_inline:Nn \l_@@_internal_tl
- {
- \tl_map_inline:Nn \l_@@_internal_tl
- {
- \tl_const:ce { c_@@_byte_ \int_eval:n {"#1##1} _tl }
- { \char_generate:nn { "#1##1 } { 12 } #1 ##1 }
- }
- }
-\group_end:
-\tl_const:cn { c_@@_byte_-1_tl } { { } \use_none:n { } }
-% \end{macrocode}
-% \end{variable}
-% \end{variable}
-%
-% \begin{macro}[EXP]{\@@_output_byte:n}
-% \begin{macro}[EXP]{\@@_output_byte:w}
-% \begin{macro}[EXP]{\@@_output_hexadecimal:n}
-% \begin{macro}[EXP]{\@@_output_end:}
-% Those functions must be used carefully: feeding them a value outside
-% the range $[-1,255]$ will attempt to use the undefined token list
-% variable \cs{c_@@_byte_\meta{number}_tl}. Assuming that the
-% argument is in the right range, we expand the corresponding token
-% list, and pick either the byte (first token) or the hexadecimal
-% representations (second and third tokens). The value $-1$ produces
-% an empty result in both cases.
-% \begin{macrocode}
-\cs_new:Npn \@@_output_byte:n #1
- { \@@_output_byte:w #1 \@@_output_end: }
-\cs_new:Npn \@@_output_byte:w
- {
- \exp_after:wN \exp_after:wN
- \exp_after:wN \use_i:nnn
- \cs:w c_@@_byte_ \int_eval:w
- }
-\cs_new:Npn \@@_output_hexadecimal:n #1
- {
- \exp_after:wN \exp_after:wN
- \exp_after:wN \use_none:n
- \cs:w c_@@_byte_ \int_eval:n {#1} _tl \cs_end:
- }
-\cs_new:Npn \@@_output_end:
- { \scan_stop: _tl \cs_end: }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_output_byte_pair_be:n}
-% \begin{macro}[rEXP]{\@@_output_byte_pair_le:n}
-% \begin{macro}[rEXP]{\@@_output_byte_pair:nnN}
-% Convert a number in the range $[0,65535]$ to a pair of bytes, either
-% big-endian or little-endian.
-% \begin{macrocode}
-\cs_new:Npn \@@_output_byte_pair_be:n #1
- {
- \exp_args:Nf \@@_output_byte_pair:nnN
- { \int_div_truncate:nn { #1 } { "100 } } {#1} \use:nn
- }
-\cs_new:Npn \@@_output_byte_pair_le:n #1
- {
- \exp_args:Nf \@@_output_byte_pair:nnN
- { \int_div_truncate:nn { #1 } { "100 } } {#1} \use_ii_i:nn
- }
-\cs_new:Npn \@@_output_byte_pair:nnN #1#2#3
- {
- #3
- { \@@_output_byte:n { #1 } }
- { \@@_output_byte:n { #2 - #1 * "100 } }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsubsection{Mapping functions for conversions}
-%
-% \begin{macro}{\@@_convert_gmap:N}
-% \begin{macro}[rEXP]{\@@_convert_gmap_loop:NN}
-% This maps the function |#1| over all characters in
-% \cs{g_@@_result_tl}, which should be a byte string in most cases,
-% sometimes a native string.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_convert_gmap:N #1
- {
- \__kernel_tl_gset:Nx \g_@@_result_tl
- {
- \exp_after:wN \@@_convert_gmap_loop:NN
- \exp_after:wN #1
- \g_@@_result_tl { ? \prg_break: }
- \prg_break_point:
- }
- }
-\cs_new:Npn \@@_convert_gmap_loop:NN #1#2
- {
- \use_none:n #2
- #1#2
- \@@_convert_gmap_loop:NN #1
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_convert_gmap_internal:N}
-% \begin{macro}[rEXP]{\@@_convert_gmap_internal_loop:Nw}
-% This maps the function |#1| over all character codes in
-% \cs{g_@@_result_tl}, which must be in the internal representation.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_convert_gmap_internal:N #1
- {
- \__kernel_tl_gset:Nx \g_@@_result_tl
- {
- \exp_after:wN \@@_convert_gmap_internal_loop:Nww
- \exp_after:wN #1
- \g_@@_result_tl \s_@@ \s_@@_stop \prg_break: \s_@@
- \prg_break_point:
- }
- }
-\cs_new:Npn \@@_convert_gmap_internal_loop:Nww #1 #2 \s_@@ #3 \s_@@
- {
- \@@_use_none_delimit_by_s_stop:w #3 \s_@@_stop
- #1 {#3}
- \@@_convert_gmap_internal_loop:Nww #1
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsubsection{Error-reporting during conversion}
-%
-% \begin{macro}{\@@_if_flag_error:Nne}
-% \begin{macro}{\@@_if_flag_no_error:Nne}
-% When converting using the function \cs{str_set_convert:Nnnn}, errors
-% should be reported to the user after each step in the
-% conversion. Errors are signalled by raising some flag (typically
-% \texttt{@@_error}), so here we test that flag: if it is raised,
-% give the user an error, otherwise remove the arguments. On the other
-% hand, in the conditional functions \cs{str_set_convert:NnnnTF},
-% errors should be suppressed. This is done by changing
-% \cs{@@_if_flag_error:Nne} into \cs{@@_if_flag_no_error:Nne}
-% locally.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_if_flag_error:Nne #1
- {
- \flag_if_raised:NTF #1
- { \msg_error:nne { str } }
- { \use_none:nn }
- }
-\cs_new_protected:Npn \@@_if_flag_no_error:Nne #1#2#3
- { \flag_if_raised:NT #1 { \bool_gset_true:N \g_@@_error_bool } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_if_flag_times:NT}
-% At the end of each conversion step, we raise all relevant errors as
-% one error message, built on the fly. The height of each flag
-% indicates how many times a given error was encountered. This
-% function prints |#2| followed by the number of occurrences of an
-% error if it occurred, nothing otherwise.
-% \begin{macrocode}
-\cs_new:Npn \@@_if_flag_times:NT #1#2
- { \flag_if_raised:NT #1 { #2~(x \flag_height:N #1 ) } }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Framework for conversions}
-%
-% Most functions in this module expect to be working with
-% \enquote{native} strings. Strings can also be stored as bytes, in one
-% of many encodings, for instance \textsc{utf8}. The bytes themselves
-% can be expressed in various ways in terms of \TeX{} tokens, for
-% instance as pairs of hexadecimal digits. The questions of going from
-% arbitrary Unicode code points to bytes, and from bytes to tokens are
-% mostly independent.
-%
-% Conversions are done in four steps:
-% \begin{itemize}
-% \item \enquote{unescape} produces a string of bytes;
-% \item \enquote{decode} takes in a string of bytes, and converts it
-% to a list of Unicode characters in an internal representation,
-% with items of the form
-% \begin{quote}
-% \meta{bytes} \cs{s_@@} \meta{Unicode code point} \cs{s_@@}
-% \end{quote}
-% where we have collected the \meta{bytes} which combined to form
-% this particular Unicode character, and the \meta{Unicode code
-% point} is in the range $[0,\hexnum{10FFFF}]$.
-% \item \enquote{encode} encodes the internal list of code points as a
-% byte string in the new encoding;
-% \item \enquote{escape} escapes bytes as requested.
-% \end{itemize}
-% The process is modified in case one of the encoding is empty (or the
-% conversion function has been set equal to the empty encoding because
-% it was not found): then the unescape or escape step is ignored, and
-% the decode or encode steps work on tokens instead of bytes. Otherwise,
-% each step must ensure that it passes a correct byte string or internal
-% string to the next step.
-%
-% \begin{macro}{\str_set_convert:Nnnn, \str_gset_convert:Nnnn}
-% \begin{macro}[TF]{\str_set_convert:Nnnn, \str_gset_convert:Nnnn}
-% \begin{macro}{\@@_convert:nNNnnn}
-% The input string is stored in \cs{g_@@_result_tl}, then we:
-% unescape and decode; encode and escape; exit the group and store the
-% result in the user's variable. The various conversion functions all
-% act on \cs{g_@@_result_tl}. Errors are silenced for the conditional
-% functions by redefining \cs{@@_if_flag_error:Nne} locally.
-% \begin{macrocode}
-\cs_new_protected:Npn \str_set_convert:Nnnn
- { \@@_convert:nNNnnn { } \tl_set_eq:NN }
-\cs_new_protected:Npn \str_gset_convert:Nnnn
- { \@@_convert:nNNnnn { } \tl_gset_eq:NN }
-\prg_new_protected_conditional:Npnn
- \str_set_convert:Nnnn #1#2#3#4 { T , F , TF }
- {
- \bool_gset_false:N \g_@@_error_bool
- \@@_convert:nNNnnn
- { \cs_set_eq:NN \@@_if_flag_error:Nne \@@_if_flag_no_error:Nne }
- \tl_set_eq:NN #1 {#2} {#3} {#4}
- \bool_if:NTF \g_@@_error_bool \prg_return_false: \prg_return_true:
- }
-\prg_new_protected_conditional:Npnn
- \str_gset_convert:Nnnn #1#2#3#4 { T , F , TF }
- {
- \bool_gset_false:N \g_@@_error_bool
- \@@_convert:nNNnnn
- { \cs_set_eq:NN \@@_if_flag_error:Nne \@@_if_flag_no_error:Nne }
- \tl_gset_eq:NN #1 {#2} {#3} {#4}
- \bool_if:NTF \g_@@_error_bool \prg_return_false: \prg_return_true:
- }
-\cs_new_protected:Npn \@@_convert:nNNnnn #1#2#3#4#5#6
- {
- \group_begin:
- #1
- \__kernel_tl_gset:Nx \g_@@_result_tl { \__kernel_str_to_other_fast:n {#4} }
- \exp_after:wN \@@_convert:wwwnn
- \tl_to_str:n {#5} /// \s_@@_stop
- { decode } { unescape }
- \prg_do_nothing:
- \@@_convert_decode_:
- \exp_after:wN \@@_convert:wwwnn
- \tl_to_str:n {#6} /// \s_@@_stop
- { encode } { escape }
- \use_ii_i:nn
- \@@_convert_encode_:
- \__kernel_tl_gset:Nx \g_@@_result_tl
- { \tl_to_str:V \g_@@_result_tl }
- \group_end:
- #2 #3 \g_@@_result_tl
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_convert:wwwnn}
-% \begin{macro}{\@@_convert:NNnNN}
-% The task of \cs{@@_convert:wwwnn} is to split
-% \meta{encoding}/\meta{escaping} pairs into their components, |#1|
-% and |#2|. Calls to \cs{@@_convert:nnn} ensure that the
-% corresponding conversion functions are defined. The third auxiliary
-% does the main work.
-% \begin{itemize}
-% \item |#1| is the encoding conversion function;
-% \item |#2| is the escaping function;
-% \item |#3| is the escaping name for use in an error message;
-% \item |#4| is \cs{prg_do_nothing:} for unescaping/decoding, and
-% \cs{use_ii_i:nn} for encoding/escaping;
-% \item |#5| is the default encoding function (either
-% \enquote{decode} or \enquote{encode}), for which there should be
-% no escaping.
-% \end{itemize}
-% Let us ignore the native encoding for a second. In the
-% unescaping/decoding phase, we want to do |#2#1| in this order, and
-% in the encoding/escaping phase, the order should be reversed:
-% |#4#2#1| does exactly that. If one of the encodings is the default
-% (native), then the escaping should be ignored, with an error if any
-% was given, and only the encoding, |#1|, should be performed.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_convert:wwwnn
- #1 / #2 // #3 \s_@@_stop #4#5
- {
- \@@_convert:nnn {enc} {#4} {#1}
- \@@_convert:nnn {esc} {#5} {#2}
- \exp_args:Ncc \@@_convert:NNnNN
- { @@_convert_#4_#1: } { @@_convert_#5_#2: } {#2}
- }
-\cs_new_protected:Npn \@@_convert:NNnNN #1#2#3#4#5
- {
- \if_meaning:w #1 #5
- \tl_if_empty:nF {#3}
- { \msg_error:nne { str } { native-escaping } {#3} }
- #1
- \else:
- #4 #2 #1
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_convert:nnn}
-% \begin{macro}{\@@_convert:nnnn}
-% The arguments of \cs{@@_convert:nnn} are: \texttt{enc} or
-% \texttt{esc}, used to build filenames, the type of the conversion
-% (unescape, decode, encode, escape), and the encoding or escaping
-% name. If the function is already defined, no need to do anything.
-% Otherwise, filter out all non-alphanumerics in the name, and
-% lowercase it. Feed that, and the same three arguments, to
-% \cs{@@_convert:nnnn}. The task is then to make sure that the
-% conversion function |#3_#1| corresponding to the type |#3| and
-% filtered name |#1| is defined, then set our initial conversion
-% function |#3_#4| equal to that.
-%
-% How do we get the |#3_#1| conversion to be defined if it isn't?
-% Two main cases.
-%
-% First, if |#1| is a key in \cs{g_@@_alias_prop}, then the value
-% \cs{l_@@_internal_tl} tells us what file to load. Loading is
-% skipped if the file was already read, \emph{i.e.}, if the conversion
-% command based on \cs{l_@@_internal_tl} already exists. Otherwise,
-% try to load the file; if that fails, there is an error, use the
-% default empty name instead.
-%
-% Second, |#1| may be absent from the property list. The
-% \cs{cs_if_exist:cF} test is automatically false, and we search for a
-% file defining the encoding or escaping |#1| (this should allow
-% third-party \texttt{.def} files). If the file is not found, there is
-% an error, use the default empty name instead.
-%
-% In all cases, the conversion based on \cs{l_@@_internal_tl} is
-% defined, so we can set the |#3_#1| function equal to that. In some
-% cases (\emph{e.g.}, \texttt{utf16be}), the |#3_#1| function is
-% actually defined within the file we just loaded, and it is different
-% from the \cs{l_@@_internal_tl}-based function: we mustn't clobber
-% that different definition.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_convert:nnn #1#2#3
- {
- \cs_if_exist:cF { @@_convert_#2_#3: }
- {
- \exp_args:Ne \@@_convert:nnnn
- { \@@_convert_lowercase_alphanum:n {#3} }
- {#1} {#2} {#3}
- }
- }
-\cs_new_protected:Npn \@@_convert:nnnn #1#2#3#4
- {
- \cs_if_exist:cF { @@_convert_#3_#1: }
- {
- \prop_get:NnNF \g_@@_alias_prop {#1} \l_@@_internal_tl
- { \tl_set:Nn \l_@@_internal_tl {#1} }
- \cs_if_exist:cF { @@_convert_#3_ \l_@@_internal_tl : }
- {
- \file_if_exist:nTF { l3str-#2- \l_@@_internal_tl .def }
- {
- \group_begin:
- \cctab_select:N \c_code_cctab
- \file_input:n { l3str-#2- \l_@@_internal_tl .def }
- \group_end:
- }
- {
- \tl_clear:N \l_@@_internal_tl
- \msg_error:nnee { str } { unknown-#2 } {#4} {#1}
- }
- }
- \cs_if_exist:cF { @@_convert_#3_#1: }
- {
- \cs_gset_eq:cc { @@_convert_#3_#1: }
- { @@_convert_#3_ \l_@@_internal_tl : }
- }
- }
- \cs_gset_eq:cc { @@_convert_#3_#4: } { @@_convert_#3_#1: }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_convert_lowercase_alphanum:n}
-% \begin{macro}[rEXP]{\@@_convert_lowercase_alphanum_loop:N}
-% This function keeps only letters and digits, with upper case letters
-% converted to lower case.
-% \begin{macrocode}
-\cs_new:Npn \@@_convert_lowercase_alphanum:n #1
- {
- \exp_after:wN \@@_convert_lowercase_alphanum_loop:N
- \tl_to_str:n {#1} { ? \prg_break: }
- \prg_break_point:
- }
-\cs_new:Npn \@@_convert_lowercase_alphanum_loop:N #1
- {
- \use_none:n #1
- \if_int_compare:w `#1 > `Z \exp_stop_f:
- \if_int_compare:w `#1 > `z \exp_stop_f: \else:
- \if_int_compare:w `#1 < `a \exp_stop_f: \else:
- #1
- \fi:
- \fi:
- \else:
- \if_int_compare:w `#1 < `A \exp_stop_f:
- \if_int_compare:w 1 < 1#1 \exp_stop_f:
- #1
- \fi:
- \else:
- \@@_output_byte:n { `#1 + `a - `A }
- \fi:
- \fi:
- \@@_convert_lowercase_alphanum_loop:N
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsubsection{Byte unescape and escape}
-%
-% Strings of bytes may need to be stored in auxiliary files in safe
-% \enquote{escaping} formats. Each such escaping is only loaded as
-% needed. By default, on input any non-byte is filtered out, while the
-% output simply consists in letting bytes through.
-%
-% \begin{macro}[rEXP]{\@@_filter_bytes:n}
-% \begin{macro}[rEXP]{\@@_filter_bytes_aux:N}
-% In the case of 8-bit engines, every character is a byte. For
-% Unicode-aware engines, test the character code; non-bytes cause us
-% to raise the flag \cs{l_@@_byte_flag}. Spaces have already been given
-% the correct category code when this function is called.
-% \begin{macrocode}
-\bool_lazy_any:nTF
- {
- \sys_if_engine_luatex_p:
- \sys_if_engine_xetex_p:
- }
- {
- \cs_new:Npn \@@_filter_bytes:n #1
- {
- \@@_filter_bytes_aux:N #1
- { ? \prg_break: }
- \prg_break_point:
- }
- \cs_new:Npn \@@_filter_bytes_aux:N #1
- {
- \use_none:n #1
- \if_int_compare:w `#1 < 256 \exp_stop_f:
- #1
- \else:
- \flag_raise:N \l_@@_byte_flag
- \fi:
- \@@_filter_bytes_aux:N
- }
- }
- { \cs_new_eq:NN \@@_filter_bytes:n \use:n }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_convert_unescape_:}
-% \begin{macro}{\@@_convert_unescape_bytes:}
-% The simplest unescaping method removes non-bytes from
-% \cs{g_@@_result_tl}.
-% \begin{macrocode}
-\bool_lazy_any:nTF
- {
- \sys_if_engine_luatex_p:
- \sys_if_engine_xetex_p:
- }
- {
- \cs_new_protected:Npn \@@_convert_unescape_:
- {
- \flag_clear:N \l_@@_byte_flag
- \__kernel_tl_gset:Nx \g_@@_result_tl
- { \exp_args:No \@@_filter_bytes:n \g_@@_result_tl }
- \@@_if_flag_error:Nne \l_@@_byte_flag { non-byte } { bytes }
- }
- }
- { \cs_new_protected:Npn \@@_convert_unescape_: { } }
-\cs_new_eq:NN \@@_convert_unescape_bytes: \@@_convert_unescape_:
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_convert_escape_:}
-% \begin{macro}{\@@_convert_escape_bytes:}
-% The simplest form of escape leaves the bytes from the previous step
-% of the conversion unchanged.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_convert_escape_: { }
-\cs_new_eq:NN \@@_convert_escape_bytes: \@@_convert_escape_:
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsubsection{Native strings}
-%
-% \begin{macro}{\@@_convert_decode_:}
-% \begin{macro}[rEXP]{\@@_decode_native_char:N}
-% Convert each character to its character code, one at a time.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_convert_decode_:
- { \@@_convert_gmap:N \@@_decode_native_char:N }
-\cs_new:Npn \@@_decode_native_char:N #1
- { #1 \s_@@ \int_value:w `#1 \s_@@ }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_convert_encode_:}
-% \begin{macro}[EXP]{\@@_encode_native_char:n}
-% The conversion from an internal string to native character tokens
-% basically maps \cs{char_generate:nn} through the code-points, but in
-% non-Unicode-aware engines we use a fall-back character |?| rather
-% than nothing when given a character code outside $[0,255]$. We
-% detect the presence of bad characters using a flag and only produce
-% a single error after the \texttt{e}-expanding assignment.
-% \begin{macrocode}
-\bool_lazy_any:nTF
- {
- \sys_if_engine_luatex_p:
- \sys_if_engine_xetex_p:
- }
- {
- \cs_new_protected:Npn \@@_convert_encode_:
- { \@@_convert_gmap_internal:N \@@_encode_native_char:n }
- \cs_new:Npn \@@_encode_native_char:n #1
- { \char_generate:nn {#1} {12} }
- }
- {
- \cs_new_protected:Npn \@@_convert_encode_:
- {
- \flag_clear:N \l_@@_error_flag
- \@@_convert_gmap_internal:N \@@_encode_native_char:n
- \@@_if_flag_error:Nne \l_@@_error_flag
- { native-overflow } { }
- }
- \cs_new:Npn \@@_encode_native_char:n #1
- {
- \if_int_compare:w #1 > \c_@@_max_byte_int
- \flag_raise:N \l_@@_error_flag
- ?
- \else:
- \char_generate:nn {#1} {12}
- \fi:
- }
- \msg_new:nnnn { str } { native-overflow }
- { Character~code~too~large~for~this~engine. }
- {
- This~engine~only~support~8-bit~characters:~
- valid~character~codes~are~in~the~range~[0,255].~
- To~manipulate~arbitrary~Unicode,~use~LuaTeX~or~XeTeX.
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsubsection{\texttt{clist}}
-%
-% \begin{macro}{\@@_convert_decode_clist:}
-% \begin{macro}[rEXP]{\@@_decode_clist_char:n}
-% Convert each integer to the internal form. We first turn
-% \cs{g_@@_result_tl} into a clist variable, as this avoids problems
-% with leading or trailing commas.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_convert_decode_clist:
- {
- \clist_gset:No \g_@@_result_tl \g_@@_result_tl
- \__kernel_tl_gset:Nx \g_@@_result_tl
- {
- \exp_args:No \clist_map_function:nN
- \g_@@_result_tl \@@_decode_clist_char:n
- }
- }
-\cs_new:Npn \@@_decode_clist_char:n #1
- { #1 \s_@@ \int_eval:n {#1} \s_@@ }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_convert_encode_clist:}
-% \begin{macro}[rEXP]{\@@_encode_clist_char:n}
-% Convert the internal list of character codes to a comma-list of
-% character codes. The first line produces a comma-list with a
-% leading comma, removed in the next step (this also works in the
-% empty case, since \cs{tl_tail:N} does not trigger an error in this
-% case).
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_convert_encode_clist:
- {
- \@@_convert_gmap_internal:N \@@_encode_clist_char:n
- \__kernel_tl_gset:Nx \g_@@_result_tl { \tl_tail:N \g_@@_result_tl }
- }
-\cs_new:Npn \@@_encode_clist_char:n #1 { , #1 }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsubsection{8-bit encodings}
-%
-% It is not clear in what situations 8-bit encodings are used, hence it
-% is not clear what should be optimized. The current approach is
-% reasonably efficient to convert long strings, and it scales well when
-% using many different encodings.
-%
-% The data needed to support a given 8-bit encoding is stored in a file
-% that consists of a single function call
-% \begin{quote}\ttfamily
-% \cs{@@_declare_eight_bit_encoding:nnnn} \Arg{name} \Arg{modulo}
-% \Arg{mapping} \Arg{missing}
-% \end{quote}
-% This declares the encoding \meta{name} to map bytes to Unicode
-% characters according to the \meta{mapping}, and map those bytes which
-% are not mentioned in the \meta{mapping} either to the replacement
-% character (if they appear in \meta{missing}), or to themselves. The
-% \meta{mapping} argument is a token list of pairs \Arg{byte}
-% \Arg{Unicode} expressed in uppercase hexadecimal notation. The
-% \meta{missing} argument is a token list of \Arg{byte}. Every
-% \meta{byte} which does not appear in the \meta{mapping} nor the
-% \meta{missing} lists maps to itself in Unicode, so for instance the
-% \texttt{latin1} encoding has empty \meta{mapping} and \meta{missing}
-% lists. The \meta{modulo} is a (decimal) integer between $256$ and
-% $558$ inclusive, modulo which all Unicode code points supported by the
-% encodings must be different.
-%
-% We use two integer arrays per encoding. When decoding we only use the
-% \texttt{decode} integer array, with entry $n+1$ (offset needed because
-% integer array indices start at~$1$) equal to the Unicode code point
-% that corresponds to the $n$-th byte in the encoding under
-% consideration, or $-1$ if the given byte is invalid in this encoding.
-% When encoding we use both arrays: upon seeing a code point~$n$, we
-% look up the entry ($1$~plus) $n$ modulo some number $M$ in the
-% \texttt{encode} array, which tells us the byte that might encode the
-% given Unicode code point, then we check in the \texttt{decode} array
-% that indeed this byte encodes the Unicode code point we want. Here,
-% $M$ is an encoding-dependent integer between $256$ and $558$ (it turns
-% out), chosen so that among the Unicode code points that can be validly
-% represented in the given encoding, no pair of code points have the
-% same value modulo~$M$.
-%
-% \begin{macro}
-% {
-% \@@_declare_eight_bit_encoding:nnnn,
-% \@@_declare_eight_bit_aux:NNnnn,
-% \@@_declare_eight_bit_loop:Nnn,
-% \@@_declare_eight_bit_loop:Nn
-% }
-% Loop through both lists of bytes to fill in the \texttt{decode}
-% integer array, then fill the \texttt{encode} array accordingly.
-% For bytes that are invalid in the given encoding, store $-1$ in the
-% \texttt{decode} array.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_declare_eight_bit_encoding:nnnn #1
- {
- \tl_set:Nn \l_@@_internal_tl {#1}
- \cs_new_protected:cpn { @@_convert_decode_#1: }
- { \@@_convert_decode_eight_bit:n {#1} }
- \cs_new_protected:cpn { @@_convert_encode_#1: }
- { \@@_convert_encode_eight_bit:n {#1} }
- \exp_args:Ncc \@@_declare_eight_bit_aux:NNnnn
- { g_@@_decode_#1_intarray } { g_@@_encode_#1_intarray }
- }
-\cs_new_protected:Npn \@@_declare_eight_bit_aux:NNnnn #1#2#3#4#5
- {
- \intarray_new:Nn #1 { 256 }
- \int_step_inline:nnn { 0 } { 255 }
- { \intarray_gset:Nnn #1 { 1 + ##1 } {##1} }
- \@@_declare_eight_bit_loop:Nnn #1
- #4 { \s_@@_stop \prg_break: } { }
- \prg_break_point:
- \@@_declare_eight_bit_loop:Nn #1
- #5 { \s_@@_stop \prg_break: }
- \prg_break_point:
- \intarray_new:Nn #2 {#3}
- \int_step_inline:nnn { 0 } { 255 }
- {
- \int_compare:nNnF { \intarray_item:Nn #1 { 1 + ##1 } } = { -1 }
- {
- \intarray_gset:Nnn #2
- {
- 1 +
- \int_mod:nn { \intarray_item:Nn #1 { 1 + ##1 } }
- { \intarray_count:N #2 }
- }
- {##1}
- }
- }
- }
-\cs_new_protected:Npn \@@_declare_eight_bit_loop:Nnn #1#2#3
- {
- \@@_use_none_delimit_by_s_stop:w #2 \s_@@_stop
- \intarray_gset:Nnn #1 { 1 + "#2 } { "#3 }
- \@@_declare_eight_bit_loop:Nnn #1
- }
-\cs_new_protected:Npn \@@_declare_eight_bit_loop:Nn #1#2
- {
- \@@_use_none_delimit_by_s_stop:w #2 \s_@@_stop
- \intarray_gset:Nnn #1 { 1 + "#2 } { -1 }
- \@@_declare_eight_bit_loop:Nn #1
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_convert_decode_eight_bit:n}
-% \begin{macro}[rEXP]{\@@_decode_eight_bit_aux:n, \@@_decode_eight_bit_aux:Nn}
-% The map from bytes to Unicode code points is in the \texttt{decode}
-% array corresponding to the given encoding. Define \cs{@@_tmp:w} and
-% pass it successively all bytes in the string. It produces an
-% internal representation with suitable \cs{s_@@} inserted, and the
-% corresponding code point is obtained by looking it up in the integer
-% array. If the entry is $-1$ then issue a replacement character and
-% raise the flag indicating that there was an error.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_convert_decode_eight_bit:n #1
- {
- \cs_set:Npe \@@_tmp:w
- {
- \exp_not:N \@@_decode_eight_bit_aux:Nn
- \exp_not:c { g_@@_decode_#1_intarray }
- }
- \flag_clear:N \l_@@_error_flag
- \@@_convert_gmap:N \@@_tmp:w
- \@@_if_flag_error:Nne \l_@@_error_flag { decode-8-bit } {#1}
- }
-\cs_new:Npn \@@_decode_eight_bit_aux:Nn #1#2
- {
- #2 \s_@@
- \exp_args:Nf \@@_decode_eight_bit_aux:n
- { \intarray_item:Nn #1 { 1 + `#2 } }
- \s_@@
- }
-\cs_new:Npn \@@_decode_eight_bit_aux:n #1
- {
- \if_int_compare:w #1 < \c_zero_int
- \flag_raise:N \l_@@_error_flag
- \int_value:w \c_@@_replacement_char_int
- \else:
- #1
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_convert_encode_eight_bit:n}
-% \begin{macro}[rEXP]{\@@_encode_eight_bit_aux:nnN, \@@_encode_eight_bit_aux:NNn}
-% It is not practical to make an integer array with indices in the
-% full Unicode range, so we work modulo some number, which is simply
-% the size of the \texttt{encode} integer array for the given
-% encoding. This gives us a candidate byte for representing a given
-% Unicode code point. Of course taking the modulo leads to collisions
-% so we check in the \texttt{decode} array that the byte we got is
-% indeed correct. Otherwise the Unicode code point we started from is
-% simply not representable in the given encoding.
-% \begin{macrocode}
-\int_new:N \l_@@_modulo_int
-\cs_new_protected:Npn \@@_convert_encode_eight_bit:n #1
- {
- \cs_set:Npe \@@_tmp:w
- {
- \exp_not:N \@@_encode_eight_bit_aux:NNn
- \exp_not:c { g_@@_encode_#1_intarray }
- \exp_not:c { g_@@_decode_#1_intarray }
- }
- \flag_clear:N \l_@@_error_flag
- \@@_convert_gmap_internal:N \@@_tmp:w
- \@@_if_flag_error:Nne \l_@@_error_flag { encode-8-bit } {#1}
- }
-\cs_new:Npn \@@_encode_eight_bit_aux:NNn #1#2#3
- {
- \exp_args:Nf \@@_encode_eight_bit_aux:nnN
- {
- \intarray_item:Nn #1
- { 1 + \int_mod:nn {#3} { \intarray_count:N #1 } }
- }
- {#3}
- #2
- }
-\cs_new:Npn \@@_encode_eight_bit_aux:nnN #1#2#3
- {
- \int_compare:nNnTF { \intarray_item:Nn #3 { 1 + #1 } } = {#2}
- { \@@_output_byte:n {#1} }
- { \flag_raise:N \l_@@_error_flag }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Messages}
-%
-% General messages, and messages for the encodings and escapings loaded
-% by default (\enquote{native}, and \enquote{bytes}).
-% \begin{macrocode}
-\msg_new:nnn { str } { unknown-esc }
- { Escaping~scheme~'#1'~(filtered:~'#2')~unknown. }
-\msg_new:nnn { str } { unknown-enc }
- { Encoding~scheme~'#1'~(filtered:~'#2')~unknown. }
-\msg_new:nnnn { str } { native-escaping }
- { The~'native'~encoding~scheme~does~not~support~any~escaping. }
- {
- Since~native~strings~do~not~consist~in~bytes,~
- none~of~the~escaping~methods~make~sense.~
- The~specified~escaping,~'#1',~will~be~ignored.
- }
-\msg_new:nnn { str } { file-not-found }
- { File~'l3str-#1.def'~not~found. }
-% \end{macrocode}
-%
-% Message used when the \enquote{bytes} unescaping fails because the
-% string given to \cs{str_set_convert:Nnnn} contains a non-byte. This
-% cannot happen for the -8-bit engines.
-% Messages used for other escapings and
-% encodings are defined in each definition file.
-% \begin{macrocode}
-\bool_lazy_any:nT
- {
- \sys_if_engine_luatex_p:
- \sys_if_engine_xetex_p:
- }
- {
- \msg_new:nnnn { str } { non-byte }
- { String~invalid~in~escaping~'#1':~it~may~only~contain~bytes. }
- {
- Some~characters~in~the~string~you~asked~to~convert~are~not~
- 8-bit~characters.~Perhaps~the~string~is~a~'native'~Unicode~string?~
- If~it~is,~try~using\\
- \\
- \iow_indent:n
- {
- \iow_char:N\\str_set_convert:Nnnn \\
- \ \ <str~var>~\{~<string>~\}~\{~native~\}~\{~<target~encoding>~\}
- }
- }
- }
-% \end{macrocode}
-%
-% Those messages are used when converting to and from 8-bit encodings.
-% \begin{macrocode}
-\msg_new:nnnn { str } { decode-8-bit }
- { Invalid~string~in~encoding~'#1'. }
- {
- LaTeX~came~across~a~byte~which~is~not~defined~to~represent~
- any~character~in~the~encoding~'#1'.
- }
-\msg_new:nnnn { str } { encode-8-bit }
- { Unicode~string~cannot~be~converted~to~encoding~'#1'. }
- {
- The~encoding~'#1'~only~contains~a~subset~of~all~Unicode~characters.~
- LaTeX~was~asked~to~convert~a~string~to~that~encoding,~but~that~
- string~contains~a~character~that~'#1'~does~not~support.
- }
-% \end{macrocode}
-%
-% \subsection{Escaping definitions}
-%
-% Several of those encodings are defined by the pdf file format. The
-% following byte storage methods are defined:
-% \begin{itemize}
-% \item \texttt{bytes} (default), non-bytes are filtered out, and
-% bytes are left untouched (this is defined by default);
-% \item \texttt{hex} or \texttt{hexadecimal}, as per the \pdfTeX{}
-% primitive \tn{pdfescapehex}
-% \item \texttt{name}, as per the \pdfTeX{} primitive
-% \tn{pdfescapename}
-% \item \texttt{string}, as per the \pdfTeX{} primitive
-% \tn{pdfescapestring}
-% \item \texttt{url}, as per the percent encoding of urls.
-% \end{itemize}
-%
-% \subsubsection{Unescape methods}
-%
-% \begin{macro}{\@@_convert_unescape_hex:}
-% \begin{macro}[rEXP]{\@@_unescape_hex_auxi:N}
-% \begin{macro}[rEXP]{\@@_unescape_hex_auxii:N}
-% Take chars two by two, and interpret each pair as the hexadecimal
-% code for a byte. Anything else than hexadecimal digits is ignored,
-% raising the flag. A string which contains an odd number of
-% hexadecimal digits gets |0| appended to it: this is equivalent to
-% appending a |0| in all cases, and dropping it if it is alone.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_convert_unescape_hex:
- {
- \group_begin:
- \flag_clear:N \l_@@_error_flag
- \int_set:Nn \tex_escapechar:D { 92 }
- \__kernel_tl_gset:Nx \g_@@_result_tl
- {
- \@@_output_byte:w "
- \exp_last_unbraced:Nf \@@_unescape_hex_auxi:N
- { \tl_to_str:N \g_@@_result_tl }
- 0 { ? 0 - 1 \prg_break: }
- \prg_break_point:
- \@@_output_end:
- }
- \@@_if_flag_error:Nne \l_@@_error_flag { unescape-hex } { }
- \group_end:
- }
-\cs_new:Npn \@@_unescape_hex_auxi:N #1
- {
- \use_none:n #1
- \@@_hexadecimal_use:NTF #1
- { \@@_unescape_hex_auxii:N }
- {
- \flag_raise:N \l_@@_error_flag
- \@@_unescape_hex_auxi:N
- }
- }
-\cs_new:Npn \@@_unescape_hex_auxii:N #1
- {
- \use_none:n #1
- \@@_hexadecimal_use:NTF #1
- {
- \@@_output_end:
- \@@_output_byte:w " \@@_unescape_hex_auxi:N
- }
- {
- \flag_raise:N \l_@@_error_flag
- \@@_unescape_hex_auxii:N
- }
- }
-\msg_new:nnnn { str } { unescape-hex }
- { String~invalid~in~escaping~'hex':~only~hexadecimal~digits~allowed. }
- {
- Some~characters~in~the~string~you~asked~to~convert~are~not~
- hexadecimal~digits~(0-9,~A-F,~a-f)~nor~spaces.
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_convert_unescape_name:}
-% \begin{macro}[rEXP]{\@@_unescape_name_loop:wNN}
-% \begin{macro}{\@@_convert_unescape_url:}
-% \begin{macro}[rEXP]{\@@_unescape_url_loop:wNN}
-% The \cs{@@_convert_unescape_name:} function replaces each
-% occurrence of |#| followed by two hexadecimal digits in
-% \cs{g_@@_result_tl} by the corresponding byte. The \texttt{url}
-% function is identical, with escape character |%| instead of |#|.
-% Thus we define the two together. The arguments of \cs{@@_tmp:w} are
-% the character code of |#| or |%| in hexadecimal, the name of the
-% main function to define, and the name of the auxiliary which
-% performs the loop.
-%
-% The looping auxiliary |#3| finds the next escape character, reads
-% the following two characters, and tests them. The test
-% \cs{@@_hexadecimal_use:NTF} leaves the upper-case digit in the
-% input stream, hence we surround the test with
-% \cs{@@_output_byte:w}~|"| and \cs{@@_output_end:}. If both
-% characters are hexadecimal digits, they should be removed before
-% looping: this is done by \cs{use_i:nnn}. If one of the characters
-% is not a hexadecimal digit, then feed |"#1| to
-% \cs{@@_output_byte:w} to produce the escape character, raise the
-% flag, and call the looping function followed by the two characters
-% (remove \cs{use_i:nnn}).
-% \begin{macrocode}
-\cs_set_protected:Npn \@@_tmp:w #1#2#3
- {
- \cs_new_protected:cpn { @@_convert_unescape_#2: }
- {
- \group_begin:
- \flag_clear:N \l_@@_byte_flag
- \flag_clear:N \l_@@_error_flag
- \int_set:Nn \tex_escapechar:D { 92 }
- \__kernel_tl_gset:Nx \g_@@_result_tl
- {
- \exp_after:wN #3 \g_@@_result_tl
- #1 ? { ? \prg_break: }
- \prg_break_point:
- }
- \@@_if_flag_error:Nne \l_@@_byte_flag { non-byte } { #2 }
- \@@_if_flag_error:Nne \l_@@_error_flag { unescape-#2 } { }
- \group_end:
- }
- \cs_new:Npn #3 ##1#1##2##3
- {
- \@@_filter_bytes:n {##1}
- \use_none:n ##3
- \@@_output_byte:w "
- \@@_hexadecimal_use:NTF ##2
- {
- \@@_hexadecimal_use:NTF ##3
- { }
- {
- \flag_raise:N \l_@@_error_flag
- * 0 + `#1 \use_i:nn
- }
- }
- {
- \flag_raise:N \l_@@_error_flag
- 0 + `#1 \use_i:nn
- }
- \@@_output_end:
- \use_i:nnn #3 ##2##3
- }
- \msg_new:nnnn { str } { unescape-#2 }
- { String~invalid~in~escaping~'#2'. }
- {
- LaTeX~came~across~the~escape~character~'#1'~not~followed~by~
- two~hexadecimal~digits.~This~is~invalid~in~the~escaping~'#2'.
- }
- }
-\exp_after:wN \@@_tmp:w \c_hash_str { name }
- \@@_unescape_name_loop:wNN
-\exp_after:wN \@@_tmp:w \c_percent_str { url }
- \@@_unescape_url_loop:wNN
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_convert_unescape_string:}
-% \begin{macro}[rEXP]{\@@_unescape_string_newlines:wN}
-% \begin{macro}[rEXP]{\@@_unescape_string_loop:wNNN}
-% \begin{macro}[rEXP]{\@@_unescape_string_repeat:NNNNNN}
-% The \texttt{string} escaping is somewhat similar to the
-% \texttt{name} and \texttt{url} escapings, with escape character |\|.
-% The first step is to convert all three line endings, |^^J|, |^^M|,
-% and |^^M^^J| to the common |^^J|, as per the \textsc{pdf}
-% specification. This step cannot raise the flag.
-%
-% Then the following escape sequences are decoded.
-% \begin{itemize}\def\makelabel#1{\hss\llap{\ttfamily\string#1}}
-% \item[\n] Line feed ($10$)
-% \item[\r] Carriage return ($13$)
-% \item[\t] Horizontal tab ($9$)
-% \item[\b] Backspace ($8$)
-% \item[\f] Form feed ($12$)
-% \item[\(] Left parenthesis
-% \item[\)] Right parenthesis
-% \item[\\] Backslash
-% \item[\ddd] (backslash followed by $1$ to $3$ octal digits) Byte
-% \texttt{ddd} (octal), subtracting $256$ in case of overflow.
-% \end{itemize}
-% If followed by an end-of-line character, the backslash and the
-% end-of-line are ignored. If followed by anything else, the backslash
-% is ignored, raising the error flag.
-% \begin{macrocode}
-\group_begin:
- \char_set_catcode_other:N \^^J
- \char_set_catcode_other:N \^^M
- \cs_set_protected:Npn \@@_tmp:w #1
- {
- \cs_new_protected:Npn \@@_convert_unescape_string:
- {
- \group_begin:
- \flag_clear:N \l_@@_byte_flag
- \flag_clear:N \l_@@_error_flag
- \int_set:Nn \tex_escapechar:D { 92 }
- \__kernel_tl_gset:Nx \g_@@_result_tl
- {
- \exp_after:wN \@@_unescape_string_newlines:wN
- \g_@@_result_tl \prg_break: ^^M ?
- \prg_break_point:
- }
- \__kernel_tl_gset:Nx \g_@@_result_tl
- {
- \exp_after:wN \@@_unescape_string_loop:wNNN
- \g_@@_result_tl #1 ?? { ? \prg_break: }
- \prg_break_point:
- }
- \@@_if_flag_error:Nne \l_@@_byte_flag { non-byte } { string }
- \@@_if_flag_error:Nne \l_@@_error_flag { unescape-string } { }
- \group_end:
- }
- }
- \exp_args:No \@@_tmp:w { \c_backslash_str }
- \exp_last_unbraced:NNNNo
- \cs_new:Npn \@@_unescape_string_loop:wNNN #1 \c_backslash_str #2#3#4
- {
- \@@_filter_bytes:n {#1}
- \use_none:n #4
- \@@_output_byte:w '
- \@@_octal_use:NTF #2
- {
- \@@_octal_use:NTF #3
- {
- \@@_octal_use:NTF #4
- {
- \if_int_compare:w #2 > 3 \exp_stop_f:
- - 256
- \fi:
- \@@_unescape_string_repeat:NNNNNN
- }
- { \@@_unescape_string_repeat:NNNNNN ? }
- }
- { \@@_unescape_string_repeat:NNNNNN ?? }
- }
- {
- \str_case_e:nnF {#2}
- {
- { \c_backslash_str } { 134 }
- { ( } { 50 }
- { ) } { 51 }
- { r } { 15 }
- { f } { 14 }
- { n } { 12 }
- { t } { 11 }
- { b } { 10 }
- { ^^J } { 0 - 1 }
- }
- {
- \flag_raise:N \l_@@_error_flag
- 0 - 1 \use_i:nn
- }
- }
- \@@_output_end:
- \use_i:nn \@@_unescape_string_loop:wNNN #2#3#4
- }
- \cs_new:Npn \@@_unescape_string_repeat:NNNNNN #1#2#3#4#5#6
- { \@@_output_end: \@@_unescape_string_loop:wNNN }
- \cs_new:Npn \@@_unescape_string_newlines:wN #1 ^^M #2
- {
- #1
- \if_charcode:w ^^J #2 \else: ^^J \fi:
- \@@_unescape_string_newlines:wN #2
- }
- \msg_new:nnnn { str } { unescape-string }
- { String~invalid~in~escaping~'string'. }
- {
- LaTeX~came~across~an~escape~character~'\c_backslash_str'~
- not~followed~by~any~of:~'n',~'r',~'t',~'b',~'f',~'(',~')',~
- '\c_backslash_str',~one~to~three~octal~digits,~or~the~end~
- of~a~line.
- }
-\group_end:
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsubsection{Escape methods}
-%
-% Currently, none of the escape methods can lead to errors, assuming
-% that their input is made out of bytes.
-%
-% \begin{macro}{\@@_convert_escape_hex:}
-% \begin{macro}[rEXP]{\@@_escape_hex_char:N}
-% Loop and convert each byte to hexadecimal.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_convert_escape_hex:
- { \@@_convert_gmap:N \@@_escape_hex_char:N }
-\cs_new:Npn \@@_escape_hex_char:N #1
- { \@@_output_hexadecimal:n { `#1 } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_convert_escape_name:}
-% \begin{macro}[rEXP]{\@@_escape_name_char:n}
-% \begin{macro}[rEXP]{\@@_if_escape_name:nTF}
-% \begin{variable}{\c_@@_escape_name_str}
-% \begin{variable}{\c_@@_escape_name_not_str}
-% For each byte, test whether it should be output as is, or be
-% \enquote{hash-encoded}. Roughly, bytes outside the range
-% $[\hexnum{2A},\hexnum{7E}]$ are hash-encoded. We keep two lists of
-% exceptions: characters in \cs{c_@@_escape_name_not_str} are not
-% hash-encoded, and characters in the \cs{c_@@_escape_name_str} are
-% encoded.
-% \begin{macrocode}
-\str_const:Nn \c_@@_escape_name_not_str { ! " $ & ' } %$
-\str_const:Nn \c_@@_escape_name_str { {}/<>[] }
-\cs_new_protected:Npn \@@_convert_escape_name:
- { \@@_convert_gmap:N \@@_escape_name_char:n }
-\cs_new:Npn \@@_escape_name_char:n #1
- {
- \@@_if_escape_name:nTF {#1} {#1}
- { \c_hash_str \@@_output_hexadecimal:n {`#1} }
- }
-\prg_new_conditional:Npnn \@@_if_escape_name:n #1 { TF }
- {
- \if_int_compare:w `#1 < "2A \exp_stop_f:
- \@@_if_contains_char:NnTF \c_@@_escape_name_not_str {#1}
- \prg_return_true: \prg_return_false:
- \else:
- \if_int_compare:w `#1 > "7E \exp_stop_f:
- \prg_return_false:
- \else:
- \@@_if_contains_char:NnTF \c_@@_escape_name_str {#1}
- \prg_return_false: \prg_return_true:
- \fi:
- \fi:
- }
-% \end{macrocode}
-% \end{variable}
-% \end{variable}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_convert_escape_string:}
-% \begin{macro}[rEXP]{\@@_escape_string_char:N}
-% \begin{macro}[rEXP]{\@@_if_escape_string:NTF}
-% \begin{variable}{\c_@@_escape_string_str}
-% Any character below (and including) space, and any character above
-% (and including) \texttt{del}, are converted to octal. One backslash
-% is added before each parenthesis and backslash.
-% \begin{macrocode}
-\str_const:Ne \c_@@_escape_string_str
- { \c_backslash_str ( ) }
-\cs_new_protected:Npn \@@_convert_escape_string:
- { \@@_convert_gmap:N \@@_escape_string_char:N }
-\cs_new:Npn \@@_escape_string_char:N #1
- {
- \@@_if_escape_string:NTF #1
- {
- \@@_if_contains_char:NnT
- \c_@@_escape_string_str {#1}
- { \c_backslash_str }
- #1
- }
- {
- \c_backslash_str
- \int_div_truncate:nn {`#1} {64}
- \int_mod:nn { \int_div_truncate:nn {`#1} { 8 } } { 8 }
- \int_mod:nn {`#1} { 8 }
- }
- }
-\prg_new_conditional:Npnn \@@_if_escape_string:N #1 { TF }
- {
- \if_int_compare:w `#1 < "27 \exp_stop_f:
- \prg_return_false:
- \else:
- \if_int_compare:w `#1 > "7A \exp_stop_f:
- \prg_return_false:
- \else:
- \prg_return_true:
- \fi:
- \fi:
- }
-% \end{macrocode}
-% \end{variable}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_convert_escape_url:}
-% \begin{macro}[rEXP]{\@@_escape_url_char:n}
-% \begin{macro}[rEXP]{\@@_if_escape_url:nTF}
-% This function is similar to \cs{@@_convert_escape_name:}, escaping
-% different characters.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_convert_escape_url:
- { \@@_convert_gmap:N \@@_escape_url_char:n }
-\cs_new:Npn \@@_escape_url_char:n #1
- {
- \@@_if_escape_url:nTF {#1} {#1}
- { \c_percent_str \@@_output_hexadecimal:n { `#1 } }
- }
-\prg_new_conditional:Npnn \@@_if_escape_url:n #1 { TF }
- {
- \if_int_compare:w `#1 < "30 \exp_stop_f:
- \@@_if_contains_char:nnTF { "-. } {#1}
- \prg_return_true: \prg_return_false:
- \else:
- \if_int_compare:w `#1 > "7E \exp_stop_f:
- \prg_return_false:
- \else:
- \@@_if_contains_char:nnTF { : ; = ? @ [ ] } {#1}
- \prg_return_false: \prg_return_true:
- \fi:
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Encoding definitions}
-%
-% The \texttt{native} encoding is automatically defined. Other encodings
-% are loaded as needed. The following encodings are supported:
-% \begin{itemize}
-% \item \textsc{utf-8};
-% \item \textsc{utf-16}, big-, little-endian, or with byte order mark;
-% \item \textsc{utf-32}, big-, little-endian, or with byte order mark;
-% \item the \textsc{iso 8859} code pages, numbered from $1$ to $16$,
-% skipping the inexistent \textsc{iso 8859-12}.
-% \end{itemize}
-%
-% \subsubsection{\textsc{utf-8} support}
-%
-% \begin{macro}{\@@_convert_encode_utf8:}
-% \begin{macro}[rEXP]{\@@_encode_utf_viii_char:n}
-% \begin{macro}[rEXP]{\@@_encode_utf_viii_loop:wwnnw}
-% Loop through the internal string, and convert each character to its
-% \textsc{utf-8} representation. The representation is built from the
-% right-most (least significant) byte to the left-most (most
-% significant) byte. Continuation bytes are in the range $[128,191]$,
-% taking $64$ different values, hence we roughly want to express the
-% character code in base $64$, shifting the first digit in the
-% representation by some number depending on how many continuation
-% bytes there are. In the range $[0,127]$, output the corresponding
-% byte directly. In the range $[128,2047]$, output the remainder
-% modulo $64$, plus $128$ as a continuation byte, then output the
-% quotient (which is in the range $[0,31]$), shifted by $192$. In the
-% next range, $[2048,65535]$, split the character code into residue
-% and quotient modulo $64$, output the residue as a first continuation
-% byte, then repeat; this leaves us with a quotient in the range
-% $[0,15]$, which we output shifted by $224$. The last range,
-% $[65536,1114111]$, follows the same pattern: once we realize that
-% dividing twice by $64$ leaves us with a number larger than $15$, we
-% repeat, producing a last continuation byte, and offset the quotient
-% by $240$ for the leading byte.
-%
-% How is that implemented? \cs{@@_encode_utf_vii_loop:wwnnw} takes
-% successive quotients as its first argument, the quotient from the
-% previous step as its second argument (except in step~$1$), the bound
-% for quotients that trigger one more step or not, and finally the
-% offset used if this step should produce the leading byte. Leading
-% bytes can be in the ranges $[0,127]$, $[192,223]$, $[224,239]$, and
-% $[240,247]$ (really, that last limit should be $244$ because Unicode
-% stops at the code point $1114111$). At each step, if the quotient
-% |#1| is less than the limit |#3| for that range, output the leading
-% byte (|#1| shifted by |#4|) and stop. Otherwise, we need one more
-% step: use the quotient of |#1| by $64$, and |#1| as arguments for
-% the looping auxiliary, and output the continuation byte
-% corresponding to the remainder $|#2|-64|#1|+128$. The bizarre
-% construction |- 1 + 0 *| removes the spurious initial
-% continuation byte (better methods welcome).
-% \begin{macrocode}
-\cs_new_protected:cpn { @@_convert_encode_utf8: }
- { \@@_convert_gmap_internal:N \@@_encode_utf_viii_char:n }
-\cs_new:Npn \@@_encode_utf_viii_char:n #1
- {
- \@@_encode_utf_viii_loop:wwnnw #1 ; - 1 + 0 * ;
- { 128 } { 0 }
- { 32 } { 192 }
- { 16 } { 224 }
- { 8 } { 240 }
- \s_@@_stop
- }
-\cs_new:Npn \@@_encode_utf_viii_loop:wwnnw #1; #2; #3#4 #5 \s_@@_stop
- {
- \if_int_compare:w #1 < #3 \exp_stop_f:
- \@@_output_byte:n { #1 + #4 }
- \exp_after:wN \@@_use_none_delimit_by_s_stop:w
- \fi:
- \exp_after:wN \@@_encode_utf_viii_loop:wwnnw
- \int_value:w \int_div_truncate:nn {#1} {64} ; #1 ;
- #5 \s_@@_stop
- \@@_output_byte:n { #2 - 64 * ( #1 - 2 ) }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{variable}
-% {
-% @@_missing ,
-% @@_extra ,
-% @@_overlong ,
-% @@_overflow ,
-% }
-% When decoding a string that is purportedly in the \textsc{utf-8}
-% encoding, four different errors can occur, signalled by a specific
-% flag for each (we define those flags using \cs{flag_clear_new:N}
-% rather than \cs{flag_new:N}, because they are shared with other
-% encoding definition files).
-% \begin{itemize}
-% \item \enquote{Missing continuation byte}: a leading byte is not
-% followed by the right number of continuation bytes.
-% \item \enquote{Extra continuation byte}: a continuation byte
-% appears where it was not expected, \emph{i.e.}, not after an
-% appropriate leading byte.
-% \item \enquote{Overlong}: a Unicode character is expressed using
-% more bytes than necessary, for instance, \hexnum{C0}\hexnum{80}
-% for the code point $0$, instead of a single null byte.
-% \item \enquote{Overflow}: this occurs when decoding produces
-% Unicode code points greater than $1114111$.
-% \end{itemize}
-% We only raise one \LaTeX3 error message, combining all the errors
-% which occurred. In the short message, the leading comma must be
-% removed to get a grammatically correct sentence. In the long text,
-% first remind the user what a correct \textsc{utf-8} string should
-% look like, then add error-specific information.
-% \begin{macrocode}
-\flag_clear_new:N \l_@@_missing_flag
-\flag_clear_new:N \l_@@_extra_flag
-\flag_clear_new:N \l_@@_overlong_flag
-\flag_clear_new:N \l_@@_overflow_flag
-\msg_new:nnnn { str } { utf8-decode }
- {
- Invalid~UTF-8~string:
- \exp_last_unbraced:Nf \use_none:n
- {
- \@@_if_flag_times:NT \l_@@_missing_flag { ,~missing~continuation~byte }
- \@@_if_flag_times:NT \l_@@_extra_flag { ,~extra~continuation~byte }
- \@@_if_flag_times:NT \l_@@_overlong_flag { ,~overlong~form }
- \@@_if_flag_times:NT \l_@@_overflow_flag { ,~code~point~too~large }
- }
- .
- }
- {
- In~the~UTF-8~encoding,~each~Unicode~character~consists~in~
- 1~to~4~bytes,~with~the~following~bit~pattern: \\
- \iow_indent:n
- {
- Code~point~\ \ \ \ <~128:~0xxxxxxx \\
- Code~point~\ \ \ <~2048:~110xxxxx~10xxxxxx \\
- Code~point~\ \ <~65536:~1110xxxx~10xxxxxx~10xxxxxx \\
- Code~point~ <~1114112:~11110xxx~10xxxxxx~10xxxxxx~10xxxxxx \\
- }
- Bytes~of~the~form~10xxxxxx~are~called~continuation~bytes.
- \flag_if_raised:NT \l_@@_missing_flag
- {
- \\\\
- A~leading~byte~(in~the~range~[192,255])~was~not~followed~by~
- the~appropriate~number~of~continuation~bytes.
- }
- \flag_if_raised:NT \l_@@_extra_flag
- {
- \\\\
- LaTeX~came~across~a~continuation~byte~when~it~was~not~expected.
- }
- \flag_if_raised:NT \l_@@_overlong_flag
- {
- \\\\
- Every~Unicode~code~point~must~be~expressed~in~the~shortest~
- possible~form.~For~instance,~'0xC0'~'0x83'~is~not~a~valid~
- representation~for~the~code~point~3.
- }
- \flag_if_raised:NT \l_@@_overflow_flag
- {
- \\\\
- Unicode~limits~code~points~to~the~range~[0,1114111].
- }
- }
-\prop_gput:Nnn \g_msg_module_name_prop { str } { LaTeX }
-\prop_gput:Nnn \g_msg_module_type_prop { str } { }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\@@_convert_decode_utf8:}
-% \begin{macro}[rEXP]
-% {
-% \@@_decode_utf_viii_start:N,
-% \@@_decode_utf_viii_continuation:wwN,
-% \@@_decode_utf_viii_aux:wNnnwN
-% }
-% \begin{macro}[rEXP]
-% {\@@_decode_utf_viii_overflow:w, \@@_decode_utf_viii_end:}
-% Decoding is significantly harder than encoding. As before, lower
-% some flags, which are tested at the end (in bulk, to trigger at most
-% one \LaTeX3 error, as explained above). We expect successive
-% multi-byte sequences of the form \meta{start byte}
-% \meta{continuation bytes}. The \texttt{_start} auxiliary tests the
-% first byte:
-% \begin{itemize}
-% \item $[0,\hexnum{7F}]$: the byte stands alone, and is converted
-% to its own character code;
-% \item $[\hexnum{80}, \hexnum{BF}]$: unexpected continuation byte,
-% raise the appropriate flag, and convert that byte to the
-% replacement character \hexnum{FFFD};
-% \item $[\hexnum{C0}, \hexnum{FF}]$: this byte should be followed
-% by some continuation byte(s).
-% \end{itemize}
-% In the first two cases, \cs{use_none_delimit_by_q_stop:w} removes
-% data that only the third case requires, namely the limits of ranges
-% of Unicode characters which can be expressed with $1$, $2$, $3$, or
-% $4$ bytes.
-%
-% We can now concentrate on the multi-byte case and the
-% \texttt{_continuation} auxiliary. We expect |#3| to be in the range
-% $[\hexnum{80}, \hexnum{BF}]$. The test for this goes as follows: if
-% the character code is less than \hexnum{80}, we compare it to
-% $-\hexnum{C0}$, yielding \texttt{false}; otherwise to \hexnum{C0},
-% yielding \texttt{true} in the range $[\hexnum{80}, \hexnum{BF}]$ and
-% \texttt{false} otherwise. If we find that the byte is not a
-% continuation range, stop the current slew of bytes, output the
-% replacement character, and continue parsing with the \texttt{_start}
-% auxiliary, starting at the byte we just tested. Once we know that
-% the byte is a continuation byte, leave it behind us in the input
-% stream, compute what code point the bytes read so far would produce,
-% and feed that number to the \texttt{_aux} function.
-%
-% The \texttt{_aux} function tests whether we should look for more
-% continuation bytes or not. If the number it receives as |#1| is less
-% than the maximum |#4| for the current range, then we are done: check
-% for an overlong representation by comparing |#1| with the maximum
-% |#3| for the previous range. Otherwise, we call the
-% \texttt{_continuation} auxiliary again, after shifting the
-% \enquote{current code point} by |#4| (maximum from the range we just
-% checked).
-%
-% Two additional tests are needed: if we reach the end of the list of
-% range maxima and we are still not done, then we are faced with an
-% overflow. Clean up, and again insert the code point \hexnum{FFFD}
-% for the replacement character. Also, every time we read a byte, we
-% need to check whether we reached the end of the string. In a correct
-% \textsc{utf-8} string, this happens automatically when the
-% \texttt{_start} auxiliary leaves its first argument in the input
-% stream: the end-marker begins with \cs{prg_break:}, which ends
-% the loop. On the other hand, if the end is reached when looking for
-% a continuation byte, the \cs{use_none:n} |#3| construction removes
-% the first token from the end-marker, and leaves the \texttt{_end}
-% auxiliary, which raises the appropriate error flag before ending the
-% mapping.
-% \begin{macrocode}
-\cs_new_protected:cpn { @@_convert_decode_utf8: }
- {
- \flag_clear:N \l_@@_error_flag
- \flag_clear:N \l_@@_missing_flag
- \flag_clear:N \l_@@_extra_flag
- \flag_clear:N \l_@@_overlong_flag
- \flag_clear:N \l_@@_overflow_flag
- \__kernel_tl_gset:Nx \g_@@_result_tl
- {
- \exp_after:wN \@@_decode_utf_viii_start:N \g_@@_result_tl
- { \prg_break: \@@_decode_utf_viii_end: }
- \prg_break_point:
- }
- \@@_if_flag_error:Nne \l_@@_error_flag { utf8-decode } { }
- }
-\cs_new:Npn \@@_decode_utf_viii_start:N #1
- {
- #1
- \if_int_compare:w `#1 < "C0 \exp_stop_f:
- \s_@@
- \if_int_compare:w `#1 < "80 \exp_stop_f:
- \int_value:w `#1
- \else:
- \flag_raise:N \l_@@_extra_flag
- \flag_raise:N \l_@@_error_flag
- \int_use:N \c_@@_replacement_char_int
- \fi:
- \else:
- \exp_after:wN \@@_decode_utf_viii_continuation:wwN
- \int_value:w \int_eval:n { `#1 - "C0 } \exp_after:wN
- \fi:
- \s_@@
- \@@_use_none_delimit_by_s_stop:w {"80} {"800} {"10000} {"110000} \s_@@_stop
- \@@_decode_utf_viii_start:N
- }
-\cs_new:Npn \@@_decode_utf_viii_continuation:wwN
- #1 \s_@@ #2 \@@_decode_utf_viii_start:N #3
- {
- \use_none:n #3
- \if_int_compare:w `#3 <
- \if_int_compare:w `#3 < "80 \exp_stop_f: - \fi:
- "C0 \exp_stop_f:
- #3
- \exp_after:wN \@@_decode_utf_viii_aux:wNnnwN
- \int_value:w \int_eval:n { #1 * "40 + `#3 - "80 } \exp_after:wN
- \else:
- \s_@@
- \flag_raise:N \l_@@_missing_flag
- \flag_raise:N \l_@@_error_flag
- \int_use:N \c_@@_replacement_char_int
- \fi:
- \s_@@
- #2
- \@@_decode_utf_viii_start:N #3
- }
-\cs_new:Npn \@@_decode_utf_viii_aux:wNnnwN
- #1 \s_@@ #2#3#4 #5 \@@_decode_utf_viii_start:N #6
- {
- \if_int_compare:w #1 < #4 \exp_stop_f:
- \s_@@
- \if_int_compare:w #1 < #3 \exp_stop_f:
- \flag_raise:N \l_@@_overlong_flag
- \flag_raise:N \l_@@_error_flag
- \int_use:N \c_@@_replacement_char_int
- \else:
- #1
- \fi:
- \else:
- \if_meaning:w \s_@@_stop #5
- \@@_decode_utf_viii_overflow:w #1
- \fi:
- \exp_after:wN \@@_decode_utf_viii_continuation:wwN
- \int_value:w \int_eval:n { #1 - #4 } \exp_after:wN
- \fi:
- \s_@@
- #2 {#4} #5
- \@@_decode_utf_viii_start:N
- }
-\cs_new:Npn \@@_decode_utf_viii_overflow:w #1 \fi: #2 \fi:
- {
- \fi: \fi:
- \flag_raise:N \l_@@_overflow_flag
- \flag_raise:N \l_@@_error_flag
- \int_use:N \c_@@_replacement_char_int
- }
-\cs_new:Npn \@@_decode_utf_viii_end:
- {
- \s_@@
- \flag_raise:N \l_@@_missing_flag
- \flag_raise:N \l_@@_error_flag
- \int_use:N \c_@@_replacement_char_int \s_@@
- \prg_break:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsubsection{\textsc{utf-16} support}
-%
-% The definitions are done in a category code regime where the bytes
-% $254$ and $255$ used by the byte order mark have catcode~$12$.
-% \begin{macrocode}
-\group_begin:
- \char_set_catcode_other:N \^^fe
- \char_set_catcode_other:N \^^ff
-% \end{macrocode}
-%
-% \begin{macro}
-% {
-% \@@_convert_encode_utf16: ,
-% \@@_convert_encode_utf16be: ,
-% \@@_convert_encode_utf16le: ,
-% }
-% \begin{macro}[rEXP]
-% {
-% \@@_encode_utf_xvi_aux:N ,
-% \@@_encode_utf_xvi_char:n ,
-% }
-% When the endianness is not specified, it is big-endian by default,
-% and we add a byte-order mark. Convert characters one by one in a
-% loop, with different behaviours depending on the character code.
-% \begin{itemize}
-% \item $[0, \hexnum{D7FF}]$: converted to two bytes;
-% \item $[\hexnum{D800}, \hexnum{DFFF}]$ are used as surrogates:
-% they cannot be converted and are replaced by the replacement
-% character;
-% \item $[\hexnum{E000}, \hexnum{FFFF}]$: converted to two bytes;
-% \item $[\hexnum{10000}, \hexnum{10FFFF}]$: converted to a pair of
-% surrogates, each two bytes. The magic \hexnum{D7C0} is
-% $\hexnum{D800}-\hexnum{10000}/\hexnum{400}$.
-% \end{itemize}
-% For the duration of this operation, \cs{@@_tmp:w} is defined as a
-% function to convert a number in the range $[0, \hexnum{FFFF}]$ to a
-% pair of bytes (either big endian or little endian), by feeding the
-% quotient of the division of |#1| by \hexnum{100}, followed by |#1|
-% to \cs{@@_encode_utf_xvi_be:nn} or its \texttt{le} analog: those
-% compute the remainder, and output two bytes for the quotient and
-% remainder.
-% \begin{macrocode}
- \cs_new_protected:cpn { @@_convert_encode_utf16: }
- {
- \@@_encode_utf_xvi_aux:N \@@_output_byte_pair_be:n
- \tl_gput_left:Ne \g_@@_result_tl { ^^fe ^^ff }
- }
- \cs_new_protected:cpn { @@_convert_encode_utf16be: }
- { \@@_encode_utf_xvi_aux:N \@@_output_byte_pair_be:n }
- \cs_new_protected:cpn { @@_convert_encode_utf16le: }
- { \@@_encode_utf_xvi_aux:N \@@_output_byte_pair_le:n }
- \cs_new_protected:Npn \@@_encode_utf_xvi_aux:N #1
- {
- \flag_clear:N \l_@@_error_flag
- \cs_set_eq:NN \@@_tmp:w #1
- \@@_convert_gmap_internal:N \@@_encode_utf_xvi_char:n
- \@@_if_flag_error:Nne \l_@@_error_flag { utf16-encode } { }
- }
- \cs_new:Npn \@@_encode_utf_xvi_char:n #1
- {
- \if_int_compare:w #1 < "D800 \exp_stop_f:
- \@@_tmp:w {#1}
- \else:
- \if_int_compare:w #1 < "10000 \exp_stop_f:
- \if_int_compare:w #1 < "E000 \exp_stop_f:
- \flag_raise:N \l_@@_error_flag
- \@@_tmp:w { \c_@@_replacement_char_int }
- \else:
- \@@_tmp:w {#1}
- \fi:
- \else:
- \exp_args:Nf \@@_tmp:w { \int_div_truncate:nn {#1} {"400} + "D7C0 }
- \exp_args:Nf \@@_tmp:w { \int_mod:nn {#1} {"400} + "DC00 }
- \fi:
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{variable}
-% {
-% @@_missing ,
-% @@_extra ,
-% @@_end ,
-% }
-% When encoding a Unicode string to \textsc{utf-16}, only one error
-% can occur: code points in the range $[\hexnum{D800},
-% \hexnum{DFFF}]$, corresponding to surrogates, cannot be encoded. We
-% use the all-purpose flag \texttt{@@_error} to signal that error.
-%
-% When decoding a Unicode string which is purportedly in
-% \textsc{utf-16}, three errors can occur: a missing trail surrogate,
-% an unexpected trail surrogate, and a string containing an odd number
-% of bytes.
-% \begin{macrocode}
- \flag_clear_new:N \l_@@_missing_flag
- \flag_clear_new:N \l_@@_extra_flag
- \flag_clear_new:N \l_@@_end_flag
- \msg_new:nnnn { str } { utf16-encode }
- { Unicode~string~cannot~be~expressed~in~UTF-16:~surrogate. }
- {
- Surrogate~code~points~(in~the~range~[U+D800,~U+DFFF])~
- can~be~expressed~in~the~UTF-8~and~UTF-32~encodings,~
- but~not~in~the~UTF-16~encoding.
- }
- \msg_new:nnnn { str } { utf16-decode }
- {
- Invalid~UTF-16~string:
- \exp_last_unbraced:Nf \use_none:n
- {
- \@@_if_flag_times:NT \l_@@_missing_flag { ,~missing~trail~surrogate }
- \@@_if_flag_times:NT \l_@@_extra_flag { ,~extra~trail~surrogate }
- \@@_if_flag_times:NT \l_@@_end_flag { ,~odd~number~of~bytes }
- }
- .
- }
- {
- In~the~UTF-16~encoding,~each~Unicode~character~is~encoded~as~
- 2~or~4~bytes: \\
- \iow_indent:n
- {
- Code~point~in~[U+0000,~U+D7FF]:~two~bytes \\
- Code~point~in~[U+D800,~U+DFFF]:~illegal \\
- Code~point~in~[U+E000,~U+FFFF]:~two~bytes \\
- Code~point~in~[U+10000,~U+10FFFF]:~
- a~lead~surrogate~and~a~trail~surrogate \\
- }
- Lead~surrogates~are~pairs~of~bytes~in~the~range~[0xD800,~0xDBFF],~
- and~trail~surrogates~are~in~the~range~[0xDC00,~0xDFFF].
- \flag_if_raised:NT \l_@@_missing_flag
- {
- \\\\
- A~lead~surrogate~was~not~followed~by~a~trail~surrogate.
- }
- \flag_if_raised:NT \l_@@_extra_flag
- {
- \\\\
- LaTeX~came~across~a~trail~surrogate~when~it~was~not~expected.
- }
- \flag_if_raised:NT \l_@@_end_flag
- {
- \\\\
- The~string~contained~an~odd~number~of~bytes.~This~is~invalid:~
- the~basic~code~unit~for~UTF-16~is~16~bits~(2~bytes).
- }
- }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}
-% {
-% \@@_convert_decode_utf16: ,
-% \@@_convert_decode_utf16be: ,
-% \@@_convert_decode_utf16le: ,
-% }
-% \begin{macro}{\@@_decode_utf_xvi_bom:NN, \@@_decode_utf_xvi:Nw}
-% As for \textsc{utf-8}, decoding \textsc{utf-16} is harder than
-% encoding it. If the endianness is unknown, check the first two
-% bytes: if those are \hexnum{FE} and \hexnum{FF} in either order,
-% remove them and use the corresponding endianness, otherwise assume
-% big-endianness. The three endianness cases are based on a common
-% auxiliary whose first argument is $1$ for big-endian and $2$ for
-% little-endian, and whose second argument, delimited by the scan mark
-% \cs{s_@@_stop}, is expanded once (the string may be long; passing
-% \cs{g_@@_result_tl} as an argument before expansion is cheaper).
-%
-% The \cs{@@_decode_utf_xvi:Nw} function defines \cs{@@_tmp:w} to
-% take two arguments and return the character code of the first one if
-% the string is big-endian, and the second one if the string is
-% little-endian, then loops over the string using
-% \cs{@@_decode_utf_xvi_pair:NN} described below.
-% \begin{macrocode}
- \cs_new_protected:cpn { @@_convert_decode_utf16be: }
- { \@@_decode_utf_xvi:Nw 1 \g_@@_result_tl \s_@@_stop }
- \cs_new_protected:cpn { @@_convert_decode_utf16le: }
- { \@@_decode_utf_xvi:Nw 2 \g_@@_result_tl \s_@@_stop }
- \cs_new_protected:cpn { @@_convert_decode_utf16: }
- {
- \exp_after:wN \@@_decode_utf_xvi_bom:NN
- \g_@@_result_tl \s_@@_stop \s_@@_stop \s_@@_stop
- }
- \cs_new_protected:Npn \@@_decode_utf_xvi_bom:NN #1#2
- {
- \str_if_eq:nnTF { #1#2 } { ^^ff ^^fe }
- { \@@_decode_utf_xvi:Nw 2 }
- {
- \str_if_eq:nnTF { #1#2 } { ^^fe ^^ff }
- { \@@_decode_utf_xvi:Nw 1 }
- { \@@_decode_utf_xvi:Nw 1 #1#2 }
- }
- }
- \cs_new_protected:Npn \@@_decode_utf_xvi:Nw #1#2 \s_@@_stop
- {
- \flag_clear:N \l_@@_error_flag
- \flag_clear:N \l_@@_missing_flag
- \flag_clear:N \l_@@_extra_flag
- \flag_clear:N \l_@@_end_flag
- \cs_set:Npn \@@_tmp:w ##1 ##2 { ` ## #1 }
- \__kernel_tl_gset:Nx \g_@@_result_tl
- {
- \exp_after:wN \@@_decode_utf_xvi_pair:NN
- #2 \q_@@_nil \q_@@_nil
- \prg_break_point:
- }
- \@@_if_flag_error:Nne \l_@@_error_flag { utf16-decode } { }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[rEXP]
-% {
-% \@@_decode_utf_xvi_pair:NN ,
-% \@@_decode_utf_xvi_quad:NNwNN ,
-% \@@_decode_utf_xvi_pair_end:Nw ,
-% }
-% \begin{macro}[rEXP]
-% {
-% \@@_decode_utf_xvi_error:nNN ,
-% \@@_decode_utf_xvi_extra:NNw ,
-% }
-% Bytes are read two at a time. At this stage, |\@@_tmp:w #1#2|
-% expands to the character code of the most significant byte, and we
-% distinguish cases depending on which range it lies in:
-% \begin{itemize}
-% \item $[\hexnum{D8}, \hexnum{DB}]$ signals a lead surrogate, and
-% the integer expression yields $1$ (\eTeX{} rounds ties away from
-% zero);
-% \item $[\hexnum{DC}, \hexnum{DF}]$ signals a trail surrogate,
-% unexpected here, and the integer expression yields $2$;
-% \item any other value signals a code point in the Basic
-% Multilingual Plane, which stands for itself, and the
-% \cs{if_case:w} construction expands to nothing (cases other than
-% $1$ or $2$), leaving the relevant material in the input stream,
-% followed by another call to the \texttt{_pair} auxiliary.
-% \end{itemize}
-% The case of a lead surrogate is treated by the \texttt{_quad}
-% auxiliary, whose arguments |#1|, |#2|, |#4| and |#5| are the four
-% bytes. We expect the most significant byte of |#4#5| to be in the
-% range $[\hexnum{DC}, \hexnum{DF}]$ (trail surrogate). The test is
-% similar to the test used for continuation bytes in the
-% \textsc{utf-8} decoding functions. In the case where |#4#5| is
-% indeed a trail surrogate, leave |#1#2#4#5| \cs{s_@@}
-% \meta{code~point} \cs{s_@@}, and remove the pair |#4#5| before
-% looping with \cs{@@_decode_utf_xvi_pair:NN}. Otherwise, of course,
-% complain about the missing surrogate.
-%
-% The magic number \hexnum{D7F7} is such that
-% $\hexnum{D7F7}*\hexnum{400} = \hexnum{D800}*\hexnum{400} +
-% \hexnum{DC00} - \hexnum{10000}$.
-%
-% Every time we read a pair of bytes, we test for the end-marker
-% \cs{q_@@_nil}. When reaching the end, we additionally check that the
-% string had an even length. Also, if the end is reached when
-% expecting a trail surrogate, we treat that as a missing surrogate.
-% \begin{macrocode}
- \cs_new:Npn \@@_decode_utf_xvi_pair:NN #1#2
- {
- \if_meaning:w \q_@@_nil #2
- \@@_decode_utf_xvi_pair_end:Nw #1
- \fi:
- \if_case:w
- \int_eval:n { ( \@@_tmp:w #1#2 - "D6 ) / 4 } \scan_stop:
- \or: \exp_after:wN \@@_decode_utf_xvi_quad:NNwNN
- \or: \exp_after:wN \@@_decode_utf_xvi_extra:NNw
- \fi:
- #1#2 \s_@@
- \int_eval:n { "100 * \@@_tmp:w #1#2 + \@@_tmp:w #2#1 } \s_@@
- \@@_decode_utf_xvi_pair:NN
- }
- \cs_new:Npn \@@_decode_utf_xvi_quad:NNwNN
- #1#2 #3 \@@_decode_utf_xvi_pair:NN #4#5
- {
- \if_meaning:w \q_@@_nil #5
- \@@_decode_utf_xvi_error:nNN { missing } #1#2
- \@@_decode_utf_xvi_pair_end:Nw #4
- \fi:
- \if_int_compare:w
- \if_int_compare:w \@@_tmp:w #4#5 < "DC \exp_stop_f:
- 0 = 1
- \else:
- \@@_tmp:w #4#5 < "E0
- \fi:
- \exp_stop_f:
- #1 #2 #4 #5 \s_@@
- \int_eval:n
- {
- ( "100 * \@@_tmp:w #1#2 + \@@_tmp:w #2#1 - "D7F7 ) * "400
- + "100 * \@@_tmp:w #4#5 + \@@_tmp:w #5#4
- }
- \s_@@
- \exp_after:wN \use_i:nnn
- \else:
- \@@_decode_utf_xvi_error:nNN { missing } #1#2
- \fi:
- \@@_decode_utf_xvi_pair:NN #4#5
- }
- \cs_new:Npn \@@_decode_utf_xvi_pair_end:Nw #1 \fi:
- {
- \fi:
- \if_meaning:w \q_@@_nil #1
- \else:
- \@@_decode_utf_xvi_error:nNN { end } #1 \prg_do_nothing:
- \fi:
- \prg_break:
- }
- \cs_new:Npn \@@_decode_utf_xvi_extra:NNw #1#2 \s_@@ #3 \s_@@
- { \@@_decode_utf_xvi_error:nNN { extra } #1#2 }
- \cs_new:Npn \@@_decode_utf_xvi_error:nNN #1#2#3
- {
- \flag_raise:N \l_@@_error_flag
- \flag_raise:c { l_@@_#1_flag }
- #2 #3 \s_@@
- \int_use:N \c_@@_replacement_char_int \s_@@
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% Restore the original catcodes of bytes $254$ and $255$.
-% \begin{macrocode}
-\group_end:
-% \end{macrocode}
-%
-% \subsubsection{\textsc{utf-32} support}
-%
-% The definitions are done in a category code regime where the bytes
-% $0$, $254$ and $255$ used by the byte order mark have catcode
-% \enquote{other}.
-% \begin{macrocode}
-\group_begin:
- \char_set_catcode_other:N \^^00
- \char_set_catcode_other:N \^^fe
- \char_set_catcode_other:N \^^ff
-% \end{macrocode}
-%
-% \begin{macro}
-% {
-% \@@_convert_encode_utf32: ,
-% \@@_convert_encode_utf32be: ,
-% \@@_convert_encode_utf32le: ,
-% }
-% \begin{macro}[rEXP]
-% {
-% \@@_encode_utf_xxxii_be:n ,
-% \@@_encode_utf_xxxii_be_aux:nn ,
-% \@@_encode_utf_xxxii_le:n ,
-% \@@_encode_utf_xxxii_le_aux:nn ,
-% }
-% Convert each integer in the comma-list \cs{g_@@_result_tl} to a
-% sequence of four bytes. The functions for big-endian and
-% little-endian encodings are very similar, but the
-% \cs{@@_output_byte:n} instructions are reversed.
-% \begin{macrocode}
- \cs_new_protected:cpn { @@_convert_encode_utf32: }
- {
- \@@_convert_gmap_internal:N \@@_encode_utf_xxxii_be:n
- \tl_gput_left:Ne \g_@@_result_tl { ^^00 ^^00 ^^fe ^^ff }
- }
- \cs_new_protected:cpn { @@_convert_encode_utf32be: }
- { \@@_convert_gmap_internal:N \@@_encode_utf_xxxii_be:n }
- \cs_new_protected:cpn { @@_convert_encode_utf32le: }
- { \@@_convert_gmap_internal:N \@@_encode_utf_xxxii_le:n }
- \cs_new:Npn \@@_encode_utf_xxxii_be:n #1
- {
- \exp_args:Nf \@@_encode_utf_xxxii_be_aux:nn
- { \int_div_truncate:nn {#1} { "100 } } {#1}
- }
- \cs_new:Npn \@@_encode_utf_xxxii_be_aux:nn #1#2
- {
- ^^00
- \@@_output_byte_pair_be:n {#1}
- \@@_output_byte:n { #2 - #1 * "100 }
- }
- \cs_new:Npn \@@_encode_utf_xxxii_le:n #1
- {
- \exp_args:Nf \@@_encode_utf_xxxii_le_aux:nn
- { \int_div_truncate:nn {#1} { "100 } } {#1}
- }
- \cs_new:Npn \@@_encode_utf_xxxii_le_aux:nn #1#2
- {
- \@@_output_byte:n { #2 - #1 * "100 }
- \@@_output_byte_pair_le:n {#1}
- ^^00
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{variable}{@@_overflow, @@_end}
-% There can be no error when encoding in \textsc{utf-32}. When
-% decoding, the string may not have length $4n$, or it may contain
-% code points larger than \hexnum{10FFFF}. The latter case often
-% happens if the encoding was in fact not \textsc{utf-32}, because
-% most arbitrary strings are not valid in \textsc{utf-32}.
-% \begin{macrocode}
- \flag_clear_new:N \l_@@_overflow_flag
- \flag_clear_new:N \l_@@_end_flag
- \msg_new:nnnn { str } { utf32-decode }
- {
- Invalid~UTF-32~string:
- \exp_last_unbraced:Nf \use_none:n
- {
- \@@_if_flag_times:NT \l_@@_overflow_flag { ,~code~point~too~large }
- \@@_if_flag_times:NT \l_@@_end_flag { ,~truncated~string }
- }
- .
- }
- {
- In~the~UTF-32~encoding,~every~Unicode~character~
- (in~the~range~[U+0000,~U+10FFFF])~is~encoded~as~4~bytes.
- \flag_if_raised:NT \l_@@_overflow_flag
- {
- \\\\
- LaTeX~came~across~a~code~point~larger~than~1114111,~
- the~maximum~code~point~defined~by~Unicode.~
- Perhaps~the~string~was~not~encoded~in~the~UTF-32~encoding?
- }
- \flag_if_raised:NT \l_@@_end_flag
- {
- \\\\
- The~length~of~the~string~is~not~a~multiple~of~4.~
- Perhaps~the~string~was~truncated?
- }
- }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}
-% {
-% \@@_convert_decode_utf32: ,
-% \@@_convert_decode_utf32be: ,
-% \@@_convert_decode_utf32le: ,
-% }
-% \begin{macro}
-% {\@@_decode_utf_xxxii_bom:NNNN, \@@_decode_utf_xxxii:Nw}
-% \begin{macro}[rEXP]
-% {\@@_decode_utf_xxxii_loop:NNNN, \@@_decode_utf_xxxii_end:w}
-%
-% The structure is similar to \textsc{utf-16} decoding functions. If
-% the endianness is not given, test the first $4$ bytes of the string
-% (possibly \cs{s_@@_stop} if the string is too short) for the presence
-% of a byte-order mark. If there is a byte-order mark, use that
-% endianness, and remove the $4$ bytes, otherwise default to
-% big-endian, and leave the $4$ bytes in place. The
-% \cs{@@_decode_utf_xxxii:Nw} auxiliary receives $1$ or $2$ as its
-% first argument indicating endianness, and the string to convert as
-% its second argument (expanded or not). It sets \cs{@@_tmp:w} to
-% expand to the character code of either of its two arguments
-% depending on endianness, then triggers the \texttt{_loop} auxiliary
-% inside an \texttt{e}-expanding assignment to \cs{g_@@_result_tl}.
-%
-% The \texttt{_loop} auxiliary first checks for the end-of-string
-% marker \cs{s_@@_stop}, calling the \texttt{_end} auxiliary if
-% appropriate. Otherwise, leave the \meta{4~bytes} \cs{s_@@} behind,
-% then check that the code point is not overflowing: the leading byte
-% must be $0$, and the following byte at most $16$.
-%
-% In the ending code, we check that there remains no byte: there
-% should be nothing left until the first \cs{s_@@_stop}. Break the map.
-% \begin{macrocode}
- \cs_new_protected:cpn { @@_convert_decode_utf32be: }
- { \@@_decode_utf_xxxii:Nw 1 \g_@@_result_tl \s_@@_stop }
- \cs_new_protected:cpn { @@_convert_decode_utf32le: }
- { \@@_decode_utf_xxxii:Nw 2 \g_@@_result_tl \s_@@_stop }
- \cs_new_protected:cpn { @@_convert_decode_utf32: }
- {
- \exp_after:wN \@@_decode_utf_xxxii_bom:NNNN \g_@@_result_tl
- \s_@@_stop \s_@@_stop \s_@@_stop \s_@@_stop \s_@@_stop
- }
- \cs_new_protected:Npn \@@_decode_utf_xxxii_bom:NNNN #1#2#3#4
- {
- \str_if_eq:nnTF { #1#2#3#4 } { ^^ff ^^fe ^^00 ^^00 }
- { \@@_decode_utf_xxxii:Nw 2 }
- {
- \str_if_eq:nnTF { #1#2#3#4 } { ^^00 ^^00 ^^fe ^^ff }
- { \@@_decode_utf_xxxii:Nw 1 }
- { \@@_decode_utf_xxxii:Nw 1 #1#2#3#4 }
- }
- }
- \cs_new_protected:Npn \@@_decode_utf_xxxii:Nw #1#2 \s_@@_stop
- {
- \flag_clear:N \l_@@_overflow_flag
- \flag_clear:N \l_@@_end_flag
- \flag_clear:N \l_@@_error_flag
- \cs_set:Npn \@@_tmp:w ##1 ##2 { ` ## #1 }
- \__kernel_tl_gset:Nx \g_@@_result_tl
- {
- \exp_after:wN \@@_decode_utf_xxxii_loop:NNNN
- #2 \s_@@_stop \s_@@_stop \s_@@_stop \s_@@_stop
- \prg_break_point:
- }
- \@@_if_flag_error:Nne \l_@@_error_flag { utf32-decode } { }
- }
- \cs_new:Npn \@@_decode_utf_xxxii_loop:NNNN #1#2#3#4
- {
- \if_meaning:w \s_@@_stop #4
- \exp_after:wN \@@_decode_utf_xxxii_end:w
- \fi:
- #1#2#3#4 \s_@@
- \if_int_compare:w \@@_tmp:w #1#4 > \c_zero_int
- \flag_raise:N \l_@@_overflow_flag
- \flag_raise:N \l_@@_error_flag
- \int_use:N \c_@@_replacement_char_int
- \else:
- \if_int_compare:w \@@_tmp:w #2#3 > 16 \exp_stop_f:
- \flag_raise:N \l_@@_overflow_flag
- \flag_raise:N \l_@@_error_flag
- \int_use:N \c_@@_replacement_char_int
- \else:
- \int_eval:n
- { \@@_tmp:w #2#3*"10000 + \@@_tmp:w #3#2*"100 + \@@_tmp:w #4#1 }
- \fi:
- \fi:
- \s_@@
- \@@_decode_utf_xxxii_loop:NNNN
- }
- \cs_new:Npn \@@_decode_utf_xxxii_end:w #1 \s_@@_stop
- {
- \tl_if_empty:nF {#1}
- {
- \flag_raise:N \l_@@_end_flag
- \flag_raise:N \l_@@_error_flag
- #1 \s_@@
- \int_use:N \c_@@_replacement_char_int \s_@@
- }
- \prg_break:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% Restore the original catcodes of bytes $0$, $254$ and $255$.
-% \begin{macrocode}
-\group_end:
-% \end{macrocode}
-%
-% \subsection{PDF names and strings by expansion}
-%
-% \begin{macro}[EXP]{\str_convert_pdfname:n}
-% \begin{macro}[EXP]{\@@_convert_pdfname:n}
-% \begin{macro}[EXP]
-% {\@@_convert_pdfname_bytes:n, \@@_convert_pdfname_bytes_aux:n}
-% \begin{macro}[EXP]{\@@_convert_pdfname_bytes_aux:nnn}
-% To convert to PDF names by expansion, we work purely on UTF-8 input. The
-% first step is to make a string with \enquote{other} spaces,
-% after which we use a simple token-by-token approach. In Unicode
-% engines, we break down everything before one-byte codepoints, but for
-% $8$-bit engines there is no need to worry. Actual escaping is covered
-% by the same code as used in the non-expandable route.
-% \begin{macrocode}
-\cs_new:Npn \str_convert_pdfname:n #1
- {
- \exp_args:Ne \tl_to_str:n
- { \str_map_function:nN {#1} \@@_convert_pdfname:n }
- }
-\bool_lazy_or:nnTF
- { \sys_if_engine_luatex_p: }
- { \sys_if_engine_xetex_p: }
- {
- \cs_new:Npn \@@_convert_pdfname:n #1
- {
- \int_compare:nNnTF { `#1 } > { "7F }
- { \@@_convert_pdfname_bytes:n {#1} }
- { \@@_escape_name_char:n {#1} }
- }
- \cs_new:Npn \@@_convert_pdfname_bytes:n #1
- {
- \exp_args:Ne \@@_convert_pdfname_bytes_aux:n
- { \__kernel_codepoint_to_bytes:n {`#1} }
- }
- \cs_new:Npn \@@_convert_pdfname_bytes_aux:n #1
- { \@@_convert_pdfname_bytes_aux:nnnn #1 }
- \cs_new:Npe \@@_convert_pdfname_bytes_aux:nnnn #1#2#3#4
- {
- \c_hash_str \exp_not:N \@@_output_hexadecimal:n {#1}
- \c_hash_str \exp_not:N \@@_output_hexadecimal:n {#2}
- \exp_not:N \tl_if_blank:nF {#3}
- {
- \c_hash_str \exp_not:N \@@_output_hexadecimal:n {#3}
- \exp_not:N \tl_if_blank:nF {#4}
- {
- \c_hash_str \exp_not:N \@@_output_hexadecimal:n {#4}
- }
- }
- }
- }
- { \cs_new_eq:NN \@@_convert_pdfname:n \@@_escape_name_char:n }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \subsubsection{\textsc{iso 8859} support}
-%
-% The \textsc{iso-8859-1} encoding exactly matches with the $256$ first
-% Unicode characters. For other 8-bit encodings of the \textsc{iso-8859}
-% family, we keep track only of differences, and of unassigned bytes.
-% \begin{macrocode}
-%<*iso88591>
-\@@_declare_eight_bit_encoding:nnnn { iso88591 } { 256 }
- {
- }
- {
- }
-%</iso88591>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*iso88592>
-\@@_declare_eight_bit_encoding:nnnn { iso88592 } { 399 }
- {
- { A1 } { 0104 }
- { A2 } { 02D8 }
- { A3 } { 0141 }
- { A5 } { 013D }
- { A6 } { 015A }
- { A9 } { 0160 }
- { AA } { 015E }
- { AB } { 0164 }
- { AC } { 0179 }
- { AE } { 017D }
- { AF } { 017B }
- { B1 } { 0105 }
- { B2 } { 02DB }
- { B3 } { 0142 }
- { B5 } { 013E }
- { B6 } { 015B }
- { B7 } { 02C7 }
- { B9 } { 0161 }
- { BA } { 015F }
- { BB } { 0165 }
- { BC } { 017A }
- { BD } { 02DD }
- { BE } { 017E }
- { BF } { 017C }
- { C0 } { 0154 }
- { C3 } { 0102 }
- { C5 } { 0139 }
- { C6 } { 0106 }
- { C8 } { 010C }
- { CA } { 0118 }
- { CC } { 011A }
- { CF } { 010E }
- { D0 } { 0110 }
- { D1 } { 0143 }
- { D2 } { 0147 }
- { D5 } { 0150 }
- { D8 } { 0158 }
- { D9 } { 016E }
- { DB } { 0170 }
- { DE } { 0162 }
- { E0 } { 0155 }
- { E3 } { 0103 }
- { E5 } { 013A }
- { E6 } { 0107 }
- { E8 } { 010D }
- { EA } { 0119 }
- { EC } { 011B }
- { EF } { 010F }
- { F0 } { 0111 }
- { F1 } { 0144 }
- { F2 } { 0148 }
- { F5 } { 0151 }
- { F8 } { 0159 }
- { F9 } { 016F }
- { FB } { 0171 }
- { FE } { 0163 }
- { FF } { 02D9 }
- }
- {
- }
-%</iso88592>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*iso88593>
-\@@_declare_eight_bit_encoding:nnnn { iso88593 } { 384 }
- {
- { A1 } { 0126 }
- { A2 } { 02D8 }
- { A6 } { 0124 }
- { A9 } { 0130 }
- { AA } { 015E }
- { AB } { 011E }
- { AC } { 0134 }
- { AF } { 017B }
- { B1 } { 0127 }
- { B6 } { 0125 }
- { B9 } { 0131 }
- { BA } { 015F }
- { BB } { 011F }
- { BC } { 0135 }
- { BF } { 017C }
- { C5 } { 010A }
- { C6 } { 0108 }
- { D5 } { 0120 }
- { D8 } { 011C }
- { DD } { 016C }
- { DE } { 015C }
- { E5 } { 010B }
- { E6 } { 0109 }
- { F5 } { 0121 }
- { F8 } { 011D }
- { FD } { 016D }
- { FE } { 015D }
- { FF } { 02D9 }
- }
- {
- { A5 }
- { AE }
- { BE }
- { C3 }
- { D0 }
- { E3 }
- { F0 }
- }
-%</iso88593>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*iso88594>
-\@@_declare_eight_bit_encoding:nnnn { iso88594 } { 383 }
- {
- { A1 } { 0104 }
- { A2 } { 0138 }
- { A3 } { 0156 }
- { A5 } { 0128 }
- { A6 } { 013B }
- { A9 } { 0160 }
- { AA } { 0112 }
- { AB } { 0122 }
- { AC } { 0166 }
- { AE } { 017D }
- { B1 } { 0105 }
- { B2 } { 02DB }
- { B3 } { 0157 }
- { B5 } { 0129 }
- { B6 } { 013C }
- { B7 } { 02C7 }
- { B9 } { 0161 }
- { BA } { 0113 }
- { BB } { 0123 }
- { BC } { 0167 }
- { BD } { 014A }
- { BE } { 017E }
- { BF } { 014B }
- { C0 } { 0100 }
- { C7 } { 012E }
- { C8 } { 010C }
- { CA } { 0118 }
- { CC } { 0116 }
- { CF } { 012A }
- { D0 } { 0110 }
- { D1 } { 0145 }
- { D2 } { 014C }
- { D3 } { 0136 }
- { D9 } { 0172 }
- { DD } { 0168 }
- { DE } { 016A }
- { E0 } { 0101 }
- { E7 } { 012F }
- { E8 } { 010D }
- { EA } { 0119 }
- { EC } { 0117 }
- { EF } { 012B }
- { F0 } { 0111 }
- { F1 } { 0146 }
- { F2 } { 014D }
- { F3 } { 0137 }
- { F9 } { 0173 }
- { FD } { 0169 }
- { FE } { 016B }
- { FF } { 02D9 }
- }
- {
- }
-%</iso88594>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*iso88595>
-\@@_declare_eight_bit_encoding:nnnn { iso88595 } { 374 }
- {
- { A1 } { 0401 }
- { A2 } { 0402 }
- { A3 } { 0403 }
- { A4 } { 0404 }
- { A5 } { 0405 }
- { A6 } { 0406 }
- { A7 } { 0407 }
- { A8 } { 0408 }
- { A9 } { 0409 }
- { AA } { 040A }
- { AB } { 040B }
- { AC } { 040C }
- { AE } { 040E }
- { AF } { 040F }
- { B0 } { 0410 }
- { B1 } { 0411 }
- { B2 } { 0412 }
- { B3 } { 0413 }
- { B4 } { 0414 }
- { B5 } { 0415 }
- { B6 } { 0416 }
- { B7 } { 0417 }
- { B8 } { 0418 }
- { B9 } { 0419 }
- { BA } { 041A }
- { BB } { 041B }
- { BC } { 041C }
- { BD } { 041D }
- { BE } { 041E }
- { BF } { 041F }
- { C0 } { 0420 }
- { C1 } { 0421 }
- { C2 } { 0422 }
- { C3 } { 0423 }
- { C4 } { 0424 }
- { C5 } { 0425 }
- { C6 } { 0426 }
- { C7 } { 0427 }
- { C8 } { 0428 }
- { C9 } { 0429 }
- { CA } { 042A }
- { CB } { 042B }
- { CC } { 042C }
- { CD } { 042D }
- { CE } { 042E }
- { CF } { 042F }
- { D0 } { 0430 }
- { D1 } { 0431 }
- { D2 } { 0432 }
- { D3 } { 0433 }
- { D4 } { 0434 }
- { D5 } { 0435 }
- { D6 } { 0436 }
- { D7 } { 0437 }
- { D8 } { 0438 }
- { D9 } { 0439 }
- { DA } { 043A }
- { DB } { 043B }
- { DC } { 043C }
- { DD } { 043D }
- { DE } { 043E }
- { DF } { 043F }
- { E0 } { 0440 }
- { E1 } { 0441 }
- { E2 } { 0442 }
- { E3 } { 0443 }
- { E4 } { 0444 }
- { E5 } { 0445 }
- { E6 } { 0446 }
- { E7 } { 0447 }
- { E8 } { 0448 }
- { E9 } { 0449 }
- { EA } { 044A }
- { EB } { 044B }
- { EC } { 044C }
- { ED } { 044D }
- { EE } { 044E }
- { EF } { 044F }
- { F0 } { 2116 }
- { F1 } { 0451 }
- { F2 } { 0452 }
- { F3 } { 0453 }
- { F4 } { 0454 }
- { F5 } { 0455 }
- { F6 } { 0456 }
- { F7 } { 0457 }
- { F8 } { 0458 }
- { F9 } { 0459 }
- { FA } { 045A }
- { FB } { 045B }
- { FC } { 045C }
- { FD } { 00A7 }
- { FE } { 045E }
- { FF } { 045F }
- }
- {
- }
-%</iso88595>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*iso88596>
-\@@_declare_eight_bit_encoding:nnnn { iso88596 } { 344 }
- {
- { AC } { 060C }
- { BB } { 061B }
- { BF } { 061F }
- { C1 } { 0621 }
- { C2 } { 0622 }
- { C3 } { 0623 }
- { C4 } { 0624 }
- { C5 } { 0625 }
- { C6 } { 0626 }
- { C7 } { 0627 }
- { C8 } { 0628 }
- { C9 } { 0629 }
- { CA } { 062A }
- { CB } { 062B }
- { CC } { 062C }
- { CD } { 062D }
- { CE } { 062E }
- { CF } { 062F }
- { D0 } { 0630 }
- { D1 } { 0631 }
- { D2 } { 0632 }
- { D3 } { 0633 }
- { D4 } { 0634 }
- { D5 } { 0635 }
- { D6 } { 0636 }
- { D7 } { 0637 }
- { D8 } { 0638 }
- { D9 } { 0639 }
- { DA } { 063A }
- { E0 } { 0640 }
- { E1 } { 0641 }
- { E2 } { 0642 }
- { E3 } { 0643 }
- { E4 } { 0644 }
- { E5 } { 0645 }
- { E6 } { 0646 }
- { E7 } { 0647 }
- { E8 } { 0648 }
- { E9 } { 0649 }
- { EA } { 064A }
- { EB } { 064B }
- { EC } { 064C }
- { ED } { 064D }
- { EE } { 064E }
- { EF } { 064F }
- { F0 } { 0650 }
- { F1 } { 0651 }
- { F2 } { 0652 }
- }
- {
- { A1 }
- { A2 }
- { A3 }
- { A5 }
- { A6 }
- { A7 }
- { A8 }
- { A9 }
- { AA }
- { AB }
- { AE }
- { AF }
- { B0 }
- { B1 }
- { B2 }
- { B3 }
- { B4 }
- { B5 }
- { B6 }
- { B7 }
- { B8 }
- { B9 }
- { BA }
- { BC }
- { BD }
- { BE }
- { C0 }
- { DB }
- { DC }
- { DD }
- { DE }
- { DF }
- }
-%</iso88596>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*iso88597>
-\@@_declare_eight_bit_encoding:nnnn { iso88597 } { 498 }
- {
- { A1 } { 2018 }
- { A2 } { 2019 }
- { A4 } { 20AC }
- { A5 } { 20AF }
- { AA } { 037A }
- { AF } { 2015 }
- { B4 } { 0384 }
- { B5 } { 0385 }
- { B6 } { 0386 }
- { B8 } { 0388 }
- { B9 } { 0389 }
- { BA } { 038A }
- { BC } { 038C }
- { BE } { 038E }
- { BF } { 038F }
- { C0 } { 0390 }
- { C1 } { 0391 }
- { C2 } { 0392 }
- { C3 } { 0393 }
- { C4 } { 0394 }
- { C5 } { 0395 }
- { C6 } { 0396 }
- { C7 } { 0397 }
- { C8 } { 0398 }
- { C9 } { 0399 }
- { CA } { 039A }
- { CB } { 039B }
- { CC } { 039C }
- { CD } { 039D }
- { CE } { 039E }
- { CF } { 039F }
- { D0 } { 03A0 }
- { D1 } { 03A1 }
- { D3 } { 03A3 }
- { D4 } { 03A4 }
- { D5 } { 03A5 }
- { D6 } { 03A6 }
- { D7 } { 03A7 }
- { D8 } { 03A8 }
- { D9 } { 03A9 }
- { DA } { 03AA }
- { DB } { 03AB }
- { DC } { 03AC }
- { DD } { 03AD }
- { DE } { 03AE }
- { DF } { 03AF }
- { E0 } { 03B0 }
- { E1 } { 03B1 }
- { E2 } { 03B2 }
- { E3 } { 03B3 }
- { E4 } { 03B4 }
- { E5 } { 03B5 }
- { E6 } { 03B6 }
- { E7 } { 03B7 }
- { E8 } { 03B8 }
- { E9 } { 03B9 }
- { EA } { 03BA }
- { EB } { 03BB }
- { EC } { 03BC }
- { ED } { 03BD }
- { EE } { 03BE }
- { EF } { 03BF }
- { F0 } { 03C0 }
- { F1 } { 03C1 }
- { F2 } { 03C2 }
- { F3 } { 03C3 }
- { F4 } { 03C4 }
- { F5 } { 03C5 }
- { F6 } { 03C6 }
- { F7 } { 03C7 }
- { F8 } { 03C8 }
- { F9 } { 03C9 }
- { FA } { 03CA }
- { FB } { 03CB }
- { FC } { 03CC }
- { FD } { 03CD }
- { FE } { 03CE }
- }
- {
- { AE }
- { D2 }
- }
-%</iso88597>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*iso88598>
-\@@_declare_eight_bit_encoding:nnnn { iso88598 } { 308 }
- {
- { AA } { 00D7 }
- { BA } { 00F7 }
- { DF } { 2017 }
- { E0 } { 05D0 }
- { E1 } { 05D1 }
- { E2 } { 05D2 }
- { E3 } { 05D3 }
- { E4 } { 05D4 }
- { E5 } { 05D5 }
- { E6 } { 05D6 }
- { E7 } { 05D7 }
- { E8 } { 05D8 }
- { E9 } { 05D9 }
- { EA } { 05DA }
- { EB } { 05DB }
- { EC } { 05DC }
- { ED } { 05DD }
- { EE } { 05DE }
- { EF } { 05DF }
- { F0 } { 05E0 }
- { F1 } { 05E1 }
- { F2 } { 05E2 }
- { F3 } { 05E3 }
- { F4 } { 05E4 }
- { F5 } { 05E5 }
- { F6 } { 05E6 }
- { F7 } { 05E7 }
- { F8 } { 05E8 }
- { F9 } { 05E9 }
- { FA } { 05EA }
- { FD } { 200E }
- { FE } { 200F }
- }
- {
- { A1 }
- { BF }
- { C0 }
- { C1 }
- { C2 }
- { C3 }
- { C4 }
- { C5 }
- { C6 }
- { C7 }
- { C8 }
- { C9 }
- { CA }
- { CB }
- { CC }
- { CD }
- { CE }
- { CF }
- { D0 }
- { D1 }
- { D2 }
- { D3 }
- { D4 }
- { D5 }
- { D6 }
- { D7 }
- { D8 }
- { D9 }
- { DA }
- { DB }
- { DC }
- { DD }
- { DE }
- { FB }
- { FC }
- }
-%</iso88598>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*iso88599>
-\@@_declare_eight_bit_encoding:nnnn { iso88599 } { 352 }
- {
- { D0 } { 011E }
- { DD } { 0130 }
- { DE } { 015E }
- { F0 } { 011F }
- { FD } { 0131 }
- { FE } { 015F }
- }
- {
- }
-%</iso88599>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*iso885910>
-\@@_declare_eight_bit_encoding:nnnn { iso885910 } { 383 }
- {
- { A1 } { 0104 }
- { A2 } { 0112 }
- { A3 } { 0122 }
- { A4 } { 012A }
- { A5 } { 0128 }
- { A6 } { 0136 }
- { A8 } { 013B }
- { A9 } { 0110 }
- { AA } { 0160 }
- { AB } { 0166 }
- { AC } { 017D }
- { AE } { 016A }
- { AF } { 014A }
- { B1 } { 0105 }
- { B2 } { 0113 }
- { B3 } { 0123 }
- { B4 } { 012B }
- { B5 } { 0129 }
- { B6 } { 0137 }
- { B8 } { 013C }
- { B9 } { 0111 }
- { BA } { 0161 }
- { BB } { 0167 }
- { BC } { 017E }
- { BD } { 2015 }
- { BE } { 016B }
- { BF } { 014B }
- { C0 } { 0100 }
- { C7 } { 012E }
- { C8 } { 010C }
- { CA } { 0118 }
- { CC } { 0116 }
- { D1 } { 0145 }
- { D2 } { 014C }
- { D7 } { 0168 }
- { D9 } { 0172 }
- { E0 } { 0101 }
- { E7 } { 012F }
- { E8 } { 010D }
- { EA } { 0119 }
- { EC } { 0117 }
- { F1 } { 0146 }
- { F2 } { 014D }
- { F7 } { 0169 }
- { F9 } { 0173 }
- { FF } { 0138 }
- }
- {
- }
-%</iso885910>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*iso885911>
-\@@_declare_eight_bit_encoding:nnnn { iso885911 } { 369 }
- {
- { A1 } { 0E01 }
- { A2 } { 0E02 }
- { A3 } { 0E03 }
- { A4 } { 0E04 }
- { A5 } { 0E05 }
- { A6 } { 0E06 }
- { A7 } { 0E07 }
- { A8 } { 0E08 }
- { A9 } { 0E09 }
- { AA } { 0E0A }
- { AB } { 0E0B }
- { AC } { 0E0C }
- { AD } { 0E0D }
- { AE } { 0E0E }
- { AF } { 0E0F }
- { B0 } { 0E10 }
- { B1 } { 0E11 }
- { B2 } { 0E12 }
- { B3 } { 0E13 }
- { B4 } { 0E14 }
- { B5 } { 0E15 }
- { B6 } { 0E16 }
- { B7 } { 0E17 }
- { B8 } { 0E18 }
- { B9 } { 0E19 }
- { BA } { 0E1A }
- { BB } { 0E1B }
- { BC } { 0E1C }
- { BD } { 0E1D }
- { BE } { 0E1E }
- { BF } { 0E1F }
- { C0 } { 0E20 }
- { C1 } { 0E21 }
- { C2 } { 0E22 }
- { C3 } { 0E23 }
- { C4 } { 0E24 }
- { C5 } { 0E25 }
- { C6 } { 0E26 }
- { C7 } { 0E27 }
- { C8 } { 0E28 }
- { C9 } { 0E29 }
- { CA } { 0E2A }
- { CB } { 0E2B }
- { CC } { 0E2C }
- { CD } { 0E2D }
- { CE } { 0E2E }
- { CF } { 0E2F }
- { D0 } { 0E30 }
- { D1 } { 0E31 }
- { D2 } { 0E32 }
- { D3 } { 0E33 }
- { D4 } { 0E34 }
- { D5 } { 0E35 }
- { D6 } { 0E36 }
- { D7 } { 0E37 }
- { D8 } { 0E38 }
- { D9 } { 0E39 }
- { DA } { 0E3A }
- { DF } { 0E3F }
- { E0 } { 0E40 }
- { E1 } { 0E41 }
- { E2 } { 0E42 }
- { E3 } { 0E43 }
- { E4 } { 0E44 }
- { E5 } { 0E45 }
- { E6 } { 0E46 }
- { E7 } { 0E47 }
- { E8 } { 0E48 }
- { E9 } { 0E49 }
- { EA } { 0E4A }
- { EB } { 0E4B }
- { EC } { 0E4C }
- { ED } { 0E4D }
- { EE } { 0E4E }
- { EF } { 0E4F }
- { F0 } { 0E50 }
- { F1 } { 0E51 }
- { F2 } { 0E52 }
- { F3 } { 0E53 }
- { F4 } { 0E54 }
- { F5 } { 0E55 }
- { F6 } { 0E56 }
- { F7 } { 0E57 }
- { F8 } { 0E58 }
- { F9 } { 0E59 }
- { FA } { 0E5A }
- { FB } { 0E5B }
- }
- {
- { DB }
- { DC }
- { DD }
- { DE }
- }
-%</iso885911>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*iso885913>
-\@@_declare_eight_bit_encoding:nnnn { iso885913 } { 399 }
- {
- { A1 } { 201D }
- { A5 } { 201E }
- { A8 } { 00D8 }
- { AA } { 0156 }
- { AF } { 00C6 }
- { B4 } { 201C }
- { B8 } { 00F8 }
- { BA } { 0157 }
- { BF } { 00E6 }
- { C0 } { 0104 }
- { C1 } { 012E }
- { C2 } { 0100 }
- { C3 } { 0106 }
- { C6 } { 0118 }
- { C7 } { 0112 }
- { C8 } { 010C }
- { CA } { 0179 }
- { CB } { 0116 }
- { CC } { 0122 }
- { CD } { 0136 }
- { CE } { 012A }
- { CF } { 013B }
- { D0 } { 0160 }
- { D1 } { 0143 }
- { D2 } { 0145 }
- { D4 } { 014C }
- { D8 } { 0172 }
- { D9 } { 0141 }
- { DA } { 015A }
- { DB } { 016A }
- { DD } { 017B }
- { DE } { 017D }
- { E0 } { 0105 }
- { E1 } { 012F }
- { E2 } { 0101 }
- { E3 } { 0107 }
- { E6 } { 0119 }
- { E7 } { 0113 }
- { E8 } { 010D }
- { EA } { 017A }
- { EB } { 0117 }
- { EC } { 0123 }
- { ED } { 0137 }
- { EE } { 012B }
- { EF } { 013C }
- { F0 } { 0161 }
- { F1 } { 0144 }
- { F2 } { 0146 }
- { F4 } { 014D }
- { F8 } { 0173 }
- { F9 } { 0142 }
- { FA } { 015B }
- { FB } { 016B }
- { FD } { 017C }
- { FE } { 017E }
- { FF } { 2019 }
- }
- {
- }
-%</iso885913>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*iso885914>
-\@@_declare_eight_bit_encoding:nnnn { iso885914 } { 529 }
- {
- { A1 } { 1E02 }
- { A2 } { 1E03 }
- { A4 } { 010A }
- { A5 } { 010B }
- { A6 } { 1E0A }
- { A8 } { 1E80 }
- { AA } { 1E82 }
- { AB } { 1E0B }
- { AC } { 1EF2 }
- { AF } { 0178 }
- { B0 } { 1E1E }
- { B1 } { 1E1F }
- { B2 } { 0120 }
- { B3 } { 0121 }
- { B4 } { 1E40 }
- { B5 } { 1E41 }
- { B7 } { 1E56 }
- { B8 } { 1E81 }
- { B9 } { 1E57 }
- { BA } { 1E83 }
- { BB } { 1E60 }
- { BC } { 1EF3 }
- { BD } { 1E84 }
- { BE } { 1E85 }
- { BF } { 1E61 }
- { D0 } { 0174 }
- { D7 } { 1E6A }
- { DE } { 0176 }
- { F0 } { 0175 }
- { F7 } { 1E6B }
- { FE } { 0177 }
- }
- {
- }
-%</iso885914>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*iso885915>
-\@@_declare_eight_bit_encoding:nnnn { iso885915 } { 383 }
- {
- { A4 } { 20AC }
- { A6 } { 0160 }
- { A8 } { 0161 }
- { B4 } { 017D }
- { B8 } { 017E }
- { BC } { 0152 }
- { BD } { 0153 }
- { BE } { 0178 }
- }
- {
- }
-%</iso885915>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*iso885916>
-\@@_declare_eight_bit_encoding:nnnn { iso885916 } { 558 }
- {
- { A1 } { 0104 }
- { A2 } { 0105 }
- { A3 } { 0141 }
- { A4 } { 20AC }
- { A5 } { 201E }
- { A6 } { 0160 }
- { A8 } { 0161 }
- { AA } { 0218 }
- { AC } { 0179 }
- { AE } { 017A }
- { AF } { 017B }
- { B2 } { 010C }
- { B3 } { 0142 }
- { B4 } { 017D }
- { B5 } { 201D }
- { B8 } { 017E }
- { B9 } { 010D }
- { BA } { 0219 }
- { BC } { 0152 }
- { BD } { 0153 }
- { BE } { 0178 }
- { BF } { 017C }
- { C3 } { 0102 }
- { C5 } { 0106 }
- { D0 } { 0110 }
- { D1 } { 0143 }
- { D5 } { 0150 }
- { D7 } { 015A }
- { D8 } { 0170 }
- { DD } { 0118 }
- { DE } { 021A }
- { E3 } { 0103 }
- { E5 } { 0107 }
- { F0 } { 0111 }
- { F1 } { 0144 }
- { F5 } { 0151 }
- { F7 } { 015B }
- { F8 } { 0171 }
- { FD } { 0119 }
- { FE } { 021B }
- }
- {
- }
-%</iso885916>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3str.dtx b/macros/latex/contrib/l3kernel/l3str.dtx
deleted file mode 100644
index 88ad33c74b..0000000000
--- a/macros/latex/contrib/l3kernel/l3str.dtx
+++ /dev/null
@@ -1,2226 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3str.dtx
-%
-% Copyright (C) 2011-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3str} module\\ Strings^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \TeX{} associates each character with a category code: as such, there is no
-% concept of a \enquote{string} as commonly understood in many other
-% programming languages. However, there are places where we wish to manipulate
-% token lists while in some sense \enquote{ignoring} category codes: this is
-% done by treating token lists as strings in a \TeX{} sense.
-%
-% A \TeX{} string (and thus an \pkg{expl3} string) is a series of characters
-% which have category code $12$ (\enquote{other}) with the exception of
-% space characters which have category code $10$ (\enquote{space}). Thus
-% at a technical level, a \TeX{} string is a token list with the appropriate
-% category codes. In this documentation, these are simply referred to as
-% strings.
-%
-% String variables are simply specialised token lists, but by convention
-% should be named with the suffix \texttt{\ldots{}str}. Such variables
-% should contain characters with category code $12$ (other), except
-% spaces, which have category code $10$ (blank space). All the
-% functions in this module which accept a token list argument first
-% convert it to a string using \cs{tl_to_str:n} for internal processing,
-% and do not treat a token list or the corresponding string
-% representation differently.
-%
-% As a string is a subset of the more general token list, it is sometimes unclear
-% when one should be used over the other.
-% Use a string variable for data that isn't primarily intended for typesetting
-% and for which a level of protection from unwanted expansion is suitable.
-% This data type simplifies comparison of variables since there are no concerns
-% about expansion of their contents.
-%
-% The functions \cs{cs_to_str:N}, \cs{tl_to_str:n}, \cs{tl_to_str:N} and
-% \cs{token_to_str:N} (and variants) generate strings from the appropriate
-% input: these are documented in \pkg{l3basics}, \pkg{l3tl} and \pkg{l3token},
-% respectively.
-%
-% Most expandable functions in this module come in three flavours:
-% \begin{itemize}
-% \item \cs[no-index]{str_\ldots{}:N}, which expect a token list or string
-% variable as their argument;
-% \item \cs[no-index]{str_\ldots{}:n}, taking any token list (or string) as an
-% argument;
-% \item \cs[no-index]{str_\ldots{}_ignore_spaces:n}, which ignores any space
-% encountered during the operation: these functions are typically
-% faster than those which take care of escaping spaces
-% appropriately.
-% \end{itemize}
-%
-% \section{Creating and initialising string variables}
-%
-% \begin{function}[added = 2015-09-18]{\str_new:N, \str_new:c}
-% \begin{syntax}
-% \cs{str_new:N} \meta{str~var}
-% \end{syntax}
-% Creates a new \meta{str~var} or raises an error if the name is
-% already taken. The declaration is global. The \meta{str~var} is
-% initially empty.
-% \end{function}
-%
-% \begin{function}[added = 2015-09-18, updated = 2018-07-28]
-% {
-% \str_const:Nn, \str_const:NV, \str_const:Ne,
-% \str_const:cn, \str_const:cV, \str_const:ce
-% }
-% \begin{syntax}
-% \cs{str_const:Nn} \meta{str~var} \Arg{token list}
-% \end{syntax}
-% Creates a new constant \meta{str~var} or raises an error if the name
-% is already taken. The value of the \meta{str~var} is set
-% globally to the \meta{token list}, converted to a string.
-% \end{function}
-%
-% \begin{function}[added = 2015-09-18]
-% {\str_clear:N, \str_clear:c, \str_gclear:N, \str_gclear:c}
-% \begin{syntax}
-% \cs{str_clear:N} \meta{str~var}
-% \end{syntax}
-% Clears the content of the \meta{str~var}.
-% \end{function}
-%
-% \begin{function}[added = 2015-09-18]
-% {
-% \str_clear_new:N, \str_clear_new:c,
-% \str_gclear_new:N, \str_gclear_new:c
-% }
-% \begin{syntax}
-% \cs{str_clear_new:N} \meta{str~var}
-% \end{syntax}
-% Ensures that the \meta{str~var} exists globally by applying
-% \cs{str_new:N} if necessary, then applies
-% \cs[index=str_clear:N]{str_(g)clear:N} to leave
-% the \meta{str~var} empty.
-% \end{function}
-%
-% \begin{function}[added = 2015-09-18]
-% {
-% \str_set_eq:NN, \str_set_eq:cN, \str_set_eq:Nc, \str_set_eq:cc,
-% \str_gset_eq:NN, \str_gset_eq:cN, \str_gset_eq:Nc, \str_gset_eq:cc
-% }
-% \begin{syntax}
-% \cs{str_set_eq:NN} \meta{str~var_1} \meta{str~var_2}
-% \end{syntax}
-% Sets the content of \meta{str~var_1} equal to that of
-% \meta{str~var_2}.
-% \end{function}
-%
-% \begin{function}[added = 2017-10-08]
-% {
-% \str_concat:NNN, \str_concat:ccc,
-% \str_gconcat:NNN, \str_gconcat:ccc
-% }
-% \begin{syntax}
-% \cs{str_concat:NNN} \meta{str~var_1} \meta{str~var_2} \meta{str~var_3}
-% \end{syntax}
-% Concatenates the content of \meta{str~var_2} and \meta{str~var_3}
-% together and saves the result in \meta{str~var_1}. The \meta{str~var_2}
-% is placed at the left side of the new string variable.
-% The \meta{str~var_2} and \meta{str~var_3} must indeed be strings, as
-% this function does not convert their contents to a string.
-% \end{function}
-%
-% \begin{function}[EXP, pTF, added = 2015-09-18]
-% {\str_if_exist:N, \str_if_exist:c}
-% \begin{syntax}
-% \cs{str_if_exist_p:N} \meta{str~var}
-% \cs{str_if_exist:NTF} \meta{str~var} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests whether the \meta{str~var} is currently defined. This does not
-% check that the \meta{str~var} really is a string.
-% \end{function}
-%
-% \section{Adding data to string variables}
-%
-% \begin{function}[added = 2015-09-18, updated = 2018-07-28]
-% {
-% \str_set:Nn, \str_set:NV, \str_set:Ne,
-% \str_set:cn, \str_set:cV, \str_set:ce,
-% \str_gset:Nn, \str_gset:NV, \str_gset:Ne,
-% \str_gset:cn, \str_gset:cV, \str_gset:ce
-% }
-% \begin{syntax}
-% \cs{str_set:Nn} \meta{str var} \Arg{token list}
-% \end{syntax}
-% Converts the \meta{token list} to a \meta{string}, and stores the
-% result in \meta{str var}.
-% \end{function}
-%
-% \begin{function}[added = 2015-09-18, updated = 2018-07-28]
-% {
-% \str_put_left:Nn, \str_put_left:NV, \str_put_left:Ne,
-% \str_put_left:cn, \str_put_left:cV, \str_put_left:ce,
-% \str_gput_left:Nn, \str_gput_left:NV, \str_gput_left:Ne,
-% \str_gput_left:cn, \str_gput_left:cV, \str_gput_left:ce
-% }
-% \begin{syntax}
-% \cs{str_put_left:Nn} \meta{str var} \Arg{token list}
-% \end{syntax}
-% Converts the \meta{token list} to a \meta{string}, and prepends the
-% result to \meta{str var}. The current contents of the \meta{str
-% var} are not automatically converted to a string.
-% \end{function}
-%
-% \begin{function}[added = 2015-09-18, updated = 2018-07-28]
-% {
-% \str_put_right:Nn, \str_put_right:NV, \str_put_right:Ne,
-% \str_put_right:cn, \str_put_right:cV, \str_put_right:Ne,
-% \str_gput_right:Nn, \str_gput_right:NV, \str_gput_right:Ne,
-% \str_gput_right:cn, \str_gput_right:cV, \str_gput_right:ce
-% }
-% \begin{syntax}
-% \cs{str_put_right:Nn} \meta{str var} \Arg{token list}
-% \end{syntax}
-% Converts the \meta{token list} to a \meta{string}, and appends the
-% result to \meta{str var}. The current contents of the \meta{str
-% var} are not automatically converted to a string.
-% \end{function}
-%
-% \section{String conditionals}
-%
-% \begin{function}[EXP,pTF, added = 2015-09-18, updated = 2022-03-21]
-% {\str_if_empty:N, \str_if_empty:c, \str_if_empty:n}
-% \begin{syntax}
-% \cs{str_if_empty_p:N} \meta{str~var}
-% \cs{str_if_empty:NTF} \meta{str~var} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the \meta{string variable} is entirely empty
-% (\emph{i.e.}~contains no characters at all).
-% \end{function}
-%
-% \begin{function}[EXP,pTF, added = 2015-09-18]
-% {\str_if_eq:NN, \str_if_eq:Nc, \str_if_eq:cN, \str_if_eq:cc}
-% \begin{syntax}
-% \cs{str_if_eq_p:NN} \meta{str~var_1} \meta{str~var_2}
-% \cs{str_if_eq:NNTF} \meta{str~var_1} \meta{str~var_2} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Compares the content of two \meta{str variables} and
-% is logically \texttt{true} if the two contain the same characters
-% in the same order. See \cs{tl_if_eq:NNTF} to compare tokens
-% (including their category codes) rather than characters.
-% \end{function}
-%
-% \begin{function}[EXP,pTF, updated = 2018-06-18]
-% {
-% \str_if_eq:nn, \str_if_eq:Vn, \str_if_eq:on, \str_if_eq:no,
-% \str_if_eq:nV, \str_if_eq:VV, \str_if_eq:vn, \str_if_eq:nv,
-% \str_if_eq:ee
-% }
-% \begin{syntax}
-% \cs{str_if_eq_p:nn} \Arg{tl_1} \Arg{tl_2}
-% \cs{str_if_eq:nnTF} \Arg{tl_1} \Arg{tl_2} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Compares the two \meta{token lists} on a character by character
-% basis (namely after converting them to strings),
-% and is \texttt{true} if the two \meta{strings} contain the same
-% characters in the same order. Thus for example
-% \begin{verbatim}
-% \str_if_eq_p:no { abc } { \tl_to_str:n { abc } }
-% \end{verbatim}
-% is logically \texttt{true}. See \cs{tl_if_eq:nnTF} to compare
-% tokens (including their category codes) rather than characters.
-% \end{function}
-%
-% \begin{function}[TF, added = 2017-10-08]{\str_if_in:Nn, \str_if_in:cn}
-% \begin{syntax}
-% \cs{str_if_in:NnTF} \meta{str~var} \Arg{token list} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Converts the \meta{token list} to a \meta{string} and
-% tests if that \meta{string} is found in the content of the
-% \meta{str~var}.
-% \end{function}
-%
-% \begin{function}[TF, added = 2017-10-08]{\str_if_in:nn}
-% \begin{syntax}
-% \cs{str_if_in:nnTF} \Arg{tl_1} \Arg{tl_2} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Converts both \meta{token lists} to \meta{strings} and
-% tests whether \meta{string_2} is found inside \meta{string_1}.
-% \end{function}
-%
-% \begin{function}[added = 2013-07-24, updated = 2022-03-21, EXP, noTF]
-% {
-% \str_case:nn, \str_case:Vn, \str_case:Nn, \str_case:on, \str_case:en,
-% \str_case:nV, \str_case:nv
-% }
-% \begin{syntax}
-% \cs{str_case:nnTF} \Arg{test string} \\
-% ~~|{| \\
-% ~~~~\Arg{string case_1} \Arg{code case_1} \\
-% ~~~~\Arg{string case_2} \Arg{code case_2} \\
-% ~~~~\ldots \\
-% ~~~~\Arg{string case_n} \Arg{code case_n} \\
-% ~~|}| \\
-% ~~\Arg{true code}
-% ~~\Arg{false code}
-% \end{syntax}
-% Compares the \meta{test string} in turn with each
-% of the \meta{string case}s (all token lists are converted to strings).
-% If the two are equal (as described for
-% \cs{str_if_eq:nnTF}) then the associated \meta{code} is left in the
-% input stream and other cases are discarded. If any of the
-% cases are matched, the \meta{true code} is also inserted into the
-% input stream (after the code for the appropriate case), while if none
-% match then the \meta{false code} is inserted. The function
-% \cs{str_case:nn}, which does nothing if there is no match, is also
-% available.
-%
-% This set of functions performs no expansion on each
-% \meta{string~case} argument, so any variable in there will be
-% compared as a string. If expansion is needed in the
-% \meta{string~case}s, then \cs[no-index]{str_case_e:nn(TF)} should
-% be used instead.
-% \end{function}
-%
-% \begin{function}[added = 2018-06-19, EXP, noTF]
-% {\str_case_e:nn, \str_case_e:en}
-% \begin{syntax}
-% \cs{str_case_e:nnTF} \Arg{test string} \\
-% ~~|{| \\
-% ~~~~\Arg{string case_1} \Arg{code case_1} \\
-% ~~~~\Arg{string case_2} \Arg{code case_2} \\
-% ~~~~\ldots \\
-% ~~~~\Arg{string case_n} \Arg{code case_n} \\
-% ~~|}| \\
-% ~~\Arg{true code}
-% ~~\Arg{false code}
-% \end{syntax}
-% Compares the full expansion of the \meta{test string}
-% in turn with the full expansion of the \meta{string case}s
-% (all token lists are converted to strings). If the two
-% full expansions are equal (as described for \cs{str_if_eq:eeTF}) then the
-% associated \meta{code} is left in the input stream
-% and other cases are discarded. If any of the
-% cases are matched, the \meta{true code} is also inserted into the
-% input stream (after the code for the appropriate case), while if none
-% match then the \meta{false code} is inserted. The function
-% \cs{str_case_e:nn}, which does nothing if there is no match, is also
-% available.
-% In \cs[index=str_case_e:nnTF]{str_case_e:nn(TF)}, the \meta{test string}
-% is expanded in each comparison, and must always yield the same result:
-% for example, random numbers must not be used within this string.
-% \end{function}
-%
-% \begin{function}[EXP, pTF, added = 2021-05-17]{\str_compare:nNn, \str_compare:eNe}
-% \begin{syntax}
-% \cs{str_compare_p:nNn} \Arg{tl_1} \meta{relation} \Arg{tl_2}
-% \cs{str_compare:nNnTF} \Arg{tl_1} \meta{relation} \Arg{tl_2} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Compares the two \meta{token lists} on a character by character
-% basis (namely after converting them to strings) in a lexicographic
-% order according to the character codes of the characters. The
-% \meta{relation} can be |<|, |=|, or~|>| and the test is
-% \texttt{true} under the following conditions:
-% \begin{itemize}
-% \item for |<|, if the first string is earlier than the second in lexicographic order;
-% \item for |=|, if the two strings have exactly the same characters;
-% \item for |>|, if the first string is later than the second in lexicographic order.
-% \end{itemize}
-% Thus for example the following is logically \texttt{true}:
-% \begin{verbatim}
-% \str_compare_p:nNn { ab } < { abc }
-% \end{verbatim}
-% \begin{texnote}
-% This is a wrapper around the \TeX{} primitive
-% \cs[index=pdfstrcmp]{(pdf)strcmp}. It is meant for programming
-% and not for sorting textual contents, as it simply considers
-% character codes and not more elaborate considerations of grapheme
-% clusters, locale, etc.
-% \end{texnote}
-% \end{function}
-%
-% \section{Mapping over strings}
-%
-% All mappings are done at the current group level, \emph{i.e.}~any
-% local assignments made by the \meta{function} or \meta{code} discussed
-% below remain in effect after the loop.
-%
-% \begin{function}[added = 2017-11-14, rEXP]
-% {\str_map_function:nN, \str_map_function:NN, \str_map_function:cN}
-% \begin{syntax}
-% \cs{str_map_function:nN} \Arg{token list} \meta{function}
-% \cs{str_map_function:NN} \meta{str~var} \meta{function}
-% \end{syntax}
-% Converts the \meta{token list} to a \meta{string} then
-% applies \meta{function} to every \meta{character} in the
-% \meta{string} including spaces.
-% \end{function}
-%
-% \begin{function}[added = 2017-11-14]
-% {\str_map_inline:nn, \str_map_inline:Nn, \str_map_inline:cn}
-% \begin{syntax}
-% \cs{str_map_inline:nn} \Arg{token list} \Arg{inline function}
-% \cs{str_map_inline:Nn} \meta{str~var} \Arg{inline function}
-% \end{syntax}
-% Converts the \meta{token list} to a \meta{string} then
-% applies the \meta{inline function} to every \meta{character} in the
-% \meta{str~var} including spaces.
-% The \meta{inline function} should consist of code which
-% receives the \meta{character} as |#1|.
-% \end{function}
-%
-% \begin{function}[rEXP, added = 2021-05-05]
-% {\str_map_tokens:nn, \str_map_tokens:Nn, \str_map_tokens:cn}
-% \begin{syntax}
-% \cs{str_map_tokens:nn} \Arg{token list} \Arg{code}
-% \cs{str_map_tokens:Nn} \meta{str~var} \Arg{code}
-% \end{syntax}
-% Converts the \meta{token list} to a \meta{string} then applies
-% \meta{code} to every \meta{character} in the \meta{string} including
-% spaces. The \meta{code} receives each character as a trailing brace
-% group. This is equivalent to \cs{str_map_function:nN} if the
-% \meta{code} consists of a single function.
-% \end{function}
-%
-% \begin{function}[added = 2017-11-14]
-% {\str_map_variable:nNn, \str_map_variable:NNn, \str_map_variable:cNn}
-% \begin{syntax}
-% \cs{str_map_variable:nNn} \Arg{token list} \meta{variable} \Arg{code}
-% \cs{str_map_variable:NNn} \meta{str~var} \meta{variable} \Arg{code}
-% \end{syntax}
-% Converts the \meta{token list} to a \meta{string} then stores each
-% \meta{character} in the \meta{string} (including spaces) in turn in
-% the (string or token list) \meta{variable} and applies the
-% \meta{code}. The \meta{code} will usually make use of the
-% \meta{variable}, but this is not enforced. The assignments to the
-% \meta{variable} are local. Its value after the loop is the last
-% \meta{character} in the \meta{string}, or its original value if the
-% \meta{string} is empty. See also \cs{str_map_inline:Nn}.
-% \end{function}
-%
-% \begin{function}[added = 2017-10-08, rEXP]{\str_map_break:}
-% \begin{syntax}
-% \cs{str_map_break:}
-% \end{syntax}
-% Used to terminate a \cs[no-index]{str_map_\ldots} function before all
-% characters in the \meta{string} have been processed. This
-% normally takes place within a conditional statement, for example
-% \begin{verbatim}
-% \str_map_inline:Nn \l_my_str
-% {
-% \str_if_eq:nnT { #1 } { bingo } { \str_map_break: }
-% % Do something useful
-% }
-% \end{verbatim}
-% See also \cs{str_map_break:n}.
-% Use outside of a \cs[no-index]{str_map_\ldots} scenario leads to low
-% level \TeX{} errors.
-% \begin{texnote}
-% When the mapping is broken, additional tokens may be inserted
-% before continuing with the
-% code that follows the loop.
-% This depends on the design of the mapping function.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[added = 2017-10-08, rEXP]{\str_map_break:n}
-% \begin{syntax}
-% \cs{str_map_break:n} \Arg{code}
-% \end{syntax}
-% Used to terminate a \cs[no-index]{str_map_\ldots} function before all
-% characters in the \meta{string} have been processed, inserting
-% the \meta{code} after the mapping has ended. This
-% normally takes place within a conditional statement, for example
-% \begin{verbatim}
-% \str_map_inline:Nn \l_my_str
-% {
-% \str_if_eq:nnT { #1 } { bingo }
-% { \str_map_break:n { <code> } }
-% % Do something useful
-% }
-% \end{verbatim}
-% Use outside of a \cs[no-index]{str_map_\ldots} scenario leads to low
-% level \TeX{} errors.
-% \begin{texnote}
-% When the mapping is broken, additional tokens may be inserted
-% before the \meta{code} is
-% inserted into the input stream.
-% This depends on the design of the mapping function.
-% \end{texnote}
-% \end{function}
-%
-% \section{Working with the content of strings}
-%
-% \begin{function}[EXP, added = 2015-09-18]{\str_use:N, \str_use:c}
-% \begin{syntax}
-% \cs{str_use:N} \meta{str~var}
-% \end{syntax}
-% Recovers the content of a \meta{str~var} and places it
-% directly in the input stream. An error is raised if the variable
-% does not exist or if it is invalid. Note that it is possible to use
-% a \meta{str} directly without an accessor function.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2015-09-18]
-% {\str_count:N, \str_count:c, \str_count:n, \str_count_ignore_spaces:n}
-% \begin{syntax}
-% \cs{str_count:n} \Arg{token list}
-% \end{syntax}
-% Leaves in the input stream the number of characters in the string
-% representation of \meta{token list}, as an integer denotation. The
-% functions differ in their treatment of spaces. In the case of
-% \cs{str_count:N} and \cs{str_count:n}, all characters including
-% spaces are counted. The \cs{str_count_ignore_spaces:n} function
-% leaves the number of non-space characters in the input stream.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2015-09-18]
-% {\str_count_spaces:N, \str_count_spaces:c, \str_count_spaces:n}
-% \begin{syntax}
-% \cs{str_count_spaces:n} \Arg{token list}
-% \end{syntax}
-% Leaves in the input stream the number of space characters in the
-% string representation of \meta{token list}, as an integer
-% denotation. Of course, this function has no \texttt{_ignore_spaces}
-% variant.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2015-09-18]
-% {\str_head:N, \str_head:c, \str_head:n, \str_head_ignore_spaces:n}
-% \begin{syntax}
-% \cs{str_head:n} \Arg{token list}
-% \end{syntax}
-% Converts the \meta{token list} into a \meta{string}. The first
-% character in the \meta{string} is then left in the input stream,
-% with category code \enquote{other}. The functions differ if the
-% first character is a space: \cs{str_head:N} and \cs{str_head:n}
-% return a space token with category code~$10$ (blank space), while
-% the \cs{str_head_ignore_spaces:n} function ignores this space
-% character and leaves the first non-space character in the input
-% stream. If the \meta{string} is empty (or only contains spaces in
-% the case of the \texttt{_ignore_spaces} function), then nothing is
-% left on the input stream.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2015-09-18]
-% {\str_tail:N, \str_tail:c, \str_tail:n, \str_tail_ignore_spaces:n}
-% \begin{syntax}
-% \cs{str_tail:n} \Arg{token list}
-% \end{syntax}
-% Converts the \meta{token list} to a \meta{string}, removes the first
-% character, and leaves the remaining characters (if any) in the input
-% stream, with category codes $12$ and $10$ (for spaces). The
-% functions differ in the case where the first character is a space:
-% \cs{str_tail:N} and \cs{str_tail:n} only trim that space, while
-% \cs{str_tail_ignore_spaces:n} removes the first non-space character
-% and any space before it. If the \meta{token list} is empty (or
-% blank in the case of the \texttt{_ignore_spaces} variant), then
-% nothing is left on the input stream.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2015-09-18]
-% {\str_item:Nn, \str_item:nn, \str_item_ignore_spaces:nn}
-% \begin{syntax}
-% \cs{str_item:nn} \Arg{token list} \Arg{integer expression}
-% \end{syntax}
-% Converts the \meta{token list} to a \meta{string}, and leaves in the
-% input stream the character in position \meta{integer expression} of
-% the \meta{string}, starting at $1$ for the first (left-most)
-% character. In the case of \cs{str_item:Nn} and \cs{str_item:nn},
-% all characters including spaces are taken into account. The
-% \cs{str_item_ignore_spaces:nn} function skips spaces when counting
-% characters. If the \meta{integer expression} is negative,
-% characters are counted from the end of the \meta{string}. Hence,
-% $-1$ is the right-most character, \emph{etc.}
-% \end{function}
-%
-% \begin{function}[EXP, added = 2015-09-18]
-% {
-% \str_range:Nnn, \str_range:cnn, \str_range:nnn,
-% \str_range_ignore_spaces:nnn
-% }
-% \begin{syntax}
-% \cs{str_range:nnn} \Arg{token list} \Arg{start index} \Arg{end index}
-% \end{syntax}
-% Converts the \meta{token list} to a \meta{string}, and leaves in the
-% input stream the characters from the \meta{start index} to the
-% \meta{end index} inclusive. Spaces are preserved and counted as items
-% (contrast this with \cs{tl_range:nnn} where spaces are not counted as
-% items and are possibly discarded from the output).
-%
-% Here \meta{start index} and \meta{end index} should be integer denotations.
-% For describing in detail the functions' behavior, let $m$ and $n$ be the start
-% and end index respectively. If either is $0$, the result is empty. A positive
-% index means `start counting from the left end', a negative index means
-% `start counting from the right end'. Let $l$ be the count of the token list.
-%
-% The \emph{actual start point} is determined as $M=m$ if~$m>0$ and as $M=l+m+1$
-% if~$m<0$. Similarly the \emph{actual end point} is $N=n$ if~$n>0$ and $N=l+n+1$
-% if~$n<0$. If $M>N$, the result is empty. Otherwise it consists of all items from
-% position $M$ to position $N$ inclusive; for the purpose of this rule, we can
-% imagine that the token list extends at infinity on either side, with void items
-% at positions $s$ for $s\le0$ or $s>l$.
-% For instance,
-% \begin{verbatim}
-% \iow_term:e { \str_range:nnn { abcdef } { 2 } { 5 } }
-% \iow_term:e { \str_range:nnn { abcdef } { -4 } { -1 } }
-% \iow_term:e { \str_range:nnn { abcdef } { -2 } { -1 } }
-% \iow_term:e { \str_range:nnn { abcdef } { 0 } { -1 } }
-% \end{verbatim}
-% prints \texttt{bcde}, \texttt{cdef}, \texttt{ef}, and an empty
-% line to the terminal. The \meta{start index} must always be smaller than
-% or equal to the \meta{end index}: if this is not the case then no output
-% is generated. Thus
-% \begin{verbatim}
-% \iow_term:e { \str_range:nnn { abcdef } { 5 } { 2 } }
-% \iow_term:e { \str_range:nnn { abcdef } { -1 } { -4 } }
-% \end{verbatim}
-% both yield empty strings.
-% \end{function}
-%
-% ^^A If this stays in the same {function} environment, we get a really
-% ^^A awful page break. Perhaps we should add a way to allow a page break
-% ^^A in a function environment...
-% The behavior of \cs{str_range_ignore_spaces:nnn} is similar, but spaces
-% are removed before starting the job. The input
-% \begin{verbatim}
-% \iow_term:e { \str_range:nnn { abcdefg } { 2 } { 5 } }
-% \iow_term:e { \str_range:nnn { abcdefg } { 2 } { -3 } }
-% \iow_term:e { \str_range:nnn { abcdefg } { -6 } { 5 } }
-% \iow_term:e { \str_range:nnn { abcdefg } { -6 } { -3 } }
-%
-% \iow_term:e { \str_range:nnn { abc~efg } { 2 } { 5 } }
-% \iow_term:e { \str_range:nnn { abc~efg } { 2 } { -3 } }
-% \iow_term:e { \str_range:nnn { abc~efg } { -6 } { 5 } }
-% \iow_term:e { \str_range:nnn { abc~efg } { -6 } { -3 } }
-%
-% \iow_term:e { \str_range_ignore_spaces:nnn { abcdefg } { 2 } { 5 } }
-% \iow_term:e { \str_range_ignore_spaces:nnn { abcdefg } { 2 } { -3 } }
-% \iow_term:e { \str_range_ignore_spaces:nnn { abcdefg } { -6 } { 5 } }
-% \iow_term:e { \str_range_ignore_spaces:nnn { abcdefg } { -6 } { -3 } }
-%
-% \iow_term:e { \str_range_ignore_spaces:nnn { abcd~efg } { 2 } { 5 } }
-% \iow_term:e { \str_range_ignore_spaces:nnn { abcd~efg } { 2 } { -3 } }
-% \iow_term:e { \str_range_ignore_spaces:nnn { abcd~efg } { -6 } { 5 } }
-% \iow_term:e { \str_range_ignore_spaces:nnn { abcd~efg } { -6 } { -3 } }
-% \end{verbatim}
-% will print four instances of |bcde|, four instances of |bc e| and eight
-% instances of |bcde|.
-% ^^A\end{function}
-%
-% \section{Modifying string variables}
-%
-% \begin{function}[added = 2017-10-08]
-% {
-% \str_replace_once:Nnn, \str_replace_once:cnn,
-% \str_greplace_once:Nnn, \str_greplace_once:cnn
-% }
-% \begin{syntax}
-% \cs{str_replace_once:Nnn} \meta{str~var} \Arg{old} \Arg{new}
-% \end{syntax}
-% Converts the \meta{old} and \meta{new} token lists to strings, then
-% replaces the first (leftmost) occurrence of \meta{old string} in the
-% \meta{str~var} with \meta{new string}.
-% \end{function}
-%
-% \begin{function}[added = 2017-10-08]
-% {
-% \str_replace_all:Nnn, \str_replace_all:cnn,
-% \str_greplace_all:Nnn, \str_greplace_all:cnn
-% }
-% \begin{syntax}
-% \cs{str_replace_all:Nnn} \meta{str~var} \Arg{old} \Arg{new}
-% \end{syntax}
-% Converts the \meta{old} and \meta{new} token lists to strings, then
-% replaces all occurrences of \meta{old string} in the
-% \meta{str~var} with \meta{new string}.
-% As this function
-% operates from left to right, the pattern \meta{old string}
-% may remain after the replacement (see \cs{str_remove_all:Nn}
-% for an example).
-% \end{function}
-%
-% \begin{function}[added = 2017-10-08]
-% {
-% \str_remove_once:Nn, \str_remove_once:cn,
-% \str_gremove_once:Nn, \str_gremove_once:cn
-% }
-% \begin{syntax}
-% \cs{str_remove_once:Nn} \meta{str~var} \Arg{token list}
-% \end{syntax}
-% Converts the \meta{token list} to a \meta{string} then
-% removes the first (leftmost) occurrence of \meta{string} from the
-% \meta{str~var}.
-% \end{function}
-%
-% \begin{function}[added = 2017-10-08]
-% {
-% \str_remove_all:Nn, \str_remove_all:cn,
-% \str_gremove_all:Nn, \str_gremove_all:cn
-% }
-% \begin{syntax}
-% \cs{str_remove_all:Nn} \meta{str~var} \Arg{token list}
-% \end{syntax}
-% Converts the \meta{token list} to a \meta{string} then
-% removes all occurrences of \meta{string} from the
-% \meta{str~var}.
-% As this function
-% operates from left to right, the pattern \meta{string}
-% may remain after the removal, for instance,
-% \begin{quote}
-% \cs{str_set:Nn} \cs{l_tmpa_str} |{abbccd}|
-% \cs{str_remove_all:Nn} \cs{l_tmpa_str} |{bc}|
-% \end{quote}
-% results in \cs{l_tmpa_str} containing \texttt{abcd}.
-% \end{function}
-%
-% \section{String manipulation}
-%
-% \begin{function}[EXP, added = 2019-11-26]
-% {
-% \str_lowercase:n, \str_lowercase:f,
-% \str_uppercase:n, \str_uppercase:f
-% }
-% \begin{syntax}
-% \cs{str_lowercase:n} \Arg{tokens}
-% \cs{str_uppercase:n} \Arg{tokens}
-% \end{syntax}
-% Converts the input \meta{tokens} to their string representation, as
-% described for \cs{tl_to_str:n}, and then to the lower or upper
-% case representation using a one-to-one mapping as described by the
-% Unicode Consortium file |UnicodeData.txt|.
-%
-% These functions are intended for case changing programmatic data in
-% places where upper/lower case distinctions are meaningful. One example
-% would be automatically generating a function name from user input where
-% some case changing is needed. In this situation the input is programmatic,
-% not textual, case does have meaning and a language-independent one-to-one
-% mapping is appropriate. For example
-% \begin{verbatim}
-% \cs_new_protected:Npn \myfunc:nn #1#2
-% {
-% \cs_set_protected:cpn
-% {
-% user
-% \str_uppercase:f { \tl_head:n {#1} }
-% \str_lowercase:f { \tl_tail:n {#1} }
-% }
-% { #2 }
-% }
-% \end{verbatim}
-% would be used to generate a function with an auto-generated name consisting
-% of the upper case equivalent of the supplied name followed by the lower
-% case equivalent of the rest of the input.
-%
-% These functions should \emph{not} be used for
-% \begin{itemize}
-% \item Caseless comparisons: use \cs{str_casefold:n} for this
-% situation (case folding is distinct from lower casing).
-% \item Case changing text for typesetting: see the
-% \cs[index=text_lowercase:n]{text_lowercase:n(n)},
-% \cs[index=text_uppercase:n]{text_uppercase:n(n)} and
-% \cs[index=text_titlecase_all:n]{text_titlecase_(all|once):n(n)} functions which
-% correctly deal with context-dependence and other factors appropriate
-% to text case changing.
-% \end{itemize}
-% \end{function}
-%
-% \begin{function}[EXP, added = 2022-10-16]
-% {\str_casefold:n, \str_casefold:V}
-% \begin{syntax}
-% \cs{str_casefold:n} \Arg{tokens}
-% \end{syntax}
-% Converts the input \meta{tokens} to their string representation, as
-% described for \cs{tl_to_str:n}, and then folds the case of the resulting
-% \meta{string} to remove case information. The result of this process is
-% left in the input stream.
-%
-% String folding is a process used for material such as identifiers rather
-% than for \enquote{text}. The folding provided by \cs{str_casefold:n}
-% follows the mappings provided by the \href{http://www.unicode.org}^^A
-% {Unicode Consortium}, who
-% \href{http://www.unicode.org/faq/casemap_charprop.html#2}{state}:
-% \begin{quote}
-% Case folding is primarily used for caseless comparison of text, such
-% as identifiers in a computer program, rather than actual text
-% transformation. Case folding in Unicode is based on the lowercase
-% mapping, but includes additional changes to the source text to help make
-% it language-insensitive and consistent. As a result, case-folded text
-% should be used solely for internal processing and generally should not be
-% stored or displayed to the end user.
-% \end{quote}
-% The folding approach implemented by \cs{str_casefold:n} follows the
-% \enquote{full} scheme defined by the Unicode Consortium
-% (\emph{e.g.}~\SS folds to \texttt{SS}). As case-folding is
-% a language-insensitive process, there is no special treatment of
-% Turkic input (\emph{i.e.}~\texttt{I} always folds to \texttt{i} and
-% not to \texttt{\i}).
-% \end{function}
-%
-% \begin{function}[added = 2023-05-19, EXP]{\str_mdfive_hash:n, \str_mdfive_hash:e}
-% \begin{syntax}
-% \cs{str_mdfive_hash:n} \Arg{tl}
-% \end{syntax}
-% Expands to the MD5 sum generated from the \meta{tl}, which is converted
-% to a \meta{string} as described for \cs{tl_to_str:n}.
-% \end{function}
-%
-% \section{Viewing strings}
-%
-% \begin{function}[added = 2015-09-18, updated = 2021-04-29]
-% {\str_show:N, \str_show:c, \str_show:n}
-% \begin{syntax}
-% \cs{str_show:N} \meta{str~var}
-% \end{syntax}
-% Displays the content of the \meta{str~var} on the terminal.
-% \end{function}
-%
-% \begin{function}[added = 2019-02-15, updated = 2021-04-29]
-% {\str_log:N, \str_log:c, \str_log:n}
-% \begin{syntax}
-% \cs{str_log:N} \meta{str~var}
-% \end{syntax}
-% Writes the content of the \meta{str~var} in the log file.
-% \end{function}
-%
-% \section{Constant strings}
-%
-% \begin{variable}[added = 2015-09-19, updated = 2020-12-22, module = str]
-% {
-% \c_ampersand_str,
-% \c_atsign_str,
-% \c_backslash_str,
-% \c_left_brace_str,
-% \c_right_brace_str,
-% \c_circumflex_str,
-% \c_colon_str,
-% \c_dollar_str,
-% \c_hash_str,
-% \c_percent_str,
-% \c_tilde_str,
-% \c_underscore_str,
-% \c_zero_str
-% }
-% Constant strings, containing a single character token, with category
-% code $12$.
-% \end{variable}
-%
-% \begin{variable}[added = 2023-12-07]{\c_empty_str}
-% Constant that is always empty.
-% \end{variable}
-%
-% \section{Scratch strings}
-%
-% \begin{variable}{\l_tmpa_str, \l_tmpb_str}
-% Scratch strings for local assignment. These are never used by
-% the kernel code, and so are safe for use with any \LaTeX3-defined
-% function. However, they may be overwritten by other non-kernel
-% code and so should only be used for short-term storage.
-% \end{variable}
-%
-% \begin{variable}{\g_tmpa_str, \g_tmpb_str}
-% Scratch strings for global assignment. These are never used by
-% the kernel code, and so are safe for use with any \LaTeX3-defined
-% function. However, they may be overwritten by other non-kernel
-% code and so should only be used for short-term storage.
-% \end{variable}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3str} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=str>
-% \end{macrocode}
-%
-% \subsection{Internal auxiliaries}
-%
-% \begin{variable}{\s_@@_mark,\s_@@_stop}
-% Internal scan marks.
-% \begin{macrocode}
-\scan_new:N \s_@@_mark
-\scan_new:N \s_@@_stop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[EXP]{
-% \@@_use_none_delimit_by_s_stop:w,
-% \@@_use_i_delimit_by_s_stop:nw
-% }
-% Functions to gobble up to a scan mark.
-% \begin{macrocode}
-\cs_new:Npn \@@_use_none_delimit_by_s_stop:w #1 \s_@@_stop { }
-\cs_new:Npn \@@_use_i_delimit_by_s_stop:nw #1 #2 \s_@@_stop {#1}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\q_@@_recursion_tail,\q_@@_recursion_stop}
-% Internal recursion quarks.
-% \begin{macrocode}
-\quark_new:N \q_@@_recursion_tail
-\quark_new:N \q_@@_recursion_stop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[EXP]{
-% \@@_if_recursion_tail_break:NN,
-% \@@_if_recursion_tail_stop_do:Nn
-% }
-% Functions to query recursion quarks.
-% \begin{macrocode}
-\__kernel_quark_new_test:N \@@_if_recursion_tail_break:NN
-\__kernel_quark_new_test:N \@@_if_recursion_tail_stop_do:Nn
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Creating and setting string variables}
-%
-% \begin{macro}
-% {
-% \str_new:N, \str_new:c,
-% \str_use:N, \str_use:c,
-% \str_clear:N, \str_clear:c,
-% \str_gclear:N,\str_gclear:c,
-% \str_clear_new:N, \str_clear_new:c,
-% \str_gclear_new:N, \str_gclear_new:c
-% }
-% \begin{macro}
-% {
-% \str_set_eq:NN, \str_set_eq:cN, \str_set_eq:Nc, \str_set_eq:cc,
-% \str_gset_eq:NN, \str_gset_eq:cN, \str_gset_eq:Nc, \str_gset_eq:cc
-% }
-% \begin{macro}
-% {\str_concat:NNN, \str_concat:ccc, \str_gconcat:NNN, \str_gconcat:ccc}
-% A string is simply a token list. The full mapping system isn't set up
-% yet so do things by hand.
-% \begin{macrocode}
-\group_begin:
- \cs_set_protected:Npn \@@_tmp:n #1
- {
- \tl_if_blank:nF {#1}
- {
- \cs_new_eq:cc { str_ #1 :N } { tl_ #1 :N }
- \exp_args:Nc \cs_generate_variant:Nn { str_ #1 :N } { c }
- \@@_tmp:n
- }
- }
- \@@_tmp:n
- { new }
- { use }
- { clear }
- { gclear }
- { clear_new }
- { gclear_new }
- { }
-\group_end:
-\cs_new_eq:NN \str_set_eq:NN \tl_set_eq:NN
-\cs_new_eq:NN \str_gset_eq:NN \tl_gset_eq:NN
-\cs_generate_variant:Nn \str_set_eq:NN { c , Nc , cc }
-\cs_generate_variant:Nn \str_gset_eq:NN { c , Nc , cc }
-\cs_new_eq:NN \str_concat:NNN \tl_concat:NNN
-\cs_new_eq:NN \str_gconcat:NNN \tl_gconcat:NNN
-\cs_generate_variant:Nn \str_concat:NNN { ccc }
-\cs_generate_variant:Nn \str_gconcat:NNN { ccc }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \str_set:Nn, \str_set:NV, \str_set:Ne, \str_set:Nx,
-% \str_set:cn, \str_set:cV, \str_set:ce, \str_set:cx,
-% \str_gset:Nn, \str_gset:NV, \str_gset:Ne, \str_gset:Nx,
-% \str_gset:cn, \str_gset:cV, \str_gset:ce, \str_gset:cx,
-% \str_const:Nn, \str_const:NV, \str_const:Ne, \str_const:Nx,
-% \str_const:cn, \str_const:cV, \str_const:ce, \str_const:cx,
-% \str_put_left:Nn, \str_put_left:NV, \str_put_left:Ne, \str_put_left:Nx,
-% \str_put_left:cn, \str_put_left:cV, \str_put_left:ce, \str_put_left:cx,
-% \str_gput_left:Nn, \str_gput_left:NV, \str_gput_left:Ne, \str_gput_left:Nx,
-% \str_gput_left:cn, \str_gput_left:cV, \str_gput_left:ce, \str_gput_left:cx,
-% \str_put_right:Nn, \str_put_right:NV, \str_put_right:Ne, \str_put_right:Nx,
-% \str_put_right:cn, \str_put_right:cV, \str_put_right:ce, \str_put_right:cx,
-% \str_gput_right:Nn, \str_gput_right:NV, \str_gput_right:Ne, \str_gput_right:Nx,
-% \str_gput_right:cn, \str_gput_right:cV, \str_gput_right:ce, \str_gput_right:cx
-% }
-% Similar to corresponding \pkg{l3tl} base functions, except that
-% \cs{__kernel_exp_not:w} is replaced with \cs{__kernel_tl_to_str:w}.
-% Just like token list, string constants use \cs{cs_gset_nopar:Npe}
-% instead of \cs{__kernel_tl_gset:Nx} so that the scope checking for
-% |c| is applied when \pkg{l3debug} is used.
-% To maintain backward compatibility, in
-% \cs[index=str_put_left:Nn]{str_(g)put_left:Nn} and
-% \cs[index=str_put_right:Nn]{str_(g)put_right:Nn},
-% contents of string variables are wrapped in \cs{__kernel_exp_not:w}
-% to prevent further expansion.
-% \begin{macrocode}
-\cs_new_protected:Npn \str_set:Nn #1#2
- { \__kernel_tl_set:Nx #1 { \__kernel_tl_to_str:w {#2} } }
-\cs_gset_protected:Npn \str_gset:Nn #1#2
- { \__kernel_tl_gset:Nx #1 { \__kernel_tl_to_str:w {#2} } }
-\cs_new_protected:Npn \str_const:Nn #1#2
- {
- \__kernel_chk_if_free_cs:N #1
- \cs_gset_nopar:Npe #1 { \__kernel_tl_to_str:w {#2} }
- }
-\cs_new_protected:Npn \str_put_left:Nn #1#2
- {
- \__kernel_tl_set:Nx #1
- { \__kernel_tl_to_str:w {#2} \__kernel_exp_not:w \exp_after:wN {#1} }
- }
-\cs_new_protected:Npn \str_gput_left:Nn #1#2
- {
- \__kernel_tl_gset:Nx #1
- { \__kernel_tl_to_str:w {#2} \__kernel_exp_not:w \exp_after:wN {#1} }
- }
-\cs_new_protected:Npn \str_put_right:Nn #1#2
- {
- \__kernel_tl_set:Nx #1
- { \__kernel_exp_not:w \exp_after:wN {#1} \__kernel_tl_to_str:w {#2} }
- }
-\cs_new_protected:Npn \str_gput_right:Nn #1#2
- {
- \__kernel_tl_gset:Nx #1
- { \__kernel_exp_not:w \exp_after:wN {#1} \__kernel_tl_to_str:w {#2} }
- }
-\cs_generate_variant:Nn \str_set:Nn { NV , Ne , Nx , c , cV , ce , cx }
-\cs_generate_variant:Nn \str_gset:Nn { NV , Ne , Nx , c , cV , ce , cx }
-\cs_generate_variant:Nn \str_const:Nn { NV , Ne , Nx , c , cV , ce , cx }
-\cs_generate_variant:Nn \str_put_left:Nn { NV , Ne , Nx , c , cV , ce , cx }
-\cs_generate_variant:Nn \str_gput_left:Nn { NV , Ne , Nx , c , cV , ce , cx }
-\cs_generate_variant:Nn \str_put_right:Nn { NV , Ne , Nx , c , cV , ce , cx }
-\cs_generate_variant:Nn \str_gput_right:Nn { NV , Ne , Nx , c , cV , ce , cx }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Modifying string variables}
-%
-% \begin{macro}
-% {
-% \str_replace_all:Nnn, \str_replace_all:cnn,
-% \str_greplace_all:Nnn, \str_greplace_all:cnn,
-% \str_replace_once:Nnn, \str_replace_once:cnn,
-% \str_greplace_once:Nnn, \str_greplace_once:cnn
-% }
-% \begin{macro}{\@@_replace:NNNnn}
-% \begin{macro}{\@@_replace_aux:NNNnnn}
-% \begin{macro}{\@@_replace_next:w}
-% Start by applying \cs{tl_to_str:n} to convert the old and new token
-% lists to strings, and also apply \cs{tl_to_str:N} to avoid any
-% issues if we are fed a token list variable. Then the code is a much
-% simplified version of the token list code because neither the
-% delimiter nor the replacement can contain macro parameters or
-% braces. The delimiter \cs{s_@@_mark} cannot appear in the string to
-% edit so it is used in all cases. Some |e|-expansion is unnecessary.
-% There is no need to avoid losing braces nor to protect against
-% expansion. The ending code is much simplified and does not need to
-% hide in braces.
-% \begin{macrocode}
-\cs_new_protected:Npn \str_replace_once:Nnn
- { \@@_replace:NNNnn \prg_do_nothing: \__kernel_tl_set:Nx }
-\cs_new_protected:Npn \str_greplace_once:Nnn
- { \@@_replace:NNNnn \prg_do_nothing: \__kernel_tl_gset:Nx }
-\cs_new_protected:Npn \str_replace_all:Nnn
- { \@@_replace:NNNnn \@@_replace_next:w \__kernel_tl_set:Nx }
-\cs_new_protected:Npn \str_greplace_all:Nnn
- { \@@_replace:NNNnn \@@_replace_next:w \__kernel_tl_gset:Nx }
-\cs_generate_variant:Nn \str_replace_once:Nnn { c }
-\cs_generate_variant:Nn \str_greplace_once:Nnn { c }
-\cs_generate_variant:Nn \str_replace_all:Nnn { c }
-\cs_generate_variant:Nn \str_greplace_all:Nnn { c }
-\cs_new_protected:Npn \@@_replace:NNNnn #1#2#3#4#5
- {
- \tl_if_empty:nTF {#4}
- {
- \msg_error:nne { kernel } { empty-search-pattern } {#5}
- }
- {
- \use:e
- {
- \exp_not:n { \@@_replace_aux:NNNnnn #1 #2 #3 }
- { \tl_to_str:N #3 }
- { \tl_to_str:n {#4} } { \tl_to_str:n {#5} }
- }
- }
- }
-\cs_new_protected:Npn \@@_replace_aux:NNNnnn #1#2#3#4#5#6
- {
- \cs_set:Npn \@@_replace_next:w ##1 #5 { ##1 #6 #1 }
- #2 #3
- {
- \@@_replace_next:w
- #4
- \@@_use_none_delimit_by_s_stop:w
- #5
- \s_@@_stop
- }
- }
-\cs_new_eq:NN \@@_replace_next:w ?
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\str_remove_once:Nn, \str_remove_once:cn}
-% \begin{macro}{\str_gremove_once:Nn, \str_gremove_once:cn}
-% Removal is just a special case of replacement.
-% \begin{macrocode}
-\cs_new_protected:Npn \str_remove_once:Nn #1#2
- { \str_replace_once:Nnn #1 {#2} { } }
-\cs_new_protected:Npn \str_gremove_once:Nn #1#2
- { \str_greplace_once:Nnn #1 {#2} { } }
-\cs_generate_variant:Nn \str_remove_once:Nn { c }
-\cs_generate_variant:Nn \str_gremove_once:Nn { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\str_remove_all:Nn, \str_remove_all:cn}
-% \begin{macro}{\str_gremove_all:Nn, \str_gremove_all:cn}
-% Removal is just a special case of replacement.
-% \begin{macrocode}
-\cs_new_protected:Npn \str_remove_all:Nn #1#2
- { \str_replace_all:Nnn #1 {#2} { } }
-\cs_new_protected:Npn \str_gremove_all:Nn #1#2
- { \str_greplace_all:Nnn #1 {#2} { } }
-\cs_generate_variant:Nn \str_remove_all:Nn { c }
-\cs_generate_variant:Nn \str_gremove_all:Nn { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{String comparisons}
-%
-% \begin{macro}[pTF, EXP]
-% {
-% \str_if_empty:N, \str_if_empty:c, \str_if_empty:n,
-% \str_if_exist:N, \str_if_exist:c
-% }
-% More copy-paste!
-% \begin{macrocode}
-\prg_new_eq_conditional:NNn \str_if_exist:N \tl_if_exist:N
- { p , T , F , TF }
-\prg_new_eq_conditional:NNn \str_if_exist:c \tl_if_exist:c
- { p , T , F , TF }
-\prg_new_eq_conditional:NNn \str_if_empty:N \tl_if_empty:N
- { p , T , F , TF }
-\prg_new_eq_conditional:NNn \str_if_empty:c \tl_if_empty:c
- { p , T , F , TF }
-\prg_new_eq_conditional:NNn \str_if_empty:n \tl_if_empty:n
- { p , T , F , TF }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_if_eq:nn}
-% String comparisons rely on the primitive \tn[index=pdfstrcmp]{(pdf)strcmp},
-% so we define a new name for it.
-% \begin{macrocode}
-\cs_new_eq:NN \@@_if_eq:nn \tex_strcmp:D
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[pTF, EXP]{\str_compare:nNn, \str_compare:eNe}
-% Simply rely on \cs{@@_if_eq:nn}, which expands to |-1|, |0|
-% or~|1|. The |ee| version is created directly because it is more efficient.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \str_compare:nNn #1#2#3 { p , T , F , TF }
- {
- \if_int_compare:w
- \@@_if_eq:nn { \exp_not:n {#1} } { \exp_not:n {#3} }
- #2 \c_zero_int
- \prg_return_true: \else: \prg_return_false: \fi:
- }
-\prg_new_conditional:Npnn \str_compare:eNe #1#2#3 { p , T , F , TF }
- {
- \if_int_compare:w \@@_if_eq:nn {#1} {#3} #2 \c_zero_int
- \prg_return_true: \else: \prg_return_false: \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[pTF, EXP]
-% {
-% \str_if_eq:nn, \str_if_eq:Vn, \str_if_eq:on, \str_if_eq:nV,
-% \str_if_eq:no, \str_if_eq:VV,
-% \str_if_eq:ee
-% }
-% Modern engines provide a direct way of comparing two token lists,
-% but returning a number. This set of conditionals therefore makes life
-% a bit clearer. The \texttt{nn} and \texttt{ee} versions are created
-% directly as this is most efficient. Since \cs{@@_if_eq:nn} will expand to
-% |0| as an explicit character with category 12 if the two lists match (and
-% either |-1| or |1| if they don't) we can use \cs{if:w} here which is faster
-% than using \cs{if_int_compare:w}.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \str_if_eq:nn #1#2 { p , T , F , TF }
- {
- \if:w 0 \@@_if_eq:nn { \exp_not:n {#1} } { \exp_not:n {#2} }
- \prg_return_true: \else: \prg_return_false: \fi:
- }
-\prg_generate_conditional_variant:Nnn \str_if_eq:nn
- { V , v , o , nV , no , VV , nv } { p , T , F , TF }
-\prg_new_conditional:Npnn \str_if_eq:ee #1#2 { p , T , F , TF }
- {
- \if:w 0 \@@_if_eq:nn {#1} {#2}
- \prg_return_true: \else: \prg_return_false: \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP, pTF]
-% {\str_if_eq:NN, \str_if_eq:Nc, \str_if_eq:cN, \str_if_eq:cc}
-% Note that \cs{str_if_eq:NNTF} is different from
-% \cs{tl_if_eq:NNTF} because it needs to ignore category codes.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \str_if_eq:NN #1#2 { p , TF , T , F }
- {
- \if:w 0 \@@_if_eq:nn { \tl_to_str:N #1 } { \tl_to_str:N #2 }
- \prg_return_true: \else: \prg_return_false: \fi:
- }
-\prg_generate_conditional_variant:Nnn \str_if_eq:NN
- { c , Nc , cc } { T , F , TF , p }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[TF]{\str_if_in:Nn, \str_if_in:cn, \str_if_in:nn}
-% Everything here needs to be detokenized but beyond that it is a
-% simple token list test. It would be faster to fine-tune the |T|,
-% |F|, |TF| variants by calling the appropriate variant of
-% \cs{tl_if_in:nnTF} directly but that takes more code.
-% \begin{macrocode}
-\prg_new_protected_conditional:Npnn \str_if_in:Nn #1#2 { T , F , TF }
- {
- \use:e
- { \tl_if_in:nnTF { \tl_to_str:N #1 } { \tl_to_str:n {#2} } }
- { \prg_return_true: } { \prg_return_false: }
- }
-\prg_generate_conditional_variant:Nnn \str_if_in:Nn
- { c } { T , F , TF }
-\prg_new_protected_conditional:Npnn \str_if_in:nn #1#2 { T , F , TF }
- {
- \use:e
- { \tl_if_in:nnTF { \tl_to_str:n {#1} } { \tl_to_str:n {#2} } }
- { \prg_return_true: } { \prg_return_false: }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP, noTF]
-% {
-% \str_case:nn, \str_case:Vn, \str_case:Nn, \str_case:on, \str_case:en, \str_case:nV, \str_case:nv,
-% \str_case_e:nn, \str_case_e:en
-% }
-% \begin{macro}[EXP]{\@@_case:nnTF, \@@_case_e:nnTF}
-% \begin{macro}[EXP]
-% {\@@_case:nw, \@@_case_e:nw, \@@_case_end:nw}
-% The aim here is to allow the case statement to be evaluated
-% using a known number of expansion steps (two), and without
-% needing to use an explicit \enquote{end of recursion} marker.
-% That is achieved by using the test input as the final case,
-% as this is always true. The trick is then to tidy up
-% the output such that the appropriate case code plus either
-% the \texttt{true} or \texttt{false} branch code is inserted.
-% \begin{macrocode}
-\cs_new:Npn \str_case:nn #1#2
- {
- \exp:w
- \@@_case:nnTF {#1} {#2} { } { }
- }
-\cs_new:Npn \str_case:nnT #1#2#3
- {
- \exp:w
- \@@_case:nnTF {#1} {#2} {#3} { }
- }
-\cs_new:Npn \str_case:nnF #1#2
- {
- \exp:w
- \@@_case:nnTF {#1} {#2} { }
- }
-\cs_new:Npn \str_case:nnTF #1#2
- {
- \exp:w
- \@@_case:nnTF {#1} {#2}
- }
-\cs_new:Npn \@@_case:nnTF #1#2#3#4
- { \@@_case:nw {#1} #2 {#1} { } \s_@@_mark {#3} \s_@@_mark {#4} \s_@@_stop }
-\cs_generate_variant:Nn \str_case:nn { V , o , e , nV , nv }
-\prg_generate_conditional_variant:Nnn \str_case:nn
- { V , o , e , nV , nv } { T , F , TF }
-\cs_new_eq:NN \str_case:Nn \str_case:Vn
-\cs_new_eq:NN \str_case:NnT \str_case:VnT
-\cs_new_eq:NN \str_case:NnF \str_case:VnF
-\cs_new_eq:NN \str_case:NnTF \str_case:VnTF
-\cs_new:Npn \@@_case:nw #1#2#3
- {
- \str_if_eq:nnTF {#1} {#2}
- { \@@_case_end:nw {#3} }
- { \@@_case:nw {#1} }
- }
-\cs_new:Npn \str_case_e:nn #1#2
- {
- \exp:w
- \@@_case_e:nnTF {#1} {#2} { } { }
- }
-\cs_new:Npn \str_case_e:nnT #1#2#3
- {
- \exp:w
- \@@_case_e:nnTF {#1} {#2} {#3} { }
- }
-\cs_new:Npn \str_case_e:nnF #1#2
- {
- \exp:w
- \@@_case_e:nnTF {#1} {#2} { }
- }
-\cs_new:Npn \str_case_e:nnTF #1#2
- {
- \exp:w
- \@@_case_e:nnTF {#1} {#2}
- }
-\cs_new:Npn \@@_case_e:nnTF #1#2#3#4
- { \@@_case_e:nw {#1} #2 {#1} { } \s_@@_mark {#3} \s_@@_mark {#4} \s_@@_stop }
-\cs_generate_variant:Nn \str_case_e:nn { e }
-\prg_generate_conditional_variant:Nnn \str_case_e:nn { e } { T , F , TF }
-\cs_new:Npn \@@_case_e:nw #1#2#3
- {
- \str_if_eq:eeTF {#1} {#2}
- { \@@_case_end:nw {#3} }
- { \@@_case_e:nw {#1} }
- }
-% \end{macrocode}
-% To tidy up the recursion, there are two outcomes. If there was a hit to
-% one of the cases searched for, then |#1| is the code to insert,
-% |#2| is the \emph{next} case to check on and |#3| is all of
-% the rest of the cases code. That means that |#4| is the \texttt{true}
-% branch code, and |#5| tidies up the spare \cs{s_@@_mark} and the
-% \texttt{false} branch. On the other hand, if none of the cases matched
-% then we arrive here using the \enquote{termination} case of comparing
-% the search with itself. That means that |#1| is empty, |#2| is
-% the first \cs{s_@@_mark} and so |#4| is the \texttt{false} code (the
-% \texttt{true} code is mopped up by |#3|).
-% \begin{macrocode}
-\cs_new:Npn \@@_case_end:nw #1#2#3 \s_@@_mark #4#5 \s_@@_stop
- { \exp_end: #1 #4 }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Mapping over strings}
-%
-% \begin{macro}[rEXP]{\str_map_function:NN, \str_map_function:cN}
-% \begin{macro}[rEXP]{\str_map_function:nN}
-% \begin{macro}{\str_map_inline:Nn, \str_map_inline:cn}
-% \begin{macro}{\str_map_inline:nn}
-% \begin{macro}{\str_map_variable:NNn, \str_map_variable:cNn}
-% \begin{macro}{\str_map_variable:nNn}
-% \begin{macro}{\str_map_break:}
-% \begin{macro}{\str_map_break:n}
-% \begin{macro}[rEXP]{\@@_map_function:w, \@@_map_function:nn}
-% \begin{macro}{\@@_map_inline:NN, \@@_map_variable:NnN}
-% The inline and variable mappings are similar to the usual token list
-% mappings but start out by turning the argument to an ``other
-% string''. Doing the same for the expandable function mapping would
-% require \cs{__kernel_str_to_other:n}, quadratic in the string length. To deal
-% with spaces in that case, \cs{@@_map_function:w} replaces the
-% following space by a braced space and a further call to itself.
-% These are received by \cs{@@_map_function:nn}, which passes
-% the space to |#1| and calls \cs{@@_map_function:w} to deal with the
-% next space. The space before the braced space allows to optimize
-% the \cs{q_@@_recursion_tail} test. Of course we need to include a
-% trailing space (the question mark is needed to avoid losing the
-% space when \TeX{} tokenizes the line).
-% At the cost of about three more auxiliaries this code could get a $9$
-% times speed up by testing only every $9$-th character for whether it
-% is \cs{q_@@_recursion_tail} (also by converting $9$ spaces at a time in
-% the \cs{str_map_function:nN} case).
-%
-% For the \texttt{map_variable} functions we use a string assignment
-% to store each character because spaces are made catcode~$12$ before
-% the loop.
-% \begin{macrocode}
-\cs_new:Npn \str_map_function:nN #1#2
- {
- \exp_after:wN \@@_map_function:w
- \exp_after:wN \@@_map_function:nn \exp_after:wN #2
- \__kernel_tl_to_str:w {#1}
- \q_@@_recursion_tail ? ~
- \prg_break_point:Nn \str_map_break: { }
- }
-\cs_new:Npn \str_map_function:NN
- { \exp_args:No \str_map_function:nN }
-\cs_new:Npn \@@_map_function:w #1 ~
- { #1 { ~ { ~ } \@@_map_function:w } }
-\cs_new:Npn \@@_map_function:nn #1#2
- {
- \if_meaning:w \q_@@_recursion_tail #2
- \exp_after:wN \str_map_break:
- \fi:
- #1 #2 \@@_map_function:nn {#1}
- }
-\cs_generate_variant:Nn \str_map_function:NN { c }
-\cs_new_protected:Npn \str_map_inline:nn #1#2
- {
- \int_gincr:N \g__kernel_prg_map_int
- \cs_gset_protected:cpn
- { @@_map_ \int_use:N \g__kernel_prg_map_int :w } ##1 {#2}
- \use:e
- {
- \exp_not:N \@@_map_inline:NN
- \exp_not:c { @@_map_ \int_use:N \g__kernel_prg_map_int :w }
- \__kernel_str_to_other_fast:n {#1}
- }
- \q_@@_recursion_tail
- \prg_break_point:Nn \str_map_break:
- { \int_gdecr:N \g__kernel_prg_map_int }
- }
-\cs_new_protected:Npn \str_map_inline:Nn
- { \exp_args:No \str_map_inline:nn }
-\cs_generate_variant:Nn \str_map_inline:Nn { c }
-\cs_new:Npn \@@_map_inline:NN #1#2
- {
- \@@_if_recursion_tail_break:NN #2 \str_map_break:
- \exp_args:No #1 { \token_to_str:N #2 }
- \@@_map_inline:NN #1
- }
-\cs_new_protected:Npn \str_map_variable:nNn #1#2#3
- {
- \use:e
- {
- \exp_not:n { \@@_map_variable:NnN #2 {#3} }
- \__kernel_str_to_other_fast:n {#1}
- }
- \q_@@_recursion_tail
- \prg_break_point:Nn \str_map_break: { }
- }
-\cs_new_protected:Npn \str_map_variable:NNn
- { \exp_args:No \str_map_variable:nNn }
-\cs_new_protected:Npn \@@_map_variable:NnN #1#2#3
- {
- \@@_if_recursion_tail_break:NN #3 \str_map_break:
- \str_set:Nn #1 {#3}
- \use:n {#2}
- \@@_map_variable:NnN #1 {#2}
- }
-\cs_generate_variant:Nn \str_map_variable:NNn { c }
-\cs_new:Npn \str_map_break:
- { \prg_map_break:Nn \str_map_break: { } }
-\cs_new:Npn \str_map_break:n
- { \prg_map_break:Nn \str_map_break: }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\str_map_tokens:Nn, \str_map_tokens:cn}
-% \begin{macro}[rEXP]{\str_map_tokens:nn}
-% Uses an auxiliary of \cs{str_map_function:NN}.
-% \begin{macrocode}
-\cs_new:Npn \str_map_tokens:nn #1#2
- {
- \exp_args:Nno \use:nn
- { \@@_map_function:w \@@_map_function:nn {#2} }
- { \__kernel_tl_to_str:w {#1} }
- \q_@@_recursion_tail ? ~
- \prg_break_point:Nn \str_map_break: { }
- }
-\cs_new:Npn \str_map_tokens:Nn { \exp_args:No \str_map_tokens:nn }
-\cs_generate_variant:Nn \str_map_tokens:Nn { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Accessing specific characters in a string}
-%
-% \begin{macro}[EXP]{\__kernel_str_to_other:n}
-% \begin{macro}[EXP]{\@@_to_other_loop:w, \@@_to_other_end:w}
-% First apply \cs{tl_to_str:n}, then replace all spaces by
-% \enquote{other} spaces, $8$ at a time, storing the converted part of
-% the string between the \cs{s_@@_mark} and \cs{s_@@_stop} markers. The end
-% is detected when \cs{@@_to_other_loop:w} finds one of the trailing
-% |A|, distinguished from any contents of the initial token list by
-% their category. Then \cs{@@_to_other_end:w} is called, and finds
-% the result between \cs{s_@@_mark} and the first |A| (well, there is
-% also the need to remove a space).
-% \begin{macrocode}
-\cs_new:Npn \__kernel_str_to_other:n #1
- {
- \exp_after:wN \@@_to_other_loop:w
- \tl_to_str:n {#1} ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ \s_@@_mark \s_@@_stop
- }
-\group_begin:
-\tex_lccode:D `\* = `\ %
-\tex_lccode:D `\A = `\A %
-\tex_lowercase:D
- {
- \group_end:
- \cs_new:Npn \@@_to_other_loop:w
- #1 ~ #2 ~ #3 ~ #4 ~ #5 ~ #6 ~ #7 ~ #8 ~ #9 \s_@@_stop
- {
- \if_meaning:w A #8
- \@@_to_other_end:w
- \fi:
- \@@_to_other_loop:w
- #9 #1 * #2 * #3 * #4 * #5 * #6 * #7 * #8 * \s_@@_stop
- }
- \cs_new:Npn \@@_to_other_end:w \fi: #1 \s_@@_mark #2 * A #3 \s_@@_stop
- { \fi: #2 }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\__kernel_str_to_other_fast:n}
-% \begin{macro}[rEXP]{\__kernel_str_to_other_fast_loop:w, \@@_to_other_fast_end:w}
-% The difference with \cs{__kernel_str_to_other:n} is that the converted part is
-% left in the input stream, making these commands only
-% restricted-expandable.
-% \begin{macrocode}
-\cs_new:Npn \__kernel_str_to_other_fast:n #1
- {
- \exp_after:wN \@@_to_other_fast_loop:w \tl_to_str:n {#1} ~
- A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ \s_@@_stop
- }
-\group_begin:
-\tex_lccode:D `\* = `\ %
-\tex_lccode:D `\A = `\A %
-\tex_lowercase:D
- {
- \group_end:
- \cs_new:Npn \@@_to_other_fast_loop:w
- #1 ~ #2 ~ #3 ~ #4 ~ #5 ~ #6 ~ #7 ~ #8 ~ #9 ~
- {
- \if_meaning:w A #9
- \@@_to_other_fast_end:w
- \fi:
- #1 * #2 * #3 * #4 * #5 * #6 * #7 * #8 * #9
- \@@_to_other_fast_loop:w *
- }
- \cs_new:Npn \@@_to_other_fast_end:w #1 * A #2 \s_@@_stop {#1}
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {\str_item:Nn, \str_item:cn, \str_item:nn, \str_item_ignore_spaces:nn}
-% \begin{macro}[EXP]{\@@_item:nn, \@@_item:w}
-% The \cs{str_item:nn} hands its argument with spaces escaped to
-% \cs{@@_item:nn}, and makes sure to turn the result back into
-% a proper string (with category code~$10$ spaces) eventually. The
-% \cs{str_item_ignore_spaces:nn} function does not escape spaces,
-% which are thus ignored by \cs{@@_item:nn} since
-% everything else is done with undelimited arguments.
-% Evaluate the \meta{index} argument~|#2| and count characters in
-% the string, passing those two numbers to \cs{@@_item:w} for
-% further analysis. If the \meta{index} is negative, shift it by
-% the \meta{count} to know the how many character to discard, and if
-% that is still negative give an empty result. If the \meta{index}
-% is larger than the \meta{count}, give an empty result, and
-% otherwise discard $\meta{index}-1$ characters before returning the
-% following one. The shift by $-1$ is obtained by inserting an empty
-% brace group before the string in that case: that brace group also
-% covers the case where the \meta{index} is zero.
-% \begin{macrocode}
-\cs_new:Npn \str_item:Nn { \exp_args:No \str_item:nn }
-\cs_generate_variant:Nn \str_item:Nn { c }
-\cs_new:Npn \str_item:nn #1#2
- {
- \exp_args:Nf \tl_to_str:n
- {
- \exp_args:Nf \@@_item:nn
- { \__kernel_str_to_other:n {#1} } {#2}
- }
- }
-\cs_new:Npn \str_item_ignore_spaces:nn #1
- { \exp_args:No \@@_item:nn { \tl_to_str:n {#1} } }
-\cs_new:Npn \@@_item:nn #1#2
- {
- \exp_after:wN \@@_item:w
- \int_value:w \int_eval:n {#2} \exp_after:wN ;
- \int_value:w \@@_count:n {#1} ;
- #1 \s_@@_stop
- }
-\cs_new:Npn \@@_item:w #1; #2;
- {
- \int_compare:nNnTF {#1} < 0
- {
- \int_compare:nNnTF {#1} < {-#2}
- { \@@_use_none_delimit_by_s_stop:w }
- {
- \exp_after:wN \@@_use_i_delimit_by_s_stop:nw
- \exp:w \exp_after:wN \@@_skip_exp_end:w
- \int_value:w \int_eval:n { #1 + #2 } ;
- }
- }
- {
- \int_compare:nNnTF {#1} > {#2}
- { \@@_use_none_delimit_by_s_stop:w }
- {
- \exp_after:wN \@@_use_i_delimit_by_s_stop:nw
- \exp:w \@@_skip_exp_end:w #1 ; { }
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_skip_exp_end:w}
-% \begin{macro}[EXP]
-% {\@@_skip_loop:wNNNNNNNN, \@@_skip_end:w, \@@_skip_end:NNNNNNNN}
-% Removes |max(#1,0)| characters from the input stream, and then
-% leaves \cs{exp_end:}. This should be expanded using
-% \cs{exp:w}. We remove characters $8$ at a time until
-% there are at most $8$ to remove. Then we do a dirty trick: the
-% \cs{if_case:w} construction leaves between $0$ and $8$ times the
-% \cs{or:} control sequence, and those \cs{or:} become arguments of
-% \cs{@@_skip_end:NNNNNNNN}. If the number of characters to remove
-% is $6$, say, then there are two \cs{or:} left, and the $8$ arguments
-% of \cs{@@_skip_end:NNNNNNNN} are the two \cs{or:}, and $6$
-% characters from the input stream, exactly what we wanted to
-% remove. Then close the \cs{if_case:w} conditional with \cs{fi:}, and
-% stop the initial expansion with \cs{exp_end:} (see places where
-% \cs{@@_skip_exp_end:w} is called).
-% \begin{macrocode}
-\cs_new:Npn \@@_skip_exp_end:w #1;
- {
- \if_int_compare:w #1 > 8 \exp_stop_f:
- \exp_after:wN \@@_skip_loop:wNNNNNNNN
- \else:
- \exp_after:wN \@@_skip_end:w
- \int_value:w \int_eval:w
- \fi:
- #1 ;
- }
-\cs_new:Npn \@@_skip_loop:wNNNNNNNN #1; #2#3#4#5#6#7#8#9
- {
- \exp_after:wN \@@_skip_exp_end:w
- \int_value:w \int_eval:n { #1 - 8 } ;
- }
-\cs_new:Npn \@@_skip_end:w #1 ;
- {
- \exp_after:wN \@@_skip_end:NNNNNNNN
- \if_case:w #1 \exp_stop_f: \or: \or: \or: \or: \or: \or: \or: \or:
- }
-\cs_new:Npn \@@_skip_end:NNNNNNNN #1#2#3#4#5#6#7#8 { \fi: \exp_end: }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {\str_range:Nnn, \str_range:nnn, \str_range_ignore_spaces:nnn}
-% \begin{macro}[EXP]{\@@_range:nnn}
-% \begin{macro}[EXP]{\@@_range:w, \@@_range:nnw}
-% Sanitize the string. Then evaluate the arguments. At this stage we
-% also decrement the \meta{start index}, since our goal is to know how
-% many characters should be removed. Then limit the range to be
-% non-negative and at most the length of the string (this avoids
-% needing to check for the end of the string when grabbing
-% characters), shifting negative numbers by the appropriate amount.
-% Afterwards, skip characters, then keep some more, and finally drop
-% the end of the string.
-% \begin{macrocode}
-\cs_new:Npn \str_range:Nnn { \exp_args:No \str_range:nnn }
-\cs_generate_variant:Nn \str_range:Nnn { c }
-\cs_new:Npn \str_range:nnn #1#2#3
- {
- \exp_args:Nf \tl_to_str:n
- {
- \exp_args:Nf \@@_range:nnn
- { \__kernel_str_to_other:n {#1} } {#2} {#3}
- }
- }
-\cs_new:Npn \str_range_ignore_spaces:nnn #1
- { \exp_args:No \@@_range:nnn { \tl_to_str:n {#1} } }
-\cs_new:Npn \@@_range:nnn #1#2#3
- {
- \exp_after:wN \@@_range:w
- \int_value:w \@@_count:n {#1} \exp_after:wN ;
- \int_value:w \int_eval:n { (#2) - 1 } \exp_after:wN ;
- \int_value:w \int_eval:n {#3} ;
- #1 \s_@@_stop
- }
-\cs_new:Npn \@@_range:w #1; #2; #3;
- {
- \exp_args:Nf \@@_range:nnw
- { \@@_range_normalize:nn {#2} {#1} }
- { \@@_range_normalize:nn {#3} {#1} }
- }
-\cs_new:Npn \@@_range:nnw #1#2
- {
- \exp_after:wN \@@_collect_delimit_by_q_stop:w
- \int_value:w \int_eval:n { #2 - #1 } \exp_after:wN ;
- \exp:w \@@_skip_exp_end:w #1 ;
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \begin{macro}[EXP]{\@@_range_normalize:nn}
-% This function converts an \meta{index} argument into an explicit
-% position in the string (a result of $0$ denoting \enquote{out of
-% bounds}). Expects two explicit integer arguments: the
-% \meta{index} |#1| and the string count~|#2|. If |#1| is negative,
-% replace it by $|#1| + |#2| + 1$, then limit to the range $[0,
-% |#2|]$.
-% \begin{macrocode}
-\cs_new:Npn \@@_range_normalize:nn #1#2
- {
- \int_eval:n
- {
- \if_int_compare:w #1 < \c_zero_int
- \if_int_compare:w #1 < -#2 \exp_stop_f:
- 0
- \else:
- #1 + #2 + 1
- \fi:
- \else:
- \if_int_compare:w #1 < #2 \exp_stop_f:
- #1
- \else:
- #2
- \fi:
- \fi:
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \begin{macro}[EXP]{\@@_collect_delimit_by_q_stop:w}
-% \begin{macro}[EXP]
-% {
-% \@@_collect_loop:wn, \@@_collect_loop:wnNNNNNNN,
-% \@@_collect_end:wn, \@@_collect_end:nnnnnnnnw
-% }
-% Collects |max(#1,0)| characters, and removes everything else until
-% \cs{s_@@_stop}. This is somewhat similar to \cs{@@_skip_exp_end:w}, but
-% accepts integer expression arguments. This time we can only grab
-% $7$ characters at a time. At the end, we use an \cs{if_case:w}
-% trick again, so that the $8$ first arguments of
-% \cs{@@_collect_end:nnnnnnnnw} are some \cs{or:}, followed by an
-% \cs{fi:}, followed by |#1| characters from the input stream. Simply
-% leaving this in the input stream closes the conditional properly
-% and the \cs{or:} disappear.
-% \begin{macrocode}
-\cs_new:Npn \@@_collect_delimit_by_q_stop:w #1;
- { \@@_collect_loop:wn #1 ; { } }
-\cs_new:Npn \@@_collect_loop:wn #1 ;
- {
- \if_int_compare:w #1 > 7 \exp_stop_f:
- \exp_after:wN \@@_collect_loop:wnNNNNNNN
- \else:
- \exp_after:wN \@@_collect_end:wn
- \fi:
- #1 ;
- }
-\cs_new:Npn \@@_collect_loop:wnNNNNNNN #1; #2 #3#4#5#6#7#8#9
- {
- \exp_after:wN \@@_collect_loop:wn
- \int_value:w \int_eval:n { #1 - 7 } ;
- { #2 #3#4#5#6#7#8#9 }
- }
-\cs_new:Npn \@@_collect_end:wn #1 ;
- {
- \exp_after:wN \@@_collect_end:nnnnnnnnw
- \if_case:w \if_int_compare:w #1 > \c_zero_int
- #1 \else: 0 \fi: \exp_stop_f:
- \or: \or: \or: \or: \or: \or: \fi:
- }
-\cs_new:Npn \@@_collect_end:nnnnnnnnw #1#2#3#4#5#6#7#8 #9 \s_@@_stop
- { #1#2#3#4#5#6#7#8 }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Counting characters}
-%
-% \begin{macro}[EXP]
-% {\str_count_spaces:N, \str_count_spaces:c, \str_count_spaces:n}
-% \begin{macro}[EXP]{\@@_count_spaces_loop:w}
-% To speed up this function, we grab and discard $9$ space-delimited
-% arguments in each iteration of the loop. The loop stops when the
-% last argument is one of the trailing |X|\meta{number}, and that
-% \meta{number} is added to the sum of $9$ that precedes, to adjust
-% the result.
-% \begin{macrocode}
-\cs_new:Npn \str_count_spaces:N
- { \exp_args:No \str_count_spaces:n }
-\cs_generate_variant:Nn \str_count_spaces:N { c }
-\cs_new:Npn \str_count_spaces:n #1
- {
- \int_eval:n
- {
- \exp_after:wN \@@_count_spaces_loop:w
- \tl_to_str:n {#1} ~
- X 7 ~ X 6 ~ X 5 ~ X 4 ~ X 3 ~ X 2 ~ X 1 ~ X 0 ~ X -1 ~
- \s_@@_stop
- }
- }
-\cs_new:Npn \@@_count_spaces_loop:w #1~#2~#3~#4~#5~#6~#7~#8~#9~
- {
- \if_meaning:w X #9
- \@@_use_i_delimit_by_s_stop:nw
- \fi:
- 9 + \@@_count_spaces_loop:w
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {\str_count:N, \str_count:c, \str_count:n, \str_count_ignore_spaces:n}
-% \begin{macro}[EXP]{\@@_count:n}
-% \begin{macro}[EXP]{\@@_count_aux:n, \@@_count_loop:NNNNNNNNN}
-% To count characters in a string we could first escape all spaces
-% using \cs{__kernel_str_to_other:n}, then pass the result to \cs{tl_count:n}.
-% However, the escaping step would be quadratic in the number of
-% characters in the string, and we can do better. Namely, sum the
-% number of spaces (\cs{str_count_spaces:n}) and the result of
-% \cs{tl_count:n}, which ignores spaces. Since strings tend to be
-% longer than token lists, we use specialized functions to count
-% characters ignoring spaces. Namely, loop, grabbing $9$ non-space
-% characters at each step, and end as soon as we reach one of the $9$
-% trailing items. The internal function \cs{@@_count:n}, used in
-% \cs{str_item:nn} and \cs{str_range:nnn}, is similar to
-% \cs{str_count_ignore_spaces:n} but expects its argument to already
-% be a string or a string with spaces escaped.
-% \begin{macrocode}
-\cs_new:Npn \str_count:N { \exp_args:No \str_count:n }
-\cs_generate_variant:Nn \str_count:N { c }
-\cs_new:Npn \str_count:n #1
- {
- \@@_count_aux:n
- {
- \str_count_spaces:n {#1}
- + \exp_after:wN \@@_count_loop:NNNNNNNNN \tl_to_str:n {#1}
- }
- }
-\cs_new:Npn \@@_count:n #1
- {
- \@@_count_aux:n
- { \@@_count_loop:NNNNNNNNN #1 }
- }
-\cs_new:Npn \str_count_ignore_spaces:n #1
- {
- \@@_count_aux:n
- { \exp_after:wN \@@_count_loop:NNNNNNNNN \tl_to_str:n {#1} }
- }
-\cs_new:Npn \@@_count_aux:n #1
- {
- \int_eval:n
- {
- #1
- { X 8 } { X 7 } { X 6 }
- { X 5 } { X 4 } { X 3 }
- { X 2 } { X 1 } { X 0 }
- \s_@@_stop
- }
- }
-\cs_new:Npn \@@_count_loop:NNNNNNNNN #1#2#3#4#5#6#7#8#9
- {
- \if_meaning:w X #9
- \exp_after:wN \@@_use_none_delimit_by_s_stop:w
- \fi:
- 9 + \@@_count_loop:NNNNNNNNN
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{The first character in a string}
-%
-% \begin{macro}[EXP]
-% {\str_head:N, \str_head:c, \str_head:n, \str_head_ignore_spaces:n}
-% \begin{macro}[EXP]{\@@_head:w}
-% The \texttt{_ignore_spaces} variant applies \cs{tl_to_str:n} then
-% grabs the first item, thus skipping spaces.
-% As usual, \cs{str_head:N} expands its argument and
-% hands it to \cs{str_head:n}. To circumvent the fact that \TeX{}
-% skips spaces when grabbing undelimited macro parameters,
-% \cs{@@_head:w} takes an argument delimited by a space. If |#1|
-% starts with a non-space character, \cs{@@_use_i_delimit_by_s_stop:nw}
-% leaves that in the input stream. On the other hand, if |#1| starts
-% with a space, the \cs{@@_head:w} takes an empty argument, and the
-% single (initially braced) space in the definition of \cs{@@_head:w}
-% makes its way to the output. Finally, for an empty argument, the
-% (braced) empty brace group in the definition of \cs{str_head:n}
-% gives an empty result after passing through
-% \cs{@@_use_i_delimit_by_s_stop:nw}.
-% \begin{macrocode}
-\cs_new:Npn \str_head:N { \exp_args:No \str_head:n }
-\cs_generate_variant:Nn \str_head:N { c }
-\cs_new:Npn \str_head:n #1
- {
- \exp_after:wN \@@_head:w
- \tl_to_str:n {#1}
- { { } } ~ \s_@@_stop
- }
-\cs_new:Npn \@@_head:w #1 ~ %
- { \@@_use_i_delimit_by_s_stop:nw #1 { ~ } }
-\cs_new:Npn \str_head_ignore_spaces:n #1
- {
- \exp_after:wN \@@_use_i_delimit_by_s_stop:nw
- \tl_to_str:n {#1} { } \s_@@_stop
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {\str_tail:N, \str_tail:c, \str_tail:n, \str_tail_ignore_spaces:n}
-% \begin{macro}[EXP]{\@@_tail_auxi:w, \@@_tail_auxii:w}
-% Getting the tail is a little bit more convoluted than the head of a
-% string. We hit the front of the string with \cs{reverse_if:N}
-% \cs{if_charcode:w} \cs{scan_stop:}. This removes the first
-% character, and necessarily makes the test true, since the character
-% cannot match \cs{scan_stop:}. The auxiliary function then inserts
-% the required \cs{fi:} to close the conditional, and leaves the tail
-% of the string in the input stream. The details are such that an
-% empty string has an empty tail (this requires in particular that the
-% end-marker |X| be unexpandable and not a control sequence). The
-% \texttt{_ignore_spaces} is rather simpler: after converting the
-% input to a string, \cs{@@_tail_auxii:w} removes one undelimited
-% argument and leaves everything else until an end-marker \cs{s_@@_mark}.
-% One can check that an empty (or blank) string yields an empty
-% tail.
-% \begin{macrocode}
-\cs_new:Npn \str_tail:N { \exp_args:No \str_tail:n }
-\cs_generate_variant:Nn \str_tail:N { c }
-\cs_new:Npn \str_tail:n #1
- {
- \exp_after:wN \@@_tail_auxi:w
- \reverse_if:N \if_charcode:w
- \scan_stop: \tl_to_str:n {#1} X X \s_@@_stop
- }
-\cs_new:Npn \@@_tail_auxi:w #1 X #2 \s_@@_stop { \fi: #1 }
-\cs_new:Npn \str_tail_ignore_spaces:n #1
- {
- \exp_after:wN \@@_tail_auxii:w
- \tl_to_str:n {#1} \s_@@_mark \s_@@_mark \s_@@_stop
- }
-\cs_new:Npn \@@_tail_auxii:w #1 #2 \s_@@_mark #3 \s_@@_stop { #2 }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{String manipulation}
-%
-% \begin{macro}[EXP]
-% {
-% \str_casefold:n, \str_casefold:V,
-% \str_lowercase:n, \str_lowercase:f,
-% \str_uppercase:n, \str_uppercase:f
-% }
-% \begin{macro}[EXP]{\@@_change_case:nn}
-% \begin{macro}[EXP]{\@@_change_case_aux:nn}
-% \begin{macro}[EXP]{\@@_change_case_result:n}
-% \begin{macro}[EXP]{\@@_change_case_output:nw, \@@_change_case_output:fw}
-% \begin{macro}[EXP]{\@@_change_case_end:nw}
-% \begin{macro}[EXP]{\@@_change_case_loop:nw}
-% \begin{macro}[EXP]{\@@_change_case_space:n}
-% \begin{macro}[EXP]
-% {\@@_change_case_char:nN, \@@_change_case_char_auxi:nN, \@@_change_case_char_auxii:nN}
-% \begin{macro}[EXP]{\@@_change_case_codepoint:nN}
-% \begin{macro}[EXP]{\@@_change_case_codepoint:nNN}
-% \begin{macro}[EXP]{\@@_change_case_codepoint:nNNN}
-% \begin{macro}[EXP]{\@@_change_case_codepoint:nNNNN}
-% \begin{macro}[EXP]{\@@_change_case_char:nnn, \@@_change_case_char_aux:nnn}
-% \begin{macro}[EXP]{\@@_change_case_char:nnnnn}
-% Case changing for programmatic reasons is done by first detokenizing
-% input then doing a simple loop that only has to worry about spaces
-% and everything else. The output is detokenized to allow data sharing
-% with text-based case changing. Similarly, for $8$-bit engines the
-% multi-byte information is shared.
-% \begin{macrocode}
-\cs_new:Npn \str_casefold:n #1 { \@@_change_case:nn {#1} { casefold } }
-\cs_new:Npn \str_lowercase:n #1 { \@@_change_case:nn {#1} { lowercase } }
-\cs_new:Npn \str_uppercase:n #1 { \@@_change_case:nn {#1} { uppercase } }
-\cs_generate_variant:Nn \str_casefold:n { V }
-\cs_generate_variant:Nn \str_lowercase:n { f }
-\cs_generate_variant:Nn \str_uppercase:n { f }
-\cs_new:Npn \@@_change_case:nn #1
- {
- \exp_after:wN \@@_change_case_aux:nn \exp_after:wN
- { \tl_to_str:n {#1} }
- }
-\cs_new:Npn \@@_change_case_aux:nn #1#2
- {
- \@@_change_case_loop:nw {#2} #1 \q_@@_recursion_tail \q_@@_recursion_stop
- \@@_change_case_result:n { }
- }
-\cs_new:Npn \@@_change_case_output:nw #1#2 \@@_change_case_result:n #3
- { #2 \@@_change_case_result:n { #3 #1 } }
-\cs_generate_variant:Nn \@@_change_case_output:nw { f }
-\cs_new:Npn \@@_change_case_end:wn #1 \@@_change_case_result:n #2
- { \tl_to_str:n {#2} }
-\cs_new:Npn \@@_change_case_loop:nw #1#2 \q_@@_recursion_stop
- {
- \tl_if_head_is_space:nTF {#2}
- { \@@_change_case_space:n }
- { \@@_change_case_char:nN }
- {#1} #2 \q_@@_recursion_stop
- }
-\exp_last_unbraced:NNNNo
- \cs_new:Npn \@@_change_case_space:n #1 \c_space_tl
- {
- \@@_change_case_output:nw { ~ }
- \@@_change_case_loop:nw {#1}
- }
-\cs_new:Npn \@@_change_case_char:nN #1#2
- {
- \@@_if_recursion_tail_stop_do:Nn #2
- { \@@_change_case_end:wn }
- \@@_change_case_codepoint:nN {#1} #2
- }
-\if_int_compare:w 0
- \cs_if_exist:NT \tex_XeTeXversion:D { 1 }
- \cs_if_exist:NT \tex_luatexversion:D { 1 }
- > 0 \exp_stop_f:
- \cs_new:Npn \@@_change_case_codepoint:nN #1#2
- { \@@_change_case_char:fnn { \int_eval:n {`#2} } {#1} {#2} }
-\else:
- \cs_new:Npe \@@_change_case_codepoint:nN #1#2
- {
- \exp_not:N \int_compare:nNnTF {`#2} > { "80 }
- {
- \cs_if_exist:NTF \tex_pdftexversion:D
- { \exp_not:N \@@_change_case_char_auxi:nN }
- {
- \exp_not:N \int_compare:nNnTF {`#2} > { "FF }
- { \exp_not:N \@@_change_case_char_auxii:nN }
- { \exp_not:N \@@_change_case_char_auxi:nN }
- }
- }
- { \exp_not:N \@@_change_case_char_auxii:nN }
- {#1} #2
- }
- \cs_new:Npn \@@_change_case_char_auxi:nN #1#2
- {
- \int_compare:nNnTF {`#2} < { "E0 }
- { \@@_change_case_codepoint:nNN }
- {
- \int_compare:nNnTF {`#2} < { "F0 }
- { \@@_change_case_codepoint:nNNN }
- { \@@_change_case_codepoint:nNNNNN }
- }
- {#1} #2
- }
- \cs_new:Npn \@@_change_case_char_auxii:nN #1#2
- { \@@_change_case_char:fnn { \int_eval:n {`#2} } {#1} {#2} }
- \cs_new:Npn \@@_change_case_codepoint:nNN #1#2#3
- {
- \@@_change_case_char:fnn
- { \int_eval:n { (`#2 - "C0) * "40 + `#3 - "80 } }
- {#1} {#2#3}
- }
- \cs_new:Npn \@@_change_case_codepoint:nNNN #1#2#3#4
- {
- \@@_change_case_char:fnn
- {
- \int_eval:n
- { (`#2 - "E0) * "1000 + (`#3 - "80) * "40 + `#4 - "80 }
- }
- {#1} {#2#3#4}
- }
- \cs_new:Npn \@@_change_case_codepoint:nNNNN #1#2#3#4#5
- {
- \@@_change_case_char:fnn
- {
- \int_eval:n
- {
- (`#2 - "F0) * "40000
- + (`#3 - "80) * "1000
- + (`#4 - "80) * "40
- + `#5 - "80
- }
- }
- {#1} {#2#3#4#5}
- }
-\fi:
-\cs_new:Npn \@@_change_case_char:nnn #1#2#3
- {
- \@@_change_case_output:fw
- {
- \exp_args:Ne \@@_change_case_char_aux:nnn
- { \__kernel_codepoint_case:nn {#2} {#1} } {#1} {#3}
- }
- \@@_change_case_loop:nw {#2}
- }
-\cs_generate_variant:Nn \@@_change_case_char:nnn { f }
-\cs_new:Npn \@@_change_case_char_aux:nnn #1#2#3
- {
- \use:e { \@@_change_case_char:nnnnn #1 {#2} {#3} }
- }
-\cs_new:Npn \@@_change_case_char:nnnnn #1#2#3#4#5
- {
- \int_compare:nNnTF {#1} = {#4}
- { \tl_to_str:n {#5} }
- {
- \codepoint_str_generate:n {#1}
- \tl_if_blank:nF {#2}
- {
- \codepoint_str_generate:n {#2}
- \tl_if_blank:nF {#3}
- { \codepoint_str_generate:n {#3} }
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\str_mdfive_hash:n, \str_mdfive_hash:e}
-% \begin{macrocode}
-\cs_new:Npn \str_mdfive_hash:n #1 { \tex_mdfivesum:D { \tl_to_str:n {#1} } }
-\cs_new:Npn \str_mdfive_hash:e #1 { \tex_mdfivesum:D {#1} }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}
-% {
-% \c_ampersand_str,
-% \c_atsign_str,
-% \c_backslash_str,
-% \c_left_brace_str,
-% \c_right_brace_str,
-% \c_circumflex_str,
-% \c_colon_str,
-% \c_dollar_str,
-% \c_hash_str,
-% \c_percent_str,
-% \c_tilde_str,
-% \c_underscore_str,
-% \c_zero_str
-% }
-% For all of those strings, use \cs{cs_to_str:N} to get characters with
-% the correct category code without worries
-% \begin{macrocode}
-\str_const:Ne \c_ampersand_str { \cs_to_str:N \& }
-\str_const:Ne \c_atsign_str { \cs_to_str:N \@ }
-\str_const:Ne \c_backslash_str { \cs_to_str:N \\ }
-\str_const:Ne \c_left_brace_str { \cs_to_str:N \{ }
-\str_const:Ne \c_right_brace_str { \cs_to_str:N \} }
-\str_const:Ne \c_circumflex_str { \cs_to_str:N \^ }
-\str_const:Ne \c_colon_str { \cs_to_str:N \: }
-\str_const:Ne \c_dollar_str { \cs_to_str:N \$ }
-\str_const:Ne \c_hash_str { \cs_to_str:N \# }
-\str_const:Ne \c_percent_str { \cs_to_str:N \% }
-\str_const:Ne \c_tilde_str { \cs_to_str:N \~ }
-\str_const:Ne \c_underscore_str { \cs_to_str:N \_ }
-\str_const:Ne \c_zero_str { 0 }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\c_empty_str}
-% An empty string is simply an empty token list.
-% \begin{macrocode}
-\cs_new_eq:NN \c_empty_str \c_empty_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_tmpa_str, \l_tmpb_str, \g_tmpa_str, \g_tmpb_str}
-% Scratch strings.
-% \begin{macrocode}
-\str_new:N \l_tmpa_str
-\str_new:N \l_tmpb_str
-\str_new:N \g_tmpa_str
-\str_new:N \g_tmpb_str
-% \end{macrocode}
-% \end{variable}
-%
-% \subsection{Viewing strings}
-%
-% \begin{macro}{\str_show:n, \str_show:N, \str_show:c}
-% \begin{macro}{\str_log:n, \str_log:N, \str_log:c}
-% Displays a string on the terminal.
-% \begin{macrocode}
-\cs_new_eq:NN \str_show:n \tl_show:n
-\cs_new_protected:Npn \str_show:N #1
- {
- \__kernel_chk_tl_type:NnnT #1 { str } { \tl_to_str:N #1 }
- { \tl_show:N #1 }
- }
-\cs_generate_variant:Nn \str_show:N { c }
-\cs_new_eq:NN \str_log:n \tl_log:n
-\cs_new_protected:Npn \str_log:N #1
- {
- \__kernel_chk_tl_type:NnnT #1 { str } { \tl_to_str:N #1 }
- { \tl_log:N #1 }
- }
-\cs_generate_variant:Nn \str_log:N { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3styleguide.pdf b/macros/latex/contrib/l3kernel/l3styleguide.pdf
deleted file mode 100644
index 322b032a67..0000000000
--- a/macros/latex/contrib/l3kernel/l3styleguide.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3styleguide.tex b/macros/latex/contrib/l3kernel/l3styleguide.tex
deleted file mode 100644
index a2ffe8d770..0000000000
--- a/macros/latex/contrib/l3kernel/l3styleguide.tex
+++ /dev/null
@@ -1,303 +0,0 @@
-\iffalse meta-comment
-
-File: l3styleguide.tex
-
-Copyright (C) 2011,2012,2014-2024 The LaTeX Project
-
-It may be distributed and/or modified under the conditions of the
-LaTeX Project Public License (LPPL), either version 1.3c of this
-license or (at your option) any later version. The latest version
-of this license is in the file
-
- https://www.latex-project.org/lppl.txt
-
-This file is part of the "l3kernel bundle" (The Work in LPPL)
-and all files in that bundle must be distributed together.
-
-The released version of this bundle is available from CTAN.
-
-\fi
-
-\documentclass{l3doc}
-
-
-\title{%
- The \LaTeX3 kernel: style guide for code authors%
-}
-\author{%
- The \LaTeX{} Project\thanks
- {%
- E-mail:
- \href{mailto:latex-team@latex-project.org}%
- {latex-team@latex-project.org}%
- }%
-}
-\date{Released 2024-03-14}
-
-\begin{document}
-
-\maketitle
-
-\tableofcontents
-
-\section{Introduction}
-
-This document is intended as a style guide for authors of code and
-documentation for the \LaTeX3 kernel. It covers both aspects of coding
-style and the formatting of the sources. The aim of providing these
-guidelines is help ensure consistency of the code and sources from
-different authors. Experience suggests that in the long-term this helps
-with maintenance. There will of course be places where there are
-exceptions to these guidelines: common sense should always be
-applied!
-
-\section{Documentation style}
-
-\LaTeX3 source and documentation should be written using the document
-class \cls{l3doc} in \file{dtx} format. This class provides a number
-of logical mark up elements, which should be used where possible.
-In the main, this is standard \LaTeX{} practice, but there are a
-few points to highlight:
-\begin{itemize}
- \item
- Where possible, use \cs{cs} to mark up control sequences
- rather than using a verbatim environment.
- \item
- Arguments which are given in braces should be marked using
- \cs{Arg} when code-level functions are discussed, but using
- \cs{marg} for document functions.
- \item
- The names \TeX{}, \LaTeX{}, \emph{etc}.\ use the normal logical mark
- up followed by an empty group (|{}|), with the exception of |\LaTeX3|,
- where the number should follow directly.
- \item
- Where in line verbatim text is used, it should be marked up
- using the \verb=|...|= construct (\emph{i.e.}~vertical bars delimit
- the verbatim text).
- \item In line quotes should be marked up using the \cs{enquote}
- function.
- \item
- Where numbers in the source have a mathematical meaning,
- they should be included in math mode. Such in-line math mode
- material should be marked up using |$...$| and \emph{not}
- |\(...\)|.
-\end{itemize}
-
-Line length in the source files should be under $80$
-characters where possible, as this helps keep everything on the screen
-when editing files. In the \file{dtx} format, documentation lines start
-with a \texttt{\%}, which is usually followed by a space to leave a
-\enquote{comment margin} at the start of each line.
-
-As with code indenting (see later), nested environments and arguments
-should be indented by (at least) two spaces to make the nature of the nesting
-clear. Thus for example a typical arrangement for the \env{function}
-environment might be
-\begin{verbatim*}
-\begin{function}{\seq_gclear:N, \seq_gclear:c}
- \begin{syntax}
- \cs{seq_gclear:N} \meta{sequence}
- \end{syntax}
- Clears all entries from the \meta{sequence} globally.
-\end{function}
-\end{verbatim*}
-The \enquote{outer} \verb*|% \begin{function}| should have the customary
-space after the |%| character at the start of the line.
-
-In general, a single \env{function} or \env{macro} environment should be
-used for a group of closely-related functions, for example argument
-specification variants. In such cases, a comma-separated list should be
-used, as shown in the preceding example.
-
-\section{Format of the code itself}
-
-The requirement for fewer than $80$ characters per line applies to the code
-itself as well as the surrounding documentation. A number of the general
-style principles for \LaTeX3 code apply: these are described in the following
-paragraph and an example is then given.
-
-With the exception of simple runs of parameter (|{#1}|, |#1#2|,
-\emph{etc.}), everything should be divided up using spaces to make the code
-more readable. In general, these will be single spaces, but in some
-places it makes more sense to align parts of the code to emphasise
-similarity. (Tabs should not be used for introducing white space.)
-
-Each conceptually-separate step in a function should be on a separate
-line, to make the meaning clearer. Hence the \texttt{false} branch
-in the example uses two lines for the two auxiliary function uses.
-
-Within the definition, a two-space indent should be used to show each
-\enquote{level} of code. Thus in the example \cs{tl_if_empty:nTF} is
-indented by two spaces, but the two branches are indented by four
-spaces. Within the \texttt{false} branch, the need for multiple lines
-means that an additional two-space indent should be used to show that
-these lines are all part of the brace group.
-
-The result of these lay-out conventions is code which in general
-looks like the example:
-\begin{verbatim*}
-\cs_new:Npn \module_foo:nn #1#2
- {
- \tl_if_empty:nTF {#1}
- { \module_foo_aux:n { X #2 } }
- {
- \module_foo_aux:nn {#1} {#2}
- \module_foo_aux:n { #1 #2 }
- }
- }
-\end{verbatim*}
-
-\section{Code conventions}
-
-All code-level functions should be \enquote{long} if they accept any
-arguments, even if it seems \enquote{very unlikely} that a \cs{par} token
-will be passed. Thus \cs{cs_new_nopar:Npn} and so forth should only be used
-to create interfaces at the document level (where trapping \cs{par} tokens
-may be appropriate) or where comparison to other code known not to be
-\enquote{long} is required (\emph{e.g.}~when working with mixed
-\LaTeXe{}/\pkg{expl3} situations).
-
-The expandability of each function should be well-defined. Functions which
-cannot be fully expanded must be \texttt{protected}. This means that expandable
-functions must themselves only contain expandable material. Functions which
-use any non-expandable material must be defined using \cs{cs_new_protected:Npn}
-or similar.
-
-When using \cs{cs_generate_variant:Nn}, group related variants together
-to make the pattern clearer. A common example is variants of a function
-which has an \texttt{N}-type first argument:
-\begin{verbatim}
- \cs_generate_variant:Nn \foo:Nn { NV , No }
- \cs_generate_variant:Nn \foo:Nn { c , cV , co }
-\end{verbatim}
-
-There may be cases where omitting braces from \texttt{o}-type arguments
-is desirable for performance reasons. This should only be done if the
-argument is a single token, thus for example
-\begin{verbatim}
- \tl_set:No \l_some_tl \l_some_other_tl
-\end{verbatim}
-remains clear and can be used where appropriate.
-
-\section{Private and internal functions}
-
-Private functions (those starting \cs{__}) should not be used between modules.
-The only exception is where a \enquote{family} of modules share some
-\enquote{internal} methods: this happens most obviously in the kernel itself.
-Any internal functions or variables \emph{must} be documented in the same way
-as public ones.
-
-The \pkg{DocStrip} method should be used for internal functions in a module.
-This requires a line
-\begin{quote}
- \ttfamily
- \%<@@=\meta{module}>
-\end{quote}
-at the start of the source (\texttt{.dtx}) file, with internal functions
-then written in the form
-\begin{verbatim}
- \cs_new_protected:Npn \@@_function:nn #1#2
- ...
-\end{verbatim}
-
-\subsection{Access from other modules}
-
-There may be cases where it is useful to use an internal function from
-a third-party module (this includes cases where you are the author of both
-but they are not part of the same \enquote{family}). In these cases, you should
-\emph{copy} the definition of the internal function to your code: this avoids
-relying on non-documented interfaces. At the same time, it is strongly
-encouraged that you discuss your requirements with the author of the
-code you need to access. The best long-term solution to these cases is for
-new documented interfaces to be added to the parent module.
-
-\subsection{Access to primitives}
-
-As \pkg{expl3} is still a developing system, there are places where direct
-access to engine primitives is required. These are all marked as
-\enquote{do not use} in the code and so require special handling. Where a
-programmer is sure that they need to use a primitive (for example where the
-team have not yet covered access to an area) then a local copy of the
-primitive should be made, for example
-\begin{verbatim}
- \cs_new_eq:NN \__module_message:w \tex_message:D
- % ...
- \cs_new_protected:Npn \__module_fancy_msg:n #1
- { \__module_message:w { *** #1 *** } }
-\end{verbatim}
-This approach makes it possible for the team and others to find such
-usage (by searching for the \texttt{:D} argument type) but avoids
-multiple uses in general code.
-
-At the same time, the team ask that these use cases are raised on the
-\texttt{LaTeX-L} mailing list. The team are keen to collect use cases for
-areas that have not yet been addressed and to provide new code where the
-required interfaces become clear.
-
-Programmers using primitives should be ready to make updates to their
-code as the team develop additional interfaces.
-
-\section{Auxiliary functions}
-
-In general, the team encourages the use of descriptive names in \LaTeX3 code.
-Thus many helper functions would have names which describe briefly what they do,
-rather than simply indicating that they are auxiliary to some higher-level
-function. However, there are places where one or more \texttt{aux} functions
-are required. Where possible, these should be differentiated by signature
-\begin{verbatim}
- \cs_new_protected:Npn \@@_function:nn #1#2
- {
- ...
- }
- \cs_new_protected:Npn \@@_function_aux:nn #1#2
- {
- ...
- }
- \cs_new_protected:Npn \@@_function_aux:w #1#2 \q_stop
- {
- ...
- }
-\end{verbatim}
-Where more than one auxiliary shares the same signature, the recommended naming
-scheme is \texttt{auxi}, \texttt{auxii} and so on.
-\begin{verbatim}
- \cs_new_protected:Npn \@@_function_auxi:nn #1#2
- {
- ...
- }
- \cs_new_protected:Npn \@@_function_auxii:nn #1#2
- {
- ...
- }
-\end{verbatim}
-The use of \texttt{aux_i}, \texttt{aux_ii}, \emph{etc.}\ is discouraged as this
-conflicts with the convention used by \cs{use_i:nn} and related functions.
-
-\section{Functions with `weird' arguments}
-
-When defining commands that do not follow the usual convention of accepting
-arguments as single-tokens or braced-text, the \verb|w| argument specifier
-is used to denote that the function signature cannot fully describe the syntax.
-Two examples from the \LaTeX3 kernel are:
-\begin{quote}
-\verb|\use_none_delimit_by_q_stop:w| $\langle$\,\emph{text}\,$\rangle$ \verb|\q_stop|\\
-\verb|\use_i_delimit_by_q_stop:nw| \char`\{ $\langle$\,\emph{arg}\,$\rangle$\char`}\,$\langle$\,\emph{text}\,$\rangle$ \verb|\q_stop|
-\end{quote}
-More complex definitions are possible if commands are to parse tokens,
-such as the internal kernel command
-\begin{verbatim}
- \cs_new_protected:Npn \__clist_get:wN #1 , #2 \q_stop #3
- { \tl_set:Nn #3 {#1} }
-\end{verbatim}
-When the \verb|w| specifier is being used, it is encouraged not to try
-and complicate the rest of the signature too much---for example, it
-would be considered poor style to have a function with a signature like
-\verb|\foo_bar:wnw| unless there were very clear reasons of code clarity.
-A signature such as \verb|:ww| would certainly be discouraged.
-
-Examining the examples above, it can be seen that there are scenarios in
-which it may make logical sense for having a signature such as \verb|:wN| or
-\verb|:nw|, but when in doubt the recommended approach is to simply use
-\verb|:w| as a catch-all.
-
-\end{document}
diff --git a/macros/latex/contrib/l3kernel/l3syntax-changes.pdf b/macros/latex/contrib/l3kernel/l3syntax-changes.pdf
deleted file mode 100644
index 2a701d8ec5..0000000000
--- a/macros/latex/contrib/l3kernel/l3syntax-changes.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3syntax-changes.tex b/macros/latex/contrib/l3kernel/l3syntax-changes.tex
deleted file mode 100644
index 7e124576c7..0000000000
--- a/macros/latex/contrib/l3kernel/l3syntax-changes.tex
+++ /dev/null
@@ -1,190 +0,0 @@
-\iffalse meta-comment
-
-File: l3syntax-changes.tex
-
-Copyright (C) 2011,2012,2017-2024 The LaTeX Project
-
-It may be distributed and/or modified under the conditions of the
-LaTeX Project Public License (LPPL), either version 1.3c of this
-license or (at your option) any later version. The latest version
-of this license is in the file
-
- https://www.latex-project.org/lppl.txt
-
-This file is part of the "l3kernel bundle" (The Work in LPPL)
-and all files in that bundle must be distributed together.
-
-The released version of this bundle is available from CTAN.
-
-\fi
-
-\documentclass{l3doc}
-
-
-\title{%
- Syntax changes in \LaTeX3 functions%
-}
-\author{%
- The \LaTeX{} Project\thanks
- {%
- E-mail:
- \href{mailto:latex-team@latex-project.org}%
- {latex-team@latex-project.org}%
- }%
-}
-\date{Released 2024-03-14}
-
-\newcommand{\TF}{\textit{(TF)}}
-
-\begin{document}
-
-\maketitle
-
-This file describes functions that were expected to be completely
-stable, but whose syntax has changed in ways that may potentially
-require code relying on them to be changed. This file does not include
-bug-fixes, nor backward-compatible extensions of the syntax,
-nor functions that were completely
-deprecated: the latter are listed in \texttt{l3obsolete.txt}. Only
-changes after August 2011 are listed, with an approximate date.
-
-\section{August 2011}
-
-\begin{itemize}
- \item \cs{tl_if_single:n\TF} recognized any non-zero number of
- explicit spaces as \meta{true}, and did not ignore trailing spaces.
- Now it is \meta{true} for
- \[
- \meta{optional spaces}
- \meta{normal token or brace group}
- \meta{optional spaces}.
- \]
- \item \cs{tl_reverse:n} stripped outer braces and lost unprotected spaces.
- Now it keeps spaces, leaves unbraced single tokens unbraced, and
- braced groups braced.
- \item \cs{tl_trim_spaces:n} only removed one leading and trailing space.
- Now removes recursively. Also, on the left it used to strip implicit
- and explicit spaces with any character code. Now it strips only explicit
- space characters $(32,10)$.
-\end{itemize}
-
-\section{September 2011}
-
-\begin{itemize}
-\item clist functions which receive an \texttt{n}-type comma list argument
- now trim spaces from each item in the argument.
-\end{itemize}
-
-\section{May 2012}
-
-\begin{itemize}
- \item The \pkg{l3fp} code has been completely rewritten with a new
- expandable interface.
- \item Getting/popping from a comma list or sequence or property list
- that is empty (or missing the given key) now gives the quark
- \cs{q_no_value}.
-\end{itemize}
-
-\section{June 2012}
-
-\begin{itemize}
- \item Access to list functions now indexes from~$1$, not from~$0$.
- This applies to multiple choices in the \pkg{l3keys} module and
- the \cs{clist_item:Nn}, \cs{seq_item:Nn} and \cs{tl_item:Nn}
- functions.
- \item \cs{tl_trim_spaces:n} now requires a variable number of
- expansions to fully expand, rather than exactly two. Of course,
- \texttt{x}-type or \texttt{e}-type expansion still correctly evaluates this function.
-\end{itemize}
-
-\section{July 2012}
-
-\begin{itemize}
- \item The \cs{tl_if_head_eq_meaning:nN}, \cs{tl_if_head_eq_catcode:nN}
- and \cs{tl_if_head_eq_charcode:nN} conditionals now never match when
- their first argument is empty.
-\end{itemize}
-
-\section{August 2012}
-
-\begin{itemize}
- \item \cs{lua_now:x} is now a standard \texttt{x}-type expansion of
- \cs{lua_now:n}, which does no expansion. Engine-level expansion is moved
- to \cs{lua_now:e}, reflecting the fact that this is non-standard in the
- same way as for example \cs{str_if_eq_x:nn(TF)}.
-\end{itemize}
-
-\section{December 2013}
-
-\begin{itemize}
- \item In \pkg{l3fp} expressions, the badly named functions |round0|,
- |round-|, |round+| are now named |trunc|, |floor|, |ceil|.
-\end{itemize}
-
-\section{May 2014}
-
-\begin{itemize}
- \item Now \cs{int_step_function:nnnN} evaluates its first three
- arguments (start, step, stop) up front, rather than evaluating them
- at each step in the loop. The same holds for the related mappings
- \cs{int_step_inline:nnnn}, \cs{int_step_variable:nnnNn}, and their
- analogues for \texttt{dim} and \texttt{fp} datatypes.
-\end{itemize}
-
-\section{July 2014}
-
-\begin{itemize}
- \item In \pkg{l3fp} expressions, juxtaposition is interpreted as
- multiplication. Now the precedence of juxtaposition is set to be
- the same as if there was an explicit multiplication
- sign~\texttt{*}. Previously, juxtaposition would bound more tightly
- than any other operation.
-\end{itemize}
-
-\section{August 2015}
-
-\begin{itemize}
- \item The \cs{hbox:n} and related \pkg{l3box} commands now take an
- \texttt{n}-type argument and provide it braced to the underlying
- \TeX{} primitive. The functions \cs{hbox:w} and \cs{hbox_end:} in
- contrast do not read the contents of the box as a macro argument.
-\end{itemize}
-
-\section{2016}
-
-No change.
-
-\section{July 2017}
-
-\begin{itemize}
- \item Boolean expressions are now evaluated eagerly, namely both
- operands of logical \texttt{and} (|&&|) and \texttt{or} (\verb"||")
- are evaluated even when the result of the logical operation is fixed
- after determining the first operand. For lazy evaluation,
- \cs{bool_lazy_and_p:nn} and related functions are provided.
-\end{itemize}
-
-\section{November 2017}
-
-\begin{itemize}
- \item Spaces are now preserved inside keys in \pkg{l3keys}, and
- trimmed at both ends.
- \item \cs{cs_generate_variant:Nn} is now stricter: it only allows to
- change \texttt{N}-type arguments to \texttt{c}, and \texttt{n} to
- \texttt{o}, \texttt{V}, \texttt{v}, \texttt{f}, \texttt{x}. On the
- one hand the latter argument types typically give rise to more than
- one token, not suitable for use by an \texttt{N}-type base function.
- On the other hand, \texttt{c} variants of \texttt{n} arguments
- should often be \texttt{v} variants (when the argument is eventually
- evaluated) or mistakes where the programmer thought the base
- function was \texttt{N}-type.
-\end{itemize}
-
-\section{February 2020}
-
-\begin{itemize}
- \item \cs{keyval_parse:NNn} now works by expansion, returning
- the parsed list inside \cs{exp_not:n}.
-\end{itemize}
-
-\end{document}
diff --git a/macros/latex/contrib/l3kernel/l3sys.dtx b/macros/latex/contrib/l3kernel/l3sys.dtx
deleted file mode 100644
index feec1232fd..0000000000
--- a/macros/latex/contrib/l3kernel/l3sys.dtx
+++ /dev/null
@@ -1,1372 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3sys.dtx
-%
-% Copyright (C) 2015-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3sys} module\\ System/runtime functions^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \section{The name of the job}
-%
-% \begin{variable}[added = 2015-09-19, updated = 2019-10-27]{\c_sys_jobname_str}
-% Constant that gets the \enquote{job name} assigned when \TeX{} starts.
-% \begin{texnote}
-% This is the \TeX{} primitive \tn{jobname}. For technical
-% reasons, the string here is not of the same internal form as other,
-% but may be manipulated using normal string functions.
-% \end{texnote}
-% \end{variable}
-%
-% \section{Date and time}
-%
-% \begin{variable}[added = 2015-09-22]
-% {
-% \c_sys_minute_int,
-% \c_sys_hour_int,
-% \c_sys_day_int,
-% \c_sys_month_int,
-% \c_sys_year_int,
-% }
-% The date and time at which the current job was started: these are
-% all reported as integers.
-% \begin{texnote}
-% Whilst the underlying \TeX{} primitives \tn{time}, \tn{day}, \tn{month},
-% and~\tn{year} can be altered by the user, this
-% interface to the time and date is intended to be the \enquote{real}
-% values.
-% \end{texnote}
-% \end{variable}
-%
-% \begin{variable}[added = 2023-08-27]{\c_sys_timestamp_str}
-% The timestamp for the current job: the format is as described for
-% \cs{file_timestamp:n}.
-% \end{variable}
-%
-% \section{Engine}
-%
-% \begin{function}[added = 2015-09-07, EXP, pTF]
-% {
-% \sys_if_engine_luatex:,
-% \sys_if_engine_pdftex:,
-% \sys_if_engine_ptex: ,
-% \sys_if_engine_uptex: ,
-% \sys_if_engine_xetex:
-% }
-% \begin{syntax}
-% \cs{sys_if_engine_pdftex_p:}
-% \cs{sys_if_engine_pdftex:TF} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Conditionals which allow engine-specific code to be used. The names
-% follow naturally from those of the engine binaries: note that the
-% |(u)ptex| tests are for \epTeX{} and \eupTeX{} as \pkg{expl3} requires
-% the \eTeX{} extensions. Each conditional is true for
-% \emph{exactly one} supported engine. In particular,
-% |\sys_if_engine_ptex_p:| is true for \epTeX{} but false for \eupTeX{}.
-% \end{function}
-%
-% \begin{variable}[added = 2015-09-19]{\c_sys_engine_str}
-% The current engine given as a lower case string: one of
-% |luatex|, |pdftex|, |ptex|, |uptex| or |xetex|.
-% \end{variable}
-%
-% \begin{variable}[added = 2020-08-20]{\c_sys_engine_exec_str}
-% The name of the standard executable for the current \TeX{} engine given
-% as a lower case string: one of |luatex|,
-% |luahbtex|, |pdftex|, |eptex|, |euptex| or |xetex|.
-% \end{variable}
-%
-% \begin{variable}[added = 2020-08-20]{\c_sys_engine_format_str}
-% The name of the preloaded format for the current \TeX{} run given
-% as a lower case string: one of
-% |lualatex| (or |dvilualatex|),
-% |pdflatex| (or |latex|), |platex|, |uplatex| or |xelatex| for \LaTeX{},
-% similar names for plain \TeX{} (except \pdfTeX{} in DVI mode yields
-% |etex|), and |cont-en| for Con\TeX{}t (i.e.~the
-% \tn{fmtname}).
-% \end{variable}
-%
-% \begin{variable}[added = 2018-05-02]{\c_sys_engine_version_str}
-% The version string of the current engine, in the same form as
-% given in the banner issued when running a job. For \pdfTeX{}
-% and \LuaTeX{} this is of the form
-% \begin{quote}
-% \meta{major}.\meta{minor}.\meta{revision}
-% \end{quote}
-% For \XeTeX{}, the form is
-% \begin{quote}
-% \meta{major}.\meta{minor}
-% \end{quote}
-% For \pTeX{} and \upTeX{}, only releases since \TeX{} Live 2018
-% make the data available, and the form is more complex, as it comprises
-% the \pTeX{} version, the \upTeX{} version and the e-\pTeX{} version.
-% \begin{quote}
-% p\meta{major}.\meta{minor}.\meta{revision}-u\meta{major}.\meta{minor}^^A
-% -\meta{epTeX}
-% \end{quote}
-% where the |u| part is only present for \upTeX{}.
-% \end{variable}
-%
-% \begin{function}[added = 2021-05-12, EXP]{\sys_timer:}
-% \begin{syntax}
-% \cs{sys_timer:}
-% \end{syntax}
-% Expands to the current value of the engine's timer clock, a
-% non-negative integer. This function is only defined for engines with
-% timer support. This command measures not just CPU time but
-% real time (including time waiting for user input). The unit are
-% scaled seconds ($2^{-16}$ seconds).
-% \end{function}
-%
-% \begin{function}[added = 2021-05-12, EXP, pTF]{\sys_if_timer_exist:}
-% \begin{syntax}
-% \cs{sys_if_timer_exist_p:}
-% \cs{sys_if_timer_exist:TF} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests whether current engine has timer support.
-% \end{function}
-%
-% \section{Output format}
-%
-% \begin{function}[added = 2015-09-19, EXP, pTF]
-% {
-% \sys_if_output_dvi:,
-% \sys_if_output_pdf:
-% }
-% \begin{syntax}
-% \cs{sys_if_output_dvi_p:}
-% \cs{sys_if_output_dvi:TF} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Conditionals which give the current output mode the \TeX{} run is
-% operating in. This is always one of two outcomes, DVI mode or
-% PDF mode. The two sets of conditionals are thus complementary and
-% are both provided to allow the programmer to emphasise the most
-% appropriate case.
-% \end{function}
-%
-% \begin{variable}[added = 2015-09-19]{\c_sys_output_str}
-% The current output mode given as a lower case string: one of
-% |dvi| or |pdf|.
-% \end{variable}
-%
-% \section{Platform}
-%
-% \begin{function}[added = 2018-07-27, EXP, pTF]
-% {
-% \sys_if_platform_unix:,
-% \sys_if_platform_windows:
-% }
-% \begin{syntax}
-% \cs{sys_if_platform_unix_p:}
-% \cs{sys_if_platform_unix:TF} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Conditionals which allow platform-specific code to be used. The names
-% follow the \Lua{} |os.type()| function, \emph{i.e.}~all Unix-like systems
-% are |unix| (including Linux and MacOS).
-% \end{function}
-%
-% \begin{variable}[added = 2018-07-27]{\c_sys_platform_str}
-% The current platform given as a lower case string: one of
-% |unix|, |windows| or |unknown|.
-% \end{variable}
-%
-% \section{Random numbers}
-%
-% \begin{function}[added = 2017-05-27, EXP]{\sys_rand_seed:}
-% \begin{syntax}
-% \cs{sys_rand_seed:}
-% \end{syntax}
-% Expands to the current value of the engine's random seed, a
-% non-negative integer. In engines without random number support this
-% expands to $0$.
-% \end{function}
-%
-% \begin{function}[added = 2017-05-27]{\sys_gset_rand_seed:n}
-% \begin{syntax}
-% \cs{sys_gset_rand_seed:n} \Arg{int expr}
-% \end{syntax}
-% Globally sets the seed for the engine's pseudo-random number
-% generator to the \meta{integer expression}. This random seed
-% affects all \cs[no-index]{\ldots{}_rand} functions (such as
-% \cs{int_rand:nn} or \cs{clist_rand_item:n}) as well as other
-% packages relying on the engine's random number generator. In
-% engines without random number support this produces an error.
-% \begin{texnote}
-% While a $32$-bit (signed) integer can be given as a seed, only the
-% absolute value is used and any number beyond $2^{28}$ is divided
-% by an appropriate power of~$2$. We recommend using an integer in
-% $[0,2^{28}-1]$.
-% \end{texnote}
-% \end{function}
-%
-% \section{Access to the shell}
-%
-% \begin{function}[noTF, added = 2019-09-20]
-% {\sys_get_shell:nnN}
-% \begin{syntax}
-% \cs{sys_get_shell:nnN} \Arg{shell~command} \Arg{setup} \meta{tl~var}
-% \cs{sys_get_shell:nnNTF} \Arg{shell~command} \Arg{setup} \meta{tl~var} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Defines \meta{tl~var} to the text returned by the \meta{shell command}.
-% The \meta{shell command} is converted to a string using
-% \cs{tl_to_str:n}. Category codes may need to be set appropriately
-% via the \meta{setup} argument, which is run just before running the
-% \meta{shell command} (in a group).
-% If shell escape is disabled, the \meta{tl~var} will be set to
-% \cs{q_no_value} in the non-branching version.
-% Note that quote characters (|"|) \emph{cannot} be used inside the
-% \meta{shell command}. The \cs{sys_get_shell:nnNTF} conditional
-% inserts the \meta{true code} if the shell is available and no quote is
-% detected, and the \meta{false code} otherwise.
-%
-% \emph{Note}: It is not possible to tell from \TeX{} if a command is allowed
-% in restricted shell escape. If restricted escape is enabled, the
-% \texttt{true} branch is taken: if the command is forbidden at this stage, a
-% low-level \TeX{} error will arise.
-% \end{function}
-%
-% \begin{variable}[added = 2017-05-27]{\c_sys_shell_escape_int}
-% This variable exposes the internal triple of the shell escape
-% status. The possible values are
-% \begin{description}
-% \item[0] Shell escape is disabled
-% \item[1] Unrestricted shell escape is enabled
-% \item[2] Restricted shell escape is enabled
-% \end{description}
-% \end{variable}
-%
-% \begin{function}[added = 2017-05-27, EXP, pTF]{\sys_if_shell:}
-% \begin{syntax}
-% \cs{sys_if_shell_p:}
-% \cs{sys_if_shell:TF} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Performs a check for whether shell escape is enabled. This
-% returns true if either of restricted or unrestricted shell escape
-% is enabled.
-% \end{function}
-%
-% \begin{function}[added = 2017-05-27, EXP, pTF]{\sys_if_shell_unrestricted:}
-% \begin{syntax}
-% \cs{sys_if_shell_unrestricted_p:}
-% \cs{sys_if_shell_unrestricted:TF} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Performs a check for whether \emph{unrestricted} shell escape is
-% enabled.
-% \end{function}
-%
-% \begin{function}[added = 2017-05-27, EXP, pTF]{\sys_if_shell_restricted:}
-% \begin{syntax}
-% \cs{sys_if_shell_restricted_p:}
-% \cs{sys_if_shell_restricted:TF} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Performs a check for whether \emph{restricted} shell escape is
-% enabled. This returns false if unrestricted shell escape is
-% enabled. Unrestricted shell escape is not considered a superset
-% of restricted shell escape in this case. To find whether any
-% shell escape is enabled use \cs{sys_if_shell:TF}.
-% \end{function}
-%
-% \begin{function}[added = 2017-05-27]
-% {\sys_shell_now:n, \sys_shell_now:e}
-% \begin{syntax}
-% \cs{sys_shell_now:n} \Arg{tokens}
-% \end{syntax}
-% Execute \meta{tokens} through shell escape immediately.
-% \end{function}
-%
-% \begin{function}[added = 2017-05-27]
-% {\sys_shell_shipout:n, \sys_shell_shipout:e}
-% \begin{syntax}
-% \cs{sys_shell_shipout:n} \Arg{tokens}
-% \end{syntax}
-% Execute \meta{tokens} through shell escape at shipout.
-% \end{function}
-%
-% \section{System queries}
-%
-% Some queries can be made about the file system, etc., without needing to
-% use unrestricted shell escape. This is carried out using the script
-% \texttt{l3sys-query}, which is documented separately. The wrappers here
-% use this script, if available, to obtain system information that is
-% not directly available within the \TeX{} run. Note that if restricted
-% shell escape is disabled, no results can be obtained.
-%
-% \begin{function}[added = 2024-03-08]
-% {\sys_get_query:nN, \sys_get_query:nnN, \sys_get_query:nnnN}
-% \begin{syntax}
-% \cs{sys_get_query:nN} \Arg{cmd} \Arg{tl var}
-% \cs{sys_get_query:nnN} \Arg{cmd} \Arg{spec} \Arg{tl var}
-% \cs{sys_get_query:nnnN} \Arg{cmd} \Arg{options} \Arg{spec} \Arg{tl var}
-% \end{syntax}
-% Sets the \meta{tl var} to the information returned by the
-% \texttt{l3sys-query} \meta{cmd}, potentially supplying the \meta{options}
-% and \meta{spec} to the query call. The valid \meta{cmd} names are at present
-% \begin{itemize}
-% \item \texttt{pwd} Returns the present working directory
-% \item \texttt{ls} Returns a directory listing, using the \meta{spec} to
-% select files and applying the \meta{options} if given
-% \end{itemize}
-% The \meta{spec} is likely to contain the wildcards |*| or |?|,
-% and will automatically be passed to
-% the script without shell expansion. In a glob is needed within the
-% \meta{options}, this will need to be protected from shell expansion
-% using |'| tokens.
-%
-% The \meta{spec} and \meta{options}, if given, are expanded fully
-% before passing to the underlying script.
-%
-% If more than one line of text is returned by the \meta{cmd}, these will be
-% separated by character~13 (|^^M|) tokens of category code~12. In most
-% cases, \cs{sys_split_query:nnnN} should be preferred when multi-line
-% output is expected.
-% \end{function}
-%
-% \begin{function}[added = 2024-03-08]
-% {\sys_split_query:nN, \sys_split_query:nnN, \sys_split_query:nnnN}
-% \begin{syntax}
-% \cs{sys_split_query:nN} \Arg{cmd} \Arg{seq}
-% \cs{sys_split_query:nnN} \Arg{cmd} \Arg{spec} \Arg{seq}
-% \cs{sys_split_query:nnnN} \Arg{cmd} \Arg{options} \Arg{spec} \Arg{seq}
-% \end{syntax}
-% Works as described for \cs{sys_split_query:nnnN}, but sets the \meta{seq}
-% to contain one entry for each line returned by \texttt{l3sys-query}.
-% This function should therefore be preferred where multi-line return is
-% expected, e.g.~for the \texttt{ls} command.
-% \end{function}
-%
-% \section{Loading configuration data}
-%
-% \begin{function}[added = 2019-09-12]{\sys_load_backend:n}
-% \begin{syntax}
-% \cs{sys_load_backend:n} \Arg{backend}
-% \end{syntax}
-% Loads the additional configuration file needed for backend support.
-% If the \meta{backend} is empty, the standard backend for the engine in
-% use will be loaded. This command may only be used once.
-% \end{function}
-%
-% \begin{function}[added = 2022-07-29]{\sys_ensure_backend:}
-% \begin{syntax}
-% \cs{sys_ensure_backend:}
-% \end{syntax}
-% Ensures that a backend has been loaded by calling \cs{sys_load_backend:n}
-% if required.
-% \end{function}
-%
-% \begin{variable}{\c_sys_backend_str}
-% Set to the name of the backend in use by \cs{sys_load_backend:n} when
-% issued. Possible values are
-% \begin{itemize}
-% \item \texttt{pdftex}
-% \item \texttt{luatex}
-% \item \texttt{xetex}
-% \item \texttt{dvips}
-% \item \texttt{dvipdfmx}
-% \item \texttt{dvisvgm}
-% \end{itemize}
-% \end{variable}
-%
-% \begin{function}[added = 2019-09-12]{\sys_load_debug:}
-% \begin{syntax}
-% \cs{sys_load_debug:}
-% \end{syntax}
-% Load the additional configuration file for debugging support.
-% \end{function}
-%
-% \subsection{Final settings}
-%
-% \begin{function}[added = 2019-10-06]{\sys_finalise:}
-% \begin{syntax}
-% \cs{sys_finalise:}
-% \end{syntax}
-% Finalises all system-dependent functionality: required before loading
-% a backend.
-% \end{function}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3sys} implementation}
-%
-% \begin{macrocode}
-%<@@=sys>
-% \end{macrocode}
-%
-% \subsection{Kernel code}
-%
-% \begin{macrocode}
-%<*package>
-%<*tex>
-% \end{macrocode}
-%
-% \begin{macro}{\l_@@_tmp_tl}
-% \begin{macrocode}
-\tl_new:N \l_@@_tmp_tl
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Detecting the engine}
-%
-% \begin{macro}{\@@_const:nn}
-% Set the |T|, |F|, |TF|, |p| forms of |#1| to be constants equal to
-% the result of evaluating the boolean expression~|#2|.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_const:nn #1#2
- {
- \bool_if:nTF {#2}
- {
- \cs_new_eq:cN { #1 :T } \use:n
- \cs_new_eq:cN { #1 :F } \use_none:n
- \cs_new_eq:cN { #1 :TF } \use_i:nn
- \cs_new_eq:cN { #1 _p: } \c_true_bool
- }
- {
- \cs_new_eq:cN { #1 :T } \use_none:n
- \cs_new_eq:cN { #1 :F } \use:n
- \cs_new_eq:cN { #1 :TF } \use_ii:nn
- \cs_new_eq:cN { #1 _p: } \c_false_bool
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[pTF, EXP]
-% {
-% \sys_if_engine_luatex:,
-% \sys_if_engine_pdftex:,
-% \sys_if_engine_ptex:,
-% \sys_if_engine_uptex:,
-% \sys_if_engine_xetex:
-% }
-% \begin{variable}{\c_sys_engine_str}
-% Set up the engine tests on the basis exactly one test should be true.
-% Mainly a case of looking for the appropriate marker primitive.
-% \begin{macrocode}
-\str_const:Ne \c_sys_engine_str
- {
- \cs_if_exist:NT \tex_luatexversion:D { luatex }
- \cs_if_exist:NT \tex_pdftexversion:D { pdftex }
- \cs_if_exist:NT \tex_kanjiskip:D
- {
- \cs_if_exist:NTF \tex_enablecjktoken:D
- { uptex }
- { ptex }
- }
- \cs_if_exist:NT \tex_XeTeXversion:D { xetex }
- }
-\tl_map_inline:nn { { luatex } { pdftex } { ptex } { uptex } { xetex } }
- {
- \@@_const:nn { sys_if_engine_ #1 }
- { \str_if_eq_p:Vn \c_sys_engine_str {#1} }
- }
-% \end{macrocode}
-% \end{variable}
-% \end{macro}
-%
-% \begin{variable}{\c_sys_engine_exec_str,\c_sys_engine_format_str}
-% Take the functions defined above, and set up the engine and format
-% names. \cs{c_sys_engine_exec_str} differs from \cs{c_sys_engine_str}
-% as it is the \emph{actual} engine name, not a \enquote{filtered}
-% version. It differs for |ptex| and |uptex|, which have a leading
-% |e|, and for |luatex|, because \LaTeX{} uses the \Lua HB\TeX{}
-% engine.
-%
-% \cs{c_sys_engine_format_str} is quite similar to
-% \cs{c_sys_engine_str}, except that it differentiates |pdflatex| from
-% |latex| (which is \pdfTeX{} in DVI mode). This differentiation,
-% however, is reliable only if the user doesn't change
-% \cs{tex_pdfoutput:D} before loading this code.
-% \begin{macrocode}
-\group_begin:
- \cs_set_eq:NN \lua_now:e \tex_directlua:D
- \str_const:Ne \c_sys_engine_exec_str
- {
- \sys_if_engine_pdftex:T { pdf }
- \sys_if_engine_xetex:T { xe }
- \sys_if_engine_ptex:T { ep }
- \sys_if_engine_uptex:T { eup }
- \sys_if_engine_luatex:T
- {
- lua \lua_now:e
- {
- if (pcall(require, 'luaharfbuzz')) then ~
- tex.print("hb") ~
- end
- }
- }
- tex
- }
-\group_end:
-\str_const:Ne \c_sys_engine_format_str
- {
- \cs_if_exist:NTF \fmtname
- {
- \bool_lazy_or:nnTF
- { \str_if_eq_p:Vn \fmtname { plain } }
- { \str_if_eq_p:Vn \fmtname { LaTeX2e } }
- {
- \sys_if_engine_pdftex:T
- { \int_compare:nNnT { \tex_pdfoutput:D } = { 1 } { pdf } }
- \sys_if_engine_xetex:T { xe }
- \sys_if_engine_ptex:T { p }
- \sys_if_engine_uptex:T { up }
- \sys_if_engine_luatex:T
- {
- \int_compare:nNnT { \tex_pdfoutput:D } = { 0 } { dvi }
- lua
- }
- \str_if_eq:VnTF \fmtname { LaTeX2e }
- { latex }
- {
- \bool_lazy_and:nnT
- { \sys_if_engine_pdftex_p: }
- { \int_compare_p:nNn { \tex_pdfoutput:D } = { 0 } }
- { e }
- tex
- }
- }
- { \fmtname }
- }
- { unknown }
- }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\c_sys_engine_version_str}
-% Various different engines, various different ways to extract the
-% data!
-% \begin{macrocode}
-\str_const:Ne \c_sys_engine_version_str
- {
- \str_case:on \c_sys_engine_str
- {
- { pdftex }
- {
- \int_div_truncate:nn { \tex_pdftexversion:D } { 100 }
- .
- \int_mod:nn { \tex_pdftexversion:D } { 100 }
- .
- \tex_pdftexrevision:D
- }
- { ptex }
- {
- \cs_if_exist:NT \tex_ptexversion:D
- {
- p
- \int_use:N \tex_ptexversion:D
- .
- \int_use:N \tex_ptexminorversion:D
- \tex_ptexrevision:D
- -
- \int_use:N \tex_epTeXversion:D
- }
- }
- { luatex }
- {
- \int_div_truncate:nn { \tex_luatexversion:D } { 100 }
- .
- \int_mod:nn { \tex_luatexversion:D } { 100 }
- .
- \tex_luatexrevision:D
- }
- { uptex }
- {
- \cs_if_exist:NT \tex_ptexversion:D
- {
- p
- \int_use:N \tex_ptexversion:D
- .
- \int_use:N \tex_ptexminorversion:D
- \tex_ptexrevision:D
- -
- u
- \int_use:N \tex_uptexversion:D
- \tex_uptexrevision:D
- -
- \int_use:N \tex_epTeXversion:D
- }
- }
- { xetex }
- {
- \int_use:N \tex_XeTeXversion:D
- \tex_XeTeXrevision:D
- }
- }
- }
-% \end{macrocode}
-% \end{variable}
-%
-% \subsubsection{Platform}
-%
-% \begin{macro}[pTF]{\sys_if_platform_unix:, \sys_if_platform_windows:}
-% \begin{variable}{\c_sys_platform_str}
-% Setting these up requires the file module (file lookup), so is actually
-% implemented there.
-% \end{variable}
-% \end{macro}
-%
-% \subsubsection{Configurations}
-%
-% \begin{macro}{\sys_load_backend:n}
-% \begin{macro}{\@@_load_backend_check:N}
-% \begin{variable}{\c_sys_backend_str}
-% Loading the backend code is pretty simply: check that the backend is valid,
-% then load it up.
-% \begin{macrocode}
-\cs_new_protected:Npn \sys_load_backend:n #1
- {
- \sys_finalise:
- \str_if_exist:NTF \c_sys_backend_str
- {
- \str_if_eq:VnF \c_sys_backend_str {#1}
- { \msg_error:nn { sys } { backend-set } }
- }
- {
- \tl_if_blank:nF {#1}
- { \tl_gset:Nn \g_@@_backend_tl {#1} }
- \@@_load_backend_check:N \g_@@_backend_tl
- \str_const:Ne \c_sys_backend_str { \g_@@_backend_tl }
- \__kernel_sys_configuration_load:n
- { l3backend- \c_sys_backend_str }
- }
- }
-\cs_new_protected:Npn \@@_load_backend_check:N #1
- {
- \sys_if_engine_xetex:TF
- {
- \str_case:VnF #1
- {
- { dvisvgm } { }
- { xdvipdfmx } { \tl_gset:Nn #1 { xetex } }
- { xetex } { }
- }
- {
- \msg_error:nnee { sys } { wrong-backend }
- #1 { xetex }
- \tl_gset:Nn #1 { xetex }
- }
- }
- {
- \sys_if_output_pdf:TF
- {
- \str_if_eq:VnTF #1 { pdfmode }
- {
- \sys_if_engine_luatex:TF
- { \tl_gset:Nn #1 { luatex } }
- { \tl_gset:Nn #1 { pdftex } }
- }
- {
- \bool_lazy_or:nnF
- { \str_if_eq_p:Vn #1 { luatex } }
- { \str_if_eq_p:Vn #1 { pdftex } }
- {
- \msg_error:nnee { sys } { wrong-backend }
- #1 { \sys_if_engine_luatex:TF { luatex } { pdftex } }
- \sys_if_engine_luatex:TF
- { \tl_gset:Nn #1 { luatex } }
- { \tl_gset:Nn #1 { pdftex } }
- }
- }
- }
- {
- \str_case:VnF #1
- {
- { dvipdfmx } { }
- { dvips } { }
- { dvisvgm } { }
- }
- {
- \msg_error:nnee { sys } { wrong-backend }
- #1 { dvips }
- \tl_gset:Nn #1 { dvips }
- }
- }
- }
- }
-% \end{macrocode}
-% \end{variable}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\sys_ensure_backend:}
-% A simple wrapper.
-% \begin{macrocode}
-\cs_new_protected:Npn \sys_ensure_backend:
- {
- \str_if_exist:NF \c_sys_backend_str
- { \sys_load_backend:n { } }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\g_@@_debug_bool}
-% \begin{macrocode}
-\bool_new:N \g_@@_debug_bool
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\sys_load_debug:}
-% The most complicated thing here is that we can only use
-% \cs{__kernel_sys_configuration_load:n} in the preamble in \LaTeX{}.
-% \begin{macrocode}
-\cs_new_protected:Npn \sys_load_debug:
- {
- \bool_if:NF \g_@@_debug_bool
- { \__kernel_sys_configuration_load:n { l3debug } }
- \bool_gset_true:N \g_@@_debug_bool
- }
-\cs_if_exist:NT \@expl@finalise@setup@@@@
- {
- \tl_gput_right:Nn \@expl@finalise@setup@@@@
- {
- \tl_gput_right:Nn \@kernel@after@begindocument
- {
- \cs_gset_protected:Npn \sys_load_debug:
- { \msg_error:nn { sys } { load-debug-in-preamble } }
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Access to the shell}
-%
-% \begin{variable}{\l_@@_internal_tl}
-% \begin{macrocode}
-\tl_new:N \l_@@_internal_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\c_@@_marker_tl}
-% The same idea as the marker for rescanning token lists.
-% \begin{macrocode}
-\tl_const:Ne \c_@@_marker_tl { : \token_to_str:N : }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[TF]{\sys_get_shell:nnN}
-% \begin{macro}{\sys_get_shell:nnN,\@@_get:nnN,\@@_get_do:Nw}
-% Setting using a shell is at this level just a slightly specialised file
-% operation, with an additional check for quotes, as these are not supported.
-% \begin{macrocode}
-\cs_new_protected:Npn \sys_get_shell:nnN #1#2#3
- {
- \sys_get_shell:nnNF {#1} {#2} #3
- { \tl_set:Nn #3 { \q_no_value } }
- }
-\prg_new_protected_conditional:Npnn \sys_get_shell:nnN #1#2#3 { T , F , TF }
- {
- \sys_if_shell:TF
- { \exp_args:No \@@_get:nnN { \tl_to_str:n {#1} } {#2} #3 }
- { \prg_return_false: }
- }
-\cs_new_protected:Npn \@@_get:nnN #1#2#3
- {
- \tl_if_in:nnTF {#1} { " }
- {
- \msg_error:nne
- { kernel } { quote-in-shell } {#1}
- \prg_return_false:
- }
- {
- \group_begin:
- \if_false: { \fi:
- \int_set_eq:NN \tex_tracingnesting:D \c_zero_int
- \exp_args:No \tex_everyeof:D { \c_@@_marker_tl }
- #2 \scan_stop:
- \exp_after:wN \@@_get_do:Nw
- \exp_after:wN #3
- \exp_after:wN \prg_do_nothing:
- \tex_input:D | "#1" \scan_stop:
- \if_false: } \fi:
- \prg_return_true:
- }
- }
-\exp_args:Nno \use:nn
- { \cs_new_protected:Npn \@@_get_do:Nw #1#2 }
- { \c_@@_marker_tl }
- {
- \group_end:
- \tl_set:No #1 {#2}
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{variable}{\c_@@_shell_stream_int}
-% This is not needed for \LuaTeX{}: shell escape there isn't done using
-% a \TeX{} interface.
-% \begin{macrocode}
-\sys_if_engine_luatex:F
- { \int_const:Nn \c_@@_shell_stream_int { 18 } }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\sys_shell_now:n, \sys_shell_now:e, \sys_shell_now:x}
-% \begin{macro}{\@@_shell_now:e}
-% Execute commands through shell escape immediately.
-%
-% For \LuaTeX{}, we use a pseudo-primitive to do the actual work.
-% \begin{macrocode}
-%</tex>
-%<*lua>
-do
- local os_exec = os.execute
-
- local function shellescape(cmd)
- local status,msg = os_exec(cmd)
- if status == nil then
- write_nl("log","runsystem(" .. cmd .. ")...(" .. msg .. ")\n")
- elseif status == 0 then
- write_nl("log","runsystem(" .. cmd .. ")...executed\n")
- else
- write_nl("log","runsystem(" .. cmd .. ")...failed " .. (msg or "") .. "\n")
- end
- end
- luacmd("@@_shell_now:e", function()
- shellescape(scan_string())
- end, "global", "protected")
-%</lua>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*tex>
-\sys_if_engine_luatex:TF
- {
- \cs_new_protected:Npn \sys_shell_now:n #1
- { \@@_shell_now:e { \exp_not:n {#1} } }
- }
- {
- \cs_new_protected:Npn \sys_shell_now:n #1
- { \iow_now:Nn \c_@@_shell_stream_int {#1} }
- }
-\cs_generate_variant:Nn \sys_shell_now:n { e, x }
-%</tex>
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\sys_shell_shipout:n, \sys_shell_shipout:e, \sys_shell_shipout:x}
-% \begin{macro}{\@@_shell_shipout:e}
-% Execute commands through shell escape at shipout.
-%
-% For \LuaTeX, we use the same helper as above but delayed using a |late_lua| whatsit.
-% Creating a |late_lua| whatsit works a bit different if we are running under Con\TeX{}t.
-% \begin{macrocode}
-%<*lua>
- local new_latelua = nodes and nodes.nuts and nodes.nuts.pool and nodes.nuts.pool.latelua or (function()
- local whatsit_id = node.id'whatsit'
- local latelua_sub = node.subtype'late_lua'
- local node_new = node.direct.new
- local setfield = node.direct.setwhatsitfield or node.direct.setfield
- return function(f)
- local n = node_new(whatsit_id, latelua_sub)
- setfield(n, 'data', f)
- return n
- end
- end)()
- local node_write = node.direct.write
-
- luacmd("@@_shell_shipout:e", function()
- local cmd = scan_string()
- node_write(new_latelua(function() shellescape(cmd) end))
- end, "global", "protected")
-end
-%</lua>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*tex>
-\sys_if_engine_luatex:TF
- {
- \cs_new_protected:Npn \sys_shell_shipout:n #1
- { \@@_shell_shipout:e { \exp_not:n {#1} } }
- }
- {
- \cs_new_protected:Npn \sys_shell_shipout:n #1
- { \iow_shipout:Nn \c_@@_shell_stream_int {#1} }
- }
-\cs_generate_variant:Nn \sys_shell_shipout:n { e , x }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Dynamic (every job) code}
-%
-% \begin{macro}{\__kernel_sys_everyjob:}
-% \begin{macro}{\@@_everyjob:n}
-% \begin{variable}{\g_@@_everyjob_tl}
-% \begin{macrocode}
-\cs_new_protected:Npn \__kernel_sys_everyjob:
- {
- \tl_use:N \g_@@_everyjob_tl
- \tl_gclear:N \g_@@_everyjob_tl
- }
-\cs_new_protected:Npn \@@_everyjob:n #1
- { \tl_gput_right:Nn \g_@@_everyjob_tl {#1} }
-\tl_new:N \g_@@_everyjob_tl
-% \end{macrocode}
-% \end{variable}
-% \end{macro}
-% \end{macro}
-%
-% \subsubsection{The name of the job}
-%
-% \begin{variable}{\c_sys_jobname_str}
-% Inherited from the \LaTeX3 name for the primitive. This \emph{has} to be
-% the primitive as it's set in \tn{everyjob}. If the user does
-% \begin{verbatim}
-% pdflatex \input some-file-name
-% \end{verbatim}
-% then \tn{everyjob} is inserted \emph{before} \tn{jobname} is changed form
-% |texput|, and thus we would have the wrong result.
-% \begin{macrocode}
-\@@_everyjob:n
- { \cs_new_eq:NN \c_sys_jobname_str \tex_jobname:D }
-% \end{macrocode}
-% \end{variable}
-%
-% \subsubsection{Time and date}
-%
-% \begin{variable}
-% {
-% \c_sys_minute_int,
-% \c_sys_hour_int,
-% \c_sys_day_int,
-% \c_sys_month_int,
-% \c_sys_year_int,
-% }
-% Copies of the information provided by \TeX{}. There is a lot of defensive
-% code in package mode: someone may have moved the primitives, and they can
-% only be recovered if we have \tn{primitive} and it is working correctly.
-% For Ini\TeX{} of course that is all redundant but does no harm.
-% \begin{macrocode}
-\@@_everyjob:n
- {
- \group_begin:
- \cs_set:Npn \@@_tmp:w #1
- {
- \str_if_eq:eeTF { \cs_meaning:N #1 } { \token_to_str:N #1 }
- { #1 }
- {
- \cs_if_exist:NTF \tex_primitive:D
- {
- \bool_lazy_and:nnTF
- { \sys_if_engine_xetex_p: }
- {
- \int_compare_p:nNn
- { \exp_after:wN \use_none:n \tex_XeTeXrevision:D }
- < { 99999 }
- }
- { 0 }
- { \tex_primitive:D #1 }
- }
- { 0 }
- }
- }
- \int_const:Nn \c_sys_minute_int
- { \int_mod:nn { \@@_tmp:w \time } { 60 } }
- \int_const:Nn \c_sys_hour_int
- { \int_div_truncate:nn { \@@_tmp:w \time } { 60 } }
- \int_const:Nn \c_sys_day_int { \@@_tmp:w \day }
- \int_const:Nn \c_sys_month_int { \@@_tmp:w \month }
- \int_const:Nn \c_sys_year_int { \@@_tmp:w \year }
- \group_end:
- }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\c_sys_timestamp_str}
-% A simple expansion: Lua\TeX{} chokes if we use \tn{pdffeedback} here,
-% hence the direct use of Lua. Notice that the function there is in the
-% \texttt{pdf} library but isn actually tied to PDF.
-% \begin{macrocode}
-\@@_everyjob:n
- {
- \str_const:Ne \c_sys_timestamp_str
- {
- \cs_if_exist:NTF \tex_directlua:D
- { \tex_directlua:D { tex.print(pdf.getcreationdate()) } }
- { \tex_creationdate:D }
- }
- }
-% \end{macrocode}
-% \end{variable}
-%
-% \subsubsection{Random numbers}
-%
-% \begin{macro}[EXP]{\sys_rand_seed:}
-% Unpack the primitive.
-% \begin{macrocode}
-\@@_everyjob:n
- {
- \cs_new:Npn \sys_rand_seed: { \tex_the:D \tex_randomseed:D }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\sys_gset_rand_seed:n}
-% The primitive always assigns the seed globally.
-% \begin{macrocode}
-\@@_everyjob:n
- {
- \cs_new_protected:Npn \sys_gset_rand_seed:n #1
- { \tex_setrandomseed:D \int_eval:n {#1} \exp_stop_f: }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\sys_timer:, \@@_elapsedtime:}
-% \begin{macro}[EXP, pTF]{\sys_if_timer_exist:}
-% In \LuaTeX{}, create a pseudo-primitve, otherwise try to
-% locate the real primitive. The elapsed time will be
-% available if this succeeds.
-% \begin{macrocode}
-%</tex>
-%<*lua>
- local gettimeofday = os.gettimeofday
- local epoch = gettimeofday() - os.clock()
- local write = tex.write
- local tointeger = math.tointeger
- luacmd('@@_elapsedtime:', function()
- write(tointeger((gettimeofday() - epoch)*65536 // 1))
- end, 'global')
-%</lua>
-%<*tex>
-\sys_if_engine_luatex:TF
- {
- \cs_new:Npn \sys_timer:
- { \@@_elapsedtime: }
- }
- {
- \cs_if_exist:NTF \tex_elapsedtime:D
- {
- \cs_new:Npn \sys_timer:
- { \int_value:w \tex_elapsedtime:D }
- }
- {
- \cs_new:Npn \sys_timer:
- {
- \int_value:w
- \msg_expandable_error:nnn { kernel } { no-elapsed-time }
- { \sys_timer: }
- \c_zero_int
- }
- }
- }
-\@@_const:nn { sys_if_timer_exist }
- { \cs_if_exist_p:N \tex_elapsedtime:D || \cs_if_exist_p:N \@@_elapsedtime: }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsubsection{Access to the shell}
-%
-% \begin{variable}{\c_sys_shell_escape_int}
-% Expose the engine's shell escape status to the user.
-% \begin{macrocode}
-\@@_everyjob:n
- {
- \int_const:Nn \c_sys_shell_escape_int
- {
- \sys_if_engine_luatex:TF
- {
- \tex_directlua:D
- { tex.sprint(status.shell_escape~or~os.execute()) }
- }
- { \tex_shellescape:D }
- }
- }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[EXP, pTF]{\sys_if_shell:, \sys_if_shell_unrestricted:, \sys_if_shell_restricted:}
-% Performs a check for whether shell escape is enabled. The first set
-% of functions returns true if either of restricted or unrestricted
-% shell escape is enabled, while the other two sets of functions
-% return true in only one of these two cases.
-% \begin{macrocode}
-\@@_everyjob:n
- {
- \@@_const:nn { sys_if_shell }
- { \int_compare_p:nNn \c_sys_shell_escape_int > 0 }
- \@@_const:nn { sys_if_shell_unrestricted }
- { \int_compare_p:nNn \c_sys_shell_escape_int = 1 }
- \@@_const:nn { sys_if_shell_restricted }
- { \int_compare_p:nNn \c_sys_shell_escape_int = 2 }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{System queries}
-%
-% \begin{macro}{\sys_get_query:nN}
-% \begin{macro}{\sys_get_query:nnN}
-% \begin{macro}
-% {
-% \sys_get_query:nnnN,
-% \@@_get_query_auxi:nnnN, \@@_get_query_auxi:neeN,
-% \@@_get_query_auxii:nnnN, \@@_get_query_auxii:neeN
-% }
-% Calling the query system is quite straight-forward: most of the effort is
-% in making the read-back catcode-safe. We also want to trim off the trailing
-% |^^M| from the last line.
-% \begin{macrocode}
-\cs_new_protected:Npn \sys_get_query:nN #1#2
- { \sys_get_query:nnnN {#1} { } { } #2 }
-\cs_new_protected:Npn \sys_get_query:nnN #1#2#3
- { \sys_get_query:nnnN {#1} { } {#2} #3 }
-\cs_new_protected:Npn \sys_get_query:nnnN #1#2#3#4
- {
- \str_clear:N #4
- \@@_get_query_auxi:neeN {#1} {#2} {#3} #4
- }
-\cs_new:Npn \@@_get_query_auxi:nnnN #1#2#3#4
- {
- \@@_get_query_auxii:neeN {#1}
- { \tl_if_blank:nF {#2} { \tl_to_str:n { ~ #2 } } }
- {
- \tl_if_blank:nF {#3}
- {
- \c_space_tl
- \sys_if_shell_restricted:F '
- \tl_to_str:n {#3}
- \sys_if_shell_restricted:F '
- }
- }
- #4
- }
-\cs_generate_variant:Nn \@@_get_query_auxi:nnnN { nee }
-\cs_new_protected:Npn \@@_get_query_auxii:nnnN #1#2#3#4
- {
- \sys_if_shell:T
- {
- \sys_get_shell:nnN
- { l3sys-query~#1 #2 #3 }
- {
- \int_step_inline:nnn { 0 } { `a - 1 }
- { \char_set_catcode_other:n {##1} }
- \int_step_inline:nnn { `Z + 1 } { 127 }
- { \char_set_catcode_other:n {##1} }
- \tex_endlinechar:D 13 \scan_stop:
- }
- \l_@@_tmp_tl
- \tl_if_empty:NF \l_@@_tmp_tl
- {
- \exp_after:wN \@@_get_query:Nw \exp_after:wN #4
- \l_@@_tmp_tl \q_stop
- }
- }
- }
-\cs_generate_variant:Nn \@@_get_query_auxii:nnnN { nee }
-\group_begin:
- \tex_lccode:D `\* = 13 \scan_stop:
- \tex_lowercase:D
- {
- \group_end:
- \cs_new_protected:Npn \@@_get_query:Nw #1#2 * \q_stop
- }
- { \tl_set:Nn #1 {#2} }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\sys_split_query:nN}
-% \begin{macro}{\sys_split_query:nnN}
-% \begin{macro}{\sys_split_query:nnnN}
-% A wrapper for convenience.
-% \begin{macrocode}
-\cs_new_protected:Npn \sys_split_query:nN #1#2
- { \sys_split_query:nnnN {#1} { } { } #2 }
-\cs_new_protected:Npn \sys_split_query:nnN #1#2#3
- { \sys_split_query:nnnN {#1} { } {#2} #3 }
-\group_begin:
- \tex_lccode:D `\* = 13 \scan_stop:
- \tex_lowercase:D
- {
- \group_end:
- \cs_new_protected:Npn \sys_split_query:nnnN #1#2#3#4
- {
- \seq_clear:N #4
- \sys_get_query:nnnN {#1} {#2} {#3} \l_@@_tmp_tl
- \tl_if_empty:NF \l_@@_tmp_tl
- { \seq_set_split:NnV #4 * \l_@@_tmp_tl }
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsubsection{Held over from \pkg{l3file}}
-%
-% \begin{variable}{\g_file_curr_name_str}
-% See comments about \cs{c_sys_jobname_str}: here, as soon as there is
-% file input/output, things get \enquote{tided up}.
-% \begin{macrocode}
-\@@_everyjob:n
- { \cs_gset_eq:NN \g_file_curr_name_str \tex_jobname:D }
-% \end{macrocode}
-% \end{variable}
-%
-% \subsection{Last-minute code}
-%
-% \begin{macro}{\sys_finalise:}
-% \begin{macro}{\@@_finalise:n}
-% \begin{variable}{\g_@@_finalise_tl}
-% A simple hook to finalise the system-dependent layer. This is forced by
-% the backend loader, which is forced by the main loader, so we do not need
-% to include that here.
-% \begin{macrocode}
-\cs_new_protected:Npn \sys_finalise:
- {
- \__kernel_sys_everyjob:
- \tl_use:N \g_@@_finalise_tl
- \tl_gclear:N \g_@@_finalise_tl
- }
-\cs_new_protected:Npn \@@_finalise:n #1
- { \tl_gput_right:Nn \g_@@_finalise_tl {#1} }
-\tl_new:N \g_@@_finalise_tl
-% \end{macrocode}
-% \end{variable}
-% \end{macro}
-% \end{macro}
-%
-% \subsubsection{Detecting the output}
-%
-% \begin{macro}[pTF, EXP]
-% {
-% \sys_if_output_dvi:,
-% \sys_if_output_pdf:
-% }
-% \begin{variable}{\c_sys_output_str}
-% This is a simple enough concept: the two views here are complementary.
-% \begin{macrocode}
-\@@_finalise:n
- {
- \str_const:Ne \c_sys_output_str
- {
- \int_compare:nNnTF
- { \cs_if_exist_use:NF \tex_pdfoutput:D { 0 } } > { 0 }
- { pdf }
- { dvi }
- }
- \@@_const:nn { sys_if_output_dvi }
- { \str_if_eq_p:Vn \c_sys_output_str { dvi } }
- \@@_const:nn { sys_if_output_pdf }
- { \str_if_eq_p:Vn \c_sys_output_str { pdf } }
- }
-% \end{macrocode}
-% \end{variable}
-% \end{macro}
-%
-% \subsubsection{Configurations}
-%
-% \begin{variable}{\g_@@_backend_tl}
-% As the backend has to be checked and possibly adjusted, the approach here
-% is to create a variable and use that in a one-shot to set a constant.
-% \begin{macrocode}
-\tl_new:N \g_@@_backend_tl
-\@@_finalise:n
- {
- \__kernel_tl_gset:Nx \g_@@_backend_tl
- {
- \sys_if_engine_xetex:TF
- { xetex }
- {
- \sys_if_output_pdf:TF
- {
- \sys_if_engine_pdftex:TF
- { pdftex }
- { luatex }
- }
- { dvips }
- }
- }
- }
-% \end{macrocode}
-% If there is a class option set, and recognised, we pick it up: these
-% will over-ride anything set automatically but will themselves be
-% over-written if there is a package option.
-% \begin{macrocode}
-\@@_finalise:n
- {
- \cs_if_exist:NT \@classoptionslist
- {
- \cs_if_eq:NNF \@classoptionslist \scan_stop:
- {
- \clist_map_inline:Nn \@classoptionslist
- {
- \str_case:nnT {#1}
- {
- { dvipdfmx }
- { \tl_gset:Nn \g_@@_backend_tl { dvipdfmx } }
- { dvips }
- { \tl_gset:Nn \g_@@_backend_tl { dvips } }
- { dvisvgm }
- { \tl_gset:Nn \g_@@_backend_tl { dvisvgm } }
- { pdftex }
- { \tl_gset:Nn \g_@@_backend_tl { pdfmode } }
- { xetex }
- { \tl_gset:Nn \g_@@_backend_tl { xdvipdfmx } }
- }
- { \clist_remove_all:Nn \@unusedoptionlist {#1} }
- }
- }
- }
- }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macrocode}
-%</tex>
-%</package>
-% \end{macrocode}
-%
-%\end{implementation}
-%
-%\PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3term-glossary.pdf b/macros/latex/contrib/l3kernel/l3term-glossary.pdf
deleted file mode 100644
index 93def3980b..0000000000
--- a/macros/latex/contrib/l3kernel/l3term-glossary.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3term-glossary.tex b/macros/latex/contrib/l3kernel/l3term-glossary.tex
deleted file mode 100644
index 5db9e83a45..0000000000
--- a/macros/latex/contrib/l3kernel/l3term-glossary.tex
+++ /dev/null
@@ -1,180 +0,0 @@
-\iffalse meta-comment
-
-File: l3term-glossary.tex
-
-Copyright (C) 2018-2024 The LaTeX Project
-
-It may be distributed and/or modified under the conditions of the
-LaTeX Project Public License (LPPL), either version 1.3c of this
-license or (at your option) any later version. The latest version
-of this license is in the file
-
- https://www.latex-project.org/lppl.txt
-
-This file is part of the "l3kernel bundle" (The Work in LPPL)
-and all files in that bundle must be distributed together.
-
-The released version of this bundle is available from CTAN.
-
-\fi
-
-\documentclass{l3doc}
-
-
-\title{%
- Glossary of \TeX{} terms used to describe \LaTeX3 functions%
-}
-\author{%
- The \LaTeX{} Project\thanks
- {%
- E-mail:
- \href{mailto:latex-team@latex-project.org}%
- {latex-team@latex-project.org}%
- }%
-}
-\date{Released 2024-03-14}
-
-\newcommand{\TF}{\textit{(TF)}}
-
-\begin{document}
-
-\maketitle
-
-This file describes aspects of \TeX{} programming that are relevant in a
-\pkg{expl3} context.
-
-\section{Reading a file}
-
-Tokenization.
-
-Treatment of spaces, such as the trap that \verb|\~~a| is equivalent to
-\verb|\~a| in \pkg{expl3} syntax, or that \verb|~| fails to give a space at the
-beginning of a line.
-
-\section{Structure of tokens}
-
-We refer to the documentation of \texttt{l3token} for a complete
-description of all \TeX{} tokens. We distinguish the meaning of the
-token, which controls the expansion of the token and its effect on
-\TeX{}'s state, and its shape, which is used when comparing token lists
-such as for delimited arguments. At any given time two tokens of the
-same shape automatically have the same meaning, but the converse does
-not hold, and the meaning associated with a given shape change when
-doing assignments.
-
-Apart from a few exceptions, a token has one of the following shapes.
-\begin{itemize}
- \item A control sequence, characterized by the sequence of characters
- that constitute its name: for instance, \cs{use:n} is a five-letter
- control sequence.
- \item An active character token, characterized by its character code
- (between $0$ and $1114111$ for \LuaTeX{} and \XeTeX{} and less for
- other engines) and category code~$13$.
- \item A character token such as |A| or |#|, characterized by its
- character code and category code (one of $1$, $2$, $3$, $4$, $6$,
- $7$, $8$, $10$, $11$ or~$12$ whose meaning is described below).
-\end{itemize}
-
-The meaning of a (non-active) character token is fixed by its category
-code (and character code) and cannot be changed. We call these tokens
-\emph{explicit} character tokens. Category codes that a character token
-can have are listed below by giving a sample output of the \TeX{}
-primitive \tn{meaning}, together with their \pkg{expl3} names and most
-common example:
-\begin{itemize}
- \item[1] begin-group character (|group_begin|, often |{|),
- \item[2] end-group character (|group_end|, often |}|),
- \item[3] math shift character (|math_toggle|, often |$|), % $
- \item[4] alignment tab character (|alignment|, often |&|),
- \item[6] macro parameter character (|parameter|, often |#|),
- \item[7] superscript character (|math_superscript|, often |^|),
- \item[8] subscript character (|math_subscript|, often |_|),
- \item[10] blank space (|space|, often character code~$32$),
- \item[11] the letter (|letter|, such as |A|),
- \item[12] the character (|other|, such as |0|).
-\end{itemize}
-Category code~$13$ (|active|) is discussed below. Input characters can
-also have several other category codes which do not lead to character
-tokens for later processing: $0$~(|escape|), $5$~(|end_line|),
-$9$~(|ignore|), $14$~(|comment|), and $15$~(|invalid|).
-
-The meaning of a control sequence or active character can be identical
-to that of any character token listed above (with any character code),
-and we call such tokens \emph{implicit} character tokens. The meaning
-is otherwise in the following list:
-\begin{itemize}
- \item a macro, used in \pkg{expl3} for most functions and some variables
- (|tl|, |fp|, |seq|, \ldots{}),
- \item a primitive such as \tn{def} or \tn{topmark}, used in \pkg{expl3}
- for some functions,
- \item a register such as \tn{count}|123|, used in \pkg{expl3} for the
- implementation of some variables (|int|, |dim|, \ldots{}),
- \item a constant integer such as \tn{char}|"56| or
- \tn{mathchar}|"121|, used when defining a constant using
- \cs{int_const:Nn},
- \item a font selection command,
- \item undefined.
-\end{itemize}
-Macros can be \tn{protected} or not, \tn{long} or not (the opposite of
-what \pkg{expl3} calls |nopar|), and \tn{outer} or not (unused in \pkg{expl3}).
-Their \tn{meaning} takes the form
-\begin{quote}
- \meta{prefix} |macro:|\meta{argument}|->|\meta{replacement}
-\end{quote}
-where \meta{prefix} is among \tn{protected}\tn{long}\tn{outer},
-\meta{argument} describes parameters that the macro expects, such as
-|#1#2#3|, and \meta{replacement} describes how the parameters are
-manipulated, such as~|\int_eval:n{#2+#1*#3}|. This information can be
-accessed by \cs{cs_prefix_spec:N}, \cs{cs_parameter_spec:N},
-\cs{cs_replacement_spec:N}.
-
-When a macro takes an undelimited argument, explicit space characters
-(with character code $32$ and category code $10$) are ignored. If the
-following token is an explicit character token with category code $1$
-(begin-group) and an arbitrary character code, then \TeX{} scans ahead
-to obtain an equal number of explicit character tokens with category
-code $1$ (begin-group) and $2$ (end-group), and the resulting list of
-tokens (with outer braces removed) becomes the argument. Otherwise, a
-single token is taken as the argument for the macro: we call such single
-tokens \enquote{N-type}, as they are suitable to be used as an argument
-for a function with the signature~\texttt{:N}.
-
-When a macro takes a delimited argument \TeX{} scans ahead until finding
-the delimiter (outside any pairs of begin-group/end-group explicit
-characters), and the resulting list of tokens (with outer braces
-removed) becomes the argument. Note that explicit space characters at
-the start of the argument are \emph{not} ignored in this case (and they
-prevent brace-stripping).
-
-\section{Handling of hash tokens}
-
-\TeX{} uses the hash (octothorpe) character |#| to denote parameters for
-macros: these must be numbered sequentially. To allow handling of nested
-macros, \TeX{} requires that for each nesting level, hash tokens are doubled.
-For example
-\begin{verbatim}
-\cs_new:Npn \mypkg_outer:N #1
- {
- \cs_new:Npn \mypkg_inner:N ##1
- {
- #1
- ##1
- }
- }
-\end{verbatim}
-would define both |\mypkg_outer:N| and |\mypkg_inner:N| as taking
-exactly one argument. If we then do
-\begin{verbatim}
-\mypkg_outer:N \foo
-\cs_show:N \mypkg_inner:N
-\end{verbatim}
-\TeX{} will report
-\begin{verbatim}
-> \mypkg_inner:N=\long macro:#1->\foo #1.
-\end{verbatim}
-i.e.~the hash is not doubled, but is now the parameter of this macro.
-
-Exactly the same concept applies to anywhere that inline code is nested in
-\pkg{expl3}, for example inline mapping code, key definitions, etc.
-
-\end{document}
diff --git a/macros/latex/contrib/l3kernel/l3text-case.dtx b/macros/latex/contrib/l3kernel/l3text-case.dtx
deleted file mode 100644
index 0547db28b1..0000000000
--- a/macros/latex/contrib/l3kernel/l3text-case.dtx
+++ /dev/null
@@ -1,2336 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3text-case.dtx
-%
-% Copyright (C) 2020-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3text-case} module\\ Text processing (case changing)^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3text-case} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=text>
-% \end{macrocode}
-%
-% \subsection{Case changing}
-%
-% \begin{variable}{\l_text_titlecase_check_letter_bool}
-% Needed to determine the route used in titlecasing.
-% \begin{macrocode}
-\bool_new:N \l_text_titlecase_check_letter_bool
-\bool_set_true:N \l_text_titlecase_check_letter_bool
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[EXP]
-% {
-% \text_lowercase:n,
-% \text_uppercase:n,
-% \text_titlecase_all:n,
-% \text_titlecase_first:n
-% }
-% \begin{macro}[EXP]
-% {
-% \text_lowercase:nn,
-% \text_uppercase:nn,
-% \text_titlecase_all:nn,
-% \text_titlecase_first:nn
-% }
-% \begin{macro}[EXP]{\@@_change_case:nnn}
-% The user level functions here are all wrappers around the internal
-% functions for case changing.
-% \begin{macrocode}
-\cs_new:Npn \text_lowercase:n #1
- { \@@_change_case:nnn { lower } { } {#1} }
-\cs_new:Npn \text_uppercase:n #1
- { \@@_change_case:nnn { upper } { } {#1} }
-\cs_new:Npn \text_titlecase_all:n #1
- { \@@_change_case:nnn { title } { } {#1} }
-\cs_new:Npn \text_titlecase_first:n #1
- { \@@_change_case:nnnn { title } { break } { } {#1} }
-\cs_new:Npn \text_lowercase:nn #1#2
- { \@@_change_case:nnn { lower } {#1} {#2} }
-\cs_new:Npn \text_uppercase:nn #1#2
- { \@@_change_case:nnn { upper } {#1} {#2} }
-\cs_new:Npn \text_titlecase_all:nn #1#2
- { \@@_change_case:nnn { title } {#1} {#2} }
-\cs_new:Npn \text_titlecase_first:nn #1#2
- { \@@_change_case:nnnn { title } { break } {#1} {#2} }
-\cs_new:Npn \@@_change_case:nnn #1#2#3
- { \@@_change_case:nnnn {#1} {#1} {#2} {#3} }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {
-% \@@_change_case:nnnn ,
-% \@@_change_case_auxi:nnnn ,
-% \@@_change_case_auxii:nnnn
-% }
-% \begin{macro}[EXP]{\@@_change_case_BCP:nnnn}
-% \begin{macro}[EXP]{\@@_change_case_BCP:nnnw}
-% \begin{macro}[EXP]{\@@_change_case_BCP:nnnnnw}
-% \begin{macro}[EXP]
-% {
-% \@@_change_case_store:n, \@@_change_case_store:o,
-% \@@_change_case_store:V, \@@_change_case_store:v,
-% \@@_change_case_store:e
-% }
-% \begin{macro}[EXP]{\@@_change_case_store:nw}
-% \begin{macro}[EXP]{\@@_change_case_result:n}
-% \begin{macro}[EXP]{\@@_change_case_end:w}
-% \begin{macro}[EXP]{\@@_change_case_loop:nnnw}
-% \begin{macro}[EXP]{\@@_change_case_break:w, \@@_change_case_break_aux:w}
-% \begin{macro}[EXP]
-% {
-% \@@_change_case_group_lower:nnnn ,
-% \@@_change_case_group_upper:nnnn ,
-% \@@_change_case_group_title:nnnn
-% }
-% \begin{macro}[EXP]
-% {\@@_change_case_space:nnnw, \@@_change_case_space_break:nnnw}
-% \begin{macro}[EXP]
-% {\@@_change_case_N_type:nnnN, \@@_change_case_N_type_aux:nnnN}
-% \begin{macro}[EXP]{\@@_change_case_N_type:nnnnN}
-% \begin{macro}[EXP]{\@@_change_case_math_search:nnnNNN}
-% \begin{macro}[EXP]{\@@_change_case_math_loop:nnnNw}
-% \begin{macro}[EXP]{\@@_change_case_math_N_type:nnnNN}
-% \begin{macro}[EXP]{\@@_change_case_math_group:nnnNn}
-% \begin{macro}[EXP]{\@@_change_case_math_space:nnnNw}
-% \begin{macro}[EXP]{\@@_change_case_cs_check:nnnN}
-% \begin{macro}[EXP]{\@@_change_case_exclude:nnnN}
-% \begin{macro}[EXP]{\@@_change_case_exclude:nnnnN}
-% \begin{macro}[EXP]{\@@_change_case_exclude:nnnNN}
-% \begin{macro}[EXP]{\@@_change_case_exclude:nnnNw}
-% \begin{macro}[EXP]{\@@_change_case_exclude:nnnNnn}
-% \begin{macro}[EXP]{\@@_change_case_replace:nnnN}
-% \begin{macro}[EXP]{\@@_change_case_replace:nnnn, \@@_change_case_replace:vnnn}
-% \begin{macro}[EXP]{\@@_change_case_switch:nnnN}
-% \begin{macro}[EXP]
-% {
-% \@@_change_case_switch_lower:nnnNnnnn ,
-% \@@_change_case_switch_upper:nnnNnnnn ,
-% \@@_change_case_switch_title:nnnNnnnn
-% }
-% \begin{macro}[EXP]{\@@_change_case_skip:nnw}
-% \begin{macro}[EXP]{\@@_change_case_skip_N_type:nnN}
-% \begin{macro}[EXP]{\@@_change_case_skip_group:nnn}
-% \begin{macro}[EXP]{\@@_change_case_skip_space:nnw}
-% \begin{macro}[EXP]
-% {
-% \@@_change_case_letterlike_lower:nnnN ,
-% \@@_change_case_letterlike_upper:nnnN ,
-% \@@_change_case_letterlike_title:nnnN
-% }
-% \begin{macro}[EXP]{\@@_change_case_letterlike:nnnnnN}
-% \begin{macro}[EXP]
-% {
-% \@@_change_case_custom_lower:nnnn ,
-% \@@_change_case_custom_title:nnnn ,
-% \@@_change_case_custom_upper:nnnn
-% }
-% \begin{macro}[EXP]{\@@_change_case_custom:nnnnn}
-% \begin{macro}[EXP]
-% {
-% \@@_change_case_codepoint_lower:nnnn ,
-% \@@_change_case_codepoint_upper:nnnn ,
-% \@@_change_case_codepoint_title:nnnn
-% }
-% \begin{macro}[EXP]{\@@_change_case_lower_sigma:nnnnn}
-% \begin{macro}[EXP]{\@@_change_case_lower_sigma:nnnnw}
-% \begin{macro}[EXP]{\@@_change_case_lower_sigma:nnnnN}
-% \begin{macro}[EXP]
-% {
-% \@@_change_case_codepoint_title_auxi:nnnn ,
-% \@@_change_case_codepoint_title_auxii:nnnn
-% }
-% \begin{macro}[EXP]{\@@_change_case_codepoint_title:nnn}
-% \begin{macro}[EXP]{\@@_change_case_codepoint:nnnnn}
-% \begin{macro}[EXP]{\@@_change_case_codepoint:nn}
-% \begin{macro}[EXP]
-% {
-% \@@_change_case_codepoint:nnn ,
-% \@@_change_case_codepoint:fnn ,
-% \@@_change_case_codepoint_aux:nnn
-% }
-% \begin{macro}[EXP]{\@@_change_case_codepoint_aux:nnn}
-% \begin{macro}[EXP]{\@@_change_case_codepoint_aux:nn}
-% \begin{macro}[EXP]{\@@_change_case_catcode:nn}
-% \begin{macro}[EXP]
-% {
-% \@@_change_case_next_lower:nnn ,
-% \@@_change_case_next_upper:nnn ,
-% \@@_change_case_next_title:nnn ,
-% \@@_change_case_next_end:nnn
-% }
-% As for the expansion code, the business end of case changing is the
-% handling of \texttt{N}-type tokens. First, we expand the input fully
-% (so the loops here don't need to worry about awkward look-aheads and the
-% like). Then we split into the different paths.
-%
-% The code here needs to be \texttt{f}-type expandable to deal with the
-% situation where case changing is applied in running text. There, we
-% might have case changing as a document command and the text containing
-% other non-expandable document commands.
-% \begin{verbatim}
-% \cs_set_eq:NN \MakeLowercase \text_lowercase
-% ...
-% \MakeLowercase{\enquote*{A} text}
-% \end{verbatim}
-% If we use an \texttt{e}-type expansion and wrap each token in
-% \cs{exp_not:n}, that would explode: the document command grabs
-% \cs{exp_not:n} as an argument, and things go badly wrong. So we have to
-% wrap the entire result in exactly one \cs{exp_not:n}, or rather in the
-% kernel version.
-% \begin{macrocode}
-\cs_new:Npn \@@_change_case:nnnn #1#2#3#4
- {
- \__kernel_exp_not:w \exp_after:wN
- {
- \exp:w
- \exp_args:Ne \@@_change_case_auxi:nnnn
- { \text_expand:n {#4} }
- {#1} {#2} {#3}
- }
- }
-\cs_new:Npn \@@_change_case_auxi:nnnn #1#2#3#4
- {
- \exp_args:No \@@_change_case_BCP:nnnn
- { \tl_to_str:n {#4} } {#1} {#2} {#3}
- }
-\cs_new:Npe \@@_change_case_BCP:nnnn #1#2#3#4
- {
- \exp_not:N \@@_change_case_BCP:nnnw
- {#2} {#3} {#4} #1 \tl_to_str:n { -x- -x- } \exp_not:N \q_@@_stop
- }
-\use:e
- {
- \cs_new:Npn \exp_not:N \@@_change_case_BCP:nnnw
- #1#2#3#4 \tl_to_str:n { -x- } #5 \tl_to_str:n { -x- } #6
- \exp_not:N \q_@@_stop
- }
- { \@@_change_case_BCP:nnnnnw {#1} {#2} {#3} {#5} {#4} #4 - \q_@@_stop }
-\cs_new:Npn \@@_change_case_BCP:nnnnnw #1#2#3#4#5#6 - #7 \q_@@_stop
- {
- \bool_lazy_or:nnTF
- { \cs_if_exist_p:c { @@_change_case_ #2 _ #6 -x- #4 :nnnnn } }
- { \tl_if_exist_p:c { l_@@_ #2 case_special_ #6 -x- #4 _tl } }
- { \@@_change_case_auxii:nnnn {#1} {#2} {#3} { #6 -x- #4 } }
- {
- \cs_if_exist:cTF { @@_change_case_ #2 _ #6 :nnnnn }
- { \@@_change_case_auxii:nnnn {#1} {#2} {#3} {#6} }
- { \@@_change_case_auxii:nnnn {#1} {#2} {#3} {#5} }
- }
- }
-\cs_new:Npn \@@_change_case_auxii:nnnn #1#2#3#4
- {
- \group_align_safe_begin:
- \cs_if_exist_use:c { @@_change_case_boundary_ #2 _ #4 :Nnnnw }
- \@@_change_case_loop:nnnw {#2} {#3} {#4} #1
- \q_@@_recursion_tail \q_@@_recursion_stop
- \@@_change_case_result:n { }
- }
-% \end{macrocode}
-% As for expansion, collect up the tokens for future use.
-% \begin{macrocode}
-\cs_new:Npn \@@_change_case_store:n #1
- { \@@_change_case_store:nw {#1} }
-\cs_generate_variant:Nn \@@_change_case_store:n { o , e , V , v }
-\cs_new:Npn \@@_change_case_store:nw #1#2 \@@_change_case_result:n #3
- { #2 \@@_change_case_result:n { #3 #1 } }
-\cs_new:Npn \@@_change_case_end:w #1 \@@_change_case_result:n #2
- {
- \group_align_safe_end:
- \exp_end:
- #2
- }
-% \end{macrocode}
-% The main loop is the standard \texttt{tl action} type.
-% \begin{macrocode}
-\cs_new:Npn \@@_change_case_loop:nnnw #1#2#3#4 \q_@@_recursion_stop
- {
- \tl_if_head_is_N_type:nTF {#4}
- { \@@_change_case_N_type:nnnN }
- {
- \tl_if_head_is_group:nTF {#4}
- { \use:c { @@_change_case_group_ #1 :nnnn } }
- { \@@_change_case_space:nnnw }
- }
- {#1} {#2} {#3} #4 \q_@@_recursion_stop
- }
-\cs_new:Npn \@@_change_case_break:w
- { \@@_change_case_break_aux:w \prg_do_nothing: }
-\cs_new:Npn \@@_change_case_break_aux:w
- #1 \q_@@_recursion_tail \q_@@_recursion_stop
- {
- \@@_change_case_store:o {#1}
- \@@_change_case_end:w
- }
-% \end{macrocode}
-% For a group, we \emph{could} worry about whether this contains a character
-% or not. However, that would make life very complex for little gain: exactly
-% what a first character is is rather weakly-defined anyway. So if there is
-% a group, we simply assume that a character has been seen, and for title
-% case we switch to the \enquote{rest of the tokens} situation. To avoid
-% having too much testing, we use a two-step process here to allow the
-% titlecase functions to be separate.
-% \begin{macrocode}
-\cs_new:Npn \@@_change_case_group_lower:nnnn #1#2#3#4
- {
- \@@_change_case_store:o
- {
- \exp_after:wN
- {
- \exp:w
- \@@_change_case_auxii:nnnn {#4} {#1} {#2} {#3}
- }
- }
- \@@_change_case_loop:nnnw {#1} {#2} {#3}
- }
-\cs_new_eq:NN \@@_change_case_group_upper:nnnn
- \@@_change_case_group_lower:nnnn
-\cs_new:Npn \@@_change_case_group_title:nnnn #1#2#3#4
- {
- \@@_change_case_store:o
- {
- \exp_after:wN
- {
- \exp:w
- \@@_change_case_auxii:nnnn {#4} {#1} {#2} {#3}
- }
- }
- \@@_change_case_skip:nnw {#2} {#3}
- }
-\use:e
- {
- \cs_new:Npn \exp_not:N \@@_change_case_space:nnnw #1#2#3 \c_space_tl
- }
- {
- \@@_change_case_store:n { ~ }
- \cs_if_exist_use:cF { @@_change_case_space_ #2 :nnn }
- {
- \cs_if_exist_use:c { @@_change_case_boundary_ #1 _ #3 :Nnnnw }
- \@@_change_case_loop:nnnw
- }
- {#2} {#2} {#3}
- }
-\cs_new:Npn \@@_change_case_space_break:nnn #1#2#3
- { \@@_change_case_break:w }
-% \end{macrocode}
-% The first step of handling \texttt{N}-type tokens is to filter out the
-% end-of-loop. That has to be done separately from the first real step
-% as otherwise we pick up the wrong delimiter. The loop here is the same
-% as the \texttt{expand} one, just passing the additional data long. If no
-% close-math token is found then the final clean-up is forced
-% (i.e.~there is no assumption of \enquote{well-behaved} input in terms of
-% math mode).
-% \begin{macrocode}
-\cs_new:Npn \@@_change_case_N_type:nnnN #1#2#3#4
- {
- \@@_if_q_recursion_tail_stop_do:Nn #4
- { \@@_change_case_end:w }
- \@@_change_case_N_type_aux:nnnN {#1} {#2} {#3} #4
- }
-\cs_new:Npn \@@_change_case_N_type_aux:nnnN #1#2#3#4
- {
- \exp_args:NV \@@_change_case_N_type:nnnnN
- \l_text_math_delims_tl {#1} {#2} {#3} #4
- }
-\cs_new:Npn \@@_change_case_N_type:nnnnN #1#2#3#4#5
- {
- \@@_change_case_math_search:nnnNNN {#2} {#3} {#4} #5 #1
- \q_@@_recursion_tail \q_@@_recursion_tail
- \q_@@_recursion_stop
- }
-\cs_new:Npn \@@_change_case_math_search:nnnNNN #1#2#3#4#5#6
- {
- \@@_if_q_recursion_tail_stop_do:Nn #5
- { \@@_change_case_cs_check:nnnN {#1} {#2} {#3} #4 }
- \token_if_eq_meaning:NNTF #4 #5
- {
- \@@_use_i_delimit_by_q_recursion_stop:nw
- {
- \@@_change_case_store:n {#4}
- \@@_change_case_math_loop:nnnNw {#1} {#2} {#3} #6
- }
- }
- { \@@_change_case_math_search:nnnNNN {#1} {#2} {#3} #4 }
- }
-\cs_new:Npn \@@_change_case_math_loop:nnnNw #1#2#3#4#5 \q_@@_recursion_stop
- {
- \tl_if_head_is_N_type:nTF {#5}
- { \@@_change_case_math_N_type:nnnNN }
- {
- \tl_if_head_is_group:nTF {#5}
- { \@@_change_case_math_group:nnnNn }
- { \@@_change_case_math_space:nnnNw }
- }
- {#1} {#2} {#3} #4 #5 \q_@@_recursion_stop
- }
-\cs_new:Npn \@@_change_case_math_N_type:nnnNN #1#2#3#4#5
- {
- \@@_if_q_recursion_tail_stop_do:Nn #5
- { \@@_change_case_end:w }
- \@@_change_case_store:n {#5}
- \token_if_eq_meaning:NNTF #5 #4
- { \@@_change_case_loop:nnnw {#1} {#2} {#3} }
- { \@@_change_case_math_loop:nnnNw {#1} {#2} {#3} #4 }
- }
-\cs_new:Npn \@@_change_case_math_group:nnnNn #1#2#3#4#5
- {
- \@@_change_case_store:n { {#5} }
- \@@_change_case_math_loop:nnnNw {#1} {#2} {#3} #4
- }
-\use:e
- {
- \cs_new:Npn \exp_not:N \@@_change_case_math_space:nnnNw #1#2#3#4
- \c_space_tl
- }
- {
- \@@_change_case_store:n { ~ }
- \@@_change_case_math_loop:nnnNw {#1} {#2} {#3} #4
- }
-% \end{macrocode}
-% Once potential math-mode cases are filtered out the next stage is to
-% test if the token grabbed is a control sequence: the two routes the code
-% may take are then very different.
-% \begin{macrocode}
-\cs_new:Npn \@@_change_case_cs_check:nnnN #1#2#3#4
- {
- \token_if_cs:NTF #4
- { \@@_change_case_exclude:nnnN {#1} {#2} {#3} }
- {
- \@@_codepoint_process:nN
- { \use:c { @@_change_case_custom_ #1 :nnnn } {#1} {#2} {#3} }
- }
- #4
- }
-% \end{macrocode}
-% To deal with a control sequence there is first a need to test if it is
-% on the list which indicate that case changing should be skipped. That's
-% done using a loop as for the other special cases. If a hit is found then
-% the argument is grabbed and passed through as-is.
-% \begin{macrocode}
-\cs_new:Npn \@@_change_case_exclude:nnnN #1#2#3#4
- {
- \exp_args:Ne \@@_change_case_exclude:nnnnN
- {
- \exp_not:V \l_text_math_arg_tl
- \exp_not:V \l_text_case_exclude_arg_tl
- }
- {#1} {#2} {#3} #4
- }
-\cs_new:Npn \@@_change_case_exclude:nnnnN #1#2#3#4#5
- {
- \@@_change_case_exclude:nnnNN {#2} {#3} {#4} #5 #1
- \q_@@_recursion_tail \q_@@_recursion_stop
- }
-\cs_new:Npn \@@_change_case_exclude:nnnNN #1#2#3#4#5
- {
- \@@_if_q_recursion_tail_stop_do:Nn #5
- { \@@_change_case_replace:nnnN {#1} {#2} {#3} #4 }
- \str_if_eq:nnTF {#4} {#5}
- {
- \@@_use_i_delimit_by_q_recursion_stop:nw
- { \@@_change_case_exclude:nnnNw {#1} {#2} {#3} #4 }
- }
- { \@@_change_case_exclude:nnnNN {#1} {#2} {#3} #4 }
- }
-\cs_new:Npn \@@_change_case_exclude:nnnNw #1#2#3#4#5#
- { \@@_change_case_exclude:nnnNnn {#1} {#2} {#3} {#4} {#5} }
-\cs_new:Npn \@@_change_case_exclude:nnnNnn #1#2#3#4#5#6
- {
- \tl_if_blank:nTF {#5}
- { \@@_change_case_store:n { #4 {#6} } }
- {
- \@@_change_case_store:o
- {
- \exp_after:wN #4
- \exp:w \@@_change_case_auxii:nnnn {#5} {#1} {#2} {#3}
- {#6}
- }
- }
- \@@_change_case_loop:nnnw {#1} {#2} {#3}
- }
-% \end{macrocode}
-% Deal with any specialist replacement for case changing.
-% \begin{macrocode}
-\cs_new:Npn \@@_change_case_replace:nnnN #1#2#3#4
- {
- \cs_if_exist:cTF { l_@@_case_ \token_to_str:N #4 _tl }
- {
- \@@_change_case_replace:vnnn
- { l_@@_case_ \token_to_str:N #4 _tl } {#1} {#2} {#3}
- }
- { \@@_change_case_switch:nnnN {#1} {#2} {#3} #4 }
- }
-\cs_new:Npn \@@_change_case_replace:nnnn #1#2#3#4
- { \@@_change_case_loop:nnnw {#2} {#3} {#4} #1 }
-\cs_generate_variant:Nn \@@_change_case_replace:nnnn { v }
-% \end{macrocode}
-% Allow for manually-controlled case switching.
-% \begin{macrocode}
-\cs_new:Npn \@@_change_case_switch:nnnN #1#2#3#4
- {
- \cs_if_eq:NNTF #4 \text_case_switch:nnnn
- { \use:c { @@_change_case_switch_ #1 :nnnNnnnn } }
- { \use:c { @@_change_case_letterlike_ #1 :nnnN } }
- {#1} {#2} {#3} #4
- }
-\cs_new:Npn \@@_change_case_switch_lower:nnnNnnnn #1#2#3#4#5#6#7#8
- {
- \@@_change_case_store:n {#7}
- \@@_change_case_loop:nnnw {#1} {#2} {#3}
- }
-\cs_new:Npn \@@_change_case_switch_upper:nnnNnnnn #1#2#3#4#5#6#7#8
- {
- \@@_change_case_store:n {#6}
- \@@_change_case_loop:nnnw {#1} {#2} {#3}
- }
-\cs_new:Npn \@@_change_case_switch_title:nnnNnnnn #1#2#3#4#5#6#7#8
- {
- \@@_change_case_store:n {#8}
- \@@_change_case_skip:nnw {#2} {#3}
- }
-% \end{macrocode}
-% Skip over material quickly after titlecase-first-only initials
-% \begin{macrocode}
-\cs_new:Npn \@@_change_case_skip:nnw #1#2#3 \q_@@_recursion_stop
- {
- \tl_if_head_is_N_type:nTF {#3}
- { \@@_change_case_skip_N_type:nnN }
- {
- \tl_if_head_is_group:nTF {#3}
- { \@@_change_case_skip_group:nnn }
- { \@@_change_case_skip_space:nnw }
- }
- {#1} {#2} #3 \q_@@_recursion_stop
- }
-\cs_new:Npn \@@_change_case_skip_N_type:nnN #1#2#3
- {
- \@@_if_q_recursion_tail_stop_do:Nn #3
- { \@@_change_case_end:w }
- \@@_change_case_store:n {#3}
- \@@_change_case_skip:nnw {#1} {#2}
- }
-\cs_new:Npn \@@_change_case_skip_group:nnn #1#2#3
- {
- \@@_change_case_store:n { {#3} }
- \@@_change_case_skip:nnw {#1} {#2}
- }
-\cs_new:Npn \@@_change_case_skip_space:nnw #1#2
- { \@@_change_case_space:nnnw {#1} {#1} {#2} }
-% \end{macrocode}
-% Letter-like commands may still be present: they are set up using a simple
-% lookup approach, so can easily be handled with no loop. If there is no
-% hit, we are at the end of the process: we loop around. Letter-like chars
-% are all available only in upper- and lowercase, so titlecasing maps to the
-% uppercase version.
-% \begin{macrocode}
-\cs_new:Npn \@@_change_case_letterlike_lower:nnnN #1#2#3#4
- { \@@_change_case_letterlike:nnnnnN {#1} {#1} {#1} {#2} {#3} #4 }
-\cs_new_eq:NN \@@_change_case_letterlike_upper:nnnN
- \@@_change_case_letterlike_lower:nnnN
-\cs_new:Npn \@@_change_case_letterlike_title:nnnN #1#2#3#4
- { \@@_change_case_letterlike:nnnnnN { upper } { end } {#1} {#2} {#3} #4 }
-\cs_new:Npn \@@_change_case_letterlike:nnnnnN #1#2#3#4#5#6
- {
- \cs_if_exist:cTF { c_@@_ #1 case_ \token_to_str:N #6 _tl }
- {
- \@@_change_case_store:v
- { c_@@_ #1 case_ \token_to_str:N #6 _tl }
- \use:c { @@_change_case_next_ #2 :nnn } {#2} {#4} {#5}
- }
- {
- \@@_change_case_store:n {#6}
- \cs_if_exist:cTF
- {
- c_@@_
- \str_if_eq:nnTF {#1} { lower } { upper } { lower }
- case_ \token_to_str:N #6 _tl
- }
- { \use:c { @@_change_case_next_ #2 :nnn } {#2} {#4} {#5} }
- { \@@_change_case_loop:nnnw {#3} {#4} {#5} }
- }
- }
-% \end{macrocode}
-% Check for a customised codepoint result.
-% \begin{macrocode}
-\cs_new:Npn \@@_change_case_custom_lower:nnnn #1#2#3#4
- {
- \@@_change_case_custom:nnnnnn {#1} {#1} {#2} {#3} {#4}
- { \use:c { @@_change_case_codepoint_ #1 :nnnn } {#1} {#2} {#3} {#4} }
- }
-\cs_new_eq:NN \@@_change_case_custom_upper:nnnn
- \@@_change_case_custom_lower:nnnn
-\cs_new:Npn \@@_change_case_custom_title:nnnn #1#2#3#4
- {
- \@@_change_case_custom:nnnnnn { title } {#1} {#2} {#3} {#4}
- {
- \@@_change_case_custom:nnnnnn { upper } {#1} {#2} {#3} {#4}
- { \use:c { @@_change_case_codepoint_ #1 :nnnn } {#1} {#2} {#3} {#4} }
- }
- }
-\cs_new:Npn \@@_change_case_custom:nnnnnn #1#2#3#4#5#6
- {
- \tl_if_exist:cTF { l_@@_ #1 case _ \tl_to_str:n {#5} _ #4 _tl }
- {
- \@@_change_case_replace:vnnn
- { l_@@_ #1 case _ \tl_to_str:n {#5} _ #4 _tl } {#2} {#3} {#4}
- }
- {
- \tl_if_exist:cTF { l_@@_ #1 case _ \tl_to_str:n {#5} _tl }
- {
- \@@_change_case_replace:vnnn
- { l_@@_ #1 case _ \tl_to_str:n {#5} _tl } {#2} {#3} {#4}
- }
- {#6}
- }
- }
-% \end{macrocode}
-% For upper- and lowercase changes, once we get to this stage there are only
-% a couple of questions remaining: is there a language-specific mapping and
-% is there the special case of a terminal sigma. If not, then we pass to
-% a simple codepoint mapping.
-% \begin{macrocode}
-\cs_new:Npn \@@_change_case_codepoint_lower:nnnn #1#2#3#4
- {
- \cs_if_exist_use:cF { @@_change_case_lower_ #3 :nnnnn }
- { \@@_change_case_lower_sigma:nnnnn }
- {#1} {#1} {#2} {#3} {#4}
- }
-\cs_new:Npn \@@_change_case_codepoint_upper:nnnn #1#2#3#4
- {
- \cs_if_exist_use:cF { @@_change_case_upper_ #3 :nnnnn }
- { \@@_change_case_codepoint:nnnnn }
- {#1} {#1} {#2} {#3} {#4}
- }
-% \end{macrocode}
-% If the current character is an uppercase sigma, the a check is made on the
-% next item in the input. If it is \texttt{N}-type and not a control sequence
-% then there is a look-ahead phase: the logic here is simply based on letters
-% or actives (to cover $8$-bit engines).
-% \begin{macrocode}
-\cs_new:Npn \@@_change_case_lower_sigma:nnnnn #1#2#3#4#5
- {
- \@@_codepoint_compare:nNnTF {#5} = { "03A3 }
- { \@@_change_case_lower_sigma:nnnnw {#2} }
- { \@@_change_case_codepoint:nnnnn {#1} {#2} }
- {#3} {#4} {#5}
- }
-\cs_new:Npn \@@_change_case_lower_sigma:nnnnw #1#2#3#4#5 \q_@@_recursion_stop
- {
- \tl_if_head_is_N_type:nTF {#5}
- { \@@_change_case_lower_sigma:nnnnN {#4} }
- {
- \@@_change_case_store:e
- { \codepoint_generate:nn { "03C2 } { \@@_char_catcode:N #4 } }
- \@@_change_case_loop:nnnw
- }
- {#1} {#2} {#3} #5 \q_@@_recursion_stop
- }
-\cs_new:Npn \@@_change_case_lower_sigma:nnnnN #1#2#3#4#5
- {
- \@@_change_case_store:e
- {
- \bool_lazy_or:nnTF
- { \token_if_letter_p:N #5 }
- {
- \bool_lazy_and_p:nn
- { \token_if_active_p:N #5 }
- { \int_compare_p:nNn {`#5} > { "80 } }
- }
- { \codepoint_generate:nn { "03C3 } { \@@_char_catcode:N #1 } }
- { \codepoint_generate:nn { "03C2 } { \@@_char_catcode:N #1 } }
- }
- \@@_change_case_loop:nnnw {#2} {#3} {#4} #5
- }
-% \end{macrocode}
-% For titlecasing, we need to obtain the general category of the current
-% codepoint.
-% \begin{macrocode}
-\cs_new:Npn \@@_change_case_codepoint_title:nnnn #1#2#3#4
- {
- \bool_if:NTF \l_text_titlecase_check_letter_bool
- {
- \exp_args:Ne \@@_change_case_codepoint_title_auxi:nnnn
- {
- \codepoint_to_category:n
- { \@@_codepoint_from_chars:Nw #4 }
- }
- }
- { \@@_change_case_codepoint_title:nnn }
- {#2} {#3} {#4}
- }
-\cs_new:Npn \@@_change_case_codepoint_title_auxi:nnnn #1#2#3#4
- {
- \tl_if_head_eq_charcode:nNTF {#1} { L }
- { \@@_change_case_codepoint_title:nnn }
- { \@@_change_case_codepoint_title_auxii:nnnn { title } }
- {#2} {#3} {#4}
- }
-\cs_new:Npn \@@_change_case_codepoint_title:nnn #1#2#3
- { \@@_change_case_codepoint_title_auxii:nnnn { end } {#1} {#2} {#3} }
-\cs_new:Npn \@@_change_case_codepoint_title_auxii:nnnn #1#2#3#4
- {
- \cs_if_exist_use:cF { @@_change_case_title_ #3 :nnnnn }
- {
- \cs_if_exist_use:cF { @@_change_case_upper_ #3 :nnnnn }
- { \@@_change_case_codepoint:nnnnn }
- }
- { title } {#1} {#2} {#3} {#4}
- }
-\cs_new:Npn \@@_change_case_codepoint:nnnnn #1#2#3#4#5
- {
- \bool_lazy_and:nnTF
- { \tl_if_single_p:n {#5} }
- { \token_if_active_p:N #5 }
- { \@@_change_case_store:n {#5} }
- {
- \@@_change_case_store:e
- { \@@_change_case_codepoint:nn {#1} {#5} }
- }
- \use:c { @@_change_case_next_ #2 :nnn } {#2} {#3} {#4}
- }
-\cs_new:Npn \@@_change_case_codepoint:nn #1#2
- {
- \@@_change_case_codepoint:fnn
- { \int_eval:n { \@@_codepoint_from_chars:Nw #2 } } {#1} {#2}
- }
-\cs_new:Npn \@@_change_case_codepoint:nnn #1#2#3
- {
- \exp_args:Ne \@@_change_case_codepoint_aux:nn
- { \__kernel_codepoint_case:nn { #2 case } {#1} } {#3}
- }
-\cs_generate_variant:Nn \@@_change_case_codepoint:nnn { f }
-% \end{macrocode}
-% Avoid high chars with p\TeX{}.
-% \begin{macrocode}
-\sys_if_engine_ptex:T
- {
- \cs_new_eq:NN \@@_change_case_codepoint_aux:nnn
- \@@_change_case_codepoint:nnn
- \cs_gset:Npn \@@_change_case_codepoint:nnn #1#2#3
- {
- \int_compare:nNnTF {#1} = { -1 }
- { \exp_not:n {#3} }
- { \@@_change_case_codepoint_aux:nnn {#1} {#2} {#3} }
- }
- }
-\cs_new:Npn \@@_change_case_codepoint_aux:nn #1#2
- {
- \use:e { \@@_change_case_codepoint_aux:nnnn #1 {#2} }
- }
-\cs_new:Npn \@@_change_case_codepoint_aux:nnnn #1#2#3#4
- {
- \@@_codepoint_compare:nNnTF {#4} = {#1}
- { \exp_not:n {#4} }
- {
- \codepoint_generate:nn {#1}
- { \@@_change_case_catcode:nn {#4} {#1} }
- \tl_if_blank:nF {#2}
- {
- \codepoint_generate:nn {#2}
- { \char_value_catcode:n {#2} }
- \tl_if_blank:nF {#3}
- {
- \codepoint_generate:nn {#3}
- { \char_value_catcode:n {#3} }
- }
- }
- }
- }
-% \end{macrocode}
-% We need to ensure that only valid catcode-extraction is attempted. That's
-% fine with Unicode engines but needs a bit of work with 8-bit ones. The
-% logic is that if the original codepoint was in the ASCII range, we keep
-% the catcode. Otherwise, if the target is in the ASCII range, we use
-% the standard catcode. If neither are true, we set as 13 on the grounds that
-% this will be what is used anyway!
-% \begin{macrocode}
-\bool_lazy_or:nnTF
- { \sys_if_engine_luatex_p: }
- { \sys_if_engine_xetex_p: }
- {
- \cs_new:Npn \@@_change_case_catcode:nn #1#2
- { \@@_char_catcode:N #1 }
- }
- {
- \cs_new:Npn \@@_change_case_catcode:nn #1#2
- {
- \@@_codepoint_compare:nNnTF {#1} < { "80 }
- { \@@_char_catcode:N #1 }
- {
- \int_compare:nNnTF {#2} < { "80 }
- { \char_value_catcode:n {#2} }
- { 13 }
- }
- }
- }
-\cs_new:Npn \@@_change_case_next_lower:nnn #1#2#3
- { \@@_change_case_loop:nnnw {#1} {#2} {#3} }
-\cs_new_eq:NN \@@_change_case_next_upper:nnn
- \@@_change_case_next_lower:nnn
-\cs_new_eq:NN \@@_change_case_next_title:nnn
- \@@_change_case_next_lower:nnn
-\cs_new:Npn \@@_change_case_next_end:nnn #1#2#3
- { \@@_change_case_skip:nnw {#2} {#3} }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\text_declare_case_equivalent:Nn}
-% Create equivalents to allow replacement.
-% \begin{macrocode}
-\cs_new_protected:Npn \text_declare_case_equivalent:Nn #1#2
- {
- \tl_clear_new:c { l_@@_case_ \token_to_str:N #1 _tl }
- \tl_set:cn { l_@@_case_ \token_to_str:N #1 _tl } {#2}
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \text_declare_lowercase_mapping:nn ,
-% \text_declare_titlecase_mapping:nn ,
-% \text_declare_uppercase_mapping:nn
-% }
-% \begin{macro}
-% {\@@_declare_case_mapping:nnn, \@@_declare_case_mapping_aux:nnn}
-% \begin{macro}
-% {
-% \text_declare_lowercase_mapping:nnn ,
-% \text_declare_titlecase_mapping:nnn ,
-% \text_declare_uppercase_mapping:nnn
-% }
-% \begin{macro}
-% {\@@_declare_case_mapping:nnnn, \@@_declare_case_mapping_aux:nnnn}
-% Codepoint customisation.
-% \begin{macrocode}
-\cs_new_protected:Npn \text_declare_lowercase_mapping:nn #1#2
- { \@@_declare_case_mapping:nnn { lower } {#1} {#2} }
-\cs_new_protected:Npn \text_declare_titlecase_mapping:nn #1#2
- { \@@_declare_case_mapping:nnn { title } {#1} {#2} }
-\cs_new_protected:Npn \text_declare_uppercase_mapping:nn #1#2
- { \@@_declare_case_mapping:nnn { upper } {#1} {#2} }
-\cs_new_protected:Npn \@@_declare_case_mapping:nnn #1#2#3
- {
- \exp_args:Ne \@@_declare_case_mapping_aux:nnn
- { \codepoint_str_generate:n {#2} } {#1} {#3}
- }
-\cs_new_protected:Npn \@@_declare_case_mapping_aux:nnn #1#2#3
- {
- \tl_clear_new:c { l_@@_ #2 case _ #1 _tl }
- \tl_set:cn { l_@@_ #2 case _ #1 _ tl } {#3}
- }
-\cs_new_protected:Npn \text_declare_lowercase_mapping:nnn #1#2#3
- { \@@_declare_case_mapping:nnnn { lower } {#1} {#2} {#3} }
-\cs_new_protected:Npn \text_declare_titlecase_mapping:nnn #1#2#3
- { \@@_declare_case_mapping:nnnn { title } {#1} {#2} {#3} }
-\cs_new_protected:Npn \text_declare_uppercase_mapping:nnn #1#2#3
- { \@@_declare_case_mapping:nnnn { upper } {#1} {#2} {#3} }
-\cs_new_protected:Npn \@@_declare_case_mapping:nnnn #1#2#3#4
- {
- \exp_args:Ne \@@_declare_case_mapping_aux:nnnn
- { \codepoint_str_generate:n {#3} } {#1} {#2} {#4}
- }
-\cs_new_protected:Npn \@@_declare_case_mapping_aux:nnnn #1#2#3#4
- {
- \tl_clear_new:c { l_@@_ #2 case _ #1 _ #3 _tl }
- \tl_set:cn { l_@@_ #2 case _ #1 _ #3 _ tl } {#4}
- \tl_clear_new:c { l_@@_ #2 case_special_ #3 _tl }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\text_case_switch:nnnn}
-% \begin{macro}{\@@_case_switch_marker:}
-% Set up the mechanism for manual case switching.
-% \begin{macrocode}
-\cs_new:Npn \text_case_switch:nnnn #1#2#3#4
- {
- \@@_case_switch_marker:
- #1
- }
-\cs_new:Npn \@@_case_switch_marker: { }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_change_case_generate:n}
-% A utility.
-% \begin{macrocode}
-\cs_new:Npn \@@_change_case_generate:n #1
- { \codepoint_generate:nn {#1} { \char_value_catcode:n {#1} } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {
-% \@@_change_case_upper_de-x-eszett:nnnnn,
-% \@@_change_case_upper_de-alt:nnnnn
-% }
-% A simple alternative version for German.
-% \begin{macrocode}
-\cs_new:cpn { @@_change_case_upper_de-x-eszett:nnnnn } #1#2#3#4#5
- {
- \@@_codepoint_compare:nNnTF {#5} = { "00DF }
- {
- \@@_change_case_store:e
- {
- \codepoint_generate:nn { "1E9E }
- { \@@_change_case_catcode:nn {#5} { "1E9E } }
- }
- \use:c { @@_change_case_next_ #2 :nnn }
- {#2} {#3} {#4}
- }
- { \@@_change_case_codepoint:nnnnn {#1} {#2} {#3} {#4} {#5} }
- }
-\cs_new_eq:cc { @@_change_case_upper_de-alt:nnnnn }
- { @@_change_case_upper_de-x-eszett:nnnnn }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {
-% \@@_change_case_upper_el:nnnnn ,
-% \@@_change_case_upper_el-x-iota:nnnnn ,
-% \@@_change_case_upper_el_aux:nnnnn
-% }
-% \begin{macro}[EXP]{\@@_change_case_upper_el:nnnn}
-% \begin{macro}[EXP]{\@@_change_case_upper_el:nnnnw}
-% \begin{macro}[EXP]
-% {\@@_change_case_upper_el:nnnnN, \@@_change_case_upper_el_aux:nnnnN}
-% \begin{macro}[EXP]{\@@_change_case_upper_el_ypogegrammeni:nnnnnnw}
-% \begin{macro}[EXP]{\@@_change_case_upper_el_ypogegrammeni:nnnnnnN}
-% \begin{macro}[EXP]{\@@_change_case_upper_el_ypogegrammeni:nnnnnnn}
-% \begin{macro}[EXP]{\@@_change_case_upper_el_dialytika:nnnn}
-% \begin{macro}[EXP]{\@@_change_case_upper_el_dialytika:n}
-% \begin{macro}[EXP]{\@@_change_case_upper_el_hiatus:nnnnw}
-% \begin{macro}[EXP]{\@@_change_case_upper_el_hiatus:nnnnN}
-% \begin{macro}[EXP]{\@@_change_case_upper_el_hiatus:nnnnn}
-% \begin{macro}[EXP]
-% {
-% \@@_change_case_upper_el_ypogegrammeni:n ,
-% \@@_change_case_upper_el-x-iota_ypogegrammeni:n
-% }
-% \begin{macro}[EXP]{\@@_change_case_upper_el_stress:nn}
-% \begin{macro}[EXP]{\@@_change_case_upper_el_gobble:nnnw}
-% \begin{macro}[EXP]{\@@_change_case_upper_el_gobble:nnnN}
-% \begin{macro}[EXP]{\@@_change_case_upper_el_gobble:nnnn}
-% \begin{macro}[EXP,noTF]
-% {
-% \@@_change_case_if_greek:n ,
-% \@@_change_case_if_greek_spacing_diacritic:n ,
-% \@@_change_case_if_greek_accent:n ,
-% \@@_change_case_if_greek_breathing:n ,
-% \@@_change_case_if_greek_stress:n ,
-% \@@_change_case_if_takes_dialytika:n ,
-% \@@_change_case_if_takes_ypogegrammeni:n
-% }
-% For Greek uppercasing, we need to know if characters \emph{in the Greek
-% range} have accents. That means doing a \textsc{nfd} conversion first, then
-% starting a search. As described by the Unicode \textsc{cldr}, Greek accents
-% need to be found \emph{after} any U+0308 (diaeresis) and are done in two
-% groups to allow for the canonical ordering. The implementation here follows
-% the data and examples from \textsc{icu}
-% (\url{https://icu.unicode.org/design/case/greek-upper}),
-% although necessarily the implementation is somewhat different. The
-% \emph{ypogegrammeni} is filtered out here as it is not actually in the
-% Greek range, so gets lost if we leave until later. The one Greek codepoint
-% we skip is the numeral sign and question mark: the first has an awkward NFD
-% for \pdfTeX{} so is best left unchanged, and the latter has issues concerning
-% how \texttt{LGR} outputs the input and output (differently!).
-% \begin{macrocode}
-\cs_new:Npn \@@_change_case_upper_el:nnnnn #1#2#3#4#5
- {
- \bool_lazy_and:nnTF
- { \@@_change_case_if_greek_p:n {#5} }
- {
- ! \bool_lazy_or_p:nn
- { \@@_codepoint_compare_p:nNn {#5} = { "0374 } }
- { \@@_codepoint_compare_p:nNn {#5} = { "037E } }
- }
- {
- \@@_change_case_if_greek_spacing_diacritic:nTF {#5}
- {
- \@@_change_case_store:n {#5}
- \@@_change_case_loop:nnnw
- }
- {
- \exp_args:Ne \@@_change_case_upper_el:nnnn
- {
- \codepoint_to_nfd:n
- { \@@_codepoint_from_chars:Nw #5 }
- }
- }
- {#2} {#3} {#4}
- }
- {
- \@@_codepoint_compare:nNnTF {#5} = { "0345 }
- {
- \@@_change_case_store:e
- {
- \codepoint_generate:nn { "0399 }
- { \char_value_catcode:n { "0399 } }
- }
- \@@_change_case_loop:nnnw {#2} {#3} {#4}
- }
- { \@@_change_case_codepoint:nnnnn {#1} {#2} {#3} {#4} {#5} }
- }
- }
-\cs_new_eq:cN { @@_change_case_upper_el-x-iota:nnnnn }
- \@@_change_case_upper_el:nnnnn
-\cs_new:Npn \@@_change_case_upper_el:nnnn #1#2#3#4
- {
- \@@_codepoint_process:nN
- { \@@_change_case_upper_el:nnnnw {#2} {#3} {#4} } #1
- }
-% \end{macrocode}
-% At this stage we have the first NFD codepoint as |#3|. What we need to know
-% is whether after that we have another character, either from the NFD or
-% directly in the input. If not, we store the changed character at this stage.
-% \begin{macrocode}
-\cs_new:Npn \@@_change_case_upper_el:nnnnw #1#2#3#4#5 \q_@@_recursion_stop
- {
- \tl_if_head_is_N_type:nTF {#5}
- { \@@_change_case_upper_el:nnnnN {#4} }
- {
- \@@_change_case_store:e
- { \@@_change_case_codepoint:nn { upper } {#4} }
- \@@_change_case_loop:nnnw
- }
- {#1} {#2} {#3} #5 \q_@@_recursion_stop
- }
-% \end{macrocode}
-% Now, we check the detail of the next codepoint: again we filter out the
-% not-a-char cases, before checking if it's an dialytika, accent or diacritic.
-% (The latter do not have the same hiatus behavior as accents.) There is
-% additional work if the codepoint can take a ypogegrammeni: there, we need
-% to move any ypogegrammeni to after accents (in case the input is not
-% normalised). The ypogegrammeni itself is handled separately.
-% \begin{macrocode}
-\cs_new:Npn \@@_change_case_upper_el:nnnnN #1#2#3#4#5
- {
- \token_if_cs:NTF #5
- {
- \@@_change_case_store:e
- { \@@_change_case_codepoint:nn { upper } {#1} }
- \@@_change_case_loop:nnnw {#2} {#3} {#4} #5
- }
- {
- \@@_change_case_if_takes_ypogegrammeni:nTF {#1}
- {
- \@@_change_case_upper_el_ypogegrammeni:nnnnnnw
- {#1} {#2} {#3} {#4} { } { } #5
- }
- { \@@_change_case_upper_el_aux:nnnnN {#1} {#2} {#3} {#4} #5 }
- }
- }
-\cs_new:Npn \@@_change_case_upper_el_ypogegrammeni:nnnnnnw
- #1#2#3#4#5#6#7 \q_@@_recursion_stop
- {
- \tl_if_head_is_N_type:nTF {#7}
- {
- \@@_change_case_upper_el_ypogegrammeni:nnnnnnN
- {#1} {#2} {#3} {#4} {#5} {#6}
- }
- { \@@_change_case_upper_el_aux:nnnnN {#1} {#2} {#3} {#4} #5#6 }
- #7 \q_@@_recursion_stop
- }
-\cs_new:Npn \@@_change_case_upper_el_ypogegrammeni:nnnnnnN #1#2#3#4#5#6#7
- {
- \token_if_cs:NTF #7
- { \@@_change_case_upper_el_aux:nnnnN {#1} {#2} {#3} {#4} #5#6 }
- {
- \@@_codepoint_process:nN
- {
- \@@_change_case_upper_el_ypogegrammeni:nnnnnnn
- {#1} {#2} {#3} {#4} {#5} {#6}
- }
- }
- #7
- }
-\cs_new:Npn \@@_change_case_upper_el_ypogegrammeni:nnnnnnn #1#2#3#4#5#6#7
- {
- \@@_codepoint_compare:nNnTF {#7} = { "0345 }
- {
- \@@_change_case_upper_el_ypogegrammeni:nnnnnnw
- {#1} {#2} {#3} {#4} {#5} {#7}
- }
- {
- \bool_lazy_or:nnTF
- { \@@_change_case_if_greek_accent_p:n {#7} }
- { \@@_change_case_if_greek_breathing_p:n {#7} }
- {
- \@@_change_case_upper_el_ypogegrammeni:nnnnnnw
- {#1} {#2} {#3} {#4} {#5#7} {#6}
- }
- { \@@_change_case_upper_el_aux:nnnnN {#1} {#2} {#3} {#4} #5#6 #7 }
- }
- }
-\cs_new:Npn \@@_change_case_upper_el_aux:nnnnN #1#2#3#4#5
- {
- \@@_codepoint_process:nN
- { \@@_change_case_upper_el_aux:nnnnn {#1} {#2} {#3} {#4} } #5
- }
-\cs_new:Npn \@@_change_case_upper_el_aux:nnnnn #1#2#3#4#5
- {
- \@@_codepoint_compare:nNnTF {#5} = { "0308 }
- { \@@_change_case_upper_el_dialytika:nnnn {#2} {#3} {#4} {#1} }
- {
- \@@_change_case_if_greek_accent:nTF {#5}
- { \@@_change_case_upper_el_hiatus:nnnnw {#2} {#3} {#4} {#1} }
- {
- \@@_change_case_if_greek_breathing:nTF {#5}
- { \@@_change_case_upper_el:nnnn {#1} {#2} {#3} {#4} }
- {
- \@@_codepoint_compare:nNnTF {#5} = { "0345 }
- {
- \@@_change_case_store:e
- { \use:c { @@_change_case_upper_ #4 _ypogegrammeni:n } {#1} }
- \@@_change_case_loop:nnnw {#2} {#3} {#4}
- }
- {
- \@@_change_case_if_greek_stress:nTF {#5}
- {
- \@@_change_case_store:e
- { \@@_change_case_upper_el_stress:nn {#1} {#5} }
- \@@_change_case_loop:nnnw {#2} {#3} {#4}
-
- }
- {
- \@@_change_case_store:e
- { \@@_change_case_codepoint:nn { upper } {#1} }
- \@@_change_case_loop:nnnw {#2} {#3} {#4} #5
- }
- }
- }
- }
- }
- }
-% \end{macrocode}
-% We handle \emph{dialytika} in parts as it's also needed for the hiatus.
-% We know only two letters take it, so we can shortcut here on the second
-% part of the tests.
-% \begin{macrocode}
-\cs_new:Npn \@@_change_case_upper_el_dialytika:nnnn #1#2#3#4
- {
- \@@_change_case_if_takes_dialytika:nTF {#4}
- { \@@_change_case_upper_el_dialytika:n {#4} }
- {
- \@@_change_case_store:e
- { \@@_change_case_codepoint:nn { upper } {#4} }
- }
- \@@_change_case_upper_el_gobble:nnnw {#1} {#2} {#3}
- }
-\cs_new:Npn \@@_change_case_upper_el_dialytika:n #1
- {
- \@@_change_case_store:e
- {
- \bool_lazy_or:nnTF
- { \@@_codepoint_compare_p:nNn {#1} = { "0399 } }
- { \@@_codepoint_compare_p:nNn {#1} = { "03B9 } }
- {
- \codepoint_generate:nn { "03AA }
- { \@@_change_case_catcode:nn {#1} { "03AA } }
- }
- {
- \codepoint_generate:nn { "03AB }
- { \@@_change_case_catcode:nn {#1} { "03AB } }
- }
- }
- }
-% \end{macrocode}
-% Adding a hiatus needs some of the same ideas, but if there is not one we
-% skip this code point, hence needing a separate function.
-% \begin{macrocode}
-\cs_new:Npn \@@_change_case_upper_el_hiatus:nnnnw
- #1#2#3#4#5 \q_@@_recursion_stop
- {
- \tl_if_head_is_N_type:nTF {#5}
- { \@@_change_case_upper_el_hiatus:nnnnN {#4} }
- {
- \@@_change_case_store:e
- { \@@_change_case_codepoint:nn { upper } {#4} }
- \@@_change_case_loop:nnnw
- }
- {#1} {#2} {#3} #5 \q_@@_recursion_stop
- }
-\cs_new:Npn \@@_change_case_upper_el_hiatus:nnnnN #1#2#3#4#5
- {
- \token_if_cs:NTF #5
- {
- \@@_change_case_store:e
- { \@@_change_case_codepoint:nn { upper } {#1} }
- \@@_change_case_loop:nnnw {#2} {#3} {#4} #5
- }
- {
- \@@_codepoint_process:nN
- { \@@_change_case_upper_el_hiatus:nnnnn {#1} {#2} {#3} {#4} } #5
- }
- }
-\cs_new:Npn \@@_change_case_upper_el_hiatus:nnnnn #1#2#3#4#5
- {
- \@@_change_case_if_takes_dialytika:nTF {#5}
- {
- \@@_change_case_store:e
- { \@@_change_case_codepoint:nn { upper } {#1} }
- \@@_change_case_upper_el_dialytika:n {#5}
- \@@_change_case_upper_el_gobble:nnnw {#2} {#3} {#4}
- }
- { \@@_change_case_upper_el:nnnn {#1} {#2} {#3} {#4} #5 }
- }
-% \end{macrocode}
-% Handling the \emph{ypogegrammeni} output depends on the selected approach
-% \begin{macrocode}
-\cs_new:Npn \@@_change_case_upper_el_ypogegrammeni:n #1
- {
- \exp_args:Ne \@@_change_case_generate:n
- {
- \int_case:nn
- { \@@_codepoint_from_chars:Nw #1 }
- {
- { "0391 } { "1FBC }
- { "03B1 } { "1FBC }
- { "0397 } { "1FCC }
- { "03B7 } { "1FCC }
- { "03A9 } { "1FFC }
- { "03C9 } { "1FFC }
- }
- }
- }
-\cs_new:cpn { @@_change_case_upper_el-x-iota_ypogegrammeni:n } #1
- {
- \@@_change_case_codepoint:nn { upper } {#1}
- \codepoint_generate:nn { "0399 }
- { \char_value_catcode:n { "0399 } }
- }
-% \end{macrocode}
-% We choose to retain stress diacritics, but we also need to recombine
-% them for pdf\TeX{}. That is handled here.
-% \begin{macrocode}
-\cs_new:Npn \@@_change_case_upper_el_stress:nn #1#2
- {
- \exp_args:Ne \@@_change_case_generate:n
- {
- \int_case:nn
- { \@@_codepoint_from_chars:Nw #2 }
- {
- { "0304 }
- {
- \int_case:nn { \@@_codepoint_from_chars:Nw #1 }
- {
- { "0391 } { "1FB9 }
- { "03B1 } { "1FB9 }
- { "0399 } { "1FD9 }
- { "03B9 } { "1FD9 }
- { "03A5 } { "1FE9 }
- { "03C5 } { "1FE9 }
- }
- }
- { "0306 }
- {
- \int_case:nn { \@@_codepoint_from_chars:Nw #1 }
- {
- { "0391 } { "1FB8 }
- { "03B1 } { "1FB8 }
- { "0399 } { "1FD8 }
- { "03B9 } { "1FD8 }
- { "03A5 } { "1FE8 }
- { "03C5 } { "1FE8 }
- }
- }
- }
- }
- }
-% \end{macrocode}
-% For clearing out trailing combining marks after we have dealt with
-% the first one.
-% \begin{macrocode}
-\cs_new:Npn \@@_change_case_upper_el_gobble:nnnw
- #1#2#3#4 \q_@@_recursion_stop
- {
- \tl_if_head_is_N_type:nTF {#4}
- { \@@_change_case_upper_el_gobble:nnnN }
- { \@@_change_case_loop:nnnw }
- {#1} {#2} {#3} #4 \q_@@_recursion_stop
- }
-\cs_new:Npn \@@_change_case_upper_el_gobble:nnnN #1#2#3#4
- {
- \token_if_cs:NTF #4
- { \@@_change_case_loop:nnnw {#1} {#2} {#3} }
- {
- \@@_codepoint_process:nN
- { \@@_change_case_upper_el_gobble:nnnn {#1} {#2} {#3} }
- }
- #4
- }
-\cs_new:Npn \@@_change_case_upper_el_gobble:nnnn #1#2#3#4
- {
- \bool_lazy_or:nnTF
- { \@@_change_case_if_greek_accent_p:n {#4} }
- { \@@_change_case_if_greek_breathing_p:n {#4} }
- { \@@_change_case_upper_el_gobble:nnnw {#1} {#2} {#3} }
- { \@@_change_case_loop:nnnw {#1} {#2} {#3} #4 }
- }
-% \end{macrocode}
-% Luckily the Greek range is limited and clear.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \@@_change_case_if_greek:n #1 { p , TF }
- {
- \exp_args:Nf \@@_change_case_if_greek:n
- { \int_eval:n { \@@_codepoint_from_chars:Nw #1 } }
- }
-\cs_new:Npn \@@_change_case_if_greek:n #1
- {
- \if_int_compare:w #1 < "0370 \exp_stop_f:
- \prg_return_false:
- \else:
- \if_int_compare:w #1 > "03FF \exp_stop_f:
- \if_int_compare:w #1 < "1F00 \exp_stop_f:
- \prg_return_false:
- \else:
- \if_int_compare:w #1 > "1FFF \exp_stop_f:
- \if_int_compare:w #1 = "2126 \exp_stop_f:
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- \else:
- \prg_return_true:
- \fi:
- \fi:
- \else:
- \prg_return_true:
- \fi:
- \fi:
- }
-% \end{macrocode}
-% We follow ICU in adding a few extras to the accent list here.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \@@_change_case_if_greek_accent:n #1 { TF , p }
- {
- \exp_args:Nf \@@_change_case_if_greek_accent:n
- { \int_eval:n { \@@_codepoint_from_chars:Nw #1 } }
- }
-\cs_new:Npn \@@_change_case_if_greek_accent:n #1
- {
- \if_int_compare:w #1 = "0300 \exp_stop_f:
- \prg_return_true:
- \else:
- \if_int_compare:w #1 = "0301 \exp_stop_f:
- \prg_return_true:
- \else:
- \if_int_compare:w #1 = "0342 \exp_stop_f:
- \prg_return_true:
- \else:
- \if_int_compare:w #1 = "0302 \exp_stop_f:
- \prg_return_true:
- \else:
- \if_int_compare:w #1 = "0303 \exp_stop_f:
- \prg_return_true:
- \else:
- \if_int_compare:w #1 = "0311 \exp_stop_f:
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- \fi:
- \fi:
- \fi:
- \fi:
- \fi:
- }
-\prg_new_conditional:Npnn \@@_change_case_if_greek_spacing_diacritic:n
- #1 { TF }
- {
- \exp_args:Nf \@@_change_case_if_greek_spacing_diacritic:n
- { \int_eval:n { \@@_codepoint_from_chars:Nw #1 } }
- }
-\cs_new:Npn \@@_change_case_if_greek_spacing_diacritic:n #1
- {
- \if_int_compare:w #1 < "1FBD \exp_stop_f:
- \if_int_compare:w #1 = "037A \exp_stop_f:
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- \else:
- \if_int_compare:w #1 = "1FBD \exp_stop_f:
- \prg_return_true:
- \else:
- \if_int_compare:w #1 = "1FBF \exp_stop_f:
- \prg_return_true:
- \else:
- \if_int_compare:w #1 = "1FC0 \exp_stop_f:
- \prg_return_true:
- \else:
- \if_int_compare:w #1 = "1FC1 \exp_stop_f:
- \prg_return_true:
- \else:
- \if_int_compare:w #1 = "1FCD \exp_stop_f:
- \prg_return_true:
- \else:
- \if_int_compare:w #1 = "1FCE \exp_stop_f:
- \prg_return_true:
- \else:
- \if_int_compare:w #1 = "1FCF \exp_stop_f:
- \prg_return_true:
- \else:
- \if_int_compare:w #1 = "1FDD \exp_stop_f:
- \prg_return_true:
- \else:
- \if_int_compare:w #1 = "1FDE \exp_stop_f:
- \prg_return_true:
- \else:
- \if_int_compare:w #1 = "1FDF \exp_stop_f:
- \prg_return_true:
- \else:
- \if_int_compare:w #1 = "1FED \exp_stop_f:
- \prg_return_true:
- \else:
- \if_int_compare:w #1 = "1FEE \exp_stop_f:
- \prg_return_true:
- \else:
- \if_int_compare:w #1 = "1FEF \exp_stop_f:
- \prg_return_true:
- \else:
- \if_int_compare:w #1 = "1FFD \exp_stop_f:
- \prg_return_true:
- \else:
- \if_int_compare:w #1 = "1FFE \exp_stop_f:
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- \fi:
- \fi:
- \fi:
- \fi:
- \fi:
- \fi:
- \fi:
- \fi:
- \fi:
- \fi:
- \fi:
- \fi:
- \fi:
- \fi:
- \fi:
- }
-\prg_new_conditional:Npnn \@@_change_case_if_greek_breathing:n
- #1 { TF , p }
- {
- \exp_args:Nf \@@_change_case_if_greek_breathing:n
- { \int_eval:n { \@@_codepoint_from_chars:Nw #1 } }
- }
-\cs_new:Npn \@@_change_case_if_greek_breathing:n #1
- {
- \if_int_compare:w #1 = "0313 \exp_stop_f:
- \prg_return_true:
- \else:
- \if_int_compare:w #1 = "0314 \exp_stop_f:
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- \fi:
- }
-\prg_new_conditional:Npnn \@@_change_case_if_greek_stress:n
- #1 { TF , p }
- {
- \exp_args:Nf \@@_change_case_if_greek_stress:n
- { \int_eval:n { \@@_codepoint_from_chars:Nw #1 } }
- }
-\cs_new:Npn \@@_change_case_if_greek_stress:n #1
- {
- \if_int_compare:w #1 = "0304 \exp_stop_f:
- \prg_return_true:
- \else:
- \if_int_compare:w #1 = "0306 \exp_stop_f:
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- \fi:
- }
-\prg_new_conditional:Npnn \@@_change_case_if_takes_dialytika:n #1 { TF }
- {
- \exp_args:Nf \@@_change_case_if_takes_dialytika:n
- { \int_eval:n { \@@_codepoint_from_chars:Nw #1 } }
- }
-\cs_new:Npn \@@_change_case_if_takes_dialytika:n #1
- {
- \if_int_compare:w #1 = "0399 \exp_stop_f:
- \prg_return_true:
- \else:
- \if_int_compare:w #1 = "03B9 \exp_stop_f:
- \prg_return_true:
- \else:
- \if_int_compare:w #1 = "03A5 \exp_stop_f:
- \prg_return_true:
- \else:
- \if_int_compare:w #1 = "03C5 \exp_stop_f:
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- \fi:
- \fi:
- \fi:
- }
-\prg_new_conditional:Npnn \@@_change_case_if_takes_ypogegrammeni:n #1 { TF }
- {
- \exp_args:Nf \@@_change_case_if_takes_ypogegrammeni:n
- { \int_eval:n { \@@_codepoint_from_chars:Nw #1 } }
- }
-\cs_new:Npn \@@_change_case_if_takes_ypogegrammeni:n #1
- {
- \if_int_compare:w #1 = "03B1 \exp_stop_f:
- \prg_return_true:
- \else:
- \if_int_compare:w #1 = "03B7 \exp_stop_f:
- \prg_return_true:
- \else:
- \if_int_compare:w #1 = "03C9 \exp_stop_f:
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- \fi:
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \begin{macro}[EXP]
-% {
-% \@@_change_case_boundary_upper_el:Nnnnw,
-% \@@_change_case_boundary_upper_el-x-iota:Nnnnw
-% }
-% \begin{macro}[EXP]{\@@_change_case_boundary_upper_el:nnnN}
-% \begin{macro}[EXP]{\@@_change_case_boundary_upper_el:nnnn}
-% \begin{macro}[EXP]{\@@_change_case_boundary_upper_el:nnnnw}
-% There is one things that need special treatment at the start of
-% words in Greek. For an isolated accent \emph{eta},
-% which is handled by seeing if we have exactly one of the affected
-% codepoints followed by a space or brace group.
-% \begin{macrocode}
-\cs_new:Npn \@@_change_case_boundary_upper_el:Nnnnw
- #1#2#3#4#5 \q_@@_recursion_stop
- {
- \tl_if_head_is_N_type:nTF {#5}
- { \@@_change_case_boundary_upper_el:nnnN }
- { \@@_change_case_loop:nnnw }
- {#2} {#3} {#4} #5 \q_@@_recursion_stop
- }
-\cs_new_eq:cN { @@_change_case_boundary_upper_el-x-iota:Nnnnw }
- \@@_change_case_boundary_upper_el:Nnnnw
-\cs_new:Npn \@@_change_case_boundary_upper_el:nnnN #1#2#3#4
- {
- \token_if_cs:NTF #4
- { \@@_change_case_loop:nnnw {#1} {#2} {#3} }
- {
- \@@_codepoint_process:nN
- { \@@_change_case_boundary_upper_el:nnnn {#1} {#2} {#3} }
- }
- #4
- }
-\cs_new:Npn \@@_change_case_boundary_upper_el:nnnn #1#2#3#4
- {
- \bool_lazy_any:nTF
- {
- { \@@_codepoint_compare_p:nNn {#4} = { "0389 } }
- { \@@_codepoint_compare_p:nNn {#4} = { "03AE } }
- { \@@_codepoint_compare_p:nNn {#4} = { "1F22 } }
- { \@@_codepoint_compare_p:nNn {#4} = { "1F2A } }
- }
- { \@@_change_case_boundary_upper_el:nnnnw {#1} {#2} {#3} {#4} }
- { \@@_change_case_breathing:nnnn {#1} {#2} {#3} {#4} }
- }
-\cs_new:Npn \@@_change_case_boundary_upper_el:nnnnw
- #1#2#3#4#5 \q_@@_recursion_stop
- {
- \tl_if_head_is_N_type:nTF {#5}
- { \@@_change_case_loop:nnnw {#1} {#2} {#3} #4 }
- {
- \@@_change_case_store:e
- {
- \codepoint_generate:nn { "0389 }
- { \@@_change_case_catcode:nn {#4} { "0389 } }
- }
- \@@_change_case_loop:nnnw {#1} {#2} {#3}
- }
- #5 \q_@@_recursion_stop
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \begin{macro}[EXP]{\@@_change_case_breathing:nnnn}
-% \begin{macro}[EXP]{\@@_change_case_breathing:nnnnn}
-% \begin{macro}[EXP]{\@@_change_case_breathing:nnnnnw}
-% \begin{macro}[EXP]{\@@_change_case_breathing:nnnnnnw}
-% \begin{macro}[EXP]{\@@_change_case_breathing_aux:nnnnnn}
-% \begin{macro}[EXP]{\@@_change_case_breathing_aux:nnnnw}
-% \begin{macro}[EXP]{\@@_change_case_breathing_aux:nnnN}
-% \begin{macro}[EXP]{\@@_change_case_breathing_dialytika:nnnn}
-% In Greek, breathing diacritics are normally dropped when uppercasing:
-% see the code for the general case. However, for the first character
-% of a word, if there is a breather \emph{and} the next character takes
-% a \emph{dialytika}, it needs to be added. We start by checking if
-% the current codepoint is in the Greek range, then decomposing.
-% \begin{macrocode}
-\cs_new:Npn \@@_change_case_breathing:nnnn #1#2#3#4
- {
- \@@_change_case_if_greek:nTF {#4}
- {
- \exp_args:Ne \@@_change_case_breathing:nnnnn
- {
- \codepoint_to_nfd:n
- { \@@_codepoint_from_chars:Nw #4 }
- }
- {#1} {#2} {#3} {#4}
- }
- { \@@_change_case_loop:nnnw {#1} {#2} {#3} #4 }
- }
-\cs_new:Npn \@@_change_case_breathing:nnnnn #1#2#3#4#5
- {
- \@@_codepoint_process:nN
- { \@@_change_case_breathing:nnnnnw {#2} {#3} {#4} {#5} }
- #1 \q_mark
- }
-% \end{macrocode}
-% Normal form decomposition will always give between one and three
-% codepoints. Luckily, the two breathing marks (\emph{psili} and
-% \emph{dasia}) will be in a predictable position: last. So we can
-% quickly establish first that there was a change on decomposition,
-% and second if the final resulting codepoint is one of the two we
-% care about.
-% \begin{macrocode}
-\cs_new:Npn \@@_change_case_breathing:nnnnnw #1#2#3#4#5#6 \q_mark
- {
- \tl_if_blank:nTF {#6}
- { \@@_change_case_loop:nnnw {#1} {#2} {#3} #4 }
- {
- \@@_codepoint_process:nN
- { \@@_change_case_breathing:nnnnnnw {#1} {#2} {#3} {#4} {#5} }
- #6 \q_mark
- }
- }
-\cs_new:Npn \@@_change_case_breathing:nnnnnnw #1#2#3#4#5#6#7 \q_mark
- {
- \tl_if_blank:nTF {#7}
- {
- \@@_change_case_breathing_aux:nnnnnn
- {#1} {#2} {#3} {#4} {#5} {#6}
- }
- {
- \@@_codepoint_process:nN
- { \@@_change_case_breathing:nnnnnnw {#1} {#2} {#3} {#4} {#5} }
- #7 \q_mark
- }
- }
-\cs_new:Npn \@@_change_case_breathing_aux:nnnnnn #1#2#3#4#5#6
- {
- \bool_lazy_or:nnTF
- { \@@_codepoint_compare_p:nNn {#6} = { "0313 } }
- { \@@_codepoint_compare_p:nNn {#6} = { "0314 } }
- { \@@_change_case_breathing_aux:nnnnw {#1} {#2} {#3} {#5} }
- { \@@_change_case_loop:nnnw {#1} {#2} {#3} #4 }
- }
-% \end{macrocode}
-% Now the lookahead can be fired: check the next codepoint and assess
-% whether it takes a \emph{dialytika}. Drop the
-% breathing mark or generate the \emph{dialytika}: the
-% latter is code shared with the general mechanism.
-% \begin{macrocode}
-\cs_new:Npn \@@_change_case_breathing_aux:nnnnw #1#2#3#4#5
- \q_@@_recursion_stop
- {
- \@@_change_case_store:e
- { \@@_change_case_codepoint:nn { upper } {#4} }
- \tl_if_head_is_N_type:nTF {#5}
- { \@@_change_case_breathing_aux:nnnN }
- { \@@_change_case_loop:nnnw }
- {#1} {#2} {#3} #5 \q_@@_recursion_stop
- }
-\cs_new:Npn \@@_change_case_breathing_aux:nnnN #1#2#3#4
- {
- \@@_codepoint_process:nN
- { \@@_change_case_breathing_dialytika:nnnn {#1} {#2} {#3} } #4
- }
-\cs_new:Npn \@@_change_case_breathing_dialytika:nnnn #1#2#3#4
- {
- \@@_change_case_if_takes_dialytika:nTF {#4}
- {
- \@@_change_case_upper_el_dialytika:n {#4}
- \@@_change_case_loop:nnnw {#1} {#2} {#3}
- }
- { \@@_change_case_loop:nnnw {#1} {#2} {#3} #4 }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \begin{macro}[EXP]{\@@_change_case_title_el:nnnnn}
-% Titlecasing retains accents, but to prevent the uppercasing code
-% from kicking in, there has to be an explicit function here.
-% \begin{macrocode}
-\cs_new:Npn \@@_change_case_title_el:nnnnn #1#2#3#4#5
- { \@@_change_case_codepoint:nnnnn {#1} {#2} {#3} {#4} {#5} }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {
-% \@@_change_case_upper_hy:nnnnn ,
-% \@@_change_case_title_hy:nnnnn ,
-% \@@_change_case_upper_hy-x-yiwn:nnnnn ,
-% \@@_change_case_title_hy-x-yiwn:nnnnn
-% }
-% See \url{https://www.unicode.org/L2/L2020/20143-armenian-ech-yiwn.pdf}.
-% \begin{macrocode}
-\cs_new:Npn \@@_change_case_upper_hy:nnnnn #1#2#3#4#5
- {
- \@@_codepoint_compare:nNnTF {#5} = { "0587 }
- {
- \@@_change_case_store:e
- {
- \codepoint_generate:nn { "0535 }
- { \@@_change_case_catcode:nn {#5} { "0535 } }
- \codepoint_generate:nn { "054E }
- { \@@_change_case_catcode:nn {#5} { "054E } }
- }
- \use:c { @@_change_case_next_ #2 :nnn }
- {#2} {#3} {#4}
- }
- { \@@_change_case_codepoint:nnnnn {#1} {#2} {#3} {#4} {#5} }
- }
-\cs_new:Npn \@@_change_case_title_hy:nnnnn #1#2#3#4#5
- {
- \@@_codepoint_compare:nNnTF {#5} = { "0587 }
- {
- \@@_change_case_store:e
- {
- \codepoint_generate:nn { "0535 }
- { \@@_change_case_catcode:nn {#5} { "0535 } }
- \codepoint_generate:nn { "057E }
- { \@@_change_case_catcode:nn {#5} { "057E } }
- }
- \use:c { @@_change_case_next_ #2 :nnn }
- {#2} {#3} {#4}
- }
- { \@@_change_case_codepoint:nnnnn {#1} {#2} {#3} {#4} {#5} }
- }
-\cs_new:cpn { @@_change_case_upper_hy-x-yiwn:nnnnn } #1#2#3#4#5
- { \@@_change_case_codepoint:nnnnn {#1} {#2} {#3} {#4} {#5} }
-\cs_new_eq:cc { @@_change_case_title_hy-x-yiwn:nnnnn }
- { @@_change_case_upper_hy-x-yiwn:nnnnn }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_change_case_lower_la-x-medieval:nnnnn}
-% \begin{macro}[EXP]{\@@_change_case_upper_la-x-medieval:nnnnn}
-% Simply swaps of characters.
-% \begin{macrocode}
-\cs_new:cpn { @@_change_case_lower_la-x-medieval:nnnnn } #1#2#3#4#5
- {
- \@@_codepoint_compare:nNnTF {#5} = { "0056 }
- {
- \@@_change_case_store:e
- { \char_generate:nn { "0075 } { \@@_char_catcode:N #5 } }
- \use:c { @@_change_case_next_ #2 :nnn }
- {#2} {#3} {#4}
- }
- { \@@_change_case_codepoint:nnnnn {#1} {#2} {#3} {#4} {#5} }
- }
-\cs_new:cpn { @@_change_case_upper_la-x-medieval:nnnnn } #1#2#3#4#5
- {
- \@@_codepoint_compare:nNnTF {#5} = { "0075 }
- {
- \@@_change_case_store:e
- { \char_generate:nn { "0056 } { \@@_char_catcode:N #5 } }
- \use:c { @@_change_case_next_ #2 :nnn }
- {#2} {#3} {#4}
- }
- { \@@_change_case_codepoint:nnnnn {#1} {#2} {#3} {#4} {#5} }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {
-% \@@_change_cases_lower_lt:nnnnn ,
-% \@@_change_cases_lower_lt_auxi:nnnnn ,
-% \@@_change_cases_lower_lt_auxii:nnnnn
-% }
-% \begin{macro}[rEXP]{\@@_change_case_lower_lt:nnnw}
-% \begin{macro}[rEXP]{\@@_change_case_lower_lt:nnnN}
-% \begin{macro}[rEXP]{\@@_change_case_lower_lt:nnnn}
-% For Lithuanian, the issue to be dealt with is dots over lower case
-% letters: these should be present if there is another accent. The first step
-% is a simple match attempt: look for the three uppercase accented letters
-% which should gain a dot-above char in their lowercase form.
-% \begin{macrocode}
-\cs_new:Npn \@@_change_case_lower_lt:nnnnn #1#2#3#4#5
- {
- \exp_args:Ne \@@_change_case_lower_lt_auxi:nnnnn
- {
- \int_case:nn { \@@_codepoint_from_chars:Nw #5 }
- {
- { "00CC } { "0300 }
- { "00CD } { "0301 }
- { "0128 } { "0303 }
- }
- }
- {#2} {#3} {#4} {#5}
- }
-% \end{macrocode}
-% If there was a hit, output the result with the dot-above and move on.
-% Otherwise, look for one of the three letters that can take a combining
-% accent: I, J nd I-ogonek.
-% \begin{macrocode}
-\cs_new:Npn \@@_change_case_lower_lt_auxi:nnnnn #1#2#3#4#5
- {
- \tl_if_blank:nTF {#1}
- {
- \exp_args:Ne \@@_change_case_lower_lt_auxii:nnnnn
- {
- \int_case:nn { \@@_codepoint_from_chars:Nw #5 }
- {
- { "0049 } { "0069 }
- { "004A } { "006A }
- { "012E } { "012F }
- }
- }
- {#2} {#3} {#4} {#5}
- }
- {
- \@@_change_case_store:e
- {
- \codepoint_generate:nn { "0069 }
- { \@@_change_case_catcode:nn {#5} { "0069 } }
- \codepoint_generate:nn { "0307 }
- { \@@_change_case_catcode:nn {#5} { "0307 } }
- \codepoint_generate:nn {#1}
- { \@@_change_case_catcode:nn {#5} {#1} }
- }
- \@@_change_case_loop:nnnw {#2} {#3} {#4}
- }
- }
-% \end{macrocode}
-% Again, branch depending on a hit. If there is one, we output the character
-% then need to look for a combining accent: as usual, we need to be aware of
-% the loop situation.
-% \begin{macrocode}
-\cs_new:Npn \@@_change_case_lower_lt_auxii:nnnnn #1#2#3#4#5
- {
- \tl_if_blank:nTF {#1}
- { \@@_change_case_codepoint:nnnnn {#2} {#2} {#3} {#4} {#5} }
- {
- \@@_change_case_store:e
- {
- \codepoint_generate:nn {#1}
- { \@@_change_case_catcode:nn {#5} {#1} }
- }
- \@@_change_case_lower_lt:nnnw {#2} {#3} {#4}
- }
- }
-\cs_new:Npn \@@_change_case_lower_lt:nnnw #1#2#3#4 \q_@@_recursion_stop
- {
- \tl_if_head_is_N_type:nTF {#4}
- { \@@_change_case_lower_lt:nnnN }
- { \@@_change_case_loop:nnnw }
- {#1} {#2} {#3} #4 \q_@@_recursion_stop
- }
-\cs_new:Npn \@@_change_case_lower_lt:nnnN #1#2#3#4
- {
- \@@_codepoint_process:nN
- { \@@_change_case_lower_lt:nnnn {#1} {#2} {#3} } #4
- }
-\cs_new:Npn \@@_change_case_lower_lt:nnnn #1#2#3#4
- {
- \bool_lazy_and:nnT
- {
- \bool_lazy_or_p:nn
- { ! \tl_if_single_p:n {#4} }
- { ! \token_if_cs_p:N #4 }
- }
- {
- \bool_lazy_any_p:n
- {
- { \@@_codepoint_compare_p:nNn {#4} = { "0300 } }
- { \@@_codepoint_compare_p:nNn {#4} = { "0301 } }
- { \@@_codepoint_compare_p:nNn {#4} = { "0303 } }
- }
- }
- {
- \@@_change_case_store:e
- {
- \codepoint_generate:nn { "0307 }
- { \@@_change_case_catcode:nn {#4} { "0307 } }
- }
- }
- \@@_change_case_loop:nnnw {#1} {#2} {#3} #4
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \begin{macro}[EXP]
-% {
-% \@@_change_cases_upper_lt:nnnnn ,
-% \@@_change_cases_upper_lt_aux:nnnnn
-% }
-% \begin{macro}[rEXP]{\@@_change_case_upper_lt:nnnw}
-% \begin{macro}[rEXP]{\@@_change_case_upper_lt:nnnN}
-% \begin{macro}[rEXP]{\@@_change_case_upper_lt:nnnn}
-% The uppercasing version: first find i/j/i-ogonek, then look for the
-% combining char: drop it if present.
-% \begin{macrocode}
-\cs_new:Npn \@@_change_case_upper_lt:nnnnn #1#2#3#4#5
- {
- \exp_args:Ne \@@_change_case_upper_lt_aux:nnnnn
- {
- \int_case:nn { \@@_codepoint_from_chars:Nw #5 }
- {
- { "0069 } { "0049 }
- { "006A } { "004A }
- { "012F } { "012E }
- }
- }
- {#2} {#3} {#4} {#5}
- }
-\cs_new:Npn \@@_change_case_upper_lt_aux:nnnnn #1#2#3#4#5
- {
- \tl_if_blank:nTF {#1}
- { \@@_change_case_codepoint:nnnnn { upper } {#2} {#3} {#4} {#5} }
- {
- \@@_change_case_store:e
- {
- \codepoint_generate:nn {#1}
- { \@@_change_case_catcode:nn {#5} {#1} }
- }
- \@@_change_case_upper_lt:nnnw {#2} {#3} {#4}
- }
- }
-\cs_new:Npn \@@_change_case_upper_lt:nnnw #1#2#3#4 \q_@@_recursion_stop
- {
- \tl_if_head_is_N_type:nTF {#4}
- { \@@_change_case_upper_lt:nnnN }
- { \use:c { @@_change_case_next_ #1 :nnn } }
- {#1} {#2} {#3} #4 \q_@@_recursion_stop
- }
-\cs_new:Npn \@@_change_case_upper_lt:nnnN #1#2#3#4
- {
- \@@_codepoint_process:nN
- { \@@_change_case_upper_lt:nnnn {#1} {#2} {#3} } #4
- }
-\cs_new:Npn \@@_change_case_upper_lt:nnnn #1#2#3#4
- {
- \bool_lazy_and:nnTF
- {
- \bool_lazy_or_p:nn
- { ! \tl_if_single_p:n {#4} }
- { ! \token_if_cs_p:N #4 }
- }
- { \@@_codepoint_compare_p:nNn {#4} = { "0307 } }
- { \use:c { @@_change_case_next_ #1 :nnn } {#1} {#2} {#3} }
- { \use:c { @@_change_case_next_ #1 :nnn } {#1} {#2} {#3} #4 }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {\@@_change_case_title_nl:nnnnn, \@@_change_case_title_nl_aux:nnnnn}
-% \begin{macro}[EXP]{\@@_change_case_title_nl:nnnw}
-% \begin{macro}[EXP]{\@@_change_case_title_nl:nnnN}
-% For Dutch, there is a single look-ahead test for \texttt{ij} when
-% title casing. If the appropriate letters are found, produce \texttt{IJ}
-% and gobble the \texttt{j}/\texttt{J}.
-% \begin{macrocode}
-\cs_new:Npn \@@_change_case_title_nl:nnnnn #1#2#3#4#5
- {
- \tl_if_single:nTF {#5}
- { \@@_change_case_title_nl_aux:nnnnn }
- { \@@_change_case_codepoint:nnnnn }
- {#1} {#2} {#3} {#4} {#5}
- }
-\cs_new:Npn \@@_change_case_title_nl_aux:nnnnn #1#2#3#4#5
- {
- \bool_lazy_or:nnTF
- { \int_compare_p:nNn {`#5} = { "0049 } }
- { \int_compare_p:nNn {`#5} = { "0069 } }
- {
- \@@_change_case_store:e
- { \char_generate:nn { "0049 } { \@@_char_catcode:N #5 } }
- \@@_change_case_title_nl:nnnw {#2} {#3} {#4}
- }
- { \@@_change_case_codepoint:nnnnn {#1} {#2} {#3} {#4} {#5} }
- }
-\cs_new:Npn \@@_change_case_title_nl:nnnw #1#2#3#4 \q_@@_recursion_stop
- {
- \tl_if_head_is_N_type:nTF {#4}
- { \@@_change_case_title_nl:nnnN }
- { \use:c { @@_change_case_next_ #1 :nnn } }
- {#1} {#2} {#3} #4 \q_@@_recursion_stop
- }
-\cs_new:Npn \@@_change_case_title_nl:nnnN #1#2#3#4
- {
- \bool_lazy_and:nnTF
- { ! \token_if_cs_p:N #4 }
- {
- \bool_lazy_or_p:nn
- { \int_compare_p:nNn {`#4} = { "004A } }
- { \int_compare_p:nNn {`#4} = { "006A } }
- }
- {
- \@@_change_case_store:e
- { \char_generate:nn { "004A } { \@@_char_catcode:N #4 } }
- \use:c { @@_change_case_next_ #1 :nnn } {#1} {#2} {#3}
- }
- { \use:c { @@_change_case_next_ #1 :nnn } {#1} {#2} {#3} #4 }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_change_case_lower_tr:nnnnn}
-% \begin{macro}[EXP]{\@@_change_case_lower_tr:nnnNw}
-% \begin{macro}[EXP]{\@@_change_case_lower_tr:NnnnN}
-% \begin{macro}[EXP]{\@@_change_case_lower_tr:Nnnnn}
-% The Turkic languages need special treatment for dotted-i and dotless-i.
-% The lower casing rule can be expressed in terms of searching first for
-% either a dotless-I or a dotted-I. In the latter case the mapping is
-% easy, but in the former there is a second stage search.
-% \begin{macrocode}
-\cs_new:Npn \@@_change_case_lower_tr:nnnnn #1#2#3#4#5
- {
- \@@_codepoint_compare:nNnTF {#5} = { "0049 }
- { \@@_change_case_lower_tr:nnnNw {#1} {#3} {#4} #5 }
- {
- \@@_codepoint_compare:nNnTF {#5} = { "0130 }
- {
- \@@_change_case_store:e
- {
- \codepoint_generate:nn { "0069 }
- { \@@_change_case_catcode:nn {#5} { "0069 } }
- }
- \@@_change_case_loop:nnnw {#1} {#3} {#4}
- }
- { \@@_change_case_codepoint:nnnnn {#1} {#2} {#3} {#4} {#5} }
- }
- }
-% \end{macrocode}
-% After a dotless-I there may be a dot-above character. If there is then
-% a dotted-i should be produced, otherwise output a dotless-i. When the
-% combination is found both the dotless-I and the dot-above char have to
-% be removed from the input.
-% \begin{macrocode}
-\cs_new:Npn \@@_change_case_lower_tr:nnnNw #1#2#3#4#5 \q_@@_recursion_stop
- {
- \tl_if_head_is_N_type:nTF {#5}
- { \@@_change_case_lower_tr:NnnnN #4 {#1} {#2} {#3} }
- {
- \@@_change_case_store:e
- {
- \codepoint_generate:nn { "0131 }
- { \@@_change_case_catcode:nn {#4} { "0131 } }
- }
- \@@_change_case_loop:nnnw {#1} {#2} {#3}
- }
- #5 \q_@@_recursion_stop
- }
-\cs_new:Npn \@@_change_case_lower_tr:NnnnN #1#2#3#4#5
- {
- \@@_codepoint_process:nN
- { \@@_change_case_lower_tr:Nnnnn #1 {#2} {#3} {#4} } #5
- }
-\cs_new:Npn \@@_change_case_lower_tr:Nnnnn #1#2#3#4#5
- {
- \bool_lazy_or:nnTF
- {
- \bool_lazy_and_p:nn
- { \tl_if_single_p:n {#5} }
- { \token_if_cs_p:N #5 }
- }
- { ! \@@_codepoint_compare_p:nNn {#5} = { "0307 } }
- {
- \@@_change_case_store:e
- {
- \codepoint_generate:nn { "0131 }
- { \@@_change_case_catcode:nn {#1} { "0131 } }
- }
- \@@_change_case_loop:nnnw {#2} {#3} {#4} #5
- }
- {
- \@@_change_case_store:e
- {
- \codepoint_generate:nn { "0069 }
- { \@@_change_case_catcode:nn {#1} { "0069 } }
- }
- \@@_change_case_loop:nnnw {#2} {#3} {#4}
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \begin{macro}[EXP]{\@@_change_case_upper_tr:nnnnn}
-% Uppercasing is easier: just one exception with no context.
-% \begin{macrocode}
-\cs_new:Npn \@@_change_case_upper_tr:nnnnn #1#2#3#4#5
- {
- \@@_codepoint_compare:nNnTF {#5} = { "0069 }
- {
- \@@_change_case_store:e
- {
- \codepoint_generate:nn { "0130 }
- { \@@_change_case_catcode:nn {#5} { "0130 } }
- }
- \use:c { @@_change_case_next_ #2 :nnn } {#2} {#3} {#4}
- }
- { \@@_change_case_codepoint:nnnnn {#1} {#2} {#3} {#4} {#5} }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {\@@_change_case_lower_az:nnnnn, \@@_change_case_upper_az:nnnnn}
-% Straight copies.
-% \begin{macrocode}
-\cs_new_eq:NN \@@_change_case_lower_az:nnnnn
- \@@_change_case_lower_tr:nnnnn
-\cs_new_eq:NN \@@_change_case_upper_az:nnnnn
- \@@_change_case_upper_tr:nnnnn
-% \end{macrocode}
-% \end{macro}
-%
-% The (fixed) look-up mappings for letter-like control sequences.
-% \begin{macrocode}
-\group_begin:
- \cs_set_protected:Npn \@@_change_case_setup:NN #1#2
- {
- \quark_if_recursion_tail_stop:N #1
- \tl_const:cn { c_@@_lowercase_ \token_to_str:N #1 _tl }
- { #2 }
- \tl_const:cn { c_@@_uppercase_ \token_to_str:N #2 _tl }
- { #1 }
- \@@_change_case_setup:NN
- }
- \@@_change_case_setup:NN
- \AA \aa
- \AE \ae
- \DH \dh
- \DJ \dj
- \IJ \ij
- \L \l
- \NG \ng
- \O \o
- \OE \oe
- \SS \ss
- \TH \th
- \q_recursion_tail ?
- \q_recursion_stop
- \tl_const:cn { c_@@_uppercase_ \token_to_str:N \i _tl } { I }
- \tl_const:cn { c_@@_uppercase_ \token_to_str:N \j _tl } { J }
-\group_end:
-% \end{macrocode}
-%
-% To deal with possible encoding-specific extensions to \tn{@uclclist},
-% we check at the end of the preamble. This will therefore only apply
-% to \LaTeXe{} package mode.
-% \begin{macrocode}
-\tl_if_exist:NT \@expl@finalise@setup@@@@
- {
- \tl_gput_right:Nn \@expl@finalise@setup@@@@
- {
- \tl_gput_right:Nn \@kernel@after@begindocument
- {
- \group_begin:
- \cs_set_protected:Npn \@@_change_case_setup:Nn #1#2
- {
- \quark_if_recursion_tail_stop:N #1
- \tl_if_single_token:nT {#2}
- {
- \cs_if_exist:cF
- { c_@@_uppercase_ \token_to_str:N #1 _tl }
- {
- \tl_const:cn
- { c_@@_uppercase_ \token_to_str:N #1 _tl }
- { #2 }
- }
- \cs_if_exist:cF
- { c_@@_lowercase_ \token_to_str:N #2 _tl }
- {
- \tl_const:cn
- { c_@@_lowercase_ \token_to_str:N #2 _tl }
- { #1 }
- }
- }
- \@@_change_case_setup:Nn
- }
- \exp_after:wN \@@_change_case_setup:Nn \@uclclist
- \q_recursion_tail ?
- \q_recursion_stop
- \group_end:
- }
- }
- }
-% \end{macrocode}
-%
-% A few adjustments to case mapping for combining chars: these are not needed
-% for the Unicode engines
-% \begin{macrocode}
-\bool_lazy_or:nnF
- { \sys_if_engine_luatex_p: }
- { \sys_if_engine_xetex_p: }
- {
- \text_declare_uppercase_mapping:nn { "01F0 } { \v { J } }
- }
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3text-map.dtx b/macros/latex/contrib/l3kernel/l3text-map.dtx
deleted file mode 100644
index d364c32199..0000000000
--- a/macros/latex/contrib/l3kernel/l3text-map.dtx
+++ /dev/null
@@ -1,586 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3text-map.dtx
-%
-% Copyright (C) 2022-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3text-map} module\\ Text processing (mapping)^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3text-map} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=text>
-% \end{macrocode}
-%
-% \subsection{Mapping to text}
-%
-% \begin{macro}[EXP]{\text_map_function:nN}
-% \begin{macro}[EXP]{\@@_map_function:nN}
-% \begin{macro}[EXP]{\@@_map_loop:Nnw}
-% \begin{macro}[EXP]{\@@_map_group:Nnn}
-% \begin{macro}[EXP]{\@@_map_space:Nnw}
-% \begin{macro}[EXP]{\@@_map_N_type:NnN}
-% \begin{macro}[EXP]{\@@_map_codepoint:Nnn}
-% \begin{macro}[EXP]{\@@_map_CR:Nnw}
-% \begin{macro}[EXP]{\@@_map_CR:NnN}
-% \begin{macro}[EXP]{\@@_map_class:Nnnn}
-% \begin{macro}[EXP]{\@@_map_class:nNnnn}
-% \begin{macro}[EXP]{\@@_map_class_loop:Nnnnw}
-% \begin{macro}[EXP]{\@@_map_class_end:nw}
-% \begin{macro}[EXP]
-% {
-% \@@_map_Control:Nnn ,
-% \@@_map_Extend:Nnn ,
-% \@@_map_SpacingMark:Nnn ,
-% \@@_map_Prepend:Nnn ,
-% \@@_map_Prepend_aux:Nnn
-% }
-% \begin{macro}[EXP]{\@@_map_Prepend:nNnn}
-% \begin{macro}[EXP]{\@@_map_Prepend_loop:Nnnw}
-% \begin{macro}[EXP]
-% {
-% \@@_map_not_Control:Nnn ,
-% \@@_map_not_Extend:Nnn ,
-% \@@_map_not_SpacingMark:Nnn ,
-% \@@_map_not_Prepend:Nnn ,
-% \@@_map_not_L:Nnn ,
-% \@@_map_not_LV:Nnn ,
-% \@@_map_not_V:Nnn ,
-% \@@_map_not_LVT:Nnn ,
-% \@@_map_not_T:Nnn
-% }
-% \begin{macro}[EXP]
-% {
-% \@@_map_L:Nnn ,
-% \@@_map_LV:Nnn ,
-% \@@_map_V:Nnn ,
-% \@@_map_LVT:Nnn ,
-% \@@_map_T:Nnn
-% }
-% \begin{macro}[EXP]{\@@_map_hangul:Nnnw}
-% \begin{macro}[EXP]{\@@_map_hangul:NnnN}
-% \begin{macro}[EXP]{\@@_map_hangul:Nnnn}
-% \begin{macro}[EXP]{\@@_map_hangul_aux:Nnnnw}
-% \begin{macro}[EXP]{\@@_map_hangul:nNnnnw}
-% \begin{macro}[EXP]{\@@_map_hangul_loop:Nnnnnw}
-% \begin{macro}[EXP]{\@@_map_hangul_next:Nnnn}
-% \begin{macro}[EXP]{\@@_map_hangul_end:nw}
-% \begin{macro}[EXP]
-% {
-% \@@_map_hangul_L:Nnn ,
-% \@@_map_hangul_LV:Nnn ,
-% \@@_map_hangul_V:Nnn ,
-% \@@_map_hangul_LVT:Nnn ,
-% \@@_map_hangul_T:Nnn
-% }
-% \begin{macro}[EXP]
-% {\@@_map_Regional_Indicator:Nnn, \@@_map_Regional_Indicator_aux:Nnn}
-% \begin{macro}[EXP]{\@@_map_lookahead:NnNw}
-% \begin{macro}[EXP]{\@@_map_lookahead:NnNN}
-% \begin{macro}[EXP]{\@@_map_output:Nn}
-% \begin{macro}[EXP]{\text_map_break:}
-% \begin{macro}[EXP]{\text_map_break:n}
-% The standard lead-off for an action loop.
-% \begin{macrocode}
-\cs_new:Npn \text_map_function:nN #1#2
- { \exp_args:Ne \@@_map_function:nN { \text_expand:n {#1} } #2 }
-\cs_new:Npn \@@_map_function:nN #1#2
- {
- \@@_map_loop:Nnw #2 { } #1
- \q_@@_recursion_tail \q_@@_recursion_stop
- \prg_break_point:Nn \text_map_break: { }
- }
-% \end{macrocode}
-% The standard set up for an \enquote{action} loop. Groups are handled by
-% recursion, spaces are treated similarly: both count as grapheme boundaries.
-% For \texttt{N}-type tokens, we filter out control sequences (again
-% a boundary), then move on to further analysis.
-% \begin{macrocode}
-\cs_new:Npn \@@_map_loop:Nnw #1#2#3 \q_@@_recursion_stop
- {
- \tl_if_head_is_N_type:nTF {#3}
- { \@@_map_N_type:NnN }
- {
- \tl_if_head_is_group:nTF {#3}
- { \@@_map_group:Nnn }
- { \@@_map_space:Nnw }
- }
- #1 {#2} #3 \q_@@_recursion_stop
- }
-\cs_new:Npn \@@_map_group:Nnn #1#2#3
- {
- \@@_map_output:Nn #1 {#2}
- {
- \@@_map_loop:Nnw #1 { } #2
- \q_@@_recursion_tail \q_@@_recursion_stop
- \prg_break_point:Nn \text_map_break: { }
- }
- \@@_map_loop:Nnw #1 { }
- }
-\use:e
- { \cs_new:Npn \exp_not:N \@@_map_space:Nnw #1#2 \c_space_tl }
- {
- \@@_map_output:Nn #1 {#2}
- #1 { ~ }
- \@@_map_loop:Nnw #1 { }
- }
-\cs_new:Npn \@@_map_N_type:NnN #1#2#3
- {
- \@@_if_q_recursion_tail_stop_do:Nn #3
- {
- \@@_map_output:Nn #1 {#2}
- \text_map_break:
- }
- \token_if_cs:NTF #3
- {
- \@@_map_output:Nn #1 {#2}
- #1 {#3}
- \@@_map_loop:Nnw #1 { }
- }
- {
- \@@_codepoint_process:nN
- { \@@_map_codepoint:Nnn #1 {#2} } #3
- }
- }
-% \end{macrocode}
-% We pull out a few special cases here. Carriage returns case needs a bit of
-% context handling so has an auxiliary. Codepoint U+200D is the zero-width
-% joiner, which has no context to concern us: just don't break.
-% \begin{macrocode}
-\cs_new:Npn \@@_map_codepoint:Nnn #1#2#3
- {
- \@@_codepoint_compare:nNnTF {#3} = { "0D }
- {
- \@@_map_output:Nn #1 {#2}
- \@@_map_CR:Nnw #1 {#3}
- }
- {
- \@@_codepoint_compare:nNnTF {#3} = { "200D }
- { \@@_map_loop:Nnw #1 {#2#3} }
- { \@@_map_class:Nnnn #1 {#2} {#3} { Control } }
- }
- }
-% \end{macrocode}
-% A carriage return is a boundary unless it is immediately followed by
-% a line feed, in which case that pair is a boundary.
-% \begin{macrocode}
-\cs_new:Npn \@@_map_CR:Nnw #1#2#3 \q_@@_recursion_stop
- {
- \tl_if_head_is_N_type:nTF {#3}
- { \@@_map_CR:NnN #1 {#2} }
- {
- #1 {#2}
- \@@_map_loop:Nnw #1 { }
- }
- #3 \q_@@_recursion_stop
- }
-\cs_new:Npn \@@_map_CR:NnN #1#2#3
- {
- \@@_if_q_recursion_tail_stop_do:Nn #3
- {
- #1 {#2}
- \text_map_break:
- }
- \bool_lazy_and:nnTF
- { ! \token_if_cs_p:N #3 }
- { \int_compare_p:nNn { `#3 } = { "0A } }
- {
- \@@_map_output:Nn #1 {#2#3}
- \@@_map_loop:Nnw #1 { }
- }
- { \@@_map_loop:Nnw #1 { } #3 }
- }
-% \end{macrocode}
-% There are various classes of character, and we deal with them all in
-% the same general way. We need to example the relevant list of codepoints:
-% if we get a hit, then we do whatever the relevant action is. Otherwise
-% we loop, but only if the current codepoint could still match: the
-% loop stops early otherwise and we move forward.
-% \begin{macrocode}
-\cs_new:Npn \@@_map_class:Nnnn #1#2#3#4
- {
- \exp_args:Nv \@@_map_class:nNnnn { c_@@_grapheme_ #4 _clist }
- #1 {#2} {#3} {#4}
- }
-\cs_new:Npn \@@_map_class:nNnnn #1#2#3#4#5
- {
- \@@_map_class_loop:Nnnnw #2 {#3} {#4} {#5}
- #1 , \q_@@_recursion_tail .. , \q_@@_recursion_stop
- }
-\cs_new:Npn \@@_map_class_loop:Nnnnw #1#2#3#4 #5 .. #6 ,
- {
- \@@_if_q_recursion_tail_stop_do:nn {#5}
- { \use:c { @@_map_not_ #4 :Nnn } #1 {#2} {#3} }
- \@@_codepoint_compare:nNnTF {#3} < { "#5 }
- {
- \@@_map_class_end:nw
- { \use:c { @@_map_not_ #4 :Nnn } #1 {#2} {#3} }
- }
- {
- \@@_codepoint_compare:nNnTF {#3} > { "#6 }
- { \@@_map_class_loop:Nnnnw #1 {#2} {#3} {#4} }
- {
- \@@_map_class_end:nw
- { \use:c { @@_map_ #4 :Nnn } #1 {#2} {#3} }
- }
- }
- }
-\cs_new:Npn \@@_map_class_end:nw #1#2 \q_@@_recursion_stop {#1}
-% \end{macrocode}
-% Break before \emph{and} after.
-% \begin{macrocode}
-\cs_new:Npn \@@_map_Control:Nnn #1#2#3
- {
- \@@_map_output:Nn #1 {#2}
- \@@_map_output:Nn #1 {#3}
- \@@_map_loop:Nnw #1 { }
- }
-% \end{macrocode}
-% Keep collecting.
-% \begin{macrocode}
-\cs_new:Npn \@@_map_Extend:Nnn #1#2#3
- { \@@_map_loop:Nnw #1 {#2#3} }
-\cs_new_eq:NN \@@_map_SpacingMark:Nnn \@@_map_Extend:Nnn
-% \end{macrocode}
-% Outputting anything earlier, the combine with what follows. The only
-% exclusions are control characters.
-% \begin{macrocode}
-\cs_new:Npn \@@_map_Prepend:Nnn #1#2#3
- {
- \@@_map_output:Nn #1 {#2}
- \@@_map_lookahead:NnNw #1 {#3} \@@_map_Prepend_aux:Nnn
- }
-\cs_new:Npn \@@_map_Prepend_aux:Nnn #1#2#3
- {
- \bool_lazy_or:nnTF
- { \@@_codepoint_compare_p:nNn {#3} = { "0A } }
- { \@@_codepoint_compare_p:nNn {#3} = { "0D } }
- {
- #1 {#2}
- \@@_map_loop:Nnw #1 {#3}
- }
- {
- \exp_args:NV \@@_map_Prepend:nNnn
- \c_@@_grapheme_Control_clist
- #1 {#2} {#3}
- }
- }
-\cs_new:Npn \@@_map_Prepend:nNnn #1#2#3#4
- {
- \@@_map_Prepend_loop:Nnnw #2 {#3} {#4}
- #1 , \q_@@_recursion_tail .. , \q_@@_recursion_stop
- }
-\cs_new:Npn \@@_map_Prepend_loop:Nnnw #1#2#3 #4 .. #5 ,
- {
- \@@_if_q_recursion_tail_stop_do:nn {#4}
- { \@@_map_loop:Nnw #1 {#2#3} }
- \@@_codepoint_compare:nNnTF {#3} < { "#4 }
- {
- \@@_map_class_end:nw
- { \@@_map_loop:Nnw #1 {#2#3} }
- }
- {
- \@@_codepoint_compare:nNnTF {#3} > { "#5 }
- { \@@_map_Prepend_loop:Nnnw #1 {#2} {#3} }
- {
- \@@_map_class_end:nw
- { \@@_map_loop:Nnw #1 {#2} #3 }
- }
- }
- }
-% \end{macrocode}
-% Dealing with end-of-class is done such that we can be flexible.
-% \begin{macrocode}
-\cs_new:Npn \@@_map_not_Control:Nnn #1#2#3
- { \@@_map_class:Nnnn #1 {#2} {#3} { Extend } }
-\cs_new:Npn \@@_map_not_Extend:Nnn #1#2#3
- { \@@_map_class:Nnnn #1 {#2} {#3} { SpacingMark } }
-\cs_new:Npn \@@_map_not_SpacingMark:Nnn #1#2#3
- { \@@_map_class:Nnnn #1 {#2} {#3} { Prepend } }
-\cs_new:Npn \@@_map_not_Prepend:Nnn #1#2#3
- { \@@_map_class:Nnnn #1 {#2} {#3} { L } }
-\cs_new:Npn \@@_map_not_L:Nnn #1#2#3
- { \@@_map_class:Nnnn #1 {#2} {#3} { LV } }
-\cs_new:Npn \@@_map_not_LV:Nnn #1#2#3
- { \@@_map_class:Nnnn #1 {#2} {#3} { V } }
-\cs_new:Npn \@@_map_not_V:Nnn #1#2#3
- { \@@_map_class:Nnnn #1 {#2} {#3} { LVT } }
-\cs_new:Npn \@@_map_not_LVT:Nnn #1#2#3
- { \@@_map_class:Nnnn #1 {#2} {#3} { T } }
-\cs_new:Npn \@@_map_not_T:Nnn #1#2#3
- { \@@_map_class:Nnnn #1 {#2} {#3} { Regional_Indicator } }
-\cs_new:Npn \@@_map_not_Regional_Indicator:Nnn #1#2#3
- {
- \@@_map_output:Nn #1 {#2}
- \@@_map_loop:Nnw #1 {#3}
- }
-% \end{macrocode}
-% Hangul needs additional treatment. First we have to deal with
-% the start-of-Hangul position: output what we had up to now, then
-% move the specialist handler. The idea here is to pick off the
-% different codepoint types one at a time, tracking what else can be
-% considered at each stage until we hit the end of the viable types.
-% Other than that, we just keep building up the Hangul codepoints
-% using a dedicated version of the loop from above.
-% \begin{macrocode}
-\cs_new:Npn \@@_map_L:Nnn #1#2#3
- {
- \@@_map_output:Nn #1 {#2}
- \@@_map_hangul:Nnnw
- #1 {#3} { L ; V ; LV ; LVT }
- }
-\cs_new:Npn \@@_map_LV:Nnn #1#2#3
- {
- \@@_map_output:Nn #1 {#2}
- \@@_map_hangul:Nnnw
- #1 {#3} { V ; T }
- }
-\cs_new_eq:NN \@@_map_V:Nnn \@@_map_LV:Nnn
-\cs_new:Npn \@@_map_LVT:Nnn #1#2#3
- {
- \@@_map_output:Nn #1 {#2}
- \@@_map_hangul:Nnnw
- #1 {#3} { T }
- }
-\cs_new_eq:NN \@@_map_T:Nnn \@@_map_LVT:Nnn
-\cs_new:Npn \@@_map_hangul:Nnnw #1#2#3#4 \q_@@_recursion_stop
- {
- \tl_if_head_is_N_type:nTF {#4}
- { \@@_map_hangul:NnnN #1 {#2} {#3} }
- {
- #1 {#2}
- \@@_map_loop:Nnw #1 { }
- }
- #4 \q_@@_recursion_stop
- }
-\cs_new:Npn \@@_map_hangul:NnnN #1#2#3#4
- {
- \@@_if_q_recursion_tail_stop_do:Nn #4
- {
- #1 {#2}
- \text_map_break:
- }
- \token_if_cs:NTF #4
- {
- #1 {#2}
- \@@_map_loop:Nnw #1 { }
- }
- {
- \@@_codepoint_process:nN
- { \@@_map_hangul:Nnnn #1 {#2} {#3} } #4
- }
- }
-\cs_new:Npn \@@_map_hangul:Nnnn #1#2#3#4
- {
- \@@_map_hangul_aux:Nnnw #1 {#2} {#4}
- #3 ; \q_recursion_tail ; \q_recursion_stop
- }
-\cs_new:Npn \@@_map_hangul_aux:Nnnw #1#2#3#4 ;
- {
- \quark_if_recursion_tail_stop_do:nn {#4}
- { \@@_map_loop:Nnw #1 {#2} #3 }
- \exp_args:Nv \@@_map_hangul:nNnnnw { c_@@_grapheme_ #4 _clist }
- #1 {#2} {#3} {#4}
- }
-\cs_new:Npn \@@_map_hangul:nNnnnw #1#2#3#4#5#6 \q_recursion_stop
- {
- \@@_map_hangul_loop:Nnnnnw #2 {#3} {#4} {#5} {#6}
- #1 , \q_@@_recursion_tail .. , \q_@@_recursion_stop
- }
-\cs_new:Npn \@@_map_hangul_loop:Nnnnnw #1#2#3#4#5 #6 .. #7 ,
- {
- \@@_if_q_recursion_tail_stop_do:nn {#6}
- { \@@_map_hangul_next:Nnnn #1 {#2} {#3} {#5} }
- \@@_codepoint_compare:nNnTF {#3} < { "#6 }
- {
- \@@_map_hangul_end:nw
- { \@@_map_hangul_next:Nnnn #1 {#2} {#3} {#5} }
- }
- {
- \@@_codepoint_compare:nNnTF {#3} > { "#7 }
- { \@@_map_hangul_loop:Nnnnnw #1 {#2} {#3} {#4} {#5} }
- {
- \@@_map_hangul_end:nw
- { \use:c { @@_map_hangul_ #4 :Nnn } #1 {#2} {#3} }
- }
- }
- }
-\cs_new:Npn \@@_map_hangul_next:Nnnn #1#2#3#4
- { \@@_map_hangul_aux:Nnnw #1 {#2} {#3} #4 \q_recursion_stop }
-\cs_new:Npn \@@_map_hangul_end:nw #1#2 \q_@@_recursion_stop {#1}
-\cs_new:Npn \@@_map_hangul_L:Nnn #1#2#3
- {
- \@@_map_hangul:Nnnw
- #1 {#2#3} { L V { LV } { LVT } }
- }
-\cs_new:Npn \@@_map_hangul_LV:Nnn #1#2#3
- {
- \@@_map_hangul:Nnnw
- #1 {#2#3} { VT }
- }
-\cs_new_eq:NN \@@_map_hangul_V:Nnn \@@_map_hangul_LV:Nnn
-\cs_new:Npn \@@_map_hangul_LVT:Nnn #1#2#3
- {
- \@@_map_hangul:Nnnw
- #1 {#2#3} { T }
- }
-\cs_new_eq:NN \@@_map_hangul_T:Nnn \@@_map_hangul_LVT:Nnn
-% \end{macrocode}
-% The Regional Indicator rule means looking ahead and dealing with the
-% case where there are two in a row. So we use a look ahead to pick them
-% off. As there is only one range the values are hard-coded.
-% \begin{macrocode}
-\cs_new:Npn \@@_map_Regional_Indicator:Nnn #1#2#3
- {
- \@@_map_output:Nn #1 {#2}
- \@@_map_lookahead:NnNw #1 {#3} \@@_map_Regional_Indicator_aux:Nnn
- }
-\cs_new:Npn \@@_map_Regional_Indicator_aux:Nnn #1#2#3
- {
- \bool_lazy_or:nnTF
- { \@@_codepoint_compare_p:nNn {#3} < { "1F1E6 } }
- { \@@_codepoint_compare_p:nNn {#3} > { "1F1FF } }
- {
- \@@_map_loop:Nnw #1 {#2} #3
- }
- { \@@_map_loop:Nnw #1 {#2#3} }
- }
-% \end{macrocode}
-% A generic loop-ahead setup.
-% \begin{macrocode}
-\cs_new:Npn \@@_map_lookahead:NnNw #1#2#3#4 \q_@@_recursion_stop
- {
- \tl_if_head_is_N_type:nTF {#4}
- { \@@_map_lookahead:NnNN #1 {#2} #3 }
- { \@@_map_loop:Nnw #1 {#2} }
- #4 \q_@@_recursion_stop
- }
-\cs_new:Npn \@@_map_lookahead:NnNN #1#2#3#4
- {
- \@@_if_q_recursion_tail_stop_do:Nn #4 { #1 {#2} }
- \token_if_cs:NTF #4
- {
- #1 {#2}
- \@@_map_loop:Nnw #1 { }
- }
- { \@@_codepoint_process:nN { #3 #1 {#2} } }
- #4
- }
-% \end{macrocode}
-% For the end of the process.
-% \begin{macrocode}
-\cs_new:Npn \@@_map_output:Nn #1#2
- { \tl_if_blank:nF {#2} { #1 {#2} } }
-\cs_new:Npn \text_map_break:
- { \prg_map_break:Nn \text_map_break: { } }
-\cs_new:Npn \text_map_break:n
- { \prg_map_break:Nn \text_map_break: }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\text_map_inline:nn}
-% The standard non-expandable inline version.
-% \begin{macrocode}
-\cs_new_protected:Npn \text_map_inline:nn #1#2
- {
- \int_gincr:N \g__kernel_prg_map_int
- \cs_gset_protected:cpn
- { @@_map_ \int_use:N \g__kernel_prg_map_int :w } ##1 {#2}
- \exp_args:Nnc \text_map_function:nN {#1}
- { @@_map_ \int_use:N \g__kernel_prg_map_int :w }
- \prg_break_point:Nn \text_map_break:
- { \int_gdecr:N \g__kernel_prg_map_int }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3text-purify.dtx b/macros/latex/contrib/l3kernel/l3text-purify.dtx
deleted file mode 100644
index 8f92c1eae9..0000000000
--- a/macros/latex/contrib/l3kernel/l3text-purify.dtx
+++ /dev/null
@@ -1,797 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3text-purify.dtx
-%
-% Copyright (C) 2020-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3text-purify} module\\ Text processing (purification)^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3text-purify} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=text>
-% \end{macrocode}
-%
-% \subsection{Purifying text}
-%
-% \begin{macro}[EXP]{\@@_if_recursion_tail_stop:N}
-% Functions to query recursion quarks.
-% \begin{macrocode}
-\__kernel_quark_new_test:N \@@_if_recursion_tail_stop:N
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\text_purify:n, \@@_purify:n}
-% \begin{macro}[EXP]{\@@_purify_store:n}
-% \begin{macro}[EXP]{\@@_purify_store:nw}
-% \begin{macro}[EXP]{\@@_purify_end:w}
-% \begin{macro}[EXP]{\@@_purify_loop:w}
-% \begin{macro}[EXP]{\@@_purify_group:n}
-% \begin{macro}[EXP]{\@@_purify_space:w}
-% \begin{macro}[EXP]{\@@_purify_N_type:N, \@@_purify_N_type_aux:N}
-% \begin{macro}[EXP]{\@@_purify_math_search:NNN}
-% \begin{macro}[EXP]{\@@_purify_math_start:NNw}
-% \begin{macro}[EXP]{\@@_purify_math_store:n}
-% \begin{macro}[EXP]{\@@_purify_math_store:nw}
-% \begin{macro}[EXP]{\@@_purify_math_end:w}
-% \begin{macro}[EXP]{\@@_purify_math_loop:NNw}
-% \begin{macro}[EXP]{\@@_purify_math_N_type:NNN}
-% \begin{macro}[EXP]{\@@_purify_math_group:NNn}
-% \begin{macro}[EXP]{\@@_purify_math_space:NNw}
-% \begin{macro}[EXP]{\@@_purify_math_cmd:N}
-% \begin{macro}[EXP]{\@@_purify_math_cmd:NN}
-% \begin{macro}[EXP]{\@@_purify_math_cmd:Nn}
-% \begin{macro}[EXP]{\@@_purify_replace:N}
-% \begin{macro}[EXP]{\@@_purify_replace_auxi:n, \@@_purify_replace_auxii:n}
-% \begin{macro}[EXP]{\@@_purify_expand:N, \@@_purify_protect:N, \@@_purify_encoding:N}
-% \begin{macro}[EXP]{\@@_purify_encoding_escape:NN}
-% As in the other parts of the module, we start off with a standard
-% \enquote{action} loop, with expansion applied up-front.
-% \begin{macrocode}
-\cs_new:Npn \text_purify:n #1
- {
- \__kernel_exp_not:w \exp_after:wN
- {
- \exp:w
- \exp_args:Ne \@@_purify:n
- { \text_expand:n {#1} }
- }
- }
-\cs_new:Npn \@@_purify:n #1
- {
- \group_align_safe_begin:
- \@@_purify_loop:w #1
- \q_@@_recursion_tail \q_@@_recursion_stop
- \@@_purify_result:n { }
- }
-% \end{macrocode}
-% As for expansion, collect up the tokens for future use.
-% \begin{macrocode}
-\cs_new:Npn \@@_purify_store:n #1
- { \@@_purify_store:nw {#1} }
-\cs_new:Npn \@@_purify_store:nw #1#2 \@@_purify_result:n #3
- { #2 \@@_purify_result:n { #3 #1 } }
-\cs_new:Npn \@@_purify_end:w #1 \@@_purify_result:n #2
- {
- \group_align_safe_end:
- \exp_end:
- #2
- }
-% \end{macrocode}
-% The main loop is a standard \enquote{tl action}. Unlike the expansion
-% or case changing, here any groups have to be run inline. Most of the
-% business end is as before in the \texttt{N}-type token processing.
-% \begin{macrocode}
-\cs_new:Npn \@@_purify_loop:w #1 \q_@@_recursion_stop
- {
- \tl_if_head_is_N_type:nTF {#1}
- { \@@_purify_N_type:N }
- {
- \tl_if_head_is_group:nTF {#1}
- { \@@_purify_group:n }
- { \@@_purify_space:w }
- }
- #1 \q_@@_recursion_stop
- }
-\cs_new:Npn \@@_purify_group:n #1 { \@@_purify_loop:w #1 }
-\exp_last_unbraced:NNo \cs_new:Npn \@@_purify_space:w \c_space_tl
- {
- \@@_purify_store:n { ~ }
- \@@_purify_loop:w
- }
-% \end{macrocode}
-% The first part of handling math mode is exactly the same as in the
-% other functions: look for a start-of-math mode token and if found start
-% a new loop tracking the closing token.
-% \begin{macrocode}
-\cs_new:Npn \@@_purify_N_type:N #1
- {
- \@@_if_q_recursion_tail_stop_do:Nn #1 { \@@_purify_end:w }
- \@@_purify_N_type_aux:N #1
- }
-\cs_new:Npn \@@_purify_N_type_aux:N #1
- {
- \exp_after:wN \@@_purify_math_search:NNN
- \exp_after:wN #1 \l_text_math_delims_tl
- \q_@@_recursion_tail ?
- \q_@@_recursion_stop
- }
-\cs_new:Npn \@@_purify_math_search:NNN #1#2#3
- {
- \@@_if_q_recursion_tail_stop_do:Nn #2
- { \@@_purify_math_cmd:N #1 }
- \token_if_eq_meaning:NNTF #1 #2
- {
- \@@_use_i_delimit_by_q_recursion_stop:nw
- { \@@_purify_math_start:NNw #2 #3 }
- }
- { \@@_purify_math_search:NNN #1 }
- }
-\cs_new:Npn \@@_purify_math_start:NNw #1#2#3 \q_@@_recursion_stop
- {
- \@@_purify_math_loop:NNw #1#2#3 \q_@@_recursion_stop
- \@@_purify_math_result:n { }
- }
-\cs_new:Npn \@@_purify_math_store:n #1
- { \@@_purify_math_store:nw {#1} }
-\cs_new:Npn \@@_purify_math_store:nw #1#2 \@@_purify_math_result:n #3
- { #2 \@@_purify_math_result:n { #3 #1 } }
-\cs_new:Npn \@@_purify_math_end:w #1 \@@_purify_math_result:n #2
- {
- \@@_purify_store:n { $ #2 $ }
- \@@_purify_loop:w #1
- }
-\cs_new:Npn \@@_purify_math_stop:Nw #1 \@@_purify_math_result:n #2
- {
- \@@_purify_store:n {#1#2}
- \@@_purify_end:w
- }
-\cs_new:Npn \@@_purify_math_loop:NNw #1#2#3 \q_@@_recursion_stop
- {
- \tl_if_head_is_N_type:nTF {#3}
- { \@@_purify_math_N_type:NNN }
- {
- \tl_if_head_is_group:nTF {#3}
- { \@@_purify_math_group:NNn }
- { \@@_purify_math_space:NNw }
- }
- #1#2#3 \q_@@_recursion_stop
- }
-\cs_new:Npn \@@_purify_math_N_type:NNN #1#2#3
- {
- \@@_if_q_recursion_tail_stop_do:Nn #3
- { \@@_purify_math_stop:Nw #1 }
- \token_if_eq_meaning:NNTF #3 #2
- { \@@_purify_math_end:w }
- {
- \@@_purify_math_store:n {#3}
- \@@_purify_math_loop:NNw #1#2
- }
- }
-\cs_new:Npn \@@_purify_math_group:NNn #1#2#3
- {
- \@@_purify_math_store:n { {#3} }
- \@@_purify_math_loop:NNw #1#2
- }
-\exp_after:wN \cs_new:Npn \exp_after:wN \@@_purify_math_space:NNw
- \exp_after:wN # \exp_after:wN 1
- \exp_after:wN # \exp_after:wN 2 \c_space_tl
- {
- \@@_purify_math_store:n { ~ }
- \@@_purify_math_loop:NNw #1#2
- }
-% \end{macrocode}
-% Then handle math mode as an argument: same outcomes, different input
-% syntax.
-% \begin{macrocode}
-\cs_new:Npn \@@_purify_math_cmd:N #1
- {
- \exp_after:wN \@@_purify_math_cmd:NN \exp_after:wN #1
- \l_text_math_arg_tl \q_@@_recursion_tail \q_@@_recursion_stop
- }
-\cs_new:Npn \@@_purify_math_cmd:NN #1#2
- {
- \@@_if_q_recursion_tail_stop_do:Nn #2
- { \@@_purify_replace:N #1 }
- \cs_if_eq:NNTF #2 #1
- {
- \@@_use_i_delimit_by_q_recursion_stop:nw
- { \@@_purify_math_cmd:n }
- }
- { \@@_purify_math_cmd:NN #1 }
- }
-\cs_new:Npn \@@_purify_math_cmd:n #1
- { \@@_purify_math_end:w \@@_purify_math_result:n {#1} }
-% \end{macrocode}
-% For \texttt{N}-type tokens, we first look for a string-context replacement
-% before anything else: this can therefore cover anything. Assuming we don't
-% find one, check to see if we can expand control sequences: if not, they have
-% to be dropped. We also allow for \LaTeXe{} \tn{protect}: there's an
-% assumption that we don't have |\protect { \oops }| or similar, but that's
-% also in the expansion code and seems like a reasonable balance.
-% \begin{macrocode}
-\cs_new:Npn \@@_purify_replace:N #1
- {
- \bool_lazy_and:nnTF
- { \cs_if_exist_p:c { l_@@_purify_ \token_to_str:N #1 _tl } }
- {
- \bool_lazy_or_p:nn
- { \token_if_cs_p:N #1 }
- { \token_if_active_p:N #1 }
- }
- {
- \exp_args:Nv \@@_purify_replace_auxi:n
- { l_@@_purify_ \token_to_str:N #1 _tl }
- }
- {
- \exp_args:Ne \@@_purify_replace_auxii:n
- { \@@_token_to_explicit:N #1 }
- }
- }
-\cs_new:Npn \@@_purify_replace_auxi:n #1 { \@@_purify_loop:w #1 }
-\cs_new:Npn \@@_purify_replace_auxii:n #1
- {
- \token_if_cs:NTF #1
- { \@@_purify_expand:N #1 }
- {
- \@@_purify_store:n {#1}
- \@@_purify_loop:w
- }
- }
-\cs_new:Npn \@@_purify_expand:N #1
- {
- \str_if_eq:nnTF {#1} { \protect }
- { \@@_purify_protect:N }
- { \@@_purify_encoding:N #1 }
- }
-\cs_new:Npn \@@_purify_protect:N #1
- {
- \@@_if_q_recursion_tail_stop_do:Nn #1 { \@@_purify_end:w }
- \@@_purify_loop:w
- }
-% \end{macrocode}
-% Handle encoding commands, as detailed for expansion.
-% \begin{macrocode}
-\cs_new:Npn \@@_purify_encoding:N #1
- {
- \bool_lazy_or:nnTF
- { \cs_if_eq_p:NN #1 \@current@cmd }
- { \cs_if_eq_p:NN #1 \@changed@cmd }
- { \@@_purify_encoding_escape:NN }
- {
- \@@_if_expandable:NTF #1
- { \exp_after:wN \@@_purify_loop:w #1 }
- { \@@_purify_loop:w }
- }
- }
-\cs_new:Npn \@@_purify_encoding_escape:NN #1#2
- {
- \@@_purify_store:n {#1}
- \@@_purify_loop:w
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \text_declare_purify_equivalent:Nn,
-% \text_declare_purify_equivalent:Ne
-% }
-% \begin{macrocode}
-\cs_new_protected:Npn \text_declare_purify_equivalent:Nn #1#2
- {
- \tl_clear_new:c { l_@@_purify_ \token_to_str:N #1 _tl }
- \tl_set:cn { l_@@_purify_ \token_to_str:N #1 _tl } {#2}
- }
-\cs_generate_variant:Nn \text_declare_purify_equivalent:Nn { Ne }
-% \end{macrocode}
-% \end{macro}
-%
-% Now pre-define a range of standard commands that need dedicated definitions
-% in purified text. First handle font-related stuff: all of this needs to be
-% disabled.
-% \begin{macrocode}
-\tl_map_inline:nn
- {
- \fontencoding
- \fontfamily
- \fontseries
- \fontshape
- }
- { \text_declare_purify_equivalent:Nn #1 { \use_none:n } }
-\text_declare_purify_equivalent:Nn \fontsize { \use_none:nn }
-\text_declare_purify_equivalent:Nn \selectfont { }
-\text_declare_purify_equivalent:Nn \usefont { \use_none:nnnn }
-\tl_map_inline:nn
- {
- \emph
- \text
- \textnormal
- \textrm
- \textsf
- \texttt
- \textbf
- \textmd
- \textit
- \textsl
- \textup
- \textsc
- \textulc
- }
- { \text_declare_purify_equivalent:Nn #1 { \use:n } }
-\tl_map_inline:nn
- {
- \normalfont
- \rmfamily
- \sffamily
- \ttfamily
- \bfseries
- \mdseries
- \itshape
- \scshape
- \slshape
- \upshape
- \em
- \Huge
- \LARGE
- \Large
- \footnotesize
- \huge
- \large
- \normalsize
- \scriptsize
- \small
- \tiny
- }
- { \text_declare_purify_equivalent:Nn #1 { } }
-\exp_args:Nc \text_declare_purify_equivalent:Nn
- { @protected@testopt } { \use_none:nnn }
-% \end{macrocode}
-% Environments have to be handled by pure expansion.
-%
-% \begin{macro}{\@@_end_env:n}
-% \begin{macrocode}
-\text_declare_purify_equivalent:Nn \begin { \use:c }
-\text_declare_purify_equivalent:Nn \end { \@@_end_env:n }
-\cs_new:Npn \@@_end_env:n #1 { \cs:w end #1 \cs_end: }
-% \end{macrocode}
-% \end{macro}
-%
-% Some common symbols and similar ideas.
-% \begin{macrocode}
-\text_declare_purify_equivalent:Nn \\ { }
-\tl_map_inline:nn
- { \{ \} \# \$ \% \_ }
- { \text_declare_purify_equivalent:Ne #1 { \cs_to_str:N #1 } }
-% \end{macrocode}
-% Cross-referencing.
-% \begin{macrocode}
-\text_declare_purify_equivalent:Nn \label { \use_none:n }
-% \end{macrocode}
-% Spaces.
-% \begin{macrocode}
-\group_begin:
-\char_set_catcode_active:N \~
-\use:n
- {
- \group_end:
- \text_declare_purify_equivalent:Ne ~ { \c_space_tl }
- }
-\text_declare_purify_equivalent:Nn \nobreakspace { ~ }
-\text_declare_purify_equivalent:Nn \ { ~ }
-\text_declare_purify_equivalent:Nn \, { ~ }
-% \end{macrocode}
-%
-% \subsection{Accent and letter-like data for purifying text}
-%
-% In contrast to case changing, both $8$-bit and Unicode engines need
-% information for text purification to handle accents and letter-like
-% functions: these all need to be removed. However, the results are
-% of course engine-dependent.
-%
-% For the letter-like commands, life is relatively easy: they are all
-% simply added as standard exceptions. The only oddity is \tn{SS}, which
-% gets converted to two letters. (At some stage an alternative version
-% can presumably be added to \pkg{babel} or similar.)
-% \begin{macrocode}
-\cs_set_protected:Npn \@@_loop:Nn #1#2
- {
- \quark_if_recursion_tail_stop:N #1
- \text_declare_purify_equivalent:Ne #1
- {
- \codepoint_generate:nn {"#2}
- { \char_value_catcode:n {"#2} }
- }
- \@@_loop:Nn
- }
-\@@_loop:Nn
- \AA { 00C5 }
- \AE { 00C6 }
- \DH { 00D0 }
- \DJ { 0110 }
- \IJ { 0132 }
- \L { 0141 }
- \NG { 014A }
- \O { 00D8 }
- \OE { 0152 }
- \TH { 00DE }
- \aa { 00E5 }
- \ae { 00E6 }
- \dh { 00F0 }
- \dj { 0111 }
- \i { 0131 }
- \j { 0237 }
- \ij { 0132 }
- \l { 0142 }
- \ng { 014B }
- \o { 00F8 }
- \oe { 0153 }
- \ss { 00DF }
- \th { 00FE }
- \q_recursion_tail ?
- \q_recursion_stop
-\text_declare_purify_equivalent:Nn \SS { SS }
-% \end{macrocode}
-%
-% \begin{macro}[rEXP]{\@@_purify_accent:NN}
-% Accent \textsc{licr} handling is a little more complex. Accents may exist
-% as pre-composed codepoints or as independent glyphs. The former are all
-% saved as single token lists, whilst for the latter the combining accent
-% needs to be re-ordered compared to the character it applies to.
-% \begin{macrocode}
-\cs_new:Npn \@@_purify_accent:NN #1#2
- {
- \cs_if_exist:cTF
- { c_@@_purify_ \token_to_str:N #1 _ \token_to_str:N #2 _tl }
- {
- \exp_not:v
- { c_@@_purify_ \token_to_str:N #1 _ \token_to_str:N #2 _tl }
- }
- {
- \exp_not:n {#2}
- \exp_not:v { c_@@_purify_ \token_to_str:N #1 _tl }
- }
- }
-\tl_map_inline:nn { \` \' \^ \~ \= \u \. \" \r \H \v \d \c \k \b \t }
- { \text_declare_purify_equivalent:Nn #1 { \@@_purify_accent:NN #1 } }
-% \end{macrocode}
-% First set up the combining accents.
-% \begin{macrocode}
-\group_begin:
- \cs_set_protected:Npn \@@_loop:Nn #1#2
- {
- \quark_if_recursion_tail_stop:N #1
- \tl_const:ce { c_@@_purify_ \token_to_str:N #1 _tl }
- { \codepoint_generate:nn {"#2} { \char_value_catcode:n { "#2 } } }
- \@@_loop:Nn
- }
- \@@_loop:Nn
- \` { 0300 }
- \' { 0301 }
- \^ { 0302 }
- \~ { 0303 }
- \= { 0304 }
- \u { 0306 }
- \. { 0307 }
- \" { 0308 }
- \r { 030A }
- \H { 030B }
- \v { 030C }
- \d { 0323 }
- \c { 0327 }
- \k { 0328 }
- \b { 0331 }
- \t { 0361 }
- \q_recursion_tail { }
- \q_recursion_stop
-% \end{macrocode}
-% Now we handle the pre-composed accents: the list here is taken from
-% \texttt{puenc.def}. All of the precomposed cases take a single letter
-% as their second argument. We do not try to cover the case where an accent
-% is added to a \enquote{real} dotless-i or -j, or a \ae/\AE. Rather, we
-% assume that if the \textsc{utf}-8 character is used, it will have the
-% real accent character too.
-% \begin{macrocode}
- \cs_set_protected:Npn \@@_loop:NNn #1#2#3
- {
- \quark_if_recursion_tail_stop:N #1
- \tl_const:ce
- { c_@@_purify_ \token_to_str:N #1 _ \token_to_str:N #2 _tl }
- { \codepoint_generate:nn {"#3} { \char_value_catcode:n { "#3 } } }
- \@@_loop:NNn
- }
- \@@_loop:NNn
- \` A { 00C0 }
- \' A { 00C1 }
- \^ A { 00C2 }
- \~ A { 00C3 }
- \" A { 00C4 }
- \r A { 00C5 }
- \c C { 00C7 }
- \` E { 00C8 }
- \' E { 00C9 }
- \^ E { 00CA }
- \" E { 00CB }
- \` I { 00CC }
- \' I { 00CD }
- \^ I { 00CE }
- \" I { 00CF }
- \~ N { 00D1 }
- \` O { 00D2 }
- \' O { 00D3 }
- \^ O { 00D4 }
- \~ O { 00D5 }
- \" O { 00D6 }
- \` U { 00D9 }
- \' U { 00DA }
- \^ U { 00DB }
- \" U { 00DC }
- \' Y { 00DD }
- \` a { 00E0 }
- \' a { 00E1 }
- \^ a { 00E2 }
- \~ a { 00E3 }
- \" a { 00E4 }
- \r a { 00E5 }
- \c c { 00E7 }
- \` e { 00E8 }
- \' e { 00E9 }
- \^ e { 00EA }
- \" e { 00EB }
- \` i { 00EC }
- \` \i { 00EC }
- \' i { 00ED }
- \' \i { 00ED }
- \^ i { 00EE }
- \^ \i { 00EE }
- \" i { 00EF }
- \" \i { 00EF }
- \~ n { 00F1 }
- \` o { 00F2 }
- \' o { 00F3 }
- \^ o { 00F4 }
- \~ o { 00F5 }
- \" o { 00F6 }
- \` u { 00F9 }
- \' u { 00FA }
- \^ u { 00FB }
- \" u { 00FC }
- \' y { 00FD }
- \" y { 00FF }
- \= A { 0100 }
- \= a { 0101 }
- \u A { 0102 }
- \u a { 0103 }
- \k A { 0104 }
- \k a { 0105 }
- \' C { 0106 }
- \' c { 0107 }
- \^ C { 0108 }
- \^ c { 0109 }
- \. C { 010A }
- \. c { 010B }
- \v C { 010C }
- \v c { 010D }
- \v D { 010E }
- \v d { 010F }
- \= E { 0112 }
- \= e { 0113 }
- \u E { 0114 }
- \u e { 0115 }
- \. E { 0116 }
- \. e { 0117 }
- \k E { 0118 }
- \k e { 0119 }
- \v E { 011A }
- \v e { 011B }
- \^ G { 011C }
- \^ g { 011D }
- \u G { 011E }
- \u g { 011F }
- \. G { 0120 }
- \. g { 0121 }
- \c G { 0122 }
- \c g { 0123 }
- \^ H { 0124 }
- \^ h { 0125 }
- \~ I { 0128 }
- \~ i { 0129 }
- \~ \i { 0129 }
- \= I { 012A }
- \= i { 012B }
- \= \i { 012B }
- \u I { 012C }
- \u i { 012D }
- \u \i { 012D }
- \k I { 012E }
- \k i { 012F }
- \k \i { 012F }
- \. I { 0130 }
- \^ J { 0134 }
- \^ j { 0135 }
- \^ \j { 0135 }
- \c K { 0136 }
- \c k { 0137 }
- \' L { 0139 }
- \' l { 013A }
- \c L { 013B }
- \c l { 013C }
- \v L { 013D }
- \v l { 013E }
- \. L { 013F }
- \. l { 0140 }
- \' N { 0143 }
- \' n { 0144 }
- \c N { 0145 }
- \c n { 0146 }
- \v N { 0147 }
- \v n { 0148 }
- \= O { 014C }
- \= o { 014D }
- \u O { 014E }
- \u o { 014F }
- \H O { 0150 }
- \H o { 0151 }
- \' R { 0154 }
- \' r { 0155 }
- \c R { 0156 }
- \c r { 0157 }
- \v R { 0158 }
- \v r { 0159 }
- \' S { 015A }
- \' s { 015B }
- \^ S { 015C }
- \^ s { 015D }
- \c S { 015E }
- \c s { 015F }
- \v S { 0160 }
- \v s { 0161 }
- \c T { 0162 }
- \c t { 0163 }
- \v T { 0164 }
- \v t { 0165 }
- \~ U { 0168 }
- \~ u { 0169 }
- \= U { 016A }
- \= u { 016B }
- \u U { 016C }
- \u u { 016D }
- \r U { 016E }
- \r u { 016F }
- \H U { 0170 }
- \H u { 0171 }
- \k U { 0172 }
- \k u { 0173 }
- \^ W { 0174 }
- \^ w { 0175 }
- \^ Y { 0176 }
- \^ y { 0177 }
- \" Y { 0178 }
- \' Z { 0179 }
- \' z { 017A }
- \. Z { 017B }
- \. z { 017C }
- \v Z { 017D }
- \v z { 017E }
- \v A { 01CD }
- \v a { 01CE }
- \v I { 01CF }
- \v \i { 01D0 }
- \v i { 01D0 }
- \v O { 01D1 }
- \v o { 01D2 }
- \v U { 01D3 }
- \v u { 01D4 }
- \v G { 01E6 }
- \v g { 01E7 }
- \v K { 01E8 }
- \v k { 01E9 }
- \k O { 01EA }
- \k o { 01EB }
- \v \j { 01F0 }
- \v j { 01F0 }
- \' G { 01F4 }
- \' g { 01F5 }
- \` N { 01F8 }
- \` n { 01F9 }
- \' \AE { 01FC }
- \' \ae { 01FD }
- \' \O { 01FE }
- \' \o { 01FF }
- \v H { 021E }
- \v h { 021F }
- \. A { 0226 }
- \. a { 0227 }
- \c E { 0228 }
- \c e { 0229 }
- \. O { 022E }
- \. o { 022F }
- \= Y { 0232 }
- \= y { 0233 }
- \q_recursion_tail ? { }
- \q_recursion_stop
-\group_end:
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3text.dtx b/macros/latex/contrib/l3kernel/l3text.dtx
deleted file mode 100644
index 5feff565b9..0000000000
--- a/macros/latex/contrib/l3kernel/l3text.dtx
+++ /dev/null
@@ -1,1453 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3text.dtx
-%
-% Copyright (C) 2020-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3text} module\\ Text processing^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% This module deals with manipulation of (formatted) text; such material is
-% comprised of a restricted set of token list content. The functions provided
-% here concern conversion of textual content for example in case changing,
-% generation of bookmarks and extraction to tags. All of the major functions
-% operate by expansion. Begin-group and end-group tokens in the \meta{text}
-% are normalized and become |{| and |}|, respectively.
-%
-% \section{Expanding text}
-%
-% \begin{function}[EXP, added = 2020-01-02, updated = 2023-06-09]
-% {\text_expand:n}
-% \begin{syntax}
-% \cs{text_expand:n} \Arg{text}
-% \end{syntax}
-% Takes user input \meta{text} and expands the content.
-% Protected commands (typically
-% formatting) are left in place, and no processing takes place of
-% math mode material (as delimited by pairs given in
-% \cs{l_text_math_delims_tl} or as the argument to commands listed
-% in \cs{l_text_math_arg_tl}). Commands which are neither engine-
-% nor \LaTeX{} protected are expanded exhaustively.
-% Any commands listed in \cs{l_text_expand_exclude_tl} are excluded from
-% expansion, as are those in \cs{l_text_case_exclude_arg_tl} and
-% \cs{l_text_math_arg_tl}.
-% \end{function}
-%
-% \begin{function}[added = 2020-01-22]
-% {
-% \text_declare_expand_equivalent:Nn ,
-% \text_declare_expand_equivalent:cn
-% }
-% \begin{syntax}
-% \cs{text_declare_expand_equivalent:Nn} \meta{cmd} \Arg{replacement}
-% \end{syntax}
-% Declares that the \meta{replacement} tokens should be used whenever the
-% \meta{cmd} (a single token) is encountered. The \meta{replacement} tokens
-% should be expandable. A token can be \enquote{replaced} by itself if
-% the defined replacement wraps it in \cs{exp_not:n}, for example
-% \begin{verbatim}
-% \text_declare_expand_equivalent:Nn \' { \exp_not:n { \' } }
-% \end{verbatim}
-% \end{function}
-%
-% \section{Case changing}
-%
-% \begin{function}[EXP, added = 2019-11-20, updated = 2023-07-08]
-% {
-% \text_lowercase:n, \text_uppercase:n, \text_titlecase_all:n,
-% \text_titlecase_first:n,
-% \text_lowercase:nn, \text_uppercase:nn, \text_titlecase_all:nn,
-% \text_titlecase_first:nn
-% }
-% \begin{syntax}
-% \cs{text_uppercase:n} \Arg{tokens}
-% \cs{text_uppercase:nn} \Arg{BCP-47} \Arg{tokens}
-% \end{syntax}
-% Takes user input \meta{text} first applies \cs{text_expand:n}, then
-% transforms the case of character tokens as specified by the
-% function name. The category code of letters are not changed by this
-% process when Unicode engines are used; in $8$-bit engines, case changed
-% charters in the ASCII range will have the current prevailing category code,
-% while those outside of it will be represented by active characters.
-% \end{function}
-%
-% Upper- and lowercase have the obvious meanings. Titlecasing may be regarded
-% informally as converting the first character of the \meta{tokens} to
-% uppercase. However, the process is more complex
-% than this as there are some situations where a single lowercase character
-% maps to a special form, for example \texttt{ij} in Dutch which becomes
-% \texttt{IJ}. There are two functions available for titlecasing: one which
-% applies the change to each \enquote{word} and a second which only applies
-% at the start of the input. (Here, \enquote{word} boundaries are spaces:
-% at present, full Unicode word breaking is not attempted.)
-%
-% Importantly, notice that these functions are intended for working with
-% user \emph{text for typesetting}. For case changing programmatic data see
-% the \pkg{l3str} module and discussion there of \cs{str_lowercase:n},
-% \cs{str_uppercase:n} and \cs{str_casefold:n}.
-%
-% Case changing does not take place within math mode material so for example
-% \begin{verbatim}
-% \text_uppercase:n { Some~text~$y = mx + c$~with~{Braces} }
-% \end{verbatim}
-% becomes
-% \begin{verbatim}
-% SOME TEXT $y = mx + c$ WITH {BRACES}
-% \end{verbatim}
-%
-% The first mandatory argument of commands listed in
-% \cs{l_text_case_exclude_arg_tl}
-% is excluded from case changing; the latter are entirely non-textual
-% content (such as labels).
-%
-% The standard mappings
-% here follow those defined by the \href{http://www.unicode.org}^^A
-% {Unicode Consortium} in \texttt{UnicodeData.txt} and
-% \texttt{SpecialCasing.txt}. For \pTeX{}, only the ASCII range is
-% covered as the engine treats input outside of this range as east Asian.
-%
-% Locale-sensitive conversions are enabled using the \meta{BCP-47}
-% argument, and follow Unicode Consortium guidelines. Currently, the
-% locale strings recognized for special handling are as follows.
-% \begin{itemize}
-% \item Armenian (\texttt{hy} and \texttt{hy-x-yiwn})
-% The setting \texttt{hy} maps the codepoint U+0587, the ligature of
-% letters ech and yiwn, to the codepoints for capital ech and vew
-% when uppercasing: this follows the spelling reform which is used
-% in Armenia. The alternative \texttt{hy-x-yiwn} maps U+0587 to
-% capital ech and yiwn on uppercasing (also the output if Armenian
-% is not selected at all).
-% \item Azeri and Turkish (\texttt{az} and \texttt{tr}).
-% The case pairs I/i-dotless and I-dot/i are activated for these
-% languages. The combining dot mark is removed when lowercasing
-% I-dot and introduced when upper casing i-dotless.
-% \item German (\texttt{de-x-eszett}).
-% An alternative mapping for German in which the lowercase
-% \emph{Eszett} maps to a \emph{gro\ss{}es Eszett}.
-% \item Greek (\texttt{el}).
-% Removes accents from Greek letters when uppercasing; titlecasing
-% leaves accents in place. A variant \texttt{el-x-iota} is available
-% which converts the \textit{ypogegrammeni} (subscript muted iota)
-% to capital iota when uppercasing: the standard version retains the
-% subscript versions.
-% \item Lithuanian (\texttt{lt}).
-% The lowercase letters i and j should retain a dot above when the
-% accents grave, acute or tilde are present. This is implemented for
-% lowercasing of the relevant uppercase letters both when input as
-% single Unicode codepoints and when using combining accents. The
-% combining dot is removed when uppercasing in these cases. Note that
-% \emph{only} the accents used in Lithuanian are covered: the behaviour
-% of other accents are not modified.
-% \item Medieval Latin (\texttt{la-x-medieval}).
-% The characters |u| and |V| are interchanged on case changing.
-% \item Dutch (\texttt{nl}).
-% Capitalisation of \texttt{ij} at the beginning of titlecased
-% input produces \texttt{IJ} rather than \texttt{Ij}.
-% \end{itemize}
-%
-% Determining whether non-letter characters at the start of text should count
-% as the uppercase element is controllable. When
-% \cs{l_text_titlecase_check_letter_bool} is \texttt{true}, codepoints which are
-% not letters (Unicode general category \texttt{L}) are not changed, and only
-% the first \emph{letter} is uppercased.
-% When \cs{l_text_titlecase_check_letter_bool} is \texttt{false}, the first
-% codepoint is uppercased, irrespective of the general code of the character.
-%
-% \begin{function}[added = 2022-07-04]
-% {\text_declare_case_equivalent:Nn}
-% \begin{syntax}
-% \cs{text_declare_case_equivalent:Nn} \meta{cmd} \Arg{replacement}
-% \end{syntax}
-% Declares that the \meta{replacement} tokens should be used whenever the
-% \meta{cmd} (a single token) is encountered during case changing.
-% \end{function}
-%
-% \begin{function}[added = 2023-04-11, updated = 2023-04-20]
-% {
-% \text_declare_lowercase_mapping:nn ,
-% \text_declare_lowercase_mapping:nnn ,
-% \text_declare_titlecase_mapping:nn ,
-% \text_declare_titlecase_mapping:nnn ,
-% \text_declare_uppercase_mapping:nn ,
-% \text_declare_uppercase_mapping:nnn
-% }
-% \begin{syntax}
-% \cs{text_declare_lowercase_mapping:nn} \Arg{codeppoint} \Arg{replacement}
-% \cs{text_declare_lowercase_mapping:nnn} \Arg{BCP-47} \Arg{codeppoint} \Arg{replacement}
-% \end{syntax}
-% Declares that the \meta{replacement} tokens should be used when case mapping
-% the \meta{codepoint}, rather than the standard mapping given in the
-% Unicode data files. The \texttt{nnn} version takes a BCP-47 tag, which
-% can be used to specify that the customisation only applies to that
-% locale.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2022-07-04]{\text_case_switch:nnnn}
-% \begin{syntax}
-% \cs{text_case_switch:nnnn} \Arg{normal} \Arg{upper} \Arg{lower} \Arg{title}
-% \end{syntax}
-% Context-sensitive function which will expand to one of the \meta{normal},
-% \meta{upper}, \meta{lower} or \meta{title} tokens depending on the current
-% case changing operation. Outside of case changing, the \meta{normal} tokens
-% are produced. Within case changing, the appropriate mapping tokens are
-% inserted.
-% \end{function}
-%
-% \section{Removing formatting from text}
-%
-% \begin{function}[EXP, added = 2020-03-05, updated = 2020-05-14]{\text_purify:n}
-% \begin{syntax}
-% \cs{text_purify:n} \Arg{text}
-% \end{syntax}
-% Takes user input \meta{text} and expands as described for
-% \cs{text_expand:n}, then removes all functions from the resulting
-% text. Math mode material (as delimited by pairs given in
-% \cs{l_text_math_delims_tl} or as the argument to commands listed in
-% \cs{l_text_math_arg_tl}) is left contained in a pair of |$| delimiters.
-% Non-expandable functions present in the \meta{text} must either have a
-% defined equivalent (see \cs{text_declare_purify_equivalent:Nn}) or will
-% be removed from the result. Implicit tokens are converted to their
-% explicit equivalent.
-% \end{function}
-%
-% \begin{function}[added = 2020-03-05]
-% {
-% \text_declare_purify_equivalent:Nn ,
-% \text_declare_purify_equivalent:Ne
-% }
-% \begin{syntax}
-% \cs{text_declare_purify_equivalent:Nn} \meta{cmd} \Arg{replacement}
-% \end{syntax}
-% Declares that the \meta{replacement} tokens should be used whenever the
-% \meta{cmd} (a single token) is encountered. The \meta{replacement} tokens
-% should be expandable.
-% \end{function}
-%
-% \section{Control variables}
-%
-% \begin{variable}{\l_text_math_arg_tl}
-% Lists commands present in the \meta{text} where the argument of the
-% command should be treated as math mode material. The treatment here is
-% similar to \cs{l_text_math_delims_tl} but for a command rather than
-% paired delimiters.
-% \end{variable}
-%
-% \begin{variable}{\l_text_math_delims_tl}
-% Lists pairs of tokens which delimit (in-line) math mode content; such
-% content \emph{may} be excluded from processing.
-% \end{variable}
-%
-% \begin{variable}{\l_text_case_exclude_arg_tl}
-% Lists commands where the first mandatory argument is excluded from
-% case changing.
-% \end{variable}
-%
-% \begin{variable}{\l_text_expand_exclude_tl}
-% Lists commands which are excluded from expansion. This protection
-% includes everything up to and including their first braced argument.
-% \end{variable}
-%
-% \begin{variable}{\l_text_titlecase_check_letter_bool}
-% Controls how the start of titlecasing is handled: when \texttt{true}, the
-% first \emph{letter} in text is considered. The standard setting is
-% \texttt{true}.
-% \end{variable}
-%
-% \section{Mapping to graphemes}
-%
-% Grapheme splitting is implemented using the algorithm described in Unicode
-% Standard Annex \#29. This includes support for extended grapheme clusters.
-% Text starting with a line feed or carriage return character will drop this
-% due to standard \TeX{} processing. At present extended pictograms are
-% not supported: these may be added in a future release.
-%
-% \begin{function}[rEXP, added = 2022-08-04]{\text_map_function:nN}
-% \begin{syntax}
-% \cs{text_map_function:nN} \meta{text} \Arg{function}
-% \end{syntax}
-% Takes user input \meta{text} and expands as described for
-% \cs{text_expand:n}, then maps over the \emph{graphemes} within the
-% result, passing each grapheme to the \meta{function}.
-% Broadly a grapheme is a \enquote{user perceived character}:
-% the Unicode Consortium describe the decomposition of input to
-% graphemes in depth, and the approach used here implements that
-% algorithm. The \meta{function} should accept one argument as \meta{balanced
-% text}: this may be comprise codepoints or may be a control sequence.
-% With $8$-bit engines, the codepoint(s) themselves may of course be
-% made up of multiple bytes: the mapping will pass the correct codepoints
-% independent of the engine in use.
-% See also \cs{text_map_inline:nn}.
-% \end{function}
-%
-% \begin{function}[added = 2022-08-04]{\text_map_inline:nn}
-% \begin{syntax}
-% \cs{text_map_inline:nn} \meta{text} \Arg{inline function}
-% \end{syntax}
-% Takes user input \meta{text} and expands as described for
-% \cs{text_expand:n}, then maps over the \emph{graphemes} within the
-% result, passing each grapheme to the \meta{inline function}.
-% Broadly a grapheme is a \enquote{user perceived character}:
-% the Unicode Consortium describe the decomposition of input to
-% graphemes in depth, and the approach used here implements that
-% algorithm. The \meta{inline function} should consist of code which
-% receives the grapheme as \meta{balanced
-% text}: this may be comprise codepoints or may be a control sequence.
-% With $8$-bit engines, the codepoint(s) themselves may of course be
-% made up of multiple bytes: the mapping will pass the correct codepoints
-% independent of the engine in use.
-% See also \cs{text_map_function:nN}.
-% \end{function}
-%
-% \begin{function}[rEXP, added = 2022-08-04]
-% {\text_map_break:, \text_map_break:n}
-% \begin{syntax}
-% \cs{text_map_break:}
-% \cs{text_map_break:n} \Arg{code}
-% \end{syntax}
-% Used to terminate a \cs[no-index]{text_map_\ldots} function before all
-% entries in the \meta{text} have been processed. This
-% normally takes place within a conditional statement.
-% \end{function}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3text} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=text>
-% \end{macrocode}
-%
-% \begin{macrocode}
-\cs_generate_variant:Nn \tl_if_head_eq_meaning_p:nN { o }
-% \end{macrocode}
-%
-% \subsection{Internal auxiliaries}
-%
-% \begin{variable}{\s_@@_stop}
-% Internal scan marks.
-% \begin{macrocode}
-\scan_new:N \s_@@_stop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\q_@@_nil}
-% Internal quarks.
-% \begin{macrocode}
-\quark_new:N \q_@@_nil
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[pTF]{\@@_quark_if_nil:n}
-% Branching quark conditional.
-% \begin{macrocode}
-\__kernel_quark_new_conditional:Nn \@@_quark_if_nil:n { TF }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\q_@@_recursion_tail,\q_@@_recursion_stop}
-% Internal recursion quarks.
-% \begin{macrocode}
-\quark_new:N \q_@@_recursion_tail
-\quark_new:N \q_@@_recursion_stop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[EXP]{\@@_use_i_delimit_by_q_recursion_stop:nw}
-% Functions to gobble up to a quark.
-% \begin{macrocode}
-\cs_new:Npn \@@_use_i_delimit_by_q_recursion_stop:nw
- #1 #2 \q_@@_recursion_stop {#1}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_if_q_recursion_tail_stop_do:Nn}
-% \begin{macro}[EXP]{\@@_if_q_recursion_tail_stop_do:nn}
-% Functions to query recursion quarks.
-% \begin{macrocode}
-\__kernel_quark_new_test:N \@@_if_q_recursion_tail_stop_do:Nn
-\__kernel_quark_new_test:N \@@_if_q_recursion_tail_stop_do:nn
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{variable}{\s_@@_recursion_tail,\s_@@_recursion_stop}
-% Internal scan marks quarks.
-% \begin{macrocode}
-\scan_new:N \s_@@_recursion_tail
-\scan_new:N \s_@@_recursion_stop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[EXP]{\@@_use_i_delimit_by_s_recursion_stop:nw}
-% Functions to gobble up to a scan mark.
-% \begin{macrocode}
-\cs_new:Npn \@@_use_i_delimit_by_s_recursion_stop:nw
- #1 #2 \s_@@_recursion_stop {#1}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_if_s_recursion_tail_stop_do:Nn}
-% Functions to query recursion scan marks. Slower than a quark
-% test but needed to avoid issues in the outer expansion loop
-% with unterminated \tn{romannumeral} primitives.
-% \begin{macrocode}
-\cs_new:Npn \@@_if_s_recursion_tail_stop_do:Nn #1
- {
- \bool_lazy_and:nnTF
- { \cs_if_eq_p:NN \s_@@_recursion_tail #1 }
- { \str_if_eq_p:nn { \s_@@_recursion_tail } {#1} }
- { \@@_use_i_delimit_by_s_recursion_stop:nw }
- { \use_none:n }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Utilities}
-%
-% \begin{macro}[EXP]
-% {
-% \@@_token_to_explicit:N ,
-% \@@_token_to_explicit_char:N ,
-% \@@_token_to_explicit_cs:N ,
-% \@@_token_to_explicit_cs_aux:N
-% }
-% \begin{macro}[EXP]{\@@_token_to_explicit:n}
-% \begin{macro}[EXP]
-% {
-% \@@_token_to_explicit_auxi:w ,
-% \@@_token_to_explicit_auxii:w ,
-% \@@_token_to_explicit_auxiii:w
-% }
-% The idea here is to take a token and ensure that if it's an implicit
-% char, we output the explicit version. Otherwise, the token needs to be
-% unchanged. First, we have to split between control sequences and everything
-% else.
-% \begin{macrocode}
-\group_begin:
- \char_set_catcode_active:n { 0 }
- \cs_new:Npn \@@_token_to_explicit:N #1
- {
- \if_catcode:w \exp_not:N #1
- \if_catcode:w \scan_stop: \exp_not:N #1
- \scan_stop:
- \else:
- \exp_not:N ^^@
- \fi:
- \exp_after:wN \@@_token_to_explicit_cs:N
- \else:
- \exp_after:wN \@@_token_to_explicit_char:N
- \fi:
- #1
- }
-\group_end:
-% \end{macrocode}
-% For control sequences, we can check for macros versus other cases using
-% \cs{if_meaning:w}, then explicitly check for \tn{chardef} and
-% \tn{mathchardef}.
-% \begin{macrocode}
-\cs_new:Npn \@@_token_to_explicit_cs:N #1
- {
- \exp_after:wN \if_meaning:w \exp_not:N #1 #1
- \exp_after:wN \use:nn \exp_after:wN
- \@@_token_to_explicit_cs_aux:N
- \else:
- \exp_after:wN \exp_not:n
- \fi:
- {#1}
- }
-\cs_new:Npn \@@_token_to_explicit_cs_aux:N #1
- {
- \bool_lazy_or:nnTF
- { \token_if_chardef_p:N #1 }
- { \token_if_mathchardef_p:N #1 }
- {
- \char_generate:nn {#1}
- {
- \if_int_compare:w \char_value_catcode:n {#1} = 10 \exp_stop_f:
- 10
- \else:
- 12
- \fi:
- }
- }
- {#1}
- }
-% \end{macrocode}
-% For character tokens, we need to filter out the implicit characters from
-% those that are explicit. That's done here, then if necessary we work out
-% the category code and generate the char. To avoid issues with alignment
-% tabs, that one is done by elimination rather than looking up the code
-% explicitly. The trick with finding the charcode is that the \TeX{}
-% messages are either \texttt{the \meta{something} character \meta{char}}
-% or \texttt{the \meta{type} \meta{char}}.
-% \begin{macrocode}
-\cs_new:Npn \@@_token_to_explicit_char:N #1
- {
- \if:w
- \if_catcode:w ^ \exp_args:No \str_tail:n { \token_to_str:N #1 } ^
- \token_to_str:N #1 #1
- \else:
- AB
- \fi:
- \exp_after:wN \exp_not:n
- \else:
- \exp_after:wN \@@_token_to_explicit:n
- \fi:
- {#1}
- }
-\cs_new:Npn \@@_token_to_explicit:n #1
- {
- \exp_after:wN \@@_token_to_explicit_auxi:w
- \int_value:w
- \if_catcode:w \c_group_begin_token #1 1 \else:
- \if_catcode:w \c_group_end_token #1 2 \else:
- \if_catcode:w \c_math_toggle_token #1 3 \else:
- \if_catcode:w ## #1 6 \else:
- \if_catcode:w ^ #1 7 \else:
- \if_catcode:w \c_math_subscript_token #1 8 \else:
- \if_catcode:w \c_space_token #1 10 \else:
- \if_catcode:w A #1 11 \else:
- \if_catcode:w + #1 12 \else:
- 4 \fi: \fi: \fi: \fi: \fi: \fi: \fi: \fi: \fi:
- \exp_after:wN ;
- \token_to_meaning:N #1 \s_@@_stop
- }
-\cs_new:Npn \@@_token_to_explicit_auxi:w #1 ; #2 \s_@@_stop
- {
- \char_generate:nn
- {
- \if_int_compare:w #1 < 9 \exp_stop_f:
- \exp_after:wN \@@_token_to_explicit_auxii:w
- \else:
- \exp_after:wN \@@_token_to_explicit_auxiii:w
- \fi:
- #2
- }
- {#1}
- }
-\exp_last_unbraced:NNNNo \cs_new:Npn \@@_token_to_explicit_auxii:w
- #1 { \tl_to_str:n { character ~ } } { ` }
-\cs_new:Npn \@@_token_to_explicit_auxiii:w #1 ~ #2 ~ { ` }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_char_catcode:N}
-% An idea from \pkg{l3char}: we need to get the category code of
-% a specific token, not the general case.
-% \begin{macrocode}
-\cs_new:Npn \@@_char_catcode:N #1
- {
- \if_catcode:w \exp_not:N #1 \c_math_toggle_token
- 3
- \else:
- \if_catcode:w \exp_not:N #1 \c_alignment_token
- 4
- \else:
- \if_catcode:w \exp_not:N #1 \c_math_superscript_token
- 7
- \else:
- \if_catcode:w \exp_not:N #1 \c_math_subscript_token
- 8
- \else:
- \if_catcode:w \exp_not:N #1 \c_space_token
- 10
- \else:
- \if_catcode:w \exp_not:N #1 \c_catcode_letter_token
- 11
- \else:
- \if_catcode:w \exp_not:N #1 \c_catcode_other_token
- 12
- \else:
- 13
- \fi:
- \fi:
- \fi:
- \fi:
- \fi:
- \fi:
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP, TF]{\@@_if_expandable:N}
-% Test for tokens that make sense to expand here: that is more
-% restrictive than the engine view.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \@@_if_expandable:N #1 { T , F , TF }
- {
- \token_if_expandable:NTF #1
- {
- \bool_lazy_any:nTF
- {
- { \token_if_protected_macro_p:N #1 }
- { \token_if_protected_long_macro_p:N #1 }
- { \token_if_eq_meaning_p:NN \q_@@_recursion_tail #1 }
- }
- { \prg_return_false: }
- { \prg_return_true: }
- }
- { \prg_return_false: }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Codepoint utilities}
-%
-% For working with codepoints in an engine-neutral way.
-%
-% \begin{macro}[EXP]{\@@_codepoint_process:nN, \@@_codepoint_process_aux:nN}
-% \begin{macro}[EXP]{\@@_codepoint_process:nNN}
-% \begin{macro}[EXP]{\@@_codepoint_process:nNNN}
-% \begin{macro}[EXP]{\@@_codepoint_process:nNNNN}
-% Grab a codepoint and apply some code to it: here |#1| should expect one
-% following \emph{balanced text}.
-% \begin{macrocode}
-\bool_lazy_or:nnTF
- { \sys_if_engine_luatex_p: }
- { \sys_if_engine_xetex_p: }
- {
- \cs_new:Npn \@@_codepoint_process:nN #1#2 { #1 {#2} }
- }
- {
- \cs_new:Npe \@@_codepoint_process:nN #1#2
- {
- \exp_not:N \int_compare:nNnTF {`#2} > { "80 }
- {
- \sys_if_engine_pdftex:TF
- { \exp_not:N \@@_codepoint_process_aux:nN }
- {
- \exp_not:N \int_compare:nNnTF {`#2} > { "FF }
- { \exp_not:N \use:n }
- { \exp_not:N \@@_codepoint_process_aux:nN }
- }
- }
- { \exp_not:N \use:n }
- {#1} #2
- }
- \cs_new:Npn \@@_codepoint_process_aux:nN #1#2
- {
- \int_compare:nNnTF { `#2 } < { "E0 }
- { \@@_codepoint_process:nNN }
- {
- \int_compare:nNnTF { `#2 } < { "F0 }
- { \@@_codepoint_process:nNNN }
- { \@@_codepoint_process:nNNNN }
- }
- {#1} #2
- }
- \cs_new:Npn \@@_codepoint_process:nNN #1#2#3
- { #1 {#2#3} }
- \cs_new:Npn \@@_codepoint_process:nNNN #1#2#3#4
- { #1 {#2#3#4} }
- \cs_new:Npn \@@_codepoint_process:nNNNN #1#2#3#4#5
- { #1 {#2#3#4#5} }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP, pTF]{\@@_codepoint_compare:nNn}
-% \begin{macro}[EXP]
-% {\@@_codepoint_from_chars:Nw, \@@_codepoint_from_chars_aux:Nw}
-% \begin{macro}[EXP]{\@@_codepoint_from_chars:N}
-% \begin{macro}[EXP]{\@@_codepoint_from_chars:NN}
-% \begin{macro}[EXP]{\@@_codepoint_from_chars:NNN}
-% \begin{macro}[EXP]{\@@_codepoint_from_chars:NNNN}
-% Allows comparison for all engines using a first \enquote{character} followed
-% by a codepoint.
-% \begin{macrocode}
-\bool_lazy_or:nnTF
- { \sys_if_engine_luatex_p: }
- { \sys_if_engine_xetex_p: }
- {
- \prg_new_conditional:Npnn
- \@@_codepoint_compare:nNn #1#2#3 { TF , p }
- {
- \int_compare:nNnTF {`#1} #2 {#3}
- \prg_return_true: \prg_return_false:
- }
- \cs_new:Npn \@@_codepoint_from_chars:Nw #1 {`#1}
- }
- {
- \prg_new_conditional:Npnn
- \@@_codepoint_compare:nNn #1#2#3 { TF , p }
- {
- \int_compare:nNnTF { \@@_codepoint_from_chars:Nw #1 }
- #2 {#3}
- \prg_return_true: \prg_return_false:
- }
- \cs_new:Npe \@@_codepoint_from_chars:Nw #1
- {
- \exp_not:N \if_int_compare:w `#1 > "80 \exp_not:N \exp_stop_f:
- \sys_if_engine_pdftex:TF
- {
- \exp_not:N \exp_after:wN
- \exp_not:N \@@_codepoint_from_chars_aux:Nw
- }
- {
- \exp_not:N \if_int_compare:w `#1 > "FF \exp_not:N \exp_stop_f:
- \exp_not:N \exp_after:wN \exp_not:N \exp_after:wN
- \exp_not:N \exp_after:wN
- \exp_not:N \@@_codepoint_from_chars:N
- \exp_not:N \else:
- \exp_not:N \exp_after:wN \exp_not:N \exp_after:wN
- \exp_not:N \exp_after:wN
- \exp_not:N \@@_codepoint_from_chars_aux:Nw
- \exp_not:N \fi:
- }
- \exp_not:N \else:
- \exp_not:N \exp_after:wN \exp_not:N \@@_codepoint_from_chars:N
- \exp_not:N \fi:
- #1
- }
- \cs_new:Npn \@@_codepoint_from_chars_aux:Nw #1
- {
- \if_int_compare:w `#1 < "E0 \exp_stop_f:
- \exp_after:wN \@@_codepoint_from_chars:NN
- \else:
- \if_int_compare:w `#1 < "F0 \exp_stop_f:
- \exp_after:wN \exp_after:wN \exp_after:wN
- \@@_codepoint_from_chars:NNN
- \else:
- \exp_after:wN \exp_after:wN \exp_after:wN
- \@@_codepoint_from_chars:NNNN
- \fi:
- \fi:
- #1
- }
- \cs_new:Npn \@@_codepoint_from_chars:N #1 {`#1}
- \cs_new:Npn \@@_codepoint_from_chars:NN #1#2
- { (`#1 - "C0) * "40 + `#2 - "80 }
- \cs_new:Npn \@@_codepoint_from_chars:NNN #1#2#3
- { (`#1 - "E0) * "1000 + (`#2 - "80) * "40 + `#3 - "80 }
- \cs_new:Npn \@@_codepoint_from_chars:NNNN #1#2#3#4
- {
- (`#1 - "F0) * "40000
- + (`#2 - "80) * "1000
- + (`#3 - "80) * "40
- + `#4 - "80
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Configuration variables}
-%
-% \begin{variable}[deprecated]{\l_text_accents_tl, \l_text_letterlike_tl}
-% Used to be used for excluding these ideas from expansion: now deprecated.
-% \begin{macrocode}
-\tl_new:N \l_text_accents_tl
-\tl_new:N \l_text_letterlike_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_text_case_exclude_arg_tl}
-% Non-text arguments, including covering the case of \tn{protected@edef}
-% applied to \cs{cite}.
-% \begin{macrocode}
-\tl_new:N \l_text_case_exclude_arg_tl
-\tl_set:Ne \l_text_case_exclude_arg_tl
- {
- \exp_not:n { \begin \cite \end \label \ref }
- \exp_not:c { cite ~ }
- \exp_not:n { \babelshorthand }
- }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_text_math_arg_tl}
-% Math mode as arguments.
-% \begin{macrocode}
-\tl_new:N \l_text_math_arg_tl
-\tl_set:Nn \l_text_math_arg_tl { \ensuremath }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_text_math_delims_tl}
-% Paired math mode delimiters.
-% \begin{macrocode}
-\tl_new:N \l_text_math_delims_tl
-\tl_set:Nn \l_text_math_delims_tl { $ $ \( \) }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_text_expand_exclude_tl}
-% Commands which need not to expand. We start with a somewhat historical
-% list, and tidy up if possible.
-% \begin{macrocode}
-\tl_new:N \l_text_expand_exclude_tl
-\tl_set:Nn \l_text_expand_exclude_tl
- { \begin \cite \end \label \ref }
-\bool_lazy_and:nnT
- { \str_if_eq_p:Vn \fmtname { LaTeX2e } }
- { \tl_if_exist_p:N \@expl@finalise@setup@@@@ }
- {
- \tl_gput_right:Nn \@expl@finalise@setup@@@@
- {
- \tl_gput_right:Nn \@kernel@after@begindocument
- {
- \group_begin:
- \cs_set_protected:Npn \@@_tmp:w #1
- {
- \tl_clear:N \l_text_expand_exclude_tl
- \tl_map_inline:nn {#1}
- {
- \bool_lazy_any:nF
- {
- { \token_if_protected_macro_p:N ##1 }
- { \token_if_protected_long_macro_p:N ##1 }
- {
- \str_if_eq_p:ee
- { \cs_replacement_spec:N ##1 }
- { \exp_not:n { \protect ##1 } \c_space_tl }
- }
- }
- { \tl_put_right:Nn \l_text_expand_exclude_tl {##1} }
- }
- }
- \exp_args:NV \@@_tmp:w \l_text_expand_exclude_tl
- \exp_args:NNNV \group_end:
- \tl_set:Nn \l_text_expand_exclude_tl \l_text_expand_exclude_tl
- }
- }
- }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\l_@@_math_mode_tl}
-% Used to control math mode output: internal as there is a dedicated
-% setter.
-% \begin{macrocode}
-\tl_new:N \l_@@_math_mode_tl
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Expansion to formatted text}
-%
-% \begin{variable}{\c_@@_chardef_space_token, \c_@@_mathchardef_space_token}
-% \begin{variable}
-% {\c_@@_chardef_group_begin_token, \c_@@_mathchardef_group_begin_token}
-% \begin{variable}
-% {\c_@@_chardef_group_end_token, \c_@@_mathchardef_group_end_token}
-% Markers for implict char handling.
-% \begin{macrocode}
-\tex_global:D \tex_chardef:D \c_@@_chardef_space_token = `\ %
-\tex_global:D \tex_mathchardef:D \c_@@_mathchardef_space_token = `\ %
-\tex_global:D \tex_chardef:D \c_@@_chardef_group_begin_token = `\{ % `\}
-\tex_global:D \tex_mathchardef:D \c_@@_mathchardef_group_begin_token = `\{ % `\} `\{
-\tex_global:D \tex_chardef:D \c_@@_chardef_group_end_token = `\} % `\{
-\tex_global:D \tex_mathchardef:D \c_@@_mathchardef_group_end_token = `\} %
-% \end{macrocode}
-% \end{variable}
-% \end{variable}
-% \end{variable}
-%
-% \begin{macro}[EXP]{\text_expand:n, \@@_expand:n}
-% \begin{macro}[EXP]{\@@_expand_result:n}
-% \begin{macro}[EXP]{\@@_expand_store:n, \@@_expand_store:o}
-% \begin{macro}[EXP]{\@@_expand_store:nw}
-% \begin{macro}[EXP]{\@@_expand_end:w}
-% \begin{macro}[EXP]{\@@_expand_loop:w}
-% \begin{macro}[EXP]{\@@_expand_group:n}
-% \begin{macro}[EXP]{\@@_expand_space:w}
-% \begin{macro}[EXP]{\@@_expand_N_type:N}
-% \begin{macro}[EXP]{\@@_expand_math_search:NNN}
-% \begin{macro}[EXP]{\@@_expand_math_loop:Nw}
-% \begin{macro}[EXP]{\@@_expand_math_N_type:NN}
-% \begin{macro}[EXP]{\@@_expand_math_group:Nn}
-% \begin{macro}[EXP]{\@@_expand_math_space:Nw}
-% \begin{macro}[EXP]
-% {
-% \@@_expand_explicit:N ,
-% \@@_expand_exclude:N
-% }
-% \begin{macro}[EXP]{\@@_expand_exclude_switch:Nnnnn}
-% \begin{macro}[EXP]{\@@_expand_exclude:nN}
-% \begin{macro}[EXP]{\@@_expand_exclude:NN}
-% \begin{macro}[EXP]{\@@_expand_exclude:Nw}
-% \begin{macro}[EXP]{\@@_expand_exclude:Nnn}
-% \begin{macro}[EXP]{\@@_expand_accent:N}
-% \begin{macro}[EXP]{\@@_expand_accent:NN}
-% \begin{macro}[EXP]{\@@_expand_letterlike:N}
-% \begin{macro}[EXP]{\@@_expand_letterlike:NN}
-% \begin{macro}[EXP]{\@@_expand_cs:N}
-% \begin{macro}[EXP]{\@@_expand_protect:w}
-% \begin{macro}[EXP]{\@@_expand_protect:N}
-% \begin{macro}[EXP]{\@@_expand_protect:nN}
-% \begin{macro}[EXP]{\@@_expand_protect:Nw}
-% \begin{macro}[EXP]{\@@_expand_testopt:N}
-% \begin{macro}[EXP]{\@@_expand_testopt:NNn}
-% \begin{macro}[EXP]{\@@_expand_encoding:N, \@@_expand_encoding_escape:N}
-% \begin{macro}[EXP]{\@@_expand_replace:N}
-% \begin{macro}[EXP]{\@@_expand_replace:n}
-% \begin{macro}[EXP]{\@@_expand_cs_expand:N}
-% \begin{macro}[EXP]{\@@_expand_unexpanded:w}
-% \begin{macro}[EXP]{\@@_expand_unexpanded_test:w}
-% \begin{macro}[EXP]{\@@_expand_unexpanded:N}
-% \begin{macro}[EXP]{\@@_expand_unexpanded:n}
-% After precautions against |&| tokens, start a simple loop: that of
-% course means that \enquote{text} cannot contain the two recursion
-% quarks. The loop here must be \texttt{f}-type expandable; we have
-% arbitrary user commands which might be protected \emph{and} take
-% arguments, and if the expansion code is used in a typesetting
-% context, that will otherwise explode. (The same issue applies more
-% clearly to case changing: see the example there.) The outer
-% loop has to use scan marks as delimiters to protect against
-% unterminated \tn{romannumeral} usage in the input.
-% \begin{macrocode}
-\cs_new:Npn \text_expand:n #1
- {
- \__kernel_exp_not:w \exp_after:wN
- {
- \exp:w
- \@@_expand:n {#1}
- }
- }
-\cs_new:Npn \@@_expand:n #1
- {
- \group_align_safe_begin:
- \@@_expand_loop:w #1
- \s_@@_recursion_tail \s_@@_recursion_stop
- \@@_expand_result:n { }
- }
-% \end{macrocode}
-% The approach to making the code \texttt{f}-type expandable is to usee
-% a marker result token and to shuffle the collected tokens
-% \begin{macrocode}
-\cs_new:Npn \@@_expand_store:n #1
- { \@@_expand_store:nw {#1} }
-\cs_generate_variant:Nn \@@_expand_store:n { o }
-\cs_new:Npn \@@_expand_store:nw #1#2 \@@_expand_result:n #3
- { #2 \@@_expand_result:n { #3 #1 } }
-\cs_new:Npn \@@_expand_end:w #1 \@@_expand_result:n #2
- {
- \group_align_safe_end:
- \exp_end:
- #2
- }
-% \end{macrocode}
-% The main loop is a standard \enquote{tl action}; groups are handled
-% recursively, while spaces are just passed through. Thus all of the
-% action is in handling \texttt{N}-type tokens.
-% \begin{macrocode}
-\cs_new:Npn \@@_expand_loop:w #1 \s_@@_recursion_stop
- {
- \tl_if_head_is_N_type:nTF {#1}
- { \@@_expand_N_type:N }
- {
- \tl_if_head_is_group:nTF {#1}
- { \@@_expand_group:n }
- { \@@_expand_space:w }
- }
- #1 \s_@@_recursion_stop
- }
-\cs_new:Npn \@@_expand_group:n #1
- {
- \@@_expand_store:o
- {
- \exp_after:wN
- {
- \exp:w
- \@@_expand:n {#1}
- }
- }
- \@@_expand_loop:w
- }
-\exp_last_unbraced:NNo \cs_new:Npn \@@_expand_space:w \c_space_tl
- {
- \@@_expand_store:n { ~ }
- \@@_expand_loop:w
- }
-% \end{macrocode}
-% The first step in dealing with \texttt{N}-type tokens is to look for
-% math mode material: that needs to be left alone. The starting function
-% has to be split into two as we need \cs{quark_if_recursion_tail_stop:N}
-% first before we can trigger the search. We then look for matching
-% pairs of delimiters, allowing for the case where math mode starts
-% but does not end. Within math mode, we simply pass all the tokens
-% through unchanged, just checking the \texttt{N}-type ones against the
-% end marker.
-% \begin{macrocode}
-\cs_new:Npn \@@_expand_N_type:N #1
- {
- \@@_if_s_recursion_tail_stop_do:Nn #1
- { \@@_expand_end:w }
- \exp_after:wN \@@_expand_math_search:NNN
- \exp_after:wN #1 \l_text_math_delims_tl
- \q_@@_recursion_tail \q_@@_recursion_tail
- \q_@@_recursion_stop
- }
-\cs_new:Npn \@@_expand_math_search:NNN #1#2#3
- {
- \@@_if_q_recursion_tail_stop_do:Nn #2
- { \@@_expand_explicit:N #1 }
- \token_if_eq_meaning:NNTF #1 #2
- {
- \@@_use_i_delimit_by_q_recursion_stop:nw
- {
- \@@_expand_store:n {#1}
- \@@_expand_math_loop:Nw #3
- }
- }
- { \@@_expand_math_search:NNN #1 }
- }
-\cs_new:Npn \@@_expand_math_loop:Nw #1#2 \s_@@_recursion_stop
- {
- \tl_if_head_is_N_type:nTF {#2}
- { \@@_expand_math_N_type:NN }
- {
- \tl_if_head_is_group:nTF {#2}
- { \@@_expand_math_group:Nn }
- { \@@_expand_math_space:Nw }
- }
- #1#2 \s_@@_recursion_stop
- }
-\cs_new:Npn \@@_expand_math_N_type:NN #1#2
- {
- \@@_if_s_recursion_tail_stop_do:Nn #2
- { \@@_expand_end:w }
- \token_if_eq_meaning:NNF #2 \exp_not:N
- { \@@_expand_store:n {#2} }
- \token_if_eq_meaning:NNTF #2 #1
- { \@@_expand_loop:w }
- { \@@_expand_math_loop:Nw #1 }
- }
-\cs_new:Npn \@@_expand_math_group:Nn #1#2
- {
- \@@_expand_store:n { {#2} }
- \@@_expand_math_loop:Nw #1
- }
-\exp_after:wN \cs_new:Npn \exp_after:wN \@@_expand_math_space:Nw
- \exp_after:wN # \exp_after:wN 1 \c_space_tl
- {
- \@@_expand_store:n { ~ }
- \@@_expand_math_loop:Nw #1
- }
-% \end{macrocode}
-% At this stage, either we have a control sequence or a simple character:
-% split and handle. The need to check for non-protected actives arises
-% from handling of legacy input encodings: they need to end up in a
-% representation we can deal with in further processing. The tests for
-% explicit parts of the \LaTeXe{} UTF-8 mechanism cover the case of
-% bookmarks, where definitions change and are no longer protected. The
-% same is true for \pkg{babel} shorthands.
-% \begin{macrocode}
-\cs_new:Npn \@@_expand_explicit:N #1
- {
- \token_if_cs:NTF #1
- { \@@_expand_exclude:N #1 }
- {
- \bool_lazy_and:nnTF
- { \token_if_active_p:N #1 }
- {
- ! \bool_lazy_any_p:n
- {
- { \token_if_protected_macro_p:N #1 }
- { \token_if_protected_long_macro_p:N #1 }
- { \tl_if_head_eq_meaning_p:oN {#1} \UTFviii@two@octets }
- { \tl_if_head_eq_meaning_p:oN {#1} \UTFviii@three@octets }
- { \tl_if_head_eq_meaning_p:oN {#1} \UTFviii@four@octets }
- { \tl_if_head_eq_meaning_p:oN {#1} \active@prefix }
- }
- }
- { \exp_after:wN \@@_expand_loop:w #1 }
- {
- \@@_expand_store:n {#1}
- \@@_expand_loop:w
- }
- }
- }
-% \end{macrocode}
-% Next we exclude math commands: this is mainly as there \emph{might} be an
-% \cs{ensuremath}. The switching command for case needs special handling
-% as it has to work by meaning.
-% \begin{macrocode}
-\cs_new:Npn \@@_expand_exclude:N #1
- {
- \cs_if_eq:NNTF #1 \text_case_switch:nnnn
- { \@@_expand_exclude_switch:Nnnnn #1 }
- {
- \exp_args:Ne \@@_expand_exclude:nN
- {
- \exp_not:V \l_text_math_arg_tl
- \exp_not:V \l_text_expand_exclude_tl
- \exp_not:V \l_text_case_exclude_arg_tl
- }
- #1
- }
- }
-\cs_new:Npn \@@_expand_exclude_switch:Nnnnn #1#2#3#4#5
- {
- \@@_expand_store:n { #1 {#2} {#3} {#4} {#5} }
- \@@_expand_loop:w
- }
-\cs_new:Npn \@@_expand_exclude:nN #1#2
- {
- \@@_expand_exclude:NN #2 #1
- \q_@@_recursion_tail \q_@@_recursion_stop
- }
-\cs_new:Npn \@@_expand_exclude:NN #1#2
- {
- \@@_if_q_recursion_tail_stop_do:Nn #2
- { \@@_expand_accent:N #1 }
- \str_if_eq:nnTF {#1} {#2}
- {
- \@@_use_i_delimit_by_q_recursion_stop:nw
- { \@@_expand_exclude:Nw #1 }
- }
- { \@@_expand_exclude:NN #1 }
- }
-\cs_new:Npn \@@_expand_exclude:Nw #1#2#
- { \@@_expand_exclude:Nnn #1 {#2} }
-\cs_new:Npn \@@_expand_exclude:Nnn #1#2#3
- {
- \@@_expand_store:n { #1#2 {#3} }
- \@@_expand_loop:w
- }
-% \end{macrocode}
-% Accents.
-% \begin{macrocode}
-\cs_new:Npn \@@_expand_accent:N #1
- {
- \exp_after:wN \@@_expand_accent:NN \exp_after:wN
- #1 \l_text_accents_tl
- \q_@@_recursion_tail \q_@@_recursion_stop
- }
-\cs_new:Npn \@@_expand_accent:NN #1#2
- {
- \@@_if_q_recursion_tail_stop_do:Nn #2
- { \@@_expand_letterlike:N #1 }
- \cs_if_eq:NNTF #2 #1
- {
- \@@_use_i_delimit_by_q_recursion_stop:nw
- {
- \@@_expand_store:n {#1}
- \@@_expand_loop:w
- }
- }
- { \@@_expand_accent:NN #1 }
- }
-% \end{macrocode}
-% Another list of exceptions: these ones take no arguments so are
-% easier to handle.
-% \begin{macrocode}
-\cs_new:Npn \@@_expand_letterlike:N #1
- {
- \exp_after:wN \@@_expand_letterlike:NN \exp_after:wN
- #1 \l_text_letterlike_tl
- \q_@@_recursion_tail \q_@@_recursion_stop
- }
-\cs_new:Npn \@@_expand_letterlike:NN #1#2
- {
- \@@_if_q_recursion_tail_stop_do:Nn #2
- { \@@_expand_cs:N #1 }
- \cs_if_eq:NNTF #2 #1
- {
- \@@_use_i_delimit_by_q_recursion_stop:nw
- {
- \@@_expand_store:n {#1}
- \@@_expand_loop:w
- }
- }
- { \@@_expand_letterlike:NN #1 }
- }
-% \end{macrocode}
-% \LaTeXe{}'s \cs{protect} makes life interesting. Where possible, we
-% simply remove it and replace with the \enquote{parent} command; of course,
-% the \cs{protect} might be explicit, in which case we need to leave it alone.
-% That includes the case where it's not even followed by an \texttt{N}-type
-% token. There is also the case of a straight \tn{@protected@testopt} to
-% cover.
-% \begin{macrocode}
-\cs_new:Npe \@@_expand_cs:N #1
- {
- \exp_not:N \str_if_eq:nnTF {#1} { \exp_not:N \protect }
- { \exp_not:N \@@_expand_protect:w }
- {
- \bool_lazy_and:nnTF
- { \cs_if_exist_p:N \fmtname }
- { \str_if_eq_p:Vn \fmtname { LaTeX2e } }
- { \exp_not:N \@@_expand_testopt:N #1 }
- { \exp_not:N \@@_expand_replace:N #1 }
- }
- }
-\cs_new:Npn \@@_expand_protect:w #1 \s_@@_recursion_stop
- {
- \tl_if_head_is_N_type:nTF {#1}
- { \@@_expand_protect:N }
- {
- \@@_expand_store:n { \protect }
- \@@_expand_loop:w
- }
- #1 \s_@@_recursion_stop
- }
-\cs_new:Npn \@@_expand_protect:N #1
- {
- \@@_if_s_recursion_tail_stop_do:Nn #1
- {
- \@@_expand_store:n { \protect }
- \@@_expand_end:w
- }
- \exp_args:Ne \@@_expand_protect:nN
- { \cs_to_str:N #1 } #1
- }
-\cs_new:Npn \@@_expand_protect:nN #1#2
- { \@@_expand_protect:Nw #2 #1 \q_@@_nil #1 ~ \q_@@_nil \q_@@_nil \s_@@_stop }
-\cs_new:Npn \@@_expand_protect:Nw #1 #2 ~ \q_@@_nil #3 \q_@@_nil #4 \s_@@_stop
- {
- \@@_quark_if_nil:nTF {#4}
- {
- \cs_if_exist:cTF {#2}
- { \exp_args:Ne \@@_expand_store:n { \exp_not:c {#2} } }
- { \@@_expand_store:n { \protect #1 } }
- }
- { \@@_expand_store:n { \protect #1 } }
- \@@_expand_loop:w
- }
-\cs_new:Npn \@@_expand_testopt:N #1
- {
- \token_if_eq_meaning:NNTF #1 \@protected@testopt
- { \@@_expand_testopt:NNn }
- { \@@_expand_encoding:N #1 }
- }
-\cs_new:Npn \@@_expand_testopt:NNn #1#2#3
- {
- \@@_expand_store:n {#1}
- \@@_expand_loop:w
- }
-% \end{macrocode}
-% Deal with encoding-specific commands
-% \begin{macrocode}
-\cs_new:Npn \@@_expand_encoding:N #1
- {
- \bool_lazy_or:nnTF
- { \cs_if_eq_p:NN #1 \@current@cmd }
- { \cs_if_eq_p:NN #1 \@changed@cmd }
- { \exp_after:wN \@@_expand_loop:w \@@_expand_encoding_escape:NN }
- { \@@_expand_replace:N #1 }
- }
-\cs_new:Npn \@@_expand_encoding_escape:NN #1#2 { \exp_not:n {#1} }
-% \end{macrocode}
-% See if there is a dedicated replacement, and if there is, insert it.
-% \begin{macrocode}
-\cs_new:Npn \@@_expand_replace:N #1
- {
- \bool_lazy_and:nnTF
- { \cs_if_exist_p:c { l_@@_expand_ \token_to_str:N #1 _tl } }
- {
- \bool_lazy_or_p:nn
- { \token_if_cs_p:N #1 }
- { \token_if_active_p:N #1 }
- }
- {
- \exp_args:Nv \@@_expand_replace:n
- { l_@@_expand_ \token_to_str:N #1 _tl }
- }
- { \@@_expand_cs_expand:N #1 }
- }
-\cs_new:Npn \@@_expand_replace:n #1 { \@@_expand_loop:w #1 }
-% \end{macrocode}
-% Finally, expand any macros which can be: this then loops back around to
-% deal with what they produce. The only issue is if the token is
-% \cs{exp_not:n}, as that must apply to the following balanced text.
-% \begin{macrocode}
-\cs_new:Npn \@@_expand_cs_expand:N #1
- {
- \@@_if_expandable:NTF #1
- {
- \token_if_eq_meaning:NNTF #1 \exp_not:n
- { \@@_expand_unexpanded:w }
- { \exp_after:wN \@@_expand_loop:w #1 }
- }
- {
- \@@_expand_store:n {#1}
- \@@_expand_loop:w
- }
- }
-% \end{macrocode}
-% Since \cs{exp_not:n} is actually a primitive, it allows a strange syntax
-% and it particular the primitive expands what follows and discards spaces
-% and \cs{scan_stop:} until finding a braced argument (the opening brace
-% can be implicit but we will not support this here). Here, we repeatedly
-% |f|-expand after such an \cs{exp_not:n}, and test what follows. If
-% it is a brace group, then we found the intended argument of
-% \cs{exp_not:n}. If it is a space, then the next |f|-expansion will
-% eliminate it. If it is an |N|-type token then
-% \cs{@@_expand_unexpanded:N} leaves the token to be expanded if it is
-% expandable, and otherwise removes it, assuming that it is
-% \cs{scan_stop:}. This silently hides errors when \cs{exp_not:n} is
-% incorrectly followed by some non-expandable token other than
-% \cs{scan_stop:}, but this should be pretty rare, and there is no good
-% error recovery anyways.
-% \begin{macrocode}
-\cs_new:Npn \@@_expand_unexpanded:w
- {
- \exp_after:wN \@@_expand_unexpanded_test:w
- \exp:w \exp_end_continue_f:w
- }
-\cs_new:Npn \@@_expand_unexpanded_test:w #1 \s_@@_recursion_stop
- {
- \tl_if_head_is_group:nTF {#1}
- { \@@_expand_unexpanded:n }
- {
- \@@_expand_unexpanded:w
- \tl_if_head_is_N_type:nT {#1} { \@@_expand_unexpanded:N }
- }
- #1 \s_@@_recursion_stop
- }
-\cs_new:Npn \@@_expand_unexpanded:N #1
- {
- \exp_after:wN \if_meaning:w \exp_not:N #1 #1
- \else:
- \exp_after:wN #1
- \fi:
- }
-\cs_new:Npn \@@_expand_unexpanded:n #1
- {
- \@@_expand_store:n {#1}
- \@@_expand_loop:w
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \text_declare_expand_equivalent:Nn ,
-% \text_declare_expand_equivalent:cn
-% }
-% Create equivalents to allow replacement.
-% \begin{macrocode}
-\cs_new_protected:Npn \text_declare_expand_equivalent:Nn #1#2
- {
- \tl_clear_new:c { l_@@_expand_ \token_to_str:N #1 _tl }
- \tl_set:cn { l_@@_expand_ \token_to_str:N #1 _tl } {#2}
- }
-\cs_generate_variant:Nn \text_declare_expand_equivalent:Nn { c }
-% \end{macrocode}
-% \end{macro}
-%
-% Prevent expansion of various standard values.
-% \begin{macrocode}
-\tl_map_inline:nn
- { \` \' \^ \~ \= \u \. \" \r \H \v \d \c \k \b \t }
- { \text_declare_expand_equivalent:Nn #1 { \exp_not:n {#1} } }
-\tl_map_inline:nn
- {
- \AA \aa
- \AE \ae
- \DH \dh
- \DJ \dj
- \IJ \ij
- \L \l
- \NG \ng
- \O \o
- \OE \oe
- \SS \ss
- \TH \th
- }
- { \text_declare_expand_equivalent:Nn #1 { \exp_not:n {#1} } }
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3tl-analysis.dtx b/macros/latex/contrib/l3kernel/l3tl-analysis.dtx
deleted file mode 100644
index d965050c76..0000000000
--- a/macros/latex/contrib/l3kernel/l3tl-analysis.dtx
+++ /dev/null
@@ -1,1660 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3tl-analysis.dtx
-%
-% Copyright (C) 2011-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-%
-% \title{^^A
-% The \pkg{l3tl-analysis} module\\ Analysing token lists^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% This module provides functions that are particularly useful in the
-% \pkg{l3regex} module for mapping through a token list one \meta{token}
-% at a time (including begin-group/end-group tokens). For
-% \cs{tl_analysis_map_inline:Nn} or \cs{tl_analysis_map_inline:nn}, the
-% token list is given as an argument; the analogous function
-% \cs{peek_analysis_map_inline:n} documented in \pkg{l3token} finds
-% tokens in the input stream instead. In both cases the user provides
-% \meta{inline code} that receives three arguments for each
-% \meta{token}:
-% \begin{itemize}
-% \item \meta{tokens}, which both \texttt{o}-expand and
-% \texttt{e}/\texttt{x}-expand to the \meta{token}. The detailed form of
-% \meta{tokens} may change in later releases.
-% \item \meta{char code}, a decimal representation of the character
-% code of the \meta{token}, $-1$ if it is a control sequence.
-% \item \meta{catcode}, a capital hexadecimal digit which denotes the
-% category code of the \meta{token} (0:~control sequence,
-% 1:~begin-group, 2:~end-group, 3:~math shift, 4:~alignment tab,
-% 6:~parameter, 7:~superscript, 8:~subscript, A:~space, B:~letter,
-% C:~other, D:~active). This can be converted to an integer by
-% writing |"|\meta{catcode}.
-% \end{itemize}
-% In addition, there is a debugging function \cs{tl_analysis_show:n},
-% very similar to the \cs[no-index]{ShowTokens} macro from the \pkg{ted} package.
-%
-% \begin{function}[added = 2021-05-11]
-% {
-% \tl_analysis_show:N, \tl_analysis_show:n,
-% \tl_analysis_log:N, \tl_analysis_log:n
-% }
-% \begin{syntax}
-% \cs{tl_analysis_show:n} \Arg{token list}
-% \cs{tl_analysis_log:n} \Arg{token list}
-% \end{syntax}
-% Displays to the terminal (or log) the detailed decomposition of the
-% \meta{token list} into tokens, showing the category code of each
-% character token, the meaning of control sequences and active
-% characters, and the value of registers.
-% \end{function}
-%
-% \begin{function}[added = 2018-04-09, updated = 2022-03-26]
-% {\tl_analysis_map_inline:nn, \tl_analysis_map_inline:Nn}
-% \begin{syntax}
-% \cs{tl_analysis_map_inline:nn} \Arg{token list} \Arg{inline function}
-% \end{syntax}
-% Applies the \meta{inline function} to each individual \meta{token}
-% in the \meta{token list}. The \meta{inline function} receives three
-% arguments as explained above. As all other mappings the mapping is
-% done at the current group level, \emph{i.e.}~any local assignments
-% made by the \meta{inline function} remain in effect after the loop.
-% \end{function}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3tl-analysis} implementation}
-%
-% \begin{macrocode}
-%<@@=tl>
-% \end{macrocode}
-%
-% \subsection{Internal functions}
-%
-% \begin{variable}{\s_@@}
-% The format used to store token lists internally uses the scan mark
-% \cs{s_@@} as a delimiter.
-% \end{variable}
-%
-% \subsection{Internal format}
-%
-% The task of the \pkg{l3tl-analysis} module is to convert token lists
-% to an internal format which allows us to extract all the relevant
-% information about individual tokens (category code, character code),
-% as well as reconstruct the token list quickly. This internal format is
-% used in \pkg{l3regex} where we need to support arbitrary tokens, and
-% it is used in conversion functions in \pkg{l3str-convert}, where we wish to
-% support clusters of characters instead of single tokens.
-%
-% We thus need a way to encode any \meta{token} (even begin-group and
-% end-group character tokens) in a way amenable to manipulating tokens
-% individually. The best we can do is to find \meta{tokens} which both
-% \texttt{o}-expand and \texttt{e}/\texttt{x}-expand to the given
-% \meta{token}. Collecting more information about the category code and
-% character code is also useful for regular expressions, since most
-% regexes are catcode-agnostic. The internal format thus takes the form
-% of a succession of items of the form
-% \begin{quote}
-% \meta{tokens} \cs{s_@@} \meta{catcode} \meta{char code} \cs{s_@@}
-% \end{quote}
-% The \meta{tokens} \texttt{o}- \emph{and} \texttt{e}/\texttt{x}-expand to the
-% original token in the token list or to the cluster of tokens
-% corresponding to one Unicode character in the given encoding (for
-% \pkg{l3str-convert}). The \meta{catcode} is given as a single hexadecimal
-% digit, $0$ for control sequences. The \meta{char code} is given as a
-% decimal number, $-1$ for control sequences.
-%
-% Using delimited arguments lets us build the \meta{tokens}
-% progressively when doing an encoding conversion in \pkg{l3str-convert}. On the
-% other hand, the delimiter \cs{s_@@} may not appear unbraced in
-% \meta{tokens}. This is not a problem because we are careful to wrap
-% control sequences in braces (as an argument to \cs{exp_not:n}) when
-% converting from a general token list to the internal format.
-%
-% The current rule for converting a \meta{token} to a balanced set of
-% \meta{tokens} which both \texttt{o}-expands and \texttt{e}/\texttt{x}-expands to
-% it is the following.
-% \begin{itemize}
-% \item A control sequence |\cs| becomes |\exp_not:n { \cs }|
-% \cs{s_@@} $0$ $-1$ \cs{s_@@}.
-% \item A begin-group character |{| becomes \cs{exp_after:wN} |{|
-% \cs{if_false:} |}| \cs{fi:} \cs{s_@@} $1$ \meta{char code}
-% \cs{s_@@}.
-% \item An end-group character |}| becomes \cs{if_false:} |{| \cs{fi:}
-% |}| \cs{s_@@} $2$ \meta{char code} \cs{s_@@}.
-% \item A character with any other category code becomes
-% \cs{exp_not:n} \Arg{character} \cs{s_@@} \meta{hex catcode}
-% \meta{char code} \cs{s_@@}.
-% \end{itemize}
-% In contrast, for \cs{peek_analysis_map_inline:n} we must allow for an
-% input stream containing \tn{outer} macros, so that wrapping all
-% control sequences in \cs{exp_not:n} is unsafe. Instead, we write the
-% more elaborate \cs{__kernel_exp_not:w} \cs{exp_after:wN} |{|
-% \cs{exp_not:N} |\cs| |}|. (On the other hand we make a better effort
-% by avoiding \cs{exp_not:n} for characters other than active and macro
-% parameters.)
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \subsection{Variables and helper functions}
-%
-% \begin{variable}{\s_@@}
-% The scan mark \cs{s_@@} is used as a delimiter in the internal
-% format. This is more practical than using a quark, because we would
-% then need to control expansion much more carefully: compare
-% \cs{int_value:w} |`#1| \cs{s_@@} with \cs{int_value:w} |`#1|
-% \cs{exp_stop_f:} \cs{exp_not:N} \cs{q_mark} to extract a character
-% code followed by the delimiter in an \texttt{e}-expansion.
-% \begin{macrocode}
-\scan_new:N \s_@@
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}
-% {\l_@@_analysis_token, \l_@@_analysis_char_token}
-% The tokens in the token list are probed with the \TeX{} primitive
-% \tn{futurelet}. We use \cs{l_@@_analysis_token} in that
-% construction. In some cases, we convert the following token to a
-% string before probing it: then the token variable used is
-% \cs{l_@@_analysis_char_token}.
-% \begin{macrocode}
-\cs_new_eq:NN \l_@@_analysis_token ?
-\cs_new_eq:NN \l_@@_analysis_char_token ?
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_peek_code_tl}
-% Holds some code to be run once the next token has been fully
-% analysed in \cs{peek_analysis_map_inline:n}.
-% \begin{macrocode}
-\tl_new:N \l_@@_peek_code_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\c_@@_peek_catcodes_tl}
-% A token list containing the character number~$32$ (space) with all
-% possible category codes except $1$ and $2$ (begin-group and
-% end-group). Why $32$? Because some \LuaTeX{} versions only allow
-% creation of catcode~$10$ (space) tokens with this character code, so
-% that we decided to make \cs{char_generate:nn} refuse to create such
-% weird spaces as well. We do not include the macro parameter case
-% (catcode~$6$) because it cannot be used as a macro delimiter.
-% \begin{macrocode}
-\group_begin:
-\char_set_active_eq:NN \ \scan_stop:
-\tl_const:Ne \c_@@_peek_catcodes_tl
- {
- \char_generate:nn { 32 } { 3 } 3
- \char_generate:nn { 32 } { 4 } 4
- \char_generate:nn { 32 } { 7 } 7
- \char_generate:nn { 32 } { 8 } 8
- \c_space_tl \token_to_str:N A
- \char_generate:nn { 32 } { 11 } \token_to_str:N B
- \char_generate:nn { 32 } { 12 } \token_to_str:N C
- \char_generate:nn { 32 } { 13 } \token_to_str:N D
- }
-\group_end:
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_analysis_normal_int}
-% The number of normal (\texttt{N}-type argument) tokens since the
-% last special token.
-% \begin{macrocode}
-\int_new:N \l_@@_analysis_normal_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_analysis_index_int}
-% During the first pass, this is the index in the array being built.
-% During the second pass, it is equal to the maximum index in the
-% array from the first pass.
-% \begin{macrocode}
-\int_new:N \l_@@_analysis_index_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_analysis_nesting_int}
-% Nesting depth of explicit begin-group and end-group characters
-% during the first pass. This lets us detect the end of the token list
-% without a reserved end-marker.
-% \begin{macrocode}
-\int_new:N \l_@@_analysis_nesting_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_analysis_type_int}
-% When encountering special characters, we record their \enquote{type}
-% in this integer.
-% \begin{macrocode}
-\int_new:N \l_@@_analysis_type_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\g_@@_analysis_result_tl}
-% The result of the conversion is stored in this token list, with a
-% succession of items of the form
-% \begin{quote}
-% \meta{tokens} \cs{s_@@} \meta{catcode} \meta{char code} \cs{s_@@}
-% \end{quote}
-% \begin{macrocode}
-\tl_new:N \g_@@_analysis_result_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[EXP]{\@@_analysis_extract_charcode:}
-% \begin{macro}[EXP]{\@@_analysis_extract_charcode_aux:w}
-% Extracting the character code from the meaning of
-% \cs{l_@@_analysis_token}. This has no error checking, and should
-% only be assumed to work for begin-group and end-group character
-% tokens. It produces a number in the form |`|\meta{char}.
-% \begin{macrocode}
-\cs_new:Npn \@@_analysis_extract_charcode:
- {
- \exp_after:wN \@@_analysis_extract_charcode_aux:w
- \token_to_meaning:N \l_@@_analysis_token
- }
-\cs_new:Npn \@@_analysis_extract_charcode_aux:w #1 ~ #2 ~ { ` }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_analysis_cs_space_count:NN}
-% \begin{macro}[EXP]{\@@_analysis_cs_space_count:w}
-% \begin{macro}[EXP]{\@@_analysis_cs_space_count_end:w}
-% Counts the number of spaces in the string representation of its
-% second argument, as well as the number of characters following the
-% last space in that representation, and feeds the two numbers as
-% semicolon-delimited arguments to the first argument. When this
-% function is used, the escape character is printable and non-space.
-% \begin{macrocode}
-\cs_new:Npn \@@_analysis_cs_space_count:NN #1 #2
- {
- \exp_after:wN #1
- \int_value:w \int_eval:w 0
- \exp_after:wN \@@_analysis_cs_space_count:w
- \token_to_str:N #2
- \fi: \@@_analysis_cs_space_count_end:w ; ~ !
- }
-\cs_new:Npn \@@_analysis_cs_space_count:w #1 ~
- {
- \if_false: #1 #1 \fi:
- + 1
- \@@_analysis_cs_space_count:w
- }
-\cs_new:Npn \@@_analysis_cs_space_count_end:w ; #1 \fi: #2 !
- { \exp_after:wN ; \int_value:w \str_count_ignore_spaces:n {#1} ; }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Plan of attack}
-%
-% Our goal is to produce a token list of the form roughly
-% \begin{quote}
-% \meta{token 1} \cs{s_@@} \meta{catcode 1} \meta{char code 1} \cs{s_@@} \\
-% \meta{token 2} \cs{s_@@} \meta{catcode 2} \meta{char code 2} \cs{s_@@} \\
-% \ldots{}
-% \meta{token N} \cs{s_@@} \meta{catcode N} \meta{char code N} \cs{s_@@}
-% \end{quote}
-% Most but not all tokens can be grabbed as an undelimited
-% (\texttt{N}-type) argument by \TeX{}. The plan is to have a two pass
-% system. In the first pass, locate special tokens, and store them in
-% various \tn{toks} registers. In the second pass, which is done within
-% an \texttt{e}-expanding assignment, normal tokens are taken in as
-% \texttt{N}-type arguments, and special tokens are retrieved from the
-% \tn{toks} registers, and removed from the input stream by some means.
-% The whole process takes linear time, because we avoid building the
-% result one item at a time.
-%
-% We make the escape character printable (backslash, but this later
-% oscillates between slash and backslash): this allows us to
-% distinguish characters from control sequences.
-%
-% A token has two characteristics: its \tn{meaning}, and what it looks
-% like for \TeX{} when it is in scanning mode (\emph{e.g.}, when
-% capturing parameters for a macro). For our purposes, we distinguish
-% the following meanings:
-% \begin{itemize}
-% \item begin-group token (category code $1$), either space (character
-% code $32$), or non-space;
-% \item end-group token (category code $2$), either space (character
-% code $32$), or non-space;
-% \item space token (category code $10$, character code $32$);
-% \item anything else (then the token is always an \texttt{N}-type
-% argument).
-% \end{itemize}
-% The token itself can \enquote{look like} one of the following
-% \begin{itemize}
-% \item a non-active character, in which case its meaning is
-% automatically that associated to its character code and category
-% code, we call it \enquote{true} character;
-% \item an active character;
-% \item a control sequence.
-% \end{itemize}
-% The only tokens which are not valid \texttt{N}-type arguments are true
-% begin-group characters, true end-group characters, and true spaces.
-% We detect those characters by scanning ahead with \tn{futurelet},
-% then distinguishing true characters from control sequences set equal
-% to them using the \tn{string} representation.
-%
-% The second pass is a simple exercise in expandable loops.
-%
-% \begin{macro}{\@@_analysis:n}
-% Everything is done within a group, and all definitions are
-% local. We use \cs{group_align_safe_begin/end:} to avoid problems in
-% case \cs{@@_analysis:n} is used within an alignment and its argument
-% contains alignment tab tokens.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_analysis:n #1
- {
- \group_begin:
- \group_align_safe_begin:
- \@@_analysis_a:n {#1}
- \@@_analysis_b:n {#1}
- \group_align_safe_end:
- \group_end:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Disabling active characters}
-%
-% \begin{macro}{\@@_analysis_disable:n}
-% Active characters can cause problems later on in the processing, so
-% we provide a way to disable them, by setting them to
-% \texttt{undefined}. Since Unicode contains too many characters to
-% loop over all of them, we instead do this whenever we encounter a
-% character. For \pTeX{} and \upTeX{} we skip characters beyond
-% $[0,255]$ because \tn{lccode} only allows those values.
-% \begin{macrocode}
-\group_begin:
- \char_set_catcode_active:N \^^@
- \cs_new_protected:Npn \@@_analysis_disable:n #1
- {
- \tex_lccode:D 0 = #1 \exp_stop_f:
- \tex_lowercase:D { \tex_let:D ^^@ } \tex_undefined:D
- }
- \bool_lazy_or:nnT
- { \sys_if_engine_ptex_p: }
- { \sys_if_engine_uptex_p: }
- {
- \cs_gset_protected:Npn \@@_analysis_disable:n #1
- {
- \if_int_compare:w 256 > #1 \exp_stop_f:
- \tex_lccode:D 0 = #1 \exp_stop_f:
- \tex_lowercase:D { \tex_let:D ^^@ } \tex_undefined:D
- \fi:
- }
- }
-\group_end:
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_analysis_disable_char:N}
-% Similar to \cs{@@_analysis_disable:n}, but it receives a normal
-% character token, tests if that token is active (by turning it into
-% a space: the active space has been undefined at this point), and
-% if so, disables it. Even if the character is active and set equal
-% to a primitive conditional, nothing blows up.
-% Again, in \pTeX{} and \upTeX{} we skip characters beyond $[0,255]$,
-% which cannot be active anyways.
-% \begin{macrocode}
-\group_begin:
- \char_set_catcode_active:N \^^@
- \cs_new_protected:Npn \@@_analysis_disable_char:N #1
- {
- \tex_lccode:D `#1 = 32 \exp_stop_f:
- \tex_lowercase:D { \if_meaning:w #1 } \tex_undefined:D
- \tex_let:D #1 \tex_undefined:D
- \fi:
- }
- \bool_lazy_or:nnT
- { \sys_if_engine_ptex_p: }
- { \sys_if_engine_uptex_p: }
- {
- \cs_gset_protected:Npn \@@_analysis_disable_char:N #1
- {
- \if_int_compare:w 256 > `#1 \exp_stop_f:
- \tex_lccode:D `#1 = 32 \exp_stop_f:
- \tex_lowercase:D { \if_meaning:w #1 } \tex_undefined:D
- \tex_let:D #1 \tex_undefined:D
- \fi:
- \fi:
- }
- }
-\group_end:
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{First pass}
-%
-% The goal of this pass is to detect special (non-\texttt{N}-type) tokens,
-% and count how many \texttt{N}-type tokens lie between special tokens.
-% Also, we wish to store some representation of each special token
-% in a \tn{toks} register.
-%
-% We have $11$ types of tokens:
-% \begin{itemize}
-% \item[1.] a true non-space begin-group character;
-% \item[2.] a true space begin-group character;
-% \item[3.] a true non-space end-group character;
-% \item[4.] a true space end-group character;
-% \item[5.] a true space blank space character;
-% \item[6.] an active character;
-% \item[7.] any other true character;
-% \item[8.] a control sequence equal to a begin-group token (category code $1$);
-% \item[9.] a control sequence equal to an end-group token (category code $2$);
-% \item[10.] a control sequence equal to a space token
-% (character code $32$, category code $10$);
-% \item[11.] any other control sequence.
-% \end{itemize}
-% Our first tool is \tn{futurelet}. This cannot distinguish
-% case $8$ from $1$ or $2$, nor case $9$ from $3$ or $4$,
-% nor case $10$ from case $5$. Those cases are later distinguished
-% by applying the \tn{string} primitive to the following token,
-% after possibly changing the escape character to ensure that
-% a control sequence's string representation cannot be mistaken
-% for the true character.
-%
-% In cases $6$, $7$, and $11$, the following token is a valid
-% \texttt{N}-type argument, so we grab it and distinguish the case
-% of a character from a control sequence: in the latter case,
-% \cs{str_tail:n} \Arg{token} is non-empty, because the
-% escape character is printable.
-%
-% \begin{macro}{\@@_analysis_a:n}
-% We read tokens one by one using \tn{futurelet}.
-% While performing the loop, we keep track of the number of
-% true begin-group characters minus the number of
-% true end-group characters in \cs{l_@@_analysis_nesting_int}.
-% This reaches $-1$ when we read the closing brace.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_analysis_a:n #1
- {
- \@@_analysis_disable:n { 32 }
- \int_set:Nn \tex_escapechar:D { 92 }
- \int_zero:N \l_@@_analysis_normal_int
- \int_zero:N \l_@@_analysis_index_int
- \int_zero:N \l_@@_analysis_nesting_int
- \if_false: { \fi: \@@_analysis_a_loop:w #1 }
- \int_decr:N \l_@@_analysis_index_int
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_analysis_a_loop:w}
-% Read one character and check its type.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_analysis_a_loop:w
- { \tex_futurelet:D \l_@@_analysis_token \@@_analysis_a_type:w }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_analysis_a_type:w}
-% At this point, \cs{l_@@_analysis_token} holds the meaning
-% of the following token. We store in \cs{l_@@_analysis_type_int}
-% information about the meaning of the token ahead:
-% \begin{itemize}
-% \item 0 space token;
-% \item 1 begin-group token;
-% \item -1 end-group token;
-% \item 2 other.
-% \end{itemize}
-% The values $0$, $1$, $-1$ correspond to how much a true such
-% character changes the nesting level ($2$ is used only here,
-% and is irrelevant later). Then call the auxiliary for each case.
-% Note that nesting conditionals here is safe because we only skip
-% over \cs{l_@@_analysis_token} if it matches with one of the
-% character tokens (hence is not a primitive conditional).
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_analysis_a_type:w
- {
- \l_@@_analysis_type_int =
- \if_meaning:w \l_@@_analysis_token \c_space_token
- 0
- \else:
- \if_catcode:w \exp_not:N \l_@@_analysis_token \c_group_begin_token
- 1
- \else:
- \if_catcode:w \exp_not:N \l_@@_analysis_token \c_group_end_token
- - 1
- \else:
- 2
- \fi:
- \fi:
- \fi:
- \exp_stop_f:
- \if_case:w \l_@@_analysis_type_int
- \exp_after:wN \@@_analysis_a_space:w
- \or: \exp_after:wN \@@_analysis_a_bgroup:w
- \or: \exp_after:wN \@@_analysis_a_safe:N
- \else: \exp_after:wN \@@_analysis_a_egroup:w
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_analysis_a_space:w}
-% \begin{macro}{\@@_analysis_a_space_test:w}
-% In this branch, the following token's meaning is a blank space.
-% Apply \tn{string} to that token: a true blank space gives a space, a
-% control sequence gives a result starting with the escape character,
-% an active character gives something else than a space since we
-% disabled the space. We grab as \cs{l_@@_analysis_char_token} the first
-% character of the string representation then test it in
-% \cs{@@_analysis_a_space_test:w}.
-% Also, since \cs{@@_analysis_a_store:} expects the special token to be
-% stored in the relevant \tn{toks} register, we do that. The extra
-% \cs{exp_not:n} is unnecessary of course, but it makes the treatment
-% of all tokens more homogeneous.
-% If we discover that the next token was actually a control sequence
-% or an active character
-% instead of a true space, then we step the counter of normal tokens.
-% We now have in front of us the whole string representation of
-% the control sequence, including potential spaces; those will appear
-% to be true spaces later in this pass. Hence, all other branches of
-% the code in this first pass need to consider the string representation,
-% so that the second pass does not need to test the meaning of tokens,
-% only strings.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_analysis_a_space:w
- {
- \tex_afterassignment:D \@@_analysis_a_space_test:w
- \exp_after:wN \cs_set_eq:NN
- \exp_after:wN \l_@@_analysis_char_token
- \token_to_str:N
- }
-\cs_new_protected:Npn \@@_analysis_a_space_test:w
- {
- \if_meaning:w \l_@@_analysis_char_token \c_space_token
- \tex_toks:D \l_@@_analysis_index_int { \exp_not:n { ~ } }
- \@@_analysis_a_store:
- \else:
- \int_incr:N \l_@@_analysis_normal_int
- \fi:
- \@@_analysis_a_loop:w
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_analysis_a_bgroup:w, \@@_analysis_a_egroup:w}
-% \begin{macro}
-% {\@@_analysis_a_group:nw, \@@_analysis_a_group_aux:w, \@@_analysis_a_group_auxii:w, \@@_analysis_a_group_test:w}
-% The token is most likely a true character token with catcode $1$ or
-% $2$, but it might be a control sequence, or an active character.
-% Optimizing for the first case, we store in a toks register some code
-% that expands to that token. Since we will turn what follows into
-% a string, we make sure the escape character is different from the
-% current character code (by switching between solidus and backslash).
-% To detect the special case of an active character let to the catcode
-% $1$ or~$2$ character with the same character code, we disable the
-% active character with that character code and re-test: if the
-% following token has become undefined we can in fact safely grab it.
-% We are finally ready to turn what follows to a string and test it.
-% This is one place where we need \cs{l_@@_analysis_char_token} to be a
-% separate control sequence from \cs{l_@@_analysis_token}, to compare them.
-% \begin{macrocode}
-\group_begin:
- \char_set_catcode_group_begin:N \^^@ % {
- \cs_new_protected:Npn \@@_analysis_a_bgroup:w
- { \@@_analysis_a_group:nw { \exp_after:wN ^^@ \if_false: } \fi: } }
- \char_set_catcode_group_end:N \^^@
- \cs_new_protected:Npn \@@_analysis_a_egroup:w
- { \@@_analysis_a_group:nw { \if_false: { \fi: ^^@ } } % }
-\group_end:
-\cs_new_protected:Npn \@@_analysis_a_group:nw #1
- {
- \tex_lccode:D 0 = \@@_analysis_extract_charcode: \scan_stop:
- \tex_lowercase:D { \tex_toks:D \l_@@_analysis_index_int {#1} }
- \if_int_compare:w \tex_lccode:D 0 = \tex_escapechar:D
- \int_set:Nn \tex_escapechar:D { 139 - \tex_escapechar:D }
- \fi:
- \@@_analysis_disable:n { \tex_lccode:D 0 }
- \tex_futurelet:D \l_@@_analysis_token \@@_analysis_a_group_aux:w
- }
-\cs_new_protected:Npn \@@_analysis_a_group_aux:w
- {
- \if_meaning:w \l_@@_analysis_token \tex_undefined:D
- \exp_after:wN \@@_analysis_a_safe:N
- \else:
- \exp_after:wN \@@_analysis_a_group_auxii:w
- \fi:
- }
-\cs_new_protected:Npn \@@_analysis_a_group_auxii:w
- {
- \tex_afterassignment:D \@@_analysis_a_group_test:w
- \exp_after:wN \cs_set_eq:NN
- \exp_after:wN \l_@@_analysis_char_token
- \token_to_str:N
- }
-\cs_new_protected:Npn \@@_analysis_a_group_test:w
- {
- \if_charcode:w \l_@@_analysis_token \l_@@_analysis_char_token
- \@@_analysis_a_store:
- \else:
- \int_incr:N \l_@@_analysis_normal_int
- \fi:
- \@@_analysis_a_loop:w
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_analysis_a_store:}
-% This function is called each time we meet a special token;
-% at this point, the \tn{toks} register \cs{l_@@_analysis_index_int}
-% holds a token list which expands to the given special token.
-% Also, the value of \cs{l_@@_analysis_type_int} indicates which case
-% we are in:
-% \begin{itemize}
-% \item -1 end-group character;
-% \item 0 space character;
-% \item 1 begin-group character.
-% \end{itemize}
-% We need to distinguish further the case of a space character
-% (code $32$) from other character codes, because those
-% behave differently in the second pass. Namely, after testing
-% the \tn{lccode} of $0$ (which holds the present character code)
-% we change the cases above to
-% \begin{itemize}
-% \item -2 space end-group character;
-% \item -1 non-space end-group character;
-% \item 0 space blank space character;
-% \item 1 non-space begin-group character;
-% \item 2 space begin-group character.
-% \end{itemize}
-% This has the property that non-space characters correspond to odd
-% values of \cs{l_@@_analysis_type_int}. The number of normal tokens until
-% here and the type of special token are packed into a \tn{skip}
-% register. Finally, we check whether we reached the last closing
-% brace, in which case we stop by disabling the looping function
-% (locally).
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_analysis_a_store:
- {
- \tex_advance:D \l_@@_analysis_nesting_int \l_@@_analysis_type_int
- \if_int_compare:w \tex_lccode:D 0 = `\ \exp_stop_f:
- \tex_advance:D \l_@@_analysis_type_int \l_@@_analysis_type_int
- \fi:
- \tex_skip:D \l_@@_analysis_index_int
- = \l_@@_analysis_normal_int sp
- plus \l_@@_analysis_type_int sp \scan_stop:
- \int_incr:N \l_@@_analysis_index_int
- \int_zero:N \l_@@_analysis_normal_int
- \if_int_compare:w \l_@@_analysis_nesting_int = - \c_one_int
- \cs_set_eq:NN \@@_analysis_a_loop:w \scan_stop:
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_analysis_a_safe:N}
-% \begin{macro}{\@@_analysis_a_cs:ww}
-% This should be the simplest case: since the upcoming token is safe,
-% we can simply grab it in a second pass. If the token is a single
-% character (including space), the \cs{if_charcode:w} test yields
-% true; we disable a potentially active character (that could
-% otherwise masquerade as the true character in the next pass) and we
-% count one \enquote{normal} token. On the other
-% hand, if the token is a control sequence, we should replace it by
-% its string representation for compatibility with other code
-% branches. Instead of slowly looping through the characters with
-% the main code, we use the knowledge of how the second pass works:
-% if the control sequence name contains no space, count that token
-% as a number of normal tokens equal to its string length. If the
-% control sequence contains spaces, they should be registered as
-% special characters by increasing \cs{l_@@_analysis_index_int}
-% (no need to carefully count character between each space), and
-% all characters after the last space should be counted in the
-% following sequence of \enquote{normal} tokens.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_analysis_a_safe:N #1
- {
- \if_charcode:w
- \scan_stop:
- \exp_after:wN \use_none:n \token_to_str:N #1 \prg_do_nothing:
- \scan_stop:
- \exp_after:wN \use_i:nn
- \else:
- \exp_after:wN \use_ii:nn
- \fi:
- {
- \@@_analysis_disable_char:N #1
- \int_incr:N \l_@@_analysis_normal_int
- }
- { \@@_analysis_cs_space_count:NN \@@_analysis_a_cs:ww #1 }
- \@@_analysis_a_loop:w
- }
-\cs_new_protected:Npn \@@_analysis_a_cs:ww #1; #2;
- {
- \if_int_compare:w #1 > \c_zero_int
- \tex_skip:D \l_@@_analysis_index_int
- = \int_eval:n { \l_@@_analysis_normal_int + 1 } sp \exp_stop_f:
- \tex_advance:D \l_@@_analysis_index_int #1 \exp_stop_f:
- \else:
- \tex_advance:D
- \fi:
- \l_@@_analysis_normal_int #2 \exp_stop_f:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Second pass}
-%
-% The second pass is an exercise in expandable loops.
-% All the necessary information is stored in \tn{skip}
-% and \tn{toks} registers.
-%
-% \begin{macro}{\@@_analysis_b:n}
-% \begin{macro}[EXP]{\@@_analysis_b_loop:w}
-% Start the loop with the index $0$. No need for an end-marker:
-% the loop stops by itself when the last index is read.
-% We repeatedly oscillate between reading long stretches
-% of normal tokens, and reading special tokens.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_analysis_b:n #1
- {
- \__kernel_tl_gset:Nx \g_@@_analysis_result_tl
- {
- \@@_analysis_b_loop:w 0; #1
- \prg_break_point:
- }
- }
-\cs_new:Npn \@@_analysis_b_loop:w #1;
- {
- \exp_after:wN \@@_analysis_b_normals:ww
- \int_value:w \tex_skip:D #1 ; #1 ;
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_analysis_b_normals:ww}
-% \begin{macro}[EXP]{\@@_analysis_b_normal:wwN}
-% The first argument is the number of normal tokens which remain
-% to be read, and the second argument is the index in the array
-% produced in the first step.
-% A character's string representation is always one character long,
-% while a control sequence is always longer (we have set the escape
-% character to a printable value). In both cases, we leave
-% \cs{exp_not:n} \Arg{token} \cs{s_@@} in the input stream
-% (after \texttt{e}-expansion). Here, \cs{exp_not:n} is used
-% rather than \cs{exp_not:N} because |#3| could be
-% a macro parameter character or could be \cs{s_@@}
-% (which must be hidden behind braces in the result).
-% \begin{macrocode}
-\cs_new:Npn \@@_analysis_b_normals:ww #1;
- {
- \if_int_compare:w #1 = \c_zero_int
- \@@_analysis_b_special:w
- \fi:
- \@@_analysis_b_normal:wwN #1;
- }
-\cs_new:Npn \@@_analysis_b_normal:wwN #1; #2; #3
- {
- \exp_not:n { \exp_not:n { #3 } } \s_@@
- \if_charcode:w
- \scan_stop:
- \exp_after:wN \use_none:n \token_to_str:N #3 \prg_do_nothing:
- \scan_stop:
- \exp_after:wN \@@_analysis_b_char:Nn
- \exp_after:wN \@@_analysis_b_char_aux:nww
- \else:
- \exp_after:wN \@@_analysis_b_cs:Nww
- \fi:
- #3 #1; #2;
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_analysis_b_char:Nn, \@@_analysis_b_char_aux:nww}
-% This function is called here with arguments
-% \cs{@@_analysis_b_char_aux:nww} and a normal character, while in the
-% peek analysis code it is called with \cs{use_none:n} and possibly a
-% space character, which is why the function has signature |Nn|.
-% If the normal token we grab is a character, leave
-% \meta{catcode} \meta{charcode} followed by \cs{s_@@}
-% in the input stream, and call \cs{@@_analysis_b_normals:ww}
-% with its first argument decremented.
-% \begin{macrocode}
-\cs_new:Npe \@@_analysis_b_char:Nn #1#2
- {
- \exp_not:N \if_meaning:w #2 \exp_not:N \tex_undefined:D
- \token_to_str:N D \exp_not:N \else:
- \exp_not:N \if_catcode:w #2 \c_catcode_other_token
- \token_to_str:N C \exp_not:N \else:
- \exp_not:N \if_catcode:w #2 \c_catcode_letter_token
- \token_to_str:N B \exp_not:N \else:
- \exp_not:N \if_catcode:w #2 \c_math_toggle_token 3
- \exp_not:N \else:
- \exp_not:N \if_catcode:w #2 \c_alignment_token 4
- \exp_not:N \else:
- \exp_not:N \if_catcode:w #2 \c_math_superscript_token 7
- \exp_not:N \else:
- \exp_not:N \if_catcode:w #2 \c_math_subscript_token 8
- \exp_not:N \else:
- \exp_not:N \if_catcode:w #2 \c_space_token
- \token_to_str:N A \exp_not:N \else:
- 6
- \exp_not:n { \fi: \fi: \fi: \fi: \fi: \fi: \fi: \fi: }
- #1 {#2}
- }
-\cs_new:Npn \@@_analysis_b_char_aux:nww #1
- {
- \int_value:w `#1 \s_@@
- \exp_after:wN \@@_analysis_b_normals:ww
- \int_value:w \int_eval:w - 1 +
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_analysis_b_cs:Nww}
-% \begin{macro}[EXP]{\@@_analysis_b_cs_test:ww}
-% If the token we grab is a control sequence, leave
-% |0 -1| (as category code and character code) in the input stream,
-% followed by \cs{s_@@},
-% and call \cs{@@_analysis_b_normals:ww} with updated arguments.
-% \begin{macrocode}
-\cs_new:Npn \@@_analysis_b_cs:Nww #1
- {
- 0 -1 \s_@@
- \@@_analysis_cs_space_count:NN \@@_analysis_b_cs_test:ww #1
- }
-\cs_new:Npn \@@_analysis_b_cs_test:ww #1 ; #2 ; #3 ; #4 ;
- {
- \exp_after:wN \@@_analysis_b_normals:ww
- \int_value:w \int_eval:w
- \if_int_compare:w #1 = \c_zero_int
- #3
- \else:
- \tex_skip:D \int_eval:n { #4 + #1 } \exp_stop_f:
- \fi:
- - #2
- \exp_after:wN ;
- \int_value:w \int_eval:n { #4 + #1 } ;
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_analysis_b_special:w}
-% \begin{macro}[EXP]{\@@_analysis_b_special_char:wN}
-% \begin{macro}[EXP]{\@@_analysis_b_special_space:w}
-% Here, |#1| is the current index in the array built in the first pass.
-% Check now whether we reached the end (we shouldn't keep the trailing
-% end-group character that marked the end of the token list in the
-% first pass).
-% Unpack the \tn{toks} register: when \texttt{e}/\texttt{x}-expanding again,
-% we will get the special token.
-% Then leave the category code in the input stream, followed by
-% the character code, and call \cs{@@_analysis_b_loop:w} with the next index.
-% \begin{macrocode}
-\group_begin:
- \char_set_catcode_other:N A
- \cs_new:Npn \@@_analysis_b_special:w
- \fi: \@@_analysis_b_normal:wwN 0 ; #1 ;
- {
- \fi:
- \if_int_compare:w #1 = \l_@@_analysis_index_int
- \exp_after:wN \prg_break:
- \fi:
- \tex_the:D \tex_toks:D #1 \s_@@
- \if_case:w \tex_gluestretch:D \tex_skip:D #1 \exp_stop_f:
- \token_to_str:N A
- \or: 1
- \or: 1
- \else: 2
- \fi:
- \if_int_odd:w \tex_gluestretch:D \tex_skip:D #1 \exp_stop_f:
- \exp_after:wN \@@_analysis_b_special_char:wN \int_value:w
- \else:
- \exp_after:wN \@@_analysis_b_special_space:w \int_value:w
- \fi:
- \int_eval:n { 1 + #1 } \exp_after:wN ;
- \token_to_str:N
- }
-\group_end:
-\cs_new:Npn \@@_analysis_b_special_char:wN #1 ; #2
- {
- \int_value:w `#2 \s_@@
- \@@_analysis_b_loop:w #1 ;
- }
-\cs_new:Npn \@@_analysis_b_special_space:w #1 ; ~
- {
- 32 \s_@@
- \@@_analysis_b_loop:w #1 ;
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Mapping through the analysis}
-%
-% \begin{macro}{\tl_analysis_map_inline:Nn, \tl_analysis_map_inline:nn}
-% \begin{macro}{\@@_analysis_map:Nn}
-% \begin{macro}{\@@_analysis_map:NwNw}
-% First obtain the analysis of the token list into
-% \cs{g_@@_analysis_result_tl}. To allow nested mappings, increase the
-% nesting depth \cs{g__kernel_prg_map_int} (shared between all
-% modules), then define the payload macro, which runs the user code
-% and has a name specific to that nesting depth. The looping macro
-% grabs the \meta{tokens}, \meta{catcode} and \meta{char code}; it
-% checks for the end of the loop with \cs{use_none:n} |##2|, normally
-% empty, but which becomes \cs{tl_map_break:} at the end; it then
-% calls the payload macro with the arguments in the correct order
-% (this is the reason why we cannot directly use the same macro for
-% looping and payload), and loops by calling itself. When the loop
-% ends, remember to decrease the nesting depth.
-% \begin{macrocode}
-\cs_new_protected:Npn \tl_analysis_map_inline:Nn #1
- { \exp_args:No \tl_analysis_map_inline:nn #1 }
-\cs_new_protected:Npn \tl_analysis_map_inline:nn #1
- {
- \@@_analysis:n {#1}
- \int_gincr:N \g__kernel_prg_map_int
- \exp_args:Nc \@@_analysis_map:Nn
- { @@_analysis_map_inline_ \int_use:N \g__kernel_prg_map_int :wNw }
- }
-\cs_new_protected:Npn \@@_analysis_map:Nn #1#2
- {
- \cs_gset_protected:Npn #1 ##1##2##3 {#2}
- \exp_after:wN \@@_analysis_map:NwNw \exp_after:wN #1
- \g_@@_analysis_result_tl
- \s_@@ { ? \tl_map_break: } \s_@@
- \prg_break_point:Nn \tl_map_break:
- { \int_gdecr:N \g__kernel_prg_map_int }
- }
-\cs_new_protected:Npn \@@_analysis_map:NwNw #1 #2 \s_@@ #3 #4 \s_@@
- {
- \use_none:n #3
- #1 {#2} {#4} {#3}
- \@@_analysis_map:NwNw #1
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Showing the results}
-%
-% \begin{macro}{\tl_analysis_show:N, \tl_analysis_log:N, \@@_analysis_show:NNN}
-% Add to \cs{@@_analysis:n} a third pass to display tokens to the terminal.
-% If the token list variable is not defined, throw the same error
-% as \cs{tl_show:N} by simply calling that function.
-% \begin{macrocode}
-\cs_new_protected:Npn \tl_analysis_show:N
- { \@@_analysis_show:NNN \msg_show:nneeee \tl_show:N }
-\cs_new_protected:Npn \tl_analysis_log:N
- { \@@_analysis_show:NNN \msg_log:nneeee \tl_log:N }
-\cs_new_protected:Npn \@@_analysis_show:NNN #1#2#3
- {
- \tl_if_exist:NTF #3
- {
- \exp_args:No \@@_analysis:n {#3}
- #1 { tl } { show-analysis }
- { \token_to_str:N #3 } { \@@_analysis_show: } { } { }
- }
- { #2 #3 }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\tl_analysis_show:n, \tl_analysis_log:n, \@@_analysis_show:Nn}
-% No existence test needed here.
-% \begin{macrocode}
-\cs_new_protected:Npn \tl_analysis_show:n
- { \@@_analysis_show:Nn \msg_show:nneeee }
-\cs_new_protected:Npn \tl_analysis_log:n
- { \@@_analysis_show:Nn \msg_log:nneeee }
-\cs_new_protected:Npn \@@_analysis_show:Nn #1#2
- {
- \@@_analysis:n {#2}
- #1 { tl } { show-analysis } { } { \@@_analysis_show: } { } { }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_analysis_show:, \@@_analysis_show_loop:wNw}
-% Here, |#1| \texttt{o}- and \texttt{e}/\texttt{x}-expands to the token;
-% |#2| is the category code (one uppercase hexadecimal digit),
-% $0$ for control sequences;
-% |#3| is the character code, which we ignore.
-% In the cases of control sequences and active characters,
-% the meaning may overflow one line, and we want to truncate
-% it. Those cases are thus separated out.
-% \begin{macrocode}
-\cs_new:Npn \@@_analysis_show:
- {
- \exp_after:wN \@@_analysis_show_loop:wNw \g_@@_analysis_result_tl
- \s_@@ { ? \prg_break: } \s_@@
- \prg_break_point:
- }
-\cs_new:Npn \@@_analysis_show_loop:wNw #1 \s_@@ #2 #3 \s_@@
- {
- \use_none:n #2
- \iow_newline: > \use:nn { ~ } { ~ }
- \if_int_compare:w "#2 = \c_zero_int
- \exp_after:wN \@@_analysis_show_cs:n
- \else:
- \if_int_compare:w "#2 = 13 \exp_stop_f:
- \exp_after:wN \exp_after:wN
- \exp_after:wN \@@_analysis_show_active:n
- \else:
- \exp_after:wN \exp_after:wN
- \exp_after:wN \@@_analysis_show_normal:n
- \fi:
- \fi:
- {#1}
- \@@_analysis_show_loop:wNw
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_analysis_show_normal:n}
-% Non-active characters are a simple matter of printing
-% the character, and its meaning. Our test suite checks that
-% begin-group and end-group characters do not mess up
-% \TeX{}'s alignment status.
-% \begin{macrocode}
-\cs_new:Npn \@@_analysis_show_normal:n #1
- {
- \exp_after:wN \token_to_str:N #1 ~
- ( \exp_after:wN \token_to_meaning:N #1 )
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_analysis_show_value:N}
-% This expands to the value of |#1| if it has any.
-% \begin{macrocode}
-\cs_new:Npn \@@_analysis_show_value:N #1
- {
- \token_if_expandable:NF #1
- {
- \token_if_chardef:NTF #1 \prg_break: { }
- \token_if_mathchardef:NTF #1 \prg_break: { }
- \token_if_dim_register:NTF #1 \prg_break: { }
- \token_if_int_register:NTF #1 \prg_break: { }
- \token_if_skip_register:NTF #1 \prg_break: { }
- \token_if_toks_register:NTF #1 \prg_break: { }
- \use_none:nnn
- \prg_break_point:
- \use:n { \exp_after:wN = \tex_the:D #1 }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[rEXP]{\@@_analysis_show_cs:n}
-% \begin{macro}[rEXP]{\@@_analysis_show_active:n}
-% \begin{macro}[rEXP]{\@@_analysis_show_long:nn}
-% \begin{macro}[rEXP]{\@@_analysis_show_long_aux:nnnn}
-% Control sequences and active characters are printed in the same way,
-% making sure not to go beyond the \cs{l_iow_line_count_int}. In case
-% of an overflow, we replace the last characters by
-% \cs{c_@@_analysis_show_etc_str}.
-% \begin{macrocode}
-\cs_new:Npn \@@_analysis_show_cs:n #1
- { \exp_args:No \@@_analysis_show_long:nn {#1} { control~sequence= } }
-\cs_new:Npn \@@_analysis_show_active:n #1
- { \exp_args:No \@@_analysis_show_long:nn {#1} { active~character= } }
-\cs_new:Npn \@@_analysis_show_long:nn #1
- {
- \@@_analysis_show_long_aux:oofn
- { \token_to_str:N #1 }
- { \token_to_meaning:N #1 }
- { \@@_analysis_show_value:N #1 }
- }
-\cs_new:Npn \@@_analysis_show_long_aux:nnnn #1#2#3#4
- {
- \int_compare:nNnTF
- { \str_count:n { #1 ~ ( #4 #2 #3 ) } }
- > { \l_iow_line_count_int - 3 }
- {
- \str_range:nnn { #1 ~ ( #4 #2 #3 ) } { 1 }
- {
- \l_iow_line_count_int - 3
- - \str_count:N \c_@@_analysis_show_etc_str
- }
- \c_@@_analysis_show_etc_str
- }
- { #1 ~ ( #4 #2 #3 ) }
- }
-\cs_generate_variant:Nn \@@_analysis_show_long_aux:nnnn { oof }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Peeking ahead}
-%
-% \begin{macro}[EXP]{\peek_analysis_map_break:, \peek_analysis_map_break:n}
-% The break statements use the general \cs{prg_map_break:Nn}.
-% \begin{macrocode}
-\cs_new:Npn \peek_analysis_map_break:
- { \prg_map_break:Nn \peek_analysis_map_break: { } }
-\cs_new:Npn \peek_analysis_map_break:n
- { \prg_map_break:Nn \peek_analysis_map_break: }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\l_@@_peek_charcode_int}
-% \begin{macrocode}
-\int_new:N \l_@@_peek_charcode_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\@@_analysis_char_arg:Nw, \@@_analysis_char_arg_aux:Nw}
-% After a call to \tn{futurelet} \cs{l_@@_analysis_token} followed by
-% a stringified character token (either explicit space or catcode
-% other character), grab the argument and pass it to |#1|. We only
-% need to do anything in the case of a space.
-% \begin{macrocode}
-\cs_new:Npn \@@_analysis_char_arg:Nw
- {
- \if_meaning:w \l_@@_analysis_token \c_space_token
- \exp_after:wN \@@_analysis_char_arg_aux:Nw
- \fi:
- }
-\cs_new:Npn \@@_analysis_char_arg_aux:Nw #1 ~ { #1 { ~ } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \peek_analysis_map_inline:n,
-% \@@_peek_analysis_loop:NNn, \@@_peek_analysis_test:,
-% \@@_peek_analysis_exp:N, \@@_peek_analysis_exp_aux:N,
-% \@@_peek_analysis_nonexp:N, \@@_peek_analysis_cs:N,
-% \@@_peek_analysis_char:N, \@@_peek_analysis_char:w,
-% \@@_peek_analysis_special:, \@@_peek_analysis_retest:,
-% \@@_peek_analysis_str:,
-% \@@_peek_analysis_str:w, \@@_peek_analysis_str:n,
-% \@@_peek_analysis_active_str:n, \@@_peek_analysis_explicit:n,
-% \@@_peek_analysis_escape:, \@@_peek_analysis_collect:w,
-% \@@_peek_analysis_collect:n, \@@_peek_analysis_collect_loop:,
-% \@@_peek_analysis_collect_test:, \@@_peek_analysis_collect_end:NNNN
-% }
-% Save the user's code in a control sequence that is suitable for
-% nested maps. We may wish to pass to this function an \tn{outer}
-% control sequence or active character; for this we will undefine
-% any expandable token (testing if it is \tn{outer} is much slower)
-% within a group, closed immediately after the function reads its
-% arguments to avoid affecting the user's code or even our peek code
-% (there is no risk of undefining \cs{group_end:} itself since that is
-% not expandable). This user's code function also
-% calls the loop auxiliary, and includes the trailing
-% \cs{prg_break_point:Nn} for when the user wants to stop the loop.
-% The loop auxiliary must remove that break point because it must look
-% at the input stream.
-% \begin{macrocode}
-\cs_new_protected:Npn \peek_analysis_map_inline:n #1
- {
- \group_align_safe_begin:
- \int_gincr:N \g__kernel_prg_map_int
- \cs_set_protected:cpn
- { @@_analysis_map_ \int_use:N \g__kernel_prg_map_int :nnN }
- ##1##2##3
- {
- \group_end:
- #1
- \@@_peek_analysis_loop:NNn
- \prg_break_point:Nn \peek_analysis_map_break:
- {
- \int_gdecr:N \g__kernel_prg_map_int
- \group_align_safe_end:
- }
- }
- \@@_peek_analysis_loop:NNn ? ? ?
- }
-% \end{macrocode}
-% The loop starts a group (closed by the user-code function defined
-% above) with a normalized escape character, and checks if the next
-% token is special or \texttt{N}-type (distinguishing expandable from
-% non-expandable tokens). The test for nonexpandable tokens in
-% \cs{@@_peek_analysis_test:} must be done after the tests for
-% begin-group, end-group, and space tokens, in case \cs{l_peek_token}
-% is either \tn{outer} or is a primitive \TeX{} conditional, as such
-% tokens cannot be skipped over correctly by conditional code.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_peek_analysis_loop:NNn #1#2#3
- {
- \group_begin:
- \tl_set:Ne \l_@@_peek_code_tl
- {
- \exp_not:c
- { @@_analysis_map_ \int_use:N \g__kernel_prg_map_int :nnN }
- }
- \int_set:Nn \tex_escapechar:D { `\\ }
- \peek_after:Nw \@@_peek_analysis_test:
- }
-\cs_new_protected:Npn \@@_peek_analysis_test:
- {
- \if_case:w
- \if_catcode:w \exp_not:N \l_peek_token { \c_max_int \fi:
- \if_catcode:w \exp_not:N \l_peek_token } \c_max_int \fi:
- \if_meaning:w \l_peek_token \c_space_token \c_max_int \fi:
- \exp_after:wN \if_meaning:w \exp_not:N \l_peek_token \l_peek_token
- \c_one_int
- \fi:
- \c_zero_int
- \exp_after:wN \exp_after:wN
- \exp_after:wN \@@_peek_analysis_exp:N
- \exp_after:wN \exp_not:N
- \or:
- \exp_after:wN \@@_peek_analysis_nonexp:N
- \else:
- \exp_after:wN \@@_peek_analysis_special:
- \fi:
- }
-% \end{macrocode}
-% Expandable tokens (which are automatically |N|-type) can be
-% \tn{outer} macros, hence the need for \cs{exp_after:wN} and
-% \cs{exp_not:N} in the code above, which allows the next function to
-% safely grab the token as an argument. We run some code that is
-% expanded using the primitive \cs{cs_set_nopar:Npe} rather than
-% \cs{tl_set:Ne} to avoid grabbing it as an argument as |#1| may be
-% \tn{outer}. To allow~|#1| as an argument of the user's function
-% (stored in \cs{l_@@_peek_code_tl}), we set it equal to
-% \cs{scan_stop:}, but we do it at the last minute because |#1|
-% may be some pretty important function such as \cs{exp_after:wN}.
-% Then we put the user's function and the elaborate first argument
-% \cs{__kernel_exp_not:w} \cs{exp_after:wN} |{| \cs{exp_not:N} |#1| |}|:
-% indeed we cannot use \cs{exp_not:n} |{#1}| as this breaks for an
-% \tn{outer} macro and we cannot use \cs{exp_not:N} |#1|, as
-% \texttt{o}-expanding this yields a \enquote{notexpanded} token equal
-% to (a weird) \tn{relax}, which would have the wrong value for
-% primitive \TeX{} conditionals such as \cs{if_meaning:w}.
-%
-% Then we must add |{-1}0| if the token is a
-% control sequence and \Arg{charcode}|D| otherwise. Distinguishing
-% the two cases is easy: since we have made the escape character
-% printable, \cs{token_to_str:N} gives at least two characters for a
-% control sequence versus a single one for an active character
-% (possibly being a space). Importantly, once we apply
-% \cs{token_to_str:N} we no longer need to worry about \tn{outer}
-% tokens.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_peek_analysis_exp:N #1
- {
- \cs_set_nopar:Npe \l_@@_peek_code_tl
- {
- \tex_let:D \exp_not:N #1 \scan_stop:
- \exp_not:o \l_@@_peek_code_tl
- {
- \exp_not:n { \__kernel_exp_not:w \exp_after:wN }
- { \exp_not:N \exp_not:N \exp_not:N #1 }
- }
- \exp_after:wN \@@_peek_analysis_exp_aux:Nw
- \token_to_str:N #1 \prg_do_nothing: \s_@@
- }
- \l_@@_peek_code_tl
- }
-\cs_new:Npe \@@_peek_analysis_exp_aux:Nw #1#2 \s_@@
- {
- \exp_not:N \if:w \scan_stop: #2 \scan_stop:
- { \exp_not:N \int_value:w `#1 } \token_to_str:N D
- \exp_not:N \else:
- { -1 } 0
- \exp_not:N \fi:
- }
-% \end{macrocode}
-% For normal non-expandable tokens we must distinguish characters
-% (including active ones and macro parameter characters) from control
-% sequences (whose string representation is more than one character
-% because we made the escape character printable). For a control
-% sequence call the user code with suitable arguments, wrapping |#1|
-% within \cs{exp_not:n} just in case it happens to be equal to a macro
-% parameter character. We do not skip \cs{exp_not:n} when
-% unnecessary, because this auxiliary is also called in
-% \cs{@@_peek_analysis_retest:} where we have changed some control
-% sequences or active characters to \cs{scan_stop:} temporarily.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_peek_analysis_nonexp:N #1
- {
- \if_charcode:w
- \scan_stop:
- \exp_after:wN \use_none:n \token_to_str:N #1 \prg_do_nothing:
- \scan_stop:
- \exp_after:wN \@@_peek_analysis_char:N
- \else:
- \exp_after:wN \@@_peek_analysis_cs:N
- \fi:
- #1
- }
-\cs_new_protected:Npn \@@_peek_analysis_cs:N #1
- { \l_@@_peek_code_tl { \exp_not:n {#1} } { -1 } 0 }
-% \end{macrocode}
-% For normal characters we must determine their catcode. The main
-% difficulty is that the character may be an active character
-% masquerading as (i.e., set equal to) itself with a different
-% catcode. Two approaches based on \tn{lowercase} can detect this.
-% One could make an active character with the same catcode as~|#1| and
-% change its definition before testing the catcode of~|#1|, but in
-% some Unicode engine this fills up the hash table uselessly.
-% Instead, we lowercase~|#1| itself, changing its character code
-% to~$32$, namely space (because \LuaTeX{} cannot turn catcode~$10$
-% characters to anything else than character code~$32$), then we apply
-% \cs{@@_analysis_b_char:Nn}, which detects active characters by
-% comparing them to \cs{tex_undefined:D}, and we must have undefined
-% the active space (locally) for this test to work.
-% To define \cs{@@_peek_analysis_char:N} itself we use an
-% |e|-expanding assignment to get the active space in the right place
-% after making it (just for this definition) unexpandable.
-% Finally \cs{@@_peek_analysis_char:w} receives the \meta{charcode},
-% \meta{user function}, \meta{catcode}, and \meta{token}, and places
-% the arguments in the correct order. It keeps \cs{exp_not:n} for
-% macro parameter characters and active characters (the latter could
-% be macro parameter characters, and it seems more uniform to always
-% put \cs{exp_not:n}), and otherwise eliminates it by expanding once
-% with \cs{exp_args:NNNo}.
-% \begin{macrocode}
-\group_begin:
-\char_set_active_eq:NN \ \scan_stop:
-\cs_new_protected:Npe \@@_peek_analysis_char:N #1
- {
- \cs_set_eq:NN
- \char_generate:nn { 32 } { 13 }
- \exp_not:N \tex_undefined:D
- \tex_lccode:D `#1 = 32 \exp_stop_f:
- \tex_lowercase:D
- {
- \tl_put_right:Ne \exp_not:N \l_@@_peek_code_tl
- { \exp_not:n { \@@_analysis_b_char:Nn \use_none:n } {#1} }
- }
- \exp_not:n
- {
- \exp_after:wN \@@_peek_analysis_char:w
- \int_value:w
- }
- `#1
- \exp_not:n { \exp_after:wN \s_@@ \l_@@_peek_code_tl }
- #1
- }
-\group_end:
-\cs_new_protected:Npn \@@_peek_analysis_char:w #1 \s_@@ #2#3#4
- {
- \if_charcode:w 6 #3
- \else:
- \if_charcode:w D #3
- \else:
- \exp_args:NNNo
- \fi:
- \fi:
- #2 { \exp_not:n {#4} } {#1} #3
- }
-% \end{macrocode}
-% For special characters the idea is to eventually act with
-% \cs{token_to_str:N}, then pick up one by one the characters of this
-% string representation until hitting the token that follows. First
-% determine the character code of (the meaning of) the \meta{token}
-% (which we know is a special token), make sure the escape character
-% is different from it, normalize the meanings of two active
-% characters and the empty control sequence, and filter out these
-% cases in \cs{@@_peek_analysis_retest:}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_peek_analysis_special:
- {
- \tex_let:D \l_@@_analysis_token = ~ \l_peek_token
- \int_set:Nn \l_@@_peek_charcode_int
- { \@@_analysis_extract_charcode: }
- \if_int_compare:w \l_@@_peek_charcode_int = \tex_escapechar:D
- \int_set:Nn \tex_escapechar:D { `\/ }
- \fi:
- \char_set_active_eq:nN { \l_@@_peek_charcode_int } \scan_stop:
- \char_set_active_eq:nN { \tex_escapechar:D } \scan_stop:
- \cs_set_eq:cN { } \scan_stop:
- \tex_futurelet:D \l_@@_analysis_token
- \@@_peek_analysis_retest:
- }
-\cs_new_protected:Npn \@@_peek_analysis_retest:
- {
- \if_meaning:w \l_@@_analysis_token \scan_stop:
- \exp_after:wN \@@_peek_analysis_nonexp:N
- \else:
- \exp_after:wN \@@_peek_analysis_str:
- \fi:
- }
-% \end{macrocode}
-% At this point we know the meaning of the \meta{token} in the input
-% stream is \cs{l_peek_token}, either a space (32, 10) or a
-% begin-group or end-group token (catcode $1$ or~$2$), and we excluded
-% a few cases that would be difficult later (empty control sequence,
-% active character with the same character code as its meaning or as
-% the escape character). The idea is to apply \cs{token_to_str:N} to
-% the \meta{token} then grab characters (of category code~$12$ except
-% for spaces that have category code~$10$) to reconstruct it. In
-% earlier versions of the code we would peek at the \meta{next token}
-% that lies after \meta{token} in the input stream, which would help
-% us be more accurate in reconstructing the \meta{token} case in edge
-% cases (mentioned below), but this had the side-effect of tokenizing
-% the input stream (turning characters into tokens) farther ahead than
-% needed.
-%
-% We hit the \meta{token} with \cs{token_to_str:N} and start grabbing
-% characters. More
-% precisely, by looking at the first character in the string
-% representation of the \meta{token} we distinguish three cases:
-% a stringified control sequence starts with the escape character; for
-% an explicit character we find that same character; for an active
-% character we find anything else (we made sure to exclude the case of
-% an active character whose string representation coincides with the
-% other two cases).
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_peek_analysis_str:
- {
- \exp_after:wN \tex_futurelet:D
- \exp_after:wN \l_@@_analysis_token
- \exp_after:wN \@@_peek_analysis_str:w
- \token_to_str:N
- }
-\cs_new_protected:Npn \@@_peek_analysis_str:w
- { \@@_analysis_char_arg:Nw \@@_peek_analysis_str:n }
-\cs_new_protected:Npn \@@_peek_analysis_str:n #1
- {
- \int_case:nnF { `#1 }
- {
- { \l_@@_peek_charcode_int }
- { \@@_peek_analysis_explicit:n {#1} }
- { \tex_escapechar:D } { \@@_peek_analysis_escape: }
- }
- { \@@_peek_analysis_active_str:n {#1} }
- }
-% \end{macrocode}
-% When |#1| is a stringified active character we pass appropriate
-% arguments to the user's code; thankfully \cs{char_generate:nn}
-% can make active characters.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_peek_analysis_active_str:n #1
- {
- \tl_put_right:Ne \l_@@_peek_code_tl
- {
- { \char_generate:nn { `#1 } { 13 } }
- { \int_value:w `#1 }
- \token_to_str:N D
- }
- \l_@@_peek_code_tl
- }
-% \end{macrocode}
-% When |#1| matches the character we had extracted from the meaning of
-% \cs{l_peek_token}, the token was an explicit character, which can be
-% a standard space, or a begin-group or end-group character with some
-% character code. In the latter two cases we call
-% \cs{char_generate:nn} with suitable arguments and put suitable
-% \cs{if_false:} \cs{fi:} constructions to make the result balanced
-% and such that \texttt{o}-expanding or \texttt{e}/\texttt{x}-expanding gives
-% back a single (unbalanced) begin-group or end-group character.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_peek_analysis_explicit:n #1
- {
- \tl_put_right:Ne \l_@@_peek_code_tl
- {
- \if_meaning:w \l_peek_token \c_space_token
- { ~ } { 32 } \token_to_str:N A
- \else:
- \if_catcode:w \l_peek_token \c_group_begin_token
- {
- \exp_not:N \exp_after:wN
- \char_generate:nn { `#1 } { 1 }
- \exp_not:N \if_false:
- \if_false: { \fi: }
- \exp_not:N \fi:
- }
- { \int_value:w `#1 }
- 1
- \else:
- {
- \exp_not:N \if_false:
- { \if_false: } \fi:
- \exp_not:N \fi:
- \char_generate:nn { `#1 } { 2 }
- }
- { \int_value:w `#1 }
- 2
- \fi:
- \fi:
- }
- \l_@@_peek_code_tl
- }
-% \end{macrocode}
-% Finally there is the case of a special token whose string
-% representation starts with an escape character, namely the token was
-% a control sequence. In that case we could have grabbed the token
-% directly as an \texttt{N}-type argument, but of course we couldn't
-% know that until we had run all the various tests including
-% stringifying the token. We are thus left with the hard work of
-% picking up one by one the characters in the csname (being careful
-% about spaces), until the constructed csname has the expected
-% meaning. This fails if someone defines a token like
-% \cs[no-index]{bgroup@my} whose string representation starts the same
-% as another token with the same meaning being an implicit character
-% token of category code $1$, $2$, or $10$.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_peek_analysis_escape:
- {
- \tl_clear:N \l_@@_internal_a_tl
- \tex_futurelet:D \l_@@_analysis_token
- \@@_peek_analysis_collect:w
- }
-\cs_new_protected:Npn \@@_peek_analysis_collect:w
- { \@@_analysis_char_arg:Nw \@@_peek_analysis_collect:n }
-\cs_new_protected:Npn \@@_peek_analysis_collect:n #1
- {
- \tl_put_right:Nn \l_@@_internal_a_tl {#1}
- \@@_peek_analysis_collect_loop:
- }
-\cs_new_protected:Npn \@@_peek_analysis_collect_loop:
- {
- \exp_after:wN \if_meaning:w
- \cs:w
- \if_cs_exist:w \l_@@_internal_a_tl \cs_end:
- \l_@@_internal_a_tl
- \else:
- c_one % anything short
- \fi:
- \cs_end:
- \l_peek_token
- \@@_peek_analysis_collect_end:NNNN
- \fi:
- \tex_futurelet:D \l_@@_analysis_token
- \@@_peek_analysis_collect:w
- }
-% \end{macrocode}
-% As in all other cases, end by calling the user code with suitable
-% arguments (here |#1| is \cs{fi:}).
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_peek_analysis_collect_end:NNNN #1#2#3#4
- {
- #1
- \tl_put_right:Ne \l_@@_peek_code_tl
- {
- { \exp_not:N \exp_not:n { \exp_not:c { \l_@@_internal_a_tl } } }
- { -1 }
- 0
- }
- \l_@@_peek_code_tl
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Messages}
-%
-% \begin{variable}{\c_@@_analysis_show_etc_str}
-% When a control sequence (or active character)
-% and its meaning are too long to fit in one line
-% of the terminal, the end is replaced by this token list.
-% \begin{macrocode}
-\tl_const:Ne \c_@@_analysis_show_etc_str % (
- { \token_to_str:N \ETC.) }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macrocode}
-\msg_new:nnn { tl } { show-analysis }
- {
- The~token~list~ \tl_if_empty:nF {#1} { #1 ~ }
- \tl_if_empty:nTF {#2}
- { is~empty }
- { contains~the~tokens: #2 }
- }
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3tl-build.dtx b/macros/latex/contrib/l3kernel/l3tl-build.dtx
deleted file mode 100644
index 175b7bc24f..0000000000
--- a/macros/latex/contrib/l3kernel/l3tl-build.dtx
+++ /dev/null
@@ -1,355 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3tl-build.dtx
-%
-% Copyright (C) 2018-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3tl-build} module\\ Piecewise \texttt{tl} constructions^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \section{Constructing \meta{tl~var} by accumulation}
-%
-% When creating a \meta{tl~var} by accumulation of many tokens, the performance
-% available using a combination of \cs{tl_set:Nn} and \cs{tl_put_right:Nn} or
-% similar begins to become an issue. To address this, a set of functions are
-% available to \enquote{build} a \meta{tl~var}. The performance of this approach
-% is much more efficient than the standard \cs{tl_put_right:Nn}, but the
-% constructed token list cannot be accessed during construction other than
-% by methods provided in this section.
-%
-% Whilst the exact performance difference is dependent on the size of each
-% added block of tokens and the total number of blocks, in general, the
-% \cs[no-index]{tl_build_(g)put...} functions will out-perform the basic
-% \cs[no-index]{tl_(g)put...} equivalent if more than 100 non-empty addition
-% operations occur. See
-% \url{https://github.com/latex3/latex3/issues/1393#issuecomment-1880164756}
-% for a more detailed analysis.
-%
-% \begin{function}[added = 2018-04-01]{\tl_build_begin:N, \tl_build_gbegin:N}
-% \begin{syntax}
-% \cs{tl_build_begin:N} \meta{tl~var}
-% \end{syntax}
-% Clears the \meta{tl~var} and sets it up to support other
-% \cs[no-index]{tl_build_\ldots{}} functions. Until \cs{tl_build_end:N}
-% \meta{tl~var} is called, applying any function from \pkg{l3tl} other
-% than \cs[no-index]{tl_build_\ldots{}} will lead to incorrect
-% results. The |begin| and |gbegin| functions must be used for local
-% and global \meta{tl~var} respectively.
-% \end{function}
-%
-% \begin{function}[added = 2018-04-01]
-% {
-% \tl_build_put_left:Nn, \tl_build_put_left:Ne,
-% \tl_build_gput_left:Nn, \tl_build_gput_left:Ne,
-% \tl_build_put_right:Nn, \tl_build_put_right:Ne,
-% \tl_build_gput_right:Nn, \tl_build_gput_right:Ne
-% }
-% \begin{syntax}
-% \cs{tl_build_put_left:Nn} \meta{tl~var} \Arg{tokens}
-% \cs{tl_build_put_right:Nn} \meta{tl~var} \Arg{tokens}
-% \end{syntax}
-% Adds \meta{tokens} to the left or right side of the current contents
-% of \meta{tl~var}. The \meta{tl~var} must have been set up with
-% \cs{tl_build_begin:N} or \cs{tl_build_gbegin:N}. The |put| and
-% |gput| functions must be used for local and global \meta{tl~var}
-% respectively. The |right| functions are about twice faster than the
-% |left| functions.
-% \end{function}
-%
-% \begin{function}[added = 2018-04-01]{\tl_build_end:N, \tl_build_gend:N}
-% \begin{syntax}
-% \cs{tl_build_end:N} \meta{tl~var}
-% \end{syntax}
-% Gets the contents of \meta{tl~var} and stores that into the
-% \meta{tl~var} using \cs{tl_set:Nn} or \cs{tl_gset:Nn}.
-% The \meta{tl~var} must have
-% been set up with \cs{tl_build_begin:N} or \cs{tl_build_gbegin:N}.
-% The |end| and |gend| functions must be used for local and global
-% \meta{tl~var} respectively. These functions completely remove the
-% setup code that enabled \meta{tl~var} to be used for other
-% \cs[no-index]{tl_build_\ldots{}} functions. After the action of
-% |end|/|gend|, the \meta{tl~var} may be manipulated using standard
-% \texttt{tl} functions.
-% \end{function}
-%
-% \begin{function}[added = 2023-12-14]{\tl_build_get_intermediate:NN}
-% \begin{syntax}
-% \cs{tl_build_get_intermediate:NN} \meta{tl~var_1} \meta{tl~var_2}
-% \end{syntax}
-% Stores the contents of the \meta{tl~var_1} in the \meta{tl~var_2}.
-% The \meta{tl~var_1} must have been set up with \cs{tl_build_begin:N}
-% or \cs{tl_build_gbegin:N}. The \meta{tl~var_2} is a
-% \enquote{normal} token list variable, assigned locally using
-% \cs{tl_set:Nn}.
-% \end{function}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3tl-build} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=tl>
-% \end{macrocode}
-%
-% Between \cs{tl_build_begin:N} \meta{tl~var} and \cs{tl_build_end:N}
-% \meta{tl~var}, the \meta{tl~var} has the structure
-% \begin{quote}
-% \cs{exp_end:} \ldots{} \cs{exp_end:} \cs{@@_build_last:NNn}
-% \meta{assignment} \meta{next~tl} \Arg{left} \meta{right}
-% \end{quote}
-% where \meta{right} is not braced. The \enquote{data} it represents is
-% \meta{left} followed by the \enquote{data} of \meta{next~tl} followed
-% by \meta{right}. The \meta{next~tl} is a token list variable whose
-% name is that of \meta{tl~var} followed by~|'|. There are between $0$
-% and $4$ \cs{exp_end:} to keep track of when \meta{left} and
-% \meta{right} should be put into the \meta{next~tl}. The
-% \meta{assignment} is \cs{cs_set_nopar:Npe} if the variable is local,
-% and \cs{cs_gset_nopar:Npe} if it is global.
-%
-% \begin{macro}{\tl_build_begin:N, \tl_build_gbegin:N}
-% \begin{macro}{\@@_build_begin:NN, \@@_build_begin:NNN}
-% First construct the \meta{next~tl}: using a prime here conflicts
-% with the usual \pkg{expl3} convention but we need a name that can be
-% derived from |#1| without any external data such as a counter.
-% Empty that \meta{next~tl} and setup the structure. The local and
-% global versions only differ by a single function
-% \cs[no-index]{cs_(g)set_nopar:Npe} used for all assignments: this is
-% important because only that function is stored in the \meta{tl~var}
-% and \meta{next~tl} for subsequent assignments. In principle
-% \cs{@@_build_begin:NNN} could use \cs[no-index]{tl_(g)clear_new:N}
-% to empty |#1| and make sure it is defined, but logging the
-% definition does not seem useful so we just do |#3| |#1| |{}| to
-% clear it locally or globally as appropriate.
-% \begin{macrocode}
-\cs_new_protected:Npn \tl_build_begin:N #1
- { \@@_build_begin:NN \cs_set_nopar:Npe #1 }
-\cs_new_protected:Npn \tl_build_gbegin:N #1
- { \@@_build_begin:NN \cs_gset_nopar:Npe #1 }
-\cs_new_protected:Npn \@@_build_begin:NN #1#2
- { \exp_args:Nc \@@_build_begin:NNN { \cs_to_str:N #2 ' } #2 #1 }
-\cs_new_protected:Npn \@@_build_begin:NNN #1#2#3
- {
- #3 #1 { }
- #3 #2
- {
- \exp_not:n { \exp_end: \exp_end: \exp_end: \exp_end: }
- \exp_not:n { \@@_build_last:NNn #3 #1 { } }
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \tl_build_put_right:Nn, \tl_build_put_right:Ne, \tl_build_put_right:Nx,
-% \tl_build_gput_right:Nn, \tl_build_gput_right:Ne, \tl_build_gput_right:Nx
-% }
-% \begin{macro}{\@@_build_last:NNn}
-% \begin{macro}{\@@_build_put:nn}
-% \begin{macro}{\@@_build_put:nw}
-% Similar to \cs{tl_put_right:Nn}, but apply \cs{exp:w} to |#1|. Most
-% of the time this just removes one \cs{exp_end:}. When there are
-% none left, \cs{@@_build_last:NNn} is expanded instead. It resets
-% the definition of the \meta{tl~var} by ending the \cs{exp_not:n} and
-% the definition early. Then it makes sure the \meta{next~tl} (its
-% argument |#1|) is set-up and starts a new definition. Then
-% \cs{@@_build_put:nn} and \cs{@@_build_put:nw} place the \meta{left}
-% part of the original \meta{tl~var} as appropriate for the definition
-% of the \meta{next~tl} (the \meta{right} part is left in the right
-% place without ever becoming a macro argument). We use
-% \cs{exp_after:wN} rather than some \cs{exp_args:No} to avoid reading
-% arguments that are likely very long token lists. We use
-% \cs[no-index]{cs_(g)set_nopar:Npe} rather than
-% \cs[no-index]{tl_(g)set:Ne} partly for the same reason and partly
-% because the assignments are interrupted by brace tricks, which
-% implies that the assignment does not simply set the token list to an
-% |e|-expansion of the second argument.
-% \begin{macrocode}
-\cs_new_protected:Npn \tl_build_put_right:Nn #1#2
- {
- \cs_set_nopar:Npe #1
- { \__kernel_exp_not:w \exp_after:wN { \exp:w #1 #2 } }
- }
-\cs_generate_variant:Nn \tl_build_put_right:Nn { Ne , Nx }
-\cs_new_protected:Npn \tl_build_gput_right:Nn #1#2
- {
- \cs_gset_nopar:Npe #1
- { \__kernel_exp_not:w \exp_after:wN { \exp:w #1 #2 } }
- }
-\cs_generate_variant:Nn \tl_build_gput_right:Nn { Ne , Nx }
-\cs_new_protected:Npn \@@_build_last:NNn #1#2
- {
- \if_false: { { \fi:
- \exp_end: \exp_end: \exp_end: \exp_end: \exp_end:
- \@@_build_last:NNn #1 #2 { }
- }
- }
- \if_meaning:w \c_empty_tl #2
- \@@_build_begin:NN #1 #2
- \fi:
- #1 #2
- {
- \__kernel_exp_not:w \exp_after:wN
- {
- \exp:w \if_false: } } \fi:
- \exp_after:wN \@@_build_put:nn \exp_after:wN {#2}
- }
-\cs_new_protected:Npn \@@_build_put:nn #1#2 { \@@_build_put:nw {#2} #1 }
-\cs_new_protected:Npn \@@_build_put:nw #1#2 \@@_build_last:NNn #3#4#5
- { #2 \@@_build_last:NNn #3 #4 { #1 #5 } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \tl_build_put_left:Nn, \tl_build_put_left:Ne, \tl_build_put_left:Nx,
-% \tl_build_gput_left:Nn, \tl_build_gput_left:Ne, \tl_build_gput_left:Nx
-% }
-% \begin{macro}{\@@_build_put_left:NNn}
-% See \cs{tl_build_put_right:Nn} for all the machinery. We could
-% easily provide \cs[no-index]{tl_build_put_left_right:Nnn}, by just
-% adding the \meta{right} material after the \Arg{left} in the
-% |e|-expanding assignment.
-% \begin{macrocode}
-\cs_new_protected:Npn \tl_build_put_left:Nn #1
- { \@@_build_put_left:NNn \cs_set_nopar:Npe #1 }
-\cs_generate_variant:Nn \tl_build_put_left:Nn { Ne , Nx }
-\cs_new_protected:Npn \tl_build_gput_left:Nn #1
- { \@@_build_put_left:NNn \cs_gset_nopar:Npe #1 }
-\cs_generate_variant:Nn \tl_build_gput_left:Nn { Ne , Nx }
-\cs_new_protected:Npn \@@_build_put_left:NNn #1#2#3
- {
- #1 #2
- {
- \__kernel_exp_not:w \exp_after:wN
- {
- \exp:w \exp_after:wN \@@_build_put:nn
- \exp_after:wN {#2} {#3}
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\tl_build_end:N, \tl_build_gend:N}
-% \begin{macro}{\@@_build_end_loop:NN}
-% Get the data then clear the \meta{next~tl} recursively until finding
-% an empty one. It is perhaps wasteful to repeatedly use
-% \cs{cs_to_str:N}. The local/global scope is checked by
-% \cs{tl_set:Ne} or \cs{tl_gset:Ne}.
-% \begin{macrocode}
-\cs_new_protected:Npn \tl_build_end:N #1
- {
- \@@_build_get:NNN \__kernel_tl_set:Nx #1 #1
- \exp_args:Nc \@@_build_end_loop:NN { \cs_to_str:N #1 ' } \tl_clear:N
- }
-\cs_new_protected:Npn \tl_build_gend:N #1
- {
- \@@_build_get:NNN \__kernel_tl_gset:Nx #1 #1
- \exp_args:Nc \@@_build_end_loop:NN { \cs_to_str:N #1 ' } \tl_gclear:N
- }
-\cs_new_protected:Npn \@@_build_end_loop:NN #1#2
- {
- \if_meaning:w \c_empty_tl #1
- \exp_after:wN \use_none:nnnnnn
- \fi:
- #2 #1
- \exp_args:Nc \@@_build_end_loop:NN { \cs_to_str:N #1 ' } #2
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\tl_build_get_intermediate:NN}
-% \begin{macrocode}
-\cs_new_protected:Npn \tl_build_get_intermediate:NN
- { \@@_build_get:NNN \__kernel_tl_set:Nx }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_build_get:NNN}
-% \begin{macro}{\@@_build_get:w, \@@_build_get_end:w}
-% The idea is to expand the \meta{tl~var} then the \meta{next~tl} and
-% so on, all within an |e|-expanding assignment, and wrap as
-% appropriate in \cs{exp_not:n}. The various \meta{left} parts are
-% left in the assignment as we go, which enables us to expand the
-% \meta{next~tl} at the right place. The various \meta{right} parts
-% are eventually picked up in one last \cs{exp_not:n}, with a brace
-% trick to wrap all the \meta{right} parts together.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_build_get:NNN #1#2#3
- { #1 #3 { \if_false: { \fi: \exp_after:wN \@@_build_get:w #2 } } }
-\cs_new:Npn \@@_build_get:w #1 \@@_build_last:NNn #2#3#4
- {
- \exp_not:n {#4}
- \if_meaning:w \c_empty_tl #3
- \exp_after:wN \@@_build_get_end:w
- \fi:
- \exp_after:wN \@@_build_get:w #3
- }
-\cs_new:Npn \@@_build_get_end:w #1#2#3
- { \__kernel_exp_not:w \exp_after:wN { \if_false: } \fi: }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3tl.dtx b/macros/latex/contrib/l3kernel/l3tl.dtx
deleted file mode 100644
index 0938e7cd5e..0000000000
--- a/macros/latex/contrib/l3kernel/l3tl.dtx
+++ /dev/null
@@ -1,3843 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3tl.dtx
-%
-% Copyright (C) 1990-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3tl} module\\ Token lists^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \TeX{} works with tokens, and \LaTeX3 therefore provides a number of
-% functions to deal with lists of tokens. Token lists may be present
-% directly in the argument to a function:
-% \begin{verbatim}
-% \foo:n { a collection of \tokens }
-% \end{verbatim}
-% or may be stored in a so-called \enquote{token list variable}, which
-% have the suffix \texttt{tl}: a token list variable can also be used as
-% the argument to a function, for example
-% \begin{verbatim}
-% \foo:N \l_some_tl
-% \end{verbatim}
-% In both cases, functions are available to test and manipulate the lists
-% of tokens, and these have the module prefix \texttt{tl}.
-% In many cases, functions which can be applied to token list variables
-% are paired with similar functions for application to explicit lists
-% of tokens: the two \enquote{views} of a token list are therefore collected
-% together here.
-%
-% A token list (explicit, or stored in a variable) can be seen either
-% as a list of \enquote{items},
-% or a list of \enquote{tokens}. An item is whatever \cs{use:n} would
-% grab as its argument: a single non-space token or a brace group,
-% with optional leading explicit space characters (each item is thus
-% itself a token list). A token is either a normal \texttt{N} argument,
-% or \verb*| |, |{|, or |}| (assuming normal \TeX{} category codes).
-% Thus for example
-% \begin{verbatim}
-% { Hello } ~ world
-% \end{verbatim}
-% contains six items (\texttt{Hello}, \texttt{w}, \texttt{o}, \texttt{r},
-% \texttt{l} and \texttt{d}), but thirteen tokens (|{|, \texttt{H}, \texttt{e},
-% \texttt{l}, \texttt{l}, \texttt{o}, |}|, \verb*| |, \texttt{w}, \texttt{o},
-% \texttt{r}, \texttt{l} and \texttt{d}).
-% Functions which act on items are often faster than their analogue acting
-% directly on tokens.
-%
-% \section{Creating and initialising token list variables}
-%
-% \begin{function}{\tl_new:N, \tl_new:c}
-% \begin{syntax}
-% \cs{tl_new:N} \meta{tl~var}
-% \end{syntax}
-% Creates a new \meta{tl~var} or raises an error if the
-% name is already taken. The declaration is global. The
-% \meta{tl~var} is initially empty.
-% \end{function}
-%
-% \begin{function}
-% {
-% \tl_const:Nn, \tl_const:Ne,
-% \tl_const:cn, \tl_const:ce
-% }
-% \begin{syntax}
-% \cs{tl_const:Nn} \meta{tl~var} \Arg{tokens}
-% \end{syntax}
-% Creates a new constant \meta{tl~var} or raises an error
-% if the name is already taken. The value of the
-% \meta{tl~var} is set globally to the \meta{tokens}.
-% \end{function}
-%
-% \begin{function}{\tl_clear:N, \tl_clear:c, \tl_gclear:N, \tl_gclear:c}
-% \begin{syntax}
-% \cs{tl_clear:N} \meta{tl~var}
-% \end{syntax}
-% Clears all entries from the \meta{tl~var}.
-% \end{function}
-%
-% \begin{function}
-% {\tl_clear_new:N, \tl_clear_new:c, \tl_gclear_new:N, \tl_gclear_new:c}
-% \begin{syntax}
-% \cs{tl_clear_new:N} \meta{tl~var}
-% \end{syntax}
-% Ensures that the \meta{tl~var} exists globally by applying
-% \cs{tl_new:N} if necessary, then applies \cs[index=tl_clear:N]{tl_(g)clear:N} to leave
-% the \meta{tl~var} empty.
-% \end{function}
-%
-% \begin{function}
-% {
-% \tl_set_eq:NN, \tl_set_eq:cN, \tl_set_eq:Nc, \tl_set_eq:cc,
-% \tl_gset_eq:NN, \tl_gset_eq:cN, \tl_gset_eq:Nc, \tl_gset_eq:cc
-% }
-% \begin{syntax}
-% \cs{tl_set_eq:NN} \meta{tl~var_1} \meta{tl~var_2}
-% \end{syntax}
-% Sets the content of \meta{tl~var_1} equal to that of
-% \meta{tl~var_2}.
-% \end{function}
-%
-% \begin{function}[added = 2012-05-18]
-% {
-% \tl_concat:NNN, \tl_concat:ccc,
-% \tl_gconcat:NNN, \tl_gconcat:ccc
-% }
-% \begin{syntax}
-% \cs{tl_concat:NNN} \meta{tl~var_1} \meta{tl~var_2} \meta{tl~var_3}
-% \end{syntax}
-% Concatenates the content of \meta{tl~var_2} and \meta{tl~var_3}
-% together and saves the result in \meta{tl~var_1}. The \meta{tl~var_2}
-% is placed at the left side of the new token list.
-% \end{function}
-%
-% \begin{function}[EXP, pTF, added=2012-03-03]{\tl_if_exist:N, \tl_if_exist:c}
-% \begin{syntax}
-% \cs{tl_if_exist_p:N} \meta{tl~var}
-% \cs{tl_if_exist:NTF} \meta{tl~var} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests whether the \meta{tl~var} is currently defined. This does not
-% check that the \meta{tl~var} really is a token list variable.
-% \end{function}
-%
-% \section{Adding data to token list variables}
-%
-% \begin{function}
-% {
-% \tl_set:Nn, \tl_set:NV, \tl_set:Nv, \tl_set:No, \tl_set:Ne, \tl_set:Nf,
-% \tl_set:cn, \tl_set:cV, \tl_set:cv, \tl_set:co, \tl_set:ce, \tl_set:cf,
-% \tl_gset:Nn, \tl_gset:NV, \tl_gset:Nv,
-% \tl_gset:No, \tl_gset:Ne, \tl_gset:Nf,
-% \tl_gset:cn, \tl_gset:cV, \tl_gset:cv,
-% \tl_gset:co, \tl_gset:ce, \tl_gset:cf
-% }
-% \begin{syntax}
-% \cs{tl_set:Nn} \meta{tl~var} \Arg{tokens}
-% \end{syntax}
-% Sets \meta{tl~var} to contain \meta{tokens},
-% removing any previous content from the variable.
-% \end{function}
-%
-% \begin{function}
-% {
-% \tl_put_left:Nn, \tl_put_left:NV, \tl_put_left:Nv, \tl_put_left:Ne,
-% \tl_put_left:No,
-% \tl_put_left:cn, \tl_put_left:cV, \tl_put_left:cv, \tl_put_left:ce,
-% \tl_put_left:co,
-% \tl_gput_left:Nn, \tl_gput_left:NV, \tl_gput_left:Nv, \tl_gput_left:Ne,
-% \tl_gput_left:No,
-% \tl_gput_left:cn, \tl_gput_left:cV, \tl_gput_left:cv, \tl_gput_left:ce,
-% \tl_gput_left:co
-% }
-% \begin{syntax}
-% \cs{tl_put_left:Nn} \meta{tl~var} \Arg{tokens}
-% \end{syntax}
-% Appends \meta{tokens} to the left side of the current content of
-% \meta{tl~var}.
-% \end{function}
-%
-% \begin{function}
-% {
-% \tl_put_right:Nn, \tl_put_right:NV, \tl_put_right:Nv, \tl_put_right:Ne,
-% \tl_put_right:No,
-% \tl_put_right:cn, \tl_put_right:cV, \tl_put_right:cv, \tl_put_right:ce,
-% \tl_put_right:co,
-% \tl_gput_right:Nn, \tl_gput_right:NV, \tl_gput_right:Nv, \tl_gput_right:Ne,
-% \tl_gput_right:No,
-% \tl_gput_right:cn, \tl_gput_right:cV, \tl_gput_right:cv, \tl_gput_right:ce,
-% \tl_gput_right:co
-% }
-% \begin{syntax}
-% \cs{tl_put_right:Nn} \meta{tl~var} \Arg{tokens}
-% \end{syntax}
-% Appends \meta{tokens} to the right side of the current content of
-% \meta{tl~var}.
-% \end{function}
-%
-% \section{Token list conditionals}
-%
-% \begin{function}[EXP,pTF, updated = 2019-09-04]
-% {\tl_if_blank:n, \tl_if_blank:e, \tl_if_blank:V, \tl_if_blank:o}
-% \begin{syntax}
-% \cs{tl_if_blank_p:n} \Arg{token list}
-% \cs{tl_if_blank:nTF} \Arg{token list} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the \meta{token list} consists only of blank spaces
-% (\emph{i.e.}~contains no item). The test is \texttt{true} if
-% \meta{token list} is zero or more explicit space characters
-% (explicit tokens with character code~$32$ and category code~$10$),
-% and is \texttt{false} otherwise.
-% \end{function}
-%
-% \begin{function}[EXP,pTF]{\tl_if_empty:N, \tl_if_empty:c}
-% \begin{syntax}
-% \cs{tl_if_empty_p:N} \meta{tl~var}
-% \cs{tl_if_empty:NTF} \meta{tl~var} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the \meta{tl~var} is entirely empty
-% (\emph{i.e.}~contains no tokens at all).
-% \end{function}
-%
-% \begin{function}[added = 2012-05-24, updated = 2012-06-05, EXP,pTF]
-% {\tl_if_empty:n, \tl_if_empty:V, \tl_if_empty:o, \tl_if_empty:e}
-% \begin{syntax}
-% \cs{tl_if_empty_p:n} \Arg{token list}
-% \cs{tl_if_empty:nTF} \Arg{token list} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the \meta{token list} is entirely empty
-% (\emph{i.e.}~contains no tokens at all).
-% \end{function}
-%
-% \begin{function}[EXP,pTF]
-% {\tl_if_eq:NN, \tl_if_eq:Nc, \tl_if_eq:cN, \tl_if_eq:cc}
-% \begin{syntax}
-% \cs{tl_if_eq_p:NN} \meta{tl~var_1} \meta{tl~var_2}
-% \cs{tl_if_eq:NNTF} \meta{tl~var_1} \meta{tl~var_2} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Compares the content of \meta{tl~var_1} and \meta{tl~var_2} and
-% is logically \texttt{true} if the two contain the same list of
-% tokens (\emph{i.e.}~identical in both the list of characters they
-% contain and the category codes of those characters). Thus for example
-% \begin{verbatim}
-% \tl_set:Nn \l_tmpa_tl { abc }
-% \tl_set:Ne \l_tmpb_tl { \tl_to_str:n { abc } }
-% \tl_if_eq:NNTF \l_tmpa_tl \l_tmpb_tl { true } { false }
-% \end{verbatim}
-% yields \texttt{false}.
-% See also \cs{str_if_eq:nnTF} for a comparison that ignores category codes.
-% \end{function}
-%
-% \begin{function}[TF, added = 2020-07-14]{\tl_if_eq:Nn, \tl_if_eq:cn}
-% \begin{syntax}
-% \cs{tl_if_eq:NnTF} \meta{tl~var_1} \Arg{token list_2} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the \meta{tl~var_1} and the \meta{token
-% list_2} contain the same list of tokens, both in respect of
-% character codes and category codes. This conditional is not
-% expandable: see \cs{tl_if_eq:NNTF} for an expandable version when
-% both token lists are stored in variables, or \cs{str_if_eq:nnTF} if
-% category codes are not important.
-% \end{function}
-%
-% \begin{function}[TF]
-% {
-% \tl_if_eq:nn, \tl_if_eq:nV, \tl_if_eq:ne, \tl_if_eq:Vn, \tl_if_eq:en,
-% \tl_if_eq:ee
-% }
-% \begin{syntax}
-% \cs{tl_if_eq:nnTF} \Arg{token list_1} \Arg{token list_2} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if \meta{token list_1} and \meta{token list_2} contain the
-% same list of tokens, both in respect of character codes and category
-% codes. This conditional is not expandable: see \cs{tl_if_eq:NNTF}
-% for an expandable version when token lists are stored in variables,
-% or \cs{str_if_eq:nnTF} if category codes are not important.
-% \end{function}
-%
-% \begin{function}[TF]
-% {
-% \tl_if_in:Nn, \tl_if_in:NV, \tl_if_in:No,
-% \tl_if_in:cn, \tl_if_in:cV, \tl_if_in:co
-% }
-% \begin{syntax}
-% \cs{tl_if_in:NnTF} \meta{tl~var} \Arg{token list} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the \meta{token list} is found in the content of the
-% \meta{tl~var}. The \meta{token list} cannot contain
-% the tokens |{|, |}| or |#|
-% (more precisely, explicit character tokens with category code $1$
-% (begin-group) or $2$ (end-group), and tokens with category code $6$).
-% \end{function}
-%
-% \begin{function}[TF]
-% {
-% \tl_if_in:nn, \tl_if_in:Vn, \tl_if_in:VV, \tl_if_in:on, \tl_if_in:oo,
-% \tl_if_in:nV, \tl_if_in:no
-% }
-% \begin{syntax}
-% \cs{tl_if_in:nnTF} \Arg{token list_1} \Arg{token list_2} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if \meta{token list_2} is found inside \meta{token list_1}.
-% The \meta{token list_2} cannot contain the tokens |{|, |}| or |#|
-% (more precisely, explicit character tokens with category code $1$
-% (begin-group) or $2$ (end-group), and tokens with category code $6$).
-% The search does \emph{not} enter brace (category code $1$/$2$) groups.
-% \end{function}
-%
-% \begin{function}[added = 2017-11-14, EXP,pTF]{\tl_if_novalue:n}
-% \begin{syntax}
-% \cs{tl_if_novalue_p:n} \Arg{token list}
-% \cs{tl_if_novalue:nTF} \Arg{token list} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the \meta{token list} and the special \cs{c_novalue_tl} marker
-% contain the same list of tokens, both in respect of character codes and
-% category codes. This means that
-% \cs{exp_args:No} \cs{tl_if_novalue:nTF} \{ \cs{c_novalue_tl} \} is
-% logically \texttt{true} but \cs{tl_if_novalue:nTF} \{ \cs{c_novalue_tl} \}
-% is logically \texttt{false}.
-% This function is intended to allow construction
-% of flexible document interface structures in which missing optional
-% arguments are detected.
-% \end{function}
-%
-% \begin{function}[updated = 2011-08-13, EXP,pTF]
-% {\tl_if_single:N, \tl_if_single:c}
-% \begin{syntax}
-% \cs{tl_if_single_p:N} \meta{tl~var}
-% \cs{tl_if_single:NTF} \meta{tl~var} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the content of the \meta{tl~var} consists of a single \meta{item},
-% \emph{i.e.}~is a single normal token (neither an explicit space
-% character nor a begin-group character) or a single brace group,
-% surrounded by optional spaces on both sides. In other words, such a
-% token list has token count $1$ according to \cs{tl_count:N}.
-% \end{function}
-%
-% \begin{function}[updated = 2011-08-13, EXP,pTF]{\tl_if_single:n}
-% \begin{syntax}
-% \cs{tl_if_single_p:n} \Arg{token list}
-% \cs{tl_if_single:nTF} \Arg{token list} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the \meta{token list} has exactly one \meta{item}, \emph{i.e.}~is
-% a single normal token (neither an explicit space character nor a
-% begin-group character) or a single brace group, surrounded by
-% optional spaces on both sides. In other words, such a token list has
-% token count $1$ according to \cs{tl_count:n}.
-% \end{function}
-%
-% \begin{function}[EXP,pTF]{\tl_if_single_token:n}
-% \begin{syntax}
-% \cs{tl_if_single_token_p:n} \Arg{token list}
-% \cs{tl_if_single_token:nTF} \Arg{token list} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the token list consists of exactly one token, \emph{i.e.}~is
-% either a single space character or a single normal token.
-% Token groups (|{|\ldots|}|) are not single tokens.
-% \end{function}
-%
-% \subsection{Testing the first token}
-%
-% \begin{function}[updated = 2012-07-09, EXP, pTF]
-% {
-% \tl_if_head_eq_catcode:nN, \tl_if_head_eq_catcode:VN,
-% \tl_if_head_eq_catcode:eN, \tl_if_head_eq_catcode:oN
-% }
-% \begin{syntax}
-% \cs{tl_if_head_eq_catcode_p:nN} \Arg{token list} \meta{test token}
-% \cs{tl_if_head_eq_catcode:nNTF} \Arg{token list} \meta{test token}
-% ~~\Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the first \meta{token} in the \meta{token list} has the
-% same category code as the \meta{test token}. In the case where the
-% \meta{token list} is empty, the test is always \texttt{false}.
-% \end{function}
-%
-% \begin{function}[updated = 2012-07-09, EXP, pTF]
-% {
-% \tl_if_head_eq_charcode:nN, \tl_if_head_eq_charcode:VN,
-% \tl_if_head_eq_charcode:eN, \tl_if_head_eq_charcode:fN
-% }
-% \begin{syntax}
-% \cs{tl_if_head_eq_charcode_p:nN} \Arg{token list} \meta{test token}
-% \cs{tl_if_head_eq_charcode:nNTF} \Arg{token list} \meta{test token}
-% ~~\Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the first \meta{token} in the \meta{token list} has the
-% same character code as the \meta{test token}. In the case where the
-% \meta{token list} is empty, the test is always \texttt{false}.
-% \end{function}
-%
-% \begin{function}[updated = 2012-07-09, EXP, pTF]
-% {
-% \tl_if_head_eq_meaning:nN, \tl_if_head_eq_meaning:VN,
-% \tl_if_head_eq_meaning:eN
-% }
-% \begin{syntax}
-% \cs{tl_if_head_eq_meaning_p:nN} \Arg{token list} \meta{test token}
-% \cs{tl_if_head_eq_meaning:nNTF} \Arg{token list} \meta{test token}
-% ~~\Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the first \meta{token} in the \meta{token list} has the
-% same meaning as the \meta{test token}. In the case where
-% \meta{token list} is empty, the test is always \texttt{false}.
-% \end{function}
-%
-% \begin{function}[added = 2012-07-08, EXP, pTF]{\tl_if_head_is_group:n}
-% \begin{syntax}
-% \cs{tl_if_head_is_group_p:n} \Arg{token list}
-% \cs{tl_if_head_is_group:nTF} \Arg{token list} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the first \meta{token} in the \meta{token list}
-% is an explicit begin-group character (with category code~$1$
-% and any character code), in other words, if the \meta{token list}
-% starts with a brace group. In particular, the test is \texttt{false}
-% if the \meta{token list} starts with an implicit token such as
-% \cs{c_group_begin_token}, or if it is empty.
-% This function is useful to implement actions on token lists on
-% a token by token basis.
-% \end{function}
-%
-% \begin{function}[added = 2012-07-08, EXP, pTF]{\tl_if_head_is_N_type:n}
-% \begin{syntax}
-% \cs{tl_if_head_is_N_type_p:n} \Arg{token list}
-% \cs{tl_if_head_is_N_type:nTF} \Arg{token list} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the first \meta{token} in the \meta{token list}
-% is a normal \texttt{N}-type argument. In other words,
-% it is neither an explicit space character
-% (explicit token with character code~$32$ and category code~$10$)
-% nor an explicit begin-group character
-% (with category code~1 and any character code). An empty
-% argument yields \texttt{false}, as it does not have a normal
-% first token.
-% This function is useful to implement actions on token lists on
-% a token by token basis.
-% \end{function}
-%
-% \begin{function}[updated = 2012-07-08, EXP, pTF]{\tl_if_head_is_space:n}
-% \begin{syntax}
-% \cs{tl_if_head_is_space_p:n} \Arg{token list}
-% \cs{tl_if_head_is_space:nTF} \Arg{token list} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the first \meta{token} in the \meta{token list}
-% is an explicit space character
-% (explicit token with character code~$32$ and category code~$10$).
-% In particular, the test is \texttt{false} if the \meta{token list}
-% starts with an implicit token such as \cs{c_space_token}, or if it
-% is empty.
-% This function is useful to implement actions on token lists on
-% a token by token basis.
-% \end{function}
-%
-% \section{Working with token lists as a whole}
-%
-% \subsection{Using token lists}
-%
-% \begin{function}[EXP]
-% {\tl_to_str:n, \tl_to_str:o, \tl_to_str:V, \tl_to_str:v, \tl_to_str:e}
-% \begin{syntax}
-% \cs{tl_to_str:n} \Arg{token list}
-% \end{syntax}
-% Converts the \meta{token list} to a \meta{string}, leaving the
-% resulting character tokens in the input stream. A \meta{string}
-% is a series of tokens with category code $12$ (other) with the exception
-% of spaces, which retain category code $10$ (space).
-% The base function requires only a single expansion.
-% Its argument \emph{must} be braced.
-% \begin{texnote}
-% This is the \eTeX{} primitive \tn{detokenize}.
-% Converting a \meta{token list} to a \meta{string} yields a
-% concatenation of the string representations of every token in the
-% \meta{token list}.
-% The string representation of a control sequence is
-% \begin{itemize}
-% \item an escape character, whose character code is given by the
-% internal parameter \tn{escapechar}, absent if the
-% \tn{escapechar} is negative or greater than the largest
-% character code;
-% \item the control sequence name, as defined by \cs{cs_to_str:N};
-% \item a space, unless the control sequence name is a single
-% character whose category at the time of expansion of
-% \cs{tl_to_str:n} is not \enquote{letter}.
-% \end{itemize}
-% The string representation of an explicit character token is that
-% character, doubled in the case of (explicit) macro parameter
-% characters (normally |#|).
-% In particular, the string representation of a token list may
-% depend on the category codes in effect when it is evaluated, and
-% the value of the \tn{escapechar}: for instance |\tl_to_str:n {\a}|
-% normally produces the three character \enquote{backslash},
-% \enquote{lower-case a}, \enquote{space}, but it may also produce a
-% single \enquote{lower-case a} if the escape character is negative
-% and \texttt{a} is currently not a letter.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[EXP]{\tl_to_str:N, \tl_to_str:c}
-% \begin{syntax}
-% \cs{tl_to_str:N} \meta{tl~var}
-% \end{syntax}
-% Converts the content of the \meta{tl~var} into a series of characters
-% with category code $12$ (other) with the exception of spaces, which
-% retain category code $10$ (space). This \meta{string} is then left
-% in the input stream. For low-level details, see the notes given for
-% \cs{tl_to_str:n}.
-% \end{function}
-%
-% \begin{function}[EXP]{\tl_use:N, \tl_use:c}
-% \begin{syntax}
-% \cs{tl_use:N} \meta{tl~var}
-% \end{syntax}
-% Recovers the content of a \meta{tl~var} and places it
-% directly in the input stream. An error is raised if the variable
-% does not exist or if it is invalid. Note that it is possible to use
-% a \meta{tl~var} directly without an accessor function.
-% \end{function}
-%
-% \subsection{Counting and reversing token lists}
-%
-% \begin{function}[added = 2012-05-13, EXP]
-% {\tl_count:n, \tl_count:V, \tl_count:v, \tl_count:e, \tl_count:o}
-% \begin{syntax}
-% \cs{tl_count:n} \Arg{token list}
-% \end{syntax}
-% Counts the number of \meta{items} in the \meta{token list} and leaves this
-% information in the input stream. Unbraced tokens count as one
-% element as do each token group (|{|\ldots|}|). This process
-% ignores any unprotected spaces within the \meta{token list}. See also
-% \cs{tl_count:N}. This function requires three expansions,
-% giving an \meta{integer denotation}.
-% \end{function}
-%
-% \begin{function}[added = 2012-05-13, EXP]{\tl_count:N, \tl_count:c}
-% \begin{syntax}
-% \cs{tl_count:N} \meta{tl~var}
-% \end{syntax}
-% Counts the number of \meta{items} in the \meta{tl~var}
-% and leaves this information in the input stream. Unbraced tokens
-% count as one element as do each token group (|{|\ldots|}|). This
-% process ignores any unprotected spaces within the \meta{tl~var}.
-% See also \cs{tl_count:n}. This function requires three expansions,
-% giving an \meta{integer denotation}.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2019-02-25]{\tl_count_tokens:n}
-% \begin{syntax}
-% \cs{tl_count_tokens:n} \Arg{token list}
-% \end{syntax}
-% Counts the number of \TeX{} tokens in the \meta{token list} and leaves
-% this information in the input stream. Every token, including spaces and
-% braces, contributes one to the total; thus for instance, the token count of
-% |a~{bc}| is $6$.
-% \end{function}
-%
-% \begin{function}[updated = 2012-01-08, EXP]
-% {\tl_reverse:n, \tl_reverse:V, \tl_reverse:o, \tl_reverse:f, \tl_reverse:e}
-% \begin{syntax}
-% \cs{tl_reverse:n} \Arg{token list}
-% \end{syntax}
-% Reverses the order of the \meta{items} in the \meta{token list},
-% so that \meta{item_1}\meta{item_2}\meta{item_3} \ldots \meta{item_n}
-% becomes \meta{item_n}\ldots \meta{item_3}\meta{item_2}\meta{item_1}.
-% This process preserves unprotected space within the
-% \meta{token list}. Tokens are not reversed within braced token
-% groups, which keep their outer set of braces.
-% In situations where performance is important,
-% consider \cs{tl_reverse_items:n}.
-% See also \cs{tl_reverse:N}.
-% \begin{texnote}
-% The result is returned within \tn{unexpanded}, which means that the token
-% list does not expand further when appearing in an \texttt{e}-type
-% or \texttt{x}-type argument expansion.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[updated = 2012-01-08]
-% {\tl_reverse:N, \tl_reverse:c, \tl_greverse:N, \tl_greverse:c}
-% \begin{syntax}
-% \cs{tl_reverse:N} \meta{tl~var}
-% \end{syntax}
-% Sets the \meta{tl~var} to contain the result of reversing
-% the order of its \meta{items}, so
-% that \meta{item_1}\meta{item_2}\meta{item_3} \ldots \meta{item_n}
-% becomes \meta{item_n}\ldots \meta{item_3}\meta{item_2}\meta{item_1}.
-% This process preserves unprotected spaces within the
-% \meta{tl~var}. Braced token groups are copied without
-% reversing the order of tokens, but keep the outer set of braces.
-% This is equivalent to a combination of an assignment and
-% \cs{tl_reverse:V}. See also \cs{tl_reverse_items:n} for improved
-% performance.
-% \end{function}
-%
-% \begin{function}[added = 2012-01-08, EXP]{\tl_reverse_items:n}
-% \begin{syntax}
-% \cs{tl_reverse_items:n} \Arg{token list}
-% \end{syntax}
-% Reverses the order of the \meta{items} in the \meta{token list},
-% so that \meta{item_1}\meta{item_2}\meta{item_3} \ldots \meta{item_n}
-% becomes \Arg{item_n} \ldots{} \Arg{item_3}\Arg{item_2}\Arg{item_1}.
-% This process removes any unprotected space within the
-% \meta{token list}. Braced token groups are copied without
-% reversing the order of tokens, and keep the outer set of braces.
-% Items which are initially not braced are copied with braces in
-% the result. In cases where preserving spaces is important,
-% consider the slower function \cs{tl_reverse:n}.
-% \begin{texnote}
-% The result is returned within \tn{unexpanded}, which means that the token
-% list does not expand further when appearing in an \texttt{e}-type
-% or \texttt{x}-type argument expansion.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[added = 2011-07-09, updated = 2012-06-25, EXP]
-% {
-% \tl_trim_spaces:n, \tl_trim_spaces:V, \tl_trim_spaces:v,
-% \tl_trim_spaces:e,
-% \tl_trim_spaces:o
-% }
-% \begin{syntax}
-% \cs{tl_trim_spaces:n} \Arg{token list}
-% \end{syntax}
-% Removes any leading and trailing explicit space characters
-% (explicit tokens with character code~$32$ and category code~$10$)
-% from the \meta{token list} and leaves the result in the input
-% stream.
-% \begin{texnote}
-% The result is returned within \tn{unexpanded}, which means that the token
-% list does not expand further when appearing in an \texttt{e}-type
-% or \texttt{x}-type argument expansion.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[added = 2018-04-12, EXP]
-% {\tl_trim_spaces_apply:nN, \tl_trim_spaces_apply:oN}
-% \begin{syntax}
-% \cs{tl_trim_spaces_apply:nN} \Arg{token list} \meta{function}
-% \end{syntax}
-% Removes any leading and trailing explicit space characters (explicit
-% tokens with character code~$32$ and category code~$10$) from the
-% \meta{token list} and passes the result to the \meta{function} as an
-% \texttt{n}-type argument.
-% \end{function}
-%
-% \begin{function}[added = 2011-07-09]
-% {
-% \tl_trim_spaces:N, \tl_trim_spaces:c,
-% \tl_gtrim_spaces:N, \tl_gtrim_spaces:c
-% }
-% \begin{syntax}
-% \cs{tl_trim_spaces:N} \meta{tl~var}
-% \end{syntax}
-% Sets the \meta{tl~var} to contain the result of removing any leading
-% and trailing explicit space characters (explicit tokens with
-% character code~$32$ and category code~$10$) from its contents.
-% \end{function}
-%
-% \subsection{Viewing token lists}
-%
-% \begin{function}[updated = 2021-04-29]{\tl_show:N, \tl_show:c}
-% \begin{syntax}
-% \cs{tl_show:N} \meta{tl~var}
-% \end{syntax}
-% Displays the content of the \meta{tl~var} on the terminal.
-% \begin{texnote}
-% This is similar to the \TeX{} primitive \tn{show}, wrapped to a
-% fixed number of characters per line.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[updated = 2015-08-07]{\tl_show:n, \tl_show:e}
-% \begin{syntax}
-% \cs{tl_show:n} \Arg{token list}
-% \end{syntax}
-% Displays the \meta{token list} on the terminal.
-% \begin{texnote}
-% This is similar to the \eTeX{} primitive \tn{showtokens}, wrapped
-% to a fixed number of characters per line.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[added = 2014-08-22, updated = 2021-04-29]{\tl_log:N, \tl_log:c}
-% \begin{syntax}
-% \cs{tl_log:N} \meta{tl~var}
-% \end{syntax}
-% Writes the content of the \meta{tl~var} in the log file. See also
-% \cs{tl_show:N} which displays the result in the terminal.
-% \end{function}
-%
-% \begin{function}[added = 2014-08-22, updated = 2015-08-07]
-% {\tl_log:n, \tl_log:e, \tl_log:x}
-% \begin{syntax}
-% \cs{tl_log:n} \Arg{token list}
-% \end{syntax}
-% Writes the \meta{token list} in the log file. See also
-% \cs{tl_show:n} which displays the result in the terminal.
-% \end{function}
-%
-% \section{Manipulating items in token lists}
-%
-% \subsection{Mapping over token lists}
-%
-% All mappings are done at the current group level, \emph{i.e.}~any
-% local assignments made by the \meta{function} or \meta{code} discussed
-% below remain in effect after the loop.
-%
-% \begin{function}[updated = 2012-06-29, rEXP]
-% {\tl_map_function:NN, \tl_map_function:cN}
-% \begin{syntax}
-% \cs{tl_map_function:NN} \meta{tl~var} \meta{function}
-% \end{syntax}
-% Applies \meta{function} to every \meta{item} in the \meta{tl~var}.
-% The \meta{function} receives one argument for each iteration.
-% This may be a number of tokens if the \meta{item} was stored within
-% braces. Hence the \meta{function} should anticipate receiving
-% \texttt{n}-type arguments. See also \cs{tl_map_function:nN}.
-% \end{function}
-%
-% \begin{function}[updated = 2012-06-29, rEXP]{\tl_map_function:nN}
-% \begin{syntax}
-% \cs{tl_map_function:nN} \Arg{token list} \meta{function}
-% \end{syntax}
-% Applies \meta{function} to every \meta{item} in the \meta{token list},
-% The \meta{function} receives one argument for each iteration.
-% This may be a number of tokens if the \meta{item} was stored within
-% braces. Hence the \meta{function} should anticipate receiving
-% \texttt{n}-type arguments. See also \cs{tl_map_function:NN}.
-% \end{function}
-%
-% \begin{function}[updated = 2012-06-29]
-% {\tl_map_inline:Nn, \tl_map_inline:cn}
-% \begin{syntax}
-% \cs{tl_map_inline:Nn} \meta{tl~var} \Arg{inline function}
-% \end{syntax}
-% Applies the \meta{inline function} to every \meta{item} stored within the
-% \meta{tl~var}. The \meta{inline function} should consist of code which
-% receives the \meta{item} as |#1|. See also \cs{tl_map_function:NN}.
-% \end{function}
-%
-% \begin{function}[updated = 2012-06-29]{\tl_map_inline:nn}
-% \begin{syntax}
-% \cs{tl_map_inline:nn} \Arg{token list} \Arg{inline function}
-% \end{syntax}
-% Applies the \meta{inline function} to every \meta{item} stored within the
-% \meta{token list}. The \meta{inline function} should consist of code which
-% receives the \meta{item} as |#1|. See also \cs{tl_map_function:nN}.
-% \end{function}
-%
-% \begin{function}[rEXP, added = 2019-09-02]
-% {\tl_map_tokens:Nn, \tl_map_tokens:cn, \tl_map_tokens:nn}
-% \begin{syntax}
-% \cs{tl_map_tokens:Nn} \meta{tl~var} \Arg{code}
-% \cs{tl_map_tokens:nn} \Arg{token list} \Arg{code}
-% \end{syntax}
-% Analogue of \cs{tl_map_function:NN} which maps several tokens
-% instead of a single function. The \meta{code} receives each \meta{item} in
-% the \meta{tl~var} or in the \meta{token list} as a trailing brace group. For
-% instance,
-% \begin{verbatim}
-% \tl_map_tokens:Nn \l_my_tl { \prg_replicate:nn { 2 } }
-% \end{verbatim}
-% expands to twice each \meta{item} in the \meta{tl~var}: for each \meta{item} in
-% \cs[no-index]{l_my_tl} the function \cs{prg_replicate:nn} receives |2| and
-% \meta{item} as its two arguments. The function
-% \cs{tl_map_inline:Nn} is typically faster but is not expandable.
-% \end{function}
-%
-% \begin{function}[updated = 2012-06-29]
-% {\tl_map_variable:NNn, \tl_map_variable:cNn}
-% \begin{syntax}
-% \cs{tl_map_variable:NNn} \meta{tl~var} \meta{variable} \Arg{code}
-% \end{syntax}
-% Stores each \meta{item} of the \meta{tl~var} in turn in the (token
-% list) \meta{variable} and applies the \meta{code}. The \meta{code}
-% will usually make use of the \meta{variable}, but this is not
-% enforced. The assignments to the \meta{variable} are local. Its
-% value after the loop is the last \meta{item} in the \meta{tl~var},
-% or its original value if the \meta{tl~var} is blank. See also
-% \cs{tl_map_inline:Nn}.
-% \end{function}
-%
-% \begin{function}[updated = 2012-06-29]{\tl_map_variable:nNn}
-% \begin{syntax}
-% \cs{tl_map_variable:nNn} \Arg{token list} \meta{variable} \Arg{code}
-% \end{syntax}
-% Stores each \meta{item} of the \meta{token list} in turn in the
-% (token list) \meta{variable} and applies the \meta{code}. The
-% \meta{code} will usually make use of the \meta{variable}, but this
-% is not enforced. The assignments to the \meta{variable} are local.
-% Its value after the loop is the last \meta{item} in the
-% \meta{tl~var}, or its original value if the \meta{tl~var} is blank.
-% See also \cs{tl_map_inline:nn}.
-% \end{function}
-%
-% \begin{function}[updated = 2012-06-29, rEXP]{\tl_map_break:}
-% \begin{syntax}
-% \cs{tl_map_break:}
-% \end{syntax}
-% Used to terminate a \cs[no-index]{tl_map_\ldots} function before all
-% entries in the \meta{token list} have been processed. This
-% normally takes place within a conditional statement, for example
-% \begin{verbatim}
-% \tl_map_inline:Nn \l_my_tl
-% {
-% \str_if_eq:nnT { #1 } { bingo } { \tl_map_break: }
-% % Do something useful
-% }
-% \end{verbatim}
-% See also \cs{tl_map_break:n}.
-% Use outside of a \cs[no-index]{tl_map_\ldots} scenario leads to low
-% level \TeX{} errors.
-% \begin{texnote}
-% When the mapping is broken, additional tokens may be inserted
-% before further items are taken
-% from the input stream. This depends on the design of the mapping
-% function.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[updated = 2012-06-29, rEXP]{\tl_map_break:n}
-% \begin{syntax}
-% \cs{tl_map_break:n} \Arg{code}
-% \end{syntax}
-% Used to terminate a \cs[no-index]{tl_map_\ldots} function before all
-% entries in the \meta{token list} have been processed, inserting
-% the \meta{code} after the mapping has ended. This
-% normally takes place within a conditional statement, for example
-% \begin{verbatim}
-% \tl_map_inline:Nn \l_my_tl
-% {
-% \str_if_eq:nnT { #1 } { bingo }
-% { \tl_map_break:n { <code> } }
-% % Do something useful
-% }
-% \end{verbatim}
-% Use outside of a \cs[no-index]{tl_map_\ldots} scenario leads to low
-% level \TeX{} errors.
-% \begin{texnote}
-% When the mapping is broken, additional tokens may be inserted
-% before the \meta{code} is
-% inserted into the input stream.
-% This depends on the design of the mapping function.
-% \end{texnote}
-% \end{function}
-%
-% \subsection{Head and tail of token lists}
-%
-% Functions which deal with either only the very first item (balanced
-% text or single normal token) in a token list, or the remaining tokens.
-%
-% \begin{function}[updated = 2012-09-09, EXP]
-% {\tl_head:N, \tl_head:n, \tl_head:V, \tl_head:v, \tl_head:f}
-% \begin{syntax}
-% \cs{tl_head:n} \Arg{token list}
-% \end{syntax}
-% Leaves in the input stream the first \meta{item} in the
-% \meta{token list}, discarding the rest of the \meta{token list}.
-% All leading explicit space characters
-% (explicit tokens with character code~$32$ and category code~$10$)
-% are discarded; for example
-% \begin{verbatim}
-% \tl_head:n { abc }
-% \end{verbatim}
-% and
-% \begin{verbatim}
-% \tl_head:n { ~ abc }
-% \end{verbatim}
-% both leave |a| in the input stream. If the \enquote{head} is a
-% brace group, rather than a single token, the braces are removed, and
-% so
-% \begin{verbatim}
-% \tl_head:n { ~ { ~ ab } c }
-% \end{verbatim}
-% yields \verb*| ab|.
-% A blank \meta{token list} (see \cs{tl_if_blank:nTF}) results in
-% \cs{tl_head:n} leaving nothing in the input stream.
-% \begin{texnote}
-% The result is returned within \cs{exp_not:n}, which means that the token
-% list does not expand further when appearing in an \texttt{e}-type
-% or \texttt{x}-type argument expansion.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[EXP]{\tl_head:w}
-% \begin{syntax}
-% \cs{tl_head:w} \meta{token list} | { } | \cs{q_stop}
-% \end{syntax}
-% Leaves in the input stream the first \meta{item} in the
-% \meta{token list}, discarding the rest of the \meta{token list}.
-% All leading explicit space characters
-% (explicit tokens with character code~$32$ and category code~$10$)
-% are discarded.
-% A blank \meta{token list} (which consists only of space characters)
-% results in a low-level \TeX{} error, which may be avoided by the
-% inclusion of an empty group in the input (as shown), without the need
-% for an explicit test. Alternatively, \cs{tl_if_blank:nF} may be used to
-% avoid using the function with a \enquote{blank} argument.
-% This function requires only a single expansion, and thus is suitable for
-% use within an \texttt{o}-type expansion. In general, \cs{tl_head:n} should
-% be preferred if the number of expansions is not critical.
-% \end{function}
-%
-% \begin{function}[updated = 2012-09-01, EXP]
-% {\tl_tail:N, \tl_tail:n, \tl_tail:V, \tl_tail:v, \tl_tail:f}
-% \begin{syntax}
-% \cs{tl_tail:n} \Arg{token list}
-% \end{syntax}
-% Discards all leading explicit space characters
-% (explicit tokens with character code~$32$ and category code~$10$)
-% and the first \meta{item} in the \meta{token list}, and leaves the
-% remaining tokens in the input stream. Thus for example
-% \begin{verbatim}
-% \tl_tail:n { a ~ {bc} d }
-% \end{verbatim}
-% and
-% \begin{verbatim}
-% \tl_tail:n { ~ a ~ {bc} d }
-% \end{verbatim}
-% both leave \verb*| {bc}d| in the input stream. A blank
-% \meta{token list} (see \cs{tl_if_blank:nTF}) results
-% in \cs{tl_tail:n} leaving nothing in the input stream.
-% \begin{texnote}
-% The result is returned within \cs{exp_not:n}, which means that the
-% token list does not expand further when appearing in an \texttt{e}-type
-% or \texttt{x}-type argument expansion.
-% \end{texnote}
-% \end{function}
-%
-% If you wish to handle token lists where the first token may be a space, and
-% this needs to be treated as the head/tail, this can be accomplished using
-% \cs{tl_if_head_is_space:nTF}, for example
-% \begin{verbatim}
-% \exp_last_unbraced:NNo
-% \cs_new:Npn \__mypkg_gobble_space:w \c_space_tl { }
-% \cs_new:Npn \mypkg_tl_head_keep_space:n #1
-% {
-% \tl_if_head_is_space:nTF {#1}
-% { ~ }
-% { \tl_head:n {#1} }
-% }
-% \cs_new:Npn \mypkg_tl_tail_keep_space:n #1
-% {
-% \tl_if_head_is_space:nTF {#1}
-% { \exp_not:o { \__mypkg_gobble_space:w #1 } }
-% { \tl_tail:n {#1} }
-% }
-% \end{verbatim}
-%
-% \subsection{Items and ranges in token lists}
-%
-% \begin{function}[added = 2014-07-17, EXP]
-% {\tl_item:nn, \tl_item:Nn, \tl_item:cn}
-% \begin{syntax}
-% \cs{tl_item:nn} \Arg{token list} \Arg{integer expression}
-% \end{syntax}
-% Indexing items in the \meta{token list} from~$1$ on the left, this
-% function evaluates the \meta{integer expression} and leaves the
-% appropriate item from the \meta{token list} in the input stream.
-% If the \meta{integer expression} is negative, indexing occurs from
-% the right of the token list, starting at $-1$ for the right-most item.
-% If the index is out of bounds, then the function expands to nothing.
-% \begin{texnote}
-% The result is returned within the \tn{unexpanded}
-% primitive (\cs{exp_not:n}), which means that the \meta{item}
-% does not expand further when appearing in an \texttt{e}-type
-% or \texttt{x}-type argument expansion.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[EXP, added = 2016-12-06]
-% {\tl_rand_item:N, \tl_rand_item:c, \tl_rand_item:n}
-% \begin{syntax}
-% \cs{tl_rand_item:N} \meta{tl~var}
-% \cs{tl_rand_item:n} \Arg{token list}
-% \end{syntax}
-% Selects a pseudo-random item of the \meta{token list}. If the
-% \meta{token list} is blank, the result is empty.
-% This is not available in older versions of \XeTeX{}.
-% \begin{texnote}
-% The result is returned within the \tn{unexpanded}
-% primitive (\cs{exp_not:n}), which means that the \meta{item}
-% does not expand further when appearing in an \texttt{e}-type
-% or \texttt{x}-type argument expansion.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[EXP, added = 2017-02-17, updated = 2017-07-15]
-% {\tl_range:Nnn, \tl_range:nnn}
-% \begin{syntax}
-% \cs{tl_range:Nnn} \meta{tl~var} \Arg{start index} \Arg{end index}
-% \cs{tl_range:nnn} \Arg{token list} \Arg{start index} \Arg{end index}
-% \end{syntax}
-% Leaves in the input stream the items from the \meta{start index} to the
-% \meta{end index} inclusive. Spaces and braces are preserved between
-% the items returned (but never at either end of the list).
-% Here \meta{start index} and \meta{end index} should be \meta{integer expressions}.
-% For describing in detail the functions' behavior, let $m$ and $n$ be the start
-% and end index respectively. If either is $0$, the result is empty. A positive
-% index means `start counting from the left end', and a negative index means
-% `from the right end'. Let $l$ be the count of the token list.
-%
-% The \emph{actual start point} is determined as $M=m$ if~$m>0$ and as $M=l+m+1$
-% if~$m<0$. Similarly the \emph{actual end point} is $N=n$ if~$n>0$ and $N=l+n+1$
-% if~$n<0$. If $M>N$, the result is empty. Otherwise it consists of all items from
-% position $M$ to position $N$ inclusive; for the purpose of this rule, we can
-% imagine that the token list extends at infinity on either side, with void items
-% at positions $s$ for $s\le0$ or $s>l$.
-%
-% Spaces in between items in the actual range are preserved. Spaces at either end
-% of the token list will be removed anyway (think to the token list being passed to
-% |\tl_trim_spaces:n| to begin with.
-%
-% Thus, with $l=7$ as in the examples below, all of the following are equivalent
-% and result in the whole token list
-% \begin{verbatim}
-% \tl_range:nnn { abcd~{e{}}fg } { 1 } { 7 }
-% \tl_range:nnn { abcd~{e{}}fg } { 1 } { 12 }
-% \tl_range:nnn { abcd~{e{}}fg } { -7 } { 7 }
-% \tl_range:nnn { abcd~{e{}}fg } { -12 } { 7 }
-% \end{verbatim}
-% Here are some more interesting examples. The calls
-% \begin{verbatim}
-% \iow_term:e { \tl_range:nnn { abcd{e{}}fg } { 2 } { 5 } }
-% \iow_term:e { \tl_range:nnn { abcd{e{}}fg } { 2 } { -3 } }
-% \iow_term:e { \tl_range:nnn { abcd{e{}}fg } { -6 } { 5 } }
-% \iow_term:e { \tl_range:nnn { abcd{e{}}fg } { -6 } { -3 } }
-% \end{verbatim}
-% are all equivalent and will print |bcd{e{}}| on the terminal; similarly
-% \begin{verbatim}
-% \iow_term:e { \tl_range:nnn { abcd~{e{}}fg } { 2 } { 5 } }
-% \iow_term:e { \tl_range:nnn { abcd~{e{}}fg } { 2 } { -3 } }
-% \iow_term:e { \tl_range:nnn { abcd~{e{}}fg } { -6 } { 5 } }
-% \iow_term:e { \tl_range:nnn { abcd~{e{}}fg } { -6 } { -3 } }
-% \end{verbatim}
-% are all equivalent and will print |bcd {e{}}| on the
-% terminal (note the space in the middle). To the contrary,
-% \begin{verbatim}
-% \tl_range:nnn { abcd~{e{}}f } { 2 } { 4 }
-% \end{verbatim}
-% will discard the space after `d'.
-%
-% If we want to get the items from, say, the third to the last in a token
-% list |<tl>|, the call
-% is |\tl_range:nnn { <tl> } { 3 } { -1 }|. Similarly, for discarding
-% the last item, we can do |\tl_range:nnn { <tl> } { 1 } { -2 }|.
-%
-%^^A The behavior of \cs{tl_range:Nnn} is exactly the same, acting on the
-%^^A contents of the tl variable.
-%
-% \begin{texnote}
-% The result is returned within the \tn{unexpanded}
-% primitive (\cs{exp_not:n}), which means that the \meta{item}
-% does not expand further when appearing in an \texttt{e}-type
-% or \texttt{x}-type argument expansion.
-% \end{texnote}
-% \end{function}
-%
-% \subsection{Sorting token lists}
-%
-% \begin{function}[added = 2017-02-06]
-% {\tl_sort:Nn, \tl_sort:cn, \tl_gsort:Nn, \tl_gsort:cn}
-% \begin{syntax}
-% \cs{tl_sort:Nn} \meta{tl var} \Arg{comparison code}
-% \end{syntax}
-% Sorts the items in the \meta{tl var} according to the
-% \meta{comparison code}, and assigns the result to
-% \meta{tl var}. The details of sorting comparison are
-% described in Section~\ref{sec:l3sort:mech}.
-% \end{function}
-%
-% \begin{function}[added = 2017-02-06, EXP]{\tl_sort:nN}
-% \begin{syntax}
-% \cs{tl_sort:nN} \Arg{token list} \meta{conditional}
-% \end{syntax}
-% Sorts the items in the \meta{token list}, using the
-% \meta{conditional} to compare items, and leaves the result in the
-% input stream. The \meta{conditional} should have signature |:nnTF|,
-% and return \texttt{true} if the two items being compared should be
-% left in the same order, and \texttt{false} if the items should be
-% swapped. The details of sorting comparison are
-% described in Section~\ref{sec:l3sort:mech}.
-% \begin{texnote}
-% The result is returned within \cs{exp_not:n}, which means that the
-% token list does not expand further when appearing in an
-% \texttt{e}-type or \texttt{x}-type argument expansion.
-% \end{texnote}
-% \end{function}
-%
-% \section{Manipulating tokens in token lists}
-%
-% \subsection{Replacing tokens}
-%
-% Within token lists, replacement takes place at the top level: there is
-% no recursion into brace groups (more precisely, within a group defined by
-% a categroy code $1$/$2$ pair).
-%
-% \begin{function}[updated = 2011-08-11]
-% {
-% \tl_replace_once:Nnn, \tl_replace_once:NVn, \tl_replace_once:NnV,
-% \tl_replace_once:Nen, \tl_replace_once:Nne, \tl_replace_once:Nee,
-% \tl_replace_once:cnn, \tl_replace_once:cVn, \tl_replace_once:cnV,
-% \tl_replace_once:cen, \tl_replace_once:cne, \tl_replace_once:cee,
-% \tl_greplace_once:Nnn, \tl_greplace_once:NVn, \tl_greplace_once:NnV,
-% \tl_greplace_once:Nen, \tl_greplace_once:Nne, \tl_greplace_once:Nee,
-% \tl_greplace_once:cnn, \tl_greplace_once:cVn, \tl_greplace_once:cnV,
-% \tl_greplace_once:cen, \tl_greplace_once:cne, \tl_greplace_once:cee
-% }
-% \begin{syntax}
-% \cs{tl_replace_once:Nnn} \meta{tl~var} \Arg{old tokens} \Arg{new tokens}
-% \end{syntax}
-% Replaces the first (leftmost) occurrence of \meta{old tokens} in the
-% \meta{tl~var} with \meta{new tokens}. \meta{Old tokens}
-% cannot contain |{|, |}| or |#|
-% (more precisely, explicit character tokens with category code $1$
-% (begin-group) or $2$ (end-group), and tokens with category code $6$).
-% \end{function}
-%
-% \begin{function}[updated = 2011-08-11]
-% {
-% \tl_replace_all:Nnn, \tl_replace_all:NVn, \tl_replace_all:NnV,
-% \tl_replace_all:Nen, \tl_replace_all:Nne, \tl_replace_all:Nee,
-% \tl_replace_all:cnn, \tl_replace_all:cVn, \tl_replace_all:cnV,
-% \tl_replace_all:cen, \tl_replace_all:cne, \tl_replace_all:cee,
-% \tl_greplace_all:Nnn, \tl_greplace_all:NVn, \tl_greplace_all:NnV,
-% \tl_greplace_all:Nen, \tl_greplace_all:Nne, \tl_greplace_all:Nee,
-% \tl_greplace_all:cnn, \tl_greplace_all:cVn, \tl_greplace_all:cnV,
-% \tl_greplace_all:cen, \tl_greplace_all:cne, \tl_greplace_all:cee
-% }
-% \begin{syntax}
-% \cs{tl_replace_all:Nnn} \meta{tl~var} \Arg{old tokens} \Arg{new tokens}
-% \end{syntax}
-% Replaces all occurrences of \meta{old tokens} in the
-% \meta{tl~var} with \meta{new tokens}. \meta{Old tokens}
-% cannot contain |{|, |}| or |#|
-% (more precisely, explicit character tokens with category code $1$
-% (begin-group) or $2$ (end-group), and tokens with category code $6$).
-% As this function
-% operates from left to right, the pattern \meta{old tokens}
-% may remain after the replacement (see \cs{tl_remove_all:Nn}
-% for an example).
-% \end{function}
-%
-% \begin{function}[updated = 2011-08-11]
-% {
-% \tl_remove_once:Nn, \tl_remove_once:NV, \tl_remove_once:Ne,
-% \tl_remove_once:cn, \tl_remove_once:cV, \tl_remove_once:ce,
-% \tl_gremove_once:Nn, \tl_gremove_once:NV, \tl_gremove_once:Ne,
-% \tl_gremove_once:cn, \tl_gremove_once:cV, \tl_gremove_once:ce
-% }
-% \begin{syntax}
-% \cs{tl_remove_once:Nn} \meta{tl~var} \Arg{tokens}
-% \end{syntax}
-% Removes the first (leftmost) occurrence of \meta{tokens} from the
-% \meta{tl~var}. The \meta{tokens} cannot contain |{|, |}| or |#|
-% (more precisely, explicit character tokens with category code $1$
-% (begin-group) or $2$ (end-group), and tokens with category code $6$).
-% \end{function}
-%
-% \begin{function}[updated = 2011-08-11]
-% {
-% \tl_remove_all:Nn, \tl_remove_all:NV, \tl_remove_all:Ne,
-% \tl_remove_all:cn, \tl_remove_all:cV, \tl_remove_all:ce,
-% \tl_gremove_all:Nn, \tl_gremove_all:NV, \tl_gremove_all:Ne,
-% \tl_gremove_all:cn, \tl_gremove_all:cV, \tl_gremove_all:ce,
-% }
-% \begin{syntax}
-% \cs{tl_remove_all:Nn} \meta{tl~var} \Arg{tokens}
-% \end{syntax}
-% Removes all occurrences of \meta{tokens} from the
-% \meta{tl~var}. The \meta{tokens} cannot contain |{|, |}| or |#|
-% (more precisely, explicit character tokens with category code $1$
-% (begin-group) or $2$ (end-group), and tokens with category code $6$).
-% As this function
-% operates from left to right, the pattern \meta{tokens}
-% may remain after the removal, for instance,
-% \begin{quote}
-% \cs{tl_set:Nn} \cs{l_tmpa_tl} |{abbccd}|
-% \cs{tl_remove_all:Nn} \cs{l_tmpa_tl} |{bc}|
-% \end{quote}
-% results in \cs{l_tmpa_tl} containing \texttt{abcd}.
-% \end{function}
-%
-% \subsection{Reassigning category codes}
-%
-% These functions allow the rescanning of tokens: re-apply \TeX{}'s
-% tokenization process to apply category codes different from those
-% in force when the tokens were absorbed. Whilst this functionality is
-% supported, it is often preferable to find alternative approaches
-% to achieving outcomes rather than rescanning tokens (for example
-% construction of token lists token-by-token with intervening category
-% code changes or using \cs{char_generate:nn}).
-%
-% \begin{function}[updated = 2015-08-11]
-% {
-% \tl_set_rescan:Nnn, \tl_set_rescan:NnV, \tl_set_rescan:Nne,
-% \tl_set_rescan:Nno,
-% \tl_set_rescan:cnn, \tl_set_rescan:cnV, \tl_set_rescan:cne,
-% \tl_set_rescan:cno,
-% \tl_gset_rescan:Nnn, \tl_gset_rescan:NnV, \tl_gset_rescan:Nne,
-% \tl_gset_rescan:Nno,
-% \tl_gset_rescan:cnn, \tl_gset_rescan:cnV, \tl_gset_rescan:cne,
-% \tl_gset_rescan:cno,
-% }
-% \begin{syntax}
-% \cs{tl_set_rescan:Nnn} \meta{tl~var} \Arg{setup} \Arg{tokens}
-% \end{syntax}
-% Sets \meta{tl~var} to contain \meta{tokens}, applying the category
-% code r\'{e}gime specified in the \meta{setup} before carrying out
-% the assignment. (Category codes applied to tokens not explicitly covered
-% by the \meta{setup} are those in force at the point of use of
-% \cs{tl_set_rescan:Nnn}.)
-% This allows the \meta{tl~var} to contain material
-% with category codes other than those that apply when \meta{tokens}
-% are absorbed. The \meta{setup} is run within a group and may
-% contain any valid input, although only changes in category codes,
-% such as uses of \cs{cctab_select:N},
-% are relevant. See also \cs{tl_rescan:nn}.
-% \begin{texnote}
-% The \meta{tokens} are first turned into a string (using
-% \cs{tl_to_str:n}). If the string contains one or more characters
-% with character code \tn{newlinechar} (set equal to
-% \tn{endlinechar} unless that is equal to $32$, before the user
-% \meta{setup}), then it is split into lines at these characters,
-% then read as if reading multiple lines from a file, ignoring
-% spaces (catcode $10$) at the beginning and spaces and tabs
-% (character code $32$ or $9$) at the end of every line.
-% Otherwise, spaces (and tabs) are retained at both ends of the
-% single-line string, as if it appeared in the middle of a line
-% read from a file.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[updated = 2015-08-11]{\tl_rescan:nn, \tl_rescan:nV}
-% \begin{syntax}
-% \cs{tl_rescan:nn} \Arg{setup} \Arg{tokens}
-% \end{syntax}
-% Rescans \meta{tokens} applying the category code r\'{e}gime
-% specified in the \meta{setup}, and leaves the resulting tokens in
-% the input stream. (Category codes applied to tokens not explicitly covered
-% by the \meta{setup} are those in force at the point of use of
-% \cs{tl_rescan:nn}.)
-% The \meta{setup} is run within a group and may
-% contain any valid input, although only changes in category codes,
-% such as uses of \cs{cctab_select:N},
-% are relevant. See also \cs{tl_set_rescan:Nnn}, which is more
-% robust than using \cs{tl_set:Nn} in the \meta{tokens} argument of
-% \cs{tl_rescan:nn}.
-% \begin{texnote}
-% The \meta{tokens} are first turned into a string (using
-% \cs{tl_to_str:n}). If the string contains one or more characters
-% with character code \tn{newlinechar} (set equal to
-% \tn{endlinechar} unless that is equal to $32$, before the user
-% \meta{setup}), then it is split into lines at these characters,
-% then read as if reading multiple lines from a file, ignoring
-% spaces (catcode $10$) at the beginning and spaces and tabs
-% (character code $32$ or $9$) at the end of every line.
-% Otherwise, spaces (and tabs) are retained at both ends of the
-% single-line string, as if it appeared in the middle of a line
-% read from a file.
-%
-% Contrarily to the \tn{scantokens} \eTeX{} primitive, \cs{tl_rescan:nn}
-% tokenizes the whole string in the same category code regime rather
-% than one token at a time, so that directives such as \tn{verb}
-% that rely on changing category codes will not function properly.
-% \end{texnote}
-% \end{function}
-%
-% \section{Constant token lists}
-%
-% \begin{variable}{\c_empty_tl}
-% Constant that is always empty.
-% \end{variable}
-%
-% \begin{variable}[added = 2017-11-14]{\c_novalue_tl}
-% A marker for the absence of an argument. This constant |tl| can safely
-% be typeset (\emph{cf.}~\cs{q_nil}), with the result being |-NoValue-|.
-% It is important to note that \cs{c_novalue_tl} is constructed such that it
-% will \emph{not} match the simple text input |-NoValue-|, \emph{i.e.}
-% that
-% \begin{verbatim}
-% \tl_if_eq:NnTF \c_novalue_tl { -NoValue- }
-% \end{verbatim}
-% is logically \texttt{false}. The \cs{c_novalue_tl} marker is intended for
-% use in creating document-level interfaces, where it serves as an indicator
-% that an (optional) argument was omitted. In particular, it is distinct
-% from a simple empty |tl|.
-% \end{variable}
-%
-% \begin{variable}{\c_space_tl}
-% An explicit space character contained in a token list (compare this with
-% \cs{c_space_token}). For use where an explicit space is required.
-% \end{variable}
-%
-% \section{Scratch token lists}
-%
-% \begin{variable}{\l_tmpa_tl, \l_tmpb_tl}
-% Scratch token lists for local assignment. These are never used by
-% the kernel code, and so are safe for use with any \LaTeX3-defined
-% function. However, they may be overwritten by other non-kernel
-% code and so should only be used for short-term storage.
-% \end{variable}
-%
-% \begin{variable}{\g_tmpa_tl, \g_tmpb_tl}
-% Scratch token lists for global assignment. These are never used by
-% the kernel code, and so are safe for use with any \LaTeX3-defined
-% function. However, they may be overwritten by other non-kernel
-% code and so should only be used for short-term storage.
-% \end{variable}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3tl} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=tl>
-% \end{macrocode}
-%
-% A token list variable is a \TeX{} macro that holds tokens. By using the
-% \eTeX{} primitive \tn{unexpanded} inside a \TeX{} \tn{edef} it is
-% possible to store any tokens, including |#|, in this way.
-%
-% \subsection{Functions}
-%
-% \begin{macro}{\__kernel_tl_set:Nx,\__kernel_tl_gset:Nx}
-% These two are supplied to get better performance for macros which would
-% otherwise use \cs{tl_set:Ne} or \cs{tl_gset:Ne} internally.
-% \begin{macrocode}
-\cs_new_eq:NN \__kernel_tl_set:Nx \cs_set_nopar:Npe
-\cs_new_eq:NN \__kernel_tl_gset:Nx \cs_gset_nopar:Npe
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\tl_new:N, \tl_new:c}
-% Creating new token list variables is a case of checking for an
-% existing definition and doing the definition.
-% \begin{macrocode}
-\cs_new_protected:Npn \tl_new:N #1
- {
- \__kernel_chk_if_free_cs:N #1
- \cs_gset_eq:NN #1 \c_empty_tl
- }
-\cs_generate_variant:Nn \tl_new:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \tl_const:Nn, \tl_const:Ne, \tl_const:Nx,
-% \tl_const:cn, \tl_const:ce, \tl_const:cx
-% }
-% Constants are also easy to generate. They use \cs{cs_gset_nopar:Npe} instead
-% of \cs{__kernel_tl_gset:Nx} so that the correct scope checking for |c|,
-% instead of for |g|, is applied when
-% \cs{debug_on:n} |{ check-declarations }| is used.
-% Constant assignment functions are patched specially in \pkg{l3debug} to
-% apply such checks.
-% \begin{macrocode}
-\cs_new_protected:Npn \tl_const:Nn #1#2
- {
- \__kernel_chk_if_free_cs:N #1
- \cs_gset_nopar:Npe #1 { \__kernel_exp_not:w {#2} }
- }
-\cs_generate_variant:Nn \tl_const:Nn { Ne , c , ce }
-\cs_generate_variant:Nn \tl_const:Nn { Nx , cx }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\tl_clear:N, \tl_clear:c}
-% \begin{macro}{\tl_gclear:N, \tl_gclear:c}
-% Clearing a token list variable means setting it to an empty value.
-% Error checking is sorted out by the parent function.
-% \begin{macrocode}
-\cs_new_protected:Npn \tl_clear:N #1
- { \tex_let:D #1 = ~ \c_empty_tl }
-\cs_new_protected:Npn \tl_gclear:N #1
- { \tex_global:D \tex_let:D #1 ~ \c_empty_tl }
-\cs_generate_variant:Nn \tl_clear:N { c }
-\cs_generate_variant:Nn \tl_gclear:N { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\tl_clear_new:N, \tl_clear_new:c}
-% \begin{macro}{\tl_gclear_new:N, \tl_gclear_new:c}
-% Clearing a token list variable means setting it to an empty value.
-% Error checking is sorted out by the parent function.
-% \begin{macrocode}
-\cs_new_protected:Npn \tl_clear_new:N #1
- { \tl_if_exist:NTF #1 { \tl_clear:N #1 } { \tl_new:N #1 } }
-\cs_new_protected:Npn \tl_gclear_new:N #1
- { \tl_if_exist:NTF #1 { \tl_gclear:N #1 } { \tl_new:N #1 } }
-\cs_generate_variant:Nn \tl_clear_new:N { c }
-\cs_generate_variant:Nn \tl_gclear_new:N { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\tl_set_eq:NN, \tl_set_eq:Nc, \tl_set_eq:cN, \tl_set_eq:cc}
-% \begin{macro}{\tl_gset_eq:NN, \tl_gset_eq:Nc, \tl_gset_eq:cN, \tl_gset_eq:cc}
-% For setting token list variables equal to each other. To allow for
-% patching, the arguments have to be explicit. In addition this
-% ensures that a braced second argument will not cause problems.
-% \begin{macrocode}
-\cs_new_protected:Npn \tl_set_eq:NN #1#2
- { \tex_let:D #1 = ~ #2 }
-\cs_new_protected:Npn \tl_gset_eq:NN #1#2
- { \tex_global:D \tex_let:D #1 = ~ #2 }
-\cs_generate_variant:Nn \tl_set_eq:NN { cN, Nc, cc }
-\cs_generate_variant:Nn \tl_gset_eq:NN { cN, Nc, cc }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\tl_concat:NNN, \tl_concat:ccc}
-% \begin{macro}{\tl_gconcat:NNN, \tl_gconcat:ccc}
-% Concatenating token lists is easy. When checking is turned on, all
-% three arguments must be checked: a token list |#2| or |#3| equal to
-% \cs{scan_stop:} would lead to problems later on.
-% \begin{macrocode}
-\cs_new_protected:Npn \tl_concat:NNN #1#2#3
- {
- \__kernel_tl_set:Nx #1
- {
- \__kernel_exp_not:w \exp_after:wN {#2}
- \__kernel_exp_not:w \exp_after:wN {#3}
- }
- }
-\cs_new_protected:Npn \tl_gconcat:NNN #1#2#3
- {
- \__kernel_tl_gset:Nx #1
- {
- \__kernel_exp_not:w \exp_after:wN {#2}
- \__kernel_exp_not:w \exp_after:wN {#3}
- }
- }
-\cs_generate_variant:Nn \tl_concat:NNN { ccc }
-\cs_generate_variant:Nn \tl_gconcat:NNN { ccc }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\tl_if_exist:N, \tl_if_exist:c}
-% Copies of the \texttt{cs} functions defined in \pkg{l3basics}.
-% \begin{macrocode}
-\prg_new_eq_conditional:NNn \tl_if_exist:N \cs_if_exist:N { TF , T , F , p }
-\prg_new_eq_conditional:NNn \tl_if_exist:c \cs_if_exist:c { TF , T , F , p }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Constant token lists}
-%
-% \begin{variable}{\c_empty_tl}
-% Never full. We need to define that constant before using \cs{tl_new:N}.
-% \begin{macrocode}
-\tl_const:Nn \c_empty_tl { }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\c_novalue_tl}
-% A special marker: as we don't have |\char_generate:nn| yet, has to be
-% created the old-fashioned way.
-% \begin{macrocode}
-\group_begin:
-\tex_catcode:D `- = 11 ~
-\tl_const:Ne \c_novalue_tl { - NoValue \token_to_str:N - }
-\group_end:
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\c_space_tl}
-% A space as a token list (as opposed to as a character).
-% \begin{macrocode}
-\tl_const:Nn \c_space_tl { ~ }
-% \end{macrocode}
-% \end{variable}
-%
-% \subsection{Adding to token list variables}
-%
-% \begin{macro}
-% {
-% \tl_set:Nn, \tl_set:NV, \tl_set:Nv, \tl_set:No, \tl_set:Ne, \tl_set:Nf, \tl_set:Nx,
-% \tl_set:cn, \tl_set:cV, \tl_set:cv, \tl_set:co, \tl_set:ce, \tl_set:cf, \tl_set:cx
-% }
-% \begin{macro}
-% {
-% \tl_gset:Nn, \tl_gset:NV, \tl_gset:Nv,
-% \tl_gset:No, \tl_gset:Ne, \tl_gset:Nf, \tl_gset:Nx,
-% \tl_gset:cn, \tl_gset:cV, \tl_gset:cv,
-% \tl_gset:co, \tl_gset:ce, \tl_gset:cf, \tl_gset:cx
-% }
-% By using \cs{exp_not:n} token list variables can contain |#| tokens,
-% which makes the token list registers provided by \TeX{}
-% more or less redundant. The \cs{tl_set:No} version is done
-% by hand as it is used quite a lot.
-% \begin{macrocode}
-\cs_new_protected:Npn \tl_set:Nn #1#2
- { \__kernel_tl_set:Nx #1 { \__kernel_exp_not:w {#2} } }
-\cs_new_protected:Npn \tl_set:No #1#2
- { \__kernel_tl_set:Nx #1 { \__kernel_exp_not:w \exp_after:wN {#2} } }
-\cs_new_protected:Npn \tl_gset:Nn #1#2
- { \__kernel_tl_gset:Nx #1 { \__kernel_exp_not:w {#2} } }
-\cs_new_protected:Npn \tl_gset:No #1#2
- { \__kernel_tl_gset:Nx #1 { \__kernel_exp_not:w \exp_after:wN {#2} } }
-\cs_generate_variant:Nn \tl_set:Nn { NV , Nv , Ne , Nf }
-\cs_generate_variant:Nn \tl_set:Nn { c, cV , cv , ce , cf }
-\cs_generate_variant:Nn \tl_set:No { c }
-\cs_generate_variant:Nn \tl_set:Nn { Nx , cx }
-\cs_generate_variant:Nn \tl_gset:Nn { NV , Nv , Ne , Nf }
-\cs_generate_variant:Nn \tl_gset:Nn { c, cV , cv , ce , cf }
-\cs_generate_variant:Nn \tl_gset:No { c }
-\cs_generate_variant:Nn \tl_gset:Nn { Nx , cx }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \tl_put_left:Nn, \tl_put_left:NV, \tl_put_left:Nv, \tl_put_left:Ne,
-% \tl_put_left:No, \tl_put_left:Nx,
-% \tl_put_left:cn, \tl_put_left:cV, \tl_put_left:cv, \tl_put_left:ce,
-% \tl_put_left:co, \tl_put_left:cx
-% }
-% \begin{macro}
-% {
-% \tl_gput_left:Nn, \tl_gput_left:NV, \tl_gput_left:Nv, \tl_gput_left:Ne,
-% \tl_gput_left:No, \tl_gput_left:Nx,
-% \tl_gput_left:cn, \tl_gput_left:cV, \tl_gput_left:cv, \tl_gput_left:ce,
-% \tl_gput_left:co, \tl_gput_left:cx
-% }
-% Adding to the left is done directly to gain a little performance.
-% \begin{macrocode}
-\cs_new_protected:Npn \tl_put_left:Nn #1#2
- {
- \__kernel_tl_set:Nx #1
- { \__kernel_exp_not:w {#2} \__kernel_exp_not:w \exp_after:wN {#1} }
- }
-\cs_new_protected:Npn \tl_put_left:NV #1#2
- {
- \__kernel_tl_set:Nx #1
- { \exp_not:V #2 \__kernel_exp_not:w \exp_after:wN {#1} }
- }
-\cs_new_protected:Npn \tl_put_left:Nv #1#2
- {
- \__kernel_tl_set:Nx #1
- { \exp_not:v {#2} \__kernel_exp_not:w \exp_after:wN {#1} }
- }
-\cs_new_protected:Npn \tl_put_left:Ne #1#2
- {
- \__kernel_tl_set:Nx #1
- {
- \__kernel_exp_not:w \tex_expanded:D { {#2} }
- \__kernel_exp_not:w \exp_after:wN {#1}
- }
- }
-\cs_new_protected:Npn \tl_put_left:No #1#2
- {
- \__kernel_tl_set:Nx #1
- {
- \__kernel_exp_not:w \exp_after:wN {#2}
- \__kernel_exp_not:w \exp_after:wN {#1}
- }
- }
-\cs_new_protected:Npn \tl_gput_left:Nn #1#2
- {
- \__kernel_tl_gset:Nx #1
- { \__kernel_exp_not:w {#2} \__kernel_exp_not:w \exp_after:wN {#1} }
- }
-\cs_new_protected:Npn \tl_gput_left:NV #1#2
- {
- \__kernel_tl_gset:Nx #1
- { \exp_not:V #2 \__kernel_exp_not:w \exp_after:wN {#1} }
- }
-\cs_new_protected:Npn \tl_gput_left:Nv #1#2
- {
- \__kernel_tl_gset:Nx #1
- { \exp_not:v {#2} \__kernel_exp_not:w \exp_after:wN {#1} }
- }
-\cs_new_protected:Npn \tl_gput_left:Ne #1#2
- {
- \__kernel_tl_gset:Nx #1
- {
- \__kernel_exp_not:w \tex_expanded:D { {#2} }
- \__kernel_exp_not:w \exp_after:wN {#1}
- }
- }
-\cs_new_protected:Npn \tl_gput_left:No #1#2
- {
- \__kernel_tl_gset:Nx #1
- {
- \__kernel_exp_not:w \exp_after:wN {#2}
- \__kernel_exp_not:w \exp_after:wN {#1}
- }
- }
-\cs_generate_variant:Nn \tl_put_left:Nn { c }
-\cs_generate_variant:Nn \tl_put_left:NV { c }
-\cs_generate_variant:Nn \tl_put_left:Nv { c }
-\cs_generate_variant:Nn \tl_put_left:Ne { c }
-\cs_generate_variant:Nn \tl_put_left:No { c }
-\cs_generate_variant:Nn \tl_put_left:Nn { Nx, cx }
-\cs_generate_variant:Nn \tl_gput_left:Nn { c }
-\cs_generate_variant:Nn \tl_gput_left:NV { c }
-\cs_generate_variant:Nn \tl_gput_left:Nv { c }
-\cs_generate_variant:Nn \tl_gput_left:Ne { c }
-\cs_generate_variant:Nn \tl_gput_left:No { c }
-\cs_generate_variant:Nn \tl_gput_left:Nn { Nx , cx }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \tl_put_right:Nn, \tl_put_right:NV, \tl_put_right:Nv, \tl_put_right:Ne,
-% \tl_put_right:No, \tl_put_right:Nx,
-% \tl_put_right:cn, \tl_put_right:cV, \tl_put_right:cv, \tl_put_right:ce,
-% \tl_put_right:co, \tl_put_right:cx
-% }
-% \begin{macro}
-% {
-% \tl_gput_right:Nn, \tl_gput_right:NV, \tl_gput_right:Nv, \tl_gput_right:Ne,
-% \tl_gput_right:No, \tl_gput_right:Nx,
-% \tl_gput_right:cn, \tl_gput_right:cV, \tl_gput_right:cv, \tl_gput_right:ce,
-% \tl_gput_right:co, \tl_gput_right:cx
-% }
-% The same on the right.
-% \begin{macrocode}
-\cs_new_protected:Npn \tl_put_right:Nn #1#2
- { \__kernel_tl_set:Nx #1 { \__kernel_exp_not:w \exp_after:wN { #1 #2 } } }
-\cs_new_protected:Npn \tl_put_right:NV #1#2
- {
- \__kernel_tl_set:Nx #1
- { \__kernel_exp_not:w \exp_after:wN {#1} \exp_not:V #2 }
- }
-\cs_new_protected:Npn \tl_put_right:Nv #1#2
- {
- \__kernel_tl_set:Nx #1
- { \__kernel_exp_not:w \exp_after:wN {#1} \exp_not:v {#2} }
- }
-\cs_new_protected:Npn \tl_put_right:Ne #1#2
- {
- \__kernel_tl_set:Nx #1
- {
- \__kernel_exp_not:w \exp_after:wN {#1}
- \__kernel_exp_not:w \tex_expanded:D { {#2} }
- }
- }
-\cs_new_protected:Npn \tl_put_right:No #1#2
- {
- \__kernel_tl_set:Nx #1
- {
- \__kernel_exp_not:w \exp_after:wN {#1}
- \__kernel_exp_not:w \exp_after:wN {#2}
- }
- }
-\cs_new_protected:Npn \tl_gput_right:Nn #1#2
- { \__kernel_tl_gset:Nx #1 { \__kernel_exp_not:w \exp_after:wN { #1 #2 } } }
-\cs_new_protected:Npn \tl_gput_right:NV #1#2
- {
- \__kernel_tl_gset:Nx #1
- { \__kernel_exp_not:w \exp_after:wN {#1} \exp_not:V #2 }
- }
-\cs_new_protected:Npn \tl_gput_right:Nv #1#2
- {
- \__kernel_tl_gset:Nx #1
- { \__kernel_exp_not:w \exp_after:wN {#1} \exp_not:v {#2} }
- }
-\cs_new_protected:Npn \tl_gput_right:Ne #1#2
- {
- \__kernel_tl_gset:Nx #1
- {
- \__kernel_exp_not:w \exp_after:wN {#1}
- \__kernel_exp_not:w \tex_expanded:D { {#2} }
- }
- }
-\cs_new_protected:Npn \tl_gput_right:No #1#2
- {
- \__kernel_tl_gset:Nx #1
- {
- \__kernel_exp_not:w \exp_after:wN {#1}
- \__kernel_exp_not:w \exp_after:wN {#2}
- }
- }
-\cs_generate_variant:Nn \tl_put_right:Nn { c }
-\cs_generate_variant:Nn \tl_put_right:NV { c }
-\cs_generate_variant:Nn \tl_put_right:Nv { c }
-\cs_generate_variant:Nn \tl_put_right:Ne { c }
-\cs_generate_variant:Nn \tl_put_right:No { c }
-\cs_generate_variant:Nn \tl_put_right:Nn { Nx , cx }
-\cs_generate_variant:Nn \tl_gput_right:Nn { c }
-\cs_generate_variant:Nn \tl_gput_right:NV { c }
-\cs_generate_variant:Nn \tl_gput_right:Nv { c }
-\cs_generate_variant:Nn \tl_gput_right:Ne { c }
-\cs_generate_variant:Nn \tl_gput_right:No { c }
-\cs_generate_variant:Nn \tl_gput_right:Nn { Nx, cx }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Internal quarks and quark-query functions}
-%
-% \begin{variable}{\q_@@_nil,\q_@@_mark,\q_@@_stop}
-% Internal quarks.
-% \begin{macrocode}
-\quark_new:N \q_@@_nil
-\quark_new:N \q_@@_mark
-\quark_new:N \q_@@_stop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\q_@@_recursion_tail,\q_@@_recursion_stop}
-% Internal recursion quarks.
-% \begin{macrocode}
-\quark_new:N \q_@@_recursion_tail
-\quark_new:N \q_@@_recursion_stop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[EXP]{\@@_if_recursion_tail_break:nN}
-% \begin{macro}[pTF]{\@@_if_recursion_tail_stop:n}
-% Functions to query recursion quarks.
-% \begin{macrocode}
-\__kernel_quark_new_test:N \@@_if_recursion_tail_break:nN
-\__kernel_quark_new_conditional:Nn \@@_quark_if_nil:n { TF }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Reassigning token list category codes}
-%
-% \begin{variable}{\c_@@_rescan_marker_tl}
-% The rescanning code needs a special token list containing the same
-% character (chosen here to be a colon) with two different category
-% codes: it cannot appear in the tokens being rescanned since all
-% colons have the same category code.
-% \begin{macrocode}
-\tl_const:Ne \c_@@_rescan_marker_tl { : \token_to_str:N : }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}
-% {
-% \tl_set_rescan:Nnn, \tl_set_rescan:NnV, \tl_set_rescan:Nne,
-% \tl_set_rescan:Nno, \tl_set_rescan:Nnx,
-% \tl_set_rescan:cnn, \tl_set_rescan:cnV, \tl_set_rescan:cne,
-% \tl_set_rescan:cno, \tl_set_rescan:cnx,
-% }
-% \begin{macro}
-% {
-% \tl_gset_rescan:Nnn, \tl_gset_rescan:NnV, \tl_gset_rescan:Nne,
-% \tl_gset_rescan:Nno, \tl_gset_rescan:Nnx,
-% \tl_gset_rescan:cnn, \tl_gset_rescan:cnV, \tl_gset_rescan:cne,
-% \tl_gset_rescan:cno, \tl_gset_rescan:cnx
-% }
-% \begin{macro}{\tl_rescan:nn, \tl_rescan:nV}
-% \begin{macro}{\@@_rescan_aux:}
-% \begin{macro}{\@@_set_rescan:NNnn, \@@_set_rescan_multi:nNN}
-% \begin{macro}[EXP]{\@@_rescan:NNw}
-% In a group, after some initial setup explained below and the user
-% setup~|#3| (followed by \cs{scan_stop:} to be safe), there is a call
-% to \cs{@@_set_rescan:nNN}. This shared auxiliary defined later
-% distinguishes single-line and multi-line ``files''. In the simplest
-% case of multi-line files, it calls (with the same arguments)
-% \cs{@@_set_rescan_multi:nNN}, whose code is included here to help
-% understand the approach. This function rescans its argument |#1|,
-% closes the group, and performs the assignment.
-%
-% One difficulty when rescanning is that \tn{scantokens} treats the
-% argument as a file, and without the correct settings a \TeX{} error
-% occurs:
-% \begin{verbatim}
-% ! File ended while scanning definition of ...
-% \end{verbatim}
-% A related minor issue is a warning due to opening a group before the
-% \tn{scantokens} and closing it inside that temporary file; we avoid
-% that by setting \tn{tracingnesting}. The standard solution to the
-% ``File ended'' error is to grab the rescanned tokens as a delimited
-% argument of an auxiliary, here \cs{@@_rescan:NNw}, that performs the
-% assignment, then let \TeX{} ``execute'' the end of file marker. As
-% usual in delimited arguments we use \cs{prg_do_nothing:} to avoid
-% stripping an outer set braces: this is removed by using
-% \texttt{o}-expanding assignments. The delimiter cannot appear
-% within the rescanned token list because it contains twice the same
-% character, with different catcodes.
-%
-% For \cs{tl_rescan:nn} we cannot simply call \cs{@@_set_rescan:NNnn}
-% \cs{prg_do_nothing:} \cs{use:n} because that would leave the
-% end-of-file marker \emph{after} the result of rescanning. If that
-% rescanned result is code that looks further in the input stream for
-% arguments, it would break.
-%
-% For multi-line files the only subtlety is that \tn{newlinechar}
-% should be equal to \tn{endlinechar} because \tn{newlinechar}
-% characters become new lines and then become \tn{endlinechar}
-% characters when writing to an abstract file and reading back. This
-% equality is ensured by setting \tn{newlinechar} equal to
-% \tn{endlinechar}. Prior to this, \tn{endlinechar} is set to $-1$ if
-% it was $32$ (in particular true after \cs{ExplSyntaxOn}) to avoid
-% unreasonable line-breaks at every space for instance in error
-% messages triggered by the user setup. Another side effect of
-% reading back from the file is that spaces (catcode $10$) are ignored
-% at the beginning of lines, and spaces and tabs (character code $32$
-% and $9$) are ignored at the end of lines.
-%
-% The two \cs{if_false:} \ldots{} \cs{fi:} are there to prevent
-% alignment tabs to cause a change of tabular cell while rescanning.
-% We put the \enquote{opening} one after \cs{group_begin:} so that if
-% one accidentally \texttt{f}-expands \cs{tl_set_rescan:Nnn} braces
-% remain balanced. This is essential in \texttt{e}-type arguments
-% when \tn{expanded} is not available.
-% \begin{macrocode}
-\cs_new_protected:Npn \tl_rescan:nn #1#2
- {
- \tl_set_rescan:Nnn \l_@@_internal_a_tl {#1} {#2}
- \exp_after:wN \@@_rescan_aux:
- \l_@@_internal_a_tl
- }
-\cs_generate_variant:Nn \tl_rescan:nn { nV }
-\exp_args:NNo \cs_new_protected:Npn \@@_rescan_aux:
- { \tl_clear:N \l_@@_internal_a_tl }
-\cs_new_protected:Npn \tl_set_rescan:Nnn
- { \@@_set_rescan:NNnn \tl_set:No }
-\cs_new_protected:Npn \tl_gset_rescan:Nnn
- { \@@_set_rescan:NNnn \tl_gset:No }
-\cs_new_protected:Npn \@@_set_rescan:NNnn #1#2#3#4
- {
- \group_begin:
- \if_false: { \fi:
- \int_set_eq:NN \tex_tracingnesting:D \c_zero_int
- \int_compare:nNnT \tex_endlinechar:D = { 32 }
- { \int_set:Nn \tex_endlinechar:D { -1 } }
- \int_set_eq:NN \tex_newlinechar:D \tex_endlinechar:D
- #3 \scan_stop:
- \exp_args:No \@@_set_rescan:nNN { \tl_to_str:n {#4} } #1 #2
- \if_false: } \fi:
- }
-\cs_new_protected:Npn \@@_set_rescan_multi:nNN #1#2#3
- {
- \tex_everyeof:D \exp_after:wN { \c_@@_rescan_marker_tl }
- \exp_after:wN \@@_rescan:NNw
- \exp_after:wN #2
- \exp_after:wN #3
- \exp_after:wN \prg_do_nothing:
- \tex_scantokens:D {#1}
- }
-\exp_args:Nno \use:nn
- { \cs_new:Npn \@@_rescan:NNw #1#2#3 } \c_@@_rescan_marker_tl
- {
- \group_end:
- #1 #2 {#3}
- }
-\cs_generate_variant:Nn \tl_set_rescan:Nnn { NnV , Nne , c , cnV , cne }
-\cs_generate_variant:Nn \tl_set_rescan:Nnn { Nno , Nnx , cno , cnx }
-\cs_generate_variant:Nn \tl_gset_rescan:Nnn { NnV , Nne , c , cnV , cne }
-\cs_generate_variant:Nn \tl_gset_rescan:Nnn { Nno , Nnx , cno , cnx }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_set_rescan:nNN}
-% \begin{macro}{\@@_set_rescan_single:nnNN, \@@_set_rescan_single_aux:nnnNN}
-% \begin{macro}[rEXP]{\@@_set_rescan_single_aux:w}
-% The function \cs{@@_set_rescan:nNN} calls \cs{@@_set_rescan_multi:nNN} or
-% \cs{@@_set_rescan_single:nnNN} |{ ' }| depending on whether its argument
-% is a single-line fragment of code/data or is made of multiple lines
-% by testing for the presence of a \tn{newlinechar} character. If
-% \tn{newlinechar} is out of range, the argument is assumed to be a
-% single line.
-%
-% For a single line, no \tn{endlinechar} should be added, so it is
-% set to $-1$, and spaces should not be removed.
-% Trailing spaces and tabs are a difficult matter, as \TeX{} removes
-% these at a very low level. The only way to preserve them is to
-% rescan not the argument but the argument followed by a character
-% with a reasonable category code. Here, $11$ (letter) and $12$ (other)
-% are accepted, as these are convenient, suitable for
-% delimiting an argument, and it is very unlikely that none of the
-% ASCII characters are in one of these categories. To avoid
-% selecting one particular character to put at the end, whose
-% category code may have been modified, there is a loop through
-% characters from |'| (ASCII $39$) to |~| (ASCII $127$). The choice
-% of starting point was made because this is the start of a very long
-% range of characters whose standard category is letter or other,
-% thus minimizing the number of steps needed by the loop (most often
-% just a single one). If no valid character is found (very rare),
-% fall-back on \cs{@@_set_rescan_multi:nNN}.
-%
-% Otherwise, once a valid character is found (let us use |'| in this
-% explanation) run some code very similar to \cs{@@_set_rescan_multi:nNN}
-% but with |'| added at both ends of the input. Of course, we need to
-% define the auxiliary \cs{@@_set_rescan_single:NNww} on the fly to remove
-% the additional~|'| that is just before |::| (by which we mean
-% \cs{c_@@_rescan_marker_tl}). Note that the argument must be
-% delimited by |'| with the current catcode; this is done thanks to
-% \cs{char_generate:nn}. Yet another issue is that the rescanned
-% token list may contain a comment character, in which case the |'| we
-% expected is not there. We fix this as follows: rather than just
-% |::| we set \tn{everyeof} to |::|\Arg{code1} |'::|\Arg{code2}
-% \cs{s_@@_stop}. The auxiliary \cs{@@_set_rescan_single:NNww} runs the
-% \texttt{o}-expanding assignment, expanding either \meta{code1} or
-% \meta{code2} before its the main argument~|#3|. In the typical case
-% without comment character, \meta{code1} is expanded, removing the
-% leading~|'|. In the rarer case with comment character, \meta{code2}
-% is expanded, calling \cs{@@_set_rescan_single_aux:w}, which removes the
-% trailing |::|\Arg{code1} and the leading~|'|.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_set_rescan:nNN #1
- {
- \int_compare:nNnTF \tex_newlinechar:D < 0
- { \use_ii:nn }
- {
- \exp_args:Nnf \tl_if_in:nnTF {#1}
- { \char_generate:nn { \tex_newlinechar:D } { 12 } }
- }
- { \@@_set_rescan_multi:nNN }
- {
- \int_set:Nn \tex_endlinechar:D { -1 }
- \@@_set_rescan_single:nnNN { `' }
- }
- {#1}
- }
-\cs_new_protected:Npn \@@_set_rescan_single:nnNN #1
- {
- \int_compare:nNnTF
- { \char_value_catcode:n {#1} / 2 } = 6
- {
- \exp_args:Nof \@@_set_rescan_single_aux:nnnNN
- \c_@@_rescan_marker_tl
- { \char_generate:nn {#1} { \char_value_catcode:n {#1} } }
- }
- {
- \int_compare:nNnTF {#1} < { `\~ }
- {
- \exp_args:Nf \@@_set_rescan_single:nnNN
- { \int_eval:n { #1 + 1 } }
- }
- { \@@_set_rescan_multi:nNN }
- }
- }
-\cs_new_protected:Npn \@@_set_rescan_single_aux:nnnNN #1#2#3#4#5
- {
- \tex_everyeof:D
- {
- #1 \use_none:n
- #2 #1 { \exp:w \@@_set_rescan_single_aux:w }
- \s_@@_stop
- }
- \cs_set:Npn \@@_rescan:NNw ##1##2##3 #2 #1 ##4 ##5 \s_@@_stop
- {
- \group_end:
- ##1 ##2 { ##4 ##3 }
- }
- \exp_after:wN \@@_rescan:NNw
- \exp_after:wN #4
- \exp_after:wN #5
- \tex_scantokens:D { #2 #3 #2 }
- }
-\exp_args:Nno \use:nn
- { \cs_new:Npn \@@_set_rescan_single_aux:w #1 }
- \c_@@_rescan_marker_tl #2
- { \use_i:nn \exp_end: #1 }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Modifying token list variables}
-%
-% \begin{macro}
-% {
-% \tl_replace_once:Nnn, \tl_replace_once:NVn, \tl_replace_once:NnV,
-% \tl_replace_once:Nen, \tl_replace_once:Nne, \tl_replace_once:Nee,
-% \tl_replace_once:Nxn, \tl_replace_once:Nnx, \tl_replace_once:Nxx,
-% \tl_replace_once:cnn, \tl_replace_once:cVn, \tl_replace_once:cnV,
-% \tl_replace_once:cen, \tl_replace_once:cne, \tl_replace_once:cee,
-% \tl_replace_once:cxn, \tl_replace_once:cnx, \tl_replace_once:cxx
-% }
-% \begin{macro}
-% {
-% \tl_greplace_once:Nnn, \tl_greplace_once:NVn, \tl_greplace_once:NnV,
-% \tl_greplace_once:Nen, \tl_greplace_once:Nne, \tl_greplace_once:Nee,
-% \tl_greplace_once:Nxn, \tl_greplace_once:Nnx, \tl_greplace_once:Nxx,
-% \tl_greplace_once:cnn, \tl_greplace_once:cVn, \tl_greplace_once:cnV,
-% \tl_greplace_once:cen, \tl_greplace_once:cne, \tl_greplace_once:cee,
-% \tl_greplace_once:cxn, \tl_greplace_once:cnx, \tl_greplace_once:cxx
-% }
-% \begin{macro}
-% {
-% \tl_replace_all:Nnn, \tl_replace_all:NVn, \tl_replace_all:NnV,
-% \tl_replace_all:Nen, \tl_replace_all:Nne, \tl_replace_all:Nee,
-% \tl_replace_all:Nxn, \tl_replace_all:Nnx, \tl_replace_all:Nxx,
-% \tl_replace_all:cnn, \tl_replace_all:cVn, \tl_replace_all:cnV,
-% \tl_replace_all:cen, \tl_replace_all:cne, \tl_replace_all:cee,
-% \tl_replace_all:cxn, \tl_replace_all:cnx, \tl_replace_all:cxx
-% }
-% \begin{macro}
-% {
-% \tl_greplace_all:Nnn, \tl_greplace_all:NVn, \tl_greplace_all:NnV,
-% \tl_greplace_all:Nen, \tl_greplace_all:Nne, \tl_greplace_all:Nee,
-% \tl_greplace_all:Nxn, \tl_greplace_all:Nnx, \tl_greplace_all:Nxx,
-% \tl_greplace_all:cnn, \tl_greplace_all:cVn, \tl_greplace_all:cnV,
-% \tl_greplace_all:cen, \tl_greplace_all:cne, \tl_greplace_all:cee,
-% \tl_greplace_all:cxn, \tl_greplace_all:cnx, \tl_greplace_all:cxx
-% }
-% All of the \texttt{replace} functions call \cs{@@_replace:NnNNNnn}
-% with appropriate arguments. The first two arguments are explained
-% later. The next controls whether the replacement function calls
-% itself (\cs{@@_replace_next:w}) or stops (\cs{@@_replace_wrap:w})
-% after the first replacement. Next comes an \texttt{e}-type
-% assignment function \cs{tl_set:Ne} or \cs{tl_gset:Ne} for local or
-% global replacements. Finally, the three arguments \meta{tl~var}
-% \Arg{pattern} \Arg{replacement} provided by the user. When
-% describing the auxiliary functions below, we denote the contents of
-% the \meta{tl~var} by \meta{token list}.
-% \begin{macrocode}
-\cs_new_protected:Npn \tl_replace_once:Nnn
- { \@@_replace:NnNNNnn \q_@@_mark ? \@@_replace_wrap:w \__kernel_tl_set:Nx }
-\cs_new_protected:Npn \tl_greplace_once:Nnn
- { \@@_replace:NnNNNnn \q_@@_mark ? \@@_replace_wrap:w \__kernel_tl_gset:Nx }
-\cs_new_protected:Npn \tl_replace_all:Nnn
- { \@@_replace:NnNNNnn \q_@@_mark ? \@@_replace_next:w \__kernel_tl_set:Nx }
-\cs_new_protected:Npn \tl_greplace_all:Nnn
- { \@@_replace:NnNNNnn \q_@@_mark ? \@@_replace_next:w \__kernel_tl_gset:Nx }
-\cs_generate_variant:Nn \tl_replace_once:Nnn
- { NnV , Nne , NV , Ne , Nee , c , cnV , cne , cV , ce , cee }
-\cs_generate_variant:Nn \tl_replace_once:Nnn
- { Nx , Nnx , Nxx , cxn , cnx , cxx }
-\cs_generate_variant:Nn \tl_greplace_once:Nnn
- { NnV , Nne , NV , Ne , Nee , c , cnV , cne , cV , ce , cee }
-\cs_generate_variant:Nn \tl_greplace_once:Nnn
- { Nx , Nnx , Nxx , cxn , cnx , cxx }
-\cs_generate_variant:Nn \tl_replace_all:Nnn
- { NnV , Nne , NV , Ne , Nee , c , cnV , cne , cV , ce , cee }
-\cs_generate_variant:Nn \tl_replace_all:Nnn
- { Nx , Nnx , Nxx , cxn , cnx , cxx }
-\cs_generate_variant:Nn \tl_greplace_all:Nnn
- { NnV , Nne , NV , Ne , Nee , c , cnV , cne , cV , ce , cee }
-\cs_generate_variant:Nn \tl_greplace_all:Nnn
- { Nx , Nnx , Nxx , cxn , cnx , cxx }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \@@_replace:NnNNNnn,
-% \@@_replace_auxi:NnnNNNnn,
-% \@@_replace_auxii:nNNNnn,
-% \@@_replace_next:w,
-% \@@_replace_next_aux:w,
-% \@@_replace_wrap:w,
-% }
-% To implement the actual replacement auxiliary
-% \cs{@@_replace_auxii:nNNNnn} we need a \meta{delimiter} with
-% the following properties:
-% \begin{itemize}
-% \item all occurrences of the \meta{pattern}~|#6| in
-% \enquote{\meta{token list} \meta{delimiter}} belong to the
-% \meta{token list} and have no overlap with the \meta{delimiter},
-% \item the first occurrence of the \meta{delimiter} in
-% \enquote{\meta{token list} \meta{delimiter}} is the trailing
-% \meta{delimiter}.
-% \end{itemize}
-% We first find the building blocks for the \meta{delimiter}, namely
-% two tokens \meta{A} and~\meta{B} such that \meta{A} does not appear
-% in~|#6| and |#6| is not~\meta{B} (this condition is trivial if |#6|
-% has more than one token). Then we consider the delimiters
-% \enquote{\meta{A}} and \enquote{\meta{A} \meta{A}$^n$ \meta{B}
-% \meta{A}$^n$ \meta{B}}, for $n\geq 1$, where $\meta{A}^n$ denotes
-% $n$~copies of \meta{A}, and we choose as our \meta{delimiter} the
-% first one which is not in the \meta{token list}.
-%
-% Every delimiter in the set obeys the first condition: |#6|~does not
-% contain~\meta{A} hence cannot be overlapping with the \meta{token
-% list} and the \meta{delimiter}, and it cannot be within the
-% \meta{delimiter} since it would have to be in one of the two
-% \meta{B} hence be equal to this single token (or empty, but this is
-% an error case filtered separately). Given the particular form of
-% these delimiters, for which no prefix is also a suffix, the second
-% condition is actually a consequence of the weaker condition that the
-% \meta{delimiter} we choose does not appear in the \meta{token list}.
-% Additionally, the set of delimiters is such that a \meta{token list}
-% of $n$~tokens can contain at most $O(n^{1/2})$ of them, hence we
-% find a \meta{delimiter} with at most $O(n^{1/2})$ tokens in a time
-% at most $O(n^{3/2})$. Bear in mind that these upper bounds are
-% reached only in very contrived scenarios: we include the case
-% \enquote{\meta{A}} in the list of delimiters to try, so that the
-% \meta{delimiter} is simply \cs{q_@@_mark} in the most common
-% situation where neither the \meta{token list} nor the \meta{pattern}
-% contains \cs{q_@@_mark}.
-%
-% Let us now ahead, optimizing for this most common case. First, two
-% special cases: an empty \meta{pattern}~|#6| is an error, and if
-% |#1|~is absent from both the \meta{token list}~|#5| and the
-% \meta{pattern}~|#6| then we can use it as the \meta{delimiter}
-% through \cs{@@_replace_auxii:nNNNnn} |{#1}|. Otherwise, we end up
-% calling \cs{@@_replace:NnNNNnn} repeatedly with the first two
-% arguments \cs{q_@@_mark} |{?}|, |\?| |{??}|, |\??| |{???}|, and so on,
-% until |#6|~does not contain the control sequence~|#1|, which we take
-% as our~\meta{A}. The argument~|#2| only serves to collect~|?|
-% characters for~|#1|. Note that the order of the tests means that
-% the first two are done every time, which is wasteful (for instance,
-% we repeatedly test for the emptyness of~|#6|). However, this is
-% rare enough not to matter. Finally, choose~\meta{B} to be
-% \cs{q_@@_nil} or~\cs{q_@@_stop} such that it is not equal to~|#6|.
-%
-% The \cs{@@_replace_auxi:NnnNNNnn} auxiliary receives \Arg{A} and
-% |{|\meta{A}$^n$\meta{B}|}| as its arguments, initially with $n=1$.
-% If \enquote{\meta{A} \meta{A}$^n$\meta{B} \meta{A}$^n$\meta{B}} is
-% in the \meta{token list} then increase~$n$ and try again. Once it
-% is not anymore in the \meta{token list} we take it as our
-% \meta{delimiter} and pass this to the \texttt{auxii} auxiliary.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_replace:NnNNNnn #1#2#3#4#5#6#7
- {
- \tl_if_empty:nTF {#6}
- {
- \msg_error:nne { kernel } { empty-search-pattern }
- { \tl_to_str:n {#7} }
- }
- {
- \tl_if_in:onTF { #5 #6 } {#1}
- {
- \tl_if_in:nnTF {#6} {#1}
- { \exp_args:Nc \@@_replace:NnNNNnn {#2} {#2?} }
- {
- \@@_quark_if_nil:nTF {#6}
- { \@@_replace_auxi:NnnNNNnn #5 {#1} { #1 \q_@@_stop } }
- { \@@_replace_auxi:NnnNNNnn #5 {#1} { #1 \q_@@_nil } }
- }
- }
- { \@@_replace_auxii:nNNNnn {#1} }
- #3#4#5 {#6} {#7}
- }
- }
-\cs_new_protected:Npn \@@_replace_auxi:NnnNNNnn #1#2#3
- {
- \tl_if_in:NnTF #1 { #2 #3 #3 }
- { \@@_replace_auxi:NnnNNNnn #1 { #2 #3 } {#2} }
- { \@@_replace_auxii:nNNNnn { #2 #3 #3 } }
- }
-% \end{macrocode}
-% The auxiliary \cs{@@_replace_auxii:nNNNnn} receives the following
-% arguments:
-% \begin{quote}
-% \Arg{delimiter} \meta{function} \meta{assignment} \\
-% \meta{tl~var} \Arg{pattern} \Arg{replacement}
-% \end{quote}
-% All of its work is done between
-% \cs{group_align_safe_begin:} and \cs{group_align_safe_end:} to avoid
-% issues in alignments. It does the actual replacement within
-% |#3|~|#4|~|{...}|, an \texttt{e}-expanding \meta{assignment}~|#3| to
-% the \meta{tl~var}~|#4|. The auxiliary \cs{@@_replace_next:w} is
-% called, followed by the \meta{token list}, some tokens including the
-% \meta{delimiter}~|#1|, followed by the \meta{pattern}~|#5|.
-% This auxiliary finds an argument delimited by~|#5| (the presence of
-% a trailing~|#5| avoids runaway arguments) and calls
-% \cs{@@_replace_wrap:w} to test whether this |#5| is found within the
-% \meta{token list} or is the trailing one.
-%
-% If on the one hand it is found within the \meta{token list}, then
-% |##1| cannot contain the \meta{delimiter}~|#1| that we worked so
-% hard to obtain, thus \cs{@@_replace_wrap:w} gets~|##1| as its own
-% argument~|##1|, and protects it against
-% the \texttt{e}-expanding assignment. It also finds \cs{exp_not:n}
-% as~|##2| and does nothing to it, thus letting through \cs{exp_not:n}
-% \Arg{replacement} into the assignment. Note that
-% \cs{@@_replace_next:w} and \cs{@@_replace_wrap:w} are always called
-% followed by two empty brace groups. These are safe because no
-% delimiter can match them. They prevent losing braces when grabbing
-% delimited arguments, but require the use of \cs{exp_not:o} and
-% \cs{use_none:nn}, rather than simply \cs{exp_not:n}.
-% Afterwards, \cs{@@_replace_next:w} is called
-% to repeat the replacement, or \cs{@@_replace_wrap:w} if we only want
-% a single replacement. In this second case, |##1| is the
-% \meta{remaining tokens} in the \meta{token list} and |##2| is some
-% \meta{ending code} which ends the assignment and removes the
-% trailing tokens |#5| using some \cs{if_false:} |{| \cs{fi:} |}|
-% trickery because~|#5| may contain any delimiter.
-%
-% If on the other hand the argument~|##1| of \cs{@@_replace_next:w} is
-% delimited by the trailing \meta{pattern}~|#5|, then |##1| is
-% \enquote{\{ \} \{ \} \meta{token list} \meta{delimiter}
-% \Arg{ending code}}, hence \cs{@@_replace_wrap:w} finds
-% \enquote{\{ \} \{ \} \meta{token list}} as |##1| and the
-% \meta{ending code} as~|##2|. It leaves the \meta{token list} into
-% the assignment and unbraces the \meta{ending code} which removes
-% what remains (essentially the \meta{delimiter} and
-% \meta{replacement}).
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_replace_auxii:nNNNnn #1#2#3#4#5#6
- {
- \group_align_safe_begin:
- \cs_set:Npn \@@_replace_wrap:w ##1 #1 ##2
- { \__kernel_exp_not:w \exp_after:wN { \use_none:nn ##1 } ##2 }
- \cs_set:Npe \@@_replace_next:w ##1 #5
- {
- \exp_not:N \@@_replace_wrap:w ##1
- \exp_not:n { #1 }
- \exp_not:n { \exp_not:n {#6} }
- \exp_not:n { #2 { } { } }
- }
- #3 #4
- {
- \exp_after:wN \@@_replace_next_aux:w
- #4
- #1
- {
- \if_false: { \fi: }
- \exp_after:wN \use_none:n \exp_after:wN { \if_false: } \fi:
- }
- #5
- }
- \group_align_safe_end:
- }
-\cs_new:Npn \@@_replace_next_aux:w { \@@_replace_next:w { } { } }
-\cs_new_eq:NN \@@_replace_wrap:w ?
-\cs_new_eq:NN \@@_replace_next:w ?
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \tl_remove_once:Nn, \tl_remove_once:NV, \tl_remove_once:Ne,
-% \tl_remove_once:cn, \tl_remove_once:cV, \tl_remove_once:ce
-% }
-% \begin{macro}
-% {
-% \tl_gremove_once:Nn, \tl_gremove_once:NV,
-% \tl_gremove_once:cn, \tl_gremove_once:cV,
-% }
-% Removal is just a special case of replacement.
-% \begin{macrocode}
-\cs_new_protected:Npn \tl_remove_once:Nn #1#2
- { \tl_replace_once:Nnn #1 {#2} { } }
-\cs_new_protected:Npn \tl_gremove_once:Nn #1#2
- { \tl_greplace_once:Nnn #1 {#2} { } }
-\cs_generate_variant:Nn \tl_remove_once:Nn { NV , Ne , c , cV , ce }
-\cs_generate_variant:Nn \tl_gremove_once:Nn { NV , Ne , c , cV , ce }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \tl_remove_all:Nn, \tl_remove_all:NV, \tl_remove_all:Ne,
-% \tl_remove_all:Nx,
-% \tl_remove_all:cn, \tl_remove_all:cV, \tl_remove_all:ce,
-% \tl_remove_all:cx,
-% }
-% \begin{macro}
-% {
-% \tl_gremove_all:Nn, \tl_gremove_all:NV, \tl_gremove_all:Ne,
-% \tl_gremove_all:Nx,
-% \tl_gremove_all:cn, \tl_gremove_all:cV, \tl_gremove_all:ce,
-% \tl_gremove_all:cx,
-% }
-% Removal is just a special case of replacement.
-% \begin{macrocode}
-\cs_new_protected:Npn \tl_remove_all:Nn #1#2
- { \tl_replace_all:Nnn #1 {#2} { } }
-\cs_new_protected:Npn \tl_gremove_all:Nn #1#2
- { \tl_greplace_all:Nnn #1 {#2} { } }
-\cs_generate_variant:Nn \tl_remove_all:Nn { NV , Ne , c , cV , ce }
-\cs_generate_variant:Nn \tl_remove_all:Nn { Nx , cx }
-\cs_generate_variant:Nn \tl_gremove_all:Nn { NV , Ne , c , cV , ce }
-\cs_generate_variant:Nn \tl_gremove_all:Nn { Nx , cx }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Token list conditionals}
-%
-% \begin{macro}[pTF]{\tl_if_empty:N, \tl_if_empty:c}
-% These functions check whether the token list in the argument is
-% empty and execute the proper code from their argument(s).
-% \begin{macrocode}
-\prg_new_conditional:Npnn \tl_if_empty:N #1 { p , T , F , TF }
- {
- \if_meaning:w #1 \c_empty_tl
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-\prg_generate_conditional_variant:Nnn \tl_if_empty:N
- { c } { p , T , F , TF }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\tl_if_empty:n, \tl_if_empty:V, \tl_if_empty:e}
-% The \cs{if:w} triggers the expansion of \cs{tl_to_str:n} which converts the
-% argument to a string: this is empty if and only if the argument is. Then
-% |\if:w \scan_stop: ... \scan_stop:| is \texttt{true} if and only if the
-% string |...| is empty.
-% It could be tempting to use |\if:w \scan_stop: #1 \scan_stop:| directly.
-% But this fails on a token list expanding to anything starting with
-% \cs{scan_stop:} leaving everything that follows in the input stream.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \tl_if_empty:n #1 { p , TF , T , F }
- {
- \if:w \scan_stop: \tl_to_str:n {#1} \scan_stop:
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-\prg_generate_conditional_variant:Nnn \tl_if_empty:n
- { V , e } { p , TF , T , F }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[pTF,documented-as=\tl_if_empty:nTF]{\tl_if_empty:o}
-% \begin{macro}[EXP]{\@@_if_empty_if:o}
-% The auxiliary function \cs{@@_if_empty_if:o} is for use
-% in various token list conditionals which reduce to testing
-% if a given token list is empty after applying a simple function
-% to it.
-% The test for emptiness is based on \cs{tl_if_empty:nTF}, but
-% the expansion is hard-coded for efficiency, as this auxiliary
-% function is used in several places.
-% We don't put \cs{prg_return_true:} and so on in the definition of
-% the auxiliary, because that would prevent an optimization applied to
-% conditionals that end with this code.
-% Also the |\@@_if_empty_if:o| is expanded once in |\tl_if_empty:oTF| for
-% efficiency as well (and to reduce code doubling).
-% \begin{macrocode}
-\cs_new:Npn \@@_if_empty_if:o #1
- {
- \if:w \scan_stop: \__kernel_tl_to_str:w \exp_after:wN {#1} \scan_stop:
- }
-\exp_args:Nno \use:n
- { \prg_new_conditional:Npnn \tl_if_empty:o #1 { p , TF , T , F } }
- {
- \@@_if_empty_if:o {#1}
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\tl_if_blank:n, \tl_if_blank:V, \tl_if_blank:o}
-% \begin{macro}{\@@_if_blank_p:NNw}
-% \TeX{} skips spaces when reading a non-delimited arguments. Thus,
-% a \meta{token list} is blank if and only if \cs{use_none:n}
-% \meta{token list} |?| is empty after one expansion. The auxiliary
-% \cs{@@_if_empty_if:o} is a fast emptyness test, converting its
-% argument to a string (after one expansion) and using the test
-% \cs{if:w} \cs{scan_stop:} |...| \cs{scan_stop:}.
-% \begin{macrocode}
-\exp_args:Nno \use:n
- { \prg_new_conditional:Npnn \tl_if_blank:n #1 { p , T , F , TF } }
- {
- \@@_if_empty_if:o { \use_none:n #1 ? }
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-\prg_generate_conditional_variant:Nnn \tl_if_blank:n
- { e , V , o } { p , T , F , TF }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\tl_if_eq:NN, \tl_if_eq:Nc, \tl_if_eq:cN, \tl_if_eq:cc}
-% Returns \cs{c_true_bool} if and only if the two token list variables are
-% equal.
-% \begin{macrocode}
-\prg_new_eq_conditional:NNn \tl_if_eq:NN \cs_if_eq:NN { p , T , F , TF }
-\prg_generate_conditional_variant:Nnn \tl_if_eq:NN
- { Nc , c , cc } { p , TF , T , F }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\l_@@_internal_a_tl, \l_@@_internal_b_tl}
-% Temporary storage.
-% \begin{macrocode}
-\tl_new:N \l_@@_internal_a_tl
-\tl_new:N \l_@@_internal_b_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[TF]{\tl_if_eq:Nn}
-% A simple store and compare routine.
-% \begin{macrocode}
-\prg_new_protected_conditional:Npnn \tl_if_eq:Nn #1#2 { T , F , TF }
- {
- \group_begin:
- \tl_set:Nn \l_@@_internal_b_tl {#2}
- \exp_after:wN
- \group_end:
- \if_meaning:w #1 \l_@@_internal_b_tl
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-\prg_generate_conditional_variant:Nnn \tl_if_eq:Nn { c } { TF , T , F }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[TF]
-% {
-% \tl_if_eq:nn, \tl_if_eq:nV, \tl_if_eq:ne, \tl_if_eq:Vn, \tl_if_eq:en,
-% \tl_if_eq:ee,
-% \tl_if_eq:xn, \tl_if_eq:nx, \tl_if_eq:xx,
-% }
-% A simple store and compare routine.
-% \begin{macrocode}
-\prg_new_protected_conditional:Npnn \tl_if_eq:nn #1#2 { T , F , TF }
- {
- \group_begin:
- \tl_set:Nn \l_@@_internal_a_tl {#1}
- \tl_set:Nn \l_@@_internal_b_tl {#2}
- \exp_after:wN
- \group_end:
- \if_meaning:w \l_@@_internal_a_tl \l_@@_internal_b_tl
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-\prg_generate_conditional_variant:Nnn \tl_if_eq:nn
- { nV , ne , nx , V, e , ee , x , xx }
- { TF , T , F }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[TF]
-% {
-% \tl_if_in:Nn, \tl_if_in:NV, \tl_if_in:No,
-% \tl_if_in:cn, \tl_if_in:cV, \tl_if_in:co
-% }
-% See \cs{tl_if_in:nnTF} for further comments. Here we simply
-% expand the token list variable and pass it to \cs{tl_if_in:nnTF}.
-% \begin{macrocode}
-\cs_new_protected:Npn \tl_if_in:NnT { \exp_args:No \tl_if_in:nnT }
-\cs_new_protected:Npn \tl_if_in:NnF { \exp_args:No \tl_if_in:nnF }
-\cs_new_protected:Npn \tl_if_in:NnTF { \exp_args:No \tl_if_in:nnTF }
-\prg_generate_conditional_variant:Nnn \tl_if_in:Nn
- { NV , No , c , cV , co } { T , F , TF }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[TF]
-% {
-% \tl_if_in:nn, \tl_if_in:Vn, \tl_if_in:VV, \tl_if_in:on, \tl_if_in:oo,
-% \tl_if_in:nV, \tl_if_in:no
-% }
-% Once more, the test relies on the emptiness test for robustness.
-% The function \cs{@@_tmp:w} removes tokens until the first occurrence
-% of |#2|. If this does not appear in |#1|, then the final |#2| is removed,
-% leaving an empty token list. Otherwise some tokens remain, and the
-% test is \texttt{false}. See \cs{tl_if_empty:nTF} for details on
-% the emptiness test.
-%
-% Treating correctly cases like
-% |\tl_if_in:nnTF {a state}{states}|, where |#1#2| contains |#2| before
-% the end, requires special care.
-% To cater for this case, we insert |{}{}| between the two token
-% lists. This marker may not appear in |#2| because of \TeX{} limitations
-% on what can delimit a parameter, hence we are safe. Using two brace
-% groups makes the test work also for empty arguments.
-% The \cs{if_false:} constructions are a faster way to do
-% \cs{group_align_safe_begin:} and \cs{group_align_safe_end:}.
-% The \cs{scan_stop:} ensures that \texttt{f}-expanding
-% \cs{tl_if_in:nnTF} does not lead to unbalanced braces.
-% \begin{macrocode}
-\prg_new_protected_conditional:Npnn \tl_if_in:nn #1#2 { T , F , TF }
- {
- \scan_stop:
- \if_false: { \fi:
- \cs_set:Npn \@@_tmp:w ##1 #2 { }
- \tl_if_empty:oTF { \@@_tmp:w #1 {} {} #2 }
- { \prg_return_false: } { \prg_return_true: }
- \if_false: } \fi:
- }
-\prg_generate_conditional_variant:Nnn \tl_if_in:nn
- { V , VV , o , oo , nV , no } { T , F , TF }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[pTF, EXP]{\tl_if_novalue:n}
-% \begin{macro}[EXP]{\@@_if_novalue:w}
-% Tests whether |##1| matches |-NoValue-| exactly (with suitable
-% catcodes): this is similar to \cs{quark_if_nil:nTF}. The first
-% argument of \cs{@@_if_novalue:w} is empty if and only if |##1|
-% starts with |-NoValue-|, while the second argument is empty if |##1|
-% is exactly |-NoValue-| or if it has a question mark just following
-% |-NoValue-|. In this second case, however, the material after the
-% first |?!| remains and makes the emptyness test return
-% \texttt{false}.
-% \begin{macrocode}
-\cs_set_protected:Npn \@@_tmp:w #1
- {
- \prg_new_conditional:Npnn \tl_if_novalue:n ##1
- { p , T , F , TF }
- {
- \@@_if_empty_if:o { \@@_if_novalue:w {} ##1 {} ? ! #1 ? ? ! }
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
- \cs_new:Npn \@@_if_novalue:w ##1 #1 ##2 ? ##3 ? ! { ##1 ##2 }
- }
-\exp_args:No \@@_tmp:w { \c_novalue_tl }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP,pTF]{\tl_if_single:N, \tl_if_single:c}
-% Expand the token list and feed it to \cs{tl_if_single:nTF}.
-% \begin{macrocode}
-\cs_new:Npn \tl_if_single_p:N { \exp_args:No \tl_if_single_p:n }
-\cs_new:Npn \tl_if_single:NT { \exp_args:No \tl_if_single:nT }
-\cs_new:Npn \tl_if_single:NF { \exp_args:No \tl_if_single:nF }
-\cs_new:Npn \tl_if_single:NTF { \exp_args:No \tl_if_single:nTF }
-\prg_generate_conditional_variant:Nnn \tl_if_single:N {c} { p , T , F , TF }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP,pTF]{\tl_if_single:n}
-% \begin{macro}[EXP]{\@@_if_single:nnw}
-% This test is similar to \cs{tl_if_empty:nTF}. Expanding
-% \cs{use_none:nn} |#1| |??| once yields an empty result if |#1| is
-% blank, a single~|?| if |#1| has a single item, and otherwise yields
-% some tokens ending with |??|. Then, \cs{__kernel_tl_to_str:w} makes sure
-% there are no odd category codes. An earlier version would compare
-% the result to a single~|?| using string comparison, but the Lua call
-% is slow in \LuaTeX{}. Instead, \cs{@@_if_single:nnw} picks the
-% second token in front of it. If |#1| is empty, this token is
-% the trailing~|?| and the |\if:w| test yields \texttt{false}. If
-% |#1| has a single item, the token is~|\scan_stop:| and the |\if:w| test
-% yields \texttt{true}. Otherwise, it is one of the characters
-% resulting from \cs{tl_to_str:n}, and the |\if:w| test yields
-% \texttt{false}. Note that \cs{if:w} and
-% \cs{__kernel_tl_to_str:w} are primitives that take care of
-% expansion.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \tl_if_single:n #1 { p , T , F , TF }
- {
- \if:w \scan_stop: \exp_after:wN \@@_if_single:nnw
- \__kernel_tl_to_str:w
- \exp_after:wN { \use_none:nn #1 ?? } \scan_stop: ? \s_@@_stop
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-\cs_new:Npn \@@_if_single:nnw #1#2#3 \s_@@_stop {#2}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP,pTF]{\tl_if_single_token:n}
-% There are four cases: empty token list, token list starting with a
-% normal token, with a brace group, or with a space token. If the
-% token list starts with a normal token, remove it and check for
-% emptiness. For the next case, an empty token list is not a single
-% token. Finally, we have a non-empty token list starting with a
-% space or a brace group. Applying \texttt{f}-expansion yields an
-% empty result if and only if the token list is a single space.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \tl_if_single_token:n #1 { p , T , F , TF }
- {
- \tl_if_head_is_N_type:nTF {#1}
- { \@@_if_empty_if:o { \use_none:n #1 } }
- {
- \tl_if_empty:nTF {#1}
- { \if_false: }
- { \@@_if_empty_if:o { \exp:w \exp_end_continue_f:w #1 } }
- }
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Mapping over token lists}
-%
-% \begin{macro}
-% {
-% \tl_map_function:nN, \tl_map_function:NN, \tl_map_function:cN,
-% \@@_map_function:Nnnnnnnnn, \@@_map_function_end:w,
-% \@@_use_none_delimit_by_s_stop:w
-% }
-% Expandable loop macro for token lists. We use the internal scan
-% mark \cs{s_@@_stop} (defined later), which is not allowed to show up
-% in the token list |#1| since it is internal to \pkg{l3tl}. This
-% allows us a very fast test of whether some \meta{item} is the
-% end-marker \cs{s_@@_stop}, namely call
-% \cs{@@_use_none_delimit_by_s_stop:w} \meta{item} \meta{function}
-% \cs{s_@@_stop}, which calls \meta{function} if the \meta{item} is
-% the end-marker. To speed up the loop even more, only test one out
-% of eight items, and once we hit one of the eight end-markers,
-% go more slowly through the last few items of the list using
-% \cs{@@_map_function_end:w}.
-% \begin{macrocode}
-\cs_new:Npn \tl_map_function:nN #1#2
- {
- \@@_map_function:Nnnnnnnnn #2 #1
- \s_@@_stop \s_@@_stop \s_@@_stop \s_@@_stop
- \s_@@_stop \s_@@_stop \s_@@_stop \s_@@_stop
- \prg_break_point:Nn \tl_map_break: { }
- }
-\cs_new:Npn \tl_map_function:NN
- { \exp_args:No \tl_map_function:nN }
-\cs_generate_variant:Nn \tl_map_function:NN { c }
-\cs_new:Npn \@@_map_function:Nnnnnnnnn #1#2#3#4#5#6#7#8#9
- {
- \@@_use_none_delimit_by_s_stop:w
- #9 \@@_map_function_end:w \s_@@_stop
- #1 {#2} #1 {#3} #1 {#4} #1 {#5} #1 {#6} #1 {#7} #1 {#8} #1 {#9}
- \@@_map_function:Nnnnnnnnn #1
- }
-\cs_new:Npn \@@_map_function_end:w \s_@@_stop #1#2
- {
- \@@_use_none_delimit_by_s_stop:w #2 \tl_map_break: \s_@@_stop
- #1 {#2}
- \@@_map_function_end:w \s_@@_stop
- }
-\cs_new:Npn \@@_use_none_delimit_by_s_stop:w #1 \s_@@_stop { }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\tl_map_inline:nn}
-% \begin{macro}{\tl_map_inline:Nn, \tl_map_inline:cn}
-% The inline functions are straight forward by now. We use a little
-% trick with the counter \cs{g__kernel_prg_map_int} to make
-% them nestable. We can also make use of \cs{@@_map_function:Nnnnnnnnn}
-% from before.
-% \begin{macrocode}
-\cs_new_protected:Npn \tl_map_inline:nn #1#2
- {
- \int_gincr:N \g__kernel_prg_map_int
- \cs_gset_protected:cpn
- { @@_map_ \int_use:N \g__kernel_prg_map_int :w } ##1 {#2}
- \exp_args:Nc \@@_map_function:Nnnnnnnnn
- { @@_map_ \int_use:N \g__kernel_prg_map_int :w }
- #1
- \s_@@_stop \s_@@_stop \s_@@_stop \s_@@_stop
- \s_@@_stop \s_@@_stop \s_@@_stop \s_@@_stop
- \prg_break_point:Nn \tl_map_break:
- { \int_gdecr:N \g__kernel_prg_map_int }
- }
-\cs_new_protected:Npn \tl_map_inline:Nn
- { \exp_args:No \tl_map_inline:nn }
-\cs_generate_variant:Nn \tl_map_inline:Nn { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \tl_map_tokens:nn, \tl_map_tokens:Nn, \tl_map_tokens:cn,
-% \@@_map_tokens:nnnnnnnnn, \@@_map_tokens_end:w
-% }
-% Much like the function mapping.
-% \begin{macrocode}
-\cs_new:Npn \tl_map_tokens:nn #1#2
- {
- \@@_map_tokens:nnnnnnnnn {#2} #1
- \s_@@_stop \s_@@_stop \s_@@_stop \s_@@_stop
- \s_@@_stop \s_@@_stop \s_@@_stop \s_@@_stop
- \prg_break_point:Nn \tl_map_break: { }
- }
-\cs_new:Npn \tl_map_tokens:Nn
- { \exp_args:No \tl_map_tokens:nn }
-\cs_generate_variant:Nn \tl_map_tokens:Nn { c }
-\cs_new:Npn \@@_map_tokens:nnnnnnnnn #1#2#3#4#5#6#7#8#9
- {
- \@@_use_none_delimit_by_s_stop:w
- #9 \@@_map_tokens_end:w \s_@@_stop
- \use:n {#1} {#2} \use:n {#1} {#3} \use:n {#1} {#4} \use:n {#1} {#5}
- \use:n {#1} {#6} \use:n {#1} {#7} \use:n {#1} {#8} \use:n {#1} {#9}
- \@@_map_tokens:nnnnnnnnn {#1}
- }
-\cs_new:Npn \@@_map_tokens_end:w \s_@@_stop \use:n #1#2
- {
- \@@_use_none_delimit_by_s_stop:w #2 \tl_map_break: \s_@@_stop
- #1 {#2}
- \@@_map_tokens_end:w \s_@@_stop
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\tl_map_variable:nNn}
-% \begin{macro}{\tl_map_variable:NNn, \tl_map_variable:cNn}
-% \begin{macro}{\@@_map_variable:Nnn}
-% \cs{tl_map_variable:nNn} \Arg{token list} \meta{tl~var}
-% \Arg{action} assigns \meta{tl~var} to each element and executes
-% \meta{action}. The assignment to \meta{tl~var} is done after the
-% quark test so that this variable does not get set to a quark.
-% \begin{macrocode}
-\cs_new_protected:Npn \tl_map_variable:nNn #1#2#3
- { \tl_map_tokens:nn {#1} { \@@_map_variable:Nnn #2 {#3} } }
-\cs_new_protected:Npn \@@_map_variable:Nnn #1#2#3
- { \tl_set:Nn #1 {#3} #2 }
-\cs_new_protected:Npn \tl_map_variable:NNn
- { \exp_args:No \tl_map_variable:nNn }
-\cs_generate_variant:Nn \tl_map_variable:NNn { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\tl_map_break:}
-% \begin{macro}{\tl_map_break:n}
-% The break statements use the general \cs{prg_map_break:Nn}.
-% \begin{macrocode}
-\cs_new:Npn \tl_map_break:
- { \prg_map_break:Nn \tl_map_break: { } }
-\cs_new:Npn \tl_map_break:n
- { \prg_map_break:Nn \tl_map_break: }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Using token lists}
-%
-% \begin{macro}{\tl_to_str:n, \tl_to_str:o, \tl_to_str:V, \tl_to_str:v, \tl_to_str:e}
-% Another name for a primitive: defined in \pkg{l3basics}.
-% \begin{macrocode}
-\cs_generate_variant:Nn \tl_to_str:n { o , V , v , e }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\tl_to_str:N, \tl_to_str:c}
-% These functions return the replacement text of a token list as a
-% string.
-% \begin{macrocode}
-\cs_new:Npn \tl_to_str:N #1 { \__kernel_tl_to_str:w \exp_after:wN {#1} }
-\cs_generate_variant:Nn \tl_to_str:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\tl_use:N, \tl_use:c}
-% Token lists which are simply not defined give a clear \TeX{}
-% error here. No such luck for ones equal to \cs{scan_stop:} so
-% instead a test is made and if there is an issue an error is forced.
-% \begin{macrocode}
-\cs_new:Npn \tl_use:N #1
- {
- \tl_if_exist:NTF #1 {#1}
- {
- \msg_expandable_error:nnn
- { kernel } { bad-variable } {#1}
- }
- }
-\cs_generate_variant:Nn \tl_use:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Working with the contents of token lists}
-%
-% \begin{macro}{\tl_count:n, \tl_count:V, \tl_count:v, \tl_count:e, \tl_count:o}
-% \begin{macro}{\tl_count:N, \tl_count:c}
-% \begin{macro}{\@@_count:n}
-% Count number of elements within a token list or token list
-% variable. Brace groups within the list are read as a single
-% element. Spaces are ignored.
-% \cs{@@_count:n} grabs the element and replaces it by |+1|.
-% The |0| ensures that it works on an empty list.
-% \begin{macrocode}
-\cs_new:Npn \tl_count:n #1
- {
- \int_eval:n
- { 0 \tl_map_function:nN {#1} \@@_count:n }
- }
-\cs_new:Npn \tl_count:N #1
- {
- \int_eval:n
- { 0 \tl_map_function:NN #1 \@@_count:n }
- }
-\cs_new:Npn \@@_count:n #1 { + 1 }
-\cs_generate_variant:Nn \tl_count:n { V , v , e , o }
-\cs_generate_variant:Nn \tl_count:N { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-%
-% \begin{macro}[EXP]{\tl_count_tokens:n}
-% \begin{macro}[EXP]{\@@_act_count_normal:nN,
-% \@@_act_count_group:nn, \@@_act_count_space:n}
-% The token count is computed through an \cs{int_eval:n} construction.
-% Each \texttt{1+} is output to the \emph{left}, into the integer
-% expression, and the sum is ended by the \cs{exp_end:} inserted by
-% \cs{@@_act_end:wn} (which is technically implemented as \cs{c_zero_int}).
-% Somewhat a hack!
-% \begin{macrocode}
-\cs_new:Npn \tl_count_tokens:n #1
- {
- \int_eval:n
- {
- \@@_act:NNNn
- \@@_act_count_normal:N
- \@@_act_count_group:n
- \@@_act_count_space:
- {#1}
- }
- }
-\cs_new:Npn \@@_act_count_normal:N #1 { 1 + }
-\cs_new:Npn \@@_act_count_space: { 1 + }
-\cs_new:Npn \@@_act_count_group:n #1 { 2 + \tl_count_tokens:n {#1} + }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\tl_reverse_items:n}
-% \begin{macro}{\@@_reverse_items:nwNwn}
-% \begin{macro}{\@@_reverse_items:wn}
-% Reversal of a token list is done by taking one item at a time
-% and putting it after \cs{s_@@_stop}.
-% \begin{macrocode}
-\cs_new:Npn \tl_reverse_items:n #1
- {
- \@@_reverse_items:nwNwn #1 ?
- \s_@@_mark \@@_reverse_items:nwNwn
- \s_@@_mark \@@_reverse_items:wn
- \s_@@_stop { }
- }
-\cs_new:Npn \@@_reverse_items:nwNwn #1 #2 \s_@@_mark #3 #4 \s_@@_stop #5
- {
- #3 #2
- \s_@@_mark \@@_reverse_items:nwNwn
- \s_@@_mark \@@_reverse_items:wn
- \s_@@_stop { {#1} #5 }
- }
-\cs_new:Npn \@@_reverse_items:wn #1 \s_@@_stop #2
- { \__kernel_exp_not:w \exp_after:wN { \use_none:nn #2 } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \tl_trim_spaces:n, \tl_trim_spaces:V, \tl_trim_spaces:v,
-% \tl_trim_spaces:e,
-% \tl_trim_spaces:o,
-% }
-% \begin{macro}{\tl_trim_spaces_apply:nN, \tl_trim_spaces_apply:oN}
-% \begin{macro}
-% {
-% \tl_trim_spaces:N, \tl_trim_spaces:c,
-% \tl_gtrim_spaces:N, \tl_gtrim_spaces:c
-% }
-% Trimming spaces from around the input is deferred to an internal
-% function whose first argument is the token list to trim, augmented
-% by an initial \cs{@@_trim_mark:}, and whose second argument is a
-% \meta{continuation}, which receives as a braced argument
-% \cs{@@_trim_mark:} \meta{trimmed token list}. The control sequence
-% \cs{@@_trim_mark:} expands to nothing in a single expansion. In the case
-% at hand, we take \cs{__kernel_exp_not:w} \cs{exp_after:wN} as our
-% continuation, so that space trimming behaves correctly within an
-% \texttt{e}-type or \texttt{x}-type expansion.
-% \begin{macrocode}
-\cs_new:Npn \tl_trim_spaces:n #1
- {
- \@@_trim_spaces:nn
- { \@@_trim_mark: #1 }
- { \__kernel_exp_not:w \exp_after:wN }
- }
-\cs_generate_variant:Nn \tl_trim_spaces:n { V , v , e , o }
-\cs_new:Npn \tl_trim_spaces_apply:nN #1#2
- { \@@_trim_spaces:nn { \@@_trim_mark: #1 } { \exp_args:No #2 } }
-\cs_generate_variant:Nn \tl_trim_spaces_apply:nN { o }
-\cs_new_protected:Npn \tl_trim_spaces:N #1
- { \__kernel_tl_set:Nx #1 { \exp_args:No \tl_trim_spaces:n {#1} } }
-\cs_new_protected:Npn \tl_gtrim_spaces:N #1
- { \__kernel_tl_gset:Nx #1 { \exp_args:No \tl_trim_spaces:n {#1} } }
-\cs_generate_variant:Nn \tl_trim_spaces:N { c }
-\cs_generate_variant:Nn \tl_gtrim_spaces:N { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_trim_spaces:nn}
-% \begin{macro}
-% {
-% \@@_trim_spaces_auxi:w, \@@_trim_spaces_auxii:w,
-% \@@_trim_spaces_auxiii:w, \@@_trim_spaces_auxiv:w
-% }
-% \begin{macro}{\@@_trim_mark:}
-% Trimming spaces from around the input is done using delimited
-% arguments and quarks, and to get spaces at odd places in the
-% definitions, we nest those in \cs{@@_tmp:w}, which then receives
-% a single space as its argument: |#1| is \verb*+ +.
-% Removing leading spaces is done with \cs{@@_trim_spaces_auxi:w},
-% which loops until \cs{@@_trim_mark:}\verb*+ + matches the end of the token
-% list: then |##1| is the token list and |##3| is
-% \cs{@@_trim_spaces_auxii:w}. This hands the relevant tokens to the
-% loop \cs{@@_trim_spaces_auxiii:w}, responsible for trimming
-% trailing spaces. The end is reached when \verb*+ + \cs{s_@@_nil}
-% matches the one present in the definition of \cs{tl_trim_spaces:n}.
-% Then \cs{@@_trim_spaces_auxiv:w} puts the token list into a group,
-% with a lingering \cs{@@_trim_mark:} at the start (which will expand to
-% nothing in one step of expansion), and feeds this to the
-% \meta{continuation}.
-% \begin{macrocode}
-\cs_set_protected:Npn \@@_tmp:w #1
- {
- \cs_new:Npn \@@_trim_spaces:nn ##1
- {
- \@@_trim_spaces_auxi:w
- ##1
- \s_@@_nil
- \@@_trim_mark: #1 { }
- \@@_trim_mark: \@@_trim_spaces_auxii:w
- \@@_trim_spaces_auxiii:w
- #1 \s_@@_nil
- \@@_trim_spaces_auxiv:w
- \s_@@_stop
- }
- \cs_new:Npn
- \@@_trim_spaces_auxi:w ##1 \@@_trim_mark: #1 ##2 \@@_trim_mark: ##3
- {
- ##3
- \@@_trim_spaces_auxi:w
- \@@_trim_mark:
- ##2
- \@@_trim_mark: #1 {##1}
- }
- \cs_new:Npn \@@_trim_spaces_auxii:w
- \@@_trim_spaces_auxi:w \@@_trim_mark: \@@_trim_mark: ##1
- {
- \@@_trim_spaces_auxiii:w
- ##1
- }
- \cs_new:Npn \@@_trim_spaces_auxiii:w ##1 #1 \s_@@_nil ##2
- {
- ##2
- ##1 \s_@@_nil
- \@@_trim_spaces_auxiii:w
- }
- \cs_new:Npn \@@_trim_spaces_auxiv:w ##1 \s_@@_nil ##2 \s_@@_stop ##3
- { ##3 { ##1 } }
- \cs_new:Npn \@@_trim_mark: {}
- }
-\@@_tmp:w { ~ }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {\tl_sort:Nn, \tl_sort:cn, \tl_gsort:Nn, \tl_gsort:cn, \tl_sort:nN}
-% Implemented in \pkg{l3sort}.
-% \end{macro}
-%
-% \subsection{The first token from a token list}
-%
-% \begin{macro}{\tl_head:N, \tl_head:n, \tl_head:V, \tl_head:v, \tl_head:f}
-% \begin{macro}{\@@_head_auxi:nw, \@@_head_auxii:n}
-% \begin{macro}{\tl_head:w,\@@_tl_head:w}
-% \begin{macro}{\tl_tail:N, \tl_tail:n, \tl_tail:V, \tl_tail:v, \tl_tail:f}
-% Finding the head of a token list expandably always strips braces, which
-% is fine as this is consistent with for example mapping over a list. The
-% empty brace groups in \cs{tl_head:n} ensure that a blank argument gives an
-% empty result. The result is returned within the \tn{unexpanded} primitive.
-% The approach here is to use \cs{if_false:} to allow us to use |}| as
-% the closing delimiter: this is the only safe choice, as any other token
-% would not be able to parse it's own code. More detail in
-% \url{http://tex.stackexchange.com/a/70168}.
-% \begin{macrocode}
-\cs_new:Npn \tl_head:n #1
- {
- \__kernel_exp_not:w \tex_expanded:D
- { { \if_false: { \fi: \@@_head_aux:n #1 { } } } }
- }
-\cs_new:Npn \@@_head_aux:n #1
- {
- \__kernel_exp_not:w {#1}
- \exp_after:wN \use_none:n \exp_after:wN { \if_false: } \fi:
- }
-\cs_generate_variant:Nn \tl_head:n { V , v , f }
-\cs_new:Npn \tl_head:w #1#2 \q_stop {#1}
-\cs_new:Npn \@@_tl_head:w #1#2 \s_@@_stop {#1}
-\cs_new:Npn \tl_head:N { \exp_args:No \tl_head:n }
-% \end{macrocode}
-% To correctly leave the tail of a token list, it's important \emph{not} to
-% absorb any of the tail part as an argument. For example, the simple
-% definition
-% \begin{verbatim}
-% \cs_new:Npn \tl_tail:n #1 { \tl_tail:w #1 \q_stop }
-% \cs_new:Npn \tl_tail:w #1#2 \q_stop
-% \end{verbatim}
-% would give the wrong result for |\tl_tail:n { a { bc } }| (the braces would
-% be stripped). Thus the only safe way to proceed is to first check that
-% there is an item to grab (\emph{i.e.}~that the argument is not blank) and
-% assuming there is to dispose of the first item. As with \cs{tl_head:n},
-% the result is protected from further expansion by \tn{unexpanded}.
-% While we could optimise the test here, this would leave some tokens
-% \enquote{banned} in the input, which we do not have with this definition.
-% \begin{macrocode}
-\exp_args:Nno \use:n { \cs_new:Npn \tl_tail:n #1 }
- {
- \exp_after:wN \__kernel_exp_not:w
- \tl_if_blank:nTF {#1}
- { { } }
- { \exp_after:wN { \use_none:n #1 } }
- }
-\cs_generate_variant:Nn \tl_tail:n { V , v , f }
-\cs_new:Npn \tl_tail:N { \exp_args:No \tl_tail:n }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[pTF]
-% {
-% \tl_if_head_eq_meaning:nN, \tl_if_head_eq_meaning:VN,
-% \tl_if_head_eq_meaning:eN
-% }
-% \begin{macro}[pTF]
-% {
-% \tl_if_head_eq_charcode:nN, \tl_if_head_eq_charcode:VN,
-% \tl_if_head_eq_charcode:eN, \tl_if_head_eq_charcode:fN
-% }
-% \begin{macro}[pTF]
-% {
-% \tl_if_head_eq_catcode:nN, \tl_if_head_eq_catcode:VN,
-% \tl_if_head_eq_catcode:eN, \tl_if_head_eq_catcode:oN
-% }
-% \begin{macro}[EXP]{\@@_head_exp_not:w}
-% \begin{macro}[EXP]{\@@_if_head_eq_empty_arg:w}
-% Accessing the first token of a token list is tricky in three cases:
-% when it has category code $1$ (begin-group token), when it is an
-% explicit space, with category code $10$ and character code $32$, or
-% when the token list is empty (obviously).
-%
-% Forgetting temporarily about this issue we would use the following
-% test in \cs{tl_if_head_eq_charcode:nN}. Here, \cs{tl_head:w} yields
-% the first token of the token list, then passed to \cs{exp_not:N}.
-% \begin{verbatim}
-% \if_charcode:w
-% \exp_after:wN \exp_not:N \tl_head:w #1 \q_nil \q_stop
-% \exp_not:N #2
-% \end{verbatim}
-% The two first special cases are detected by testing if the token
-% list starts with an \texttt{N}-type token (the extra |?| sends empty
-% token lists to the \texttt{true} branch of this test). In those
-% cases, the first token is a character, and since we only care about
-% its character code, we can use \cs{str_head:n} to access it (this
-% works even if it is a space character). An empty argument
-% results in \cs{tl_head:w} leaving two token: |^| and
-% \cs{@@_if_head_eq_empty_arg:w} which will result in the \cs{if_charcode:w}
-% test being false and remove \cs{exp_not:N} and |#2|.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \tl_if_head_eq_charcode:nN #1#2 { p , T , F , TF }
- {
- \if_charcode:w
- \tl_if_head_is_N_type:nTF { #1 ? }
- { \@@_head_exp_not:w #1 { ^ \@@_if_head_eq_empty_arg:w } \s_@@_stop }
- { \str_head:n {#1} }
- \exp_not:N #2
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-\prg_generate_conditional_variant:Nnn \tl_if_head_eq_charcode:nN
- { V , e , f } { p , TF , T , F }
-% \end{macrocode}
-% For \cs{tl_if_head_eq_catcode:nN}, again we detect special cases
-% with a \cs{tl_if_head_is_N_type:n}. Then we need to test if the
-% first token is a begin-group token or an explicit space token, and
-% produce the relevant token, either \cs{c_group_begin_token} or
-% \cs{c_space_token}. Again, for an empty argument, a hack is used,
-% removing the token given by the user and leaving two tokens in the input
-% stream which will make the \cs{if_catcode:w} test return \texttt{false}.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \tl_if_head_eq_catcode:nN #1 #2 { p , T , F , TF }
- {
- \if_catcode:w
- \tl_if_head_is_N_type:nTF { #1 ? }
- { \@@_head_exp_not:w #1 { ^ \@@_if_head_eq_empty_arg:w } \s_@@_stop }
- {
- \tl_if_head_is_group:nTF {#1}
- \c_group_begin_token
- \c_space_token
- }
- \exp_not:N #2
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-\prg_generate_conditional_variant:Nnn \tl_if_head_eq_catcode:nN
- { V , e , o } { p , TF , T , F }
-% \end{macrocode}
-% For \cs{tl_if_head_eq_meaning:nN}, again, detect special cases. In
-% the normal case, use \cs{tl_head:w}, with no \cs{exp_not:N} this
-% time, since \cs{if_meaning:w} causes no expansion. With an empty
-% argument, the test is \texttt{true}, and \cs{use_none:nnn} removes
-% |#2| and \cs{prg_return_true:} and \cs{else:} (it is safe this way here as
-% in this case \cs{prg_new_conditional:Npnn} didn't optimize these two away).
-% In the special cases, we know that the first token is a character,
-% hence \cs{if_charcode:w} and \cs{if_catcode:w} together are enough.
-% We combine them in some order, hopefully faster than the reverse.
-% Tests are not nested because the arguments may contain unmatched
-% primitive conditionals.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \tl_if_head_eq_meaning:nN #1#2 { p , T , F , TF }
- {
- \tl_if_head_is_N_type:nTF { #1 ? }
- \@@_if_head_eq_meaning_normal:nN
- \@@_if_head_eq_meaning_special:nN
- {#1} #2
- }
-\prg_generate_conditional_variant:Nnn \tl_if_head_eq_meaning:nN
- { V , e } { p , TF , T , F }
-\cs_new:Npn \@@_if_head_eq_meaning_normal:nN #1 #2
- {
- \exp_after:wN \if_meaning:w
- \@@_tl_head:w #1 { ?? \use_none:nnn } \s_@@_stop #2
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-\cs_new:Npn \@@_if_head_eq_meaning_special:nN #1 #2
- {
- \if_charcode:w \str_head:n {#1} \exp_not:N #2
- \exp_after:wN \use_ii:nn
- \else:
- \prg_return_false:
- \fi:
- \use_none:n
- {
- \if_catcode:w \exp_not:N #2
- \tl_if_head_is_group:nTF {#1}
- { \c_group_begin_token }
- { \c_space_token }
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
- }
-% \end{macrocode}
-%
-% Both \cs{tl_if_head_eq_charcode:nN} and \cs{tl_if_head_eq_catcode:nN} will
-% need to get the first token of their argument and apply \cs{exp_not:N} to
-% it. \cs{@@_head_exp_not:w} does exactly that.
-% \begin{macrocode}
-\cs_new:Npn \@@_head_exp_not:w #1 #2 \s_@@_stop
- { \exp_not:N #1 }
-% \end{macrocode}
-%
-% If the argument of \cs{tl_if_head_eq_charcode:nN} and
-% \cs{tl_if_head_eq_catcode:nN} was empty \cs{@@_if_head_eq_empty_arg:w} will
-% be left in the input stream. This macro has to remove \cs{exp_not:N} and
-% the following token from the input stream to make sure no unbalanced
-% if-construct is created and leave tokens there which make the two tests
-% return \texttt{false}.
-% \begin{macrocode}
-\cs_new:Npn \@@_if_head_eq_empty_arg:w \exp_not:N #1
- { ? }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\tl_if_head_is_N_type:n}
-% \begin{macro}[EXP]
-% {
-% \@@_if_head_is_N_type_auxi:w ,
-% \@@_if_head_is_N_type_auxii:n ,
-% }
-% A token list can be empty, can start with an explicit space
-% character (catcode 10 and charcode 32), can start with a begin-group
-% token (catcode 1), or start with an \texttt{N}-type argument. In
-% the first two cases, and when |#1~| starts with |{}~|,
-% \cs{@@_if_head_is_N_type_auxi:w} receives an empty argument hence
-% produces |f| and removes everything before the first
-% \cs{scan_stop:}. In the third case (except when |#1~| starts with
-% |{}~|), the second auxiliary removes the first copy of~|#1| that was
-% used for the space test, then expands \cs{token_to_str:N} which hits
-% the leading begin-group token, leaving a single closing brace to be
-% compared with \cs{scan_stop:}. In the last case,
-% \cs{token_to_str:N} does not change the brace balance so that only
-% \cs{scan_stop:} \cs{scan_stop:} remain, making the character code
-% test true. One cannot optimize by
-% moving one of the \cs{scan_stop:} to the beginning: if |#1| contains
-% primitive conditionals, all of its occurrences must be dealt with before
-% the \cs{if:w} tries to skip the \texttt{true} branch of the
-% conditional.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \tl_if_head_is_N_type:n #1 { p , T , F , TF }
- {
- \if:w
- \if_false: { \fi: \@@_if_head_is_N_type_auxi:w #1 ~ }
- { \exp_after:wN { \token_to_str:N #1 } }
- \scan_stop: \scan_stop:
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-\exp_args:Nno \use:n { \cs_new:Npn \@@_if_head_is_N_type_auxi:w #1 ~ }
- {
- \tl_if_empty:nTF {#1}
- { f \exp_after:wN \use_none:nn }
- { \exp_after:wN \@@_if_head_is_N_type_auxii:n }
- \exp_after:wN { \if_false: } \fi:
- }
-\cs_new:Npn \@@_if_head_is_N_type_auxii:n #1
- { \exp_after:wN \use_none:n \exp_after:wN }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP,pTF]{\tl_if_head_is_group:n}
-% \begin{macro}[EXP]{\@@_if_head_is_group_fi_false:w}
-% Pass the first token of |#1| through \cs{token_to_str:N}, then check
-% for the brace balance. The extra \texttt{?} caters for an empty
-% argument. This could be made faster, but we need all brace tricks
-% to happen in one step of expansion, keeping the token list brace
-% balanced at all times.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \tl_if_head_is_group:n #1 { p , T , F , TF }
- {
- \if:w
- \exp_after:wN \use_none:n
- \exp_after:wN { \exp_after:wN { \token_to_str:N #1 ? } }
- \scan_stop: \scan_stop:
- \@@_if_head_is_group_fi_false:w
- \fi:
- \if_true:
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-\cs_new:Npn \@@_if_head_is_group_fi_false:w \fi: \if_true: { \fi: \if_false: }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP,pTF]{\tl_if_head_is_space:n}
-% \begin{macro}[EXP]{\@@_if_head_is_space:w}
-% The auxiliary's argument is all that is before the first explicit
-% space in |\prg_do_nothing:#1?~|. If that is a single~|\prg_do_nothing:| the
-% test yields \texttt{true}. Otherwise, that is more than one token, and the
-% test yields \texttt{false}. The work is done within braces (with an
-% |\if_false: { \fi: ... }| construction) both to hide potential
-% alignment tab characters from \TeX{} in a table, and to allow for
-% removing what remains of the token list after its first space. The use of
-% \cs{if:w} ensures that the result of a single step of expansion directly
-% yields a balanced token list (no trailing closing brace).
-% \begin{macrocode}
-\prg_new_conditional:Npnn \tl_if_head_is_space:n #1 { p , T , F , TF }
- {
- \if:w
- \if_false: { \fi: \@@_if_head_is_space:w \prg_do_nothing: #1 ? ~ }
- \scan_stop: \scan_stop:
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-\exp_args:Nno \use:n { \cs_new:Npn \@@_if_head_is_space:w #1 ~ }
- {
- \@@_if_empty_if:o {#1} \else: f \fi:
- \exp_after:wN \use_none:n \exp_after:wN { \if_false: } \fi:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Token by token changes}
-%
-% \begin{variable}{\s_@@_act_stop}
-% The \cs[no-index]{@@_act_\ldots{}} functions may be applied to any token list.
-% Hence, we use a private quark, to allow any token, even quarks,
-% in the token list.
-% Only \cs{s_@@_act_stop} may not appear in the token lists manipulated by
-% \cs{@@_act:NNNn} functions.
-% \begin{macrocode}
-\scan_new:N \s_@@_act_stop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[EXP]{\@@_act:NNNn}
-% \begin{macro}[EXP]{\@@_act_output:n, \@@_act_reverse_output:n}
-% \begin{macro}[EXP]{\@@_act_loop:w}
-% \begin{macro}[EXP]{\@@_act_normal:NwNNN}
-% \begin{macro}[EXP]{\@@_act_group:nwNNN}
-% \begin{macro}[EXP]{\@@_act_space:wwNNN}
-% \begin{macro}[EXP]{\@@_act_end:wn}
-% \begin{macro}[EXP]
-% {
-% \@@_act_if_head_is_space:nTF,
-% \@@_act_if_head_is_space:w,
-% \@@_act_if_head_is_space_true:w
-% }
-% \begin{macro}[EXP]{\@@_use_none_delimit_by_q_act_stop:w}
-% To help control the expansion, \cs{@@_act:NNNn} should always
-% be preceeded by \cs{exp:w} and ends by producing \cs{exp_end:}
-% once the result has been obtained. This way no internal token of it can be
-% accidentally end up in the input stream.
-% Because \cs{s_@@_act_stop} can't appear without braces around it in the
-% argument~|#1| of \cs{@@_act_loop:w}, we can use this marker to set up a fast
-% test for leading spaces.
-% \begin{macrocode}
-\cs_set_protected:Npn \@@_tmp:w #1
- {
- \cs_new:Npn \@@_act_if_head_is_space:nTF ##1
- {
- \@@_act_if_head_is_space:w
- \s_@@_act_stop ##1 \s_@@_act_stop \@@_act_if_head_is_space_true:w
- \s_@@_act_stop #1 \s_@@_act_stop \use_ii:nn
- }
- \cs_new:Npn \@@_act_if_head_is_space:w
- ##1 \s_@@_act_stop #1 ##2 \s_@@_act_stop
- {}
- \cs_new:Npn \@@_act_if_head_is_space_true:w
- \s_@@_act_stop #1 \s_@@_act_stop \use_ii:nn ##1 ##2
- {##1}
- }
-\@@_tmp:w { ~ }
-% \end{macrocode}
-% (We expand the definition \cs{@@_act_if_head_is_space:nTF} when
-% setting up \cs{@@_act_loop:w}, so we can then undefine the auxiliary.)
-% In the loop, we check how the token list begins and act
-% accordingly. In the \enquote{group} case, we may have
-% reached \cs{s_@@_act_stop}, the end of the list. Then
-% leave \cs{exp_end:} and the result in the input stream,
-% to terminate the expansion of \cs{exp:w}.
-% Otherwise, apply the relevant function to the
-% \enquote{arguments}, |#3|
-% and to the head of the token list. Then repeat the loop.
-% The scheme is the same if the token list starts with an |N|-type
-% or with a space, making sure that
-% \cs{@@_act_space:wwNNN} gobbles the space.
-% \begin{macrocode}
-\exp_args:Nne \use:n { \cs_new:Npn \@@_act_loop:w #1 \s_@@_act_stop }
- {
- \exp_not:o { \@@_act_if_head_is_space:nTF {#1} }
- \exp_not:N \@@_act_space:wwNNN
- {
- \exp_not:o { \tl_if_head_is_group:nTF {#1} }
- \exp_not:N \@@_act_group:nwNNN
- \exp_not:N \@@_act_normal:NwNNN
- }
- \exp_not:n {#1} \s_@@_act_stop
- }
-\cs_undefine:N \@@_act_if_head_is_space:nTF
-\cs_new:Npn \@@_act_normal:NwNNN #1 #2 \s_@@_act_stop #3
- {
- #3 #1
- \@@_act_loop:w #2 \s_@@_act_stop
- #3
- }
-\cs_new:Npn \@@_use_none_delimit_by_s_act_stop:w #1 \s_@@_act_stop { }
-\cs_new:Npn \@@_act_end:wn #1 \@@_act_result:n #2
- { \group_align_safe_end: \exp_end: #2 }
-\cs_new:Npn \@@_act_group:nwNNN #1 #2 \s_@@_act_stop #3#4#5
- {
- \@@_use_none_delimit_by_s_act_stop:w #1 \@@_act_end:wn \s_@@_act_stop
- #5 {#1}
- \@@_act_loop:w #2 \s_@@_act_stop
- #3 #4 #5
- }
-\exp_last_unbraced:NNo
- \cs_new:Npn \@@_act_space:wwNNN \c_space_tl #1 \s_@@_act_stop #2#3
- {
- #3
- \@@_act_loop:w #1 \s_@@_act_stop
- #2 #3
- }
-% \end{macrocode}
-% \cs{@@_act:NNNn} loops over tokens, groups, and spaces in |#4|.
-% |{\s_@@_act_stop}| serves as the end of token list marker, the |?| after it
-% avoids losing outer braces. The result is stored as an argument for the
-% dummy function \cs{@@_act_result:n}.
-% \begin{macrocode}
-\cs_new:Npn \@@_act:NNNn #1#2#3#4
- {
- \group_align_safe_begin:
- \@@_act_loop:w #4 { \s_@@_act_stop } ? \s_@@_act_stop
- #1 #3 #2
- \@@_act_result:n { }
- }
-% \end{macrocode}
-% Typically, the output is done to the right of what was already output,
-% using \cs{@@_act_output:n}, but for the \cs{@@_act_reverse} functions,
-% it should be done to the left.
-% \begin{macrocode}
-\cs_new:Npn \@@_act_output:n #1 #2 \@@_act_result:n #3
- { #2 \@@_act_result:n { #3 #1 } }
-\cs_new:Npn \@@_act_reverse_output:n #1 #2 \@@_act_result:n #3
- { #2 \@@_act_result:n { #1 #3 } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]
-% {\tl_reverse:n, \tl_reverse:o, \tl_reverse:V, \tl_reverse:f, \tl_reverse:e}
-% \begin{macro}[EXP]{\@@_reverse_normal:nN}
-% \begin{macro}[EXP]{\@@_reverse_group_preserve:nn}
-% \begin{macro}[EXP]{\@@_reverse_space:n}
-% The goal here is to reverse without losing spaces nor braces.
-% This is done using the general internal function \cs{@@_act:NNNn}.
-% Spaces and \enquote{normal} tokens are output on the left of the current
-% output. Grouped tokens are output to the left but without any reversal
-% within the group.
-% \begin{macrocode}
-\cs_new:Npn \tl_reverse:n #1
- {
- \__kernel_exp_not:w \exp_after:wN
- {
- \exp:w
- \@@_act:NNNn
- \@@_reverse_normal:N
- \@@_reverse_group_preserve:n
- \@@_reverse_space:
- {#1}
- }
- }
-\cs_generate_variant:Nn \tl_reverse:n { o , V , f , e }
-\cs_new:Npn \@@_reverse_normal:N
- { \@@_act_reverse_output:n }
-\cs_new:Npn \@@_reverse_group_preserve:n #1
- { \@@_act_reverse_output:n { {#1} } }
-\cs_new:Npn \@@_reverse_space:
- { \@@_act_reverse_output:n { ~ } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\tl_reverse:N, \tl_reverse:c, \tl_greverse:N, \tl_greverse:c}
-% This reverses the list, leaving \cs{exp_stop_f:} in front,
-% which stops the \texttt{f}-expansion.
-% \begin{macrocode}
-\cs_new_protected:Npn \tl_reverse:N #1
- { \__kernel_tl_set:Nx #1 { \exp_args:No \tl_reverse:n { #1 } } }
-\cs_new_protected:Npn \tl_greverse:N #1
- { \__kernel_tl_gset:Nx #1 { \exp_args:No \tl_reverse:n { #1 } } }
-\cs_generate_variant:Nn \tl_reverse:N { c }
-\cs_generate_variant:Nn \tl_greverse:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Using a single item}
-%
-% \begin{macro}{\tl_item:nn, \tl_item:Nn, \tl_item:cn}
-% \begin{macro}{\@@_item_aux:nn, \@@_item:nn}
-% The idea here is to find the offset of the item from the left, then use
-% a loop to grab the correct item. If the resulting offset is too large,
-% then \cs{@@_if_recursion_tail_break:nN} terminates the loop, and returns
-% nothing at all.
-% \begin{macrocode}
-\cs_new:Npn \tl_item:nn #1#2
- {
- \exp_args:Nf \@@_item:nn
- { \exp_args:Nf \@@_item_aux:nn { \int_eval:n {#2} } {#1} }
- #1
- \q_@@_recursion_tail
- \prg_break_point:
- }
-\cs_new:Npn \@@_item_aux:nn #1#2
- {
- \int_compare:nNnTF {#1} < 0
- { \int_eval:n { \tl_count:n {#2} + 1 + #1 } }
- {#1}
- }
-\cs_new:Npn \@@_item:nn #1#2
- {
- \@@_if_recursion_tail_break:nN {#2} \prg_break:
- \int_compare:nNnTF {#1} = 1
- { \prg_break:n { \exp_not:n {#2} } }
- { \exp_args:Nf \@@_item:nn { \int_eval:n { #1 - 1 } } }
- }
-\cs_new:Npn \tl_item:Nn { \exp_args:No \tl_item:nn }
-\cs_generate_variant:Nn \tl_item:Nn { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\tl_rand_item:n, \tl_rand_item:N, \tl_rand_item:c}
-% Importantly \cs{tl_item:nn} only evaluates its argument once.
-% \begin{macrocode}
-\cs_new:Npn \tl_rand_item:n #1
- {
- \tl_if_blank:nF {#1}
- { \tl_item:nn {#1} { \int_rand:nn { 1 } { \tl_count:n {#1} } } }
- }
-\cs_new:Npn \tl_rand_item:N { \exp_args:No \tl_rand_item:n }
-\cs_generate_variant:Nn \tl_rand_item:N { c }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\tl_range:Nnn, \tl_range:cnn, \tl_range:nnn}
-% \begin{macro}
-% {
-% \@@_range:Nnnn, \@@_range:nnnNn, \@@_range:nnNn, \@@_range_skip:w,
-% \@@_range:w, \@@_range_skip_spaces:n, \@@_range_collect:nn,
-% \@@_range_collect:ff, \@@_range_collect_space:nw,
-% \@@_range_collect_N:nN, \@@_range_collect_group:nN,
-% }
-% To avoid checking for the end of the token list at every step, start
-% by counting the number $l$ of items and \enquote{normalizing} the
-% bounds, namely clamping them to the interval $[0,l]$ and dealing
-% with negative indices. More precisely, \cs{@@_range_items:nnNn}
-% receives the number of items to skip at the beginning of the token
-% list, the index of the last item to keep, a function which is either
-% \cs{@@_range:w} or the token list itself. If nothing should be kept,
-% leave |{}|: this stops the \texttt{f}-expansion of \cs{tl_head:f} and that
-% function produces an empty result. Otherwise, repeatedly call
-% \cs{@@_range_skip:w} to delete |#1| items from the input stream (the
-% extra brace group avoids an off-by-one shift). For the braced
-% version \cs{@@_range_braced:w} sets up
-% \cs{@@_range_collect_braced:w} which stores items one by one in an
-% argument after the semicolon. Depending on the first token of the tail,
-% either just move it (if it is a space) or also decrement the number of
-% items left to find. Eventually, the result is a brace group followed by
-% the rest of the token list, and \cs{tl_head:f} cleans up and gives the
-% result in \cs{exp_not:n}.
-% \begin{macrocode}
-\cs_new:Npn \tl_range:Nnn { \exp_args:No \tl_range:nnn }
-\cs_generate_variant:Nn \tl_range:Nnn { c }
-\cs_new:Npn \tl_range:nnn { \@@_range:Nnnn \@@_range:w }
-\cs_new:Npn \@@_range:Nnnn #1#2#3#4
- {
- \tl_head:f
- {
- \exp_args:Nf \@@_range:nnnNn
- { \tl_count:n {#2} } {#3} {#4} #1 {#2}
- }
- }
-\cs_new:Npn \@@_range:nnnNn #1#2#3
- {
- \exp_args:Nff \@@_range:nnNn
- {
- \exp_args:Nf \@@_range_normalize:nn
- { \int_eval:n { #2 - 1 } } {#1}
- }
- {
- \exp_args:Nf \@@_range_normalize:nn
- { \int_eval:n {#3} } {#1}
- }
- }
-\cs_new:Npn \@@_range:nnNn #1#2#3#4
- {
- \if_int_compare:w #2 > #1 \exp_stop_f: \else:
- \exp_after:wN { \exp_after:wN }
- \fi:
- \exp_after:wN #3
- \int_value:w \int_eval:n { #2 - #1 } \exp_after:wN ;
- \exp_after:wN { \exp:w \@@_range_skip:w #1 ; { } #4 }
- }
-\cs_new:Npn \@@_range_skip:w #1 ; #2
- {
- \if_int_compare:w #1 > \c_zero_int
- \exp_after:wN \@@_range_skip:w
- \int_value:w \int_eval:n { #1 - 1 } \exp_after:wN ;
- \else:
- \exp_after:wN \exp_end:
- \fi:
- }
-\cs_new:Npn \@@_range:w #1 ; #2
- {
- \exp_args:Nf \@@_range_collect:nn
- { \@@_range_skip_spaces:n {#2} } {#1}
- }
-\cs_new:Npn \@@_range_skip_spaces:n #1
- {
- \tl_if_head_is_space:nTF {#1}
- { \exp_args:Nf \@@_range_skip_spaces:n {#1} }
- { { } #1 }
- }
-\cs_new:Npn \@@_range_collect:nn #1#2
- {
- \int_compare:nNnTF {#2} = 0
- {#1}
- {
- \exp_args:No \tl_if_head_is_space:nTF { \use_none:n #1 }
- {
- \exp_args:Nf \@@_range_collect:nn
- { \@@_range_collect_space:nw #1 }
- {#2}
- }
- {
- \@@_range_collect:ff
- {
- \exp_args:No \tl_if_head_is_N_type:nTF { \use_none:n #1 }
- { \@@_range_collect_N:nN }
- { \@@_range_collect_group:nn }
- #1
- }
- { \int_eval:n { #2 - 1 } }
- }
- }
- }
-\cs_new:Npn \@@_range_collect_space:nw #1 ~ { { #1 ~ } }
-\cs_new:Npn \@@_range_collect_N:nN #1#2 { { #1 #2 } }
-\cs_new:Npn \@@_range_collect_group:nn #1#2 { { #1 {#2} } }
-\cs_generate_variant:Nn \@@_range_collect:nn { ff }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_range_normalize:nn}
-% This function converts an \meta{index} argument into an explicit
-% position in the token list (a result of $0$ denoting \enquote{out of
-% bounds}). Expects two explicit integer arguments: the \meta{index}
-% |#1| and the string count~|#2|. If |#1| is negative, replace it by
-% $|#1| + |#2| + 1$, then limit to the range $[0, |#2|]$.
-% \begin{macrocode}
-\cs_new:Npn \@@_range_normalize:nn #1#2
- {
- \int_eval:n
- {
- \if_int_compare:w #1 < \c_zero_int
- \if_int_compare:w #1 < -#2 \exp_stop_f:
- 0
- \else:
- #1 + #2 + 1
- \fi:
- \else:
- \if_int_compare:w #1 < #2 \exp_stop_f:
- #1
- \else:
- #2
- \fi:
- \fi:
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Viewing token lists}
-%
-% \begin{macro}{\tl_show:N, \tl_show:c, \tl_log:N, \tl_log:c, \@@_show:NN}
-% Showing token list variables is done after checking that the
-% variable is defined (see \cs{__kernel_register_show:N}).
-% \begin{macrocode}
-\cs_new_protected:Npn \tl_show:N { \@@_show:NN \tl_show:n }
-\cs_generate_variant:Nn \tl_show:N { c }
-\cs_new_protected:Npn \tl_log:N { \@@_show:NN \tl_log:n }
-\cs_generate_variant:Nn \tl_log:N { c }
-\cs_new_protected:Npn \@@_show:NN #1#2
- {
- \__kernel_chk_defined:NT #2
- {
- \exp_args:Nf \tl_if_empty:nTF
- { \cs_prefix_spec:N #2 \cs_parameter_spec:N #2 }
- {
- \exp_args:Ne #1
- { \token_to_str:N #2 = \__kernel_exp_not:w \exp_after:wN {#2} }
- }
- {
- \msg_error:nneee { kernel } { bad-type }
- { \token_to_str:N #2 } { \token_to_meaning:N #2 } { tl }
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\tl_show:n, \tl_show:e, \tl_show:x, \@@_show:n}
-% \begin{macro}[EXP]{\@@_show:w}
-% Many |show| functions are based on \cs{tl_show:n}.
-% The argument of \cs{tl_show:n} is line-wrapped using
-% \cs{iow_wrap:nnnN} but with a leading |>~| and trailing period, both
-% removed before passing the wrapped text to the \tn{showtokens}
-% primitive. This primitive shows the result with a leading |>~| and
-% trailing period.
-%
-% The token list \cs{l_@@_internal_a_tl} containing the result
-% of all these manipulations is displayed to the terminal using
-% \cs{tex_showtokens:D} and an odd \cs{exp_after:wN} which expand the
-% closing brace to improve the output slightly. The calls to
-% \cs{__kernel_iow_with:Nnn} ensure that the \tn{newlinechar} is set to~$10$
-% so that the \cs{iow_newline:} inserted by the line-wrapping code
-% are correctly recognized by \TeX{}, and that \tn{errorcontextlines}
-% is $-1$ to avoid printing irrelevant context.
-% \begin{macrocode}
-\cs_new_protected:Npn \tl_show:n #1
- { \iow_wrap:nnnN { >~ \tl_to_str:n {#1} . } { } { } \@@_show:n }
-\cs_generate_variant:Nn \tl_show:n { e , x }
-\cs_new_protected:Npn \@@_show:n #1
- {
- \tl_set:Nf \l_@@_internal_a_tl { \@@_show:w #1 \s_@@_stop }
- \__kernel_iow_with:Nnn \tex_newlinechar:D { 10 }
- {
- \__kernel_iow_with:Nnn \tex_errorcontextlines:D { -1 }
- {
- \tex_showtokens:D \exp_after:wN \exp_after:wN \exp_after:wN
- { \exp_after:wN \l_@@_internal_a_tl }
- }
- }
- }
-\cs_new:Npn \@@_show:w #1 > #2 . \s_@@_stop {#2}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\tl_log:n, \tl_log:e, \tl_log:x}
-% Logging is much easier, simply line-wrap. The |>~| and trailing
-% period is there to match the output of \cs{tl_show:n}.
-% \begin{macrocode}
-\cs_new_protected:Npn \tl_log:n #1
- { \iow_wrap:nnnN { > ~ \tl_to_str:n {#1} . } { } { } \iow_log:n }
-\cs_generate_variant:Nn \tl_log:n { e , x }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\__kernel_chk_tl_type:NnnT}
-% Helper for checking that |#1| has the correct internal structure to
-% be of a certain type. Make sure that it is defined and that it is a
-% token list, namely a macro with no \tn{long} nor \tn{protected}
-% prefix. Then compare |#1| to an attempt at reconstructing a valid
-% structure of the given type using |#2| (see implementation of
-% \cs{seq_show:N} for instance). If that is successful run the
-% requested code~|#4|.
-% \begin{macrocode}
-\cs_new_protected:Npn \__kernel_chk_tl_type:NnnT #1#2#3#4
- {
- \__kernel_chk_defined:NT #1
- {
- \exp_args:Nf \tl_if_empty:nTF
- { \cs_prefix_spec:N #1 \cs_parameter_spec:N #1 }
- {
- \tl_set:Ne \l_@@_internal_a_tl {#3}
- \tl_if_eq:NNTF #1 \l_@@_internal_a_tl
- {#4}
- {
- \msg_error:nneeee { kernel } { bad-type }
- { \token_to_str:N #1 } { \tl_to_str:N #1 }
- {#2} { \tl_to_str:N \l_@@_internal_a_tl }
- }
- }
- {
- \msg_error:nneee { kernel } { bad-type }
- { \token_to_str:N #1 } { \token_to_meaning:N #1 } {#2}
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Internal scan marks}
-%
-% \begin{variable}{\s_@@_nil,\s_@@_mark,\s_@@_stop}
-% Internal scan marks. These are defined here at the end because the
-% code for \cs{scan_new:N} depends on some \pkg{l3tl} functions.
-% \begin{macrocode}
-\scan_new:N \s_@@_nil
-\scan_new:N \s_@@_mark
-\scan_new:N \s_@@_stop
-% \end{macrocode}
-% \end{variable}
-%
-% \subsection{Scratch token lists}
-%
-% \begin{variable}{\g_tmpa_tl, \g_tmpb_tl}
-% Global temporary token list variables.
-% They are supposed to be set and used immediately,
-% with no delay between the definition and the use because you
-% can't count on other macros not to redefine them from under you.
-% \begin{macrocode}
-\tl_new:N \g_tmpa_tl
-\tl_new:N \g_tmpb_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_tmpa_tl, \l_tmpb_tl}
-% These are local temporary token list variables. Be sure not to assume
-% that the value you put into them will survive for
-% long---see discussion above.
-% \begin{macrocode}
-\tl_new:N \l_tmpa_tl
-\tl_new:N \l_tmpb_tl
-% \end{macrocode}
-% \end{variable}
-%
-% We finally clean up a temporary control sequence that we have used at
-% various points to set up some definitions.
-% \begin{macrocode}
-\cs_undefine:N \@@_tmp:w
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3token.dtx b/macros/latex/contrib/l3kernel/l3token.dtx
deleted file mode 100644
index cd538ee6d0..0000000000
--- a/macros/latex/contrib/l3kernel/l3token.dtx
+++ /dev/null
@@ -1,2936 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3token.dtx
-%
-% Copyright (C) 2005-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3token} module\\ Token manipulation^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% This module deals with tokens. Now this is perhaps not the most
-% precise description so let's try with a better description: When
-% programming in \TeX{}, it is often desirable to know just what a
-% certain token is: is it a control sequence or something
-% else. Similarly one often needs to know if a control sequence is
-% expandable or not, a macro or a primitive, how many arguments it
-% takes etc. Another thing of great importance (especially when it
-% comes to document commands) is looking ahead in the token stream to
-% see if a certain character is present and maybe even remove it or
-% disregard other tokens while scanning. This module provides
-% functions for both and as such has two primary function
-% categories: |\token_| for anything that deals with tokens and
-% |\peek_| for looking ahead in the token stream.
-%
-% Most functions we describe here can be used on control sequences,
-% as those are tokens as well.
-%
-% It is important to distinguish two aspects of a token: its
-% \enquote{shape} (for lack of a better word), which affects the
-% matching of delimited arguments and the comparison of token lists
-% containing this token, and its \enquote{meaning}, which affects
-% whether the token expands or what operation it performs. One can have
-% tokens of different shapes with the same meaning, but not the
-% converse.
-%
-% For instance, \cs{if:w}, \cs{if_charcode:w}, and \cs[no-index]{tex_if:D} are
-% three names for the same internal operation of \TeX{}, namely the
-% primitive testing the next two characters for equality of their
-% character code. They have the same meaning hence behave identically
-% in many situations. However, \TeX{} distinguishes them when searching
-% for a delimited argument. Namely, the example function
-% |\show_until_if:w| defined below takes everything until \cs{if:w}
-% as an argument, despite the presence of other copies of \cs{if:w}
-% under different names.
-% \begin{verbatim}
-% \cs_new:Npn \show_until_if:w #1 \if:w { \tl_show:n {#1} }
-% \show_until_if:w \tex_if:D \if_charcode:w \if:w
-% \end{verbatim}
-% A list of all possible shapes and a list of all possible meanings are
-% given in section~\ref{sec:l3token:all-tokens}.
-%
-% \section{Creating character tokens}
-%
-% \begin{function}[updated = 2015-11-12]
-% {
-% \char_set_active_eq:NN, \char_set_active_eq:Nc,
-% \char_gset_active_eq:NN, \char_gset_active_eq:Nc
-% }
-% \begin{syntax}
-% \cs{char_set_active_eq:NN} \meta{char} \meta{function}
-% \end{syntax}
-% Sets the behaviour of the \meta{char} in situations where it is
-% active (category code $13$) to be equivalent to that of the
-% definition of the \meta{function} at the time \cs{char_set_active_eq:NN}
-% is used. The category code of the \meta{char} is
-% \emph{unchanged} by this process. The \meta{function} may itself
-% be an active character.
-% \end{function}
-%
-% \begin{function}[added = 2015-11-12]
-% {
-% \char_set_active_eq:nN, \char_set_active_eq:nc,
-% \char_gset_active_eq:nN, \char_gset_active_eq:nc
-% }
-% \begin{syntax}
-% \cs{char_set_active_eq:nN} \Arg{integer expression} \meta{function}
-% \end{syntax}
-% Sets the behaviour of the \meta{char} which has character
-% code as given by the \meta{integer expression} in situations
-% where it is active (category code $13$) to be equivalent to that of the
-% \meta{function} at the time \cs{char_set_active_eq:nN}
-% is used. The category code of the \meta{char} is
-% \emph{unchanged} by this process. The \meta{function} may itself
-% be an active character.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2015-09-09, updated = 2019-01-16]
-% {\char_generate:nn}
-% \begin{syntax}
-% \cs{char_generate:nn} \Arg{charcode} \Arg{catcode}
-% \end{syntax}
-% Generates a character token of the given \meta{charcode} and \meta{catcode}
-% (both of which may be integer expressions). The \meta{catcode} may be
-% one of
-% \begin{itemize}
-% \item $1$ (begin group)
-% \item $2$ (end group)
-% \item $3$ (math toggle)
-% \item $4$ (alignment)
-% \item $6$ (parameter)
-% \item $7$ (math superscript)
-% \item $8$ (math subscript)
-% \item $10$ (space)
-% \item $11$ (letter)
-% \item $12$ (other)
-% \item $13$ (active)
-% \end{itemize}
-% and other values raise an error. The \meta{charcode} may be any one valid
-% for the engine in use, except that for \meta{catcode} $10$, \meta{charcode}
-% $0$ is not allowed.
-% Active characters cannot be generated in older versions of \XeTeX{}.
-% Another way to build token lists with unusual category codes is
-% \cs{regex_replace:nnN} |{.*}| \Arg{replacement} \meta{tl~var}.
-% \begin{texnote}
-% Exactly two expansions are needed to produce the character.
-% \end{texnote}
-% \end{function}
-%
-% \begin{variable}[added = 2017-08-07]{\c_catcode_active_space_tl}
-% Token list containing one character with category code $13$,
-% (\enquote{active}), and character code $32$ (space).
-% \end{variable}
-%
-% \begin{variable}[added = 2011-09-05]{\c_catcode_other_space_tl}
-% Token list containing one character with category code $12$,
-% (\enquote{other}), and character code $32$ (space).
-% \end{variable}
-%
-% \section{Manipulating and interrogating character tokens}
-%
-% \begin{function}[updated = 2015-11-11]
-% {
-% \char_set_catcode_escape:N ,
-% \char_set_catcode_group_begin:N ,
-% \char_set_catcode_group_end:N ,
-% \char_set_catcode_math_toggle:N ,
-% \char_set_catcode_alignment:N ,
-% \char_set_catcode_end_line:N ,
-% \char_set_catcode_parameter:N ,
-% \char_set_catcode_math_superscript:N ,
-% \char_set_catcode_math_subscript:N ,
-% \char_set_catcode_ignore:N ,
-% \char_set_catcode_space:N ,
-% \char_set_catcode_letter:N ,
-% \char_set_catcode_other:N ,
-% \char_set_catcode_active:N ,
-% \char_set_catcode_comment:N ,
-% \char_set_catcode_invalid:N
-% }
-% \begin{syntax}
-% \cs{char_set_catcode_letter:N} \meta{character}
-% \end{syntax}
-% Sets the category code of the \meta{character} to that indicated in
-% the function name. Depending on the current category code of the
-% \meta{token} the escape token may also be needed:
-% \begin{verbatim}
-% \char_set_catcode_other:N \%
-% \end{verbatim}
-% The assignment is local.
-% \end{function}
-%
-% \begin{function}[updated = 2015-11-11]
-% {
-% \char_set_catcode_escape:n ,
-% \char_set_catcode_group_begin:n ,
-% \char_set_catcode_group_end:n ,
-% \char_set_catcode_math_toggle:n ,
-% \char_set_catcode_alignment:n ,
-% \char_set_catcode_end_line:n ,
-% \char_set_catcode_parameter:n ,
-% \char_set_catcode_math_superscript:n ,
-% \char_set_catcode_math_subscript:n ,
-% \char_set_catcode_ignore:n ,
-% \char_set_catcode_space:n ,
-% \char_set_catcode_letter:n ,
-% \char_set_catcode_other:n ,
-% \char_set_catcode_active:n ,
-% \char_set_catcode_comment:n ,
-% \char_set_catcode_invalid:n
-% }
-% \begin{syntax}
-% \cs{char_set_catcode_letter:n} \Arg{integer expression}
-% \end{syntax}
-% Sets the category code of the \meta{character} which has character
-% code as given by the \meta{integer expression}. This version can be
-% used to set up characters which cannot otherwise be given
-% (\emph{cf.}~the \texttt{N}-type variants). The assignment is local.
-% \end{function}
-%
-% \begin{function}[updated = 2015-11-11]{\char_set_catcode:nn}
-% \begin{syntax}
-% \cs{char_set_catcode:nn} \Arg{int expr_1} \Arg{int expr_2}
-% \end{syntax}
-% These functions set the category code of the \meta{character} which
-% has character code as given by the \meta{integer expression}.
-% The first \meta{integer expression}
-% is the character code and the second is the category code to apply.
-% The setting applies within the current \TeX{} group. In general, the
-% symbolic functions \cs[no-index]{char_set_catcode_\meta{type}} should be preferred,
-% but there are cases where these lower-level functions may be useful.
-% \end{function}
-%
-% \begin{function}[EXP]{\char_value_catcode:n}
-% \begin{syntax}
-% \cs{char_value_catcode:n} \Arg{integer expression}
-% \end{syntax}
-% Expands to the current category code of the \meta{character} with
-% character code given by the
-% \meta{integer expression}.
-% \end{function}
-%
-% \begin{function}{\char_show_value_catcode:n}
-% \begin{syntax}
-% \cs{char_show_value_catcode:n} \Arg{integer expression}
-% \end{syntax}
-% Displays the current category code of the \meta{character} with
-% character code given by the \meta{integer expression} on the
-% terminal.
-% \end{function}
-%
-% \begin{function}[updated = 2015-08-06]{\char_set_lccode:nn}
-% \begin{syntax}
-% \cs{char_set_lccode:nn} \Arg{int expr_1} \Arg{int expr_2}
-% \end{syntax}
-% Sets up the behaviour of the \meta{character} when
-% found inside \cs{text_lowercase:n}, such that \meta{character_1}
-% will be converted into \meta{character_2}. The two \meta{characters}
-% may be specified using an \meta{integer expression} for the character code
-% concerned. This may include the \TeX{} |`|\meta{character}
-% method for converting a single character into its character
-% code:
-% \begin{verbatim}
-% \char_set_lccode:nn { `\A } { `\a } % Standard behaviour
-% \char_set_lccode:nn { `\A } { `\A + 32 }
-% \char_set_lccode:nn { 50 } { 60 }
-% \end{verbatim}
-% The setting applies within the current \TeX{} group.
-% \end{function}
-%
-% \begin{function}[EXP]{\char_value_lccode:n}
-% \begin{syntax}
-% \cs{char_value_lccode:n} \Arg{integer expression}
-% \end{syntax}
-% Expands to the current lower case code of the \meta{character} with
-% character code given by the
-% \meta{integer expression}.
-% \end{function}
-%
-% \begin{function}{\char_show_value_lccode:n}
-% \begin{syntax}
-% \cs{char_show_value_lccode:n} \Arg{integer expression}
-% \end{syntax}
-% Displays the current lower case code of the \meta{character} with
-% character code given by the \meta{integer expression} on the
-% terminal.
-% \end{function}
-%
-% \begin{function}[updated = 2015-08-06]{\char_set_uccode:nn}
-% \begin{syntax}
-% \cs{char_set_uccode:nn} \Arg{int expr_1} \Arg{int expr_2}
-% \end{syntax}
-% Sets up the behaviour of the \meta{character} when
-% found inside \cs{text_uppercase:n}, such that \meta{character_1}
-% will be converted into \meta{character_2}. The two \meta{characters}
-% may be specified using an \meta{integer expression} for the character code
-% concerned. This may include the \TeX{} |`|\meta{character}
-% method for converting a single character into its character
-% code:
-% \begin{verbatim}
-% \char_set_uccode:nn { `\a } { `\A } % Standard behaviour
-% \char_set_uccode:nn { `\A } { `\A - 32 }
-% \char_set_uccode:nn { 60 } { 50 }
-% \end{verbatim}
-% The setting applies within the current \TeX{} group.
-% \end{function}
-%
-% \begin{function}[EXP]{\char_value_uccode:n}
-% \begin{syntax}
-% \cs{char_value_uccode:n} \Arg{integer expression}
-% \end{syntax}
-% Expands to the current upper case code of the \meta{character} with
-% character code given by the
-% \meta{integer expression}.
-% \end{function}
-%
-% \begin{function}{\char_show_value_uccode:n}
-% \begin{syntax}
-% \cs{char_show_value_uccode:n} \Arg{integer expression}
-% \end{syntax}
-% Displays the current upper case code of the \meta{character} with
-% character code given by the \meta{integer expression} on the
-% terminal.
-% \end{function}
-%
-% \begin{function}[updated = 2015-08-06]{\char_set_mathcode:nn}
-% \begin{syntax}
-% \cs{char_set_mathcode:nn} \Arg{int expr_1} \Arg{int expr_2}
-% \end{syntax}
-% This function sets up the math code of \meta{character}.
-% The \meta{character} is specified as
-% an \meta{integer expression} which will be used as the character
-% code of the relevant character. The setting applies within the
-% current \TeX{} group.
-% \end{function}
-%
-% \begin{function}[EXP]{\char_value_mathcode:n}
-% \begin{syntax}
-% \cs{char_value_mathcode:n} \Arg{integer expression}
-% \end{syntax}
-% Expands to the current math code of the \meta{character} with
-% character code given by the
-% \meta{integer expression}.
-% \end{function}
-%
-% \begin{function}{\char_show_value_mathcode:n}
-% \begin{syntax}
-% \cs{char_show_value_mathcode:n} \Arg{integer expression}
-% \end{syntax}
-% Displays the current math code of the \meta{character} with
-% character code given by the \meta{integer expression} on the
-% terminal.
-% \end{function}
-%
-% \begin{function}[updated = 2015-08-06]{\char_set_sfcode:nn}
-% \begin{syntax}
-% \cs{char_set_sfcode:nn} \Arg{int expr_1} \Arg{int expr_2}
-% \end{syntax}
-% This function sets up the space factor for the \meta{character}.
-% The \meta{character} is specified as
-% an \meta{integer expression} which will be used as the character
-% code of the relevant character. The setting applies within the
-% current \TeX{} group.
-% \end{function}
-%
-% \begin{function}[EXP]{\char_value_sfcode:n}
-% \begin{syntax}
-% \cs{char_value_sfcode:n} \Arg{integer expression}
-% \end{syntax}
-% Expands to the current space factor for the \meta{character} with
-% character code given by the
-% \meta{integer expression}.
-% \end{function}
-%
-% \begin{function}{\char_show_value_sfcode:n}
-% \begin{syntax}
-% \cs{char_show_value_sfcode:n} \Arg{integer expression}
-% \end{syntax}
-% Displays the current space factor for the \meta{character} with
-% character code given by the \meta{integer expression} on the
-% terminal.
-% \end{function}
-%
-% \begin{variable}[added = 2012-01-23, updated = 2015-11-11]{\l_char_active_seq}
-% Used to track which tokens may require special handling at the document
-% level as they are (or have been at some point)
-% of category \meta{active} (catcode~$13$). Each entry in
-% the sequence consists of a single escaped token, for example |\~|.
-% Active tokens should be added to the sequence when they are defined for
-% general document use.
-% \end{variable}
-%
-% \begin{variable}[added = 2012-01-23, updated = 2015-11-11]{\l_char_special_seq}
-% Used to track which tokens will require special handling when working with
-% verbatim-like material at the document level as they are not of categories
-% \meta{letter} (catcode~$11$) or \meta{other} (catcode~$12$). Each entry in
-% the sequence consists of a single escaped token, for example |\\| for the
-% backslash or |\{| for an opening brace. ^^A \}
-% Escaped tokens should be added to the sequence when they are defined for
-% general document use.
-% \end{variable}
-%
-% \section{Generic tokens}
-%
-% \begin{variable}[module = token]
-% {
-% \c_group_begin_token,
-% \c_group_end_token,
-% \c_math_toggle_token,
-% \c_alignment_token,
-% \c_parameter_token,
-% \c_math_superscript_token,
-% \c_math_subscript_token,
-% \c_space_token
-% }
-% These are implicit tokens which have the category code described
-% by their name. They are used internally for test purposes but
-% are also available to the programmer for other uses.
-% \begin{texnote}
-% The tokens \cs{c_group_begin_token}, \cs{c_group_end_token}, and
-% \cs{c_space_token} are \pkg{expl3} counterparts of \LaTeXe{}'s
-% \tn{bgroup}, \tn{egroup}, and \cs{@sptoken}.
-% \end{texnote}
-% \end{variable}
-%
-% \begin{variable}
-% {
-% \c_catcode_letter_token,
-% \c_catcode_other_token
-% }
-% These are implicit tokens which have the category code described
-% by their name. They are used internally for test purposes and should
-% not be used other than for category code tests.
-% \end{variable}
-%
-% \begin{variable}{\c_catcode_active_tl}
-% A token list containing an active token. This is used internally
-% for test purposes and should not be used other than in
-% appropriately-constructed category code tests.
-% \end{variable}
-%
-% \section{Converting tokens}
-%
-% \begin{function}[EXP]{\token_to_meaning:N, \token_to_meaning:c}
-% \begin{syntax}
-% \cs{token_to_meaning:N} \meta{token}
-% \end{syntax}
-% Inserts the current meaning of the \meta{token} into the input
-% stream as a series of characters of category code $12$ (other).
-% This is the primitive \TeX{} description of the \meta{token},
-% thus for example both functions defined by \cs{cs_set_nopar:Npn}
-% and token list variables defined using \cs{tl_new:N} are described
-% as |macro|s.
-% \begin{texnote}
-% This is the \TeX{} primitive \tn{meaning}.
-% The \meta{token} can thus be an explicit space token or an
-% explicit begin-group or end-group character token (|{|~or~|}| when
-% normal \TeX{} category codes apply) even though these are not
-% valid \texttt{N}-type arguments.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[EXP]{\token_to_str:N, \token_to_str:c}
-% \begin{syntax}
-% \cs{token_to_str:N} \meta{token}
-% \end{syntax}
-% Converts the given \meta{token} into a series of characters with
-% category code $12$ (other). If the \meta{token} is a control
-% sequence, this will start with the current escape character with
-% category code $12$ (the escape character is part of the
-% \meta{token}). This function requires only a single expansion.
-% \begin{texnote}
-% \cs{token_to_str:N} is the \TeX{} primitive \tn{string}.
-% The \meta{token} can thus be an explicit space tokens or an
-% explicit begin-group or end-group character token (|{|~or~|}| when
-% normal \TeX{} category codes apply) even though these are not
-% valid \texttt{N}-type arguments.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[EXP,added = 2023-10-15]{\token_to_catcode:N}
-% \begin{syntax}
-% \cs{token_to_catcode:N} \meta{token}
-% \end{syntax}
-% Converts the given \meta{token} into a number describing its category code.
-% If \meta{token} is a control sequence this expands to $16$. This can't
-% detect the categories $0$ (escape character), $5$ (end of line), $9$
-% (ignored character), $14$ (comment character), or $15$ (invalid character).
-% Control sequences or active characters let to a token of one of the
-% detectable category codes will yield that category.
-% \end{function}
-%
-% \section{Token conditionals}
-%
-% \begin{function}[EXP,pTF]{\token_if_group_begin:N}
-% \begin{syntax}
-% \cs{token_if_group_begin_p:N} \meta{token} \\
-% \cs{token_if_group_begin:NTF} \meta{token} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if \meta{token} has the category code of a begin group token
-% (|{| when normal \TeX{} category codes are in ^^A }
-% force).
-% Note that an explicit begin group token cannot be tested in this way,
-% as it is not a valid \texttt{N}-type argument.
-% \end{function}
-%
-% \begin{function}[EXP,pTF]{\token_if_group_end:N}
-% \begin{syntax}
-% \cs{token_if_group_end_p:N} \meta{token} \\
-% \cs{token_if_group_end:NTF} \meta{token} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if \meta{token} has the category code of an end group token
-% (^^A {
-% |}| when normal \TeX{} category codes are in force).
-% Note that an explicit end group token cannot be tested in this way,
-% as it is not a valid \texttt{N}-type argument.
-% \end{function}
-%
-% \begin{function}[EXP,pTF]{\token_if_math_toggle:N}
-% \begin{syntax}
-% \cs{token_if_math_toggle_p:N} \meta{token} \\
-% \cs{token_if_math_toggle:NTF} \meta{token} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if \meta{token} has the category code of a math shift token
-% (|$| when normal \TeX{} category codes are in force).
-% \end{function}
-%
-% \begin{function}[EXP,pTF]{\token_if_alignment:N}
-% \begin{syntax}
-% \cs{token_if_alignment_p:N} \meta{token} \\
-% \cs{token_if_alignment:NTF} \meta{token} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if \meta{token} has the category code of an alignment token
-% (|&| when normal \TeX{} category codes are in force).
-% \end{function}
-%
-% \begin{function}[EXP,pTF]{\token_if_parameter:N}
-% \begin{syntax}
-% \cs{token_if_parameter_p:N} \meta{token} \\
-% \cs{token_if_parameter:NTF} \meta{token} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if \meta{token} has the category code of a macro parameter token
-% (|#| when normal \TeX{} category codes are in force).
-% \end{function}
-%
-% \begin{function}[EXP,pTF]{\token_if_math_superscript:N}
-% \begin{syntax}
-% \cs{token_if_math_superscript_p:N} \meta{token} \\
-% \cs{token_if_math_superscript:NTF} \meta{token} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if \meta{token} has the category code of a superscript token
-% (|^| when normal \TeX{} category codes are in force).
-% \end{function}
-%
-% \begin{function}[EXP,pTF]{\token_if_math_subscript:N}
-% \begin{syntax}
-% \cs{token_if_math_subscript_p:N} \meta{token} \\
-% \cs{token_if_math_subscript:NTF} \meta{token} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if \meta{token} has the category code of a subscript token
-% (|_| when normal \TeX{} category codes are in force).
-% \end{function}
-%
-% \begin{function}[EXP,pTF]{\token_if_space:N}
-% \begin{syntax}
-% \cs{token_if_space_p:N} \meta{token} \\
-% \cs{token_if_space:NTF} \meta{token} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if \meta{token} has the category code of a space token.
-% Note that an explicit space token with character code $32$ cannot
-% be tested in this way, as it is not a valid \texttt{N}-type argument.
-% \end{function}
-%
-% \begin{function}[EXP,pTF]{\token_if_letter:N}
-% \begin{syntax}
-% \cs{token_if_letter_p:N} \meta{token} \\
-% \cs{token_if_letter:NTF} \meta{token} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if \meta{token} has the category code of a letter token.
-% \end{function}
-%
-% \begin{function}[EXP,pTF]{\token_if_other:N}
-% \begin{syntax}
-% \cs{token_if_other_p:N} \meta{token} \\
-% \cs{token_if_other:NTF} \meta{token} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if \meta{token} has the category code of an \enquote{other}
-% token.
-% \end{function}
-%
-% \begin{function}[EXP,pTF]{\token_if_active:N}
-% \begin{syntax}
-% \cs{token_if_active_p:N} \meta{token} \\
-% \cs{token_if_active:NTF} \meta{token} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if \meta{token} has the category code of an active character.
-% \end{function}
-%
-% \begin{function}[EXP,pTF]{\token_if_eq_catcode:NN}
-% \begin{syntax}
-% \cs{token_if_eq_catcode_p:NN} \meta{token_1} \meta{token_2} \\
-% \cs{token_if_eq_catcode:NNTF} \meta{token_1} \meta{token_2} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the two \meta{tokens} have the same category code.
-% \end{function}
-%
-% \begin{function}[EXP,pTF]{\token_if_eq_charcode:NN}
-% \begin{syntax}
-% \cs{token_if_eq_charcode_p:NN} \meta{token_1} \meta{token_2} \\
-% \cs{token_if_eq_charcode:NNTF} \meta{token_1} \meta{token_2} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the two \meta{tokens} have the same character code.
-% \end{function}
-%
-% \begin{function}[EXP,pTF]{\token_if_eq_meaning:NN}
-% \begin{syntax}
-% \cs{token_if_eq_meaning_p:NN} \meta{token_1} \meta{token_2} \\
-% \cs{token_if_eq_meaning:NNTF} \meta{token_1} \meta{token_2} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the two \meta{tokens} have the same meaning when expanded.
-% \end{function}
-%
-% \begin{function}[updated = 2011-05-23, EXP,pTF]{\token_if_macro:N}
-% \begin{syntax}
-% \cs{token_if_macro_p:N} \meta{token} \\
-% \cs{token_if_macro:NTF} \meta{token} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the \meta{token} is a \TeX{} macro.
-% \end{function}
-%
-% \begin{function}[EXP,pTF]{\token_if_cs:N}
-% \begin{syntax}
-% \cs{token_if_cs_p:N} \meta{token} \\
-% \cs{token_if_cs:NTF} \meta{token} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the \meta{token} is a control sequence.
-% \end{function}
-%
-% \begin{function}[EXP,pTF]{\token_if_expandable:N}
-% \begin{syntax}
-% \cs{token_if_expandable_p:N} \meta{token} \\
-% \cs{token_if_expandable:NTF} \meta{token} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the \meta{token} is expandable. This test returns \meta{false}
-% for an undefined token.
-% \end{function}
-%
-% \begin{function}[EXP,pTF, updated=2012-01-20]{\token_if_long_macro:N}
-% \begin{syntax}
-% \cs{token_if_long_macro_p:N} \meta{token} \\
-% \cs{token_if_long_macro:NTF} \meta{token} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the \meta{token} is a long macro.
-% \end{function}
-%
-% \begin{function}[EXP,pTF, updated=2012-01-20]{\token_if_protected_macro:N}
-% \begin{syntax}
-% \cs{token_if_protected_macro_p:N} \meta{token} \\
-% \cs{token_if_protected_macro:NTF} \meta{token} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the \meta{token} is a protected macro: for a macro which
-% is both protected and long this returns \texttt{false}.
-% \end{function}
-%
-% \begin{function}[EXP,pTF, updated=2012-01-20]{\token_if_protected_long_macro:N}
-% \begin{syntax}
-% \cs{token_if_protected_long_macro_p:N} \meta{token} \\
-% \cs{token_if_protected_long_macro:NTF} \meta{token} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the \meta{token} is a protected long macro.
-% \end{function}
-%
-% \begin{function}[EXP,pTF, updated=2012-01-20]{\token_if_chardef:N}
-% \begin{syntax}
-% \cs{token_if_chardef_p:N} \meta{token} \\
-% \cs{token_if_chardef:NTF} \meta{token} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the \meta{token} is defined to be a chardef.
-% \begin{texnote}
-% Booleans, boxes and small integer constants are implemented as
-% \tn{chardef}s.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[EXP,pTF, updated=2012-01-20]{\token_if_mathchardef:N}
-% \begin{syntax}
-% \cs{token_if_mathchardef_p:N} \meta{token} \\
-% \cs{token_if_mathchardef:NTF} \meta{token} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the \meta{token} is defined to be a mathchardef.
-% \end{function}
-%
-% \begin{function}[EXP,pTF, added=2020-10-27]{\token_if_font_selection:N}
-% \begin{syntax}
-% \cs{token_if_font_selection_p:N} \meta{token} \\
-% \cs{token_if_font_selection:NTF} \meta{token} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the \meta{token} is defined to be a font selection command.
-% \end{function}
-%
-% \begin{function}[EXP,pTF, updated=2012-01-20]{\token_if_dim_register:N}
-% \begin{syntax}
-% \cs{token_if_dim_register_p:N} \meta{token} \\
-% \cs{token_if_dim_register:NTF} \meta{token} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the \meta{token} is defined to be a dimension register.
-% \end{function}
-%
-% \begin{function}[EXP,pTF, updated=2012-01-20]{\token_if_int_register:N}
-% \begin{syntax}
-% \cs{token_if_int_register_p:N} \meta{token} \\
-% \cs{token_if_int_register:NTF} \meta{token} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the \meta{token} is defined to be a integer register.
-% \begin{texnote}
-% Constant integers may be implemented as integer registers,
-% \tn{chardef}s, or \tn{mathchardef}s depending on their value.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[EXP,pTF, added=2012-02-15]{\token_if_muskip_register:N}
-% \begin{syntax}
-% \cs{token_if_muskip_register_p:N} \meta{token} \\
-% \cs{token_if_muskip_register:NTF} \meta{token} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the \meta{token} is defined to be a muskip register.
-% \end{function}
-%
-% \begin{function}[EXP,pTF, updated=2012-01-20]{\token_if_skip_register:N}
-% \begin{syntax}
-% \cs{token_if_skip_register_p:N} \meta{token} \\
-% \cs{token_if_skip_register:NTF} \meta{token} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the \meta{token} is defined to be a skip register.
-% \end{function}
-%
-% \begin{function}[EXP,pTF, updated=2012-01-20]{\token_if_toks_register:N}
-% \begin{syntax}
-% \cs{token_if_toks_register_p:N} \meta{token} \\
-% \cs{token_if_toks_register:NTF} \meta{token} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the \meta{token} is defined to be a toks register
-% (not used by \LaTeX3).
-% \end{function}
-%
-% \begin{function}[updated = 2020-09-11, EXP,pTF]{\token_if_primitive:N}
-% \begin{syntax}
-% \cs{token_if_primitive_p:N} \meta{token} \\
-% \cs{token_if_primitive:NTF} \meta{token} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the \meta{token} is an engine primitive. In \LuaTeX{}
-% this includes primitive-like commands defined using |token.set_lua|.
-% \end{function}
-%
-% \begin{function}[added = 2020-12-03, EXP, noTF]
-% {\token_case_catcode:Nn, \token_case_charcode:Nn, \token_case_meaning:Nn}
-% \begin{syntax}
-% \cs{token_case_meaning:NnTF} \meta{test token} \\
-% ~~"{" \\
-% ~~~~\meta{token case_1} \Arg{code case_1} \\
-% ~~~~\meta{token case_2} \Arg{code case_2} \\
-% ~~~~\ldots \\
-% ~~~~\meta{token case_n} \Arg{code case_n} \\
-% ~~"}" \\
-% ~~\Arg{true code}
-% ~~\Arg{false code}
-% \end{syntax}
-% This function compares the \meta{test token} in turn with each of
-% the \meta{token cases}. If the two are equal (as described for
-% \cs{token_if_eq_catcode:NNTF}, \cs{token_if_eq_charcode:NNTF} and
-% \cs{token_if_eq_meaning:NNTF}, respectively) then the associated
-% \meta{code} is left in the input stream and other cases are
-% discarded. If any of the cases are matched, the \meta{true code} is
-% also inserted into the input stream (after the code for the
-% appropriate case), while if none match then the \meta{false code} is
-% inserted. The functions \cs{token_case_catcode:Nn},
-% \cs{token_case_charcode:Nn}, and \cs{token_case_meaning:Nn}, which
-% do nothing if there is no match, are also available.
-% \end{function}
-%
-% \section{Peeking ahead at the next token}
-%
-% There is often a need to look ahead at the next token in the input
-% stream while leaving it in place. This is handled using the
-% \enquote{peek} functions. The generic \cs{peek_after:Nw} is provided
-% along with a family of predefined tests for common cases. Peeking
-% ahead does \emph{not} skip spaces: rather, \cs{peek_remove_spaces:n}.
-% should be used. In addition, using \cs{peek_analysis_map_inline:n},
-% one can map through the following tokens in the input stream and
-% repeatedly perform some tests.
-%
-% \begin{function}{\peek_after:Nw}
-% \begin{syntax}
-% \cs{peek_after:Nw} \meta{function} \meta{token}
-% \end{syntax}
-% Locally sets the test variable \cs{l_peek_token} equal to \meta{token}
-% (as an implicit token, \emph{not} as a token list), and then
-% expands the \meta{function}. The \meta{token} remains in
-% the input stream as the next item after the \meta{function}.
-% The \meta{token} here may be \verb*| |, |{| or |}| (assuming
-% normal \TeX{} category codes), \emph{i.e.}~it is not necessarily the
-% next argument which would be grabbed by a normal function.
-% \end{function}
-%
-% \begin{function}{\peek_gafter:Nw}
-% \begin{syntax}
-% \cs{peek_gafter:Nw} \meta{function} \meta{token}
-% \end{syntax}
-% Globally sets the test variable \cs{g_peek_token} equal to \meta{token}
-% (as an implicit token, \emph{not} as a token list), and then
-% expands the \meta{function}. The \meta{token} remains in
-% the input stream as the next item after the \meta{function}.
-% The \meta{token} here may be \verb*| |, |{| or |}| (assuming
-% normal \TeX{} category codes), \emph{i.e.}~it is not necessarily the
-% next argument which would be grabbed by a normal function.
-% \end{function}
-%
-% \begin{variable}{\l_peek_token}
-% Token set by \cs{peek_after:Nw} and available for testing
-% as described above.
-% \end{variable}
-%
-% \begin{variable}{\g_peek_token}
-% Token set by \cs{peek_gafter:Nw} and available for testing
-% as described above.
-% \end{variable}
-%
-% \begin{function}[updated = 2012-12-20, TF]{\peek_catcode:N}
-% \begin{syntax}
-% \cs{peek_catcode:NTF} \meta{test token} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the next \meta{token} in the input stream has the same
-% category code as the \meta{test token} (as defined by the test
-% \cs{token_if_eq_catcode:NNTF}). Spaces are respected by the test
-% and the \meta{token} is left in the input stream after
-% the \meta{true code} or \meta{false code} (as appropriate to the
-% result of the test).
-% \end{function}
-%
-% \begin{function}[updated = 2012-12-20, TF]{\peek_catcode_remove:N}
-% \begin{syntax}
-% \cs{peek_catcode_remove:NTF} \meta{test token} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the next \meta{token} in the input stream has the same
-% category code as the \meta{test token} (as defined by the test
-% \cs{token_if_eq_catcode:NNTF}). Spaces are respected by the test
-% and the \meta{token} is removed from the input stream if the
-% test is true. The function then places either the
-% \meta{true code} or \meta{false code} in the input stream (as
-% appropriate to the result of the test).
-% \end{function}
-%
-% \begin{function}[updated = 2012-12-20, TF]{\peek_charcode:N}
-% \begin{syntax}
-% \cs{peek_charcode:NTF} \meta{test token} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the next \meta{token} in the input stream has the same
-% character code as the \meta{test token} (as defined by the test
-% \cs{token_if_eq_charcode:NNTF}). Spaces are respected by the test
-% and the \meta{token} is left in the input stream after
-% the \meta{true code} or \meta{false code} (as appropriate to the
-% result of the test).
-% \end{function}
-%
-% \begin{function}[updated = 2012-12-20, TF]{\peek_charcode_remove:N}
-% \begin{syntax}
-% \cs{peek_charcode_remove:NTF} \meta{test token} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the next \meta{token} in the input stream has the same
-% character code as the \meta{test token} (as defined by the test
-% \cs{token_if_eq_charcode:NNTF}). Spaces are respected by the test
-% and the \meta{token} is removed from the input stream if the
-% test is true. The function then places either the
-% \meta{true code} or \meta{false code} in the input stream (as
-% appropriate to the result of the test).
-% \end{function}
-%
-% \begin{function}[updated = 2011-07-02, TF]{\peek_meaning:N}
-% \begin{syntax}
-% \cs{peek_meaning:NTF} \meta{test token} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the next \meta{token} in the input stream has the same
-% meaning as the \meta{test token} (as defined by the test
-% \cs{token_if_eq_meaning:NNTF}). Spaces are respected by the test
-% and the \meta{token} is left in the input stream after
-% the \meta{true code} or \meta{false code} (as appropriate to the
-% result of the test).
-% \end{function}
-%
-% \begin{function}[updated = 2011-07-02, TF]{\peek_meaning_remove:N}
-% \begin{syntax}
-% \cs{peek_meaning_remove:NTF} \meta{test token} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the next \meta{token} in the input stream has the same
-% meaning as the \meta{test token} (as defined by the test
-% \cs{token_if_eq_meaning:NNTF}). Spaces are respected by the test
-% and the \meta{token} is removed from the input stream if the
-% test is true. The function then places either the
-% \meta{true code} or \meta{false code} in the input stream (as
-% appropriate to the result of the test).
-% \end{function}
-%
-% \begin{function}[added = 2018-10-01]{\peek_remove_spaces:n}
-% \begin{syntax}
-% \cs{peek_remove_spaces:n} \Arg{code}
-% \end{syntax}
-% Peeks ahead and detect if the following token is a space (category code
-% $10$ and character code $32$). If so, removes the token and checks the
-% next token. Once a non-space token is found, the \meta{code} will be
-% inserted into the input stream. Typically this will contain a \texttt{peek}
-% operation, but this is not required.
-% \end{function}
-%
-% \begin{function}[added = 2022-01-10]{\peek_remove_filler:n}
-% \begin{syntax}
-% \cs{peek_remove_filler:n} \Arg{code}
-% \end{syntax}
-% Peeks ahead and detect if the following token is a space (category code
-% $10$) or has meaning equal to \cs{scan_stop:}. If so,
-% removes the token and checks the next token. If neither of these cases
-% apply, expands the next token using \texttt{f}-type expansion, then checks
-% the resulting leading token in the same way. If after expansion the next
-% token is neither of the two test cases, the \meta{code} will be inserted
-% into the input stream. Typically this will contain a \texttt{peek}
-% operation, but this is not required.
-% \begin{texnote}
-% This is essentially a macro-based implementation of how \TeX{} handles
-% the search for a left brace after for example \tn{everypar}, except that
-% any non-expandable token cleanly ends the \meta{filler} (i.e.~it does not
-% lead to a \TeX{} error).
-%
-% In contrast to \TeX{}'s filler removal, a construct
-% \verb|\exp_not:N \foo| will be treated in the same way as \verb|\foo|.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[TF, updated = 2012-12-20]{\peek_N_type:}
-% \begin{syntax}
-% \cs{peek_N_type:TF} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the next \meta{token} in the input stream can be safely
-% grabbed as an \texttt{N}-type argument. The test is \meta{false}
-% if the next \meta{token} is either an explicit or implicit
-% begin-group or end-group token (with any character code), or
-% an explicit or implicit space character (with character code $32$
-% and category code $10$), or an outer token (never used in \LaTeX3)
-% and \meta{true} in all other cases.
-% Note that a \meta{true} result ensures that the next \meta{token} is
-% a valid \texttt{N}-type argument. However, if the next \meta{token}
-% is for instance \cs{c_space_token}, the test takes the
-% \meta{false} branch, even though the next \meta{token} is in fact
-% a valid \texttt{N}-type argument. The \meta{token} is left
-% in the input stream after the \meta{true code} or \meta{false code}
-% (as appropriate to the result of the test).
-% \end{function}
-%
-% \begin{function}[added = 2020-12-03, updated = 2024-02-07]
-% {\peek_analysis_map_inline:n}
-% \begin{syntax}
-% \cs{peek_analysis_map_inline:n} \Arg{inline function}
-% \end{syntax}
-% Repeatedly removes one \meta{token} from the input stream and
-% applies the \meta{inline function} to it, until
-% \cs{peek_analysis_map_break:} is called. The \meta{inline function}
-% receives three arguments for each \meta{token} in the input stream:
-% \begin{itemize}
-% \item \meta{tokens}, which both \texttt{o}-expand and
-% \texttt{e}/\texttt{x}-expand to the \meta{token}. The detailed form of
-% \meta{tokens} may change in later releases.
-% \item \meta{char code}, a decimal representation of the character
-% code of the \meta{token}, $-1$ if it is a control sequence.
-% \item \meta{catcode}, a capital hexadecimal digit which denotes the
-% category code of the \meta{token} (0:~control sequence,
-% 1:~begin-group, 2:~end-group, 3:~math shift, 4:~alignment tab,
-% 6:~parameter, 7:~superscript, 8:~subscript, A:~space, B:~letter,
-% C:~other, D:~active). This can be converted to an integer by
-% writing |"|\meta{catcode}.
-% \end{itemize}
-% These arguments are the same as for \cs{tl_analysis_map_inline:nn}
-% defined in \pkg{l3tl-analysis}. The \meta{char code} and
-% \meta{catcode} do not take the meaning of a control sequence or
-% active character into account: for instance, upon encountering the
-% token \cs{c_group_begin_token} in the input stream,
-% \cs{peek_analysis_map_inline:n} calls the \meta{inline function}
-% with |#1| being \cs{exp_not:n} |{| \cs{c_group_begin_token} |}|
-% (with the current implementation),
-% |#2|~being~$-1$, and
-% |#3|~being~$0$, as for any other control sequence. In contrast,
-% upon encountering an explicit begin-group token~|{|, % ^^A |}|
-% the \meta{inline function} is called with arguments
-% \cs{exp_after:wN} |{| \cs{if_false:} |}| \cs{fi:}, $123$ and~$1$.
-%
-% The mapping is done at the current group level, \emph{i.e.}~any
-% local assignments made by the \meta{inline function} remain in
-% effect after the loop. Within the code, \cs{l_peek_token} is set
-% equal (as a token, not a token list) to the token under
-% consideration.
-%
-% Peek functions cannot be used within this mapping function (nor
-% other mapping functions) since the input stream contains trailing
-% material necessary for the functioning of the loop.
-% \begin{texnote}
-% In case the input stream has not yet been tokenized (converted
-% from characters to tokens), characters are tokenized one by one as
-% needed by \cs{peek_analysis_map_inline:n} using the current
-% category code regime.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[added = 2020-12-03]
-% {\peek_analysis_map_break:, \peek_analysis_map_break:n}
-% \begin{syntax}
-% \cs{peek_analysis_map_inline:n}
-% |{| \dots{} \cs{peek_analysis_map_break:n} \Arg{code} |}|
-% \end{syntax}
-% Stops the \cs{peek_analysis_map_inline:n} loop from seeking more
-% tokens, and inserts \meta{code} in the input stream (empty for
-% \cs{peek_analysis_map_break:}).
-% \end{function}
-%
-% \begin{function}[added = 2020-12-03, TF]{\peek_regex:n, \peek_regex:N}
-% \begin{syntax}
-% \cs{peek_regex:nTF} \Arg{regex} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the \meta{tokens} that follow in the input stream match the
-% \meta{regular expression}. Any \meta{tokens} that have been read
-% are left in the input stream after the \meta{true code} or
-% \meta{false code} (as appropriate to the result of the test). See
-% \pkg{l3regex} for documentation of the syntax of regular
-% expressions. The \meta{regular expression} is implicitly anchored
-% at the start, so for instance \cs{peek_regex:nTF}~|{|~|a|~|}| is
-% essentially equivalent to \cs{peek_charcode:NTF}~|a|.
-% \begin{texnote}
-% Implicit character tokens are correctly considered by
-% \cs{peek_regex:nTF} as control sequences, while functions that
-% inspect individual tokens (for instance \cs{peek_charcode:NTF})
-% only take into account their meaning.
-%
-% The \cs{peek_regex:nTF} function only inspects as few tokens as
-% necessary to determine whether the regular expression matches.
-% For instance \cs{peek_regex:nTF} \verb"{ abc | [a-z] }" |{ } { }|
-% |abc| will only inspect the first token~|a| even though the first
-% branch |abc| of the alternative is preferred in functions such as
-% \cs{peek_regex_remove_once:nTF}. This may have an effect on
-% tokenization if the input stream has not yet been tokenized and
-% category codes are changed.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[added = 2020-12-03, TF]
-% {\peek_regex_remove_once:n, \peek_regex_remove_once:N}
-% \begin{syntax}
-% \cs{peek_regex_remove_once:nTF} \Arg{regex} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% Tests if the \meta{tokens} that follow in the input stream match the
-% \meta{regex}. If the test is true, the \meta{tokens} are removed
-% from the input stream and the \meta{true code} is inserted, while if
-% the test is false, the \meta{false code} is inserted followed by the
-% \meta{tokens} that were originally in the input stream.
-% See \pkg{l3regex} for documentation of the syntax of
-% regular expressions. The \meta{regular expression} is implicitly
-% anchored at the start, so for instance
-% \cs{peek_regex_remove_once:nTF}~|{|~|a|~|}| is essentially equivalent to
-% \cs{peek_charcode_remove:NTF}~|a|.
-% \begin{texnote}
-% Implicit character tokens are correctly considered by
-% \cs{peek_regex_remove_once:nTF} as control sequences, while functions
-% that inspect individual tokens (for instance
-% \cs{peek_charcode:NTF}) only take into account their meaning.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[added = 2020-12-03, noTF]
-% {\peek_regex_replace_once:nn, \peek_regex_replace_once:Nn}
-% \begin{syntax}
-% \cs{peek_regex_replace_once:nnTF} \Arg{regex} \Arg{replacement} \Arg{true code} \Arg{false code}
-% \end{syntax}
-% If the \meta{tokens} that follow in the input stream match the
-% \meta{regex}, replaces them according to the \meta{replacement} as
-% for \cs{regex_replace_once:nnN}, and leaves the result in the input
-% stream, after the \meta{true code}. Otherwise, leaves \meta{false
-% code} followed by the \meta{tokens} that were originally in the
-% input stream, with no modifications. See \pkg{l3regex} for
-% documentation of the syntax of regular expressions and of the
-% \meta{replacement}: for instance |\0| in the \meta{replacement} is
-% replaced by the tokens that were matched in the input stream. The
-% \meta{regular expression} is implicitly anchored at the start. In
-% contrast to \cs{regex_replace_once:nnN}, no error arises if the
-% \meta{replacement} leads to an unbalanced token list: the tokens are
-% inserted into the input stream without issue.
-% \begin{texnote}
-% Implicit character tokens are correctly considered by
-% \cs{peek_regex_replace_once:nnTF} as control sequences, while
-% functions that inspect individual tokens (for instance
-% \cs{peek_charcode:NTF}) only take into account their meaning.
-% \end{texnote}
-% \end{function}
-%
-% \section{Description of all possible tokens}
-% \label{sec:l3token:all-tokens}
-%
-% Let us end by reviewing every case that a given token can fall into.
-% This section is quite technical and some details are only meant for
-% completeness. We distinguish the meaning of the token, which controls
-% the expansion of the token and its effect on \TeX{}'s state, and its
-% shape, which is used when comparing token lists such as for delimited
-% arguments. Two tokens of the same shape must have the same meaning,
-% but the converse does not hold.
-%
-% A token has one of the following shapes.
-% \begin{itemize}
-% \item A control sequence, characterized by the sequence of
-% characters that constitute its name: for instance, \cs{use:n} is a
-% five-letter control sequence.
-% \item An active character token, characterized by its character code
-% (between $0$ and $1114111$ for \LuaTeX{} and \XeTeX{} and less for
-% other engines) and category code~$13$.
-% \item A character token, characterized by its character code and
-% category code (one of $1$, $2$, $3$, $4$, $6$, $7$, $8$, $10$,
-% $11$ or~$12$ whose meaning is described below).
-% \end{itemize}
-% There are also a few internal tokens. The following list may be
-% incomplete in some engines.
-% \begin{itemize}
-% \item Expanding \tn{the}\tn{font} results in a token that looks
-% identical to the command that was used to select the current font
-% (such as \tn{tenrm}) but it differs from it in shape.
-% \item A \enquote{frozen} |\relax|, which differs from the primitive in
-% shape (but has the same meaning), is inserted when the closing \tn{fi} of a
-% conditional is encountered before the conditional is evaluated.
-% \item Expanding \tn{noexpand} \meta{token} (when the \meta{token} is
-% expandable) results in an internal token, displayed (temporarily)
-% as \cs[module = {}]{notexpanded: \meta{token}}, whose shape coincides with the
-% \meta{token} and whose meaning differs from \tn{relax}.
-% \item An |\outer endtemplate:| can be encountered when peeking ahead
-% at the next token; this expands to another internal token,
-% |end of alignment template|.
-% \item Tricky programming might access a frozen |\endwrite|.
-% \item Some frozen tokens can only be accessed in interactive
-% sessions: |\cr|, |\right|, |\endgroup|, |\fi|, |\inaccessible|.
-% \item In \LuaTeX{}, there is also the strange case of \enquote{bytes}
-% |^^^^^^1100|$xy$ where $x,y$ are any two lowercase hexadecimal
-% digits, so that the hexadecimal number ranges from
-% |"|$11\,0000=1\,114\,112$ to~|"|$110\,0\mathrm{ff}=1\,114\,367$. These are
-% used to output individual bytes to files, rather than UTF-8. For
-% the purposes of token comparisons they behave like non-expandable
-% primitive control sequences (\emph{not characters}) whose
-% \tn{meaning} is \verb*|the character | followed by the given byte.
-% If this byte is in the range |80|--|ff| this gives an ``invalid
-% utf-8 sequence'' error: applying \cs{token_to_str:N} or
-% \cs{token_to_meaning:N} to these tokens is unsafe. Unfortunately,
-% they don't seem to be detectable safely by any means except perhaps
-% Lua code.
-% \end{itemize}
-%
-% The meaning of a (non-active) character token is fixed by its category
-% code (and character code) and cannot be changed. We call these
-% tokens \emph{explicit} character tokens. Category codes that a
-% character token can have are listed below by giving a sample output of
-% the \TeX{} primitive \tn{meaning}, together with their \LaTeX3 names
-% and most common example:
-% \begin{itemize}
-% \item[1] begin-group character (|group_begin|, often |{|),
-% \item[2] end-group character (|group_end|, often |}|),
-% \item[3] math shift character (|math_toggle|, often |$|), %^^A $
-% \item[4] alignment tab character (|alignment|, often |&|),
-% \item[6] macro parameter character (|parameter|, often |#|),
-% \item[7] superscript character (|math_superscript|, often |^|),
-% \item[8] subscript character (|math_subscript|, often |_|),
-% \item[10] blank space (|space|, often character code~$32$),
-% \item[11] the letter (|letter|, such as |A|),
-% \item[12] the character (|other|, such as |0|).
-% \end{itemize}
-% Category code~$13$ (|active|) is discussed below. Input characters
-% can also have several other category codes which do not lead to
-% character tokens for later processing: $0$~(|escape|),
-% $5$~(|end_line|), $9$~(|ignore|), $14$~(|comment|), and
-% $15$~(|invalid|).
-%
-% The meaning of a control sequence or active character can be identical
-% to that of any character token listed above (with any character code),
-% and we call such tokens \emph{implicit} character tokens. The
-% meaning is otherwise in the following list:
-% \begin{itemize}
-% \item a macro, used in \LaTeX3 for most functions and some variables
-% (|tl|, |fp|, |seq|, \ldots{}),
-% \item a primitive such as \tn{def} or \tn{topmark}, used in \LaTeX3
-% for some functions,
-% \item a register such as \tn{count}|123|, used in \LaTeX3{} for the
-% implementation of some variables (|int|, |dim|, \ldots{}),
-% \item a constant integer such as \tn{char}|"56| or \tn{mathchar}|"121|,
-% \item a font selection command,
-% \item undefined.
-% \end{itemize}
-% Macros can be \tn{protected} or not, \tn{long} or not (the opposite of
-% what \LaTeX3 calls |nopar|), and \tn{outer} or not (unused in
-% \LaTeX3). Their \tn{meaning} takes the form
-% \begin{quote}
-% \meta{prefix} |macro:|\meta{argument}|->|\meta{replacement}
-% \end{quote}
-% where \meta{prefix} is among \tn{protected}\tn{long}\tn{outer},
-% \meta{argument} describes parameters that the macro expects, such as
-% |#1#2#3|, and \meta{replacement} describes how the parameters are
-% manipulated, such as~|\int_eval:n{#2+#1*#3}|.
-%
-% Now is perhaps a good time to mention some subtleties relating to
-% tokens with category code $10$ (space). Any input character with this
-% category code (normally, space and tab characters) becomes a normal
-% space, with character code~$32$ and category code~$10$.
-%
-% When a macro takes an undelimited argument, explicit space characters
-% (with character code $32$ and category code $10$) are ignored. If the
-% following token is an explicit character token with category code $1$
-% (begin-group) and an arbitrary character code, then \TeX{} scans ahead
-% to obtain an equal number of explicit character tokens with category
-% code $1$ (begin-group) and $2$ (end-group), and the resulting list of
-% tokens (with outer braces removed) becomes the argument. Otherwise, a
-% single token is taken as the argument for the macro: we call such
-% single tokens \enquote{N-type}, as they are suitable to be used as an
-% argument for a function with the signature~\texttt{:N}.
-%
-% When a macro takes a delimited argument \TeX{} scans ahead until
-% finding the delimiter (outside any pairs of begin-group/end-group
-% explicit characters), and the resulting list of tokens (with outer
-% braces removed) becomes the argument. Note that explicit space
-% characters at the start of the argument are \emph{not} ignored in this
-% case (and they prevent brace-stripping).
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3token} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*tex>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=char>
-% \end{macrocode}
-%
-% \subsection{Internal auxiliaries}
-%
-% \begin{variable}{\s_@@_stop}
-% Internal scan mark.
-% \begin{macrocode}
-\scan_new:N \s_@@_stop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\q_@@_no_value}
-% Internal recursion quarks.
-% \begin{macrocode}
-\quark_new:N \q_@@_no_value
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[pTF]{\@@_quark_if_no_value:N}
-% Functions to query recursion quarks.
-% \begin{macrocode}
-\__kernel_quark_new_conditional:Nn \@@_quark_if_no_value:N { TF }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Manipulating and interrogating character tokens}
-%
-% \begin{macro}{\char_set_catcode:nn}
-% \begin{macro}{\char_value_catcode:n}
-% \begin{macro}{\char_show_value_catcode:n}
-% Simple wrappers around the primitives.
-% \begin{macrocode}
-\cs_new_protected:Npn \char_set_catcode:nn #1#2
- { \tex_catcode:D \int_eval:n {#1} = \int_eval:n {#2} \exp_stop_f: }
-\cs_new:Npn \char_value_catcode:n #1
- { \tex_the:D \tex_catcode:D \int_eval:n {#1} \exp_stop_f: }
-\cs_new_protected:Npn \char_show_value_catcode:n #1
- { \exp_args:Nf \tl_show:n { \char_value_catcode:n {#1} } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \char_set_catcode_escape:N ,
-% \char_set_catcode_group_begin:N ,
-% \char_set_catcode_group_end:N ,
-% \char_set_catcode_math_toggle:N ,
-% \char_set_catcode_alignment:N ,
-% \char_set_catcode_end_line:N ,
-% \char_set_catcode_parameter:N ,
-% \char_set_catcode_math_superscript:N ,
-% \char_set_catcode_math_subscript:N ,
-% \char_set_catcode_ignore:N ,
-% \char_set_catcode_space:N ,
-% \char_set_catcode_letter:N ,
-% \char_set_catcode_other:N ,
-% \char_set_catcode_active:N ,
-% \char_set_catcode_comment:N ,
-% \char_set_catcode_invalid:N
-% }
-% \begin{macrocode}
-\cs_new_protected:Npn \char_set_catcode_escape:N #1
- { \char_set_catcode:nn { `#1 } { 0 } }
-\cs_new_protected:Npn \char_set_catcode_group_begin:N #1
- { \char_set_catcode:nn { `#1 } { 1 } }
-\cs_new_protected:Npn \char_set_catcode_group_end:N #1
- { \char_set_catcode:nn { `#1 } { 2 } }
-\cs_new_protected:Npn \char_set_catcode_math_toggle:N #1
- { \char_set_catcode:nn { `#1 } { 3 } }
-\cs_new_protected:Npn \char_set_catcode_alignment:N #1
- { \char_set_catcode:nn { `#1 } { 4 } }
-\cs_new_protected:Npn \char_set_catcode_end_line:N #1
- { \char_set_catcode:nn { `#1 } { 5 } }
-\cs_new_protected:Npn \char_set_catcode_parameter:N #1
- { \char_set_catcode:nn { `#1 } { 6 } }
-\cs_new_protected:Npn \char_set_catcode_math_superscript:N #1
- { \char_set_catcode:nn { `#1 } { 7 } }
-\cs_new_protected:Npn \char_set_catcode_math_subscript:N #1
- { \char_set_catcode:nn { `#1 } { 8 } }
-\cs_new_protected:Npn \char_set_catcode_ignore:N #1
- { \char_set_catcode:nn { `#1 } { 9 } }
-\cs_new_protected:Npn \char_set_catcode_space:N #1
- { \char_set_catcode:nn { `#1 } { 10 } }
-\cs_new_protected:Npn \char_set_catcode_letter:N #1
- { \char_set_catcode:nn { `#1 } { 11 } }
-\cs_new_protected:Npn \char_set_catcode_other:N #1
- { \char_set_catcode:nn { `#1 } { 12 } }
-\cs_new_protected:Npn \char_set_catcode_active:N #1
- { \char_set_catcode:nn { `#1 } { 13 } }
-\cs_new_protected:Npn \char_set_catcode_comment:N #1
- { \char_set_catcode:nn { `#1 } { 14 } }
-\cs_new_protected:Npn \char_set_catcode_invalid:N #1
- { \char_set_catcode:nn { `#1 } { 15 } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \char_set_catcode_escape:n ,
-% \char_set_catcode_group_begin:n ,
-% \char_set_catcode_group_end:n ,
-% \char_set_catcode_math_toggle:n ,
-% \char_set_catcode_alignment:n ,
-% \char_set_catcode_end_line:n ,
-% \char_set_catcode_parameter:n ,
-% \char_set_catcode_math_superscript:n ,
-% \char_set_catcode_math_subscript:n ,
-% \char_set_catcode_ignore:n ,
-% \char_set_catcode_space:n ,
-% \char_set_catcode_letter:n ,
-% \char_set_catcode_other:n ,
-% \char_set_catcode_active:n ,
-% \char_set_catcode_comment:n ,
-% \char_set_catcode_invalid:n
-% }
-% \begin{macrocode}
-\cs_new_protected:Npn \char_set_catcode_escape:n #1
- { \char_set_catcode:nn {#1} { 0 } }
-\cs_new_protected:Npn \char_set_catcode_group_begin:n #1
- { \char_set_catcode:nn {#1} { 1 } }
-\cs_new_protected:Npn \char_set_catcode_group_end:n #1
- { \char_set_catcode:nn {#1} { 2 } }
-\cs_new_protected:Npn \char_set_catcode_math_toggle:n #1
- { \char_set_catcode:nn {#1} { 3 } }
-\cs_new_protected:Npn \char_set_catcode_alignment:n #1
- { \char_set_catcode:nn {#1} { 4 } }
-\cs_new_protected:Npn \char_set_catcode_end_line:n #1
- { \char_set_catcode:nn {#1} { 5 } }
-\cs_new_protected:Npn \char_set_catcode_parameter:n #1
- { \char_set_catcode:nn {#1} { 6 } }
-\cs_new_protected:Npn \char_set_catcode_math_superscript:n #1
- { \char_set_catcode:nn {#1} { 7 } }
-\cs_new_protected:Npn \char_set_catcode_math_subscript:n #1
- { \char_set_catcode:nn {#1} { 8 } }
-\cs_new_protected:Npn \char_set_catcode_ignore:n #1
- { \char_set_catcode:nn {#1} { 9 } }
-\cs_new_protected:Npn \char_set_catcode_space:n #1
- { \char_set_catcode:nn {#1} { 10 } }
-\cs_new_protected:Npn \char_set_catcode_letter:n #1
- { \char_set_catcode:nn {#1} { 11 } }
-\cs_new_protected:Npn \char_set_catcode_other:n #1
- { \char_set_catcode:nn {#1} { 12 } }
-\cs_new_protected:Npn \char_set_catcode_active:n #1
- { \char_set_catcode:nn {#1} { 13 } }
-\cs_new_protected:Npn \char_set_catcode_comment:n #1
- { \char_set_catcode:nn {#1} { 14 } }
-\cs_new_protected:Npn \char_set_catcode_invalid:n #1
- { \char_set_catcode:nn {#1} { 15 } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\char_set_mathcode:nn}
-% \begin{macro}{\char_value_mathcode:n}
-% \begin{macro}{\char_show_value_mathcode:n}
-% \begin{macro}{\char_set_lccode:nn}
-% \begin{macro}{\char_value_lccode:n}
-% \begin{macro}{\char_show_value_lccode:n}
-% \begin{macro}{\char_set_uccode:nn}
-% \begin{macro}{\char_value_uccode:n}
-% \begin{macro}{\char_show_value_uccode:n}
-% \begin{macro}{\char_set_sfcode:nn}
-% \begin{macro}{\char_value_sfcode:n}
-% \begin{macro}{\char_show_value_sfcode:n}
-% Pretty repetitive, but necessary!
-% \begin{macrocode}
-\cs_new_protected:Npn \char_set_mathcode:nn #1#2
- { \tex_mathcode:D \int_eval:n {#1} = \int_eval:n {#2} \exp_stop_f: }
-\cs_new:Npn \char_value_mathcode:n #1
- { \tex_the:D \tex_mathcode:D \int_eval:n {#1} \exp_stop_f: }
-\cs_new_protected:Npn \char_show_value_mathcode:n #1
- { \exp_args:Nf \tl_show:n { \char_value_mathcode:n {#1} } }
-\cs_new_protected:Npn \char_set_lccode:nn #1#2
- { \tex_lccode:D \int_eval:n {#1} = \int_eval:n {#2} \exp_stop_f: }
-\cs_new:Npn \char_value_lccode:n #1
- { \tex_the:D \tex_lccode:D \int_eval:n {#1} \exp_stop_f: }
-\cs_new_protected:Npn \char_show_value_lccode:n #1
- { \exp_args:Nf \tl_show:n { \char_value_lccode:n {#1} } }
-\cs_new_protected:Npn \char_set_uccode:nn #1#2
- { \tex_uccode:D \int_eval:n {#1} = \int_eval:n {#2} \exp_stop_f: }
-\cs_new:Npn \char_value_uccode:n #1
- { \tex_the:D \tex_uccode:D \int_eval:n {#1} \exp_stop_f: }
-\cs_new_protected:Npn \char_show_value_uccode:n #1
- { \exp_args:Nf \tl_show:n { \char_value_uccode:n {#1} } }
-\cs_new_protected:Npn \char_set_sfcode:nn #1#2
- { \tex_sfcode:D \int_eval:n {#1} = \int_eval:n {#2} \exp_stop_f: }
-\cs_new:Npn \char_value_sfcode:n #1
- { \tex_the:D \tex_sfcode:D \int_eval:n {#1} \exp_stop_f: }
-\cs_new_protected:Npn \char_show_value_sfcode:n #1
- { \exp_args:Nf \tl_show:n { \char_value_sfcode:n {#1} } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{variable}{\l_char_active_seq, \l_char_special_seq}
-% Two sequences for dealing with special characters. The first is characters
-% which may be active, the second longer list is for \enquote{special}
-% characters more generally. Both lists are escaped so that for example
-% bulk code assignments can be carried out. In both cases, the order is
-% by \textsc{ascii} character code (as is done in for example
-% \cs{ExplSyntaxOn}).
-% \begin{macrocode}
-\seq_new:N \l_char_special_seq
-\seq_set_split:Nnn \l_char_special_seq { }
- { \ \" \# \$ \% \& \\ \^ \_ \{ \} \~ }
-\seq_new:N \l_char_active_seq
-\seq_set_split:Nnn \l_char_active_seq { }
- { \" \$ \& \^ \_ \~ }
-% \end{macrocode}
-% \end{variable}
-%
-% \subsection{Creating character tokens}
-%
-% \begin{macro}
-% {
-% \char_set_active_eq:NN, \char_gset_active_eq:NN,
-% \char_set_active_eq:Nc, \char_gset_active_eq:Nc,
-% \char_set_active_eq:nN, \char_gset_active_eq:nN,
-% \char_set_active_eq:nc, \char_gset_active_eq:nc
-% }
-% Four simple functions with very similar definitions, so set up using
-% an auxiliary.
-% These are similar to \LuaTeX{}'s \tn{letcharcode} primitive.
-% \begin{macrocode}
-\group_begin:
- \char_set_catcode_active:N \^^@
- \cs_set_protected:Npn \@@_tmp:nN #1#2
- {
- \cs_new_protected:cpn { #1 :nN } ##1
- {
- \group_begin:
- \char_set_lccode:nn { `\^^@ } { ##1 }
- \tex_lowercase:D { \group_end: #2 ^^@ }
- }
- \cs_new_protected:cpe { #1 :NN } ##1
- { \exp_not:c { #1 : nN } { `##1 } }
- }
- \@@_tmp:nN { char_set_active_eq } \cs_set_eq:NN
- \@@_tmp:nN { char_gset_active_eq } \cs_gset_eq:NN
-\group_end:
-\cs_generate_variant:Nn \char_set_active_eq:NN { Nc }
-\cs_generate_variant:Nn \char_gset_active_eq:NN { Nc }
-\cs_generate_variant:Nn \char_set_active_eq:nN { nc }
-\cs_generate_variant:Nn \char_gset_active_eq:nN { nc }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_int_to_roman:w}
-% For efficiency in 8-bit engines, we use the faster primitive approach
-% to making roman numerals.
-% \begin{macrocode}
-\cs_new_eq:NN \@@_int_to_roman:w \tex_romannumeral:D
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\char_generate:nn}
-% \begin{macro}[EXP]{\@@_generate_aux:nn}
-% \begin{macro}[EXP]{\@@_generate_aux:nnw, \@@_generate_auxii:nnw}
-% \begin{variable}{\l_@@_tmp_tl}
-% \begin{macro}[EXP]{\@@_generate_invalid_catcode:}
-% The aim here is to generate characters of (broadly) arbitrary category
-% code. Where possible, that is done using engine support (\XeTeX{},
-% \LuaTeX{}). There are though various issues which are covered below. At
-% the interface layer, turn the two arguments into integers up-front so
-% this is only done once.
-% \begin{macrocode}
-\cs_new:Npn \char_generate:nn #1#2
- {
- \exp:w \exp_after:wN \@@_generate_aux:w
- \int_value:w \int_eval:n {#1} \exp_after:wN ;
- \int_value:w \int_eval:n {#2} ;
- }
-% \end{macrocode}
-% Before doing any actual conversion, first some special case filtering.
-% Spaces are out here as \LuaTeX{} emulation only makes normal (charcode
-% $32$ spaces). However, |^^@| is filtered out separately as that can't be
-% done with macro emulation either, so is treated separately. That
-% done, hand off to the engine-dependent part.
-% \begin{macrocode}
-\cs_new:Npn \@@_generate_aux:w #1 ; #2 ;
- {
- \if_int_odd:w 0
- \if_int_compare:w #2 < 1 \exp_stop_f: 1 \fi:
- \if_int_compare:w #2 = 5 \exp_stop_f: 1 \fi:
- \if_int_compare:w #2 = 9 \exp_stop_f: 1 \fi:
- \if_int_compare:w #2 > 13 \exp_stop_f: 1 \fi: \exp_stop_f:
- \msg_expandable_error:nn { char }
- { invalid-catcode }
- \else:
- \if_int_odd:w 0
- \if_int_compare:w #1 < \c_zero_int 1 \fi:
- \if_int_compare:w #1 > \c_max_char_int 1 \fi: \exp_stop_f:
- \msg_expandable_error:nn { char }
- { out-of-range }
- \else:
- \if_int_compare:w #2#1 = 100 \exp_stop_f:
- \msg_expandable_error:nn { char } { null-space }
- \else:
- \@@_generate_aux:nnw {#1} {#2}
- \fi:
- \fi:
- \fi:
- \exp_end:
- }
-\tl_new:N \l_@@_tmp_tl
-% \end{macrocode}
-% Engine-dependent definitions are now needed for the implementation. Recent
-% (u)p\TeX{} and the Unicode engines \LuaTeX{} and \XeTeX{} have engine-level
-% support for expandable character creation. \pdfTeX{} and older (u)p\TeX{}
-% releases do not. The branching here if low-level to avoid fixing
-% the category code of the null character used in the false branch.
-% The final level is the basic definition at the engine level: the arguments
-% here are integers so there is no need to worry about them too much.
-% Older versions of \XeTeX{} cannot generate active characters so we filter
-% that:
-% at some future stage that may change: the slightly odd ordering of
-% auxiliaries reflects that.
-% \begin{macrocode}
-\group_begin:
- \char_set_catcode_active:N \^^L
- \cs_set:Npn ^^L { }
- \if_cs_exist:N \tex_Ucharcat:D
- \cs_new:Npn \@@_generate_aux:nnw #1#2#3 \exp_end:
- {
- #3
- \exp_after:wN \exp_end:
- \tex_Ucharcat:D #1 \exp_stop_f: #2 \exp_stop_f:
- }
- \else:
-% \end{macrocode}
-% For engines where \tn{Ucharcat} isn't available or emulated, we have
-% to work in macros, and cover only the $8$-bit range. The first stage is
-% to build up a |tl| containing |^^@| with each category code that can
-% be accessed in this way, with an error set up for the other cases. This
-% is all done such that it can be quickly accessed using a |\if_case:w|
-% low-level conditional. The list is done in reverse as this puts the case
-% of an active token \emph{first}: that's needed to cover the possibility
-% that it is \tn{outer}. Getting the braces into the list is done using
-% some standard \cs{if_false:} manipulation, while all of the \cs{exp_not:N}
-% are required as there is an expansion in the setup.
-% \begin{macrocode}
- \char_set_catcode_active:n { 0 }
- \tl_set:Nn \l_@@_tmp_tl { \exp_not:N ^^@ \exp_not:N \or: }
- \char_set_catcode_other:n { 0 }
- \tl_put_right:Nn \l_@@_tmp_tl { ^^@ \exp_not:N \or: }
- \char_set_catcode_letter:n { 0 }
- \tl_put_right:Nn \l_@@_tmp_tl { ^^@ \exp_not:N \or: }
-% \end{macrocode}
-% For making spaces, there needs to be an |o|-type expansion of a |\use:n|
-% (or some other tokenization) to avoid dropping the space.
-% \begin{macrocode}
- \tl_put_right:Nn \l_@@_tmp_tl { \use:n { ~ } \exp_not:N \or: }
- \tl_put_right:Nn \l_@@_tmp_tl { \exp_not:N \or: }
- \char_set_catcode_math_subscript:n { 0 }
- \tl_put_right:Nn \l_@@_tmp_tl { ^^@ \exp_not:N \or: }
- \char_set_catcode_math_superscript:n { 0 }
- \tl_put_right:Nn \l_@@_tmp_tl { ^^@ \exp_not:N \or: }
- \char_set_catcode_parameter:n { 0 }
- \tl_put_right:Nn \l_@@_tmp_tl { ^^@ \exp_not:N \or: }
- \tl_put_right:Nn \l_@@_tmp_tl { { \if_false: } \fi: \exp_not:N \or: }
- \char_set_catcode_alignment:n { 0 }
- \tl_put_right:Nn \l_@@_tmp_tl { ^^@ \exp_not:N \or: }
- \char_set_catcode_math_toggle:n { 0 }
- \tl_put_right:Nn \l_@@_tmp_tl { ^^@ \exp_not:N \or: }
- \char_set_catcode_group_end:n { 0 }
- \tl_put_right:Nn \l_@@_tmp_tl { \if_false: { \fi: ^^@ \exp_not:N \or: } % }
- \char_set_catcode_group_begin:n { 0 } % {
- \tl_put_right:Nn \l_@@_tmp_tl { ^^@ \exp_not:N \or: } }
-% \end{macrocode}
-% Convert the above temporary list into a series of constant token
-% lists, one for each character code, using \cs{tex_lowercase:D} to
-% convert |^^@| in each case. The \texttt{e}-type expansion ensures
-% that \cs{tex_lowercase:D} receives the contents of the token list.
-% \begin{macrocode}
- \cs_set_protected:Npn \@@_tmp:n #1
- {
- \char_set_lccode:nn { 0 } {#1}
- \char_set_lccode:nn { 32 } {#1}
- \exp_args:Ne \tex_lowercase:D
- {
- \tl_const:Ne
- \exp_not:c { c_@@_ \@@_int_to_roman:w #1 _tl }
- { \exp_not:o \l_@@_tmp_tl }
- }
- }
- \int_step_function:nnN { 0 } { 255 } \@@_tmp:n
-% \end{macrocode}
-% As \TeX{} is very unhappy if it finds an alignment character inside
-% a primitive \tn{halign} even when skipping false branches, some
-% precautions are required. \TeX{} is happy if the token is hidden
-% between braces within \cs{if_false:} \dots{} \cs{fi:}. The
-% rather low-level approach here expands in one step to the
-% \meta{target token} (\cs{or:} \dots{}), then \cs{exp_after:wN}
-% \meta{target token} (\cs{or:} \dots{}) expands in one step to
-% \meta{target token}. This means that \cs{exp_not:N} is applied to
-% a potentially-problematic active token.
-% \begin{macrocode}
- \cs_new:Npn \@@_generate_aux:nnw #1#2#3 \exp_end:
- {
- #3
- \if_false: { \fi:
- \exp_after:wN \exp_after:wN \exp_after:wN \exp_end:
- \exp_after:wN \exp_after:wN
- \if_case:w \tex_numexpr:D 13 - #2
- \exp_after:wN \exp_after:wN \exp_after:wN \exp_after:wN
- \exp_after:wN \exp_after:wN \exp_after:wN \scan_stop:
- \exp_after:wN \exp_after:wN \exp_after:wN \exp_not:N
- \cs:w c_@@_ \@@_int_to_roman:w #1 _tl \cs_end:
- }
- \fi:
- }
- \fi:
-\group_end:
-% \end{macrocode}
-% \end{macro}
-% \end{variable}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{variable}{\c_catcode_active_space_tl}
-% While \cs{char_generate:nn} can produce active characters in some
-% engines it cannot in general. It would be possible to simply change
-% the catcode of space but then the code would need to avoid all
-% spaces, making it quite unreadable. Instead we use the primitive
-% \cs{tex_lowercase:D} trick.
-% \begin{macrocode}
-\group_begin:
- \char_set_catcode_active:N *
- \char_set_lccode:nn { `* } { `\ }
- \tex_lowercase:D { \tl_const:Nn \c_catcode_active_space_tl { * } }
-\group_end:
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\c_catcode_other_space_tl}
-% Create a space with category code $12$: an \enquote{other} space.
-% \begin{macrocode}
-\tl_const:Ne \c_catcode_other_space_tl { \char_generate:nn { `\ } { 12 } }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Generic tokens}
-%
-% \begin{macrocode}
-%<@@=token>
-% \end{macrocode}
-%
-% \begin{variable}{\s_@@_mark, \s_@@_stop}
-% Internal scan marks.
-% \begin{macrocode}
-\scan_new:N \s_@@_mark
-\scan_new:N \s_@@_stop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\token_to_meaning:N, \token_to_meaning:c}
-% \begin{macro}{\token_to_str:N, \token_to_str:c}
-% These are all defined in \pkg{l3basics}, as they are needed
-% \enquote{early}. This is just a reminder!
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\token_to_catcode:N}
-% \begin{macro}{\@@_to_catcode:N}
-% The macro works by comparing the input token with \cs{if_catcode:w} with all
-% valid category codes. Since the most common tokens in an average argument
-% list are of category $11$ or $12$ those are tested first. And since a space
-% and braces are no ordinary |N|-type arguments, and only control sequences
-% let to those categories can match them they are tested last.
-% \begin{macrocode}
-\cs_new:Npn \token_to_catcode:N
- { \int_value:w \group_align_safe_begin: \@@_to_catcode:N }
-\cs_new:Npn \@@_to_catcode:N #1
- {
- \if_catcode:w \exp_not:N #1 \c_catcode_letter_token
- 11
- \else:
- \if_catcode:w \exp_not:N #1 \c_catcode_other_token
- 12
- \else:
- \if_catcode:w \exp_not:N #1 \c_math_toggle_token
- 3
- \else:
- \if_catcode:w \exp_not:N #1 \c_alignment_token
- 4
- \else:
- \if_catcode:w \exp_not:N #1 ##
- 6
- \else:
- \if_catcode:w \exp_not:N #1 \c_math_superscript_token
- 7
- \else:
- \if_catcode:w \exp_not:N #1 \c_math_subscript_token
- 8
- \else:
- \if_catcode:w \exp_not:N #1 \c_group_begin_token
- 1
- \else:
- \if_catcode:w \exp_not:N #1 \c_group_end_token
- 2
- \else:
- \if_catcode:w \exp_not:N #1 \c_space_token
- 10
- \else:
- \token_if_cs:NTF #1 { 16 } { 13 }
- \fi:
- \fi:
- \fi:
- \fi:
- \fi:
- \fi:
- \fi:
- \fi:
- \fi:
- \fi:
- \group_align_safe_end:
- \exp_stop_f:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \c_group_begin_token,
-% \c_group_end_token,
-% \c_math_toggle_token,
-% \c_alignment_token,
-% \c_parameter_token,
-% \c_math_superscript_token,
-% \c_math_subscript_token,
-% \c_space_token,
-% \c_catcode_letter_token,
-% \c_catcode_other_token
-% }
-% We define these useful tokens. For the brace and space tokens things have
-% to be done by hand: the formal argument spec.~for \cs{cs_new_eq:NN} does
-% not cover them so we do things by hand. (As currently coded it would
-% \emph{work} with \cs{cs_new_eq:NN} but that's not really a great idea to
-% show off: we want people to stick to the defined interfaces and that
-% includes us.) So that these few odd names go into the log when appropriate
-% there is a need to hand-apply the \cs{__kernel_chk_if_free_cs:N} check.
-% \begin{macrocode}
-\group_begin:
- \__kernel_chk_if_free_cs:N \c_group_begin_token
- \tex_global:D \tex_let:D \c_group_begin_token {
- \__kernel_chk_if_free_cs:N \c_group_end_token
- \tex_global:D \tex_let:D \c_group_end_token }
- \char_set_catcode_math_toggle:N \*
- \cs_new_eq:NN \c_math_toggle_token *
- \char_set_catcode_alignment:N \*
- \cs_new_eq:NN \c_alignment_token *
- \cs_new_eq:NN \c_parameter_token #
- \cs_new_eq:NN \c_math_superscript_token ^
- \char_set_catcode_math_subscript:N \*
- \cs_new_eq:NN \c_math_subscript_token *
- \__kernel_chk_if_free_cs:N \c_space_token
- \use:n { \tex_global:D \tex_let:D \c_space_token = ~ } ~
- \cs_new_eq:NN \c_catcode_letter_token a
- \cs_new_eq:NN \c_catcode_other_token 1
-\group_end:
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\c_catcode_active_tl}
-% Not an implicit token!
-% \begin{macrocode}
-\group_begin:
- \char_set_catcode_active:N \*
- \tl_const:Nn \c_catcode_active_tl { \exp_not:N * }
-\group_end:
-% \end{macrocode}
-% \end{variable}
-%
-% \subsection{Token conditionals}
-%
-% \begin{macro}[pTF]{\token_if_group_begin:N}
-% Check if token is a begin group token. We use the constant
-% \cs{c_group_begin_token} for this.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \token_if_group_begin:N #1 { p , T , F , TF }
- {
- \if_catcode:w \exp_not:N #1 \c_group_begin_token
- \prg_return_true: \else: \prg_return_false: \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\token_if_group_end:N}
-% Check if token is a end group token. We use the constant
-% \cs{c_group_end_token} for this.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \token_if_group_end:N #1 { p , T , F , TF }
- {
- \if_catcode:w \exp_not:N #1 \c_group_end_token
- \prg_return_true: \else: \prg_return_false: \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\token_if_math_toggle:N}
-% Check if token is a math shift token. We use the constant
-% \cs{c_math_toggle_token} for this.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \token_if_math_toggle:N #1 { p , T , F , TF }
- {
- \if_catcode:w \exp_not:N #1 \c_math_toggle_token
- \prg_return_true: \else: \prg_return_false: \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\token_if_alignment:N}
-% Check if token is an alignment tab token. We use the constant
-% \cs{c_alignment_token} for this.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \token_if_alignment:N #1 { p , T , F , TF }
- {
- \if_catcode:w \exp_not:N #1 \c_alignment_token
- \prg_return_true: \else: \prg_return_false: \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\token_if_parameter:N}
-% Check if token is a parameter token. We use the constant
-% \cs{c_parameter_token} for this. We have to trick \TeX{} a bit to
-% avoid an error message: within a group we prevent
-% \cs{c_parameter_token} from behaving like a macro parameter character.
-% The definitions of \cs{prg_new_conditional:Npnn} are global, so they
-% remain after the group.
-% \begin{macrocode}
-\group_begin:
-\cs_set_eq:NN \c_parameter_token \scan_stop:
-\prg_new_conditional:Npnn \token_if_parameter:N #1 { p , T , F , TF }
- {
- \if_catcode:w \exp_not:N #1 \c_parameter_token
- \prg_return_true: \else: \prg_return_false: \fi:
- }
-\group_end:
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\token_if_math_superscript:N}
-% Check if token is a math superscript token. We use the constant
-% \cs{c_math_superscript_token} for this.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \token_if_math_superscript:N #1
- { p , T , F , TF }
- {
- \if_catcode:w \exp_not:N #1 \c_math_superscript_token
- \prg_return_true: \else: \prg_return_false: \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\token_if_math_subscript:N}
-% Check if token is a math subscript token. We use the constant
-% \cs{c_math_subscript_token} for this.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \token_if_math_subscript:N #1 { p , T , F , TF }
- {
- \if_catcode:w \exp_not:N #1 \c_math_subscript_token
- \prg_return_true: \else: \prg_return_false: \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\token_if_space:N}
-% Check if token is a space token. We use the constant
-% \cs{c_space_token} for this.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \token_if_space:N #1 { p , T , F , TF }
- {
- \if_catcode:w \exp_not:N #1 \c_space_token
- \prg_return_true: \else: \prg_return_false: \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\token_if_letter:N}
-% Check if token is a letter token. We use the constant
-% \cs{c_catcode_letter_token} for this.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \token_if_letter:N #1 { p , T , F , TF }
- {
- \if_catcode:w \exp_not:N #1 \c_catcode_letter_token
- \prg_return_true: \else: \prg_return_false: \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\token_if_other:N}
-% Check if token is an other char token. We use the constant
-% \cs{c_catcode_other_token} for this.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \token_if_other:N #1 { p , T , F , TF }
- {
- \if_catcode:w \exp_not:N #1 \c_catcode_other_token
- \prg_return_true: \else: \prg_return_false: \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\token_if_active:N}
-% Check if token is an active char token. We use the constant
-% \cs{c_catcode_active_tl} for this. A technical point is that
-% \cs{c_catcode_active_tl} is in fact a macro expanding to
-% |\exp_not:N *|, where |*| is active.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \token_if_active:N #1 { p , T , F , TF }
- {
- \if_catcode:w \exp_not:N #1 \c_catcode_active_tl
- \prg_return_true: \else: \prg_return_false: \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\token_if_eq_meaning:NN}
-% Check if the tokens |#1| and |#2| have same meaning.
-% \begin{macrocode}
-\prg_new_eq_conditional:NNn \token_if_eq_meaning:NN \cs_if_eq:NN
- { p , T , F , TF }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\token_if_eq_catcode:NN}
-% Check if the tokens |#1| and |#2| have same category code.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \token_if_eq_catcode:NN #1#2 { p , T , F , TF }
- {
- \if_catcode:w \exp_not:N #1 \exp_not:N #2
- \prg_return_true: \else: \prg_return_false: \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\token_if_eq_charcode:NN}
-% Check if the tokens |#1| and |#2| have same character code.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \token_if_eq_charcode:NN #1#2 { p , T , F , TF }
- {
- \if_charcode:w \exp_not:N #1 \exp_not:N #2
- \prg_return_true: \else: \prg_return_false: \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\token_if_macro:N}
-% \begin{macro}{\@@_if_macro_p:w}
-% When a token is a macro, \cs{token_to_meaning:N} always outputs
-% something like |\long macro:#1->#1| so we could naively check to
-% see if the meaning contains |->|. However, this can fail the five
-% \tn[no-index]{...mark} primitives, whose meaning has the form
-% |...mark:|\meta{user material}. The problem is that the
-% \meta{user material} can contain |->|.
-%
-% However, only characters, macros, and marks can contain the colon
-% character. The idea is thus to grab until the first |:|, and analyse
-% what is left. However, macros can have any combination of |\long|,
-% |\protected| or |\outer| (not used in \LaTeX3) before the string
-% |macro:|. We thus only select the part of the meaning between
-% the first |ma| and the first following |:|. If this string is
-% |cro|, then we have a macro. If the string is |rk|, then we have
-% a mark. The string can also be |cro parameter character | for a
-% colon with a weird category code (namely the usual category code
-% of |#|). Otherwise, it is empty.
-%
-% This relies on the fact that |\long|, |\protected|, |\outer|
-% cannot contain |ma|, regardless of the escape character, even if
-% the escape character is |m|\ldots{}
-%
-% Both |ma| and |:| must be of category code $12$ (other), so are
-% detokenized.
-%
-% \begin{macrocode}
-\use:e
- {
- \prg_new_conditional:Npnn \exp_not:N \token_if_macro:N #1
- { p , T , F , TF }
- {
- \exp_not:N \exp_after:wN \exp_not:N \@@_if_macro_p:w
- \exp_not:N \token_to_meaning:N #1 \tl_to_str:n { ma : }
- \s_@@_stop
- }
- \cs_new:Npn \exp_not:N \@@_if_macro_p:w
- #1 \tl_to_str:n { ma } #2 \c_colon_str #3 \s_@@_stop
- }
- {
- \str_if_eq:nnTF { #2 } { cro }
- { \prg_return_true: }
- { \prg_return_false: }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\token_if_cs:N}
-% Check if token has same catcode as a control sequence. This
-% follows the same pattern as for \cs{token_if_letter:N} \emph{etc.}
-% We use \cs{scan_stop:} for this.
-% \begin{macrocode}
-\prg_new_conditional:Npnn \token_if_cs:N #1 { p , T , F , TF }
- {
- \if_catcode:w \exp_not:N #1 \scan_stop:
- \prg_return_true: \else: \prg_return_false: \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\token_if_expandable:N}
-% Check if token is expandable. We use the fact that \TeX{}
-% temporarily converts \cs{exp_not:N} \meta{token} into \cs{scan_stop:}
-% if \meta{token} is expandable. An \texttt{undefined} token is not
-% considered as expandable. No problem nesting the conditionals,
-% since the third |#1| is only skipped if it is non-expandable (hence
-% not part of \TeX{}'s conditional apparatus).
-% \begin{macrocode}
-\prg_new_conditional:Npnn \token_if_expandable:N #1 { p , T , F , TF }
- {
- \exp_after:wN \if_meaning:w \exp_not:N #1 #1
- \prg_return_false:
- \else:
- \if_cs_exist:N #1
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \@@_delimit_by_char":w,
-% \@@_delimit_by_count:w,
-% \@@_delimit_by_dimen:w,
-% \@@_delimit_by_ font:w,
-% \@@_delimit_by_macro:w,
-% \@@_delimit_by_muskip:w,
-% \@@_delimit_by_skip:w,
-% \@@_delimit_by_toks:w,
-% }
-% These auxiliary functions are used below to define some
-% conditionals which detect whether the \tn{meaning} of their
-% argument begins with a particular string. Each auxiliary takes an
-% argument delimited by a string, a second one delimited by
-% \cs{s_@@_stop}, and returns the first one and its delimiter.
-% This result is eventually compared to another string.
-% Note that the ``font'' auxiliary is delimited by a space followed by
-% ``\texttt{font}''. This avoids an unnecessary check for the
-% \tn{font} primitive below.
-% \begin{macrocode}
-\group_begin:
-\cs_set_protected:Npn \@@_tmp:w #1
- {
- \use:e
- {
- \cs_new:Npn \exp_not:c { @@_delimit_by_ #1 :w }
- ##1 \tl_to_str:n {#1} ##2 \s_@@_stop
- { ##1 \tl_to_str:n {#1} }
- }
- }
-\@@_tmp:w { char" }
-\@@_tmp:w { count }
-\@@_tmp:w { dimen }
-\@@_tmp:w { ~ font }
-\@@_tmp:w { macro }
-\@@_tmp:w { muskip }
-\@@_tmp:w { skip }
-\@@_tmp:w { toks }
-\group_end:
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[pTF]
-% {
-% \token_if_chardef:N, \token_if_mathchardef:N,
-% \token_if_long_macro:N,
-% \token_if_protected_macro:N, \token_if_protected_long_macro:N,
-% \token_if_font_selection:N,
-% \token_if_dim_register:N, \token_if_int_register:N,
-% \token_if_muskip_register:N,
-% \token_if_skip_register:N, \token_if_toks_register:N,
-% }
-% Each of these conditionals tests whether its argument's
-% \tn{meaning} starts with a given string. This is essentially done
-% by having an auxiliary grab an argument delimited by the string and
-% testing whether the argument was empty. Of course, a copy of this
-% string must first be added to the end of the \tn{meaning} to avoid
-% a runaway argument in case it does not contain the string. Two
-% complications arise. First, the escape character is not fixed, and
-% cannot be included in the delimiter of the auxiliary function (this
-% function cannot be defined on the fly because tests must remain
-% expandable): instead the first argument of the auxiliary (plus the
-% delimiter to avoid complications with trailing spaces) is compared
-% using \cs{str_if_eq:eeTF} to the result of applying
-% \cs{token_to_str:N} to a control sequence. Second, the
-% \tn{meaning} of primitives such as \tn{dimen} or \tn{dimendef}
-% starts in the same way as registers such as
-% \tn{dimen}\texttt{123}, so they must be tested for.
-%
-% Characters used as delimiters must have catcode~$12$
-% and are obtained through \cs{tl_to_str:n}. This requires doing all
-% definitions within \texttt{e}-expansion. The temporary function
-% \cs{@@_tmp:w} used to define each conditional receives three
-% arguments: the name of the conditional, the auxiliary's delimiter
-% (also used to name the auxiliary), and the string to which one
-% compares the auxiliary's result. Note that the \tn{meaning} of a
-% protected long macro starts with |\protected\long macro|, with no
-% space after |\protected| but a space after |\long|, hence the
-% mixture of \cs{token_to_str:N} and \cs{tl_to_str:n}.
-%
-% For the first six conditionals, \cs{cs_if_exist:cT} turns out to
-% be \texttt{false} (thanks to the leading space for \texttt{font}),
-% and the code boils down to a string comparison
-% between the result of the auxiliary on the \tn{meaning} of the
-% conditional's argument~|####1|, and~|#3|. Both are evaluated at
-% run-time, as this is important to get the correct escape character.
-%
-% The other five conditionals have additional code that compares the
-% argument~|####1| to two \TeX{} primitives which would wrongly be
-% recognized as registers otherwise. Despite using \TeX{}'s
-% primitive conditional construction, this does not break
-% when~|####1| is itself a conditional, because branches of the
-% conditionals are only skipped if |####1|~is one of the two
-% primitives that are tested for (which are not \TeX{} conditionals).
-% \begin{macrocode}
-\group_begin:
-\cs_set_protected:Npn \@@_tmp:w #1#2#3
- {
- \use:e
- {
- \prg_new_conditional:Npnn \exp_not:c { token_if_ #1 :N } ##1
- { p , T , F , TF }
- {
- \cs_if_exist:cT { tex_ #2 :D }
- {
- \exp_not:N \if_meaning:w ##1 \exp_not:c { tex_ #2 :D }
- \exp_not:N \prg_return_false:
- \exp_not:N \else:
- \exp_not:N \if_meaning:w ##1 \exp_not:c { tex_ #2 def:D }
- \exp_not:N \prg_return_false:
- \exp_not:N \else:
- }
- \exp_not:N \str_if_eq:eeTF
- {
- \exp_not:N \exp_after:wN
- \exp_not:c { @@_delimit_by_ #2 :w }
- \exp_not:N \token_to_meaning:N ##1
- ? \tl_to_str:n {#2} \s_@@_stop
- }
- { \exp_not:n {#3} }
- { \exp_not:N \prg_return_true: }
- { \exp_not:N \prg_return_false: }
- \cs_if_exist:cT { tex_ #2 :D }
- {
- \exp_not:N \fi:
- \exp_not:N \fi:
- }
- }
- }
- }
-\@@_tmp:w { chardef } { char" } { \token_to_str:N \char" }
-\@@_tmp:w { mathchardef } { char" } { \token_to_str:N \mathchar" }
-\@@_tmp:w { long_macro } { macro } { \tl_to_str:n { \long } macro }
-\@@_tmp:w { protected_macro } { macro }
- { \tl_to_str:n { \protected } macro }
-\@@_tmp:w { protected_long_macro } { macro }
- { \token_to_str:N \protected \tl_to_str:n { \long } macro }
-\@@_tmp:w { font_selection } { ~ font } { select ~ font }
-\@@_tmp:w { dim_register } { dimen } { \token_to_str:N \dimen }
-\@@_tmp:w { int_register } { count } { \token_to_str:N \count }
-\@@_tmp:w { muskip_register } { muskip } { \token_to_str:N \muskip }
-\@@_tmp:w { skip_register } { skip } { \token_to_str:N \skip }
-\@@_tmp:w { toks_register } { toks } { \token_to_str:N \toks }
-\group_end:
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\token_if_primitive:N}
-% \begin{macro}{\@@_if_primitive:NNw,
-% \@@_if_primitive_space:w,
-% \@@_if_primitive_nullfont:N,
-% \@@_if_primitive_loop:N,
-% \@@_if_primitive:Nw,
-% \@@_if_primitive_undefined:N,
-% \@@_if_primitive_lua:N}
-%^^A See http://groups.google.com/group/comp.text.tex/browse_thread/thread/0a72666873f8753d#
-%
-% We filter out macros first, because they cause endless trouble later
-% otherwise.
-%
-% Primitives are almost distinguished by the fact that the result
-% of \cs{token_to_meaning:N} is formed from letters only. Every other
-% token has either a space (e.g., |the letter A|), a digit
-% (e.g., |\count123|) or a double quote (e.g., |\char"A|).
-%
-% Ten exceptions: on the one hand, \cs{tex_undefined:D} is not a
-% primitive, but its meaning is |undefined|, only letters;
-% on the other hand, \tn{space}, \tn{italiccorr},
-% \tn{hyphen}, \tn{firstmark}, \tn{topmark},
-% \tn{botmark}, \tn{splitfirstmark}, \tn{splitbotmark},
-% and \tn{nullfont} are primitives, but have non-letters
-% in their meaning.
-%
-% We start by removing the two first (non-space) characters from
-% the meaning. This removes the escape character (which may be
-% nonexistent depending on \tn{endlinechar}), and takes care
-% of three of the exceptions: \tn{space}, \tn{italiccorr}
-% and \tn{hyphen}, whose meaning is at most two characters.
-% This leaves a string terminated by some |:|, and \cs{s_@@_stop}.
-%
-% The meaning of each one of the five \tn[no-index]{...mark} primitives
-% has the form \meta{letters}|:|\meta{user material}. In other words,
-% the first non-letter is a colon. We remove everything after the first
-% colon.
-%
-% We are now left with a string, which we must analyze. For primitives,
-% it contains only letters. For non-primitives, it contains either
-% |"|, or a space, or a digit. Two exceptions remain: \cs{tex_undefined:D},
-% which is not a primitive, and \tn{nullfont}, which is a primitive.
-%
-% Spaces cannot be grabbed in an undelimited way, so we check them
-% separately. If there is a space, we test for \tn{nullfont}.
-% Otherwise, we go through characters one by one, and stop at the
-% first character less than |`A| (this is not quite a test for
-% \enquote{only letters}, but is close enough to work in this context).
-% If this first character is |:| then we have a primitive, or
-% \cs{tex_undefined:D}, and if it is |"| or a digit, then the token
-% is not a primitive.
-%
-% For \LuaTeX{} we use a different implementation which just looks at the
-% command code for the token and compaes it to a list of non-primitives.
-% Again, \tn{nullfont} is a special case because it is the only primitive
-% with the normally non-primitive |set_font| command code.
-%
-% In LuaMeta\TeX{} some of the command names are different, so we check for
-% both versions. The first one is always the \LuaTeX{} version.
-%
-% \begin{macrocode}
-\sys_if_engine_luatex:TF
- {
-%</tex>
-%<*lua>
-do
- local get_next = token.get_next
- local get_command = token.get_command
- local get_index = token.get_index
- local get_mode = token.get_mode or token.get_index
- local cmd = command_id
- local set_font = cmd'get_font'
- local biggest_char = token.biggest_char and token.biggest_char()
- or status.getconstants().max_character_code
-
- local mode_below_biggest_char = {}
- local index_not_nil = {}
- local mode_not_null = {}
- local non_primitive = {
- [cmd'left_brace'] = true,
- [cmd'right_brace'] = true,
- [cmd'math_shift'] = true,
- [cmd'mac_param' or cmd'parameter'] = mode_below_biggest_char,
- [cmd'sup_mark' or cmd'superscript'] = true,
- [cmd'sub_mark' or cmd'subscript'] = true,
- [cmd'endv' or cmd'ignore'] = true,
- [cmd'spacer'] = true,
- [cmd'letter'] = true,
- [cmd'other_char'] = true,
- [cmd'tab_mark' or cmd'alignment_tab'] = mode_below_biggest_char,
- [cmd'char_given'] = true,
- [cmd'math_given' or 'math_char_given'] = true,
- [cmd'xmath_given' or 'math_char_xgiven'] = true,
- [cmd'set_font'] = mode_not_null,
- [cmd'undefined_cs'] = true,
- [cmd'call'] = true,
- [cmd'long_call' or cmd'protected_call'] = true,
- [cmd'outer_call' or cmd'tolerant_call'] = true,
- [cmd'long_outer_call' or cmd'tolerant_protected_call'] = true,
- [cmd'assign_glue' or cmd'register_glue'] = index_not_nil,
- [cmd'assign_mu_glue' or cmd'register_mu_glue'] = index_not_nil,
- [cmd'assign_toks' or cmd'register_toks'] = index_not_nil,
- [cmd'assign_int' or cmd'register_int'] = index_not_nil,
- [cmd'assign_attr' or cmd'register_attribute'] = true,
- [cmd'assign_dimen' or cmd'register_dimen'] = index_not_nil,
- }
-
- luacmd("@@_if_primitive_lua:N", function()
- local tok = get_next()
- local is_non_primitive = non_primitive[get_command(tok)]
- return put_next(
- is_non_primitive == true
- and false_tok
- or is_non_primitive == nil
- and true_tok
- or is_non_primitive == mode_not_null
- and (get_mode(tok) == 0 and true_tok or false_tok)
- or is_non_primitive == index_not_nil
- and (get_index(tok) and false_tok or true_tok)
- or is_non_primitive == mode_below_biggest_char
- and (get_mode(tok) > biggest_char and true_tok or false_tok))
- end, "global")
-end
-%</lua>
-%<*tex>
- \prg_new_conditional:Npnn \token_if_primitive:N #1 { p , T , F , TF }
- {
- \@@_if_primitive_lua:N #1
- }
- }
- {
- \tex_global:D \tex_chardef:D \c_@@_A_int = `A ~ %
- \use:e
- {
- \prg_new_conditional:Npnn \exp_not:N \token_if_primitive:N #1
- { p , T , F , TF }
- {
- \exp_not:N \token_if_macro:NTF #1
- \exp_not:N \prg_return_false:
- {
- \exp_not:N \exp_after:wN \exp_not:N \@@_if_primitive:NNw
- \exp_not:N \token_to_meaning:N #1
- \tl_to_str:n { : : : } \s_@@_stop #1
- }
- }
- \cs_new:Npn \exp_not:N \@@_if_primitive:NNw
- #1#2 #3 \c_colon_str #4 \s_@@_stop
- {
- \exp_not:N \tl_if_empty:oTF
- { \exp_not:N \@@_if_primitive_space:w #3 ~ }
- {
- \exp_not:N \@@_if_primitive_loop:N #3
- \c_colon_str \s_@@_stop
- }
- { \exp_not:N \@@_if_primitive_nullfont:N }
- }
- }
- \cs_new:Npn \@@_if_primitive_space:w #1 ~ { }
- \cs_new:Npn \@@_if_primitive_nullfont:N #1
- {
- \if_meaning:w \tex_nullfont:D #1
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
- \cs_new:Npn \@@_if_primitive_loop:N #1
- {
- \if_int_compare:w `#1 < \c_@@_A_int %
- \exp_after:wN \@@_if_primitive:Nw
- \exp_after:wN #1
- \else:
- \exp_after:wN \@@_if_primitive_loop:N
- \fi:
- }
- \cs_new:Npn \@@_if_primitive:Nw #1 #2 \s_@@_stop
- {
- \if:w : #1
- \exp_after:wN \@@_if_primitive_undefined:N
- \else:
- \prg_return_false:
- \exp_after:wN \use_none:n
- \fi:
- }
- \cs_new:Npn \@@_if_primitive_undefined:N #1
- {
- \if_cs_exist:N #1
- \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP, noTF]
-% {\token_case_catcode:Nn, \token_case_charcode:Nn, \token_case_meaning:Nn}
-% \begin{macro}[EXP]{\@@_case:NNnTF, \@@_case:NNw, \@@_case_end:nw}
-% The aim here is to allow the case statement to be evaluated
-% using a known number of expansion steps (two), and without
-% needing to use an explicit \enquote{end of recursion} marker.
-% That is achieved by using the test input as the final case,
-% as this is always true. The trick is then to tidy up
-% the output such that the appropriate case code plus either
-% the \texttt{true} or \texttt{false} branch code is inserted.
-% \begin{macrocode}
-\cs_new:Npn \token_case_catcode:Nn #1#2
- { \exp:w \@@_case:NNnTF \token_if_eq_catcode:NNTF #1 {#2} { } { } }
-\cs_new:Npn \token_case_catcode:NnT #1#2#3
- { \exp:w \@@_case:NNnTF \token_if_eq_catcode:NNTF #1 {#2} {#3} { } }
-\cs_new:Npn \token_case_catcode:NnF #1#2
- { \exp:w \@@_case:NNnTF \token_if_eq_catcode:NNTF #1 {#2} { } }
-\cs_new:Npn \token_case_catcode:NnTF
- { \exp:w \@@_case:NNnTF \token_if_eq_catcode:NNTF }
-\cs_new:Npn \token_case_charcode:Nn #1#2
- { \exp:w \@@_case:NNnTF \token_if_eq_charcode:NNTF #1 {#2} { } { } }
-\cs_new:Npn \token_case_charcode:NnT #1#2#3
- { \exp:w \@@_case:NNnTF \token_if_eq_charcode:NNTF #1 {#2} {#3} { } }
-\cs_new:Npn \token_case_charcode:NnF #1#2
- { \exp:w \@@_case:NNnTF \token_if_eq_charcode:NNTF #1 {#2} { } }
-\cs_new:Npn \token_case_charcode:NnTF
- { \exp:w \@@_case:NNnTF \token_if_eq_charcode:NNTF }
-\cs_new:Npn \token_case_meaning:Nn #1#2
- { \exp:w \@@_case:NNnTF \token_if_eq_meaning:NNTF #1 {#2} { } { } }
-\cs_new:Npn \token_case_meaning:NnT #1#2#3
- { \exp:w \@@_case:NNnTF \token_if_eq_meaning:NNTF #1 {#2} {#3} { } }
-\cs_new:Npn \token_case_meaning:NnF #1#2
- { \exp:w \@@_case:NNnTF \token_if_eq_meaning:NNTF #1 {#2} { } }
-\cs_new:Npn \token_case_meaning:NnTF
- { \exp:w \@@_case:NNnTF \token_if_eq_meaning:NNTF }
-\cs_new:Npn \@@_case:NNnTF #1#2#3#4#5
- {
- \@@_case:NNw #1 #2 #3 #2 { }
- \s_@@_mark {#4}
- \s_@@_mark {#5}
- \s_@@_stop
- }
-\cs_new:Npn \@@_case:NNw #1#2#3#4
- {
- #1 #2 #3
- { \@@_case_end:nw {#4} }
- { \@@_case:NNw #1 #2 }
- }
-% \end{macrocode}
-% To tidy up the recursion, there are two outcomes. If there was a hit to
-% one of the cases searched for, then |#1| is the code to insert,
-% |#2| is the \emph{next} case to check on and |#3| is all of
-% the rest of the cases code. That means that |#4| is the \texttt{true}
-% branch code, and |#5| tidies up the spare \cs{s_@@_mark} and the
-% \texttt{false} branch. On the other hand, if none of the cases matched
-% then we arrive here using the \enquote{termination} case of comparing
-% the search with itself. That means that |#1| is empty, |#2| is
-% the first \cs{s_@@_mark} and so |#4| is the \texttt{false} code (the
-% \texttt{true} code is mopped up by |#3|).
-% \begin{macrocode}
-\cs_new:Npn \@@_case_end:nw #1#2#3 \s_@@_mark #4#5 \s_@@_stop
- { \exp_end: #1 #4 }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Peeking ahead at the next token}
-%
-% \begin{macrocode}
-%<@@=peek>
-% \end{macrocode}
-%
-% Peeking ahead is implemented using a two part mechanism. The
-% outer level provides a defined interface to the lower level material.
-% This allows a large amount of code to be shared. There are four
-% cases:
-% \begin{enumerate}
-% \item peek at the next token;
-% \item peek at the next non-space token;
-% \item peek at the next token and remove it;
-% \item peek at the next non-space token and remove it.
-% \end{enumerate}
-%
-% \begin{variable}{\l_peek_token}
-% \begin{variable}{\g_peek_token}
-% Storage tokens which are publicly documented: the token peeked.
-% \begin{macrocode}
-\cs_new_eq:NN \l_peek_token ?
-\cs_new_eq:NN \g_peek_token ?
-% \end{macrocode}
-% \end{variable}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_search_token}
-% The token to search for as an implicit token:
-% \emph{cf.}~\cs{l_@@_search_tl}.
-% \begin{macrocode}
-\cs_new_eq:NN \l_@@_search_token ?
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_search_tl}
-% The token to search for as an explicit token:
-% \emph{cf.}~\cs{l_@@_search_token}.
-% \begin{macrocode}
-\tl_new:N \l_@@_search_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}
-% {\@@_true:w, \@@_true_aux:w, \@@_false:w, \@@_tmp:w}
-% Functions used by the branching and space-stripping code.
-% \begin{macrocode}
-\cs_new:Npn \@@_true:w { }
-\cs_new:Npn \@@_true_aux:w { }
-\cs_new:Npn \@@_false:w { }
-\cs_new:Npn \@@_tmp:w { }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\s_@@_mark,\s_@@_stop}
-% Internal scan marks.
-% \begin{macrocode}
-\scan_new:N \s_@@_mark
-\scan_new:N \s_@@_stop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[EXP]{\@@_use_none_delimit_by_s_stop:w}
-% Functions to gobble up to a scan mark.
-% \begin{macrocode}
-\cs_new:Npn \@@_use_none_delimit_by_s_stop:w #1 \s_@@_stop { }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\peek_after:Nw}
-% \begin{macro}{\peek_gafter:Nw}
-% Simple wrappers for \tn{futurelet}: no arguments absorbed
-% here.
-% \begin{macrocode}
-\cs_new_protected:Npn \peek_after:Nw
- { \tex_futurelet:D \l_peek_token }
-\cs_new_protected:Npn \peek_gafter:Nw
- { \tex_global:D \tex_futurelet:D \g_peek_token }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_true_remove:w}
-% A function to remove the next token and then regain control.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_true_remove:w
- {
- \tex_afterassignment:D \@@_true_aux:w
- \cs_set_eq:NN \@@_tmp:w
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\peek_remove_spaces:n, \@@_remove_spaces:}
-% Repeatedly use \cs{@@_true_remove:w} to remove a space and call
-% \cs{@@_true_aux:w}.
-% \begin{macrocode}
-\cs_new_protected:Npn \peek_remove_spaces:n #1
- {
- \cs_set:Npe \@@_false:w { \exp_not:n {#1} }
- \group_align_safe_begin:
- \cs_set:Npn \@@_true_aux:w { \peek_after:Nw \@@_remove_spaces: }
- \@@_true_aux:w
- }
-\cs_new_protected:Npn \@@_remove_spaces:
- {
- \if_meaning:w \l_peek_token \c_space_token
- \exp_after:wN \@@_true_remove:w
- \else:
- \group_align_safe_end:
- \exp_after:wN \@@_false:w
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\peek_remove_filler:n}
-% \begin{macro}{\@@_remove_filler:w}
-% \begin{macro}{\@@_remove_filler:}
-% \begin{macro}{\@@_remove_filler_expand:w}
-% Here we expand the input, removing spaces and \cs{scan_stop:} tokens until
-% we reach a non-expandable token. At that stage we re-insert the payload.
-% To deal with the problem of |&| tokens, we have to put the align-safe
-% group in the correct place.
-% \begin{macrocode}
-\cs_new_protected:Npn \peek_remove_filler:n #1
- {
- \cs_set:Npn \@@_true_aux:w { \@@_remove_filler:w }
- \cs_set:Npe \@@_false:w
- {
- \exp_not:N \group_align_safe_end:
- \exp_not:n {#1}
- }
- \group_align_safe_begin:
- \@@_remove_filler:w
- }
-\cs_new_protected:Npn \@@_remove_filler:w
- {
- \exp_after:wN \peek_after:Nw \exp_after:wN \@@_remove_filler:
- \exp:w \exp_end_continue_f:w
- }
-% \end{macrocode}
-% Here we can nest conditionals as \cs{l_peek_token} is only skipped over in
-% the nested one if it's a space: no problems with conditionals or outer
-% tokens.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_remove_filler:
- {
- \if_catcode:w \exp_not:N \l_peek_token \c_space_token
- \exp_after:wN \@@_true_remove:w
- \else:
- \if_meaning:w \l_peek_token \scan_stop:
- \exp_after:wN \exp_after:wN \exp_after:wN
- \@@_true_remove:w
- \else:
- \exp_after:wN \exp_after:wN \exp_after:wN
- \@@_remove_filler_expand:w
- \fi:
- \fi:
- }
-% \end{macrocode}
-% To deal with undefined control sequences in the same way \TeX{} does,
-% we need to check for expansion manually.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_remove_filler_expand:w
- {
- \exp_after:wN \if_meaning:w \exp_not:N \l_peek_token \l_peek_token
- \exp_after:wN \@@_false:w
- \else:
- \exp_after:wN \@@_remove_filler:w
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_token_generic_aux:NNNTF}
-% The generic functions store the test token in both implicit and
-% explicit modes, and the \texttt{true} and \texttt{false} code as
-% token lists, more or less. The two branches have to be absorbed here
-% as the input stream needs to be cleared for the peek function itself.
-% Here, |#1| is \cs{@@_true_remove:w} when removing the token and
-% \cs{@@_true_aux:w} otherwise.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_token_generic_aux:NNNTF #1#2#3#4#5
- {
- \group_align_safe_begin:
- \cs_set_eq:NN \l_@@_search_token #3
- \tl_set:Nn \l_@@_search_tl {#3}
- \cs_set:Npe \@@_true_aux:w
- {
- \exp_not:N \group_align_safe_end:
- \exp_not:n {#4}
- }
- \cs_set_eq:NN \@@_true:w #1
- \cs_set:Npe \@@_false:w
- {
- \exp_not:N \group_align_safe_end:
- \exp_not:n {#5}
- }
- \peek_after:Nw #2
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[TF]{\@@_token_generic:NN, \@@_token_remove_generic:NN}
-% For token removal there needs to be a call to the auxiliary
-% function which does the work.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_token_generic:NNTF
- { \@@_token_generic_aux:NNNTF \@@_true_aux:w }
-\cs_new_protected:Npn \@@_token_generic:NNT #1#2#3
- { \@@_token_generic:NNTF #1 #2 {#3} { } }
-\cs_new_protected:Npn \@@_token_generic:NNF #1#2#3
- { \@@_token_generic:NNTF #1 #2 { } {#3} }
-\cs_new_protected:Npn \@@_token_remove_generic:NNTF
- { \@@_token_generic_aux:NNNTF \@@_true_remove:w }
-\cs_new_protected:Npn \@@_token_remove_generic:NNT #1#2#3
- { \@@_token_remove_generic:NNTF #1 #2 {#3} { } }
-\cs_new_protected:Npn \@@_token_remove_generic:NNF #1#2#3
- { \@@_token_remove_generic:NNTF #1 #2 { } {#3} }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_execute_branches_meaning:}
-% The meaning test is straight forward.
-% \begin{macrocode}
-\cs_new:Npn \@@_execute_branches_meaning:
- {
- \if_meaning:w \l_peek_token \l_@@_search_token
- \exp_after:wN \@@_true:w
- \else:
- \exp_after:wN \@@_false:w
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_execute_branches_catcode:, \@@_execute_branches_charcode:}
-% \begin{macro}
-% {
-% \@@_execute_branches_catcode_aux: ,
-% \@@_execute_branches_catcode_auxii:N ,
-% \@@_execute_branches_catcode_auxiii:
-% }
-% The catcode and charcode tests are very similar, and in order to use
-% the same auxiliaries we do something a little bit odd, firing
-% \cs{if_catcode:w} and \cs{if_charcode:w} before finding the operands
-% for those tests, which are only given in the |auxii:N| and
-% |auxiii:| auxiliaries. For our purposes, three kinds of tokens may
-% follow the peeking function:
-% \begin{itemize}
-% \item control sequences which are not equal to a non-active
-% character token (\emph{e.g.}, macro, primitive);
-% \item active characters which are not equal to a non-active
-% character token (\emph{e.g.}, macro, primitive);
-% \item explicit non-active character tokens, or control sequences
-% or active characters set equal to a non-active character token.
-% \end{itemize}
-% The first two cases are not distinguishable simply using \TeX{}'s
-% \tn{futurelet}, because we can only access the \tn{meaning} of
-% tokens in that way. In those cases, detected thanks to a
-% comparison with \cs{scan_stop:}, we grab the following token, and
-% compare it explicitly with the explicit search token stored in
-% \cs{l_@@_search_tl}. The \cs{exp_not:N} prevents outer macros
-% (coming from non-\LaTeX3 code) from blowing up. In the third case,
-% \cs{l_peek_token} is good enough for the test, and we compare it
-% again with the explicit search token. Just like the peek token, the
-% search token may be of any of the three types above, hence the need
-% to use the explicit token that was given to the peek function.
-% \begin{macrocode}
-\cs_new:Npn \@@_execute_branches_catcode:
- { \if_catcode:w \@@_execute_branches_catcode_aux: }
-\cs_new:Npn \@@_execute_branches_charcode:
- { \if_charcode:w \@@_execute_branches_catcode_aux: }
-\cs_new:Npn \@@_execute_branches_catcode_aux:
- {
- \if_catcode:w \exp_not:N \l_peek_token \scan_stop:
- \exp_after:wN \exp_after:wN
- \exp_after:wN \@@_execute_branches_catcode_auxii:N
- \exp_after:wN \exp_not:N
- \else:
- \exp_after:wN \@@_execute_branches_catcode_auxiii:
- \fi:
- }
-\cs_new:Npn \@@_execute_branches_catcode_auxii:N #1
- {
- \exp_not:N #1
- \exp_after:wN \exp_not:N \l_@@_search_tl
- \exp_after:wN \@@_true:w
- \else:
- \exp_after:wN \@@_false:w
- \fi:
- #1
- }
-\cs_new:Npn \@@_execute_branches_catcode_auxiii:
- {
- \exp_not:N \l_peek_token
- \exp_after:wN \exp_not:N \l_@@_search_tl
- \exp_after:wN \@@_true:w
- \else:
- \exp_after:wN \@@_false:w
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[TF]
-% {
-% \peek_catcode:N,
-% \peek_catcode_remove:N,
-% \peek_charcode:N,
-% \peek_charcode_remove:N,
-% \peek_meaning:N,
-% \peek_meaning_remove:N,
-% }
-% The public functions themselves cannot be defined using
-% \cs{prg_new_conditional:Npnn}. Instead, the |TF|, |T|, |F| variants
-% are defined in terms of corresponding variants of
-% \cs{@@_token_generic:NNTF} or \cs{@@_token_remove_generic:NNTF},
-% with first argument one of \cs{@@_execute_branches_catcode:},
-% \cs{@@_execute_branches_charcode:}, or
-% \cs{@@_execute_branches_meaning:}.
-% \begin{macrocode}
-\tl_map_inline:nn { { catcode } { charcode } { meaning } }
- {
- \tl_map_inline:nn { { } { _remove } }
- {
- \tl_map_inline:nn { { TF } { T } { F } }
- {
- \cs_new_protected:cpe { peek_ #1 ##1 :N ####1 }
- {
- \exp_not:c { @@_token ##1 _generic:NN ####1 }
- \exp_not:c { @@_execute_branches_ #1 : }
- }
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[TF]{\peek_N_type:}
-% \begin{macro}
-% {\@@_execute_branches_N_type:, \@@_N_type:w, \@@_N_type_aux:nnw}
-% All tokens are \texttt{N}-type tokens, except in four cases:
-% begin-group tokens, end-group tokens, space tokens with character
-% code~$32$, and outer tokens. Since \cs{l_peek_token} might be
-% outer, we cannot use the convenient \cs{bool_if:nTF} function, and
-% must resort to the old trick of using \tn{ifodd} to expand a set of
-% tests. The \texttt{false} branch of this test is taken if the token
-% is one of the first three kinds of non-\texttt{N}-type tokens
-% (explicit or implicit), thus we call \cs{@@_false:w}. In the
-% \texttt{true} branch, we must detect outer tokens, without impacting
-% performance too much for non-outer tokens. The first filter is to
-% search for \texttt{outer} in the \tn{meaning} of \cs{l_peek_token}.
-% If that is absent, \cs{@@_use_none_delimit_by_s_stop:w} cleans up, and
-% we call \cs{@@_true:w}. Otherwise, the token can be a non-outer
-% macro or a primitive mark whose parameter or replacement text
-% contains \texttt{outer}, it can be the primitive \tn{outer}, or it
-% can be an outer token. Macros and marks would have \texttt{ma} in
-% the part before the first occurrence of \texttt{outer}; the meaning
-% of \tn{outer} has nothing after \texttt{outer}, contrarily to outer
-% macros; and that covers all cases, calling \cs{@@_true:w} or
-% \cs{@@_false:w} as appropriate. Here, there is no \meta{search
-% token}, so we feed a dummy \cs{scan_stop:} to the
-% \cs{@@_token_generic:NNTF} function.
-% \begin{macrocode}
-\group_begin:
- \cs_set_protected:Npn \@@_tmp:w #1 \s_@@_stop
- {
- \cs_new_protected:Npn \@@_execute_branches_N_type:
- {
- \if_int_odd:w
- \if_catcode:w \exp_not:N \l_peek_token { \c_zero_int \fi:
- \if_catcode:w \exp_not:N \l_peek_token } \c_zero_int \fi:
- \if_meaning:w \l_peek_token \c_space_token \c_zero_int \fi:
- \c_one_int
- \exp_after:wN \@@_N_type:w
- \token_to_meaning:N \l_peek_token
- \s_@@_mark \@@_N_type_aux:nnw
- #1 \s_@@_mark \@@_use_none_delimit_by_s_stop:w
- \s_@@_stop
- \exp_after:wN \@@_true:w
- \else:
- \exp_after:wN \@@_false:w
- \fi:
- }
- \cs_new_protected:Npn \@@_N_type:w ##1 #1 ##2 \s_@@_mark ##3
- { ##3 {##1} {##2} }
- }
- \exp_after:wN \@@_tmp:w \tl_to_str:n { outer } \s_@@_stop
-\group_end:
-\cs_new_protected:Npn \@@_N_type_aux:nnw #1 #2 #3 \fi:
- {
- \fi:
- \tl_if_in:noTF {#1} { \tl_to_str:n {ma} }
- { \@@_true:w }
- { \tl_if_empty:nTF {#2} { \@@_true:w } { \@@_false:w } }
- }
-\cs_new_protected:Npn \peek_N_type:TF
- {
- \@@_token_generic:NNTF
- \@@_execute_branches_N_type: \scan_stop:
- }
-\cs_new_protected:Npn \peek_N_type:T
- { \@@_token_generic:NNT \@@_execute_branches_N_type: \scan_stop: }
-\cs_new_protected:Npn \peek_N_type:F
- { \@@_token_generic:NNF \@@_execute_branches_N_type: \scan_stop: }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macrocode}
-%</tex>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/l3unicode.dtx b/macros/latex/contrib/l3kernel/l3unicode.dtx
deleted file mode 100644
index cd552800b0..0000000000
--- a/macros/latex/contrib/l3kernel/l3unicode.dtx
+++ /dev/null
@@ -1,1031 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3unicode.dtx
-%
-% Copyright (C) 2018-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3unicode} module\\ Unicode support functions^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% This module provides Unicode-specific functions along with loading data
-% from a range of Unicode Consortium files. Most of the code here is
-% internal, but there are a small set of public functions. These work with
-% Unicode \meta{codepoints} and are designed to give useable results with
-% both Unicode-aware and $8$-bit engines.
-%
-% \begin{function}[EXP, added = 2022-10-09, updated = 2022-11-09]
-% {\codepoint_generate:nn}
-% \begin{syntax}
-% \cs{codepoint_generate:nn} \Arg{codepoint} \Arg{catcode}
-% \end{syntax}
-% Generates one or more character tokens representing the \meta{codepoint}.
-% With Unicode engines, exactly one character token will be generated, and
-% this will have the \meta{catcode} specified as the second argument:
-% \begin{itemize}
-% \item $1$ (begin group)
-% \item $2$ (end group)
-% \item $3$ (math toggle)
-% \item $4$ (alignment)
-% \item $6$ (parameter)
-% \item $7$ (math superscript)
-% \item $8$ (math subscript)
-% \item $10$ (space)
-% \item $11$ (letter)
-% \item $12$ (other)
-% \item $13$ (active)
-% \end{itemize}
-% For $8$-bit engines, between one and four character tokens will be
-% produced: these will be the bytes of the UTF-8 representation of the
-% \meta{codepoint}. For all codepoints outside of the classical ASCII
-% range, the generated character tokens will be active (category code
-% $13$); for codepoints in the ASCII range, the given \meta{catcode}
-% will be used. To allow the result of this function to be used
-% inside a expansion context, the result is protected by \cs{exp_not:n}.
-%
-% \begin{texnote}
-% Users of (u)p\TeX{} note that these engines are treated as $8$-bit in
-% this context. In particular, for up\TeX{}, irrespective of the
-% \tn{kcatcode} of the \meta{codepoint}, any value outside the ASCII range
-% will result in a series of active bytes being generated.
-% \end{texnote}
-% \end{function}
-%
-% \begin{function}[EXP, added = 2022-10-09]
-% {\codepoint_str_generate:n}
-% \begin{syntax}
-% \cs{codepoint_str_generate:n} \Arg{codepoint}
-% \end{syntax}
-% Generates one or more character tokens representing the \meta{codepoint}.
-% With Unicode engines, exactly one character token will be generated.
-% For $8$-bit engines, between one and four character tokens will be
-% produced: these will be the bytes of the UTF-8 representation of the
-% \meta{codepoint}. All of the generated character tokens will be of
-% category code $12$, except any spaces (codepoint $32$), which will be
-% category code $10$.
-% \end{function}
-%
-% \begin{function}[added = 2023-06-19, EXP]{\codepoint_to_category:n}
-% \begin{syntax}
-% \cs{codepoint_to_category:n} \Arg{codepoint}
-% \end{syntax}
-% Expands to the Unicode general category identifier of the \meta{codepoint}.
-% The general category identifier is a string made up of two letter
-% characters, the first uppercase and the second lowercase. The uppercase
-% letters divide codepoints into broader groups, which are then refined
-% by the lowercase letter. For example, codepoints representing letters
-% all have identifiers starting \texttt{L}, for example \texttt{Lu}
-% (uppercase letter), \texttt{Lt} (titlecase letter), \emph{etc.}
-% Full details are available in the documentation provided by the Unicode
-% Consortium: see
-% \url{https://www.unicode.org/reports/tr44/#General_Category_Values}
-% \end{function}
-%
-% \begin{function}[added = 2022-10-09, EXP]{\codepoint_to_nfd:n}
-% \begin{syntax}
-% \cs{codepoint_to_nfd:n} \Arg{codepoint}
-% \end{syntax}
-% Converts the \meta{codepoint} to the Unicode Normalization
-% Form Canonical Decomposition. The generated character(s) will have
-% the current category code as they would if typed in directly for Unicode
-% engines; for $8$-bit engines, active characters are used for all codepoints
-% outside of the ASCII range.
-% \end{function}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3unicode} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<@@=codepoint>
-% \end{macrocode}
-%
-% \subsection{User functions}
-%
-% \begin{macro}[EXP]{\codepoint_str_generate:n}
-% \begin{macro}[EXP]{\@@_str_generate:nnnn}
-% \begin{macro}[EXP]{\codepoint_generate:nn}
-% \begin{macro}[EXP]{\@@_generate:nnnn}
-% \begin{macro}[EXP]{\@@_generate:n}
-% Conversion of a codepoint to a character (Unicode engines) or to one
-% or more bytes ($8$-bit engines) is required. For loading the data,
-% all that is needed is the form which creates strings: these are outside
-% the group as they will also be used when looking up data in the hash
-% table storage at point-of-use. Later, we will also need functions that
-% can generate character tokens for document use: those are defined below,
-% in the data recovery setup.
-% \begin{macrocode}
-\bool_lazy_or:nnTF
- { \sys_if_engine_luatex_p: }
- { \sys_if_engine_xetex_p: }
- {
- \cs_new:Npn \codepoint_str_generate:n #1
- {
- \int_compare:nNnTF {#1} = { `\ }
- { ~ }
- { \char_generate:nn {#1} { 12 } }
- }
- \cs_new:Npn \codepoint_generate:nn #1#2
- {
- \int_compare:nNnTF {#1} = { `\ }
- { ~ }
- {
- \__kernel_exp_not:w \exp_after:wN \exp_after:wN \exp_after:wN
- { \char_generate:nn {#1} {#2} }
- }
- }
- }
- {
- \cs_new:Npn \codepoint_str_generate:n #1
- {
- \int_compare:nNnTF {#1} = { `\ }
- { ~ }
- {
- \use:e
- {
- \exp_not:N \@@_str_generate:nnnn
- \__kernel_codepoint_to_bytes:n {#1}
- }
- }
- }
- \cs_new:Npn \@@_str_generate:nnnn #1#2#3#4
- {
- \char_generate:nn {#1} { 12 }
- \tl_if_blank:nF {#2}
- {
- \char_generate:nn {#2} { 12 }
- \tl_if_blank:nF {#3}
- {
- \char_generate:nn {#3} { 12 }
- \tl_if_blank:nF {#4}
- { \char_generate:nn {#4} { 12 } }
- }
- }
- }
- \cs_new:Npn \codepoint_generate:nn #1#2
- {
- \int_compare:nNnTF {#1} = { `\ }
- { ~ }
- {
- \int_compare:nNnTF {#1} < { "80 }
- {
- \__kernel_exp_not:w \exp_after:wN \exp_after:wN \exp_after:wN
- { \char_generate:nn {#1} {#2} }
- }
- {
- \use:e
- {
- \exp_not:N \@@_generate:nnnn
- \__kernel_codepoint_to_bytes:n {#1}
- }
- }
- }
- }
- \cs_new:Npn \@@_generate:nnnn #1#2#3#4
- {
- \__kernel_exp_not:w \exp_after:wN
- {
- \tex_expanded:D
- {
- \@@_generate:n {#1}
- \@@_generate:n {#2}
- \tl_if_blank:nF {#3}
- {
- \@@_generate:n {#3}
- \tl_if_blank:nF {#4}
- { \@@_generate:n {#4} }
- }
- }
- }
- }
- \cs_new:Npn \@@_generate:n #1
- {
- \__kernel_exp_not:w \exp_after:wN \exp_after:wN \exp_after:wN
- { \char_generate:nn {#1} { 13 } }
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\__kernel_codepoint_to_bytes:n}
-% \begin{macro}[EXP]{\@@_to_bytes_auxi:n}
-% \begin{macro}[EXP]{\@@_to_bytes_auxii:Nnn}
-% \begin{macro}[EXP]{\@@_to_bytes_auxiii:n}
-% \begin{macro}[EXP]
-% {
-% \@@_to_bytes_outputi:nw ,
-% \@@_to_bytes_outputii:nw ,
-% \@@_to_bytes_outputiii:nw ,
-% \@@_to_bytes_outputiv:nw
-% }
-% \begin{macro}[EXP]
-% {\@@_to_bytes_output:nnn, \@@_to_bytes_output:fnn}
-% \begin{macro}[EXP]{\@@_to_bytes_end:}
-% This code converts a codepoint into the correct UTF-8 representation.
-% In terms of the algorithm itself, see
-% \url{https://en.wikipedia.org/wiki/UTF-8} for the octet pattern.
-% \begin{macrocode}
-\cs_new:Npn \__kernel_codepoint_to_bytes:n #1
- {
- \exp_args:Nf \@@_to_bytes_auxi:n
- { \int_eval:n {#1} }
- }
-\cs_new:Npn \@@_to_bytes_auxi:n #1
- {
- \if_int_compare:w #1 > "80 \exp_stop_f:
- \if_int_compare:w #1 < "800 \exp_stop_f:
- \@@_to_bytes_outputi:nw
- { \@@_to_bytes_auxii:Nnn C {#1} { 64 } }
- \@@_to_bytes_outputii:nw
- { \@@_to_bytes_auxiii:n {#1} }
- \else:
- \if_int_compare:w #1 < "10000 \exp_stop_f:
- \@@_to_bytes_outputi:nw
- { \@@_to_bytes_auxii:Nnn E {#1} { 64 * 64 } }
- \@@_to_bytes_outputii:nw
- {
- \@@_to_bytes_auxiii:n
- { \int_div_truncate:nn {#1} { 64 } }
- }
- \@@_to_bytes_outputiii:nw
- { \@@_to_bytes_auxiii:n {#1} }
- \else:
- \@@_to_bytes_outputi:nw
- {
- \@@_to_bytes_auxii:Nnn F
- {#1} { 64 * 64 * 64 }
- }
- \@@_to_bytes_outputii:nw
- {
- \@@_to_bytes_auxiii:n
- { \int_div_truncate:nn {#1} { 64 * 64 } }
- }
- \@@_to_bytes_outputiii:nw
- {
- \@@_to_bytes_auxiii:n
- { \int_div_truncate:nn {#1} { 64 } }
- }
- \@@_to_bytes_outputiv:nw
- { \@@_to_bytes_auxiii:n {#1} }
- \fi:
- \fi:
- \else:
- \@@_to_bytes_outputi:nw {#1}
- \fi:
- \@@_to_bytes_end: { } { } { } { }
- }
-\cs_new:Npn \@@_to_bytes_auxii:Nnn #1#2#3
- { "#10 + \int_div_truncate:nn {#2} {#3} }
-\cs_new:Npn \@@_to_bytes_auxiii:n #1
- { \int_mod:nn {#1} { 64 } + 128 }
-\cs_new:Npn \@@_to_bytes_outputi:nw
- #1 #2 \@@_to_bytes_end: #3
- { \@@_to_bytes_output:fnn { \int_eval:n {#1} } { } {#2} }
-\cs_new:Npn \@@_to_bytes_outputii:nw
- #1 #2 \@@_to_bytes_end: #3#4
- { \@@_to_bytes_output:fnn { \int_eval:n {#1} } { {#3} } {#2} }
-\cs_new:Npn \@@_to_bytes_outputiii:nw
- #1 #2 \@@_to_bytes_end: #3#4#5
- {
- \@@_to_bytes_output:fnn
- { \int_eval:n {#1} } { {#3} {#4} } {#2}
- }
-\cs_new:Npn \@@_to_bytes_outputiv:nw
- #1 #2 \@@_to_bytes_end: #3#4#5#6
- {
- \@@_to_bytes_output:fnn
- { \int_eval:n {#1} } { {#3} {#4} {#5} } {#2}
- }
-\cs_new:Npn \@@_to_bytes_output:nnn #1#2#3
- {
- #3
- \@@_to_bytes_end: #2 {#1}
- }
-\cs_generate_variant:Nn \@@_to_bytes_output:nnn { f }
-\cs_new:Npn \@@_to_bytes_end: { }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\codepoint_to_category:n}
-% Get the value and convert back to the string.
-% \begin{macrocode}
-\cs_new:Npn \codepoint_to_category:n #1
- {
- \cs:w
- c_@@_category_
- \tex_romannumeral:D
- \__kernel_codepoint_data:nn { category } {#1}
- _str
- \cs_end:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\codepoint_to_nfd:n, \@@_to_nfd:n}
-% \begin{macro}[EXP]{\@@_to_nfd:nn}
-% \begin{macro}[EXP]{\@@_to_nfd:nnn}
-% \begin{macro}[EXP]{\@@_to_nfd:nnnn}
-% Converted to NFD is a potentially-recursive process: the key is to
-% check if we get the input codepoint back again. As far as possible,
-% we use the same path for all engines.
-% \begin{macrocode}
-\cs_new:Npn \codepoint_to_nfd:n #1
- { \exp_args:Ne \@@_to_nfd:n { \int_eval:n {#1} } }
-\cs_new:Npn \@@_to_nfd:n #1
- { \@@_to_nfd:nn {#1} { \char_value_catcode:n {#1} } }
-\bool_lazy_or:nnF
- { \sys_if_engine_luatex_p: }
- { \sys_if_engine_xetex_p: }
- {
- \cs_gset:Npn \@@_to_nfd:n #1
- {
- \int_compare:nNnTF {#1} > { "80 }
- { \@@_to_nfd:nn {#1} { 12 } }
- { \@@_to_nfd:nn {#1} { \char_value_catcode:n {#1} } }
- }
- }
-\cs_new:Npn \@@_to_nfd:nn #1#2
- {
- \exp_args:Ne \@@_to_nfd:nnn
- { \@@_nfd:n {#1} } {#1} {#2}
- }
-\cs_new:Npn \@@_to_nfd:nnn #1#2#3 { \@@_to_nfd:nnnn #1 {#2} {#3} }
-\cs_new:Npn \@@_to_nfd:nnnn #1#2#3#4
- {
- \int_compare:nNnTF {#1} = {#3}
- { \codepoint_generate:nn {#1} {#4} }
- {
- \@@_to_nfd:nn {#1} {#4}
- \tl_if_blank:nF {#2}
- { \@@_to_nfd:nn {#2} {#4} }
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsection{Data loader}
-%
-% Text operations requires data from the Unicode Consortium. Data read into
-% Unicode engine formats is at best a small part of what we need, so there
-% is a loader here to set up the appropriate data structures.
-%
-% Where we need data for most or all of the Unicode range, we use the two-stage
-% table approach recommended by the Unicode Consortium and demonstrated in a
-% model implementation in Python in
-% \url{https://www.strchr.com/multi-stage_tables}. This approach uses the
-% \texttt{intarray} (\texttt{fontdimen}-based) data type as it is fast for
-% random access and avoids significant hash table usage. In contrast, where
-% only a small subset of codepoints are required, storage as macros is
-% preferable. There is also some consideration of the effort needed to load
-% data: see for example the grapheme breaking information, which would be
-% problematic to convert into a two-stage table but which can be used with
-% reasonable performance in a small number of comma lists (at the cost that
-% breaking at higher codepoint Hangul characters will be slightly slow).
-%
-% \begin{variable}{\c_@@_block_size_int}
-% Choosing the block size for the blocks in the two-stage approach is
-% non-trivial: depending on the data stored, the optimal size for
-% memory usage will vary. At the same time, for us there is also the
-% question of load-time: larger blocks require longer comma lists
-% as intermediates, so are slower. As this is going to be needed
-% to use the data, we set it up outside of the group for clarity.
-% \begin{macrocode}
-\int_const:Nn \c_@@_block_size_int { 64 }
-% \end{macrocode}
-% \end{variable}
-%
-% Parsing the data files can be the same way for all engines, but where they
-% are stored as character tokens, the construction method depends on whether
-% they are Unicode or $8$-bit internally. Parsing is therefore done by common
-% functions, with some data storage using engine-specific auxiliaries.
-%
-% As only the data needs to remain at the end of this process, everything
-% is set up inside a group. The only thing that is outside is creating a
-% stream: they are global anyway and it is best to force a stream for
-% all engines.
-%
-% \begin{variable}{\g_@@_data_ior}
-% \begin{macrocode}
-\ior_new:N \g_@@_data_ior
-% \end{macrocode}
-% \end{variable}
-%
-% We need some setup for the two-part table approach. The number of blocks we
-% need will be variable, but the resulting size of the stage one table
-% is predictable. For performance reasons, we therefore create the stage one
-% tables now so they can be used immediately, and will later rename them as a
-% constant tables. For each two-stage table construction, we need a comma
-% list to hold the partial block and a couple of integers to track where
-% we are up to. To avoid burning registers, the latter are stored in macros
-% and are \enquote{fake} integers. We also avoid any \texttt{new} functions,
-% keeping as much as possible local.
-%
-% As we need both positive and negative values, case data requires one
-% two-stage table for each transformation. In contrasts, general Unicode
-% properties could be stored in one table with appropriate combination rules:
-% that is not done at present but is likely to be added over time. Here, all
-% that is needed is additional entries into the comma-list to create the
-% structures.
-%
-% Notice that in the standard \pkg{expl3} way we are indexes position not
-% offset: that does mean a little work later.
-% \begin{macrocode}
-\group_begin:
- \clist_map_inline:nn
- { category , uppercase , lowercase }
- {
- \cs_set_nopar:cpn { l_@@_ #1 _block_clist } { }
- \cs_set_nopar:cpn { l_@@_ #1 _block_tl } { 1 }
- \cs_set_nopar:cpn { l_@@_ #1 _pos_tl } { 0 }
- \intarray_new:cn { g_@@_ #1 _index_intarray }
- { \int_div_truncate:nn { "110000 } \c_@@_block_size_int }
- }
-% \end{macrocode}
-% We need an integer value when matching the current block to those we have
-% already seen, and a way to track codepoints for handling ranges. Again,
-% we avoid using up registers or creating global names.
-% \begin{macrocode}
- \cs_set_nopar:Npn \l_@@_next_codepoint_fint_tl { 0 }
- \cs_set_nopar:Npn \l_@@_matched_block_tl { 0 }
-% \end{macrocode}
-% For Unicode general category, there needs to be numerical representation of
-% each possible value. As we need to go from string to number here, but the
-% other way elsewhere, we set up fast mappings both ways, but one set local
-% and the other as constants.
-% \begin{macrocode}
- \cs_set_protected:Npn \@@_data_auxi:w #1#2
- {
- \quark_if_recursion_tail_stop:n {#2}
- \cs_set_nopar:cpn { l_@@_category_ #2 _tl } {#1}
- \str_const:cn { c_@@_category_ \tex_romannumeral:D #1 _str } {#2}
- \exp_args:Ne \@@_data_auxi:w { \int_eval:n { #1 + 1 } }
- }
- \@@_data_auxi:w { 1 }
- { Lu } { Ll } { Lt } { Lm } { Lo }
- { Mn } { Me } { Mc }
- { Nd } { Nl } { No }
- { Zs } { Zl } { Zp }
- { Cc } { Cf } { Co } { Cs } { Cn }
- { Pd } { Ps } { Pe } { Pc } { Po } { Pi } { Pf }
- { Sm } { Sc } { Sk } { So }
- \q_recursion_tail
- \q_recursion_stop
-% \end{macrocode}
-% Parse the main Unicode data file and pull out the NFD and case changing
-% data. The NFD data is stored on using the hash table approach and can yield
-% a predictable number of codepoints: one or two. We also need the case data,
-% which will be modified further below. To allow for finding ranges, the
-% description of the codepoint needs to be carried forward.
-% \begin{macrocode}
- \cs_set_protected:Npn \@@_data_auxi:w
- #1 ; #2 ; #3 ; #4 ; #5 ; #6 ; #7 ; #8 ; #9 ;
- {
- \tl_if_blank:nF {#6}
- {
- \tl_if_head_eq_charcode:nNF {#6} < % >
- { \@@_data_auxii:w #1 ; #6 ~ \q_stop }
- }
- \@@_data_auxiii:w #1 ; #2 ; #3 ;
- }
- \cs_set_protected:Npn \@@_data_auxii:w #1 ; #2 ~ #3 \q_stop
- {
- \tl_const:ce
- { c_@@_nfd_ \codepoint_str_generate:n {"#1} _tl }
- {
- {"#2}
- { \tl_if_blank:nF {#3} {"#3} }
- }
- }
-% \end{macrocode}
-% The category data needs to be converted from a string to the numerical
-% equivalent: a simple operation.
-% The case data is going to be stored as an offset from the parent character,
-% rather than an absolute value. We therefore deal with that plus the situation
-% where a codepoint has no mapping data in one shot.
-% \begin{macrocode}
- \cs_set_protected:Npn \@@_data_auxiii:w
- #1 ; #2 ; #3 ; #4 ; #5 ; #6 ; #7 ; #8 ; #9 ~ \q_stop
- {
- \use:e
- {
- \@@_data_auxiv:w
- #1 ; #2 ;
- \@@_data_category:n {#3} ;
- \@@_data_offset:nn {#1} {#7} ;
- \@@_data_offset:nn {#1} {#8} ;
- #9;
- }
- }
- \cs_set:Npn \@@_data_category:n #1
- { \use:c { l_@@_category_ #1 _tl } }
- \cs_set:Npn \@@_data_offset:nn #1#2
- {
- \tl_if_blank:nTF {#2}
- { 0 }
- { \int_eval:n { "#2 - "#1 } }
- }
-% \end{macrocode}
-% To deal with ranges, we track the position of the next codepoint expected.
-% If there is a gap, we deal with that separately: it could be a range or
-% an unused part of the Unicode space. As such, we deal with the current
-% codepoint here whether or not there is range to fill in. Upper- and
-% lowercase data go into the two-stage table, any titlecase exception is
-% just stored in a macro. The data for the codepoint is added to the current
-% block, and if that is now complete we move on to save the block. The
-% case exceptions are all stored as codepoints, with a fixed number of
-% balanced text as we know that there are never more than three.
-% \begin{macrocode}
- \cs_set_protected:Npn \@@_data_auxiv:w #1 ; #2 ; #3 ; #4 ; #5 ; #6 ;
- {
- \int_compare:nNnT {"#1} > \l_@@_next_codepoint_fint_tl
- {
- \@@_data_auxv:nnnnw {#1} {#3} {#4} {#5}
- #2 Last> \q_stop
- }
- \@@_add:nn { category } {#3}
- \@@_add:nn { uppercase } {#4}
- \@@_add:nn { lowercase } {#5}
- \int_compare:nNnF {#4} = { \@@_data_offset:nn {#1} {#6} }
- {
- \tl_const:ce
- { c_@@_titlecase_ \codepoint_str_generate:n {"#1} _tl }
- { {"#6} { } { } }
- }
- \tl_set:Ne \l_@@_next_codepoint_fint_tl
- { \int_eval:n { "#1 + 1 } }
- }
- \cs_set_protected:Npn \@@_add:nn #1#2
- {
- \clist_put_right:cn { l_@@_ #1 _block_clist } {#2}
- \int_compare:nNnT { \clist_count:c { l_@@_ #1 _block_clist } }
- = \c_@@_block_size_int
- { \@@_save_blocks:nn {#1} { 1 } }
- }
-% \end{macrocode}
-% Distinguish between a range and a gap, and pass on the appropriate value(s).
-% The general category for unassigned characters is \texttt{Cn}, so we
-% find the correct value once and then use that.
-% \begin{macrocode}
- \cs_set_protected:Npe \@@_data_auxv:nnnnw #1#2#3#4#5 Last> #6 \q_stop
- {
- \exp_not:N \tl_if_blank:nTF {#6}
- {
- \exp_not:N \@@_range:nnn {#1} { category }
- { \exp_not:V \l_@@_category_Cn_tl }
- \exp_not:N \@@_range:nnn {#1} { uppercase } { 0 }
- \exp_not:N \@@_range:nnn {#1} { lowercase } { 0 }
- }
- {
- \exp_not:N \@@_range:nnn {#1} { category } {#2}
- \exp_not:N \@@_range:nnn {#1} { uppercase } {#3}
- \exp_not:N \@@_range:nnn {#1} { lowercase } {#4}
- }
- }
-% \end{macrocode}
-% Calculated the length of the range and the space remaining in the current
-% block.
-% \begin{macrocode}
- \cs_set_protected:Npn \@@_range:nnn #1
- {
- \exp_args:Nf \@@_range_aux:nnn
- { \int_eval:n { "#1 - \l_@@_next_codepoint_fint_tl } }
- }
- \cs_set_protected:Npn \@@_range_aux:nnn #1#2
- {
- \exp_args:Nf \@@_range:nnnn
- {
- \int_min:nn
- {#1}
- {
- \c_@@_block_size_int
- - \clist_count:c { l_@@_ #2 _block_clist }
- }
- }
- {#1} {#2}
- }
-% \end{macrocode}
-% Here we want to do three things: add to and possibly complete the current
-% block, add complete blocks quickly, then finish up the range in a final
-% open block. We need to avoid as far as possible avoid dealing with every
-% single codepoint, so the middle step is optimised.
-% \begin{macrocode}
- \cs_set_protected:Npn \@@_range:nnnn #1#2#3#4
- {
- \prg_replicate:nn {#1}
- { \clist_put_right:cn { l_@@_ #3 _block_clist } {#4} }
- \int_compare:nNnT { \clist_count:c { l_@@_ #3 _block_clist } }
- = \c_@@_block_size_int
- { \@@_save_blocks:nn {#3} { 1 } }
- \int_compare:nNnF
- { \int_div_truncate:nn { #2 - #1 } \c_@@_block_size_int } = 0
- {
- \tl_set:ce { l_@@_ #3 _block_clist }
- {
- \exp_args:NNe \use:nn \use_none:n
- { \prg_replicate:nn { \c_@@_block_size_int } { , #4 } }
- }
- \@@_save_blocks:nn {#3}
- { \int_div_truncate:nn { (#2 - #1) } \c_@@_block_size_int }
- }
- \prg_replicate:nn
- { \int_mod:nn { #2 - #1 } \c_@@_block_size_int }
- { \clist_put_right:ce { l_@@_ #3 _block_clist } {#4} }
- }
-% \end{macrocode}
-% To allow rapid comparison, each completed block is stored locally as a
-% comma list: once all of the blocks have been created, they are converted
-% into an \texttt{intarray} in one step. The aim here is to check the current
-% block against those we've already used, and either match to an existing
-% block or save a new block.
-% \begin{macrocode}
- \cs_set_protected:Npn \@@_save_blocks:nn #1#2
- {
- \tl_set_eq:Nc \l_@@_matched_block_tl { l_@@_ #1 _block_tl }
- \int_step_inline:nn { \tl_use:c { l_@@_ #1 _block_tl } - 1 }
- {
- \tl_if_eq:ccT { l_@@_ #1 _block_clist }
- { l_@@_ #1 _block_ ##1 _clist }
- { \tl_set:Nn \l_@@_matched_block_tl {##1} }
- }
- \int_compare:nNnT
- { \tl_use:c { l_@@_ #1 _block_tl } } = \l_@@_matched_block_tl
- {
- \clist_set_eq:cc
- {
- l_@@_ #1 _block_
- \tl_use:c { l_@@_ #1 _block_tl } _clist
- }
- { l_@@_ #1 _block_clist }
- \tl_set:ce { l_@@_ #1 _block_tl }
- { \int_eval:n { \tl_use:c { l_@@_ #1 _block_tl } + 1 } }
- }
- \prg_replicate:nn {#2}
- {
- \tl_set:ce { l_@@_ #1 _pos_tl }
- { \int_eval:n { \tl_use:c { l_@@_ #1 _pos_tl } + 1 } }
- \exp_args:Nc \__kernel_intarray_gset:Nnn
- { g_@@_ #1 _index_intarray }
- { \tl_use:c { l_@@_ #1 _pos_tl } }
- \l_@@_matched_block_tl
- }
- \clist_clear:c { l_@@_ #1 _block_clist }
- }
-% \end{macrocode}
-% Close out the final block, rename the first stage table, then combine all
-% of the block comma-lists into one large second-stage table with offsets.
-% As we use an index not an offset, there is a little back-and-forward to do.
-% \begin{macrocode}
- \cs_set_protected:Npn \@@_finalise_blocks:
- {
- \clist_map_inline:nn { category , uppercase , lowercase }
- {
- \@@_range:nnn { 110000 } {##1} { 0 }
- \@@_finalise_blocks:n {##1}
- }
- }
- \cs_set_protected:Npn \@@_finalise_blocks:n #1
- {
- \cs_gset_eq:cc { c_@@_ #1 _index_intarray } { g_@@_ #1 _index_intarray }
- \cs_undefine:c { g_@@_ #1 _index_intarray }
- \intarray_new:cn { g_@@_ #1 _blocks_intarray }
- { ( \tl_use:c { l_@@_ #1 _block_tl } - 1 ) * \c_@@_block_size_int }
- \int_step_inline:nn { \tl_use:c { l_@@_ #1 _block_tl } - 1 }
- {
- \exp_args:Nv \@@_finalise_blocks:nnn
- { l_@@_ #1 _block_ ##1 _clist }
- {##1} {#1}
- }
- \cs_gset_eq:cc { c_@@_ #1 _blocks_intarray }
- { g_@@_ #1 _blocks_intarray }
- \cs_undefine:c { g_@@_ #1 _blocks_intarray }
- }
- \cs_set_protected:Npn \@@_finalise_blocks:nnn #1#2#3
- {
- \exp_args:Nnf \@@_finalise_blocks:nnnw { 1 }
- { \int_eval:n { ( #2 - 1 ) * \c_@@_block_size_int } }
- {#3}
- #1 , \q_recursion_tail , \q_recursion_stop
- }
- \cs_set_protected:Npn \@@_finalise_blocks:nnnw #1#2#3#4 ,
- {
- \quark_if_recursion_tail_stop:n {#4}
- \intarray_gset:cnn { g_@@_ #3 _blocks_intarray }
- { #1 + #2 }
- {#4}
- \exp_args:Nf \@@_finalise_blocks:nnnw
- { \int_eval:n { #1 + 1 } } {#2} {#3}
- }
-% \end{macrocode}
-% With the setup done, read the main data file: it's easiest to do that as
-% a token list with spaces retained.
-% \begin{macrocode}
- \ior_open:Nn \g_@@_data_ior { UnicodeData.txt }
- \group_begin:
- \char_set_catcode_space:n { `\ }%
- \ior_map_variable:NNn \g_@@_data_ior \l_@@_tmpa_tl
- {%
- \if_meaning:w \l_@@_tmpa_tl \c_space_tl
- \exp_after:wN \ior_map_break:
- \fi:
- \exp_after:wN \@@_data_auxi:w \l_@@_tmpa_tl \q_stop
- }%
- \@@_finalise_blocks:
- \group_end:
-\group_end:
-% \end{macrocode}
-%
-% \begin{macro}[EXP]{\__kernel_codepoint_data:nn}
-% \begin{macro}[EXP]{\@@_data:nnn}
-% Recover data from a two-stage table: entirely generic as this applies to
-% all tables (as we use the same block size for all of them). Notice that
-% as we use indices not offsets we have to shuffle out-by-one issues. This
-% function is needed \emph{before} loading the special casing data, as there
-% we need to be able to check the standard case mappings.
-% \begin{macrocode}
-\cs_new:Npn \__kernel_codepoint_data:nn #1#2
- {
- \exp_args:Nf \@@_data:nnn
- {
- \int_eval:n
- {
- \c_@@_block_size_int *
- (
- \intarray_item:cn { c_@@_ #1 _index_intarray }
- {
- \int_div_truncate:nn {#2}
- \c_@@_block_size_int
- + 1
- }
- - 1
- )
- }
- }
- {#2} {#1}
- }
-\cs_new:Npn \@@_data:nnn #1#2#3
- {
- \intarray_item:cn { c_@@_ #3 _blocks_intarray }
- { #1 + \int_mod:nn {#2} \c_@@_block_size_int + 1 }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% The other data files all use C-style comments so we have to worry about
-% |#| tokens (and reading as strings). The set up for case folding is in two
-% parts. For the basic (core) mappings, folding is the same as lower casing in
-% most positions so only store the differences. For the more complex foldings,
-% always store the result, splitting up the two or three code points in the input
-% as required.
-% \begin{macrocode}
-\group_begin:
- \ior_open:Nn \g_@@_data_ior { CaseFolding.txt }
- \cs_set_protected:Npn \@@_data_auxi:w #1 ;~ #2 ;~ #3 ; #4 \q_stop
- {
- \if:w \tl_head:n { #2 ? } C
- \reverse_if:N \if_int_compare:w
- \int_eval:n { \__kernel_codepoint_data:nn { lowercase } {"#1} + "#1 }
- = "#3 ~
- \tl_const:ce
- { c_@@_casefold_ \codepoint_str_generate:n {"#1} _tl }
- { {"#3} { } { } }
- \fi:
- \else:
- \if:w \tl_head:n { #2 ? } F
- \@@_data_auxii:w #1 ~ #3 ~ \q_stop
- \fi:
- \fi:
- }
-% \end{macrocode}
-% Here, |#4| can have a trailing space, so we tidy up a bit at the cost of
-% speed for these small number of cases it applies to.
-% \begin{macrocode}
- \cs_set_protected:Npn \@@_data_auxii:w #1 ~ #2 ~ #3 ~ #4 \q_stop
- {
- \tl_const:ce { c_@@_casefold_ \codepoint_str_generate:n {"#1} _tl }
- {
- {"#2}
- {"#3}
- { \tl_if_blank:nF {#4} { " \int_to_Hex:n {"#4} } }
- }
- }
- \ior_str_map_inline:Nn \g_@@_data_ior
- {
- \reverse_if:N \if:w \c_hash_str \tl_head:w #1 \c_hash_str \q_stop
- \@@_data_auxi:w #1 \q_stop
- \fi:
- }
- \ior_close:N \g_@@_data_ior
-% \end{macrocode}
-% For upper- and lowercasing special situations, there is a bit more to
-% do as we also have titlecasing to consider, plus we need to stop part-way
-% through the file.
-% \begin{macrocode}
- \ior_open:Nn \g_@@_data_ior { SpecialCasing.txt }
- \cs_set_protected:Npn \@@_data_auxi:w
- #1 ;~ #2 ;~ #3 ;~ #4 ; #5 \q_stop
- {
- \use:n { \@@_data_auxii:w #1 ~ lower ~ #2 ~ } ~ \q_stop
- \use:n { \@@_data_auxii:w #1 ~ upper ~ #4 ~ } ~ \q_stop
- \str_if_eq:nnF {#3} {#4}
- { \use:n { \@@_data_auxii:w #1 ~ title ~ #3 ~ } ~ \q_stop }
- }
- \cs_set_protected:Npn \@@_data_auxii:w
- #1 ~ #2 ~ #3 ~ #4 ~ #5 \q_stop
- {
- \tl_if_empty:nF {#4}
- {
- \tl_const:ce { c_@@_ #2 case_ \codepoint_str_generate:n {"#1} _tl }
- {
- {"#3}
- {"#4}
- { \tl_if_blank:nF {#5} {"#5} }
- }
- }
- }
- \ior_str_map_inline:Nn \g_@@_data_ior
- {
- \str_if_eq:eeTF { \tl_head:w #1 \c_hash_str \q_stop } { \c_hash_str }
- {
- \str_if_eq:eeT
- {#1}
- { \c_hash_str \c_space_tl Conditional~Mappings }
- { \ior_map_break: }
- }
- { \@@_data_auxi:w #1 \q_stop }
- }
- \ior_close:N \g_@@_data_ior
-\group_end:
-% \end{macrocode}
-%
-% \begin{macro}[EXP]{\__kernel_codepoint_case:nn}
-% \begin{macro}[EXP]{\@@_case:nnn}
-% \begin{macro}[EXP]
-% {\@@_uppercase:n, \@@_lowercase:n, \@@_titlecase:n, \@@_casefold:n}
-% \begin{macro}[EXP]{\@@_case:nn}
-% With the core data files loaded, there is now a need to provide access to
-% this information for other modules. That is done here such that case
-% folding can also be covered. At this level, all that needs to be returned
-% is the
-% \begin{macrocode}
-\cs_new:Npn \__kernel_codepoint_case:nn #1#2
- {
- \exp_args:Ne \@@_case:nnn
- { \codepoint_str_generate:n {#2} } {#1} {#2}
- }
-\cs_new:Npn \@@_case:nnn #1#2#3
- {
- \cs_if_exist:cTF { c_@@_ #2 _ #1 _tl }
- {
- \tl_use:c
- { c_@@_ #2 _ #1 _tl }
- }
- { \use:c { @@_ #2 :n } {#3} }
- }
-\cs_new:Npn \@@_uppercase:n { \@@_case:nn { uppercase } }
-\cs_new:Npn \@@_lowercase:n { \@@_case:nn { lowercase } }
-\cs_new:Npn \@@_titlecase:n { \@@_case:nn { uppercase } }
-\cs_new:Npn \@@_casefold:n { \@@_case:nn { lowercase } }
-\cs_new:Npn \@@_case:nn #1#2
- {
- { \int_eval:n { \__kernel_codepoint_data:nn {#1} {#2} + #2 } }
- { }
- { }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_nfd:n}
-% \begin{macro}[EXP]{\@@_nfd:nn}
-% A simple interface.
-% \begin{macrocode}
-\cs_new:Npn \@@_nfd:n #1
- { \exp_args:Ne \@@_nfd:nn { \codepoint_str_generate:n {#1} } {#1} }
-\cs_new:Npn \@@_nfd:nn #1#2
- {
- \tl_if_exist:cTF { c_@@_nfd_ #1 _tl }
- { \tl_use:c { c_@@_nfd_ #1 _tl } }
- { {#2} { } }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macrocode}
-%<@@=text>
-% \end{macrocode}
-%
-% Read the Unicode grapheme data. This is quite easy to handle and we only need
-% codepoints, not characters, so there is no need to worry about the engine in use.
-% As reading as a string is most convenient, we have to do some work to remove
-% spaces: the hardest part of the entire process!
-% \begin{macrocode}
-\ior_new:N \g_@@_data_ior
-\group_begin:
- \ior_open:Nn \g_@@_data_ior { GraphemeBreakProperty.txt }
- \cs_set_nopar:Npn \l_@@_tmpa_str { }
- \cs_set_nopar:Npn \l_@@_tmpb_str { }
- \cs_set_protected:Npn \@@_data_auxi:w #1 ;~ #2 ~ #3 \q_stop
- {
- \str_if_eq:VnF \l_@@_tmpb_str {#2}
- {
- \str_if_empty:NF \l_@@_tmpb_str
- {
- \clist_const:ce { c_@@_grapheme_ \l_@@_tmpb_str _clist }
- { \exp_after:wN \use_none:n \l_@@_tmpa_str }
- \cs_set_nopar:Npn \l_@@_tmpa_str { }
- }
- \cs_set_nopar:Npn \l_@@_tmpb_str {#2}
- }
- \@@_data_auxii:w #1 .. #1 .. #1 \q_stop
- }
- \cs_set_protected:Npn \@@_data_auxii:w #1 .. #2 .. #3 \q_stop
- {
- \cs_set_nopar:Npe \l_@@_tmpa_str
- {
- \l_@@_tmpa_str ,
- \tl_trim_spaces:n {#1} .. \tl_trim_spaces:n {#2}
- }
- }
- \ior_str_map_inline:Nn \g_@@_data_ior
- {
- \str_if_eq:eeF { \tl_head:w #1 \c_hash_str \q_stop } { \c_hash_str }
- {
- \tl_if_blank:nF {#1}
- { \@@_data_auxi:w #1 \q_stop }
- }
- }
- \ior_close:N \g_@@_data_ior
-\group_end:
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/macros/latex/contrib/l3kernel/source3.pdf b/macros/latex/contrib/l3kernel/source3.pdf
deleted file mode 100644
index c6a6396503..0000000000
--- a/macros/latex/contrib/l3kernel/source3.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/source3.tex b/macros/latex/contrib/l3kernel/source3.tex
deleted file mode 100644
index c09d75767b..0000000000
--- a/macros/latex/contrib/l3kernel/source3.tex
+++ /dev/null
@@ -1,106 +0,0 @@
-\iffalse meta-comment
-
-File: source3.tex
-
-Copyright (C) 1990-2012,2017-2024 The LaTeX Project
-
-It may be distributed and/or modified under the conditions of the
-LaTeX Project Public License (LPPL), either version 1.3c of this
-license or (at your option) any later version. The latest version
-of this license is in the file
-
- https://www.latex-project.org/lppl.txt
-
-This file is part of the "l3kernel bundle" (The Work in LPPL)
-and all files in that bundle must be distributed together.
-
-The released version of this bundle is available from CTAN.
-
------------------------------------------------------------------------
-
-The development version of the bundle can be found at
-
- https://github.com/latex3/latex3
-
-for those people who are interested.
-
-\fi
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% This document typesets the LaTeX3 sources as a single document.
-% This produces quite a large file (more than 1670 pages as of Dec 2023).
-%
-% There is also a shorter version (interface3.tex) that only typesets the
-% command % interface descriptions.
-%
-% Do not forget to generate the index (as explained on the terminal output
-% near the end of the run)!
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\documentclass[kernel]{l3doc}
-
-\newif\ifinterface
-\interfacefalse
-
-\listfiles
-
-\begin{document}
-
-\title{The \LaTeX3 Sources}
-\author{%
- The \LaTeX{} Project\thanks
- {%
- E-mail:
- \href{mailto:latex-team@latex-project.org}
- {latex-team@latex-project.org}%
- }%
-}
-\date{Released 2024-03-14}
-
-\pagenumbering{roman}
-\maketitle
-
-%
-% First load all modules and typeset the documentation parts
-%
-
-\input{source3body} % all the individual modules
-
-%
-% Now reload all modules and typeset the implementation parts
-%
-
-\part{Implementation}
-
-\def\maketitle{}
-\let\subsubsection\subsection
-\let\subsection\section
-\let\section\chapter
-
-\EnableImplementation
-\DisableDocumentation
-\DocInputAgain
-
-\clearpage
-\pagestyle{headings}
-
-% Make TeX shut up.
-\hbadness=10000
-\newcount\hbadness
-\hfuzz=\maxdimen
-
-\PrintChanges
-\clearpage
-
-\begingroup
- \def\endash{--}
- \catcode`\-\active
- \def-{\futurelet\temp\indexdash}
- \def\indexdash{\ifx\temp-\endash\fi}
-
- \DelayPrintIndex
-\endgroup
-
-\end{document}
diff --git a/macros/latex/contrib/l3kernel/source3body.tex b/macros/latex/contrib/l3kernel/source3body.tex
deleted file mode 100644
index 8471296227..0000000000
--- a/macros/latex/contrib/l3kernel/source3body.tex
+++ /dev/null
@@ -1,620 +0,0 @@
-\iffalse meta-comment
-
-File: source3body.tex
-
-Copyright (C) 1990-2012,2014-2023 The LaTeX Project
-
-It may be distributed and/or modified under the conditions of the
-LaTeX Project Public License (LPPL), either version 1.3c of this
-license or (at your option) any later version. The latest version
-of this license is in the file
-
- https://www.latex-project.org/lppl.txt
-
-This file is part of the "l3kernel bundle" (The Work in LPPL)
-and all files in that bundle must be distributed together.
-
-The released version of this bundle is available from CTAN.
-
------------------------------------------------------------------------
-
-The development version of the bundle can be found at
-
- https://github.com/latex3/latex3
-
-for those people who are interested.
-
-\fi
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% This file is used by
-%
-% source3.tex % documentation including implementation
-%
-% interface3.tex % only interface documentation
-%
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-\begin{abstract}
-
-\setlength\parindent{0pt}
-\setlength\parskip{\baselineskip}
-
-\noindent
-\ifinterface
-This is the reference documentation for the \pkg{expl3}
-programming environment; see the matching \pkg{source3} PDF
-for the typeset sources.
-\else
-This is the typset sources for the \pkg{expl3}
-programming environment; see the matching \pkg{interface3} PDF
-for the API reference manual.
-\fi
-The \pkg{expl3} modules set up a
-naming scheme for \LaTeX{} commands, which allow the \LaTeX{} programmer
-to systematically name functions and variables, and specify the argument
-types of functions.
-
-The \TeX{} and \eTeX{} primitives are all given a new name according to
-these conventions. However, in the main direct use of the primitives is
-not required or encouraged: the \pkg{expl3} modules define an
-independent low-level \LaTeX3 programming language.
-
-The \pkg{expl3} modules are designed to be loaded on top of
-\LaTeXe{}. With an up-to-date \LaTeXe{} kernel, this material is loaded
-as part of the format. The fundamental programming code can also be loaded
-with other \TeX{} formats, subject to restrictions on the full range of
-functionality.
-
-\end{abstract}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% Each of the following \DocInput lines includes a file with extension
-% .dtx. Each of these files may be typeset separately. For instance
-% pdflatex l3box.dtx
-% will typeset the source of the LaTeX3 box commands. If you use the
-% Makefile, the index will be generated automatically; e.g.,
-% make doc F=l3box
-%
-% If this file is processed, each of these separate dtx files will be
-% contained as a part of a single document.
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\makeatletter
-% l3doc is based on article, but for these very large documents we need
-% chapters; the code is based on the standard classes but somewhat simplified
-\renewcommand\part{%
- \clearpage
- \thispagestyle{plain}%
- \@tempswafalse
- \null\vfil
- \secdef\@part\@spart}
-\newcounter {chapter}
-\numberwithin{section}{chapter}
-\renewcommand \thechapter {\@arabic\c@chapter}
-\renewcommand \thesection {\thechapter.\@arabic\c@section}
-\newcommand*\chaptermark[1]{}
-\setcounter{secnumdepth}{2}
-\newcommand\@chapapp{\chaptername}
-\newcommand\chaptername{Chapter}
- \def\ps@headings{%
- \let\@oddfoot\@empty
- \def\@oddhead{{\slshape\rightmark}\hfil\thepage}%
- \let\@mkboth\markboth
- \def\chaptermark##1{%
- \markright {\MakeUppercase{%
- \ifnum \c@secnumdepth >\m@ne
- \@chapapp\ \thechapter. \ %
- \fi
- ##1}}}}
-\newcommand\chapter{\clearpage
- \thispagestyle{plain}%
- \global\@topnum\z@
- \@afterindentfalse
- \secdef\@chapter\@schapter}
-\def\@chapter[#1]#2{\refstepcounter{chapter}%
- \typeout{\@chapapp\space\thechapter.}%
- \addcontentsline{toc}{chapter}%
- {\protect\numberline{\thechapter}#1}%
- \chaptermark{#1}%
- \addtocontents{lof}{\protect\addvspace{10\p@}}%
- \addtocontents{lot}{\protect\addvspace{10\p@}}%
- \@makechapterhead{#2}%
- \@afterheading}
-\def\@makechapterhead#1{%
- \vspace*{50\p@}%
- {\parindent \z@ \raggedright \normalfont
- \huge\bfseries \@chapapp\space \thechapter
- \par\nobreak
- \vskip 20\p@
- \interlinepenalty\@M
- \Huge \bfseries #1\par\nobreak
- \vskip 40\p@
- }}
-\newcommand*\l@chapter[2]{%
- \ifnum \c@tocdepth >\m@ne
- \addpenalty{-\@highpenalty}%
- \vskip 1.0em \@plus\p@
- \setlength\@tempdima{1.5em}%
- \begingroup
- \parindent \z@ \rightskip \@pnumwidth
- \parfillskip -\@pnumwidth
- \leavevmode \bfseries
- \advance\leftskip\@tempdima
- \hskip -\leftskip
- #1\nobreak\hfil
- \nobreak\hb@xt@\@pnumwidth{\hss #2%
- \kern-\p@\kern\p@}\par
- \penalty\@highpenalty
- \endgroup
- \fi}
-\renewcommand*\l@section{\@dottedtocline{1}{1.5em}{2.8em}}
-\renewcommand*\l@subsection{\@dottedtocline{2}{3.8em}{3.2em}}
-\renewcommand*\l@subsubsection{\@dottedtocline{3}{7.0em}{4.1em}}
-\def\partname{Part}
-\def\toclevel@part{-1}
-\def\maketitle{\chapter{\@title}}
-\let\thanks\@gobble
-\let\DelayPrintIndex\PrintIndex
-\let\PrintIndex\@empty
-\providecommand*{\hexnum}[1]{\text{\texttt{\char`\"}#1}}
-\makeatother
-
-\clearpage
-
-{%
- \def\\{:}% fix "newlines" in the ToC
- \tableofcontents
-}
-
-\clearpage
-\pagenumbering{arabic}
-
-\part{Introduction}
-
-\chapter{Introduction to \pkg{expl3} and this document}
-
-This document is intended to act as a comprehensive reference manual
-for the \pkg{expl3} language. A general guide to the \LaTeX3
-programming language is found in \href{expl3.pdf}{expl3.pdf}.
-
-\section{Naming functions and variables}
-
-\LaTeX3 does not use \texttt{@} as a \enquote{letter} for defining
-internal macros. Instead, the symbols |_| and \texttt{:}
-are used in internal macro names to provide structure. The name of
-each \emph{function} is divided into logical units using \texttt{_},
-while \texttt{:} separates the \emph{name} of the function from the
-\emph{argument specifier} (\enquote{arg-spec}). This describes the arguments
-expected by the function. In most cases, each argument is represented
-by a single letter. The complete list of arg-spec letters for a function
-is referred to as the \emph{signature} of the function.
-
-Each function name starts with the \emph{module} to which it belongs.
-Thus apart from a small number of very basic functions, all \pkg{expl3}
-function names contain at least one underscore to divide the module
-name from the descriptive name of the function. For example, all
-functions concerned with comma lists are in module \texttt{clist} and
-begin |\clist_|.
-
-Every function must include an argument specifier. For functions which
-take no arguments, this will be blank and the function name will end
-\texttt{:}. Most functions take one or more arguments, and use the
-following argument specifiers:
-\begin{description}
- \item[\texttt{N} and \texttt{n}] These mean \emph{no manipulation},
- of a single token for \texttt{N} and of a set of tokens given in
- braces for \texttt{n}. Both pass the argument through exactly as
- given. Usually, if you use a single token for an \texttt{n} argument,
- all will be well.
- \item[\texttt{c}] This means \emph{csname}, and indicates that the
- argument will be turned into a csname before being used. So
- |\foo:c| |{ArgumentOne}| will act in the same way as |\foo:N|
- |\ArgumentOne|. All macros that appear in the argument are expanded.
- An internal error will occur if the result of expansion inside
- a \texttt{c}-type argument is not a series of character tokens.
- \item[\texttt{V} and \texttt{v}] These mean \emph{value
- of variable}. The \texttt{V} and \texttt{v} specifiers are used to
- get the content of a variable without needing to worry about the
- underlying \TeX{} structure containing the data. A \texttt{V}
- argument will be a single token (similar to \texttt{N}), for example
- |\foo:V| |\MyVariable|; on the other hand, using \texttt{v} a
- csname is constructed first, and then the value is recovered, for
- example |\foo:v| |{MyVariable}|.
- \item[\texttt{o}] This means \emph{expansion once}. In general, the
- \texttt{V} and \texttt{v} specifiers are favoured over \texttt{o}
- for recovering stored information. However, \texttt{o} is useful
- for correctly processing information with delimited arguments.
- \item[\texttt{x}] The \texttt{x} specifier stands for \emph{exhaustive
- expansion}: every token in the argument is fully expanded until only
- unexpandable ones remain. The \TeX{} \tn{edef} primitive carries out
- this type of expansion. Functions which feature an \texttt{x}-type
- argument are \emph{not} expandable.
- \item[\texttt{e}] The \texttt{e} specifier is in many respects
- identical to \texttt{x}, but uses \tn{expanded} primitive.
- Parameter character (usually~|#|) in the argument need not be doubled.
- Functions which feature an \texttt{e}-type argument may be
- expandable.
- \item[\texttt{f}] The \texttt{f} specifier stands for \emph{full
- expansion}, and in contrast to \texttt{x} stops at the first
- non-expandable token (reading the argument from left to right) without
- trying to expand it. If this token is a \meta{space token}, it is gobbled,
- and thus won't be part of the resulting argument. For example, when
- setting a token list variable (a macro used for storage), the sequence
- \begin{verbatim}
- \tl_set:Nn \l_mya_tl { A }
- \tl_set:Nn \l_myb_tl { B }
- \tl_set:Nf \l_mya_tl { \l_mya_tl \l_myb_tl }
- \end{verbatim}
- will leave |\l_mya_tl| with the content |A\l_myb_tl|, as |A| cannot
- be expanded and so terminates expansion before |\l_myb_tl| is considered.
- \item[\texttt{T} and \texttt{F}] For logic tests, there are the branch
- specifiers \texttt{T} (\emph{true}) and \texttt{F} (\emph{false}).
- Both specifiers treat the input in the same way as \texttt{n} (no
- change), but make the logic much easier to see.
- \item[\texttt{p}] The letter \texttt{p} indicates \TeX{}
- \emph{parameters}. Normally this will be used for delimited
- functions as \pkg{expl3} provides better methods for creating simple
- sequential arguments.
- \item[\texttt{w}] Finally, there is the \texttt{w} specifier for
- \emph{weird} arguments. This covers everything else, but mainly
- applies to delimited values (where the argument must be terminated
- by some specified string).
- \item[\texttt{D}] The \texttt{D} stands for \textbf{Do not use}.
- All of the \TeX{} primitives are initially \cs[no-index]{let} to a \texttt{D}
- name, and some are then given a second name.
- These functions have no standardized syntax, they are engine
- dependent and their name can change without warning, thus their
- use is \emph{strongly discouraged} in package code: programmers
- should instead use the interfaces documented in
- \ifinterface
- this documentation.
- \else
- \href{interface3.pdf}{interface3.pdf}.
- \fi
-\end{description}
-Notice that the argument specifier describes how the argument is
-processed prior to being passed to the underlying function. For example,
-|\foo:c| will take its argument, convert it to a control sequence and
-pass it to |\foo:N|.
-
-Variables are named in a similar manner to functions, but begin with
-a single letter to define the type of variable:
-\begin{description}
- \item[\texttt{c}] Constant: global parameters whose value should not
- be changed.
- \item[\texttt{g}] Parameters whose value should only be set globally.
- \item[\texttt{l}] Parameters whose value should only be set locally.
-\end{description}
-Each variable name is then build up in a similar way to that of a
-function, typically starting with the module\footnote{The module names are
- not used in case of generic scratch registers defined in the data
- type modules, e.g., the
- \texttt{int} module contains some scratch variables called \cs{l_tmpa_int},
- \cs{l_tmpb_int}, and so on. In such a case adding the module name up front
- to denote the module
- and in the back to indicate the type, as in
- \texttt{\string\l_int_tmpa_int} would be very unreadable.} name
-and then a descriptive part.
-Variables end with a short identifier to show the variable type:
-\begin{description}%
- \item[\texttt{bitset}] a set of bits (a string made up of a series of \texttt{0}
- and \texttt{1} tokens that are accessed by position).
- \item[\texttt{clist}] Comma separated list.
- \item[\texttt{dim}] \enquote{Rigid} lengths.
- \item[\texttt{fp}] Floating-point values;
- \item[\texttt{int}] Integer-valued count register.
- \item[\texttt{muskip}] \enquote{Rubber} lengths for use in
- mathematics.
- \item[\texttt{skip}] \enquote{Rubber} lengths.
- \item[\texttt{str}] String variables: contain character data.
- \item[\texttt{tl}] Token list variables: placeholder for a token list.
-\end{description}
-Applying \texttt{V}-type or \texttt{v}-type expansion to variables of
-one of the above types is supported, while it is not supported for the
-following variable types:
-\begin{description}
- \item[\texttt{bool}] Either true or false.
- \item[\texttt{box}] Box register.
- \item[\texttt{coffin}] A \enquote{box with handles} --- a higher-level
- data type for carrying out \texttt{box} alignment operations.
- \item[\texttt{flag}] Non-negative integer that can be incremented expandably.
- \item[\texttt{fparray}] Fixed-size array of floating point values.
- \item[\texttt{intarray}] Fixed-size array of integers.
- \item[\texttt{ior}/\texttt{iow}] An input or output stream, for
- reading from or writing to, respectively.
- \item[\texttt{prop}] Property list: analogue of dictionary or
- associative arrays in other languages.
- \item[\texttt{regex}] Regular expression.
- \item[\texttt{seq}] \enquote{Sequence}: a data type used to implement
- lists (with access at both ends) and stacks.
-\end{description}
-
-\subsection{Scratch variables}
-
-Modules focussed on variable usage typically provide four scratch variables,
-two local and two global, with names of the form
-\cs[no-index]{\meta{scope}_tmpa_\meta{type}}/\cs[no-index]{\meta{scope}_tmpb_\meta{type}}. These
-are never used by the core code. The nature of \TeX{} grouping means that as
-with any other scratch variable, these should only be set and used with no
-intervening third-party code.
-
-\subsection{Terminological inexactitude}
-
-A word of warning. In this document, and others referring to the \pkg{expl3}
-programming modules, we often refer to \enquote{variables} and
-\enquote{functions} as if they
-were actual constructs from a real programming language. In truth, \TeX{}
-is a macro processor, and functions are simply macros that may or may not take
-arguments and expand to their replacement text. Many of the common variables
-are \emph{also} macros, and if placed into the input stream will simply expand
-to their definition as well~--- a \enquote{function} with no arguments and a
-\enquote{token list variable} are almost the same.\footnote{\TeX{}nically,
-functions with no arguments are \tn{long} while token list variables are not.}
-On the other
-hand, some \enquote{variables} are actually registers that must be
-initialised and their values set and retrieved with specific functions.
-
-The conventions of the \pkg{expl3} code are designed to clearly separate the
-ideas of \enquote{macros that contain data} and
-\enquote{macros that contain code}, and a
-consistent wrapper is applied to all forms of \enquote{data} whether they be
-macros or
-actually registers. This means that sometimes we will use phrases like
-\enquote{the function returns a value}, when actually we just mean
-\enquote{the macro expands to something}. Similarly, the term
-\enquote{execute} might be used in place of \enquote{expand}
-or it might refer to the more specific case of
-\enquote{processing in \TeX's stomach}
-(if you are familiar with the \TeX{}book parlance).
-
-If in doubt, please ask; chances are we've been hasty in writing certain
-definitions and need to be told to tighten up our terminology.
-
-\section{Documentation conventions}
-
-This document is typeset with the experimental \pkg{l3doc} class;
-several conventions are used to help describe the features of the code.
-A number of conventions are used here to make the documentation clearer.
-
-Each group of related functions is given in a box. For a function with
-a \enquote{user} name, this might read:
-\begin{function}[label = ]{\ExplSyntaxOn, \ExplSyntaxOff}
- \begin{syntax}
- |\ExplSyntaxOn| \dots{} |\ExplSyntaxOff|
- \end{syntax}
- The textual description of how the function works would appear here. The
- syntax of the function is shown in mono-spaced text to the right of
- the box. In this example, the function takes no arguments and so the
- name of the function is simply reprinted.
-\end{function}
-
-For programming functions, which use \texttt{_} and \texttt{:} in their name
-there are a few additional conventions: If two related functions are given
-with identical names but different argument specifiers, these are termed
-\emph{variants} of each other, and the latter functions are printed in grey to
-show this more clearly. They will carry out the same function but will take
-different types of argument:
-\begin{function}[label = ]{\seq_new:N, \seq_new:c}
- \begin{syntax}
- |\seq_new:N| \meta{sequence}
- \end{syntax}
- When a number of variants are described, the arguments are usually
- illustrated only for the base function. Here, \meta{sequence} indicates
- that |\seq_new:N| expects the name of a sequence. From the argument
- specifier, |\seq_new:c| also expects a sequence name, but as a
- name rather than as a control sequence. Each argument given in the
- illustration should be described in the following text.
-\end{function}
-
-\paragraph{Fully expandable functions}
-\hypertarget{expstar}{Some functions are fully expandable},
-which allows them to be used within
-an \texttt{x}-type or \texttt{e}-type argument (in plain \TeX{} terms, inside an \tn{edef} or \tn{expanded}),
-as well as within an \texttt{f}-type argument.
-These fully expandable functions are indicated in the documentation by
-a star:
-\begin{function}[EXP, label = ]{\cs_to_str:N}
- \begin{syntax}
- |\cs_to_str:N| \meta{cs}
- \end{syntax}
- As with other functions, some text should follow which explains how
- the function works. Usually, only the star will indicate that the
- function is expandable. In this case, the function expects a \meta{cs},
- shorthand for a \meta{control sequence}.
-\end{function}
-
-\paragraph{Restricted expandable functions}
-\hypertarget{rexpstar}{A few functions are fully expandable} but cannot be fully expanded within
-an \texttt{f}-type argument. In this case a hollow star is used to indicate
-this:
-\begin{function}[rEXP, label = ]{\seq_map_function:NN}
- \begin{syntax}
- |\seq_map_function:NN| \meta{seq} \meta{function}
- \end{syntax}
-\end{function}
-
-\paragraph{Conditional functions}
-\hypertarget{explTF}{Conditional (\texttt{if}) functions}
-are normally defined in three variants, with
-\texttt{T}, \texttt{F} and \texttt{TF} argument specifiers. This allows
-them to be used for different \enquote{true}/\enquote{false} branches,
-depending on
-which outcome the conditional is being used to test. To indicate this
-without repetition, this information is given in a shortened form:
-\begin{function}[EXP,TF, label = ]{\sys_if_engine_xetex:}
- \begin{syntax}
- |\sys_if_engine_xetex:TF| \Arg{true code} \Arg{false code}
- \end{syntax}
- The underlining and italic of \texttt{TF} indicates that three functions
- are available:
- \begin{itemize}
- \item |\sys_if_engine_xetex:T|
- \item |\sys_if_engine_xetex:F|
- \item |\sys_if_engine_xetex:TF|
- \end{itemize}
- Usually, the illustration
- will use the \texttt{TF} variant, and so both \meta{true code}
- and \meta{false code} will be shown. The two variant forms \texttt{T} and
- \texttt{F} take only \meta{true code} and \meta{false code}, respectively.
- Here, the star also shows that this function is expandable.
- With some minor exceptions, \emph{all} conditional functions in the
- \pkg{expl3} modules should be defined in this way.
-\end{function}
-
-Variables, constants and so on are described in a similar manner:
-\begin{variable}[label = ]{\l_tmpa_tl}
- A short piece of text will describe the variable: there is no
- syntax illustration in this case.
-\end{variable}
-
-In some cases, the function is similar to one in \LaTeXe{} or plain \TeX{}.
-In these cases, the text will include an extra \enquote{\textbf{\TeX{}hackers
-note}} section:
-\begin{function}[EXP, label = ]{\token_to_str:N}
- \begin{syntax}
- |\token_to_str:N| \meta{token}
- \end{syntax}
- The normal description text.
- \begin{texnote}
- Detail for the experienced \TeX{} or \LaTeXe\ programmer. In this
- case, it would point out that this function is the \TeX{} primitive
- |\string|.
- \end{texnote}
-\end{function}
-
-\paragraph{Changes to behaviour}
-When new functions are added to \pkg{expl3}, the date of first inclusion is
-given in the documentation. Where the documented behaviour of a function
-changes after it is first introduced, the date of the update will also be
-given. This means that the programmer can be sure that any release of
-\pkg{expl3} after the date given will contain the function of interest with
-expected behaviour as described. Note that changes to code internals, including
-bug fixes, are not recorded in this way \emph{unless} they impact on the
-expected behaviour.
-
-\section{Formal language conventions which apply generally}
-
-As this is a formal reference guide for \LaTeX3 programming, the descriptions
-of functions are intended to be reasonably \enquote{complete}. However, there
-is also a need to avoid repetition. Formal ideas which apply to general
-classes of function are therefore summarised here.
-
-For tests which have a \texttt{TF} argument specification, the test if
-evaluated to give a logically \texttt{TRUE} or \texttt{FALSE} result.
-Depending on this result, either the \meta{true code} or the \meta{false code}
-will be left in the input stream. In the case where the test is expandable,
-and a predicate (|_p|) variant is available, the logical value determined by
-the test is left in the input stream: this will typically be part of a larger
-logical construct.
-
-\section{\TeX{} concepts not supported by \LaTeX3{}}
-
-The \TeX{} concept of an \enquote{\tn{outer}} macro is \emph{not supported}
-at all by \LaTeX3{}. As such, the functions provided here may break when
-used on top of \LaTeXe{} if \tn{outer} tokens are used in the arguments.
-
-\DisableImplementation
-
-\part{Bootstrapping}
-
-\DocInput{l3bootstrap.dtx}
-\DocInput{l3names.dtx}
-\ExplSyntaxOn
-\clist_gput_right:Nn \g_docinput_clist { l3kernel-functions.dtx }
-\ExplSyntaxOff
-
-\part{Programming Flow}
-
-\DocInput{l3basics.dtx}
-\DocInput{l3expan.dtx}
-\DocInput{l3sort.dtx}
-\DocInput{l3tl-analysis.dtx}
-\DocInput{l3regex.dtx}
-\DocInput{l3prg.dtx}
-\DocInput{l3sys.dtx}
-\DocInput{l3msg.dtx}
-\DocInput{l3file.dtx}
-
-\DocInput{l3luatex.dtx}
-
-\DocInput{l3legacy.dtx}
-
-
-\part{Data types}
-
-\DocInput{l3tl.dtx}
-\DocInput{l3tl-build.dtx}
-\DocInput{l3str.dtx}
-\DocInput{l3str-convert.dtx}
-\DocInput{l3quark.dtx}
-\DocInput{l3seq.dtx}
-\DocInput{l3int.dtx}
-\DocInput{l3flag.dtx}
-\DocInput{l3clist.dtx}
-\DocInput{l3token.dtx}
-\DocInput{l3prop.dtx}
-\DocInput{l3skip.dtx}
-\DocInput{l3keys.dtx}
-\DocInput{l3intarray.dtx}
-\DocInput{l3fp.dtx}
-% To get the various submodules of l3fp to appear in the implementation
-% part only, they have to be added to the documentation list after typesetting
-% the 'user' part just for the main module.
-\ExplSyntaxOn
-\clist_gput_right:Nn \g_docinput_clist
- {
- l3fp-aux.dtx ,
- l3fp-traps.dtx ,
- l3fp-round.dtx ,
- l3fp-parse.dtx ,
- l3fp-assign.dtx ,
- l3fp-logic.dtx ,
- l3fp-basics.dtx ,
- l3fp-extended.dtx ,
- l3fp-expo.dtx ,
- l3fp-trig.dtx ,
- l3fp-convert.dtx ,
- l3fp-random.dtx ,
- l3fp-types.dtx ,
- l3fp-symbolic.dtx ,
- l3fp-functions.dtx
- }
-\ExplSyntaxOff
-
-\DocInput{l3fparray.dtx}
-\DocInput{l3bitset.dtx}
-\DocInput{l3cctab.dtx}
-
-\part{Text manipulation}
-
-\DocInput{l3unicode.dtx}
-\DocInput{l3text.dtx}
-\ExplSyntaxOn
-\clist_gput_right:Nn \g_docinput_clist
- {
- l3text-case.dtx ,
- l3text-map.dtx ,
- l3text-purify.dtx
- }
-\ExplSyntaxOff
-
-\part{Typesetting}
-
-\DocInput{l3box.dtx}
-\DocInput{l3coffins.dtx}
-\DocInput{l3color.dtx}
-\DocInput{l3pdf.dtx}
-
-% implementation part only
-\ExplSyntaxOn
-\clist_gput_right:Nn \g_docinput_clist { l3deprecation.dtx }
-\clist_gput_right:Nn \g_docinput_clist { l3debug.dtx }
-\ExplSyntaxOff
-
-\endinput
diff --git a/macros/latex/contrib/l3packages/CHANGELOG.md b/macros/latex/contrib/l3packages/CHANGELOG.md
index b12b36ec76..cd9143da08 100644
--- a/macros/latex/contrib/l3packages/CHANGELOG.md
+++ b/macros/latex/contrib/l3packages/CHANGELOG.md
@@ -7,6 +7,12 @@ this project uses date-based 'snapshot' version identifiers.
## [Unreleased]
+## [2024-05-08]
+
+### Changed
+- Prepare for kernel adjustments to templates:
+ `\IfInstanceExist(TF)` as alias for `\IfInstanceExists(TF)`
+
## [2024-03-14]
### Changed
@@ -133,7 +139,7 @@ this project uses date-based 'snapshot' version identifiers.
## [2021-05-07]
### Fixed
-- Implmentation of `\DeclareRestrictedTemplate`
+- Implementation of `\DeclareRestrictedTemplate`
- Incorrect use of restricted template in `xfrac`
## [2021-03-12]
@@ -253,7 +259,8 @@ this project uses date-based 'snapshot' version identifiers.
- Switch to ISO date format
- Improve cross-module use of internal functions
-[Unreleased]: https://github.com/latex3/latex3/compare/2024-03-14...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2024-05-08...HEAD
+[2024-05-08]: https://github.com/latex3/latex3/compare/2024-03-14...2024-05-08
[2024-03-14]: https://github.com/latex3/latex3/compare/2024-02-18...2024-03-14
[2024-02-18]: https://github.com/latex3/latex3/compare/2024-02-13...2024-02-18
[2024-02-13]: https://github.com/latex3/latex3/compare/2023-10-10...2024-02-13
diff --git a/macros/latex/contrib/l3packages/README.md b/macros/latex/contrib/l3packages/README.md
index 601e8d229a..10899672d6 100644
--- a/macros/latex/contrib/l3packages/README.md
+++ b/macros/latex/contrib/l3packages/README.md
@@ -1,6 +1,6 @@
# `l3packages`: Higher-level LaTeX3 Concepts (Deprecated)
-Release 2024-03-14
+Release 2024-05-08
## Overview
diff --git a/macros/latex/contrib/l3packages/l3keys2e-demo.tex b/macros/latex/contrib/l3packages/l3keys2e-demo.tex
index fda8fa40ff..a7565a7944 100644
--- a/macros/latex/contrib/l3packages/l3keys2e-demo.tex
+++ b/macros/latex/contrib/l3packages/l3keys2e-demo.tex
@@ -16,7 +16,7 @@
% Load the class with some options.
% The class itself recognises `option1', leaving `option2' and
-% `option3' as global optons which are not yet used.
+% `option3' as global options which are not yet used.
\documentclass[option1=check,option2=more stuff,option3=unused]
{l3keys2e-class}
diff --git a/macros/latex/contrib/l3packages/l3keys2e.dtx b/macros/latex/contrib/l3packages/l3keys2e.dtx
index 817d37a46c..2e5c419165 100644
--- a/macros/latex/contrib/l3packages/l3keys2e.dtx
+++ b/macros/latex/contrib/l3packages/l3keys2e.dtx
@@ -62,7 +62,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-05-08}
%
% \maketitle
%
@@ -154,7 +154,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{l3keys2e}{2024-03-14}{}
+\ProvidesExplPackage{l3keys2e}{2024-05-08}{}
{LaTeX2e option processing using LaTeX3 keys}
% \end{macrocode}
%
diff --git a/macros/latex/contrib/l3packages/l3keys2e.pdf b/macros/latex/contrib/l3packages/l3keys2e.pdf
index ecf18342cf..df3821afb8 100644
--- a/macros/latex/contrib/l3packages/l3keys2e.pdf
+++ b/macros/latex/contrib/l3packages/l3keys2e.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3packages/xfp.dtx b/macros/latex/contrib/l3packages/xfp.dtx
index 8baebbfc19..fe8dcd51b1 100644
--- a/macros/latex/contrib/l3packages/xfp.dtx
+++ b/macros/latex/contrib/l3packages/xfp.dtx
@@ -63,7 +63,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-05-08}
%
% \maketitle
%
@@ -171,7 +171,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{xfp}{2024-03-14}{}
+\ProvidesExplPackage{xfp}{2024-05-08}{}
{L3 Floating point unit}
% \end{macrocode}
%
diff --git a/macros/latex/contrib/l3packages/xfp.pdf b/macros/latex/contrib/l3packages/xfp.pdf
index 1bfdb01596..2097c2b079 100644
--- a/macros/latex/contrib/l3packages/xfp.pdf
+++ b/macros/latex/contrib/l3packages/xfp.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3packages/xparse.dtx b/macros/latex/contrib/l3packages/xparse.dtx
index 4b731d1e0f..62ac19ff25 100644
--- a/macros/latex/contrib/l3packages/xparse.dtx
+++ b/macros/latex/contrib/l3packages/xparse.dtx
@@ -67,7 +67,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-05-08}
%
% \maketitle
%
@@ -1079,7 +1079,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{xparse}{2024-03-14}{}
+\ProvidesExplPackage{xparse}{2024-05-08}{}
{L3 Experimental document command parser}
% \end{macrocode}
%
diff --git a/macros/latex/contrib/l3packages/xparse.pdf b/macros/latex/contrib/l3packages/xparse.pdf
index 91a774d39f..bb31c0a5e6 100644
--- a/macros/latex/contrib/l3packages/xparse.pdf
+++ b/macros/latex/contrib/l3packages/xparse.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3packages/xtemplate.dtx b/macros/latex/contrib/l3packages/xtemplate.dtx
index 4aac33434a..7d20c6142f 100644
--- a/macros/latex/contrib/l3packages/xtemplate.dtx
+++ b/macros/latex/contrib/l3packages/xtemplate.dtx
@@ -46,7 +46,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-05-08}
%
% \maketitle
%
@@ -704,12 +704,15 @@
\endinput
}
{%
- \ProvidesExplPackage{xtemplate}{2024-03-14}{}
+ \ProvidesExplPackage{xtemplate}{2024-05-08}{}
{L3 Experimental prototype document functions}
\long\protected\def\DeclareRestrictedTemplate#1#2#3#4{%
\DeclareTemplateCopy{#1}{#3}{#2}%
\EditTemplateDefaults{#1}{#3}{#4}%
}%
+ \let\IfInstanceExistT\IfInstanceExistsT
+ \let\IfInstanceExistF\IfInstanceExistsF
+ \let\IfInstanceExistTF\IfInstanceExistsTF
}
\ExplSyntaxOn
\cs_new_protected:Npn \DeclareObjectType #1#2
diff --git a/macros/latex/contrib/l3packages/xtemplate.pdf b/macros/latex/contrib/l3packages/xtemplate.pdf
index b52381f6dc..b70bd7c991 100644
--- a/macros/latex/contrib/l3packages/xtemplate.pdf
+++ b/macros/latex/contrib/l3packages/xtemplate.pdf
Binary files differ
diff --git a/macros/latex/contrib/latex2pydata/CHANGELOG.md b/macros/latex/contrib/latex2pydata/CHANGELOG.md
new file mode 100644
index 0000000000..f079e3c167
--- /dev/null
+++ b/macros/latex/contrib/latex2pydata/CHANGELOG.md
@@ -0,0 +1,39 @@
+# Changelog — latex2pydata LaTeX package
+
+
+## v0.2.0 (2024-05-16)
+
+* Operations on file handles, file names, and buffers are now global.
+ This prevents errors due to groups.
+
+* `\pydatasetfilehandle`, `\pydatareleasefilehandle`, `\pydatasetfilename`,
+ and `\pydataclosefilename` are redesigned to deal with cases where the same
+ file is opened, written, closed, and then later reopened and overwritten.
+ `\pydatasetfilename` now reuses file handles when the same file is
+ opened and closed multiple times. `\pydataclosefilename` no longer
+ attempts to close files `\AtEndDocument`, since that can interfere with
+ files that need to remain open as long as possible.
+
+* Added new commands `\pydatawritekeyedefvalue` and
+ `\pydatabufferkeyedefvalue`. These `\edef` the value before interpreting
+ it as verbatim text.
+
+* Simplified implementation of `pydatabuffermlvalue` environment, based on
+ latest `fvextra`.
+
+* Added error messages for unknown file handles and file names.
+
+* Added additional state and data checks in `\pydatawritebuffer`.
+
+* Added documentation for `\pydatawritemlvaluestart`,
+ `\pydatawritemlvalueline`, `\pydatawritemlvalueend`,
+ `\pydatabuffermlvaluestart`, `\pydatabuffermlvalueline`,
+ `\pydatabuffermlvalueend`.
+
+* Updated `tcblisting` usage in docs for compatibility with the latest
+ `tcolorbox`.
+
+
+## v0.1.0 (2023-11-19)
+
+* Initial release.
diff --git a/macros/latex/contrib/latex2pydata/README b/macros/latex/contrib/latex2pydata/README
index 678217ebc7..4f7751d62b 100644
--- a/macros/latex/contrib/latex2pydata/README
+++ b/macros/latex/contrib/latex2pydata/README
@@ -2,14 +2,15 @@ latex2pydata - write data to file in Python literal format
Author: Geoffrey M. Poore
License: LPPL v1.3c or later
-Development: https://github.com/gpoore/latex2pydata_tex
+Development: https://github.com/gpoore/latex2pydata/tree/main/latex
latex2pydata is a LaTeX package for writing data to file using Python literal
syntax (https://docs.python.org/3/reference/lexical_analysis.html#literals).
The data may be loaded safely in Python using the ast.literal_eval() function
(https://docs.python.org/3/library/ast.html#ast.literal_eval) or the
-latex2pydata Python package https://github.com/gpoore/latex2pydata_py).
+latex2pydata Python package
+https://github.com/gpoore/latex2pydata/tree/main/python).
The top-level data structure can be configured as either a Python dict or a
list of dicts. Within dicts, all keys and values are written to file as
@@ -20,10 +21,10 @@ data types such as dicts, lists, sets, bools, and numbers.
The data is suitable for direct loading in Python with ast.literal_eval().
It is also possible to load data using the latex2pydata Python package
-(https://github.com/gpoore/latex2pydata_py). This functions as a wrapper for
-ast.literal_eval(). The package requires all keys to match the regex
-"[A-Za-z_][0-9A-Za-z_]*". Periods in keys are interpreted as key paths and
-indicate sub-dicts. For example, the key path "main.sub" represents a key
+(https://github.com/gpoore/latex2pydata/tree/main/python). This functions as
+a wrapper for ast.literal_eval(). The package requires all keys to match the
+regex "[A-Za-z_][0-9A-Za-z_]*". Periods in keys are interpreted as key paths
+and indicate sub-dicts. For example, the key path "main.sub" represents a key
"main" in the main dict that maps to a sub-dict containing a key "sub". The
Python package supports the schema features provided by the LaTeX package, so
that data types other than dicts of strings are possible.
diff --git a/macros/latex/contrib/latex2pydata/latex2pydata.dtx b/macros/latex/contrib/latex2pydata/latex2pydata.dtx
index c49c732037..a9d1751557 100644
--- a/macros/latex/contrib/latex2pydata/latex2pydata.dtx
+++ b/macros/latex/contrib/latex2pydata/latex2pydata.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 2023 by Geoffrey M. Poore <gpoore@gmail.com>
+% Copyright (C) 2023-2024 by Geoffrey M. Poore <gpoore@gmail.com>
% ---------------------------------------------------------------------------
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3c
@@ -26,7 +26,7 @@
%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<package>\ProvidesPackage{latex2pydata}
%<*package>
- [2023/11/19 v0.1 latex2pydata - write data to file in Python literal format]
+ [2024/05/16 v0.2.0 latex2pydata - write data to file in Python literal format]
%</package>
%
%<*driver>
@@ -67,23 +67,7 @@
\usepackage{tcolorbox}
\tcbuselibrary{listings}
-% strip leading percent symbols
-\def\tcbverbatimwrite#1{%
- \@bsphack
- \tcb@set@verbatim@finish%
- \tcb@allocate@tcb@out%
- \immediate\openout\tcb@out #1
- \tcb@verbatim@begin@hook%
- \let\do\@makeother\dospecials
- \tcb@verbatim@change@percent\catcode`\^^M\active \catcode`\^^I=12
- \def\verbatim@processline{%
- \immediate\write\tcb@out
- {\expandafter\@gobble\the\verbatim@line}}%
- \verbatim@start}%
-
-% fix redefinition by tcolorbox
-\def\verbatim@processline{%
- \expandafter\check@percent\the\verbatim@line\par}
+\tcbset{verbatim ignore percent}
\usepackage{hyperref}
\hypersetup{
@@ -248,27 +232,11 @@
\edef\hashchar{\string#}
-\newcommand{\changestext}{}
-\NewEnviron{changelog}[2]{%
- \g@addto@macro\changestext{\item[#1] (#2) \begin{itemize}}%
- \expandafter\g@addto@macro\expandafter\changestext\expandafter{\BODY}%
- \g@addto@macro\changestext{\end{itemize}}%
-}
-\newcommand{\PrintChangelog}{%
- %\addcontentsline{toc}{section}{Changelog}
- %\section*{Changelog}%
- \section{Changelog}
- \label{sec:changelog}
- \begin{description}%
- \changestext
- \end{description}%
-}
-
\begingroup
\catcode`\#=12\relax
\gdef\astliteval{\href{https://docs.python.org/3/library/ast.html#ast.literal_eval}{\code{ast.literal_eval()}}}
\endgroup
-\def\pydatapy{\href{https://github.com/gpoore/latex2pydata_py}{\pkg{latex2pydata} Python package}}
+\def\pydatapy{\href{https://github.com/gpoore/latex2pydata/tree/main/python}{\pkg{latex2pydata} Python package}}
\def\fvextra{\href{https://github.com/gpoore/fvextra/}{\pkg{fvextra}}}
\def\fancyvrb{\href{https://ctan.org/pkg/fancyvrb}{\pkg{fancyvrb}}}
@@ -286,11 +254,6 @@
% \fi
%
%
-% \begin{changelog}{v0.1}{2023-11-19}
-% \item Initial release.
-% \end{changelog}
-%
-%
% \DoNotIndex{\newcommand,\newenvironment}
% \DoNotIndex{\#,\$,\%,\&,\@,\\,\{,\},\^,\_,\~,\ }
% \DoNotIndex{\@ne}
@@ -303,7 +266,7 @@
% \GetFileInfo{latex2pydata.dtx}
%
% \title{\vspace{-0.5in}The \pydata\ package}
-% \author{Geoffrey M.\ Poore \\ \href{mailto://gpoore@gmail.com}{\texttt{gpoore@gmail.com}} \\ \href{https://github.com/gpoore/latex2pydata_tex}{\Verb{github.com/gpoore/latex2pydata_tex}}}
+% \author{Geoffrey M.\ Poore \\ \href{mailto://gpoore@gmail.com}{\texttt{gpoore@gmail.com}} \\ \href{https://github.com/gpoore/latex2pydata/tree/main/latex}{\Verb{github.com/gpoore/latex2pydata/tree/main/latex}}}
% \date{\fileversion~from \filedate}
%
% \maketitle
@@ -385,6 +348,8 @@
%
% \subsection{File handling}
%
+% All file handling commands operate globally (|\global|, |\gdef|, etc.).
+%
% \DescMacro{\pydatasetfilehandle\marg{filehandle}}
% Configure writing to file using an existing file handle created with |\newwrite|. This allows manual management of the file handle. For example:
% \begin{Verbatim}[gobble=2]
@@ -398,10 +363,12 @@
%
% To switch from one file handle to another, simply use |\pydatasetfilehandle| with the new file handle. When the file handle is no longer in use, |\pydatareleasefilehandle| is recommended (but not required) to remove references to the file handle and perform basic checking for incomplete or malformed data written to file.
%
+% |\pydatasetfilehandle| sets the file handle globally.
+%
% \DescMacro{\pydatareleasefilehandle\marg{filehandle}}
% When a file handle is no longer needed, remove references to it. Also perform basic checking for incomplete or malformed data written to file.
%
-% This should only be used once per file handle, after all data has been written. It is not needed when switching from one file handle to another when both files remain open; in that case, only |\pydatasetfilehandle| is needed.
+% This should only be used once per opened file, after all data has been written, just before the file is closed. It is not needed when switching from one file handle to another when both files remain open; in that case, only |\pydatasetfilehandle| is needed. If |\pydatareleasefilehandle| is used before all data is written, or it is used multiple times while writing to the same file, then it is no longer possible to detect incomplete or malformed data.
%
% \DescMacro{\pydatasetfilename\marg{filename}}
% Configure a file for writing based on filename, opening the file if necessary. For example:
@@ -412,6 +379,8 @@
%
% To switch from one file to another, simply use |\pydatasetfilename| with the new filename. When the file is no longer in use, |\pydataclosefilename| is recommended.
%
+% |\pydatasetfilename| sets the filename globally.
+%
% \DescMacro{\pydataclosefilename\marg{filename}}
% Close a file previously opened with |\pydatasetfilename|. Also perform basic checking for incomplete or malformed data written to file.
%
@@ -465,7 +434,13 @@
% \subsection{Writing keys and values}
% All keys must be single-line strings of text without a newline. Both single-line and multi-line values are supported. Keys and values are written to the file previously configured via |\pydatasetfilehandle| or |\pydatasetfilename|.
%
-% The \pydata\ commands read keys and values verbatim. When these commands are used inside other commands, they use macros from \fvextra\ to attempt to interpret their arguments as verbatim. However, there are limitations in this case because the arguments are already tokenized:
+% Commands for writing keys and values may read these keys and values in one of two ways.
+% \begin{itemize}
+% \item Commands whose names contain |key| or |value| read these arguments verbatim, as described below.
+% \item Commands whose names contain |edefkey| or |edefvalue| read these arguments normally, then expand the arguments via |\edef|, and finally interpret the result as verbatim text.
+% \end{itemize}
+%
+% The \pydata\ commands that read keys and values verbatim have some limitations. When these commands are used inside other commands, they use macros from \fvextra\ to attempt to interpret their arguments as verbatim. However, there are limitations in this case because the arguments are already tokenized:
% \begin{itemize}
% \item |#| and |%| cannot be used.
% \item Curly braces are only allowed in pairs.
@@ -473,7 +448,7 @@
% \item Be careful with backslashes. A backslash that is followed by one or more ASCII letters will cause a following space to be lost, if the space is not immediately followed by an ASCII letter.
% \item A single |^| is fine, but |^^| will serve as an escape sequence for an ASCII command character.
% \end{itemize}
-% When the \pydata\ commands are used inside other commands that pass their arguments to the \pydata\ commands, it will usually be best to avoid these limitations by defining the other commands to read their arguments verbatim. Consider using the \href{https://ctan.org/pkg/xparse}{\pkg{xparse}} package. It is also possible to use |\FVExtraReadVArg| from \fvextra; for an example, see the implementation of |\pydatawritekey|.
+% When the \pydata\ commands are used inside other commands that pass their arguments to the \pydata\ commands, it may be best to avoid these limitations by defining the other commands to read their arguments verbatim. Consider using the \href{https://ctan.org/pkg/xparse}{\pkg{xparse}} package. It is also possible to use |\FVExtraReadVArg| from \fvextra; for an example, see the implementation of |\pydatawritekey|.
%
% Because the \pydata\ commands treat keys and values as verbatim, any desired macro expansion must be performed before passing the keys and values to the \pydata\ commands.
%
@@ -486,11 +461,22 @@
% \DescMacro{\pydatawritekeyvalue\marg{key}\marg{value}}
% Write a key and a single-line value to file simultaneously.
%
+% \DescMacro{\pydatawritekeyedefvalue\marg{key}\marg{value}}
+% Write a key and a single-line value to file simultaneously. The value is expanded via |\edef| before being interpreted as verbatim text and then written.
+%
% \DescEnv{pydatawritemlvalue}
% Write a multi-line value to file.
%
% This environment uses \fvextra\ and \fancyvrb\ internally to capture the environment contents verbatim. If a new environment is defined as a wrapper for |pydatawritemlvalue|, then |\VerbatimEnvironment| must be used at the beginning of the new environment definition. This configures \fancyvrb\ to find the end of the new environment correctly.
%
+% \DescMacro{\pydatawritemlvaluestart}
+%
+% \DescMacro{\pydatawritemlvalueline\marg{line}}
+%
+% \DescMacro{\pydatawritemlvalueend}
+% These commands allow writing a multi-line value to file one line at a time. \meta{line} is interpreted verbatim.
+%
+%
%
% \subsection{Buffer}
%
@@ -498,6 +484,8 @@
%
% A buffer consists of a sequence of macros of the form |\|\meta{buffername}|line|\meta{n}, where each line of data corresponds to a macro and \meta{n} is an integer greater than or equal to one (one-based indexing). The length of the buffer is stored in the counter \meta{buffername}|length|. Buffers are limited to containing comma-separated key-value data, without any opening or closing dict delimiters |{}|.
%
+% All buffer commands that set the buffer or modify the buffer operate globally (|\global|, |\gdef|, etc.).
+%
%
% \subsubsection{Creating and deleting buffers}
%
@@ -538,15 +526,23 @@
% \DescMacro{\pydatabufferkeyvalue\marg{key}\marg{value}}
% Append a key and a single-line value to the buffer simultaneously.
%
+% \DescMacro{\pydatabufferkeyedefvalue\marg{key}\marg{value}}
+% Append a key and a single-line value to the buffer simultaneously. The value is expanded via |\edef| before being interpreted as verbatim text and then buffered.
+%
% \DescEnv{pydatabuffermlvalue}
% Append a multi-line value to the buffer.
%
% This environment uses \fvextra\ and \fancyvrb\ internally to capture the environment contents verbatim. If a new environment is defined as a wrapper for |pydatabuffermlvalue|, then |\VerbatimEnvironment| must be used at the beginning of the new environment definition. This configures \fancyvrb\ to find the end of the new environment correctly.
%
+% \DescMacro{\pydatabuffermlvaluestart}
+%
+% \DescMacro{\pydatabuffermlvalueline\marg{line}}
+%
+% \DescMacro{\pydatabuffermlvalueend}
+% These commands allow buffering a multi-line value one line at a time. \meta{line} is interpreted verbatim.
%
%
%
-% \PrintChangelog
%
% \StopEventually{\PrintIndex}
%
@@ -582,7 +578,7 @@
% \begin{macrocode}
\RequirePackage{etoolbox}
\RequirePackage{fvextra}
-\IfPackageAtLeastTF{fvextra}{2023/11/19}%
+\IfPackageAtLeastTF{fvextra}{2024/05/16}%
{}{\pydata@error{package fvextra is outdated; upgrade to the latest version}}
\RequirePackage{pdftexcmds}
% \end{macrocode}
@@ -599,55 +595,83 @@
% \end{macro}
%
%
+% \begin{macro}{\pydata@newglobalbool, \pydata@provideglobalbool}
+% Variants of \pkg{etoolbox}'s |\newbool| and |\providebool| that create bools whose state is always global. When these global bools are used with |\setbool|, |\booltrue|, or |\boolfalse|, the global state is updated regardless of whether the command is prefixed with |\global|. These use a global variant of \LaTeX's |\newif| internally.
+% \begin{macrocode}
+\def\pydata@gnewif#1{%
+ \count@\escapechar
+ \escapechar\m@ne
+ \global\let#1\iffalse
+ \pydata@gif#1\iftrue
+ \pydata@gif#1\iffalse
+ \escapechar\count@}
+\def\pydata@gif#1#2{%
+ \expandafter\gdef\csname
+ \expandafter\@gobbletwo\string#1\expandafter\@gobbletwo\string#2\endcsname
+ {\global\let#1#2}}
+\newrobustcmd*{\pydata@newglobalbool}[1]{%
+ \begingroup
+ \let\newif\pydata@gnewif
+ \newbool{#1}%
+ \endgroup}
+\newrobustcmd*{\pydata@provideglobalbool}[1]{%
+ \begingroup
+ \let\newif\pydata@gnewif
+ \providebool{#1}%
+ \endgroup}
+% \end{macrocode}
+% \end{macro}
+%
+%
%
% \subsection{State}
%
-% Track state of writing data and of buffering data.
+% Track state of writing data and of buffering data. Notice that bools for tracking state are a special, custom variant that is always global.
%
% \begin{macro}{pydata@canwrite}
% Whether data can be written. False if a file handle has not been set or if the top-level data structure has been closed.
% \begin{macrocode}
-\newbool{pydata@canwrite}
+\pydata@newglobalbool{pydata@canwrite}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{pydata@hasmeta}
% Whether metadata was written. Metadata is a \code{dict[str, str | dict[str, str]]}.
% \begin{macrocode}
-\newbool{pydata@hasmeta}
+\pydata@newglobalbool{pydata@hasmeta}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{pydata@topexists}
% Whether the top-level data structure has been configured. The top-level data structure can be a list or a dict. The overall data structure must be either |dict[str, str]| or |list[dict[str, str]]|.
% \begin{macrocode}
-\newbool{pydata@topexists}
+\pydata@newglobalbool{pydata@topexists}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{pydata@topislist}
% Whether the top-level data structure is a list.
% \begin{macrocode}
-\newbool{pydata@topislist}
+\pydata@newglobalbool{pydata@topislist}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{pydata@indict}
% Whether a dict has been opened.
% \begin{macrocode}
-\newbool{pydata@indict}
+\pydata@newglobalbool{pydata@indict}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{pydata@haskey}
% Whether a key has been written (waiting for a value).
% \begin{macrocode}
-\newbool{pydata@haskey}
+\pydata@newglobalbool{pydata@haskey}
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\pydata@fhstartstate, \pydata@fhstopstate}
-% Start and stop state tracking for a file handle (|\newwrite|). Each file handle has its own set of state bools of the form |pydata@|\meta{boolname}|@|\meta{fh}. When a file handle is in use, the values of these bools are copied into the |pydata@|\meta{boolname} bools; when the file handle is no longer in use, |pydata@|\meta{boolname} values are copied back into |pydata@|\meta{boolname}|@|\meta{fh}.
+% \begin{macro}{\pydata@fhstartstate, \pydata@fhstopstate, \pydata@fhresetstate}
+% Start and stop state tracking for a file handle (|\newwrite|), or reset state after writing is complete. Each file handle has its own set of state bools of the form |pydata@|\meta{boolname}|@|\meta{fh}. When a file handle is in use, the values of these bools are copied into the |pydata@|\meta{boolname} bools; when the file handle is no longer in use, |pydata@|\meta{boolname} values are copied back into |pydata@|\meta{boolname}|@|\meta{fh}.
% \begin{macrocode}
\def\pydata@fhstartstate#1{%
\expandafter\pydata@fhstartstate@i\expandafter{\number#1}}
@@ -659,10 +683,13 @@
\booltrue{pydata@fhnewstate}%
\fi
\def\do##1{%
- \providebool{pydata@##1@#1}%
+ \pydata@provideglobalbool{pydata@##1@#1}%
\ifbool{pydata@##1@#1}{\booltrue{pydata@##1}}{\boolfalse{pydata@##1}}}%
\docsvlist{canwrite, hasmeta, topexists, topislist, indict, haskey}%
- \ifbool{pydata@fhnewstate}{\booltrue{pydata@canwrite}{}}{}}
+ \ifbool{pydata@fhnewstate}%
+ {\booltrue{pydata@canwrite}}{}%
+ \ifbool{pydata@fhisreleased@#1}%
+ {\boolfalse{pydata@fhisreleased@#1}\booltrue{pydata@canwrite}}{}}
\def\pydata@fhstopstate#1{%
\expandafter\pydata@fhstopstate@i\expandafter{\number#1}}
\def\pydata@fhstopstate@i#1{%
@@ -672,6 +699,12 @@
\boolfalse{pydata@##1}}%
\docsvlist{canwrite, hasmeta, topexists, topislist, indict, haskey}%
\fi}
+\def\pydata@fhresetstate#1{%
+ \expandafter\pydata@fhresetstate@i\expandafter{\number#1}}
+\def\pydata@fhresetstate@i#1{%
+ \def\do##1{%
+ \boolfalse{pydata@##1@#1}}%
+ \docsvlist{canwrite, hasmeta, topexists, topislist, indict, haskey}}
% \end{macrocode}
% \end{macro}
%
@@ -680,7 +713,7 @@
%
% If multiple buffers are in use, all buffers use the same |pydata@bufferhaskey|. Inconsistent state is avoided by requiring that |\pydatasetbuffername| can only be invoked when |pydata@bufferhaskey| is false.
% \begin{macrocode}
-\newbool{pydata@bufferhaskey}
+\pydata@newglobalbool{pydata@bufferhaskey}
% \end{macrocode}
% \end{macro}
%
@@ -709,49 +742,68 @@
% Set and release file handle. Release isn't strictly required, but it is necessary for basic data checking on the \LaTeX\ side.
% \begin{macrocode}
\def\pydatasetfilehandle#1{%
+ \if\relax\detokenize{#1}\relax
+ \pydata@error{Missing file handle}%
+ \fi
\ifx\pydata@filehandle\relax
+ \else\ifx\pydata@filehandle#1\relax
\else
\pydata@fhstopstate{\pydata@filehandle}%
- \fi
- \let\pydata@filehandle#1\relax
- \pydata@fhstartstate{#1}}
+ \fi\fi
+ \ifx\pydata@filehandle#1\relax
+ \else
+ \global\let\pydata@filehandle#1\relax
+ \pydata@provideglobalbool{pydata@fhisreleased@\number#1}%
+ \pydata@fhstartstate{#1}%
+ \fi}
\def\pydatareleasefilehandle#1{%
- \ifx\pydata@filehandle\relax
+ \ifcsname ifpydata@canwrite@\number#1\endcsname
\else
- \ifx\pydata@filehandle#1\relax
- \pydata@fhstopstate{#1}%
- \let\pydata@filehandle\relax
- \fi
+ \pydata@error{Unknown file handle #1}%
\fi
- \ifcsname ifpydata@canwrite@\number#1\endcsname
- \ifbool{pydata@canwrite@\number#1}%
- {\ifbool{pydata@haskey@\number#1}%
- {\pydata@error{Incomplete data: key is waiting for value}}{}%
- \ifbool{pydata@indict@\number#1}%
- {\pydata@error{Incomplete data: dict is not closed}}{}%
- \ifbool{pydata@topislist@\number#1}%
- {\pydata@error{Incomplete data: list is not closed}}{}}%
- {}%
- \fi}
+ \ifx\pydata@filehandle#1\relax
+ \pydata@fhstopstate{#1}%
+ \global\let\pydata@filehandle\relax
+ \fi
+ \ifbool{pydata@canwrite@\number#1}%
+ {\ifbool{pydata@haskey@\number#1}%
+ {\pydata@error{Incomplete data: key is waiting for value}}{}%
+ \ifbool{pydata@indict@\number#1}%
+ {\pydata@error{Incomplete data: dict is not closed}}{}%
+ \ifbool{pydata@topislist@\number#1}%
+ {\pydata@error{Incomplete data: list is not closed}}{}}%
+ {}%
+ \pydata@fhresetstate{#1}%
+ \booltrue{pydata@fhisreleased@\number#1}}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\pydatasetfilename, \pydataclosefilename}
-% Shortcut for creating a |\newwrite| and then passing the file handle to |\pydatasetfilehandle|. Automatically attempt to close the file handle (if it still exists) at the end of the document. This isn't strictly required since \TeX\ will \href{https://tex.stackexchange.com/a/337291}{automatically close open writes}. Invoking the close macro is necessary for basic data checking on the \LaTeX\ side.
+% Shortcut for creating a |\newwrite| and then passing the file handle to |\pydatasetfilehandle|. File handles are global. If the close macro is not invoked, then basic data checking on the \LaTeX\ side will not be performed. However, \TeX\ will \href{https://tex.stackexchange.com/a/337291}{automatically close open writes at the end of the compile}.
% \begin{macrocode}
\def\pydatasetfilename#1{%
+ \if\relax\detokenize{#1}\relax
+ \pydata@error{Missing filename}%
+ \fi
\ifcsname pydata@fh@#1\endcsname
\else
\expandafter\newwrite\csname pydata@fh@#1\endcsname
- \expandafter\immediate\expandafter\openout\csname pydata@fh@#1\endcsname=#1\relax
- \AtEndDocument{\pydataclosefilename{#1}}%
\fi
+ \pydata@provideglobalbool{pydata@fileisopen@#1}%
+ \ifbool{pydata@fileisopen@#1}%
+ {}%
+ {\expandafter\immediate\expandafter\openout\csname pydata@fh@#1\endcsname=#1\relax
+ \booltrue{pydata@fileisopen@#1}}%
\expandafter\pydatasetfilehandle\expandafter{\csname pydata@fh@#1\endcsname}}
\def\pydataclosefilename#1{%
\ifcsname pydata@fh@#1\endcsname
- \expandafter\pydatareleasefilehandle\expandafter{\csname pydata@fh@#1\endcsname}%
- \expandafter\immediate\expandafter\closeout\csname pydata@fh@#1\endcsname
- \expandafter\let\csname pydata@fh@#1\endcsname\pydata@undefined
+ \ifbool{pydata@fileisopen@#1}%
+ {\expandafter\pydatareleasefilehandle\expandafter{\csname pydata@fh@#1\endcsname}%
+ \expandafter\immediate\expandafter\closeout\csname pydata@fh@#1\endcsname
+ \boolfalse{pydata@fileisopen@#1}}%
+ {}%
+ \else
+ \pydata@error{Unknown file name "#1"}%
\fi}
% \end{macrocode}
% \end{macro}
@@ -779,14 +831,13 @@
\ifbool{pydata@bufferhaskey}%
{\pydata@error{Cannot change buffers when a buffered key is waiting for a value}}%
{}%
- \def\pydata@buffername{#1}%
- \def\pydata@bufferlinename{#1line}%
- \def\pydata@bufferlengthname{#1length}%
+ \gdef\pydata@buffername{#1}%
+ \gdef\pydata@bufferlinename{#1line}%
+ \gdef\pydata@bufferlengthname{#1length}%
\ifcsname c@\pydata@bufferlengthname\endcsname
\else
\expandafter\newcounter\expandafter{\pydata@bufferlengthname}%
- \fi
- \expandafter\setcounter\expandafter{\pydata@bufferlengthname}{0}}
+ \fi}
\pydatasetbuffername{pydata@defaultbuffer}
% \end{macrocode}
% \end{macro}
@@ -798,7 +849,10 @@
\ifnum\expandafter\value\expandafter{\pydata@bufferlengthname}<1\relax
\pydata@error{Cannot write empty buffer}%
\fi
- \ifbool{pydata@indict}{}{\pydata@error{Cannot write a buffer unless in a dict}}%
+ \pydata@checkfilehandle
+ \ifbool{pydata@indict}{}{\pydata@error{Cannot write buffer unless in a dict}}%
+ \ifbool{pydata@haskey}%
+ {\pydata@error{Cannot write buffer when file has a key waiting for a value}}{}%
\ifbool{pydata@bufferhaskey}%
{\pydata@error{Cannot write buffer when a buffered key is waiting for a value}}{}%
\setcounter{pydata@bufferindex}{1}%
@@ -824,7 +878,7 @@
\fi
\setcounter{pydata@bufferindex}{1}%
\loop\unless\ifnum\value{pydata@bufferindex}>\value{#1length}\relax
- \expandafter\let
+ \expandafter\global\expandafter\let
\csname#1line\arabic{pydata@bufferindex}\endcsname\pydata@undefined
\stepcounter{pydata@bufferindex}%
\repeat
@@ -948,7 +1002,7 @@
\else
\pydata@error{Invalid schema missing setting #1}%
\fi
- \def\pydata@schemamissing{#1}}
+ \gdef\pydata@schemamissing{#1}}
\pydatasetschemamissing{error}
% \end{macrocode}
% \end{macro}
@@ -972,7 +1026,7 @@
% Delete existing schema. This isn't done automatically upon writing so that a schema can be defined and then reused.
% \begin{macrocode}
\def\pydataclearschema{%
- \def\pydata@schema{}}
+ \gdef\pydata@schema{}}
% \end{macrocode}
% \end{macro}
%
@@ -1111,7 +1165,7 @@
\ifbool{pydata@bufferhaskey}%
{\pydata@error{Cannot buffer a key when waiting for a value}}{}%
\expandafter\stepcounter\expandafter{\pydata@bufferlengthname}%
- \expandafter\edef\csname
+ \expandafter\xdef\csname
\pydata@bufferlinename\expandafter\arabic\expandafter{\pydata@bufferlengthname}%
\endcsname{%
\pydata@quotestr{#1}:%
@@ -1140,7 +1194,7 @@
\ifbool{pydata@bufferhaskey}%
{}{\pydata@error{Cannot buffer value when waiting for a key}}%
\expandafter\stepcounter\expandafter{\pydata@bufferlengthname}%
- \expandafter\edef\csname
+ \expandafter\xdef\csname
\pydata@bufferlinename\expandafter\arabic\expandafter{\pydata@bufferlengthname}%
\endcsname{%
\pydata@quotestr{#1},%
@@ -1150,7 +1204,7 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\pydatawritekeyvalue, \pydatabufferkeyvalue}
+% \begin{macro}{\pydatawritekeyvalue, \pydatawritekeyedefvalue, \pydatabufferkeyvalue, \pydatabufferkeyedefvalue}
% Write a key and a single-line value to file simultaneously, or append them to the buffer.
% \begin{macrocode}
\begingroup
@@ -1166,6 +1220,13 @@
\immediate\write\pydata@filehandle{%
\pydata@quotestr{#1}: \pydata@quotestr{#2},%
}}
+\gdef\pydatawritekeyedefvalue{%
+ \FVExtraReadVArg{\FVExtraDetokenizeVArg{\pydatawritekeyedefvalue@i}}}
+\gdef\pydatawritekeyedefvalue@i#1#2{%
+ \edef\pydata@tmp{#2}%
+ \expandafter\pydatawritekeyedefvalue@ii\expandafter{\pydata@tmp}{#1}}
+\gdef\pydatawritekeyedefvalue@ii#1#2{%
+ \FVExtraDetokenizeVArg{\pydatawritekeyvalue@ii{#2}}{#1}}
\gdef\pydatabufferkeyvalue{%
\FVExtraReadVArg{\FVExtraDetokenizeVArg{\pydatabufferkeyvalue@i}}}
\gdef\pydatabufferkeyvalue@i#1{%
@@ -1174,11 +1235,18 @@
\ifbool{pydata@bufferhaskey}%
{\pydata@error{Cannot buffer a key when waiting for a value}}{}%
\expandafter\stepcounter\expandafter{\pydata@bufferlengthname}%
- \expandafter\edef\csname
+ \expandafter\xdef\csname
\pydata@bufferlinename\expandafter\arabic\expandafter{\pydata@bufferlengthname}%
\endcsname{%
\pydata@quotestr{#1}: \pydata@quotestr{#2},%
}}
+\gdef\pydatabufferkeyedefvalue{%
+ \FVExtraReadVArg{\FVExtraDetokenizeVArg{\pydatabufferkeyedefvalue@i}}}
+\gdef\pydatabufferkeyedefvalue@i#1#2{%
+ \edef\pydata@tmp{#2}%
+ \expandafter\pydatabufferkeyedefvalue@ii\expandafter{\pydata@tmp}{#1}}
+\gdef\pydatabufferkeyedefvalue@ii#1#2{%
+ \FVExtraDetokenizeVArg{\pydatabufferkeyvalue@ii{#2}}{#1}}
\endgroup
% \end{macrocode}
% \end{macro}
@@ -1209,7 +1277,7 @@
\ifbool{pydata@bufferhaskey}%
{}{\pydata@error{Cannot buffer value when waiting for a key}}%
\expandafter\stepcounter\expandafter{\pydata@bufferlengthname}%
- \expandafter\edef\csname
+ \expandafter\xdef\csname
\pydata@bufferlinename\expandafter\arabic\expandafter{\pydata@bufferlengthname}%
\endcsname{%
\pydata@mlstropen
@@ -1218,7 +1286,7 @@
\ifbool{pydata@bufferhaskey}%
{}{\pydata@error{Cannot buffer value when waiting for a key}}%
\expandafter\stepcounter\expandafter{\pydata@bufferlengthname}%
- \expandafter\edef\csname
+ \expandafter\xdef\csname
\pydata@bufferlinename\expandafter\arabic\expandafter{\pydata@bufferlengthname}%
\endcsname{%
\pydata@escstrtext{#1}%
@@ -1227,7 +1295,7 @@
\ifbool{pydata@bufferhaskey}%
{}{\pydata@error{Cannot buffer value when waiting for a key}}%
\expandafter\stepcounter\expandafter{\pydata@bufferlengthname}%
- \expandafter\edef\csname
+ \expandafter\xdef\csname
\pydata@bufferlinename\expandafter\arabic\expandafter{\pydata@bufferlengthname}%
\endcsname{%
\pydata@mlstrclose,%
@@ -1252,21 +1320,9 @@
% \begin{macrocode}
\newenvironment{pydatabuffermlvalue}%
{\VerbatimEnvironment
- \begin{VerbatimBuffer}[buffername=pydata@tmpbuffer, globalbuffer=true]}%
- {\end{VerbatimBuffer}}
-\AfterEndEnvironment{pydatabuffermlvalue}{%
\pydatabuffermlvaluestart
- \setcounter{pydata@bufferindex}{1}%
- \loop\unless\ifnum\value{pydata@bufferindex}>\value{pydata@tmpbufferlength}\relax
- \expandafter\let\expandafter\pydata@tmpbufferline
- \csname pydata@tmpbufferline\arabic{pydata@bufferindex}\endcsname
- \expandafter\let
- \csname pydata@tmpbufferline\arabic{pydata@bufferindex}\endcsname\pydata@undefined
- \expandafter\pydatabuffermlvalueline\expandafter{\pydata@tmpbufferline}%
- \stepcounter{pydata@bufferindex}%
- \repeat
- \setcounter{pydata@tmpbufferlength}{0}%
- \setcounter{pydata@bufferindex}{0}%
+ \begin{VerbatimBuffer}[bufferer=\pydatabuffermlvalueline]}%
+ {\end{VerbatimBuffer}%
\pydatabuffermlvalueend}
% \end{macrocode}
% \end{macro}
diff --git a/macros/latex/contrib/latex2pydata/latex2pydata.ins b/macros/latex/contrib/latex2pydata/latex2pydata.ins
index 6367807032..ed696a1f38 100644
--- a/macros/latex/contrib/latex2pydata/latex2pydata.ins
+++ b/macros/latex/contrib/latex2pydata/latex2pydata.ins
@@ -1,4 +1,4 @@
-%% Copyright (C) 2023 by Geoffrey M. Poore <gpoore@gmail.com>
+%% Copyright (C) 2023-2024 by Geoffrey M. Poore <gpoore@gmail.com>
%% --------------------------------------------------------------------------
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3c
@@ -26,7 +26,7 @@
This is a generated file.
-Copyright (C) 2023 by Geoffrey M. Poore <gpoore@gmail.com>
+Copyright (C) 2023-2024 by Geoffrey M. Poore <gpoore@gmail.com>
--------------------------------------------------------------------------
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License, either version 1.3c
diff --git a/macros/latex/contrib/latex2pydata/latex2pydata.pdf b/macros/latex/contrib/latex2pydata/latex2pydata.pdf
index 96eca7e89d..815d40d7be 100644
--- a/macros/latex/contrib/latex2pydata/latex2pydata.pdf
+++ b/macros/latex/contrib/latex2pydata/latex2pydata.pdf
Binary files differ
diff --git a/macros/latex/contrib/listings/listings-devel.pdf b/macros/latex/contrib/listings/listings-devel.pdf
index 5cf9af1ff8..da1506f1df 100644
--- a/macros/latex/contrib/listings/listings-devel.pdf
+++ b/macros/latex/contrib/listings/listings-devel.pdf
Binary files differ
diff --git a/macros/latex/contrib/listings/listings.dtx b/macros/latex/contrib/listings/listings.dtx
index 06f881726b..525ba1a4ae 100644
--- a/macros/latex/contrib/listings/listings.dtx
+++ b/macros/latex/contrib/listings/listings.dtx
@@ -135,7 +135,7 @@
% Hoffmann became the maintainer of the \packagename{listings}
% package in 2013; see the Preface for details.}~ %
% \textless\lstemail\textgreater}
-% \date{2024/03/11\enspace\enspace Version 1.10a\ \box\abstractbox}
+% \date{2024/05/25\enspace\enspace Version 1.10b\ \box\abstractbox}
% \def\lstemail{\href{mailto:j.hoffmann@fh-aachen.de}{\texttt{j.hoffmann(at)fh-aachen.de}}}
% \ifhyper
% \hypersetup{pdftitle=The Listings Package,
@@ -3561,15 +3561,18 @@
% other & \texttt{!\ " \#\ \%\ \&\ ' ( ) * + , - .\ / :\ ; < = > ?}\\
% & {\catcode`\|=12\texttt{[ \char92\ ] \textasciicircum\ \char123\
% | \char125\ \textasciitilde}}\\
-% space & chr(32)\\
-% tabulator & chr(9)\\
-% form feed & chr(12)\\
+% space & \texttt{chr(32)}\footnotemark{}\\
+% tabulator & \texttt{chr(9)}\\
+% form feed & \texttt{chr(12)}\\
% \noalign{\smallskip}
% \end{tabular}
% \par\noindent
% Note: Extended characters of codes 128--255 (if defined) are \emph{currently}
% letters.
% \end{table}
+% \footnotetext{Here and at other places |chr(|\meta{number}|)| means a
+% Pascal function which returns the character which has ASCII value
+% \meta{number}.}
%
%
% \paragraph{Strings}\label{uStrings}
@@ -4197,20 +4200,25 @@
%
% \subsection{Listings inside arguments}\label{uListingsArguments}
%
-% At the moment it isn't possible to use \verb-\lstinline{...}- in a cell
+% A long time it wasn't possible to use \verb-\lstinline{...}- in a cell
% of a table\makeatletter\@ifundefined{r@uProcessingInline}{}{%
% (see section \ref{uProcessingInline} on page \pageref{uProcessingInline}
% for more information)},%
% \makeatother%
-% but it is possible to define a wrapper macro
-% which can be used instead of \verb-\lstinline{...}-:
+% but there was a recommended workaround. This workaround is still
+% functional, but now one can use \verb-\lstinline{...}- and of course
+% \verb-\lstinline|...|- directly:
% \begin{lstsample}[lstlisting]{}{}
% \newcommand\foo{\lstinline{t}}
% \newcommand\foobar[2][]{\lstinline[#1]{#2}}
%
% \begin{tabular}{ll}
-% \foo & a variable\\
-% \foobar[language=java]{int u;} & a declaration
+% \lstinline|r| & a first variable (standard)\\
+% \lstinline[language=java]|int s;| & a standard declaration \\
+% \foo & a second variable (workaround)\\
+% \foobar[language=java]{int u;} & a (workaraond) declaration \\
+% \lstinline{v} & another variable using braces\\
+% \lstinline[language=java]{int w;} & an additional braced declaration
% \end{tabular}
% \end{lstsample}
%
@@ -5744,7 +5752,7 @@
% \item |\lst@Init\relax|
% \item |\lst@Def{`#1}{\lst@DeInit\egroup}| installs the `end inline'
% detection, where |#1| is the next character after |\lstinline|.
-% Moreover chr(13) is redefined to end the fragment in the same way but
+% Moreover |chr(13)| is redefined to end the fragment in the same way but
% also issues an error message.
% \item Now comes the source code and \ldots
% \item \ldots\ |\lst@DeInit| (from |\lst@Def| above) ends the code snippet
@@ -5978,7 +5986,7 @@
% \part{Implementation}
%
%
-% \CheckSum{12409}
+% \CheckSum{12435}
%^^A
%^^A Don't index TeX-primitives.
%^^A
@@ -6122,8 +6130,8 @@
% All files will have same date and version.
% \begin{macrocode}
%<*kernel|misc|doc>
-\def\filedate{2024/03/11}
-\def\fileversion{1.10a}
+\def\filedate{2024/05/25}
+\def\fileversion{1.10b}
%</kernel|misc|doc>
% \end{macrocode}
% What we need and who we are.
@@ -6662,11 +6670,11 @@
\ifx#1\relax
\else \lccode`\^^@=`#1%
% \end{macrocode}
-% Otherwise we say that |^^@|=chr(0) is the lower case version of the first
+% Otherwise we say that |^^@|=|chr(0)| is the lower case version of the first
% character.
% Then we test the second character.
% If there is none, we append the lower case |^^@| to |\lst@temp|.
-% Otherwise we say that |^^A|=chr(1) is the lower case version of the second
+% Otherwise we say that |^^A|=|chr(1)| is the lower case version of the second
% character and we test the next argument, and so on.
% \begin{macrocode}
\ifx#2\relax
@@ -6703,7 +6711,7 @@
\lst@next}
\endgroup
% \end{macrocode}
-% This |\endgroup| restores the catcodes of chr(0)--chr(8), but not the
+% This |\endgroup| restores the catcodes of |chr(0)|--|chr(8)|, but not the
% catcodes of the characters inside |\lst@MakeActive@| since they are already
% read.
%
@@ -14552,7 +14560,7 @@
\fi
\lsthk@InitVars \lsthk@InitVarsBOL
% \end{macrocode}
-% The end of line character chr(13)=|^^M| controls the processing, see the
+% The end of line character |chr(13)|=|^^M| controls the processing, see the
% definition of |\lst@MProcessListing| below.
% The argument |#1| is either |\relax| or |\lstenv@backslash|.
% \begin{macrocode}
@@ -14904,36 +14912,35 @@
% \subsubsection{Processing inline listings}\label{uProcessingInline}
%
% \begin{macro}{\lstinline}
-% In addition to |\lsthk@PreSet|, we use |boxpos=b| and flexiblecolumns.
-% I've inserted |\leavevmode| after bug report from \lsthelper{Michael~Weber}
-% {1999/12/16}{wrong spacing in list environments}. \lsthelper{Olivier~Lecarme}
-% {2001/07/30}{inconsistent `break' when \lstinline is used inside caption}
-% reported a problem which has gone after removing |\let| |\lst@newlines|
-% |\@empty| (now |\lst@newlines| is a counter!). Unfortunately I don't know
-% the reason for inserting this code some time ago! At the end of the macro we
-% check the delimiter.
-% \begin{macrocode}
-\newcommand\lstinline[1][]{%
- \leavevmode\bgroup % \hbox\bgroup --> \bgroup
- \def\lst@boxpos{b}%
- \lsthk@PreSet\lstset{flexiblecolumns,#1}%
- \lsthk@TextStyle
- \@ifnextchar\bgroup{%
-% \end{macrocode}
-% \lsthelper{Luc~Van~Eycken}{2014/01/22}{\rcmdname\lstinline{} in alignments}
-% reported, that the experimental implementation of |\lstinline| with
-% braces instead of characters surrounding the source code resulted in an
-% error if used in a tabular environment. He found that this error comes
-% from the master counter (cf. appendix D (Dirty Tricks), item 5. (Brace
-% hacks), of the TeXbook (p. 385-386)). Adding the following line at this
-% point
+% In addition to |\lsthk@PreSet|, we use |boxpos=b| and
+% flexiblecolumns. I've inserted |\leavevmode| after bug report from
+% \lsthelper{Michael~Weber} {1999/12/16}{wrong spacing in list
+% environments}. \lsthelper{Olivier~Lecarme} {2001/07/30}{inconsistent
+% `break' when \lstinline is used inside caption} reported a problem
+% which has gone after removing |\let| |\lst@newlines| |\@empty| (now
+% |\lst@newlines| is a counter!). Unfortunately I don't know the reason
+% for inserting this code some time ago! At the end of the macro we
+% check the delimiter.\footnote{This is text of the original author
+% Carsten Heinz.}
+%
+% Then came an experimental version which allowed braces, but
+% \lsthelper{Luc~Van~Eycken}{2014/01/22}{\rcmdname\lstinline{} in
+% alignments} reported, that the experimental implementation of
+% |\lstinline| with braces instead of characters surrounding the source
+% code resulted in an error if used in a tabular environment.
+%
+% He found that this error comes from the master counter (cf. appendix
+% D (Dirty Tricks), item 5. (Brace hacks), of the TeXbook
+% (p. 385-386)). Adding the following line after testing the next
+% character (line no. 7 in the following outcommented snippet)
%\begin{verbatim}
-% \ifnum`{=0}\fi%
+%\ifnum`{=0}\fi%
%\end{verbatim}
-% remedies the wrong behaviour. But \lsthelper{Qing~Lee}{2014/06/28}{-}
-% pointed out, that this breaks code like the one showed in
-% \ref{uListingsArguments} on \pageref{uListingsArguments} and proposed
-% another solution which in turn broke the code needed by Luc:
+% remedies the wrong behaviour. But \lsthelper{Qing~Lee}{2014/06/28}{-}
+% pointed out, that this breaks code like the one shown in section
+% \ref{uListingsArguments} on page \pageref{uListingsArguments} and
+% proposed another solution which in turn broke the code provided by
+% Luc:
%\begin{verbatim}
% \renewcommand\lstinline[1][]{%
% \leavevmode\bgroup % \hbox\bgroup --> \bgroup
@@ -14944,20 +14951,45 @@
% \@ifnextchar\bgroup{%
% \ifnum`{=\z@}\fi%
% \afterassignment\lst@InlineG \let\@let@token}{%
-% \ifnum`{=\z@}\fi\lstinline@}}
+% \ifnum`{=\z@}\fi\lstinline@}%
+%}
%\end{verbatim}
-% So finally the old code comes back and the people, who need a
-% |\lstinline| with braces, should use the workaround from section
-% \ref{uListingsArguments} on page \pageref{uListingsArguments}.
+% So finally the old code came back and the people, who needed a
+% |\lstinline| with braces, should use the workaround from section
+% \ref{uListingsArguments} on page \pageref{uListingsArguments}.
+%
+% This long outstanding deficiency is now repaired by
+% \lsthelper{user5028841}{2024/05/05}{Regarding the Listings package}
+% who provided a solution by using special characters as begin and end
+% of a group:
+% \begin{macrocode}
+\edef\lst@temp{\the\catcode`\^^@}
+\catcode`\^^@=1
+\newcommand\lstinline[1][]{%
+ \leavevmode\bgroup % \hbox\bgroup --> \bgroup
+ \def\lst@boxpos{b}%
+ \lsthk@PreSet\lstset{flexiblecolumns,#1}%
+ \lsthk@TextStyle
+ \@ifnextchar\bgroup{%
+ \afterassignment\lst@InlineG \romannumeral`^^@\iffalse}\fi
+ \let\@let@token}%
+ \lstinline@}
+% \end{macrocode}
+% Here we restore the previous catcode of |\^^@|:
+% \begin{macrocode}
+\catcode`\^^@=\lst@temp
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\lst@inline@}
+% This is the standard method after processing the optional arguments
+% of |\lstinline|.
% \begin{macrocode}
- \afterassignment\lst@InlineG \let\@let@token}%
- \lstinline@}
\def\lstinline@#1{%
- \lst@Init\relax
- \lst@IfNextCharActive{\lst@InlineM#1}{\lst@InlineJ#1}}
-\lst@AddToHook{TextStyle}{}% init
+ \lst@Init\relax
+ \lst@IfNextCharActive{\lst@InlineM#1}{\lst@InlineJ#1}}
% \end{macrocode}
% \begin{macrocode}
+\lst@AddToHook{TextStyle}{}% init
\lst@AddToHook{SelectCharTable}{\lst@inlinechars}
\global\let\lst@inlinechars\@empty
% \end{macrocode}
@@ -14965,56 +14997,68 @@
%
% \begin{macro}{\lst@InlineM}
% \begin{macro}{\lst@InlineJ}
-% treat the cases of `normal' inlines and inline listings inside an argument.
-% In the first case the given character ends the inline listing and EOL within
-% such a listing immediately ends it and produces an error message.
+% treat the cases of `normal' inlines and inline listings inside an
+% argument. In the first case the given character ends the inline
+% listing and EOL within such a listing immediately ends it and
+% produces an error message.
% \begin{macrocode}
-\def\lst@InlineM#1{\gdef\lst@inlinechars{%
+\def\lst@InlineM#1{%
+ \gdef\lst@inlinechars{%
\lst@Def{`#1}{\lst@DeInit\egroup\global\let\lst@inlinechars\@empty}%
\lst@Def{13}{\lst@DeInit\egroup \global\let\lst@inlinechars\@empty
- \PackageError{Listings}{lstinline ended by EOL}\@ehc}}%
- \lst@inlinechars}
+ \PackageError{Listings}{lstinline ended by EOL}\@ehc}}%
+ \lst@inlinechars}
% \end{macrocode}
% In the other case we get all characters up to |#1|, make these characters
% active, execute (typeset) them and end the listing (all via temporary macro).
% That's all about it.
% \begin{macrocode}
\def\lst@InlineJ#1{%
- \def\lst@temp##1#1{%
- \let\lst@arg\@empty \lst@InsideConvert{##1}\lst@arg
- \lst@DeInit\egroup}%
- \lst@temp}
+ \def\lst@temp##1#1{%
+ \let\lst@arg\@empty \lst@InsideConvert{##1}\lst@arg
+ \lst@DeInit\egroup}%
+ \lst@temp}
% \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\lst@InlineG}
-% is experimental.
+% is experimental.
% \begin{macrocode}
\def\lst@InlineG{%
- \lst@Init\relax
- \lst@IfNextCharActive{\lst@InlineM\}}%
- {\let\lst@arg\@empty \lst@InlineGJ}}
+ \lst@Init\relax
+ \lst@IfNextCharActive{\lst@InlineM\}}{%
+ \let\lst@arg\@empty \lst@InlineGJ}}
+% \end{macrocode}
+% This is the point for closing the group:
+% \begin{macrocode}
+\edef\lst@temp{\the\catcode`\^^@}
+\catcode`\^^@=2
\def\lst@InlineGJ{\futurelet\@let@token\lst@InlineGJTest}
\def\lst@InlineGJTest{%
- \ifx\@let@token\egroup
- \afterassignment\lst@InlineGJEnd
- \expandafter\let\expandafter\@let@token
+ \ifx\@let@token\egroup
+ \iffalse{\fi\romannumeral`^^@
+ \afterassignment\lst@InlineGJEnd
+ \expandafter\let\expandafter\@let@token
+ \else
+ \ifx\@let@token\@sptoken
+ \let\lst@next\lst@InlineGJReadSp
\else
- \ifx\@let@token\@sptoken
- \let\lst@next\lst@InlineGJReadSp
- \else
- \let\lst@next\lst@InlineGJRead
- \fi
- \expandafter\lst@next
+ \let\lst@next\lst@InlineGJRead
+ \fi
+ \expandafter\lst@next
\fi}
+% \end{macrocode}
+% As before: restore the previous catcode of |\^^@|:
+% \begin{macrocode}
+\catcode`\^^@=\lst@temp
\def\lst@InlineGJEnd{\lst@arg\lst@DeInit\egroup}
\def\lst@InlineGJRead#1{%
- \lccode`\~=`#1\lowercase{\lst@lAddTo\lst@arg~}%
- \lst@InlineGJ}
+ \lccode`\~=`#1\lowercase{\lst@lAddTo\lst@arg~}%
+ \lst@InlineGJ}
\def\lst@InlineGJReadSp#1{%
- \lccode`\~=`\ \lowercase{\lst@lAddTo\lst@arg~}%
- \lst@InlineGJ#1}
+ \lccode`\~=`\ \lowercase{\lst@lAddTo\lst@arg~}%
+ \lst@InlineGJ#1}
% \end{macrocode}
% \end{macro}
%
@@ -15313,7 +15357,7 @@
%
% \begin{macro}{\lst@MSkipToFirst}
% We just look whether to drop more lines or to leave the mode which restores
-% the definition of chr(13) and chr(10).
+% the definition of |chr(13)| and |chr(10)|.
% \begin{macrocode}
\def\lst@MSkipToFirst{%
\global\advance\lst@lineno\@ne
@@ -15391,7 +15435,7 @@
% \end{macrocode}
% We must append an active backslash and the `end string' to |\lst@arg|. So all
% (in fact most) other processing won't notice that the code has been inside
-% an argument. But the EOL character is chr(10)=|^^J| now and not chr(13).
+% an argument. But the EOL character is |chr(10)|=|^^J| now and not |chr(13)|.
% \begin{macrocode}
\begingroup \lccode`\~=`\\\lowercase{%
\gdef\lstenv@ProcessJ@{%
diff --git a/macros/latex/contrib/listings/listings.pdf b/macros/latex/contrib/listings/listings.pdf
index 41c366106a..b4bfc0d79e 100644
--- a/macros/latex/contrib/listings/listings.pdf
+++ b/macros/latex/contrib/listings/listings.pdf
Binary files differ
diff --git a/macros/latex/contrib/listings/lstdrvrs.dtx b/macros/latex/contrib/listings/lstdrvrs.dtx
index 56c2a92642..8541b7a0b9 100644
--- a/macros/latex/contrib/listings/lstdrvrs.dtx
+++ b/macros/latex/contrib/listings/lstdrvrs.dtx
@@ -1,6 +1,6 @@
% \iffalse
%
-% Time-stamp: <2024-03-12 09:33:03 ax006ho>
+% Time-stamp: <2024-05-25 06:23:16 ax006ho>
%
%<*driver>
\documentclass{ltxdoc}
@@ -33,7 +33,7 @@
% \title{Language, Style and Format drivers\\ for \textsf{Listings}\\
% {\large by Carsten Heinz and individual authors:}}
% \author{\InputIfFileExists{lstdrvrs.tmp}{}{}}
-% \date{2024/03/11\enspace\enspace Version 1.10a\ \box\abstractbox}
+% \date{2024/05/25\enspace\enspace Version 1.10b\ \box\abstractbox}
%
% \ifhyper
% \hypersetup{pdftitle={Language, Style and Format drivers for the
@@ -138,7 +138,7 @@
% \endgroup
% We mainly define default dialects.
% \begin{macrocode}
-\ProvidesFile{listings.cfg}[2024/03/11 1.10a listings configuration]
+\ProvidesFile{listings.cfg}[2024/05/25 1.10b listings configuration]
\def\lstlanguagefiles
{lstlang0.sty,lstlang1.sty,lstlang2.sty,lstlang3.sty}
\lstset{defaultdialect=[R/3 6.10]ABAP,
@@ -154,6 +154,7 @@
defaultdialect=[11.0]Mathematica,
defaultdialect=[OMG]OCL,
defaultdialect=[Standard]Pascal,
+ defaultdialect=[2]Python,
defaultdialect=[67]Simula,
defaultdialect=[plain]TeX,
defaultdialect=[97]VRML}
@@ -186,7 +187,7 @@
%<+lua-prf>\ProvidesFile{listings-lua.prf}
%<+python-prf>\ProvidesFile{listings-python.prf}
%<+rexx-prf>\ProvidesFile{listings-rexx.prf}
-%<-config> [2024/03/11 1.10a listings language file]
+%<-config> [2024/05/25 1.10b listings language file]
% \end{macrocode}
%
%
@@ -7819,7 +7820,8 @@ morecomment=[l]!%
%
% In August 2013
% \lstthanks{Alexis~Dimitriadis}{A.Dimitriadis@uu.nl}{2013/08/15} reworked
-% the definition by supplying the builtins.
+% the definition by supplying the builtins. The current version is based on
+% \url{https://docs.python.org/2/reference/lexical_analysis.html#identifiers}.
% \begingroup
% \begin{macrocode}
%<*lang1>
@@ -7828,17 +7830,22 @@ morecomment=[l]!%
%%
%% Python definition (c) 1998 Michael Weber
%% Additional definitions (2013) Alexis Dimitriadis
+%% small corrections based on
+%% https://docs.python.org/2/reference/lexical_analysis.html#identifiers
%%
-\lst@definelanguage{Python}{%
- morekeywords={access, and, break, class, continue, def, del, elif, else,%
- except, exec, finally, for, from, global, if, import, in, is, lambda,%
- not, or, pass, print, raise, return, try, while},%
+\lst@definelanguage[2]{Python}{%
+ morekeywords={and, as, assert, break, class, continue, def, del, elif,%
+ else, except, exec, finally, for, from, global, if, import, in, is,%
+ lambda, not, or, pass, print, raise, return, try, while, with, yield},%
% \end{macrocode}
-% Python has a long list of builtin-in functions
+% Python has a long list of builtin-in functions (altogether 76 entries
+% plus 5 special ones)
% (\url{http://docs.python.org/2/library/functions.html}) and it is a good
-% idea to make them visible in printed code
+% idea to make them visible in printed code.
% \begin{macrocode}
- % Built-ins
+ % Built-ins according to
+ % http://docs.python.org/2/library/functions.html,
+ % the last five entries are known as advanced or not essential
morekeywords=[2]{abs, all, any, basestring, bin, bool, bytearray,%
callable, chr, classmethod, cmp, compile, complex, delattr, dict, dir,%
divmod, enumerate, eval, execfile, file, filter, float, format,%
@@ -7847,43 +7854,96 @@ morecomment=[l]!%
memoryview, min, next, object, oct, open, ord, pow, property, range,%
raw_input, reduce, reload, repr, reversed, round, set, setattr, slice,%
sorted, staticmethod, str, sum, super, tuple, type, unichr, unicode,%
- vars, xrange, zip, apply, buffer, coerce, intern},%
+ vars, xrange, zip, __import__, apply, buffer, coerce, intern},%
sensitive=true,%
morecomment=[l]\#,%
+ morestring=[s]{'''}{'''},% used for documentation text
+ % (multiline strings)
+ morestring=[s]{"""}{"""},% added by Philipp Matthias Hahn
morestring=[b]',%
- morestring=[b]",%
-% \end{macrocode}
-% According to PEP (Python Enhancement Proposals) comment should be
-% distinguished from documentation strings, so we define
-% \begin{macrocode}
- morecomment=[s]{'''}{'''},% used for documentation text
- % (mulitiline strings)
- morecomment=[s]{"""}{"""},% added by Philipp Matthias Hahn
-% \end{macrocode}
-% \lsthelper{J\"urgen Dietel}{j.dietel@rz.rwth-aachen}{2015/05/05}{} provided
-% an example with a wrong representation of documentation strings, so the
-% two lines above got changed from |morestring| $\rightarrow$ |morecomment|.
-%
-% Python now supports so called \emph{raw strings} and also Unicode
-% strings. Here is the definition of these strings:
-% \begin{macrocode}
- morestring=[s]{r'}{'},% `raw' strings
- morestring=[s]{r"}{"},%
- morestring=[s]{r'''}{'''},%
- morestring=[s]{r"""}{"""},%
- morestring=[s]{u'}{'},% unicode strings
- morestring=[s]{u"}{"},%
- morestring=[s]{u'''}{'''},%
- morestring=[s]{u"""}{"""}%
-}%
+ morestring=[b]"%
+}
% \end{macrocode}
% \lsthelper{Philipp Matthias Hahn}{pmhahn@titan.lahn.de}{2002/04/18}{}
-% added the third comment. \lsthelper{eRreuR}{rogspr@newdeal.ch}{2002/05/28}
-% {probl\`eme avec "listings" et le langage Python} found a bug using Python
-% and \lsthelper{Nicolas Markey}{markey@lsv.ens-cachan.fr}{2002/05/29}
+% added the third comment above.
+% \lsthelper{eRreuR}{rogspr@newdeal.ch}{2002/05/28} {probl\`eme avec
+% "listings" et le langage Python} found a bug using Python and
+% \lsthelper{Nicolas Markey}{markey@lsv.ens-cachan.fr}{2002/05/29}
% {listings and Python} informed me about the corresponding thread on
% \texttt{fr.comp.text.tex} and provided the fix---adding \texttt{[b]} to
% both \texttt{morestring} declarations.
+%
+% \lsthelper{J\"urgen Dietel}{j.dietel@rz.rwth-aachen}{2015/05/05}{}
+% provided an example with a wrong representation of documentation strings,
+% so the two lines added by Philipp Matthias Hahn got changed from
+% |morestring| $\rightarrow$ |morecomment|.\footnote{According to PEP
+% (Python Enhancement Proposals---\url{https://peps.python.org/pep-0257/})
+% comment should be distinguished from documentation strings.}
+%
+% Python 3.0 was released in December 2008 and brought with it a number of
+% new features. \lsthelper{Naoki Sean
+% Pross}{npross@student.ethz.ch}{2024/05/25}{Python 3 syntax support for
+% the listings LaTeX package} provided the lists of new keywords and
+% built-in functions as well as the support for special strings.
+% \begin{macrocode}
+\lst@definelanguage[3]{Python}[2]{Python}{%
+ % keywords
+ deletekeywords={exec, print},
+ morekeywords={False, None, True, async, await, nonlocal,
+% \end{macrocode}
+% Python knows so called soft keywords:
+% \begin{macrocode}
+ match, case},
+% \end{macrocode}
+% The list of built-in functions has changed considerably (only 71 entries,
+% no special ones):
+% \begin{macrocode}
+ % built-in functions
+ deletekeywords=[2]{apply, basestring, buffer, cmp, coerce, execfile, %
+ file, intern, long, raw_input, reduce, reload, unichr, unicode, xrange},
+ morekeywords=[2]{aiter, anext, ascii, breakpoint, bytes, exec},
+% \end{macrocode}
+% Python now supports special strings like \emph{raw strings}, Unicode
+% strings, and some more. Here is the definition of these strings:
+% \begin{macrocode}
+ % `raw' strings
+ morestring=[s]{r'}{'},
+ morestring=[s]{r"}{"},
+ morestring=[s]{r'''}{'''},
+ morestring=[s]{r"""}{"""},
+ morestring=[s]{R'}{'},
+ morestring=[s]{R"}{"},
+ morestring=[s]{R'''}{'''},
+ morestring=[s]{R"""}{"""},
+ % Unicode strings
+ morestring=[s]{u'}{'},
+ morestring=[s]{u"}{"},
+ morestring=[s]{u'''}{'''},
+ morestring=[s]{u"""}{"""},
+ morestring=[s]{U'}{'},
+ morestring=[s]{U"}{"},
+ morestring=[s]{U'''}{'''},
+ morestring=[s]{U"""}{"""},
+ % Format strings
+ morestring=[s]{f'}{'},
+ morestring=[s]{f"}{"},
+ morestring=[s]{f'''}{'''},
+ morestring=[s]{f"""}{"""},
+ morestring=[s]{F'}{'},
+ morestring=[s]{F"}{"},
+ morestring=[s]{F'''}{'''},
+ morestring=[s]{F"""}{"""},
+ % Byte literals
+ morestring=[s]{b'}{'},
+ morestring=[s]{b"}{"},
+ morestring=[s]{b'''}{'''},
+ morestring=[s]{b"""}{"""},
+ morestring=[s]{B'}{'},
+ morestring=[s]{B"}{"},
+ morestring=[s]{B'''}{'''},
+ morestring=[s]{B"""}{"""},
+}%
+% \end{macrocode}
% \begin{macrocode}
%</lang1>
% \end{macrocode}
@@ -7903,6 +7963,8 @@ morecomment=[l]!%
%% Actual colors from idlelib/config-highlight.def
%% --> corrected to ``web-safe''
+%% Unimplemented IDLE syntax: function/class names being
+%% defined should be blue
%% strings = #00aa00 / 0,170,0 (a darker green)
%% builtins = #900090 / 144,0,144 (purple-ish)
%% keywords = #FF7700 / 255,119,0 (quite close to plain `orange')
@@ -7958,6 +8020,7 @@ morecomment=[l]!%
procedure,pull,push,queue,return,say,select,signal,then,%
to,trace,when},%
sensitive=false,%
+ morecomment=[l]{--},%
morecomment=[n]{/*}{*/},%
morestring=[d]{'},%
morestring=[d]{"},%
@@ -7999,7 +8062,6 @@ morecomment=[l]!%
sensitive=false,%
morestring=[d]",%
morestring=[d]',%
- morecomment=[s]{/*}{*/},%
}[keywords,comments,strings]
% \end{macrocode}
% \begin{macrocode}
@@ -8026,7 +8088,7 @@ morecomment=[l]!%
::options, ::requires, ::resource, ::routine,%
forward, guard, local, loop, raise, strict,%
},%
- alsoletter={:},%
+ alsoletter={:}
}[keywords,comments,strings]
% \end{macrocode}
% \begin{macrocode}
@@ -8042,38 +8104,22 @@ morecomment=[l]!%
%<*rexx-prf>
% \end{macrocode}
% \begin{macrocode}
-\usepackage{xcolor}
-\usepackage{textcomp}
-
-%% Actual colors from idlelib/config-highlight.def
-%% --> corrected to ``web-safe''
-%% strings = #00aa00 / 0,170,0 (a darker green)
-%% builtins = #900090 / 144,0,144 (purple-ish)
-%% keywords = #FF7700 / 255,119,0 (quite close to plain `orange')
-%\definecolor{IDLEorange}{RGB}{255,119,0} % pretty close to real orange
-%\definecolor{IDLEpurple}{RGB}{144,0,144}
-%\definecolor{IDLEgreen}{RGB}{0,170,0}
-%\definecolor{IDLEred}{RGB}{221,0,0}
-%% Corrected to ``web-safe''
-%\definecolor{orange2}{RGB}{255,102,0}
-\definecolor{purple2}{RGB}{153,0,153} % there's actually no standard purple
-\definecolor{green2}{RGB}{0,153,0} % a darker green
-%\definecolor{red2}{RGB}{221,0,0}
+\usepackage{xcolor} % needed for colors like yellow!10
+\usepackage{textcomp} % needed for upquote
-% Except for green and purple, the other colors are pretty good in standard
-% hue
-\lstdefinestyle{python-idle-code}{%
- language=Python, % the language
- basicstyle=\normalsize\ttfamily, % size of the fonts for the code
- % Color settings to match IDLE style
- keywordstyle=\color{orange}, % core keywords
- keywordstyle={[2]\color{purple2}}, % built-ins
- stringstyle=\color{green2},%
- commentstyle=\color{red},%
+\lstdefinestyle{rexx-colored}{%
+ language=oorexx, % the language
+ backgroundcolor=\color{yellow!10},
+ basicstyle=\normalsize\ttfamily, % size of the fonts for
+ % the code
+ % Color settings to match JHf's preferred style
+ keywordstyle=\color{blue}, % core keywords
+ keywordstyle={[2]\color{cyan}}, % built-ins
+ keywordstyle={[3]\color{olive}}, % special keywords
+ stringstyle=\color{teal},%
+ commentstyle=\color{orange},%
upquote=true, % requires textcomp
}
-% Unimplemented IDLE syntax: function/class names being defined should be
-% blue
% \end{macrocode}
% This code is provided in the file |listings-rexx.prf|, see section
% 2.4.1 (Preferences) of the \packagename{listings} documentation.
diff --git a/macros/latex/contrib/listings/lstdrvrs.pdf b/macros/latex/contrib/listings/lstdrvrs.pdf
index e5ded0321c..0315d2cad2 100644
--- a/macros/latex/contrib/listings/lstdrvrs.pdf
+++ b/macros/latex/contrib/listings/lstdrvrs.pdf
Binary files differ
diff --git a/macros/latex/contrib/litesolution/README.md b/macros/latex/contrib/litesolution/README.md
index 36b84425dc..f597d5fb09 100644
--- a/macros/latex/contrib/litesolution/README.md
+++ b/macros/latex/contrib/litesolution/README.md
@@ -1,17 +1,19 @@
-# The `LiteSolution` package
+# The `LiteSolution` class
-This template provides a fresh design for typesetting solutions of midterm or final exam, textbooks and other exercises.
+The LiteSolution class is designed for typesetting solutions of problems in exams, textbooks, etc.
-**Welcome to pull requests
-[here](https://github.com/xiamyphys/litesolution).**
+**Welcome to pull requests [here](https://github.com/xiamyphys/litesolution/pulls).**
## License
-This work may be distributed and/or modified under the conditions of the
-[LaTeX Project Public License](http://www.latex-project.org/lppl.txt),
-either version 1.3c of this license or (at your option) any later version.
+This work may be distributed and/or modified under the conditions of the [LaTeX Project Public License](http://www.latex-project.org/lppl.txt), either version 1.3c of this license or (at your option) any later version.
This work has the LPPL maintenance status `maintained`.
-The Current Maintainer of this work is
-[Mingyu Hsia](https://www.ctan.org/author/xia-my). \ No newline at end of file
+The Current Maintainer of this work is [Mingyu Hsia](https://www.ctan.org/author/xia-my).
+
+## Derivative Works
+
+- [notebeamer](https://ctan.org/pkg/notebeamer): Package provides macros for inputting slides on note papers quickly.
+
+- [fadingimage](https://ctan.org/pkg/fadingimage): Package provides macros for inputting full width picture at the edges of pages quickly.
diff --git a/macros/latex/contrib/litesolution/doc/figure/universe.pdf b/macros/latex/contrib/litesolution/doc/figure/universe.pdf
index 7795e2b843..6ebe5201dc 100644
--- a/macros/latex/contrib/litesolution/doc/figure/universe.pdf
+++ b/macros/latex/contrib/litesolution/doc/figure/universe.pdf
Binary files differ
diff --git a/macros/latex/contrib/litesolution/doc/figure/universe.tex b/macros/latex/contrib/litesolution/doc/figure/universe.tex
index 3f432e5421..f2fa69eaab 100644
--- a/macros/latex/contrib/litesolution/doc/figure/universe.tex
+++ b/macros/latex/contrib/litesolution/doc/figure/universe.tex
@@ -1,14 +1,14 @@
\documentclass[svgnames,tikz]{standalone}
-\usepackage{xcolor}\let\Bbbk\relax
+\usepackage{xcolor}
\usepackage{newtxtext,mtpro2,cancel,physics2,xfrac}
\usephysicsmodule{ab.legacy}
\usetikzlibrary{tikzmark}
-\tikzset{every node/.style={align=center,MidnightBlue!30},
- every path/.style={MidnightBlue!30,line cap=round}}
+\tikzset{every node/.style={align=center,DarkSlateGray!30},
+ every path/.style={DarkSlateGray!30,line cap=round}}
\begin{document}\tikz{
- \node [above right] at (0,0) {$\color{MidnightBlue!30}
+ \node [above right] at (0,0) {$\color{DarkSlateGray!30}
\tikzmarknode a\Psi=\displaystyle\tikzmarknode b\int
\tikzmarknode c{\mathrm e}^{
\sfrac{\tikzmarknode d{\mathrm i}}{\tikzmarknode e\hbar}
@@ -40,5 +40,5 @@
node [scale=.45,above] {\footnotesize $\varphi$ - $\psi$ interaction\\Yukawa};
\draw ([yshift=-1ex] l.south) coordinate (L) --++ (0,-.3)
node [scale=.45,below] {Higgs\\\footnotesize Boson};
- \foreach \x in {A,B,...,L}\fill [MidnightBlue!30] (\x) circle (.025);}
+ \foreach \x in {A,B,...,L}\fill [DarkSlateGray!30] (\x) circle (.025);}
\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/litesolution/doc/litesolution.pdf b/macros/latex/contrib/litesolution/doc/litesolution.pdf
index 725a19a8d6..8d9efb2ba3 100644
--- a/macros/latex/contrib/litesolution/doc/litesolution.pdf
+++ b/macros/latex/contrib/litesolution/doc/litesolution.pdf
Binary files differ
diff --git a/macros/latex/contrib/litesolution/doc/litesolution.tex b/macros/latex/contrib/litesolution/doc/litesolution.tex
index 3a1212f47e..678e4cd4aa 100644
--- a/macros/latex/contrib/litesolution/doc/litesolution.tex
+++ b/macros/latex/contrib/litesolution/doc/litesolution.tex
@@ -1,27 +1,28 @@
-\documentclass[ans,mtpro2]{litesolution}
+\documentclass[mtpro2,twoside,openany]{litesolution}
\usepackage[listings]{tcolorbox}
-\usepackage{fancyvrb}
-
\lstset{language=[LaTeX]TeX,basicstyle=\small\ttfamily,breaklines=true,columns=flexible}
+
\title{\sffamily The \pkg{LiteSolution} Class}
\subtitle{\sffamily\scshape Hangzhou Dianzi University}
-\bioinfo{\scshape\sffamily Mingyu Hsia, \href{mailto:xiamyphys@gmail.com}{\ttfamily xiamyphys@gmail.com} | \today, Version 2.1c}
-\cover[checkerboard]{schrodinger}\coverhead[5]{universe}
+\bioinfo{Mingyu Hsia (\mailto{xiamyphys@hdu.edu.cn})\quad|\quad\today\quad|\quad Version 2.2b}
+\cover[checkerboard]{schrodinger}\coverhead[3]{universe}
\begin{document}
-\maketitle[MidnightBlue]
-\chapterimage{\UPFadingImage[trim={0 {.9\paperheight} 0 0},clip]{Beautiful-realities}}
-\chapter{An Introduction to The \pkg{LiteSolution} Class}
+\maketitle[DarkSlateGray]
+\frontmatter\tableofcontents\mainmatter
+\chapterimage{\UPFadingImage*[trim={0 {.9\paperheight} 0 0},clip]{Beautiful-realities}}
+
+\chapter{Introduction to the \pkg{LiteSolution} Class}
-\section{Introduction}
+\section{Preface}
-This is the document for the \pkg{litesolution} class, which provides a lite design for typesetting solutions of exams, textbooks or other exercises.
+This is the document for the \pkg{LiteSolution} class, which is designed for typesetting solutions of problems in exams, textbooks, etc.
-Welcome to feedback bugs or ideas via email \href{mailto:xiamyphys@gmail.com}{\ttfamily xiamyphys@gmail.com} or \href{https://github.com/xiamyphys/litesolution}{GitHub}.
+Welcome to feedback bugs or ideas via email \href{mailto:xiamyphys@hdu.edu.cn}{\ttfamily xiamyphys@hdu.edu.cn} or \href{https://github.com/xiamyphys/litesolution}{GitHub}.
-\subsection{Installing \pkg{litesolution} and loading it}
+\subsection{Installing \pkg{LiteSolution} and loading it}
Simply download \verb|litesolution.cls| file from \href{https://github.com/xiamyphys/litesolution}{GitHub} or \href{https://ctan.org/pkg/litesolution}{CTAN} and save it under your working directory. However, I strongly suggest to use terminal to install and update all packages to the latest version
@@ -43,36 +44,40 @@ The test environments are macOS + Mac\hologo{TeX} 2024 / Overleaf / Ubuntu 22.04
\subsection{The \mode{answer} option}
-The \mode{ans} and \mode{noans} modes can show or hide contents in \cmd{solution} environment and \cmd{ans} command.
+The \mode{hideanswer} mode can hide contents in \cmd{solution} environment and \cmd{ans} command.
-\subsection{The \mode{counter} option}
+\subsection{The \mode{math} option}
-The \mode{separate} and \mode{continuous} modes can make the page number between chapters be reset or continuous.
+The \mode{mtpro2}, \mode{newtx} and \mode{newtxsf} modes can format the font of formulas in the document. Please check if mtpro2 font has been installed on your computer correctly before using \mode{mtpro2} mode.
-\subsection{The \mode{math} option}
+\section{Related Packages}
+\begin{description}
+ \item[Package \pkg{notebeamer}] provides macros for inputting slides on note papers quickly.
+ \item[Package \pkg{fadingimage}] provides macros for inputting full width picture at the edges of pages quickly.
+\end{description}
-The \mode{mtpro2} and \mode{newtx} modes can format the font of formulas in the document. Please check if mtpro2 font has been installed on your computer correctly before using \mode{mtpro2} mode.
+\chapter{Settings \& Usages of this Class}
\section{Cover Configurations}
\subsection{The cover page configurations}
\begin{verbatim}
- \title{<content>} \subtitle{<content>}
- \bioinfo{<content>} \cover[<pattern>]{<image>}
- \coverhead[<angle>]{<image>} \coverhead*[<angle>]{<content>}
+ \title{<content>} \subtitle{<content>}
+ \bioinfo{<content>} \cover[<pattern>]{<image>}
+ \coverhead[<angle>]{<image>} \coverhead*[<angle>]{<content>}
- \begin{document} \maketitle[<color>]
+ \begin{document} \maketitle[<color>]
\end{verbatim}
\begin{verbatim}
- \title{\sffamily The \pkg{litesolution} Class}
+ \title{\sffamily The \pkg{LiteSolution} Class}
\subtitle{\sffamily\scshape Hangzhou Dianzi University}
- \bioinfo{\scshape\sffamily Mingyu Hsia, \href{mailto:xiamyphys@gmail.com}
- {\ttfamily xiamyphys@gmail.com} | \today, Version 2.1a}
- \cover[checkerboard]{schrodinger} \coverhead[5]{universe}
+ \bioinfo{Mingyu Hsia (\mailto{xiamyphys@hdu.edu.cn})
+ \quad|\quad\today\quad|\quad Version 2.2b}
+ \cover[checkerboard]{schrodinger} \coverhead[5]{universe}
- \begin{document} \maketitle[Midnightblue]
+ \begin{document} \maketitle[Midnightblue]
\end{verbatim}
\subsection{The chapter head configurations}
@@ -83,6 +88,32 @@ The \mode{mtpro2} and \mode{newtx} modes can format the font of formulas in the
This command can assign the format of the image at every chapters begin and you can adjust the format of the image with the \pkg{fadingimage} package.
+\section{Preset Packages}
+
+This template has preset many packages. The following packages are the common ones
+
+\begin{table}[htbp]
+ \centering\small
+ \begin{tabular}{l l l l l l l l}
+ \toprule
+ \pkg{amsthm} & \pkg{amssymb} & \pkg{bm} & \pkg{booktabs} &
+ \pkg{cancel} & \pkg{caption} & \pkg{circuitikz} & \pkg{datetime} \\
+ \midrule
+ \pkg{derivative} & \pkg{diagbox} & \pkg{esvect} & \pkg{extarrows} &
+ \pkg{fadingimage} & \pkg{fancyhdr} & \pkg{fixdif} & \pkg{fontawesome5} \\
+ \midrule
+ \pkg{geometry} & \pkg{graphics} & \pkg{graphicx} & \pkg{hyperref} &
+ \pkg{indentfirst} & \pkg{lipsum} & \pkg{mathtools} & \pkg{multicol} \\
+ \midrule
+ \pkg{multirow} & \pkg{nicematrix} & \pkg{notebeamer} & \pkg{paracol} &
+ \pkg{pgfplots} & \pkg{physics2} & \pkg{qrcode} & \pkg{refstyle} \\
+ \midrule
+ \pkg{setspace} & \pkg{siunitx} & \pkg{tabularx} & \pkg{tasks} &
+ \pkg{wallpaper} & \pkg{xcolor} & \pkg{xeCJK} & \pkg{xfrac} \\
+ \bottomrule
+ \end{tabular}
+\end{table}
+
\section{Preset Commands}
\subsection{The \cmd{ans} command}
@@ -91,7 +122,7 @@ This command can assign the format of the image at every chapters begin and you
\ans {<contents>}
\end{verbatim}
-This command can underline the answer, and if mode \mode{noans} is enabled, the answer will be hidden.
+This command can underline the answer, and if mode \mode{noans} is enabled the answer will be hidden.
\subsection{The \cmd{solute} command}
@@ -105,7 +136,7 @@ This command can create a fixable answer box when the mode \mode{noans} is enabl
\begin{verbatim}
\def\i{\mathrm i} \def\e{\mathrm e} \def\T{\mathsf T}
- \let\leq\leqslant \let\geq\geqslant
+ \let\leq\leqslant \let\geq\geqslant \let\vec\vv
\end{verbatim}
\section{Preset \pkg{amsthm} Environments}
@@ -113,7 +144,7 @@ This command can create a fixable answer box when the mode \mode{noans} is enabl
\subsection{The \cmd{problem} environment}
\begin{tcblisting}{sidebyside,colback=DarkGreen!5,colframe=DarkGreen!80}
-\begin{problem}\leavevmode
+\begin{problem}[<Keywords>]\leavevmode
\begin{tasks}(2)
\task Choice A \task[\true] Choice B
\task Choice C \task Choice D
@@ -139,42 +170,14 @@ This command can create a fixable answer box when the mode \mode{noans} is enabl
\end{tcblisting}
\end{minipage}
-\subsection{Equation test}
-
-\[\i\hbar\partial_t\psi(\mathbf x,t)=-(\i\hbar c\bm\alpha\cdot\bm\nabla+\beta mc^2)\psi(\mathbf x,t)\]
-
-\section{Preset packages}
-
-This template has preset many packages. The following packages are the common ones
-
-\begin{table}[htbp]
- \centering
- \begin{tabular}{l l l l l l l l}
- \toprule
- \pkg{amsthm} & \pkg{bm} & \pkg{booktabs} & \pkg{cancel} & \pkg{caption} & \pkg{circuitikz} & \pkg{datetime} & \pkg{derivative}\\
- \midrule
- \pkg{diagbox} & \pkg{esvect} & \pkg{extarrows} & \pkg{fancyhdr} & \pkg{fixdif} & \pkg{fontawesome5} & \pkg{geometry} & \pkg{indentfirst}\\
- \midrule
- \pkg{lipsum} & \pkg{multicol} & \pkg{multirow} & \pkg{nicematrix} & \pkg{paracol} & \pkg{pgfplots} & \pkg{physics2} & \pkg{refstyle} \\
- \midrule
- \pkg{setspace} & \pkg{siunitx} & \pkg{tabularx} & \pkg{tasks} & \pkg{wallpaper} & \pkg{xcolor} & \pkg{xeCJK} & \pkg{xfrac}\\
- \bottomrule
- \end{tabular}
-\end{table}
-
-\section{Related packages}
-
-\subsection{The \pkg{notebeamer} package}
-
-This package provides an easy way to input slides on note papers quickly for making annotations.
-
-\subsection{The \pkg{fadingimage} package}
-
-This package provides three commands for adding fading full width picture at the top or bottom of a page.
+\section{Equation test}
-\clearpage\appendix\def\thesection{Appendix}
+\[\begin{cases}
+ \i\hbar\partial_t\psi(\mathbf x,t)=\ab(-\frac{\hbar^2}{2m}\bm\nabla^2+V)\\
+ \i\hbar\partial_t\psi(\mathbf x,t)=-(\i\hbar c\bm\alpha\cdot\bm\nabla+\beta mc^2)\psi(\mathbf x,t)
+\end{cases}\]
-\section{Original code for the cover head}
+\section*{Original Code for the Cover Head}
\setstretch{1.15}
\lstinputlisting{figure/universe.tex}
diff --git a/macros/latex/contrib/litesolution/tex/litesolution.cls b/macros/latex/contrib/litesolution/tex/litesolution.cls
index 5cd81c3155..0f59d89630 100644
--- a/macros/latex/contrib/litesolution/tex/litesolution.cls
+++ b/macros/latex/contrib/litesolution/tex/litesolution.cls
@@ -1,5 +1,5 @@
%% ***********************************************************
-%% Copyright 2024 by Mingyu Hsia <xiamyphys@gmail.com> *
+%% Copyright 2024 by Mingyu Hsia <xiamyphys@hdu.edu.cn> *
%% *
%% This work may be distributed and/or modified under *
%% the conditions of the LaTeX Project Public License *
@@ -19,35 +19,27 @@
%% ***********************************************************
% !Mode:: "TeX:UTF-8"
\NeedsTeXFormat{LaTeX2e}
+\PassOptionsToPackage{no-math}{fontspec}
\PassOptionsToPackage{svgnames}{xcolor}
-\ProvidesClass{litesolution}[2024/04/20 v2.1c LiteSolution document class]
+\ProvidesClass{litesolution}[2024/05/07 v2.2b LiteSolution document class]
\RequirePackage{kvoptions}
\RequirePackage{etoolbox}
\SetupKeyvalOptions{family=LITE, prefix=LITE@, setkeys=\kvsetkeys}
\def\ekv#1{\kvsetkeys{LITE}{#1}}
-\DeclareStringOption[ans]{answer}
-\DeclareVoidOption{ans}{\ekv{answer=ans}}
-\DeclareVoidOption{noans}{\ekv{answer=noans}}
+\DeclareStringOption{answer}
+\DeclareVoidOption{hideanswer}{\ekv{answer=hideanswer}}
\DeclareStringOption[newtx]{math}
\DeclareVoidOption{newtx}{\ekv{math=newtx}}
+\DeclareVoidOption{newtxsf}{\ekv{math=newtxsf}}
\DeclareVoidOption{mtpro2}{\ekv{math=mtpro2}}
-\DeclareStringOption[separate]{counter}
-\DeclareVoidOption{separate}{\ekv{counter=separate}}
-\DeclareVoidOption{continuous}{\ekv{counter=continuous}}
-
\DeclareDefaultOption{\PassOptionsToClass{\CurrentOption}{book}}
\ProcessKeyvalOptions*\relax
-\LoadClass[letterpaper,11pt,openany]{book}
+\LoadClass[letterpaper,11pt]{book}
-\RequirePackage{setspace,datetime,caption,booktabs,multicol,diagbox,paracol,enumitem}
-\RequirePackage[notelinecolor=MidnightBlue,notemargin=.75in]{notebeamer}
-\RequirePackage[nokeyprefix]{refstyle}
-\newref{fig}{name={\sffamily\bfseries Figure~}}
-\newref{tab}{name={\sffamily\bfseries Table~}}
-\geometry{margin=1in}
+\RequirePackage{setspace,datetime,caption,booktabs,multicol,diagbox,paracol}
\linespread{1.3}
\ddmmyyyydate
\captionsetup{labelsep=period,labelfont={bf,sf},font=small}
@@ -56,8 +48,15 @@
\AtBeginEnvironment{paracol}{\nointerlineskip}
\AfterEndEnvironment{paracol}{\nointerlineskip}
\columnratio{.64}
+\RequirePackage[inline]{enumitem}
\setlist[enumerate]{itemsep=.5ex}
\setlist[itemize]{itemsep=.5ex}
+\RequirePackage[notelinecolor=MidnightBlue,notemargin=.75in]{notebeamer}
+\geometry{margin=1in}
+\RequirePackage[nokeyprefix]{refstyle}
+\newref{eq}{refcmd=(\ref{#1}),name={\sffamily eq.~},Name={\sffamily Eq.~}}
+\newref{fig}{name={\sffamily fig.~},Name={\sffamily Fig.~}}
+\newref{tab}{name={\sffamily tab.~},Name={\sffamily Tab.~}}
\RequirePackage{graphics,graphicx,wallpaper,pagecolor}
\graphicspath{{./figure/}{./figures/}{./image/}{./images/}{./graphics/}{./graphic/}{./pictures/}{./picture/}}
@@ -70,19 +69,30 @@
\fi
\ifdefstring{\LITE@math}{mtpro2}{%
- \RequirePackage{amssymb}
- \let\Bbbk\relax
\RequirePackage[mtpscr,mtpccal,mtpfrak]{mtpro2}
+ \let\Bbbk\relax
\RequirePackage[mono=false]{libertine}
}{\relax}
-
\ifdefstring{\LITE@math}{newtx}{%
\RequirePackage[libertine,mono=false]{newtx}
+ \let\Bbbk\relax
+}{\relax}
+\ifdefstring{\LITE@math}{newtxsf}{%
+ \RequirePackage{newtxsf,mathrsfs}
+ \RequirePackage[mono=false]{libertine}
}{\relax}
\let\openbox\relax\def\hmmax{0}\def\bmmax{0}
-\RequirePackage{amsthm,physics2,bm,fixdif,derivative,cancel,extarrows,siunitx,xfrac,nicematrix}
+\RequirePackage{amsthm,amssymb,mathtools,physics2,bm,fixdif,derivative,cancel,extarrows,siunitx,xfrac,nicematrix}
+\renewcommand\qedsymbol{$\color{gray}\blacksquare$}
\usephysicsmodule{ab,braket,diagmat,doubleprod,xmat,ab.legacy,op.legacy}
\RequirePackage[e]{esvect}
+\let\vec\vv
+\renewcommand*\env@cases[1][.84]{%
+ \let\@ifnextchar\new@ifnextchar
+ \left\lbrace
+ \def\arraystretch{#1}%
+ \array{@{}l@{\quad}l@{}}%
+}
\AtBeginDocument{%
\def\i{\mathrm i}\def\e{\mathrm e}\def\T{\mathsf T}
\let\leq\leqslant\let\geq\geqslant
@@ -91,6 +101,7 @@
}
\RequirePackage[hidelinks]{hyperref}
+\def\mailto#1{\href{mailto:#1}{\ttfamily #1}}
\RequirePackage{fontawesome5}
\AddToHook{cmd/faIcon/before}{%
\begingroup\fontsize{\fpeval{\f@size*.8}}{0}\selectfont
@@ -98,9 +109,9 @@
\AddToHook{cmd/faIcon/after}{\endgroup}
\RequirePackage{circuitikz,pgfplots,fadingimage}
-\usetikzlibrary{arrows,tikzmark,patterns,calc,fadings,angles,quotes,intersections}
+\usetikzlibrary{arrows,tikzmark,patterns,calc,angles,quotes,intersections}
\tikzset{>=stealth',
-every picture/.append style={%
+ every picture/.append style={%
line join=round,line cap=round,thick
}}
\pgfplotsset{compat=1.8}
@@ -124,31 +135,25 @@ every picture/.append style={%
\def\subtitle#1{\gdef\@subtitle{#1}}
\def\bioinfo#1{\gdef\@bioinfo{#1}}
-\NewDocumentCommand\coverhead{ s O{0} m }{
- \IfBooleanTF{#1}{
- \gdef\s@coverheadrotate{#2}
- \gdef\s@coverhead{#3}}{
- \gdef\@coverheadrotate{#2}
- \gdef\@coverhead{#3}
- }}
+\NewDocumentCommand\coverhead{ O{0} m }{
+ \gdef\@coverheadrotate{#1}\gdef\@coverhead{#2}
+}
\NewDocumentCommand\cover{ o m }{
\IfValueT{#1}{\gdef\@coverpattern{#1}}
\gdef\@cover{#2}}
\RenewDocumentCommand\maketitle{O{MidnightBlue}}{
- \newgeometry{margin=0in}\newpagecolor{#1!10}
+ \begin{titlepage}
+ \newgeometry{margin=0in}\newpagecolor{#1!15}
\tikz[remember picture,overlay]{
\ifcsname @coverhead\endcsname
- \node[rotate=\@coverheadrotate] at ($(current page.center)+(0,.35*\paperheight)$) {\includegraphics[width=\paperwidth]{\@coverhead}};
- \fi
- \ifcsname s@coverhead\endcsname
- \node[scale=2,color=#1!30,rotate=\s@coverheadrotate] at ($(current page.center)+(0,.35*\paperheight)$) {\s@coverhead};
+ \node [rotate=\@coverheadrotate] at ($(current page.center)+(0,.35*\paperheight)$) {\includegraphics[width=\paperwidth]{\@coverhead}};
\fi
\fill [white,opacity=.5] ($(current page.south west)+(.2*\paperwidth,.6*\paperheight)$) rectangle (current page.south east);
\fill [white,opacity=.5] ($(current page.south west)+(.3*\paperwidth,.7*\paperheight)$) rectangle (current page.south east);
\ifcsname @cover\endcsname
\node [opacity=.5] at ($(current page.south west)+(.65*\paperwidth,.3*\paperheight)$) {\includegraphics[height=.3\paperheight]{\@cover}};
\ifcsname @coverpattern\endcsname
- \fill [pattern=\@coverpattern,pattern color=#1!10!white!50!white!50] ($(current page.south west)+(.3*\paperwidth,0)$) rectangle ++ (.7*\paperwidth,.6\paperheight);
+ \fill [pattern=\@coverpattern,pattern color=#1!15!white!25] ($(current page.south west)+(.3*\paperwidth,0)$) rectangle ++ (.7*\paperwidth,.6\paperheight);
\fi\fi
\node [darkgray] at ($(current page.south west)+(.65*\paperwidth,.65*\paperheight)$) {\Huge\bfseries\@title};
\ifcsname @subtitle\endcsname
@@ -156,65 +161,114 @@ every picture/.append style={%
\fi
\ifcsname @bioinfo\endcsname
\node [gray,opacity=.4] at ($(current page.south)+(.15*\paperwidth,.075*\paperheight)$) {\large\@bioinfo};
- \fi}\restoregeometry\restorepagecolor
+ \fi}
+ \end{titlepage}
+ \restoregeometry\restorepagecolor
+ \if@twoside
+ \clearpage%
+ \newpagecolor{#1!15!white!50}
+ \thispagestyle{empty}%
+ \null\clearpage
+ \fi\restorepagecolor
}
+\RequirePackage{tocloft}
+\setlength{\cftbeforetoctitleskip}{6\p@}
+\setlength{\cftaftertoctitleskip}{24\p@}
+\setlength{\cftbeforesecskip}{3\p@}
+\def\contentsname{\sffamily\scshape\hfill Contents\hfill}
+\setcounter{tocdepth}{1}
+
+\let\@chapapptmp\@chapapp
+\def\@chapapp{\textsc{\@chapapptmp}}
\def\chapterimage#1{\gdef\@chapterimage{#1}}
+\def\HUGE{\@setfontsize\HUGE{30}{40}}
\def\@makechapterhead#1{%
+ \def\thesection{\arabic{chapter}.\arabic{section}}
+ \def\theproblem{\thechapter.\arabic{problem}}
+ \vspace*{-36\p@}{%
+ \parindent \z@ \raggedright \normalfont
+ \ifcsname @chapterimage\endcsname
+ \@chapterimage
+ \else\leavevmode
+ \fi
+ \ifnum \c@secnumdepth >\m@ne
+ \if@mainmatter
+ \parbox{6em}
+ {\centering\HUGE\normalfont\bfseries\textcolor{darkgray}\thechapter\vskip4\p@\normalsize\bfseries\textcolor{darkgray}{\bfseries\sffamily\@chapapp}}%
+ \fi
+ \fi
+ \interlinepenalty\@M\hspace*{3ex}
+ \huge\bfseries #1\par\nobreak
+ \vskip 36\p@
+}}
+\def\@makeschapterhead#1{%
+ \def\thesection{\arabic{section}}
+ \def\theproblem{\arabic{problem}}
\setcounter{section}{0}
\setcounter{problem}{0}
- \setcounter{page}{1}{\centering
+ {\centering
\ifcsname @chapterimage\endcsname
\@chapterimage
- \fi\leavevmode\vskip-42\p@
+ \fi\vskip-40\p@
\parindent \z@ \normalfont
\interlinepenalty\@M
\huge \bfseries #1\par\nobreak
- \vskip 26\p@}}
-
-\def\mailto#1{\href{mailto:#1}{\ttfamily #1}}
-\def\thesection{\arabic{section}}
-\def\ans#1{\underline{~#1~}}
-\AddToHook{cmd/section/before}{\setcounter{problem}{0}}
+ \vskip 28\p@}}
+\let\cleardoublepage=\clearpage
+\renewcommand*{\cleardoublepage}{\clearpage\if@twoside \ifodd\c@page\else
+\ifnum \thechapter=0
+ \vspace*{\fill}
+ {\centering\itshape\Large This page was intentionally left blank.\par}
+ \vspace{\fill}
+\else
+ \clearpage%
+ \thispagestyle{empty}%
+ \null\clearpage
+\fi
+\thispagestyle{empty}\newpage
+\if@twocolumn\hbox{}\newpage\fi\fi\fi}
\RequirePackage{fancyhdr}
\pagestyle{fancy}
\let\oldheadrule\headrule
\renewcommand{\headrule}{{\color{gray}\oldheadrule}}
- \renewcommand{\headrulewidth}{1pt}\cfoot{}
- \fancyhead[OL]{\textsc{\color{darkgray}\nouppercase\leftmark}}
- \fancyhead[OR]{\color{darkgray}\sffamily\thepage}
- \fancyhead[ER]{\textsc{\color{darkgray}\nouppercase\rightmark}}
- \fancyhead[EL]{\color{darkgray}\sffamily\thepage}
+ \renewcommand{\headrulewidth}{1pt}
+ \if@twoside\cfoot{}
+ \fancyhead[OL]{\color{darkgray}\nouppercase\leftmark}
+ \fancyhead[OR]{\color{darkgray}\sffamily\thepage}
+ \fancyhead[ER]{\color{darkgray}\nouppercase\rightmark}
+ \fancyhead[EL]{\color{darkgray}\sffamily\thepage}
+ \else
+ \fancyhead[L]{\color{darkgray}\nouppercase\leftmark}
+ \fancyhead[R]{\color{darkgray}\nouppercase\rightmark}
+ \cfoot{\color{darkgray}\sffamily\thepage}
+ \fi
\setlength{\headheight}{14pt}
+\theoremstyle{definition}
+\newtheorem{problem}{\color{DarkGreen}\faIcon{pen-square}~\textsc{\textsf{Problem}}}[chapter]
+\newtheorem*{solution}{\color{MidnightBlue}\faIcon{check-square}~\textsc{\textsf{Solution}}}
+\newtheorem*{scratch}{\color{MidnightBlue}\faIcon{check-square}~\textsc{\textsf{Scratch}}}
+\newtheorem*{note}{\color{DarkRed}\faIcon{info-circle}~\textsc{\textsf{Note}}}
\RequirePackage{comment}
-\ifdefstring{\LITE@answer}{ans}{%
- \def\ans#1{\underline{~#1~}}
- \def\s@solute#1{\relax}\def\@solute#1{\relax}
- \AtBeginDocument{%
- \excludecomment{draft}
- \let\enddraft\relax}
- \def\true{%
- \addtocounter{task}{1}%
- \faIcon{check-circle}}
-}{\relax}
-
-\ifdefstring{\LITE@answer}{noans}{%
+\ifdefstring{\LITE@answer}{hideanswer}{%
\def\ans#1{\underline{\phantom{#1}}}
\def\choiceans#1{\phantom{#1}}
- \def\s@solute#1{\begin{draft}#1\end{draft}}
- \def\@solute#1{\begin{draft}\leavevmode\vspace*{#1ex}\end{draft}}
+ \def\s@solute#1{\begin{scratch}#1\end{scratch}}
+ \def\@solute#1{\begin{scratch}\leavevmode\vspace*{#1ex}\end{scratch}}
\AtBeginDocument{%
\excludecomment{solution}\excludecomment{note}
\let\endsolution\relax\let\endnote\relax}
\def\true{\addtocounter{task}{1}\thetask}
-}{\relax}
-\def\solute{\@ifstar\s@solute\@solute}
-
-\theoremstyle{definition}
-\newtheorem{problem}{\scshape\sffamily\color{DarkGreen}\faIcon{pen-square}~\scshape Problem}[chapter]
-\def\theproblem{\arabic{problem}}
-\newtheorem*{solution}{\scshape\sffamily\color{MidnightBlue}\faIcon{check-square}~\scshape Solution}
-\newtheorem*{draft}{\scshape\sffamily\color{MidnightBlue}\faIcon{check-square}~\scshape Solution}
-\newtheorem*{note}{\scshape\sffamily\color{DarkRed}\faIcon{info-circle}~\scshape Note} \ No newline at end of file
+}{
+ \def\ans#1{\underline{~#1~}}
+ \def\s@solute#1{\relax}\def\@solute#1{\relax}
+ \AtBeginDocument{%
+ \excludecomment{scratch}
+ \let\endscratch\relax}
+ \def\true{\addtocounter{task}{1}\faIcon{check-circle}}
+}
+\DeclareRobustCommand\solute{\@ifstar\s@solute\@solute}
+%%
+%% End of file `litesolution.cls'.
diff --git a/macros/latex/contrib/mathgreeks/README.md b/macros/latex/contrib/mathgreeks/README.md
new file mode 100644
index 0000000000..971fa77dc7
--- /dev/null
+++ b/macros/latex/contrib/mathgreeks/README.md
@@ -0,0 +1,30 @@
+# Math Greek letters - The mathgreeks package
+
+
+## Presentation
+
+The purpose of this package is to provide access to numerous Greek letter fonts
+for math mode, without altering other mathematical characters and symbols
+and without loading whole extensions that provide these fonts.
+Moreover, the chosen font or shape can be changed dynamically throughout the document.
+
+
+## Installation
+
+- run LaTeX on mathgreeks.ins, you obtain the file mathgreeks.sty;
+- if then you run LuaLaTeX on mathgreeks.dtx you get the file mathgreeks.pdf which is also in the archive;
+- if you run pdfLaTex on mathgreeks.dtx you get a shorter version of this pdf file without the examples using fontspec or unicode-math;
+- put the files mathgreeks.sty and mathgreeks.pdf in your TeX Directory Structure.
+
+
+## Author
+
+Antoine Missier
+
+Email: antoine.missier@ac-toulouse.fr
+
+
+## License
+
+Released under the LaTeX Project Public License v1.3 or later.
+See http://www.latex-project.org/lppl.txt
diff --git a/macros/latex/contrib/mathgreeks/mathgreeks.dtx b/macros/latex/contrib/mathgreeks/mathgreeks.dtx
new file mode 100644
index 0000000000..1290c1a7fd
--- /dev/null
+++ b/macros/latex/contrib/mathgreeks/mathgreeks.dtx
@@ -0,0 +1,1330 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2024 by Antoine Missier <antoine.missier@ac-toulouse.fr>
+%
+% This file may be distributed and/or modified under the conditions of
+% the LaTeX Project Public License, either version 1.3 of this license
+% or (at your option) any later version. The latest version of this
+% license is in:
+%
+% http://www.latex-project.org/lppl.txt
+%
+% and version 1.3 or later is part of all distributions of LaTeX version
+% 2005/12/01 or later.
+% \fi
+%
+% \iffalse
+%<*driver>
+\ProvidesFile{mathgreeks.dtx}
+%</driver>
+%<*package>
+\NeedsTeXFormat{LaTeX2e}[2005/12/01]
+\ProvidesPackage{mathgreeks}
+ [2024/05/07 v1.2 .dtx Math Greek letters]
+%</package>
+%<*driver>
+\documentclass[11pt]{article}
+%\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage[english]{babel}
+\usepackage{doc}
+\usepackage{geometry}
+\usepackage[mathdesign=Charter,otherfonts]{mathgreeks}
+\usepackage{sectsty}
+\usepackage{xcolor}
+\usepackage{spacingtricks}
+\usepackage{metalogo}
+%\usepackage{supertabular} % incompatible with tabls
+\usepackage{tabls}
+\usepackage{multirow}
+\usepackage{ifluatex}
+\ifluatex
+ \usepackage{unicode-math}
+ \setmainfont{XCharter}
+\else
+ \usepackage{charter}
+\fi
+\geometry{scale=0.73,vmarginratio=3:4,heightrounded}
+\MakeShortVerb{"}
+\definecolor{darkbrown}{rgb}{0.5,0.1,0.1}
+\allsectionsfont{\color{darkbrown}}
+\newcommand\bs{\textbackslash}
+\DisableCrossrefs
+%\CodelineIndex
+%\RecordChanges
+\OnlyDescription
+\usepackage{hyperref}
+\title{The \textsf{mathgreeks} package}
+\author{Antoine Missier \\ \texttt{antoine.missier@ac-toulouse.fr}}
+\date{\filedate, \fileversion}
+\hypersetup{%
+ colorlinks,
+ linkcolor=blue,
+ citecolor=red,
+ pdftitle={mathgreeks},
+ pdfsubject={LaTeX package},
+ pdfauthor={Antoine Missier}
+}
+
+\begin{document}
+\DocInput{mathgreeks.dtx}
+%\PrintChanges
+%\PrintIndex
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{1061}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+% \changes{v1.0}{2024/04/30}{Initial version}
+% \changes{v1.1}{2024/05/04}{Adding the libsans option; a few changes in the doc}
+% \changes{v1.2}{2024/05/07}{A clarification in the documentation about the option shape=it}
+%
+% \GetFileInfo{mathgreeks.sty}
+%
+% \maketitle
+% \tableofcontents
+%
+% \section{Introduction}
+%
+% The purpose of this package is to provide access to numerous Greek letter fonts
+% for math mode, without altering other mathematical characters and symbols
+% and without loading whole extensions that provide these fonts.
+%
+% The commands "\italpha", "\itbeta"\ldots\ produce the italic forms of the chosen font,
+% and "\upalpha", "\upbeta" \ldots\ produce the upright forms.
+% Style options allow choosing between italic or upright forms for the basic commands
+% "\alpha", "\beta"\ldots
+% Only letters whose glyph differs from the corresponding Roman letter
+% will be defined this way.
+% Therefore, the package does not provide a command "\omicron",
+% whose letter is identical to the Roman `o', and only a few uppercase letters are defined:
+% "\Gamma", "\Delta", "\Theta"\ldots
+%
+% \medskip
+% An ISO recommendation, rarely followed, is to typeset uppercase
+% Greek letters in italic shape, as for other variables~\cite{ICTNS}.
+% This is automatically achieved, for some particular fonts, with packages
+% such as \textsf{fixmath} by Walter Schmidt~\cite{FIXM},
+% \mbox{\textsf{isomath}} by Günter Milde~\cite{ISOM}
+% or \textsf{pm-isomath} by Claudio Beccari~\cite{PMISO} and optionally with some others
+% (such as \textsf{mathpazo} or \textsf{mathptmx} with the option \texttt{slantedGreek}).
+% When running through \LuaLaTeX\ or \XeLaTeX\ you can also get this result
+% with the option \mbox{\texttt{math-style=ISO}} provided
+% by the \textsf{unicode-math} package~\cite{UNIC}.
+%
+% \pagebreak ^^A To get the same page breaking when compiling with pdfLaTeX
+% Furthermore there are several packages that provide the uppercase Greek letters
+% in italic and have also options to typeset the lowercase Greek
+% letters in upright shape.
+% Notably, let us mention
+% \mbox{\textsf{mathdesign}}~\cite{DESIGN},
+% \mbox{\textsf{kpfonts}}~\cite{KPF},
+% \mbox{\textsf{fourier}}~\cite{FOUR}, but also
+% \mbox{\textsf{pxgreeks}} (using \textsf{pxfonts}~\cite{PX}), \mbox{\textsf{txgreeks}}
+% (using \textsf{txfonts}~\cite{TX}),
+% \mbox{\textsf{libertinust1math}}~\cite{LIB}, \mbox{\textsf{libgreek}}, etc.
+% A special mention goes to \textsf{lgrmath} of Jean-François Burnol~\cite{LGR}
+% which allows the use of any Greek LGR-encoded font in math mode,
+% an idea taken up in \textsf{mathgreeks}.
+% Also note \textsf{newtxmath}~\cite{NTX} which has several font options.
+% For upright lowercase letters, we have the nice \textsf{upgreek}~\cite{GREEK} package.
+%
+% \medskip
+% The interest of \textsf{mathgreeks} lies in being able to choose the Greek letters font
+% from one of these packages or from a TrueType or OpenType font installed on your computer.
+% The package sets Greek letters in the desired font and shape
+% and enables to change font or shape dynamically within the document.
+%
+% \section{Options and settings}
+%
+% \subsection{Package options}
+%
+% When calling the package, there are three types of options:
+% \begin{itemize}
+% \item Font options,
+% \item Shape options (the style),
+% \item Additional options.
+% \end{itemize}
+% These options use the `\texttt{key=value}' mechanism.
+% When a default value is set, the key can be used without specifying a value
+% (which will then be the default value).
+% Some keys represent booleans with the default value being `\texttt{true}'.
+%
+% \bigskip
+% The first table, in two parts, presents the different keys corresponding to font options,
+% the list of possible values (complete when it is reduced).
+% The default value is indicated in bold, the second part consist in boolean options.
+% Results are presented in section~\ref{examples}.
+%
+% \begin{table}[h]
+% \begin{center}\ttfamily
+% \begin{tabular}{ll}
+% \hline
+% \vstrut{2ex}\normalfont{Option} & \normalfont{Values} \\
+% \hline
+% lgrmath & Alegreya-LF, Cochineal-LF, \textbf{fcm}\ldots \\
+% fontspec & FreeSerif, \textbf{GFS Didot}, Cambria\ldots \\
+% unicode-math & \textbf{Latin Modern Math}, STIX Two Math\ldots \\
+% upgreek & Euler, \textbf{Symbol}, Symbolsmallscale \\
+% mathdesign & Utopia, Garamond, \textbf{Charter} \\
+% kpfonts & \textbf{normal}, light \\
+% \hline
+% \end{tabular}
+% \hspace{1cm}
+% \begin{tabular}{l}
+% \hline
+% \vstrut{2ex}\normalfont{Booleans} \\
+% \hline
+% fourier \\
+% pxfonts \\
+% txfonts \\
+% libertinus \\
+% concrete \\
+% cmbright \\
+% \hline
+% \end{tabular}
+% \caption{\normalfont{font options}\label{table:font}}
+% \end{center}
+% \end{table}
+%
+% \vspace{-1\baselineskip}
+% The \texttt{fontspec} and \texttt{unicode-math} options require loading
+% the corresponding packages, and these can only work when running through
+% \LuaLaTeX\ (or \XeLaTeX).
+% The \texttt{fontspec} option allows for the use of most TrueType or OpenType
+% fonts installed on your computer, those that have Greek letters.
+% Although the \textsf{unicode-math} package loads the \textsf{fontspec} package,
+% the fonts usable with one of these options are not necessarily usable with the other;
+% \texttt{fontspec} has a large number of possible values.
+%
+% When calling "\boldmath" (outside the math environment), you get the letters in bold face,
+% but the command "\mathbf" doesn't work here.
+%
+% \bigskip
+% The second table below presents the shape options. If the shape option
+% is not specified, the italic shape is chosen by default, meaning that the commands
+% "\alpha", "\beta", \ldots, "\Delta", "\Gamma"\ldots\ will produce the same result
+% as the corresponding "\it"\meta{letter} commands.
+%
+% \begin{table}[h]
+% \begin{center}
+% \begin{tabular}{ll}
+% \hline
+% \vstrut{2ex}\normalfont{Option} & \normalfont{Description} \\
+% \hline
+% \texttt{greekup} & lowercase letters in upright shape \\
+% \texttt{Greekup} & uppercase letters in upright shape \\
+% \texttt{TeX} & lowercase=italic, uppercase=upright \\
+% \texttt{ISO} & lowercase=italic, uppercase=italic \\
+% \texttt{upright} & lowercase=upright, uppercase=upright \\
+% \texttt{style} & possible values: \texttt{TeX}, \texttt{ISO}, \texttt{upright} \\
+% \hline
+% \end{tabular}
+% \caption{shape options\label{table:shape}}
+% \end{center}
+% \end{table}
+%
+% \vspace{-1\baselineskip}
+% \begin{itemize}
+% \item Except for \texttt{style}, all these options are booleans.
+% \item The \texttt{Greekup} option est initialized to \texttt{true} (corresponding
+% to the \texttt{TeX} style).
+% \item The \texttt{style=ISO} option produces the same result as the simple
+% \texttt{ISO} option, and the same applies to the other two styles
+% (\texttt{TeX}, \texttt{upright}).
+% \item To get lowercase letters in upright shape and uppercase letters in italic,
+% activate \begin{center}\texttt{greekup=true,Greekup=false}.\end{center}
+% \end{itemize}
+%
+% \bigskip
+% The following list presents the additional options, which are also booleans:
+% \begin{description}
+% \item[\texttt{savegreeks}] Saves the letters corresponding to the original commands
+% "\alpha", "\beta"\ldots so that they remain accessible through the commands
+% "\backalpha", "\backbeta"\ldots
+% \item[\texttt{otherfonts}] Allows dynamic font switching (see next section)
+% for later use of \texttt{lgrmath}, \texttt{fourier}, \texttt{libertinus}
+% or \texttt{upgreek}.
+% \item[\texttt{libsans}] This is a special option that works only with \texttt{libertinus}
+% to produce a sanserif font.
+% \item[\texttt{lowercase}] This option is initialized to \texttt{true};
+% \texttt{lowercase=false} allows keeping the original lowercase Greek letters
+% without redefining the commands "\alpha", "\beta"\ldots
+% \item[\texttt{uppercase}] This option is initialized to \texttt{true};
+% \texttt{uppercase=false} allows keeping the original uppercase Greek letters
+% without redefining the commands "\Gamma", "\Delta"\ldots
+% \end{description}
+%
+% \subsection{Dynamic settings commands}
+%
+% There are two commands for dynamic settings:
+% \begin{description}
+% \item[] "\setmathgreeks"
+% This command takes a mandatory parameter which is a list of
+% `\texttt{key=value}' settings among the shape options presented
+% in table~\ref{table:shape} (the other options are not usable in this command).
+% This allows modifying these settings in the body of the document,
+% with a global effect, or local if the command is called in an environment
+% or a group (delimited by braces).
+%
+% \item[] "\mathgreeksfont"
+% This command allows modifying the font of Greek letters throughout the document,
+% with a global or local effect.
+% The possible options fall into two categories:
+% \begin{center}
+% \texttt{fontspec}, \texttt{unicode-math}, \\
+% \texttt{enc}, \texttt{fam}, \texttt{series}, \texttt{shape}.
+% \end{center}
+% The \texttt{fontspec} and \texttt{unicode-math} options are identical
+% to those in table~\ref{table:font}. In that case, the shape is set by "\setmathgreeks"
+% (before or after).
+% The other previous font options (\texttt{lgrmath}, \texttt{mathdesign},
+% \texttt{fourier}, etc.)\@ are not usable in "\mathgreeksfont".
+% However, these fonts can be obtained by specifying the encoding (option \texttt{enc}),
+% family (option \texttt{fam}), series and shape: the New Font Selection Scheme (NFSS).
+% The series defines the `boldness' and has a default value: \texttt{series=m} (medium).
+% For the shape, the default value is \texttt{shape=it};
+% \texttt{enc} and \texttt{fam} have no default value.
+% For example,
+% \begin{center}
+% "\mathgreeksfont{enc=OML,fam=mdbch,shape=n}"
+% \end{center}
+% will produce upright letters from the Charter font provided by \textsf{mathdesign}.
+% For each font option seen previously,
+% the following examples (section~\ref{examples}) indicates
+% the values to give to \texttt{enc}, \texttt{fam}, and \texttt{shape}.
+% The font definition by NFSS attributes will not produce specific commands for italics
+% "\it"\meta{letter} or for upright letters "\up"\meta{letter}.
+% Only the commands "\alpha", "\beta"\ldots will be redefined according to the
+% selected shape.
+%
+% When using the \texttt{fontspec} or \texttt{unicode-math} option,
+% these NFSS options have no effect.
+%
+% Notice that the encoding obtained by the package font options is faster, moreover
+% the command "\boldmath" doesn't work anymore
+% when changing the font with \texttt{enc}, \texttt{fam} and \texttt{shape},
+% but you can obtain the boldface
+% letters with \texttt{series=b}, or \texttt{series=bx} (bold extended).
+%
+% \end{description}
+%
+% \section{Examples} \label{examples}
+% \begin{description}
+% \item[] "\greektable"
+% The following examples are produced with the "\greektable" command.
+% This command generates a table with two rows: the first contains the lowercase letters
+% obtained with "\alpha", \ldots, "\omega", and the second contains variants
+% "\varepsilon", "\vartheta"\ldots\ of certain letters as well as the uppercase letters
+% obtained with "\Gamma", "\Delta", \ldots, "\Omega"
+% (for those who differ from their Latin equivalent).
+% \end{description}
+%
+% \subsection{PostScript font options}
+%
+% The \texttt{upgreek} option, as its name suggests, produces only upright letters,
+% and the \texttt{Euler} font does not have the variants "\varrho" and "\varsigma".
+% The \texttt{Symbolsmallscale} font is identical to Symbol but reduced in size by 90\,\%;
+% \texttt{Symbol} and \texttt{Symbolsmallscale} have no bold version.
+% ^^A\texttt{mathdesign=Garamond} yields a virtual font that may not always work.
+% For several fonts, the upright shape is obtained with the attribute \texttt{shape=it}
+% and not \texttt{shape=n}.
+%
+% \newlength\legendwidth
+% \setlength\legendwidth{3.2cm}
+% \newcommand*\doublerows[1]{\multirow{2}{\legendwidth}[-1.5ex]{\bfseries#1}}
+
+% \begin{center}
+% \begin{tabular}{|l|@{}c@{}|c@{$\;$}c@{\:}c|}
+% \hline
+% \makebox[\legendwidth][l]{\textbf{upgreek=...}} & \makebox[8.4cm]{Result}
+% & \makebox[1cm]{enc} & \makebox[1cm]{fam} & shape \\
+% \hline
+% \textbf{Symbol}
+% & \mathgreeksfont{enc=U,fam=psy,shape=n}\greektable
+% & U & psy & n \\
+% \hline
+% \textbf{Symbolsmallscale}
+% & \mathgreeksfont{enc=U,fam=fsy,shape=n} \greektable
+% & U & fsy & n \\
+% \hline
+% \textbf{Euler}
+% & \mathgreeksfont{enc=U,fam=eur,shape=n} \greektable
+% & U & eur & n \\
+% \hline
+% \end{tabular}
+% \end{center}
+%
+% \begin{center}
+% \begin{tabular}{|l|@{}c@{}|c@{$\;$}c@{}c|}
+% \hline
+% \textbf{mathdesign=...} & \makebox[8.4cm]{Result} & enc & fam & shape \\
+% \hline
+% \doublerows{Utopia}
+% & \mathgreeksfont{enc=OML,fam=mdput} \greektable
+% & OML & mdput & it \\
+% & \mathgreeksfont{enc=OML,fam=mdput,shape=n} \greektable
+% & OML & mdput & n \\
+% \hline
+% \doublerows{Garamond}
+% & \mathgreeksfont{enc=OML,fam=mdugm} \greektable
+% & OML & mdugm & it \\
+% & \mathgreeksfont{enc=OML,fam=mdugm,shape=n} \greektable
+% & OML & mdugm & n \\
+% \hline
+% \doublerows{Charter}
+% & \mathgreeksfont{enc=OML,fam=mdbch} \greektable
+% & OML & mdbch & it \\
+% & \mathgreeksfont{enc=OML,fam=mdbch,shape=n} \greektable
+% & OML & mdbch & n \\
+% \hline
+% \end{tabular}
+% \end{center}
+%
+% \begin{center}
+% \begin{tabular}{|l|@{}c@{}|c@{$\;$}c@{}c|}
+% \hline
+% \textbf{kpfonts=...} & \makebox[8.4cm]{Result} & enc & fam & shape \\
+% \hline
+% \doublerows{normal}
+% & \mathgreeksfont{enc=OML,fam=jkp} \greektable
+% & OML & jkp & it \\
+% & \mathgreeksfont{enc=U,fam=jkpmia} \greektable
+% & U & jkpmia & it \\
+% \hline
+% \doublerows{light}
+% & \mathgreeksfont{enc=OML,fam=jkpl} \greektable
+% & OML & jkpl & it \\
+% & \mathgreeksfont{enc=U,fam=jkplmia} \greektable
+% & U & jkplmia & it \\
+% \hline
+% \end{tabular}
+% \end{center}
+%
+% \begin{center}
+% \begin{tabular}{|l|@{}c@{}|c@{$\;$}c@{}c|}
+% \hline
+% Boolean options & \makebox[8.2cm]{Result} & enc & fam & shape \\
+% \hline
+% \doublerows{fourier}
+% & \mathgreeksfont{enc=FML,fam=futmi} \greektable
+% & FML & futmi & it \\
+% & \mathgreeksfont{enc=FML,fam=futm} \greektable
+% & FML & futm & it \\
+% \hline
+% % \doublerows{pxfonts}
+% & \mathgreeksfont{enc=OML,fam=pxmi} \greektable
+% & OML & pxmi & it \\
+% & \mathgreeksfont{enc=U,fam=pxmia} \greektable
+% & U & pxmia & it \\
+% \hline
+% \doublerows{txfonts}
+% & \mathgreeksfont{enc=OML,fam=txmi} \greektable
+% & OML & txmi & it \\
+% & \mathgreeksfont{enc=U,fam=txmia} \greektable
+% & U & txmia & it \\
+% \hline
+% \doublerows{libertinus}
+% & \mathgreeksfont{enc=LS1,fam=libertinust1math} \greektable
+% & LS1 & * & it \\
+% & \mathgreeksfont{enc=LS1,fam=libertinust1math,shape=n} \greektable
+% & LS1 & * & n \\
+% \hline
+% \textbf{concrete}
+% & \mathgreeksfont{enc=OML,fam=ccm} \greektable
+% & OML & ccl & it \\
+% \hline
+% \textbf{cmbright}
+% & \mathgreeksfont{enc=OML,fam=cmbrm} \greektable
+% & OML & cmbrm & it \\
+% \hline
+% \end{tabular}
+% \end{center}
+% \emph{* The asterisks for the} \textbf{libertinus} \emph{family corresponds to}
+% \textnormal{`libertinust1math'} \emph{a name too long to appear in this table.
+% Activating the} \texttt{libsans} \emph{package option yields a sanserif font.}
+%
+% \subsection{The \texttt{lgrmath} option}
+%
+% The \texttt{lgrmath} option, inspired by the eponymous package of J.F. Burnol,
+% has a large number of possible values. We present here only a few.
+% The documentation of the \textsf{lgrmath} package~\cite{LGR} explains how
+% to list the fonts available on your distribution with the LGR encoding.
+% One can also consult with profit the documentation of \textsf{cb-fonts}\cite{CB},
+% the Greek fonts of Claudio Beccari.
+%
+% With the \texttt{lgrmath} option, the alternative commands for the variants
+% produce the same glyphs as those of the normal letters except for "\varsigma".
+% However, the "\varsigma" $\varsigma$ often substitutes for the usual "\sigma" $\sigma$
+% when using dynamic font changes through "\mathgreeksfont" with \texttt{enc=LGR}.
+%
+% We have not presented here the third column previously indicating the values for
+% \texttt{enc}, \texttt{fam}, and \texttt{shape} because, for this entire section,
+% we have \texttt{enc=LGR}, \texttt{fam=\meta{font-name}}, the name of the font presented,
+% and \texttt{shape=it}, for the italic shape, or \texttt{shape=n}, for the upright shape.
+% Example:
+% \begin{center}
+% "\mathgreeksfont{enc=LGR,fam=Alegreya-LF,shape=n}"
+% \end{center}
+%
+%\setlength\legendwidth{4cm}
+% \newcommand\lgrtbl[1]{%
+% \doublerows{#1}
+% & \mathgreeksfont{enc=LGR,fam=#1} \greektable \\
+% & \mathgreeksfont{enc=LGR,fam=#1,shape=n} \greektable \\
+% \hline
+% }
+%
+% \begin{center}
+% \begin{tabular}{|l|c|}
+% \hline
+% \textbf{lgrmath=...} & Result \\
+% \hline
+% \lgrtbl{Alegreya-LF}
+% \lgrtbl{Cochineal-LF}
+% \lgrtbl{LibertinusSerif-LF}
+% \lgrtbl{LibertinusSans-LF}
+% \lgrtbl{NotoSerif-LF}
+% \lgrtbl{droidserif}
+% \lgrtbl{fcm}
+% \lgrtbl{gentium}
+% \lgrtbl{lmss}
+% \end{tabular}
+% \end{center}
+%
+% \ifluatex
+% \subsection{The \texttt{fontspec} option}
+%
+% Most TrueType or OpenType fonts can be used here.
+% ^^A Needs the \textsf{fontspec} package and must be run through \LuaLaTeX\ or \XeLaTeX.
+% Some of the fonts below are non free, and some do not have all the variants,
+% for example Arial, Palatino Linotype, Times New Roman.
+%
+% \newcommand\fontspectbl[2][fontspec]{%
+% \doublerows{#2}
+% & \mathgreeksfont{#1=#2}
+% \setmathgreeks{style=ISO} \greektable \\
+% & \mathgreeksfont{fontspec=#2}
+% \setmathgreeks{style=upright} \greektable \\
+% \hline
+% }
+%
+% \begin{center}
+% \begin{tabular}{|l|c|}
+% \hline
+% \textbf{fontspec=...} & Result \\
+% \hline
+% \fontspectbl{DejaVu Serif}
+% \fontspectbl{DejaVu Sans}
+% \fontspectbl{FreeSerif}
+% \fontspectbl{FreeSans}
+% \fontspectbl{GFS Artemisia}
+% \fontspectbl{GFS Didot}
+% \fontspectbl{Liberation Serif}
+% \fontspectbl{Liberation Sans}
+% \end{tabular}
+% \end{center}
+%
+% \begin{center}
+% \begin{tabular}{|l|c|}
+% \hline
+% \textbf{fontspec=...} & Result \\
+% \hline
+% \fontspectbl{Linux Libertine O}
+% ^^A\fontspectbl{Linux Biolinum O}
+% \fontspectbl{Arial}
+% \fontspectbl{Cambria}
+% \fontspectbl{Palatino Linotype}
+% \fontspectbl{Times New Roman}
+% \end{tabular}
+% \end{center}
+%
+%
+% \subsection{The \texttt{unicode-math} option}
+%
+% \begin{center}
+% \begin{tabular}{|l|c|}
+% \hline
+% \textbf{unicode-math=...} & Result \\
+% \hline
+% \fontspectbl[unicode-math]{Latin Modern Math}
+% \fontspectbl[unicode-math]{STIX Two Math}
+% \fontspectbl[unicode-math]{Fira Math}
+% \end{tabular}
+% \end{center}
+%
+% \else
+% \typeout{This is a short version of the documentation.
+% Use LuaLaTeX to get the complete version}
+% \fi
+%
+% \StopEventually{
+% \begin{thebibliography}{20}
+% \begin{raggedright}
+% \bibitem{ICTNS} \emph{On the Use of Italic and up Fonts for Symbols in Scientific Text},
+% I.M.~Mills and W.V.~Metanomski, ICTNS (Interdivisional Committee
+% on Terminology, Nomenclature and Symbols), dec 1999,
+% \url{https://old.iupac.org/standing/idcns/italic-roman_dec99.pdf}.
+% \bibitem{UNIC} \emph{Experimental Unicode mathematical typesetting:
+% The \textsf{unicode-math} package}, Will Robertson, Philipp Stephani, Joseph Wright,
+% Khaled Hosny, and others, CTAN, v0.8r 2023/08/13.
+% \bibitem{FSPEC} \emph{The \textsf{fontspec} package -- Font selection for \XeLaTeX\
+% and \LuaLaTeX}, Will Robertson, CTAN, v2.9b 2024/04/27.
+% \bibitem{FIXM} \emph{The \textsf{fixmath} package for \LaTeXe}, Walter Schmidt,
+% CTAN, v0.9 2000/04/11.
+% \bibitem{ISOM} \emph{\textsf{isomath} -- Mathematical style for science and technology},
+% Günter Milde, CTAN, v0.6.1 2012/09/04.
+% \bibitem{PMISO} \emph{\textsf{PM-ISOmath}, The Poor Man ISO math bundle},
+% the \textsf{pm-isomath} package by Claudio Beccari, CTAN, v1.2.00 2021/08/04.
+% \bibitem{GREEK} \emph{The \textsf{upgreek} package for \LaTeXe}, Walter Schmidt,
+% CTAN, v2.0 2003/02/12.
+% \bibitem{DESIGN} \emph{The \textsf{mathdesign} package},
+% Paul Pichaureau, CTAN, v2.31 2013/08/29.
+% \bibitem{KPF} \emph{\textsf{Kp-Fonts} -- The Johannes Kepler project},
+% Christophe Caignaert, CTAN, v3.34 20/09/2022.
+% \bibitem{FOUR} \textsf{Fourier-GUT\hspace{-0.1em}\emph{enberg}},
+% Michel Bovani, CTAN, v1.3 2005/01/30.
+% \bibitem{PX} \emph{\textsf{PX Fonts} -- Palatino-like fonts in support of mathematics},
+% Young Ryu, CTAN, 2000/12/14.
+% \bibitem{TX} \emph{\textsf{TX Fonts} -- Times-like fonts in support of mathematics},
+% Young Ryu, CTAN, 2000/12/15.
+% \bibitem{CB} \emph{The CB Greek fonts}, Claudio Beccari, CTAN, 2008/01/01.
+% \bibitem{PXG} \emph{The \textsf{pxgreeks} package}, Jean-François Burnol,
+% CTAN v1.0 2011/03/16.
+% \bibitem{TXG} \emph{The \textsf{txgreeks} package}, Jean-François Burnol,
+% CTAN v1.0 2011/03/16.
+% \bibitem{LIBG} \emph{The \textsf{libgreek} package}, Jean-François Burnol,
+% CTAN v1.1 2022/11/11.
+% \bibitem{LGR} \emph{The \textsf{lgrmath} package}, Jean-François B., CTAN, v1.0 2022/11/16.
+% \bibitem{NTX} \emph{New TX font package}, Michael Sharpe, CTAN, v1.735 2024/03/01.
+% \bibitem{LIB} \emph{The LibertinusT1 Math Package}, Michael Sharpe, CTAN,
+% v2.0.4 2024/01/14.
+% \bibitem{CHEM} \emph{\textsf{chemgreek} -- Upright Greek letters in chemistry},
+% Clemens Niederberger, CTAN, v1.1a 2020/01/16.
+% \end{raggedright}
+% \end{thebibliography}
+% }
+%
+% \section{Implementation}
+%
+% \begin{macrocode}
+\RequirePackage{kvoptions}
+%\SetupKeyvalOptions{family=mgr} % mathgreeks by default
+
+\DeclareStringOption{lgrmath}[fcm]
+\newif\ifmathgreeks@lgrmath
+\AddToKeyvalOption*{lgrmath}{\mathgreeks@lgrmathtrue}
+\DeclareStringOption{fontspec}[GFS Didot]
+\newif\ifmathgreeks@fontspec
+\AddToKeyvalOption*{fontspec}{\mathgreeks@fontspectrue}
+\newif\ifmathgreeks@unicodemath
+\define@key{mathgreeks}{unicode-math}[Latin Modern Math]{
+ \newcommand*{\mathgreeks@unicodemath}{#1}
+ \mathgreeks@unicodemathtrue}
+\DeclareStringOption{upgreek}[Symbol]
+\newif\ifmathgreeks@upgreek
+\AddToKeyvalOption*{upgreek}{\mathgreeks@upgreektrue
+ \mathgreeks@Greekuptrue\mathgreeks@greekuptrue}
+\DeclareStringOption{mathdesign}[Charter]
+\newif\ifmathgreeks@mathdesign
+\AddToKeyvalOption*{mathdesign}{\mathgreeks@mathdesigntrue}
+\DeclareBoolOption{fourier}% false by default
+\DeclareStringOption{kpfonts}[normal]
+\newif\ifmathgreeks@kpfonts
+\AddToKeyvalOption*{kpfonts}{\mathgreeks@kpfontstrue}
+\DeclareBoolOption{pxfonts}
+\DeclareBoolOption{txfonts}
+\DeclareBoolOption{libertinus}
+\DeclareBoolOption{concrete}
+\DeclareBoolOption{cmbright}
+
+\DeclareBoolOption{savegreeks}
+\DeclareBoolOption{otherfonts}
+\DeclareBoolOption{libsans}
+\DeclareBoolOption[true]{lowercase}
+\DeclareBoolOption[true]{uppercase}
+
+% dynamic options
+\DeclareBoolOption[true]{Greekup}
+\DeclareBoolOption{greekup}
+\DeclareBoolOption{upright}
+\AddToKeyvalOption*{upright}{\mathgreeks@Greekuptrue
+ \mathgreeks@greekuptrue}
+\DeclareBoolOption{ISO}
+\AddToKeyvalOption*{ISO}{\mathgreeks@Greekupfalse
+ \mathgreeks@greekupfalse}
+\DeclareBoolOption{TeX}
+\AddToKeyvalOption*{TeX}{\mathgreeks@Greekuptrue
+ \mathgreeks@greekupfalse}
+\DeclareStringOption{style}
+\AddToKeyvalOption*{style}{\setkeys{mathgreeks}{\mathgreeks@style}}
+
+\DeclareDefaultOption{\PackageError{mathgreeks}{%
+ Option key `\CurrentOptionKey' undefined}{}}
+\ProcessLocalKeyvalOptions* % \setkeys is done here
+
+\RequirePackage{etoolbox} % provides \AtEndPreamble
+
+\newif\ifkp@upRm % from kpgonts, bugs if after \ifmathgreeks@kpfonts
+\newif\iflibus@sansmath % from libertinust1math
+\newif\ifmathgreeks@Symbol % for codes definition
+\newif\ifmathgreeks@itgreek % for fonts without upright shape
+\newif\ifmathgreeks@font % if font option at package call
+\mathgreeks@fonttrue
+
+
+%%%%%%%%%%%%%%%% INITIAL SETTINGS %%%%%%%%%%%%%%%
+
+\ifmathgreeks@otherfonts
+ \DeclareFontEncoding{LGR}{}{}
+ \DeclareFontEncoding{FML}{}{}
+ \DeclareFontSubstitution{FML}{futm}{m}{it}
+ \ifmathgreeks@libsans \libus@sansmathtrue\fi % taken up at encoding time
+ \DeclareFontEncoding{LS1}{}{}
+ \DeclareFontSubstitution{LS1}{libertinust1math}{m}{n}
+
+ % from the upgreek package
+ \DeclareFontFamily{U}{eur}{\skewchar\font'177}
+ \DeclareFontShape{U}{eur}{m}{n}{%
+ <-6> eurm5 <6-8> eurm7 <8-> eurm10}{}
+ \DeclareFontShape{U}{eur}{b}{n}{%
+ <-6> eurb5 <6-8> eurb7 <8-> eurb10}{}
+ \DeclareFontFamily{U}{fsy}{}
+ \DeclareFontShape{U}{fsy}{m}{n}{<->s*[.9]psyr}{}
+
+\fi
+
+\DisableKeyvalOption[action=warning,package=mathgreeks]{mathgreeks}{lgrmath}
+\DisableKeyvalOption[action=warning,package=mathgreeks]{mathgreeks}{fontspec}
+\DisableKeyvalOption[action=warning,package=mathgreeks]{mathgreeks}{unicodemath}
+\DisableKeyvalOption[action=warning,package=mathgreeks]{mathgreeks}{upgreek}
+\DisableKeyvalOption[action=warning,package=mathgreeks]{mathgreeks}{mathdesign}
+\DisableKeyvalOption[action=warning,package=mathgreeks]{mathgreeks}{fourier}
+\DisableKeyvalOption[action=warning,package=mathgreeks]{mathgreeks}{kpfonts}
+\DisableKeyvalOption[action=warning,package=mathgreeks]{mathgreeks}{pxfonts}
+\DisableKeyvalOption[action=warning,package=mathgreeks]{mathgreeks}{txfonts}
+\DisableKeyvalOption[action=warning,package=mathgreeks]{mathgreeks}{savegreeks}
+\DisableKeyvalOption[action=warning,package=mathgreeks]{mathgreeks}{otherfonts}
+\DisableKeyvalOption[action=warning,package=mathgreeks]{mathgreeks}{libsans}
+\DisableKeyvalOption[action=warning,package=mathgreeks]{mathgreeks}{lowercase}
+\DisableKeyvalOption[action=warning,package=mathgreeks]{mathgreeks}{uppercase}
+
+
+\AtEndPreamble{\AtBeginDocument{
+ \@ifundefined{text}{\RequirePackage{amstext}}{}
+
+ \ifmathgreeks@lgrmath
+ \DeclareFontEncoding{LGR}{}{}
+ \DeclareSymbolFont{mgr@it}{LGR}{\mathgreeks@lgrmath}{m}{it}
+ \SetSymbolFont{mgr@it}{bold}{LGR}{\mathgreeks@lgrmath}{b}{it}
+ \DeclareSymbolFont{mgr@up}{LGR}{\mathgreeks@lgrmath}{m}{n}
+ \SetSymbolFont{mgr@up}{bold}{LGR}{\mathgreeks@lgrmath}{b}{n}
+
+ \else\ifmathgreeks@fontspec
+ \@ifpackageloaded{fontspec}{}{
+ \PackageError{mathgreeks}{`fontspec' or `unicodemath'
+ options need the fontspec package\MessageBreak
+ which must be run with LuaLaTeX or XeLaTeX}{}
+ }
+ \newfontfamily\MathGreeksFont{\mathgreeks@fontspec}%
+ [NFSSFamily=mgru]
+ \DeclareSymbolFont{mgr@it}{TU}{mgru}{m}{it}
+ \SetSymbolFont{mgr@it}{bold}{TU}{mgru}{b}{it}
+ \DeclareSymbolFont{mgr@up}{TU}{mgru}{m}{n}
+ \SetSymbolFont{mgr@it}{bold}{TU}{mgru}{b}{n}
+
+ \else\ifmathgreeks@unicodemath
+ \@ifpackageloaded{unicode-math}{}{
+ \PackageError{mathgreeks}{`unicodemath' option needs
+ the unicode-math package\MessageBreak
+ which must be run with LuaLaTeX or XeLaTeX}{}
+ }
+ \setmathfont{\mathgreeks@unicodemath}[range=it/{greek,Greek}]
+ \setmathfont{\mathgreeks@unicodemath}[range=up/{greek,Greek}]
+ \mathgreeks@fontspectrue % for \mgr@CodeGreeks
+ \let\mgr@UnicodeGreek\mgr@UnicodemathGreek
+
+ \else\ifmathgreeks@upgreek
+ \ifdefstring{\mathgreeks@upgreek}{Euler}{
+ \DeclareFontFamily{U}{eur}{\skewchar\font'177}
+ \DeclareFontShape{U}{eur}{m}{n}{%
+ <-6> eurm5 <6-8> eurm7 <8-> eurm10}{}
+ \DeclareFontShape{U}{eur}{b}{n}{%
+ <-6> eurb5 <6-8> eurb7 <8-> eurb10}{}
+ \DeclareSymbolFont{mgr@up}{U}{eur}{m}{n}
+ \SetSymbolFont{mgr@up}{bold}{U}{eur}{b}{n}
+ }{
+ \ifdefstring{\mathgreeks@upgreek}{Symbol}{
+ \DeclareSymbolFont{mgr@up}{U}{psy}{m}{n} % no bold face
+ \mathgreeks@Symboltrue
+ }{
+ \ifdefstring{\mathgreeks@upgreek}{Symbolsmallscale}{
+ \DeclareFontFamily{U}{fsy}{}
+ \DeclareFontShape{U}{fsy}{m}{n}{<->s*[.9]psyr}{}
+ \DeclareSymbolFont{mgr@up}{U}{fsy}{m}{n}
+ \mathgreeks@Symboltrue
+ }{
+ \PackageError{mathgreeks}{Invalid value
+ `\mathgreeks@upgreek' with `upgreek' key}{With `upgreek'
+ possible values are: Euler, Symbol, Symbolsmallscale.}
+ }}}
+
+ \else\ifmathgreeks@mathdesign
+ \ifdefstring{\mathgreeks@mathdesign}{Utopia}{
+ \DeclareSymbolFont{mgr@it}{OML}{mdput}{m}{it}
+ \SetSymbolFont{mgr@it}{bold}{OML}{mdput}{b}{it}
+ \DeclareSymbolFont{mgr@up}{OML}{mdput}{m}{n}
+ \SetSymbolFont{mgr@up}{bold}{OML}{mdput}{b}{n}
+ }{
+ \ifdefstring{\mathgreeks@mathdesign}{Garamond}{
+ \DeclareSymbolFont{mgr@it}{OML}{mdugm}{m}{it}
+ \SetSymbolFont{mgr@it}{bold}{OML}{mdugm}{b}{it}
+ \DeclareSymbolFont{mgr@up}{OML}{mdugm}{m}{n}
+ \SetSymbolFont{mgr@up}{bold}{OML}{mdugm}{b}{n}
+ }{
+ \ifdefstring{\mathgreeks@mathdesign}{Charter}{
+ \DeclareSymbolFont{mgr@it}{OML}{mdbch}{m}{it}
+ \SetSymbolFont{mgr@it}{bold}{OML}{mdbch}{b}{it}
+ \DeclareSymbolFont{mgr@up}{OML}{mdbch}{m}{n}
+ \SetSymbolFont{mgr@up}{bold}{OML}{mdbch}{b}{n}
+ }{
+ \PackageError{mathgreeks}{Invalid value
+ `\mathgreeks@mathdesign' with `mathdesign' key}{With
+ `mathdesign' possible values are:
+ Utopia, Garamond, Charter.}
+ }}}
+
+ \else\ifmathgreeks@fourier
+ \DeclareFontEncoding{FML}{}{}
+ \DeclareFontSubstitution{FML}{futm}{m}{it}
+ \DeclareSymbolFont{mgr@it}{FML}{futmi}{m}{it}
+ \SetSymbolFont{mgr@it}{bold}{FML}{futmi}{b}{it}
+ \DeclareSymbolFont{mgr@up}{FML}{futm}{m}{it}
+ \SetSymbolFont{mgr@up}{bold}{FML}{futm}{b}{it}
+
+ \else\ifmathgreeks@kpfonts
+ \ifdefstring{\mathgreeks@kpfonts}{normal}{
+ \DeclareSymbolFont{mgr@it}{OML}{jkp}{m}{it}
+ \SetSymbolFont{mgr@it}{bold}{OML}{jkp}{bx}{it}
+ \DeclareSymbolFont{mgr@up}{U}{jkpmia}{m}{it}
+ \SetSymbolFont{mgr@up}{bold}{U}{jkpmia}{bx}{it}
+ }{
+ \ifdefstring{\mathgreeks@kpfonts}{light}{
+ \DeclareSymbolFont{mgr@it}{OML}{jkpl}{m}{it}
+ \SetSymbolFont{mgr@it}{bold}{OML}{jkpl}{bx}{it}
+ \DeclareSymbolFont{mgr@up}{U}{jkplmia}{m}{it}
+ \SetSymbolFont{mgr@up}{bold}{U}{jkplmia}{bx}{it}
+ }{
+ \PackageError{mathgreeks}{Invalid value
+ `\mathgreeks@kpfonts' with `kpfonts' key}{With
+ `kpfonts' possible values are: normal, light.}
+ }}
+
+ \else\ifmathgreeks@pxfonts % no font option specified
+ \DeclareSymbolFont{mgr@it}{OML}{pxmi}{m}{it}
+ \SetSymbolFont{mgr@it}{bold}{OML}{pxmi}{bx}{it}
+ \DeclareSymbolFont{mgr@up}{U}{pxmia}{m}{it}
+ \SetSymbolFont{mgr@up}{bold}{U}{pxmia}{bx}{it}
+
+ \else\ifmathgreeks@txfonts
+ \DeclareSymbolFont{mgr@it}{OML}{txmi}{m}{it}
+ \SetSymbolFont{mgr@it}{bold}{OML}{txmi}{bx}{it}
+ \DeclareSymbolFont{mgr@up}{U}{txmia}{m}{it}
+ \SetSymbolFont{mgr@up}{bold}{U}{txmia}{bx}{it}
+
+ \else\ifmathgreeks@libertinus
+ \ifmathgreeks@libsans \libus@sansmathtrue\fi
+ \DeclareFontEncoding{LS1}{}{}
+ \DeclareFontSubstitution{LS1}{libertinust1math}{m}{n}
+ \DeclareSymbolFont{mgr@it}{LS1}{libertinust1math}{m}{it}
+ \SetSymbolFont{mgr@it}{bold}{LS1}{libertinust1math}{m}{it}
+ \DeclareSymbolFont{mgr@up}{LS1}{libertinust1math}{m}{n}
+ \SetSymbolFont{mgr@up}{bold}{LS1}{libertinust1math}{m}{n}
+
+ \else\ifmathgreeks@concrete
+ \DeclareSymbolFont{mgr@it}{OML}{ccm}{m}{it}
+ \SetSymbolFont{mgr@it}{bold}{OML}{ccm}{b}{it}
+ \mathgreeks@itgreektrue
+
+ \else\ifmathgreeks@cmbright
+ \DeclareSymbolFont{mgr@it}{OML}{cmbrm}{m}{it}
+ \SetSymbolFont{mgr@it}{bold}{OML}{cmbrm}{b}{it}
+ \mathgreeks@itgreektrue
+
+ \else
+ \PackageWarningNoLine{mathgreeks}{No font option specified}
+ \mathgreeks@fontfalse
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+
+ \ifmathgreeks@savegreeks \SaveGreeks \fi
+
+ \ifmathgreeks@font
+ \ifmathgreeks@upgreek
+ \mathgreeks@Greekuptrue \mathgreeks@greekuptrue
+ \PackageWarningNoLine{mathgreeks}{Commands \string \italpha,
+ \string\itbeta... \MessageBreak
+ not available with the `upgreek' option}
+ \else
+ \mgr@CodeGreeks{it}
+ \fi
+ \ifmathgreeks@itgreek
+ \mathgreeks@Greekupfalse \mathgreeks@greekupfalse
+ \PackageWarningNoLine{mathgreeks}{Commands \string \upalpha,
+ \string\upbeta... \MessageBreak
+ not available with `concrete' or 'cmbright}
+ \else
+ \mgr@CodeGreeks{up}
+ \fi
+ \mgr@DefaultGreeks
+ \fi
+}}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%% MACROS %%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+\def\re@DeclareMathSymbol#1#2#3#4{% from kpfonts, pxfonts, txfonts
+ \let#1=\undefined
+ \DeclareMathSymbol{#1}{#2}{#3}{#4}}
+
+%\def\re@DeclareMathSymbol#1#2#3#4{% from newtxmath
+%\if\relax\noexpand#1\let#1=\undefined \fi
+%\DeclareMathSymbol{#1}{#2}{#3}{#4}}
+
+\newcommand{\mgr@CodeGreek}[3]{% #1 = it or up
+ \expandafter\re@DeclareMathSymbol\csname#1#2\endcsname%
+ {\mathalpha}{mgr@#1}{#3} % perhaps \mathord is better
+}
+
+\newcommand{\mgr@UnicodeGreek}[3]{%
+ \expandafter\Umathchardef\csname#1#2\endcsname="7 % mathalpha
+ \csname symmgr@#1\endcsname #3
+}
+
+\def\mgr@UnicodemathGreek#1#2#3{\unskip
+ \expandafter\DeclareRobustCommand\csname#1#2\endcsname
+ {\csname sym#1\endcsname{\symbol{#3}}}\ignorespaces
+}
+
+\newcommand{\mgr@CodeGreeks}[1]{% #1 = it or up
+ \ifmathgreeks@lgrmath % LGR encoding
+ \mgr@CodeGreek{#1}{Gamma}{71}
+ \mgr@CodeGreek{#1}{Delta}{68}
+ \mgr@CodeGreek{#1}{Theta}{74}
+ \mgr@CodeGreek{#1}{Lambda}{76}
+ \mgr@CodeGreek{#1}{Xi}{88}
+ \mgr@CodeGreek{#1}{Pi}{80}
+ \mgr@CodeGreek{#1}{Sigma}{83}
+ \mgr@CodeGreek{#1}{Upsilon}{85}
+ \mgr@CodeGreek{#1}{Phi}{70}
+ \mgr@CodeGreek{#1}{Psi}{89}
+ \mgr@CodeGreek{#1}{Omega}{87}
+ \mgr@CodeGreek{#1}{alpha}{97}
+ \mgr@CodeGreek{#1}{beta}{98}
+ \mgr@CodeGreek{#1}{gamma}{103}
+ \mgr@CodeGreek{#1}{delta}{100}
+ \mgr@CodeGreek{#1}{epsilon}{101}
+ \mgr@CodeGreek{#1}{zeta}{122}
+ \mgr@CodeGreek{#1}{eta}{104}
+ \mgr@CodeGreek{#1}{theta}{106}
+ \mgr@CodeGreek{#1}{iota}{105}
+ \mgr@CodeGreek{#1}{kappa}{107}
+ \mgr@CodeGreek{#1}{lambda}{108}
+ \mgr@CodeGreek{#1}{mu}{109}
+ \mgr@CodeGreek{#1}{nu}{110}
+ \mgr@CodeGreek{#1}{xi}{120}
+ \mgr@CodeGreek{#1}{pi}{112}
+ \mgr@CodeGreek{#1}{rho}{114}
+ \mgr@CodeGreek{#1}{sigma}{115}
+ \mgr@CodeGreek{#1}{tau}{116}
+ \mgr@CodeGreek{#1}{upsilon}{117}
+ \mgr@CodeGreek{#1}{phi}{102}
+ \mgr@CodeGreek{#1}{chi}{113}
+ \mgr@CodeGreek{#1}{psi}{121}
+ \mgr@CodeGreek{#1}{omega}{119}
+ \mgr@CodeGreek{#1}{varepsilon}{101} % = epsilon
+ \mgr@CodeGreek{#1}{vartheta}{106} % = theta
+ \mgr@CodeGreek{#1}{varpi}{112} % = pi
+ \mgr@CodeGreek{#1}{varrho}{114} % = rho
+ \mgr@CodeGreek{#1}{varsigma}{99}
+ \mgr@CodeGreek{#1}{varphi}{102} % = phi
+ \else\ifmathgreeks@fontspec % unicode encoding
+ \mgr@UnicodeGreek{#1}{Gamma}{"0393}
+ \mgr@UnicodeGreek{#1}{Delta}{"0394}
+ \mgr@UnicodeGreek{#1}{Theta}{"0398}
+ \mgr@UnicodeGreek{#1}{Lambda}{"039B}
+ \mgr@UnicodeGreek{#1}{Xi}{"039E}
+ \mgr@UnicodeGreek{#1}{Pi}{"03A0}
+ \mgr@UnicodeGreek{#1}{Sigma}{"03A3}
+ \mgr@UnicodeGreek{#1}{Upsilon}{"03A5}
+ \mgr@UnicodeGreek{#1}{Phi}{"03A6}
+ \mgr@UnicodeGreek{#1}{Psi}{"03A8}
+ \mgr@UnicodeGreek{#1}{Omega}{"03A9}
+ \mgr@UnicodeGreek{#1}{alpha}{"03B1}
+ \mgr@UnicodeGreek{#1}{beta}{"03B2}
+ \mgr@UnicodeGreek{#1}{gamma}{"03B3}
+ \mgr@UnicodeGreek{#1}{delta}{"03B4}
+ \mgr@UnicodeGreek{#1}{epsilon}{"03B5}
+ \mgr@UnicodeGreek{#1}{zeta}{"03B6}
+ \mgr@UnicodeGreek{#1}{eta}{"03B7}
+ \mgr@UnicodeGreek{#1}{theta}{"03B8}
+ \mgr@UnicodeGreek{#1}{iota}{"03B9}
+ \mgr@UnicodeGreek{#1}{kappa}{"03BA}
+ \mgr@UnicodeGreek{#1}{lambda}{"03BB}
+ \mgr@UnicodeGreek{#1}{mu}{"03BC}
+ \mgr@UnicodeGreek{#1}{nu}{"03BD}
+ \mgr@UnicodeGreek{#1}{xi}{"03BE} % not omicron
+ \mgr@UnicodeGreek{#1}{pi}{"03C0}
+ \mgr@UnicodeGreek{#1}{rho}{"03C1}
+ \mgr@UnicodeGreek{#1}{sigma}{"03C3}
+ \mgr@UnicodeGreek{#1}{tau}{"03C4}
+ \mgr@UnicodeGreek{#1}{upsilon}{"03C5}
+ \mgr@UnicodeGreek{#1}{phi}{"03C6}
+ \mgr@UnicodeGreek{#1}{chi}{"03C7}
+ \mgr@UnicodeGreek{#1}{psi}{"03C8}
+ \mgr@UnicodeGreek{#1}{omega}{"03C9}
+ \mgr@UnicodeGreek{#1}{varepsilon}{"03F5}
+ \mgr@UnicodeGreek{#1}{vartheta}{"03D1}
+ \mgr@UnicodeGreek{#1}{varpi}{"03D6}
+ \mgr@UnicodeGreek{#1}{varrho}{"03F1}
+ \mgr@UnicodeGreek{#1}{varsigma}{"03C2}
+ \mgr@UnicodeGreek{#1}{varphi}{"03D5}
+ \else\ifmathgreeks@Symbol % Symbol encoding
+ \mgr@CodeGreek{#1}{Gamma}{`G}
+ \mgr@CodeGreek{#1}{Delta}{`D}
+ \mgr@CodeGreek{#1}{Theta}{`Q}
+ \mgr@CodeGreek{#1}{Lambda}{`L}
+ \mgr@CodeGreek{#1}{Xi}{`X}
+ \mgr@CodeGreek{#1}{Pi}{`P}
+ \mgr@CodeGreek{#1}{Sigma}{`S}
+ \mgr@CodeGreek{#1}{Upsilon}{`U}
+ \mgr@CodeGreek{#1}{Phi}{`F}
+ \mgr@CodeGreek{#1}{Psi}{`Y}
+ \mgr@CodeGreek{#1}{Omega}{`W}
+ \mgr@CodeGreek{#1}{alpha}{`a}
+ \mgr@CodeGreek{#1}{beta}{`b}
+ \mgr@CodeGreek{#1}{gamma}{`g}
+ \mgr@CodeGreek{#1}{delta}{`d}
+ \mgr@CodeGreek{#1}{epsilon}{`e}
+ \mgr@CodeGreek{#1}{zeta}{`z}
+ \mgr@CodeGreek{#1}{eta}{`h}
+ \mgr@CodeGreek{#1}{theta}{`q}
+ \mgr@CodeGreek{#1}{iota}{`i}
+ \mgr@CodeGreek{#1}{kappa}{`k}
+ \mgr@CodeGreek{#1}{lambda}{`l}
+ \mgr@CodeGreek{#1}{mu}{`m}
+ \mgr@CodeGreek{#1}{nu}{`n}
+ \mgr@CodeGreek{#1}{xi}{`x}
+ \mgr@CodeGreek{#1}{pi}{`p}
+ \mgr@CodeGreek{#1}{rho}{`r}
+ \mgr@CodeGreek{#1}{sigma}{`s}
+ \mgr@CodeGreek{#1}{tau}{`t}
+ \mgr@CodeGreek{#1}{upsilon}{`u}
+ \mgr@CodeGreek{#1}{phi}{`f}
+ \mgr@CodeGreek{#1}{chi}{`c}
+ \mgr@CodeGreek{#1}{psi}{`y}
+ \mgr@CodeGreek{#1}{omega}{`w}
+ \mgr@CodeGreek{#1}{varepsilon}{`u} % = epsilon
+ \mgr@CodeGreek{#1}{vartheta}{`J}
+ \mgr@CodeGreek{#1}{varpi}{`v}
+ \mgr@CodeGreek{#1}{varrho}{`r} % = rho
+ \mgr@CodeGreek{#1}{varsigma}{`s} % = sigma
+ \mgr@CodeGreek{#1}{varphi}{`j}
+ \else % OML (or U) encoding
+ \mgr@CodeGreek{#1}{Gamma}{"00}
+ \mgr@CodeGreek{#1}{Delta}{"01}
+ \mgr@CodeGreek{#1}{Theta}{"02}
+ \mgr@CodeGreek{#1}{Lambda}{"03}
+ \mgr@CodeGreek{#1}{Xi}{"04}
+ \mgr@CodeGreek{#1}{Pi}{"05}
+ \mgr@CodeGreek{#1}{Sigma}{"06}
+ \mgr@CodeGreek{#1}{Upsilon}{"07}
+ \mgr@CodeGreek{#1}{Phi}{"08}
+ \mgr@CodeGreek{#1}{Psi}{"09}
+ \mgr@CodeGreek{#1}{Omega}{"0A}
+ \mgr@CodeGreek{#1}{alpha}{"0B}
+ \mgr@CodeGreek{#1}{beta}{"0C}
+ \mgr@CodeGreek{#1}{gamma}{"0D}
+ \mgr@CodeGreek{#1}{delta}{"0E}
+ \mgr@CodeGreek{#1}{epsilon}{"0F}
+ \mgr@CodeGreek{#1}{zeta}{"10}
+ \mgr@CodeGreek{#1}{eta}{"11}
+ \mgr@CodeGreek{#1}{theta}{"12}
+ \mgr@CodeGreek{#1}{iota}{"13}
+ \mgr@CodeGreek{#1}{kappa}{"14}
+ \mgr@CodeGreek{#1}{lambda}{"15}
+ \mgr@CodeGreek{#1}{mu}{"16}
+ \mgr@CodeGreek{#1}{nu}{"17}
+ \mgr@CodeGreek{#1}{xi}{"18}
+ \mgr@CodeGreek{#1}{pi}{"19}
+ \mgr@CodeGreek{#1}{rho}{"1A}
+ \mgr@CodeGreek{#1}{sigma}{"1B}
+ \mgr@CodeGreek{#1}{tau}{"1C}
+ \mgr@CodeGreek{#1}{upsilon}{"1D}
+ \mgr@CodeGreek{#1}{phi}{"1E}
+ \mgr@CodeGreek{#1}{chi}{"1F}
+ \mgr@CodeGreek{#1}{psi}{"20}
+ \mgr@CodeGreek{#1}{omega}{"21}
+ \mgr@CodeGreek{#1}{varepsilon}{"22}
+ \mgr@CodeGreek{#1}{vartheta}{"23}
+ \mgr@CodeGreek{#1}{varpi}{"24}
+ \mgr@CodeGreek{#1}{varrho}{"25}
+ \mgr@CodeGreek{#1}{varsigma}{"26}
+ \mgr@CodeGreek{#1}{varphi}{"27}
+ %\mgr@CodeGreek{#1}{varkappa}{"FE}
+ \fi\fi\fi
+}
+
+\newcommand\mgr@DefaultGreeks{%
+ \ifmathgreeks@uppercase
+ \ifmathgreeks@Greekup
+ \let\Gamma\upGamma
+ \let\Delta\upDelta
+ \let\Theta\upTheta
+ \let\Lambda\upLambda
+ \let\Xi\upXi
+ \let\Pi\upPi
+ \let\Sigma\upSigma
+ \let\Upsilon\upUpsilon
+ \let\Phi\upPhi
+ \let\Psi\upPsi
+ \let\Omega\upOmega
+ \else
+ \let\Gamma\itGamma
+ \let\Delta\itDelta
+ \let\Theta\itTheta
+ \let\Lambda\itLambda
+ \let\Xi\itXi
+ \let\Pi\itPi
+ \let\Sigma\itSigma
+ \let\Upsilon\itUpsilon
+ \let\Phi\itPhi
+ \let\Psi\itPsi
+ \let\Omega\itOmega
+ \fi\fi
+ \ifmathgreeks@lowercase
+ \ifmathgreeks@greekup
+ \let\alpha\upalpha
+ \let\beta\upbeta
+ \let\gamma\upgamma
+ \let\delta\updelta
+ \let\epsilon\upepsilon
+ \let\zeta\upzeta
+ \let\eta\upeta
+ \let\theta\uptheta
+ \let\iota\upiota
+ \let\kappa\upkappa
+ \let\lambda\uplambda
+ \let\mu\upmu
+ \let\nu\upnu
+ \let\xi\upxi
+ \let\pi\uppi
+ \let\rho\uprho
+ \let\sigma\upsigma
+ \let\tau\uptau
+ \let\upsilon\upupsilon
+ \let\phi\upphi
+ \let\chi\upchi
+ \let\psi\uppsi
+ \let\omega\upomega
+ \let\varepsilon\upvarepsilon
+ \let\vartheta\upvartheta
+ \let\varpi\upvarpi
+ \let\varrho\upvarrho
+ \let\varsigma\upvarsigma
+ \let\varphi\upvarphi
+ \else
+ \let\alpha\italpha
+ \let\beta\itbeta
+ \let\gamma\itgamma
+ \let\delta\itdelta
+ \let\epsilon\itepsilon
+ \let\zeta\itzeta
+ \let\eta\iteta
+ \let\theta\ittheta
+ \let\iota\itiota
+ \let\kappa\itkappa
+ \let\lambda\itlambda
+ \let\mu\itmu
+ \let\nu\itnu
+ \let\xi\itxi
+ \let\pi\itpi
+ \let\rho\itrho
+ \let\sigma\itsigma
+ \let\tau\ittau
+ \let\upsilon\itupsilon
+ \let\phi\itphi
+ \let\chi\itchi
+ \let\psi\itpsi
+ \let\omega\itomega
+ \let\varepsilon\itvarepsilon
+ \let\vartheta\itvartheta
+ \let\varpi\itvarpi
+ \let\varrho\itvarrho
+ \let\varsigma\itvarsigma
+ \let\varphi\itvarphi
+ \fi\fi
+}
+
+\providecommand\SaveGreeks{%
+ \let\backGamma\Gamma
+ \let\backDelta\Delta
+ \let\backTheta\Theta
+ \let\backLambda\Lambda
+ \let\backXi\Xi
+ \let\backPi\Pi
+ \let\backSigma\Sigma
+ \let\backUpsilon\Upsilon
+ \let\backPhi\Phi
+ \let\backPsi\Psi
+ \let\backOmega\Omega
+ \let\backalpha\alpha
+ \let\backbeta\beta
+ \let\backgamma\gamma
+ \let\backdelta\delta
+ \let\backepsilon\epsilon
+ \let\backzeta\zeta
+ \let\backeta\eta
+ \let\backtheta\theta
+ \let\backiota\iota
+ \let\backkappa\kappa
+ \let\backlambda\lambda
+ \let\backmu\mu
+ \let\backnu\nu
+ \let\backxi\xi
+ \let\backpi\pi
+ \let\backrho\rho
+ \let\backsigma\sigma
+ \let\backtau\tau
+ \let\backupsilon\upsilon
+ \let\backphi\phi
+ \let\backchi\chi
+ \let\backpsi\psi
+ \let\backomega\omega
+ \let\backvarepsilon\varepsilon
+ \let\backvartheta\vartheta
+ \let\backvarpi\varpi
+ \let\backvarrtho\varrho
+ \let\backvarsigma\varsigma
+ \let\backvarphi\varphi
+}
+
+
+%%%%%%%%%%%%%% Macros for changing font dynamically %%%%%%%%%%%%%
+
+\def\setmathgreeks#1{\setkeys{mathgreeks}{#1}\unskip
+ \ifmathgreeks@upgreek
+ \mathgreeks@Greekuptrue
+ \mathgreeks@greekuptrue
+ \PackageWarning{mathgreeks}{Style is set to `upright'
+ \MessageBreak with the `upgreek' option}
+ \fi
+ \mgr@DefaultGreeks\ignorespaces
+}
+
+\newif\ifmgrfont@unicodemath
+\define@key{mgrfont}{unicode-math}[Latin Modern Math]{%
+ \def\mgrfont@unicodemath{#1}\mgrfont@unicodemathtrue}
+\newif\ifmgrfont@fontspec
+\define@key{mgrfont}{fontspec}[GFS Didot]{%
+ \def\mgrfont@fontspec{#1}\mgrfont@fontspectrue}
+\define@key{mgrfont}{enc}{\def\mgrfont@enc{#1}}
+\define@key{mgrfont}{fam}{\def\mgrfont@fam{#1}}
+\newcommand*\mgrfont@series{m} % default value
+\define@key{mgrfont}{series}{\renewcommand*\mgrfont@series{#1}}
+\newcommand*\mgrfont@shape{it} % default value
+\define@key{mgrfont}{shape}{\renewcommand*\mgrfont@shape{#1}}
+
+\def\mathgreeksfont#1{%
+ \mgrfont@unicodemathfalse
+ \mgrfont@fontspecfalse
+ \renewcommand*\mgrfont@series{m}
+ \renewcommand*\mgrfont@shape{it}
+ \mathgreeks@lgrmathfalse
+ \mathgreeks@fontspecfalse
+ \mathgreeks@Symbolfalse
+ \mathgreeks@upgreekfalse
+ \setkeys{mgrfont}{#1}
+ \ifmgrfont@unicodemath
+ \setmathfont{\mgrfont@unicodemath}[range=it/{greek,Greek}]
+ \setmathfont{\mgrfont@unicodemath}[range=up/{greek,Greek}]
+ \let\mgr@UnicodeGreek\mgr@UnicodemathGreek
+ \mathgreeks@fontspectrue % for \mgr@CodeGreeks
+ \mgr@CodeGreeks{it}
+ \mgr@CodeGreeks{up}
+ \mgr@DefaultGreeks
+ \else\ifmgrfont@fontspec
+ \let\MathGreeksFont\relax
+ \newfontfamily\MathGreeksFont{\mgrfont@fontspec}
+ \let\mgr@UnicodeGreek\mgr@NewUnicodeGreek
+ \mathgreeks@fontspectrue
+ \mgr@CodeGreeks{it}
+ \mgr@CodeGreeks{up}
+ \mgr@DefaultGreeks
+ \else
+ \let\mgr@CodeGreek\mgr@NewCodeGreek
+ \ifdefstring{\mgrfont@enc}{LGR}{
+ \mathgreeks@lgrmathtrue
+ }{
+ \ifdefstring{\mgrfont@fam}{psy}{
+ \mathgreeks@Symboltrue
+ }{
+ \ifdefstring{\mgrfont@fam}{fsy}{
+ \mathgreeks@Symboltrue
+ }{
+ }}}
+ \mgr@CodeGreeks{}
+ \fi\fi
+}
+
+\def\mgr@NewCodeGreek#1#2#3{\unskip
+ \expandafter\DeclareRobustCommand\csname#1#2\endcsname
+ {\mathalpha{\text{\usefont{\mgrfont@enc}{\mgrfont@fam}
+ {\mgrfont@series}{\mgrfont@shape}\symbol{#3}}
+ }}\ignorespaces
+}
+
+\def\mgr@NewUnicodeGreek#1#2#3{\unskip % only with fontspec
+ \expandafter\DeclareRobustCommand\csname#1#2\endcsname
+ {\mathalpha{\text{\csname#1shape\endcsname%
+ \MathGreeksFont\symbol{#3}}
+ }}\ignorespaces
+}
+
+\providecommand\greektable{
+ $\begin{array}{c}
+ \begin{array}{*{23}{@{\;}c}@{\;}}
+ \alpha & \beta & \gamma & \delta & \epsilon & \zeta & \eta &
+ \theta & \iota & \kappa & \lambda & \mu & \nu & \xi & \pi &
+ \rho & \sigma & \tau & \upsilon & \phi & \chi & \psi & \omega
+ \end{array}
+ \\
+ \begin{array}{*{18}{@{\;}c}@{\;}}
+ \varepsilon & \vartheta & \varpi & \varrho & \varsigma & \varphi
+ & | &
+ \Gamma & \Delta & \Theta & \Lambda & \Xi & \Pi & \Sigma &
+ \Upsilon & \Phi & \Psi & \Omega
+ \end{array}
+ \end{array}$
+}
+
+% \end{macrocode}
+% \Finale
+\endinput
diff --git a/macros/latex/contrib/mathgreeks/mathgreeks.ins b/macros/latex/contrib/mathgreeks/mathgreeks.ins
new file mode 100644
index 0000000000..e7e74d9458
--- /dev/null
+++ b/macros/latex/contrib/mathgreeks/mathgreeks.ins
@@ -0,0 +1,56 @@
+%%
+%% Copyright (C) 2024 by Antoine Missier <antoine.missier@ac-toulouse.fr>
+%%
+%% This file may be distributed and/or modified under the conditions of
+%% the LaTeX Project Public License, either version 1.3 of this license
+%% or (at your option) any later version. The latest version of this
+%% license is in:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of LaTeX version
+%% 2005/12/01 or later.
+%%
+
+\input docstrip.tex
+\keepsilent
+
+\usedir{tex/latex/mathgreeks}
+
+\preamble
+
+This is a generated file.
+
+Copyright (C) 2024 by Antoine Missier <antoine.missier@ac-toulouse.fr>
+
+This file may be distributed and/or modified under the conditions of
+the LaTeX Project Public License, either version 1.3 of this license
+or (at your option) any later version. The latest version of this
+license is in:
+
+ http://www.latex-project.org/lppl.txt
+
+and version 1.3 or later is part of all distributions of LaTeX version
+2005/12/01 or later.
+
+\endpreamble
+
+\generate{\file{mathgreeks.sty}{\from{mathgreeks.dtx}{package}}}
+
+\obeyspaces
+\Msg{*************************************************************}
+\Msg{* *}
+\Msg{* To finish the installation you have to move the following *}
+\Msg{* files into a directory searched by TeX: *}
+\Msg{* *}
+\Msg{* mathgreeks.sty *}
+\Msg{* *}
+\Msg{* To produce the documentation run the file *}
+\Msg{* mathgreeks.dtx through LuaLaTeX *}
+\Msg{* (or LaTeX for a shorter version of the doc). *}
+\Msg{* *}
+\Msg{* Happy TeXing! *}
+\Msg{* *}
+\Msg{*************************************************************}
+
+\endbatchfile
diff --git a/macros/latex/contrib/mathgreeks/mathgreeks.pdf b/macros/latex/contrib/mathgreeks/mathgreeks.pdf
new file mode 100644
index 0000000000..5addc4ecb1
--- /dev/null
+++ b/macros/latex/contrib/mathgreeks/mathgreeks.pdf
Binary files differ
diff --git a/macros/latex/contrib/mismath/README.md b/macros/latex/contrib/mismath/README.md
index 2ebf631307..9cafc74719 100644
--- a/macros/latex/contrib/mismath/README.md
+++ b/macros/latex/contrib/mismath/README.md
@@ -5,17 +5,19 @@
The package provides some mathematical macros to typeset:
- mathematical constants e, i, pi in upright shape (automatically) as recommended by ISO 80000-2,
-- vectors with nice arrows and adjusted norm (and tensors),
+- vectors with nice arrows and adjusted norm,
+- tensors in sans serif bold italic shape (ISO recommendation),
- some standard operator names,
+- several commands with useful aliases,
- improved spacings in mathematical formulas,
- systems of equations and small matrices,
-- displaymath in double columns for lengthy calculations.
+- displaymath in double columns for lengthy calculations with short expressions.
## Installation
- run LaTeX on mismath.ins, you obtain the file mismath.sty,
-- if then you run XeLaTeX or LuaLaTeX on mismath.dtx you get the file mismath.pdf which is also in the archive,
+- if then you run pdfLaTeX on mismath.dtx you get the file mismath.pdf which is also in the archive,
- put the files mismath.sty and mismath.pdf in your TeX Directory Structure.
diff --git a/macros/latex/contrib/mismath/mismath.dtx b/macros/latex/contrib/mismath/mismath.dtx
index 88793e7e9e..f3fd2168bc 100644
--- a/macros/latex/contrib/mismath/mismath.dtx
+++ b/macros/latex/contrib/mismath/mismath.dtx
@@ -20,16 +20,16 @@
%<*package>
\NeedsTeXFormat{LaTeX2e}[2005/12/01]
\ProvidesPackage{mismath}
- [2024/02/29 v2.12 .dtx Miscellaneous mathematical macros]
+ [2024/05/04 v3.0 .dtx Miscellaneous mathematical macros]
%</package>
%<*driver>
\documentclass{ltxdoc}
-%\usepackage[utf8]{inputenc} % running through XeLaTeX
+\usepackage[utf8]{inputenc} % run through XeLaTeX
\usepackage[T1]{fontenc}
\usepackage[english]{babel}
-\usepackage{fontspec}
+%\usepackage{fontspec}
\usepackage{fourier} % in case of font change, modify 2.1 (3rd §)
-\usepackage[ibrackets,decimalcomma]{mismath}
+\usepackage[ibrackets,decimalcomma,otherReIm]{mismath}
%\usepackage{amssymb} % unnecessary with fourier
\usepackage{multicol}
\usepackage{sectsty}
@@ -40,33 +40,37 @@
\definecolor{darkbrown}{rgb}{0.5,0.1,0.1}
\allsectionsfont{\color{darkbrown}}
-% The following commands provides several shapes of pi
-% the maximum number of authorized math fonts is reached
+
+% The following commands provide several shapes for pi
\DeclareFontEncoding{LGR}{}{}
-\DeclareSymbolFont{lgrlmr}{LGR}{lmr}{m}{n}
-\DeclareMathSymbol{\pilmr}{\mathalpha}{lgrlmr}{112}
-\DeclareSymbolFont{lgrAlegreya}{LGR}{Alegreya-LF}{m}{n}
-\DeclareMathSymbol{\piAlegreya}{\mathalpha}{lgrAlegreya}{112}
-\DeclareSymbolFont{lgrCochineal}{LGR}{Cochineal-LF}{m}{n}
-\DeclareMathSymbol{\piCochineal}{\mathalpha}{lgrCochineal}{112}
-\pinumber[upgreek=Euler]
-\DeclareSymbolFont{upgreekSymbol}{U}{psy}{m}{n}
-\DeclareMathSymbol{\piSymbol}{\mathord}{upgreekSymbol}{`p}
-\DeclareSymbolFont{mdCharter}{OML}{mdbch}{m}{n}
-\DeclareMathSymbol{\piCharter}{\mathord}{mdCharter}{"19}
-\DeclareSymbolFont{kp}{U}{jkpmia}{m}{it}
-\DeclareMathSymbol{\pikp}{\mathord}{kp}{"19}
-\DeclareSymbolFont{px}{U}{pxmia}{m}{it}
-\DeclareMathSymbol{\pipx}{\mathord}{px}{"19}
-\DeclareSymbolFont{tx}{U}{txmia}{m}{it}
-\DeclareMathSymbol{\pitx}{\mathord}{tx}{"19}
-% For showing original \i and \j in text mode:
-\DeclareTextFontCommand{\extrafont}{\fontfamily{lmr}\selectfont}
+\def\pilmr{\text{\usefont{LGR}{lmr}{m}{n}\symbol{112}}}
+\def\piAlegreya{\text{\usefont{LGR}{Alegreya-LF}{m}{n}\symbol{112}}}
+\def\piCochineal{\text{\usefont{LGR}{Cochineal-LF}{m}{n}\symbol{112}}}
+\def\piLibSerif{\text{\usefont{LGR}{LibertinusSerif-LF}{m}{n}\symbol{112}}}
+\def\piLibSans{\text{\usefont{LGR}{LibertinusSans-LF}{m}{n}\symbol{112}}}
+\def\pilmss{\text{\usefont{LGR}{lmss}{m}{n}\symbol{112}}}
+\def\pigentium{\text{\usefont{LGR}{gentium}{m}{n}\symbol{112}}}
+\def\pilato{\text{\usefont{LGR}{lato-LF}{m}{n}\symbol{112}}}
+\DeclareFontFamily{U}{eur}{\skewchar\font'177}
+\DeclareFontShape{U}{eur}{m}{n}{%
+ <-6> eurm5 <6-8> eurm7 <8-> eurm10}{}
+\def\piEuler{\text{\usefont{U}{eur}{m}{n}\symbol{"19}}}
+\def\piSymbol{\text{\usefont{U}{psy}{m}{n}\symbol{`p}}}
+\def\piCharter{\text{\usefont{OML}{mdbch}{m}{n}\symbol{"19}}}
+\def\pikp{\text{\usefont{U}{jkpmia}{m}{it}\symbol{"19}}}
+\pinumber[otherpi] % fourier
+\def\pipx{\text{\usefont{U}{pxmia}{m}{it}\symbol{"19}}}
+\def\pitx{\text{\usefont{U}{txmia}{m}{it}\symbol{"19}}}
+
+% Next command is used for showing original Latin Modern \i and \j in text mode:
+%\DeclareTextFontCommand{\extrafont}{\fontfamily{lmr}\selectfont} % useless with fourier
\DisableCrossrefs
%\CodelineIndex
%\RecordChanges
+
\usepackage{hyperref}
+\let\C\relax % "\C already defined" with hyperref when compiling with xelatex or lualatex
\hypersetup{%
colorlinks,
linkcolor=blue,
@@ -83,7 +87,7 @@
%</driver>
% \fi
%
-% \CheckSum{831}
+% \CheckSum{845}
%
% \CharacterTable
% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
@@ -159,8 +163,8 @@
% (and LGR encoding pi by default), it is no longer compatible with the older,
% - paren command has been removed,
% - hvect and hlbar have been slightly modified (phantom t instead of phantom h),
-% - several changes in documentation,
-% - now using the Charter font (with the package mathdesign)}
+% - several changes in the documentation,
+% - now using the Charter font in the doc (with the package mathdesign)}
%
% \changes{v2.1}{2022/12/26}{
% - Improved management of square brackets with the ibrackets package,
@@ -225,26 +229,41 @@
%
% \changes{v2.12}{2024/02/29}{
% - The xparse package has been removed by mistake in v2.11,
-% this may cause some compatibility problems with unicode-math;
+% this may cause some compatibility problems;
% it is loaded again by mismath
% - Improvements to make pinumber work perfectly with unicode-math
% - Small corrections in the doc}
%
+% \changes{v3.0}{2024/03/15}{
+% - Rewriting of the pinumber command including the pifonts macro
+% - Presenting other lgrmath values for pinumber in the doc
+% - The \C macro is now in AtBeginDocument
+% - amsmath isn't loaded anymore because mathtools loads it
+% - Bug fix with options decimalcomma and ibrackets
+% - New option 'nofunction' to lighten the package loading
+% - Addition of coker and Res in standard operator names
+% - New option 'classicReIm' to deactivate Im and Re redefinition
+% - New option 'otherReIm' to provide an alternative writing with cmsy font
+% - Removal of the PEupright command
+% - Additional space in the lfrac macro increased from \: (5mu) to 7mu
+% - New optional parameter for adjusting the space in lfrac
+% - Changing the vphantom in hvect, hvec and lbar from `t' to `A', looks better}
+%
% \GetFileInfo{mismath.sty}
%
% \title{Miscellaneous mathematical macros \\The \textsf{mismath} package\thanks{This document
% corresponds to \textsf{mismath}~\fileversion, dated \filedate.
% Thanks to François Bastouil for initial help in English translation.}}
% \author{Antoine Missier \\ \texttt{antoine.missier@ac-toulouse.fr}}
-% \date{February 29, 2024}
+% \date{May 04, 2024}
%
% \maketitle
% \tableofcontents
%
% \section{Introduction}
%
-% According to the International Standards ISO~31-0:1992 to ISO~31-13:1992
-% (superseded by ISO~80000-2:2009), mathematical \emph{constants} $\e$, $\i$, $\otherpi$
+% According to the International Standards ISO~31-0:1992 to ISO~31-13:1992
+% (superseded by ISO~80000-2:2009), mathematical \emph{constants} $\e$, $\i$, $\pi$
% should be typeset in roman (upright shape) and not in italic like
% variables (see~\cite{TYPMA}~\cite{NIST}~\cite{SI}~\cite{ICTNS}).
% This package provides some tools to achieve this automatically.
@@ -262,14 +281,15 @@
% or worse $\left\Vert \vect{AB} \right\Vert$ (when using |\left|\ldots |\right|).
%
% \smallskip
-% The package also offers other macros for:
+% The package also offers other macros to typeset:
% \begin{itemize}
-% \item tensors,
-% \item some common operator names,
-% \item a few useful aliases,
-% \item enhancing spacing in mathematical formulas,
+% \item tensors in sans serif bold italic shape
+% (ISO recommendation~\cite{TYPMA}~\cite{NIST}~\cite{SI}),
+% \item some standard operator names,
+% \item several commands with useful aliases,
+% \item improved spacings in mathematical formulas,
% \item systems of equations and small matrices,
-% \item displaymath in double columns for lengthy calculations.
+% \item displaymath in double columns for lengthy calculations with short expressions.
% \end{itemize}
%
% To avoid compatibility issues,
@@ -282,36 +302,38 @@
%
% \medskip
% \DescribeEnv{\oarg{options}}
-% The \textsf{mismath} package loads the \textsf{amsmath} package~\cite{AMS}
-% without any options.
-% If you want to use \textsf{amsmath} with specific options (refer to its documentation),
-% you can include these options when calling \textsf{mismath}, or
-% you can load \textsf{amsmath}
-% with the desired options before loading \textsf{mismath}.
-% \emph{When using the package \textsf{unicode-math}~\cite{UNIC}, \textsf{mismath}
-% must be loaded before \textsf{unicode-math}}, just like \textsf{amsmath}.
+% The \textsf{mismath} package loads the \textsf{mathtools}
+% \footnote{The \textsf{mathtools} package offers numerous helpful macros and improvements
+% of the \textsf{amsmath} package.}
+% package by Morten Høgholm and Lars Madsen~\cite{TOOL} which in turn loads
+% the \textsf{amsmath} package~\cite{AMS}.
+% If you want to use \mbox{\textsf{amsmath}} or \textsf{mathtools} with specific options,
+% you can include these options as options of \mbox{\textsf{mismath}}, or
+% you can load \textsf{amsmath} or \textsf{mathtools}
+% with the desired options before loading \mbox{\textsf{mismath}}.
+% When using the package \textsf{unicode-math}~\cite{UNIC}, \textsf{mismath}
+% should be loaded before \textsf{unicode-math}, just like \textsf{amsmath}.
%
% \medskip
-% In addition \textsf{mismath} loads the \textsf{mathtools} package
-% by Morten Høgholm and Lars Madsen~\cite{TOOL}.
-% This package offers numerous helpful macros and improvements of the \textsf{amsmath} package.
-%
-% \medskip
-% A recommendation, although rarely followed, is to typeset uppercase
+% An ISO recommendation, although rarely followed, is to typeset uppercase
% Greek letters in italic shape,
-% similar to other variables~\cite{ICTNS}. This can be automatically achieved,
+% as for other variables~\cite{ICTNS}. This is automatically achieved,
% for some particular fonts, with packages
% such as \textsf{fixmath} by Walter Schmidt~\cite{FIXM},
% \mbox{\textsf{isomath}} by Günter Milde~\cite{ISOM}
% or \textsf{pm-isomath} by Claudio Beccari~\cite{PMISO} and optionally with many others
% (such as \textsf{mathpazo} or \textsf{mathptmx} with the option \texttt{slantedGreek}).
+% When running through \LuaLaTeX\ or \XeLaTeX\ you can also get this result
+% with the option \mbox{\texttt{math-style=ISO}} provided
+% by the \textsf{unicode-math} package.
+% We also have the new \mbox{\textsf{mathgreeks}} package~\cite{MGREEK} which offers
+% a wide range of fonts and different settings with Greek letters.
% However this feature is not implemented here due to a conflicting rule in France,
% where all capital letters in mathematics
% are required to be typeset in upright shape
% \footnote{The \textsf{frenchmath} package~\cite{FR}
% ensures to follow the recommended French rules.}.
-% When running through \LuaLaTeX\ or \XeLaTeX\ you can also get this result by
-% setting the option \mbox{\texttt{math-style=ISO}} in the \textsf{unicode-math} package.
+% The user is free to choose loading one of these packages or not.
%
%
% \section{Usage}
@@ -338,12 +360,12 @@
%
% \medskip
% \DescribeMacro{\e} \DescribeMacro{\i} \DescribeMacro{\j}
-% To avoid cluttering a document that contains many occurrences of Euler's number (e)
-% or imaginary numbers (i) with |\mathup{e}| or |\mathup{i}|,
-% the package provides the |\e| command for Euler’s number
+% To avoid cluttering a document that contains many occurrences of Euler's number $\e$,
+% or imaginary number $\i$, with |\mathup{e}| or |\mathup{i}|,
+% the package provides the |\e| command for Euler's number
% and |\i| or |\j| for imaginary numbers.
% Let us notice that |\i| and |\j| already exist in LaTeX. In LR (left-to-right) mode,
-% they produce \mbox{`\extrafont{\i,\ \j}'} without the dot,
+% they produce \mbox{`\i,\ \j'} without the dot,
% allowing you to place accents on them.
% However, in mathematical mode, they produce the warning
% ``\texttt{LaTeX Warning: Command \string \i\space invalid in math mode on input line}
@@ -355,19 +377,21 @@
% \DescribeMacro{\MathUp}
% Indeed, typing a lot of backslashes for constants like $\e$, $\i$, or $\j$
% in a document with numerous formulas can become tiresome.
-% To alleviate this, the package proposes a powerful solution
+% To alleviate this, the package proposes another solution
% with the macro |\MathUp|\marg{char}.
% For example, when |\MathUp{e}| is called, any subsequent occurrence of $\e$
% will automatically be set in roman (upright shape),
% without the need to type |\e| explicitly. The effect of this macro
% can be either global or local, depending on whether it is used outside or inside an
% environment or braces.
-% Furthermore, you can call this macro in the preamble to apply the change
-% from the beginning of the document. This powerful feature allows you
-% to bring a document up to the standards effortlessly.
+% Furthermore, you can also call this macro in the preamble, then the change will apply
+% from the beginning of the document. This powerful command allows you
+% to bring a document up to the standards effortlessly and without changing anything
+% in your mathematical formulas.
% In fact, |\MathUp| can be applied to any valid single character,
-% offering flexibility for various use cases (another use of it with probability
-% will be presented in section \ref{operators}).
+% offering flexibility for various use cases
+% \footnote{Another use of it with probability
+% will be presented in section \ref{operators}.}.
%
% \medskip
% \DescribeMacro{\MathIt}
@@ -387,37 +411,47 @@
% In |\MathNumbers|, the comma separator between letters can be modified
% or removed as needed. In fact, this macro only affects the letters e, i, or j;
% it has no effect on other characters.
-% On the other hand, |\MathNormal| can be utilized for probability as well
-% (refer to section \ref{operators}), and it accepts any comma-separated list of arguments.
+% On the other hand, |\MathNormal| accepts any comma-separated list of arguments.
% This means you can apply the normal italic math mode typesetting to various letters
% at once using |\MathNormal|.
+%
+% \medskip
+% \DescribeMacro{\enumber}\DescribeMacro{\inumber}\DescribeMacro{\jnumber}
+% These three commands, used until version 2.2 but only functioning within the preamble,
+% serve now as aliases for the commands |\MathUp{e}|, |\MathUp{i}| or |\MathUp{j}|,
+% so they can be used anywhere
+% in the document or preamble and has an inverse switches with |\MathIt|.
%
% \medskip
% \DescribeMacro{\pinumber[\meta{option}]}
-% The mathematical constant $\otherpi$ should also be typeset in upright shape
+% The constant $\pi$ should also be typeset in upright shape
% (see~\cite{TYPMA}, \cite{NIST}, \cite{ICTNS}), which is different from italicized $\itpi$.
% However, this recommendation is even less commonly followed compared to the one
% concerning $\e$ and $\i$~\cite{TYPMA}.
-% The |\pinumber| command replaces the italic $\itpi$ with an upright $\otherpi$
-% each time |\pi| is called. It functions in two different ways.
+% Thanks to the |\pinumber| command, the italic $\itpi$ will be replaced
+% with an upright $\pi$
+% each time |\pi| is called. Thus |\pinumber| makes your document compliant with standards
+% without changing the source code of your mathematical formulas.
+% It functions in two different ways.
%
% \begin{enumerate}
-% \item You can install a Greek letters package that provides the glyphs in upright shape.
+% \item You can load a Greek letters package that provides the glyphs in upright shape.
% There are many available.
% Notably, let us mention \textsf{upgreek}~\cite{GREEK},
% \mbox{\textsf{mathdesign}}~\cite{DESIGN},
% \mbox{\textsf{kpfonts}}~\cite{KPF},
-% \mbox{\textsf{fourier}}~\cite{FOUR} (used in the present document),
-% \mbox{\textsf{libertinust1math}},
-% \mbox{\textsf{pxgreeks}} (using \textsf{pxfonts}), \mbox{\textsf{txgreeks}}
-% (using \textsf{txfonts})
+% \mbox{\textsf{fourier}}~\cite{FOUR} (used in the present document), but also
+% \mbox{\textsf{pxgreeks}} (using \textsf{pxfonts}~\cite{PX}), \mbox{\textsf{txgreeks}}
+% (using \textsf{txfonts}~\cite{TX})
% \footnote{When using \textsf{pxgreeks} or \textsf{txgreeks},
% they should be loaded \emph{after} \textsf{mismath} to avoid an error
% due to conflict with the existing macros \texttt{\string\iint}, \texttt{\string\iiint},
% \texttt{\string\iiiint}, \texttt{\string\idotsint} in \textsf{amsmath}.},
-% \textsf{libgreek}, etc.
+% \mbox{\textsf{libertinust1math}}~\cite{LIB}, \textsf{libgreek}, etc.
% A special mention goes to \textsf{lgrmath} of Jean-François Burnol~\cite{LGR}
-% which allows the use of any Greek LGR-encoded font in math mode.
+% which allows the use of any Greek LGR-encoded font in math mode,
+% an idea taken up in \textsf{mathgreeks}~\cite{MGREEK}.
+% Also note \textsf{newtxmath}~\cite{NTX} which has several font options.
% These packages provide commands like |\uppi| (\textsf{upgreek}),
% |\piup| (\textsf{mathdesign}, \textsf{kpfonts}, \textsf{lgrmath}),
% |\otherpi| (\textsf{fourier}), etc.
@@ -425,101 +459,122 @@
% letters in upright shape by default, but this in not our goal here.}
%
% In this case, |\pinumber| must be called in the preamble
-% with the name of the command (without the backslash) giving access to the upright pi
-% (piup, uppi, otherpi \ldots) as the argument for the optional parameter.
+% with an optional argument being the name of the command, \emph{without the backslash},
+% giving access to the upright pi:
+% piup, uppi, otherpi\ldots
% However, installing such a Greek letters package will modify
% all the other Greek letter glyphs.
% ^^A even if, except for pi, they will be in italics.
%
-% By using the preliminary code |\MathNumbers{ei}\pinumber[otherpi]|
-% (assuming the \textsf{fourier} package is loaded)
+% By calling in the preamble |\MathNumbers{ei}\pinumber[otherpi]|
+% (assuming the \textsf{fourier} package is loaded),
% you can achieve the following result:
% \begin{center}
-% |$e^{i\pi} = -1$| \quad yields \quad $\e^{\i\otherpi}=-1$.
+% |$e^{i\pi} = -1$| \quad yields \quad $\e^{\i\pi}=-1$.
% \end{center}
%
% \item Without installing a package, it is possible to change only the glyph of pi
-% without altering the original glyphs for the other Greek letters,
-% which are typically in italics.
-% ^^A The original pi will still be accessible with |\itpi|.
+% without altering the other Greek letters,
+% which are typically in italics.
%
% In this case, |\pinumber| must be called in the preamble with an optional argument
% of the \texttt{key=value} type. The key name corresponds to a package
% providing the same glyph.
-% When a key is given without a value, |\pinumber| will choose a default value
-% specified below (depending on the key) .
% The following table summarizes the available options.
+% When a key is given without a value, |\pinumber| will choose a default value
+% specified in the following text (depending on the key).
%
% \begin{center}
% \setlength{\extrarowheight}{1pt}
% \begin{tabular}{>{\ttfamily}l>{$}c<{$}}
% \hline
-% \normalfont Option & \mbox{Result} \\
+% {\normalfont Option} lgrmath=... & \mbox{Result} \\
% \hline
-% lgrmath=lmr & \pilmr \\
-% lgrmath=Alegreya-LF & \piAlegreya \\
-% lgrmath=Cochineal-LF & \piCochineal \\
-% lgrmath=\ldots & \ldots\\
-% upgreek=Euler & \pi \\
-% upgreek=Symbol & \piSymbol \\
+% Alegreya-LF & \piAlegreya \\
+% Cochineal-LF & \piCochineal \\
+% LibertinusSerif-LF & \piLibSerif \\
+% LibertinusSans-LF & \piLibSans \\
+% lmr & \pilmr \\
+% lmss & \pilmss \\
+% gentium & \pigentium\\
+% lato-LF & \pilato \\
% \hline
% \end{tabular}
-% \qquad
+% \qquad
% \begin{tabular}{>{\ttfamily}l>{$}c<{$}}
% \hline
-% \normalfont Option & \mbox{Result} \\
+% \normalfont Other options & \mbox{Result} \\
% \hline
+% fontspec=\ldots & \ldots \\
+% upgreek=Euler & \piEuler \\
+% upgreek=Symbol & \piSymbol \\
% mathdesign & \piCharter \\
% kpfonts & \pikp \\
-% fourier & \otherpi\\
+% fourier & \pi\\
% pxfonts & \pipx \\
% txfonts & \pitx \\
-% & \\
% \hline
% \end{tabular}
% \end{center}
%
+% \medskip
% \begin{itemize}
+%
% \item With the \texttt{lgrmath} key, we actually have numerous possibilities
-% for values (any Greek letters math fonts in LGR encoding).
+% for values (any Greek letters math font in LGR encoding).
% The documentation of the \textsf{lgrmath}
% package explains how to check an visualize all available fonts on your distribution.
-% We have only presented three of them. The default value is \texttt{lmr}.
+% We have only presented seven of them. The default value is \texttt{lmr}.
+% Other interesting values are \texttt{NotoSerif-LF}, \texttt{Clara-TLF},
+% \texttt{droidserif}, \texttt{fct}, \texttt{llcmss}.
%
+% \item When |\pinumber| is called without an argument in the preamble,
+% it corresponds to the option \texttt{lgrmath=lmr}.
+% This $\pilmr$ character is well-suited
+% for use with the Latin Modern font family
+% \footnote{It will look the same as the one provided by \texttt{lgrmath=cmr} or by
+% Günter Milde's \textsf{textalpha} package~\cite{ALPHA}.}.
+%
+% \item With the \texttt{fontspec} key, there are also many possible values,
+% corresponding to the TrueType or OpenType fonts installed on your system
+% (works with \LuaLaTeX\ or \XeLaTeX).
+% See the \textsf{mathgreeks} documentation for examples.
+
% \item With the \texttt{upgreek} key, the default value is \texttt{Symbol}.
% There is a third possible value, \texttt{Symbolsmallscale},
% which provides the same character as \texttt{Symbol} but reduced in size by 10\,\%.
%
% \item With the \texttt{mathdesign} key, there are actually 3 possible values:
-% \texttt{Utopia}, \texttt{Garamond}, or \texttt{Charter} (default value),
-% but the glyphs obtained for pi look very similar.
+% \texttt{Utopia}, \texttt{Garamond} or \texttt{Charter} (the default value),
+% but the glyphs obtained for pi look quite similar.
%
% \item With the \texttt{kpfonts} key, we have two possible values:
% \texttt{normal} (default) and \texttt{light}. The option \texttt{kpfonts=light}
% provides a slightly less bold character.
%
-% \item The keys \texttt{fourier} (based on Utopia), \texttt{pxfonts} (based on Palatino)
-% and \texttt{txfonts} (based on Times)
+% \item The last keys, \texttt{fourier} (based on Utopia), \texttt{pxfonts}
+% (based on Palatino),
+% \texttt{txfonts} (based on Times)
% are booleans whose default value is \texttt{true} (when called).
+% The \texttt{txfonts} option yields the same glyph than \texttt{lgrmath=txr}.
%
-% \item When |\pinumber| is called without an argument in the preamble,
-% it corresponds to the option \texttt{lgrmath=lmr}.
-% This $\pilmr$ character is particularly well-suited
-% for use with the default Computer Modern or Latin Modern font family
-% \footnote{It will look the same as the one provided by
-% Günter Milde's \textsf{textalpha} package~\cite{ALPHA}.}.
% \end{itemize}
% \end{enumerate}
%
% The \textsf{unicode-math} package~\cite{UNIC} provides |\uppi|, and you can use
-% |\pinumber[uppi]| to produce automatic upright pi, but, with \textsf{unicode-math},
-% it can be quite complicated
-% to make some other Greek letters packages work.
-% In any case, such a package must be loaded after \textsf{unicode-math} and in
-% |\AtBeginDocument|.
-% However, \textsf{unicode-math} supports |\pinumber| very well with the
-% previous \texttt{key=value} options, by calling |\pinumber[option]| after
-% \mbox{\textsf{unicode-math}}.
+% |\pinumber[uppi]| to produce automatic upright pi in the selected math font,
+% but |\pinumber[uppi]| must be called \emph{after} \mbox{\textsf{unicode-math}},
+% and a math font must have been explicitly chosen with |\setmathfont|.
+% You can also use the \texttt{fontspec} key option to obtain pi in any font
+% that is supported by \mbox{\textsf{unicode-math}} \eg
+% |\pinumber[fontspec=STIX Two Math]|.
+%
+% For other fonts, it can be quite complicated to make Greek letters packages
+% work with \textsf{unicode-math}. In any case, such a package must be loaded
+% after \textsf{unicode-math} and in |\AtBeginDocument|.
+% However, |\pinumber| supports \textsf{unicode-math} very well with any previous
+% \texttt{key=value} option, by calling |\pinumber|\oarg{option}
+% after \textsf{unicode-math}.
%
% \medskip
% \DescribeMacro{\itpi}
@@ -555,7 +610,7 @@
% If you wish to use a different type of arrow, you must call \textsf{esvect}
% with the appropriate option \emph{before} loading \textsf{mismath}.
% For example, using |\usepackage[d]{esvect}|
-% will provide the arrows produced by default in~\cite{VECT}.
+% will provide the same arrows that are used by default in~\cite{VECT}.
%
% \medskip
% \DescribeMacro{\boldvect}
@@ -567,11 +622,11 @@
% \begin{minipage}{8cm}
% \begin{verbatim}
%\[ \boldvect \vect{v}
-% =\lambda\vect{e}_x+\mu\vect{e}_y. \]
+% =\lambda\vect{e}_x+\mu\vect{e}_y \]
% \end{verbatim}
% \end{minipage}
% \begin{minipage}{4cm}\vspace{-2ex}
-% $\boldvect \vect{v}=\lambda\vect{e}_x +\mu\vect{e}_y$.
+% $\boldvect \vect{v}=\lambda\vect{e}_x +\mu\vect{e}_y$
% \end{minipage}
%
% \DescribeMacro{\boldvectcommand}
@@ -586,9 +641,12 @@
% \textsf{unicode-math} provides the |\symbfit| command.
% To use an alternative command instead of |\boldsymbol| in \textsf{mismath},
% redefine |\boldvectcommand|,
-% for instance after loading \textsf{fixmath}:
-% \begin{center} |\renewcommand\boldvectcommand{\mathbold}|. \end{center}
+% for instance after loading \textsf{fixmath}:
+%
+% \medskip
+% \centeredline{|\renewcommand\boldvectcommand{\mathbold}|}
%
+% \medskip
% According to ISO rules, symbols for matrices are also in bold italic.
% Therefore you can use the same |\boldvect| command or create another alias.
%
@@ -604,28 +662,31 @@
% \DescribeMacro{\hvect}
% When vectors with arrows are typeset side by side,
% the arrows can be set up slightly higher using |\hvect|
-% (which places a vertical phantom box containing ``$t$'')
+% (which places a vertical phantom box containing `$A$')
% to avoid inelegant effects. For example, writing
% \begin{itemize}
-% \item $\vect{AB}=\hvect{u}+ \vect{AC}$, obtained with |\hvect{u}|,
-% is better than $\vect{AB}=\vect{u}+ \vect{AC}$;
+% \item $\vect{AB}=\hvect{u} + \vect{AC}$, obtained with |\hvect{u}|,
+% looks better than $\vect{AB}=\vect{u}+ \vect{AC}$;
% \item $\hvect{a} \cdot \vect{b}=0$, obtained with |\hvect{a}|,
-% is better thant $\vect{a} \cdot \vect{b}=0$.
+% looks better than $\vect{a} \cdot \vect{b}=0$.
% \end{itemize}
-% This adjustment ensures a more visually pleasing appearance when vectors
-% with arrows are combined in an equation.
+% This adjustment ensures a nicer appearance when vectors
+% with arrows are combined in an equation
+% \footnote{For a fine tuning you can also use the \texttt{\string\vstrut} or
+% \texttt{\string\cstrut} macros from the \textsf{spacingtricks} package~\cite{SPA}.}.
% The |\boldvect| and |\arrowvect| switches have the same effect on |\hvect|
% as they do on |\vect|.
%
% \DescribeMacro{\hvec}
% In a similar way, |\hvec| raises the little arrow produced by
-% the \LaTeX\ command |\vec|, to the height of the letter ``$t$''
-% (but |\boldvect| have no effect here):
+% the \LaTeX\ command |\vec|, to the height of the letter `$A$'
+% (but |\boldvect| have no effect on |\vec| nor |\hvec|):
% \begin{itemize}
% \item $\mathcal{P}=\vec{f}\cdot\hvec{v}$, obtained with |\hvec{v}|,
-% is better than $\mathcal{P}=\vec{f}\cdot\vec{v}$.
+% seems better than $\mathcal{P}=\vec{f}\cdot\vec{v}$;
+% ^^A (the result of |\vec| with \textsf{fourier} may be bad with high letters, \eg $\vec{h}$)
% \item $\vec{f} =m \hvec{a}$, obtained with |\hvec{a}|,
-% is better than $\vec{f} =m \vec{a}$.
+% seems better than $\vec{f} =m \vec{a}$.
% \end{itemize}
%
% \DescribeMacro{\norm}
@@ -639,11 +700,11 @@
% instead of $\Vert\vec{h}\Vert$ or $\left\Vert \vec{h} \right\Vert$.
% Let's notice that the height of the bars don't adjust to content,
% but however to context: main text, subscripts or exponents,
-% \eg $\e^{\norm{\vec{h}}}$.
+% \eg $X^{\norm{\vec{h}}}$.
% This macro is useful only for arguments of special height, such as $\vec{h}$ or $\vect{AB}$
% and may give bad results in other situations.
%
-% \pagebreak
+% \medskip
% \DescribeMacro{\mathbfsfit}\DescribeMacro{\tensor}
% For tensors symbols, ISO rules recommend using
% sans serif bold italic, but there
@@ -651,7 +712,7 @@
% However, the \mbox{\textsf{mismath}} package defines this alphabet
% (assuming the font encoding and package you use permits it)
% and provides the macro |\mathbfsfit| or its alias |\tensor|.
-% By using |\tensor{T}| you can produce $\tensor{T}$.
+% By writing |\tensor{S}\otimes\tensor{T}|, you get $\tensor{S}\otimes\tensor{T}$.
%
% \subsection{Standard operator names}\label{operators}
%
@@ -681,12 +742,12 @@
% \[m\frac{\di^2x}{\di t^2}+h\frac{\di x}{\di t}+kx=0\]
% \end{minipage}
%
-% This command can also represent \emph{distance} (hence its name):
-% \[\lambda\di(A, \mathcal{F})+\mu\di(B, \mathcal{H}).\]
+% The command |\di| can also represent the \emph{distance}, hence its name:
+% \[\di(u, \cmmathcal{H}) = \frac{\abs{\langle u,v\rangle}}{\lVert v \rVert}.\]
%
% \DescribeMacro{\P} \DescribeMacro{\E}
% To refer to probability
-% \footnote{\LaTeX\ provides also \texttt{\string Pr} which gives $\Pr$.}
+% \footnote{\LaTeX\ provides also \texttt{\string \Pr} which gives $\Pr$.}
% and expectation the proper use is to typeset the capital letters $\P$, $\E$
% in roman just like any standard function identifier.
% This can be achieved with |\P| and |\E| commands.
@@ -698,43 +759,45 @@
%
% \medskip
% \DescribeMacro{\V}
-% Variance is generally denoted by $\var$ or $\Var$ (see table below),
+% Variance is generally denoted by $\var$ or $\Var$ (see the following table),
% but some authors prefer to use $\V$, which can be produced using |\V|.
%
-% \medskip
+% \pagebreak
% \DescribeMacro{\MathProba}\DescribeMacro{\MathNormal}
% As for $\e$, $\i$ or $\j$, you can use |\MathUp{P}|, |\MathUp{E}|
% or |\MathUp{V}| to avoid typing many |\P|, |\E| or |\V|.
% However you can also achieve this in a single command with |\MathProba|,
-% for example |\MathProba{P,E}|. We get the inverse toggle with
+% for example |\MathProba{PE}|. We get the inverse toggle with
% |\MathIt| for any individual letter or |\MathNormal| for a list.
%
% \medskip
% \DescribeMacro{\probastyle}
-% Some authors use ``blackboard bold'' font to represent probability, expectation
+% Some authors use ``outline'' font shape to represent probability, expectation
% and variance: $\mathbb{P}, \mathbb{E}, \mathbb{V}$.
% The |\probastyle| macro sets the appearance of |\P|, |\E| and |\V|.
% For instance |\renewcommand\probastyle{\mathbb}|
% \footnote{The effect of this redefinition is global or local to the container environment
% in which it is used.}
-% brings the previous ``double-struck'' letters.
-% The |\mathbb| command comes from \textsf{amsfonts} package
-% (loaded by \textsf{amssymb} but also available standalone)
-% which needs to be called in the preamble.
+% brings the double-struck letters.
+% The |\mathbb| command is provided by \textsf{amsfonts} package
+% (which needs to be called in the preamble), but also by other complete math font
+% packages such as \textsf{mathdesign}, \textsf{kpfonts}, \textsf{fourier},
+% \textsf{unicode-math}\ldots
+% \hypertarget{nofunction}{}
%
% \medskip
% The following standard operator names are defined in \textsf{mismath}:
% \begin{center}
% \begin{tabular}{rlrlrl}
-% |\adj| & $\adj$ \qquad\mbox{} & |\erf| & $\erf$ \qquad\mbox{} & |\Re| & $\Re$ \\
-% |\Aut| & $\Aut$ & |\grad| & $\grad$ & |\rot| & $\rot$ \\
-% |\codim| & $\codim$ & |\id| & $\id$ & |\sgn| & $\sgn$ \\
-% |\Conv| & $\Conv$ & |\Id| & $\Id$ & |\sinc| & $\sinc$ \\
-% |\cov| & $\cov$ & |\im| & $\im$ & |\spa| & $\spa$ \\
-% |\Cov| & $\Cov$ & |\Im| & $\Im$ & |\tr| & $\tr$ \\
-% |\curl| & $\curl$ & |\lb| & $\lb$ & |\var| & $\var$ \\
-% |\divg| & $\divg$ & |\lcm| & $ \lcm$ & |\Var| & $\Var$ \\
-% |\End| & $\End$ & |\rank| & $\rank$ & |\Zu| & $\Zu$
+% |\adj| & $\adj$ \qquad\mbox{} & |\End| & $\End$ \qquad\mbox{} & |\Res| & $\Res$ \\
+% |\Aut| & $\Aut$ & |\erf| & $\erf$ & |\rot| & $\rot$ \\
+% |\codim| & $\codim$ & |\grad| & $\grad$ & |\sgn| & $\sgn$ \\
+% |\coker| & $\coker$ & |\id| & $\id$ & |\sinc| & $\sinc$ \\
+% |\Conv| & $\Conv$ & |\Id| & $\Id$ & |\spa| & $\spa$ \\
+% |\Cov| & $\Cov$ & |\im| & $\im$ & |\tr| & $\tr$ \\
+% |\cov| & $\cov$ & |\lb| & $\lb$ & |\var| & $\var$ \\
+% |\curl| & $\curl$ & |\lcm| & $ \lcm$ & |\Var| & $\Var$ \\
+% |\divg| & $\divg$ & |\rank| & $\rank$ & |\Zu| & $\Zu$
% \end{tabular}
% \end{center}
%
@@ -745,26 +808,15 @@
% For the variance, the covariance and the identity function,
% two notations are proposed, with or without a first capital letter,
% because both are very common.
-% On the other hand, `$\im$' stands for the image of a linear transformation
-% (like `$\ker$' for the kernel)
-% whereas `$\Im$' is the imaginary part of a complex number.
% Please note that |\div| already exists ($\div$) and |\span| is a \TeX\ primitive;
% they haven't been redefined. Therefore the provided macros are called |\divg| (divergence)
% and |\spa| (span of a set of vectors).
% Furthermore |\Z| is used to denote the set of integers (see \ref{aliases}),
-% which is why we used |\Zu|,
+% which is why we propose |\Zu|,
% to designate the center of a group: $\Zu(G)$ (from German Zentrum).
%
-%\medskip
-% \DescribeMacro{\oldRe} \DescribeMacro{\oldIm}
-% The |\Re| and |\Im| macros already existed to refer to real and imaginary part
-% of a complex number, producing outdated symbols $\oldRe$ and $\oldIm$.
-% However, they have been redefined according to current usage,
-% as mentioned in the above table. Nevertheless,
-% it is still possible to obtain the old symbols with |\oldRe| and |\oldIm|.
-%
% \medskip
-% The package \textsf{mismath} also provides some (inverse) circular or hyperbolic functions,
+% The \textsf{mismath} package also provides some (inverse) circular or hyperbolic functions,
% that are missing in \LaTeX:
% \begin{center}
% \begin{tabular}{rlrlrl}
@@ -773,21 +825,44 @@
% |\sech| & $\sech$ & |\arcosh| & $\arcosh$ & |\arsech| & $\arsech$ \\
% |\csch| & $\csch$ & |\artanh| & $\artanh$ & |\arcsch| & $\arcsch$
% \end{tabular}
-% \end{center}
+% \end{center}
+%
+% \DescribeMacro{[nofunction]}
+% Some may find that the definition of all these operators and functions is not useful
+% for their needs. So, the above definitions (on this page)
+% can be disabled with the \texttt{nofunction} option.
+% \hypertarget{classicReIm}{}
+%
+% \medskip
+% \DescribeMacro{\Re} \DescribeMacro{\Im}
+% The |\Re| and |\Im| macros refer to real and imaginary part
+% of a complex number. They have been redefined to produce $\mathup{Re}$ and $\mathup{Im}$,
+% in place of outdated symbols $\oldRe$ and $\oldIm$.
+% Nevertheless, it is still possible to obtain the old symbols
+% with |\oldRe| and |\oldIm|.
+%
+% \medskip
+% \DescribeMacro{[otherReIm]}
+% An alternative notation $\Re$, $\Im$ is provided by invoking the \texttt{otherReIm}
+% package option,
+% \DescribeMacro{[classicReIm]}
+% whereas the \texttt{classicReIm} option deactivates these redefinitions.
%
% \DescribeMacro{\bigO} \DescribeMacro{\bigo} \DescribeMacro{\lito}
-% Asymptotic comparison operators (in Landau notation) are obtained with
-% |\bigO| or |\bigo| and |\lito| commands:
-% \[ n^2+\bigO(n\log n) \txt{or} n^2+\bigo(n\log n)\txt{and} \e^x=1+x+\lito(x^2).\]
+% Asymptotic comparison operators (in Bachmann-Landau notation) are obtained with
+% |\bigO| or |\bigo| and |\lito| commands. The first one uses
+% the |\cmmathcal| alphabet and the last two compose the letters `O' and `o' in
+% roman, as for any operator:
+% \[ n^2+\bigO(n\log n) \txt{or} n^2+\bigo(n\log n)\txt{and}
+% \e^x=1+x+\frac{x^2}{2}+\lito\bigl(x^2\bigr).\]
%
% \subsection{A few useful aliases} \label{aliases}
%
-% \onlymathC
% In the tradition of Bourbaki and D.~Knuth, proper use requires
% that classic sets of numbers are typeset in bold roman:
% $\R, \C, \Z, \N, \Q$,
-% whereas ``double-barred'' or ``openwork'' letters
-% ($\mathbb{R}, \mathbb{C}, \mathbb{Z}, \ldots$)
+% whereas double-struck letters
+% ($\mathbb{R}, \mathbb{C}, \mathbb{Z}, \mathbb{N}, \mathbb{Q}$)
% are reserved for writing at the blackboard~\cite{LSHORT}.
% Similarly, to designate a field we use $\F$ or $\K$ (Körper in German).
% We obtain these symbols with the following macros:
@@ -795,23 +870,22 @@
% |\R|, |\C|, |\Z|, |\N|, |\Q|, |\F|, |\K|.
% \end{center}
%
-% \medskip
+% \smallskip
% \DescribeMacro{\mathset}
% The |\mathset| command enables you to change the behavior
% of all these macros in a global way.
-% By default, |\mathset| is an alias for |\mathbf|, but if you prefer openwork letters,
-% you can simply place |\renewcommand\mathset{\mathbb}| where you want,
-% for instance in the preamble after loading the \textsf{amsfonts} package
-% (which provides the ``blackboard bold'' typeface,
-% also loaded by \textsf{amssymb}).
+% By default, |\mathset| is an alias for |\mathbf|, but if you prefer outline letters,
+% you can simply use |\renewcommand\mathset{\mathbb}| (with local effect when
+% inside an environment or a pair of curly braces).
%
% \smallskip
% \DescribeMacro{\onlymathC}
% The macro |\onlymathC| is designed for cases when |\C| is already defined,
-% but only in text mode (usually when loading the Russian language with \textsf{babel}
-% or \textsf{polyglossia}). The macro preserves the original definition for text mode
+% but only in text mode (usually with the Russian language). Then you get the message:
+% ``\texttt{Command \string\C\space invalid in math mode}''.
+% This macro preserves the original definition for text mode
% and allows you to use |\C| for the complex number set in math mode.
-% For this purpose, simply call |\onlymathC| once in the preamble or anywhere in the document.
+% Simply call |\onlymathC| once in the preamble or anywhere in the document.
%
% \medskip
% \DescribeMacro{\ds}
@@ -844,11 +918,11 @@
% \DescribeMacro{\lbar} \DescribeMacro{\hlbar}
% Large bars over expressions are obtained with |\overline|
% or its alias |\lbar|, to get for instance $\lbar{z_1z_2}$.
-% Similar to vectors, you can raise the bar (from the height of ``$h$'') with
+% Similar to vectors, you can raise the bar (from the height of `$A$') with
% the |\hlbar| command, to correct uneven bars heights.
% \begin{center}
% $\lbar{z+z'}=\hlbar{z}+\lbar{z'}$, obtained with |\hlbar{z}|,
-% is better than $\lbar{z+z'}=\lbar{z}+\lbar{z'}$.
+% looks better than $\lbar{z+z'}=\lbar{z}+\lbar{z'}$.
% \end{center}
%
% \DescribeMacro{\eqdef} \DescribeMacro{\eqdef*}
@@ -918,36 +992,36 @@
% (ordinary symbol) and leaving less space around than |\times|:
% \begin{center}
% $\lambda+\alpha \mul b-\beta \mul c$, obtained with |\mul|,
-% is better than $\lambda+\alpha \times b-\beta \times c$.
+% looks better than $\lambda+\alpha \times b-\beta \times c$.
% \end{center}
%
% When using |\mul| before a function name or around a |\left...\right| structure,
% the space may be too large on one side of |\mul|.
-% To ensure the same amount of space on both sides of |\mul|,
+% To ensure the same amount of space on both sides,
% you can use thin negative spaces |\!|
% or enclose the function or structure with braces:
% \begin{center}
-% $x\mul{\sin x}$, obtained with |x\mul{\sin x}|, is slightly better than $x\mul\sin x$.\\[1ex]
+% $x\mul{\sin x}$, obtained with |x\mul{\sin x}|, is slightly better than $x\mul\sin x$;\\[1ex]
% |$\sin\!{\left( \frac{\pi}{3} \right)} \mul 2$|\\
-% gives $\sin\!{\left(\frac{\pi}{3}\right)}\mul 2$, which is better than
+% yields $\sin\!{\left(\frac{\pi}{3}\right)}\mul 2$, which looks better than
% $\sin\left(\frac{\pi}{3}\right)\mul 2$.
% \end{center}
-% The thin negative space after the function name is not relative to |\mul|,
-% but is due to the fact that spaces around a |\left...\right| structure
-% are bigger than those produced by single parenthesis |(...)|.
+% The negative thin space after the function name is not related to |\mul|,
+% but to the ``excessive'' spaces around the |\left... \right| structure.
%
% \medskip
% \DescribeMacro{\pow}
% In the same way, when typesetting an exponent after a closing \emph{big}
% parenthesis produced by |\right)|,
% the exponent appears to be a little to far from the parenthesis.
-% To address this issue, the |\pow|\marg{expr}\marg{pow} command is provided, which sets
-% \meta{expr} between parentheses and adjusts the positioning of the exponent \meta{pow}
-% slightly closer to the right parenthesis
-% \footnote{This macro gives bad results with normal-sized parenthesis.}.
+% To address this issue, the |\pow|\marg{expr}\marg{pow} command is provided
+% \footnote{This macro gives bad results with \emph{normal-sized} parenthesis.},
+% which sets the positioning of the exponent \meta{pow}
+% slightly closer to the right parenthesis.
% Compare:
-% \[ \e^a \sim\pow{1+\frac{a}{n}}{n} \txt{which may be better than}
-% \e^a \sim\left(1+\frac{a}{n}\right)^{n}.\]
+% \[ \e^a =\lim_{n \to +\infty}\pow{1+\frac{a}{n}}{n}
+% \txt{obtained with \texttt{\string \pow}, rather than}
+% \e^a =\lim_{n \to +\infty}\left(1+\frac{a}{n}\right)^{n}.\]
%
% \DescribeMacro{\abs}
% The correct typesetting of absolute value (or modular for a complex number) is achieved
@@ -964,16 +1038,18 @@
% \DescribeMacro{\lfrac}
% The |\lfrac| macro behaves like |\frac|
% but with thicker spaces around the arguments,
-% making the corresponding fraction bar slightly longer:\\[2ex]
-% \begin{minipage}{8cm}
-% \begin{verbatim}
-%\[ \lbar{Z} =
-% \lfrac{\lbar{z_1-z_2}}{\lbar{z_1+z_2}} \]
-% \end{verbatim}
-% \end{minipage}
-% \begin{minipage}{4cm}\vspace{-3ex}
-% \[ \lbar{Z} = \lfrac{\lbar{z_1-z_2}}{\lbar{z_1+z_2}} \]
-% \end{minipage}
+% making the corresponding fraction bar slightly longer. See the following examples:
+% \[ \lbar{Z} = \lfrac{\lbar{z_1-z_2}}{\lbar{z_1+z_2}} \qquad
+% u(x)= \lfrac{\frac{1-2x}{5}}{x^2+1} \qquad
+% y'+xy=\lfrac[4mu]{1}{\sqrt{x}}
+% \]
+%
+% This macro has an optional parameter |\lfrac|\oarg{space}\marg{num}\marg{denom}
+% to adjust the length of the fraction bar. The optional \meta{space} argument must be given
+% in \emph{math units} (\texttt{mu});
+% the default value is \texttt{7mu} (equivalent to |\:\,|),
+% \texttt{4mu} in the last example.
+% \hypertarget{ibrackets}{}
%
% \medskip
% \DescribeMacro{[ibrackets]}
@@ -984,17 +1060,14 @@
% To address this issue, we have redefined the brackets in the \textsf{ibrackets}
% package~\cite{BRACKET}.
% This one can be optionally
-% \footnote{This functionality is optional because there is a conflict
-% when using another command for open intervals with square brackets defined by
-% \texttt{\string \DeclarePairedDelimiter} from \textsf{mathtools}~\cite{TOOL}.}
% loaded by \textsf{mismath} using the \texttt{ibrackets} package option.
% Thus |$x\in ]-\pi,0[ \cup ]2\pi,3\pi[$|
% \begin{align*}
% \mbox{yields \ }
-% x\in ]-\otherpi, 0[ \cup ]2\otherpi, 3\otherpi[ & \mbox{\ with \textsf{ibrackets}}, \\
+% x\in ]-\pi, 0[ \cup ]2\pi, 3\pi[ & \mbox{\ with \textsf{ibrackets}}, \\
% \mbox{instead of \ }
-% x\in \mathclose{]}-\otherpi, 0 \mathopen{[} \cup
-% \mathclose{]} 2\otherpi, 3\otherpi \mathopen{[}
+% x\in \mathclose{]}-\pi, 0 \mathopen{[} \cup
+% \mathclose{]} 2\pi, 3\pi \mathopen{[}
% &\mbox{\ without \textsf{ibrackets}}.
% \end{align*}
%
@@ -1017,10 +1090,15 @@
% For instance |$[a,b] +[c,d]$| yields $[a,b] +[c,d]$
% but |$[a,b]+ [c,d]$| yields $[a, b]+ [c, d]$.
%
-% Besides, there are other approaches, for example the |\interval| macro
+% \medskip
+% Note that there are other ways to proceed,
+% for example with |\interval|,
% from the \textsf{interval} package~\cite{INT},
-% or |\DeclarePairedDelimiters| from the \textsf{mathtools} package~\cite{TOOL}
-% (but this command is incompatible with \textsf{ibrackets}).
+% or with |\DeclarePairedDelimiter|
+% \footnote{You cannot use \texttt{\string\DeclarePairedDelimiter} with square brackets
+% when \textsf{ibrackets} is loaded.}
+% from \mbox{\textsf{mathtools}}~\cite{TOOL}.
+% \hypertarget{decimalcomma}{}
%
% \medskip
%\DescribeMacro{[decimalcomma]}
@@ -1040,11 +1118,10 @@
% in particular when running through Lua\LaTeX, using \textsf{unicode-math}
% and calling |\setmathfont|.
% Therefore we propose the \textsf{decimalcomma} package~\cite{DEC},
-% functionally identical to that of \textsf{ncccomma} but with lighter code
-% and without the aforementioned incompatibility.
+% functionally identical to that of \textsf{ncccomma} but
+% without the aforementioned incompatibility.
% It can be loaded by \textsf{mismath} using the \texttt{decimalcomma}
-% package option\footnote{\texttt{ibrackets} and \texttt{decimalcomma} are the only
-% options specific to the \textsf{mismath} package.}.
+% package option.
%
% \subsection{Environments for systems of equations and small matrices}
%
@@ -1159,7 +1236,8 @@
%
% \DescribeEnv{mathcols}
% The \texttt{mathcols} environment allows you to arrange
-% ``long'' calculations in double columns, separated with a central rule,
+% lengthy calculations with short expressions across two columns
+% separated by a vertical line,
% as shown in the following example.
% However, to use this feature, the \textsf{multicol} package must be loaded in the preamble.
% The \texttt{mathcols} environment activates mathematical mode
@@ -1194,96 +1272,85 @@
% \end{verbatim}
%
% \vspace{-4ex}
-% \subsection{Old commands}
-%
-% Here is a summary table of old commands that were used until version 2.2.
-% These commands are still functional and will be maintained for the time being,
-% but a warning message indicates the new alternative.
-% They used to work only in the preamble, affecting the entire document globally,
-% and lacked an inverse switch.
-% These old commands can now be replaced by the more
-% versatile and powerful |\MathUp| macro, which can be used anywhere
-% in the document or preamble and has an inverse switch |\MathIt|.
-%
-% \begin{center}
+% \subsection{Summary of the package options}
+%
+% The following table summarizes the possible package options.
+% You can add to them any option you want to pass to \textsf{amsmath} or \textsf{mathtools}.
+% The hyperlinks (in blue) redirect to the paragraphs in the documentation
+% where these options are described.
+% \begin{center}
% \setlength{\extrarowheight}{1pt}
-% \begin{tabular}{ll}
+% \begin{tabular}{>{\ttfamily}ll}
% \hline
-% Old command & New alternative \\
+% \normalfont Option & \mbox{Effect} \\
% \hline
-% |\enumber| & |\MathUp{e}| \\
-% |\inumber| & |\MathUp{i}| \\
-% |\jnumber| & |\MathUp{j}| \\
-% |\PEupright| & |\MathProba{PE}| \\
+% \hyperlink{nofunction}{nofunction} & don't load some additional function definitions \\
+% \hyperlink{classicReIm}{otherReIm} & typesets |\Re| and |\Im| as $\Re$ and $\Im$ \\
+% \hyperlink{classicReIm}{classicReIm} & preserves |\Re| and |\Im| as $\oldRe$ and $\oldIm$ \\
+% \hyperlink{ibrackets}{ibrackets} & loads the \textsf{ibrackets} package\\
+% \hyperlink{decimalcomma}{decimalcomma} & loads the \textsf{decimalcomma} package \\
% \hline
% \end{tabular}
% \end{center}
-%
-% \medskip
-% You can also utilize |\MathNumbers| instead of |\MathUp| with an argument containing
-% all the constants you want to be typeset in roman (among `e, i, j').
-%
-% Additionally you can include V in the argument of |\MathProba| to refer to variance,
-% (or even use |\MathUp{P}\MathUp{E}|).
-%
-% \medskip
-% In version 2.3 we attempted to replace these old commands
-% with package options based on keyval. However, we found that this method was
-% less efficient and have decided to abandon it.
-% As a result, the command |\mismathset| is now obsolete.
-% Additionally, the command, |\paren|, which was used before version 2.0,
-% is no longer supported.
-%
% \StopEventually{}
% \section{Implementation}
%
% We load certain packages conditionally to avoid 'option clash' errors in cases
% where these packages have been previously loaded with other options.
+% The \textsf{amsmath} package is loaded by \textsf{mathtools}.
% \begin{macrocode}
\newif\ifmm@ibrackets % initialized to false
-\newif\ifmm@decimalcomma
\DeclareOption{ibrackets}{\mm@ibracketstrue}
+\newif\ifmm@decimalcomma
\DeclareOption{decimalcomma}{\mm@decimalcommatrue}
-\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{amsmath}}
+\newif\ifmm@nofunction
+\DeclareOption{nofunction}{\mm@nofunctiontrue}
+\newif\ifmm@otherReIm
+\DeclareOption{otherReIm}{\mm@otherReImtrue}
+\newif\ifmm@classicReIm
+\DeclareOption{classicReIm}{\mm@classicReImtrue}
+\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{mathtools}}
\ProcessOptions \relax
-\@ifpackageloaded{amsmath}{}{\RequirePackage{amsmath}}
+%\@ifpackageloaded{amsmath}{}{\RequirePackage{amsmath}}
\@ifpackageloaded{mathtools}{}{\RequirePackage{mathtools}}
\@ifpackageloaded{esvect}{}{\RequirePackage[b]{esvect}}
\RequirePackage{ifthen}
\RequirePackage{xparse} % provides \NewDocumentCommand, now in LaTeX3
-\RequirePackage{xspace}
+\RequirePackage{xspace} % for \iif command
\RequirePackage{iftex}
\RequirePackage{etoolbox} % provides \AtEndPreamble
-\RequirePackage{xkeyval}
+\RequirePackage{xkeyval} % for \pinumber options
% \end{macrocode}
%
% The package \textsf{unicode-math} causes some compatibility issues
-% with the options \texttt{ibrackets} or \texttt{decimalcomma}: the respective packages
+% with \textsf{ibrackets} and \textsf{decimalcomma}: theses packages
% must be loaded \emph{after} \textsf{unicode-math},
-% but \textsf{mismath} (like \textsf{amsmath}) must be loaded \emph{before}
+% but \textsf{mismath} (like \textsf{amsmath}) should be loaded \emph{before}
% \textsf{unicode-math}.
-% And to complicate matters, \textsf{unicode-math} defines all its commands
+% And to complicate matters, \mbox{\textsf{unicode-math}} defines all its commands
% by |\AtBeginDocument|.
-% Therefore we used the command |\AtBeginDocument| within
-% |\AtEndPreamble| (from the \textsf{etoolbox} package).
+% Therefore we used the command |\AtEndPreamble|, from the \textsf{etoolbox} package,
+% which makes the job (because both \textsf{ibrackets} and \textsf{decimalcomma}
+% work also in |\AtBeginDocument|).
%
% Moreover the command |\mathbfsfit| (used for tensors) is already defined
% in \textsf{unicode-math} and will not be redefined if \textsf{unicode-math}
% is loaded.
% \begin{macrocode}
+\@ifpackageloaded{unicode-math}{
+ \PackageWarningNoLine{mismath}{The package unicode-math\MessageBreak
+ should be loaded after mismath}
+}{}
\newif\ifmm@unicodemath
\newif\ifmm@multicol
\AtEndPreamble{% necessary to work with unicode-math
- \@ifpackageloaded{multicol}{\mm@multicoltrue}{\mm@multicolfalse}
+ \ifmm@decimalcomma\RequirePackage{decimalcomma}\fi
+ \ifmm@ibrackets\RequirePackage{ibrackets}\fi
+ \@ifpackageloaded{multicol}{\mm@multicoltrue}{}
\@ifpackageloaded{unicode-math}{\mm@unicodemathtrue}{
- \mm@unicodemathfalse
\DeclareMathAlphabet{\mathbfsfit}{\encodingdefault}%
{\sfdefault}{bx}{it}}
- \AtBeginDocument{% necessary to work with unicode-math
- \ifmm@ibrackets\RequirePackage{ibrackets}\fi
- \ifmm@decimalcomma\RequirePackage{decimalcomma}\fi
- }
}
% \end{macrocode}
@@ -1299,7 +1366,6 @@
% \end{macrocode}
%
-% \medskip
% \DescribeMacro{\mm@warning} \DescribeMacro{\mm@macro} \DescribeMacro{\mm@operator}
% The next three internal macros serve as meta commands for
% conditionally defining macros while providing a warning message if the macro already exists.
@@ -1307,8 +1373,8 @@
% \medskip
% \begin{macrocode}
\newcommand\mm@warning[1]{
- \PackageWarningNoLine{mismath}{
- Command \bslash #1 already exist and will not be redefined}
+ \PackageWarningNoLine{mismath}{Command \bslash #1 already exist
+ \MessageBreak and will not be redefined}
}
\newcommand\mm@macro[2]{
\@ifundefined{#1}{
@@ -1336,7 +1402,7 @@
% \begin{macrocode}
\@ifundefined{mathup}{
\providecommand*{\mathup}[1]{{\operatorfont #1}}
- }{\mm@warning{mathup} } % also in kpfonts (and unicode-math)
+ }{\mm@warning{mathup} } % also in kpfonts and unicode-math
\mm@macro{e}{\mathup{e}}
\AtBeginDocument{\let\oldi\i \let\oldj\j
\renewcommand{\i}{\TextOrMath{\oldi}{\mathup{i}}}
@@ -1443,11 +1509,8 @@
% and may not have a straightforward solution.
%
% \medskip
-% In addition to |\MathUp| and |\MathIt|, we also offer the following two commands
-% to set a group of letters in roman typeface: one for for mathematical constants,
-% among `e, i, j', and the other for probability operators, among or `P, E, V'.
-%
-% \medskip
+% In addition to |\MathUp| and |\MathIt|, we also offer the following command
+% to set a group of letters, among `e, i, j', in roman typeface.
% \begin{macrocode}
\newcommand*\MathNumbers[1]{%
\in@{e}{#1} \ifin@ \MathUp{e} \fi
@@ -1455,12 +1518,6 @@
\in@{j}{#1} \ifin@ \MathUp{j} \fi
}
-\newcommand*\MathProba[1]{%
- \in@{P}{#1} \ifin@ \MathUp{P} \fi
- \in@{E}{#1} \ifin@ \MathUp{E} \fi
- \in@{V}{#1} \ifin@ \MathUp{V} \fi
-}
-
% \end{macrocode}
% \DescribeMacro{\apply}
% With the inverse switch |\MathNormal|, you can apply the normal (italic) style
@@ -1471,7 +1528,7 @@
% I discovered this powerfull macro on \texttt{iterate190.rssing.com} by searching for
% ``TeX How to iterate over a comma separated list''.
% The answer was posted under the pseudonym `wipet' on 2021/02/26.
-% Let its author, Petr Ol\v sák, be thanked.
+% Let its author, Petr Ol\v{s}ák, be thanked.
% This macro allows to accomplish tasks that
% usual loop instructions like |\@for| or |\foreach| cannot achieve due to
% errors like ``!~Improper alphabetic constant''.
@@ -1496,44 +1553,24 @@
% They were intended to set some letters in upright shape
% in math mode, but only worked in the preamble.
% This is now managed by the more powerful |\MathUp| command, and
-% the old commands are maintained for compatibility reasons.
+% the old commands are maintained but as alias for |\MathUp|.
% \medskip
%
% \begin{macrocode}
-\newcommand{\enumber}{%
- \PackageWarning{mismath}{Old command \string\enumber\space
- is used. \MessageBreak
- It can be replaced by \string\MathUp{e}}
- \MathUp{e}
-}
-\newcommand{\inumber}{%
- \PackageWarning{mismath}{Old command \string\inumber\space
- is used. \MessageBreak
- It can be replaced by \string\MathUp{i}}
- \MathUp{i}
-}
-\newcommand{\jnumber}{
- \PackageWarning{mismath}{Old command \string\jnumber\space
- is used. \MessageBreak
- It can be replaced by \string\MathUp{j}}
- \MathUp{j}
-}
-\newcommand{\PEupright}{
- \PackageWarning{mismath}{Old command \string\PEupright\space
- is used. \MessageBreak
- It can be replaced by \string\MathProba{PE}}
- \MathUp{P}\MathUp{E}
-}
+\newcommand{\enumber}{\MathUp{e}}
+\newcommand{\inumber}{\MathUp{i}}
+\newcommand{\jnumber}{\MathUp{j}}
% \end{macrocode}
%
-% Obtaining an upright Greek letter $\otherpi$ must be handled differently.
+% Obtaining an upright Greek letter $\pi$ must be handled differently.
% The switches are called |\pinumber| and |\pinormal|
% and can be used anywhere in the document.
%
% But |\pinumber| must be called first in the preamble with an optional argument.
% This argument can be a valid command name that produces an upright pi letter
% (after having loading an appropriate package).
+% Compatibility with \textsf{unicode-math} is a bit tricky!
% When given without an argument in the preamble,
% |\pinumber| uses an LGR font encoding called \texttt{lmr}.
% A new feature (v2.11) is to use |\pinumber| with a keyval option to
@@ -1541,129 +1578,130 @@
% a whole package, thus without altering the other (italic) Greek letters.
% We achieve this with |\DeclareSymbolFont| and |\DeclareMathSymbol|.
% We just have to know the ``name'' of the desired symbol font.
-% Compatibility with \textsf{unicode-math} is a bit tricky!
%
% \medskip
% \begin{macrocode}
\newif\ifmm@lgr
-\define@cmdkey{pinumber}[mm@]{lgrmath}[lmr]{\mm@lgrtrue}
+\define@cmdkey{pifonts}[mm@]{lgrmath}[lmr]{\mm@lgrtrue}
\newif\ifmm@upgreek
-\define@choicekey{pinumber}{upgreek}[\mm@upgreek@option]%
- {Euler,Symbol,Symbolsmallscale}[Symbol]{\mm@upgreektrue}
+\define@choicekey{pifonts}{upgreek}[\mm@upgreek@option]%
+ {Euler,Symbol,Symbolsmallscale}[Symbol]{\mm@upgreektrue}
\newif\ifmm@mathdesign
-\define@choicekey{pinumber}{mathdesign}[\mm@mathdesign@option]%
- {Utopia,Garamond,Charter}[Charter]{\mm@mathdesigntrue}
+\define@choicekey{pifonts}{mathdesign}[\mm@mathdesign@option]%
+ {Utopia,Garamond,Charter}[Charter]{\mm@mathdesigntrue}
\newif\ifmm@kpfonts
-\define@choicekey{pinumber}{kpfonts}[\mm@kp@option]%
- {normal,light}[normal]{\mm@kpfontstrue}
-\define@boolkey{pinumber}[mm@]{fourier}[true]{}
-\define@boolkey{pinumber}[mm@]{pxfonts}[true]{}
-\define@boolkey{pinumber}[mm@]{txfonts}[true]{}
+\define@choicekey{pifonts}{kpfonts}[\mm@kp@option]%
+ {normal,light}[normal]{\mm@kpfontstrue}
+\define@boolkeys{pifonts}[mm@]{fourier,pxfonts,txfonts}[true]
+\newif\ifmm@fontspec
+\define@cmdkey{pifonts}[mm@]{fontspec}[GFS Didot]{\mm@fontspectrue}
-\newcommand*\pinumber[1][]{%
- \ifthenelse{\equal{#1}{}}{% no argument given
- \ifx\@onlypreamble\@notprerr % not in preamble
- \@ifundefined{savedpi}{
- \PackageWarning{mismath}{%
- \string\pinumber\space
- must be used in the preamble first}
- }{\let\pi\savedpi}
- \else % in the preamble
- \AtBeginDocument{\let\itpi\pi}% must be here with unicode-math
- \AtEndPreamble{\AtBeginDocument{
- %\let\itpi\pi
- \let\pi\relax
- \DeclareFontEncoding{LGR}{}{}
- \DeclareSymbolFont{mm@grup}{LGR}{lmr}{m}{n}
- \DeclareMathSymbol{\pi}\mathalpha{mm@grup}{"70}
- \let\savedpi\pi
- }}
- \fi
- }{% command name or keyval options, necessarily in the preamble
- \AtBeginDocument{\let\itpi\pi}% must be here with unicode-math
- \AtEndPreamble{\AtBeginDocument{
- \@ifundefined{#1}{%
- \setkeys{pinumber}{#1}
- \let\pi\relax
- \ifmm@lgr
- \DeclareFontEncoding{LGR}{}{}
- \DeclareSymbolFont{mm@grup}{LGR}{\mm@lgrmath}{m}{n}
- % may work with bold (b) instead of m
- \DeclareMathSymbol{\pi}{\mathalpha}{mm@grup}{112}
-
- \else\ifmm@upgreek
- \ifdefstring{\mm@upgreek@option}{Euler}{
+\newcommand*\pifonts[1]{%
+ \setkeys{pifonts}{#1}
+ \let\pi\relax
+
+ \ifmm@lgr
+ \DeclareFontEncoding{LGR}{}{}
+ \DeclareSymbolFont{mmupgr}{LGR}{\mm@lgrmath}{m}{n}
+ % may work with bold (b) instead of m
+ \DeclareMathSymbol{\pi}{\mathord}{mmupgr}{112}
+
+ \else\ifmm@fontspec
+ \@ifpackageloaded{fontspec}{}{
+ \PackageError{mismath}{\string\pinumber\space with
+ the `fontspec' option\MessageBreak
+ needs the fontspec package,\MessageBreak
+ which must be run with LuaLaTeX or XeLaTeX}{}
+ }
+ \newfontfamily\mismathgreekfont{\mm@fontspec}[NFSSFamily=mgr]
+ \DeclareSymbolFont{mmupgr}{TU}{mgr}{m}{n}
+ \Umathchardef\pi="7 \symmmupgr "03C0
+
+ \else\ifmm@upgreek
+ \ifdefstring{\mm@upgreek@option}{Euler}{
\DeclareFontFamily{U}{eur}{\skewchar\font'177}
\DeclareFontShape{U}{eur}{m}{n}{%
<-6> eurm5 <6-8> eurm7 <8-> eurm10}{}
- \DeclareFontShape{U}{eur}{b}{n}{%
- <-6> eurb5 <6-8> eurb7 <8-> eurb10}{}
- \DeclareSymbolFont{mm@grup}{U}{eur}{m}{n}
- \DeclareMathSymbol{\pi}{\mathord}{mm@grup}{"19} % 25
- }{
- \ifdefstring{\mm@upgreek@option}{Symbol}{
- \DeclareSymbolFont{mm@grup}{U}{psy}{m}{n}
- \DeclareMathSymbol{\pi}{\mathord}{mm@grup}{`p}
- }{
- \ifdefstring{\mm@upgreek@option}{Symbolsmallscale}{
+ \DeclareSymbolFont{mmupgr}{U}{eur}{m}{n}
+ \DeclareMathSymbol{\pi}{\mathord}{mmupgr}{"19}
+ }{
+ \ifdefstring{\mm@upgreek@option}{Symbol}{
+ \DeclareSymbolFont{mmupgr}{U}{psy}{m}{n}
+ \DeclareMathSymbol{\pi}{\mathord}{mmupgr}{`p}
+ }{
+ \ifdefstring{\mm@upgreek@option}{Symbolsmallscale}{
\DeclareFontFamily{U}{fsy}{}
\DeclareFontShape{U}{fsy}{m}{n}{<->s*[.9]psyr}{}
- \DeclareSymbolFont{mm@grup}{U}{fsy}{m}{n}
- \DeclareMathSymbol{\pi}{\mathord}{mm@grup}{`p}
- }{}}}
+ \DeclareSymbolFont{mmupgr}{U}{fsy}{m}{n}
+ \DeclareMathSymbol{\pi}{\mathord}{mmupgr}{`p}
+ }{}}}
- \else\ifmm@mathdesign
- \ifdefstring{\mm@mathdesign@option}{Utopia}{
- \DeclareSymbolFont{mm@grup}{OML}{mdput}{m}{n}
- }{
- \ifdefstring{\mm@mathdesign@option}{Garamond}{
- \DeclareSymbolFont{mm@grup}{OML}{mdugm}{m}{n}
- }{
- \ifdefstring{\mm@mathdesign@option}{Charter}{
- \DeclareSymbolFont{mm@grup}{OML}{mdbch}{m}{n}
- }{}}}
+ \else\ifmm@mathdesign
+ \ifdefstring{\mm@mathdesign@option}{Utopia}{
+ \DeclareSymbolFont{mmupgr}{OML}{mdput}{m}{n}
+ }{
+ \ifdefstring{\mm@mathdesign@option}{Garamond}{
+ \DeclareSymbolFont{mmupgr}{OML}{mdugm}{m}{n}
+ }{
+ \ifdefstring{\mm@mathdesign@option}{Charter}{
+ \DeclareSymbolFont{mmupgr}{OML}{mdbch}{m}{n}
+ }{}}}
- \else\ifmm@fourier
- \DeclareFontEncoding{FML}{}{}
- \DeclareSymbolFont{mm@grup}{FML}{futm}{m}{it}
-
- \else\ifmm@kpfonts
- \ifdefstring{\mm@kp@option}{normal}{
- \DeclareSymbolFont{mm@grup}{U}{jkpmia}{m}{it}
- }{
- \ifdefstring{\mm@kp@option}{light}{
- \DeclareSymbolFont{mm@grup}{U}{jkplmia}{m}{it}
- }}
-
- \else\ifmm@pxfonts
- \DeclareSymbolFont{mm@grup}{U}{pxmia}{m}{it}
-
- \else\ifmm@txfonts
- \DeclareSymbolFont{mm@grup}{U}{txmia}{m}{it}
- \fi\fi\fi\fi\fi
-
- \DeclareMathSymbol{\pi}{\mathord}{mm@grup}{"19}
- \fi\fi
-
- \let\savedpi\pi
+ \else\ifmm@fourier
+ \DeclareFontEncoding{FML}{}{}
+ \DeclareSymbolFont{mmupgr}{FML}{futm}{m}{it}
+
+ \else\ifmm@kpfonts
+ \ifdefstring{\mm@kp@option}{normal}{
+ \DeclareSymbolFont{mmupgr}{U}{jkpmia}{m}{it}
}{
- \ifmm@unicodemath
- \ifthenelse{\equal{#1}{uppi}}{
- \AtBeginDocument{%
- \let\pi\relax
- \def\pi{\symup{\symbol{"003C0}}}
- \let\itpi\relax
- \def\itpi{\symit{\symbol{"003C0}}} % or "1D70B
- }
- }{\renewcommand{\pi}{\csname #1\endcsname}}
- \else
- \renewcommand{\pi}{\csname #1\endcsname}
- \fi
-
- \let\savedpi\pi
- }
- }}
- }
+ \ifdefstring{\mm@kp@option}{light}{
+ \DeclareSymbolFont{mmupgr}{U}{jkplmia}{m}{it}
+ }{}}
+
+ \else\ifmm@pxfonts
+ \DeclareSymbolFont{mmupgr}{U}{pxmia}{m}{it}
+
+ \else\ifmm@txfonts
+ \DeclareSymbolFont{mmupgr}{U}{txmia}{m}{it}
+
+ \fi\fi\fi\fi\fi
+ \DeclareMathSymbol{\pi}{\mathord}{mmupgr}{"19}
+ \fi\fi\fi
+}
+
+\newcommand*\pinumber[1][]{%
+ \ifthenelse{\equal{#1}{}}{% no argument given
+ \ifx\@onlypreamble\@notprerr % not in preamble
+ \@ifundefined{savedpi}{
+ \PackageWarning{mismath}{%
+ \string\pinumber\space
+ must be used in the preamble first}
+ }{\let\pi\savedpi}
+ \else % in the preamble
+ \AtBeginDocument{
+ \let\itpi\pi
+ \pifonts{lgrmath}
+ \let\savedpi\pi
+ }
+ \fi
+ }{% command name or keyval options, necessarily in the preamble
+ \AtBeginDocument{% must be here with unicode-math
+ \let\itpi\pi
+ \@ifundefined{#1}{%
+ \pifonts{#1}
+ }{
+ \ifmm@unicodemath
+ \ifthenelse{\equal{#1}{uppi}}{% or "1D70B
+ \renewcommand\pi{\symup{\symbol{"03C0}}}
+ \renewcommand\itpi{\symit{\symbol{"03C0}}}
+ }{\renewcommand{\pi}{\csname #1\endcsname}}
+ \else
+ \renewcommand{\pi}{\csname #1\endcsname}
+ \fi
+ }
+ \let\savedpi\pi}
+ }
}
\newcommand{\pinormal}{%
@@ -1683,8 +1721,29 @@
}
% \end{macrocode}
+% When |\pinumber|\oarg{keyval} has been called, you can also get
+% some other mathematical constants using Greek letters,
+% \eg $\othergamma$, the Euler-Mascheroni constant:
+% \begin{verbatim}
+% \let\gamma\relax
+% \DeclareMathSymbol{\gamma}{\mathord}{mmupgr}{"0D}
+% \end{verbatim}
+% \vspace{-2ex}
+% If \textsf{unicode-math} is used, you must put these commands in
+% |\AtBeginDocument|.
+% The hexadecimal code |"0D| depends on the option passed to |\pinumber|
+% in the preamble (see the command |\pifonts| above and search in package docs). \\
+% And to get the golden ratio $\othervarphi$:
+% \begin{verbatim}
+% \let\phi\relax
+% \DeclareMathSymbol{\varphi}{\mathord}{mmupgr}{"27}
+% \end{verbatim}
+% \vspace{-2ex}
+% To preserve the original $\gamma$ or $\varphi$,
+% you can define |\upgamma| or |\upvarphi| instead.
%
-% And now the commands for vectors (and tensors).
+% \medskip
+% And now the commands for vectors and tensors.
% \medskip
% \begin{macrocode}
\newboolean{arrowvect}
@@ -1693,9 +1752,9 @@
\newcommand{\boldvect}{\setboolean{arrowvect}{false}}
\newcommand{\boldvectcommand}{\boldsymbol} % from amsbsy package
\mm@macro{vect}{\ifthenelse{\boolean{arrowvect}}{
- \vv}{\boldvectcommand}} % doesn't work well with \if... \fi
-\newcommand*{\hvect}[1]{\vect{\vphantom{t}#1}}
-\newcommand*{\hvec}[1]{\vec{\vphantom{t}#1}}
+ \vv}{\boldvectcommand}} % doesn't work well with \if... \fi
+\newcommand*{\hvect}[1]{\vect{\vphantom{A}#1}}
+\newcommand*{\hvec}[1]{\vec{\vphantom{A}#1}}
\newcommand*{\@norm}[1]{
\mbox{\raisebox{1.75pt}{\small$\bigl\Vert$}} #1
@@ -1715,9 +1774,7 @@
\newcommand{\tensor}{\mathbfsfit} % isomath uses \mathsfbfit
% \end{macrocode}
-%
-% Classic identifiers are presented below.
-% \medskip
+
% \begin{macrocode}
\mm@macro{di}{\mathop{}\!\mathup{d}}
\newcommand\probastyle{}
@@ -1726,62 +1783,121 @@
\mm@macro{E}{\operatorname{\probastyle{E}}}
\mm@macro{V}{\operatorname{\probastyle{V}}}
-\mm@operator{\adj}{adj}
-\mm@operator{\Aut}{Aut}
-\mm@operator{\codim}{codim}
-\mm@operator{\Conv}{Conv}
-\mm@operator{\cov}{cov}
-\mm@operator{\Cov}{Cov}
-\mm@macro{curl}{\operatorname{\vect{\mathup{curl}}}}
-\mm@operator[divg]{\divg}{div}
-\mm@operator{\End}{End}
+\newcommand*\MathProba[1]{%
+ \in@{P}{#1} \ifin@ \MathUp{P} \fi
+ \in@{E}{#1} \ifin@ \MathUp{E} \fi
+ \in@{V}{#1} \ifin@ \MathUp{V} \fi
+}
-\mm@operator{\erf}{erf}
-\mm@macro{grad}{\operatorname{\vect{\mathup{grad}}}}
-\mm@operator{\id}{id} % mathop or mathord?
-\mm@operator{\Id}{Id}
-\mm@operator{\im}{im}
-\let\oldIm\Im \renewcommand{\Im}{\operatorname{Im}}
-\mm@operator{\lb}{lb}
-\mm@operator{\lcm}{lcm}
+% \end{macrocode}
+% Classic identifiers are presented below. They will be defined only
+% if the option \texttt{nofunction} has not been activated.
+% \medskip
+% \begin{macrocode}
+\ifmm@nofunction\else
+ \mm@operator{\adj}{adj}
+ \mm@operator{\Aut}{Aut}
+ \mm@operator{\codim}{codim}
+ \mm@operator{\coker}{coker}
+ \mm@operator{\Conv}{Conv}
+ \mm@operator{\cov}{cov}
+ \mm@operator{\Cov}{Cov}
+ \mm@macro{curl}{\operatorname{\vect{\mathup{curl}}}}
+ \mm@operator[divg]{\divg}{div}
+
+ \mm@operator{\End}{End}
+ \mm@operator{\erf}{erf}
+ \mm@macro{grad}{\operatorname{\vect{\mathup{grad}}}}
+ \mm@operator{\id}{id} % mathop or mathord?
+ \mm@operator{\Id}{Id}
+ \mm@operator{\im}{im}
+ \mm@operator{\lb}{lb}
+ \mm@operator{\lcm}{lcm}
+ \mm@operator{\rank}{rank}
+
+ \mm@operator{\Res}{Res}
+ \mm@macro{rot}{\operatorname{\vect{\mathup{rot}}}}
+ \mm@operator{\sgn}{sgn}
+ \mm@operator{\sinc}{sinc}
+ \mm@operator[spa]{\spa}{span}
+ \mm@operator{\tr}{tr}
+ \mm@operator{\var}{var}
+ \mm@operator{\Var}{Var}
+ \mm@operator[Zu]{\Zu}{Z}
+
+ \mm@operator{\arccot}{arccot}
+ \mm@operator{\sech}{sech}
+ \mm@operator{\csch}{csch}
+ \mm@operator{\arsinh}{arsinh}
+ \mm@operator{\arcosh}{arcosh}
+ \mm@operator{\artanh}{artanh}
+ \mm@operator{\arcoth}{arcoth}
+ \mm@operator{\arsech}{arsech}
+ \mm@operator{\arcsch}{arcsch}
+\fi
-\mm@operator{\rank}{rank}
-\let\oldRe\Re \renewcommand{\Re}{\operatorname{Re}}
-\mm@macro{rot}{\operatorname{\vect{\mathup{rot}}}}
-\mm@operator{\sgn}{sgn}
-\mm@operator{\sinc}{sinc}
-\mm@operator[spa]{\spa}{span}
-\mm@operator{\tr}{tr}
-\mm@operator{\var}{var}
-\mm@operator{\Var}{Var}
-\mm@operator[Zu]{\Zu}{Z}
+% \end{macrocode}
+%
+% The |\mathcal| alphabet, from the original Computer Modern font family,
+% is used here to produce $\Re$, $\Im$ and $\bigO$.
+% Several font packages redefines this alphabet producing glyphs that may seem less
+% suitable for the commands below.
+% We have therefore retained the original |\cmmathcal| math alphabet,
+% which can be used for other letters.
+% If \textsf{unicode-math} is called, it will redefine the commands |\Re| and |\Im|
+% in |\AtBeginDocument|, hence the use of `|\AtEndPreamble{\AtBeginDocument{|'
+% to ensure that the \textsf{mismath} redefinition occur after the actions
+% of \textsf{unicode-math}.
+%
+% \begin{macrocode}
+\DeclareFontFamily{U}{cmsy}{\skewchar\font48 }
+\DeclareFontShape{U}{cmsy}{m}{n}{% from mathalpha
+ <-5.5> cmsy5%
+ <5.5-6.5> cmsy6%
+ <6.5-7.5> cmsy7%
+ <7.5-8.5> cmsy8%
+ <8.5-9.5> cmsy9%
+ <9.5-> cmsy10}{}
+\DeclareMathAlphabet{\cmmathcal}{U}{cmsy}{m}{n}
-\mm@operator{\arccot}{arccot}
-\mm@operator{\sech}{sech}
-\mm@operator{\csch}{csch}
-\mm@operator{\arsinh}{arsinh}
-\mm@operator{\arcosh}{arcosh}
-\mm@operator{\artanh}{artanh}
-\mm@operator{\arcoth}{arcoth}
-\mm@operator{\arsech}{arsech}
-\mm@operator{\arcsch}{arcsch}
+\AtEndPreamble{\AtBeginDocument{
+ \ifmm@classicReIm\else
+ \let\oldRe\Re
+ \let\oldIm\Im
+ \ifmm@otherReIm
+ \renewcommand{\Re}{\cmmathcal{R}\mathit{e}}
+ \renewcommand{\Im}{\cmmathcal{I}\mathit{m}}
+ \else
+ \renewcommand{\Re}{\operatorname{Re}}
+ \renewcommand{\Im}{\operatorname{Im}}
+ \fi\fi
+}}
-\mm@operator[bigO]{\bigO}{\mathcal{O}}
+\mm@operator[bigO]{\bigO}{\cmmathcal{O}}
\mm@operator[bigo]{\bigo}{O}
\mm@operator[lito]{\lito}{o}
% \end{macrocode}
% And finally we present the remaining macros.
%
-% With Cyrillic languages, the command |\C| may already be defined (only for text mode).
-% Thus, it will not be redefined by \textsf{mismath}. However, one may still want
-% to use our |\C| macro only for math mode without interfering the definition of
-% the text |\C|, therefore the |\onlymathC| macro.
+% With Cyrillic languages, the command |\C| may already be defined but only for text mode.
+% Thus, it will not be redefined by \textsf{mismath}. However, when activating
+% |\onlymathC|, you can to use our |\C| macro only for math mode,
+% without interfering the definition of the text |\C| that is already defined.
+%
+% When using \XeTeX\ or \LuaTeX\ engines with the \textsf{hyperref} package,
+% |\C| will be already defined and
+% you get the message "\texttt{Command \string\C\space unavailable in encoding TU}".
+% Therefore |\onlymathC| is automatically called in that case.
% \medskip
% \begin{macrocode}
\mm@macro{mathset}{\mathbf}
\mm@macro{R}{\mathset{R}}
-\mm@macro{C}{\mathset{C}}
+\AtBeginDocument{
+ \@ifpackageloaded{hyperref}%
+ {\iftutex\onlymathC\fi}% LuaTex or XeTeX engines
+ {\mm@macro{C}{\mathset{C}}}
+}
\providecommand\onlymathC{\let\oldC\C
\renewcommand{\C}{\TextOrMath{\oldC}{\mathset{C}}} }
\mm@macro{N}{\mathset{N}}
@@ -1799,7 +1915,7 @@
\mm@macro{lbar}{\overline}
\@ifundefined{hlbar}{
- \providecommand*{\hlbar}[1]{\overline{\vphantom{t}#1}}}{
+ \providecommand*{\hlbar}[1]{\overline{\vphantom{A}#1}}}{
\mm@warning{hlbar} }
\newcommand\@eqdef{\stackrel{\mathup{def}}{=}}
\newcommand\@@eqdef{\stackrel{\mathrm{\Delta}}{=}}
@@ -1827,7 +1943,8 @@
\providecommand*{\abs}[1]{\left\vert#1\right\vert} }{
\mm@warning{abs} }
\@ifundefined{lfrac}{
- \providecommand*{\lfrac}[2]{\frac{\;#1\;}{\;#2\;}} }{
+ \providecommand*{\lfrac}[3][7mu]{%
+ \frac{\mkern#1#2\mkern#1}{\mkern#1#3\mkern#1}} }{
\mm@warning{lfrac} }
\newcommand{\systemstretch}{1.2}
@@ -1850,8 +1967,8 @@
\begin{math}\begin{aligned}\displaystyle
\else
\PackageError{mismath}{The mathcols environment
- needs the multicol package}{Add the package multicol
- to your preamble.}
+ needs the multicol package}{Call the package multicol
+ in your preamble.}
\fi
}{%
\end{aligned}\end{math} \hfill\mbox{}
@@ -1864,7 +1981,7 @@
}
% \end{macrocode}
%
-% \begin{thebibliography}{28}
+% \begin{thebibliography}{34}
% \begin{raggedright}
% \bibitem{TYPMA} \emph{Typesetting mathematics for science and technology according
% to ISO 31/XI}, Claudio Beccari, TUGboat Volume 18 (1997), No.~1.
@@ -1880,31 +1997,43 @@
% \url{https://old.iupac.org/standing/idcns/italic-roman_dec99.pdf}.
% \bibitem{VECT} \emph{\textsf{esvect} -- Typesetting vectors with beautiful
% arrow with \LaTeXe}, Eddie Saudrais, CTAN, v1.3 2013/07/11.
+% \bibitem{TOOL} \emph{The \textsf{mathtools} package}, Morten Høgholm, Lars Madsen, CTAN,
+% v1.29 2022/06/29.
% \bibitem{AMS} \emph{\textsf{amsmath} -- \AmS\ mathmatical facilities for \LaTeX},
% Frank Mittelbach, Rainer Schöpf, Michael Downes, Davis M.~Jones, David Carlisle,
% CTAN, v2.17n 2022/04/08.
% \bibitem{UNIC} \emph{Experimental Unicode mathematical typesetting:
% The \textsf{unicode-math} package}, Will Robertson, Philipp Stephani, Joseph Wright,
% Khaled Hosny, and others, CTAN, v0.8r 2023/08/13.
-% \bibitem{TOOL} \emph{The \textsf{mathtools} package}, Morten Høgholm, Lars Madsen, CTAN,
-% v1.29 2022/06/29.
% \bibitem{FIXM} \emph{The \textsf{fixmath} package for \LaTeXe}, Walter Schmidt,
% CTAN, v0.9 2000/04/11.
% \bibitem{ISOM} \emph{\textsf{isomath} -- Mathematical style for science and technology},
% Günter Milde, CTAN, v0.6.1 2012/09/04.
% \bibitem{PMISO} \emph{\textsf{PM-ISOmath}, The Poor Man ISO math bundle},
% the \textsf{pm-isomath} package by Claudio Beccari, CTAN, v1.2.00 2021/08/04.
+% \bibitem{MGREEK} \emph{The \textsf{mathgreeks} package}, Antoine Missier, CTAN,
+% v1.1 2024/05/04.
% \bibitem{GREEK} \emph{The \textsf{upgreek} package for \LaTeXe}, Walter Schmidt,
% CTAN, v2.0 2003/02/12.
% \bibitem{DESIGN} \emph{The \textsf{mathdesign} package},
% Paul Pichaureau, CTAN, v2.31 2013/08/29.
-% \bibitem{ALPHA} \emph{The \textsf{textalpha} package}
-% (part of the \textsf{greek-fontenc} bundle), Günter Milde, CTAN, v2.1 14/06/2022.
% \bibitem{KPF} \emph{\textsf{Kp-Fonts} -- The Johannes Kepler project},
% Christophe Caignaert, CTAN, v3.34 20/09/2022.
% \bibitem{FOUR} \textsf{Fourier-GUT\hspace{-0.1em}\emph{enberg}},
-% Michel Bovani, CTAN, v1.3 30/01/2005.
+% Michel Bovani, CTAN, v1.3 2005/01/30.
+% \bibitem{PX} \emph{\textsf{PX Fonts} -- Palatino-like fonts in support of mathematics},
+% Young Ryu, CTAN, 2000/12/14.
+% \bibitem{TX} \emph{\textsf{TX Fonts} -- Times-like fonts in support of mathematics},
+% Young Ryu, CTAN, 2000/12/15.
+% \bibitem{LIB} \emph{The LibertinusT1 Math Package}, Michael Sharpe, CTAN, v2.0.4 2024/01/14.
% \bibitem{LGR} \emph{The \textsf{lgrmath} package}, Jean-François B., CTAN, v1.0 2022/11/16.
+% \bibitem{NTX} \emph{New TX font package}, Micahel Sharpe, CTAN, v1.735 2024/03/01.
+% \bibitem{ALPHA} \emph{The \textsf{textalpha} package}
+% (part of the \textsf{greek-fontenc} bundle), Günter Milde, CTAN, v2.1 2022/06/14.
+% \bibitem{SPA} \emph{The \textsf{spacingtricks} package}, Antoine Missier, CTAN,
+% v1.8 2023/12/06.
+% \bibitem{BRACKET} \emph{Intelligent brackets -- The \textsf{ibrackets} package},
+% Antoine Missier, CTAN, v1.2, 2023/07/26.
% \bibitem{INT} \emph{The \textsf{interval} package}, Lars Madsen, CTAN,
% v0.4 2019/03/06.
% \bibitem{ICOMMA} \emph{The \textsf{icomma} package for \LaTeXe},
@@ -1918,9 +2047,7 @@
% \bibitem{SPAL} \emph{The \textsf{spalign} package}, Joseph Rabinoff, CTAN, 2016/10/05.
% \bibitem{NMATX} \emph{The package \textsf{nicematrix}}, François Pantigny, CTAN,
% v6.14 2023/02/18.
-% \bibitem{FR} \emph{L'extension \textsf{frenchmath}}, Antoine Missier, CTAN, v2.10 2024/02/25.
-% \bibitem{BRACKET} \emph{Intelligent brackets -- The \textsf{ibrackets} package},
-% Antoine Missier, CTAN, v1.2, 2023/07/26.
+% \bibitem{FR} \emph{L'extension \textsf{frenchmath}}, Antoine Missier, CTAN, v3.0 2024/05/04.
% \bibitem{LSHORT} \emph{The Not So Short Introduction to \LaTeXe},
% the \textsf{lshort} package by
% Tobias Oetiker, Hubert Partl, Irene Hyna and Elisabeth Schlegl, CTAN, v6.4 2021/04/09.
diff --git a/macros/latex/contrib/mismath/mismath.ins b/macros/latex/contrib/mismath/mismath.ins
index b57ee6b828..5a39f8da29 100644
--- a/macros/latex/contrib/mismath/mismath.ins
+++ b/macros/latex/contrib/mismath/mismath.ins
@@ -46,7 +46,7 @@ and version 1.3 or later is part of all distributions of LaTeX version
\Msg{* mismath.sty *}
\Msg{* *}
\Msg{* To produce the documentation run the file mismath.dtx *}
-\Msg{* through XeLaTeX or LuaLaTeX. *}
+\Msg{* through LaTeX. *}
\Msg{* *}
\Msg{* Happy TeXing! *}
\Msg{* *}
diff --git a/macros/latex/contrib/mismath/mismath.pdf b/macros/latex/contrib/mismath/mismath.pdf
index 5b97173faa..fd41e6702c 100644
--- a/macros/latex/contrib/mismath/mismath.pdf
+++ b/macros/latex/contrib/mismath/mismath.pdf
Binary files differ
diff --git a/macros/latex/contrib/msu-thesis/README.md b/macros/latex/contrib/msu-thesis/README.md
index 31d83c056a..8e706e6de9 100644
--- a/macros/latex/contrib/msu-thesis/README.md
+++ b/macros/latex/contrib/msu-thesis/README.md
@@ -1,4 +1,4 @@
-# MSU Thesis Class Version 4.2 2024/02/18
+# MSU Thesis Class Version 4.2b 2024/05/16
Copyright 2011-2024 by Alan Munn <amunn@msu.edu>
@@ -9,6 +9,13 @@ Submission of Master's Theses and Dissertations (January 2023).
The class is based on the `memoir` document class, and therefore inherits
all of the functionality of that class.
+# TeX distribution requirements
+
+The `msu-thesis` class requires an up-to-date TeX distribution, 2022 release or later.
+
+# Engine requirements
+
+The `msu-thesis` class works with all LaTeX engines (pdfLaTeX, XeLaTeX, LuaLaTeX).
# Update on new formatting requirements (Fall 2022)
@@ -30,7 +37,7 @@ Please [read the documentation!](https://amunn.github.io/msu-thesis/)
## Installation:
-The `msu-thesis` class is part of both TeXLive and MikTeX, so you should either already have it or should be able to install it with your package manager.
+The `msu-thesis` class is part of both TeXLive and MikTeX, so you should either already have it or should be able to install it with your package manager if you have an up-to-date distribution.
If you wish to install it locally, follow the directions below:
@@ -42,9 +49,16 @@ Put `msu-thesis.tex`, `msu-thesis.pdf` and the `samples` folder into
`<local texmf>/doc/latex/msu-thesis`
+Alternatively, you can simply put a copy of `msu-thesis.cls` in the same folder as your thesis source file.
+
The samples folder contains two thesis test-files and
a template.
+## Overleaf users
+
+If you are using Overleaf, you should upload a copy of `msu-thesis.cls` to your project. It *must* have exactly this name to be found. Click on the Menu icon and make sure to choose the latest version of TeX Live for compilation.
+
+
This package may be distributed and/or modified under the conditions of
the LaTeX Project Public License, either version 1.3 of this license or
any later version. The latest version of this license is in
diff --git a/macros/latex/contrib/msu-thesis/docs/msu-thesis.tex b/macros/latex/contrib/msu-thesis/docs/msu-thesis.tex
index 01ca59e7ad..7ea3b12edf 100644
--- a/macros/latex/contrib/msu-thesis/docs/msu-thesis.tex
+++ b/macros/latex/contrib/msu-thesis/docs/msu-thesis.tex
@@ -2,8 +2,8 @@
\documentclass[11pt]{article}
-\def\msuversion{4.2}
-\def\msudate{2024/02/18}
+\def\msuversion{4.2b}
+\def\msudate{2024/05/16}
\title{\textbf{Using the MSU Thesis Class}}
\author{\textbf{Alan Munn}\\Department of Linguistics, Languages, and Cultures\\Michigan State University\\\texttt{\href{mailto:amunn@msu.edu}{amunn@msu.edu}}}
\date{Version \msuversion\\\msudate}
@@ -59,8 +59,12 @@
\abstract{\noindent\begin{quote} This is a class file for MSU theses and dissertations. It is based on the \pkg{memoir}\ class, and therefore supports all of the functionality of that class. It should generate a document which meets all the basic formatting requirements laid out by the \href{https://grad.msu.edu/etd/formatting-guide}{Formatting Guide For Submission of Master’s Theses and Doctoral Dissertations}\ (January, 2023) produced by the Graduate School, including requirements for margins, titlepage, page numbering, section titles, sub- and superscript sizes etc.\end{quote}}
\section{Introduction}
Formatting a dissertation according to a University's thesis requirements is not always a simple task in \LaTeX, especially since the requirements are generally aimed at MSWord users. Furthermore, most of the work of formatting a document is supposed to be done by the document class itself, and not by the individual user. Fortunately, Michigan State University's thesis requirements are for the most part sane, (even if the thesis office itself isn’t) and fairly straightforward. The present class file is designed to further make the process easier for \LaTeX\ users, by doing all the heavy lifting for you, so that you can focus on the content and not the formatting.
-\section{Background}
+\section{Background and requirements}
The MSU Thesis Class is based on the \pkg{memoir}\ document class. The \pkg{memoir}\ class is an extensive class that incorporates the functionality of many other packages into it. The class is extensively documented, and the documentation (\pkg{memman.pdf}) should be available with any \TeX\ distribution. I strongly recommend that you familiarize yourself with \pkg{memoir}\ as you use the present class.
+\subsection{TeX distribution requirements}
+The \pkg{msu-thesis}\ class requires a reasonably up-to-date TeX distribution, 2022 or later.
+\subsection{Engine requirements}
+The class may be used with any LaTeX engine: pdfLaTeX, XeLaTeX, or LuaLaTeX.
\section{Class Options}
In addition to any options passed to the \pkg{memoir}\ class (e.g. |oldfontcommands|; see Section \ref{sec:fonts}, font size), the \pkg{msu-thesis}\ class takes six options: one to specify the type of degree, (see Table~\ref{degrees}), one to enable landscape page numbering, two to enable per-chapter bibliographies and appendices, two to make small adjustments to Table of Contents. If no degree option is specified, a Ph.D. dissertation is assumed.
\begin{table}[htpb]
@@ -189,16 +193,25 @@ The \pkg{memoir}\ class provides commands for single and double spacing (|\Singl
The \pkg{memoir}\ class replicates the functionality of many independent packages, so if you are transferring \LaTeX\ source from other documents using the \pkg{article}\ class, you may encounter some warnings or errors. The \pkg{memoir}\ documentation has substantial information about the packages it emulates, and the packages for which it provides equivalent functionality. See Chap. 18 Sec. 24 of the \pkg{memoir}\ manual for details. Quoting from the manual:
\begin{quote} At the time of writing the emulated packages are: {\sffamily abstract, appendix, booktabs, ccaption, chngcntr, crop, enumerate, epigraph, ifmtarg, ifpdf, index, makeidx, moreverb, needspace, newfile, nextpage, pagenote, patchcmd, parskip, setspace, shortvrb, showidx, titleref, tocbibind, tocloft, verbatim, and verse.} As well as the emulated packages memoir provides functions equivalent to those in the following packages, although the class does not prevent you from using them: {\sffamily fancyhdr, framed, geometry, sidecap, subfigure, and titlesec.}\\\hfill{\normalfont\emph{The Memoir Class} 10th impression, 2015, p.345}
\end{quote}
-\subsection{Captions}
-\subsubsection{Caption delimiter}\label{captiondelim}
-Because the thesis office doesn't understand anything about punctuation, it requires the colon that would appear in a caption to also appear in the contents lists. Since they don't care about the colon itself, but just consistency I've removed colons from the captions entirely, since leaving it in makes the contents lists look really stupid. But in case you or your advisor want the colon in captions, you can add the colon back in by adding |\renewcommand{\msucaptiondelim}{:\space}| to your preamble, and the class will make sure the Lists of Tables and Figures match in formatting. If you have other floating objects with captions (e.g., algorithms, listings) you may need to change their delimiter too (see below). How you do this may depend on the particular packages you are using.
-
+\subsection{Table of Contents issues}
\subsubsection{Simplified vs. full contents}
The thesis guide suggests that you use a simplified table of contents that lists only chapter levels, but that you are welcome to use a more detailed table of contents if you wish. As with most, if not all of the “design” decisions made by the thesis office, this one makes very little typographic sense, and so I have left the default TOC level to be 1, i.e., chapters and sections will be listed in the TOC. If you wish to use the simplified contents format that just lists chapters, add the following to your preamble:
\begin{quote}
|\setcounter{msutocdepth}{0}|
\end{quote}
+\subsubsection{Ensuring the minimum number of leader dots}
+If your chapter titles are very long, they sometimes fail to put any leader dots before the page number in the Table of Contents. The thesis office requires a minimum of three dots of leaders for any TOC line. You can solve this problem by putting a line break into the TOC entry title. To do this, use the optional argument of the corresponding |\chapter| or |\section| etc. command. Note that the line break needs to be preceded by |\protect|.
+
+%\begin{quote}
+\begin{lstlisting}[frame=none,xleftmargin=2.5em]
+\chapter[Long chapter title that will\protect\\ break at this point]
+ {Long chapter title that will break at this point}
+\end{lstlisting}
+%\end{quote}
+\subsection{Captions}
+\subsubsection{Caption delimiter}\label{captiondelim}
+Because the thesis office doesn't understand anything about punctuation, it requires the colon that would appear in a caption to also appear in the contents lists. Since they don't care about the colon itself, but just consistency I've removed colons from the captions entirely, since leaving it in makes the contents lists look really stupid. But in case you or your advisor want the colon in captions, you can add the colon back in by adding |\renewcommand{\msucaptiondelim}{:\space}| to your preamble, and the class will make sure the Lists of Tables and Figures match in formatting. If you have other floating objects with captions (e.g., algorithms, listings) you may need to change their delimiter too (see below). How you do this may depend on the particular packages you are using.
\subsubsection{New lists and floats}
Note that the thesis office no longer seems to \emph{require} lists of anything other than the main table of contents. This is another odd decision on their part. If do include a List of Tables and List of Figures and need to add other lists, you can follow the directions here. Note that lists of algorithms require special treatment. See §\ref{algorithms}.
@@ -273,11 +286,13 @@ If you have changed the |\msucaptiondelimeter| to use a colon (see \ref{captiond
The first method removes the colon from the word Algorithm in the List of Algorithms:
\begin{quote}
+\begin{minipage}{\linewidth}
\begin{lstlisting}
% Use this code after loading any algorithm package and the float package
% This removes the colon after the word Algorithm in the List of Algorithms
\renewcommand*{\cftalgorithmaftersnum}{}
\end{lstlisting}
+\end{minipage}
\end{quote}
The second method adds a colon to the word Algorithm in the captions of the algorithms
@@ -394,6 +409,8 @@ Despite there being no explicit formatting requirements for Chapter headings (ot
\end{itemize}
\subsection{Master’s Theses}
Master’s theses are sometimes relatively short, and you may think that you can just have |\section| commands with no chapters. This will \emph{not} work. The class is designed to use chapters (and as far as I can tell, the Graduate School also expects chapters).
+\subsection{Overleaf users}
+If you're using Overleaf, it's usually best to upload a copy of the class to your project. Please remember that the file \emph{must} be called |msu-thesis.cls|. Naming it something different will cause it not to be found, and an older version will be loaded. Additionally, since Overleaf preserves the TeX Live year that you first opened the project, it's a good idea to change to the most recent TeX Live year that the site offers. You can do this by clicking on the Menu icon in the editor and then selecting the most recent TeX Live version.
\section{Bugs and redistribution}
\subsection{Current version}
@@ -444,11 +461,11 @@ to Wolfgang Sternefeld for supplying the \pkg{linguex}\ spacing fix code, Leo Li
landscape page numbering code, which greatly simplified my original version. Thanks to
Florent Chervet for early \pkg{hyperref} code (up until v.3.6), and Ulrike Fischer for the
current \pkg{hyperref} code. Thanks to David Carlisle for helping me understand a ridiculous spacing problem.
-Thanks also to the following students who have reported
+Thanks also to the following people who have reported
problems over the years: Irina Agafonova, Ali Al-jiboory, Abubakr Ayesh, Julian Blank,
Nathan Brugnone, Dmitriy Bryndin, Greg Christian, Kyle Crayne, Ciaron Hamilton, Matt Husband, Changkuk
Jung, Claire Kopenhafer, Adam Liter, Vanessa Maldonado, Andriana Manousidaki, Ben Miller, William Muir, Eureka
-Pai, Alicia Parrish, Neil ver Planck, Taha Posos, Nick Rekuski, Giacomo Romanini, William Sands, Adam
+Pai, Alicia Parrish, Victoria Parrish, Neil ver Planck, Taha Posos, Nick Rekuski, Giacomo Romanini, William Sands, Adam
Soliman, Mookyong Son, Erik Stitt, Fanurs C.E. Teh, Eremey Valetov, Matthew Vincent, Michael Wojcik, Stephen Yowono, Atacan Yücesoy, Ali
Zare, and Yisu Zhou. A special thank you to Non Thongprong who graciously provided a copy
of his entire thesis which allowed me to debug some especially subtle spacing
diff --git a/macros/latex/contrib/msu-thesis/msu-thesis.cls b/macros/latex/contrib/msu-thesis/msu-thesis.cls
index c73d4be4d0..f873f7a964 100644
--- a/macros/latex/contrib/msu-thesis/msu-thesis.cls
+++ b/macros/latex/contrib/msu-thesis/msu-thesis.cls
@@ -192,12 +192,26 @@
% Version 4.1h 2023/10/07 Changed option processing code
% Version 4.1i 2023/12/02 Fixed spurious blank page with biblatex bibliography
% Version 4.2 2024/02/18 Changed spacing for sections to address complaints about adjacent sectioning commands
+% Version 4.2b 2024/05/16 Added version check for l3kernel.
% Report bugs/problems/questions to <amunn@msu.edu>
%
-\def\msu@version{4.2}
-\def\msu@date{2024/02/18}
+\def\msu@version{4.2b}
+\def\msu@date{2024/05/16}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{msu-thesis}[\msu@date\space Michigan State University Thesis Class version \msu@version]
+\@ifundefined{ExplLoaderFileDate}
+ {\RequirePackage{expl3}}
+ {}
+\@ifl@t@r\ExplLoaderFileDate{2022-06-01}
+ {}
+ {%
+ \ClassError{msu-thesis}{Support package expl3 too old}
+ {%
+ You need to update your TeX distribution: 'l3kernel' of 2022-06-01 or later is required.\MessageBreak
+ Loading msu-thesis will abort!%
+ }%
+ \endinput
+ }%
\DeclareKeys[msu-thesis]
{
PhD.code = {\gdef\msu@degree{Doctor of Philosophy}},
diff --git a/macros/latex/contrib/msu-thesis/msu-thesis.pdf b/macros/latex/contrib/msu-thesis/msu-thesis.pdf
index 533ec424b9..89f49a4d54 100644
--- a/macros/latex/contrib/msu-thesis/msu-thesis.pdf
+++ b/macros/latex/contrib/msu-thesis/msu-thesis.pdf
Binary files differ
diff --git a/macros/latex/contrib/nicematrix/README.md b/macros/latex/contrib/nicematrix/README.md
index da760d4374..2318c86d3a 100644
--- a/macros/latex/contrib/nicematrix/README.md
+++ b/macros/latex/contrib/nicematrix/README.md
@@ -4,6 +4,8 @@ Author: F. Pantigny (`fpantigny@wanadoo.fr`).
CTAN page: `https://ctan.org/pkg/nicematrix`
+GitHub page: `github.com/fpantigny/nicematrix`
+
## License
The LaTeX extension `nicematrix` is distributed under the LPPL 1.3 license.
diff --git a/macros/latex/contrib/nicematrix/nicematrix-code.dtx b/macros/latex/contrib/nicematrix/nicematrix-code.dtx
index 340d2e0f5e..059c4b2ca6 100644
--- a/macros/latex/contrib/nicematrix/nicematrix-code.dtx
+++ b/macros/latex/contrib/nicematrix/nicematrix-code.dtx
@@ -17,8 +17,8 @@
%
% \fi
% \iffalse
-\def\myfileversion{6.27b}
-\def\myfiledate{2024/04/23}
+\def\myfileversion{6.28}
+\def\myfiledate{2024/05/29}
%
%
%<*batchfile>
@@ -102,25 +102,11 @@ version 2005/12/01 or later.
%
%
% \bigskip
-% By default, the package \pkg{nicematrix} doesn't patch any existing code.
+% The development of the extension \pkg{nicematrix} is done on the following GitHub
+% depot:
%
-% \smallskip
-% However, when the option |renew-dots| is used, the commands |\cdots|,
-% |\ldots|, |\dots|, |\vdots|, |\ddots| and |\iddots| are redefined in the
-% environments provided by \pkg{nicematrix}. In the same way, if the option
-% |renew-matrix| is used, the environment |{matrix}| of \pkg{amsmath} is
-% redefined.
-%
-% \smallskip
-% On the other hand, the environment |{array}| is never redefined.
+% \verb|https://github.com/fpantigny/nicematrix|
%
-% \smallskip
-% Of course, the package \pkg{nicematrix} uses the features of the package
-% \pkg{array}. It tries to be independent of its implementation. Unfortunately,
-% it was not possible to be strictly independent. For example, the package
-% \pkg{nicematrix} relies upon the fact that the package |{array}| uses
-% |\ialign| to begin the |\halign|.
-%
%
% \bigskip
% \section{Declaration of the package and packages loaded}
@@ -170,6 +156,8 @@ version 2005/12/01 or later.
% the Tagging Project.
% \begin{macrocode}
\bool_const:Nn \c_@@_tagging_array_bool { \cs_if_exist_p:N \ar@ialign }
+\bool_const:Nn \c_@@_testphase_table_bool
+ { \IfPackageLoadedTF { latex-lab-testphase-table } \c_true_bool \c_false_bool }
% \end{macrocode}
%
%
@@ -415,8 +403,8 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \begin{macrocode}
-\cs_generate_variant:Nn \seq_set_split:Nnn { N V n }
-\cs_generate_variant:Nn \str_lowercase:n { V }
+\cs_generate_variant:Nn \seq_set_split:Nnn { N o n }
+\cs_generate_variant:Nn \str_lowercase:n { o }
% \end{macrocode}
%
% \medskip
@@ -565,8 +553,8 @@ version 2005/12/01 or later.
% the rules even if \pkg{colortbl} is not loaded.
% \begin{macrocode}
\cs_set_protected:Npn \CT@arc@ { }
- \cs_set:Npn \arrayrulecolor #1 # { \CT@arc { #1 } }
- \cs_set:Npn \CT@arc #1 #2
+ \cs_set_nopar:Npn \arrayrulecolor #1 # { \CT@arc { #1 } }
+ \cs_set_nopar:Npn \CT@arc #1 #2
{
\dim_compare:nNnT \baselineskip = \c_zero_dim \noalign
{ \cs_gset_nopar:Npn \CT@arc@ { \color #1 { #2 } } }
@@ -574,13 +562,13 @@ version 2005/12/01 or later.
% \end{macrocode}
% Idem for |\CT@drs@|.
% \begin{macrocode}
- \cs_set:Npn \doublerulesepcolor #1 # { \CT@drs { #1 } }
- \cs_set:Npn \CT@drs #1 #2
+ \cs_set_nopar:Npn \doublerulesepcolor #1 # { \CT@drs { #1 } }
+ \cs_set_nopar:Npn \CT@drs #1 #2
{
\dim_compare:nNnT \baselineskip = \c_zero_dim \noalign
{ \cs_gset:Npn \CT@drsc@ { \color #1 { #2 } } }
}
- \cs_set:Npn \hline
+ \cs_set_nopar:Npn \hline
{
\noalign { \ifnum 0 = `} \fi
\cs_set_eq:NN \hskip \vskip
@@ -599,8 +587,8 @@ version 2005/12/01 or later.
% be linked to |\cline| in the beginning of |{NiceArrayWithDelims}|. The
% following commands must \emph{not} be protected.
% \begin{macrocode}
-\cs_set:Npn \@@_standard_cline #1 { \@@_standard_cline:w #1 \q_stop }
-\cs_set:Npn \@@_standard_cline:w #1-#2 \q_stop
+\cs_set_nopar:Npn \@@_standard_cline #1 { \@@_standard_cline:w #1 \q_stop }
+\cs_set_nopar:Npn \@@_standard_cline:w #1-#2 \q_stop
{
\int_if_zero:nT \l_@@_first_col_int { \omit & }
\int_compare:nNnT { #1 } > \c_one_int
@@ -694,8 +682,8 @@ version 2005/12/01 or later.
\tl_if_blank:nF { #1 }
{
\tl_if_head_eq_meaning:nNTF { #1 } [
- { \cs_set:Npn \CT@arc@ { \color #1 } }
- { \cs_set:Npn \CT@arc@ { \color { #1 } } }
+ { \cs_set_nopar:Npn \CT@arc@ { \color #1 } }
+ { \cs_set_nopar:Npn \CT@arc@ { \color { #1 } } }
}
}
\cs_generate_variant:Nn \@@_set_CT@arc@:n { o }
@@ -706,8 +694,8 @@ version 2005/12/01 or later.
\cs_new_protected:Npn \@@_set_CT@drsc@:n #1
{
\tl_if_head_eq_meaning:nNTF { #1 } [
- { \cs_set:Npn \CT@drsc@ { \color #1 } }
- { \cs_set:Npn \CT@drsc@ { \color { #1 } } }
+ { \cs_set_nopar:Npn \CT@drsc@ { \color #1 } }
+ { \cs_set_nopar:Npn \CT@drsc@ { \color { #1 } } }
}
\cs_generate_variant:Nn \@@_set_CT@drsc@:n { o }
% \end{macrocode}
@@ -732,10 +720,6 @@ version 2005/12/01 or later.
\cs_generate_variant:Nn \@@_color:n { o }
% \end{macrocode}
%
-% \bigskip
-% \begin{macrocode}
-\cs_set_eq:NN \@@_old_pgfpointanchor \pgfpointanchor
-% \end{macrocode}
%
% \bigskip
% \begin{macrocode}
@@ -970,6 +954,7 @@ version 2005/12/01 or later.
\bool_new:N \g_@@_rotate_bool
% \end{macrocode}
%
+%
% \bigskip
% The following boolean will be raise then the command |\rotate| is used with
% the key |c|.
@@ -1110,12 +1095,12 @@ version 2005/12/01 or later.
% The following command will be able to reconstruct the full name of the current
% command or environment (despite its name which contains \textsl{env}). This
% command must \emph{not} be protected since it will be used in error messages
-% and we have to use |\str_if_eq:VnTF| and not |\tl_if_eq:NnTF| because we need
+% and we have to use |\str_if_eq:onTF| and not |\tl_if_eq:NnTF| because we need
% to be fully expandable).
% \begin{macrocode}
\cs_new:Npn \@@_full_name_env:
{
- \str_if_eq:VnTF \g_@@_com_or_env_str { command }
+ \str_if_eq:onTF \g_@@_com_or_env_str { command }
{ command \space \c_backslash_str \g_@@_name_env_str }
{ environment \space \{ \g_@@_name_env_str \} }
}
@@ -1163,6 +1148,14 @@ version 2005/12/01 or later.
\bool_new:N \l_@@_in_code_after_bool
% \end{macrocode}
%
+%
+% \bigskip
+% The following parameter will be raised when a block content a |&| in its
+% content (=label).
+% \begin{macrocode}
+\bool_new:N \l_@@_ampersand_bool
+% \end{macrocode}
+%
% \bigskip
% The counters |\l_@@_old_iRow_int| and |\l_@@_old_jCol_int| will be used to
% save the values of the potential LaTeX counters |iRow| and |jCol|. These LaTeX
@@ -1275,11 +1268,21 @@ version 2005/12/01 or later.
% The L3 programming layer provides scratch dimensions |\l_tmpa_dim| and
% |\l_tmpb_dim|. We creates two more in the same spirit.
% \begin{macrocode}
-\dim_zero_new:N \l_@@_tmpc_dim
-\dim_zero_new:N \l_@@_tmpd_dim
+\dim_new:N \l_@@_tmpc_dim
+\dim_new:N \l_@@_tmpd_dim
% \end{macrocode}
%
% \bigskip
+% \begin{macrocode}
+\dim_new:N \g_@@_dp_row_zero_dim
+\dim_new:N \g_@@_ht_row_zero_dim
+\dim_new:N \g_@@_ht_row_one_dim
+\dim_new:N \g_@@_dp_ante_last_row_dim
+\dim_new:N \g_@@_ht_last_row_dim
+\dim_new:N \g_@@_dp_last_row_dim
+% \end{macrocode}
+%
+% \bigskip
% Some cells will be declared as ``empty'' (for example a cell with an
% instruction |\Cdots|).
% \begin{macrocode}
@@ -1475,6 +1478,7 @@ version 2005/12/01 or later.
\str_new:N \l_@@_hpos_block_str
\str_set:Nn \l_@@_hpos_block_str { c }
\bool_new:N \l_@@_hpos_of_block_cap_bool
+\bool_new:N \l_@@_p_block_bool
% \end{macrocode}
%
% \medskip
@@ -2261,6 +2265,12 @@ version 2005/12/01 or later.
\tl_new:N \l_@@_baseline_tl
\tl_set:Nn \l_@@_baseline_tl { c }
% \end{macrocode}
+%
+% \bigskip
+% The following parameter corresponds to the key |ampersand-in-blocks|
+% \begin{macrocode}
+\bool_new:N \l_@@_amp_in_blocks_bool
+% \end{macrocode}
%
% \bigskip
% The flag |\l_@@_exterior_arraycolsep_bool| corresponds to the option
@@ -2492,6 +2502,8 @@ version 2005/12/01 or later.
% \begin{macrocode}
\keys_define:nn { NiceMatrix / Global }
{
+ ampersand-in-blocks .bool_set:N = \l_@@_amp_in_blocks_bool ,
+ ampersand-in-blocks .default:n = true ,
no-cell-nodes .code:n =
\cs_set_protected:Npn \@@_node_for_cell:
{ \box_use_drop:N \l_@@_cell_box } ,
@@ -3475,10 +3487,10 @@ version 2005/12/01 or later.
% \end{macrocode}
% |\l_@@_baseline_tl| may have the value |t|, |c| or |b|. However, if the value
% is |b|, we compose the |\array| (of \pkg{array}) with the option |t| and the
-% right translation will be done further. Remark that |\str_if_eq:VnTF| is
+% right translation will be done further. Remark that |\str_if_eq:onTF| is
% fully expandable and we need something fully expandable here.
% \begin{macrocode}
- [ \str_if_eq:VnTF \l_@@_baseline_tl c c t ]
+ [ \str_if_eq:onTF \l_@@_baseline_tl c c t ]
}
% \end{macrocode}
%
@@ -3554,7 +3566,7 @@ version 2005/12/01 or later.
% \begin{macrocode}
\cs_new_protected:Npn \@@_everycr_i:
{
- \bool_if:NT \c_@@_tagging_array_bool
+ \bool_if:NT \c_@@_testphase_table_bool
{
\tbl_if_row_was_started:T { \UseTaggingSocket { tbl / row / end } }
\tbl_update_cell_data_for_next_row:
@@ -3587,10 +3599,7 @@ version 2005/12/01 or later.
{
\int_compare:nNnF \c@iRow = \l_@@_last_row_int
% \end{macrocode}
-% The command |\CT@arc@| is a command of \pkg{colortbl} which sets the color of
-% the rules in the array. The package \pkg{nicematrix} uses it even if
-% \pkg{colortbl} is not loaded. We use a TeX group in order to limit the scope
-% of |\CT@arc@|.
+%
% \begin{macrocode}
{ \hrule height \arrayrulewidth width \c_zero_dim }
}
@@ -3636,21 +3645,21 @@ version 2005/12/01 or later.
% \bigskip
% \begin{macrocode}
\cs_new_protected:Npn \@@_redefine_everycr: { \everycr { \@@_everycr: } }
-\hook_gput_code:nnn { begindocument } { . }
- {
- \IfPackageLoadedTF { colortbl }
- {
- \cs_set_protected:Npn \@@_redefine_everycr:
- {
- \CT@everycr
- {
- \noalign { \cs_gset_eq:NN \CT@row@color \prg_do_nothing: }
- \@@_everycr:
- }
- }
- }
- { }
- }
+ \hook_gput_code:nnn { begindocument } { . }
+ {
+ \IfPackageLoadedTF { colortbl }
+ {
+ \cs_set_protected:Npn \@@_redefine_everycr:
+ {
+ \CT@everycr
+ {
+ \noalign { \cs_gset_eq:NN \CT@row@color \prg_do_nothing: }
+ \@@_everycr:
+ }
+ }
+ }
+ { }
+ }
% \end{macrocode}
%
% If \pkg{booktabs} is loaded, we have to patch the macro |\@BTnormal| which is
@@ -3688,16 +3697,11 @@ version 2005/12/01 or later.
% \begin{macrocode}
\cs_new_protected:Npn \@@_some_initialization:
{
- \dim_gzero_new:N \g_@@_dp_row_zero_dim
\dim_gset:Nn \g_@@_dp_row_zero_dim { \box_dp:N \@arstrutbox }
- \dim_gzero_new:N \g_@@_ht_row_zero_dim
\dim_gset:Nn \g_@@_ht_row_zero_dim { \box_ht:N \@arstrutbox }
- \dim_gzero_new:N \g_@@_ht_row_one_dim
- \dim_gset:Nn \g_@@_ht_row_one_dim { \box_ht:N \@arstrutbox }
- \dim_gzero_new:N \g_@@_dp_ante_last_row_dim
- \dim_gzero_new:N \g_@@_ht_last_row_dim
+ \dim_gset_eq:NN \g_@@_ht_row_one_dim \g_@@_ht_row_zero_dim
+ \dim_gzero:N \g_@@_dp_ante_last_row_dim
\dim_gset:Nn \g_@@_ht_last_row_dim { \box_ht:N \@arstrutbox }
- \dim_gzero_new:N \g_@@_dp_last_row_dim
\dim_gset:Nn \g_@@_dp_last_row_dim { \box_dp:N \@arstrutbox }
}
% \end{macrocode}
@@ -3735,7 +3739,7 @@ version 2005/12/01 or later.
\cs_set_nopar:Npn \arraystretch { 0.47 }
\dim_set:Nn \arraycolsep { 1.45 pt }
% \end{macrocode}
-% By default, |\@@_small_scripstyle:| is null.
+% By default, |\@@_tuning_key_small:| is no-op.
% \begin{macrocode}
\cs_set_eq:NN \@@_tuning_key_small: \scriptstyle
}
@@ -3763,9 +3767,9 @@ version 2005/12/01 or later.
{
\cs_set_nopar:Npn \ar@ialign
{
- \tbl_init_cell_data_for_table:
+ \bool_if:NT \c_@@_testphase_table_bool \tbl_init_cell_data_for_table:
\@@_redefine_everycr:
- \tabskip = \c_zero_skip
+ \dim_zero:N \tabskip
\@@_some_initialization:
% \end{macrocode}
%
@@ -3786,7 +3790,7 @@ version 2005/12/01 or later.
\cs_set_nopar:Npn \ialign
{
\@@_redefine_everycr:
- \tabskip = \c_zero_skip
+ \dim_zero:N \tabskip
\@@_some_initialization:
\cs_set_eq:NN \ialign \@@_old_ialign:
\halign
@@ -4061,7 +4065,9 @@ version 2005/12/01 or later.
% |\hbox_set_end:| corresponding to this |\hbox_set:Nw| will be in the second
% part of the environment (and the closing |\c_math_toggle_token| also).
% \begin{macrocode}
- \hbox_set:Nw \l_@@_the_array_box
+ \hbox_set:Nw \l_@@_the_array_box
+ \bool_if:NT \c_@@_testphase_table_bool
+ { \UseTaggingSocket { tbl / hmode / begin } }
% \end{macrocode}
%
% \begin{macrocode}
@@ -4101,7 +4107,7 @@ version 2005/12/01 or later.
% \section{The \textbackslash CodeBefore}
%
% The following command will be executed if the |\CodeBefore| has to be actually
-% executed (that commmand will be used only once and is present only for legibility).
+% executed (that commmand will be used only once and is present alone only for legibility).
% \begin{macrocode}
\cs_new_protected:Npn \@@_pre_code_before:
{
@@ -4426,6 +4432,7 @@ version 2005/12/01 or later.
\tl_gset:Nn \g_@@_left_delim_tl { #1 }
\tl_gset:Nn \g_@@_right_delim_tl { #2 }
\tl_gset:Nn \g_@@_user_preamble_tl { #4 }
+ \tl_if_empty:NT \g_@@_user_preamble_tl { \@@_fatal:n { empty~preamble } }
% \end{macrocode}
%
%
@@ -4545,7 +4552,7 @@ version 2005/12/01 or later.
% command |\@@_CodeBefore_Body:w|. After that job, the command |\@@_CodeBefore_Body:w|
% will go on with |\@@_pre_array:|.
% \begin{macrocode}
- \IfBooleanTF { #6 } \@@_CodeBefore_Body:w \@@_pre_array:
+ \bool_if:nTF { #6 } \@@_CodeBefore_Body:w \@@_pre_array:
}
% \end{macrocode}
%
@@ -4558,6 +4565,18 @@ version 2005/12/01 or later.
\c_math_toggle_token
\skip_horizontal:N \l_@@_right_margin_dim
\skip_horizontal:N \l_@@_extra_right_margin_dim
+
+ % % awful workaround
+ \int_compare:nNnT \g_@@_col_total_int = \c_one_int
+ {
+ \dim_compare:nNnT \l_@@_columns_width_dim > \c_zero_dim
+ {
+ \skip_horizontal:N - \l_@@_columns_width_dim
+ \bool_if:NTF \l_@@_tabular_bool
+ { \skip_horizontal:n { - 2 \tabcolsep } }
+ { \skip_horizontal:n { - 2 \arraycolsep } }
+ }
+ }
\hbox_set_end:
% \end{macrocode}
% End of the construction of the array (in the box |\l_@@_the_array_box|).
@@ -4798,7 +4817,7 @@ version 2005/12/01 or later.
%
% \bigskip
% The final user provides a preamble, but we must convert that preamble into a
-% preamble that will be given to |{array}| (of the package \pkg{array}).
+% preamble which will be given to |{array}| (of the package \pkg{array}).
%
% \bigskip
% The preamble given by the final user is stored in |\g_@@_user_preamble_tl|.
@@ -4872,6 +4891,12 @@ version 2005/12/01 or later.
{
\IfPackageLoadedTF { colortbl }
{
+% \end{macrocode}
+% When \pkg{colortbl} is used, we have to catch the tokens |\columncolor| in the
+% preamble because, otherwise, \pkg{colortbl} will catch them and the colored
+% panels won't be drawn by \pkg{nicematrix} but by \pkg{colortbl} (with an
+% output which is not perfect).
+% \begin{macrocode}
\regex_const:Nn \c_@@_columncolor_regex { \c { columncolor } }
\cs_new_protected:Npn \@@_replace_columncolor:
{
@@ -5186,7 +5211,7 @@ version 2005/12/01 or later.
%
%
% \medskip
-% For |p|, |b| and |m|.
+% For |p| but also |b| and |m|.
% \begin{macrocode}
\cs_new:Npn \@@_p #1
{
@@ -5262,7 +5287,7 @@ version 2005/12/01 or later.
{ \tl_clear:N \exp_not:N \l_@@_hpos_cell_tl }
{
\cs_set_nopar:Npn \exp_not:N \l_@@_hpos_cell_tl
- { \str_lowercase:V \l_@@_hpos_col_str }
+ { \str_lowercase:o \l_@@_hpos_col_str }
}
\str_case:on \l_@@_hpos_col_str
{
@@ -5288,7 +5313,7 @@ version 2005/12/01 or later.
% \end{macrocode}
% We use |\str_lowercase:n| to convert |R| to |r|, etc.
% \begin{macrocode}
- { \str_lowercase:V \l_@@_hpos_col_str }
+ { \str_lowercase:o \l_@@_hpos_col_str }
}
}
% \end{macrocode}
@@ -5341,6 +5366,8 @@ version 2005/12/01 or later.
% mono-column blocks.
% \begin{macrocode}
\dim_set:Nn \l_@@_col_width_dim { #2 }
+ \bool_if:NT \c_@@_testphase_table_bool
+ { \tag_struct_begin:n { tag = Div } }
\@@_cell_begin:w
% \end{macrocode}
% We use the form |\minipage|--|\endminipage| (|\varwidth|--|\endvarwidth|) for
@@ -5355,6 +5382,7 @@ version 2005/12/01 or later.
\vrule height \box_ht:N \@arstrutbox width \c_zero_dim
\everypar { }
}
+ \bool_if:NT \c_@@_testphase_table_bool \tagpdfparaOn
% \end{macrocode}
% Now, the potential code for the horizontal position of the content of the cell
% (|\centering|, |\raggedright|, |\RaggedRight|, etc.).
@@ -5381,6 +5409,7 @@ version 2005/12/01 or later.
% \begin{macrocode}
#4
\@@_cell_end:
+ \bool_if:NT \c_@@_testphase_table_bool \tag_struct_end:
}
}
}
@@ -6032,7 +6061,9 @@ version 2005/12/01 or later.
\multispan { #1 }
\cs_set_eq:NN \@@_update_max_cell_width: \prg_do_nothing:
\begingroup
- \cs_set:Npn \@addamp
+ \bool_if:NT \c_@@_testphase_table_bool
+ { \tbl_update_multicolumn_cell_data:n { #1 } }
+ \cs_set_nopar:Npn \@addamp
{ \legacy_if:nTF { @firstamp } { \@firstampfalse } { \@preamerr 5 } }
% \end{macrocode}
%
@@ -6051,6 +6082,8 @@ version 2005/12/01 or later.
\exp_args:No \@mkpream \g_@@_preamble_tl
\@addtopreamble \@empty
\endgroup
+ \bool_if:NT \c_@@_testphase_table_bool
+ { \UseTaggingSocket { tbl / colspan } { #1 } }
% \end{macrocode}
%
% \medskip
@@ -6084,7 +6117,7 @@ version 2005/12/01 or later.
% \medskip
% The following lines were in the original definition of |\multicolumn|.
% \begin{macrocode}
- \cs_set:Npn \@sharp { #3 }
+ \cs_set_nopar:Npn \@sharp { #3 }
\@arstrut
\@preamble
\null
@@ -6804,7 +6837,7 @@ version 2005/12/01 or later.
\tl_set_rescan:Nno \l_@@_end_of_row_tl { } \l_@@_end_of_row_tl
\bool_if:NTF \l_@@_light_syntax_expanded_bool
\seq_set_split:Nee
- \seq_set_split:NVn
+ \seq_set_split:Non
\l_@@_rows_seq \l_@@_end_of_row_tl { #1 }
% \end{macrocode}
% We delete the last row if it is empty.
@@ -6913,7 +6946,7 @@ version 2005/12/01 or later.
% The command |\@@_create_col_nodes:| will construct a special last row.
% That last row is a false row used to create the |col| nodes and to fix the
% width of the columns (when the array is constructed with an option which
-% specifies the width of the columns).
+% specifies the width of the columns such as |columns-width|).
% \begin{macrocode}
\cs_new:Npn \@@_create_col_nodes:
{
@@ -7080,7 +7113,7 @@ version 2005/12/01 or later.
{ \skip_gset:Nn \g_tmpa_skip { 0 pt~plus 1 fill } }
\skip_horizontal:N \g_tmpa_skip
\int_gincr:N \g_tmpa_int
- \bool_lazy_any:nF % modified 2023/12/13
+ \bool_lazy_any:nF
{
\g_@@_delims_bool
\l_@@_tabular_bool
@@ -7160,7 +7193,7 @@ version 2005/12/01 or later.
\endpgfpicture
}
}
- \cr
+ % \cr
}
% \end{macrocode}
%
@@ -7492,7 +7525,11 @@ version 2005/12/01 or later.
\@@_settings_for_tabular:
\NiceArray { #2 }
}
- { \endNiceArray }
+ {
+ \endNiceArray
+ \bool_if:NT \c_@@_testphase_table_bool
+ { \UseTaggingSocket { tbl / hmode / end } }
+ }
% \end{macrocode}
%
% \begin{macrocode}
@@ -7982,7 +8019,7 @@ version 2005/12/01 or later.
%
% \bigskip
% We define a new \textsc{pgf} shape for the diag nodes because we want to
-% provide a anchor called |.5| for those nodes.
+% provide an anchor called |.5| for those nodes.
% \begin{macrocode}
\pgfdeclareshape { @@_diag_node }
{
@@ -7993,6 +8030,14 @@ version 2005/12/01 or later.
}
\anchor { 5 } { \five }
\anchor { center } { \pgfpointorigin }
+ \anchor { 1 } { \five \pgf@x = 0.2 \pgf@x \pgf@y = 0.2 \pgf@y }
+ \anchor { 2 } { \five \pgf@x = 0.4 \pgf@x \pgf@y = 0.4 \pgf@y }
+ \anchor { 3 } { \five \pgf@x = 0.6 \pgf@x \pgf@y = 0.6 \pgf@y }
+ \anchor { 4 } { \five \pgf@x = 0.8 \pgf@x \pgf@y = 0.8 \pgf@y }
+ \anchor { 6 } { \five \pgf@x = 1.2 \pgf@x \pgf@y = 1.2 \pgf@y }
+ \anchor { 7 } { \five \pgf@x = 1.4 \pgf@x \pgf@y = 1.4 \pgf@y }
+ \anchor { 8 } { \five \pgf@x = 1.6 \pgf@x \pgf@y = 1.6 \pgf@y }
+ \anchor { 9 } { \five \pgf@x = 1.8 \pgf@x \pgf@y = 1.8 \pgf@y }
}
% \end{macrocode}
%
@@ -12916,6 +12961,9 @@ version 2005/12/01 or later.
% \begin{macrocode}
\keys_define:nn { NiceMatrix / Block / FirstPass }
{
+ j .code:n = \str_set:Nn \l_@@_hpos_block_str j
+ \bool_set_true:N \l_@@_p_block_bool ,
+ j .value_forbidden:n = true ,
l .code:n = \str_set:Nn \l_@@_hpos_block_str l ,
l .value_forbidden:n = true ,
r .code:n = \str_set:Nn \l_@@_hpos_block_str r ,
@@ -12936,6 +12984,8 @@ version 2005/12/01 or later.
b .value_forbidden:n = true ,
B .code:n = \str_set:Nn \l_@@_vpos_block_str B ,
B .value_forbidden:n = true ,
+ p .code:n = \bool_set_true:N \l_@@_p_block_bool ,
+ p .value_forbidden:n = true ,
color .code:n =
\@@_color:n { #1 }
\tl_set_rescan:Nnn
@@ -13066,18 +13116,28 @@ version 2005/12/01 or later.
%
%
% \medskip
-% If the block is mono-column or mono-row, we have a special treatment. That's
-% why we have two macros: |\@@_Block_iv:nnnnn| and |\@@_Block_v:nnnnn| (the five
+% We have different treatments when the key |p| is used and when the block is
+% mono-column or mono-row, etc. That's why we have several macros:
+% |\@@_Block_iv:nnnnn|, |\@@_Block_v:nnnnn|, |\@@_Block_vi:nnnn|, etc. (the five
% arguments of those macros are provided by curryfication).
% \begin{macrocode}
- \bool_if:nTF
- {
- (
- \int_compare_p:nNn \l_tmpa_int = \c_one_int
- ||
- \int_compare_p:nNn \l_tmpb_int = \c_one_int
- )
- && ! \tl_if_empty_p:n { #5 }
+ \bool_set_false:N \l_tmpa_bool
+ \bool_if:NT \l_@@_amp_in_blocks_bool
+ { \tl_if_in:nnT { #5 } { & } { \bool_set_true:N \l_tmpa_bool } }
+ \bool_if:NTF \l_tmpa_bool
+ { \exp_args:Nee \@@_Block_vii:nnnnn }
+ {
+ \bool_if:NTF \l_@@_p_block_bool
+ { \exp_args:Nee \@@_Block_vi:nnnnn }
+ {
+ \bool_if:nTF
+ {
+ (
+ \int_compare_p:nNn \l_tmpa_int = \c_one_int
+ ||
+ \int_compare_p:nNn \l_tmpb_int = \c_one_int
+ )
+ && ! \tl_if_empty_p:n { #5 }
% \end{macrocode}
% For the blocks mono-column, we will compose right now in a box in order to
% compute its width and take that width into account for the width of the
@@ -13087,10 +13147,12 @@ version 2005/12/01 or later.
% column, it's imperative. Otherwise, the process for the determination of the
% widths of the columns will be wrong.
% \begin{macrocode}
- && ! \l_@@_X_bool
+ && ! \l_@@_X_bool
+ }
+ { \exp_args:Nee \@@_Block_iv:nnnnn }
+ { \exp_args:Nee \@@_Block_v:nnnnn }
+ }
}
- { \exp_args:Nee \@@_Block_iv:nnnnn }
- { \exp_args:Nee \@@_Block_v:nnnnn }
{ \l_tmpa_int } { \l_tmpb_int } { #3 } { #4 } { #5 }
}
% \end{macrocode}
@@ -13098,12 +13160,13 @@ version 2005/12/01 or later.
%
% \bigskip
% The following macro is for the case of a |\Block| which is mono-row or
-% mono-column (or both). In that case, the content of the block is composed
-% right now in a box (because we have to take into account the dimensions of
-% that box for the width of the current column or the height and the depth of the
-% current row). However, that box will be put in the array \emph{after the
-% construction of the array} (by using \textsc{pgf}) with |\@@_draw_blocks:| and
-% above all |\@@_Block_v:nnnnnn| which will do the main job.
+% mono-column (or both) and don't use the key~|p|. In that case, the content of
+% the block is composed right now in a box (because we have to take into account
+% the dimensions of that box for the width of the current column or the height
+% and the depth of the current row). However, that box will be put in the array
+% \emph{after the construction of the array} (by using \textsc{pgf}) with
+% |\@@_draw_blocks:| and above all |\@@_Block_v:nnnnnn| which will do the main
+% job.
%
% |#1| is $i$ (the number of rows of the block), |#2| is $j$ (the number of
% columns of the block), |#3| is the list of \textsl{key=values} pairs, |#4| are
@@ -13209,7 +13272,7 @@ version 2005/12/01 or later.
\use:e
{
\exp_not:N \begin { minipage }%
- [ \str_lowercase:V \l_@@_vpos_block_str ]
+ [ \str_lowercase:o \l_@@_vpos_block_str ]
{ \l_@@_col_width_dim }
\str_case:on \l_@@_hpos_block_str
{ c \centering r \raggedleft l \raggedright }
@@ -13224,7 +13287,7 @@ version 2005/12/01 or later.
\use:e
{
\exp_not:N \begin { tabular }%
- [ \str_lowercase:V \l_@@_vpos_block_str ]
+ [ \str_lowercase:o \l_@@_vpos_block_str ]
{ @ { } \l_@@_hpos_block_str @ { } }
}
#5
@@ -13240,7 +13303,7 @@ version 2005/12/01 or later.
\use:e
{
\exp_not:N \begin { array }%
- [ \str_lowercase:V \l_@@_vpos_block_str ]
+ [ \str_lowercase:o \l_@@_vpos_block_str ]
{ @ { } \l_@@_hpos_block_str @ { } }
}
#5
@@ -13254,7 +13317,7 @@ version 2005/12/01 or later.
% \bigskip
% If there were |\rotate| (which raises |\g_@@_rotate_bool|) in the content of
% the |\Block|, we do a rotation of the box (and we also adjust the
-% baseline the rotated box).
+% baseline of the rotated box).
% \begin{macrocode}
\bool_if:NT \g_@@_rotate_bool \@@_rotate_box_of_block:
% \end{macrocode}
@@ -13275,37 +13338,29 @@ version 2005/12/01 or later.
}
}
% \end{macrocode}
-% If we are in a mono-row block and if that block has no vertical option for the
-% position\footnote{If the block has a key of a vertical position, that means
-% that it has to be put in a vertical space determined by the \emph{others}
-% cells of the row. Therefore there is no point creating space here. Moreover,
-% that would lead to problems when a multi-row block with a position key such as
-% |b| or |B|.}, we take into account the height and the depth of that block for the
-% height and the depth of the row.
+% If we are in a mono-row block we take into account the height and the depth of
+% that block for the height and the depth of the row.
% \begin{macrocode}
- \str_if_eq:VnT \l_@@_vpos_block_str { c }
+ \int_compare:nNnT { #1 } = \c_one_int
{
- \int_compare:nNnT { #1 } = \c_one_int
+ \dim_gset:Nn \g_@@_blocks_ht_dim
{
- \dim_gset:Nn \g_@@_blocks_ht_dim
+ \dim_max:nn
+ \g_@@_blocks_ht_dim
{
- \dim_max:nn
- \g_@@_blocks_ht_dim
- {
- \box_ht:c
- { g_@@_ block _ box _ \int_use:N \g_@@_block_box_int _ box }
- }
- }
- \dim_gset:Nn \g_@@_blocks_dp_dim
+ \box_ht:c
+ { g_@@_ block _ box _ \int_use:N \g_@@_block_box_int _ box }
+ }
+ }
+ \dim_gset:Nn \g_@@_blocks_dp_dim
+ {
+ \dim_max:nn
+ \g_@@_blocks_dp_dim
{
- \dim_max:nn
- \g_@@_blocks_dp_dim
- {
- \box_dp:c
- { g_@@_ block _ box _ \int_use:N \g_@@_block_box_int _ box }
- }
- }
- }
+ \box_dp:c
+ { g_@@_ block _ box _ \int_use:N \g_@@_block_box_int _ box }
+ }
+ }
}
\seq_gput_right:Nx \g_@@_blocks_seq
{
@@ -13340,6 +13395,8 @@ version 2005/12/01 or later.
}
% \end{macrocode}
%
+%
+%
% \bigskip
% \begin{macrocode}
\cs_new:Npn \@@_adjust_hpos_rotate:
@@ -13398,10 +13455,10 @@ version 2005/12/01 or later.
%
% \bigskip
% The following macro is for the standard case, where the block is not mono-row
-% and not mono-column. In that case, the content of the block is \emph{not}
-% composed right now in a box. The composition in a box will be done further,
-% just after the construction of the array (cf. |\@@_draw_blocks:| and
-% above all |\@@_Block_v:nnnnnn|).
+% and not mono-column and does not use the key |p|). In that case, the content of
+% the block is \emph{not} composed right now in a box. The composition in a box
+% will be done further, just after the construction of the array (cf.
+% |\@@_draw_blocks:| and above all |\@@_Block_v:nnnnnn|).
%
% |#1| is $i$ (the number of rows of the block), |#2| is $j$ (the number of
% columns of the block), |#3| is the list of \textsl{key=values} pairs, |#4| are
@@ -13434,18 +13491,20 @@ version 2005/12/01 or later.
% the tabular is the same as the external alignment of the tabular (that is to
% say the position of the block in its zone of merged cells).
% \begin{macrocode}
- \use:e
- {
- \exp_not:N \begin { tabular } [ \l_@@_vpos_block_str ]
- { @ { } \l_@@_hpos_block_str @ { } }
- }
- #5
- \end { tabular }
+ \bool_if:NT \c_@@_testphase_table_bool
+ { \tag_stop:n { table } }
+ \use:e
+ {
+ \exp_not:N \begin { tabular } [ \l_@@_vpos_block_str ]
+ { @ { } \l_@@_hpos_block_str @ { } }
+ }
+ #5
+ \end { tabular }
}
\group_end:
}
% \end{macrocode}
-% When we are \emph{not} in an environments |{NiceTabular}| (or similar).
+% When we are \emph{not} in an environment |{NiceTabular}| (or similar).
% \begin{macrocode}
{
\group_begin:
@@ -13473,6 +13532,40 @@ version 2005/12/01 or later.
}
}
% \end{macrocode}
+%
+% \bigskip
+% The following macro is for the case of a |\Block| which uses the key~|p|.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_Block_vi:nnnnn #1 #2 #3 #4 #5
+ {
+ \seq_gput_right:Nx \g_@@_blocks_seq
+ {
+ \l_tmpa_tl
+ { \exp_not:n { #3 } }
+ {
+ \group_begin:
+ \exp_not:n { #4 #5 }
+ \group_end:
+ }
+ }
+ }
+% \end{macrocode}
+%
+%
+% \bigskip
+% The following macro is for the case of a |\Block| which uses the key~|p|.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_Block_vii:nnnnn #1 #2 #3 #4 #5
+ {
+ \seq_gput_right:Nx \g_@@_blocks_seq
+ {
+ \l_tmpa_tl
+ { \exp_not:n { #3 } }
+ { \exp_not:n { #4 #5 } }
+ }
+ }
+% \end{macrocode}
+%
%
% \bigskip
% We recall that the options of the command |\Block| are analyzed twice: first
@@ -13523,6 +13616,8 @@ version 2005/12/01 or later.
% Some keys have not a property |.value_required:n| (or similar) because they
% are in |FirstPass|.
% \begin{macrocode}
+ j .code:n = \str_set:Nn \l_@@_hpos_block_str j
+ \bool_set_true:N \l_@@_p_block_bool ,
l .code:n = \str_set:Nn \l_@@_hpos_block_str l ,
r .code:n = \str_set:Nn \l_@@_hpos_block_str r ,
c .code:n = \str_set:Nn \l_@@_hpos_block_str c ,
@@ -13536,9 +13631,11 @@ version 2005/12/01 or later.
T .code:n = \str_set:Nn \l_@@_vpos_block_str T ,
b .code:n = \str_set:Nn \l_@@_vpos_block_str b ,
B .code:n = \str_set:Nn \l_@@_vpos_block_str B ,
- m .code:n = \str_set:Nn \l_@@_vpos_block_str { c } ,
+ m .code:n = \str_set:Nn \l_@@_vpos_block_str c ,
m .value_forbidden:n = true ,
v-center .meta:n = m ,
+ p .code:n = \bool_set_true:N \l_@@_p_block_bool ,
+ p .value_forbidden:n = true ,
name .tl_set:N = \l_@@_block_name_str ,
name .value_required:n = true ,
name .initial:n = ,
@@ -13636,8 +13733,17 @@ version 2005/12/01 or later.
\keys_set:nn { NiceMatrix / Block / SecondPass } { #5 }
% \end{macrocode}
%
+%
+% If the content of the block contains |&|, we will have a special treatement
+% (since the cell must be divided in several sub-cells).
+% \begin{macrocode}
+ \tl_if_in:nnT { #6 } { & } { \bool_set_true:N \l_@@_ampersand_bool }
+% \end{macrocode}
+%
% \begin{macrocode}
- \bool_if:NT \l_@@_vlines_block_bool
+ \bool_lazy_and:nnT
+ \l_@@_vlines_block_bool
+ { ! \l_@@_ampersand_bool }
{
\tl_gput_right:Nx \g_nicematrix_code_after_tl
{
@@ -13768,11 +13874,6 @@ version 2005/12/01 or later.
}
% \end{macrocode}
%
-% \medskip
-% \begin{macrocode}
- \hbox_set:Nn \l_@@_cell_box { \set@color #6 }
- \bool_if:NT \g_@@_rotate_bool \@@_rotate_cell_box:
-% \end{macrocode}
%
% \bigskip
% Let's consider the following |{NiceTabular}|. Because of the instruction
@@ -13825,38 +13926,40 @@ version 2005/12/01 or later.
% The construction of the node corresponding to the merged cells.
% \begin{macrocode}
\pgfpicture
- \pgfrememberpicturepositiononpagetrue
- \pgf@relevantforpicturesizefalse
- \@@_qpoint:n { row - #1 }
- \dim_set_eq:NN \l_tmpa_dim \pgf@y
- \@@_qpoint:n { col - #2 }
- \dim_set_eq:NN \l_tmpb_dim \pgf@x
- \@@_qpoint:n { row - \int_eval:n { \l_@@_last_row_int + 1 } }
- \dim_set_eq:NN \l_@@_tmpc_dim \pgf@y
- \@@_qpoint:n { col - \int_eval:n { \l_@@_last_col_int + 1 } }
- \dim_set_eq:NN \l_@@_tmpd_dim \pgf@x
+ \pgfrememberpicturepositiononpagetrue
+ \pgf@relevantforpicturesizefalse
+ \@@_qpoint:n { row - #1 }
+ \dim_set_eq:NN \l_tmpa_dim \pgf@y
+ \@@_qpoint:n { col - #2 }
+ \dim_set_eq:NN \l_tmpb_dim \pgf@x
+ \@@_qpoint:n { row - \int_eval:n { \l_@@_last_row_int + 1 } }
+ \dim_set_eq:NN \l_@@_tmpc_dim \pgf@y
+ \@@_qpoint:n { col - \int_eval:n { \l_@@_last_col_int + 1 } }
+ \dim_set_eq:NN \l_@@_tmpd_dim \pgf@x
% \end{macrocode}
%
+%
+%
% We construct the node for the block with the name |(#1-#2-block)|.
%
% The function |\@@_pgf_rect_node:nnnnn| takes in as arguments the name of the node
% and the four coordinates of two opposite corner points of the rectangle.
% \begin{macrocode}
- \@@_pgf_rect_node:nnnnn
- { \@@_env: - #1 - #2 - block }
- \l_tmpb_dim \l_tmpa_dim \l_@@_tmpd_dim \l_@@_tmpc_dim
- \str_if_empty:NF \l_@@_block_name_str
- {
- \pgfnodealias
- { \@@_env: - \l_@@_block_name_str }
- { \@@_env: - #1 - #2 - block }
- \str_if_empty:NF \l_@@_name_str
- {
- \pgfnodealias
- { \l_@@_name_str - \l_@@_block_name_str }
- { \@@_env: - #1 - #2 - block }
- }
- }
+ \@@_pgf_rect_node:nnnnn
+ { \@@_env: - #1 - #2 - block }
+ \l_tmpb_dim \l_tmpa_dim \l_@@_tmpd_dim \l_@@_tmpc_dim
+ \str_if_empty:NF \l_@@_block_name_str
+ {
+ \pgfnodealias
+ { \@@_env: - \l_@@_block_name_str }
+ { \@@_env: - #1 - #2 - block }
+ \str_if_empty:NF \l_@@_name_str
+ {
+ \pgfnodealias
+ { \l_@@_name_str - \l_@@_block_name_str }
+ { \@@_env: - #1 - #2 - block }
+ }
+ }
% \end{macrocode}
%
% \medskip
@@ -13867,64 +13970,64 @@ version 2005/12/01 or later.
% normal node is used to put the label.
%
% \begin{macrocode}
- \bool_if:NF \l_@@_hpos_of_block_cap_bool
- {
- \dim_set_eq:NN \l_tmpb_dim \c_max_dim
+ \bool_if:NF \l_@@_hpos_of_block_cap_bool
+ {
+ \dim_set_eq:NN \l_tmpb_dim \c_max_dim
% \end{macrocode}
% The short node is constructed by taking into account the \emph{contents} of
% the columns involved in at least one cell of the block. That's why we have to
% do a loop over the rows of the array.
% \begin{macrocode}
- \int_step_inline:nnn \l_@@_first_row_int \g_@@_row_total_int
- {
+ \int_step_inline:nnn \l_@@_first_row_int \g_@@_row_total_int
+ {
% \end{macrocode}
% We recall that, when a cell is empty, no (normal) node is created in that
% cell. That's why we test the existence of the node before using it.
% \begin{macrocode}
- \cs_if_exist:cT
- { pgf @ sh @ ns @ \@@_env: - ##1 - #2 }
- {
- \seq_if_in:NnF \g_@@_multicolumn_cells_seq { ##1 - #2 }
- {
- \pgfpointanchor { \@@_env: - ##1 - #2 } { west }
- \dim_set:Nn \l_tmpb_dim { \dim_min:nn \l_tmpb_dim \pgf@x }
- }
- }
- }
+ \cs_if_exist:cT
+ { pgf @ sh @ ns @ \@@_env: - ##1 - #2 }
+ {
+ \seq_if_in:NnF \g_@@_multicolumn_cells_seq { ##1 - #2 }
+ {
+ \pgfpointanchor { \@@_env: - ##1 - #2 } { west }
+ \dim_set:Nn \l_tmpb_dim { \dim_min:nn \l_tmpb_dim \pgf@x }
+ }
+ }
+ }
% \end{macrocode}
% If all the cells of the column were empty, |\l_tmpb_dim| has still the same
% value |\c_max_dim|. In that case, you use for |\l_tmpb_dim| the value of the
% position of the vertical rule.
% \begin{macrocode}
- \dim_compare:nNnT \l_tmpb_dim = \c_max_dim
- {
- \@@_qpoint:n { col - #2 }
- \dim_set_eq:NN \l_tmpb_dim \pgf@x
- }
- \dim_set:Nn \l_@@_tmpd_dim { - \c_max_dim }
- \int_step_inline:nnn \l_@@_first_row_int \g_@@_row_total_int
- {
- \cs_if_exist:cT
- { pgf @ sh @ ns @ \@@_env: - ##1 - \int_use:N \l_@@_last_col_int }
- {
- \seq_if_in:NnF \g_@@_multicolumn_cells_seq { ##1 - #2 }
- {
- \pgfpointanchor
- { \@@_env: - ##1 - \int_use:N \l_@@_last_col_int }
- { east }
- \dim_set:Nn \l_@@_tmpd_dim { \dim_max:nn \l_@@_tmpd_dim \pgf@x }
- }
- }
- }
- \dim_compare:nNnT \l_@@_tmpd_dim = { - \c_max_dim }
- {
- \@@_qpoint:n { col - \int_eval:n { \l_@@_last_col_int + 1 } }
- \dim_set_eq:NN \l_@@_tmpd_dim \pgf@x
- }
- \@@_pgf_rect_node:nnnnn
- { \@@_env: - #1 - #2 - block - short }
- \l_tmpb_dim \l_tmpa_dim \l_@@_tmpd_dim \l_@@_tmpc_dim
- }
+ \dim_compare:nNnT \l_tmpb_dim = \c_max_dim
+ {
+ \@@_qpoint:n { col - #2 }
+ \dim_set_eq:NN \l_tmpb_dim \pgf@x
+ }
+ \dim_set:Nn \l_@@_tmpd_dim { - \c_max_dim }
+ \int_step_inline:nnn \l_@@_first_row_int \g_@@_row_total_int
+ {
+ \cs_if_exist:cT
+ { pgf @ sh @ ns @ \@@_env: - ##1 - \int_use:N \l_@@_last_col_int }
+ {
+ \seq_if_in:NnF \g_@@_multicolumn_cells_seq { ##1 - #2 }
+ {
+ \pgfpointanchor
+ { \@@_env: - ##1 - \int_use:N \l_@@_last_col_int }
+ { east }
+ \dim_set:Nn \l_@@_tmpd_dim { \dim_max:nn \l_@@_tmpd_dim \pgf@x }
+ }
+ }
+ }
+ \dim_compare:nNnT \l_@@_tmpd_dim = { - \c_max_dim }
+ {
+ \@@_qpoint:n { col - \int_eval:n { \l_@@_last_col_int + 1 } }
+ \dim_set_eq:NN \l_@@_tmpd_dim \pgf@x
+ }
+ \@@_pgf_rect_node:nnnnn
+ { \@@_env: - #1 - #2 - block - short }
+ \l_tmpb_dim \l_tmpa_dim \l_@@_tmpd_dim \l_@@_tmpc_dim
+ }
% \end{macrocode}
%
% \medskip
@@ -13946,145 +14049,273 @@ version 2005/12/01 or later.
{ south~east }
}
}
+ \endpgfpicture
% \end{macrocode}
%
+% \bigskip
+% \begin{macrocode}
+ \bool_if:NTF \l_@@_ampersand_bool
+ {
+ \seq_set_split:Nnn \l_tmpa_seq { & } { #6 }
+ \int_zero_new:N \l_@@_split_int
+ \int_set:Nn \l_@@_split_int { \seq_count:N \l_tmpa_seq }
+ \pgfpicture
+ \pgfrememberpicturepositiononpagetrue
+ \pgf@relevantforpicturesizefalse
+ \@@_qpoint:n { row - #1 }
+ \dim_set_eq:NN \l_@@_tmpc_dim \pgf@y
+ \@@_qpoint:n { row - \int_eval:n { #3 + 1 } }
+ \dim_set_eq:NN \l_@@_tmpd_dim \pgf@y
+ \@@_qpoint:n { col - #2 }
+ \dim_set_eq:NN \l_tmpa_dim \pgf@x
+ \@@_qpoint:n { col - \int_eval:n { #4 + 1 } }
+ \dim_set:Nn \l_tmpb_dim
+ { ( \pgf@x - \l_tmpa_dim ) / \int_use:N \l_@@_split_int }
+ \bool_lazy_or:nnT
+ \l_@@_vlines_block_bool
+ { \tl_if_eq_p:NN \l_@@_vlines_clist \c_@@_all_tl }
+ {
+ \int_step_inline:nn { \l_@@_split_int - 1 }
+ {
+ \pgfpathmoveto
+ {
+ \pgfpoint
+ { \l_tmpa_dim + ##1 \l_tmpb_dim }
+ \l_@@_tmpc_dim
+ }
+ \pgfpathlineto
+ {
+ \pgfpoint
+ { \l_tmpa_dim + ##1 \l_tmpb_dim }
+ \l_@@_tmpd_dim
+ }
+ \CT@arc@
+ \pgfsetlinewidth { 1.1 \arrayrulewidth }
+ \pgfsetrectcap
+ \pgfusepathqstroke
+ }
+ }
+ \@@_qpoint:n { row - #1 - base }
+ \dim_set_eq:NN \l_@@_tmpc_dim \pgf@y
+ \int_step_inline:nn \l_@@_split_int
+ {
+ \group_begin:
+ \dim_set:Nn \col@sep
+ { \bool_if:NTF \l_@@_tabular_bool \tabcolsep \arraycolsep }
+ \pgftransformshift
+ {
+ \pgfpoint
+ {
+ \str_case:on \l_@@_hpos_block_str
+ {
+ l { \l_tmpa_dim + ##1 \l_tmpb_dim - \l_tmpb_dim + \col@sep}
+ c { \l_tmpa_dim + ##1 \l_tmpb_dim - 0.5 \l_tmpb_dim }
+ r { \l_tmpa_dim + ##1 \l_tmpb_dim - \col@sep }
+ }
+ }
+ { \l_@@_tmpc_dim }
+ }
+ \pgfset
+ {
+ inner~xsep = \c_zero_dim ,
+ inner~ysep = \c_zero_dim
+ }
+ \pgfnode
+ { rectangle }
+ {
+ \str_case:on \l_@@_hpos_block_str
+ {
+ c { base }
+ l { base~west }
+ r { base~east }
+ }
+ }
+ { \seq_item:Nn \l_tmpa_seq { ##1 } } { } { }
+ \group_end:
+ }
+ \endpgfpicture
+ }
+ {
+ \bool_if:NTF \l_@@_p_block_bool
+ {
+% \end{macrocode}
+% When the final user has used the key~|p|, we have to compute the width.
+% \begin{macrocode}
+ \pgfpicture
+ \pgfrememberpicturepositiononpagetrue
+ \pgf@relevantforpicturesizefalse
+ \bool_if:NTF \l_@@_hpos_of_block_cap_bool
+ {
+ \@@_qpoint:n { col - #2 }
+ \dim_gset_eq:NN \g_tmpa_dim \pgf@x
+ \@@_qpoint:n { col - \int_eval:n { \l_@@_last_col_int + 1 } }
+ }
+ {
+ \pgfpointanchor { \@@_env: - #1 - #2 - block - short } { west }
+ \dim_gset_eq:NN \g_tmpa_dim \pgf@x
+ \pgfpointanchor { \@@_env: - #1 - #2 - block - short } { east }
+ }
+ \dim_gset:Nn \g_tmpb_dim { \pgf@x - \g_tmpa_dim }
+ \endpgfpicture
+ \hbox_set:Nn \l_@@_cell_box
+ {
+ \begin { minipage } [ \str_lowercase:o \l_@@_vpos_block_str ]
+ { \g_tmpb_dim }
+ \str_case:on \l_@@_hpos_block_str
+ { c \centering r \raggedleft l \raggedright j { } }
+ #6
+ \end { minipage }
+ }
+ }
+ { \hbox_set:Nn \l_@@_cell_box { \set@color #6 } }
+ \bool_if:NT \g_@@_rotate_bool \@@_rotate_cell_box:
+% \end{macrocode}
%
-% \medskip
+% \bigskip
% Now, we will put the label of the block.
% \begin{macrocode}
- \bool_lazy_any:nTF
- {
- { \str_if_eq_p:on \l_@@_vpos_block_str { c } }
- { \str_if_eq_p:on \l_@@_vpos_block_str { T } }
- { \str_if_eq_p:on \l_@@_vpos_block_str { B } }
- }
+ \pgfpicture
+ \pgfrememberpicturepositiononpagetrue
+ \pgf@relevantforpicturesizefalse
+ \bool_lazy_any:nTF
+ {
+ { \str_if_eq_p:on \l_@@_vpos_block_str { c } }
+ { \str_if_eq_p:on \l_@@_vpos_block_str { T } }
+ { \str_if_eq_p:on \l_@@_vpos_block_str { B } }
+ }
% \end{macrocode}
% \medskip
% \begin{macrocode}
- {
+ {
% \end{macrocode}
% If we are in the first column, we must put the block as if it was with the key~|r|.
% \begin{macrocode}
- \int_if_zero:nT { #2 } { \str_set_eq:NN \l_@@_hpos_block_str \c_@@_r_str }
+ \int_if_zero:nT { #2 } { \str_set_eq:NN \l_@@_hpos_block_str \c_@@_r_str }
% \end{macrocode}
% If we are in the last column, we must put the block as if it was with the key~|l|.
% \begin{macrocode}
- \bool_if:nT \g_@@_last_col_found_bool
- {
- \int_compare:nNnT { #2 } = \g_@@_col_total_int
- { \str_set_eq:NN \l_@@_hpos_block_str \c_@@_l_str }
- }
+ \bool_if:nT \g_@@_last_col_found_bool
+ {
+ \int_compare:nNnT { #2 } = \g_@@_col_total_int
+ { \str_set_eq:NN \l_@@_hpos_block_str \c_@@_l_str }
+ }
% \end{macrocode}
% |\l_tmpa_tl| will contain the anchor of the \textsc{pgf} node which will be used.
% \begin{macrocode}
- \tl_set:Nx \l_tmpa_tl
- {
- \str_case:on \l_@@_vpos_block_str
+ \tl_set:Nx \l_tmpa_tl
{
- c {
- \str_case:on \l_@@_hpos_block_str
- {
- c { center }
- l { west }
- r { east }
- }
+ \str_case:on \l_@@_vpos_block_str
+ {
+ c {
+ \str_case:on \l_@@_hpos_block_str
+ {
+ c { center }
+ l { west }
+ r { east }
+ j { center }
+ }
- }
- T {
- \str_case:on \l_@@_hpos_block_str
- {
- c { north }
- l { north~west }
- r { north~east }
- }
+ }
+ T {
+ \str_case:on \l_@@_hpos_block_str
+ {
+ c { north }
+ l { north~west }
+ r { north~east }
+ j { north }
+ }
- }
- B {
- \str_case:on \l_@@_hpos_block_str
- {
- c { south}
- l { south~west }
- r { south~east }
- }
+ }
+ B {
+ \str_case:on \l_@@_hpos_block_str
+ {
+ c { south }
+ l { south~west }
+ r { south~east }
+ j { south }
+ }
- }
+ }
+ }
}
- }
% \end{macrocode}
% \begin{macrocode}
- \pgftransformshift
- {
- \pgfpointanchor
- {
- \@@_env: - #1 - #2 - block
- \bool_if:NF \l_@@_hpos_of_block_cap_bool { - short }
+ \pgftransformshift
+ {
+ \pgfpointanchor
+ {
+ \@@_env: - #1 - #2 - block
+ \bool_if:NF \l_@@_hpos_of_block_cap_bool { - short }
+ }
+ { \l_tmpa_tl }
}
+ \pgfset
+ {
+ inner~xsep = \c_zero_dim ,
+ inner~ysep = \c_zero_dim
+ }
+ \pgfnode
+ { rectangle }
{ \l_tmpa_tl }
- }
- \pgfset
- {
- inner~xsep = \c_zero_dim ,
- inner~ysep = \c_zero_dim
- }
- \pgfnode
- { rectangle }
- { \l_tmpa_tl }
- { \box_use_drop:N \l_@@_cell_box } { } { }
- }
+ { \box_use_drop:N \l_@@_cell_box } { } { }
+ }
% \end{macrocode}
% End of the case when |\l_@@_vpos_block_str| is equal to |c|, |T| or |B|.
% Now, the other cases.
% \begin{macrocode}
- {
+ {
% \end{macrocode}
%
% \begin{macrocode}
- \pgfextracty \l_tmpa_dim
- {
- \@@_qpoint:n
+ \pgfextracty \l_tmpa_dim
{
- row - \str_if_eq:onTF \l_@@_vpos_block_str { b } { #3 } { #1 }
- - base
+ \@@_qpoint:n
+ {
+ row - \str_if_eq:onTF \l_@@_vpos_block_str { b } { #3 } { #1 }
+ - base
+ }
}
- }
- \dim_sub:Nn \l_tmpa_dim { 0.5 \arrayrulewidth }
+ \dim_sub:Nn \l_tmpa_dim { 0.5 \arrayrulewidth }
% \end{macrocode}
% We retrieve (in |\pgf@x|) the $x$-value of the center of the block.
% \begin{macrocode}
- \pgfpointanchor
- {
- \@@_env: - #1 - #2 - block
- \bool_if:NF \l_@@_hpos_of_block_cap_bool { - short }
- }
- {
- \str_case:on \l_@@_hpos_block_str
+ \pgfpointanchor
+ {
+ \@@_env: - #1 - #2 - block
+ \bool_if:NF \l_@@_hpos_of_block_cap_bool { - short }
+ }
{
- c { center }
- l { west }
- r { east }
- }
- }
+ \str_case:on \l_@@_hpos_block_str
+ {
+ c { center }
+ l { west }
+ r { east }
+ j { center }
+ }
+ }
% \end{macrocode}
% We put the label of the block which has been composed in |\l_@@_cell_box|.
% \begin{macrocode}
- \pgftransformshift { \pgfpoint \pgf@x \l_tmpa_dim }
- \pgfset { inner~sep = \c_zero_dim }
- \pgfnode
- { rectangle }
- {
- \str_case:on \l_@@_hpos_block_str
+ \pgftransformshift { \pgfpoint \pgf@x \l_tmpa_dim }
+ \pgfset { inner~sep = \c_zero_dim }
+ \pgfnode
+ { rectangle }
{
- c { base }
- l { base~west }
- r { base~east }
+ \str_case:on \l_@@_hpos_block_str
+ {
+ c { base }
+ l { base~west }
+ r { base~east }
+ j { base }
+ }
}
- }
- { \box_use_drop:N \l_@@_cell_box } { } { }
- }
+ { \box_use_drop:N \l_@@_cell_box } { } { }
+ }
% \end{macrocode}
%
% \begin{macrocode}
- \endpgfpicture
+ \endpgfpicture
+ }
\group_end:
}
% \end{macrocode}
@@ -15764,9 +15995,9 @@ version 2005/12/01 or later.
% \begin{macrocode}
\NewDocumentCommand \@@_ShowCellNames_CodeBefore { }
{
- \dim_zero_new:N \g_@@_tmpc_dim
- \dim_zero_new:N \g_@@_tmpd_dim
- \dim_zero_new:N \g_@@_tmpe_dim
+ \dim_gzero_new:N \g_@@_tmpc_dim
+ \dim_gzero_new:N \g_@@_tmpd_dim
+ \dim_gzero_new:N \g_@@_tmpe_dim
\int_step_inline:nn \c@iRow
{
\begin { pgfpicture }
@@ -15850,9 +16081,9 @@ version 2005/12/01 or later.
\pgfusepathqfill
\endpgfpicture
}
- \dim_zero_new:N \g_@@_tmpc_dim
- \dim_zero_new:N \g_@@_tmpd_dim
- \dim_zero_new:N \g_@@_tmpe_dim
+ \dim_gzero_new:N \g_@@_tmpc_dim
+ \dim_gzero_new:N \g_@@_tmpd_dim
+ \dim_gzero_new:N \g_@@_tmpe_dim
\int_step_inline:nn \c@iRow
{
\bool_if:NTF \l_@@_in_code_after_bool
@@ -16224,6 +16455,15 @@ version 2005/12/01 or later.
}
% \end{macrocode}
%
+% \begin{macrocode}
+\@@_msg_new:nn { empty~preamble }
+ {
+ Empty~preamble.\\
+ The~preamble~of~your~\@@_full_name_env:\ is~empty.\\
+ This~error~is~fatal.
+ }
+% \end{macrocode}
+%
%
% \begin{macrocode}
\@@_msg_new:nn { in~first~col }
@@ -16471,7 +16711,7 @@ version 2005/12/01 or later.
Incompatible~keys.\\
You~can't~use~the~keys~'hlines',~'vlines'~or~'hvlines'~for~a~
'\token_to_str:N \Block'~when~the~key~'color'~or~'draw'~is~used.\\
- Maybe~it~will~possible~in~future~version.\\
+ However,~you~can~put~several~commands~\token_to_str:N \Block.\\
Your~key~will~be~discarded.
}
% \end{macrocode}
@@ -16512,7 +16752,7 @@ version 2005/12/01 or later.
\@@_msg_new:nn { ragged2e~not~loaded }
{
You~have~to~load~'ragged2e'~in~order~to~use~the~key~'\l_keys_key_str'~in~
- your~column~'\l_@@_vpos_col_str'~(or~'X').~The~key~'\str_lowercase:V
+ your~column~'\l_@@_vpos_col_str'~(or~'X').~The~key~'\str_lowercase:o
\l_keys_key_str'~will~be~used~instead.
}
% \end{macrocode}
@@ -17121,6 +17361,7 @@ version 2005/12/01 or later.
create-extra-nodes,~
create-medium-nodes,~
create-large-nodes,~
+ custom-line,~
delimiters~(several~subkeys),~
end-of-row,~
first-col,~
diff --git a/macros/latex/contrib/nicematrix/nicematrix-code.pdf b/macros/latex/contrib/nicematrix/nicematrix-code.pdf
new file mode 100644
index 0000000000..4b6d6c32f7
--- /dev/null
+++ b/macros/latex/contrib/nicematrix/nicematrix-code.pdf
@@ -0,0 +1,52604 @@
+%PDF-1.5
+%
+4 0 obj
+<< /S /GoTo /D (section.0.1) >>
+endobj
+7 0 obj
+(\376\377\0001\000\040\000D\000e\000c\000l\000a\000r\000a\000t\000i\000o\000n\000\040\000o\000f\000\040\000t\000h\000e\000\040\000p\000a\000c\000k\000a\000g\000e\000\040\000a\000n\000d\000\040\000p\000a\000c\000k\000a\000g\000e\000s\000\040\000l\000o\000a\000d\000e\000d)
+
+endobj
+8 0 obj
+<< /S /GoTo /D (section.0.2) >>
+endobj
+11 0 obj
+(\376\377\0002\000\040\000S\000e\000c\000u\000r\000i\000t\000y\000\040\000t\000e\000s\000t)
+
+endobj
+12 0 obj
+<< /S /GoTo /D (section.0.3) >>
+endobj
+15 0 obj
+(\376\377\0003\000\040\000C\000o\000l\000l\000e\000c\000t\000i\000n\000g\000\040\000o\000p\000t\000i\000o\000n\000s)
+
+endobj
+16 0 obj
+<< /S /GoTo /D (section.0.4) >>
+endobj
+19 0 obj
+(\376\377\0004\000\040\000T\000e\000c\000h\000n\000i\000c\000a\000l\000\040\000d\000e\000f\000i\000n\000i\000t\000i\000o\000n\000s)
+
+endobj
+20 0 obj
+<< /S /GoTo /D (section.0.5) >>
+endobj
+23 0 obj
+(\376\377\0005\000\040\000P\000a\000r\000a\000m\000e\000t\000e\000r\000s)
+
+endobj
+24 0 obj
+<< /S /GoTo /D (section.0.6) >>
+endobj
+27 0 obj
+(\376\377\0006\000\040\000T\000h\000e\000\040\000c\000o\000m\000m\000a\000n\000d\000\040\000\134\000t\000a\000b\000u\000l\000a\000r\000n\000o\000t\000e)
+
+endobj
+28 0 obj
+<< /S /GoTo /D (section.0.7) >>
+endobj
+31 0 obj
+(\376\377\0007\000\040\000C\000o\000m\000m\000a\000n\000d\000\040\000f\000o\000r\000\040\000c\000r\000e\000a\000t\000i\000o\000n\000\040\000o\000f\000\040\000r\000e\000c\000t\000a\000n\000g\000l\000e\000\040\000n\000o\000d\000e\000s)
+
+endobj
+32 0 obj
+<< /S /GoTo /D (section.0.8) >>
+endobj
+35 0 obj
+(\376\377\0008\000\040\000T\000h\000e\000\040\000o\000p\000t\000i\000o\000n\000s)
+
+endobj
+36 0 obj
+<< /S /GoTo /D (section.0.9) >>
+endobj
+39 0 obj
+(\376\377\0009\000\040\000I\000m\000p\000o\000r\000t\000a\000n\000t\000\040\000c\000o\000d\000e\000\040\000u\000s\000e\000d\000\040\000b\000y\000\040\000\173\000N\000i\000c\000e\000A\000r\000r\000a\000y\000W\000i\000t\000h\000D\000e\000l\000i\000m\000s\000\175\000\040)
+
+endobj
+40 0 obj
+<< /S /GoTo /D (section.0.10) >>
+endobj
+43 0 obj
+(\376\377\0001\0000\000\040\000T\000h\000e\000\040\000\134\000C\000o\000d\000e\000B\000e\000f\000o\000r\000e)
+
+endobj
+44 0 obj
+<< /S /GoTo /D (section.0.11) >>
+endobj
+47 0 obj
+(\376\377\0001\0001\000\040\000T\000h\000e\000\040\000e\000n\000v\000i\000r\000o\000n\000m\000e\000n\000t\000\040\000\173\000N\000i\000c\000e\000A\000r\000r\000a\000y\000W\000i\000t\000h\000D\000e\000l\000i\000m\000s\000\175)
+
+endobj
+48 0 obj
+<< /S /GoTo /D (section.0.12) >>
+endobj
+51 0 obj
+(\376\377\0001\0002\000\040\000W\000e\000\040\000c\000o\000n\000s\000t\000r\000u\000c\000t\000\040\000t\000h\000e\000\040\000p\000r\000e\000a\000m\000b\000l\000e\000\040\000o\000f\000\040\000t\000h\000e\000\040\000a\000r\000r\000a\000y)
+
+endobj
+52 0 obj
+<< /S /GoTo /D (section.0.13) >>
+endobj
+55 0 obj
+(\376\377\0001\0003\000\040\000T\000h\000e\000\040\000r\000e\000d\000e\000f\000i\000n\000i\000t\000i\000o\000n\000\040\000o\000f\000\040\000\134\000m\000u\000l\000t\000i\000c\000o\000l\000u\000m\000n)
+
+endobj
+56 0 obj
+<< /S /GoTo /D (section.0.14) >>
+endobj
+59 0 obj
+(\376\377\0001\0004\000\040\000T\000h\000e\000\040\000e\000n\000v\000i\000r\000o\000n\000m\000e\000n\000t\000\040\000\173\000N\000i\000c\000e\000M\000a\000t\000r\000i\000x\000\175\000\040\000a\000n\000d\000\040\000i\000t\000s\000\040\000v\000a\000r\000i\000a\000n\000t\000s)
+
+endobj
+60 0 obj
+<< /S /GoTo /D (section.0.15) >>
+endobj
+63 0 obj
+(\376\377\0001\0005\000\040\000\173\000N\000i\000c\000e\000T\000a\000b\000u\000l\000a\000r\000\175\000,\000\040\000\173\000N\000i\000c\000e\000T\000a\000b\000u\000l\000a\000r\000X\000\175\000\040\000a\000n\000d\000\040\000\173\000N\000i\000c\000e\000T\000a\000b\000u\000l\000a\000r\000*\000\175)
+
+endobj
+64 0 obj
+<< /S /GoTo /D (section.0.16) >>
+endobj
+67 0 obj
+(\376\377\0001\0006\000\040\000A\000f\000t\000e\000r\000\040\000t\000h\000e\000\040\000c\000o\000n\000s\000t\000r\000u\000c\000t\000i\000o\000n\000\040\000o\000f\000\040\000t\000h\000e\000\040\000a\000r\000r\000a\000y)
+
+endobj
+68 0 obj
+<< /S /GoTo /D (section.0.17) >>
+endobj
+71 0 obj
+(\376\377\0001\0007\000\040\000W\000e\000\040\000d\000r\000a\000w\000\040\000t\000h\000e\000\040\000d\000o\000t\000t\000e\000d\000\040\000l\000i\000n\000e\000s)
+
+endobj
+72 0 obj
+<< /S /GoTo /D (section.0.18) >>
+endobj
+75 0 obj
+(\376\377\0001\0008\000\040\000T\000h\000e\000\040\000a\000c\000t\000u\000a\000l\000\040\000i\000n\000s\000t\000r\000u\000c\000t\000i\000o\000n\000s\000\040\000f\000o\000r\000\040\000d\000r\000a\000w\000i\000n\000g\000\040\000t\000h\000e\000\040\000d\000o\000t\000t\000e\000d\000\040\000l\000i\000n\000e\000s\000\040\000w\000i\000t\000h\000\040\000T\000i\000k\000z)
+
+endobj
+76 0 obj
+<< /S /GoTo /D (section.0.19) >>
+endobj
+79 0 obj
+(\376\377\0001\0009\000\040\000U\000s\000e\000r\000\040\000c\000o\000m\000m\000a\000n\000d\000s\000\040\000a\000v\000a\000i\000l\000a\000b\000l\000e\000\040\000i\000n\000\040\000t\000h\000e\000\040\000n\000e\000w\000\040\000e\000n\000v\000i\000r\000o\000n\000m\000e\000n\000t\000s)
+
+endobj
+80 0 obj
+<< /S /GoTo /D (section.0.20) >>
+endobj
+83 0 obj
+(\376\377\0002\0000\000\040\000T\000h\000e\000\040\000c\000o\000m\000m\000a\000n\000d\000\040\000\134\000l\000i\000n\000e\000\040\000a\000c\000c\000e\000s\000s\000i\000b\000l\000e\000\040\000i\000n\000\040\000c\000o\000d\000e\000-\000a\000f\000t\000e\000r)
+
+endobj
+84 0 obj
+<< /S /GoTo /D (section.0.21) >>
+endobj
+87 0 obj
+(\376\377\0002\0001\000\040\000T\000h\000e\000\040\000c\000o\000m\000m\000a\000n\000d\000\040\000\134\000R\000o\000w\000S\000t\000y\000l\000e)
+
+endobj
+88 0 obj
+<< /S /GoTo /D (section.0.22) >>
+endobj
+91 0 obj
+(\376\377\0002\0002\000\040\000C\000o\000l\000o\000r\000s\000\040\000o\000f\000\040\000c\000e\000l\000l\000s\000,\000\040\000r\000o\000w\000s\000\040\000a\000n\000d\000\040\000c\000o\000l\000u\000m\000n\000s)
+
+endobj
+92 0 obj
+<< /S /GoTo /D (section.0.23) >>
+endobj
+95 0 obj
+(\376\377\0002\0003\000\040\000T\000h\000e\000\040\000v\000e\000r\000t\000i\000c\000a\000l\000\040\000a\000n\000d\000\040\000h\000o\000r\000i\000z\000o\000n\000t\000a\000l\000\040\000r\000u\000l\000e\000s)
+
+endobj
+96 0 obj
+<< /S /GoTo /D (section.0.24) >>
+endobj
+99 0 obj
+(\376\377\0002\0004\000\040\000T\000h\000e\000\040\000e\000m\000p\000t\000y\000\040\000c\000o\000r\000n\000e\000r\000s)
+
+endobj
+100 0 obj
+<< /S /GoTo /D (section.0.25) >>
+endobj
+103 0 obj
+(\376\377\0002\0005\000\040\000T\000h\000e\000\040\000e\000n\000v\000i\000r\000o\000n\000m\000e\000n\000t\000\040\000\173\000N\000i\000c\000e\000M\000a\000t\000r\000i\000x\000B\000l\000o\000c\000k\000\175)
+
+endobj
+104 0 obj
+<< /S /GoTo /D (section.0.26) >>
+endobj
+107 0 obj
+(\376\377\0002\0006\000\040\000T\000h\000e\000\040\000e\000x\000t\000r\000a\000\040\000n\000o\000d\000e\000s)
+
+endobj
+108 0 obj
+<< /S /GoTo /D (section.0.27) >>
+endobj
+111 0 obj
+(\376\377\0002\0007\000\040\000T\000h\000e\000\040\000b\000l\000o\000c\000k\000s)
+
+endobj
+112 0 obj
+<< /S /GoTo /D (section.0.28) >>
+endobj
+115 0 obj
+(\376\377\0002\0008\000\040\000H\000o\000w\000\040\000t\000o\000\040\000d\000r\000a\000w\000\040\000t\000h\000e\000\040\000d\000o\000t\000t\000e\000d\000\040\000l\000i\000n\000e\000s\000\040\000t\000r\000a\000n\000s\000p\000a\000r\000e\000n\000t\000l\000y)
+
+endobj
+116 0 obj
+<< /S /GoTo /D (section.0.29) >>
+endobj
+119 0 obj
+(\376\377\0002\0009\000\040\000A\000u\000t\000o\000m\000a\000t\000i\000c\000\040\000a\000r\000r\000a\000y\000s)
+
+endobj
+120 0 obj
+<< /S /GoTo /D (section.0.30) >>
+endobj
+123 0 obj
+(\376\377\0003\0000\000\040\000T\000h\000e\000\040\000r\000e\000d\000e\000f\000i\000n\000i\000t\000i\000o\000n\000\040\000o\000f\000\040\000t\000h\000e\000\040\000c\000o\000m\000m\000a\000n\000d\000\040\000\134\000d\000o\000t\000f\000i\000l\000l\000\040)
+
+endobj
+124 0 obj
+<< /S /GoTo /D (section.0.31) >>
+endobj
+127 0 obj
+(\376\377\0003\0001\000\040\000T\000h\000e\000\040\000c\000o\000m\000m\000a\000n\000d\000\040\000\134\000d\000i\000a\000g\000b\000o\000x)
+
+endobj
+128 0 obj
+<< /S /GoTo /D (section.0.32) >>
+endobj
+131 0 obj
+(\376\377\0003\0002\000\040\000T\000h\000e\000\040\000k\000e\000y\000w\000o\000r\000d\000\040\000\134\000C\000o\000d\000e\000A\000f\000t\000e\000r)
+
+endobj
+132 0 obj
+<< /S /GoTo /D (section.0.33) >>
+endobj
+135 0 obj
+(\376\377\0003\0003\000\040\000T\000h\000e\000\040\000d\000e\000l\000i\000m\000i\000t\000e\000r\000s\000\040\000i\000n\000\040\000t\000h\000e\000\040\000p\000r\000e\000a\000m\000b\000l\000e)
+
+endobj
+136 0 obj
+<< /S /GoTo /D (section.0.34) >>
+endobj
+139 0 obj
+(\376\377\0003\0004\000\040\000T\000h\000e\000\040\000c\000o\000m\000m\000a\000n\000d\000\040\000\134\000S\000u\000b\000M\000a\000t\000r\000i\000x)
+
+endobj
+140 0 obj
+<< /S /GoTo /D (section.0.35) >>
+endobj
+143 0 obj
+(\376\377\0003\0005\000\040\000L\000e\000s\000\040\000c\000o\000m\000m\000a\000n\000d\000e\000s\000\040\000\134\000U\000n\000d\000e\000r\000B\000r\000a\000c\000e\000\040\000e\000t\000\040\000\134\000O\000v\000e\000r\000B\000r\000a\000c\000e)
+
+endobj
+144 0 obj
+<< /S /GoTo /D (section.0.36) >>
+endobj
+147 0 obj
+(\376\377\0003\0006\000\040\000T\000h\000e\000\040\000c\000o\000m\000m\000a\000n\000d\000\040\000T\000i\000k\000z\000E\000v\000e\000r\000y\000C\000e\000l\000l)
+
+endobj
+148 0 obj
+<< /S /GoTo /D (section.0.37) >>
+endobj
+151 0 obj
+(\376\377\0003\0007\000\040\000T\000h\000e\000\040\000c\000o\000m\000m\000a\000n\000d\000\040\000\134\000S\000h\000o\000w\000C\000e\000l\000l\000N\000a\000m\000e\000s)
+
+endobj
+152 0 obj
+<< /S /GoTo /D (section.0.38) >>
+endobj
+155 0 obj
+(\376\377\0003\0008\000\040\000W\000e\000\040\000p\000r\000o\000c\000e\000s\000s\000\040\000t\000h\000e\000\040\000o\000p\000t\000i\000o\000n\000s\000\040\000a\000t\000\040\000p\000a\000c\000k\000a\000g\000e\000\040\000l\000o\000a\000d\000i\000n\000g)
+
+endobj
+156 0 obj
+<< /S /GoTo /D (section.0.39) >>
+endobj
+159 0 obj
+(\376\377\0003\0009\000\040\000A\000b\000o\000u\000t\000\040\000t\000h\000e\000\040\000p\000a\000c\000k\000a\000g\000e\000\040\000u\000n\000d\000e\000r\000s\000c\000o\000r\000e)
+
+endobj
+160 0 obj
+<< /S /GoTo /D (section.0.40) >>
+endobj
+163 0 obj
+(\376\377\0004\0000\000\040\000E\000r\000r\000o\000r\000\040\000m\000e\000s\000s\000a\000g\000e\000s\000\040\000o\000f\000\040\000t\000h\000e\000\040\000p\000a\000c\000k\000a\000g\000e)
+
+endobj
+164 0 obj
+<< /S /GoTo /D (toc1.1) >>
+endobj
+167 0 obj
+(\376\377\000C\000o\000n\000t\000e\000n\000t\000s)
+
+endobj
+168 0 obj
+<< /S /GoTo /D [ 169 0 R /FitBH 771.02165 ] >>
+endobj
+171 0 obj
+<< /Filter /FlateDecode /Length 2057 >>
+stream
+xڝY[o~ϯ[`B7EZt2vv@,Ʀmud+ɹ Ëbq>$RH;߹)YNY `X2_a cI,LdM~Ms~A3. K'Iv0Ӌsӯzm`a' 'y|LU,VwMq)I0Fs
+gaiF/vNJ"p'D.ӥeLgƳu"N0O))\/w Ch*Rİ  e,
+4aD`Gd ]5͟O1לp!bi
+d[4Mݴh
+zՋnglQWͬ_MS^޴=h:tv|ީ¨KcpGunZ8kMBBdŽwaBy x_0,ޭhP;^r8l qs 0А =좃lru/!ĴmqSU]bcbL q z`1r@5BpR4GߕNWIx\hC0Xi Z#OhP8JűE}_4^X7tl̷Ɉ8E9LB4<GKR~k'pK.nRJ qoA*~~ VwMu}4uO_?>Fo!B=ufD:CoCKcdX&AJZHzT5MF }hףP3D,1"BP'aDM4KHq@}LL15-gC[6iP揄nᄧiCkYpB;оlLo֝ټ *Q 6㠴&xuQ®Ц5~wc0
+uϹVNkꝍ5mc5xh]=c@}KP[S˻;`.(
+Za[7>/s;3Nf-Gg[9BԔHI>~S>PiAX8vM~pl|zT [rG\".:ƫ!sm( N^dW:xhQeU[a: m!됣I
+yI,:4P.1`R}Zuy P۽mחם|pmWF qbumӻ޽ɇI;B#95 ބ'|*Ak@YblNJ<V%?/+oذµx5{3:?e;~7?Ȼo۳_%
+k2@Si}(ܼ8}@[=qOQ腏/ڊC.8ˡBf
+endstream
+endobj
+169 0 obj
+<< /Type /Page /Contents 171 0 R /Resources 170 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 204 0 R >>
+endobj
+172 0 obj
+<< /D [ 169 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+173 0 obj
+<< /D [ 169 0 R /XYZ 79.37 771.024 null ] >>
+endobj
+5 0 obj
+<< /D [ 169 0 R /XYZ 79.37 513.625 null ] >>
+endobj
+188 0 obj
+<< /D [ 169 0 R /XYZ 77.103 372.389 null ] >>
+endobj
+190 0 obj
+<< /D [ 169 0 R /XYZ 77.103 361.43 null ] >>
+endobj
+191 0 obj
+<< /D [ 169 0 R /XYZ 77.103 332.538 null ] >>
+endobj
+192 0 obj
+<< /D [ 169 0 R /XYZ 77.103 321.579 null ] >>
+endobj
+193 0 obj
+<< /D [ 169 0 R /XYZ 77.103 310.62 null ] >>
+endobj
+194 0 obj
+<< /D [ 169 0 R /XYZ 77.103 299.661 null ] >>
+endobj
+195 0 obj
+<< /D [ 169 0 R /XYZ 77.103 288.702 null ] >>
+endobj
+196 0 obj
+<< /D [ 169 0 R /XYZ 77.103 277.744 null ] >>
+endobj
+197 0 obj
+<< /D [ 169 0 R /XYZ 77.103 210.994 null ] >>
+endobj
+198 0 obj
+<< /D [ 169 0 R /XYZ 78.427 178.117 null ] >>
+endobj
+199 0 obj
+<< /D [ 169 0 R /XYZ 78.427 147.233 null ] >>
+endobj
+200 0 obj
+<< /D [ 169 0 R /XYZ 78.427 136.274 null ] >>
+endobj
+201 0 obj
+<< /D [ 169 0 R /XYZ 78.427 125.315 null ] >>
+endobj
+170 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F23 174 0 R /F24 175 0 R /F32 176 0 R /F41 177 0 R /F52 178 0 R /F61 179 0 R /F60 180 0 R /F62 181 0 R /F63 182 0 R /F64 183 0 R /F19 184 0 R /F65 185 0 R /F20 186 0 R /F67 187 0 R /F68 189 0 R /F47 202 0 R /F53 203 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+207 0 obj
+<< /Filter /FlateDecode /Length 1988 >>
+stream
+xڵZ]}_a(2y؇n!hlڣV\IdKt]I$y{y.l3g?ɴ}$)g\b}áQ<㳜҄8vψ-~9tH5X$2"y%#jy.v];`V]s{k0]vs,|_7V*_TK-?F3'<BRnjIj)*eT!*sƕD JY>4ExfJ9"͍iLWTvU +y#2!42H PB}eg℉$A9zu9+uB25q,1d
+LVadŕɀhk'mZvp}
+}
+۞j/*@Wz ^ᢿr|WTVOaJ&(EB#=Ş'XJOMC'ew5fym&ǣ%΢[ d Xj=ٷereO!ϪݛO6׾ߗu:'-Or\]۸V8ZfO$rɤ-HV$Vj<989ZH#ϲL$7q^٪^>$&*Y`AJiP:Z,)I{0N<MQrt nZ
+aO=E
+b{֋^; 4bI\KG ж&f*G+n%q"3A\֏_cSnM)P0:?Qe F|wwT*WUPG aPo)z7]_V^yƒTɉ<8]^gKEκYW"^dfLB!2C$%
+R 4;ю},Yn9EHG1Pf{)6,}\CfYI
+GҴ`s01JjZd\q@zJ//mej3`i~w'u[׭=|vRDujޒNtYjp7`
+_N
+endstream
+endobj
+206 0 obj
+<< /Type /Page /Contents 207 0 R /Resources 205 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 204 0 R >>
+endobj
+208 0 obj
+<< /D [ 206 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+209 0 obj
+<< /D [ 206 0 R /XYZ 78.427 768.832 null ] >>
+endobj
+210 0 obj
+<< /D [ 206 0 R /XYZ 78.427 757.873 null ] >>
+endobj
+211 0 obj
+<< /D [ 206 0 R /XYZ 78.427 746.914 null ] >>
+endobj
+212 0 obj
+<< /D [ 206 0 R /XYZ 78.427 735.955 null ] >>
+endobj
+213 0 obj
+<< /D [ 206 0 R /XYZ 78.427 724.996 null ] >>
+endobj
+214 0 obj
+<< /D [ 206 0 R /XYZ 78.427 714.037 null ] >>
+endobj
+215 0 obj
+<< /D [ 206 0 R /XYZ 78.427 703.078 null ] >>
+endobj
+216 0 obj
+<< /D [ 206 0 R /XYZ 78.427 692.119 null ] >>
+endobj
+217 0 obj
+<< /D [ 206 0 R /XYZ 78.427 625.37 null ] >>
+endobj
+218 0 obj
+<< /D [ 206 0 R /XYZ 78.427 614.411 null ] >>
+endobj
+219 0 obj
+<< /D [ 206 0 R /XYZ 78.427 603.452 null ] >>
+endobj
+220 0 obj
+<< /D [ 206 0 R /XYZ 78.427 592.493 null ] >>
+endobj
+221 0 obj
+<< /D [ 206 0 R /XYZ 78.427 581.534 null ] >>
+endobj
+222 0 obj
+<< /D [ 206 0 R /XYZ 78.427 570.575 null ] >>
+endobj
+223 0 obj
+<< /D [ 206 0 R /XYZ 78.427 517.773 null ] >>
+endobj
+224 0 obj
+<< /D [ 206 0 R /XYZ 78.427 506.814 null ] >>
+endobj
+225 0 obj
+<< /D [ 206 0 R /XYZ 78.427 465.967 null ] >>
+endobj
+226 0 obj
+<< /D [ 206 0 R /XYZ 78.427 455.009 null ] >>
+endobj
+227 0 obj
+<< /D [ 206 0 R /XYZ 78.427 444.05 null ] >>
+endobj
+228 0 obj
+<< /D [ 206 0 R /XYZ 78.427 433.091 null ] >>
+endobj
+229 0 obj
+<< /D [ 206 0 R /XYZ 78.427 422.132 null ] >>
+endobj
+230 0 obj
+<< /D [ 206 0 R /XYZ 78.427 411.173 null ] >>
+endobj
+231 0 obj
+<< /D [ 206 0 R /XYZ 78.427 380.289 null ] >>
+endobj
+232 0 obj
+<< /D [ 206 0 R /XYZ 78.427 369.33 null ] >>
+endobj
+233 0 obj
+<< /D [ 206 0 R /XYZ 78.427 358.371 null ] >>
+endobj
+234 0 obj
+<< /D [ 206 0 R /XYZ 78.427 347.412 null ] >>
+endobj
+235 0 obj
+<< /D [ 206 0 R /XYZ 78.427 336.453 null ] >>
+endobj
+236 0 obj
+<< /D [ 206 0 R /XYZ 78.427 325.494 null ] >>
+endobj
+237 0 obj
+<< /D [ 206 0 R /XYZ 78.427 314.535 null ] >>
+endobj
+238 0 obj
+<< /D [ 206 0 R /XYZ 78.427 303.576 null ] >>
+endobj
+239 0 obj
+<< /D [ 206 0 R /XYZ 78.427 292.618 null ] >>
+endobj
+240 0 obj
+<< /D [ 206 0 R /XYZ 78.427 281.659 null ] >>
+endobj
+241 0 obj
+<< /D [ 206 0 R /XYZ 78.427 270.7 null ] >>
+endobj
+242 0 obj
+<< /D [ 206 0 R /XYZ 78.427 259.741 null ] >>
+endobj
+243 0 obj
+<< /D [ 206 0 R /XYZ 78.427 248.782 null ] >>
+endobj
+244 0 obj
+<< /D [ 206 0 R /XYZ 78.427 237.823 null ] >>
+endobj
+245 0 obj
+<< /D [ 206 0 R /XYZ 78.427 226.864 null ] >>
+endobj
+246 0 obj
+<< /D [ 206 0 R /XYZ 78.427 215.905 null ] >>
+endobj
+247 0 obj
+<< /D [ 206 0 R /XYZ 78.427 204.946 null ] >>
+endobj
+248 0 obj
+<< /D [ 206 0 R /XYZ 78.427 193.987 null ] >>
+endobj
+249 0 obj
+<< /D [ 206 0 R /XYZ 78.427 183.028 null ] >>
+endobj
+250 0 obj
+<< /D [ 206 0 R /XYZ 78.427 140.189 null ] >>
+endobj
+251 0 obj
+<< /D [ 206 0 R /XYZ 78.427 129.23 null ] >>
+endobj
+9 0 obj
+<< /D [ 206 0 R /XYZ 79.37 104.523 null ] >>
+endobj
+205 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+254 0 obj
+<< /Filter /FlateDecode /Length 2453 >>
+stream
+xڽZ[6~ϯ0@cME7(Pc7@S[cK^I~^4=c>$)~|<Z7RGK:xGd bjF\l;sL'̐P&GE;ad|0m޴1#YJX?E{W'ra-&Tu|D*$ g,EںzQJ0Rήovu'?}RvPݿk ݸ{zadoZ6 Q|N2%2Ē=~mͲ&.n1hv]&3=0t\nK(%:Nf-OߺwK[#LuwH֌CȻˋ0^lbUU8E
+׈H6'ty1"+ cп// 姛q_}~D~络7COs(LmhE|ϸ4H]rBݬQm&21+OLj+@NyO&ȶ;?neZP qk~h44ȗg{wf? (Wݪ{F8A 8/3aVy[߉S4 3Ϣ\{o%=?cn #{绎`K])zrǬ}͖+u&O4 3$XlWWYJGx*b]Vu<6DKxl$ȜΩGBTٹ<C =06/CL+ڇ}hb wYη0o~X(Wc1ڢ*}?K R.?܋3rV𰧭s
+5IuVX$n7`׋JA`Cy3ol~[}ܗPnR16ڼg;#a!֫# N0#~ # DJņ_BC6y?LKP
+jGK] HTA$M!i!z嗢J(mA68<uc|Džݿm}g
+&XT{{0J!yl];J O~]9ɗU2t[uMnn$:҄bmPl9-|ml9t$[O;P弭M[O? %OyuVnlRYU?pá""l*_B8C/,S=^f3MO!v!@R%i(¦;S2Nr; ̦{UF=:+J[f
+u!¾Sj 4N6٢TiCN#tŅa藼Mn8/0 p4 R]гN(_mڀ^mD:fhEu
+g3{{q>Ɉgbц?}=ޭ/ܑrDMHLpepWUn2A(boOoU& 1i16Ħ&#xi2Zu"~sŠNZLd"l0@:5F*M!6ըDM
+,'Akt[Uyz++_AzvhB#‰F_Y.pF:
+ \Y.;qcG]wsGT9D22K` RTw;v Q diLJAT162Ur%kP1yIJ7?Wޝ=H?E+i3xQ;Ķא~ן&H@F$4ZiX$BSU(0*+4x
+endstream
+endobj
+253 0 obj
+<< /Type /Page /Contents 254 0 R /Resources 252 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 204 0 R >>
+endobj
+255 0 obj
+<< /D [ 253 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+256 0 obj
+<< /D [ 253 0 R /XYZ 78.427 623.143 null ] >>
+endobj
+257 0 obj
+<< /D [ 253 0 R /XYZ 78.427 612.184 null ] >>
+endobj
+258 0 obj
+<< /D [ 253 0 R /XYZ 78.427 601.225 null ] >>
+endobj
+259 0 obj
+<< /D [ 253 0 R /XYZ 78.427 590.266 null ] >>
+endobj
+260 0 obj
+<< /D [ 253 0 R /XYZ 78.427 579.307 null ] >>
+endobj
+261 0 obj
+<< /D [ 253 0 R /XYZ 78.427 568.348 null ] >>
+endobj
+262 0 obj
+<< /D [ 253 0 R /XYZ 78.427 557.389 null ] >>
+endobj
+263 0 obj
+<< /D [ 253 0 R /XYZ 78.427 546.43 null ] >>
+endobj
+264 0 obj
+<< /D [ 253 0 R /XYZ 78.427 535.471 null ] >>
+endobj
+265 0 obj
+<< /D [ 253 0 R /XYZ 78.427 503.482 null ] >>
+endobj
+266 0 obj
+<< /D [ 253 0 R /XYZ 78.427 492.523 null ] >>
+endobj
+267 0 obj
+<< /D [ 253 0 R /XYZ 78.427 481.564 null ] >>
+endobj
+268 0 obj
+<< /D [ 253 0 R /XYZ 78.427 470.606 null ] >>
+endobj
+269 0 obj
+<< /D [ 253 0 R /XYZ 78.427 459.647 null ] >>
+endobj
+270 0 obj
+<< /D [ 253 0 R /XYZ 78.427 427.658 null ] >>
+endobj
+271 0 obj
+<< /D [ 253 0 R /XYZ 78.427 416.699 null ] >>
+endobj
+272 0 obj
+<< /D [ 253 0 R /XYZ 78.427 405.74 null ] >>
+endobj
+273 0 obj
+<< /D [ 253 0 R /XYZ 78.427 394.781 null ] >>
+endobj
+274 0 obj
+<< /D [ 253 0 R /XYZ 78.427 383.822 null ] >>
+endobj
+275 0 obj
+<< /D [ 253 0 R /XYZ 78.427 372.863 null ] >>
+endobj
+276 0 obj
+<< /D [ 253 0 R /XYZ 78.427 361.904 null ] >>
+endobj
+277 0 obj
+<< /D [ 253 0 R /XYZ 78.427 329.915 null ] >>
+endobj
+278 0 obj
+<< /D [ 253 0 R /XYZ 78.427 318.956 null ] >>
+endobj
+279 0 obj
+<< /D [ 253 0 R /XYZ 78.427 307.997 null ] >>
+endobj
+280 0 obj
+<< /D [ 253 0 R /XYZ 78.427 297.038 null ] >>
+endobj
+281 0 obj
+<< /D [ 253 0 R /XYZ 78.427 286.079 null ] >>
+endobj
+282 0 obj
+<< /D [ 253 0 R /XYZ 78.427 232.062 null ] >>
+endobj
+283 0 obj
+<< /D [ 253 0 R /XYZ 78.427 221.103 null ] >>
+endobj
+284 0 obj
+<< /D [ 253 0 R /XYZ 78.427 210.144 null ] >>
+endobj
+285 0 obj
+<< /D [ 253 0 R /XYZ 78.427 199.185 null ] >>
+endobj
+286 0 obj
+<< /D [ 253 0 R /XYZ 78.427 188.226 null ] >>
+endobj
+287 0 obj
+<< /D [ 253 0 R /XYZ 78.427 177.267 null ] >>
+endobj
+288 0 obj
+<< /D [ 253 0 R /XYZ 78.427 166.308 null ] >>
+endobj
+289 0 obj
+<< /D [ 253 0 R /XYZ 78.427 155.349 null ] >>
+endobj
+290 0 obj
+<< /D [ 253 0 R /XYZ 78.427 144.39 null ] >>
+endobj
+291 0 obj
+<< /D [ 253 0 R /XYZ 78.427 133.431 null ] >>
+endobj
+292 0 obj
+<< /D [ 253 0 R /XYZ 78.427 122.473 null ] >>
+endobj
+293 0 obj
+<< /D [ 253 0 R /XYZ 78.427 111.514 null ] >>
+endobj
+294 0 obj
+<< /D [ 253 0 R /XYZ 78.427 100.555 null ] >>
+endobj
+295 0 obj
+<< /D [ 253 0 R /XYZ 78.427 89.596 null ] >>
+endobj
+296 0 obj
+<< /D [ 253 0 R /XYZ 78.427 78.637 null ] >>
+endobj
+252 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F67 187 0 R /F19 184 0 R /F65 185 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+299 0 obj
+<< /Filter /FlateDecode /Length 1723 >>
+stream
+xڭYMo8W^$,)PC=!rjTn6ߡHȦK$|pސ}9y_N>NO_dđN@'<"#M&#% ’X'_@i)YE Oڱǰ` 3b7hDa`4"Y40ӄ FE~C1.J#FR%H c5J=?m"Uy;9cJ7wjSnKGI=,L'd6;;$:LrنwZLϬڍs+׺YrVwFǵ7WŪ6>8n(-$櫺J\zB|rfO@hv _tX‘$Daǘ<aJſ!OD!2fpdHtY7֯R捷 ۟ܚ gH (İ?]#C ?|e6g.!G0.}\HO.7촾X4փobڥݪ(M%cNrT|aVu $oӣƩb AM]@+?ctV.i짙P$UolCs/kp4L-
+ 䰺7P53ȶ2 s/ί_YD&F{4
+ѦAa)FP*D,%9xN<. ˵ s5-Oz"v#E4ភ
+
+̌vFu#3kkMϷMeOڦVy=t:wu5u-qn
+DE]lNLg3.@?Hw, Q|aYov,_~Ѩ|[ DFbV}ձ|=k1ʢv|
+=t(Bח˲W@QᔏOan<=lv
+endstream
+endobj
+298 0 obj
+<< /Type /Page /Contents 299 0 R /Resources 297 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 204 0 R >>
+endobj
+300 0 obj
+<< /D [ 298 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+301 0 obj
+<< /D [ 298 0 R /XYZ 78.427 768.832 null ] >>
+endobj
+302 0 obj
+<< /D [ 298 0 R /XYZ 78.427 757.873 null ] >>
+endobj
+303 0 obj
+<< /D [ 298 0 R /XYZ 79.752 746.914 null ] >>
+endobj
+13 0 obj
+<< /D [ 298 0 R /XYZ 79.37 723.763 null ] >>
+endobj
+306 0 obj
+<< /D [ 298 0 R /XYZ 79.752 534.849 null ] >>
+endobj
+307 0 obj
+<< /D [ 298 0 R /XYZ 79.752 523.89 null ] >>
+endobj
+308 0 obj
+<< /D [ 298 0 R /XYZ 79.752 512.931 null ] >>
+endobj
+309 0 obj
+<< /D [ 298 0 R /XYZ 79.752 501.972 null ] >>
+endobj
+310 0 obj
+<< /D [ 298 0 R /XYZ 79.752 491.013 null ] >>
+endobj
+311 0 obj
+<< /D [ 298 0 R /XYZ 79.752 480.054 null ] >>
+endobj
+312 0 obj
+<< /D [ 298 0 R /XYZ 79.752 425.695 null ] >>
+endobj
+313 0 obj
+<< /D [ 298 0 R /XYZ 79.752 414.736 null ] >>
+endobj
+314 0 obj
+<< /D [ 298 0 R /XYZ 79.752 403.777 null ] >>
+endobj
+315 0 obj
+<< /D [ 298 0 R /XYZ 79.752 392.819 null ] >>
+endobj
+316 0 obj
+<< /D [ 298 0 R /XYZ 79.752 381.86 null ] >>
+endobj
+317 0 obj
+<< /D [ 298 0 R /XYZ 79.752 370.901 null ] >>
+endobj
+318 0 obj
+<< /D [ 298 0 R /XYZ 79.752 359.942 null ] >>
+endobj
+319 0 obj
+<< /D [ 298 0 R /XYZ 79.752 348.983 null ] >>
+endobj
+320 0 obj
+<< /D [ 298 0 R /XYZ 79.752 338.024 null ] >>
+endobj
+321 0 obj
+<< /D [ 298 0 R /XYZ 79.752 327.065 null ] >>
+endobj
+322 0 obj
+<< /D [ 298 0 R /XYZ 79.752 316.106 null ] >>
+endobj
+323 0 obj
+<< /D [ 298 0 R /XYZ 79.752 305.147 null ] >>
+endobj
+17 0 obj
+<< /D [ 298 0 R /XYZ 79.37 280.751 null ] >>
+endobj
+324 0 obj
+<< /D [ 298 0 R /XYZ 79.752 199.185 null ] >>
+endobj
+325 0 obj
+<< /D [ 298 0 R /XYZ 79.752 188.226 null ] >>
+endobj
+326 0 obj
+<< /D [ 298 0 R /XYZ 79.752 177.267 null ] >>
+endobj
+327 0 obj
+<< /D [ 298 0 R /XYZ 79.752 166.308 null ] >>
+endobj
+328 0 obj
+<< /D [ 298 0 R /XYZ 79.752 155.349 null ] >>
+endobj
+329 0 obj
+<< /D [ 298 0 R /XYZ 79.752 144.39 null ] >>
+endobj
+330 0 obj
+<< /D [ 298 0 R /XYZ 79.752 133.431 null ] >>
+endobj
+331 0 obj
+<< /D [ 298 0 R /XYZ 79.752 122.473 null ] >>
+endobj
+332 0 obj
+<< /D [ 298 0 R /XYZ 79.752 111.514 null ] >>
+endobj
+333 0 obj
+<< /D [ 298 0 R /XYZ 79.752 100.555 null ] >>
+endobj
+334 0 obj
+<< /D [ 298 0 R /XYZ 79.752 89.596 null ] >>
+endobj
+335 0 obj
+<< /D [ 298 0 R /XYZ 79.752 78.637 null ] >>
+endobj
+297 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F67 187 0 R /F19 184 0 R /F20 186 0 R /F69 304 0 R /F70 305 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+338 0 obj
+<< /Filter /FlateDecode /Length 2902 >>
+stream
+xZݏo-ӥ\"yh
+Ckkdɑȡ{gHJC8p8󛡒,&Db ~x7~TL,no( Jftf)1ӊDv9?7Z1KIOǴ4$!k˺jwkɤ].޿_|XK=>݊#Oq,Bs̢8Ӟgt)<#Tcǿ=K9f)9QiOpXn1~,Z:#\4儉-u1Wל.CQݹrˢ\(Kl5K~}kV{]72&\TEW(nTv`ۼZ&2y(%/I"(#JPT'zߚঝԈyNI;Gzb"H<lQYPY
+Ck~_[7U$Pb^Յ^NH(ƴg ^L[.T
+=gU0h
+
+E!Sq{;&Sl
+3/ $;^e
+6GL8/3!ڹ$4bI'ǘXeu0|5Yܱ/mA_Y%QaL{NAD ̏w@|^^nWl| [3aPH>Z*NIS<NӐ-ؒϸu(ȎN7K5Y R>Koj͛ӵFZc0b^;)~Z?XՄ iذҼTOxF,0ۮ^WwlηEroT{5ov:p/g(@-C"7Pȁi0)ixyL\=Uj(y]2LHIK&.rAՐsǖx4$<\)y"
+[ISҞD.9goVݚjZ@I'\oݶ;楻I(]Fv.VSB $@r{onǤETaY4bzi7
+kXTl{@R`Es 4# N3(UqiF@)EU?6/2c8K8w*.A<|dӢ?=U]*aWU"
+endstream
+endobj
+337 0 obj
+<< /Type /Page /Contents 338 0 R /Resources 336 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 204 0 R >>
+endobj
+339 0 obj
+<< /D [ 337 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+340 0 obj
+<< /D [ 337 0 R /XYZ 79.752 768.832 null ] >>
+endobj
+341 0 obj
+<< /D [ 337 0 R /XYZ 79.752 757.873 null ] >>
+endobj
+342 0 obj
+<< /D [ 337 0 R /XYZ 79.752 746.914 null ] >>
+endobj
+343 0 obj
+<< /D [ 337 0 R /XYZ 79.752 735.955 null ] >>
+endobj
+344 0 obj
+<< /D [ 337 0 R /XYZ 79.752 683.17 null ] >>
+endobj
+345 0 obj
+<< /D [ 337 0 R /XYZ 79.752 667.247 null ] >>
+endobj
+346 0 obj
+<< /D [ 337 0 R /XYZ 79.752 656.288 null ] >>
+endobj
+347 0 obj
+<< /D [ 337 0 R /XYZ 79.752 629.441 null ] >>
+endobj
+348 0 obj
+<< /D [ 337 0 R /XYZ 79.752 618.482 null ] >>
+endobj
+349 0 obj
+<< /D [ 337 0 R /XYZ 79.752 607.523 null ] >>
+endobj
+350 0 obj
+<< /D [ 337 0 R /XYZ 79.752 596.565 null ] >>
+endobj
+351 0 obj
+<< /D [ 337 0 R /XYZ 79.752 482.02 null ] >>
+endobj
+352 0 obj
+<< /D [ 337 0 R /XYZ 79.752 471.061 null ] >>
+endobj
+353 0 obj
+<< /D [ 337 0 R /XYZ 79.752 460.102 null ] >>
+endobj
+354 0 obj
+<< /D [ 337 0 R /XYZ 79.752 449.143 null ] >>
+endobj
+355 0 obj
+<< /D [ 337 0 R /XYZ 79.752 438.184 null ] >>
+endobj
+356 0 obj
+<< /D [ 337 0 R /XYZ 79.752 427.226 null ] >>
+endobj
+357 0 obj
+<< /D [ 337 0 R /XYZ 79.752 416.267 null ] >>
+endobj
+358 0 obj
+<< /D [ 337 0 R /XYZ 79.752 405.308 null ] >>
+endobj
+359 0 obj
+<< /D [ 337 0 R /XYZ 79.752 350.539 null ] >>
+endobj
+360 0 obj
+<< /D [ 337 0 R /XYZ 79.752 339.58 null ] >>
+endobj
+361 0 obj
+<< /D [ 337 0 R /XYZ 79.752 328.621 null ] >>
+endobj
+362 0 obj
+<< /D [ 337 0 R /XYZ 79.752 317.662 null ] >>
+endobj
+363 0 obj
+<< /D [ 337 0 R /XYZ 79.752 306.704 null ] >>
+endobj
+364 0 obj
+<< /D [ 337 0 R /XYZ 79.752 295.745 null ] >>
+endobj
+365 0 obj
+<< /D [ 337 0 R /XYZ 79.752 264.886 null ] >>
+endobj
+366 0 obj
+<< /D [ 337 0 R /XYZ 79.752 253.928 null ] >>
+endobj
+367 0 obj
+<< /D [ 337 0 R /XYZ 79.752 242.969 null ] >>
+endobj
+368 0 obj
+<< /D [ 337 0 R /XYZ 79.752 232.01 null ] >>
+endobj
+369 0 obj
+<< /D [ 337 0 R /XYZ 79.752 221.051 null ] >>
+endobj
+370 0 obj
+<< /D [ 337 0 R /XYZ 79.752 144.39 null ] >>
+endobj
+371 0 obj
+<< /D [ 337 0 R /XYZ 79.752 133.431 null ] >>
+endobj
+372 0 obj
+<< /D [ 337 0 R /XYZ 79.752 122.473 null ] >>
+endobj
+373 0 obj
+<< /D [ 337 0 R /XYZ 79.752 111.514 null ] >>
+endobj
+374 0 obj
+<< /D [ 337 0 R /XYZ 79.752 100.555 null ] >>
+endobj
+375 0 obj
+<< /D [ 337 0 R /XYZ 79.752 89.596 null ] >>
+endobj
+376 0 obj
+<< /D [ 337 0 R /XYZ 79.752 78.637 null ] >>
+endobj
+336 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F70 305 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+379 0 obj
+<< /Filter /FlateDecode /Length 2615 >>
+stream
+xZn}uO/ݙ"p<d(D*$S}!ŖeIY$/H鮪:U$-Gx#a2#&&i#% ’&ѿDO~,iddz% !M 0v͞XҜE`D0D1 q
+flvZPnNuXvh^|ꇛmΫiY\$A5"wj 1*bOČ @24l_]3#Wx2oVm6Y9R|l^ x0K1WmsR&J)M)Y%hSefy8bh?J!cHh!Z1F\CR\Z
+q1`
+Jpk]_j4t8+
+X Z#.1,\r9`{߶ WQ%^k%c> nr 06&˂Pbo(0l"G(0Xq *kٺγz祿NSo8x?g:%RQ$Lؕ+vvFƌ~ȖHq4
+,m#?6
+ʹ.'h"pI Z$%|IƁӎsLVEODE[TeE'K|"+-j=(8ˇ#s :Ɂ)GX +2pWb݆l֓u*sI vϧ*ڰd--GUx-k:I6[0Π5֒|y9?m 󧏓7UVpEh߇b9(Y.N[
+k _+g^c%MHyO+[NX k!V<jP=)xw 4W6,5uEԦS<h<rX'vB#t  pp5A1uCgYWn۽ A_o"( Cz~`[[#Rp+
+7y*/?x54rsh%&g
+q= hb*=y+VxBi(E)"]J.9Hpt&S
+XHU=L];UVbeQC|wP]URN%"SH3$T$G`k_|)_Ġ@g.i<`E4-rDdEiO>p.2Ηc
+ + NSh~owAT1i!6}a>1I}ޅW!ۺjmyޥJ%Ҵ9MZC+'UqSˮ4i <Hz>=Do3OT 隦G?GMɸn<}W}'R!`.*<X)K:0k4g3 >&+Mwj:ޓ -\Th0X*"JIg?l|s~<p"~O@=cIfV
+7GH:M| z8}~d4G>"pr$P];};Z4m=-6
+ywzJj:+Zoߣ {gz:G Xzy}C{?BIcQ8}i2PRgD 9t
+"'Ļ=4ɻ#pr8&
+
+.R̒RY>_YvN+IuDM|G<D _/B–|H{9C%. v~ftSǖ`Z8q=vN{!E$ޠl.28yP
+S/|BmgzvFY]gjn3&
+,bj쾔0%2=#
+endstream
+endobj
+378 0 obj
+<< /Type /Page /Contents 379 0 R /Resources 377 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 204 0 R >>
+endobj
+380 0 obj
+<< /D [ 378 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+381 0 obj
+<< /D [ 378 0 R /XYZ 79.752 768.832 null ] >>
+endobj
+382 0 obj
+<< /D [ 378 0 R /XYZ 79.752 757.873 null ] >>
+endobj
+383 0 obj
+<< /D [ 378 0 R /XYZ 79.752 746.914 null ] >>
+endobj
+384 0 obj
+<< /D [ 378 0 R /XYZ 79.752 735.955 null ] >>
+endobj
+385 0 obj
+<< /D [ 378 0 R /XYZ 79.752 664.424 null ] >>
+endobj
+386 0 obj
+<< /D [ 378 0 R /XYZ 79.752 653.465 null ] >>
+endobj
+387 0 obj
+<< /D [ 378 0 R /XYZ 79.752 642.506 null ] >>
+endobj
+388 0 obj
+<< /D [ 378 0 R /XYZ 79.752 631.548 null ] >>
+endobj
+389 0 obj
+<< /D [ 378 0 R /XYZ 79.752 620.589 null ] >>
+endobj
+390 0 obj
+<< /D [ 378 0 R /XYZ 79.752 609.63 null ] >>
+endobj
+391 0 obj
+<< /D [ 378 0 R /XYZ 79.752 598.671 null ] >>
+endobj
+392 0 obj
+<< /D [ 378 0 R /XYZ 79.752 587.712 null ] >>
+endobj
+393 0 obj
+<< /D [ 378 0 R /XYZ 79.752 576.753 null ] >>
+endobj
+394 0 obj
+<< /D [ 378 0 R /XYZ 79.752 565.794 null ] >>
+endobj
+395 0 obj
+<< /D [ 378 0 R /XYZ 79.752 554.835 null ] >>
+endobj
+396 0 obj
+<< /D [ 378 0 R /XYZ 79.752 543.876 null ] >>
+endobj
+397 0 obj
+<< /D [ 378 0 R /XYZ 79.752 532.917 null ] >>
+endobj
+398 0 obj
+<< /D [ 378 0 R /XYZ 79.752 521.959 null ] >>
+endobj
+399 0 obj
+<< /D [ 378 0 R /XYZ 79.752 431.305 null ] >>
+endobj
+400 0 obj
+<< /D [ 378 0 R /XYZ 79.752 420.346 null ] >>
+endobj
+401 0 obj
+<< /D [ 378 0 R /XYZ 79.752 409.387 null ] >>
+endobj
+402 0 obj
+<< /D [ 378 0 R /XYZ 79.752 398.428 null ] >>
+endobj
+403 0 obj
+<< /D [ 378 0 R /XYZ 79.752 387.469 null ] >>
+endobj
+404 0 obj
+<< /D [ 378 0 R /XYZ 79.752 376.511 null ] >>
+endobj
+405 0 obj
+<< /D [ 378 0 R /XYZ 79.752 365.552 null ] >>
+endobj
+406 0 obj
+<< /D [ 378 0 R /XYZ 79.752 354.593 null ] >>
+endobj
+407 0 obj
+<< /D [ 378 0 R /XYZ 79.752 343.634 null ] >>
+endobj
+408 0 obj
+<< /D [ 378 0 R /XYZ 79.752 302.789 null ] >>
+endobj
+409 0 obj
+<< /D [ 378 0 R /XYZ 79.752 291.83 null ] >>
+endobj
+410 0 obj
+<< /D [ 378 0 R /XYZ 79.752 280.871 null ] >>
+endobj
+411 0 obj
+<< /D [ 378 0 R /XYZ 79.752 269.912 null ] >>
+endobj
+412 0 obj
+<< /D [ 378 0 R /XYZ 79.752 258.953 null ] >>
+endobj
+413 0 obj
+<< /D [ 378 0 R /XYZ 79.752 247.994 null ] >>
+endobj
+414 0 obj
+<< /D [ 378 0 R /XYZ 79.752 207.153 null ] >>
+endobj
+415 0 obj
+<< /D [ 378 0 R /XYZ 79.752 196.194 null ] >>
+endobj
+416 0 obj
+<< /D [ 378 0 R /XYZ 79.752 185.235 null ] >>
+endobj
+417 0 obj
+<< /D [ 378 0 R /XYZ 79.752 174.276 null ] >>
+endobj
+418 0 obj
+<< /D [ 378 0 R /XYZ 79.752 163.318 null ] >>
+endobj
+419 0 obj
+<< /D [ 378 0 R /XYZ 79.752 122.473 null ] >>
+endobj
+420 0 obj
+<< /D [ 378 0 R /XYZ 79.752 111.514 null ] >>
+endobj
+421 0 obj
+<< /D [ 378 0 R /XYZ 79.752 100.555 null ] >>
+endobj
+422 0 obj
+<< /D [ 378 0 R /XYZ 79.752 89.596 null ] >>
+endobj
+423 0 obj
+<< /D [ 378 0 R /XYZ 79.752 78.637 null ] >>
+endobj
+377 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+427 0 obj
+<< /Filter /FlateDecode /Length 2692 >>
+stream
+xZmo6_a`6NC-rh7@9-Ǻ%$'.of#!Dqęp<CgI6"Wow~/Ԅ\aJ&w &R` <[M~/q)er!
+e OcfC_M.u{u7^7^ػE[O33 %ʠQX8 ?Q9#̕x;/WWl$;&qTcqyߌa6c0Jlぞ&#.H a0o7e_s϶s&
+cH 
+S=0j+rk˓8<RR A(Wju?kWmvPe]5eZ?kAzִE]=4H {{dRҋޱ;!bXxUZCs~<i]Ejc%Y9]v$$KK((E~hB0eh6nd"N*YyBߺSZ~ syLݾMS3~YGmjT= aiz/yT͇e,吪*Cx09լץ:.̧s=EfilMWS="Y54Y4Ba3_8HIV O Hm8w+
+8m$2ČޗVZ]Ym#z̧w*(@śZ,G
+Iꭆ.sݘM
+RlӐ$HjG!/Kπ9q(ZPH[[>?a1^ xAnWyWDj}%1uoaS٦.o4-73`zC՚~SJX}:$ÞyiuS" O&&~leH|t֌Sef7>U:nW 8y岑spRL+)^ۆ5Wttrm<?3]  K2ڮ+qvJ :ja/3-w<@+FAmEƦfn6u]-G-
+ڹe,5 މYDۙ Fc%`/ ǞmyASIl6Cv{-Lm纭.Pe؊_d8ͰX$PXp$t0br
+SIR$pYX#Lm|dzΆZng
+OSJ.\]i@-{W<R/n(f$~.桌T΁J@S_ᅧan
+endstream
+endobj
+426 0 obj
+<< /Type /Page /Contents 427 0 R /Resources 425 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 204 0 R /Annots 470 0 R >>
+endobj
+470 0 obj
+[ 424 0 R ]
+endobj
+424 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 120.217 354.755 126.679 365.581 ]/A << /S /GoTo /D (Hfootnote.1) >> >>
+endobj
+428 0 obj
+<< /D [ 426 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+429 0 obj
+<< /D [ 426 0 R /XYZ 79.752 768.832 null ] >>
+endobj
+430 0 obj
+<< /D [ 426 0 R /XYZ 79.752 757.873 null ] >>
+endobj
+431 0 obj
+<< /D [ 426 0 R /XYZ 79.752 728.981 null ] >>
+endobj
+432 0 obj
+<< /D [ 426 0 R /XYZ 79.752 718.022 null ] >>
+endobj
+433 0 obj
+<< /D [ 426 0 R /XYZ 79.752 707.063 null ] >>
+endobj
+434 0 obj
+<< /D [ 426 0 R /XYZ 79.752 696.104 null ] >>
+endobj
+435 0 obj
+<< /D [ 426 0 R /XYZ 79.752 685.146 null ] >>
+endobj
+436 0 obj
+<< /D [ 426 0 R /XYZ 79.752 674.187 null ] >>
+endobj
+437 0 obj
+<< /D [ 426 0 R /XYZ 79.752 663.228 null ] >>
+endobj
+438 0 obj
+<< /D [ 426 0 R /XYZ 79.752 652.269 null ] >>
+endobj
+439 0 obj
+<< /D [ 426 0 R /XYZ 79.752 641.31 null ] >>
+endobj
+440 0 obj
+<< /D [ 426 0 R /XYZ 79.752 630.351 null ] >>
+endobj
+441 0 obj
+<< /D [ 426 0 R /XYZ 79.752 619.392 null ] >>
+endobj
+442 0 obj
+<< /D [ 426 0 R /XYZ 79.752 608.433 null ] >>
+endobj
+443 0 obj
+<< /D [ 426 0 R /XYZ 79.752 597.474 null ] >>
+endobj
+444 0 obj
+<< /D [ 426 0 R /XYZ 79.752 586.515 null ] >>
+endobj
+445 0 obj
+<< /D [ 426 0 R /XYZ 79.752 575.556 null ] >>
+endobj
+446 0 obj
+<< /D [ 426 0 R /XYZ 79.752 564.598 null ] >>
+endobj
+447 0 obj
+<< /D [ 426 0 R /XYZ 79.752 553.639 null ] >>
+endobj
+448 0 obj
+<< /D [ 426 0 R /XYZ 79.752 542.68 null ] >>
+endobj
+449 0 obj
+<< /D [ 426 0 R /XYZ 79.752 489.878 null ] >>
+endobj
+450 0 obj
+<< /D [ 426 0 R /XYZ 79.752 478.919 null ] >>
+endobj
+451 0 obj
+<< /D [ 426 0 R /XYZ 79.752 467.96 null ] >>
+endobj
+452 0 obj
+<< /D [ 426 0 R /XYZ 79.752 457.001 null ] >>
+endobj
+453 0 obj
+<< /D [ 426 0 R /XYZ 79.752 446.042 null ] >>
+endobj
+454 0 obj
+<< /D [ 426 0 R /XYZ 79.752 435.083 null ] >>
+endobj
+455 0 obj
+<< /D [ 426 0 R /XYZ 79.752 424.124 null ] >>
+endobj
+456 0 obj
+<< /D [ 426 0 R /XYZ 79.752 413.165 null ] >>
+endobj
+457 0 obj
+<< /D [ 426 0 R /XYZ 79.752 402.207 null ] >>
+endobj
+458 0 obj
+<< /D [ 426 0 R /XYZ 79.752 391.248 null ] >>
+endobj
+460 0 obj
+<< /D [ 426 0 R /XYZ 79.752 350.401 null ] >>
+endobj
+461 0 obj
+<< /D [ 426 0 R /XYZ 79.752 339.442 null ] >>
+endobj
+462 0 obj
+<< /D [ 426 0 R /XYZ 79.752 286.64 null ] >>
+endobj
+463 0 obj
+<< /D [ 426 0 R /XYZ 79.752 275.681 null ] >>
+endobj
+464 0 obj
+<< /D [ 426 0 R /XYZ 79.752 264.722 null ] >>
+endobj
+465 0 obj
+<< /D [ 426 0 R /XYZ 79.752 253.763 null ] >>
+endobj
+466 0 obj
+<< /D [ 426 0 R /XYZ 79.752 200.961 null ] >>
+endobj
+467 0 obj
+<< /D [ 426 0 R /XYZ 79.752 160.114 null ] >>
+endobj
+469 0 obj
+<< /D [ 426 0 R /XYZ 94.613 89.43 null ] >>
+endobj
+425 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F70 305 0 R /F22 459 0 R /F69 304 0 R /F76 468 0 R /F53 203 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+473 0 obj
+<< /Filter /FlateDecode /Length 1978 >>
+stream
+xڵZo60`nX(c]؃O>t.=Ȓ+q_w(8^,!P&hMD;whdpCS4$VDNS&-`DD)XQ bKwͷݽdm)]yi|Vvͷ2w}9`[t{j랿9mgXgPX{Zo+ P2)%4Zx2," 6["R6_gs~KcNE~fT:c~:2RpU^o{>^x*GW[1
+^Qv{}"S`IffVEHǔ%6D(> @MftZhbVUoW(*"O
+MlmpSKŚK0:IH^T4 vOh%"yWl(L28z_yMnۆ!_x@"$T*)U`ouUWe.9?L7u ZA.,as!.aF[y|ZmӢr
+os|uq;uVӷf5v B!E#!j5)ݘǴ6DzM
+axiv/jCC H
+x-qT%2ģCŠcCq!5y7YN0a1h˓)w{F
+/Q,`1,wf0gh&
+xm:0BZŴʏBIc>m+?~|EU3!U,
+5IqH~/vT+y6)D tGa߭H(_#-6mWzՏNa5V\f"a,
+^C'%1
+S7|MDA
+endstream
+endobj
+472 0 obj
+<< /Type /Page /Contents 473 0 R /Resources 471 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 204 0 R >>
+endobj
+474 0 obj
+<< /D [ 472 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+475 0 obj
+<< /D [ 472 0 R /XYZ 79.752 768.832 null ] >>
+endobj
+476 0 obj
+<< /D [ 472 0 R /XYZ 79.752 757.873 null ] >>
+endobj
+477 0 obj
+<< /D [ 472 0 R /XYZ 79.752 746.914 null ] >>
+endobj
+478 0 obj
+<< /D [ 472 0 R /XYZ 79.752 735.955 null ] >>
+endobj
+479 0 obj
+<< /D [ 472 0 R /XYZ 79.752 724.996 null ] >>
+endobj
+480 0 obj
+<< /D [ 472 0 R /XYZ 79.752 714.037 null ] >>
+endobj
+481 0 obj
+<< /D [ 472 0 R /XYZ 79.752 703.078 null ] >>
+endobj
+482 0 obj
+<< /D [ 472 0 R /XYZ 79.752 692.119 null ] >>
+endobj
+483 0 obj
+<< /D [ 472 0 R /XYZ 79.752 681.16 null ] >>
+endobj
+484 0 obj
+<< /D [ 472 0 R /XYZ 79.752 670.202 null ] >>
+endobj
+485 0 obj
+<< /D [ 472 0 R /XYZ 79.752 659.243 null ] >>
+endobj
+486 0 obj
+<< /D [ 472 0 R /XYZ 79.752 619.094 null ] >>
+endobj
+487 0 obj
+<< /D [ 472 0 R /XYZ 79.752 608.135 null ] >>
+endobj
+488 0 obj
+<< /D [ 472 0 R /XYZ 79.752 597.176 null ] >>
+endobj
+489 0 obj
+<< /D [ 472 0 R /XYZ 79.752 586.218 null ] >>
+endobj
+490 0 obj
+<< /D [ 472 0 R /XYZ 79.752 575.259 null ] >>
+endobj
+491 0 obj
+<< /D [ 472 0 R /XYZ 79.752 564.3 null ] >>
+endobj
+492 0 obj
+<< /D [ 472 0 R /XYZ 79.752 553.341 null ] >>
+endobj
+493 0 obj
+<< /D [ 472 0 R /XYZ 79.752 542.382 null ] >>
+endobj
+494 0 obj
+<< /D [ 472 0 R /XYZ 79.752 514.189 null ] >>
+endobj
+495 0 obj
+<< /D [ 472 0 R /XYZ 79.752 503.23 null ] >>
+endobj
+496 0 obj
+<< /D [ 472 0 R /XYZ 79.752 492.271 null ] >>
+endobj
+497 0 obj
+<< /D [ 472 0 R /XYZ 79.752 481.312 null ] >>
+endobj
+498 0 obj
+<< /D [ 472 0 R /XYZ 79.752 470.353 null ] >>
+endobj
+499 0 obj
+<< /D [ 472 0 R /XYZ 79.752 419.646 null ] >>
+endobj
+500 0 obj
+<< /D [ 472 0 R /XYZ 79.752 391.207 null ] >>
+endobj
+501 0 obj
+<< /D [ 472 0 R /XYZ 79.752 380.248 null ] >>
+endobj
+502 0 obj
+<< /D [ 472 0 R /XYZ 79.752 369.289 null ] >>
+endobj
+503 0 obj
+<< /D [ 472 0 R /XYZ 79.752 358.33 null ] >>
+endobj
+504 0 obj
+<< /D [ 472 0 R /XYZ 79.752 347.371 null ] >>
+endobj
+505 0 obj
+<< /D [ 472 0 R /XYZ 79.752 336.412 null ] >>
+endobj
+506 0 obj
+<< /D [ 472 0 R /XYZ 79.752 325.453 null ] >>
+endobj
+507 0 obj
+<< /D [ 472 0 R /XYZ 79.752 314.495 null ] >>
+endobj
+508 0 obj
+<< /D [ 472 0 R /XYZ 79.752 303.536 null ] >>
+endobj
+509 0 obj
+<< /D [ 472 0 R /XYZ 79.752 292.577 null ] >>
+endobj
+510 0 obj
+<< /D [ 472 0 R /XYZ 79.752 262.494 null ] >>
+endobj
+511 0 obj
+<< /D [ 472 0 R /XYZ 79.752 251.535 null ] >>
+endobj
+512 0 obj
+<< /D [ 472 0 R /XYZ 79.752 240.576 null ] >>
+endobj
+513 0 obj
+<< /D [ 472 0 R /XYZ 79.752 229.617 null ] >>
+endobj
+514 0 obj
+<< /D [ 472 0 R /XYZ 79.752 218.658 null ] >>
+endobj
+515 0 obj
+<< /D [ 472 0 R /XYZ 79.752 207.699 null ] >>
+endobj
+516 0 obj
+<< /D [ 472 0 R /XYZ 79.752 196.74 null ] >>
+endobj
+517 0 obj
+<< /D [ 472 0 R /XYZ 79.752 144.39 null ] >>
+endobj
+518 0 obj
+<< /D [ 472 0 R /XYZ 79.752 133.431 null ] >>
+endobj
+519 0 obj
+<< /D [ 472 0 R /XYZ 79.752 122.473 null ] >>
+endobj
+520 0 obj
+<< /D [ 472 0 R /XYZ 79.752 111.514 null ] >>
+endobj
+521 0 obj
+<< /D [ 472 0 R /XYZ 79.752 100.555 null ] >>
+endobj
+522 0 obj
+<< /D [ 472 0 R /XYZ 79.752 89.596 null ] >>
+endobj
+523 0 obj
+<< /D [ 472 0 R /XYZ 79.752 78.637 null ] >>
+endobj
+471 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F70 305 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+526 0 obj
+<< /Filter /FlateDecode /Length 2399 >>
+stream
+xڵZKϯ0C`T#v.&H9!`i[[Jr?1=ŇdQVH"YU_;gIxß,E V0L$3<)r&F,n(Uݖ "OyCd.ܡn |?dy8Ω{+̛S4 wUHrNF(J8)mYV`!FYLI"3 5c(U>JP2Hzj*O
+YdQ#ףPv[]|-~㬝Ff헞$T GTI2֦0nQW.HaUw.RT+9"y*LbM(,N&9\D:H)Ҳױ& 4צ s.'#J ma׉CkyiOAlMxZ\:E\1ݍ9d,Zd@ńV89M>ep8Eꮼvh}&QeNc'<GIO}H)gAqʑH'o1Re/ς⹮4GgR$}% ϡ#_o+vF,vGh$KJ|Շڈ!pu$(`|k`b`D1: i
+N'E?z0.I68?Œuf 1Y0$]k/MJg.Quh̹
+C.ۛ&C&`(GѤF#K^aJ)ܥt}Nm[wS<$<?=.+!nWF
+-8ԅ
+*0˱a83.Ip[HኝpE{N4XDha~;0ޔ'.8
+endstream
+endobj
+525 0 obj
+<< /Type /Page /Contents 526 0 R /Resources 524 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 204 0 R >>
+endobj
+527 0 obj
+<< /D [ 525 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+528 0 obj
+<< /D [ 525 0 R /XYZ 79.752 755.07 null ] >>
+endobj
+529 0 obj
+<< /D [ 525 0 R /XYZ 79.752 744.111 null ] >>
+endobj
+530 0 obj
+<< /D [ 525 0 R /XYZ 79.752 733.152 null ] >>
+endobj
+531 0 obj
+<< /D [ 525 0 R /XYZ 79.752 703.571 null ] >>
+endobj
+532 0 obj
+<< /D [ 525 0 R /XYZ 79.752 692.612 null ] >>
+endobj
+533 0 obj
+<< /D [ 525 0 R /XYZ 79.752 681.653 null ] >>
+endobj
+534 0 obj
+<< /D [ 525 0 R /XYZ 79.752 670.694 null ] >>
+endobj
+535 0 obj
+<< /D [ 525 0 R /XYZ 79.752 659.735 null ] >>
+endobj
+536 0 obj
+<< /D [ 525 0 R /XYZ 79.752 648.776 null ] >>
+endobj
+537 0 obj
+<< /D [ 525 0 R /XYZ 79.752 637.817 null ] >>
+endobj
+538 0 obj
+<< /D [ 525 0 R /XYZ 79.752 626.858 null ] >>
+endobj
+539 0 obj
+<< /D [ 525 0 R /XYZ 79.752 615.9 null ] >>
+endobj
+540 0 obj
+<< /D [ 525 0 R /XYZ 79.752 604.941 null ] >>
+endobj
+21 0 obj
+<< /D [ 525 0 R /XYZ 79.37 580.603 null ] >>
+endobj
+541 0 obj
+<< /D [ 525 0 R /XYZ 79.752 474.8 null ] >>
+endobj
+543 0 obj
+<< /D [ 525 0 R /XYZ 79.752 423.115 null ] >>
+endobj
+544 0 obj
+<< /D [ 525 0 R /XYZ 79.752 335.564 null ] >>
+endobj
+545 0 obj
+<< /D [ 525 0 R /XYZ 79.752 324.605 null ] >>
+endobj
+546 0 obj
+<< /D [ 525 0 R /XYZ 79.752 284.875 null ] >>
+endobj
+547 0 obj
+<< /D [ 525 0 R /XYZ 79.752 273.916 null ] >>
+endobj
+548 0 obj
+<< /D [ 525 0 R /XYZ 79.752 222.231 null ] >>
+endobj
+549 0 obj
+<< /D [ 525 0 R /XYZ 79.752 170.545 null ] >>
+endobj
+550 0 obj
+<< /D [ 525 0 R /XYZ 79.752 159.586 null ] >>
+endobj
+551 0 obj
+<< /D [ 525 0 R /XYZ 79.752 89.596 null ] >>
+endobj
+552 0 obj
+<< /D [ 525 0 R /XYZ 79.752 78.637 null ] >>
+endobj
+524 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R /F67 187 0 R /F70 305 0 R /F77 542 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+555 0 obj
+<< /Filter /FlateDecode /Length 3022 >>
+stream
+xڝZo߿oҺCi#e#%6ig{j°/3P]Uh⫇wݟUR#A|ů*1ņ_~>_[7Zڨ\8p ڧa|[d%tMuI}\q7T&R1pگmk/<ye,R*~كssJ3=,$L-;8=\<**]-au3T>+׊J M;*ku[m4+3W)C5%nOm[+R˥)X
+AڀT]YHHsuW_>|Mڍ~ڜaRtmH_$
+vӂ벬Q/EC"G0_u0x)ʒަGβ빐?M]X&jd?qSx"BUgR͸1ꦺ{uֵ.P1Oe*6ANݶ]z{t@vw,n-sGD:F#0ie8?sE~1NĚ< NȽ=uEGi֑c o`2I̠цB,ݵQ<
+,3Դ>V4h{fm/nN{w2<p'xPcHAkBsZZ0*P5l/#Hސ=
+دr^i41!A>ٮo4y
+DaK]<4Y![=oTWzNiJRh& $C$_=K !n$CC|ayt@:eJ兿f-|Ra%Ila6#ZF;(fɌ,A
+Km_l 9=gdHp,bkH=]ϐʰ݁-v \T8"*Ei~tuC FB:* ǴsےL!q6A@%D5P+ x52$voWb+2Jpx ]a>QҰ
+a~t(#:ʢu=?>45OA++*OC,9+e~5)DCu:3'N# j;YKO#Ŏz';a $f}^D/n|(DdX _&_8LB8 iβ,T\1ڐ\tF+Uͬ5!|V/T*آwk9ـ,D- W/ +Jw X#7
+Mfem]ً`VB2?Β;ir^gwR2ײ}1-JvD7VZ"#VyY[EZLiՄ9p^4sYi祬I.{SءR]ssT86C.7 2N^uqL{OɈv
+D@ ʨ/D7A:Nܱ>ɜf*ۥ4e8P' ]" ;wy-C)dfESNb!Miu>85.˼&v%Ԁ@,)h~ '%}V=&Oa>MTpP|95aAB
+endstream
+endobj
+554 0 obj
+<< /Type /Page /Contents 555 0 R /Resources 553 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 204 0 R >>
+endobj
+556 0 obj
+<< /D [ 554 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+557 0 obj
+<< /D [ 554 0 R /XYZ 79.752 743.051 null ] >>
+endobj
+558 0 obj
+<< /D [ 554 0 R /XYZ 79.752 702.937 null ] >>
+endobj
+559 0 obj
+<< /D [ 554 0 R /XYZ 79.752 638.913 null ] >>
+endobj
+560 0 obj
+<< /D [ 554 0 R /XYZ 79.752 574.889 null ] >>
+endobj
+561 0 obj
+<< /D [ 554 0 R /XYZ 79.752 486.955 null ] >>
+endobj
+562 0 obj
+<< /D [ 554 0 R /XYZ 79.752 475.996 null ] >>
+endobj
+563 0 obj
+<< /D [ 554 0 R /XYZ 79.752 435.882 null ] >>
+endobj
+564 0 obj
+<< /D [ 554 0 R /XYZ 79.752 424.923 null ] >>
+endobj
+565 0 obj
+<< /D [ 554 0 R /XYZ 79.752 372.854 null ] >>
+endobj
+566 0 obj
+<< /D [ 554 0 R /XYZ 79.752 332.741 null ] >>
+endobj
+567 0 obj
+<< /D [ 554 0 R /XYZ 79.752 268.717 null ] >>
+endobj
+568 0 obj
+<< /D [ 554 0 R /XYZ 79.752 257.758 null ] >>
+endobj
+569 0 obj
+<< /D [ 554 0 R /XYZ 79.752 181.778 null ] >>
+endobj
+570 0 obj
+<< /D [ 554 0 R /XYZ 79.752 141.665 null ] >>
+endobj
+571 0 obj
+<< /D [ 554 0 R /XYZ 79.752 130.706 null ] >>
+endobj
+572 0 obj
+<< /D [ 554 0 R /XYZ 79.752 78.637 null ] >>
+endobj
+553 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R /F70 305 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+575 0 obj
+<< /Filter /FlateDecode /Length 2494 >>
+stream
+xڵZK6ϯm݋iOSH6rj vZR$d6OjQ푭ҖHYE~Ut󴡛7!&<0 &<6>=7bmSڻ< 
+ (%0}*{mo} my꿻Wl|t] -cX<Wߚv :8]KƸ,Kg^{ b[ N:0nYfK'rT@l|* [$ґ
+>\T*EcEu*IYxT[6t]l@i!O3Bz
+ү:yaՈr@6rf YcsoraC NU5Oķ0`l!p4>,fV2Ř!SE l9аәEHph ڣ9v{ٴ5CVRF*ƽvCw^ƚ2O|U
+@+$4S%h*!<UVe4D^cnEڹķ"qag/祖KZtO#F|dDG0)@Q|4!
+O<Հ~h *\Sz =Pֈgω,Ըawnw-Q{*%s۱i_MXQ|W_<uC ,/1PqG|Doٞ]ljݹd`R~CKC%F)VBilQbt D
+6.JrGLA:>~i <TMYv]..Vk*.܈UВmZBݔ>3DC4KF(tD*~ v*q_4?)6X\kK3LLUķ"[Vm~O9]MRI(DzP@C9Sƅ5{lNu~dX yk/W!_f9"/ ?m/ߡo7dD: amѤJ"ŝᓣU<-K0jv'+@T#~U73uGVoڭN91R!o:S[ <n]=&U W泥+
+GDd5~`%BfkނVCt)(OijuP 0˼_I\(1K378>Qϧ&rAE$HAp%
+k\͇>Ǻb\
+(J("85;hp[GmsZvC&xst;/%$]fB0qьhI^^"bFt|b^pd\TbB2X%oJ)6'ol䆻z4'Zbaz8hB4uH-k U/YOR
+&x|`xSowe=wSt ;HЇrrE8Pjv^β*'i"$X/9~u[xVlҼ뭚P8!`+Hk惩xA;EE-@C{6]w~L^<@Z6Sy{TsB-hcq⅃ZUNd!ǭYJh9G膪󣻠d
+Ir9@HF_0B*/;܎9:8IgelE[z\pqZ-ǂ̐$DKK'l98M=_okBݠ]8n .c$v2 $L+y0*αȩV $?dJ"tڏwkPZUOd@mnoFrU%DvAz:4\1&#Jia{ZhD,lT /vgΫT;Nd2Rp
+nfx5dfCw[805E(^|k/D|U b@")Ӊ(2;4K3F##sǶތA~'̤OR9fl9u5*S)
+endstream
+endobj
+574 0 obj
+<< /Type /Page /Contents 575 0 R /Resources 573 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 594 0 R >>
+endobj
+576 0 obj
+<< /D [ 574 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+577 0 obj
+<< /D [ 574 0 R /XYZ 79.752 731.201 null ] >>
+endobj
+578 0 obj
+<< /D [ 574 0 R /XYZ 79.752 679.76 null ] >>
+endobj
+579 0 obj
+<< /D [ 574 0 R /XYZ 79.752 640.274 null ] >>
+endobj
+580 0 obj
+<< /D [ 574 0 R /XYZ 79.752 629.315 null ] >>
+endobj
+581 0 obj
+<< /D [ 574 0 R /XYZ 79.752 577.874 null ] >>
+endobj
+582 0 obj
+<< /D [ 574 0 R /XYZ 79.752 526.434 null ] >>
+endobj
+583 0 obj
+<< /D [ 574 0 R /XYZ 79.752 474.993 null ] >>
+endobj
+584 0 obj
+<< /D [ 574 0 R /XYZ 79.752 435.507 null ] >>
+endobj
+585 0 obj
+<< /D [ 574 0 R /XYZ 79.752 396.021 null ] >>
+endobj
+586 0 obj
+<< /D [ 574 0 R /XYZ 79.752 344.581 null ] >>
+endobj
+587 0 obj
+<< /D [ 574 0 R /XYZ 79.752 329.094 null ] >>
+endobj
+588 0 obj
+<< /D [ 574 0 R /XYZ 79.752 263.932 null ] >>
+endobj
+589 0 obj
+<< /D [ 574 0 R /XYZ 79.752 223.539 null ] >>
+endobj
+590 0 obj
+<< /D [ 574 0 R /XYZ 79.752 172.098 null ] >>
+endobj
+591 0 obj
+<< /D [ 574 0 R /XYZ 79.752 142.802 null ] >>
+endobj
+592 0 obj
+<< /D [ 574 0 R /XYZ 79.752 131.843 null ] >>
+endobj
+593 0 obj
+<< /D [ 574 0 R /XYZ 79.752 78.637 null ] >>
+endobj
+573 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R /F65 185 0 R /F70 305 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+597 0 obj
+<< /Filter /FlateDecode /Length 2714 >>
+stream
+xڝZo߿ou Ot{@C5YN%$'{{gHJEP$3AGUSz4^$VLhEW:&\$Rtu_{}܊(^7L}y֢B8;q/͡ΒCm¯5-aFkEdIEk vB[8LM[6B8+9^HE!2O}YeIMHjK4һ b9Gy]{lKNjoV?f%1'ZHFnV;,6#(p-%," 01E5x s)7z +7#JbŦ^J&ZI[k` &C ǢӪ8sT( XXMHCu.S2HUW(*4|t]NY3:k7`Um\o[t8t{=WD(⎤m_6LH 1kͬPB{,oP>Y84#0.G&$ C]
+N~dݗv͛4bh> yFL'4jp
+F8rFHv y#o%&,e?pʈ;
+o<]xg)Qb$YFe˜hoř  ZQV})9'wF5h9_U\CR2)<o?cR, 4JOqQ&Fccto+kPYSP|6.v,Mz#t4JyǤ zۧє̅N۩]G1;B I7>AɼS
+:b!0$r;LDw|$#,h*x 3;^ @jp{_ 8=+pxJ.oH{V<R
+I.|]=`1JqWnL\X2 >d@;<]vɱh-o 4\!ȘK!Cox ڀvmS&,)Iz$z +S2}= nq@c,J^ТU5]w{-V9`Ey/}ڼ_n
+ZAR_K5Mhsw|)+AS4S2;V2cE<n}g5x
+a`K
+XMTs3|'=XVQ>H]\TuZ/ċ4DދEx˜/=\@o!^T}N cwuHn2F3<gH;jL.Џ+HG{HcD3UR_ZJhup
+endstream
+endobj
+596 0 obj
+<< /Type /Page /Contents 597 0 R /Resources 595 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 594 0 R >>
+endobj
+598 0 obj
+<< /D [ 596 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+599 0 obj
+<< /D [ 596 0 R /XYZ 79.752 743.581 null ] >>
+endobj
+600 0 obj
+<< /D [ 596 0 R /XYZ 79.752 715.993 null ] >>
+endobj
+601 0 obj
+<< /D [ 596 0 R /XYZ 79.752 667.101 null ] >>
+endobj
+602 0 obj
+<< /D [ 596 0 R /XYZ 79.752 656.142 null ] >>
+endobj
+603 0 obj
+<< /D [ 596 0 R /XYZ 79.752 595.296 null ] >>
+endobj
+604 0 obj
+<< /D [ 596 0 R /XYZ 79.752 584.337 null ] >>
+endobj
+605 0 obj
+<< /D [ 596 0 R /XYZ 79.752 573.378 null ] >>
+endobj
+606 0 obj
+<< /D [ 596 0 R /XYZ 79.752 524.487 null ] >>
+endobj
+607 0 obj
+<< /D [ 596 0 R /XYZ 79.752 498.165 null ] >>
+endobj
+608 0 obj
+<< /D [ 596 0 R /XYZ 79.752 487.206 null ] >>
+endobj
+609 0 obj
+<< /D [ 596 0 R /XYZ 79.752 476.248 null ] >>
+endobj
+610 0 obj
+<< /D [ 596 0 R /XYZ 79.752 465.289 null ] >>
+endobj
+611 0 obj
+<< /D [ 596 0 R /XYZ 79.752 454.33 null ] >>
+endobj
+612 0 obj
+<< /D [ 596 0 R /XYZ 79.752 443.371 null ] >>
+endobj
+613 0 obj
+<< /D [ 596 0 R /XYZ 79.752 402.487 null ] >>
+endobj
+614 0 obj
+<< /D [ 596 0 R /XYZ 79.752 353.596 null ] >>
+endobj
+615 0 obj
+<< /D [ 596 0 R /XYZ 79.752 342.637 null ] >>
+endobj
+616 0 obj
+<< /D [ 596 0 R /XYZ 79.752 293.746 null ] >>
+endobj
+617 0 obj
+<< /D [ 596 0 R /XYZ 79.752 244.854 null ] >>
+endobj
+618 0 obj
+<< /D [ 596 0 R /XYZ 79.752 233.895 null ] >>
+endobj
+619 0 obj
+<< /D [ 596 0 R /XYZ 79.752 207.574 null ] >>
+endobj
+620 0 obj
+<< /D [ 596 0 R /XYZ 79.752 133.431 null ] >>
+endobj
+621 0 obj
+<< /D [ 596 0 R /XYZ 79.752 122.473 null ] >>
+endobj
+622 0 obj
+<< /D [ 596 0 R /XYZ 79.752 111.514 null ] >>
+endobj
+623 0 obj
+<< /D [ 596 0 R /XYZ 79.752 100.555 null ] >>
+endobj
+624 0 obj
+<< /D [ 596 0 R /XYZ 79.752 89.596 null ] >>
+endobj
+625 0 obj
+<< /D [ 596 0 R /XYZ 79.752 78.637 null ] >>
+endobj
+595 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F65 185 0 R /F68 189 0 R /F64 183 0 R /F69 304 0 R /F70 305 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+628 0 obj
+<< /Filter /FlateDecode /Length 2854 >>
+stream
+xڵZߏ~O7Y&H]4Jdi#ɻ-wdQ땬CbKr>|3TߤߥvcUL;
+ hKhEIGݍIlIL~a:_ny'茥:\DC.@m3ѡ Ǭ:ϸ%ʈ(;}K5Y=UDщ"?2-6/BE AӜVp"շ0uy3Z+ouuy._ڛ-QWbbsa M.{z.-,jo
+oyRmG\7)+Vf#54~ nY10cMKcY\U~J&]K{~u"0i'(xkLY-bqow
+.쨘S>dc_lIN- >|jCx<T}[
+ۇyYg. n"vo3˹`Rwx*l:̅ G;gYZ"8.? a,Wu}g]~X oeRkCd}׷nSve~X
+дW%lQ76uyC҄ǝ,#́ΌHK#;Dd 1B}M( ;=G#(kc_BQ;(`ohGGM5U8hyP@/H-B  =懂aP8)vynl>iÝ+77\Ux,\aD
+O/{6^:l0ɧ̳_EYw/"] ..+&h'pjmYT \k ő Uq]yRD8O<=# B RX1\@ a݌3r'efHL̹kBMk! zpP7ſt
+Q>w;} ѽ0
+ȀS|g}x\F ZP\4/XfDVG<e×vYZ$Ev5ڮ({FuWeRi8? %Ǒh#D?C_Y.!U ReZxyRpLD:}AE1z5MF
+endstream
+endobj
+627 0 obj
+<< /Type /Page /Contents 628 0 R /Resources 626 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 594 0 R >>
+endobj
+629 0 obj
+<< /D [ 627 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+630 0 obj
+<< /D [ 627 0 R /XYZ 79.752 742.929 null ] >>
+endobj
+631 0 obj
+<< /D [ 627 0 R /XYZ 79.752 690.127 null ] >>
+endobj
+632 0 obj
+<< /D [ 627 0 R /XYZ 79.752 637.325 null ] >>
+endobj
+633 0 obj
+<< /D [ 627 0 R /XYZ 79.752 626.366 null ] >>
+endobj
+634 0 obj
+<< /D [ 627 0 R /XYZ 79.752 549.654 null ] >>
+endobj
+635 0 obj
+<< /D [ 627 0 R /XYZ 79.752 538.695 null ] >>
+endobj
+636 0 obj
+<< /D [ 627 0 R /XYZ 79.752 483.9 null ] >>
+endobj
+637 0 obj
+<< /D [ 627 0 R /XYZ 79.752 441.061 null ] >>
+endobj
+638 0 obj
+<< /D [ 627 0 R /XYZ 79.752 376.304 null ] >>
+endobj
+639 0 obj
+<< /D [ 627 0 R /XYZ 79.752 365.345 null ] >>
+endobj
+640 0 obj
+<< /D [ 627 0 R /XYZ 79.752 276.677 null ] >>
+endobj
+641 0 obj
+<< /D [ 627 0 R /XYZ 79.752 235.83 null ] >>
+endobj
+643 0 obj
+<< /D [ 627 0 R /XYZ 79.752 183.028 null ] >>
+endobj
+645 0 obj
+<< /D [ 627 0 R /XYZ 79.752 118.271 null ] >>
+endobj
+646 0 obj
+<< /D [ 627 0 R /XYZ 79.752 107.312 null ] >>
+endobj
+626 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R /F27 642 0 R /F30 644 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+649 0 obj
+<< /Filter /FlateDecode /Length 2608 >>
+stream
+xڥZK6ϯ;2z"|gƆ/>7*h&LAPT
+Q0\x(O||)vtởyKYjQ^;KR&]b8 wLdpQب$j"^ʪ6(jꕮE_=]NFŗSVrewб蟋vֵQz.Y
+r|/G/Ug6'173oڃ+U<󭊶mZz[~EB3xw.?M=B/$}}ebX,u(X6G:m%sL1/0;R˥dSC'R3-#ӄ)Y
+YP8ɻ[`>+.WXb;CH,N2/' T7 C"FC'h8 ͳ*&Wӳa&"bIc
+z g17Z9k~ZwEMo`2ӱRGmq(_6A'ʄNE/XSg^FWLX4՗ VƗ`
+ʛYT$L6蘍恥P訰(#&(N0~?\b!`4kV&x<~g:bi+fc?՗h3ᗶ{:cC'9LHIKb, .6BE
+ʂ1MK_ j\ބp*Dz;Lلo*ߊĚ%N]G?lx$9@?i퉂uIY?v\αDnhnJBee(E̸:&&HS UowVF^t^rmO
+QOAf/":6FٸE3ĝ.;Wݩl~s
+R8I+*6ڼ6j?Mv*NQy{I }5]Xs+ۦ"f P&~YX_
+endstream
+endobj
+648 0 obj
+<< /Type /Page /Contents 649 0 R /Resources 647 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 594 0 R >>
+endobj
+650 0 obj
+<< /D [ 648 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+651 0 obj
+<< /D [ 648 0 R /XYZ 79.752 742.929 null ] >>
+endobj
+652 0 obj
+<< /D [ 648 0 R /XYZ 79.752 654.261 null ] >>
+endobj
+653 0 obj
+<< /D [ 648 0 R /XYZ 79.752 601.459 null ] >>
+endobj
+655 0 obj
+<< /D [ 648 0 R /XYZ 79.752 479.915 null ] >>
+endobj
+656 0 obj
+<< /D [ 648 0 R /XYZ 79.752 468.956 null ] >>
+endobj
+657 0 obj
+<< /D [ 648 0 R /XYZ 79.752 414.162 null ] >>
+endobj
+658 0 obj
+<< /D [ 648 0 R /XYZ 79.752 373.315 null ] >>
+endobj
+659 0 obj
+<< /D [ 648 0 R /XYZ 79.752 362.356 null ] >>
+endobj
+660 0 obj
+<< /D [ 648 0 R /XYZ 79.752 351.397 null ] >>
+endobj
+661 0 obj
+<< /D [ 648 0 R /XYZ 79.752 340.438 null ] >>
+endobj
+662 0 obj
+<< /D [ 648 0 R /XYZ 79.752 287.636 null ] >>
+endobj
+663 0 obj
+<< /D [ 648 0 R /XYZ 79.752 276.677 null ] >>
+endobj
+664 0 obj
+<< /D [ 648 0 R /XYZ 79.752 245.793 null ] >>
+endobj
+665 0 obj
+<< /D [ 648 0 R /XYZ 79.752 234.834 null ] >>
+endobj
+666 0 obj
+<< /D [ 648 0 R /XYZ 79.752 223.875 null ] >>
+endobj
+667 0 obj
+<< /D [ 648 0 R /XYZ 79.752 212.916 null ] >>
+endobj
+668 0 obj
+<< /D [ 648 0 R /XYZ 79.752 201.957 null ] >>
+endobj
+669 0 obj
+<< /D [ 648 0 R /XYZ 79.752 190.999 null ] >>
+endobj
+670 0 obj
+<< /D [ 648 0 R /XYZ 79.752 148.159 null ] >>
+endobj
+671 0 obj
+<< /D [ 648 0 R /XYZ 79.752 95.357 null ] >>
+endobj
+672 0 obj
+<< /D [ 648 0 R /XYZ 79.752 84.398 null ] >>
+endobj
+647 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R /F65 185 0 R /F78 654 0 R /F69 304 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+675 0 obj
+<< /Filter /FlateDecode /Length 3494 >>
+stream
+xڝZYs~<ZA*)*C6W)5C!ڍ=hCP#r@@_7ȯ]o?_,꫷ WL+gV\=\kђonT﨩+{, }mSj?1[l(bۗmնd0QOFӨm :ӛ7Ц{+]|4l`.[LpK6CQ/n 3&%Y(پ7ZĔ'CvF)}|lˮƅzP<IMQwlXV'c8jvC>*DŽ K g!rRTКm|B<#!43F4Y4Sp8iP
+OT|d-s[9&u6]<gFU$|B<USw̤u(dzѡfLbYsfpp) ;#a"7#׈pEUq/S }o`E-.sˁ<nc&>2ߖ}1GÙ8
+Ѱgnx+k{?6
+I H2z9 J0@n"NXPC0SW'e3^o0ƂFPR1 qtH-8Kҝb'1,HOӀd\ 4 7-Wba7 5O{@-rҐ [ٶed$ӕ Y@ҴM"Qzi!T";q 똆< !}3)9-r>P}w *rQRn~[53oT]$߄@VAz3al& wIe2_oTvo)F6e1eٕ}"bOq=jo[?'dZ*AU@6Z nOyx:
+vO=>F)F>p'@AYEf=q,KPfiRꊕ4'THӦ4Օ\1*NcpR5-gDB ˝ii:N
+|U7l}v 3t
+CP8B/<R^x,E5 X'r?v=IK>w#02,)i <_%NPg
+h
+<NEd TmqI)r0735G$6Dz-PS) }Tw yC,]+$ɛ>> xT_(>Z
+PaZ.x_w(y^q~:j@X}aZ"` k
+&Vkl8u R+lo؊ϜxGcAEET)/
+#!Hdzv`qJ2_ǓD5kF;9)_~/]-*| [jfs&cTJ[p O?!j~
+z[ez-jбmQU1'a:6"W
+ 63^Z<ǻٟ ^nQ[s N]V^s\S pͅBf\J N>LĆ>JKLYIc+O]4Z1ɅEPYJk,5VhDŽ=EbU<^BL ɯ0gř6%sRJϦRFo<ىb< L&Royc Y焟<SޮՀ`BM;w5j8蜊F( 56_~&\{7O|6Ra u~ICTZ|Z+d/URJ|Q%WWV%!*㙭_0I?Uә$: G^?ݫ"~)Ҭ
+#9g^#ҠUi/23b:A+BӶ9/ڎZb=`.J#y,(Z*C "{=^Kzz'YʹM]1Tl"`:FjsUl6Z6I};Bʠ5?҆
+ڌ>|JɩM];?NɹK|5 kjKOҚE,:+eX–6~YS+sT L^u(Z[c -nmUgi<W˧`[5sB(_UAbAU%s#| U |)u [QzH#o??9
+endstream
+endobj
+674 0 obj
+<< /Type /Page /Contents 675 0 R /Resources 673 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 594 0 R >>
+endobj
+676 0 obj
+<< /D [ 674 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+677 0 obj
+<< /D [ 674 0 R /XYZ 79.752 719.019 null ] >>
+endobj
+678 0 obj
+<< /D [ 674 0 R /XYZ 79.752 666.217 null ] >>
+endobj
+679 0 obj
+<< /D [ 674 0 R /XYZ 79.752 565.594 null ] >>
+endobj
+680 0 obj
+<< /D [ 674 0 R /XYZ 79.752 470.949 null ] >>
+endobj
+681 0 obj
+<< /D [ 674 0 R /XYZ 79.752 424.124 null ] >>
+endobj
+682 0 obj
+<< /D [ 674 0 R /XYZ 79.752 365.345 null ] >>
+endobj
+683 0 obj
+<< /D [ 674 0 R /XYZ 79.752 306.565 null ] >>
+endobj
+684 0 obj
+<< /D [ 674 0 R /XYZ 79.752 235.83 null ] >>
+endobj
+685 0 obj
+<< /D [ 674 0 R /XYZ 79.752 224.872 null ] >>
+endobj
+686 0 obj
+<< /D [ 674 0 R /XYZ 79.752 166.092 null ] >>
+endobj
+687 0 obj
+<< /D [ 674 0 R /XYZ 79.752 155.133 null ] >>
+endobj
+688 0 obj
+<< /D [ 674 0 R /XYZ 79.752 144.174 null ] >>
+endobj
+689 0 obj
+<< /D [ 674 0 R /XYZ 79.752 133.215 null ] >>
+endobj
+673 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F69 304 0 R /F68 189 0 R /F64 183 0 R /F70 305 0 R /F30 644 0 R /F27 642 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+692 0 obj
+<< /Filter /FlateDecode /Length 3202 >>
+stream
+xڽ[Ks6ϯ𑪲xDNIewgkwrȤTDPBRqRۍE2%:U{ ݍ~WW}o`T^޿c^+mW:evwsrXn}SU͊䩬'PxE۹\ O{,)鱨Ӷ#D!r
+V^eTdcZF1,Ą,~]O|\(lSumщ0%:ݘ6~]uSoaFb1Kz&lL.ҀM.6V5 Bpj1yc.4DtåH;&]ۡ7['ζƧ> ivzP%@i6p߼o˯k-dL^vSp2{f[/ŚIDE&Hnmaӻ'<{8UYh0z#HjT>(Mֲ7]ٗGܻ>y:wpSt &Y "rh(2ȓ .Ovսm}[tshv=v?QN-6=2yeݼBRN8ÓWH4t0J2$3"u~{-&, ^8 l11MuT(2جTG41 XAo_fq21$S*&9b1$۰Xg43)rX 7^
+w{ m릩:9y{;T}7 wnBF?ϻId)Iydl"1/ ^ϡl,2 y'(c4gFaVv\>
+6f^׊ܔSxN_yEf;9ǠG>f, U| hY⒅J :R?D"WXf]v~ p/LQ5ش|W|ŻiZ7<^Fz<[Byf}7&{f#&U1IAϘWI$͕RBImtƾRb 6Z2Q5YS_~}c 1Ȃy$?'r״[Tٹj#sٗԒt"9b{sVH![@As:#DApw x{s~qD@j V&[deƴN&'}S- 3Hg]l~BIܘv7@idѾXlh+8d &U #Z[t[PՔ
+-ٖ9Z{s~] {t!LwOuynwOU֟ݓ ƩI~.vޖ
+RpE •GBv<?WřJ`wd(Ecҙ3gX/#9FƽG:3DaM~<9L8&@A&ChkyvD>Oj8C/B+A4;}8SZ#Y<,-:ᔬ]Q^ZAl#av5L!6mƜDP³:)uyxN}}R7
+Etep;[<81,oG6[^^''r"O!DmݴEއ ._.ƀ.Ԅ4,fG׷>.ЄpuH.:.hd_ubT0*7`
+|L:V7(Qr&Z{=UJU.)3mo2
+endstream
+endobj
+691 0 obj
+<< /Type /Page /Contents 692 0 R /Resources 690 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 594 0 R >>
+endobj
+693 0 obj
+<< /D [ 691 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+694 0 obj
+<< /D [ 691 0 R /XYZ 79.752 754.884 null ] >>
+endobj
+695 0 obj
+<< /D [ 691 0 R /XYZ 79.752 743.925 null ] >>
+endobj
+696 0 obj
+<< /D [ 691 0 R /XYZ 79.752 732.966 null ] >>
+endobj
+697 0 obj
+<< /D [ 691 0 R /XYZ 79.752 722.007 null ] >>
+endobj
+698 0 obj
+<< /D [ 691 0 R /XYZ 79.752 711.048 null ] >>
+endobj
+699 0 obj
+<< /D [ 691 0 R /XYZ 79.752 628.358 null ] >>
+endobj
+700 0 obj
+<< /D [ 691 0 R /XYZ 79.752 581.534 null ] >>
+endobj
+701 0 obj
+<< /D [ 691 0 R /XYZ 79.752 534.71 null ] >>
+endobj
+702 0 obj
+<< /D [ 691 0 R /XYZ 79.752 523.751 null ] >>
+endobj
+703 0 obj
+<< /D [ 691 0 R /XYZ 79.752 512.792 null ] >>
+endobj
+704 0 obj
+<< /D [ 691 0 R /XYZ 79.752 501.833 null ] >>
+endobj
+705 0 obj
+<< /D [ 691 0 R /XYZ 79.752 490.874 null ] >>
+endobj
+706 0 obj
+<< /D [ 691 0 R /XYZ 79.752 479.915 null ] >>
+endobj
+707 0 obj
+<< /D [ 691 0 R /XYZ 79.752 397.225 null ] >>
+endobj
+708 0 obj
+<< /D [ 691 0 R /XYZ 79.752 350.401 null ] >>
+endobj
+709 0 obj
+<< /D [ 691 0 R /XYZ 79.752 279.666 null ] >>
+endobj
+710 0 obj
+<< /D [ 691 0 R /XYZ 79.752 244.797 null ] >>
+endobj
+711 0 obj
+<< /D [ 691 0 R /XYZ 79.752 174.062 null ] >>
+endobj
+712 0 obj
+<< /D [ 691 0 R /XYZ 79.752 163.103 null ] >>
+endobj
+713 0 obj
+<< /D [ 691 0 R /XYZ 79.752 152.144 null ] >>
+endobj
+714 0 obj
+<< /D [ 691 0 R /XYZ 79.752 141.185 null ] >>
+endobj
+715 0 obj
+<< /D [ 691 0 R /XYZ 79.752 106.316 null ] >>
+endobj
+690 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F68 189 0 R /F64 183 0 R /F20 186 0 R /F30 644 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+718 0 obj
+<< /Filter /FlateDecode /Length 2289 >>
+stream
+xڵZK۸WB'Ao6&!N(3Ø"'$53ƃ"82DeHhCVw{|iHw>$+J3U(I]ݝV\hn͖s ahWO-++0:_wh,eHb;8a" %G #gHSJy}OZi$Y6!F$!7J4l,3"%r+-$,@V4L҄)]çV2iO?힟n×tY +B"cY+8F78p~B%aܩo]qXbk*Ѩ G=l2-B9y
+-!`<\uq 1ܜp(d)ELO{hN[`v…
+GCDle~v?h
+zr}m4BᇽΣ §"! dcb>K`ʄy"c(ǫ0ox9cDꑓ$]fWh5_:Xߏ'Dt|ne1M2v*4%!̗,o `jkmײsBkupK-s?|±2PK;RpUeӄ($"}=4g] JSobzhNeO--̛z,FRfeα<]?}[׾w`/P*Yw,;nU>"YЎemV
+ M8MN!ϙNxc4 a_,$~ޤT)϶-^S7h 5(ϦJX8 J-׿.WrOKM]}uqP~p| \i{96T~MNvEr ҵt)Wx[H⸅O}Se#W<~L
+T`ܳ5,9!F\p ap
+8G
+endstream
+endobj
+717 0 obj
+<< /Type /Page /Contents 718 0 R /Resources 716 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 594 0 R >>
+endobj
+719 0 obj
+<< /D [ 717 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+720 0 obj
+<< /D [ 717 0 R /XYZ 79.752 754.884 null ] >>
+endobj
+721 0 obj
+<< /D [ 717 0 R /XYZ 79.752 743.925 null ] >>
+endobj
+722 0 obj
+<< /D [ 717 0 R /XYZ 79.752 709.056 null ] >>
+endobj
+723 0 obj
+<< /D [ 717 0 R /XYZ 79.752 662.231 null ] >>
+endobj
+724 0 obj
+<< /D [ 717 0 R /XYZ 79.752 651.273 null ] >>
+endobj
+725 0 obj
+<< /D [ 717 0 R /XYZ 79.752 604.448 null ] >>
+endobj
+726 0 obj
+<< /D [ 717 0 R /XYZ 79.752 579.542 null ] >>
+endobj
+727 0 obj
+<< /D [ 717 0 R /XYZ 79.752 568.583 null ] >>
+endobj
+728 0 obj
+<< /D [ 717 0 R /XYZ 79.752 557.624 null ] >>
+endobj
+729 0 obj
+<< /D [ 717 0 R /XYZ 79.752 546.665 null ] >>
+endobj
+730 0 obj
+<< /D [ 717 0 R /XYZ 79.752 535.706 null ] >>
+endobj
+731 0 obj
+<< /D [ 717 0 R /XYZ 79.752 524.747 null ] >>
+endobj
+732 0 obj
+<< /D [ 717 0 R /XYZ 79.752 513.788 null ] >>
+endobj
+733 0 obj
+<< /D [ 717 0 R /XYZ 79.752 464.971 null ] >>
+endobj
+734 0 obj
+<< /D [ 717 0 R /XYZ 79.752 412.169 null ] >>
+endobj
+735 0 obj
+<< /D [ 717 0 R /XYZ 79.752 359.367 null ] >>
+endobj
+737 0 obj
+<< /D [ 717 0 R /XYZ 79.752 217.898 null ] >>
+endobj
+738 0 obj
+<< /D [ 717 0 R /XYZ 79.752 206.939 null ] >>
+endobj
+739 0 obj
+<< /D [ 717 0 R /XYZ 79.752 122.256 null ] >>
+endobj
+740 0 obj
+<< /D [ 717 0 R /XYZ 79.752 111.297 null ] >>
+endobj
+716 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R /F79 736 0 R /F78 654 0 R /F27 642 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+744 0 obj
+<< /Filter /FlateDecode /Length 2826 >>
+stream
+xڝZ[o8~ϯ0P`V4n3L}h
+CqD[YXr=A1}! EZ9߹(t񰠋]Ѓ߿__|EJR͵\\_0xAl2YlqY|Ln8O? N 3* 7?gMV$z)XwS}O!~|y)JZr6,faB~XhjgpM<h<t,Mn}7ryɒ0 ؤns"+Ln(SdUo𐽅'B%YX
+m& Kށ&qy^"%Bxx ʛ?Eg,$
+IARq O\q
+:cc]d?%(BH~eƈMDap1<iIZ^4Ȧr?4  qM,DH#
+ĐU>,/3AFPgPp,!lC5^BVx>/H7 }Rljb`IYX4k8RCnyiK)
+>n{
+ 8@$$^YYCH&K)
+M SH0p
+
+hJBbôMIZX՜P_N$bSP9'C'8=ߡVh<1  <FBVGt=ZgK) Ϻ֝8MɶӍ@)-a\XOva-W|7$Y(E0/yM:j(G&pfev(a,D3FkBwMֳ(R̼gb B"g2$} sV euwBB{±^F{ڔ!r!'zu*>։ l678?%;_sEBWWqq6YB**(IUCQ)zǎ?E\OԔr,O7Όť D$@C]yuu:r 9wTU2߿X3Z0}hTa]zG~&b'u4}RK r BKAe( oVG!4;Lzc:(]?-"[C oy7
+`YXT ,"_+""w] $1]FuX4:^2U##.综@1俯^X~UT RWEq5&%jh2mB  '=4R޵MaH|O0]+Z`hլZBw*ɊjH׎f.poÁ Q
+endstream
+endobj
+743 0 obj
+<< /Type /Page /Contents 744 0 R /Resources 742 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 594 0 R /Annots 763 0 R >>
+endobj
+763 0 obj
+[ 741 0 R ]
+endobj
+741 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 377.359 623.542 383.821 635.479 ]/A << /S /GoTo /D (Hfootnote.2) >> >>
+endobj
+745 0 obj
+<< /D [ 743 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+746 0 obj
+<< /D [ 743 0 R /XYZ 79.752 695.063 null ] >>
+endobj
+747 0 obj
+<< /D [ 743 0 R /XYZ 79.752 684.104 null ] >>
+endobj
+748 0 obj
+<< /D [ 743 0 R /XYZ 79.752 612.125 null ] >>
+endobj
+749 0 obj
+<< /D [ 743 0 R /XYZ 79.752 564.056 null ] >>
+endobj
+750 0 obj
+<< /D [ 743 0 R /XYZ 79.752 433.773 null ] >>
+endobj
+751 0 obj
+<< /D [ 743 0 R /XYZ 79.752 422.814 null ] >>
+endobj
+752 0 obj
+<< /D [ 743 0 R /XYZ 79.752 285.623 null ] >>
+endobj
+753 0 obj
+<< /D [ 743 0 R /XYZ 79.752 218.942 null ] >>
+endobj
+754 0 obj
+<< /D [ 743 0 R /XYZ 79.752 163.22 null ] >>
+endobj
+755 0 obj
+<< /D [ 743 0 R /XYZ 79.752 152.261 null ] >>
+endobj
+756 0 obj
+<< /D [ 743 0 R /XYZ 79.752 141.302 null ] >>
+endobj
+757 0 obj
+<< /D [ 743 0 R /XYZ 79.752 130.343 null ] >>
+endobj
+758 0 obj
+<< /D [ 743 0 R /XYZ 79.752 119.384 null ] >>
+endobj
+759 0 obj
+<< /D [ 743 0 R /XYZ 94.613 89.795 null ] >>
+endobj
+742 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F78 654 0 R /F79 736 0 R /F19 184 0 R /F20 186 0 R /F32 176 0 R /F27 642 0 R /F68 189 0 R /F64 183 0 R /F22 459 0 R /F76 468 0 R /F53 203 0 R /F80 760 0 R /F46 761 0 R /F42 762 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+767 0 obj
+<< /Filter /FlateDecode /Length 2577 >>
+stream
+xڵn_! qvd 1t eCj{P,YEwrzz[.t?O, 1k~`0Al"E-w/ՍTbmYdy,G>έ³}<z7҇Mlߚ->2[@&XLR^].!!T,7̑'EOl~Xtb.ERzU0 T¨vdǢ
+g:!2~1S~=zu7%QIpF#{ <_L͂4Wz$!'1w]ѯfsM9*^̣{ |;aDM:K|)Yg:Fu&_ n_v,ȹdkC{XE<Ggy=||'"Z?wWu
+oZ}vc֍EL޾jN#$4=u0"p㊥(|#IB)&?+bq-bP2ǁ0m$E.<b);a51,™toEfoEyg˟ !% jp*? ɡg<I< ;]WN!F=\?[Noٿ7$!A:.;  }iB]c: mw^[{vs@m]i?_KB]JSoSʹ1F{f[LJ RzY }3V _ꂷndѓAH
+v
+endstream
+endobj
+766 0 obj
+<< /Type /Page /Contents 767 0 R /Resources 765 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 594 0 R >>
+endobj
+768 0 obj
+<< /D [ 766 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+769 0 obj
+<< /D [ 766 0 R /XYZ 79.752 730.974 null ] >>
+endobj
+770 0 obj
+<< /D [ 766 0 R /XYZ 79.752 720.015 null ] >>
+endobj
+771 0 obj
+<< /D [ 766 0 R /XYZ 79.752 709.056 null ] >>
+endobj
+772 0 obj
+<< /D [ 766 0 R /XYZ 79.752 698.097 null ] >>
+endobj
+773 0 obj
+<< /D [ 766 0 R /XYZ 79.752 687.138 null ] >>
+endobj
+774 0 obj
+<< /D [ 766 0 R /XYZ 79.752 676.179 null ] >>
+endobj
+775 0 obj
+<< /D [ 766 0 R /XYZ 79.752 665.22 null ] >>
+endobj
+776 0 obj
+<< /D [ 766 0 R /XYZ 79.752 654.261 null ] >>
+endobj
+777 0 obj
+<< /D [ 766 0 R /XYZ 79.752 643.302 null ] >>
+endobj
+778 0 obj
+<< /D [ 766 0 R /XYZ 79.752 632.344 null ] >>
+endobj
+779 0 obj
+<< /D [ 766 0 R /XYZ 79.752 621.385 null ] >>
+endobj
+780 0 obj
+<< /D [ 766 0 R /XYZ 79.752 610.426 null ] >>
+endobj
+781 0 obj
+<< /D [ 766 0 R /XYZ 79.752 599.467 null ] >>
+endobj
+782 0 obj
+<< /D [ 766 0 R /XYZ 79.752 588.508 null ] >>
+endobj
+783 0 obj
+<< /D [ 766 0 R /XYZ 79.752 577.549 null ] >>
+endobj
+784 0 obj
+<< /D [ 766 0 R /XYZ 79.752 566.59 null ] >>
+endobj
+785 0 obj
+<< /D [ 766 0 R /XYZ 79.752 555.631 null ] >>
+endobj
+786 0 obj
+<< /D [ 766 0 R /XYZ 79.752 544.672 null ] >>
+endobj
+787 0 obj
+<< /D [ 766 0 R /XYZ 79.752 533.713 null ] >>
+endobj
+788 0 obj
+<< /D [ 766 0 R /XYZ 79.752 416.154 null ] >>
+endobj
+789 0 obj
+<< /D [ 766 0 R /XYZ 79.752 405.195 null ] >>
+endobj
+790 0 obj
+<< /D [ 766 0 R /XYZ 79.752 394.236 null ] >>
+endobj
+791 0 obj
+<< /D [ 766 0 R /XYZ 79.752 383.278 null ] >>
+endobj
+792 0 obj
+<< /D [ 766 0 R /XYZ 79.752 372.319 null ] >>
+endobj
+793 0 obj
+<< /D [ 766 0 R /XYZ 79.752 361.36 null ] >>
+endobj
+25 0 obj
+<< /D [ 766 0 R /XYZ 79.37 335.905 null ] >>
+endobj
+765 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F70 305 0 R /F68 189 0 R /F64 183 0 R /F78 654 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+796 0 obj
+<< /Filter /FlateDecode /Length 3045 >>
+stream
+xnRȸniNE@`wap$&F5$51~lLltuJWJG?\}UF2ŔX]QHWtE$ȕVn_R&׿!xNC3Eh6y(ׂaTrگI>N'hRݹ6p~PEǺh
+I0Pd۲nZIǺl¯Y:őP01(?}@beSDFh&TI^9CG~\~myhg`YFR-b\d@y}rJ0R$gAWZ2ת :9JV'>NCDTU)6UNy駼^,1{fбf;(nꮮc""?R9<B#M 7m`V p. EZYcA>L[\&9FJԀ3Rb2ZH>p,P ݁XCNGbv4z͟$3#n< >Uw#`.l n$N4n C2! F3K%]%lY9hDƂi]:*)7qsy}6Z
+GQ4e!QT`H]rߜS&qܡ@)3o0Xw4Bش4oBZ,.w0QSAOd
+nyFђ mur+sAi]¾)v1g;sEpL
+FR5Q:Z:n_@aP"xB ^6]s?LDf(o=ө8l<ye(X9}+odJ]/͡&5D(:T%kOw.s eCUuBԝhg3"3;.hEsDHz.<#tr tPΑpuxɾmȆCmiRDC:Zo:Tܟm6pL18bK-uf`jpPoֆ%c(MB
+X
+k(!4D/ =xyɁAǝyea R2xQ?eVXRΆ$`BdB;Tw`v7?aQb1HVO a;m1vTETaJpѷ@黟1g 4Qau|uC-pNU`rQ$hU! ȵLƍє*?uj=Jޚ؁Dŋ tCcr\:_
+p4b^)DnL ܘ\sRe]ly͂089+B~* T>XySF1MUEMqt
+\v KF'vܖ!m=8*{ĀZ8<&?oٝ]w^ϐv)YgD#3n׻}{%#Pl"""q|:.nkt.(QzaCX{-٠n5Hkw? ;1:|@ .Uih6/5d xkMU:{,0SPC6\R{]SC 9Kq0δipXH14Y]tD"#_6ݮZ|ɒ;à䇉:.[W>$\$B-5EړxkOb>51vۅ j,NeQ-㌻T+S۲}6S3^ 4:Qt,1N'l.!W1"MC`a~X$MT9=Q_y H"vRrc$j ^˕9<F!
+,cK¹^x# 7a1KCX|bòzRD\:xӃSc mZu tWt Qc1-.,0w?C4*WD>~|(;[?ѕ<w>oݺ+
+˞jWO.=@4<\4|0@sFGX(.lQ9 ؗ~蹞$1sܣ4RH!Y\mW[ $!~ gQۭywX@!Vj #C߾|9N
+endstream
+endobj
+795 0 obj
+<< /Type /Page /Contents 796 0 R /Resources 794 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 594 0 R /Annots 815 0 R >>
+endobj
+815 0 obj
+[ 764 0 R ]
+endobj
+764 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 300.845 745.896 307.307 758.109 ]/A << /S /GoTo /D (Hfootnote.3) >> >>
+endobj
+797 0 obj
+<< /D [ 795 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+799 0 obj
+<< /D [ 795 0 R /XYZ 79.752 505.818 null ] >>
+endobj
+800 0 obj
+<< /D [ 795 0 R /XYZ 79.752 489.878 null ] >>
+endobj
+801 0 obj
+<< /D [ 795 0 R /XYZ 79.752 478.919 null ] >>
+endobj
+802 0 obj
+<< /D [ 795 0 R /XYZ 79.752 424.124 null ] >>
+endobj
+803 0 obj
+<< /D [ 795 0 R /XYZ 79.752 371.322 null ] >>
+endobj
+804 0 obj
+<< /D [ 795 0 R /XYZ 79.752 360.363 null ] >>
+endobj
+805 0 obj
+<< /D [ 795 0 R /XYZ 79.752 349.405 null ] >>
+endobj
+806 0 obj
+<< /D [ 795 0 R /XYZ 79.752 338.446 null ] >>
+endobj
+807 0 obj
+<< /D [ 795 0 R /XYZ 79.752 327.487 null ] >>
+endobj
+808 0 obj
+<< /D [ 795 0 R /XYZ 79.752 316.528 null ] >>
+endobj
+809 0 obj
+<< /D [ 795 0 R /XYZ 79.752 305.569 null ] >>
+endobj
+810 0 obj
+<< /D [ 795 0 R /XYZ 79.752 264.722 null ] >>
+endobj
+811 0 obj
+<< /D [ 795 0 R /XYZ 79.752 223.875 null ] >>
+endobj
+812 0 obj
+<< /D [ 795 0 R /XYZ 79.752 183.028 null ] >>
+endobj
+813 0 obj
+<< /D [ 795 0 R /XYZ 79.752 118.271 null ] >>
+endobj
+814 0 obj
+<< /D [ 795 0 R /XYZ 94.613 87.437 null ] >>
+endobj
+794 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F79 736 0 R /F19 184 0 R /F20 186 0 R /F22 459 0 R /F81 798 0 R /F27 642 0 R /F68 189 0 R /F64 183 0 R /F76 468 0 R /F53 203 0 R /F80 760 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+818 0 obj
+<< /Filter /FlateDecode /Length 2455 >>
+stream
+xZ[o~ϯPF<p X-YDl$R8 =g.4Ge6Ҙߜoϝ럮^{fgX͵]^1DьPfWOm}v!%-n]K okĊ ^ꌛÙEլuX^ua!
+Va]ߵ n~;)PLyݦM@>}^)2E6`ZKrva*~lu|qm&-aTMFm kGmѨ-\_fwz闪#pn~[BXީK1܆nr+n]{! K)2=q.-1wT)5LRKtzH8X%StӂR‡{4@QbQrv^dʍ!s=?HVJ*ȮȾLJU?$"")m[|R=;/6* wQcʪo?CKor y
+ZZtAi>l.c|>*sIJQ/fs&)es<?Tٕ=%`tc1
+BϙVJ>ґT}*%qe%;m,$Kۭ^;YIPvo?J>+{tdY 9ؼs q^Q J6W趞n>t!W oaLo
+qabT6ZbJI(HhMnt(aFEnFߚp_Qj@-><܋0 v]Fp~UX0.XJ?z^q)6{";-YEVƇK9xK;~j:9u*鵈9\ 8mbbS,|H[Cam{( oXj^o/N29m:BrsI*0JJd,5=bO,!R`AS͂Aj k[[Z:Ț\]KR{4犸/n˺u/)evʣ?g7evԑ:h*GhVo1Ln(N{Zcǣ9#';yp6-QlUњu
+ cԶys
+=5zxOs'4Χ|ќ[,+N)gAWphfKLE{/bD2Oј7F4j<Z,ISΛ'ik~za/_@_NUDyC0ox N$C{Sph-1<E3-fYB@Z N_Lih_@g|v&#Zmjχj}7GI5" ƔbDI;`*l>Sޑ35UBhM\Z_^7
+endstream
+endobj
+817 0 obj
+<< /Type /Page /Contents 818 0 R /Resources 816 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 868 0 R >>
+endobj
+819 0 obj
+<< /D [ 817 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+820 0 obj
+<< /D [ 817 0 R /XYZ 79.752 707.063 null ] >>
+endobj
+821 0 obj
+<< /D [ 817 0 R /XYZ 79.752 696.104 null ] >>
+endobj
+822 0 obj
+<< /D [ 817 0 R /XYZ 79.752 685.146 null ] >>
+endobj
+823 0 obj
+<< /D [ 817 0 R /XYZ 79.752 674.187 null ] >>
+endobj
+824 0 obj
+<< /D [ 817 0 R /XYZ 79.752 633.34 null ] >>
+endobj
+825 0 obj
+<< /D [ 817 0 R /XYZ 79.752 622.381 null ] >>
+endobj
+826 0 obj
+<< /D [ 817 0 R /XYZ 79.752 611.422 null ] >>
+endobj
+827 0 obj
+<< /D [ 817 0 R /XYZ 79.752 600.463 null ] >>
+endobj
+828 0 obj
+<< /D [ 817 0 R /XYZ 79.752 589.504 null ] >>
+endobj
+829 0 obj
+<< /D [ 817 0 R /XYZ 79.752 578.545 null ] >>
+endobj
+830 0 obj
+<< /D [ 817 0 R /XYZ 79.752 567.586 null ] >>
+endobj
+831 0 obj
+<< /D [ 817 0 R /XYZ 79.752 556.627 null ] >>
+endobj
+832 0 obj
+<< /D [ 817 0 R /XYZ 79.752 545.669 null ] >>
+endobj
+833 0 obj
+<< /D [ 817 0 R /XYZ 79.752 534.71 null ] >>
+endobj
+834 0 obj
+<< /D [ 817 0 R /XYZ 79.752 523.751 null ] >>
+endobj
+835 0 obj
+<< /D [ 817 0 R /XYZ 79.752 512.792 null ] >>
+endobj
+836 0 obj
+<< /D [ 817 0 R /XYZ 79.752 501.833 null ] >>
+endobj
+837 0 obj
+<< /D [ 817 0 R /XYZ 79.752 490.874 null ] >>
+endobj
+838 0 obj
+<< /D [ 817 0 R /XYZ 79.752 479.915 null ] >>
+endobj
+839 0 obj
+<< /D [ 817 0 R /XYZ 79.752 468.956 null ] >>
+endobj
+840 0 obj
+<< /D [ 817 0 R /XYZ 79.752 457.997 null ] >>
+endobj
+841 0 obj
+<< /D [ 817 0 R /XYZ 79.752 447.038 null ] >>
+endobj
+842 0 obj
+<< /D [ 817 0 R /XYZ 79.752 436.08 null ] >>
+endobj
+843 0 obj
+<< /D [ 817 0 R /XYZ 79.752 359.367 null ] >>
+endobj
+844 0 obj
+<< /D [ 817 0 R /XYZ 79.752 348.408 null ] >>
+endobj
+845 0 obj
+<< /D [ 817 0 R /XYZ 79.752 337.449 null ] >>
+endobj
+846 0 obj
+<< /D [ 817 0 R /XYZ 79.752 326.49 null ] >>
+endobj
+847 0 obj
+<< /D [ 817 0 R /XYZ 79.752 315.532 null ] >>
+endobj
+848 0 obj
+<< /D [ 817 0 R /XYZ 79.752 304.573 null ] >>
+endobj
+849 0 obj
+<< /D [ 817 0 R /XYZ 79.752 293.614 null ] >>
+endobj
+850 0 obj
+<< /D [ 817 0 R /XYZ 79.752 282.655 null ] >>
+endobj
+851 0 obj
+<< /D [ 817 0 R /XYZ 79.752 271.696 null ] >>
+endobj
+852 0 obj
+<< /D [ 817 0 R /XYZ 79.752 260.737 null ] >>
+endobj
+853 0 obj
+<< /D [ 817 0 R /XYZ 79.752 249.778 null ] >>
+endobj
+854 0 obj
+<< /D [ 817 0 R /XYZ 79.752 238.819 null ] >>
+endobj
+855 0 obj
+<< /D [ 817 0 R /XYZ 79.752 227.86 null ] >>
+endobj
+856 0 obj
+<< /D [ 817 0 R /XYZ 79.752 216.901 null ] >>
+endobj
+857 0 obj
+<< /D [ 817 0 R /XYZ 79.752 205.943 null ] >>
+endobj
+858 0 obj
+<< /D [ 817 0 R /XYZ 79.752 194.984 null ] >>
+endobj
+859 0 obj
+<< /D [ 817 0 R /XYZ 79.752 184.025 null ] >>
+endobj
+860 0 obj
+<< /D [ 817 0 R /XYZ 79.752 173.066 null ] >>
+endobj
+861 0 obj
+<< /D [ 817 0 R /XYZ 79.752 162.107 null ] >>
+endobj
+862 0 obj
+<< /D [ 817 0 R /XYZ 79.752 151.148 null ] >>
+endobj
+863 0 obj
+<< /D [ 817 0 R /XYZ 79.752 140.189 null ] >>
+endobj
+864 0 obj
+<< /D [ 817 0 R /XYZ 79.752 129.23 null ] >>
+endobj
+865 0 obj
+<< /D [ 817 0 R /XYZ 79.752 118.271 null ] >>
+endobj
+866 0 obj
+<< /D [ 817 0 R /XYZ 79.752 102.331 null ] >>
+endobj
+867 0 obj
+<< /D [ 817 0 R /XYZ 79.752 91.372 null ] >>
+endobj
+816 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F65 185 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+871 0 obj
+<< /Filter /FlateDecode /Length 2554 >>
+stream
+xڭZ[o8~0py`:}Sb10[ڲ+MEdRql3%x.<!E<yɟp~_d$|r@2aI&wӏWM5cx/k{C_m6efn66UtU^_v76?Z7M1 r+>vVv
+.Sy<\ GFFS6v(C3{|`)ђLuL!9 w7kٮ}{*\Ķ&4WZ;@9<..ӝĨOz4
+[x,t PZ2v'Pvuo5TxQ
+_V#0n|QӸ;o-WĒ)SKa
+0r6a\2"8nj`D|Z5R!ϫmm@=kfm]x)YJ~pz9ؿƒuOwwC̼9&rR&z aȦu7~ 5ӕ>)Dv/0A(:hN֋8!ɛ3>Dș-!V f]FvH_|Xt.Vw@оn_D;D} ҏ)Z"&Kֳ~f?Rr`AȀ~CSw$JȺ\a & f N 8 D'@¶d!/KC59z 5_nonm(GB IX閂zzKuBxQ<[wռO,Xe `rLeT/ɽ@yl  3U غ sɖd(rRхd Ŵ
+M(N.`#E}?R4Y炲iveMǎceQJa`c}:+Q /Y Z*;,f,Ov[vfRZmb2=𼇣Ā`q§+5>]<,O[vhMӘn!Q0~*>ޒa(6+T8መ#:zP/(񃛜FR`/>26<<
+ },ӂػ]ca;)6L9K|+!6Rg3+f R\ L(yUasa`&RuqH˘,4.-[=`6YUSܺ],+QW+PX4d&BMM/mw,(2p~j7pM3ay;(J
+DgeF%Xm=wMS=5ZK $.u{zRAFf9<Rl "JF_%TWOKdQ.¥.wfQvuoc} D4@_Ch™``vc^к,NRpʽm]})&K~ S4]2pֈqz. &r!E/sW0 8G -LExXQ0b2&VQEs(i$cË2!%C K )1eIyAUpdP#ˢ?GyYz\ :\Ҡ@X ֨2SD_1 n˗ oCH٦l1ptlS42p$pغm7H"?eF!A%{ot,1;\ ch]aE#WMS3)[1drOP(CSC!BdԣlQ])L8E_F" 2OZQb9T*#F3etkEђbIˑ
+Ҝd{C#o
+endstream
+endobj
+870 0 obj
+<< /Type /Page /Contents 871 0 R /Resources 869 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 868 0 R >>
+endobj
+872 0 obj
+<< /D [ 870 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+873 0 obj
+<< /D [ 870 0 R /XYZ 79.752 730.974 null ] >>
+endobj
+874 0 obj
+<< /D [ 870 0 R /XYZ 79.752 720.015 null ] >>
+endobj
+875 0 obj
+<< /D [ 870 0 R /XYZ 79.752 643.302 null ] >>
+endobj
+876 0 obj
+<< /D [ 870 0 R /XYZ 79.752 632.344 null ] >>
+endobj
+877 0 obj
+<< /D [ 870 0 R /XYZ 79.752 621.385 null ] >>
+endobj
+878 0 obj
+<< /D [ 870 0 R /XYZ 79.752 516.777 null ] >>
+endobj
+879 0 obj
+<< /D [ 870 0 R /XYZ 79.752 505.818 null ] >>
+endobj
+880 0 obj
+<< /D [ 870 0 R /XYZ 79.752 494.859 null ] >>
+endobj
+881 0 obj
+<< /D [ 870 0 R /XYZ 79.752 483.9 null ] >>
+endobj
+882 0 obj
+<< /D [ 870 0 R /XYZ 79.752 472.941 null ] >>
+endobj
+883 0 obj
+<< /D [ 870 0 R /XYZ 79.752 461.982 null ] >>
+endobj
+884 0 obj
+<< /D [ 870 0 R /XYZ 79.752 451.023 null ] >>
+endobj
+885 0 obj
+<< /D [ 870 0 R /XYZ 79.752 440.065 null ] >>
+endobj
+886 0 obj
+<< /D [ 870 0 R /XYZ 79.752 429.106 null ] >>
+endobj
+887 0 obj
+<< /D [ 870 0 R /XYZ 79.752 418.147 null ] >>
+endobj
+888 0 obj
+<< /D [ 870 0 R /XYZ 79.752 407.188 null ] >>
+endobj
+889 0 obj
+<< /D [ 870 0 R /XYZ 79.752 396.229 null ] >>
+endobj
+890 0 obj
+<< /D [ 870 0 R /XYZ 79.752 385.27 null ] >>
+endobj
+891 0 obj
+<< /D [ 870 0 R /XYZ 79.752 374.311 null ] >>
+endobj
+892 0 obj
+<< /D [ 870 0 R /XYZ 79.752 363.352 null ] >>
+endobj
+893 0 obj
+<< /D [ 870 0 R /XYZ 79.752 352.393 null ] >>
+endobj
+894 0 obj
+<< /D [ 870 0 R /XYZ 79.752 341.434 null ] >>
+endobj
+895 0 obj
+<< /D [ 870 0 R /XYZ 79.752 330.476 null ] >>
+endobj
+896 0 obj
+<< /D [ 870 0 R /XYZ 79.752 319.517 null ] >>
+endobj
+897 0 obj
+<< /D [ 870 0 R /XYZ 79.752 308.558 null ] >>
+endobj
+898 0 obj
+<< /D [ 870 0 R /XYZ 79.752 297.599 null ] >>
+endobj
+899 0 obj
+<< /D [ 870 0 R /XYZ 79.752 286.64 null ] >>
+endobj
+900 0 obj
+<< /D [ 870 0 R /XYZ 79.752 275.681 null ] >>
+endobj
+901 0 obj
+<< /D [ 870 0 R /XYZ 79.752 264.722 null ] >>
+endobj
+902 0 obj
+<< /D [ 870 0 R /XYZ 79.752 253.763 null ] >>
+endobj
+903 0 obj
+<< /D [ 870 0 R /XYZ 79.752 242.804 null ] >>
+endobj
+904 0 obj
+<< /D [ 870 0 R /XYZ 79.752 231.845 null ] >>
+endobj
+905 0 obj
+<< /D [ 870 0 R /XYZ 79.752 220.887 null ] >>
+endobj
+906 0 obj
+<< /D [ 870 0 R /XYZ 79.752 209.928 null ] >>
+endobj
+907 0 obj
+<< /D [ 870 0 R /XYZ 79.752 198.969 null ] >>
+endobj
+908 0 obj
+<< /D [ 870 0 R /XYZ 79.752 188.01 null ] >>
+endobj
+909 0 obj
+<< /D [ 870 0 R /XYZ 79.752 177.051 null ] >>
+endobj
+910 0 obj
+<< /D [ 870 0 R /XYZ 79.752 166.092 null ] >>
+endobj
+911 0 obj
+<< /D [ 870 0 R /XYZ 79.752 155.133 null ] >>
+endobj
+912 0 obj
+<< /D [ 870 0 R /XYZ 79.752 144.174 null ] >>
+endobj
+913 0 obj
+<< /D [ 870 0 R /XYZ 79.752 133.215 null ] >>
+endobj
+914 0 obj
+<< /D [ 870 0 R /XYZ 79.752 122.256 null ] >>
+endobj
+915 0 obj
+<< /D [ 870 0 R /XYZ 79.752 111.297 null ] >>
+endobj
+869 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R /F81 798 0 R /F70 305 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+918 0 obj
+<< /Filter /FlateDecode /Length 2604 >>
+stream
+xZ[H~ϯh-%hiHQ>lFtx:9u&d@WRέWWyw4]$ULъx+J"EWauM.غj57Wm dXt #S@aȳϳxD>#x]ȉkszCI}rQ6j_ֶۖhh.GB"PZeUL'3UH dkkκ:?޼0}K՝dy:w3밳e$4,5HEifq >%0km;}eCBDDP5SDot-?%nDD2brH$iE22ḮH 3ѐHܒ+U$M('$T&hlvCV tH`\l/乽c.9 O[&R.(_wBT *`FЦ̛~K:#|,0>XYdC~{YAEx:fRxw83~=%j5_(M1'e]uY>Q)W%p؞B,D&%|Cаb)]ƘgC~
+& KpHH1a,A݄+A]I>=xO<ks#`0T"|4veIS3 =8CEQ;Cι
+JI^e*6o x:0nI)Qj4|U=0r^5Cv-UVZ% ьUS~V~y-?kQw@X⁑0~(E{lL'aʣf=xJH̅%aNN`ȻfgPQl<Ӊ#mUd略$]0mO.u{l>|rNRN۶/Y Jyc*]Y"OE oWf`^,
+
+~A=ztqci[}8փ_+o3KAdbu!
+A̸J4,23i$Tl:Ӻ@~&bV냵D;ЋC}iWp`ec|1cFKҚc 'Gm,4qF{vqf9CrVЪ&xxn_8MhqVbh%vN=[ ̙S$Rͣ37\1u@eG}G|
+ox_nS,\57.jۺ4aR?Ma)9}9 G lG<8&UIk&%70RB5KԌ ;zomquDݚYۣHhecS>syM$$gB/pAe(A큃s v2Ņ<XvֲC ^@}}sAQ9ՙ}Of2$$c?Y(끃MG$ą;/<AͻuS(+ߕ ? fV&Ay%k"{F?5:* OH\N_ʮBD"WI4} (!tMk^njuU^+|xc j/hWpTN^`)zK qA E\:[Us}ӼR\6O K1cfmqp,!SIRu;Mi|RS58_UgWSxN*O^T*e3__q $ŠQNZ X%0S%A.HH kk?!IֶDg%Y6G\5=OԄR5^y5 J`}aC&?[XQ cOӁ'zp"'2Dϝ/E(#b? ;+O3 ;dJHbڼ?G
+endstream
+endobj
+917 0 obj
+<< /Type /Page /Contents 918 0 R /Resources 916 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 868 0 R >>
+endobj
+919 0 obj
+<< /D [ 917 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+920 0 obj
+<< /D [ 917 0 R /XYZ 79.752 742.929 null ] >>
+endobj
+921 0 obj
+<< /D [ 917 0 R /XYZ 79.752 731.97 null ] >>
+endobj
+922 0 obj
+<< /D [ 917 0 R /XYZ 79.752 691.123 null ] >>
+endobj
+923 0 obj
+<< /D [ 917 0 R /XYZ 79.752 680.164 null ] >>
+endobj
+924 0 obj
+<< /D [ 917 0 R /XYZ 79.752 669.205 null ] >>
+endobj
+925 0 obj
+<< /D [ 917 0 R /XYZ 79.752 658.246 null ] >>
+endobj
+926 0 obj
+<< /D [ 917 0 R /XYZ 79.752 647.288 null ] >>
+endobj
+927 0 obj
+<< /D [ 917 0 R /XYZ 79.752 636.329 null ] >>
+endobj
+928 0 obj
+<< /D [ 917 0 R /XYZ 79.752 607.437 null ] >>
+endobj
+929 0 obj
+<< /D [ 917 0 R /XYZ 79.752 596.478 null ] >>
+endobj
+930 0 obj
+<< /D [ 917 0 R /XYZ 79.752 585.519 null ] >>
+endobj
+931 0 obj
+<< /D [ 917 0 R /XYZ 79.752 574.56 null ] >>
+endobj
+932 0 obj
+<< /D [ 917 0 R /XYZ 79.752 563.601 null ] >>
+endobj
+933 0 obj
+<< /D [ 917 0 R /XYZ 79.752 552.642 null ] >>
+endobj
+934 0 obj
+<< /D [ 917 0 R /XYZ 79.752 541.684 null ] >>
+endobj
+935 0 obj
+<< /D [ 917 0 R /XYZ 79.752 530.725 null ] >>
+endobj
+936 0 obj
+<< /D [ 917 0 R /XYZ 79.752 519.766 null ] >>
+endobj
+937 0 obj
+<< /D [ 917 0 R /XYZ 79.752 508.807 null ] >>
+endobj
+938 0 obj
+<< /D [ 917 0 R /XYZ 79.752 497.848 null ] >>
+endobj
+939 0 obj
+<< /D [ 917 0 R /XYZ 79.752 445.046 null ] >>
+endobj
+940 0 obj
+<< /D [ 917 0 R /XYZ 79.752 434.087 null ] >>
+endobj
+941 0 obj
+<< /D [ 917 0 R /XYZ 79.752 423.128 null ] >>
+endobj
+942 0 obj
+<< /D [ 917 0 R /XYZ 79.752 412.169 null ] >>
+endobj
+943 0 obj
+<< /D [ 917 0 R /XYZ 79.752 401.21 null ] >>
+endobj
+944 0 obj
+<< /D [ 917 0 R /XYZ 79.752 300.588 null ] >>
+endobj
+945 0 obj
+<< /D [ 917 0 R /XYZ 79.752 289.629 null ] >>
+endobj
+946 0 obj
+<< /D [ 917 0 R /XYZ 79.752 278.67 null ] >>
+endobj
+947 0 obj
+<< /D [ 917 0 R /XYZ 79.752 267.711 null ] >>
+endobj
+948 0 obj
+<< /D [ 917 0 R /XYZ 79.752 256.752 null ] >>
+endobj
+949 0 obj
+<< /D [ 917 0 R /XYZ 79.752 245.793 null ] >>
+endobj
+950 0 obj
+<< /D [ 917 0 R /XYZ 79.752 204.946 null ] >>
+endobj
+951 0 obj
+<< /D [ 917 0 R /XYZ 79.752 193.987 null ] >>
+endobj
+952 0 obj
+<< /D [ 917 0 R /XYZ 79.752 183.028 null ] >>
+endobj
+953 0 obj
+<< /D [ 917 0 R /XYZ 79.752 172.07 null ] >>
+endobj
+954 0 obj
+<< /D [ 917 0 R /XYZ 79.752 131.223 null ] >>
+endobj
+955 0 obj
+<< /D [ 917 0 R /XYZ 79.752 120.264 null ] >>
+endobj
+916 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+958 0 obj
+<< /Filter /FlateDecode /Length 2163 >>
+stream
+xڭZKo6ϧb v)rY-BmɵI`OIqL/%G/O<ݽ1OV2Q15Q ,n7Q5}0aTLMe/{Mٻ5/]h{hw Ӷm܊v@`Y?dČrY7kO߭?n˃[д}5LsMo
+v<lpWo}@s尀 ZD 1xd&Q蓯CRm*'atկzC梞fT5
+stuT s>ݖ>6N~Zc} l$I/1~aTͨtR-?c]!-INIsB墱`R=1DqyuX,eUHH¼((F<mQڿbܽ¸
+MK8Ms!3+W"1LX*1pvuΰFL@%j]'H[?YEСB>|>U&lP%ס=yz?jh Pءxwδ?d)944#2wv5:s @+dh#4S` η]N _ fy씧ԫIkv,d /( _Ol.UW6bF♍<{xl$&:f7TJ^QQ6` [<b'hQ5&jCcJycVHuX)[rVm\Rbyy3ĺƹnR{ &o(nH<oe[\8CF
+endstream
+endobj
+957 0 obj
+<< /Type /Page /Contents 958 0 R /Resources 956 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 868 0 R >>
+endobj
+959 0 obj
+<< /D [ 957 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+960 0 obj
+<< /D [ 957 0 R /XYZ 79.752 730.974 null ] >>
+endobj
+961 0 obj
+<< /D [ 957 0 R /XYZ 79.752 720.015 null ] >>
+endobj
+962 0 obj
+<< /D [ 957 0 R /XYZ 79.752 709.056 null ] >>
+endobj
+963 0 obj
+<< /D [ 957 0 R /XYZ 79.752 698.097 null ] >>
+endobj
+964 0 obj
+<< /D [ 957 0 R /XYZ 79.752 687.138 null ] >>
+endobj
+965 0 obj
+<< /D [ 957 0 R /XYZ 79.752 676.179 null ] >>
+endobj
+966 0 obj
+<< /D [ 957 0 R /XYZ 79.752 635.332 null ] >>
+endobj
+967 0 obj
+<< /D [ 957 0 R /XYZ 79.752 624.373 null ] >>
+endobj
+968 0 obj
+<< /D [ 957 0 R /XYZ 79.752 613.415 null ] >>
+endobj
+969 0 obj
+<< /D [ 957 0 R /XYZ 79.752 602.456 null ] >>
+endobj
+970 0 obj
+<< /D [ 957 0 R /XYZ 79.752 591.497 null ] >>
+endobj
+971 0 obj
+<< /D [ 957 0 R /XYZ 79.752 580.538 null ] >>
+endobj
+972 0 obj
+<< /D [ 957 0 R /XYZ 79.752 569.579 null ] >>
+endobj
+973 0 obj
+<< /D [ 957 0 R /XYZ 79.752 558.62 null ] >>
+endobj
+974 0 obj
+<< /D [ 957 0 R /XYZ 79.752 547.661 null ] >>
+endobj
+975 0 obj
+<< /D [ 957 0 R /XYZ 79.752 536.702 null ] >>
+endobj
+976 0 obj
+<< /D [ 957 0 R /XYZ 79.752 525.743 null ] >>
+endobj
+977 0 obj
+<< /D [ 957 0 R /XYZ 79.752 514.784 null ] >>
+endobj
+978 0 obj
+<< /D [ 957 0 R /XYZ 79.752 503.825 null ] >>
+endobj
+979 0 obj
+<< /D [ 957 0 R /XYZ 79.752 492.867 null ] >>
+endobj
+980 0 obj
+<< /D [ 957 0 R /XYZ 79.752 476.926 null ] >>
+endobj
+981 0 obj
+<< /D [ 957 0 R /XYZ 79.752 465.967 null ] >>
+endobj
+29 0 obj
+<< /D [ 957 0 R /XYZ 79.37 451.223 null ] >>
+endobj
+982 0 obj
+<< /D [ 957 0 R /XYZ 79.752 338.048 null ] >>
+endobj
+983 0 obj
+<< /D [ 957 0 R /XYZ 79.752 327.089 null ] >>
+endobj
+984 0 obj
+<< /D [ 957 0 R /XYZ 79.752 316.13 null ] >>
+endobj
+985 0 obj
+<< /D [ 957 0 R /XYZ 79.752 305.171 null ] >>
+endobj
+986 0 obj
+<< /D [ 957 0 R /XYZ 79.752 294.212 null ] >>
+endobj
+987 0 obj
+<< /D [ 957 0 R /XYZ 79.752 283.253 null ] >>
+endobj
+988 0 obj
+<< /D [ 957 0 R /XYZ 79.752 272.294 null ] >>
+endobj
+989 0 obj
+<< /D [ 957 0 R /XYZ 79.752 261.335 null ] >>
+endobj
+990 0 obj
+<< /D [ 957 0 R /XYZ 79.752 250.377 null ] >>
+endobj
+991 0 obj
+<< /D [ 957 0 R /XYZ 79.752 239.418 null ] >>
+endobj
+992 0 obj
+<< /D [ 957 0 R /XYZ 79.752 228.459 null ] >>
+endobj
+993 0 obj
+<< /D [ 957 0 R /XYZ 79.752 217.5 null ] >>
+endobj
+994 0 obj
+<< /D [ 957 0 R /XYZ 79.752 206.541 null ] >>
+endobj
+995 0 obj
+<< /D [ 957 0 R /XYZ 79.752 195.582 null ] >>
+endobj
+996 0 obj
+<< /D [ 957 0 R /XYZ 79.752 184.623 null ] >>
+endobj
+997 0 obj
+<< /D [ 957 0 R /XYZ 79.752 173.664 null ] >>
+endobj
+998 0 obj
+<< /D [ 957 0 R /XYZ 79.752 162.705 null ] >>
+endobj
+999 0 obj
+<< /D [ 957 0 R /XYZ 79.752 151.746 null ] >>
+endobj
+1000 0 obj
+<< /D [ 957 0 R /XYZ 79.752 140.787 null ] >>
+endobj
+1001 0 obj
+<< /D [ 957 0 R /XYZ 79.752 129.829 null ] >>
+endobj
+1002 0 obj
+<< /D [ 957 0 R /XYZ 79.752 118.87 null ] >>
+endobj
+1003 0 obj
+<< /D [ 957 0 R /XYZ 79.752 107.911 null ] >>
+endobj
+1004 0 obj
+<< /D [ 957 0 R /XYZ 79.752 96.952 null ] >>
+endobj
+1005 0 obj
+<< /D [ 957 0 R /XYZ 79.752 85.993 null ] >>
+endobj
+956 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F70 305 0 R /F68 189 0 R /F64 183 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+1008 0 obj
+<< /Filter /FlateDecode /Length 2308 >>
+stream
+xڭZ[۸~ϯ0
+ he>4![XXYr%: {(RȦۗ(tȏ^O/rK*i #J%Y<ʞvaI6~_4ÿ%O8GTxOV3j<6Mfz ㉪#)YUE@uf ,@F4X
+D4Xs=>,9Ye=F[@Ufr~8mZ75xj7', hV O{>MjzkҿU“gyضUۄ^vmm7$N) kj
+kz4#| v%\F9rTL "ߖs/<dBF$ӑ;br:coUc^V`oS>~<4KA}uxqO@o sEa|6AXk҄!Ǖm+S#YyNhߴ}K)hANtn0օpmƈɓqKH<t [oV]Az'~ R" Tx_5~3s8S
+8#@fpJj\Z%o$vEon節B-|q
+|h<s*4s败_5=J u~w},#{4<psK$RTA %}}!Įq>1$T:,Y{!QQiσNugyvC,;]7Cp_lڮ3}8g7eGmD mN<c˦0e"|? c~vvyˊ k!py,TkSϯ%a-(O"9q0|#s抍 m|/K+ XmS>Em5Ѯ%c81V㎦="Y vmǏt*{edt#%F, Tv FI< Yr#ya.]ḯ*/9 M89aIol~25<h(dNPX<@ Fl"kmW(!1eS ~3B5\u8
+
+]Zk_/ %*(t=H0m먉v C5>yE2woڽ{MRTyB>y(rPR/Cy0||8T\~o3#h=b,^H1M1ô{(&ϪmRM8.JsKD0Hc
+\AziˤH20򊹕/H{_P> ,A5-$Zjj-H9F\lʢy q
+8OL1dr#&Hnw?6WF|fԠQl8D3EVD@+$y ߍÈ37&|oُ:@Pvs~鎵yJ;f] Jᘇo/jRʳ6<˪OBa9 oMa]v~Y1PUPbI3V)rx=2)HC)M9E U)rik(ɉθ&磓v7(ށD߫ RP\b_bc=,j_oFY
+
+A*yDŽT*t,yWMDGI9oCj
+yM\.QNq*S%r1*wq,ӻ"
+endstream
+endobj
+1007 0 obj
+<< /Type /Page /Contents 1008 0 R /Resources 1006 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 868 0 R >>
+endobj
+1009 0 obj
+<< /D [ 1007 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+1010 0 obj
+<< /D [ 1007 0 R /XYZ 79.752 742.929 null ] >>
+endobj
+1011 0 obj
+<< /D [ 1007 0 R /XYZ 79.752 731.97 null ] >>
+endobj
+1012 0 obj
+<< /D [ 1007 0 R /XYZ 79.752 721.011 null ] >>
+endobj
+1013 0 obj
+<< /D [ 1007 0 R /XYZ 79.752 710.052 null ] >>
+endobj
+1014 0 obj
+<< /D [ 1007 0 R /XYZ 79.752 699.093 null ] >>
+endobj
+1015 0 obj
+<< /D [ 1007 0 R /XYZ 79.752 688.134 null ] >>
+endobj
+1016 0 obj
+<< /D [ 1007 0 R /XYZ 79.752 677.175 null ] >>
+endobj
+1017 0 obj
+<< /D [ 1007 0 R /XYZ 79.752 666.217 null ] >>
+endobj
+1018 0 obj
+<< /D [ 1007 0 R /XYZ 79.752 655.258 null ] >>
+endobj
+1019 0 obj
+<< /D [ 1007 0 R /XYZ 79.752 644.299 null ] >>
+endobj
+1020 0 obj
+<< /D [ 1007 0 R /XYZ 79.752 633.34 null ] >>
+endobj
+1021 0 obj
+<< /D [ 1007 0 R /XYZ 79.752 622.381 null ] >>
+endobj
+1022 0 obj
+<< /D [ 1007 0 R /XYZ 79.752 611.422 null ] >>
+endobj
+1023 0 obj
+<< /D [ 1007 0 R /XYZ 79.752 600.463 null ] >>
+endobj
+1024 0 obj
+<< /D [ 1007 0 R /XYZ 79.752 589.504 null ] >>
+endobj
+1025 0 obj
+<< /D [ 1007 0 R /XYZ 79.752 578.545 null ] >>
+endobj
+1026 0 obj
+<< /D [ 1007 0 R /XYZ 79.752 567.586 null ] >>
+endobj
+1027 0 obj
+<< /D [ 1007 0 R /XYZ 79.752 556.627 null ] >>
+endobj
+1028 0 obj
+<< /D [ 1007 0 R /XYZ 79.752 545.669 null ] >>
+endobj
+1029 0 obj
+<< /D [ 1007 0 R /XYZ 79.752 534.71 null ] >>
+endobj
+1030 0 obj
+<< /D [ 1007 0 R /XYZ 79.752 523.751 null ] >>
+endobj
+1031 0 obj
+<< /D [ 1007 0 R /XYZ 79.752 512.792 null ] >>
+endobj
+1032 0 obj
+<< /D [ 1007 0 R /XYZ 79.752 501.833 null ] >>
+endobj
+33 0 obj
+<< /D [ 1007 0 R /XYZ 79.37 478.371 null ] >>
+endobj
+1033 0 obj
+<< /D [ 1007 0 R /XYZ 79.752 383.489 null ] >>
+endobj
+1034 0 obj
+<< /D [ 1007 0 R /XYZ 79.752 372.53 null ] >>
+endobj
+1035 0 obj
+<< /D [ 1007 0 R /XYZ 79.752 361.571 null ] >>
+endobj
+1036 0 obj
+<< /D [ 1007 0 R /XYZ 79.752 296.814 null ] >>
+endobj
+1037 0 obj
+<< /D [ 1007 0 R /XYZ 79.752 232.056 null ] >>
+endobj
+1038 0 obj
+<< /D [ 1007 0 R /XYZ 79.752 167.299 null ] >>
+endobj
+1039 0 obj
+<< /D [ 1007 0 R /XYZ 79.752 114.497 null ] >>
+endobj
+1040 0 obj
+<< /D [ 1007 0 R /XYZ 79.752 103.538 null ] >>
+endobj
+1006 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F77 542 0 R /F68 189 0 R /F64 183 0 R /F67 187 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+1043 0 obj
+<< /Filter /FlateDecode /Length 2615 >>
+stream
+xZ_ Ozgn?uOi;mN{}ٷ^#]ɒ#iw/@R(di܋%Q ~
+beӊ!-M(IiLrbSon%n|y jmpޤnaXBUj}~eW%>u_Mui[í-=nȬDDU=fZ"/m)#pr!9(ib-mӾv>2KF CL SV}wJ8J h}V'E*!TӘ=|TcC>zΜfy{ )YdCQ9fl"><\"@ ~mӪT]P-:q&AsȊMA"ib<Ģo~eRu.-nt؀{?/!n`b5%<՝lCZ豪>oOfW퇲,_ekr_ ~h*B^ >O ɘɺhƶ>W,oEG7C3T`t fyBLla И&Cț
+;q Čc
+2?aU~uGor^v=W[(< $M^ Υ/mQma-Èzn_Z[nu-5#Z[.uH;_VX7I
+II:#!FJ"Ћ &"<}2d P;ʡضTr.eH@mgU&fA,s!@&$]{jD4Lj U B.:|l?A&0^8ua00<8BZ,N$ĤyxWh҄*QS"OL:ͩq) xa[إ܏[?}Bgkô0jP|ננ8~$J3QJ-[gBn~S #}"C뉀+o t_,*3#?2[!Y/3&L
+ d1)`8ڶ;'iz$Ӧ
+eWZ,jD IQv<-StZm-pg 6>_}s,+im@|cquf)';;Mƪٕ#]%.vӼmr0)'"fuS\ ;\ֳs6Cwz#јˌH3e:ro ʄ$i#g'XFLd1o;qC(!AC/~CɃ˞DH<fCb' 8s\>\9'5@8b˴53r(g#.!/+ٙGNgJ;v7 }R_o'بiJ y ?N@F64nDExyclÙϳ.l\BxZ$1/Y]gӥ)u /gW%.\OYT.v=C;G탯ж;`P762O_vO)!&_3m\tA-Wv  tQGk:utES%!-H.cx
+--);m
+̮%\1^kW]U48#{|͈y
+k'M$X.Ә}'@Y ˥f.ap@j1cC$c'9H1>$1 K3WE
+endstream
+endobj
+1042 0 obj
+<< /Type /Page /Contents 1043 0 R /Resources 1041 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 868 0 R >>
+endobj
+1044 0 obj
+<< /D [ 1042 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+1045 0 obj
+<< /D [ 1042 0 R /XYZ 79.752 754.884 null ] >>
+endobj
+1046 0 obj
+<< /D [ 1042 0 R /XYZ 79.752 690.127 null ] >>
+endobj
+1047 0 obj
+<< /D [ 1042 0 R /XYZ 79.752 679.168 null ] >>
+endobj
+1048 0 obj
+<< /D [ 1042 0 R /XYZ 79.752 668.209 null ] >>
+endobj
+1049 0 obj
+<< /D [ 1042 0 R /XYZ 79.752 591.497 null ] >>
+endobj
+1050 0 obj
+<< /D [ 1042 0 R /XYZ 79.752 580.538 null ] >>
+endobj
+1051 0 obj
+<< /D [ 1042 0 R /XYZ 79.752 569.579 null ] >>
+endobj
+1052 0 obj
+<< /D [ 1042 0 R /XYZ 79.752 558.62 null ] >>
+endobj
+1053 0 obj
+<< /D [ 1042 0 R /XYZ 79.752 547.661 null ] >>
+endobj
+1054 0 obj
+<< /D [ 1042 0 R /XYZ 79.752 536.702 null ] >>
+endobj
+1055 0 obj
+<< /D [ 1042 0 R /XYZ 79.752 525.743 null ] >>
+endobj
+1056 0 obj
+<< /D [ 1042 0 R /XYZ 79.752 449.031 null ] >>
+endobj
+1057 0 obj
+<< /D [ 1042 0 R /XYZ 79.752 438.072 null ] >>
+endobj
+1058 0 obj
+<< /D [ 1042 0 R /XYZ 79.752 427.113 null ] >>
+endobj
+1059 0 obj
+<< /D [ 1042 0 R /XYZ 79.752 350.401 null ] >>
+endobj
+1060 0 obj
+<< /D [ 1042 0 R /XYZ 79.752 339.442 null ] >>
+endobj
+1061 0 obj
+<< /D [ 1042 0 R /XYZ 79.752 328.483 null ] >>
+endobj
+1062 0 obj
+<< /D [ 1042 0 R /XYZ 79.752 275.681 null ] >>
+endobj
+1063 0 obj
+<< /D [ 1042 0 R /XYZ 79.752 264.722 null ] >>
+endobj
+1064 0 obj
+<< /D [ 1042 0 R /XYZ 79.752 199.965 null ] >>
+endobj
+1065 0 obj
+<< /D [ 1042 0 R /XYZ 79.752 189.006 null ] >>
+endobj
+1066 0 obj
+<< /D [ 1042 0 R /XYZ 79.752 148.159 null ] >>
+endobj
+1067 0 obj
+<< /D [ 1042 0 R /XYZ 79.752 83.402 null ] >>
+endobj
+1041 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+1070 0 obj
+<< /Filter /FlateDecode /Length 2671 >>
+stream
+xڝZKo8Q\)2,f\&@b3вE%#[}%QUXJzZ??5+CbJ?PHWt³U(I]V'{{fB&S.YzNRE 层ϔroҖwSy2(<)It:A%]S&׽AVr|I&y2±#7kAeHU9EBS^n$(, 9KY$L*N"LLHJK'+hX\f\Kg|+ S+S
+˺mtZ2y.aU,:8C/<dDl&K벬S>r3lhpڦ3褮vNW ,\|q:Yob b!B+۴ ,
+N{},fWwB:QuJK-syH箨sWT84!4WɧۂO& jvXTa%7kWfq-S[:R'eEJ)iܮ\\(6DhlyCaGy3M|?eXL nk@ÂV))Hf}L,Lb3iByZbKXa(\~f[m[lrނH!yqXRy"RCB>/J&}]BCY!.{P~vF Ft Smɉ$J nldo$lg2R Jː0!wMCfBƺmΛ& ϳXU<2N^#hbȹm-E|+ p
+ wR^{|Jle$湁ƅ=3B_<6b%jHxTpwA ?mƤk2m|\Zl">g:^y^wWֻ,D)TϺ^-lM-ބ
+Z Z'ЗDG~RMљwX7hkZD*{ N6}ω6>7o쫽"CјHE$gG3cS%i=UD3Y BztHyx{:_q(T`:^)ک6P?|BdSM@/|ǡy4`(fT
+@gq{;;jnreg{cH9?A3h>StnY#yk
+< O B$CQG:PDes :<<<
+VתU3A$;K
+̘8˽C bhG8yd|;|i7,.`5֩iB$uS|Kg\ +?G Gרp
+Dfz oDs_Eυ\>$E'c9.fiF2.=څ%(Y:F$52j3]:40aQDd,7׷lQ`M]:aVD<*b($x>8Yͮ 0ѫ)t7lсXt.2%ř}-%l$zY=^021Yp]WP?>
+endstream
+endobj
+1069 0 obj
+<< /Type /Page /Contents 1070 0 R /Resources 1068 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 868 0 R >>
+endobj
+1071 0 obj
+<< /D [ 1069 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+1072 0 obj
+<< /D [ 1069 0 R /XYZ 79.752 742.977 null ] >>
+endobj
+1073 0 obj
+<< /D [ 1069 0 R /XYZ 79.752 732.018 null ] >>
+endobj
+1074 0 obj
+<< /D [ 1069 0 R /XYZ 79.752 679.503 null ] >>
+endobj
+1075 0 obj
+<< /D [ 1069 0 R /XYZ 79.752 648.953 null ] >>
+endobj
+1076 0 obj
+<< /D [ 1069 0 R /XYZ 79.752 637.995 null ] >>
+endobj
+1077 0 obj
+<< /D [ 1069 0 R /XYZ 79.752 627.036 null ] >>
+endobj
+1078 0 obj
+<< /D [ 1069 0 R /XYZ 79.752 536.71 null ] >>
+endobj
+1079 0 obj
+<< /D [ 1069 0 R /XYZ 79.752 502.033 null ] >>
+endobj
+1080 0 obj
+<< /D [ 1069 0 R /XYZ 79.752 491.074 null ] >>
+endobj
+1081 0 obj
+<< /D [ 1069 0 R /XYZ 79.752 426.604 null ] >>
+endobj
+1082 0 obj
+<< /D [ 1069 0 R /XYZ 79.752 386.044 null ] >>
+endobj
+1083 0 obj
+<< /D [ 1069 0 R /XYZ 79.752 333.529 null ] >>
+endobj
+1084 0 obj
+<< /D [ 1069 0 R /XYZ 79.752 281.014 null ] >>
+endobj
+1085 0 obj
+<< /D [ 1069 0 R /XYZ 79.752 270.055 null ] >>
+endobj
+1086 0 obj
+<< /D [ 1069 0 R /XYZ 79.752 217.54 null ] >>
+endobj
+1087 0 obj
+<< /D [ 1069 0 R /XYZ 79.752 153.07 null ] >>
+endobj
+1088 0 obj
+<< /D [ 1069 0 R /XYZ 79.752 142.111 null ] >>
+endobj
+1089 0 obj
+<< /D [ 1069 0 R /XYZ 79.752 89.596 null ] >>
+endobj
+1090 0 obj
+<< /D [ 1069 0 R /XYZ 79.752 78.637 null ] >>
+endobj
+1068 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+1093 0 obj
+<< /Filter /FlateDecode /Length 2442 >>
+stream
+xZ[o~ϯЇJ@.S88mϥhR/M!eHoʊUm$;;|sYxr3`ͻH6P&䓫/LT(Idrkz)fsFشongTM=Ve}WXck>\#aZâWfhE_uc\ tβiۢQS:Du3eSD
+@8os@x'dd,fs@X1EP쵳ƁGxn]W@1g/\y{k_
+)p׬ݫ1J(o#"Uy1Sz=)pebHJߟa{pix{t̆)&u 'V e$5E]ܿ0 *NQ* dY
+?1I8G6%*I&H T۟&CĤ9Ɍ F^ׯgDzy:]4`ObΞT ^BRG5R
+Xn5
+8D:M.h q9A1T>ݍSa&t$$(GLi1  (9t d& ;yJZdOԍC~">)ba7}6m$]es C9Z!I jUT嶄߽sYQLWH8^С‹$OeOxjoVp$ r[toa1K,sy{ 3b=tc#4qMW|m^uعg/yU={5qvYkӮlodЬbyFxS E =Wmmjl&F+fNӟ(\0o-s[
+)V
++XJIʐ3Rp0 ]YqTcgB1
+w{c,~ӷ. %CiL Ɋv}3c6[&I!&،b_7u~en7#+̭+ VG{뺩#)xםs[-X(y{#`ߧjsldޛ[n5);̲Xpn3B 'sr)/M2w7&iJgpNngfďőb
+%8
+k_
+TB0ƚwe i |U}-`PQHcXXWbʶXd/}+.D2@2 u$믆Y3U()Za {/LQ$9HiM辑C]ʒb3N ẑaP5D<a$U##i/g/`HP^29Qd,-qdZ&)r~nWuQvٳ%Brlyi 8s仪#C!ҊW$l~zX/Q bHP 2T ",J%EY2ÑpϏ"tS2gAYRNˎ:e(׋ݗek  a⳰iE( ӏB]Wy:JSm:aA-i(VpY,<iS! 4c#c?Y!v[嫯u~= 5[$|iq%B$ƩqZdתD_UV"a+mFE~3C˜|,<j,9្4N;PEm*wKP"ڇKqj,=OSSPONS_:^#a4#A3jB:^MhߓٙFRBXDz:hZs*X gI!'COK_q
+endstream
+endobj
+1092 0 obj
+<< /Type /Page /Contents 1093 0 R /Resources 1091 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 868 0 R >>
+endobj
+1094 0 obj
+<< /D [ 1092 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+1095 0 obj
+<< /D [ 1092 0 R /XYZ 79.752 742.929 null ] >>
+endobj
+1096 0 obj
+<< /D [ 1092 0 R /XYZ 79.752 731.97 null ] >>
+endobj
+1097 0 obj
+<< /D [ 1092 0 R /XYZ 79.752 685.146 null ] >>
+endobj
+1098 0 obj
+<< /D [ 1092 0 R /XYZ 79.752 644.299 null ] >>
+endobj
+1099 0 obj
+<< /D [ 1092 0 R /XYZ 79.752 531.721 null ] >>
+endobj
+1100 0 obj
+<< /D [ 1092 0 R /XYZ 79.752 500.837 null ] >>
+endobj
+1101 0 obj
+<< /D [ 1092 0 R /XYZ 79.752 489.878 null ] >>
+endobj
+1102 0 obj
+<< /D [ 1092 0 R /XYZ 79.752 478.919 null ] >>
+endobj
+1103 0 obj
+<< /D [ 1092 0 R /XYZ 79.752 467.96 null ] >>
+endobj
+1104 0 obj
+<< /D [ 1092 0 R /XYZ 79.752 457.001 null ] >>
+endobj
+1105 0 obj
+<< /D [ 1092 0 R /XYZ 79.752 446.042 null ] >>
+endobj
+1106 0 obj
+<< /D [ 1092 0 R /XYZ 79.752 435.083 null ] >>
+endobj
+1107 0 obj
+<< /D [ 1092 0 R /XYZ 79.752 424.124 null ] >>
+endobj
+1108 0 obj
+<< /D [ 1092 0 R /XYZ 79.752 413.165 null ] >>
+endobj
+1109 0 obj
+<< /D [ 1092 0 R /XYZ 79.752 402.207 null ] >>
+endobj
+1110 0 obj
+<< /D [ 1092 0 R /XYZ 79.752 391.248 null ] >>
+endobj
+1111 0 obj
+<< /D [ 1092 0 R /XYZ 79.752 380.289 null ] >>
+endobj
+1112 0 obj
+<< /D [ 1092 0 R /XYZ 79.752 369.33 null ] >>
+endobj
+1113 0 obj
+<< /D [ 1092 0 R /XYZ 79.752 358.371 null ] >>
+endobj
+1114 0 obj
+<< /D [ 1092 0 R /XYZ 79.752 347.412 null ] >>
+endobj
+1115 0 obj
+<< /D [ 1092 0 R /XYZ 79.752 336.453 null ] >>
+endobj
+1116 0 obj
+<< /D [ 1092 0 R /XYZ 79.752 325.494 null ] >>
+endobj
+1117 0 obj
+<< /D [ 1092 0 R /XYZ 79.752 314.535 null ] >>
+endobj
+1118 0 obj
+<< /D [ 1092 0 R /XYZ 79.752 303.576 null ] >>
+endobj
+1119 0 obj
+<< /D [ 1092 0 R /XYZ 79.752 292.618 null ] >>
+endobj
+1120 0 obj
+<< /D [ 1092 0 R /XYZ 79.752 281.659 null ] >>
+endobj
+1121 0 obj
+<< /D [ 1092 0 R /XYZ 79.752 270.7 null ] >>
+endobj
+1122 0 obj
+<< /D [ 1092 0 R /XYZ 79.752 259.741 null ] >>
+endobj
+1123 0 obj
+<< /D [ 1092 0 R /XYZ 79.752 248.782 null ] >>
+endobj
+1124 0 obj
+<< /D [ 1092 0 R /XYZ 79.752 237.823 null ] >>
+endobj
+1125 0 obj
+<< /D [ 1092 0 R /XYZ 79.752 226.864 null ] >>
+endobj
+1126 0 obj
+<< /D [ 1092 0 R /XYZ 79.752 215.905 null ] >>
+endobj
+1127 0 obj
+<< /D [ 1092 0 R /XYZ 79.752 204.946 null ] >>
+endobj
+1128 0 obj
+<< /D [ 1092 0 R /XYZ 79.752 193.987 null ] >>
+endobj
+1129 0 obj
+<< /D [ 1092 0 R /XYZ 79.752 183.028 null ] >>
+endobj
+1130 0 obj
+<< /D [ 1092 0 R /XYZ 79.752 172.07 null ] >>
+endobj
+1131 0 obj
+<< /D [ 1092 0 R /XYZ 79.752 161.111 null ] >>
+endobj
+1132 0 obj
+<< /D [ 1092 0 R /XYZ 79.752 150.152 null ] >>
+endobj
+1133 0 obj
+<< /D [ 1092 0 R /XYZ 79.752 139.193 null ] >>
+endobj
+1134 0 obj
+<< /D [ 1092 0 R /XYZ 79.752 128.234 null ] >>
+endobj
+1135 0 obj
+<< /D [ 1092 0 R /XYZ 79.752 117.275 null ] >>
+endobj
+1136 0 obj
+<< /D [ 1092 0 R /XYZ 79.752 106.316 null ] >>
+endobj
+1137 0 obj
+<< /D [ 1092 0 R /XYZ 79.752 95.357 null ] >>
+endobj
+1091 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R /F70 305 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+1140 0 obj
+<< /Filter /FlateDecode /Length 2325 >>
+stream
+xڽZ]o}_auߢ,(vw:O)
+L%$7f~{/IQ[/ևu{//9xyï$Y$(T;Y b"aI7ſ7wUxl&~ys_Ý!z?ߏdbCvnq|$F6eWlgQdY;nz{7WUnSW4^EnmZ{һŒY/r+@
+s]SŽ?*-?g0 Yicξ9ta(
+C2)xz}9H<!SD:$~ yGe"!`D]iSȲI"溹7P
+3#&XhqL! X{lₛbk; &8d9g /Df$4yl-xTѪj_VM3KL:T?}f"+ e=
+DQ'Dh]TUT)t "4%N{`=N@mXÒ(K۝/ڋPcV"ɜNe/T1,A}j<PiӼm.yǬfB2bJ9&d<*/,QLeaͮ΋<Z7m |4U:
+a{1"r,aD']m}v\"GK^Q&u+p:b6FbQhE0ܻ!w6S𹒁bc^X$ A/xO]Hyo.ˆq1QX^'2A<q^ȠTvl[b؞Zۭt 5V($[8)36,4g$10bI4db6G.`*t*Òb
+d0(.;{ ܑ [ydxLNxdeNEGm6/z m
+2YF&8s}f[|UdǕ%ZU1/>hgs|9+r۬O
+endstream
+endobj
+1139 0 obj
+<< /Type /Page /Contents 1140 0 R /Resources 1138 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 868 0 R >>
+endobj
+1141 0 obj
+<< /D [ 1139 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+1142 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 731.152 null ] >>
+endobj
+1143 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 720.193 null ] >>
+endobj
+1144 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 709.234 null ] >>
+endobj
+1145 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 656.788 null ] >>
+endobj
+1146 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 645.829 null ] >>
+endobj
+1147 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 634.87 null ] >>
+endobj
+1148 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 605.232 null ] >>
+endobj
+1149 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 594.274 null ] >>
+endobj
+1150 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 583.315 null ] >>
+endobj
+1151 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 572.356 null ] >>
+endobj
+1152 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 561.397 null ] >>
+endobj
+1153 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 550.438 null ] >>
+endobj
+1154 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 539.479 null ] >>
+endobj
+1155 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 528.52 null ] >>
+endobj
+1156 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 473.157 null ] >>
+endobj
+1157 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 462.199 null ] >>
+endobj
+1158 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 451.24 null ] >>
+endobj
+1159 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 440.281 null ] >>
+endobj
+1160 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 429.322 null ] >>
+endobj
+1161 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 418.363 null ] >>
+endobj
+1162 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 407.404 null ] >>
+endobj
+1163 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 396.445 null ] >>
+endobj
+1164 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 385.486 null ] >>
+endobj
+1165 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 374.527 null ] >>
+endobj
+1166 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 363.568 null ] >>
+endobj
+1167 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 352.61 null ] >>
+endobj
+1168 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 341.651 null ] >>
+endobj
+1169 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 330.692 null ] >>
+endobj
+1170 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 319.733 null ] >>
+endobj
+1171 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 308.774 null ] >>
+endobj
+1172 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 297.815 null ] >>
+endobj
+1173 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 286.856 null ] >>
+endobj
+1174 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 275.897 null ] >>
+endobj
+1175 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 264.938 null ] >>
+endobj
+1176 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 253.979 null ] >>
+endobj
+1177 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 243.021 null ] >>
+endobj
+1178 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 232.062 null ] >>
+endobj
+1179 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 221.103 null ] >>
+endobj
+1180 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 210.144 null ] >>
+endobj
+1181 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 199.185 null ] >>
+endobj
+1182 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 188.226 null ] >>
+endobj
+1183 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 177.267 null ] >>
+endobj
+1184 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 166.308 null ] >>
+endobj
+1185 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 155.349 null ] >>
+endobj
+1186 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 144.39 null ] >>
+endobj
+1187 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 133.431 null ] >>
+endobj
+1188 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 122.473 null ] >>
+endobj
+1189 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 111.514 null ] >>
+endobj
+1190 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 100.555 null ] >>
+endobj
+1191 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 89.596 null ] >>
+endobj
+1192 0 obj
+<< /D [ 1139 0 R /XYZ 79.752 78.637 null ] >>
+endobj
+1138 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+1195 0 obj
+<< /Filter /FlateDecode /Length 1960 >>
+stream
+xڽZnF+e-@! j%2# oOqi={$_DcZ^xr;'b$ ~~8Lr69pS<c Sb%ϩQ_GVL Jq3RmɪeUy$Y9wEw;EȊ:Uӵ<y.i ۛȠCȘИyk4Κ18OcKW{o׸7w?:
+1xݤ^sEDO Fxs n$)Y|^7`}
+\b8&mcp>¢pPb,j
+*_a,Ne}6WHY5
+endstream
+endobj
+1194 0 obj
+<< /Type /Page /Contents 1195 0 R /Resources 1193 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 868 0 R >>
+endobj
+1196 0 obj
+<< /D [ 1194 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+1197 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 768.832 null ] >>
+endobj
+1198 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 757.873 null ] >>
+endobj
+1199 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 746.914 null ] >>
+endobj
+1200 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 735.955 null ] >>
+endobj
+1201 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 724.996 null ] >>
+endobj
+1202 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 714.037 null ] >>
+endobj
+1203 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 703.078 null ] >>
+endobj
+1204 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 692.119 null ] >>
+endobj
+1205 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 681.16 null ] >>
+endobj
+1206 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 670.202 null ] >>
+endobj
+1207 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 659.243 null ] >>
+endobj
+1208 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 648.284 null ] >>
+endobj
+1209 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 637.325 null ] >>
+endobj
+1210 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 626.366 null ] >>
+endobj
+1211 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 615.407 null ] >>
+endobj
+1212 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 604.448 null ] >>
+endobj
+1213 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 593.489 null ] >>
+endobj
+1214 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 582.53 null ] >>
+endobj
+1215 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 571.571 null ] >>
+endobj
+1216 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 560.613 null ] >>
+endobj
+1217 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 549.654 null ] >>
+endobj
+1218 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 518.769 null ] >>
+endobj
+1219 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 507.811 null ] >>
+endobj
+1220 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 496.852 null ] >>
+endobj
+1221 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 485.893 null ] >>
+endobj
+1222 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 474.934 null ] >>
+endobj
+1223 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 463.975 null ] >>
+endobj
+1224 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 453.016 null ] >>
+endobj
+1225 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 442.057 null ] >>
+endobj
+1226 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 431.098 null ] >>
+endobj
+1227 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 420.139 null ] >>
+endobj
+1228 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 409.18 null ] >>
+endobj
+1229 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 398.221 null ] >>
+endobj
+1230 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 387.263 null ] >>
+endobj
+1231 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 376.304 null ] >>
+endobj
+1232 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 365.345 null ] >>
+endobj
+1233 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 354.386 null ] >>
+endobj
+1234 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 343.427 null ] >>
+endobj
+1235 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 332.468 null ] >>
+endobj
+1236 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 321.509 null ] >>
+endobj
+1237 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 268.707 null ] >>
+endobj
+1238 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 257.748 null ] >>
+endobj
+1239 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 246.789 null ] >>
+endobj
+1240 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 235.83 null ] >>
+endobj
+1241 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 224.872 null ] >>
+endobj
+1242 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 213.913 null ] >>
+endobj
+1243 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 202.954 null ] >>
+endobj
+1244 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 191.995 null ] >>
+endobj
+1245 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 181.036 null ] >>
+endobj
+1246 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 170.077 null ] >>
+endobj
+1247 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 159.118 null ] >>
+endobj
+1248 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 148.159 null ] >>
+endobj
+1249 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 137.2 null ] >>
+endobj
+1250 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 126.241 null ] >>
+endobj
+1251 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 115.283 null ] >>
+endobj
+1252 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 104.324 null ] >>
+endobj
+1253 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 93.365 null ] >>
+endobj
+1254 0 obj
+<< /D [ 1194 0 R /XYZ 79.752 82.406 null ] >>
+endobj
+1193 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+1257 0 obj
+<< /Filter /FlateDecode /Length 2062 >>
+stream
+xڵZ]oJ}ϯ/tCCfW;s6a{vVc
+\K9_~
+D!lqpS0"LV.w,#&{QDJp, G>Κ}7I]'OM[gmp}#\ZgWÈk e@hCyC yDH8{co6^WqYy./hKxD</IqMU:+n>dϞ±8c~)aJܘyn 3.w["DlAm1 cҙLϙ`=_g(h]FRA}"y#BFi :K0 n]OeO/`كjc=5sh=2HV_*w8\8KUsTD3-4%m9i&(a-'HnLRi"(u ۷yU6DD Rܚe3($>F7^g`gC|CTNQS?H] $<pZeV7. yNqfSC#q`< {r(ړFǶk_L (9 q} UfoSd5LLcVh$PV*f*B"7q۷OGoBAfI8~tp2>%|>wvh"2. x۩(vR :sߌ`( !xa 6TWUiHۻA܉*8 " wg\๱I2ȜE_Kelz]]8O+=I.+O70KB:-fL'_{CJȸyMQ c#'A1xd$`SMw4 =C10]g9l]Os%%lgퟤ91·xc[sp9O!Mv&"i<M qѮ,/?9y ğuтY(e!Nj!غnyWIΌE?87d6|gz#KVs-'N
+\;JUO^gp3ƞF4 ]
+ij(j
+\Uqؕ|ݾI5S"B<돰9>j#b(^
+WFpֻpDp2 F9Nby๊qJ
+<H[,!ĠN]0ٴY}n11Zo3dAD(wIB ?4
+ ү<0檾&_+$j¨K"Jc}VjEtCi1x[#$a
+WgF}x" ±;)ώ.kqX^
+endstream
+endobj
+1256 0 obj
+<< /Type /Page /Contents 1257 0 R /Resources 1255 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1312 0 R >>
+endobj
+1258 0 obj
+<< /D [ 1256 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+1259 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 768.832 null ] >>
+endobj
+1260 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 757.873 null ] >>
+endobj
+1261 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 746.914 null ] >>
+endobj
+1262 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 735.955 null ] >>
+endobj
+1263 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 724.996 null ] >>
+endobj
+1264 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 714.037 null ] >>
+endobj
+1265 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 661.235 null ] >>
+endobj
+1266 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 650.276 null ] >>
+endobj
+1267 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 639.317 null ] >>
+endobj
+1268 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 628.358 null ] >>
+endobj
+1269 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 617.4 null ] >>
+endobj
+1270 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 606.441 null ] >>
+endobj
+1271 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 595.482 null ] >>
+endobj
+1272 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 584.523 null ] >>
+endobj
+1273 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 573.564 null ] >>
+endobj
+1274 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 562.605 null ] >>
+endobj
+1275 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 551.646 null ] >>
+endobj
+1276 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 540.687 null ] >>
+endobj
+1277 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 529.728 null ] >>
+endobj
+1278 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 476.926 null ] >>
+endobj
+1279 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 465.967 null ] >>
+endobj
+1280 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 455.009 null ] >>
+endobj
+1281 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 444.05 null ] >>
+endobj
+1282 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 433.091 null ] >>
+endobj
+1283 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 422.132 null ] >>
+endobj
+1284 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 411.173 null ] >>
+endobj
+1285 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 400.214 null ] >>
+endobj
+1286 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 389.255 null ] >>
+endobj
+1287 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 378.296 null ] >>
+endobj
+1288 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 367.337 null ] >>
+endobj
+1289 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 326.49 null ] >>
+endobj
+1290 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 315.532 null ] >>
+endobj
+1291 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 304.573 null ] >>
+endobj
+1292 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 293.614 null ] >>
+endobj
+1293 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 282.655 null ] >>
+endobj
+1294 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 271.696 null ] >>
+endobj
+1295 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 260.737 null ] >>
+endobj
+1296 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 249.778 null ] >>
+endobj
+1297 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 238.819 null ] >>
+endobj
+1298 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 227.86 null ] >>
+endobj
+1299 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 216.901 null ] >>
+endobj
+1300 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 205.943 null ] >>
+endobj
+1301 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 194.984 null ] >>
+endobj
+1302 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 184.025 null ] >>
+endobj
+1303 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 173.066 null ] >>
+endobj
+1304 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 162.107 null ] >>
+endobj
+1305 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 151.148 null ] >>
+endobj
+1306 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 135.208 null ] >>
+endobj
+1307 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 124.249 null ] >>
+endobj
+1308 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 113.29 null ] >>
+endobj
+1309 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 102.331 null ] >>
+endobj
+1310 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 91.372 null ] >>
+endobj
+1311 0 obj
+<< /D [ 1256 0 R /XYZ 79.752 80.413 null ] >>
+endobj
+1255 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F65 185 0 R /F20 186 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+1315 0 obj
+<< /Filter /FlateDecode /Length 1641 >>
+stream
+xZ]o6}ϯY~,0n2-b-R?}%QJ%mK{,ы#<GN?*H+htrzDE8"҈JŒ ,It^-t9by)K(F1!x]ef6>^
+*)i?~^ƋӤM:P%M_mOS% #(A$$M$k=))MݚFQiM>0WU(>P&&#3i[4r#Jȕm\oX_~l壎o\XڣS}-@ #[btee^.ti}xw$/y)#(DD=l 1[x{XGȷ͌`wIga) Sワ`S Q
+fؔ&ofya>lI5qR22z:>MM5ǁ6hOHw^Ue$}<]D ʜeVۍ) %TQHY.헊`x
+xSǹJ@1QS⃯29ݬsЂ%C
+W Pg&R!(R|Luҿ)5X K8`L><@)tL.{<
+R 2< |0|d%
+( @ߘU"s
+'/M73zpPowEJ j{]]xdgUscoSBv+8u0з^Rꈎm_
+
+Έjࢊ`vQл
+']#u}I5ERȈc 'G
+endstream
+endobj
+1314 0 obj
+<< /Type /Page /Contents 1315 0 R /Resources 1313 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1312 0 R >>
+endobj
+1316 0 obj
+<< /D [ 1314 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+1317 0 obj
+<< /D [ 1314 0 R /XYZ 79.752 768.832 null ] >>
+endobj
+1318 0 obj
+<< /D [ 1314 0 R /XYZ 79.752 757.873 null ] >>
+endobj
+1319 0 obj
+<< /D [ 1314 0 R /XYZ 79.752 746.914 null ] >>
+endobj
+1320 0 obj
+<< /D [ 1314 0 R /XYZ 79.752 735.955 null ] >>
+endobj
+1321 0 obj
+<< /D [ 1314 0 R /XYZ 79.752 724.996 null ] >>
+endobj
+1322 0 obj
+<< /D [ 1314 0 R /XYZ 79.752 714.037 null ] >>
+endobj
+1323 0 obj
+<< /D [ 1314 0 R /XYZ 79.752 703.078 null ] >>
+endobj
+1324 0 obj
+<< /D [ 1314 0 R /XYZ 79.752 692.119 null ] >>
+endobj
+1325 0 obj
+<< /D [ 1314 0 R /XYZ 79.752 681.16 null ] >>
+endobj
+1326 0 obj
+<< /D [ 1314 0 R /XYZ 79.752 670.202 null ] >>
+endobj
+1327 0 obj
+<< /D [ 1314 0 R /XYZ 79.752 659.243 null ] >>
+endobj
+1328 0 obj
+<< /D [ 1314 0 R /XYZ 79.752 648.284 null ] >>
+endobj
+1329 0 obj
+<< /D [ 1314 0 R /XYZ 79.752 637.325 null ] >>
+endobj
+1330 0 obj
+<< /D [ 1314 0 R /XYZ 79.752 626.366 null ] >>
+endobj
+1331 0 obj
+<< /D [ 1314 0 R /XYZ 79.752 615.407 null ] >>
+endobj
+1332 0 obj
+<< /D [ 1314 0 R /XYZ 79.752 604.448 null ] >>
+endobj
+1333 0 obj
+<< /D [ 1314 0 R /XYZ 79.752 593.489 null ] >>
+endobj
+1334 0 obj
+<< /D [ 1314 0 R /XYZ 79.752 582.53 null ] >>
+endobj
+1335 0 obj
+<< /D [ 1314 0 R /XYZ 79.752 571.571 null ] >>
+endobj
+1336 0 obj
+<< /D [ 1314 0 R /XYZ 79.752 560.613 null ] >>
+endobj
+1337 0 obj
+<< /D [ 1314 0 R /XYZ 79.752 549.654 null ] >>
+endobj
+1338 0 obj
+<< /D [ 1314 0 R /XYZ 79.752 538.695 null ] >>
+endobj
+1339 0 obj
+<< /D [ 1314 0 R /XYZ 79.752 527.736 null ] >>
+endobj
+1340 0 obj
+<< /D [ 1314 0 R /XYZ 81.077 516.777 null ] >>
+endobj
+1341 0 obj
+<< /D [ 1314 0 R /XYZ 81.077 505.818 null ] >>
+endobj
+1342 0 obj
+<< /D [ 1314 0 R /XYZ 81.077 494.859 null ] >>
+endobj
+1343 0 obj
+<< /D [ 1314 0 R /XYZ 81.077 483.9 null ] >>
+endobj
+1344 0 obj
+<< /D [ 1314 0 R /XYZ 81.077 472.941 null ] >>
+endobj
+1345 0 obj
+<< /D [ 1314 0 R /XYZ 81.077 461.982 null ] >>
+endobj
+1346 0 obj
+<< /D [ 1314 0 R /XYZ 81.077 451.023 null ] >>
+endobj
+1347 0 obj
+<< /D [ 1314 0 R /XYZ 81.077 440.065 null ] >>
+endobj
+1348 0 obj
+<< /D [ 1314 0 R /XYZ 81.077 429.106 null ] >>
+endobj
+1349 0 obj
+<< /D [ 1314 0 R /XYZ 81.077 418.147 null ] >>
+endobj
+1350 0 obj
+<< /D [ 1314 0 R /XYZ 81.077 407.188 null ] >>
+endobj
+1351 0 obj
+<< /D [ 1314 0 R /XYZ 81.077 391.248 null ] >>
+endobj
+1352 0 obj
+<< /D [ 1314 0 R /XYZ 81.077 380.289 null ] >>
+endobj
+1353 0 obj
+<< /D [ 1314 0 R /XYZ 81.077 369.33 null ] >>
+endobj
+1354 0 obj
+<< /D [ 1314 0 R /XYZ 81.077 358.371 null ] >>
+endobj
+1355 0 obj
+<< /D [ 1314 0 R /XYZ 81.077 347.412 null ] >>
+endobj
+1356 0 obj
+<< /D [ 1314 0 R /XYZ 81.077 336.453 null ] >>
+endobj
+1357 0 obj
+<< /D [ 1314 0 R /XYZ 81.077 325.494 null ] >>
+endobj
+1358 0 obj
+<< /D [ 1314 0 R /XYZ 81.077 270.7 null ] >>
+endobj
+1359 0 obj
+<< /D [ 1314 0 R /XYZ 81.077 259.741 null ] >>
+endobj
+1360 0 obj
+<< /D [ 1314 0 R /XYZ 81.077 248.782 null ] >>
+endobj
+1361 0 obj
+<< /D [ 1314 0 R /XYZ 81.077 237.823 null ] >>
+endobj
+1362 0 obj
+<< /D [ 1314 0 R /XYZ 81.077 226.864 null ] >>
+endobj
+1363 0 obj
+<< /D [ 1314 0 R /XYZ 81.077 215.905 null ] >>
+endobj
+1364 0 obj
+<< /D [ 1314 0 R /XYZ 81.077 204.946 null ] >>
+endobj
+1365 0 obj
+<< /D [ 1314 0 R /XYZ 81.077 193.987 null ] >>
+endobj
+1366 0 obj
+<< /D [ 1314 0 R /XYZ 81.077 183.028 null ] >>
+endobj
+1367 0 obj
+<< /D [ 1314 0 R /XYZ 81.077 172.07 null ] >>
+endobj
+1368 0 obj
+<< /D [ 1314 0 R /XYZ 81.077 161.111 null ] >>
+endobj
+1369 0 obj
+<< /D [ 1314 0 R /XYZ 81.077 150.152 null ] >>
+endobj
+1370 0 obj
+<< /D [ 1314 0 R /XYZ 81.077 139.193 null ] >>
+endobj
+1371 0 obj
+<< /D [ 1314 0 R /XYZ 81.077 128.234 null ] >>
+endobj
+1372 0 obj
+<< /D [ 1314 0 R /XYZ 81.077 117.275 null ] >>
+endobj
+1373 0 obj
+<< /D [ 1314 0 R /XYZ 81.077 106.316 null ] >>
+endobj
+1374 0 obj
+<< /D [ 1314 0 R /XYZ 81.077 95.357 null ] >>
+endobj
+1375 0 obj
+<< /D [ 1314 0 R /XYZ 81.077 84.398 null ] >>
+endobj
+1313 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+1378 0 obj
+<< /Filter /FlateDecode /Length 1946 >>
+stream
+xZnF}W ؛_ H A
+}1hPCQ԰$Um$/E,̜Y$_~=;xwHgࣳYM43#fƌ
+}oa-
+Dt;,ƈSF,hbf$-IχVca Hl|a6?qVge-/cz<OkCn|<yn2Cb-7i>H\
+Ixefx̯=Nj` M5aa0!8qk!^ƞT0IҠzN2{_ٓizI`<hR.4hC]+}tqWu=Mli5GtQ'h' UO޿4IJChށM/I~[dU:]ܺZ`;75#6zi褁N<h_24j:n~w,\$%R#:rQN5KNy&R>"O ݍuEf  JWubb+ N+оV+C`*
+V8ofN:ORc",Vܙkz]Nu}RnɬX$څexxLNh,(eY=ml52#(ўKVԓӪ\Z1Ʒxb\PN '&"|yTR`R}[y8ϦӴxAg7n4C­l'&ԆvR"=op`DݮgDZ&baxч֘VKt gY!# rUg8u0~s8ك@}hgtaW !"asWI~7*8`o
+ϯyiiz {
+Tw^ N4+ğAM$«f^IU+
+/,fżAm:_QM
+{Gjyat]dCz0iP]iyӠ ?weVA-9X8z8I!®-, aDZz(.$˓<O!!d8nzFhn02.T Ҩ{3鷓8;:6.ocCɲ_U~633??? (47r#tG8*֔ -^'szH?
+endstream
+endobj
+1377 0 obj
+<< /Type /Page /Contents 1378 0 R /Resources 1376 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1312 0 R >>
+endobj
+1379 0 obj
+<< /D [ 1377 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+1380 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+1381 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+1382 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+1383 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+1384 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+1385 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+1386 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+1387 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+1388 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+1389 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+1390 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+1391 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+1392 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+1393 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 626.366 null ] >>
+endobj
+1394 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 615.407 null ] >>
+endobj
+1395 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 604.448 null ] >>
+endobj
+1396 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 593.489 null ] >>
+endobj
+1397 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 582.53 null ] >>
+endobj
+1398 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 571.571 null ] >>
+endobj
+1399 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 560.613 null ] >>
+endobj
+1400 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 549.654 null ] >>
+endobj
+1401 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 538.695 null ] >>
+endobj
+1402 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 527.736 null ] >>
+endobj
+1403 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 516.777 null ] >>
+endobj
+1404 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 463.975 null ] >>
+endobj
+1405 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 453.016 null ] >>
+endobj
+1406 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 442.057 null ] >>
+endobj
+1407 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 431.098 null ] >>
+endobj
+1408 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 420.139 null ] >>
+endobj
+1409 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 409.18 null ] >>
+endobj
+1410 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 398.221 null ] >>
+endobj
+1411 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 387.263 null ] >>
+endobj
+1412 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 376.304 null ] >>
+endobj
+1413 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 365.345 null ] >>
+endobj
+1414 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 354.386 null ] >>
+endobj
+1415 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 343.427 null ] >>
+endobj
+1416 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 332.468 null ] >>
+endobj
+1417 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 321.509 null ] >>
+endobj
+1418 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 310.55 null ] >>
+endobj
+1419 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 299.591 null ] >>
+endobj
+1420 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 258.745 null ] >>
+endobj
+1421 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 247.786 null ] >>
+endobj
+1422 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 194.984 null ] >>
+endobj
+1423 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 142.182 null ] >>
+endobj
+1424 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 131.223 null ] >>
+endobj
+1425 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 120.264 null ] >>
+endobj
+1426 0 obj
+<< /D [ 1377 0 R /XYZ 81.077 109.305 null ] >>
+endobj
+1376 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+1429 0 obj
+<< /Filter /FlateDecode /Length 2283 >>
+stream
+xZ[o~ϯއ P`nݾx 40 sqgFv\#=̅ e;}\ȏ<oW ?yFZRo4Y$dH$r.-3ŖoVL&˴2W̚n-Y{դymݻOYOk޵tMyLWWWMlE=Mu eyզk];nJsu,OYI$
+!UO0ٛ#lZ՝FxAi]EZTuZ P=mDoxx53GfvS_2zz0lvc!QɲR|dAv]&S4EppszQXC122K]!;"F,zxS-8Ҋ0:]I$G(Q+1`P d*b0p%XMW28| xHu^l7٦[9W^{wy5QՕ}oqDcI]|ͪ 5Dƈk>/}uuv>3$x5Ķ`b:zjdܾ$켉UqNbUN,B%{qOя5q
+ˬqStޛؕU+~yb  `*ܠIJ#vBQ‡R85MjӈUzQb_qO8b֦z5:O.]ѽ1EGqNѻsUV{[\tjn0߇[د
+8 1
+x8H)?om(Gc.b6
+ 6Q;E)d}?$ƦZݧz׭]ac3XRAn'm˫U*!GʦAp 8zfs% SON3ݣt*
+@NaO$CI6hG0(H4Wpݶ̺tOClo/x#ts3 z6SbfE^]ִdT̊q=#*t8HghjQbw9P$[ (/|kYtC
+nN:y`vm9VCIU#Gp
+ 87a HH9F:y oq
+endstream
+endobj
+1428 0 obj
+<< /Type /Page /Contents 1429 0 R /Resources 1427 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1312 0 R >>
+endobj
+1430 0 obj
+<< /D [ 1428 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+1431 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 731.142 null ] >>
+endobj
+1432 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 720.183 null ] >>
+endobj
+1433 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 709.224 null ] >>
+endobj
+1434 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 698.265 null ] >>
+endobj
+1435 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 687.306 null ] >>
+endobj
+1436 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 676.347 null ] >>
+endobj
+1437 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 665.388 null ] >>
+endobj
+1438 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 654.429 null ] >>
+endobj
+1439 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 643.471 null ] >>
+endobj
+1440 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 632.512 null ] >>
+endobj
+1441 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 621.553 null ] >>
+endobj
+1442 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 610.594 null ] >>
+endobj
+1443 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 599.635 null ] >>
+endobj
+1444 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 547.841 null ] >>
+endobj
+1445 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 536.882 null ] >>
+endobj
+1446 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 483.264 null ] >>
+endobj
+1447 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 472.305 null ] >>
+endobj
+1448 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 461.346 null ] >>
+endobj
+1449 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 450.387 null ] >>
+endobj
+1450 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 439.428 null ] >>
+endobj
+1451 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 428.47 null ] >>
+endobj
+1452 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 417.511 null ] >>
+endobj
+1453 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 406.552 null ] >>
+endobj
+1454 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 395.593 null ] >>
+endobj
+1455 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 384.634 null ] >>
+endobj
+1456 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 373.675 null ] >>
+endobj
+1457 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 362.716 null ] >>
+endobj
+1458 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 351.757 null ] >>
+endobj
+1459 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 340.798 null ] >>
+endobj
+1460 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 329.839 null ] >>
+endobj
+1461 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 318.881 null ] >>
+endobj
+1462 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 307.922 null ] >>
+endobj
+1463 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 296.963 null ] >>
+endobj
+1464 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 286.004 null ] >>
+endobj
+1465 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 275.045 null ] >>
+endobj
+1466 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 264.086 null ] >>
+endobj
+1467 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 253.127 null ] >>
+endobj
+1468 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 197.684 null ] >>
+endobj
+1469 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 186.726 null ] >>
+endobj
+1470 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 144.39 null ] >>
+endobj
+1471 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 133.431 null ] >>
+endobj
+1472 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 122.473 null ] >>
+endobj
+1473 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+1474 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+1475 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+1476 0 obj
+<< /D [ 1428 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+1427 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F65 185 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+1479 0 obj
+<< /Filter /FlateDecode /Length 2006 >>
+stream
+xZ]o6}ϯ094
+o[XºUc07ef9o쎎VN"jЭIKQ9Ea
+q&t3}ÛHX2,{"]eI.ZX %mʒavm~+CmblS ˰5 _d,Wˢ8G}o-J؃2sdX_>GFHQsLS#,zK+t(M`+b
+;O( ;-;L X2 in۬~AY]!p,p^6Yvă`&q/Os*aKim:$;H_4( 7'6i^_z3isE08KviPh)1Ңj($z!&/^R䝸:9ܥyC*SυtdL<>jlt$3FotUu@14nYlhi>@Ȍ$XWuulU&/o}#5;sKO6 qBԃD )Qw֘g m:/Y.0ŠZy.* H%YY$4Rh{8Gܝ~_-v
+dt \H!LsžH20]ÆvҚ (?8O
+endstream
+endobj
+1478 0 obj
+<< /Type /Page /Contents 1479 0 R /Resources 1477 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1312 0 R >>
+endobj
+1480 0 obj
+<< /D [ 1478 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+1481 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+1482 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+1483 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 741.933 null ] >>
+endobj
+1484 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 730.974 null ] >>
+endobj
+1485 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 720.015 null ] >>
+endobj
+1486 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 709.056 null ] >>
+endobj
+1487 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 698.097 null ] >>
+endobj
+1488 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 687.138 null ] >>
+endobj
+1489 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 676.179 null ] >>
+endobj
+1490 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 665.22 null ] >>
+endobj
+1491 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 654.261 null ] >>
+endobj
+1492 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 643.302 null ] >>
+endobj
+1493 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 632.344 null ] >>
+endobj
+1494 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 621.385 null ] >>
+endobj
+1495 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 610.426 null ] >>
+endobj
+1496 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 599.467 null ] >>
+endobj
+1497 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 588.508 null ] >>
+endobj
+1498 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 577.549 null ] >>
+endobj
+1499 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 566.59 null ] >>
+endobj
+1500 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 555.631 null ] >>
+endobj
+1501 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 544.672 null ] >>
+endobj
+1502 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 487.885 null ] >>
+endobj
+1503 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 476.926 null ] >>
+endobj
+1504 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 434.087 null ] >>
+endobj
+1505 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 423.128 null ] >>
+endobj
+1506 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 412.169 null ] >>
+endobj
+1507 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 401.21 null ] >>
+endobj
+1508 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 390.251 null ] >>
+endobj
+1509 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 379.292 null ] >>
+endobj
+1510 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 368.334 null ] >>
+endobj
+1511 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 357.375 null ] >>
+endobj
+1512 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 346.416 null ] >>
+endobj
+1513 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 335.457 null ] >>
+endobj
+1514 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 324.498 null ] >>
+endobj
+1515 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 313.539 null ] >>
+endobj
+1516 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 302.58 null ] >>
+endobj
+1517 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 291.621 null ] >>
+endobj
+1518 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 280.662 null ] >>
+endobj
+1519 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 269.703 null ] >>
+endobj
+1520 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 258.745 null ] >>
+endobj
+1521 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 247.786 null ] >>
+endobj
+1522 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 236.827 null ] >>
+endobj
+1523 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 138.197 null ] >>
+endobj
+1524 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 127.238 null ] >>
+endobj
+1525 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 116.279 null ] >>
+endobj
+1526 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 105.32 null ] >>
+endobj
+1527 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 94.361 null ] >>
+endobj
+1528 0 obj
+<< /D [ 1478 0 R /XYZ 81.077 83.402 null ] >>
+endobj
+1477 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F69 304 0 R /F70 305 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+1531 0 obj
+<< /Filter /FlateDecode /Length 2292 >>
+stream
+xڭZ[o~ϯ0Ї@o"iL.<.@(RVoH]h'Ì$;WC'΢QDܼ?\iuXRS2[m/0,fx&cc11FQgٿ ~/ f3TS9&$B*iS6>Gr}|Ŕ:u,܋}\gk'>F;F/-I##K-äSHmcB^~&D4ҿJo4T{QD",YYFa(Ŵ>NtUҷ?,7mY}l]u  D牅1@QzL*f!bPYbyDq??,(U xiSl7~ko7 ͟;gRU!|9kvyv_[j@V2& [{`xt bUeqo%@ےm~<ѷY<Lb#tsGD$g1欋r- Y[,@|"uOp[Xٹeqm_˭[ső!0Mcڟb!`nkx1x6U<L_#JI,j7Vl~7in@6A19%43ld?fW6|*1W.:=Qjt ű1.ͳb8mģ,u <v~bXy:sy %AR"
+%VҤ($
+ER͂*Xɓujy=DGי ꗾ2:Q*(ºh}׌$9c K맇5ϳn:KRH0DC7 s0Ou^
+)e+9@4cL@Nqӱ'dNNW:žc[
+wI<#tleyFwIf]Q}DɐP/uz}'\A1w;'38OuiqȜFs
+6ޔD%30ob`2IAAk iԣu%})Tzuy֝[]cUei*
+ >ᩞ7.. m{]t8\{ýMWd}O0}~gyvs7yE?fl5j,L9gJ麏ȍbPdz]* eq]NhN,8Uq93/#)ԗ/6j o-Kl vOIM_wMG)
+pDq@]Ѧ
+ GH S!/oΰkAV{@o&<EqMvB+*X+ OuYJJ/LA2b[s-): k', KoyZYccvQ;s7{
+}-W=o.=?/x;6?pbЖ
+endstream
+endobj
+1530 0 obj
+<< /Type /Page /Contents 1531 0 R /Resources 1529 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1312 0 R >>
+endobj
+1532 0 obj
+<< /D [ 1530 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+1533 0 obj
+<< /D [ 1530 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+1534 0 obj
+<< /D [ 1530 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+1535 0 obj
+<< /D [ 1530 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+1536 0 obj
+<< /D [ 1530 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+1537 0 obj
+<< /D [ 1530 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+37 0 obj
+<< /D [ 1530 0 R /XYZ 79.37 699.542 null ] >>
+endobj
+1538 0 obj
+<< /D [ 1530 0 R /XYZ 81.077 590.656 null ] >>
+endobj
+1539 0 obj
+<< /D [ 1530 0 R /XYZ 81.077 579.697 null ] >>
+endobj
+1540 0 obj
+<< /D [ 1530 0 R /XYZ 81.077 536.858 null ] >>
+endobj
+1541 0 obj
+<< /D [ 1530 0 R /XYZ 81.077 496.011 null ] >>
+endobj
+1542 0 obj
+<< /D [ 1530 0 R /XYZ 81.077 467.119 null ] >>
+endobj
+1543 0 obj
+<< /D [ 1530 0 R /XYZ 81.077 414.317 null ] >>
+endobj
+1544 0 obj
+<< /D [ 1530 0 R /XYZ 81.077 403.358 null ] >>
+endobj
+1545 0 obj
+<< /D [ 1530 0 R /XYZ 81.077 362.511 null ] >>
+endobj
+1546 0 obj
+<< /D [ 1530 0 R /XYZ 81.077 333.62 null ] >>
+endobj
+1547 0 obj
+<< /D [ 1530 0 R /XYZ 81.077 317.68 null ] >>
+endobj
+1548 0 obj
+<< /D [ 1530 0 R /XYZ 81.077 306.721 null ] >>
+endobj
+1549 0 obj
+<< /D [ 1530 0 R /XYZ 81.077 295.762 null ] >>
+endobj
+1550 0 obj
+<< /D [ 1530 0 R /XYZ 81.077 284.803 null ] >>
+endobj
+1551 0 obj
+<< /D [ 1530 0 R /XYZ 81.077 253.919 null ] >>
+endobj
+1552 0 obj
+<< /D [ 1530 0 R /XYZ 81.077 242.96 null ] >>
+endobj
+1553 0 obj
+<< /D [ 1530 0 R /XYZ 81.077 232.001 null ] >>
+endobj
+1554 0 obj
+<< /D [ 1530 0 R /XYZ 81.077 221.042 null ] >>
+endobj
+1555 0 obj
+<< /D [ 1530 0 R /XYZ 81.077 210.083 null ] >>
+endobj
+1556 0 obj
+<< /D [ 1530 0 R /XYZ 81.077 199.124 null ] >>
+endobj
+1557 0 obj
+<< /D [ 1530 0 R /XYZ 81.077 188.165 null ] >>
+endobj
+1558 0 obj
+<< /D [ 1530 0 R /XYZ 81.077 177.206 null ] >>
+endobj
+1559 0 obj
+<< /D [ 1530 0 R /XYZ 81.077 166.247 null ] >>
+endobj
+1560 0 obj
+<< /D [ 1530 0 R /XYZ 81.077 155.289 null ] >>
+endobj
+1561 0 obj
+<< /D [ 1530 0 R /XYZ 81.077 144.33 null ] >>
+endobj
+1529 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F67 187 0 R /F19 184 0 R /F20 186 0 R /F70 305 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+1564 0 obj
+<< /Filter /FlateDecode /Length 2336 >>
+stream
+xZI $Ltu-*e %KnI%yi]Y@r6~6OV<v_>+QO>'d(ĒI" ’L6Mf&>eYd\T+jQo6y4uYڻjPȮ,q]U궵n{Kkv[Q~9}!Efzb;7;w$
+w Jq7T\w=K,I,E=yGA 6Oqx_?jmDw)>2ox5Y*IL,)+J0I0Io@î݁uGo
+w9+Y>g
+{'b”Jġ @#\C~ы]~>J+lį Pf2 ECHo;t2\&;dUhg̅ (g2H(Mz_$1 <2mXlu"RLfyچCPؕC8f<@_sA u5Iyq̭̭x%VbKS&( I$K"#׍#h[EWU]mœ!X$cbHюE]7ˢʻxZd
+3(
+oՓ!g2tf8!ܟp4K&$2cG{묇f͑h㘼ifWb٭n_<_jGƙ6ϊLoAù7:!D2/' GGkF9JF𨞮v"o 43gWF4/S~aұd>ыPbI!S(Ё`q,@@iJ%',!>sgM<1DL+WrU< m7g]^h#(TT8I_uJ#$ E?cg&@.4+m}QXY
+X.t/6ND -D_CZ/7~FR(KP4j>ʑowH
+9Qݧa
+endstream
+endobj
+1563 0 obj
+<< /Type /Page /Contents 1564 0 R /Resources 1562 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1312 0 R >>
+endobj
+1565 0 obj
+<< /D [ 1563 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+1566 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 742.929 null ] >>
+endobj
+1567 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 731.97 null ] >>
+endobj
+1568 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 721.011 null ] >>
+endobj
+1569 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 710.052 null ] >>
+endobj
+1570 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 699.093 null ] >>
+endobj
+1571 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 688.134 null ] >>
+endobj
+1572 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 677.175 null ] >>
+endobj
+1573 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 666.217 null ] >>
+endobj
+1574 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+1575 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 608.433 null ] >>
+endobj
+1576 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 597.474 null ] >>
+endobj
+1577 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 586.515 null ] >>
+endobj
+1578 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 557.624 null ] >>
+endobj
+1579 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 546.665 null ] >>
+endobj
+1580 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 535.706 null ] >>
+endobj
+1581 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 475.017 null ] >>
+endobj
+1582 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 464.058 null ] >>
+endobj
+1583 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 453.099 null ] >>
+endobj
+1584 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 442.14 null ] >>
+endobj
+1585 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 431.181 null ] >>
+endobj
+1586 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 420.222 null ] >>
+endobj
+1587 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 409.263 null ] >>
+endobj
+1588 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 398.304 null ] >>
+endobj
+1589 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 387.345 null ] >>
+endobj
+1590 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 376.386 null ] >>
+endobj
+1591 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 365.428 null ] >>
+endobj
+1592 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 354.469 null ] >>
+endobj
+1593 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 343.51 null ] >>
+endobj
+1594 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 332.551 null ] >>
+endobj
+1595 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 321.592 null ] >>
+endobj
+1596 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 310.633 null ] >>
+endobj
+1597 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 299.674 null ] >>
+endobj
+1598 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 288.715 null ] >>
+endobj
+1599 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 277.756 null ] >>
+endobj
+1600 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 181.201 null ] >>
+endobj
+1601 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 170.243 null ] >>
+endobj
+1602 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 159.284 null ] >>
+endobj
+1603 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 148.325 null ] >>
+endobj
+1604 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 137.366 null ] >>
+endobj
+1605 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 126.407 null ] >>
+endobj
+1606 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 115.448 null ] >>
+endobj
+1607 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 104.489 null ] >>
+endobj
+1608 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 93.53 null ] >>
+endobj
+1609 0 obj
+<< /D [ 1563 0 R /XYZ 81.077 82.571 null ] >>
+endobj
+1562 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F70 305 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R /F27 642 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+1612 0 obj
+<< /Filter /FlateDecode /Length 1467 >>
+stream
+xڭYMoHWHJO *Zi38,0-chw(qY\`Q^U54Y%4|G/W?wM$q _DXM43ьP͒&w¸_L,qZ pDi0!Ifi5ӓcO}l?`݀G%rO #.1'6,Ima%`Yl>ow*}|LM'Khf)Ԇ=&>> {
+}9z9EsY/^qy9R?cʶ9JÄ5jT
+^AROڔ<.oɾݰ8]P^e-!> ڭmEGƧj.Y,KƉ8 h;\}qψ^Gy0Bz9|]sc:L Gapzx· apÙ+s}p%,WN! ݠ=Oust~8p#Ow& +):L Ϟ9 Jq t03 sү6#BJ3Y,K`V%:Eh IX{5JDhm%m"nyD[L
+"<G!OO;pW05?u~ eYs39ժ'ZwU;,P!ewk}4v{tڡQ!B9Tj&AX(ѧ:pEQ\_Tg"7-T 4S̡B7BZt")qYk~?t]
+endstream
+endobj
+1611 0 obj
+<< /Type /Page /Contents 1612 0 R /Resources 1610 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1312 0 R >>
+endobj
+1613 0 obj
+<< /D [ 1611 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+1614 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+1615 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+1616 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+1617 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+1618 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+1619 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+1620 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+1621 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 687.138 null ] >>
+endobj
+1622 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 676.179 null ] >>
+endobj
+1623 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 665.22 null ] >>
+endobj
+1624 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 654.261 null ] >>
+endobj
+1625 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 643.302 null ] >>
+endobj
+1626 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 632.344 null ] >>
+endobj
+1627 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 621.385 null ] >>
+endobj
+1628 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 610.426 null ] >>
+endobj
+1629 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 599.467 null ] >>
+endobj
+1630 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 588.508 null ] >>
+endobj
+1631 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 577.549 null ] >>
+endobj
+1632 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 566.59 null ] >>
+endobj
+1633 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 555.631 null ] >>
+endobj
+1634 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 544.672 null ] >>
+endobj
+1635 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 533.713 null ] >>
+endobj
+1636 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 522.754 null ] >>
+endobj
+1637 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 511.796 null ] >>
+endobj
+1638 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 500.837 null ] >>
+endobj
+1639 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 489.878 null ] >>
+endobj
+1640 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 478.919 null ] >>
+endobj
+1641 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 467.96 null ] >>
+endobj
+1642 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 457.001 null ] >>
+endobj
+1643 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 446.042 null ] >>
+endobj
+1644 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 435.083 null ] >>
+endobj
+1645 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 424.124 null ] >>
+endobj
+1646 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 413.165 null ] >>
+endobj
+1647 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 397.225 null ] >>
+endobj
+1648 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 386.266 null ] >>
+endobj
+1649 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 375.307 null ] >>
+endobj
+1650 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 364.349 null ] >>
+endobj
+1651 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 353.39 null ] >>
+endobj
+1652 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 342.431 null ] >>
+endobj
+1653 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 331.472 null ] >>
+endobj
+1654 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 320.513 null ] >>
+endobj
+1655 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 309.554 null ] >>
+endobj
+1656 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 298.595 null ] >>
+endobj
+1657 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 287.636 null ] >>
+endobj
+1658 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 276.677 null ] >>
+endobj
+1659 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 265.718 null ] >>
+endobj
+1660 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 254.759 null ] >>
+endobj
+1661 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 243.801 null ] >>
+endobj
+1662 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 232.842 null ] >>
+endobj
+1663 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 221.883 null ] >>
+endobj
+1664 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 210.924 null ] >>
+endobj
+1665 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 199.965 null ] >>
+endobj
+1666 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 189.006 null ] >>
+endobj
+1667 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 178.047 null ] >>
+endobj
+1668 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 162.107 null ] >>
+endobj
+1669 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 151.148 null ] >>
+endobj
+1670 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 120.264 null ] >>
+endobj
+1671 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 109.305 null ] >>
+endobj
+1672 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 98.346 null ] >>
+endobj
+1673 0 obj
+<< /D [ 1611 0 R /XYZ 81.077 87.387 null ] >>
+endobj
+1610 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+1676 0 obj
+<< /Filter /FlateDecode /Length 3015 >>
+stream
+xڭ[oܸ_ᷮф'~H"H{hWy{-ꢕ\I I}PHK7/֊p>8 IGW^D O/~x+A]_P]+WiBIЫտ7?bq%J.4DQ=bfNnUׯbod[]vYqcM]4 )LRJ gOŐ+$ H'$"qNR-A_Ln5K7tSmbѹHHMvOYW.҄X}Gwׯ@&0}u͒MWeyM7Nݩ)N^m}n+Zg>>hEݝ%aQae?D^_q΍<ڴMewcgbL٘8˶9ɌIP3g`t#aWۦcmmyg|3@H$ FekE$ʧ^
+V0̮t[
+2FirT΢"9s 2(nS}ĢM <+h琄=2o]#NcJU*hy.vbII$벴`(Ι739B
+kj@Y [V ъK`|'kt Ft3=TDD}> " `Ý~ivhnC-y3TX)*nFٓb0=>q_ikij뼼=m<z2^}*wdvŦa>Y./l(u۾2N%s-2]JPL,˪hÖ]It[<X>]a(jiǢr
+aǍ7.''4Z
+p꼙ްtChHvkw ;
+}\'>2- .<&i42EA\ 1$I~YHHJg$>%'N}61XjGH>J4jr+"̐ "dnLmH&~=o/7Sh3Im^C"3nNb*Fb79 _YpǛDNAHR)(6aHƞ)u ]p,&g{X2($egC`q7
+)rxMrOkp#F@(WfUfILԌW_T+& *y
++X9G=;Gz41pSñ3aONc@R0
+&“lʮj+W8T>}0(Tt`͓EWy0RH*P!ߔG 7*)l*(L'Q=ψ
+~d0"
+7 ׋uLdあ9$63
+endstream
+endobj
+1675 0 obj
+<< /Type /Page /Contents 1676 0 R /Resources 1674 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1312 0 R >>
+endobj
+1677 0 obj
+<< /D [ 1675 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+1678 0 obj
+<< /D [ 1675 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+1679 0 obj
+<< /D [ 1675 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+1680 0 obj
+<< /D [ 1675 0 R /XYZ 81.077 715.974 null ] >>
+endobj
+1681 0 obj
+<< /D [ 1675 0 R /XYZ 81.077 705.015 null ] >>
+endobj
+1682 0 obj
+<< /D [ 1675 0 R /XYZ 81.077 694.056 null ] >>
+endobj
+1683 0 obj
+<< /D [ 1675 0 R /XYZ 81.077 678.743 null ] >>
+endobj
+1684 0 obj
+<< /D [ 1675 0 R /XYZ 81.077 667.784 null ] >>
+endobj
+1685 0 obj
+<< /D [ 1675 0 R /XYZ 81.077 656.825 null ] >>
+endobj
+1686 0 obj
+<< /D [ 1675 0 R /XYZ 81.077 645.866 null ] >>
+endobj
+1687 0 obj
+<< /D [ 1675 0 R /XYZ 81.077 603.967 null ] >>
+endobj
+1688 0 obj
+<< /D [ 1675 0 R /XYZ 81.077 575.703 null ] >>
+endobj
+1689 0 obj
+<< /D [ 1675 0 R /XYZ 81.077 316.542 null ] >>
+endobj
+1690 0 obj
+<< /D [ 1675 0 R /XYZ 81.077 305.583 null ] >>
+endobj
+1691 0 obj
+<< /D [ 1675 0 R /XYZ 81.077 294.624 null ] >>
+endobj
+1692 0 obj
+<< /D [ 1675 0 R /XYZ 81.077 283.665 null ] >>
+endobj
+1693 0 obj
+<< /D [ 1675 0 R /XYZ 81.077 272.706 null ] >>
+endobj
+1694 0 obj
+<< /D [ 1675 0 R /XYZ 81.077 261.747 null ] >>
+endobj
+1695 0 obj
+<< /D [ 1675 0 R /XYZ 81.077 250.789 null ] >>
+endobj
+1696 0 obj
+<< /D [ 1675 0 R /XYZ 81.077 239.83 null ] >>
+endobj
+1697 0 obj
+<< /D [ 1675 0 R /XYZ 81.077 228.871 null ] >>
+endobj
+1698 0 obj
+<< /D [ 1675 0 R /XYZ 81.077 217.912 null ] >>
+endobj
+1699 0 obj
+<< /D [ 1675 0 R /XYZ 81.077 206.953 null ] >>
+endobj
+1700 0 obj
+<< /D [ 1675 0 R /XYZ 81.077 195.994 null ] >>
+endobj
+1701 0 obj
+<< /D [ 1675 0 R /XYZ 81.077 185.035 null ] >>
+endobj
+1702 0 obj
+<< /D [ 1675 0 R /XYZ 81.077 174.076 null ] >>
+endobj
+1703 0 obj
+<< /D [ 1675 0 R /XYZ 81.077 163.117 null ] >>
+endobj
+1704 0 obj
+<< /D [ 1675 0 R /XYZ 81.077 122.473 null ] >>
+endobj
+1705 0 obj
+<< /D [ 1675 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+1706 0 obj
+<< /D [ 1675 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+1707 0 obj
+<< /D [ 1675 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+1708 0 obj
+<< /D [ 1675 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+1674 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F70 305 0 R /F77 542 0 R /F78 654 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+1711 0 obj
+<< /Filter /FlateDecode /Length 2083 >>
+stream
+xڽZߏ~@b<&@k&hQC@$i[9Yr%9ƸJ2%v}Eڗ5-#?9ofMg}<yKf I4r~I03v[UQT nǼGlByVYv>7K(a' }tEru?<I9#Mϲ*3ߺoXVaW; O]e/$Z]?O'BȧR t+xM [)¨L=nD|~hoH0RmUWfE++Mv*}1JhĐ/)nR_,.߮N( &YFn!IX[2jZ("ذI0;rfa~-l`}٤;jݲurqtzzL{4_.P<eb =7D$"-nSbDsvfS8%('RFLў\ڸv e.:lTP\"XUE?|7M
+s.-tc:PԷQ胣uB2ans܀InsٽCPYJxhEGNn0g0?^1_ӭ]gs~]O¨-BȹCϖU]?w Ь"`nۧhLC0US4~n*!t*\ ЗZ* BTuEh!{Jan߬!*9(NhJ?#Q(:̗.:\]]Y4S1|M;K@M@hG$2hlﮮ͒ZEp%Mq,]^IQ&pdfMho)Xp54N+ZN3raeF.tn+͗}Od̳IHVSAB*R"n ] Ƕ۷дceuzV8zAyb2n"AFCd f2dW>й$K-0E)Wqqת awFhtmBԸt(B>_a$!5H/ǬqE^?#
+kQc]z X=zؾj6
+TƵoCcIƈmqHl7H:v+pO Zz0W "+7ū" 0)z`=d 2,h
+>p# t2F֠pw/a#P)~&@ ݍkm}V+S1jz\k~:#{$93{XX1w?^@0ڴ]A@l]!?UU~>ǭr. -P6bxXR%А8p_-=4nRJ^0h3F</BS2hEFS$\}n|7rm=*~󠃌s>]l;F@\?m˅%dp{|ݾ}gcMuI&qFKY414x8O'""+ASU+#饝+N&K$16DrQuZAalO mn
+'`K/Q !"䣦$q<# O</'kT·l'W;qd}^NJڋV-)ܺ^}p&<.Wްz hԌ @Gɔ9[1CU|5] qkC]O44$T_Phf|f=]_b؆oaq zέ!
+pTcr? +{yp`Xɾ)F܃X=0O+fLR/2{x_)U
+endstream
+endobj
+1710 0 obj
+<< /Type /Page /Contents 1711 0 R /Resources 1709 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1312 0 R >>
+endobj
+1712 0 obj
+<< /D [ 1710 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+1713 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 743.081 null ] >>
+endobj
+1714 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 732.123 null ] >>
+endobj
+1715 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 721.164 null ] >>
+endobj
+1716 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 710.205 null ] >>
+endobj
+1717 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 699.246 null ] >>
+endobj
+1718 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 688.287 null ] >>
+endobj
+1719 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 677.328 null ] >>
+endobj
+1720 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 666.369 null ] >>
+endobj
+1721 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 655.41 null ] >>
+endobj
+1722 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 644.451 null ] >>
+endobj
+1723 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 633.492 null ] >>
+endobj
+1724 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 622.534 null ] >>
+endobj
+1725 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 611.575 null ] >>
+endobj
+1726 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 600.616 null ] >>
+endobj
+1727 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 570.8 null ] >>
+endobj
+1728 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 559.841 null ] >>
+endobj
+1729 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 548.882 null ] >>
+endobj
+1730 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 537.923 null ] >>
+endobj
+1731 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 526.964 null ] >>
+endobj
+1732 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 516.005 null ] >>
+endobj
+1733 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 505.046 null ] >>
+endobj
+1734 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 494.088 null ] >>
+endobj
+1735 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 440.361 null ] >>
+endobj
+1736 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 429.402 null ] >>
+endobj
+1737 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 418.444 null ] >>
+endobj
+1738 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 407.485 null ] >>
+endobj
+1739 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 396.526 null ] >>
+endobj
+1740 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 385.567 null ] >>
+endobj
+1741 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 374.608 null ] >>
+endobj
+1742 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 363.649 null ] >>
+endobj
+1743 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 352.69 null ] >>
+endobj
+1744 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 341.731 null ] >>
+endobj
+1745 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 301.19 null ] >>
+endobj
+1746 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 290.231 null ] >>
+endobj
+1747 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 279.272 null ] >>
+endobj
+1748 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 268.313 null ] >>
+endobj
+1749 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 257.354 null ] >>
+endobj
+1750 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 246.395 null ] >>
+endobj
+1751 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 235.436 null ] >>
+endobj
+1752 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 224.477 null ] >>
+endobj
+1753 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 213.518 null ] >>
+endobj
+1754 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 202.559 null ] >>
+endobj
+1755 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 191.601 null ] >>
+endobj
+1756 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 180.642 null ] >>
+endobj
+1757 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 169.683 null ] >>
+endobj
+1758 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+1759 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+1760 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+1761 0 obj
+<< /D [ 1710 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+1709 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R /F77 542 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+1764 0 obj
+<< /Filter /FlateDecode /Length 4187 >>
+stream
+x\I=H\Ի"])\`
+W,6_~38˥yA̚v0ggs_&c53FZj 6Ku|BŪlOr|)ADJOKPsulɕLŴ6y@nafi¯ }_ *e/벧֩i!f[lmuFm)#5-#6ఴoKfaLn159|:_ lڔZ+QZ^=~xYoCGmq>l'w˟~A&ٶ!<ܯ#uoÕh;8u^flV-8nu@twf96(vVw^WV̻?`O s6Bh |DpWMWRO`Q 㳴 nV}l!DMi?χYvEu v
+EJPI%XrkQmomwhAYUO\o/l4l?>-=QEy.>vP[.vo|?<wCBiE#SyU7)e8Ԝlj˒` lK0b;tq!_-fJU&+~?qij+˒eA%]ҳU]Sv ).6.>94yO,aǩC հml>-5n7LoNvŨ;%xv@,RXtnOrutw(gf.!BTsL`6xNdkQsy$nu¶;Ml_d$D
+¼Պ/r45T֭3W=~ߖ]l|[G7/naSsh@g±Է?cwW.;nx0p<"6[,M.\d-T54_llX7϶4S'#@1"Fu7ru|Xn6εzhŃZjysJBC#S.@U}lWP16KXuMNGř|˄ϻU氓Qq O(> =ih.]T^̋yӞհ=r)Qy`z/^m(Y.0d9AoG_'Zciluj6
+FH9ewt
+/pAؐL]F
+ 4A)2fJ.$-j9"!tdaD]e1bAHL䳫c$$;%4;+ (@bdRәXU?</Z;&]eI&*!M)!)N1BC]o,bP0 FfLY+_Cw*KY1DWgXj!
+$mrgFт緝%. 2YD7 d
+FH9Qwt
+/pA&7+=Ǡ&DYS ea}WwA
+Ζ3T ć IjbrFFW2hې\V$'Psɚ`ZyQ Òž.h 3D FJC< H#,MA ZbnT/ekCaĸ$XЃ
+Z@BP"UdZ4 ҒˊAtj.bSb, pkaweu%1
+%т*Gzb4"I2%FR>3P9sY`#d<07(/XqfH/Ddg oJeE {5״)@_.K3
+'A 3aLdx%#2-DaDGkWʊ$ H
+qcu踐 !c,?0%)#l7LLUTBx!%9ˀSЂ\RPsxV7Y`7m ,df4BI22ˊAtjS4P0pJ TZrƛ lB4%SZ4H2%FbY2WcV\Re[GX: Z@(!AUiy+"ɴPi@%9(%' Xh'm, pN- ֔dt+.ZWdB F$YcԨ^?{;y>3LC{Tʙ(Ku $Sd>0
+{)xStu۪{)u߼Iw{•HfqwykO.>~S IrWuE+c.$% BeM
+endstream
+endobj
+1763 0 obj
+<< /Type /Page /Contents 1764 0 R /Resources 1762 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1804 0 R >>
+endobj
+1765 0 obj
+<< /D [ 1763 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+1766 0 obj
+<< /D [ 1763 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+1767 0 obj
+<< /D [ 1763 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+1768 0 obj
+<< /D [ 1763 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+1769 0 obj
+<< /D [ 1763 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+1770 0 obj
+<< /D [ 1763 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+1771 0 obj
+<< /D [ 1763 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+1772 0 obj
+<< /D [ 1763 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+1773 0 obj
+<< /D [ 1763 0 R /XYZ 81.077 662.535 null ] >>
+endobj
+1774 0 obj
+<< /D [ 1763 0 R /XYZ 81.077 651.576 null ] >>
+endobj
+1775 0 obj
+<< /D [ 1763 0 R /XYZ 81.077 640.617 null ] >>
+endobj
+1776 0 obj
+<< /D [ 1763 0 R /XYZ 81.077 629.658 null ] >>
+endobj
+1777 0 obj
+<< /D [ 1763 0 R /XYZ 81.077 618.699 null ] >>
+endobj
+1778 0 obj
+<< /D [ 1763 0 R /XYZ 81.077 607.74 null ] >>
+endobj
+1779 0 obj
+<< /D [ 1763 0 R /XYZ 81.077 596.781 null ] >>
+endobj
+1780 0 obj
+<< /D [ 1763 0 R /XYZ 81.077 585.822 null ] >>
+endobj
+1781 0 obj
+<< /D [ 1763 0 R /XYZ 81.077 574.863 null ] >>
+endobj
+1782 0 obj
+<< /D [ 1763 0 R /XYZ 81.077 563.904 null ] >>
+endobj
+1783 0 obj
+<< /D [ 1763 0 R /XYZ 81.077 552.946 null ] >>
+endobj
+1784 0 obj
+<< /D [ 1763 0 R /XYZ 81.077 541.987 null ] >>
+endobj
+1785 0 obj
+<< /D [ 1763 0 R /XYZ 81.077 531.028 null ] >>
+endobj
+1786 0 obj
+<< /D [ 1763 0 R /XYZ 81.077 491.09 null ] >>
+endobj
+1787 0 obj
+<< /D [ 1763 0 R /XYZ 81.077 480.132 null ] >>
+endobj
+1788 0 obj
+<< /D [ 1763 0 R /XYZ 81.077 469.173 null ] >>
+endobj
+1789 0 obj
+<< /D [ 1763 0 R /XYZ 81.077 458.214 null ] >>
+endobj
+1790 0 obj
+<< /D [ 1763 0 R /XYZ 81.077 447.255 null ] >>
+endobj
+1791 0 obj
+<< /D [ 1763 0 R /XYZ 81.077 436.296 null ] >>
+endobj
+1793 0 obj
+<< /D [ 1763 0 R /XYZ 81.077 188.226 null ] >>
+endobj
+1794 0 obj
+<< /D [ 1763 0 R /XYZ 81.077 177.267 null ] >>
+endobj
+1795 0 obj
+<< /D [ 1763 0 R /XYZ 81.077 166.308 null ] >>
+endobj
+1796 0 obj
+<< /D [ 1763 0 R /XYZ 81.077 155.349 null ] >>
+endobj
+1797 0 obj
+<< /D [ 1763 0 R /XYZ 81.077 144.39 null ] >>
+endobj
+1798 0 obj
+<< /D [ 1763 0 R /XYZ 81.077 133.431 null ] >>
+endobj
+1799 0 obj
+<< /D [ 1763 0 R /XYZ 81.077 122.473 null ] >>
+endobj
+1800 0 obj
+<< /D [ 1763 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+1801 0 obj
+<< /D [ 1763 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+1802 0 obj
+<< /D [ 1763 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+1803 0 obj
+<< /D [ 1763 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+1762 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F69 304 0 R /F34 1792 0 R /F27 642 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+1807 0 obj
+<< /Filter /FlateDecode /Length 2480 >>
+stream
+xZ[o~ϯpp wJZ>">.fudɕd`{Iݨ$٢}%Js#)- #a?^|QF 0 ^E$$j$AX~p.{"B, &(&>N
+ћFoW7JPa^_'iUO+7ƈ)#iO2:$!Qᣟf1"cA
+ce>T/hH;V NJb|Ih6e~]C03wy̑>y .<V7<j1Oļ1<VoMF W:JًFÔ>FwJߔCZUqS)cmx=h몴E@ ^4Kz4K`EIQL׿OlW4kj1_PG={~~Sn.^ݜ3ۏ$^_#J8kд)^C d>,jY5|v8B9x2`V_^1ƖynCův #A[Oaxby 3Zj]Jo/Bo] 2+6eu/UYL1v_n&YZL-Y0P-EPHЯu[bjZY愵(SciOW\;s`~kiF!i~*-򇘟dZ
+Fcf~DM4XV)",R."I[~kT `[eӑ-xOH؈"'g`TNl:nMsYJt0!D   \PpR('CZ;!O +(B\vr<4YY(Hqwz 8d8M(|YeK*3{TiQ%siïٖE{uw
+lRxާէn9gj GRbPTP%_Dʆ>|uw'w?@tk"̃6uLR{gntĖ ؄>˰x?<T8'q!)կ
+Zys aj֐7e<reڬFH0{ݹT{}dx+MH VqHFACXzk.LPGm*a!%XzЬ.ʳ+dfD1kk,y'$7F Pv_pȤ1)nʊ:Ygljtyy^ZmЮ<]{j󄩁FkƧ>G^7AXcc31[BIݕIh/[ Ѕy5\4?McӇٜȤD\ES" /7DbBz9& YQ7::Oz;QYq&Sv9ڥ͌6l 2p֎SbAPHmj+4uB$(0*
+uF("b*Wh
+HcڸtvByR[藻 on-2&4?5$Bd(58C+ ^
+0yDV}[hݕxl흚ľ-* KK85iUrZsT6o۪⾲,ʦ#cVmԝsAԿ3A8؝8dlSwKBs=|.xώ0s9
+lcmGqd84LXӺ镗@20(Ԇ<=tޜ_T,FB>(h7<a8(ȏѯB;  Wa9FS?ai:|l% )0'fcHxDXg?&"|s,Q!ՉB[*}$BHǜr'?H\mLROxhx =ψ1)
+mGoܗ2R=1]i,U&_b nuAnI GiC󴺙^'J0I(zә`ĞCANYHyD(,߆/M
+yy%X _䡿deQ1CjHVC<vLa)'! `]lߟ#pRa;tc;Ley>z2A!\8Fq&T
+endstream
+endobj
+1806 0 obj
+<< /Type /Page /Contents 1807 0 R /Resources 1805 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1804 0 R >>
+endobj
+1808 0 obj
+<< /D [ 1806 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+1809 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+1810 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+1811 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+1812 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+1813 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+1814 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+1815 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+1816 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+1817 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 661.276 null ] >>
+endobj
+1818 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 608.501 null ] >>
+endobj
+1819 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 597.542 null ] >>
+endobj
+1820 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 526.861 null ] >>
+endobj
+1821 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 515.902 null ] >>
+endobj
+1822 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 504.943 null ] >>
+endobj
+1823 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 476.079 null ] >>
+endobj
+1824 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 465.12 null ] >>
+endobj
+1825 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 454.161 null ] >>
+endobj
+1826 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 443.202 null ] >>
+endobj
+1827 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 432.243 null ] >>
+endobj
+1828 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 421.284 null ] >>
+endobj
+1829 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 410.325 null ] >>
+endobj
+1830 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 399.366 null ] >>
+endobj
+1831 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 383.453 null ] >>
+endobj
+1832 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 372.494 null ] >>
+endobj
+1833 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 341.651 null ] >>
+endobj
+1834 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 330.692 null ] >>
+endobj
+1835 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 319.733 null ] >>
+endobj
+1836 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 308.774 null ] >>
+endobj
+1837 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 297.815 null ] >>
+endobj
+1838 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 286.856 null ] >>
+endobj
+1839 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 275.897 null ] >>
+endobj
+1840 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 264.938 null ] >>
+endobj
+1841 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 253.979 null ] >>
+endobj
+1842 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 243.021 null ] >>
+endobj
+1843 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 232.062 null ] >>
+endobj
+1844 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 221.103 null ] >>
+endobj
+1845 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 210.144 null ] >>
+endobj
+1846 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 199.185 null ] >>
+endobj
+1847 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 188.226 null ] >>
+endobj
+1848 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 177.267 null ] >>
+endobj
+1849 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 166.308 null ] >>
+endobj
+1850 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 155.349 null ] >>
+endobj
+1851 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 144.39 null ] >>
+endobj
+1852 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 133.431 null ] >>
+endobj
+1853 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 122.473 null ] >>
+endobj
+1854 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+1855 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+1856 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+1857 0 obj
+<< /D [ 1806 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+1805 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F65 185 0 R /F20 186 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+1860 0 obj
+<< /Filter /FlateDecode /Length 2050 >>
+stream
+xڭZ]}_[շ%&I*}Ȥ\n#nئoϕ?%b#]IIvg߿V@L#-
+<#H#"Idzkڙcl)\h~̊-C,+sm)o(y"Dq$AO0}U6&m̺cgܤɡfW͊Cfg3NQ$o#a(<W`$.Ռ#.\I$ Cɮ~g
+lK<a4wZDž9.APіSղ+< <-0q֢KW%$B<c੃8'.u%a1U%1*|PR $mlS"}SYqY>&ߤ1x1u%)7}1+{·qe}t"چ{F X&yn:sjxg=6d e24ނVohnv[BRR$1F(k=_'S1<%`e}j3Etfw %0_0Ɋ&TY9eB5RD3=.mmxqmN6^[D!Hdc'Tr+7-uYp¦BBK
+ZOZiej)ʵY^t
+#BV.Ez7V)<_WI+ʢ@U
+>xrc?T׫2
+>]굞P͑'}. r.'7ȸB7IקC㢗96P
+4,xK7Ru]Q o9!$Bb8[~ƺPUn{ypzQlŧbO3MW{S)1ES,hO~7c|r iT_yͳ;KyЄsHM_L/'KwmqG?VZ
+Y|
+endstream
+endobj
+1859 0 obj
+<< /Type /Page /Contents 1860 0 R /Resources 1858 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1804 0 R >>
+endobj
+1861 0 obj
+<< /D [ 1859 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+1862 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 755.04 null ] >>
+endobj
+1863 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 725.245 null ] >>
+endobj
+1864 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 714.286 null ] >>
+endobj
+1865 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 703.327 null ] >>
+endobj
+1866 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 692.368 null ] >>
+endobj
+1867 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 681.409 null ] >>
+endobj
+1868 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 670.45 null ] >>
+endobj
+1869 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 659.491 null ] >>
+endobj
+1870 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 648.532 null ] >>
+endobj
+1871 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 637.573 null ] >>
+endobj
+1872 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 626.615 null ] >>
+endobj
+1873 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 615.656 null ] >>
+endobj
+1874 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 604.697 null ] >>
+endobj
+1875 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 562.324 null ] >>
+endobj
+1876 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 551.365 null ] >>
+endobj
+1877 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 540.406 null ] >>
+endobj
+1878 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 529.447 null ] >>
+endobj
+1879 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 518.489 null ] >>
+endobj
+1880 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 507.53 null ] >>
+endobj
+1881 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 496.571 null ] >>
+endobj
+1882 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 485.612 null ] >>
+endobj
+1883 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 474.653 null ] >>
+endobj
+1884 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 463.694 null ] >>
+endobj
+1885 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 423.158 null ] >>
+endobj
+1886 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 412.199 null ] >>
+endobj
+1887 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 401.241 null ] >>
+endobj
+1888 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 385.612 null ] >>
+endobj
+1889 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 374.653 null ] >>
+endobj
+1890 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 363.694 null ] >>
+endobj
+1891 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 352.735 null ] >>
+endobj
+1892 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 341.776 null ] >>
+endobj
+1893 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 330.817 null ] >>
+endobj
+1894 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 289.067 null ] >>
+endobj
+1895 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 278.108 null ] >>
+endobj
+1896 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 267.149 null ] >>
+endobj
+1897 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 256.19 null ] >>
+endobj
+1898 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 245.231 null ] >>
+endobj
+1899 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 234.272 null ] >>
+endobj
+1900 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 223.313 null ] >>
+endobj
+1901 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 212.355 null ] >>
+endobj
+1902 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 201.396 null ] >>
+endobj
+1903 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 190.437 null ] >>
+endobj
+1904 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 174.808 null ] >>
+endobj
+1905 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 163.849 null ] >>
+endobj
+1906 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 152.89 null ] >>
+endobj
+1907 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 141.931 null ] >>
+endobj
+1908 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+1909 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+1910 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+1911 0 obj
+<< /D [ 1859 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+1858 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F70 305 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R /F77 542 0 R /F32 176 0 R /F27 642 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+1916 0 obj
+<< /Filter /FlateDecode /Length 3081 >>
+stream
+xZ[o6~ϯ[]TfSX `h C[YJ%y29D#KAH;EW]xE+Qx[mV$ b0hY5#T~K׿\h-(# 2!v]뇦77W+͛uo577H;1z!b 1}cE siBa
+H˷E>~
+φWDksC~dBQ?3>u7oeuY7]R9pZG:D/ՄkfVh16Z|޺E=|ZMXXH"d֎9Q<4zf$KG2<2 8Dr hNXyK'̲QUŶzIAG7Ě5ӇfvEyjňzgci,XJa̻M/1zxBnSe5F/_L
+jIŢN; D>
+ɣ_/n`ÑCRDi֡4@ϤF>2;ϊMOup͚<B<yR+d E2!BBVN$tԊ3V% -G8c {kaDƟ?A@.!-DՎAHu V &hƀyBBA\qel
+#y
+EYzөq
+
+=Ȁ C^}.O
+HxoC
+A4/ҦIq!NB^
+\䐜9]9Y;gtGӴ^RXWe=G*Ah+$%<~|XrC GŰ6r0Id]'l6RT z 9MowLpOY?wM
+r]7tL҅Sj
+"+u#%(7;lΕB}9X R`++)ӶQ=aw<S= #/e?O׈ _% TRT8Q_}׺cHL 3Zu5!=ky w7%Fe}ؒ"0
+y׼0!04eY.H_elfn]fnł:17F;=޳/CCL羞SzciyT
+JP  NrTx#E}
+dcIh6F_=T֠J
+I%{c =a4&԰d?5go7x&Gx'7I=ćC<6xzGi!&,'eٓ11g!1f!O8ǾWˮ9`Vۡg?bػiھıZsmXϢa>{vIqC`̸ou2t>дCpZA0sp]%,%/qXB,aU@H`z<DC\7gk&@
+endstream
+endobj
+1915 0 obj
+<< /Type /Page /Contents 1916 0 R /Resources 1914 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1804 0 R /Annots 1957 0 R >>
+endobj
+1957 0 obj
+[ 1912 0 R 1913 0 R ]
+endobj
+1912 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 163.914 507.014 170.376 517.013 ]/A << /S /GoTo /D (Hfootnote.4) >> >>
+endobj
+1913 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 409.702 376.282 416.164 388.495 ]/A << /S /GoTo /D (Hfootnote.5) >> >>
+endobj
+1917 0 obj
+<< /D [ 1915 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+1918 0 obj
+<< /D [ 1915 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+1919 0 obj
+<< /D [ 1915 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+1920 0 obj
+<< /D [ 1915 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+1921 0 obj
+<< /D [ 1915 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+1922 0 obj
+<< /D [ 1915 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+1923 0 obj
+<< /D [ 1915 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+1924 0 obj
+<< /D [ 1915 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+1925 0 obj
+<< /D [ 1915 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+1926 0 obj
+<< /D [ 1915 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+1927 0 obj
+<< /D [ 1915 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+1928 0 obj
+<< /D [ 1915 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+1929 0 obj
+<< /D [ 1915 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+1930 0 obj
+<< /D [ 1915 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+1931 0 obj
+<< /D [ 1915 0 R /XYZ 81.077 626.366 null ] >>
+endobj
+1932 0 obj
+<< /D [ 1915 0 R /XYZ 81.077 615.407 null ] >>
+endobj
+1933 0 obj
+<< /D [ 1915 0 R /XYZ 81.077 604.448 null ] >>
+endobj
+1934 0 obj
+<< /D [ 1915 0 R /XYZ 81.077 501.833 null ] >>
+endobj
+1935 0 obj
+<< /D [ 1915 0 R /XYZ 81.077 490.874 null ] >>
+endobj
+1936 0 obj
+<< /D [ 1915 0 R /XYZ 81.077 479.915 null ] >>
+endobj
+1937 0 obj
+<< /D [ 1915 0 R /XYZ 81.077 468.956 null ] >>
+endobj
+1938 0 obj
+<< /D [ 1915 0 R /XYZ 81.077 457.997 null ] >>
+endobj
+1939 0 obj
+<< /D [ 1915 0 R /XYZ 81.077 447.038 null ] >>
+endobj
+1940 0 obj
+<< /D [ 1915 0 R /XYZ 81.077 436.08 null ] >>
+endobj
+1941 0 obj
+<< /D [ 1915 0 R /XYZ 81.077 425.121 null ] >>
+endobj
+1942 0 obj
+<< /D [ 1915 0 R /XYZ 81.077 414.162 null ] >>
+endobj
+1943 0 obj
+<< /D [ 1915 0 R /XYZ 81.077 325.494 null ] >>
+endobj
+1944 0 obj
+<< /D [ 1915 0 R /XYZ 81.077 314.535 null ] >>
+endobj
+1945 0 obj
+<< /D [ 1915 0 R /XYZ 81.077 303.576 null ] >>
+endobj
+1946 0 obj
+<< /D [ 1915 0 R /XYZ 81.077 292.618 null ] >>
+endobj
+1947 0 obj
+<< /D [ 1915 0 R /XYZ 81.077 281.659 null ] >>
+endobj
+1948 0 obj
+<< /D [ 1915 0 R /XYZ 81.077 270.7 null ] >>
+endobj
+1949 0 obj
+<< /D [ 1915 0 R /XYZ 81.077 259.741 null ] >>
+endobj
+1950 0 obj
+<< /D [ 1915 0 R /XYZ 81.077 248.782 null ] >>
+endobj
+1951 0 obj
+<< /D [ 1915 0 R /XYZ 81.077 237.823 null ] >>
+endobj
+1952 0 obj
+<< /D [ 1915 0 R /XYZ 81.077 183.028 null ] >>
+endobj
+1953 0 obj
+<< /D [ 1915 0 R /XYZ 81.077 172.07 null ] >>
+endobj
+1954 0 obj
+<< /D [ 1915 0 R /XYZ 81.077 141.185 null ] >>
+endobj
+1955 0 obj
+<< /D [ 1915 0 R /XYZ 94.613 110.351 null ] >>
+endobj
+1956 0 obj
+<< /D [ 1915 0 R /XYZ 94.613 100.887 null ] >>
+endobj
+1914 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F65 185 0 R /F20 186 0 R /F70 305 0 R /F22 459 0 R /F76 468 0 R /F53 203 0 R /F80 760 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+1960 0 obj
+<< /Filter /FlateDecode /Length 2138 >>
+stream
+xڭZMo8QE`{0{a`; C[hYHJ3[EʲĎK[Etٯ(|>k3&NtfFYfLi1G[
+<T<yB?ι -y7 =
+VFRHqH#&F_jQ>0 V aV2?d{CYC=yl9plKgFO,EEE
+Z%p/)O?sIT>沜"c˦.b >WiOٟD e~-Vx[0•- 86Y&\J"Iȥn]SVO<i"d?o&͉%ݲ-w}׿T.wD"MWadc>Zl]ѻ f#JIJG*UStrR,7:mM藾ZE[7w=`[4yN!YP)J]N5.0)D`tnؽtۢkr | ЅM
+Mh?RدhP(-sEӏ_jihRGsEaIG1B_Ԅa-QrTe[|~>)E u 
+ޗ^r u4bSમ:x*P+\Ӝp)XV]x@v}^ bq"Ѹɜo51@EyliV<< {n\iKPIMe w""vmnֻ
+WҘW9͠W%^" O{xir`nI+ahV)[?F ҤO_&4-j$;1ZF|F>5TƖNrbyͦ)}Iɥ i) T,U_! +|!ħkErq4_G;NY6
+endstream
+endobj
+1959 0 obj
+<< /Type /Page /Contents 1960 0 R /Resources 1958 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1804 0 R >>
+endobj
+1961 0 obj
+<< /D [ 1959 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+1962 0 obj
+<< /D [ 1959 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+1963 0 obj
+<< /D [ 1959 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+1964 0 obj
+<< /D [ 1959 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+1965 0 obj
+<< /D [ 1959 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+1966 0 obj
+<< /D [ 1959 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+1967 0 obj
+<< /D [ 1959 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+1968 0 obj
+<< /D [ 1959 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+1969 0 obj
+<< /D [ 1959 0 R /XYZ 81.077 643.302 null ] >>
+endobj
+1970 0 obj
+<< /D [ 1959 0 R /XYZ 81.077 632.344 null ] >>
+endobj
+1971 0 obj
+<< /D [ 1959 0 R /XYZ 81.077 601.459 null ] >>
+endobj
+1972 0 obj
+<< /D [ 1959 0 R /XYZ 81.077 590.5 null ] >>
+endobj
+1973 0 obj
+<< /D [ 1959 0 R /XYZ 81.077 559.616 null ] >>
+endobj
+1974 0 obj
+<< /D [ 1959 0 R /XYZ 81.077 548.657 null ] >>
+endobj
+1975 0 obj
+<< /D [ 1959 0 R /XYZ 81.077 537.698 null ] >>
+endobj
+1976 0 obj
+<< /D [ 1959 0 R /XYZ 81.077 526.74 null ] >>
+endobj
+1977 0 obj
+<< /D [ 1959 0 R /XYZ 81.077 515.781 null ] >>
+endobj
+1978 0 obj
+<< /D [ 1959 0 R /XYZ 81.077 504.822 null ] >>
+endobj
+1979 0 obj
+<< /D [ 1959 0 R /XYZ 81.077 493.863 null ] >>
+endobj
+1980 0 obj
+<< /D [ 1959 0 R /XYZ 81.077 482.904 null ] >>
+endobj
+1981 0 obj
+<< /D [ 1959 0 R /XYZ 81.077 416.154 null ] >>
+endobj
+1982 0 obj
+<< /D [ 1959 0 R /XYZ 81.077 405.195 null ] >>
+endobj
+1983 0 obj
+<< /D [ 1959 0 R /XYZ 81.077 394.236 null ] >>
+endobj
+1984 0 obj
+<< /D [ 1959 0 R /XYZ 81.077 383.278 null ] >>
+endobj
+1985 0 obj
+<< /D [ 1959 0 R /XYZ 81.077 372.319 null ] >>
+endobj
+1986 0 obj
+<< /D [ 1959 0 R /XYZ 81.077 361.36 null ] >>
+endobj
+1987 0 obj
+<< /D [ 1959 0 R /XYZ 81.077 350.401 null ] >>
+endobj
+1988 0 obj
+<< /D [ 1959 0 R /XYZ 81.077 339.442 null ] >>
+endobj
+1989 0 obj
+<< /D [ 1959 0 R /XYZ 81.077 298.595 null ] >>
+endobj
+1990 0 obj
+<< /D [ 1959 0 R /XYZ 81.077 287.636 null ] >>
+endobj
+1991 0 obj
+<< /D [ 1959 0 R /XYZ 81.077 276.677 null ] >>
+endobj
+1992 0 obj
+<< /D [ 1959 0 R /XYZ 81.077 265.718 null ] >>
+endobj
+1993 0 obj
+<< /D [ 1959 0 R /XYZ 81.077 224.872 null ] >>
+endobj
+1994 0 obj
+<< /D [ 1959 0 R /XYZ 81.077 213.913 null ] >>
+endobj
+1995 0 obj
+<< /D [ 1959 0 R /XYZ 81.077 202.954 null ] >>
+endobj
+1996 0 obj
+<< /D [ 1959 0 R /XYZ 81.077 191.995 null ] >>
+endobj
+1997 0 obj
+<< /D [ 1959 0 R /XYZ 81.077 181.036 null ] >>
+endobj
+1998 0 obj
+<< /D [ 1959 0 R /XYZ 81.077 170.077 null ] >>
+endobj
+1999 0 obj
+<< /D [ 1959 0 R /XYZ 81.077 159.118 null ] >>
+endobj
+2000 0 obj
+<< /D [ 1959 0 R /XYZ 81.077 148.159 null ] >>
+endobj
+2001 0 obj
+<< /D [ 1959 0 R /XYZ 81.077 137.2 null ] >>
+endobj
+2002 0 obj
+<< /D [ 1959 0 R /XYZ 81.077 126.241 null ] >>
+endobj
+1958 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F70 305 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+2005 0 obj
+<< /Filter /FlateDecode /Length 2788 >>
+stream
+xڭ[[o8~b^`]Tt3vPl%*K$'{HJ(rK$ȏB2xq^ͫޒdDR7wTY b"aI7_(e<N4l(/p6Ulh2[Xk[h0uWecK7
+"]KhTų%UQJwM''#
+A &_g [iVYr6\D Ϫ^g}mҶK=7e+Oiy T>ꩡto E\%+nY4ۦ7]M&ň^Ue,zzJfd<-ToE~|yz|c-1:o, P5$4TIF)^X03:[`PE2+'F1K|YͲe
+S ZW:"ʹ+'|b ;F}<L0bT:q_}>^2v|U1$|B8?T`c15۪*Zs֠E^fKa0W#Γ+/0X(A!تC!!g b5s(cq}RjVDaa\\q}sW\ sy8{\?S$s$y\9\EBL aCnGYfX(ݯs$ylgLU0Y8v>y9=CV(PHm8=CWd02rKqIp6a&Q_$}E5%d@ w2}l]i-
+Kt4̛ytQϿyyӶ?{q t8@we CX0y0Zg?ݵ]i8iEΓ0g"]U<&pOh)_Wmq å,!"WΧ0衏SgH_ Atzanp LrnyiBrvM[m&`I3h <i]wߑ>?`6#xyऊ1*6=LŪ*&ޕ.vWu0w"-0/>lX;G>ͼ9H9;K8$D=,"oǠsQ,̯zhUluy3Dwyݴ8ت8Z?2U)y-&,>hwe^j=8˲jSm>¹4= fHo2)aq)K ߙDٓ)-wWw5{dH&b:3^ΟOBߎfm6g)0FI 0'q"jreIwٙf|~PR
+mR`<+Й~6Yw%
+8;r,çpu &x@4<üjXKbHvDisH
+D U0?œ/= @q|AGBMhM2!jƬさWƖ;㨙Bl@˺oL)T4mZw߬W7kgPknhO$ A>5fNp&틴NAB \2S_xs6F(#sдf&/XS[I/8@0 La*v8b# A$u_κTGpv`cYu>MJj]}I|_!b~ AC [Ć.: 2#I^R v B|ttLz>tC[E^R-ԙpF< =w&z=I!@΋ !'n{U0I0:m M%HCc%X.;=Λctnsx.+ks5R_v;,><tFƆy*ӱ}QϝJ/}HdWHqK
+ E!~RXL|A|CDHqx6l? Qѻ{1A Q{ӲMgvZeT~s{uO}qO.]5_N7(sf
+endstream
+endobj
+2004 0 obj
+<< /Type /Page /Contents 2005 0 R /Resources 2003 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1804 0 R >>
+endobj
+2006 0 obj
+<< /D [ 2004 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+2007 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 730.974 null ] >>
+endobj
+2008 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 720.015 null ] >>
+endobj
+2009 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 709.056 null ] >>
+endobj
+2010 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 698.097 null ] >>
+endobj
+2011 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 687.138 null ] >>
+endobj
+2012 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 676.179 null ] >>
+endobj
+2013 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 665.22 null ] >>
+endobj
+2014 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 654.261 null ] >>
+endobj
+2015 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 643.302 null ] >>
+endobj
+2016 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 632.344 null ] >>
+endobj
+2017 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 621.385 null ] >>
+endobj
+2018 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 610.426 null ] >>
+endobj
+2019 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 599.467 null ] >>
+endobj
+2020 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 588.508 null ] >>
+endobj
+2021 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 577.549 null ] >>
+endobj
+2022 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 566.59 null ] >>
+endobj
+2023 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 555.631 null ] >>
+endobj
+2024 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 544.672 null ] >>
+endobj
+2025 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 533.713 null ] >>
+endobj
+2026 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 522.754 null ] >>
+endobj
+2027 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 511.796 null ] >>
+endobj
+2028 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 500.837 null ] >>
+endobj
+2029 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 489.878 null ] >>
+endobj
+2030 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 478.919 null ] >>
+endobj
+2031 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 467.96 null ] >>
+endobj
+2032 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 457.001 null ] >>
+endobj
+2033 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 446.042 null ] >>
+endobj
+2034 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 435.083 null ] >>
+endobj
+2035 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 424.124 null ] >>
+endobj
+2036 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 413.165 null ] >>
+endobj
+2037 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 402.207 null ] >>
+endobj
+2038 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 391.248 null ] >>
+endobj
+2039 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 380.289 null ] >>
+endobj
+2040 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 369.33 null ] >>
+endobj
+2041 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 358.371 null ] >>
+endobj
+2042 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 347.412 null ] >>
+endobj
+2043 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 294.61 null ] >>
+endobj
+2044 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 283.651 null ] >>
+endobj
+2045 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 272.692 null ] >>
+endobj
+2046 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 261.733 null ] >>
+endobj
+2047 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 185.021 null ] >>
+endobj
+2048 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 174.062 null ] >>
+endobj
+2049 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 163.103 null ] >>
+endobj
+2050 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 152.144 null ] >>
+endobj
+2051 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 141.185 null ] >>
+endobj
+2052 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 130.226 null ] >>
+endobj
+2053 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 119.268 null ] >>
+endobj
+2054 0 obj
+<< /D [ 2004 0 R /XYZ 81.077 108.309 null ] >>
+endobj
+2003 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R /F65 185 0 R /F70 305 0 R /F30 644 0 R /F27 642 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+2057 0 obj
+<< /Filter /FlateDecode /Length 2758 >>
+stream
+xڵZ[~_+
+li`A֖Jli";3YEh{-s}%xxd6{ee/7giAoaLjDL
+2gٿݶXP?g$kߋ04 xmu([D_Kӂy;7SzfN!"Ty \#
+2čxwXf i)3V $0`af,8qxb6S+11&T?cjWn[>,]Wa_-Wn.s2\:ip pr渷, f1Y T x<P~8?#AcZ/DxQ'cw#ojԺ7+} Xa-ZI|n^SXLTVا%DWʚ_Ω*"I4$hپmU=M +\6Hݷߗ+dQXR2֎iyn>M]-T@{Ir sو˗ OG`_++ɕZBBXK$ВPwŲ5۸>kϸ^a% 1NXcvh+8~1B#_ VF_OV
+bbܕde !C\[ FOrlnMBQlurA~Q'cDm|y;鐡, zo*9”8 zOo*2@MEP}TSM!iz?o
+ "`M+DXnE`S7%g21q6ZĈx L iQZD}. *1:ج+4%<E;d/Z:xy*׈q|[Ze A<&**%[8` hc( d^WGC9nj^ K[.yi]]rlB)ː
+O$'͚!1QUO01Ws}9*mSwJ
+
+endstream
+endobj
+2056 0 obj
+<< /Type /Page /Contents 2057 0 R /Resources 2055 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1804 0 R >>
+endobj
+2058 0 obj
+<< /D [ 2056 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+2059 0 obj
+<< /D [ 2056 0 R /XYZ 81.077 742.929 null ] >>
+endobj
+2060 0 obj
+<< /D [ 2056 0 R /XYZ 81.077 731.97 null ] >>
+endobj
+2061 0 obj
+<< /D [ 2056 0 R /XYZ 81.077 691.123 null ] >>
+endobj
+2062 0 obj
+<< /D [ 2056 0 R /XYZ 81.077 638.321 null ] >>
+endobj
+2063 0 obj
+<< /D [ 2056 0 R /XYZ 81.077 585.519 null ] >>
+endobj
+2064 0 obj
+<< /D [ 2056 0 R /XYZ 81.077 569.579 null ] >>
+endobj
+2065 0 obj
+<< /D [ 2056 0 R /XYZ 81.077 553.639 null ] >>
+endobj
+2066 0 obj
+<< /D [ 2056 0 R /XYZ 81.077 504.822 null ] >>
+endobj
+2067 0 obj
+<< /D [ 2056 0 R /XYZ 81.077 493.863 null ] >>
+endobj
+2068 0 obj
+<< /D [ 2056 0 R /XYZ 81.077 482.904 null ] >>
+endobj
+2069 0 obj
+<< /D [ 2056 0 R /XYZ 81.077 471.945 null ] >>
+endobj
+2070 0 obj
+<< /D [ 2056 0 R /XYZ 81.077 460.986 null ] >>
+endobj
+2071 0 obj
+<< /D [ 2056 0 R /XYZ 81.077 450.027 null ] >>
+endobj
+2072 0 obj
+<< /D [ 2056 0 R /XYZ 81.077 425.121 null ] >>
+endobj
+2073 0 obj
+<< /D [ 2056 0 R /XYZ 81.077 414.162 null ] >>
+endobj
+2074 0 obj
+<< /D [ 2056 0 R /XYZ 81.077 403.203 null ] >>
+endobj
+2075 0 obj
+<< /D [ 2056 0 R /XYZ 81.077 348.408 null ] >>
+endobj
+2076 0 obj
+<< /D [ 2056 0 R /XYZ 81.077 337.449 null ] >>
+endobj
+2077 0 obj
+<< /D [ 2056 0 R /XYZ 81.077 326.49 null ] >>
+endobj
+2078 0 obj
+<< /D [ 2056 0 R /XYZ 81.077 315.532 null ] >>
+endobj
+2079 0 obj
+<< /D [ 2056 0 R /XYZ 81.077 304.573 null ] >>
+endobj
+2080 0 obj
+<< /D [ 2056 0 R /XYZ 81.077 293.614 null ] >>
+endobj
+2081 0 obj
+<< /D [ 2056 0 R /XYZ 81.077 192.991 null ] >>
+endobj
+2082 0 obj
+<< /D [ 2056 0 R /XYZ 81.077 182.032 null ] >>
+endobj
+2083 0 obj
+<< /D [ 2056 0 R /XYZ 81.077 171.073 null ] >>
+endobj
+2084 0 obj
+<< /D [ 2056 0 R /XYZ 81.077 160.114 null ] >>
+endobj
+2085 0 obj
+<< /D [ 2056 0 R /XYZ 81.077 149.155 null ] >>
+endobj
+2086 0 obj
+<< /D [ 2056 0 R /XYZ 81.077 138.197 null ] >>
+endobj
+2087 0 obj
+<< /D [ 2056 0 R /XYZ 81.077 127.238 null ] >>
+endobj
+2088 0 obj
+<< /D [ 2056 0 R /XYZ 81.077 116.279 null ] >>
+endobj
+2089 0 obj
+<< /D [ 2056 0 R /XYZ 81.077 105.32 null ] >>
+endobj
+2090 0 obj
+<< /D [ 2056 0 R /XYZ 81.077 94.361 null ] >>
+endobj
+2091 0 obj
+<< /D [ 2056 0 R /XYZ 81.077 83.402 null ] >>
+endobj
+2055 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F30 644 0 R /F68 189 0 R /F64 183 0 R /F20 186 0 R /F70 305 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+2094 0 obj
+<< /Filter /FlateDecode /Length 2560 >>
+stream
+xڽZo6_hⷔC1;mwS:t",<4,:ۜi{,}$EM-2)n‡dA:#\/$Qtq]'j?O,;,j<-֍˧7oW+|}t{׎x~Hʒ9I9D#Y?P.޽W{P7OɼRBe2)VM6^qϏV7ªصL)2B8w-r]nMݕMݹژU ݏLnJ*ލ{ <[+YB$F
+RDM9ѩ WnV*`A~.zo6ߔ-i4M #)ӣe LyHm4QŒa첵eJxhH30Ch9ӄdI6ș%ɩ4!A2w[<礅bJx<Gy`<d%RP9hK&ħ=}G`,,#SK<r,Gֻ?#k 磮<*C&;C&Jj@6MH2ɺPG:kLNdݻj.T6Yr,#<Ģ3>#g}[>bFvRs":Yq
+oQhW6 sr}RѸD*!?XVYvJrss{HV H*IA5f5qs¼Cd'\~rYT{] BP5]lY}ΆS> ruR
+
+ۨɯmY?`ZS^m TUk@[3fiTMT۸skuof~4vf~{SIgyӝ; ts9ǴD4.]WdqRk}՗ЩkzlL$N)u]8*M|<994x
+Iܔ1
+ *@6Q51D~+7gw.!*Mlz׺Js׌OBL-5 U{84lJ'qZُlT);!>Wa念f,Nצh\ǭ=pp^$'*"6 ~qv?{jfmt0:cP) 82%K}%B$Ў} aݛ7
+endstream
+endobj
+2093 0 obj
+<< /Type /Page /Contents 2094 0 R /Resources 2092 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1804 0 R >>
+endobj
+2095 0 obj
+<< /D [ 2093 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+2096 0 obj
+<< /D [ 2093 0 R /XYZ 81.077 743.475 null ] >>
+endobj
+2097 0 obj
+<< /D [ 2093 0 R /XYZ 81.077 732.516 null ] >>
+endobj
+2098 0 obj
+<< /D [ 2093 0 R /XYZ 81.077 721.557 null ] >>
+endobj
+2099 0 obj
+<< /D [ 2093 0 R /XYZ 81.077 710.598 null ] >>
+endobj
+2100 0 obj
+<< /D [ 2093 0 R /XYZ 81.077 699.639 null ] >>
+endobj
+2101 0 obj
+<< /D [ 2093 0 R /XYZ 81.077 688.68 null ] >>
+endobj
+2102 0 obj
+<< /D [ 2093 0 R /XYZ 81.077 677.721 null ] >>
+endobj
+2103 0 obj
+<< /D [ 2093 0 R /XYZ 81.077 666.762 null ] >>
+endobj
+2104 0 obj
+<< /D [ 2093 0 R /XYZ 81.077 655.803 null ] >>
+endobj
+2105 0 obj
+<< /D [ 2093 0 R /XYZ 81.077 644.844 null ] >>
+endobj
+2106 0 obj
+<< /D [ 2093 0 R /XYZ 81.077 617.78 null ] >>
+endobj
+2107 0 obj
+<< /D [ 2093 0 R /XYZ 81.077 606.821 null ] >>
+endobj
+2108 0 obj
+<< /D [ 2093 0 R /XYZ 81.077 567.802 null ] >>
+endobj
+2109 0 obj
+<< /D [ 2093 0 R /XYZ 81.077 506.319 null ] >>
+endobj
+2110 0 obj
+<< /D [ 2093 0 R /XYZ 81.077 478.519 null ] >>
+endobj
+2111 0 obj
+<< /D [ 2093 0 R /XYZ 81.077 467.56 null ] >>
+endobj
+2112 0 obj
+<< /D [ 2093 0 R /XYZ 81.077 382.167 null ] >>
+endobj
+2113 0 obj
+<< /D [ 2093 0 R /XYZ 81.077 327.227 null ] >>
+endobj
+2114 0 obj
+<< /D [ 2093 0 R /XYZ 81.077 282.586 null ] >>
+endobj
+2115 0 obj
+<< /D [ 2093 0 R /XYZ 81.077 237.944 null ] >>
+endobj
+2116 0 obj
+<< /D [ 2093 0 R /XYZ 81.077 226.985 null ] >>
+endobj
+2117 0 obj
+<< /D [ 2093 0 R /XYZ 81.077 216.026 null ] >>
+endobj
+2118 0 obj
+<< /D [ 2093 0 R /XYZ 81.077 205.067 null ] >>
+endobj
+2119 0 obj
+<< /D [ 2093 0 R /XYZ 81.077 177.267 null ] >>
+endobj
+2120 0 obj
+<< /D [ 2093 0 R /XYZ 81.077 166.308 null ] >>
+endobj
+2121 0 obj
+<< /D [ 2093 0 R /XYZ 81.077 155.349 null ] >>
+endobj
+2122 0 obj
+<< /D [ 2093 0 R /XYZ 81.077 144.39 null ] >>
+endobj
+2123 0 obj
+<< /D [ 2093 0 R /XYZ 81.077 133.431 null ] >>
+endobj
+2124 0 obj
+<< /D [ 2093 0 R /XYZ 81.077 122.473 null ] >>
+endobj
+2125 0 obj
+<< /D [ 2093 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+2126 0 obj
+<< /D [ 2093 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+2127 0 obj
+<< /D [ 2093 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+2128 0 obj
+<< /D [ 2093 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+2092 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R /F32 176 0 R /F27 642 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+2131 0 obj
+<< /Filter /FlateDecode /Length 2632 >>
+stream
+xڭZ[o~_a/p#^E(AE6i-Em5\b{]a/DqooFEC~?}N JlqA8A4^H~Ty—EŲ۹k"j[TUQmzsrR}Eyݹۢ,U^WWD_D,ɴ˕Ktu w?weHtJ1cSVu+i{$B y4#agP<^.}"Pֿ1<s8'Sۧ 
+/ @Y4Qk0Ъ ׇ4U]y,k~az^֭9)i0Ynvv[*yםD ee[2h3,#䂡DbJH8"Q
+ 8aAPa iKϷn&S0%%&06LPN5.bAj.ka{ =1kJa&󥿎ުl i:P}&tZy#:oO^BrD٨OZ+>tW7ůuevv^J3}0ژ!*ŀJz1 4 T\` A b0GM}4b. #%Ru뎭Z垫\w%0O/Af8A<mP}ogMx;Ӛ] _n4ɐ*{X
+O悳ˏjS7*X_V cFvoyUk{3W]ǃA<ivQ73#fGgAن<-ҎͬKQШ 6ef~)(5SfNfSvN`Cq2F72ȧp<a۴RO顩;wjV5]ـl;<p$jDw3d<DJtOZߕUӈYڕ^mq8-$01؊K!X^Uu[yeMGY*ofޛ{u؉+%A)d<R8i{Ȫ۱p8BQ4QsݙS8+@\J1{Ծ"$A t<Bk[<$CQ,I&mm>ϗ`!)Ѧ5EB.TaOTڤj-k
+USc.5>"7A&kiQfR6 -)ᾘ ND}*?oxe8`r ׍}{锻#z "ALuxY)Qgl;¤ˏ/^6oUtE];n#y74&C16V {- JwNA]{Ǽu/SBI~!"l<,\MO~cAdƓ6*qpBQսg1ӗpxo#h1k}2p{J5I"_$0$p~Tl%i<’8O~njr1+˗װmvP
+̄q"E&dou1ݧ{Cݲ"fuz~ VBr_Eg]Sܑ?!u'|yUNw҈
+}o/tO+--㕭KM[{O܅JKvw%R>n՜
+8v>u~',0Rɲ QQ[ls]@,l'Y|z!pp().+SsHH45;NzM}3' !U`# }G1¦3=/% U IC5i3/s$) mz!# Y43a樠=* AI eT{~1蒫=0u+MF Iݟy*1Iaj՗ޛk-~U;L2!8F"h kyҿAՌW3pxVuS^#{|o'r(XFO~xblj=O)4-=QYgFc3n#  eBUmڐH l5$GBοم}f(t57?Z>;>_/n”
+XH$+{q(f}WL*X!o
+Wι2ɷCu1!9OH 3xI(JaFc}m)ҴE]\FD!E'tzapOZ/(׾7y8ԭi{o\rxLc%_, IOت"PsaL)PΙ'Tt4GjDrӨR=fUƁ`-.wG6)>
+endstream
+endobj
+2130 0 obj
+<< /Type /Page /Contents 2131 0 R /Resources 2129 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1804 0 R >>
+endobj
+2132 0 obj
+<< /D [ 2130 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+2133 0 obj
+<< /D [ 2130 0 R /XYZ 81.077 730.974 null ] >>
+endobj
+2134 0 obj
+<< /D [ 2130 0 R /XYZ 81.077 720.015 null ] >>
+endobj
+2135 0 obj
+<< /D [ 2130 0 R /XYZ 81.077 709.056 null ] >>
+endobj
+2136 0 obj
+<< /D [ 2130 0 R /XYZ 81.077 693.116 null ] >>
+endobj
+2137 0 obj
+<< /D [ 2130 0 R /XYZ 81.077 682.157 null ] >>
+endobj
+2138 0 obj
+<< /D [ 2130 0 R /XYZ 81.077 671.198 null ] >>
+endobj
+2139 0 obj
+<< /D [ 2130 0 R /XYZ 81.077 660.239 null ] >>
+endobj
+2140 0 obj
+<< /D [ 2130 0 R /XYZ 81.077 649.28 null ] >>
+endobj
+2141 0 obj
+<< /D [ 2130 0 R /XYZ 81.077 638.321 null ] >>
+endobj
+2142 0 obj
+<< /D [ 2130 0 R /XYZ 81.077 627.362 null ] >>
+endobj
+2143 0 obj
+<< /D [ 2130 0 R /XYZ 81.077 572.568 null ] >>
+endobj
+2144 0 obj
+<< /D [ 2130 0 R /XYZ 81.077 561.609 null ] >>
+endobj
+2145 0 obj
+<< /D [ 2130 0 R /XYZ 81.077 550.65 null ] >>
+endobj
+2146 0 obj
+<< /D [ 2130 0 R /XYZ 81.077 539.691 null ] >>
+endobj
+2147 0 obj
+<< /D [ 2130 0 R /XYZ 81.077 528.732 null ] >>
+endobj
+2148 0 obj
+<< /D [ 2130 0 R /XYZ 81.077 517.773 null ] >>
+endobj
+2149 0 obj
+<< /D [ 2130 0 R /XYZ 81.077 506.814 null ] >>
+endobj
+2150 0 obj
+<< /D [ 2130 0 R /XYZ 81.077 454.012 null ] >>
+endobj
+2151 0 obj
+<< /D [ 2130 0 R /XYZ 81.077 443.053 null ] >>
+endobj
+41 0 obj
+<< /D [ 2130 0 R /XYZ 79.37 419.591 null ] >>
+endobj
+2152 0 obj
+<< /D [ 2130 0 R /XYZ 81.077 324.1 null ] >>
+endobj
+2153 0 obj
+<< /D [ 2130 0 R /XYZ 81.077 313.141 null ] >>
+endobj
+2154 0 obj
+<< /D [ 2130 0 R /XYZ 81.077 236.429 null ] >>
+endobj
+2155 0 obj
+<< /D [ 2130 0 R /XYZ 81.077 225.47 null ] >>
+endobj
+2156 0 obj
+<< /D [ 2130 0 R /XYZ 81.077 214.511 null ] >>
+endobj
+2157 0 obj
+<< /D [ 2130 0 R /XYZ 81.077 203.552 null ] >>
+endobj
+2158 0 obj
+<< /D [ 2130 0 R /XYZ 81.077 162.705 null ] >>
+endobj
+2159 0 obj
+<< /D [ 2130 0 R /XYZ 81.077 151.746 null ] >>
+endobj
+2160 0 obj
+<< /D [ 2130 0 R /XYZ 81.077 140.787 null ] >>
+endobj
+2161 0 obj
+<< /D [ 2130 0 R /XYZ 81.077 129.829 null ] >>
+endobj
+2129 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+2164 0 obj
+<< /Filter /FlateDecode /Length 2188 >>
+stream
+xZߏ~@^hoRr-EC0m+K>I>g{DzmiɏƓO~y>dDR'; xB&*ALM$K2o'~16m7=fYͫҽW+[?)>7>I4\_C:/%
+ICPYS5L:0Fª@RO8J4aHK$ " uxs0hB2N1R, џy.yY䥙%EP5+k ]Zu첶]lc[i1v++Ek$ Z۴dCoS÷ !m-[ڴɝ }# Me*]a>28<VpĈ8*p>WuYUuik^%AXU0CLAr**5 ў̠Ѯ*d/}ʬM#P=hD@voJ`=5<TwO9%=sS!O, ~qò,8t q6wS
+W4sMEA֯)`JAU~q^2V MGQQ_kG⒇
+i`&eT-@5H7fBw
+%| vdїeO:}~#^u4]CB܆:@_aŪo3 %E|7iθʋX@X He K.Djy S¬~+a 
+e - ?q5@_}ۀm2;d[bedEưJ`DEN(3Bl9,vuBp6aWfh^'2T>8zCE`;m e1eaښl H :DDE
+endstream
+endobj
+2163 0 obj
+<< /Type /Page /Contents 2164 0 R /Resources 2162 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1804 0 R >>
+endobj
+2165 0 obj
+<< /D [ 2163 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+2166 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 754.963 null ] >>
+endobj
+2167 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 744.004 null ] >>
+endobj
+2168 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 733.045 null ] >>
+endobj
+2169 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 722.086 null ] >>
+endobj
+2170 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 711.127 null ] >>
+endobj
+2171 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 700.168 null ] >>
+endobj
+2172 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 671.434 null ] >>
+endobj
+2173 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 660.476 null ] >>
+endobj
+2174 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 649.517 null ] >>
+endobj
+2175 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 638.558 null ] >>
+endobj
+2176 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 627.599 null ] >>
+endobj
+2177 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 616.64 null ] >>
+endobj
+2178 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 587.906 null ] >>
+endobj
+2179 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 541.397 null ] >>
+endobj
+2180 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 530.438 null ] >>
+endobj
+2181 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 495.885 null ] >>
+endobj
+2182 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 480.102 null ] >>
+endobj
+2183 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 469.143 null ] >>
+endobj
+2184 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 458.184 null ] >>
+endobj
+2185 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 447.225 null ] >>
+endobj
+2186 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 436.267 null ] >>
+endobj
+2187 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 425.308 null ] >>
+endobj
+2188 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 414.349 null ] >>
+endobj
+2189 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 403.39 null ] >>
+endobj
+2190 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 392.431 null ] >>
+endobj
+2191 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 381.472 null ] >>
+endobj
+2192 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 370.513 null ] >>
+endobj
+2193 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 359.554 null ] >>
+endobj
+2194 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 348.595 null ] >>
+endobj
+2195 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 337.636 null ] >>
+endobj
+2196 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 326.677 null ] >>
+endobj
+2197 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 315.719 null ] >>
+endobj
+2198 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 304.76 null ] >>
+endobj
+2199 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 293.801 null ] >>
+endobj
+2200 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 282.842 null ] >>
+endobj
+2201 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 271.883 null ] >>
+endobj
+2202 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 260.924 null ] >>
+endobj
+2203 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 249.965 null ] >>
+endobj
+2204 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 217.72 null ] >>
+endobj
+2205 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 206.761 null ] >>
+endobj
+2206 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 195.802 null ] >>
+endobj
+2207 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 141.244 null ] >>
+endobj
+2208 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 130.285 null ] >>
+endobj
+2209 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 119.326 null ] >>
+endobj
+2210 0 obj
+<< /D [ 2163 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+2162 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R /F70 305 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+2213 0 obj
+<< /Filter /FlateDecode /Length 3029 >>
+stream
+xڵn|<t ،xށ/nVJI{| ΐԅl:Jr3ùEt{~}?"!bJ\GtA/tBЊHыſ6whsu{jP^^xStSv8}j@EgFy֗etSЮ9ڹdSSͶ@ޔ=7ךh-|j'P*BDT!k~J1of$$  (+dZZ7auY>]`92D'󷫔S͉b' G2*[ ih} Gy^D28SOquPXE
+Ɯەn|>]J[GGaqW}Ѿimk'Ͼ?9ӖiׄJ:oCibZQ#jeӪ 1NHD' ArD+/0[ T'"p>E +Xl<u=j4o涹Ln~Xy6mI*ϟ!Cn~͡|-b▿ۄH *>Ϛ<sͭe
+o)zi{2K")"%qqxHY?bY ޥ(Ƞ<ƃ%J wbxe.@͍ 4^ИJ+ly\@ZYc[[nv4:xݏ#3%k) I\  Ry:cRb] JG6p302DVěd/]N23228ԭ}]fۊ;n>ƭEDTcuC}_r+J%*BZ<&2$BA~ٔfUaagKaj7#+>&DRSy(RD>Ч.!
+WRS5_ٿ<Ҩ١`$!Btv:%K%D(Eb98%I !$N
+, +4m:onhbD5dc &NXT>v>< c3
+$TH!ݙ " I"Ol@)d|҇_31FoL 'F`ޕ=oVym6tg},c٘d?-ard?5kTkc VC_4^-3*%N Kf]a,-_b #;شs AvYfX4ѼBKɲQtܕi)ڟ=/7?d|޲x~ƽv
+ݎ$65#E@(j_Ô]Nl
+
+tڐh^;(z(m~ܗMߛӬ>R_|MG#@tiX.WSХaA׃~'=y(SKk6e4,zϴ1j5Em-S,ll}ws
+$ϾtD>J ;Oz Ȓ%]uEi";[=XPdpú[!S۞k۶7֤Zv/yy2pɳƎ4\)=uNZ+)ƐF#_$}Z4cW<*dLQ{(3לbM}9vwaN<ڜ>Nt<`Ӧ|L];h7慰oh.X<8XugXX6A6G=6ŻZ"$JZ"t8s.<XUzl% -(BT 2D ^:L? ;>ZgT YS9TxoThpد6ܸ
+Tqy8j%toj(f \ 9a#" W̧m'KϫaŰ3'T+>x^W+j kWLؾKL E=r_o}m+D m w\DO&~.1Qj=nF'=mA\0'l:f _ٓ`sYʲwgӥdR ˂ĥɘ&o_Ja/E?w|P`7w8)[6±RoYݷn.&7 *QOP:o
+endstream
+endobj
+2212 0 obj
+<< /Type /Page /Contents 2213 0 R /Resources 2211 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2253 0 R >>
+endobj
+2214 0 obj
+<< /D [ 2212 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+2215 0 obj
+<< /D [ 2212 0 R /XYZ 81.077 730.974 null ] >>
+endobj
+2216 0 obj
+<< /D [ 2212 0 R /XYZ 81.077 720.015 null ] >>
+endobj
+2217 0 obj
+<< /D [ 2212 0 R /XYZ 81.077 643.302 null ] >>
+endobj
+2218 0 obj
+<< /D [ 2212 0 R /XYZ 81.077 632.344 null ] >>
+endobj
+2219 0 obj
+<< /D [ 2212 0 R /XYZ 81.077 579.542 null ] >>
+endobj
+2220 0 obj
+<< /D [ 2212 0 R /XYZ 81.077 568.583 null ] >>
+endobj
+2221 0 obj
+<< /D [ 2212 0 R /XYZ 81.077 557.624 null ] >>
+endobj
+2222 0 obj
+<< /D [ 2212 0 R /XYZ 81.077 546.665 null ] >>
+endobj
+2223 0 obj
+<< /D [ 2212 0 R /XYZ 81.077 535.706 null ] >>
+endobj
+2224 0 obj
+<< /D [ 2212 0 R /XYZ 81.077 524.747 null ] >>
+endobj
+2225 0 obj
+<< /D [ 2212 0 R /XYZ 81.077 513.788 null ] >>
+endobj
+2226 0 obj
+<< /D [ 2212 0 R /XYZ 81.077 502.829 null ] >>
+endobj
+2227 0 obj
+<< /D [ 2212 0 R /XYZ 81.077 471.945 null ] >>
+endobj
+2228 0 obj
+<< /D [ 2212 0 R /XYZ 81.077 460.986 null ] >>
+endobj
+2229 0 obj
+<< /D [ 2212 0 R /XYZ 81.077 450.027 null ] >>
+endobj
+2230 0 obj
+<< /D [ 2212 0 R /XYZ 81.077 439.068 null ] >>
+endobj
+2231 0 obj
+<< /D [ 2212 0 R /XYZ 81.077 428.109 null ] >>
+endobj
+2232 0 obj
+<< /D [ 2212 0 R /XYZ 81.077 417.151 null ] >>
+endobj
+2233 0 obj
+<< /D [ 2212 0 R /XYZ 81.077 406.192 null ] >>
+endobj
+2234 0 obj
+<< /D [ 2212 0 R /XYZ 81.077 395.233 null ] >>
+endobj
+2235 0 obj
+<< /D [ 2212 0 R /XYZ 81.077 384.274 null ] >>
+endobj
+2236 0 obj
+<< /D [ 2212 0 R /XYZ 81.077 373.315 null ] >>
+endobj
+2237 0 obj
+<< /D [ 2212 0 R /XYZ 81.077 357.375 null ] >>
+endobj
+2238 0 obj
+<< /D [ 2212 0 R /XYZ 81.077 346.416 null ] >>
+endobj
+2239 0 obj
+<< /D [ 2212 0 R /XYZ 81.077 335.457 null ] >>
+endobj
+2240 0 obj
+<< /D [ 2212 0 R /XYZ 81.077 324.498 null ] >>
+endobj
+2241 0 obj
+<< /D [ 2212 0 R /XYZ 81.077 313.539 null ] >>
+endobj
+2242 0 obj
+<< /D [ 2212 0 R /XYZ 81.077 258.745 null ] >>
+endobj
+2243 0 obj
+<< /D [ 2212 0 R /XYZ 81.077 247.786 null ] >>
+endobj
+2244 0 obj
+<< /D [ 2212 0 R /XYZ 81.077 236.827 null ] >>
+endobj
+2245 0 obj
+<< /D [ 2212 0 R /XYZ 81.077 225.868 null ] >>
+endobj
+2246 0 obj
+<< /D [ 2212 0 R /XYZ 81.077 214.909 null ] >>
+endobj
+2247 0 obj
+<< /D [ 2212 0 R /XYZ 81.077 203.95 null ] >>
+endobj
+2248 0 obj
+<< /D [ 2212 0 R /XYZ 81.077 192.991 null ] >>
+endobj
+2249 0 obj
+<< /D [ 2212 0 R /XYZ 81.077 182.032 null ] >>
+endobj
+2250 0 obj
+<< /D [ 2212 0 R /XYZ 81.077 105.32 null ] >>
+endobj
+2251 0 obj
+<< /D [ 2212 0 R /XYZ 81.077 94.361 null ] >>
+endobj
+2252 0 obj
+<< /D [ 2212 0 R /XYZ 81.077 83.402 null ] >>
+endobj
+2211 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F65 185 0 R /F20 186 0 R /F77 542 0 R /F68 189 0 R /F64 183 0 R /F70 305 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+2257 0 obj
+<< /Filter /FlateDecode /Length 2033 >>
+stream
+xZ[oF~ 
+'s-)Z6t7r4⨾Y=ɏ;9J4$4W_oiHY&xr`pMXb5$F3B5Knɯ)~)< 2$Z) J1MPdegD,FgB6ʾlٕx[Ey>K}˻b<3ͪX<G
+AWu.]u{O)jjcu0+n4$"FO
+-@mXJVlQF{Ze$1 I3тXҼ8o3uR@* :e%#ֆ(x0e<$sPbf<:mub!.a KfҰsgFR2ʐ}n\~wWeޡXC YW̺Ug&]i4a<JHOHX4F+`P8%+I8 QY&ЯoBXR3foR BII9#Bd.ާW)7
+T/SE(Ct>_@ioQ>1?P7^b 3+R2\Iƃ]rhA
+WSFi4h{\1;pG;FaZi C2ݧKWWW l&C'a4.'LN' *7Fhg!y.ofa0Ur"4<>} 2}|}^6+c\[iMX܄;;r -B(>o&SX跻|W_ P~}_2}$X/F"k9t9"9VNјXдWǖ)qaяz`0aP,k~8xdl{?^|:j' 
+~o)`bV%\g}щ2jT<DBl 1*ѷH
+pN/K?M{K]7к~|ՌG슥x< pP][pa`ǎK*t \vԏ^tP)Ӯ[KvjZo}2
+U%hV
+endstream
+endobj
+2256 0 obj
+<< /Type /Page /Contents 2257 0 R /Resources 2255 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2253 0 R /Annots 2315 0 R >>
+endobj
+2315 0 obj
+[ 2254 0 R ]
+endobj
+2254 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 408.109 226.565 414.571 239.055 ]/A << /S /GoTo /D (Hfootnote.6) >> >>
+endobj
+2258 0 obj
+<< /D [ 2256 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+2259 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+2260 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+2261 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+2262 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+2263 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+2264 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+2265 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+2266 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+2267 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+2268 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+2269 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+2270 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+2271 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+2272 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 626.366 null ] >>
+endobj
+2273 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 615.407 null ] >>
+endobj
+2274 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 604.448 null ] >>
+endobj
+2275 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 593.489 null ] >>
+endobj
+2276 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 582.53 null ] >>
+endobj
+2277 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 571.571 null ] >>
+endobj
+2278 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 560.613 null ] >>
+endobj
+2279 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 549.654 null ] >>
+endobj
+2280 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 538.695 null ] >>
+endobj
+2281 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 527.736 null ] >>
+endobj
+2282 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 516.777 null ] >>
+endobj
+2283 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 505.818 null ] >>
+endobj
+2284 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 494.859 null ] >>
+endobj
+2285 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 483.9 null ] >>
+endobj
+2286 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 472.941 null ] >>
+endobj
+2287 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 461.982 null ] >>
+endobj
+2288 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 451.023 null ] >>
+endobj
+2289 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 440.065 null ] >>
+endobj
+2290 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 429.106 null ] >>
+endobj
+2291 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 418.147 null ] >>
+endobj
+2292 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 407.188 null ] >>
+endobj
+2293 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 396.229 null ] >>
+endobj
+2294 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 385.27 null ] >>
+endobj
+2295 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 354.386 null ] >>
+endobj
+2296 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 343.427 null ] >>
+endobj
+2297 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 332.468 null ] >>
+endobj
+2298 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 321.509 null ] >>
+endobj
+2299 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 310.55 null ] >>
+endobj
+2300 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 299.591 null ] >>
+endobj
+2301 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 288.632 null ] >>
+endobj
+2302 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 277.674 null ] >>
+endobj
+2303 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 266.715 null ] >>
+endobj
+2304 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 223.875 null ] >>
+endobj
+2305 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 212.916 null ] >>
+endobj
+2306 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 201.957 null ] >>
+endobj
+2307 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 190.999 null ] >>
+endobj
+2308 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 180.04 null ] >>
+endobj
+2309 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 169.081 null ] >>
+endobj
+2310 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 158.122 null ] >>
+endobj
+2311 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 147.163 null ] >>
+endobj
+2312 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 136.204 null ] >>
+endobj
+2313 0 obj
+<< /D [ 2256 0 R /XYZ 81.077 125.245 null ] >>
+endobj
+2314 0 obj
+<< /D [ 2256 0 R /XYZ 94.613 94.411 null ] >>
+endobj
+2255 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F22 459 0 R /F76 468 0 R /F53 203 0 R /F80 760 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+2319 0 obj
+<< /Filter /FlateDecode /Length 1771 >>
+stream
+xڭ[o6+<tlay%*6tش#TWdAQcǴ׋%O߁*-Gx%/Ż"qtqA!<"@ A/‚Әwy~(@,0ń0~}}]I^O+z㧶PmPMMozǶ m 1aD0n1ՊydQ%fJ@l5v4z\\?:C߄3Mn
+7-n֙yڷ7U˲X58Jv-ԇdra뇈A#Nnmjv" ñ+{c_22$egZ5M2?\]2<~34*g*k [bZ7}1[kkc:t{7㎮Nj;*G#)\GxGڇ6FS0:ݷ÷j.n"f:L%m7QdCn:L[
+Rh@)y1#Hcv@QM,
+"LWә}9NI!yݿ-oI dg/6S[]wk{ٓ 1<;^Z"
+endstream
+endobj
+2318 0 obj
+<< /Type /Page /Contents 2319 0 R /Resources 2317 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2253 0 R >>
+endobj
+2320 0 obj
+<< /D [ 2318 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+2321 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+2322 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+2323 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+2324 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+2325 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+2326 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+2327 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+2328 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+2329 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+2330 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+2331 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 639.317 null ] >>
+endobj
+2332 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 628.358 null ] >>
+endobj
+2333 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 617.4 null ] >>
+endobj
+2334 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 606.441 null ] >>
+endobj
+2335 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 595.482 null ] >>
+endobj
+2336 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 584.523 null ] >>
+endobj
+2337 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 573.564 null ] >>
+endobj
+2338 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 562.605 null ] >>
+endobj
+2339 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 551.646 null ] >>
+endobj
+2340 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 540.687 null ] >>
+endobj
+2341 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 529.728 null ] >>
+endobj
+2342 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 518.769 null ] >>
+endobj
+2343 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 507.811 null ] >>
+endobj
+2344 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 496.852 null ] >>
+endobj
+2345 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 485.893 null ] >>
+endobj
+2346 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 474.934 null ] >>
+endobj
+45 0 obj
+<< /D [ 2318 0 R /XYZ 79.37 449.479 null ] >>
+endobj
+2347 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 381.136 null ] >>
+endobj
+2348 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 370.177 null ] >>
+endobj
+2349 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 359.218 null ] >>
+endobj
+2350 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 348.259 null ] >>
+endobj
+2351 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 332.319 null ] >>
+endobj
+2352 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 321.36 null ] >>
+endobj
+2353 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 281.51 null ] >>
+endobj
+2354 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 255.607 null ] >>
+endobj
+2355 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 244.648 null ] >>
+endobj
+2356 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 233.689 null ] >>
+endobj
+2357 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 222.73 null ] >>
+endobj
+2358 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 194.835 null ] >>
+endobj
+2359 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 183.876 null ] >>
+endobj
+2360 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 172.917 null ] >>
+endobj
+2361 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 161.958 null ] >>
+endobj
+2362 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 150.999 null ] >>
+endobj
+2363 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 140.04 null ] >>
+endobj
+2364 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 129.081 null ] >>
+endobj
+2365 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 118.122 null ] >>
+endobj
+2366 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 107.164 null ] >>
+endobj
+2367 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 96.205 null ] >>
+endobj
+2368 0 obj
+<< /D [ 2318 0 R /XYZ 81.077 85.246 null ] >>
+endobj
+2317 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F67 187 0 R /F19 184 0 R /F20 186 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+2371 0 obj
+<< /Filter /FlateDecode /Length 3045 >>
+stream
+xڵ[[۸~ϯ0Їz]T[4.SI`Ȳ"K^IdË.89>$IṒ-W}}=1%|q}E/"$K/>,oﲫ7eZIt+S|p N)qZW4ZI^6GkEKicTTiQնjzXd͸-Dസ^6]HGL1rb$FΑEA:oќ3+/]st^84݅ZKZKQ"&.޷""O>v+_.SykITd7
+
+C뼀N&o
+)N`!"' ђu18vAP>葲~U .V4mMlݒWoZ'";},޹m7J86A
+VX 2 a6YH ?s9FDIdD'%Q":a@YQ|J66Kb*Zt+gQF&lV]C^N @D@tNV#l
+ C?gNnvyYjNjNʞ,tVEC\kx2'q1:MZsS  uִU}RC;0,`ly%hZ/Ɛ$rP Vڔ2nA:]^}^Wޖ[d>K` 㹕LUNIq
+#Y/yvPBy"X8shBHԓY=Bjz5^{R,?O}YUKwOD1rv)ة0tXT.*Q~`(1\hk#}&{
+y̚yIL{LwzK,yn'0EarkG.=XCizdsX,/:?($Ђ,WNgkX0xz:X:iڜ/H##2j7y[W9,Ol3Y5w
+c8yRU
+bEXwh=W\J/jbj*F'˂Х";dkls>[7gIBGINn6Qt_:̋
+enǴB#0u{SIcy$y>e)^.#~$|Å#ci  ncAR6EMĈuؚpڥ!)d]$ѝ9 }&w1OӞ(d8Ť HcOGr"-xyud@̩$A008Wbl]dYG]YN}o^6Fby#'Lv"K?>u=ALΏ=9ЬC $x/_ (
+=jO~_C'ʣ"sݐ_}+j`:aq</ſ_E$mHxcdP&F~`衡%BQ'i!G));b<ѯ?Ի'wE&,8 4H
+&v)H?]
+endstream
+endobj
+2370 0 obj
+<< /Type /Page /Contents 2371 0 R /Resources 2369 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2253 0 R /Annots 2408 0 R >>
+endobj
+2408 0 obj
+[ 2316 0 R ]
+endobj
+2316 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 438.519 758.127 444.981 770.064 ]/A << /S /GoTo /D (Hfootnote.7) >> >>
+endobj
+2372 0 obj
+<< /D [ 2370 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+2373 0 obj
+<< /D [ 2370 0 R /XYZ 81.077 710.052 null ] >>
+endobj
+2374 0 obj
+<< /D [ 2370 0 R /XYZ 81.077 660.239 null ] >>
+endobj
+2375 0 obj
+<< /D [ 2370 0 R /XYZ 81.077 649.28 null ] >>
+endobj
+2376 0 obj
+<< /D [ 2370 0 R /XYZ 81.077 638.321 null ] >>
+endobj
+2377 0 obj
+<< /D [ 2370 0 R /XYZ 81.077 627.362 null ] >>
+endobj
+2378 0 obj
+<< /D [ 2370 0 R /XYZ 81.077 616.403 null ] >>
+endobj
+2379 0 obj
+<< /D [ 2370 0 R /XYZ 81.077 605.444 null ] >>
+endobj
+2380 0 obj
+<< /D [ 2370 0 R /XYZ 81.077 579.542 null ] >>
+endobj
+2381 0 obj
+<< /D [ 2370 0 R /XYZ 81.077 568.583 null ] >>
+endobj
+2382 0 obj
+<< /D [ 2370 0 R /XYZ 81.077 557.624 null ] >>
+endobj
+2383 0 obj
+<< /D [ 2370 0 R /XYZ 81.077 507.811 null ] >>
+endobj
+2384 0 obj
+<< /D [ 2370 0 R /XYZ 81.077 496.852 null ] >>
+endobj
+2385 0 obj
+<< /D [ 2370 0 R /XYZ 81.077 458.994 null ] >>
+endobj
+2386 0 obj
+<< /D [ 2370 0 R /XYZ 81.077 448.035 null ] >>
+endobj
+2387 0 obj
+<< /D [ 2370 0 R /XYZ 81.077 437.076 null ] >>
+endobj
+2388 0 obj
+<< /D [ 2370 0 R /XYZ 81.077 426.117 null ] >>
+endobj
+2389 0 obj
+<< /D [ 2370 0 R /XYZ 81.077 374.311 null ] >>
+endobj
+2390 0 obj
+<< /D [ 2370 0 R /XYZ 81.077 363.352 null ] >>
+endobj
+2391 0 obj
+<< /D [ 2370 0 R /XYZ 81.077 352.393 null ] >>
+endobj
+2392 0 obj
+<< /D [ 2370 0 R /XYZ 81.077 341.434 null ] >>
+endobj
+2393 0 obj
+<< /D [ 2370 0 R /XYZ 81.077 330.476 null ] >>
+endobj
+2394 0 obj
+<< /D [ 2370 0 R /XYZ 81.077 319.517 null ] >>
+endobj
+2395 0 obj
+<< /D [ 2370 0 R /XYZ 81.077 281.659 null ] >>
+endobj
+2396 0 obj
+<< /D [ 2370 0 R /XYZ 81.077 267.711 null ] >>
+endobj
+2397 0 obj
+<< /D [ 2370 0 R /XYZ 81.077 256.752 null ] >>
+endobj
+2398 0 obj
+<< /D [ 2370 0 R /XYZ 81.077 245.793 null ] >>
+endobj
+2399 0 obj
+<< /D [ 2370 0 R /XYZ 81.077 234.834 null ] >>
+endobj
+2400 0 obj
+<< /D [ 2370 0 R /XYZ 81.077 223.875 null ] >>
+endobj
+2401 0 obj
+<< /D [ 2370 0 R /XYZ 81.077 212.916 null ] >>
+endobj
+2402 0 obj
+<< /D [ 2370 0 R /XYZ 81.077 201.957 null ] >>
+endobj
+2403 0 obj
+<< /D [ 2370 0 R /XYZ 81.077 150.152 null ] >>
+endobj
+2404 0 obj
+<< /D [ 2370 0 R /XYZ 81.077 139.193 null ] >>
+endobj
+2405 0 obj
+<< /D [ 2370 0 R /XYZ 81.077 128.234 null ] >>
+endobj
+2406 0 obj
+<< /D [ 2370 0 R /XYZ 81.077 117.275 null ] >>
+endobj
+2407 0 obj
+<< /D [ 2370 0 R /XYZ 94.613 87.187 null ] >>
+endobj
+2369 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F22 459 0 R /F65 185 0 R /F70 305 0 R /F68 189 0 R /F64 183 0 R /F77 542 0 R /F76 468 0 R /F53 203 0 R /F80 760 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+2411 0 obj
+<< /Filter /FlateDecode /Length 2482 >>
+stream
+xڭZ[o8~0X4/"
+KP1("si7uQQ$p%64&'cH VpC '*A <_ǦɿlUALi8AgJ>;'Y\~Z{9\
+DpJxhL-jb1)T)+BP0kgLlwgmavh?WSUaw>;Egus{pCj$dG [a )D Ί߳
+ROUX#*:p3\x^6u,Ag-&4^uG>6Ŧ3%2þ-eݪwvG[w&_vKՄ f NRKQH#ý}1Œ4O8x8e4O1EW* ~ LaH(釺WD\`BS7{pڕVwvt[Oz{>DMPI/V^:EZ8a۱ugsTw3\! 3D3yiZ~9pםuGHR3mx'B8x,tRf-^-ʻyu']^ N䐲)W2l)B"F="L aX6.#6HOw]`|xm#M!NdL4HX<M-QdX/v>F?' ~U`NJ=ގCr*KO Z2S5621yet
+knvpqqH{A^ ,}>}U7|V*If-b_p%8)$u#h6Cݔ rZ9]CQVrLWh te1.~6v6Wy8& eJ ~c%mW~ySoD&eWT wk؍VeBͿT̫jĽb[墮
+$u> ~[42F' #cpb+\uܮbWނ˰VJGԧ87 `Șf1:Y\SDppȈ
+A7FMbuόkuZЉV7EC7?**@9֦m˶B:vvjNăמWa".In8] pٱE`AОS
+qӝO
+ @N\r-m[LUv j!"S͐^3| x_
+g?Uná'`@:%堄ԊDt#yxagAf^n~Cd;8O> ꧪMut'Rg7>o|Vx7 < F<ʋF>ų `=Nu0q|sy?IHzU2k=W1_ nMo<{L ˵vՖgGH䐐xt8x*L=8ΰP更^a>'|^v,N ި502)EB6QI9Hvjq^w)O1ۧhR8A:)ӥC 8MOc#:$ƒx),byWRq1oe*M?,$IO9̸btGjR>G 鲐dGF",&^fч@Ƹ
+<sC,T4F?5 r7#'N+-Lji#t:FM RiKO^h K봥7|lO7 ѤG55u[<1/! N"<' ٮ $w0"*~wMD#ɂG$4+C gpLX.w)K
+endstream
+endobj
+2410 0 obj
+<< /Type /Page /Contents 2411 0 R /Resources 2409 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2253 0 R >>
+endobj
+2412 0 obj
+<< /D [ 2410 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+2413 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+2414 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 669.205 null ] >>
+endobj
+2415 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 658.246 null ] >>
+endobj
+2416 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 632.344 null ] >>
+endobj
+2417 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 621.385 null ] >>
+endobj
+2418 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 610.426 null ] >>
+endobj
+2419 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 599.467 null ] >>
+endobj
+2420 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 588.508 null ] >>
+endobj
+2421 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 577.549 null ] >>
+endobj
+2422 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 566.59 null ] >>
+endobj
+2423 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 555.631 null ] >>
+endobj
+2424 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 544.672 null ] >>
+endobj
+2425 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 533.713 null ] >>
+endobj
+2426 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 522.754 null ] >>
+endobj
+2427 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 511.796 null ] >>
+endobj
+2428 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 500.837 null ] >>
+endobj
+2429 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 489.878 null ] >>
+endobj
+2430 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 478.919 null ] >>
+endobj
+2431 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 467.96 null ] >>
+endobj
+2432 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 457.001 null ] >>
+endobj
+2433 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 446.042 null ] >>
+endobj
+2434 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 435.083 null ] >>
+endobj
+2435 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 424.124 null ] >>
+endobj
+2436 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 374.311 null ] >>
+endobj
+2437 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 363.352 null ] >>
+endobj
+2438 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 352.393 null ] >>
+endobj
+2439 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 341.434 null ] >>
+endobj
+2440 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 330.476 null ] >>
+endobj
+2441 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 268.707 null ] >>
+endobj
+2442 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 257.748 null ] >>
+endobj
+2443 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 246.789 null ] >>
+endobj
+2444 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 235.83 null ] >>
+endobj
+2445 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 224.872 null ] >>
+endobj
+2446 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 213.913 null ] >>
+endobj
+2447 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 202.954 null ] >>
+endobj
+2448 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 191.995 null ] >>
+endobj
+2449 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 181.036 null ] >>
+endobj
+2450 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 170.077 null ] >>
+endobj
+2451 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 159.118 null ] >>
+endobj
+2452 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 148.159 null ] >>
+endobj
+2453 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 137.2 null ] >>
+endobj
+2454 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 126.241 null ] >>
+endobj
+2455 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 115.283 null ] >>
+endobj
+2456 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 104.324 null ] >>
+endobj
+2457 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 93.365 null ] >>
+endobj
+2458 0 obj
+<< /D [ 2410 0 R /XYZ 81.077 82.406 null ] >>
+endobj
+2409 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F27 642 0 R /F30 644 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+2463 0 obj
+<< /Filter /FlateDecode /Length 2516 >>
+stream
+xڭZߏ۸~߿}[F%[Ztz]\bkm]l'qrAw(ڦZ?r8|3T<YLwqH7I6DeNN$4 %qB') b$<$>^2\o}5Zs?<
+? >b
+;8=B6/Ckؚ1L)0C9F;,&X}tfzSCT?[<W9+?_m dom2Nd|ca9F 2s+"MoVyƚ]B;ȱ1%\sctf.S1i{x:~.Dx"p%AC+.H9Ʈ)4*
+1:\g\;O s3x'4}zk1Ʉ7 Y"S1uUMmZ 1Ǧ_a]T* <q.=P=XܧOy^ F$󇙡NE(3޴hA\$k2bPʇm9V7ZzljYhbe07=g
+}!忥6!1Ka1&K{6GNj )(ګyj/+:W<">{^e~{qݺCޛ62K;]4/[;
+2(Q*"b ˼[BGybSX -&Ay QPre_Co'U$V^!krlh;*†~PRB
+XV|ƙ& +"^p
+endstream
+endobj
+2462 0 obj
+<< /Type /Page /Contents 2463 0 R /Resources 2461 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2253 0 R /Annots 2510 0 R >>
+endobj
+2510 0 obj
+[ 2459 0 R 2460 0 R ]
+endobj
+2459 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 139.584 485.096 146.046 495.095 ]/A << /S /GoTo /D (Hfootnote.8) >> >>
+endobj
+2460 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 460.302 318.222 472.257 330.177 ]/A << /S /GoTo /D (section.0.13) >> >>
+endobj
+2464 0 obj
+<< /D [ 2462 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+2465 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+2466 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+2467 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+2468 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+2469 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+2470 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+2471 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+2472 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+2473 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 642.306 null ] >>
+endobj
+2474 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 631.347 null ] >>
+endobj
+2475 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 620.388 null ] >>
+endobj
+2476 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 609.429 null ] >>
+endobj
+2477 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 598.471 null ] >>
+endobj
+2478 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 587.512 null ] >>
+endobj
+2479 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 576.553 null ] >>
+endobj
+2480 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 565.594 null ] >>
+endobj
+2481 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 554.635 null ] >>
+endobj
+2482 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 543.676 null ] >>
+endobj
+2483 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 532.717 null ] >>
+endobj
+2484 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 482.904 null ] >>
+endobj
+2485 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 471.945 null ] >>
+endobj
+2486 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 460.986 null ] >>
+endobj
+2487 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 450.027 null ] >>
+endobj
+2488 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 439.068 null ] >>
+endobj
+2489 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 428.109 null ] >>
+endobj
+2490 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 417.151 null ] >>
+endobj
+2491 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 391.248 null ] >>
+endobj
+2492 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 380.289 null ] >>
+endobj
+2493 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 318.52 null ] >>
+endobj
+2494 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 307.561 null ] >>
+endobj
+2495 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 281.659 null ] >>
+endobj
+2496 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 270.7 null ] >>
+endobj
+2497 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 259.741 null ] >>
+endobj
+2498 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 248.782 null ] >>
+endobj
+2499 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 237.823 null ] >>
+endobj
+2500 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 226.864 null ] >>
+endobj
+2501 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 215.905 null ] >>
+endobj
+2502 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 204.946 null ] >>
+endobj
+2503 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 193.987 null ] >>
+endobj
+2504 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 183.028 null ] >>
+endobj
+2505 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 145.17 null ] >>
+endobj
+2506 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 134.212 null ] >>
+endobj
+2507 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 123.253 null ] >>
+endobj
+2508 0 obj
+<< /D [ 2462 0 R /XYZ 81.077 112.294 null ] >>
+endobj
+2509 0 obj
+<< /D [ 2462 0 R /XYZ 94.613 81.459 null ] >>
+endobj
+2461 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F22 459 0 R /F79 736 0 R /F76 468 0 R /F53 203 0 R /F42 762 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+2515 0 obj
+<< /Filter /FlateDecode /Length 2602 >>
+stream
+xڽZm۸B@H(r-+mhAmZ-$9^z!1}}صDqȇ3$q;<"aw~{N#J8"H$J$AXiS,~a)d&B!/0.vi^/AEWM>KT}nڴ/y]u__.0"u9*K7ol[Jbgx<= ;# =P!ш:ڶ{Q}j0~##8S  /{ho1۪Ͷq/SuP=x5}+S_?@A~L->nrS%^ӄ"ʹ
+ k*c$'(F2GB)Xs"}窾6(c <`7IMfvyVl7Y;<un8hkH3$t:
+z۠qG<l]pq=)vyd(2h{fY}2z|`t?#$Lt%TF t^^9|HhBIDVնm+ڼnlC@%8 +m`i Gv4L $A ]B@U^`RD+2bA+xt6ԾeG+VաV,:>3^w
+|n U;봼Gd_l_{1mE؇ã-KM>Kt.iN`L/q扯
+f03֨ ~uQ^&Eg쯰a"+B|=*YRۑ櫼ir\ÅQvٴ($"$)I5}1bmO3Oe1k}bnn < #MT
+CJ_[
+ $L)fL)͡a(WY90E06cS8 +4SfBI tW2S
+| \0Įg$AlRł+|)f9cdDH7ga71015t11tt1ӆKǠ+7ށ# g Ӓ˞4q/k0Wӂa]OМPR#AE.O:x2H4aI̳]͹' |L6xh1#KSaK5^QpfR0DXwۧ9 'n'+` |fUubư@骪|oO)C!cw\<ܭ}4pk>֭⧮۶ %P[GtY?2:-``ܔdf U~7Ȕ_{e }[T[b7g`mx\с;q/Ag Fv#RJ+X{x9f;{b۴(muLE(Z1I,(0yfӑr0rQ(TC3n3 O:8vSc2oWg"F #"/}M$pр8k#si"SJ`jAftؕ6#0Oi.d`Csn=zeևU'M O4!
+ rt\nCw+\P[Mb:Ooeƺ- fNp%K%Э+)Πg0M$A֓v`2\6z6nJt5 vKHn1p|>nLtJ B|1OݔIM hl69-zf|32!%HXPK5Ƙ%8ׅFҲ*ssAGo~-WÊuקg[Oǟx ? ;vwIxh>h"#L*ޠ4/K#Qw޼,w`:M,R@EW?juv)J,j "5EأT>鮚'e9e.]U;3o؛jᦚy
+endstream
+endobj
+2514 0 obj
+<< /Type /Page /Contents 2515 0 R /Resources 2513 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2253 0 R /Annots 2565 0 R >>
+endobj
+2565 0 obj
+[ 2511 0 R 2512 0 R ]
+endobj
+2511 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 487.585 708.757 494.046 721.247 ]/A << /S /GoTo /D (Hfootnote.9) >> >>
+endobj
+2512 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 486.924 176.752 498.879 188.707 ]/A << /S /GoTo /D (section.0.13) >> >>
+endobj
+2516 0 obj
+<< /D [ 2514 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+2517 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+2518 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+2519 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+2520 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 709.056 null ] >>
+endobj
+2521 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 698.097 null ] >>
+endobj
+2522 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 687.138 null ] >>
+endobj
+2523 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 676.179 null ] >>
+endobj
+2524 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 665.22 null ] >>
+endobj
+2525 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 654.261 null ] >>
+endobj
+2526 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 640.314 null ] >>
+endobj
+2527 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 629.355 null ] >>
+endobj
+2528 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 618.396 null ] >>
+endobj
+2529 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 607.437 null ] >>
+endobj
+2530 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 596.478 null ] >>
+endobj
+2531 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 585.519 null ] >>
+endobj
+2532 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 574.56 null ] >>
+endobj
+2533 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 534.71 null ] >>
+endobj
+2534 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 523.751 null ] >>
+endobj
+2535 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 512.792 null ] >>
+endobj
+2536 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 501.833 null ] >>
+endobj
+2537 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 490.874 null ] >>
+endobj
+2538 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 479.915 null ] >>
+endobj
+2539 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 468.956 null ] >>
+endobj
+2540 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 457.997 null ] >>
+endobj
+2541 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 447.038 null ] >>
+endobj
+2542 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 436.08 null ] >>
+endobj
+2543 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 425.121 null ] >>
+endobj
+2544 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 399.218 null ] >>
+endobj
+2545 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 388.259 null ] >>
+endobj
+2546 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 377.3 null ] >>
+endobj
+2547 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 366.341 null ] >>
+endobj
+2548 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 355.382 null ] >>
+endobj
+2549 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 344.423 null ] >>
+endobj
+2550 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 291.621 null ] >>
+endobj
+2551 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 280.662 null ] >>
+endobj
+2552 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 269.703 null ] >>
+endobj
+2553 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 258.745 null ] >>
+endobj
+2554 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 247.786 null ] >>
+endobj
+2555 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 236.827 null ] >>
+endobj
+2556 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 225.868 null ] >>
+endobj
+2557 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 214.909 null ] >>
+endobj
+2558 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 177.051 null ] >>
+endobj
+2559 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 166.092 null ] >>
+endobj
+2560 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 155.133 null ] >>
+endobj
+2561 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 144.174 null ] >>
+endobj
+2562 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 133.215 null ] >>
+endobj
+2563 0 obj
+<< /D [ 2514 0 R /XYZ 81.077 122.256 null ] >>
+endobj
+2564 0 obj
+<< /D [ 2514 0 R /XYZ 94.613 91.422 null ] >>
+endobj
+2513 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F32 176 0 R /F27 642 0 R /F22 459 0 R /F76 468 0 R /F53 203 0 R /F46 761 0 R /F42 762 0 R /F80 760 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+2568 0 obj
+<< /Filter /FlateDecode /Length 2280 >>
+stream
+xڭZKϯoTU&^|Z'ʇ!CbQ%ѦHь' H2
+ِxN#b97U&buHOĹؕQ nYo LaLm n[wF4pD_Lx-.fs\Mq6 B |wND?X_lG 8J9I }>33DOϷ!-(ϫ0='\u8+9ǷS~[
+uicoWVh ap]tlHX Z8WS;BCXɣ=8rK"IMe^Hdk$Mh@c*} cPSZ UHfUNӣǡbDڹ_>dyv0rlvڎf;6iHw,(ۭ^ʲǧCT=`xtcD 7ޑ9@N@{>kOSA-蹠ctPB3dI_4ώ<|
+7Y
+
+ TCPT`@'~ 3BRy> ِ.`tz8@nH 6l 6ǻ˃`6G[\𬛲Jr(D Bѩ3U:
+k]~ď#&^}hcP{ĎC3JK>2鐐Bj6M=0A@oPlRu1m',T."0yNgK`3 O{yg+U-{_0XCZBEɆi@p&3s{⑨זV]YO̳"L&Τ $v݃&`EM
+v FE| yͳ8pb
+YlA5 ip`>Ӹu`Ai#+Y8
+T *SYNOp
+-xy<sܠ5 1"7ݗ̹d&ZT7"1
+i=4Rt<. iu .̢кɅ}C@ilkJdqm>_IGr''B\F*dmB< a|sD[f@ػ Qސn@@p3FI緘*Ywb5)[`Z\VݴΞ*Ŧ.
+ص_'ɋ4iL?cdݖ/3*\ڻLT| +ΟL ԗuD}*>˚ mA}">3CP^ Ƥv!#vQeY$`}XQ@n4&-cܬ6ء[$SaH>%V_t i~r0TQ1JG.>1ԿgPVٟeĹsmC_!04EԷEj4.CSw;ͭK[MTtԳ4Mmb-k;9k@#X*t@4TG.3
+endstream
+endobj
+2567 0 obj
+<< /Type /Page /Contents 2568 0 R /Resources 2566 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2253 0 R >>
+endobj
+2569 0 obj
+<< /D [ 2567 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+2570 0 obj
+<< /D [ 2567 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+2571 0 obj
+<< /D [ 2567 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+2572 0 obj
+<< /D [ 2567 0 R /XYZ 81.077 720.015 null ] >>
+endobj
+2573 0 obj
+<< /D [ 2567 0 R /XYZ 81.077 682.157 null ] >>
+endobj
+2574 0 obj
+<< /D [ 2567 0 R /XYZ 81.077 671.198 null ] >>
+endobj
+2575 0 obj
+<< /D [ 2567 0 R /XYZ 81.077 660.239 null ] >>
+endobj
+2576 0 obj
+<< /D [ 2567 0 R /XYZ 81.077 649.28 null ] >>
+endobj
+2577 0 obj
+<< /D [ 2567 0 R /XYZ 81.077 638.321 null ] >>
+endobj
+2578 0 obj
+<< /D [ 2567 0 R /XYZ 81.077 627.362 null ] >>
+endobj
+2579 0 obj
+<< /D [ 2567 0 R /XYZ 81.077 616.403 null ] >>
+endobj
+2580 0 obj
+<< /D [ 2567 0 R /XYZ 81.077 605.444 null ] >>
+endobj
+2581 0 obj
+<< /D [ 2567 0 R /XYZ 81.077 579.542 null ] >>
+endobj
+2582 0 obj
+<< /D [ 2567 0 R /XYZ 81.077 568.583 null ] >>
+endobj
+49 0 obj
+<< /D [ 2567 0 R /XYZ 79.37 513.315 null ] >>
+endobj
+2583 0 obj
+<< /D [ 2567 0 R /XYZ 81.077 399.96 null ] >>
+endobj
+2584 0 obj
+<< /D [ 2567 0 R /XYZ 81.077 389.001 null ] >>
+endobj
+2585 0 obj
+<< /D [ 2567 0 R /XYZ 81.077 378.042 null ] >>
+endobj
+2586 0 obj
+<< /D [ 2567 0 R /XYZ 81.077 367.083 null ] >>
+endobj
+2587 0 obj
+<< /D [ 2567 0 R /XYZ 81.077 356.124 null ] >>
+endobj
+2588 0 obj
+<< /D [ 2567 0 R /XYZ 81.077 340.184 null ] >>
+endobj
+2589 0 obj
+<< /D [ 2567 0 R /XYZ 81.077 329.225 null ] >>
+endobj
+2590 0 obj
+<< /D [ 2567 0 R /XYZ 81.077 318.266 null ] >>
+endobj
+2591 0 obj
+<< /D [ 2567 0 R /XYZ 81.077 275.427 null ] >>
+endobj
+2592 0 obj
+<< /D [ 2567 0 R /XYZ 81.077 246.535 null ] >>
+endobj
+2593 0 obj
+<< /D [ 2567 0 R /XYZ 81.077 217.643 null ] >>
+endobj
+2594 0 obj
+<< /D [ 2567 0 R /XYZ 81.077 188.752 null ] >>
+endobj
+2595 0 obj
+<< /D [ 2567 0 R /XYZ 81.077 177.793 null ] >>
+endobj
+2596 0 obj
+<< /D [ 2567 0 R /XYZ 81.077 166.834 null ] >>
+endobj
+2597 0 obj
+<< /D [ 2567 0 R /XYZ 81.077 155.875 null ] >>
+endobj
+2598 0 obj
+<< /D [ 2567 0 R /XYZ 81.077 144.916 null ] >>
+endobj
+2599 0 obj
+<< /D [ 2567 0 R /XYZ 81.077 133.957 null ] >>
+endobj
+2600 0 obj
+<< /D [ 2567 0 R /XYZ 81.077 122.998 null ] >>
+endobj
+2601 0 obj
+<< /D [ 2567 0 R /XYZ 81.077 112.039 null ] >>
+endobj
+2602 0 obj
+<< /D [ 2567 0 R /XYZ 81.077 101.081 null ] >>
+endobj
+2603 0 obj
+<< /D [ 2567 0 R /XYZ 81.077 90.122 null ] >>
+endobj
+2604 0 obj
+<< /D [ 2567 0 R /XYZ 81.077 79.163 null ] >>
+endobj
+2566 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F67 187 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+2607 0 obj
+<< /Filter /FlateDecode /Length 2062 >>
+stream
+xڽZKPNTyaAI*Ta*>xS,$f)R!!Ϭ'i$HȳZAN2 |D58x_oxE߿dQF7&Y$IJ%Y<?-)a?`HP*%K`"藇eH>д/MmjC6ܞ+TnA~/$3m`:mpx6K̯Mn[hwIHB:1XP$q
+MIB%T⃋\#mϧ;MzZcڬc ᪞z;O4hՔDzXjsMWMYd5h OswsSE+
+8hoS^5mUT."F&IEN9ܯ-o[l rhOt6`-Dc]eemQ5,&"UPلBEY0@D W_;
+t.lB
+endstream
+endobj
+2606 0 obj
+<< /Type /Page /Contents 2607 0 R /Resources 2605 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2253 0 R >>
+endobj
+2608 0 obj
+<< /D [ 2606 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+2609 0 obj
+<< /D [ 2606 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+2610 0 obj
+<< /D [ 2606 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+2611 0 obj
+<< /D [ 2606 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+2612 0 obj
+<< /D [ 2606 0 R /XYZ 81.077 694.549 null ] >>
+endobj
+2613 0 obj
+<< /D [ 2606 0 R /XYZ 81.077 683.59 null ] >>
+endobj
+2614 0 obj
+<< /D [ 2606 0 R /XYZ 81.077 659.048 null ] >>
+endobj
+2615 0 obj
+<< /D [ 2606 0 R /XYZ 81.077 648.089 null ] >>
+endobj
+2616 0 obj
+<< /D [ 2606 0 R /XYZ 81.077 615.795 null ] >>
+endobj
+2617 0 obj
+<< /D [ 2606 0 R /XYZ 81.077 604.836 null ] >>
+endobj
+2618 0 obj
+<< /D [ 2606 0 R /XYZ 81.077 593.877 null ] >>
+endobj
+2619 0 obj
+<< /D [ 2606 0 R /XYZ 81.077 582.918 null ] >>
+endobj
+2620 0 obj
+<< /D [ 2606 0 R /XYZ 81.077 528.342 null ] >>
+endobj
+2621 0 obj
+<< /D [ 2606 0 R /XYZ 81.077 517.383 null ] >>
+endobj
+2622 0 obj
+<< /D [ 2606 0 R /XYZ 81.077 506.424 null ] >>
+endobj
+2623 0 obj
+<< /D [ 2606 0 R /XYZ 81.077 495.465 null ] >>
+endobj
+2624 0 obj
+<< /D [ 2606 0 R /XYZ 81.077 484.506 null ] >>
+endobj
+2625 0 obj
+<< /D [ 2606 0 R /XYZ 81.077 473.548 null ] >>
+endobj
+2626 0 obj
+<< /D [ 2606 0 R /XYZ 81.077 462.589 null ] >>
+endobj
+2627 0 obj
+<< /D [ 2606 0 R /XYZ 81.077 451.63 null ] >>
+endobj
+2628 0 obj
+<< /D [ 2606 0 R /XYZ 81.077 440.671 null ] >>
+endobj
+2629 0 obj
+<< /D [ 2606 0 R /XYZ 81.077 429.712 null ] >>
+endobj
+2630 0 obj
+<< /D [ 2606 0 R /XYZ 81.077 418.753 null ] >>
+endobj
+2631 0 obj
+<< /D [ 2606 0 R /XYZ 81.077 407.794 null ] >>
+endobj
+2632 0 obj
+<< /D [ 2606 0 R /XYZ 81.077 396.835 null ] >>
+endobj
+2633 0 obj
+<< /D [ 2606 0 R /XYZ 81.077 385.876 null ] >>
+endobj
+2634 0 obj
+<< /D [ 2606 0 R /XYZ 81.077 355.502 null ] >>
+endobj
+2635 0 obj
+<< /D [ 2606 0 R /XYZ 81.077 344.543 null ] >>
+endobj
+2636 0 obj
+<< /D [ 2606 0 R /XYZ 81.077 296.09 null ] >>
+endobj
+2637 0 obj
+<< /D [ 2606 0 R /XYZ 81.077 285.131 null ] >>
+endobj
+2638 0 obj
+<< /D [ 2606 0 R /XYZ 81.077 274.173 null ] >>
+endobj
+2639 0 obj
+<< /D [ 2606 0 R /XYZ 81.077 263.214 null ] >>
+endobj
+2640 0 obj
+<< /D [ 2606 0 R /XYZ 81.077 252.255 null ] >>
+endobj
+2641 0 obj
+<< /D [ 2606 0 R /XYZ 81.077 241.296 null ] >>
+endobj
+2642 0 obj
+<< /D [ 2606 0 R /XYZ 81.077 206.718 null ] >>
+endobj
+2643 0 obj
+<< /D [ 2606 0 R /XYZ 81.077 166.308 null ] >>
+endobj
+2644 0 obj
+<< /D [ 2606 0 R /XYZ 81.077 155.349 null ] >>
+endobj
+2645 0 obj
+<< /D [ 2606 0 R /XYZ 81.077 144.39 null ] >>
+endobj
+2646 0 obj
+<< /D [ 2606 0 R /XYZ 81.077 133.431 null ] >>
+endobj
+2647 0 obj
+<< /D [ 2606 0 R /XYZ 81.077 122.473 null ] >>
+endobj
+2648 0 obj
+<< /D [ 2606 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+2649 0 obj
+<< /D [ 2606 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+2650 0 obj
+<< /D [ 2606 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+2651 0 obj
+<< /D [ 2606 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+2605 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+2655 0 obj
+<< /Filter /FlateDecode /Length 2388 >>
+stream
+xZ[۸~_awQZ[4[상6fahlzFIg:^D1!#s p' p͛wRM8atr!ODI$I6$AXnӔEg?0(KLr8C 7M,7Ż٭ŽU˷os۲iEO~iV;z#Ű`fW1L@<1-}|e7|Q0[VJ/?뗳Gx,G < N*mqm!0F&T:鴱DT@;6S<F'Ӗ@ g6:Fs-~jvzQߝaUtfhݻ?D{K^iRqxȓtO<nٖ[:4+3fn |C,4Fdʒ"Bɕs$d2׺*wݫbFׁE:]=0
+ND /UѾN?CCyA=3 =,n?wg:zZwUUv}28C ˤu$YyTEM$@QaTE mU8N'NY2m)Ii 6I
+:6'H)hӤ7H>B:d9b@J)3Ŧzv8y}]ڽ{E @7
+rlڲ{ɦ`F,X4,l(՝/sD/#PVaѺ*ȅ$Df,0MQeX@~W Cۢzfy7(a>u W!o׸T|-]+I2ϸB|z/1+{WP m>lH79h]|4QXy2H<ڄk>vճCTŘm^
+RQpixf)4*+I*R#2sp=>k(c]!伮t9>KGQY|FӅByFX#5J {Y:㻡{Kږ-Nblz[7%CDʨrۺ_TAbE[Q1yĘ° .6D!y OT8,Ojm"|oGwMwSJNCCDR-!eКXsB-a4_Muߟߠ:=WQ%.dib6~޻}[Lo{@GhhՉJ1:]yB<bF{NGrCP8"OzyQ޿HW6%I:@Z Ǻ9_\Hbbϼ8*T.?F7;(K2N i|cp:e'!S4F_"n>4P$8v7? k#i\hW9ep_D@9 u& 97d
+endstream
+endobj
+2654 0 obj
+<< /Type /Page /Contents 2655 0 R /Resources 2653 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2253 0 R /Annots 2702 0 R >>
+endobj
+2702 0 obj
+[ 2652 0 R ]
+endobj
+2652 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 371.83 316.229 382.263 328.719 ]/A << /S /GoTo /D (Hfootnote.10) >> >>
+endobj
+2656 0 obj
+<< /D [ 2654 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+2657 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+2658 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+2659 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+2660 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+2661 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+2662 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+2663 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+2664 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+2665 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+2666 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+2667 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+2668 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+2669 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+2670 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 626.366 null ] >>
+endobj
+2671 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 615.407 null ] >>
+endobj
+2672 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 604.448 null ] >>
+endobj
+2673 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 593.489 null ] >>
+endobj
+2674 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 582.53 null ] >>
+endobj
+2675 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 571.571 null ] >>
+endobj
+2676 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 560.613 null ] >>
+endobj
+2677 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 549.654 null ] >>
+endobj
+2678 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 496.852 null ] >>
+endobj
+2679 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 485.893 null ] >>
+endobj
+2680 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 474.934 null ] >>
+endobj
+2681 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 463.975 null ] >>
+endobj
+2682 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 453.016 null ] >>
+endobj
+2683 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 442.057 null ] >>
+endobj
+2684 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 377.3 null ] >>
+endobj
+2685 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 366.341 null ] >>
+endobj
+2686 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 313.539 null ] >>
+endobj
+2687 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 302.58 null ] >>
+endobj
+2688 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 291.621 null ] >>
+endobj
+2689 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 262.73 null ] >>
+endobj
+2690 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 251.771 null ] >>
+endobj
+2691 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 240.812 null ] >>
+endobj
+2692 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 229.853 null ] >>
+endobj
+2693 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 218.894 null ] >>
+endobj
+2694 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 207.935 null ] >>
+endobj
+2695 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 196.976 null ] >>
+endobj
+2696 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 186.017 null ] >>
+endobj
+2697 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 175.058 null ] >>
+endobj
+2698 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 164.099 null ] >>
+endobj
+2699 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 153.141 null ] >>
+endobj
+2700 0 obj
+<< /D [ 2654 0 R /XYZ 81.077 142.182 null ] >>
+endobj
+2701 0 obj
+<< /D [ 2654 0 R /XYZ 94.613 112.593 null ] >>
+endobj
+2653 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F22 459 0 R /F65 185 0 R /F76 468 0 R /F53 203 0 R /F80 760 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+2705 0 obj
+<< /Filter /FlateDecode /Length 1505 >>
+stream
+xZKoFW0BP-
+C܇I.E|4h?]4cqDhFf&̊m=Wqz Ҧb@7('@4¨%J aʲ0mGh"KA)Q] =$q í&A egZhι`
+cZ0]U5o %ՇyidzېuY.竪MY͸9oK8+zY7nS5'UU_3{keWou`+*'O2AtN@2G9kA$7~9*WtoT,yOKjC g1zȰ,B,o ryL2h(" Tt0'$nRzs8 U0mp)STR'/&p2,5N0l|%)J4:/r2߯S 5A0)rhSy2u͏w{V%%-ˈeh
+CB!v OR.Fw)CJ3+垠9_YΥ0szƕ,Aw qxm1r'~K #</.21MRi©'mt): a/&R\lJ)K. ü(KnKDM^\%Pln}'%2tJL'Wsa%Wn ,DV[Ɓʂ.!*t
+7$Wt!wϸd+Ar
+%O ş'7Ϝ+bK!Ϟw:|jPpԡc2pbѿ!)m޴>Yߌd63;Ǯ; 9*A4Z?yCk%Im1>q|\ō&xY}<5L3KVmX(QP6K
+gll'Lȡ 0=C NcAE:žO<h hK0~[FnC30:jsÔݦ{]sfWeӬ2>ou !KA p8q}K;Æ 紃Qj<f WxeBd5 ͢L¸dm±mˢ-?|vPr,Z{ė8(`\b4Ac _tSUW6O#/b=*S(d)zהt~|am
+:F|IYaCawq3)3P7_
+gU
+endstream
+endobj
+2704 0 obj
+<< /Type /Page /Contents 2705 0 R /Resources 2703 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2759 0 R >>
+endobj
+2706 0 obj
+<< /D [ 2704 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+2707 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 754.884 null ] >>
+endobj
+2708 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 743.925 null ] >>
+endobj
+2709 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 732.966 null ] >>
+endobj
+2710 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 722.007 null ] >>
+endobj
+2711 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 711.048 null ] >>
+endobj
+2712 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 700.089 null ] >>
+endobj
+2713 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 671.198 null ] >>
+endobj
+2714 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 660.239 null ] >>
+endobj
+2715 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 649.28 null ] >>
+endobj
+2716 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 633.34 null ] >>
+endobj
+2717 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 622.381 null ] >>
+endobj
+2718 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 611.422 null ] >>
+endobj
+2719 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 600.463 null ] >>
+endobj
+2720 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 589.504 null ] >>
+endobj
+2721 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 578.545 null ] >>
+endobj
+2722 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 567.586 null ] >>
+endobj
+2723 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 556.627 null ] >>
+endobj
+2724 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 545.669 null ] >>
+endobj
+2725 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 534.71 null ] >>
+endobj
+2726 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 523.751 null ] >>
+endobj
+2727 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 512.792 null ] >>
+endobj
+2728 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 501.833 null ] >>
+endobj
+2729 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 485.893 null ] >>
+endobj
+2730 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 474.934 null ] >>
+endobj
+2731 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 463.975 null ] >>
+endobj
+2732 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 453.016 null ] >>
+endobj
+2733 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 442.057 null ] >>
+endobj
+2734 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 431.098 null ] >>
+endobj
+2735 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 420.139 null ] >>
+endobj
+2736 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 409.18 null ] >>
+endobj
+2737 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 398.221 null ] >>
+endobj
+2738 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 387.263 null ] >>
+endobj
+2739 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 376.304 null ] >>
+endobj
+2740 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 365.345 null ] >>
+endobj
+2741 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 354.386 null ] >>
+endobj
+2742 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 317.524 null ] >>
+endobj
+2743 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 306.565 null ] >>
+endobj
+2744 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 295.606 null ] >>
+endobj
+2745 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 284.647 null ] >>
+endobj
+2746 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 273.688 null ] >>
+endobj
+2747 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 262.73 null ] >>
+endobj
+2748 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 227.86 null ] >>
+endobj
+2749 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 216.901 null ] >>
+endobj
+2750 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 188.01 null ] >>
+endobj
+2751 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 177.051 null ] >>
+endobj
+2752 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 166.092 null ] >>
+endobj
+2753 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 150.152 null ] >>
+endobj
+2754 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 139.193 null ] >>
+endobj
+2755 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 128.234 null ] >>
+endobj
+2756 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 117.275 null ] >>
+endobj
+2757 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 106.316 null ] >>
+endobj
+2758 0 obj
+<< /D [ 2704 0 R /XYZ 81.077 95.357 null ] >>
+endobj
+2703 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+2762 0 obj
+<< /Filter /FlateDecode /Length 2042 >>
+stream
+xڵZmo_b?A7\ CТ{(A[` (6㨑%,' ~{Ld DGy
+,&t g\|Dk M4K&fj6\NL9OObf fbW&l>]UfZgEnvpiy>!X;މ0R%%}U~D-,aRl6uksJ
+M*Y<tW<H*Ky&N E-X~c)h9 "ݳ
+\.i)rG.>|dvb:$X&D0jBLם3Y9_W1H#.X2oyL]Vjjtם
+/$N1Ɏա͑1ls
+5iSo*_#)#LDTW8融nm}ǰr nT&0\ɡ$<l5V1 1.[ B Ћ pc4A\Mc7lQCA@
+s`?=7E00 ksTZإWYfyZ]w
+Ĉ'>.}ǔJ]gv+0`nX dI"#~/]?+֕?i?i})M$WX?NĈ~$L`06_/8/mQAJ"`bs^L%|XЙ_Y,{!:7-kɢ+yn/ZZWu۴|tN4`;-PB׸uc&Mm :;ykgf$j,l&ec%h粮]RU9Ew͒9tN`
+]E Nݣ9@2kVg,#{
+?Y]ʱue^AqhB0rrg͝)D c_"*|aשo]ab(>5|u o{nD+=za^.Bm\
+endstream
+endobj
+2761 0 obj
+<< /Type /Page /Contents 2762 0 R /Resources 2760 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2759 0 R >>
+endobj
+2763 0 obj
+<< /D [ 2761 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+2764 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+2765 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+2766 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+2767 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+2768 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+2769 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+2770 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+2771 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+2772 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 676.179 null ] >>
+endobj
+2773 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 665.22 null ] >>
+endobj
+2774 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 654.261 null ] >>
+endobj
+2775 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 643.302 null ] >>
+endobj
+2776 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 632.344 null ] >>
+endobj
+2777 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 601.459 null ] >>
+endobj
+2778 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 590.5 null ] >>
+endobj
+2779 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 579.542 null ] >>
+endobj
+2780 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 568.583 null ] >>
+endobj
+2781 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 557.624 null ] >>
+endobj
+2782 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 546.665 null ] >>
+endobj
+2783 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 535.706 null ] >>
+endobj
+2784 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 524.747 null ] >>
+endobj
+2785 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 513.788 null ] >>
+endobj
+2786 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 502.829 null ] >>
+endobj
+2787 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 491.87 null ] >>
+endobj
+2788 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 449.031 null ] >>
+endobj
+2789 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 438.072 null ] >>
+endobj
+2790 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 427.113 null ] >>
+endobj
+2791 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 416.154 null ] >>
+endobj
+2792 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 405.195 null ] >>
+endobj
+2793 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 372.319 null ] >>
+endobj
+2794 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 361.36 null ] >>
+endobj
+2795 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 350.401 null ] >>
+endobj
+2796 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 339.442 null ] >>
+endobj
+2797 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 328.483 null ] >>
+endobj
+2798 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 312.543 null ] >>
+endobj
+2799 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 257.748 null ] >>
+endobj
+2800 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 246.789 null ] >>
+endobj
+2801 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 235.83 null ] >>
+endobj
+2802 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 224.872 null ] >>
+endobj
+2803 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 213.913 null ] >>
+endobj
+2804 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 202.954 null ] >>
+endobj
+2805 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 191.995 null ] >>
+endobj
+2806 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 181.036 null ] >>
+endobj
+2807 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 170.077 null ] >>
+endobj
+2808 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 159.118 null ] >>
+endobj
+2809 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 148.159 null ] >>
+endobj
+2810 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 137.2 null ] >>
+endobj
+2811 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 126.241 null ] >>
+endobj
+2812 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 115.283 null ] >>
+endobj
+2813 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 104.324 null ] >>
+endobj
+2814 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 93.365 null ] >>
+endobj
+2815 0 obj
+<< /D [ 2761 0 R /XYZ 81.077 82.406 null ] >>
+endobj
+2760 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F70 305 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+2818 0 obj
+<< /Filter /FlateDecode /Length 2090 >>
+stream
+xڽZmo8_a`8@TW\w(m؊Ɩ|\P2E*qxrfJ' vFwD;N$I,|r}{Kt&VhFf AϿ^ĒDkaC00%c&?oO2TlqBq5>t<sW:SC\XseGrMI릚Y3syu^~uv)ټ\K#}4o}{uuJ¯VmsK޶8ζVv3`+*yJ"/^U_m\mΕ.qC4N5Z{
+KA'j<}N \(tn&_,bzNj%2\ kq'c=R"5'R􂞠-B^$?_bD%|y} %4(/㨇Whxy}FRC2-%NwBHz.kcFAy:a֯W"o #WB(?\^'<pB+0-H[Y޼'V"q Mu5Tvk}EQ.Dv_$$WpK 7
+,oۋzVdOW :q^r;qѳm}⚇|fƁ<֙*Ϲ>k#Oۋ<h/K9}MV&OWKtd JĄ>dPCxsu,o
+q*k_"&/2|0NxE.7}6TYYe< XVw*eI
+gQ,Cp/Yϐ7Dxۚh-P:-@jm DR緭wbpKrxBlm|˫2B?\6Cq\C41B-175DmFY۶'wr^W*q'B PNBG 돸:KN~ԏ$҂F"pa5MB']a
+!/\+md_]_H<͝UhMNX趒 co JCf6
+ 1 ' !S0NGv€Mn?+5m㷍vʹ=0[´m?[n"g*@۩:};
+݀lnW(z
+Z jü+eȋ߆{.g 'U0賸GWlvgf(;;3]Ƀmf>^Gm
+ n?̏Pt1t IپgIKF*y*.B^ho`O@gD;,#t0mɵIw_OF"g봩ݻ }0\7M:kV8'(W+Ubh/rz+r.
+.Ţm]f0ܸm]EռfZ{%u(bO|FVЮk'd.lp
+endstream
+endobj
+2817 0 obj
+<< /Type /Page /Contents 2818 0 R /Resources 2816 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2759 0 R >>
+endobj
+2819 0 obj
+<< /D [ 2817 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+2820 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+2821 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+2822 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+2823 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+2824 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+2825 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+2826 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+2827 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+2828 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+2829 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+2830 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+2831 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+2832 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+2833 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 626.366 null ] >>
+endobj
+2834 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 615.407 null ] >>
+endobj
+2835 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 604.448 null ] >>
+endobj
+2836 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 593.489 null ] >>
+endobj
+2837 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 582.53 null ] >>
+endobj
+2838 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 571.571 null ] >>
+endobj
+2839 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 560.613 null ] >>
+endobj
+2840 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 549.654 null ] >>
+endobj
+2841 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 538.695 null ] >>
+endobj
+2842 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 527.736 null ] >>
+endobj
+2843 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 516.777 null ] >>
+endobj
+2844 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 505.818 null ] >>
+endobj
+2845 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 470.949 null ] >>
+endobj
+2846 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 459.99 null ] >>
+endobj
+2847 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 449.031 null ] >>
+endobj
+2848 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 420.139 null ] >>
+endobj
+2849 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 409.18 null ] >>
+endobj
+2850 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 398.221 null ] >>
+endobj
+2851 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 387.263 null ] >>
+endobj
+2852 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 371.322 null ] >>
+endobj
+2853 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 360.363 null ] >>
+endobj
+2854 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 349.405 null ] >>
+endobj
+2855 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 338.446 null ] >>
+endobj
+2856 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 327.487 null ] >>
+endobj
+2857 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 316.528 null ] >>
+endobj
+2858 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 300.588 null ] >>
+endobj
+2859 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 289.629 null ] >>
+endobj
+2860 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 240.812 null ] >>
+endobj
+2861 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 229.853 null ] >>
+endobj
+2862 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 189.006 null ] >>
+endobj
+2863 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 178.047 null ] >>
+endobj
+2864 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 167.088 null ] >>
+endobj
+2865 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 156.129 null ] >>
+endobj
+2866 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 140.189 null ] >>
+endobj
+2867 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 129.23 null ] >>
+endobj
+2868 0 obj
+<< /D [ 2817 0 R /XYZ 81.077 80.413 null ] >>
+endobj
+2816 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F70 305 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+2871 0 obj
+<< /Filter /FlateDecode /Length 2800 >>
+stream
+xڵZ[o~_a  奈>,z=hq
+vpsޫe>ChĀ{O.›۩ڙZTZƺC*SOyyeywIև<:lCtp!"Շ C=eo>rW
+h!?1a!ç"F cEG‘46>1J %""AiK^D4=t++'lJNL
+4,L@CtAp:< ٽa{W)#(|G$%Ã9ñ_Ԣ>dCt_0 i^?<H]Z@%ލAr^%8&u iK`6 rd A٥8ĻGڃ~pr e/ku1D]<2ezihl|6)Enau
+ިW-*RrnCZV0FUv0V
+
+HyG[,=
+:?N4$ԽW"X =t(__T&$7Dnt?yMBÎn 9lT_Υ.y9g6][T\R]q-tGipR\jHh3%]#{AS[@O{
+'=u~VceouaM#4-J<+dT֙ݸ)܀ [\-k8;a
+)M7aI}V]Ip
+i8I!X˩("ȠΩZd߫V|s\DL*! [}x6Iy4+(e7 T"GĶluh;7`y`# O{ȷS%6Xϕam-nP͑tD).Cuɘ d;I#e>iA<HÅaLQi'"Ip7έ;g7[w\[,QHbBx4*GԞnFuSVGl~<mXy&,(i|1!GS4t>Mg<#n /صbǓ]8zoõ@*iu y/H!"vUiLwç!A th\N;3
+RsJ_y 8G6|kK:<X+غ OۼN3fd#KM8a:fsВ!6|An"Sl-!.-dN+7`pH\\I<f?|DjmqAi>6sV | &Y76e/lƽba X8IZiw _ͱ 2k<
+8sAȅ!֣pi7i^"H5#H'_8R}?2Zcf<ѽ#n3vtf<>QvoYe7:4o UI2~5lP(F\rqA (B"n:i?W6ol ,$r'+(dLEaGHD0rDjHCaҙ2FlAy8_υ4{gB$%2hkt7rF !UZ]rh.&'F;[NL!Gޠ9"B#Q&q5!d:AԌ:\Yt)EPM{F-Ѧ!"s/VwASRQ3YlsYƒδ-ѵK%ηq!T/]Iδ] b!bF l7jpul̈́l] 1&{v5LriW:!> }S'-mа^FZQG"BՁy6\(W=h+!zjR*\r!
+endstream
+endobj
+2870 0 obj
+<< /Type /Page /Contents 2871 0 R /Resources 2869 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2759 0 R >>
+endobj
+2872 0 obj
+<< /D [ 2870 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+2873 0 obj
+<< /D [ 2870 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+2874 0 obj
+<< /D [ 2870 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+2875 0 obj
+<< /D [ 2870 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+2876 0 obj
+<< /D [ 2870 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+2877 0 obj
+<< /D [ 2870 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+2878 0 obj
+<< /D [ 2870 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+2879 0 obj
+<< /D [ 2870 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+2880 0 obj
+<< /D [ 2870 0 R /XYZ 81.077 638.321 null ] >>
+endobj
+2881 0 obj
+<< /D [ 2870 0 R /XYZ 81.077 627.362 null ] >>
+endobj
+2882 0 obj
+<< /D [ 2870 0 R /XYZ 81.077 616.403 null ] >>
+endobj
+2883 0 obj
+<< /D [ 2870 0 R /XYZ 81.077 605.444 null ] >>
+endobj
+2884 0 obj
+<< /D [ 2870 0 R /XYZ 81.077 594.486 null ] >>
+endobj
+2885 0 obj
+<< /D [ 2870 0 R /XYZ 81.077 583.527 null ] >>
+endobj
+2886 0 obj
+<< /D [ 2870 0 R /XYZ 81.077 572.568 null ] >>
+endobj
+2887 0 obj
+<< /D [ 2870 0 R /XYZ 81.077 561.609 null ] >>
+endobj
+2888 0 obj
+<< /D [ 2870 0 R /XYZ 81.077 550.65 null ] >>
+endobj
+2889 0 obj
+<< /D [ 2870 0 R /XYZ 81.077 539.691 null ] >>
+endobj
+2890 0 obj
+<< /D [ 2870 0 R /XYZ 81.077 528.732 null ] >>
+endobj
+2891 0 obj
+<< /D [ 2870 0 R /XYZ 81.077 517.773 null ] >>
+endobj
+2892 0 obj
+<< /D [ 2870 0 R /XYZ 81.077 506.814 null ] >>
+endobj
+2893 0 obj
+<< /D [ 2870 0 R /XYZ 81.077 495.855 null ] >>
+endobj
+2894 0 obj
+<< /D [ 2870 0 R /XYZ 81.077 484.896 null ] >>
+endobj
+2895 0 obj
+<< /D [ 2870 0 R /XYZ 81.077 473.938 null ] >>
+endobj
+2896 0 obj
+<< /D [ 2870 0 R /XYZ 81.077 462.979 null ] >>
+endobj
+2897 0 obj
+<< /D [ 2870 0 R /XYZ 81.077 452.02 null ] >>
+endobj
+2898 0 obj
+<< /D [ 2870 0 R /XYZ 81.077 441.061 null ] >>
+endobj
+2899 0 obj
+<< /D [ 2870 0 R /XYZ 81.077 430.102 null ] >>
+endobj
+2900 0 obj
+<< /D [ 2870 0 R /XYZ 81.077 419.143 null ] >>
+endobj
+2901 0 obj
+<< /D [ 2870 0 R /XYZ 81.077 408.184 null ] >>
+endobj
+2902 0 obj
+<< /D [ 2870 0 R /XYZ 81.077 397.225 null ] >>
+endobj
+2903 0 obj
+<< /D [ 2870 0 R /XYZ 81.077 386.266 null ] >>
+endobj
+2904 0 obj
+<< /D [ 2870 0 R /XYZ 81.077 375.307 null ] >>
+endobj
+2905 0 obj
+<< /D [ 2870 0 R /XYZ 81.077 364.349 null ] >>
+endobj
+2906 0 obj
+<< /D [ 2870 0 R /XYZ 81.077 353.39 null ] >>
+endobj
+2907 0 obj
+<< /D [ 2870 0 R /XYZ 81.077 324.498 null ] >>
+endobj
+2908 0 obj
+<< /D [ 2870 0 R /XYZ 81.077 313.539 null ] >>
+endobj
+2909 0 obj
+<< /D [ 2870 0 R /XYZ 81.077 302.58 null ] >>
+endobj
+2910 0 obj
+<< /D [ 2870 0 R /XYZ 81.077 273.688 null ] >>
+endobj
+2911 0 obj
+<< /D [ 2870 0 R /XYZ 81.077 262.73 null ] >>
+endobj
+2912 0 obj
+<< /D [ 2870 0 R /XYZ 81.077 251.771 null ] >>
+endobj
+2869 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F70 305 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+2915 0 obj
+<< /Filter /FlateDecode /Length 2502 >>
+stream
+xڽZ[o~?B*{RhhO<>@K+5E*$m'h{g/,Cq~0%ugge/ŷ_rP"1% ^H(xp\$ '?=|b(!10JO/L٦^>Ue6ڮO'܌~>)V1W,[
+ o{RdSg*>0<B8"$g9ƈS,&3dOlV?>éכ2_MmPCu'a:<)3^!0aznU?4A쵪iU}4w <PkTOzWVVvFP4C~'#,,nl.܍z\"hw C<֐Mju;(,ta:`^8hW 10"gNOm$8Y$@IÀ2N,FL x8;)ңjT8 Q|]mz'5!L *+mnI<heVglZM٧n|\Uz>-,-;Tbfy
+dye1c@S1QԆ1Nȥ\𨙿ZcYh{;1K¨T`$Ay >uz!HŠN](L!V,5.Y?p.LCZC!CuID_L%b }aN=ogʡR7?_VO(%A]7~8X8([I!$[>Ш tbXL|jǬN^MHcxD%$" V*
+r$Gbcзb_ʦ)%<X4yyb!0#oLxJ1˳eN/% "CM>OH+
+Q>(+A%Hm,Syyͧ3M(TS/8M-8Zp;Ϫ3r:K
+_k"_Rƒ>[w Z~tݏ~쳢D,_ oxq h)4] >/sM-^j]w.ekԋC. 3O|ɪ Ҥ&SN<9=ren
+`=+m[sHζ-m#ml/D]oo>f0B}4݅솚һXx⃼G:81HƮp̽|B:FD{wu@;K Iup?O)ޖN/lr$v^o#+
+endstream
+endobj
+2914 0 obj
+<< /Type /Page /Contents 2915 0 R /Resources 2913 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2759 0 R >>
+endobj
+2916 0 obj
+<< /D [ 2914 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+2917 0 obj
+<< /D [ 2914 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+2918 0 obj
+<< /D [ 2914 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+2919 0 obj
+<< /D [ 2914 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+2920 0 obj
+<< /D [ 2914 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+2921 0 obj
+<< /D [ 2914 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+2922 0 obj
+<< /D [ 2914 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+2923 0 obj
+<< /D [ 2914 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+2924 0 obj
+<< /D [ 2914 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+2925 0 obj
+<< /D [ 2914 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+2926 0 obj
+<< /D [ 2914 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+2927 0 obj
+<< /D [ 2914 0 R /XYZ 81.077 629.355 null ] >>
+endobj
+2928 0 obj
+<< /D [ 2914 0 R /XYZ 81.077 618.396 null ] >>
+endobj
+2929 0 obj
+<< /D [ 2914 0 R /XYZ 81.077 607.437 null ] >>
+endobj
+2930 0 obj
+<< /D [ 2914 0 R /XYZ 81.077 596.478 null ] >>
+endobj
+2931 0 obj
+<< /D [ 2914 0 R /XYZ 81.077 555.631 null ] >>
+endobj
+2932 0 obj
+<< /D [ 2914 0 R /XYZ 81.077 526.74 null ] >>
+endobj
+2933 0 obj
+<< /D [ 2914 0 R /XYZ 81.077 515.781 null ] >>
+endobj
+2934 0 obj
+<< /D [ 2914 0 R /XYZ 81.077 504.822 null ] >>
+endobj
+2935 0 obj
+<< /D [ 2914 0 R /XYZ 81.077 493.863 null ] >>
+endobj
+2936 0 obj
+<< /D [ 2914 0 R /XYZ 81.077 482.904 null ] >>
+endobj
+2937 0 obj
+<< /D [ 2914 0 R /XYZ 81.077 471.945 null ] >>
+endobj
+2938 0 obj
+<< /D [ 2914 0 R /XYZ 81.077 431.098 null ] >>
+endobj
+2939 0 obj
+<< /D [ 2914 0 R /XYZ 81.077 402.207 null ] >>
+endobj
+2940 0 obj
+<< /D [ 2914 0 R /XYZ 81.077 391.248 null ] >>
+endobj
+2941 0 obj
+<< /D [ 2914 0 R /XYZ 81.077 380.289 null ] >>
+endobj
+2942 0 obj
+<< /D [ 2914 0 R /XYZ 81.077 369.33 null ] >>
+endobj
+2943 0 obj
+<< /D [ 2914 0 R /XYZ 81.077 358.371 null ] >>
+endobj
+2944 0 obj
+<< /D [ 2914 0 R /XYZ 81.077 347.412 null ] >>
+endobj
+2945 0 obj
+<< /D [ 2914 0 R /XYZ 81.077 336.453 null ] >>
+endobj
+2946 0 obj
+<< /D [ 2914 0 R /XYZ 81.077 307.561 null ] >>
+endobj
+2947 0 obj
+<< /D [ 2914 0 R /XYZ 81.077 296.603 null ] >>
+endobj
+2948 0 obj
+<< /D [ 2914 0 R /XYZ 81.077 267.711 null ] >>
+endobj
+2949 0 obj
+<< /D [ 2914 0 R /XYZ 81.077 256.752 null ] >>
+endobj
+2950 0 obj
+<< /D [ 2914 0 R /XYZ 81.077 245.793 null ] >>
+endobj
+2951 0 obj
+<< /D [ 2914 0 R /XYZ 81.077 234.834 null ] >>
+endobj
+2952 0 obj
+<< /D [ 2914 0 R /XYZ 81.077 223.875 null ] >>
+endobj
+2953 0 obj
+<< /D [ 2914 0 R /XYZ 81.077 212.916 null ] >>
+endobj
+2954 0 obj
+<< /D [ 2914 0 R /XYZ 81.077 182.032 null ] >>
+endobj
+2955 0 obj
+<< /D [ 2914 0 R /XYZ 81.077 171.073 null ] >>
+endobj
+2956 0 obj
+<< /D [ 2914 0 R /XYZ 81.077 160.114 null ] >>
+endobj
+2957 0 obj
+<< /D [ 2914 0 R /XYZ 81.077 81.41 null ] >>
+endobj
+2913 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+2960 0 obj
+<< /Filter /FlateDecode /Length 2198 >>
+stream
+xڽZ[o~_a`k<-:-@En!(6 #K^IN&;!)Ӣ71b_"s|d >^pww߿{AGFFw> IJ%Y.(?s/42R2=L!)gj([\nѮoRP~]9a,Miwo_SW`D0%1*Rl YMM1dvƾx{䡦wWa}m9vVm>a{k?0lFDh3n>ۻ/cۮþZU(Dag_zKDꉼeK#*ʖ930n6h7R1NuVb >Oc2}n"Nd} XՕʠ&E֔X,]X٦)hruPl}9|FbVW|_QZꪮlBC<}r|^'jy]wjUU<h a׮&`N)}X!bU<oy+ \U,JdaΗRDG24&| NUNkIo /M &+9:
+>E$sNRC}hS9V-]ݶٺ2 E㼐D2'IVgIпKgĽ]ӬғgEmU`Akstln#cfh :~
+UKiۧ; 0.b:W窿WQ&FLh ],#o_%Ad' :P?9:W^>G&k==~p#+\p5ՙ.[O,۪}0s'w00uV_fwT0TӪoC-dş;7ALkĈ(d;$˰
+n eJp_BwKxu+@rޥW HwybOL:ZX`کB+$*&ۊð<5BE
+#:NK@\v!`mFj/ } ]du޶' s%SrhNSt+ֈxk=F",Юe{^,/}srKu
+~g Ǚ`] ~Kއ SJDU8oDFl'{>+y
+Ҭje38Qv^O)l녌~eVQӌ}ٳ.tEj Kak:tySR$Ͻ]Ttţ]zg53cNnq?C` )[˛b`g-cȼSߜE7 =›cd.=_`%k
+endstream
+endobj
+2959 0 obj
+<< /Type /Page /Contents 2960 0 R /Resources 2958 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2759 0 R >>
+endobj
+2961 0 obj
+<< /D [ 2959 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+2962 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+2963 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+2964 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+2965 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+2966 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+2967 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+2968 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+2969 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+2970 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+2971 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+2972 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+2973 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+2974 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+2975 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 626.366 null ] >>
+endobj
+2976 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 615.407 null ] >>
+endobj
+2977 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 604.448 null ] >>
+endobj
+2978 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 593.489 null ] >>
+endobj
+2979 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 577.549 null ] >>
+endobj
+2980 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 566.59 null ] >>
+endobj
+2981 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 555.631 null ] >>
+endobj
+2982 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 544.672 null ] >>
+endobj
+2983 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 533.713 null ] >>
+endobj
+2984 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 522.754 null ] >>
+endobj
+2985 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 511.796 null ] >>
+endobj
+2986 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 500.837 null ] >>
+endobj
+2987 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 410.177 null ] >>
+endobj
+2988 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 399.218 null ] >>
+endobj
+2989 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 358.371 null ] >>
+endobj
+2990 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 347.412 null ] >>
+endobj
+2991 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 336.453 null ] >>
+endobj
+2992 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 325.494 null ] >>
+endobj
+2993 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 314.535 null ] >>
+endobj
+2994 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 261.733 null ] >>
+endobj
+2995 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 250.774 null ] >>
+endobj
+2996 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 239.816 null ] >>
+endobj
+2997 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 228.857 null ] >>
+endobj
+2998 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 217.898 null ] >>
+endobj
+2999 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 206.939 null ] >>
+endobj
+3000 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 195.98 null ] >>
+endobj
+3001 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 185.021 null ] >>
+endobj
+3002 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 174.062 null ] >>
+endobj
+3003 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 163.103 null ] >>
+endobj
+3004 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 152.144 null ] >>
+endobj
+3005 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 141.185 null ] >>
+endobj
+3006 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 130.226 null ] >>
+endobj
+3007 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 119.268 null ] >>
+endobj
+3008 0 obj
+<< /D [ 2959 0 R /XYZ 81.077 84.398 null ] >>
+endobj
+2958 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F65 185 0 R /F70 305 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+3011 0 obj
+<< /Filter /FlateDecode /Length 1872 >>
+stream
+xڽZYoF~H6{jQ-Ea`$Jf"
+IG9%^KG L|3;;ǎd5gU~/~>{vDgM&ьP&wSx}w]
+8.|}Y0)no|].
+6Y޽YGA<~'Sn f(iczx5!ܭV᜴˦p|lʈc>4<h Kh^D&cXYFꡝ"F>
+1=/>S_[It uY|
+՚sFѪpQVkNh"<Ө((Gcu
+BylЭ}H_<BL%N [E7I)ݦ(Tˋ/{xp G)7VfXDʞ臆",rW,,
+ ʑsR *Īx ۨ[twKNѾ~EJ#FVcQ@f
+-zЇ7\X({w!{ߦY9oiWnWjn]
+M|F
+\ O@ơ~ a)H4()gj&}H6,rt1rjR#=MFzQ>Յ<Rl 6JU9oEn1pO|cUUvgJ%=4И
+ڴZ}\Y*+* SȦCLA/}iY MG)8N.FU:سR`ZE+3W=e.,/SWKBX:thtԇx}ZH:b!y259, ,* ŦQ1,4xTFFdTH 'x'x ;{N'xq}Sc uט>#4xSjN)9ܑT)"nK `/,^ݪ:Y~jW{I0 R¶CwxZ:
+h]'5v.p~ɵ K:пյ⥄ȲҮpGk.0#5䄶CqqԻ*<MF0BeS.JcEWn?<6?`&ȑEM+<0~ddT8X̕cIFп5sfiP㡻%`YN|djg(uU=p»}^y9
+ޤPv(Q]2
+},z{ҏhPvjzhD[;!x}-%Pe. N
+endstream
+endobj
+3010 0 obj
+<< /Type /Page /Contents 3011 0 R /Resources 3009 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2759 0 R >>
+endobj
+3012 0 obj
+<< /D [ 3010 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+3013 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+3014 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+3015 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+3016 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+3017 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+3018 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+3019 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+3020 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+3021 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+3022 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+3023 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+3024 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+3025 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+3026 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 626.366 null ] >>
+endobj
+3027 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 615.407 null ] >>
+endobj
+3028 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 604.448 null ] >>
+endobj
+3029 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 593.489 null ] >>
+endobj
+3030 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 582.53 null ] >>
+endobj
+3031 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 571.571 null ] >>
+endobj
+3032 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 536.702 null ] >>
+endobj
+3033 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 525.743 null ] >>
+endobj
+3034 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 458.994 null ] >>
+endobj
+3035 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 448.035 null ] >>
+endobj
+3036 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 437.076 null ] >>
+endobj
+3037 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 426.117 null ] >>
+endobj
+3038 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 415.158 null ] >>
+endobj
+3039 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 404.199 null ] >>
+endobj
+3040 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 337.449 null ] >>
+endobj
+3041 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 326.49 null ] >>
+endobj
+3042 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 315.532 null ] >>
+endobj
+3043 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 304.573 null ] >>
+endobj
+3044 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 293.614 null ] >>
+endobj
+3045 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 282.655 null ] >>
+endobj
+3046 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 271.696 null ] >>
+endobj
+3047 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 260.737 null ] >>
+endobj
+3048 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 249.778 null ] >>
+endobj
+3049 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 238.819 null ] >>
+endobj
+3050 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 227.86 null ] >>
+endobj
+3051 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 216.901 null ] >>
+endobj
+3052 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 205.943 null ] >>
+endobj
+3053 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 194.984 null ] >>
+endobj
+3054 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 184.025 null ] >>
+endobj
+3055 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 173.066 null ] >>
+endobj
+3056 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 162.107 null ] >>
+endobj
+3057 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 151.148 null ] >>
+endobj
+3058 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 140.189 null ] >>
+endobj
+3059 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 129.23 null ] >>
+endobj
+3060 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 118.271 null ] >>
+endobj
+3061 0 obj
+<< /D [ 3010 0 R /XYZ 81.077 107.312 null ] >>
+endobj
+3009 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F70 305 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+3064 0 obj
+<< /Filter /FlateDecode /Length 1896 >>
+stream
+xڽZ[D~﯈ԗDby.QUU @BJ}r4%U휱']LN(:̙szFg>'_dvfU\ʹ%Bϴb*6~n\F1o6$nz^MV.tN໪>eSUlmw/r纛nqNnux{=̃!)%Rx&yy|&D3R#Z)LĐ\M(ĠzZ4 C~ ZMU3-X>B$O2(IoaefXaQ ,Pj@M<IT7@o
+!4ӊb{6}'0ht^ |kH( GN>yt-Wt>l/'Da!4o#CǬ.r,mBs1e(!%VGj`aJ^O
+b`1c8=h~
+5`I'^u [,K.bQ8BEqh괸Kݯ˲}<WQ2eCo&Ǔ[<qƢxFh ϷSOPbT(,EhVlPe-8:ϼE" XrI3He{^@‡(רT\:R9.GhW吊2Xj,Ur3zW.0w&C6B e&>Q=}9,gp rMC>e d\iq 2>ʄB95;#+[^@p!gpQ6fl޻Ʋ,X+c@K1Mo;NTAJ  ID㎢`ibQg'EiOݏ%l nP~h xzۢSRbO?8;_hF
+endstream
+endobj
+3063 0 obj
+<< /Type /Page /Contents 3064 0 R /Resources 3062 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2759 0 R >>
+endobj
+3065 0 obj
+<< /D [ 3063 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+3066 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 754.884 null ] >>
+endobj
+3067 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 743.925 null ] >>
+endobj
+3068 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 732.966 null ] >>
+endobj
+3069 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 722.007 null ] >>
+endobj
+3070 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 711.048 null ] >>
+endobj
+3071 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 700.089 null ] >>
+endobj
+3072 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 689.131 null ] >>
+endobj
+3073 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+3074 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+3075 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 626.366 null ] >>
+endobj
+3076 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 615.407 null ] >>
+endobj
+3077 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 604.448 null ] >>
+endobj
+3078 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 593.489 null ] >>
+endobj
+3079 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 582.53 null ] >>
+endobj
+3080 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 571.571 null ] >>
+endobj
+3081 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 560.613 null ] >>
+endobj
+3082 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 549.654 null ] >>
+endobj
+3083 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 538.695 null ] >>
+endobj
+3084 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 527.736 null ] >>
+endobj
+3085 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 516.777 null ] >>
+endobj
+3086 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 505.818 null ] >>
+endobj
+3087 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 476.926 null ] >>
+endobj
+3088 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 465.967 null ] >>
+endobj
+3089 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 455.009 null ] >>
+endobj
+3090 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 424.124 null ] >>
+endobj
+3091 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 413.165 null ] >>
+endobj
+3092 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 402.207 null ] >>
+endobj
+3093 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 391.248 null ] >>
+endobj
+3094 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 380.289 null ] >>
+endobj
+3095 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 343.427 null ] >>
+endobj
+3096 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 332.468 null ] >>
+endobj
+3097 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 321.509 null ] >>
+endobj
+3098 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 310.55 null ] >>
+endobj
+3099 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 299.591 null ] >>
+endobj
+3100 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 288.632 null ] >>
+endobj
+3101 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 272.692 null ] >>
+endobj
+3102 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 261.733 null ] >>
+endobj
+3103 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 245.793 null ] >>
+endobj
+3104 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 234.834 null ] >>
+endobj
+3105 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 223.875 null ] >>
+endobj
+3106 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 212.916 null ] >>
+endobj
+3107 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 201.957 null ] >>
+endobj
+3108 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 190.999 null ] >>
+endobj
+3109 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 180.04 null ] >>
+endobj
+3110 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 169.081 null ] >>
+endobj
+3111 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 158.122 null ] >>
+endobj
+3112 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 147.163 null ] >>
+endobj
+3113 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 136.204 null ] >>
+endobj
+3114 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 125.245 null ] >>
+endobj
+3115 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 114.286 null ] >>
+endobj
+3116 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 103.327 null ] >>
+endobj
+3117 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 92.368 null ] >>
+endobj
+3118 0 obj
+<< /D [ 3063 0 R /XYZ 81.077 81.41 null ] >>
+endobj
+3062 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+3121 0 obj
+<< /Filter /FlateDecode /Length 2217 >>
+stream
+xZMo6ϯpm7ivwh9a046hǖ4})J(;Ų(=|?J&7d˻|ﱞhlr~A2)0J\o'tlM>#rZ!2ogbMu`敽a4_QG
+5qBBM
+S2+2 0&"nv
+h `L5B菘,7V'\^_&3* 'q іEi Xtic6|GsF8"\x%sE -=mG{~WNkU>/yQ?nteVn[we>ZZyc(!IpA(޺SV%"L ON ALP?T`4<bI:`L@i14QюE$~yk`qn\H| 7奻.\MEUNȮpW-HrQ[8@?Dӆuj,ΣM$VSb^{jn6 8P Goɶ8}l&8*1Wڬ}߯ksesҸPivA@5>FCGFC8DEv,ӯp(M;?@.6BƬ\cթ9B 鷭:CtOSkCH$0VQA-@GO3
+ѤM?R3c#g 1c#93 h=wSz~?`t
+)EL:c} f}܎Hi ~>RStA1>zX+k;@hSQݴn5گ}82Ws/-y2@z eCtg FK& G!ewJ xʌC=4MHa{"R^⨪%@&)}.%1`
+Gl +fCiAq<@[ c>
+IJCDM#JB荟pi Ứm+ؓ8iGu$.
+m.pSTUz.p:{T۠#^9%!?CjΉl |D.CPIo<& op 2囜C
+endstream
+endobj
+3120 0 obj
+<< /Type /Page /Contents 3121 0 R /Resources 3119 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2759 0 R >>
+endobj
+3122 0 obj
+<< /D [ 3120 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+3123 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 754.945 null ] >>
+endobj
+3124 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 743.986 null ] >>
+endobj
+3125 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 733.027 null ] >>
+endobj
+3126 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 722.068 null ] >>
+endobj
+3127 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 711.109 null ] >>
+endobj
+3128 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 676.482 null ] >>
+endobj
+3129 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 665.523 null ] >>
+endobj
+3130 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 654.564 null ] >>
+endobj
+3131 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 625.794 null ] >>
+endobj
+3132 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 614.835 null ] >>
+endobj
+3133 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 603.876 null ] >>
+endobj
+3134 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 592.917 null ] >>
+endobj
+3135 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 552.192 null ] >>
+endobj
+3136 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 541.233 null ] >>
+endobj
+3137 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 530.274 null ] >>
+endobj
+3138 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 519.315 null ] >>
+endobj
+3139 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 508.356 null ] >>
+endobj
+3140 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 497.397 null ] >>
+endobj
+3141 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 486.438 null ] >>
+endobj
+3142 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 475.479 null ] >>
+endobj
+3143 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 464.521 null ] >>
+endobj
+3144 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 453.562 null ] >>
+endobj
+3145 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 442.603 null ] >>
+endobj
+3146 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 431.644 null ] >>
+endobj
+3147 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 420.685 null ] >>
+endobj
+3148 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 404.866 null ] >>
+endobj
+3149 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 393.907 null ] >>
+endobj
+3150 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 382.948 null ] >>
+endobj
+3151 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 371.989 null ] >>
+endobj
+3152 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 361.03 null ] >>
+endobj
+3153 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 350.071 null ] >>
+endobj
+3154 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 339.113 null ] >>
+endobj
+3155 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 328.154 null ] >>
+endobj
+3156 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 317.195 null ] >>
+endobj
+3157 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 306.236 null ] >>
+endobj
+3158 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 295.277 null ] >>
+endobj
+3159 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 264.575 null ] >>
+endobj
+3160 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 188.226 null ] >>
+endobj
+3161 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 177.267 null ] >>
+endobj
+3162 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 166.308 null ] >>
+endobj
+3163 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 155.349 null ] >>
+endobj
+3164 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 144.39 null ] >>
+endobj
+3165 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 133.431 null ] >>
+endobj
+3166 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 122.473 null ] >>
+endobj
+3167 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+3168 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+3169 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+3170 0 obj
+<< /D [ 3120 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+3119 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+3173 0 obj
+<< /Filter /FlateDecode /Length 1806 >>
+stream
+xZKSF+R$'nK^(Cٿ==j4˶L/H+SDg3:{s@#Q 9kmg80xjlvr5{;Z'wX,qZ 1-;&d[f7m./quBq9ώz]Շ2ڲ%<(y8t
+FF>dQ,8 c=e!ؖ<[[UW8¤hStH4/ZT&.W/6ixiuu-&>M9!4f`荑|k1Xz1/A~ziC) ~%\"Eek&( -J" ~%),+*H4ɩ1(6E6T v)T.H)mV"Dk5'Ry5.1)VH6=|n;%4cah M~n#JSNY\f $M "tza. -[98͞S2X
+ɚU\c2Κv=na"rB ~ ''GhG8D9"oQ1mjuƫe>NۡCGY\-neRf0JTaқ=GX{ 0_즭)bjM\Ơa +L fϹ+Hx[ gs`Et#n'0T5镠񞣒qrZ ?]tR:A8-CYNJ G(:x:) #lVB:_IM 'Mx˜
+';F 6?j58b4 ai-YYPE$SB7Fu L2鴾l*릨οG<ꆎpHfNxVEÀq E4^Xjqc4q ͈a; )J[(J4=K~M)
+:y>B.8:G(Nݸ0Ĺ-uX@z]SWA=P+!;rv~E zmYTy;P b g
+f-M(?ҽWb }@HE hyVy#L!}fM k <& q1#gdPtFssf)J5tsvBDǠ~AoU zgTbQu&ph|<! G^GS)82+Zs9%\3tp2I zI;Rus?4UY4me9aͨ &| gEm%h'&| ;Էi1xn)RYˈ Q on~[2Xz]_kRbo ܗw~!PZi Mk#N&'|
+endstream
+endobj
+3172 0 obj
+<< /Type /Page /Contents 3173 0 R /Resources 3171 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2759 0 R >>
+endobj
+3174 0 obj
+<< /D [ 3172 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+3175 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+3176 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+3177 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+3178 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+3179 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+3180 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+3181 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+3182 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+3183 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+3184 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+3185 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+3186 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+3187 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+3188 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 626.366 null ] >>
+endobj
+3189 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 615.407 null ] >>
+endobj
+3190 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 604.448 null ] >>
+endobj
+3191 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 593.489 null ] >>
+endobj
+3192 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 577.578 null ] >>
+endobj
+3193 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 566.619 null ] >>
+endobj
+3194 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 555.66 null ] >>
+endobj
+3195 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 544.701 null ] >>
+endobj
+3196 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 533.742 null ] >>
+endobj
+3197 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 522.783 null ] >>
+endobj
+3198 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 511.824 null ] >>
+endobj
+3199 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 500.866 null ] >>
+endobj
+3200 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 489.907 null ] >>
+endobj
+3201 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 478.948 null ] >>
+endobj
+3202 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 467.989 null ] >>
+endobj
+3203 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 457.03 null ] >>
+endobj
+3204 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 446.071 null ] >>
+endobj
+3205 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 435.112 null ] >>
+endobj
+3206 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 424.153 null ] >>
+endobj
+3207 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 413.194 null ] >>
+endobj
+3208 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 402.235 null ] >>
+endobj
+3209 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 391.276 null ] >>
+endobj
+3210 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 380.318 null ] >>
+endobj
+3211 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 369.359 null ] >>
+endobj
+3212 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 358.4 null ] >>
+endobj
+3213 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 347.441 null ] >>
+endobj
+3214 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 336.482 null ] >>
+endobj
+3215 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 325.523 null ] >>
+endobj
+3216 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 314.564 null ] >>
+endobj
+3217 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 287.751 null ] >>
+endobj
+3218 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 276.793 null ] >>
+endobj
+3219 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 210.144 null ] >>
+endobj
+3220 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 199.185 null ] >>
+endobj
+3221 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 188.226 null ] >>
+endobj
+3222 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 177.267 null ] >>
+endobj
+3223 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 166.308 null ] >>
+endobj
+3224 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 155.349 null ] >>
+endobj
+3225 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 144.39 null ] >>
+endobj
+3226 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 133.431 null ] >>
+endobj
+3227 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 122.473 null ] >>
+endobj
+3228 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+3229 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+3230 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+3231 0 obj
+<< /D [ 3172 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+3171 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+3234 0 obj
+<< /Filter /FlateDecode /Length 1942 >>
+stream
+xZo6~_uoIˀ=
+JE\YiwiJtREKdtGǻSzFgݕ( ~͹g$1|:b0,DhiFfGL\`9I`#/ :lE VdG| Iz{zqU aRxU4N!ڨ,mWiQ^TU7Pgg粨mMCjsVVgK{0{ww.DŽ/;l<D)/;&;ф=ٜL7wm6߶kYd_Mge%Z] ګLRSEdCtgR9ᑁ7&]MO]PsWŪ]:QDhNQVxٱ$B&^6CMˎh>M`c&_z WPhN|4%%<EVs֝g
+n%
+9V+C̋^MrY̎G&{B&8Q&D:㲤& jUTvvKXg~LvP@R.
+/:6^pn(IgDxdF)2<#؝Pl埠[?[muݝ&ey@% ܧh&hDBS411MlEϬFegO߱xj}ke
+Wh4W$&QX1/h2ϚaFy&;y $$tw7pvck!<M>ʂQ 4#=)\wSArW]6TW[MC|Υ$ʟrG p tƛ<"JfoϮj5*AD*[+?k͕N<X> FE;t-)m=mS/Wu^v ڤ d/V g_6z <ћjh!h.FϬzݺ&պ1{1r5MeWId88=*7y5Q;Cو) +][ j"D͗2.h2{[iHBbލLzBĒ+kfu5wid7&L{\݂{֎:jmSz.kܮ
+53n)7u#}unvZuim=׭4ڶϴQ!fۧ
+""SzvJ'8D\q'lH:o)ԗ
+-@wl۸Nj;!"Gh*AZ:&w/ԓA:HSC4FϏ{UB1w4ù 9;6GGlW F~bgBF[an
+endstream
+endobj
+3233 0 obj
+<< /Type /Page /Contents 3234 0 R /Resources 3232 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3286 0 R >>
+endobj
+3235 0 obj
+<< /D [ 3233 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+3236 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+3237 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+3238 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+3239 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+3240 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+3241 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+3242 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+3243 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+3244 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+3245 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+3246 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+3247 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+3248 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 632.344 null ] >>
+endobj
+3249 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 621.385 null ] >>
+endobj
+3250 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 610.426 null ] >>
+endobj
+3251 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 599.467 null ] >>
+endobj
+3252 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 588.508 null ] >>
+endobj
+3253 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 545.669 null ] >>
+endobj
+3254 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 534.71 null ] >>
+endobj
+3255 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 523.751 null ] >>
+endobj
+3256 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 512.792 null ] >>
+endobj
+3257 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 501.833 null ] >>
+endobj
+3258 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 490.874 null ] >>
+endobj
+3259 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 479.915 null ] >>
+endobj
+3260 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 468.956 null ] >>
+endobj
+3261 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 457.997 null ] >>
+endobj
+3262 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 447.038 null ] >>
+endobj
+3263 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 436.08 null ] >>
+endobj
+3264 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 425.121 null ] >>
+endobj
+3265 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 414.162 null ] >>
+endobj
+3266 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 403.203 null ] >>
+endobj
+3267 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 392.244 null ] >>
+endobj
+3268 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 381.285 null ] >>
+endobj
+3269 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 370.326 null ] >>
+endobj
+3270 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 359.367 null ] >>
+endobj
+3271 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 328.483 null ] >>
+endobj
+3272 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 317.524 null ] >>
+endobj
+3273 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 306.565 null ] >>
+endobj
+3274 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 295.606 null ] >>
+endobj
+3275 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 284.647 null ] >>
+endobj
+3276 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 273.688 null ] >>
+endobj
+3277 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 218.894 null ] >>
+endobj
+3278 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 166.092 null ] >>
+endobj
+3279 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 155.133 null ] >>
+endobj
+3280 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 144.174 null ] >>
+endobj
+3281 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 133.215 null ] >>
+endobj
+3282 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 122.256 null ] >>
+endobj
+3283 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 111.297 null ] >>
+endobj
+3284 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 95.357 null ] >>
+endobj
+3285 0 obj
+<< /D [ 3233 0 R /XYZ 81.077 84.398 null ] >>
+endobj
+3232 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+3289 0 obj
+<< /Filter /FlateDecode /Length 3120 >>
+stream
+xڥZ[o~?">T bQ`w>[ǖ\IË.T|$+X4p. <7~? o4҂vs ÃHX?
+/Qh0'!I^֔Ҩe<6yY{sǢz>bEdԘO!p]fPpIuHRWkX=_bʲʭ%quYˋQc#fo<b(&8$ZOC%u^)^I4j#K;{D72=}i6fEuָgv늈([vyWiWOn$H
+r6
+#FqH#.UPԊҽVUjz[)՚I1D()SYwyee$q1m twޣH/kK8JVkNxT6Ut?ܟϴa􏧦.i Zg%߬3
+Z(sdc{!c I
+C޿`O?%,5I^40G<>sq 0P7 i)NTsDH%@n,/
+L.HH
+1E;2Rl)EU.:wkLӫrpw,uIc )ijj ADM~&`;Bv!4?9"T77VGik"`.0ں/f "/&pm ct8a{t}$df3 L[\ :Nqlt@T]c
+%0GJf.!g :Xڅ#u' ʆ?Ppec{4ʋo<HP.A~r<K6"P]ЋD@=$^$ ȧb$ݲ1'X8rxyt`o 0zևig2"8(g5 ?]@qk1 t?[fx י.2&qvfjShl;ɸP{#vYdmҬUKFu3%81>`L[ J
+Phcg
+:
+p#iʇᘐwq7x~n{y`ڍ[!dQN`)T8񋛼%>cx~<vS(70duh̷8KgOY_r!9"d`lj(HӤI`1qS|"|}dl&Y! X[]g4,byA%SxYR}gUiw}-Ҕgz/2t_ww3 :~I"
+E&P/_u&RN.+Vv(h)t<\K)R"v m.Ts{_{ۼo-y\.BnfbFH= GۜFU~ݠ1NOU{.eS4{}w*lfk
+}%ۜwM's^ܞsOkШ2n]5=:e:A}v|&`d8ʊtvvItJǃmH:?fC
+“ԿZ/yUN,`sn"Q؈ٙ
+Elc< y€K=y*
+>Zջ72a0tŢ]v6=7܈9}i) @Q i{]
+˸<}ioC{ޝQLq5C wOeR_mur+˯HZ":Xx
+wwkи >w'v?Xu?r
+endstream
+endobj
+3288 0 obj
+<< /Type /Page /Contents 3289 0 R /Resources 3287 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3286 0 R >>
+endobj
+3290 0 obj
+<< /D [ 3288 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+3291 0 obj
+<< /D [ 3288 0 R /XYZ 81.077 713.041 null ] >>
+endobj
+3292 0 obj
+<< /D [ 3288 0 R /XYZ 81.077 702.082 null ] >>
+endobj
+3293 0 obj
+<< /D [ 3288 0 R /XYZ 81.077 667.213 null ] >>
+endobj
+3294 0 obj
+<< /D [ 3288 0 R /XYZ 81.077 656.254 null ] >>
+endobj
+3295 0 obj
+<< /D [ 3288 0 R /XYZ 81.077 615.407 null ] >>
+endobj
+3296 0 obj
+<< /D [ 3288 0 R /XYZ 81.077 574.56 null ] >>
+endobj
+3297 0 obj
+<< /D [ 3288 0 R /XYZ 81.077 509.803 null ] >>
+endobj
+3298 0 obj
+<< /D [ 3288 0 R /XYZ 81.077 498.844 null ] >>
+endobj
+3299 0 obj
+<< /D [ 3288 0 R /XYZ 81.077 487.885 null ] >>
+endobj
+3300 0 obj
+<< /D [ 3288 0 R /XYZ 81.077 458.994 null ] >>
+endobj
+3301 0 obj
+<< /D [ 3288 0 R /XYZ 81.077 448.035 null ] >>
+endobj
+3302 0 obj
+<< /D [ 3288 0 R /XYZ 81.077 437.076 null ] >>
+endobj
+3303 0 obj
+<< /D [ 3288 0 R /XYZ 81.077 426.117 null ] >>
+endobj
+3304 0 obj
+<< /D [ 3288 0 R /XYZ 81.077 415.158 null ] >>
+endobj
+3305 0 obj
+<< /D [ 3288 0 R /XYZ 81.077 404.199 null ] >>
+endobj
+3306 0 obj
+<< /D [ 3288 0 R /XYZ 81.077 393.24 null ] >>
+endobj
+3307 0 obj
+<< /D [ 3288 0 R /XYZ 81.077 352.393 null ] >>
+endobj
+3308 0 obj
+<< /D [ 3288 0 R /XYZ 81.077 341.434 null ] >>
+endobj
+3309 0 obj
+<< /D [ 3288 0 R /XYZ 81.077 330.476 null ] >>
+endobj
+3310 0 obj
+<< /D [ 3288 0 R /XYZ 81.077 319.517 null ] >>
+endobj
+3311 0 obj
+<< /D [ 3288 0 R /XYZ 81.077 308.558 null ] >>
+endobj
+3312 0 obj
+<< /D [ 3288 0 R /XYZ 81.077 297.599 null ] >>
+endobj
+3313 0 obj
+<< /D [ 3288 0 R /XYZ 81.077 286.64 null ] >>
+endobj
+3314 0 obj
+<< /D [ 3288 0 R /XYZ 81.077 275.681 null ] >>
+endobj
+3315 0 obj
+<< /D [ 3288 0 R /XYZ 81.077 264.722 null ] >>
+endobj
+3316 0 obj
+<< /D [ 3288 0 R /XYZ 81.077 253.763 null ] >>
+endobj
+3317 0 obj
+<< /D [ 3288 0 R /XYZ 81.077 242.804 null ] >>
+endobj
+3318 0 obj
+<< /D [ 3288 0 R /XYZ 81.077 231.845 null ] >>
+endobj
+3319 0 obj
+<< /D [ 3288 0 R /XYZ 81.077 220.887 null ] >>
+endobj
+3320 0 obj
+<< /D [ 3288 0 R /XYZ 81.077 209.928 null ] >>
+endobj
+3321 0 obj
+<< /D [ 3288 0 R /XYZ 81.077 145.17 null ] >>
+endobj
+3322 0 obj
+<< /D [ 3288 0 R /XYZ 81.077 116.279 null ] >>
+endobj
+3323 0 obj
+<< /D [ 3288 0 R /XYZ 81.077 105.32 null ] >>
+endobj
+3287 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F20 186 0 R /F19 184 0 R /F70 305 0 R /F68 189 0 R /F64 183 0 R /F27 642 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+3326 0 obj
+<< /Filter /FlateDecode /Length 2255 >>
+stream
+xڽZێ}p0/6fxDyh"A4ڦme#iL}nT{=wtXŪb!m<wmX"gɘ|ھ#
+ij_i?bˬʮu~П,hL㪿Z:Wtj\O(C0Ґz}r~kaC2UhTgCkzM6\Rvrij$B "^*
+g$sCtn{뗶Svn^mC;nQ&hlg]8Tw)n .<us&XP٘`bobX CD252_7vCEB(JcL!kkF-Q"ړ^d lsv[,B{Y$,Yg`&IL2~/Xm
+7ʰdF8b<o
+}Oۖ.7TU=zEt!.z0ϳZζ;dwd@fvū+-)G;jwA`\)a1ل4KyomzNuml_1lcuLFnX\Cβ_\7,?4gi,ok-6]<Ϸmo13ǧMiӱ0-6vr{2ܺij5U'CՐFXJ$
+J “ZcaW!cDž=x 0, ](]duѰe-vuu:+! 1m"ͷˇ\?j#E?Cu%d<r czd0--no _A%DAG[VǬl zx Plbb\}6o<g mV4g-x"z(+#1I'i s4
+endstream
+endobj
+3325 0 obj
+<< /Type /Page /Contents 3326 0 R /Resources 3324 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3286 0 R >>
+endobj
+3327 0 obj
+<< /D [ 3325 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+3328 0 obj
+<< /D [ 3325 0 R /XYZ 81.077 743.55 null ] >>
+endobj
+3329 0 obj
+<< /D [ 3325 0 R /XYZ 81.077 732.591 null ] >>
+endobj
+3330 0 obj
+<< /D [ 3325 0 R /XYZ 81.077 721.632 null ] >>
+endobj
+3331 0 obj
+<< /D [ 3325 0 R /XYZ 81.077 710.673 null ] >>
+endobj
+3332 0 obj
+<< /D [ 3325 0 R /XYZ 81.077 699.714 null ] >>
+endobj
+3333 0 obj
+<< /D [ 3325 0 R /XYZ 81.077 688.755 null ] >>
+endobj
+3334 0 obj
+<< /D [ 3325 0 R /XYZ 81.077 677.797 null ] >>
+endobj
+3335 0 obj
+<< /D [ 3325 0 R /XYZ 81.077 666.838 null ] >>
+endobj
+3336 0 obj
+<< /D [ 3325 0 R /XYZ 81.077 655.879 null ] >>
+endobj
+3337 0 obj
+<< /D [ 3325 0 R /XYZ 81.077 644.92 null ] >>
+endobj
+3338 0 obj
+<< /D [ 3325 0 R /XYZ 81.077 633.961 null ] >>
+endobj
+3339 0 obj
+<< /D [ 3325 0 R /XYZ 81.077 623.002 null ] >>
+endobj
+3340 0 obj
+<< /D [ 3325 0 R /XYZ 81.077 601.201 null ] >>
+endobj
+3341 0 obj
+<< /D [ 3325 0 R /XYZ 81.077 590.242 null ] >>
+endobj
+3342 0 obj
+<< /D [ 3325 0 R /XYZ 81.077 579.283 null ] >>
+endobj
+3343 0 obj
+<< /D [ 3325 0 R /XYZ 81.077 568.324 null ] >>
+endobj
+3344 0 obj
+<< /D [ 3325 0 R /XYZ 81.077 557.365 null ] >>
+endobj
+3345 0 obj
+<< /D [ 3325 0 R /XYZ 81.077 523.609 null ] >>
+endobj
+3346 0 obj
+<< /D [ 3325 0 R /XYZ 81.077 512.65 null ] >>
+endobj
+3347 0 obj
+<< /D [ 3325 0 R /XYZ 81.077 501.691 null ] >>
+endobj
+3348 0 obj
+<< /D [ 3325 0 R /XYZ 81.077 490.732 null ] >>
+endobj
+3349 0 obj
+<< /D [ 3325 0 R /XYZ 81.077 479.773 null ] >>
+endobj
+3350 0 obj
+<< /D [ 3325 0 R /XYZ 81.077 468.815 null ] >>
+endobj
+3351 0 obj
+<< /D [ 3325 0 R /XYZ 81.077 457.856 null ] >>
+endobj
+3352 0 obj
+<< /D [ 3325 0 R /XYZ 81.077 446.897 null ] >>
+endobj
+3353 0 obj
+<< /D [ 3325 0 R /XYZ 81.077 402.557 null ] >>
+endobj
+3354 0 obj
+<< /D [ 3325 0 R /XYZ 81.077 358.217 null ] >>
+endobj
+3355 0 obj
+<< /D [ 3325 0 R /XYZ 81.077 347.258 null ] >>
+endobj
+3356 0 obj
+<< /D [ 3325 0 R /XYZ 81.077 336.299 null ] >>
+endobj
+3357 0 obj
+<< /D [ 3325 0 R /XYZ 81.077 325.34 null ] >>
+endobj
+3358 0 obj
+<< /D [ 3325 0 R /XYZ 81.077 314.381 null ] >>
+endobj
+53 0 obj
+<< /D [ 3325 0 R /XYZ 79.37 292.779 null ] >>
+endobj
+3359 0 obj
+<< /D [ 3325 0 R /XYZ 81.077 206.909 null ] >>
+endobj
+3360 0 obj
+<< /D [ 3325 0 R /XYZ 81.077 195.95 null ] >>
+endobj
+3361 0 obj
+<< /D [ 3325 0 R /XYZ 81.077 144.39 null ] >>
+endobj
+3362 0 obj
+<< /D [ 3325 0 R /XYZ 81.077 133.431 null ] >>
+endobj
+3363 0 obj
+<< /D [ 3325 0 R /XYZ 81.077 122.473 null ] >>
+endobj
+3364 0 obj
+<< /D [ 3325 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+3365 0 obj
+<< /D [ 3325 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+3366 0 obj
+<< /D [ 3325 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+3367 0 obj
+<< /D [ 3325 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+3324 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R /F67 187 0 R /F70 305 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+3370 0 obj
+<< /Filter /FlateDecode /Length 1971 >>
+stream
+xZ[s۸~ϯP'yZcq'N3}CNh E*$'/ ۊ}1/G|
+&E$0I1h"˜f 'ra`F0!qJac;&dWugťM~`iW9
+Mq юgt9]U|&1mbp1jZۺ,+reQfcl\le]Q&G@ӧ
+n*+b]wU$a,@1az
+#iB$1P .%O6͚2&cq&|il+ o!b-%뉵('m6`#x?t_䜹ēc8r!jm6`^8!x_eZ^ݬYe;1s*
+z<fzlU݂^ȻᗱAn~.C6Q,zZAK7>T2:< BU]}^Т)ׅмO
+ 0bUYO"R{+N{j+>](GțZ
+ЎGuWgl(.ΗfiShMh+G9l\Іn(y<
+!{WMϗ(IʗT8VypBG#u9!lkX$!翭&o
+(&g[HHW1iB0cσW`X8/.<*fc]t !I?ل56f-ťfa({ݺh1om`+Fٟn3HE!9L^ CG YYN CLǩSp2gM?m5)j#h #\̺tfH(j *OM.-34ox2 FNĈʃ"t_XtA.ZUo9B̵ĠMOHq5
+ܛ(!wߋDSF8aݽbw,?XQի;0
+endstream
+endobj
+3369 0 obj
+<< /Type /Page /Contents 3370 0 R /Resources 3368 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3286 0 R >>
+endobj
+3371 0 obj
+<< /D [ 3369 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+3372 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 754.884 null ] >>
+endobj
+3373 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 743.925 null ] >>
+endobj
+3374 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 709.056 null ] >>
+endobj
+3375 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 698.097 null ] >>
+endobj
+3376 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 687.138 null ] >>
+endobj
+3377 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 676.179 null ] >>
+endobj
+3378 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 665.22 null ] >>
+endobj
+3379 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 618.396 null ] >>
+endobj
+3380 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 607.437 null ] >>
+endobj
+3381 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 596.478 null ] >>
+endobj
+3382 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 585.519 null ] >>
+endobj
+3383 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 574.56 null ] >>
+endobj
+3384 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 563.601 null ] >>
+endobj
+3385 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 552.642 null ] >>
+endobj
+3386 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 541.684 null ] >>
+endobj
+3387 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 530.725 null ] >>
+endobj
+3388 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 519.766 null ] >>
+endobj
+3389 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 508.807 null ] >>
+endobj
+3390 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 497.848 null ] >>
+endobj
+3391 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 486.889 null ] >>
+endobj
+3392 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 475.93 null ] >>
+endobj
+3393 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 464.971 null ] >>
+endobj
+3394 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 454.012 null ] >>
+endobj
+3395 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 443.053 null ] >>
+endobj
+3396 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 432.094 null ] >>
+endobj
+3397 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 421.136 null ] >>
+endobj
+3398 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 410.177 null ] >>
+endobj
+3399 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 399.218 null ] >>
+endobj
+3400 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 388.259 null ] >>
+endobj
+3401 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 353.39 null ] >>
+endobj
+3402 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 342.431 null ] >>
+endobj
+3403 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 331.472 null ] >>
+endobj
+3404 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 320.513 null ] >>
+endobj
+3405 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 285.644 null ] >>
+endobj
+3406 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 274.685 null ] >>
+endobj
+3407 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 263.726 null ] >>
+endobj
+3408 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 252.767 null ] >>
+endobj
+3409 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 241.808 null ] >>
+endobj
+3410 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 189.006 null ] >>
+endobj
+3411 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 178.047 null ] >>
+endobj
+3412 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 167.088 null ] >>
+endobj
+3413 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 156.129 null ] >>
+endobj
+3414 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 145.17 null ] >>
+endobj
+3415 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 134.212 null ] >>
+endobj
+3416 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 123.253 null ] >>
+endobj
+3417 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 112.294 null ] >>
+endobj
+3418 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 101.335 null ] >>
+endobj
+3419 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 90.376 null ] >>
+endobj
+3420 0 obj
+<< /D [ 3369 0 R /XYZ 81.077 79.417 null ] >>
+endobj
+3368 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F68 189 0 R /F64 183 0 R /F20 186 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+3423 0 obj
+<< /Filter /FlateDecode /Length 1558 >>
+stream
+xڵZMo8WxK
+iEM=R=t AD,Qd߾Jȭjr%=r1] ]>oO~_:f&5LKtfF͒YهSn~q.
+nWw;љa31LME>.2mu׸h3 ט~
+]Nlۦ7ղr_l)Ѽڗ<65X+?fr[\/I-vj)]J[ҟQ}ĊSIYOt[ef宠G7էjsW=f]=_jWOoI9 DO>Dd$1[qb$' cDv+B_3;
+j|xss_A5qrͬ!=8 ?P{Pb,)p !x C #ܛIFA9}eG^ΰ&& !iV_̫{ "ʌ533!%\8ӏHS~-<XTY$~s)nC$aN K$7й1IY7O41Y EȵF^#3,Br
+)Q8ϵܸ,#,3 ޿#\=ɿ#4 IAwZZ艼qG৉F&ì?y8+ha ܟ[ Ē[6#4~@,?׿Gh߿c),^0Y|whe#(=qlBtVEUٕtbQȪXCzXG .4hie;ʥn]z뚶ȁ0qtO!qBtG)k2?ml{&úvTʈ670׮ӐqrӔ@f67-<o\^i/+V<Aia9BhhO?HU+? #_"ˉVz&)-B՟Fj
+endstream
+endobj
+3422 0 obj
+<< /Type /Page /Contents 3423 0 R /Resources 3421 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3286 0 R >>
+endobj
+3424 0 obj
+<< /D [ 3422 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+3425 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+3426 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+3427 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+3428 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+3429 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+3430 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+3431 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+3432 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+3433 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+3434 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+3435 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+3436 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+3437 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+3438 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 626.366 null ] >>
+endobj
+3439 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 615.407 null ] >>
+endobj
+3440 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 604.448 null ] >>
+endobj
+3441 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 593.489 null ] >>
+endobj
+3442 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 582.53 null ] >>
+endobj
+3443 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 571.571 null ] >>
+endobj
+3444 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 560.613 null ] >>
+endobj
+3445 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 525.743 null ] >>
+endobj
+3446 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 514.784 null ] >>
+endobj
+3447 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 503.825 null ] >>
+endobj
+3448 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 492.867 null ] >>
+endobj
+3449 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 481.908 null ] >>
+endobj
+3450 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 470.949 null ] >>
+endobj
+3451 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 459.99 null ] >>
+endobj
+3452 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 449.031 null ] >>
+endobj
+3453 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 420.139 null ] >>
+endobj
+3454 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 409.18 null ] >>
+endobj
+3455 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 374.311 null ] >>
+endobj
+3456 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 363.352 null ] >>
+endobj
+3457 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 352.393 null ] >>
+endobj
+3458 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 341.434 null ] >>
+endobj
+3459 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 330.476 null ] >>
+endobj
+3460 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 295.606 null ] >>
+endobj
+3461 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 284.647 null ] >>
+endobj
+3462 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 273.688 null ] >>
+endobj
+3463 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 262.73 null ] >>
+endobj
+3464 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 251.771 null ] >>
+endobj
+3465 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 216.901 null ] >>
+endobj
+3466 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 205.943 null ] >>
+endobj
+3467 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 194.984 null ] >>
+endobj
+3468 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 184.025 null ] >>
+endobj
+3469 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 173.066 null ] >>
+endobj
+3470 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 162.107 null ] >>
+endobj
+3471 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 151.148 null ] >>
+endobj
+3472 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 140.189 null ] >>
+endobj
+3473 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 129.23 null ] >>
+endobj
+3474 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 118.271 null ] >>
+endobj
+3475 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 107.312 null ] >>
+endobj
+3476 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 96.354 null ] >>
+endobj
+3477 0 obj
+<< /D [ 3422 0 R /XYZ 81.077 85.395 null ] >>
+endobj
+3421 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+3480 0 obj
+<< /Filter /FlateDecode /Length 1967 >>
+stream
+xڽZKoFWEBBP=d hHJVZ\jUlEqfgfgYN&t=\wnv"LIt&VhFf)w% rbZ1)K)w&S.foWUQ>pOe\vn=n![7wyݴc O\tO-UQ(?,URRhcQ-&)r?pIc8΂eb@9Zn 2SE )of*%St5s8"@>Y1 !mѴ~[C)E?s{y/ӗqj2 ŒJ!kPm!BLyA9%S)M6X!ܭüB+e X:O)ƈ
+<RЯhcJN3&eıh؃wmhfWW/7,L}(&."d~FˆWFehov=۬p~3ClhE#C%6ruf12K(Vka(\Lr5EꟵb:CT_VĨDǩ>F{5W@uu(gHF)8F]PV=Z%J8m>Áj4u6[MP6dnq vvJTҼ5n l%F< N$(q.fHeq3F.V:1["Muژ95JС} Yon*P-2<a!97a>5.'7 -\tLto|cfMOq9=!4.Y'hw-t"}N;ǦȖ6ӢQFtFR9TKT6MxBB+V(•[$_w<;M TB$L uI"e\񲀋tofow*a;}T_"|e
+xyxm6~U@ ATS6a:DR?/.:Q dOВ̦|LiH!: :Q%h1q3whiUvc43 lCQ{2A{4m +WuʨفQG]H!ZRP9Ad4H i5F?yuʴxcZ#p7%sȟFn$f&6m[hN5`"%6:GV//\KEd4F9n&cq>shzvb|l.;~CoZO*_oDO B'/74A;u4eycY5D+Oݯʅ
+RyYuG *<s#?@FcPP:dVS>s)gf
+2zCA4ROe6j“}?qe.7% eݴ@$ɳj:8<xf۹cYzL.& | E?^9s.[jxA܁3x.__ó28/ǪA;])dʃ(eؠL`& m1v<?#~agu~w !z8#6"ٞ2WwАxQ哟!i7"{j`! E0 '@~ + քRq&C8 Hgq)F]U"Y)c070(HB &ù?\G"?_}(~AS
+,d9ncx?ܻY. 90(+p{VC#V5Pnt}|d9,+QMS>T2uT"crFJtNq(aQ9e 
+Kt>+ 5
+endstream
+endobj
+3479 0 obj
+<< /Type /Page /Contents 3480 0 R /Resources 3478 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3286 0 R >>
+endobj
+3481 0 obj
+<< /D [ 3479 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+3482 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+3483 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+3484 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+3485 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+3486 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+3487 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 696.104 null ] >>
+endobj
+3488 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 685.146 null ] >>
+endobj
+3489 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 650.276 null ] >>
+endobj
+3490 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 639.317 null ] >>
+endobj
+3491 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 628.358 null ] >>
+endobj
+3492 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 617.4 null ] >>
+endobj
+3493 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 606.441 null ] >>
+endobj
+3494 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 595.482 null ] >>
+endobj
+3495 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 584.523 null ] >>
+endobj
+3496 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 573.564 null ] >>
+endobj
+3497 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 562.605 null ] >>
+endobj
+3498 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 551.646 null ] >>
+endobj
+3499 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 540.687 null ] >>
+endobj
+3500 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 529.728 null ] >>
+endobj
+3501 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 518.769 null ] >>
+endobj
+3502 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 507.811 null ] >>
+endobj
+3503 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 496.852 null ] >>
+endobj
+3504 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 485.893 null ] >>
+endobj
+3505 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 474.934 null ] >>
+endobj
+3506 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 463.975 null ] >>
+endobj
+3507 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 453.016 null ] >>
+endobj
+3508 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 442.057 null ] >>
+endobj
+3509 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 413.165 null ] >>
+endobj
+3510 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 402.207 null ] >>
+endobj
+3511 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 373.315 null ] >>
+endobj
+3512 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 362.356 null ] >>
+endobj
+3513 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 351.397 null ] >>
+endobj
+3514 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 340.438 null ] >>
+endobj
+3515 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 329.479 null ] >>
+endobj
+3516 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 318.52 null ] >>
+endobj
+3517 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 302.58 null ] >>
+endobj
+3518 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 291.621 null ] >>
+endobj
+3519 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 280.662 null ] >>
+endobj
+3520 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 269.703 null ] >>
+endobj
+3521 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 258.745 null ] >>
+endobj
+3522 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 180.04 null ] >>
+endobj
+3523 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 169.081 null ] >>
+endobj
+3524 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 158.122 null ] >>
+endobj
+3525 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 147.163 null ] >>
+endobj
+3526 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 136.204 null ] >>
+endobj
+3527 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 125.245 null ] >>
+endobj
+3528 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 114.286 null ] >>
+endobj
+3529 0 obj
+<< /D [ 3479 0 R /XYZ 81.077 103.327 null ] >>
+endobj
+3478 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+3532 0 obj
+<< /Filter /FlateDecode /Length 2365 >>
+stream
+xڵZ[o~_u ˻HX]@PN!ȶcK^I;Dn!E#?/x0?DD#-xB&F,$ ,ds:onef_SxD-|%ݥ}.(:Ŭo4*R\M2𘗶DFiY,I77)^dM)<m7grQi+f,)MmБĹFK (1"!˳FT |x,#de ysK})ʢ-}% FzDW§۪im!胠F(X",D(@i˒jz0(d*P<L&!LI͗m@]he aU/!Q_{& !k}Yd4v]luMS$h|<Dˮ*vի}bҕ KhCwUlӇ&o]ie)|@w/|FsǗ15uV?ei;x+(WōGyV`o1)B!AGǑѾ%K_׳fĀKȣKd_V6 fE 6NҠT"E<1zC܂=@ƙ.Xז
+Y]gƋn©a[
+ у=
+FsqW Gϻ` e
+@:r ŵbq4 yu!uܑ0>-w)I\ }c$u~ą
+gѸ
+8,a\أs&ր^eǺ^_̱Is^,LiDx(s?u˅Cw:[}:w꾖ՉCb;M֝iV
+i;u Ŵhhl!T!?h&E\iJb8zgkp߫Xt.箱SM0b[5 Y#ߚΝ1<E<0gv/'S]qG1%.
+ D yz^M888e}NBv$U,6<U7zd|hg?jQCw0_y^v>^ Xjr4F4Š -5E}ʋ|,ֳ t.ڷeiRRԥJ,֒ŭ(}Ξכ;sx$
+Ąc~my_ 9%C
+endstream
+endobj
+3531 0 obj
+<< /Type /Page /Contents 3532 0 R /Resources 3530 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3286 0 R >>
+endobj
+3533 0 obj
+<< /D [ 3531 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+3534 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 743.01 null ] >>
+endobj
+3535 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 732.051 null ] >>
+endobj
+3536 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 721.092 null ] >>
+endobj
+3537 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 710.133 null ] >>
+endobj
+3538 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 699.174 null ] >>
+endobj
+3539 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 688.215 null ] >>
+endobj
+3540 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 677.256 null ] >>
+endobj
+3541 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 666.297 null ] >>
+endobj
+3542 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 625.612 null ] >>
+endobj
+3543 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 614.653 null ] >>
+endobj
+3544 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 603.694 null ] >>
+endobj
+3545 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 592.735 null ] >>
+endobj
+3546 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 581.777 null ] >>
+endobj
+3547 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 570.818 null ] >>
+endobj
+3548 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 559.859 null ] >>
+endobj
+3549 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 548.9 null ] >>
+endobj
+3550 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 537.941 null ] >>
+endobj
+3551 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 526.982 null ] >>
+endobj
+3552 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 516.023 null ] >>
+endobj
+3553 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 505.064 null ] >>
+endobj
+3554 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 494.105 null ] >>
+endobj
+3555 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 483.146 null ] >>
+endobj
+3556 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 472.188 null ] >>
+endobj
+3557 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 461.229 null ] >>
+endobj
+3558 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 450.27 null ] >>
+endobj
+3559 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 439.311 null ] >>
+endobj
+3560 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 428.352 null ] >>
+endobj
+3561 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 417.393 null ] >>
+endobj
+3562 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 406.434 null ] >>
+endobj
+3563 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 395.475 null ] >>
+endobj
+3564 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 384.516 null ] >>
+endobj
+3565 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 373.557 null ] >>
+endobj
+3566 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 362.598 null ] >>
+endobj
+3567 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 351.64 null ] >>
+endobj
+3568 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 340.681 null ] >>
+endobj
+3569 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 311.951 null ] >>
+endobj
+3570 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 300.992 null ] >>
+endobj
+3571 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 290.033 null ] >>
+endobj
+3572 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 261.303 null ] >>
+endobj
+3573 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 250.344 null ] >>
+endobj
+3574 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 239.385 null ] >>
+endobj
+3575 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 228.426 null ] >>
+endobj
+3576 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 164.154 null ] >>
+endobj
+3577 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 153.195 null ] >>
+endobj
+3578 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+3579 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+3580 0 obj
+<< /D [ 3531 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+3530 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R /F30 644 0 R /F70 305 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+3583 0 obj
+<< /Filter /FlateDecode /Length 2420 >>
+stream
+xڭZ[o6~ϯ> lXN`=E t0ڒ$r/PDZʹ/L#7$$p- pw0*Ld0(H`9D0eJf-~0(
+At*typBmkshBeYf?{N/?}Z6;̪*{]¨h9i069D0a~2Q/J
+b߬}bfd܁kc궵)4g!ڭgNR 2EK"[3EzvO)Z͓f~rNvȋmeH%#ȩ^eZ;gÉ7/j]5)[ߍ)+
+aFTKiiqm}Z/9{{Ǔ *ݿ#
+ ѷwsy4Df&<>Xkjk 2ʾScjNe@8(69__YXioy/WחY+اav"(A4Uz<n$>f+^z"D]d EE}Շzk@}|RQ
+=o0G[ܕ/1
+l{Ҵt
+긫뵦fn9-E!N =WZ.+>£ͽ% 0}vP2E{W4dz(~UOȌA[N 8p<:w۞%"ҧՏ kl`5.I,lP̈́wf
+86 v߿=pG±{m%W&Ov؎V΋3dՕ<9My^_LS$v $7&Epinx7!Hʎ yhK{@`X(Ni6B".BN'a_%H.#4*[8X<uYiM~M;_tMJq 竔 )b?8N{\%n=)X}M{ c+\=)\hesd]T0LFs- {uϟ@K(/⒊"
+endstream
+endobj
+3582 0 obj
+<< /Type /Page /Contents 3583 0 R /Resources 3581 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3286 0 R >>
+endobj
+3584 0 obj
+<< /D [ 3582 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+3585 0 obj
+<< /D [ 3582 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+3586 0 obj
+<< /D [ 3582 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+3587 0 obj
+<< /D [ 3582 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+3588 0 obj
+<< /D [ 3582 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+3589 0 obj
+<< /D [ 3582 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+3590 0 obj
+<< /D [ 3582 0 R /XYZ 81.077 684.149 null ] >>
+endobj
+3591 0 obj
+<< /D [ 3582 0 R /XYZ 81.077 673.19 null ] >>
+endobj
+3592 0 obj
+<< /D [ 3582 0 R /XYZ 81.077 662.231 null ] >>
+endobj
+3593 0 obj
+<< /D [ 3582 0 R /XYZ 81.077 651.273 null ] >>
+endobj
+3594 0 obj
+<< /D [ 3582 0 R /XYZ 81.077 640.314 null ] >>
+endobj
+3595 0 obj
+<< /D [ 3582 0 R /XYZ 81.077 624.373 null ] >>
+endobj
+3596 0 obj
+<< /D [ 3582 0 R /XYZ 81.077 613.415 null ] >>
+endobj
+3597 0 obj
+<< /D [ 3582 0 R /XYZ 81.077 602.456 null ] >>
+endobj
+3598 0 obj
+<< /D [ 3582 0 R /XYZ 81.077 547.661 null ] >>
+endobj
+3599 0 obj
+<< /D [ 3582 0 R /XYZ 81.077 536.702 null ] >>
+endobj
+3600 0 obj
+<< /D [ 3582 0 R /XYZ 81.077 525.743 null ] >>
+endobj
+3601 0 obj
+<< /D [ 3582 0 R /XYZ 81.077 514.784 null ] >>
+endobj
+3602 0 obj
+<< /D [ 3582 0 R /XYZ 81.077 503.825 null ] >>
+endobj
+3603 0 obj
+<< /D [ 3582 0 R /XYZ 81.077 492.867 null ] >>
+endobj
+3604 0 obj
+<< /D [ 3582 0 R /XYZ 81.077 481.908 null ] >>
+endobj
+3605 0 obj
+<< /D [ 3582 0 R /XYZ 81.077 470.949 null ] >>
+endobj
+3606 0 obj
+<< /D [ 3582 0 R /XYZ 81.077 459.99 null ] >>
+endobj
+3607 0 obj
+<< /D [ 3582 0 R /XYZ 81.077 449.031 null ] >>
+endobj
+3608 0 obj
+<< /D [ 3582 0 R /XYZ 81.077 438.072 null ] >>
+endobj
+3609 0 obj
+<< /D [ 3582 0 R /XYZ 81.077 397.225 null ] >>
+endobj
+3610 0 obj
+<< /D [ 3582 0 R /XYZ 81.077 386.266 null ] >>
+endobj
+3611 0 obj
+<< /D [ 3582 0 R /XYZ 81.077 375.307 null ] >>
+endobj
+3612 0 obj
+<< /D [ 3582 0 R /XYZ 81.077 310.55 null ] >>
+endobj
+3613 0 obj
+<< /D [ 3582 0 R /XYZ 81.077 299.591 null ] >>
+endobj
+3614 0 obj
+<< /D [ 3582 0 R /XYZ 81.077 288.632 null ] >>
+endobj
+3615 0 obj
+<< /D [ 3582 0 R /XYZ 81.077 235.83 null ] >>
+endobj
+3616 0 obj
+<< /D [ 3582 0 R /XYZ 81.077 224.872 null ] >>
+endobj
+3617 0 obj
+<< /D [ 3582 0 R /XYZ 81.077 213.913 null ] >>
+endobj
+3618 0 obj
+<< /D [ 3582 0 R /XYZ 81.077 202.954 null ] >>
+endobj
+3619 0 obj
+<< /D [ 3582 0 R /XYZ 81.077 191.995 null ] >>
+endobj
+3620 0 obj
+<< /D [ 3582 0 R /XYZ 81.077 181.036 null ] >>
+endobj
+3621 0 obj
+<< /D [ 3582 0 R /XYZ 81.077 170.077 null ] >>
+endobj
+3622 0 obj
+<< /D [ 3582 0 R /XYZ 81.077 159.118 null ] >>
+endobj
+3623 0 obj
+<< /D [ 3582 0 R /XYZ 81.077 148.159 null ] >>
+endobj
+3624 0 obj
+<< /D [ 3582 0 R /XYZ 81.077 137.2 null ] >>
+endobj
+3625 0 obj
+<< /D [ 3582 0 R /XYZ 81.077 126.241 null ] >>
+endobj
+3626 0 obj
+<< /D [ 3582 0 R /XYZ 81.077 95.357 null ] >>
+endobj
+3627 0 obj
+<< /D [ 3582 0 R /XYZ 81.077 84.398 null ] >>
+endobj
+3581 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+3630 0 obj
+<< /Filter /FlateDecode /Length 2217 >>
+stream
+xڽZ[o6~ϯpч*]dnEX@0%W߾DcX"u\twO~/
+rŏpatrpA!<!%$$aI&wy~?Z '
+i)
+ (g:DVaj֛啠_Monbӕu5Vn
+B\hz=CH:5sXVVg|LH(5Αwi=0GցtӮٚ۽ʜiP6
+#NlS.hg)Sh .t
+*#&2^aY T)HG#ct veu<0-g
+*JUׯ*f6Vs3IzFOds
+*NbstFj rkv?TR/J}/Z{^ICW~.wh)f4In&rtKISf|Q^@(
+묭=٬lfuvE5+{
+*Rno)߽+ɉ?f@8!9i%h_4[p13ǃo=bSK&I+&']VoщhMb9hb^5Z$\n,`qxCr (Atg/g4nu&f06gooOuYy)
+HBOY[
+.1UH_Đ)&2LD.{[Mݦhab+'.f+S4RyزҴ.{Ok)dU9| j{-绋jn
+endstream
+endobj
+3629 0 obj
+<< /Type /Page /Contents 3630 0 R /Resources 3628 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3286 0 R >>
+endobj
+3631 0 obj
+<< /D [ 3629 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+3632 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+3633 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+3634 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+3635 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+3636 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+3637 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+3638 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+3639 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+3640 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+3641 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+3642 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 605.444 null ] >>
+endobj
+3643 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 552.642 null ] >>
+endobj
+3644 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 541.684 null ] >>
+endobj
+3645 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 530.725 null ] >>
+endobj
+3646 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 519.766 null ] >>
+endobj
+3647 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 508.807 null ] >>
+endobj
+3648 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 497.848 null ] >>
+endobj
+3649 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 486.889 null ] >>
+endobj
+3650 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 410.177 null ] >>
+endobj
+3651 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 399.218 null ] >>
+endobj
+3652 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 388.259 null ] >>
+endobj
+3653 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 377.3 null ] >>
+endobj
+3654 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 366.341 null ] >>
+endobj
+3655 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 355.382 null ] >>
+endobj
+3656 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 344.423 null ] >>
+endobj
+3657 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 333.464 null ] >>
+endobj
+3658 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 322.505 null ] >>
+endobj
+3659 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 306.565 null ] >>
+endobj
+3660 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 295.606 null ] >>
+endobj
+3661 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 284.647 null ] >>
+endobj
+3662 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 273.688 null ] >>
+endobj
+3663 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 262.73 null ] >>
+endobj
+3664 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 246.789 null ] >>
+endobj
+3665 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 235.83 null ] >>
+endobj
+3666 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 224.872 null ] >>
+endobj
+3667 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 213.913 null ] >>
+endobj
+3668 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 202.954 null ] >>
+endobj
+3669 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 172.07 null ] >>
+endobj
+3670 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 161.111 null ] >>
+endobj
+3671 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 150.152 null ] >>
+endobj
+3672 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 139.193 null ] >>
+endobj
+3673 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 128.234 null ] >>
+endobj
+3674 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 117.275 null ] >>
+endobj
+3675 0 obj
+<< /D [ 3629 0 R /XYZ 81.077 106.316 null ] >>
+endobj
+3628 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+3678 0 obj
+<< /Filter /FlateDecode /Length 2638 >>
+stream
+xڵZmo6~V|EpkqCp8m!6+K^YN6 ~3ި*A$Szp8Pb?~>|M ISbƒhAqBx%V/Gr h[Բynjst/yk(c/Y<' ȓƔ}ޘ}<? N9H\.@`eYL866D 4+4"Zȯ>Oavd!#" 6Uۚc+M'GeHs֮0lyO^]d.(sZX(,jj_
+3;I&b"㳦X}0`](Yk8)wUάksJ|x6X!A߸hz!H)H`[. ,SF]fXhH&}{[ޗɤ}k7!5?zj*x \~ P)|[ذc'DG;S4aLݥ:RjKrFrШ֑J(eCKMx=Ր͛[^Q]& t裭/6}v
+z==ђ̴:5 E؇~ɘ/PhgXu?tyv5" q`+wjknF&.j2~pW{0c L嵝4(x`w#z:gacNf<H5?v+(NO dxACفL
+J8ӽaC_$Uz0 @&Dd밭68[1Q}<
+fmؽb Ʀ*lz㥅7.XZ0{MT7b"H^r) }T'tl'7j\N&^rIJ1
+Rv& 璏`tRxEѽYXf~6]o kzŖmCU;:sq^_s Zw<L#)MVVt}Ht~@ /Sƛ"[;*SV3OH
+*=<BœMU h6pb [itjQٶSwGg1Jtջͩ_jL#j($ 3`214)L1loeE,8U$ʊ2sctpMrAC]Yqx5 XM}(j}cTZ{8-{yT)g34G2~4a^kXLD ;Зz`1hd6r <u4O9}4 'Bќ; x3<ؙ@Jp5{Xwwanxʚ-Bklu)jL 9U9mz cl%z 1I$u:oDQ/~lIV17Da SN5Si
+lw[* n۪ϼy){4Ӽc^Ҟ(x}'f06FfUdՠ5]WH^9aQct>>pc]fMu?h}fèuKÚLyMP
+,=@ [R9r]}IZq>?T<,l%a$}Ncax7ͩN5%%.Cy$ՋqkTG
+endstream
+endobj
+3677 0 obj
+<< /Type /Page /Contents 3678 0 R /Resources 3676 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3286 0 R >>
+endobj
+3679 0 obj
+<< /D [ 3677 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+3680 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 743.076 null ] >>
+endobj
+3681 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 732.117 null ] >>
+endobj
+3682 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 721.158 null ] >>
+endobj
+3683 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 710.199 null ] >>
+endobj
+3684 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 699.24 null ] >>
+endobj
+3685 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 688.282 null ] >>
+endobj
+3686 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 677.323 null ] >>
+endobj
+3687 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 666.364 null ] >>
+endobj
+3688 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 655.405 null ] >>
+endobj
+3689 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 614.853 null ] >>
+endobj
+3690 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 603.894 null ] >>
+endobj
+3691 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 592.935 null ] >>
+endobj
+3692 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 581.976 null ] >>
+endobj
+3693 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 571.017 null ] >>
+endobj
+3694 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 560.058 null ] >>
+endobj
+3695 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 549.099 null ] >>
+endobj
+3696 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 538.14 null ] >>
+endobj
+3697 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 527.181 null ] >>
+endobj
+3698 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 516.222 null ] >>
+endobj
+3699 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 505.263 null ] >>
+endobj
+3700 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 494.305 null ] >>
+endobj
+3701 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 483.346 null ] >>
+endobj
+3702 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 472.387 null ] >>
+endobj
+3703 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 461.428 null ] >>
+endobj
+3704 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 450.469 null ] >>
+endobj
+3705 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 421.872 null ] >>
+endobj
+3706 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 393.275 null ] >>
+endobj
+3707 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 382.316 null ] >>
+endobj
+3708 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 371.357 null ] >>
+endobj
+3709 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 360.398 null ] >>
+endobj
+3710 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 349.439 null ] >>
+endobj
+3711 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 338.48 null ] >>
+endobj
+3712 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 327.521 null ] >>
+endobj
+3713 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 316.562 null ] >>
+endobj
+3714 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 305.603 null ] >>
+endobj
+3715 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 235.458 null ] >>
+endobj
+3716 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 224.499 null ] >>
+endobj
+3717 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 213.54 null ] >>
+endobj
+3718 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 202.581 null ] >>
+endobj
+3719 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 191.622 null ] >>
+endobj
+3720 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 180.663 null ] >>
+endobj
+3721 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 122.473 null ] >>
+endobj
+3722 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+3723 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+3724 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+3725 0 obj
+<< /D [ 3677 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+3676 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F65 185 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+3728 0 obj
+<< /Filter /FlateDecode /Length 1880 >>
+stream
+xZMoFWE~Eh
+Ca hXȤBRqS ЋI|oggft=\w/^v&Lͬ&ьPf?is-
+GFS9
+hlek
+4n P V.oc[Y3C8W5ñ,o^T#MN~[6mWg(Մkr_Gl)" }};KVjdޤXV!].qc4j2F1RW)hԚ)
+qSl]T'q|g >}eΪ+l8y#74ƈ
+@8sPtcgvڲBfHgWgZ[ZF`5Jm4zc#oe\ js?dopr
+241{YV)) [N]\lMآ6LO.I:\:5o[iBq\1:L Z;t3ʽG ht Hb;?AO_uS¦tӀ0xI"3d4:AO0/ !l:zm>fu` :T &4~Y".m?< =3$!ST>oP? |A1rpXw6Q~$hﰉbOm|:ؙNK],P4yP Ī@Qf4c8l yZT(A5:qB[&зAׯrI eZJ!P56ja3K p V
+ A2AH 3AGMBr\pEHcp&Q3*ȴ fÝ>%I)ND(OqQ=8qEp?v }^NBK F>ja0ve.ennʡNdIȗōmLօ?Yn(%zەrCgI+H ˮhWWh?EQz'6ssy#>\ ea4Wb|d_jkavmwhjkm,@W~z'M+xxߝ.I xyۤ#~#E9QNu4dGEQ3P#-n0|G!K57N
+1vR=K1k3t00+?! ljtMtw@UT7S\
+endstream
+endobj
+3727 0 obj
+<< /Type /Page /Contents 3728 0 R /Resources 3726 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3782 0 R >>
+endobj
+3729 0 obj
+<< /D [ 3727 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+3730 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+3731 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+3732 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+3733 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+3734 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+3735 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+3736 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+3737 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+3738 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+3739 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+3740 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+3741 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 624.373 null ] >>
+endobj
+3742 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 613.415 null ] >>
+endobj
+3743 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 584.523 null ] >>
+endobj
+3744 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 573.564 null ] >>
+endobj
+3745 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 532.717 null ] >>
+endobj
+3746 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 521.758 null ] >>
+endobj
+3747 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 510.799 null ] >>
+endobj
+3748 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 499.84 null ] >>
+endobj
+3749 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 488.882 null ] >>
+endobj
+3750 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 477.923 null ] >>
+endobj
+3751 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 466.964 null ] >>
+endobj
+3752 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 456.005 null ] >>
+endobj
+3753 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 445.046 null ] >>
+endobj
+3754 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 434.087 null ] >>
+endobj
+3755 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 423.128 null ] >>
+endobj
+3756 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 412.169 null ] >>
+endobj
+3757 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 401.21 null ] >>
+endobj
+3758 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 390.251 null ] >>
+endobj
+3759 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 379.292 null ] >>
+endobj
+3760 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 368.334 null ] >>
+endobj
+3761 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 357.375 null ] >>
+endobj
+3762 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 346.416 null ] >>
+endobj
+3763 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 335.457 null ] >>
+endobj
+3764 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 324.498 null ] >>
+endobj
+3765 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 313.539 null ] >>
+endobj
+3766 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 302.58 null ] >>
+endobj
+3767 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 291.621 null ] >>
+endobj
+3768 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 280.662 null ] >>
+endobj
+3769 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 269.703 null ] >>
+endobj
+3770 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 258.745 null ] >>
+endobj
+3771 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 247.786 null ] >>
+endobj
+3772 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 236.827 null ] >>
+endobj
+3773 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 225.868 null ] >>
+endobj
+3774 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 214.909 null ] >>
+endobj
+3775 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 203.95 null ] >>
+endobj
+3776 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 192.991 null ] >>
+endobj
+3777 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 182.032 null ] >>
+endobj
+3778 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 171.073 null ] >>
+endobj
+3779 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 160.114 null ] >>
+endobj
+3780 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 95.357 null ] >>
+endobj
+3781 0 obj
+<< /D [ 3727 0 R /XYZ 81.077 84.398 null ] >>
+endobj
+3726 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+3785 0 obj
+<< /Filter /FlateDecode /Length 2245 >>
+stream
+xڵZ[o6~ϯ0Ї*@]Rfv]y
+0vbӱ:dHr.3Ë(x$}%Rv7zOYrI%ݬ.<32KsY* ’n%.39c,y6{h}hUis׶Y9͒6d6նUN-o{Lo@Tf30:%I$ 0)c( DgRl
+&!#a|YmϪmZ=\]_}S{W CtDL?t);EG֯K|I)ZZ6EzJn x͎pĉyFD%zlҏ;GB!ZaQl~]F'U29E<O=#(@eG$82Ek* UNDH[{<3C1byuMxHfQ)/cjF ,;+P{ KƓфYR<.#<E;D)pLcҌI\Lz9LfNsQQHDP&1:zaDFQ1 ·)3DJPν1g) bvuG~+]P/E!1ǩ8O@"Fymei # peeQ*8iU3c4EHp  ;&1_^D9%s <aE8@4#zqu>ȁ?h.)Cxqeu~8㒢ĉ. 81Oܺr^y6&>w[撦O&,^}pÇˍ9Ӷ~Lq0pRwM[}njݩ/APk[e[;mpUKE9'P8t]fkIJKTw"x[,7̼ĉS
+%C1: 2r]-Կa yhvgakNsN=U]Ӳt40"aʗ &QNx/7aQ
+4 ^Ѵ@Yȑ>\U MLK <-Y4ݖxr0x#(Z6 &)R ~#25I6K{C?#8ɪiu /A3As a\W[_|2n BZ͏S~<̙F"X0Gfne17wEpݷ3 ߤ[
+$;6Hu]퇎;ѝ1=0Zu&gU
+endstream
+endobj
+3784 0 obj
+<< /Type /Page /Contents 3785 0 R /Resources 3783 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3782 0 R >>
+endobj
+3786 0 obj
+<< /D [ 3784 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+3787 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 755.062 null ] >>
+endobj
+3788 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 744.103 null ] >>
+endobj
+3789 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 733.144 null ] >>
+endobj
+3790 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 722.185 null ] >>
+endobj
+3791 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 711.226 null ] >>
+endobj
+3792 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 700.268 null ] >>
+endobj
+3793 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 689.309 null ] >>
+endobj
+3794 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 678.35 null ] >>
+endobj
+3795 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 667.391 null ] >>
+endobj
+3796 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 656.432 null ] >>
+endobj
+3797 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 645.473 null ] >>
+endobj
+3798 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 634.514 null ] >>
+endobj
+3799 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 623.555 null ] >>
+endobj
+3800 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 612.596 null ] >>
+endobj
+3801 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 601.637 null ] >>
+endobj
+3802 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 590.678 null ] >>
+endobj
+3803 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 579.72 null ] >>
+endobj
+3804 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 568.761 null ] >>
+endobj
+3805 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 557.802 null ] >>
+endobj
+3806 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 546.843 null ] >>
+endobj
+3807 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 535.884 null ] >>
+endobj
+3808 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 524.925 null ] >>
+endobj
+3809 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 513.966 null ] >>
+endobj
+3810 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 503.007 null ] >>
+endobj
+3811 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 492.048 null ] >>
+endobj
+3812 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 481.089 null ] >>
+endobj
+3813 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 470.131 null ] >>
+endobj
+3814 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 459.172 null ] >>
+endobj
+3815 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 448.213 null ] >>
+endobj
+3816 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 419.677 null ] >>
+endobj
+3817 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 408.718 null ] >>
+endobj
+3818 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 397.759 null ] >>
+endobj
+3819 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 386.8 null ] >>
+endobj
+3820 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 375.842 null ] >>
+endobj
+3821 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 364.883 null ] >>
+endobj
+3822 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 282.159 null ] >>
+endobj
+3823 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 217.758 null ] >>
+endobj
+3824 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 206.799 null ] >>
+endobj
+3825 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 195.84 null ] >>
+endobj
+3826 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 184.881 null ] >>
+endobj
+3827 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 173.922 null ] >>
+endobj
+3828 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 162.963 null ] >>
+endobj
+3829 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 152.004 null ] >>
+endobj
+3830 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+3831 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+3832 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+3833 0 obj
+<< /D [ 3784 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+3783 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F68 189 0 R /F64 183 0 R /F20 186 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+3836 0 obj
+<< /Filter /FlateDecode /Length 2895 >>
+stream
+xڭZo6߿@4M8`[.@nVbamɕ~3$%#>$)9oJfOd%owI l dFgFEL+JEg)u_X IfHL)%ɐG:X2!4aYB4OCo:|6Z]4K<%T%ҐYUVs4jDFw*C/w4@€t@Saf#m7<v7Lg?KD$pMno>O(#YR[<V2VP:?X_3aL?uUn[7.HhuS~_=e~9S(Keǫ@V?-2}"C]@Ee>ͩ'E3j.H!C
+XTZnzu Ґ->?Zڟ@XIp(@l:c(moFY@vDJNnZfdMOлkװƈNFʍh.vvl{*7)s?M ſeٮE\v=۪8̚s5roX^b[lϏ`>aIYl e u}1e9@O1yYl"3G =|QV$kwtRx !I*|͢\@&n|Lvsb ֏Ymk>_^kIB:*!6-rS]YH&%NNH\$#EH 6D ٯ-\;P;g N<b
+y̔&ڨ+aNCJmwydkQ~}1A*bd?~^>
+cLD`hT{hdnl.P? 'Jpr? c
+bN><;8=i*A>(p[Ȧe8O郄_
+*
+_&G=HiܮЇ{w#.ށf >,.Pw6'a}G
+䨔*!6ݷ=:JI=pU^["ˤ./Z%IcΖ:'^pR0Z-g:͈ վuҗۑIBx+ulBtYpv-nW}klN,YLd/8Ҿ"w6a]ѣ[L؝aj,k>o`FȅV-,$ݸyS?nn鹫MѴWePʈH ᱪxHw};N׹DWG=OP{)p~,}U|ެ+UDŻ'(i\&6$F!ec>8bNEi_`vڏx c}A0$8 |a#ϸe{7tc,eDI5 I7Qm觇7
+endstream
+endobj
+3835 0 obj
+<< /Type /Page /Contents 3836 0 R /Resources 3834 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3782 0 R >>
+endobj
+3837 0 obj
+<< /D [ 3835 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+3838 0 obj
+<< /D [ 3835 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+3839 0 obj
+<< /D [ 3835 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+3840 0 obj
+<< /D [ 3835 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+3841 0 obj
+<< /D [ 3835 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+3842 0 obj
+<< /D [ 3835 0 R /XYZ 81.077 683.153 null ] >>
+endobj
+3843 0 obj
+<< /D [ 3835 0 R /XYZ 81.077 672.194 null ] >>
+endobj
+3844 0 obj
+<< /D [ 3835 0 R /XYZ 81.077 619.392 null ] >>
+endobj
+3845 0 obj
+<< /D [ 3835 0 R /XYZ 81.077 608.433 null ] >>
+endobj
+3846 0 obj
+<< /D [ 3835 0 R /XYZ 81.077 597.474 null ] >>
+endobj
+3847 0 obj
+<< /D [ 3835 0 R /XYZ 81.077 586.515 null ] >>
+endobj
+3848 0 obj
+<< /D [ 3835 0 R /XYZ 81.077 575.556 null ] >>
+endobj
+3849 0 obj
+<< /D [ 3835 0 R /XYZ 81.077 564.598 null ] >>
+endobj
+3850 0 obj
+<< /D [ 3835 0 R /XYZ 81.077 553.639 null ] >>
+endobj
+3851 0 obj
+<< /D [ 3835 0 R /XYZ 81.077 542.68 null ] >>
+endobj
+3852 0 obj
+<< /D [ 3835 0 R /XYZ 81.077 465.967 null ] >>
+endobj
+3853 0 obj
+<< /D [ 3835 0 R /XYZ 81.077 437.076 null ] >>
+endobj
+3854 0 obj
+<< /D [ 3835 0 R /XYZ 81.077 384.274 null ] >>
+endobj
+3855 0 obj
+<< /D [ 3835 0 R /XYZ 81.077 373.315 null ] >>
+endobj
+3856 0 obj
+<< /D [ 3835 0 R /XYZ 81.077 362.356 null ] >>
+endobj
+3857 0 obj
+<< /D [ 3835 0 R /XYZ 81.077 351.397 null ] >>
+endobj
+3858 0 obj
+<< /D [ 3835 0 R /XYZ 81.077 335.457 null ] >>
+endobj
+3859 0 obj
+<< /D [ 3835 0 R /XYZ 81.077 324.498 null ] >>
+endobj
+3860 0 obj
+<< /D [ 3835 0 R /XYZ 81.077 313.539 null ] >>
+endobj
+3861 0 obj
+<< /D [ 3835 0 R /XYZ 81.077 282.655 null ] >>
+endobj
+3862 0 obj
+<< /D [ 3835 0 R /XYZ 81.077 253.763 null ] >>
+endobj
+3863 0 obj
+<< /D [ 3835 0 R /XYZ 81.077 242.804 null ] >>
+endobj
+3864 0 obj
+<< /D [ 3835 0 R /XYZ 81.077 231.845 null ] >>
+endobj
+3865 0 obj
+<< /D [ 3835 0 R /XYZ 81.077 220.887 null ] >>
+endobj
+3866 0 obj
+<< /D [ 3835 0 R /XYZ 81.077 209.928 null ] >>
+endobj
+3867 0 obj
+<< /D [ 3835 0 R /XYZ 81.077 181.036 null ] >>
+endobj
+3868 0 obj
+<< /D [ 3835 0 R /XYZ 81.077 170.077 null ] >>
+endobj
+3869 0 obj
+<< /D [ 3835 0 R /XYZ 81.077 159.118 null ] >>
+endobj
+3870 0 obj
+<< /D [ 3835 0 R /XYZ 81.077 106.316 null ] >>
+endobj
+3871 0 obj
+<< /D [ 3835 0 R /XYZ 81.077 95.357 null ] >>
+endobj
+3834 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F69 304 0 R /F65 185 0 R /F70 305 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+3874 0 obj
+<< /Filter /FlateDecode /Length 2465 >>
+stream
+xڭZKo80p`!
+t،C,b&hjsXP޺qQ-r0E)N+~5nc֕T‡
+Tgݾl..K*>YFD2<B`G($ Q=B
+>M}rV`m#;㣕|jw#qI$
+>o
+yn߷jrB!BBXA4M!qڷX꿕K]'no a_Ͳ6h{6üA` Ӈc7PV:yGt|mTqSBtY./P7MݸT6Sސ4Mޚ.PGw?ɺ*(wv6ƗT}?׮'v?K!h(sBּKGqwSyi5Y陨Q<IP-l$Q14q
+Wd.^wL}j3L KS6\U&< p9| [nEWnIfvmoņa
+0.ZfB>- }ϰ skV.}prqW#23z >_
+ǐMqb:ʧn}lpxQ⃘xG\PC,?UɘVo3+R$\A&>L0Tf
+endstream
+endobj
+3873 0 obj
+<< /Type /Page /Contents 3874 0 R /Resources 3872 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3782 0 R >>
+endobj
+3875 0 obj
+<< /D [ 3873 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+3876 0 obj
+<< /D [ 3873 0 R /XYZ 81.077 730.974 null ] >>
+endobj
+3877 0 obj
+<< /D [ 3873 0 R /XYZ 81.077 720.015 null ] >>
+endobj
+3878 0 obj
+<< /D [ 3873 0 R /XYZ 81.077 691.123 null ] >>
+endobj
+3879 0 obj
+<< /D [ 3873 0 R /XYZ 81.077 680.164 null ] >>
+endobj
+3880 0 obj
+<< /D [ 3873 0 R /XYZ 81.077 651.273 null ] >>
+endobj
+3881 0 obj
+<< /D [ 3873 0 R /XYZ 81.077 640.314 null ] >>
+endobj
+3882 0 obj
+<< /D [ 3873 0 R /XYZ 81.077 629.355 null ] >>
+endobj
+3883 0 obj
+<< /D [ 3873 0 R /XYZ 81.077 618.396 null ] >>
+endobj
+3884 0 obj
+<< /D [ 3873 0 R /XYZ 81.077 607.437 null ] >>
+endobj
+3885 0 obj
+<< /D [ 3873 0 R /XYZ 81.077 596.478 null ] >>
+endobj
+3886 0 obj
+<< /D [ 3873 0 R /XYZ 81.077 580.538 null ] >>
+endobj
+3887 0 obj
+<< /D [ 3873 0 R /XYZ 81.077 569.579 null ] >>
+endobj
+3888 0 obj
+<< /D [ 3873 0 R /XYZ 81.077 558.62 null ] >>
+endobj
+3889 0 obj
+<< /D [ 3873 0 R /XYZ 81.077 547.661 null ] >>
+endobj
+3890 0 obj
+<< /D [ 3873 0 R /XYZ 81.077 536.702 null ] >>
+endobj
+3891 0 obj
+<< /D [ 3873 0 R /XYZ 81.077 493.863 null ] >>
+endobj
+3892 0 obj
+<< /D [ 3873 0 R /XYZ 81.077 441.061 null ] >>
+endobj
+3893 0 obj
+<< /D [ 3873 0 R /XYZ 81.077 430.102 null ] >>
+endobj
+3894 0 obj
+<< /D [ 3873 0 R /XYZ 81.077 414.162 null ] >>
+endobj
+3895 0 obj
+<< /D [ 3873 0 R /XYZ 81.077 403.203 null ] >>
+endobj
+3896 0 obj
+<< /D [ 3873 0 R /XYZ 81.077 392.244 null ] >>
+endobj
+3897 0 obj
+<< /D [ 3873 0 R /XYZ 81.077 381.285 null ] >>
+endobj
+3898 0 obj
+<< /D [ 3873 0 R /XYZ 81.077 370.326 null ] >>
+endobj
+3899 0 obj
+<< /D [ 3873 0 R /XYZ 81.077 359.367 null ] >>
+endobj
+3900 0 obj
+<< /D [ 3873 0 R /XYZ 81.077 348.408 null ] >>
+endobj
+3901 0 obj
+<< /D [ 3873 0 R /XYZ 81.077 337.449 null ] >>
+endobj
+3902 0 obj
+<< /D [ 3873 0 R /XYZ 81.077 326.49 null ] >>
+endobj
+3903 0 obj
+<< /D [ 3873 0 R /XYZ 81.077 315.532 null ] >>
+endobj
+3904 0 obj
+<< /D [ 3873 0 R /XYZ 81.077 304.573 null ] >>
+endobj
+3905 0 obj
+<< /D [ 3873 0 R /XYZ 81.077 293.614 null ] >>
+endobj
+3906 0 obj
+<< /D [ 3873 0 R /XYZ 81.077 282.655 null ] >>
+endobj
+3907 0 obj
+<< /D [ 3873 0 R /XYZ 81.077 271.696 null ] >>
+endobj
+3908 0 obj
+<< /D [ 3873 0 R /XYZ 81.077 260.737 null ] >>
+endobj
+3909 0 obj
+<< /D [ 3873 0 R /XYZ 81.077 249.778 null ] >>
+endobj
+3910 0 obj
+<< /D [ 3873 0 R /XYZ 81.077 183.028 null ] >>
+endobj
+3911 0 obj
+<< /D [ 3873 0 R /XYZ 81.077 172.07 null ] >>
+endobj
+3912 0 obj
+<< /D [ 3873 0 R /XYZ 81.077 161.111 null ] >>
+endobj
+3913 0 obj
+<< /D [ 3873 0 R /XYZ 81.077 150.152 null ] >>
+endobj
+3914 0 obj
+<< /D [ 3873 0 R /XYZ 81.077 109.305 null ] >>
+endobj
+3915 0 obj
+<< /D [ 3873 0 R /XYZ 81.077 98.346 null ] >>
+endobj
+3872 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+3918 0 obj
+<< /Filter /FlateDecode /Length 1863 >>
+stream
+xZKo6𩰁SPYrb˱dHzE{Lެɣ%D}7gF}@w~an\:b#0#6?w|2ԎfɟwӧLjb8KgĄ<y"of5%,PG2e]wuf;r3EֿΚЁLZ[* cE̼M>QtQ &__vk
+@A($hO(wb9+nzZukMn}$*/#*(xLh;At&qµQڥhjSWH=}uV}uD3sU:IxhED(Hlmep6E{mW'W;2ϗU ?0<$ !]Soòyl7Yy[5Ew(.w|^~L?{]>^19!FRmn_h"BU G$FD|o'trUn24E.YQtOq^U(͛U?꿂\C!g%phO1d[&+hcBWt}ꑭ NmmwEw;XNp֋ўq^.^u;ED֏>
+\eNAMuo&sO}zfQ(6h\'),Nxb~l8$*oI?צPMQ)cF- T7 W'$e<%y%Z6@Q>t)x^xփ]]O.Oآ&:[JJ`)ˋZ Ԓ0|QʭƇ&|FƭìZv{*JGxny2JPw֐ (ڍɔk `@{1&kEkkd=Eoϫ}Oȹj5_&= "YTDž'u &ʥt>|N
+rBS=' F!|QFSK. Cq|yb^2xH4OQRFd85Z9
+GTM:4ZC\YP]k\4mD)L=AWᘸ0e1} L7.~ط:Z_Cc(k>Y@#u$P081F\BM8x51!;O#p!F׆јP* u]<DH >RFC 5mFu}[K!q>\7A㔈2 {txdvmV/.7|2g~+. l_ܼz>x q',Kq֋ѯn^qpe6AaW*qkht))+p6V3'b0ZCr(%Y`q-Ҥ|e5*eIx5%bXd *Kف'1|NG5Frj& W$w/g7D_yhi"CbCƯ{@C\r>j'P~9\P[Ajߦӆ-Qbsdс'斔m}X3D
+endstream
+endobj
+3917 0 obj
+<< /Type /Page /Contents 3918 0 R /Resources 3916 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3782 0 R >>
+endobj
+3919 0 obj
+<< /D [ 3917 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+3920 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 730.974 null ] >>
+endobj
+3921 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 720.015 null ] >>
+endobj
+3922 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 709.056 null ] >>
+endobj
+3923 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 698.097 null ] >>
+endobj
+3924 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 687.138 null ] >>
+endobj
+3925 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 676.179 null ] >>
+endobj
+3926 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 665.22 null ] >>
+endobj
+3927 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 654.261 null ] >>
+endobj
+3928 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 643.302 null ] >>
+endobj
+3929 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 632.344 null ] >>
+endobj
+3930 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 621.385 null ] >>
+endobj
+3931 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 610.426 null ] >>
+endobj
+3932 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 599.467 null ] >>
+endobj
+3933 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 588.508 null ] >>
+endobj
+3934 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 577.549 null ] >>
+endobj
+3935 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 566.59 null ] >>
+endobj
+3936 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 555.631 null ] >>
+endobj
+3937 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 544.672 null ] >>
+endobj
+3938 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 533.713 null ] >>
+endobj
+3939 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 522.754 null ] >>
+endobj
+3940 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 511.796 null ] >>
+endobj
+3941 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 500.837 null ] >>
+endobj
+3942 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 471.945 null ] >>
+endobj
+3943 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 431.098 null ] >>
+endobj
+3944 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 420.139 null ] >>
+endobj
+3945 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 409.18 null ] >>
+endobj
+3946 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 398.221 null ] >>
+endobj
+3947 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 387.263 null ] >>
+endobj
+3948 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 376.304 null ] >>
+endobj
+3949 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 365.345 null ] >>
+endobj
+3950 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 354.386 null ] >>
+endobj
+3951 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 343.427 null ] >>
+endobj
+3952 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 332.468 null ] >>
+endobj
+3953 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 321.509 null ] >>
+endobj
+3954 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 310.55 null ] >>
+endobj
+3955 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 299.591 null ] >>
+endobj
+3956 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 288.632 null ] >>
+endobj
+3957 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 277.674 null ] >>
+endobj
+3958 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 266.715 null ] >>
+endobj
+3959 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 255.756 null ] >>
+endobj
+3960 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 244.797 null ] >>
+endobj
+3961 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 233.838 null ] >>
+endobj
+3962 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 222.879 null ] >>
+endobj
+3963 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 211.92 null ] >>
+endobj
+3964 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 200.961 null ] >>
+endobj
+3965 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 190.002 null ] >>
+endobj
+3966 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 179.043 null ] >>
+endobj
+3967 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 168.085 null ] >>
+endobj
+3968 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 157.126 null ] >>
+endobj
+3969 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 146.167 null ] >>
+endobj
+3970 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 135.208 null ] >>
+endobj
+3971 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 124.249 null ] >>
+endobj
+3972 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 113.29 null ] >>
+endobj
+3973 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 102.331 null ] >>
+endobj
+3974 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 91.372 null ] >>
+endobj
+3975 0 obj
+<< /D [ 3917 0 R /XYZ 81.077 80.413 null ] >>
+endobj
+3916 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R /F70 305 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+3978 0 obj
+<< /Filter /FlateDecode /Length 2160 >>
+stream
+xڽZKoWx÷$/@ ۲#Ė\INCQHMfcAd;op%7_z$I,67  ĚhM"lO="ѳ,$Z>(LȦbCu~7U\uvOi5<:DQFGMYlWd}5z׷v3?^L- &iGr B9XhZxLX,-i(~c$"`9&ki>Jc=iQ3qzn&&A
+=wD
+vbm4ȋw6to㮵#F{/s$D'+LVDqq2΋r8sCNݱ ަq$+Ahfe<V`Ϟ nlm>4վ9A #mW,ZZhbBI|!|r*Zmv~_R?pry_jha`XцeU R|#fǶJ{v~35c2I\X+)G#> `&
+Ȗ壿cV ':nm5
+爂( 4ryP8QhtN$̹KM zmc=tEHݟu'%@;Wz~Hzm.n,:y.xԕ^SLu(H-DN}H4lvI"/t1;F3"= }UbD7Iq4-Eؤ zhc<&rI*EkKED}7)P
+KH
+endstream
+endobj
+3977 0 obj
+<< /Type /Page /Contents 3978 0 R /Resources 3976 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3782 0 R >>
+endobj
+3979 0 obj
+<< /D [ 3977 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+3980 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+3981 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+3982 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+3983 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+3984 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 644.299 null ] >>
+endobj
+3985 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 633.34 null ] >>
+endobj
+3986 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 622.381 null ] >>
+endobj
+3987 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 611.422 null ] >>
+endobj
+3988 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 600.463 null ] >>
+endobj
+3989 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 589.504 null ] >>
+endobj
+3990 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 578.545 null ] >>
+endobj
+3991 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 567.586 null ] >>
+endobj
+3992 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 556.627 null ] >>
+endobj
+3993 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 545.669 null ] >>
+endobj
+3994 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 534.71 null ] >>
+endobj
+3995 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 523.751 null ] >>
+endobj
+3996 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 512.792 null ] >>
+endobj
+3997 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 501.833 null ] >>
+endobj
+3998 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 490.874 null ] >>
+endobj
+3999 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 479.915 null ] >>
+endobj
+4000 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 468.956 null ] >>
+endobj
+4001 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 457.997 null ] >>
+endobj
+4002 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 447.038 null ] >>
+endobj
+4003 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 436.08 null ] >>
+endobj
+4004 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 425.121 null ] >>
+endobj
+4005 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 414.162 null ] >>
+endobj
+4006 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 403.203 null ] >>
+endobj
+4007 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 392.244 null ] >>
+endobj
+4008 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 381.285 null ] >>
+endobj
+4009 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 370.326 null ] >>
+endobj
+4010 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 359.367 null ] >>
+endobj
+4011 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 348.408 null ] >>
+endobj
+4012 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 337.449 null ] >>
+endobj
+4013 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 326.49 null ] >>
+endobj
+4014 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 315.532 null ] >>
+endobj
+4015 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 274.685 null ] >>
+endobj
+4016 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 263.726 null ] >>
+endobj
+4017 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 252.767 null ] >>
+endobj
+4018 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 241.808 null ] >>
+endobj
+4019 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 230.849 null ] >>
+endobj
+4020 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 219.89 null ] >>
+endobj
+4021 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 208.931 null ] >>
+endobj
+4022 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 197.972 null ] >>
+endobj
+4023 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 169.081 null ] >>
+endobj
+4024 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 158.122 null ] >>
+endobj
+4025 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 147.163 null ] >>
+endobj
+4026 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 136.204 null ] >>
+endobj
+4027 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 125.245 null ] >>
+endobj
+4028 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 114.286 null ] >>
+endobj
+4029 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 103.327 null ] >>
+endobj
+4030 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 92.368 null ] >>
+endobj
+4031 0 obj
+<< /D [ 3977 0 R /XYZ 81.077 81.41 null ] >>
+endobj
+3976 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+4034 0 obj
+<< /Filter /FlateDecode /Length 1929 >>
+stream
+xZ[o6~ϯp_vÊw2O;m^ۅ r",L&=ed<>nwbJ"?;Թ~~-
+~ b lv0(љQDQ=ӊLf9\071*M`Fim=mm O~Q;
+SP٬*ˈ# IփԔP;PzHA2x0NJ֎nM՟+J9߹)D[O[`u;<{)wpۣ_4pa0XʕC+ʮl}BD]}f!in1X_#]m+9%P/#MQRR  .>`b}`D3EMD9YjVĎf]b@U]1S*$vJv"Aڮ6۷Ò47{q$cWͲ{gDhA2>YBcE .>>E|ݼCQ82!!4:CUYW]&#Le Mqlbtb<>wT 'F(é]|aܹZD%@З]vޕLZ@n;]@l۬vo؜ō[M8 FVHFo`;­_{OpvCƵ$" i{>,!T "DfKNZƥ?1ia~@ȩ`2TC$*Z\7A;җNPQ\1s=/-kxL}7` ]Is, pw7%/CX #ە!9dC5hʐQ)ž"^ҽo|F3A胼$-{A|}*lc,8O5pU|58 7.E]MȢ~<=R*ws F/ /<6xr0
+Jb\/<0}|Rfdc2)J)d^f2 iKLK;sSAB qN2]2x-n CY}ԅV[ MQ9Jo>ΡK'
+,0!HNcXw=n6E]H(Ӄo6-Tbd
+l?9+LfY Awri_~'W2cBh,*4L赩DL:b_dDL4KQyKc̩;nqߣꓹKE r 2BC*U,4:`WD1+C$QS=M
+ڝ(C5`idgOVLB#L1 [O:kQRW@0,C[FL Wˆ_2g -J)
+qw_'J
+endstream
+endobj
+4033 0 obj
+<< /Type /Page /Contents 4034 0 R /Resources 4032 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3782 0 R >>
+endobj
+4035 0 obj
+<< /D [ 4033 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+4036 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+4037 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+4038 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 729.297 null ] >>
+endobj
+4039 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 718.338 null ] >>
+endobj
+4040 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 707.379 null ] >>
+endobj
+4041 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 696.42 null ] >>
+endobj
+4042 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 685.461 null ] >>
+endobj
+4043 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 674.502 null ] >>
+endobj
+4044 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 663.543 null ] >>
+endobj
+4045 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 652.584 null ] >>
+endobj
+4046 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 641.625 null ] >>
+endobj
+4047 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 630.667 null ] >>
+endobj
+4048 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 619.708 null ] >>
+endobj
+4049 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 608.749 null ] >>
+endobj
+4050 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 578.969 null ] >>
+endobj
+4051 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 568.01 null ] >>
+endobj
+4052 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 525.644 null ] >>
+endobj
+4053 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 514.685 null ] >>
+endobj
+4054 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 503.726 null ] >>
+endobj
+4055 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 492.767 null ] >>
+endobj
+4056 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 481.808 null ] >>
+endobj
+4057 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 470.849 null ] >>
+endobj
+4058 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 459.891 null ] >>
+endobj
+4059 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 448.932 null ] >>
+endobj
+4060 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 437.973 null ] >>
+endobj
+4061 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 427.014 null ] >>
+endobj
+4062 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 416.055 null ] >>
+endobj
+4063 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 405.096 null ] >>
+endobj
+4064 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 394.137 null ] >>
+endobj
+4065 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 383.178 null ] >>
+endobj
+4066 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 372.219 null ] >>
+endobj
+4067 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 361.26 null ] >>
+endobj
+4068 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 350.301 null ] >>
+endobj
+4069 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 339.343 null ] >>
+endobj
+4070 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 286.856 null ] >>
+endobj
+4071 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 275.897 null ] >>
+endobj
+4072 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 264.938 null ] >>
+endobj
+4073 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 253.979 null ] >>
+endobj
+4074 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 243.021 null ] >>
+endobj
+4075 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 232.062 null ] >>
+endobj
+4076 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 221.103 null ] >>
+endobj
+4077 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 210.144 null ] >>
+endobj
+4078 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 199.185 null ] >>
+endobj
+4079 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 188.226 null ] >>
+endobj
+4080 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 177.267 null ] >>
+endobj
+4081 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 166.308 null ] >>
+endobj
+4082 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 155.349 null ] >>
+endobj
+4083 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 144.39 null ] >>
+endobj
+4084 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 133.431 null ] >>
+endobj
+4085 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 122.473 null ] >>
+endobj
+4086 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+4087 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+4088 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+4089 0 obj
+<< /D [ 4033 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+4032 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+4092 0 obj
+<< /Filter /FlateDecode /Length 1908 >>
+stream
+xZo6𥨃6,Hb9zb˶Yr%%>2M:Mov3h~GG63:D;^|Nۙ$en :YM433nw_BQ~û
+7.л=5İ0_1,!$w/rAe41*d1̠tFۜҊ,$'̢Tc+}WCբ=P)I8j:В;d{]C y:[CXtSh؂,30n$SA}9HܕmŦ<EFIG1FOmۭ\(%4x
+8ovy9ǔ6#U縒&Ax6Z
+{34KFl_[ P)򨰸 $6(8O9^,7.! -F 4<'B!8nc4~lʈ $nşdDfAxHolyQ5cƯ2D [kTq3RWQoB(Q\3w,e
+endstream
+endobj
+4091 0 obj
+<< /Type /Page /Contents 4092 0 R /Resources 4090 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3782 0 R >>
+endobj
+4093 0 obj
+<< /D [ 4091 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+4094 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+4095 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+4096 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+4097 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+4098 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+4099 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+4100 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+4101 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+4102 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 661.235 null ] >>
+endobj
+4103 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 650.276 null ] >>
+endobj
+4104 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 639.317 null ] >>
+endobj
+4105 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 628.358 null ] >>
+endobj
+4106 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 617.4 null ] >>
+endobj
+4107 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 606.441 null ] >>
+endobj
+4108 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 595.482 null ] >>
+endobj
+4109 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 584.523 null ] >>
+endobj
+4110 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 573.564 null ] >>
+endobj
+4111 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 562.605 null ] >>
+endobj
+4112 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 551.646 null ] >>
+endobj
+4113 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 540.687 null ] >>
+endobj
+4114 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 529.728 null ] >>
+endobj
+4115 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 518.769 null ] >>
+endobj
+4116 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 507.811 null ] >>
+endobj
+4117 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 496.852 null ] >>
+endobj
+4118 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 485.893 null ] >>
+endobj
+4119 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 474.934 null ] >>
+endobj
+4120 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 463.975 null ] >>
+endobj
+4121 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 453.016 null ] >>
+endobj
+4122 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 442.057 null ] >>
+endobj
+4123 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 431.098 null ] >>
+endobj
+4124 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 420.139 null ] >>
+endobj
+4125 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 409.18 null ] >>
+endobj
+4126 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 398.221 null ] >>
+endobj
+4127 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 387.263 null ] >>
+endobj
+4128 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 376.304 null ] >>
+endobj
+4129 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 365.345 null ] >>
+endobj
+4130 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 354.386 null ] >>
+endobj
+4131 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 343.427 null ] >>
+endobj
+4132 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 292.7 null ] >>
+endobj
+4133 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 281.741 null ] >>
+endobj
+4134 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 270.782 null ] >>
+endobj
+4135 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 259.824 null ] >>
+endobj
+4136 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 218.977 null ] >>
+endobj
+4137 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 208.018 null ] >>
+endobj
+4138 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 197.059 null ] >>
+endobj
+4139 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 156.212 null ] >>
+endobj
+4140 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 145.253 null ] >>
+endobj
+4141 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 134.294 null ] >>
+endobj
+4142 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 93.447 null ] >>
+endobj
+4143 0 obj
+<< /D [ 4091 0 R /XYZ 81.077 82.489 null ] >>
+endobj
+4090 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+4146 0 obj
+<< /Filter /FlateDecode /Length 2160 >>
+stream
+xڭZ]o6}ϯ4,IEty(a[Ȓ+ɓd(t2ÌeI<$ǹ/~'
+o?I(фKxAZ"IBI$?K&X
+Q*򲹕AݖMn&Mk6L2J鈩8b>{ٕcVzgZuS̬T:?d]SoPOZ&1ܢtI5G'n䲹9,Dϭqj/A<
+G
+sb&(gFM\0Dd,9Gc%)?#M^94Mh6ge~[g
+=4qvsy|AXT2F|>t_7ŗ [D&/>rմ*!kvE0%IK/]cZ!.]R5-t!2%.tkF ۬ls<utǤхuhP;mc4Et_Ө0@&gPY/< !@Jm-_S)Gi`cߥK{C'8|M74]gz:Q1L8 bH]Qp"DI-Hj&0bve_;3
+ufHDhaE
+ 5jiᒠVQn׭MXqexv1ڄh?7 R3
+lzdo̥l,n5'CE0 D۩VheaR _ (g\Œ6cĈ3 =D߬vm'`%Yc+N7Іj4Kϣn4%Hi2A'{S{iHUw t\#@Z<g
+y뱰߈ho%NF&,|k}Xjf£j
+endstream
+endobj
+4145 0 obj
+<< /Type /Page /Contents 4146 0 R /Resources 4144 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3782 0 R >>
+endobj
+4147 0 obj
+<< /D [ 4145 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+4148 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+4149 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+4150 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+4151 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+4152 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+4153 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+4154 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+4155 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+4156 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+4157 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 640.314 null ] >>
+endobj
+4158 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 629.355 null ] >>
+endobj
+4159 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 618.396 null ] >>
+endobj
+4160 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 607.437 null ] >>
+endobj
+4161 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 596.478 null ] >>
+endobj
+4162 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 585.519 null ] >>
+endobj
+4163 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 574.56 null ] >>
+endobj
+4164 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 563.601 null ] >>
+endobj
+4165 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 522.754 null ] >>
+endobj
+4166 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 511.796 null ] >>
+endobj
+4167 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 482.904 null ] >>
+endobj
+4168 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 471.945 null ] >>
+endobj
+4169 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 460.986 null ] >>
+endobj
+4170 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 450.027 null ] >>
+endobj
+4171 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 439.068 null ] >>
+endobj
+4172 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 428.109 null ] >>
+endobj
+4173 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 417.151 null ] >>
+endobj
+4174 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 406.192 null ] >>
+endobj
+4175 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 395.233 null ] >>
+endobj
+4176 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 384.274 null ] >>
+endobj
+4177 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 373.315 null ] >>
+endobj
+4178 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 362.356 null ] >>
+endobj
+4179 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 351.397 null ] >>
+endobj
+4180 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 322.505 null ] >>
+endobj
+4181 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 311.547 null ] >>
+endobj
+4182 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 300.588 null ] >>
+endobj
+4183 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 289.629 null ] >>
+endobj
+4184 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 278.67 null ] >>
+endobj
+4185 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 237.823 null ] >>
+endobj
+4186 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 208.931 null ] >>
+endobj
+4187 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 197.972 null ] >>
+endobj
+4188 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 187.014 null ] >>
+endobj
+4189 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 146.167 null ] >>
+endobj
+4190 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 135.208 null ] >>
+endobj
+4191 0 obj
+<< /D [ 4145 0 R /XYZ 81.077 124.249 null ] >>
+endobj
+4144 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+4194 0 obj
+<< /Filter /FlateDecode /Length 1969 >>
+stream
+xڭZKϯ0Cl -`7 Ї=Amn%dHrw oQt?Ҳ(}j/Otӟ'-CDH4#Ta寫T,Fp,6w8}%gBٗ/٦lW7YܕYWݽMk
+ݜuGYHI<uX>x2۷ ?.Vˡ{=iGdS or6F@{&ޱ&knbܝL1aӅ$&ej0ƅ2z`
+M~:LoYOș+͙M]]stE]yz (1VJ4M
+?n @*d-+:3&yi,4#t_@}/D(E%2d~) B̐(JA&=;FyZ)Yg
+~~"#Q}O$H.nDܟYecSw)1\_W)xU`G`0$N6`K~ !B 7W%$ץr~|'eq0pIIgE^?
+endstream
+endobj
+4193 0 obj
+<< /Type /Page /Contents 4194 0 R /Resources 4192 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 3782 0 R >>
+endobj
+4195 0 obj
+<< /D [ 4193 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+4196 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 742.929 null ] >>
+endobj
+4197 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 731.97 null ] >>
+endobj
+4198 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 721.011 null ] >>
+endobj
+4199 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 710.052 null ] >>
+endobj
+4200 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 699.093 null ] >>
+endobj
+4201 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 688.134 null ] >>
+endobj
+4202 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 677.175 null ] >>
+endobj
+4203 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 666.217 null ] >>
+endobj
+4204 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 655.258 null ] >>
+endobj
+4205 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 644.299 null ] >>
+endobj
+4206 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 633.34 null ] >>
+endobj
+4207 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 622.381 null ] >>
+endobj
+4208 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 611.422 null ] >>
+endobj
+4209 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 600.463 null ] >>
+endobj
+4210 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 589.504 null ] >>
+endobj
+4211 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 578.545 null ] >>
+endobj
+4212 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 567.586 null ] >>
+endobj
+4213 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 556.627 null ] >>
+endobj
+4214 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 545.669 null ] >>
+endobj
+4215 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 504.822 null ] >>
+endobj
+4216 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 493.863 null ] >>
+endobj
+4217 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 482.904 null ] >>
+endobj
+4218 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 454.012 null ] >>
+endobj
+4219 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 443.053 null ] >>
+endobj
+4220 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 432.094 null ] >>
+endobj
+4221 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 421.136 null ] >>
+endobj
+4222 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 410.177 null ] >>
+endobj
+4223 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 399.218 null ] >>
+endobj
+4224 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 388.259 null ] >>
+endobj
+4225 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 377.3 null ] >>
+endobj
+4226 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 366.341 null ] >>
+endobj
+4227 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 355.382 null ] >>
+endobj
+4228 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 344.423 null ] >>
+endobj
+4229 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 333.464 null ] >>
+endobj
+4230 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 322.505 null ] >>
+endobj
+4231 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 273.771 null ] >>
+endobj
+4232 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 262.812 null ] >>
+endobj
+4233 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 251.853 null ] >>
+endobj
+4234 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 240.895 null ] >>
+endobj
+4235 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 229.936 null ] >>
+endobj
+4236 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 189.089 null ] >>
+endobj
+4237 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 178.13 null ] >>
+endobj
+4238 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 167.171 null ] >>
+endobj
+4239 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 116.444 null ] >>
+endobj
+4240 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 105.485 null ] >>
+endobj
+4241 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 94.527 null ] >>
+endobj
+4242 0 obj
+<< /D [ 4193 0 R /XYZ 81.077 83.568 null ] >>
+endobj
+4192 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+4245 0 obj
+<< /Filter /FlateDecode /Length 1729 >>
+stream
+xڵYKs6WCF~蔦yt&œ aSHB @\ G|X eHT^xmOgӋYM43=N'O}|9+ gZ̄#J y6˅of~'c܏ɢO$\GTQ(D%htͼ.
+?5wÓ u9o
+x MdRDj7iE_
+|_'s\?uC֎'1wj-aVF4nRth"L檘L͉¹ S>Veg!\* &\U^1Ĺj DϷiV!݊QdX [;"s榌8x>a#ۣkZ]14MekqY;|j/h%("|$ .4Q&J()xћv1JR()xk}K/71GtF8"LOiMVrM ֿz^7ٿY}̫e}^T͢h/U @އ"4v88Eo|Qχ'DgE6mخ|FpI$B *gf{LSMb/"+ǡ}99
+FE9Q4*r8):jhyNʢAs%2k□]:pw-H)nU+lLPDNx]5g_fw?VJoͣj[1Ϋ˫m` ru0zKdâLj\C *kTL<eh żwpp6Gƶž4KPf+b;fm0G=D&Tc7@wg8I ˯ms:޷tC1+l݌[zq @rVB@md_ 70SeuLA i'F;Juk\Ϫd:LWhM{zюeݎP=;c% Ե^-PGCXc:424>|"thn[>NObx{b0䞡sC3ӦS},t]b5%?7t|]V*{2sf~-JA)4֧FK˃_.'ӭPǭK h_qf1p:K_yfٟA^ oR9q(RҤqYpR iXٲ;;ʎЎPS4!;)躏4&nP+C/DySٚwevkdB!BXJ`f@_$XW sAG0CjGYT PdUQU]tX  9hT QKF%3{MkPq
+62wQ<
+^A4QNѫ}\<Q'="9'Ríu-)&C-n|]v gU~dzI(ߣ^dJ8Beh!pٖo>?7p0DUO)xC]}8ߝwTȺ+Njiz!'fD;̡Oƙ&Rfe_rf'38
+endstream
+endobj
+4244 0 obj
+<< /Type /Page /Contents 4245 0 R /Resources 4243 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 4299 0 R >>
+endobj
+4246 0 obj
+<< /D [ 4244 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+4247 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+4248 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+4249 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+4250 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+4251 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+4252 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+4253 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+4254 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+4255 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 677.219 null ] >>
+endobj
+4256 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 666.26 null ] >>
+endobj
+4257 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 655.301 null ] >>
+endobj
+4258 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 644.342 null ] >>
+endobj
+4259 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 633.384 null ] >>
+endobj
+57 0 obj
+<< /D [ 4244 0 R /XYZ 79.37 610.451 null ] >>
+endobj
+4260 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 543.154 null ] >>
+endobj
+4261 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 532.195 null ] >>
+endobj
+4262 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 521.236 null ] >>
+endobj
+4263 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 510.277 null ] >>
+endobj
+4264 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 499.318 null ] >>
+endobj
+4265 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 488.359 null ] >>
+endobj
+4266 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 477.4 null ] >>
+endobj
+4267 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 466.441 null ] >>
+endobj
+4268 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 455.482 null ] >>
+endobj
+4269 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 444.523 null ] >>
+endobj
+4270 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 433.565 null ] >>
+endobj
+4271 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 422.606 null ] >>
+endobj
+4272 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 411.647 null ] >>
+endobj
+4273 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 400.688 null ] >>
+endobj
+4274 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 373.832 null ] >>
+endobj
+4275 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 362.874 null ] >>
+endobj
+4276 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 351.915 null ] >>
+endobj
+4277 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 340.956 null ] >>
+endobj
+4278 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 329.997 null ] >>
+endobj
+4279 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 319.038 null ] >>
+endobj
+4280 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 308.079 null ] >>
+endobj
+4281 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 297.12 null ] >>
+endobj
+4282 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 283.692 null ] >>
+endobj
+4283 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 268.792 null ] >>
+endobj
+4284 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 257.833 null ] >>
+endobj
+4285 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 246.874 null ] >>
+endobj
+4286 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 235.915 null ] >>
+endobj
+4287 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 224.957 null ] >>
+endobj
+4288 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 213.998 null ] >>
+endobj
+4289 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 203.039 null ] >>
+endobj
+4290 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 192.08 null ] >>
+endobj
+4291 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 181.121 null ] >>
+endobj
+4292 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 170.162 null ] >>
+endobj
+4293 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 159.203 null ] >>
+endobj
+4294 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 148.244 null ] >>
+endobj
+4295 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 137.285 null ] >>
+endobj
+4296 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 126.326 null ] >>
+endobj
+4297 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 115.368 null ] >>
+endobj
+4298 0 obj
+<< /D [ 4244 0 R /XYZ 81.077 104.409 null ] >>
+endobj
+4243 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F67 187 0 R /F19 184 0 R /F27 642 0 R /F20 186 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+4302 0 obj
+<< /Filter /FlateDecode /Length 1899 >>
+stream
+xڵZmo__D@8(;C'ɒO~CIHz-Xˌrf8 i:WI"ՇOq2D'Ljs%:c$&1S33Bc6[mgXG?%DDZH|0hbB.?~kcUio"_e6?dm GoP^yEn%r[|n^[h¤pk
+|XxBX"
+ Nm67瑩jԢZYӦH-LvS_&do3 amEkk:D[[V`洭f|HOyP1+& DPf(aov<x q"IQk+Aĸ@<7l~7<ٜ1'R0䣝iUb+8#Rq'N]2ț|v>7XiN'~96⼾3uD!9p$
+'<Z㎼՛KH#.7h+(yk26AiߖM>L9*1whTy4|*О#ZﻺΞ}陆8ͧ4 KRI?\!曪(kOyyo|]mYygH.x/em5H) 8T,9d% GMLi:Tmz0}^2A g/> LF1Id%QBc
+<vyj<p,$2ϥ}HYHY8G_Y1Voɒpz~e; ֺϷ&+yۏ<dM?
+AkUCh8TD]VE|Ꮮ֍իλ3 8',CWsh"ͯ8ԲT^tL
+endstream
+endobj
+4301 0 obj
+<< /Type /Page /Contents 4302 0 R /Resources 4300 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 4299 0 R >>
+endobj
+4303 0 obj
+<< /D [ 4301 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+4304 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+4305 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+4306 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+4307 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+4308 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+4309 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+4310 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+4311 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+4312 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+4313 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+4314 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+4315 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+4316 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+4317 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 626.366 null ] >>
+endobj
+4318 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 615.407 null ] >>
+endobj
+4319 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 604.448 null ] >>
+endobj
+4320 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 566.59 null ] >>
+endobj
+4321 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 555.631 null ] >>
+endobj
+61 0 obj
+<< /D [ 4301 0 R /XYZ 79.37 530.924 null ] >>
+endobj
+4322 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 491.707 null ] >>
+endobj
+4323 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 480.748 null ] >>
+endobj
+4324 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 440.898 null ] >>
+endobj
+4325 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 429.939 null ] >>
+endobj
+4326 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 418.98 null ] >>
+endobj
+4327 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 408.021 null ] >>
+endobj
+4328 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 397.062 null ] >>
+endobj
+4329 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 386.103 null ] >>
+endobj
+4330 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 375.144 null ] >>
+endobj
+4331 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 364.185 null ] >>
+endobj
+4332 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 353.227 null ] >>
+endobj
+4333 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 342.268 null ] >>
+endobj
+4334 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 331.309 null ] >>
+endobj
+4335 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 320.35 null ] >>
+endobj
+4336 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 309.391 null ] >>
+endobj
+4337 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 298.432 null ] >>
+endobj
+4338 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 287.473 null ] >>
+endobj
+4339 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 276.514 null ] >>
+endobj
+4340 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 265.555 null ] >>
+endobj
+4341 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 254.596 null ] >>
+endobj
+4342 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 243.637 null ] >>
+endobj
+4343 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 232.679 null ] >>
+endobj
+4344 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 221.72 null ] >>
+endobj
+4345 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 210.761 null ] >>
+endobj
+4346 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 199.802 null ] >>
+endobj
+4347 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 188.843 null ] >>
+endobj
+4348 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 177.884 null ] >>
+endobj
+4349 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 166.925 null ] >>
+endobj
+4350 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 155.966 null ] >>
+endobj
+4351 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 145.007 null ] >>
+endobj
+4352 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 134.048 null ] >>
+endobj
+4353 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 123.09 null ] >>
+endobj
+4354 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 112.131 null ] >>
+endobj
+4355 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 101.172 null ] >>
+endobj
+4356 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 90.213 null ] >>
+endobj
+4357 0 obj
+<< /D [ 4301 0 R /XYZ 81.077 79.254 null ] >>
+endobj
+4300 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F65 185 0 R /F67 187 0 R /F27 642 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+4360 0 obj
+<< /Filter /FlateDecode /Length 1790 >>
+stream
+xZ]o#5}%E^DEB<P
+E=ª:YqXK *Mà\FG(-9֥-&De l
+WM],_,&v^|e{9^g. rH;{`tq!n5->:~b xtK Ê}_@GkuIJ/4GGŲ7uLuwBv1x]$Ī4ɚHfcG{sD*ku)h\>Бp
+~f!^q>WS48ґ :HiEIEdFp7M3P<iJ KQQ+CǖP2e JLg2x7)X&;"GTU(׻7.wø,[͡S,[p=)D*2LQ)vzn=/E+JH0܊cKÉ)<G?# e)r~Fow ŷI\nWH_<ՁMS6LEh½Y+B$3Dw6=KJI5?eKw? )?+24~l+lH 2t/ef$Rg#8
+f.3!u𰸡oo&uh3 j[.cy.ذ/o27p`3r G>\7HuY TۦI\にT,}ۼYiۼfC_M|?>^af̚zSMn*߬4L8tR/X[*eo7whMmp֏nX*$a=x @)N,DF@0NT;VhF_cG줩Նp 'żm PO+ mYOn%?R6Pqm ēE}
+
+Ptڡ郧x{džfS&eݭ45
+endstream
+endobj
+4359 0 obj
+<< /Type /Page /Contents 4360 0 R /Resources 4358 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 4299 0 R >>
+endobj
+4361 0 obj
+<< /D [ 4359 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+4362 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+4363 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+4364 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 743.951 null ] >>
+endobj
+4365 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 732.992 null ] >>
+endobj
+4366 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 722.033 null ] >>
+endobj
+4367 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 711.075 null ] >>
+endobj
+4368 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 700.116 null ] >>
+endobj
+4369 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 689.157 null ] >>
+endobj
+4370 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 678.198 null ] >>
+endobj
+4371 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 650.46 null ] >>
+endobj
+4372 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 639.501 null ] >>
+endobj
+4373 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 628.542 null ] >>
+endobj
+4374 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 617.583 null ] >>
+endobj
+4375 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 606.624 null ] >>
+endobj
+4376 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 595.665 null ] >>
+endobj
+4377 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 584.706 null ] >>
+endobj
+4378 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 573.747 null ] >>
+endobj
+4379 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 562.788 null ] >>
+endobj
+4380 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 551.829 null ] >>
+endobj
+4381 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 540.871 null ] >>
+endobj
+4382 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 529.912 null ] >>
+endobj
+4383 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 518.953 null ] >>
+endobj
+4384 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 507.994 null ] >>
+endobj
+4385 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 480.255 null ] >>
+endobj
+4386 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 469.297 null ] >>
+endobj
+4387 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 458.338 null ] >>
+endobj
+4388 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 447.379 null ] >>
+endobj
+4389 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 436.42 null ] >>
+endobj
+4390 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 425.461 null ] >>
+endobj
+4391 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 414.502 null ] >>
+endobj
+4392 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 403.543 null ] >>
+endobj
+4393 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 392.584 null ] >>
+endobj
+65 0 obj
+<< /D [ 4359 0 R /XYZ 79.37 366.042 null ] >>
+endobj
+4394 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 275.897 null ] >>
+endobj
+4395 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 264.938 null ] >>
+endobj
+4396 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 253.979 null ] >>
+endobj
+4397 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 243.021 null ] >>
+endobj
+4398 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 232.062 null ] >>
+endobj
+4399 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 221.103 null ] >>
+endobj
+4400 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 210.144 null ] >>
+endobj
+4401 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 199.185 null ] >>
+endobj
+4402 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 188.226 null ] >>
+endobj
+4403 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 177.267 null ] >>
+endobj
+4404 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 166.308 null ] >>
+endobj
+4405 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 155.349 null ] >>
+endobj
+4406 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 144.39 null ] >>
+endobj
+4407 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 133.431 null ] >>
+endobj
+4408 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 122.473 null ] >>
+endobj
+4409 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+4410 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+4411 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+4412 0 obj
+<< /D [ 4359 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+4358 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F67 187 0 R /F19 184 0 R /F20 186 0 R /F70 305 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+4415 0 obj
+<< /Filter /FlateDecode /Length 2552 >>
+stream
+xZ[s~_3k,M3C<$%A6kԒ퍧^)aL_LćsŹƋ^O$w>I(UExAJ"IE" ’,v_La|߇
+R25 0DA'L$zu-Xk^h/SWxQu١7c6P*U(>.äb!:6Ib/xX"*@[\FĀf-2$ZY}Swz],vɿD3`x(%W  H"C\zo{ЍI\>_dX~#OmD8E4 w2x~u7UϠ{tPM0E՟̗Uֻk|KT Y݃y]6G :.6
+. Q-vN,s~9˺ <-ͬ1cފh&ϛ_1UuvV8
+Xu=}}[Jqŭ @}ydqNJviCsƁR!8tByQ%c6EמpwK8{{ <QcWfI"l _]鮇]trq~xɺx R&J)56WHb5оi6ZhޘzԻl]-hK}VU\[E>G$ӨR:^uiza1 =6KU
+endstream
+endobj
+4414 0 obj
+<< /Type /Page /Contents 4415 0 R /Resources 4413 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 4299 0 R >>
+endobj
+4416 0 obj
+<< /D [ 4414 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+4417 0 obj
+<< /D [ 4414 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+4418 0 obj
+<< /D [ 4414 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+4419 0 obj
+<< /D [ 4414 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+4420 0 obj
+<< /D [ 4414 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+4421 0 obj
+<< /D [ 4414 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+4422 0 obj
+<< /D [ 4414 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+4423 0 obj
+<< /D [ 4414 0 R /XYZ 81.077 689.131 null ] >>
+endobj
+4424 0 obj
+<< /D [ 4414 0 R /XYZ 81.077 678.172 null ] >>
+endobj
+4425 0 obj
+<< /D [ 4414 0 R /XYZ 81.077 611.422 null ] >>
+endobj
+4426 0 obj
+<< /D [ 4414 0 R /XYZ 81.077 600.463 null ] >>
+endobj
+4427 0 obj
+<< /D [ 4414 0 R /XYZ 81.077 511.796 null ] >>
+endobj
+4428 0 obj
+<< /D [ 4414 0 R /XYZ 81.077 500.837 null ] >>
+endobj
+4429 0 obj
+<< /D [ 4414 0 R /XYZ 81.077 459.99 null ] >>
+endobj
+4430 0 obj
+<< /D [ 4414 0 R /XYZ 81.077 449.031 null ] >>
+endobj
+4431 0 obj
+<< /D [ 4414 0 R /XYZ 81.077 414.162 null ] >>
+endobj
+4432 0 obj
+<< /D [ 4414 0 R /XYZ 81.077 403.203 null ] >>
+endobj
+4433 0 obj
+<< /D [ 4414 0 R /XYZ 81.077 378.296 null ] >>
+endobj
+4434 0 obj
+<< /D [ 4414 0 R /XYZ 81.077 367.337 null ] >>
+endobj
+4435 0 obj
+<< /D [ 4414 0 R /XYZ 81.077 356.378 null ] >>
+endobj
+4436 0 obj
+<< /D [ 4414 0 R /XYZ 81.077 345.42 null ] >>
+endobj
+4437 0 obj
+<< /D [ 4414 0 R /XYZ 81.077 334.461 null ] >>
+endobj
+4438 0 obj
+<< /D [ 4414 0 R /XYZ 81.077 323.502 null ] >>
+endobj
+4439 0 obj
+<< /D [ 4414 0 R /XYZ 81.077 312.543 null ] >>
+endobj
+4440 0 obj
+<< /D [ 4414 0 R /XYZ 81.077 301.584 null ] >>
+endobj
+4441 0 obj
+<< /D [ 4414 0 R /XYZ 81.077 290.625 null ] >>
+endobj
+4442 0 obj
+<< /D [ 4414 0 R /XYZ 81.077 279.666 null ] >>
+endobj
+4443 0 obj
+<< /D [ 4414 0 R /XYZ 81.077 268.707 null ] >>
+endobj
+4444 0 obj
+<< /D [ 4414 0 R /XYZ 81.077 257.748 null ] >>
+endobj
+4445 0 obj
+<< /D [ 4414 0 R /XYZ 81.077 202.954 null ] >>
+endobj
+4446 0 obj
+<< /D [ 4414 0 R /XYZ 81.077 191.995 null ] >>
+endobj
+4447 0 obj
+<< /D [ 4414 0 R /XYZ 81.077 181.036 null ] >>
+endobj
+4448 0 obj
+<< /D [ 4414 0 R /XYZ 81.077 170.077 null ] >>
+endobj
+4449 0 obj
+<< /D [ 4414 0 R /XYZ 81.077 159.118 null ] >>
+endobj
+4450 0 obj
+<< /D [ 4414 0 R /XYZ 81.077 148.159 null ] >>
+endobj
+4451 0 obj
+<< /D [ 4414 0 R /XYZ 81.077 137.2 null ] >>
+endobj
+4452 0 obj
+<< /D [ 4414 0 R /XYZ 81.077 126.241 null ] >>
+endobj
+4453 0 obj
+<< /D [ 4414 0 R /XYZ 81.077 115.283 null ] >>
+endobj
+4454 0 obj
+<< /D [ 4414 0 R /XYZ 81.077 104.324 null ] >>
+endobj
+4455 0 obj
+<< /D [ 4414 0 R /XYZ 81.077 93.365 null ] >>
+endobj
+4456 0 obj
+<< /D [ 4414 0 R /XYZ 81.077 82.406 null ] >>
+endobj
+4413 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+4460 0 obj
+<< /Filter /FlateDecode /Length 2282 >>
+stream
+xڭZ[o6~ϯ0Ї%O)ڇ
+
+A0 1I1K3$ZPA"Y%0I!AS".x|.\#ѹU (OyM#Iا/\W>,I#t@S4B6^FaӴaK0:LxW*dFW)0LJ}B'<6t"i eh-H:hC}IFrk:wJ[U.nIj)ɒ$ (B'*WXA%M2H5$P*P$S6)T@~ q*G"ߞS'̝A){,eڔ>D!6cZ4 3c ziOKflr&I6:T
+
+PhЯ5UĻT'ghIڭhxO< Ho\sIIIO1ߧ@5zK.rf4v=]3ZwPŏ}hx>kk;Ů$ٸtM(c|A$+CKeS s}*] ^
+MqRh1.l"*`vvC"cX4~ڞAO
+$4q{}
+Z>3waq>c(f5B[}sq4Nq r=+>ci}\COʡ^>{,k>_/:;,ei=Oc j$k$/_tZ&Dt_7i?~%fC\Nův_*J)V!!RZ;>P0R0vlUSS7=@cko ڶXZG.K!־݁spPwPS si\C!D8YP^,Y)°E
+endstream
+endobj
+4459 0 obj
+<< /Type /Page /Contents 4460 0 R /Resources 4458 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 4299 0 R /Annots 4511 0 R >>
+endobj
+4511 0 obj
+[ 4457 0 R ]
+endobj
+4457 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 300.185 311.801 310.618 323.738 ]/A << /S /GoTo /D (Hfootnote.11) >> >>
+endobj
+4461 0 obj
+<< /D [ 4459 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+4462 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+4463 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+4464 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+4465 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+4466 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+4467 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+4468 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 679.168 null ] >>
+endobj
+4469 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 644.299 null ] >>
+endobj
+4470 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 633.34 null ] >>
+endobj
+4471 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 622.381 null ] >>
+endobj
+4472 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 611.422 null ] >>
+endobj
+4473 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 600.463 null ] >>
+endobj
+4474 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 589.504 null ] >>
+endobj
+4475 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 578.545 null ] >>
+endobj
+4476 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 567.586 null ] >>
+endobj
+4477 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 556.627 null ] >>
+endobj
+4478 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 545.669 null ] >>
+endobj
+4479 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 534.71 null ] >>
+endobj
+4480 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 523.751 null ] >>
+endobj
+4481 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 512.792 null ] >>
+endobj
+4482 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 501.833 null ] >>
+endobj
+4483 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 490.874 null ] >>
+endobj
+4484 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 479.915 null ] >>
+endobj
+4485 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 468.956 null ] >>
+endobj
+4486 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 457.997 null ] >>
+endobj
+4487 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 447.038 null ] >>
+endobj
+4488 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 436.08 null ] >>
+endobj
+4489 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 425.121 null ] >>
+endobj
+4490 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 414.162 null ] >>
+endobj
+4491 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 403.203 null ] >>
+endobj
+4492 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 392.244 null ] >>
+endobj
+4493 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 381.285 null ] >>
+endobj
+4494 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 370.326 null ] >>
+endobj
+4495 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 359.367 null ] >>
+endobj
+4496 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 348.408 null ] >>
+endobj
+4497 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 337.449 null ] >>
+endobj
+4498 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 284.647 null ] >>
+endobj
+4499 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 273.688 null ] >>
+endobj
+4500 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 262.73 null ] >>
+endobj
+4501 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 251.771 null ] >>
+endobj
+4503 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 187.014 null ] >>
+endobj
+4504 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 176.055 null ] >>
+endobj
+4505 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 165.096 null ] >>
+endobj
+4506 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 154.137 null ] >>
+endobj
+4507 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 143.178 null ] >>
+endobj
+4508 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 127.238 null ] >>
+endobj
+4509 0 obj
+<< /D [ 4459 0 R /XYZ 81.077 116.279 null ] >>
+endobj
+4510 0 obj
+<< /D [ 4459 0 R /XYZ 94.613 85.444 null ] >>
+endobj
+4458 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F22 459 0 R /F27 642 0 R /F72 4502 0 R /F76 468 0 R /F53 203 0 R /F80 760 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+4514 0 obj
+<< /Filter /FlateDecode /Length 2338 >>
+stream
+xڭZo~߿ou+v+i}bѱ.r!)ѢfK4Ùofd%EC27gÇϷ>~r^HN(xq]{IL/s?DJ*˜$(*)+>MMV뛋+NOuYUVf2Az
+&ON)`Nτ`R096p:g+e]%@mugd#\J5 V :HcDt~\_\AF/z$Ǧ#*D8QͫyX0d,Stq it2vCE2a>Mem^.+,D
+䁉O%'u{R=SW+Ixbc%ÝJ!ˢ/H|vWΘ\-FuZ;#2ol=U,vgH@p&L|DәZVkY`ݴ8= ( -lL~2t'BDW]Rͯ KR.BrЬ;YNw
+jڥKMtwҸB^Q7c*K˥E0vr`;*k0jkz7o\HP!I4
+g;eCC1I"n竇^@U6t*};p
+qQmH оuH-@z4Xh"7Nן$T3+~.U2O}dL
+Ozg<"E0a(o(T >3ϥ-S/@X=8 SVoNN#"
+%ܧM|
+^>2{]?]hI8ߙJGIRg5-֍t]g5Ǩtnajz"ZEDG+
+}fH?(}~|f:w_t.E8[MMu3 o&Y2:*2:ϒ$) _)b̠ڧ\oc't 6_
+endstream
+endobj
+4513 0 obj
+<< /Type /Page /Contents 4514 0 R /Resources 4512 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 4299 0 R >>
+endobj
+4515 0 obj
+<< /D [ 4513 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+4516 0 obj
+<< /D [ 4513 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+4517 0 obj
+<< /D [ 4513 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+4518 0 obj
+<< /D [ 4513 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+4519 0 obj
+<< /D [ 4513 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+4520 0 obj
+<< /D [ 4513 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+4521 0 obj
+<< /D [ 4513 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+4522 0 obj
+<< /D [ 4513 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+4523 0 obj
+<< /D [ 4513 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+4524 0 obj
+<< /D [ 4513 0 R /XYZ 81.077 607.437 null ] >>
+endobj
+4525 0 obj
+<< /D [ 4513 0 R /XYZ 81.077 596.478 null ] >>
+endobj
+4526 0 obj
+<< /D [ 4513 0 R /XYZ 81.077 585.519 null ] >>
+endobj
+4527 0 obj
+<< /D [ 4513 0 R /XYZ 81.077 574.56 null ] >>
+endobj
+4528 0 obj
+<< /D [ 4513 0 R /XYZ 81.077 563.601 null ] >>
+endobj
+4529 0 obj
+<< /D [ 4513 0 R /XYZ 81.077 522.754 null ] >>
+endobj
+4530 0 obj
+<< /D [ 4513 0 R /XYZ 81.077 457.997 null ] >>
+endobj
+4531 0 obj
+<< /D [ 4513 0 R /XYZ 81.077 405.195 null ] >>
+endobj
+4532 0 obj
+<< /D [ 4513 0 R /XYZ 81.077 389.255 null ] >>
+endobj
+4533 0 obj
+<< /D [ 4513 0 R /XYZ 81.077 378.296 null ] >>
+endobj
+4534 0 obj
+<< /D [ 4513 0 R /XYZ 81.077 367.337 null ] >>
+endobj
+4535 0 obj
+<< /D [ 4513 0 R /XYZ 81.077 324.498 null ] >>
+endobj
+4536 0 obj
+<< /D [ 4513 0 R /XYZ 81.077 313.539 null ] >>
+endobj
+4537 0 obj
+<< /D [ 4513 0 R /XYZ 81.077 302.58 null ] >>
+endobj
+4538 0 obj
+<< /D [ 4513 0 R /XYZ 81.077 291.621 null ] >>
+endobj
+4539 0 obj
+<< /D [ 4513 0 R /XYZ 81.077 280.662 null ] >>
+endobj
+4540 0 obj
+<< /D [ 4513 0 R /XYZ 81.077 269.703 null ] >>
+endobj
+4541 0 obj
+<< /D [ 4513 0 R /XYZ 81.077 258.745 null ] >>
+endobj
+4542 0 obj
+<< /D [ 4513 0 R /XYZ 81.077 247.786 null ] >>
+endobj
+4543 0 obj
+<< /D [ 4513 0 R /XYZ 81.077 236.827 null ] >>
+endobj
+4544 0 obj
+<< /D [ 4513 0 R /XYZ 81.077 225.868 null ] >>
+endobj
+4545 0 obj
+<< /D [ 4513 0 R /XYZ 81.077 214.909 null ] >>
+endobj
+4546 0 obj
+<< /D [ 4513 0 R /XYZ 81.077 203.95 null ] >>
+endobj
+4547 0 obj
+<< /D [ 4513 0 R /XYZ 81.077 192.991 null ] >>
+endobj
+4548 0 obj
+<< /D [ 4513 0 R /XYZ 81.077 182.032 null ] >>
+endobj
+4549 0 obj
+<< /D [ 4513 0 R /XYZ 81.077 171.073 null ] >>
+endobj
+4550 0 obj
+<< /D [ 4513 0 R /XYZ 81.077 160.114 null ] >>
+endobj
+4551 0 obj
+<< /D [ 4513 0 R /XYZ 81.077 149.155 null ] >>
+endobj
+4552 0 obj
+<< /D [ 4513 0 R /XYZ 81.077 138.197 null ] >>
+endobj
+4553 0 obj
+<< /D [ 4513 0 R /XYZ 81.077 127.238 null ] >>
+endobj
+4554 0 obj
+<< /D [ 4513 0 R /XYZ 81.077 116.279 null ] >>
+endobj
+4555 0 obj
+<< /D [ 4513 0 R /XYZ 81.077 105.32 null ] >>
+endobj
+4556 0 obj
+<< /D [ 4513 0 R /XYZ 81.077 94.361 null ] >>
+endobj
+4557 0 obj
+<< /D [ 4513 0 R /XYZ 81.077 83.402 null ] >>
+endobj
+4512 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+4561 0 obj
+<< /Filter /FlateDecode /Length 2867 >>
+stream
+xڵZ_Oᗢ6p(-.
+7y&hp
+
+ }&&>9lz.ulj.\.
+u޷ȏshrcd3hO$Yy~I}_,L粺r 6(6IPޡ$_kx $n$:$H۠[pK(Ȭ!ޖw}J
+̨8b2.&G} ^_vA,1'I'wCw&yG==V`VIQOWdvt <jK/$\BHtL |^n??524o0$^{3[u x]Jk⩗ͥ2;,z8N2`m*m#K*{*jv.p>$ BJ[$ܳ!
+ۧI7k#vTīCV?YxV_cvqVu*N)q P@!h8IY.rIGLнClw
+WހJz#4Qnmb`֐.B]ڇӗuH=nW6#Njb—
+ӒqJg ̂izԿ{<4,p]?޼Ĥh>Oy5Cl_;c3u@
+endstream
+endobj
+4560 0 obj
+<< /Type /Page /Contents 4561 0 R /Resources 4559 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 4299 0 R /Annots 4596 0 R >>
+endobj
+4596 0 obj
+[ 4558 0 R ]
+endobj
+4558 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 434.917 198.227 445.35 210.164 ]/A << /S /GoTo /D (Hfootnote.12) >> >>
+endobj
+4562 0 obj
+<< /D [ 4560 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+4563 0 obj
+<< /D [ 4560 0 R /XYZ 81.077 730.974 null ] >>
+endobj
+4564 0 obj
+<< /D [ 4560 0 R /XYZ 81.077 690.127 null ] >>
+endobj
+4565 0 obj
+<< /D [ 4560 0 R /XYZ 81.077 631.347 null ] >>
+endobj
+4566 0 obj
+<< /D [ 4560 0 R /XYZ 81.077 620.388 null ] >>
+endobj
+4567 0 obj
+<< /D [ 4560 0 R /XYZ 81.077 561.609 null ] >>
+endobj
+4568 0 obj
+<< /D [ 4560 0 R /XYZ 81.077 550.65 null ] >>
+endobj
+4569 0 obj
+<< /D [ 4560 0 R /XYZ 81.077 539.691 null ] >>
+endobj
+4570 0 obj
+<< /D [ 4560 0 R /XYZ 81.077 528.732 null ] >>
+endobj
+4571 0 obj
+<< /D [ 4560 0 R /XYZ 81.077 517.773 null ] >>
+endobj
+4572 0 obj
+<< /D [ 4560 0 R /XYZ 81.077 458.994 null ] >>
+endobj
+4573 0 obj
+<< /D [ 4560 0 R /XYZ 81.077 448.035 null ] >>
+endobj
+4574 0 obj
+<< /D [ 4560 0 R /XYZ 81.077 437.076 null ] >>
+endobj
+4575 0 obj
+<< /D [ 4560 0 R /XYZ 81.077 426.117 null ] >>
+endobj
+4576 0 obj
+<< /D [ 4560 0 R /XYZ 81.077 415.158 null ] >>
+endobj
+4577 0 obj
+<< /D [ 4560 0 R /XYZ 81.077 404.199 null ] >>
+endobj
+4578 0 obj
+<< /D [ 4560 0 R /XYZ 81.077 393.24 null ] >>
+endobj
+4579 0 obj
+<< /D [ 4560 0 R /XYZ 81.077 382.281 null ] >>
+endobj
+4580 0 obj
+<< /D [ 4560 0 R /XYZ 81.077 371.322 null ] >>
+endobj
+4581 0 obj
+<< /D [ 4560 0 R /XYZ 81.077 360.363 null ] >>
+endobj
+4582 0 obj
+<< /D [ 4560 0 R /XYZ 81.077 349.405 null ] >>
+endobj
+4583 0 obj
+<< /D [ 4560 0 R /XYZ 81.077 338.446 null ] >>
+endobj
+4584 0 obj
+<< /D [ 4560 0 R /XYZ 81.077 327.487 null ] >>
+endobj
+4585 0 obj
+<< /D [ 4560 0 R /XYZ 81.077 316.528 null ] >>
+endobj
+4586 0 obj
+<< /D [ 4560 0 R /XYZ 81.077 305.569 null ] >>
+endobj
+4587 0 obj
+<< /D [ 4560 0 R /XYZ 81.077 294.61 null ] >>
+endobj
+4588 0 obj
+<< /D [ 4560 0 R /XYZ 81.077 283.651 null ] >>
+endobj
+4589 0 obj
+<< /D [ 4560 0 R /XYZ 81.077 272.692 null ] >>
+endobj
+4590 0 obj
+<< /D [ 4560 0 R /XYZ 81.077 261.733 null ] >>
+endobj
+4591 0 obj
+<< /D [ 4560 0 R /XYZ 81.077 236.827 null ] >>
+endobj
+4592 0 obj
+<< /D [ 4560 0 R /XYZ 81.077 225.868 null ] >>
+endobj
+4593 0 obj
+<< /D [ 4560 0 R /XYZ 81.077 159.118 null ] >>
+endobj
+4594 0 obj
+<< /D [ 4560 0 R /XYZ 81.077 148.159 null ] >>
+endobj
+4595 0 obj
+<< /D [ 4560 0 R /XYZ 94.613 118.57 null ] >>
+endobj
+4559 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F69 304 0 R /F68 189 0 R /F64 183 0 R /F65 185 0 R /F22 459 0 R /F70 305 0 R /F76 468 0 R /F53 203 0 R /F80 760 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+4599 0 obj
+<< /Filter /FlateDecode /Length 2679 >>
+stream
+xڵZ[s۸~ϯL*Ϭ܈:in:wf>4 -6cԒTēs
+ySn#RMbU>(i;
+$ÕsnKXV7n^iTiEqkk6m:,BIF$=^ $vV_.Ubr*@OhAi#G QwtRР/N
+-&8q ri*,b;s$iGܒSaI!}G%/hbMA6tS߭nrYŇruXЖk6sWnZzMW, B^/y#ڀret7E_]'|&Yd^7M ,$o[VnLxV[øWQh>l% ;f)*!D>)kFp6sg*JZM=4ԳTޙ`-r}<DdqCsJ49c0
+&?tx׳g#=Ԟz: BCd&cQ=+!!O%2Gi:0FsȤ"LfnF4ܾvrFns;?
+H#3=4[^mJ,3SgH33mN[@{תuctsZI1]]g>4-su"o54@T`E}Is:}lH7in} c3 F$}L( h̰<]3nd]b_L/yP)9
+@*&Zݕ4CFT]c`ԢZ;H3p(&[f$:fܰp,qӵtKƘ0#ew2QJupOCu%%})cY8p&X-)Ur_OABu ɇoqʵ*6 uiQaT{beXX!aǰh٢`K3[Uў=QÚwuwSB9=Ӳy-B%|1|c8"y޺|PW$a)`W;@[lG$eyϪ@$2Ch)sS׷sEqVE{O<sYyoV>0Yga)n~`ҒHk]~DSkINJ"tȎIʈ"|]_(̺e2IK'#c4+
+J/@ ,KS1:FӛM;B>&,?5ۖT(aS|ܥbq,x
+endstream
+endobj
+4598 0 obj
+<< /Type /Page /Contents 4599 0 R /Resources 4597 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 4299 0 R >>
+endobj
+4600 0 obj
+<< /D [ 4598 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+4601 0 obj
+<< /D [ 4598 0 R /XYZ 81.077 731.631 null ] >>
+endobj
+4602 0 obj
+<< /D [ 4598 0 R /XYZ 81.077 720.672 null ] >>
+endobj
+4603 0 obj
+<< /D [ 4598 0 R /XYZ 81.077 612.038 null ] >>
+endobj
+4604 0 obj
+<< /D [ 4598 0 R /XYZ 81.077 601.08 null ] >>
+endobj
+4605 0 obj
+<< /D [ 4598 0 R /XYZ 81.077 590.121 null ] >>
+endobj
+4606 0 obj
+<< /D [ 4598 0 R /XYZ 81.077 579.162 null ] >>
+endobj
+4607 0 obj
+<< /D [ 4598 0 R /XYZ 81.077 568.203 null ] >>
+endobj
+4608 0 obj
+<< /D [ 4598 0 R /XYZ 81.077 540.626 null ] >>
+endobj
+4609 0 obj
+<< /D [ 4598 0 R /XYZ 81.077 529.667 null ] >>
+endobj
+4610 0 obj
+<< /D [ 4598 0 R /XYZ 81.077 518.708 null ] >>
+endobj
+4611 0 obj
+<< /D [ 4598 0 R /XYZ 81.077 507.749 null ] >>
+endobj
+4612 0 obj
+<< /D [ 4598 0 R /XYZ 81.077 496.79 null ] >>
+endobj
+4613 0 obj
+<< /D [ 4598 0 R /XYZ 81.077 485.831 null ] >>
+endobj
+4614 0 obj
+<< /D [ 4598 0 R /XYZ 81.077 474.872 null ] >>
+endobj
+4615 0 obj
+<< /D [ 4598 0 R /XYZ 81.077 463.914 null ] >>
+endobj
+4616 0 obj
+<< /D [ 4598 0 R /XYZ 81.077 452.955 null ] >>
+endobj
+4617 0 obj
+<< /D [ 4598 0 R /XYZ 81.077 441.996 null ] >>
+endobj
+4618 0 obj
+<< /D [ 4598 0 R /XYZ 81.077 431.037 null ] >>
+endobj
+4619 0 obj
+<< /D [ 4598 0 R /XYZ 81.077 420.078 null ] >>
+endobj
+4620 0 obj
+<< /D [ 4598 0 R /XYZ 81.077 409.119 null ] >>
+endobj
+4621 0 obj
+<< /D [ 4598 0 R /XYZ 81.077 398.16 null ] >>
+endobj
+4622 0 obj
+<< /D [ 4598 0 R /XYZ 81.077 387.201 null ] >>
+endobj
+4623 0 obj
+<< /D [ 4598 0 R /XYZ 81.077 376.242 null ] >>
+endobj
+4624 0 obj
+<< /D [ 4598 0 R /XYZ 81.077 315.429 null ] >>
+endobj
+4625 0 obj
+<< /D [ 4598 0 R /XYZ 81.077 304.47 null ] >>
+endobj
+4626 0 obj
+<< /D [ 4598 0 R /XYZ 81.077 293.512 null ] >>
+endobj
+4627 0 obj
+<< /D [ 4598 0 R /XYZ 81.077 282.553 null ] >>
+endobj
+4628 0 obj
+<< /D [ 4598 0 R /XYZ 81.077 271.594 null ] >>
+endobj
+4629 0 obj
+<< /D [ 4598 0 R /XYZ 81.077 260.635 null ] >>
+endobj
+4630 0 obj
+<< /D [ 4598 0 R /XYZ 81.077 249.676 null ] >>
+endobj
+4631 0 obj
+<< /D [ 4598 0 R /XYZ 81.077 238.717 null ] >>
+endobj
+4632 0 obj
+<< /D [ 4598 0 R /XYZ 81.077 227.758 null ] >>
+endobj
+4633 0 obj
+<< /D [ 4598 0 R /XYZ 81.077 188.226 null ] >>
+endobj
+4634 0 obj
+<< /D [ 4598 0 R /XYZ 81.077 177.267 null ] >>
+endobj
+4635 0 obj
+<< /D [ 4598 0 R /XYZ 81.077 166.308 null ] >>
+endobj
+4636 0 obj
+<< /D [ 4598 0 R /XYZ 81.077 155.349 null ] >>
+endobj
+4637 0 obj
+<< /D [ 4598 0 R /XYZ 81.077 144.39 null ] >>
+endobj
+4638 0 obj
+<< /D [ 4598 0 R /XYZ 81.077 133.431 null ] >>
+endobj
+4639 0 obj
+<< /D [ 4598 0 R /XYZ 81.077 122.473 null ] >>
+endobj
+4640 0 obj
+<< /D [ 4598 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+4641 0 obj
+<< /D [ 4598 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+4642 0 obj
+<< /D [ 4598 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+4643 0 obj
+<< /D [ 4598 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+4597 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R /F30 644 0 R /F70 305 0 R /F77 542 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+4646 0 obj
+<< /Filter /FlateDecode /Length 2108 >>
+stream
+xڽZK60IsIYȡ,Pr[Hi߷%-qrŪiFg(wpSdfX=o<Dglf"1=#4b?sIo~,
+t!zww\(S'`?uRcs&Kա_ox{H^5[Z-<w㹕ϓxIWRRJ2P) Vw=iMTS X"zp;c `Ulb`4S0KyJ/"D[|EM
+ܫqȳξ^̐h3?OJ@1%C4!ͼ'1q-Q юU=>~s vkmRGE^^w>%۞ȫ&j/B6@JM{7.ЎzlPPmԸ "@OHySwdE=eJD!#
+4S?JہO?v)J6 '3"Q+1"/M'3ĈK rb'3bP+1/Μ'.eZaBscd`D_ΈD1r8"-O0D1'13RI}1z{9#ȕ∄SJRUsRwnqzh:
+M.ю'"J%&K&◦D]<&=9wC5)
+r򏇪M<'p=
+(Vt}Cqk$!-|k$ #b/lYV#T|T4`z@&$n{ ˟OcU@þ:V^rj*\W3@Q.
+u8m=ˉUc;[O$8*Zfoы{ SwOĔ!yT1]4Q9#$mlmaH[
+endstream
+endobj
+4645 0 obj
+<< /Type /Page /Contents 4646 0 R /Resources 4644 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 4299 0 R >>
+endobj
+4647 0 obj
+<< /D [ 4645 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+4648 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+4649 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+4650 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+4651 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+4652 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+4653 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 671.521 null ] >>
+endobj
+4654 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 660.562 null ] >>
+endobj
+4655 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 649.603 null ] >>
+endobj
+4656 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 638.645 null ] >>
+endobj
+4657 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 627.686 null ] >>
+endobj
+4658 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 616.727 null ] >>
+endobj
+4659 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 605.768 null ] >>
+endobj
+4660 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 594.809 null ] >>
+endobj
+4661 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 583.85 null ] >>
+endobj
+4662 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 572.891 null ] >>
+endobj
+4663 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 561.932 null ] >>
+endobj
+4664 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 550.973 null ] >>
+endobj
+4665 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 540.014 null ] >>
+endobj
+4666 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 529.056 null ] >>
+endobj
+4667 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 518.097 null ] >>
+endobj
+4668 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 507.138 null ] >>
+endobj
+4669 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 496.179 null ] >>
+endobj
+4670 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 485.22 null ] >>
+endobj
+4671 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 433.549 null ] >>
+endobj
+4672 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 422.59 null ] >>
+endobj
+4673 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 411.631 null ] >>
+endobj
+4674 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 400.672 null ] >>
+endobj
+4675 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 389.713 null ] >>
+endobj
+4676 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 378.755 null ] >>
+endobj
+4677 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 367.796 null ] >>
+endobj
+4678 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 356.837 null ] >>
+endobj
+4679 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 345.878 null ] >>
+endobj
+4680 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 334.919 null ] >>
+endobj
+4681 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 323.96 null ] >>
+endobj
+4682 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 313.001 null ] >>
+endobj
+4683 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 302.042 null ] >>
+endobj
+4684 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 291.083 null ] >>
+endobj
+4685 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 280.124 null ] >>
+endobj
+4686 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 239.655 null ] >>
+endobj
+4687 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 228.696 null ] >>
+endobj
+4688 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 217.737 null ] >>
+endobj
+4689 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 206.778 null ] >>
+endobj
+4690 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 195.819 null ] >>
+endobj
+4691 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 184.86 null ] >>
+endobj
+4692 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 144.39 null ] >>
+endobj
+4693 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 133.431 null ] >>
+endobj
+4694 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 122.473 null ] >>
+endobj
+4695 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+4696 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+4697 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+4698 0 obj
+<< /D [ 4645 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+4644 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F77 542 0 R /F20 186 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+4701 0 obj
+<< /Filter /FlateDecode /Length 3710 >>
+stream
+x[[~-1_/N:H 0ЇdWVHڬS"y8vg
+4s9$G>y?_pd&^|/eD/(xˬpgVLN9ܘ[zYVyj,gH3Y(v^SA|*I,IqIR'0~[/7IfSe˗o_]zm L*0Uekv;~U|=J6n* K~\ѱcR; <ܽlz؏N[&T,Ws95`kjp[/s6+8([#)
+9jP4_:(SLL8.!Zɴ*2l``ڕ5ҊՊLquZw\$ US:8-tSAQa& L{h FAMrzz[\(1}pӥ]jӥ;W"L@
+? ccDB -wU7wFMᾳ嬘<àK[K2-*Φ͠wK؂9ᎄ9CK-n{Ҡ9">bpxhy
+Nhij
+@1b&F0ytLj|Tg
+ل%]$:(َ: =tta2tS@`SUy>qH`kJ mk,~`kgYHmԌJ]UIH1bC&Vj誏 +vX7!ٌ$]$s{D&&Z]U !
+H1bC&VHg`҈j28#┖ql;PArQ3. htU%"D ĈXU+LqGCYT1m
+qr Uj詏 8Ś` 8R'Bd3p%PFOUBبBĐ=UaӢjz"D6Cu t
+|GSX7 &=&H߆qZt c}Gǝnwvhw8e>w5%7_41~id/?ivℭ-o;9m|?tZ%`?iVjMz:(]Byjnq~4/OWfE9Ks |<]6Cl.swp'`"r>~n![kfAe)2
+=O=z@rB(C. ݊xy4Q;OOS*W+ 2-gcݿ5wfn]?d<@}=YE}&Ta!wmx
++
+nH_5//h-pѼxlK #^I:)<C˨/S'5>Ion{|}i*{|U~|72Gc{kè/5dj8ϿWrH&nG ,6uYQ%O/HJrqJ(wU`I}|=zˮh.w /_yϬC7fy~J-iHB`{BLϡKNZ㋹כޛzx{{6ԪqSAy+I:~4u8:Kɜ+y;=.qj= 'b$gV
+endstream
+endobj
+4700 0 obj
+<< /Type /Page /Contents 4701 0 R /Resources 4699 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 4299 0 R >>
+endobj
+4702 0 obj
+<< /D [ 4700 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+4703 0 obj
+<< /D [ 4700 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+4704 0 obj
+<< /D [ 4700 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+4705 0 obj
+<< /D [ 4700 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+4706 0 obj
+<< /D [ 4700 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+4707 0 obj
+<< /D [ 4700 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+4708 0 obj
+<< /D [ 4700 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+4709 0 obj
+<< /D [ 4700 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+4710 0 obj
+<< /D [ 4700 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+4711 0 obj
+<< /D [ 4700 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+4712 0 obj
+<< /D [ 4700 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+4713 0 obj
+<< /D [ 4700 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+4714 0 obj
+<< /D [ 4700 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+4715 0 obj
+<< /D [ 4700 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+69 0 obj
+<< /D [ 4700 0 R /XYZ 79.37 613.863 null ] >>
+endobj
+4716 0 obj
+<< /D [ 4700 0 R /XYZ 81.077 234.159 null ] >>
+endobj
+4717 0 obj
+<< /D [ 4700 0 R /XYZ 81.077 223.2 null ] >>
+endobj
+4718 0 obj
+<< /D [ 4700 0 R /XYZ 81.077 192.316 null ] >>
+endobj
+4719 0 obj
+<< /D [ 4700 0 R /XYZ 81.077 163.425 null ] >>
+endobj
+4720 0 obj
+<< /D [ 4700 0 R /XYZ 81.077 152.466 null ] >>
+endobj
+4721 0 obj
+<< /D [ 4700 0 R /XYZ 81.077 141.507 null ] >>
+endobj
+4722 0 obj
+<< /D [ 4700 0 R /XYZ 81.077 130.548 null ] >>
+endobj
+4699 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F67 187 0 R /F19 184 0 R /F70 305 0 R /F34 1792 0 R /F30 644 0 R /F27 642 0 R /F20 186 0 R /F78 654 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+4725 0 obj
+<< /Filter /FlateDecode /Length 1827 >>
+stream
+xZߏ۸~_a[D."(yZڬRdXr"ޡ(Sz6ibI>pf84__/tݫ߀[80jqw
+_tL
+}A 'ǒmydcB>n4ڋ*õ@S :FBj^f)5SSR?-Z:.rUci_coz1c5bf裻oIOV$^҈+xJ\8&%҈Cӷf]3m)v
++&qyn ]XpykLVat2HNV!o6dg&wwm7{Nު>C xV2QrT̏{0FnSR_<KZgήKs\1Y'>F\,50~Ag+dosd7)t
+&BZT9L00?dm=z[g(ISL
+endstream
+endobj
+4724 0 obj
+<< /Type /Page /Contents 4725 0 R /Resources 4723 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 4780 0 R >>
+endobj
+4726 0 obj
+<< /D [ 4724 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+4727 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 731.108 null ] >>
+endobj
+4728 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 720.149 null ] >>
+endobj
+4729 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 709.191 null ] >>
+endobj
+4730 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 698.232 null ] >>
+endobj
+4731 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 687.273 null ] >>
+endobj
+4732 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 658.651 null ] >>
+endobj
+4733 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 647.692 null ] >>
+endobj
+4734 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 636.733 null ] >>
+endobj
+4735 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 625.774 null ] >>
+endobj
+4736 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 614.815 null ] >>
+endobj
+4737 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 603.856 null ] >>
+endobj
+4738 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 592.897 null ] >>
+endobj
+4739 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 581.938 null ] >>
+endobj
+4740 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 570.979 null ] >>
+endobj
+4741 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 560.02 null ] >>
+endobj
+4742 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 549.062 null ] >>
+endobj
+4743 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 538.103 null ] >>
+endobj
+4744 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 527.144 null ] >>
+endobj
+4745 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 516.185 null ] >>
+endobj
+4746 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 505.226 null ] >>
+endobj
+4747 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 494.267 null ] >>
+endobj
+4748 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 483.308 null ] >>
+endobj
+4749 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 472.349 null ] >>
+endobj
+4750 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 461.39 null ] >>
+endobj
+4751 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 450.431 null ] >>
+endobj
+4752 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 439.472 null ] >>
+endobj
+4753 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 428.514 null ] >>
+endobj
+4754 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 417.555 null ] >>
+endobj
+4755 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 406.596 null ] >>
+endobj
+4756 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 395.637 null ] >>
+endobj
+4757 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 367.015 null ] >>
+endobj
+4758 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 338.392 null ] >>
+endobj
+4759 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 327.434 null ] >>
+endobj
+4760 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 316.475 null ] >>
+endobj
+4761 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 305.516 null ] >>
+endobj
+4762 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 264.938 null ] >>
+endobj
+4763 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 253.979 null ] >>
+endobj
+4764 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 243.021 null ] >>
+endobj
+4765 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 232.062 null ] >>
+endobj
+4766 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 221.103 null ] >>
+endobj
+4767 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 210.144 null ] >>
+endobj
+4768 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 199.185 null ] >>
+endobj
+4769 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 188.226 null ] >>
+endobj
+4770 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 177.267 null ] >>
+endobj
+4771 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 166.308 null ] >>
+endobj
+4772 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 155.349 null ] >>
+endobj
+4773 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 144.39 null ] >>
+endobj
+4774 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 133.431 null ] >>
+endobj
+4775 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 122.473 null ] >>
+endobj
+4776 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+4777 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+4778 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+4779 0 obj
+<< /D [ 4724 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+4723 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R /F70 305 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+4783 0 obj
+<< /Filter /FlateDecode /Length 1826 >>
+stream
+xڽZ[o6~ϯ0@~ !C:-'l)CCQE;M|ܮ/Mxxx.zB'oO$ʷɯW'/H,|r<aD331j=3_Wǹ
+>(|S m2j~ƪNYTB](E'BDrb}~¾nbʪWT^5;`p)*O!t/N}3xBgXo } P*eӁs7Y/3ߝB}MʇVx[12:ݩ otMXSꠔp[Ơ_Տ~ɠ̮;<6 jMS۲jvfQ KPr:ÛB/q$;-FMƦh|3s@+0vS˶,0o/Y[K- `9 |gew 2
+ψku?t5<+/4wU;0C+:>ZA݀e(,۝j
+0N9xrZYAp>9+ U/}Q8d!]MB1ݦu!ugSK—.
+u4:{0Ee.EѯTv/BC]"T MਏQݧ.Ρ.Q8I껢:@aJc;z;ΪeKyʦ4[1'֢(*&hYNcHWtg"Ui 1ÎF8*J_qI0hmX 1B.:0C8A?/;oA1kjB:m%J2uq wiDi}x@2(&#whqG`Ѫhc4&śgr1Ib]tW)&h"ĉ5Ce| 'DϬ9k$5愲Xeh\TIxيbT'{ƛPFo"OQ\5EoY\u=N>\nt;ήW#w"Fmp"AeIĶ36KQdR...y!PgG1dDGʌ;w2RJLQ~O;/a1Ct \Hh%9kWW.Cf1q[.gi<"Ejq{ ~A>Sw@^2 C`4]w׀
+endstream
+endobj
+4782 0 obj
+<< /Type /Page /Contents 4783 0 R /Resources 4781 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 4780 0 R >>
+endobj
+4784 0 obj
+<< /D [ 4782 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+4785 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+4786 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+4787 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+4788 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+4789 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+4790 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+4791 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+4792 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 626.366 null ] >>
+endobj
+4793 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 615.407 null ] >>
+endobj
+4794 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 604.448 null ] >>
+endobj
+4795 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 593.489 null ] >>
+endobj
+4796 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 582.53 null ] >>
+endobj
+4797 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 571.571 null ] >>
+endobj
+4798 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 560.613 null ] >>
+endobj
+4799 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 549.654 null ] >>
+endobj
+4800 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 488.964 null ] >>
+endobj
+4801 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 478.005 null ] >>
+endobj
+4802 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 467.046 null ] >>
+endobj
+4803 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 456.088 null ] >>
+endobj
+4804 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 445.129 null ] >>
+endobj
+4805 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 434.17 null ] >>
+endobj
+4806 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 423.211 null ] >>
+endobj
+4807 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 412.252 null ] >>
+endobj
+4808 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 401.293 null ] >>
+endobj
+4809 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 390.334 null ] >>
+endobj
+4810 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 379.375 null ] >>
+endobj
+4811 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 368.416 null ] >>
+endobj
+4812 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 357.457 null ] >>
+endobj
+4813 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 346.499 null ] >>
+endobj
+4814 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 335.54 null ] >>
+endobj
+4815 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 324.581 null ] >>
+endobj
+4816 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 313.622 null ] >>
+endobj
+4817 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 302.663 null ] >>
+endobj
+4818 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 291.704 null ] >>
+endobj
+4819 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 280.745 null ] >>
+endobj
+4820 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 269.786 null ] >>
+endobj
+4821 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 258.827 null ] >>
+endobj
+4822 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 247.868 null ] >>
+endobj
+4823 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 236.91 null ] >>
+endobj
+4824 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 225.951 null ] >>
+endobj
+4825 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 214.992 null ] >>
+endobj
+4826 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 204.033 null ] >>
+endobj
+4827 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 193.074 null ] >>
+endobj
+4828 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 182.115 null ] >>
+endobj
+4829 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 171.156 null ] >>
+endobj
+4830 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 160.197 null ] >>
+endobj
+4831 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 149.238 null ] >>
+endobj
+4832 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 138.279 null ] >>
+endobj
+4833 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 127.32 null ] >>
+endobj
+4834 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 116.362 null ] >>
+endobj
+4835 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 105.403 null ] >>
+endobj
+4836 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 94.444 null ] >>
+endobj
+4837 0 obj
+<< /D [ 4782 0 R /XYZ 81.077 83.485 null ] >>
+endobj
+4781 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+4840 0 obj
+<< /Filter /FlateDecode /Length 2525 >>
+stream
+xڽZo~߿8p[dWtw@ӗ}bˉn'ɛwFhbzq73nA?(loy6 Ia/n6oDla4,]aD2.s raZ))
+(2UM0@GsJ%I jDO{D뢒҂Oqȑ>9q5EZmhE$#<T (\zx3 2u=K ,HU^-GZB8U?5먢<,@GoqiRBu)&
+RM^8b"loyM$m&J: \yJc3A"]
+Hktk4˪r])n&M n,]t#oEYTZ7֣v -Vu3<MZ՝R4.sEcbrz[=|u?]\
+!ru~tcn_
+v lyQ+D`=q
+$b.@#)/˻[6}wu;m. /
+ x, #Vf3mCslz>a{N
+F)Z7MQ7v)}TRo2K#)%Q "Ϻq'n]}XR
+2C0nE@K|?֮2k lc.*(O1]CR/=X`Ufpz;;:C;0'$% +wkjmA_K1tꇇPJAW
+w8gIM %g6i/gnwwPe:г?Īsw]_N\ʠS#fL; $\9V%4@v=Oz2 ]Dah/#âUƧG˙?
+)v@^|);4$sxJ(d-2P
+W*T?)]YT5X* M Q'@*6W7g=h'UƺxX7h8r+w^~eUק\Yy>ieW8O6_,  :nMsJ = $/`r:▅D2`CYR W=cSt‘
+^q6+30rgLW?h8~*rF Vòtu]^jﵻ#*ϧ[dX%J`E50$k,YeZ.eIi)ۧS ޲3$
+endstream
+endobj
+4839 0 obj
+<< /Type /Page /Contents 4840 0 R /Resources 4838 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 4780 0 R >>
+endobj
+4841 0 obj
+<< /D [ 4839 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+4842 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+4843 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+4844 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+4845 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+4846 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+4847 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+4848 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+4849 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+4850 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+4851 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+4852 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+4853 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+4854 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+4855 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 626.366 null ] >>
+endobj
+4856 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 615.407 null ] >>
+endobj
+4857 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 604.448 null ] >>
+endobj
+4858 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 593.489 null ] >>
+endobj
+4859 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 582.53 null ] >>
+endobj
+4860 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 571.571 null ] >>
+endobj
+4861 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 560.613 null ] >>
+endobj
+4862 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 549.654 null ] >>
+endobj
+4863 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 538.695 null ] >>
+endobj
+4864 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 527.736 null ] >>
+endobj
+4865 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 516.777 null ] >>
+endobj
+4866 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 505.818 null ] >>
+endobj
+4867 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 494.859 null ] >>
+endobj
+4868 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 483.9 null ] >>
+endobj
+4869 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 472.941 null ] >>
+endobj
+4870 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 461.982 null ] >>
+endobj
+4871 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 451.023 null ] >>
+endobj
+4872 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 411.624 null ] >>
+endobj
+4873 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 400.665 null ] >>
+endobj
+4874 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 389.706 null ] >>
+endobj
+4875 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 350.307 null ] >>
+endobj
+4876 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 339.348 null ] >>
+endobj
+4877 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 328.389 null ] >>
+endobj
+4878 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 317.43 null ] >>
+endobj
+4879 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 306.471 null ] >>
+endobj
+4880 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 295.512 null ] >>
+endobj
+4881 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 203.762 null ] >>
+endobj
+4882 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 192.803 null ] >>
+endobj
+4883 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 181.844 null ] >>
+endobj
+4884 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 170.885 null ] >>
+endobj
+4885 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 159.926 null ] >>
+endobj
+4886 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 148.968 null ] >>
+endobj
+4887 0 obj
+<< /D [ 4839 0 R /XYZ 81.077 138.009 null ] >>
+endobj
+4838 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F70 305 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+4890 0 obj
+<< /Filter /FlateDecode /Length 1837 >>
+stream
+xڭZKoFWE>f_:F&@>F{h
+AhD*\; ;%(Bogy.G#>p+//7Prt{w!p3;F0nv={ R? #Ǽ1ʵ E (,v,ym>YfMԇ׳izߦ/0Ɨz)KZ8͙2, [LIe+ -9Cd.8Jl7-V3dn?i6AT:&Ԛ*NӴtWSaĝ54M薦-Z/3NȟZsä1AkIӺ>Z?B߽~QD-a3eG__J)?^uJ;7m>'ҍm5n*rLՋdW!@,ҏ\A,Y+-}n%(5^Sro*{;
+,V-U?̛UJqegi]Ob@bl)bH4.)v8>̡E~_Bh,{8>Q ZHF+@ю7hǫ4KPrdqM50hRa*bIWF[TFO/QbIzJ^kYKɴ+_^Cb-m\(4+EH nP$f[uZ?
+~ZvWA=\\Xsr%rO3&G6bvI0rGy¦C6ApfکOrOB(hv; ~?0t{J0ZgT1KA"+ErǸW1/F85Hw01_nOMdY #`t6vMyxic!ͨsկv3O7ܱ-uP]9r
+5Sj6)f;]щYO+t|Mrm_pqi\Ib(sQ}O!t}K G56w/dӢ}PЧr\/d-`Qd@i߅h`x_ܥ^ɸP'K;ďtBp` ͼ^Q|>1t}'(MCihi oB5Q&"ybv׳yxȷd h%Mve!
+[ZЕmr,<KJ`uePFM'4Cltx+sIׁMUhZW.vc@m9]O`FT}<KU%VUMQB
+:GK#K}[ha\`2acƞUGa-W!V:Aky#Gj 8roXc
+endstream
+endobj
+4889 0 obj
+<< /Type /Page /Contents 4890 0 R /Resources 4888 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 4780 0 R >>
+endobj
+4891 0 obj
+<< /D [ 4889 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+4892 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+4893 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+4894 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+4895 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+4896 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+4897 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+4898 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 673.19 null ] >>
+endobj
+4899 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 662.231 null ] >>
+endobj
+4900 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 651.273 null ] >>
+endobj
+4901 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 592.493 null ] >>
+endobj
+4902 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 581.534 null ] >>
+endobj
+4903 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 570.575 null ] >>
+endobj
+4904 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 559.616 null ] >>
+endobj
+4905 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 548.657 null ] >>
+endobj
+4906 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 537.698 null ] >>
+endobj
+4907 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 526.74 null ] >>
+endobj
+4908 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 515.781 null ] >>
+endobj
+4909 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 504.822 null ] >>
+endobj
+4910 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 493.863 null ] >>
+endobj
+4911 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 482.904 null ] >>
+endobj
+4912 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 471.945 null ] >>
+endobj
+4913 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 460.986 null ] >>
+endobj
+4914 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 450.027 null ] >>
+endobj
+4915 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 439.068 null ] >>
+endobj
+4916 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 428.109 null ] >>
+endobj
+4917 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 417.151 null ] >>
+endobj
+4918 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 406.192 null ] >>
+endobj
+4919 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 395.233 null ] >>
+endobj
+4920 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 384.274 null ] >>
+endobj
+4921 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 373.315 null ] >>
+endobj
+4922 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 362.356 null ] >>
+endobj
+4923 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 351.397 null ] >>
+endobj
+4924 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 326.49 null ] >>
+endobj
+4925 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 315.532 null ] >>
+endobj
+4926 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 304.573 null ] >>
+endobj
+4927 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 293.614 null ] >>
+endobj
+4928 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 282.655 null ] >>
+endobj
+4929 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 271.696 null ] >>
+endobj
+4930 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 260.737 null ] >>
+endobj
+4931 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 249.778 null ] >>
+endobj
+4932 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 238.819 null ] >>
+endobj
+4933 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 227.86 null ] >>
+endobj
+4934 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 216.901 null ] >>
+endobj
+4935 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 205.943 null ] >>
+endobj
+4936 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 194.984 null ] >>
+endobj
+4937 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 184.025 null ] >>
+endobj
+4938 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 173.066 null ] >>
+endobj
+4939 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 162.107 null ] >>
+endobj
+4940 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 151.148 null ] >>
+endobj
+4941 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 140.189 null ] >>
+endobj
+4942 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 129.23 null ] >>
+endobj
+4943 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 118.271 null ] >>
+endobj
+4944 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 107.312 null ] >>
+endobj
+4945 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 96.354 null ] >>
+endobj
+4946 0 obj
+<< /D [ 4889 0 R /XYZ 81.077 85.395 null ] >>
+endobj
+4888 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F30 644 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+4949 0 obj
+<< /Filter /FlateDecode /Length 1568 >>
+stream
+xZ]o6}ϯ[X~( X CtΖ\Ki#-"tֵ[t/L鐇Kgw^s^0xF# luAK8#H)I$m&jzЗL##%1P3)a|{VEڵ}E|L6 s(S3xlf,Gm&E{Cmi
+fA5""F__] *d܂j;spUz^s0Q"01z4'Q)Q7tlibX5hZ䒴W8&P1};mӭˢvR1#1"191n dИ CRŢqU]4v9ݖ:KU[[ΟM̵,6p[qwA +FQ2$lub7w>O4<[7Ӿ Jr$uuact/Ouc(, ծnq/Uٝ[ 1IR4#`R)R2hi}Kۧn0i܌sR&NS]ܴ>Y8uKp;K&4Fb41nY:=2$[F5sG0E? /1WȨ01Xh듩00 xb
+IB(p <6i/f7C
+trTHN8V 2̥LHT''T4ea>!XI߸e>5!vXIp+v/Y
+PY.aFpgyn^(B җ(@AOK5E4|aV%n^6? >0A+G(E(`чoRD^]I8 i7Fa%A){)%.%_u/k8-dT==H^pH s48 -
+N`W >KnywZ.# 5g JZ2HFact h%qVLEz8dHEN KcxeęWR7I75|ro:7]T}c{ҫlSw=
+endstream
+endobj
+4948 0 obj
+<< /Type /Page /Contents 4949 0 R /Resources 4947 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 4780 0 R >>
+endobj
+4950 0 obj
+<< /D [ 4948 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+4951 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+4952 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+4953 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+4954 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+4955 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+4956 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+4957 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+4958 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+4959 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+4960 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 665.33 null ] >>
+endobj
+4961 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 654.371 null ] >>
+endobj
+4962 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 643.412 null ] >>
+endobj
+4963 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 632.454 null ] >>
+endobj
+4964 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 621.495 null ] >>
+endobj
+4965 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 610.536 null ] >>
+endobj
+4966 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 599.577 null ] >>
+endobj
+4967 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 588.618 null ] >>
+endobj
+4968 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 577.659 null ] >>
+endobj
+4969 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 566.7 null ] >>
+endobj
+4970 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 555.741 null ] >>
+endobj
+4971 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 544.782 null ] >>
+endobj
+4972 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 533.823 null ] >>
+endobj
+4973 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 522.865 null ] >>
+endobj
+4974 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 511.906 null ] >>
+endobj
+4975 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 481.186 null ] >>
+endobj
+4976 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 470.228 null ] >>
+endobj
+4977 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 459.269 null ] >>
+endobj
+4978 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 448.31 null ] >>
+endobj
+4979 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 437.351 null ] >>
+endobj
+4980 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 426.392 null ] >>
+endobj
+4981 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 415.433 null ] >>
+endobj
+4982 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 399.603 null ] >>
+endobj
+4983 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 388.644 null ] >>
+endobj
+4984 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 377.685 null ] >>
+endobj
+4985 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 366.726 null ] >>
+endobj
+4986 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 355.767 null ] >>
+endobj
+4987 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 344.808 null ] >>
+endobj
+4988 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 333.849 null ] >>
+endobj
+4989 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 322.891 null ] >>
+endobj
+4990 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 311.932 null ] >>
+endobj
+4991 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 300.973 null ] >>
+endobj
+4992 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 290.014 null ] >>
+endobj
+4993 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 279.055 null ] >>
+endobj
+4994 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 268.096 null ] >>
+endobj
+4995 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 257.137 null ] >>
+endobj
+4996 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 246.178 null ] >>
+endobj
+4997 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 215.459 null ] >>
+endobj
+4998 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 204.5 null ] >>
+endobj
+4999 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 193.541 null ] >>
+endobj
+5000 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 182.582 null ] >>
+endobj
+5001 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 171.623 null ] >>
+endobj
+5002 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 160.665 null ] >>
+endobj
+5003 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 149.706 null ] >>
+endobj
+5004 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+5005 0 obj
+<< /D [ 4948 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+4947 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+5008 0 obj
+<< /Filter /FlateDecode /Length 2183 >>
+stream
+xڭZK0Cd`7%2>!-+K^Inw0)zQX"*"g/3<wW$Ç2qr@#<#P"ILI$~3] ,D, b+0'_u7e\Wϋ?
+*/'b_Vڵ#5`0:8*M륃^c{ٔMnNUEp֫ݦUwxMCDBލcGHȕn]b8T>kmgE
+~a=\>h
+FxTBbAܥGPYyӺb`̩
+A;x뜆Aj[.)^ҍn>ǪJ 5bj4>~ˊ;v]<o%} SlOF &[˯OGX-X$M! L+ ƾj}AyllFy~
+.a',pmҪӶm_ZSD\F-F*K0M3аq5  h{a?mU7A^<ߚ % ˯?"}+31n-mX(/NY`_BDnLQ4m I?G'͇<X^'- Tq]=E$1#V
+Q:!!$y`
+# 9cimsi3-fb I~>M#m?4Eq}l$nreϹ*y
+ٖyn#LM?ٺpo+{өDC(01%Sx#ݒ
+!4Fh۪{8S0za񻱌PL* p8mV3M,(b+B$'$WBq]($ G't!qg
+e&¦V
+B@D^I#=޶[eP Uv[PJ`ą[!Uԣ-Jha$[ۯ:3vP9HKGZSB(N_<O2{x>aK<C/:&I˭/iu&ZemUXj9zm΂2֡P܋u)d jci
+ d-r9mֳT~EN cDidXO #D,~'
+=+7X[bNEZ^oUvkKNors.z}4CۓeMMzoK#'U-,xE~N.EAh"%iq p#
+endstream
+endobj
+5007 0 obj
+<< /Type /Page /Contents 5008 0 R /Resources 5006 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 4780 0 R >>
+endobj
+5009 0 obj
+<< /D [ 5007 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+5010 0 obj
+<< /D [ 5007 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+5011 0 obj
+<< /D [ 5007 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+5012 0 obj
+<< /D [ 5007 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+5013 0 obj
+<< /D [ 5007 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+5014 0 obj
+<< /D [ 5007 0 R /XYZ 81.077 695.266 null ] >>
+endobj
+5015 0 obj
+<< /D [ 5007 0 R /XYZ 81.077 684.307 null ] >>
+endobj
+5016 0 obj
+<< /D [ 5007 0 R /XYZ 81.077 673.348 null ] >>
+endobj
+5017 0 obj
+<< /D [ 5007 0 R /XYZ 81.077 662.389 null ] >>
+endobj
+5018 0 obj
+<< /D [ 5007 0 R /XYZ 81.077 651.43 null ] >>
+endobj
+5019 0 obj
+<< /D [ 5007 0 R /XYZ 81.077 610.741 null ] >>
+endobj
+5020 0 obj
+<< /D [ 5007 0 R /XYZ 81.077 599.782 null ] >>
+endobj
+5021 0 obj
+<< /D [ 5007 0 R /XYZ 81.077 588.823 null ] >>
+endobj
+5022 0 obj
+<< /D [ 5007 0 R /XYZ 81.077 577.865 null ] >>
+endobj
+5023 0 obj
+<< /D [ 5007 0 R /XYZ 81.077 566.906 null ] >>
+endobj
+5024 0 obj
+<< /D [ 5007 0 R /XYZ 81.077 555.947 null ] >>
+endobj
+5025 0 obj
+<< /D [ 5007 0 R /XYZ 81.077 544.988 null ] >>
+endobj
+5026 0 obj
+<< /D [ 5007 0 R /XYZ 81.077 534.029 null ] >>
+endobj
+5027 0 obj
+<< /D [ 5007 0 R /XYZ 81.077 523.07 null ] >>
+endobj
+5028 0 obj
+<< /D [ 5007 0 R /XYZ 81.077 350.459 null ] >>
+endobj
+5029 0 obj
+<< /D [ 5007 0 R /XYZ 81.077 339.5 null ] >>
+endobj
+5030 0 obj
+<< /D [ 5007 0 R /XYZ 81.077 328.541 null ] >>
+endobj
+5031 0 obj
+<< /D [ 5007 0 R /XYZ 81.077 317.583 null ] >>
+endobj
+5032 0 obj
+<< /D [ 5007 0 R /XYZ 81.077 306.624 null ] >>
+endobj
+5033 0 obj
+<< /D [ 5007 0 R /XYZ 81.077 295.665 null ] >>
+endobj
+5034 0 obj
+<< /D [ 5007 0 R /XYZ 81.077 284.706 null ] >>
+endobj
+5035 0 obj
+<< /D [ 5007 0 R /XYZ 81.077 273.747 null ] >>
+endobj
+5036 0 obj
+<< /D [ 5007 0 R /XYZ 81.077 262.788 null ] >>
+endobj
+5037 0 obj
+<< /D [ 5007 0 R /XYZ 81.077 251.829 null ] >>
+endobj
+5038 0 obj
+<< /D [ 5007 0 R /XYZ 81.077 240.87 null ] >>
+endobj
+5039 0 obj
+<< /D [ 5007 0 R /XYZ 81.077 229.911 null ] >>
+endobj
+5040 0 obj
+<< /D [ 5007 0 R /XYZ 81.077 218.952 null ] >>
+endobj
+5041 0 obj
+<< /D [ 5007 0 R /XYZ 81.077 207.994 null ] >>
+endobj
+5042 0 obj
+<< /D [ 5007 0 R /XYZ 81.077 197.035 null ] >>
+endobj
+5043 0 obj
+<< /D [ 5007 0 R /XYZ 81.077 186.076 null ] >>
+endobj
+5044 0 obj
+<< /D [ 5007 0 R /XYZ 81.077 133.431 null ] >>
+endobj
+5045 0 obj
+<< /D [ 5007 0 R /XYZ 81.077 122.473 null ] >>
+endobj
+5046 0 obj
+<< /D [ 5007 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+5047 0 obj
+<< /D [ 5007 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+5048 0 obj
+<< /D [ 5007 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+5049 0 obj
+<< /D [ 5007 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+5006 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F78 654 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+5052 0 obj
+<< /Filter /FlateDecode /Length 2135 >>
+stream
+xڵZM0s/2d @L.rڢڕ%GmL~{(ZwػX2G"UeU.W|xϡX1 LjR+G((j^khmJ8 1 Ed͡ ccLj)sfKru[|<'yyZ$zz֜c-&)ҦM_XaF[b?[r%D ,D~1EЏqB
+Ӕٛ !+ :1eOt ½14Gal^R"b0u$ujanȐ@:G0NtJs&8N}m7HP`"BX~%x.LBhem;drT~ödt~t_U!pn/B2ze‚6o*.ڥLORq.w^ݞcJ"ģ1*:EW˝+w0qRVݗ<fyez0爆#~?;g5鯅wFD8(_ A!ΚXW$-޹9+u9vm*0)m%,!s`
+O
+endstream
+endobj
+5051 0 obj
+<< /Type /Page /Contents 5052 0 R /Resources 5050 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 4780 0 R >>
+endobj
+5053 0 obj
+<< /D [ 5051 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+5054 0 obj
+<< /D [ 5051 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+5055 0 obj
+<< /D [ 5051 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+5056 0 obj
+<< /D [ 5051 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+5057 0 obj
+<< /D [ 5051 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+5058 0 obj
+<< /D [ 5051 0 R /XYZ 81.077 695.275 null ] >>
+endobj
+5059 0 obj
+<< /D [ 5051 0 R /XYZ 81.077 684.316 null ] >>
+endobj
+5060 0 obj
+<< /D [ 5051 0 R /XYZ 81.077 673.357 null ] >>
+endobj
+5061 0 obj
+<< /D [ 5051 0 R /XYZ 81.077 662.398 null ] >>
+endobj
+5062 0 obj
+<< /D [ 5051 0 R /XYZ 81.077 651.439 null ] >>
+endobj
+5063 0 obj
+<< /D [ 5051 0 R /XYZ 81.077 640.48 null ] >>
+endobj
+5064 0 obj
+<< /D [ 5051 0 R /XYZ 81.077 580.667 null ] >>
+endobj
+5065 0 obj
+<< /D [ 5051 0 R /XYZ 81.077 569.708 null ] >>
+endobj
+5066 0 obj
+<< /D [ 5051 0 R /XYZ 81.077 558.749 null ] >>
+endobj
+5067 0 obj
+<< /D [ 5051 0 R /XYZ 81.077 547.79 null ] >>
+endobj
+5068 0 obj
+<< /D [ 5051 0 R /XYZ 81.077 536.831 null ] >>
+endobj
+5069 0 obj
+<< /D [ 5051 0 R /XYZ 81.077 525.873 null ] >>
+endobj
+5070 0 obj
+<< /D [ 5051 0 R /XYZ 81.077 485.192 null ] >>
+endobj
+5071 0 obj
+<< /D [ 5051 0 R /XYZ 81.077 474.233 null ] >>
+endobj
+5072 0 obj
+<< /D [ 5051 0 R /XYZ 81.077 463.274 null ] >>
+endobj
+5073 0 obj
+<< /D [ 5051 0 R /XYZ 81.077 452.315 null ] >>
+endobj
+5074 0 obj
+<< /D [ 5051 0 R /XYZ 81.077 441.356 null ] >>
+endobj
+5075 0 obj
+<< /D [ 5051 0 R /XYZ 81.077 400.676 null ] >>
+endobj
+5076 0 obj
+<< /D [ 5051 0 R /XYZ 81.077 389.717 null ] >>
+endobj
+5077 0 obj
+<< /D [ 5051 0 R /XYZ 81.077 378.758 null ] >>
+endobj
+5078 0 obj
+<< /D [ 5051 0 R /XYZ 81.077 367.799 null ] >>
+endobj
+5079 0 obj
+<< /D [ 5051 0 R /XYZ 81.077 356.84 null ] >>
+endobj
+5080 0 obj
+<< /D [ 5051 0 R /XYZ 81.077 345.881 null ] >>
+endobj
+5081 0 obj
+<< /D [ 5051 0 R /XYZ 81.077 334.923 null ] >>
+endobj
+5082 0 obj
+<< /D [ 5051 0 R /XYZ 81.077 323.964 null ] >>
+endobj
+5083 0 obj
+<< /D [ 5051 0 R /XYZ 81.077 313.005 null ] >>
+endobj
+5084 0 obj
+<< /D [ 5051 0 R /XYZ 81.077 155.349 null ] >>
+endobj
+5085 0 obj
+<< /D [ 5051 0 R /XYZ 81.077 144.39 null ] >>
+endobj
+5086 0 obj
+<< /D [ 5051 0 R /XYZ 81.077 133.431 null ] >>
+endobj
+5087 0 obj
+<< /D [ 5051 0 R /XYZ 81.077 122.473 null ] >>
+endobj
+5088 0 obj
+<< /D [ 5051 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+5089 0 obj
+<< /D [ 5051 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+5090 0 obj
+<< /D [ 5051 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+5091 0 obj
+<< /D [ 5051 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+5050 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F78 654 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+5094 0 obj
+<< /Filter /FlateDecode /Length 1500 >>
+stream
+xZnV+d4˛M.Ү)Z,2Htl7QIGM(<zw>^-ݕo-$q ^&g?D VXM43ьP͊M/R2<X8MSb_U?U{5h%2&Q҇ $<J 4+/.ʦmEݖP&E`B ԤiO[¬ "YL>¹
+gvDi{sxc|[̛W^e9|8/r]Ճ#7SՄkSSLuܔ+oa&nwJ7j\<j& q31^WG_Ƈͅ|sDHt):q`)T~H}ΙAfͅDD}~1>oSOX_s"E`.q)F vv 1kq):l3 GѬ?RV_ZreQxL0K L-fO$sM "2̞6i_rlvjʵ m1̆f--^-rִ
+?+: fhN vx W[c_VXkG@
+[e+NBQ\q(,^M-CV7dL’pK YI<gh
+TH Q 
+Ҙ )S}9Ҕ[uh[wnb`\Vgn<ENKc. Jbe(B Ʋ 9q<BMAϖ~fȚ%#k,\hBCIB*ՈsEh즵ڝ }n365L;l-1SPTtހdhۅ._co@2 f+i-G*63O4J;CЧSzD H;CNy CBi[VۣW)k"cCn8ʴ+?*"SDN` Hiڧ)O`?e¨$*vFbٜ᳝U:F+)>ri({ّZ~Bwa5C 6,K?#yoڈ#.$%lnF_IQ
+endstream
+endobj
+5093 0 obj
+<< /Type /Page /Contents 5094 0 R /Resources 5092 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 4780 0 R >>
+endobj
+5095 0 obj
+<< /D [ 5093 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+5096 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+5097 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+5098 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+5099 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+5100 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+5101 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+5102 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+5103 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+5104 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+5105 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+5106 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+5107 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+5108 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+5109 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 626.366 null ] >>
+endobj
+5110 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 615.407 null ] >>
+endobj
+5111 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 604.448 null ] >>
+endobj
+5112 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 593.489 null ] >>
+endobj
+5113 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 582.53 null ] >>
+endobj
+5114 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 566.59 null ] >>
+endobj
+5115 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 555.631 null ] >>
+endobj
+5116 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 544.672 null ] >>
+endobj
+5117 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 533.713 null ] >>
+endobj
+5118 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 522.754 null ] >>
+endobj
+5119 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 511.796 null ] >>
+endobj
+5120 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 500.837 null ] >>
+endobj
+5121 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 489.878 null ] >>
+endobj
+5122 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 478.919 null ] >>
+endobj
+5123 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 467.96 null ] >>
+endobj
+5124 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 457.001 null ] >>
+endobj
+5125 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 446.042 null ] >>
+endobj
+5126 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 435.083 null ] >>
+endobj
+5127 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 424.124 null ] >>
+endobj
+5128 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 413.165 null ] >>
+endobj
+5129 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 402.207 null ] >>
+endobj
+5130 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 391.248 null ] >>
+endobj
+5131 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 380.289 null ] >>
+endobj
+5132 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 369.33 null ] >>
+endobj
+5133 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 358.371 null ] >>
+endobj
+5134 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 347.412 null ] >>
+endobj
+5135 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 336.453 null ] >>
+endobj
+5136 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 325.494 null ] >>
+endobj
+5137 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 314.535 null ] >>
+endobj
+5138 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 303.576 null ] >>
+endobj
+5139 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 292.618 null ] >>
+endobj
+5140 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 281.659 null ] >>
+endobj
+5141 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 270.7 null ] >>
+endobj
+5142 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 254.759 null ] >>
+endobj
+5143 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 243.801 null ] >>
+endobj
+5144 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 232.842 null ] >>
+endobj
+5145 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 221.883 null ] >>
+endobj
+5146 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 210.924 null ] >>
+endobj
+5147 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 199.965 null ] >>
+endobj
+5148 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 189.006 null ] >>
+endobj
+5149 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 178.047 null ] >>
+endobj
+5150 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 167.088 null ] >>
+endobj
+5151 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 156.129 null ] >>
+endobj
+5152 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 145.17 null ] >>
+endobj
+5153 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 134.212 null ] >>
+endobj
+5154 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 123.253 null ] >>
+endobj
+5155 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 112.294 null ] >>
+endobj
+5156 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 101.335 null ] >>
+endobj
+5157 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 90.376 null ] >>
+endobj
+5158 0 obj
+<< /D [ 5093 0 R /XYZ 81.077 79.417 null ] >>
+endobj
+5092 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+5161 0 obj
+<< /Filter /FlateDecode /Length 2006 >>
+stream
+xڭZKo8W^,e``M6'c]Mje#7ߡ(Ѣ$fڋ ?rf834MH;xM 'E0:Ynt2
+H8 p@&)硜~ |"QLEHD4l.>KY</J-nM~m'Y>*fH}MJJI9DktW^#ǎ<tz_FK\Ӊׅ3Zv^>xs.OUM mob~9uI29B?UwbqͨDDr;!5EMBDc&1@9h3M"P a 1b33lNeUI7|Z.|ZuѿLʻf uJ5ٜiQn@OkUvMeN~o#
+h])0Fm872ޥFߺ7 {giU;i*uZ] 㓾`]ŹzeQu6YؔCצEwM:{zG|ǼDKq؂".C;llx/QT`U'u>.rבS}KtN0DwZnmbt^_kl.$Ϋ^QbHu*A"t
+._p1w
+&V:UU\l,͕6̅z^>`\4erz(}Z4y~hO:vZNm n:?<ܧe^Q wfGޱK* Sl 3ZDfd]5{XEY7zȎ3I;EM]Իh|fX6zO=TCDax>կ!^4_xS B$u_p;K(*,z )!b/o~'\ Y] 4"1ȴ ZeM!ԚC \6GD̏
+q}A<3 p 6![5M2`_do2zL7JAɴ(2/BD"= 9sg*5z+^$
+mAT%zր GKLI{}峆M[6ZT<
+6ژw]Nâ=2bmNO_0HD.;53MM>F|QglJKYxG4]7:1{?qаǾNEScK[w.])ݖvn@ޔ%c{!
+ʯڻ@xt
+zXv:Zޤ8Pn9U`=x'l6&؏l5äQˆtvi{q1M6ٕ#Ҝc纈<#LoB Wt
+i ~ElEi8x' o+)/vߋǡix%- ]Ezx)Bm!L7%#؈/7 bXυ(2r/jA
+endstream
+endobj
+5160 0 obj
+<< /Type /Page /Contents 5161 0 R /Resources 5159 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 4780 0 R >>
+endobj
+5162 0 obj
+<< /D [ 5160 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+5163 0 obj
+<< /D [ 5160 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+5164 0 obj
+<< /D [ 5160 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+5165 0 obj
+<< /D [ 5160 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+5166 0 obj
+<< /D [ 5160 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+5167 0 obj
+<< /D [ 5160 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+5168 0 obj
+<< /D [ 5160 0 R /XYZ 81.077 682.175 null ] >>
+endobj
+5169 0 obj
+<< /D [ 5160 0 R /XYZ 81.077 671.216 null ] >>
+endobj
+5170 0 obj
+<< /D [ 5160 0 R /XYZ 81.077 660.257 null ] >>
+endobj
+5171 0 obj
+<< /D [ 5160 0 R /XYZ 81.077 649.299 null ] >>
+endobj
+5172 0 obj
+<< /D [ 5160 0 R /XYZ 81.077 638.34 null ] >>
+endobj
+5173 0 obj
+<< /D [ 5160 0 R /XYZ 81.077 627.381 null ] >>
+endobj
+5174 0 obj
+<< /D [ 5160 0 R /XYZ 81.077 586.546 null ] >>
+endobj
+5175 0 obj
+<< /D [ 5160 0 R /XYZ 81.077 575.587 null ] >>
+endobj
+5176 0 obj
+<< /D [ 5160 0 R /XYZ 81.077 564.628 null ] >>
+endobj
+5177 0 obj
+<< /D [ 5160 0 R /XYZ 81.077 553.67 null ] >>
+endobj
+5178 0 obj
+<< /D [ 5160 0 R /XYZ 81.077 542.711 null ] >>
+endobj
+5179 0 obj
+<< /D [ 5160 0 R /XYZ 81.077 531.752 null ] >>
+endobj
+5180 0 obj
+<< /D [ 5160 0 R /XYZ 81.077 520.793 null ] >>
+endobj
+5181 0 obj
+<< /D [ 5160 0 R /XYZ 81.077 509.834 null ] >>
+endobj
+5182 0 obj
+<< /D [ 5160 0 R /XYZ 81.077 498.875 null ] >>
+endobj
+5183 0 obj
+<< /D [ 5160 0 R /XYZ 81.077 487.916 null ] >>
+endobj
+5184 0 obj
+<< /D [ 5160 0 R /XYZ 81.077 476.957 null ] >>
+endobj
+5185 0 obj
+<< /D [ 5160 0 R /XYZ 81.077 465.998 null ] >>
+endobj
+5186 0 obj
+<< /D [ 5160 0 R /XYZ 81.077 455.039 null ] >>
+endobj
+5187 0 obj
+<< /D [ 5160 0 R /XYZ 81.077 444.081 null ] >>
+endobj
+5188 0 obj
+<< /D [ 5160 0 R /XYZ 81.077 433.122 null ] >>
+endobj
+5189 0 obj
+<< /D [ 5160 0 R /XYZ 81.077 252.946 null ] >>
+endobj
+5190 0 obj
+<< /D [ 5160 0 R /XYZ 81.077 241.987 null ] >>
+endobj
+5191 0 obj
+<< /D [ 5160 0 R /XYZ 81.077 213.108 null ] >>
+endobj
+5192 0 obj
+<< /D [ 5160 0 R /XYZ 81.077 184.229 null ] >>
+endobj
+5193 0 obj
+<< /D [ 5160 0 R /XYZ 81.077 173.27 null ] >>
+endobj
+5194 0 obj
+<< /D [ 5160 0 R /XYZ 81.077 162.311 null ] >>
+endobj
+5195 0 obj
+<< /D [ 5160 0 R /XYZ 81.077 151.352 null ] >>
+endobj
+5196 0 obj
+<< /D [ 5160 0 R /XYZ 81.077 122.473 null ] >>
+endobj
+5197 0 obj
+<< /D [ 5160 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+5198 0 obj
+<< /D [ 5160 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+5199 0 obj
+<< /D [ 5160 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+5200 0 obj
+<< /D [ 5160 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+5159 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F78 654 0 R /F30 644 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+5203 0 obj
+<< /Filter /FlateDecode /Length 1888 >>
+stream
+xZMo6Wh  l(,CNA{b˱
+[&wtID'pP ?( ?ͅN&؄ >Z1D'lhlr1ٟWgXNbIf*!&1re1;W\5w<.`z=YUYa);(a{_8_$LD[X¤s'C<!,~nav1.byyQ\] bpz8g6 bYn*[΋G)Mn2v?O缽~/X&\ky^Ð7\u={sĂMl l23і}i6;BL7錛O;|ƬU;hvvע|-M{{}1Fԛ (.z7pnCfL$S6\2bQkM$D۸?@C?ޖy3,Sq2sItBkTƻ%qnhqdq{~6[J"f+!7;]F\[l.nbB%A|'
+j
+#4~n7(rM `%c~Lо:^l)dH0
++1
+ca>1O|d]?_УZlxK䖧 .ujY"Dek6kOD,&?NHvZ|֝m BY_[kk5׭QODJZrvakCμ.nK/n K$"|O;5ZMHH j`JH),:
+806JAxgc67͊  %EU$gD $.B]u^hӁ$8%Bs9l3/l.Ye/U dܔՁ@ۗwlDIBJܹIoEYzCZ q':4"#40uG<r)c'Oݷ])/Jq?Ds_%]F#ۧl]uɫdVg;2%N/QZ٪u7hD QF.Ka*GDGExʆ1#t/W‚Jb4
+M1܊fsX8Bw%Ya'j8Bq"epHbQgx>E@SQz
+rG "4~̓3@>YjtP1<
+__5F$Ŕq/."A: X_9 kdo5
+nKCK0=/:A
+endstream
+endobj
+5202 0 obj
+<< /Type /Page /Contents 5203 0 R /Resources 5201 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 4780 0 R >>
+endobj
+5204 0 obj
+<< /D [ 5202 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+5205 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+5206 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+5207 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+5208 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+5209 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+5210 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+5211 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 685.146 null ] >>
+endobj
+5212 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 674.187 null ] >>
+endobj
+5213 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 663.228 null ] >>
+endobj
+5214 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 652.269 null ] >>
+endobj
+5215 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 641.31 null ] >>
+endobj
+5216 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 630.351 null ] >>
+endobj
+5217 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 619.392 null ] >>
+endobj
+5218 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 590.5 null ] >>
+endobj
+5219 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 579.542 null ] >>
+endobj
+5220 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 568.583 null ] >>
+endobj
+5221 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 557.624 null ] >>
+endobj
+5222 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 546.665 null ] >>
+endobj
+5223 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 535.706 null ] >>
+endobj
+5224 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 524.747 null ] >>
+endobj
+5225 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 513.788 null ] >>
+endobj
+5226 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 472.941 null ] >>
+endobj
+5227 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 461.982 null ] >>
+endobj
+5228 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 451.023 null ] >>
+endobj
+5229 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 440.065 null ] >>
+endobj
+5230 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 429.106 null ] >>
+endobj
+5231 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 418.147 null ] >>
+endobj
+5232 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 407.188 null ] >>
+endobj
+5233 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 396.229 null ] >>
+endobj
+5234 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 385.27 null ] >>
+endobj
+5235 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 374.311 null ] >>
+endobj
+5236 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 363.352 null ] >>
+endobj
+5237 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 352.393 null ] >>
+endobj
+5238 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 323.502 null ] >>
+endobj
+5239 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 312.543 null ] >>
+endobj
+5240 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 301.584 null ] >>
+endobj
+5241 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 290.625 null ] >>
+endobj
+5242 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 279.666 null ] >>
+endobj
+5243 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 268.707 null ] >>
+endobj
+5244 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 257.748 null ] >>
+endobj
+5245 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 246.789 null ] >>
+endobj
+5246 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 235.83 null ] >>
+endobj
+5247 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 224.872 null ] >>
+endobj
+5248 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 184.025 null ] >>
+endobj
+5249 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 173.066 null ] >>
+endobj
+5250 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 162.107 null ] >>
+endobj
+5251 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 151.148 null ] >>
+endobj
+5252 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 140.189 null ] >>
+endobj
+5253 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 129.23 null ] >>
+endobj
+5254 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 118.271 null ] >>
+endobj
+5255 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 107.312 null ] >>
+endobj
+5256 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 96.354 null ] >>
+endobj
+5257 0 obj
+<< /D [ 5202 0 R /XYZ 81.077 85.395 null ] >>
+endobj
+5201 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F70 305 0 R /F20 186 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+5260 0 obj
+<< /Filter /FlateDecode /Length 1989 >>
+stream
+xڭY[o8~ϯ00/6аJn3<lbӎZYJrL{x,*Nkb? s ~}7XݼGJFg IxFf2A IgiBNl{EY>`>H% c0IR o:"##iO;ŗ0(Y" e<DӦ2#?7>ku.
+;\fwws-`Ϋ/EUt+IbI0FM?eeQe4/8A4I^eN@LtIb,I)R uTͻG "ՠuվ0eqKoMyWԕ[]Ptbwz,ni:jKE8"͏e?/!oebO47Z+15HֺV4%d|Č7mN]+*W
+b;&܁z[FO)+^][GY̆y`+έRDW XI9V~0ovǽ ]
+(ͧce]LJ}5PeQڏʐJ$18h
+mm^Www\ZP/ϊq Zt RDJUh$ 4dk"fօ
+/E}lݿ2R"TR0 ̿,t#k1vz]43ϗ+keaDa7jh_ L.oǏbwGޝׂ*$]8PmtG7ʗw8{KصFO|ᮩ7a[78:kV}6$#qo6ϊ=]QEG XQyK7>*kaKt<;\qHFnX7ca~iM61Za5靽J%fHH%g6tz^iduY7YW[o>}Z!tVx}|&\A@OL[>7]m<!הi [0>RF`ܒ(y%c6{?.e,XGg-Vh!)
+ײA`uY6~ $HaeElxCi
+0G4ڿu뢘m0~-/cOѬ)
+endstream
+endobj
+5259 0 obj
+<< /Type /Page /Contents 5260 0 R /Resources 5258 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 5299 0 R >>
+endobj
+5261 0 obj
+<< /D [ 5259 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+5262 0 obj
+<< /D [ 5259 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+5263 0 obj
+<< /D [ 5259 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+5264 0 obj
+<< /D [ 5259 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+5265 0 obj
+<< /D [ 5259 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+5266 0 obj
+<< /D [ 5259 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+5267 0 obj
+<< /D [ 5259 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+5268 0 obj
+<< /D [ 5259 0 R /XYZ 81.077 619.153 null ] >>
+endobj
+5269 0 obj
+<< /D [ 5259 0 R /XYZ 81.077 608.194 null ] >>
+endobj
+5270 0 obj
+<< /D [ 5259 0 R /XYZ 81.077 597.235 null ] >>
+endobj
+5271 0 obj
+<< /D [ 5259 0 R /XYZ 81.077 586.276 null ] >>
+endobj
+5272 0 obj
+<< /D [ 5259 0 R /XYZ 81.077 575.318 null ] >>
+endobj
+5273 0 obj
+<< /D [ 5259 0 R /XYZ 81.077 564.359 null ] >>
+endobj
+5274 0 obj
+<< /D [ 5259 0 R /XYZ 81.077 523.829 null ] >>
+endobj
+5275 0 obj
+<< /D [ 5259 0 R /XYZ 81.077 512.87 null ] >>
+endobj
+5276 0 obj
+<< /D [ 5259 0 R /XYZ 81.077 501.911 null ] >>
+endobj
+5277 0 obj
+<< /D [ 5259 0 R /XYZ 81.077 490.952 null ] >>
+endobj
+5278 0 obj
+<< /D [ 5259 0 R /XYZ 81.077 479.993 null ] >>
+endobj
+5279 0 obj
+<< /D [ 5259 0 R /XYZ 81.077 469.034 null ] >>
+endobj
+5280 0 obj
+<< /D [ 5259 0 R /XYZ 81.077 458.076 null ] >>
+endobj
+5281 0 obj
+<< /D [ 5259 0 R /XYZ 81.077 447.117 null ] >>
+endobj
+5282 0 obj
+<< /D [ 5259 0 R /XYZ 81.077 285.384 null ] >>
+endobj
+5283 0 obj
+<< /D [ 5259 0 R /XYZ 81.077 274.425 null ] >>
+endobj
+5284 0 obj
+<< /D [ 5259 0 R /XYZ 81.077 263.466 null ] >>
+endobj
+5285 0 obj
+<< /D [ 5259 0 R /XYZ 81.077 252.507 null ] >>
+endobj
+5286 0 obj
+<< /D [ 5259 0 R /XYZ 81.077 241.549 null ] >>
+endobj
+5287 0 obj
+<< /D [ 5259 0 R /XYZ 81.077 230.59 null ] >>
+endobj
+5288 0 obj
+<< /D [ 5259 0 R /XYZ 81.077 219.631 null ] >>
+endobj
+5289 0 obj
+<< /D [ 5259 0 R /XYZ 81.077 208.672 null ] >>
+endobj
+5290 0 obj
+<< /D [ 5259 0 R /XYZ 81.077 197.713 null ] >>
+endobj
+5291 0 obj
+<< /D [ 5259 0 R /XYZ 81.077 186.754 null ] >>
+endobj
+5292 0 obj
+<< /D [ 5259 0 R /XYZ 81.077 175.795 null ] >>
+endobj
+5293 0 obj
+<< /D [ 5259 0 R /XYZ 81.077 164.836 null ] >>
+endobj
+5294 0 obj
+<< /D [ 5259 0 R /XYZ 81.077 153.877 null ] >>
+endobj
+5295 0 obj
+<< /D [ 5259 0 R /XYZ 81.077 142.918 null ] >>
+endobj
+5296 0 obj
+<< /D [ 5259 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+5297 0 obj
+<< /D [ 5259 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+5298 0 obj
+<< /D [ 5259 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+5258 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F78 654 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+5302 0 obj
+<< /Filter /FlateDecode /Length 2047 >>
+stream
+xڭYn6WNX>%*@AN.BP,Q+K$Ob {Ѓn7Dx[/{~',D4
+ 8A,^A8"~dKa-;vغSŗy*+mqYTR5d;xwSW~lc1 ׬Zl)>ǖQx0K?~Lڴ:s,Ò":ۏms'ul10z/ I'#cDGC
+~FYoMg]_P3i<z0]K*bWKVmjp']=udឌGf(p^lOE;rtN.3:jG@%~O/6rp^?, .|0'dNSp2 x
+)c.ώe(8B< <@ȅQu#Jg`^#98|xWž}<ΐX `uE}[A@PFXࡃ%BcS St$I/t搵H=t#<z!ퟂhhT;P&\&AHNbTKBIߨLFy7@9kI_bHO>qE5i#j"L'Mq=}Mkw=:0ы. ,\La~Ϛݱ[h 0 Z[9uI`pfL/pGU
+)&M\uҨ,Y>c91焒}Ȫ-fC]`?M]}d}J3v[@wbkF>o!s0wGFJltiuQȕrǃm0{`pskĽVxF!Cp1N&SHծ(F CHPݹJu 5X=tQ֤3\lFdBsg])y4H]4xh=*t[M]Mڕtų߮Tw[x};fey"`Z1$a"yȩ*'{2:"9A7bqk⠐l
+-Q*Cxeh[W17 CMz3ɂ'ۺ,k_ePލxilby_:3cOVsAdťWrs*SD\C/t_e!0<_g
+kM[Z&ڧI`~$R>^<#BH M(ʉ5UݿqK3X
+endstream
+endobj
+5301 0 obj
+<< /Type /Page /Contents 5302 0 R /Resources 5300 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 5299 0 R >>
+endobj
+5303 0 obj
+<< /D [ 5301 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+5304 0 obj
+<< /D [ 5301 0 R /XYZ 81.077 754.884 null ] >>
+endobj
+5305 0 obj
+<< /D [ 5301 0 R /XYZ 81.077 702.082 null ] >>
+endobj
+5306 0 obj
+<< /D [ 5301 0 R /XYZ 81.077 691.123 null ] >>
+endobj
+5307 0 obj
+<< /D [ 5301 0 R /XYZ 81.077 680.164 null ] >>
+endobj
+5308 0 obj
+<< /D [ 5301 0 R /XYZ 81.077 669.205 null ] >>
+endobj
+5309 0 obj
+<< /D [ 5301 0 R /XYZ 81.077 658.246 null ] >>
+endobj
+5310 0 obj
+<< /D [ 5301 0 R /XYZ 81.077 647.288 null ] >>
+endobj
+5311 0 obj
+<< /D [ 5301 0 R /XYZ 81.077 606.441 null ] >>
+endobj
+5312 0 obj
+<< /D [ 5301 0 R /XYZ 81.077 595.482 null ] >>
+endobj
+5313 0 obj
+<< /D [ 5301 0 R /XYZ 81.077 584.523 null ] >>
+endobj
+5314 0 obj
+<< /D [ 5301 0 R /XYZ 81.077 573.564 null ] >>
+endobj
+5315 0 obj
+<< /D [ 5301 0 R /XYZ 81.077 562.605 null ] >>
+endobj
+5316 0 obj
+<< /D [ 5301 0 R /XYZ 81.077 551.646 null ] >>
+endobj
+5317 0 obj
+<< /D [ 5301 0 R /XYZ 81.077 540.687 null ] >>
+endobj
+5318 0 obj
+<< /D [ 5301 0 R /XYZ 81.077 529.728 null ] >>
+endobj
+5319 0 obj
+<< /D [ 5301 0 R /XYZ 81.077 518.769 null ] >>
+endobj
+5320 0 obj
+<< /D [ 5301 0 R /XYZ 81.077 507.811 null ] >>
+endobj
+5321 0 obj
+<< /D [ 5301 0 R /XYZ 81.077 496.852 null ] >>
+endobj
+5322 0 obj
+<< /D [ 5301 0 R /XYZ 81.077 432.094 null ] >>
+endobj
+5323 0 obj
+<< /D [ 5301 0 R /XYZ 81.077 421.136 null ] >>
+endobj
+5324 0 obj
+<< /D [ 5301 0 R /XYZ 81.077 410.177 null ] >>
+endobj
+5325 0 obj
+<< /D [ 5301 0 R /XYZ 81.077 399.218 null ] >>
+endobj
+5326 0 obj
+<< /D [ 5301 0 R /XYZ 81.077 388.259 null ] >>
+endobj
+5327 0 obj
+<< /D [ 5301 0 R /XYZ 81.077 377.3 null ] >>
+endobj
+5328 0 obj
+<< /D [ 5301 0 R /XYZ 81.077 336.453 null ] >>
+endobj
+5329 0 obj
+<< /D [ 5301 0 R /XYZ 81.077 325.494 null ] >>
+endobj
+5330 0 obj
+<< /D [ 5301 0 R /XYZ 81.077 314.535 null ] >>
+endobj
+5331 0 obj
+<< /D [ 5301 0 R /XYZ 81.077 303.576 null ] >>
+endobj
+5332 0 obj
+<< /D [ 5301 0 R /XYZ 81.077 292.618 null ] >>
+endobj
+5333 0 obj
+<< /D [ 5301 0 R /XYZ 81.077 281.659 null ] >>
+endobj
+5334 0 obj
+<< /D [ 5301 0 R /XYZ 81.077 270.7 null ] >>
+endobj
+5335 0 obj
+<< /D [ 5301 0 R /XYZ 81.077 259.741 null ] >>
+endobj
+5300 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R /F27 642 0 R /F72 4502 0 R /F78 654 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+5338 0 obj
+<< /Filter /FlateDecode /Length 1480 >>
+stream
+xڭYMo6Wh
+,
+tۃOu AkˎPYr%l{GMxĊyr tz%o~|HgKtFVhFffXja'cX,q`Fq,eB.m]٢͖ٶ*O?~LE{.YCefڛ hYQ(e#-aRmKzmN ctoUU$j:T$੼<-jI)Y陲˘
+1%f_m m;чw{eoˆjµTI.R)"$j"wm+V8!)&kSUU/dUW$-wU==HTYvKmA1!\{RkNz+ !Z1"MiQ}r(8&A릢
+5,Qiv~KތDz!H ˭⸀ qD6Ȋ1NUqJ<q"Yo[ Bw^6Y增W5žin$fKc&.2S|TevhA,.LnZ8뮺P󕅔dctd ='[fEU'}hk 6O'Ar䶟RqDr;C%~]g怆WyMq~ѧ~޽ݏ3uRb)DmKg ^5Gَ8jNkZ_N׳IR40`-QK+Bݣa\#L׋-֟Ѭ$yG+DP ^kU]aXc \y1!ͫiD#'yָDb_(Cep[-#rOPx>)-"/3KXKBj8B RGvύTxхF`;&²q߾8/_@MgUxf"!/='Ufsw{:hP;l'_>|bnU<39e*.
+MZ.xNT p~_!@q]u_,{&܎3owW
+4OjW F&[)KۿKP7"_id儛\g95WcaJ($ s>]0dl}7M&B2Ld"Č`#/̕L"܅DLQ2o)\HHi⌸PAT&WvF`BE'Wg;l59dh2PY?Bw~
+endstream
+endobj
+5337 0 obj
+<< /Type /Page /Contents 5338 0 R /Resources 5336 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 5299 0 R >>
+endobj
+5339 0 obj
+<< /D [ 5337 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+5340 0 obj
+<< /D [ 5337 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+5341 0 obj
+<< /D [ 5337 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+5342 0 obj
+<< /D [ 5337 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+5343 0 obj
+<< /D [ 5337 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+5344 0 obj
+<< /D [ 5337 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+5345 0 obj
+<< /D [ 5337 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+5346 0 obj
+<< /D [ 5337 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+5347 0 obj
+<< /D [ 5337 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+5348 0 obj
+<< /D [ 5337 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+5349 0 obj
+<< /D [ 5337 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+5350 0 obj
+<< /D [ 5337 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+5351 0 obj
+<< /D [ 5337 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+5352 0 obj
+<< /D [ 5337 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+5353 0 obj
+<< /D [ 5337 0 R /XYZ 81.077 626.366 null ] >>
+endobj
+5354 0 obj
+<< /D [ 5337 0 R /XYZ 81.077 615.407 null ] >>
+endobj
+5355 0 obj
+<< /D [ 5337 0 R /XYZ 81.077 604.448 null ] >>
+endobj
+5356 0 obj
+<< /D [ 5337 0 R /XYZ 81.077 593.489 null ] >>
+endobj
+5357 0 obj
+<< /D [ 5337 0 R /XYZ 81.077 582.53 null ] >>
+endobj
+5358 0 obj
+<< /D [ 5337 0 R /XYZ 81.077 571.571 null ] >>
+endobj
+5359 0 obj
+<< /D [ 5337 0 R /XYZ 81.077 560.613 null ] >>
+endobj
+5360 0 obj
+<< /D [ 5337 0 R /XYZ 81.077 549.654 null ] >>
+endobj
+5361 0 obj
+<< /D [ 5337 0 R /XYZ 81.077 538.695 null ] >>
+endobj
+5362 0 obj
+<< /D [ 5337 0 R /XYZ 81.077 527.736 null ] >>
+endobj
+5363 0 obj
+<< /D [ 5337 0 R /XYZ 81.077 516.777 null ] >>
+endobj
+5364 0 obj
+<< /D [ 5337 0 R /XYZ 81.077 505.818 null ] >>
+endobj
+5365 0 obj
+<< /D [ 5337 0 R /XYZ 81.077 494.859 null ] >>
+endobj
+5366 0 obj
+<< /D [ 5337 0 R /XYZ 81.077 483.9 null ] >>
+endobj
+5367 0 obj
+<< /D [ 5337 0 R /XYZ 81.077 472.941 null ] >>
+endobj
+5368 0 obj
+<< /D [ 5337 0 R /XYZ 81.077 461.982 null ] >>
+endobj
+5369 0 obj
+<< /D [ 5337 0 R /XYZ 81.077 451.023 null ] >>
+endobj
+5370 0 obj
+<< /D [ 5337 0 R /XYZ 81.077 440.065 null ] >>
+endobj
+5371 0 obj
+<< /D [ 5337 0 R /XYZ 81.077 429.106 null ] >>
+endobj
+5372 0 obj
+<< /D [ 5337 0 R /XYZ 81.077 418.147 null ] >>
+endobj
+5373 0 obj
+<< /D [ 5337 0 R /XYZ 81.077 407.188 null ] >>
+endobj
+5374 0 obj
+<< /D [ 5337 0 R /XYZ 81.077 396.229 null ] >>
+endobj
+73 0 obj
+<< /D [ 5337 0 R /XYZ 79.37 371.456 null ] >>
+endobj
+5375 0 obj
+<< /D [ 5337 0 R /XYZ 81.077 144.39 null ] >>
+endobj
+5376 0 obj
+<< /D [ 5337 0 R /XYZ 81.077 133.431 null ] >>
+endobj
+5377 0 obj
+<< /D [ 5337 0 R /XYZ 81.077 122.473 null ] >>
+endobj
+5378 0 obj
+<< /D [ 5337 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+5379 0 obj
+<< /D [ 5337 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+5380 0 obj
+<< /D [ 5337 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+5381 0 obj
+<< /D [ 5337 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+5336 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F67 187 0 R /F19 184 0 R /F20 186 0 R /F78 654 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+5384 0 obj
+<< /Filter /FlateDecode /Length 2258 >>
+stream
+xڵZ[o~ϯ0
+S+,cϡJ-UWSv4%Y6
+Px
+})vU,Oh`svvq×
+;zu?>aݲsY_0k$]yGW
+ $Ð0_aW5nA_'/Rsg؆WL$j]MnUl'@N _${ .&et#-4!Y&A#"kݍ
+vfcAJ8%M i]i.33^HV0|J&*%lωBla
+,?;o~EYQxD,&ef-!wy >70HHe9Eg:5KP gF *nPyϐx{
+W|=afǖ-vUfeb\4}HvՐ|%% 1%!_x&3)}2'Lt:l'R b"Mv]ʕ=%_>l*W X6
+3_b+a^=8_|r?_/YixJ ( |H6a5TAA~y{1H>θ;H7n,lQi[D4ben6U܇>;|YN '=ں:UhԶyj$Fbcu穸 u6T_| QEtҁ+L?z<>E4UsȞ^2п^‘2l2.FBpڧO WC Xgpȶ*ad2N .Z{{
+u6ͩkWp@7ͨ^ٕ:F4*0ޭ~Z'WO"Go BTdO &섉`DRg>~['pL>Sp 4H&F”fSp6I;EPu
+v3΀HDۨP%'/ 3
+endstream
+endobj
+5383 0 obj
+<< /Type /Page /Contents 5384 0 R /Resources 5382 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 5299 0 R >>
+endobj
+5385 0 obj
+<< /D [ 5383 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+5386 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+5387 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+5388 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+5389 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 698.097 null ] >>
+endobj
+5390 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 687.138 null ] >>
+endobj
+5391 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 676.179 null ] >>
+endobj
+5392 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 665.22 null ] >>
+endobj
+5393 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 654.261 null ] >>
+endobj
+5394 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 643.302 null ] >>
+endobj
+5395 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 587.512 null ] >>
+endobj
+5396 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 576.553 null ] >>
+endobj
+5397 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 565.594 null ] >>
+endobj
+5398 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 554.635 null ] >>
+endobj
+5399 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 543.676 null ] >>
+endobj
+5400 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 532.717 null ] >>
+endobj
+5401 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 521.758 null ] >>
+endobj
+5402 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 510.799 null ] >>
+endobj
+5403 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 499.84 null ] >>
+endobj
+5404 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 447.038 null ] >>
+endobj
+5405 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 436.08 null ] >>
+endobj
+5406 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 425.121 null ] >>
+endobj
+5407 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 414.162 null ] >>
+endobj
+5408 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 403.203 null ] >>
+endobj
+5409 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 392.244 null ] >>
+endobj
+5410 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 381.285 null ] >>
+endobj
+5411 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 370.326 null ] >>
+endobj
+5412 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 359.367 null ] >>
+endobj
+5413 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 348.408 null ] >>
+endobj
+5414 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 337.449 null ] >>
+endobj
+5415 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 326.49 null ] >>
+endobj
+5416 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 315.532 null ] >>
+endobj
+5417 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 304.573 null ] >>
+endobj
+5418 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 293.614 null ] >>
+endobj
+5419 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 282.655 null ] >>
+endobj
+5420 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 271.696 null ] >>
+endobj
+5421 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 240.812 null ] >>
+endobj
+5422 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 229.853 null ] >>
+endobj
+5423 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 145.17 null ] >>
+endobj
+5424 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 134.212 null ] >>
+endobj
+5425 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 123.253 null ] >>
+endobj
+5426 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 112.294 null ] >>
+endobj
+5427 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 101.335 null ] >>
+endobj
+5428 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 90.376 null ] >>
+endobj
+5429 0 obj
+<< /D [ 5383 0 R /XYZ 81.077 79.417 null ] >>
+endobj
+5382 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F77 542 0 R /F30 644 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+5432 0 obj
+<< /Filter /FlateDecode /Length 2117 >>
+stream
+xZ[o8~0iX%f/ ӧ
+IUYVJ?9} qޭvU]3іf]#!ټ=GOP<fO-FI"Zx52ӏu{+rdɺiY4j4
+!&˴?ƪGdDQ#G8%b9p%km}{iii٧Y1@LS>
+! 2De|"eU>_wJ3[1nz7s)W%BX!ۺ:|~a~Q`S&!:i^HGsrJ9o N>Aiw20.LL'PAzմ; Sʺ蝣_$t
+]T/V '¾fU%$zg!JjGh+z4 ڌx EMqfR"L&/]KHߣ
+-%'QK<^*Q[>V$*>K)DEZy^{Je]o]}aut_ H|:G9BSNag|)PQ(Bi'vD=D!zn7AI^XHHe3>HKSO2Y>^,2l)'*gyF
+
+qg(4 "!<iB&3FshV&!q+Bݍҫ3/%c04- DmܯtO$$YZDǾXԧPJMJ,w<wqQ|UPC57UL7BVsc:^8Xoa*>
+^Kz}LT]>Dc{Je%Ku =5QqUE.1Aj0}L8RYm"pwǒÇ(BDlM}{ya$]~RD%R,-
+pr' `+S\QB2BsL"EC T-)tfS\ea/Hԙu0\h<m&A)eİ<dnQM؋"y3^:$8ŅhtϡJITڄm@drRzRT>*5>) OTXk25AH&Ve>j%De^k{nմP;.m~'D,"%9FC4:q}^ӸdO:Ea0:,2?B㝗*¦kLp1 1# n!F1vs6RA8aY#^Ԧh\he2 {C j]^E4kmET\G)|Mp#|K>&'L{fK5tҾOp&B}(hv}<OpTCs_TBtLN\jGZ LRbQ 67
+endstream
+endobj
+5431 0 obj
+<< /Type /Page /Contents 5432 0 R /Resources 5430 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 5299 0 R >>
+endobj
+5433 0 obj
+<< /D [ 5431 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+5434 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+5435 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+5436 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+5437 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+5438 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+5439 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+5440 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 649.28 null ] >>
+endobj
+5441 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 638.321 null ] >>
+endobj
+5442 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 627.362 null ] >>
+endobj
+5443 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 616.403 null ] >>
+endobj
+5444 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 605.444 null ] >>
+endobj
+5445 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 576.553 null ] >>
+endobj
+5446 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 565.594 null ] >>
+endobj
+5447 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 554.635 null ] >>
+endobj
+5448 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 543.676 null ] >>
+endobj
+5449 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 532.717 null ] >>
+endobj
+5450 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 521.758 null ] >>
+endobj
+5451 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 510.799 null ] >>
+endobj
+5452 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 499.84 null ] >>
+endobj
+5453 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 488.882 null ] >>
+endobj
+5454 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 477.923 null ] >>
+endobj
+5455 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 466.964 null ] >>
+endobj
+5456 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 456.005 null ] >>
+endobj
+5457 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 445.046 null ] >>
+endobj
+5458 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 434.087 null ] >>
+endobj
+5459 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 393.24 null ] >>
+endobj
+5460 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 382.281 null ] >>
+endobj
+5461 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 371.322 null ] >>
+endobj
+5462 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 360.363 null ] >>
+endobj
+5463 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 349.405 null ] >>
+endobj
+5464 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 338.446 null ] >>
+endobj
+5465 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 322.505 null ] >>
+endobj
+5466 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 311.547 null ] >>
+endobj
+5467 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 300.588 null ] >>
+endobj
+5468 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 289.629 null ] >>
+endobj
+5469 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 278.67 null ] >>
+endobj
+5470 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 267.711 null ] >>
+endobj
+5471 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 256.752 null ] >>
+endobj
+5472 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 245.793 null ] >>
+endobj
+5473 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 234.834 null ] >>
+endobj
+5474 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 223.875 null ] >>
+endobj
+5475 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 212.916 null ] >>
+endobj
+5476 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 201.957 null ] >>
+endobj
+5477 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 190.999 null ] >>
+endobj
+5478 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 180.04 null ] >>
+endobj
+5479 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 169.081 null ] >>
+endobj
+5480 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 158.122 null ] >>
+endobj
+5481 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 147.163 null ] >>
+endobj
+5482 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 136.204 null ] >>
+endobj
+5483 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 125.245 null ] >>
+endobj
+5484 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 114.286 null ] >>
+endobj
+5485 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 103.327 null ] >>
+endobj
+5486 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 92.368 null ] >>
+endobj
+5487 0 obj
+<< /D [ 5431 0 R /XYZ 81.077 81.41 null ] >>
+endobj
+5430 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F70 305 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+5490 0 obj
+<< /Filter /FlateDecode /Length 2015 >>
+stream
+xڭZ]o}ϯmiŢ@gѢ
+_i X x_T!\77 ѣϊϫSyó~oIsqK_tw,sgq~6 _B^jN=yE>@_v;77W1=yqyBw
+Mn͌ d5.Xwٶ UE%o˼WڴKv>7y jdUYlx7qŚ'Q9j2T.>=in{)>'<Ep g x
+QM!a%Pz,~h3-ζckk{w^M-^vڌ8cJ[ۖ_L$7XL;&ebZmWi::4Q
+$l3Ө58UX/١mb vg/08f'-vn³x]6~«<dOŶWWl-jz Dʦ 8#V"
+~Y)
+iz6D*y0sp8
+DSQ18@_;NlҕK~^2$B%GVF=H)ǧq/x &H)˪1GOuD;`!4UV忽fyUOt@[t<(wѻ1"DIԮ ߦ-WYC;/_J
+:oW0#Qk{SuRUߡ>_*g<)6PN;^ֽ %?;<,ZYW(s1zbQGfi\9@GoB8J'Ia*T0C,i\9@GAS_(WS?VW)1ZQ4w+1oR2|o4"b,9ɢ}?
+endstream
+endobj
+5489 0 obj
+<< /Type /Page /Contents 5490 0 R /Resources 5488 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 5299 0 R >>
+endobj
+5491 0 obj
+<< /D [ 5489 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+5492 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+5493 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+5494 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+5495 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+5496 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+5497 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+5498 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+5499 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+5500 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 676.471 null ] >>
+endobj
+5501 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 622.696 null ] >>
+endobj
+5502 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 611.737 null ] >>
+endobj
+5503 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 600.778 null ] >>
+endobj
+5504 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 560.222 null ] >>
+endobj
+5505 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 549.264 null ] >>
+endobj
+5506 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 538.305 null ] >>
+endobj
+5507 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 527.346 null ] >>
+endobj
+5508 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 516.387 null ] >>
+endobj
+5509 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 505.428 null ] >>
+endobj
+5510 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 494.469 null ] >>
+endobj
+5511 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 483.51 null ] >>
+endobj
+5512 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 472.551 null ] >>
+endobj
+5513 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 461.592 null ] >>
+endobj
+5514 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 450.633 null ] >>
+endobj
+5515 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 439.675 null ] >>
+endobj
+5516 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 428.716 null ] >>
+endobj
+5517 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 364.25 null ] >>
+endobj
+5518 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 353.291 null ] >>
+endobj
+5519 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 342.332 null ] >>
+endobj
+5520 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 331.373 null ] >>
+endobj
+5521 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 320.414 null ] >>
+endobj
+5522 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 309.455 null ] >>
+endobj
+5523 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 293.806 null ] >>
+endobj
+5524 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 282.848 null ] >>
+endobj
+5525 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 271.889 null ] >>
+endobj
+5526 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 260.93 null ] >>
+endobj
+5527 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 249.971 null ] >>
+endobj
+5528 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 239.012 null ] >>
+endobj
+5529 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 228.053 null ] >>
+endobj
+5530 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 217.094 null ] >>
+endobj
+5531 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 201.445 null ] >>
+endobj
+5532 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 185.796 null ] >>
+endobj
+5533 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 174.838 null ] >>
+endobj
+5534 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 144.39 null ] >>
+endobj
+5535 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 133.431 null ] >>
+endobj
+5536 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 122.473 null ] >>
+endobj
+5537 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+5538 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+5539 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+5540 0 obj
+<< /D [ 5489 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+5488 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F30 644 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+5543 0 obj
+<< /Filter /FlateDecode /Length 1607 >>
+stream
+xZKs6WH5#LfL{ɷ%* M$w(UbR$>h:8Wt{%\zLg೛FtfVhFfٟ=`9i-l fZl+Jَ͛?wEXh#L;%(xh10,F]1fwQweSwS)U<MF8{^4'yM'0n,5YӮ:E7>m544&+iG*|-ɚA%{A51Ԏ~=X
+/u^VŀtP@FtJ W(\rq{p3 qML'ӄ9l\D\z<~p`,n01O$fWq A\oH<Im3lzv4^2
+35@B$$FVg|i?˪g ҆(>C7rփ)9
+x:Yd~->_Ʒy6_lQMRh3Dgs-?"`lPO|Y D Z(P6ɘMjWG 89[!
+mI//hV%N$*6j Dm4zM3 ,,ϔ'l#aYg~u>4@0H]^t>os#6.%Y."LJ"AN4Z$"A?s(wJ WTx˒BU8zHЧ[A
+F5Z!Ak UPR+zIAUP("Uz^Sa .ll0(A!A ЊDFB$٩@AHA_!Am N_"As~U)=6?EW~)yh8[λ{^l 3cj-_{d.lĚ4Fw؝8HӚnr,e^An-:b[ޥfolN-:Y1P &F?,m*oPkdZ>Foqޥ_<RW;W'~<Eg\ 4O2@8&)y.OL"aݡ$hL0bkΤ ln@ݢ.>/6m㋥/ 6qTE^-kb Bp%h4S0bl*Bݲ٠I5Fm^w @r&o& HPEBeu/БP5c3/Ƣ78t!0bjpR>A<3&c lp}`g X.F"Am;]G~>֛cL`,wѩlh,}-d)~yn>O=7O&X\
+endstream
+endobj
+5542 0 obj
+<< /Type /Page /Contents 5543 0 R /Resources 5541 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 5299 0 R >>
+endobj
+5544 0 obj
+<< /D [ 5542 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+5545 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+5546 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+5547 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+5548 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 700.678 null ] >>
+endobj
+5549 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 689.72 null ] >>
+endobj
+5550 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 678.761 null ] >>
+endobj
+5551 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 667.802 null ] >>
+endobj
+5552 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 656.843 null ] >>
+endobj
+5553 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 645.884 null ] >>
+endobj
+5554 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 634.925 null ] >>
+endobj
+5555 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 623.966 null ] >>
+endobj
+5556 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 613.007 null ] >>
+endobj
+5557 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 602.048 null ] >>
+endobj
+5558 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 559.651 null ] >>
+endobj
+5559 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 548.692 null ] >>
+endobj
+5560 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 537.733 null ] >>
+endobj
+5561 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 526.774 null ] >>
+endobj
+5562 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 515.815 null ] >>
+endobj
+5563 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 504.856 null ] >>
+endobj
+5564 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 493.897 null ] >>
+endobj
+5565 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 482.938 null ] >>
+endobj
+5566 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 471.98 null ] >>
+endobj
+5567 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 461.021 null ] >>
+endobj
+5568 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 450.062 null ] >>
+endobj
+5569 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 439.103 null ] >>
+endobj
+5570 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 428.144 null ] >>
+endobj
+5571 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 417.185 null ] >>
+endobj
+5572 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 406.226 null ] >>
+endobj
+5573 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 395.267 null ] >>
+endobj
+5574 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 384.308 null ] >>
+endobj
+5575 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 373.349 null ] >>
+endobj
+5576 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 362.39 null ] >>
+endobj
+5577 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 351.432 null ] >>
+endobj
+5578 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 340.473 null ] >>
+endobj
+5579 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 329.514 null ] >>
+endobj
+5580 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 318.555 null ] >>
+endobj
+5581 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 307.596 null ] >>
+endobj
+5582 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 296.637 null ] >>
+endobj
+5583 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 285.678 null ] >>
+endobj
+5584 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 274.719 null ] >>
+endobj
+5585 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 263.76 null ] >>
+endobj
+5586 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 252.801 null ] >>
+endobj
+5587 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 241.843 null ] >>
+endobj
+5588 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 230.884 null ] >>
+endobj
+5589 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 199.185 null ] >>
+endobj
+5590 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 188.226 null ] >>
+endobj
+5591 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 177.267 null ] >>
+endobj
+5592 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 166.308 null ] >>
+endobj
+5593 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 155.349 null ] >>
+endobj
+5594 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 144.39 null ] >>
+endobj
+5595 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 133.431 null ] >>
+endobj
+5596 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 122.473 null ] >>
+endobj
+5597 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+5598 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+5599 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+5600 0 obj
+<< /D [ 5542 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+5541 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+5603 0 obj
+<< /Filter /FlateDecode /Length 1316 >>
+stream
+x͙OoF:&@3ٙg@P CN5X#T"ng2 i8
+b2;oi[ŋ+ -|q>.RDKуǰx\??n~{e6ad
+_gNH;hH΂OXүzz_7r[6OGON 6ͦ md+N]%]!\"`dQ'v:mIN< rR>L+osGumぼqZm2U}/wl;ݲO}0kq~YcɁ5AƐTc(^V矯U7v/^txrz^2^Nw׆۬Vۺjj!ʞu8J6MܼDA<Y1}gǺ+n>s'ymO}h8~(/CĺPvUUPNN}C}-cƓ)賢ۺ\9&)int)q4Tq1@,~N/mr{]'a&E h~2Cxc2?O^[vonzhPNИo}w?lKFD&I:cR39BY*OD,Ye)ImW$0fE:s.hpA=v{nC|ol
+}<C..<4tQ/5kD&rAW/"$]T.h}mO(H:.QbHℤYW\!zLҽ3/h}`1WcxbYoI7EcZmRHjuy#u`XEJ<D &Y)gEM{y- YS3+P^gbtŨ ئuՓ
+endstream
+endobj
+5602 0 obj
+<< /Type /Page /Contents 5603 0 R /Resources 5601 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 5299 0 R >>
+endobj
+5604 0 obj
+<< /D [ 5602 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+5605 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+5606 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+5607 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+5608 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+5609 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+5610 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+5611 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+5612 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+5613 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+5614 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+5615 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+5616 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+5617 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+5618 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 626.366 null ] >>
+endobj
+5619 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 615.407 null ] >>
+endobj
+5620 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 604.448 null ] >>
+endobj
+5621 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 593.489 null ] >>
+endobj
+5622 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 582.53 null ] >>
+endobj
+5623 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 571.571 null ] >>
+endobj
+5624 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 560.613 null ] >>
+endobj
+5625 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 549.654 null ] >>
+endobj
+5626 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 538.695 null ] >>
+endobj
+5627 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 527.736 null ] >>
+endobj
+5628 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 516.777 null ] >>
+endobj
+5629 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 505.818 null ] >>
+endobj
+5630 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 494.859 null ] >>
+endobj
+5631 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 483.9 null ] >>
+endobj
+5632 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 472.941 null ] >>
+endobj
+5633 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 461.982 null ] >>
+endobj
+5634 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 451.023 null ] >>
+endobj
+5635 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 440.065 null ] >>
+endobj
+5636 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 429.106 null ] >>
+endobj
+5637 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 418.147 null ] >>
+endobj
+5638 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 407.188 null ] >>
+endobj
+5639 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 396.229 null ] >>
+endobj
+5640 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 385.27 null ] >>
+endobj
+5641 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 374.311 null ] >>
+endobj
+5642 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 363.352 null ] >>
+endobj
+5643 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 352.393 null ] >>
+endobj
+5644 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 341.434 null ] >>
+endobj
+5645 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 330.476 null ] >>
+endobj
+5646 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 319.517 null ] >>
+endobj
+5647 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 308.558 null ] >>
+endobj
+5648 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 297.599 null ] >>
+endobj
+5649 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 286.64 null ] >>
+endobj
+5650 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 275.681 null ] >>
+endobj
+5651 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 264.722 null ] >>
+endobj
+5652 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 253.763 null ] >>
+endobj
+5653 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 242.804 null ] >>
+endobj
+5654 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 231.845 null ] >>
+endobj
+5655 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 220.887 null ] >>
+endobj
+5656 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 209.928 null ] >>
+endobj
+5657 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 198.969 null ] >>
+endobj
+5658 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 188.01 null ] >>
+endobj
+5659 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 177.051 null ] >>
+endobj
+5660 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 166.092 null ] >>
+endobj
+5661 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 155.133 null ] >>
+endobj
+5662 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 144.174 null ] >>
+endobj
+5663 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 133.215 null ] >>
+endobj
+5664 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 122.256 null ] >>
+endobj
+5665 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 111.297 null ] >>
+endobj
+5666 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 100.339 null ] >>
+endobj
+5667 0 obj
+<< /D [ 5602 0 R /XYZ 81.077 89.38 null ] >>
+endobj
+5601 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+5670 0 obj
+<< /Filter /FlateDecode /Length 2294 >>
+stream
+xZnF}qfd,e!8ms"cL}IdӲ<}1tixr?7o Մpĸ7 ((WdrkJ7vݛ$qg+4W0[U8cdy&4Lc|d!nNxٌۜȳ=Ӫ1qJX̍S @ kayb4"#(殏"A=a&lۣHkcR{ xܠH&@Z/ˣ69·I648zj9LӌilVAZzBH_'`OC"$ύ
+gL0sc)E Y3FscD) szNs$~n.Qav 6PW:\bQrI(ǯ2b<,pOg3׮QGTiڮ+:kݐbo)~w
+"r4R!jW[飵̦uFp^ E95T4v
+i>M@!Y?ٰj2n9J7S7I
+Fڎ_5#IbRb@G8M@
+G
+biCuH>lGpf1aRR5#HPmir(m9[jPmNZ)5Pʦ7xV Ol
+)i^<~(_,,9|l+jn}u^@
+ 3^ ۲P"1zW@PP) aܡ([O(ۋ".0(7}#agY=T svpztnt
+RI1yMR_G EweU5&=J03g妰<]p]]$n$_
+.VCň{x(Nӳ FtA*/䠽ŠGҗ# >I_W0վ
+endstream
+endobj
+5669 0 obj
+<< /Type /Page /Contents 5670 0 R /Resources 5668 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 5299 0 R >>
+endobj
+5671 0 obj
+<< /D [ 5669 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+77 0 obj
+<< /D [ 5669 0 R /XYZ 79.37 771.024 null ] >>
+endobj
+5672 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 628.898 null ] >>
+endobj
+5673 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 617.939 null ] >>
+endobj
+5674 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 606.981 null ] >>
+endobj
+5675 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 596.022 null ] >>
+endobj
+5676 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 585.063 null ] >>
+endobj
+5677 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 574.104 null ] >>
+endobj
+5678 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 563.145 null ] >>
+endobj
+5679 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 552.186 null ] >>
+endobj
+5680 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 541.227 null ] >>
+endobj
+5681 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 530.268 null ] >>
+endobj
+5682 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 519.309 null ] >>
+endobj
+5683 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 508.35 null ] >>
+endobj
+5684 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 497.391 null ] >>
+endobj
+5685 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 486.433 null ] >>
+endobj
+5686 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 475.474 null ] >>
+endobj
+5687 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 464.515 null ] >>
+endobj
+5688 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 453.556 null ] >>
+endobj
+5689 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 442.597 null ] >>
+endobj
+5690 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 431.638 null ] >>
+endobj
+5691 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 420.679 null ] >>
+endobj
+5692 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 409.72 null ] >>
+endobj
+5693 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 398.761 null ] >>
+endobj
+5694 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 365.885 null ] >>
+endobj
+5695 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 354.926 null ] >>
+endobj
+5696 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 343.967 null ] >>
+endobj
+5697 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 333.008 null ] >>
+endobj
+5698 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 322.049 null ] >>
+endobj
+5699 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 311.09 null ] >>
+endobj
+5700 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 300.131 null ] >>
+endobj
+5701 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 289.172 null ] >>
+endobj
+5702 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 278.213 null ] >>
+endobj
+5703 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 267.254 null ] >>
+endobj
+5704 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 256.296 null ] >>
+endobj
+5705 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 245.337 null ] >>
+endobj
+5706 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 234.378 null ] >>
+endobj
+5707 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 223.419 null ] >>
+endobj
+5708 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 212.46 null ] >>
+endobj
+5709 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 201.501 null ] >>
+endobj
+5710 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 190.542 null ] >>
+endobj
+5711 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 179.583 null ] >>
+endobj
+5712 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 146.707 null ] >>
+endobj
+5713 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 135.748 null ] >>
+endobj
+5714 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 124.789 null ] >>
+endobj
+5715 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 113.83 null ] >>
+endobj
+5716 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 102.871 null ] >>
+endobj
+5717 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 91.912 null ] >>
+endobj
+5718 0 obj
+<< /D [ 5669 0 R /XYZ 81.077 80.953 null ] >>
+endobj
+5668 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F67 187 0 R /F19 184 0 R /F20 186 0 R /F65 185 0 R /F70 305 0 R /F27 642 0 R /F68 189 0 R /F64 183 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+5721 0 obj
+<< /Filter /FlateDecode /Length 1454 >>
+stream
+xZIoFW%,o6uաzI
+B( E
+]ߞh"$o~6ͮ3=W"ϷgL^_) Mg}f,3(3ee%X+b&3i&E`ʺgr5mQ='W$Gf3|9ܮ򋋼m6
+DFI [
+"FA0^Oքzݵ7lYʅý'/պn*Q>dFۡGOwڼ`2o6u/xf>e9WE 8TWʛjpѲDPediD6@-)v!M}ᗗj 7UU.n> *^OQje/^ߴr}|șT8 .  
+p_R<Am
+;ޓn7rD(ꗠOEQ1gqagN~:"w
+1j d$qvX0("A?wQAt d
+endstream
+endobj
+5720 0 obj
+<< /Type /Page /Contents 5721 0 R /Resources 5719 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 5299 0 R >>
+endobj
+5722 0 obj
+<< /D [ 5720 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+5723 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+5724 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+5725 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+5726 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+5727 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+5728 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+5729 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+5730 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+5731 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+5732 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+5733 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+5734 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 626.474 null ] >>
+endobj
+5735 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 615.515 null ] >>
+endobj
+5736 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 604.556 null ] >>
+endobj
+5737 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 593.597 null ] >>
+endobj
+5738 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 582.638 null ] >>
+endobj
+5739 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 571.68 null ] >>
+endobj
+5740 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 560.721 null ] >>
+endobj
+5741 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 549.762 null ] >>
+endobj
+5742 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 538.803 null ] >>
+endobj
+5743 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 527.844 null ] >>
+endobj
+5744 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 516.885 null ] >>
+endobj
+5745 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 505.926 null ] >>
+endobj
+5746 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 494.967 null ] >>
+endobj
+5747 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 484.008 null ] >>
+endobj
+5748 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 473.049 null ] >>
+endobj
+5749 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 462.09 null ] >>
+endobj
+5750 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 451.132 null ] >>
+endobj
+5751 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 440.173 null ] >>
+endobj
+5752 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 429.214 null ] >>
+endobj
+5753 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 418.255 null ] >>
+endobj
+5754 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 407.296 null ] >>
+endobj
+5755 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 396.337 null ] >>
+endobj
+5756 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 385.378 null ] >>
+endobj
+5757 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 374.419 null ] >>
+endobj
+5758 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 363.46 null ] >>
+endobj
+5759 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 352.501 null ] >>
+endobj
+5760 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 319.733 null ] >>
+endobj
+5761 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 308.774 null ] >>
+endobj
+5762 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 297.815 null ] >>
+endobj
+5763 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 286.856 null ] >>
+endobj
+5764 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 275.897 null ] >>
+endobj
+5765 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 264.938 null ] >>
+endobj
+5766 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 253.979 null ] >>
+endobj
+5767 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 243.021 null ] >>
+endobj
+5768 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 232.062 null ] >>
+endobj
+5769 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 221.103 null ] >>
+endobj
+5770 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 210.144 null ] >>
+endobj
+5771 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 199.185 null ] >>
+endobj
+5772 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 188.226 null ] >>
+endobj
+5773 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 177.267 null ] >>
+endobj
+5774 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 166.308 null ] >>
+endobj
+5775 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 155.349 null ] >>
+endobj
+5776 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 144.39 null ] >>
+endobj
+5777 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 133.431 null ] >>
+endobj
+5778 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 122.473 null ] >>
+endobj
+5779 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+5780 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+5781 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+5782 0 obj
+<< /D [ 5720 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+5719 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+5785 0 obj
+<< /Filter /FlateDecode /Length 2410 >>
+stream
+xڵZ[s~PBXh3%Igh&Iʡ%bMHzv{ /&E>|~N~ +xͻBM
+S2Yo0ND $HQ(dwmMBP5cE)+,/*d6rGGvW=G$"kY",IP}Ð1]|\#J}D
+eEP*X
+rrVUڦuY1<ŦXża/U^Yo%J!FWpiYFyE,d5^H&؇H2ձ^U _0x))>DGv>{!ի~5D"%3#Ħy ɍ
+|@YLJW>K $sM
+)HK7e+aȍ,:DXs4< |R)|7Ӽ'p+/,e^"Vm_6 dwtsӬF7CtW&堽^5b(үu]ޛ_#pY/>{jkAӓU/ɾv-CID`+$:DZoX9V &~`wڃr Awgs3ŠUT-Ue6ck<rvdWEp4|<A2$WJ G\@*%V*T^`_Cnqg3w>[}Ko0Bg*e2NU%ڿo*8࠽Wk%RCcG@;iuz(A$!\:1[TP
+^FȂWhyÿZ6ܥ`tO^ىf<yX,$>8z=s'X942>ecJ s 8]y)HinDU@I0/0Ѫ)шAy6 b+̻3CAMbtMHG3UĩU?Jivͅa+ikss6Sցc ո@MEjt0k)5#\;=.ݙlm+= +HEäA2n3qs1`;h،ˌl.޻}]mdUcsQ/^f&|?fKɕ߹6O }R.|67;cl׮X
+endstream
+endobj
+5784 0 obj
+<< /Type /Page /Contents 5785 0 R /Resources 5783 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 5828 0 R >>
+endobj
+5786 0 obj
+<< /D [ 5784 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+5787 0 obj
+<< /D [ 5784 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+5788 0 obj
+<< /D [ 5784 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+5789 0 obj
+<< /D [ 5784 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+5790 0 obj
+<< /D [ 5784 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+5791 0 obj
+<< /D [ 5784 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+5792 0 obj
+<< /D [ 5784 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+5793 0 obj
+<< /D [ 5784 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+5794 0 obj
+<< /D [ 5784 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+5795 0 obj
+<< /D [ 5784 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+5796 0 obj
+<< /D [ 5784 0 R /XYZ 81.077 596.478 null ] >>
+endobj
+5797 0 obj
+<< /D [ 5784 0 R /XYZ 81.077 585.519 null ] >>
+endobj
+5798 0 obj
+<< /D [ 5784 0 R /XYZ 81.077 574.56 null ] >>
+endobj
+5799 0 obj
+<< /D [ 5784 0 R /XYZ 81.077 563.601 null ] >>
+endobj
+5800 0 obj
+<< /D [ 5784 0 R /XYZ 81.077 552.642 null ] >>
+endobj
+5801 0 obj
+<< /D [ 5784 0 R /XYZ 81.077 499.84 null ] >>
+endobj
+5802 0 obj
+<< /D [ 5784 0 R /XYZ 81.077 429.106 null ] >>
+endobj
+5803 0 obj
+<< /D [ 5784 0 R /XYZ 81.077 418.147 null ] >>
+endobj
+5804 0 obj
+<< /D [ 5784 0 R /XYZ 81.077 407.188 null ] >>
+endobj
+5805 0 obj
+<< /D [ 5784 0 R /XYZ 81.077 396.229 null ] >>
+endobj
+5806 0 obj
+<< /D [ 5784 0 R /XYZ 81.077 385.27 null ] >>
+endobj
+5807 0 obj
+<< /D [ 5784 0 R /XYZ 81.077 374.311 null ] >>
+endobj
+5808 0 obj
+<< /D [ 5784 0 R /XYZ 81.077 363.352 null ] >>
+endobj
+5809 0 obj
+<< /D [ 5784 0 R /XYZ 81.077 352.393 null ] >>
+endobj
+5810 0 obj
+<< /D [ 5784 0 R /XYZ 81.077 341.434 null ] >>
+endobj
+5811 0 obj
+<< /D [ 5784 0 R /XYZ 81.077 330.476 null ] >>
+endobj
+5812 0 obj
+<< /D [ 5784 0 R /XYZ 81.077 319.517 null ] >>
+endobj
+5813 0 obj
+<< /D [ 5784 0 R /XYZ 81.077 308.558 null ] >>
+endobj
+5814 0 obj
+<< /D [ 5784 0 R /XYZ 81.077 297.599 null ] >>
+endobj
+5815 0 obj
+<< /D [ 5784 0 R /XYZ 81.077 286.64 null ] >>
+endobj
+5816 0 obj
+<< /D [ 5784 0 R /XYZ 81.077 275.681 null ] >>
+endobj
+5817 0 obj
+<< /D [ 5784 0 R /XYZ 81.077 264.722 null ] >>
+endobj
+5818 0 obj
+<< /D [ 5784 0 R /XYZ 81.077 253.763 null ] >>
+endobj
+5819 0 obj
+<< /D [ 5784 0 R /XYZ 81.077 242.804 null ] >>
+endobj
+5820 0 obj
+<< /D [ 5784 0 R /XYZ 81.077 190.002 null ] >>
+endobj
+5821 0 obj
+<< /D [ 5784 0 R /XYZ 81.077 179.043 null ] >>
+endobj
+5822 0 obj
+<< /D [ 5784 0 R /XYZ 81.077 168.085 null ] >>
+endobj
+5823 0 obj
+<< /D [ 5784 0 R /XYZ 81.077 157.126 null ] >>
+endobj
+5824 0 obj
+<< /D [ 5784 0 R /XYZ 81.077 116.279 null ] >>
+endobj
+5825 0 obj
+<< /D [ 5784 0 R /XYZ 81.077 105.32 null ] >>
+endobj
+5826 0 obj
+<< /D [ 5784 0 R /XYZ 81.077 94.361 null ] >>
+endobj
+5827 0 obj
+<< /D [ 5784 0 R /XYZ 81.077 83.402 null ] >>
+endobj
+5783 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F70 305 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+5831 0 obj
+<< /Filter /FlateDecode /Length 1483 >>
+stream
+xڽZMoFW0hOut(^ڂP$ʡAD.Mi6GNa=̛yvG?_6Y@].gY4h`\Cvyy_˃efm tLim_n|]^o'3%_?MY6*bUo._pq|i1E"O m=ζ MѝG:l1 t8:0)nM1]/%&
+,-e~:%LhX:ey,b͖
+pNd(] l.H{cR2O`$h"𢹫{?ISܯi'ۿb'w;L"H#oWc9rVq7bQcyC׉ mhm&uM )mC j}UUgmPYCC ӨeKsW&4 ԑvl*flَ]nn7M Yۛ/$GNL
+wrB&Y/R%hÔ`V2
+#K?z]+Bۖ Fp
+$\zenC˙r NZNJa
+7joW-) \eC5XLG`zzI?J@P6;%L)yq_n/L*GE va(A}v$[WȺ
++Ʃ}V#mB#3Ffי҅ {66%hm뇏A"l]'_RÙ1Jch
++Q20Гt=<~(H{͒A#h8F=/aGK nM9 z!}peb CՖM^$4IO.~D3.~YOYϯ/mP?P%m.A /SL+ZbW T^$h'eC5w7
+endstream
+endobj
+5830 0 obj
+<< /Type /Page /Contents 5831 0 R /Resources 5829 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 5828 0 R >>
+endobj
+5832 0 obj
+<< /D [ 5830 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+5833 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+5834 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+5835 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+5836 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+5837 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+5838 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+5839 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+5840 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+5841 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+5842 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+5843 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+5844 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+5845 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+5846 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 626.366 null ] >>
+endobj
+5847 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 615.407 null ] >>
+endobj
+5848 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 604.448 null ] >>
+endobj
+5849 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 593.489 null ] >>
+endobj
+5850 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 582.53 null ] >>
+endobj
+5851 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 571.571 null ] >>
+endobj
+5852 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 560.613 null ] >>
+endobj
+5853 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 549.654 null ] >>
+endobj
+5854 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 524.747 null ] >>
+endobj
+5855 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 513.788 null ] >>
+endobj
+5856 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 502.829 null ] >>
+endobj
+5857 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 491.87 null ] >>
+endobj
+5858 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 460.986 null ] >>
+endobj
+5859 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 450.027 null ] >>
+endobj
+5860 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 421.136 null ] >>
+endobj
+5861 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 410.177 null ] >>
+endobj
+5862 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 399.218 null ] >>
+endobj
+5863 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 388.259 null ] >>
+endobj
+5864 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 377.3 null ] >>
+endobj
+5865 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 366.341 null ] >>
+endobj
+5866 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 355.382 null ] >>
+endobj
+5867 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 344.423 null ] >>
+endobj
+5868 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 333.464 null ] >>
+endobj
+5869 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 322.505 null ] >>
+endobj
+5870 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 311.547 null ] >>
+endobj
+5871 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 300.588 null ] >>
+endobj
+5872 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 289.629 null ] >>
+endobj
+5873 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 278.67 null ] >>
+endobj
+5874 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 267.711 null ] >>
+endobj
+5875 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 256.752 null ] >>
+endobj
+5876 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 245.793 null ] >>
+endobj
+5877 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 234.834 null ] >>
+endobj
+5878 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 223.875 null ] >>
+endobj
+5879 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 212.916 null ] >>
+endobj
+5880 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 201.957 null ] >>
+endobj
+5881 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 190.999 null ] >>
+endobj
+5882 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 180.04 null ] >>
+endobj
+5883 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 169.081 null ] >>
+endobj
+5884 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 158.122 null ] >>
+endobj
+5885 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 147.163 null ] >>
+endobj
+5886 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 136.204 null ] >>
+endobj
+5887 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 125.245 null ] >>
+endobj
+5888 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 114.286 null ] >>
+endobj
+5889 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 103.327 null ] >>
+endobj
+5890 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 92.368 null ] >>
+endobj
+5891 0 obj
+<< /D [ 5830 0 R /XYZ 81.077 81.41 null ] >>
+endobj
+5829 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+5894 0 obj
+<< /Filter /FlateDecode /Length 1845 >>
+stream
+xڽZ]o6}ϯ00EX iӢh];fMeɕd$i0hQq|=ž#{yyx/%<YM ܷH#ſn/H5H+؛LD$D%ܮ'
+"o ϲ`>QHKLBL0mژv6//ݵ"N2+O7ԷNo|C|ٓU#iìpfm5AӪ)Sw#+ӈpӸr{Q U(ͬ E}'M16h7nҏf30LU"PQ0*cbc澪[#5F@GD~Nw韦fM<Νa2шɤ(1(r"0UQ2_u]^7U]=d.X|~-Ĺ}HH]TMVY9/oG㣡^^9ղ~L۪$jjHҬ}2L 9lhxߔ#Џ$̶A)yjE,#gϭqYM^;)"ȭ)v7޴Ofoqا]dm?rG熝I][`E͊)]C
+^gr4Da6ywCD[<۾) Tlj.8ӥYV Z A{{aU0ui%MO.w@!Sqp6ygCh(wSliնfiH]`9lE^޴da yMcbQh_HQeo?ޛ]
+a?91%"F IcY6kU{l].|A]I۵bs=($8e yp܊,YMʖf&W,ur(,.#1g\f9,лӹ6"+g+2>P(5dX:wPtSWYXM2m#MN]C(F爑M 56nmf勌~D;Ϳ2~ P&y v|^ l۝`\o!MjU
+Zl>umDY:[{tubʈvkm"Sn};?! uW3FIXl&B6,R
+ 'd:L )Ln葲vDq6,)~Ps%a,X~z_$YrX/}(LQ=U`ThpSMl$ tgo-E j1n*vod-m]jc=Fo7r_
+^`i
+<F0g_c@3%Bf ;-APM%û*-@MM"&-AEbmD:VE͋;mI@~`'#6Ѱ?BG_eEsk>( \#^P ۡ'=@q[n[~خ˷$oK5O~%!
+K_c\@¨#Ö}bڒHi ^X8^IRW
+endstream
+endobj
+5893 0 obj
+<< /Type /Page /Contents 5894 0 R /Resources 5892 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 5828 0 R >>
+endobj
+5895 0 obj
+<< /D [ 5893 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+5896 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+5897 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+5898 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+5899 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+5900 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 720.015 null ] >>
+endobj
+5901 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 709.056 null ] >>
+endobj
+5902 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 698.097 null ] >>
+endobj
+5903 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 687.138 null ] >>
+endobj
+5904 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 676.179 null ] >>
+endobj
+5905 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 665.22 null ] >>
+endobj
+5906 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 654.261 null ] >>
+endobj
+5907 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 643.302 null ] >>
+endobj
+5908 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 632.344 null ] >>
+endobj
+5909 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 621.385 null ] >>
+endobj
+5910 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 610.426 null ] >>
+endobj
+5911 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 599.467 null ] >>
+endobj
+5912 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 588.508 null ] >>
+endobj
+5913 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 527.736 null ] >>
+endobj
+5914 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 516.777 null ] >>
+endobj
+5915 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 505.818 null ] >>
+endobj
+5916 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 474.934 null ] >>
+endobj
+5917 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 463.975 null ] >>
+endobj
+5918 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 453.016 null ] >>
+endobj
+5919 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 442.057 null ] >>
+endobj
+5920 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 431.098 null ] >>
+endobj
+5921 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 420.139 null ] >>
+endobj
+5922 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 409.18 null ] >>
+endobj
+5923 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 398.221 null ] >>
+endobj
+5924 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 387.263 null ] >>
+endobj
+5925 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 376.304 null ] >>
+endobj
+5926 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 365.345 null ] >>
+endobj
+5927 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 354.386 null ] >>
+endobj
+5928 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 343.427 null ] >>
+endobj
+5929 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 332.468 null ] >>
+endobj
+5930 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 321.509 null ] >>
+endobj
+5931 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 310.55 null ] >>
+endobj
+5932 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 299.591 null ] >>
+endobj
+5933 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 288.632 null ] >>
+endobj
+5934 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 277.674 null ] >>
+endobj
+5935 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 266.715 null ] >>
+endobj
+5936 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 255.756 null ] >>
+endobj
+5937 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 244.797 null ] >>
+endobj
+5938 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 233.838 null ] >>
+endobj
+5939 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 222.879 null ] >>
+endobj
+5940 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 190.002 null ] >>
+endobj
+5941 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 179.043 null ] >>
+endobj
+5942 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 168.085 null ] >>
+endobj
+5943 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 157.126 null ] >>
+endobj
+5944 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 126.241 null ] >>
+endobj
+5945 0 obj
+<< /D [ 5893 0 R /XYZ 81.077 115.283 null ] >>
+endobj
+5892 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+5948 0 obj
+<< /Filter /FlateDecode /Length 1847 >>
+stream
+xڽZ[oD~﯈b;HHEBP$T,dj;Ǟd29K|?Ϲ~tr5jWY>I# d9$ӌP&FLD1ut1Ϧw/#>'r~gv3o7u5/]?<D  6Ir1hɌ0&@Sorb@-L fL)-j\1Svv֜5篏OWy|7n^-
+lc8=T*mgI…k1zmQv٧oolS i3c:D@J64:a$rRrR c/¾z7Cbbe(at?a$4"Er"%kVܤ蛫K~_'Mv
+|?CS,3A | O4f6|
+OߚbX,(NSEpsVB㦏GWy᠞XXYp\4h+w
+[;Fo}~iF ,+pSFF5<PKПӔϬ("uoqZƊL]d(` JnN `Q;G zpUjBn )N*Zc,mp7M z|cv /&aP$n*HzxO Ts,]W?ޝ%ZALH<F'r2rx5pرp(p`R 5CL%}_<~KHkDY:cmf ,h1߼_OL&
+W'?7;ǎ0Mݖu}_,m],`4%TQGjWޔQ, 2s*a\Û-=>Ov^x _=m]ܼmk^ U^NkC$!/!$vi XN2cRtRNA"6m 8b7x߯ƮUlۥ)gq7.UgB@_\  x^ RWh tdSd뮫~g}b6a><UHEa߻.+Wپh/@@
+DwXeq] $['y6?kHOn|,"`fzB0L1CMוo*wղ)Oo&Ԟ, c{ٻWvi*$k7qgɂLB%A ~B~"s
+'q3"KϏ
+endstream
+endobj
+5947 0 obj
+<< /Type /Page /Contents 5948 0 R /Resources 5946 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 5828 0 R >>
+endobj
+5949 0 obj
+<< /D [ 5947 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+5950 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 754.884 null ] >>
+endobj
+5951 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 743.925 null ] >>
+endobj
+5952 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 732.966 null ] >>
+endobj
+5953 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 722.007 null ] >>
+endobj
+5954 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 711.048 null ] >>
+endobj
+5955 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 700.089 null ] >>
+endobj
+5956 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 689.131 null ] >>
+endobj
+5957 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 678.172 null ] >>
+endobj
+5958 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 667.213 null ] >>
+endobj
+5959 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 656.254 null ] >>
+endobj
+5960 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 645.295 null ] >>
+endobj
+5961 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 634.336 null ] >>
+endobj
+5962 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 623.377 null ] >>
+endobj
+5963 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 612.418 null ] >>
+endobj
+5964 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 601.459 null ] >>
+endobj
+5965 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 590.5 null ] >>
+endobj
+5966 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 579.542 null ] >>
+endobj
+5967 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 568.583 null ] >>
+endobj
+5968 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 557.624 null ] >>
+endobj
+5969 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 546.665 null ] >>
+endobj
+5970 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 535.706 null ] >>
+endobj
+5971 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 524.747 null ] >>
+endobj
+5972 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 513.788 null ] >>
+endobj
+5973 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 502.829 null ] >>
+endobj
+5974 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 491.87 null ] >>
+endobj
+5975 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 480.911 null ] >>
+endobj
+5976 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 469.953 null ] >>
+endobj
+5977 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 458.994 null ] >>
+endobj
+5978 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 448.035 null ] >>
+endobj
+5979 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 437.076 null ] >>
+endobj
+5980 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 426.117 null ] >>
+endobj
+5981 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 415.158 null ] >>
+endobj
+5982 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 404.199 null ] >>
+endobj
+5983 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 393.24 null ] >>
+endobj
+5984 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 382.281 null ] >>
+endobj
+5985 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 371.322 null ] >>
+endobj
+5986 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 355.382 null ] >>
+endobj
+5987 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 344.423 null ] >>
+endobj
+5988 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 333.464 null ] >>
+endobj
+5989 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 322.505 null ] >>
+endobj
+5990 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 311.547 null ] >>
+endobj
+5991 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 300.588 null ] >>
+endobj
+5992 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 289.629 null ] >>
+endobj
+5993 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 278.67 null ] >>
+endobj
+5994 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 267.711 null ] >>
+endobj
+5995 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 256.752 null ] >>
+endobj
+5996 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 245.793 null ] >>
+endobj
+5997 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 234.834 null ] >>
+endobj
+5998 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 174.062 null ] >>
+endobj
+5999 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 163.103 null ] >>
+endobj
+6000 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 152.144 null ] >>
+endobj
+6001 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 94.906 null ] >>
+endobj
+6002 0 obj
+<< /D [ 5947 0 R /XYZ 81.077 83.947 null ] >>
+endobj
+5946 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F68 189 0 R /F64 183 0 R /F20 186 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+6006 0 obj
+<< /Filter /FlateDecode /Length 2515 >>
+stream
+xڭZ[o~ϯp1#),ff6E l Ef5߾"u(ff;ng쇳"ng^jP0%3 )3)0]f?9bՏ\
+f( ;Z<<~,O2h}m=ܾ ].HDa>Dӎ"Bti1Fhz`B
+W&ю0qo\Oo%? 
+w y`S!ܓfAkNQZl@hϽféyREvNX b>$ۃ^u|.J "",`xC~Aĺ,rk- (X嗯Sc
+;/dџP9 Q&<2FT8A  oJ>O.7Hk oo]osF/Z ѷ` 1D"No}gQr^ JcP#mˋ <bɢH/x-x!tnmb,Ƃxȶ[bITw r7NN$kTBR)kFN1Ec(>-"Yeȫ^Zx<vs]dINf| `"lBwwURjs77j^h}DYYWvLqc
+E_b6)lbQ!4)H?M #`حYJ(MQzsl#D9@ihm#ǪNF1Ƭ&Is9mUػEy_٩2cCTPۢQ{ w8R YYY ؛!Rf7_{7C*Hb ³x|ȊCqYg
+c|rzd皳 )y:vh?{$ ^?2֩6pAD6\ej@}Lb%JuV+w6x"YY!_U]C+Ge[Tx&Cuvֻ}ʯ..ye%H$z}[M.چ 1IX?M:ְWr}KMu<t8m
+J$;,J=V: 0Ha?)|@b}DKir\Ƙ[
+b]RS6_~IuL4[:$L""Od&˖JXEJGB6/RΩ *l*Y[AF:8ui(jھ:)p/u@XD{e2nd~$#
+C"3(+q)陦dW)QI%?hEBD!WxBlVyW^^ZfHM6[;B%sj}Pkzअ@KqL%-sC&:]灄RHe O޹y?L{v|:!Bv1U%%f/K]IcpGw*~Mg;S8lACMyuF]|A{-(aRa)lXňˮS4<C7Geqد
+fE*v5ba ѯ8)L{d;sgwoW0Bp"<L8C,.Fz܈bݶ( a2|D4|qԉ1_!x{he+2ZTB4V>:2MMvXI>@B(L4M?!O
+*1&H.^QCiSw俿:uWϿ +5: ٔv_~ssH*gr4ln rt]zc:3sJPJ,hԴq5kϞ7O`٨U1M( [|mNZgJtVj\<
+΍lah~h/mii-#;"o(g-Eފ&f,@i@Iaͯl&B=D"! )
+endstream
+endobj
+6005 0 obj
+<< /Type /Page /Contents 6006 0 R /Resources 6004 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 5828 0 R /Annots 6044 0 R >>
+endobj
+6044 0 obj
+[ 6003 0 R ]
+endobj
+6003 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 357.901 411.718 368.334 424.208 ]/A << /S /GoTo /D (Hfootnote.13) >> >>
+endobj
+6007 0 obj
+<< /D [ 6005 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+6008 0 obj
+<< /D [ 6005 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+6009 0 obj
+<< /D [ 6005 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+6010 0 obj
+<< /D [ 6005 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+6011 0 obj
+<< /D [ 6005 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+6012 0 obj
+<< /D [ 6005 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+6013 0 obj
+<< /D [ 6005 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+6014 0 obj
+<< /D [ 6005 0 R /XYZ 81.077 683.879 null ] >>
+endobj
+6015 0 obj
+<< /D [ 6005 0 R /XYZ 81.077 672.92 null ] >>
+endobj
+6016 0 obj
+<< /D [ 6005 0 R /XYZ 81.077 661.961 null ] >>
+endobj
+6017 0 obj
+<< /D [ 6005 0 R /XYZ 81.077 651.002 null ] >>
+endobj
+6018 0 obj
+<< /D [ 6005 0 R /XYZ 81.077 640.043 null ] >>
+endobj
+6019 0 obj
+<< /D [ 6005 0 R /XYZ 81.077 629.084 null ] >>
+endobj
+81 0 obj
+<< /D [ 6005 0 R /XYZ 79.37 604.252 null ] >>
+endobj
+6020 0 obj
+<< /D [ 6005 0 R /XYZ 81.077 409.131 null ] >>
+endobj
+6021 0 obj
+<< /D [ 6005 0 R /XYZ 81.077 398.173 null ] >>
+endobj
+6022 0 obj
+<< /D [ 6005 0 R /XYZ 81.077 387.214 null ] >>
+endobj
+6023 0 obj
+<< /D [ 6005 0 R /XYZ 81.077 376.255 null ] >>
+endobj
+6024 0 obj
+<< /D [ 6005 0 R /XYZ 81.077 365.296 null ] >>
+endobj
+6025 0 obj
+<< /D [ 6005 0 R /XYZ 81.077 354.337 null ] >>
+endobj
+6026 0 obj
+<< /D [ 6005 0 R /XYZ 81.077 343.378 null ] >>
+endobj
+6027 0 obj
+<< /D [ 6005 0 R /XYZ 81.077 332.419 null ] >>
+endobj
+6028 0 obj
+<< /D [ 6005 0 R /XYZ 81.077 274.054 null ] >>
+endobj
+6029 0 obj
+<< /D [ 6005 0 R /XYZ 81.077 263.095 null ] >>
+endobj
+6030 0 obj
+<< /D [ 6005 0 R /XYZ 81.077 252.136 null ] >>
+endobj
+6031 0 obj
+<< /D [ 6005 0 R /XYZ 81.077 241.177 null ] >>
+endobj
+6032 0 obj
+<< /D [ 6005 0 R /XYZ 81.077 230.219 null ] >>
+endobj
+6033 0 obj
+<< /D [ 6005 0 R /XYZ 81.077 219.26 null ] >>
+endobj
+6034 0 obj
+<< /D [ 6005 0 R /XYZ 81.077 208.301 null ] >>
+endobj
+6035 0 obj
+<< /D [ 6005 0 R /XYZ 81.077 197.342 null ] >>
+endobj
+6036 0 obj
+<< /D [ 6005 0 R /XYZ 81.077 186.383 null ] >>
+endobj
+6037 0 obj
+<< /D [ 6005 0 R /XYZ 81.077 175.424 null ] >>
+endobj
+6038 0 obj
+<< /D [ 6005 0 R /XYZ 81.077 164.465 null ] >>
+endobj
+6039 0 obj
+<< /D [ 6005 0 R /XYZ 81.077 153.506 null ] >>
+endobj
+6040 0 obj
+<< /D [ 6005 0 R /XYZ 81.077 142.547 null ] >>
+endobj
+6041 0 obj
+<< /D [ 6005 0 R /XYZ 81.077 131.588 null ] >>
+endobj
+6042 0 obj
+<< /D [ 6005 0 R /XYZ 81.077 120.629 null ] >>
+endobj
+6043 0 obj
+<< /D [ 6005 0 R /XYZ 94.613 89.795 null ] >>
+endobj
+6004 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F67 187 0 R /F19 184 0 R /F20 186 0 R /F30 644 0 R /F78 654 0 R /F70 305 0 R /F22 459 0 R /F76 468 0 R /F53 203 0 R /F80 760 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+6047 0 obj
+<< /Filter /FlateDecode /Length 2422 >>
+stream
+xڽn}@&\*Oi;y:ش-D<4CqlsR) ϝFQ4CԎ'_>ICĔ0|H
+$p<F_cN<;\
+ s/)l9[JͶӹ]w}Cά~څa14-&Kpm!uۦqJmm}N˲Q@mzt/s/ˢ|1%/? eJo;Ͼ<Z%ުp2Jc866 yPJǵjT,Bb-lTZLn2AUnjJS=!`WD</16FBWl,,q|k;M$?̄ӹAS3SR`%,$,UJU:?}L'`=qNew,P_bxB ]<pqb&;Al.jgsWzV^F@JP$x IڻLƃ~#{I9cHƽAA?_/9QB}"ظL,ƥynuZ4x1 /sȍos[ظ<wJ->$ x3bD[g߶ټޕ>(Hp#H,U*"$9Mk 3FG;/ʳ2c6 u9uM@cz%E( 3 =&h|?!Q"x@`g_"=fUvC"Q2:#ۛ]az<U5(> ]n4V ;vG'y\#& FiYa KpfPqEq&x9S6@gup@w Gal O68 J-̻qCN-W(RlDi`iP aֿ,0n`]5>m2FfWҍqTR)f.SvUiivpG V.",JGBy#8#x̒{qD$US߷S+0ĨAAgTRzEPVATTWs*ۢʌjz(
+f<كn"uN(?hQ~mPN6AF|Úasm^:|I|ZUdu6PaM%o|fB ˜BKHwH.!eńvL0З U,(]"4!q
+# G2l5<k'" VT:_0]#f.P&=_c!3審tqW
+za{Moހl{u @e?0y7UzJ7\}t~$Y*ec®Z@oYmZyZ fc0ȣ9a`4[AN{9j3ruV, ѳ2, m= $<4 1:t{2M&Pt;ӟ Lw^7R%gf?YNw&3>}ήUœ $a -~V>}f$NL`_lR;c~[۶9cqS ʲ=jX[U{lVVE
+jʱc;mVHa(ЈuZB7^xʖv<;L Snb_]/hbܴӦKHU фKc`۾uC64&{DrV+EYDڎYsPyh||'6Nz?e<F,;:kSb؈Ѧ4oa 뀻F sw%ϰpͬu,p*o^gTz%Sm!iz,1#Qe٦%7Ͳz 8{HbᎢ멡9I4#I{z->Nt
+endstream
+endobj
+6046 0 obj
+<< /Type /Page /Contents 6047 0 R /Resources 6045 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 5828 0 R >>
+endobj
+6048 0 obj
+<< /D [ 6046 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+6049 0 obj
+<< /D [ 6046 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+6050 0 obj
+<< /D [ 6046 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+6051 0 obj
+<< /D [ 6046 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+6052 0 obj
+<< /D [ 6046 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+6053 0 obj
+<< /D [ 6046 0 R /XYZ 81.077 720.015 null ] >>
+endobj
+6054 0 obj
+<< /D [ 6046 0 R /XYZ 81.077 709.056 null ] >>
+endobj
+6055 0 obj
+<< /D [ 6046 0 R /XYZ 81.077 698.097 null ] >>
+endobj
+6056 0 obj
+<< /D [ 6046 0 R /XYZ 81.077 687.138 null ] >>
+endobj
+6057 0 obj
+<< /D [ 6046 0 R /XYZ 81.077 676.179 null ] >>
+endobj
+6058 0 obj
+<< /D [ 6046 0 R /XYZ 81.077 665.22 null ] >>
+endobj
+6059 0 obj
+<< /D [ 6046 0 R /XYZ 81.077 654.261 null ] >>
+endobj
+6060 0 obj
+<< /D [ 6046 0 R /XYZ 81.077 643.302 null ] >>
+endobj
+6061 0 obj
+<< /D [ 6046 0 R /XYZ 81.077 612.418 null ] >>
+endobj
+6062 0 obj
+<< /D [ 6046 0 R /XYZ 81.077 601.459 null ] >>
+endobj
+6063 0 obj
+<< /D [ 6046 0 R /XYZ 81.077 585.519 null ] >>
+endobj
+6064 0 obj
+<< /D [ 6046 0 R /XYZ 81.077 574.56 null ] >>
+endobj
+6065 0 obj
+<< /D [ 6046 0 R /XYZ 81.077 563.601 null ] >>
+endobj
+6066 0 obj
+<< /D [ 6046 0 R /XYZ 81.077 552.642 null ] >>
+endobj
+6067 0 obj
+<< /D [ 6046 0 R /XYZ 81.077 497.848 null ] >>
+endobj
+6068 0 obj
+<< /D [ 6046 0 R /XYZ 81.077 486.889 null ] >>
+endobj
+6069 0 obj
+<< /D [ 6046 0 R /XYZ 81.077 475.93 null ] >>
+endobj
+6070 0 obj
+<< /D [ 6046 0 R /XYZ 81.077 464.971 null ] >>
+endobj
+6071 0 obj
+<< /D [ 6046 0 R /XYZ 81.077 454.012 null ] >>
+endobj
+6072 0 obj
+<< /D [ 6046 0 R /XYZ 81.077 413.165 null ] >>
+endobj
+6073 0 obj
+<< /D [ 6046 0 R /XYZ 81.077 402.207 null ] >>
+endobj
+6074 0 obj
+<< /D [ 6046 0 R /XYZ 81.077 391.248 null ] >>
+endobj
+6075 0 obj
+<< /D [ 6046 0 R /XYZ 81.077 380.289 null ] >>
+endobj
+6076 0 obj
+<< /D [ 6046 0 R /XYZ 81.077 369.33 null ] >>
+endobj
+6077 0 obj
+<< /D [ 6046 0 R /XYZ 81.077 358.371 null ] >>
+endobj
+6078 0 obj
+<< /D [ 6046 0 R /XYZ 81.077 347.412 null ] >>
+endobj
+6079 0 obj
+<< /D [ 6046 0 R /XYZ 81.077 336.453 null ] >>
+endobj
+6080 0 obj
+<< /D [ 6046 0 R /XYZ 81.077 325.494 null ] >>
+endobj
+6081 0 obj
+<< /D [ 6046 0 R /XYZ 81.077 314.535 null ] >>
+endobj
+6082 0 obj
+<< /D [ 6046 0 R /XYZ 81.077 303.576 null ] >>
+endobj
+85 0 obj
+<< /D [ 6046 0 R /XYZ 79.37 254.461 null ] >>
+endobj
+6045 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F70 305 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+6085 0 obj
+<< /Filter /FlateDecode /Length 1883 >>
+stream
+xڵZo~B@"7fk!m/h@>5A+8TH|qg:^Lsŏvv曙%~A?W߿ta\-CDH4#Tfof! LRBe`~B6mN䲩/x|4%6_w%RI1̳hW⒧^G4岨ڮ٭\j{%ʙp.$1)<h aL p%n0"gkFsaBڬWRqՏ~묩Ҷm=U5;񼅆>7c'Eez{U]W7^z]~? xFQ~]1!\ɶ`ˊe=L7i|Ǣ, qڻO a-|+6ݣ |)t`_d-4'Mޡ"&;WGѫ[eۦ쪳w\M%""S[GgAhsڣ9% BJWf,Mq]]użD
+zQAϳ8?X7\Bww * mV`Ur6T؃w_7@;iW.ȇ(χw6-da
+<n F.o ?t5=wЈiR<B fwv]TַN#beʻ+KC{7(2T~0-)+[
+K˲c!waVa;t
+AG2B l_wE-Iͣkv\
+FϝO؀muc/ԄK^Rf
+_z 7Lgގ7'X~LKkL LiQt\h:~)tkLp$C~9OaZ^eZ\
+)uzܞC^ե+{Ϫ Jp&g Ž+\~!%'*YYQ˻m]Z]lef^.E?R@#CѫO
+t"tu{z骾g+5bDJ<D-M׸+Ԡ7oNէ`С
+J4BO>[E \ IⓁes9Xs5( #t_KyH|Q)p'晾8;L9#fde$5Cz[ՏQ w4usn>~a |4Cul A9f!;{]ǿ+޸Ȗ{;٨sIa 8cht$,q-U`5nBSI܋V8*!z|Ͷ*mބ&rK8ګ8n!O3LK<!8H>DՕ퇰%P|{m#vNWm",۳HC\f~+%Q/r:&ͨ!\|:Yw}!Zw Ak1 QG l.c힮i76&(>
+endstream
+endobj
+6084 0 obj
+<< /Type /Page /Contents 6085 0 R /Resources 6083 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 5828 0 R >>
+endobj
+6086 0 obj
+<< /D [ 6084 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+6087 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 754.884 null ] >>
+endobj
+6088 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 743.925 null ] >>
+endobj
+6089 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+6090 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+6091 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+6092 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+6093 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 629.355 null ] >>
+endobj
+6094 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 618.396 null ] >>
+endobj
+6095 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 607.437 null ] >>
+endobj
+6096 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 566.59 null ] >>
+endobj
+6097 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 555.631 null ] >>
+endobj
+6098 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 544.672 null ] >>
+endobj
+6099 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 533.713 null ] >>
+endobj
+6100 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 508.807 null ] >>
+endobj
+6101 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 497.848 null ] >>
+endobj
+6102 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 486.889 null ] >>
+endobj
+6103 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 475.93 null ] >>
+endobj
+6104 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 464.971 null ] >>
+endobj
+6105 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 454.012 null ] >>
+endobj
+6106 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 443.053 null ] >>
+endobj
+6107 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 432.094 null ] >>
+endobj
+6108 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 421.136 null ] >>
+endobj
+6109 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 410.177 null ] >>
+endobj
+6110 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 399.218 null ] >>
+endobj
+6111 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 388.259 null ] >>
+endobj
+6112 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 377.3 null ] >>
+endobj
+6113 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 366.341 null ] >>
+endobj
+6114 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 355.382 null ] >>
+endobj
+6115 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 344.423 null ] >>
+endobj
+6116 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 333.464 null ] >>
+endobj
+6117 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 322.505 null ] >>
+endobj
+6118 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 311.547 null ] >>
+endobj
+6119 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 300.588 null ] >>
+endobj
+6120 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 289.629 null ] >>
+endobj
+6121 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 278.67 null ] >>
+endobj
+6122 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 267.711 null ] >>
+endobj
+6123 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 256.752 null ] >>
+endobj
+6124 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 223.875 null ] >>
+endobj
+6125 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 212.916 null ] >>
+endobj
+6126 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 201.957 null ] >>
+endobj
+6127 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 190.999 null ] >>
+endobj
+6128 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 180.04 null ] >>
+endobj
+6129 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 169.081 null ] >>
+endobj
+6130 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 158.122 null ] >>
+endobj
+6131 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 147.163 null ] >>
+endobj
+6132 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 136.204 null ] >>
+endobj
+6133 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 105.32 null ] >>
+endobj
+6134 0 obj
+<< /D [ 6084 0 R /XYZ 81.077 94.361 null ] >>
+endobj
+6083 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F20 186 0 R /F19 184 0 R /F70 305 0 R /F68 189 0 R /F64 183 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+6137 0 obj
+<< /Filter /FlateDecode /Length 1824 >>
+stream
+xZMs6WhJm⛀L;M=t8 l(Rh;'KR Yj^".ݷozDG^W{+tF%"Ej3}6-wT:n\kxv\Fe UFY_/f*z?zۤTI5pSqkGgBZV=dn>4! TdRk=n-LI?$L3/%P{vf~JT};Hk}[F`dD)%"N
+BAx1s7Qrd0*\y8zЂ.˦mtӪNtV/QPYsOhP/)Dttd-$bj
+еpϊ0+ A3@eFWGY2Vk>dȈ] N'+QU^X"
+OXD->jZUUl(G+tI(M}E3he@
+endstream
+endobj
+6136 0 obj
+<< /Type /Page /Contents 6137 0 R /Resources 6135 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 5828 0 R >>
+endobj
+6138 0 obj
+<< /D [ 6136 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+6139 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 754.884 null ] >>
+endobj
+6140 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 743.925 null ] >>
+endobj
+6141 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 715.033 null ] >>
+endobj
+6142 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 704.075 null ] >>
+endobj
+6143 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 693.116 null ] >>
+endobj
+6144 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 682.157 null ] >>
+endobj
+6145 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 653.265 null ] >>
+endobj
+6146 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 642.306 null ] >>
+endobj
+6147 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 631.347 null ] >>
+endobj
+6148 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 620.388 null ] >>
+endobj
+6149 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 609.429 null ] >>
+endobj
+6150 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 598.471 null ] >>
+endobj
+6151 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 587.512 null ] >>
+endobj
+6152 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 576.553 null ] >>
+endobj
+6153 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 565.594 null ] >>
+endobj
+6154 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 554.635 null ] >>
+endobj
+6155 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 543.676 null ] >>
+endobj
+6156 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 532.717 null ] >>
+endobj
+6157 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 521.758 null ] >>
+endobj
+6158 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 492.867 null ] >>
+endobj
+6159 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 481.908 null ] >>
+endobj
+6160 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 470.949 null ] >>
+endobj
+6161 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 459.99 null ] >>
+endobj
+6162 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 449.031 null ] >>
+endobj
+6163 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 438.072 null ] >>
+endobj
+6164 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 409.18 null ] >>
+endobj
+6165 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 398.221 null ] >>
+endobj
+6166 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 387.263 null ] >>
+endobj
+6167 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 376.304 null ] >>
+endobj
+6168 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 365.345 null ] >>
+endobj
+6169 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 336.453 null ] >>
+endobj
+6170 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 325.494 null ] >>
+endobj
+6171 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 314.535 null ] >>
+endobj
+6172 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 303.576 null ] >>
+endobj
+6173 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 292.618 null ] >>
+endobj
+6174 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 281.659 null ] >>
+endobj
+6175 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 270.7 null ] >>
+endobj
+6176 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 259.741 null ] >>
+endobj
+6177 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 248.782 null ] >>
+endobj
+6178 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 237.823 null ] >>
+endobj
+6179 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 226.864 null ] >>
+endobj
+6180 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 197.972 null ] >>
+endobj
+6181 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 187.014 null ] >>
+endobj
+6182 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 176.055 null ] >>
+endobj
+6183 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 165.096 null ] >>
+endobj
+6184 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 154.137 null ] >>
+endobj
+6185 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 143.178 null ] >>
+endobj
+6186 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 132.219 null ] >>
+endobj
+6187 0 obj
+<< /D [ 6136 0 R /XYZ 81.077 121.26 null ] >>
+endobj
+6135 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F70 305 0 R /F68 189 0 R /F64 183 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+6190 0 obj
+<< /Filter /FlateDecode /Length 3023 >>
+stream
+xڭZݏ6_A*ES)rb˻Bdɕl7CRzeMQpș͈^-7X͵۽bްޤ7&dܮqvOeu0LɊvFto|Z)d=Eeq$
+ -'FJ;+!ijb*H(Q*ȵ&hJD 㩕O4
+{ǝ[do#BzDEvqu532OOѪ;_߮(K:)^</죳 n=a *paouW׭NBV*­`Ntwhgs y)S, %,g >]QZ)zq4"d 4}a wD?06"dM̗Z
+.ڭAe2%PL>A ͊w}P(y7+Œ˞gc}c؆7*gCa ,w
+~6*b
+ V9=d_[ YѶf'rjBɶ>c[LLJB B_:KXÊ
+y@GY
+7ꥄ+p6rp=Nx-\h1B˞hK<-W0;Z?$<-זp!b" J.m<*}YJ(Úړx=ȴyN aHL
+H (?Ƙ@4>+BZwEm
+
+endstream
+endobj
+6189 0 obj
+<< /Type /Page /Contents 6190 0 R /Resources 6188 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 5828 0 R >>
+endobj
+6191 0 obj
+<< /D [ 6189 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+6192 0 obj
+<< /D [ 6189 0 R /XYZ 81.077 755.409 null ] >>
+endobj
+6193 0 obj
+<< /D [ 6189 0 R /XYZ 81.077 744.45 null ] >>
+endobj
+6194 0 obj
+<< /D [ 6189 0 R /XYZ 81.077 733.491 null ] >>
+endobj
+6195 0 obj
+<< /D [ 6189 0 R /XYZ 81.077 722.532 null ] >>
+endobj
+6196 0 obj
+<< /D [ 6189 0 R /XYZ 81.077 711.573 null ] >>
+endobj
+6197 0 obj
+<< /D [ 6189 0 R /XYZ 81.077 700.614 null ] >>
+endobj
+6198 0 obj
+<< /D [ 6189 0 R /XYZ 81.077 689.655 null ] >>
+endobj
+6199 0 obj
+<< /D [ 6189 0 R /XYZ 81.077 678.696 null ] >>
+endobj
+6200 0 obj
+<< /D [ 6189 0 R /XYZ 81.077 667.737 null ] >>
+endobj
+6201 0 obj
+<< /D [ 6189 0 R /XYZ 81.077 656.778 null ] >>
+endobj
+6202 0 obj
+<< /D [ 6189 0 R /XYZ 81.077 645.82 null ] >>
+endobj
+6203 0 obj
+<< /D [ 6189 0 R /XYZ 81.077 634.861 null ] >>
+endobj
+6204 0 obj
+<< /D [ 6189 0 R /XYZ 81.077 623.902 null ] >>
+endobj
+6205 0 obj
+<< /D [ 6189 0 R /XYZ 81.077 612.943 null ] >>
+endobj
+6206 0 obj
+<< /D [ 6189 0 R /XYZ 81.077 601.984 null ] >>
+endobj
+6207 0 obj
+<< /D [ 6189 0 R /XYZ 81.077 591.025 null ] >>
+endobj
+6208 0 obj
+<< /D [ 6189 0 R /XYZ 81.077 580.066 null ] >>
+endobj
+6209 0 obj
+<< /D [ 6189 0 R /XYZ 81.077 569.107 null ] >>
+endobj
+6210 0 obj
+<< /D [ 6189 0 R /XYZ 81.077 558.148 null ] >>
+endobj
+6211 0 obj
+<< /D [ 6189 0 R /XYZ 81.077 547.189 null ] >>
+endobj
+89 0 obj
+<< /D [ 6189 0 R /XYZ 79.37 526.35 null ] >>
+endobj
+6212 0 obj
+<< /D [ 6189 0 R /XYZ 81.077 223.986 null ] >>
+endobj
+6213 0 obj
+<< /D [ 6189 0 R /XYZ 81.077 213.027 null ] >>
+endobj
+6214 0 obj
+<< /D [ 6189 0 R /XYZ 81.077 173.229 null ] >>
+endobj
+6215 0 obj
+<< /D [ 6189 0 R /XYZ 81.077 133.431 null ] >>
+endobj
+6216 0 obj
+<< /D [ 6189 0 R /XYZ 81.077 122.473 null ] >>
+endobj
+6217 0 obj
+<< /D [ 6189 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+6218 0 obj
+<< /D [ 6189 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+6219 0 obj
+<< /D [ 6189 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+6220 0 obj
+<< /D [ 6189 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+6188 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F20 186 0 R /F19 184 0 R /F68 189 0 R /F64 183 0 R /F67 187 0 R /F77 542 0 R /F78 654 0 R /F70 305 0 R /F30 644 0 R /F65 185 0 R /F27 642 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+6223 0 obj
+<< /Filter /FlateDecode /Length 2226 >>
+stream
+xZMϯ0H> 2 ЇEdVZؒG3iOQ(R $ŪWUTv?|DB#-,2X$AXa姪c~WڋuѹnuGe[g4Ug~XOK)cq ˳]֗
+pbP ',pNzqPtSYKI #a 
+44Cѱۮ_>NIuu>,xݜjXեǥo5
+q8Ɩ'3v\4Ai7ܩXGWY 5SƬ}>V{m) D(i;uv`@mrݗc}u̍R}BC#$N
+\Z p#"<:u6vT00a[cH`x[+i:O6PzBDg~=4Ԉ/7 iAfRlYlaǸ;xr-H Fow\Ѯ!TYYV(&λfljuc56 VGx1n6śҸ772C kL?۪N:Q}6<M}egR"P$)O_!FtОщn,+BL=~3 jp
+CޒۙWPLBa*M?V0 ^QTjrD uqhyJW@:c E.kj]^>LtRS_=GM*s@(]m[uvd]ߞLѫ게A<X_4ilN`-u3 tϭÔ|Fl`3PJVtLe6Ӿ{8H@U"3n4+2E
+zUN{R3A!^,A87u6{%c/׷shgM1w\Fv\mBեq>pm>8? {]qס0o g&ԞA CWvCkmн'1wͳe;; dtݫXfJQknD/ږphNM@ Tpf2f`=WG߁k2'@l惩͈]xQoz;h#cSk7zxSޝw={So̍\AiPAE!t4.cvcۖOU[nC]
+pL}"*RˮU۪I4 ,YE+I+ 'US,HVR)HwzHR#6#׌&Uz~UAZIfɌ%h:"B
+-$R#=j";q |qi-Et+ ӱfI/B3OJ!͓_~ |:.{N#tR{=ۥ.
+endstream
+endobj
+6222 0 obj
+<< /Type /Page /Contents 6223 0 R /Resources 6221 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 5828 0 R >>
+endobj
+6224 0 obj
+<< /D [ 6222 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+6225 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 755.582 null ] >>
+endobj
+6226 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 744.624 null ] >>
+endobj
+6227 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 733.665 null ] >>
+endobj
+6228 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 722.706 null ] >>
+endobj
+6229 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 683.256 null ] >>
+endobj
+6230 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 672.297 null ] >>
+endobj
+6231 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 657.754 null ] >>
+endobj
+6232 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 646.795 null ] >>
+endobj
+6233 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 608.844 null ] >>
+endobj
+6234 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 597.886 null ] >>
+endobj
+6235 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 586.927 null ] >>
+endobj
+6236 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 575.968 null ] >>
+endobj
+6237 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 548.473 null ] >>
+endobj
+6238 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 537.514 null ] >>
+endobj
+6239 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 526.555 null ] >>
+endobj
+6240 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 515.596 null ] >>
+endobj
+6241 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 504.637 null ] >>
+endobj
+6242 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 493.678 null ] >>
+endobj
+6243 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 482.72 null ] >>
+endobj
+6244 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 407.404 null ] >>
+endobj
+6245 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 396.445 null ] >>
+endobj
+6246 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 385.486 null ] >>
+endobj
+6247 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 374.527 null ] >>
+endobj
+6248 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 363.568 null ] >>
+endobj
+6249 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 352.61 null ] >>
+endobj
+6250 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 341.651 null ] >>
+endobj
+6251 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 330.692 null ] >>
+endobj
+6252 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 319.733 null ] >>
+endobj
+6253 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 308.774 null ] >>
+endobj
+6254 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 297.815 null ] >>
+endobj
+6255 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 286.856 null ] >>
+endobj
+6256 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 275.897 null ] >>
+endobj
+6257 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 264.938 null ] >>
+endobj
+6258 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 253.979 null ] >>
+endobj
+6259 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 243.021 null ] >>
+endobj
+6260 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 232.062 null ] >>
+endobj
+6261 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 221.103 null ] >>
+endobj
+6262 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 210.144 null ] >>
+endobj
+6263 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 199.185 null ] >>
+endobj
+6264 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 188.226 null ] >>
+endobj
+6265 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 177.267 null ] >>
+endobj
+6266 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 166.308 null ] >>
+endobj
+6267 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 155.349 null ] >>
+endobj
+6268 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 144.39 null ] >>
+endobj
+6269 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 133.431 null ] >>
+endobj
+6270 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 122.473 null ] >>
+endobj
+6271 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+6272 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+6273 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+6274 0 obj
+<< /D [ 6222 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+6221 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F70 305 0 R /F68 189 0 R /F64 183 0 R /F20 186 0 R /F65 185 0 R /F69 304 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+6277 0 obj
+<< /Filter /FlateDecode /Length 2245 >>
+stream
+xڵZKo80pħD4̤Ȓ[' O!t;3D#tzX%%/\I$l
+RhJFainn)MFkOG{tCuۇco$&CIS|Ɣ{5mר/R8%ELpd ZQ;EbHf $0(R1hlpv0[e0YM,D
+387nn%<D_4[D"¹,ևp$!/Ts^um2$y
+2焲[koEVSP4/`1,NoJ7s“S_5qЫ[#}h3!SI5Z&&Gi;9Xʈh$,aDCzC>j-UɺiO[L"N/NëHomq[?0,'vzAaGGs#CPzʏ];vT _riSUr(E%zn WFgMR+F bqh'ȇNϢ3P}?u_ԽMS -a)jpUgリ i_흃5x
+qoq{G;Ѷɵz,wJE$Z%֒A1@o TՀ!fÅX#nƓ2* \ sTɕsKą U3!ǢSf>Z# [w{u6a
+9+sa/3@̅y- .&C-6e E˦Yg޴6`70O8e| ŦVg/Ϲ-(7bR)b' @ ]٤ >:ގ8ARNE>:ޓ%#qKrܩ ޸X&_PD`=nSǢg+$Z4C-.۝XLM8}}VE
+'|=NF+n*m0ZUBmHA|<_OE犷;0>뮒曞flFlǣ`v-e@BB]6"8DFR]8:ba̎H)"YS(&P)Tрnc)Z& ȇ&Q_^_Ó7SfENX}?(,$qG2&'3M3^1 (4g(,\y)/ưLAͭ塰'5?5^r1etRM߭CzG%'Jy{WY[iq_9;1rA7#Z㙓>)O]. =t4%Q2h!E
+endstream
+endobj
+6276 0 obj
+<< /Type /Page /Contents 6277 0 R /Resources 6275 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 6322 0 R >>
+endobj
+6278 0 obj
+<< /D [ 6276 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+6279 0 obj
+<< /D [ 6276 0 R /XYZ 81.077 754.884 null ] >>
+endobj
+6280 0 obj
+<< /D [ 6276 0 R /XYZ 81.077 743.925 null ] >>
+endobj
+6281 0 obj
+<< /D [ 6276 0 R /XYZ 81.077 691.123 null ] >>
+endobj
+6282 0 obj
+<< /D [ 6276 0 R /XYZ 81.077 680.164 null ] >>
+endobj
+6283 0 obj
+<< /D [ 6276 0 R /XYZ 81.077 669.205 null ] >>
+endobj
+6284 0 obj
+<< /D [ 6276 0 R /XYZ 81.077 658.246 null ] >>
+endobj
+6285 0 obj
+<< /D [ 6276 0 R /XYZ 81.077 617.4 null ] >>
+endobj
+6286 0 obj
+<< /D [ 6276 0 R /XYZ 81.077 606.441 null ] >>
+endobj
+6287 0 obj
+<< /D [ 6276 0 R /XYZ 81.077 595.482 null ] >>
+endobj
+6288 0 obj
+<< /D [ 6276 0 R /XYZ 81.077 584.523 null ] >>
+endobj
+6289 0 obj
+<< /D [ 6276 0 R /XYZ 81.077 573.564 null ] >>
+endobj
+6290 0 obj
+<< /D [ 6276 0 R /XYZ 81.077 562.605 null ] >>
+endobj
+6291 0 obj
+<< /D [ 6276 0 R /XYZ 81.077 551.646 null ] >>
+endobj
+6292 0 obj
+<< /D [ 6276 0 R /XYZ 81.077 540.687 null ] >>
+endobj
+6293 0 obj
+<< /D [ 6276 0 R /XYZ 81.077 529.728 null ] >>
+endobj
+6294 0 obj
+<< /D [ 6276 0 R /XYZ 81.077 518.769 null ] >>
+endobj
+6295 0 obj
+<< /D [ 6276 0 R /XYZ 81.077 507.811 null ] >>
+endobj
+6296 0 obj
+<< /D [ 6276 0 R /XYZ 81.077 496.852 null ] >>
+endobj
+6297 0 obj
+<< /D [ 6276 0 R /XYZ 81.077 485.893 null ] >>
+endobj
+6298 0 obj
+<< /D [ 6276 0 R /XYZ 81.077 474.934 null ] >>
+endobj
+6299 0 obj
+<< /D [ 6276 0 R /XYZ 81.077 463.975 null ] >>
+endobj
+6300 0 obj
+<< /D [ 6276 0 R /XYZ 81.077 453.016 null ] >>
+endobj
+6301 0 obj
+<< /D [ 6276 0 R /XYZ 81.077 442.057 null ] >>
+endobj
+6302 0 obj
+<< /D [ 6276 0 R /XYZ 81.077 431.098 null ] >>
+endobj
+6303 0 obj
+<< /D [ 6276 0 R /XYZ 81.077 420.139 null ] >>
+endobj
+6304 0 obj
+<< /D [ 6276 0 R /XYZ 81.077 409.18 null ] >>
+endobj
+6305 0 obj
+<< /D [ 6276 0 R /XYZ 81.077 356.378 null ] >>
+endobj
+6306 0 obj
+<< /D [ 6276 0 R /XYZ 81.077 345.42 null ] >>
+endobj
+6307 0 obj
+<< /D [ 6276 0 R /XYZ 81.077 334.461 null ] >>
+endobj
+6308 0 obj
+<< /D [ 6276 0 R /XYZ 81.077 323.502 null ] >>
+endobj
+6309 0 obj
+<< /D [ 6276 0 R /XYZ 81.077 312.543 null ] >>
+endobj
+6310 0 obj
+<< /D [ 6276 0 R /XYZ 81.077 301.584 null ] >>
+endobj
+6311 0 obj
+<< /D [ 6276 0 R /XYZ 81.077 248.782 null ] >>
+endobj
+6312 0 obj
+<< /D [ 6276 0 R /XYZ 81.077 237.823 null ] >>
+endobj
+6313 0 obj
+<< /D [ 6276 0 R /XYZ 81.077 226.864 null ] >>
+endobj
+6314 0 obj
+<< /D [ 6276 0 R /XYZ 81.077 215.905 null ] >>
+endobj
+6315 0 obj
+<< /D [ 6276 0 R /XYZ 81.077 175.058 null ] >>
+endobj
+6316 0 obj
+<< /D [ 6276 0 R /XYZ 81.077 164.099 null ] >>
+endobj
+6317 0 obj
+<< /D [ 6276 0 R /XYZ 81.077 153.141 null ] >>
+endobj
+6318 0 obj
+<< /D [ 6276 0 R /XYZ 81.077 142.182 null ] >>
+endobj
+6319 0 obj
+<< /D [ 6276 0 R /XYZ 81.077 131.223 null ] >>
+endobj
+6320 0 obj
+<< /D [ 6276 0 R /XYZ 81.077 90.376 null ] >>
+endobj
+6321 0 obj
+<< /D [ 6276 0 R /XYZ 81.077 79.417 null ] >>
+endobj
+6275 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R /F30 644 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+6325 0 obj
+<< /Filter /FlateDecode /Length 1348 >>
+stream
+xYnF+"VO
+MC0>9:#]kDɡaAp~z#4XM5Bf|4`(\rFz&(&B Q¼B=y&+a-cqUcOsD0B5y<UrD{N5~79UFtϩF'BXOF6jƧ:bT2
+%9%;,aQ<ߺpk,mp8CZSyl}]_^W||fFCSOƢ=Bmkơh(BQ%7ٺdniQ VYltYUy~ :M\S=޳my>,Kę$'`#49Pٞ-GS~-}bzٞ@mN )OV)B>1C[Pߺ>1\<_[GWӧS[δW!o[o-ܗ
+NO
+endstream
+endobj
+6324 0 obj
+<< /Type /Page /Contents 6325 0 R /Resources 6323 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 6322 0 R >>
+endobj
+6326 0 obj
+<< /D [ 6324 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+6327 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+6328 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+6329 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+6330 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 716.03 null ] >>
+endobj
+6331 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 705.071 null ] >>
+endobj
+6332 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 694.112 null ] >>
+endobj
+6333 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 683.153 null ] >>
+endobj
+6334 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 672.194 null ] >>
+endobj
+6335 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 661.235 null ] >>
+endobj
+6336 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 618.396 null ] >>
+endobj
+6337 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 607.437 null ] >>
+endobj
+6338 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 596.478 null ] >>
+endobj
+6339 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 585.519 null ] >>
+endobj
+6340 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 574.56 null ] >>
+endobj
+6341 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 563.601 null ] >>
+endobj
+6342 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 552.642 null ] >>
+endobj
+6343 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 541.684 null ] >>
+endobj
+6344 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 530.725 null ] >>
+endobj
+6345 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 489.878 null ] >>
+endobj
+6346 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 478.919 null ] >>
+endobj
+6347 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 467.96 null ] >>
+endobj
+6348 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 457.001 null ] >>
+endobj
+6349 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 446.042 null ] >>
+endobj
+6350 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 435.083 null ] >>
+endobj
+6351 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 424.124 null ] >>
+endobj
+6352 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 413.165 null ] >>
+endobj
+6353 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 402.207 null ] >>
+endobj
+6354 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 361.36 null ] >>
+endobj
+6355 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 350.401 null ] >>
+endobj
+6356 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 339.442 null ] >>
+endobj
+6357 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 328.483 null ] >>
+endobj
+6358 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 317.524 null ] >>
+endobj
+6359 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 306.565 null ] >>
+endobj
+6360 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 295.606 null ] >>
+endobj
+6361 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 284.647 null ] >>
+endobj
+6362 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 273.688 null ] >>
+endobj
+6363 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 232.842 null ] >>
+endobj
+6364 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 221.883 null ] >>
+endobj
+6365 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 210.924 null ] >>
+endobj
+6366 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 199.965 null ] >>
+endobj
+6367 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 189.006 null ] >>
+endobj
+6368 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 178.047 null ] >>
+endobj
+6369 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 167.088 null ] >>
+endobj
+6370 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 156.129 null ] >>
+endobj
+6371 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 145.17 null ] >>
+endobj
+6372 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 104.324 null ] >>
+endobj
+6373 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 93.365 null ] >>
+endobj
+6374 0 obj
+<< /D [ 6324 0 R /XYZ 81.077 82.406 null ] >>
+endobj
+6323 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+6377 0 obj
+<< /Filter /FlateDecode /Length 2141 >>
+stream
+xڭZ[o~ϯp/sx`h
+t`
+%$g`d~{-J}QDg9>;WCO&xnHO>|j‘VLDDH%/'_Bhz\
+;"s6c΋K8Q*:2smy
+5!:aG}# gG`%e"B_CLGʹDvCh ]{̤s4 ΍㲌7~<SJ)`t 
+<2ٝuUzmyJ<͟q`3b`#y,JF+HSY~fu`\!Pnqi+܈d?l}: [bV@j]4Q "34)v؝eTw2+byyՐo:Z
+d"w'Tժ(sS\5KRzn=Ƕ2aU 4쀡.P;-Z w
+yTe( <T IY>Wxo]uk`O/'Hu k"$;|]uͣ,667c*tGǴݱa4
+yȊ-49i@47oK >5$:ۃb'H]ͥ1aG;K`DiD A=4z6w8
+Fmcڗ_Rյ,C8f("ۑMYeȌ?|GՕd;=#" 9ӑҟ*j/ TU[[M >#8"q,MJ]4IP`pRj lG {כaUXv/S+gȉ?7K‡[I{F5ֈԶPbUE>lB.A [X#A7]3Cl6،iJm3V ɡZ6z7~ \gn̋zpDF9ۆywڻw?6Og /9Z‡af#cIaNI7mͽ=mv͟~ݾ~K>% 4_B;ijW#}dBZHzT)?Dm>ʫb?AGGtjlUsd $\$tyfq-cRPoxEP&׈.
+endstream
+endobj
+6376 0 obj
+<< /Type /Page /Contents 6377 0 R /Resources 6375 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 6322 0 R >>
+endobj
+6378 0 obj
+<< /D [ 6376 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+6379 0 obj
+<< /D [ 6376 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+6380 0 obj
+<< /D [ 6376 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+6381 0 obj
+<< /D [ 6376 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+6382 0 obj
+<< /D [ 6376 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+6383 0 obj
+<< /D [ 6376 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+6384 0 obj
+<< /D [ 6376 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+6385 0 obj
+<< /D [ 6376 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+6386 0 obj
+<< /D [ 6376 0 R /XYZ 81.077 662.231 null ] >>
+endobj
+6387 0 obj
+<< /D [ 6376 0 R /XYZ 81.077 651.273 null ] >>
+endobj
+6388 0 obj
+<< /D [ 6376 0 R /XYZ 81.077 610.426 null ] >>
+endobj
+6389 0 obj
+<< /D [ 6376 0 R /XYZ 81.077 599.467 null ] >>
+endobj
+6390 0 obj
+<< /D [ 6376 0 R /XYZ 81.077 588.508 null ] >>
+endobj
+6391 0 obj
+<< /D [ 6376 0 R /XYZ 81.077 577.549 null ] >>
+endobj
+6392 0 obj
+<< /D [ 6376 0 R /XYZ 81.077 566.59 null ] >>
+endobj
+6393 0 obj
+<< /D [ 6376 0 R /XYZ 81.077 535.706 null ] >>
+endobj
+6394 0 obj
+<< /D [ 6376 0 R /XYZ 81.077 524.747 null ] >>
+endobj
+6395 0 obj
+<< /D [ 6376 0 R /XYZ 81.077 513.788 null ] >>
+endobj
+6396 0 obj
+<< /D [ 6376 0 R /XYZ 81.077 502.829 null ] >>
+endobj
+6397 0 obj
+<< /D [ 6376 0 R /XYZ 81.077 491.87 null ] >>
+endobj
+6398 0 obj
+<< /D [ 6376 0 R /XYZ 81.077 480.911 null ] >>
+endobj
+6399 0 obj
+<< /D [ 6376 0 R /XYZ 81.077 469.953 null ] >>
+endobj
+6400 0 obj
+<< /D [ 6376 0 R /XYZ 81.077 458.994 null ] >>
+endobj
+6401 0 obj
+<< /D [ 6376 0 R /XYZ 81.077 448.035 null ] >>
+endobj
+6402 0 obj
+<< /D [ 6376 0 R /XYZ 81.077 437.076 null ] >>
+endobj
+6403 0 obj
+<< /D [ 6376 0 R /XYZ 81.077 426.117 null ] >>
+endobj
+6404 0 obj
+<< /D [ 6376 0 R /XYZ 81.077 415.158 null ] >>
+endobj
+6405 0 obj
+<< /D [ 6376 0 R /XYZ 81.077 404.199 null ] >>
+endobj
+6406 0 obj
+<< /D [ 6376 0 R /XYZ 81.077 337.449 null ] >>
+endobj
+6407 0 obj
+<< /D [ 6376 0 R /XYZ 81.077 326.49 null ] >>
+endobj
+6408 0 obj
+<< /D [ 6376 0 R /XYZ 81.077 315.532 null ] >>
+endobj
+6409 0 obj
+<< /D [ 6376 0 R /XYZ 81.077 304.573 null ] >>
+endobj
+6410 0 obj
+<< /D [ 6376 0 R /XYZ 81.077 293.614 null ] >>
+endobj
+6411 0 obj
+<< /D [ 6376 0 R /XYZ 81.077 282.655 null ] >>
+endobj
+6412 0 obj
+<< /D [ 6376 0 R /XYZ 81.077 251.771 null ] >>
+endobj
+6413 0 obj
+<< /D [ 6376 0 R /XYZ 81.077 240.812 null ] >>
+endobj
+6414 0 obj
+<< /D [ 6376 0 R /XYZ 81.077 229.853 null ] >>
+endobj
+6415 0 obj
+<< /D [ 6376 0 R /XYZ 81.077 218.894 null ] >>
+endobj
+6416 0 obj
+<< /D [ 6376 0 R /XYZ 81.077 207.935 null ] >>
+endobj
+6417 0 obj
+<< /D [ 6376 0 R /XYZ 81.077 196.976 null ] >>
+endobj
+6418 0 obj
+<< /D [ 6376 0 R /XYZ 81.077 186.017 null ] >>
+endobj
+6419 0 obj
+<< /D [ 6376 0 R /XYZ 81.077 175.058 null ] >>
+endobj
+6420 0 obj
+<< /D [ 6376 0 R /XYZ 81.077 164.099 null ] >>
+endobj
+6375 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F65 185 0 R /F70 305 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+6423 0 obj
+<< /Filter /FlateDecode /Length 2462 >>
+stream
+xڵZ[o~_a`&\)h1e[.P&QG<l.b˦}H,Qȏs ~|O/bK*xA*FL-$K-|OV; H| 3$!"ᚬnˬ6b<i[yYٲz]GǩQJPLYr X|خnlA`KbEղו$Ui?t(N%eBvm7kxHNY>\I8~ 1Ąx
+=E(hC%Y/}R7Iwvo\0._ZT:z,H*f￷?O cRI2HiZzfV( UB1ȷYќ9qU6|TV'UR|qGBCUi`/4BqkVy9bz200 nxlm tHJ9X 8me2:,](Bj<w8 #{fG_֛t[*J!0.+|=7Ε:mwy~^0U)_k1 N%їZ,5*bf/REe]c.hEb>lJImKwI:LW`1wry>z~Rj[5-w\7:f>i{S3^MI_Aa>;TOx%S烤(F b^S~j'm`"ˤOf/M4\.$F[ 8(]-v{j ɩfP$Ecov5}r"~‰Їn9]zW[whžC/Wxg|hCf P96P#L@B_Ca|*eVdpx*z{r/cs2A("+<hm&iP`" 2"!פh Hٯ!yɅDRDPgc9@s9ET %\=ݺEv &Jgx\sf.5o-vC [mq#z0٥qDo,zS~:X8<C"A =о<I̚Jp4ZޑB\xh7L 7団nZC
+giPcWd;Y~~yFeHh!wnozӗ0RUMwj_tlш"G.bm`!aW)=tX<l ECL?X ng`a3S|m킄/םGӯZol#Is]Ao/afGA/~p"$z7߉贤/%LNpmnEɷ}_a
+endstream
+endobj
+6422 0 obj
+<< /Type /Page /Contents 6423 0 R /Resources 6421 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 6322 0 R >>
+endobj
+6424 0 obj
+<< /D [ 6422 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+6425 0 obj
+<< /D [ 6422 0 R /XYZ 81.077 742.929 null ] >>
+endobj
+6426 0 obj
+<< /D [ 6422 0 R /XYZ 81.077 731.97 null ] >>
+endobj
+6427 0 obj
+<< /D [ 6422 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+6428 0 obj
+<< /D [ 6422 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+6429 0 obj
+<< /D [ 6422 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+6430 0 obj
+<< /D [ 6422 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+6431 0 obj
+<< /D [ 6422 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+6432 0 obj
+<< /D [ 6422 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+6433 0 obj
+<< /D [ 6422 0 R /XYZ 81.077 607.437 null ] >>
+endobj
+6434 0 obj
+<< /D [ 6422 0 R /XYZ 81.077 596.478 null ] >>
+endobj
+6435 0 obj
+<< /D [ 6422 0 R /XYZ 81.077 585.519 null ] >>
+endobj
+6436 0 obj
+<< /D [ 6422 0 R /XYZ 81.077 574.56 null ] >>
+endobj
+6437 0 obj
+<< /D [ 6422 0 R /XYZ 81.077 533.713 null ] >>
+endobj
+6438 0 obj
+<< /D [ 6422 0 R /XYZ 81.077 522.754 null ] >>
+endobj
+6439 0 obj
+<< /D [ 6422 0 R /XYZ 81.077 511.796 null ] >>
+endobj
+6440 0 obj
+<< /D [ 6422 0 R /XYZ 81.077 500.837 null ] >>
+endobj
+6441 0 obj
+<< /D [ 6422 0 R /XYZ 81.077 489.878 null ] >>
+endobj
+6442 0 obj
+<< /D [ 6422 0 R /XYZ 81.077 478.919 null ] >>
+endobj
+6443 0 obj
+<< /D [ 6422 0 R /XYZ 81.077 450.027 null ] >>
+endobj
+6444 0 obj
+<< /D [ 6422 0 R /XYZ 81.077 439.068 null ] >>
+endobj
+6445 0 obj
+<< /D [ 6422 0 R /XYZ 81.077 428.109 null ] >>
+endobj
+6446 0 obj
+<< /D [ 6422 0 R /XYZ 81.077 417.151 null ] >>
+endobj
+6447 0 obj
+<< /D [ 6422 0 R /XYZ 81.077 406.192 null ] >>
+endobj
+6448 0 obj
+<< /D [ 6422 0 R /XYZ 81.077 395.233 null ] >>
+endobj
+6449 0 obj
+<< /D [ 6422 0 R /XYZ 81.077 354.386 null ] >>
+endobj
+6450 0 obj
+<< /D [ 6422 0 R /XYZ 81.077 343.427 null ] >>
+endobj
+6451 0 obj
+<< /D [ 6422 0 R /XYZ 81.077 332.468 null ] >>
+endobj
+6452 0 obj
+<< /D [ 6422 0 R /XYZ 81.077 321.509 null ] >>
+endobj
+6453 0 obj
+<< /D [ 6422 0 R /XYZ 81.077 310.55 null ] >>
+endobj
+6454 0 obj
+<< /D [ 6422 0 R /XYZ 81.077 299.591 null ] >>
+endobj
+6455 0 obj
+<< /D [ 6422 0 R /XYZ 81.077 288.632 null ] >>
+endobj
+6456 0 obj
+<< /D [ 6422 0 R /XYZ 81.077 259.741 null ] >>
+endobj
+6457 0 obj
+<< /D [ 6422 0 R /XYZ 81.077 230.849 null ] >>
+endobj
+6458 0 obj
+<< /D [ 6422 0 R /XYZ 81.077 219.89 null ] >>
+endobj
+6459 0 obj
+<< /D [ 6422 0 R /XYZ 81.077 208.931 null ] >>
+endobj
+6460 0 obj
+<< /D [ 6422 0 R /XYZ 81.077 197.972 null ] >>
+endobj
+6461 0 obj
+<< /D [ 6422 0 R /XYZ 81.077 187.014 null ] >>
+endobj
+6462 0 obj
+<< /D [ 6422 0 R /XYZ 81.077 158.122 null ] >>
+endobj
+6463 0 obj
+<< /D [ 6422 0 R /XYZ 81.077 147.163 null ] >>
+endobj
+6464 0 obj
+<< /D [ 6422 0 R /XYZ 81.077 136.204 null ] >>
+endobj
+6465 0 obj
+<< /D [ 6422 0 R /XYZ 81.077 107.312 null ] >>
+endobj
+6466 0 obj
+<< /D [ 6422 0 R /XYZ 81.077 96.354 null ] >>
+endobj
+6467 0 obj
+<< /D [ 6422 0 R /XYZ 81.077 85.395 null ] >>
+endobj
+6421 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F20 186 0 R /F19 184 0 R /F69 304 0 R /F68 189 0 R /F64 183 0 R /F27 642 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+6470 0 obj
+<< /Filter /FlateDecode /Length 2028 >>
+stream
+xڭZr6+TF"*LgjwIJEKT;k}.
+6耠U:u8|U]i y}MSOdžB7/yhUI05'Q#@kEHQ_&G5NtBRbT _jsQϬguspJ&|+t>MNY(<VFK4Ɉ>+1"`НA
+rϊMI y#| .I<aqӹ_jF"&ȴ0C@@4~ 9vʋ%$MG*YRcVtrzn[`};ĺ̷@X`ޮe 9nE
+PaNeSXׄ CeE@չ_(H .<<g r^n62%Q,(#`zUاݡ(r
+Gm4岄~ARJQ4BgS?kH'}!=_oo ɃSP_^:o\
+xf'At
+ia7AcZp0%މᘦ@0fBS FO&Ps)s|`ph޸Psuc7'U,ܿЛUx(j x\K(7`DUF
+$> wV岘q`92\FmUfڢO8u;@h=R:si.VA[A2ɧ)Mdui=T7IR"O1&IϠ#5#c)QHq[vݑg^<=Pwzns/70p
+MqؓPxBkvV5T_uea xROBu~5)s /oR|ºM[ID '{44Sv98 %䓓{}q/d?7d0T+5O
+endstream
+endobj
+6469 0 obj
+<< /Type /Page /Contents 6470 0 R /Resources 6468 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 6322 0 R >>
+endobj
+6471 0 obj
+<< /D [ 6469 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+6472 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+6473 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+6474 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+6475 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+6476 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+6477 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+6478 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+6479 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+6480 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+6481 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+6482 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+6483 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+6484 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+6485 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 626.366 null ] >>
+endobj
+6486 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 615.407 null ] >>
+endobj
+6487 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 604.448 null ] >>
+endobj
+6488 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 593.489 null ] >>
+endobj
+6489 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 582.53 null ] >>
+endobj
+6490 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 571.571 null ] >>
+endobj
+6491 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 560.613 null ] >>
+endobj
+6492 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 549.654 null ] >>
+endobj
+6493 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 502.856 null ] >>
+endobj
+6494 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 491.897 null ] >>
+endobj
+6495 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 480.938 null ] >>
+endobj
+6496 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 469.98 null ] >>
+endobj
+6497 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 459.021 null ] >>
+endobj
+6498 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 448.062 null ] >>
+endobj
+6499 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 383.345 null ] >>
+endobj
+6500 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 372.386 null ] >>
+endobj
+6501 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 329.594 null ] >>
+endobj
+6502 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 318.635 null ] >>
+endobj
+6503 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 307.676 null ] >>
+endobj
+6504 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 296.717 null ] >>
+endobj
+6505 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 285.759 null ] >>
+endobj
+6506 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 252.936 null ] >>
+endobj
+6507 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 241.977 null ] >>
+endobj
+6508 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 231.018 null ] >>
+endobj
+6509 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 220.059 null ] >>
+endobj
+6510 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 209.1 null ] >>
+endobj
+6511 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 198.141 null ] >>
+endobj
+6512 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 187.182 null ] >>
+endobj
+6513 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 176.224 null ] >>
+endobj
+6514 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 165.265 null ] >>
+endobj
+6515 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 154.306 null ] >>
+endobj
+6516 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+6517 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+6518 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+6519 0 obj
+<< /D [ 6469 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+6468 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+6522 0 obj
+<< /Filter /FlateDecode /Length 2219 >>
+stream
+xڽZ[o6~ϯ0۰2bN
+2ln0ɚ~yUV/k(޽˜0bH'/u a;Gm_ƭ}Ll|]k@v}whƤ+ΛqIw$@Z4)iɸ]?:ͮ4ylVdqS=\~,6x~YX
+8V0Et!PP+#tbO`4y?σL!v! 9tN5$sʂJ@Xz ͫS Ϡ!rD?Br,D^N0BE X%>䈍NSp=w'[diHڪ#5 JA}Xu$iB}eCk eWۡ{IM]ßmrthFx9Ė!% !)|½{~jk?|5{6aMwܸ넔ۢWY}=NuliCx0X`Z2,s V V!o|RlT=9F'c`NOoY!
+F©lӻv`lsjwUZÞ8ݙTp27K=h]&j)wWIx“8ivH3ij T*Dh`Ph
+w_H]8B63[ᜬ&hsZ<N|Ci( A1V[GPFEJp/tR'Qj,7Es?K*#t{)L(!)}NL(l2mЯ[4aXUza ^ߵs 3?!±|eb!~{[I]W2m7ɾNBx<<#+nNDx<"#t%%䟄/6>/UR
+WW4ch?m%knz}9\Mu mbYy`gߔOl`W
+q}i8C8;ܜŔ̦c!Pix=L=|;ڦg!7Qi[<SG͜)g~>7swjk? @T.:*-#k{ӂ>0"c)E6q?
+endstream
+endobj
+6521 0 obj
+<< /Type /Page /Contents 6522 0 R /Resources 6520 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 6322 0 R >>
+endobj
+6523 0 obj
+<< /D [ 6521 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+6524 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+6525 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+6526 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+6527 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+6528 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+6529 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+6530 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 614.616 null ] >>
+endobj
+6531 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 603.657 null ] >>
+endobj
+6532 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 592.699 null ] >>
+endobj
+6533 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 581.74 null ] >>
+endobj
+6534 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 570.781 null ] >>
+endobj
+6535 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 559.822 null ] >>
+endobj
+6536 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 548.863 null ] >>
+endobj
+6537 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 537.904 null ] >>
+endobj
+6538 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 526.945 null ] >>
+endobj
+6539 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 515.986 null ] >>
+endobj
+6540 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 505.027 null ] >>
+endobj
+6541 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 494.068 null ] >>
+endobj
+6542 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 483.11 null ] >>
+endobj
+6543 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 472.151 null ] >>
+endobj
+6544 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 461.192 null ] >>
+endobj
+6545 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 409.592 null ] >>
+endobj
+6546 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 398.633 null ] >>
+endobj
+6547 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 387.674 null ] >>
+endobj
+6548 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 359.183 null ] >>
+endobj
+6549 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 348.224 null ] >>
+endobj
+6550 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 337.265 null ] >>
+endobj
+6551 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 326.306 null ] >>
+endobj
+6552 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 315.347 null ] >>
+endobj
+6553 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 304.388 null ] >>
+endobj
+6554 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 293.429 null ] >>
+endobj
+6555 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 282.47 null ] >>
+endobj
+6556 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 271.512 null ] >>
+endobj
+6557 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 260.553 null ] >>
+endobj
+6558 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 249.594 null ] >>
+endobj
+6559 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 238.635 null ] >>
+endobj
+6560 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 227.676 null ] >>
+endobj
+6561 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 216.717 null ] >>
+endobj
+6562 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 205.758 null ] >>
+endobj
+6563 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 194.799 null ] >>
+endobj
+6564 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 183.84 null ] >>
+endobj
+6565 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 172.881 null ] >>
+endobj
+6566 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 161.922 null ] >>
+endobj
+6567 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 150.964 null ] >>
+endobj
+6568 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 122.473 null ] >>
+endobj
+6569 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+6570 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+6571 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+6572 0 obj
+<< /D [ 6521 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+6520 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F70 305 0 R /F27 642 0 R /F77 542 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+6575 0 obj
+<< /Filter /FlateDecode /Length 1817 >>
+stream
+xZKo6W6ZsiEТY
+q˒QUO39FOع[6ͭ 赎VӲZfd|iW B#P7@BHO⨇hG ,-,kǧrNplquB1:pi0CVezckvݰt8o;D23c>~a)/RDq{y2m;XRi'(pсtN-<w JX/ asza8O˽a`VMV*sdrhc4~[-9Dk_٘!=2$g2du:aId-J9:Xa.=UkTRaK`!o-`,.Eh+>[r_+><Y_Xg|K\?7zxY'%T{ucҦj2A8'p o"vHwP*;?}W>,\k oVFזNrjoCt!}HdLeOAPYy}pN%gΫWL۔Ͱ4PF9HJ )).dA-W)DxkƉIÙwaYͪyU_X*DT RE%}hޤq3NA;M͒E5D 7Ю6hj{ 4&U^B\U4x Ԟ:Qo}hBI'd(/gMVYU.!Y Ƴ2B\ήgYЊFADѯny<DkFEY S㶐#4~nʼn[Ȇ%L[2E LzU>U4bYZ2ǻnO||,v`[nF#od];@-o7. ͚ݸ2ϟr޽٢{s|~g$K+aڧ4\1zh2?CױR)#஌-tYW D:%sY"+SӲ *&XXbV#48!ȤAYN--]Mӭ,
+q%|5qGDOPlNɇ`B OPJpںvnZXRbnјe_<X
+endstream
+endobj
+6574 0 obj
+<< /Type /Page /Contents 6575 0 R /Resources 6573 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 6322 0 R >>
+endobj
+6576 0 obj
+<< /D [ 6574 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+6577 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+6578 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+6579 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 728.981 null ] >>
+endobj
+6580 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 718.022 null ] >>
+endobj
+6581 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 707.063 null ] >>
+endobj
+6582 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 696.104 null ] >>
+endobj
+6583 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 685.146 null ] >>
+endobj
+6584 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 674.187 null ] >>
+endobj
+6585 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 663.228 null ] >>
+endobj
+6586 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 652.269 null ] >>
+endobj
+6587 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 641.31 null ] >>
+endobj
+6588 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 630.351 null ] >>
+endobj
+6589 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 619.392 null ] >>
+endobj
+6590 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 608.433 null ] >>
+endobj
+6591 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 597.474 null ] >>
+endobj
+6592 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 586.515 null ] >>
+endobj
+6593 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 575.556 null ] >>
+endobj
+6594 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 564.598 null ] >>
+endobj
+6595 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 553.639 null ] >>
+endobj
+6596 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 542.68 null ] >>
+endobj
+6597 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 531.721 null ] >>
+endobj
+6598 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 520.762 null ] >>
+endobj
+6599 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 491.87 null ] >>
+endobj
+6600 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 480.911 null ] >>
+endobj
+6601 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 469.953 null ] >>
+endobj
+6602 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 458.994 null ] >>
+endobj
+6603 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 448.035 null ] >>
+endobj
+6604 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 437.076 null ] >>
+endobj
+6605 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 426.117 null ] >>
+endobj
+6606 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 415.158 null ] >>
+endobj
+6607 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 404.199 null ] >>
+endobj
+6608 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 393.24 null ] >>
+endobj
+6609 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 382.281 null ] >>
+endobj
+6610 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 371.322 null ] >>
+endobj
+6611 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 360.363 null ] >>
+endobj
+6612 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 349.405 null ] >>
+endobj
+6613 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 308.558 null ] >>
+endobj
+6614 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 297.599 null ] >>
+endobj
+6615 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 286.64 null ] >>
+endobj
+6616 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 275.681 null ] >>
+endobj
+6617 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 246.789 null ] >>
+endobj
+6618 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 235.83 null ] >>
+endobj
+6619 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 224.872 null ] >>
+endobj
+6620 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 213.913 null ] >>
+endobj
+6621 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 202.954 null ] >>
+endobj
+6622 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 191.995 null ] >>
+endobj
+6623 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 181.036 null ] >>
+endobj
+6624 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 170.077 null ] >>
+endobj
+6625 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 141.185 null ] >>
+endobj
+6626 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 130.226 null ] >>
+endobj
+6627 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 119.268 null ] >>
+endobj
+6628 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 108.309 null ] >>
+endobj
+6629 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 97.35 null ] >>
+endobj
+6630 0 obj
+<< /D [ 6574 0 R /XYZ 81.077 86.391 null ] >>
+endobj
+6573 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+6633 0 obj
+<< /Filter /FlateDecode /Length 2302 >>
+stream
+xZ]oϯi/:6o\TQ?m/ԋnCZ,7w f23xv6y^=HxoZq*D@%Y=Ϳj0_)JL
+ŭO)ZsJ({/YnGksVEyY+.L9u_Q)lܡDXнTqTIyu֍/+
+p`YE(EwK-9:{/T1ZS h<:PCl. r
+YRę /,X6  S0ơS1?7у/ : .n"!c !qfoH
+B:!b0fi=+rC5ېuhz9.vM]Mj]RǻT>Qt!tҸ8,B ]LE+H5\!Η&u!A~. %ȘF?Z3HߣFBB)w>[ĤfQ(0uG<:)e _ DCA8Uؼ =.*fRo٬"uZϊ8QG)"5@nd (吸>*רb~VQl\iE^b wIkZ@vܽЉ$n#j(6?|t_]tlu: bsӨ`LCIHqm gw;ru9Py&s l~o:sSI<oL>|wf{#0Q2"PV-TЪI5NfF/IEYe)2C}[dIu}pY(k,~U^_ =c̨S٤)s䢓w ɰ؃Q_ )
+9JwCeeA;"V25nƗnogHHԛ"srt0R/\׫s@|M3ha5*Xўц7|]cغߙMlZ{!x^VlK=l.i#+ɸ聟NZgs\EYgE3ϗ'T Bj } T s:P2tGtw/OH$Y^$;ZRϛȉytog, ! ^Fk@q^A/0m8)@@@[PfB۔
+vJ^:ek*pb*asE֞Srd>59~Cx?\<СsMy3"q :8Iw#[p4A ` -qI{'YB@m%ONC4@CX/Mީ`lS/W81%Tywo$JH5_~&y۳9j̐{ З'xjB+=;ho/wc xWr(G56/s93=JULؗ6*zJLGuy):pIhO>~!Ƭ+bh{ ǿEd)dYֻK)zVcy\'K>C{$$o!'t>b&J
+endstream
+endobj
+6632 0 obj
+<< /Type /Page /Contents 6633 0 R /Resources 6631 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 6322 0 R >>
+endobj
+6634 0 obj
+<< /D [ 6632 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+6635 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+6636 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+6637 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+6638 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+6639 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+6640 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+6641 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+6642 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+6643 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+6644 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+6645 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+6646 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+6647 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+6648 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 585.484 null ] >>
+endobj
+6649 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 521.689 null ] >>
+endobj
+6650 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 510.73 null ] >>
+endobj
+6651 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 499.771 null ] >>
+endobj
+6652 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 488.812 null ] >>
+endobj
+6653 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 477.853 null ] >>
+endobj
+6654 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 449.282 null ] >>
+endobj
+6655 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 438.323 null ] >>
+endobj
+6656 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 427.364 null ] >>
+endobj
+6657 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 416.405 null ] >>
+endobj
+6658 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 405.446 null ] >>
+endobj
+6659 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 394.487 null ] >>
+endobj
+6660 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 330.692 null ] >>
+endobj
+6661 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 319.733 null ] >>
+endobj
+6662 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 308.774 null ] >>
+endobj
+6663 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 297.815 null ] >>
+endobj
+6664 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 286.856 null ] >>
+endobj
+6665 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 275.897 null ] >>
+endobj
+6666 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 264.938 null ] >>
+endobj
+6667 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 253.979 null ] >>
+endobj
+6668 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 243.021 null ] >>
+endobj
+6669 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 232.062 null ] >>
+endobj
+6670 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 221.103 null ] >>
+endobj
+6671 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 210.144 null ] >>
+endobj
+6672 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 199.185 null ] >>
+endobj
+6673 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 188.226 null ] >>
+endobj
+6674 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 177.267 null ] >>
+endobj
+6675 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 166.308 null ] >>
+endobj
+6676 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 155.349 null ] >>
+endobj
+6677 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 144.39 null ] >>
+endobj
+6678 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 133.431 null ] >>
+endobj
+6679 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 122.473 null ] >>
+endobj
+6680 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+6681 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+6682 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+6683 0 obj
+<< /D [ 6632 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+6631 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F27 642 0 R /F20 186 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+6686 0 obj
+<< /Filter /FlateDecode /Length 2574 >>
+stream
+xZ[ۺ~ϯpz,˻}J{ڞ{bpr`hZ[,9gwxхZ-nҢ/Eqęo(f?7; /xdhĒE" ’,vߖnqlk[+, P|jL2/}ZI*%;3x&˪(*1/7]Z>1Ǽ(\ꚪ-ҙd)\0Ίšt$1 LkDt# KEZ#+0K ?ÄR-8Ҋ0:PI$ Dro*I |0_(V25& MBacmvk>첲s>{~ջbuO/»ob{<APk܄!)F Ӂw[5튛h0ETN%TKbUoa7+w_gC+hERud C8Pm綔L$\|z
+%|17>
+9
+wD{ =qoL9e,29o5YayS 4DH 2z <w t,tb
+gy>,{NgwC6AIu]GM"![ʇ0#9? _v\@\2饉
+^^TxvY<a8tKG@TCQOX?7y+`\^'XϲPЛ2Z ՑP)027e9IaOv
+Lh a1-UWj(nn|zgb!ܰ*@zηC)ěu6cdY=vD!'KD [ppIwI,{57YdևYCDљ3 }4{^-vN1>Q g[JM,pTVX^kpNy3uͅ#=U@|$C"I
+xl/t[wpHKp5nJ%
+Q.o)bǃB ǩ?`D\pH'\gu8r$YV,zعِܺFᩩmZ~lNIJD'W6*ʦ1봃(
+*`A}# E&byY$ݯPFisR,4Aޘ{˨ϑ<jYO4"7h2Z`rYqyHhE`=Lۃ92m&@0#rPjj͐
+endstream
+endobj
+6685 0 obj
+<< /Type /Page /Contents 6686 0 R /Resources 6684 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 6322 0 R >>
+endobj
+6687 0 obj
+<< /D [ 6685 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+6688 0 obj
+<< /D [ 6685 0 R /XYZ 81.077 742.929 null ] >>
+endobj
+6689 0 obj
+<< /D [ 6685 0 R /XYZ 81.077 731.97 null ] >>
+endobj
+6690 0 obj
+<< /D [ 6685 0 R /XYZ 81.077 721.011 null ] >>
+endobj
+6691 0 obj
+<< /D [ 6685 0 R /XYZ 81.077 710.052 null ] >>
+endobj
+6692 0 obj
+<< /D [ 6685 0 R /XYZ 81.077 699.093 null ] >>
+endobj
+6693 0 obj
+<< /D [ 6685 0 R /XYZ 81.077 658.246 null ] >>
+endobj
+6694 0 obj
+<< /D [ 6685 0 R /XYZ 81.077 647.288 null ] >>
+endobj
+6695 0 obj
+<< /D [ 6685 0 R /XYZ 81.077 636.329 null ] >>
+endobj
+6696 0 obj
+<< /D [ 6685 0 R /XYZ 81.077 625.37 null ] >>
+endobj
+6697 0 obj
+<< /D [ 6685 0 R /XYZ 81.077 614.411 null ] >>
+endobj
+6698 0 obj
+<< /D [ 6685 0 R /XYZ 81.077 561.609 null ] >>
+endobj
+6699 0 obj
+<< /D [ 6685 0 R /XYZ 81.077 550.65 null ] >>
+endobj
+6700 0 obj
+<< /D [ 6685 0 R /XYZ 81.077 539.691 null ] >>
+endobj
+6701 0 obj
+<< /D [ 6685 0 R /XYZ 81.077 528.732 null ] >>
+endobj
+6702 0 obj
+<< /D [ 6685 0 R /XYZ 81.077 517.773 null ] >>
+endobj
+6703 0 obj
+<< /D [ 6685 0 R /XYZ 81.077 506.814 null ] >>
+endobj
+6704 0 obj
+<< /D [ 6685 0 R /XYZ 81.077 495.855 null ] >>
+endobj
+6705 0 obj
+<< /D [ 6685 0 R /XYZ 81.077 484.896 null ] >>
+endobj
+6706 0 obj
+<< /D [ 6685 0 R /XYZ 81.077 473.938 null ] >>
+endobj
+6707 0 obj
+<< /D [ 6685 0 R /XYZ 81.077 462.979 null ] >>
+endobj
+6708 0 obj
+<< /D [ 6685 0 R /XYZ 81.077 452.02 null ] >>
+endobj
+6709 0 obj
+<< /D [ 6685 0 R /XYZ 81.077 399.218 null ] >>
+endobj
+6710 0 obj
+<< /D [ 6685 0 R /XYZ 81.077 388.259 null ] >>
+endobj
+6711 0 obj
+<< /D [ 6685 0 R /XYZ 81.077 323.502 null ] >>
+endobj
+6712 0 obj
+<< /D [ 6685 0 R /XYZ 81.077 312.543 null ] >>
+endobj
+6713 0 obj
+<< /D [ 6685 0 R /XYZ 81.077 301.584 null ] >>
+endobj
+6714 0 obj
+<< /D [ 6685 0 R /XYZ 81.077 290.625 null ] >>
+endobj
+6715 0 obj
+<< /D [ 6685 0 R /XYZ 81.077 279.666 null ] >>
+endobj
+6716 0 obj
+<< /D [ 6685 0 R /XYZ 81.077 268.707 null ] >>
+endobj
+6717 0 obj
+<< /D [ 6685 0 R /XYZ 81.077 237.823 null ] >>
+endobj
+6718 0 obj
+<< /D [ 6685 0 R /XYZ 81.077 226.864 null ] >>
+endobj
+6719 0 obj
+<< /D [ 6685 0 R /XYZ 81.077 124.249 null ] >>
+endobj
+6720 0 obj
+<< /D [ 6685 0 R /XYZ 81.077 113.29 null ] >>
+endobj
+6721 0 obj
+<< /D [ 6685 0 R /XYZ 81.077 102.331 null ] >>
+endobj
+6722 0 obj
+<< /D [ 6685 0 R /XYZ 81.077 91.372 null ] >>
+endobj
+6684 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R /F65 185 0 R /F70 305 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+6725 0 obj
+<< /Filter /FlateDecode /Length 2300 >>
+stream
+xڵZ[o۸~0hxī
+5$)ZOhRȒ]+6dk[Uk~v˦ePf )UA$E\{+|1%x.`H湑:.Ec 6$)ʨ 5|pvׯ_,/0pP1zlLanh6sh*eݯv:Z/5KEcL "9v yH_ClWu_}b#J*c%ĚQh{s`]t3.¬+ P; Q+/1ƖCx(m2"(FeFZz)䀪2-ž*}ƒ+VlUnMUƪقH4N&B'Ɖΐ9DP@KC/,Hd$ԅyʒ5X`#KappiƩilɚEoҩ+&gvXڢ(qV*o7Ӧ9xoo QcӞFBC hUiSH
+"uṋ3fiP#q/;%G<!8B3T<vbvznnX21fde'RnTtbmmmĮM/08Ca
+! 4;z\!FI7Jwj8]ޞ.] Ճ jZ]ELX]|àՃ$Hkdj*Oju`U_E
+/sJۊeP#3;0&PTC"km Rz>< pD VF!dVEQxt 3DB4/oXJK) ?$uNB%A@IDsXB0KMtF\;(HiQF+%'`^KۖZrp<ľR؏5S!?w]h֙X*/}b$M3H
+,_P&
+d]B$>tmΞ"MbXك$1C]jQlR,Q_]8]@ǭg8v4@371k <~|WM$]<Q!;$(?ĥ,4G)Zﱟ +vU9C/RߡE-!8#Ү|N).G4}x3Rh?17~Mi?N]db$ήt /ƹ/}{uG
+endstream
+endobj
+6724 0 obj
+<< /Type /Page /Contents 6725 0 R /Resources 6723 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 6322 0 R >>
+endobj
+6726 0 obj
+<< /D [ 6724 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+6727 0 obj
+<< /D [ 6724 0 R /XYZ 81.077 742.929 null ] >>
+endobj
+6728 0 obj
+<< /D [ 6724 0 R /XYZ 81.077 731.97 null ] >>
+endobj
+6729 0 obj
+<< /D [ 6724 0 R /XYZ 81.077 721.011 null ] >>
+endobj
+6730 0 obj
+<< /D [ 6724 0 R /XYZ 81.077 710.052 null ] >>
+endobj
+6731 0 obj
+<< /D [ 6724 0 R /XYZ 81.077 699.093 null ] >>
+endobj
+6732 0 obj
+<< /D [ 6724 0 R /XYZ 81.077 688.134 null ] >>
+endobj
+6733 0 obj
+<< /D [ 6724 0 R /XYZ 81.077 677.175 null ] >>
+endobj
+6734 0 obj
+<< /D [ 6724 0 R /XYZ 81.077 666.217 null ] >>
+endobj
+6735 0 obj
+<< /D [ 6724 0 R /XYZ 81.077 563.601 null ] >>
+endobj
+6736 0 obj
+<< /D [ 6724 0 R /XYZ 81.077 552.642 null ] >>
+endobj
+6737 0 obj
+<< /D [ 6724 0 R /XYZ 81.077 541.684 null ] >>
+endobj
+6738 0 obj
+<< /D [ 6724 0 R /XYZ 81.077 498.844 null ] >>
+endobj
+6739 0 obj
+<< /D [ 6724 0 R /XYZ 81.077 487.885 null ] >>
+endobj
+6740 0 obj
+<< /D [ 6724 0 R /XYZ 81.077 476.926 null ] >>
+endobj
+6741 0 obj
+<< /D [ 6724 0 R /XYZ 81.077 465.967 null ] >>
+endobj
+6742 0 obj
+<< /D [ 6724 0 R /XYZ 81.077 455.009 null ] >>
+endobj
+6743 0 obj
+<< /D [ 6724 0 R /XYZ 81.077 444.05 null ] >>
+endobj
+6744 0 obj
+<< /D [ 6724 0 R /XYZ 81.077 433.091 null ] >>
+endobj
+6745 0 obj
+<< /D [ 6724 0 R /XYZ 81.077 422.132 null ] >>
+endobj
+6746 0 obj
+<< /D [ 6724 0 R /XYZ 81.077 411.173 null ] >>
+endobj
+6747 0 obj
+<< /D [ 6724 0 R /XYZ 81.077 400.214 null ] >>
+endobj
+6748 0 obj
+<< /D [ 6724 0 R /XYZ 81.077 389.255 null ] >>
+endobj
+6749 0 obj
+<< /D [ 6724 0 R /XYZ 81.077 378.296 null ] >>
+endobj
+6750 0 obj
+<< /D [ 6724 0 R /XYZ 81.077 313.539 null ] >>
+endobj
+6751 0 obj
+<< /D [ 6724 0 R /XYZ 81.077 302.58 null ] >>
+endobj
+6752 0 obj
+<< /D [ 6724 0 R /XYZ 81.077 291.621 null ] >>
+endobj
+6753 0 obj
+<< /D [ 6724 0 R /XYZ 81.077 280.662 null ] >>
+endobj
+6754 0 obj
+<< /D [ 6724 0 R /XYZ 81.077 269.703 null ] >>
+endobj
+6755 0 obj
+<< /D [ 6724 0 R /XYZ 81.077 258.745 null ] >>
+endobj
+6756 0 obj
+<< /D [ 6724 0 R /XYZ 81.077 233.838 null ] >>
+endobj
+6757 0 obj
+<< /D [ 6724 0 R /XYZ 81.077 222.879 null ] >>
+endobj
+6758 0 obj
+<< /D [ 6724 0 R /XYZ 81.077 211.92 null ] >>
+endobj
+6759 0 obj
+<< /D [ 6724 0 R /XYZ 81.077 200.961 null ] >>
+endobj
+6760 0 obj
+<< /D [ 6724 0 R /XYZ 81.077 190.002 null ] >>
+endobj
+6761 0 obj
+<< /D [ 6724 0 R /XYZ 81.077 121.26 null ] >>
+endobj
+6762 0 obj
+<< /D [ 6724 0 R /XYZ 81.077 110.301 null ] >>
+endobj
+6723 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R /F69 304 0 R /F30 644 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+6765 0 obj
+<< /Filter /FlateDecode /Length 2403 >>
+stream
+xڝZ[۸~ϯ0 wRPYtw[t> (6 Cck<jdq*\CE7H"Gpl=ó_^a|wǟI>Q.䳻W:T)Idv^E?Ef͜lW5kWWM^slO!e׻c FZu.x23o^6KmlCQpKSo7{^~?sDtS~0}
+֙xֺ[f~}v?P=((y˾ b1 3rMzAK$ "B;Dε{|)Pcx Oіn~#zo_۷zPH̀aМBQ!?s2pζ+=cxB@O~QYDaD+08]V0h CZmEm.Ϻ'@+Ӹvn T.;j5>6SA
+17Ak3$ fڑBzoHS|,CV \4+7FDˑYnlX}ַm;c|6VX otrZ ƽ70l?7 E .Ո',*5lNdV;sAɨF?
+7%z㚬{G1Dg6xdpMQIw`T kK]Eq9✎L#L#!m׋?pS[/E_'5uu*T,)$(um-R~zZ44YOcp=LVJ*T$c׽k={~<fQh“[@rzxZ,L1G [$-:Y:lN6!QeK4瀺N6&('1غј/,+6MQjVfݔza4ߧN"c>ri&ÿb]rusdJfDҰ8)#tR($iatnO$SvX߇TFiE[;P:$a
+4KR:B{ra Yn?5{%A|.[.:o'æE1NKxD]@ٽ}q6jh=6ղ}[}rO. K}v +RL%)gîD4zOS8'j4OOQkcN):]6V"I ,
+wtù5IVh(v\
+yF` *NS \Twn-Qs '-J7)8ٻ CE];Og}OcH8FÄݽ?OC
+endstream
+endobj
+6764 0 obj
+<< /Type /Page /Contents 6765 0 R /Resources 6763 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 6800 0 R >>
+endobj
+6766 0 obj
+<< /D [ 6764 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+6767 0 obj
+<< /D [ 6764 0 R /XYZ 81.077 742.929 null ] >>
+endobj
+6768 0 obj
+<< /D [ 6764 0 R /XYZ 81.077 731.97 null ] >>
+endobj
+6769 0 obj
+<< /D [ 6764 0 R /XYZ 81.077 667.213 null ] >>
+endobj
+6770 0 obj
+<< /D [ 6764 0 R /XYZ 81.077 656.254 null ] >>
+endobj
+6771 0 obj
+<< /D [ 6764 0 R /XYZ 81.077 645.295 null ] >>
+endobj
+6772 0 obj
+<< /D [ 6764 0 R /XYZ 81.077 634.336 null ] >>
+endobj
+6773 0 obj
+<< /D [ 6764 0 R /XYZ 81.077 623.377 null ] >>
+endobj
+6774 0 obj
+<< /D [ 6764 0 R /XYZ 81.077 612.418 null ] >>
+endobj
+6775 0 obj
+<< /D [ 6764 0 R /XYZ 81.077 601.459 null ] >>
+endobj
+6776 0 obj
+<< /D [ 6764 0 R /XYZ 81.077 570.575 null ] >>
+endobj
+6777 0 obj
+<< /D [ 6764 0 R /XYZ 81.077 559.616 null ] >>
+endobj
+6778 0 obj
+<< /D [ 6764 0 R /XYZ 81.077 548.657 null ] >>
+endobj
+6779 0 obj
+<< /D [ 6764 0 R /XYZ 81.077 537.698 null ] >>
+endobj
+6780 0 obj
+<< /D [ 6764 0 R /XYZ 81.077 526.74 null ] >>
+endobj
+6781 0 obj
+<< /D [ 6764 0 R /XYZ 81.077 515.781 null ] >>
+endobj
+6782 0 obj
+<< /D [ 6764 0 R /XYZ 81.077 504.822 null ] >>
+endobj
+6783 0 obj
+<< /D [ 6764 0 R /XYZ 81.077 493.863 null ] >>
+endobj
+6784 0 obj
+<< /D [ 6764 0 R /XYZ 81.077 482.904 null ] >>
+endobj
+6785 0 obj
+<< /D [ 6764 0 R /XYZ 81.077 471.945 null ] >>
+endobj
+6786 0 obj
+<< /D [ 6764 0 R /XYZ 81.077 460.986 null ] >>
+endobj
+6787 0 obj
+<< /D [ 6764 0 R /XYZ 81.077 450.027 null ] >>
+endobj
+6788 0 obj
+<< /D [ 6764 0 R /XYZ 81.077 439.068 null ] >>
+endobj
+6789 0 obj
+<< /D [ 6764 0 R /XYZ 81.077 428.109 null ] >>
+endobj
+6790 0 obj
+<< /D [ 6764 0 R /XYZ 81.077 417.151 null ] >>
+endobj
+6791 0 obj
+<< /D [ 6764 0 R /XYZ 81.077 406.192 null ] >>
+endobj
+6792 0 obj
+<< /D [ 6764 0 R /XYZ 81.077 395.233 null ] >>
+endobj
+93 0 obj
+<< /D [ 6764 0 R /XYZ 79.37 369.778 null ] >>
+endobj
+6793 0 obj
+<< /D [ 6764 0 R /XYZ 81.077 183.27 null ] >>
+endobj
+6794 0 obj
+<< /D [ 6764 0 R /XYZ 81.077 134.453 null ] >>
+endobj
+6795 0 obj
+<< /D [ 6764 0 R /XYZ 81.077 123.494 null ] >>
+endobj
+6796 0 obj
+<< /D [ 6764 0 R /XYZ 81.077 112.535 null ] >>
+endobj
+6797 0 obj
+<< /D [ 6764 0 R /XYZ 81.077 101.576 null ] >>
+endobj
+6798 0 obj
+<< /D [ 6764 0 R /XYZ 81.077 90.617 null ] >>
+endobj
+6799 0 obj
+<< /D [ 6764 0 R /XYZ 81.077 79.658 null ] >>
+endobj
+6763 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F68 189 0 R /F64 183 0 R /F20 186 0 R /F67 187 0 R /F79 736 0 R /F65 185 0 R /F70 305 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+6803 0 obj
+<< /Filter /FlateDecode /Length 2633 >>
+stream
+xڭZ]oܺ}ϯXw %EI[@`MPrzWv3$%׊bI\yf8..+:<7ջWo>|!əW :[h-2lq]kɿ/>rCa&1w'L܊F87?nnaX3պmyVNNWSsuq؅!L8 K=FyY}]jsQPqkxNX.G4 f\sC`ԛߊ>oEV]UgϵՄk=baJsk8wv܌o>00 A4 0];5NNɗg*d]USmq³rp'luїˮw/ؿl=zzՖ۪NNȗ5
+@ <9ŁZCsm=Ni(a'k0rcQ笣!,Xe,5/wUA·&C#>hXmuٸ7-|fZraGqՃbn[kzTxg [n6zn+dW]?P1Ȕ#2ホ|<i G%fm*d<np h䲻nt;[p`k$ (0C} [)SB6~ |HܝݝnAc릟t#!ܷ-
+I\(%eİX؆nUm}#I$ 2:NSA{ =njN $D UWoeۜMBD14, r*٢92EG0U (=#2H:x@<fLF&фHzxٸ?e5?WceTI<Kl`_8Xvk߱s*.:B&Fdi[7N)'EPY BwOsr8lV; x#3SgY<qb<Kwʶj,BMcqGhEH ㍵. !Ȕy)p4?F:#_tQΦV2o8)N٤ƣR|~5t3iypp qDp9Ƃ[ypzn'Rt huQ;޷U?@-G|XWԙcΧI#M29Rho':Q-n>|l ׯdQ1N,8ɥk`h\$ikgtjz-_
+}.f_CaP6kokX 'y,,$fiAXң-}yxzMUORXN2SIS^1͑Ή+?\A}ō hZ_ntꉅľa妲Ex( hïw'Jٺ+HD4mQ^􇠜۾ bh2?7W-@ڽAeiˮkm7{న_}! gډ.{Wޢ5@gծ aUYz9̓\,9&c5ژbA$^Vu/7Ɇe|6Nu
+707KDҷMhg9yt3CEdc4;
+7H^1.QƯ_>Sr{/x[MѾ&w%ptUJcGjn-%/f-J]v6JyJF(?kMRK#r$aD%j7VJ64Mce/nL9C/ dbEqPmT@#T P
+lQPZ'=RTqM[u"~/f8Bg-,W}?O,,۱`Wcjf(L&5
+9ȷPŏYoS6UUͻ℁<928
+&&>jRgJ&Y4
+?
+endstream
+endobj
+6802 0 obj
+<< /Type /Page /Contents 6803 0 R /Resources 6801 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 6800 0 R >>
+endobj
+6804 0 obj
+<< /D [ 6802 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+6805 0 obj
+<< /D [ 6802 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+6806 0 obj
+<< /D [ 6802 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+6807 0 obj
+<< /D [ 6802 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+6808 0 obj
+<< /D [ 6802 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+6809 0 obj
+<< /D [ 6802 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+6810 0 obj
+<< /D [ 6802 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+6811 0 obj
+<< /D [ 6802 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+6812 0 obj
+<< /D [ 6802 0 R /XYZ 81.077 633.34 null ] >>
+endobj
+6813 0 obj
+<< /D [ 6802 0 R /XYZ 81.077 622.381 null ] >>
+endobj
+6814 0 obj
+<< /D [ 6802 0 R /XYZ 81.077 611.422 null ] >>
+endobj
+6815 0 obj
+<< /D [ 6802 0 R /XYZ 81.077 600.463 null ] >>
+endobj
+6816 0 obj
+<< /D [ 6802 0 R /XYZ 81.077 589.504 null ] >>
+endobj
+6817 0 obj
+<< /D [ 6802 0 R /XYZ 81.077 578.545 null ] >>
+endobj
+6818 0 obj
+<< /D [ 6802 0 R /XYZ 81.077 567.586 null ] >>
+endobj
+6819 0 obj
+<< /D [ 6802 0 R /XYZ 81.077 556.627 null ] >>
+endobj
+6820 0 obj
+<< /D [ 6802 0 R /XYZ 81.077 545.669 null ] >>
+endobj
+6821 0 obj
+<< /D [ 6802 0 R /XYZ 81.077 534.71 null ] >>
+endobj
+6822 0 obj
+<< /D [ 6802 0 R /XYZ 81.077 523.751 null ] >>
+endobj
+6823 0 obj
+<< /D [ 6802 0 R /XYZ 81.077 388.806 null ] >>
+endobj
+6824 0 obj
+<< /D [ 6802 0 R /XYZ 81.077 377.847 null ] >>
+endobj
+6825 0 obj
+<< /D [ 6802 0 R /XYZ 81.077 366.888 null ] >>
+endobj
+6826 0 obj
+<< /D [ 6802 0 R /XYZ 81.077 355.929 null ] >>
+endobj
+6827 0 obj
+<< /D [ 6802 0 R /XYZ 81.077 344.97 null ] >>
+endobj
+6828 0 obj
+<< /D [ 6802 0 R /XYZ 81.077 334.011 null ] >>
+endobj
+6829 0 obj
+<< /D [ 6802 0 R /XYZ 81.077 323.052 null ] >>
+endobj
+6830 0 obj
+<< /D [ 6802 0 R /XYZ 81.077 312.093 null ] >>
+endobj
+6831 0 obj
+<< /D [ 6802 0 R /XYZ 81.077 301.134 null ] >>
+endobj
+6832 0 obj
+<< /D [ 6802 0 R /XYZ 81.077 290.176 null ] >>
+endobj
+6833 0 obj
+<< /D [ 6802 0 R /XYZ 81.077 279.217 null ] >>
+endobj
+6834 0 obj
+<< /D [ 6802 0 R /XYZ 81.077 268.258 null ] >>
+endobj
+6835 0 obj
+<< /D [ 6802 0 R /XYZ 81.077 175.605 null ] >>
+endobj
+6836 0 obj
+<< /D [ 6802 0 R /XYZ 81.077 164.646 null ] >>
+endobj
+6837 0 obj
+<< /D [ 6802 0 R /XYZ 81.077 153.687 null ] >>
+endobj
+6838 0 obj
+<< /D [ 6802 0 R /XYZ 81.077 142.729 null ] >>
+endobj
+6839 0 obj
+<< /D [ 6802 0 R /XYZ 81.077 131.77 null ] >>
+endobj
+6840 0 obj
+<< /D [ 6802 0 R /XYZ 81.077 120.811 null ] >>
+endobj
+6841 0 obj
+<< /D [ 6802 0 R /XYZ 81.077 109.852 null ] >>
+endobj
+6801 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F70 305 0 R /F32 176 0 R /F27 642 0 R /F79 736 0 R /F65 185 0 R /F69 304 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+6844 0 obj
+<< /Filter /FlateDecode /Length 2884 >>
+stream
+xڽZmo~b|U6i(n,]V$}wݥ! 7̒w}{o)lvy
+ËdgB4Dz~Ӊs}rF1?to랴Y{jjs];1Zvz[mָs}?'z[׺I mΎ˿j$٥KD6K6#Q*C)pضD͋ 0;3p"\0E:&2EvIe|ifvyQyu=y E/% ݈G9CLP'yzH)f*0e+RE!D)e:vLM~1J$;0!KJ锤_Gaq#fɄctr_z̚ <cY-;v-Y1?5sE8Š/YsW?Rs=x"cR?x܏c `C~~YW/dLQY8'&&wܹlgW#bT: @[_2TQAk& ↺w -!%1%ci)
+hi
+;$96 €<̣b -em r{9V@w+f~,=E?lsX1p\w,󋵷nVugP\dg,='j
+Gxs7J4 OMe81%V0Y N'Z&~<uUZ/F32rVkG^Ky(.>\AW3f]
+ @h5^,șq`Av,VmV=+ ,UvA*B|!ɁhXՉ@t\HuM@vK}&b+`
+")b06 /Ë3}88##>>@--lCSA{mX?1kЁ璒 _Lȯ 𲇚PJgdA<~kTmf"Hrljc4A"Q=޵'\d=p=MEW=u Jr窔>ey<?֛` d"s4 oAU5&nmMY AwUX"xŅށtz<p8C6 }8VmB0K/~"p`%i%P&pǤiؔ%i V,L}YuFA,
+IBqanC$̄5Dхи͂&%|c+K+{
+E?15D-
+vC~ cϪj{L(buŽ;ĺSr\E:q!{ yz`K~2ؿ&($7OF;c ,vLoE -`؎ݮS$D9{MP:+}GxΟb:7huzld!` `c!}"b}9X\ ɔ: Yܘ9>tb0B6$<868a6V9j,ŕq<>!-$vp͏L @:<4.*@:/@I&a8'Q Gq2/1mN;?7MJڜEw,aܦ;]>YPJl%H'9_/_P
+endstream
+endobj
+6843 0 obj
+<< /Type /Page /Contents 6844 0 R /Resources 6842 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 6800 0 R >>
+endobj
+6845 0 obj
+<< /D [ 6843 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+6846 0 obj
+<< /D [ 6843 0 R /XYZ 81.077 707.063 null ] >>
+endobj
+6847 0 obj
+<< /D [ 6843 0 R /XYZ 81.077 696.104 null ] >>
+endobj
+6848 0 obj
+<< /D [ 6843 0 R /XYZ 81.077 685.146 null ] >>
+endobj
+6849 0 obj
+<< /D [ 6843 0 R /XYZ 81.077 674.187 null ] >>
+endobj
+6850 0 obj
+<< /D [ 6843 0 R /XYZ 81.077 663.228 null ] >>
+endobj
+6851 0 obj
+<< /D [ 6843 0 R /XYZ 81.077 652.269 null ] >>
+endobj
+6852 0 obj
+<< /D [ 6843 0 R /XYZ 81.077 611.422 null ] >>
+endobj
+6853 0 obj
+<< /D [ 6843 0 R /XYZ 81.077 600.463 null ] >>
+endobj
+6854 0 obj
+<< /D [ 6843 0 R /XYZ 81.077 589.504 null ] >>
+endobj
+6855 0 obj
+<< /D [ 6843 0 R /XYZ 81.077 578.545 null ] >>
+endobj
+6856 0 obj
+<< /D [ 6843 0 R /XYZ 81.077 567.586 null ] >>
+endobj
+6857 0 obj
+<< /D [ 6843 0 R /XYZ 81.077 556.627 null ] >>
+endobj
+6858 0 obj
+<< /D [ 6843 0 R /XYZ 81.077 545.669 null ] >>
+endobj
+6859 0 obj
+<< /D [ 6843 0 R /XYZ 81.077 534.71 null ] >>
+endobj
+6860 0 obj
+<< /D [ 6843 0 R /XYZ 81.077 523.751 null ] >>
+endobj
+6861 0 obj
+<< /D [ 6843 0 R /XYZ 81.077 512.792 null ] >>
+endobj
+6862 0 obj
+<< /D [ 6843 0 R /XYZ 81.077 442.604 null ] >>
+endobj
+6863 0 obj
+<< /D [ 6843 0 R /XYZ 81.077 431.645 null ] >>
+endobj
+6864 0 obj
+<< /D [ 6843 0 R /XYZ 81.077 402.753 null ] >>
+endobj
+6865 0 obj
+<< /D [ 6843 0 R /XYZ 81.077 391.795 null ] >>
+endobj
+6866 0 obj
+<< /D [ 6843 0 R /XYZ 81.077 380.836 null ] >>
+endobj
+6867 0 obj
+<< /D [ 6843 0 R /XYZ 81.077 339.989 null ] >>
+endobj
+6868 0 obj
+<< /D [ 6843 0 R /XYZ 81.077 329.03 null ] >>
+endobj
+6869 0 obj
+<< /D [ 6843 0 R /XYZ 81.077 318.071 null ] >>
+endobj
+6870 0 obj
+<< /D [ 6843 0 R /XYZ 81.077 307.112 null ] >>
+endobj
+6871 0 obj
+<< /D [ 6843 0 R /XYZ 81.077 291.172 null ] >>
+endobj
+6872 0 obj
+<< /D [ 6843 0 R /XYZ 81.077 280.213 null ] >>
+endobj
+6873 0 obj
+<< /D [ 6843 0 R /XYZ 81.077 237.374 null ] >>
+endobj
+6874 0 obj
+<< /D [ 6843 0 R /XYZ 81.077 226.415 null ] >>
+endobj
+6875 0 obj
+<< /D [ 6843 0 R /XYZ 81.077 215.456 null ] >>
+endobj
+6876 0 obj
+<< /D [ 6843 0 R /XYZ 81.077 204.497 null ] >>
+endobj
+6877 0 obj
+<< /D [ 6843 0 R /XYZ 81.077 139.74 null ] >>
+endobj
+6878 0 obj
+<< /D [ 6843 0 R /XYZ 81.077 128.781 null ] >>
+endobj
+6879 0 obj
+<< /D [ 6843 0 R /XYZ 81.077 117.822 null ] >>
+endobj
+6880 0 obj
+<< /D [ 6843 0 R /XYZ 81.077 106.863 null ] >>
+endobj
+6881 0 obj
+<< /D [ 6843 0 R /XYZ 81.077 95.904 null ] >>
+endobj
+6882 0 obj
+<< /D [ 6843 0 R /XYZ 81.077 84.945 null ] >>
+endobj
+6842 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R /F79 736 0 R /F69 304 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+6885 0 obj
+<< /Filter /FlateDecode /Length 1595 >>
+stream
+xZnF}W苄›_R
+T>!5M:k{ܕ#m"9;sfv):{3gt$>{>{qLgAtfVhFf׹J-~_`9i-l f.Z?.Wߘ/_f5C>lխ/ˢ.K+qQią#J29ͯ3w߼_.Fg Vu]֍kQp=,ў
+Q(ԆStm0|\ObO8Q2VD 1oYI"*9tFkPhҐ=,۶u\="oAN}BaLhCΈk%VBߗW}$@hFk8bw;9P Z@Š$azP04%@Ӣ"0AWKFP
+&ƺZL%S4޶RĊfhsJ1Lz))5A aF8T#jp˞sT^#qcu1\Lp@a)Fr 6tFۖ` މ 6K]?fum㯖xT'tcOjaxF'b ׉B͡O A;|ځo6Ų<}wAqZ;!TcrN- l&hsbvjg/Nvջ5 SD$؉Bm_;޷hRTv@JH'ȓG6pH:+Q%jwVMq7'u[N }UtIx#<ȹ81B0T&gqAEMr*%Z:pbTM@hQ&؆uu_ ¨Jџjm%#~t_+"FMv }):AdAdNVrMw P ٚv .E948R1%v_rERB+1o;B(ȸ%<{ی6 o„ jӗѶ$31<i|F[Dx@"$h3!e-Q'y ȶGM~!kߗ"(PhIq-[~?'BʷMS_?ݫ|ejn|u<1A.cX;U@Ğ1GàNt'$F-Qty QuY2h*KFQ#"쁢%(P*ܯ3"pdO";Xqg0 {o C[
+endstream
+endobj
+6884 0 obj
+<< /Type /Page /Contents 6885 0 R /Resources 6883 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 6800 0 R >>
+endobj
+6886 0 obj
+<< /D [ 6884 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+6887 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+6888 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+6889 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+6890 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+6891 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+6892 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 684.149 null ] >>
+endobj
+6893 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 673.19 null ] >>
+endobj
+6894 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 662.231 null ] >>
+endobj
+6895 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 651.273 null ] >>
+endobj
+6896 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 640.314 null ] >>
+endobj
+6897 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 629.355 null ] >>
+endobj
+6898 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 618.396 null ] >>
+endobj
+6899 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 607.437 null ] >>
+endobj
+6900 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 596.478 null ] >>
+endobj
+6901 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 585.519 null ] >>
+endobj
+6902 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 574.56 null ] >>
+endobj
+6903 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 563.601 null ] >>
+endobj
+6904 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 552.642 null ] >>
+endobj
+6905 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 541.684 null ] >>
+endobj
+6906 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 530.725 null ] >>
+endobj
+6907 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 519.766 null ] >>
+endobj
+6908 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 508.807 null ] >>
+endobj
+6909 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 477.923 null ] >>
+endobj
+6910 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 466.964 null ] >>
+endobj
+6911 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 456.005 null ] >>
+endobj
+6912 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 445.046 null ] >>
+endobj
+6913 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 434.087 null ] >>
+endobj
+6914 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 423.128 null ] >>
+endobj
+6915 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 412.169 null ] >>
+endobj
+6916 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 401.21 null ] >>
+endobj
+6917 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 390.251 null ] >>
+endobj
+6918 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 379.292 null ] >>
+endobj
+6919 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 368.334 null ] >>
+endobj
+6920 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 357.375 null ] >>
+endobj
+6921 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 346.416 null ] >>
+endobj
+6922 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 335.457 null ] >>
+endobj
+6923 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 324.498 null ] >>
+endobj
+6924 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 313.539 null ] >>
+endobj
+6925 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 302.58 null ] >>
+endobj
+6926 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 291.621 null ] >>
+endobj
+6927 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 280.662 null ] >>
+endobj
+6928 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 269.703 null ] >>
+endobj
+6929 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 258.745 null ] >>
+endobj
+6930 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 247.786 null ] >>
+endobj
+6931 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 236.827 null ] >>
+endobj
+6932 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 225.868 null ] >>
+endobj
+6933 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 214.909 null ] >>
+endobj
+6934 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 182.032 null ] >>
+endobj
+6935 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 171.073 null ] >>
+endobj
+6936 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 160.114 null ] >>
+endobj
+6937 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 149.155 null ] >>
+endobj
+6938 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 138.197 null ] >>
+endobj
+6939 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 127.238 null ] >>
+endobj
+6940 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 116.279 null ] >>
+endobj
+6941 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 105.32 null ] >>
+endobj
+6942 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 94.361 null ] >>
+endobj
+6943 0 obj
+<< /D [ 6884 0 R /XYZ 81.077 83.402 null ] >>
+endobj
+6883 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+6946 0 obj
+<< /Filter /FlateDecode /Length 1755 >>
+stream
+xڽZKs6W79#x?txi2ӃO5-A2Ǔ^P$A@~D$ -o'x W$;dz?g?H=hd:#%<!-$j$AX|3g* c90hdd:<F렁nLmvmB"Fw fb:h
+m1M41z/`q!DP[$ٲ=eH ۩1 `ے#e|Ҧ
+f;DVU~Z m˛lgyo?(yf>#ǡobd,w7mv÷\gw )j#48 j?HLhB)!r\h؅#o΍*B?A^IQn9ܔe$ϡt1sd0Dhp>3D8*lgEM,mN.6rj`z\%VίU܄-Bl5yK&O;GW"$} (,jC46ri[
+%D{)rc w܉Я\;Sjz4gi~pP L*$ϹH1cAfQB|kagB"|bY~J w+XHhva15l+fVvѤ:*lU9QG~}[⧓W?g'PaCwȇI譖&Hins{?w* R> dE q]" -}'!`]LOtCcu5t:ػ6n<T(dOB|
+сO~PKOǢ'^ʶB6vV{$cf?!\P*V^L"ejJpD()BCH53fnKXayB Ex0Eаi^! ʼH 0ˏdN<RHF~\׮kЏKKɭj[1eA.B{w=a
+&P6>MUށ"ODT/aG"tv D }t$BsLJk$y>Zy^'b>ӅK;TOތOqpi z6GvpcM8X#6rd Q5XyyE>m 5?_/'a
+endstream
+endobj
+6945 0 obj
+<< /Type /Page /Contents 6946 0 R /Resources 6944 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 6800 0 R >>
+endobj
+6947 0 obj
+<< /D [ 6945 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+6948 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+6949 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+6950 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 715.033 null ] >>
+endobj
+6951 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 704.075 null ] >>
+endobj
+6952 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 693.116 null ] >>
+endobj
+6953 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 682.157 null ] >>
+endobj
+6954 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 671.198 null ] >>
+endobj
+6955 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 660.239 null ] >>
+endobj
+6956 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 649.28 null ] >>
+endobj
+6957 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 638.321 null ] >>
+endobj
+6958 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 627.362 null ] >>
+endobj
+6959 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 616.403 null ] >>
+endobj
+6960 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 605.444 null ] >>
+endobj
+6961 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 594.486 null ] >>
+endobj
+6962 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 583.527 null ] >>
+endobj
+6963 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 572.568 null ] >>
+endobj
+6964 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 561.609 null ] >>
+endobj
+6965 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 550.65 null ] >>
+endobj
+6966 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 539.691 null ] >>
+endobj
+6967 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 528.732 null ] >>
+endobj
+6968 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 517.773 null ] >>
+endobj
+6969 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 506.814 null ] >>
+endobj
+6970 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 495.855 null ] >>
+endobj
+6971 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 484.896 null ] >>
+endobj
+6972 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 473.938 null ] >>
+endobj
+6973 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 462.979 null ] >>
+endobj
+6974 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 452.02 null ] >>
+endobj
+6975 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 441.061 null ] >>
+endobj
+6976 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 430.102 null ] >>
+endobj
+6977 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 419.143 null ] >>
+endobj
+6978 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 408.184 null ] >>
+endobj
+6979 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 397.225 null ] >>
+endobj
+6980 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 386.266 null ] >>
+endobj
+6981 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 375.307 null ] >>
+endobj
+6982 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 364.349 null ] >>
+endobj
+6983 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 353.39 null ] >>
+endobj
+6984 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 342.431 null ] >>
+endobj
+6985 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 331.472 null ] >>
+endobj
+6986 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 320.513 null ] >>
+endobj
+6987 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 309.554 null ] >>
+endobj
+6988 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 298.595 null ] >>
+endobj
+6989 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 287.636 null ] >>
+endobj
+6990 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 276.677 null ] >>
+endobj
+6991 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 265.718 null ] >>
+endobj
+6992 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 254.759 null ] >>
+endobj
+6993 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 243.801 null ] >>
+endobj
+6994 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 232.842 null ] >>
+endobj
+6995 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 221.883 null ] >>
+endobj
+6996 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 210.924 null ] >>
+endobj
+6997 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 199.965 null ] >>
+endobj
+6998 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 189.006 null ] >>
+endobj
+6999 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 178.047 null ] >>
+endobj
+7000 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 167.088 null ] >>
+endobj
+7001 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 156.129 null ] >>
+endobj
+7002 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 145.17 null ] >>
+endobj
+7003 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 134.212 null ] >>
+endobj
+7004 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 123.253 null ] >>
+endobj
+7005 0 obj
+<< /D [ 6945 0 R /XYZ 81.077 82.406 null ] >>
+endobj
+6944 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+7008 0 obj
+<< /Filter /FlateDecode /Length 2089 >>
+stream
+xYKo8W:[|/f=rmf (h[<G7oђhRIl;{X/E$| O7Տ󫏟b4l2_]QMDK"(II$d2vkXL41Rr)8D#B#" ѿR.6_:CP#{"u6YVMUYtOiBp9)Y=eM%[EgGa`;c-mY ,{v.JvM6;T$p L@KI¤tR8|7IrD8״H`J @l ?ZY/ۇhq W ОIī},hA0NG3úz: j4mZ`Rqri\b^^`/hҒXKMi%+{AC**D(tGVw2E F]Ӹ8-iE`ıpto.:}Jfh.Tظxq6@[.`h''2RDr@eh3珟0zeWX[!z?>Ȯo8UU5Sӧ\۟ 1͛afݽ"mUr4>oh1{Y-\#mQQ4DV3DiAD!ɢI)U-l9z5mq}Z (@SX=ڞ}n<\)Ynpn_oWh?Jt'٦e~(efrz,S@2lhEH:}ZQ+Bkt &l$ݺxzsfj˫
+pӧZ':! jQ Ro$9Qrzu|wMI$B : ȡ~Ӹ*C'@.ЖE[$*6ev魪w٤-DUDh"93S%BW]
+a}}dEK .VK@RǸ BKpErՁUfLN]apm
+ ՘Y&*}`&Ke{z6BS%iT
+^Rp_UER_^VseAhIQx|K0d7CL( g':Oa1}}ъGruBw F̺)C HhEN(Ñ_Ϫz߱ tP{˘0QQG@h kںoC(=܃,b
+9sTGeY!rvWO
+endstream
+endobj
+7007 0 obj
+<< /Type /Page /Contents 7008 0 R /Resources 7006 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 6800 0 R >>
+endobj
+7009 0 obj
+<< /D [ 7007 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+7010 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+7011 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+7012 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+7013 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+7014 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+7015 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+7016 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+7017 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+7018 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+7019 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+7020 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+7021 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+7022 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+7023 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 626.366 null ] >>
+endobj
+7024 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 615.407 null ] >>
+endobj
+7025 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 574.56 null ] >>
+endobj
+7026 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 563.601 null ] >>
+endobj
+7027 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 552.642 null ] >>
+endobj
+7028 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 499.84 null ] >>
+endobj
+7029 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 488.882 null ] >>
+endobj
+7030 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 477.923 null ] >>
+endobj
+7031 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 466.964 null ] >>
+endobj
+7032 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 456.005 null ] >>
+endobj
+7033 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 445.046 null ] >>
+endobj
+7034 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 434.087 null ] >>
+endobj
+7035 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 423.128 null ] >>
+endobj
+7036 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 412.169 null ] >>
+endobj
+7037 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 401.21 null ] >>
+endobj
+7038 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 390.251 null ] >>
+endobj
+7039 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 379.292 null ] >>
+endobj
+7040 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 368.334 null ] >>
+endobj
+7041 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 357.375 null ] >>
+endobj
+7042 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 346.416 null ] >>
+endobj
+7043 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 335.457 null ] >>
+endobj
+7044 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 324.498 null ] >>
+endobj
+7045 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 271.696 null ] >>
+endobj
+7046 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 260.737 null ] >>
+endobj
+7047 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 249.778 null ] >>
+endobj
+7048 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 238.819 null ] >>
+endobj
+7049 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 227.86 null ] >>
+endobj
+7050 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 216.901 null ] >>
+endobj
+7051 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 205.943 null ] >>
+endobj
+7052 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 194.984 null ] >>
+endobj
+7053 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 184.025 null ] >>
+endobj
+7054 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 173.066 null ] >>
+endobj
+7055 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 162.107 null ] >>
+endobj
+7056 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 151.148 null ] >>
+endobj
+7057 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 140.189 null ] >>
+endobj
+7058 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 129.23 null ] >>
+endobj
+7059 0 obj
+<< /D [ 7007 0 R /XYZ 81.077 118.271 null ] >>
+endobj
+7006 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F77 542 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+7062 0 obj
+<< /Filter /FlateDecode /Length 2277 >>
+stream
+xZ]o8}00+ ovЙv lv!Ȏh"K,7{)TL>DC^^^{YYůopwͻ^h%|q}C^E$K-]f Xt[Ud$j<Q},W\ HXE۪(%1hSviymEa }6&>K{ml<&.Fs>`HqB
+"8xt FE*y$due<du9zE_duS a>{IO˗O7*3cEwá|WV,;ڏ2F~>__IY>dJa2l.ڍ"I#D$cLDh(x0悿 tHW̔)b3~ $"t>jɡI5O
+Wx3a%mcN('RIۧ}xQj188ɛ^:[RAEČz0{V b) ǠґjQUyAqܕF]kv}P=nS?/DlDm:aFL
+RI"~Cxx5Lp$#\h$#T~PٿE/.$±juUͯ-
+B
+1Jj"t]]^}>Rv'<EWƈQ̽K2D}RljAꌚ|B!b}b^Uw
+N]E+ۧ|/oMnCMîna}K4F\MؾjԜPIK/vd۴~Tј!7'l(ryulOT {љ$}N~UCY%8^q 4nPaCb$MFా]tp>!HP m*u*/O-E<D@r% rCnBۼLL3|9, {y| xY OaL\{eHL"C#dyd-)=DM:oMajO\3 E.B s%CԔgFa>x&z}
+endstream
+endobj
+7061 0 obj
+<< /Type /Page /Contents 7062 0 R /Resources 7060 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 6800 0 R >>
+endobj
+7063 0 obj
+<< /D [ 7061 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+7064 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 712.584 null ] >>
+endobj
+7065 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 701.625 null ] >>
+endobj
+7066 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 672.734 null ] >>
+endobj
+7067 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 661.775 null ] >>
+endobj
+7068 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 650.816 null ] >>
+endobj
+7069 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 639.857 null ] >>
+endobj
+7070 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 628.898 null ] >>
+endobj
+7071 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 617.939 null ] >>
+endobj
+7072 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 606.98 null ] >>
+endobj
+7073 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 591.04 null ] >>
+endobj
+7074 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 580.081 null ] >>
+endobj
+7075 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 569.122 null ] >>
+endobj
+7076 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 558.163 null ] >>
+endobj
+7077 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 515.324 null ] >>
+endobj
+7078 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 504.365 null ] >>
+endobj
+7079 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 493.406 null ] >>
+endobj
+7080 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 482.447 null ] >>
+endobj
+7081 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 417.69 null ] >>
+endobj
+7082 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 406.731 null ] >>
+endobj
+7083 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 395.772 null ] >>
+endobj
+7084 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 384.814 null ] >>
+endobj
+7085 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 373.855 null ] >>
+endobj
+7086 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 362.896 null ] >>
+endobj
+7087 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 351.937 null ] >>
+endobj
+7088 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 340.978 null ] >>
+endobj
+7089 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 330.019 null ] >>
+endobj
+7090 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 319.06 null ] >>
+endobj
+7091 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 308.101 null ] >>
+endobj
+7092 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 267.254 null ] >>
+endobj
+7093 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 256.295 null ] >>
+endobj
+7094 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 245.337 null ] >>
+endobj
+7095 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 234.378 null ] >>
+endobj
+7096 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 223.419 null ] >>
+endobj
+7097 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 212.46 null ] >>
+endobj
+7098 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 201.501 null ] >>
+endobj
+7099 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 190.542 null ] >>
+endobj
+7100 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 179.583 null ] >>
+endobj
+7101 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 168.624 null ] >>
+endobj
+7102 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 157.665 null ] >>
+endobj
+7103 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 146.706 null ] >>
+endobj
+7104 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 135.748 null ] >>
+endobj
+7105 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 124.789 null ] >>
+endobj
+7106 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 113.83 null ] >>
+endobj
+7107 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 102.871 null ] >>
+endobj
+7108 0 obj
+<< /D [ 7061 0 R /XYZ 81.077 91.912 null ] >>
+endobj
+7060 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F79 736 0 R /F19 184 0 R /F20 186 0 R /F69 304 0 R /F68 189 0 R /F64 183 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+7111 0 obj
+<< /Filter /FlateDecode /Length 1694 >>
+stream
+xڽZnF}Wn/Z)
+)8Fwɪ:^K˷)Nm'u1Dw|dH@*-mnpyj:oycPxIpX™_q,U ;'#D5MxJn/t YDhtkTr[@ۯ] :f?]Ia ϯnK8 8B?5 829#&RD}s((NF #Ɖ{l?gn58ȴ`uӞ
+!A?r8MuZ] ?SEoo%ps ʷSsӈؠG/#W8`1ee˦1f9;5pZ!b} [
+VRj},(EnW|;)Tሄ:dVMUY*k<Eg'qCY0<e߲~B9؅]DV0>lWc |},U
+cm)n~Y_74}/Fu:M+BXm~iK lH0*D0_~t;%4?4 PDF's0? Qhއ=eE0wfPb/& %a~c
+t8!uI:֥_[gXM"_!O[( %B"76 /ij̮={i7sidP`Ǹ&Rzf2)>Be4+oҎ+V ћ +q~B3"v,?=>Z9`tᱜh5N~*cf/v&IOO;1hM Nal]7荮lZL뙤ę]+*aY۞
+endstream
+endobj
+7110 0 obj
+<< /Type /Page /Contents 7111 0 R /Resources 7109 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 6800 0 R >>
+endobj
+7112 0 obj
+<< /D [ 7110 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+7113 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+7114 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+7115 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+7116 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+7117 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+7118 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+7119 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+7120 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+7121 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+7122 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+7123 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+7124 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+7125 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+7126 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 626.366 null ] >>
+endobj
+7127 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 615.407 null ] >>
+endobj
+7128 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 604.448 null ] >>
+endobj
+7129 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 593.489 null ] >>
+endobj
+7130 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 582.53 null ] >>
+endobj
+7131 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 571.571 null ] >>
+endobj
+7132 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 560.613 null ] >>
+endobj
+7133 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 549.654 null ] >>
+endobj
+7134 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 538.695 null ] >>
+endobj
+7135 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 527.736 null ] >>
+endobj
+7136 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 516.777 null ] >>
+endobj
+7137 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 505.818 null ] >>
+endobj
+7138 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 472.941 null ] >>
+endobj
+7139 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 461.982 null ] >>
+endobj
+7140 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 451.023 null ] >>
+endobj
+7141 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 440.065 null ] >>
+endobj
+7142 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 429.106 null ] >>
+endobj
+7143 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 418.147 null ] >>
+endobj
+7144 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 407.188 null ] >>
+endobj
+7145 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 396.229 null ] >>
+endobj
+7146 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 385.27 null ] >>
+endobj
+7147 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 374.311 null ] >>
+endobj
+7148 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 363.352 null ] >>
+endobj
+7149 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 352.393 null ] >>
+endobj
+7150 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 309.554 null ] >>
+endobj
+7151 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 298.595 null ] >>
+endobj
+7152 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 287.636 null ] >>
+endobj
+7153 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 276.677 null ] >>
+endobj
+7154 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 265.718 null ] >>
+endobj
+7155 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 254.759 null ] >>
+endobj
+7156 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 243.801 null ] >>
+endobj
+7157 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 232.842 null ] >>
+endobj
+7158 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 221.883 null ] >>
+endobj
+7159 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 210.924 null ] >>
+endobj
+7160 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 199.965 null ] >>
+endobj
+7161 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 189.006 null ] >>
+endobj
+7162 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 178.047 null ] >>
+endobj
+7163 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 167.088 null ] >>
+endobj
+7164 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 156.129 null ] >>
+endobj
+7165 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 145.17 null ] >>
+endobj
+7166 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 134.212 null ] >>
+endobj
+7167 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 123.253 null ] >>
+endobj
+7168 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 112.294 null ] >>
+endobj
+7169 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 101.335 null ] >>
+endobj
+7170 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 90.376 null ] >>
+endobj
+7171 0 obj
+<< /D [ 7110 0 R /XYZ 81.077 79.417 null ] >>
+endobj
+7109 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+7174 0 obj
+<< /Filter /FlateDecode /Length 4401 >>
+stream
+x]mo#9r_|I<ə|' \p`[+KIٹRr[ME0kTU.cn3{5. şn.fyǥ_pPjf| 3ά1|v8Ht 1otؘKϴۻ+-?ƥ:zyt _y/Dq
+Z77"' VZQ:W2mߪqr۶u腇i~>6աp˄9W
+&60aLׅCw=\ؔA??<>L66'i):IGqIs|Z1
+KE*Ey媞Gb]߶qeUUXǽbWS0.*_M:vBGZ뛔x=]7azXg/ϼҊ `y??(Ʉ^˺xuv\-ϻX`'N<3)4G,TIz&i|}w]o;a/6A.Py}i@s vO^gz=ڻsaeug#]
+@j$)0^e@YU3+-kѽ\I;v20 _DqCʔ߈A{m^=z@
+?r@)2SIX
+.IN+fޘ$: qiq+ ] *jc$s ."LX87I2c+Av5e&;9QabBEt2`hV;jIB$8 6Cj9cHv߿wwWh_oXڹ9Q;Vȡ. n`Ϗj*B40޴&fD'i=' E.KzHƲ_<F ūTX9LE!|;c^ < t8BI$.԰SY$Br߃E"XY)~'0an^cfU9"_iޟCYf1<:AI|'С 4Q
+>? hOϧ Wޝ7'r+ߏ=ϕ= T@=@g[O%?]~)P璃.P ?icOZ@UDouK'lK4h`K/%f\40%|3 }SLjCgA)H&{$]1}:0ᅹk>>b7GzQHx}m[#r>bmt>Xl8|}$#FFI5x0X3a;nh9 Tp{93!Ɔ5+|EDK9nvW{sP83n7 g$ Ӧ„a!\{
+;DQQEÍ Hr LvW vInR|E`HΆPSbGBƻqi I.}D:r!X ~+EYtaґiKpX-C(X s9i/ʑ .vr92SvQ&0[A[PbxtA
+|
+9.-#V DZ3RqDw OvWPvģ a(%x4ғ& tR\K WHF '2VpyD<&23!~ QtG]¯RQ Qt: 3$I a!9o%"H@\7x冒4
+|$,%ChG`SjKB$=.-\!a-%D(5HZG&jMe
+m.p!Łc }mw1~uXm7=C
+ҬЈu ],6m
+s{{X룃oZf4bVkzn 5޷wR(LiwfPݙF_;ܙ .v>z6?.ԚwpM8Lpe#|E-(J7/܈kp]O᷌ĦBKOuͯǃ1_kvjry7*jl2>>-vfJ(-0?7c|飩+ oo©L5Q37 E]
+endstream
+endobj
+7173 0 obj
+<< /Type /Page /Contents 7174 0 R /Resources 7172 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 6800 0 R >>
+endobj
+7175 0 obj
+<< /D [ 7173 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+7176 0 obj
+<< /D [ 7173 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+7177 0 obj
+<< /D [ 7173 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+7178 0 obj
+<< /D [ 7173 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+7179 0 obj
+<< /D [ 7173 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+7180 0 obj
+<< /D [ 7173 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+7181 0 obj
+<< /D [ 7173 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+7182 0 obj
+<< /D [ 7173 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+7183 0 obj
+<< /D [ 7173 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+7184 0 obj
+<< /D [ 7173 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+7185 0 obj
+<< /D [ 7173 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+7186 0 obj
+<< /D [ 7173 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+7187 0 obj
+<< /D [ 7173 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+7188 0 obj
+<< /D [ 7173 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+7189 0 obj
+<< /D [ 7173 0 R /XYZ 81.077 626.366 null ] >>
+endobj
+7190 0 obj
+<< /D [ 7173 0 R /XYZ 81.077 615.407 null ] >>
+endobj
+7191 0 obj
+<< /D [ 7173 0 R /XYZ 81.077 604.448 null ] >>
+endobj
+7192 0 obj
+<< /D [ 7173 0 R /XYZ 81.077 593.489 null ] >>
+endobj
+7193 0 obj
+<< /D [ 7173 0 R /XYZ 81.077 582.53 null ] >>
+endobj
+7194 0 obj
+<< /D [ 7173 0 R /XYZ 81.077 571.571 null ] >>
+endobj
+7195 0 obj
+<< /D [ 7173 0 R /XYZ 81.077 560.613 null ] >>
+endobj
+7196 0 obj
+<< /D [ 7173 0 R /XYZ 81.077 549.654 null ] >>
+endobj
+7197 0 obj
+<< /D [ 7173 0 R /XYZ 81.077 538.695 null ] >>
+endobj
+7198 0 obj
+<< /D [ 7173 0 R /XYZ 81.077 527.736 null ] >>
+endobj
+7199 0 obj
+<< /D [ 7173 0 R /XYZ 81.077 516.777 null ] >>
+endobj
+7200 0 obj
+<< /D [ 7173 0 R /XYZ 81.077 505.818 null ] >>
+endobj
+7201 0 obj
+<< /D [ 7173 0 R /XYZ 81.077 494.859 null ] >>
+endobj
+7202 0 obj
+<< /D [ 7173 0 R /XYZ 81.077 483.9 null ] >>
+endobj
+7203 0 obj
+<< /D [ 7173 0 R /XYZ 81.077 472.941 null ] >>
+endobj
+7204 0 obj
+<< /D [ 7173 0 R /XYZ 81.077 461.982 null ] >>
+endobj
+7205 0 obj
+<< /D [ 7173 0 R /XYZ 81.077 451.023 null ] >>
+endobj
+7206 0 obj
+<< /D [ 7173 0 R /XYZ 81.077 440.065 null ] >>
+endobj
+7207 0 obj
+<< /D [ 7173 0 R /XYZ 81.077 206.468 null ] >>
+endobj
+7208 0 obj
+<< /D [ 7173 0 R /XYZ 81.077 195.509 null ] >>
+endobj
+7209 0 obj
+<< /D [ 7173 0 R /XYZ 81.077 184.55 null ] >>
+endobj
+7210 0 obj
+<< /D [ 7173 0 R /XYZ 81.077 173.591 null ] >>
+endobj
+7211 0 obj
+<< /D [ 7173 0 R /XYZ 81.077 162.633 null ] >>
+endobj
+7212 0 obj
+<< /D [ 7173 0 R /XYZ 81.077 151.674 null ] >>
+endobj
+7213 0 obj
+<< /D [ 7173 0 R /XYZ 81.077 140.715 null ] >>
+endobj
+7214 0 obj
+<< /D [ 7173 0 R /XYZ 81.077 129.756 null ] >>
+endobj
+7215 0 obj
+<< /D [ 7173 0 R /XYZ 81.077 118.797 null ] >>
+endobj
+7216 0 obj
+<< /D [ 7173 0 R /XYZ 81.077 107.838 null ] >>
+endobj
+7217 0 obj
+<< /D [ 7173 0 R /XYZ 81.077 96.879 null ] >>
+endobj
+7218 0 obj
+<< /D [ 7173 0 R /XYZ 81.077 85.92 null ] >>
+endobj
+7172 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F34 1792 0 R /F27 642 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+7221 0 obj
+<< /Filter /FlateDecode /Length 2424 >>
+stream
+xZ[o~ϯ[mtM@}C!۴YJr.3!)Ѣb-[~9<O“O~?Jr/BN8R0:__'d"$ ,~7u*Hg? |"!0BW*͛殜]'4׊iyg{xvM^ڻVTH0"zd
+CiQU<_}91bt-"LF8"q"r(YqjݽeU4z.ۊ QSc0})En/3ɦU=f :kq'CgwήTƧ3Nq'liw4cZ4.UމQJ3J܅E-͓ͨ욫dzTյ^yUZO%Ѥ Ff#ŬqXUmkoNi<ydtU)(KIɬ9鶚O*$į:3f ٵ'(.Ժ9`H_JGk6nky[t1'8Z` /0r
+n$ĉƦ-P7sݲ"u-QjNe%EotC6plt7;Ӳ:p0FybT8?ߟJB;n!_ͼԏ}]QkȎAnh2ʕs(?:'ږ7zM}MpX}E Opra~6;Z
+CyOnb:چ=Z|3Jȅ"b3+(ay+ ܡ䉪3O`&Ǽn}LM" ΧM6H|dvdNvJH&2A863>QK@Lv
+Y]yHL1ęH
+G
+=?WB?de z'f:+x阄x),Poo^6#3lGZ8ņ<jgʈ@ViCuo,N xnB8">Oρ/i U@jR$VqByOA%*S =_zK˻I
+AO'mi<7]5ȘAs2VjM6c^j'm1n_lKY
+
+@<(ۗ
+endstream
+endobj
+7220 0 obj
+<< /Type /Page /Contents 7221 0 R /Resources 7219 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 6800 0 R >>
+endobj
+7222 0 obj
+<< /D [ 7220 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+7223 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+7224 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+7225 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+7226 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 704.075 null ] >>
+endobj
+7227 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 693.116 null ] >>
+endobj
+7228 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 682.157 null ] >>
+endobj
+7229 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 671.198 null ] >>
+endobj
+7230 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 660.239 null ] >>
+endobj
+7231 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 649.28 null ] >>
+endobj
+7232 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 638.321 null ] >>
+endobj
+7233 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 627.362 null ] >>
+endobj
+7234 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 616.403 null ] >>
+endobj
+7235 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 605.444 null ] >>
+endobj
+7236 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 594.486 null ] >>
+endobj
+7237 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 583.527 null ] >>
+endobj
+7238 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 572.568 null ] >>
+endobj
+7239 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 561.609 null ] >>
+endobj
+7240 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 550.65 null ] >>
+endobj
+7241 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 539.691 null ] >>
+endobj
+7242 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 528.732 null ] >>
+endobj
+7243 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 475.93 null ] >>
+endobj
+7244 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 464.971 null ] >>
+endobj
+7245 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 454.012 null ] >>
+endobj
+7246 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 401.21 null ] >>
+endobj
+7247 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 390.251 null ] >>
+endobj
+7248 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 379.292 null ] >>
+endobj
+7249 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 368.334 null ] >>
+endobj
+7250 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 357.375 null ] >>
+endobj
+7251 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 346.416 null ] >>
+endobj
+7252 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 335.457 null ] >>
+endobj
+7253 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 324.498 null ] >>
+endobj
+7254 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 313.539 null ] >>
+endobj
+7255 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 302.58 null ] >>
+endobj
+7256 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 291.621 null ] >>
+endobj
+7257 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 280.662 null ] >>
+endobj
+7258 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 269.703 null ] >>
+endobj
+7259 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 258.745 null ] >>
+endobj
+7260 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 247.786 null ] >>
+endobj
+7261 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 236.827 null ] >>
+endobj
+7262 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 225.868 null ] >>
+endobj
+7263 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 161.111 null ] >>
+endobj
+7264 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 150.152 null ] >>
+endobj
+7265 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 139.193 null ] >>
+endobj
+7266 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 128.234 null ] >>
+endobj
+7267 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 117.275 null ] >>
+endobj
+7268 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 106.316 null ] >>
+endobj
+7269 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 95.357 null ] >>
+endobj
+7270 0 obj
+<< /D [ 7220 0 R /XYZ 81.077 84.398 null ] >>
+endobj
+7219 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F70 305 0 R /F77 542 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+7273 0 obj
+<< /Filter /FlateDecode /Length 2306 >>
+stream
+xڥZmo8_a_܆廤
+'4R~[ȜypR;mt]UQa}`},|9L\Fiqf>3$4􅌏b'D)7j[?`+]F$2d6AGtrF"H/%
+E(JNdh
+ _sln u+3^ 5_?w1ۢ(lL@ ?Qƹ|؎M̗EaWK_xhmw5_LA2o!wU0>b102F9X]I3@]&l?9~r`ف".6E|úwrl.Z|b^{ W.a>d ɔ
+}K&E=bW=:e;RR!
+ͨOJhڏ@&eG9C2BEoP ;WjP%덪\y7Hc جPoho4.ČKN_f,̱Zlwe_>cJ&ƛ?I&Ht >20[^Ĩns2>U@1C#4ʕxhK2),ʓhuM,Uј5{AݙCh9M6نqr ANo|>/h:fEL#2NL݇ůKYé}C@l*XV\$@~n.r#}wl?Ml_qL\|8b|voOs
+endstream
+endobj
+7272 0 obj
+<< /Type /Page /Contents 7273 0 R /Resources 7271 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 7320 0 R >>
+endobj
+7274 0 obj
+<< /D [ 7272 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+7275 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+7276 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+7277 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+7278 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+7279 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+7280 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+7281 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+7282 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 668.209 null ] >>
+endobj
+7283 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 633.34 null ] >>
+endobj
+7284 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 622.381 null ] >>
+endobj
+7285 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 611.422 null ] >>
+endobj
+7286 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 600.463 null ] >>
+endobj
+7287 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 589.504 null ] >>
+endobj
+7288 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 578.545 null ] >>
+endobj
+7289 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 567.586 null ] >>
+endobj
+7290 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 556.627 null ] >>
+endobj
+7291 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 545.669 null ] >>
+endobj
+7292 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 529.728 null ] >>
+endobj
+7293 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 513.788 null ] >>
+endobj
+7294 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 502.829 null ] >>
+endobj
+7295 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 486.889 null ] >>
+endobj
+7296 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 475.93 null ] >>
+endobj
+7297 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 464.971 null ] >>
+endobj
+7298 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 454.012 null ] >>
+endobj
+7299 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 443.053 null ] >>
+endobj
+7300 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 432.094 null ] >>
+endobj
+7301 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 421.136 null ] >>
+endobj
+7302 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 410.177 null ] >>
+endobj
+7303 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 399.218 null ] >>
+endobj
+7304 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 388.259 null ] >>
+endobj
+7305 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 377.3 null ] >>
+endobj
+7306 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 366.341 null ] >>
+endobj
+7307 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 355.382 null ] >>
+endobj
+7308 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 344.423 null ] >>
+endobj
+7309 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 333.464 null ] >>
+endobj
+7310 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 322.505 null ] >>
+endobj
+7311 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 222.43 null ] >>
+endobj
+7312 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 211.471 null ] >>
+endobj
+7313 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 200.512 null ] >>
+endobj
+7314 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 189.553 null ] >>
+endobj
+7315 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 178.594 null ] >>
+endobj
+7316 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 167.635 null ] >>
+endobj
+7317 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 156.676 null ] >>
+endobj
+7318 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 89.927 null ] >>
+endobj
+7319 0 obj
+<< /D [ 7272 0 R /XYZ 81.077 78.968 null ] >>
+endobj
+7271 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F65 185 0 R /F79 736 0 R /F69 304 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+7323 0 obj
+<< /Filter /FlateDecode /Length 1920 >>
+stream
+xڽZn}Wh}1$^d",YDYPBQ3LoOH55=y(un]m:zWtIw2#Ia&+E#&/c%u0! Kec뛄'Luۤ<͗9]>_2K˼m&::SJ5ñ糞eV^C0)<m߀77y3y&'^с.ymzon`۪BQER^BT[Y}#u[/Ӳ罡nyuږQ6!j:OƈxeϓM,;0`imߺﻏκ7κzRhng-;D g)(,@\Zmy\0ۿCk8!:)+7yM>ۇJOm6|EBL⫓f8!:? U3 8!:fLW&-pCg706j_ٴq e>"4:m&ɇRNiNWMlNW14ki KY,Dw=# 
+ӊ0cuY7GEIN,魹@ZxGHXz0M\3lW]s0^cc Tæk" Ǻ.]~NYYڧg_i)=*-,23Ogp\lM+0(BvTn뫇EBb~YK/Ck"_b~0y[(7荇9GvcflrJ˅X0g7n\J־1
+G!Dw8Smjs.M x*T>F=D3$&2v>m͗AyJEvz-D2)oOҖlO@#O7Eպ
+::rSŪ,E³]^~xjn[`PfV%
+7/Zxf|cw˯ {FSb?%L`
+L]<!n!c
+endstream
+endobj
+7322 0 obj
+<< /Type /Page /Contents 7323 0 R /Resources 7321 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 7320 0 R >>
+endobj
+7324 0 obj
+<< /D [ 7322 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+7325 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+7326 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+7327 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+7328 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+7329 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+7330 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+7331 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+7332 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 687.459 null ] >>
+endobj
+7333 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 676.5 null ] >>
+endobj
+7334 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 665.541 null ] >>
+endobj
+7335 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 654.582 null ] >>
+endobj
+7336 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 643.623 null ] >>
+endobj
+7337 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 632.664 null ] >>
+endobj
+7338 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 621.705 null ] >>
+endobj
+7339 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 610.746 null ] >>
+endobj
+7340 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 599.787 null ] >>
+endobj
+7341 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 568.193 null ] >>
+endobj
+7342 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 557.234 null ] >>
+endobj
+7343 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 514.875 null ] >>
+endobj
+7344 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 503.916 null ] >>
+endobj
+7345 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 492.957 null ] >>
+endobj
+7346 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 477.338 null ] >>
+endobj
+7347 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 466.379 null ] >>
+endobj
+7348 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 455.42 null ] >>
+endobj
+7349 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 444.461 null ] >>
+endobj
+7350 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 433.502 null ] >>
+endobj
+7351 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 422.543 null ] >>
+endobj
+7352 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 411.584 null ] >>
+endobj
+7353 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 400.625 null ] >>
+endobj
+7354 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 389.666 null ] >>
+endobj
+7355 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 378.707 null ] >>
+endobj
+7356 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 367.749 null ] >>
+endobj
+7357 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 356.79 null ] >>
+endobj
+7358 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 345.831 null ] >>
+endobj
+7359 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 334.872 null ] >>
+endobj
+7360 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 323.913 null ] >>
+endobj
+7361 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 312.954 null ] >>
+endobj
+7362 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 301.995 null ] >>
+endobj
+7363 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 291.036 null ] >>
+endobj
+7364 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 280.077 null ] >>
+endobj
+7365 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 269.118 null ] >>
+endobj
+7366 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 258.159 null ] >>
+endobj
+7367 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 247.201 null ] >>
+endobj
+7368 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 236.242 null ] >>
+endobj
+7369 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 181.928 null ] >>
+endobj
+7370 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 170.969 null ] >>
+endobj
+7371 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 160.01 null ] >>
+endobj
+7372 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 149.051 null ] >>
+endobj
+7373 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 138.092 null ] >>
+endobj
+7374 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 127.133 null ] >>
+endobj
+7375 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 116.174 null ] >>
+endobj
+7376 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 105.216 null ] >>
+endobj
+7377 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+7378 0 obj
+<< /D [ 7322 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+7321 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+7381 0 obj
+<< /Filter /FlateDecode /Length 2636 >>
+stream
+x[[۸~ϯ0
+t
+ F_-8NZ̫}c|UmYŧV#2E8azo?\훶.tFEF<:F7XkmUMwy>ktkUvs}ߠx7.a.Ղw̑B j`˼ͫjeJYf2kHgN^ue*s+fVLaB,A:'(J )bˋ
+O
+OVmV,I҃ _ (ņhDj@} <) 3K7!ѸPrSbM\ [ O-!ҰP>|M†`c@/ߗ]9 뺮8
+W_֩$1IhTEPOWJ!NחaaZRv*kF۪<h'+b(f(&@$( ?S|KD@ZISLn$( \I8!}=& {( c۸=#]$<g2E\ȸ =H|" ާ2RߝObA'Qx(ǎ!$
+O< ҫ.-e%oȷȠwe: YVι۶_˗ { Ӿjn4rU`fV],U_ALMgDt׺e̡ekqΝdlLt-H܃,ۓo*%døֻZ7ƱuX]WS]Z
+Ϻm_݄ݿaNIG $C1oN@F␙>314DY8ѭD
+sCLd"A%>YWC@qz@ [3!B=Cס$
+R
+/N|k߄rQLn;JQHP˲3J9bĈq+?B)# e!p߮C!j@<PpN Xal*dDJ4  0=S(=|qa5 F
+?gfkKt7gj-YE?kN dmvn.]} t' mc, ; 蝝'f
+8 MU*{fbn4ha6/{a36Ε1fwXta̶ڝHҝ;PCݬH=)J23gxk8q9s`TJ
+H
+ϷftD4PĒ1%M@lЯ
+X+pׯwe'z?L15Ӫ8OSmۼpF ܤ?!aLrM$IDl {˪~@= ;؜۝H'm[C2_[0̵0֎dv$XuGLsCU3CĽ\@`qµCRj|kSs QJUAG4N& o4 B;v./1.LjRAȃ=*+wJdU<ti~K*!yut*G"#u(6~[+:0fM[üWO;I,Cݾ]j̡wDqkDaB0jL_ԗ&h/e %t.Sէ
+endstream
+endobj
+7380 0 obj
+<< /Type /Page /Contents 7381 0 R /Resources 7379 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 7320 0 R >>
+endobj
+7382 0 obj
+<< /D [ 7380 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+7383 0 obj
+<< /D [ 7380 0 R /XYZ 81.077 719.208 null ] >>
+endobj
+7384 0 obj
+<< /D [ 7380 0 R /XYZ 81.077 708.249 null ] >>
+endobj
+7385 0 obj
+<< /D [ 7380 0 R /XYZ 81.077 697.291 null ] >>
+endobj
+7386 0 obj
+<< /D [ 7380 0 R /XYZ 81.077 686.332 null ] >>
+endobj
+7387 0 obj
+<< /D [ 7380 0 R /XYZ 81.077 675.373 null ] >>
+endobj
+7388 0 obj
+<< /D [ 7380 0 R /XYZ 81.077 664.414 null ] >>
+endobj
+7389 0 obj
+<< /D [ 7380 0 R /XYZ 81.077 653.455 null ] >>
+endobj
+7390 0 obj
+<< /D [ 7380 0 R /XYZ 81.077 642.496 null ] >>
+endobj
+7391 0 obj
+<< /D [ 7380 0 R /XYZ 81.077 631.537 null ] >>
+endobj
+7392 0 obj
+<< /D [ 7380 0 R /XYZ 81.077 620.578 null ] >>
+endobj
+7393 0 obj
+<< /D [ 7380 0 R /XYZ 81.077 609.619 null ] >>
+endobj
+7394 0 obj
+<< /D [ 7380 0 R /XYZ 81.077 598.66 null ] >>
+endobj
+7395 0 obj
+<< /D [ 7380 0 R /XYZ 81.077 587.702 null ] >>
+endobj
+7396 0 obj
+<< /D [ 7380 0 R /XYZ 81.077 576.743 null ] >>
+endobj
+7397 0 obj
+<< /D [ 7380 0 R /XYZ 81.077 565.784 null ] >>
+endobj
+7398 0 obj
+<< /D [ 7380 0 R /XYZ 81.077 554.825 null ] >>
+endobj
+7399 0 obj
+<< /D [ 7380 0 R /XYZ 81.077 543.866 null ] >>
+endobj
+7400 0 obj
+<< /D [ 7380 0 R /XYZ 81.077 532.907 null ] >>
+endobj
+7401 0 obj
+<< /D [ 7380 0 R /XYZ 81.077 521.948 null ] >>
+endobj
+7402 0 obj
+<< /D [ 7380 0 R /XYZ 81.077 481.481 null ] >>
+endobj
+7403 0 obj
+<< /D [ 7380 0 R /XYZ 81.077 470.522 null ] >>
+endobj
+7404 0 obj
+<< /D [ 7380 0 R /XYZ 81.077 459.563 null ] >>
+endobj
+7405 0 obj
+<< /D [ 7380 0 R /XYZ 81.077 406.098 null ] >>
+endobj
+7406 0 obj
+<< /D [ 7380 0 R /XYZ 81.077 395.139 null ] >>
+endobj
+7407 0 obj
+<< /D [ 7380 0 R /XYZ 81.077 384.18 null ] >>
+endobj
+7408 0 obj
+<< /D [ 7380 0 R /XYZ 81.077 373.221 null ] >>
+endobj
+7409 0 obj
+<< /D [ 7380 0 R /XYZ 81.077 362.262 null ] >>
+endobj
+7410 0 obj
+<< /D [ 7380 0 R /XYZ 81.077 351.303 null ] >>
+endobj
+7411 0 obj
+<< /D [ 7380 0 R /XYZ 81.077 340.344 null ] >>
+endobj
+7412 0 obj
+<< /D [ 7380 0 R /XYZ 81.077 329.385 null ] >>
+endobj
+7413 0 obj
+<< /D [ 7380 0 R /XYZ 81.077 318.426 null ] >>
+endobj
+7414 0 obj
+<< /D [ 7380 0 R /XYZ 81.077 307.467 null ] >>
+endobj
+7415 0 obj
+<< /D [ 7380 0 R /XYZ 81.077 296.509 null ] >>
+endobj
+7416 0 obj
+<< /D [ 7380 0 R /XYZ 81.077 285.55 null ] >>
+endobj
+7417 0 obj
+<< /D [ 7380 0 R /XYZ 81.077 220.129 null ] >>
+endobj
+7418 0 obj
+<< /D [ 7380 0 R /XYZ 81.077 209.17 null ] >>
+endobj
+7419 0 obj
+<< /D [ 7380 0 R /XYZ 81.077 168.703 null ] >>
+endobj
+7420 0 obj
+<< /D [ 7380 0 R /XYZ 81.077 157.744 null ] >>
+endobj
+7421 0 obj
+<< /D [ 7380 0 R /XYZ 81.077 146.785 null ] >>
+endobj
+7379 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R /F70 305 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+7424 0 obj
+<< /Filter /FlateDecode /Length 1881 >>
+stream
+xڭZnF}WȋF_ -
+
+5AӴM"ΊԒ:F͋)<s9Cnft /'?.Oޝk;Y&ly}":c3fff4#Tr5k/ Yv
+fbG&d&U~˳.:XW IdWIYTp NZQ(a#;gn
+Ge~H
+$8-_(v/R"G 5.ۧhmeR۸V%҆Z-Gm3I_wg~ۜlA /uWz Ci
+L¯9Kzy:ܬz ,Mew`,1Z/nmQo}?ӇvyEΡBEK_WC/[b\bd1-*-334F`*^
+
+Tω{ ]%ۼ:k>AYҶ .ўzFs7ݦ0tn{'5+t5't9n%#Uf j>D$Ff,JFh;v$Brz1Z0E]t=¯[SGpM:9zNC ۢY{Kz(jx^/*BQa9Bwu54lKȭ8ۑl/4H1Nxˊ9>&%"4޶04Ә_y%x;!&Fkqnѥ_0E̡B.Ng+]/DsXQ)h  P!C;}-D:ᦌ9]UWaEO^~ԶiZ<] TWA`9[>8q)A9
+?Pj8BG>ZpԄjpS#S h.8w,MشWG-s3R58`_MSMC7h1`Lkz`?20  >,G+a`mȣ%xE6EC{oM>zoLw{ZmʮXEVt +hʚ0QzsYzcTזhZf2`Pai S41I:ƽ݋xiMoY q/"465۶+"4ڶ0Y0{,e0`) E 7)Lg+ﺜg _ai
+endstream
+endobj
+7423 0 obj
+<< /Type /Page /Contents 7424 0 R /Resources 7422 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 7320 0 R >>
+endobj
+7425 0 obj
+<< /D [ 7423 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+7426 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+7427 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+7428 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 728.721 null ] >>
+endobj
+7429 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 717.762 null ] >>
+endobj
+7430 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 706.803 null ] >>
+endobj
+7431 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 695.844 null ] >>
+endobj
+7432 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 684.886 null ] >>
+endobj
+7433 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 673.927 null ] >>
+endobj
+7434 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 662.968 null ] >>
+endobj
+7435 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 652.009 null ] >>
+endobj
+7436 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 641.05 null ] >>
+endobj
+7437 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 630.091 null ] >>
+endobj
+7438 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 619.132 null ] >>
+endobj
+7439 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 608.173 null ] >>
+endobj
+7440 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 597.214 null ] >>
+endobj
+7441 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 586.255 null ] >>
+endobj
+7442 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 575.296 null ] >>
+endobj
+7443 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 535.605 null ] >>
+endobj
+7444 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 524.646 null ] >>
+endobj
+7445 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 513.687 null ] >>
+endobj
+7446 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 502.728 null ] >>
+endobj
+7447 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 491.769 null ] >>
+endobj
+7448 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 480.81 null ] >>
+endobj
+7449 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 469.851 null ] >>
+endobj
+7450 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 458.892 null ] >>
+endobj
+7451 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 447.933 null ] >>
+endobj
+7452 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 436.975 null ] >>
+endobj
+7453 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 426.016 null ] >>
+endobj
+7454 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 415.057 null ] >>
+endobj
+7455 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 404.098 null ] >>
+endobj
+7456 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 393.139 null ] >>
+endobj
+7457 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 382.18 null ] >>
+endobj
+7458 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 371.221 null ] >>
+endobj
+7459 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 360.262 null ] >>
+endobj
+7460 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 345.477 null ] >>
+endobj
+7461 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 334.518 null ] >>
+endobj
+7462 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 323.559 null ] >>
+endobj
+7463 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 312.6 null ] >>
+endobj
+7464 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 301.641 null ] >>
+endobj
+7465 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 290.682 null ] >>
+endobj
+7466 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 279.724 null ] >>
+endobj
+7467 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 268.765 null ] >>
+endobj
+7468 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 257.806 null ] >>
+endobj
+7469 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 246.847 null ] >>
+endobj
+7470 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 235.888 null ] >>
+endobj
+7471 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 224.929 null ] >>
+endobj
+7472 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 213.97 null ] >>
+endobj
+7473 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 203.011 null ] >>
+endobj
+7474 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 192.052 null ] >>
+endobj
+7475 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 181.093 null ] >>
+endobj
+7476 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 170.135 null ] >>
+endobj
+7477 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 159.176 null ] >>
+endobj
+7478 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 148.217 null ] >>
+endobj
+7479 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 137.258 null ] >>
+endobj
+7480 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 126.299 null ] >>
+endobj
+7481 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 115.34 null ] >>
+endobj
+7482 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+7483 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+7484 0 obj
+<< /D [ 7423 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+7422 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F30 644 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+7487 0 obj
+<< /Filter /FlateDecode /Length 1919 >>
+stream
+xZMs6W<|4L;M&=[-H II3]D(Ub-(:YL :\|-KZN._0xA'lX"IM.䀘3!Ĵu] OEMeQn_ 8}H3$2>0!2]
+6%X2XtV4%cp
+dcgl*OLm6F;9\G*-'F0E$4FІa!šy8EkP") *X
+cnYK?ץ_XRH771!9EAE=TʃWIB>g8_ѱK@| 9*Dhla[*nF!4,$#bSDӰ1q*Fm%Zoe)#u訌! M6e=l2 [E|ˬ^:f^juͶna_MPT91lk=55bz{"4w{SNRJI$r˷wﻼZ{m
+u9+]17ZyW1+}K#DaYftpX~7dQE
+ \ۇ
+1TayY,~Q7G׍˚z9x_Ґ$L,%_ĘblG p%qhH1)eT#Fc;JNΤכ<9c9u׫> nU|.tw<
+6 RX;5쭹Pf:uu8 cxugT8uU~B͉@wñD)W+ Y{E
+F"H+':{ަU~̪Ue@6\Jo\ZL*7ݞWϧM_pUg1G'c0x (7UdU
+'QE[bT(@U
+(Mц9$ [*?E
+[jT$xCHLPD(B?›N*3dliP/BM'Q[Y<Ur( JP¸b)' a\*,2D]@6L
+y'BekIF}މGǴ]Scz$;NO bL
+(BX"JP$Bb,:depc3M(R2#(%Th
+qmFk
+endstream
+endobj
+7486 0 obj
+<< /Type /Page /Contents 7487 0 R /Resources 7485 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 7320 0 R >>
+endobj
+7488 0 obj
+<< /D [ 7486 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+7489 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 754.884 null ] >>
+endobj
+7490 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 743.925 null ] >>
+endobj
+7491 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 732.966 null ] >>
+endobj
+7492 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 722.007 null ] >>
+endobj
+7493 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 711.048 null ] >>
+endobj
+7494 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 700.089 null ] >>
+endobj
+7495 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 689.131 null ] >>
+endobj
+7496 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 678.172 null ] >>
+endobj
+7497 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 667.213 null ] >>
+endobj
+7498 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 656.254 null ] >>
+endobj
+7499 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 645.295 null ] >>
+endobj
+7500 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 634.336 null ] >>
+endobj
+7501 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 623.377 null ] >>
+endobj
+7502 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 607.437 null ] >>
+endobj
+7503 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 596.478 null ] >>
+endobj
+7504 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 502.38 null ] >>
+endobj
+7505 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 491.421 null ] >>
+endobj
+7506 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 480.462 null ] >>
+endobj
+7507 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 469.503 null ] >>
+endobj
+7508 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 458.544 null ] >>
+endobj
+7509 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 447.585 null ] >>
+endobj
+7510 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 436.626 null ] >>
+endobj
+7511 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 425.667 null ] >>
+endobj
+7512 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 414.709 null ] >>
+endobj
+7513 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 403.75 null ] >>
+endobj
+7514 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 392.791 null ] >>
+endobj
+7515 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 381.832 null ] >>
+endobj
+7516 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 370.873 null ] >>
+endobj
+7517 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 359.914 null ] >>
+endobj
+7518 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 331.022 null ] >>
+endobj
+7519 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 320.063 null ] >>
+endobj
+7520 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 309.105 null ] >>
+endobj
+7521 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 298.146 null ] >>
+endobj
+7522 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 287.187 null ] >>
+endobj
+7523 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 276.228 null ] >>
+endobj
+7524 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 265.269 null ] >>
+endobj
+7525 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 254.31 null ] >>
+endobj
+7526 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 243.351 null ] >>
+endobj
+7527 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 232.392 null ] >>
+endobj
+7528 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 221.433 null ] >>
+endobj
+7529 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 210.474 null ] >>
+endobj
+7530 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 199.516 null ] >>
+endobj
+7531 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 188.557 null ] >>
+endobj
+7532 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 172.616 null ] >>
+endobj
+7533 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 161.658 null ] >>
+endobj
+7534 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 150.699 null ] >>
+endobj
+7535 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 139.74 null ] >>
+endobj
+7536 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 128.781 null ] >>
+endobj
+7537 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 117.822 null ] >>
+endobj
+7538 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 106.863 null ] >>
+endobj
+7539 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 95.904 null ] >>
+endobj
+7540 0 obj
+<< /D [ 7486 0 R /XYZ 81.077 84.945 null ] >>
+endobj
+7485 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R /F79 736 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+7543 0 obj
+<< /Filter /FlateDecode /Length 2016 >>
+stream
+xڽZ[o6~ϯ00/2:ay/n1`RY P,v
+AX-<l0=$eJtGt;? 9<<gxwE?KfiE]ߞgdDΤ  2!\
+Žl9M6xDPei,QCtl,d ѲƈliM-ڬ*EW,/!:߽˺O*ڮ*Y׋
+<y'mԈK#Q ѲBO~IABmXzOB&RR1¢#@ǻ$'PRCt#yŎ X
+ݗ8F
+)_8O|q VV9X"+Bf L@D/:n С닦J wk:"J7F4A$ғ,1M>x*o7x~ԽcXa|qEC?
+R9P؎ۣ8> eYک%L&f,mb=6`ر?wc]QT] HQz 6!ڭ;蟲[uWǿ@`~ŠP<ˑXD5cs نq-J`Mq0L!şzxhH4C]`s 
+endstream
+endobj
+7542 0 obj
+<< /Type /Page /Contents 7543 0 R /Resources 7541 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 7320 0 R >>
+endobj
+7544 0 obj
+<< /D [ 7542 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+7545 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+7546 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+7547 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+7548 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+7549 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+7550 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+7551 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 698.209 null ] >>
+endobj
+7552 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 687.25 null ] >>
+endobj
+7553 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 676.291 null ] >>
+endobj
+7554 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 665.332 null ] >>
+endobj
+7555 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 654.373 null ] >>
+endobj
+7556 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 643.415 null ] >>
+endobj
+7557 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 632.456 null ] >>
+endobj
+7558 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 621.497 null ] >>
+endobj
+7559 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 610.538 null ] >>
+endobj
+7560 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 599.579 null ] >>
+endobj
+7561 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 588.62 null ] >>
+endobj
+7562 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 577.661 null ] >>
+endobj
+7563 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 566.702 null ] >>
+endobj
+7564 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 555.743 null ] >>
+endobj
+7565 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 544.784 null ] >>
+endobj
+97 0 obj
+<< /D [ 7542 0 R /XYZ 79.37 519.666 null ] >>
+endobj
+7566 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 410.997 null ] >>
+endobj
+7567 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 400.038 null ] >>
+endobj
+7568 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 357.367 null ] >>
+endobj
+7569 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 346.408 null ] >>
+endobj
+7570 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 335.449 null ] >>
+endobj
+7571 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 324.49 null ] >>
+endobj
+7572 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 313.531 null ] >>
+endobj
+7573 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 302.572 null ] >>
+endobj
+7574 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 291.613 null ] >>
+endobj
+7575 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 280.654 null ] >>
+endobj
+7576 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 269.695 null ] >>
+endobj
+7577 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 258.736 null ] >>
+endobj
+7578 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 247.778 null ] >>
+endobj
+7579 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 236.819 null ] >>
+endobj
+7580 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 225.86 null ] >>
+endobj
+7581 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 214.901 null ] >>
+endobj
+7582 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 203.942 null ] >>
+endobj
+7583 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 192.983 null ] >>
+endobj
+7584 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 164.204 null ] >>
+endobj
+7585 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 153.245 null ] >>
+endobj
+7586 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+7587 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+7588 0 obj
+<< /D [ 7542 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+7541 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F67 187 0 R /F19 184 0 R /F20 186 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+7591 0 obj
+<< /Filter /FlateDecode /Length 2081 >>
+stream
+xڽZM60Cmf-ҽ-zޚPYre9mޡHQuLwBY#3C{Lq'E<߿tíT"N77: ($&$K2N~ 
+i)
+DfџgsAa|_<]]jrմuKh[c ~5pxXNiD8&)xN*Ds&1*b[' $ӈt |lwgs4 5|'wv[cSalb~i,,S2_׼uLudCTM{П0)w{Q5I]!^Tи9,cnh6OFC_!<|.ֶ3׿^.
+#9N#sL!Σ)d3:'-jέٜ]LZx`~&eֲ?gFp 196M9V>/JN V/;!>/+K]bbL^eΐxz~K =gp>d[nߡt^֨aLn{~.H;bqe}d͉l{eB;vYB̥/b"ֿ`lNe#:kOEm?o>۴8W
+pwp!_דCbΫ{c8w׮8.oHJGFw"GFrdxL}e;jLfj˨0&Mb)r.UWw0)=i3޶̵ܵµ2y@V~,PFJ9RC)H%CiWuޕ)UVLp98@2= 9Hy
+-E;hȝyU`~9M7?vCJIn[xԍbp;nvyѴv߃j~M*w)`ۦ-ɐmfճk`jisXv9v
+,Ȍ܍r(1eF0?TSP0w]|h<҅pR3J0}ELъ~2>kyȰ7'uQ4z|r@z_v-ӌ@uM^Z"vgp>nfc6uhSb 4QxY&[ 2d;X+Ӭ у]uKhZɷ\`DXz4C.XeFoɷE1+J6П
+1^BJW@M
+-|EqUI(v,&
+i1L )
+*kD
+i=|Зz@yNTaLГ|+]g)0vrG y˒{N)Xq]>^q)0*J[j~B4~)K?D@3yxZ! H$lNV~Kio.+I=.},-BtL">^K4B((񎒧Iosn.6N:`}"vRNT*1x;Aw\%:' 4Z7\'bрr*Zgq
+endstream
+endobj
+7590 0 obj
+<< /Type /Page /Contents 7591 0 R /Resources 7589 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 7320 0 R >>
+endobj
+7592 0 obj
+<< /D [ 7590 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+7593 0 obj
+<< /D [ 7590 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+7594 0 obj
+<< /D [ 7590 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+7595 0 obj
+<< /D [ 7590 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+7596 0 obj
+<< /D [ 7590 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+7597 0 obj
+<< /D [ 7590 0 R /XYZ 81.077 580.538 null ] >>
+endobj
+7598 0 obj
+<< /D [ 7590 0 R /XYZ 81.077 569.579 null ] >>
+endobj
+7599 0 obj
+<< /D [ 7590 0 R /XYZ 81.077 490.874 null ] >>
+endobj
+7600 0 obj
+<< /D [ 7590 0 R /XYZ 81.077 479.915 null ] >>
+endobj
+7601 0 obj
+<< /D [ 7590 0 R /XYZ 81.077 468.956 null ] >>
+endobj
+7602 0 obj
+<< /D [ 7590 0 R /XYZ 81.077 457.997 null ] >>
+endobj
+7603 0 obj
+<< /D [ 7590 0 R /XYZ 81.077 447.038 null ] >>
+endobj
+7604 0 obj
+<< /D [ 7590 0 R /XYZ 81.077 436.08 null ] >>
+endobj
+7605 0 obj
+<< /D [ 7590 0 R /XYZ 81.077 425.121 null ] >>
+endobj
+7606 0 obj
+<< /D [ 7590 0 R /XYZ 81.077 414.162 null ] >>
+endobj
+7607 0 obj
+<< /D [ 7590 0 R /XYZ 81.077 403.203 null ] >>
+endobj
+7608 0 obj
+<< /D [ 7590 0 R /XYZ 81.077 392.244 null ] >>
+endobj
+7609 0 obj
+<< /D [ 7590 0 R /XYZ 81.077 381.285 null ] >>
+endobj
+7610 0 obj
+<< /D [ 7590 0 R /XYZ 81.077 370.326 null ] >>
+endobj
+7611 0 obj
+<< /D [ 7590 0 R /XYZ 81.077 359.367 null ] >>
+endobj
+7612 0 obj
+<< /D [ 7590 0 R /XYZ 81.077 348.408 null ] >>
+endobj
+7613 0 obj
+<< /D [ 7590 0 R /XYZ 81.077 337.449 null ] >>
+endobj
+7614 0 obj
+<< /D [ 7590 0 R /XYZ 81.077 326.49 null ] >>
+endobj
+7615 0 obj
+<< /D [ 7590 0 R /XYZ 81.077 315.532 null ] >>
+endobj
+7616 0 obj
+<< /D [ 7590 0 R /XYZ 81.077 304.573 null ] >>
+endobj
+7617 0 obj
+<< /D [ 7590 0 R /XYZ 81.077 275.681 null ] >>
+endobj
+7618 0 obj
+<< /D [ 7590 0 R /XYZ 81.077 264.722 null ] >>
+endobj
+7619 0 obj
+<< /D [ 7590 0 R /XYZ 81.077 253.763 null ] >>
+endobj
+7620 0 obj
+<< /D [ 7590 0 R /XYZ 81.077 242.804 null ] >>
+endobj
+7621 0 obj
+<< /D [ 7590 0 R /XYZ 81.077 231.845 null ] >>
+endobj
+7622 0 obj
+<< /D [ 7590 0 R /XYZ 81.077 220.887 null ] >>
+endobj
+7623 0 obj
+<< /D [ 7590 0 R /XYZ 81.077 209.928 null ] >>
+endobj
+7624 0 obj
+<< /D [ 7590 0 R /XYZ 81.077 198.969 null ] >>
+endobj
+7625 0 obj
+<< /D [ 7590 0 R /XYZ 81.077 188.01 null ] >>
+endobj
+7626 0 obj
+<< /D [ 7590 0 R /XYZ 81.077 177.051 null ] >>
+endobj
+7627 0 obj
+<< /D [ 7590 0 R /XYZ 81.077 166.092 null ] >>
+endobj
+7628 0 obj
+<< /D [ 7590 0 R /XYZ 81.077 155.133 null ] >>
+endobj
+7629 0 obj
+<< /D [ 7590 0 R /XYZ 81.077 144.174 null ] >>
+endobj
+7630 0 obj
+<< /D [ 7590 0 R /XYZ 81.077 133.215 null ] >>
+endobj
+7631 0 obj
+<< /D [ 7590 0 R /XYZ 81.077 122.256 null ] >>
+endobj
+7632 0 obj
+<< /D [ 7590 0 R /XYZ 81.077 111.297 null ] >>
+endobj
+7633 0 obj
+<< /D [ 7590 0 R /XYZ 81.077 100.339 null ] >>
+endobj
+7634 0 obj
+<< /D [ 7590 0 R /XYZ 81.077 89.38 null ] >>
+endobj
+7589 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F78 654 0 R /F27 642 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+7637 0 obj
+<< /Filter /FlateDecode /Length 1840 >>
+stream
+xڭZKoWF~hQW(HJqR#rȑeG&91gkDg3:v׏wW|bn\ :c303o7,n!m|W,n84rv~rWFE%h;Y&f4*9FQN
+*ɶMہ6Vbey[p.ףXY"Z 2Fs%_%p ͏V'cM3&Z_ q2F-Lpb%i!F1[6vXnмp=16hctg/cWcEm 0fѴsE;B  q. +3l\8hP`׫%jgD蠥lS) T+Vx(M
+>COtΣ"ti'E(QIE(^
+bn8ҿVzUf,Xv$v
+U/Hbؼg՗/U 3;hRI3{3n[jEs0fQΑ2 \WU n}<og)؟A+{>]T-7ٴ@i9kXXw)J}ݦUna;}
+A)Hdr#2<1Fм7Vu׈گSgaEcnI(Wt)ЗG FqVCza&&h]aϫCYN<YΗ2
+D"!h׍L5č@ڠcyfwy*a1ÅXcYׯY旲%!r8 ]$BA 0!۲zs}c>4yVf!9,dh)/gypY9<
+rGYs0;ژtJߑg_ꮺPO9^{#4sU{)6tΝ\s\2Fמ;ADw'O.՞$3kQ\L Bow.\ w:=NC.#紧/e|8tsۉГ[ЪajNUѴI; eӶܫS($r87s$B8eS
+׍!iQuX1-]<k"y/"c6ۤ$u}ʂC LiX.SUʚ+Ҿ6R?FE31]ϭ|ڦm#H驦ǝ/?UzL_hAd}*UO½ ГL9M̏}7>%';[@3[vt^?<
+endstream
+endobj
+7636 0 obj
+<< /Type /Page /Contents 7637 0 R /Resources 7635 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 7320 0 R >>
+endobj
+7638 0 obj
+<< /D [ 7636 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+7639 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 755.624 null ] >>
+endobj
+7640 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 744.665 null ] >>
+endobj
+7641 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 717.253 null ] >>
+endobj
+7642 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 706.294 null ] >>
+endobj
+7643 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 695.335 null ] >>
+endobj
+7644 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 684.376 null ] >>
+endobj
+7645 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 673.417 null ] >>
+endobj
+7646 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 662.458 null ] >>
+endobj
+7647 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 651.499 null ] >>
+endobj
+7648 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 640.54 null ] >>
+endobj
+7649 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 629.582 null ] >>
+endobj
+7650 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 618.623 null ] >>
+endobj
+7651 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 607.664 null ] >>
+endobj
+7652 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 596.705 null ] >>
+endobj
+7653 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 585.746 null ] >>
+endobj
+7654 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 574.787 null ] >>
+endobj
+7655 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 563.828 null ] >>
+endobj
+7656 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 552.869 null ] >>
+endobj
+7657 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 541.91 null ] >>
+endobj
+7658 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 530.951 null ] >>
+endobj
+7659 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 519.992 null ] >>
+endobj
+7660 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 509.034 null ] >>
+endobj
+7661 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 498.075 null ] >>
+endobj
+7662 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 487.116 null ] >>
+endobj
+7663 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 476.157 null ] >>
+endobj
+7664 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 415.838 null ] >>
+endobj
+7665 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 404.879 null ] >>
+endobj
+7666 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 393.921 null ] >>
+endobj
+7667 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 382.962 null ] >>
+endobj
+7668 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 372.003 null ] >>
+endobj
+7669 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 361.044 null ] >>
+endobj
+7670 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 350.085 null ] >>
+endobj
+7671 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 339.126 null ] >>
+endobj
+7672 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 324.665 null ] >>
+endobj
+7673 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 313.706 null ] >>
+endobj
+7674 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 302.748 null ] >>
+endobj
+7675 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 291.789 null ] >>
+endobj
+7676 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 280.83 null ] >>
+endobj
+7677 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 269.871 null ] >>
+endobj
+7678 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 258.912 null ] >>
+endobj
+7679 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 247.953 null ] >>
+endobj
+7680 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 236.994 null ] >>
+endobj
+7681 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 226.035 null ] >>
+endobj
+7682 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 215.076 null ] >>
+endobj
+7683 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 204.117 null ] >>
+endobj
+7684 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 193.158 null ] >>
+endobj
+7685 0 obj
+<< /D [ 7636 0 R /XYZ 81.077 182.2 null ] >>
+endobj
+101 0 obj
+<< /D [ 7636 0 R /XYZ 79.37 161.184 null ] >>
+endobj
+7635 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F68 189 0 R /F64 183 0 R /F20 186 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+7688 0 obj
+<< /Filter /FlateDecode /Length 1996 >>
+stream
+xڽZ[~_"(*#."( $@&qʲ-,`{E=^ilb~"j'?ሄ9ߟn~ݼy/Մ# <!%$$aI&ߑu<.
+J \
+ĩS)>f#c*\7~fEk q
+0m `act0_HFɖA|ewJ͊g?VNOu+@^ជCjsSAaF@b&AD졍e󲝯2_#ad&+$,hx_ ث6YdBHcKY|7Z7)hhǙ~J pJ 3d<1Nڀ>oڻt a 0zpe >,]]Wz#fS \S0 $D1v̔^5wIEV?TAp^ZBL+}ZJ Aݗ_Jylv/O(0B# M#J f/:R^J ri-ko_q(=9Ŏ) [1:\68F,4<tl"5(D:\6ݖdC?_jb\m2mcežTK{=C%.=a!B!2z0dV:o{-HM }g۟oYADɑf0ӣ35MYVuʣ`!&]\D=S&=4U ,nz Rd}[\4^"; lq$f1Aڜ0$"Yn]I/gzѠKdfy%:Rlg>3/: /)HpqHY.ê~ Y2[%飩7{dIrvBp$FP<J#}D=J ]_bžuǤ?e|ي$X|qɦ$gi<L |^SJ|U٧ E|a,tD迻?VI͵O(}=*
+LDnw԰:)Wy4v£|詪ĭ(;JC1sGx`VUQ5#<p
+JJ<Dم?0RTi>Fsh+*=BU:`<g.g4НUfo_v5Yɩܝwmc&`Xc 'U|Q:|=!LUlL !݆/&6A5v5WC]ٻUi\S3g<M
+jk*?Ώ
+7 .Qal<tZfY,5mP0dAgA5~>NRBY"|}7 v
+endstream
+endobj
+7687 0 obj
+<< /Type /Page /Contents 7688 0 R /Resources 7686 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 7320 0 R >>
+endobj
+7689 0 obj
+<< /D [ 7687 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+7690 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+7691 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 727.985 null ] >>
+endobj
+7692 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 717.026 null ] >>
+endobj
+7693 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 706.067 null ] >>
+endobj
+7694 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 695.108 null ] >>
+endobj
+7695 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 684.149 null ] >>
+endobj
+7696 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 673.19 null ] >>
+endobj
+7697 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 662.231 null ] >>
+endobj
+7698 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 651.273 null ] >>
+endobj
+7699 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 640.314 null ] >>
+endobj
+7700 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 609.429 null ] >>
+endobj
+7701 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 598.471 null ] >>
+endobj
+7702 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 587.512 null ] >>
+endobj
+7703 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 576.553 null ] >>
+endobj
+7704 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 565.594 null ] >>
+endobj
+7705 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 554.635 null ] >>
+endobj
+7706 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 543.676 null ] >>
+endobj
+7707 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 532.717 null ] >>
+endobj
+7708 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 521.758 null ] >>
+endobj
+7709 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 510.799 null ] >>
+endobj
+7710 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 499.84 null ] >>
+endobj
+7711 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 488.882 null ] >>
+endobj
+7712 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 477.923 null ] >>
+endobj
+7713 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 466.964 null ] >>
+endobj
+7714 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 456.005 null ] >>
+endobj
+7715 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 445.046 null ] >>
+endobj
+7716 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 434.087 null ] >>
+endobj
+7717 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 423.128 null ] >>
+endobj
+7718 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 412.169 null ] >>
+endobj
+7719 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 351.397 null ] >>
+endobj
+7720 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 340.438 null ] >>
+endobj
+7721 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 299.591 null ] >>
+endobj
+7722 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 288.632 null ] >>
+endobj
+7723 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 277.674 null ] >>
+endobj
+7724 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 266.715 null ] >>
+endobj
+7725 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 255.756 null ] >>
+endobj
+7726 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 244.797 null ] >>
+endobj
+7727 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 233.838 null ] >>
+endobj
+7728 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 222.879 null ] >>
+endobj
+7729 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 211.92 null ] >>
+endobj
+7730 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 183.028 null ] >>
+endobj
+7731 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 172.07 null ] >>
+endobj
+7732 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 161.111 null ] >>
+endobj
+7733 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 150.152 null ] >>
+endobj
+7734 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 139.193 null ] >>
+endobj
+7735 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 128.234 null ] >>
+endobj
+7736 0 obj
+<< /D [ 7687 0 R /XYZ 81.077 117.275 null ] >>
+endobj
+105 0 obj
+<< /D [ 7687 0 R /XYZ 79.37 105.768 null ] >>
+endobj
+7686 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+7739 0 obj
+<< /Filter /FlateDecode /Length 2659 >>
+stream
+xZIoW--} @4@D@A(J7!)#=.EQM
+@@Tg2 %LQD k2͚[o82Z"I@"GKydq
+moo՞ԬR {+ ȡg,'$Nkb}ԗ^ԢtmbX{*s\a'ͪ8q8LmAU%O:,2I8r@GDj<нe"Iri^ɼX>+I,]% +@Nas$P]
+5+('<BB-Q0J(_{ vLuz*z^DC1s);E% Bʀ 8|Z9²BrW_ώ xȎ Wx nM%:7<B<X!"d. /9I.(q
+G81tGEN.DЁĚj8#4#vKais|~GzAyEtI!sɎ)NT@UvfdLXs~hH@Sy^WQ!hw7tO sU)qև{Ǝ9 HZ\3Qʪ(i+y7ȥL5G.AR隅e"J|\I!B
+5mC:-vP鮫ݿVr{&[\C}M 
+7|W3
+.34Wχw]Vmv"]RA,#t^4Z`i;g^W/w|G zr;8}+ߥ$M1}]GJ"4w$pNPc,M1zdݡ|cy)$HdL! !bM8 H yB$FHHP0R%9m^3B9?gC"5Ҵ$R0FDxHBT&M1G,Cтp ӔJ˳z)$;*&Efxa<Xڍۍl߫e޴y8GVOݑFWbO
+VnӸ3 l'zf< R4) D@C<<Ri$"l^4K3:M=$%t.m Iټ֞A]Nd&Lڊ]/u
+endstream
+endobj
+7738 0 obj
+<< /Type /Page /Contents 7739 0 R /Resources 7737 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 7320 0 R >>
+endobj
+7740 0 obj
+<< /D [ 7738 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+7741 0 obj
+<< /D [ 7738 0 R /XYZ 81.077 720.555 null ] >>
+endobj
+7742 0 obj
+<< /D [ 7738 0 R /XYZ 81.077 709.596 null ] >>
+endobj
+7743 0 obj
+<< /D [ 7738 0 R /XYZ 81.077 644.839 null ] >>
+endobj
+7744 0 obj
+<< /D [ 7738 0 R /XYZ 81.077 633.88 null ] >>
+endobj
+7745 0 obj
+<< /D [ 7738 0 R /XYZ 81.077 622.921 null ] >>
+endobj
+7746 0 obj
+<< /D [ 7738 0 R /XYZ 81.077 611.962 null ] >>
+endobj
+7747 0 obj
+<< /D [ 7738 0 R /XYZ 81.077 601.003 null ] >>
+endobj
+7748 0 obj
+<< /D [ 7738 0 R /XYZ 81.077 590.044 null ] >>
+endobj
+7749 0 obj
+<< /D [ 7738 0 R /XYZ 81.077 579.085 null ] >>
+endobj
+7750 0 obj
+<< /D [ 7738 0 R /XYZ 81.077 568.126 null ] >>
+endobj
+7751 0 obj
+<< /D [ 7738 0 R /XYZ 81.077 557.167 null ] >>
+endobj
+7752 0 obj
+<< /D [ 7738 0 R /XYZ 81.077 546.208 null ] >>
+endobj
+7753 0 obj
+<< /D [ 7738 0 R /XYZ 81.077 308.101 null ] >>
+endobj
+7754 0 obj
+<< /D [ 7738 0 R /XYZ 81.077 297.142 null ] >>
+endobj
+7755 0 obj
+<< /D [ 7738 0 R /XYZ 81.077 286.183 null ] >>
+endobj
+7756 0 obj
+<< /D [ 7738 0 R /XYZ 81.077 275.225 null ] >>
+endobj
+7757 0 obj
+<< /D [ 7738 0 R /XYZ 81.077 264.266 null ] >>
+endobj
+7758 0 obj
+<< /D [ 7738 0 R /XYZ 81.077 253.307 null ] >>
+endobj
+7759 0 obj
+<< /D [ 7738 0 R /XYZ 81.077 242.348 null ] >>
+endobj
+7760 0 obj
+<< /D [ 7738 0 R /XYZ 81.077 231.389 null ] >>
+endobj
+7761 0 obj
+<< /D [ 7738 0 R /XYZ 81.077 220.43 null ] >>
+endobj
+7762 0 obj
+<< /D [ 7738 0 R /XYZ 81.077 209.471 null ] >>
+endobj
+7763 0 obj
+<< /D [ 7738 0 R /XYZ 81.077 198.512 null ] >>
+endobj
+7764 0 obj
+<< /D [ 7738 0 R /XYZ 81.077 187.553 null ] >>
+endobj
+7765 0 obj
+<< /D [ 7738 0 R /XYZ 81.077 176.594 null ] >>
+endobj
+7766 0 obj
+<< /D [ 7738 0 R /XYZ 81.077 165.636 null ] >>
+endobj
+7767 0 obj
+<< /D [ 7738 0 R /XYZ 81.077 154.677 null ] >>
+endobj
+7768 0 obj
+<< /D [ 7738 0 R /XYZ 81.077 143.718 null ] >>
+endobj
+7769 0 obj
+<< /D [ 7738 0 R /XYZ 81.077 114.826 null ] >>
+endobj
+7770 0 obj
+<< /D [ 7738 0 R /XYZ 81.077 103.867 null ] >>
+endobj
+7771 0 obj
+<< /D [ 7738 0 R /XYZ 81.077 92.908 null ] >>
+endobj
+7772 0 obj
+<< /D [ 7738 0 R /XYZ 81.077 81.949 null ] >>
+endobj
+7737 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F67 187 0 R /F19 184 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R /F30 644 0 R /F81 798 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+7775 0 obj
+<< /Filter /FlateDecode /Length 2120 >>
+stream
+xZKoϯ)uo d7aN s =T[Yq1_U}6]|\ŏop`n\-#,fj-յtxm<{Oa8A Ǹ!Ԫ|r J9,B+\,f9aѱGwW,\]suoU8eouٝ[:q[u~&bij+"&Ʋܽ\\i8}kE2htQ`Yn.Cܔ;_e]8<]ujp\׻B$2v!LCV(`FG
+vܚ>t<(}ί 奪]UuL7?@5}J.7|x㗋4Hs--#L_Δ%wǏePP>j/ڮn&ŗ̔ B|o.JC_*jd|_.ǁlDO pJC ZsbtΛOÂ C&)lR5_T/Жbm):
+tj=F]M:qq+`fKJl>Гn[?|ed/8/|9 vR^Li໧~ ۮ\îZk|.j'E𤙬Ľ)P87ӄsW6ʑٕ{q*(mɋySE@RzƙPQp%G *T2$OYzlTy(1Oey*/Syy#ʉVyٰ8A窼QyTǺkQ?/}|A|9S uQîxh;\ޡb<EOԔ8DV('\tF0.u NTX~!-%BI"Ч1G]Ȍ*@
+6?aqp CX Co-@$LtsT87 jS:"\<LOc~_&;M}_(𛶬
+; ;n<M|\EÀe5 |擌d~wa0T3%<SpJp9:4UhTջ}͸+?Ox("`}(3&-МѥgR
+v|&SF?Uqoίw*Ko=d&J.,h471*J9Jfq+\wxHC6 0f4~w|3۲+몮G5A;KSXEգm?Wl[mB9W(ۦ1-‚+\|ѿUc`tۙh2?n
+endstream
+endobj
+7774 0 obj
+<< /Type /Page /Contents 7775 0 R /Resources 7773 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 7827 0 R >>
+endobj
+7776 0 obj
+<< /D [ 7774 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+7777 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 743.371 null ] >>
+endobj
+7778 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 732.412 null ] >>
+endobj
+7779 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 721.453 null ] >>
+endobj
+7780 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 681.491 null ] >>
+endobj
+7781 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 670.533 null ] >>
+endobj
+7782 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 659.574 null ] >>
+endobj
+7783 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 648.615 null ] >>
+endobj
+7784 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 637.656 null ] >>
+endobj
+7785 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 626.697 null ] >>
+endobj
+7786 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 615.738 null ] >>
+endobj
+7787 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 604.779 null ] >>
+endobj
+7788 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 593.82 null ] >>
+endobj
+7789 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 553.858 null ] >>
+endobj
+7790 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 542.899 null ] >>
+endobj
+7791 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 531.94 null ] >>
+endobj
+7792 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 520.982 null ] >>
+endobj
+7793 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 510.023 null ] >>
+endobj
+7794 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 499.064 null ] >>
+endobj
+7795 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 488.105 null ] >>
+endobj
+7796 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 477.146 null ] >>
+endobj
+7797 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 466.187 null ] >>
+endobj
+7798 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 455.228 null ] >>
+endobj
+7799 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 444.269 null ] >>
+endobj
+7800 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 404.307 null ] >>
+endobj
+7801 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 393.348 null ] >>
+endobj
+7802 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 382.389 null ] >>
+endobj
+7803 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 371.43 null ] >>
+endobj
+7804 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 360.472 null ] >>
+endobj
+7805 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 349.513 null ] >>
+endobj
+7806 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 338.554 null ] >>
+endobj
+7807 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 327.595 null ] >>
+endobj
+7808 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 316.636 null ] >>
+endobj
+7809 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 305.677 null ] >>
+endobj
+7810 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 294.718 null ] >>
+endobj
+7811 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 283.759 null ] >>
+endobj
+7812 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 272.8 null ] >>
+endobj
+7813 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 261.841 null ] >>
+endobj
+7814 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 250.883 null ] >>
+endobj
+7815 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 239.924 null ] >>
+endobj
+7816 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 228.965 null ] >>
+endobj
+7817 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 218.006 null ] >>
+endobj
+7818 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 207.047 null ] >>
+endobj
+7819 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 196.088 null ] >>
+endobj
+7820 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 185.129 null ] >>
+endobj
+7821 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 133.431 null ] >>
+endobj
+7822 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 122.473 null ] >>
+endobj
+7823 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+7824 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+7825 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+7826 0 obj
+<< /D [ 7774 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+7773 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F30 644 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+7831 0 obj
+<< /Filter /FlateDecode /Length 2259 >>
+stream
+xZ[o6~ϯ[e4~`;<n>X-<n1}EGL2X>$&%}wHRCp7I 2Jo IAL%J%I/]*}^pcG[ɡ,eʾPY]Ti b8Ce:] ! t7煦MUgz@s30Q[{۷rth'`*mtLDt c,},v;WvMeK|hUMUB]w-ժHlb$` N820:-$` 팑J@|
+;.t,@ #dĮñcgP*۹[+'qU.Jsr,,{mR(횴dD2I<_7X>ᐫ}d<p,?80JyaA0LŠWdv2^¿|pv<xi%=+ba¶-YBcдtb>BV$ 㥖yRo ZC]a 1FQϘD
+݉ޘjXu5m0$5 _R 9J =%{>a%c:o1! sDgc׳6?,?du].(~t 8QN:9Y;cyz$n} = z}nW bk<]NGWG]O/4GBtJ)M3>B#ftyitș &@zlWh)Hg \ST"̤k-s1~(DR#{"WLʸ7nh4)I>s1S
+Tn3$=jg @_Cd"0}$
+endstream
+endobj
+7830 0 obj
+<< /Type /Page /Contents 7831 0 R /Resources 7829 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 7827 0 R /Annots 7876 0 R >>
+endobj
+7876 0 obj
+[ 7828 0 R ]
+endobj
+7828 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 228.711 666.471 239.144 678.408 ]/A << /S /GoTo /D (Hfootnote.14) >> >>
+endobj
+7832 0 obj
+<< /D [ 7830 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+7833 0 obj
+<< /D [ 7830 0 R /XYZ 81.077 742.929 null ] >>
+endobj
+7834 0 obj
+<< /D [ 7830 0 R /XYZ 81.077 731.97 null ] >>
+endobj
+7835 0 obj
+<< /D [ 7830 0 R /XYZ 81.077 721.011 null ] >>
+endobj
+7836 0 obj
+<< /D [ 7830 0 R /XYZ 81.077 710.052 null ] >>
+endobj
+7837 0 obj
+<< /D [ 7830 0 R /XYZ 81.077 627.362 null ] >>
+endobj
+7838 0 obj
+<< /D [ 7830 0 R /XYZ 81.077 616.403 null ] >>
+endobj
+7839 0 obj
+<< /D [ 7830 0 R /XYZ 81.077 605.444 null ] >>
+endobj
+7840 0 obj
+<< /D [ 7830 0 R /XYZ 81.077 594.486 null ] >>
+endobj
+7841 0 obj
+<< /D [ 7830 0 R /XYZ 81.077 583.527 null ] >>
+endobj
+7842 0 obj
+<< /D [ 7830 0 R /XYZ 81.077 572.568 null ] >>
+endobj
+7843 0 obj
+<< /D [ 7830 0 R /XYZ 81.077 561.609 null ] >>
+endobj
+7844 0 obj
+<< /D [ 7830 0 R /XYZ 81.077 550.65 null ] >>
+endobj
+7845 0 obj
+<< /D [ 7830 0 R /XYZ 81.077 539.691 null ] >>
+endobj
+7846 0 obj
+<< /D [ 7830 0 R /XYZ 81.077 528.732 null ] >>
+endobj
+7847 0 obj
+<< /D [ 7830 0 R /XYZ 81.077 517.773 null ] >>
+endobj
+7848 0 obj
+<< /D [ 7830 0 R /XYZ 81.077 501.833 null ] >>
+endobj
+7849 0 obj
+<< /D [ 7830 0 R /XYZ 81.077 490.874 null ] >>
+endobj
+7850 0 obj
+<< /D [ 7830 0 R /XYZ 81.077 479.915 null ] >>
+endobj
+7851 0 obj
+<< /D [ 7830 0 R /XYZ 81.077 468.956 null ] >>
+endobj
+7852 0 obj
+<< /D [ 7830 0 R /XYZ 81.077 457.997 null ] >>
+endobj
+7853 0 obj
+<< /D [ 7830 0 R /XYZ 81.077 447.038 null ] >>
+endobj
+7854 0 obj
+<< /D [ 7830 0 R /XYZ 81.077 404.199 null ] >>
+endobj
+7855 0 obj
+<< /D [ 7830 0 R /XYZ 81.077 393.24 null ] >>
+endobj
+7856 0 obj
+<< /D [ 7830 0 R /XYZ 81.077 382.281 null ] >>
+endobj
+7857 0 obj
+<< /D [ 7830 0 R /XYZ 81.077 371.322 null ] >>
+endobj
+7858 0 obj
+<< /D [ 7830 0 R /XYZ 81.077 360.363 null ] >>
+endobj
+7859 0 obj
+<< /D [ 7830 0 R /XYZ 81.077 349.405 null ] >>
+endobj
+7860 0 obj
+<< /D [ 7830 0 R /XYZ 81.077 338.446 null ] >>
+endobj
+7861 0 obj
+<< /D [ 7830 0 R /XYZ 81.077 285.644 null ] >>
+endobj
+7862 0 obj
+<< /D [ 7830 0 R /XYZ 81.077 274.685 null ] >>
+endobj
+7863 0 obj
+<< /D [ 7830 0 R /XYZ 81.077 263.726 null ] >>
+endobj
+7864 0 obj
+<< /D [ 7830 0 R /XYZ 81.077 252.767 null ] >>
+endobj
+7865 0 obj
+<< /D [ 7830 0 R /XYZ 81.077 211.92 null ] >>
+endobj
+7866 0 obj
+<< /D [ 7830 0 R /XYZ 81.077 200.961 null ] >>
+endobj
+7867 0 obj
+<< /D [ 7830 0 R /XYZ 81.077 190.002 null ] >>
+endobj
+7868 0 obj
+<< /D [ 7830 0 R /XYZ 81.077 179.043 null ] >>
+endobj
+7869 0 obj
+<< /D [ 7830 0 R /XYZ 81.077 168.085 null ] >>
+endobj
+7870 0 obj
+<< /D [ 7830 0 R /XYZ 81.077 157.126 null ] >>
+endobj
+7871 0 obj
+<< /D [ 7830 0 R /XYZ 81.077 146.167 null ] >>
+endobj
+7872 0 obj
+<< /D [ 7830 0 R /XYZ 81.077 135.208 null ] >>
+endobj
+7873 0 obj
+<< /D [ 7830 0 R /XYZ 81.077 124.249 null ] >>
+endobj
+7874 0 obj
+<< /D [ 7830 0 R /XYZ 81.077 113.29 null ] >>
+endobj
+7875 0 obj
+<< /D [ 7830 0 R /XYZ 94.613 83.701 null ] >>
+endobj
+7829 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R /F22 459 0 R /F81 798 0 R /F76 468 0 R /F53 203 0 R /F80 760 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+7879 0 obj
+<< /Filter /FlateDecode /Length 2358 >>
+stream
+xZKoWxi/-:"
+t_?{P87FS 3jfg{mYe(L
+
+eS^6&brct?uS<d̿meur)mqBe9D!J72D?'Q)lBt[6mb9}nF 'Y9bxbl3:FN|KӤK{C],W3Z()L ѱz&0e
+,$|8M|<@U  [4
+I[$Wr~g{͒&#BO؈H-IAv?%ff
+cER*O$E.?Z-}fھL ~(J D[Wo&ۮIUrďi.=p,IMcTtt)$LZ-ۻ_znS A <P0ح[+זTnͫ8r e
+|n߽p*kPaՔʡ-3Czou ܾ
+7FB{uJݦ!겛M!r'%Y#banGeqd/L#u 34i_+ \FbpYU<e]SxzJe"+0T%b:͓
+A?iM`m ]owT'2a,IIwN*H _Ժ~CBP:W_Osm|kTR*B?O(etϿ;^s\=lP`>]\fA3WE£ Djбb*'n4]2rrR8RMD WF'5#tMfgeKX/U)I:qCP
+0iv[Io4II$&4B4ڂ*|_{l孡i1=]=k
+NA,͠.pDWeOVd`ێ:}"W&HszNNM(ein~
+endstream
+endobj
+7878 0 obj
+<< /Type /Page /Contents 7879 0 R /Resources 7877 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 7827 0 R >>
+endobj
+7880 0 obj
+<< /D [ 7878 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+7881 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+7882 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+7883 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+7884 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+7885 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+7886 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+7887 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+7888 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+7889 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+7890 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+7891 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+7892 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+7893 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+7894 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 626.366 null ] >>
+endobj
+7895 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 615.407 null ] >>
+endobj
+7896 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 604.448 null ] >>
+endobj
+7897 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 593.489 null ] >>
+endobj
+7898 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 565.132 null ] >>
+endobj
+7899 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 554.173 null ] >>
+endobj
+7900 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 543.214 null ] >>
+endobj
+7901 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 532.255 null ] >>
+endobj
+7902 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 521.296 null ] >>
+endobj
+7903 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 510.337 null ] >>
+endobj
+7904 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 499.378 null ] >>
+endobj
+7905 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 400.358 null ] >>
+endobj
+7906 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 389.399 null ] >>
+endobj
+7907 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 378.44 null ] >>
+endobj
+7908 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 367.481 null ] >>
+endobj
+7909 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 356.523 null ] >>
+endobj
+7910 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 345.564 null ] >>
+endobj
+7911 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 317.206 null ] >>
+endobj
+7912 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 306.247 null ] >>
+endobj
+7913 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 295.288 null ] >>
+endobj
+7914 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 284.329 null ] >>
+endobj
+7915 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 273.371 null ] >>
+endobj
+7916 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 262.412 null ] >>
+endobj
+7917 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 251.453 null ] >>
+endobj
+7918 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 240.494 null ] >>
+endobj
+7919 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 229.535 null ] >>
+endobj
+7920 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 218.576 null ] >>
+endobj
+7921 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 207.617 null ] >>
+endobj
+7922 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 196.658 null ] >>
+endobj
+7923 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 185.699 null ] >>
+endobj
+7924 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 174.74 null ] >>
+endobj
+7925 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 122.473 null ] >>
+endobj
+7926 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+7927 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+7928 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+7929 0 obj
+<< /D [ 7878 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+7877 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F81 798 0 R /F30 644 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+7932 0 obj
+<< /Filter /FlateDecode /Length 1990 >>
+stream
+xZ]6}_a /6f-Mv(),(cK^II:(S8kcbKy!a~o$|rs;yNGZFG NxDFJ"IQ$ ’&X
+$҈tR`MqZIΑR(Y,x]5yZbVGJ#*?^<Mh4jc7eBո I]ginj4rz1U؛f25ym*}c/T
+n j}<fnh8I>35 { BdPJ_B0Eb_Imez-,mN 9J3/G~ g"z)8ELGYs819!¬ϮҲ[ ENnc .'0c$_("(G; VY<v3ޛ˵Ya!fC <AGH!.䒿vx> f!=ұ`AvcEAC3n
+Tr0{2`Յ,:ob<&AՏ
+1=|**h6]:ONѯ_[s8֎c7Dyz]o8S VkXWz1.闉?dHA{Qpɵצב߯$|N>Djqx`$ŃI5$mrzw/X.'fTQʷlU>O} CK&Hr׾ XHeG"7^!>_L a yUmC5fj.Oߒ?'
+$@ tS\1om M+O#͝SvK}^rS߷{#)է?
+W-gvg+~K%U5dn6ݶÿHw=$yqHCdA򘙉nt6f'W=6^~g\e
+vZ>նr흡C 9I l$uU;C@<B2VrHC*&1ĚRċlYWhpqdna˻O+Yi@܈sa<?X5Pڦ柽7l5b?n:7!Ӈ`ċxG澇6ݗŠ^Z5K5F =Ndgb{K`k+X0[Kuyե"}êqչt>)2]]]z&PcL
+KrDs1\ӫ Q;cK
+C=7B<kKO4A8$W!
+Crad=W^jĵJ"z蟾su>d=OWR9'+œnΔ͹tL"Յ_"zKpaNCϯ.=f(&œgEd-"Ha Ce=Lg0:ߞ'+5DH4_w'4+y~
+endstream
+endobj
+7931 0 obj
+<< /Type /Page /Contents 7932 0 R /Resources 7930 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 7827 0 R >>
+endobj
+7933 0 obj
+<< /D [ 7931 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+7934 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+7935 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+7936 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+7937 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+7938 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+7939 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 670.646 null ] >>
+endobj
+7940 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 659.687 null ] >>
+endobj
+7941 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 648.728 null ] >>
+endobj
+7942 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 637.769 null ] >>
+endobj
+7943 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 626.81 null ] >>
+endobj
+7944 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 615.851 null ] >>
+endobj
+7945 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 604.893 null ] >>
+endobj
+7946 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 593.934 null ] >>
+endobj
+7947 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 582.975 null ] >>
+endobj
+7948 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 572.016 null ] >>
+endobj
+7949 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 561.057 null ] >>
+endobj
+7950 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 550.098 null ] >>
+endobj
+7951 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 539.139 null ] >>
+endobj
+7952 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 528.18 null ] >>
+endobj
+7953 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 517.221 null ] >>
+endobj
+7954 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 506.262 null ] >>
+endobj
+109 0 obj
+<< /D [ 7931 0 R /XYZ 79.37 483.541 null ] >>
+endobj
+7955 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 341.651 null ] >>
+endobj
+7956 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 330.692 null ] >>
+endobj
+7957 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 319.733 null ] >>
+endobj
+7958 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 308.774 null ] >>
+endobj
+7959 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 297.815 null ] >>
+endobj
+7960 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 286.856 null ] >>
+endobj
+7961 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 275.897 null ] >>
+endobj
+7962 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 264.938 null ] >>
+endobj
+7963 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 253.979 null ] >>
+endobj
+7964 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 243.021 null ] >>
+endobj
+7965 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 232.062 null ] >>
+endobj
+7966 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 221.103 null ] >>
+endobj
+7967 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 210.144 null ] >>
+endobj
+7968 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 199.185 null ] >>
+endobj
+7969 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 188.226 null ] >>
+endobj
+7970 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 177.267 null ] >>
+endobj
+7971 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 166.308 null ] >>
+endobj
+7972 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 155.349 null ] >>
+endobj
+7973 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 144.39 null ] >>
+endobj
+7974 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 133.431 null ] >>
+endobj
+7975 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 122.473 null ] >>
+endobj
+7976 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+7977 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+7978 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+7979 0 obj
+<< /D [ 7931 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+7930 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F30 644 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+7982 0 obj
+<< /Filter /FlateDecode /Length 3112 >>
+stream
+xڵ[I6WhʇH5n;UJeΡS]dJŖcT(+}.ٔГEox+"a{R-8Ҋ0{xE% %$"aIwſ lv}/R25Qt>nKvٺt7oϯ*649[7lھߘܣ7`6"0"vSqS۩|Hsy|ѬD^ʕiD8븊8C*zRBD񎓼 Ͳ¢Zj-O5qF# Tt8zC8e6-׷eKD+h$.)bH-IGEGQ П}ݧ6mbmfn^Rqĸn&8Fl/ʄ!"Q[qDg9s^gpHIgNh!TmӧSSgvW)IgQUÓUif>dw])Agl9F:3Ĺ
+ᐖ;#S=JTЧ_oMC9E Ǽ( UKϯ^sj#%5ˉAAE8t$VZYi|<xUw)zmAeiSgq D$Zp9h1ERxo~Ō0b7  2xIj{I4tUנ=ņݦӈ>= LKP*ݥs%iڼ2Y9;EA0 }uN,{F
+%_@0C:
+K5!yMs?_7l~xk#kvUW^~Zhէ 5^
+i܋ubX}5kOC
+15%Ͱ5F<Bj1L[фt>>6umJ1'IW lhH//O0JCH|>34
+<Ӱ/fv m ; T/5[5S#\(dIbR )0Q6y0&+. ?|ܷ [nef2%w KyZL*a W1Y+;NoP<;29Xgڧ;dUL[yU!į$s)nYFt~$5xH[4U!>#&VU<o˸;w\,C&  _\5$1ڀS캋z5CltrAkҏ̢
+tbT{2VHW^Cy6^.bHB8fscI>_)QTKTk81>i^o[h|~,MhMP\hh\1R+λp+^:ه)7j>;0UKqxȐkqaLAD޲)R?ݛ]vk}7lKFHd99X$Ѿ죣C#zֶ&Vښt̤@Tw
+:
+45gHe].5C3o"] b.
+ JFͻ\"QIMoxC]@ }g
+
+`!>6q 2<i0b B paOQrB|wKd !dIQhq}6rߨyV
+sZamU(+1<ͅʣ Ȟ1 -]U_(<BCcDƤ;~ W~nT;#m?"e~"L8sj}ۄ.R fl3_ lбH",z!?&h{ǰG;}/S9 P [3 ?3naz=]5%fWtdTNjA<qv&@3S>>֙
+Q%Ѧ(!C1?ϼJ`ON Z]J-nzX>@ ?>$MB.g/:W@S!E|o8GwDZG~߃渞-9*,'cd?5{_N
+endstream
+endobj
+7981 0 obj
+<< /Type /Page /Contents 7982 0 R /Resources 7980 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 7827 0 R >>
+endobj
+7983 0 obj
+<< /D [ 7981 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+7984 0 obj
+<< /D [ 7981 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+7985 0 obj
+<< /D [ 7981 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+7986 0 obj
+<< /D [ 7981 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+7987 0 obj
+<< /D [ 7981 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+7988 0 obj
+<< /D [ 7981 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+7989 0 obj
+<< /D [ 7981 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+7990 0 obj
+<< /D [ 7981 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+7991 0 obj
+<< /D [ 7981 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+7992 0 obj
+<< /D [ 7981 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+7993 0 obj
+<< /D [ 7981 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+7994 0 obj
+<< /D [ 7981 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+7995 0 obj
+<< /D [ 7981 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+7996 0 obj
+<< /D [ 7981 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+7997 0 obj
+<< /D [ 7981 0 R /XYZ 81.077 582.53 null ] >>
+endobj
+7998 0 obj
+<< /D [ 7981 0 R /XYZ 81.077 549.654 null ] >>
+endobj
+7999 0 obj
+<< /D [ 7981 0 R /XYZ 81.077 538.695 null ] >>
+endobj
+8000 0 obj
+<< /D [ 7981 0 R /XYZ 81.077 495.855 null ] >>
+endobj
+8001 0 obj
+<< /D [ 7981 0 R /XYZ 81.077 484.896 null ] >>
+endobj
+8002 0 obj
+<< /D [ 7981 0 R /XYZ 81.077 473.938 null ] >>
+endobj
+8003 0 obj
+<< /D [ 7981 0 R /XYZ 81.077 462.979 null ] >>
+endobj
+8004 0 obj
+<< /D [ 7981 0 R /XYZ 81.077 452.02 null ] >>
+endobj
+8005 0 obj
+<< /D [ 7981 0 R /XYZ 81.077 441.061 null ] >>
+endobj
+8006 0 obj
+<< /D [ 7981 0 R /XYZ 81.077 430.102 null ] >>
+endobj
+8007 0 obj
+<< /D [ 7981 0 R /XYZ 81.077 419.143 null ] >>
+endobj
+8008 0 obj
+<< /D [ 7981 0 R /XYZ 81.077 408.184 null ] >>
+endobj
+8009 0 obj
+<< /D [ 7981 0 R /XYZ 81.077 397.225 null ] >>
+endobj
+8010 0 obj
+<< /D [ 7981 0 R /XYZ 81.077 386.266 null ] >>
+endobj
+8011 0 obj
+<< /D [ 7981 0 R /XYZ 81.077 375.307 null ] >>
+endobj
+8012 0 obj
+<< /D [ 7981 0 R /XYZ 81.077 328.483 null ] >>
+endobj
+8013 0 obj
+<< /D [ 7981 0 R /XYZ 81.077 275.681 null ] >>
+endobj
+8014 0 obj
+<< /D [ 7981 0 R /XYZ 81.077 264.722 null ] >>
+endobj
+8015 0 obj
+<< /D [ 7981 0 R /XYZ 81.077 253.763 null ] >>
+endobj
+8016 0 obj
+<< /D [ 7981 0 R /XYZ 81.077 242.804 null ] >>
+endobj
+8017 0 obj
+<< /D [ 7981 0 R /XYZ 81.077 184.025 null ] >>
+endobj
+8018 0 obj
+<< /D [ 7981 0 R /XYZ 81.077 173.066 null ] >>
+endobj
+8019 0 obj
+<< /D [ 7981 0 R /XYZ 81.077 90.376 null ] >>
+endobj
+8020 0 obj
+<< /D [ 7981 0 R /XYZ 81.077 79.417 null ] >>
+endobj
+7980 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F65 185 0 R /F30 644 0 R /F69 304 0 R /F70 305 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+8023 0 obj
+<< /Filter /FlateDecode /Length 2488 >>
+stream
+xڵZko_bM8|J-m l(vNa(kbK$类{)R8IH&ux$g M?o'_|H#%  %$ A8!Ӕ`|
+g(vVvu0gg>΂y7JD$w !Zky]U*y^հ.!)T8}xC}v*+=H҃8A4I"Nc}V(NI|[11i>8 .DMȥ ߓ*@!Nz{zܼ\s*SNM[ј*EڮK)OOɨ={-*Nu>+/S̻XDb*n=ђiDDC
+CPכyvzrS5E%.+*FBNH
+b~T
+8 Uڌ; )Ƽb{٣#x+Nz ^9Ұ\b%kcCU~X7sh˾4|ufb"Na8]%;/d@@2 
+<FaQb-Z8*P ƹGw$"\@e2jh]EQ6J'Gkˌ)˿~kM]V<>a!=iA;3%O2ؾ[Z(3 R~P7ym^%+iFZHj/nv 8b=m{gw7/|Eh E-9|z;07/֐ǧ
+ƩN+P<N@ay(,B7 ))b=ulvIU`[rXeޭ)ʅ61Vhwy.܎g b٭ ^.\-|ՆN~h}3MuAg*/@nELlXl
+endstream
+endobj
+8022 0 obj
+<< /Type /Page /Contents 8023 0 R /Resources 8021 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 7827 0 R >>
+endobj
+8024 0 obj
+<< /D [ 8022 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+8025 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+8026 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+8027 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+8028 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+8029 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+8030 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+8031 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+8032 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+8033 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 657.25 null ] >>
+endobj
+8034 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 646.291 null ] >>
+endobj
+8035 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 635.332 null ] >>
+endobj
+8036 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 624.373 null ] >>
+endobj
+8037 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 613.415 null ] >>
+endobj
+8038 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 602.456 null ] >>
+endobj
+8039 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 591.497 null ] >>
+endobj
+8040 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 542.68 null ] >>
+endobj
+8041 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 526.74 null ] >>
+endobj
+8042 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 515.781 null ] >>
+endobj
+8043 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 504.822 null ] >>
+endobj
+8044 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 493.863 null ] >>
+endobj
+8045 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 482.904 null ] >>
+endobj
+8046 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 471.945 null ] >>
+endobj
+8047 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 460.986 null ] >>
+endobj
+8048 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 364.349 null ] >>
+endobj
+8049 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 353.39 null ] >>
+endobj
+8050 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 342.431 null ] >>
+endobj
+8051 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 331.472 null ] >>
+endobj
+8052 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 320.513 null ] >>
+endobj
+8053 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 309.554 null ] >>
+endobj
+8054 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 298.595 null ] >>
+endobj
+8055 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 287.636 null ] >>
+endobj
+8056 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 276.677 null ] >>
+endobj
+8057 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 265.718 null ] >>
+endobj
+8058 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 254.759 null ] >>
+endobj
+8059 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 243.801 null ] >>
+endobj
+8060 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 232.842 null ] >>
+endobj
+8061 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 221.883 null ] >>
+endobj
+8062 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 210.924 null ] >>
+endobj
+8063 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 199.965 null ] >>
+endobj
+8064 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 189.006 null ] >>
+endobj
+8065 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 112.294 null ] >>
+endobj
+8066 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 101.335 null ] >>
+endobj
+8067 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 90.376 null ] >>
+endobj
+8068 0 obj
+<< /D [ 8022 0 R /XYZ 81.077 79.417 null ] >>
+endobj
+8021 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F69 304 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+8071 0 obj
+<< /Filter /FlateDecode /Length 3158 >>
+stream
+xێ۸=_1E*x nA53Ȓ+˙{! 5,<hJ<7+^_W?J'8?w?(s%Hf(gW7w(|^+J+JREnWJ4b k2$S)00ixl2%4e9@IB3BVR!յd2rQm!ߔu~s}񚟝gge?K:31/#R™ @ @N@tF8lRŒt
+ֱعu~URzr>P n枏}5<<G$+ 8w_`;ms{t`WX6ѭbl?fOݲ_u
+7=m1ting_?gpBI"Ee̋HОOfwT~&z"g7*y y<U5};V4PyZ1gE=+1kd~5lW2M@]{v s e~
+hR=U2ɲpޙ$L|o4\8~3I h߽qs^āSF "N ůQ5p:!9f\ ;[DNhJQ8uܫ4 <~˽n`["%XFXglFׁ$0
+<@a Mh?P5,kʈ2t.QFz_<}~9  'վ* !VCFU&gDfT}:])xh hN5yCtHpŲp:ke@h@!
+ ?:7B9Bo+W`*>3
+<5.{FV@^><=\YZys})2^e2X՛bSv£wplBLorDbS1 GDejHed$ ]mxZ+vz<gVzoH bHAs:(Iʢ
+A`(h
+})E=GJgK8_fm7sUm^`;GjůA`#cmToA2tLC?4;rtT.wDT@t0VEbFO68 fXUrCa?Ӈ=E[|&7_咞PH*] $Sr(1_ \G{_"(v.ft| g ]"Zd!zuCXR{ʰ'`A,X)$k\KVv%aS\pƚ`Z ExiZ˵!ϪӒM\(&)7A)w61R/'
+<t쭋V:V Zhpp<nK
+1-鷂] NQNl͠megB((1eܾhDh:|mA>8o]Y<}/z*we
+ƀIL\6mH c*R7Hťܼ
+endstream
+endobj
+8070 0 obj
+<< /Type /Page /Contents 8071 0 R /Resources 8069 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 7827 0 R >>
+endobj
+8072 0 obj
+<< /D [ 8070 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+8073 0 obj
+<< /D [ 8070 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+8074 0 obj
+<< /D [ 8070 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+8075 0 obj
+<< /D [ 8070 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+8076 0 obj
+<< /D [ 8070 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+8077 0 obj
+<< /D [ 8070 0 R /XYZ 81.077 599.467 null ] >>
+endobj
+8078 0 obj
+<< /D [ 8070 0 R /XYZ 81.077 588.508 null ] >>
+endobj
+8079 0 obj
+<< /D [ 8070 0 R /XYZ 81.077 577.549 null ] >>
+endobj
+8080 0 obj
+<< /D [ 8070 0 R /XYZ 81.077 566.59 null ] >>
+endobj
+8081 0 obj
+<< /D [ 8070 0 R /XYZ 81.077 555.631 null ] >>
+endobj
+8082 0 obj
+<< /D [ 8070 0 R /XYZ 81.077 544.672 null ] >>
+endobj
+8083 0 obj
+<< /D [ 8070 0 R /XYZ 81.077 533.713 null ] >>
+endobj
+8084 0 obj
+<< /D [ 8070 0 R /XYZ 81.077 522.754 null ] >>
+endobj
+8085 0 obj
+<< /D [ 8070 0 R /XYZ 81.077 511.796 null ] >>
+endobj
+8086 0 obj
+<< /D [ 8070 0 R /XYZ 81.077 500.837 null ] >>
+endobj
+8087 0 obj
+<< /D [ 8070 0 R /XYZ 81.077 489.878 null ] >>
+endobj
+8088 0 obj
+<< /D [ 8070 0 R /XYZ 81.077 478.919 null ] >>
+endobj
+8089 0 obj
+<< /D [ 8070 0 R /XYZ 81.077 467.96 null ] >>
+endobj
+8090 0 obj
+<< /D [ 8070 0 R /XYZ 81.077 457.001 null ] >>
+endobj
+8091 0 obj
+<< /D [ 8070 0 R /XYZ 81.077 446.042 null ] >>
+endobj
+8092 0 obj
+<< /D [ 8070 0 R /XYZ 81.077 435.083 null ] >>
+endobj
+8093 0 obj
+<< /D [ 8070 0 R /XYZ 81.077 424.124 null ] >>
+endobj
+8094 0 obj
+<< /D [ 8070 0 R /XYZ 81.077 413.165 null ] >>
+endobj
+8095 0 obj
+<< /D [ 8070 0 R /XYZ 81.077 348.408 null ] >>
+endobj
+8096 0 obj
+<< /D [ 8070 0 R /XYZ 81.077 337.449 null ] >>
+endobj
+8097 0 obj
+<< /D [ 8070 0 R /XYZ 81.077 326.49 null ] >>
+endobj
+8098 0 obj
+<< /D [ 8070 0 R /XYZ 81.077 261.733 null ] >>
+endobj
+8099 0 obj
+<< /D [ 8070 0 R /XYZ 81.077 250.774 null ] >>
+endobj
+8100 0 obj
+<< /D [ 8070 0 R /XYZ 81.077 239.816 null ] >>
+endobj
+8101 0 obj
+<< /D [ 8070 0 R /XYZ 81.077 187.014 null ] >>
+endobj
+8102 0 obj
+<< /D [ 8070 0 R /XYZ 81.077 176.055 null ] >>
+endobj
+8103 0 obj
+<< /D [ 8070 0 R /XYZ 81.077 165.096 null ] >>
+endobj
+8104 0 obj
+<< /D [ 8070 0 R /XYZ 81.077 154.137 null ] >>
+endobj
+8105 0 obj
+<< /D [ 8070 0 R /XYZ 81.077 143.178 null ] >>
+endobj
+8106 0 obj
+<< /D [ 8070 0 R /XYZ 81.077 132.219 null ] >>
+endobj
+8107 0 obj
+<< /D [ 8070 0 R /XYZ 81.077 121.26 null ] >>
+endobj
+8108 0 obj
+<< /D [ 8070 0 R /XYZ 81.077 110.301 null ] >>
+endobj
+8109 0 obj
+<< /D [ 8070 0 R /XYZ 81.077 99.342 null ] >>
+endobj
+8110 0 obj
+<< /D [ 8070 0 R /XYZ 81.077 88.383 null ] >>
+endobj
+8069 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F70 305 0 R /F77 542 0 R /F30 644 0 R /F69 304 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+8113 0 obj
+<< /Filter /FlateDecode /Length 2447 >>
+stream
+xڽZKo81|?Ec̡ 08m2dLŇtY̡/DcUIzgW 13Ϯn32S15S ,j3</mUUbMt6l{c_84bA<բڅ/_WxO!&Y@wYdu=:oVwaӓ` jH<Jv6*Gn ƔzƑфZ"I2\!BRM
+I` /0Yv)ҔR7fw^W.
+ז?4uVW]B =].@>b5UY(ׇ b=qoSHpIV_= A]b[qxHW>{USTߏCZLs4Ϭwi(bCyw8B5Rv%ݮ/.!FUL!I<%9KudM~ƏHl(wh&sU p=!Ll*)6uh b",ƐyJHgm>Mf#QTQ4DL8^ɑZP&/Gu_R("' TڅKYU7Hjq[fwܓ@,X3+
+w!Y@J8]IY B
+ {b͙rWD8[Mm^WvtGL,dlrBclzS֝].Ct2/ښ>DZ8 6yT"oB΢9'1gfb}f$ψwKu.ʠ-?$댹Zu ПV}S/>W,buտGTř
+3IG^X'9m3 Ѭ*D"OǦvjNcwJ )Cov[{lo/jw-FCY;4)DtwY!H4 #:<)FhTeAײN$1SR0SŃov\TT{Fa;A}vDCY M&|j4R8dLxT(w8p̈́ODZNq:}R Ct'$~LT@hiymFw>NHҜG<18ΓHpW4^)j$"t:/&#dK/ "-%oRNMAढ़ltP={w~ tadƝ9o2KSnYQ!#^?VaDԇH6+g~J`o[m9kƅO܄Y4+‘zyH`ϰl@sm41v] ȗ@_mع2@IL<Җ.64؀nH"tr1`/4v?2Mq˦Z} ?IцƤ3D4{ҡ8)Fдc=4sah(03 д`ܫ2M!t;iu4Rj}LШۜҴc!J3n3&8i5_
+endstream
+endobj
+8112 0 obj
+<< /Type /Page /Contents 8113 0 R /Resources 8111 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 7827 0 R >>
+endobj
+8114 0 obj
+<< /D [ 8112 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+8115 0 obj
+<< /D [ 8112 0 R /XYZ 81.077 754.884 null ] >>
+endobj
+8116 0 obj
+<< /D [ 8112 0 R /XYZ 81.077 743.925 null ] >>
+endobj
+8117 0 obj
+<< /D [ 8112 0 R /XYZ 81.077 715.033 null ] >>
+endobj
+8118 0 obj
+<< /D [ 8112 0 R /XYZ 81.077 674.187 null ] >>
+endobj
+8119 0 obj
+<< /D [ 8112 0 R /XYZ 81.077 591.497 null ] >>
+endobj
+8120 0 obj
+<< /D [ 8112 0 R /XYZ 81.077 580.538 null ] >>
+endobj
+8121 0 obj
+<< /D [ 8112 0 R /XYZ 81.077 569.579 null ] >>
+endobj
+8122 0 obj
+<< /D [ 8112 0 R /XYZ 81.077 558.62 null ] >>
+endobj
+8123 0 obj
+<< /D [ 8112 0 R /XYZ 81.077 547.661 null ] >>
+endobj
+8124 0 obj
+<< /D [ 8112 0 R /XYZ 81.077 506.814 null ] >>
+endobj
+8125 0 obj
+<< /D [ 8112 0 R /XYZ 81.077 495.855 null ] >>
+endobj
+8126 0 obj
+<< /D [ 8112 0 R /XYZ 81.077 484.896 null ] >>
+endobj
+8127 0 obj
+<< /D [ 8112 0 R /XYZ 81.077 456.005 null ] >>
+endobj
+8128 0 obj
+<< /D [ 8112 0 R /XYZ 81.077 445.046 null ] >>
+endobj
+8129 0 obj
+<< /D [ 8112 0 R /XYZ 81.077 434.087 null ] >>
+endobj
+8130 0 obj
+<< /D [ 8112 0 R /XYZ 81.077 423.128 null ] >>
+endobj
+8131 0 obj
+<< /D [ 8112 0 R /XYZ 81.077 412.169 null ] >>
+endobj
+8132 0 obj
+<< /D [ 8112 0 R /XYZ 81.077 401.21 null ] >>
+endobj
+8133 0 obj
+<< /D [ 8112 0 R /XYZ 81.077 390.251 null ] >>
+endobj
+8134 0 obj
+<< /D [ 8112 0 R /XYZ 81.077 379.292 null ] >>
+endobj
+8135 0 obj
+<< /D [ 8112 0 R /XYZ 81.077 368.334 null ] >>
+endobj
+8136 0 obj
+<< /D [ 8112 0 R /XYZ 81.077 357.375 null ] >>
+endobj
+8137 0 obj
+<< /D [ 8112 0 R /XYZ 81.077 346.416 null ] >>
+endobj
+8138 0 obj
+<< /D [ 8112 0 R /XYZ 81.077 335.457 null ] >>
+endobj
+8139 0 obj
+<< /D [ 8112 0 R /XYZ 81.077 306.565 null ] >>
+endobj
+8140 0 obj
+<< /D [ 8112 0 R /XYZ 81.077 295.606 null ] >>
+endobj
+8141 0 obj
+<< /D [ 8112 0 R /XYZ 81.077 284.647 null ] >>
+endobj
+8142 0 obj
+<< /D [ 8112 0 R /XYZ 81.077 273.688 null ] >>
+endobj
+8143 0 obj
+<< /D [ 8112 0 R /XYZ 81.077 262.73 null ] >>
+endobj
+8144 0 obj
+<< /D [ 8112 0 R /XYZ 81.077 251.771 null ] >>
+endobj
+8145 0 obj
+<< /D [ 8112 0 R /XYZ 81.077 240.812 null ] >>
+endobj
+8146 0 obj
+<< /D [ 8112 0 R /XYZ 81.077 229.853 null ] >>
+endobj
+8147 0 obj
+<< /D [ 8112 0 R /XYZ 81.077 218.894 null ] >>
+endobj
+8148 0 obj
+<< /D [ 8112 0 R /XYZ 81.077 207.935 null ] >>
+endobj
+8149 0 obj
+<< /D [ 8112 0 R /XYZ 81.077 196.976 null ] >>
+endobj
+8150 0 obj
+<< /D [ 8112 0 R /XYZ 81.077 156.129 null ] >>
+endobj
+8151 0 obj
+<< /D [ 8112 0 R /XYZ 81.077 145.17 null ] >>
+endobj
+8152 0 obj
+<< /D [ 8112 0 R /XYZ 81.077 134.212 null ] >>
+endobj
+8153 0 obj
+<< /D [ 8112 0 R /XYZ 81.077 123.253 null ] >>
+endobj
+8154 0 obj
+<< /D [ 8112 0 R /XYZ 81.077 112.294 null ] >>
+endobj
+8155 0 obj
+<< /D [ 8112 0 R /XYZ 81.077 101.335 null ] >>
+endobj
+8156 0 obj
+<< /D [ 8112 0 R /XYZ 81.077 90.376 null ] >>
+endobj
+8157 0 obj
+<< /D [ 8112 0 R /XYZ 81.077 79.417 null ] >>
+endobj
+8111 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R /F70 305 0 R /F32 176 0 R /F27 642 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+8160 0 obj
+<< /Filter /FlateDecode /Length 2129 >>
+stream
+xZKo8W:@brm{!(kۖIOcH Œ)~U%x^/Wx"a~Y tA]<<]dQH$Z(Id[k(~-`(1H`c#%\`D0 <@L)=an׷gwnViD8 <bQmUaSˇֈ<hTӈCcRtl7l=O6 ~&zBAF ahaS_2Ɩ׷XvT-L ]nq^ݭִUӺad| {JzajiGni
+RuݎNCFUW
+<DWr!ܾ6fXsDY" y:q8äH#EcB,9ԇjPΑTKKuۋ
+!D!XL9=M.9FZSv"Ǝh5ʺsT/%D:kJ8ATCZ^ cuM[ǂP#ȌP.UHA*G# mbܧlu$n+јnH|Z`Vs_Q
+4Z]uۗowQx9i> gV݋k7ڬu4^ d!z9 *M{|? I F F6Pr3ܵC1'X][
+d,A3L
+"2+}N*\"_Pη
+gX33Te#7UAZU ZӸ۱{K\r-7 !M(> Bցf9γwΗ i:f#9c-ky< W@)§v<Ŧ^]ϓX mH:NIA
+\rDϚ&+mG(|jwUy3%d8gggptk>3Wl|f]U2E36D4Nb3"T[R)۲ [#X)liR1 +8,}bpMbHp
+&fƻ ~c3L»bf胰øN,C|CAB|[,|R,`Y?A˦IR,LгrH`+A Fj*E jHMr3QS@dvζ ULe2A$#b qA&J4o^d<氏 %Z :_6}٫dYkΗM1WɳcqCy2=a4tVkDXH)6 : .`{hQʬmfb[1* 3)lm55Oa۵6Hal\rdN_
+L1jrW-'WG톺Sr3ٽi%cqkŲ6-XAWS˹\핵aAPzfH!e)a";6 N u
+]@N&"593cJMI]m״F\󷯫a76(f2n!lǢpyʙBP|O_6jSfYZi>=BkZGz:26Ǯms!ͱo0==BI@̮GT1O2]u}_|]7>t5|f5-.O+J3.Ut㫸 ҍ9{'nV۸m^`6 ++x脓)Sy#FG.JS>K_˶ڴlȒ㼛l% A\OS2Fɯ".[QHzrwִ 'E ͪڎ_D9̧ۣ'88Yg<x"y}EG<HG)8rFx
+endstream
+endobj
+8159 0 obj
+<< /Type /Page /Contents 8160 0 R /Resources 8158 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 7827 0 R >>
+endobj
+8161 0 obj
+<< /D [ 8159 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+8162 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+8163 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+8164 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+8165 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+8166 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+8167 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 660.239 null ] >>
+endobj
+8168 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 619.392 null ] >>
+endobj
+8169 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 608.433 null ] >>
+endobj
+8170 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 597.474 null ] >>
+endobj
+8171 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 586.515 null ] >>
+endobj
+8172 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 575.556 null ] >>
+endobj
+8173 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 564.598 null ] >>
+endobj
+8174 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 553.639 null ] >>
+endobj
+8175 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 542.68 null ] >>
+endobj
+8176 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 531.721 null ] >>
+endobj
+8177 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 520.762 null ] >>
+endobj
+8178 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 509.803 null ] >>
+endobj
+8179 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 498.844 null ] >>
+endobj
+8180 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 457.997 null ] >>
+endobj
+8181 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 447.038 null ] >>
+endobj
+8182 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 436.08 null ] >>
+endobj
+8183 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 425.121 null ] >>
+endobj
+8184 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 414.162 null ] >>
+endobj
+8185 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 403.203 null ] >>
+endobj
+8186 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 392.244 null ] >>
+endobj
+8187 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 381.285 null ] >>
+endobj
+8188 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 370.326 null ] >>
+endobj
+8189 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 359.367 null ] >>
+endobj
+8190 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 348.408 null ] >>
+endobj
+8191 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 337.449 null ] >>
+endobj
+8192 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 326.49 null ] >>
+endobj
+8193 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 315.532 null ] >>
+endobj
+8194 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 304.573 null ] >>
+endobj
+8195 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 293.614 null ] >>
+endobj
+8196 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 282.655 null ] >>
+endobj
+8197 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 271.696 null ] >>
+endobj
+8198 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 260.737 null ] >>
+endobj
+8199 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 249.778 null ] >>
+endobj
+8200 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 238.819 null ] >>
+endobj
+8201 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 227.86 null ] >>
+endobj
+8202 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 216.901 null ] >>
+endobj
+8203 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 205.943 null ] >>
+endobj
+8204 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 141.185 null ] >>
+endobj
+8205 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 130.226 null ] >>
+endobj
+8206 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 119.268 null ] >>
+endobj
+8207 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 90.376 null ] >>
+endobj
+8208 0 obj
+<< /D [ 8159 0 R /XYZ 81.077 79.417 null ] >>
+endobj
+8158 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+8211 0 obj
+<< /Filter /FlateDecode /Length 1482 >>
+stream
+xZKoFW(2C@#h
+ڂiJVMD? Çj䤀/&EǙYX;qlqqx n3k80ó:sb~BxcX迸Tu]fv}A =\WWnMy;79_^j<KkA#ޯuJDzJO͓ejEwtsW?/ i57Wsg%p¬iw)nIl/:2˜
+Hx):ľlżzeޤF`u`2w"?s9(A$Rʘ'(y
+ov33i~[HM~j/~T2%h2yioYR*%x=I!mQ #MD4I P]Ѧ7/GC>=E%@ !iA3ls$Xja@ieu8S4נGG$͑L_)jir>r1G7GlV^՟H-Z=m˧P}w*' nvd\1;Z-)w4ݶA+Dq n[yp2$Jtҁzjx}"A/]k߮vjf5͢Rjl zk?IO#J&Ջ!vPz5%.d uwW_j61nTU>W+%nQ|ХJ=+/ڗjS_CaH?#T<|w18*1ܑ!;R&ͷeєwT¡{EORXX˂ $(lӺ}CGPlh5{E:yմaX銔ZDtHu_Kd ҕip Sڃ=
+!d2dpv0oCS9 L(.0Awj< k7ف2xh%4gctt`K?bzMO2 Xxh鶥1'M^b0ݲP |cNӓ}y#f)qsh$h:u0u`iN g& =w B#AW4H]5= eU塤/>[P *$x),ɇ_\Yc/hk"H@cT &jm͍.6!W`uC[M$1mB/z`r,7Vvpm )i'|1UpZmv/P
+&
+endstream
+endobj
+8210 0 obj
+<< /Type /Page /Contents 8211 0 R /Resources 8209 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 7827 0 R >>
+endobj
+8212 0 obj
+<< /D [ 8210 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+8213 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+8214 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+8215 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+8216 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+8217 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+8218 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+8219 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+8220 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+8221 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+8222 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+8223 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+8224 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+8225 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+8226 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 611.032 null ] >>
+endobj
+8227 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 600.073 null ] >>
+endobj
+8228 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 589.114 null ] >>
+endobj
+8229 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 578.155 null ] >>
+endobj
+8230 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 567.196 null ] >>
+endobj
+8231 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 556.237 null ] >>
+endobj
+8232 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 545.279 null ] >>
+endobj
+8233 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 534.32 null ] >>
+endobj
+8234 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 523.361 null ] >>
+endobj
+8235 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 512.402 null ] >>
+endobj
+8236 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 501.443 null ] >>
+endobj
+8237 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 490.484 null ] >>
+endobj
+8238 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 479.525 null ] >>
+endobj
+8239 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 468.566 null ] >>
+endobj
+8240 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 457.607 null ] >>
+endobj
+8241 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 446.648 null ] >>
+endobj
+8242 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 396.445 null ] >>
+endobj
+8243 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 385.486 null ] >>
+endobj
+8244 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 374.527 null ] >>
+endobj
+8245 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 363.568 null ] >>
+endobj
+8246 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 352.61 null ] >>
+endobj
+8247 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 341.651 null ] >>
+endobj
+8248 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 330.692 null ] >>
+endobj
+8249 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 319.733 null ] >>
+endobj
+8250 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 308.774 null ] >>
+endobj
+8251 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 297.815 null ] >>
+endobj
+8252 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 286.856 null ] >>
+endobj
+8253 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 275.897 null ] >>
+endobj
+8254 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 264.938 null ] >>
+endobj
+8255 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 253.979 null ] >>
+endobj
+8256 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 243.021 null ] >>
+endobj
+8257 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 232.062 null ] >>
+endobj
+8258 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 221.103 null ] >>
+endobj
+8259 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 210.144 null ] >>
+endobj
+8260 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 199.185 null ] >>
+endobj
+8261 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 188.226 null ] >>
+endobj
+8262 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 177.267 null ] >>
+endobj
+8263 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 166.308 null ] >>
+endobj
+8264 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 155.349 null ] >>
+endobj
+8265 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 144.39 null ] >>
+endobj
+8266 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 133.431 null ] >>
+endobj
+8267 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 122.473 null ] >>
+endobj
+8268 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+8269 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+8270 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+8271 0 obj
+<< /D [ 8210 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+8209 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F70 305 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+8274 0 obj
+<< /Filter /FlateDecode /Length 2521 >>
+stream
+xZ[۶~ϯ0-e;@@S<硧06ƶ\IM俟PqfyXq7"_*ן^){xEC ]ZQ+/~5+TPv媮VgۦUiúlW<m4XeW4:[w^g kHiW]i?ӕ\:UF&tsͩƩ7ﮘ7oY~ΦD"u 5/\]+Ų(VՂYr+0Z Y0Y9{WQ]/T*% FƘU?:Uc~Yv6rM [wvh6*+ >7vċv_xvuuwZFyj0Ckk7;M[V|ܚhHY%Ń2lLp77o|^ջfvR0dw68Y92 4s1j?V˧7g^NfqPNtVLI.cDS3R1o漀#p3ħ= VOࠇo^d;F#0Cqjl&6$;1#Coh
+ۉ=4tj'dn۴b[N ̓@y/Gw[FĐw,᧧+l3BLm[jJ1bH.
+M6=,0)t_xG8Xc }Hş:6!&e<bZ9p hrތRB⼋A]v .^IwH3g7'Y%,DAX?3Bpa^?͹)XX(LB1ƪYXW]v}s{LM* }exxjW&%`_lMa3BL-9JeYN4D&k_ %`%+
+-s+*.SDN7DB8d eDBhݲeK.PizK7×έ?y/+2V4]!j.sh/ h-7woЙ+%HVh)u,.Q FthEc/<`鸼a&9N"ͨ/iays*UM@|PW0橩++PPJv8_;KYD?zes (mi2krd"E޻`i:qIJB)R\&P2B["Ņтhz_mvۺ+paL
+OB)8F @s7$yQ~OtXVb{ <bҜ(Ech<?|'ȉ-"(Ñ͏}VfVA F$r%a dQz `Րk5P1(Ty6fدp*(S}-xM'nVZ !װqp@rr:q>_@)^Ő 벚C#a3TpʌVQa-[6Asj>sP>MzƊs4Є`~p {{:;*m\"
+v=NfDO P;*
+endstream
+endobj
+8273 0 obj
+<< /Type /Page /Contents 8274 0 R /Resources 8272 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 8321 0 R >>
+endobj
+8275 0 obj
+<< /D [ 8273 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+8276 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 683.153 null ] >>
+endobj
+8277 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 672.194 null ] >>
+endobj
+8278 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 661.235 null ] >>
+endobj
+8279 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 650.276 null ] >>
+endobj
+8280 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 639.317 null ] >>
+endobj
+8281 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 628.358 null ] >>
+endobj
+8282 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 617.4 null ] >>
+endobj
+8283 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 606.441 null ] >>
+endobj
+8284 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 595.482 null ] >>
+endobj
+8285 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 584.523 null ] >>
+endobj
+8286 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 555.631 null ] >>
+endobj
+8287 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 544.672 null ] >>
+endobj
+8288 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 533.713 null ] >>
+endobj
+8289 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 522.754 null ] >>
+endobj
+8290 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 511.796 null ] >>
+endobj
+8291 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 435.083 null ] >>
+endobj
+8292 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 424.124 null ] >>
+endobj
+8293 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 413.165 null ] >>
+endobj
+8294 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 402.207 null ] >>
+endobj
+8295 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 391.248 null ] >>
+endobj
+8296 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 380.289 null ] >>
+endobj
+8297 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 369.33 null ] >>
+endobj
+8298 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 358.371 null ] >>
+endobj
+8299 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 347.412 null ] >>
+endobj
+8300 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 336.453 null ] >>
+endobj
+8301 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 325.494 null ] >>
+endobj
+8302 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 314.535 null ] >>
+endobj
+8303 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 285.644 null ] >>
+endobj
+8304 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 274.685 null ] >>
+endobj
+8305 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 245.793 null ] >>
+endobj
+8306 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 234.834 null ] >>
+endobj
+8307 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 223.875 null ] >>
+endobj
+8308 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 212.916 null ] >>
+endobj
+8309 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 201.957 null ] >>
+endobj
+8310 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 190.999 null ] >>
+endobj
+8311 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 180.04 null ] >>
+endobj
+8312 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 169.081 null ] >>
+endobj
+8313 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 158.122 null ] >>
+endobj
+8314 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 147.163 null ] >>
+endobj
+8315 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 136.204 null ] >>
+endobj
+8316 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 125.245 null ] >>
+endobj
+8317 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 114.286 null ] >>
+endobj
+8318 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 103.327 null ] >>
+endobj
+8319 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 92.368 null ] >>
+endobj
+8320 0 obj
+<< /D [ 8273 0 R /XYZ 81.077 81.41 null ] >>
+endobj
+8272 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F70 305 0 R /F30 644 0 R /F69 304 0 R /F68 189 0 R /F64 183 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+8324 0 obj
+<< /Filter /FlateDecode /Length 1747 >>
+stream
+xZnF}Wȋ_4AP}h
+(L*$1oH.wG(6yvΜ%' 9 wfs&Ngބ'd%DM$K23ULٿW,O42R2Јtl ޶:63HH(3o[i<FmS޶96!Q; @A̚ 9cljF(W':Mr|Z4]uwv8>ҦZvǴ@cp01wW*9Hj1ɛX;]b#E< '!{c5>.֦!10k2K6uY/旛rv.]}299XKG|(R)ä(#ضHImlS"gM!YmmRv~it*}$60Q4V(U wgHsmsP뤽ݤI`i[ #D??mj}~We9JKjלoZ¨`xFFYm]m7|Us0&4J>Q`1UbG.4BAIN
+ !ᶅDDf(DcaV4 OhS4hHgEA%wLa]+i Ӕ`R
+ lHp Xa<Bm5j|B_Q:a!nn16lOii
+ Qj Ghߖo&]T"_\b<ͺ& {DZ.:b՚j$be
+J ak
+ A-L]{ TT ږV}gU]u3.nU~LG
+.5<A
+v ׺&Hb*$[a ž˵o{!0b'
+endstream
+endobj
+8323 0 obj
+<< /Type /Page /Contents 8324 0 R /Resources 8322 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 8321 0 R >>
+endobj
+8325 0 obj
+<< /D [ 8323 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+8326 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+8327 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+8328 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+8329 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+8330 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 695.455 null ] >>
+endobj
+8331 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 684.496 null ] >>
+endobj
+8332 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 673.537 null ] >>
+endobj
+8333 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 662.578 null ] >>
+endobj
+8334 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 651.619 null ] >>
+endobj
+8335 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 640.66 null ] >>
+endobj
+8336 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 629.701 null ] >>
+endobj
+8337 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 618.742 null ] >>
+endobj
+8338 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 607.783 null ] >>
+endobj
+8339 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 596.824 null ] >>
+endobj
+8340 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 585.866 null ] >>
+endobj
+8341 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 574.907 null ] >>
+endobj
+8342 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 563.948 null ] >>
+endobj
+8343 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 523.447 null ] >>
+endobj
+8344 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 512.488 null ] >>
+endobj
+8345 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 501.53 null ] >>
+endobj
+8346 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 490.571 null ] >>
+endobj
+8347 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 479.612 null ] >>
+endobj
+8348 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 468.653 null ] >>
+endobj
+8349 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 457.694 null ] >>
+endobj
+8350 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 446.735 null ] >>
+endobj
+8351 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 435.776 null ] >>
+endobj
+8352 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 363.568 null ] >>
+endobj
+8353 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 352.61 null ] >>
+endobj
+8354 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 341.651 null ] >>
+endobj
+8355 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 330.692 null ] >>
+endobj
+8356 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 319.733 null ] >>
+endobj
+8357 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 308.774 null ] >>
+endobj
+8358 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 297.815 null ] >>
+endobj
+8359 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 286.856 null ] >>
+endobj
+8360 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 275.897 null ] >>
+endobj
+8361 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 264.938 null ] >>
+endobj
+8362 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 253.979 null ] >>
+endobj
+8363 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 243.021 null ] >>
+endobj
+8364 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 232.062 null ] >>
+endobj
+8365 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 221.103 null ] >>
+endobj
+8366 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 210.144 null ] >>
+endobj
+8367 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 199.185 null ] >>
+endobj
+8368 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 188.226 null ] >>
+endobj
+8369 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 177.267 null ] >>
+endobj
+8370 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 166.308 null ] >>
+endobj
+8371 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 155.349 null ] >>
+endobj
+8372 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 144.39 null ] >>
+endobj
+8373 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 133.431 null ] >>
+endobj
+8374 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 122.473 null ] >>
+endobj
+8375 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+8376 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+8377 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+8378 0 obj
+<< /D [ 8323 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+8322 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F70 305 0 R /F77 542 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+8381 0 obj
+<< /Filter /FlateDecode /Length 2040 >>
+stream
+xڽZ]o8}ϯ/0aoEb< EVbMlɥbۇ%tRT!h\KRv~H+N&fH1-o.L0 qAl6?q`2@2Xd|yE1יJMUPV6}+M
+ps<@WMߴ,LtDYQw1
+9q}Q(gR7t^S\ib(VC1Kcc|]"6Db^ؒn gNջ+j o%5t?j=N$=I,ܖL"h -<7:kxP}QY'ZV?iʚf0@xdrӃ
+1L*M* hGhZe]:@z?h;191FbІ4S3vw^T
+*To듍p"+s:9j9N]%qNhN>F.'qPY'[
+ԝې;ᇓ]Gayf/FzM"1,Ɔ B6Y޾p5VaI?XU}zg?9fA2lnNK2@1,cVA 0v6T;;/I"9=uejVu7mO 9N% }QNխVnb~UA,{1T!(.Nm'@DhD+oϛ MlIJp
+<. ݮO)fgϭ[v>BoN~QuwjbmcکD2&`-pcOVZio]"3鯴h0p@e\'$br@uca>j!iB'c,Pç4YӦ~ӵOǐL/{oXjѼީL.+ɚR(M~.bƔ5ex<MC
+{׭Utr7D܆^P';O8He"n{C+_RKN9I$ ̎
+endstream
+endobj
+8380 0 obj
+<< /Type /Page /Contents 8381 0 R /Resources 8379 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 8321 0 R >>
+endobj
+8382 0 obj
+<< /D [ 8380 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+8383 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+8384 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+8385 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+8386 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+8387 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+8388 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+8389 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+8390 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+8391 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+8392 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+8393 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+8394 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 628.358 null ] >>
+endobj
+8395 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 617.4 null ] >>
+endobj
+8396 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 606.441 null ] >>
+endobj
+8397 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 595.482 null ] >>
+endobj
+8398 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 584.523 null ] >>
+endobj
+8399 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 573.564 null ] >>
+endobj
+8400 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 562.605 null ] >>
+endobj
+8401 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 551.646 null ] >>
+endobj
+8402 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 540.687 null ] >>
+endobj
+8403 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 529.728 null ] >>
+endobj
+8404 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 518.769 null ] >>
+endobj
+8405 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 507.811 null ] >>
+endobj
+8406 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 496.852 null ] >>
+endobj
+8407 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 485.893 null ] >>
+endobj
+8408 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 474.934 null ] >>
+endobj
+8409 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 463.975 null ] >>
+endobj
+8410 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 453.016 null ] >>
+endobj
+8411 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 442.057 null ] >>
+endobj
+8412 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 431.098 null ] >>
+endobj
+8413 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 420.139 null ] >>
+endobj
+8414 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 409.18 null ] >>
+endobj
+8415 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 398.221 null ] >>
+endobj
+8416 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 387.263 null ] >>
+endobj
+8417 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 376.304 null ] >>
+endobj
+8418 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 365.345 null ] >>
+endobj
+8419 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 354.386 null ] >>
+endobj
+8420 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 343.427 null ] >>
+endobj
+8421 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 332.468 null ] >>
+endobj
+8422 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 321.509 null ] >>
+endobj
+8423 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 310.55 null ] >>
+endobj
+8424 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 299.591 null ] >>
+endobj
+8425 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 234.834 null ] >>
+endobj
+8426 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 223.875 null ] >>
+endobj
+8427 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 212.916 null ] >>
+endobj
+8428 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 201.957 null ] >>
+endobj
+8429 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 190.999 null ] >>
+endobj
+8430 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 180.04 null ] >>
+endobj
+8431 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 169.081 null ] >>
+endobj
+8432 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 153.141 null ] >>
+endobj
+8433 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 142.182 null ] >>
+endobj
+8434 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 99.342 null ] >>
+endobj
+8435 0 obj
+<< /D [ 8380 0 R /XYZ 81.077 88.383 null ] >>
+endobj
+8379 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+8438 0 obj
+<< /Filter /FlateDecode /Length 2525 >>
+stream
+xZoܸ_ ymA޵j>4 ʶ.FCK/֚⏜/pfW+vϷWFZRWW7+5b*aIVW+e˨y1b^ÌWuc٧iSVPZYqNcGʛn̮)
+$5 "6:_' LU2p6-E% GT+ 0:Hx%U,.sE.Z2剚boF_y$i AE>Θ}b{/^cճNca2G;R:NIaxg *4ڼY>< )=<1 I΅wW`CY}5Ě8CaC |Ԛ~S{."YD}=y̫(JPC`O ||?hCyٔMjrC0T0џCZ#)e'Ga\ ]uaDJR(}48 *{2_ĐLP#PJO #h\]bO aB!w艝'uLHދ$o ד#V7ioOnCB;s-t:FҤZ=FHo8̞h}}dUUVpҋEiS=O޶ō/MY~٥ma>tFg:'i{Yx `}Hc
+nI!xO9e(c?%c68o}*K.R͗cmr_#@ǝ7R~GW;#3¥%A.$:|o#s('<"ORR-Ji^>Jə@T
+㙾饒 '-[G g#rmX%Re;!q!Ok"ϳNxF(ć\0f;,-Z+ܲ޷uOυ1[#˜Dy0 ˻ܻVXp=q`埘@nˡuRdɡ*M#ۮ/œag.bpu8$H>!8(yϧ3q<V`Z#5R3:3İi#$ۻ!6nbJ
+մ )aM*=wg_ӽ%.J9' w<vZ7|APֶmeHct21P,ear44Q~+۔i]/_>cT3!]qMo/Yӏ
+̤E fه38@5$`CQKtLC]:-}}^ei >1bMd;ڛmv6Ϸ|Pşz|}csNxm̺0ÄP˅ÄE_r aIm,|RvXJ7s}'Ŵ꘭tȪ2x%2p.8g{?@l /ZDCoY!%D塝v[@(OIXCxo:hXCt{86IA 8 e&,IoJp
+/́z=t`6TW) {hw7Pb[8="c=1v佲(!|/կڰQ('6ޕRF=X?'^6%CZ;hVK{kb0Ұ0 )ýgaߚ}o֗Wܽ4PI>8
+endstream
+endobj
+8437 0 obj
+<< /Type /Page /Contents 8438 0 R /Resources 8436 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 8321 0 R >>
+endobj
+8439 0 obj
+<< /D [ 8437 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+8440 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 695.108 null ] >>
+endobj
+8441 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 684.149 null ] >>
+endobj
+8442 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 673.19 null ] >>
+endobj
+8443 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 662.231 null ] >>
+endobj
+8444 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 651.273 null ] >>
+endobj
+8445 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 640.314 null ] >>
+endobj
+8446 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 629.355 null ] >>
+endobj
+8447 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 618.396 null ] >>
+endobj
+8448 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 607.437 null ] >>
+endobj
+8449 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 596.478 null ] >>
+endobj
+8450 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 585.519 null ] >>
+endobj
+8451 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 574.56 null ] >>
+endobj
+8452 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 563.601 null ] >>
+endobj
+8453 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 552.642 null ] >>
+endobj
+8454 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 541.684 null ] >>
+endobj
+8455 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 530.725 null ] >>
+endobj
+8456 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 519.766 null ] >>
+endobj
+8457 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 508.807 null ] >>
+endobj
+8458 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 497.848 null ] >>
+endobj
+8459 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 486.889 null ] >>
+endobj
+8460 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 475.93 null ] >>
+endobj
+8461 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 464.971 null ] >>
+endobj
+8462 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 454.012 null ] >>
+endobj
+8463 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 443.053 null ] >>
+endobj
+8464 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 432.094 null ] >>
+endobj
+8465 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 421.136 null ] >>
+endobj
+8466 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 410.177 null ] >>
+endobj
+8467 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 351.397 null ] >>
+endobj
+8468 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 340.438 null ] >>
+endobj
+8469 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 311.547 null ] >>
+endobj
+8470 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 300.588 null ] >>
+endobj
+8471 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 289.629 null ] >>
+endobj
+8472 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 278.67 null ] >>
+endobj
+8473 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 237.823 null ] >>
+endobj
+8474 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 221.883 null ] >>
+endobj
+8475 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 210.924 null ] >>
+endobj
+8476 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 199.965 null ] >>
+endobj
+8477 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 189.006 null ] >>
+endobj
+8478 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 178.047 null ] >>
+endobj
+8479 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 167.088 null ] >>
+endobj
+8480 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 156.129 null ] >>
+endobj
+8481 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 145.17 null ] >>
+endobj
+8482 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 134.212 null ] >>
+endobj
+8483 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 123.253 null ] >>
+endobj
+8484 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 112.294 null ] >>
+endobj
+8485 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 101.335 null ] >>
+endobj
+8486 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 90.376 null ] >>
+endobj
+8487 0 obj
+<< /D [ 8437 0 R /XYZ 81.077 79.417 null ] >>
+endobj
+8436 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F30 644 0 R /F68 189 0 R /F64 183 0 R /F69 304 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+8490 0 obj
+<< /Filter /FlateDecode /Length 1638 >>
+stream
+xZKo8WG{ɷ[ȒWRdȒ)QE/L >ҦՄN>>?5;yQۉ$2' Nt&VhFffyj_gwXN,qZ ;3.DaBY^Qjd<uFbDNʨZsYQ(.\hEGۆ3)m~mep6D7A!ZgiTeV̯<G{-aVzaiC!vE}Mݓ7~_2C8WWu{YՄk=S8φAӼo", E:4gA"ۃvj(5*s4޶DHm d!o?ofS ɸ,9X_|MP]y&Rs"E_.BC4iň4J h,.Tq ^]럞c#uZ8"@|
+bQ|#wf
+5z?8_
+
+BcU2ڪ?Fҭp@wzՙ!$iW6pSl[ͳyp$1T +H[`է @]G;&hۍ^]T Ёv\xl3;oޕE,@THF@D%4޶RDat3,x\]")hJR3\h43D6CteR#=hz tqtgc
+Fdϰ7C4TzWMp5DmS/"qhu(KA^[7ѭD-!~_r)_%(G.zȿ GȇyDRLd#{v?
+endstream
+endobj
+8489 0 obj
+<< /Type /Page /Contents 8490 0 R /Resources 8488 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 8321 0 R >>
+endobj
+8491 0 obj
+<< /D [ 8489 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+8492 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+8493 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+8494 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+8495 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+8496 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+8497 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+8498 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+8499 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+8500 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+8501 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+8502 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+8503 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+8504 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 605.444 null ] >>
+endobj
+8505 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 594.486 null ] >>
+endobj
+8506 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 583.527 null ] >>
+endobj
+8507 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 572.568 null ] >>
+endobj
+8508 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 541.684 null ] >>
+endobj
+8509 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 530.725 null ] >>
+endobj
+8510 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 519.766 null ] >>
+endobj
+8511 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 508.807 null ] >>
+endobj
+8512 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 497.848 null ] >>
+endobj
+8513 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 486.889 null ] >>
+endobj
+8514 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 475.93 null ] >>
+endobj
+8515 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 445.046 null ] >>
+endobj
+8516 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 434.087 null ] >>
+endobj
+8517 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 423.128 null ] >>
+endobj
+8518 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 412.169 null ] >>
+endobj
+8519 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 401.21 null ] >>
+endobj
+8520 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 390.251 null ] >>
+endobj
+8521 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 379.292 null ] >>
+endobj
+8522 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 363.352 null ] >>
+endobj
+8523 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 352.393 null ] >>
+endobj
+8524 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 341.434 null ] >>
+endobj
+8525 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 330.476 null ] >>
+endobj
+8526 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 319.517 null ] >>
+endobj
+8527 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 308.558 null ] >>
+endobj
+8528 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 297.599 null ] >>
+endobj
+8529 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 286.64 null ] >>
+endobj
+8530 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 275.681 null ] >>
+endobj
+8531 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 264.722 null ] >>
+endobj
+8532 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 248.782 null ] >>
+endobj
+8533 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 237.823 null ] >>
+endobj
+8534 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 226.864 null ] >>
+endobj
+8535 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 215.905 null ] >>
+endobj
+8536 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 204.946 null ] >>
+endobj
+8537 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 193.987 null ] >>
+endobj
+8538 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 183.028 null ] >>
+endobj
+8539 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 172.07 null ] >>
+endobj
+8540 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 161.111 null ] >>
+endobj
+8541 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 150.152 null ] >>
+endobj
+8542 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 139.193 null ] >>
+endobj
+8543 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 128.234 null ] >>
+endobj
+8544 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 117.275 null ] >>
+endobj
+8545 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 106.316 null ] >>
+endobj
+8546 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 95.357 null ] >>
+endobj
+8547 0 obj
+<< /D [ 8489 0 R /XYZ 81.077 84.398 null ] >>
+endobj
+8488 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+8550 0 obj
+<< /Filter /FlateDecode /Length 2703 >>
+stream
+x[moۺ_
+O)2fެwW(عXouΫZ_VW 2(Kcf-z)X *İ2m)Y'X""#N)9b\ 4YVЎ+ҽ[z*W x1魨NeUY;H9AQPUHrYl$bpn* -6wJφQ⻚ <DM9joby%D 2Bԛm\m9D$ )7SNS8b!@+b7y`،0gtR YsӨ!@)'w.+/QVb`(!D{[B-ƲJ\
+/LF)XdrI(03Wbda_-j:__VIĔl{:~nl}؍ :znuMpTN >>nǁjysy'_.˫W4;l >(S^m4*S:_9!GrIXb<8Q92@/ڻ,F2et!H_*9H q>@4UrLCABy1)Et(3"LdB؇GG{MU~K_}Y:eB"LqT sh\V̯(@P@z0ԧG}Gew1㜟/
+yMw"=_eY_n
+b$W:]7wefH38qD,So" 1W@vmsh:Hz`6n/Ylf%(pf
+%`nz{}rbܗ/E}39*04K.f\a1d\t0ݩa.k rn%n{3Ƽ/ Jn3waI)u=HSR:.zG8Eznkzg>]zk>3i,LdFf?}8;4YNA9c &LQ靺35Í^Uǡb) `oJ~{.Gչ|gIy5o
+H lIRHàf(V!Oqxi7/ B,=8,MAqgu*V>b0DU]-'}|zH|!u! H |J3v} i&<ߟ!u2oUi"abs9}O٠JJ>$޷LtHPME Q{Yf[i (2E& ư_?m^3>Oicy[X3B8bP3Je)<_<Yތ(&(܈]J}XS2w*b}XŃ301phzl;^K(|~pƑPU
+xy Q@>H0ꄦ@x
+=`£ Qwk;2yh#
+rm$F]{l7+I&},E7l6Ec[1WNA#XʩY/>I#~.A"l}$3x7M}kǰ|DڔS[آ3
+'נ@?gΤW*‰cԯWs y/W?98'?O%d"Kt7}AAB>gRpޱؓ'inkՕ9N#F7k,tYPFoqeJhsl-]c(G҂(>hFontl]a PW|%A(>|RɫvU$wz;g$; Fq,m]TӻM}7<~@Uj(db(-
+endstream
+endobj
+8549 0 obj
+<< /Type /Page /Contents 8550 0 R /Resources 8548 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 8321 0 R >>
+endobj
+8551 0 obj
+<< /D [ 8549 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+8552 0 obj
+<< /D [ 8549 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+8553 0 obj
+<< /D [ 8549 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+8554 0 obj
+<< /D [ 8549 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+8555 0 obj
+<< /D [ 8549 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+8556 0 obj
+<< /D [ 8549 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+8557 0 obj
+<< /D [ 8549 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+8558 0 obj
+<< /D [ 8549 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+8559 0 obj
+<< /D [ 8549 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+8560 0 obj
+<< /D [ 8549 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+8561 0 obj
+<< /D [ 8549 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+8562 0 obj
+<< /D [ 8549 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+8563 0 obj
+<< /D [ 8549 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+8564 0 obj
+<< /D [ 8549 0 R /XYZ 81.077 632.662 null ] >>
+endobj
+8565 0 obj
+<< /D [ 8549 0 R /XYZ 81.077 621.703 null ] >>
+endobj
+8566 0 obj
+<< /D [ 8549 0 R /XYZ 81.077 610.744 null ] >>
+endobj
+8567 0 obj
+<< /D [ 8549 0 R /XYZ 81.077 599.785 null ] >>
+endobj
+8568 0 obj
+<< /D [ 8549 0 R /XYZ 81.077 588.826 null ] >>
+endobj
+8569 0 obj
+<< /D [ 8549 0 R /XYZ 81.077 577.867 null ] >>
+endobj
+8570 0 obj
+<< /D [ 8549 0 R /XYZ 81.077 566.908 null ] >>
+endobj
+8571 0 obj
+<< /D [ 8549 0 R /XYZ 81.077 555.949 null ] >>
+endobj
+8572 0 obj
+<< /D [ 8549 0 R /XYZ 81.077 544.99 null ] >>
+endobj
+8573 0 obj
+<< /D [ 8549 0 R /XYZ 81.077 534.032 null ] >>
+endobj
+8574 0 obj
+<< /D [ 8549 0 R /XYZ 81.077 523.073 null ] >>
+endobj
+8575 0 obj
+<< /D [ 8549 0 R /XYZ 81.077 512.114 null ] >>
+endobj
+8576 0 obj
+<< /D [ 8549 0 R /XYZ 81.077 486.169 null ] >>
+endobj
+8577 0 obj
+<< /D [ 8549 0 R /XYZ 81.077 475.21 null ] >>
+endobj
+8578 0 obj
+<< /D [ 8549 0 R /XYZ 81.077 464.251 null ] >>
+endobj
+8579 0 obj
+<< /D [ 8549 0 R /XYZ 81.077 453.292 null ] >>
+endobj
+8580 0 obj
+<< /D [ 8549 0 R /XYZ 81.077 442.333 null ] >>
+endobj
+8581 0 obj
+<< /D [ 8549 0 R /XYZ 81.077 431.374 null ] >>
+endobj
+8582 0 obj
+<< /D [ 8549 0 R /XYZ 81.077 420.415 null ] >>
+endobj
+8583 0 obj
+<< /D [ 8549 0 R /XYZ 81.077 409.456 null ] >>
+endobj
+8584 0 obj
+<< /D [ 8549 0 R /XYZ 81.077 398.498 null ] >>
+endobj
+8585 0 obj
+<< /D [ 8549 0 R /XYZ 81.077 387.539 null ] >>
+endobj
+8586 0 obj
+<< /D [ 8549 0 R /XYZ 81.077 376.58 null ] >>
+endobj
+8587 0 obj
+<< /D [ 8549 0 R /XYZ 81.077 365.621 null ] >>
+endobj
+8588 0 obj
+<< /D [ 8549 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+8589 0 obj
+<< /D [ 8549 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+8590 0 obj
+<< /D [ 8549 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+8591 0 obj
+<< /D [ 8549 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+8548 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F70 305 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+8594 0 obj
+<< /Filter /FlateDecode /Length 2429 >>
+stream
+xZ[o~ϯxv$ Z4]~( ),"33$k`&9o̹C/~y+o~$GiB]ndH$I%AXn(T.w۸"A,qbG&ݪ+Ufy%ժOf7LGr0r]}Sum{6͕{0,E$^{^[04A$#i.{c VCVͦBU+
+)iVW
+6LNda_qQ 'o/#Ar vV~^@ Q[=H$xv}*C8p~
+=
+xC+ZͪO3"5W#`b("M'b ~9QL<](26f)ɪZ()Dslvaa0a>9%ksF^6&~Vl%$>avv(Jɘ HKvB JaFϧ$s7h(MGE.;`d,2Lp<INFw"҂CKeMIA uB[d: M36mo$ƉzܖZek)}ydVQGUwz+fzߘPeR $ oN.S{2GR#Y3Kg*q)LK\A+yfL``Me;[Є#.O+2A>j8f> 9#36
+H$1> z-k` TP2]%!ؚej9=kVKhrk5w2PUdTp^ΖvtfcqWwMSRBÓقJٰ6XMh?6BW *P#17=o*=Ջ¼Jk
+r<n&&O&JHJx.Z, 4Uؘ z\]m+Lja Qxj3lL}}){ 2.1o<ofNMK hi͗Ç8w$Bz`o/
+:%W2P[Yw# Q|ఇ:.{}3uc ɶ#ܐBn`_Sf+۲^k
+jCzjos\8.XN(/K:
+<+=tpTRZ}Je}}S9ݡKV~:_y?BTyHVhN}t8G!N`paFB/fh'H:6틏aKz{G؉i]
+ʜahX]_;72&q E1I܁DȰ/.)QbUW OmF0cd%65&52$F'>=3:q c.#uc. =,3H)<^RxYqa5=Nik=ЖIg]Oa8敖Ԣ㫷r
+yB SBJ?=[;B⡔a?vȝE
+ $CNf$D 4 :!h}vԙҰ3 |:CR \pA}T&[
+endstream
+endobj
+8593 0 obj
+<< /Type /Page /Contents 8594 0 R /Resources 8592 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 8321 0 R >>
+endobj
+8595 0 obj
+<< /D [ 8593 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+8596 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+8597 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+8598 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+8599 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+8600 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+8601 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+8602 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+8603 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 650.276 null ] >>
+endobj
+8604 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 639.317 null ] >>
+endobj
+8605 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 628.358 null ] >>
+endobj
+8606 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 617.4 null ] >>
+endobj
+8607 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 606.441 null ] >>
+endobj
+8608 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 595.482 null ] >>
+endobj
+8609 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 584.523 null ] >>
+endobj
+8610 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 573.564 null ] >>
+endobj
+8611 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 562.605 null ] >>
+endobj
+8612 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 551.646 null ] >>
+endobj
+8613 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 540.687 null ] >>
+endobj
+8614 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 529.728 null ] >>
+endobj
+8615 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 518.769 null ] >>
+endobj
+8616 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 507.811 null ] >>
+endobj
+8617 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 496.852 null ] >>
+endobj
+8618 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 424.124 null ] >>
+endobj
+8619 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 413.165 null ] >>
+endobj
+8620 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 402.207 null ] >>
+endobj
+8621 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 359.367 null ] >>
+endobj
+8622 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 348.408 null ] >>
+endobj
+8623 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 307.561 null ] >>
+endobj
+8624 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 296.603 null ] >>
+endobj
+8625 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 285.644 null ] >>
+endobj
+8626 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 274.685 null ] >>
+endobj
+8627 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 263.726 null ] >>
+endobj
+8628 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 252.767 null ] >>
+endobj
+8629 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 241.808 null ] >>
+endobj
+8630 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 230.849 null ] >>
+endobj
+8631 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 219.89 null ] >>
+endobj
+8632 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 208.931 null ] >>
+endobj
+8633 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 168.085 null ] >>
+endobj
+8634 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 157.126 null ] >>
+endobj
+8635 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 146.167 null ] >>
+endobj
+8636 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 135.208 null ] >>
+endobj
+8637 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 124.249 null ] >>
+endobj
+8638 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 113.29 null ] >>
+endobj
+8639 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 102.331 null ] >>
+endobj
+8640 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 91.372 null ] >>
+endobj
+8641 0 obj
+<< /D [ 8593 0 R /XYZ 81.077 80.413 null ] >>
+endobj
+8592 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F70 305 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+8644 0 obj
+<< /Filter /FlateDecode /Length 1864 >>
+stream
+xZ[OF~WDBZf~T U*'޺Udh;.j{xƄl<_͙s~DGOhK?O~>pHg舍&ьPF_c ?,
+fj|rv.?q3ggyr`1 6lj;jk.pSSΐ6leCb֦<;({R}|< `c{.~ ? e[a\-wG5-)"bn9ϸ`N\ps{ĕ91KC:JHC=buE;*7uGN ݔ><MKcwŬ~VP t!u4:'2!'Q'm@+۹fr N_E e
+endstream
+endobj
+8643 0 obj
+<< /Type /Page /Contents 8644 0 R /Resources 8642 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 8321 0 R >>
+endobj
+8645 0 obj
+<< /D [ 8643 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+8646 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+8647 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+8648 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+8649 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+8650 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+8651 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+8652 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+8653 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+8654 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+8655 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+8656 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+8657 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+8658 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+8659 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 626.366 null ] >>
+endobj
+8660 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 615.407 null ] >>
+endobj
+8661 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 604.448 null ] >>
+endobj
+8662 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 593.489 null ] >>
+endobj
+8663 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 582.53 null ] >>
+endobj
+8664 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 571.571 null ] >>
+endobj
+8665 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 560.613 null ] >>
+endobj
+8666 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 514.229 null ] >>
+endobj
+8667 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 503.27 null ] >>
+endobj
+8668 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 492.311 null ] >>
+endobj
+8669 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 481.352 null ] >>
+endobj
+8670 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 470.393 null ] >>
+endobj
+8671 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 459.434 null ] >>
+endobj
+8672 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 448.476 null ] >>
+endobj
+8673 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 437.517 null ] >>
+endobj
+8674 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 426.558 null ] >>
+endobj
+8675 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 415.599 null ] >>
+endobj
+8676 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 404.64 null ] >>
+endobj
+8677 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 393.681 null ] >>
+endobj
+8678 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 382.722 null ] >>
+endobj
+8679 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 371.763 null ] >>
+endobj
+8680 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 360.804 null ] >>
+endobj
+8681 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 330.692 null ] >>
+endobj
+8682 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 319.733 null ] >>
+endobj
+8683 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 308.774 null ] >>
+endobj
+8684 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 297.815 null ] >>
+endobj
+8685 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 286.856 null ] >>
+endobj
+8686 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 275.897 null ] >>
+endobj
+8687 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 264.938 null ] >>
+endobj
+8688 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 253.979 null ] >>
+endobj
+8689 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 243.021 null ] >>
+endobj
+8690 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 232.062 null ] >>
+endobj
+8691 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 221.103 null ] >>
+endobj
+8692 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 210.144 null ] >>
+endobj
+8693 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 199.185 null ] >>
+endobj
+8694 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 188.226 null ] >>
+endobj
+8695 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 177.267 null ] >>
+endobj
+8696 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 166.308 null ] >>
+endobj
+8697 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 155.349 null ] >>
+endobj
+8698 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 144.39 null ] >>
+endobj
+8699 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 133.431 null ] >>
+endobj
+8700 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 122.473 null ] >>
+endobj
+8701 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+8702 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+8703 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+8704 0 obj
+<< /D [ 8643 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+8642 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F77 542 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+8707 0 obj
+<< /Filter /FlateDecode /Length 1566 >>
+stream
+xڽYK6I&|? Xh'=4 {k!n䷗lt^oڋ-<əoce${wA 'śde 'fF:ӊQ4?&Zsz[,2V)nb0;B? lK`fG S.6w:4 n
+hhXD._K&wlVyM^o/^У91 P#u>WW=Ŏ }B.I1DS*VV'rUV\\4j4: *s"Ji|daQ^xRA 1q<ݜOJR:)shDP}evU4+4 fAʠnX7閃=\X4MlW<R9G>FͅhP<ȣ8.1zeۺ^!ۮ?8,F D IsF&>Q}ʦhm-@p:s_x?)xiߩJ\{yѺ3]Z*hqct
+RMqTbtaʋ@H])pf^׫^@1߮&g_QϿvj<
+MV >JJUG!e2n-QLG!+\O(Am_6HR81)R0^kF,%H*xeP>AR4 !@Q-n1ݜsP*&˪rͧC`lk
+M1$h81zX~~ w1Ä6A4>\73 ʦq}EWTwsoL0*蝖8F1V{ q_֌L*rdk'h ֆZ zt{a\A5OЫ8}zpmw.1&~sb8@i=k'hm€ {' mZ
+3e;AGTs=/wɅRcOlʜ4E 0Wݠ_TYs&` oAV,hQFi/o}n۠S+
+ZiNi?@lht_&EM [s讷%I$a޼6/GFY/;}P|-pQl[ ˢu7GLO>#_=C0|1{Ax5|쟙'wKf#]=Z͎qY/P5T;Zųf|/9i4nsʺMqf |崬2Alңſ<4
+endstream
+endobj
+8706 0 obj
+<< /Type /Page /Contents 8707 0 R /Resources 8705 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 8321 0 R >>
+endobj
+8708 0 obj
+<< /D [ 8706 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+8709 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+8710 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+8711 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+8712 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+8713 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+8714 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+8715 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+8716 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+8717 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+8718 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+8719 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+8720 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+8721 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+8722 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 626.366 null ] >>
+endobj
+8723 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 615.407 null ] >>
+endobj
+8724 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 604.448 null ] >>
+endobj
+8725 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 593.489 null ] >>
+endobj
+8726 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 582.53 null ] >>
+endobj
+8727 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 571.571 null ] >>
+endobj
+8728 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 560.613 null ] >>
+endobj
+8729 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 549.654 null ] >>
+endobj
+8730 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 538.695 null ] >>
+endobj
+8731 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 527.736 null ] >>
+endobj
+8732 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 516.777 null ] >>
+endobj
+8733 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 505.818 null ] >>
+endobj
+8734 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 494.859 null ] >>
+endobj
+8735 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 483.9 null ] >>
+endobj
+8736 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 472.941 null ] >>
+endobj
+8737 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 461.982 null ] >>
+endobj
+8738 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 451.023 null ] >>
+endobj
+8739 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 440.065 null ] >>
+endobj
+8740 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 429.106 null ] >>
+endobj
+8741 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 418.147 null ] >>
+endobj
+8742 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 407.188 null ] >>
+endobj
+8743 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 396.229 null ] >>
+endobj
+8744 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 385.27 null ] >>
+endobj
+8745 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 374.311 null ] >>
+endobj
+8746 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 363.352 null ] >>
+endobj
+8747 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 352.393 null ] >>
+endobj
+8748 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 341.434 null ] >>
+endobj
+8749 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 330.476 null ] >>
+endobj
+8750 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 319.517 null ] >>
+endobj
+8751 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 308.558 null ] >>
+endobj
+8752 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 297.599 null ] >>
+endobj
+8753 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 286.64 null ] >>
+endobj
+8754 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 275.681 null ] >>
+endobj
+8755 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 264.722 null ] >>
+endobj
+8756 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 253.763 null ] >>
+endobj
+8757 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 242.804 null ] >>
+endobj
+8758 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 231.845 null ] >>
+endobj
+8759 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 220.887 null ] >>
+endobj
+8760 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 209.928 null ] >>
+endobj
+8761 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 198.969 null ] >>
+endobj
+8762 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 188.01 null ] >>
+endobj
+8763 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 177.051 null ] >>
+endobj
+8764 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 166.092 null ] >>
+endobj
+8765 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 155.133 null ] >>
+endobj
+8766 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 144.174 null ] >>
+endobj
+8767 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 133.215 null ] >>
+endobj
+8768 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 122.256 null ] >>
+endobj
+8769 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 91.372 null ] >>
+endobj
+8770 0 obj
+<< /D [ 8706 0 R /XYZ 81.077 80.413 null ] >>
+endobj
+8705 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+8773 0 obj
+<< /Filter /FlateDecode /Length 1796 >>
+stream
+xZKo8W6,ߤ ,|k AqdG, ;$TK4<L' 99y=?yuD2' It&VhFfzvjL$NsXi-fxa~DŽܬUwIQ/j-*f_eo垂NQ(wIv>,8[.g<>?o66.U^.>Ƌd7sꊈ0)0u!hfݠ%эU&6eVԳ5C{YUv7gofkpFlifzIb5N/Մk8}}4ƾ\CD壩yd[NjƵӿߛHGjܒ#;hl+Q'Rѡ bP;;gsR,n KYSlouRTd /t[)3GԊiW&a
+5>/GD)d+Tо.\"-if:_DEʭ,$}quh.nt*?c
+"s @ T\q
+Z htVVì+VzGUuVdd5`m]yyVdʑIٲKGHb3q>g!uD(-IGfl-X j*Nt
+Zڠ"-ʊUFdJt٥|<TenCoDz6%
+I.!Ժ7g+xO:mv~W,4A'DDVƻ,O޿<=O^L<o6u{S4ONϚy &k
+f}$h& {*}ߑBmrSGwT:]_ʢ,RWx9U<3>7I&Nsv>G|'ŗY1@C:. y`4;55(Bʗ-7?ҕ}/dǦ=a)2\㣟a1'.FCp\a1P+2p\ xBI'G?Pvv+AC ӤUGQ/2(V:NdOVnlVߌJǝ/ݲ9ݷl4 nWZJrVt=0=EO!4U 9<0n__bGvWqkxUi2ݠ8ޥ#r:KB.ōl<w)AQ.}\2,o룾q$P0TѬ+cw
+CG
+endstream
+endobj
+8772 0 obj
+<< /Type /Page /Contents 8773 0 R /Resources 8771 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 8321 0 R >>
+endobj
+8774 0 obj
+<< /D [ 8772 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+8775 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+8776 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+8777 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+8778 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+8779 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+8780 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+8781 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+8782 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+8783 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+8784 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+8785 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+8786 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+8787 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+8788 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 626.366 null ] >>
+endobj
+8789 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 615.407 null ] >>
+endobj
+8790 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 604.448 null ] >>
+endobj
+8791 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 593.489 null ] >>
+endobj
+8792 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 582.53 null ] >>
+endobj
+8793 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 571.571 null ] >>
+endobj
+8794 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 560.613 null ] >>
+endobj
+8795 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 549.654 null ] >>
+endobj
+8796 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 538.695 null ] >>
+endobj
+8797 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 527.736 null ] >>
+endobj
+8798 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 516.777 null ] >>
+endobj
+8799 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 505.818 null ] >>
+endobj
+8800 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 494.859 null ] >>
+endobj
+8801 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 454.416 null ] >>
+endobj
+8802 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 443.458 null ] >>
+endobj
+8803 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 432.499 null ] >>
+endobj
+8804 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 421.54 null ] >>
+endobj
+8805 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 410.581 null ] >>
+endobj
+8806 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 399.622 null ] >>
+endobj
+8807 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 388.663 null ] >>
+endobj
+8808 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 377.704 null ] >>
+endobj
+8809 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 366.745 null ] >>
+endobj
+8810 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 342.175 null ] >>
+endobj
+8811 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 311.493 null ] >>
+endobj
+8812 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 282.736 null ] >>
+endobj
+8813 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 271.777 null ] >>
+endobj
+8814 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 260.819 null ] >>
+endobj
+8815 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 249.86 null ] >>
+endobj
+8816 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 238.901 null ] >>
+endobj
+8817 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 210.144 null ] >>
+endobj
+8818 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 199.185 null ] >>
+endobj
+8819 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 188.226 null ] >>
+endobj
+8820 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 177.267 null ] >>
+endobj
+8821 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 166.308 null ] >>
+endobj
+8822 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 155.349 null ] >>
+endobj
+8823 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 144.39 null ] >>
+endobj
+8824 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 133.431 null ] >>
+endobj
+8825 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 122.473 null ] >>
+endobj
+8826 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+8827 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+8828 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+8829 0 obj
+<< /D [ 8772 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+8771 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F77 542 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+8832 0 obj
+<< /Filter /FlateDecode /Length 1563 >>
+stream
+xڽ]oX+,qHp?"
+>f<{7̴'o&'YiP2O3yˬpq+uڏbyU>Knvw$S g;[˸ROFgFod *0Ƃݾ{ͺgӦWeg=_ίVU_,N"۔ MqM)IiblyXlgmR4XxMY+}pˤєJǦ~Hg6H4R;yX:Dg,UzibjdI ;#[ɴ3N/-4~! HM741L~s$2 ̘"KC&Rȴ3", HMOw̪H'KC&Rcd6oE`]!M27Gg4d"uo 8iLş1Z<ز4b"5=H>{02GlY2nZq٪V[t;:jzl6w
+sou Kg`,IK8 4t{n0_j&n0<F5:\.##u?|y% FZڜ,@W+<hsR^6y^|Wd{_:\*/ΣȲT:mCٖ ]/1 UK9P& 5=6F6]P
+ʺ%~+g#cN˛+]7&HPXכ*NvftI}&WS~#N7ބh6g#5B.ƦH?n >c>r<[pĿNS192|!!Na 1%=TLKm \΄,~
+endstream
+endobj
+8831 0 obj
+<< /Type /Page /Contents 8832 0 R /Resources 8830 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 8893 0 R >>
+endobj
+8833 0 obj
+<< /D [ 8831 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+8834 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+8835 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+8836 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+8837 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+8838 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+8839 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+8840 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+8841 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+8842 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+8843 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+8844 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+8845 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+8846 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+8847 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 626.366 null ] >>
+endobj
+8848 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 615.407 null ] >>
+endobj
+8849 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 604.448 null ] >>
+endobj
+8850 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 593.489 null ] >>
+endobj
+8851 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 582.53 null ] >>
+endobj
+8852 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 571.571 null ] >>
+endobj
+8853 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 560.613 null ] >>
+endobj
+8854 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 549.654 null ] >>
+endobj
+8855 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 538.695 null ] >>
+endobj
+8856 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 527.736 null ] >>
+endobj
+8857 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 511.796 null ] >>
+endobj
+8858 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 500.837 null ] >>
+endobj
+8859 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 489.878 null ] >>
+endobj
+8860 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 478.919 null ] >>
+endobj
+8861 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 467.96 null ] >>
+endobj
+8862 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 457.001 null ] >>
+endobj
+8863 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 446.042 null ] >>
+endobj
+8864 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 435.083 null ] >>
+endobj
+8865 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 424.124 null ] >>
+endobj
+8866 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 413.165 null ] >>
+endobj
+8867 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 402.207 null ] >>
+endobj
+8868 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 391.248 null ] >>
+endobj
+8869 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 380.289 null ] >>
+endobj
+8870 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 369.33 null ] >>
+endobj
+8871 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 358.371 null ] >>
+endobj
+8872 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 347.412 null ] >>
+endobj
+8873 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 336.453 null ] >>
+endobj
+8874 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 325.494 null ] >>
+endobj
+8875 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 314.535 null ] >>
+endobj
+8876 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 283.651 null ] >>
+endobj
+8877 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 267.711 null ] >>
+endobj
+8878 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 256.752 null ] >>
+endobj
+8879 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 245.793 null ] >>
+endobj
+8880 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 234.834 null ] >>
+endobj
+8881 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 223.875 null ] >>
+endobj
+8882 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 212.916 null ] >>
+endobj
+8883 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 201.957 null ] >>
+endobj
+8884 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 190.999 null ] >>
+endobj
+8885 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 180.04 null ] >>
+endobj
+8886 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 149.155 null ] >>
+endobj
+8887 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 138.197 null ] >>
+endobj
+8888 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 127.238 null ] >>
+endobj
+8889 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 116.279 null ] >>
+endobj
+8890 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 105.32 null ] >>
+endobj
+8891 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 94.361 null ] >>
+endobj
+8892 0 obj
+<< /D [ 8831 0 R /XYZ 81.077 83.402 null ] >>
+endobj
+8830 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F30 644 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+8896 0 obj
+<< /Filter /FlateDecode /Length 2024 >>
+stream
+xڵZ]o}ϯ0/p-@`E 4
+ю^gyum;/L| y)G>D;u2hB%2"L֚e_ԏ.5%
+i;3dBh"]ˢ3<ͮrB˧iRJJS׏h4# z`U $fqBt dl$ ݾ& jF)MR&8b!w[EH
+#4~lw\|NƏ?4 Wm[9/9ZpKع0N;P~P[f i37d0Jg1ښ+_eoAU“fC3=OCC3=4m6]XhIX8q[(* U$R(SJ}~q%2@jpJDok8F'3FE]')rPsGU<吰 v}Ԯm[ lbgm[#;>PtޙeS߱ !faݘ!2~Ngl?dcaW4@}.͟Bn}s(*WHƩC2%\Si4ZR2"9!7Gp,OBYplWo=B 6QvcgȾtkkrԴ+/eO`9]3buym]pLjq T[wxܕzӝ(\VӝP('`o%G%D[*}/+S̪-BS^G/D[*rwͧ1êM\tY`_m[ )ʧ8Ry2/n08xW.?-ͻ=9N[q<IH! Nnj!p uKU8"!ilL횮wţ="Zm qb/BZS_hvof]T μ.B;Ps/)჎(!RyIz[fv2cpVGFrRpʲxeS5i*A%G4cfj7OJI;z~`& Ǎvd-GSjiF< :MAJJTJcC׎`z¹W%J@;%OE0pŠ8J!K$$hnK28AIpn)DǦ6'-"Qeٴi;X?b',#>⃢#ObX %<IbmTʬrBA)gH#IN(S.GhT?D
+)(kq48E;7_w+һbMQCɋa z&A&;
+endstream
+endobj
+8895 0 obj
+<< /Type /Page /Contents 8896 0 R /Resources 8894 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 8893 0 R >>
+endobj
+8897 0 obj
+<< /D [ 8895 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+8898 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+8899 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+8900 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+8901 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+8902 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+8903 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+8904 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+8905 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 674.187 null ] >>
+endobj
+8906 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 663.228 null ] >>
+endobj
+8907 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 652.269 null ] >>
+endobj
+8908 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 641.31 null ] >>
+endobj
+8909 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 630.351 null ] >>
+endobj
+8910 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 619.392 null ] >>
+endobj
+8911 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 608.433 null ] >>
+endobj
+8912 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 597.474 null ] >>
+endobj
+8913 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 586.515 null ] >>
+endobj
+8914 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 575.556 null ] >>
+endobj
+8915 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 564.598 null ] >>
+endobj
+8916 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 553.639 null ] >>
+endobj
+8917 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 542.68 null ] >>
+endobj
+8918 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 531.721 null ] >>
+endobj
+8919 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 520.762 null ] >>
+endobj
+8920 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 504.822 null ] >>
+endobj
+8921 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 493.863 null ] >>
+endobj
+8922 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 482.904 null ] >>
+endobj
+8923 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 471.945 null ] >>
+endobj
+8924 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 405.195 null ] >>
+endobj
+8925 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 394.236 null ] >>
+endobj
+8926 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 383.278 null ] >>
+endobj
+8927 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 372.319 null ] >>
+endobj
+8928 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 361.36 null ] >>
+endobj
+8929 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 350.401 null ] >>
+endobj
+8930 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 339.442 null ] >>
+endobj
+8931 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 328.483 null ] >>
+endobj
+8932 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 317.524 null ] >>
+endobj
+8933 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 306.565 null ] >>
+endobj
+8934 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 295.606 null ] >>
+endobj
+8935 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 254.759 null ] >>
+endobj
+8936 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 243.801 null ] >>
+endobj
+8937 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 232.842 null ] >>
+endobj
+8938 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 221.883 null ] >>
+endobj
+8939 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 210.924 null ] >>
+endobj
+8940 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 199.965 null ] >>
+endobj
+8941 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 189.006 null ] >>
+endobj
+8942 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 178.047 null ] >>
+endobj
+8943 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 167.088 null ] >>
+endobj
+8944 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 156.129 null ] >>
+endobj
+8945 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 145.17 null ] >>
+endobj
+8946 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 134.212 null ] >>
+endobj
+8947 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 123.253 null ] >>
+endobj
+8948 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 112.294 null ] >>
+endobj
+8949 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 101.335 null ] >>
+endobj
+8950 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 90.376 null ] >>
+endobj
+8951 0 obj
+<< /D [ 8895 0 R /XYZ 81.077 79.417 null ] >>
+endobj
+8894 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F30 644 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+8954 0 obj
+<< /Filter /FlateDecode /Length 2013 >>
+stream
+xڵZMo6W؋\~hآۢ@shsb+GJr4^Ғ)qg4CΛ!'7< HO/g/~z‘фLDaI&Hro]')DhČ %2/yq>TLǢ\uf]%}u/_.0"zF=D;:>i6>/.B&KtCsus̘D8q'{nHn۬o:~oSҴe&J5"{F4D;v=$Jl^\{k kŻr&NTxbq}a~+2 yn3[e~jQ)e=%W]OvK#W D.풭-r1ne},vֻ3-MW{]l L'%-50KH%,>J80mjڗr"kw˯nkv9X«6f gl;$GS[Pm-ڴYe." OqX OKH>Y
+IM;B<?}aSyS0}л= r],eү%eu jH퍁ivaU-OM[w٩S8RJ0r ( <i i<HQ [P=R
+l9AZHGjV:1y(+n7v]g`."C}%D;.7vUe4!Ǝô) f 9b&Zh
+,1^QюHxQ.]W2/ZbrŇ*If~Eq~dU8/>D+ 5uE8ϧID/,'D[2]CGz*S*Bj0h
+H*stQpf&I t3{7qm^mysȉz_a>a]M>.:= '{]>̟#{pjʨBRʀR6IUmh*|hΧoJAlO}e`iJC~L:}t!Sxp[tg]Qn
+H򾬗^?A i_ -
+endstream
+endobj
+8953 0 obj
+<< /Type /Page /Contents 8954 0 R /Resources 8952 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 8893 0 R >>
+endobj
+8955 0 obj
+<< /D [ 8953 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+8956 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+8957 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+8958 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+8959 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+8960 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+8961 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+8962 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+8963 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+8964 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+8965 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+8966 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+8967 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+8968 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+8969 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 626.366 null ] >>
+endobj
+8970 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 615.407 null ] >>
+endobj
+8971 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 604.448 null ] >>
+endobj
+8972 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 593.489 null ] >>
+endobj
+8973 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 582.53 null ] >>
+endobj
+8974 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 571.571 null ] >>
+endobj
+8975 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 560.613 null ] >>
+endobj
+8976 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 549.654 null ] >>
+endobj
+8977 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 538.695 null ] >>
+endobj
+8978 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 527.736 null ] >>
+endobj
+8979 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 498.844 null ] >>
+endobj
+8980 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 487.885 null ] >>
+endobj
+8981 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 476.926 null ] >>
+endobj
+8982 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 465.967 null ] >>
+endobj
+8983 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 455.009 null ] >>
+endobj
+8984 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 444.05 null ] >>
+endobj
+8985 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 433.091 null ] >>
+endobj
+8986 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 422.132 null ] >>
+endobj
+8987 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 411.173 null ] >>
+endobj
+8988 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 400.214 null ] >>
+endobj
+8989 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 335.457 null ] >>
+endobj
+8990 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 324.498 null ] >>
+endobj
+8991 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 313.539 null ] >>
+endobj
+8992 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 302.58 null ] >>
+endobj
+8993 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 291.621 null ] >>
+endobj
+8994 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 280.662 null ] >>
+endobj
+8995 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 269.703 null ] >>
+endobj
+8996 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 258.745 null ] >>
+endobj
+8997 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 247.786 null ] >>
+endobj
+8998 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 236.827 null ] >>
+endobj
+8999 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 225.868 null ] >>
+endobj
+9000 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 214.909 null ] >>
+endobj
+9001 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 203.95 null ] >>
+endobj
+9002 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 192.991 null ] >>
+endobj
+9003 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 182.032 null ] >>
+endobj
+9004 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 171.073 null ] >>
+endobj
+9005 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 160.114 null ] >>
+endobj
+9006 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 149.155 null ] >>
+endobj
+9007 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 138.197 null ] >>
+endobj
+9008 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 127.238 null ] >>
+endobj
+9009 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 116.279 null ] >>
+endobj
+9010 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 105.32 null ] >>
+endobj
+9011 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 94.361 null ] >>
+endobj
+9012 0 obj
+<< /D [ 8953 0 R /XYZ 81.077 83.402 null ] >>
+endobj
+8952 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F30 644 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+9015 0 obj
+<< /Filter /FlateDecode /Length 1849 >>
+stream
+xZKo6W؋6\Mhl,Z[$j+MdtlD1fL&Qy"=jVۗ ()0Jo'OUǵ,MBPq1,oܥ˦Lޙ|Yp׳uYTM/:U0'!gڳ$yI Q #Jx ޛjM& (nt8;?+S>Xtש}OfM=4Ҭb
+%"L=|եu^?,M5oiK0D "HˆhG+=E2O2Cr#ȑ3q/s^<|qgezaCA_{ z3
+&ko;LSk=, hAW.tv:XffB\'T4FO$tt0ƕ*F=@"\ۧ]>3L 18X{n[e]Qgoo$C[È˚."t3x(`CFOrpq8AnJ8!<3m\2| 8<HёRC!uǚxGAN,B.=:PHh$eT!F~gXO#bDjD)bKͯ b9͚խvt}9LV^^Gk޼Ƥ}ػREۓzezvzg~eӋJjMjK_ywEY:r ڪO0k"#mAar4'M ޷J\Eoz >$<+oGY;,ݮrCO'@4+
+R(VA$rsnS
+endstream
+endobj
+9014 0 obj
+<< /Type /Page /Contents 9015 0 R /Resources 9013 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 8893 0 R >>
+endobj
+9016 0 obj
+<< /D [ 9014 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+9017 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+9018 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+9019 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+9020 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+9021 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+9022 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+9023 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+9024 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+9025 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+9026 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+9027 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+9028 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+9029 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+9030 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 626.366 null ] >>
+endobj
+9031 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 615.407 null ] >>
+endobj
+9032 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 604.448 null ] >>
+endobj
+9033 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 593.489 null ] >>
+endobj
+9034 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 582.53 null ] >>
+endobj
+9035 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 571.571 null ] >>
+endobj
+9036 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 560.613 null ] >>
+endobj
+9037 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 549.654 null ] >>
+endobj
+9038 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 538.695 null ] >>
+endobj
+9039 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 527.736 null ] >>
+endobj
+9040 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 516.777 null ] >>
+endobj
+9041 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 452.02 null ] >>
+endobj
+9042 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 441.061 null ] >>
+endobj
+9043 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 430.102 null ] >>
+endobj
+9044 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 419.143 null ] >>
+endobj
+9045 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 408.184 null ] >>
+endobj
+9046 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 397.225 null ] >>
+endobj
+9047 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 386.266 null ] >>
+endobj
+9048 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 375.307 null ] >>
+endobj
+9049 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 364.349 null ] >>
+endobj
+9050 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 353.39 null ] >>
+endobj
+9051 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 342.431 null ] >>
+endobj
+9052 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 331.472 null ] >>
+endobj
+9053 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 320.513 null ] >>
+endobj
+9054 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 309.554 null ] >>
+endobj
+9055 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 298.595 null ] >>
+endobj
+9056 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 287.636 null ] >>
+endobj
+9057 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 276.677 null ] >>
+endobj
+9058 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 265.718 null ] >>
+endobj
+9059 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 254.759 null ] >>
+endobj
+9060 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 243.801 null ] >>
+endobj
+9061 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 227.86 null ] >>
+endobj
+9062 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 216.901 null ] >>
+endobj
+9063 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 205.943 null ] >>
+endobj
+9064 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 194.984 null ] >>
+endobj
+9065 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 184.025 null ] >>
+endobj
+9066 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 173.066 null ] >>
+endobj
+9067 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 162.107 null ] >>
+endobj
+9068 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 151.148 null ] >>
+endobj
+9069 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 140.189 null ] >>
+endobj
+9070 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 124.249 null ] >>
+endobj
+9071 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 113.29 null ] >>
+endobj
+9072 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 102.331 null ] >>
+endobj
+9073 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 91.372 null ] >>
+endobj
+9074 0 obj
+<< /D [ 9014 0 R /XYZ 81.077 80.413 null ] >>
+endobj
+9013 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F30 644 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+9077 0 obj
+<< /Filter /FlateDecode /Length 1859 >>
+stream
+xZo6_a/ K^ c+P[reIDN{I?x_zDGoOhw$ʝ߷'LN^_df$5LCtF&##1B36Fdža-
+yY&̚?狪#""TqfwsC0:1Sxېy;_->[\4]4o\(w&}
+YJ\1:E^F6iK
+Y*l1oP_F2 IZˈ3hpB8"凲- D_mU K
+5:__0;
+»6(_Ueu(%1Wլ\Ը綛|ϚwݘC+5ݒ7FBlxYH!U^Y}]ثcJhX"Q{DBSb@w3#dUNNw*QB+ZnW?*Z~Xac"zD$xѓrY*ЋDc2D>YLojyݺ<;[c
+endstream
+endobj
+9076 0 obj
+<< /Type /Page /Contents 9077 0 R /Resources 9075 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 8893 0 R >>
+endobj
+9078 0 obj
+<< /D [ 9076 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+9079 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+9080 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+9081 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+9082 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+9083 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+9084 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+9085 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+9086 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+9087 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+9088 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+9089 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 654.663 null ] >>
+endobj
+9090 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 643.704 null ] >>
+endobj
+9091 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 632.745 null ] >>
+endobj
+9092 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 621.786 null ] >>
+endobj
+9093 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 610.827 null ] >>
+endobj
+9094 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 599.868 null ] >>
+endobj
+9095 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 588.91 null ] >>
+endobj
+9096 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 577.951 null ] >>
+endobj
+9097 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 566.992 null ] >>
+endobj
+9098 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 556.033 null ] >>
+endobj
+9099 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 545.074 null ] >>
+endobj
+9100 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 534.115 null ] >>
+endobj
+9101 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 523.156 null ] >>
+endobj
+9102 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 475.343 null ] >>
+endobj
+9103 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 464.384 null ] >>
+endobj
+9104 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 453.425 null ] >>
+endobj
+9105 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 442.466 null ] >>
+endobj
+9106 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 431.508 null ] >>
+endobj
+9107 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 420.549 null ] >>
+endobj
+9108 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 409.59 null ] >>
+endobj
+9109 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 398.631 null ] >>
+endobj
+9110 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 387.672 null ] >>
+endobj
+9111 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 376.713 null ] >>
+endobj
+9112 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 365.754 null ] >>
+endobj
+9113 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 354.795 null ] >>
+endobj
+9114 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 343.836 null ] >>
+endobj
+9115 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 332.877 null ] >>
+endobj
+9116 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 321.918 null ] >>
+endobj
+9117 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 310.96 null ] >>
+endobj
+9118 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 300.001 null ] >>
+endobj
+9119 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 289.042 null ] >>
+endobj
+9120 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 243.021 null ] >>
+endobj
+9121 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 232.062 null ] >>
+endobj
+9122 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 221.103 null ] >>
+endobj
+9123 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 210.144 null ] >>
+endobj
+9124 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 199.185 null ] >>
+endobj
+9125 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 188.226 null ] >>
+endobj
+9126 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 177.267 null ] >>
+endobj
+9127 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 166.308 null ] >>
+endobj
+9128 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 155.349 null ] >>
+endobj
+9129 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 144.39 null ] >>
+endobj
+9130 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 133.431 null ] >>
+endobj
+9131 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 122.473 null ] >>
+endobj
+9132 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+9133 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+9134 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+9135 0 obj
+<< /D [ 9076 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+9075 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+9138 0 obj
+<< /Filter /FlateDecode /Length 2104 >>
+stream
+xڭZn6}WCN)EŢEn6BPl9bKIE&qJBΙtt3_0e/g$i]<DGlhlt}3կ]
+ǒA{Iqڇ覾fl2jkP!zPփBZ"IU-a8KB3~^V% @x\@M6嬽={s7Va k!V"^utk8bQ[JޔՍٔdrf=&Nu-C!zIbm+*w;h8U<.H
+I$̮|Dz X'C :[$>~ fAdnvrD2#g0 ;ra9 .&jC`ݲUk7 0>Q!p{Pwc84(.S4 /Ř1E,rʞ eaŌpQmw&Pp&wû@'*t"Ed] I蜌,OtSA-rep7tR.,[<t|Y &pV~5TJ\ddo{޹|6
+r(GK %
+j9kC$6wR+G2_D|
+n*VUFh⦌{1U9mĞKAHޥ>fY
+."{[d׉-UVV=-|(LQ/ŀ 5Su}Ugy{?WxwbsMGkm21"*39D2ms9XL)ql!!"pw.Ց1Gl. ՑYǢ׷Ym];"^qT gwp觯U,N97JV<D)VY]=䟞f8ZBź x;NJ)gćmA%r堃8B)#vV>4
+';D[OUr{oW>Ux<P{_&yˆ1`ACϮ?D$kUJwzm?~ 4oo
+h+(iں;ug0Ga(Bi_CvDXB{e@nrwW _{,h݇.S4~}}!xcO;2j<k A;|upmlZ,]<a kSۇu`f*|Q  lqc[#u?Sz(QA b3FRN Vt˦i .],^1 ߒ.ࣗ\n˵B .n}xƧ|$I:II:AIa:
+endstream
+endobj
+9137 0 obj
+<< /Type /Page /Contents 9138 0 R /Resources 9136 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 8893 0 R >>
+endobj
+9139 0 obj
+<< /D [ 9137 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+9140 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+9141 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+9142 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+9143 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+9144 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 695.565 null ] >>
+endobj
+9145 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 684.607 null ] >>
+endobj
+9146 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 673.648 null ] >>
+endobj
+9147 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 662.689 null ] >>
+endobj
+9148 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 651.73 null ] >>
+endobj
+9149 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 640.771 null ] >>
+endobj
+9150 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 629.812 null ] >>
+endobj
+9151 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 541.602 null ] >>
+endobj
+9152 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 530.643 null ] >>
+endobj
+9153 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 519.684 null ] >>
+endobj
+9154 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 508.725 null ] >>
+endobj
+9155 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 497.766 null ] >>
+endobj
+9156 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 486.807 null ] >>
+endobj
+9157 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 475.848 null ] >>
+endobj
+9158 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 464.89 null ] >>
+endobj
+9159 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 453.931 null ] >>
+endobj
+9160 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 442.972 null ] >>
+endobj
+9161 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 432.013 null ] >>
+endobj
+9162 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 421.054 null ] >>
+endobj
+9163 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 410.095 null ] >>
+endobj
+9164 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 399.136 null ] >>
+endobj
+9165 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 388.177 null ] >>
+endobj
+9166 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 377.218 null ] >>
+endobj
+9167 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 366.259 null ] >>
+endobj
+9168 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 355.3 null ] >>
+endobj
+9169 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 344.342 null ] >>
+endobj
+9170 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 333.383 null ] >>
+endobj
+9171 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 322.424 null ] >>
+endobj
+9172 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 311.465 null ] >>
+endobj
+9173 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 300.506 null ] >>
+endobj
+9174 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 289.547 null ] >>
+endobj
+9175 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 278.588 null ] >>
+endobj
+9176 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 267.629 null ] >>
+endobj
+9177 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 256.67 null ] >>
+endobj
+9178 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 232.145 null ] >>
+endobj
+9179 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 221.186 null ] >>
+endobj
+113 0 obj
+<< /D [ 9137 0 R /XYZ 79.37 207.241 null ] >>
+endobj
+9180 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 144.39 null ] >>
+endobj
+9181 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 133.431 null ] >>
+endobj
+9182 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 122.473 null ] >>
+endobj
+9183 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+9184 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+9185 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+9186 0 obj
+<< /D [ 9137 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+9136 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F65 185 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+9189 0 obj
+<< /Filter /FlateDecode /Length 2062 >>
+stream
+xZmo8_C}X|Eö/vۅJ"Ԗ|\P/鸎
+zp4O :\Id.\Q$F3'7w >6ъ(ObUlr>L7t}XN41J 탙E2D?yx]dҦ.>ut={잣 ;j4jXm9*ۮXUio;v=_Wc _¤p9N>S/+ׄix /p9jgr}o_TT=޾XDDR(^:4+PӒie
+
+QB Eכ >ɩtcK-.7'>A?!'!\'|W,^۪:B
+ހCq c%"ԗ{*$;2vxRP[ép<h=[1dkLc9.̜aQ 4 XˋAEO*H[7l|=k: _+3BK
+endstream
+endobj
+9188 0 obj
+<< /Type /Page /Contents 9189 0 R /Resources 9187 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 8893 0 R >>
+endobj
+9190 0 obj
+<< /D [ 9188 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+9191 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+9192 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+9193 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+9194 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+9195 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+9196 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+9197 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+9198 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+9199 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+9200 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+9201 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+117 0 obj
+<< /D [ 9188 0 R /XYZ 79.37 633.788 null ] >>
+endobj
+9202 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 578.687 null ] >>
+endobj
+9203 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 567.728 null ] >>
+endobj
+9204 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 556.769 null ] >>
+endobj
+9205 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 545.81 null ] >>
+endobj
+9206 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 534.851 null ] >>
+endobj
+9207 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 523.892 null ] >>
+endobj
+9208 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 512.933 null ] >>
+endobj
+9209 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 501.974 null ] >>
+endobj
+9210 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 491.015 null ] >>
+endobj
+9211 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 480.056 null ] >>
+endobj
+9212 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 469.098 null ] >>
+endobj
+9213 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 458.139 null ] >>
+endobj
+9214 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 447.18 null ] >>
+endobj
+9215 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 436.221 null ] >>
+endobj
+9216 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 425.262 null ] >>
+endobj
+9217 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 414.303 null ] >>
+endobj
+9218 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 398.363 null ] >>
+endobj
+9219 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 387.404 null ] >>
+endobj
+9220 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 376.445 null ] >>
+endobj
+9221 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 360.505 null ] >>
+endobj
+9222 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 349.546 null ] >>
+endobj
+9223 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 318.662 null ] >>
+endobj
+9224 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 307.703 null ] >>
+endobj
+9225 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 296.744 null ] >>
+endobj
+9226 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 285.785 null ] >>
+endobj
+9227 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 274.826 null ] >>
+endobj
+9228 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 263.867 null ] >>
+endobj
+9229 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 252.908 null ] >>
+endobj
+9230 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 241.949 null ] >>
+endobj
+9231 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 230.99 null ] >>
+endobj
+9232 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 220.032 null ] >>
+endobj
+9233 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 209.073 null ] >>
+endobj
+9234 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 198.114 null ] >>
+endobj
+9235 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 187.155 null ] >>
+endobj
+9236 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 176.196 null ] >>
+endobj
+9237 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 165.237 null ] >>
+endobj
+9238 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 154.278 null ] >>
+endobj
+9239 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 143.319 null ] >>
+endobj
+9240 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 90.517 null ] >>
+endobj
+9241 0 obj
+<< /D [ 9188 0 R /XYZ 81.077 79.558 null ] >>
+endobj
+9187 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F67 187 0 R /F19 184 0 R /F20 186 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+9244 0 obj
+<< /Filter /FlateDecode /Length 2090 >>
+stream
+xڭZmo6_We.)vۢBPljKMoF)*fv%|ćÙgfzFg_(:ILAtf&%D3B5f)ݻ
+ɓq®$:I"Ή|Y .uGk}7 .z|m
+y9W.@g$e\QNV)Ie4:~nI&)#xB')xǢ
+3uJ
+ʿLP2x!,߆zeƔ*sqF_,2JpxEO?h<˜p$ZfA5oKojj78shU#h3xjJ
+W^i銡X*\m7  p8<p<%Ύ34EgQOU"u&;VCחm]l ʏlRpYb#܋$WN'N&ƖJXmK[<ykded"!̕)ZE|FbpMxBudzS}VMO
+ϼ7MkoωV^S'cOdG_uqh9aѠ7@FlA1D!uӛrO{'lꆗs8jY_X|0eg6%h)BYC6k)/.X
+ҕZg<l,V1Fj1
+}i|R;2R񂤑7ib..;
+5;
+/:Bocm mApc4DôʡCǏܜ9 9'ZpMh.KPdLh~&xI賳ذk/8I
+fY=܍\P^VeGΆ Ǿ:RIIWA
+
+endstream
+endobj
+9243 0 obj
+<< /Type /Page /Contents 9244 0 R /Resources 9242 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 8893 0 R >>
+endobj
+9245 0 obj
+<< /D [ 9243 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+9246 0 obj
+<< /D [ 9243 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+9247 0 obj
+<< /D [ 9243 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+9248 0 obj
+<< /D [ 9243 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+9249 0 obj
+<< /D [ 9243 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+9250 0 obj
+<< /D [ 9243 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+9251 0 obj
+<< /D [ 9243 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+9252 0 obj
+<< /D [ 9243 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+9253 0 obj
+<< /D [ 9243 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+9254 0 obj
+<< /D [ 9243 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+9255 0 obj
+<< /D [ 9243 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+9256 0 obj
+<< /D [ 9243 0 R /XYZ 81.077 654.294 null ] >>
+endobj
+9257 0 obj
+<< /D [ 9243 0 R /XYZ 81.077 643.336 null ] >>
+endobj
+9258 0 obj
+<< /D [ 9243 0 R /XYZ 81.077 632.377 null ] >>
+endobj
+9259 0 obj
+<< /D [ 9243 0 R /XYZ 81.077 621.418 null ] >>
+endobj
+9260 0 obj
+<< /D [ 9243 0 R /XYZ 81.077 610.459 null ] >>
+endobj
+9261 0 obj
+<< /D [ 9243 0 R /XYZ 81.077 599.5 null ] >>
+endobj
+9262 0 obj
+<< /D [ 9243 0 R /XYZ 81.077 588.541 null ] >>
+endobj
+9263 0 obj
+<< /D [ 9243 0 R /XYZ 81.077 577.582 null ] >>
+endobj
+9264 0 obj
+<< /D [ 9243 0 R /XYZ 81.077 566.623 null ] >>
+endobj
+9265 0 obj
+<< /D [ 9243 0 R /XYZ 81.077 550.716 null ] >>
+endobj
+9266 0 obj
+<< /D [ 9243 0 R /XYZ 81.077 539.757 null ] >>
+endobj
+9267 0 obj
+<< /D [ 9243 0 R /XYZ 81.077 528.798 null ] >>
+endobj
+9268 0 obj
+<< /D [ 9243 0 R /XYZ 81.077 517.839 null ] >>
+endobj
+9269 0 obj
+<< /D [ 9243 0 R /XYZ 81.077 506.881 null ] >>
+endobj
+9270 0 obj
+<< /D [ 9243 0 R /XYZ 81.077 464.157 null ] >>
+endobj
+9271 0 obj
+<< /D [ 9243 0 R /XYZ 81.077 453.198 null ] >>
+endobj
+9272 0 obj
+<< /D [ 9243 0 R /XYZ 81.077 442.239 null ] >>
+endobj
+9273 0 obj
+<< /D [ 9243 0 R /XYZ 81.077 431.281 null ] >>
+endobj
+9274 0 obj
+<< /D [ 9243 0 R /XYZ 81.077 420.322 null ] >>
+endobj
+9275 0 obj
+<< /D [ 9243 0 R /XYZ 81.077 409.363 null ] >>
+endobj
+9276 0 obj
+<< /D [ 9243 0 R /XYZ 81.077 398.404 null ] >>
+endobj
+121 0 obj
+<< /D [ 9243 0 R /XYZ 79.37 375.025 null ] >>
+endobj
+9277 0 obj
+<< /D [ 9243 0 R /XYZ 81.077 306.696 null ] >>
+endobj
+9278 0 obj
+<< /D [ 9243 0 R /XYZ 81.077 295.737 null ] >>
+endobj
+9279 0 obj
+<< /D [ 9243 0 R /XYZ 81.077 284.778 null ] >>
+endobj
+9280 0 obj
+<< /D [ 9243 0 R /XYZ 81.077 244.961 null ] >>
+endobj
+9281 0 obj
+<< /D [ 9243 0 R /XYZ 81.077 234.002 null ] >>
+endobj
+9282 0 obj
+<< /D [ 9243 0 R /XYZ 81.077 223.043 null ] >>
+endobj
+9283 0 obj
+<< /D [ 9243 0 R /XYZ 81.077 173.246 null ] >>
+endobj
+9284 0 obj
+<< /D [ 9243 0 R /XYZ 81.077 162.287 null ] >>
+endobj
+125 0 obj
+<< /D [ 9243 0 R /XYZ 79.37 137.663 null ] >>
+endobj
+9242 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F67 187 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+9287 0 obj
+<< /Filter /FlateDecode /Length 2339 >>
+stream
+xڵZ[o}ϯ0Ї;
+*M߮*w/~`:'!9o 77!إ+wCnӷbwkپY˛uWFӥGl]&<DǛ(DC|f 2 n YwH[K/J9qY~&ͯ>M#LbX,e
+,Pqe&[ġQAc`>) GFArȫtpb!c4lpu]ߖuЮ8Թ\Ѻ",[r
+& &oL83<uz?wnEi
+KșJq+@ϭy|HPGIOk2@ϭRk4eKgR)D,XX[ND\RD4 t6ej[a[@p6*hC rqD8w)DմΒx12GYk PhMmV촚`
+3'?B Tڭ8 PD5vٴMNm_S&-A\ [־TC kϾRNTu5lkEG}3$
+wѣdI>敄F
+$ϙyEqt}~WMxxjlzK'~
+8ht"11D!DxewR
+^q|q=Ld?‰ (Dr]qS3`Rh1#$ddVԜ5=D ⒱~։ˆ*S:_c ~NZ'^CF\C</F,A(K= TGC> R[KTX/C{ J'7KEBmS
+kSMP82>ڑcB8=DkUyI\}#1צH
+endstream
+endobj
+9286 0 obj
+<< /Type /Page /Contents 9287 0 R /Resources 9285 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 8893 0 R >>
+endobj
+9288 0 obj
+<< /D [ 9286 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+9289 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+9290 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+9291 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+9292 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+9293 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+9294 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+9295 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+9296 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+9297 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+9298 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 602.456 null ] >>
+endobj
+9299 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 591.497 null ] >>
+endobj
+9300 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 580.538 null ] >>
+endobj
+9301 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 539.691 null ] >>
+endobj
+9302 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 528.732 null ] >>
+endobj
+9303 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 517.773 null ] >>
+endobj
+9304 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 506.814 null ] >>
+endobj
+9305 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 495.855 null ] >>
+endobj
+9306 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 484.896 null ] >>
+endobj
+9307 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 456.005 null ] >>
+endobj
+9308 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 445.046 null ] >>
+endobj
+9309 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 434.087 null ] >>
+endobj
+9310 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 357.375 null ] >>
+endobj
+9311 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 346.416 null ] >>
+endobj
+9312 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 335.457 null ] >>
+endobj
+9313 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 324.498 null ] >>
+endobj
+9314 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 313.539 null ] >>
+endobj
+9315 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 302.58 null ] >>
+endobj
+9316 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 291.621 null ] >>
+endobj
+9317 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 280.662 null ] >>
+endobj
+9318 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 269.703 null ] >>
+endobj
+9319 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 258.745 null ] >>
+endobj
+9320 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 247.786 null ] >>
+endobj
+9321 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 236.827 null ] >>
+endobj
+9322 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 225.868 null ] >>
+endobj
+9323 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 214.909 null ] >>
+endobj
+9324 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 203.95 null ] >>
+endobj
+9325 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 192.991 null ] >>
+endobj
+9326 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 152.144 null ] >>
+endobj
+9327 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 141.185 null ] >>
+endobj
+9328 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 130.226 null ] >>
+endobj
+9329 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 119.268 null ] >>
+endobj
+9330 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 108.309 null ] >>
+endobj
+9331 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 97.35 null ] >>
+endobj
+9332 0 obj
+<< /D [ 9286 0 R /XYZ 81.077 86.391 null ] >>
+endobj
+9285 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F20 186 0 R /F19 184 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+9336 0 obj
+<< /Filter /FlateDecode /Length 2274 >>
+stream
+xZ[۸~_a / ~Eg>C1@ tb˶[r%9`^t㈳[!M#ss/ O$l 7?KhasC`^HP ,W᷿>m |)P310~nz]~Td.=z֧nn ?@`D0`<F?' " k˙k$VymYE9Uy̷S:UsT#^--z {}ItBN;E[6ETvX"*Τ):ymibXkHY;B?Q|9b H)Cld@NvUd"JY):xԮɫvS7vWnԆǺg[r]З}*q5Z,"EU7,BrFMӂEN'i"B$ 3x_,"empS`$-M %% <M?ZB ٱVaYZĘ0dHQ3`~3ACei"BQXS'H7Ν~4F?^F*ZpXకg{0]DB~}gJdoɊoOQ7kMO5If# =1 P%_rMCS ]ݮl}=}j!ju<R%1Uу,!ZՇCQ|cb~^ucᘡH)!yN zsS BgZcP o@ g!cl~Q۲2Zrs|p~vSi4Aե ?n2dlPI*8!x?~1 M/Vakh2.|Ma1HaXt>1Ay(ܮFkg).h!U* 6׫꣔#-h}u(xhMϤo) &?§޺}Y}'X{Etu$8or:.1<Cjдvjs뮏g*L3E^VoCխ W
+uTD"$J
+Um9~ؒ^˪xX5Z|K='ű˲|}FcR"AR3d-ojБ쐝p  S!z^Ǘ`g=w: t +oDWPYm/8M&8G)!b)4Or)F{I{ c?09"$g]W:xnaPc$ G [u[[/͉'loa3"l
+/m=kRf_3iwG gYlO|IkcT@*u,IkhY]_kg #c/{ArIw5P#j9 If
+Nu5_&&4Ȍ' yAY5d{APeopc,B,:솾јQH LBDɆ` Tz1>_@-?[o! [Wl_s:O{1>O$Rrymo;Ͳ]Q<O ǟ.@lx4>E8MLovL)2ǢxJwU^8e,v1#ʉq%/p
+O
+E[p՟]Zn{696`סU/0[ZJ2C?li:Z$r`nېqb϶~ȶ*ۆ3/8_!ٶ]l ̜mj)|&xڹ4XO[~Հ\QC8BʕJKMttշ$2̈́`gP<p- 6Ov> 2'JS= l4񒄧sP;T'ZS7Wh
+endstream
+endobj
+9335 0 obj
+<< /Type /Page /Contents 9336 0 R /Resources 9334 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 8893 0 R /Annots 9375 0 R >>
+endobj
+9375 0 obj
+[ 9333 0 R ]
+endobj
+9333 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 89.997 423.245 101.952 433.449 ]/A << /S /GoTo /D (section.0.13) >> >>
+endobj
+9337 0 obj
+<< /D [ 9335 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+9338 0 obj
+<< /D [ 9335 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+9339 0 obj
+<< /D [ 9335 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+9340 0 obj
+<< /D [ 9335 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+9341 0 obj
+<< /D [ 9335 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+9342 0 obj
+<< /D [ 9335 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+9343 0 obj
+<< /D [ 9335 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+9344 0 obj
+<< /D [ 9335 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+9345 0 obj
+<< /D [ 9335 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+9346 0 obj
+<< /D [ 9335 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+9347 0 obj
+<< /D [ 9335 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+9348 0 obj
+<< /D [ 9335 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+9349 0 obj
+<< /D [ 9335 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+9350 0 obj
+<< /D [ 9335 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+9351 0 obj
+<< /D [ 9335 0 R /XYZ 81.077 626.366 null ] >>
+endobj
+9352 0 obj
+<< /D [ 9335 0 R /XYZ 81.077 615.407 null ] >>
+endobj
+9353 0 obj
+<< /D [ 9335 0 R /XYZ 81.077 604.448 null ] >>
+endobj
+9354 0 obj
+<< /D [ 9335 0 R /XYZ 81.077 593.489 null ] >>
+endobj
+9355 0 obj
+<< /D [ 9335 0 R /XYZ 81.077 582.53 null ] >>
+endobj
+9356 0 obj
+<< /D [ 9335 0 R /XYZ 81.077 571.571 null ] >>
+endobj
+9357 0 obj
+<< /D [ 9335 0 R /XYZ 81.077 560.613 null ] >>
+endobj
+9358 0 obj
+<< /D [ 9335 0 R /XYZ 81.077 549.654 null ] >>
+endobj
+129 0 obj
+<< /D [ 9335 0 R /XYZ 79.37 530.441 null ] >>
+endobj
+9359 0 obj
+<< /D [ 9335 0 R /XYZ 81.077 392.664 null ] >>
+endobj
+9360 0 obj
+<< /D [ 9335 0 R /XYZ 81.077 348.096 null ] >>
+endobj
+9361 0 obj
+<< /D [ 9335 0 R /XYZ 81.077 305.667 null ] >>
+endobj
+9362 0 obj
+<< /D [ 9335 0 R /XYZ 81.077 294.708 null ] >>
+endobj
+9363 0 obj
+<< /D [ 9335 0 R /XYZ 81.077 283.749 null ] >>
+endobj
+9364 0 obj
+<< /D [ 9335 0 R /XYZ 81.077 272.791 null ] >>
+endobj
+9365 0 obj
+<< /D [ 9335 0 R /XYZ 81.077 261.832 null ] >>
+endobj
+9366 0 obj
+<< /D [ 9335 0 R /XYZ 81.077 234.64 null ] >>
+endobj
+9367 0 obj
+<< /D [ 9335 0 R /XYZ 81.077 223.681 null ] >>
+endobj
+9368 0 obj
+<< /D [ 9335 0 R /XYZ 81.077 184.534 null ] >>
+endobj
+9369 0 obj
+<< /D [ 9335 0 R /XYZ 81.077 173.575 null ] >>
+endobj
+9370 0 obj
+<< /D [ 9335 0 R /XYZ 81.077 122.473 null ] >>
+endobj
+9371 0 obj
+<< /D [ 9335 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+9372 0 obj
+<< /D [ 9335 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+9373 0 obj
+<< /D [ 9335 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+9374 0 obj
+<< /D [ 9335 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+133 0 obj
+<< /D [ 9335 0 R /XYZ 79.37 67.98 null ] >>
+endobj
+9334 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F67 187 0 R /F19 184 0 R /F20 186 0 R /F65 185 0 R /F70 305 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+9378 0 obj
+<< /Filter /FlateDecode /Length 2678 >>
+stream
+xڥZK8WōI320@f`h`鶰Hr;oߢHIs1%E~,"L'wAw? 9 Q&~CE2"*'+$o'L)^k1FaOzoFW} [6]] ӇnvHRtQnYt$9%C$ea_0e>{(FQ*P"pSX PiJN^Mie@y ucE/݌nj۬gօh5ht)ز
+:b<;#:ՋKBADҮ)L3h
+GA=yY9LMlT`1f;N A5y1q|Ixrr 0Y~00>,
+qz0CS5)' NGśf`[&H r}5jv.0Uykˡ`mݬ⩂mjhM)
+`Zۚkߎd &2gv"<
+n\OzGcXN7 F;%xm=w//Z}lU eOqݮG0iq&QRi(5puKx@M Zyx­y C\4z9ۙNiּǮ$d4zz?r үcs1~lz$T* v]h$Hz+hWֹa7eub
+=Dїv?UzeE*;u]
+&GgQ$_y36eOo~.&)Ύʋ+F&`8rrC0;BX5=Ma_/l|~o7kd-
+:
+\8+pW6srȷlqQvx.7kޥ/]rݩӗ2)u2d(@(.2VwH;Xx^_wg}UH&aRb4nD3fB{ r`q'pSeE*mWezjt4) "Fѿ@'0Dy:_?6gbX>++`]?]:rw~eGq-W}֨@:~l9}JT\z ;,e0G Y*.
+I^
+endstream
+endobj
+9377 0 obj
+<< /Type /Page /Contents 9378 0 R /Resources 9376 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 9420 0 R >>
+endobj
+9379 0 obj
+<< /D [ 9377 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+9380 0 obj
+<< /D [ 9377 0 R /XYZ 81.077 619.932 null ] >>
+endobj
+9381 0 obj
+<< /D [ 9377 0 R /XYZ 81.077 608.973 null ] >>
+endobj
+9382 0 obj
+<< /D [ 9377 0 R /XYZ 81.077 598.014 null ] >>
+endobj
+9383 0 obj
+<< /D [ 9377 0 R /XYZ 81.077 587.055 null ] >>
+endobj
+9384 0 obj
+<< /D [ 9377 0 R /XYZ 81.077 576.096 null ] >>
+endobj
+9385 0 obj
+<< /D [ 9377 0 R /XYZ 81.077 527.279 null ] >>
+endobj
+9386 0 obj
+<< /D [ 9377 0 R /XYZ 81.077 516.32 null ] >>
+endobj
+9387 0 obj
+<< /D [ 9377 0 R /XYZ 81.077 505.362 null ] >>
+endobj
+9388 0 obj
+<< /D [ 9377 0 R /XYZ 81.077 494.403 null ] >>
+endobj
+9389 0 obj
+<< /D [ 9377 0 R /XYZ 81.077 447.578 null ] >>
+endobj
+9390 0 obj
+<< /D [ 9377 0 R /XYZ 81.077 436.619 null ] >>
+endobj
+9391 0 obj
+<< /D [ 9377 0 R /XYZ 81.077 425.66 null ] >>
+endobj
+9392 0 obj
+<< /D [ 9377 0 R /XYZ 81.077 414.702 null ] >>
+endobj
+9393 0 obj
+<< /D [ 9377 0 R /XYZ 81.077 403.743 null ] >>
+endobj
+9394 0 obj
+<< /D [ 9377 0 R /XYZ 81.077 392.784 null ] >>
+endobj
+9395 0 obj
+<< /D [ 9377 0 R /XYZ 81.077 381.825 null ] >>
+endobj
+9396 0 obj
+<< /D [ 9377 0 R /XYZ 81.077 370.866 null ] >>
+endobj
+9397 0 obj
+<< /D [ 9377 0 R /XYZ 81.077 359.907 null ] >>
+endobj
+9398 0 obj
+<< /D [ 9377 0 R /XYZ 81.077 348.948 null ] >>
+endobj
+9399 0 obj
+<< /D [ 9377 0 R /XYZ 81.077 337.989 null ] >>
+endobj
+9400 0 obj
+<< /D [ 9377 0 R /XYZ 81.077 327.03 null ] >>
+endobj
+9401 0 obj
+<< /D [ 9377 0 R /XYZ 81.077 316.071 null ] >>
+endobj
+9402 0 obj
+<< /D [ 9377 0 R /XYZ 81.077 305.113 null ] >>
+endobj
+9403 0 obj
+<< /D [ 9377 0 R /XYZ 81.077 294.154 null ] >>
+endobj
+9404 0 obj
+<< /D [ 9377 0 R /XYZ 81.077 265.262 null ] >>
+endobj
+9405 0 obj
+<< /D [ 9377 0 R /XYZ 81.077 254.303 null ] >>
+endobj
+9406 0 obj
+<< /D [ 9377 0 R /XYZ 81.077 243.344 null ] >>
+endobj
+9407 0 obj
+<< /D [ 9377 0 R /XYZ 81.077 232.385 null ] >>
+endobj
+9408 0 obj
+<< /D [ 9377 0 R /XYZ 81.077 221.426 null ] >>
+endobj
+9409 0 obj
+<< /D [ 9377 0 R /XYZ 81.077 210.467 null ] >>
+endobj
+9410 0 obj
+<< /D [ 9377 0 R /XYZ 81.077 199.509 null ] >>
+endobj
+9411 0 obj
+<< /D [ 9377 0 R /XYZ 81.077 188.55 null ] >>
+endobj
+9412 0 obj
+<< /D [ 9377 0 R /XYZ 81.077 177.591 null ] >>
+endobj
+9413 0 obj
+<< /D [ 9377 0 R /XYZ 81.077 166.632 null ] >>
+endobj
+9414 0 obj
+<< /D [ 9377 0 R /XYZ 81.077 155.673 null ] >>
+endobj
+9415 0 obj
+<< /D [ 9377 0 R /XYZ 81.077 144.714 null ] >>
+endobj
+9416 0 obj
+<< /D [ 9377 0 R /XYZ 81.077 115.822 null ] >>
+endobj
+9417 0 obj
+<< /D [ 9377 0 R /XYZ 81.077 104.863 null ] >>
+endobj
+9418 0 obj
+<< /D [ 9377 0 R /XYZ 81.077 93.905 null ] >>
+endobj
+9419 0 obj
+<< /D [ 9377 0 R /XYZ 81.077 82.946 null ] >>
+endobj
+9376 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F67 187 0 R /F19 184 0 R /F20 186 0 R /F70 305 0 R /F68 189 0 R /F64 183 0 R /F30 644 0 R /F77 542 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+9423 0 obj
+<< /Filter /FlateDecode /Length 1566 >>
+stream
+xZMoFWE~@@@Cuk
+BVt)IwH]I5>ΛY& MޜJT }skmIRO3hf&1Y2&άH__
+8moeHmn=Pb] YiH_(W_o!+OJF*eD4F,V6s} ٫W٧,/&_vqg:/_6QM&)Dw]f3\f!TA'fP"tGCz bVv[ ,hi# )<WUUdr .2L˺{k[Q_YMLJ9b(ÒR!vl.\޻H1" N(Jh7$,cq{SJz
+G!DO,QNTN Rns•MlCsh=Am_JTkR"LF"v@o@Qe.UӺo?b] ƌ8Q7(#)-.[93wYr6_E.|R,%14Fht%VErvzqqg;\_ qYzB<Z#SC,t]5)ʚ}5 ]VyVCt0n*k^K%8!pn!hY?0l wmy
+'XX ^/y 'zW 5tIEex?dG?4p}<!¿'!xS@gyH,]s{\!ڠ5L^9N#td^SB)qGۉ޾}
+endstream
+endobj
+9422 0 obj
+<< /Type /Page /Contents 9423 0 R /Resources 9421 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 9420 0 R >>
+endobj
+9424 0 obj
+<< /D [ 9422 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+9425 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+9426 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+9427 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+9428 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+9429 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+9430 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+9431 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+9432 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+9433 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+9434 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+9435 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+9436 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+9437 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+9438 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 626.366 null ] >>
+endobj
+9439 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 615.407 null ] >>
+endobj
+137 0 obj
+<< /D [ 9422 0 R /XYZ 79.37 603.9 null ] >>
+endobj
+9440 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 538.546 null ] >>
+endobj
+9441 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 527.587 null ] >>
+endobj
+9442 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 516.628 null ] >>
+endobj
+9443 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 505.669 null ] >>
+endobj
+9444 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 494.71 null ] >>
+endobj
+9445 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 483.751 null ] >>
+endobj
+9446 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 472.792 null ] >>
+endobj
+9447 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 461.834 null ] >>
+endobj
+9448 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 450.875 null ] >>
+endobj
+9449 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 439.916 null ] >>
+endobj
+9450 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 428.957 null ] >>
+endobj
+9451 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 417.998 null ] >>
+endobj
+9452 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 407.039 null ] >>
+endobj
+9453 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 396.08 null ] >>
+endobj
+9454 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 385.121 null ] >>
+endobj
+9455 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 374.162 null ] >>
+endobj
+9456 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 363.203 null ] >>
+endobj
+9457 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 352.244 null ] >>
+endobj
+9458 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 341.286 null ] >>
+endobj
+9459 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 330.327 null ] >>
+endobj
+9460 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 319.368 null ] >>
+endobj
+9461 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 308.409 null ] >>
+endobj
+9462 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 297.45 null ] >>
+endobj
+9463 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 286.491 null ] >>
+endobj
+9464 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 275.532 null ] >>
+endobj
+9465 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 264.573 null ] >>
+endobj
+9466 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 253.614 null ] >>
+endobj
+9467 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 242.655 null ] >>
+endobj
+9468 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 196.827 null ] >>
+endobj
+9469 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 185.868 null ] >>
+endobj
+9470 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 174.91 null ] >>
+endobj
+9471 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 163.951 null ] >>
+endobj
+9472 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 152.992 null ] >>
+endobj
+9473 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 142.033 null ] >>
+endobj
+9474 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 131.074 null ] >>
+endobj
+9475 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 120.115 null ] >>
+endobj
+9476 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 109.156 null ] >>
+endobj
+9477 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 98.197 null ] >>
+endobj
+9478 0 obj
+<< /D [ 9422 0 R /XYZ 81.077 87.238 null ] >>
+endobj
+9421 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F67 187 0 R /F19 184 0 R /F20 186 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+9481 0 obj
+<< /Filter /FlateDecode /Length 1883 >>
+stream
+xڵZmo8_E85h{-v9^!8*K,7oeS'b23P>둨 >_rzIeN/L6hfF3B5NVJu}00%SMΚ'jvڊG(Qڥ@uU O"?V><@@Ii> Z6YedKxhEɦfruRnk݋o{O`pZn?%7)Մk~!`ɛh2ǜ/u~7g0P;E5Q &n(gŬ'/Oӷ쏥f@$BiGCNED xM {ހktF.n;F`i͉1 (Grh:JbD*y@-a^iTpJx^>"q`%x,*E&!Zta}ϔ) ;{0gk߳vh?r05EMIu7H?ϗqh#'şCoŝqU0f8֏IF=Js8lˊ+˄pki!L̚PZKcG1~4*N!^K>zQ~(r!#~3%6fgb(i4^6S[g⢌8`_be5ĔLPn{|>)o;d3?*Byg>]0J'wآ8Aμ
+64cE\C. yl񈛡| "yx(Ofx|Vx2q잠{bC.;nz+eY#OE03q
+g>zO{^.x{hJD9?h->|\w]F(!kI_XoP@?lBx6|8;aGjhyAZKރ* ©Ne| ɋ»s`#Ջ@*^ex*wVm^:j'544+\Eђy.s/XoIa-QVM_zgv*ɆCokSA]2I
+~vV*@B%\EC2GB(#@Rj5Q;4
+endstream
+endobj
+9480 0 obj
+<< /Type /Page /Contents 9481 0 R /Resources 9479 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 9420 0 R >>
+endobj
+9482 0 obj
+<< /D [ 9480 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+9483 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+9484 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+9485 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+9486 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+9487 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+9488 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+9489 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+9490 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+9491 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+9492 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+9493 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+9494 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+9495 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+9496 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 626.366 null ] >>
+endobj
+9497 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 615.407 null ] >>
+endobj
+9498 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 604.448 null ] >>
+endobj
+9499 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 593.489 null ] >>
+endobj
+9500 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 582.53 null ] >>
+endobj
+9501 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 571.571 null ] >>
+endobj
+9502 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 560.613 null ] >>
+endobj
+9503 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 549.654 null ] >>
+endobj
+9504 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 523.751 null ] >>
+endobj
+9505 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 512.792 null ] >>
+endobj
+9506 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 501.833 null ] >>
+endobj
+9507 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 490.874 null ] >>
+endobj
+9508 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 479.915 null ] >>
+endobj
+9509 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 468.956 null ] >>
+endobj
+9510 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 457.997 null ] >>
+endobj
+9511 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 447.038 null ] >>
+endobj
+9512 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 436.08 null ] >>
+endobj
+9513 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 425.121 null ] >>
+endobj
+9514 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 414.162 null ] >>
+endobj
+9515 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 403.203 null ] >>
+endobj
+9516 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 392.244 null ] >>
+endobj
+9517 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 381.285 null ] >>
+endobj
+9518 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 370.326 null ] >>
+endobj
+9519 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 359.367 null ] >>
+endobj
+9520 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 348.408 null ] >>
+endobj
+9521 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 337.449 null ] >>
+endobj
+9522 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 326.49 null ] >>
+endobj
+9523 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 315.532 null ] >>
+endobj
+9524 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 304.573 null ] >>
+endobj
+9525 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 288.632 null ] >>
+endobj
+9526 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 277.674 null ] >>
+endobj
+9527 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 266.715 null ] >>
+endobj
+9528 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 250.774 null ] >>
+endobj
+9529 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 239.816 null ] >>
+endobj
+9530 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 228.857 null ] >>
+endobj
+9531 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 217.898 null ] >>
+endobj
+9532 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 190.002 null ] >>
+endobj
+9533 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 179.043 null ] >>
+endobj
+9534 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 168.085 null ] >>
+endobj
+9535 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 157.126 null ] >>
+endobj
+9536 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 146.167 null ] >>
+endobj
+9537 0 obj
+<< /D [ 9480 0 R /XYZ 81.077 135.208 null ] >>
+endobj
+9479 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F78 654 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+9540 0 obj
+<< /Filter /FlateDecode /Length 2160 >>
+stream
+xڭZ[o~ϯXOΡ.Ҧ ƾ4-AcD$Nd!)rF$%~!?ι9ߙ=o_o߼,&Zn0Agl3d44#Tzno93* f(B 1Yuy%On6Wmyu;auZ٧KV?~(JxK"$'4:(CՉY 1b||%*i?ǝ+*>׹>BLsyUqɣ-K6|r?Ϣ,~քcq3X9h#C͜s/47Wn.3ϫb~oW:mSrp:W)})c^nVa*6uVՁ]uߣtֆ: =I
+ >?I1|Q!f>Y^56k&ų'q
+EX
+IB>IifqsS 2ؗu}X{ /ۻt{i ki%(GhRcĹchg!@o66V-NL/R4M$hdb#B4`T#062D&Dw$iZ&KOHGPK4#ףqgMh)(.4|4znGD
+g<ORa HyELWc2
+3`\
+qtƄC[
+LDzNQ
+LIQB^@=08hϪ^$%ʏGw,^S =+k~IX@*|P%x~")Iqp˖eDA(~_KNa>;o}@ ͖ĝ1`ten s`VK+-nO|<]
+ #)P`'GɃ޿ɖvx)h(xy18DĻⰼtNd
+endstream
+endobj
+9539 0 obj
+<< /Type /Page /Contents 9540 0 R /Resources 9538 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 9420 0 R >>
+endobj
+9541 0 obj
+<< /D [ 9539 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+9542 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 625.801 null ] >>
+endobj
+9543 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 614.842 null ] >>
+endobj
+9544 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 603.883 null ] >>
+endobj
+9545 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 592.924 null ] >>
+endobj
+9546 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 581.965 null ] >>
+endobj
+9547 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 571.006 null ] >>
+endobj
+9548 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 560.048 null ] >>
+endobj
+9549 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 549.089 null ] >>
+endobj
+9550 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 538.13 null ] >>
+endobj
+9551 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 527.171 null ] >>
+endobj
+9552 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 516.212 null ] >>
+endobj
+9553 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 505.253 null ] >>
+endobj
+9554 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 494.294 null ] >>
+endobj
+9555 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 436.161 null ] >>
+endobj
+9556 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 425.202 null ] >>
+endobj
+9557 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 414.243 null ] >>
+endobj
+9558 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 398.626 null ] >>
+endobj
+9559 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 387.667 null ] >>
+endobj
+9560 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 376.708 null ] >>
+endobj
+9561 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 365.749 null ] >>
+endobj
+9562 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 354.79 null ] >>
+endobj
+9563 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 343.832 null ] >>
+endobj
+9564 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 332.873 null ] >>
+endobj
+9565 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 321.914 null ] >>
+endobj
+9566 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 310.955 null ] >>
+endobj
+9567 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 299.996 null ] >>
+endobj
+9568 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 289.037 null ] >>
+endobj
+9569 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 278.078 null ] >>
+endobj
+9570 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 267.119 null ] >>
+endobj
+9571 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 256.16 null ] >>
+endobj
+9572 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 245.201 null ] >>
+endobj
+9573 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 229.584 null ] >>
+endobj
+9574 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 218.625 null ] >>
+endobj
+9575 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 207.667 null ] >>
+endobj
+9576 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 177.267 null ] >>
+endobj
+9577 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 166.308 null ] >>
+endobj
+9578 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 155.349 null ] >>
+endobj
+9579 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 144.39 null ] >>
+endobj
+9580 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 133.431 null ] >>
+endobj
+9581 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 122.473 null ] >>
+endobj
+9582 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+9583 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+9584 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+9585 0 obj
+<< /D [ 9539 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+9538 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F78 654 0 R /F20 186 0 R /F19 184 0 R /F30 644 0 R /F68 189 0 R /F64 183 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+9588 0 obj
+<< /Filter /FlateDecode /Length 1860 >>
+stream
+xڽZnF+x#dM.-Z,$R!N|{/%j8#+vcYC3w}Ptt7tIT}wڎ$q >_0jlt9JʫosX,qZ pDibBb>~3O%"Fy pDbtOKuOhU5E[TeU;x0&EqctOmc^jK)>yh%]۫WGQUUlFg_W٬Xnƾ3C8Wő \_4۷cVbKW&,:Մk;Q\xϋ2fʫx6Ds# 80GiLjWE޴>^)9 |\997'SXY;fEfMW,Z#d:Ql8ꊛbgӆ4;6%8LНݷUȊv6˼ǬYw7jM$ q\% Z mUJ}^MYعйM4V # qA1kh[p5]RlK_(³ Lki3X4dz&9Q:!0_柷>Z6׎?/?N6
+K%{&_sC3F4ٕ8c4~)%ZJ.]G /U;NXxO9)눡!CSes~!9!0thSteQN|Ge56MQnVXbf(=K) h"F?gph4qh;GٳEgj8q.Dp+ ,E !hӲe>-KjLB}AMڠ9Am)a,ڢvAqEknشZY~lZ\V0F~ߗiۅ6P8~w$aŠv RhMPxQ5A;'Mkn+2(E|Ws}I"8btjXpˤ봍=r;j4
+"QC9t ƹȡkBP2EmC8%Fn
+MDuK92R׃MTq:.V<l;mhcrÝV i/A&iyNvj
+L4*HUP+PXh~BsPPX*:m݃#M[?0y:Sz&ҟΟ`N!];EB-:;o1l.c(AJ'I[Y(YPX = *NQKns#
+: mdw%Gn?vr4(cE[.6UyWwng2<'A~K@!a8ӟ|\ g
+endstream
+endobj
+9587 0 obj
+<< /Type /Page /Contents 9588 0 R /Resources 9586 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 9420 0 R >>
+endobj
+9589 0 obj
+<< /D [ 9587 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+9590 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+9591 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+9592 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+9593 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+9594 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+9595 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+9596 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 685.146 null ] >>
+endobj
+9597 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 674.187 null ] >>
+endobj
+9598 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 663.228 null ] >>
+endobj
+9599 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 652.269 null ] >>
+endobj
+9600 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 641.31 null ] >>
+endobj
+9601 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 630.351 null ] >>
+endobj
+9602 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 619.392 null ] >>
+endobj
+9603 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 608.433 null ] >>
+endobj
+9604 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 597.474 null ] >>
+endobj
+9605 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 586.515 null ] >>
+endobj
+9606 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 575.556 null ] >>
+endobj
+9607 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 564.598 null ] >>
+endobj
+9608 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 553.639 null ] >>
+endobj
+9609 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 542.68 null ] >>
+endobj
+9610 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 531.721 null ] >>
+endobj
+9611 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 520.762 null ] >>
+endobj
+9612 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 509.803 null ] >>
+endobj
+9613 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 498.844 null ] >>
+endobj
+9614 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 487.885 null ] >>
+endobj
+9615 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 476.926 null ] >>
+endobj
+9616 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 465.967 null ] >>
+endobj
+9617 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 455.009 null ] >>
+endobj
+9618 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 444.05 null ] >>
+endobj
+9619 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 433.091 null ] >>
+endobj
+9620 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 422.132 null ] >>
+endobj
+9621 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 411.173 null ] >>
+endobj
+9622 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 400.214 null ] >>
+endobj
+9623 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 389.255 null ] >>
+endobj
+9624 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 378.296 null ] >>
+endobj
+9625 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 367.337 null ] >>
+endobj
+9626 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 326.49 null ] >>
+endobj
+9627 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 315.532 null ] >>
+endobj
+9628 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 304.573 null ] >>
+endobj
+9629 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 293.614 null ] >>
+endobj
+9630 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 282.655 null ] >>
+endobj
+9631 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 271.696 null ] >>
+endobj
+9632 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 260.737 null ] >>
+endobj
+9633 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 249.778 null ] >>
+endobj
+9634 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 238.819 null ] >>
+endobj
+9635 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 227.86 null ] >>
+endobj
+9636 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 216.901 null ] >>
+endobj
+9637 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 205.943 null ] >>
+endobj
+9638 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 194.984 null ] >>
+endobj
+9639 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 184.025 null ] >>
+endobj
+9640 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 173.066 null ] >>
+endobj
+9641 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 162.107 null ] >>
+endobj
+9642 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 151.148 null ] >>
+endobj
+9643 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 140.189 null ] >>
+endobj
+9644 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 129.23 null ] >>
+endobj
+9645 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 118.271 null ] >>
+endobj
+9646 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 107.312 null ] >>
+endobj
+9647 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 96.354 null ] >>
+endobj
+9648 0 obj
+<< /D [ 9587 0 R /XYZ 81.077 85.395 null ] >>
+endobj
+9586 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+9651 0 obj
+<< /Filter /FlateDecode /Length 2133 >>
+stream
+xڵZ[o~ϯ0[UQA(м}h AqX]YJr٠P%Rz5KDKș>*q~
+W"rꇷJ1r6[=\Qx)љVDp*JEg쏹Vkk?L.rC2>Oź҇(Vrjr02 4`0b0nj_ܴj+&Je{c1"xUQy
+~E4ZkikKM>,+Ҽ([{~
+0;[Uͥ!aL:8]>FUR/oB/CY/E aJ"i">1tyHƒߠ\Cւpak`b2!Ưrp~i:mibyǪRO,.eD}JMN]]wk9\kOTwѽTne*d]&I7I-Ⲍ_}<3CJ܎h| PMs,UHpчPv0Nϲ$Ki.^'?ff`nk8sp& %tks>Nݗ5 כ1Poy{%YpjITxZq39ʌ'؝aHBQ;ᡭeEw#(JPQDq]yn@ l]VҤD;w]+GYfYRWmѺȊvDXY zȷ,ꢭDS aM}RA<%"NCz>}unC0aբugEr޵!2vx.Ec=ԺpB~6`,!!A܊dtInk4{9E"OE/, $&? J NYx+)ٻϛ0VU5l8e:Uz~Mt{>LԤ*H w*K?o"|,TD|+ #Cp- *6Ac?FT i)ZBn EhgR%92Wt@.ȥ˩@M2Y[faoDX}҂Xq8BQV}-ǣ+sg˼SG
+G
+oLN{nB.uBI¥s֏:֮T0uv]ʡnJ9}] k]N*na␹GKm܁>4P)@M C{3Bwj{+qx.pjכmőԼ;7_V(jpjhG-[Z#
+WJ ")N) .w ZɉHg Z~iV.2VC3!ir
+<!@CaniLݰߜҜCL\ޞS+m[Jr%R{0HgWRFyGd4u
+AEmMsWǗ(5ݱV@`E*z v}6QPᷖ TVP>.&tbjO >mD<((zTN bڞ/2axhƃ}3 a~g!
+\xo/" &N#xJ@xK8\WaX`CSZF1PGvz@eYP(,Ov?9{gjiv
+AΤI͇`H"^wX+=bpgk Oפ՝f"g|)eu繘v1|l
+endstream
+endobj
+9650 0 obj
+<< /Type /Page /Contents 9651 0 R /Resources 9649 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 9420 0 R >>
+endobj
+9652 0 obj
+<< /D [ 9650 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+9653 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+9654 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+9655 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+9656 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+9657 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+9658 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+9659 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+9660 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+9661 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+9662 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+9663 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+9664 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+9665 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+9666 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 626.366 null ] >>
+endobj
+9667 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 585.519 null ] >>
+endobj
+9668 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 574.56 null ] >>
+endobj
+9669 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 563.601 null ] >>
+endobj
+9670 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 552.642 null ] >>
+endobj
+9671 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 499.84 null ] >>
+endobj
+9672 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 488.882 null ] >>
+endobj
+9673 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 477.923 null ] >>
+endobj
+9674 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 466.964 null ] >>
+endobj
+9675 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 456.005 null ] >>
+endobj
+9676 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 445.046 null ] >>
+endobj
+9677 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 434.087 null ] >>
+endobj
+9678 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 405.195 null ] >>
+endobj
+9679 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 394.236 null ] >>
+endobj
+9680 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 383.278 null ] >>
+endobj
+9681 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 372.319 null ] >>
+endobj
+9682 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 361.36 null ] >>
+endobj
+9683 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 350.401 null ] >>
+endobj
+9684 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 339.442 null ] >>
+endobj
+9685 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 292.618 null ] >>
+endobj
+9686 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 281.659 null ] >>
+endobj
+9687 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 270.7 null ] >>
+endobj
+9688 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 259.741 null ] >>
+endobj
+9689 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 248.782 null ] >>
+endobj
+9690 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 237.823 null ] >>
+endobj
+9691 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 226.864 null ] >>
+endobj
+9692 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 215.905 null ] >>
+endobj
+9693 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 204.946 null ] >>
+endobj
+9694 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 193.987 null ] >>
+endobj
+9695 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 183.028 null ] >>
+endobj
+9696 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 172.07 null ] >>
+endobj
+9697 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 161.111 null ] >>
+endobj
+9698 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 150.152 null ] >>
+endobj
+9699 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 139.193 null ] >>
+endobj
+9700 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 128.234 null ] >>
+endobj
+9701 0 obj
+<< /D [ 9650 0 R /XYZ 81.077 117.275 null ] >>
+endobj
+9649 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+9704 0 obj
+<< /Filter /FlateDecode /Length 2074 >>
+stream
+xZ[o~ϯ/2bѢ Z`5 )XTH*c$gHjȑ%Y/eqexofDgw3:{nD3}o޾v&L ͬ&ьPf׫/s?]
+Nec8AKG dwyyqJV)DMYgyy<u)aRG,ـ3!x7[rLyZl:WZC~Ȗm`gL)2tڕD۱>KT#59ivG<Eg9`Bq6OΪ 1=ssaxܠ #ƌܠqM['y"Gvڧ)m .%jLzx!*zvwnXnn i
+_;SS/%!Ny8hoIę00 7h|0s, NEhrc5Np}k4B;<upg`~*sGӘ;<u~w<oKe-b|8K[jMC Iԧ2/Gr}KA }K퓒qo4.S4]/Ll?ץFB f4b$п}Gޒ1Aܯ{&JhqKݷ@;*<P!BO/-7ϰ7ctJ,NDMy>@~@aq% !
+ JԪ^'E*8j)z2j }~67?u}ãU6-;VGST`1^ɽ0zoq =Meʎ$Qipsv<r<U5_^=N}tQrP<wo柺Hs9_YL{]]B}'oOww&mGeءb1.KjMj^Bkۃh}~*o:4n(М. Zs <5NAmJGҫupqux[>M+E}-AVıH;Ԟf*$XRg6)[/ӇZ)_5b
+T({>9CԆ5Vp;[yx61ql3 *fw7h4_qPuS)L㷥z[ Pҡny4'ަ]_̫w] CŶl?]+Y3VKPή*'d(0(^VYׁ?QdžjN>2-E{@ʟ}D?]0#4j$Ўa#'1oHy[Y0OT:-xͪ[9O oAӂ?INo*FZs*M`>)m
+g}8{$̴m }͢-r\NtŢ:b`073ٝ?1jiΛ)zMu vmmxڣvXz4Fj옡> :~}yl`2V fx&i7RRvo
+;@۩~_$
+endstream
+endobj
+9703 0 obj
+<< /Type /Page /Contents 9704 0 R /Resources 9702 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 9420 0 R >>
+endobj
+9705 0 obj
+<< /D [ 9703 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+9706 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+9707 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+9708 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+9709 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+9710 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+9711 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+9712 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+9713 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+9714 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+9715 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+9716 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+9717 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 630.351 null ] >>
+endobj
+9718 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 601.459 null ] >>
+endobj
+9719 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 590.5 null ] >>
+endobj
+9720 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 579.542 null ] >>
+endobj
+9721 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 568.583 null ] >>
+endobj
+9722 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 557.624 null ] >>
+endobj
+9723 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 546.665 null ] >>
+endobj
+9724 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 535.706 null ] >>
+endobj
+9725 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 524.747 null ] >>
+endobj
+9726 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 513.788 null ] >>
+endobj
+9727 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 484.896 null ] >>
+endobj
+9728 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 473.938 null ] >>
+endobj
+9729 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 462.979 null ] >>
+endobj
+9730 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 452.02 null ] >>
+endobj
+9731 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 441.061 null ] >>
+endobj
+9732 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 430.102 null ] >>
+endobj
+9733 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 419.143 null ] >>
+endobj
+9734 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 408.184 null ] >>
+endobj
+9735 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 397.225 null ] >>
+endobj
+9736 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 386.266 null ] >>
+endobj
+9737 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 375.307 null ] >>
+endobj
+9738 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 364.349 null ] >>
+endobj
+9739 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 353.39 null ] >>
+endobj
+9740 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 342.431 null ] >>
+endobj
+9741 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 295.606 null ] >>
+endobj
+9742 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 284.647 null ] >>
+endobj
+9743 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 273.688 null ] >>
+endobj
+9744 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 262.73 null ] >>
+endobj
+9745 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 251.771 null ] >>
+endobj
+9746 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 240.812 null ] >>
+endobj
+9747 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 229.853 null ] >>
+endobj
+9748 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 171.073 null ] >>
+endobj
+9749 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 160.114 null ] >>
+endobj
+9750 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 149.155 null ] >>
+endobj
+9751 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 138.197 null ] >>
+endobj
+9752 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 127.238 null ] >>
+endobj
+9753 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 116.279 null ] >>
+endobj
+9754 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 105.32 null ] >>
+endobj
+9755 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 94.361 null ] >>
+endobj
+9756 0 obj
+<< /D [ 9703 0 R /XYZ 81.077 83.402 null ] >>
+endobj
+9702 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F30 644 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+9759 0 obj
+<< /Filter /FlateDecode /Length 2655 >>
+stream
+xڭZ[ۺ~ϯ0z,#}:(@rCSW^DIv{{DZ,&yu go.T_%_$?
+~}7?bH+LvàdWJ J
+WտJ&?BP5&4A)MYe"۵7e^?n܃y7!mqSlӴqԿ;-ugt' TF謼 <muҽJSGLF"a8~\?Mf.K w{wK:y(8#B73ΘisXXyd^cعb ֈ Rw8Vym\x121<T4~./bsܛ?G'$FTKSfL+d"&/6Si9#߫H'QP4bRq
+>9Ŝ Dh 9PgNCjln>ßZw_`7:mۼ*tu(^Jui٥D) :mM`pgB&+r읡fNOz~8A
+rupA42CMk:&Vżl 4n 1d2&!o~"Q@@Tl՝Wӿ ,Wg 8+pp7d-,p脔8(*xs͇B%JB^&81b:ptђ%j@Qvj8.<!}\Eᮎi5/֔mZOO^[6I
+kŕ
+iku IHnKQߊ.@Ndm<3 _Ru!)4dzUqy-й[s z֚]*
++<~%#}bnt)ܝ]85:! ZPDLԴxDl{l{2ڍ/:ڗsw$
+D/MDLT6}
+!"ǒ#5W)"5Cr8I611}O cdpC$THa r2LTB '^qvs֊1SΆ&1hp\8is?ỹE0|gMnS:XlC^]4v{wL@N/yU5dk$16搁JX́Bfo oW
+%um.LrotL~.2w%qPc%kgA'D<L䦚 ƺB߹ijA9xIrTϘVxjkY[}`SJBYK)vL~!14 bi=luf[㱜o?GbF}gШvJ@ѥR29r-jcp,Z0 G[pMY7癕uP:ǚH *VzDoFD݄gg Dd&< .<"萜3Ħϐ@hyJT2w^ls;__I~!fEkΞI,?h'۪2pM9
+}JF6s '4 aNf-0Q ;}
+=ݭ6:'w_Lэr?\4'x*M4>}?
+g Ѽj]/
+iQKaA? %cN~< dZӌ 'w@dUgm<B$WDG!ĘX-  di#ؚIdFfZw?DXy(qutVCx8qs wzy<k#ihL݉ ../QCps$/(3Ҙl'^L'y}| M؀l;8^Q'yKU<sC
+[Ď8"R4]%,Rxu2nc kQ0@ a^7d
+endstream
+endobj
+9758 0 obj
+<< /Type /Page /Contents 9759 0 R /Resources 9757 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 9420 0 R >>
+endobj
+9760 0 obj
+<< /D [ 9758 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+9761 0 obj
+<< /D [ 9758 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+9762 0 obj
+<< /D [ 9758 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+9763 0 obj
+<< /D [ 9758 0 R /XYZ 81.077 723.004 null ] >>
+endobj
+9764 0 obj
+<< /D [ 9758 0 R /XYZ 81.077 712.045 null ] >>
+endobj
+9765 0 obj
+<< /D [ 9758 0 R /XYZ 81.077 701.086 null ] >>
+endobj
+9766 0 obj
+<< /D [ 9758 0 R /XYZ 81.077 690.127 null ] >>
+endobj
+9767 0 obj
+<< /D [ 9758 0 R /XYZ 81.077 679.168 null ] >>
+endobj
+9768 0 obj
+<< /D [ 9758 0 R /XYZ 81.077 668.209 null ] >>
+endobj
+9769 0 obj
+<< /D [ 9758 0 R /XYZ 81.077 657.25 null ] >>
+endobj
+9770 0 obj
+<< /D [ 9758 0 R /XYZ 81.077 646.291 null ] >>
+endobj
+9771 0 obj
+<< /D [ 9758 0 R /XYZ 81.077 635.332 null ] >>
+endobj
+9772 0 obj
+<< /D [ 9758 0 R /XYZ 81.077 624.373 null ] >>
+endobj
+9773 0 obj
+<< /D [ 9758 0 R /XYZ 81.077 613.415 null ] >>
+endobj
+9774 0 obj
+<< /D [ 9758 0 R /XYZ 81.077 602.456 null ] >>
+endobj
+9775 0 obj
+<< /D [ 9758 0 R /XYZ 81.077 586.515 null ] >>
+endobj
+9776 0 obj
+<< /D [ 9758 0 R /XYZ 81.077 575.556 null ] >>
+endobj
+9777 0 obj
+<< /D [ 9758 0 R /XYZ 81.077 564.598 null ] >>
+endobj
+9778 0 obj
+<< /D [ 9758 0 R /XYZ 81.077 553.639 null ] >>
+endobj
+9779 0 obj
+<< /D [ 9758 0 R /XYZ 81.077 474.934 null ] >>
+endobj
+9780 0 obj
+<< /D [ 9758 0 R /XYZ 81.077 386.266 null ] >>
+endobj
+9781 0 obj
+<< /D [ 9758 0 R /XYZ 81.077 375.307 null ] >>
+endobj
+9782 0 obj
+<< /D [ 9758 0 R /XYZ 81.077 364.349 null ] >>
+endobj
+9783 0 obj
+<< /D [ 9758 0 R /XYZ 81.077 353.39 null ] >>
+endobj
+9784 0 obj
+<< /D [ 9758 0 R /XYZ 81.077 342.431 null ] >>
+endobj
+9785 0 obj
+<< /D [ 9758 0 R /XYZ 81.077 277.674 null ] >>
+endobj
+9786 0 obj
+<< /D [ 9758 0 R /XYZ 81.077 266.715 null ] >>
+endobj
+9787 0 obj
+<< /D [ 9758 0 R /XYZ 81.077 213.913 null ] >>
+endobj
+9788 0 obj
+<< /D [ 9758 0 R /XYZ 81.077 202.954 null ] >>
+endobj
+9789 0 obj
+<< /D [ 9758 0 R /XYZ 81.077 191.995 null ] >>
+endobj
+9790 0 obj
+<< /D [ 9758 0 R /XYZ 81.077 181.036 null ] >>
+endobj
+9791 0 obj
+<< /D [ 9758 0 R /XYZ 81.077 170.077 null ] >>
+endobj
+9792 0 obj
+<< /D [ 9758 0 R /XYZ 81.077 159.118 null ] >>
+endobj
+9793 0 obj
+<< /D [ 9758 0 R /XYZ 81.077 148.159 null ] >>
+endobj
+9794 0 obj
+<< /D [ 9758 0 R /XYZ 81.077 117.275 null ] >>
+endobj
+9795 0 obj
+<< /D [ 9758 0 R /XYZ 81.077 106.316 null ] >>
+endobj
+9757 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F30 644 0 R /F70 305 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+9798 0 obj
+<< /Filter /FlateDecode /Length 2491 >>
+stream
+xڵZߏ۸~_aEoY&OMpz84Z,v7kEu^ܤ/+Gg3ߐW+z_-V$|uC^S+% ’2iYYܒu~nZ9L#4
+׼s&aQ`;z_gus?-rJx?jm=|Fw7;hs!XC++81n))b !dQ*c ,[Uْg`:{+歱xl5e\sE3/aPl-^>~}S==So[-cƷyW~ކZ?4Sou;S ;LP:Z\03ALriAkHĵ!`.!5_'BDx+{sQ{,IIS|(% c5Uʙ*=+=WMm{< O7Tg4mzݘW;ue+E2P4=a?E cXA6]zj d>h=`-DyL;1/mc_3 DE-A i
+W$ӣ1%ͮV=?U%<M7SOۗ'냾%wfA_tM9-ȯaW6L Gux3Sۜ&ڽɽ:t-$ )K0Oh0~HwG#`;m>}z6 2?x4EQY[s̻UA)طw
+벽gߺF
+lpuR_3˽*RejPϾ(cܕjWx #
+-=^1n|]ӴQFr)h
+8,P9.B"Ɛ C~\ SY i q5lPSJcȥc({5
+*oK&܁taµK^RG39pًgv})?=O8=/`i7h>C!Ɲ)ƈRO07+Dc~:zGձ`}jLVBgcgyiRJ EYFbpOMe~9UWa ;6Y~%/ E"t2#,qT}!
+.'?xR
+N%L> SgI)B(4dډ[\O;~Idd!HSt\#Bi B_cUD $C>-]\ )d<'HU3컋ďAx<ڎv,EۺiwoߌazXXpW\+f"b~X,cLqjzI^2@*"EPit?eȜNhԗBR%)ҵ>Ov w&T}Qg/le
+xPpoC_Br?FzlΥѢP m|MDB0 Jf,KR Eڜev-?REkK#trrR#2\)f
+iJ"PVroAʉKkEq%2 0ݦt,/4{Te.Y L
+XWvWǼ;lIRDB0 <P4hQ zF_Cl]W\ NBdT4I݋sREq<Y4Qh+T<J!pOs
+0%r#l(*\%Ęq7+wSdA&Օa|,r_~3M*(T2E䚢{w
+N6H4Ky
+>Ra=k#@Q dS
+endstream
+endobj
+9797 0 obj
+<< /Type /Page /Contents 9798 0 R /Resources 9796 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 9420 0 R >>
+endobj
+9799 0 obj
+<< /D [ 9797 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+9800 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 695.255 null ] >>
+endobj
+9801 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 684.297 null ] >>
+endobj
+9802 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 673.338 null ] >>
+endobj
+9803 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 662.379 null ] >>
+endobj
+9804 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 651.42 null ] >>
+endobj
+9805 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 640.461 null ] >>
+endobj
+9806 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 629.502 null ] >>
+endobj
+9807 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 618.543 null ] >>
+endobj
+9808 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 607.584 null ] >>
+endobj
+9809 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 596.625 null ] >>
+endobj
+9810 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 585.666 null ] >>
+endobj
+9811 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 557.069 null ] >>
+endobj
+9812 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 546.11 null ] >>
+endobj
+9813 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 494.192 null ] >>
+endobj
+9814 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 483.233 null ] >>
+endobj
+9815 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 472.274 null ] >>
+endobj
+9816 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 461.315 null ] >>
+endobj
+9817 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 450.356 null ] >>
+endobj
+9818 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 439.397 null ] >>
+endobj
+9819 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 428.438 null ] >>
+endobj
+9820 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 399.841 null ] >>
+endobj
+9821 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 388.882 null ] >>
+endobj
+9822 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 377.923 null ] >>
+endobj
+9823 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 366.965 null ] >>
+endobj
+9824 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 356.006 null ] >>
+endobj
+9825 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 297.815 null ] >>
+endobj
+9826 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 286.856 null ] >>
+endobj
+9827 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 275.897 null ] >>
+endobj
+9828 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 264.938 null ] >>
+endobj
+9829 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 253.979 null ] >>
+endobj
+9830 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 243.021 null ] >>
+endobj
+9831 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 232.062 null ] >>
+endobj
+9832 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 221.103 null ] >>
+endobj
+9833 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 210.144 null ] >>
+endobj
+9834 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 199.185 null ] >>
+endobj
+9835 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 188.226 null ] >>
+endobj
+9836 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 177.267 null ] >>
+endobj
+9837 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 166.308 null ] >>
+endobj
+9838 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 155.349 null ] >>
+endobj
+9839 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 144.39 null ] >>
+endobj
+9840 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 133.431 null ] >>
+endobj
+9841 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 122.473 null ] >>
+endobj
+9842 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+9843 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+9844 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+9845 0 obj
+<< /D [ 9797 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+9796 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F30 644 0 R /F68 189 0 R /F64 183 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+9848 0 obj
+<< /Filter /FlateDecode /Length 1866 >>
+stream
+xZo~_a`_኿
+Mʒ+I;dz7@>ppl0&ﯲH ;e&XC9-(M(hEIn=ujk bbULyF)F29x2((PJ8);j' D[a8f绕Oz=eTH"H{ryU/\N`\ifn{"힑용ilpe.ZOv0۾-~wFh9q<֮f:=5QDL)j"C%s6LS@nM HӁ߰+2zl5[֓_ex\4u<Ce2+~0}|r=$R3VTyO:0smӢ:$I~cwm~ (Fgv. oed~<'U=~;oM%u gRVy#NY/lV_DsU%_6Si-n?l^)a5<__-г1yѨhc+K 5als 6E{cmXh#m`aQ!;A!ۇYP #|l3b6On^J+bEf,Qx`06;slK);G+e]hę@hnY.\f He`$pb 1󺬛z2!/m*-d2H( 喃'E[F2gILy xLO4FY9SlA޸5){q,E$Vn/+,_k4M#ҽL΅Mƞ<5E{bG,FwĞ+
+ֈb 1>q"ыS?V<'hϥ-b|[I O+'-v=ۮ @IARsX狼(L BPHk#ʯ42#J nE.Y02}iL0C4 J3!(A9j8^ž"pe6
+N.*a7}l^ߥqp2AޮP_]Gt5 g]c81:a8+w߻q׳eDrxEUŬ<yPd&(15m2]տTQtF
+3B[oI"2bRQT
+endstream
+endobj
+9847 0 obj
+<< /Type /Page /Contents 9848 0 R /Resources 9846 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 9420 0 R >>
+endobj
+9849 0 obj
+<< /D [ 9847 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+9850 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+9851 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+9852 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 699.507 null ] >>
+endobj
+9853 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 688.548 null ] >>
+endobj
+9854 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 677.589 null ] >>
+endobj
+9855 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 666.63 null ] >>
+endobj
+9856 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 655.671 null ] >>
+endobj
+9857 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 644.712 null ] >>
+endobj
+9858 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 633.753 null ] >>
+endobj
+9859 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 622.794 null ] >>
+endobj
+9860 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 611.836 null ] >>
+endobj
+9861 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 600.877 null ] >>
+endobj
+9862 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 589.918 null ] >>
+endobj
+9863 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 578.959 null ] >>
+endobj
+9864 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 568 null ] >>
+endobj
+9865 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 557.041 null ] >>
+endobj
+9866 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 546.082 null ] >>
+endobj
+9867 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 535.123 null ] >>
+endobj
+9868 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 524.164 null ] >>
+endobj
+9869 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 513.205 null ] >>
+endobj
+9870 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 502.246 null ] >>
+endobj
+9871 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 491.288 null ] >>
+endobj
+9872 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 480.329 null ] >>
+endobj
+9873 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 469.37 null ] >>
+endobj
+9874 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 458.411 null ] >>
+endobj
+9875 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 447.452 null ] >>
+endobj
+9876 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 436.493 null ] >>
+endobj
+141 0 obj
+<< /D [ 9847 0 R /XYZ 79.37 413.548 null ] >>
+endobj
+9877 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 328.868 null ] >>
+endobj
+9878 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 317.91 null ] >>
+endobj
+9879 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 306.951 null ] >>
+endobj
+9880 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 295.992 null ] >>
+endobj
+9881 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 285.033 null ] >>
+endobj
+9882 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 269.299 null ] >>
+endobj
+9883 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 258.34 null ] >>
+endobj
+9884 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 247.382 null ] >>
+endobj
+9885 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 236.423 null ] >>
+endobj
+9886 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 225.464 null ] >>
+endobj
+9887 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 199.185 null ] >>
+endobj
+9888 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 188.226 null ] >>
+endobj
+9889 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 177.267 null ] >>
+endobj
+9890 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 166.308 null ] >>
+endobj
+9891 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 155.349 null ] >>
+endobj
+9892 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 144.39 null ] >>
+endobj
+9893 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 133.431 null ] >>
+endobj
+9894 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 122.473 null ] >>
+endobj
+9895 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+9896 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+9897 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+9898 0 obj
+<< /D [ 9847 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+9846 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+9901 0 obj
+<< /Filter /FlateDecode /Length 2118 >>
+stream
+xZKo8W%9ÃY4f=dN; AqhGݲN2o_Ҵi]N0C$QTG|7G$O7g>I=hfzF$<"#-$j$AX| ?42R2 H1͗}h.hp0ca6׀}b^mSWNlG({& $~I FE?|xd:hQ1'jEN
+qBB˜ i?Vͤ N6%dUȕFBn8guO5ȝ$qZW.ӛқ^Dp ɟ{LBdjWe7[~» AܿD e.}:̱9,漣Xv)EY/ai -D]U;wB`$bÁ_uY=n-;1avE';oߑ$ 씢8`d1 &I
+o}(];8wE[ƍ .#]?rµZ$ h VlVj#C{ͺv(njc!P1"fEق_Leτ;C00sON'm~hgV7C>p}). rF:_^ˡ70p_M0\mCCnJ}i@:f
+2<ށwnkak>i`<nzpĒPR k~۶uQ?mn>!iknSe%s=fXyl7 ԅ_:m{{owC1CYAcnvfXO zaHW FdXs9١103I?tE5-!rيq7Y~Cq-'ж/$>5'(}U )} '\*tO?Ees + t _.&-u\c4OZP\V"z< Lbn]WuQ9C~RF6Ҙ3ٓ׾6_ OO2').?ݫ?}pEAukMdXvvH^+ٹnb]͢YRp+yL2ZŏF;N˺k'b:20Rt,"fYEmC߷`~N#q Xb`!.#q#Ј[g(_\_xu.\qf%{!"U( xS]8Y;O.+P(A"%]MX;q̖ʏLMJ9
+A_x*t=xrU$++i^G(c8eg:6WDim$@-I)^)-"IGamIΉ_ ~M`TKA2):68B ebǥ-7q|sniNpٌ!ui
+Ky\*PpلWQ6ޗaersEN8dUґ%iK FGZV~N;K=}щ6)ț N5TjDhlhzKr ͂{B!"#(3 EX:%8򰂽p16RWW{Q5y*Ewa
+d%ӪIny3`4̔ƈ!o#** 248]M1oƈ4H֛d迦Q > ́0S4|BBaI~f[ӧ^0w9|4AwZ ۇz~kFGjQxNpDV0M`ن"#k J),Y5ΓߣSw0)ҁ;'r̆(?nOS|
+endstream
+endobj
+9900 0 obj
+<< /Type /Page /Contents 9901 0 R /Resources 9899 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 9961 0 R >>
+endobj
+9902 0 obj
+<< /D [ 9900 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+9903 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+9904 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+9905 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 710.634 null ] >>
+endobj
+9906 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 699.675 null ] >>
+endobj
+9907 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 688.716 null ] >>
+endobj
+9908 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 648.5 null ] >>
+endobj
+9909 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 637.541 null ] >>
+endobj
+9910 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 626.582 null ] >>
+endobj
+9911 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 615.623 null ] >>
+endobj
+9912 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 604.664 null ] >>
+endobj
+9913 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 593.705 null ] >>
+endobj
+9914 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 582.747 null ] >>
+endobj
+9915 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 571.788 null ] >>
+endobj
+9916 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 560.829 null ] >>
+endobj
+9917 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 549.87 null ] >>
+endobj
+9918 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 538.911 null ] >>
+endobj
+9919 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 527.952 null ] >>
+endobj
+9920 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 516.993 null ] >>
+endobj
+9921 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 506.034 null ] >>
+endobj
+9922 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 495.075 null ] >>
+endobj
+9923 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 484.116 null ] >>
+endobj
+9924 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 473.157 null ] >>
+endobj
+9925 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 462.199 null ] >>
+endobj
+9926 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 451.24 null ] >>
+endobj
+9927 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 440.281 null ] >>
+endobj
+9928 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 429.322 null ] >>
+endobj
+9929 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 418.363 null ] >>
+endobj
+9930 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 407.404 null ] >>
+endobj
+9931 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 396.445 null ] >>
+endobj
+9932 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 385.486 null ] >>
+endobj
+9933 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 374.527 null ] >>
+endobj
+9934 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 363.568 null ] >>
+endobj
+9935 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 352.61 null ] >>
+endobj
+9936 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 341.651 null ] >>
+endobj
+9937 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 330.692 null ] >>
+endobj
+9938 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 319.733 null ] >>
+endobj
+9939 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 308.774 null ] >>
+endobj
+9940 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 297.815 null ] >>
+endobj
+9941 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 286.856 null ] >>
+endobj
+9942 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 275.897 null ] >>
+endobj
+9943 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 264.938 null ] >>
+endobj
+9944 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 253.979 null ] >>
+endobj
+9945 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 243.021 null ] >>
+endobj
+9946 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 232.062 null ] >>
+endobj
+9947 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 221.103 null ] >>
+endobj
+9948 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 210.144 null ] >>
+endobj
+9949 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 199.185 null ] >>
+endobj
+9950 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 188.226 null ] >>
+endobj
+9951 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 177.267 null ] >>
+endobj
+9952 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 166.308 null ] >>
+endobj
+9953 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 155.349 null ] >>
+endobj
+9954 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 144.39 null ] >>
+endobj
+9955 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 133.431 null ] >>
+endobj
+9956 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 122.473 null ] >>
+endobj
+9957 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+9958 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+9959 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+9960 0 obj
+<< /D [ 9900 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+9899 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F20 186 0 R /F19 184 0 R /F30 644 0 R /F69 304 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+9964 0 obj
+<< /Filter /FlateDecode /Length 1565 >>
+stream
+xYn6+d`
+t"+BpQǖ<4hW/3X#^^dD5OM$q ,g ф%VLb4#TdK~Y_
+߷ַD8@˼EU=JIS?NH)g앱0+x%n!zXK u~u:j7hΕ'p $DF5Zaa(bt?~W4yQd߇lpUeSDP9U.ŧhcWtɪS[ItEMzv˖u\eid.mO(qy֜H1dG)nkV\#peb Jh|$4c=1qJ &ۧ9*LG \
+!fjsˊ nfusCszhRguKngedK`#$*2X nٷt_uվxiϝ34g+sVٌhg 'F߷F-oΦ*96
+KI
+ 6X"} hpD4Mu :{ƻ `ְ4"8!e}vvŏtԵ$Jz
+G=D7[cOw/>-Q竣ѹ{XEּ]$ jt\
+=\d-%91=!#>Tf!Ƌ/ .B7vpبCO.`*o7?tiϩj+{Go,1[P#PRQK)B6XWrD~͵"`<#ʘ4Q
+)xBhtq%j_ו J/k lsB5Dh|ߌGsC~Sx/)B>y
+ U^SL[‡oT,EOCT>KGI" L
+s+Gh-D-%\I|f9&
+p oROfi6a,zޝcmԒo+Ä]%cZ}ud<ry^krN$%n('D^$
+endstream
+endobj
+9963 0 obj
+<< /Type /Page /Contents 9964 0 R /Resources 9962 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 9961 0 R >>
+endobj
+9965 0 obj
+<< /D [ 9963 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+9966 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+9967 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+9968 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+9969 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+9970 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+9971 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+9972 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+9973 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+9974 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+9975 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+9976 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+9977 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+9978 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+9979 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 602.456 null ] >>
+endobj
+9980 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 591.497 null ] >>
+endobj
+9981 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 580.538 null ] >>
+endobj
+9982 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 569.579 null ] >>
+endobj
+9983 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 558.62 null ] >>
+endobj
+9984 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 547.661 null ] >>
+endobj
+9985 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 536.702 null ] >>
+endobj
+9986 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 525.743 null ] >>
+endobj
+9987 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 514.784 null ] >>
+endobj
+9988 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 503.825 null ] >>
+endobj
+9989 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 492.867 null ] >>
+endobj
+9990 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 481.908 null ] >>
+endobj
+9991 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 470.949 null ] >>
+endobj
+9992 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 459.99 null ] >>
+endobj
+9993 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 449.031 null ] >>
+endobj
+9994 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 438.072 null ] >>
+endobj
+9995 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 427.113 null ] >>
+endobj
+9996 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 416.154 null ] >>
+endobj
+9997 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 405.195 null ] >>
+endobj
+9998 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 394.236 null ] >>
+endobj
+9999 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 383.278 null ] >>
+endobj
+10000 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 372.319 null ] >>
+endobj
+10001 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 361.36 null ] >>
+endobj
+10002 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 350.401 null ] >>
+endobj
+10003 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 339.442 null ] >>
+endobj
+10004 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 328.483 null ] >>
+endobj
+10005 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 317.524 null ] >>
+endobj
+10006 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 306.565 null ] >>
+endobj
+10007 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 295.606 null ] >>
+endobj
+10008 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 284.647 null ] >>
+endobj
+10009 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 273.688 null ] >>
+endobj
+10010 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 262.73 null ] >>
+endobj
+10011 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 251.771 null ] >>
+endobj
+10012 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 240.812 null ] >>
+endobj
+10013 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 229.853 null ] >>
+endobj
+10014 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 218.894 null ] >>
+endobj
+10015 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 207.935 null ] >>
+endobj
+10016 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 196.976 null ] >>
+endobj
+10017 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 162.107 null ] >>
+endobj
+10018 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 151.148 null ] >>
+endobj
+10019 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 140.189 null ] >>
+endobj
+10020 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 129.23 null ] >>
+endobj
+10021 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 118.271 null ] >>
+endobj
+10022 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 107.312 null ] >>
+endobj
+10023 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 96.354 null ] >>
+endobj
+10024 0 obj
+<< /D [ 9963 0 R /XYZ 81.077 85.395 null ] >>
+endobj
+9962 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+10027 0 obj
+<< /Filter /FlateDecode /Length 1450 >>
+stream
+xYMoFW~(4Mۃzj &W2!4hʎcDŴd>7k-2}:+7820'݄3i$QaI:T<Ht & #"x:@/)dZlb&EEY̛` Y`Aa+-Y.T#y``bc( яX"*e-&6HH},vs_E\@H#*P * Sw{(!'GFj7qўULA1Fz,kCJ8L - SbU/0 AWAD
+hpw %'ʧ y-^ upMΕ,&u&I
+wu_}p.K OHhhhTHdADihNS4zqWLNV
+pնiܮo&l:סW4JzjI@C*X@/K,m^YNxYעe(}H;55Rwxtx]
+`XTۉ&x *vU|yevk$-u5ʋ3RGu u[#0V1z{V-;[6/]E(8nޒ{60n1:2D>ﻍ}I$w"011q|%Rޖ}6vQusmw7#@xعx=lbꪲ㻋O̱|A 1ѯ'D؛ v_E74LЯ(DzBDA =AOo!g?kD:A'"D`BG701z,yV^v,ֽ5Qc 2 b8y40n\4,@AI?fm~z<8Fsy|6G} bg<lj*ĕa3C \ K[Tr;bb[d}Bb2GJը60;XR
+endstream
+endobj
+10026 0 obj
+<< /Type /Page /Contents 10027 0 R /Resources 10025 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 9961 0 R >>
+endobj
+10028 0 obj
+<< /D [ 10026 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+10029 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+10030 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+10031 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+10032 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+10033 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+10034 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+10035 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+10036 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+10037 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+10038 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+10039 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+10040 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+10041 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+10042 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 626.366 null ] >>
+endobj
+10043 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 615.407 null ] >>
+endobj
+10044 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 604.448 null ] >>
+endobj
+10045 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 593.489 null ] >>
+endobj
+10046 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 582.53 null ] >>
+endobj
+10047 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 571.571 null ] >>
+endobj
+10048 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 560.613 null ] >>
+endobj
+10049 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 549.654 null ] >>
+endobj
+10050 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 538.695 null ] >>
+endobj
+10051 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 527.736 null ] >>
+endobj
+10052 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 516.777 null ] >>
+endobj
+10053 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 505.818 null ] >>
+endobj
+10054 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 494.859 null ] >>
+endobj
+10055 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 483.9 null ] >>
+endobj
+10056 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 472.941 null ] >>
+endobj
+10057 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 461.982 null ] >>
+endobj
+10058 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 451.023 null ] >>
+endobj
+145 0 obj
+<< /D [ 10026 0 R /XYZ 79.37 427.562 null ] >>
+endobj
+10059 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 359.218 null ] >>
+endobj
+10060 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 348.259 null ] >>
+endobj
+10061 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 337.301 null ] >>
+endobj
+10062 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 326.342 null ] >>
+endobj
+10063 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 315.383 null ] >>
+endobj
+10064 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 304.424 null ] >>
+endobj
+10065 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 293.465 null ] >>
+endobj
+10066 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 282.506 null ] >>
+endobj
+10067 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 271.547 null ] >>
+endobj
+10068 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 260.588 null ] >>
+endobj
+10069 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 249.629 null ] >>
+endobj
+10070 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 238.67 null ] >>
+endobj
+10071 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 227.711 null ] >>
+endobj
+10072 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 216.753 null ] >>
+endobj
+10073 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 205.794 null ] >>
+endobj
+10074 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 194.835 null ] >>
+endobj
+10075 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 183.876 null ] >>
+endobj
+10076 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 172.917 null ] >>
+endobj
+10077 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 161.958 null ] >>
+endobj
+10078 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 150.999 null ] >>
+endobj
+10079 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 140.04 null ] >>
+endobj
+10080 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 129.081 null ] >>
+endobj
+10081 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 118.122 null ] >>
+endobj
+10082 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 107.164 null ] >>
+endobj
+10083 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 96.205 null ] >>
+endobj
+10084 0 obj
+<< /D [ 10026 0 R /XYZ 81.077 85.246 null ] >>
+endobj
+10025 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F67 187 0 R /F19 184 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+10087 0 obj
+<< /Filter /FlateDecode /Length 1676 >>
+stream
+xڽZKoFW;:
+n-?ޤy5JYE]EBê\˩tǷyq}΋};uZKu8=@LolMdZ]\gE)I#& DOFI Gq_5*,`Ƙtz`cQo^ۖITr•jgwwՆĨt!0z: nޒy#s۴NM43}pZgtEK\4)\%ry.dR篆F0 <[UvSk=;5P2K ]5Yw-,Fm\GhtMʃMQ!64C4OVUe5)/ysY4_Z|ᚅc#`J[N%eİ@Ι#>?0x'Ev;[$--~ԭqyt9džXǜ#i<CpnǓlɖM˼z$%M.6۸H-Am,I&$*O٬c)?ElY濗żV2'iBzR}PZRrɸ"*Gn h0zU}z<áC.~}l'`_ˑ
+:hr@‹XʑEm O6Yl>%1vlXCܖe{źSvDW#%F"_ C4}5̙F&`7m rOKVtg~Yk ,.R48#{# F .Izst]K}U]|(tNڀh:;b?S㒊5WCɮ7ݳd?SR.0z3q5ͣht*/Qڕ'M'Bm;xLH!L%eB*&ITB'TKP{(R4D :)Y(j)%\{Ӵ0 ]|-QTMMKM:̹Ш>D? j[=8B$ 7:/7Q@#,B/`CjOnrT/AhmXpB6Dhm؁seґBmKx  t1~5Mr˄c4 ǜ SÄd )Mi5엣K:lCT
+Qo#qѱ00W@R!>xī}j>8{vf3ci9mhX\_hZuֿ᧎WxZ#46ẅ(vClL?I$ib(H7̄C0EY}FBEHls(v Yr<oG;.n
+endstream
+endobj
+10086 0 obj
+<< /Type /Page /Contents 10087 0 R /Resources 10085 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 9961 0 R >>
+endobj
+10088 0 obj
+<< /D [ 10086 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+10089 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+10090 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+10091 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+10092 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 707.063 null ] >>
+endobj
+10093 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 696.104 null ] >>
+endobj
+10094 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 685.146 null ] >>
+endobj
+10095 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 674.187 null ] >>
+endobj
+10096 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 663.228 null ] >>
+endobj
+10097 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 652.269 null ] >>
+endobj
+10098 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 641.31 null ] >>
+endobj
+10099 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 630.351 null ] >>
+endobj
+10100 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 619.392 null ] >>
+endobj
+10101 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 608.433 null ] >>
+endobj
+10102 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 597.474 null ] >>
+endobj
+10103 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 586.515 null ] >>
+endobj
+10104 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 575.556 null ] >>
+endobj
+10105 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 564.598 null ] >>
+endobj
+10106 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 553.639 null ] >>
+endobj
+10107 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 542.68 null ] >>
+endobj
+10108 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 531.721 null ] >>
+endobj
+10109 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 520.762 null ] >>
+endobj
+10110 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 509.803 null ] >>
+endobj
+10111 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 498.844 null ] >>
+endobj
+10112 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 487.885 null ] >>
+endobj
+10113 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 476.926 null ] >>
+endobj
+10114 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 465.967 null ] >>
+endobj
+10115 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 455.009 null ] >>
+endobj
+10116 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 444.05 null ] >>
+endobj
+10117 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 433.091 null ] >>
+endobj
+10118 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 422.132 null ] >>
+endobj
+10119 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 411.173 null ] >>
+endobj
+10120 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 400.214 null ] >>
+endobj
+10121 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 389.255 null ] >>
+endobj
+10122 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 378.296 null ] >>
+endobj
+10123 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 367.337 null ] >>
+endobj
+10124 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 356.378 null ] >>
+endobj
+10125 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 345.42 null ] >>
+endobj
+10126 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 334.461 null ] >>
+endobj
+10127 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 323.502 null ] >>
+endobj
+10128 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 312.543 null ] >>
+endobj
+10129 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 301.584 null ] >>
+endobj
+10130 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 290.625 null ] >>
+endobj
+10131 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 279.666 null ] >>
+endobj
+10132 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 268.707 null ] >>
+endobj
+10133 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 257.748 null ] >>
+endobj
+10134 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 246.789 null ] >>
+endobj
+10135 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 235.83 null ] >>
+endobj
+10136 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 224.872 null ] >>
+endobj
+10137 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 213.913 null ] >>
+endobj
+10138 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 202.954 null ] >>
+endobj
+10139 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 191.995 null ] >>
+endobj
+10140 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 181.036 null ] >>
+endobj
+10141 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 170.077 null ] >>
+endobj
+10142 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 159.118 null ] >>
+endobj
+10143 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 148.159 null ] >>
+endobj
+10144 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 137.2 null ] >>
+endobj
+10145 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 126.241 null ] >>
+endobj
+10146 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 115.283 null ] >>
+endobj
+10147 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 104.324 null ] >>
+endobj
+10148 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 93.365 null ] >>
+endobj
+10149 0 obj
+<< /D [ 10086 0 R /XYZ 81.077 82.406 null ] >>
+endobj
+10085 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R /F70 305 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+10152 0 obj
+<< /Filter /FlateDecode /Length 1580 >>
+stream
+xڵZKoFW%Fɾ:q
+Ѷiۃ6>Gť*4aUբ° -Ë~JlKwWuwW2+dQinMhUbŎ+~{p{ws2ZahmnAm~9 pdviƵO(1N6_HiIuM02l0Zdq}Z/93
+?ӻejWy3-.uȖ9F U\VtbĚpqZճ 0^nctS.簮*G _\M |LR0PIk݋I$eL$ih$St/;FD2CWQ_d΂V.)yBRhZրv>)XRCm
+m4XL~qUc
+95fj8oj>GɂXa=dJ;A)R4YCf{Y`~$[T;=F7ٷS0sfE`}՜kx{q[WQpyU]/r6ߧԱ˪SLfMX{T{p6ʎ3$erhGq/E_:!ւQ\OYT
+59,Sq68^GduoqjvKYiITS =RrUd=IEzؕOKzD^+ (LkNGA#EE/h SS"YHTEa<xISy8S-#NwD^(hJU^xXQE*i.'D;}f%4 z ɷ ݧ TlDT oiSN“VCb\{Qq4* R[P|L4-[9[)JwM434y^F=
+@xeYP4zp hxx&j"~!2491Fں
+>Gwo=i0pHAv0Cwׯ4"QK#^}3OX#OG M,8oef;EkXVSkXh,
+RIY p|bF+EmSwf$>-KZ9hm%0["W$ItN
+M\خàop? ўu%3P ݱS/X
+endstream
+endobj
+10151 0 obj
+<< /Type /Page /Contents 10152 0 R /Resources 10150 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 9961 0 R >>
+endobj
+10153 0 obj
+<< /D [ 10151 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+10154 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+10155 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+10156 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+10157 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+10158 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+149 0 obj
+<< /D [ 10151 0 R /XYZ 79.37 701.534 null ] >>
+endobj
+10159 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 661.072 null ] >>
+endobj
+10160 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 650.113 null ] >>
+endobj
+10161 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 639.154 null ] >>
+endobj
+10162 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 628.195 null ] >>
+endobj
+10163 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 617.236 null ] >>
+endobj
+10164 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 606.278 null ] >>
+endobj
+10165 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 595.319 null ] >>
+endobj
+10166 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 584.36 null ] >>
+endobj
+10167 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 573.401 null ] >>
+endobj
+10168 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 562.442 null ] >>
+endobj
+10169 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 551.483 null ] >>
+endobj
+10170 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 540.524 null ] >>
+endobj
+10171 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 529.565 null ] >>
+endobj
+10172 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 518.606 null ] >>
+endobj
+10173 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 507.647 null ] >>
+endobj
+10174 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 496.689 null ] >>
+endobj
+10175 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 485.73 null ] >>
+endobj
+10176 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 474.771 null ] >>
+endobj
+10177 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 463.812 null ] >>
+endobj
+10178 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 452.853 null ] >>
+endobj
+10179 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 441.894 null ] >>
+endobj
+10180 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 430.935 null ] >>
+endobj
+10181 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 419.976 null ] >>
+endobj
+10182 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 409.017 null ] >>
+endobj
+10183 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 398.058 null ] >>
+endobj
+10184 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 387.1 null ] >>
+endobj
+10185 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 376.141 null ] >>
+endobj
+10186 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 365.182 null ] >>
+endobj
+10187 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 354.223 null ] >>
+endobj
+10188 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 343.264 null ] >>
+endobj
+10189 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 332.305 null ] >>
+endobj
+10190 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 321.346 null ] >>
+endobj
+10191 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 310.387 null ] >>
+endobj
+10192 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 299.428 null ] >>
+endobj
+10193 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 288.469 null ] >>
+endobj
+10194 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 277.51 null ] >>
+endobj
+10195 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 266.552 null ] >>
+endobj
+10196 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 255.593 null ] >>
+endobj
+10197 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 244.634 null ] >>
+endobj
+10198 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 233.675 null ] >>
+endobj
+10199 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 222.716 null ] >>
+endobj
+10200 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 211.757 null ] >>
+endobj
+10201 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 200.798 null ] >>
+endobj
+10202 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 189.839 null ] >>
+endobj
+10203 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 178.88 null ] >>
+endobj
+10204 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 167.921 null ] >>
+endobj
+10205 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 156.963 null ] >>
+endobj
+10206 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 146.004 null ] >>
+endobj
+10207 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 135.045 null ] >>
+endobj
+10208 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 124.086 null ] >>
+endobj
+10209 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 113.127 null ] >>
+endobj
+10210 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 102.168 null ] >>
+endobj
+10211 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 91.209 null ] >>
+endobj
+10212 0 obj
+<< /D [ 10151 0 R /XYZ 81.077 80.25 null ] >>
+endobj
+10150 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F67 187 0 R /F19 184 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+10215 0 obj
+<< /Filter /FlateDecode /Length 1530 >>
+stream
+xڵZMoFW%i~d4mom!0JfA
+EI-i+/&%q̾5//ޝ;[ ͂J?(eVYŪyҾW|uYV,`A}║9q{J/ggg~.~Ӹzۻ/[j57ÙhsKѷ#G`66p.љV*`hr4}lǍmAi/#pLJg8)z.YqjpˤHylMca;#It2tۏ\oLe5S: SEcoRp1H XɴBYU2\ºZW#/-keP)Z3lA
+:RaZcAaSG*
+ Mr7'Kf ʰ4[&~\}
+8/Cog"60W搡fx6sjt+84Pe](+x4")zGzumf].c])j!CCcwϺX˦_{s\MY8fmiRޏeEϼmȬ FXjG6Өj&',짉3YidS4}rXjZ՜-Dd * ʏM3~7?~oo]8[{ Qs 9;Cv,\#Ik5C&u9O!96вzdC :9oX\UJ$j%# ̠}d.C ZЏ.ԵtL ,ԍ%(X,G*2~d9v7VIC%ɡ (HH^N!m@""'
+:TSi$S>%lںPjtZ?\+Hk!CsZ?QK 7"o{' gjVrbHf5ʦդ'C? Q3Q3-m%C?Ucnw('C΢ZZşIG<VgtO3.jMQ5$ kmQ_m/ϞM=N1QEN\,~8=c<,H^'htS4ž_wߧFh%ce
+ -fhrIScҌ#\ G<90ǀv24201Ymhad,дݪmӏVqY,UUJ*&vU$ -(^V8+ҿzdDGo{u"9k}}̛fĆ
+)K*notgF{KZ)lϔ#\
+~%"Q=_R"
+endstream
+endobj
+10214 0 obj
+<< /Type /Page /Contents 10215 0 R /Resources 10213 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 9961 0 R >>
+endobj
+10216 0 obj
+<< /D [ 10214 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+10217 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+10218 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+10219 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+10220 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+10221 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+10222 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+10223 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+10224 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+10225 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+10226 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+10227 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+10228 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+10229 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+10230 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 621.385 null ] >>
+endobj
+10231 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 610.426 null ] >>
+endobj
+10232 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 599.467 null ] >>
+endobj
+10233 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 588.508 null ] >>
+endobj
+10234 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 577.549 null ] >>
+endobj
+10235 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 566.59 null ] >>
+endobj
+10236 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 555.631 null ] >>
+endobj
+10237 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 544.672 null ] >>
+endobj
+10238 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 533.713 null ] >>
+endobj
+10239 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 522.754 null ] >>
+endobj
+10240 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 511.796 null ] >>
+endobj
+10241 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 500.837 null ] >>
+endobj
+10242 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 489.878 null ] >>
+endobj
+10243 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 478.919 null ] >>
+endobj
+10244 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 467.96 null ] >>
+endobj
+10245 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 457.001 null ] >>
+endobj
+10246 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 446.042 null ] >>
+endobj
+10247 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 435.083 null ] >>
+endobj
+10248 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 424.124 null ] >>
+endobj
+10249 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 413.165 null ] >>
+endobj
+10250 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 402.207 null ] >>
+endobj
+10251 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 391.248 null ] >>
+endobj
+10252 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 380.289 null ] >>
+endobj
+10253 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 369.33 null ] >>
+endobj
+10254 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 358.371 null ] >>
+endobj
+10255 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 347.412 null ] >>
+endobj
+10256 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 336.453 null ] >>
+endobj
+10257 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 325.494 null ] >>
+endobj
+10258 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 314.535 null ] >>
+endobj
+10259 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 303.576 null ] >>
+endobj
+10260 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 292.618 null ] >>
+endobj
+10261 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 281.659 null ] >>
+endobj
+10262 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 270.7 null ] >>
+endobj
+10263 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 259.741 null ] >>
+endobj
+10264 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 248.782 null ] >>
+endobj
+10265 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 237.823 null ] >>
+endobj
+10266 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 226.864 null ] >>
+endobj
+10267 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 215.905 null ] >>
+endobj
+10268 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 204.946 null ] >>
+endobj
+10269 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 193.987 null ] >>
+endobj
+10270 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 183.028 null ] >>
+endobj
+10271 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 172.07 null ] >>
+endobj
+10272 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 161.111 null ] >>
+endobj
+10273 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 150.152 null ] >>
+endobj
+10274 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 139.193 null ] >>
+endobj
+10275 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 128.234 null ] >>
+endobj
+10276 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 117.275 null ] >>
+endobj
+10277 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 106.316 null ] >>
+endobj
+10278 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 95.357 null ] >>
+endobj
+10279 0 obj
+<< /D [ 10214 0 R /XYZ 81.077 84.398 null ] >>
+endobj
+10213 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+10282 0 obj
+<< /Filter /FlateDecode /Length 2038 >>
+stream
+xڵZ[o6~ϯ09.2Oŀue/ bӎP[r-i4}EJZ,x<l3ó_.p\tsfiEݬ/ 32SI2Idv5Dn~sR2IF1o~x04L{'}UMQU792g!Ib5YW=˺׬mN*D4rD,dRe4!򕠢UЭe H%Rz|_$F[_/lbj]| #gRZ 3OY$QЖ-6iX!q)4!:Ev,Z@`mGC|}/s$1Ćfi+ M˧Y  B˰x$EUB3 x6F9D駪b}u}f໵|rVfsXqT9 #}%'%x)WO3d*33#iBt$rIZx4!\Z}25!ɤV#Cl3˼lQN+*dJ(OcbRi&bt
+2Ak&m _0ӘV xh^2zRh3U}Xܯx6<1(ESF=a5X/VPNRCie34i4! s@4I.kk#t42cmq/a)K$jk0$-D/ٹV>ÓF*Bg=Ŵ)BK`ȴ);n!/k൫uFp1dI 6 Q+Q){ܻY0lZ.;X'~a>oӴGz6]z+JgJ0bU,i4Dh%,B\JӺlu0&/7sCekG)OcSB|.)ЦR&
+q>B˶ML14@,#4<6֤E,6 wGclيe|?TpA eԵ#͝.y}%g&V(7=M>/=8<sP!=3ew?ttyQw,-pvcp_4w#qdLlDF-
+8DLҹ=6ŽBv]T=$SM^K[;K`YnLB-p$~92|~sD3$j7ԛox-3^], ?{_r]73D? tRI\-ѷe~ܭ$UD)]#`؀`̅ \,;N;Q-E+ZeĒsB]}ݯxUquR
+fJѴ }1?c5wzw&%AGǥuм٠<]Lamκφ+
+TMoNbgjk#C !˷Njʪ1wዚutFۭ[S*yx5'DMVI, "yjErž@ˮM=`h I o \_%!E{dHzjcnj4s 8fCr`oLq c=>X'@ t2J;zw,~)MhL۟ۺ
+CO qQ6 Rr^Py i'T3
+ ;}ƒB0O
+^WkyO`B1Z6z,2qF -,A۲/ߚPyL DRBCOC88Bt*.kgǢ~<v
+C#q/99@DΜs]|sFMk
+endstream
+endobj
+10281 0 obj
+<< /Type /Page /Contents 10282 0 R /Resources 10280 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 9961 0 R >>
+endobj
+10283 0 obj
+<< /D [ 10281 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+10284 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+10285 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+10286 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+10287 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+10288 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+10289 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+10290 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+10291 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+10292 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+10293 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+10294 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+10295 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+10296 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+10297 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 626.366 null ] >>
+endobj
+10298 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 615.407 null ] >>
+endobj
+10299 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 604.448 null ] >>
+endobj
+10300 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 593.489 null ] >>
+endobj
+10301 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 582.53 null ] >>
+endobj
+10302 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 571.571 null ] >>
+endobj
+10303 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 560.613 null ] >>
+endobj
+10304 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 549.654 null ] >>
+endobj
+10305 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 538.695 null ] >>
+endobj
+10306 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 527.736 null ] >>
+endobj
+10307 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 516.777 null ] >>
+endobj
+10308 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 505.818 null ] >>
+endobj
+10309 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 494.859 null ] >>
+endobj
+10310 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 483.9 null ] >>
+endobj
+10311 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 472.941 null ] >>
+endobj
+10312 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 461.982 null ] >>
+endobj
+10313 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 451.023 null ] >>
+endobj
+10314 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 440.065 null ] >>
+endobj
+10315 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 429.106 null ] >>
+endobj
+10316 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 418.147 null ] >>
+endobj
+10317 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 407.188 null ] >>
+endobj
+10318 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 396.229 null ] >>
+endobj
+10319 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 385.27 null ] >>
+endobj
+10320 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 374.311 null ] >>
+endobj
+10321 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 363.352 null ] >>
+endobj
+10322 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 352.393 null ] >>
+endobj
+10323 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 341.434 null ] >>
+endobj
+10324 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 330.476 null ] >>
+endobj
+10325 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 319.517 null ] >>
+endobj
+10326 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 308.558 null ] >>
+endobj
+153 0 obj
+<< /D [ 10281 0 R /XYZ 79.37 283.753 null ] >>
+endobj
+10327 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 162.67 null ] >>
+endobj
+10328 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 116.278 null ] >>
+endobj
+10329 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+10330 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+10331 0 obj
+<< /D [ 10281 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+10280 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F67 187 0 R /F19 184 0 R /F20 186 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+10334 0 obj
+<< /Filter /FlateDecode /Length 1698 >>
+stream
+xZ]o6}ϯ[ ao2؆buia ٦cHJ ~$|)ʖusse.GA]_~9Wf$5xq@hDGFEH+J"EGGq}W]
+Gf]֧9Dhry-sJc˜0( hSL؈KCpFLn,M[o/OM{>Co)i
+fm8lv[kG8 nI҆Ko<K\Z)\
+b})xVyjT CC۫漰K`ɮG\3h}uq6ǏYaF79(җH\Hc)
+endstream
+endobj
+10333 0 obj
+<< /Type /Page /Contents 10334 0 R /Resources 10332 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 9961 0 R >>
+endobj
+10335 0 obj
+<< /D [ 10333 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+10336 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+10337 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+10338 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+10339 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+10340 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+10341 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+10342 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+10343 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+10344 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+10345 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+10346 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+10347 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+10348 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 632.344 null ] >>
+endobj
+10349 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 621.385 null ] >>
+endobj
+10350 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 610.426 null ] >>
+endobj
+10351 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 599.467 null ] >>
+endobj
+10352 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 588.508 null ] >>
+endobj
+10353 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 577.549 null ] >>
+endobj
+10354 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 566.59 null ] >>
+endobj
+10355 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 555.631 null ] >>
+endobj
+10356 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 544.672 null ] >>
+endobj
+10357 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 533.713 null ] >>
+endobj
+10358 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 522.754 null ] >>
+endobj
+10359 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 511.796 null ] >>
+endobj
+10360 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 500.837 null ] >>
+endobj
+10361 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 489.878 null ] >>
+endobj
+10362 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 457.001 null ] >>
+endobj
+10363 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 446.042 null ] >>
+endobj
+10364 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 435.083 null ] >>
+endobj
+10365 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 424.124 null ] >>
+endobj
+10366 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 413.165 null ] >>
+endobj
+10367 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 402.207 null ] >>
+endobj
+10368 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 391.248 null ] >>
+endobj
+10369 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 380.289 null ] >>
+endobj
+10370 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 369.33 null ] >>
+endobj
+10371 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 353.39 null ] >>
+endobj
+10372 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 342.431 null ] >>
+endobj
+10373 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 331.472 null ] >>
+endobj
+10374 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 320.513 null ] >>
+endobj
+10375 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 309.554 null ] >>
+endobj
+10376 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 298.595 null ] >>
+endobj
+10377 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 287.636 null ] >>
+endobj
+10378 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 276.677 null ] >>
+endobj
+10379 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 265.718 null ] >>
+endobj
+10380 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 238.819 null ] >>
+endobj
+10381 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 227.86 null ] >>
+endobj
+10382 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 185.021 null ] >>
+endobj
+10383 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 174.062 null ] >>
+endobj
+10384 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 163.103 null ] >>
+endobj
+10385 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 152.144 null ] >>
+endobj
+10386 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 141.185 null ] >>
+endobj
+10387 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 130.226 null ] >>
+endobj
+10388 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 119.268 null ] >>
+endobj
+10389 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 108.309 null ] >>
+endobj
+10390 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 92.368 null ] >>
+endobj
+10391 0 obj
+<< /D [ 10333 0 R /XYZ 81.077 81.41 null ] >>
+endobj
+10332 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+10394 0 obj
+<< /Filter /FlateDecode /Length 1862 >>
+stream
+xڵYKo60Cm avME`ж[JrAz:D4f#< no$(F7^E1b(aIFt'Ll鯀bP(>zrNN׺h&B!^<jcY{Qԟ"UԻ*7nVHLoɇ[xXj כj/2P?!,}ƛRߠf?[jQåD
+fH'+yq,:qa{C i18(yhϳbc2*ꘒ{F|0ڻD!Ea"f
+fbrNY C(jJ #EAc$V>—j^|F;ɕ5@J1G !َpyٱ7|gp6:l|:~`Ϥ Æ.*UmEr&_۱VF8\T}7&bhpG>?BRHe<n y#?Ɗ٢LĻ p1Nlry93>s*2j
+cTMYuX<8!2 H榨Gty8FEliUd
+aA'C-w %9bސ`%}ޞ WuY./3?P*FP{]$"${`/\M/wn٭p+?uE%ͺEd=˪,U,>VJ'LKU^T`4P|Xc/aްUʕET7,Ey^ئUVV[3߂m;[l[=/ ]mn`,܅[,<D)"( r!{˨*L<q 䏡DI uwfd4>[_u2FWc0} z`%2Fo9R
+
+Y0@.Qe{N0735J#tYe켄IĻL `=Xwɧ~5qы´9DrvJ*cW@7dOf>%bdQт;nkmEm.̬6뼴;ff[0#7z3[B]ep$keEX<r<])dZ簦닕n\7ƨt17u]wqUi[رnx.ֶ\kkkY#4d_eΫlki1RƉ&2ѝ{
+endstream
+endobj
+10393 0 obj
+<< /Type /Page /Contents 10394 0 R /Resources 10392 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 9961 0 R >>
+endobj
+10395 0 obj
+<< /D [ 10393 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+10396 0 obj
+<< /D [ 10393 0 R /XYZ 81.077 742.929 null ] >>
+endobj
+10397 0 obj
+<< /D [ 10393 0 R /XYZ 81.077 731.97 null ] >>
+endobj
+10398 0 obj
+<< /D [ 10393 0 R /XYZ 81.077 721.011 null ] >>
+endobj
+10399 0 obj
+<< /D [ 10393 0 R /XYZ 81.077 710.052 null ] >>
+endobj
+10400 0 obj
+<< /D [ 10393 0 R /XYZ 81.077 699.093 null ] >>
+endobj
+10401 0 obj
+<< /D [ 10393 0 R /XYZ 81.077 688.134 null ] >>
+endobj
+10402 0 obj
+<< /D [ 10393 0 R /XYZ 81.077 677.175 null ] >>
+endobj
+10403 0 obj
+<< /D [ 10393 0 R /XYZ 81.077 666.217 null ] >>
+endobj
+10404 0 obj
+<< /D [ 10393 0 R /XYZ 81.077 655.258 null ] >>
+endobj
+157 0 obj
+<< /D [ 10393 0 R /XYZ 79.37 607.802 null ] >>
+endobj
+10405 0 obj
+<< /D [ 10393 0 R /XYZ 81.077 510.955 null ] >>
+endobj
+10406 0 obj
+<< /D [ 10393 0 R /XYZ 81.077 499.996 null ] >>
+endobj
+10407 0 obj
+<< /D [ 10393 0 R /XYZ 81.077 489.037 null ] >>
+endobj
+10408 0 obj
+<< /D [ 10393 0 R /XYZ 81.077 478.078 null ] >>
+endobj
+10409 0 obj
+<< /D [ 10393 0 R /XYZ 81.077 462.138 null ] >>
+endobj
+10410 0 obj
+<< /D [ 10393 0 R /XYZ 81.077 451.179 null ] >>
+endobj
+10411 0 obj
+<< /D [ 10393 0 R /XYZ 81.077 440.22 null ] >>
+endobj
+10412 0 obj
+<< /D [ 10393 0 R /XYZ 81.077 429.261 null ] >>
+endobj
+10413 0 obj
+<< /D [ 10393 0 R /XYZ 81.077 418.302 null ] >>
+endobj
+10414 0 obj
+<< /D [ 10393 0 R /XYZ 81.077 407.343 null ] >>
+endobj
+10415 0 obj
+<< /D [ 10393 0 R /XYZ 81.077 396.384 null ] >>
+endobj
+10416 0 obj
+<< /D [ 10393 0 R /XYZ 81.077 385.426 null ] >>
+endobj
+10417 0 obj
+<< /D [ 10393 0 R /XYZ 81.077 374.467 null ] >>
+endobj
+161 0 obj
+<< /D [ 10393 0 R /XYZ 79.37 349.012 null ] >>
+endobj
+10418 0 obj
+<< /D [ 10393 0 R /XYZ 81.077 280.669 null ] >>
+endobj
+10419 0 obj
+<< /D [ 10393 0 R /XYZ 81.077 269.71 null ] >>
+endobj
+10420 0 obj
+<< /D [ 10393 0 R /XYZ 81.077 258.751 null ] >>
+endobj
+10421 0 obj
+<< /D [ 10393 0 R /XYZ 81.077 247.792 null ] >>
+endobj
+10422 0 obj
+<< /D [ 10393 0 R /XYZ 81.077 236.833 null ] >>
+endobj
+10423 0 obj
+<< /D [ 10393 0 R /XYZ 81.077 225.874 null ] >>
+endobj
+10424 0 obj
+<< /D [ 10393 0 R /XYZ 81.077 209.934 null ] >>
+endobj
+10425 0 obj
+<< /D [ 10393 0 R /XYZ 81.077 198.975 null ] >>
+endobj
+10426 0 obj
+<< /D [ 10393 0 R /XYZ 81.077 188.016 null ] >>
+endobj
+10427 0 obj
+<< /D [ 10393 0 R /XYZ 81.077 177.058 null ] >>
+endobj
+10428 0 obj
+<< /D [ 10393 0 R /XYZ 81.077 166.099 null ] >>
+endobj
+10429 0 obj
+<< /D [ 10393 0 R /XYZ 81.077 155.14 null ] >>
+endobj
+10430 0 obj
+<< /D [ 10393 0 R /XYZ 81.077 144.181 null ] >>
+endobj
+10431 0 obj
+<< /D [ 10393 0 R /XYZ 81.077 133.222 null ] >>
+endobj
+10392 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F65 185 0 R /F68 189 0 R /F64 183 0 R /F20 186 0 R /F67 187 0 R /F70 305 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+10434 0 obj
+<< /Filter /FlateDecode /Length 2061 >>
+stream
+xڽZn}Лl`aI dw6a!$d%-b)R![4A^La]NU~,~x?{-2)budA:#\/$Qt-}ښ+Ŧ
+  [pFhl͉V
+=GBCEoISHTZw) l=]SUo~hާowZFTRI\"
+ûH&Niq14GGR)Nnv{{n1z(z 6Of1GE}*k͡uso 7';>j9m! |DI⦸ %sHI<%Bw'ȳ}kC}kn[i;ʍscMP0zЃHs!
+9*of_庂۲;ڇV'N
+VsEn@q%Z.\~Ygܙ0_.Jft:ƪMoMU}947 eS*\O`Ev~=oksa`ܣ)gSɖ)SbV]3T
+<Ӿo\SiJ,P$w2 &W#Ɋb!^XSht3cqW3y=?Ln:PƍǺyt/6POX㳖2ihp}6l5qANU "4UE֭U 4KKhDh_wS+ti}o8JW>] z` qId]ɚR5Z7)q+?y~/]Jaz qcKFK*$fFJq{Y]`_Rhg5̏wRD[I
+fKbi'8:Ϩ2ahb i3 eqMm/ico΀5-APF>#a ԛkfOC`x=^`ӡ-SƩnI3_R$IZdSh\z_Ki
+endstream
+endobj
+10433 0 obj
+<< /Type /Page /Contents 10434 0 R /Resources 10432 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 9961 0 R >>
+endobj
+10435 0 obj
+<< /D [ 10433 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+10436 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 745.918 null ] >>
+endobj
+10437 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 734.959 null ] >>
+endobj
+10438 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 724 null ] >>
+endobj
+10439 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 713.041 null ] >>
+endobj
+10440 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 702.082 null ] >>
+endobj
+10441 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 691.123 null ] >>
+endobj
+10442 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 680.164 null ] >>
+endobj
+10443 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 669.205 null ] >>
+endobj
+10444 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 658.246 null ] >>
+endobj
+10445 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 647.288 null ] >>
+endobj
+10446 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 636.329 null ] >>
+endobj
+10447 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 625.37 null ] >>
+endobj
+10448 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 614.411 null ] >>
+endobj
+10449 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 603.452 null ] >>
+endobj
+10450 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 592.493 null ] >>
+endobj
+10451 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 581.534 null ] >>
+endobj
+10452 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 570.575 null ] >>
+endobj
+10453 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 544.672 null ] >>
+endobj
+10454 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 533.713 null ] >>
+endobj
+10455 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 522.754 null ] >>
+endobj
+10456 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 511.796 null ] >>
+endobj
+10457 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 500.837 null ] >>
+endobj
+10458 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 486.889 null ] >>
+endobj
+10459 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 475.93 null ] >>
+endobj
+10460 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 464.971 null ] >>
+endobj
+10461 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 454.012 null ] >>
+endobj
+10462 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 443.053 null ] >>
+endobj
+10463 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 432.094 null ] >>
+endobj
+10464 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 416.154 null ] >>
+endobj
+10465 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 405.195 null ] >>
+endobj
+10466 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 394.236 null ] >>
+endobj
+10467 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 383.278 null ] >>
+endobj
+10468 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 372.319 null ] >>
+endobj
+10469 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 361.36 null ] >>
+endobj
+10470 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 350.401 null ] >>
+endobj
+10471 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 334.461 null ] >>
+endobj
+10472 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 323.502 null ] >>
+endobj
+10473 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 312.543 null ] >>
+endobj
+10474 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 301.584 null ] >>
+endobj
+10475 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 290.625 null ] >>
+endobj
+10476 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 279.666 null ] >>
+endobj
+10477 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 263.726 null ] >>
+endobj
+10478 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 252.767 null ] >>
+endobj
+10479 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 241.808 null ] >>
+endobj
+10480 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 230.849 null ] >>
+endobj
+10481 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 219.89 null ] >>
+endobj
+10482 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 208.931 null ] >>
+endobj
+10483 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 197.972 null ] >>
+endobj
+10484 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 187.014 null ] >>
+endobj
+10485 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 176.055 null ] >>
+endobj
+10486 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 160.114 null ] >>
+endobj
+10487 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 149.155 null ] >>
+endobj
+10488 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 138.197 null ] >>
+endobj
+10489 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 127.238 null ] >>
+endobj
+10490 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 116.279 null ] >>
+endobj
+10491 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 105.32 null ] >>
+endobj
+10492 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 94.361 null ] >>
+endobj
+10493 0 obj
+<< /D [ 10433 0 R /XYZ 81.077 83.402 null ] >>
+endobj
+10432 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F19 184 0 R /F20 186 0 R /F68 189 0 R /F64 183 0 R /F70 305 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+10496 0 obj
+<< /Filter /FlateDecode /Length 1595 >>
+stream
+xڵZMoFW! l\iХh Vri+F6GV/!egv潷6mftD?/~I3IL ^365,el^xiDks
+fLwr׶v/O&db__V\ _-|,n?-o6U:>»}TQqyL!|nEiܝfmǐ}/oc#$!L%1EϷm6Ta]"pxNX.p }Z8U^jµkM1,BysU<r/ 5lWѶCt("hKПki< z>ٔ]:ؘ2Aą4p@.۷>*]żWfh
+j͉Q…<Ewͮ]$nZ;h
+U `AddEh\S%]U-\Qۅu7dbcU;(~sJ]ܖuQnW_ٶo1KtN^cQ ΐWg:_rz.͓Z(8I}0jz%쫽)Agd9QF qƒa,fDA%KFK2h32 p_(*5b8GIhGQڐ,8GIoɎTNrfbL8KIA[[W uQ
+,dFq&3?Aϒn-?j\uPӫ$41qƔCCr7 N[qEL<yKs;y׶}WeUG<:i˪:u{U h9U,<1S4Z1N6`4?.w'sB%NF2x<cK8քh-"OpRhO gO )%qLk76ڂk+ YX~]|*YFHAۥ @apA8IlE :β< 0X,]: 0o6W K+%0ܰBmd<8WhLlm?A^l\5u$o*O!g$(  P!*z$)z>Cy/Z$M 7tHP& h7~$rq7$htsŸv!h~jH>Vwڟ <Jzj4E#p'PB}VvraX pƐ-`ؘ@s
+~}>T& dFG8]O8p~b G}V2] Un1`9 7ŵ/7;ߕ+)`R[vMxR'X,MY7UZYwzksAӟ|7[?A/F_I?-Z{?%-[:8&%hnJ8 n>ELvW":͞+̸s}ݶiQ rF*|L @pLRb7
+endstream
+endobj
+10495 0 obj
+<< /Type /Page /Contents 10496 0 R /Resources 10494 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 10557 0 R >>
+endobj
+10497 0 obj
+<< /D [ 10495 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+10498 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+10499 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+10500 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+10501 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+10502 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+10503 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+10504 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+10505 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+10506 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+10507 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+10508 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+10509 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+10510 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 626.366 null ] >>
+endobj
+10511 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 615.407 null ] >>
+endobj
+10512 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 599.467 null ] >>
+endobj
+10513 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 588.508 null ] >>
+endobj
+10514 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 577.549 null ] >>
+endobj
+10515 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 566.59 null ] >>
+endobj
+10516 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 555.631 null ] >>
+endobj
+10517 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 544.672 null ] >>
+endobj
+10518 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 533.713 null ] >>
+endobj
+10519 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 522.754 null ] >>
+endobj
+10520 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 506.814 null ] >>
+endobj
+10521 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 495.855 null ] >>
+endobj
+10522 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 484.896 null ] >>
+endobj
+10523 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 473.938 null ] >>
+endobj
+10524 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 462.979 null ] >>
+endobj
+10525 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 452.02 null ] >>
+endobj
+10526 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 436.08 null ] >>
+endobj
+10527 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 425.121 null ] >>
+endobj
+10528 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 414.162 null ] >>
+endobj
+10529 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 403.203 null ] >>
+endobj
+10530 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 392.244 null ] >>
+endobj
+10531 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 381.285 null ] >>
+endobj
+10532 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 365.345 null ] >>
+endobj
+10533 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 354.386 null ] >>
+endobj
+10534 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 343.427 null ] >>
+endobj
+10535 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 332.468 null ] >>
+endobj
+10536 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 321.509 null ] >>
+endobj
+10537 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 310.55 null ] >>
+endobj
+10538 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 294.61 null ] >>
+endobj
+10539 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 283.651 null ] >>
+endobj
+10540 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 272.692 null ] >>
+endobj
+10541 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 261.733 null ] >>
+endobj
+10542 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 250.774 null ] >>
+endobj
+10543 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 239.816 null ] >>
+endobj
+10544 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 223.875 null ] >>
+endobj
+10545 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 212.916 null ] >>
+endobj
+10546 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 201.957 null ] >>
+endobj
+10547 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 190.999 null ] >>
+endobj
+10548 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 180.04 null ] >>
+endobj
+10549 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 164.099 null ] >>
+endobj
+10550 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 153.141 null ] >>
+endobj
+10551 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 142.182 null ] >>
+endobj
+10552 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 131.223 null ] >>
+endobj
+10553 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 120.264 null ] >>
+endobj
+10554 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 109.305 null ] >>
+endobj
+10555 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 93.365 null ] >>
+endobj
+10556 0 obj
+<< /D [ 10495 0 R /XYZ 81.077 82.406 null ] >>
+endobj
+10494 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+10560 0 obj
+<< /Filter /FlateDecode /Length 1648 >>
+stream
+xڵ]o6+-p^ݺ]̻(!-&"$ˊP%]5HzC<+IWd,9o^ξAe AtF9[.(\,"SDt*JEZO@,J,SX\{mwUj۹]k\wm܍wKx7mWzevny|s2\&&l4<{sg.o&sML)LfpPi,rŶE]?;L>px)n]l[W0U-;>śM>-ܖg`,ؓq/BH鄈 VP&Ej&sך=>qZ˲ߎWאj"'n%ǭ!TOVe}dmc
+4JeDNJrHvy%,u$UJ R:55LP$ @U hPOH6y.jf8B'@}<&`Z
+C+߉ـJ
+P|ԷrW1+k7sIMಀT\ѤL5.iW|;iFԄl, qNm}7oM{h| };X?R*%g"߮ޘm׼xwp,iLde# Ks) o/{+,D!R:$}Թm:_CcZt
+endstream
+endobj
+10559 0 obj
+<< /Type /Page /Contents 10560 0 R /Resources 10558 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 10557 0 R >>
+endobj
+10561 0 obj
+<< /D [ 10559 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+10562 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+10563 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+10564 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+10565 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 731.108 null ] >>
+endobj
+10566 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 720.149 null ] >>
+endobj
+10567 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 709.191 null ] >>
+endobj
+10568 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 698.232 null ] >>
+endobj
+10569 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 687.273 null ] >>
+endobj
+10570 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 676.314 null ] >>
+endobj
+10571 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 660.508 null ] >>
+endobj
+10572 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 649.549 null ] >>
+endobj
+10573 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 638.591 null ] >>
+endobj
+10574 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 627.632 null ] >>
+endobj
+10575 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 616.673 null ] >>
+endobj
+10576 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 605.714 null ] >>
+endobj
+10577 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 589.908 null ] >>
+endobj
+10578 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 578.949 null ] >>
+endobj
+10579 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 567.991 null ] >>
+endobj
+10580 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 557.032 null ] >>
+endobj
+10581 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 546.073 null ] >>
+endobj
+10582 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 535.114 null ] >>
+endobj
+10583 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 519.308 null ] >>
+endobj
+10584 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 508.349 null ] >>
+endobj
+10585 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 497.391 null ] >>
+endobj
+10586 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 486.432 null ] >>
+endobj
+10587 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 475.473 null ] >>
+endobj
+10588 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 464.514 null ] >>
+endobj
+10589 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 453.555 null ] >>
+endobj
+10590 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 437.749 null ] >>
+endobj
+10591 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 426.79 null ] >>
+endobj
+10592 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 415.832 null ] >>
+endobj
+10593 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 404.873 null ] >>
+endobj
+10594 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 393.914 null ] >>
+endobj
+10595 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 382.955 null ] >>
+endobj
+10596 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 371.996 null ] >>
+endobj
+10597 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 361.037 null ] >>
+endobj
+10598 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 350.078 null ] >>
+endobj
+10599 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 339.119 null ] >>
+endobj
+10600 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 323.314 null ] >>
+endobj
+10601 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 312.355 null ] >>
+endobj
+10602 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 301.396 null ] >>
+endobj
+10603 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 290.437 null ] >>
+endobj
+10604 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 279.478 null ] >>
+endobj
+10605 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 268.519 null ] >>
+endobj
+10606 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 252.714 null ] >>
+endobj
+10607 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 241.755 null ] >>
+endobj
+10608 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 230.796 null ] >>
+endobj
+10609 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 219.837 null ] >>
+endobj
+10610 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 208.878 null ] >>
+endobj
+10611 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 197.919 null ] >>
+endobj
+10612 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 186.96 null ] >>
+endobj
+10613 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 171.155 null ] >>
+endobj
+10614 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 160.196 null ] >>
+endobj
+10615 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 149.237 null ] >>
+endobj
+10616 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 138.278 null ] >>
+endobj
+10617 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 127.319 null ] >>
+endobj
+10618 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 116.36 null ] >>
+endobj
+10619 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+10620 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+10621 0 obj
+<< /D [ 10559 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+10558 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+10624 0 obj
+<< /Filter /FlateDecode /Length 1709 >>
+stream
+xڽZ]o6}ϯ0@Éԭ؊ C1 b Efb!Ht4.e6U=4vm{.Yzz$?/~\}9l:tA"fLQ*Xn=)d5|"'R<)KIƋhw\rѬiz%ݮi;uuJTޚyS:!і)) 3)]gg}43es6;3]OK&_PG}WW廲n>:8 E`U|+J g2F?צa-ǵi[{G*”
+kSiL>AL]i6vS^j[WtkYPt#tUl$rA( #1EW1 '|$ p&{<&8
+SXP,h Iwn4Ps>FQ GmSWAD _'׷sÒD8So><s[6zm7M(͈ANY#4ZeA*ƵPYSJ
+́mUm籮Ǖ{Ht"+c h+ Yq'[B)R$AdNd#VJw;hv"| HdO߰\" >.h|3Ien)Կ;BuLI=B'$xwf+/OQ"t1]Y`t3袂Vr\cB;4VwCDAK8IWݬa!9Nइ
+-c3L=U=Zuf?(ܒH)csܞMhyAXsFoQ,'b,iN#p8@% 6wĂ/7oue/S_2":W;B{v߸]?YyR9Vz)à5^ AGFF%Ue#'q9)1;֦)%:Qmheq-p*anOͰOnC"t.UWzY^{H ʪK[&,'0n}=?kB)rI8pcvIxvkM zB)MF'Cc#qFU^UH@TCK^} :
+J/vdrjS=0{``
+Z`g[: 6x0-8]@P^\"B~T%&"'6dvI)!5Ěݮ)ڿh~JVwaN>8+6ؖߟ4ߖM3K$_"BiS/R8/cРqm>?vqAt8ܹA3"
+7xH!;n {ۡvɸM0/$p);mYݔ:bz Ɣk]MCqG.,(i
+>V;pUfhcwծ7[m7zC6/AxZ!滋ϩ[z(-0_ŀ!+ Pj!RRig
+endstream
+endobj
+10623 0 obj
+<< /Type /Page /Contents 10624 0 R /Resources 10622 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 10557 0 R >>
+endobj
+10625 0 obj
+<< /D [ 10623 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+10626 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+10627 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+10628 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+10629 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+10630 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+10631 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+10632 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+10633 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+10634 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+10635 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 670.202 null ] >>
+endobj
+10636 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 659.243 null ] >>
+endobj
+10637 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 648.284 null ] >>
+endobj
+10638 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 637.325 null ] >>
+endobj
+10639 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 626.366 null ] >>
+endobj
+10640 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 615.407 null ] >>
+endobj
+10641 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 599.467 null ] >>
+endobj
+10642 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 588.508 null ] >>
+endobj
+10643 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 577.549 null ] >>
+endobj
+10644 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 566.59 null ] >>
+endobj
+10645 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 555.631 null ] >>
+endobj
+10646 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 544.672 null ] >>
+endobj
+10647 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 533.713 null ] >>
+endobj
+10648 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 522.754 null ] >>
+endobj
+10649 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 511.796 null ] >>
+endobj
+10650 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 500.837 null ] >>
+endobj
+10651 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 489.878 null ] >>
+endobj
+10652 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 478.919 null ] >>
+endobj
+10653 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 467.96 null ] >>
+endobj
+10654 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 457.001 null ] >>
+endobj
+10655 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 446.042 null ] >>
+endobj
+10656 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 435.083 null ] >>
+endobj
+10657 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 419.143 null ] >>
+endobj
+10658 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 408.184 null ] >>
+endobj
+10659 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 397.225 null ] >>
+endobj
+10660 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 386.266 null ] >>
+endobj
+10661 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 375.307 null ] >>
+endobj
+10662 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 364.349 null ] >>
+endobj
+10663 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 353.39 null ] >>
+endobj
+10664 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 337.449 null ] >>
+endobj
+10665 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 326.49 null ] >>
+endobj
+10666 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 315.532 null ] >>
+endobj
+10667 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 304.573 null ] >>
+endobj
+10668 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 293.614 null ] >>
+endobj
+10669 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 277.674 null ] >>
+endobj
+10670 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 266.715 null ] >>
+endobj
+10671 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 255.756 null ] >>
+endobj
+10672 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 244.797 null ] >>
+endobj
+10673 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 233.838 null ] >>
+endobj
+10674 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 217.898 null ] >>
+endobj
+10675 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 206.939 null ] >>
+endobj
+10676 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 195.98 null ] >>
+endobj
+10677 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 185.021 null ] >>
+endobj
+10678 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 174.062 null ] >>
+endobj
+10679 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 163.103 null ] >>
+endobj
+10680 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 152.144 null ] >>
+endobj
+10681 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 136.204 null ] >>
+endobj
+10682 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 125.245 null ] >>
+endobj
+10683 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 114.286 null ] >>
+endobj
+10684 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 103.327 null ] >>
+endobj
+10685 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 92.368 null ] >>
+endobj
+10686 0 obj
+<< /D [ 10623 0 R /XYZ 81.077 81.41 null ] >>
+endobj
+10622 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+10689 0 obj
+<< /Filter /FlateDecode /Length 1831 >>
+stream
+xڭZr6+t*N
+Wy7YS}IͳV
+)QFH$v$n,ЗdtrGqB㘹+٪1R/s`Qu3P<Y?wy;~F ڶRC*id [4(׹
+B Ev}fdd8ЀY$NDC?xee mK5z_S8ƹ
+D/$qvg:x 6FnYa~ŎÓ0|q⡯YŪ(ⵎp]4Z4Oa>;h~\bWmؔu Hc)'I81xhʱlI!<c3 JXtŝny(Q.I`֩]
+LPͶngLf˞U;;feWMSy^H"I^ }_hyv*{-)I(><4V(tazR\U?*ی=+TR 7J`tQSh ) <d>9 d|C~~ɞF
+!mpÅ6dg]S:$K+!)uTus>:2%LV
+|1xv ڕYQmkp*?ziB8pobHul&y BE2p(*$
+Lv>~:$
+endstream
+endobj
+10688 0 obj
+<< /Type /Page /Contents 10689 0 R /Resources 10687 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 10557 0 R >>
+endobj
+10690 0 obj
+<< /D [ 10688 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+10691 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+10692 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 753.109 null ] >>
+endobj
+10693 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 742.15 null ] >>
+endobj
+10694 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 731.191 null ] >>
+endobj
+10695 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 720.233 null ] >>
+endobj
+10696 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 709.274 null ] >>
+endobj
+10697 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 698.315 null ] >>
+endobj
+10698 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 682.592 null ] >>
+endobj
+10699 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 671.633 null ] >>
+endobj
+10700 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 660.674 null ] >>
+endobj
+10701 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 649.715 null ] >>
+endobj
+10702 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 638.757 null ] >>
+endobj
+10703 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 627.798 null ] >>
+endobj
+10704 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 616.839 null ] >>
+endobj
+10705 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 605.88 null ] >>
+endobj
+10706 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 590.157 null ] >>
+endobj
+10707 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 579.199 null ] >>
+endobj
+10708 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 568.24 null ] >>
+endobj
+10709 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 557.281 null ] >>
+endobj
+10710 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 546.322 null ] >>
+endobj
+10711 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 535.363 null ] >>
+endobj
+10712 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 524.404 null ] >>
+endobj
+10713 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 513.445 null ] >>
+endobj
+10714 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 497.723 null ] >>
+endobj
+10715 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 486.764 null ] >>
+endobj
+10716 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 475.805 null ] >>
+endobj
+10717 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 464.846 null ] >>
+endobj
+10718 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 453.887 null ] >>
+endobj
+10719 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 442.928 null ] >>
+endobj
+10720 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 431.969 null ] >>
+endobj
+10721 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 421.01 null ] >>
+endobj
+10722 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 410.051 null ] >>
+endobj
+10723 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 394.329 null ] >>
+endobj
+10724 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 383.37 null ] >>
+endobj
+10725 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 372.411 null ] >>
+endobj
+10726 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 361.452 null ] >>
+endobj
+10727 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 350.493 null ] >>
+endobj
+10728 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 339.534 null ] >>
+endobj
+10729 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 328.575 null ] >>
+endobj
+10730 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 317.617 null ] >>
+endobj
+10731 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 301.894 null ] >>
+endobj
+10732 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 290.935 null ] >>
+endobj
+10733 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 279.976 null ] >>
+endobj
+10734 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 269.017 null ] >>
+endobj
+10735 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 258.058 null ] >>
+endobj
+10736 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 247.1 null ] >>
+endobj
+10737 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 231.377 null ] >>
+endobj
+10738 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 220.418 null ] >>
+endobj
+10739 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 209.459 null ] >>
+endobj
+10740 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 198.5 null ] >>
+endobj
+10741 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 187.541 null ] >>
+endobj
+10742 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 176.583 null ] >>
+endobj
+10743 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 160.86 null ] >>
+endobj
+10744 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 149.901 null ] >>
+endobj
+10745 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 138.942 null ] >>
+endobj
+10746 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 127.983 null ] >>
+endobj
+10747 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 117.024 null ] >>
+endobj
+10748 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 106.066 null ] >>
+endobj
+10749 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 95.107 null ] >>
+endobj
+10750 0 obj
+<< /D [ 10688 0 R /XYZ 81.077 84.148 null ] >>
+endobj
+10687 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+10753 0 obj
+<< /Filter /FlateDecode /Length 1774 >>
+stream
+xڭZn6}WZ`D<.ڗXu0dIJb Ib]J%fK!舗{H+^]ջx|%½N~YV' [/N(\JI"iJ%%ue&Yo^
+qs?h"T1$E3G65Go[tX1saCՍ^-`nсҔ0H(:G<u櫮7ٴ]sagV{GЋCYn]ߜMm?X&lrt&/=睽-nt.k=(3A8!&z ZiF2Ri
+Wڴm-벨N7 EJER6kFˋ)IT'Ŧ
+/n4Z3_1n?Mon}wY鮮څ-GN r4
+јcgh4x>-ECm_jƏE4mG4>F?b9So.
+%@sgСs2T`('ա`stLaTj).s4^$ɔoN @;S]]e4d&$I:g}wѰÊu3Q!AK!R;N)%Hֱ,\?7ͩF%HC<.o \C"CMǙ*$@3)Q82K
+sXӥӔrP_
+w'$P8.fpH:=mp9ؕ]e5x</_zy?}靣tDMa(~aLP俺tgwѳu5=ORA*p/݋e1\d]c4\7듿Ed
+endstream
+endobj
+10752 0 obj
+<< /Type /Page /Contents 10753 0 R /Resources 10751 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 10557 0 R >>
+endobj
+10754 0 obj
+<< /D [ 10752 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+10755 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+10756 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+10757 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+10758 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+10759 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+10760 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+10761 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+10762 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 687.454 null ] >>
+endobj
+10763 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 676.495 null ] >>
+endobj
+10764 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 665.536 null ] >>
+endobj
+10765 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 654.577 null ] >>
+endobj
+10766 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 643.618 null ] >>
+endobj
+10767 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 632.659 null ] >>
+endobj
+10768 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 621.7 null ] >>
+endobj
+10769 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 610.741 null ] >>
+endobj
+10770 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 599.782 null ] >>
+endobj
+10771 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 588.823 null ] >>
+endobj
+10772 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 573.199 null ] >>
+endobj
+10773 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 562.24 null ] >>
+endobj
+10774 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 551.281 null ] >>
+endobj
+10775 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 540.322 null ] >>
+endobj
+10776 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 529.363 null ] >>
+endobj
+10777 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 518.404 null ] >>
+endobj
+10778 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 507.445 null ] >>
+endobj
+10779 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 496.486 null ] >>
+endobj
+10780 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 485.528 null ] >>
+endobj
+10781 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 474.569 null ] >>
+endobj
+10782 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 463.61 null ] >>
+endobj
+10783 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 452.651 null ] >>
+endobj
+10784 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 437.026 null ] >>
+endobj
+10785 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 426.067 null ] >>
+endobj
+10786 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 415.108 null ] >>
+endobj
+10787 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 404.149 null ] >>
+endobj
+10788 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 393.191 null ] >>
+endobj
+10789 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 382.232 null ] >>
+endobj
+10790 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 371.273 null ] >>
+endobj
+10791 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 355.648 null ] >>
+endobj
+10792 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 344.689 null ] >>
+endobj
+10793 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 333.73 null ] >>
+endobj
+10794 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 322.771 null ] >>
+endobj
+10795 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 311.812 null ] >>
+endobj
+10796 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 296.188 null ] >>
+endobj
+10797 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 285.229 null ] >>
+endobj
+10798 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 274.27 null ] >>
+endobj
+10799 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 263.311 null ] >>
+endobj
+10800 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 252.352 null ] >>
+endobj
+10801 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 241.393 null ] >>
+endobj
+10802 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 230.434 null ] >>
+endobj
+10803 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 219.475 null ] >>
+endobj
+10804 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 203.851 null ] >>
+endobj
+10805 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 192.892 null ] >>
+endobj
+10806 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 181.933 null ] >>
+endobj
+10807 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 170.974 null ] >>
+endobj
+10808 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 160.015 null ] >>
+endobj
+10809 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 149.056 null ] >>
+endobj
+10810 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 133.431 null ] >>
+endobj
+10811 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 122.473 null ] >>
+endobj
+10812 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+10813 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+10814 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+10815 0 obj
+<< /D [ 10752 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+10751 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+10818 0 obj
+<< /Filter /FlateDecode /Length 1809 >>
+stream
+xڭZ[o6~ϯ0@*0tuC XCD,y˂򷏔lJ̭9Z9>9߹xr6{exp<;MO8R1at2[{Iȉ֓^(_=ITx& FEAnm.g_[=omL"!#a>(^}%xy]~y]97:?pʌ#.垲0s ѷ)C~m)F[dUV,Mu HiQ!C5ˤ6fmLbRO3+LsͦzkSMW<Zuqy4j֫"@1.^&Z/􍙶75Ya ԣm=EzD3@-!]Ue嘭&T(#@EaчCQ
+!t%Wn~<5 K`H;TlzM͓gߤGઍ [5J/D60D;&gng=)vn^A^4#8|Bs[m_2C4])Gs 3ا۵ʸ#=0d 6 E/X '/t+LJx1O0&i}Y_:xAg#SXo&[a^fvInZP-|.#
+G"0'nA?B8@1!LDӊ6-ڕ6X<R%>8`!@=ֺ/#wT)d̰$@rT״?ɾGF_7ʽLj>`$@BWU 2_bLDq%=R `# O"IUE7+T`D>6ؤLd0]ńwdk< N6
++Tdf1YYa { 27HaFvꩥD\xL<qeeo]+z?{sz6 O[K/l[llg {2#␋>JbKɢRBlȕlLl4D"O0DcoNMly'ޥ
+l~t;
+a+L;69DryIxT ErX ЏaW͡s{iMiu+ϛVop$q.Ƹ.a!=#X pZ,/3LR#E}a#wI U%|k75Q{zl:S!lc k7Rg =*DMlMyU&1R{Yw'
+endstream
+endobj
+10817 0 obj
+<< /Type /Page /Contents 10818 0 R /Resources 10816 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 10557 0 R >>
+endobj
+10819 0 obj
+<< /D [ 10817 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+10820 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+10821 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 753.207 null ] >>
+endobj
+10822 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 742.248 null ] >>
+endobj
+10823 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 731.289 null ] >>
+endobj
+10824 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 720.33 null ] >>
+endobj
+10825 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 709.371 null ] >>
+endobj
+10826 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 698.412 null ] >>
+endobj
+10827 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 687.454 null ] >>
+endobj
+10828 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 671.829 null ] >>
+endobj
+10829 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 660.87 null ] >>
+endobj
+10830 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 649.911 null ] >>
+endobj
+10831 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 638.952 null ] >>
+endobj
+10832 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 627.993 null ] >>
+endobj
+10833 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 617.034 null ] >>
+endobj
+10834 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 606.075 null ] >>
+endobj
+10835 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 595.117 null ] >>
+endobj
+10836 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 579.492 null ] >>
+endobj
+10837 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 568.533 null ] >>
+endobj
+10838 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 557.574 null ] >>
+endobj
+10839 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 546.615 null ] >>
+endobj
+10840 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 535.656 null ] >>
+endobj
+10841 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 524.697 null ] >>
+endobj
+10842 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 513.738 null ] >>
+endobj
+10843 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 502.78 null ] >>
+endobj
+10844 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 491.821 null ] >>
+endobj
+10845 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 480.862 null ] >>
+endobj
+10846 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 469.903 null ] >>
+endobj
+10847 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 458.944 null ] >>
+endobj
+10848 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 447.985 null ] >>
+endobj
+10849 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 432.36 null ] >>
+endobj
+10850 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 421.401 null ] >>
+endobj
+10851 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 410.443 null ] >>
+endobj
+10852 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 399.484 null ] >>
+endobj
+10853 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 388.525 null ] >>
+endobj
+10854 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 377.566 null ] >>
+endobj
+10855 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 366.607 null ] >>
+endobj
+10856 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 355.648 null ] >>
+endobj
+10857 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 340.023 null ] >>
+endobj
+10858 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 329.064 null ] >>
+endobj
+10859 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 318.106 null ] >>
+endobj
+10860 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 307.147 null ] >>
+endobj
+10861 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 296.188 null ] >>
+endobj
+10862 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 285.229 null ] >>
+endobj
+10863 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 269.604 null ] >>
+endobj
+10864 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 258.645 null ] >>
+endobj
+10865 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 247.686 null ] >>
+endobj
+10866 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 236.727 null ] >>
+endobj
+10867 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 225.768 null ] >>
+endobj
+10868 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 214.81 null ] >>
+endobj
+10869 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 203.851 null ] >>
+endobj
+10870 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 188.226 null ] >>
+endobj
+10871 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 177.267 null ] >>
+endobj
+10872 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 166.308 null ] >>
+endobj
+10873 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 155.349 null ] >>
+endobj
+10874 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 144.39 null ] >>
+endobj
+10875 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 133.431 null ] >>
+endobj
+10876 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 122.473 null ] >>
+endobj
+10877 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 111.514 null ] >>
+endobj
+10878 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 100.555 null ] >>
+endobj
+10879 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 89.596 null ] >>
+endobj
+10880 0 obj
+<< /D [ 10817 0 R /XYZ 81.077 78.637 null ] >>
+endobj
+10816 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+10883 0 obj
+<< /Filter /FlateDecode /Length 1628 >>
+stream
+xڽY]o6}ϯ0P`n)~ku~APl9"$'RJh1-^C /yᡓ"Y>In_'/V'?$i ]hI$U %)I$]ş__0_hbLL)%)1:KcsA( cN(14)<)5͓WWEYT.s]O9W)#zlaluchl)6W)QFR4Enwn7y2(Y׷ގ ߏukGLXOѧ:|<*&EqXr$Wd 'P"ul`C<kl K I
+$jGht%V˅_1wQ쏡R0[W)S"6=4EK)d
+ D^ +t[ongtK"L*Iq̧hOEeK t#D$"c<L3QD`2E@FfRrfD5ʻV+~?·mϠ`a&MhMIJUڦwl\-K#4EiY&h}?cbmAM&(8Svw-%]d489C^p
+ά%/_;*ȡt
+gSD$~r>Pe]6CI#yK\"HrH2
+"4Z#6$чF"l5o}inq!R8hRA" .pQ BG긐ӂ+?B>Y#xx8){D
+.ؘ-Eh0 Ҹ$ Һ .5De[iUlX˗75,>Af&]4Eh,]:kvuf27Ms)8ןI6N⭟Vboi\ңõ[|"twYmYl>c7E%8oTc7Y8#%' o>,Dh\
+~3/u>BޝBrהDugX
++2o|a^(<!^ajuv
+endstream
+endobj
+10882 0 obj
+<< /Type /Page /Contents 10883 0 R /Resources 10881 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 10557 0 R >>
+endobj
+10884 0 obj
+<< /D [ 10882 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+10885 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+10886 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 752.891 null ] >>
+endobj
+10887 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 741.933 null ] >>
+endobj
+10888 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 730.974 null ] >>
+endobj
+10889 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 720.015 null ] >>
+endobj
+10890 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 709.056 null ] >>
+endobj
+10891 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 698.097 null ] >>
+endobj
+10892 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 687.138 null ] >>
+endobj
+10893 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 671.198 null ] >>
+endobj
+10894 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 660.239 null ] >>
+endobj
+10895 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 649.28 null ] >>
+endobj
+10896 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 638.321 null ] >>
+endobj
+10897 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 627.362 null ] >>
+endobj
+10898 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 616.403 null ] >>
+endobj
+10899 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 605.444 null ] >>
+endobj
+10900 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 589.504 null ] >>
+endobj
+10901 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 578.545 null ] >>
+endobj
+10902 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 567.586 null ] >>
+endobj
+10903 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 556.627 null ] >>
+endobj
+10904 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 545.669 null ] >>
+endobj
+10905 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 534.71 null ] >>
+endobj
+10906 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 523.751 null ] >>
+endobj
+10907 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 512.792 null ] >>
+endobj
+10908 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 496.852 null ] >>
+endobj
+10909 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 485.893 null ] >>
+endobj
+10910 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 474.934 null ] >>
+endobj
+10911 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 463.975 null ] >>
+endobj
+10912 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 453.016 null ] >>
+endobj
+10913 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 442.057 null ] >>
+endobj
+10914 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 431.098 null ] >>
+endobj
+10915 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 420.139 null ] >>
+endobj
+10916 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 404.199 null ] >>
+endobj
+10917 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 393.24 null ] >>
+endobj
+10918 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 382.281 null ] >>
+endobj
+10919 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 371.322 null ] >>
+endobj
+10920 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 360.363 null ] >>
+endobj
+10921 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 349.405 null ] >>
+endobj
+10922 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 338.446 null ] >>
+endobj
+10923 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 322.505 null ] >>
+endobj
+10924 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 311.547 null ] >>
+endobj
+10925 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 300.588 null ] >>
+endobj
+10926 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 289.629 null ] >>
+endobj
+10927 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 278.67 null ] >>
+endobj
+10928 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 267.711 null ] >>
+endobj
+10929 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 256.752 null ] >>
+endobj
+10930 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 245.793 null ] >>
+endobj
+10931 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 234.834 null ] >>
+endobj
+10932 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 223.875 null ] >>
+endobj
+10933 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 207.935 null ] >>
+endobj
+10934 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 196.976 null ] >>
+endobj
+10935 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 186.017 null ] >>
+endobj
+10936 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 175.058 null ] >>
+endobj
+10937 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 164.099 null ] >>
+endobj
+10938 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 153.141 null ] >>
+endobj
+10939 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 142.182 null ] >>
+endobj
+10940 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 126.241 null ] >>
+endobj
+10941 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 115.283 null ] >>
+endobj
+10942 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 104.324 null ] >>
+endobj
+10943 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 93.365 null ] >>
+endobj
+10944 0 obj
+<< /D [ 10882 0 R /XYZ 81.077 82.406 null ] >>
+endobj
+10881 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+10947 0 obj
+<< /Filter /FlateDecode /Length 1593 >>
+stream
+xڽZMo8WvѰ⧤'.Yf!Xr4(>QE{Hk GNZ$gHd ~8{:{^e ArX]QxSLEE(I]^Yw,
+?t9v;\ ,=԰塰<OqO<c
+UHap
+x$~~ .)p?n_ȉ8EЏ*(c/&/8sпX=nXFAӇ/73}~ׯbcJѢ!).(#z75)y'߼i ADhqC~!pq㐿S@g["`t78հfi?.p^:24$N7cLP]҄dtn*;UR1I5E2\0zDqO5gż_J?B:z?#:ptY
+ĥ=tU XԮ 78hTAțZw)BpGW*dqqE]C`{yKTp=Z(xychAӌ9F"o3}*ML#BJMC"D>Q! MpQ!?|Ńս̒?X$D@o
+g z̋SI~ZVpVWFQH"~$n"B4zsEN0:b(M{^5jgL9mTU$c q73.HY׵ګokûBZALك/XK
+endstream
+endobj
+10946 0 obj
+<< /Type /Page /Contents 10947 0 R /Resources 10945 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 10557 0 R >>
+endobj
+10948 0 obj
+<< /D [ 10946 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+10949 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+10950 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+10951 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+10952 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 730.974 null ] >>
+endobj
+10953 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 720.015 null ] >>
+endobj
+10954 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 709.056 null ] >>
+endobj
+10955 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 698.097 null ] >>
+endobj
+10956 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 687.138 null ] >>
+endobj
+10957 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 676.179 null ] >>
+endobj
+10958 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 665.22 null ] >>
+endobj
+10959 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 654.261 null ] >>
+endobj
+10960 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 643.302 null ] >>
+endobj
+10961 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 632.344 null ] >>
+endobj
+10962 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 616.403 null ] >>
+endobj
+10963 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 605.444 null ] >>
+endobj
+10964 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 594.486 null ] >>
+endobj
+10965 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 583.527 null ] >>
+endobj
+10966 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 572.568 null ] >>
+endobj
+10967 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 561.609 null ] >>
+endobj
+10968 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 550.65 null ] >>
+endobj
+10969 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 539.691 null ] >>
+endobj
+10970 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 523.751 null ] >>
+endobj
+10971 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 512.792 null ] >>
+endobj
+10972 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 501.833 null ] >>
+endobj
+10973 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 490.874 null ] >>
+endobj
+10974 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 479.915 null ] >>
+endobj
+10975 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 468.956 null ] >>
+endobj
+10976 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 457.997 null ] >>
+endobj
+10977 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 442.057 null ] >>
+endobj
+10978 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 431.098 null ] >>
+endobj
+10979 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 420.139 null ] >>
+endobj
+10980 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 409.18 null ] >>
+endobj
+10981 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 398.221 null ] >>
+endobj
+10982 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 387.263 null ] >>
+endobj
+10983 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 376.304 null ] >>
+endobj
+10984 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 365.345 null ] >>
+endobj
+10985 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 349.405 null ] >>
+endobj
+10986 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 338.446 null ] >>
+endobj
+10987 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 327.487 null ] >>
+endobj
+10988 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 316.528 null ] >>
+endobj
+10989 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 305.569 null ] >>
+endobj
+10990 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 294.61 null ] >>
+endobj
+10991 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 278.67 null ] >>
+endobj
+10992 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 267.711 null ] >>
+endobj
+10993 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 256.752 null ] >>
+endobj
+10994 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 245.793 null ] >>
+endobj
+10995 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 234.834 null ] >>
+endobj
+10996 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 223.875 null ] >>
+endobj
+10997 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 212.916 null ] >>
+endobj
+10998 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 201.957 null ] >>
+endobj
+10999 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 186.017 null ] >>
+endobj
+11000 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 175.058 null ] >>
+endobj
+11001 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 164.099 null ] >>
+endobj
+11002 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 153.141 null ] >>
+endobj
+11003 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 142.182 null ] >>
+endobj
+11004 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 131.223 null ] >>
+endobj
+11005 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 120.264 null ] >>
+endobj
+11006 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 104.324 null ] >>
+endobj
+11007 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 93.365 null ] >>
+endobj
+11008 0 obj
+<< /D [ 10946 0 R /XYZ 81.077 82.406 null ] >>
+endobj
+10945 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+11011 0 obj
+<< /Filter /FlateDecode /Length 1783 >>
+stream
+xڭZ]o6}ϯbD ]=d@mm&"$˂R)I8ut{Ϲn:'|{r6?\8Qfl6<P:3"$lzY
+QK\cZ]u@j}HE?p~g ~/<%=pԫWG@Ե[jU٬M.y&Ȃ
+20?@rTݗAbp2L֛uv/lmz
+l#rN
+G'B칽n𮬷KFT՟3P0~O"#2 &qT@qx+lGP.kq{f Ec
+ \24F+n69}P*lɒeV48CfSߪɡ}ӣ-8
+'`z9CÈeٕ5xNO=U8ѵ̹ k瘞O7o 8k0k=xTV.Wc4XdU<BLxŁ4q"B{{(HȡGUzilOO݁ݭXt+Ԝg*%\ "Y#ΛDht?fyF0];89WֵD㘅9.Yc4@2N6rDsz g)Bby=~b-Ͷ_<3]Q+35%w_"D#q%5F˙)0 tX[a/?rv3&KƉ]$%RUKQܽSFw!+R:Ʊwͪaqr3
+\AqMn|3zKA:ChEg\q> B۪}}tglY2z_,o
+0qA(.Dh|§P6 i+]]mdgiJh>0Dh4PKRaПIRԓ,C>\%{r]vc\w]G*oV;Hw;/`85"
+p
+/<rv n g (x, `tQF"PC91fwsc쮟3=m۳HJ‹ X g"4҂$@؝I\*/6}I@o4񕮁`3o.K]Y!f`3?BR3 ףɔ|S8?K{
+endstream
+endobj
+11010 0 obj
+<< /Type /Page /Contents 11011 0 R /Resources 11009 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 10557 0 R >>
+endobj
+11012 0 obj
+<< /D [ 11010 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+11013 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+11014 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+11015 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+11016 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+11017 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+11018 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 709.056 null ] >>
+endobj
+11019 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 698.097 null ] >>
+endobj
+11020 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 687.138 null ] >>
+endobj
+11021 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 676.179 null ] >>
+endobj
+11022 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 665.22 null ] >>
+endobj
+11023 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 654.261 null ] >>
+endobj
+11024 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 643.302 null ] >>
+endobj
+11025 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 627.362 null ] >>
+endobj
+11026 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 616.403 null ] >>
+endobj
+11027 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 605.444 null ] >>
+endobj
+11028 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 594.486 null ] >>
+endobj
+11029 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 583.527 null ] >>
+endobj
+11030 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 572.568 null ] >>
+endobj
+11031 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 561.609 null ] >>
+endobj
+11032 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 550.65 null ] >>
+endobj
+11033 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 539.691 null ] >>
+endobj
+11034 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 523.751 null ] >>
+endobj
+11035 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 512.792 null ] >>
+endobj
+11036 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 501.833 null ] >>
+endobj
+11037 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 490.874 null ] >>
+endobj
+11038 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 479.915 null ] >>
+endobj
+11039 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 468.956 null ] >>
+endobj
+11040 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 453.016 null ] >>
+endobj
+11041 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 442.057 null ] >>
+endobj
+11042 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 431.098 null ] >>
+endobj
+11043 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 420.139 null ] >>
+endobj
+11044 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 409.18 null ] >>
+endobj
+11045 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 398.221 null ] >>
+endobj
+11046 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 387.263 null ] >>
+endobj
+11047 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 371.322 null ] >>
+endobj
+11048 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 360.363 null ] >>
+endobj
+11049 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 349.405 null ] >>
+endobj
+11050 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 338.446 null ] >>
+endobj
+11051 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 327.487 null ] >>
+endobj
+11052 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 316.528 null ] >>
+endobj
+11053 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 300.588 null ] >>
+endobj
+11054 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 289.629 null ] >>
+endobj
+11055 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 278.67 null ] >>
+endobj
+11056 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 267.711 null ] >>
+endobj
+11057 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 256.752 null ] >>
+endobj
+11058 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 245.793 null ] >>
+endobj
+11059 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 234.834 null ] >>
+endobj
+11060 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 218.894 null ] >>
+endobj
+11061 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 207.935 null ] >>
+endobj
+11062 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 196.976 null ] >>
+endobj
+11063 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 186.017 null ] >>
+endobj
+11064 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 175.058 null ] >>
+endobj
+11065 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 164.099 null ] >>
+endobj
+11066 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 153.141 null ] >>
+endobj
+11067 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 137.2 null ] >>
+endobj
+11068 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 126.241 null ] >>
+endobj
+11069 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 115.283 null ] >>
+endobj
+11070 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 104.324 null ] >>
+endobj
+11071 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 93.365 null ] >>
+endobj
+11072 0 obj
+<< /D [ 11010 0 R /XYZ 81.077 82.406 null ] >>
+endobj
+11009 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+11075 0 obj
+<< /Filter /FlateDecode /Length 1478 >>
+stream
+xڽZMoFW^#E E" r-ߞ%er#,F;73oiYջ3r
+.gSf%j{}FÇȊEJ+
+D'k}],VRRL[=f49zwCví{쇢s"I E}/ʡv o4]n
+R9l[0ԈȀѻ{[@j`a)p9p_ꮮ?. B0"#2GnpE,$Ehvo}Qo3gؚOCl|ČygBr塿lÛi^m$Am>4> m7\my{faprpfhp*.A('z6%0HQ1C:>ȣ||}w>TpDw\=>[X2}{Kߎ~'&(Q[N[3HfZiF=P4mvp' b,pbP;EJZ
+FeU]ҌXHs4*c+jd%qj=\7z(î+urxcҀQFOxutڻٹ]p䮙d-KhpgwP Η_: ɼ7mXD$C&ܸM=$X-_I <H9]Z 8Ч_a m@l C/,bJ\#ADi%FR'P
+#q@>yZR#џ$Ο2 ӂX
+R8C5Dp, mpCxa 8Okqk1G/
+On߷w d8:*u!n3&O=<rB'ׇpqѼ Az+\3N}u BD1vJuQ202u c
+ؿ^x4N5+}wr*8i'vO 8w J6tq?CnCĹw!3ɦ bV =ԧ]o<;NCG)ˤ.|xο5jx<,p 4.xY#h;4C^x.\ZzA-t2q^0,=w0ğOxss  2OS68'<)\\
+cDJ!Ck*)iyzF3tٹ»Mz!
+i uZt`8top'<s :nq~2 Had
+endstream
+endobj
+11074 0 obj
+<< /Type /Page /Contents 11075 0 R /Resources 11073 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 10557 0 R >>
+endobj
+11076 0 obj
+<< /D [ 11074 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+11077 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+11078 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+11079 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+11080 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+11081 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+11082 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+11083 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+11084 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+11085 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+11086 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 665.22 null ] >>
+endobj
+11087 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 654.261 null ] >>
+endobj
+11088 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 643.302 null ] >>
+endobj
+11089 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 632.344 null ] >>
+endobj
+11090 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 621.385 null ] >>
+endobj
+11091 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 610.426 null ] >>
+endobj
+11092 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 599.467 null ] >>
+endobj
+11093 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 588.508 null ] >>
+endobj
+11094 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 577.549 null ] >>
+endobj
+11095 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 566.59 null ] >>
+endobj
+11096 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 555.631 null ] >>
+endobj
+11097 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 544.672 null ] >>
+endobj
+11098 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 528.732 null ] >>
+endobj
+11099 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 517.773 null ] >>
+endobj
+11100 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 506.814 null ] >>
+endobj
+11101 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 495.855 null ] >>
+endobj
+11102 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 484.896 null ] >>
+endobj
+11103 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 473.938 null ] >>
+endobj
+11104 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 462.979 null ] >>
+endobj
+11105 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 452.02 null ] >>
+endobj
+11106 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 441.061 null ] >>
+endobj
+11107 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 430.102 null ] >>
+endobj
+11108 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 419.143 null ] >>
+endobj
+11109 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 408.184 null ] >>
+endobj
+11110 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 397.225 null ] >>
+endobj
+11111 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 381.285 null ] >>
+endobj
+11112 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 370.326 null ] >>
+endobj
+11113 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 359.367 null ] >>
+endobj
+11114 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 348.408 null ] >>
+endobj
+11115 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 337.449 null ] >>
+endobj
+11116 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 326.49 null ] >>
+endobj
+11117 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 315.532 null ] >>
+endobj
+11118 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 304.573 null ] >>
+endobj
+11119 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 293.614 null ] >>
+endobj
+11120 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 282.655 null ] >>
+endobj
+11121 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 271.696 null ] >>
+endobj
+11122 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 260.737 null ] >>
+endobj
+11123 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 249.778 null ] >>
+endobj
+11124 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 238.819 null ] >>
+endobj
+11125 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 227.86 null ] >>
+endobj
+11126 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 211.92 null ] >>
+endobj
+11127 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 200.961 null ] >>
+endobj
+11128 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 190.002 null ] >>
+endobj
+11129 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 179.043 null ] >>
+endobj
+11130 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 168.085 null ] >>
+endobj
+11131 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 157.126 null ] >>
+endobj
+11132 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 146.167 null ] >>
+endobj
+11133 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 135.208 null ] >>
+endobj
+11134 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 124.249 null ] >>
+endobj
+11135 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 113.29 null ] >>
+endobj
+11136 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 102.331 null ] >>
+endobj
+11137 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 91.372 null ] >>
+endobj
+11138 0 obj
+<< /D [ 11074 0 R /XYZ 81.077 80.413 null ] >>
+endobj
+11073 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+11141 0 obj
+<< /Filter /FlateDecode /Length 1428 >>
+stream
+xڽ[oF+(7{nmMF}j
+4H*r`CQgRĀE|3xr zef|oo~^ݼպD3Fx"gy[{/^@Ǽay?߼YuN~i^<Nusp۴oˇ_ g+|LIɵgBkmڒ3Pj4,l#N_q4 Wpt]ߦC w9șjhXTVհ CyW7mرiA-&IkFcD(bSi@a0Tx~I=Rwu)6VwSsiO ,ue E~_lB_n݅~,^OU"V2.v(8|p<݅<}hWۦj':Lr4,OC>w~ 5H CBzf)h1͌AsHV}yh^xά3
+͑#yZxy>3<7@q,9X8̩C&7gI]=nHOߧ, 5:0RXΒ19|fӑ<li\.8.ݰi`0Og69={yu$?Fn邦snJ!Hn$B..s8QqIi"5!>tfB-,SnuhC0-g747L<kfV>[Y$Kf|"ډɟ#`AmLEKXMmgrXNmgBw$M:GWBx$soczE_I |BVBs:e_I̱ pz,MCWl;B};W嶀sl`IsH:qI/@٣ ,i#h<{u|!=Hf(8
+#/6Ǫhϡ 8(*!G\F& 9[HN> ̠H9R8^ 3Y[-3Gr).deTE3HY(*F'fwdI Q0U4#j| oFu}c=LSЗ>|$Ơ/v(*Zڎtأ98M:c"EH#٣hi;-' rj5-^Gt*m>;! !GV>cZPi1֙g&P4C7l6Msi$NM6˝\2Li^SF,a~DVӼ7Wp\pJd܆eSoj%Q46\ P54+爗9g]CR[>PPBaTPzT]ܰeu/|A7
+endstream
+endobj
+11140 0 obj
+<< /Type /Page /Contents 11141 0 R /Resources 11139 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 11206 0 R >>
+endobj
+11142 0 obj
+<< /D [ 11140 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+11143 0 obj
+<< /D [ 11140 0 R /XYZ 81.077 768.832 null ] >>
+endobj
+11144 0 obj
+<< /D [ 11140 0 R /XYZ 81.077 757.873 null ] >>
+endobj
+11145 0 obj
+<< /D [ 11140 0 R /XYZ 81.077 746.914 null ] >>
+endobj
+11146 0 obj
+<< /D [ 11140 0 R /XYZ 81.077 735.955 null ] >>
+endobj
+11147 0 obj
+<< /D [ 11140 0 R /XYZ 81.077 724.996 null ] >>
+endobj
+11148 0 obj
+<< /D [ 11140 0 R /XYZ 81.077 714.037 null ] >>
+endobj
+11149 0 obj
+<< /D [ 11140 0 R /XYZ 81.077 703.078 null ] >>
+endobj
+11150 0 obj
+<< /D [ 11140 0 R /XYZ 81.077 692.119 null ] >>
+endobj
+11151 0 obj
+<< /D [ 11140 0 R /XYZ 81.077 681.16 null ] >>
+endobj
+11152 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 670.202 null ] >>
+endobj
+11153 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 659.243 null ] >>
+endobj
+11154 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 648.284 null ] >>
+endobj
+11155 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 637.325 null ] >>
+endobj
+11156 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 626.366 null ] >>
+endobj
+11157 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 615.407 null ] >>
+endobj
+11158 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 604.448 null ] >>
+endobj
+11159 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 593.489 null ] >>
+endobj
+11160 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 582.53 null ] >>
+endobj
+11161 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 571.571 null ] >>
+endobj
+11162 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 560.613 null ] >>
+endobj
+11163 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 549.654 null ] >>
+endobj
+11164 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 535.114 null ] >>
+endobj
+11165 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 524.155 null ] >>
+endobj
+11166 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 513.196 null ] >>
+endobj
+11167 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 502.237 null ] >>
+endobj
+11168 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 491.278 null ] >>
+endobj
+11169 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 480.319 null ] >>
+endobj
+11170 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 469.36 null ] >>
+endobj
+11171 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 458.401 null ] >>
+endobj
+11172 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 447.443 null ] >>
+endobj
+11173 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 436.484 null ] >>
+endobj
+11174 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 425.525 null ] >>
+endobj
+11175 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 414.566 null ] >>
+endobj
+11176 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 403.607 null ] >>
+endobj
+11177 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 392.648 null ] >>
+endobj
+11178 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 381.689 null ] >>
+endobj
+11179 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 370.73 null ] >>
+endobj
+11180 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 359.771 null ] >>
+endobj
+11181 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 348.812 null ] >>
+endobj
+11182 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 337.854 null ] >>
+endobj
+11183 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 326.895 null ] >>
+endobj
+11184 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 312.355 null ] >>
+endobj
+11185 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 301.396 null ] >>
+endobj
+11186 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 290.437 null ] >>
+endobj
+11187 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 279.478 null ] >>
+endobj
+11188 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 268.519 null ] >>
+endobj
+11189 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 257.56 null ] >>
+endobj
+11190 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 246.601 null ] >>
+endobj
+11191 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 235.643 null ] >>
+endobj
+11192 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 224.684 null ] >>
+endobj
+11193 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 213.725 null ] >>
+endobj
+11194 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 202.766 null ] >>
+endobj
+11195 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 191.807 null ] >>
+endobj
+11196 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 180.848 null ] >>
+endobj
+11197 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 169.889 null ] >>
+endobj
+11198 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 158.93 null ] >>
+endobj
+11199 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 147.971 null ] >>
+endobj
+11200 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 137.012 null ] >>
+endobj
+11201 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 126.053 null ] >>
+endobj
+11202 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 111.514 null ] >>
+endobj
+11203 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 100.555 null ] >>
+endobj
+11204 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 89.596 null ] >>
+endobj
+11205 0 obj
+<< /D [ 11140 0 R /XYZ 82.402 78.637 null ] >>
+endobj
+11139 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+11209 0 obj
+<< /Filter /FlateDecode /Length 1637 >>
+stream
+xڽnF~
+l/Y
+oKg)/= r޻ +0Hpu]ry; M5dXR 0U)GnrKR:0R؞#;C Fډ|.]jbUuP,: e`!:k2P<*O~2{0ى婝ޑVqN䋶k\98('Ůhw ZCq ՋM;4tea@>q"?ٸed 8'򣡺n]A@>cq"?Nj2M XqNK:>w]Yn>DSГZz@!9fYL 1ʼn;8'lLh &|=M܌%$BgpM\J ap؍G |9%
+9
+Z
+<qbynt̄kYCs"4θypPD~z~KlJ6D L3F}e+mwYpn.>Ռ|K T=iMSAʷ+ȅ_{ѻ]>dw_> /7We)%7~ġ~jU$|V'ݓ}֜zrYG>#e*D{< >|:Hm`T D;#B'8%xuuoo|DiC=i}O4GK~(ѥA}N( <ȭSŀ'JpqB"J OFC?L4kk@=y8U$n ߗVl8ŢC$|r-_\-sOZP[A-Q\pE). gR\O+xQ(Rō%o2K*5d,_Xc
+endstream
+endobj
+11208 0 obj
+<< /Type /Page /Contents 11209 0 R /Resources 11207 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 11206 0 R >>
+endobj
+11210 0 obj
+<< /D [ 11208 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+11211 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 768.832 null ] >>
+endobj
+11212 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 757.873 null ] >>
+endobj
+11213 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 746.914 null ] >>
+endobj
+11214 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 735.955 null ] >>
+endobj
+11215 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 724.996 null ] >>
+endobj
+11216 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 714.037 null ] >>
+endobj
+11217 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 703.078 null ] >>
+endobj
+11218 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 692.119 null ] >>
+endobj
+11219 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 681.16 null ] >>
+endobj
+11220 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 670.202 null ] >>
+endobj
+11221 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 659.243 null ] >>
+endobj
+11222 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 648.284 null ] >>
+endobj
+11223 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 637.325 null ] >>
+endobj
+11224 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 626.366 null ] >>
+endobj
+11225 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 615.407 null ] >>
+endobj
+11226 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 604.448 null ] >>
+endobj
+11227 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 593.489 null ] >>
+endobj
+11228 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 582.53 null ] >>
+endobj
+11229 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 571.571 null ] >>
+endobj
+11230 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 560.613 null ] >>
+endobj
+11231 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 549.654 null ] >>
+endobj
+11232 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 538.695 null ] >>
+endobj
+11233 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 527.736 null ] >>
+endobj
+11234 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 516.777 null ] >>
+endobj
+11235 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 505.818 null ] >>
+endobj
+11236 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 494.859 null ] >>
+endobj
+11237 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 483.9 null ] >>
+endobj
+11238 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 472.941 null ] >>
+endobj
+11239 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 461.982 null ] >>
+endobj
+11240 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 451.023 null ] >>
+endobj
+11241 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 440.065 null ] >>
+endobj
+11242 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 429.106 null ] >>
+endobj
+11243 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 418.147 null ] >>
+endobj
+11244 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 407.188 null ] >>
+endobj
+11245 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 396.229 null ] >>
+endobj
+11246 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 385.27 null ] >>
+endobj
+11247 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 374.311 null ] >>
+endobj
+11248 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 363.352 null ] >>
+endobj
+11249 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 352.393 null ] >>
+endobj
+11250 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 341.434 null ] >>
+endobj
+11251 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 330.476 null ] >>
+endobj
+11252 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 319.517 null ] >>
+endobj
+11253 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 308.558 null ] >>
+endobj
+11254 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 297.599 null ] >>
+endobj
+11255 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 286.64 null ] >>
+endobj
+11256 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 275.681 null ] >>
+endobj
+11257 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 264.722 null ] >>
+endobj
+11258 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 253.763 null ] >>
+endobj
+11259 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 242.804 null ] >>
+endobj
+11260 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 202.954 null ] >>
+endobj
+11261 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 191.995 null ] >>
+endobj
+11262 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 181.036 null ] >>
+endobj
+11263 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 170.077 null ] >>
+endobj
+11264 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 159.118 null ] >>
+endobj
+11265 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 148.159 null ] >>
+endobj
+11266 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 137.2 null ] >>
+endobj
+11267 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 126.241 null ] >>
+endobj
+11268 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 115.283 null ] >>
+endobj
+11269 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 104.324 null ] >>
+endobj
+11270 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 93.365 null ] >>
+endobj
+11271 0 obj
+<< /D [ 11208 0 R /XYZ 82.402 82.406 null ] >>
+endobj
+11207 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+11274 0 obj
+<< /Filter /FlateDecode /Length 1630 >>
+stream
+xڭ_o6)'էnZ`=C t,T IngߕddL_b"OxuDw pAϯD#{m Xn/|.
+0b_}(cO\Xk-lf#X~3W07}(_ʺCv٪fUL0))3S.YXPC1C8WQseŶwm 8|ml[]
+Gjɟi?V!s'?U<F87:66)<Ĺ ६r(F 8Grpr]v_n] c|Hnڵ <'Jyq~#uE2зEVîI,Q7ݦ< QCo$?ΥQ&x #\ml:U0(g;my{#8WMJ bǝ7DR+=|WuvX!'pϩ&%98F z& 07EsBipp-2`U4j=$8=}hgwj$=m,iE/ġ5T>!I% ggGH^7ԝ%R
+•đ5Ǫ*٦IWmH~N ?
+gDO4l$o]SQ" qdngE]ߺ~E:8F#a-*
+GH>/rmXbu0THp˿Nқ,_ W_:?ʵmӎC{w]Wܹ̣
+::σf;~
+h{^KcCkGѷÍW Щė]ܒjB܇qxȊJM8=`<tVGX `u㋖i]r|НZ_eUz (ѐ8:0*Uq']YR7/232S_rI̳%n1($/O#o_H2Lwn-ݷu]_g/_1oh<A3wBL@ݛeH W[?~aFL$_Bt9n9r(x;VqLX,g
+NkU#
+32xrZH*:7T@ip 1OfCO{x2h < ˡg<B-3ȇK<]i4b g6g8\
+endstream
+endobj
+11273 0 obj
+<< /Type /Page /Contents 11274 0 R /Resources 11272 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 11206 0 R >>
+endobj
+11275 0 obj
+<< /D [ 11273 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+11276 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 768.832 null ] >>
+endobj
+11277 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 757.873 null ] >>
+endobj
+11278 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 746.914 null ] >>
+endobj
+11279 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 735.955 null ] >>
+endobj
+11280 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 724.996 null ] >>
+endobj
+11281 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 714.037 null ] >>
+endobj
+11282 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 703.078 null ] >>
+endobj
+11283 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 692.119 null ] >>
+endobj
+11284 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 681.16 null ] >>
+endobj
+11285 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 670.202 null ] >>
+endobj
+11286 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 659.243 null ] >>
+endobj
+11287 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 648.284 null ] >>
+endobj
+11288 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 637.325 null ] >>
+endobj
+11289 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 626.366 null ] >>
+endobj
+11290 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 615.407 null ] >>
+endobj
+11291 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 604.448 null ] >>
+endobj
+11292 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 593.489 null ] >>
+endobj
+11293 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 582.53 null ] >>
+endobj
+11294 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 571.571 null ] >>
+endobj
+11295 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 560.613 null ] >>
+endobj
+11296 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 549.654 null ] >>
+endobj
+11297 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 538.695 null ] >>
+endobj
+11298 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 527.736 null ] >>
+endobj
+11299 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 516.777 null ] >>
+endobj
+11300 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 505.818 null ] >>
+endobj
+11301 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 494.859 null ] >>
+endobj
+11302 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 483.9 null ] >>
+endobj
+11303 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 472.941 null ] >>
+endobj
+11304 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 461.982 null ] >>
+endobj
+11305 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 451.023 null ] >>
+endobj
+11306 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 440.065 null ] >>
+endobj
+11307 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 429.106 null ] >>
+endobj
+11308 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 418.147 null ] >>
+endobj
+11309 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 407.188 null ] >>
+endobj
+11310 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 396.229 null ] >>
+endobj
+11311 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 385.27 null ] >>
+endobj
+11312 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 374.311 null ] >>
+endobj
+11313 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 363.352 null ] >>
+endobj
+11314 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 352.393 null ] >>
+endobj
+11315 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 341.434 null ] >>
+endobj
+11316 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 330.476 null ] >>
+endobj
+11317 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 319.517 null ] >>
+endobj
+11318 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 308.558 null ] >>
+endobj
+11319 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 297.599 null ] >>
+endobj
+11320 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 286.64 null ] >>
+endobj
+11321 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 243.021 null ] >>
+endobj
+11322 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 232.062 null ] >>
+endobj
+11323 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 221.103 null ] >>
+endobj
+11324 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 210.144 null ] >>
+endobj
+11325 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 199.185 null ] >>
+endobj
+11326 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 188.226 null ] >>
+endobj
+11327 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 177.267 null ] >>
+endobj
+11328 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 166.308 null ] >>
+endobj
+11329 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 155.349 null ] >>
+endobj
+11330 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 144.39 null ] >>
+endobj
+11331 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 133.431 null ] >>
+endobj
+11332 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 122.473 null ] >>
+endobj
+11333 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 111.514 null ] >>
+endobj
+11334 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 100.555 null ] >>
+endobj
+11335 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 89.596 null ] >>
+endobj
+11336 0 obj
+<< /D [ 11273 0 R /XYZ 82.402 78.637 null ] >>
+endobj
+11272 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R /F20 186 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+11339 0 obj
+<< /Filter /FlateDecode /Length 1411 >>
+stream
+xڥOo6/bV`:LBeɠAP}Qr[ď)0) R|!_A.?҅
+(3
+ld< n}9NYƠ"A{$>pJyg$MCeu8_h/sg ô"p&7Ct.`ŧOw??}L{~
+lvDcA?-U0yx45esqL Hw<4_w8_ye\hm?7"-`)w_p_j7~A[ $9:m[;ZD_) .c8'eonzb:PBm$v]З0 nرu8ķZ;?ӡکm3~D@K 3A׺ o2Ǖ$G<3(|U9<7'he8IOS;do|BqIxieیHa8οI<Zi2?Ƀ8εI<™S' :q/eh
+ȯ@!Z˧l9,k1bJx L\o
+endstream
+endobj
+11338 0 obj
+<< /Type /Page /Contents 11339 0 R /Resources 11337 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 11206 0 R >>
+endobj
+11340 0 obj
+<< /D [ 11338 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+11341 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 768.832 null ] >>
+endobj
+11342 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 757.873 null ] >>
+endobj
+11343 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 746.914 null ] >>
+endobj
+11344 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 735.955 null ] >>
+endobj
+11345 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 724.996 null ] >>
+endobj
+11346 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 714.037 null ] >>
+endobj
+11347 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 703.078 null ] >>
+endobj
+11348 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 692.119 null ] >>
+endobj
+11349 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 681.16 null ] >>
+endobj
+11350 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 670.202 null ] >>
+endobj
+11351 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 659.243 null ] >>
+endobj
+11352 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 648.284 null ] >>
+endobj
+11353 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 637.325 null ] >>
+endobj
+11354 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 626.366 null ] >>
+endobj
+11355 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 615.407 null ] >>
+endobj
+11356 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 604.448 null ] >>
+endobj
+11357 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 593.489 null ] >>
+endobj
+11358 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 582.53 null ] >>
+endobj
+11359 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 571.571 null ] >>
+endobj
+11360 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 560.613 null ] >>
+endobj
+11361 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 549.654 null ] >>
+endobj
+11362 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 538.695 null ] >>
+endobj
+11363 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 527.736 null ] >>
+endobj
+11364 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 516.777 null ] >>
+endobj
+11365 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 505.818 null ] >>
+endobj
+11366 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 494.859 null ] >>
+endobj
+11367 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 483.9 null ] >>
+endobj
+11368 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 472.941 null ] >>
+endobj
+11369 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 461.982 null ] >>
+endobj
+11370 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 451.023 null ] >>
+endobj
+11371 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 440.065 null ] >>
+endobj
+11372 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 429.106 null ] >>
+endobj
+11373 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 418.147 null ] >>
+endobj
+11374 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 407.188 null ] >>
+endobj
+11375 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 396.229 null ] >>
+endobj
+11376 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 385.27 null ] >>
+endobj
+11377 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 374.311 null ] >>
+endobj
+11378 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 363.352 null ] >>
+endobj
+11379 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 352.393 null ] >>
+endobj
+11380 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 341.434 null ] >>
+endobj
+11381 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 330.476 null ] >>
+endobj
+11382 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 319.517 null ] >>
+endobj
+11383 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 308.558 null ] >>
+endobj
+11384 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 297.599 null ] >>
+endobj
+11385 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 283.651 null ] >>
+endobj
+11386 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 272.692 null ] >>
+endobj
+11387 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 261.733 null ] >>
+endobj
+11388 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 250.774 null ] >>
+endobj
+11389 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 239.816 null ] >>
+endobj
+11390 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 228.857 null ] >>
+endobj
+11391 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 217.898 null ] >>
+endobj
+11392 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 206.939 null ] >>
+endobj
+11393 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 195.98 null ] >>
+endobj
+11394 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 185.021 null ] >>
+endobj
+11395 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 174.062 null ] >>
+endobj
+11396 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 163.103 null ] >>
+endobj
+11397 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 152.144 null ] >>
+endobj
+11398 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 141.185 null ] >>
+endobj
+11399 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 130.226 null ] >>
+endobj
+11400 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 119.268 null ] >>
+endobj
+11401 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 108.309 null ] >>
+endobj
+11402 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 97.35 null ] >>
+endobj
+11403 0 obj
+<< /D [ 11338 0 R /XYZ 82.402 86.391 null ] >>
+endobj
+11337 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+11406 0 obj
+<< /Filter /FlateDecode /Length 1691 >>
+stream
+xڥKo7)2 9|mM
+łf'p^vw& ,ypBaNbs2ڡw1
+"Xa0+| 9Xd"oaNES#C`Dmoa쫢u図1"ّ0;mG;`~b&'Ɉw0&Tv{q~bg)5<
+1(aNcR"$ ̉|n&7/z>gEQ8Vn9*DL o"{=kƐ($ |12רia" É<5dڌdEIDؙvC,O@7~Qf{W-y*xoſ ͛i8l\|leK鶩hOkp̈́Q&UWxqQ'pW@~wXk潹lfmVMoNͷM©ٵѿ k1 V0|'9t`ڻړi Z{o7SUK7bRa>k~릱غuw׺;5` \WMsu#2֡))XH~vOy}j5.:_ qtruE"?aVʧv|
+ku>ʽ;&ZY.t8 )|cѴ۸jU:ApS_
+endstream
+endobj
+11405 0 obj
+<< /Type /Page /Contents 11406 0 R /Resources 11404 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 11206 0 R >>
+endobj
+11407 0 obj
+<< /D [ 11405 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+11408 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 768.832 null ] >>
+endobj
+11409 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 757.873 null ] >>
+endobj
+11410 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 746.914 null ] >>
+endobj
+11411 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 735.955 null ] >>
+endobj
+11412 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 724.996 null ] >>
+endobj
+11413 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 714.037 null ] >>
+endobj
+11414 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 703.078 null ] >>
+endobj
+11415 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 692.119 null ] >>
+endobj
+11416 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 681.16 null ] >>
+endobj
+11417 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 670.202 null ] >>
+endobj
+11418 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 659.243 null ] >>
+endobj
+11419 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 648.284 null ] >>
+endobj
+11420 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 637.325 null ] >>
+endobj
+11421 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 626.366 null ] >>
+endobj
+11422 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 615.407 null ] >>
+endobj
+11423 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 604.448 null ] >>
+endobj
+11424 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 593.489 null ] >>
+endobj
+11425 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 582.53 null ] >>
+endobj
+11426 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 571.571 null ] >>
+endobj
+11427 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 560.613 null ] >>
+endobj
+11428 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 549.654 null ] >>
+endobj
+11429 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 538.695 null ] >>
+endobj
+11430 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 527.736 null ] >>
+endobj
+11431 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 516.777 null ] >>
+endobj
+11432 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 505.818 null ] >>
+endobj
+11433 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 494.859 null ] >>
+endobj
+11434 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 483.9 null ] >>
+endobj
+11435 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 472.941 null ] >>
+endobj
+11436 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 461.982 null ] >>
+endobj
+11437 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 451.023 null ] >>
+endobj
+11438 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 440.065 null ] >>
+endobj
+11439 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 429.106 null ] >>
+endobj
+11440 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 418.147 null ] >>
+endobj
+11441 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 407.188 null ] >>
+endobj
+11442 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 396.229 null ] >>
+endobj
+11443 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 385.27 null ] >>
+endobj
+11444 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 374.311 null ] >>
+endobj
+11445 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 363.352 null ] >>
+endobj
+11446 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 352.393 null ] >>
+endobj
+11447 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 341.434 null ] >>
+endobj
+11448 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 330.476 null ] >>
+endobj
+11449 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 319.517 null ] >>
+endobj
+11450 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 308.558 null ] >>
+endobj
+11451 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 292.618 null ] >>
+endobj
+11452 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 281.659 null ] >>
+endobj
+11453 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 270.7 null ] >>
+endobj
+11454 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 259.741 null ] >>
+endobj
+11455 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 248.782 null ] >>
+endobj
+11456 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 237.823 null ] >>
+endobj
+11457 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 226.864 null ] >>
+endobj
+11458 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 215.905 null ] >>
+endobj
+11459 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 204.946 null ] >>
+endobj
+11460 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 193.987 null ] >>
+endobj
+11461 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 183.028 null ] >>
+endobj
+11462 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 172.07 null ] >>
+endobj
+11463 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 161.111 null ] >>
+endobj
+11464 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 150.152 null ] >>
+endobj
+11465 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 139.193 null ] >>
+endobj
+11466 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 128.234 null ] >>
+endobj
+11467 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 112.294 null ] >>
+endobj
+11468 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 101.335 null ] >>
+endobj
+11469 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 90.376 null ] >>
+endobj
+11470 0 obj
+<< /D [ 11405 0 R /XYZ 82.402 79.417 null ] >>
+endobj
+11404 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+11473 0 obj
+<< /Filter /FlateDecode /Length 535 >>
+stream
+xڝK0>J0xJ,8Pv݇Hm&jqԲvPe2cS$M+.&oɛ$tj10$%] )UH zSv4Y)A+˔FFzW?MgƯֵNS&^(_&1 @/ N3rq{;lSk7^L^OO빩Y}HYr}OFyy)KcvpdU^߳C*#[-VʨV䩥miuS7v{4,δ!|~鼳]
+ \QIgϮ0+#ܚz3k_v ;RI"x2ƼtxvG* gF.jfDgC/?[7g!n5<>KPVE RǍEk+n735vw862/ūzMۺևEM u{
+endstream
+endobj
+11472 0 obj
+<< /Type /Page /Contents 11473 0 R /Resources 11471 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 11206 0 R >>
+endobj
+11474 0 obj
+<< /D [ 11472 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+11475 0 obj
+<< /D [ 11472 0 R /XYZ 82.402 768.832 null ] >>
+endobj
+11476 0 obj
+<< /D [ 11472 0 R /XYZ 82.402 757.873 null ] >>
+endobj
+11477 0 obj
+<< /D [ 11472 0 R /XYZ 82.402 741.933 null ] >>
+endobj
+11478 0 obj
+<< /D [ 11472 0 R /XYZ 82.402 730.974 null ] >>
+endobj
+11479 0 obj
+<< /D [ 11472 0 R /XYZ 82.402 720.015 null ] >>
+endobj
+11480 0 obj
+<< /D [ 11472 0 R /XYZ 82.402 709.056 null ] >>
+endobj
+11481 0 obj
+<< /D [ 11472 0 R /XYZ 82.402 698.097 null ] >>
+endobj
+11482 0 obj
+<< /D [ 11472 0 R /XYZ 82.402 687.138 null ] >>
+endobj
+11483 0 obj
+<< /D [ 11472 0 R /XYZ 82.402 671.198 null ] >>
+endobj
+11484 0 obj
+<< /D [ 11472 0 R /XYZ 82.402 660.239 null ] >>
+endobj
+11485 0 obj
+<< /D [ 11472 0 R /XYZ 82.402 649.28 null ] >>
+endobj
+11486 0 obj
+<< /D [ 11472 0 R /XYZ 82.402 638.321 null ] >>
+endobj
+11487 0 obj
+<< /D [ 11472 0 R /XYZ 82.402 627.362 null ] >>
+endobj
+11488 0 obj
+<< /D [ 11472 0 R /XYZ 82.402 616.403 null ] >>
+endobj
+11489 0 obj
+<< /D [ 11472 0 R /XYZ 82.402 605.444 null ] >>
+endobj
+11471 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F68 189 0 R /F64 183 0 R /F19 184 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+11523 0 obj
+<< /Filter /FlateDecode /Length 1223 >>
+stream
+xڝo6WGRxLҵۀ C=(2@CQ")K}Mw;'ΰ^n^"($ܜ'HD*lv?ZSXo6q޿JRpvB"p$ua}7:/&3pN%]7ip٭_Ȫ/mBVem 0qDqڐ)8W I-ă)̚WO[z"ƩI).K.. bqS԰éެUyg]UY՟0eU1A)q[Rgw6nv*N%(s[x0=d^vC ~zo>MbLNBJ*SD=bMxFyĆ<jldm>kQ'jIA"#^[ Ҡu,qZ *!7n]ptzuj.|G닦{b>-9(c[x˺غ
+ėr|MıbJ0Gphj$?褉42"N|
+endstream
+endobj
+11522 0 obj
+<< /Type /Page /Contents 11523 0 R /Resources 11521 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 11206 0 R /Annots 11525 0 R >>
+endobj
+11525 0 obj
+[ 11490 0 R 11491 0 R 11492 0 R 11493 0 R 11494 0 R 11495 0 R 11496 0 R 11497 0 R 11498 0 R 11499 0 R 11500 0 R 11501 0 R 11502 0 R 11503 0 R 11504 0 R 11505 0 R 11506 0 R 11507 0 R 11508 0 R 11509 0 R 11510 0 R 11511 0 R 11512 0 R 11513 0 R 11514 0 R 11515 0 R 11516 0 R 11517 0 R 11518 0 R 11519 0 R ]
+endobj
+11490 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 713.79 345.275 724.684 ]/A << /S /GoTo /D (section.0.1) >> >>
+endobj
+11491 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 691.872 168.931 702.766 ]/A << /S /GoTo /D (section.0.2) >> >>
+endobj
+11492 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 669.954 195.879 680.848 ]/A << /S /GoTo /D (section.0.3) >> >>
+endobj
+11493 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 649.973 207.669 658.93 ]/A << /S /GoTo /D (section.0.4) >> >>
+endobj
+11494 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 628.056 162.385 637.012 ]/A << /S /GoTo /D (section.0.5) >> >>
+endobj
+11495 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 603.647 244.465 615.602 ]/A << /S /GoTo /D (section.0.6) >> >>
+endobj
+11496 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 582.283 313.465 593.177 ]/A << /S /GoTo /D (section.0.7) >> >>
+endobj
+11497 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 560.365 165.023 571.259 ]/A << /S /GoTo /D (section.0.8) >> >>
+endobj
+11498 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 537.894 356.927 549.849 ]/A << /S /GoTo /D (section.0.9) >> >>
+endobj
+11499 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 515.976 192.945 527.931 ]/A << /S /GoTo /D (section.0.10) >> >>
+endobj
+11500 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 494.058 318.799 506.013 ]/A << /S /GoTo /D (section.0.11) >> >>
+endobj
+11501 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 472.694 304.727 483.588 ]/A << /S /GoTo /D (section.0.12) >> >>
+endobj
+11502 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 450.222 271.2 462.178 ]/A << /S /GoTo /D (section.0.13) >> >>
+endobj
+11503 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 428.305 345.319 440.26 ]/A << /S /GoTo /D (section.0.14) >> >>
+endobj
+11504 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 406.387 370.804 418.342 ]/A << /S /GoTo /D (section.0.15) >> >>
+endobj
+11505 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 385.022 280.698 395.917 ]/A << /S /GoTo /D (section.0.16) >> >>
+endobj
+11506 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 365.042 232.492 373.999 ]/A << /S /GoTo /D (section.0.17) >> >>
+endobj
+11507 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 341.187 418.007 352.081 ]/A << /S /GoTo /D (section.0.18) >> >>
+endobj
+11508 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 321.206 359.856 330.163 ]/A << /S /GoTo /D (section.0.19) >> >>
+endobj
+11509 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 296.798 323.519 308.753 ]/A << /S /GoTo /D (section.0.20) >> >>
+endobj
+11510 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 274.88 233.701 286.835 ]/A << /S /GoTo /D (section.0.21) >> >>
+endobj
+11511 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 253.516 272.181 264.41 ]/A << /S /GoTo /D (section.0.22) >> >>
+endobj
+11512 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 233.535 269.72 242.492 ]/A << /S /GoTo /D (section.0.23) >> >>
+endobj
+11513 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 209.68 200.238 220.574 ]/A << /S /GoTo /D (section.0.24) >> >>
+endobj
+11514 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 187.209 292.135 199.164 ]/A << /S /GoTo /D (section.0.25) >> >>
+endobj
+11515 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 167.782 187.086 176.738 ]/A << /S /GoTo /D (section.0.26) >> >>
+endobj
+11516 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 145.864 159.613 154.821 ]/A << /S /GoTo /D (section.0.27) >> >>
+endobj
+11517 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 122.009 324.087 132.903 ]/A << /S /GoTo /D (section.0.28) >> >>
+endobj
+11518 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 100.091 192.653 110.985 ]/A << /S /GoTo /D (section.0.29) >> >>
+endobj
+11519 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 77.62 313.527 89.575 ]/A << /S /GoTo /D (section.0.30) >> >>
+endobj
+11524 0 obj
+<< /D [ 11522 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+165 0 obj
+<< /D [ 11522 0 R /XYZ 79.37 771.024 null ] >>
+endobj
+11521 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F67 187 0 R /F79 736 0 R /F19 184 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+11537 0 obj
+<< /Filter /FlateDecode /Length 498 >>
+stream
+xڍK0
+endstream
+endobj
+11536 0 obj
+<< /Type /Page /Contents 11537 0 R /Resources 11535 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 11206 0 R /Annots 11539 0 R >>
+endobj
+11539 0 obj
+[ 11520 0 R 11526 0 R 11527 0 R 11528 0 R 11529 0 R 11530 0 R 11531 0 R 11532 0 R 11533 0 R 11534 0 R ]
+endobj
+11520 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 757.574 225.426 769.529 ]/A << /S /GoTo /D (section.0.31) >> >>
+endobj
+11526 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 735.656 232.547 747.611 ]/A << /S /GoTo /D (section.0.32) >> >>
+endobj
+11527 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 714.292 261.342 725.186 ]/A << /S /GoTo /D (section.0.33) >> >>
+endobj
+11528 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 691.821 240.384 703.776 ]/A << /S /GoTo /D (section.0.34) >> >>
+endobj
+11529 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 669.903 329.738 681.858 ]/A << /S /GoTo /D (section.0.35) >> >>
+endobj
+11530 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 648.538 252.167 659.432 ]/A << /S /GoTo /D (section.0.36) >> >>
+endobj
+11531 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 626.067 266.6 638.022 ]/A << /S /GoTo /D (section.0.37) >> >>
+endobj
+11532 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 604.703 318.705 615.597 ]/A << /S /GoTo /D (section.0.38) >> >>
+endobj
+11533 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 582.785 258.373 593.679 ]/A << /S /GoTo /D (section.0.39) >> >>
+endobj
+11534 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 560.867 257.469 571.761 ]/A << /S /GoTo /D (section.0.40) >> >>
+endobj
+11538 0 obj
+<< /D [ 11536 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+11535 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F79 736 0 R /F19 184 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+1 0 obj
+<< /pgf@bmMultiply<< /BM /Multiply>>>>
+endobj
+2 0 obj
+<<>>
+endobj
+3 0 obj
+<< /pgfprgb [/Pattern /DeviceRGB] >>
+endobj
+11541 0 obj
+[647.8 579.4 ]
+endobj
+11543 0 obj
+[875 875 666.7 666.7 666.7 666.7 0 0 0 0 0 0 0 0 0 0 875 875 ]
+endobj
+11545 0 obj
+[525 525 0 0 525 525 0 525 525 525 0 525 0 525 525 0 0 525 0 525 525 0 0 525 ]
+endobj
+11547 0 obj
+[531.3 531.3 ]
+endobj
+11549 0 obj
+[826.4 ]
+endobj
+11550 0 obj
+[531.3 531.3 531.3 0 531.3 0 0 0 0 531.3 0 0 0 0 531.3 0 0 0 0 0 531.3 531.3 0 531.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 531.3 531.3 531.3 0 531.3 0 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 0 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 0 531.3 ]
+endobj
+11551 0 obj
+[575 0 0 0 0 0 0 638.9 638.9 0 0 0 0 0 0 0 0 0 0 0 0 575 0 319.5 383.3 0 0 575 575 575 575 575 575 575 575 575 575 0 0 0 0 0 0 0 869.4 818 830.6 881.9 755.5 723.6 904.2 900 436.1 0 0 691.7 1091.7 900 863.9 786.1 0 862.5 638.9 800 884.7 869.4 1188.9 869.4 0 0 0 575 0 0 0 0 559 638.9 511.1 638.9 527.1 351.4 575 638.9 319.5 0 607 319.5 958.3 638.9 575 638.9 0 473.6 453.6 447.2 638.9 607 830.6 607 607 511.1 575 0 575 ]
+endobj
+11553 0 obj
+[777.8 ]
+endobj
+11554 0 obj
+[777.8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 416.7 528.6 429.2 432.8 0 0 0 0 0 344.5 411.8 520.6 298.4 0 600.2 0 0 0 0 0 0 0 0 0 571.5 490.3 ]
+endobj
+11555 0 obj
+[833.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 777.8 0 0 0 0 500 500 500 500 500 500 500 500 ]
+endobj
+11556 0 obj
+[613.3 0 591.1 624.5 0 535.5 641.1 0 302.2 0 0 0 0 0 0 557.8 0 0 457.8 ]
+endobj
+11557 0 obj
+[611.1 611.1 611.1 611.1 611.1 611.1 611.1 611.1 611.1 611.1 ]
+endobj
+11558 0 obj
+[569.4 569.4 569.4 569.4 569.4 569.4 569.4 569.4 569.4 569.4 ]
+endobj
+11559 0 obj
+[562.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 357.8 306.7 0 0 0 0 0 0 0 0 0 0 0 306.7 0 0 0 0 0 0 0 703.9 715.6 0 678.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 511.1 460 460 511.1 460 306.7 460 511.1 306.7 306.7 460 255.5 817.8 562.2 511.1 511.1 460 421.7 408.9 332.2 536.7 460 664.4 463.9 485.5 ]
+endobj
+11560 0 obj
+[388.9 388.9 0 0 0 333.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 777.8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 0 444.5 0 444.5 305.5 0 0 277.8 305.5 527.8 277.8 833.3 555.5 500 555.5 0 0 394.4 388.9 555.5 527.8 0 527.8 527.8 ]
+endobj
+11561 0 obj
+[502.3 502.3 0 0 0 0 1062.5 0 0 0 0 0 590.3 0 0 0 0 0 0 0 0 0 0 295.1 413.2 413.2 0 0 295.1 0 295.1 531.3 531.3 531.3 531.3 0 531.3 531.3 531.3 0 531.3 531.3 0 0 0 0 0 0 0 795.9 0 0 0 722.6 0 0 0 382.6 0 0 663.5 972.9 0 0 0 0 0 590.3 767.4 0 0 1091 795.9 0 0 0 0 0 0 0 0 531.3 590.3 472.2 590.3 472.2 324.7 531.3 590.3 295.1 0 560.7 295.1 885.4 590.3 531.3 590.3 560.7 414.1 419.1 413.2 590.3 560.7 767.4 560.7 560.7 472.2 ]
+endobj
+11562 0 obj
+[638.9 ]
+endobj
+11563 0 obj
+[531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 510.4 0 472.2 0 472.2 0 0 0 253.5 0 0 0 843.8 548.6 0 0 0 362.8 0 383.7 0 0 0 489.6 ]
+endobj
+11564 0 obj
+[625 0 0 0 0 0 0 0 0 0 0 0 0 0 562.5 0 312.5 375 0 0 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 0 0 0 0 0 0 0 849.5 799.7 812.5 862.3 738.4 0 0 879.6 419 0 0 675.9 1067.2 879.6 844.9 768.5 0 839.2 625 782.4 864.6 0 1162 849.5 0 0 0 575 0 0 0 0 546.9 625 500 625 513.3 343.7 562.5 625 312.5 0 593.7 312.5 937.5 625 562.5 625 0 459.5 443.7 437.5 625 593.7 812.5 593.7 593.7 500 575 0 575 ]
+endobj
+11565 0 obj
+[525 0 525 525 0 525 0 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 0 525 525 525 0 525 525 525 525 525 525 525 525 525 525 0 0 525 525 525 525 525 0 525 525 525 525 525 525 525 0 0 525 525 525 525 525 0 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 ]
+endobj
+11566 0 obj
+[583.3 0 536.1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333.3 0 0 0 500 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 480.5 516.7 444.5 516.7 444.5 305.5 500 516.7 238.9 0 488.9 238.9 794.5 516.7 500 516.7 0 341.7 383.3 361.1 516.7 461.1 683.3 461.1 461.1 ]
+endobj
+11567 0 obj
+[472 472 0 0 0 500 1000 0 0 0 0 583.3 555.5 555.5 833.3 0 0 277.8 0 0 0 0 0 277.8 388.9 388.9 0 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 777.8 777.8 777.8 472.2 777.8 750 708.3 722.2 763.9 680.5 652.8 784.7 750 361.1 513.9 0 625 916.7 750 777.8 680.5 0 736.1 555.5 722.2 750 0 1027.8 750 750 611.1 277.8 0 277.8 0 0 277.8 500 555.5 444.5 555.5 444.5 305.5 500 555.5 277.8 305.5 527.8 277.8 833.3 555.5 500 555.5 527.8 391.7 394.4 388.9 555.5 527.8 722.2 527.8 527.8 444.5 ]
+endobj
+11568 0 obj
+[525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 0 525 525 525 525 525 525 0 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 ]
+endobj
+11569 0 obj
+[577.2 524.7 0 0 0 0 341.1 ]
+endobj
+11570 0 obj
+[493.8 0 456.8 0 456.8 0 0 0 245.4 0 0 0 816.3 530.8 0 0 0 351.1 0 371.1 0 0 0 473.8 ]
+endobj
+11571 0 obj
+[285.5 399.7 399.7 0 0 0 0 285.5 0 0 0 0 0 0 0 0 0 0 0 285.5 0 0 0 0 0 0 0 0 0 0 0 670.8 0 0 371 0 0 642.3 0 0 0 0 0 0 0 742.3 0 0 0 770.7 0 0 0 0 0 0 0 0 513.9 0 456.8 571 457.2 314 513.9 571 285.5 0 542.4 285.5 856.4 571 513.9 571 0 402 405.4 399.7 571 0 742.3 ]
+endobj
+11572 0 obj
+[892.9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 575.2 657.4 525.9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 488.1 466.7 460.2 ]
+endobj
+11573 0 obj
+[514.6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 514.6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 514.6 0 0 514.6 0 514.6 514.6 0 514.6 0 0 0 0 514.6 514.6 514.6 0 514.6 0 514.6 0 0 514.6 0 514.6 ]
+endobj
+11574 0 obj
+[272 0 272 0 489.6 0 489.6 0 489.6 0 0 0 0 489.6 0 0 0 0 0 0 0 0 0 0 0 0 639 0 0 0 0 0 0 897.2 0 0 666.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 489.6 0 0 0 0 0 489.6 0 272 0 0 0 0 544 0 0 0 0 0 380.8 0 0 0 0 516.8 ]
+endobj
+11575 0 obj
+[777.8 0 0 500 ]
+endobj
+11576 0 obj
+[450.9 0 417.9 0 417.9 0 0 0 222.6 0 0 0 745.1 483.9 0 0 0 320.3 0 339.6 0 0 0 431.6 ]
+endobj
+11577 0 obj
+[667.6 0 0 0 0 0 0 0 0 0 0 0 0 458.6 0 406.4 510.9 406.4 275.8 458.6 510.9 0 0 484.7 0 0 0 458.6 510.9 0 0 0 354.1 ]
+endobj
+11579 0 obj
+<< /Length1 2610 /Length2 30311 /Length3 0 /Filter /FlateDecode /Length 31774 >>
+stream
+xڴzeTup'8ww {pw ݝorν7 fvuÛTYQd
+922TA&, ;s
+pZ\
+L
+p:XmT`e? 
+t0q0;
+LWi\]\]XXwfDe$%
+.9I8̭,l\
+\k@p]@V?8qpI@wkLX\$P vwG
+ tO_˟c_a5Wg-PWgkO=Q
+(Ry0r#/' ̬~k5n-
+a(yN+qe?MuC|_IU3PMmj\Ex_
+.yJn@gdg|_`~I
+B(SDd硥WEf)؛J[9R1!-?57A{yd\{2Z&>!.KR ̩ םHDF{,+ :y_>p80g%sh6!%').*['ۊE}.yxe;Qa`o;2?+Gt^߮VmŎnעQoh Ȉ|Ss'oL!7?',*Ε@pN-Uq|J}"Py\cGL.1T$kfF2^n}qIRWr>ySk!\rb
+E.p)! r
+
+ vKx(mĵ!̠g1Y$f( GݍQeU*4S.$Ar2R<H`k;E>mO|p5}2|X5Z80/ +KANun%IV\{;mȨQO+!؟HG4C Ї::|L jM^`5@Mr^F$M>_%=rd]Vb
+`Gm͂##b䨰k.Ho@I$>LVcH,rÉmo9䯢q:6_Taj&ziGMH_pBܓÈ#)B t3sGϠYJ%['WC>;`6yL{/đ
+)_In)۝C)"XhKZDukwQr9/&,
+òWKӚXp8SOB]:,@)ʾt FwbȮ[u F\#sk5RAV2<wWS yeL+42ë4V<}b'OVMX˼Ϫ%$Dan0KOh,RNwO%D|XwW]bsuty[bΈӅ>W5!}H!Ї}ԑI#$=R4i
+ΨC
+?m.!8uZ Fޥ@pL?kǦ%ktٻtPwkA-֝7)`a}T_e5]>j<$ľXyE>*~MxA:8lJT[ʊμ)XѱL0N*"BA*24_M5qO?)}NTEMCco z/i#tβɇE%H%w㚬'&—s8BGR;0`Մ71)vW=XբmPcB,SK͌ċ@Z9(BmlW}*ۑXA C@ik~e
+@d-H0:֭c%aQPTw>X2"ρAXmBN Nu]4N@(?5VY}M_(TenWg+i=j FbI
+}ҍqAr&>^,)5萻~a31=
+Ź=V rܼp?AU&
+RyU kG
+e:$_rr96X5q̍XOT1儭 ]XsVur`
+h 6!+[^+bLӅ!e+|L+$P)t>>'_}8P"&+.= >
+] |ŕ
+r=Хyϼ{g,:>~9"
+ՇX(׌ViL (oBy'` & hЯe6eJI`J !]ez?tn4p [񭗸?Cu1J[97>^/:RP0+8ĺ+$/QvTbz gpCLN#߳hV 4tdw2un&6Khs0ԠSC`I0Ѐ0㱏T2NYNDi S&~~y}m
+C yg1WKP'N5D='
+9'ZiF6`ܶ
+6!_SItk{`mԖ%Ƥ5cX\$ZDi#0EZ'Rt$UOQ+hD⫝)Ox*LXl!9}x_T ó4ַ|x&iAXSI1 ;
+.Eu'^|O` .4P˟6E* ElVՀlW.-z6/`UF#bǸSJ챼Jr5`jR|xH+U~Ыdxn9dyL;a#avŹ`:0\,F
+C]FuGo<"zPr\;2\'>Trq
+o6 XI)F˧2"C]}=eL  bB\53ַB*a?)e[>5;rhS#C%&](1 1ƺL=2"Jx݄$Ǯ2|>Wu7¾NUw
+v&%gce(j inCF{-ݼp5''{SM\И*Au u⽌yKXw4 +^.^\zgNb~ NFJ$A߬_Bb#D7PE%cXQOj]O)LK[Z* 􆯩PUL Ï~yQ boԛ3WfP1[/cUf&]eWyg:h #5\"*[sn Wa_rf:-(}ٕn󣀩xXFgzcOzOO!Y)_o/A2]IKKyMo\ b a"Q`F^Y &:/0= t$o6r 44!A$LM2Ρ,v_:aw6\Ҧλ{uvCrIO= |RO-m<*1HL]@83Ce0x
+(}l:B`W7T)vWxZ`R>-sjm_iN(q0k@;MJ=JUǼ9ef"]y/+&-frxJ!ۓ, iM^K"!,}Ђ#S1h=#7#e7y-4g||[-F w&Î#sD3CƲ
+원,sGrQk1pKgƍ$"Pft<-ax^% "ЃCݶjzT?IZӆPSy0ܷL&,-
+lB!{w{2+ڗM6{ͫf1~Vgl]Y}ň<Ql"ܷ^%Yf{`=l `^';Q
+% qӇap"B-j[RM8JzK;&(f{;cNU5 ڙLz
+c(#2q(h
+Q\%V3
+\U/: uDk_;FtXMJ AǠG1\Ig%/5\!zVaW
+ q4kk<ZE'i\6+ACd0xkqtm$Cu=|85
+RvᑅMkܛgP^@i^
+A=pZ
+醤c ×ʟ=KDi+
+zgIٻP_xP.Vjt?k yQ*sЀt)+4~䔨v^'Ɇ!ى}~8!&e"dSaIסSFz2*{CS~b}bFzA0˘ar߽[%ĵH4q
+&rV\^Æއ &_?v.+>h[^c7~k IP2 mk@7X/B#e`ub< ]Q
+>S@ )+N/~yq0s.g܉rћ| bwn&_| MS`ar%QJ<k+q <p,xY]wDs^(Ÿ6߆(89ݶeu,PͼML Ü[g
+a
+WBvlQxύ4gWLGlG6ة~J/GFNy=iwݹg;Lf"."OfьEz3ueM*?Z9Q7KQ?՚_bsܑe(.7 Wo#0ybRESٴf@#d9c.ABXda? 0@xY<A7ԫhF3@_KFN wamͭڡ߼B¾=A4ջ/&, ۢRxTa液lxF@nANgah^
+<S.]q4xMݷ1P}$-x{ j諩rFIx谝)k?Cw#<t΀މa#ηŘ-o8HR$ٌjHvd|#YŸК"B}>-w jςbލD!q>䑷V6UydxYFf$3]7wAr:X@R`й08ƌ];0\NFͨoC:]@3.;u\][r h_Q 56QۗhCK0{KAv4u4}gDYrQtrqaIrx?xXrrU2H6o!hC;`[>(ӾiŰe.6_R7۞cSݼϨ
+_>D~ūahRa
+ٜ}1=1zlr#e!!Ã(&燱& h
+d l`il!擬,;v#4ЊJʭ& ,15JL݀f#'@dbyQSW-M`̅oP4_xyw%YD%Cae<\Zo/Wp JE_M,i7:5H)g6vYA5
+i-iB…,׌_ڍGʬZi|m0xDDvS m)z75$>6o Pl>p4捂ۼϺ(bUZ +{Nvwq+~
+vHH΀jmR:=3%q|AȂCm5dؒ&VTThL
+DQ'>u;^Vq5_b)8FHJ
+3n^\ix8"9,Uוfv4q0Dd9@{:hn\kNh7M`V S['a'mA&IcR5LfSM"Ivfm놸T IR3?n`['9(Hɧ]8cѻ7ggz.c(b&vE 2ayꐯ.G$sIwLs}ţ3(GJ2)t0$G筿Id1}WӤE4tsvO ^/6kcdnw!1Ҟ^s-eR?pkt{ǙҜ&Tǁҍ3˯bx wCw$8ffcG p~\R"x4Y5ߜ sED |~>M10x]0X\:燮)
+b'
+ x
+C0 J3Е(.ZjCQ'uf+|A7'L]ZͨHW|z{2IR 0"10g2gf޽
+.H|EkɋT^kw;Ӽ] e8cY6VMzfJ"-XZs+%LHcx(ˤbЫ]8RXjNoNϲ[!pbXHK/ ?{67Z_QּbCX8!*|s1L|rN Bb~ר52gn'<*7KؠMJd燺ZØnTӗ0IQ"VqN`RW lҶ'kv; io\umuXWv3R<iQ]g)*Z 0{vYTe`l)lkp52ȓq|JHMջ+7m|7LFdjWS㾤5;c}țɜY<P_#t"ҡ=6ĝ-#jU$gNtKgwKFy5 -K*rČk9Ff3՗,=J,_ޠD'7_+ wLpZnrwsQ)M
+v:I8 {<O6{AY[c {"B<FTgnD"|~Og*٫zǚiX ֯E" k-Khj,
+GNSŻZQ#::(y}։enlM0uzh2:2ݖ~}R1S
+m[_6}qWݡvu+m3N jGcQ+MxxY'Oz7;&z 
+UEK8&mpB|<?Wm~^\L&Qүb y#=,nÙ w`iY93
+/NZe:iəwAե<pHxvJ=ױ; \eh6,sG{-TO47J ^^ /=9D!% k(Bz#3)% 5W-eg -x#hBfL*.uCyխvyhR i6R$ESD|2XVp1ZI|X2隺ĦJ,9ݲY[c ]ܩ҈.c;DҟaK ̱ NOMjẐQijgIa۶Zl4"sh*Jg3-;S˕Г3
+?E٤4!+l2x9#MK~i*6b<yl^u?<82!
+@Km2Un qbS8[ȥsbݮǝ-}=0ey-`lWwqVX~-\ ueP(D`zDO04A\.Ex}l&SBIGK-ҙ`D?oVhFZv
+F/mˇ!ucshN`.Bq#/EDvڛOI#|߭a !̩R ʾ*鐵H:"5]㫋+3Lzv_aOޛo46|1/bLttZ
+cguHX C-ٻ_Ϫj =w |#sk)v>hۙaCt}mdk$h́&v8kfRv^oQ[uإBW Ȫ踹 _KLJC_*<hTKVp%po@TKrb,3R/?=!8O Mcч'XݠZw&<
+PV8T l_+N/Q쵥cvV|GaO=!ÍP_%n&VzGc{
+ΰfç Д%4ġ&tu}{JZ@l<E/~AP@vʲ54|t6imԥď?m%扪xcա`q|fsJD'ja|2+L1^(}*ez`fC|x@xČtϽĴ 5e;1vX4B>\䊋(s9APe'tmpȑJ)7NY;0 +Ax'/^T:&LF[BGϻwG8݆l__Bڿ 글wU<BMĞ w'0GR{bE/P1̐nh5q$4+xb3]
+Xb?.t^ C &W=VK|tt`@ݏnv<:ZfIjQO%y[@b+Mvƪ>| oDi`o3J>}YA
+?T4VUJ8MP{0T9-OB^MkfM
+4L5h3K6ޞˋ}NJJ|QCˠFYuuGoWp,F9T [%t nX= FӂE=^W5j7UxXz V0^K' 0tY+Xy
+*xk}[?߫z׎ꅏ")k\FEkD ֶm۶m۶m۶m۶M.5ˎƇ篽5/cCzM5*yH!;7ɗ4^j^&0T}a*0_F<{,&NձVHnyӆC[) `<*E(B>(EƖ
+E>ESi/QB>r1+)$GSRvFU}_,=c
+N
+|)
+tQ
+1ju75#-LuPU&_zfJg^]y֯ U|/a[
+:EP*GUH#(bi)ۼI<*l>)%86ԞɻLGx#vơ-1#Mpʙ5qx‰|3"c~`"(RʏD)merYkr'D%reRB܎g|
+<ҌVOpN ~Ce=a~茹 CȬ πzHVzw}6&VtU))*<aX'.D{AyBp{>GKvdtp#PV/b*'WqVsX94c~ $Z3RYǢ&8zҟ%pG3 `E.#W-f䵃67DD 6y8&oB[uG0 `_/[6נщ+2x[1GadSrފWu(oȋx縈{y)_}8-'{mA=:Eկݰ}C K0FC6tQTd/Z˙]/4DxENTMv?u8l1B.Hv  \nq},g!a7S68lt`R6-4jJ 2>%^|2m/W@!0% *c(%HR8/Yğ|Nj:?wv \<O7b0hCSY(C4HZ2L0@zƅִ2{?\TA<(7Jz"st9{G>d$N2x*% a
+4"A
+`*I6E ߮-ʠJrax|ښ"ƻs]TCoX :jpBFV)vwR-͉?3FtjE̊|״MJg`6FAл?b<,vޖ$-ӎ]J+j?Ur9VxM/ְ-
+%&S19V/wk[,,Λs 3cf*{ˊdH%tq^IJ"G &
+ bТ!Y٠n
+ !evtI*Q& 엃D'gUm;:<\c.^@14pQyMͪ IDx
+~CCkd:̹Wy٦b@&
+ʔS[`NVͳ~ !VN4YT5%z fy<U`l*hN MO)
+L0puW2?!~ªϛOTNe4NDumf8tV )YKtkҏņHgrK|5镾( b`Fzƿ2Z.2 0Aɍ cE#_W]t40#՞fJy m>$T?0@ ,߆I/T\g_M~]29 ӣ2( U9e Ly"
+gI1ǼcQۜ#
+SVVY6~+ק{/jןd;*@;14 Еn~5z +_ّVL(s˗gp uS:ZivO2+1@ƫ(rfj+;&. 5L-z(ױ^{feAh2VA״
+ր\Xl:SQ~R|K*Z`gO۫m=Ecv O}b7鞪 /WJ%>JnSGd)
+ж$
+
+.9&;OּU
+y {<b- 8W?05K*Vq[>y{p=.C0aDˉϧp˚qId킁yq}rT~8wŐhgF=`0VSh5,_P[߿Z|8!NU?9IZa~ȴM͞JK5+XAUb/&|7!@-ƺzfw0&z*%'
+"@~ACFqJ
+<cPD sc0 ]m2"6kIІJiaz)=MVU-)*G/1|h]¢t/ZO=^S>;qs=iL&9xy@f ,KPH1tZ-tUx<=!Q{Q|: ~M;h&
+0ihnm<q6j;x쮃OJPf _k52h k&ⵠu^Z߁[< |6Xθ^ę3 qgM,K
+cC֚T(#i+L_/1+ۈ77Φ+
+aںh?6K;\t%}gb?\avM/veMՅ6Jewub=2k#ExؽX`vŜՉ{Dx0E E{fZrq'}P&V
+hBЖY}Nud
+Efɬj{}E<w4T1ATc U (qD$^QXRkɴ_֤@h_nXyY_{9XT;cre˫ZtHQ*+hc
+7_o[Ł=Qb
+9C^1c3 Ey‰I?0v;ЧTzG C'ofN|K|Ĩu}=?~EsCcKͺ7 <,k4W|NC֚Ƨ>iᏌ5MG&?c( cp[ Ҥ ||Lx5ExtN*L"7
+&UTn4ADa54_ϼHD/ /ۙh A<LMojdMCrG=Q27{?iR=^vKNwfH%:ѢiW>d՝?`z?AFrWUSoA/ "|!*G1)T&c91L\bޡܦi@nվ@1*'m y0 haj2oh*{jmߜ"Y>MtljC0 eg)S?%p@xFQ >F%sZfԕGޤV΄OO>n.ʾKflV$ 8Yl.,|dY)Mhy7Da4|u{K
+*j-F9QX},Fy7Y2<ɓ Dfͻoaےw4F𸪍<mX?~pC\lAvA|K'ϧw,Kă>i0W qf7p;Ȗ(+EvfgB٤AF>gVN@pavyF[ĆB:Uם `:8<"*VY06(rx]0iַlo
+fD|/J Ԯ]yQpIv8c[<+੨5aC M)tqA ȹ7-
+]NbJH1bFʌ?cg= +]dPP
+qsM.cgrC8u05R0B5d69D+G2/9M'+l ɯ]@)Ȇ2; "DfOZ%n ȲVWhշϗjHKFo-3Š3J-cz߉$?1OR8>w䳈G\qA`L' aGeCbS%:w0ًh|ɗc X!QDP̉ᄁ19 MH!rVV,=Z|t–qŃJ_m6H9
+x>oX?$_Wgy o蟥,YM\W<[wEE xvg\hWʑtYG%h;7S4#> w!`;'hRBݢTFwsCq:-3D|5rTQEf`9;8XR'!3
+oY H}ὒcN
+4w#V!:NsR Uh98E
+-ڜ)1vw72$f)"0rR?%XCJ@J*\4q5ș8k7lg*Dgb&RCRƃ$m:z5\]u+QFʞ#-g>I9*MKyC#x~[ckܠ{#.A3.vOEo=-lޭ8هoo5lxjbgLW]B
+Ke[L3T>@*]Zr]yQvx9ʧ i`V\VI9 wyEH
+w%kÂW%){p9p5.K^
+7;"MYYcG
+ƺ= ";kC`Y/\ oegej?Hm+n`sN;ɥ4+Ąv@cJx$$fQ7Y(NWKq]l`\).gЅ iEtɐ*,$).B@NÂ52K QabLbm9]er҈KGFaǶ2_B|1PA3Yl/{b['E;ZtBYsRT2P`9`/vJe\N§^6BW<Ĕ)O'9pI7|/
+̧8w&EނƂL?2,' B0~,1Q-F6(vGIީo~ +֯};*9.OG&T!}"`ߨ
+LLKi="Yi<7)^A2`{u#`oM@;b~Z뢄>(Y-{Ex@ymՂc#)d+ЉMz-ia aE?s$ pv\:Ah+ˢn׊ /d4">4 Od)8scaAh{eR~)&,4YH=݊&f6Y.1enYBtDHU } q(ڋ(ZРEr,Mf2L/]2c9eky0
+2TX<ԡ?^z܉lvP7σ4tn||헺}9S
+Pٗ(QvԒuTs}듶WJageatث=bႜO]뛍ߡ
+%EuxjӭUBCZqC6gu;Aw*X( xD@b泗>-V8zk4TꐅqJk~CW2AѝA}AׇVaVvb+
+$d4ߺ7E ?N:N[}sa/uc3q d#j)"枺wG鶏Xl9.fLO&
+5Yhd qw
+_F'ޚbE
+'ٸ|,afvv_U-QBL=`b8Ir:RrC{KQ'rH9c6cɓCn Hd]jЁRVꆌƧ"?֑ ~&
+.wOZX vrJQVqk?nёC6"ʣDz D9'FO$m
+۠J믅r.V~XʌT~'gQ%CIK/5 t.8{ܨuE!UΰBD2K[p?ݹPU1ՕCR8 Y[n]zcLXTT
+Œ# f7.2GϘYC3Rrse \Sx*r!"`Ι. (JfwI1F.rRqvVbN
+ޛ׎oذsR"N
+|(U]0ky1˾ka iX
+Dmu44)BA?22nXщ0*%:1"-2" IHσYHYgen3yRU*ffr_BG&$]09OY>-dA+]tAy帯eɎ tF'-tsL)2;1'Q@iJqBTtkv89RgFrX c5B<Bn< `CB;A9
+9J<pgfie!fes1ۢc1KkM~yuݑĶiC٤_^h SD]m^Cg/SQ7(8BF- RfO#=k; C
+endstream
+endobj
+11578 0 obj
+<< /Type /FontDescriptor /FontName /OCVDMH+LMRoman10-Bold /Flags 4 /FontBBox [ -486 -295 1607 1133 ] /Ascent 699 /CapHeight 699 /Descent -194 /ItalicAngle 0 /StemV 114 /XHeight 444 /CharSet( /A /B /C /D /E /F /G /H /I /L /M /N /O /P /R /S /T /U /V /W /X /a /asterisk /b /backslash /braceleft /braceright /c /comma /d /e /eight /endash /f /fi /five /fl /four /g /h /hyphen /i /k /l /m /n /nine /o /one /p /r /s /seven /six /t /three /two /u /v /w /x /y /z /zero) /FontFile 11579 0 R >>
+endobj
+11581 0 obj
+<< /Length1 2532 /Length2 28425 /Length3 0 /Filter /FlateDecode /Length 29858 >>
+stream
+xڴzePݲ5
+181@Kk -Ew vFߑ~{1Ll=]m&
+?\54
+G+|TT
+`XY@,J oaǁ7+osGwL, J
+5qW% cos sv+ᄖlEi/
+1&A$ўTc\c86G<i5#)?j|\lT}{gA-1$_m /<!0*!-ݛ\<^~Eg07|f Dv#͍~[0A.jȜ,4Pqyop
+ޤ CP7+g'0CKF]5uHIʼs ;Ȇ&t?/;i9b?XbI&2|K)s7Is{y*`eQSc:%.jKupw[ ؛$s0R: l
+@98C24c%7!9ږ(=g^Bm<wö{!3)V (ɒi
+%0:
+ai87P.%hGs}=y
+æ6l<ʓn8e>eǩMya)$S n.6%wu`/'mdnnL2lإQLNxcfa7[egA -bBn\v6ܽݛ/"MuRNJhV=2to+&|Ё?7p_ ~A!
+ 3An >RL38 ?\w'2 EE1.EOmG2^:fdܨ"ӆ>KT31OMJFeC=0c rWwh(HVْ(Qx}EؠD]+[k' [CXƁ/*8 2_?S$~h=]%^ D_|HD;uϋuĊƪ{gRZm{3hZv$wtG1BT?}ckUc4}6kugeJaCdg+՘=;*J[b<Bڃ'763u_nfwVըa``^gy).4FϭEIB Gv}-]^NO;Luvm}Omcw8/ bkTk{3QYm/g+C]$+~!0^nj2ͱsIVz|7ڠ1E놐I[x"e%LBmZ$'p<>Ne*͗b- R~][g d8'n'[XAhMqتSdj egX+cI7_O\3]EP=hi[7_<Q ,s|rI[$$0Bu`L95w5t8xuCZEH̺jɚ"pK#<_ꕖSZPԀ[崼2M)Q,yr5sEѪGdp {Er|J˗ GX|]A"Z8C,<(#nrp{oY^o?i;XcduȭsXo 4
+ T%0u*T%Y8T?k;>E<CsG 1-eLZ=(C,v[_ɑACgP ߚ ByaE/ ΄oXDv_} =ѭˮ2?a|ƙe aʺK5}gdϣ߃ Q;Qo#
+pAFH1 ;HtWS̼DAT>DGGLrnV Y[a+GbN~廐<WAh i+'<3?5&ج<N|a
+(s03hʹ9U`!D2PZ2GPj:2$kBB4a36Z5D5 %4RlN{n,;Y_h[F"5AdPY#5JŢiFh(N,T(ǀxLt}PNxf~T/qc+Lq<m
+Jn.+%"$k/Uf4B. :KN9;(Iyv8^ѯwb4~b%Ɍ)κTwR!Ե^6b,=E=;F>ݾV &7MjI-CvfLoer0{X#}7 sa:gS}đgx-è޺bgu
+ 4 9ΐ>~u~Qߩ3#4D^puB!'=x|9*az_g /"-N&|VW BWOC_3!
++x,[6 yBxCzLtqoKN0[x^-[К9X*ۈ|F*PPpݵx?!: J჏|ŏXV榥-.ҞcN4w"v.;b?Q~qZHŁ+Hm*`8GN[ |,+SAВſ #[)gUE9|n|^ wjxĦ|˃o6{)"r7^T$񎃔(ǥ`A,г@ XJhϔH+Ɵw? B(Cʿ*
+1ubbZpE:P;wgTkKL#y-BtPZBuc2nm ܊}C_ODK^]'0 V>wSjnnxrа_K= Q>;FWBqk8UTv]98aTE}؛UlT)0˗'4}3oPtOqVvIV"xdW?B4/g1imf/}t|TZ
+sb/d4kɉD=z玶9mȆ%f<譙j3AnoKO]/'Qj*D"ze"A]N;qUYc~B,6˰F޽rƶˊi~#J7iuۢY;;M%}St;ߕ|`̸9 Lf
+ȴcC=g` 9` Z b'Ras0Y-҅T̟7c2E^c93tu˔Iɚ PGiP:F>L|o8#͉p=wXm=ݢ2pgqPӼM-3Aܤ|34OfP&Ao |12lQ;eiffP0,:/9˶gLo-7DbSmM *
+ݏ?ඩ["7/X:._)<q\B8]Zenŀh(AԑH?blD`Z.}F.zaj7~l:q} 7͜@ sj"N!3
+I d|Ʉ1L㝝%l. j
+u.H "EZ#lzHInO38WcWЖ<Cj{Jw&:;C+}ʉ.jb^@w84`l f,׹x Mۤӎ8FWz k1TCrDVK$,)vE}3j
+}\2\̖,6Bv+cBA0Uo[_s$fPRYx"huFYplN}4 >Td+v.9d^9W(;4]
+C\%p3QR'8OF2'}54_5t\oTnլZGyHހ+ow-xema- NL3΁q5Zcz씜y|U`'CKHo%88Vah)VhZ$3BC`$FZYLr :jf,ljJ2kͣ$9[]|=0J)?'phˉlUءpT/4.hW
+YY+kS.4d~p~"o`\!,E EץmP*"Wzq.`qX4`?Wp4QQ8$]50/0|._գwڅ0⛯]_K&e+G]"7H*Yntȱ7HuV6OmbBCKxՂᙆeӗF=YvX˜HC *LR]ыQNMʗcѝeV f*s`c~$oH5.!9Ey2twPi|`v5(Di4!ݝApIh/fdoKbTmo5~:oJe3/c3^AcSkv4RS-Q"ߞ^k ՝%F~umΫ
+*8/O3A<myxjk%B uh^Q&$ɼMwZ=R}sR);gc/>d l-Z}H1)nۀn `} R= i[eȉEr_'ii0(1
+"jF]巴
+}U;y RבʽEe'^/JZo0DNrkUJ{P u~8@ <O@--ܠC`=_,@ſs0Qʣ# S~9E;p(S}a6S`8!Pw}1za$44 HD )*I~|>o!aΖy~ f-cƔ}=*;E&;E~ppM[K5E0ġ5+a%D(XPZuJEܵ|/zӠْ.krQ Ka4+@$r`M=)RbhL4m㤔dm0,]ɾ|`!Nr;;.BӖHd\ q U꭫A_V5!j*߰&S:|4r,Sف27JUEO#X (nMQjy-ҳve<)Qi(hP4g " &<:di-^u|zƆ& mT_j0L7X<oTFIڟ
+`,lV7
+\Bh8i3gxŨوs-pT\UGVJg5->T:/T6NF1 a
+Ӧc49\i ~w=.LS c,-WeTy*).'U4+
+wuH#{
+~PveAȱ-:e]8J .U_2T?pIo 3?S>JD([+jGsgOM^I[#}D`B۾Ӊv8#wJ7mUr+w'Qe)1œ -&AZN
+V+*4 R|_gzZ_|nϛr*-WK۵v|V`vJUjHTP:h<<&l8%Z;/\!2R#5ݧUHi 3M4DdŢ{el7{?Hc<“۽PMV)c|e0QtWm N<_KZ E_{5MZa7LQ͎J0+\:P> 8=<(G}ph0ūse J>G&m6-9ݧ{w]y+q$eaDғ uJ6 e=MPY6n*xtKVsFj9
+;(,,Litbޗ q`o'4SG=le3uxY\!)eAg4 _8Gd2(CaKHXSuM 3<D55-0|:QEA'&YJ[l /5r\"j<)BīYs()5s?Gjm\=\–[˃bFJ7 'ywV:Շ:HKh1tWכft$FGQ ({1'.evkT%}xy> + )Q/yhX5sNpB?N80q gФ|A)XiVNK ˥Ⱦ]j#BҔY#$583TqI!N;V9?s0^G>8VL228ԃD-W'|1
+!Qiܗ$|ߡ2&zr["-K}T̍n~Nke-l̋X
+е$|>}1))xxӘMrΒ$aZIV:<Ԡ51#kcY1ҫ@Z[L`8san Pfl*~ZC[R<5A[QAkb++ŶH~Ue(er޼Car)E@潃Řͽ-RDq70ch_ &/6Vݏyg7LJq5 a}1
+ZZVRKaccv,N ,ΞP X>QNmazaVeKB? X VSFy
+9\
+S7=+nryi!WzU
+-/-3#C#MГl>Ej e%e|$c$)p}X^^anmwAt"אJuեzvH<0_:1~3oHG5!z{b!:w71uF|ݚDمq#X审iyK'.Cc;l'XEgux>7=3g\M$P{ *ĦM@Bcb$;xoHgi!xK1= үWQcse[~&\0IFc PէeN
+ď\Q=KˡdVԵ6p-/dFpxE5*2j^ Tҿ6 e)Z)si1LiGXvzwo2Mp+jHrݖW7<G&'MIoN8+='Vq\yfh%q#4pqq 7G!Z »6G {ҽۖj)zNcouCt2OHalޠ=RD);|xd f3:w[&Ïp 5mѱ^0~MRʭ[F+Sg6|+aO)EG֜=7-B0m{gN
+6"C}Us˘jW<!=n5v͌u!̘2Ąazp<jHf]
+q&WA>eZsD&a&L,(X'fJgcqaR͏*[@)wnEߠ
+.Օ༨|HYԌQ8±rN n`ظ紏i(9cIfYkE>]BlCI0F(ygndZ>I% `Ԏ_ɚ pP7{5*Fڒ۴^}j&\ T~!?7Rq,[g`܏qr5}VjU}/U$5A%*},m~feGJcjie˜{)u7vBk,h<(h FҏhÀ9{H$oa_>\ N  iH_NsrYo`5.bPQx.(B.`ܙnfGi.ez\]ӦӒB4ޫ\ >)b?\=IӴ`{05de٪ NsQ*IVԏ7 N8W,.[492zwq8F"qSfmbK}xɋ.dKyr";VߤqT|<8ar_y0WXX?e9eWxy)~?~,,,]v&9ʨz'ϝa%nr_ǡƹD׺S@a!x(Y -Su%<r$ܱc.AI9V Vv&tR%q@rqck%%74(30g{4|F̠P(W Z*"=$%xۖؽ_^}:<mjlgrvSa⣵XH8ϕa2yYŁ#R~-Ka>4\Jq9(?/4ty|tYU6VwjoKh¹
+WSdzJE=ǵ":s){_ b}
+s~V q>N+/fD허;5Ft ֝'94Sz"$THv,Zqԯ Q1oMN4jTgIt(4f$V]3{H'2Dq2^MIqMx31M>!(}$9튎w*\aM%81t5V~vw Q XP䜑9Ro6pŭs ` ~"$-% O50|N)xdbaS Q R4puɑ| Yhi *{_tؾ-:Y
+ Z͌aikt ԣVi.\r Uy#7^l_.PtàLEɘe`*:pEFDllJ D'56Jޢ0sdsFodp [oBAͧSjIqG`etyKWϽinݙ87춑KZYrY[韜?WY1_5q=^FܗBXsXKygeJc_ϻ-/#&I$#Yڞ؃):dqS%A$Hﯶ~]+`o(Xݜl߷CM\xY9USƽ#c1M>I2DAZ7hXh0*"5ᰑoTúA8U:|3́iUwOu&?/a>|^uHZnܥZT{6"̲[KbN<q
+򓋑h-5;Wg@6;
+Uu<k[9!Yk xK9^ ;PG`ut= I{Qޠ>l<0)[ּ8KbֳFQg+n?xao߳}Sޝ M$Q$3.y%Fd'Owi )K䷋deWS8xC7!:k=vfvcaI^oҚO$+' %arΏ-GBɸĢO3iٮrϲwN{\[Z\տд,.M}s;&â$֕h\jn w>zhpAf^+ akӫe[SjU~N 2iN_঩[[L*Mz7.̿o]IU6Xoy ;)ˉM;Сj~SzuCp\. ރ<y2/!JΎU{Ѵ;:"^r`nYΔDdF $3yb*%[?"~C>31^Xm:hs3)gd\;pP.}]6_fE:3 eݓ"nSTI0@tIfW&B, Љ%h.F[\/L#r?+jtUIy݀UcUÜ75kyeMuo%9֣=Z=.E-U t%òLSZt
+[ 7Y
+>璗~n~W_U&߂<9
+
+oKH4~e%k0<Zc2W-rq U&
+թ!/ bDޅVXHyﷄ8<+c%dƟ~Q$ ?Y8vqadpfK.Yu,҉yŔjẸՔ-UW/SվY0Ȱ e5QLʶLp'.,9GkF5ğ:vSi~UZ@e3϶\_Ώ$ziXSQX
+#*xIW ~4 E7o9#!LdXȇ1H)ӂL?[ Kk#HCU~}BnCӻ9O?ly De>e0?6`I<#MXr.i=$Mȑٞs0 JdEqfsA/[SK>C%Je&#xkzror=XǣѪyQE&hgurd.qc;){䤛MO:4Vˢ~Ywu4qhJ4cp.s2N~zw,r,(#ϲުquX]
+mՈ5)5"+[z;ul(Hc&=Zay =
+U_Fnk F_Ԝ jj۶mkk۶mvmny9Lf$&CGZRBx{h|4T1|Ov%ehChyib7}1+єj\I_kIg֫Tҋ7~]ws"_ֿ͙v?R*dQkktpɲw ( +13b^މ]𫘧a(&]&[ %&@<[!]n܏M*fQ^j >b@XV:AO8~\GS8+ B8͟w"Stk/₭a9PP?qAF_Id
+Ag.)|l;,$+ox}V]qPoP"`ɻ.mT-ӷp%x.@m$f㡋Z
+ )'pXRc_L "'G?I#uw6[Z,:XZ'mzd1䍸/(~u?R}'okLuH %bo~qUp PRh$(:XVf! F@盵dHGrj*}z(45Ѓ <҈drTrgK>q/<;^+.O]*y'D5lrtc^OW"'zP8Sְ] [jw٤dݱHx
+?V } Lv('z iʎ>Av~9ID+QޱR:n$>ld{=w7A + y5( tb]US\aT"UK#yRk%1)n6EUG!/Oʍ9(+hF#$kb\nFZa)!
+ֆ&'#Uf\%9ZRro󯾤HFa6@/Q
+@[#t܉Nc"^v}ZIg&O$NٟamGr'Mt(ď`# \H3 QM؝jsڄjl`wS {q[D.׺1U8!ju7{wI>U
+5tnsv \0>NFxh/Xo^Js>^Ku0M`XF |kO D<
+7?_̚z=
+`xD`:
+LWjSf9 @zM%I 5>,N婙FwW(ΕAaDiZ4.+2 R-Ƿ*wK8T_sѴwo=^]L[oe?4$ iAPoKs%F `ڱ AKw}魻RIx5x^ .b+'oʤA54TʯGݏi,8Ciz,0ߚo"N]m:l\6t0<S &b1t3fҜbR
+g+82r) g ķrfD"L3J"D6__g{=q~2S NT״"hX]% 킹]nb<A YuT`mP;q'xM.%ߵF~aew ݩ8Vl[@dl+#B-%r!U;d`ȹoo /x^
+f P7Lʥ1 Elb 5W0cBy
+%G㙢榠<ʃE,
+Q
+1# S
+I>%xꂧ^9l@s4?҇}]IT/6
+ }" >IXaՋ"Bv+_'&G9阴. Bs>₥Cf}RJ?.o64I[11EQ5;8˅ٰs5F&ވ fgyq%ϡ:cW?[pYfן(B+ks4z/q{ӔޭrySmhd/UqW쬳GLpS(RifrGK?8P*CudGS t&d
+Wq"Hrq-c6U,h6t_=!U1(39DQ|ʫ=ryѻo6at %ت 3^WV`M+9p"S?)meIՋWagUSE'ˇD3I,[(3
+0#LCA7niAgbc [?Ee`?oG9ĘmFܭig@[F,^rOA HfZ(TJi6h0.+K7]Tj c ҲkP FJ'ϧ$ T\ch _g]yf&sJicT큰vLиF'2 b%j'L+B/޺?( ˖>NO2'`)j|0J:cUzθ/ה2#^oMEppoλ_Jw, :F9#%(]+fY^ZY?*,b,J*$_ͷ)oZqF92=Pi2 y!^]MoH,xI*1MX5#:ml{ʘ-p]X໓02Zfڙ{Mhc*au9cju:NAfs ׷*1bwUu]<8Z@*T'!Nsd޶7m@GFpI\.{Ep{[IQA- X=g-FA^.Z 7'(sx)|{[
+V._2ٞ- ) FQ; -L(ȯPt+j.Fr^t(AVnybVj@#"C -&bl1p/#+݄S tn|4So7uAK^ӊ",FՔqȪrfӧOrZDQ " c_G|p>XrH}Ji6Jp:W :0Y#{7p*.ugռ4mR1MKHPtaiM-YSSIƊcJ<4q1etѱ3u1d
+p'mrZ6XayW, P[sb*H7hG$`jD0|U.l%vЙSAXWɼgQC̒19N$%
+ݞx@կ
+>#%_T&f
+\kR 㴣%4NDRxZbw 8/󈏱&uܲ8bw)<F/``hZw>ZT6W`3R {. ĶM.W7V(u6|NὥTXWP;1.Ф`ah`5rMe;
+[ZsQD)H/*+WOr|P Fl&1r ;2mXG1+[z;b
+wZf# F|~s+Zs!
+oPeD8te6ma qﴢghxuP֕63WYH*HK'TTO-BWI`Ot pyE\pv`DmliM/ȓ:gZ̜w-+Ǟ'6lE$;)%[BNk ,V j-(4(9V Tzp-p7N&,-
+fE^X1DlV N)`<z-_{D }k $-za<~
+ekG Nh8$<9ZGbC1& _ץb<BfZ3!͚pR
+Mxu:uDG~nt3[]>fZc, b,yO6!|MtfGxe()^و4q>+)qU LH25k:^kCݭvG'^mA{$U埆 VO#
+
+I7u,Рm aj(ؗBϺ.. r<GoZ]y\)1 Rä\!p+x
+f@{ 9j1lŏ=$8:(ܖ3e-[ݴ(dbuLbcg$Wju4Jp Lѳrvs¬92bUt:lHg0\*5 KLpZ, 5ζ_ivi J$$.=mV,
+pͩh~.?fųbS'W I"S\] D-}f?$`|TUð&ŌaZG9A$:pc
+h$ |GcG2䰯*TbC
+ mm6TA2nNE*=ȔgK9iͪko("p{7mA֊!}Hy}ĩNcrb8(%gz0B [[3R2XK)l Mr!㊔uw|=kg6ɕk]e)h/sٲ֏-gn5֗ȹ;l_z @|8o!G=– %؁t"hX^_AJSp#Ԫrxyf N+,+Tj<ūM,&
+q¸qFdp&h&
+VK( 0 *, `rЇRO`Fs&u(+oqaKtpln/
+טV2f;y{?3sG- ;~^~Kvk,6N|
+3$eIZYʰ_1Т,kX35;j?yc-{so6C#t8Y3 MFDMS*\ Ard7wg.ƾM0>y"ŽSEH84J]ZuYQ|V,)o?P#dN<n<
+.쏼eU6.%'?-?
+mM
+0%$o|PĝaF;CuZӂ5jm2t4NNE.!4ٚA!+bjX$4+'ϱh%j~zV{K95:ilJEi~x_P+ ?ir c["rhIP4"c{H ۮ^@0[ՇU㾪[ɚ]!8\a4GKF
+><s,јd.׌r05um} YBs-w>&D0Mlx/q^=J
+TB1"
+'
+:dϤ2 qGNne(l-{q_et+' 8=e/jha9"h96#)7 宝B8mI:q{IgzRDG`{*:T7ݐ1BzZÍ}w%5>BC &`^NͿgjzUN IЅ0sHcvoYXDX:
+Sg6* tj&O>_?皀>Z!q>[2iG
+gewi2:
+ 8@+"{:0 qP3ن=3wrlY\nT[pb.04cF~<"a
+"< ߅TQ?}'[91/wKޛNƄɚ PZj&k,xyT$ADk Հ /[TsѤ1@{ۥUn3G cHy- `:$6Rm"12eZ o4зw8hl =ac= G<> q6W@^d-n<Ap<$ILHy\wG㇟D:A'k?Y%2l
+a1_9R}=Q(-+H2Cw%js1ј=i g;?1@;U집&B}hoژj$חqc|}.en۩
+̮_;k&7?VvϪ-KBQmag!K^{U;ȟu~Ӵ~{&f(Rk ҧ\%='^VY<
+dT0خot`>Cl+_)|h٧ࣁx٥78 ƞUjdus$hueý- |I(9C 6V:aDt  LHژGlT҂r=w&d3_1FMf/5JK}JeQK*00S*0A.ᛰo*<9-v<yuO=l2?KUr'U5Is"\QTO9] ,GJb} ܫ| ɾASc$㌘si.-O.DȜxees.%zrI-Ruh tQ0) !sC
+dSwArH^m
+W(nQ[̋B̓-zPx)4ۀ=(_7` /(P<.YZՓ*􋖂<+*jm\{wе82}f`NYҋ59.[= t+թN65 l3(h :qCAқ#B ڿ;bZFt膳^tRS&1',mc@^c .~}g5XJ:،g9{AG/jEf<?(:5T)Vgmxwi]L[-HBqAÅme.?8-sl3z ^y+#+ܿ`b<gW'w-)W +h΂oIb.<$n\ng
+endstream
+endobj
+11580 0 obj
+<< /Type /FontDescriptor /FontName /LCRVQF+LMRoman12-Bold /Flags 4 /FontBBox [ -476 -289 1577 1137 ] /Ascent 684 /CapHeight 684 /Descent -194 /ItalicAngle 0 /StemV 109 /XHeight 444 /CharSet( /A /B /C /D /E /H /I /L /M /N /O /P /R /S /T /U /W /X /a /asterisk /b /backslash /braceleft /braceright /c /comma /d /e /eight /f /fi /five /four /g /h /hyphen /i /k /l /m /n /nine /o /one /p /r /s /seven /six /t /three /two /u /v /w /x /y /z /zero) /FontFile 11581 0 R >>
+endobj
+11583 0 obj
+<< /Length1 1705 /Length2 21472 /Length3 0 /Filter /FlateDecode /Length 22554 >>
+stream
+xڴspݺ>LI2ѱmۜضmcLlۚdm֗y9sW]<}^׺UUPAV(fkDHU62010
+;
+
+2
+n
+]/_E2&mې4^b!?ӭT@!g8zW]zx.`//+L&|!ns3?<%SITDwD!G.Յxʇ%G#9aH"FC?!ϯ0X)NΜ^=2ݏ%U瑕 9Qp!Ki^j$'eW|Mw+~* zcޏN(_|%R؄WF1/,D?R$lgxAt8J8T2x3iDA@}ۛa$U] A$H(c-7;/6,U@b=X ПvTo1Kʧlk*iXI\C/3kTB,*Z7gZesdO&WXhQsx 7{ Dsm} xP&ȫz) iذ|kWR;̿LxE,gݬ6?}>9RYIH؎Hӧ٭sO(gdTI;}xt?
+)ۅ#,:-,Z>
+֝eM%5qhR ,cǭGjE68a G3'KyB Svj\QOR6eCvr]Qw(b7"Hwү$ݸU ӳŅ6T[{wpיe<bv?䪜ЁۼR |-*F^W#U#L'=[dpYRZ@rFt_jlO],"g3磺 ݝ
+y#ɗcb վ`x htG8s*<w3`$;cqWm:yR/ΒKnnfr^6%"<NJ!|8xqhV5}VS2ÍrCPiVEɌdn襇vIǿqjMVq$rld=p,RY
+$.KT^}'d_BE&nj@fXV5@ _V1cnM:dǰsc'se 8ۅ@})W.ޣ6[~VTkw*bK0 C2LdMXc:Kz&|1>S<4 wu 7G\peE4h Rau93 zYaRH\r D$%dXI/q1e2#hsxR_N`n+ߟ8HGKkloY%*y?8Qˡu%́۶ko l#׶Hxy eiؼ֝d9Y+'|מ$ġvdŠnlN~c5RDE(L OL;Q23U*hv#l /bfEqF4RxY9bĔ1vO'a@k /w%z k" %yY?GaFgauaw`\3d10R郳Q,5φq˫79aKo :h kҎ~w5it:O*VN`Mb }& ; Dξ~S])_b:h5>btN03wDU#d2v -0\d7Aa/'Bv>Utz[!69)
+~H{nmQ[X#d]Z{P x&t-1PiT*qْ29r ' I
+rIhoUjND
+c g<?M庶G+)CLH*/+MzS>}4BG``{ z<u= ;Q]ZvK9jC_WP
+a RilNny+>VJ"G!?;%Yn,ّa2/#vvK\8%BL-!>K⿍jT@(\ݷk,S؜Q@ssmZ7d9EeXDm0|۽î6Xk Al%(uWMԋ{Exs`QG0oTwMI)5_W)zf4fbUg_'=df\ivF@(K;}1$b|b- 7MF'"u{u D 4$3M2Bf5Mw3ڀi"k›%:Ȕņ9Q8#x3jnػy4rU"(! L*ӻͩ<ݟ=-
+skOΣ=`
+ю]ts]M623)Ժpvχ)UƔTeyC$ {llr}tߤqGw#j,K6fY판w2'pKWN~FxTA#"O2d S+XS$\fImYo
+C4ogp%ѷ0>
+i&+F}oU7{H4> >CfԲ&MPzBt%a<q6|8mHQ66 ud<:qcn"MD6WH\ҝ2>=foY[)A:Q@XV:I@.ʦ
+=k ;;6vtţ0v>f][l x%_g?}퐩q_ _}e($N H^9O
+O2%0;:ܡA?/RҷġVN9 4{cxҏl
+60D03vb?J7ZK
+aqW,E*XXǜ<l<װb ^U3Ipy΁ u/gJ(ǃ,W?w|iY n8.R3o[5] H I^F6i0ҬbC dnh>ʗf ya#2`jU~
+H<HFm;vzM 2 +JLi͌Kh7*>jy1
+ېt?Ӵw5
+f
++sHya40!S-ʂRHo_CGv`8?vJ##̦dD8AZ-Ғ.UZ(
+ ?`.ןX}Bd- _6%4
+'|]M5vlX\ο@ )nBk JHFջ;JzpKeDݽ$-BU+H-SĴjO!YȚ IDNҫX3AԨf`aS'{^4W΢
+='|_PwĶ@H{:twT$BL[$?jI<B#R`˝@TP-~ɰj1*6`t`k8B]@#Tii4b%k2 'Wf8򣺁FWRFF L<%9I ܆%gr^+DCom2vˠqr^u,ݭpư 1x@: R}
+|
+A
+4s`T 9'9.4jZ\ I^^BmSH9PV_}BJ`Ga$)` -5-p=1y' g%J-UdGboθFL{\M Q_N`1:BDoK&rV:~>ǸVَ/`
+wqŅs$E<6/Zo`pZo9')\^
+vcпϴhvJɊ)mdPz6k:4qN'xd^2١Pz+P]x ?!ve<(h;YRmUW*2~ky:-N h]05+_r_nxZ"3NgFdKo#xgO{I$X"УԒwK]ɥ8av" [5˳SN5HvgNn5i7
+b}٤B#)oFa;-
+d[\y Z!++w :H}2xC TDonm,c90Ca$lPwb,O6O=4GUpw3ާ"qx+7UI#xń>}7egtx*%3ھ,fOvR8'm6}&NpW7SO\\Qb<G:&W`1С!/K(^
+Oad P=N u/GuF[dMah#к.U2os15@tֈ ndI)GZF[#>ʵ:MsV*& ү5wn@Q67ė(
+,@nڅz
+g7%Yhu/:t8/ ~[6۷ۧcTj@)@ȇˋQ:KaZU#S"h%/*O=Gz$MEhT^\v㊡qI?JlNdL{f_Iܑfas$XDrIj SK\34jjT)TbY1‡NiH$d<+=lݶ5s֋pGRsb0XT; 5]RPg7XN
+[lAn={ÆJ: (? 3NI<e7 Okdwv%;4Yi 3x+FiL>Z"fIryżzh̾F]ͨ]": D!gҺȯ`}tR #lBt60@rn&aA ;/uW*"ehL䏈\,j@m"{Na 6:4P)||C = %_x7@7cOp$ 7R$ߧ`}#sV[QGQfw1gڌc8Y
+tid^+r$[u6 P_{nx pϝ@Jꤸow.|~q6gb$\ S]ן2spL\^8d{GaF{ꈆ͑& NA_>kyx;M?KTRaN:k({!S_ז7faӉ(]rjY>U(1O:G% Y)C9Si^Xb׎kU#T:\ H7#ETI 3TZ~b? lF0hƤOiy EHK/dd_F9uo9[)F:&+dŷQCa( `Dc
+q L_?W Q7$X
+'^ai-5aPPqK7z~{uo КMgZ!aoqcR1:Y{ Ƿ`R|yG=A, %l)O^LX<Ab˧ I9q8Lȉn$jLf#z5*Z Kmۤ[# YU$;.6Ta1<W[Ct3Vq*dPE^G=Mq;E+ju)~6JnV&%c:54?320qk
+L'yS&\aLu}si}" z݌:So])~v'pMM9˪`0,LDl2 a1<HB/:R]qCۣ
+%atoZ-(y
+Mȓcv:%a d_Tb;-Z$َCJ/Hp\]cBq'XX_Sz[=ϡHrܶbֈ=.~(s* qOt>uFgUFNIXuH>FD=O
+"#
+g&Q:@2pjKTKȷe&ȻjeJw;Y<ΞbkL"<l-^&o?.I]"n'%3äfTJƶҵ]9f
+g#x0hOt(d U$#N{ #0.)QhڔvgИkNf
+sNӫL+BNY|6c]1Pg e!Ҩܪeg~_18{Ց?|.s90m
+i̳;KAg}[ -/Qkh  --@ # xvl`yL1DR;+J>3\$PUAk
+&f'mUZSKWk(8)2\'+4'CeJJ@mOb(dRc̀}>6|'.RuK[r9u޸aːQs6"K\ZR7¯D32~3GX
+%+8Cv$_u͏0Gǰ2.>q5Rʂi0GuglVR Edi֖]w#x7a[3r YfR@;!Nbȭ6{kġ݃<߲D>~X3dؗ#oXlQeSjw@4"eLӓM;`MhQMш`&5- {~&vdÛsRGTXJLEVvg'3t|.W,iwvZf0i *Pl'M B&4ը")+JnJ
+2q4b4\oϳ1>e*lnJY]6;v016Ÿ[FQ.ӷc)n(Ofc\ ):g\SN}Ib\_
+
+,ǻ+2L ?}eN|2s%(DyD <&\r޻^$/C3ӻ8fXwxG#
+Gp_3Mm!%dF$IQϨ2[ )0DfRsAM'y:M8EwNEv+x8օ*#!-ľ*.xM2wȟtO:hOtv.K oվZ<e+cYt@1 X;Rz~tbTAdHo!4UuȡKT۞; ػn 4]:ҿCͪ4mLĐalt$ˡ#;ų(_eGDȌu0zw 24ސQ{Am)4DނZ"42!_Eiΰ&+hVe9եhGGVuy =%m1Kq_'Ґ%d<Ѻ;3#R} pb )<ӈ,+adP&jj'i h
+ϨEVT)GqcapY1
+G3 [όq;n3[Tdgby_ &Gg #0'؁sS7eQ;tMQ8Nj?갺m8C)DmԡXR<o
+o0| =S<e τ):"8ReЫ;>> +}a?iff૘"PjOe~qZkWE:7WD -xfTM#U_F{[T!r *E<DEXӪpBZ?t(ﶉ>$@WN(`~ABu,_3{dNMڟ#wwV8~%.ܻf.C+}/-
+v{Ѿ YIHIM(3W q|a/gbyD-Zsc/gbPPf
+8x @fo>qE,?DN_֑ڭ!dY $s@b!`'tHF.{cW/z2xWD;L+eAP8>!^)F0B)LeBz9EF-0RȻL=RD&oۊjX~?6KuhOTqH#WTN#
+5}(ǻb1) AUa흅c4cրu4+XunH1
+Չ}U:i_<d[N~@ W֟xl=>wv&ǺpPpFqM2w>ʙ$|筈QQ:{UMHnCU>,&w-EncLRHsgiuSm a|AYE:K c3Wp t3f{KB'*EXeRlï">="?I6 0Lx8n|*HNe.<HM:Q_Z)1
+k J^
+Kbswk<RɏwX(tFτ'7-]%i\!) ӈawScm˒>G pڨ';gZ0 HGsku? a㗌>Jr*)
+vU#jZI?مLNΰ^%I!'̽3aQݴ[A|=€{v} ;ZMX/ߔX.,^e*̻.3YVrLt>W_ylӏ=r07.9I:8S,PvZD `-qV}2ewؕ.<wDPR{}l!}lY~uXԯkC)zv޳ q2z,9;wv=1g oE%,*I"Z?Pw`q6go6uYm\6!S3(g " pIE0p|yި
+# 8@sm>Q"3`1o<xH`T`w
+
+F(,\ S·p =͘"O{EnC °/)4~k8M l٠oV(oLS ZO`{=d$iH;)U݋5B=D^xRmm84$ScE8eܾ-5,>gJS-d;}xޟ
+yHcl2n+cgRwv/n4:q 9}vT%mjvvgBf]ᣤ*iб d\<{ZA<lKM^cPwM?0`ǬġsS >nBri[wKa̘
+DY`UP7M n0*_tl8ƛ#12cZi6Blf.p`az89h6T 8`"e2 0zh
+fj'Dl7݇@h/OL2]G֪ ?-1Fg--E΀b,y'o`묃IY<UƐ;J[LAbf m
+T ?]Gx
+`K -ZP,NE}]~a>״W66d0^ߣ4~]L;&ģC
+9#7q{eWaCio5 d<+_T6q$v;%k*r_l[
+kD4O!&Oޡw6S[qʣJ5ϼ2+hsQi*[!u;HWg3hN]t+SͭcmPl}=>/i
+N3(P8քdl9RًUΤ]@FFҽ ؗ+gOl乁!AUc=Fc;EqEFJS\gRyt>u&*,!ևA6q#,nc+8;;t=hg(NTrlogOŬW Z:Xʁ"%B΁Rzi{֘Bhm1K88vS醞ntDɄ=$6QkP/}K
+ᩝQw]Z uSRv mDT~5F\$\ǹQ^D/oZ]`'g(kIb]6"CI;Nq<&AYXCť? EmTՏ?n?rf
+P
+zeE<$8Mjl N8.奵g[AR8 8/ח)Bk.h!kյ is'qnpҲ̠ G;,~ hZK?Qhi!zDVvEְ\W
+Kn٦j|$mG.1`
+g3R9˿mNm]yD ֨K1D<@ S]}w'қҡ!AoP7r񇐄 |J?Ju9`ޖe;.;(b摼ֲ p1->OC-byǖg!D̲rrϘv#y}Pe|1}v˪\$&-іXM'dPeex*r \5mf@J !!& CxWA\Q1 VPh<>cr+xކދ^S{hC*判4/0ɹ|}=Pe`u <Jzo- Jl A\˭#W.u]]a޿8j,5nٳgxB'jox䋁ԆY6bkpڣhR
+ y f$v=ukK8PQDUu{1.Q͊<Kw>_._֍UMN5w% ߌtq nĆ#,a.#O50"R4Nłn! 1Fcp T$FV0ż]0 _^6:MK}@P/zʣD{&t?F}γu[@4zٖ81!H+w'/y'mw5F 7ʊGf1Pw'k"o:^Ξ<9 | |j%sl]e-TmShﻐՎ NSa#|!~XAvD~$mnX?mY83z2^f JHԱgB2`įnDqQ.}p7m~ċGI 05=vXZJGJ{Ţ3@#~jsPP]W4?1^fȂaYsQ,5̭Fd4V`SMz5zWzsJt {)NUB};_콤֥,1:!uX}w .u!7gצ\RH-n,W@yIX+_@&1ϱ>3TA4)m
+o=ӈ^,ȆkV!EʲJ<Nc48M,!-,paX|ѱK ޕN텿]*PH8PyJ)LcЦI|O$I1P
+`ωj %E[z.9>̳pO"@% b;˟we#xlO
+ѲQ>ɤͬH_ږY,`96%9c-"r;:z{':`eUSэY^Iin ǖW]G]SHL]D2֒lq&tB{l]=R[asW Cknz-|i&>BKUɋs%i&9
+mP?&sY- 7+`q钳S<B(I~}(w9;#_>B8
+K- M,ߋlC!(|2"4hYl)l]<[R4ɠ>ar "tz4w+29 die
+109gаjO\7pOc<ne#XoXr>CvaS<!v.T2Z_nq Cf!GcH8U* 655^؅KGM;=)E*8yXO cJUI8TkFE.haSCTIT
+*>D |/l.%|=u\/tEꨇ{1v
+7%G"2 Lç#\1P?+ i:L8
+endstream
+endobj
+11582 0 obj
+<< /Type /FontDescriptor /FontName /WCAPHI+LMRoman9-Bold /Flags 4 /FontBBox [ -501 -299 1649 1136 ] /Ascent 700 /CapHeight 700 /Descent -194 /ItalicAngle 0 /StemV 117 /XHeight 444 /CharSet( /A /a /b /c /r /s /t) /FontFile 11583 0 R >>
+endobj
+11585 0 obj
+<< /Length1 1769 /Length2 19553 /Length3 0 /Filter /FlateDecode /Length 20656 >>
+stream
+xڴeXݶ6C ݽ).݋Cqw-Nqw(o{uy\ɓass{<I(HDL ,̼
+r7q\
+":,L
+~?Pt/f
+ݨW)C5e-԰B9=K^U-׽?Ӱ)#-Va;} p.7G[ Ke)wa:^JU];CM=
+xTԂg>½'eA.+r1–P+):Qّduyڛއة0 ##Δ? 09y"]=g}W]V[{H s%'. :ڇYPPp#KP6JsE?Mk5n^0D4C#6f ټhS_ o}~w M6
+M?E&{ D
+ O/d}fItaGGq4'QCnI46܁ZJ6]q',$E=@U}j+V8Ply}j}r|[oPRNSzCe"r["+pnQˌ)+Fj8#4vi(
+':㈰l$`hK&aPBCZZy{×WdxT,]Dنn~?Dv_mBW}3Pk>9\xځa\˒]6BGwF1U(fNE˳./R
+Ϛj"zͺYb2ю>{pH͊F;핞p`0a4w#
+Rc,l`'c|md[#壆/g(`ٌKlI`a#VTaiYĸm1$Z[( oQQ ~Vx ΑzqG#qe 8HU!gK6cK/ ʒ qz<#+nWTxω1Cf 颁@i sh# -O[l r=XݝOs.?bNj>)=ФPbOeDb6C.Cj:.RvBSph__cUEdo\{%5E~#fZ._.?ˍ
+S( 
+7I׫^cL;(/x
+DHe[{=G1;,iT_+%<[F](~gKgsF#z2Q.!49Q;nԈJEk/)Bdee]T{i3uhG5h2h#j P r.V<9%O!qMٵlEI!tnl|_6AYsr&R_H/2"2$$mX!=xgqg=y WYG6Yf{8!9HȒgox8 I~
+*
+_`^C(0&m[X;ξ<nCj&K^,4xj;잼PmSX%SfףxО@Gy|^4 ל Z{^nP80/5lւt 4ۯ:BWގ{ -OU`$贽f{T-IcC`%HvQ_d-s*Z+;jج+;[bCo9'|ic= xaSa@ؐM.a[3*!R˕F̲eJ^-yP؏ F'I1֐>6mPT}oܫȁqj@`Bsm*g'S`UiZ# _R~C_oݏF8[0D$<!d4T "ي>GlT-a
+=r;[?x"; ;I{͙4]n#[356B~X:= gw9vKDZ/kffprdfM䱋 ) cZ8S wgC7D~a4E
+9, ),@?N{Ȇ]^*\HsÀ@baNn:C2ˑg:H_`S%#*SN3z]PߡO;WEbCڃ_5}go5l2Wq/?ǟJ(
+PbmaJ*Vf5j%7449=i
+Lcn=JuI|xX4KGQϬo P03F啚[/xMޒAj_<'ڎr>a6ݐ;wg |$Q96?{* 3,eB!?!6c  *LD붞$ "JQ884le)+820!d}1 +'|{*_'|1}9lpG
+[C96Moy)|^e-!6<LQ/-<t޹3 BipxTx7`Mt8z+(H%љC%T,9L`yץ<[+;VASGJhYXRAc>0%3z$1:%ܩr1+$_/h!NvV8*ڢo[#ܞ8ϙ#P_KC:ߺs]{w+r4'F9`˵w}~{w(6s؈C-
+2dcIaEŌ$T^{Y/ҐrTR VjdYi;aMC>V =0Bְ}y%$)6{m}S?Lx'^S)x[$Uw3Z6*G)TdNF%gC2w%dTUvB֛C+D|8َX0] V_%\1d=Z7(zԚe#g?5Sr~.@/BrCP*xbɺh/I%,FW-K~T/Fkz/de"U65ΞnϦ l‹
+ ; ,n
+^X̭R,mwSkʔ.~LOvDK[n]6s9gy
+T|kz/:Tmͣ9@FQ.#7TDFMx<!N\rzBq!yO Fj;! qh۞8|ahɜ"A"@%mգAFxQ}c0 |rnu6EDɶ%Z_K_Ovіgp' 4Ə.L|/5hyY>-=Tb\(:d"lpS$8#=pUM6W$D3L[c|nG殞%wԒ] }uȏD1st<\Id* OYoo/e 3g̈sE!gг'mH )h:%`aI'd]#L=c%湄5UpU ݿ(JD\Zu
+*zm0 įe@f\u:zu|%a>a
+)"7)]dR`5z/۟?gn"
+;q)d^G`Q߾fKx-FJC\#.y⋛@P7(#axɰRښ≶;R,r#@/GY*Tvq $D]6\PX}R]6[t+dEGׯJ?(+^ &mp)b_#@3>: h25+%HA&2NkIW!` XteZҫP)wbH5z@nHW8&H|+ѻEIABU͵N
+=s'=q[lhJxEibTBe~smޚ 8tu
+K9|j9{0u6M 4jh= Z-mb.YHF[N0woss)#+#Q<[ cx"a˭tqF)ju`gJ%Zݮcd15?ٚ I)˻lL-{<HřA݆isrGq:ff_Q|d1 Rj0D_1)&< 8-'LK9U+5c}6BӨz;EhԔRηE蹼79
+DSV[
+U1MՔ2ۃt*T(<&ްV8Ȓεw/cFdQ/ɘ0 1ߚϩD){n+c_/\
+(=vyI=ΓH,yKj#4mƤ SӚIHu 7)}U7iڝw'ߵgo2hgæzB[N ϝIl* WLP)u@+J <UrY0HfJ"; OÏ<`-CVx
+3Pڬ4!vGy`&FJ;(e計ҳ'u%FZV:H*_k DFVsf\W4`4PT xfl'8kC=P3ưBd R~zBnxK[QBͧTÝ%74')Qď/T|f;lf;Jݖ9!ʇ_gĩ7DQɢv<CC-K:ìY<[#"fj#`6SH7`ÜM~0q9:TI&T̪c4MA\҈`r
+~Sq\<:ek!1`HI$97k\]׵Kd>i\:Q;B/P'Uw٭(lwܗe1%65TGaK@Cq?ApshPRXZa>p:; X7hRW7vnVߐT
+sԇpdLnNn+Y"NEp(KKkbz7vjﵾ]Nud`j0;kҶg`Ud
+nTu,tJ\W8M
+⡣Y*C¾+m/ 2 ң{gj9.㴮ʗDatW 9R9tb<3v-Zb_ahRNF$*&С'cM[N`k^bT;:Zzo*`ʅhK\AfuANICkMv-ÐYp38VCI#MIdbo7K+9i޶?G9{/Kz◑.0&m=ND''پ)M1RiUIS*ؘƥvg:
+♝w<+8l\DWHʧKHܨ&<{dZP3Q f㧒@i&w4@z~Tͦ
+qFZ[f'zgӈ%nqޜJ$ (:pRxE~\B_0py*[ŵE,{Bı
+2ɯ%YM@GEldڬ1*j$JOyTPL|<:=1 / ^h^q> ^Y(Ow6
+,3MP*Zhu-fh*ω@5{1N"R?ܯ4nk3Ŋıү.vի尢;X E6n(Z4E0gt@=ǁOя[ÊG{MagjĔ~Oit잴
+^ s5"(mg1G,DVDž~&0 n{!x+OJ!Z%g ZL3wUlIۇ eW$`18wFsxXF4jFңSLh*#hY*sx 6z s@en2gPSnZ_A|2miHY6aOp3xrPBɨa zL
+q㚏<{7p_2p޵</ݩ3AJ>K2>Ln.^DQ&Jq|܈~vFo[t|zfCtZMXr i{­jU҈#`4|Ct͠B|HGûKBT@'q9l{`Ay3 S슛'|
+]a~w(5cs:55ʋ_Q1!JBOf\-Ηr$uosp/r؉c1# t>Q I!EϛeXfc.U S'S!~CFFbɎ/`tq$QcT¿޲$,ȗN]VZ 0ٍR:Ca af~ y/5)* |^
+=Jfu=YJzG%_]prN}ɘTz*ngx %/bwzHF|L FVbp̟PLkIi q\Xm<\?9ߎ6C9_Wrza=&T գӥqL͸/O-sɹayІq9ldz)߽*BgJw7X-X
+A^NpOI%tzN @\GgcSԂ@ap95ᾨBZUͩk#j<,-Y2=Jn覉 E2dC8pcw_*RХ76qdiؼlbRkq=`[_ZZ\i
+n,O]no/ ]PV"q${iҩ_y% Vj⠶tg,(8-n66Q? W1so牜GwnE^\޲A'}`XcXx]1Εe
+&kLU/4 72#5пӥ4fSfr)Fbz c>6BnM0ӥn;9Ure$ m`*Om6q{(d"9ďrs10$(kzӜTBA U~T^v]</]_['{Y`?*-ߙ0Ơ" X%/]prmߕ0GfIN+P͒bK+~SbA C{>oV4GWkKӛ p#cZNs,0{N^'(K 7‚E-9-4%hjrw6BElD̊$;o)(>v/UT"</|[TWouDj$ u˕A19SJ{g7(dCjlR'yQ#+\!&HQRa4 }rUsW&\Bu P~[z:go^iCiLbI!ӅGMdK}cHGVI,^|bQ6 eQoT{CIWԇ|%N2P4<ٮןֺh^LA& @%BD됏{z=MVd\wKx[-☭luE_ (^ƺ-7ܿ=k|ҐyiAMxPƲNZ-\}b Qz皬@сiě}gk:PGO5Imz#AEh폝q.R(%$cbwBGyi"-kuiy)*Sub 4*HG W/3-vG1L"+LP8*32 +Ο7~W}yD.{9Ĝ홲|E PoB>< ́Mľ ug{ELTL `h"t1X`luJ𙨡QۺpfߠI 7 >|)뉸yCh?!@3^m_񥰊=@&egB1үxP._Vcϊ[ZD %6\&$v7ꬤLdu?N=e#(+H:}|9u".R׸a|//$-c8}j3 _qnwSOA^kݨT2a'ܟbpZ[{{oN&%@arG_ld׼m0eaQj09PǓzg %?U < :/0cD)<2h+U
+'s5Gd8OOG^%g2ebɕre׍G: (|k vđ7~bϴl='"u潢KFZA>{;؁2 ް>%ltqg4R26TGm<0Y-,Y2.[c6/*֟3PE6.TTR䈫9iPݑ+/k^NsdoJRLlJp $ri*=6$dbY4|tYWx'tB6Iy=gNcENS+z xMt~7-]ѩKwe콓mF/O5ߊ\3l{ "7Ԏ|[xI=9w%T!P<}UTWeM6=Eз0T~6*|:Ts DRݗbM#%k<CyEFfZfA/B1L'SSIC ^sA'<a-H89[QԱ'̂D"(-ams@.A'9{=E49qF7qYTT>:5Dljs{c`'y EL=)YCDѼ)%]5n/`! H!5yeTZ : rRwLYlU*Dm&M
+u 9[g'Yв]{PH~yecĊ 󡞍
+"d*ՓJGZ 7GXJ-$XӸ
+?98@7Jopcx芶$ `HU@ K;XIno.I F$od?K%18b[㎍jeio^o؂P'+"n`S#X՗+Bny zZ,-a}+nh_tci֛UsXhBu&{=TwkXd8U8mt=fc)]CGByI%q<z<]N
+2'? I>,Y:j~E*2r1
+H*
+._2s]t g}:MAT~5F\$\ǹQ_rxeIOw#wBGi; ,z@hַwc<񰣥ҿ!쩫|}O&O.jKǪֻ'+M¢jbӓ+b澶/W9 ,"TI,;@akbP%[и,B q8,~PF?QYLֆa=mMXk=k%z0Wݔ
+}D-뻀V򔤥y>N A>Q"p1\9Qid(Ÿ&6;: b ʀ%T5s {lF Z e%JO kNvh z
+LU~uBntvTXG5XT*ѕzUWmdM
+&BdL5?;|WE^$v|LKjnQP-t|ٱ
+oZb~a_HjϒG4IG\krx?$Bv@L" S޲핬1JőhnGվJ)i?lK$G$qp[3 '(AȽ Խ%
+a'<塡\v@o7UL* 0kufnr "s=qֹ+be}Cȗ,nq0wk
+IϐaЖbp}C
+#6ko)ބB ,4Wnȍ E(iRMlqGq>BSxw $5f+q-13ߌз?SKaBQ \ɘg>#{dpЇ<AGͻ(Dx,A'j[Rnt$W f1ƘUFɩ"q$YQhbh`*uӧC!9c~Oagxx
+44hH!YOeܼ!PQLAW$:RY ~w&TA۸u2y@ͿlOz4|R1*
+lتWRE%_X7bRb-+)=+;2]v?ύk;33}@,ˇӕ[Ck>'uK>%
+\%JN32[:}pP=Gs<Z
+j*6?z3.ǵ_Fa9$n?
+An[XZ@ԧAar2X
+x0 & 9Q_Xjx:ϒ'@h"ˤo]CCEJ[ƋR άUHyu!\?r
+As;7`03h #1|j#o7\رuN"1ZLC>*0]57^s"$gWSüB^"-ο[ -X0 3eVIGỤ7T\Gva/~`˝@`B9C$SSJBB˂;EL|՘
+n{Mqq>CHk"QW9)Bzc/$=2JY*sͽTc:Zք,ˋsd?F_'1阊t[=.<Gd8E<[BCKy`M|~/gQH BMtZ .Q,ZTP-.lEb=UxJ1坈ղT;mYŕu! M`M3@p^ɟK*:<5f
+ M+8./yEM`s6Rwgճi5fL,(4Kc*eq 2@-DbEu|gMH(k9C? qG#Ov1;dpV0NN,2Yxfcj#Z"L}2~6b?&q: t*H
+{O{3LKjV4E 2\,l97I_ na"&j|Qc@'(;Z$A79@rmmPXtd\,a6Fx~_}aT 7b^N٘?(>PQq>x˹ caξ_(°oזueTEWX.uޑt:1 p)SP
+n ^C
+w 9ʺ&` $2"*Vb*ɪK v03=ph)͑ex%M++ 3
+DzTf2L~+,ү|j ڹxtqy0r%~smFm&vmGlF[hlj2WZ*V4Q@
+endstream
+endobj
+11584 0 obj
+<< /Type /FontDescriptor /FontName /YSYFAJ+LMRomanCaps10-Regular /Flags 4 /FontBBox [ -496 -290 1501 1100 ] /Ascent 527 /CapHeight 689 /Descent 0 /ItalicAngle 0 /StemV 89 /XHeight 431 /CharSet( /a /c /d /f /g /i /p /s) /FontFile 11585 0 R >>
+endobj
+11587 0 obj
+<< /Length1 1881 /Length2 2001 /Length3 0 /Filter /FlateDecode /Length 3102 >>
+stream
+xڵUy<T{o_FԯLaΥ C 33gfq5JHRнEѢ}Rn"nJxό33g}=\/(Ѩ&6łf#2!LVr1nbB"1 a@C
+6pYNjJf˥RőqY <9L
+ 9à(%A"_ˆBaw ҄@2%H !BBx#rRڈ  9X_!4_3PVc;!rYԈ|<5.P +="JՙyP:ފxN6 ЈK1LJ$jIQ>'!Q'"yED ˥>0T:}&7[0
+x-/w2;37m'-~?uKGw_Ȣ5k?/Iړh3t)~!Uxݼ+楔m'j=ƪua,v}Zo٣;[VWwȞPK-+kou:pϯSIjU~hhfɢFV=rRhtWUX(,pRtM=2AUzZ35.Ӭ쟨V-cm+R&t-SQNy=Y@yfBvs5. %!uɭ:;׫t|y72('ZN<U̸0X};'~ g]ݒ:Ն;WZ;J+{ˀKѦW֭_ay6ٹ*$4m:ÁK"ntGΎϷZڢf*S8ՋTk iUzFi <Qg4ruȪuXģ1/yaJV}rn)mDO~rʖHIpiZC?M?A}{+5Qg'MmP\Rɣ9s΂x͛VYN}ޘАM v'+Τ~Ό8z0k?mdFMi6ָz-p1M5/0Y:mz^2o[uOʐevuGM3b gL& =Z6W
+3Gkmd<Sʫ[ej]3<Dfh/6]isN1II?;xUP}pGWG5xfu?g\8骩~qrx hRSҗ soTVNʫǡcS/v\ͬv}kQT?>7%轄TjmCv4=bVi?!z(uH5GN,=}ˈG}g&HV5 ݧ[<١ Ӌ>GɻTo$i4.)-'? <3_$3h2dfENgS:.kxs;S|zeCI˯Oea5L9aֲ
+P=q{"|h\BS, ̸$N=\aQJ /,Oҡ'7f:74Ox~<MM#
+endstream
+endobj
+11586 0 obj
+<< /Type /FontDescriptor /FontName /WOCBGC+LMMathExtension10-Regular /Flags 4 /FontBBox [ -24 -2960 1454 772 ] /Ascent 40 /CapHeight 0 /Descent -600 /ItalicAngle 0 /StemV 69 /XHeight 431 /CharSet( /bracketleftbt /bracketlefttp /bracketrightbt /bracketrighttp /parenleftbt /parenlefttp /parenrightbt /parenrighttp) /FontFile 11587 0 R >>
+endobj
+11589 0 obj
+<< /Length1 1853 /Length2 4159 /Length3 0 /Filter /FlateDecode /Length 5318 >>
+stream
+xڵUy8mG%"u6kֲcoc13%$[RBD-*= )Klef<~sw5NC4#h Z% C$`p#JPT甕5L2@
+ 
+d`xP+v2utNPzbP
+L 
+mڢLY0G;(DآvF##i2Dٛ"`3
+4E Рd?BƇ
+
+?;G-P" *wb?[L B Ξ@"W*C? u(\MS6"}Wq1 "!!:|ҙ=
+DgmJK4(^Oya(8Zth=Ea"%53mYGg.BwK=NA&wc ߛs{c]R/!"33Im~leF9Ky0nX=vtj0U,+R)φ37FF):Zs`@rWs׮͵#:RLoj>p>.0Dط},f=ZŢfY-;MUO=o:|nӲvf-2Rq7s+ZMM\({۷$^׃O ~U|VTg {UQ%E:Z\ԁMڥ#5 ]h#uE}FN4
+7_EIQHVLu'4 E1}ܽ,B7}-ROsd=J?y#RǾhU3%oo޻`nlUcjȑ[Tt,׹uogβO${x}0o*Yppj҇Hnk2.1̑'uUks٩ OU"{tNi rZ*sG*<im5">ְs>Olp謯Dn2"5i:2
+I6^M]S.P֖9\#oS'|W-lخ^TE֨DD
+|4-h$"&L{ԸRloY/dMM| >9bӀk<|&=&V3DK󡀦dxEKX2ۍ+ V?uNtGS/Ű]n$+=wXtRQ1
+|/IC%ܻ |MgpDu  ~o?ᷨx.a|1ܼ|49IQW4ˢv,vbA[G6d- !)B+ʯylIRqG R=ulRmVAW ;Fؘz)לꍼ<P譿e-g'djM}AY^چ#SNTeˢE
+*ԛ77oq6N,Lsmy{񒾝wC֚PF!P%Oˇ
+hk>6NOMWېyض3*Qmڎ[+UAdBӊr_=)/wKʫAFPJAv~:'*'_6j52Ҷ8֮Sv lz$!KyygcvA&&ы?^+k:g#S[7}7yŬݲ5
+%=<U\xł<ɵ- kpO!2c}m79lz¤i&k n.cmC=zǫ"$rP{_OM~Wh*uFg-@f\nziFppWd=-)ٽs4`gG&t4#9xd+YqȕEÛ%Ş z[v"]%T9oO/Lǎlԧe)Nyլyf,N: vG3P\Nb0冀0Zxcט3{Y-c4XKR!tvMEUDH&"[czN|%Sr_7 qEȝ
+o<E> G$V]43ԇ#%x֣%vb+'N̈ƶX,[ct+{SEh
+fȹx,u:ՇL l竂%_n?Tl}K:i{Vsӛ?$MyulfQ[Cm:)|/XFWT %}Ru~Nf"[ד/Gw-lj9NJ?,(h[4/$
+. (ldy{L ™ ߹ÔRe|DKs,>SP_wn8㔦?4i2m3OOڳFA>BmCMwL3{i}rMv@DĮ{!y
+rW?JЧU'ΘcJlvب˅OX7RM͓R/ ]xUfA?pA?V8^+>&)MKE_>wr]|S+ ɏ^5 ]z%ذyvFR;
+=9ue
+hvVֳ@j_5Rjeؙpbqsh ń"h=`=!&uԳ)IL%bWa^@K^
+4"v<i+-ԾC6ڻ[
+=Vk&6Wt'̵s.I_imTQ i뙏@x
+'"Y{CWDYkW69ZKͣCs[a&^]2]n-H?tZf
+endstream
+endobj
+11588 0 obj
+<< /Type /FontDescriptor /FontName /YCPAMU+LMMathItalic10-Regular /Flags 4 /FontBBox [ -32 -250 1048 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 60 /XHeight 431 /CharSet( /a /b /c /greater /i /j /k /l /lscript /n /x /y) /FontFile 11589 0 R >>
+endobj
+11591 0 obj
+<< /Length1 1688 /Length2 1921 /Length3 0 /Filter /FlateDecode /Length 2966 >>
+stream
+xڵT{<Ti/ITj)!$57\kV(3g1qLfQ(*Z"%-+* kRIEQ[yϜ3}xy4rBL,; ,^F^ , )4I_X8",t3!!B B,HB s@C8G*%_x"n h1b
+e5LdY%Y|4Lć
+|x_ @rbAcd`6 Y: !$;0\VS0DCK$ur!,!@E @n#~g@؋1L Wv( Vc!bql"\4V\X
+1M堈@
+8D@qBI,xB u|0+H;|\ZHBXq>XK yc*1 tS
+x+4!iZe᧍jeH$&rD2<q2nuŒW<a  30D#a`p:y$P))@(#
+ˍ~TOɫ{YȬ\CqĽ55\3O;RT|k-ʮ3שΕv^<̖ΚUDȜxVπj5J*%}6Ȼ^Ewilڽ*Lԛ}3b 3R+Z]- \e#iwY<!q܇wyˌbiS s5< qrU&rO\Ȼ0+p3;5I꾛uk8 ?K FͶ3"S %>(KpviEz`3יִz";80ygVVܘ_Wo?¡jk`ޙwۡOoZLJV_`ȪMag(F/,u@x嬨S/ zk%bm5նc=B6_ͫdsʕ<v"6ϵѢ-;`cx`UzL2wpjThj`6I {^|T^yq^_X ,hI[+rzoi@n5Vo\.h`:ѵ7H62v{Y^OhnϬvwvI_ݩV
+ĎcN,OB,h^ʔF3eDKoz
+3pL`?nւߕ'K45->ߵS)<yx/{^&8}Vן\(Ȋ<XAAKMO4eMOwoJkgu=nM\cWcrS_stG)Tڭ$:|~icF-/~kᎦ[ q+bEi33p+_E 'g`WV+g'N_`V9TŞq Rj!GxlŐ͚e cCS^ݝ1?m,[aߙXjsGdMEײ=s-yEk{; yۥn}*]Fʏ5*+{vH>(.ΜBKI1W{&ib4{˓/u6$*d<gM*L^),4֎9nroY{Ip{~`SlNkkn^|}jhz#8EzPf}lTUig)POXl
+i> >21%n.iv0N
+dfok2Gg)}$\tMΪu?Xg^Le%YwsB3ScJFliꙙCs{lP>Oᤓ> KݼWsNJ@rĪBlu^)q7)iZyb#ݶ܆h?TiJ_y4ΦpjBlE~Q ]d! x681} J|C(
+endstream
+endobj
+11590 0 obj
+<< /Type /FontDescriptor /FontName /JMCQJH+LMMathItalic7-Regular /Flags 4 /FontBBox [ -1 -250 1171 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 72 /XHeight 431 /CharSet( /x /y) /FontFile 11591 0 R >>
+endobj
+11593 0 obj
+<< /Length1 3033 /Length2 34723 /Length3 0 /Filter /FlateDecode /Length 36368 >>
+stream
+xڴuX= (ݰ
+d
+G"P 3i0(
+L
+&n.
+u9+ӷ3\?m
+`
+ NڿM44gB(:8ۛg"e 4Wv5e]M/
+/Ư#e]c0rpK3[w܈)w^
+]7+ٕ#0oS|xO7iF`>!^0o30o'on3xЁv@?g&69`L``Z88~Ykbe 6e
+ޤ?[%'+.@{6 .b{`.v\V0o_j
+$ >DAg<nP^g6]Ӓ1dPg&Ѣor|ȁÐb J?- _+ƿ^u.uZ{V &g.R/ggpM{U7:<=Û\@m$(Ds<HCV]yĥ^,̕qˆmQ?dTBU_y`_ 64K_T]dt?ΌthǶ$7~9w8I0B_eAQV716JSL$Qi&zYg^S2/CX|>\
+Ec\'Mn?iEd5KT΅EZKvսyaV˯l!~哦aB= {0j`"A.wܝ9gz#36ݰV YggK"-w<݌Kҵ*WՓ q66Rl&l5cW+\P4WM]~ЂF?bG Hb {e[s N
+ƫdk 
+SH?-IQҋ]^dq%0{rd^&6wN|#o
+pcJ}r&Ɋ)LpH9#3!{3CSW:T&U& ('41pti._ '؁*<x31Ǵ3&@D55dmq٪AȀNkU҄$v<O$T)^czD@
+!Z㠯ζaiG)m)KViQJ/INz7Wde<WjYMkwMV5W҉xd7&HEW),EFXl}^sj)d,EN?qDT~
+|X)r"zۿ>T|Ӿ B
+͆="JW23L=HeO/ܐK SLpASsr\&c0#4RG]?ͼL3ľ`v޶8e<iraюJP8zI s=^0 IhLC-"L"&ѐ.8J
+!BiU2s/6yR}<I\}j8ǖX,[3)ԉ0|-Y 3An%,﷾
+ zRYe>5ȹ[z6{ 3A-~?d_)zE\jĂU.$e-`n)k
+?+{\[p2J31B9uQ_̥ ;ueyIz7A$T1 Tln'zDogU\NEy#2g%QAPr +W0.pyeC;굓vΗk' 1#z;Z_g}2R4g],ʃtɽXSFI̖^Zrtv([5]16a|XeNġ2DtȞeuh%d>S|Ee.sP飤Z-̫ Nxne3.Q* Xg"M (0<W</d4E=IPVF RZ QxYјr
+//J #zHsǞYz%hI q+cAS-3֒9ЭHM/քQE񝎞3H< _̠N'%heA Rr"FS~ &]Q^x)Q^.WÃOui'pMh
+RdV2G]] UfEp"dGB?xLzp5 j}+KOF[i. S=DUB ϶VTDvYN,uRLvbʼcЃ;Oۢ]a }|^`)ϵq6fP?]oz}!mπ( &-"ӸJ%d6)y==}I^&>O$찆w,QPD? }VNFv'Ey` "Vk{r'/蔵0ԃ.Z?Jˌ$nTi5SE7df⫇Rt2%Zq><yɴ҆36 wU2CkG%go$ZV6Bx~7km[c$x+"%}LT˺4\2͗Q z4]ީf9_u޵;}MpAq+wo2$$R8 sEܞnMYM lቨ.تN:K~UD]_YC ~(tr\e1[(Kh6d:xÊធlGq4ۙ !YǙb P=c&&6 8UxoI۩3Ʋk);{+r/" PT|"v4 %.ʙ(mE
+/$&(7Ž+V?.^8L^A?OǪp<#^松wbkȞRɻ%%IO1 ""@"ܫ{;@yQ&%NQA 1 n/}aih~dF2?=dz%vڴ j0:^Q A悔k
+uK mXRM<UǯuT;YVdd^Ez2+>dKۋaHwfi"|ph)Pd'@rnY2<YShٶ Fa"%0Q\PQ7/Mno1 R4^b6')qrXM $CHW:N"nΠtJ(.1NW%)؏>#rDMG^w[D
+=^WnLr/a~h+-dzfE
+QL2aƳNXIb ƼV2!j'+4"?MSqcs>lw܃hh'>-g>&2],!!!t/K
+P<ي#/?64`^Aʜ@`>yB,pؾbo9|SoM.X2@r.4VeUZ3/zf6OA~~ct.#A"[+ۣ.C-aՍTx<"6{V(Fv\@;ڹ<ǏOFp EYIa<CΆ:6Fm"6_#E^XRP_As1cAq3ǢBA6vz"G?ú2BC(Vѩ*TJN*?,w!ʏ76!ҵ_,M,B}-5 |x 0QsF'DIG=!m 'usNWNYO,V-*>wcu_K
+NxvvӼҹqdٴ?Z3cVs.èj
+dA<]*sFGāqqy28I{">/UJV|yE"n9
+%b3Z| LVxZ1'wU\ Y2bx2^ЬaMe8zJ`y`ONDb1;'T9Xf%n<2̉X4U*-2t>l{\ &Ot*AaJp;[yBC ۪;c}}V`+(FoP*FQmw~^ Bk2q1^4J#B\ߘܞQ9vgʎ}QqtOuQ/sV՞^@PdndմOr(L~3
+o0 p9'"Üf/(BmUi
+aG_LpNU݈,<ZwVHEDfB WRnܳNg' ]G,犲mسU<l^WQep J@s֌\Fj̇>ǼrsN9r#%q P wXDA*_OtS*^j?򔛑-W$aq>tƇѾ+vU*sZl/|q סrqŢW<2SytgLeaTBXK'L3WN)]O> LW̸$;>#MNPՒI,j}T\#v%`~µ1K-L*!8VҳG^HQgBE[3Mw`ozHD":nEQbxނ>+Wg';_cw uW7G/oŰsu<\d. |#:sDh?[Jz;/B
+P Zp,\7A>|vd.kkir:,PױeSyVڻh{bZ;[r*],@^@yOM _5>KC{D&Q|GѩB\B;)᧛t#M!X4P sraH2+om{? g7! ~46LҒKA@'. \F)z26R ´l?GOƸ!]jc ?7}hPqN&o}yPMwJQB'aM(/iQ*˖|N;-JQCU8XJ#7!TUu^0uRgDX+Ty@t3{ɝɴ#Tnҏ%EY%Q)H[
+謮lJsl,p <6#.T{z+])2 qa#
+1ۯXT]zVƃs<lGAI7Q0Gs҄L
+l=h"9f衇m<?X92c?dgbe ;r!=+`3YF>lD-—c]D>p\T@AhyEAe>ܛY&ygGxо8>UDZ֑0-.+m|qA@ESnIG/Z
+Gv^x 7Y5 gf&ݖxFc\h=L*4&_Y~8V:V|AZԽai=bt AE+,,~| Ds
+}0 C\_uw#froχ-l!Շ'fċ0}"RUW Z]Án8}<ֱx*}ms
+؟(Ί
+Ev`)1*6}9\r3Dρ̶zk#nRj"0F{]$"]JxWyP>#۲j#;h7y.V`-4Iʘ_=;fV`ʭ)CT,i碱kn x\6ԳCl0Bj́uJ/`Lc%tOԛm~U o=a
+Arf 9۬!q3Ap[KSNk2nIVJSw2X.*.&,v㖓\Ka&z6aR:%(
+8ų-Z͂V l7353d䪄i&ng3RpdiRK£+*$5%o[L@n">$ఃk\v5y*iTKwuDmKS1O+!Δk&V@*RdK})K%́-=2?a-]]` N
+Ćd1nRr
+^h ό~*%Ī]*_ 1(~솘ጶn0ّk/..L Bu5h#BBZWڼOĻU0)}RJ`)U:V 2ҔmnSR _ _Np
+㪬3u;93fN4*f4u.
+boHΉMg\y̾J`&I(Ӄ>:ZVVY Vg&6-kDd 
+bݼwzI*pyƛYH4wŢGϢ`|va ΍9[ aZm.3 2He7m܌&&~6 ҿ'1:E럦v#ƞ" ߒ]0 ۙӈ$YJYn0o\Nv VΕ!Oh)2~eX1k$O/5=p&BU
+6^wЊl<6~lc[vs=^~:(H^ )wS_̌-U-,e|Rݤf) FGc}5|"Q(k
+T8}&+v&Z`($=:ɏ`1kxLż3Qx] ("=Qzҿ=@F 7X1'[Ke&vBmz;31n@f5NNTiPJcU0fVgF`e! hsBx
+g]bEbѮ HI=YFaՀ>}5DP ~rTu!3RxzB{[exg
+PMzU7A*S\4e6րiܗAd}sRԆRΰ$JuPAq
+yq3HZF%ӕ]$yyhg\sJS
+`7Xx|3ItFȐGnfe3pC3JSxWM3F2yw=VO c<1PVN]f rFA"7omҴ9+z]QVۼ᧾!5x;hX0}ϫ8A9vh`?0%E _rg˝5$gMPI8b]fi2Zv(F#~uQ=|F`&U9N ]$Ij`(5(Pkl\dz{ N$Iߣ;ʕD O}E7Cg] ڳ^لpު>Nf+@P\UmոƩrˡ\NȔ?vUp~#CK͐i,uw8R\NKPR^c |o>X>pԻB sX]5"(
+#i;6`;4D8 T`+>ږt+^u+-K,X~),{/[oWN*3 4; 44sA/ܐ[.8:}If~ua
+=T _(iwWge{Hg4`OK^$fT԰F{z'yGQ:6ڒ|j\3Y3-'F̊'7t7w%Tt1P&w4XQocy+YAWLOZ
+{Cn[rOPR}Oe2vL4B 1s%)cE[OuE9 BE9/'т/^j\nnN3Ki9){4qPۆdC}3_ 1KD& 4!ELcEuO$_* KXrL`$x>7RkʆlFK,hFA,АP#jKڢ^/+XNLf(Ŗ@mdsL{ߨ1XtYjɜYVcu]KZuY6nlEлK\\wB>/GV_P,:pf28|^n8s}T9WF~ISNڱgzU}r$sz!Qu_&R-"ylJ(ƸяdXm}y@ɡ j>6LWTf<%|?aUAbЀ~
+j_rf;lq%^D>FWcWT
+]7r)t,K"_"7 |(/v9b11ug[,;-v7my3=/;gqy
+X'K%Bvmh-^V\儯P!\~~aܭ鎩g`@DJhfcYk3y/_3H`L`BQDLriu{(^`J|w^<•ypܺP/`/;=R#뛾|Bi4>Exx#(lmA{%HGEL%o#v{{Mᡶ>aGI]ERT
+=1k%ֺ]4D&V=OKbWB^ 51re
+>9]b4~ ֒s?]/˱ SʸXF-m@D߸.x䗚p7
+g$4eug5 ]4B\W7\Zq8n}#ϦlGkbaN6}"=if_xTa`Yc5~r̽aMwv$S,OVšr!Ck. LKCca\-M'gV'Ro^b).0e?$&g0D?PVk2S_@nfEYӜ' C܊[W+;D(w_6k |66 |v~xR<\UR)ꌵYQU? 9Ȱj+o^I~.36F2O|00H;G*N.ۿryn12̐6Sm]+h#@GV&꟢;n܌>FӁ>)cŋ_'2nvPT5) R+LmdWdzc$.V/d@q@/HLCH TF>DD`s&wj!}2t>4zoy^Ì+/L}D YEƿki}UC/Pȷj=Pǧ^e|Px]@si2] OdG&jz|i%VȾS__ 9 IcH==uJMՏN h֜[ife䭭ܲC\<PLޯj?o+ꖠajDO%UH< ],q3љ#Wɵⳋܾ\ISy@tLQGZ VQI[\_i*1ljeXk)NԚ X8y9lJZ+o#vϼP,~3v՚Pvfe?ž>B/+(D8yd=uo̽@D%uΚY}:mn
+7_o[QB*wې
+?SA.[ǧzr.7#/xinY@@40#2]ה#&TM'WNEK0ȼ4]15yoyw-h(Sr<{7
+79u+Ul~>`Y5:I=˅Lja! KvBfCD'.sZ*{pL+?#RA7L^|[*-B w0&D#]RЄ=~*s+^-פcd>$=Ԋ=6Sej,wb= ިsZ׮rtg[?YC5HS^
+|2B'UMi)ԡO çM 4Qhh3[TDv25dٲ4h38DCu6VWIhXu4pTҒm?
+Wm*~gRE Fiz>+D}M5ZEkih+F%c
+T*Χx~#XY.IcKFF>~#)N#Hk{|k" ($mf?F)No=0 k.)=g.!H-8VnN.-8諦A"ts\AnL <>#ݘroʵTv01ώ^ k
+=2y0`ZrdSeH E^Jߒbb9Uk..JDv7ذ{q $,{Hnx!YNvqOy翹ReAwp"YNV0ԏh^ћ="~E=R^q;>MDm(Ub- |P|(~䫐f/qwZq;[ީ=w{heϫK8:Mq2ҎmKScS0Y9Pa KЅ(N0A$>qہ9*+$XX2O%}jyeq_K
+ZTr]?c.@e[ꌥsv3; "+Y%mOϧH;vbG ,_=5:ʀ~pt c< }1#"U^Ml(2رEj|("Bw/v<Y`1OG',~~21q\]= +UyTAtTK퇀y ~Yk㗡<1MTc.d
+^ Ԏ7 ^lC0 c۶m۶m۶mwm۶m۶msYYL}ַM*"OC?fַݪt ŠC5XíS0}&ILmd$9+S#̀@(8c PDnן#EΒϑZ&̖}*tJЈ J6(Y*lΗz iebF>۫r9tG^6#YD'N5rN2"ss
+{AP6iV ǃVQB4TFAnm"/9ΗP0qDւtPVykuD9<ג3wTfY~"F'$xk>(H>*WX`-Df"67H~QjSJV/#
+؎$q{\ Vjɷ;*$.U5hd O*i_C.|(Ի@a rDh2R5%2nu@J1YHRIB:t's&TYȞ.b1/b;Wdώxm ݱf8=Y-1QJ}
+XfdivNp
+K5|نe%F{ 6?6nk~`{"* "LŢ6h'׃XP'ڀG|#B?XWzV\S/?xقa _ʪW'2M O_t4DdT ܂f/ػ~%w>EE"gbM0s&4mϿ;xOsA
+HtE#jf+l_Ϙs@'XsyxT!<C5UΙɞ3+Z~S[
+{3gljM5,i#чSfsM$#rEl3_x`K[ Q%$ ؐǤi%pV9ѽ>dl`l&u2v&Qb<,1Hm}7Ӏ]<irFԟ$ aA̓ۥ.GKB~0F{)j.
+>׎Wq|ً>炳4)њӽ-f
+-{!a料=zn/NCFVH'iXa̤P 7xClR?AuZکe1Flwn<] EeSM7Le =Co!\p$%ɇp9ܮEdF}SjtޛR{X <T2 )`LT=QhC^NCOSt҂*"B)xB"DW-h=G麈F7# 1
+DsYJOI@:-+0}FhmaIIמ0i(]Gn'i?"buty%0C
+:{y PCDgtg/e-,{)U`?d<\Jm۰hxť^y
+ϷcrDI$ ȫ~uxqfmmc,4^ify 6aWŸ]"
+(h`c=k- p+J`PoMa
+tU~_9>Nʹ.J`{_puR^,ٺ^)^w\=VOϓ:wq PmeN^N7@F'Gԣz"77>DM"(xG0  v-ʾGE
+"(S~ΌwI!iռAKC93;Qۖ(T*;\`&'Gն"w <֕H:P
+S3FK
+zu&!|ņC#kYfBݲCF@~xggjI8z6M/8<Kvs(sLWEP][) P}dQ-54,ߏ3q7ĆУ'7d'`ۥglJ8kuϊbe&6!#: Q
+9B?~`7S0eH#s>z]rڲۙ}0 .]^5f%"8{S
+<D0ġ@[۪"/>6b{ 8R;h t;H2rj!in&
+uW@HE~U}lql"-iZ{ISvOsuEqR-I̅TAH_ϘbuؖA=97${(q}7:ԅΜ
+
+ KS4|_<kKwح])k3'o &аG(Wت)!,NHbL(ozN5Am=4+8W%4 RARwbt
+h5P%(-s^-Fh0 2LMF88 d'ogˡy>.?QUQѝ8þ0oGb}
+:ʀ[\ ۘGRJhO>U+;]Q:u`PEy!!s{tx_~c
+t\/OP}ъ)*>5Є>V4ph md^jr&w(@+ֵ0o>ϷRBA1I'1kGÁāFLp#ËyyA7dǚ{d?2u KsaB1j?
+]˹;I4sO*N: bE
+gmKӐ#eHѴs-.ws#brNo~[~&R}bщVYyo\X݄I
+ɳ@L2lxPt^ $u:Vб <p
+̥̋{(?/^˵Xayutjw=$G1WTj!NW4]xv[Fyv
+`KX"~ C";G%\r&P'+/L@7X@M=mE\qC,[-6aN6e{Je0T
+iE0`GD3~!g0B:̫"=u_hGH:N|FGWg0Rh%Z 8Ά_7h*nƋ)hW(ޤjFZ\oH><0B])APi܎XWk4J}\Q<f_oQ] K_w$ tB֞A6eOࣗd ؙҫ"
+Ф䬚`<Z
+7P
+h4[H~g -֬A'ith ݔEꅭgĪ=aQ39pEJNvBf`+6Kü&0gKP/E^?@8+4w /`P DS_iW.H`i5ܤH\9:L7 Y1{
+tvJ5X ,Q3jr Œ^" ]v<i`.:r^(?r5uCЅPB+ \A9a6ה'řzh-m/ףG`ZR7QIR1V] 2J*F
+[s!pg9qj!<@cO@=F/_[TMTsK+蒙L$z4QCgp{cn4ͽl<Ocyjf#F2~;l1y_4~0XٝIP%9&0;*% q=~1뾙9h:
+ZJ>?793&/zzk! + 4OBR+AncBܓbo]A#IYN1fQzhK\c}қ.o&;#G.+!#Ik0!Ik<8 &AeW_;N;qA=G[YGPX`?oAmnnRkc. >.cEt9_*bfǥd|uњl[woS*a74-#LZ@&J%ϦF5U e~Rn$NavDc Ldr[oajd}b91
+@f& |F(<tUR7xsPVV9TTś%е Lp[$8ycyլ>K$\<bpN:v ګWۦ >H,5^,Eڄ+L;:d<kvBpw=({md?NKK?m.Q&z
+P=d%V7; L+W/O "=+@ON:յ@ *
+5^4e+̒47FWWlgP##.ZEYEaek2G5QջK4}Sfoqs iO&ʳA
+aJ,G3NE]
+ÿ+%?ύ|t
+KMF{cI"ݗ ␓Ukp䐐%HSCi8]RpT^;T ")B?~ϋEeŢ-I NM0/OwWI:B*"jکT{uo"!F+ fwo[F0y5<&~]":CL4Ss[&)2<+=`͏.), ]MSDmrYdpt]NPrKd0I<
+XSgBb8Gj.i?psdV8
+KLNLH%[T"N "`YU2BxˆTY=o. J؏`O( v0JNE֗e/u4V4I}~"\U$$soz1Fd)2&t&y|O1ªKR\GzT6)`7"a#%ܫP~wEjm d:R,A=>/V?g߳/<솧&x,n&1 Ms)'V5چ:ZNq؜lj:Ka\!lU;F&$fi= (26Zՠ)i\tPigz,_r7b i.]}2,hğEAV%4^Ҩޗcl>S
+fjt̎,έQ.)Rr̾2jܢ3@9(cƈFƾ׳2kyC\[
+t벇azZ/nȮ3]Z ‡_PrqLYj={so嘻F76>s8qI7
+:82_x?'`б-E pI^2`Ly?;s9ƙ_u}:{HGZ;"'{=N"2,N]4+ҔX܏ "bǓ@LS<BBEd5/DUOZ5.ClK8Ѱ,@((kųN
+dET8Q[8K Мz"U%vHHw7 u!ٓ6#A?>޶Nz p?
+JYJ:&;-L[=;X+Y2t;ƾnJˋicg5?{h߮M,ch2,Z3CjP!6N==so}[#Q
+K-xcjwk; e y(7v=~\t"*%d
+2f!A \C&7z"1MJO•0~
+UUyRC!샒<MJ>aXB*,nR ԔI_D^f&]ݙ\)Nf})Ψr{
+KwXQZs`BΞO BL=4M̅
+tfԝʤPYNU]Ec' t0_EoҐw/] `ܡOTWE8;$FN><2",F(To% >O(/+7Ά܋n:9ZVn
+燺r%ak%:݂vPy Y{9hf`RIa@<k: XR_[`Kߡͦ9L/Hyza$U3&1]ܩxTŎJ w5q
+oM&
+9޳]eyPĖJzƲn[lyXT%Vgo11-J҅[L풪(]aS>o͠B{nx eQھgf(kkؤnǟgY$;9l!ȟ 5⽎w9t.5od^WTc8'Xmm(^Cz>:fԦCF> N\!:+n@ 'ЙVTsbB^{vFfBQmFEIӇYq+xO鐭wdT28(\Qk6>gj\w[A-S{ӘD
+-;xoʀ\|O %2Nhc ): mNJ_W:*[X`D8[ݡs )<6'r/Otf]I̿CU
+$/# !0M/YqO1УAZ ALb419KxG5Ş94w1YEQ:
+3)'9p ES~{Ӂj)`1:X.8ץ){d=a}Ql^KK(NRNyuS
+S-PBFVONReY ȥJ,d*5} 9N_@wC=d& 3b}faIqSs+zgvXJXvTAHOsbӖac^]Mf
+fZ/go"c %7]gG*!H,m?}IQ1^@j#
+XFY8/E6p _
+.,j!,ǾȑUF!غq$ ABb[q\SȯtK鍍-a}?q,Eu~OwV;$9 BgmqpnSDOQz<,lXL|oq4$siKt :f|-fUYJuѬ/dHs>3yҰ
+u_Y}_h>-(*&eh\'\a42Em`'Կ点{",Owxrc .RMQ`.#a+Ayprl Ө4xI1 3Bߏ
+ߛ zG
+? <GZ7yK3L"1<p|.'BUtN]p#A#>öC\H[B2]M&Gp4@0Aky;81Lrp5>[nz<{ΤC9~QDԒ`|lir}(CUuJVV E=pY*Y Q&R+3D\TbS5# %sI8#T!ƒTU V .˲ϣz.X`>wB{jNlqݴ+Z
+<k8-Bcԡ+ۘ ;YQlvuxz݈#O MaB`Q56"һkq‰nc:ByJ$/M,pbZjRns:(-]Y$B@*i>y|wYTN0)e}
+: =VVXRR~6X %h$Ѱy
+˸\k7_DSvec,z0w qTiтB 0skZ{p+ǣh*M08P\_LjMiQHW< eew&QSl}b ! jx~P\1eKJU#sih޹)o.
+ ~<E˱i=/
+L
+G+0|#pWI`_< z
+WP5>G`ڭ.G'h2% ^Tq9N? hNӽb [p7Xvs5!bak;:XC4a${4yR[r ރz(! ^y
+`m*fRNJg9'T
+|f÷!y g5 z/4į
+P}z8:Yw$~
+OO5`9V/y'2ӫ\<;N0?KA?J\|tPc?9mcJ%j$7JTgCuj(-^Z6qڮ -[?KV?:>1"""Gvr-XWk roy& CJiLjCC:NÙ%aݕ ǼhN:c=J?؂žQ|Sj[[GF孲,@I۰@ln{YLN#KCdz½ u"~ɟAL"$Ws2{ܬ̌HyAcvVmϏC<*uLigMK쁲O;@S}aqB"@=04EeX2Z
+Bz3QKű 1fRKPuF>ƋpZ C@{ ~P.w~7Sh=VbS8 ϧfqEoq<Q^ÎW@"fVT(/H>
+/][Uك )q\Jfg:s_
+4)EqZLs?\wGϽe~zRWQ(
+;1A˯=0V\4 /S{"~t[Ròxi>["q@h
+jM!;lظl/^D۳egf% Jax 7۹Smޫs,?HB|OtofZwyE*uL 4 EbOu?a4i+(GAh0Fl%vHQ52 VLvyg`c"Q朚j.\58)+/Fz8}v|bׅu'Hs bA`a0_?&w#\c6<:2uA>/CƍVO`4h  g^7}ɐîO#hH{klTj
+EDbj.6.я7KͻS~4gM
+Svmݯg,(D$s߭2 !g$ҕQDNۅWk3e (7>kqDpܧ4
+8W98SsݲQi^t<[&W~|f ~WM3텿 @6D,mC$"bf_`^p5''"ĉQ".s r$+ċXb
+ͧFGN U?<Kݣb80T?cI+:7 3O$iQ>ҡT./ü
+?l?#߲><yu u򈠋jAAQj=/mTFj{lJE‡CAC] }EJ(ֶ;-[r=jt nI$+JN-m|V6ߢL
+܃<[a2,6bj t9wI܀c&a'.]\tąP^_d?w{*3"A
+<Gz]n?N".SvK(ZZ ReY( rAA-<ņTwwŒwf
+TD+
+P:0nJr l:JIg^ Vz-aQ]ģL|nvaIG$=MyDuc&zDG7,omX"'uͤu's/~ S?9l;DD* kn˳\Á&Ŀv-hyI X2BF-EnƱH-o` cB-ԈRqWk`_bR{D^lC[u4kk/ݘò0&wyek?ZΌloݔKub,F=+BNy6ׯ?Z!M~s,qIX!ҔT[#q@iYi\b#CY Ga,7t7nzwp<cdH* ^;RKX2 3.Wh>ij@{:RqJGފ1lXt)p`Ār= "Z%Rl{}fI-)*SRBU4w=*dI>g66'
+xQd,)P`Dn8ɒ&{񙒩KTi/KL'3 ~};ƞ@Fժ#Htv<&Q &a2|ҡ{l;|YC)%*Y EY)h=Ǯ\vorI=um`Us
+/̞,:OSS&s'%@硸-s:0N%=>rH2gr1 u4@0k.# _TAoOlZ0x._=P#1
+ m
+aK鲋VJBjW0JoՏ]˟ 7s*:C#ϭښ@@#ʱzPU!M_{v$<Uفw1*'ᘯSuVeg)W
+-Y$>K#,N[P}t<A!H>w~s Fv&CmPEi$Λ?5צF2Q|!WY5xU[-y iVpzwzA,"׳\4zm/=g
+mu`WsarU]l+ 1C"N=٦4
+S6YPg (R ?e2 yNSKPC<>Wtj/P>"0Db*h4, 5!I1Lԑ^HZ9M7duRWz-,h0C&>2\`iٟ7vCcno;L<pʮ0C# uJ4xsd}N;~onw{^ 7#r^{ =&$"^Nf|{
+ܬ aʿv7v'@Ҙ|li~{DƌF3# B6<<+<6Ͷ xsdK
+֗
+p1*)K)7wσcƸuĂp!tj\,͏:Ϯ6~DĶB9&qL$nuN d {@aKTPQTs“
+/ef]#,ZrW-=꽝6jOBj) ßC?7Pogx`,df0.$QGriyA"P@^)/^.2 I"s)][Nܧ[ p!pz׆-XRA :Xhz.h3"2a^D0}P:X:inɨa/(# 0:L:e^F(儎Y8 txnX,m_°$b]ۃA& xy܀aB*Z$s ap~"*tJasip{%H]%SqX
+2ŻA4LKI9B$౨{'WNI
+𦃹
+YOly^V` QB,0y iIZ4m'y1坡!_C8 o' qm \΂\Ɲɻ ^,autpŻ%幦Pm~hX4)Aqܘ6VD߁'*;̵5dO.X_'0 f>3bP
+=zAqYyxJ^>RQd(յY;s^ ⍡g'/}{ n&J(s:_11-R<f
+b13X
+ojUu7ذ2T_,msCE<鷓=2Sw$u#ŁmXggw}SlO$'{Eg~56Δ
+~3^<@ sS:xư֧>O?`$Ic|քMDRQ|8g
+endstream
+endobj
+11592 0 obj
+<< /Type /FontDescriptor /FontName /CVXELO+LMRoman10-Regular /Flags 4 /FontBBox [ -430 -290 1417 1127 ] /Ascent 0 /CapHeight 0 /Descent 0 /ItalicAngle 0 /StemV 69 /XHeight 431 /CharSet( /A /B /C /D /Delta /E /F /G /H /I /J /L /M /N /O /P /R /S /T /U /W /X /Y /Z /a /at /b /bracketleft /bracketright /bullet /c /colon /comma /d /e /eight /emdash /endash /equal /exclam /f /ff /ffi /fi /five /fl /four /g /greater /h /hyphen /i /j /k /l /less /m /n /nine /o /one /p /parenleft /parenright /period /plus /q /question /quotedblleft /quotedblright /quoteleft /quoteright /r /s /semicolon /seven /six /slash /t /three /two /u /v /w /x /y /z /zero) /FontFile 11593 0 R >>
+endobj
+11595 0 obj
+<< /Length1 1862 /Length2 20764 /Length3 0 /Filter /FlateDecode /Length 21956 >>
+stream
+xڴxctmuvvlll64m۶ضI4>yyod$;k.Ċ*&vF@q;[gzf&-3 2KN.4t3t
+LLܰ
+@BYAMQᣰ"&AW
+@h$nʏ}
+8;
+cCc]F;@j@h8F T:E
+KZ]%ytaJh܄|'UJ&غ;x%;ǯPЯ4͙
+(rPҒ2_WB-(-8|=_fPI'nV2)C|ė:Lw36fIs@!lZ#繁s&9qs9-o =l@p }Oj
+`֎ ֗{HݹpHu ,?DnXI󮅁UX<b
+e;ÁXZ4c}OL{ C <f{5A5sE{0]pӘdwNp@%CK.6הּcz0 NF6ܣLjs`saG+ fu &feϸ (`5`^:2?77-
+`؉񑊡XD j!za1WEՑpi@(ɲ=;lhlc9 ^$M o\,)vO췎!ngN2Ω2]pZk `$YoگIU͚FM&~P Ƭ
+PVA#FڬIu:;ܯeX ߖr’R-¹2;CI#/;Jq)CҒd/\ߩ%<<6م] 5J Ad
+STb˻f*{՝ѷJAȔUSir$_:! ߕw\4e'N qشH )nՍ=()V-D"E0Zx/FH;cS`$[e<.QLiTPh9h>?L56$ǣ|Ra0b(a`<x>ڟLJnŔb8\X.ه>( |E#)K#(T"=dꌝAZQ:N?kZ)5Ș k !-Lh )QvGp˴^ 9K>RiO%P Fu-EL#*nɏ<׈C|D@F֫ $q[.ow\* \]2gg20V}e+ TR{Y6پh<<єHAۭ搢q4 u7RC;}Wh 98b+hyL~)0<ͅ?
+eMVZ:N)LHdD#uÂm9Y2bt+K>I˧/!e}D48<۟{|ܥ} uS&>ݰT\4Ԡѹ|r9~p, <RTq*ƊeQop@dpXLw>|ü>BIۧ{*56:RndfjU\Y߼^48mwUЙ+BBI4pI[p&+MhrzfSzJa8p^卥r@fSl~@5h<d@P>oED.t-ٜtiÈI_kaBQI
+[_NG%Vb<p:َv=~j-
+?<#xesY0xy *Ҝ/i.4
+!c n@*X
+>Z"Fl?VnI(j8E b~@rv՛h|$/L1~h0 uVdCR9>-9U`.܏6dCI= +<x.¾SPlܑ};qic;ROӼ$zyPqo-"Aʍk`;ֈ2G1>y1vu$VVyS!zr#*+!SAvNQ x.wpR=s Z@2E8˩[q!Mͥ]cGI54'[JPcBjlmVU- TKUZP{ )6i}V!ނ67dL
+;DcɰySmVm!;UvSR:AQY\k)bQAUX)IGA{4΄'@tq¬wbWi#<HD[֘:roP}^ B$Wx2ft  J=Ax2>12)WM m$H 268aܛp9v"i,Ǐ"_~SF]cq>6_+Ɵ&^,.֞l$ZZ4erNfK)/]لOJ{,%jn 1f`aGex{R-OߧUZ 
+(c|BLw%L^Xe#W\(
+S'QGTGQ~`]F!uR=Z_ʱGP8|:U`_V`cF2lOuoQV;MkX`Yu#y ˇO8
+܍ƳUI! )HnTtwkZta/ ӇEbT)j"
+&b:7nH+11F/-:Kك1lc=Z4\?B^٧
+ o3<h8vN%>,;1`3HmznT-HNF32 zsѩ|#mG64ebK~T2, Ѫj$&$Y Q?`k(N*g$2k|Y/M]FE%he\SQ('ىj`úW ;Cgy4_A;
+Gwu~ZM@Su~s8]{QϡJMbzLBӍj g}Z{_3ɠ4KWM2'Q !hH^龯J8Wf0&E,=0f໔0$;
+֥Pa줃Ѕ!Gv5{Nhe Yf:Ue.e&Kڂ.Xc8&VdE1=4;C
+Q!twц`OeIt{x伓eWY{+sE1߭ђ!m}$ϻt!/HA_bЙXd#@ƺ݄0\d9'k_*y'Z;(L` 0:.6,8~itm^<tQs34DE$Zbn:[IYa$1^U zB3jT#gA"c+r:_ffl?H #;.LJ=x^jo
+ٚ $)"qT{?ag|(r^Pɢyzbug.<}Qъ
+{q"!ga br1Ux-s+h\+RְSgV
+- &=R8lSCIĽ2O6a2A͗oĞM_x #c|ihB z]6T9[̈D\'ΊD}QsK4Q;8D򷹝 -IMvNb^ uA?X~Ẇ`]w^6 ]ƕ(yOD݋W`wuP]eaR7'.wVL8? ;
+.򗅿Z\'f*a?
+ Ǭ d*u:$Hɋz*6)^Ne4ckI| FCc4=ô0iڷt#pIF# \f 9$LvI ĚV:C(L I\es0
+SV1bP(fb5mOڱ݆h:< N_HBd*OE'X5@
+n]D uc\iz+
+0Zpj9TF ǝwtCʉ lo.eNУ~cSr!al6YD⵽%zIguܴt9siu+x'9ώWw7wQ)S(eSN)ШA[%$_10"Ŝl@ܤZ>Nu8\\^8{<(Us)ҒɌߩcMA:ĊR(@Q>^uLVΊ"y@t1YcÐRVb8(AX% aB08O-3Ґǂ"\<v8h7̄!%d]]jدj"A*1şkH5#Nʥv:{ /g~ٟUkW
+ BBR.dIGU\C77~9Q3:
+z~.gb;oO8<ʬ}Pپ QԙW_J1'GTRb<<BT~V|=W^}Nyx,ݳ@4܆*$m)Gd٧D6Om:{b+"D6$jktzkUC 7cha:l=HPk)ϥi rʗŷ"DZt%PS(Zg K3b=éۣٝ';9jZLx [Md1~kZ@ t"1^KٙX՞yD(1 ńI$C2xSXs
+٫اBCRhT9>_Ҕi kvt (XofbbHOX%k@wQ_>` NU/ʆ`jw^g X/f=TfZ~ZB6WX^Qq x`7ꮠpXY ..
+l:qkE'D"
+!~#=}38$jic܉r NV9Z ~f
+`'X)N, a@CYW v(ցT R8iz]g/[|@fB&KX^4SG#O|Je8mTN #=Ō̈D(腷UHo $'K
+ȿbWIT㭇`?us FURLmf:"'waC)7ӇDʚÄN,PcX 9}'Ӫ (bTuA3ty@Gʇ5Zn|?K]U%pl3Cc{q%)'%-ݝFAeʱctfɥ)' 5 ņ2yDŰȳjFBh(1<D=,v\3v]*{*tUBŹDT>ysdMt $!鋭KfUo,j| O0+28cjaMg{̘ ]f6V#볃4Բzi$y`7bM6ڱyN*ɶƎR._dҔo;00iK~ݼ/>)4DHPRŀ6uH{&҇4R\ *@XS)LD?)Fg` H\d
+B x7SdiLub4:r{B.w?V ٙޭU˖OC6T g'y;g*; /J3?AK䲠
+k$J;F5q5SA<XEwLeJ6\TI٤|}6jssQtEor)ˈ^?w-ZF^7dyYA7XX$hЯIN
+x1|NbJe3+cv)w 91
+s:[4(a5^k;ĜoS/X>i.u~qZf#YE#~}Rhm#">9^\i&XI܁ƆRbFi ဲП2 8A]-ᗯB`M/( ]+eZEfN3En%z/h~g$"!G_@o{ 8` `Tpmqzbx!ի_~(;u$aRoǑ
+qq~
+GsU &0ir:2CXq"kŤT3[o
+xR3.7惙#[ȹ77:`0qjYRE^n 6h<J3k]E]Yy zX1vR46|!RCSIsu-_Tw΅
+AIqqԥܿ
+#Lݢn`]ct ;;
+/u,麙-*Z|Gֻ[ub4s2˛BDܓ -Z73gRƺXp@)%ݼ2ǞSSIbP &i}]f.PK(K
+̚vKqGb2ӶVԂ}jWA `XzKB8X2X^쩈K66T yJЊC;}o$P4}E$l'm87yfDI"A:~|,$.z1T~k2| J>c Cp65pr`j
+) t ڕ$@WssI5fKo5gȦA`]0nFodtf_e JmW5Oݦm3n"śp"~
+'jNh5)a)PĜ$&*Wm-GsI>.c6IԭF0?' WO cK/e9UTu>B&)źRd=CV@8Mޔ$5lIST@&ՆR.(S<Wog0*=)KX4z8mH8NV1=O(~hζ "(jpl#Yדkϰ~ӣE97#e.uf*6H gt.Xg2b 'Ͻb$D ^:!`*_un,.;иJ
+Fi~(swHL>>wZQO) p/S^c &::QG(KrIYhȁH(kqZF&ftzS va\]lszwW >B ԽΟڿ}#wp2>@a9G
+lP;].ٵxD2T{0AqVi˖Φ|L
+u_oj?TNS=$JY\ڵPᲅt;tYT^I 3g|2[E{6.NK \ dx@o~ڃV WDJ@p\3Ial AXp[Sx˨%Ⱥo&}^摹kq B`Z\=EԨ&]dQ܍@asbg9ьГzoq*STw_NXy2A5;bP*߼9W,#r(}_UvafbE+tEjm̆y;+X6"Aq=U|
+(MKQ H:}hlCcunۿ@46Ek(lpz(W_{L.s[.#&&쾞)wr==|w,PB)Q~< Tkk5M!3XGzaV/eCL_0C׃P&X-_`4މn ,CϞo7fEz;t< zCVZ;U'r{ YAYt7uFu2Ϩ/J$V
+S 9(,[;T1`G% '"72;ɒG"Gd";pZ*f΍AۋnK#J>fJ4R0jtZƾjLn)MO+E#ocp
+)7yjt9KV W@81tEmDT* O`JC@Eo9
+$$ AjPuBP&e54ܨSR%?0=nJawE<٦؊ d΁$ӚUW!~$ 7m»_\+Yk[\xe$hfa<mꡍ`jG7z\_Z,rsf;?@[(BSW(Z.'Kn˞7( =4Wyemҷ(A0驂U9aiI~\^M!e$"T4~"{F`W7web(JtE5 _l)ߤt@;|¸󳅉`?KRh5ѱ&*sqb|@I|VtX;n#oَF7SJ@c
+M/y`Bԛc y.3}
+ؚ;q*
+Vckb?4fMF:`PTgSM)'aPҲu)߬O#v ,{ɈC 79&k5'y 0pU髡SFU`C'Fc>MI:P!Ԑܓ]2<NUW8lU<K;<1q:}R^\L"X*<LOދT L\ijKneQEXs"DQ7eAYV
+Q`~fhP("_RX(H2BA"&s=6+"Jb}J o x,{C32Ncf֊&hue aC3FVWbH۬+S&.pixܘ˴{W_3wmŹ;1LAgVr- Sߨ^c4@E{c?b4 zN;\**p+3 Ş9Q6*i▮"!2FXz7ɨ.0-XW6X&ilH]<B}ք,5hXYLc,p4IQҕ[3Iyԧ?9ٚVf%ywgJ|0` ,uOLw Xܭ +a@Jvm[_JB,Rdc%uZrDɊ'p18+8nl!EN%xӤf퇇<7rQ:ʰ*$3|Z
+[Ѷ${M!hY/8}n^6Dى Q(kئhQ?Hv{nEgJopKIDtfZ#d8!:%dQµXsK1 ,fu+3 f&=MqBĞ\ cΏ ֨4idy1){OJ0 _&
+4^_
+i@Wl*=ϑ-` В;yy}Ux,|^צ*H?&wj$W"-hTL9)Xulf.p`az89h6T!KJaz >32tĪ6c XtI2ǾW,dϭ$ki ռz-gȏ0כ:Lʇr.89R<,Ѐޏ *n3$as-;0)l,;ՆՄQj&Z2iKm"A@s`1틔VMD|5|K* &v.Z(WTAؙȦVPz9oT#1
+'ak
+p|4S(.Gps)eΉ%^[5?hCb^pצߔ#p⅌£09CD7_ iV"q:X*tF>aMi2oieD)TQaZP!c rטD%`m2׭THDV)e:^Qzr{q۔A=&|U,_Vd}XJP|;"Z7o(iG2S(R\3U|vw.Ў^p/9\{^ 2UϏT4)82NQ) T8<xs(F8W wvP4lwA`Op%Ǻ6Ň <uD@?T)ck0_YU` ,eY;>ֲXCb GeX(k_"NhWxWHjyMie
+ԤW82Y6KirԒ2):v
+Vl>,UXs
+8. 9oR_b/=z& p_L5-t--*2Fn<d>5F4H, hZġ82V!^AU_05ld-lL:9p̹gM6}=<ڵ;<tV:-ު7MR2T˫gxYR_f
+Og7@˽rk!%WxP'$qCE蝸szisEquqxɢS%09;=wݹU_!/_h_ {C!R;SMlܼ]
+GͷNEUO#XZ>0hJu4:D;2Bob g1IW o 5kԣu#%Mp'hn+WQ] p&0=S͔`'b 8
+ #_rK
+[dWH*+d#&Qv%Ԧ.5$(ŽD{)%It+[9QsTOqjԂ 9mrMVmVAĭ8R3`g4Q tȴ+{Ƕ:z4TC0 md42*N>-tѿscAu/:/4&mi0416}mm$ Ez]al;TYC8Lfa
+M:7jk9Ikُ T:8LcrJQtxѲ7KXӊ 2Ŷ"Q;O(@"MYrAr
+
+!,ƀS3\&Q=)qPg?+.\ XIX=DL+"e iCT]-6C܃uVA{U~wA״ ;NL}ׂ7L2]#O|9+QL[# ɢ`U*y5;jg8.TE#9r!m
+IOf'^5
+endstream
+endobj
+11594 0 obj
+<< /Type /FontDescriptor /FontName /QOMLEN+LMRoman12-Regular /Flags 4 /FontBBox [ -422 -280 1394 1127 ] /Ascent 689 /CapHeight 689 /Descent -194 /ItalicAngle 0 /StemV 65 /XHeight 431 /CharSet( /F /M /P /a /comma /four /g /i /n /nine /period /t /two /y /zero) /FontFile 11595 0 R >>
+endobj
+11597 0 obj
+<< /Length1 1804 /Length2 21821 /Length3 0 /Filter /FlateDecode /Length 22965 >>
+stream
+xڴct-mUlv۶ӱձm_]{>72{^w*2"%:!c[C=#7 "L
+CF&
+NFf_~)'O ٘Z?ߕc11ا,,m
+*RS|]ր%3] ,/`V[yå.WeHdS%W k"펲<LWnDP'iEʲl_p%[U6mAG|_Em;^7!݈:}3o|gg j<p{)swu}i䥘4VZ}~+fͽI޴<tS}83gr4@WMfDֹ&~pab.X'0HC
+'4д#Ԑ+{\0o\q&nup
+u@7/{T=}5dZ역cIWj<ڶkGOz0
+T2OwxwėZC9᭱f鶣y]wU!6jH,"7k+Ai逃in=%6R%AchBӈe։Ab&mP wiFѐʲ EwKy c3X+eȭ`~nHMp{V"HF@4haW KI@D8{CډW5 )%}%'B-1uFjZʤpvaSM=vlV\u*a:luaww^RZ-ᩑ^
+2#ki}ޝ>Gf}v`-hd){9Qt]f.R4~܊I_Ƒ#gۼ/|MJܺ#ѹiXXȠ ǒyH‘J F-b-^EySr{iv?ՔQ簋9G{[_רX ~;Dq#e
+nKy&?met|eZl*9%78e6lS:V⾝dnT+(zyfwdDˣHSCrYBSIPrAng/r+w1z~׎m©'vsn[ʢFo*얙u~tazi+U{S*"K#"_v:iu,ٱ
+1JbGpROh')~=J'S_0^m=asw_3D
+C!gkH$xVIYמѽF?N_$>a*qf?yFrLO&A|v8~s+{=:I T#?7 Q/m$m+]1hkeApp>$hL%)ee}/nt-_ JT4\o<–ŀTeC}o;svYX>
+E.bSW$9ӖCP6ܛJ,}sz3b&2܁+ tV
+]!h<A2O9y_)s\ {ɿYCC`԰'uT@1v`W(s(%7qۄwD#Lv®"hu2g0=`\~'}j4]YSUpTv%!Uz:#&! 31;:gܹ<Ϊ'W$ 䀚erթq˕t{6; Pp>O=_g\-(GQ\qjPa`P hEh!A
+bNhP%AX?LtK-1M dxT.8VX
+r=\tE;o7bIiþ y_
+> pODBq!ÍBxB76Wų?] ,Y\`'c(
+;ϟ#Rq/r u8ئ :
+ z[ 8 SD5gFMɁq~rMUmUxv5ƖF&ąJmH
+~F&eB1sVKGS"G+v LwA=GGYIk@0 BWR'Dʺ*ߥA@
+yWnX'J K&K.jf l:9Ft%u"HP36T,0Qe̺p@eD]_y[{W=&Zc7ڻ<k-?8ljHAc
+ * RՊb$9lO2Mr56RjZ+o6C < '9F|a=֤Mv>*Ë|bee1vM NӺǿ^_jZTΓԁD@F6; e4oG=tAk6$hQ&q{Z<)J0|dl|s5ld$Xmti넯s
+}f
+)'~vL{dr2(h!P_\ds;^CN8QTƴ)s+:YScf
+3=3XAf4|Žq!QrlPG
+ޏ aͿ>JpAftHI(Y 1Зtû^޺TV.y>p }85Q{ A'dqz&ˤ["1wfeh V57
+$S"q]Jwy̐I1Pd欞.W"9V*;l?;<n\.?5ۨy{KսʖPi7z>vMfIq cEeL8I5y4=Xr^y)Hȱ*Q4<dwYeV̥$dPpC))mS'o;`(d~{3d? UuD ®Zܽr{q0z/KȉCZP,OzzXI^Azq}h4
+9k91Y9m.v%na{`[jM q <f.8/"b
+)׺030FjKe ?G-y[؋Πdza*S&ju-C%WJ86Z2]^_kGv]#9ݩ3B @
+3.ɌnR(Kq20GsZS]hIR! x{ l_nދ=[ջEɓG=Tr+|="SMlJ̬uxbTzAQ_w \˛JxwZobPQE`cn~|L"XRXA0A` fp]J (J%׵u* Ʌ`
+QLN8UIwX/37͢>lm`8,M)̧$ەNTt͑4PyGO濘یuSXdNmPĿI|˙?TK;@@ mWfpRIcGw6UzJF!Twc!OxYu`+ XS81y*=`QtE7՗dMhP$8 G%+ QD:+dŇhJz%Մ 썦Hъ_gQT8of4,0or. e rԣ( p\ ~ heoWrȴ 'OL_YsQCiHO.),Nw8TC45<ڻn.d$)qTv#oـ(vO%|G^׊E›rH5S s<[w|0o CP >[fc5ыw 6:s<K1ɝDs͢^v-&E+&BTR[Au{<g$3(+9ૐTv $L9WQ!x3Lj}*D,;E*\Yq/0ݭY>zKC;((t=d{{ LY$/=$}Ke]tx,) :O
+wg#b,VbWikLPWGjtЁ7pr{2gRge'J[! l)VQV
+$~F̱kC7>Q5|vOHvb~YEF Zc[iF}}K_~]hS.2r_@w["v0ϋ &~ԩP-f
+va$X/bd)D}M?2=7Oȯ87m@5'72Q^9q؋Vs6d^+&@nW̔V \K)a~洛ULʪÎɁ `R@
+C8o/0tCT7XΑ:vRQ$ZW7 37!hhCy>KF[ˈW?鲰<[C(*sBih'3ޯ9R9Y7Hrɾ=} 80ڽo8t%6䇴C=NREjedEF<`JCo/J )1[c" ҋEAYl*m<bK%8cem>Ik\@pw獪JJw06әPU|_U+rIICȯ-|_~|({*_:ze0F o$*~
+)y榑yz9n~!֝AG& tږv[\;gI q!:`~.*Q .sOTh?{#-8YPQ
+ykeWqqj?ᆫYlSH}v/eߢ<4r۷;۽zc`%2S azf܍S/;;1WLb5 fT:MS$db,my-Q0OAhr3 R2ǣ<a9
+Β*'ՙ(|RN`Ov{^IE5/OE&i pФJbl>y)ޞ0E
+*a2s(M:F'=8=V=-@ i*|4[طeTIEJ| )E!lh?-n޳E9W]9$GfnḘrd&9GfhkRZ'@?A>t72q(L&ݕzO ̰ޣ qhޛUd='>҈^hFy=Q2֥)d0W|4Qa#' k"Z-Uw@05jqtzB@5(?IB#yd<V/ZQ2̽4j`TA^-Te5_Q7W|T q>d**Xg8D:JKe% _-CBZP> >?aT=! MÉm]0RkIc+Sa^35+ĤGo|P8l}毈^~s+=Ȳ*IuiN
+/ZUG%'șBU)JYsn㵑9'+&
+{V3uyl2Wu'P8uz .}2W;\eu}482'yz=G,yOQ#bk<ALJ'V^tXO4Gܨ~v sBk[R]e0SZZx,XtLa>׼cmWF<$eop_ ݗW.~KWu% e' m?F +x zjt]zTr>ukWɆD2uWHKv]Ç!3)<1U%A(x4
+-WUB_QT]m,a7 WSӥ
+xj e~5C:]l&@b6U׼!iIxNKYUhΕΉjTCx9fmT JzcVJ,8xTU,p=@Qf,T&N H/DkjXs"V;U޳aC̓%^O,?^9-omkY0i2|o,<P$ݢMn6mfg"B|b+dPaÈ^<û(@ lB"AְPRiHc>
+ZC+%+0oYsCEEҗӢctOrg Nc&ܹowϟXpo(sq@3JBV|aV {1eBMEzP6<Yc݋t.o5DIvY&02
+pzc31-V1j(;\JlV#LY"!XKgE;HD|R^bǸnun#GoG`UX[Yh=zI}0(eO]e9+Fa-vdEqШ{ٿ5W8npvө=% 9KF(\^8UIq
+ f.^΄Ew_3cӱ+?J57 LUSĊ%p\UfX89Fs:7 ~,W nw'tvEua.L3fGH)X !Ggc TzF:cei RHPrIY62˗M[uBrL"8MI H0uycNJQ ~/9#% tZuToumʈ'r%R\ c@ k5edB` c3o0U:$'EE yzbІ*Rw]=J*MzuOi+Yqt4"\
+)
+\R+^A-ε;2o
+Z2/wgйtAw M l=l][u݋;“ZUshĔjJISH{2js&8#G]̡k&;W+%j"Ouj1(4A1*
+:vѭ8ivm54I
+?WDY=$ZGсK /A'\Z
+'
+zcқּCPq-lXe$@{9N,dbc0M#¯E:<} RSljZhe$چZ?0b[B3U{lG 0g`qs/7oUC0dل7` q .dҬcU D<@. LyA 'PO*zI`=6 #Y$N+*anY&plc*}]WȞ]#")$D4 %8v\Gã?%y;oW
+)b ˗֯REF 6VT^OptLSQ0bnE3[[yeu%wsCJuyPBb#x<2BCH9^M雿VN8[aVQX!k.^[7І"+G\@xk/UEF?~I5B>NeBvYd1ƈdA1 HQE|K?>xWmGejr*Fm.%Gԩ2ɩE/]XDkb,h HZ볆atTb>ڞuW'b 0-i3ٔo߬rܗw5 4+0 Y\lp
+ VlS5FfrTAWԽ|H Na!F(]A7L5$Pax'vB]a߇S3E>o^Ɂdչz Z6(g C^6^Ċ0AÜ%ա*`gߐic@ϔ*¯zJEdl{Q9~8b\Ej>f ۡMKXӧP?C@$U#2ܿ"V&Vg>8-pS9lN[?'Hyq^hfǧa"wE<%e+ឭϡvbM-EƸ {YHsSJf^ʩ ˡBa5 ҙ9]l-$k5k9F\to* .gÎ_Uj(
+5hɁVE 䭫FDFO4iՓs%cCNbw|+A@5F+]ZIiy˥Z^ga`QJڙgme4^yhIs^t
+
+
+"X yhK:+Q"97P 6G#p
+}DŽGp%j&od
+mw`" 7i45ipsGo]eQ"\JȬ~צ\.7nZ]fTϿ2& ڼj"E.Pe
+Ŕ`&@\ 8%U[ΨM_"l)9?Xֶ׿9r9
+{XQIvƢ‚:D,X2VJ ǂ=>0,cjƀ " 8<hBGLNg! Z}z/t
+[,eL'&jS袜qvKgӤK r'8 !AALgQY
+>S/bo r %$/5[m'Ao-z'NqA[aȨ!7+
+32 ȵYSh@B}W 69AX~Ƨ%:|CsȄkw)0sJfY X b&?)w$p t&ey]PQ E[Ƌ{CI3$@:i[uE6DvL={$9%C^ fHMTTl{(hAnӺx:*oꕧ^9͘׶ Z6)x;aYBR֍uHe;pJ73ԫ\7|wzW%Ny,0E|–6.[z& Epo!,|_,5
+$];g3Ay 8Oc
+?x> _w} ,[㍋WukFf|ZʗX>\JI&p["v=WՀfXÞ4-']O-Q6)\T4貝m+zHDX1m)p_N\9m->wB442 Ȗ~yG_$ op,юi{W\9#<wQdά'#Kk\`+JM9ӳѡ#\PhɬH,톋CjH@B AYdĥ}N`Wk(SJH}㢒V<ېC=."N~UB?"%G.&چsjO@o LM! A,Ze*T'̞$kD32BVe˩٩hbm4S_#&"z"ʃux%'뗵RX{uMgjrcCi"n-.PYNʔoi3|:?ӥ֡G< NfHQ[#hÕ1V T Vt;msp Ч/CjdͤqϿ?SsͧATR-24nr;
+- .pxҏ _HzR;`mFAV։N?RG[*B/lϩՊ8f5h <_?rx 2Izn瓂gt
+
+&et- 4d[n.iC@e]ܓe,9[H yļM ✳wP~MAe!)Y,,M$jg >.^v"r#,s: Xg0
+;n?N] t+WFyꀓ'%PnC>]ցH<M@C D.nr6߲;A$RtPנl ΰ"l9:mYZ; 3(1O 86΂y,6 WTx2WxR`J
+S<|
+OfMقْnȸ:/\@ێؕO 绦
+?FkIͥ=S,r4Wm2`5q$FSԡ!?dB>X풪qv؇i
+krЪDȢtpScW;
+gs*=-QeyK#y6 pnѕm$ KE9U "UdER]_kC\,ەKn>U _f_-4gA+:<ۢnIݨP?\x4E#a _ݿ8ew"(x%sSw`\oaQ 8Nlc}!DI }&QRnjM3>776q~T˧T_41{roS{M{68J/)!* 'eh%1'DGr5STQsxWPx{y)I/Y,B#jw݉
+EIݒ `!:E@ie"OL
+G> -ZG#T,293cp׿| Q1̕eF9<_?駘؁RU7Z]C Tv#U-NaFSۀ#>vBQ~SV5QPM
+eU
+pyh~>E\7r/Vx\=>ZBŋ߱{1-h }zXL0F`j'=B`t 4R=9in(%5ˎ<SɮR^ԅ,,6t*s^Lc3$({
+r$`4TV+;_q/MAFGہė`WRޢ IGɶA5q$, zV<'Q'6UQ&tf=C-rq_Sa7E=r9|WxF9wIܶhhJ;̝UHaH@dg|3P.NDhzcsK3
+endstream
+endobj
+11596 0 obj
+<< /Type /FontDescriptor /FontName /JTSGNV+LMRoman17-Regular /Flags 4 /FontBBox [ -400 -286 1338 1125 ] /Ascent 683 /CapHeight 683 /Descent -195 /ItalicAngle 0 /StemV 18 /XHeight 430 /CharSet( /T /a /c /d /e /f /g /h /k /o /p /t) /FontFile 11597 0 R >>
+endobj
+11599 0 obj
+<< /Length1 1790 /Length2 21416 /Length3 0 /Filter /FlateDecode /Length 22479 >>
+stream
+xڴzeT\˺m ;ww ܡ=ww];<==RӚ5zMNL/dlkqgf`)Zm8@V@
+t
+FNLLp
+llٱaprsO>!QY
+)˟*$f8АXNj$M\/VVG'ߦH<u%rGILh4[A5 ]nɯH:;Om&5:z,2zDu-ҵp
+m oi#&+L3k5* eӅ~Pg9q]3V֨s}( 5q Ww)1I#4" ÅUD3p&{(FtqrK ph>0VBe@#V}*3NVbS:S7P.ke^"WiDޖg
+ڮfQ2A h̙iƯ~ZJK%EԿ͏TDWa !}Y/i1*B"["]w E/Z,[>NjhG^!{Z޹G/ 1i##歚be%ݺaAXGX~f-(/j4^|o^@tpz#eX.jg*gr &1#^k>vlyT~
+<`Hc'&y2:(]|4{-/MkN
+@,X2n5M̲N 0ͦ5Ƭ9}as}nR|z$%~~^w|>*(Oz3 4P=Q1ob.dĘi/CBjR)i.5b &GlwYaܚEO
+_GI71~WL{J$t>653R_I}dzY=ND@~ϊEVdtSW$eݽ
+m2_[hS5K3O=j]~ih@-XS؎/]߻hC;~EfO<(L?/٩i٫kCP
+!>"|k6MJ)+DZr\J^%pPTe37JeGu;6;N.0q^}AZ>ڂ^{5Q6NUNE
+Ջ`f=cBL?ܱ36c/cJ )FXOc
+KJ!$6+ ^}ِum2(Ws2!CьFdnh+[j]tA߯MELZObG$fP ExDgqSaTgi
+dWjh'ӡ9QѝӇ:}lЉϝ$7tD!1{,;,U$K9_OM 8R"T#+O0_ṯ.?V]pj1hs3{"'Ey .gW ZzXP׹H1I+Z-T/ԔF zU v58}$_(<zviĄaarڜ֯3[Fvѿ2|;>XBb:']$ QlUz1#aM5{
+JY|F-Mڿf\.5 W׵ ckQ֕k`#Nh1S)"{~v[0o<,p2չ앧~%} rnRC',YkGR%Fl=X=/ThvwJTlIq>DOeU˹< EjU ۨ梖4Y;W*Ȑe6,+/˻;&Tarp"]mc37&zI|az6!83,:fJ+7% #3e,*owdctt_ s ~+awY H89C-g拘_:i^$x#虭nQ
+@ƈjUh!Lwz FYuL|&Fb ϐc_^zf)js#(VUc#yFJ^ZI l}]' iIJꋶ\6!)p[ꄠKC4GZaU:^HI$g]zQژ#r *FW>LpIy(qqz:.n#/|B$wz;-z:z^"TG)fic5B? ۯ8Zm$3T*^
+il3e`I_R׵0oJ5"-86b;L)Rp=;ڳ~/~=,HZ" ՜;"R4I.7!a9CS..*wo1 9@@K.Cݫ-N<`^r'j싀 ^ L[454f-XRs?6y2Z@qmqMN>cr\1ʜv[\[ܩ\8\?{8^?㮘#}6d:+DXYɞ6 [\OcXpCD8"|0g#GV>дc:Ce. |A-X(lɮDQ nVo~m +)Y HFh|UrXN*:|U4,/7@ekxT,_ܓ%}E*4<x%IN1v/ȋ0iMf$⤾&pupo == >rp&E,CɞZh",w+uǮ/~:W؜!^,.rʄ:KӞ-y%ԟHsbf5貪&ZfA؊<Y7}NKȋ{k #zN^V(B5tϱ?B5B $S'1d38wgzȇ\gtw9§}=r.im^_0@5J!ъ&&!fL+U\2bvA#@G!s!~lΒE0-[pw-P# I^h.y3oe/fQ져fJ˯OMzK75_}r*G@Jh:UG}~.&.2ilwSRo|<ca]&a%HvO6َx:uk(@׋+-.A[MW,)m|݉o>P>r I~r8y55vP#u.+LF(#LփGCdh_7Έ]
+GYBTh~H/"wcܧ+M_xH_aSas|Vtw|{}.]/am*}h'ѕRm@չLS Q/Gz6|'Cy1
+
+3mSznᦚH^?_GWQq9YSejN&TхZͷmuwi942ʶmdG,9cB)iM)(:zo y"q}gH#6_silnS*2S-v L8aą([{%OT1E<}v#g>*'.4
+xuʊJb[mrsz"},HNTꘘ-_'O9Ҹp
+i# +866Ű )co|AMeb|IkJ|>ՒA*i*BGkӉ:5h@g828_
+Ea@Й[.x^k55`?7o
+H6覓 f@]IRiqkf13a'[$\'3B"*S昲1+4c@Z4)dn$NٕDk] TȌ JF=VPvx`1MؾmT*;4N2 aс
+%YPc8NåȞIw+4ܘTQC
+h;\FfV5O|cTXsKuGq.^8o*b*Ὠo~ζ,|ے7XmInA+ۯPn
+"PG:Љ f]d7.,`KUYK"Iukz=Q`˵43-E`!Z۱kcǒ߿z[$~su3̒Һ(>ڃzGZ{Oި/&'(j[$uǟۤD>KE)}J 8BÏxXlODgEEß~{9N&l킠4)){4qQ(|QoH||G6JP$AO_;阕8$me>wu)3mF̶[~2萟0rQ!o׳*ԥjnAyRAws cp=YFX0#+ZG&
+l ,9fI<ۅH5Û+9ϙv8% >tIK`~1mNپy@l;"p>7Q6yҖ>hu"}Q73|!\N0 O+c=kiiEΑ]e M  u4#ܦ_7吁 YWh
+Aj{N~0~=:+D6f].}y0ܥ OTE,Ꮚ2g\x
+VqcK~Bjs;z' 6HE
+4r
+o*ZDo~[Cf%S@2n=`KR,Upy ^e+UОfI"{}yoXG&=2"&h
+j?;9_
+t%Q&7=<kq CM"{ܠ!Q]2("V}|Pf
+ [ *eߧsu`U, O%E2 g)PHݗYK^ $o_CD|͜)D뤻INvO߸T>r})>%u[\1︈DWpIN0[{/~zJ וV!ɡeW.{%G__Ъ^W^!J.
+g[
+ZCyG1n>CPe򒒽@$[㯑9`B9uHiozE$9CO/JPch$8EA4ȓmchTDH^gMe·}҃PBx 6߿ݺY/p)0t˻4TtOfK<[Ihsh+k6j\(*>BfP๪,ZhF1~1lQ/%";Z5M7XIe:j K>Kt'+
+JZ4a\?/j 1-3selWm'FڒC)R"+kY Ek\ڱg>y6Oă;F00Z5٦IXX#{_?
+^ÐW}gAj 8BBb Dz6 khSTٜ]Eyv kTLW9_TS-5FH[?XClH:BOlg!O<ZfΚ hi :pRy(܂6W(&\?߂2Žfy:?vғO ^<TnhvIә}lz?֤% qLCcAoBX{X`=\ 'Lo> ɁgnwtفY b Dc`혅5G~3g'`)ۃkeE)h~2
+J鮥L5YHްܮY$
+%'{MoOnZ;NNE wO[6|۔Oya%8Qp.*X_+_4<[ܫI;T޼ϐ|Z݂cLyu—jT7(6WdjNQQ;6"q5N< Fx$vЛs
+;0,;nid~"W7:0
+ft|=uBFPCLVсiߖMÄrGĵsSHtNЧ GF\6&0y:'0Cz>37ԋ`x>}b" R=|=5d&nBL]dwP6-HO`"<cs.m1*t\^$1F'x 5kUu$0GK[JaQ~ТB.ɴua3DpY*eB_|M%?)%av4ՌjIv&# D-U?,P,k/‡8u"{y1Cd93AcN|wgX[:M3 q&t @8ִv;hk2jI,:DIrEs =
+DzS$:/FB@f+9YN%$3X{7ϼ"XlQv ~r ևR~=pȮp4j %Wh 3 aw_ǶoY|ӡ`GDZo6 wq WL:#;&[7Z,Qr؛UB%"&GU8l}UVߦcAim"U_9_&$=! GzpRyD1|r1j~JOJ:/'mZ۪|<5V5`s9fsziZejQW agbgK8;JE?Sr`bS?hB;
+\eGe!cb=rzC7M.ʙlQDdOUgN<#u @c1u"b"QZq@g8|BWs q@3bah
+d}a ۚWFYޕ73طڑB)pͥ؍F1
+֛Gا%EHpPbzU8)0Xd 9tKl' [?V+ (=/< juY
+@Qbqt3x/^{u,Ivs%nV9?su'E׀N.y.-`AyDQL$p(t,X_E]w%,^J)Ig.Z%~ٷk}7Np gձ{< m5u
+ZT#KCm<gȎfV9VBv =XxKQ
+m1$Ǭ+a) {I wÖK}xоo-7vM-T=]KC'"XL9$)n>`> q+_6ZaGjЪ)q&W}{ Nohm47S1B(=|-RI2WV54A ǓEg1[UV,YfD|,0̏;%dWrsҫ%w ސeɊ7’Yu[?~#J4K+v6OQΪ q*5"AMuQ8z*\ urI ;5K!&65J:I٘}fN mE# _^QwAi>^ p
+fWmcVie~8FrݱXzD▧>mQ(<z}N/VrLDjvN*d|n~93/苙*>n9X{ƌ T4^^1kvv
+׃յvwf=Va1PawLn쮖FP
+UqO}RY͖A}v9E7oűǒ(Č쒩^haǬXiyK@rlJ>h@d}N%DvzՍ,@sRvvy TDI=(ЮA&3mֹ:bx 0c,,~ eL1A֬'ljQZ8/}' i%d_&x_86]n>QlIx gSΡ @<7lC4C<$\;F r"ħ&
+NX[#FQhV9?a\# mL%-)&`
+mQ+s0cg o#:|I<ř؝j5d})h[.?hX3^(˪Sչ8nv |.j57F)0LfsA -
+p)J3z'&X%bȢaQ/V..ۧ*Q=>l"א+uƊo}P );C-l !A.ovoSVA5ty_9!tdS{馟
+xnJ!VAçUu?!^uzHC@z7mdRɑR18p}a`% `S#Gm_[(6/;IoH񧑻*kOt'14m8}X2~;}v7|u"o ~%3WH;"AC%i]y; $ZO!x1@rڈk D
+c:!n(@?Ե`.ԗG^yҋ~2%\zʕ)HV{1ZUu2s5ޘ;Mzi_-ڕ44Q- މo,;J ?zLá)7YʍqpFa[S/;{fNOoM,%%&Fm%v*Q
+CRMDy{$‘I%*HۿeOXp(' F}wA@a|JcO)ȕ?XXK+JfgFY'W.OKafTrzI]]Қ5 %0Vø62йU'iƅŏJr5I
+M[:O4x-m%Jfn |QB aГl.Z|ǐ Ut>)enc}Y:{+1[LMw+cеЦyRf[|JXt@ED3,̨ kfh;>ԳI_LЈ >}Q%ا*4=n5>sӎQS+&hs<ʝG)_f'~(X7e/@$Q{~K"誀ONK|1^ xfŊ-{ٟ# Ϙ- 2aIHK17s!'*;A `Z7A!5.:roR)OǕ導Kĸn;{3pWR: R_gC]mtpaTwCqhIjfWtU!ˋfeau&$'OXJk5JMHOt_L <^8
+(NՂsO@"A}\3T,o lZ{|'[q7lS\I='cX`@4?^2~M"MJ߶ý#
+4{M2>%ĥ5`Y yCa$׶ 5ݝҼ]UR|q}5"%0<Kz%[Y~\= OT4)y\Ť_"0$`Ct5_ {G&䂈LnQ#Q4:: ezN^1>E4h
+'frlEAj}~{d
+*c9 jjZe`D*p4zH$sZ^ 'CV˄(qI;Dp܌_h}Ќ#_ArhO#񯟈R jn ehRdh(s6WEez~1س% C.f!@*$/ "N,'?t@َ[A}sbq(RUhpXOJî.g^1+P0/=~0HG&g^N2%i@Ή(Q3nP^ߑ{g.guo)śe)<r6īK}hCy;=jkINo<'=AvfW>t>C2"3՛a4 ok0uLMH']4y<j<5r YWĩ,T=y%ƽ| WC,R߽n
+,O8 I8.mBicxejܾvoi
+E-^hڲm*p
+diه06f3tH/Tv^ O~1jI`ӗ8Լ%Z۩5)K
+JǏuvk#K$.q(L_AZ0ȵJgY!ȣh$*s_+nb^O1γ_
+l&ypEcyoj_?tx;ҷs|Kt.HU"amZSd||O
+94m_Go]0
+Oqvd?uMit78zVkvʛ! 5tFϱ3+kfE-g
+8sLnd14cՊ Zf `Ӷ_EK^!GHP>U@;u
+N`Sg=a42x0G
+E)5}M` "0~$}B(
+?>>#J8EAC@Kyd OdР@{f1(iy~T>jM-aM64i~WrLT ](j'?-LCn1 A/ zԪ,G?x?n2σBC\*12f$F GpT\RvZ;hւ|c=DKJ,|+IptBgHj=..P> m[WyR R<Wst_Jƹꬋgs]J a6zsGO߾-3JӅ"4AfSc4m{fgܮb}#񊎢ZF<Hq>ԤzG4{>ݿz"bW&Nu9TX& xuv7t\cZl6YU)KNP`)p2N(|w .nu-l,o6LBSH{tvLE@݇ .M+Hm+=~pb%7SU: Fe k,km+Ԕ Vo_5%{q\cҾSuP4Zb$3.>[
+`
+6-6ˀ)
+T{ `xWu=@x67sAt Lf%qP{*Lc1d96\tНwB:TnK<0fxodH M#F+yɢ춫u}
+}t;K\^JnA.G͢q])T=zR>2le"_v3aĩ1*^`OPFl27'歀Ķ
+D`sw>~%Vdm}W[w\R@v&w0!|H\ń_Q3;Yp4{z}bC]VH%$4R첅͝i. E E6Riug >3T Y?fh)LA$s%H *&襞[3iE8{[^jw^o!y2/J
+)r#BԇGX`16xFkA pupo#ɫd9;#/DNP.ߗ _64_q1o9N]vڰk*Qi\W4pH}KSvvZIO AU"ݸ_{֭5AϺzD6o#W(+tnU}Ǵp4\F
+Hp{${9XGm犨L rEU%-DvnWP
+HrFWjXr
+endstream
+endobj
+11598 0 obj
+<< /Type /FontDescriptor /FontName /HUFBEO+LMRoman6-Regular /Flags 4 /FontBBox [ -515 -298 1647 1125 ] /Ascent 689 /CapHeight 689 /Descent -194 /ItalicAngle 0 /StemV 83 /XHeight 431 /CharSet( /eight /five /four /nine /one /seven /six /three /two /zero) /FontFile 11599 0 R >>
+endobj
+11601 0 obj
+<< /Length1 1791 /Length2 20995 /Length3 0 /Filter /FlateDecode /Length 22169 >>
+stream
+xڴeX\ͺ-{pݝ
+`aEHF3'@2Vth(9M]>@{ +{ G%ovFƿF0dMm]l
+ju>ˋ i+2tv[?z >B͝)
+dj/bK?/loa X Cgߣ I]\
+ptG? a0[}
+z$ocs-Z;-\[i}
+?HrJjөN=m_ן
+> *jkA81r?%o]
+1Q1T061E!hrRЌQ]j5劁`AxPjλNMTQFp @>4uѓSǪQ_Q|AE\1MWrWs/Rr {[=w 7k϶M6\֨_"㛖a0J*6dDein+jȏ `IH}.s?VOj]x٫QH؂Kj+ɡɝlKelYew i=^UX"'qc{<e4Ioa]X硬0&{},X<j) o=%<Nx[Ě+Ūf> ްQyK#HAXB$s%!DxoTϾKŝUh}l=mb)aYXkיa ZE0)<5MttI]\BryF«2Pw
+q9ڨ2ӞBzH\s(|*Ƽf`vƿ~OȰxnECvt,f7tx~8Q6epѣ)偩^{|)<s.g`_Lnd pBʜn9&ǒ̉R $,9P'sM(ci/!v`n1ވuYkO
+e)¯%\eQ_:4 Y-Mn#`j =Պ;6PY-]KJ0Y;jr3owJӲd sQ`#Mns=.%?[D6(Ꝍ3\ܷۢ5A`a[؟|A
+!"& 敃y%1گ^/[e%zDJ7M&?T ҇9̹4-70QU=>,ռ#.xG
+ۊΝ1 ˛%pcD+jF&4>FSTsXSH6n(U,Gt6BMӏ!4='uYrGzT@-4k'&r]xԣ" ܎ qEkӅGH;HHo^w<tp%N
+Ha >u 4)ǫ$%L%C9G^y+MJ%/r`OLLC+A`dM^\[<9BxvW;dwAov?aY!>ySeKvEg7 kq<Q[Y3lt'u*/KqhVj+FDF{ׯJIЈ׭ T:Cl={Ex}.7ޮZJ*Y96#}|xRsnh2 9WQ|#p{[sͼۨbl
+Ӎ&pFpHVf2kSX4h#=t4X :gg[s+٘ٯ$^֖
+Ͽ"@1DS~M/l2TX+|ܬ,>2G(А:2Mc{VlےEĨy
+ x /W?J.3YNpYl]{$A-ꁦ(Tq/zP[ :DznřE`,|YQŐW*b$bRQY)n 2%ku<#Cӂ\ng O[JWnE6,&ׄƙO42ߥ]QE3 3zhnp~a{螼hA&GxCڀq;02277"xiE!{mXOr`QM׸i xoSE ]>_$ƹf98AW7ӝ>,P=7^GsòD3[
+pm֜`6shqIaBRi4\z|BsSZ'b ]j`9"-rUcsሦ/<pr_ Ѥ<]4:tzܸ3^tP}9\ W 6wԠY\E^W'fr3\zx5PˋoJV
+ H"+ o=hkw| \n60]0|D2ii-Ҍ Y{r,&9c%Ƥ pO FOuCv Od1 #ѵ@mə$XyA n!gѪր!~i'Rd]JJ_i?]$^A^WH|ߏ% 2.Ed^`xFwTAeuUg+V$ydZajj_z\{A*ˤRcx C'ӘI'
+ӛ35L(o6k_U~f@|矂aUۂ9^ƙ(2UotUޡo֨UM`: LC]@ph[\sevjk`v'b9װF3$"?^R|4qc㹒!ŰV8azek^0v ci
+/gTVd*mD,{[
+*kGq[8zgV7<pP8 ˊf!y)ƈ&oIԅZޒls@ȁ-u>xcՃx9,GUIπߩϏ.2Z4H|e4σdZw]tş/=#}ru>SuC]2AdcYz 5'KXس-E$E3Shҙdv^.GZ4!oC&Bڏt}g!ld򴿊ڂǭan#55g% Fq~S mOP[ /!ήm-mWfgm[2z9Ѫp&{M?wk5*`5j\/JwѝFY?_CjTeSCBlI7~29FAÆ U
++b3h fdi,7Mn%
+mXs@Q!Nz\ѩ_?8OŚDM0 Hl|Jb1sWnWȴ*" :)[mxɎ:8dafWm+&rݣ C<Mz
+C&v " j|fҼyOm7Dlӭ~zRJe
+\-]l|G?|L%R{TZS"ukwUj!ù%i(bAAƲsLCUCCOA>r hCej>`{VT&(61Vͻ)Ty~=#rmʉPtYzgHvW<vľ4BrvV` Ky34hNB >ԯB#z:O$]韊~贵eX֌a^+Fwf[6Qxk*/TEtpe`SFzJ>Icwp2pf OB|TMKSw^wj/]̌5Yf>b􅺔
+GLtd<\F =A([}heit[ᤊ*'7) nI"4R31Uܚ y܈!4n {w_za#+XYxOf,gY!IWlo4Bg!vp._
+YԳ=#Y5u,63| 7cnhr6uXF^ocMAhjk@}=)^*?W_3|QsUng}gKS>tT}u~>mz&ҥri"\b,fhȕ2Tf[Ëwcf% EX^z.(h?B)[bp?"W[g`޳=ヶK !Dvb%&)4}qLyȜ/|َW Nxs$n}hWU|b tY}_bJ_;jv6+y}[jgo.FQE !n G#0'Ļ%Qx~^FB(M<ąA㉄
+b&}1OK+x;"]_uY[2ſ-I2}T(?7~VKe1*6[~뺺̙ͩmCvc4b9N~^{=f<qBޖ=\qqDEM= $x@brҐ"wR~Xzon[6$Jh*,UgEegg/2 8xtKY%Yq=Qoӂ  FN ,n TM䒞0SwJ[R=v2'0yŽ,XXU-_[)"ç1ܪ#/dް[(EaxK
+Utl-7%CQVFaM(~\S)`Rzj5+ǵ\"
+'&Gvi1A>[,+r!ۑU4ZؿȢ+mWTimZ+Y№-a_6Eu4 !(6<pgR&Ns#<ly,elzr;ܥ]g7I-3QgDp*
+4 7{I;*P',,b5[t[# nGƧeZ^ m~B[K;r.4p0U@'bW3NXYC̄,a*bzOrdCQhP-i)\jwYM4Qr[_(I6*--RAҋ^JُBv+F' &a]49ġhy nϦ
+w^d.vI 'ӄN,&!]ȗ֣uK q#5
+ۦo){NH?bpmi
+%HXdI:E#|*]ЩUGțAzǰUuVp,p#A݌h<ēL DA^2$Q1Z PZj ~7NŊ3ē`} $pd#^c 6x"UOm> |Qh
+刲&bAޒ3}_e@g`9ˇ!3_)Z; 4T\v잀#\x$4s/'eQ!v
+#9n_{;Q
+1hř|{?CsIRlWtn}q4\'zR
+|90>d;YD` I9 B:tVE չ7$˳-T\\DZ}-ɦ3I`0M^֑|Hw\{G.v?),vɽ35ɋJ~WW#G!E
+KǎD]Ne˺^_la49uzxeד1pjø, jbwʞb/$9T :/ P E}~RM'vH%t@ߏw )B}-Md@XڑDé;|vK+Cu~VËEum#:`XigǮJ-WD0c; Z:ȗ =TE'SEYv|tD~11}z)=DaC"=Bc ;~o4"-09m^ѻ;o@_@daߤy`4ax{zͭsq]B%_!1R=CO!]R0M|)X)^#m{[}Ñ")pvshƨ$
+I;FV2
+w6A9
+8x=Vݛ1@}DNcY#|\Xo}>@ ~t*ҩI~\ؾOYx^k͓(\5rpɗwy Hjl_5*%*H+
+DceAK3(9A[U#,ࣝ%㦶:LgTv
+TQ_
+: MsY왘,)ע#5e1$EǤ"huBdZWXsAYqy$yXI9h~S"c-e<+6!0J[|;
+Hk7*C"f]u3s~#Z
+rHl?LjdAp$5J)^g{Yj6GT7n!\-[ Vh'l`eRxIs&wU9
+Q !z:l0NX#ʨc%m:</ ZLTΊق0-IfM>PEL\#2$*sD^ti`jZF6:"ӭ&M%$[`FJ S+ݴf]@*fϴQpy'#w=L `Ҡ ,b鱶=b'*RB_Ӣ#+:!5bчՋ뢜()߰=lńW+0|wqEr%bq>6(@EeD>dَ [{N2ҳdigZ^͌%o 2&Y{Ws 2Fn_/ IV*RI;I9PA
+x6@V|T$<rEQ!kJDg (qd>Iu 뾝#̲EuLf/BG:k-ABQc>_?\'aI-G+ihSg`4&)l͗dqphY²B`.T>@6>0Q'SCm&Uݘb}bδhN޳!D`VOVzgG`6@tuQfI', A0*Z ڡi;J{q`2I&9b4IybfM ƈmHR  s/1W%ה
+\rȥPbIL&o,,D*%^eҕIմ5 ˽_gܱº-wnFE#0EtO8GXA2|N~'k,k8?v ]p]`YOit.Ge(;>`<9c<[%V0 Uð bB&U3
+>7g8ך53uǃQ\y u&U I H}0穩ruR ^4n?fA2Nr G ~kWT{]aR$ ػ/.!8zLEfΡODDjᵃ1!Mۧ1qu HoҀHwLzTRFr*::2U6[Qt %3rM5Ұi`Otr%@򻗗I2}(UKc}P3ޛ#Pk.@o)
+G2lXCoft*G:s/1a!a͉9t '3y\ C^eKFad<EIjMe>\Y64B }״eʟ$j0jq$p9;"a^kN(l6aBv0+1#X[%<~.WNB`J0?t
+_|Uk7\m;:d)P)`(V\OL%+lec8GpC+)u}ym~{("AMǿVtMdئɅ̚V@<34{ (.'2Чѡi[[CF"׼1wI'?)@Z&ߊ,ę- ^q,9= vs\߹˗8[=Rũ<\:8{
+uyu nU2=!"2FƊ#R:)6p݋-j
+:^:3 s/t-NeaScd(R)E#P(O ]BGp{gk<6|) }~0Gh^VlDx\TóDbgr҃7ZqPߐu}ќhT4b8zfhe!5H7I/"/ê HMf0uP_a F1r\ jn9-?jsBecrDJn3)hzͺEWw80h#3rX BH|xB.6~rrثwԪ^+仇TgFi +uw6"tAWd68r*(}] ا]Մ]a
+E]Yc"H%??fn TZc_w
+^T4{/9̚K Ddi/+hpfѥ-UmpZM)dr徰U)5h\UhX>HK@^Tԥ}+F݈Z!_`lW
+o&&Ј`d>i}'OA}Wt߳5 zLn( ! > 6dUAOOʦ-op# <Dal)oyN*|ԧWm±|uK Q\~sE,ks}CrB(ٗHxj9<s@DU0Etkc6Y/vCef"XۋɧT)nŒ7Q7T4=<~K,
+mvh|s?KͤÔuG$fij+({ 6N)C/*
+ICsL2,TᤘӤqwy];ls 痮|-&yYð݊QtƃӇMBt du{ .(UlޫBI(k3Ԫ2Hl[)k{
+Fv_*䆌Ї%+#1f;JK"6 VNw_Ȗbl{vJOtIl. ;7"7{ғ2oX,F3uCz%%&r=SmeN|+BE (F<m<F
+ٴ*yR*)! sl'YNTdny Rq35^o%k/|.4 722PA[]oP2 Һ-Q힬p.Z%y>-b(&WDtBr`{\;B)*tBK5ߥxk‰K^AmAmk25nȄq ՗䜷<Nul."[D{`
+}ΟWr3qYЎ˞"v=fbkV(vTeT Pf Lꚬ'AO&GJfiBS̆60y/!&#\8WՏYU
+Շʚuu(fр*ucY";Pd'z#9sWgEB0#-suQO%%r
+`b$(\{c$ZiɌӱn<+yG:aLSh $C~'&,J=ȃwPŮNߥGt?zhn]U@0c
+qkϾHs'aVE $Ѧ-6+5f=Dt!O5_B"vebyrW yKtR޳ ŌD6vA@WqO
+´O9Ō5^¨C}*i6C7zlI-kF+ǾnГȴR O)>4$’L!I8p$EEm{<燑
+$/&eG`\xbuDHE7jq:߾z#
+>]޿C6=~)ĖSx4Z縤FwHǵ *R
+QwMwxw"ç̻nP,6]BFun'烥SYkꋧDЬ9D^:rGd*_P4u1 ]X %>ǔa6q:=\J2ҏLgMn
+K~^glKCխ^^33mR"S+\U%Pcq[ܮEM*\"29-1zszxa$[yƣu<|ngSt>-&
+Ҏv*""uE&]m־^3ϽRuHl/F(lmSFߒ&x,Y*8: (6cKIwP6;&% GkQsb<p懝Z2[]Q(==2*gdR2
+yogxbƸa dK0߳X쒲zdˑ'q"-1HK\1uT>JKv(YfɟWZM+g.q}3_*Hӝ3烆pI7z` De
+VkI:j$/l֧GyǴ} ͇T?]IЧD7hSl䇱]gC<Rc 祖PW2wnX?i yXc\xfP7py=[œo9NkᏙ0HY Yvq jk5 _(CӽT%mK܄!{6X;AP"(g5^JnƠ5@Yj6yx"9*c[]vK q[)]VԻB?!fՓ&Saڻ8D%gR3TƏ8H[9w]уon1ŗd ozT! f}cL*5i&=9mS}+_ԔtَvU)~=/D(HHGfF0J\=oFu_Ճ~8%}2
+rph)e 3qy]ǦvoewN֌'݁ B0b0`Lfl A8Po$ݏUqVRxrm|F,PL*n^ HC2p=ѿ޼á!̒ ``c.8F,'>@.YȚv qTJ^mrj7Pst_bq\T";ljُ;<8D2cd
+< pHԘ'S^lo 1=W[i߀D)=96]-y/|yʫQMfƖm?Ĥ\P޻װη1ij"C j#< + b5/eqjĜ'N)}L[=W73=eqӴe-)8\zOG-*X>"kpė Av^FzY5ՇLITiyw g18`ۘ8 ]4ۚ8*Z"+h7]IN]x57ҵ|:V]s4^}H|͂Q$T"?Q,b#M4Ũ[ࢉ吃G plz A|>@;ַ8R_r,[SZ冼q["ZA_j@=}-.؋Xp7wB7U@͠PZjfL?VI4gI:Zijg/=+[(}DY(N Q B"8D}7^8u^MLnrȒR֣JW9~Ժ&⸖ ޿=%EmnLl@s1YLwLɒC7j(A\/XLE<nZMoP*TW(|0:
+O1PZӌ$| 5AOdK'g2~xAfm|WZӸK1W5Ш͞ ;e9$އ<ѸDg2'AyAi_`t49%B3Uexv̙#J3>G:yqqbEk#+tP&ql%wN:秤wpND-.H|%Ş }*fUUD+z<ʄ/]:_ޣϞu6*rI1#![[5<8l!9ɳ,rOB ț!:][wK
+S
+8yVyƳԥGwt0D
+pv-bDCÉ ,1e&VL~?Nu9B
+}\}=̲)Fz!8_&{#]a|4!eA-Ҵmӽqq[d4p,B}U[ 6 Oƣ<6 IU6‘ziz3Ch<=K} ˠIN["7>|e◰ۛ e3wH(=xpSɜԤoM@#}^Պ11;tk' Ҋ=.hwnkG=lܜŋ% /<hy~*kCHfx1j &Wmc%^#!.1/THBWGKt!
+jf,ڳ6dɏQv2"GHع,]D߲_oFi/1/z><n AT#-"lcppk`Rea3 U+#g{@?N-\U\ͣtOu6!c *>zG+ Rvw;yݜp*Xf76IlvyP1oL)8\fIUb"h"ՙ;0+jZI݋*b:CdD!+;/@"'OWڂ[#[d:"xf5-MUG"[ݸzK&I'cx88uQs@W:lD-8SL>~\)fv /,q@W vQ_Yq1ʕ깥?(!&x *c8vf\C 3UE2٥*8XI̹+܈PW\FXb"̻<>7v%36uIDn~,ٌ ԨŋE +u+oSlUIMB2/\<T8bi)=t\mqUş$kaC`_م LV*K'@Vj½uuY|Dʡ3<ĆXˁ6G6&r#풚!\4d$^TGakis8&]BM7 lR-c-)
+R{
+3{h"#9:{iʈqOםurg7Ed۽߶.{ô)WLh`fW&XMW=mf~直|4;dW
+1 HΫ8yQ+z-V&9^<.vٛuaa]PX
+endstream
+endobj
+11600 0 obj
+<< /Type /FontDescriptor /FontName /SXHXQW+LMRoman7-Regular /Flags 4 /FontBBox [ -483 -292 1562 1124 ] /Ascent 689 /CapHeight 689 /Descent -194 /ItalicAngle 0 /StemV 79 /XHeight 431 /CharSet( /eight /five /four /nine /one /seven /six /three /two /zero) /FontFile 11601 0 R >>
+endobj
+11603 0 obj
+<< /Length1 2466 /Length2 29060 /Length3 0 /Filter /FlateDecode /Length 30483 >>
+stream
+xڴzeT˶-N44C$!;  A瞓Ͻ`4\:k֪4Z, K,.PV9[hm=,H44R@ =E 
++@jЃ\
+;I/󫔯Iv
+]_
+p
+2Lkf
+qYۻ8yxH쯃xik_`cu_S
+tM]uܯt<Aצ?Jrp,*$x_>Ƚvp&rSu`oܯ_f *7**jë׽4S/v9_[LjRx~'4<[$ǟuY88_=_\=`_O7
+aK8pܝ|0!/8 ,>K,3ΚE)¹~>1}E6$d3b!7DCdu&B &NjY |18Ee*BV{3>x
+7W֋jG?}
+]pOٱ-ݘn'>lqDGUI ~" Df+ %Y gCB&9.Hu<XԢ
+oo3 }EX$~B4OqRn!lć 76|CQ)8U t]9] TeO Q}kl`DZM\ L_Uo! fX䏩c6\c=Oq[`@pQhk[D-:6gUqhg
+k-2P=..B f]*t+M%ˎ/m !WT@[8RQRE \ͱ_gf"cwPK`=&R
+hAOD^7 СY.?]+ L} [ NV(kXcCBee35;BWacGeD+ 3"TUvɽdY,#,EIڰo<L=v۞ŋ&V6|-TM}YyTh];5I/T}LȍIS+I]27܃Y:i[l6ndL5I4&̱Ubz.B!:ojx5C5\)~<cf0V3zQNBʫ^CM7?*ѯfJJ0ƽƒ e9>N$ Xohj9:R4{ˊ
+CX7?{F-oevQ)Rr|< %LJ9r
+5)IJjaDKoOׂ ѷ`!4~I!ͪAAX ,w)ĶlE"o!ȼ깔|yrQ/NXfLkI6xDQ2%ÿ>׉F,Lz"2M_3+bCF
+='0/w%LmXe',̋2 yH!7Mh 0Z̃j틩?JqA.ԒvL\.O،fͤ[j H!!\P%\s(z,q1
+vYhǣV3b'sH[|Z^iڏV:fE$rC
+5<1a:ӎ8T(gp,>ًݰAW 8hp]Ud 
+Rv1FEVS{|"&pqs{w 6>6 4aӲ(n?M Dߤ
+Nqq_FOB(a䏳\al`~}?S د7}?~geOM1t`j`+r+x<뮌8dcAsDAvK*QoPxZ]6-7󧙢ZUD[iKHZ6VU/wS;z܋BrB*ߎ\N: &Kۓ [V> hx~Q -e ~Mx4tҶnτۇ-uȥvci):$0ԓc*8rw]n5$/lUn߰}LMmG E*5
+BՀ%wLI:s =ɭp Iv1MPR>o#6k_ݪ0oV/Z+ch5
+BHid e=?цڷ͌Ww
+C|'(5jE
+0ʾ\<."iꯖM VG{%%RE-zc ${D'o^^E
+ 8{7wB
+oJXL5hDa
+`E®B?b`jMi~Gͥ~
+uA:~6f;_q3MYO8zq <|Aⱋsʃsm5ohǷ
+O|_m? Z&礊WiauϱgLEd
+9< h< J(#-U~疩)=|93;܀A#ẽ<Ux>EUnz5EUt>[ (pkN9⺨px#Yg|vmϦ+\n\e)V^eάlFP,<V6 Baw!@~V1nhb/
+/!zZkf9ötOXLE_<ۥIze501mI
+E>q1PH)PJ8R >aǼZq'xZ/25"4QT'Tulr8,\Uw™S?j!]'%_Qjy}Tz Ffd'65'7D q_BUYOl
+xǏf= Hos1o䚏
+Vvbֆ?ڂǖJ-XmTӺ'p~(#<\PsJLDdɷ}F)@
+@!Y]E,{tL[3(ˎjʁa.@szn7?JſYA]/nxC֒jmj^%adۡ;=yL
+FjΡT(> `"Vj E(*(#8LhʊGx ?F+QI7=EƞG|fE<T:mKb?ũ3(xgp Oh)R&)ir O
+y++ *|H̍6' \AoVݼB鐒um(o _r6hߧҊH 5s{%/OM~!5D6S,(`;pe"Hť
+ KtPN<5<Dz.;[ |&820=^h 'xJ,CGJjjwʢvix]@^&ˆ*nvwﳎYh?rs+;o}ƍz5Mb`$?iW:$R䎫9JA5~>t1iJÅ&*$+U 2/-א=s kzTʢ=w]ec0eαI$7ZqR.,=sDWGa=]?5ڲlK1l97qfD/2ouœI32;K^PHP&(C5!7dt>^ǖv7@Ը zGSۊkȼG٬R=՚d#ݵV ]B\f"q%h;NwU^^;'f@=9[O}
+ɃMq
+v[禆U= kH hG.YtC.A#lM(dҘ1^5?5PxCB
+K$UQ"@7Xtv3i%'T.G7$R-(IioNW͎_h^NժAJ8Jq
+4[(fI;+^M#_u[<}ëuylkq%P3t]>p("]$~n2LT{
+T8-b
+p
+H@ :E%,kz 0wg^N{D-7IeP9m&BЅGhBm s6JW קnUZ ɋA)i]D9 ُU?R!A*O1{ %"Pwxvef;/9[<u N(: ,fnXH*;^*S Hn#N"|{OHgy-#q*?D6ĵl97NӾOz
+S;fH.垤]
+Jp{}fsX`=+
+pS|Ua
+"-/~c7Y͠AeoM$jxE?hZ=)qPIyܥz{Yg~_JOv\ަRflIb 1$~oOv˛I\M111cXPSУIݑ8zfaIsʢTO/'O^T Sr~t#@}
+ $Gơyv8uK@8/X
+,P5r䂸8\8ș[jl[*tLlwV7 sE F> lK,<ԣTe)<Za>
+G__I֟1d!hB^>w@a&Uz#`o2kO&wMb%p^"o&V&j )zN1b@T縟ze"^RA4Ho
+o6FF!2LӾyI3MdZ"ZTE']$#,!=kj:Ǎ-v{Ab9Ά{R-B˦A_&#r 39JURF*[|[wiDͪ"&?|-_ г(]7%7K݈0]zTq_ͻ\o<N
+' ki\%دr/{g"0W)%ިGOi3Y{9l-E)x݋PJ
+\[c֗xy> 9K.B5-J[<:CY ǕBiQ؍FIzeS Z/8";]ۧ?0|"ު|Z,sXm5M/;b.fuqdϨ2.j(<‰{e vv"Ϩ&nm;AƎ&$lAb .5H?Dܪ ڴIE
+)݇z A<_%K]?x*~KRlr DB4I{<(CI@O
+ZM,FvY[ bOIznn0/Q_jo[M[oTjZ Ū/ ڴKO,/w)z?8.5fkqGCpۊq;A^A\ ò3&10u*XݠY i:7N
+IQdCV)Npԯ5Fa]9>9([lIHs KLyqTLEq tII!ɭ2 G%&l4e:B‡Eؙ>{W8Sj~;bDj9|ϮZ>_ Cwˆ,_e'(9EH,\[&Se1UYíH{Yt1nPnzF(Ņsǎ\M;`.DE4
+rz d6FNtB]Mmkn뷜nT _`jpGP"8 BFDTө,-%HuA= ˘t?ۮ\}b0XCTC,0'KD״]/lXJ+zqmF$2#\zCƆ/ա.1\Avp@-%'>Qz"Y^ɠ/$ҝ!?z9[0O Smί-dYDy&*o\ jkaOP
+LI7z`&s'ǰ'<5j~~OqJ76' OW"(}8ut$Tggh/XZbڷD0,pen{oH4[+\-hP~5Iyvs*c:3T`.?ʮx} \Id%`hD<u᥼8j]NG@#xڼ,-75=p최8C 7f!I?/
+Ļ=6"|U딄^"7 +^הO:']x-aTY+I2jxJ wF,K@)b^Q r>'DoH$T!Ty _|ő RTt5zNDftH(l+6(luQ0Dcpyi/'e Ke}0,7ExKi7Jeg&7Sg;`q 
+RW^f|"W>$iZ3B(L"-#'nr"87p[s;Q?_1ХyG+,VCgnݢͨ6fS LΓ $7e,\&0Gk؏ 0t!Nl`^r`.ofqT̽JRR?bW5˖s} ͭJÌ#hGp9 CuŻ#D_mL𖚭Ut<AcglmtOI,b:T
+kŚ*Я\xs+/"6~z ]pV&A"S_eY8Kc@Fh"F %P)%OubRqQ˜ >юxᛤNX}g?!3Bo:I#8-a[@^FdzIXq\ eca5CSS`e%-]FRkQ^c59{I(OB`qKX's\V.<7#霏F]҂NwEf.>;5SR3|'BnoE5}33]/<>@LE{IR}5(zRγٝUKR(CuVfwv5h=BңJuCNE4<;I$Q(n!
+?ox:otu)|##G+fOv4u_LQ>
+Zg
+=ŕ}k"[دO\4&<ܽz
+٠e8yFn-LNٔlԍ%rG^XW(& OX!k :.%Šz? 袤ٖ7l9XE\HeNsvL"Z(8Ӛ(/OFVj)wtȊsӳج%$ؤz^ܬm8
+dPyMؽJMjY n1GkTٞP
+1\yzj .>8t^G܊
+ԭ(
+4
+@ VqlBnTL۳eWHҢCP5V_H6NNQ%V1*aSk8CbZhJHG& aR&h
+kih̪Sw̩?ޣ.NV}IDO$Å1# %~P"AɣP*ռZP5;*4)ոb}=Pal$PƠI Fy1Wn)8҃|'Q'umsВ#qe7L]ʔ(A#󜴐Y(5Xu3(75q|XLpHY5k
+4#Qxr}Q"S n}ױ>Vn1u'@E!rl2 11jCa qQ;t|]Yu`By nB2
+"p`HN؃
+H8h.%BWڇ^o8Vq<` qѷ/m`\Š:p "DJ<f\MшQ*TQ@"vf㐴892yӋ s zN.)_5xz
+˃$eTC;^_Mh߹)8{Ve+XsQ*;)GЄguA?߄yb K@ȩtw@sy8@V\6mQ!!9WwWRK"C&9ocy4̋ }$bM??M5'Ҩܘc"yy_ oZR! R}ʜ[#E[w9G-Q8~sZR eKŽ1*|{*p7U3i$
+KRm'a5Š91ZsދӔAcTPԙ,r7(gT<rwԁ p%)jcA0YaTmT Dދ _=r9rZ
+( k*
+xspF]4)c#|U,M<3^q)vX*\ЏhS4DQwFO=!
+D#~P[ߥB3!>()9:18'&"d«#Bѫw/(fC*&2eo$zadǰRC_ȇ%54D'SJ-+&հ"!9.ʐNeTTZ@Τӟh%gSxJ򴼂<z]64CT,,T$[Yk+cͯ܂]F6WHDO2 w?3%SQ>y30^B4"-Ğ]p<U[]^Vڭ
+kLJB Wǘ9'H ar0$7ȓi6?,ez#pD4g8^l]=lCL1[~\2~C,@eqtʮs8O[px <OZ [Lm
+wsו85Q\;yS;x&3+a^5hU[OuL+܊ue yY.:n 2c-n9 MSR's؇)w,ڵ_mzeW@W C2um [ҍ°NISFK;xn.42sEdc<>DDpe~Hl=8}cvkZ[!\wM#`yYB*1q\t,XgdgV "3ʤQOMRZ[ :h6V֙KZ$C0䷛G<-F!*"Ohb?+<.*Zώӟ6y;blM2ݰt=B>h`Pz_4Jڰ8MH~Cif:s0,%tq)E-P|RGOL֡rxN m,'eo`P6]=p,R =C =
+Cr I̋olVT!' @Io
+I"(wi:Q..+y7uzg] n25ptj'(=pNDS3qh
+aAp{@dy7d
+BXK[6R6}UzLH˿ kN=%UDpYIqDjN!eFIwxr2`[84n2'#.~}.]=2Ch99X]@+^wjAM
+&ŭ]
+ ʓp66;3",C9<El`)3{p P_@c%\S;|!蟖}\jטW[ *ݕJAvF:YX7kyO C 3,5>Sa4yV:Pa趕:z+[F],KfS`&=ĨT/qʆj_Q(g!_OQ<÷tiHR^ f]$ı:I1ceMG$;;kr?t.1mّ~Oagxx
+44hHak"^۰M2/Q3fC[ L{LdC^
+Lpy(Y*?EEFL>e:.r3gLDVЙ h eSK^V b^\o1SG| 1R vO.k)fw IW15U=?
+EyEJS밊ȷAQ[2dc>RDu!lm󞂦aeT)l޿گ;[sǽKS9HlT}o&hGd ^&F3P5O\QE"oOf.]W!r\nÉnTi\oߵ #2U{}dyma K=&lޣ6Yr?tN<ByK=v#f$[eI_U|&3,̴~fV% ϥ!v"%ܔ"$B^/[ΔޗԘӤ- y#tbci42{6n\
+tJ ;;%B
+e /aI bF^(`>yZXWxA*cVZ*ol]Xi
+џ88W1**H0(AX@&8ܑ!1}f%xhk6WdsO?;Y-&R o82ߝW
+\ix%;(@c<JЪO\[ƫjގ-hޕ(,v<aNRF#`fIiy'b7 (P&pd2e+,Y"c'-D^s"`,x;$Al3&2&l1}#.XV@Ɛ,݅QnoVdjGȫ4+i9%L(2.^c7qf@ޯK YYĎ l
+Y lZm!tPl~Vz5ߞFl*NFW^3OL{fSe55ǏF}{9Vi% ˍwgijqnDR"4a*1 r+Hd SDGWDM'@,ˇӕ[Ck?,
+H_$
+7|*Wl%'pXKoNܜYmhr{շz(B]KpP_6q *egէ4mrfh;}< X_CHbJ?C|DTJ!x":e#R Ro O]+=QEۃ{]~X bxyTk47`'l 0W%(sEH_ΕFָL%ؿJ/Y$폥 eʫ7mBf-1ĺ_BK:Ո
+  h3) \)?Y,seö UX#$ϱ
+o\tgY
+mg*VB9;۞ؑ=ޟ;$R%O Xy,87.%xנPg /z HG| 7
+ǠӳeffvHn W"3kS:vmXZ2oCoxn$_F(w˼?G~h9m6h&)-ױ#lK#o!$m_kt5Re̶ g!|Xo-F
+Zn
+ }yR& WBi/>TT,TrrkӝWwVAO]yrK#<&>*2~Sp>gIZyQ|%/PYf^\g
+Bjه|%rYԌs RbR1~;yʂKz) :|eAe\ƭ
+]hCN煔MGY^V3 |H֙a]2q2嶖ćVas |H<}$kƺ>Cc
+nz`#"@,%|
+\P.D?
+DqoJXr7
+ViHBA̱:7EKߒ;?|x5#(`1꼼R-(Ω3ܛݔ<͉'-9ѽI.7l<g;Zx
+{z⇓DJH_ȗQ9IĆzόezl\{{-: Ufާ^Na%XIͳ)l7&ƹ>&ʴhN2oخ%/0
+@juzsN ό\ޞ#x9j>!NGEZAh-cmD9?rocݴ졝kj΋}oϓ[. /WPIMX*v&NĄ7cx=d01wGθ5d~YCN:XG++Aw6yumبku`r}u
+zYY>A ;#\lzY?pLVQS'E u[imBh2eCFa#9c0%܉QלH
+c
+F [ 26ъf<4s7K-/5tRrhQoqcGw~#d/wY,|q≱rWd˳LR5VqPې^J5% 5KB>g\\(ۙ$*0ݮӈz C,--E˞׵+ g K ?yK$\yɽਘ ^F8?5>@ \wJcZt&c+GVCJaPe Bfel'ĆO"?ؠFl &@Ux\~^b
+͓|7[Ҧe"3m_<T,^4[#$n
+<R)'49l"
+A5W%O~roZޭ<^>I*7 c8۶ܯB#/@b#c65CML1> 5)R^ Po
+A:߆07PjsvDe&v/?˫+&9!}2Y?"Els Eq$",ʙŭIh.1cRX:LW
+5VQfp/+@`K NR~{#[+B\\nleG)HA?2N&ܩ-j| e<ͨנm 2'$AG: 1<GFJ7x
+<2駒|NMhB":Vpb%(# kX8Rp9tf@C Pv\z1x7 EnkhK0!eu EӶX<5A-!$JsgWc!{sSVRlD#2ʻ}jb':HN)>,s{O&:)
+ऀz dDkB2{Zs?$pg
+ @EL 7͓8)ntĪ`՘u8 ̹lbԔ*gۅ왅da&sȓ!~!;t}LE 0*Ok -ON9@,UǕQz4W%BKb`Oĉ2s! X|/%ZeGߟG(EEy?@眶ciZc.`
++\Sd,mnla^G8=e:*GMLBm>Rn95i7u @ݯ)Ӄ/ nBuu}BAWW)AA}x' <St
+
+8öŠsd (4yn:"=\$m@ZxvG?bT Z {j֤񄗯z@}L }h\)׫nT" S;T@s r/UnHM#珍u8 LeHfk\\Ų^Ǿ˛+]D@b=gSPgdx~'XjR =,GWEBig 6!qyjA7AU4P(!q?i9OF{i 鼶<my
+ XG˽/w޸$f7]HcX$lw~2={.$K<\)ުѝFbr d{A ps05k6
+Lz_<:wa
+X$3|;L-n!ZN/,`4ۙ_
+endstream
+endobj
+11602 0 obj
+<< /Type /FontDescriptor /FontName /CIHHET+LMRoman8-Regular /Flags 4 /FontBBox [ -456 -292 1497 1125 ] /Ascent 689 /CapHeight 689 /Descent -194 /ItalicAngle 0 /StemV 76 /XHeight 431 /CharSet( /A /E /I /L /M /S /T /W /X /a /b /c /comma /d /e /eight /emdash /f /fi /five /four /g /h /i /k /l /m /n /nine /o /one /p /parenleft /parenright /period /q /quotedblleft /quotedblright /quoteright /r /s /six /slash /t /two /u /v /w /x /y /z /zero) /FontFile 11603 0 R >>
+endobj
+11605 0 obj
+<< /Length1 2080 /Length2 24299 /Length3 0 /Filter /FlateDecode /Length 25582 >>
+stream
+xڴcx]>QcOlmۚض4Xݤqcvcu=L΅νo> 2P֙ #dgchI4s6t032‘ ; -lE \
+P, WWUPXX\UTi"r*
+-@NGtYQAMQ&?{
+
+2
+8;
+5350a::z1~ӇM)@okwq99MvF
+`P
+F_S?Z3/hgT0x-D]J3}?^O
+g-[H݋@/_
+h$/M- F~[oM1Q1EUW ̔]/":-:ٖF
+G7.ht1Kn&(vS'<)^8"Q-O3<|4ȩ%@rR"'ej[S@e%0Ut0Պ+FS)3Ԭٝލ;Z"U$1I{Ze9
+ иd
+#JTf1Ē/-cxA1nCJ'*0U6]WCCPh?UPļ'kG_}QvL\dfV'v]F۰e&<UJchWnԘ}C@Ӳu@>
+DFw<b0(w(у!Bez:Xw]icѻp(Z ?9`4Tv1
+/!y}o%;jN)4ʽ|G/kKzuaV2^ \IJ7 '7蝢?C:&
+R?2)S-lYDqBy9vw@6umBW;U0̴e"[ N>NTLh8+,ЪTJyZDsbNC"SebfwP)KO Zpb؋uɠΤ򟍝2y$#̼޸dCHK<pDn*ZY`<G<s˼/trszK֪b-?S}Ha`!S[- F\bԽUy@FFjEYac>_}J$"V vz-ԃbe<;]ZP\3Pt"mh*(Pf+dyV} 7`ۗ@q&:}9PappŽ 0K$|cTL%UD(&.P7
+X;S#[V>  8'9Ӫ!+t'~luQ^~mΌ2>~)mA ibHR(U>#xt[%|-jAXЎmG ˕;bRgTXң#lvxlNJv613:֑4ν~g*-a9-z)L evg~Xu xH9E1XF㸁sm{|<r(эவSWvBBjQvKzɑͫ^DBfj=ܗa8>K4(ĵ-owʄ^*m"j&v@;Ո0O
+զ\߄>3vpBOPPFi5{H[/iFydi=)@믦#Z5 _f =<Ž>rw$\MH":0VOa0}",9C1ka8пf=] u`hm H8,v`8S-f\6ryI&]2بw$klXc,+kJja軇ĚD1^1mT9o+ZuQ$"@]>fE@dbV~(kw0tG\
+8ped/ޟswQv=I^A]ә|Bfn Y{;e/` k/~6VR=8# ?:90I<r_LeI9^ϸp+V5I$Ey4vC,j/*s퍁Xе.+EMKPAN9?ղ]\)&UQO+kz׻=XrLc)|@'~* DY0LQހu{ S!&mYI $8wm%lJ,䉁$-35 _\Z`ǘo }|6x/Ձ›K&* H/ƭN2Zfsk鯚i*M_s#MU]Z@QXϯYQw6
+&5TVX7#h1LCId"mAǾOtug& o6̅g2W>;5ނKSK_rE3
+)bb 
+hJ0q~t/mꞡBY|@kuPUרب r41np\EAX-b[Tn(~hP;U[,0[nD <Ɲ51LciJAgc=?T ERE󭧐dp ==ysyru\9­蓶3'Po]]h_.(ԫr঑ʁ쨉Z!'5+7陆'SZl1m  [zyR(s]Q.>n %L _BôFTfY)YsS⃡AdAe{^O ]ˉG^7!|fNe1<\{T-e˺J =]Jjq0Hs?3zDILf|X?ڸ9Ʈ*|fS|\}fAB<fC&K Q]囡;v e`r s0[u$x $Wt"k˕иmA sᷫ DCdV1.ȉJ]G?K~o.Wo7N5
+P`P
+֕2mř'51ˢOpG_PFQxul 0
+#^A髊v v^rɂZCT:\}fu\X1jr LWpd-oϐ7]E(4c1X/aVT:[|Yv}LC;IN>LUU-R^Z,|GE2(~hPHf6,g2A hnG[&"~\)EzAW[h@_^$Bљ:~J:$vmgvtտ Պ.y]xIˠvy)Sozlse>_c`
+wa\vusl2Yh .{iY'E;} i{]b{e4̓
+Lm3ZW!4-gg띓0>,ͬD۩r9ad` dx'&#V߉_(. 1P۰iVB2jW*^y{H K᜕o7R\i{:YŅcފĐ5Ѧ](Dѯ-D8X&/ ޝ&JlЈ7E4-=^;5[iu%_/ġIxS+''.w^DCs?|WbX,2 K%sdly4n3m0y
+rC@ŏQFrtN(@JX Uim(Xj?g`ZgYh$`Wju*k6/6,'OGD:9pDjzlؾv2ZLDz!m9tFh5bۂqjyx<XΨZ#"gSo`^ ͧ^զ"Ͼз,qkb6xZDseXZB}\lb3Z([MJPIf.X}
+ڰ2!"UGlagpMȯ[5ܾ9'I(wuXP"t)}E j#^ρ.]D՞>.gL$V9 fos\RqK3{7qD3([l_=-*7h`;9lJhȾi{4&b)d;Gw(wlؑGpTğ?|)PA[<PQؼ$UԺ1QsopRNaO%5Ⱦp©+3*Q]S0_xCpS[[ޛsw5NVʈ!q2s؂JJ
+Z vJc.7Z*گ5sNn)~~Z)j"=1 <@?Kd)?={׸Q2AotT
+7imƼi^Y<'w 1noX_1JQ5-UFM"eL`~k
+n/{t2bN%mjs%;6ΪB1b؂ك`EBd 7QX6@L*ا*
+jV6S~]̴9Fc<U1
+r!|3jU{_Hb<MʷJnYfS.bGL,y{ @)I?Ihgx1Ax=d4h)6LpqX. ]7EnDPcӕ;"W)a7-ה`Rs#a"|M~L
+S[KL=c8*W+[fr'Bw
+lגX|umen]ַ]#1埽0?0/GJ5 QU D*hp9 >@kKoHBWJ7%B{oTeUjM8nE`zEE5 7hD&ǘEe8@G5R-t:*PlKbPH<In+0MZ0}xtϧ@(qH,\+m3<l$nKMn4˾~%P]G /s(V{b#|O2Sļm/S?da|7N[%f;.2=ݙ%E3J#蹵%%km6^;2Q詝8 ިS)nଆDd\u"ǩ
+p?߶'ۯ,TE[#~|V;L-Fi3[KQ{JFmtx<ghiGk=}d2*vLu]0m1馬W߇#Hz`v?TIjWQngHbN#cp`
+Ń#!p2:, Q3t78k3:JYgCmY>uzTp%)􂺧xHҠgTBa|2FNS_eA=1J2Yx(/T_jsR践+]yv.i?A]eѶgWi]cB[pc28lj(>&13k4S>y@x`ˤɥRhpԼLF#]qAkɲI|n"7XD|TV9[ }ńjظW/hJ
+-ꢘ, X]It!
+v4K<c"ٙs0֫M:\0QKNZ}!Uшt,Q1ґV.[ihd\;%1j{5=2Qx
+ﵪ:y"ȶPqߣAIHhJ+geN=]qMةs5*yH/촔OuTKG^N8X2Vz;3^YKKv
+t_5CfkHա/Yʣ:P| {Ǽ QhWdFY4̃6s6}o = /&[Uj)o(-!.xmEZll&md_gIr~^v*.<dqg'yUu#3zɆH|<+< $̵+gGT
+rP[m8x< An%4OS_Owv䢾3I̤RS6Ǫ˨&*@'`lNιoq`) l2G_P9%nMѴ .O=U1oRA7(>1\dG|q" 14ǝX'kV'x\U fRd(|/vT\-/(hf>_,n xQZ09dPx
+^K{PK aXɴ
+r"'t.i72Kjh'Q5Ba`z{٤ ee+ ga^ %ێbF-U_}|9R \YXH[1w0tL:^?o'A軻4&6J?AA7/!3G[< r\Ux 3oֆ5H%-rd1`1hP!'?I
+aLJ? r`}$oņʝtifBJ?~{ \wHOec=n jWdA><,n>}u*;oԵB=*EhLɴ}0FsK<;g"
+_׻ lm|ap Mi]YJH^cjY;thUm>Cpc<NL o#$ˈ%ηӺ"gOXKX9Sb,rB_D'j޷5zl!.%7@>1~-$i$\W '-l*wY3 RU-xBEa
+_S 0FϦEuА+i.2"Oy:27.%MUv^_
+7Zxn,R~1<}Ihd1Υ}W xH.v`]f歀+è/y85'.&WY|'Aiy
+j!ꊚUC~x~ǎ `GkII\~$6PxS]1t_ߺZfАmcZy-vU0Y.FɘAWƟ
+=GU3o!o,oUL_Ԍ4yv~mRpB&C_0l`"Y9C
+?wʹWFYtHQJނ> Mnݵ!vGX[U%Ў.tL[P|
+J ~
+dUY6}4sj6BW!^0ZR$K2sDPCkъ\~$3^
+!H6ߥ
+֊ԶZT4F/׾/HOO%BXHNGj㦃"$Gô. R㊨oni$_ތš^W,ГMn
+L"$py'2kdU* U <yQ&N03&QC<1@ݬIo|zk,Z!-igy3u|.I9fIQd 0ڼFvXj[NNr2#`bM
+q3,&UujUN(NKfCd1Obd؎X~l-@bG܉#cȁ;V%Q3$`i*21uߛJ=
+~]y]xnwrե[(]>jBx׎V]b<CGůוjxwZjjJ%fz@٘kd}xTolKpմ
+=C:yvw[ֈxk~k1*0o}-uC\4 Z' )Kd>
+bkü;L}W+]t7 OLhrg#%{^\,>ӻf[?V,̽asF0QC >ncw;Hk 9;Iz~gO2Q6^D;P7dWArb U'\
+<S !8td_|Pevt\ țzOœ:5v!NxS~`V>]%@y>jYH96Co'U!|m<H
+تr2OUr@D?K[F*z/zyugdEV/:{qY^n@PDrVa6ۡvOT_<8TdIW@5<_ZaUnBN1hGA
+/Pz7bc`cH3)OIV^bj "mv;Av3@NF8FX4Ɋޕ\AP'Nd TS~=`劦w_;wk
+=wK?:<by
+ Vh;c7z3T{,&XJLu_>?}z<H1?{4(gr)q$RE&IyM6L?VgHI(*?.f:VYX2/d; 2޽~[ѝs)э'8DSC%v6UML'hp-ɾAҲ>l/^N첑dYU#:tFϻ28:5ayuzG{hڠ+3T >prqQ7;֔1,y;l!5FkȒĹztV<
+֒~vZ th{7ɫ]2ukE@ӈ#Uͫ<pW@5>~ΠЕH8$Xx* kpI4}4)BJ
+jn@T)}ݤ
+&J`u
+b5ydBD7oQ3>4)ksb6p$ƙJd@=:,p5%?5WWز+C|xO@|8k͢=/ID_)NAK'XB_ν\lpZҨ=UzvmרμS35\%*zJAc8_ݍ9eԉn"%Rgk-UFдOW+UQ34]A[  BT}*A<cA8HHA>׭n(I/qs\c;^
+!<oK?wE(#d'MB| чҗ>1~S8/B^E7=0ַ<[# LɅ8Bdb X2ʴ˝'4LE {xo<qJ/)KvW) MNfh>Ik3VM݆Hb ΧQGw1% =#)T*B tkWL=e["Eɳ9VlٸtG93:asK>1C0K3 J@ꎪcdodjp@l(ApIl/H.o*(}W_'@3g8p]$Zy(cTѫNԘMl,Ʒl`5[iZ2}\/'c5ՃnԾ
+!v.6hHk,%54$"d&>7Mdu{Q$D;rciiurr~^rϻobe s[|"o)jg1鯻DHLV|BBWϞ1$wvZիƞ/}"…RVaWqcyWWN0cыFCcp"Ш&5Nplpy$0>Xl9
+k H-ʚs`:Pt_$iq  NE6I3%9E߷hT_CfEacekf`=q0~nP죳@Q-3ͧf=Z3v
+T+
+{kq?
+֨,; ?Cj'qȓo 556#=8OQFT_?dOih+OkQ;7H$: uaa=^ @ej
+@Kq a|AYE:K bAѴKEPxL08u }: G&7V LEbZKѯ[xYhg~ |9=˭:O0?$Pfق *J}Ɨp@Vm.~q?  :c$:"][/0mr 9?& ">v wRWTc;
+千\?N{{.(,3 Ou Z|6Nk?NТq8 m͓/ u)["gGY4_&@LL#ṘSSZ~\oA}sl%i!'zRȔv,3vxɰ#d%*g%;& nΈYgv WjGE~ M
+1<({bzgOTi "\'|]'Tﱄe6DNW"Oc5z/&
+
+=#DDtɴL֖ӗ# ΟYs&84S֑犤ht&FJ{d>GUD~)\ii5]}JzV-[W-Bo{J[ D&C$=Qy+
+B3*Jᙧg4ćTz
+ӆdVW<}۠ɡ9g;NЊ=Fcy2:q
+R OEW..z1;a8xsx1v:c6^ F{ -hpe&Tp:%o,N/ D&1  `4P!7oς <-IV3/|ܣ00񇏳9f.AX&WpDDJKɁ=]"
+O;AC k?o'~J]&5nf 7O *.H&"w2Μ}"eB&KO
+9'{{B9wЬ *8N;@_u'!b HwdK~' 9Èo6Z0xnY>,.d~1bfɷ2Wuo?BŚ*l
+iQ %_( D5L
+#`W"'5
+<P|tʙ׉h'np"Qǭkaw6Zzw/nt ᩎȱP0R]~Ԭ.̹ Q B"C= XMgY8+%ɨ5d-x^7ĉ}QV&pc5&O/ƾh3W諍O f?:5"$00q}{dZ}/ӂy]d\<o7h { 0mD l
+JP:Y6׻Mr~5  |@fq;
+3enBhiWB$J"к~u*GA6dWŴߌT3#5G_IX+3@Xˊl`Hƫi1C]ѠԜwśgvj>)m *Ղ,Dk렧YK>3%X褄ֈh>ҸxPJD[>6JK*SV8&PBhޗ#~c<(Bzw9Ӽ[#E8L H^V/݀UQ $dm-O45S +
+As;7`0Mk/m@@8˫MJEmo3_ B([L1%7?9%bR\AY9.*"8V% mC>Lh\ЧcR4-iċP`)}9+p`PusQeP{EI,3AEsЎ zijy_A-T4=/&m/ξ@Vkh[CYҒ+xލﻖFV
+>C_FZ *(:"jQO|~S7:IWӊOS<
+CcqPO~!Wrrykr
+6vQ1L,Sq?8`[% S*#X* OT&T$ i%mOb
+|mQߊnh?IHl
+V|+# GqmHf}LCB/ێZF$AIu`uu꽶S[` ZlH 05+Fm {O,@=#W(VC&"ya1/Pq|*, ;tr}hPyy6oO I ZPd>gj\B--rq5vfv$1J1h8'<5Iԯ ש+'|cx'/NO6M uFL: *}[rtS3PAn|xCR#Йoc!HL@"JQx'NX^~kŲx
+ʊ^,Աn; * "5Xë*IjM/ {]FSA8 B!/+r:Uthiz8zZVdN]@_1aʨ<9p΄k3M0#:7RZŏF![4&\PvBg8 TN+Us
+CS]>^@4vT$DFq9d 3 iB%߽hvOԄ- :R(l^g^Tmu1Bhܸ\f|g
+Z7&r`SWm/
++-&-oi* U -if@&J_pNL ;6_3[yCMqZ.aG<E)4ё.Wj܈Ip7">j44s`NeG Nh7
+31`l>2a+ß
+endstream
+endobj
+11604 0 obj
+<< /Type /FontDescriptor /FontName /BYGIQZ+LMRoman9-Regular /Flags 4 /FontBBox [ -443 -292 1454 1128 ] /Ascent 689 /CapHeight 689 /Descent -194 /ItalicAngle 0 /StemV 90 /XHeight 431 /CharSet( /F /I /L /T /X /a /c /colon /d /e /f /g /h /i /k /l /m /n /o /p /parenleft /parenright /period /quoteright /r /s /t /u /w) /FontFile 11605 0 R >>
+endobj
+11607 0 obj
+<< /Length1 2115 /Length2 16804 /Length3 0 /Filter /FlateDecode /Length 18109 >>
+stream
+xڴeP]۶5;!H` pww n݂gsWLZ6hcZUPNF
+l
+rlmm5@X@FI
+g/߇4 -
+PcI@tF𽄓Po%cG]?7hJ $ϓYW_@)e|t`VS3PpyM$t~e5,P5Vg'C9`1U='{=d{FZ>SUfKe~M
+s}#ֽ-Q{vhW
+@Ws%wk)1?Ų~uډiWxJ )La.1Q9\'zaA|@}A}:?PtĒ2>4z]?@(tg:ULTd.A$ıJXħGf3m&[w4rh?h?+xPfCdɌpĄ>;.\y$th~(ZNJ ?9^_`E0D/:^{owWft W/l2޶,D=\״mݠ0 Z r
+t".C4'4xL\4(D
+ŘHM1wh/bdQ˙dAH#5]sxBm5!/l[z(dd6]lfHW':^!`BvH ww fu鮶_Pk3vAui:gT#=3b'nƦlCOʥGz[: H̤i/ld$ w>1ԗϱway2I9NLODI;g9O亝,7ĝ+0F$/nߗ/Tk_`\PVɤ{32.rEAjwӣ͜>]$}Z'BA3^l тd9nKeƃV |0tI*y{W-
+_rUaF %1ɹЪzœ1ßp0%{"GP"xL6}$^ vV;<n2N̯.*RY$re,dzD`fxdKQ -Kfs9J^AI5?櫗54YGzCgUQ\/ez1#\u`Gc+PԊ}r쀾\Tl :Hۏ0Ah`݁khPFoɌz< 0RB'3iMe]E,Wo tfs_j&j ;,yJ2hQQmA]d6;;3 Kd/HތU(rZTx] oA^x^z[!빓Ug1@;Z\tg2fN>AۥpD65ɾ`b-b*>
+64o_Մp,hZz'( vh>.G;I I/sȥnq~8ad4Ea0-Cڭs"v0ڐ#Uc}7gQaN9mF+(jtiK_ZT;*;#'B绺J r2:RgX7 rfsTZ ҈̣ >Be9Y Kq2p(GM#|NWba"MÿGk0xv$
+Ɖw^!;!v YW>"S_:RvplaQ ")[!VJ$IɗNtP
+cի/^J1 8 PS}֑Xt"^A'
+s؝v_8U.qw N+fQ-6eKFV]VmX!dh.Ne2u)JEÄThFMK_xfTTW;ߕ.v :bY Jˊ{<#&SE_a~U6OzK
+Fp:l#^9V648\]/%>^hQ-5}S_꿅SO+Gxt2x?d{2_^#ޚ`L&`Dfa;3PnX̕ ʒ4d-6
+( ,˷|TV\~!N;+vu>D{x&.[pމ|OoY8܎Jr B e</zK?3 I}
+42:~7I m<B߀QZjd_}᩹;=pֳﱦ Um@T%bi,ua\/MAE}(`GHfقF1eƗẝWG~cq#ZUy
+xM"R
+ ,i M
+fpD) D`eYՔe&ܡA7YX @|7ov-řA 2<왋Gi|OV(0ցfp0(θDK:]QBvîe(JRv_"wqa~Di jۂ0T3ΖED_/"4>m\X |MO:rnŌ 4C}%ѩνMl}q IiAI9oj 
+W@}_jWM]DOb&C
+= >FYvY"ķ' qU ;QU)yqC6.'Y˫"%0CS~3Z\8S$fW_X^0k4 n塿 ϨR‹Z-(.ȄȫOa:7EX)&p&X{|wdf+lT~i};I"0`˛ 䕸<<>8?E7R__.
+̍_ Xls
+*תNsqjF ȸg3Nt+O,du-‚{1Y6xD~tdloM6ҋHIi]"`zobgub^ٵr|6Ǐw$ ˝3N3GlAIK>ŷ7wY 9_4侪'K[O[)$>} =prs: {~q1D[ p+czs3jb@}ASGql<Ub7 w܎T_ )
+C-)ǽ^@Xc~ڸ6QR>sl D`Įq=Z.nxtLOԜ 9LPz?@'6y8ңrQ97>#1Hb{P4T@oS:t
+,l7Tzsb('hTox$Aq= zF1qg|ycl.f1>=Os1tܠ_ Dp1 &<*JYxwIonxuQ7<s_atB2H)$I]"xu>jP-Yf*wZlS=z;,TpЄKIN^uԅ둇^K6'HzЖ[Dl"P4d<z;b PXШ)B[LDS']vQ{~7Gu|в΋V;1:S{fݜ_'xLϪ.rIaҝ=jn، Uxӂ\V}4a!hrU$g޸ T_g~Id6ETTMee~RJveDY=eczΟt V& [
+8f]p SIFC-R+Ж![>pJ imf Ajz3[PgÜ{B l8t9>xGO^ދa9-Sեj3
+bRJ̓{ʰxd;#q}C[wo't8T~@4`<=U %2W2Yb]):fHfWvW!p۹awR6Zus? 8wpP(G<2*Y7W26Jٰ;*VFjnv37E!#XH7_5՝`~sR|Gyf$iso·Uf-wXW|nNW -\
+/W-fETXh)|̍A[W \ȸ]]ތ2'Ec']J̒4
+c ovZڤ|߱osGk ڑ&5(2S;
+u9)Ƌ!.
+aqZZ;<?k3[Gd uW?Ԑ(7:n7KSghZv]$7K3kICw' ԙx#_CiXzM/fiHH,<i1 lsyZ[M;P_G{=žJ,=X޲?gALc* `=H^EAgwVIhKe)ǯug 3Ao;#!|#z`glE
+F05 1
+%;Pg PShwo: B LvjA*- KW%:ҨD_kú*7I_=͛5Tղ~`"g+ix3dE2ãd*C₡O0Rfҙ|쟠k0>ַd$BԸɮM:0:<RZTUOפSXcN&,#oz$5mv0Rb7˳ҋU,ip-8].գ6a+`Vq&p +9ɋ AW>Em5ϘTj qɍV(O"8:K@
+;He]e5}P }htzC0*\6;n.: ֦ku4q >W6 8F΁ˡAnHAZu;x8'LpDڛU5K5[$E gVfJL蠩a
+Jv. ƶ4~Yk:I>Z"Z =3uy>!yy*c>>t]m(;/[~%1X T} \Ku(9¾`ћ!o゚0J߭F e߸O(ŋ*_յshJ#M[֬~ ;IfVj ;cv*EISu7AO{Ps +o{(Dޢd Uen-}\Hܧqc6r.x{ muLGe&3s
+>Łc]*&jPwh>F x6o%NO5anXn'C3GoIKW[A{ٕ+
+*p2MOhv]a-Z$BE+9\(*{=2+4l )Nx5!A(+dƦT省OE݊@OI8JngSvɂ|㷆!VCk3&/mzt:a<,0
+MN0XrEbۧ,;mBK ;P6OZe[3;Fa]պtHY~\DX?nrb&qdq72A`OUGMx־!- @8\5]$tI:,>>Y-h
+m@?VW?y=K<s *4w|At# bꀧж -d ğ;9B S/sfO۲e2рVx3PTdl @G~T }fkmB#/CgĽXxzz"5yIvj[w^J(-G@3.ϲ>en514c'
+VCCgQ[} -Z@.4S`OƑ/+zmdֵ'$d "fj-kK.=ֻl^z~.r\&O[ZƷjK_E@m|i7U*Eg6еu/)U=?QgEٟو~\BG>AJ%*!sYwx8vmhFljyYYkJl$$=gi d3ַ1Jޏݔ?i!o+W#nEͫv\`Qg~Ͳަ@EXEb]l>ОlQ,?ѫcI,) =-m$/>-xA:Ct$8:"1Ј0jۨ`zH›jxF,t>F657d> /,wq-YoX7i+ݑS~MU0}.{n޹[IpO*L҇&n _!>5-~kK=0ųϕZSwtG奾
+|ǴQ{U¿I')ry!x@.# [)~%&ZUᵸ$A HF:0w+YsQJFSjjԻU]soT 1n]M&]3g5%_f>;#.T{ 3)vPN Qf%߳nFMcJ˴ˤ:MnR̥Fd׬x12m@?5\UہW.?uNq3YNPc3#3E-t떄A,wOVf$1ZII֏@S4f0}~\2JK䒎5ۘ1?]r;3
+nkmc*լ0S+b=7yb0 !c*9mN
+jRivVJJ
+V89B`+&Ͻ3hKμ)4
+u%Jݣ0?s&b1abhȱ(t7 TTnGh R !<G[Ն]Ӽ,<lSEG|o*yzPF3dFrzjD
+\ƛr5r\ K۷"Nk  OU^<'x660q!~B a нFhGH9 EJ=t=؋֌'3+g5}
+l0j_ fþWC-zU I%gs=sp̾w ͈)i@TDmDo5+
+-δv˾WCSn-`֟i{=%私3~7qo>x+v/v)Rb:ݲ^RQځoﰓO=l(ubL]I}ek.t$OV8" XBIA+&2/#y8" *7>ڝ#J`'.+SȜe':pUD *ղcFycg({Ӻ>q$e'5?]2HEfړ0Y~a*bEdr>B 5˲k}(<-
+hj#]E=EV5Ҿ: iTa/M1M(C5:U ,:5'#VD[,d] k v%1C!
+"e)*rSb"_s41/mB>Btt@Dps@ l"8"uN`ju^C>؁#`vз?MeUFgرg]Nmݚ
+Alg)vK{?-ky
+SN~Dtʐ8ƽZh5Rᕤ{Ph ̫kqދi'yGkd$\DFP֬ސQKi_}$؎Ʒ$ru Vr=.
+tiqN2~4ddSyaD=2,aW^v#>i_Kp-2I[}i,7$k;8pM-Ҭ!aSi(!/ZYM6 $aWn|Xү~v(BMJ˂vOI4C8Hd"| u,ڸ_!cJrT۴}_'FKC/xPRƛԓhR OBuR
+jT<ۻUCq;΄x>t@;AUKeFǎ?TY[h8;( ɰpwna1JV;pSDԵbI ruG; ³NEME VJJ&,3o;H|ym,}zы2?猔++LHܢ'Ĩnrkٵ`&ԝݮp33,DNՏK)$y\lN$ٗm(|r$t~ e(M֏d^iv渮.^un-Z~6,7"{ю2,=]sEg#4Z
+s66|%6"R(ne3WM_##.}2v@;0(R(O_Xz%<64,90]L*bP6; }\6Ddj9'l\-F tczCwk+QJ3;PwS&ht<ܻ>PmF,w*}yʪpe~eΤC|΢t"hO^ns@;ؠ=
+{3p/%׽' MFfPǩ;wTx0BL
+Cw`!CJnR` y3ayqsDx.>_ʥ2.hG#Yj'q۹я*P!:@Rv1$"z w7OAgK⠈?7uh""ŭ>ySV#xSi 6z@.Qˆu-gbuV Q./oM Uݚ~vu[ɩ!qM"L:x)8l}%iE-քJk۬uOw l`UB#E
+a̚;uPM`v{'k4x9*37ΨxVuV#^R
+endstream
+endobj
+11606 0 obj
+<< /Type /FontDescriptor /FontName /NRYMBG+LMRoman10-Italic /Flags 4 /FontBBox [ -458 -290 1386 1125 ] /Ascent 689 /CapHeight 689 /Descent -194 /ItalicAngle -14 /StemV 56 /XHeight 431 /CharSet( /B /C /E /a /b /c /colon /d /e /f /fi /g /h /hyphen /i /j /k /l /m /n /o /p /period /q /r /s /t /u /v /w /x /y) /FontFile 11607 0 R >>
+endobj
+11609 0 obj
+<< /Length1 1668 /Length2 6617 /Length3 0 /Filter /FlateDecode /Length 7718 >>
+stream
+xڵWuTKT>@:I`dIiDZD% N%%;9fM<]kؘ !H[ J:Hg0BO
+80J $((ICP6l
+{
+
+& ҉qipy&6@C/ԐX*EX?a\IP?8ѿkg0 ";l"qC6}7 PvC.g;1>nh柏mDah OG(`C/ѣ/ QPS50
+IJxb~g_STі$
+i.UǾ#VRBzI|BB
+F[YX,ebp͙>}L\t2r}gۋ8Cr_T4I/E6W;{12v߇e i
+e]:1ޒCx"X  9he r}A;g%P{ sboF%6jZ
+vė^}b^m004<mkerF~n"vfYJW@~1Ϳ)Ր67f$j1xĺS1sJ`@/$k*pHH^=V)Z e,L_)UePR踹0_rV/|oE>wFrgRO{.DF4guvLg%^ϑf
+e<.
+Pk|!3Hq'I~-Slp7wS0I45K? 9(sƧ>Db`]m'F/l_=tI-OLQ KL7idްrzFLjG>5@U*Wxҏ|B7m"'^1aUyHCxH 7w0^v9>­-`'0]z.vuWLN4Qu|5ٺSe</J&Za)CT݉VʼrtՏpeF8 CB@\C\l=(axF>wi!IDGl W6"dOJ`*sTI=4ö |,ީ/0q͎4ޱdJlG
+n9/R\ƚ7&гSƃ|{wZnFsp@(Fxb4-ɨ$Ɓ/!Mpc=TײzMC6Mb8,3#P',jt _GWzD:Q|TMp`Q?XLz|!%+wcX'NϚ(dۃI4FϩR6y}@c,z
+'Y|7=?QMG2KeQ>dW\^Rkq5~:]+UDq
+);Rth~ ɧq\ iUFy1IY:̷ze<dsxK"W{Q8Ϳy'ro6ͨESNXUs6n'to`.]rhgS c909":?
+(|*K[5 <9XW5[z)\tcf~VVJf9 Ggb69g-M_uP{Z;0YQ/&ge}!2\ѥnS{-*Y“N56n_D$[IZS(3G8h, DžnR)U$IGֱ@̑@_'nQ}w{u3,N…Fb@m{|4 kj{\ ܮQ +Vrel!\/(UyK$Z}iǯZgKdP꛲#o>;ڠ**N<8/o=.*]!Fɭ̳{K|#\O6d%)$FP{:5;傱7n n.{BCE : 85DFN0Ӎkϣ=8zh#*>R1\ll}WNOz ŶW\^cv~ͯr!`ܻZ7 mEG Yt U.͓ M;gCY Bգ*m*
+[),p']ްOa$|!q0܆
+ I;(y/jg} &÷Z$r'_ɉ;CI\8wDWnM\I%HAYMS
+DUwpPާnYMW5$gsYl+uf]-@d!-/ϏQUk#=\,SNQ4Ym~!yY\N6%h [ 3IO>-@vO
+xCsCt ~lgh^=N UUSxbCiVLuץ~p
+<C34 󻭚0|Ȟ@YSp/cA x7wHҾf_7x ȋX~f7? 4<5}ϜGCK2mg;ܥ~ճ:T=7;kR9m&:2?UWU)V!4Үjww у>#woVb.L}
+|6,`|ܥrMm1/͜_ދ :x[j։W2|Y~Zνv碍gWFq+~,9fT뽎S,oO<ڜtG?d( ͧzUNա_Nq-NM؋W.]`%3jE!?{8 ShwBOd\8ڦ\ݹ&EABէp"3>Dl[S~)8Lz#R$r V][ݥ離!r(gTz侭-cLxG5<qFOj^;zTʫWxײ&L J˝/WwpvnP1mg("tBr7 qkؔæGh*Fxl>$߶Y^Ĥ%0'Rޠrb3cX߈OiP-<Suc3Ai GIXR]> 6giī^y88WRy8T8XMX4E |ojNh]24ֽBR5M_?`[)~TGMpA0ւDJpn)䐸Eu!9 VIw_I%|Y'T+9d"MTjGLN,8˴BQ`H΅kYX3k[xj<_nlwɋO{ l' Gyx;Wg$)6'a=^:7YTQ&2#CKkGķT)^P<Th\IyAJ2nL._SCkh%2&Ne:P*F쾮8%qu8(ɥp=pX}~޸s.]`kjE ɘV ?gkg-U`s@Cr|inVV̫2ǣjݛn'=ݟp}S*kz+zo- k.u]7 .'e_A/5eJ)\ߐa*i%QZnAIH/>5/]$ʖ*D9kQ:"Ix{y!2$>l;Ne ' ߸ӭ<jgH"L@^2s2z9nĵwm2n6$[(JSV9nk
+BU`9Cۀ= 3Ek.j?}rےTBGS j7Sؓ[c'.⋇>[n4 g 5:螿aA[Y)tG"5 2Q'ΘuqN'}oe$6.=O翶o)}T9[\vmW;/y&Gs1!e=7Dc
+#6SïׂŹLw[J1[*tlhU)M!r7>yDErɫsv<wyL~F_ZK.Q>MA ``u]˞iZ鶳seE8n?PWf9}"Z ǧN
+hH.gNQ'Yn{,%_USW$!ƞw46=Y<^2I/c;c*VL##ɿ.F\Fl uQAgҙiU[(%oRyUr^Mt+M_X+/y儩YQꛎ%N`H|(AE¹e|LykE+咩X|iDd͢&Y3emtlY"׋ЃH;pG~ψ"o rXy,j<I
+&lj|p[T^zP'*/Ʃ7iqE#F.4Aq:S_~fW]\[~V i& MLtitu/ o)Ru|<eN|֓$dXA47A)H&|_`[a;GiVnT4N*76(xE;S5Ϭp"t,17㙿z/e<К٘BWڿP{r5x/3O:#iHOQ]ĮLڤun7XfI^#{v:mj r[
+w')7sLx=QҘM3] 3㪞"l]퐀бߍߍ]kyyw3c;v8LroqvLt,ܺ6ݦ9̊˄S!Ѯi2-~2XU4VxHaHcȬߗR(]9 }b;oxS7͢؊h4 Iy$SQ??|.{Ė<&( tOwxozdN4hչ{`S8#wr'Nrpja,{F+ͪ/5f_ U𤖾_98ڿ(/6)2sکbf[}2{}muaD4Ӗ1d
+WHt=Ho
+H"s}|pC
+endstream
+endobj
+11608 0 obj
+<< /Type /FontDescriptor /FontName /TXCPTT+LMRoman9-Italic /Flags 4 /FontBBox [ -469 -292 1419 1127 ] /Ascent 689 /CapHeight 689 /Descent -194 /ItalicAngle -14 /StemV 65 /XHeight 431 /CharSet( /n /o /t) /FontFile 11609 0 R >>
+endobj
+11611 0 obj
+<< /Length1 2013 /Length2 26872 /Length3 0 /Filter /FlateDecode /Length 28072 >>
+stream
+xڴeT\5@nAC4]Kg3 螥sSU-,
+EaS;cș +lgkR1903(]lFΖv Q#g /`݂ ߕ
+˫
+tt?Q3ڻ_
+2}/
+`2_`
+*Ύv@ K9;Z0O˻_O/xع{1spXyۂ+|MM{7 Y
+_xֶnR#`(Hioف>d' £)h2c-Csމ(AV,b(QV:+k
+a >%I%9;wZurw]4CXc#LZښr\Z"ۙsSi!p)YUR͖si8du}]2rh&%&W#jrM X,?&*^t/m/۞cD@{vG.NuPrvS]
+Hgk;5Mm%IT- VZpRuUZs,銓fn}P' a <؅  ?E)]8;NoLa2ތb-^$t[sHżTtK{Y#a!wH`sz( me;I$[A Y6Ĕϡa0?!>uutje_ eMK:ż-opoMc1"UbJ#jKN+YQA`K/uN)=־'ϳ"Vo3ƢNyh2f@ k˜IBC_x?[ J!Iƹ #%vۏWQ-Q}/:H`ה
+Mr`ϡcܞ nb,Qq]N 1Xύ]Hy=Y7v:05!6juJC9כxD`&?vtjC)J\gǒѼ|"ϢZBJ編B50u
+Uct9?HͲ˔n"hf?е pV3QxyQ8>L:SR觿l#Q&P^ej X_I"
+9hlMU_$0'SܫJj<'~uE ̂钄s~ђ70E֮Z_5RhևhQ"Im={'%D"q9qL]_*xDU W[MvQX~YJ/Be%3Wbe<79m:="WyO;rfHAM;{;mS|xϺ_Hܗv@+ 'TC?Q~E٠r,.C5:(MB% VfA3V9ޟ)'fkݐJ"qR,O҆/Q5ؼ1
+?nb$$aSх 29h;76<h컴qR u8a$В_0:]5kGs!CpŊA&)J.H]"C1ܳ@€Li#!]W0tV8:As< =*FZ &Le-Gé8+Iu'[mG5`u1X''߲ӄ@[3薿lge?@t(aT^}IEXφJQt/V2[]@ǒ7]5Wg-R<p|Bad,GsMC 
+8GIѭN Zqdr4GDxiٺUF?fftjӁ抱[sƲ,~
+t̳A1vjeʢ㲄 <2)ÓvPj]`BǠb\ /+א0ڨ`)+,aƏ U&"u0DnY*)[e#1 G
+k.Ȁ4on%{]?u1Jj&y,l@=`=Dgk4;)Tي#e!vp>$_|+QnDc6aX~Zʉ)$IOM<Kc&B*IYHb;hTCPCw%9UlC؄b"|pٍ/:Ju8,z>]$!xchP}!uźO=ש8ge ~|@]d8R>;57?7n2ӻd#[%ҳR'Cъ= 3ʓ$D=hQ9ouxh(ǷCSF*%v_m&]sRna{%GrW?o$>vU#tȅ$Fҕ!3uߋUhs.BW}2zޝUCˌ S<?l)t$?ṵgEMۻZ q(uw=>Wq$\K^$FB%t,zg#jV9[n
+^$y$J<7h@|:h+ ]
+GlǥS G)utbD
+HWzCCq &[ ++UظGcU7Ǝ>\XH˰MZ TbT+z9aQs?iÀ 0 '@޼7c.<]f% 05G XԡP_m"km^L"BXZ҇Ϸ~]~C# ;^rhAl
+"9#i$'5
+ˣ]!z
+BGl~(dxhlz*(j.
+/"ۻSXδ.VpVNP):ͮBs3S 9;&DIU<#h퉒ޡ(F.5+.W#) 6"]ت@)S+jY
+j{R5W).
++OR;W们Z*tjg>Kr/=?O<̭ۇ@U9e)f¦sVG-AL=˘ʔ==VI4*RsC2"a_k'^H-qv o<j'ToiS{Ѭp4ki?8
+'m1\҈gwJ' ~2<ɏlo z&k\#c72N0tJ:m< D[o?YM)&Wc:ALߦ2/hhlPQճ&yZ3ITSUc;]YTΒ;-W{cd/<" q<1|x{ cfJg0;,;cIlN$tR묕%8"$[o&lZ,B#%5'Qw$lvpS?4=>:|J5^j ^gk4 |{6υ6Pb=Z~x`\!<ekӄ5u&dQ9A565\0/N#ضI}-/8>a,
+cȼʃz<ad8l+{'9ugݣiˤoRFܦo-8Q}^^/
+r$2%/:˰1Y'i2O]Cxf76W%μ́J7U҉t*@ 4EKiWQ9]㮬΅""/~qݮgs45Ǿ}kQ%ް'(~']1?ołH1즗 5 <gY.m$2J
+n?^+?H~6k 촒[Îvr!&ӲP\Ԥv]T &w#Hڒ6ѫ%LP8N!ߑ5#=d+_o`Yõy䤶4 b1V^蓺okBvqGfn$
+Mv{L;º̖/?N`%9',aLr Nř"]B02өB
+eMX%&4 t Su)'4# ՕU; w#=U,셢ӊ"g DW1>6R_xrCSvW8Okl'ݬvU ~SBPM#@'BR`4'ҢbHI~lo`t'w`'FFHl ?T%0d!Wks׎P
+7^AH`L`JjUt,ɑfe|t,ur~qn=(-h]xJV6GWB|q;pƍM<}醆[YCկ~oO*KК4x3CglD\ vĬ
+Zww t_ݡPn=kXemtGڶl^`O(>}V?;q<)i E<}
+
+RB6ydOA Ю
+&"+pOE̞x;xL#8[t<*OR.Z.˚RunR0%Z_Ge۴2 0þ;3PE[ks y8IvhעJeֲb\[yA093tt\-SolF:{<jA
+ٯDw>@e Ak)ilZ+l"R5Lv3Ƭs>8\F{y_:#LH}bU p$fPg2ćL;
+HC'iVK|@
+8οB~ۣG=p9Kۂ*0mRM!.۟m!@f+/;"4GG8>3&g3~ȍq2LwH:V'E&|!Kt:3}JӤWU*ۈٲ"fEcWEd^pسm5g=M ڨ2*>PeGFJΑ ~ʣbcu`}Ct[Kp<,IA-\g=>^U4x]"(Rdx'+`+ 7d::,6?4Zċ
+=QoEX59J+*l*OE=WeG8\o5cƠ+A)9~/S~ VYٕ]=bàOmMn(<Letj@@L!}/Vc [jGg^YZf !ғwUuᱫyD;I:|V)(,05+ad%5xϷ{rկzu(uSeImi8%y $53|3!􅤐}X;3;t:xKW΄k>!^1=R2{/T8osa֟
+frJi@J# #rѩOMFxem+|*eף/F"iޒƭVFͥ2#}rFulEt)gE[׺6 {$b`Sƛ|M|ٓJ$8H$K.6N~-
+jo; '3[nӞF~I17:uWG^#5KCfo-Iq␨wFdE #-KsڄuscmiC3bE!4EuB`ei6s̓zE?c{jv)@
+.Le1/s U
+UbؒֈsMe&o2h%NEG_'|_F%
+x4{y.U4-76Nd\`N?d
+=d|?exz9#pYgڤ}#d&mÎ'!)uH>m P_4'V5R2*ë }\8Ic#cшBm|-3WįDȘVc4cYY/!ԐJQ
+[J-<Kuk[l!Su#Ya BV
+=(]hVFpcZ]Ғ6EƳ9v?[8vەr|kv囶WSuoV:0o
+ 8p^5hI$)o̗l5J6wgu0c!D9'!b?_R9fHY
+՟{ynUT=BNA^d8?bm5 at-
+.𗐾'P V-<T!zB:W_3JVE%mmEu<z!E60[y$0r46(qSh,l8QD)WW\/2ZZ<BJ&~[?gy)V:<IJ:KxރNt?(0nSf;Skv,d6,);(\>$5JDL<BB9_uDˬq< \}ם@J(;T75\6U5,i(mX/nfC-a Fw?o4IJIe\/ӠH/!V^(GJ J*:RS$d4͒yV!H-lY#јkek?auӚRiESGhbo|b *v`&m(3! h
+f<$@w! fc#nʕ+fpd4NKZɚ]ro_kWjÃץ}|@ۅf-yF]G{s.8Amн_`5A)vvhAM *uA
++1XDwDcֺceONʗU$)y0ζ 3\ܑD$49G6"tAoDkB6ק?=:qM<Cy'&fEuգ?Dˠ!i&UaU-3ϻuMC*fczɧ{$,mx(p=,_A@>U ݼ^AZ,j>ȃbV:\N=8(6OIY>p*քp{}0QP{O-nV;]n"˓ڀ y.n=}Y݋-G-T!?{ԍgjEjup̉+/%&,*3 Djfwy5ID~weMAvV?TW [4'|Hc 84RyNG ꎕH|is(ngo%6k+qcV&_}Ts[0 6)SJ5n[kb
+e3vP'9meϝ@pC,H7 2QjEYf241Hm*8w>juƗ)\9=3t!se&ilCfxf-N5ܾ\LT[_qBC7=*>󑃊N(HfL׿'Ux%<L}B$9%~i :h3}jK޺'0ͫFΐÛ|G=ݧkgлAh'.@uCp+J}@\,\ I*q/&%A0=T%dp$bJ( EXjk2 mGd'9%/"mF$"| @$Яm?wV
+}ɛ᜛ ֟SAW~Bݡ.a#oٰ?UF&}檩+*brQQMcP?22܇*&Jg_sgʆ^VB=.2dZa`<<Q%8\4x`Tn?t&0xOUtaL6tWA@(wp_G((#*jW>R^TzٸhǙ!KK$df_睤F{(4EoQ  l`TknpsYCXEu$lαY,&߰%Be4QiFmh9d. Iu^BQ +a8:.dG7PQMm8t{pq
+" .H['v`c6ƭӾ Dč&.IJG0pbK+]T+tۯ_] @Q4mb۶m۶m۶bvR1'=w e]&CWfk&uVx~3DX7T&p`\I{ʙC\x+L
+BT&ȝqҶ}]߭ɌCd4r<`ZipW/c$@i~ )m&Ou{
+;)Yu4MhTDa*;cV]`6dߝ ?A?VYZy?VoV<G~nP&rWg*Pxܟ"9nq!šg1TE8>u]$9$R h\1Ts7 W|pSۤ0 .-֢l*i (S5}{IJ}J֕WމzuN##pn^e(Sv̺al0n2|V腭3~X@^rK;Y3cphO+-[sWjʾIxl⭚}(CH=ܼJȷMgJs=)x h}?U~z4YUo湥aZB3kolƲaz1kۈrfȮ<5Fϸ
+P
+MPKDH3bթT;H LFW*y#8{ a,=bBX9JݑB3Au2O}&g8xtNdAT/]`Xǀg\ha oSWUbzRy-CƴM3ZC_߯5 ˠ3a 5sd5*CTN cX8Zd͋{}͙#G7ARo`eJ:s-" ֚*c@(Tєj) %XPvn]NIkOc Y VN -8}XW7:ֹ_Mf' /<6>
+1Rc2i9?eω4ݥ;L0~Y+'X=FmWQ@^l2k>A QXpFcDu~cFaV
+`E|H`5`bV߁صhS!;A`}="LhZ?saLPY,Xs|Z,}" FOުf%h<1 
+֛J+MʤOb \s*:!J/TvBZ̚Lߍ(̐9y\9YD3_[%Z'WFg#ʾBQ>
+taH-TPs
+6ً3Ru{؋`<G!MVIeAdG MHwY+f"$t uJROHڅ$(L^&*/y5,cܞ{b~76k}xGКmoug5
+jaw*<,PCyE[}G@fut{u_n:]L뤈-~݋4jbP&Gʖ9qA6!^! M캥M͞>`Eki΃(RDda8ow7JK~@
+CEZ[#ɳ nfQ5-
+/ :p}yŽ@H3 ~xUmQDɡ%#\MFgcMX3즥25tn_=AM1-
+nV9CVim{`q _n\`'l`H-s `XHC^g7F8|ݖ͌x ƾ_h%}ioӇ*)v6̾:v{1;4P(J@%x<!78b<5.><
+9P@O L 4 ;y ]vl|i=P$|soܨTռ]IWɹ` =-R) ,N@2~hRuP:\o;f2;YGQ. -[}α9VzΆL:Rb6&Md!U ꡲks]5h&r,{KvzC0ƎK!7Zk%@@ش ܁wMVa H]ryIR=, 6) wpXoKU ›??Q#OJ.=`<7CxF~Z#P8 <,=|JuܷWL~>TwUV|+GdbWTO\H%~^qG+}&~IK25?0' d s6!lu/ܪ4sSגʪlo5J[̫*UpP3(k"iuMg8‹P]MZ6 ߼M藨"e7&F?~b{hqZü1?C.N\{$',\ L}_pg3Yv1
+%tNX=hC,fv mzB9Xpj-}*
+ TWOk-A!]I֙
+nHBkΗU=I.I7ѷsl?xyU"ha17^aE=is68Ʒq r虏|ZNm1()+uF_²rG&4Xq@c=dulNⷺq}Q{NdN
+O9ޛe,#uvX3]v=Zv7R-+xv>D*M\6жX0@sBzGtO@2ϙ QRf[\#E˔35mpk*,^PG
+&mUS3[yvx*ٔ+/}0͂h%VYn.o~I
+2@PCm7A ꂽ7=XP'C1_A.Y9Il]<NE.ѓw ܁J;ًkyC2)rڮeX +3XL0+wG)m36q7M^tNmj1_6I$;RHCM;ԠgecKEMMV4J
+P
+iҶ gm,x} 0J
+AA-eQ%mcs/&xb䓿r`RG.'6Ej+ip.OK0!<'XrY1c] Mk^ܚۻ<a9B>HX6"}ҷ?IӡS癶JFqWې.:h֝!p9;d,RzFom RR%zfԷW
+XVJHc_Ta8<wizؑ%/U$cHtEDGWbI/{Rmٽ?r;Ԣ'Xv{ ^+B/BJ
+b<3qۏ7'X̤stf
+LO-]TS/+ rdxڄfÙ!hQ! 5&:Ib*/4*!(m˩OK,x'V,KF[V?UD) Grk@qf0eD\=uzIhY,"`;Yy>=Y};)UH7?w@3"8H(S9^ <TcG ÚZ_7,[ .+g$\)8TJ8Bp(Uj4
+ DmpI0yK%Z<]E42@E7>e6FTnhƂ{wx?]r6&U|[ {]MP*Qf`kU5vEV{2'c #
+*)Jiu7b_xN #yy_x[yߘRrULO'wQBC&մ$?2
+hV=:ޡ#| W/x͟ه4t`}E:GQѮFG %r[}L_ #K: ^ t~K $SNY)>~ukϢ|Q95%a˳/?>I솨>AU**,L(^tUm˛@Z5yPnn$7mz϶eB(˜o
+vkHEQ.ێ#N7
+Me2;rG5|%FLM/zB.>0
+ 5H,w~G)ڼ6L&s7o<07[!i̴1H`&{K)54t P&ѻߡh,h*іh+p3VhP6F
+C݄4G[m R
+60h墤`\->$K,ᐖ{i c쯑T1¬u`Shi [9 R!t0n#ȥa
+1cL oH[} Occ;oJk<MLH=qu\K3jvpAFުW噌"Ɨtp{5kv_tۘz2 Hb6F'$5q0㺲/0$+~Qʇj|fg˜FdՍ0HwSUX{"j(F}g 7m"\&f.) a;x,C#m=aHD۔oY"T>CBYda*JP߰yȋ5W?NgG]KrʮVa0i"G eޙ#9S(iHL۠2E/><ЧWtT5.0s2,>!ՍQG0B7Hp/Zo+r\n`{5&Ī}giW[C4<rVk[olwǹ78vvuӻwmטuy/➡m/K%b;{RF(>'4/(^v
+8-6 3Qi;hZpaH߄%>{}da!`XnI;4>~E%;L>-r 7g֒qbG3D$J0+-ԟ2v[oݗȓÙLg`@`r%4Z.Gx tӌڤ;b_,x"f)./6N@t{{ʎ0Ld3I"EdDI|H>ce\;OzcT
+ڻp}*}
+.m`FM=4 t0l4FF?KF0W.Ie5KjZ2Q)ǁ ohOg*5C'蠆T{LkeZ- y/ FAt`nQbE#&GNut(_ΗX(0$b%؁CJѽ"xkzA 3'/3'Eߏ_h(ӷU|hA'W"?J4,SK\f8ͬF$.v1Ӻ_ <Tc-HoO6;
+*D%&iLk((T%O<8:a˰J]ؓf4(_;-! vjʗ̀~!goM!"]܏ԫ6!P1 :Hb[l%,ŧ
+)d$K?szf%"\aByG8Pr<U1(t ZnD@=>%tjbi-}[vRXb|V8b';i!MFQM!@gD_A?PJ>_>k\x#ٗX3WXEDL+ixOs[龙#娞"$?|AbG.e
+4@J'e矰41ry[gzACycAFojF{w\+,&Fv$xTm Er]ԯ6.&{&;wiH
+ZȲǼ
+Q[~]x<1\e\^l?ըi?5|JX 4T}~0* _xnn SZѵ(`_
+endstream
+endobj
+11610 0 obj
+<< /Type /FontDescriptor /FontName /IATCRU+LMRomanSlant10-Regular /Flags 4 /FontBBox [ -457 -290 1446 1127 ] /Ascent 689 /CapHeight 689 /Descent -194 /ItalicAngle -9 /StemV 89 /XHeight 431 /CharSet( /a /c /e /equal /f /hyphen /i /j /k /l /m /n /o /p /parenleft /parenright /s /t /u /v /x /y) /FontFile 11611 0 R >>
+endobj
+11613 0 obj
+<< /Length1 2065 /Length2 17708 /Length3 0 /Filter /FlateDecode /Length 18980 >>
+stream
+xڴeTʶ5h !84];[>s tϥVͪ2!PƉ #l`H4u2p
++;:eU Z
+̇ldm?cCWzB2
+t0
+NFfolLIqc1CF6@GG
+<aAbEw~#I_r|\o xl9Õ4sW$Ivyt:\s`ꀚ h"^_~7go1` 'Gi۾E˴sJM2:H5O|BxGf[%}x-ۚ\t[=HKvDmڧgr+SwdkC߳ 0oj>z˦|cMKk\ /2j(::3" ӲNTz4) o5~DuàZ I-#ilBFU*C s %? yi l)y4^о$=>f^xtanv~ǠZ02Is_k=s/*yyϲw1[CE_ʒf-ouLڵu*Qp+r0(%[m`Tp뚮v0&yUaG&t؈ PD`>t9tq?MW\1s})L}`VUH%(SH֌)ZFsǕV=X5:Ŝ:Y*M.GcF. /do:K~dۀ2?jW=3ewhWUf(}
+̯ʾ%:ղ3vݻ
+˜f
+Bl0r z8~9\wP(i3tAcg)etOhcPvxNXKo+XaL<.SsQ͠FHAAs0Y;zFteH;5v*nY}q!ٹ\v-Wޛ$c)YZ* KY1BaR6 f
+H\Aƃl!Go~c03_:
+_y8Š= [to<9]Y s5C&UlYh簠+{>39nt2RڡmMD
+4u"aւbKs-MxTS?[{R܁YRBlJ qN ,C޸_2ʩw[=*/ (\M9L%L]&yHY a\xsZ]0.o@۸@= ½.\G#Y͎zj;p)od/HNyJpU!ZϦ2݄<'|YEs}fx]CRsdg]۬s Wr1}LK7(#6I1,q]Ġƶe`p+}`C.qw S
+ݼԗ;p"u;1׻ffC-j+ǹ)#BH>bՠð[gzzHʍC´q\QS0Jw/ujpOp0M=צ]@"o`.TvaFqGzq`gm5f/I>A`ٝJ\#O1hMK|BVscr  B] WDG&@e}9:CU}߅սO޵mhO,S#M b% ;}fy[ȕX5Z`Xw&|'"V́I\.g3_̬j6x p;ؾ P<Mݒ6ڕztrw8a_t; 1&3Aj
+(%ލ8uIe">S]G%MI,ʮ,[L<OO$ ؟I%V| n2Uq[t1
+ ؔ .ޕLb^9(ILQgTAN&5_b>mI%)Dkn"^Lwp:W\qb+"Bih0Qqg/IcqÂ߷kXڗrRTRw\hxg07g~c=`I2u<¯]3 \n
+T[~@WEk"(d?"Un,$ʯv#T᧳T>"$R\13~+ )c&R<OLyǑ5&}oe$I
+3$CMW3U!lk8{W0vbc.CM{2Sd]6 2/=\9{whl4M)1cZIb.QaaC&U;vi1ҕnk$x>0rx9!2K<`SI iOܢֲ-ބ8ӭARw{g C{`w{ٻ=a41D߷(^C[>Ğbe!cw d*rği׀?t:ٞS_ z@ݵxRބs%jwqL̘:?;yC-Ђ\~׹X.C *_E\=#).<$:i8JN[,)!Eu4cQJB"U5x巉Dd<j']AgilEk_r[O 4^|U?ZM ] 3X
+@I ḣDYvJk<=qw`ŦxjQ ?cOI{%3lWECܔ:ͷy&%1eŠޝvP_Co>0uSkӤ~}EZ^?S*Yz$jy#r^!&v$P>yĴLA
+3wbUT#W85S;OEؚjrYEq'fG?9Ԩ﬎ 㵅RQK9NwdM_gXL1.<$5A.OLgcΎXM9'~h p9LsKqtIj^.|BPYn2Dꡁ`p?2{](rKkEܱ@F6 xfZօ913z #łb7,\ǸWt 3bB.IU01(<b 15܏K ((I2.PΆd*I7JT u.v
+ -Ȇ Y-w+,rczsye^8PQ<*؉Zbj
+R]/{i'{pKلĄ~E v^W-8g)#ij[= ϳJk<N:>SIfp+B-RC[/7s177$}?Wbb3ݽir7zBLZPR1مn 3ϣ3jպ['9PFc,հRJ|KCjz)G"bAXkMTbHg^I8 s
+PhCޖE3grGV{F{82TɅ)HNF:2ޔ7.q5\h9ts*RuqKDj*k/Kơqew"=B:~ڏ}=#_+ʕ?$%7e4t3KǩR̀_͹/EԏMBXyHjoVo*3?MhPҘVF!wX B~ouBr%wnΝ3/+ݏ$؂ަhf%6cMI~4mJ?*cO M{}uzꋣ" a^Max)Xh(<W@^.2j>ʈϰ
+XpqXP
+qI
+E~|ΚekOق
+_#%窧tR ^?DˏSSN
+(;F?YBq\\(>Iwb,bteխcW/eL]%!Nwm54fM3ϋhCwZofX0 0
+Q|sFK#M̰p R{^G ^pG @MN^E;]殍Dox LKygh08#"?}UӺ񸅏
+46i3]sAIn15*1Hm8gt"|}r/.#~Yd}0ͥ'(h!<j.: 7:1Yt fQDϞ*ww,lM w {>aus0_l{%m*ĩ{~E;{R|Hi3A2coS}YX;A}xYakyJ220_ Xƴ]hmxRasUYԹsDҮ2ؠ:uh U̯)hMܫd^q 8S4@/0΂[&|ݩcU4mqܞQHEљTUThꅂxzf:I@|عW:'/}hZX?
+f7g~ˇ6 O/$uKhf=Sޟ6{{o  qH {D} v er ,I#+l_|*+whK2Ago>[kl"vaXvoi}wޱ\Rp2ujHYR_@Ϊm*_y0]
+Xc7g㧔?JŝYD2 $Q2uH U~NƖ4fH,s]H?..R<(U!F}N .yѕi\l k3VT֪*)xA]岸ĥzgIFȴO ܁u'̺O݄v"}hXv׌zo.I'C#b%Z _EŰ3/M1&X_7Nvra.gg=ljQa "'b 2<#ʤ_ַjlܟO4Q֫5ƌu,W덡`yF6:\,m~\Ln}z=6퐦ȭUE|;HҼӗ=tGPhf0dQ|GRpƧ>s=R"ۂS8ôEk#[P~qļۊ)ad OX S/l/+EcÉE ]9'.Hg.~H8vCҧ`rOHM"kίE}=kҫ!f
+c3w ť]Y8&d g.iK(5!fU'M*OsV6Ur$ęrA5 Ȑ7tKʡ۲_K9mj&F(_ i{uJGYJGN4ÙaS6T%X:b(*^}j6~kSR/.GϢuq_B| HψmOExP(I[ݺW~PcUuAt1H Wf5dꨳS UD=&LDBkf1~_QzSȐr;
+_*
+"9"uiH6 1 5bf޹r)UV 3}Pd[ m"qۦ]&hy@ Aޯq])-Թ&V1)KEWjϤײQՖKwCtu_*XfWNFi%VHYKK9#qy:(. D:!]Мw/|K"( zVoO'W|qtm
+i]Srxm>h@s * ҋcuq@d+ayހkHr6qێq\q4:.$˺=I!VG!<ph!ZHQhpiLu_٬qF3Sja%v-nP#"[a84QV1ݩ*D.._b^GAb"2N("6={.>Kk/|f%n>WfcYh'!_[n8ę;x~_ ŢG^*Z, pWSd&3͈{ZYGWi 
+-+oG ߽2B:Gw45R KnfQrki PY)cw6&1[fEpQ4WôLM:!SJY3O#i_HIcscIŨ/9e̢ʮ*Giun+#쩴!lxumd~!{tM"me[^K:4t7tN5}Wٲ 9 {7N!/C#rHE3FO`U_{ȔL*B/ὙqC!.#YJVEDZXȵBsr{_:[ŰqD2K?E{B`V3斷dV΍Y'ܞTQy E`<ԭ5e}3tr,OxߍA50;)TO_s?l7 XkK?\ C(u}ж'OQv!ă$iױ-}$u!v;U¥8VAc# .%Y.Ckjwveٷw, WqZ+!"VQ&Vw2吱n(
+3Gw
+-k OVarEzXg ݰVG?[tCĹ3\ˈ}2
+ ?łqcrxZEe9lf] gRGOfxE%B2έ~0yVI%z%.>ZP_4=0Rc<T\-M
+B=NqXYr~Mt m]@[M;,;(۞>p4A}`] tgJ\9Sk1 7U\.v9I8dz6Y0pe6t(Q}M*g<"Yci\tѩ#BBG x9)AWT炝]%qRla rH@Ĩo!q9)<ݲ:9V|{
+Lcgdx73B 9yKחk\&EU,W6EXYl3w{}5;:.9o|IZlͰ >$quq {3I +as>- ['-IΛiQhKfӧ9 _/O4
+
+
+Mg|@f*oũnx(TQ%3J_;x̔Mߎ9VWlW`L:K^Q*<cCe).ESK;A~kpBk9a#TIs&Gi031!ѣ8p"{ [:e&~7+ -9|cvD\"Zx=y&f5c:6kib>rz2S=_0YRi
+|qb%ʲNYL`[ExZ46x,uuz!naH/1_8}ݹ>w^M O8u4$v)Bjav'C'ǖ;S n|?lSg"i0, c?}A90XUɃ):ԓu“M -_-ƭ |b)Y7O4Qp-KŐ- #}eaվ!0af;5m
++p;HMPl/}5Xr-tk!lɓІ/Zއ3 q)9"M^֎wfvRx.Is/5{eC7蝟 ))ܴ"1jǚu|6}"h-#䵛ֲ%?c0`*S
+`/iVT\,y$ߟD~2]FǏl|YUĴOM曠$Ë͗x^
+fy$T#/5 -Hu [HNRvc :j)w \VA&dRѐNIgt]> Ag<+xhg6Ld+0d],SX wYBƦQY6}cHez@X1t
+s߅\Z+Ca޷ XW^3]QU|. {ml+jG%x_eG>ӳp-= CR@tZ7wkcCM.I|%Ly`xj#;zag$+[v-ٗoI2O
+e`;U\Ƅ( =eAFoP;rhYzl}l!~Tpro@2|D׿m]F;КR' pH}ٗ.'<Rb25S5@CBjkkC{EW_"gSz`)L'X+?y4OsQJpiA!f k~aSo)zfWC54HϫM"NASP)4sfR=ZyéyDcFXD~Zcx Y,1Lg}DQd!$@ÓU!fbm{NRzW!И%;9
+P?,sĩ}Z.](4 M+
+10کG՟0FNbZ'CV}12ٹBJ?P!SDܞsь33
+ w=z="׍Eqt> %ʆ,;KH5x?nhBZxMfVRf7iމ6\t">őB1w%P.rΊ Z'4DETBbm;FHq#Y\@UJ% ~ CHHWW34's~>5Q0]Ӽӕ^UXV#فMDJr_ێ/PYY{^lCW[b}\ShJԞ2hE}1"}̒}/|$s\Feog.E@0bן'&85Uݡiq&$n,c;aTÞ2
+z|'k@΋+V+>hN
+;?%^Kx+)=R@N<5Zњl|1il>r2XnL%By_uyd&eI߫(0#u7yVrcd2 ݹGCK,_ۅрŊn<.Zg]ݥF B/I+ZLKi&G4]va$t=J |I鈫axn2#? P(v*wmRJv/B.͎4A]4"~{ȁv c᯿7qb9 1$I05`̧F$ٶWܗZ0j;3XM
+`X79> 8r- "6YX8vG|[X5{JrW5J7|bσ
+Dw:V7F10$PHZܚ}qiGd:.2Ҕ2힂A!Dd\NjBF$ﻛBB;7P43:YȒW7eF9_eʩ\3hd(w
+ O#|'㻻iע`-asuZ9K2iЇD|ޥRC'9c*$"7XДDgl/uDqH˒e908<1U kx&BӴVOTR侴 Ӝ<aWi)րȶOL'dr9#;p"WH %o ]tH4I4efŃ$%ʨ9<wZ{}lga'mVEf;x5_b[O3xNǟ9WJDC:M`WqR"Бe 'L;"sp
+mI2ܴ [{E'32O5GbzQCE Ĥ_2Vp!YuZݡŎm<rrlAUK&Up" .ّfW+=14YȎd5.@-[`50z~宸Nԓarug+lNkhP'⏵쁆)um Z11-}B{sWvk^Eᕽv
+ Z8j.GA<MĖy`JӋpP Yrj#la MA-g{g- ̋*oE[6s$_.ZMqX(Tה
+b @_4׀nh|h{ <ߔH}^B/Xi|IGQO~^&>\er+&Wž˪i!Y2(yG5ҾErm\XdӅpdh/Sw&qmV5tQs(ǥ
+<{JBo5L?Vl7(L^O
+f֏8a$) a8MVɡb#:?2Es`yPU;X14i2Lj8}z U샭6ѫK}x#7Hٗrʛ Ňu;Zх v# ~S 7mKۺ&N_(+GuuY
+nB
+R}ia.^i,ԨLU/Wϻlei9,
+_P&T9q o/ֶa$
++kIU۩QXʧ)IW-
+4
+YV]':qfo݄G(
+i%%bL Ekʗ1G#>\ ¢! rlS@!j8I?O`ōǬ4d'k{>b$
+Rz;pBg5Ϣ1`é%S +DƥnQIgS${#ш$2[#caQ6&F[ߝ oTg>~PW;2
+?FHN?E/)#􈱗ŵQN;\}jk>H-44Bs1 pg
+ٞTJ0[*"`X ` X_ Ti2C{5R}d [VAߦK.)DfQC~GjS-_Dj^@oc]H!1;;1"c%|,':m `\
+ uxT!!d6ߪH~d h;7zcJ(~RP!uq%IT'RImTNj/ ^ =䅷vS5髈L 0Iorx%”õ
+
+󹬞"Upwq@Ow}XL!cu(w)kO5!9a=sb k(j?P,EƝ{n> ՅcKN%U#$QAK>ICQU7yѸ!۶%0]zqyoRLhc=.2hEeC8"NqfAΗ-5T)-[
+endstream
+endobj
+11612 0 obj
+<< /Type /FontDescriptor /FontName /DXGFLV+LMSans10-Regular /Flags 4 /FontBBox [ -420 -309 1431 1154 ] /Ascent 694 /CapHeight 694 /Descent -194 /ItalicAngle 0 /StemV 78 /XHeight 444 /CharSet( /a /b /c /d /e /f /ff /fl /four /g /h /hyphen /i /k /l /m /n /o /one /p /r /s /t /three /two /u /v /w /x /y) /FontFile 11613 0 R >>
+endobj
+11615 0 obj
+<< /Length1 1754 /Length2 13064 /Length3 0 /Filter /FlateDecode /Length 14154 >>
+stream
+xڵzeT۶6Npwwŋ$+.-.šPh#FFf\zJFQdY
+
+ȮPy*
+xU ڿ +@UΫp9-)-wr\
+'w?P:Ƀ6:Boc@t[[sb߽S89Ζ`s0` bA @?Ln[K^Wfo;f ql}ٖ gw;w
+
+
+rs2wo`+_/l|ݔT񕷯gݟ WJZ:8_a_.CEM_EZp/79gK `fJn>>/+^1 
+
+Et__;ݖF?辋|H6ԶZY:Ղ㵄EI4 ~Kxo'yά(`\X7C|c~^MzGq\xFŏ$D&<\t(4 @5zV@ZvAe 1qW(Yn=3⯂o;X؈]ָ1!Ѧc%
+{gf”rsJE{қTl<QX}/_hcҭ&YY Qˮw?'Glp "B>OτA(f
+lJtfgmYQ;Ǎk߅Gُٗ&11m\eݷ~q:\ /Z+''n#:u| ,4b
+ChdѱDsފ Q@ l A ǩiY/gGbBVu]dcv/uV:&t,#QC<f)jV٩a14S/<'5LǕlyl7R/-
+aYg)`e˧
+є+*&W.=(ߞ-"/.vztu}8o>f}G
+omXߠ:ë[j," d uw(?g'`O*3˹3W
+6kcHIdo#SSrꖅ|GNP]zRS1cࣗ4iH>Adtpj.4o\EI_!h jJ7dtů]JŢ0g\
+2E`gA0*!gooe1m܄>oZs1;4W1!]oxDBR݉~Br4/Miw Q0BEܭt*ۓsYi
+H khriDٛ]\p!\z/St70#28bf5vzP VkHm~YB!2ª7a|դf"ӲGroeSEXG@NnKX6K 1i) !~6ԛhK#fz<`wCGe3 ^O/V]= YM8*k@,YU
+5u(s֓;CA^&i t1SJ Sk̳&>Nz\*y|PII:D+*9GÎPȵ^w,F6d:J<JyعknQI#vQw@Y4_@̿LgRg c.n>cmߟ'@:<;u)4&{\[7yXGQz"w`TzkѢ=-+V|uӷeѲ`'Vez.mlgR+ha[kƿ9Į!Ys,vϦr[*$ϫ=uՂAC^gHiS+܌|`@ѐ 2*B #G6HDuXURlV~&ZLW݆jCC?ؑp&:%mIg݀TIQB2ڤJxec03`y4PSut#e\1{$뚘w@C^FoAjXY^Y^Vܲai=]^6?O[VqZi@V&pcv;K^՜m>.zG"ƨO{]]%mޔ<(5.y Ս ^c2(̋O
+LOt
+qٽiSxl1QԷ{g.ۼfYǓ4:@ ,-3{]F찪 FmBb24>NI)3xhh]u$ˇźX?yϊ=,4|{ +1 N7.+ ^:QsCیm*GNL.;!ߙ:[/`
+p`E)Wem5aҊse{҈aFo͗{RK4 ]nV<K^Awa(f#%uGr&NJHﺸ[ebBYY]RN|&
+@Ċ\PiUpHɟv`l͕H6t8^W Vm яrhH6o0ǃZ(|ؠ/vokbrL8Aõ6;)9n&8X>+†ˊмԔ`>?!7DŰC 3Wq魫58Z'g2 f<2% FR&ajSdb(*p<SѾ\cXF0! NI4=`I/{mfHӛkx!,E/JH\qza4 hG<qwk55BgŤ{]is*]xI4rN OtЭG$њc)%^쌓([;>fr)wd*Jx#aJo}_1m\5ٌlLOq~2?.LDBpX^d$&"qﭾ*W*-CRQ`*+CW0xrhcWyBn;B
+=)oNA~rs‘_u([as.*
+4#+%=cdM͇('d.SëcF1
+ۤΨX]4{`Tq{6hyr}UV櫇 tċ“sϥOhX+}blv-4uqyf17>8s;1S}@{_ؾLKR~=1Tl
+%寖$ҷ
+ہ=51wZ > 5 I@Le>m
+.=γ`c iϮp7S +o(8"Ԧ~t`9"B p!n)}t&Qk(YB3d
+*-JɂkmS 39x
+{jy%S|o:zozF|Q{6{ofyuvVZt*.hy3nBf 9pL0b’"TwF`Dė:{f׽37V-ލ^'A,Ya̤˿=Pb1=޷d 3|gPgZyB-
+rOU3䳔"fk/u;Vi'rbLo7̬.:U,*a^X\s.aձyƤָ`9T5+DE
+؎(e
+ 1l%dL끪y W֬jN-_~J0YPLP"CKx/ȵ9҃}4ݷuRἭEG5ۆyGзBN`(<01(҃yFMh=
+O!UES}Q
+R Pv4լ?j`7T@K@H=4H/7$b詻7x 6 2j;9vdr\'qNb}t{T? l#sDh m|B@"D/L+#'`s<IuG":cRݵ.xg`L$MEdoÏ eY&]b'jr''TAb'Et5ķ.n8{ EyyV9eLGc NdcEVGtK$7]<0\}F îu(\xز$= Fs٩fSD8S f6%ʵ K !q<MMpZU5qE"UUi@Sn)Z,5<Wu%L^s| kLжȌFpT.;{c?\DNv)fw Ts* "U _5IH[_
+3iOsI"XL
+wprFD'U%?
+(cSwg8DͮzSLX|L㳫ͱU7.gh_F9 Ob olpK14I )F41E p )$\/Ǐa%.? 2wxWC*猝
+#
+O+ iIihG&EyS2A
+6T S^Q0;{i#\JgA"K##;vkp
+]/X7qLi_4A$gc>D'7.~M2¢OjXїͽ=M?󒑰Dz(o>s K nNp1Cw'S{lZl#|?R'9{ ۶A#=A퉒w[e孙ZOm)rv92AŘ`r3!`
+Eblrq:5*A{y)c,V|gŠH9dD)g<+B)T_+B!˰+
+wiqsSuSBU_UCA Eˏv6ݎ*Rdt^#
++
+Vuu
+& #ۛ ֩!D;}RhQ@Q>[>Qjƿ<Nz\‰`-scZrKT0
+N:pD& [M[sHOAQQBv֘Հ V}"]X\fHy \0]ҩ
+ e:d7Tyk fCt,:{P6)S}X[fC. G;hh=2
+Nv0qthDBAںWaEfz{2xu$}+AE''U=Ebin#(GZɒ^'+&(T-2jJ4`m;Z8#F
+T6WAv=T3\ OO,eI
+,a|I uFOX`eN!bo>c>ts{]GTqG!@@_noI|pni'&` Jew.%e:ݽ:rCar1RfuS4dImh__j, kg=}?¸xϖ
+\$(Հ\ sZdkЄv>ݴ &K(-^ 髙B1?VZ>&DLP/4+_f¦v#p4_PQ~Grj7JY1bZXhu;̶Z]E ~k%TZmI2V=:h6wd;0\,#PDTHBg|ܝ6d+r
+.껻Y8F ׺7<GB;7cZ;Q^ecw6(N\1+SȬ!Ac%U_vyܕ
+L|*Axw3Rk2KX)<qGNa({rG#򿼟QC.}`0O $jZ붭Fh>d,h}ǂVrr+ bZGf?f ͆v9>ڹRGl5ZR쥘|^$.0: GdpaRc88P^h.`0'(^!=CsxygF0IF|r7f4Um-ۋh.Բ>؍oI$b/8xE6饪s67r-+?qЙZȧq}S+<E@!YYۡ8x{ݖRznKia䥇a
+)92u?qՏ߱ƕ/m7  f:N?w4›+<o
+<}ʤ}PwnՊxZǀf\1]e!5nV*98j><$Z;Q(5\Wd{n7QrAADX7nE2=U]G5+;ror_bfML<c f5O_~bgaexqYx_V̓V&)(h䲣pO־=Tv6R<uGHQ^ bA~|Aoq==z'(lţg#/
+endstream
+endobj
+11614 0 obj
+<< /Type /FontDescriptor /FontName /MOYMBT+LMSans17-Regular /Flags 4 /FontBBox [ -395 -305 1355 1159 ] /Ascent 705 /CapHeight 705 /Descent -195 /ItalicAngle 0 /StemV 76 /XHeight 430 /CharSet( /a /c /e /i /m /n /r /t /x) /FontFile 11615 0 R >>
+endobj
+11617 0 obj
+<< /Length1 1918 /Length2 13058 /Length3 0 /Filter /FlateDecode /Length 14258 >>
+stream
+xڵxeT˶-N]6X#AKp !@ܳy Xs٬YtTl`K)PQնpv`z8Z99yP݀YC
+w%!9%`!2p|獶ӗ֚z캡9+ULGJE<s9
+Yu'=ewbַE~j&{>QKz%;6KߛYw2M쾪XOm`X {OVBE}dGc*A{"Y46%3bV[9zW`!t}5iGb /'qSY/T< Wzq;aV͝ftGT??˴%DmPժ#H/ x^sLn1[B^:5wŲdj@8PfWqħj2G@.]Z̗:X)9qb,ҥ_9y33༛&g$H4)C .giQ* ]+śFꭶ&gK]NvLۣxs?+ArlgƔؕ{`;~c 5HݎI:ʆ!܁_q  9 "͗c>O|֐^R9C톧FSI1GO(6Ⴤ3Hyb+뱨;H٘S/Us.Ek &0cNSX~Gl*[`Ģkati,&M&.LmN aeA}u
+ ߃6g)_(Ҡ@Џ]/?r:YӝVBѩ (9,ksM?szg,GSU.I틏d,nFd,AdåJC?;%hm@A~3 æϏun:& ۞EWBL"k׍Due(6}ޯ^F(IH i+TC#: tW Jܐ8LށPizr>=o0RG>Mphux>^`wXLLDRi=89$f8LL0
+K6=tNqC$ʏDC|. 4 pbq<.3(*w
+vʛJ|O=,d[7pFZ;∂lq!-/N 5U˘KaM
+%$r0H(_|-|86%}oz\tVQ".' N%AБgG;vslS:;HAOAʴX'&]
+C >p`r{<ޚCJ}4i2/8 
+%^6"{a4L.bT=',=`_< ~gu{" U~Ny <׆>ӓ2 Dۥxo\ r>W@V lڊfJ/HXo=uLm7{1 Sc~{ #(I}΄ɯf`B[hDX1JExwN =0\v6yw3?~Oh979 ;b) yj#$%ضpɔwwԊAق
+F'ɕv uI#ص^3Oγ+[l 7"POLjƉ ]i[vjInU:1Ծ,DXl2a;"'|݂g[EkHG}9<ja?κ|, 1e5t- %g^c7o.a3WL oZ
+o 'R[
+3\*1J!"L5ᮣ)4&|BEYN'0cb޶s_̆;ƕ-ke ~ ,Ef,TvN`Ҽ?߅zl*.G"\K6Bo <͠|=+BD\j76 Ԓن/YUd}M'l{(Ѷ<£YӢ}beg" Knr
+zYL^w^A~UBluaE[h%sxӭuѼF`#W;O$"ޔ᝗ƺ˜nŬv
+ѾA/SmP5y;d%[+uʧfJ%GF2GSL$vţiz6
+rqW`wjQ#1/yZiuqW "@؂%i)F+ޖ.)ݮXQ䒾T_\hr;C,ͽ4<~<ۻ&58jW+(sl\u^[yҴt@r]*wlL6?tK]ˁ 'C6_W%UpH7yoZYɓ/09<.}dܢwb^:Ǔjv]Ąȁ}<0,T\˳Va dZEP>U<l K4FL3F08*3LkT2|T["/a$])#C~xs4v9FC7ow:%'eZJLt>(P~=D'M,I
+EI(H' %Pqg B_X&,)2Heыa$! IY'Qv?؅wMvdCA< &ڦhS
++c{4vVyglxdRaxRJ9L5gh6I#}֛~Fz/lBE˓>}\< 'W׭ 3O$Ss+vE?)I{B3-L%d|!ܒ-ǩ>mf[zJHz}l<w]`]үE=^NQ"g9.߁}ve
+
+rzD1ȇ.!b.cPlTNdbֱ{Dhcwɑ_DjT; #mP_S(o49m-^- 9[
+[ZQxk]$`־^!%RӤ7[2ћi6ُ^6>`9}Zd,o!rwa×|ۑ] &UotNs9 5 XFJ`͎YuLO?b7%K'~R:ibHI<˱ 6y{<Ŭٻ OI]МpFܜ)ON' Ӟ!p%)7K'j8H"9O-Us97Kєϵ `:@$kӖ#&oVuy-u~
+t9[iO:.<'kޔ?P'sOQUxTV@#S{/&zx5𑵳~ǹsյ%5&g^M`z7` :Q/w 5GdsgCWwN ͤV_w۽FIz<p'mV !a]ȜP$CZp^lgz3כ3۩?ge~$:ݝiÄ_| <kcRʛ1zyD[F1mf'K'{>!65%QPG1ǻf~vvc ]ى`QrJ YDӻ[eUQhrm[bg6l
+ em#?L]~$\dsaWNWlQ)6 USR
+3\ҡn5$u['w*S(; v1X=̇k?d\c4rk;hYwW=P?;:U ĆN21gPbO ) CWӓ,)uV%$V)'U"mQۏ1fljV;Ήz
+tw?>[\cls?O{
+ݓ½Sk6cb[:bx(IHxN ں*Ba`xZ]JB/8JhzzK*_^[tW Wki`"i{A9p3umCdڵ5 Ze螻4
+2*ȑF
+*roJ~:u+杖S=1oܠ8fy芙!`\{ԒJGK=0Sh:.q_2\sv'H-}p]OI<wW Fr125]YD_JtȰy*;fF+K#k ϳZPwnv7@bxi;
+p1?G#
+YO,vQ>%uOoIjca#iƻC 6e+%8l$<t~xQ8{"5.n16<3 -tbzK5іBPtfKu
+;R#+<,dߏݴ)1)gAQ 1g-&h?|I5p9>FYُwT@D[ aO^Me" V(2ST;ƙ S6])y:gS -,?5N(q'>GyJ"?Y u9:A1QI촂xZV1æҨ;MX.Y!+pOsɵY=QcLcDv)K~b fѭ
+3/zGis5S5n4ӫuܿU<G=+4,ʷ̨I.ƕXӶpXl!֮}xXA>F9J: Z@: "rQ=*QOl佄F'@S'rӮM܆aٙ5
+!#تPL^@I 
+m;aVr54̰YޓU>\tCHNCuu.UO%C fLE)7
+[;.1ws®›f'}#]\сo G oR{Zܶh0&u'R)\e4`MGO$ 0
+}RH|eu{ھgBio*!Thl5ƒ]اblX'WO=nf/1*2NUo]_ؓ}0mCփ4ݹF%gP\d""6!PSܑDkjix_~ݨ HImfNW
+CF74s 39ӥ/nl-n]61AMd}ŏx3Nw? m~5uhN6W)l)C(_υFH"q><Qx;HW[kve=B<H!r 3̤ⷘ^V*KթǗ1ҳl#ee{fcv^FwW}Y(dv-N-(kTsDFw/ZdGc]vb(KotE:fwkffC‡v!c,*fb5?u`I0O7CR_R۔%F\&߭s{ggШ#cJlf.t4\FkHi^
+x2SFl$y84LV
+Caxda[G.kB(g"w.@l
+k$5-Oz`¿1)j` +Ѭz?fCo(-vP@_U~l< g 25H
+%>Yi]!+^PhpmzΩL"pΑ*7M9 oss~KI{ ۺa,щqKL뀓yVa$>v+[2,|sS*­Щ\SIhBԐ­&z"Ru5ąKKc]A?6Y
+it=z-Iˍ IYP#2%kbߺ@0D9NxfoJ2/ =n';#˫$AM ):ۧ ew䁊D
+]ɯ6)tW3Ttvk/e[?4u
+o`Pbd)" a&TTfNݢVkcdYePӕD~͋ 4܀I )':;kvy4.QڋPQ=0oO~O4<: ߢ:͓/1\ϓSV eۣaӄ~"Q@Aǵ`_֥ǯD1w"LQ|
+"H,Cy+o>>uS{Dm`ﯾW5K\+tԡ)LZm|(p҄ ִuQ]d'%/?ÍB!}F,v*+,s0/R83OE~pF,ÄA$ɇ J".qnu.rNt; ioeR@ (P'B\;.&Y jᇯdѕ9j\ܖOEWP$>F] XFnv_1fhKH+yPICx<#}}D]4$!^jF2}JA? x+PKRj3!Tϯ-(;8;Q?wG6`uTGS|9,kǓ:4ctM7.3&:d7
+rqʴ҂_"DlԸ6]P3ҹ1`Px[#YW\N(i6'<~ kYnVpl{.Ps+KnQgD`{48k1d{| t["^9Яۻ l`ڕ<'v-yFkG>i3?Ä7YX1 E+ᤩ|}6hp~ X>FEN4k_;9!q~ߌfU?Ux\웺vIȣK#iCU<fƫ'w%0Gu`N^IR3n=}Qn=.Ch?fD
+endstream
+endobj
+11616 0 obj
+<< /Type /FontDescriptor /FontName /MMROMK+LMSans8-Regular /Flags 4 /FontBBox [ -446 -314 1510 1154 ] /Ascent 694 /CapHeight 694 /Descent -194 /ItalicAngle 0 /StemV 87 /XHeight 444 /CharSet( /a /c /e /eight /five /four /i /m /n /nine /one /r /seven /six /t /three /two /x /zero) /FontFile 11617 0 R >>
+endobj
+11619 0 obj
+<< /Length1 1748 /Length2 12258 /Length3 0 /Filter /FlateDecode /Length 13383 >>
+stream
+xڵuX[۶>\bHZܭkInťKqEkqѽ'O2|wcP3f i(&
+4
+@S#0KinpvtSC_&-š+36u玙B<^9v9
+:K 
+C,<
+{;üPG?[ `5[` `lo
+ "o/׬g"3ۿA/Yi7pQ29ٞ~G8͓ `ykvnn5Lk
+w_
+{윐N)Dc`$Ou<-n1NYc rEP%Ro^vTz/[eb JJI VE(%#_)Ic?nSD(/4_e|e|;F ',c},.iϿ;蝰`zZ5ʒz<% s,),C_KC[2<SaW3U1p
+?C{dE<|"t}e|̆
+Ŷ;_
+ԏ]- n4_/r;Y3&'A. ?0Ww5(D0o՝PϕʜʟJ2r4;U|%_2ffe`bt./0/kVȾq< l`w q*~3eDF<c#+ ]k/Itߦ/o)B~p+pѨkN- /=@tRKofUY\eQ7j=36Nhgn~u۟E~wU~]`,\.jLW83m1MAّ)B~\qDqtE"V}ˍgT'ȕj(s,*h h4]< xU.N߰#%+9tZB>֣ȕu̗KJԚ M31jZ42EO1BKq37h%hklCUќ1:xHuǚXw#^FۯZM!RT&6h84rq&taTE'$@tOlN޳odt`!>8>1Ow&֞
+%ww;|_=4]P?<b\`x b~ԫq)In]GR)+fu2s<1R{`^ ~>M @zM R8PM JJ':65"cΦe.6D]<ݲVjv_/(9^@vLԂX[xCgS7XZ c8ʯKoJN\#Iy)eX<DD"'n!:x{/|Q"\Wܳ™F$6zP'޶SYY9쟫96W.m¸1=c%E3v@je]WR}~P/&XmsŠY,6d-) l_u7ӺTt`1rvAW{W诮F"!gVʽ{DGr-)ZaJOW 2P7_d;-ؕ/x9"4x>&a;Lf p~lMr5pHE~k]5qbJP~rE= AiJ"%C<bna~:,3~H+}۹y\ 2ߑ6G_.a9q}Q.;'])녩Ůtėq(c3
+ĝޛ׵M 4s5 س>]#vqtf[%;HHRPΰ+LFV3Aňy ;#ݴ6kӣGT>cq!k¹RLw<F\{g E&Wv_ {Ag5uS;bl[, sz
+ |ƾCR Iv|92=>fd!Y(qVeŃ͢{tczi~cs1^I`gޣ1ioMJ?\%kreH Ved2/u2q- !C&H9޸wF
+I]14ҫ1tDӥi[rX8Ͼ `R4f%YZL7lyT="%LcX^vQ'7?P*4Hrzt<~NPV{樰kwtc]()dl
+Sͻ
+ʀ%*zsQH}PBsK~qE;4V~ n2bj1!h\zL-aXI(PgX ZXw: cbc׫>&à;^D3&$D-<
+ƾp\7 [c70yGZ7
+)%TVx?1Z˝#X[{ #' .$5TGyFIDPv<`aPsү,9Qu ϟvjV} c=b,c8=:4oG)o;M:}xОrgW;D4(u/OR'6A4_^lI
+tU$'2X@s$q?'
+a)͙ /ώ4w:dMVE;y>RlOQ&E"(NRD7 E(JOPg#n~@w{(tiU2CT(盧JHϐ(AYe>+hNHv5qNc5{͇jOIms\}f.zr/?R^¤|YnO|ug6 A.f2ȶYE{ i艱eh5Xn٘oLΙ噝4BHsc%l/pY%?|lR9<ޅv?j9 'P FVRyp+T$_NDSk7ljV?-LbWðj^;l2l΋g;(Lp(U2suR~4荘a1D Lm3^2dO$\E(x`._YLagT6oնݕÛ[6dGn7j~-15IA{eꪡqÚLe؂C]@t+%E > /dNU-FsŹ'>AL#b=u!9"̰u_^Ҳ(%juyҒZ+q
+}b7.OlBQ"GO{4&ɮl_FkYZyaGHCAj KxR0Xfz˪:[E;QR&8i,1|!]$/tw\.bH"g{XC
+婏F*
+Da+^Tk+]ښ+-mHgW/w͌~;ę=+fisc jDnLaѩ*vj>33`ayW:M(k5<g3<SY+ӡmL`YV=9šD%N^tTd>1g+:ZjQzQW*.\c\tÁ֪cMk^24c|D0HUbs Dr.*G^"DRz`:<YЄ%1mෂRUO&
+pSqu
+]<ΥTOҞ`6'DqkWen{m*r‰GP{_|$kT8aHɼ$/(HCrlqV]
+rqOgf{wd;GAOצ;q !VNgs֝4c"*p|U\* дgxj&`{$hu򱏑wEEnN!AݴS/>^6TZC=$~ϰ{ηߗdT;=0OkIXMv:
+Ě#¦Vʑq ^td+zIuYiɾ1J,]hʒΛ(j[ v[
+ |T//j(i>R*z։R0IqANd) nX]Ẫy:f9XX }o&ߢ>!evCҌ;\+Z+<GSlZ{ R.Ӟ"t$1rG{_sJ/ޑ0}7df㑯/^JZNi赠&=z:Y,i@{ws݃VވϒMbja֏
+a[˖}@S檋_&=HͪFIWvMt
+ Ph0$h(ܥu(PSý?SϡD>EEORNSHw#G44X|] OҢf^d\I(AuE5Fq
+Fw;Q" N8[ EU:!V' u䵠U~xxz{oB 8\ae{Տ́;
+3p mn/@)ga|5 m0d
+3r
+ykEfDzF%?
+
+Ly
+j MJmWw
+Ք/*Q-a*+i[IrȮ{+H3Oc2E#}Ch| GHpZJ?gq\w&Y`kEl,3h](29i~?ڠGLv Wn^
+r4֦G^3yҶ^&U]޽_nϡАrH4R_FH2WC PA8xږ߅<ɣ8ÿkO++ӫLbQ㠦=q#xf4^SqA/V׍5I
+? (&F'Oup|/pUV"5pP'jqgs,ݐqH9Z=|њW}<Q{dyÌLC!T\:2,[5{vR$3(~f6fFA'*n=ڋ.jpPݮH&  J;cN1me |P=˰[ޓ1r( $S(;EޒhV˄$Ynջì
+kN-_6)9F93o;+b_QˈpJ*VBV2Wwv>TQ$-čUE7},SAϗdΦߜ+4gN$x ]ǖ#z<Hx*,Rr}T`E_pY7i !`/Ǒ|Bu(;6+jd½TrIqŞaN0o#eZz#+ġo Tcy 8WWQp}j%]ifpU8|sKQqeG':?9ܨiGxPB[eخLKh֤>0A~$pic?wt#=+sX >%"guKFQ57.9wOppm?ioŅ슨 ÷=ymc.ȅVyTS/j$leG䉒{*( /?=E%<3Aw.",lL2Cy3TrKC"-{E3ѳUVco|B].?~1;RF3k~K& \[TIܸ3Fp7}7cPR۔Y ñy1DlVEiHG #_iHAnދW }J2P$ڢu+>UT:YM4g BZt2 _/'gC?κz\)PQѦR$4-QTQޙӸ/Mv>,9sm
+[1 5U`-hT{N^[h
+y]݈lUNkSFJenl;E0s
+7g.p/O;Mf/@-0Ma(AӋտF!7LqS{r *9? Ip ,%ʩ)MДVLXβR]Jn51oQwq\'JV<h'u,N}
+`(k| "Okz9l63:sw{Zw6
+*_a.Ͻ &9Aa+Zlt})C-ߧ,vB WQ8
+endstream
+endobj
+11618 0 obj
+<< /Type /FontDescriptor /FontName /JJEEWR+LMSans9-Regular /Flags 4 /FontBBox [ -433 -313 1466 1155 ] /Ascent 694 /CapHeight 694 /Descent -194 /ItalicAngle 0 /StemV 96 /XHeight 444 /CharSet( /a /c /e /i /m /n /r /t /x) /FontFile 11619 0 R >>
+endobj
+11621 0 obj
+<< /Length1 1716 /Length2 1755 /Length3 0 /Filter /FlateDecode /Length 2818 >>
+stream
+xڵT{<TiM5[L(3cu4 ׉J3d1qɥ*V)]h)]mlWQU)VZSH۟g>gy~i&=11."b$BL3miAp\
+FqX䉍di'%F6P( X?>H %`BHG"8TYW.jdH#w!NIO BxgrQ#8dA4"Uqՙ! X H4J' *8|T:".&q}'%18S)_T:\Ax9Ci|p<bjLlJjhHéH4L()8
+נèwl_dQ'f4ǹYؿ9OiYx}C-gM@.<֝Z}#*϶8yJG&NlnXm|z ~P'?i{?,K憐҅ˇ}+u72ɡK&Tkx~bLUSK{L{`qdVAזNԩmj-xeد-1u?bV,`uI4spjˤ[ݶmkRԇ 扏s q2_k'sSrqe~oq"|qJ&ZBFu>ay3;OӮJ+tnjY]g*1(
+Ŀ*O{3+ԶuW=\~n&ыmb4CuGV |k__/M~SMn81Ѿ[+WKWMSD^$OoB3+} B f1ZNr|SwoK[f,-@$s 䣔F+bw7j 1aǽ< ,khpA%ZS
+'
+<Lt76n89,lѝ߮?l+_(I.X}GL &>&<EsBCKBK mQXǛ[uw&9
+sZxӮ1nJ5"5J-$ Wp}fREj7ϳYd!fTܶB[-YF7~8Vz+wҺ'պ
+\=!-3cK8A-ek7|T1MoOx:%vB\_> ğEwy~e fBr4ǎb6>Ԭ[kQ{joP/#mISwy6>˾ x vWI?f8Wf&HMgJùF.vugFү\YYTEh޿kXC}\?WzZ6vXY)qo6E~[qQYpu'嬳t2t36+Zgy{dB
+zwr ?QUYU<?n]:l*VK;srܐcLHmPd nީSLGṔuu&}.S].;X t;=*W|޷x;7hrfpuI'~gt_~{֥IΪm([}_yi/&4d.WxҚǻլ]ba{?(*0u-MI//^guW=uW ]^u8:6kwF쳛-<ΜHXP}M{4C[2"/׋m*ȕڅ3֖S~vvJ+Z-{%`=8+SV7v٣C9ɮd|ϓeMᠼ윃U=;]}/(A$΂.izKYw;{ ?d[sugnq8٥1\JMUss'/ZiW3K=h2\u.i ~O$s{4_Y]%w^ܢrK˔>wf8
+endstream
+endobj
+11620 0 obj
+<< /Type /FontDescriptor /FontName /FACRCI+LMMathSymbols10-Regular /Flags 4 /FontBBox [ -29 -960 1116 775 ] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 40 /XHeight 431 /CharSet( /asteriskmath /minus) /FontFile 11621 0 R >>
+endobj
+11623 0 obj
+<< /Length1 1689 /Length2 1347 /Length3 0 /Filter /FlateDecode /Length 2378 >>
+stream
+xڵTyTv5R
+U.hP"$Ņ!I$3qfbB)Bq؂lʩ*k+-Uں*ٓ3~.C5d /(cDSi1Pg1b
+|}|8\D8` `@ 4%@
+ L_2" 2f ܐD)"ҜH:=Jlv
+H :/@~
+dӥbEbL,f
+WClR4!*Q3CD0lMcw8!|Q2Y0a8@#( 6@n,rQy=D;oLJƬ=O #,gop$A4CwW@!f '6ih\B#RCcf녆GI@VbB#"M&'!pAZwy8ѲgA&k2%
+B? 090 Duub,՚e
+ckG<<[$[nt`1@Y(u/=_z;+ªqPî.ͼp9~KS|иEd]jw>ֿi=RseTEkܶŲnǯ; ~KmPi&&~~cƊ[ڃLȏ8ˎ%gg8]n˜g靃]$n#g}~hmjVN
+3EymR u\FZɊ5cb~wǍ$ՅnQ<:9/gT$Zdmwn~h~ɗ+~F<&=ytỦE gPiօ7(*kkcenHe[@U>8"ҍwsK瓢4[Ɩɳ:~e]du~Vy3 =?iw0K
+ArOc3wQ9eKf
+zFyrݮ,Б9vBG/Nr
+endstream
+endobj
+11622 0 obj
+<< /Type /FontDescriptor /FontName /DTFCKV+LMMathSymbols6-Regular /Flags 4 /FontBBox [ -4 -948 1329 786 ] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 52 /XHeight 431 /CharSet( /asteriskmath) /FontFile 11623 0 R >>
+endobj
+11625 0 obj
+<< /Length1 1684 /Length2 1579 /Length3 0 /Filter /FlateDecode /Length 2629 >>
+stream
+xڵT{\LvI1QYR6SS*SHjJhN3gf9g9S. B7eV&hlEmZTr۵L,9|_l՝^S4;bAcBj ,TJ 9(ffr pНp2r@0(fFa9p`8U`:4 6ᐂpèAaK"P5T|!R
+F)4l?B(@•
+̟? J#ePILAR3nFn
+D++@H`<3X>^LOh0Gh pttt!uDTJVPH<'lCbBc+@P<Rf"JCa| a8<-ZL'%q12LD!xQbP$ p1rE;> CTA` $]`aO#ɒZ>JT (N3s_RJ$wbD/_ĭI\
+I!
+/$'&yCLB 4;'aO9mBՄ'#B4.` q؁-qsCL`&*b!RQ;::!|>N
+4)~Y|AZIlQ οsi͘ecut{or];"Qj`Íjá'ft_]imsY-cE䥨)^w\!פ+spj0+)o﷌-~xs:gg IonN6YB/s~~-;CH;g|@xC_.qzW%L c3j7pe|Eփ%|ͧ5T_}mwt[IșG{۸?B/m$s]s5^,m9ӻRRlT$&fT䴝;zWU8}i[LB-Aϙ~ {av ˏ/nj!Ѵ*6EGWr19h%%6Zj1ik-VM8fPPܴJ4SczՐ!@o-gS%!ǞLz|aʤ5OnS} pm7MY<Iػø8?dAĖXvz$ 7K_᝺)[,J_9&R!I1YGP*7\Zfze<nj֐>j޹gP?<jmE-ouuGK)UNƲ^{1Cm.awj\6w٭c}E];wCAo7l[秓0{?w+ҚҘt?7.Dz䗴|X`>/_캐qPf§)~UG5<<ҧ<u갞/bE2w͙hRϫ*B*6][iX=3}C.޲`o9ؠs} oQY f:`
+endstream
+endobj
+11624 0 obj
+<< /Type /FontDescriptor /FontName /ANTVSN+LMMathSymbols8-Regular /Flags 4 /FontBBox [ -30 -955 1185 779 ] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 46 /XHeight 431 /CharSet( /minus) /FontFile 11625 0 R >>
+endobj
+11627 0 obj
+<< /Length1 2980 /Length2 30802 /Length3 0 /Filter /FlateDecode /Length 32446 >>
+stream
+xڴuX>L ))94 %Hw 9[}~׳g͐+ ['zf&D 4s6t
+`bF$H
+he05H31
+d 0Z@
+6.'*(
+p-W_FꯍJ ޥ& [kw Qw7R/kghca/
+؁cdhlaal`l󏜍 `h_N}~#x+8Z:#efa%vC
+fצW'
+g+`ɹΪ4aV3fqEH2)@<z>%AoړgnM }|Qń&r2>UtP-*exP8깏f~AN!ѭȇu-^dnrp#ُN/XQB4 !pv}=iS T5O{=ڮ*-ok!f
+(/6 ,Ӊ)|Xaam6k Fq̳H%bMYN-u-m,OXugB'j{}2r{C,z+9D^rkp 8uDICWFSz.>4Jy8d7!pSv`lɣ~^q0G X!Lfc^Η
+aKeEZhׯ<oaBV="0Љ P1{#7~Y=d~J5\??~k汨ZS9*G΅i@5*ε_}7;fL؈2!70jc֛aYk'[Ol#E;ߦ1+;n5P( Yx*wxfF͇W8rOg\&,S)@Bl{g,pB,[!v \
+e6\u݂]j $;!&k=-K) ZfMIڷdn{":
+3XK>ͅS.j7DxWIJ@ݬD x&>1l}*RRII÷yMȯz8*Rҙ?q0K[o6*a꾅Ѧh0.'tqZMC M6-{HY<ߋg.ő
+d'gY'id:rSJ}3" UvFS4{5eoJşK PAK/sG13c{d@l/D'?_ax@_)_8'42Z`jWӃ2f~lV'Ǭ0t> iKV!59p1Z(]
+Xos^G^?] 8<t ^߯L\*ڞ~wuMst+AN/%s(ywɰ-2%&C*5aC0XXW=(Lh.jn 1Z"#\0F+Mn:[bS~3^ʄ $e|]lf-Zg]ݽ0ڎ_Bs:ﰣ=inqj[%;9$dq~Wj}Ğ.ϣem00}1_ i?@B+*Y1U9Jb@k]Z"mᣌ7Ѡl^= 3Ǚc&)3]"@Nmeo3#q^^e;2۬s>T fI E(!:G{J<y]U<JgS9x❷%)xѢURBmZ1OIB:
+΢U=)Du&AGX^4**.nG;aӏcb)<ʣrm5Ps6zzW5GZ
+[#B
+:: )z?\Lb{K r<v'
+D˞0ԗ#?nd:*yVE訐Y}{nAnY:01ZF,;5%&ZݿxĿߊ"?`˂$3~E(ѢGcQ>Y/#Ձ+Tz!Y?Brlb|u<p#JGgA2,4
+3XHM۴ꁚƧVkS>#wozvs
+1#{Rod 5DH%od54NAm`+QÁN™)>w^(QqN@)~|:~p+ ÀWIr_`9yyFN(Yo_Fw ءo/Xi1`VF~;xQW4kYIMOZc1/D,+oY7~n”H.1 e9!:O.Hg]I{_4CMI.${e#8WjdӭW*d[[&:
+Ė[~-~D2+B8/?7ެѽ`msؙ$
+hLl$w8:(d/N+kqe$=si°"o ʗ!8[wY%Gk@܊yA޼-Xýď|G%5BfgE|cNg9M.k%
+Q0 L5lɌ)Y.g[aIpzqx6Gx]Kcя xJ,(N) Bl童6djN?'Vt[ ԽF0ĺAZ]ʴA
+̼jh=e!}?6=ŎB/Z"StoS\ݎ"WLx5`A2n
+fLDC#|N[[PH*DFݖ՝l|lӆ}r,;ϡSN><:ҏJj*,핝p̒˾
+G>8MgJhI4=Ƀ*lreJn{ZzDKYUŠbbl`K;#|M!H_bS/{{2Tf Jo?}LHypwYKyQnYVOB.g%kޭ29TglhgDSk  Ʀrީ3# R.^Je/4$P6"Zo7jZRd;1ZҲjY
+GI !<!?d&~*!Z5+'tTgH=Y)"PtdZ SX$=sL36*So]&6 >ZVgbQvлV.ROǢGո w'rfv(wu+dM,J-`AXy{_'̺ZCC%pF^XBF8Bx`q>Jk>E> A oO-V%9ը%_ Z7Zwę3 FOAVgS7'8כƛvo
+ʴ3rж/?OJ""sAwBیP_}(nL M %ֵiJgkL0Ee{пmcAܩbqMLe65rLY)e\L袛إ/WPN\Z@2 gu Hoi+C4kjM4||{q4`MW6lENZ3}8;G2!t4JFt'p~4d||kDѴLep
+˞XsgjRp`.Os*(G
+Fck ǁoG%!މ`k@=KdGŝ>F޺0($w;(/'lڸ
+wT ;tk
+0+|eԄB6@\%MH(S?wU摎Мk_1.+9ԯ
+kzecj#|eD!gaViFVJǑ]#T򕫪kO #&D.(#:C#mGZ]-E"?߮v ƻ%Z{!Cwd5B#,qi\p>5\7R]GEooC`-DfrW̿TnސjSF(aFWMlscH,cd0u Cp6ю3(Hx'}O=S+,YA0?_B)X>.U8Z\dbbsݤޢL5`ggyIg %}z~b4.(wWJ8?tq,"稂&Svʲ;.j祏lPد1i8\EVOgqP6x̳r0<gt!P{"p| k笝x҇ia!$k'P?G #q,?kIv z;WdI/O  vxdѧqQ99xcCF>U(mF<P6XC2 f8u3Q3ڜΞwf#pJKKVejkujo)|M}Yԙt+lG_2$* -IKv{ew%UP[ Zbf~ 9~@z WyX&sEw)}rh4CoVݡ3C(nWVM r!8A?Sy.x5E V&&Sf1)VwIj
+
+B5hh"EYk]ըI,E|%Xѽ NlzØO:sbhe:0d'3N ֟q]8e[^<~Z+uJfd9#
+"Ba TJȒCDT _Ζ-?Rp,Z8mieUkD/p]%Ԏ\Vs?P G6DӸ.yG1,xeD7h ݲ4zyl,oqeVeE%ldXɮݿXA)O{+z]'sJ< J9[PWWݗ"%PL!ge‰Z.Y^fPeG:9|pg7'/ۡQǒ穑ْ7=k>zKgִe׃.{
+ 1ѕAA{̴ШT5G\s{L";)f{TW}, K)%欲a^e&=ACWzp%n;qJKUMn+65
+hJQ2~gNc"`]
+w1aTkm쿌La̘Ojl hkzlM1sjƽ0W`t(υ_3j..zfLWtmBou"=ueZ942yɮ߳5%pgarX\cv;'lr!|&q3ţ>@B~6/I0-<pJ^!0#~Z4PNv]k@F'xz䛸~uAf,ڜ,i2heS{M!zC^w̭Ywi!wK֭xGRtXvQd8<a|</<͌8:lV
+?" rIy4j)W逍INK,w 7%t ( BRL!(jp%|s4Xm5ܹ|=+A_pNMH&_ͯA kd.ȢU:I銓)I=aH
+|\FLg G2+|,e; \Aip`k{!!8CAʅUPݮûX;Ksnya&Yr~ aoK+,.{5lwYSu_AR찾0$[T֬&9=,^*IKq&5#kg=h/7&{2RʺKm- ȜF:X_eg<
+W*
+ oE:ٯN̰P޸G8ӝXӐ
+0Zu waihqjR{H~zZ0=uTj 쑅P18kGM)7rJE?12։ɐ3?k+yF2|cF-U&}Yn&m=͟MzIh%)WRxQ=yBxڌC361uĶk9y.^x9ZjYzis6^7?wR=;/9pQOWX(EѾ츴=T}Y{\(&nNlb񭘯3i+qC{ߥFfh;xQoveáO&2rS[l&qWWQ1c
+j3Rp(>No}j@uHb}R7̪;R59񅗈ۻ)^J/I>'~SnPmءX=vmEB.vt2桥ssZ:T#o,wj?s~'jW08L}pPw@>zy7n-g Kل)S~ʻnt% F/Xo_"\s*-Wnehc~
+M(mr_//$EEqarP׬rBM1hq9&)&zK5œ`2FX<0sH8*9yֹa}ĀC1dr4?Ňt(wՙ]s^6sc
+8Uk,©/h ꏖڨJ,
+4{CRn*Vۨy共XRnRbCh$[n! 3[S^GCio]ȾD}/}dYl$ eZRFl07Mm}Q1̥љt` Sq޽'Yk2Uǹ*l7  %ܾP`5b 
+J(2*"<Ul]|X+oeƃ>*L{n͍.(Rhl`-@#J_|^/)G3f#9s?XilQwX7vK'ED^]ߑ(K{
+U2侦L/5OD/L}Hk~~"Ǒ0s
+/_gjMd7ڧT5ڿ6VNK\|
+T#Dw>USt/2zk:&.[O]9k^w XR˭E)gZ4=Tf+BW-8 m84r{mh&|~ UN:<3u$4+rq667ơZ ïa5PG,i {1H9sNsdqΤ=Ij Meos* ǺIBDV`BXXN,3#Syn\>
+{ ldABb멹Cqa0`!ѫ
+(~;c fဝ5-!U/n7V&2p6,=!~^G"Oz/J~wD$ 3@8&mb̧5掯ݎ,"|VlXIvo}Z$EAfG^<PoVﯶ7TniҢ^N$No%q.y2. _H= wpZ^jgpe rNMaL\9;ŷd_{Iqmth$յd/- X%aVVdMl`^fgkNMq1 A*]AٰmƔL٥hYRޛ&~hƋv,75~u.qCS_jvRUsI>.a[=n[?vְSr_g m㹌V$W|B7yI?>q`fj,khw8^^ ;R6qF}xQK‘ XM0U\D52F)7istrc;NTAObPi9N_n9iɌ׼3&! ] ־II'VUy:ѳɼruH XS!E,ziT?CEfuuDZʄ+.`Trۛ m :1v~sHOTS;`]_
+]z!cs1U脉%k B+&²̹} R[b7=t.m<f*ڇ/d$c_t Jx5;Ǖ8l`zl^kzMvM8,mEg1K<a{tC b mD݆;Mo: zuէݮ ߷Bjpϔ2*!Hw0n4>BH9OT?&iBٌ+
+T0\U1U
+k;LO6^_l :]Hu8}:Ѹ-'|7`<6Yቡ'yH~H]#VI^͕˷ZԎĒhX_6UœP6ZV9zf3M]B5Y@~@ch9F'N\?$4wRwHWND+b*lv1O-d)%m$w1O_S7 @ JLt}jCLH?t]ww񑦅)4
+*[SKi,TGJB~ !00z:a)gɎ ڡώ\91{""(S_wi"ޝvJ GN?N~oTqBU-zߺ*Y 4ɀ wpja:QH$
+)tލ0ɚ8~3#
+exsb`շQ7{s6Eyˡ:NfFwt%Y\ { 'LR)
+sl
+ev+Xܸ$idrEs>t%#{Uc)ᝤUcVzRq4,F:<:KX:Fȩh@(ioѓ\ slPŽ(Ob90Ozhu=V6d^Tppdm;jnJߓUl ,&驽^ۜ&[8J=T䍬%hFaVZ!0XiH}D/JмfS3IyA1Uw^y}fm!lNBMgnJnk>
+/=Vf&b}nViol Nj{'&S5Vap|2).郞PAyZbeHHh%E)Gq&#bzEp*>&x S[y2cpjßZ>r--UUThu(sU)D/bo7=F0E[lN
+](VF/v>exoq
+A"bfwilIMiD{v0D$mio,EQR۱.割&«%j
++?hea}6w` C MUİ֑+ zA]rH O<[ |b4T&Je;hcğCW(1?_F"=cR¦؅
+:~C7["%
+0=*5z-?or<'! ~6tk~ pq ߃5Jq[pr]IƇuve)bHg"1Ahs6/i"SF<͓ИRz| ^ عDŽR$DZ
+Q{F{6 qS\3vnj0U۟\$L,JN׵]KvQE/II3(YC#t'*Ue^
+?v%'eXj})O=%ܩ?;W$$4A[rm?jWJ#QM4dH@5;RI shΦ@XQ7!u[硰
+7 i2Jk,6r]FTmc)YI(vC
+^K8:9f+<o`Xs\+uɧ&Lx5 ;#c!}^ܘFKw s8Tr( BD
+%e` Rh\l=99wy{5iؗ:
+qoE7JE(#6$sxB_֚ /u= rTTI Ъz1O!aSkH"rl Y+}%dɹD<EN3ڛF`Px$Q5wAy3NvކZpz7w
+ɨ<?F8p?ĕQi8d̬1ǤK'^QF68@^Zhga%…Ydt9 %GkV h"ث5<F }K&NI!rj,r>D7qԹ![pnQD6[Qsyg1U?ہT䩪x1I.RΜѴ!a놹9ROEL7޶'dZDzFJs%vYROg!.o&K2tc)Rh"ʵCrӝ
+ZRp*_ߞ
+ 3m,-"Ȳhu"(E
+xƣ'e])oY}
+}o9O󍏫s4Qc(ٱ;R+"{d;Ȇ8_
+I~`̹g<zV\6OXzB‡ ѼK79NRi@Q:qZ Rx%0qRVNՏ }z}ɡB
+`Y8
+P3viz1
+>L'*Lq~  V
+}&$.\ڎG\Jh~6zXw0; G fARC9*O6u3`2L ,a~Ƶ^Ԭ oE/
+m({K:~%TYA3{p3=6iFZd]PqD]ܔvmqkW\RsTs+|f oAxW% q72lJ.{gk+
+|[0/Sd:
+? =ܔO{QZC!I#cGgw pc!N^Na v~^ν`&ўav}`/cU6#|)\V+/jӈ)t ]HNP;Aܝx2Pr
+Jd~i0/
+=zVh?|ojxwM';B Eq:_Bf‡ nݮ PyaLRBUt&GJt 5Z3 @;ĉx&,<HݠQo2ypc$UT@Mrghcn%"2c<'yv;鳻 I^ -XQې+8V CU<_kVMgl_ PJqCQyiM;c:CBipփi//9Ie_tZiJ9P}Yڹam. X=B_%RKkiSXfݑFn5)y5ADRiR[{'0N6b_:|1?W"#:S1'Q
+daCP!7]^.-Iϋr0ΧN`h-= B* ʣ$QSMC0(h, ]ASxe&IPFn
+z#`5铠XzdxޚrxzkmЌ)S 7I`2wS叩*Of#tMk.|i)[`mяZPqiwo[9#ݜs`ޡ-ܣ^,<7h"v+zSwfDqi i( =+n_o~[ªxynr>j/r[~aV՝}
+Suٰat~Z!MNIV6ꔺ7yI4 C(C\eGU`
++݂腀 {Fzt, n\d@c?Ζ`z--DzfZƼ~ O,8I/'ֻr%WΤ_
+RITuGWSz6B76 ;`)&`.+%b (4Ű4/6AJn-
+}F3>Tm!GZ?1`T1z* ',-.eE~ kQ,Eu[zxS#\m0zGem任-c',.ȏ8rTP9OC4;Am#uݭrfgLN
+y;t.UNF:XQdL/N3(#N΂i:KQ4ZbÙf\qqp/^zY.t1ػNTޔ{7bHGli6$Nk!4iP_IK*AkFa-RzG Ó
+¹S%l?<
+ @KY)EHdr~N{X6C) 6 \S
+oa-Xo9G~XPZv{hRβWB0fu,ʱ5͡r\
+O6'lj*}ӿ\sm&֧հ^>I`L{0yߔ?j}=^&,} m;sLHn}`c$(hsOO%Rm.}rO#0"\37 G}|]xN.Ee!Зl''mxr؇S|OAۊw%|Sn BL k
++.En5ƿK=a;V8 ?(1)$m [%i<sc){<0\}murM`!A[PM)4zLl3J#ƓhW0QL5e!7 55a{XƂШa!eZvDNks.c2nm* A*
+fku#vʘ9h 5Yuj!qrEy]~feVW(+vs۫2[ v
+,7z;-S,LEp2ÌN5״<s
+=TuLi]¬4l#@\<~(>6[QS
+>&x78J$dȪOKpv;1Z5>_C$8N
+iWfsZ̒w=K4Tc~tZc4lY aFC?<IU<%
+, r37IJM
+9Oِ75BD1:Y?t!f{@
+لpZhVli}v/& 21WRwn""UBe6 S-(ALi& qXe ErX/vIm
+\&D,f)>;h,]V|~@`# F-̨5s߶綺_QLYCdTE|
+ l>1OTPD[ A>gH㧘
+@sVמ(,U dQ FaD"ռ!@)g/>q!xE7K7(= XPqAgt@== 69=e-m5pVA׎وyv1JBԀvCda~uV(G>'vS..ݒ [Įc]ս]͚-8i\Fti ᜫR(޹fg%;&f+HB(:qɺF2mDE﷒Dh#*57V bߦ,;
+j;o|&p~kǔE2HLшǵ_b-ܡѲƙ-(a)4?j 0;h["s 0mb'+OGe?9fA$t*pB^L!)ދ9!"APN wB.sZ! 6:4ȴ+'QkC$pE5%O* sGYGtE Y#e|weFݳGsyJQzS`՛YD'DV #D [RK~_8u!}<sGPw .iTS@٧ *= G9AZM֒xQ|^;DUc/`4v@,yy;lE#cDL}#&$?I_r1j]lZbDMJ-1Fyhkq _(ZwRmXxocSbH'e^QKzS2y;d pگ_{@\?: v3dy={e?2}F UZwӧ曀Ji{6"+)p4Zwj6rYFq#*ǧdcc0]ZpPM}eZþ:AP(&p`06wP}~8Pv=fUߑo;nT<YSacW"?CK7vm1C0{9~͝7k
+ɞBMo.!d/0u,wRvc
+Yf6Ed+' ǎF ՝XQ?TZ+ff2 Tmv ?FGlUU9x@? 9R_,$`-U4͈~NIgڰvVF`(ԩ
+|Yw6W QvJ"_G6,Y NYHNql3NvYjQY iߍ˸¢
+7$3
+5F( "be~bxx,v
+y;12GQ0j
+gE=*m21F2Qyp&lkz_VH-[Py4ѰB VΧ$'{ <\l=_ VMAI,
+eQ,NP](G;Z!t[D'%.wFю5<םy<KG}"SFG"}@XGЪL͞rXn+r o))R162Ӭڢ J\A%S4➇_RzܐR/jF~5(,$IGn2U,G!LG;ZڀE=qCuQ9|U=7C/O[<qf~7?4R_OZ\hk+_GrJ>H$
+,R*,."/͑%Ghxm`YhXb v18 d[^,5XՂMzIBJ-0X3ҝ.Wx \B LKY!"Zpe &|<o46-bd s !+뀐i8-|g䃵Y2n?~m7|XgBB'$.d J\@Ej{sB/"
+QrqC65br # 0R}pBQd/`,L{*r5%?,(A7 |}-ql/9 ~'E0U"C`IR
+.[DIEݽ\{(hGFq_X4y%Q47ݵdbQ1r xk<4r5wN[N89q ?lyzAg4Ўv' ,mW>zߟTt9txP5ahFA2 wkg֦RI!G]50Uռ|v;K# |PN&X =ÉQ(*7vw
+~zTQr*ids: 4 0\-XݖV.tN."͑A"h?uX"y̖ΐb1+ivw*-kH6։z[ٗˊHBP]1dc"i*Ǡ-v_ ~ ͑6y
+&; iJL,|goL!iqNCwd %v w1 taƧSLԼsNn:ÁQW3jlp%eU[iJkmV&dͱR tlwcU9Sq^DݿL-S(EnL-і!tJxSR{Wj?w!"(tƬx3Ў^:OY
+q*[HO`,$Zsrky(h`m9Y0ěRT;=niu慱ΈldۆTAxLS0
+.#AR͒Y!PQ~od`KJ_7|ii%AK^[
+cP_i@zeM
+ȴF
+ WhK2;JWDIC6RDBqL$O6,8z8)#Wd`|Z{'e  hGOnU
+<vwSi[Iv|0®\1S=yyH)qoeYၓ[/-sM?'-vOe@
+2?_}0Z"-O:cmv
+b^԰<錩qy;<$Y4P=~ۮG4+MR\a=7zz%^k~Εa]soHآ(d?MQي mb(۱>I%R hUy->' 0>n*L&6%2H>5д9GOt Hr *#NN5'9I*eeĨ)M;Nad!M+>=]~0eb=[twU[f
+endstream
+endobj
+11626 0 obj
+<< /Type /FontDescriptor /FontName /HNJOVH+LMMono10-Regular /Flags 4 /FontBBox [ -451 -316 731 1016 ] /Ascent 599 /CapHeight 599 /Descent -222 /ItalicAngle 0 /StemV 69 /XHeight 431 /CharSet( /A /B /C /D /E /F /G /H /I /L /M /N /O /P /R /S /T /U /V /W /X /a /ampersand /asciicircum /asterisk /at /b /backslash /bar /braceleft /braceright /bracketleft /bracketright /c /colon /comma /d /dollar /e /eight /equal /exclam /f /five /four /g /greater /h /hyphen /i /j /k /l /less /m /n /nine /numbersign /o /one /p /parenleft /parenright /period /plus /q /r /s /seven /six /slash /t /three /two /u /underscore /v /w /x /y /z /zero) /FontFile 11627 0 R >>
+endobj
+11629 0 obj
+<< /Length1 1832 /Length2 18448 /Length3 0 /Filter /FlateDecode /Length 19593 >>
+stream
+xڴst\>n8m۶4v5vضmml7V/}οߚ53n^Y!'VR6s0J8ػ330
+j}>ˋ i+33]tv߸Q|2Tsg
+)7I?vR~&}]اkG8_m,]ɕSR[ٻM?]]\
+A9^n
+v@lWEhrRpp37'L,j9=Ǥ4~c]>'.
+Sl
+*rr&no`feo`a
+3 0wpܜ
+^yzG"s -*
+nl3h~50 (Ǿm[x3oC|ϺI [ex]DNJOΥG㛶gP\v{`IoQTNjiZ׏HXoTTeg{@"⭅7^? U=
+Yзsflv1q9W&rVLG2:" ~7zU!<D)E6z.X[]XmOʼ5T؂p,o9؝Ue 5Azd]>Y rmH.*pkOg"Ep26 ,>B!Pth;h .ܐv
+mm׶syg
+%Ĝ|Iiij_xwXB1&8i\wK`{WD[a6l4o&E%J_S8Z6r ZGci<qt?-;
+{PcpK6^X
+_Vs+-Ĺ{FOlOC(c
+:OzG(E_1Zntw HF4JpS \H%R{m GB9fZ(n-Ξljr#9Qe"k~dž|ߑgEy^9=%W
+,TD MwwRtShڍ2!æ_2EPKh:-1R i5 1SnSM "]?4y[q@`e/cSA+Pڑ#
+O)3zELyh3Sy`(}/.wx2)2Q32(1: AF
+m߳]NSJ֙7u-S_8
+1` mMʽR(Og/)I4+9gQe]x0Y Prj#GSv^+ReVZ÷2<© m)4ZEns^RK FSS'PJ_c㙅:)\dt?bX sr >űW"mE +R֒)4SR3C+tsj5q*S
+<RJPQݟ,qV& lN>G>іm"QQJU](w;m,a0Smݪ]DW$B5_|&,+ͻ٭"IM.VtO =vR?擰*-v=2iw6H>p
+,[ZOQK U *RK"ˑkT
+M#Mͬ Cۛm]"G쌻hP wM2?He[̙ < Z
+#VnϤǩ gdiҙt.ĽҥY Gc,ӵw
+iPnMᨹrRue8gprZm_~>^h*2T1oc^V0VSe pL0iPcq Oi-cpXoWO&tPQo!Wi?V$:I<M23֬k>Ց˫G!Kt7-嫸z&n9>sX{ Xqظe3Zwʈs>j2-2fc x:1J@ND%W\b\~9gOu+_?b:_+J-K^z{5 ЋyO}^
+r+eF8SjĀݩZ~1?9Qu̾l:C2L$kYSڜp[$8ԝGo߹ڽT;^AqQRT8ߩqh7Ynn;"AH/Pg\jH `{>\6[BeC XfFoՎN{LdjQ"d_wW;ņ&CJ<pU ZjgwYHZBf31C WDDTҼ[܆y
+bi ?@h`,*ӿЬϿi+s²#<Dزuk=(cc=XwU|kuٰHo9Y7^#/v' O[+|넬q406#$Oo;i @%=ZF)BR8m$up5M#
+V%1d`,1r@xn;bL$iʐwto?P̜s%YIE @yeծQui|GKpϙw>3RԻƟ| >+M+H喑Ͷ.]=Ť 3wSR`Z_2RVގH8c@i"U=m,=#B5e8R0^^*G
+9%B+Qʁ~YmdCy
+k>LwZAuU K7́:k DE
+/Jv9B_Q440?LcAEJ(HJr2]tUT?NH&qeZkE7/nNG:Q Gj"\ SkfKs:}pBvhuf)c]Z3VPq@m'D&d)Hܕn(#3r3N#tI0P;z;6(KO,oZ~bWFPݝ*.
+2,
+.:HϢПsnT R8R*45&nu2F%f ]<wDa^X|bQdWII $RMsD ̢D
+,WR%|Y>E(CJBRn)[B_@aEy΢z%R]2u
+ll* >-N2kkᛅДJcw L7lɒJvJ:B C 0?#oе'uy}
+pĩ#J<B׸0*_kv4ϥp;ALl6
+iR2dѮ:?u;kjrb
+cb2I4"CF/Z2$δj`.3wS0Fcϟm1uwə+j쭑F*D:gVڵIMFW"dk?TՔ+ƪ%wp*ZǴWޞdPLu'erFITVA]rY .ln7) |kf\s8! 넓~vd5$s CTۡu3.P0ypTAO8?z /+*A '%1}%'s%\mR(@}W(i?y$>y&Y/Wn 9!/s~Hܴ!3( /n\p\~!*}ilnۺG]Эn_ m22ūVX>58E,\=aYcKArt#ᒧ$`ݹfvI3ϏeIo^.)t؃A[Œ|VGt~
+jP<jig,:SroۘmMI)? ~H ,/.ICԃ}S5ƅ]d$<gܯsS[kK;/{m5ccՊSc&
+ewG>t?$
+
+&,Q%)ɽb.uNM%+IFQ,|$c2Њ!P<Z[E.]; k'݁^*Lzֆ6ݫUkhJ “ T/8D]j'+fsl(lnoz׹,^}zy(){^K#ՆDl8Q6XW?U.M,6qkt/h 1@#,"yIUGXkp0Q[!"6$ nA nCô}f
+z>T
+7e&pc&&1siP2/A[Q`UδWNt$5̍2EJg—O5q:Gm3:t):`fZ@
+հzn][n[?:L1{Ǔ'2O,Y:ct4<Ӌ}J{R[ն @V``Ĉ|h5vrdQ0L i=1Ate&VTH(jURE mGWӠ{pwY\\QTN\Σ0iE1= ri@\@'^*b v=z'"lM>Bټ/g'F {oRpI$?@gTg,~%<Ԯfm!~5jWвd9"ǔBpn;5@\k@
+5%Ecy _U3)կaIaw7{hk^YRJ
+?&F;/?HX)(.yFC~22A`LUsժf>T .1P1^"Vs%bUK !4?NTpɵd$,!~g-QvRe<v5ZsuhcHS4FUWF84JdY,#lKכޛSY!crP5S ncnR$,WusDKk'R G`􆷋A3Uj
+7B^OU
+gMuFDRHqd3ao:/CX; HT/`ʦ6aG Kpv[R}QnyFpVcZOzD:0g]m94Y0_c3
+ύJJG316!cu8ľB(mpRy KT<0"f]A`7|Lm՘t" ٱW~.ٲ&Q̚YJhj :&9Pƃ@*jrnnp
+Molh!žPy{ct>FU=nmj 7M`W%?3/4?t`$!G^TdmpRqi=%
+"ᾣVb ڜ 7ʰ䇛?Ҙ]NV+עaARHp>dx)[gn<'ۈ$"6L8˃$-Z^>SG-A~|ISLӨRAŕ!a?<`'lFRq/MpUS,%NDkW }ǩ >+'Py
+ $C_6
+:tucrƐJt;#BWn1%W>r 9Pp+
+R.7X$2ڋhlԽBЩ7
+G?ag8{`^~!
+|!
+/A65UpcS@򙸭Hۇ>R2Hzl2S8ZqL)k_,AΎNSBHhHqҫHPhÂǛ4c/AgwTmnO7}~!|?6haH %7Ep_X:@w܊.N$2i}GQ?]P8]G6tTM?lhq91ռRh)h:9
+oeTH|WیcmŚf0%9 ġ8HJ2S=;Y3DI)8A<R %Z)g>(_Zb+u@su h66P<0E Ձ;-l4%/%0̸zjU+{b~yS2rAe^<U߂y5x9 =#u݂SVl {E7 ޫElmr>zļ&1mdOԸ z>:ͰQj
+sSVsm^ ;I*jUGTu(bvMNv:mfR[B[nT錙1,
+0_|^x^}ZTѤ(5^*jt3Z  -,q& +wĹXEҬmTF[LIHB[-͗ݒ5s5X`ObptPoT7(1^5p-awg!A~1K^0g|kc
+_
+PwRi@`7S{_y@?M
+H"SŐBH {//r}aG^EO<ꅜ㱎΁en0-~{} /{娸>S277sh:Hq~!pG鮢V;(bG7=PYG\3ENU/3DBpʌ]??{+UAI=/֨]>vL-%e(DCLwc
+sMgs(iKgShccwӥnwe ;^q ϓr ZZ2 ZxL<' ,rQXM ʢG>yԤ(÷Z EEcx$O"=f'E6E5EѪ")dRֿk<.; !`P[o{hNJ)lfx%1<rڬp*c27)[eLe Rnshf͐[8@o @,u2vۣ<
+E.Z(rx@4 @ӳlK)Gx8wJVR@ph~HsջduII|ƼCcxM/0j7R,,Ƿ՝p|V|ctdTb*bc/ežʟ2f _Ye _fך
+Gbr2_Jtt:~Sؐj
+ۚ?뱺-"%Թ/5-)vZ YR KUTa35~Oۺ- :U?VQEԾU%HQБݙ&5\#9P wGM?-~*$|R$XON>oPF]{#Nx.$ GxGnD=Z
+DXˬS.•rݦk[H-Kџ.A-Qna_>~7SUE2"W$ *>݁ꘛwOW+OYI7s
+]j̵:^?6C}5usCb"kwn(շJ$_B "{roη _6.];%c<9vq. \TM"*^!\6=71 "75޾^Аt<Z4-ݚءEfr-ϭ71XE \ y&atId
+9z?M
+;%Zz ftUcW }ܰb/v5 ۘ4ˈ!m<cz:fRcicCuѫU7R
+ 9=6}Ah` ql> em{Y4=\rHu~a?Z* X?C;9|jvw0\traDL=:̏˙9d˫#0dLldU5@tL%Vu
+l
+[2s˒Z
+N#,#4m&z
+lBl,j#9>Otd=P)u9$=` ;\XG35utN Ih+ `.lZWt5 Ri$cܲª/ױ)"prsGA=dQv4w
+N3(P8քdl9S{s 1ܰ5݂GͥEyg{$EgCiHjӴ~&F9~B.m{7f]WwX>oU
+ij<P:'>M Kܫ$2Rv6hW=0@3c}T|LKc؍Sa31>pH|$_#;80;}G L|e W >qN |C(>$)c̚߉"βNep] JvQ_cI/!]";̟-P岝QQ_7:;@ƑqvΒ' .#9Õi#rn{&XY&dȈmXEM+d93H+) M?R؉ 2˅녱|UYl}
+|x!XrqYgTf^M1{q#Wiʾ} \_RR NwM#KWL ѰDPAsD67CEM@
+ 6)<I4w[+rڥ0\  mꮚh= aNTq:PPĵ@VZpMx{j'Vw >R
+!j nЁyFV+G 8El)OkB:!$3SfbMLDBK2q^&1{Jki`'69ej꘢
+endstream
+endobj
+11628 0 obj
+<< /Type /FontDescriptor /FontName /NRLLYV+LMMono12-Regular /Flags 4 /FontBBox [ -444 -311 715 1019 ] /Ascent 618 /CapHeight 618 /Descent -222 /ItalicAngle 0 /StemV 65 /XHeight 431 /CharSet( /a /at /d /f /g /i /n /o /p /period /r /t /w /y) /FontFile 11629 0 R >>
+endobj
+11631 0 obj
+<< /Length1 2277 /Length2 23448 /Length3 0 /Filter /FlateDecode /Length 24809 >>
+stream
+xڴeX
+-8o܂Cи݂d;gr޿nRvzɈi A@Q= -='@ZFdbQ
+гskF[7
+n%iJ7kHں#Tq4 v(n/{ź b^zcNv,t+^+U MQb0KLwt}SvEf@4 B*ge[+jdD+^\38x̎o<DbyFm Fv2 i?1P98/ρupTp%ŕC}D#Q0g-#?]qHSt3Ʃѡ Xjj.
+ sJ)b@"Sr
+"ኲ#Bz\x iz8bSuȰIH|L[qVP,TAxEC?ouUs\jYPHKD~
+4w$0fd٭ڽr9mԬ c3z |G3+D169-hZ!#po1CJ#$-.c>Z<F"`}Yt$7nk~W0=Put ^f/ @FF*hu>:EӺ+p|1:I5dV`C}O)nDAG|Վj;z.qm/96 !_G04fpm .7Mc\h}!<D4ˈwhOk4ȍxL
+s9BC͙V2ġ§I=
+V&qV62RPH6pqKvH6P
+ͣ"nZ.HuY[L8ۖ{~U`O_W ggjG3[0z }6''% XނJM>M?0J
+m&?ړ%>EFH ʯꙊ$<3!T(sg9~T
+p<)ޓev:IwL0A\5!%JN}N>Lna7sŎ֚^|a)~hut1D">8<2:qP'PUTx;߳J IӪi?&Koahr:tS!ywaMDugc‡ty$^ $~(ly/=&X:ZtN%A%monJIdi~C x$Ԯtᆵ09p!9J
+9ZnrKWYɁk
+KTbNmLg#xCFVYXwǨ+W
+a=3ԃû%9d+ϫ b S2c]MN,bz"l]$;Lb2_ Mzj\*WG8
+>
+|%rO`J?BA?64e|d>;
+ì/,Jݨҵ؁U|aqşѻDDigF’e{*7 (.{02Askw -+책oi3*cvuV&;'rT) =[sRÔ3M]B=Y$(nŒ| $
+y.0%ʢ6()NdaaFTm
+鴿¨$eh.w.}[-K2+2f2A7~f˚ qo晫n×-,F݁K1
+6Ȩg4;Xn(*d=fm ћ|l%V/v`ܨ}gbi)(^V=Js)gci#+ޖ8-JV/S%% ج=ރ!j8phm X'b)~uD Ć^D>)FY^EwH}>uX
+D?">D-|.E1]<a7 TӜ 6ߍ}UL@!6tD-w:M$bQ|獮%rd62i4BTʎ Fi4huOXgpNw<_K
+ry'W>yk0P|W%Vl]\p.ȍIjӔ%OF&ތLqcceB0;p^j>"B-6%:EK9/;5`&I{<k7 <xOڄeR+rp]7|" ړ<G~{$ϣ]40jz(g`#
+O،OGf oUlBU.qw24ICOs2.Qok p XĦU^Micr`A
+3޷T`k?:h5<鵩 K=ebay 4](/9Q.^M0Z܅܄y[d]r6ɋଙ!]r*.ʗdƎ& ̧{5ϙ#"f*ߏ*Gg5Y/='<B^)>Z@ ESA$x
+{$2K4^ٜQDcLFt/1:TSzM0 oiFVR$'EC"$q^bh, c}印[RUfFt}erwmNd&תH2mja&% $_ű)wrzӍy|I؋O'K%4Xdhd VzP>Fx`ce:׮Ug7wM8L9Zmi 1 JG~V4 |hŦRq1(٧mI7SȮo,=+SmWy\"ؼX{*`Zl} $\#pTK/
+gq- LXK_G?]RaS BT.uҳoBLQCD+H18 \@H:7IQFȲda#F/re#ߒel.IriE{iz>Qݙd$P64[=${K P;)xܵ[nJX VMUZq!p[5G9_f39Ӱlf6Ebխ)CBsiMj?4M, {`:*iF=rhu#1.I9/Z$`&N3xǹX%:*|GDZ@gC nid|\u.s[Zh[|c+~W.jYK9)6K/-[uS 5D?yOqkrQIf}Re1bQ[+.OUv][vG*Oic}u=L4be=˥z
+"A/*)fH%<ezP +{ď訡KnlC7]J`h&19y(҃&Т(÷OZe<fk*t Uv5m.J4 A޸2~D:?EH5#~P ݞS^u ],G[w/>B<@?ϭVc9G=xeRF@nzB<kH48"K<)>T߯
+h3TgkӻDM~| 3q|LD/ާHfC3_
+ _-Ǽ8ricծ=g2nqzUS{
+*qr'Y:,w|FBDNJ&:VߏӦ\JAH0pfͯ"](y ^Ԥ'YAdM?|U̝GG?x8C\hj2"vIkSquCܫav~mFu$IYy6~a4Q- rx *UiRV#eSK1(3|ӉnwbL1a˿a(,$mN]6ihr}֏Xːn.k-O dI2C?r`K~w/KYO#;IwyNb}Et3T
+.Eΐ Xya6_l0⏬iKo~ѣ>0ȻPqX!B޾#3: FPt>3g0k& @z\`m"P^6|A"(dى/pͱ zu8z$ciTuW`Dz7QĽ_g@$mlJ\FnNvvCptS3a)T \aS3&)R}jC{ ?}%+dVq&ǧ[u>c|h*<1a菒f'ɣvj}ʻqS}.qzN}c6TJ{4&\u8(2Aˏl NzN|~iYzU~R|ޮO+3噢>IȈu>t̗/A0:eĝɡn"[.*֦!_䏟Z` Y.LT#&x/-6K3Qx7+y "~eX%
+y{4ȓ }!xEkxB`4R!_+:A;_O
+9gBWF!@aQ-yv70[`vn7@_d5NDّ?_'} <LB~ TDAoRƼAÞV>lYYRguy@X= I f5
+S~Tcz-Xw:*2YHe{ys%^X012vD%)42tU69f8&ŝxEi(U1/H-!WLEZl9hˀ![#ȫ_ثI'z'Ԁ>|:{&f.kkVMӌ !w2hT(礊ڢeݠ3stM,#pSι:7nm ֱܱ?c@Fh_%Nnr:)򌊅݃e cKcȏrX/7
+_ ;ko$J^
+
+ AK.u P7yf !wۏZ}Q
+F}RhUV|ѼeJY-/*JUNTW?W8W=ؐOґMC}0(p"#PnѻK
+}=(e6f )KfPI|DI̟Ue#?Nj{FNsk(8Oswg+`C']VR~,$ZMA{;ݗQTy ;2S(K$7#*[| 2͘ (
+öN. AAj7fKg`e卑8`>ѦJYÉ'ڼ `s^}FMٹHIpIJ8jG
+9]q
+^я2MŘPZ6 wF( U8>ohYuP&, ҂$Dt]G-8XVp%8Dd0"vӈ uׅ5d;]9 ~pfxB8=LylUD,@"/ k܊FN/k<bq
+0e*yBمJ:MmV\bW51 v<٣Cl#0 P
+/_`IO{m^w̜Q'$\ec(j\A;պA#03
+z)*EzP0-vhSj \saM*_H<j'DIsn=-K;T:^MF Jոr O(DA:B?EM#CXN!q748l20," }T9>FRC
+m $)@`3zZ
+Y쨵V :K{N?}*<f"; $~\> Gc!}<T,cHYuԛ5H͇1B;"2I. qi8ȟQJ0660xѻd̺ξ3TǾdr̀sGM
+=[w nmM<!w<|fi:m}$.|cKzxZ7W+S
+ufjl`.;XʐޙAxKM0=(xxCNhvS[N}@
+a!4͠nŠj>7rHBZ|O@Y)2Huz>,5E <I\5!=:6QE00C!Aͷ1b1ND :űzklMFm۵B*&9upX`p8 `ħX[F(yf kΒ_\8k3m譓_ L."6H_FĸG%p3]pB͒"{ApnKb]WDۑSt'w=6m_h%N[_26Wܢ̷MCߙefI]߆_(ޖxJiVCs<ؿ>[@ lQa=2B8'νn΋uaE-M?<B"pok{yENBʆ?+I0IʉBv\+wLH8D:l9`ۮ NܭB}ŕkbgY_W\
+1M3$-0JG{8$].b4X19-nVќ\/Äw._s=GLwTZ4ohٯ} -^XvS6/`:< dFE/zvs5FlΔO~ 
+dB_CU_.;bD"K?!KXf=zw֥u T7ו^5/˾4/߃ᥑaSv,Ձ*el]1V5hӰr[B:@xm.ˊ_2D|N_sc6ZP+#hm`gD J'"⺣ʺ 3ދ$<)c "_iX/%^F尿geŒ2:Gn
+]O=,XK+ 2>QIųsp5
+d҇tm\V66fLniw&'V[g8|z}EO9Mx, nm'2}%tnV@elEcx3HEy%.+7CuYVY~*}7ؓykHNdQoE-~A2TVעbUqN(gi>T;@[D'}x2J%Iۛ$GboJ-p9P&c .mD tW>xE
+q[#?`u:!뉫;:{ s\l']4Զ0UmGl&mF}~7蠘~Ÿ&
+:"6L}tK̟#ԋ҆U@\sB&lg< #T}0eCp㓽z]VH-*la0n
+>wǐn3YRKe3\{9A2SkJbͲ
+AuDG>?\. {ӯ8i
+$okEv_"jf,0Wo*:~oj
+
+O{sk6z̰U?47^9,`I
+O?z{Qf90h"d!F\H7K3 Ֆ#KUFLJU rYs֗cvB^3]XdzE)[M{x\aV6yL{hZ
+}91nџa/h|fA__5͡&}㛱̫xY5z(D!c ^lL1`Fexw~+LtfEr(F
+>$ӫX) (!ߎT ;*C-)F0N'˦MW|)i[x,pj q5Ip0!ْnٍ`yV2dO_[%M_}nL =
+o KuZZ͆K4y Dڣ8ܟ<lv#[X>9yb\6[x0B뉉?c;}>PbQ&=X
+U7*@kU޸p
+` }66UV@{Y}ьZj98Mh<?PC(WrbO 1ųJb=NN97#vRTM346tҌ|$x7\g(ִq.g f"O"Hƚ"]yQih,/S&#,BFv %ĩ`P2Wбö\^."?S(L'Sƽ'Ԓj_'+
+ܑӸSZa7ۼhAcjz_R([[y+.܄.1u6jD P LYKga`Eيefˑw
+h̝J~שn[3&BӘ b^|#
+% Xgoa~$1@ G+ܴ&u{ ctO=s-,`?%ϏsC=
+X<\#3p[țIh lS,/"u{fc%ZK|I!w+Q1cW,ǐ]! 5Ybp!lKX*.J'$rW11&?KꑹVeѭI@F-ԈRKx{N
+ᥜvXbys]6D:)GH#\ &]ͥ}%@tb]VUc\-Ć*bh0Dx<5zFZE+6QiqyZ&y *f&e8qYCMM̄17q탣^ǚB/%YpURj4؊U9&yU*]O\FMdzVbP R@6\ kU18lz_g>f&2NƨZ9d7`9zm/NN˩ U_.ߦH78(pW#R_5'1_/fFi]|1LMNXg ^bӣJۈ }3
+bnna ti9"F~eB'(nHLp0C$_$1nes#$\g1a;{|Cy|)$BLDKoV&RKc47j>/ܘl146vW_!CK #]FdRT YO˜58xe8 ڝƷ_]XLB4gpEk;5%:<3G0,0vCfw}Vmm$ E{/lpX ;UյeV`aܚ x<„'Q>&9c$!Nx9:T!C떁 PdOO[`T/;;a8o:퐡I7OG{"PO
+5yL1
+cm.@WQ,^l֟f{z7URM"X6MrlZ0mCќBtm]؃@KW~
+ y4앧@D ҡbCKpK"3k:)qgzo4P ?qHq_X+NW[;
+js1J9
+U;(3UIipPLeb.ߨ}&X<^(:)Ԟ~~% @H, o"Qg zNnypWN~rT@Lt_GJ!'YTZ r 
+ J ;\cI ^v~~i$
+k hs=1m#k|\R<.By;?vԮ:j{f!5߅Zk!m;lApl + 4gkG'KdNoY|˽,[
+S5Fg--E%C5qGƧ"JV9/UxI2R$'MD٢!)kB2s /;US^ Z1*IC)4[+/g,І,#6_W=vjٶ I
+7(Ui0Eǧn/y<l֧
+#;!WH@K8u aH2Ǐ*ji5(z9vljszI\9>'[fPCA_94T 2
+l C* ҈pUeGQ1e&
+q݀5%wxbVM [V.T~VH21I*eoőb=9Їy#^jfˌX_>רxos;1DA!6%b-&qI?9Q[vz ]9duFJhExR4=80Xu@S
+tFՆI0jۤyAn
+hs8 zX
+uö9M #ymsO:ᛗ$x ֧T/ ҂۶
+l]/.'**nƛa8w0r
+Sibh#wBrרs4.%zl']\DMZ/.%DL&nPlx)w;Ħ_8*j$ݫ*ύg>z05
+x!Sutx\ klN =b||ͩAN]4PUtndny7S8Pӓ`y=ڮ!?
+U<|Uk-KW
+u)E
+rr<X̸%D:g?T uuoiԭ )Byj07h_R,Xka2l%+4%&̙G !zzCcfa?T/PnɥlR[4(伐ȥzA)KI@
+8--#^4 .Y C񩐲T< GnRӋ;3)LO.Gsv
+endstream
+endobj
+11630 0 obj
+<< /Type /FontDescriptor /FontName /REBVUK+LMMono8-Regular /Flags 4 /FontBBox [ -456 -320 743 1014 ] /Ascent 601 /CapHeight 601 /Descent -222 /ItalicAngle 0 /StemV 76 /XHeight 431 /CharSet( /A /C /a /at /b /backslash /braceleft /braceright /bracketleft /bracketright /c /colon /comma /d /e /f /five /g /h /hyphen /i /k /l /m /n /o /p /period /q /r /s /t /u /underscore /v /w /x /y /z /zero) /FontFile 11631 0 R >>
+endobj
+11633 0 obj
+<< /Length1 3171 /Length2 30435 /Length3 0 /Filter /FlateDecode /Length 32180 >>
+stream
+xڴuX[
+HwHfnSR@JB:$ss><Ę5k]
+pZ]^DJ4 vZ
+rbX:<|_fK _[92k:8e% 6!Y],
+$A6V
+.w VhotcO9E\l</;V0oZNZ? p ߧրn3 .zgp%o%[ӿ3mch
+~x곀o`;~2Kbb OFTer|jK 
+LK̚mPPVH&*0Bʏ0<&2kӛEVr]oZ⧪n:b Eu]%⬏ˌIt%Ζ5џY
+?ID@MPozMtݲ{5,%řϱIu(WoDЖ YW]K(>fV
+y6+Yƪ9ʎM#WFiF`pTGVct}89QWn⪟Q~vyi߮]{C69Jy8-tm<-X!)黩)!' q()LAhK<lt[u_cz_62?L-^b'W_ qpo͖1׎O_lRhm w5zu9lߎ9Ҙ(m`+<΍8ߟEOUӷ
+~R}W(ﻥeBl=E- 7:+: |м]|xK-JOK4| d:5z":ptU 'RUog$^G=ĝ0+#~<H =CD vǭu܃Q쓯8! ţVH%^{rwo
+I >zw
+VT~t_,;|&Él6L{94ar/Z1Ϩ(]_Z"'>Mxd{ x@^y}Z1,ҐBzU+P%d>+<Yk#IPK@B0KKy>̤Bp!Us(D晿j6HSLlH{|]6Sދ 8M ?L'Y'^}37(&2/09K)<`z&,-\I_dEr1.cGFCIb][^|>fMVwKR'KK뵓ўWD; 0V>Ҽ޳U6o*}J(
+aDzSs?mIgqܜd׾ Bgs\Lr4-1 jEP}Nm_mU@譛EvTj/VƉӬ|%"f/)btt8[d
+-6&7_}2QeBSi'apQC^[OT
+1utq< oph~8Ә؂GPAo.|Sؽ0Pōx-q#JGtz8ԄԤK\HB~ښ`MP&sх*HR\@D1g'$ƕgb#<\NL )k="hy?& _5]Gt%&Q %9.ӵ) _OWQ)/l"Z)tW[;{S%Cn my8 %>:rMwHU !_iYOn*+;4v8a= GwI޾>f޵mSjn* OLq&ErҪG};@(Yz ˁKiړ  PD\)
+eHُ>L|M4.w5Z)umEo{%>q }"<"0p4,i^v uEspM:k{^\_)+ )4T7h~%j"^7iϩ1\VN=fA eXu_7(W3pgɱ &
+z7h_[вNVm{P9
+fsٟƤxZm +@f(
+ F3.z]*nvOe[ĹdB(^.smowK6 -En cOn_y/FpeަEgϊ!:(;Aw@b Ļ'ckzө7dgOuȽLRomrd|\ǿs|JoHcҺnJ+"-y XMFfML};ҝ/
+ȝFt7 5!ZBy
+R32Arr8=5:ӡ^"ȇ)Ď[b)n]C4%Է5RE
+→ڕm]nYVguOW(xn+l6X'Zn ;\0W FG Apjm/ `z"ʋuF}Cdo8mp# %ҥ8|_I Xv~
+F mGKa uYxA`C6Uȣ5
+6O.N !ĵjFF>L}:b2V3Q{b\ogNK)mK.`a7}>}^/SewM^Ƶ#
+z~2쇋ֲm4vuy# ꋶtFdm Dgo!BFӑ0A˿AqMS?>XZ[(`"\cvC:?hr6:Znz\ }K! CY8-c0.M]3?@#qAg*:4檎ͪIW灛$O=X%@MV4`w(J*ɲv`p'QY~.cAJB6gIl:v(hBifRTE{QVJFԞJP]4T}6ݴV9$3 !i_14v$.O?lhXYѢ?YZ̃4tbLDRLEͶP@eK, j1wê+-"lp^ƙ?Hv=P:8@ڦn#bySO7MQ0<Ms֞8%! \+J
+a fOY Ƙ4
+,;+ ދ}3Qm6}z/"*-9.@y$\~$帔2A59B&LFCQ{`&Og}&X;Ҙ5QZHBeܛq*WpRU3 ފ)Pj7{blQ^+ Kotfe3 ΐΟ»
+YI#K6ӏ[1&w?,Q5
+)CE'u"b`!$>]>q&K'hqӰ>T<p>yUvs٪ oB[eD_MII8O r '^>)5h֢i>%bNuLά;A<GI$]ȏ6>z?cXM5Cs%! 7Ⱦ}S,k/k( wOܡߘ,v4uQDpG꾕UW#8EHx#9PVB bڱw & YH}cAEH3u;lG{QiOxJ¯K|<=Y
+$"4p.?)Ksð6GHmѪV;:ң 'iˏJOtݜb̻)rٜ"wfm a*$vل_&abx}GܕD|cJ6NIJ(?zuAQG;)D6!qYEl4NtE +~i|@A
+X҇s.Q: в:T&:Ъ<0;8Gc.VG3g.Aq!R}#֓w; 9oS۾„gb_~R[nB59IێgO\N8qRfo ^7 Q^ǨHov<iZ m uhv٪./+}2
+.45";{ k^<0p9hv_PxB-8jYN  >),ҳ1#nh}zX:Z1$\VF2lȕ6΢ѺFIk FCQoĐi`]D߯XpZoYQǷy-i^[;q|q
+0_St*t%1^Tw˒Hg-|QQv Ezƪ}p&m̍C陜">|;ѫg70:<.+g "OjU?ٍN~ mpW \9L
+k؂c{ &?# 6 6譐
+gGdCvjLF5OTʓ̵k%\.c]e@&~<ewwǛx@)DX\L6KG?SЫu%QGGeF&{8erṷ̋ ~&'B g/Dg|{OV! j-Sl:drD/y6v#Q^y"!f>@Ao`9"$\cA:1Qţ{5@l(Ԙ=~n/yQ[
+,kNm=8e}ML0涪ۻ
+BаL'h¬TCi7B˽SY%,R'F7~NzfT2
+|OFUfcHOdJ `7/:m)d{zNm$ cXY"e~ 'rv;~K734l!5hiLd޴bNF)l*"2QCG@(2NlfhZ-)ZǪMT*a˝֟PLj9c׆o Vo:wdžݞ2wi}0IL}BN:ҺLy܄ m: 3 .PJ* Rl>o3?i?ǦJލ"aW+zTLjLG/ӷ At 0v:y Hl̋ 5(ԟs%W\S9x3 D\ `nVXޢ4/7W! NdvҌ&^-kn*,A`K;k82}gfwt&,˴ß)JjPۗ^sR|ҋn$}Wii,
+_hCP];P
+'pD79d~?0%="3q3uMu [qͩ:R5dȆ c1amR*h\#|uZV/Wՠ}iG( ,iSQ_DdӁSVLpCLF>9ٟf$f)ˮfݫ )ose =۽0yG!vze&H C*pœIVJ|9~x gB)iF
+fI3J R s47՚&W< .|MOY6O˥8`%18jOW]OPƃxdQ* šZQLH>5㴂%)S-ɝ{m@U B P4S CP`w߷n 9,5JIԢ M#䡎P;=Q8L-3B2Ugf]hBlb?}`(oJucA/VvW, bk[4&-YLpHeFzu(un]Im
+$!@:J`ڨ7ѦkP-a<Ą{9]v߹0iecbб`\M.4p'v!bCv:|sګd}` q03O'Sv"jcHrZo0+z0l` }+{yE0_Y2wbsXw ;Ln~S<
+D%gh*&R:
+>ٰkKsfFT!Z7Ҙ2~B۸K#a%ALz<z7ő$?j8 7 P L'`ZC`}#MJPciĪ64v#{x(W]ä1LnT+l ڍsPxQVAQS@F!,7# Eq7`0m_*h A;*;o>),o>F `w`*6RR0qE9As{ A6ecIPgޥ#Y)G1WUo~୔9{E ͺ6d/q^TdI|'VRQ%PH%*םЖЗˢwo,6<^?1
+@=9%TE6 gEnSՓY|R6h2t >eѧZ6tL"Ļ60}#t4h#k>ޕEh)}ɡ:z悂h t'^~zJيDɗz[XXUBoᘺP&"ekf }(2IoX.d3k>"z^4|,HKj!BG;zx~{W9WAjYzA~4)
+2*6^"%/9ДP?1%IJD2iQnXa։~4V{t_\Ji pRWHE:Mue?nl%ԉƋzEIFsfV?da6U(; z;ؑoV~اC&4aq
+1jlà0 B$T1 J#uM,$kݲ3}#@3Z2'Eyź
+O_o^%OR;.KAlA|q7;>-lNQF=o6ڬoBU9!pd4<XE^5/t/Ŀ.>{2n$Xk
+/׸AD촇0,j#Vǜ`rqz&7d\<TyXc
+ y9 'b;~8W:8 *2P6NZyYO70|o6Oܵ'_ETڔm^ iY0LIvip+fQ
+C:e ;o)5M@qZǰnWaԶS5t| on _> : T5ZSL7}mDcBgv|E)9]#ͽDRn:c#6ۊ9'W(ޣ
+斳$V(oY4]ҔN=Yo_"KeOuy:+„ALEkԧ#tMVgXy>cF`C<JJwzh%Yc vV掊:dxnN)e@#[r}Ӫ'Yc7oDP=FHR닲B7O$\u҃Mh(q͈Y$<"A;b2-qдXq1F~oI;
+ʩ?0!|>Hc؋BPAA-B}z#^jyR+سuw*S>j' ?{$~p'VP"K%U+p$7ITٳWt'㠖9Y(!r^&7h1dp"rY K"gO
+Ň VHU5BYtPݾ.`,yirXmn{֫[][|=(RO<%ȹkALqB.;P\G-! &ei+/Ց'<0ZqMePV^3aYB{=v$ )
+?Fj.0SN%F2=/^fL`s*ϣĐ|pt7J<SC"_JN*zrjO䨊&gbnkۗ[gY]8sWǷ\s@FvDGW<%!xc0xOͯJ
+\ ge'; 勺6*.N+<q| ]$u@itğGLN-GñDN#UfY"]| Hԓ}dΝȄʓI`@ Ϯ;LJjZ.M|_|C :>fe I&%O˺)iwQ6K4>
+yg[O=SgBYT黴°o?C'juliudd
+ƗwMVOCEpR#hƸ& t܊
+Y %S7a¤#DwÛ  Jإ `cyrA,S8'+4vf#t
+[|1-hĵK#|Uw C>` GL#ҳ5nf78ޏt "33p- 4P돀qѐ\lhNąN㦝}_ F x>-t 0'*_,S)%?=.)өg\b.,[Kmn*W3$xr0}8^
+Үݥ)ig Hm̓k;6Yjy`2ʮ}!>l?PhoquLv:xd`B鎰Dg*IBs-BК}Ye@@?gtWR<Ll[Ǩib®47 uȆwgڭ#rU.3+1>!@lqv>N/QjPݝQW,]ܘ6R̖m,Q+5ȦX(hurC7Mch
+л=Q8*+c?juE0! @x@-ޠK WzMPޓaY4D1lp7(&Zr l bHҬK.#ў((&%0e3A?if/ϟ'~)k,Aq2z[5@INaIisDJZӻ^1沾uW=lRcJ6Ws2zF'6I߸`]ujZ m/(rr&\k>Ƥ܇eC+I֊kL*5i&=9mSz*.jB`FTpH#^l^<3C\vέ[>z\ʬspףan*=#7\8)[QԤbIB׍=Kì+^G$4G vV o('Lތx:/rwNJqZ˚L:ۼ:vw<ڀMy76Mpw21Hei.(⤙,$tJE $i?u3Km_:W{w\sZyf@-L3V~O7ujP&+U !2t>¼$9𵻿",Ԛ2S:qqZF!1%G9\"X0g#{sc1[q=Y^<w2
+9 o@Sco+H%yBgIKx}}Vdz^r h`.ߔn.w0{+-1wq]V;pFVߙy?qwX3Fe֌f(=+r5E Up^L
+b"_%s:M,DPwi*b6l4 eةh~?d5&ziNEPބz-9 /Zs=䠽;Յ?H6AhK"y g䍌Ká\ 5/]5Fi 2@gETx3>̳R]ElpНTD:*N _ypD4| .:ЮbV=/ uU>RnCf6Sτݾ
+KmcwJv9 v`YҿF ;R|l%!z%گSU]\!v/:{A& ` z19QXo ڼ_JsAOff
+kYu
+@cSLuX#d !7hX>̾o2 ڝ+CDI$`,|ׁ 9`lϺ<wUFL?]a|[ NYj
+(F)6ܫ2UP%B4pӰRi*_/[,sw"Moxz(Z $g6*%i2?nVJ
+ |+4mDJ̄s"-Z̝h؟2>˷D\"TDċƙlhwN񉲄^yy%փڌIvB7A
+7|.R}<Y0\z*xpbKG*g9H;n?sj]w[FLG;vR+\-fsFw! (`ejH_/!_"^CWy`ܴ̙ .S y4}^Xg."|jBT @icy/3me"qju[ :6XWOLclK.C8-P/`ti`2\Bz2{O]oa N]CnN&"=Ȥ69R˦j,`JQxG0:̦yۢNe<AFO‹/%E&SuX :U 3ux33C}ث@JRf^3\|3N@]+?HD6CcX*X?<=;\ Mq&*M64Pl 1-_q "m=> AsȆ
+&fV-Xza0#niN0Fmg.+8!(0}3F0D34tZ.HY/11o<!weNI,_T-gM5)-+|ttR FT
+fMQ@]ȨNA\+-HG86dXU/h>Z
+;dh oQ>ޏB'PZbo b
+qc>+̀Yѹ#Q-_;~]gIVU (G.D4sSv 5q-žThFzd$1;^-Yvʞ [:f UZQʙdlf_Q`2/]H
+2"2HQ}yT7Y "5+`ϛ O·0P 86*i#Y+γeaw)D. |{gOp~E )Ơ[,Bth8^=S盽*C#2+4(.?وfA~\8
+k< rf31ttV%žasv24֎ׂlO͡#;->E)ƪfYVX]:+[U$0WTZi;gL
+n]'HYd {ݻEiŇR(("懞[ˇS/jH‘spʈҼyF? n :JylKw-:hGWLD`Bԛctx\MmbyI-K\ %)^A˱BKlQmxhjHr6LW.dнx=L0 I87]^/Ì&eģ Yq]$&eT31Y |&ZfͶ˞8,(E
+-;}VC]Gw`/s-ڷb}#ŀ7#1mMf2/.:<G,Cu&hRuPh_v @pr)[?BDF=v[4oTlzYeеh>%A=}H_[xV,πK
+ a$6aDe<9]hl~ʜ78jH︲,".I_5ҪڲJڣ H}nrP"*vulqUj;omI_{4)e5ÒUNMmb1ӯuA(18ufB4?-"ީwzt#O`<cKCl<@_ 0hfbS)n23jP \ӓ`CgNCSK$1V)_,@Y (`kXx~ʔ}IonnJ\/d_IՄˢbC$.cJϣm]ظnѴcay%t(!>:bܫ.eK-s(=8
+'g58ÅL?)
+{glQ
+AKbL#Q~H}a oDd7m jp9BU _
+7X lm^x5mn [QJS-w3졠,+IK1\#}#^W.N/-oYvڰL=ɇ-ɻ7 ̣$(D%3ÐGBh]ˣlW>rT;,6"=1Q>3uY,+QCL7a]EEսeρ塦͟ĉ FQ{z(<$ݿ"*`W -D\sS?c/O?P!(EL0a>*s|!Cj[̠I96<׍r}Cx&Q!ܠ&,u&;ڐ,*[c߫z&3ku `XP!!-3 ;֛aPmsOA~.:G.^mԾ)VH!JK%!@*z/wn]#{O9SNb`Q,x_n UkrVw\]|T&$ >ٵUܛ)1+n&)l&Mx<"r.9wZDVEuP™Ӡv#!ͲXFE7?di[U^(0d?ڎlcؽ'?Լ]%K{dY%)|𗾻
+-sTĞЭxZ
+k VMs1n}ld\fC PH`'dr߅%Tjl̏/۹4AѬKf<0#8f]tta|Q7]ծdF/C}T$heM#oLso>iLAHҒ pv6f:GH8WbKbցXA&,mA3u[5M<-Yv&R?NUFKϷ!s2brUNDkPF5ڂcdxؖ,K [<33##p)Ouj=#Z !5`g|x%n ߲6,`L |6 kd- Osx&YV3o~ Ŀi3A8vi 9ЯpUW~̢"s)LL.,;&I~p779 XkMS<Cʘ4h4}yZ{@d6NWtslg?TVǮ?;~7&@g Xa1jXBsof4<锲mM8i9"I~71wm[@3r~dʚ {*;5d[Ss+bkY\|.
+OC.f.zlCU*33͸c -LM[g\,U&U:~eܱ<*a̛"1 sԉpL,kT1nVx5B>0cZkxaapKZЫ9H=lp聺o/4%Z|ҷw5IX^$]ނMFɂ4{_aRƴ,[M prjV:=J;3#y'xӇ[蠋խjg
+Adłxbÿzr䘥!,)谚"Wq5ˎTuDԅɝ)vO%pӯFhu `3 d EOQ'.??GGIeED Y'rTaqFWa[&ZKH,n xIº\ X͠,]!8KK#xwug!.j|$H}2_=< WŁuD
+ibh
+ιu/'Y-snXܮZ% =~ /!&P^@( bf܆
+k♏ud6
+twcuiiUZfa
+
+xAVk7ۼlߓ2ASCΜ\Y hq!(r//FRT!sϱ {$Q-ﮑ:}ړ\lp>q3eB^rnƍ+•0ToDK>%T,d4m|A,F7Sb[x22a
+ miEDG='Μe FyY9Ȟ@'(-o _%"w9d OzH. }93:8kN@Q/T/0.`_X~DU{Y='0ɻxZXG @ _}DDZ\Mj8jIp#:3JڠXM9ֹti,E;B
+Ici7Eg96VN ʜ
+V3ELQͫüGF^OMȓhT{oP} G
+("t6e%*ԥso
+26Iܣ9 67yuC|
+bTlI3\
+g'+V7x0yAfV;FR a50$YLp
+ >-gJ{9s)tMG?)H["u
+K%d/23#WZvFi)SAu߿A_\L1uPofF@up
+S(6.ru$y h6A\:[L X#k`Hmzht̙$pз
+q Q vJx_.u7pXfһoyĦ( vzSUš `b
+omN.+B S>sDC/֝mLj{PQOdQ4@B)Wb Ebn k%GHءHSF{cRJdB:x)q["3}8" w!O~Е2D(FD{XuϽj,b
+Q.=ʕ>J{( IB*YƦC_t=Z%l%Yf^h-m(k'R0jB 72cha5hT=K\,,*c -`XOBgلb#rȑӤfvz맼 CJ7 ҼU
+ { oi>; n>ˉhj:NO*^ǧ.YLоӊ6kJ|%
+endstream
+endobj
+11632 0 obj
+<< /Type /FontDescriptor /FontName /UFSORL+LMMono9-Regular /Flags 4 /FontBBox [ -451 -318 734 1016 ] /Ascent 600 /CapHeight 600 /Descent -222 /ItalicAngle 0 /StemV 74 /XHeight 431 /CharSet( /A /B /C /D /E /F /G /H /I /K /L /M /N /O /P /R /S /T /U /V /W /X /Y /Z /a /ampersand /asciicircum /asciitilde /asterisk /at /b /backslash /bar /braceleft /braceright /bracketleft /bracketright /c /colon /comma /d /dollar /e /eight /equal /exclam /f /five /four /g /greater /h /hyphen /i /j /k /l /less /m /n /nine /numbersign /o /one /p /parenleft /parenright /percent /period /plus /q /question /quotedbl /quoteleft /quoteright /r /s /semicolon /seven /six /slash /t /three /two /u /underscore /v /w /x /y /z /zero) /FontFile 11633 0 R >>
+endobj
+11635 0 obj
+<< /Length1 1863 /Length2 22779 /Length3 0 /Filter /FlateDecode /Length 23842 >>
+stream
+xڴyeX[m.Z܃CqwwwIp/P(E7߼3gsJv^ZOޡ&W`
+ ]M]\
+?JXj>Uº0Y]D;@l,_j T:e=zBMtOɏMJl<_Y+([i)X>Hs&#5~">yFaXٱVia7t7v|&Eap E'}>mWGI"79r8?Պ機}2")7+Ɓt)˘6Q\1f$HiYQkV'1 Eӗ
+Ծ, .L(}PZSC ۊ=V2:FJޏ;X\tQxج<yVTst,/~TBd X4*.Ә?o|Vh*M;D o`ШTLX@SP7jrM~_ܣRZ'@ְ=n
+xB~5; ADҩ{~)BUr#"Ƈz#[vju5;1勾V7?ԇ;ˍʫF>%HpYR'=b38fYF:ջ|CкL$%aqpUhayV+"2ZXle_HDJO8~Ѡ8^G 4uR@@LBJ12oؕR:(Llgkgj}q: cw&?z͑MH}zV?BԳhr4F}x0>7R6,^e-sHOFX֛6/!Tx_mIx3ͻ-H5cͷ.˲xD
+i>7L%uT hg2˚՜CMtԵ^8e
+G%ghWw&6B܅'~B)i4. /򰞊,!N|t3>F٫&76=F:H dS{b \]K6_Fw!Cr K:L+ɼlUdSw=!xfMffd="n'ȗӄU\{wydO* үOQwߐ'Axɺ)K3D31弍cEjxV#YJbD{Ix(1^(<-LBDO{(Ar+ lJx!s^C:l0o{L^ I%0,
+U-ϰ$ $|4УP}T"G-\,OōWa`,$ 8ٟ0 4M!%&#C7|v{,DD>
+yGwRHi VQ0'ߵg9H Lxd)k`Ə591>Kfh} dBɰbXI5bt8EtChk63=FX07wZB?,>}&cK(:D!;tcku)Kb5$!=KHSъ r<V=F6 ~ٞib=>=$⿸ᄩMEAW[JxT6=$to%.rRvB!3f?`.Iӂ5A*nթR_ћ e EWkRTX\+Yc䞢̮m)ۂ@hLi0=]@Q]p FbFQx15=q2] b;{alU1#6le'[n;s^^<ӃXfشKbb%=)awւHŭNu݆}!K+/mlLżpM40.s&{m+~3Z (xܡ $Us~9# o\&ZXןco+(69݉ic궰N\4L_hǢ֨0x]ȮY1|0|ߓkP~ DIb&S>9>]e Jwc}8yitPwAtt&I\z~<5 F5Znb eiuCCɋAwI2Qp P[ՓFPN@">Du<?^
+$b4j7bzZ70# !`ɔ_B)!3/6' Ț'.xkC@0cDιu{ mYE>`8P6,C#QiJ!%O6zPȒPlU~Ž D
+nyVC6) m̲.Vbb%}
+iERר(VUΆ鐗셕{ʘhbN2 E rP&|P
+2iij<Qi֜l}˩ %`z^B?w(SE(c%xtF)d9<ˏئK? ]' i"Vi}CDad |Ж4e
+<d v6ڋ>'K+;ǁD\t7҅>Z bi[ Q -pHkDF+<8QR:(bLWJ:Ẍ́1;R/4 d×(XdnE`wL|xhLjfyA>''G}ac= jbj(7v'cLIG,)wc#ze ᕀGA4>JT-AbdO[IRԩiBx=5,o{,gxܷrD&t_ϱ1jYОb2'ߚ@|¡E.#%UO3儭EpI؊PGJr2!wu'TU#1.o볬1w <\
+E܉JN$V
+и찪>
+#?8LB!Ȝ͏0eD}ZoQIH]p 1,I&dFk
+cGq>z1q ظs[/耻h 'ĈOOr9>|1P@7f>ȨiHYM)XX9Ȗ? S>]?6>Lŗ{R<E`kɺ?ȶ%ۊai5
+M; _EI[٭]&4uW۳)$TG_Pvbl#~ڕ_v+t29읝NW{心,EvԕMth򬟂} bny<oy*!OInD@DaDZ1H
+A2]J`!|12[OGȷJc^>y0sɨ@?$:ntew+s 7nDUcYd4։z89k;<*uCS i(҇z}V|V^}tNc~D, %;Ü giI}égi!ug(?(M֗3۵j9}1`6?~D.aqH=Z$t\w% Zi*4 [.2İx$-eK=;mq;_K7qX<xVܭn;U hWٳt+ buuCeSF;mE܅r6Si[*7F BU0NK^wf>a9HQT: uƧtzݬ{<ML"ĸ~l`:V'i\H+eҢt:*n}(^E^=T}֜k9M$r6x' YL?O LlKԛa:3^bjXiZ~Ě!B8K vN"XdvpS>̟fim>aLmw2HVڒ' xx1/z 8netWYL"oSeڸ7 Nz%w=`sLib
+@$H1P(at<|m\c*l$6Y۠щ#=D D9w{XCn)m'6QXXK'RQ5
+ӒAE65[MUװZ%(< j[:OK~ #!Qz ugŪr.h$@m5gct_lc à2&*~3y`sjQ|CD_XǾD&/CbTKr8H5Q{U2v=<a+^FoRΧLi2r<M\dP;@ha|Óx䪿f=%bP ܒ׹  `9/*c&D|LL$_I!OOq&ӹ/+]wkPP-α78 9ݽ. IM#Nnq@b.gf#fS!
+,2;o}dT[)F n=r_P υ;2!R:Lcp:~D[QyV*eZU߭6ed{g9z _t$]Lc͐Dވmk} : Ґ[rM \ݨŸu;ӫzRD-:glW
+
+kLGUiLfl!y%M568Ȍ!j9\쉾`)ֳbbB GFe<о2!qWip!L8,R+'Ub [rE4{/Q?쀚(eD
+a?!'ڦm E*)>9iIW+٧(9(Wä5[C`Yڈ-ㆾч'y'dcJ <>Q`7*W+/^c ,i˿8{soZ"SCƋV;
+_nY_PshK[ 1TITAF/8AmLڒFJܹѐmd-jT$GU-9z-v)n^Å*?q)V@jZ6tO!;nh[Tɿ{Ȑ,BEͭ=>bO w1kF3g;GI8n"Yaȹj?W!ow",NV0_g _٪o#T3'$5N%-7<>pi+0!PES2eQAتoOH,D5s݅5䨵cY^Kh;CMMg3442kY{FIYFŽ=h^@ A1 ӯST z+TCzT]梂>r}Ú
+r}%J)!Ф"ʶp5>w/phz;F|_
+9uQkL4qK'~`v8pZ:bȣY7U],SG$ 5V坷<L um.#Qz' W~dlʍ4JH~xv^-ЍuD{~_<*s測4*ffe5A)Qf硞T-q8UN3_fGx|,F87[ziJh{%W~fF"1";O+q 5
+aMw!O<
+2`=P6^պg=7*lR[9Eȣ0r3zAtգyCU]ۘ2㯿eكusSߏɭ
+O!$YxlWYt#E1-hlSiP/97*o>/q?}m!Ʒ; A(SċA \Mڰйsԍ*Zdι!>[թ6 |RH#b`EvD
+[$ӗc ΃&
+LOq|RfiSw}x
+Ƒ~~s/PC/Ps\ ^oe|3̒Ɵg#+Qyo"=Ki_9GƺX†On]{TY-I?5n7{+zx
+3JhR *
+y0^E*AMpk6ۂvdȣbf1CV|LIEx:4C[ S-3%HtHUȢrf+}qfg)ύaD\eC)JzƟ;D\w-;ղ ޟjx=*PN*DΞ7IwEzg g=8@a満R+\UUo/._[
+
+acWeq
+ЋNsx9-j g# rP/v,4_JVѐ0L?۬hAh9>|M0Ju c^H_Td398Q%p5>z-l5 
+nX7n3v!g'9o+j:}cD|r|7
+MjMO:} ]gl̛Uܞqy
+?WO/G4 ӕ@|Bۍ'G/UukJV:ޭ攏 1"7I2fޒ}/\,XL&kh;0MvDzvr-@ X+}/8Io'̌zk7i~JzMkxD_]-pp nZ`sx__Һ6<%@yJi!Ѐ= ΢"*Cs=VnGE|]"&JD1c[Mz%ln/<=Ez
+8g#}k}H %mBI=R2ZXajW8|ͭ3\CzIʎEn.=a&Ϩiza-r|;3y72^ZObCдj_c+F*MvD/pOr8Vax {|Y,It5d2U&c0#EVU_6N[*rE%
+N31]7̝ݠQB6t6؛m ew& 2dɨYgPfr"+؉@ǒ_%K
+Մ*k!\ ݨ̀Žp^BC8wFu$D ޸hp f`/7Sp';&NEQA[4q(;;Uz]pODmФFj7V02GM6p<dmy^ ۅ [[kZ?
+|B<W_2]I[ö-VN)H%۠B[ m+XƳ|#
+lA4}2dT yڐ[ GĈb=>G4^^\.P:g|OtUBE'$.3 7QPKPu }Ιrϱ?*nďVupPS6=o));wӤ
+l(+<1pB$+h&ݕ^<sFF_k_SZm2q8n(z
++;6jҼ3)x}ӵl1(>B
+PP]5QG)L$VkB_#:)%Aʎ|dャnAiޫROD #4,/z*9=Tؗ{45 ~3SZ~HJ^Jݮ;I}|8ms >ԄWUZ[?za#hI2LԈav/Rb?<SӍɦ%^6 h꼢Y_6IMMW4+OGi_c@=nF RU> mkJ<lU߰AOVH~UjWO&m֪>-GQ< q uY0xQo8<)K9c,묱t34Gk':r(Fkj$lu1n7%~6`]ƺrR aEĥn.l Եt)k0Nٸ5uG|dUBb|HRܽAd^CAϫmzėv_iA-(y{f ȶ$e^1sElEoEn^HL:i1 RIF0?Td횇S&*Q  QcN%]aīda1S„y&,Y''TA<缱LW|5nOhPhpGKTeF;2XK"Bǰ3&Ac(3YFQny+;SV)&Cvi93&sכL0pGp1 }<C͌i
+;ȿ k,[.p%8jn-U%^W5~cYM
+< ;mW<C'?$a.ר4ާ|~n/81g4Jˉ ['yXk\$Ͽ#a$h̎ ,"Opzژ’3(N1`D=٪Ŋ
+h$p(9]"oڗwyƓXQ(X OS8i@{ocvRoLHZ1:&cMbbHÑ+0cgNJxrd OI7
+6
+u΄oqQHG{Atmf>O:. ~"Gr-}u{%3 6WH:BΡGFuAE5 -Ã<܇x:ҋ_kwX6vn}f,NFL񡗿Tɗ~4:"i$ iSk_x(@ %i "n
+ޫ"G^M[ @${paK2QSWW#K{kRŪQwcC_rR?.Op%bm|,Ed`.՛ 'pWGbo 38w Ke/> 3Shrt%[ 0'R |<OH?p {߶̱-MXۑxg&|srgol;;J3Z\Qo/cʑ ]1ccIQq)ˌã[H1I"h݋ѕ^Xha~/צ!`,&h'Q.U;Ɍ$75YճiLD{lKv&<ܧ Rvf=|2F9#osvVomD!M}>hGAhpK6p\Vviu
+"S(uΓ#\}Nq
+:xg)O~NN#]D NhDjFtx[W{MD;@<gfQG2JXҍƳDC+q3+r0^হI!]_zFqXuKo8%c&c_-?)J9r ◎|y}/q(
+oR$1E$$x8H䱲YdGO~.uQ+n@7
+]D@Q#߱2yf;ME(ƺt*qNq0 ml6FLl۶Ƥm;۶mz^'k]VBZzҜ;,cP@Ʊ A?$MJw^Gӫc5]WqxbZ8S=RRԤ{}Ӡ)h%._'V`9*Aj 7yX,tAc)Iܔ(co#a;=-L"!z% z].σEjn˜ﭨ_LijB]f?;<-2˸GתPD44&39;gKRex;ˏ}ۈGOUNŗy;9D!X4ĩoA۝=Gv3D9e2qlC1!(Ĭf>bhq
+Q/s6Gh"+>IÞߍfּ)NAcLSxԟPsq,$>2XKQS} z3[gu*x)u9 r kRou!ʀ/_ib1ĮEǟIb7hGC>--ŏTŢE<>>r }2"59BOvy#*xxԘEڥ5
+iϕCo\N<PPWa/)}+;uCή6tNlT1[?uo9nbm
+R-VdZ!+HL)kΟO\]H3ۧ8C}(< 7.@W8v,1$cBH%)8f{bZ x^uEǾkCµ=&dbZj/,7f8G#%ϖI9uMC]@bXAI,pMm3^y
+TzK`/W=I&2dmB=;=6;TǠ3P[q G{U%F?HO7oC؁_ԀC#eU:OZ"u~ix bv ټ5{aQ.#+Rro~I<<l;dM.J>s7Z;w.w'bA%!P1Rz fWOyJ*b-;3GXGV=SY2)W˖CLsʖ\-tBq:K?愾54) Yoҋ/ EFa3L 9aRI?Mp4YMÚ՚U}a|!kWi&CA$$ZyˑbMI@'ڦ?Ck[
+Wn|b̾h^K?͹׷0H ݶ19N$ƨ5X 3tg5<H9WZc>0ڤ̃
+sϫ %bk Vf؀YY+Zx%gwLD?iJ~԰4O5;){Lx&5s=&N" lW5]ۥH܋@xsf1r
+
+.HŒG1Y +h6&F^.dl٩Xm`7|x(dm}NTNqJPԕŒTV_K
+j~iD)pϮ׾UmStԏ^ɉ qi4)#}Zs
+T~`D'~H(&}#r;Ĉ>0(GU.7H*Qjx]ʡCUD!w0s?yNy̵b63 yoh1ėi:͗Vg/COK,Hp( #DϚʪ^
+5K y\ Xe.GNprb6Hz!Ӣ&6f^/e(3)\
+E޳+n̨|z,('NWƧGϹVns2('N7nbl#6 @ ¼5'tv0t)e VGW9F$X%dfT fyBgs"EQ{͖*UjfUrrD'LFĔx`_%w˦xhˀlO7b}Q33d$9'kKX*b穢O1;؈!'T7.=CI4"yT گ<<ԅ=t~(DrE+&CJqmFܡlx=EW 1x/ cY4 1K* [8Џ3jzDap,,k]rX$Dcxmx8DH^`ÌW`]:<,{檐M*i2o׉B9!2 )?j[a<(PW'M?fXA
+jes`Aq|=:|Ŀ#+4NnQ1X R6JbL!qL?;N̶e(6Us%߅<-=h?v
+Jk$޽c[@{127>f:8_r}I-OBFeK覰**(P܏5M޽6zF0xs<=[-0-u!߰ǩ[91̌hYfHk2
+eBt~|EFwpASBC߅m?<Ut `dGckIoTR$jG7FR&鰲Žڕ|}-xnauX!9j\9}8j~E|
+C3_cY7])ir3.CѨ.A}qlF[DjUk
+;*ߍd8"93V1 5 ~I^jf<6MywAy+g5pϹseޒG{~f~Z?f*Yl8{]Sདྷ F6v?5,Tx($5W2ǟ>-o-j~P$2a3~N23!La\eP4Ĝ%d#t]}$2<X񓌑~+cs$r;lZ<~f>ܮYVk("OnwkieJ^
+mU1Wx%@,1Ё:㍛dIDts_g
+qp r~/n
+{t֦~X
+j2yuSd!Bbn1?Hy YSw\L kO`ӺܶY*՗9D)r9R줉TZG;o*{&+SBᮈ4~E rdbF=dT<~K&Zb_rQJxv~ݒ%E顈P?~?Ѧ}X)fGo8@
+p&Yנ- +j/7
+Al)
+oSD&UAUm͕fҎ]26JO%~kA$c!F%޵Iy*#;3KQ9FR߳gȽV:B =b_աZsT5r(|zCLE;@u#'D{5P,яr&]>B15KȂEcSqg|"5fYn*sKPb|qml8ɣ5|D=TÅS3w(g&|Wrο~lwrL AַqS
+4;dkTX+tU>\ht^4Hns=S=F
+9ׇjlz;x?#7SB;8>\ܳc^@=R<aX5u*xG&9J,-S`
+ip6?2M /2ܵKo~X:S\<=:\UTQ '2\lDa1wµd[,64ąWbJ]ΑQglB<URQjSC1.[Ͼ.V~h\1TeT6/ Fkhfʃ?߆mENd@en4Ķp8Qc/Lu Dn83xH0b
+NLVϺ(GkI4tըkgy[d]z.g0ѯ.BD J_KZZv+L퀩=YڰE@0,o(27&Z,=6C}"0 >PqvʵF 7hp h!7^>N0݈(994"E| \7*
+{H #taQ+MCfפ~\=謆n6F="T Q*7(Ɔ;GAZ=&X"\7=O#8̊䳏_6Yuw1BS2V1Yr=(+qs~`
+(3`*J>$C
+S)<fAg/R6Jſ=rZ cX%Bs>M
+/)1fXf5DJhl3:ei+-aʤe[
+endstream
+endobj
+11634 0 obj
+<< /Type /FontDescriptor /FontName /NWBRFF+LMMonoSlant10-Regular /Flags 4 /FontBBox [ -477 -316 786 1016 ] /Ascent 599 /CapHeight 599 /Descent -222 /ItalicAngle -9 /StemV 69 /XHeight 431 /CharSet( /a /b /e /f /h /i /j /l /n /o /r /t /u /x) /FontFile 11635 0 R >>
+endobj
+11544 0 obj
+<< /Type /Encoding /Differences [ 16 /quotedblleft /quotedblright 21 /endash /emdash 27 /ff /fi /fl /ffi 33 /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P 82 /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde ] >>
+endobj
+11542 0 obj
+<< /Type /Encoding /Differences [ 48 /parenlefttp /parenrighttp /bracketlefttp /bracketrighttp /bracketleftbt /bracketrightbt 64 /parenleftbt /parenrightbt ] >>
+endobj
+11540 0 obj
+<< /Type /Encoding /Differences [ 62 /greater 96 /lscript /a /b /c 105 /i /j /k /l 110 /n 120 /x /y ] >>
+endobj
+11548 0 obj
+<< /Type /Encoding /Differences [ 0 /minus 3 /asteriskmath ] >>
+endobj
+11546 0 obj
+<< /Type /Encoding /Differences [ 1 /Delta 43 /plus 48 /zero /one /two /three /four /five /six /seven ] >>
+endobj
+11552 0 obj
+<< /Type /Encoding /Differences [ 136 /bullet ] >>
+endobj
+736 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /OCVDMH+LMRoman10-Bold /FontDescriptor 11578 0 R /FirstChar 21 /LastChar 125 /Widths 11551 0 R /Encoding 11544 0 R >>
+endobj
+187 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /LCRVQF+LMRoman12-Bold /FontDescriptor 11580 0 R /FirstChar 28 /LastChar 125 /Widths 11564 0 R /Encoding 11544 0 R >>
+endobj
+179 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /WCAPHI+LMRoman9-Bold /FontDescriptor 11582 0 R /FirstChar 65 /LastChar 116 /Widths 11572 0 R /Encoding 11544 0 R >>
+endobj
+542 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /YSYFAJ+LMRomanCaps10-Regular /FontDescriptor 11584 0 R /FirstChar 97 /LastChar 115 /Widths 11556 0 R /Encoding 11544 0 R >>
+endobj
+184 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /CVXELO+LMRoman10-Regular /FontDescriptor 11592 0 R /FirstChar 16 /LastChar 122 /Widths 11567 0 R /Encoding 11544 0 R >>
+endobj
+177 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /QOMLEN+LMRoman12-Regular /FontDescriptor 11594 0 R /FirstChar 44 /LastChar 121 /Widths 11574 0 R /Encoding 11544 0 R >>
+endobj
+174 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /JTSGNV+LMRoman17-Regular /FontDescriptor 11596 0 R /FirstChar 84 /LastChar 116 /Widths 11577 0 R /Encoding 11544 0 R >>
+endobj
+468 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /HUFBEO+LMRoman6-Regular /FontDescriptor 11598 0 R /FirstChar 48 /LastChar 57 /Widths 11557 0 R /Encoding 11544 0 R >>
+endobj
+459 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /SXHXQW+LMRoman7-Regular /FontDescriptor 11600 0 R /FirstChar 48 /LastChar 57 /Widths 11558 0 R /Encoding 11544 0 R >>
+endobj
+203 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /CIHHET+LMRoman8-Regular /FontDescriptor 11602 0 R /FirstChar 16 /LastChar 122 /Widths 11561 0 R /Encoding 11544 0 R >>
+endobj
+180 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /BYGIQZ+LMRoman9-Regular /FontDescriptor 11604 0 R /FirstChar 39 /LastChar 119 /Widths 11571 0 R /Encoding 11544 0 R >>
+endobj
+305 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /NRYMBG+LMRoman10-Italic /FontDescriptor 11606 0 R /FirstChar 28 /LastChar 121 /Widths 11559 0 R /Encoding 11544 0 R >>
+endobj
+182 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /TXCPTT+LMRoman9-Italic /FontDescriptor 11608 0 R /FirstChar 110 /LastChar 116 /Widths 11569 0 R /Encoding 11544 0 R >>
+endobj
+304 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /IATCRU+LMRomanSlant10-Regular /FontDescriptor 11610 0 R /FirstChar 40 /LastChar 121 /Widths 11560 0 R /Encoding 11544 0 R >>
+endobj
+185 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /DXGFLV+LMSans10-Regular /FontDescriptor 11612 0 R /FirstChar 27 /LastChar 121 /Widths 11566 0 R /Encoding 11544 0 R >>
+endobj
+175 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /MOYMBT+LMSans17-Regular /FontDescriptor 11614 0 R /FirstChar 97 /LastChar 120 /Widths 11576 0 R /Encoding 11544 0 R >>
+endobj
+189 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /MMROMK+LMSans8-Regular /FontDescriptor 11616 0 R /FirstChar 48 /LastChar 120 /Widths 11563 0 R /Encoding 11544 0 R >>
+endobj
+181 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /JJEEWR+LMSans9-Regular /FontDescriptor 11618 0 R /FirstChar 97 /LastChar 120 /Widths 11570 0 R /Encoding 11544 0 R >>
+endobj
+186 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /HNJOVH+LMMono10-Regular /FontDescriptor 11626 0 R /FirstChar 33 /LastChar 125 /Widths 11565 0 R /Encoding 11544 0 R >>
+endobj
+178 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /NRLLYV+LMMono12-Regular /FontDescriptor 11628 0 R /FirstChar 46 /LastChar 121 /Widths 11573 0 R /Encoding 11544 0 R >>
+endobj
+760 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /REBVUK+LMMono8-Regular /FontDescriptor 11630 0 R /FirstChar 44 /LastChar 125 /Widths 11550 0 R /Encoding 11544 0 R >>
+endobj
+183 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /UFSORL+LMMono9-Regular /FontDescriptor 11632 0 R /FirstChar 33 /LastChar 126 /Widths 11568 0 R /Encoding 11544 0 R >>
+endobj
+798 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /NWBRFF+LMMonoSlant10-Regular /FontDescriptor 11634 0 R /FirstChar 97 /LastChar 120 /Widths 11545 0 R /Encoding 11544 0 R >>
+endobj
+1792 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /WOCBGC+LMMathExtension10-Regular /FontDescriptor 11586 0 R /FirstChar 48 /LastChar 65 /Widths 11543 0 R /Encoding 11542 0 R >>
+endobj
+644 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /YCPAMU+LMMathItalic10-Regular /FontDescriptor 11588 0 R /FirstChar 62 /LastChar 121 /Widths 11554 0 R /Encoding 11540 0 R >>
+endobj
+4502 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /JMCQJH+LMMathItalic7-Regular /FontDescriptor 11590 0 R /FirstChar 120 /LastChar 121 /Widths 11541 0 R /Encoding 11540 0 R >>
+endobj
+176 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /FACRCI+LMMathSymbols10-Regular /FontDescriptor 11620 0 R /FirstChar 0 /LastChar 3 /Widths 11575 0 R /Encoding 11548 0 R >>
+endobj
+202 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /DTFCKV+LMMathSymbols6-Regular /FontDescriptor 11622 0 R /FirstChar 3 /LastChar 3 /Widths 11562 0 R /Encoding 11548 0 R >>
+endobj
+761 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /ANTVSN+LMMathSymbols8-Regular /FontDescriptor 11624 0 R /FirstChar 0 /LastChar 0 /Widths 11549 0 R /Encoding 11548 0 R >>
+endobj
+642 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /CVXELO+LMRoman10-Regular /FontDescriptor 11592 0 R /FirstChar 1 /LastChar 55 /Widths 11555 0 R /Encoding 11546 0 R >>
+endobj
+762 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /CIHHET+LMRoman8-Regular /FontDescriptor 11602 0 R /FirstChar 48 /LastChar 49 /Widths 11547 0 R /Encoding 11546 0 R >>
+endobj
+654 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /CVXELO+LMRoman10-Regular /FontDescriptor 11592 0 R /FirstChar 136 /LastChar 136 /Widths 11553 0 R /Encoding 11552 0 R >>
+endobj
+204 0 obj
+<< /Type /Pages /Parent 11636 0 R /Count 10 /Kids [ 169 0 R 206 0 R 253 0 R 298 0 R 337 0 R 378 0 R 426 0 R 472 0 R 525 0 R 554 0 R ] >>
+endobj
+594 0 obj
+<< /Type /Pages /Parent 11636 0 R /Count 10 /Kids [ 574 0 R 596 0 R 627 0 R 648 0 R 674 0 R 691 0 R 717 0 R 743 0 R 766 0 R 795 0 R ] >>
+endobj
+868 0 obj
+<< /Type /Pages /Parent 11636 0 R /Count 10 /Kids [ 817 0 R 870 0 R 917 0 R 957 0 R 1007 0 R 1042 0 R 1069 0 R 1092 0 R 1139 0 R 1194 0 R ] >>
+endobj
+1312 0 obj
+<< /Type /Pages /Parent 11636 0 R /Count 10 /Kids [ 1256 0 R 1314 0 R 1377 0 R 1428 0 R 1478 0 R 1530 0 R 1563 0 R 1611 0 R 1675 0 R 1710 0 R ] >>
+endobj
+1804 0 obj
+<< /Type /Pages /Parent 11636 0 R /Count 10 /Kids [ 1763 0 R 1806 0 R 1859 0 R 1915 0 R 1959 0 R 2004 0 R 2056 0 R 2093 0 R 2130 0 R 2163 0 R ] >>
+endobj
+2253 0 obj
+<< /Type /Pages /Parent 11636 0 R /Count 10 /Kids [ 2212 0 R 2256 0 R 2318 0 R 2370 0 R 2410 0 R 2462 0 R 2514 0 R 2567 0 R 2606 0 R 2654 0 R ] >>
+endobj
+2759 0 obj
+<< /Type /Pages /Parent 11636 0 R /Count 10 /Kids [ 2704 0 R 2761 0 R 2817 0 R 2870 0 R 2914 0 R 2959 0 R 3010 0 R 3063 0 R 3120 0 R 3172 0 R ] >>
+endobj
+3286 0 obj
+<< /Type /Pages /Parent 11636 0 R /Count 10 /Kids [ 3233 0 R 3288 0 R 3325 0 R 3369 0 R 3422 0 R 3479 0 R 3531 0 R 3582 0 R 3629 0 R 3677 0 R ] >>
+endobj
+3782 0 obj
+<< /Type /Pages /Parent 11636 0 R /Count 10 /Kids [ 3727 0 R 3784 0 R 3835 0 R 3873 0 R 3917 0 R 3977 0 R 4033 0 R 4091 0 R 4145 0 R 4193 0 R ] >>
+endobj
+4299 0 obj
+<< /Type /Pages /Parent 11636 0 R /Count 10 /Kids [ 4244 0 R 4301 0 R 4359 0 R 4414 0 R 4459 0 R 4513 0 R 4560 0 R 4598 0 R 4645 0 R 4700 0 R ] >>
+endobj
+4780 0 obj
+<< /Type /Pages /Parent 11637 0 R /Count 10 /Kids [ 4724 0 R 4782 0 R 4839 0 R 4889 0 R 4948 0 R 5007 0 R 5051 0 R 5093 0 R 5160 0 R 5202 0 R ] >>
+endobj
+5299 0 obj
+<< /Type /Pages /Parent 11637 0 R /Count 10 /Kids [ 5259 0 R 5301 0 R 5337 0 R 5383 0 R 5431 0 R 5489 0 R 5542 0 R 5602 0 R 5669 0 R 5720 0 R ] >>
+endobj
+5828 0 obj
+<< /Type /Pages /Parent 11637 0 R /Count 10 /Kids [ 5784 0 R 5830 0 R 5893 0 R 5947 0 R 6005 0 R 6046 0 R 6084 0 R 6136 0 R 6189 0 R 6222 0 R ] >>
+endobj
+6322 0 obj
+<< /Type /Pages /Parent 11637 0 R /Count 10 /Kids [ 6276 0 R 6324 0 R 6376 0 R 6422 0 R 6469 0 R 6521 0 R 6574 0 R 6632 0 R 6685 0 R 6724 0 R ] >>
+endobj
+6800 0 obj
+<< /Type /Pages /Parent 11637 0 R /Count 10 /Kids [ 6764 0 R 6802 0 R 6843 0 R 6884 0 R 6945 0 R 7007 0 R 7061 0 R 7110 0 R 7173 0 R 7220 0 R ] >>
+endobj
+7320 0 obj
+<< /Type /Pages /Parent 11637 0 R /Count 10 /Kids [ 7272 0 R 7322 0 R 7380 0 R 7423 0 R 7486 0 R 7542 0 R 7590 0 R 7636 0 R 7687 0 R 7738 0 R ] >>
+endobj
+7827 0 obj
+<< /Type /Pages /Parent 11637 0 R /Count 10 /Kids [ 7774 0 R 7830 0 R 7878 0 R 7931 0 R 7981 0 R 8022 0 R 8070 0 R 8112 0 R 8159 0 R 8210 0 R ] >>
+endobj
+8321 0 obj
+<< /Type /Pages /Parent 11637 0 R /Count 10 /Kids [ 8273 0 R 8323 0 R 8380 0 R 8437 0 R 8489 0 R 8549 0 R 8593 0 R 8643 0 R 8706 0 R 8772 0 R ] >>
+endobj
+8893 0 obj
+<< /Type /Pages /Parent 11637 0 R /Count 10 /Kids [ 8831 0 R 8895 0 R 8953 0 R 9014 0 R 9076 0 R 9137 0 R 9188 0 R 9243 0 R 9286 0 R 9335 0 R ] >>
+endobj
+9420 0 obj
+<< /Type /Pages /Parent 11637 0 R /Count 10 /Kids [ 9377 0 R 9422 0 R 9480 0 R 9539 0 R 9587 0 R 9650 0 R 9703 0 R 9758 0 R 9797 0 R 9847 0 R ] >>
+endobj
+9961 0 obj
+<< /Type /Pages /Parent 11638 0 R /Count 10 /Kids [ 9900 0 R 9963 0 R 10026 0 R 10086 0 R 10151 0 R 10214 0 R 10281 0 R 10333 0 R 10393 0 R 10433 0 R ] >>
+endobj
+10557 0 obj
+<< /Type /Pages /Parent 11638 0 R /Count 10 /Kids [ 10495 0 R 10559 0 R 10623 0 R 10688 0 R 10752 0 R 10817 0 R 10882 0 R 10946 0 R 11010 0 R 11074 0 R ] >>
+endobj
+11206 0 obj
+<< /Type /Pages /Parent 11638 0 R /Count 8 /Kids [ 11140 0 R 11208 0 R 11273 0 R 11338 0 R 11405 0 R 11472 0 R 11522 0 R 11536 0 R ] >>
+endobj
+11636 0 obj
+<< /Type /Pages /Parent 11639 0 R /Count 100 /Kids [ 204 0 R 594 0 R 868 0 R 1312 0 R 1804 0 R 2253 0 R 2759 0 R 3286 0 R 3782 0 R 4299 0 R ] >>
+endobj
+11637 0 obj
+<< /Type /Pages /Parent 11639 0 R /Count 100 /Kids [ 4780 0 R 5299 0 R 5828 0 R 6322 0 R 6800 0 R 7320 0 R 7827 0 R 8321 0 R 8893 0 R 9420 0 R ] >>
+endobj
+11638 0 obj
+<< /Type /Pages /Parent 11639 0 R /Count 28 /Kids [ 9961 0 R 10557 0 R 11206 0 R ] >>
+endobj
+11639 0 obj
+<< /Type /Pages /Count 228 /Kids [ 11636 0 R 11637 0 R 11638 0 R ] >>
+endobj
+11640 0 obj
+<< /Type /Outlines /First 6 0 R /Last 166 0 R /Count 41 >>
+endobj
+166 0 obj
+<< /Title 167 0 R /A 164 0 R /Parent 11640 0 R /Prev 162 0 R >>
+endobj
+162 0 obj
+<< /Title 163 0 R /A 160 0 R /Parent 11640 0 R /Prev 158 0 R /Next 166 0 R >>
+endobj
+158 0 obj
+<< /Title 159 0 R /A 156 0 R /Parent 11640 0 R /Prev 154 0 R /Next 162 0 R >>
+endobj
+154 0 obj
+<< /Title 155 0 R /A 152 0 R /Parent 11640 0 R /Prev 150 0 R /Next 158 0 R >>
+endobj
+150 0 obj
+<< /Title 151 0 R /A 148 0 R /Parent 11640 0 R /Prev 146 0 R /Next 154 0 R >>
+endobj
+146 0 obj
+<< /Title 147 0 R /A 144 0 R /Parent 11640 0 R /Prev 142 0 R /Next 150 0 R >>
+endobj
+142 0 obj
+<< /Title 143 0 R /A 140 0 R /Parent 11640 0 R /Prev 138 0 R /Next 146 0 R >>
+endobj
+138 0 obj
+<< /Title 139 0 R /A 136 0 R /Parent 11640 0 R /Prev 134 0 R /Next 142 0 R >>
+endobj
+134 0 obj
+<< /Title 135 0 R /A 132 0 R /Parent 11640 0 R /Prev 130 0 R /Next 138 0 R >>
+endobj
+130 0 obj
+<< /Title 131 0 R /A 128 0 R /Parent 11640 0 R /Prev 126 0 R /Next 134 0 R >>
+endobj
+126 0 obj
+<< /Title 127 0 R /A 124 0 R /Parent 11640 0 R /Prev 122 0 R /Next 130 0 R >>
+endobj
+122 0 obj
+<< /Title 123 0 R /A 120 0 R /Parent 11640 0 R /Prev 118 0 R /Next 126 0 R >>
+endobj
+118 0 obj
+<< /Title 119 0 R /A 116 0 R /Parent 11640 0 R /Prev 114 0 R /Next 122 0 R >>
+endobj
+114 0 obj
+<< /Title 115 0 R /A 112 0 R /Parent 11640 0 R /Prev 110 0 R /Next 118 0 R >>
+endobj
+110 0 obj
+<< /Title 111 0 R /A 108 0 R /Parent 11640 0 R /Prev 106 0 R /Next 114 0 R >>
+endobj
+106 0 obj
+<< /Title 107 0 R /A 104 0 R /Parent 11640 0 R /Prev 102 0 R /Next 110 0 R >>
+endobj
+102 0 obj
+<< /Title 103 0 R /A 100 0 R /Parent 11640 0 R /Prev 98 0 R /Next 106 0 R >>
+endobj
+98 0 obj
+<< /Title 99 0 R /A 96 0 R /Parent 11640 0 R /Prev 94 0 R /Next 102 0 R >>
+endobj
+94 0 obj
+<< /Title 95 0 R /A 92 0 R /Parent 11640 0 R /Prev 90 0 R /Next 98 0 R >>
+endobj
+90 0 obj
+<< /Title 91 0 R /A 88 0 R /Parent 11640 0 R /Prev 86 0 R /Next 94 0 R >>
+endobj
+86 0 obj
+<< /Title 87 0 R /A 84 0 R /Parent 11640 0 R /Prev 82 0 R /Next 90 0 R >>
+endobj
+82 0 obj
+<< /Title 83 0 R /A 80 0 R /Parent 11640 0 R /Prev 78 0 R /Next 86 0 R >>
+endobj
+78 0 obj
+<< /Title 79 0 R /A 76 0 R /Parent 11640 0 R /Prev 74 0 R /Next 82 0 R >>
+endobj
+74 0 obj
+<< /Title 75 0 R /A 72 0 R /Parent 11640 0 R /Prev 70 0 R /Next 78 0 R >>
+endobj
+70 0 obj
+<< /Title 71 0 R /A 68 0 R /Parent 11640 0 R /Prev 66 0 R /Next 74 0 R >>
+endobj
+66 0 obj
+<< /Title 67 0 R /A 64 0 R /Parent 11640 0 R /Prev 62 0 R /Next 70 0 R >>
+endobj
+62 0 obj
+<< /Title 63 0 R /A 60 0 R /Parent 11640 0 R /Prev 58 0 R /Next 66 0 R >>
+endobj
+58 0 obj
+<< /Title 59 0 R /A 56 0 R /Parent 11640 0 R /Prev 54 0 R /Next 62 0 R >>
+endobj
+54 0 obj
+<< /Title 55 0 R /A 52 0 R /Parent 11640 0 R /Prev 50 0 R /Next 58 0 R >>
+endobj
+50 0 obj
+<< /Title 51 0 R /A 48 0 R /Parent 11640 0 R /Prev 46 0 R /Next 54 0 R >>
+endobj
+46 0 obj
+<< /Title 47 0 R /A 44 0 R /Parent 11640 0 R /Prev 42 0 R /Next 50 0 R >>
+endobj
+42 0 obj
+<< /Title 43 0 R /A 40 0 R /Parent 11640 0 R /Prev 38 0 R /Next 46 0 R >>
+endobj
+38 0 obj
+<< /Title 39 0 R /A 36 0 R /Parent 11640 0 R /Prev 34 0 R /Next 42 0 R >>
+endobj
+34 0 obj
+<< /Title 35 0 R /A 32 0 R /Parent 11640 0 R /Prev 30 0 R /Next 38 0 R >>
+endobj
+30 0 obj
+<< /Title 31 0 R /A 28 0 R /Parent 11640 0 R /Prev 26 0 R /Next 34 0 R >>
+endobj
+26 0 obj
+<< /Title 27 0 R /A 24 0 R /Parent 11640 0 R /Prev 22 0 R /Next 30 0 R >>
+endobj
+22 0 obj
+<< /Title 23 0 R /A 20 0 R /Parent 11640 0 R /Prev 18 0 R /Next 26 0 R >>
+endobj
+18 0 obj
+<< /Title 19 0 R /A 16 0 R /Parent 11640 0 R /Prev 14 0 R /Next 22 0 R >>
+endobj
+14 0 obj
+<< /Title 15 0 R /A 12 0 R /Parent 11640 0 R /Prev 10 0 R /Next 18 0 R >>
+endobj
+10 0 obj
+<< /Title 11 0 R /A 8 0 R /Parent 11640 0 R /Prev 6 0 R /Next 14 0 R >>
+endobj
+6 0 obj
+<< /Title 7 0 R /A 4 0 R /Parent 11640 0 R /Next 10 0 R >>
+endobj
+11641 0 obj
+<< /Names [ (Doc-Start) 173 0 R (HD.1) 188 0 R (HD.10) 198 0 R (HD.100) 303 0 R (HD.1000) 1340 0 R (HD.10000) 11152 0 R (HD.10001) 11153 0 R (HD.10002) 11154 0 R (HD.10003) 11155 0 R (HD.10004) 11156 0 R (HD.10005) 11157 0 R (HD.10006) 11158 0 R (HD.10007) 11159 0 R (HD.10008) 11160 0 R (HD.10009) 11161 0 R (HD.1001) 1341 0 R (HD.10010) 11162 0 R (HD.10011) 11163 0 R (HD.10012) 11164 0 R (HD.10013) 11165 0 R (HD.10014) 11166 0 R (HD.10015) 11167 0 R (HD.10016) 11168 0 R (HD.10017) 11169 0 R (HD.10018) 11170 0 R (HD.10019) 11171 0 R (HD.1002) 1342 0 R (HD.10020) 11172 0 R (HD.10021) 11173 0 R (HD.10022) 11174 0 R (HD.10023) 11175 0 R (HD.10024) 11176 0 R ] /Limits [ (Doc-Start) (HD.10024) ] >>
+endobj
+11642 0 obj
+<< /Names [ (HD.10025) 11177 0 R (HD.10026) 11178 0 R (HD.10027) 11179 0 R (HD.10028) 11180 0 R (HD.10029) 11181 0 R (HD.1003) 1343 0 R (HD.10030) 11182 0 R (HD.10031) 11183 0 R (HD.10032) 11184 0 R (HD.10033) 11185 0 R (HD.10034) 11186 0 R (HD.10035) 11187 0 R (HD.10036) 11188 0 R (HD.10037) 11189 0 R (HD.10038) 11190 0 R (HD.10039) 11191 0 R (HD.1004) 1344 0 R (HD.10040) 11192 0 R (HD.10041) 11193 0 R (HD.10042) 11194 0 R (HD.10043) 11195 0 R (HD.10044) 11196 0 R (HD.10045) 11197 0 R (HD.10046) 11198 0 R (HD.10047) 11199 0 R (HD.10048) 11200 0 R (HD.10049) 11201 0 R (HD.1005) 1345 0 R (HD.10050) 11202 0 R (HD.10051) 11203 0 R (HD.10052) 11204 0 R (HD.10053) 11205 0 R ] /Limits [ (HD.10025) (HD.10053) ] >>
+endobj
+11643 0 obj
+<< /Names [ (HD.10054) 11211 0 R (HD.10055) 11212 0 R (HD.10056) 11213 0 R (HD.10057) 11214 0 R (HD.10058) 11215 0 R (HD.10059) 11216 0 R (HD.1006) 1346 0 R (HD.10060) 11217 0 R (HD.10061) 11218 0 R (HD.10062) 11219 0 R (HD.10063) 11220 0 R (HD.10064) 11221 0 R (HD.10065) 11222 0 R (HD.10066) 11223 0 R (HD.10067) 11224 0 R (HD.10068) 11225 0 R (HD.10069) 11226 0 R (HD.1007) 1347 0 R (HD.10070) 11227 0 R (HD.10071) 11228 0 R (HD.10072) 11229 0 R (HD.10073) 11230 0 R (HD.10074) 11231 0 R (HD.10075) 11232 0 R (HD.10076) 11233 0 R (HD.10077) 11234 0 R (HD.10078) 11235 0 R (HD.10079) 11236 0 R (HD.1008) 1348 0 R (HD.10080) 11237 0 R (HD.10081) 11238 0 R (HD.10082) 11239 0 R ] /Limits [ (HD.10054) (HD.10082) ] >>
+endobj
+11644 0 obj
+<< /Names [ (HD.10083) 11240 0 R (HD.10084) 11241 0 R (HD.10085) 11242 0 R (HD.10086) 11243 0 R (HD.10087) 11244 0 R (HD.10088) 11245 0 R (HD.10089) 11246 0 R (HD.1009) 1349 0 R (HD.10090) 11247 0 R (HD.10091) 11248 0 R (HD.10092) 11249 0 R (HD.10093) 11250 0 R (HD.10094) 11251 0 R (HD.10095) 11252 0 R (HD.10096) 11253 0 R (HD.10097) 11254 0 R (HD.10098) 11255 0 R (HD.10099) 11256 0 R (HD.101) 306 0 R (HD.1010) 1350 0 R (HD.10100) 11257 0 R (HD.10101) 11258 0 R (HD.10102) 11259 0 R (HD.10103) 11260 0 R (HD.10104) 11261 0 R (HD.10105) 11262 0 R (HD.10106) 11263 0 R (HD.10107) 11264 0 R (HD.10108) 11265 0 R (HD.10109) 11266 0 R (HD.1011) 1351 0 R (HD.10110) 11267 0 R ] /Limits [ (HD.10083) (HD.10110) ] >>
+endobj
+11645 0 obj
+<< /Names [ (HD.10111) 11268 0 R (HD.10112) 11269 0 R (HD.10113) 11270 0 R (HD.10114) 11271 0 R (HD.10115) 11276 0 R (HD.10116) 11277 0 R (HD.10117) 11278 0 R (HD.10118) 11279 0 R (HD.10119) 11280 0 R (HD.1012) 1352 0 R (HD.10120) 11281 0 R (HD.10121) 11282 0 R (HD.10122) 11283 0 R (HD.10123) 11284 0 R (HD.10124) 11285 0 R (HD.10125) 11286 0 R (HD.10126) 11287 0 R (HD.10127) 11288 0 R (HD.10128) 11289 0 R (HD.10129) 11290 0 R (HD.1013) 1353 0 R (HD.10130) 11291 0 R (HD.10131) 11292 0 R (HD.10132) 11293 0 R (HD.10133) 11294 0 R (HD.10134) 11295 0 R (HD.10135) 11296 0 R (HD.10136) 11297 0 R (HD.10137) 11298 0 R (HD.10138) 11299 0 R (HD.10139) 11300 0 R (HD.1014) 1354 0 R ] /Limits [ (HD.10111) (HD.1014) ] >>
+endobj
+11646 0 obj
+<< /Names [ (HD.10140) 11301 0 R (HD.10141) 11302 0 R (HD.10142) 11303 0 R (HD.10143) 11304 0 R (HD.10144) 11305 0 R (HD.10145) 11306 0 R (HD.10146) 11307 0 R (HD.10147) 11308 0 R (HD.10148) 11309 0 R (HD.10149) 11310 0 R (HD.1015) 1355 0 R (HD.10150) 11311 0 R (HD.10151) 11312 0 R (HD.10152) 11313 0 R (HD.10153) 11314 0 R (HD.10154) 11315 0 R (HD.10155) 11316 0 R (HD.10156) 11317 0 R (HD.10157) 11318 0 R (HD.10158) 11319 0 R (HD.10159) 11320 0 R (HD.1016) 1356 0 R (HD.10160) 11321 0 R (HD.10161) 11322 0 R (HD.10162) 11323 0 R (HD.10163) 11324 0 R (HD.10164) 11325 0 R (HD.10165) 11326 0 R (HD.10166) 11327 0 R (HD.10167) 11328 0 R (HD.10168) 11329 0 R (HD.10169) 11330 0 R ] /Limits [ (HD.10140) (HD.10169) ] >>
+endobj
+11647 0 obj
+<< /Names [ (HD.1017) 1357 0 R (HD.10170) 11331 0 R (HD.10171) 11332 0 R (HD.10172) 11333 0 R (HD.10173) 11334 0 R (HD.10174) 11335 0 R (HD.10175) 11336 0 R (HD.10176) 11341 0 R (HD.10177) 11342 0 R (HD.10178) 11343 0 R (HD.10179) 11344 0 R (HD.1018) 1358 0 R (HD.10180) 11345 0 R (HD.10181) 11346 0 R (HD.10182) 11347 0 R (HD.10183) 11348 0 R (HD.10184) 11349 0 R (HD.10185) 11350 0 R (HD.10186) 11351 0 R (HD.10187) 11352 0 R (HD.10188) 11353 0 R (HD.10189) 11354 0 R (HD.1019) 1359 0 R (HD.10190) 11355 0 R (HD.10191) 11356 0 R (HD.10192) 11357 0 R (HD.10193) 11358 0 R (HD.10194) 11359 0 R (HD.10195) 11360 0 R (HD.10196) 11361 0 R (HD.10197) 11362 0 R (HD.10198) 11363 0 R ] /Limits [ (HD.1017) (HD.10198) ] >>
+endobj
+11648 0 obj
+<< /Names [ (HD.10199) 11364 0 R (HD.102) 307 0 R (HD.1020) 1360 0 R (HD.10200) 11365 0 R (HD.10201) 11366 0 R (HD.10202) 11367 0 R (HD.10203) 11368 0 R (HD.10204) 11369 0 R (HD.10205) 11370 0 R (HD.10206) 11371 0 R (HD.10207) 11372 0 R (HD.10208) 11373 0 R (HD.10209) 11374 0 R (HD.1021) 1361 0 R (HD.10210) 11375 0 R (HD.10211) 11376 0 R (HD.10212) 11377 0 R (HD.10213) 11378 0 R (HD.10214) 11379 0 R (HD.10215) 11380 0 R (HD.10216) 11381 0 R (HD.10217) 11382 0 R (HD.10218) 11383 0 R (HD.10219) 11384 0 R (HD.1022) 1362 0 R (HD.10220) 11385 0 R (HD.10221) 11386 0 R (HD.10222) 11387 0 R (HD.10223) 11388 0 R (HD.10224) 11389 0 R (HD.10225) 11390 0 R (HD.10226) 11391 0 R ] /Limits [ (HD.10199) (HD.10226) ] >>
+endobj
+11649 0 obj
+<< /Names [ (HD.10227) 11392 0 R (HD.10228) 11393 0 R (HD.10229) 11394 0 R (HD.1023) 1363 0 R (HD.10230) 11395 0 R (HD.10231) 11396 0 R (HD.10232) 11397 0 R (HD.10233) 11398 0 R (HD.10234) 11399 0 R (HD.10235) 11400 0 R (HD.10236) 11401 0 R (HD.10237) 11402 0 R (HD.10238) 11403 0 R (HD.10239) 11408 0 R (HD.1024) 1364 0 R (HD.10240) 11409 0 R (HD.10241) 11410 0 R (HD.10242) 11411 0 R (HD.10243) 11412 0 R (HD.10244) 11413 0 R (HD.10245) 11414 0 R (HD.10246) 11415 0 R (HD.10247) 11416 0 R (HD.10248) 11417 0 R (HD.10249) 11418 0 R (HD.1025) 1365 0 R (HD.10250) 11419 0 R (HD.10251) 11420 0 R (HD.10252) 11421 0 R (HD.10253) 11422 0 R (HD.10254) 11423 0 R (HD.10255) 11424 0 R ] /Limits [ (HD.10227) (HD.10255) ] >>
+endobj
+11650 0 obj
+<< /Names [ (HD.10256) 11425 0 R (HD.10257) 11426 0 R (HD.10258) 11427 0 R (HD.10259) 11428 0 R (HD.1026) 1366 0 R (HD.10260) 11429 0 R (HD.10261) 11430 0 R (HD.10262) 11431 0 R (HD.10263) 11432 0 R (HD.10264) 11433 0 R (HD.10265) 11434 0 R (HD.10266) 11435 0 R (HD.10267) 11436 0 R (HD.10268) 11437 0 R (HD.10269) 11438 0 R (HD.1027) 1367 0 R (HD.10270) 11439 0 R (HD.10271) 11440 0 R (HD.10272) 11441 0 R (HD.10273) 11442 0 R (HD.10274) 11443 0 R (HD.10275) 11444 0 R (HD.10276) 11445 0 R (HD.10277) 11446 0 R (HD.10278) 11447 0 R (HD.10279) 11448 0 R (HD.1028) 1368 0 R (HD.10280) 11449 0 R (HD.10281) 11450 0 R (HD.10282) 11451 0 R (HD.10283) 11452 0 R (HD.10284) 11453 0 R ] /Limits [ (HD.10256) (HD.10284) ] >>
+endobj
+11651 0 obj
+<< /Names [ (HD.10285) 11454 0 R (HD.10286) 11455 0 R (HD.10287) 11456 0 R (HD.10288) 11457 0 R (HD.10289) 11458 0 R (HD.1029) 1369 0 R (HD.10290) 11459 0 R (HD.10291) 11460 0 R (HD.10292) 11461 0 R (HD.10293) 11462 0 R (HD.10294) 11463 0 R (HD.10295) 11464 0 R (HD.10296) 11465 0 R (HD.10297) 11466 0 R (HD.10298) 11467 0 R (HD.10299) 11468 0 R (HD.103) 308 0 R (HD.1030) 1370 0 R (HD.10300) 11469 0 R (HD.10301) 11470 0 R (HD.10302) 11475 0 R (HD.10303) 11476 0 R (HD.10304) 11477 0 R (HD.10305) 11478 0 R (HD.10306) 11479 0 R (HD.10307) 11480 0 R (HD.10308) 11481 0 R (HD.10309) 11482 0 R (HD.1031) 1371 0 R (HD.10310) 11483 0 R (HD.10311) 11484 0 R (HD.10312) 11485 0 R ] /Limits [ (HD.10285) (HD.10312) ] >>
+endobj
+11652 0 obj
+<< /Names [ (HD.10313) 11486 0 R (HD.10314) 11487 0 R (HD.10315) 11488 0 R (HD.10316) 11489 0 R (HD.1032) 1372 0 R (HD.1033) 1373 0 R (HD.1034) 1374 0 R (HD.1035) 1375 0 R (HD.1036) 1380 0 R (HD.1037) 1381 0 R (HD.1038) 1382 0 R (HD.1039) 1383 0 R (HD.104) 309 0 R (HD.1040) 1384 0 R (HD.1041) 1385 0 R (HD.1042) 1386 0 R (HD.1043) 1387 0 R (HD.1044) 1388 0 R (HD.1045) 1389 0 R (HD.1046) 1390 0 R (HD.1047) 1391 0 R (HD.1048) 1392 0 R (HD.1049) 1393 0 R (HD.105) 310 0 R (HD.1050) 1394 0 R (HD.1051) 1395 0 R (HD.1052) 1396 0 R (HD.1053) 1397 0 R (HD.1054) 1398 0 R (HD.1055) 1399 0 R (HD.1056) 1400 0 R (HD.1057) 1401 0 R ] /Limits [ (HD.10313) (HD.1057) ] >>
+endobj
+11653 0 obj
+<< /Names [ (HD.1058) 1402 0 R (HD.1059) 1403 0 R (HD.106) 311 0 R (HD.1060) 1404 0 R (HD.1061) 1405 0 R (HD.1062) 1406 0 R (HD.1063) 1407 0 R (HD.1064) 1408 0 R (HD.1065) 1409 0 R (HD.1066) 1410 0 R (HD.1067) 1411 0 R (HD.1068) 1412 0 R (HD.1069) 1413 0 R (HD.107) 312 0 R (HD.1070) 1414 0 R (HD.1071) 1415 0 R (HD.1072) 1416 0 R (HD.1073) 1417 0 R (HD.1074) 1418 0 R (HD.1075) 1419 0 R (HD.1076) 1420 0 R (HD.1077) 1421 0 R (HD.1078) 1422 0 R (HD.1079) 1423 0 R (HD.108) 313 0 R (HD.1080) 1424 0 R (HD.1081) 1425 0 R (HD.1082) 1426 0 R (HD.1083) 1431 0 R (HD.1084) 1432 0 R (HD.1085) 1433 0 R (HD.1086) 1434 0 R ] /Limits [ (HD.1058) (HD.1086) ] >>
+endobj
+11654 0 obj
+<< /Names [ (HD.1087) 1435 0 R (HD.1088) 1436 0 R (HD.1089) 1437 0 R (HD.109) 314 0 R (HD.1090) 1438 0 R (HD.1091) 1439 0 R (HD.1092) 1440 0 R (HD.1093) 1441 0 R (HD.1094) 1442 0 R (HD.1095) 1443 0 R (HD.1096) 1444 0 R (HD.1097) 1445 0 R (HD.1098) 1446 0 R (HD.1099) 1447 0 R (HD.11) 199 0 R (HD.110) 315 0 R (HD.1100) 1448 0 R (HD.1101) 1449 0 R (HD.1102) 1450 0 R (HD.1103) 1451 0 R (HD.1104) 1452 0 R (HD.1105) 1453 0 R (HD.1106) 1454 0 R (HD.1107) 1455 0 R (HD.1108) 1456 0 R (HD.1109) 1457 0 R (HD.111) 316 0 R (HD.1110) 1458 0 R (HD.1111) 1459 0 R (HD.1112) 1460 0 R (HD.1113) 1461 0 R (HD.1114) 1462 0 R ] /Limits [ (HD.1087) (HD.1114) ] >>
+endobj
+11655 0 obj
+<< /Names [ (HD.1115) 1463 0 R (HD.1116) 1464 0 R (HD.1117) 1465 0 R (HD.1118) 1466 0 R (HD.1119) 1467 0 R (HD.112) 317 0 R (HD.1120) 1468 0 R (HD.1121) 1469 0 R (HD.1122) 1470 0 R (HD.1123) 1471 0 R (HD.1124) 1472 0 R (HD.1125) 1473 0 R (HD.1126) 1474 0 R (HD.1127) 1475 0 R (HD.1128) 1476 0 R (HD.1129) 1481 0 R (HD.113) 318 0 R (HD.1130) 1482 0 R (HD.1131) 1483 0 R (HD.1132) 1484 0 R (HD.1133) 1485 0 R (HD.1134) 1486 0 R (HD.1135) 1487 0 R (HD.1136) 1488 0 R (HD.1137) 1489 0 R (HD.1138) 1490 0 R (HD.1139) 1491 0 R (HD.114) 319 0 R (HD.1140) 1492 0 R (HD.1141) 1493 0 R (HD.1142) 1494 0 R (HD.1143) 1495 0 R ] /Limits [ (HD.1115) (HD.1143) ] >>
+endobj
+11656 0 obj
+<< /Names [ (HD.1144) 1496 0 R (HD.1145) 1497 0 R (HD.1146) 1498 0 R (HD.1147) 1499 0 R (HD.1148) 1500 0 R (HD.1149) 1501 0 R (HD.115) 320 0 R (HD.1150) 1502 0 R (HD.1151) 1503 0 R (HD.1152) 1504 0 R (HD.1153) 1505 0 R (HD.1154) 1506 0 R (HD.1155) 1507 0 R (HD.1156) 1508 0 R (HD.1157) 1509 0 R (HD.1158) 1510 0 R (HD.1159) 1511 0 R (HD.116) 321 0 R (HD.1160) 1512 0 R (HD.1161) 1513 0 R (HD.1162) 1514 0 R (HD.1163) 1515 0 R (HD.1164) 1516 0 R (HD.1165) 1517 0 R (HD.1166) 1518 0 R (HD.1167) 1519 0 R (HD.1168) 1520 0 R (HD.1169) 1521 0 R (HD.117) 322 0 R (HD.1170) 1522 0 R (HD.1171) 1523 0 R (HD.1172) 1524 0 R ] /Limits [ (HD.1144) (HD.1172) ] >>
+endobj
+11657 0 obj
+<< /Names [ (HD.1173) 1525 0 R (HD.1174) 1526 0 R (HD.1175) 1527 0 R (HD.1176) 1528 0 R (HD.1177) 1533 0 R (HD.1178) 1534 0 R (HD.1179) 1535 0 R (HD.118) 323 0 R (HD.1180) 1536 0 R (HD.1181) 1537 0 R (HD.1182) 1538 0 R (HD.1183) 1539 0 R (HD.1184) 1540 0 R (HD.1185) 1541 0 R (HD.1186) 1542 0 R (HD.1187) 1543 0 R (HD.1188) 1544 0 R (HD.1189) 1545 0 R (HD.119) 324 0 R (HD.1190) 1546 0 R (HD.1191) 1547 0 R (HD.1192) 1548 0 R (HD.1193) 1549 0 R (HD.1194) 1550 0 R (HD.1195) 1551 0 R (HD.1196) 1552 0 R (HD.1197) 1553 0 R (HD.1198) 1554 0 R (HD.1199) 1555 0 R (HD.12) 200 0 R (HD.120) 325 0 R (HD.1200) 1556 0 R ] /Limits [ (HD.1173) (HD.1200) ] >>
+endobj
+11658 0 obj
+<< /Names [ (HD.1201) 1557 0 R (HD.1202) 1558 0 R (HD.1203) 1559 0 R (HD.1204) 1560 0 R (HD.1205) 1561 0 R (HD.1206) 1566 0 R (HD.1207) 1567 0 R (HD.1208) 1568 0 R (HD.1209) 1569 0 R (HD.121) 326 0 R (HD.1210) 1570 0 R (HD.1211) 1571 0 R (HD.1212) 1572 0 R (HD.1213) 1573 0 R (HD.1214) 1574 0 R (HD.1215) 1575 0 R (HD.1216) 1576 0 R (HD.1217) 1577 0 R (HD.1218) 1578 0 R (HD.1219) 1579 0 R (HD.122) 327 0 R (HD.1220) 1580 0 R (HD.1221) 1581 0 R (HD.1222) 1582 0 R (HD.1223) 1583 0 R (HD.1224) 1584 0 R (HD.1225) 1585 0 R (HD.1226) 1586 0 R (HD.1227) 1587 0 R (HD.1228) 1588 0 R (HD.1229) 1589 0 R (HD.123) 328 0 R ] /Limits [ (HD.1201) (HD.123) ] >>
+endobj
+11659 0 obj
+<< /Names [ (HD.1230) 1590 0 R (HD.1231) 1591 0 R (HD.1232) 1592 0 R (HD.1233) 1593 0 R (HD.1234) 1594 0 R (HD.1235) 1595 0 R (HD.1236) 1596 0 R (HD.1237) 1597 0 R (HD.1238) 1598 0 R (HD.1239) 1599 0 R (HD.124) 329 0 R (HD.1240) 1600 0 R (HD.1241) 1601 0 R (HD.1242) 1602 0 R (HD.1243) 1603 0 R (HD.1244) 1604 0 R (HD.1245) 1605 0 R (HD.1246) 1606 0 R (HD.1247) 1607 0 R (HD.1248) 1608 0 R (HD.1249) 1609 0 R (HD.125) 330 0 R (HD.1250) 1614 0 R (HD.1251) 1615 0 R (HD.1252) 1616 0 R (HD.1253) 1617 0 R (HD.1254) 1618 0 R (HD.1255) 1619 0 R (HD.1256) 1620 0 R (HD.1257) 1621 0 R (HD.1258) 1622 0 R (HD.1259) 1623 0 R ] /Limits [ (HD.1230) (HD.1259) ] >>
+endobj
+11660 0 obj
+<< /Names [ (HD.126) 331 0 R (HD.1260) 1624 0 R (HD.1261) 1625 0 R (HD.1262) 1626 0 R (HD.1263) 1627 0 R (HD.1264) 1628 0 R (HD.1265) 1629 0 R (HD.1266) 1630 0 R (HD.1267) 1631 0 R (HD.1268) 1632 0 R (HD.1269) 1633 0 R (HD.127) 332 0 R (HD.1270) 1634 0 R (HD.1271) 1635 0 R (HD.1272) 1636 0 R (HD.1273) 1637 0 R (HD.1274) 1638 0 R (HD.1275) 1639 0 R (HD.1276) 1640 0 R (HD.1277) 1641 0 R (HD.1278) 1642 0 R (HD.1279) 1643 0 R (HD.128) 333 0 R (HD.1280) 1644 0 R (HD.1281) 1645 0 R (HD.1282) 1646 0 R (HD.1283) 1647 0 R (HD.1284) 1648 0 R (HD.1285) 1649 0 R (HD.1286) 1650 0 R (HD.1287) 1651 0 R (HD.1288) 1652 0 R ] /Limits [ (HD.126) (HD.1288) ] >>
+endobj
+11661 0 obj
+<< /Names [ (HD.1289) 1653 0 R (HD.129) 334 0 R (HD.1290) 1654 0 R (HD.1291) 1655 0 R (HD.1292) 1656 0 R (HD.1293) 1657 0 R (HD.1294) 1658 0 R (HD.1295) 1659 0 R (HD.1296) 1660 0 R (HD.1297) 1661 0 R (HD.1298) 1662 0 R (HD.1299) 1663 0 R (HD.13) 201 0 R (HD.130) 335 0 R (HD.1300) 1664 0 R (HD.1301) 1665 0 R (HD.1302) 1666 0 R (HD.1303) 1667 0 R (HD.1304) 1668 0 R (HD.1305) 1669 0 R (HD.1306) 1670 0 R (HD.1307) 1671 0 R (HD.1308) 1672 0 R (HD.1309) 1673 0 R (HD.131) 340 0 R (HD.1310) 1678 0 R (HD.1311) 1679 0 R (HD.1312) 1680 0 R (HD.1313) 1681 0 R (HD.1314) 1682 0 R (HD.1315) 1683 0 R (HD.1316) 1684 0 R ] /Limits [ (HD.1289) (HD.1316) ] >>
+endobj
+11662 0 obj
+<< /Names [ (HD.1317) 1685 0 R (HD.1318) 1686 0 R (HD.1319) 1687 0 R (HD.132) 341 0 R (HD.1320) 1688 0 R (HD.1321) 1689 0 R (HD.1322) 1690 0 R (HD.1323) 1691 0 R (HD.1324) 1692 0 R (HD.1325) 1693 0 R (HD.1326) 1694 0 R (HD.1327) 1695 0 R (HD.1328) 1696 0 R (HD.1329) 1697 0 R (HD.133) 342 0 R (HD.1330) 1698 0 R (HD.1331) 1699 0 R (HD.1332) 1700 0 R (HD.1333) 1701 0 R (HD.1334) 1702 0 R (HD.1335) 1703 0 R (HD.1336) 1704 0 R (HD.1337) 1705 0 R (HD.1338) 1706 0 R (HD.1339) 1707 0 R (HD.134) 343 0 R (HD.1340) 1708 0 R (HD.1341) 1713 0 R (HD.1342) 1714 0 R (HD.1343) 1715 0 R (HD.1344) 1716 0 R (HD.1345) 1717 0 R ] /Limits [ (HD.1317) (HD.1345) ] >>
+endobj
+11663 0 obj
+<< /Names [ (HD.1346) 1718 0 R (HD.1347) 1719 0 R (HD.1348) 1720 0 R (HD.1349) 1721 0 R (HD.135) 344 0 R (HD.1350) 1722 0 R (HD.1351) 1723 0 R (HD.1352) 1724 0 R (HD.1353) 1725 0 R (HD.1354) 1726 0 R (HD.1355) 1727 0 R (HD.1356) 1728 0 R (HD.1357) 1729 0 R (HD.1358) 1730 0 R (HD.1359) 1731 0 R (HD.136) 345 0 R (HD.1360) 1732 0 R (HD.1361) 1733 0 R (HD.1362) 1734 0 R (HD.1363) 1735 0 R (HD.1364) 1736 0 R (HD.1365) 1737 0 R (HD.1366) 1738 0 R (HD.1367) 1739 0 R (HD.1368) 1740 0 R (HD.1369) 1741 0 R (HD.137) 346 0 R (HD.1370) 1742 0 R (HD.1371) 1743 0 R (HD.1372) 1744 0 R (HD.1373) 1745 0 R (HD.1374) 1746 0 R ] /Limits [ (HD.1346) (HD.1374) ] >>
+endobj
+11664 0 obj
+<< /Names [ (HD.1375) 1747 0 R (HD.1376) 1748 0 R (HD.1377) 1749 0 R (HD.1378) 1750 0 R (HD.1379) 1751 0 R (HD.138) 347 0 R (HD.1380) 1752 0 R (HD.1381) 1753 0 R (HD.1382) 1754 0 R (HD.1383) 1755 0 R (HD.1384) 1756 0 R (HD.1385) 1757 0 R (HD.1386) 1758 0 R (HD.1387) 1759 0 R (HD.1388) 1760 0 R (HD.1389) 1761 0 R (HD.139) 348 0 R (HD.1390) 1766 0 R (HD.1391) 1767 0 R (HD.1392) 1768 0 R (HD.1393) 1769 0 R (HD.1394) 1770 0 R (HD.1395) 1771 0 R (HD.1396) 1772 0 R (HD.1397) 1773 0 R (HD.1398) 1774 0 R (HD.1399) 1775 0 R (HD.14) 209 0 R (HD.140) 349 0 R (HD.1400) 1776 0 R (HD.1401) 1777 0 R (HD.1402) 1778 0 R ] /Limits [ (HD.1375) (HD.1402) ] >>
+endobj
+11665 0 obj
+<< /Names [ (HD.1403) 1779 0 R (HD.1404) 1780 0 R (HD.1405) 1781 0 R (HD.1406) 1782 0 R (HD.1407) 1783 0 R (HD.1408) 1784 0 R (HD.1409) 1785 0 R (HD.141) 350 0 R (HD.1410) 1786 0 R (HD.1411) 1787 0 R (HD.1412) 1788 0 R (HD.1413) 1789 0 R (HD.1414) 1790 0 R (HD.1415) 1791 0 R (HD.1416) 1793 0 R (HD.1417) 1794 0 R (HD.1418) 1795 0 R (HD.1419) 1796 0 R (HD.142) 351 0 R (HD.1420) 1797 0 R (HD.1421) 1798 0 R (HD.1422) 1799 0 R (HD.1423) 1800 0 R (HD.1424) 1801 0 R (HD.1425) 1802 0 R (HD.1426) 1803 0 R (HD.1427) 1809 0 R (HD.1428) 1810 0 R (HD.1429) 1811 0 R (HD.143) 352 0 R (HD.1430) 1812 0 R (HD.1431) 1813 0 R ] /Limits [ (HD.1403) (HD.1431) ] >>
+endobj
+11666 0 obj
+<< /Names [ (HD.1432) 1814 0 R (HD.1433) 1815 0 R (HD.1434) 1816 0 R (HD.1435) 1817 0 R (HD.1436) 1818 0 R (HD.1437) 1819 0 R (HD.1438) 1820 0 R (HD.1439) 1821 0 R (HD.144) 353 0 R (HD.1440) 1822 0 R (HD.1441) 1823 0 R (HD.1442) 1824 0 R (HD.1443) 1825 0 R (HD.1444) 1826 0 R (HD.1445) 1827 0 R (HD.1446) 1828 0 R (HD.1447) 1829 0 R (HD.1448) 1830 0 R (HD.1449) 1831 0 R (HD.145) 354 0 R (HD.1450) 1832 0 R (HD.1451) 1833 0 R (HD.1452) 1834 0 R (HD.1453) 1835 0 R (HD.1454) 1836 0 R (HD.1455) 1837 0 R (HD.1456) 1838 0 R (HD.1457) 1839 0 R (HD.1458) 1840 0 R (HD.1459) 1841 0 R (HD.146) 355 0 R (HD.1460) 1842 0 R ] /Limits [ (HD.1432) (HD.1460) ] >>
+endobj
+11667 0 obj
+<< /Names [ (HD.1461) 1843 0 R (HD.1462) 1844 0 R (HD.1463) 1845 0 R (HD.1464) 1846 0 R (HD.1465) 1847 0 R (HD.1466) 1848 0 R (HD.1467) 1849 0 R (HD.1468) 1850 0 R (HD.1469) 1851 0 R (HD.147) 356 0 R (HD.1470) 1852 0 R (HD.1471) 1853 0 R (HD.1472) 1854 0 R (HD.1473) 1855 0 R (HD.1474) 1856 0 R (HD.1475) 1857 0 R (HD.1476) 1862 0 R (HD.1477) 1863 0 R (HD.1478) 1864 0 R (HD.1479) 1865 0 R (HD.148) 357 0 R (HD.1480) 1866 0 R (HD.1481) 1867 0 R (HD.1482) 1868 0 R (HD.1483) 1869 0 R (HD.1484) 1870 0 R (HD.1485) 1871 0 R (HD.1486) 1872 0 R (HD.1487) 1873 0 R (HD.1488) 1874 0 R (HD.1489) 1875 0 R (HD.149) 358 0 R ] /Limits [ (HD.1461) (HD.149) ] >>
+endobj
+11668 0 obj
+<< /Names [ (HD.1490) 1876 0 R (HD.1491) 1877 0 R (HD.1492) 1878 0 R (HD.1493) 1879 0 R (HD.1494) 1880 0 R (HD.1495) 1881 0 R (HD.1496) 1882 0 R (HD.1497) 1883 0 R (HD.1498) 1884 0 R (HD.1499) 1885 0 R (HD.15) 210 0 R (HD.150) 359 0 R (HD.1500) 1886 0 R (HD.1501) 1887 0 R (HD.1502) 1888 0 R (HD.1503) 1889 0 R (HD.1504) 1890 0 R (HD.1505) 1891 0 R (HD.1506) 1892 0 R (HD.1507) 1893 0 R (HD.1508) 1894 0 R (HD.1509) 1895 0 R (HD.151) 360 0 R (HD.1510) 1896 0 R (HD.1511) 1897 0 R (HD.1512) 1898 0 R (HD.1513) 1899 0 R (HD.1514) 1900 0 R (HD.1515) 1901 0 R (HD.1516) 1902 0 R (HD.1517) 1903 0 R (HD.1518) 1904 0 R ] /Limits [ (HD.1490) (HD.1518) ] >>
+endobj
+11669 0 obj
+<< /Names [ (HD.1519) 1905 0 R (HD.152) 361 0 R (HD.1520) 1906 0 R (HD.1521) 1907 0 R (HD.1522) 1908 0 R (HD.1523) 1909 0 R (HD.1524) 1910 0 R (HD.1525) 1911 0 R (HD.1526) 1918 0 R (HD.1527) 1919 0 R (HD.1528) 1920 0 R (HD.1529) 1921 0 R (HD.153) 362 0 R (HD.1530) 1922 0 R (HD.1531) 1923 0 R (HD.1532) 1924 0 R (HD.1533) 1925 0 R (HD.1534) 1926 0 R (HD.1535) 1927 0 R (HD.1536) 1928 0 R (HD.1537) 1929 0 R (HD.1538) 1930 0 R (HD.1539) 1931 0 R (HD.154) 363 0 R (HD.1540) 1932 0 R (HD.1541) 1933 0 R (HD.1542) 1934 0 R (HD.1543) 1935 0 R (HD.1544) 1936 0 R (HD.1545) 1937 0 R (HD.1546) 1938 0 R (HD.1547) 1939 0 R ] /Limits [ (HD.1519) (HD.1547) ] >>
+endobj
+11670 0 obj
+<< /Names [ (HD.1548) 1940 0 R (HD.1549) 1941 0 R (HD.155) 364 0 R (HD.1550) 1942 0 R (HD.1551) 1943 0 R (HD.1552) 1944 0 R (HD.1553) 1945 0 R (HD.1554) 1946 0 R (HD.1555) 1947 0 R (HD.1556) 1948 0 R (HD.1557) 1949 0 R (HD.1558) 1950 0 R (HD.1559) 1951 0 R (HD.156) 365 0 R (HD.1560) 1952 0 R (HD.1561) 1953 0 R (HD.1562) 1954 0 R (HD.1563) 1962 0 R (HD.1564) 1963 0 R (HD.1565) 1964 0 R (HD.1566) 1965 0 R (HD.1567) 1966 0 R (HD.1568) 1967 0 R (HD.1569) 1968 0 R (HD.157) 366 0 R (HD.1570) 1969 0 R (HD.1571) 1970 0 R (HD.1572) 1971 0 R (HD.1573) 1972 0 R (HD.1574) 1973 0 R (HD.1575) 1974 0 R (HD.1576) 1975 0 R ] /Limits [ (HD.1548) (HD.1576) ] >>
+endobj
+11671 0 obj
+<< /Names [ (HD.1577) 1976 0 R (HD.1578) 1977 0 R (HD.1579) 1978 0 R (HD.158) 367 0 R (HD.1580) 1979 0 R (HD.1581) 1980 0 R (HD.1582) 1981 0 R (HD.1583) 1982 0 R (HD.1584) 1983 0 R (HD.1585) 1984 0 R (HD.1586) 1985 0 R (HD.1587) 1986 0 R (HD.1588) 1987 0 R (HD.1589) 1988 0 R (HD.159) 368 0 R (HD.1590) 1989 0 R (HD.1591) 1990 0 R (HD.1592) 1991 0 R (HD.1593) 1992 0 R (HD.1594) 1993 0 R (HD.1595) 1994 0 R (HD.1596) 1995 0 R (HD.1597) 1996 0 R (HD.1598) 1997 0 R (HD.1599) 1998 0 R (HD.16) 211 0 R (HD.160) 369 0 R (HD.1600) 1999 0 R (HD.1601) 2000 0 R (HD.1602) 2001 0 R (HD.1603) 2002 0 R (HD.1604) 2007 0 R ] /Limits [ (HD.1577) (HD.1604) ] >>
+endobj
+11672 0 obj
+<< /Names [ (HD.1605) 2008 0 R (HD.1606) 2009 0 R (HD.1607) 2010 0 R (HD.1608) 2011 0 R (HD.1609) 2012 0 R (HD.161) 370 0 R (HD.1610) 2013 0 R (HD.1611) 2014 0 R (HD.1612) 2015 0 R (HD.1613) 2016 0 R (HD.1614) 2017 0 R (HD.1615) 2018 0 R (HD.1616) 2019 0 R (HD.1617) 2020 0 R (HD.1618) 2021 0 R (HD.1619) 2022 0 R (HD.162) 371 0 R (HD.1620) 2023 0 R (HD.1621) 2024 0 R (HD.1622) 2025 0 R (HD.1623) 2026 0 R (HD.1624) 2027 0 R (HD.1625) 2028 0 R (HD.1626) 2029 0 R (HD.1627) 2030 0 R (HD.1628) 2031 0 R (HD.1629) 2032 0 R (HD.163) 372 0 R (HD.1630) 2033 0 R (HD.1631) 2034 0 R (HD.1632) 2035 0 R (HD.1633) 2036 0 R ] /Limits [ (HD.1605) (HD.1633) ] >>
+endobj
+11673 0 obj
+<< /Names [ (HD.1634) 2037 0 R (HD.1635) 2038 0 R (HD.1636) 2039 0 R (HD.1637) 2040 0 R (HD.1638) 2041 0 R (HD.1639) 2042 0 R (HD.164) 373 0 R (HD.1640) 2043 0 R (HD.1641) 2044 0 R (HD.1642) 2045 0 R (HD.1643) 2046 0 R (HD.1644) 2047 0 R (HD.1645) 2048 0 R (HD.1646) 2049 0 R (HD.1647) 2050 0 R (HD.1648) 2051 0 R (HD.1649) 2052 0 R (HD.165) 374 0 R (HD.1650) 2053 0 R (HD.1651) 2054 0 R (HD.1652) 2059 0 R (HD.1653) 2060 0 R (HD.1654) 2061 0 R (HD.1655) 2062 0 R (HD.1656) 2063 0 R (HD.1657) 2064 0 R (HD.1658) 2065 0 R (HD.1659) 2066 0 R (HD.166) 375 0 R (HD.1660) 2067 0 R (HD.1661) 2068 0 R (HD.1662) 2069 0 R ] /Limits [ (HD.1634) (HD.1662) ] >>
+endobj
+11674 0 obj
+<< /Names [ (HD.1663) 2070 0 R (HD.1664) 2071 0 R (HD.1665) 2072 0 R (HD.1666) 2073 0 R (HD.1667) 2074 0 R (HD.1668) 2075 0 R (HD.1669) 2076 0 R (HD.167) 376 0 R (HD.1670) 2077 0 R (HD.1671) 2078 0 R (HD.1672) 2079 0 R (HD.1673) 2080 0 R (HD.1674) 2081 0 R (HD.1675) 2082 0 R (HD.1676) 2083 0 R (HD.1677) 2084 0 R (HD.1678) 2085 0 R (HD.1679) 2086 0 R (HD.168) 381 0 R (HD.1680) 2087 0 R (HD.1681) 2088 0 R (HD.1682) 2089 0 R (HD.1683) 2090 0 R (HD.1684) 2091 0 R (HD.1685) 2096 0 R (HD.1686) 2097 0 R (HD.1687) 2098 0 R (HD.1688) 2099 0 R (HD.1689) 2100 0 R (HD.169) 382 0 R (HD.1690) 2101 0 R (HD.1691) 2102 0 R ] /Limits [ (HD.1663) (HD.1691) ] >>
+endobj
+11675 0 obj
+<< /Names [ (HD.1692) 2103 0 R (HD.1693) 2104 0 R (HD.1694) 2105 0 R (HD.1695) 2106 0 R (HD.1696) 2107 0 R (HD.1697) 2108 0 R (HD.1698) 2109 0 R (HD.1699) 2110 0 R (HD.17) 212 0 R (HD.170) 383 0 R (HD.1700) 2111 0 R (HD.1701) 2112 0 R (HD.1702) 2113 0 R (HD.1703) 2114 0 R (HD.1704) 2115 0 R (HD.1705) 2116 0 R (HD.1706) 2117 0 R (HD.1707) 2118 0 R (HD.1708) 2119 0 R (HD.1709) 2120 0 R (HD.171) 384 0 R (HD.1710) 2121 0 R (HD.1711) 2122 0 R (HD.1712) 2123 0 R (HD.1713) 2124 0 R (HD.1714) 2125 0 R (HD.1715) 2126 0 R (HD.1716) 2127 0 R (HD.1717) 2128 0 R (HD.1718) 2133 0 R (HD.1719) 2134 0 R (HD.172) 385 0 R ] /Limits [ (HD.1692) (HD.172) ] >>
+endobj
+11676 0 obj
+<< /Names [ (HD.1720) 2135 0 R (HD.1721) 2136 0 R (HD.1722) 2137 0 R (HD.1723) 2138 0 R (HD.1724) 2139 0 R (HD.1725) 2140 0 R (HD.1726) 2141 0 R (HD.1727) 2142 0 R (HD.1728) 2143 0 R (HD.1729) 2144 0 R (HD.173) 386 0 R (HD.1730) 2145 0 R (HD.1731) 2146 0 R (HD.1732) 2147 0 R (HD.1733) 2148 0 R (HD.1734) 2149 0 R (HD.1735) 2150 0 R (HD.1736) 2151 0 R (HD.1737) 2152 0 R (HD.1738) 2153 0 R (HD.1739) 2154 0 R (HD.174) 387 0 R (HD.1740) 2155 0 R (HD.1741) 2156 0 R (HD.1742) 2157 0 R (HD.1743) 2158 0 R (HD.1744) 2159 0 R (HD.1745) 2160 0 R (HD.1746) 2161 0 R (HD.1747) 2166 0 R (HD.1748) 2167 0 R (HD.1749) 2168 0 R ] /Limits [ (HD.1720) (HD.1749) ] >>
+endobj
+11677 0 obj
+<< /Names [ (HD.175) 388 0 R (HD.1750) 2169 0 R (HD.1751) 2170 0 R (HD.1752) 2171 0 R (HD.1753) 2172 0 R (HD.1754) 2173 0 R (HD.1755) 2174 0 R (HD.1756) 2175 0 R (HD.1757) 2176 0 R (HD.1758) 2177 0 R (HD.1759) 2178 0 R (HD.176) 389 0 R (HD.1760) 2179 0 R (HD.1761) 2180 0 R (HD.1762) 2181 0 R (HD.1763) 2182 0 R (HD.1764) 2183 0 R (HD.1765) 2184 0 R (HD.1766) 2185 0 R (HD.1767) 2186 0 R (HD.1768) 2187 0 R (HD.1769) 2188 0 R (HD.177) 390 0 R (HD.1770) 2189 0 R (HD.1771) 2190 0 R (HD.1772) 2191 0 R (HD.1773) 2192 0 R (HD.1774) 2193 0 R (HD.1775) 2194 0 R (HD.1776) 2195 0 R (HD.1777) 2196 0 R (HD.1778) 2197 0 R ] /Limits [ (HD.175) (HD.1778) ] >>
+endobj
+11678 0 obj
+<< /Names [ (HD.1779) 2198 0 R (HD.178) 391 0 R (HD.1780) 2199 0 R (HD.1781) 2200 0 R (HD.1782) 2201 0 R (HD.1783) 2202 0 R (HD.1784) 2203 0 R (HD.1785) 2204 0 R (HD.1786) 2205 0 R (HD.1787) 2206 0 R (HD.1788) 2207 0 R (HD.1789) 2208 0 R (HD.179) 392 0 R (HD.1790) 2209 0 R (HD.1791) 2210 0 R (HD.1792) 2215 0 R (HD.1793) 2216 0 R (HD.1794) 2217 0 R (HD.1795) 2218 0 R (HD.1796) 2219 0 R (HD.1797) 2220 0 R (HD.1798) 2221 0 R (HD.1799) 2222 0 R (HD.18) 213 0 R (HD.180) 393 0 R (HD.1800) 2223 0 R (HD.1801) 2224 0 R (HD.1802) 2225 0 R (HD.1803) 2226 0 R (HD.1804) 2227 0 R (HD.1805) 2228 0 R (HD.1806) 2229 0 R ] /Limits [ (HD.1779) (HD.1806) ] >>
+endobj
+11679 0 obj
+<< /Names [ (HD.1807) 2230 0 R (HD.1808) 2231 0 R (HD.1809) 2232 0 R (HD.181) 394 0 R (HD.1810) 2233 0 R (HD.1811) 2234 0 R (HD.1812) 2235 0 R (HD.1813) 2236 0 R (HD.1814) 2237 0 R (HD.1815) 2238 0 R (HD.1816) 2239 0 R (HD.1817) 2240 0 R (HD.1818) 2241 0 R (HD.1819) 2242 0 R (HD.182) 395 0 R (HD.1820) 2243 0 R (HD.1821) 2244 0 R (HD.1822) 2245 0 R (HD.1823) 2246 0 R (HD.1824) 2247 0 R (HD.1825) 2248 0 R (HD.1826) 2249 0 R (HD.1827) 2250 0 R (HD.1828) 2251 0 R (HD.1829) 2252 0 R (HD.183) 396 0 R (HD.1830) 2259 0 R (HD.1831) 2260 0 R (HD.1832) 2261 0 R (HD.1833) 2262 0 R (HD.1834) 2263 0 R (HD.1835) 2264 0 R ] /Limits [ (HD.1807) (HD.1835) ] >>
+endobj
+11680 0 obj
+<< /Names [ (HD.1836) 2265 0 R (HD.1837) 2266 0 R (HD.1838) 2267 0 R (HD.1839) 2268 0 R (HD.184) 397 0 R (HD.1840) 2269 0 R (HD.1841) 2270 0 R (HD.1842) 2271 0 R (HD.1843) 2272 0 R (HD.1844) 2273 0 R (HD.1845) 2274 0 R (HD.1846) 2275 0 R (HD.1847) 2276 0 R (HD.1848) 2277 0 R (HD.1849) 2278 0 R (HD.185) 398 0 R (HD.1850) 2279 0 R (HD.1851) 2280 0 R (HD.1852) 2281 0 R (HD.1853) 2282 0 R (HD.1854) 2283 0 R (HD.1855) 2284 0 R (HD.1856) 2285 0 R (HD.1857) 2286 0 R (HD.1858) 2287 0 R (HD.1859) 2288 0 R (HD.186) 399 0 R (HD.1860) 2289 0 R (HD.1861) 2290 0 R (HD.1862) 2291 0 R (HD.1863) 2292 0 R (HD.1864) 2293 0 R ] /Limits [ (HD.1836) (HD.1864) ] >>
+endobj
+11681 0 obj
+<< /Names [ (HD.1865) 2294 0 R (HD.1866) 2295 0 R (HD.1867) 2296 0 R (HD.1868) 2297 0 R (HD.1869) 2298 0 R (HD.187) 400 0 R (HD.1870) 2299 0 R (HD.1871) 2300 0 R (HD.1872) 2301 0 R (HD.1873) 2302 0 R (HD.1874) 2303 0 R (HD.1875) 2304 0 R (HD.1876) 2305 0 R (HD.1877) 2306 0 R (HD.1878) 2307 0 R (HD.1879) 2308 0 R (HD.188) 401 0 R (HD.1880) 2309 0 R (HD.1881) 2310 0 R (HD.1882) 2311 0 R (HD.1883) 2312 0 R (HD.1884) 2313 0 R (HD.1885) 2321 0 R (HD.1886) 2322 0 R (HD.1887) 2323 0 R (HD.1888) 2324 0 R (HD.1889) 2325 0 R (HD.189) 402 0 R (HD.1890) 2326 0 R (HD.1891) 2327 0 R (HD.1892) 2328 0 R (HD.1893) 2329 0 R ] /Limits [ (HD.1865) (HD.1893) ] >>
+endobj
+11682 0 obj
+<< /Names [ (HD.1894) 2330 0 R (HD.1895) 2331 0 R (HD.1896) 2332 0 R (HD.1897) 2333 0 R (HD.1898) 2334 0 R (HD.1899) 2335 0 R (HD.19) 214 0 R (HD.190) 403 0 R (HD.1900) 2336 0 R (HD.1901) 2337 0 R (HD.1902) 2338 0 R (HD.1903) 2339 0 R (HD.1904) 2340 0 R (HD.1905) 2341 0 R (HD.1906) 2342 0 R (HD.1907) 2343 0 R (HD.1908) 2344 0 R (HD.1909) 2345 0 R (HD.191) 404 0 R (HD.1910) 2346 0 R (HD.1911) 2347 0 R (HD.1912) 2348 0 R (HD.1913) 2349 0 R (HD.1914) 2350 0 R (HD.1915) 2351 0 R (HD.1916) 2352 0 R (HD.1917) 2353 0 R (HD.1918) 2354 0 R (HD.1919) 2355 0 R (HD.192) 405 0 R (HD.1920) 2356 0 R (HD.1921) 2357 0 R ] /Limits [ (HD.1894) (HD.1921) ] >>
+endobj
+11683 0 obj
+<< /Names [ (HD.1922) 2358 0 R (HD.1923) 2359 0 R (HD.1924) 2360 0 R (HD.1925) 2361 0 R (HD.1926) 2362 0 R (HD.1927) 2363 0 R (HD.1928) 2364 0 R (HD.1929) 2365 0 R (HD.193) 406 0 R (HD.1930) 2366 0 R (HD.1931) 2367 0 R (HD.1932) 2368 0 R (HD.1933) 2373 0 R (HD.1934) 2374 0 R (HD.1935) 2375 0 R (HD.1936) 2376 0 R (HD.1937) 2377 0 R (HD.1938) 2378 0 R (HD.1939) 2379 0 R (HD.194) 407 0 R (HD.1940) 2380 0 R (HD.1941) 2381 0 R (HD.1942) 2382 0 R (HD.1943) 2383 0 R (HD.1944) 2384 0 R (HD.1945) 2385 0 R (HD.1946) 2386 0 R (HD.1947) 2387 0 R (HD.1948) 2388 0 R (HD.1949) 2389 0 R (HD.195) 408 0 R (HD.1950) 2390 0 R ] /Limits [ (HD.1922) (HD.1950) ] >>
+endobj
+11684 0 obj
+<< /Names [ (HD.1951) 2391 0 R (HD.1952) 2392 0 R (HD.1953) 2393 0 R (HD.1954) 2394 0 R (HD.1955) 2395 0 R (HD.1956) 2396 0 R (HD.1957) 2397 0 R (HD.1958) 2398 0 R (HD.1959) 2399 0 R (HD.196) 409 0 R (HD.1960) 2400 0 R (HD.1961) 2401 0 R (HD.1962) 2402 0 R (HD.1963) 2403 0 R (HD.1964) 2404 0 R (HD.1965) 2405 0 R (HD.1966) 2406 0 R (HD.1967) 2413 0 R (HD.1968) 2414 0 R (HD.1969) 2415 0 R (HD.197) 410 0 R (HD.1970) 2416 0 R (HD.1971) 2417 0 R (HD.1972) 2418 0 R (HD.1973) 2419 0 R (HD.1974) 2420 0 R (HD.1975) 2421 0 R (HD.1976) 2422 0 R (HD.1977) 2423 0 R (HD.1978) 2424 0 R (HD.1979) 2425 0 R (HD.198) 411 0 R ] /Limits [ (HD.1951) (HD.198) ] >>
+endobj
+11685 0 obj
+<< /Names [ (HD.1980) 2426 0 R (HD.1981) 2427 0 R (HD.1982) 2428 0 R (HD.1983) 2429 0 R (HD.1984) 2430 0 R (HD.1985) 2431 0 R (HD.1986) 2432 0 R (HD.1987) 2433 0 R (HD.1988) 2434 0 R (HD.1989) 2435 0 R (HD.199) 412 0 R (HD.1990) 2436 0 R (HD.1991) 2437 0 R (HD.1992) 2438 0 R (HD.1993) 2439 0 R (HD.1994) 2440 0 R (HD.1995) 2441 0 R (HD.1996) 2442 0 R (HD.1997) 2443 0 R (HD.1998) 2444 0 R (HD.1999) 2445 0 R (HD.2) 190 0 R (HD.20) 215 0 R (HD.200) 413 0 R (HD.2000) 2446 0 R (HD.2001) 2447 0 R (HD.2002) 2448 0 R (HD.2003) 2449 0 R (HD.2004) 2450 0 R (HD.2005) 2451 0 R (HD.2006) 2452 0 R (HD.2007) 2453 0 R ] /Limits [ (HD.1980) (HD.2007) ] >>
+endobj
+11686 0 obj
+<< /Names [ (HD.2008) 2454 0 R (HD.2009) 2455 0 R (HD.201) 414 0 R (HD.2010) 2456 0 R (HD.2011) 2457 0 R (HD.2012) 2458 0 R (HD.2013) 2465 0 R (HD.2014) 2466 0 R (HD.2015) 2467 0 R (HD.2016) 2468 0 R (HD.2017) 2469 0 R (HD.2018) 2470 0 R (HD.2019) 2471 0 R (HD.202) 415 0 R (HD.2020) 2472 0 R (HD.2021) 2473 0 R (HD.2022) 2474 0 R (HD.2023) 2475 0 R (HD.2024) 2476 0 R (HD.2025) 2477 0 R (HD.2026) 2478 0 R (HD.2027) 2479 0 R (HD.2028) 2480 0 R (HD.2029) 2481 0 R (HD.203) 416 0 R (HD.2030) 2482 0 R (HD.2031) 2483 0 R (HD.2032) 2484 0 R (HD.2033) 2485 0 R (HD.2034) 2486 0 R (HD.2035) 2487 0 R (HD.2036) 2488 0 R ] /Limits [ (HD.2008) (HD.2036) ] >>
+endobj
+11687 0 obj
+<< /Names [ (HD.2037) 2489 0 R (HD.2038) 2490 0 R (HD.2039) 2491 0 R (HD.204) 417 0 R (HD.2040) 2492 0 R (HD.2041) 2493 0 R (HD.2042) 2494 0 R (HD.2043) 2495 0 R (HD.2044) 2496 0 R (HD.2045) 2497 0 R (HD.2046) 2498 0 R (HD.2047) 2499 0 R (HD.2048) 2500 0 R (HD.2049) 2501 0 R (HD.205) 418 0 R (HD.2050) 2502 0 R (HD.2051) 2503 0 R (HD.2052) 2504 0 R (HD.2053) 2505 0 R (HD.2054) 2506 0 R (HD.2055) 2507 0 R (HD.2056) 2508 0 R (HD.2057) 2517 0 R (HD.2058) 2518 0 R (HD.2059) 2519 0 R (HD.206) 419 0 R (HD.2060) 2520 0 R (HD.2061) 2521 0 R (HD.2062) 2522 0 R (HD.2063) 2523 0 R (HD.2064) 2524 0 R (HD.2065) 2525 0 R ] /Limits [ (HD.2037) (HD.2065) ] >>
+endobj
+11688 0 obj
+<< /Names [ (HD.2066) 2526 0 R (HD.2067) 2527 0 R (HD.2068) 2528 0 R (HD.2069) 2529 0 R (HD.207) 420 0 R (HD.2070) 2530 0 R (HD.2071) 2531 0 R (HD.2072) 2532 0 R (HD.2073) 2533 0 R (HD.2074) 2534 0 R (HD.2075) 2535 0 R (HD.2076) 2536 0 R (HD.2077) 2537 0 R (HD.2078) 2538 0 R (HD.2079) 2539 0 R (HD.208) 421 0 R (HD.2080) 2540 0 R (HD.2081) 2541 0 R (HD.2082) 2542 0 R (HD.2083) 2543 0 R (HD.2084) 2544 0 R (HD.2085) 2545 0 R (HD.2086) 2546 0 R (HD.2087) 2547 0 R (HD.2088) 2548 0 R (HD.2089) 2549 0 R (HD.209) 422 0 R (HD.2090) 2550 0 R (HD.2091) 2551 0 R (HD.2092) 2552 0 R (HD.2093) 2553 0 R (HD.2094) 2554 0 R ] /Limits [ (HD.2066) (HD.2094) ] >>
+endobj
+11689 0 obj
+<< /Names [ (HD.2095) 2555 0 R (HD.2096) 2556 0 R (HD.2097) 2557 0 R (HD.2098) 2558 0 R (HD.2099) 2559 0 R (HD.21) 216 0 R (HD.210) 423 0 R (HD.2100) 2560 0 R (HD.2101) 2561 0 R (HD.2102) 2562 0 R (HD.2103) 2563 0 R (HD.2104) 2570 0 R (HD.2105) 2571 0 R (HD.2106) 2572 0 R (HD.2107) 2573 0 R (HD.2108) 2574 0 R (HD.2109) 2575 0 R (HD.211) 429 0 R (HD.2110) 2576 0 R (HD.2111) 2577 0 R (HD.2112) 2578 0 R (HD.2113) 2579 0 R (HD.2114) 2580 0 R (HD.2115) 2581 0 R (HD.2116) 2582 0 R (HD.2117) 2583 0 R (HD.2118) 2584 0 R (HD.2119) 2585 0 R (HD.212) 430 0 R (HD.2120) 2586 0 R (HD.2121) 2587 0 R (HD.2122) 2588 0 R ] /Limits [ (HD.2095) (HD.2122) ] >>
+endobj
+11690 0 obj
+<< /Names [ (HD.2123) 2589 0 R (HD.2124) 2590 0 R (HD.2125) 2591 0 R (HD.2126) 2592 0 R (HD.2127) 2593 0 R (HD.2128) 2594 0 R (HD.2129) 2595 0 R (HD.213) 431 0 R (HD.2130) 2596 0 R (HD.2131) 2597 0 R (HD.2132) 2598 0 R (HD.2133) 2599 0 R (HD.2134) 2600 0 R (HD.2135) 2601 0 R (HD.2136) 2602 0 R (HD.2137) 2603 0 R (HD.2138) 2604 0 R (HD.2139) 2609 0 R (HD.214) 432 0 R (HD.2140) 2610 0 R (HD.2141) 2611 0 R (HD.2142) 2612 0 R (HD.2143) 2613 0 R (HD.2144) 2614 0 R (HD.2145) 2615 0 R (HD.2146) 2616 0 R (HD.2147) 2617 0 R (HD.2148) 2618 0 R (HD.2149) 2619 0 R (HD.215) 433 0 R (HD.2150) 2620 0 R (HD.2151) 2621 0 R ] /Limits [ (HD.2123) (HD.2151) ] >>
+endobj
+11691 0 obj
+<< /Names [ (HD.2152) 2622 0 R (HD.2153) 2623 0 R (HD.2154) 2624 0 R (HD.2155) 2625 0 R (HD.2156) 2626 0 R (HD.2157) 2627 0 R (HD.2158) 2628 0 R (HD.2159) 2629 0 R (HD.216) 434 0 R (HD.2160) 2630 0 R (HD.2161) 2631 0 R (HD.2162) 2632 0 R (HD.2163) 2633 0 R (HD.2164) 2634 0 R (HD.2165) 2635 0 R (HD.2166) 2636 0 R (HD.2167) 2637 0 R (HD.2168) 2638 0 R (HD.2169) 2639 0 R (HD.217) 435 0 R (HD.2170) 2640 0 R (HD.2171) 2641 0 R (HD.2172) 2642 0 R (HD.2173) 2643 0 R (HD.2174) 2644 0 R (HD.2175) 2645 0 R (HD.2176) 2646 0 R (HD.2177) 2647 0 R (HD.2178) 2648 0 R (HD.2179) 2649 0 R (HD.218) 436 0 R (HD.2180) 2650 0 R ] /Limits [ (HD.2152) (HD.2180) ] >>
+endobj
+11692 0 obj
+<< /Names [ (HD.2181) 2651 0 R (HD.2182) 2657 0 R (HD.2183) 2658 0 R (HD.2184) 2659 0 R (HD.2185) 2660 0 R (HD.2186) 2661 0 R (HD.2187) 2662 0 R (HD.2188) 2663 0 R (HD.2189) 2664 0 R (HD.219) 437 0 R (HD.2190) 2665 0 R (HD.2191) 2666 0 R (HD.2192) 2667 0 R (HD.2193) 2668 0 R (HD.2194) 2669 0 R (HD.2195) 2670 0 R (HD.2196) 2671 0 R (HD.2197) 2672 0 R (HD.2198) 2673 0 R (HD.2199) 2674 0 R (HD.22) 217 0 R (HD.220) 438 0 R (HD.2200) 2675 0 R (HD.2201) 2676 0 R (HD.2202) 2677 0 R (HD.2203) 2678 0 R (HD.2204) 2679 0 R (HD.2205) 2680 0 R (HD.2206) 2681 0 R (HD.2207) 2682 0 R (HD.2208) 2683 0 R (HD.2209) 2684 0 R ] /Limits [ (HD.2181) (HD.2209) ] >>
+endobj
+11693 0 obj
+<< /Names [ (HD.221) 439 0 R (HD.2210) 2685 0 R (HD.2211) 2686 0 R (HD.2212) 2687 0 R (HD.2213) 2688 0 R (HD.2214) 2689 0 R (HD.2215) 2690 0 R (HD.2216) 2691 0 R (HD.2217) 2692 0 R (HD.2218) 2693 0 R (HD.2219) 2694 0 R (HD.222) 440 0 R (HD.2220) 2695 0 R (HD.2221) 2696 0 R (HD.2222) 2697 0 R (HD.2223) 2698 0 R (HD.2224) 2699 0 R (HD.2225) 2700 0 R (HD.2226) 2707 0 R (HD.2227) 2708 0 R (HD.2228) 2709 0 R (HD.2229) 2710 0 R (HD.223) 441 0 R (HD.2230) 2711 0 R (HD.2231) 2712 0 R (HD.2232) 2713 0 R (HD.2233) 2714 0 R (HD.2234) 2715 0 R (HD.2235) 2716 0 R (HD.2236) 2717 0 R (HD.2237) 2718 0 R (HD.2238) 2719 0 R ] /Limits [ (HD.221) (HD.2238) ] >>
+endobj
+11694 0 obj
+<< /Names [ (HD.2239) 2720 0 R (HD.224) 442 0 R (HD.2240) 2721 0 R (HD.2241) 2722 0 R (HD.2242) 2723 0 R (HD.2243) 2724 0 R (HD.2244) 2725 0 R (HD.2245) 2726 0 R (HD.2246) 2727 0 R (HD.2247) 2728 0 R (HD.2248) 2729 0 R (HD.2249) 2730 0 R (HD.225) 443 0 R (HD.2250) 2731 0 R (HD.2251) 2732 0 R (HD.2252) 2733 0 R (HD.2253) 2734 0 R (HD.2254) 2735 0 R (HD.2255) 2736 0 R (HD.2256) 2737 0 R (HD.2257) 2738 0 R (HD.2258) 2739 0 R (HD.2259) 2740 0 R (HD.226) 444 0 R (HD.2260) 2741 0 R (HD.2261) 2742 0 R (HD.2262) 2743 0 R (HD.2263) 2744 0 R (HD.2264) 2745 0 R (HD.2265) 2746 0 R (HD.2266) 2747 0 R (HD.2267) 2748 0 R ] /Limits [ (HD.2239) (HD.2267) ] >>
+endobj
+11695 0 obj
+<< /Names [ (HD.2268) 2749 0 R (HD.2269) 2750 0 R (HD.227) 445 0 R (HD.2270) 2751 0 R (HD.2271) 2752 0 R (HD.2272) 2753 0 R (HD.2273) 2754 0 R (HD.2274) 2755 0 R (HD.2275) 2756 0 R (HD.2276) 2757 0 R (HD.2277) 2758 0 R (HD.2278) 2764 0 R (HD.2279) 2765 0 R (HD.228) 446 0 R (HD.2280) 2766 0 R (HD.2281) 2767 0 R (HD.2282) 2768 0 R (HD.2283) 2769 0 R (HD.2284) 2770 0 R (HD.2285) 2771 0 R (HD.2286) 2772 0 R (HD.2287) 2773 0 R (HD.2288) 2774 0 R (HD.2289) 2775 0 R (HD.229) 447 0 R (HD.2290) 2776 0 R (HD.2291) 2777 0 R (HD.2292) 2778 0 R (HD.2293) 2779 0 R (HD.2294) 2780 0 R (HD.2295) 2781 0 R (HD.2296) 2782 0 R ] /Limits [ (HD.2268) (HD.2296) ] >>
+endobj
+11696 0 obj
+<< /Names [ (HD.2297) 2783 0 R (HD.2298) 2784 0 R (HD.2299) 2785 0 R (HD.23) 218 0 R (HD.230) 448 0 R (HD.2300) 2786 0 R (HD.2301) 2787 0 R (HD.2302) 2788 0 R (HD.2303) 2789 0 R (HD.2304) 2790 0 R (HD.2305) 2791 0 R (HD.2306) 2792 0 R (HD.2307) 2793 0 R (HD.2308) 2794 0 R (HD.2309) 2795 0 R (HD.231) 449 0 R (HD.2310) 2796 0 R (HD.2311) 2797 0 R (HD.2312) 2798 0 R (HD.2313) 2799 0 R (HD.2314) 2800 0 R (HD.2315) 2801 0 R (HD.2316) 2802 0 R (HD.2317) 2803 0 R (HD.2318) 2804 0 R (HD.2319) 2805 0 R (HD.232) 450 0 R (HD.2320) 2806 0 R (HD.2321) 2807 0 R (HD.2322) 2808 0 R (HD.2323) 2809 0 R (HD.2324) 2810 0 R ] /Limits [ (HD.2297) (HD.2324) ] >>
+endobj
+11697 0 obj
+<< /Names [ (HD.2325) 2811 0 R (HD.2326) 2812 0 R (HD.2327) 2813 0 R (HD.2328) 2814 0 R (HD.2329) 2815 0 R (HD.233) 451 0 R (HD.2330) 2820 0 R (HD.2331) 2821 0 R (HD.2332) 2822 0 R (HD.2333) 2823 0 R (HD.2334) 2824 0 R (HD.2335) 2825 0 R (HD.2336) 2826 0 R (HD.2337) 2827 0 R (HD.2338) 2828 0 R (HD.2339) 2829 0 R (HD.234) 452 0 R (HD.2340) 2830 0 R (HD.2341) 2831 0 R (HD.2342) 2832 0 R (HD.2343) 2833 0 R (HD.2344) 2834 0 R (HD.2345) 2835 0 R (HD.2346) 2836 0 R (HD.2347) 2837 0 R (HD.2348) 2838 0 R (HD.2349) 2839 0 R (HD.235) 453 0 R (HD.2350) 2840 0 R (HD.2351) 2841 0 R (HD.2352) 2842 0 R (HD.2353) 2843 0 R ] /Limits [ (HD.2325) (HD.2353) ] >>
+endobj
+11698 0 obj
+<< /Names [ (HD.2354) 2844 0 R (HD.2355) 2845 0 R (HD.2356) 2846 0 R (HD.2357) 2847 0 R (HD.2358) 2848 0 R (HD.2359) 2849 0 R (HD.236) 454 0 R (HD.2360) 2850 0 R (HD.2361) 2851 0 R (HD.2362) 2852 0 R (HD.2363) 2853 0 R (HD.2364) 2854 0 R (HD.2365) 2855 0 R (HD.2366) 2856 0 R (HD.2367) 2857 0 R (HD.2368) 2858 0 R (HD.2369) 2859 0 R (HD.237) 455 0 R (HD.2370) 2860 0 R (HD.2371) 2861 0 R (HD.2372) 2862 0 R (HD.2373) 2863 0 R (HD.2374) 2864 0 R (HD.2375) 2865 0 R (HD.2376) 2866 0 R (HD.2377) 2867 0 R (HD.2378) 2868 0 R (HD.2379) 2873 0 R (HD.238) 456 0 R (HD.2380) 2874 0 R (HD.2381) 2875 0 R (HD.2382) 2876 0 R ] /Limits [ (HD.2354) (HD.2382) ] >>
+endobj
+11699 0 obj
+<< /Names [ (HD.2383) 2877 0 R (HD.2384) 2878 0 R (HD.2385) 2879 0 R (HD.2386) 2880 0 R (HD.2387) 2881 0 R (HD.2388) 2882 0 R (HD.2389) 2883 0 R (HD.239) 457 0 R (HD.2390) 2884 0 R (HD.2391) 2885 0 R (HD.2392) 2886 0 R (HD.2393) 2887 0 R (HD.2394) 2888 0 R (HD.2395) 2889 0 R (HD.2396) 2890 0 R (HD.2397) 2891 0 R (HD.2398) 2892 0 R (HD.2399) 2893 0 R (HD.24) 219 0 R (HD.240) 458 0 R (HD.2400) 2894 0 R (HD.2401) 2895 0 R (HD.2402) 2896 0 R (HD.2403) 2897 0 R (HD.2404) 2898 0 R (HD.2405) 2899 0 R (HD.2406) 2900 0 R (HD.2407) 2901 0 R (HD.2408) 2902 0 R (HD.2409) 2903 0 R (HD.241) 460 0 R (HD.2410) 2904 0 R ] /Limits [ (HD.2383) (HD.2410) ] >>
+endobj
+11700 0 obj
+<< /Names [ (HD.2411) 2905 0 R (HD.2412) 2906 0 R (HD.2413) 2907 0 R (HD.2414) 2908 0 R (HD.2415) 2909 0 R (HD.2416) 2910 0 R (HD.2417) 2911 0 R (HD.2418) 2912 0 R (HD.2419) 2917 0 R (HD.242) 461 0 R (HD.2420) 2918 0 R (HD.2421) 2919 0 R (HD.2422) 2920 0 R (HD.2423) 2921 0 R (HD.2424) 2922 0 R (HD.2425) 2923 0 R (HD.2426) 2924 0 R (HD.2427) 2925 0 R (HD.2428) 2926 0 R (HD.2429) 2927 0 R (HD.243) 462 0 R (HD.2430) 2928 0 R (HD.2431) 2929 0 R (HD.2432) 2930 0 R (HD.2433) 2931 0 R (HD.2434) 2932 0 R (HD.2435) 2933 0 R (HD.2436) 2934 0 R (HD.2437) 2935 0 R (HD.2438) 2936 0 R (HD.2439) 2937 0 R (HD.244) 463 0 R ] /Limits [ (HD.2411) (HD.244) ] >>
+endobj
+11701 0 obj
+<< /Names [ (HD.2440) 2938 0 R (HD.2441) 2939 0 R (HD.2442) 2940 0 R (HD.2443) 2941 0 R (HD.2444) 2942 0 R (HD.2445) 2943 0 R (HD.2446) 2944 0 R (HD.2447) 2945 0 R (HD.2448) 2946 0 R (HD.2449) 2947 0 R (HD.245) 464 0 R (HD.2450) 2948 0 R (HD.2451) 2949 0 R (HD.2452) 2950 0 R (HD.2453) 2951 0 R (HD.2454) 2952 0 R (HD.2455) 2953 0 R (HD.2456) 2954 0 R (HD.2457) 2955 0 R (HD.2458) 2956 0 R (HD.2459) 2957 0 R (HD.246) 465 0 R (HD.2460) 2962 0 R (HD.2461) 2963 0 R (HD.2462) 2964 0 R (HD.2463) 2965 0 R (HD.2464) 2966 0 R (HD.2465) 2967 0 R (HD.2466) 2968 0 R (HD.2467) 2969 0 R (HD.2468) 2970 0 R (HD.2469) 2971 0 R ] /Limits [ (HD.2440) (HD.2469) ] >>
+endobj
+11702 0 obj
+<< /Names [ (HD.247) 466 0 R (HD.2470) 2972 0 R (HD.2471) 2973 0 R (HD.2472) 2974 0 R (HD.2473) 2975 0 R (HD.2474) 2976 0 R (HD.2475) 2977 0 R (HD.2476) 2978 0 R (HD.2477) 2979 0 R (HD.2478) 2980 0 R (HD.2479) 2981 0 R (HD.248) 467 0 R (HD.2480) 2982 0 R (HD.2481) 2983 0 R (HD.2482) 2984 0 R (HD.2483) 2985 0 R (HD.2484) 2986 0 R (HD.2485) 2987 0 R (HD.2486) 2988 0 R (HD.2487) 2989 0 R (HD.2488) 2990 0 R (HD.2489) 2991 0 R (HD.249) 475 0 R (HD.2490) 2992 0 R (HD.2491) 2993 0 R (HD.2492) 2994 0 R (HD.2493) 2995 0 R (HD.2494) 2996 0 R (HD.2495) 2997 0 R (HD.2496) 2998 0 R (HD.2497) 2999 0 R (HD.2498) 3000 0 R ] /Limits [ (HD.247) (HD.2498) ] >>
+endobj
+11703 0 obj
+<< /Names [ (HD.2499) 3001 0 R (HD.25) 220 0 R (HD.250) 476 0 R (HD.2500) 3002 0 R (HD.2501) 3003 0 R (HD.2502) 3004 0 R (HD.2503) 3005 0 R (HD.2504) 3006 0 R (HD.2505) 3007 0 R (HD.2506) 3008 0 R (HD.2507) 3013 0 R (HD.2508) 3014 0 R (HD.2509) 3015 0 R (HD.251) 477 0 R (HD.2510) 3016 0 R (HD.2511) 3017 0 R (HD.2512) 3018 0 R (HD.2513) 3019 0 R (HD.2514) 3020 0 R (HD.2515) 3021 0 R (HD.2516) 3022 0 R (HD.2517) 3023 0 R (HD.2518) 3024 0 R (HD.2519) 3025 0 R (HD.252) 478 0 R (HD.2520) 3026 0 R (HD.2521) 3027 0 R (HD.2522) 3028 0 R (HD.2523) 3029 0 R (HD.2524) 3030 0 R (HD.2525) 3031 0 R (HD.2526) 3032 0 R ] /Limits [ (HD.2499) (HD.2526) ] >>
+endobj
+11704 0 obj
+<< /Names [ (HD.2527) 3033 0 R (HD.2528) 3034 0 R (HD.2529) 3035 0 R (HD.253) 479 0 R (HD.2530) 3036 0 R (HD.2531) 3037 0 R (HD.2532) 3038 0 R (HD.2533) 3039 0 R (HD.2534) 3040 0 R (HD.2535) 3041 0 R (HD.2536) 3042 0 R (HD.2537) 3043 0 R (HD.2538) 3044 0 R (HD.2539) 3045 0 R (HD.254) 480 0 R (HD.2540) 3046 0 R (HD.2541) 3047 0 R (HD.2542) 3048 0 R (HD.2543) 3049 0 R (HD.2544) 3050 0 R (HD.2545) 3051 0 R (HD.2546) 3052 0 R (HD.2547) 3053 0 R (HD.2548) 3054 0 R (HD.2549) 3055 0 R (HD.255) 481 0 R (HD.2550) 3056 0 R (HD.2551) 3057 0 R (HD.2552) 3058 0 R (HD.2553) 3059 0 R (HD.2554) 3060 0 R (HD.2555) 3061 0 R ] /Limits [ (HD.2527) (HD.2555) ] >>
+endobj
+11705 0 obj
+<< /Names [ (HD.2556) 3066 0 R (HD.2557) 3067 0 R (HD.2558) 3068 0 R (HD.2559) 3069 0 R (HD.256) 482 0 R (HD.2560) 3070 0 R (HD.2561) 3071 0 R (HD.2562) 3072 0 R (HD.2563) 3073 0 R (HD.2564) 3074 0 R (HD.2565) 3075 0 R (HD.2566) 3076 0 R (HD.2567) 3077 0 R (HD.2568) 3078 0 R (HD.2569) 3079 0 R (HD.257) 483 0 R (HD.2570) 3080 0 R (HD.2571) 3081 0 R (HD.2572) 3082 0 R (HD.2573) 3083 0 R (HD.2574) 3084 0 R (HD.2575) 3085 0 R (HD.2576) 3086 0 R (HD.2577) 3087 0 R (HD.2578) 3088 0 R (HD.2579) 3089 0 R (HD.258) 484 0 R (HD.2580) 3090 0 R (HD.2581) 3091 0 R (HD.2582) 3092 0 R (HD.2583) 3093 0 R (HD.2584) 3094 0 R ] /Limits [ (HD.2556) (HD.2584) ] >>
+endobj
+11706 0 obj
+<< /Names [ (HD.2585) 3095 0 R (HD.2586) 3096 0 R (HD.2587) 3097 0 R (HD.2588) 3098 0 R (HD.2589) 3099 0 R (HD.259) 485 0 R (HD.2590) 3100 0 R (HD.2591) 3101 0 R (HD.2592) 3102 0 R (HD.2593) 3103 0 R (HD.2594) 3104 0 R (HD.2595) 3105 0 R (HD.2596) 3106 0 R (HD.2597) 3107 0 R (HD.2598) 3108 0 R (HD.2599) 3109 0 R (HD.26) 221 0 R (HD.260) 486 0 R (HD.2600) 3110 0 R (HD.2601) 3111 0 R (HD.2602) 3112 0 R (HD.2603) 3113 0 R (HD.2604) 3114 0 R (HD.2605) 3115 0 R (HD.2606) 3116 0 R (HD.2607) 3117 0 R (HD.2608) 3118 0 R (HD.2609) 3123 0 R (HD.261) 487 0 R (HD.2610) 3124 0 R (HD.2611) 3125 0 R (HD.2612) 3126 0 R ] /Limits [ (HD.2585) (HD.2612) ] >>
+endobj
+11707 0 obj
+<< /Names [ (HD.2613) 3127 0 R (HD.2614) 3128 0 R (HD.2615) 3129 0 R (HD.2616) 3130 0 R (HD.2617) 3131 0 R (HD.2618) 3132 0 R (HD.2619) 3133 0 R (HD.262) 488 0 R (HD.2620) 3134 0 R (HD.2621) 3135 0 R (HD.2622) 3136 0 R (HD.2623) 3137 0 R (HD.2624) 3138 0 R (HD.2625) 3139 0 R (HD.2626) 3140 0 R (HD.2627) 3141 0 R (HD.2628) 3142 0 R (HD.2629) 3143 0 R (HD.263) 489 0 R (HD.2630) 3144 0 R (HD.2631) 3145 0 R (HD.2632) 3146 0 R (HD.2633) 3147 0 R (HD.2634) 3148 0 R (HD.2635) 3149 0 R (HD.2636) 3150 0 R (HD.2637) 3151 0 R (HD.2638) 3152 0 R (HD.2639) 3153 0 R (HD.264) 490 0 R (HD.2640) 3154 0 R (HD.2641) 3155 0 R ] /Limits [ (HD.2613) (HD.2641) ] >>
+endobj
+11708 0 obj
+<< /Names [ (HD.2642) 3156 0 R (HD.2643) 3157 0 R (HD.2644) 3158 0 R (HD.2645) 3159 0 R (HD.2646) 3160 0 R (HD.2647) 3161 0 R (HD.2648) 3162 0 R (HD.2649) 3163 0 R (HD.265) 491 0 R (HD.2650) 3164 0 R (HD.2651) 3165 0 R (HD.2652) 3166 0 R (HD.2653) 3167 0 R (HD.2654) 3168 0 R (HD.2655) 3169 0 R (HD.2656) 3170 0 R (HD.2657) 3175 0 R (HD.2658) 3176 0 R (HD.2659) 3177 0 R (HD.266) 492 0 R (HD.2660) 3178 0 R (HD.2661) 3179 0 R (HD.2662) 3180 0 R (HD.2663) 3181 0 R (HD.2664) 3182 0 R (HD.2665) 3183 0 R (HD.2666) 3184 0 R (HD.2667) 3185 0 R (HD.2668) 3186 0 R (HD.2669) 3187 0 R (HD.267) 493 0 R (HD.2670) 3188 0 R ] /Limits [ (HD.2642) (HD.2670) ] >>
+endobj
+11709 0 obj
+<< /Names [ (HD.2671) 3189 0 R (HD.2672) 3190 0 R (HD.2673) 3191 0 R (HD.2674) 3192 0 R (HD.2675) 3193 0 R (HD.2676) 3194 0 R (HD.2677) 3195 0 R (HD.2678) 3196 0 R (HD.2679) 3197 0 R (HD.268) 494 0 R (HD.2680) 3198 0 R (HD.2681) 3199 0 R (HD.2682) 3200 0 R (HD.2683) 3201 0 R (HD.2684) 3202 0 R (HD.2685) 3203 0 R (HD.2686) 3204 0 R (HD.2687) 3205 0 R (HD.2688) 3206 0 R (HD.2689) 3207 0 R (HD.269) 495 0 R (HD.2690) 3208 0 R (HD.2691) 3209 0 R (HD.2692) 3210 0 R (HD.2693) 3211 0 R (HD.2694) 3212 0 R (HD.2695) 3213 0 R (HD.2696) 3214 0 R (HD.2697) 3215 0 R (HD.2698) 3216 0 R (HD.2699) 3217 0 R (HD.27) 222 0 R ] /Limits [ (HD.2671) (HD.27) ] >>
+endobj
+11710 0 obj
+<< /Names [ (HD.270) 496 0 R (HD.2700) 3218 0 R (HD.2701) 3219 0 R (HD.2702) 3220 0 R (HD.2703) 3221 0 R (HD.2704) 3222 0 R (HD.2705) 3223 0 R (HD.2706) 3224 0 R (HD.2707) 3225 0 R (HD.2708) 3226 0 R (HD.2709) 3227 0 R (HD.271) 497 0 R (HD.2710) 3228 0 R (HD.2711) 3229 0 R (HD.2712) 3230 0 R (HD.2713) 3231 0 R (HD.2714) 3236 0 R (HD.2715) 3237 0 R (HD.2716) 3238 0 R (HD.2717) 3239 0 R (HD.2718) 3240 0 R (HD.2719) 3241 0 R (HD.272) 498 0 R (HD.2720) 3242 0 R (HD.2721) 3243 0 R (HD.2722) 3244 0 R (HD.2723) 3245 0 R (HD.2724) 3246 0 R (HD.2725) 3247 0 R (HD.2726) 3248 0 R (HD.2727) 3249 0 R (HD.2728) 3250 0 R ] /Limits [ (HD.270) (HD.2728) ] >>
+endobj
+11711 0 obj
+<< /Names [ (HD.2729) 3251 0 R (HD.273) 499 0 R (HD.2730) 3252 0 R (HD.2731) 3253 0 R (HD.2732) 3254 0 R (HD.2733) 3255 0 R (HD.2734) 3256 0 R (HD.2735) 3257 0 R (HD.2736) 3258 0 R (HD.2737) 3259 0 R (HD.2738) 3260 0 R (HD.2739) 3261 0 R (HD.274) 500 0 R (HD.2740) 3262 0 R (HD.2741) 3263 0 R (HD.2742) 3264 0 R (HD.2743) 3265 0 R (HD.2744) 3266 0 R (HD.2745) 3267 0 R (HD.2746) 3268 0 R (HD.2747) 3269 0 R (HD.2748) 3270 0 R (HD.2749) 3271 0 R (HD.275) 501 0 R (HD.2750) 3272 0 R (HD.2751) 3273 0 R (HD.2752) 3274 0 R (HD.2753) 3275 0 R (HD.2754) 3276 0 R (HD.2755) 3277 0 R (HD.2756) 3278 0 R (HD.2757) 3279 0 R ] /Limits [ (HD.2729) (HD.2757) ] >>
+endobj
+11712 0 obj
+<< /Names [ (HD.2758) 3280 0 R (HD.2759) 3281 0 R (HD.276) 502 0 R (HD.2760) 3282 0 R (HD.2761) 3283 0 R (HD.2762) 3284 0 R (HD.2763) 3285 0 R (HD.2764) 3291 0 R (HD.2765) 3292 0 R (HD.2766) 3293 0 R (HD.2767) 3294 0 R (HD.2768) 3295 0 R (HD.2769) 3296 0 R (HD.277) 503 0 R (HD.2770) 3297 0 R (HD.2771) 3298 0 R (HD.2772) 3299 0 R (HD.2773) 3300 0 R (HD.2774) 3301 0 R (HD.2775) 3302 0 R (HD.2776) 3303 0 R (HD.2777) 3304 0 R (HD.2778) 3305 0 R (HD.2779) 3306 0 R (HD.278) 504 0 R (HD.2780) 3307 0 R (HD.2781) 3308 0 R (HD.2782) 3309 0 R (HD.2783) 3310 0 R (HD.2784) 3311 0 R (HD.2785) 3312 0 R (HD.2786) 3313 0 R ] /Limits [ (HD.2758) (HD.2786) ] >>
+endobj
+11713 0 obj
+<< /Names [ (HD.2787) 3314 0 R (HD.2788) 3315 0 R (HD.2789) 3316 0 R (HD.279) 505 0 R (HD.2790) 3317 0 R (HD.2791) 3318 0 R (HD.2792) 3319 0 R (HD.2793) 3320 0 R (HD.2794) 3321 0 R (HD.2795) 3322 0 R (HD.2796) 3323 0 R (HD.2797) 3328 0 R (HD.2798) 3329 0 R (HD.2799) 3330 0 R (HD.28) 223 0 R (HD.280) 506 0 R (HD.2800) 3331 0 R (HD.2801) 3332 0 R (HD.2802) 3333 0 R (HD.2803) 3334 0 R (HD.2804) 3335 0 R (HD.2805) 3336 0 R (HD.2806) 3337 0 R (HD.2807) 3338 0 R (HD.2808) 3339 0 R (HD.2809) 3340 0 R (HD.281) 507 0 R (HD.2810) 3341 0 R (HD.2811) 3342 0 R (HD.2812) 3343 0 R (HD.2813) 3344 0 R (HD.2814) 3345 0 R ] /Limits [ (HD.2787) (HD.2814) ] >>
+endobj
+11714 0 obj
+<< /Names [ (HD.2815) 3346 0 R (HD.2816) 3347 0 R (HD.2817) 3348 0 R (HD.2818) 3349 0 R (HD.2819) 3350 0 R (HD.282) 508 0 R (HD.2820) 3351 0 R (HD.2821) 3352 0 R (HD.2822) 3353 0 R (HD.2823) 3354 0 R (HD.2824) 3355 0 R (HD.2825) 3356 0 R (HD.2826) 3357 0 R (HD.2827) 3358 0 R (HD.2828) 3359 0 R (HD.2829) 3360 0 R (HD.283) 509 0 R (HD.2830) 3361 0 R (HD.2831) 3362 0 R (HD.2832) 3363 0 R (HD.2833) 3364 0 R (HD.2834) 3365 0 R (HD.2835) 3366 0 R (HD.2836) 3367 0 R (HD.2837) 3372 0 R (HD.2838) 3373 0 R (HD.2839) 3374 0 R (HD.284) 510 0 R (HD.2840) 3375 0 R (HD.2841) 3376 0 R (HD.2842) 3377 0 R (HD.2843) 3378 0 R ] /Limits [ (HD.2815) (HD.2843) ] >>
+endobj
+11715 0 obj
+<< /Names [ (HD.2844) 3379 0 R (HD.2845) 3380 0 R (HD.2846) 3381 0 R (HD.2847) 3382 0 R (HD.2848) 3383 0 R (HD.2849) 3384 0 R (HD.285) 511 0 R (HD.2850) 3385 0 R (HD.2851) 3386 0 R (HD.2852) 3387 0 R (HD.2853) 3388 0 R (HD.2854) 3389 0 R (HD.2855) 3390 0 R (HD.2856) 3391 0 R (HD.2857) 3392 0 R (HD.2858) 3393 0 R (HD.2859) 3394 0 R (HD.286) 512 0 R (HD.2860) 3395 0 R (HD.2861) 3396 0 R (HD.2862) 3397 0 R (HD.2863) 3398 0 R (HD.2864) 3399 0 R (HD.2865) 3400 0 R (HD.2866) 3401 0 R (HD.2867) 3402 0 R (HD.2868) 3403 0 R (HD.2869) 3404 0 R (HD.287) 513 0 R (HD.2870) 3405 0 R (HD.2871) 3406 0 R (HD.2872) 3407 0 R ] /Limits [ (HD.2844) (HD.2872) ] >>
+endobj
+11716 0 obj
+<< /Names [ (HD.2873) 3408 0 R (HD.2874) 3409 0 R (HD.2875) 3410 0 R (HD.2876) 3411 0 R (HD.2877) 3412 0 R (HD.2878) 3413 0 R (HD.2879) 3414 0 R (HD.288) 514 0 R (HD.2880) 3415 0 R (HD.2881) 3416 0 R (HD.2882) 3417 0 R (HD.2883) 3418 0 R (HD.2884) 3419 0 R (HD.2885) 3420 0 R (HD.2886) 3425 0 R (HD.2887) 3426 0 R (HD.2888) 3427 0 R (HD.2889) 3428 0 R (HD.289) 515 0 R (HD.2890) 3429 0 R (HD.2891) 3430 0 R (HD.2892) 3431 0 R (HD.2893) 3432 0 R (HD.2894) 3433 0 R (HD.2895) 3434 0 R (HD.2896) 3435 0 R (HD.2897) 3436 0 R (HD.2898) 3437 0 R (HD.2899) 3438 0 R (HD.29) 224 0 R (HD.290) 516 0 R (HD.2900) 3439 0 R ] /Limits [ (HD.2873) (HD.2900) ] >>
+endobj
+11717 0 obj
+<< /Names [ (HD.2901) 3440 0 R (HD.2902) 3441 0 R (HD.2903) 3442 0 R (HD.2904) 3443 0 R (HD.2905) 3444 0 R (HD.2906) 3445 0 R (HD.2907) 3446 0 R (HD.2908) 3447 0 R (HD.2909) 3448 0 R (HD.291) 517 0 R (HD.2910) 3449 0 R (HD.2911) 3450 0 R (HD.2912) 3451 0 R (HD.2913) 3452 0 R (HD.2914) 3453 0 R (HD.2915) 3454 0 R (HD.2916) 3455 0 R (HD.2917) 3456 0 R (HD.2918) 3457 0 R (HD.2919) 3458 0 R (HD.292) 518 0 R (HD.2920) 3459 0 R (HD.2921) 3460 0 R (HD.2922) 3461 0 R (HD.2923) 3462 0 R (HD.2924) 3463 0 R (HD.2925) 3464 0 R (HD.2926) 3465 0 R (HD.2927) 3466 0 R (HD.2928) 3467 0 R (HD.2929) 3468 0 R (HD.293) 519 0 R ] /Limits [ (HD.2901) (HD.293) ] >>
+endobj
+11718 0 obj
+<< /Names [ (HD.2930) 3469 0 R (HD.2931) 3470 0 R (HD.2932) 3471 0 R (HD.2933) 3472 0 R (HD.2934) 3473 0 R (HD.2935) 3474 0 R (HD.2936) 3475 0 R (HD.2937) 3476 0 R (HD.2938) 3477 0 R (HD.2939) 3482 0 R (HD.294) 520 0 R (HD.2940) 3483 0 R (HD.2941) 3484 0 R (HD.2942) 3485 0 R (HD.2943) 3486 0 R (HD.2944) 3487 0 R (HD.2945) 3488 0 R (HD.2946) 3489 0 R (HD.2947) 3490 0 R (HD.2948) 3491 0 R (HD.2949) 3492 0 R (HD.295) 521 0 R (HD.2950) 3493 0 R (HD.2951) 3494 0 R (HD.2952) 3495 0 R (HD.2953) 3496 0 R (HD.2954) 3497 0 R (HD.2955) 3498 0 R (HD.2956) 3499 0 R (HD.2957) 3500 0 R (HD.2958) 3501 0 R (HD.2959) 3502 0 R ] /Limits [ (HD.2930) (HD.2959) ] >>
+endobj
+11719 0 obj
+<< /Names [ (HD.296) 522 0 R (HD.2960) 3503 0 R (HD.2961) 3504 0 R (HD.2962) 3505 0 R (HD.2963) 3506 0 R (HD.2964) 3507 0 R (HD.2965) 3508 0 R (HD.2966) 3509 0 R (HD.2967) 3510 0 R (HD.2968) 3511 0 R (HD.2969) 3512 0 R (HD.297) 523 0 R (HD.2970) 3513 0 R (HD.2971) 3514 0 R (HD.2972) 3515 0 R (HD.2973) 3516 0 R (HD.2974) 3517 0 R (HD.2975) 3518 0 R (HD.2976) 3519 0 R (HD.2977) 3520 0 R (HD.2978) 3521 0 R (HD.2979) 3522 0 R (HD.298) 528 0 R (HD.2980) 3523 0 R (HD.2981) 3524 0 R (HD.2982) 3525 0 R (HD.2983) 3526 0 R (HD.2984) 3527 0 R (HD.2985) 3528 0 R (HD.2986) 3529 0 R (HD.2987) 3534 0 R (HD.2988) 3535 0 R ] /Limits [ (HD.296) (HD.2988) ] >>
+endobj
+11720 0 obj
+<< /Names [ (HD.2989) 3536 0 R (HD.299) 529 0 R (HD.2990) 3537 0 R (HD.2991) 3538 0 R (HD.2992) 3539 0 R (HD.2993) 3540 0 R (HD.2994) 3541 0 R (HD.2995) 3542 0 R (HD.2996) 3543 0 R (HD.2997) 3544 0 R (HD.2998) 3545 0 R (HD.2999) 3546 0 R (HD.3) 191 0 R (HD.30) 225 0 R (HD.300) 530 0 R (HD.3000) 3547 0 R (HD.3001) 3548 0 R (HD.3002) 3549 0 R (HD.3003) 3550 0 R (HD.3004) 3551 0 R (HD.3005) 3552 0 R (HD.3006) 3553 0 R (HD.3007) 3554 0 R (HD.3008) 3555 0 R (HD.3009) 3556 0 R (HD.301) 531 0 R (HD.3010) 3557 0 R (HD.3011) 3558 0 R (HD.3012) 3559 0 R (HD.3013) 3560 0 R (HD.3014) 3561 0 R (HD.3015) 3562 0 R ] /Limits [ (HD.2989) (HD.3015) ] >>
+endobj
+11721 0 obj
+<< /Names [ (HD.3016) 3563 0 R (HD.3017) 3564 0 R (HD.3018) 3565 0 R (HD.3019) 3566 0 R (HD.302) 532 0 R (HD.3020) 3567 0 R (HD.3021) 3568 0 R (HD.3022) 3569 0 R (HD.3023) 3570 0 R (HD.3024) 3571 0 R (HD.3025) 3572 0 R (HD.3026) 3573 0 R (HD.3027) 3574 0 R (HD.3028) 3575 0 R (HD.3029) 3576 0 R (HD.303) 533 0 R (HD.3030) 3577 0 R (HD.3031) 3578 0 R (HD.3032) 3579 0 R (HD.3033) 3580 0 R (HD.3034) 3585 0 R (HD.3035) 3586 0 R (HD.3036) 3587 0 R (HD.3037) 3588 0 R (HD.3038) 3589 0 R (HD.3039) 3590 0 R (HD.304) 534 0 R (HD.3040) 3591 0 R (HD.3041) 3592 0 R (HD.3042) 3593 0 R (HD.3043) 3594 0 R (HD.3044) 3595 0 R ] /Limits [ (HD.3016) (HD.3044) ] >>
+endobj
+11722 0 obj
+<< /Names [ (HD.3045) 3596 0 R (HD.3046) 3597 0 R (HD.3047) 3598 0 R (HD.3048) 3599 0 R (HD.3049) 3600 0 R (HD.305) 535 0 R (HD.3050) 3601 0 R (HD.3051) 3602 0 R (HD.3052) 3603 0 R (HD.3053) 3604 0 R (HD.3054) 3605 0 R (HD.3055) 3606 0 R (HD.3056) 3607 0 R (HD.3057) 3608 0 R (HD.3058) 3609 0 R (HD.3059) 3610 0 R (HD.306) 536 0 R (HD.3060) 3611 0 R (HD.3061) 3612 0 R (HD.3062) 3613 0 R (HD.3063) 3614 0 R (HD.3064) 3615 0 R (HD.3065) 3616 0 R (HD.3066) 3617 0 R (HD.3067) 3618 0 R (HD.3068) 3619 0 R (HD.3069) 3620 0 R (HD.307) 537 0 R (HD.3070) 3621 0 R (HD.3071) 3622 0 R (HD.3072) 3623 0 R (HD.3073) 3624 0 R ] /Limits [ (HD.3045) (HD.3073) ] >>
+endobj
+11723 0 obj
+<< /Names [ (HD.3074) 3625 0 R (HD.3075) 3626 0 R (HD.3076) 3627 0 R (HD.3077) 3632 0 R (HD.3078) 3633 0 R (HD.3079) 3634 0 R (HD.308) 538 0 R (HD.3080) 3635 0 R (HD.3081) 3636 0 R (HD.3082) 3637 0 R (HD.3083) 3638 0 R (HD.3084) 3639 0 R (HD.3085) 3640 0 R (HD.3086) 3641 0 R (HD.3087) 3642 0 R (HD.3088) 3643 0 R (HD.3089) 3644 0 R (HD.309) 539 0 R (HD.3090) 3645 0 R (HD.3091) 3646 0 R (HD.3092) 3647 0 R (HD.3093) 3648 0 R (HD.3094) 3649 0 R (HD.3095) 3650 0 R (HD.3096) 3651 0 R (HD.3097) 3652 0 R (HD.3098) 3653 0 R (HD.3099) 3654 0 R (HD.31) 226 0 R (HD.310) 540 0 R (HD.3100) 3655 0 R (HD.3101) 3656 0 R ] /Limits [ (HD.3074) (HD.3101) ] >>
+endobj
+11724 0 obj
+<< /Names [ (HD.3102) 3657 0 R (HD.3103) 3658 0 R (HD.3104) 3659 0 R (HD.3105) 3660 0 R (HD.3106) 3661 0 R (HD.3107) 3662 0 R (HD.3108) 3663 0 R (HD.3109) 3664 0 R (HD.311) 541 0 R (HD.3110) 3665 0 R (HD.3111) 3666 0 R (HD.3112) 3667 0 R (HD.3113) 3668 0 R (HD.3114) 3669 0 R (HD.3115) 3670 0 R (HD.3116) 3671 0 R (HD.3117) 3672 0 R (HD.3118) 3673 0 R (HD.3119) 3674 0 R (HD.312) 543 0 R (HD.3120) 3675 0 R (HD.3121) 3680 0 R (HD.3122) 3681 0 R (HD.3123) 3682 0 R (HD.3124) 3683 0 R (HD.3125) 3684 0 R (HD.3126) 3685 0 R (HD.3127) 3686 0 R (HD.3128) 3687 0 R (HD.3129) 3688 0 R (HD.313) 544 0 R (HD.3130) 3689 0 R ] /Limits [ (HD.3102) (HD.3130) ] >>
+endobj
+11725 0 obj
+<< /Names [ (HD.3131) 3690 0 R (HD.3132) 3691 0 R (HD.3133) 3692 0 R (HD.3134) 3693 0 R (HD.3135) 3694 0 R (HD.3136) 3695 0 R (HD.3137) 3696 0 R (HD.3138) 3697 0 R (HD.3139) 3698 0 R (HD.314) 545 0 R (HD.3140) 3699 0 R (HD.3141) 3700 0 R (HD.3142) 3701 0 R (HD.3143) 3702 0 R (HD.3144) 3703 0 R (HD.3145) 3704 0 R (HD.3146) 3705 0 R (HD.3147) 3706 0 R (HD.3148) 3707 0 R (HD.3149) 3708 0 R (HD.315) 546 0 R (HD.3150) 3709 0 R (HD.3151) 3710 0 R (HD.3152) 3711 0 R (HD.3153) 3712 0 R (HD.3154) 3713 0 R (HD.3155) 3714 0 R (HD.3156) 3715 0 R (HD.3157) 3716 0 R (HD.3158) 3717 0 R (HD.3159) 3718 0 R (HD.316) 547 0 R ] /Limits [ (HD.3131) (HD.316) ] >>
+endobj
+11726 0 obj
+<< /Names [ (HD.3160) 3719 0 R (HD.3161) 3720 0 R (HD.3162) 3721 0 R (HD.3163) 3722 0 R (HD.3164) 3723 0 R (HD.3165) 3724 0 R (HD.3166) 3725 0 R (HD.3167) 3730 0 R (HD.3168) 3731 0 R (HD.3169) 3732 0 R (HD.317) 548 0 R (HD.3170) 3733 0 R (HD.3171) 3734 0 R (HD.3172) 3735 0 R (HD.3173) 3736 0 R (HD.3174) 3737 0 R (HD.3175) 3738 0 R (HD.3176) 3739 0 R (HD.3177) 3740 0 R (HD.3178) 3741 0 R (HD.3179) 3742 0 R (HD.318) 549 0 R (HD.3180) 3743 0 R (HD.3181) 3744 0 R (HD.3182) 3745 0 R (HD.3183) 3746 0 R (HD.3184) 3747 0 R (HD.3185) 3748 0 R (HD.3186) 3749 0 R (HD.3187) 3750 0 R (HD.3188) 3751 0 R (HD.3189) 3752 0 R ] /Limits [ (HD.3160) (HD.3189) ] >>
+endobj
+11727 0 obj
+<< /Names [ (HD.319) 550 0 R (HD.3190) 3753 0 R (HD.3191) 3754 0 R (HD.3192) 3755 0 R (HD.3193) 3756 0 R (HD.3194) 3757 0 R (HD.3195) 3758 0 R (HD.3196) 3759 0 R (HD.3197) 3760 0 R (HD.3198) 3761 0 R (HD.3199) 3762 0 R (HD.32) 227 0 R (HD.320) 551 0 R (HD.3200) 3763 0 R (HD.3201) 3764 0 R (HD.3202) 3765 0 R (HD.3203) 3766 0 R (HD.3204) 3767 0 R (HD.3205) 3768 0 R (HD.3206) 3769 0 R (HD.3207) 3770 0 R (HD.3208) 3771 0 R (HD.3209) 3772 0 R (HD.321) 552 0 R (HD.3210) 3773 0 R (HD.3211) 3774 0 R (HD.3212) 3775 0 R (HD.3213) 3776 0 R (HD.3214) 3777 0 R (HD.3215) 3778 0 R (HD.3216) 3779 0 R (HD.3217) 3780 0 R ] /Limits [ (HD.319) (HD.3217) ] >>
+endobj
+11728 0 obj
+<< /Names [ (HD.3218) 3781 0 R (HD.3219) 3787 0 R (HD.322) 557 0 R (HD.3220) 3788 0 R (HD.3221) 3789 0 R (HD.3222) 3790 0 R (HD.3223) 3791 0 R (HD.3224) 3792 0 R (HD.3225) 3793 0 R (HD.3226) 3794 0 R (HD.3227) 3795 0 R (HD.3228) 3796 0 R (HD.3229) 3797 0 R (HD.323) 558 0 R (HD.3230) 3798 0 R (HD.3231) 3799 0 R (HD.3232) 3800 0 R (HD.3233) 3801 0 R (HD.3234) 3802 0 R (HD.3235) 3803 0 R (HD.3236) 3804 0 R (HD.3237) 3805 0 R (HD.3238) 3806 0 R (HD.3239) 3807 0 R (HD.324) 559 0 R (HD.3240) 3808 0 R (HD.3241) 3809 0 R (HD.3242) 3810 0 R (HD.3243) 3811 0 R (HD.3244) 3812 0 R (HD.3245) 3813 0 R (HD.3246) 3814 0 R ] /Limits [ (HD.3218) (HD.3246) ] >>
+endobj
+11729 0 obj
+<< /Names [ (HD.3247) 3815 0 R (HD.3248) 3816 0 R (HD.3249) 3817 0 R (HD.325) 560 0 R (HD.3250) 3818 0 R (HD.3251) 3819 0 R (HD.3252) 3820 0 R (HD.3253) 3821 0 R (HD.3254) 3822 0 R (HD.3255) 3823 0 R (HD.3256) 3824 0 R (HD.3257) 3825 0 R (HD.3258) 3826 0 R (HD.3259) 3827 0 R (HD.326) 561 0 R (HD.3260) 3828 0 R (HD.3261) 3829 0 R (HD.3262) 3830 0 R (HD.3263) 3831 0 R (HD.3264) 3832 0 R (HD.3265) 3833 0 R (HD.3266) 3838 0 R (HD.3267) 3839 0 R (HD.3268) 3840 0 R (HD.3269) 3841 0 R (HD.327) 562 0 R (HD.3270) 3842 0 R (HD.3271) 3843 0 R (HD.3272) 3844 0 R (HD.3273) 3845 0 R (HD.3274) 3846 0 R (HD.3275) 3847 0 R ] /Limits [ (HD.3247) (HD.3275) ] >>
+endobj
+11730 0 obj
+<< /Names [ (HD.3276) 3848 0 R (HD.3277) 3849 0 R (HD.3278) 3850 0 R (HD.3279) 3851 0 R (HD.328) 563 0 R (HD.3280) 3852 0 R (HD.3281) 3853 0 R (HD.3282) 3854 0 R (HD.3283) 3855 0 R (HD.3284) 3856 0 R (HD.3285) 3857 0 R (HD.3286) 3858 0 R (HD.3287) 3859 0 R (HD.3288) 3860 0 R (HD.3289) 3861 0 R (HD.329) 564 0 R (HD.3290) 3862 0 R (HD.3291) 3863 0 R (HD.3292) 3864 0 R (HD.3293) 3865 0 R (HD.3294) 3866 0 R (HD.3295) 3867 0 R (HD.3296) 3868 0 R (HD.3297) 3869 0 R (HD.3298) 3870 0 R (HD.3299) 3871 0 R (HD.33) 228 0 R (HD.330) 565 0 R (HD.3300) 3876 0 R (HD.3301) 3877 0 R (HD.3302) 3878 0 R (HD.3303) 3879 0 R ] /Limits [ (HD.3276) (HD.3303) ] >>
+endobj
+11731 0 obj
+<< /Names [ (HD.3304) 3880 0 R (HD.3305) 3881 0 R (HD.3306) 3882 0 R (HD.3307) 3883 0 R (HD.3308) 3884 0 R (HD.3309) 3885 0 R (HD.331) 566 0 R (HD.3310) 3886 0 R (HD.3311) 3887 0 R (HD.3312) 3888 0 R (HD.3313) 3889 0 R (HD.3314) 3890 0 R (HD.3315) 3891 0 R (HD.3316) 3892 0 R (HD.3317) 3893 0 R (HD.3318) 3894 0 R (HD.3319) 3895 0 R (HD.332) 567 0 R (HD.3320) 3896 0 R (HD.3321) 3897 0 R (HD.3322) 3898 0 R (HD.3323) 3899 0 R (HD.3324) 3900 0 R (HD.3325) 3901 0 R (HD.3326) 3902 0 R (HD.3327) 3903 0 R (HD.3328) 3904 0 R (HD.3329) 3905 0 R (HD.333) 568 0 R (HD.3330) 3906 0 R (HD.3331) 3907 0 R (HD.3332) 3908 0 R ] /Limits [ (HD.3304) (HD.3332) ] >>
+endobj
+11732 0 obj
+<< /Names [ (HD.3333) 3909 0 R (HD.3334) 3910 0 R (HD.3335) 3911 0 R (HD.3336) 3912 0 R (HD.3337) 3913 0 R (HD.3338) 3914 0 R (HD.3339) 3915 0 R (HD.334) 569 0 R (HD.3340) 3920 0 R (HD.3341) 3921 0 R (HD.3342) 3922 0 R (HD.3343) 3923 0 R (HD.3344) 3924 0 R (HD.3345) 3925 0 R (HD.3346) 3926 0 R (HD.3347) 3927 0 R (HD.3348) 3928 0 R (HD.3349) 3929 0 R (HD.335) 570 0 R (HD.3350) 3930 0 R (HD.3351) 3931 0 R (HD.3352) 3932 0 R (HD.3353) 3933 0 R (HD.3354) 3934 0 R (HD.3355) 3935 0 R (HD.3356) 3936 0 R (HD.3357) 3937 0 R (HD.3358) 3938 0 R (HD.3359) 3939 0 R (HD.336) 571 0 R (HD.3360) 3940 0 R (HD.3361) 3941 0 R ] /Limits [ (HD.3333) (HD.3361) ] >>
+endobj
+11733 0 obj
+<< /Names [ (HD.3362) 3942 0 R (HD.3363) 3943 0 R (HD.3364) 3944 0 R (HD.3365) 3945 0 R (HD.3366) 3946 0 R (HD.3367) 3947 0 R (HD.3368) 3948 0 R (HD.3369) 3949 0 R (HD.337) 572 0 R (HD.3370) 3950 0 R (HD.3371) 3951 0 R (HD.3372) 3952 0 R (HD.3373) 3953 0 R (HD.3374) 3954 0 R (HD.3375) 3955 0 R (HD.3376) 3956 0 R (HD.3377) 3957 0 R (HD.3378) 3958 0 R (HD.3379) 3959 0 R (HD.338) 577 0 R (HD.3380) 3960 0 R (HD.3381) 3961 0 R (HD.3382) 3962 0 R (HD.3383) 3963 0 R (HD.3384) 3964 0 R (HD.3385) 3965 0 R (HD.3386) 3966 0 R (HD.3387) 3967 0 R (HD.3388) 3968 0 R (HD.3389) 3969 0 R (HD.339) 578 0 R (HD.3390) 3970 0 R ] /Limits [ (HD.3362) (HD.3390) ] >>
+endobj
+11734 0 obj
+<< /Names [ (HD.3391) 3971 0 R (HD.3392) 3972 0 R (HD.3393) 3973 0 R (HD.3394) 3974 0 R (HD.3395) 3975 0 R (HD.3396) 3980 0 R (HD.3397) 3981 0 R (HD.3398) 3982 0 R (HD.3399) 3983 0 R (HD.34) 229 0 R (HD.340) 579 0 R (HD.3400) 3984 0 R (HD.3401) 3985 0 R (HD.3402) 3986 0 R (HD.3403) 3987 0 R (HD.3404) 3988 0 R (HD.3405) 3989 0 R (HD.3406) 3990 0 R (HD.3407) 3991 0 R (HD.3408) 3992 0 R (HD.3409) 3993 0 R (HD.341) 580 0 R (HD.3410) 3994 0 R (HD.3411) 3995 0 R (HD.3412) 3996 0 R (HD.3413) 3997 0 R (HD.3414) 3998 0 R (HD.3415) 3999 0 R (HD.3416) 4000 0 R (HD.3417) 4001 0 R (HD.3418) 4002 0 R (HD.3419) 4003 0 R ] /Limits [ (HD.3391) (HD.3419) ] >>
+endobj
+11735 0 obj
+<< /Names [ (HD.342) 581 0 R (HD.3420) 4004 0 R (HD.3421) 4005 0 R (HD.3422) 4006 0 R (HD.3423) 4007 0 R (HD.3424) 4008 0 R (HD.3425) 4009 0 R (HD.3426) 4010 0 R (HD.3427) 4011 0 R (HD.3428) 4012 0 R (HD.3429) 4013 0 R (HD.343) 582 0 R (HD.3430) 4014 0 R (HD.3431) 4015 0 R (HD.3432) 4016 0 R (HD.3433) 4017 0 R (HD.3434) 4018 0 R (HD.3435) 4019 0 R (HD.3436) 4020 0 R (HD.3437) 4021 0 R (HD.3438) 4022 0 R (HD.3439) 4023 0 R (HD.344) 583 0 R (HD.3440) 4024 0 R (HD.3441) 4025 0 R (HD.3442) 4026 0 R (HD.3443) 4027 0 R (HD.3444) 4028 0 R (HD.3445) 4029 0 R (HD.3446) 4030 0 R (HD.3447) 4031 0 R (HD.3448) 4036 0 R ] /Limits [ (HD.342) (HD.3448) ] >>
+endobj
+11736 0 obj
+<< /Names [ (HD.3449) 4037 0 R (HD.345) 584 0 R (HD.3450) 4038 0 R (HD.3451) 4039 0 R (HD.3452) 4040 0 R (HD.3453) 4041 0 R (HD.3454) 4042 0 R (HD.3455) 4043 0 R (HD.3456) 4044 0 R (HD.3457) 4045 0 R (HD.3458) 4046 0 R (HD.3459) 4047 0 R (HD.346) 585 0 R (HD.3460) 4048 0 R (HD.3461) 4049 0 R (HD.3462) 4050 0 R (HD.3463) 4051 0 R (HD.3464) 4052 0 R (HD.3465) 4053 0 R (HD.3466) 4054 0 R (HD.3467) 4055 0 R (HD.3468) 4056 0 R (HD.3469) 4057 0 R (HD.347) 586 0 R (HD.3470) 4058 0 R (HD.3471) 4059 0 R (HD.3472) 4060 0 R (HD.3473) 4061 0 R (HD.3474) 4062 0 R (HD.3475) 4063 0 R (HD.3476) 4064 0 R (HD.3477) 4065 0 R ] /Limits [ (HD.3449) (HD.3477) ] >>
+endobj
+11737 0 obj
+<< /Names [ (HD.3478) 4066 0 R (HD.3479) 4067 0 R (HD.348) 587 0 R (HD.3480) 4068 0 R (HD.3481) 4069 0 R (HD.3482) 4070 0 R (HD.3483) 4071 0 R (HD.3484) 4072 0 R (HD.3485) 4073 0 R (HD.3486) 4074 0 R (HD.3487) 4075 0 R (HD.3488) 4076 0 R (HD.3489) 4077 0 R (HD.349) 588 0 R (HD.3490) 4078 0 R (HD.3491) 4079 0 R (HD.3492) 4080 0 R (HD.3493) 4081 0 R (HD.3494) 4082 0 R (HD.3495) 4083 0 R (HD.3496) 4084 0 R (HD.3497) 4085 0 R (HD.3498) 4086 0 R (HD.3499) 4087 0 R (HD.35) 230 0 R (HD.350) 589 0 R (HD.3500) 4088 0 R (HD.3501) 4089 0 R (HD.3502) 4094 0 R (HD.3503) 4095 0 R (HD.3504) 4096 0 R (HD.3505) 4097 0 R ] /Limits [ (HD.3478) (HD.3505) ] >>
+endobj
+11738 0 obj
+<< /Names [ (HD.3506) 4098 0 R (HD.3507) 4099 0 R (HD.3508) 4100 0 R (HD.3509) 4101 0 R (HD.351) 590 0 R (HD.3510) 4102 0 R (HD.3511) 4103 0 R (HD.3512) 4104 0 R (HD.3513) 4105 0 R (HD.3514) 4106 0 R (HD.3515) 4107 0 R (HD.3516) 4108 0 R (HD.3517) 4109 0 R (HD.3518) 4110 0 R (HD.3519) 4111 0 R (HD.352) 591 0 R (HD.3520) 4112 0 R (HD.3521) 4113 0 R (HD.3522) 4114 0 R (HD.3523) 4115 0 R (HD.3524) 4116 0 R (HD.3525) 4117 0 R (HD.3526) 4118 0 R (HD.3527) 4119 0 R (HD.3528) 4120 0 R (HD.3529) 4121 0 R (HD.353) 592 0 R (HD.3530) 4122 0 R (HD.3531) 4123 0 R (HD.3532) 4124 0 R (HD.3533) 4125 0 R (HD.3534) 4126 0 R ] /Limits [ (HD.3506) (HD.3534) ] >>
+endobj
+11739 0 obj
+<< /Names [ (HD.3535) 4127 0 R (HD.3536) 4128 0 R (HD.3537) 4129 0 R (HD.3538) 4130 0 R (HD.3539) 4131 0 R (HD.354) 593 0 R (HD.3540) 4132 0 R (HD.3541) 4133 0 R (HD.3542) 4134 0 R (HD.3543) 4135 0 R (HD.3544) 4136 0 R (HD.3545) 4137 0 R (HD.3546) 4138 0 R (HD.3547) 4139 0 R (HD.3548) 4140 0 R (HD.3549) 4141 0 R (HD.355) 599 0 R (HD.3550) 4142 0 R (HD.3551) 4143 0 R (HD.3552) 4148 0 R (HD.3553) 4149 0 R (HD.3554) 4150 0 R (HD.3555) 4151 0 R (HD.3556) 4152 0 R (HD.3557) 4153 0 R (HD.3558) 4154 0 R (HD.3559) 4155 0 R (HD.356) 600 0 R (HD.3560) 4156 0 R (HD.3561) 4157 0 R (HD.3562) 4158 0 R (HD.3563) 4159 0 R ] /Limits [ (HD.3535) (HD.3563) ] >>
+endobj
+11740 0 obj
+<< /Names [ (HD.3564) 4160 0 R (HD.3565) 4161 0 R (HD.3566) 4162 0 R (HD.3567) 4163 0 R (HD.3568) 4164 0 R (HD.3569) 4165 0 R (HD.357) 601 0 R (HD.3570) 4166 0 R (HD.3571) 4167 0 R (HD.3572) 4168 0 R (HD.3573) 4169 0 R (HD.3574) 4170 0 R (HD.3575) 4171 0 R (HD.3576) 4172 0 R (HD.3577) 4173 0 R (HD.3578) 4174 0 R (HD.3579) 4175 0 R (HD.358) 602 0 R (HD.3580) 4176 0 R (HD.3581) 4177 0 R (HD.3582) 4178 0 R (HD.3583) 4179 0 R (HD.3584) 4180 0 R (HD.3585) 4181 0 R (HD.3586) 4182 0 R (HD.3587) 4183 0 R (HD.3588) 4184 0 R (HD.3589) 4185 0 R (HD.359) 603 0 R (HD.3590) 4186 0 R (HD.3591) 4187 0 R (HD.3592) 4188 0 R ] /Limits [ (HD.3564) (HD.3592) ] >>
+endobj
+11741 0 obj
+<< /Names [ (HD.3593) 4189 0 R (HD.3594) 4190 0 R (HD.3595) 4191 0 R (HD.3596) 4196 0 R (HD.3597) 4197 0 R (HD.3598) 4198 0 R (HD.3599) 4199 0 R (HD.36) 231 0 R (HD.360) 604 0 R (HD.3600) 4200 0 R (HD.3601) 4201 0 R (HD.3602) 4202 0 R (HD.3603) 4203 0 R (HD.3604) 4204 0 R (HD.3605) 4205 0 R (HD.3606) 4206 0 R (HD.3607) 4207 0 R (HD.3608) 4208 0 R (HD.3609) 4209 0 R (HD.361) 605 0 R (HD.3610) 4210 0 R (HD.3611) 4211 0 R (HD.3612) 4212 0 R (HD.3613) 4213 0 R (HD.3614) 4214 0 R (HD.3615) 4215 0 R (HD.3616) 4216 0 R (HD.3617) 4217 0 R (HD.3618) 4218 0 R (HD.3619) 4219 0 R (HD.362) 606 0 R (HD.3620) 4220 0 R ] /Limits [ (HD.3593) (HD.3620) ] >>
+endobj
+11742 0 obj
+<< /Names [ (HD.3621) 4221 0 R (HD.3622) 4222 0 R (HD.3623) 4223 0 R (HD.3624) 4224 0 R (HD.3625) 4225 0 R (HD.3626) 4226 0 R (HD.3627) 4227 0 R (HD.3628) 4228 0 R (HD.3629) 4229 0 R (HD.363) 607 0 R (HD.3630) 4230 0 R (HD.3631) 4231 0 R (HD.3632) 4232 0 R (HD.3633) 4233 0 R (HD.3634) 4234 0 R (HD.3635) 4235 0 R (HD.3636) 4236 0 R (HD.3637) 4237 0 R (HD.3638) 4238 0 R (HD.3639) 4239 0 R (HD.364) 608 0 R (HD.3640) 4240 0 R (HD.3641) 4241 0 R (HD.3642) 4242 0 R (HD.3643) 4247 0 R (HD.3644) 4248 0 R (HD.3645) 4249 0 R (HD.3646) 4250 0 R (HD.3647) 4251 0 R (HD.3648) 4252 0 R (HD.3649) 4253 0 R (HD.365) 609 0 R ] /Limits [ (HD.3621) (HD.365) ] >>
+endobj
+11743 0 obj
+<< /Names [ (HD.3650) 4254 0 R (HD.3651) 4255 0 R (HD.3652) 4256 0 R (HD.3653) 4257 0 R (HD.3654) 4258 0 R (HD.3655) 4259 0 R (HD.3656) 4260 0 R (HD.3657) 4261 0 R (HD.3658) 4262 0 R (HD.3659) 4263 0 R (HD.366) 610 0 R (HD.3660) 4264 0 R (HD.3661) 4265 0 R (HD.3662) 4266 0 R (HD.3663) 4267 0 R (HD.3664) 4268 0 R (HD.3665) 4269 0 R (HD.3666) 4270 0 R (HD.3667) 4271 0 R (HD.3668) 4272 0 R (HD.3669) 4273 0 R (HD.367) 611 0 R (HD.3670) 4274 0 R (HD.3671) 4275 0 R (HD.3672) 4276 0 R (HD.3673) 4277 0 R (HD.3674) 4278 0 R (HD.3675) 4279 0 R (HD.3676) 4280 0 R (HD.3677) 4281 0 R (HD.3678) 4282 0 R (HD.3679) 4283 0 R ] /Limits [ (HD.3650) (HD.3679) ] >>
+endobj
+11744 0 obj
+<< /Names [ (HD.368) 612 0 R (HD.3680) 4284 0 R (HD.3681) 4285 0 R (HD.3682) 4286 0 R (HD.3683) 4287 0 R (HD.3684) 4288 0 R (HD.3685) 4289 0 R (HD.3686) 4290 0 R (HD.3687) 4291 0 R (HD.3688) 4292 0 R (HD.3689) 4293 0 R (HD.369) 613 0 R (HD.3690) 4294 0 R (HD.3691) 4295 0 R (HD.3692) 4296 0 R (HD.3693) 4297 0 R (HD.3694) 4298 0 R (HD.3695) 4304 0 R (HD.3696) 4305 0 R (HD.3697) 4306 0 R (HD.3698) 4307 0 R (HD.3699) 4308 0 R (HD.37) 232 0 R (HD.370) 614 0 R (HD.3700) 4309 0 R (HD.3701) 4310 0 R (HD.3702) 4311 0 R (HD.3703) 4312 0 R (HD.3704) 4313 0 R (HD.3705) 4314 0 R (HD.3706) 4315 0 R (HD.3707) 4316 0 R ] /Limits [ (HD.368) (HD.3707) ] >>
+endobj
+11745 0 obj
+<< /Names [ (HD.3708) 4317 0 R (HD.3709) 4318 0 R (HD.371) 615 0 R (HD.3710) 4319 0 R (HD.3711) 4320 0 R (HD.3712) 4321 0 R (HD.3713) 4322 0 R (HD.3714) 4323 0 R (HD.3715) 4324 0 R (HD.3716) 4325 0 R (HD.3717) 4326 0 R (HD.3718) 4327 0 R (HD.3719) 4328 0 R (HD.372) 616 0 R (HD.3720) 4329 0 R (HD.3721) 4330 0 R (HD.3722) 4331 0 R (HD.3723) 4332 0 R (HD.3724) 4333 0 R (HD.3725) 4334 0 R (HD.3726) 4335 0 R (HD.3727) 4336 0 R (HD.3728) 4337 0 R (HD.3729) 4338 0 R (HD.373) 617 0 R (HD.3730) 4339 0 R (HD.3731) 4340 0 R (HD.3732) 4341 0 R (HD.3733) 4342 0 R (HD.3734) 4343 0 R (HD.3735) 4344 0 R (HD.3736) 4345 0 R ] /Limits [ (HD.3708) (HD.3736) ] >>
+endobj
+11746 0 obj
+<< /Names [ (HD.3737) 4346 0 R (HD.3738) 4347 0 R (HD.3739) 4348 0 R (HD.374) 618 0 R (HD.3740) 4349 0 R (HD.3741) 4350 0 R (HD.3742) 4351 0 R (HD.3743) 4352 0 R (HD.3744) 4353 0 R (HD.3745) 4354 0 R (HD.3746) 4355 0 R (HD.3747) 4356 0 R (HD.3748) 4357 0 R (HD.3749) 4362 0 R (HD.375) 619 0 R (HD.3750) 4363 0 R (HD.3751) 4364 0 R (HD.3752) 4365 0 R (HD.3753) 4366 0 R (HD.3754) 4367 0 R (HD.3755) 4368 0 R (HD.3756) 4369 0 R (HD.3757) 4370 0 R (HD.3758) 4371 0 R (HD.3759) 4372 0 R (HD.376) 620 0 R (HD.3760) 4373 0 R (HD.3761) 4374 0 R (HD.3762) 4375 0 R (HD.3763) 4376 0 R (HD.3764) 4377 0 R (HD.3765) 4378 0 R ] /Limits [ (HD.3737) (HD.3765) ] >>
+endobj
+11747 0 obj
+<< /Names [ (HD.3766) 4379 0 R (HD.3767) 4380 0 R (HD.3768) 4381 0 R (HD.3769) 4382 0 R (HD.377) 621 0 R (HD.3770) 4383 0 R (HD.3771) 4384 0 R (HD.3772) 4385 0 R (HD.3773) 4386 0 R (HD.3774) 4387 0 R (HD.3775) 4388 0 R (HD.3776) 4389 0 R (HD.3777) 4390 0 R (HD.3778) 4391 0 R (HD.3779) 4392 0 R (HD.378) 622 0 R (HD.3780) 4393 0 R (HD.3781) 4394 0 R (HD.3782) 4395 0 R (HD.3783) 4396 0 R (HD.3784) 4397 0 R (HD.3785) 4398 0 R (HD.3786) 4399 0 R (HD.3787) 4400 0 R (HD.3788) 4401 0 R (HD.3789) 4402 0 R (HD.379) 623 0 R (HD.3790) 4403 0 R (HD.3791) 4404 0 R (HD.3792) 4405 0 R (HD.3793) 4406 0 R (HD.3794) 4407 0 R ] /Limits [ (HD.3766) (HD.3794) ] >>
+endobj
+11748 0 obj
+<< /Names [ (HD.3795) 4408 0 R (HD.3796) 4409 0 R (HD.3797) 4410 0 R (HD.3798) 4411 0 R (HD.3799) 4412 0 R (HD.38) 233 0 R (HD.380) 624 0 R (HD.3800) 4417 0 R (HD.3801) 4418 0 R (HD.3802) 4419 0 R (HD.3803) 4420 0 R (HD.3804) 4421 0 R (HD.3805) 4422 0 R (HD.3806) 4423 0 R (HD.3807) 4424 0 R (HD.3808) 4425 0 R (HD.3809) 4426 0 R (HD.381) 625 0 R (HD.3810) 4427 0 R (HD.3811) 4428 0 R (HD.3812) 4429 0 R (HD.3813) 4430 0 R (HD.3814) 4431 0 R (HD.3815) 4432 0 R (HD.3816) 4433 0 R (HD.3817) 4434 0 R (HD.3818) 4435 0 R (HD.3819) 4436 0 R (HD.382) 630 0 R (HD.3820) 4437 0 R (HD.3821) 4438 0 R (HD.3822) 4439 0 R ] /Limits [ (HD.3795) (HD.3822) ] >>
+endobj
+11749 0 obj
+<< /Names [ (HD.3823) 4440 0 R (HD.3824) 4441 0 R (HD.3825) 4442 0 R (HD.3826) 4443 0 R (HD.3827) 4444 0 R (HD.3828) 4445 0 R (HD.3829) 4446 0 R (HD.383) 631 0 R (HD.3830) 4447 0 R (HD.3831) 4448 0 R (HD.3832) 4449 0 R (HD.3833) 4450 0 R (HD.3834) 4451 0 R (HD.3835) 4452 0 R (HD.3836) 4453 0 R (HD.3837) 4454 0 R (HD.3838) 4455 0 R (HD.3839) 4456 0 R (HD.384) 632 0 R (HD.3840) 4462 0 R (HD.3841) 4463 0 R (HD.3842) 4464 0 R (HD.3843) 4465 0 R (HD.3844) 4466 0 R (HD.3845) 4467 0 R (HD.3846) 4468 0 R (HD.3847) 4469 0 R (HD.3848) 4470 0 R (HD.3849) 4471 0 R (HD.385) 633 0 R (HD.3850) 4472 0 R (HD.3851) 4473 0 R ] /Limits [ (HD.3823) (HD.3851) ] >>
+endobj
+11750 0 obj
+<< /Names [ (HD.3852) 4474 0 R (HD.3853) 4475 0 R (HD.3854) 4476 0 R (HD.3855) 4477 0 R (HD.3856) 4478 0 R (HD.3857) 4479 0 R (HD.3858) 4480 0 R (HD.3859) 4481 0 R (HD.386) 634 0 R (HD.3860) 4482 0 R (HD.3861) 4483 0 R (HD.3862) 4484 0 R (HD.3863) 4485 0 R (HD.3864) 4486 0 R (HD.3865) 4487 0 R (HD.3866) 4488 0 R (HD.3867) 4489 0 R (HD.3868) 4490 0 R (HD.3869) 4491 0 R (HD.387) 635 0 R (HD.3870) 4492 0 R (HD.3871) 4493 0 R (HD.3872) 4494 0 R (HD.3873) 4495 0 R (HD.3874) 4496 0 R (HD.3875) 4497 0 R (HD.3876) 4498 0 R (HD.3877) 4499 0 R (HD.3878) 4500 0 R (HD.3879) 4501 0 R (HD.388) 636 0 R (HD.3880) 4503 0 R ] /Limits [ (HD.3852) (HD.3880) ] >>
+endobj
+11751 0 obj
+<< /Names [ (HD.3881) 4504 0 R (HD.3882) 4505 0 R (HD.3883) 4506 0 R (HD.3884) 4507 0 R (HD.3885) 4508 0 R (HD.3886) 4509 0 R (HD.3887) 4516 0 R (HD.3888) 4517 0 R (HD.3889) 4518 0 R (HD.389) 637 0 R (HD.3890) 4519 0 R (HD.3891) 4520 0 R (HD.3892) 4521 0 R (HD.3893) 4522 0 R (HD.3894) 4523 0 R (HD.3895) 4524 0 R (HD.3896) 4525 0 R (HD.3897) 4526 0 R (HD.3898) 4527 0 R (HD.3899) 4528 0 R (HD.39) 234 0 R (HD.390) 638 0 R (HD.3900) 4529 0 R (HD.3901) 4530 0 R (HD.3902) 4531 0 R (HD.3903) 4532 0 R (HD.3904) 4533 0 R (HD.3905) 4534 0 R (HD.3906) 4535 0 R (HD.3907) 4536 0 R (HD.3908) 4537 0 R (HD.3909) 4538 0 R ] /Limits [ (HD.3881) (HD.3909) ] >>
+endobj
+11752 0 obj
+<< /Names [ (HD.391) 639 0 R (HD.3910) 4539 0 R (HD.3911) 4540 0 R (HD.3912) 4541 0 R (HD.3913) 4542 0 R (HD.3914) 4543 0 R (HD.3915) 4544 0 R (HD.3916) 4545 0 R (HD.3917) 4546 0 R (HD.3918) 4547 0 R (HD.3919) 4548 0 R (HD.392) 640 0 R (HD.3920) 4549 0 R (HD.3921) 4550 0 R (HD.3922) 4551 0 R (HD.3923) 4552 0 R (HD.3924) 4553 0 R (HD.3925) 4554 0 R (HD.3926) 4555 0 R (HD.3927) 4556 0 R (HD.3928) 4557 0 R (HD.3929) 4563 0 R (HD.393) 641 0 R (HD.3930) 4564 0 R (HD.3931) 4565 0 R (HD.3932) 4566 0 R (HD.3933) 4567 0 R (HD.3934) 4568 0 R (HD.3935) 4569 0 R (HD.3936) 4570 0 R (HD.3937) 4571 0 R (HD.3938) 4572 0 R ] /Limits [ (HD.391) (HD.3938) ] >>
+endobj
+11753 0 obj
+<< /Names [ (HD.3939) 4573 0 R (HD.394) 643 0 R (HD.3940) 4574 0 R (HD.3941) 4575 0 R (HD.3942) 4576 0 R (HD.3943) 4577 0 R (HD.3944) 4578 0 R (HD.3945) 4579 0 R (HD.3946) 4580 0 R (HD.3947) 4581 0 R (HD.3948) 4582 0 R (HD.3949) 4583 0 R (HD.395) 645 0 R (HD.3950) 4584 0 R (HD.3951) 4585 0 R (HD.3952) 4586 0 R (HD.3953) 4587 0 R (HD.3954) 4588 0 R (HD.3955) 4589 0 R (HD.3956) 4590 0 R (HD.3957) 4591 0 R (HD.3958) 4592 0 R (HD.3959) 4593 0 R (HD.396) 646 0 R (HD.3960) 4594 0 R (HD.3961) 4601 0 R (HD.3962) 4602 0 R (HD.3963) 4603 0 R (HD.3964) 4604 0 R (HD.3965) 4605 0 R (HD.3966) 4606 0 R (HD.3967) 4607 0 R ] /Limits [ (HD.3939) (HD.3967) ] >>
+endobj
+11754 0 obj
+<< /Names [ (HD.3968) 4608 0 R (HD.3969) 4609 0 R (HD.397) 651 0 R (HD.3970) 4610 0 R (HD.3971) 4611 0 R (HD.3972) 4612 0 R (HD.3973) 4613 0 R (HD.3974) 4614 0 R (HD.3975) 4615 0 R (HD.3976) 4616 0 R (HD.3977) 4617 0 R (HD.3978) 4618 0 R (HD.3979) 4619 0 R (HD.398) 652 0 R (HD.3980) 4620 0 R (HD.3981) 4621 0 R (HD.3982) 4622 0 R (HD.3983) 4623 0 R (HD.3984) 4624 0 R (HD.3985) 4625 0 R (HD.3986) 4626 0 R (HD.3987) 4627 0 R (HD.3988) 4628 0 R (HD.3989) 4629 0 R (HD.399) 653 0 R (HD.3990) 4630 0 R (HD.3991) 4631 0 R (HD.3992) 4632 0 R (HD.3993) 4633 0 R (HD.3994) 4634 0 R (HD.3995) 4635 0 R (HD.3996) 4636 0 R ] /Limits [ (HD.3968) (HD.3996) ] >>
+endobj
+11755 0 obj
+<< /Names [ (HD.3997) 4637 0 R (HD.3998) 4638 0 R (HD.3999) 4639 0 R (HD.4) 192 0 R (HD.40) 235 0 R (HD.400) 655 0 R (HD.4000) 4640 0 R (HD.4001) 4641 0 R (HD.4002) 4642 0 R (HD.4003) 4643 0 R (HD.4004) 4648 0 R (HD.4005) 4649 0 R (HD.4006) 4650 0 R (HD.4007) 4651 0 R (HD.4008) 4652 0 R (HD.4009) 4653 0 R (HD.401) 656 0 R (HD.4010) 4654 0 R (HD.4011) 4655 0 R (HD.4012) 4656 0 R (HD.4013) 4657 0 R (HD.4014) 4658 0 R (HD.4015) 4659 0 R (HD.4016) 4660 0 R (HD.4017) 4661 0 R (HD.4018) 4662 0 R (HD.4019) 4663 0 R (HD.402) 657 0 R (HD.4020) 4664 0 R (HD.4021) 4665 0 R (HD.4022) 4666 0 R (HD.4023) 4667 0 R ] /Limits [ (HD.3997) (HD.4023) ] >>
+endobj
+11756 0 obj
+<< /Names [ (HD.4024) 4668 0 R (HD.4025) 4669 0 R (HD.4026) 4670 0 R (HD.4027) 4671 0 R (HD.4028) 4672 0 R (HD.4029) 4673 0 R (HD.403) 658 0 R (HD.4030) 4674 0 R (HD.4031) 4675 0 R (HD.4032) 4676 0 R (HD.4033) 4677 0 R (HD.4034) 4678 0 R (HD.4035) 4679 0 R (HD.4036) 4680 0 R (HD.4037) 4681 0 R (HD.4038) 4682 0 R (HD.4039) 4683 0 R (HD.404) 659 0 R (HD.4040) 4684 0 R (HD.4041) 4685 0 R (HD.4042) 4686 0 R (HD.4043) 4687 0 R (HD.4044) 4688 0 R (HD.4045) 4689 0 R (HD.4046) 4690 0 R (HD.4047) 4691 0 R (HD.4048) 4692 0 R (HD.4049) 4693 0 R (HD.405) 660 0 R (HD.4050) 4694 0 R (HD.4051) 4695 0 R (HD.4052) 4696 0 R ] /Limits [ (HD.4024) (HD.4052) ] >>
+endobj
+11757 0 obj
+<< /Names [ (HD.4053) 4697 0 R (HD.4054) 4698 0 R (HD.4055) 4703 0 R (HD.4056) 4704 0 R (HD.4057) 4705 0 R (HD.4058) 4706 0 R (HD.4059) 4707 0 R (HD.406) 661 0 R (HD.4060) 4708 0 R (HD.4061) 4709 0 R (HD.4062) 4710 0 R (HD.4063) 4711 0 R (HD.4064) 4712 0 R (HD.4065) 4713 0 R (HD.4066) 4714 0 R (HD.4067) 4715 0 R (HD.4068) 4716 0 R (HD.4069) 4717 0 R (HD.407) 662 0 R (HD.4070) 4718 0 R (HD.4071) 4719 0 R (HD.4072) 4720 0 R (HD.4073) 4721 0 R (HD.4074) 4722 0 R (HD.4075) 4727 0 R (HD.4076) 4728 0 R (HD.4077) 4729 0 R (HD.4078) 4730 0 R (HD.4079) 4731 0 R (HD.408) 663 0 R (HD.4080) 4732 0 R (HD.4081) 4733 0 R ] /Limits [ (HD.4053) (HD.4081) ] >>
+endobj
+11758 0 obj
+<< /Names [ (HD.4082) 4734 0 R (HD.4083) 4735 0 R (HD.4084) 4736 0 R (HD.4085) 4737 0 R (HD.4086) 4738 0 R (HD.4087) 4739 0 R (HD.4088) 4740 0 R (HD.4089) 4741 0 R (HD.409) 664 0 R (HD.4090) 4742 0 R (HD.4091) 4743 0 R (HD.4092) 4744 0 R (HD.4093) 4745 0 R (HD.4094) 4746 0 R (HD.4095) 4747 0 R (HD.4096) 4748 0 R (HD.4097) 4749 0 R (HD.4098) 4750 0 R (HD.4099) 4751 0 R (HD.41) 236 0 R (HD.410) 665 0 R (HD.4100) 4752 0 R (HD.4101) 4753 0 R (HD.4102) 4754 0 R (HD.4103) 4755 0 R (HD.4104) 4756 0 R (HD.4105) 4757 0 R (HD.4106) 4758 0 R (HD.4107) 4759 0 R (HD.4108) 4760 0 R (HD.4109) 4761 0 R (HD.411) 666 0 R ] /Limits [ (HD.4082) (HD.411) ] >>
+endobj
+11759 0 obj
+<< /Names [ (HD.4110) 4762 0 R (HD.4111) 4763 0 R (HD.4112) 4764 0 R (HD.4113) 4765 0 R (HD.4114) 4766 0 R (HD.4115) 4767 0 R (HD.4116) 4768 0 R (HD.4117) 4769 0 R (HD.4118) 4770 0 R (HD.4119) 4771 0 R (HD.412) 667 0 R (HD.4120) 4772 0 R (HD.4121) 4773 0 R (HD.4122) 4774 0 R (HD.4123) 4775 0 R (HD.4124) 4776 0 R (HD.4125) 4777 0 R (HD.4126) 4778 0 R (HD.4127) 4779 0 R (HD.4128) 4785 0 R (HD.4129) 4786 0 R (HD.413) 668 0 R (HD.4130) 4787 0 R (HD.4131) 4788 0 R (HD.4132) 4789 0 R (HD.4133) 4790 0 R (HD.4134) 4791 0 R (HD.4135) 4792 0 R (HD.4136) 4793 0 R (HD.4137) 4794 0 R (HD.4138) 4795 0 R (HD.4139) 4796 0 R ] /Limits [ (HD.4110) (HD.4139) ] >>
+endobj
+11760 0 obj
+<< /Names [ (HD.414) 669 0 R (HD.4140) 4797 0 R (HD.4141) 4798 0 R (HD.4142) 4799 0 R (HD.4143) 4800 0 R (HD.4144) 4801 0 R (HD.4145) 4802 0 R (HD.4146) 4803 0 R (HD.4147) 4804 0 R (HD.4148) 4805 0 R (HD.4149) 4806 0 R (HD.415) 670 0 R (HD.4150) 4807 0 R (HD.4151) 4808 0 R (HD.4152) 4809 0 R (HD.4153) 4810 0 R (HD.4154) 4811 0 R (HD.4155) 4812 0 R (HD.4156) 4813 0 R (HD.4157) 4814 0 R (HD.4158) 4815 0 R (HD.4159) 4816 0 R (HD.416) 671 0 R (HD.4160) 4817 0 R (HD.4161) 4818 0 R (HD.4162) 4819 0 R (HD.4163) 4820 0 R (HD.4164) 4821 0 R (HD.4165) 4822 0 R (HD.4166) 4823 0 R (HD.4167) 4824 0 R (HD.4168) 4825 0 R ] /Limits [ (HD.414) (HD.4168) ] >>
+endobj
+11761 0 obj
+<< /Names [ (HD.4169) 4826 0 R (HD.417) 672 0 R (HD.4170) 4827 0 R (HD.4171) 4828 0 R (HD.4172) 4829 0 R (HD.4173) 4830 0 R (HD.4174) 4831 0 R (HD.4175) 4832 0 R (HD.4176) 4833 0 R (HD.4177) 4834 0 R (HD.4178) 4835 0 R (HD.4179) 4836 0 R (HD.418) 677 0 R (HD.4180) 4837 0 R (HD.4181) 4842 0 R (HD.4182) 4843 0 R (HD.4183) 4844 0 R (HD.4184) 4845 0 R (HD.4185) 4846 0 R (HD.4186) 4847 0 R (HD.4187) 4848 0 R (HD.4188) 4849 0 R (HD.4189) 4850 0 R (HD.419) 678 0 R (HD.4190) 4851 0 R (HD.4191) 4852 0 R (HD.4192) 4853 0 R (HD.4193) 4854 0 R (HD.4194) 4855 0 R (HD.4195) 4856 0 R (HD.4196) 4857 0 R (HD.4197) 4858 0 R ] /Limits [ (HD.4169) (HD.4197) ] >>
+endobj
+11762 0 obj
+<< /Names [ (HD.4198) 4859 0 R (HD.4199) 4860 0 R (HD.42) 237 0 R (HD.420) 679 0 R (HD.4200) 4861 0 R (HD.4201) 4862 0 R (HD.4202) 4863 0 R (HD.4203) 4864 0 R (HD.4204) 4865 0 R (HD.4205) 4866 0 R (HD.4206) 4867 0 R (HD.4207) 4868 0 R (HD.4208) 4869 0 R (HD.4209) 4870 0 R (HD.421) 680 0 R (HD.4210) 4871 0 R (HD.4211) 4872 0 R (HD.4212) 4873 0 R (HD.4213) 4874 0 R (HD.4214) 4875 0 R (HD.4215) 4876 0 R (HD.4216) 4877 0 R (HD.4217) 4878 0 R (HD.4218) 4879 0 R (HD.4219) 4880 0 R (HD.422) 681 0 R (HD.4220) 4881 0 R (HD.4221) 4882 0 R (HD.4222) 4883 0 R (HD.4223) 4884 0 R (HD.4224) 4885 0 R (HD.4225) 4886 0 R ] /Limits [ (HD.4198) (HD.4225) ] >>
+endobj
+11763 0 obj
+<< /Names [ (HD.4226) 4887 0 R (HD.4227) 4892 0 R (HD.4228) 4893 0 R (HD.4229) 4894 0 R (HD.423) 682 0 R (HD.4230) 4895 0 R (HD.4231) 4896 0 R (HD.4232) 4897 0 R (HD.4233) 4898 0 R (HD.4234) 4899 0 R (HD.4235) 4900 0 R (HD.4236) 4901 0 R (HD.4237) 4902 0 R (HD.4238) 4903 0 R (HD.4239) 4904 0 R (HD.424) 683 0 R (HD.4240) 4905 0 R (HD.4241) 4906 0 R (HD.4242) 4907 0 R (HD.4243) 4908 0 R (HD.4244) 4909 0 R (HD.4245) 4910 0 R (HD.4246) 4911 0 R (HD.4247) 4912 0 R (HD.4248) 4913 0 R (HD.4249) 4914 0 R (HD.425) 684 0 R (HD.4250) 4915 0 R (HD.4251) 4916 0 R (HD.4252) 4917 0 R (HD.4253) 4918 0 R (HD.4254) 4919 0 R ] /Limits [ (HD.4226) (HD.4254) ] >>
+endobj
+11764 0 obj
+<< /Names [ (HD.4255) 4920 0 R (HD.4256) 4921 0 R (HD.4257) 4922 0 R (HD.4258) 4923 0 R (HD.4259) 4924 0 R (HD.426) 685 0 R (HD.4260) 4925 0 R (HD.4261) 4926 0 R (HD.4262) 4927 0 R (HD.4263) 4928 0 R (HD.4264) 4929 0 R (HD.4265) 4930 0 R (HD.4266) 4931 0 R (HD.4267) 4932 0 R (HD.4268) 4933 0 R (HD.4269) 4934 0 R (HD.427) 686 0 R (HD.4270) 4935 0 R (HD.4271) 4936 0 R (HD.4272) 4937 0 R (HD.4273) 4938 0 R (HD.4274) 4939 0 R (HD.4275) 4940 0 R (HD.4276) 4941 0 R (HD.4277) 4942 0 R (HD.4278) 4943 0 R (HD.4279) 4944 0 R (HD.428) 687 0 R (HD.4280) 4945 0 R (HD.4281) 4946 0 R (HD.4282) 4951 0 R (HD.4283) 4952 0 R ] /Limits [ (HD.4255) (HD.4283) ] >>
+endobj
+11765 0 obj
+<< /Names [ (HD.4284) 4953 0 R (HD.4285) 4954 0 R (HD.4286) 4955 0 R (HD.4287) 4956 0 R (HD.4288) 4957 0 R (HD.4289) 4958 0 R (HD.429) 688 0 R (HD.4290) 4959 0 R (HD.4291) 4960 0 R (HD.4292) 4961 0 R (HD.4293) 4962 0 R (HD.4294) 4963 0 R (HD.4295) 4964 0 R (HD.4296) 4965 0 R (HD.4297) 4966 0 R (HD.4298) 4967 0 R (HD.4299) 4968 0 R (HD.43) 238 0 R (HD.430) 689 0 R (HD.4300) 4969 0 R (HD.4301) 4970 0 R (HD.4302) 4971 0 R (HD.4303) 4972 0 R (HD.4304) 4973 0 R (HD.4305) 4974 0 R (HD.4306) 4975 0 R (HD.4307) 4976 0 R (HD.4308) 4977 0 R (HD.4309) 4978 0 R (HD.431) 694 0 R (HD.4310) 4979 0 R (HD.4311) 4980 0 R ] /Limits [ (HD.4284) (HD.4311) ] >>
+endobj
+11766 0 obj
+<< /Names [ (HD.4312) 4981 0 R (HD.4313) 4982 0 R (HD.4314) 4983 0 R (HD.4315) 4984 0 R (HD.4316) 4985 0 R (HD.4317) 4986 0 R (HD.4318) 4987 0 R (HD.4319) 4988 0 R (HD.432) 695 0 R (HD.4320) 4989 0 R (HD.4321) 4990 0 R (HD.4322) 4991 0 R (HD.4323) 4992 0 R (HD.4324) 4993 0 R (HD.4325) 4994 0 R (HD.4326) 4995 0 R (HD.4327) 4996 0 R (HD.4328) 4997 0 R (HD.4329) 4998 0 R (HD.433) 696 0 R (HD.4330) 4999 0 R (HD.4331) 5000 0 R (HD.4332) 5001 0 R (HD.4333) 5002 0 R (HD.4334) 5003 0 R (HD.4335) 5004 0 R (HD.4336) 5005 0 R (HD.4337) 5010 0 R (HD.4338) 5011 0 R (HD.4339) 5012 0 R (HD.434) 697 0 R (HD.4340) 5013 0 R ] /Limits [ (HD.4312) (HD.4340) ] >>
+endobj
+11767 0 obj
+<< /Names [ (HD.4341) 5014 0 R (HD.4342) 5015 0 R (HD.4343) 5016 0 R (HD.4344) 5017 0 R (HD.4345) 5018 0 R (HD.4346) 5019 0 R (HD.4347) 5020 0 R (HD.4348) 5021 0 R (HD.4349) 5022 0 R (HD.435) 698 0 R (HD.4350) 5023 0 R (HD.4351) 5024 0 R (HD.4352) 5025 0 R (HD.4353) 5026 0 R (HD.4354) 5027 0 R (HD.4355) 5028 0 R (HD.4356) 5029 0 R (HD.4357) 5030 0 R (HD.4358) 5031 0 R (HD.4359) 5032 0 R (HD.436) 699 0 R (HD.4360) 5033 0 R (HD.4361) 5034 0 R (HD.4362) 5035 0 R (HD.4363) 5036 0 R (HD.4364) 5037 0 R (HD.4365) 5038 0 R (HD.4366) 5039 0 R (HD.4367) 5040 0 R (HD.4368) 5041 0 R (HD.4369) 5042 0 R (HD.437) 700 0 R ] /Limits [ (HD.4341) (HD.437) ] >>
+endobj
+11768 0 obj
+<< /Names [ (HD.4370) 5043 0 R (HD.4371) 5044 0 R (HD.4372) 5045 0 R (HD.4373) 5046 0 R (HD.4374) 5047 0 R (HD.4375) 5048 0 R (HD.4376) 5049 0 R (HD.4377) 5054 0 R (HD.4378) 5055 0 R (HD.4379) 5056 0 R (HD.438) 701 0 R (HD.4380) 5057 0 R (HD.4381) 5058 0 R (HD.4382) 5059 0 R (HD.4383) 5060 0 R (HD.4384) 5061 0 R (HD.4385) 5062 0 R (HD.4386) 5063 0 R (HD.4387) 5064 0 R (HD.4388) 5065 0 R (HD.4389) 5066 0 R (HD.439) 702 0 R (HD.4390) 5067 0 R (HD.4391) 5068 0 R (HD.4392) 5069 0 R (HD.4393) 5070 0 R (HD.4394) 5071 0 R (HD.4395) 5072 0 R (HD.4396) 5073 0 R (HD.4397) 5074 0 R (HD.4398) 5075 0 R (HD.4399) 5076 0 R ] /Limits [ (HD.4370) (HD.4399) ] >>
+endobj
+11769 0 obj
+<< /Names [ (HD.44) 239 0 R (HD.440) 703 0 R (HD.4400) 5077 0 R (HD.4401) 5078 0 R (HD.4402) 5079 0 R (HD.4403) 5080 0 R (HD.4404) 5081 0 R (HD.4405) 5082 0 R (HD.4406) 5083 0 R (HD.4407) 5084 0 R (HD.4408) 5085 0 R (HD.4409) 5086 0 R (HD.441) 704 0 R (HD.4410) 5087 0 R (HD.4411) 5088 0 R (HD.4412) 5089 0 R (HD.4413) 5090 0 R (HD.4414) 5091 0 R (HD.4415) 5096 0 R (HD.4416) 5097 0 R (HD.4417) 5098 0 R (HD.4418) 5099 0 R (HD.4419) 5100 0 R (HD.442) 705 0 R (HD.4420) 5101 0 R (HD.4421) 5102 0 R (HD.4422) 5103 0 R (HD.4423) 5104 0 R (HD.4424) 5105 0 R (HD.4425) 5106 0 R (HD.4426) 5107 0 R (HD.4427) 5108 0 R ] /Limits [ (HD.44) (HD.4427) ] >>
+endobj
+11770 0 obj
+<< /Names [ (HD.4428) 5109 0 R (HD.4429) 5110 0 R (HD.443) 706 0 R (HD.4430) 5111 0 R (HD.4431) 5112 0 R (HD.4432) 5113 0 R (HD.4433) 5114 0 R (HD.4434) 5115 0 R (HD.4435) 5116 0 R (HD.4436) 5117 0 R (HD.4437) 5118 0 R (HD.4438) 5119 0 R (HD.4439) 5120 0 R (HD.444) 707 0 R (HD.4440) 5121 0 R (HD.4441) 5122 0 R (HD.4442) 5123 0 R (HD.4443) 5124 0 R (HD.4444) 5125 0 R (HD.4445) 5126 0 R (HD.4446) 5127 0 R (HD.4447) 5128 0 R (HD.4448) 5129 0 R (HD.4449) 5130 0 R (HD.445) 708 0 R (HD.4450) 5131 0 R (HD.4451) 5132 0 R (HD.4452) 5133 0 R (HD.4453) 5134 0 R (HD.4454) 5135 0 R (HD.4455) 5136 0 R (HD.4456) 5137 0 R ] /Limits [ (HD.4428) (HD.4456) ] >>
+endobj
+11771 0 obj
+<< /Names [ (HD.4457) 5138 0 R (HD.4458) 5139 0 R (HD.4459) 5140 0 R (HD.446) 709 0 R (HD.4460) 5141 0 R (HD.4461) 5142 0 R (HD.4462) 5143 0 R (HD.4463) 5144 0 R (HD.4464) 5145 0 R (HD.4465) 5146 0 R (HD.4466) 5147 0 R (HD.4467) 5148 0 R (HD.4468) 5149 0 R (HD.4469) 5150 0 R (HD.447) 710 0 R (HD.4470) 5151 0 R (HD.4471) 5152 0 R (HD.4472) 5153 0 R (HD.4473) 5154 0 R (HD.4474) 5155 0 R (HD.4475) 5156 0 R (HD.4476) 5157 0 R (HD.4477) 5158 0 R (HD.4478) 5163 0 R (HD.4479) 5164 0 R (HD.448) 711 0 R (HD.4480) 5165 0 R (HD.4481) 5166 0 R (HD.4482) 5167 0 R (HD.4483) 5168 0 R (HD.4484) 5169 0 R (HD.4485) 5170 0 R ] /Limits [ (HD.4457) (HD.4485) ] >>
+endobj
+11772 0 obj
+<< /Names [ (HD.4486) 5171 0 R (HD.4487) 5172 0 R (HD.4488) 5173 0 R (HD.4489) 5174 0 R (HD.449) 712 0 R (HD.4490) 5175 0 R (HD.4491) 5176 0 R (HD.4492) 5177 0 R (HD.4493) 5178 0 R (HD.4494) 5179 0 R (HD.4495) 5180 0 R (HD.4496) 5181 0 R (HD.4497) 5182 0 R (HD.4498) 5183 0 R (HD.4499) 5184 0 R (HD.45) 240 0 R (HD.450) 713 0 R (HD.4500) 5185 0 R (HD.4501) 5186 0 R (HD.4502) 5187 0 R (HD.4503) 5188 0 R (HD.4504) 5189 0 R (HD.4505) 5190 0 R (HD.4506) 5191 0 R (HD.4507) 5192 0 R (HD.4508) 5193 0 R (HD.4509) 5194 0 R (HD.451) 714 0 R (HD.4510) 5195 0 R (HD.4511) 5196 0 R (HD.4512) 5197 0 R (HD.4513) 5198 0 R ] /Limits [ (HD.4486) (HD.4513) ] >>
+endobj
+11773 0 obj
+<< /Names [ (HD.4514) 5199 0 R (HD.4515) 5200 0 R (HD.4516) 5205 0 R (HD.4517) 5206 0 R (HD.4518) 5207 0 R (HD.4519) 5208 0 R (HD.452) 715 0 R (HD.4520) 5209 0 R (HD.4521) 5210 0 R (HD.4522) 5211 0 R (HD.4523) 5212 0 R (HD.4524) 5213 0 R (HD.4525) 5214 0 R (HD.4526) 5215 0 R (HD.4527) 5216 0 R (HD.4528) 5217 0 R (HD.4529) 5218 0 R (HD.453) 720 0 R (HD.4530) 5219 0 R (HD.4531) 5220 0 R (HD.4532) 5221 0 R (HD.4533) 5222 0 R (HD.4534) 5223 0 R (HD.4535) 5224 0 R (HD.4536) 5225 0 R (HD.4537) 5226 0 R (HD.4538) 5227 0 R (HD.4539) 5228 0 R (HD.454) 721 0 R (HD.4540) 5229 0 R (HD.4541) 5230 0 R (HD.4542) 5231 0 R ] /Limits [ (HD.4514) (HD.4542) ] >>
+endobj
+11774 0 obj
+<< /Names [ (HD.4543) 5232 0 R (HD.4544) 5233 0 R (HD.4545) 5234 0 R (HD.4546) 5235 0 R (HD.4547) 5236 0 R (HD.4548) 5237 0 R (HD.4549) 5238 0 R (HD.455) 722 0 R (HD.4550) 5239 0 R (HD.4551) 5240 0 R (HD.4552) 5241 0 R (HD.4553) 5242 0 R (HD.4554) 5243 0 R (HD.4555) 5244 0 R (HD.4556) 5245 0 R (HD.4557) 5246 0 R (HD.4558) 5247 0 R (HD.4559) 5248 0 R (HD.456) 723 0 R (HD.4560) 5249 0 R (HD.4561) 5250 0 R (HD.4562) 5251 0 R (HD.4563) 5252 0 R (HD.4564) 5253 0 R (HD.4565) 5254 0 R (HD.4566) 5255 0 R (HD.4567) 5256 0 R (HD.4568) 5257 0 R (HD.4569) 5262 0 R (HD.457) 724 0 R (HD.4570) 5263 0 R (HD.4571) 5264 0 R ] /Limits [ (HD.4543) (HD.4571) ] >>
+endobj
+11775 0 obj
+<< /Names [ (HD.4572) 5265 0 R (HD.4573) 5266 0 R (HD.4574) 5267 0 R (HD.4575) 5268 0 R (HD.4576) 5269 0 R (HD.4577) 5270 0 R (HD.4578) 5271 0 R (HD.4579) 5272 0 R (HD.458) 725 0 R (HD.4580) 5273 0 R (HD.4581) 5274 0 R (HD.4582) 5275 0 R (HD.4583) 5276 0 R (HD.4584) 5277 0 R (HD.4585) 5278 0 R (HD.4586) 5279 0 R (HD.4587) 5280 0 R (HD.4588) 5281 0 R (HD.4589) 5282 0 R (HD.459) 726 0 R (HD.4590) 5283 0 R (HD.4591) 5284 0 R (HD.4592) 5285 0 R (HD.4593) 5286 0 R (HD.4594) 5287 0 R (HD.4595) 5288 0 R (HD.4596) 5289 0 R (HD.4597) 5290 0 R (HD.4598) 5291 0 R (HD.4599) 5292 0 R (HD.46) 241 0 R (HD.460) 727 0 R ] /Limits [ (HD.4572) (HD.460) ] >>
+endobj
+11776 0 obj
+<< /Names [ (HD.4600) 5293 0 R (HD.4601) 5294 0 R (HD.4602) 5295 0 R (HD.4603) 5296 0 R (HD.4604) 5297 0 R (HD.4605) 5298 0 R (HD.4606) 5304 0 R (HD.4607) 5305 0 R (HD.4608) 5306 0 R (HD.4609) 5307 0 R (HD.461) 728 0 R (HD.4610) 5308 0 R (HD.4611) 5309 0 R (HD.4612) 5310 0 R (HD.4613) 5311 0 R (HD.4614) 5312 0 R (HD.4615) 5313 0 R (HD.4616) 5314 0 R (HD.4617) 5315 0 R (HD.4618) 5316 0 R (HD.4619) 5317 0 R (HD.462) 729 0 R (HD.4620) 5318 0 R (HD.4621) 5319 0 R (HD.4622) 5320 0 R (HD.4623) 5321 0 R (HD.4624) 5322 0 R (HD.4625) 5323 0 R (HD.4626) 5324 0 R (HD.4627) 5325 0 R (HD.4628) 5326 0 R (HD.4629) 5327 0 R ] /Limits [ (HD.4600) (HD.4629) ] >>
+endobj
+11777 0 obj
+<< /Names [ (HD.463) 730 0 R (HD.4630) 5328 0 R (HD.4631) 5329 0 R (HD.4632) 5330 0 R (HD.4633) 5331 0 R (HD.4634) 5332 0 R (HD.4635) 5333 0 R (HD.4636) 5334 0 R (HD.4637) 5335 0 R (HD.4638) 5340 0 R (HD.4639) 5341 0 R (HD.464) 731 0 R (HD.4640) 5342 0 R (HD.4641) 5343 0 R (HD.4642) 5344 0 R (HD.4643) 5345 0 R (HD.4644) 5346 0 R (HD.4645) 5347 0 R (HD.4646) 5348 0 R (HD.4647) 5349 0 R (HD.4648) 5350 0 R (HD.4649) 5351 0 R (HD.465) 732 0 R (HD.4650) 5352 0 R (HD.4651) 5353 0 R (HD.4652) 5354 0 R (HD.4653) 5355 0 R (HD.4654) 5356 0 R (HD.4655) 5357 0 R (HD.4656) 5358 0 R (HD.4657) 5359 0 R (HD.4658) 5360 0 R ] /Limits [ (HD.463) (HD.4658) ] >>
+endobj
+11778 0 obj
+<< /Names [ (HD.4659) 5361 0 R (HD.466) 733 0 R (HD.4660) 5362 0 R (HD.4661) 5363 0 R (HD.4662) 5364 0 R (HD.4663) 5365 0 R (HD.4664) 5366 0 R (HD.4665) 5367 0 R (HD.4666) 5368 0 R (HD.4667) 5369 0 R (HD.4668) 5370 0 R (HD.4669) 5371 0 R (HD.467) 734 0 R (HD.4670) 5372 0 R (HD.4671) 5373 0 R (HD.4672) 5374 0 R (HD.4673) 5375 0 R (HD.4674) 5376 0 R (HD.4675) 5377 0 R (HD.4676) 5378 0 R (HD.4677) 5379 0 R (HD.4678) 5380 0 R (HD.4679) 5381 0 R (HD.468) 735 0 R (HD.4680) 5386 0 R (HD.4681) 5387 0 R (HD.4682) 5388 0 R (HD.4683) 5389 0 R (HD.4684) 5390 0 R (HD.4685) 5391 0 R (HD.4686) 5392 0 R (HD.4687) 5393 0 R ] /Limits [ (HD.4659) (HD.4687) ] >>
+endobj
+11779 0 obj
+<< /Names [ (HD.4688) 5394 0 R (HD.4689) 5395 0 R (HD.469) 737 0 R (HD.4690) 5396 0 R (HD.4691) 5397 0 R (HD.4692) 5398 0 R (HD.4693) 5399 0 R (HD.4694) 5400 0 R (HD.4695) 5401 0 R (HD.4696) 5402 0 R (HD.4697) 5403 0 R (HD.4698) 5404 0 R (HD.4699) 5405 0 R (HD.47) 242 0 R (HD.470) 738 0 R (HD.4700) 5406 0 R (HD.4701) 5407 0 R (HD.4702) 5408 0 R (HD.4703) 5409 0 R (HD.4704) 5410 0 R (HD.4705) 5411 0 R (HD.4706) 5412 0 R (HD.4707) 5413 0 R (HD.4708) 5414 0 R (HD.4709) 5415 0 R (HD.471) 739 0 R (HD.4710) 5416 0 R (HD.4711) 5417 0 R (HD.4712) 5418 0 R (HD.4713) 5419 0 R (HD.4714) 5420 0 R (HD.4715) 5421 0 R ] /Limits [ (HD.4688) (HD.4715) ] >>
+endobj
+11780 0 obj
+<< /Names [ (HD.4716) 5422 0 R (HD.4717) 5423 0 R (HD.4718) 5424 0 R (HD.4719) 5425 0 R (HD.472) 740 0 R (HD.4720) 5426 0 R (HD.4721) 5427 0 R (HD.4722) 5428 0 R (HD.4723) 5429 0 R (HD.4724) 5434 0 R (HD.4725) 5435 0 R (HD.4726) 5436 0 R (HD.4727) 5437 0 R (HD.4728) 5438 0 R (HD.4729) 5439 0 R (HD.473) 746 0 R (HD.4730) 5440 0 R (HD.4731) 5441 0 R (HD.4732) 5442 0 R (HD.4733) 5443 0 R (HD.4734) 5444 0 R (HD.4735) 5445 0 R (HD.4736) 5446 0 R (HD.4737) 5447 0 R (HD.4738) 5448 0 R (HD.4739) 5449 0 R (HD.474) 747 0 R (HD.4740) 5450 0 R (HD.4741) 5451 0 R (HD.4742) 5452 0 R (HD.4743) 5453 0 R (HD.4744) 5454 0 R ] /Limits [ (HD.4716) (HD.4744) ] >>
+endobj
+11781 0 obj
+<< /Names [ (HD.4745) 5455 0 R (HD.4746) 5456 0 R (HD.4747) 5457 0 R (HD.4748) 5458 0 R (HD.4749) 5459 0 R (HD.475) 748 0 R (HD.4750) 5460 0 R (HD.4751) 5461 0 R (HD.4752) 5462 0 R (HD.4753) 5463 0 R (HD.4754) 5464 0 R (HD.4755) 5465 0 R (HD.4756) 5466 0 R (HD.4757) 5467 0 R (HD.4758) 5468 0 R (HD.4759) 5469 0 R (HD.476) 749 0 R (HD.4760) 5470 0 R (HD.4761) 5471 0 R (HD.4762) 5472 0 R (HD.4763) 5473 0 R (HD.4764) 5474 0 R (HD.4765) 5475 0 R (HD.4766) 5476 0 R (HD.4767) 5477 0 R (HD.4768) 5478 0 R (HD.4769) 5479 0 R (HD.477) 750 0 R (HD.4770) 5480 0 R (HD.4771) 5481 0 R (HD.4772) 5482 0 R (HD.4773) 5483 0 R ] /Limits [ (HD.4745) (HD.4773) ] >>
+endobj
+11782 0 obj
+<< /Names [ (HD.4774) 5484 0 R (HD.4775) 5485 0 R (HD.4776) 5486 0 R (HD.4777) 5487 0 R (HD.4778) 5492 0 R (HD.4779) 5493 0 R (HD.478) 751 0 R (HD.4780) 5494 0 R (HD.4781) 5495 0 R (HD.4782) 5496 0 R (HD.4783) 5497 0 R (HD.4784) 5498 0 R (HD.4785) 5499 0 R (HD.4786) 5500 0 R (HD.4787) 5501 0 R (HD.4788) 5502 0 R (HD.4789) 5503 0 R (HD.479) 752 0 R (HD.4790) 5504 0 R (HD.4791) 5505 0 R (HD.4792) 5506 0 R (HD.4793) 5507 0 R (HD.4794) 5508 0 R (HD.4795) 5509 0 R (HD.4796) 5510 0 R (HD.4797) 5511 0 R (HD.4798) 5512 0 R (HD.4799) 5513 0 R (HD.48) 243 0 R (HD.480) 753 0 R (HD.4800) 5514 0 R (HD.4801) 5515 0 R ] /Limits [ (HD.4774) (HD.4801) ] >>
+endobj
+11783 0 obj
+<< /Names [ (HD.4802) 5516 0 R (HD.4803) 5517 0 R (HD.4804) 5518 0 R (HD.4805) 5519 0 R (HD.4806) 5520 0 R (HD.4807) 5521 0 R (HD.4808) 5522 0 R (HD.4809) 5523 0 R (HD.481) 754 0 R (HD.4810) 5524 0 R (HD.4811) 5525 0 R (HD.4812) 5526 0 R (HD.4813) 5527 0 R (HD.4814) 5528 0 R (HD.4815) 5529 0 R (HD.4816) 5530 0 R (HD.4817) 5531 0 R (HD.4818) 5532 0 R (HD.4819) 5533 0 R (HD.482) 755 0 R (HD.4820) 5534 0 R (HD.4821) 5535 0 R (HD.4822) 5536 0 R (HD.4823) 5537 0 R (HD.4824) 5538 0 R (HD.4825) 5539 0 R (HD.4826) 5540 0 R (HD.4827) 5545 0 R (HD.4828) 5546 0 R (HD.4829) 5547 0 R (HD.483) 756 0 R (HD.4830) 5548 0 R ] /Limits [ (HD.4802) (HD.4830) ] >>
+endobj
+11784 0 obj
+<< /Names [ (HD.4831) 5549 0 R (HD.4832) 5550 0 R (HD.4833) 5551 0 R (HD.4834) 5552 0 R (HD.4835) 5553 0 R (HD.4836) 5554 0 R (HD.4837) 5555 0 R (HD.4838) 5556 0 R (HD.4839) 5557 0 R (HD.484) 757 0 R (HD.4840) 5558 0 R (HD.4841) 5559 0 R (HD.4842) 5560 0 R (HD.4843) 5561 0 R (HD.4844) 5562 0 R (HD.4845) 5563 0 R (HD.4846) 5564 0 R (HD.4847) 5565 0 R (HD.4848) 5566 0 R (HD.4849) 5567 0 R (HD.485) 758 0 R (HD.4850) 5568 0 R (HD.4851) 5569 0 R (HD.4852) 5570 0 R (HD.4853) 5571 0 R (HD.4854) 5572 0 R (HD.4855) 5573 0 R (HD.4856) 5574 0 R (HD.4857) 5575 0 R (HD.4858) 5576 0 R (HD.4859) 5577 0 R (HD.486) 769 0 R ] /Limits [ (HD.4831) (HD.486) ] >>
+endobj
+11785 0 obj
+<< /Names [ (HD.4860) 5578 0 R (HD.4861) 5579 0 R (HD.4862) 5580 0 R (HD.4863) 5581 0 R (HD.4864) 5582 0 R (HD.4865) 5583 0 R (HD.4866) 5584 0 R (HD.4867) 5585 0 R (HD.4868) 5586 0 R (HD.4869) 5587 0 R (HD.487) 770 0 R (HD.4870) 5588 0 R (HD.4871) 5589 0 R (HD.4872) 5590 0 R (HD.4873) 5591 0 R (HD.4874) 5592 0 R (HD.4875) 5593 0 R (HD.4876) 5594 0 R (HD.4877) 5595 0 R (HD.4878) 5596 0 R (HD.4879) 5597 0 R (HD.488) 771 0 R (HD.4880) 5598 0 R (HD.4881) 5599 0 R (HD.4882) 5600 0 R (HD.4883) 5605 0 R (HD.4884) 5606 0 R (HD.4885) 5607 0 R (HD.4886) 5608 0 R (HD.4887) 5609 0 R (HD.4888) 5610 0 R (HD.4889) 5611 0 R ] /Limits [ (HD.4860) (HD.4889) ] >>
+endobj
+11786 0 obj
+<< /Names [ (HD.489) 772 0 R (HD.4890) 5612 0 R (HD.4891) 5613 0 R (HD.4892) 5614 0 R (HD.4893) 5615 0 R (HD.4894) 5616 0 R (HD.4895) 5617 0 R (HD.4896) 5618 0 R (HD.4897) 5619 0 R (HD.4898) 5620 0 R (HD.4899) 5621 0 R (HD.49) 244 0 R (HD.490) 773 0 R (HD.4900) 5622 0 R (HD.4901) 5623 0 R (HD.4902) 5624 0 R (HD.4903) 5625 0 R (HD.4904) 5626 0 R (HD.4905) 5627 0 R (HD.4906) 5628 0 R (HD.4907) 5629 0 R (HD.4908) 5630 0 R (HD.4909) 5631 0 R (HD.491) 774 0 R (HD.4910) 5632 0 R (HD.4911) 5633 0 R (HD.4912) 5634 0 R (HD.4913) 5635 0 R (HD.4914) 5636 0 R (HD.4915) 5637 0 R (HD.4916) 5638 0 R (HD.4917) 5639 0 R ] /Limits [ (HD.489) (HD.4917) ] >>
+endobj
+11787 0 obj
+<< /Names [ (HD.4918) 5640 0 R (HD.4919) 5641 0 R (HD.492) 775 0 R (HD.4920) 5642 0 R (HD.4921) 5643 0 R (HD.4922) 5644 0 R (HD.4923) 5645 0 R (HD.4924) 5646 0 R (HD.4925) 5647 0 R (HD.4926) 5648 0 R (HD.4927) 5649 0 R (HD.4928) 5650 0 R (HD.4929) 5651 0 R (HD.493) 776 0 R (HD.4930) 5652 0 R (HD.4931) 5653 0 R (HD.4932) 5654 0 R (HD.4933) 5655 0 R (HD.4934) 5656 0 R (HD.4935) 5657 0 R (HD.4936) 5658 0 R (HD.4937) 5659 0 R (HD.4938) 5660 0 R (HD.4939) 5661 0 R (HD.494) 777 0 R (HD.4940) 5662 0 R (HD.4941) 5663 0 R (HD.4942) 5664 0 R (HD.4943) 5665 0 R (HD.4944) 5666 0 R (HD.4945) 5667 0 R (HD.4946) 5672 0 R ] /Limits [ (HD.4918) (HD.4946) ] >>
+endobj
+11788 0 obj
+<< /Names [ (HD.4947) 5673 0 R (HD.4948) 5674 0 R (HD.4949) 5675 0 R (HD.495) 778 0 R (HD.4950) 5676 0 R (HD.4951) 5677 0 R (HD.4952) 5678 0 R (HD.4953) 5679 0 R (HD.4954) 5680 0 R (HD.4955) 5681 0 R (HD.4956) 5682 0 R (HD.4957) 5683 0 R (HD.4958) 5684 0 R (HD.4959) 5685 0 R (HD.496) 779 0 R (HD.4960) 5686 0 R (HD.4961) 5687 0 R (HD.4962) 5688 0 R (HD.4963) 5689 0 R (HD.4964) 5690 0 R (HD.4965) 5691 0 R (HD.4966) 5692 0 R (HD.4967) 5693 0 R (HD.4968) 5694 0 R (HD.4969) 5695 0 R (HD.497) 780 0 R (HD.4970) 5696 0 R (HD.4971) 5697 0 R (HD.4972) 5698 0 R (HD.4973) 5699 0 R (HD.4974) 5700 0 R (HD.4975) 5701 0 R ] /Limits [ (HD.4947) (HD.4975) ] >>
+endobj
+11789 0 obj
+<< /Names [ (HD.4976) 5702 0 R (HD.4977) 5703 0 R (HD.4978) 5704 0 R (HD.4979) 5705 0 R (HD.498) 781 0 R (HD.4980) 5706 0 R (HD.4981) 5707 0 R (HD.4982) 5708 0 R (HD.4983) 5709 0 R (HD.4984) 5710 0 R (HD.4985) 5711 0 R (HD.4986) 5712 0 R (HD.4987) 5713 0 R (HD.4988) 5714 0 R (HD.4989) 5715 0 R (HD.499) 782 0 R (HD.4990) 5716 0 R (HD.4991) 5717 0 R (HD.4992) 5718 0 R (HD.4993) 5723 0 R (HD.4994) 5724 0 R (HD.4995) 5725 0 R (HD.4996) 5726 0 R (HD.4997) 5727 0 R (HD.4998) 5728 0 R (HD.4999) 5729 0 R (HD.5) 193 0 R (HD.50) 245 0 R (HD.500) 783 0 R (HD.5000) 5730 0 R (HD.5001) 5731 0 R (HD.5002) 5732 0 R ] /Limits [ (HD.4976) (HD.5002) ] >>
+endobj
+11790 0 obj
+<< /Names [ (HD.5003) 5733 0 R (HD.5004) 5734 0 R (HD.5005) 5735 0 R (HD.5006) 5736 0 R (HD.5007) 5737 0 R (HD.5008) 5738 0 R (HD.5009) 5739 0 R (HD.501) 784 0 R (HD.5010) 5740 0 R (HD.5011) 5741 0 R (HD.5012) 5742 0 R (HD.5013) 5743 0 R (HD.5014) 5744 0 R (HD.5015) 5745 0 R (HD.5016) 5746 0 R (HD.5017) 5747 0 R (HD.5018) 5748 0 R (HD.5019) 5749 0 R (HD.502) 785 0 R (HD.5020) 5750 0 R (HD.5021) 5751 0 R (HD.5022) 5752 0 R (HD.5023) 5753 0 R (HD.5024) 5754 0 R (HD.5025) 5755 0 R (HD.5026) 5756 0 R (HD.5027) 5757 0 R (HD.5028) 5758 0 R (HD.5029) 5759 0 R (HD.503) 786 0 R (HD.5030) 5760 0 R (HD.5031) 5761 0 R ] /Limits [ (HD.5003) (HD.5031) ] >>
+endobj
+11791 0 obj
+<< /Names [ (HD.5032) 5762 0 R (HD.5033) 5763 0 R (HD.5034) 5764 0 R (HD.5035) 5765 0 R (HD.5036) 5766 0 R (HD.5037) 5767 0 R (HD.5038) 5768 0 R (HD.5039) 5769 0 R (HD.504) 787 0 R (HD.5040) 5770 0 R (HD.5041) 5771 0 R (HD.5042) 5772 0 R (HD.5043) 5773 0 R (HD.5044) 5774 0 R (HD.5045) 5775 0 R (HD.5046) 5776 0 R (HD.5047) 5777 0 R (HD.5048) 5778 0 R (HD.5049) 5779 0 R (HD.505) 788 0 R (HD.5050) 5780 0 R (HD.5051) 5781 0 R (HD.5052) 5782 0 R (HD.5053) 5787 0 R (HD.5054) 5788 0 R (HD.5055) 5789 0 R (HD.5056) 5790 0 R (HD.5057) 5791 0 R (HD.5058) 5792 0 R (HD.5059) 5793 0 R (HD.506) 789 0 R (HD.5060) 5794 0 R ] /Limits [ (HD.5032) (HD.5060) ] >>
+endobj
+11792 0 obj
+<< /Names [ (HD.5061) 5795 0 R (HD.5062) 5796 0 R (HD.5063) 5797 0 R (HD.5064) 5798 0 R (HD.5065) 5799 0 R (HD.5066) 5800 0 R (HD.5067) 5801 0 R (HD.5068) 5802 0 R (HD.5069) 5803 0 R (HD.507) 790 0 R (HD.5070) 5804 0 R (HD.5071) 5805 0 R (HD.5072) 5806 0 R (HD.5073) 5807 0 R (HD.5074) 5808 0 R (HD.5075) 5809 0 R (HD.5076) 5810 0 R (HD.5077) 5811 0 R (HD.5078) 5812 0 R (HD.5079) 5813 0 R (HD.508) 791 0 R (HD.5080) 5814 0 R (HD.5081) 5815 0 R (HD.5082) 5816 0 R (HD.5083) 5817 0 R (HD.5084) 5818 0 R (HD.5085) 5819 0 R (HD.5086) 5820 0 R (HD.5087) 5821 0 R (HD.5088) 5822 0 R (HD.5089) 5823 0 R (HD.509) 792 0 R ] /Limits [ (HD.5061) (HD.509) ] >>
+endobj
+11793 0 obj
+<< /Names [ (HD.5090) 5824 0 R (HD.5091) 5825 0 R (HD.5092) 5826 0 R (HD.5093) 5827 0 R (HD.5094) 5833 0 R (HD.5095) 5834 0 R (HD.5096) 5835 0 R (HD.5097) 5836 0 R (HD.5098) 5837 0 R (HD.5099) 5838 0 R (HD.51) 246 0 R (HD.510) 793 0 R (HD.5100) 5839 0 R (HD.5101) 5840 0 R (HD.5102) 5841 0 R (HD.5103) 5842 0 R (HD.5104) 5843 0 R (HD.5105) 5844 0 R (HD.5106) 5845 0 R (HD.5107) 5846 0 R (HD.5108) 5847 0 R (HD.5109) 5848 0 R (HD.511) 799 0 R (HD.5110) 5849 0 R (HD.5111) 5850 0 R (HD.5112) 5851 0 R (HD.5113) 5852 0 R (HD.5114) 5853 0 R (HD.5115) 5854 0 R (HD.5116) 5855 0 R (HD.5117) 5856 0 R (HD.5118) 5857 0 R ] /Limits [ (HD.5090) (HD.5118) ] >>
+endobj
+11794 0 obj
+<< /Names [ (HD.5119) 5858 0 R (HD.512) 800 0 R (HD.5120) 5859 0 R (HD.5121) 5860 0 R (HD.5122) 5861 0 R (HD.5123) 5862 0 R (HD.5124) 5863 0 R (HD.5125) 5864 0 R (HD.5126) 5865 0 R (HD.5127) 5866 0 R (HD.5128) 5867 0 R (HD.5129) 5868 0 R (HD.513) 801 0 R (HD.5130) 5869 0 R (HD.5131) 5870 0 R (HD.5132) 5871 0 R (HD.5133) 5872 0 R (HD.5134) 5873 0 R (HD.5135) 5874 0 R (HD.5136) 5875 0 R (HD.5137) 5876 0 R (HD.5138) 5877 0 R (HD.5139) 5878 0 R (HD.514) 802 0 R (HD.5140) 5879 0 R (HD.5141) 5880 0 R (HD.5142) 5881 0 R (HD.5143) 5882 0 R (HD.5144) 5883 0 R (HD.5145) 5884 0 R (HD.5146) 5885 0 R (HD.5147) 5886 0 R ] /Limits [ (HD.5119) (HD.5147) ] >>
+endobj
+11795 0 obj
+<< /Names [ (HD.5148) 5887 0 R (HD.5149) 5888 0 R (HD.515) 803 0 R (HD.5150) 5889 0 R (HD.5151) 5890 0 R (HD.5152) 5891 0 R (HD.5153) 5896 0 R (HD.5154) 5897 0 R (HD.5155) 5898 0 R (HD.5156) 5899 0 R (HD.5157) 5900 0 R (HD.5158) 5901 0 R (HD.5159) 5902 0 R (HD.516) 804 0 R (HD.5160) 5903 0 R (HD.5161) 5904 0 R (HD.5162) 5905 0 R (HD.5163) 5906 0 R (HD.5164) 5907 0 R (HD.5165) 5908 0 R (HD.5166) 5909 0 R (HD.5167) 5910 0 R (HD.5168) 5911 0 R (HD.5169) 5912 0 R (HD.517) 805 0 R (HD.5170) 5913 0 R (HD.5171) 5914 0 R (HD.5172) 5915 0 R (HD.5173) 5916 0 R (HD.5174) 5917 0 R (HD.5175) 5918 0 R (HD.5176) 5919 0 R ] /Limits [ (HD.5148) (HD.5176) ] >>
+endobj
+11796 0 obj
+<< /Names [ (HD.5177) 5920 0 R (HD.5178) 5921 0 R (HD.5179) 5922 0 R (HD.518) 806 0 R (HD.5180) 5923 0 R (HD.5181) 5924 0 R (HD.5182) 5925 0 R (HD.5183) 5926 0 R (HD.5184) 5927 0 R (HD.5185) 5928 0 R (HD.5186) 5929 0 R (HD.5187) 5930 0 R (HD.5188) 5931 0 R (HD.5189) 5932 0 R (HD.519) 807 0 R (HD.5190) 5933 0 R (HD.5191) 5934 0 R (HD.5192) 5935 0 R (HD.5193) 5936 0 R (HD.5194) 5937 0 R (HD.5195) 5938 0 R (HD.5196) 5939 0 R (HD.5197) 5940 0 R (HD.5198) 5941 0 R (HD.5199) 5942 0 R (HD.52) 247 0 R (HD.520) 808 0 R (HD.5200) 5943 0 R (HD.5201) 5944 0 R (HD.5202) 5945 0 R (HD.5203) 5950 0 R (HD.5204) 5951 0 R ] /Limits [ (HD.5177) (HD.5204) ] >>
+endobj
+11797 0 obj
+<< /Names [ (HD.5205) 5952 0 R (HD.5206) 5953 0 R (HD.5207) 5954 0 R (HD.5208) 5955 0 R (HD.5209) 5956 0 R (HD.521) 809 0 R (HD.5210) 5957 0 R (HD.5211) 5958 0 R (HD.5212) 5959 0 R (HD.5213) 5960 0 R (HD.5214) 5961 0 R (HD.5215) 5962 0 R (HD.5216) 5963 0 R (HD.5217) 5964 0 R (HD.5218) 5965 0 R (HD.5219) 5966 0 R (HD.522) 810 0 R (HD.5220) 5967 0 R (HD.5221) 5968 0 R (HD.5222) 5969 0 R (HD.5223) 5970 0 R (HD.5224) 5971 0 R (HD.5225) 5972 0 R (HD.5226) 5973 0 R (HD.5227) 5974 0 R (HD.5228) 5975 0 R (HD.5229) 5976 0 R (HD.523) 811 0 R (HD.5230) 5977 0 R (HD.5231) 5978 0 R (HD.5232) 5979 0 R (HD.5233) 5980 0 R ] /Limits [ (HD.5205) (HD.5233) ] >>
+endobj
+11798 0 obj
+<< /Names [ (HD.5234) 5981 0 R (HD.5235) 5982 0 R (HD.5236) 5983 0 R (HD.5237) 5984 0 R (HD.5238) 5985 0 R (HD.5239) 5986 0 R (HD.524) 812 0 R (HD.5240) 5987 0 R (HD.5241) 5988 0 R (HD.5242) 5989 0 R (HD.5243) 5990 0 R (HD.5244) 5991 0 R (HD.5245) 5992 0 R (HD.5246) 5993 0 R (HD.5247) 5994 0 R (HD.5248) 5995 0 R (HD.5249) 5996 0 R (HD.525) 813 0 R (HD.5250) 5997 0 R (HD.5251) 5998 0 R (HD.5252) 5999 0 R (HD.5253) 6000 0 R (HD.5254) 6001 0 R (HD.5255) 6002 0 R (HD.5256) 6008 0 R (HD.5257) 6009 0 R (HD.5258) 6010 0 R (HD.5259) 6011 0 R (HD.526) 820 0 R (HD.5260) 6012 0 R (HD.5261) 6013 0 R (HD.5262) 6014 0 R ] /Limits [ (HD.5234) (HD.5262) ] >>
+endobj
+11799 0 obj
+<< /Names [ (HD.5263) 6015 0 R (HD.5264) 6016 0 R (HD.5265) 6017 0 R (HD.5266) 6018 0 R (HD.5267) 6019 0 R (HD.5268) 6020 0 R (HD.5269) 6021 0 R (HD.527) 821 0 R (HD.5270) 6022 0 R (HD.5271) 6023 0 R (HD.5272) 6024 0 R (HD.5273) 6025 0 R (HD.5274) 6026 0 R (HD.5275) 6027 0 R (HD.5276) 6028 0 R (HD.5277) 6029 0 R (HD.5278) 6030 0 R (HD.5279) 6031 0 R (HD.528) 822 0 R (HD.5280) 6032 0 R (HD.5281) 6033 0 R (HD.5282) 6034 0 R (HD.5283) 6035 0 R (HD.5284) 6036 0 R (HD.5285) 6037 0 R (HD.5286) 6038 0 R (HD.5287) 6039 0 R (HD.5288) 6040 0 R (HD.5289) 6041 0 R (HD.529) 823 0 R (HD.5290) 6042 0 R (HD.5291) 6049 0 R ] /Limits [ (HD.5263) (HD.5291) ] >>
+endobj
+11800 0 obj
+<< /Names [ (HD.5292) 6050 0 R (HD.5293) 6051 0 R (HD.5294) 6052 0 R (HD.5295) 6053 0 R (HD.5296) 6054 0 R (HD.5297) 6055 0 R (HD.5298) 6056 0 R (HD.5299) 6057 0 R (HD.53) 248 0 R (HD.530) 824 0 R (HD.5300) 6058 0 R (HD.5301) 6059 0 R (HD.5302) 6060 0 R (HD.5303) 6061 0 R (HD.5304) 6062 0 R (HD.5305) 6063 0 R (HD.5306) 6064 0 R (HD.5307) 6065 0 R (HD.5308) 6066 0 R (HD.5309) 6067 0 R (HD.531) 825 0 R (HD.5310) 6068 0 R (HD.5311) 6069 0 R (HD.5312) 6070 0 R (HD.5313) 6071 0 R (HD.5314) 6072 0 R (HD.5315) 6073 0 R (HD.5316) 6074 0 R (HD.5317) 6075 0 R (HD.5318) 6076 0 R (HD.5319) 6077 0 R (HD.532) 826 0 R ] /Limits [ (HD.5292) (HD.532) ] >>
+endobj
+11801 0 obj
+<< /Names [ (HD.5320) 6078 0 R (HD.5321) 6079 0 R (HD.5322) 6080 0 R (HD.5323) 6081 0 R (HD.5324) 6082 0 R (HD.5325) 6087 0 R (HD.5326) 6088 0 R (HD.5327) 6089 0 R (HD.5328) 6090 0 R (HD.5329) 6091 0 R (HD.533) 827 0 R (HD.5330) 6092 0 R (HD.5331) 6093 0 R (HD.5332) 6094 0 R (HD.5333) 6095 0 R (HD.5334) 6096 0 R (HD.5335) 6097 0 R (HD.5336) 6098 0 R (HD.5337) 6099 0 R (HD.5338) 6100 0 R (HD.5339) 6101 0 R (HD.534) 828 0 R (HD.5340) 6102 0 R (HD.5341) 6103 0 R (HD.5342) 6104 0 R (HD.5343) 6105 0 R (HD.5344) 6106 0 R (HD.5345) 6107 0 R (HD.5346) 6108 0 R (HD.5347) 6109 0 R (HD.5348) 6110 0 R (HD.5349) 6111 0 R ] /Limits [ (HD.5320) (HD.5349) ] >>
+endobj
+11802 0 obj
+<< /Names [ (HD.535) 829 0 R (HD.5350) 6112 0 R (HD.5351) 6113 0 R (HD.5352) 6114 0 R (HD.5353) 6115 0 R (HD.5354) 6116 0 R (HD.5355) 6117 0 R (HD.5356) 6118 0 R (HD.5357) 6119 0 R (HD.5358) 6120 0 R (HD.5359) 6121 0 R (HD.536) 830 0 R (HD.5360) 6122 0 R (HD.5361) 6123 0 R (HD.5362) 6124 0 R (HD.5363) 6125 0 R (HD.5364) 6126 0 R (HD.5365) 6127 0 R (HD.5366) 6128 0 R (HD.5367) 6129 0 R (HD.5368) 6130 0 R (HD.5369) 6131 0 R (HD.537) 831 0 R (HD.5370) 6132 0 R (HD.5371) 6133 0 R (HD.5372) 6134 0 R (HD.5373) 6139 0 R (HD.5374) 6140 0 R (HD.5375) 6141 0 R (HD.5376) 6142 0 R (HD.5377) 6143 0 R (HD.5378) 6144 0 R ] /Limits [ (HD.535) (HD.5378) ] >>
+endobj
+11803 0 obj
+<< /Names [ (HD.5379) 6145 0 R (HD.538) 832 0 R (HD.5380) 6146 0 R (HD.5381) 6147 0 R (HD.5382) 6148 0 R (HD.5383) 6149 0 R (HD.5384) 6150 0 R (HD.5385) 6151 0 R (HD.5386) 6152 0 R (HD.5387) 6153 0 R (HD.5388) 6154 0 R (HD.5389) 6155 0 R (HD.539) 833 0 R (HD.5390) 6156 0 R (HD.5391) 6157 0 R (HD.5392) 6158 0 R (HD.5393) 6159 0 R (HD.5394) 6160 0 R (HD.5395) 6161 0 R (HD.5396) 6162 0 R (HD.5397) 6163 0 R (HD.5398) 6164 0 R (HD.5399) 6165 0 R (HD.54) 249 0 R (HD.540) 834 0 R (HD.5400) 6166 0 R (HD.5401) 6167 0 R (HD.5402) 6168 0 R (HD.5403) 6169 0 R (HD.5404) 6170 0 R (HD.5405) 6171 0 R (HD.5406) 6172 0 R ] /Limits [ (HD.5379) (HD.5406) ] >>
+endobj
+11804 0 obj
+<< /Names [ (HD.5407) 6173 0 R (HD.5408) 6174 0 R (HD.5409) 6175 0 R (HD.541) 835 0 R (HD.5410) 6176 0 R (HD.5411) 6177 0 R (HD.5412) 6178 0 R (HD.5413) 6179 0 R (HD.5414) 6180 0 R (HD.5415) 6181 0 R (HD.5416) 6182 0 R (HD.5417) 6183 0 R (HD.5418) 6184 0 R (HD.5419) 6185 0 R (HD.542) 836 0 R (HD.5420) 6186 0 R (HD.5421) 6187 0 R (HD.5422) 6192 0 R (HD.5423) 6193 0 R (HD.5424) 6194 0 R (HD.5425) 6195 0 R (HD.5426) 6196 0 R (HD.5427) 6197 0 R (HD.5428) 6198 0 R (HD.5429) 6199 0 R (HD.543) 837 0 R (HD.5430) 6200 0 R (HD.5431) 6201 0 R (HD.5432) 6202 0 R (HD.5433) 6203 0 R (HD.5434) 6204 0 R (HD.5435) 6205 0 R ] /Limits [ (HD.5407) (HD.5435) ] >>
+endobj
+11805 0 obj
+<< /Names [ (HD.5436) 6206 0 R (HD.5437) 6207 0 R (HD.5438) 6208 0 R (HD.5439) 6209 0 R (HD.544) 838 0 R (HD.5440) 6210 0 R (HD.5441) 6211 0 R (HD.5442) 6212 0 R (HD.5443) 6213 0 R (HD.5444) 6214 0 R (HD.5445) 6215 0 R (HD.5446) 6216 0 R (HD.5447) 6217 0 R (HD.5448) 6218 0 R (HD.5449) 6219 0 R (HD.545) 839 0 R (HD.5450) 6220 0 R (HD.5451) 6225 0 R (HD.5452) 6226 0 R (HD.5453) 6227 0 R (HD.5454) 6228 0 R (HD.5455) 6229 0 R (HD.5456) 6230 0 R (HD.5457) 6231 0 R (HD.5458) 6232 0 R (HD.5459) 6233 0 R (HD.546) 840 0 R (HD.5460) 6234 0 R (HD.5461) 6235 0 R (HD.5462) 6236 0 R (HD.5463) 6237 0 R (HD.5464) 6238 0 R ] /Limits [ (HD.5436) (HD.5464) ] >>
+endobj
+11806 0 obj
+<< /Names [ (HD.5465) 6239 0 R (HD.5466) 6240 0 R (HD.5467) 6241 0 R (HD.5468) 6242 0 R (HD.5469) 6243 0 R (HD.547) 841 0 R (HD.5470) 6244 0 R (HD.5471) 6245 0 R (HD.5472) 6246 0 R (HD.5473) 6247 0 R (HD.5474) 6248 0 R (HD.5475) 6249 0 R (HD.5476) 6250 0 R (HD.5477) 6251 0 R (HD.5478) 6252 0 R (HD.5479) 6253 0 R (HD.548) 842 0 R (HD.5480) 6254 0 R (HD.5481) 6255 0 R (HD.5482) 6256 0 R (HD.5483) 6257 0 R (HD.5484) 6258 0 R (HD.5485) 6259 0 R (HD.5486) 6260 0 R (HD.5487) 6261 0 R (HD.5488) 6262 0 R (HD.5489) 6263 0 R (HD.549) 843 0 R (HD.5490) 6264 0 R (HD.5491) 6265 0 R (HD.5492) 6266 0 R (HD.5493) 6267 0 R ] /Limits [ (HD.5465) (HD.5493) ] >>
+endobj
+11807 0 obj
+<< /Names [ (HD.5494) 6268 0 R (HD.5495) 6269 0 R (HD.5496) 6270 0 R (HD.5497) 6271 0 R (HD.5498) 6272 0 R (HD.5499) 6273 0 R (HD.55) 250 0 R (HD.550) 844 0 R (HD.5500) 6274 0 R (HD.5501) 6279 0 R (HD.5502) 6280 0 R (HD.5503) 6281 0 R (HD.5504) 6282 0 R (HD.5505) 6283 0 R (HD.5506) 6284 0 R (HD.5507) 6285 0 R (HD.5508) 6286 0 R (HD.5509) 6287 0 R (HD.551) 845 0 R (HD.5510) 6288 0 R (HD.5511) 6289 0 R (HD.5512) 6290 0 R (HD.5513) 6291 0 R (HD.5514) 6292 0 R (HD.5515) 6293 0 R (HD.5516) 6294 0 R (HD.5517) 6295 0 R (HD.5518) 6296 0 R (HD.5519) 6297 0 R (HD.552) 846 0 R (HD.5520) 6298 0 R (HD.5521) 6299 0 R ] /Limits [ (HD.5494) (HD.5521) ] >>
+endobj
+11808 0 obj
+<< /Names [ (HD.5522) 6300 0 R (HD.5523) 6301 0 R (HD.5524) 6302 0 R (HD.5525) 6303 0 R (HD.5526) 6304 0 R (HD.5527) 6305 0 R (HD.5528) 6306 0 R (HD.5529) 6307 0 R (HD.553) 847 0 R (HD.5530) 6308 0 R (HD.5531) 6309 0 R (HD.5532) 6310 0 R (HD.5533) 6311 0 R (HD.5534) 6312 0 R (HD.5535) 6313 0 R (HD.5536) 6314 0 R (HD.5537) 6315 0 R (HD.5538) 6316 0 R (HD.5539) 6317 0 R (HD.554) 848 0 R (HD.5540) 6318 0 R (HD.5541) 6319 0 R (HD.5542) 6320 0 R (HD.5543) 6321 0 R (HD.5544) 6327 0 R (HD.5545) 6328 0 R (HD.5546) 6329 0 R (HD.5547) 6330 0 R (HD.5548) 6331 0 R (HD.5549) 6332 0 R (HD.555) 849 0 R (HD.5550) 6333 0 R ] /Limits [ (HD.5522) (HD.5550) ] >>
+endobj
+11809 0 obj
+<< /Names [ (HD.5551) 6334 0 R (HD.5552) 6335 0 R (HD.5553) 6336 0 R (HD.5554) 6337 0 R (HD.5555) 6338 0 R (HD.5556) 6339 0 R (HD.5557) 6340 0 R (HD.5558) 6341 0 R (HD.5559) 6342 0 R (HD.556) 850 0 R (HD.5560) 6343 0 R (HD.5561) 6344 0 R (HD.5562) 6345 0 R (HD.5563) 6346 0 R (HD.5564) 6347 0 R (HD.5565) 6348 0 R (HD.5566) 6349 0 R (HD.5567) 6350 0 R (HD.5568) 6351 0 R (HD.5569) 6352 0 R (HD.557) 851 0 R (HD.5570) 6353 0 R (HD.5571) 6354 0 R (HD.5572) 6355 0 R (HD.5573) 6356 0 R (HD.5574) 6357 0 R (HD.5575) 6358 0 R (HD.5576) 6359 0 R (HD.5577) 6360 0 R (HD.5578) 6361 0 R (HD.5579) 6362 0 R (HD.558) 852 0 R ] /Limits [ (HD.5551) (HD.558) ] >>
+endobj
+11810 0 obj
+<< /Names [ (HD.5580) 6363 0 R (HD.5581) 6364 0 R (HD.5582) 6365 0 R (HD.5583) 6366 0 R (HD.5584) 6367 0 R (HD.5585) 6368 0 R (HD.5586) 6369 0 R (HD.5587) 6370 0 R (HD.5588) 6371 0 R (HD.5589) 6372 0 R (HD.559) 853 0 R (HD.5590) 6373 0 R (HD.5591) 6374 0 R (HD.5592) 6379 0 R (HD.5593) 6380 0 R (HD.5594) 6381 0 R (HD.5595) 6382 0 R (HD.5596) 6383 0 R (HD.5597) 6384 0 R (HD.5598) 6385 0 R (HD.5599) 6386 0 R (HD.56) 251 0 R (HD.560) 854 0 R (HD.5600) 6387 0 R (HD.5601) 6388 0 R (HD.5602) 6389 0 R (HD.5603) 6390 0 R (HD.5604) 6391 0 R (HD.5605) 6392 0 R (HD.5606) 6393 0 R (HD.5607) 6394 0 R (HD.5608) 6395 0 R ] /Limits [ (HD.5580) (HD.5608) ] >>
+endobj
+11811 0 obj
+<< /Names [ (HD.5609) 6396 0 R (HD.561) 855 0 R (HD.5610) 6397 0 R (HD.5611) 6398 0 R (HD.5612) 6399 0 R (HD.5613) 6400 0 R (HD.5614) 6401 0 R (HD.5615) 6402 0 R (HD.5616) 6403 0 R (HD.5617) 6404 0 R (HD.5618) 6405 0 R (HD.5619) 6406 0 R (HD.562) 856 0 R (HD.5620) 6407 0 R (HD.5621) 6408 0 R (HD.5622) 6409 0 R (HD.5623) 6410 0 R (HD.5624) 6411 0 R (HD.5625) 6412 0 R (HD.5626) 6413 0 R (HD.5627) 6414 0 R (HD.5628) 6415 0 R (HD.5629) 6416 0 R (HD.563) 857 0 R (HD.5630) 6417 0 R (HD.5631) 6418 0 R (HD.5632) 6419 0 R (HD.5633) 6420 0 R (HD.5634) 6425 0 R (HD.5635) 6426 0 R (HD.5636) 6427 0 R (HD.5637) 6428 0 R ] /Limits [ (HD.5609) (HD.5637) ] >>
+endobj
+11812 0 obj
+<< /Names [ (HD.5638) 6429 0 R (HD.5639) 6430 0 R (HD.564) 858 0 R (HD.5640) 6431 0 R (HD.5641) 6432 0 R (HD.5642) 6433 0 R (HD.5643) 6434 0 R (HD.5644) 6435 0 R (HD.5645) 6436 0 R (HD.5646) 6437 0 R (HD.5647) 6438 0 R (HD.5648) 6439 0 R (HD.5649) 6440 0 R (HD.565) 859 0 R (HD.5650) 6441 0 R (HD.5651) 6442 0 R (HD.5652) 6443 0 R (HD.5653) 6444 0 R (HD.5654) 6445 0 R (HD.5655) 6446 0 R (HD.5656) 6447 0 R (HD.5657) 6448 0 R (HD.5658) 6449 0 R (HD.5659) 6450 0 R (HD.566) 860 0 R (HD.5660) 6451 0 R (HD.5661) 6452 0 R (HD.5662) 6453 0 R (HD.5663) 6454 0 R (HD.5664) 6455 0 R (HD.5665) 6456 0 R (HD.5666) 6457 0 R ] /Limits [ (HD.5638) (HD.5666) ] >>
+endobj
+11813 0 obj
+<< /Names [ (HD.5667) 6458 0 R (HD.5668) 6459 0 R (HD.5669) 6460 0 R (HD.567) 861 0 R (HD.5670) 6461 0 R (HD.5671) 6462 0 R (HD.5672) 6463 0 R (HD.5673) 6464 0 R (HD.5674) 6465 0 R (HD.5675) 6466 0 R (HD.5676) 6467 0 R (HD.5677) 6472 0 R (HD.5678) 6473 0 R (HD.5679) 6474 0 R (HD.568) 862 0 R (HD.5680) 6475 0 R (HD.5681) 6476 0 R (HD.5682) 6477 0 R (HD.5683) 6478 0 R (HD.5684) 6479 0 R (HD.5685) 6480 0 R (HD.5686) 6481 0 R (HD.5687) 6482 0 R (HD.5688) 6483 0 R (HD.5689) 6484 0 R (HD.569) 863 0 R (HD.5690) 6485 0 R (HD.5691) 6486 0 R (HD.5692) 6487 0 R (HD.5693) 6488 0 R (HD.5694) 6489 0 R (HD.5695) 6490 0 R ] /Limits [ (HD.5667) (HD.5695) ] >>
+endobj
+11814 0 obj
+<< /Names [ (HD.5696) 6491 0 R (HD.5697) 6492 0 R (HD.5698) 6493 0 R (HD.5699) 6494 0 R (HD.57) 256 0 R (HD.570) 864 0 R (HD.5700) 6495 0 R (HD.5701) 6496 0 R (HD.5702) 6497 0 R (HD.5703) 6498 0 R (HD.5704) 6499 0 R (HD.5705) 6500 0 R (HD.5706) 6501 0 R (HD.5707) 6502 0 R (HD.5708) 6503 0 R (HD.5709) 6504 0 R (HD.571) 865 0 R (HD.5710) 6505 0 R (HD.5711) 6506 0 R (HD.5712) 6507 0 R (HD.5713) 6508 0 R (HD.5714) 6509 0 R (HD.5715) 6510 0 R (HD.5716) 6511 0 R (HD.5717) 6512 0 R (HD.5718) 6513 0 R (HD.5719) 6514 0 R (HD.572) 866 0 R (HD.5720) 6515 0 R (HD.5721) 6516 0 R (HD.5722) 6517 0 R (HD.5723) 6518 0 R ] /Limits [ (HD.5696) (HD.5723) ] >>
+endobj
+11815 0 obj
+<< /Names [ (HD.5724) 6519 0 R (HD.5725) 6524 0 R (HD.5726) 6525 0 R (HD.5727) 6526 0 R (HD.5728) 6527 0 R (HD.5729) 6528 0 R (HD.573) 867 0 R (HD.5730) 6529 0 R (HD.5731) 6530 0 R (HD.5732) 6531 0 R (HD.5733) 6532 0 R (HD.5734) 6533 0 R (HD.5735) 6534 0 R (HD.5736) 6535 0 R (HD.5737) 6536 0 R (HD.5738) 6537 0 R (HD.5739) 6538 0 R (HD.574) 873 0 R (HD.5740) 6539 0 R (HD.5741) 6540 0 R (HD.5742) 6541 0 R (HD.5743) 6542 0 R (HD.5744) 6543 0 R (HD.5745) 6544 0 R (HD.5746) 6545 0 R (HD.5747) 6546 0 R (HD.5748) 6547 0 R (HD.5749) 6548 0 R (HD.575) 874 0 R (HD.5750) 6549 0 R (HD.5751) 6550 0 R (HD.5752) 6551 0 R ] /Limits [ (HD.5724) (HD.5752) ] >>
+endobj
+11816 0 obj
+<< /Names [ (HD.5753) 6552 0 R (HD.5754) 6553 0 R (HD.5755) 6554 0 R (HD.5756) 6555 0 R (HD.5757) 6556 0 R (HD.5758) 6557 0 R (HD.5759) 6558 0 R (HD.576) 875 0 R (HD.5760) 6559 0 R (HD.5761) 6560 0 R (HD.5762) 6561 0 R (HD.5763) 6562 0 R (HD.5764) 6563 0 R (HD.5765) 6564 0 R (HD.5766) 6565 0 R (HD.5767) 6566 0 R (HD.5768) 6567 0 R (HD.5769) 6568 0 R (HD.577) 876 0 R (HD.5770) 6569 0 R (HD.5771) 6570 0 R (HD.5772) 6571 0 R (HD.5773) 6572 0 R (HD.5774) 6577 0 R (HD.5775) 6578 0 R (HD.5776) 6579 0 R (HD.5777) 6580 0 R (HD.5778) 6581 0 R (HD.5779) 6582 0 R (HD.578) 877 0 R (HD.5780) 6583 0 R (HD.5781) 6584 0 R ] /Limits [ (HD.5753) (HD.5781) ] >>
+endobj
+11817 0 obj
+<< /Names [ (HD.5782) 6585 0 R (HD.5783) 6586 0 R (HD.5784) 6587 0 R (HD.5785) 6588 0 R (HD.5786) 6589 0 R (HD.5787) 6590 0 R (HD.5788) 6591 0 R (HD.5789) 6592 0 R (HD.579) 878 0 R (HD.5790) 6593 0 R (HD.5791) 6594 0 R (HD.5792) 6595 0 R (HD.5793) 6596 0 R (HD.5794) 6597 0 R (HD.5795) 6598 0 R (HD.5796) 6599 0 R (HD.5797) 6600 0 R (HD.5798) 6601 0 R (HD.5799) 6602 0 R (HD.58) 257 0 R (HD.580) 879 0 R (HD.5800) 6603 0 R (HD.5801) 6604 0 R (HD.5802) 6605 0 R (HD.5803) 6606 0 R (HD.5804) 6607 0 R (HD.5805) 6608 0 R (HD.5806) 6609 0 R (HD.5807) 6610 0 R (HD.5808) 6611 0 R (HD.5809) 6612 0 R (HD.581) 880 0 R ] /Limits [ (HD.5782) (HD.581) ] >>
+endobj
+11818 0 obj
+<< /Names [ (HD.5810) 6613 0 R (HD.5811) 6614 0 R (HD.5812) 6615 0 R (HD.5813) 6616 0 R (HD.5814) 6617 0 R (HD.5815) 6618 0 R (HD.5816) 6619 0 R (HD.5817) 6620 0 R (HD.5818) 6621 0 R (HD.5819) 6622 0 R (HD.582) 881 0 R (HD.5820) 6623 0 R (HD.5821) 6624 0 R (HD.5822) 6625 0 R (HD.5823) 6626 0 R (HD.5824) 6627 0 R (HD.5825) 6628 0 R (HD.5826) 6629 0 R (HD.5827) 6630 0 R (HD.5828) 6635 0 R (HD.5829) 6636 0 R (HD.583) 882 0 R (HD.5830) 6637 0 R (HD.5831) 6638 0 R (HD.5832) 6639 0 R (HD.5833) 6640 0 R (HD.5834) 6641 0 R (HD.5835) 6642 0 R (HD.5836) 6643 0 R (HD.5837) 6644 0 R (HD.5838) 6645 0 R (HD.5839) 6646 0 R ] /Limits [ (HD.5810) (HD.5839) ] >>
+endobj
+11819 0 obj
+<< /Names [ (HD.584) 883 0 R (HD.5840) 6647 0 R (HD.5841) 6648 0 R (HD.5842) 6649 0 R (HD.5843) 6650 0 R (HD.5844) 6651 0 R (HD.5845) 6652 0 R (HD.5846) 6653 0 R (HD.5847) 6654 0 R (HD.5848) 6655 0 R (HD.5849) 6656 0 R (HD.585) 884 0 R (HD.5850) 6657 0 R (HD.5851) 6658 0 R (HD.5852) 6659 0 R (HD.5853) 6660 0 R (HD.5854) 6661 0 R (HD.5855) 6662 0 R (HD.5856) 6663 0 R (HD.5857) 6664 0 R (HD.5858) 6665 0 R (HD.5859) 6666 0 R (HD.586) 885 0 R (HD.5860) 6667 0 R (HD.5861) 6668 0 R (HD.5862) 6669 0 R (HD.5863) 6670 0 R (HD.5864) 6671 0 R (HD.5865) 6672 0 R (HD.5866) 6673 0 R (HD.5867) 6674 0 R (HD.5868) 6675 0 R ] /Limits [ (HD.584) (HD.5868) ] >>
+endobj
+11820 0 obj
+<< /Names [ (HD.5869) 6676 0 R (HD.587) 886 0 R (HD.5870) 6677 0 R (HD.5871) 6678 0 R (HD.5872) 6679 0 R (HD.5873) 6680 0 R (HD.5874) 6681 0 R (HD.5875) 6682 0 R (HD.5876) 6683 0 R (HD.5877) 6688 0 R (HD.5878) 6689 0 R (HD.5879) 6690 0 R (HD.588) 887 0 R (HD.5880) 6691 0 R (HD.5881) 6692 0 R (HD.5882) 6693 0 R (HD.5883) 6694 0 R (HD.5884) 6695 0 R (HD.5885) 6696 0 R (HD.5886) 6697 0 R (HD.5887) 6698 0 R (HD.5888) 6699 0 R (HD.5889) 6700 0 R (HD.589) 888 0 R (HD.5890) 6701 0 R (HD.5891) 6702 0 R (HD.5892) 6703 0 R (HD.5893) 6704 0 R (HD.5894) 6705 0 R (HD.5895) 6706 0 R (HD.5896) 6707 0 R (HD.5897) 6708 0 R ] /Limits [ (HD.5869) (HD.5897) ] >>
+endobj
+11821 0 obj
+<< /Names [ (HD.5898) 6709 0 R (HD.5899) 6710 0 R (HD.59) 258 0 R (HD.590) 889 0 R (HD.5900) 6711 0 R (HD.5901) 6712 0 R (HD.5902) 6713 0 R (HD.5903) 6714 0 R (HD.5904) 6715 0 R (HD.5905) 6716 0 R (HD.5906) 6717 0 R (HD.5907) 6718 0 R (HD.5908) 6719 0 R (HD.5909) 6720 0 R (HD.591) 890 0 R (HD.5910) 6721 0 R (HD.5911) 6722 0 R (HD.5912) 6727 0 R (HD.5913) 6728 0 R (HD.5914) 6729 0 R (HD.5915) 6730 0 R (HD.5916) 6731 0 R (HD.5917) 6732 0 R (HD.5918) 6733 0 R (HD.5919) 6734 0 R (HD.592) 891 0 R (HD.5920) 6735 0 R (HD.5921) 6736 0 R (HD.5922) 6737 0 R (HD.5923) 6738 0 R (HD.5924) 6739 0 R (HD.5925) 6740 0 R ] /Limits [ (HD.5898) (HD.5925) ] >>
+endobj
+11822 0 obj
+<< /Names [ (HD.5926) 6741 0 R (HD.5927) 6742 0 R (HD.5928) 6743 0 R (HD.5929) 6744 0 R (HD.593) 892 0 R (HD.5930) 6745 0 R (HD.5931) 6746 0 R (HD.5932) 6747 0 R (HD.5933) 6748 0 R (HD.5934) 6749 0 R (HD.5935) 6750 0 R (HD.5936) 6751 0 R (HD.5937) 6752 0 R (HD.5938) 6753 0 R (HD.5939) 6754 0 R (HD.594) 893 0 R (HD.5940) 6755 0 R (HD.5941) 6756 0 R (HD.5942) 6757 0 R (HD.5943) 6758 0 R (HD.5944) 6759 0 R (HD.5945) 6760 0 R (HD.5946) 6761 0 R (HD.5947) 6762 0 R (HD.5948) 6767 0 R (HD.5949) 6768 0 R (HD.595) 894 0 R (HD.5950) 6769 0 R (HD.5951) 6770 0 R (HD.5952) 6771 0 R (HD.5953) 6772 0 R (HD.5954) 6773 0 R ] /Limits [ (HD.5926) (HD.5954) ] >>
+endobj
+11823 0 obj
+<< /Names [ (HD.5955) 6774 0 R (HD.5956) 6775 0 R (HD.5957) 6776 0 R (HD.5958) 6777 0 R (HD.5959) 6778 0 R (HD.596) 895 0 R (HD.5960) 6779 0 R (HD.5961) 6780 0 R (HD.5962) 6781 0 R (HD.5963) 6782 0 R (HD.5964) 6783 0 R (HD.5965) 6784 0 R (HD.5966) 6785 0 R (HD.5967) 6786 0 R (HD.5968) 6787 0 R (HD.5969) 6788 0 R (HD.597) 896 0 R (HD.5970) 6789 0 R (HD.5971) 6790 0 R (HD.5972) 6791 0 R (HD.5973) 6792 0 R (HD.5974) 6793 0 R (HD.5975) 6794 0 R (HD.5976) 6795 0 R (HD.5977) 6796 0 R (HD.5978) 6797 0 R (HD.5979) 6798 0 R (HD.598) 897 0 R (HD.5980) 6799 0 R (HD.5981) 6805 0 R (HD.5982) 6806 0 R (HD.5983) 6807 0 R ] /Limits [ (HD.5955) (HD.5983) ] >>
+endobj
+11824 0 obj
+<< /Names [ (HD.5984) 6808 0 R (HD.5985) 6809 0 R (HD.5986) 6810 0 R (HD.5987) 6811 0 R (HD.5988) 6812 0 R (HD.5989) 6813 0 R (HD.599) 898 0 R (HD.5990) 6814 0 R (HD.5991) 6815 0 R (HD.5992) 6816 0 R (HD.5993) 6817 0 R (HD.5994) 6818 0 R (HD.5995) 6819 0 R (HD.5996) 6820 0 R (HD.5997) 6821 0 R (HD.5998) 6822 0 R (HD.5999) 6823 0 R (HD.6) 194 0 R (HD.60) 259 0 R (HD.600) 899 0 R (HD.6000) 6824 0 R (HD.6001) 6825 0 R (HD.6002) 6826 0 R (HD.6003) 6827 0 R (HD.6004) 6828 0 R (HD.6005) 6829 0 R (HD.6006) 6830 0 R (HD.6007) 6831 0 R (HD.6008) 6832 0 R (HD.6009) 6833 0 R (HD.601) 900 0 R (HD.6010) 6834 0 R ] /Limits [ (HD.5984) (HD.6010) ] >>
+endobj
+11825 0 obj
+<< /Names [ (HD.6011) 6835 0 R (HD.6012) 6836 0 R (HD.6013) 6837 0 R (HD.6014) 6838 0 R (HD.6015) 6839 0 R (HD.6016) 6840 0 R (HD.6017) 6841 0 R (HD.6018) 6846 0 R (HD.6019) 6847 0 R (HD.602) 901 0 R (HD.6020) 6848 0 R (HD.6021) 6849 0 R (HD.6022) 6850 0 R (HD.6023) 6851 0 R (HD.6024) 6852 0 R (HD.6025) 6853 0 R (HD.6026) 6854 0 R (HD.6027) 6855 0 R (HD.6028) 6856 0 R (HD.6029) 6857 0 R (HD.603) 902 0 R (HD.6030) 6858 0 R (HD.6031) 6859 0 R (HD.6032) 6860 0 R (HD.6033) 6861 0 R (HD.6034) 6862 0 R (HD.6035) 6863 0 R (HD.6036) 6864 0 R (HD.6037) 6865 0 R (HD.6038) 6866 0 R (HD.6039) 6867 0 R (HD.604) 903 0 R ] /Limits [ (HD.6011) (HD.604) ] >>
+endobj
+11826 0 obj
+<< /Names [ (HD.6040) 6868 0 R (HD.6041) 6869 0 R (HD.6042) 6870 0 R (HD.6043) 6871 0 R (HD.6044) 6872 0 R (HD.6045) 6873 0 R (HD.6046) 6874 0 R (HD.6047) 6875 0 R (HD.6048) 6876 0 R (HD.6049) 6877 0 R (HD.605) 904 0 R (HD.6050) 6878 0 R (HD.6051) 6879 0 R (HD.6052) 6880 0 R (HD.6053) 6881 0 R (HD.6054) 6882 0 R (HD.6055) 6887 0 R (HD.6056) 6888 0 R (HD.6057) 6889 0 R (HD.6058) 6890 0 R (HD.6059) 6891 0 R (HD.606) 905 0 R (HD.6060) 6892 0 R (HD.6061) 6893 0 R (HD.6062) 6894 0 R (HD.6063) 6895 0 R (HD.6064) 6896 0 R (HD.6065) 6897 0 R (HD.6066) 6898 0 R (HD.6067) 6899 0 R (HD.6068) 6900 0 R (HD.6069) 6901 0 R ] /Limits [ (HD.6040) (HD.6069) ] >>
+endobj
+11827 0 obj
+<< /Names [ (HD.607) 906 0 R (HD.6070) 6902 0 R (HD.6071) 6903 0 R (HD.6072) 6904 0 R (HD.6073) 6905 0 R (HD.6074) 6906 0 R (HD.6075) 6907 0 R (HD.6076) 6908 0 R (HD.6077) 6909 0 R (HD.6078) 6910 0 R (HD.6079) 6911 0 R (HD.608) 907 0 R (HD.6080) 6912 0 R (HD.6081) 6913 0 R (HD.6082) 6914 0 R (HD.6083) 6915 0 R (HD.6084) 6916 0 R (HD.6085) 6917 0 R (HD.6086) 6918 0 R (HD.6087) 6919 0 R (HD.6088) 6920 0 R (HD.6089) 6921 0 R (HD.609) 908 0 R (HD.6090) 6922 0 R (HD.6091) 6923 0 R (HD.6092) 6924 0 R (HD.6093) 6925 0 R (HD.6094) 6926 0 R (HD.6095) 6927 0 R (HD.6096) 6928 0 R (HD.6097) 6929 0 R (HD.6098) 6930 0 R ] /Limits [ (HD.607) (HD.6098) ] >>
+endobj
+11828 0 obj
+<< /Names [ (HD.6099) 6931 0 R (HD.61) 260 0 R (HD.610) 909 0 R (HD.6100) 6932 0 R (HD.6101) 6933 0 R (HD.6102) 6934 0 R (HD.6103) 6935 0 R (HD.6104) 6936 0 R (HD.6105) 6937 0 R (HD.6106) 6938 0 R (HD.6107) 6939 0 R (HD.6108) 6940 0 R (HD.6109) 6941 0 R (HD.611) 910 0 R (HD.6110) 6942 0 R (HD.6111) 6943 0 R (HD.6112) 6948 0 R (HD.6113) 6949 0 R (HD.6114) 6950 0 R (HD.6115) 6951 0 R (HD.6116) 6952 0 R (HD.6117) 6953 0 R (HD.6118) 6954 0 R (HD.6119) 6955 0 R (HD.612) 911 0 R (HD.6120) 6956 0 R (HD.6121) 6957 0 R (HD.6122) 6958 0 R (HD.6123) 6959 0 R (HD.6124) 6960 0 R (HD.6125) 6961 0 R (HD.6126) 6962 0 R ] /Limits [ (HD.6099) (HD.6126) ] >>
+endobj
+11829 0 obj
+<< /Names [ (HD.6127) 6963 0 R (HD.6128) 6964 0 R (HD.6129) 6965 0 R (HD.613) 912 0 R (HD.6130) 6966 0 R (HD.6131) 6967 0 R (HD.6132) 6968 0 R (HD.6133) 6969 0 R (HD.6134) 6970 0 R (HD.6135) 6971 0 R (HD.6136) 6972 0 R (HD.6137) 6973 0 R (HD.6138) 6974 0 R (HD.6139) 6975 0 R (HD.614) 913 0 R (HD.6140) 6976 0 R (HD.6141) 6977 0 R (HD.6142) 6978 0 R (HD.6143) 6979 0 R (HD.6144) 6980 0 R (HD.6145) 6981 0 R (HD.6146) 6982 0 R (HD.6147) 6983 0 R (HD.6148) 6984 0 R (HD.6149) 6985 0 R (HD.615) 914 0 R (HD.6150) 6986 0 R (HD.6151) 6987 0 R (HD.6152) 6988 0 R (HD.6153) 6989 0 R (HD.6154) 6990 0 R (HD.6155) 6991 0 R ] /Limits [ (HD.6127) (HD.6155) ] >>
+endobj
+11830 0 obj
+<< /Names [ (HD.6156) 6992 0 R (HD.6157) 6993 0 R (HD.6158) 6994 0 R (HD.6159) 6995 0 R (HD.616) 915 0 R (HD.6160) 6996 0 R (HD.6161) 6997 0 R (HD.6162) 6998 0 R (HD.6163) 6999 0 R (HD.6164) 7000 0 R (HD.6165) 7001 0 R (HD.6166) 7002 0 R (HD.6167) 7003 0 R (HD.6168) 7004 0 R (HD.6169) 7005 0 R (HD.617) 920 0 R (HD.6170) 7010 0 R (HD.6171) 7011 0 R (HD.6172) 7012 0 R (HD.6173) 7013 0 R (HD.6174) 7014 0 R (HD.6175) 7015 0 R (HD.6176) 7016 0 R (HD.6177) 7017 0 R (HD.6178) 7018 0 R (HD.6179) 7019 0 R (HD.618) 921 0 R (HD.6180) 7020 0 R (HD.6181) 7021 0 R (HD.6182) 7022 0 R (HD.6183) 7023 0 R (HD.6184) 7024 0 R ] /Limits [ (HD.6156) (HD.6184) ] >>
+endobj
+11831 0 obj
+<< /Names [ (HD.6185) 7025 0 R (HD.6186) 7026 0 R (HD.6187) 7027 0 R (HD.6188) 7028 0 R (HD.6189) 7029 0 R (HD.619) 922 0 R (HD.6190) 7030 0 R (HD.6191) 7031 0 R (HD.6192) 7032 0 R (HD.6193) 7033 0 R (HD.6194) 7034 0 R (HD.6195) 7035 0 R (HD.6196) 7036 0 R (HD.6197) 7037 0 R (HD.6198) 7038 0 R (HD.6199) 7039 0 R (HD.62) 261 0 R (HD.620) 923 0 R (HD.6200) 7040 0 R (HD.6201) 7041 0 R (HD.6202) 7042 0 R (HD.6203) 7043 0 R (HD.6204) 7044 0 R (HD.6205) 7045 0 R (HD.6206) 7046 0 R (HD.6207) 7047 0 R (HD.6208) 7048 0 R (HD.6209) 7049 0 R (HD.621) 924 0 R (HD.6210) 7050 0 R (HD.6211) 7051 0 R (HD.6212) 7052 0 R ] /Limits [ (HD.6185) (HD.6212) ] >>
+endobj
+11832 0 obj
+<< /Names [ (HD.6213) 7053 0 R (HD.6214) 7054 0 R (HD.6215) 7055 0 R (HD.6216) 7056 0 R (HD.6217) 7057 0 R (HD.6218) 7058 0 R (HD.6219) 7059 0 R (HD.622) 925 0 R (HD.6220) 7064 0 R (HD.6221) 7065 0 R (HD.6222) 7066 0 R (HD.6223) 7067 0 R (HD.6224) 7068 0 R (HD.6225) 7069 0 R (HD.6226) 7070 0 R (HD.6227) 7071 0 R (HD.6228) 7072 0 R (HD.6229) 7073 0 R (HD.623) 926 0 R (HD.6230) 7074 0 R (HD.6231) 7075 0 R (HD.6232) 7076 0 R (HD.6233) 7077 0 R (HD.6234) 7078 0 R (HD.6235) 7079 0 R (HD.6236) 7080 0 R (HD.6237) 7081 0 R (HD.6238) 7082 0 R (HD.6239) 7083 0 R (HD.624) 927 0 R (HD.6240) 7084 0 R (HD.6241) 7085 0 R ] /Limits [ (HD.6213) (HD.6241) ] >>
+endobj
+11833 0 obj
+<< /Names [ (HD.6242) 7086 0 R (HD.6243) 7087 0 R (HD.6244) 7088 0 R (HD.6245) 7089 0 R (HD.6246) 7090 0 R (HD.6247) 7091 0 R (HD.6248) 7092 0 R (HD.6249) 7093 0 R (HD.625) 928 0 R (HD.6250) 7094 0 R (HD.6251) 7095 0 R (HD.6252) 7096 0 R (HD.6253) 7097 0 R (HD.6254) 7098 0 R (HD.6255) 7099 0 R (HD.6256) 7100 0 R (HD.6257) 7101 0 R (HD.6258) 7102 0 R (HD.6259) 7103 0 R (HD.626) 929 0 R (HD.6260) 7104 0 R (HD.6261) 7105 0 R (HD.6262) 7106 0 R (HD.6263) 7107 0 R (HD.6264) 7108 0 R (HD.6265) 7113 0 R (HD.6266) 7114 0 R (HD.6267) 7115 0 R (HD.6268) 7116 0 R (HD.6269) 7117 0 R (HD.627) 930 0 R (HD.6270) 7118 0 R ] /Limits [ (HD.6242) (HD.6270) ] >>
+endobj
+11834 0 obj
+<< /Names [ (HD.6271) 7119 0 R (HD.6272) 7120 0 R (HD.6273) 7121 0 R (HD.6274) 7122 0 R (HD.6275) 7123 0 R (HD.6276) 7124 0 R (HD.6277) 7125 0 R (HD.6278) 7126 0 R (HD.6279) 7127 0 R (HD.628) 931 0 R (HD.6280) 7128 0 R (HD.6281) 7129 0 R (HD.6282) 7130 0 R (HD.6283) 7131 0 R (HD.6284) 7132 0 R (HD.6285) 7133 0 R (HD.6286) 7134 0 R (HD.6287) 7135 0 R (HD.6288) 7136 0 R (HD.6289) 7137 0 R (HD.629) 932 0 R (HD.6290) 7138 0 R (HD.6291) 7139 0 R (HD.6292) 7140 0 R (HD.6293) 7141 0 R (HD.6294) 7142 0 R (HD.6295) 7143 0 R (HD.6296) 7144 0 R (HD.6297) 7145 0 R (HD.6298) 7146 0 R (HD.6299) 7147 0 R (HD.63) 262 0 R ] /Limits [ (HD.6271) (HD.63) ] >>
+endobj
+11835 0 obj
+<< /Names [ (HD.630) 933 0 R (HD.6300) 7148 0 R (HD.6301) 7149 0 R (HD.6302) 7150 0 R (HD.6303) 7151 0 R (HD.6304) 7152 0 R (HD.6305) 7153 0 R (HD.6306) 7154 0 R (HD.6307) 7155 0 R (HD.6308) 7156 0 R (HD.6309) 7157 0 R (HD.631) 934 0 R (HD.6310) 7158 0 R (HD.6311) 7159 0 R (HD.6312) 7160 0 R (HD.6313) 7161 0 R (HD.6314) 7162 0 R (HD.6315) 7163 0 R (HD.6316) 7164 0 R (HD.6317) 7165 0 R (HD.6318) 7166 0 R (HD.6319) 7167 0 R (HD.632) 935 0 R (HD.6320) 7168 0 R (HD.6321) 7169 0 R (HD.6322) 7170 0 R (HD.6323) 7171 0 R (HD.6324) 7176 0 R (HD.6325) 7177 0 R (HD.6326) 7178 0 R (HD.6327) 7179 0 R (HD.6328) 7180 0 R ] /Limits [ (HD.630) (HD.6328) ] >>
+endobj
+11836 0 obj
+<< /Names [ (HD.6329) 7181 0 R (HD.633) 936 0 R (HD.6330) 7182 0 R (HD.6331) 7183 0 R (HD.6332) 7184 0 R (HD.6333) 7185 0 R (HD.6334) 7186 0 R (HD.6335) 7187 0 R (HD.6336) 7188 0 R (HD.6337) 7189 0 R (HD.6338) 7190 0 R (HD.6339) 7191 0 R (HD.634) 937 0 R (HD.6340) 7192 0 R (HD.6341) 7193 0 R (HD.6342) 7194 0 R (HD.6343) 7195 0 R (HD.6344) 7196 0 R (HD.6345) 7197 0 R (HD.6346) 7198 0 R (HD.6347) 7199 0 R (HD.6348) 7200 0 R (HD.6349) 7201 0 R (HD.635) 938 0 R (HD.6350) 7202 0 R (HD.6351) 7203 0 R (HD.6352) 7204 0 R (HD.6353) 7205 0 R (HD.6354) 7206 0 R (HD.6355) 7207 0 R (HD.6356) 7208 0 R (HD.6357) 7209 0 R ] /Limits [ (HD.6329) (HD.6357) ] >>
+endobj
+11837 0 obj
+<< /Names [ (HD.6358) 7210 0 R (HD.6359) 7211 0 R (HD.636) 939 0 R (HD.6360) 7212 0 R (HD.6361) 7213 0 R (HD.6362) 7214 0 R (HD.6363) 7215 0 R (HD.6364) 7216 0 R (HD.6365) 7217 0 R (HD.6366) 7218 0 R (HD.6367) 7223 0 R (HD.6368) 7224 0 R (HD.6369) 7225 0 R (HD.637) 940 0 R (HD.6370) 7226 0 R (HD.6371) 7227 0 R (HD.6372) 7228 0 R (HD.6373) 7229 0 R (HD.6374) 7230 0 R (HD.6375) 7231 0 R (HD.6376) 7232 0 R (HD.6377) 7233 0 R (HD.6378) 7234 0 R (HD.6379) 7235 0 R (HD.638) 941 0 R (HD.6380) 7236 0 R (HD.6381) 7237 0 R (HD.6382) 7238 0 R (HD.6383) 7239 0 R (HD.6384) 7240 0 R (HD.6385) 7241 0 R (HD.6386) 7242 0 R ] /Limits [ (HD.6358) (HD.6386) ] >>
+endobj
+11838 0 obj
+<< /Names [ (HD.6387) 7243 0 R (HD.6388) 7244 0 R (HD.6389) 7245 0 R (HD.639) 942 0 R (HD.6390) 7246 0 R (HD.6391) 7247 0 R (HD.6392) 7248 0 R (HD.6393) 7249 0 R (HD.6394) 7250 0 R (HD.6395) 7251 0 R (HD.6396) 7252 0 R (HD.6397) 7253 0 R (HD.6398) 7254 0 R (HD.6399) 7255 0 R (HD.64) 263 0 R (HD.640) 943 0 R (HD.6400) 7256 0 R (HD.6401) 7257 0 R (HD.6402) 7258 0 R (HD.6403) 7259 0 R (HD.6404) 7260 0 R (HD.6405) 7261 0 R (HD.6406) 7262 0 R (HD.6407) 7263 0 R (HD.6408) 7264 0 R (HD.6409) 7265 0 R (HD.641) 944 0 R (HD.6410) 7266 0 R (HD.6411) 7267 0 R (HD.6412) 7268 0 R (HD.6413) 7269 0 R (HD.6414) 7270 0 R ] /Limits [ (HD.6387) (HD.6414) ] >>
+endobj
+11839 0 obj
+<< /Names [ (HD.6415) 7275 0 R (HD.6416) 7276 0 R (HD.6417) 7277 0 R (HD.6418) 7278 0 R (HD.6419) 7279 0 R (HD.642) 945 0 R (HD.6420) 7280 0 R (HD.6421) 7281 0 R (HD.6422) 7282 0 R (HD.6423) 7283 0 R (HD.6424) 7284 0 R (HD.6425) 7285 0 R (HD.6426) 7286 0 R (HD.6427) 7287 0 R (HD.6428) 7288 0 R (HD.6429) 7289 0 R (HD.643) 946 0 R (HD.6430) 7290 0 R (HD.6431) 7291 0 R (HD.6432) 7292 0 R (HD.6433) 7293 0 R (HD.6434) 7294 0 R (HD.6435) 7295 0 R (HD.6436) 7296 0 R (HD.6437) 7297 0 R (HD.6438) 7298 0 R (HD.6439) 7299 0 R (HD.644) 947 0 R (HD.6440) 7300 0 R (HD.6441) 7301 0 R (HD.6442) 7302 0 R (HD.6443) 7303 0 R ] /Limits [ (HD.6415) (HD.6443) ] >>
+endobj
+11840 0 obj
+<< /Names [ (HD.6444) 7304 0 R (HD.6445) 7305 0 R (HD.6446) 7306 0 R (HD.6447) 7307 0 R (HD.6448) 7308 0 R (HD.6449) 7309 0 R (HD.645) 948 0 R (HD.6450) 7310 0 R (HD.6451) 7311 0 R (HD.6452) 7312 0 R (HD.6453) 7313 0 R (HD.6454) 7314 0 R (HD.6455) 7315 0 R (HD.6456) 7316 0 R (HD.6457) 7317 0 R (HD.6458) 7318 0 R (HD.6459) 7319 0 R (HD.646) 949 0 R (HD.6460) 7325 0 R (HD.6461) 7326 0 R (HD.6462) 7327 0 R (HD.6463) 7328 0 R (HD.6464) 7329 0 R (HD.6465) 7330 0 R (HD.6466) 7331 0 R (HD.6467) 7332 0 R (HD.6468) 7333 0 R (HD.6469) 7334 0 R (HD.647) 950 0 R (HD.6470) 7335 0 R (HD.6471) 7336 0 R (HD.6472) 7337 0 R ] /Limits [ (HD.6444) (HD.6472) ] >>
+endobj
+11841 0 obj
+<< /Names [ (HD.6473) 7338 0 R (HD.6474) 7339 0 R (HD.6475) 7340 0 R (HD.6476) 7341 0 R (HD.6477) 7342 0 R (HD.6478) 7343 0 R (HD.6479) 7344 0 R (HD.648) 951 0 R (HD.6480) 7345 0 R (HD.6481) 7346 0 R (HD.6482) 7347 0 R (HD.6483) 7348 0 R (HD.6484) 7349 0 R (HD.6485) 7350 0 R (HD.6486) 7351 0 R (HD.6487) 7352 0 R (HD.6488) 7353 0 R (HD.6489) 7354 0 R (HD.649) 952 0 R (HD.6490) 7355 0 R (HD.6491) 7356 0 R (HD.6492) 7357 0 R (HD.6493) 7358 0 R (HD.6494) 7359 0 R (HD.6495) 7360 0 R (HD.6496) 7361 0 R (HD.6497) 7362 0 R (HD.6498) 7363 0 R (HD.6499) 7364 0 R (HD.65) 264 0 R (HD.650) 953 0 R (HD.6500) 7365 0 R ] /Limits [ (HD.6473) (HD.6500) ] >>
+endobj
+11842 0 obj
+<< /Names [ (HD.6501) 7366 0 R (HD.6502) 7367 0 R (HD.6503) 7368 0 R (HD.6504) 7369 0 R (HD.6505) 7370 0 R (HD.6506) 7371 0 R (HD.6507) 7372 0 R (HD.6508) 7373 0 R (HD.6509) 7374 0 R (HD.651) 954 0 R (HD.6510) 7375 0 R (HD.6511) 7376 0 R (HD.6512) 7377 0 R (HD.6513) 7378 0 R (HD.6514) 7383 0 R (HD.6515) 7384 0 R (HD.6516) 7385 0 R (HD.6517) 7386 0 R (HD.6518) 7387 0 R (HD.6519) 7388 0 R (HD.652) 955 0 R (HD.6520) 7389 0 R (HD.6521) 7390 0 R (HD.6522) 7391 0 R (HD.6523) 7392 0 R (HD.6524) 7393 0 R (HD.6525) 7394 0 R (HD.6526) 7395 0 R (HD.6527) 7396 0 R (HD.6528) 7397 0 R (HD.6529) 7398 0 R (HD.653) 960 0 R ] /Limits [ (HD.6501) (HD.653) ] >>
+endobj
+11843 0 obj
+<< /Names [ (HD.6530) 7399 0 R (HD.6531) 7400 0 R (HD.6532) 7401 0 R (HD.6533) 7402 0 R (HD.6534) 7403 0 R (HD.6535) 7404 0 R (HD.6536) 7405 0 R (HD.6537) 7406 0 R (HD.6538) 7407 0 R (HD.6539) 7408 0 R (HD.654) 961 0 R (HD.6540) 7409 0 R (HD.6541) 7410 0 R (HD.6542) 7411 0 R (HD.6543) 7412 0 R (HD.6544) 7413 0 R (HD.6545) 7414 0 R (HD.6546) 7415 0 R (HD.6547) 7416 0 R (HD.6548) 7417 0 R (HD.6549) 7418 0 R (HD.655) 962 0 R (HD.6550) 7419 0 R (HD.6551) 7420 0 R (HD.6552) 7421 0 R (HD.6553) 7426 0 R (HD.6554) 7427 0 R (HD.6555) 7428 0 R (HD.6556) 7429 0 R (HD.6557) 7430 0 R (HD.6558) 7431 0 R (HD.6559) 7432 0 R ] /Limits [ (HD.6530) (HD.6559) ] >>
+endobj
+11844 0 obj
+<< /Names [ (HD.656) 963 0 R (HD.6560) 7433 0 R (HD.6561) 7434 0 R (HD.6562) 7435 0 R (HD.6563) 7436 0 R (HD.6564) 7437 0 R (HD.6565) 7438 0 R (HD.6566) 7439 0 R (HD.6567) 7440 0 R (HD.6568) 7441 0 R (HD.6569) 7442 0 R (HD.657) 964 0 R (HD.6570) 7443 0 R (HD.6571) 7444 0 R (HD.6572) 7445 0 R (HD.6573) 7446 0 R (HD.6574) 7447 0 R (HD.6575) 7448 0 R (HD.6576) 7449 0 R (HD.6577) 7450 0 R (HD.6578) 7451 0 R (HD.6579) 7452 0 R (HD.658) 965 0 R (HD.6580) 7453 0 R (HD.6581) 7454 0 R (HD.6582) 7455 0 R (HD.6583) 7456 0 R (HD.6584) 7457 0 R (HD.6585) 7458 0 R (HD.6586) 7459 0 R (HD.6587) 7460 0 R (HD.6588) 7461 0 R ] /Limits [ (HD.656) (HD.6588) ] >>
+endobj
+11845 0 obj
+<< /Names [ (HD.6589) 7462 0 R (HD.659) 966 0 R (HD.6590) 7463 0 R (HD.6591) 7464 0 R (HD.6592) 7465 0 R (HD.6593) 7466 0 R (HD.6594) 7467 0 R (HD.6595) 7468 0 R (HD.6596) 7469 0 R (HD.6597) 7470 0 R (HD.6598) 7471 0 R (HD.6599) 7472 0 R (HD.66) 265 0 R (HD.660) 967 0 R (HD.6600) 7473 0 R (HD.6601) 7474 0 R (HD.6602) 7475 0 R (HD.6603) 7476 0 R (HD.6604) 7477 0 R (HD.6605) 7478 0 R (HD.6606) 7479 0 R (HD.6607) 7480 0 R (HD.6608) 7481 0 R (HD.6609) 7482 0 R (HD.661) 968 0 R (HD.6610) 7483 0 R (HD.6611) 7484 0 R (HD.6612) 7489 0 R (HD.6613) 7490 0 R (HD.6614) 7491 0 R (HD.6615) 7492 0 R (HD.6616) 7493 0 R ] /Limits [ (HD.6589) (HD.6616) ] >>
+endobj
+11846 0 obj
+<< /Names [ (HD.6617) 7494 0 R (HD.6618) 7495 0 R (HD.6619) 7496 0 R (HD.662) 969 0 R (HD.6620) 7497 0 R (HD.6621) 7498 0 R (HD.6622) 7499 0 R (HD.6623) 7500 0 R (HD.6624) 7501 0 R (HD.6625) 7502 0 R (HD.6626) 7503 0 R (HD.6627) 7504 0 R (HD.6628) 7505 0 R (HD.6629) 7506 0 R (HD.663) 970 0 R (HD.6630) 7507 0 R (HD.6631) 7508 0 R (HD.6632) 7509 0 R (HD.6633) 7510 0 R (HD.6634) 7511 0 R (HD.6635) 7512 0 R (HD.6636) 7513 0 R (HD.6637) 7514 0 R (HD.6638) 7515 0 R (HD.6639) 7516 0 R (HD.664) 971 0 R (HD.6640) 7517 0 R (HD.6641) 7518 0 R (HD.6642) 7519 0 R (HD.6643) 7520 0 R (HD.6644) 7521 0 R (HD.6645) 7522 0 R ] /Limits [ (HD.6617) (HD.6645) ] >>
+endobj
+11847 0 obj
+<< /Names [ (HD.6646) 7523 0 R (HD.6647) 7524 0 R (HD.6648) 7525 0 R (HD.6649) 7526 0 R (HD.665) 972 0 R (HD.6650) 7527 0 R (HD.6651) 7528 0 R (HD.6652) 7529 0 R (HD.6653) 7530 0 R (HD.6654) 7531 0 R (HD.6655) 7532 0 R (HD.6656) 7533 0 R (HD.6657) 7534 0 R (HD.6658) 7535 0 R (HD.6659) 7536 0 R (HD.666) 973 0 R (HD.6660) 7537 0 R (HD.6661) 7538 0 R (HD.6662) 7539 0 R (HD.6663) 7540 0 R (HD.6664) 7545 0 R (HD.6665) 7546 0 R (HD.6666) 7547 0 R (HD.6667) 7548 0 R (HD.6668) 7549 0 R (HD.6669) 7550 0 R (HD.667) 974 0 R (HD.6670) 7551 0 R (HD.6671) 7552 0 R (HD.6672) 7553 0 R (HD.6673) 7554 0 R (HD.6674) 7555 0 R ] /Limits [ (HD.6646) (HD.6674) ] >>
+endobj
+11848 0 obj
+<< /Names [ (HD.6675) 7556 0 R (HD.6676) 7557 0 R (HD.6677) 7558 0 R (HD.6678) 7559 0 R (HD.6679) 7560 0 R (HD.668) 975 0 R (HD.6680) 7561 0 R (HD.6681) 7562 0 R (HD.6682) 7563 0 R (HD.6683) 7564 0 R (HD.6684) 7565 0 R (HD.6685) 7566 0 R (HD.6686) 7567 0 R (HD.6687) 7568 0 R (HD.6688) 7569 0 R (HD.6689) 7570 0 R (HD.669) 976 0 R (HD.6690) 7571 0 R (HD.6691) 7572 0 R (HD.6692) 7573 0 R (HD.6693) 7574 0 R (HD.6694) 7575 0 R (HD.6695) 7576 0 R (HD.6696) 7577 0 R (HD.6697) 7578 0 R (HD.6698) 7579 0 R (HD.6699) 7580 0 R (HD.67) 266 0 R (HD.670) 977 0 R (HD.6700) 7581 0 R (HD.6701) 7582 0 R (HD.6702) 7583 0 R ] /Limits [ (HD.6675) (HD.6702) ] >>
+endobj
+11849 0 obj
+<< /Names [ (HD.6703) 7584 0 R (HD.6704) 7585 0 R (HD.6705) 7586 0 R (HD.6706) 7587 0 R (HD.6707) 7588 0 R (HD.6708) 7593 0 R (HD.6709) 7594 0 R (HD.671) 978 0 R (HD.6710) 7595 0 R (HD.6711) 7596 0 R (HD.6712) 7597 0 R (HD.6713) 7598 0 R (HD.6714) 7599 0 R (HD.6715) 7600 0 R (HD.6716) 7601 0 R (HD.6717) 7602 0 R (HD.6718) 7603 0 R (HD.6719) 7604 0 R (HD.672) 979 0 R (HD.6720) 7605 0 R (HD.6721) 7606 0 R (HD.6722) 7607 0 R (HD.6723) 7608 0 R (HD.6724) 7609 0 R (HD.6725) 7610 0 R (HD.6726) 7611 0 R (HD.6727) 7612 0 R (HD.6728) 7613 0 R (HD.6729) 7614 0 R (HD.673) 980 0 R (HD.6730) 7615 0 R (HD.6731) 7616 0 R ] /Limits [ (HD.6703) (HD.6731) ] >>
+endobj
+11850 0 obj
+<< /Names [ (HD.6732) 7617 0 R (HD.6733) 7618 0 R (HD.6734) 7619 0 R (HD.6735) 7620 0 R (HD.6736) 7621 0 R (HD.6737) 7622 0 R (HD.6738) 7623 0 R (HD.6739) 7624 0 R (HD.674) 981 0 R (HD.6740) 7625 0 R (HD.6741) 7626 0 R (HD.6742) 7627 0 R (HD.6743) 7628 0 R (HD.6744) 7629 0 R (HD.6745) 7630 0 R (HD.6746) 7631 0 R (HD.6747) 7632 0 R (HD.6748) 7633 0 R (HD.6749) 7634 0 R (HD.675) 982 0 R (HD.6750) 7639 0 R (HD.6751) 7640 0 R (HD.6752) 7641 0 R (HD.6753) 7642 0 R (HD.6754) 7643 0 R (HD.6755) 7644 0 R (HD.6756) 7645 0 R (HD.6757) 7646 0 R (HD.6758) 7647 0 R (HD.6759) 7648 0 R (HD.676) 983 0 R (HD.6760) 7649 0 R ] /Limits [ (HD.6732) (HD.6760) ] >>
+endobj
+11851 0 obj
+<< /Names [ (HD.6761) 7650 0 R (HD.6762) 7651 0 R (HD.6763) 7652 0 R (HD.6764) 7653 0 R (HD.6765) 7654 0 R (HD.6766) 7655 0 R (HD.6767) 7656 0 R (HD.6768) 7657 0 R (HD.6769) 7658 0 R (HD.677) 984 0 R (HD.6770) 7659 0 R (HD.6771) 7660 0 R (HD.6772) 7661 0 R (HD.6773) 7662 0 R (HD.6774) 7663 0 R (HD.6775) 7664 0 R (HD.6776) 7665 0 R (HD.6777) 7666 0 R (HD.6778) 7667 0 R (HD.6779) 7668 0 R (HD.678) 985 0 R (HD.6780) 7669 0 R (HD.6781) 7670 0 R (HD.6782) 7671 0 R (HD.6783) 7672 0 R (HD.6784) 7673 0 R (HD.6785) 7674 0 R (HD.6786) 7675 0 R (HD.6787) 7676 0 R (HD.6788) 7677 0 R (HD.6789) 7678 0 R (HD.679) 986 0 R ] /Limits [ (HD.6761) (HD.679) ] >>
+endobj
+11852 0 obj
+<< /Names [ (HD.6790) 7679 0 R (HD.6791) 7680 0 R (HD.6792) 7681 0 R (HD.6793) 7682 0 R (HD.6794) 7683 0 R (HD.6795) 7684 0 R (HD.6796) 7685 0 R (HD.6797) 7690 0 R (HD.6798) 7691 0 R (HD.6799) 7692 0 R (HD.68) 267 0 R (HD.680) 987 0 R (HD.6800) 7693 0 R (HD.6801) 7694 0 R (HD.6802) 7695 0 R (HD.6803) 7696 0 R (HD.6804) 7697 0 R (HD.6805) 7698 0 R (HD.6806) 7699 0 R (HD.6807) 7700 0 R (HD.6808) 7701 0 R (HD.6809) 7702 0 R (HD.681) 988 0 R (HD.6810) 7703 0 R (HD.6811) 7704 0 R (HD.6812) 7705 0 R (HD.6813) 7706 0 R (HD.6814) 7707 0 R (HD.6815) 7708 0 R (HD.6816) 7709 0 R (HD.6817) 7710 0 R (HD.6818) 7711 0 R ] /Limits [ (HD.6790) (HD.6818) ] >>
+endobj
+11853 0 obj
+<< /Names [ (HD.6819) 7712 0 R (HD.682) 989 0 R (HD.6820) 7713 0 R (HD.6821) 7714 0 R (HD.6822) 7715 0 R (HD.6823) 7716 0 R (HD.6824) 7717 0 R (HD.6825) 7718 0 R (HD.6826) 7719 0 R (HD.6827) 7720 0 R (HD.6828) 7721 0 R (HD.6829) 7722 0 R (HD.683) 990 0 R (HD.6830) 7723 0 R (HD.6831) 7724 0 R (HD.6832) 7725 0 R (HD.6833) 7726 0 R (HD.6834) 7727 0 R (HD.6835) 7728 0 R (HD.6836) 7729 0 R (HD.6837) 7730 0 R (HD.6838) 7731 0 R (HD.6839) 7732 0 R (HD.684) 991 0 R (HD.6840) 7733 0 R (HD.6841) 7734 0 R (HD.6842) 7735 0 R (HD.6843) 7736 0 R (HD.6844) 7741 0 R (HD.6845) 7742 0 R (HD.6846) 7743 0 R (HD.6847) 7744 0 R ] /Limits [ (HD.6819) (HD.6847) ] >>
+endobj
+11854 0 obj
+<< /Names [ (HD.6848) 7745 0 R (HD.6849) 7746 0 R (HD.685) 992 0 R (HD.6850) 7747 0 R (HD.6851) 7748 0 R (HD.6852) 7749 0 R (HD.6853) 7750 0 R (HD.6854) 7751 0 R (HD.6855) 7752 0 R (HD.6856) 7753 0 R (HD.6857) 7754 0 R (HD.6858) 7755 0 R (HD.6859) 7756 0 R (HD.686) 993 0 R (HD.6860) 7757 0 R (HD.6861) 7758 0 R (HD.6862) 7759 0 R (HD.6863) 7760 0 R (HD.6864) 7761 0 R (HD.6865) 7762 0 R (HD.6866) 7763 0 R (HD.6867) 7764 0 R (HD.6868) 7765 0 R (HD.6869) 7766 0 R (HD.687) 994 0 R (HD.6870) 7767 0 R (HD.6871) 7768 0 R (HD.6872) 7769 0 R (HD.6873) 7770 0 R (HD.6874) 7771 0 R (HD.6875) 7772 0 R (HD.6876) 7777 0 R ] /Limits [ (HD.6848) (HD.6876) ] >>
+endobj
+11855 0 obj
+<< /Names [ (HD.6877) 7778 0 R (HD.6878) 7779 0 R (HD.6879) 7780 0 R (HD.688) 995 0 R (HD.6880) 7781 0 R (HD.6881) 7782 0 R (HD.6882) 7783 0 R (HD.6883) 7784 0 R (HD.6884) 7785 0 R (HD.6885) 7786 0 R (HD.6886) 7787 0 R (HD.6887) 7788 0 R (HD.6888) 7789 0 R (HD.6889) 7790 0 R (HD.689) 996 0 R (HD.6890) 7791 0 R (HD.6891) 7792 0 R (HD.6892) 7793 0 R (HD.6893) 7794 0 R (HD.6894) 7795 0 R (HD.6895) 7796 0 R (HD.6896) 7797 0 R (HD.6897) 7798 0 R (HD.6898) 7799 0 R (HD.6899) 7800 0 R (HD.69) 268 0 R (HD.690) 997 0 R (HD.6900) 7801 0 R (HD.6901) 7802 0 R (HD.6902) 7803 0 R (HD.6903) 7804 0 R (HD.6904) 7805 0 R ] /Limits [ (HD.6877) (HD.6904) ] >>
+endobj
+11856 0 obj
+<< /Names [ (HD.6905) 7806 0 R (HD.6906) 7807 0 R (HD.6907) 7808 0 R (HD.6908) 7809 0 R (HD.6909) 7810 0 R (HD.691) 998 0 R (HD.6910) 7811 0 R (HD.6911) 7812 0 R (HD.6912) 7813 0 R (HD.6913) 7814 0 R (HD.6914) 7815 0 R (HD.6915) 7816 0 R (HD.6916) 7817 0 R (HD.6917) 7818 0 R (HD.6918) 7819 0 R (HD.6919) 7820 0 R (HD.692) 999 0 R (HD.6920) 7821 0 R (HD.6921) 7822 0 R (HD.6922) 7823 0 R (HD.6923) 7824 0 R (HD.6924) 7825 0 R (HD.6925) 7826 0 R (HD.6926) 7833 0 R (HD.6927) 7834 0 R (HD.6928) 7835 0 R (HD.6929) 7836 0 R (HD.693) 1000 0 R (HD.6930) 7837 0 R (HD.6931) 7838 0 R (HD.6932) 7839 0 R (HD.6933) 7840 0 R ] /Limits [ (HD.6905) (HD.6933) ] >>
+endobj
+11857 0 obj
+<< /Names [ (HD.6934) 7841 0 R (HD.6935) 7842 0 R (HD.6936) 7843 0 R (HD.6937) 7844 0 R (HD.6938) 7845 0 R (HD.6939) 7846 0 R (HD.694) 1001 0 R (HD.6940) 7847 0 R (HD.6941) 7848 0 R (HD.6942) 7849 0 R (HD.6943) 7850 0 R (HD.6944) 7851 0 R (HD.6945) 7852 0 R (HD.6946) 7853 0 R (HD.6947) 7854 0 R (HD.6948) 7855 0 R (HD.6949) 7856 0 R (HD.695) 1002 0 R (HD.6950) 7857 0 R (HD.6951) 7858 0 R (HD.6952) 7859 0 R (HD.6953) 7860 0 R (HD.6954) 7861 0 R (HD.6955) 7862 0 R (HD.6956) 7863 0 R (HD.6957) 7864 0 R (HD.6958) 7865 0 R (HD.6959) 7866 0 R (HD.696) 1003 0 R (HD.6960) 7867 0 R (HD.6961) 7868 0 R (HD.6962) 7869 0 R ] /Limits [ (HD.6934) (HD.6962) ] >>
+endobj
+11858 0 obj
+<< /Names [ (HD.6963) 7870 0 R (HD.6964) 7871 0 R (HD.6965) 7872 0 R (HD.6966) 7873 0 R (HD.6967) 7874 0 R (HD.6968) 7881 0 R (HD.6969) 7882 0 R (HD.697) 1004 0 R (HD.6970) 7883 0 R (HD.6971) 7884 0 R (HD.6972) 7885 0 R (HD.6973) 7886 0 R (HD.6974) 7887 0 R (HD.6975) 7888 0 R (HD.6976) 7889 0 R (HD.6977) 7890 0 R (HD.6978) 7891 0 R (HD.6979) 7892 0 R (HD.698) 1005 0 R (HD.6980) 7893 0 R (HD.6981) 7894 0 R (HD.6982) 7895 0 R (HD.6983) 7896 0 R (HD.6984) 7897 0 R (HD.6985) 7898 0 R (HD.6986) 7899 0 R (HD.6987) 7900 0 R (HD.6988) 7901 0 R (HD.6989) 7902 0 R (HD.699) 1010 0 R (HD.6990) 7903 0 R (HD.6991) 7904 0 R ] /Limits [ (HD.6963) (HD.6991) ] >>
+endobj
+11859 0 obj
+<< /Names [ (HD.6992) 7905 0 R (HD.6993) 7906 0 R (HD.6994) 7907 0 R (HD.6995) 7908 0 R (HD.6996) 7909 0 R (HD.6997) 7910 0 R (HD.6998) 7911 0 R (HD.6999) 7912 0 R (HD.7) 195 0 R (HD.70) 269 0 R (HD.700) 1011 0 R (HD.7000) 7913 0 R (HD.7001) 7914 0 R (HD.7002) 7915 0 R (HD.7003) 7916 0 R (HD.7004) 7917 0 R (HD.7005) 7918 0 R (HD.7006) 7919 0 R (HD.7007) 7920 0 R (HD.7008) 7921 0 R (HD.7009) 7922 0 R (HD.701) 1012 0 R (HD.7010) 7923 0 R (HD.7011) 7924 0 R (HD.7012) 7925 0 R (HD.7013) 7926 0 R (HD.7014) 7927 0 R (HD.7015) 7928 0 R (HD.7016) 7929 0 R (HD.7017) 7934 0 R (HD.7018) 7935 0 R (HD.7019) 7936 0 R ] /Limits [ (HD.6992) (HD.7019) ] >>
+endobj
+11860 0 obj
+<< /Names [ (HD.702) 1013 0 R (HD.7020) 7937 0 R (HD.7021) 7938 0 R (HD.7022) 7939 0 R (HD.7023) 7940 0 R (HD.7024) 7941 0 R (HD.7025) 7942 0 R (HD.7026) 7943 0 R (HD.7027) 7944 0 R (HD.7028) 7945 0 R (HD.7029) 7946 0 R (HD.703) 1014 0 R (HD.7030) 7947 0 R (HD.7031) 7948 0 R (HD.7032) 7949 0 R (HD.7033) 7950 0 R (HD.7034) 7951 0 R (HD.7035) 7952 0 R (HD.7036) 7953 0 R (HD.7037) 7954 0 R (HD.7038) 7955 0 R (HD.7039) 7956 0 R (HD.704) 1015 0 R (HD.7040) 7957 0 R (HD.7041) 7958 0 R (HD.7042) 7959 0 R (HD.7043) 7960 0 R (HD.7044) 7961 0 R (HD.7045) 7962 0 R (HD.7046) 7963 0 R (HD.7047) 7964 0 R (HD.7048) 7965 0 R ] /Limits [ (HD.702) (HD.7048) ] >>
+endobj
+11861 0 obj
+<< /Names [ (HD.7049) 7966 0 R (HD.705) 1016 0 R (HD.7050) 7967 0 R (HD.7051) 7968 0 R (HD.7052) 7969 0 R (HD.7053) 7970 0 R (HD.7054) 7971 0 R (HD.7055) 7972 0 R (HD.7056) 7973 0 R (HD.7057) 7974 0 R (HD.7058) 7975 0 R (HD.7059) 7976 0 R (HD.706) 1017 0 R (HD.7060) 7977 0 R (HD.7061) 7978 0 R (HD.7062) 7979 0 R (HD.7063) 7984 0 R (HD.7064) 7985 0 R (HD.7065) 7986 0 R (HD.7066) 7987 0 R (HD.7067) 7988 0 R (HD.7068) 7989 0 R (HD.7069) 7990 0 R (HD.707) 1018 0 R (HD.7070) 7991 0 R (HD.7071) 7992 0 R (HD.7072) 7993 0 R (HD.7073) 7994 0 R (HD.7074) 7995 0 R (HD.7075) 7996 0 R (HD.7076) 7997 0 R (HD.7077) 7998 0 R ] /Limits [ (HD.7049) (HD.7077) ] >>
+endobj
+11862 0 obj
+<< /Names [ (HD.7078) 7999 0 R (HD.7079) 8000 0 R (HD.708) 1019 0 R (HD.7080) 8001 0 R (HD.7081) 8002 0 R (HD.7082) 8003 0 R (HD.7083) 8004 0 R (HD.7084) 8005 0 R (HD.7085) 8006 0 R (HD.7086) 8007 0 R (HD.7087) 8008 0 R (HD.7088) 8009 0 R (HD.7089) 8010 0 R (HD.709) 1020 0 R (HD.7090) 8011 0 R (HD.7091) 8012 0 R (HD.7092) 8013 0 R (HD.7093) 8014 0 R (HD.7094) 8015 0 R (HD.7095) 8016 0 R (HD.7096) 8017 0 R (HD.7097) 8018 0 R (HD.7098) 8019 0 R (HD.7099) 8020 0 R (HD.71) 270 0 R (HD.710) 1021 0 R (HD.7100) 8025 0 R (HD.7101) 8026 0 R (HD.7102) 8027 0 R (HD.7103) 8028 0 R (HD.7104) 8029 0 R (HD.7105) 8030 0 R ] /Limits [ (HD.7078) (HD.7105) ] >>
+endobj
+11863 0 obj
+<< /Names [ (HD.7106) 8031 0 R (HD.7107) 8032 0 R (HD.7108) 8033 0 R (HD.7109) 8034 0 R (HD.711) 1022 0 R (HD.7110) 8035 0 R (HD.7111) 8036 0 R (HD.7112) 8037 0 R (HD.7113) 8038 0 R (HD.7114) 8039 0 R (HD.7115) 8040 0 R (HD.7116) 8041 0 R (HD.7117) 8042 0 R (HD.7118) 8043 0 R (HD.7119) 8044 0 R (HD.712) 1023 0 R (HD.7120) 8045 0 R (HD.7121) 8046 0 R (HD.7122) 8047 0 R (HD.7123) 8048 0 R (HD.7124) 8049 0 R (HD.7125) 8050 0 R (HD.7126) 8051 0 R (HD.7127) 8052 0 R (HD.7128) 8053 0 R (HD.7129) 8054 0 R (HD.713) 1024 0 R (HD.7130) 8055 0 R (HD.7131) 8056 0 R (HD.7132) 8057 0 R (HD.7133) 8058 0 R (HD.7134) 8059 0 R ] /Limits [ (HD.7106) (HD.7134) ] >>
+endobj
+11864 0 obj
+<< /Names [ (HD.7135) 8060 0 R (HD.7136) 8061 0 R (HD.7137) 8062 0 R (HD.7138) 8063 0 R (HD.7139) 8064 0 R (HD.714) 1025 0 R (HD.7140) 8065 0 R (HD.7141) 8066 0 R (HD.7142) 8067 0 R (HD.7143) 8068 0 R (HD.7144) 8073 0 R (HD.7145) 8074 0 R (HD.7146) 8075 0 R (HD.7147) 8076 0 R (HD.7148) 8077 0 R (HD.7149) 8078 0 R (HD.715) 1026 0 R (HD.7150) 8079 0 R (HD.7151) 8080 0 R (HD.7152) 8081 0 R (HD.7153) 8082 0 R (HD.7154) 8083 0 R (HD.7155) 8084 0 R (HD.7156) 8085 0 R (HD.7157) 8086 0 R (HD.7158) 8087 0 R (HD.7159) 8088 0 R (HD.716) 1027 0 R (HD.7160) 8089 0 R (HD.7161) 8090 0 R (HD.7162) 8091 0 R (HD.7163) 8092 0 R ] /Limits [ (HD.7135) (HD.7163) ] >>
+endobj
+11865 0 obj
+<< /Names [ (HD.7164) 8093 0 R (HD.7165) 8094 0 R (HD.7166) 8095 0 R (HD.7167) 8096 0 R (HD.7168) 8097 0 R (HD.7169) 8098 0 R (HD.717) 1028 0 R (HD.7170) 8099 0 R (HD.7171) 8100 0 R (HD.7172) 8101 0 R (HD.7173) 8102 0 R (HD.7174) 8103 0 R (HD.7175) 8104 0 R (HD.7176) 8105 0 R (HD.7177) 8106 0 R (HD.7178) 8107 0 R (HD.7179) 8108 0 R (HD.718) 1029 0 R (HD.7180) 8109 0 R (HD.7181) 8110 0 R (HD.7182) 8115 0 R (HD.7183) 8116 0 R (HD.7184) 8117 0 R (HD.7185) 8118 0 R (HD.7186) 8119 0 R (HD.7187) 8120 0 R (HD.7188) 8121 0 R (HD.7189) 8122 0 R (HD.719) 1030 0 R (HD.7190) 8123 0 R (HD.7191) 8124 0 R (HD.7192) 8125 0 R ] /Limits [ (HD.7164) (HD.7192) ] >>
+endobj
+11866 0 obj
+<< /Names [ (HD.7193) 8126 0 R (HD.7194) 8127 0 R (HD.7195) 8128 0 R (HD.7196) 8129 0 R (HD.7197) 8130 0 R (HD.7198) 8131 0 R (HD.7199) 8132 0 R (HD.72) 271 0 R (HD.720) 1031 0 R (HD.7200) 8133 0 R (HD.7201) 8134 0 R (HD.7202) 8135 0 R (HD.7203) 8136 0 R (HD.7204) 8137 0 R (HD.7205) 8138 0 R (HD.7206) 8139 0 R (HD.7207) 8140 0 R (HD.7208) 8141 0 R (HD.7209) 8142 0 R (HD.721) 1032 0 R (HD.7210) 8143 0 R (HD.7211) 8144 0 R (HD.7212) 8145 0 R (HD.7213) 8146 0 R (HD.7214) 8147 0 R (HD.7215) 8148 0 R (HD.7216) 8149 0 R (HD.7217) 8150 0 R (HD.7218) 8151 0 R (HD.7219) 8152 0 R (HD.722) 1033 0 R (HD.7220) 8153 0 R ] /Limits [ (HD.7193) (HD.7220) ] >>
+endobj
+11867 0 obj
+<< /Names [ (HD.7221) 8154 0 R (HD.7222) 8155 0 R (HD.7223) 8156 0 R (HD.7224) 8157 0 R (HD.7225) 8162 0 R (HD.7226) 8163 0 R (HD.7227) 8164 0 R (HD.7228) 8165 0 R (HD.7229) 8166 0 R (HD.723) 1034 0 R (HD.7230) 8167 0 R (HD.7231) 8168 0 R (HD.7232) 8169 0 R (HD.7233) 8170 0 R (HD.7234) 8171 0 R (HD.7235) 8172 0 R (HD.7236) 8173 0 R (HD.7237) 8174 0 R (HD.7238) 8175 0 R (HD.7239) 8176 0 R (HD.724) 1035 0 R (HD.7240) 8177 0 R (HD.7241) 8178 0 R (HD.7242) 8179 0 R (HD.7243) 8180 0 R (HD.7244) 8181 0 R (HD.7245) 8182 0 R (HD.7246) 8183 0 R (HD.7247) 8184 0 R (HD.7248) 8185 0 R (HD.7249) 8186 0 R (HD.725) 1036 0 R ] /Limits [ (HD.7221) (HD.725) ] >>
+endobj
+11868 0 obj
+<< /Names [ (HD.7250) 8187 0 R (HD.7251) 8188 0 R (HD.7252) 8189 0 R (HD.7253) 8190 0 R (HD.7254) 8191 0 R (HD.7255) 8192 0 R (HD.7256) 8193 0 R (HD.7257) 8194 0 R (HD.7258) 8195 0 R (HD.7259) 8196 0 R (HD.726) 1037 0 R (HD.7260) 8197 0 R (HD.7261) 8198 0 R (HD.7262) 8199 0 R (HD.7263) 8200 0 R (HD.7264) 8201 0 R (HD.7265) 8202 0 R (HD.7266) 8203 0 R (HD.7267) 8204 0 R (HD.7268) 8205 0 R (HD.7269) 8206 0 R (HD.727) 1038 0 R (HD.7270) 8207 0 R (HD.7271) 8208 0 R (HD.7272) 8213 0 R (HD.7273) 8214 0 R (HD.7274) 8215 0 R (HD.7275) 8216 0 R (HD.7276) 8217 0 R (HD.7277) 8218 0 R (HD.7278) 8219 0 R (HD.7279) 8220 0 R ] /Limits [ (HD.7250) (HD.7279) ] >>
+endobj
+11869 0 obj
+<< /Names [ (HD.728) 1039 0 R (HD.7280) 8221 0 R (HD.7281) 8222 0 R (HD.7282) 8223 0 R (HD.7283) 8224 0 R (HD.7284) 8225 0 R (HD.7285) 8226 0 R (HD.7286) 8227 0 R (HD.7287) 8228 0 R (HD.7288) 8229 0 R (HD.7289) 8230 0 R (HD.729) 1040 0 R (HD.7290) 8231 0 R (HD.7291) 8232 0 R (HD.7292) 8233 0 R (HD.7293) 8234 0 R (HD.7294) 8235 0 R (HD.7295) 8236 0 R (HD.7296) 8237 0 R (HD.7297) 8238 0 R (HD.7298) 8239 0 R (HD.7299) 8240 0 R (HD.73) 272 0 R (HD.730) 1045 0 R (HD.7300) 8241 0 R (HD.7301) 8242 0 R (HD.7302) 8243 0 R (HD.7303) 8244 0 R (HD.7304) 8245 0 R (HD.7305) 8246 0 R (HD.7306) 8247 0 R (HD.7307) 8248 0 R ] /Limits [ (HD.728) (HD.7307) ] >>
+endobj
+11870 0 obj
+<< /Names [ (HD.7308) 8249 0 R (HD.7309) 8250 0 R (HD.731) 1046 0 R (HD.7310) 8251 0 R (HD.7311) 8252 0 R (HD.7312) 8253 0 R (HD.7313) 8254 0 R (HD.7314) 8255 0 R (HD.7315) 8256 0 R (HD.7316) 8257 0 R (HD.7317) 8258 0 R (HD.7318) 8259 0 R (HD.7319) 8260 0 R (HD.732) 1047 0 R (HD.7320) 8261 0 R (HD.7321) 8262 0 R (HD.7322) 8263 0 R (HD.7323) 8264 0 R (HD.7324) 8265 0 R (HD.7325) 8266 0 R (HD.7326) 8267 0 R (HD.7327) 8268 0 R (HD.7328) 8269 0 R (HD.7329) 8270 0 R (HD.733) 1048 0 R (HD.7330) 8271 0 R (HD.7331) 8276 0 R (HD.7332) 8277 0 R (HD.7333) 8278 0 R (HD.7334) 8279 0 R (HD.7335) 8280 0 R (HD.7336) 8281 0 R ] /Limits [ (HD.7308) (HD.7336) ] >>
+endobj
+11871 0 obj
+<< /Names [ (HD.7337) 8282 0 R (HD.7338) 8283 0 R (HD.7339) 8284 0 R (HD.734) 1049 0 R (HD.7340) 8285 0 R (HD.7341) 8286 0 R (HD.7342) 8287 0 R (HD.7343) 8288 0 R (HD.7344) 8289 0 R (HD.7345) 8290 0 R (HD.7346) 8291 0 R (HD.7347) 8292 0 R (HD.7348) 8293 0 R (HD.7349) 8294 0 R (HD.735) 1050 0 R (HD.7350) 8295 0 R (HD.7351) 8296 0 R (HD.7352) 8297 0 R (HD.7353) 8298 0 R (HD.7354) 8299 0 R (HD.7355) 8300 0 R (HD.7356) 8301 0 R (HD.7357) 8302 0 R (HD.7358) 8303 0 R (HD.7359) 8304 0 R (HD.736) 1051 0 R (HD.7360) 8305 0 R (HD.7361) 8306 0 R (HD.7362) 8307 0 R (HD.7363) 8308 0 R (HD.7364) 8309 0 R (HD.7365) 8310 0 R ] /Limits [ (HD.7337) (HD.7365) ] >>
+endobj
+11872 0 obj
+<< /Names [ (HD.7366) 8311 0 R (HD.7367) 8312 0 R (HD.7368) 8313 0 R (HD.7369) 8314 0 R (HD.737) 1052 0 R (HD.7370) 8315 0 R (HD.7371) 8316 0 R (HD.7372) 8317 0 R (HD.7373) 8318 0 R (HD.7374) 8319 0 R (HD.7375) 8320 0 R (HD.7376) 8326 0 R (HD.7377) 8327 0 R (HD.7378) 8328 0 R (HD.7379) 8329 0 R (HD.738) 1053 0 R (HD.7380) 8330 0 R (HD.7381) 8331 0 R (HD.7382) 8332 0 R (HD.7383) 8333 0 R (HD.7384) 8334 0 R (HD.7385) 8335 0 R (HD.7386) 8336 0 R (HD.7387) 8337 0 R (HD.7388) 8338 0 R (HD.7389) 8339 0 R (HD.739) 1054 0 R (HD.7390) 8340 0 R (HD.7391) 8341 0 R (HD.7392) 8342 0 R (HD.7393) 8343 0 R (HD.7394) 8344 0 R ] /Limits [ (HD.7366) (HD.7394) ] >>
+endobj
+11873 0 obj
+<< /Names [ (HD.7395) 8345 0 R (HD.7396) 8346 0 R (HD.7397) 8347 0 R (HD.7398) 8348 0 R (HD.7399) 8349 0 R (HD.74) 273 0 R (HD.740) 1055 0 R (HD.7400) 8350 0 R (HD.7401) 8351 0 R (HD.7402) 8352 0 R (HD.7403) 8353 0 R (HD.7404) 8354 0 R (HD.7405) 8355 0 R (HD.7406) 8356 0 R (HD.7407) 8357 0 R (HD.7408) 8358 0 R (HD.7409) 8359 0 R (HD.741) 1056 0 R (HD.7410) 8360 0 R (HD.7411) 8361 0 R (HD.7412) 8362 0 R (HD.7413) 8363 0 R (HD.7414) 8364 0 R (HD.7415) 8365 0 R (HD.7416) 8366 0 R (HD.7417) 8367 0 R (HD.7418) 8368 0 R (HD.7419) 8369 0 R (HD.742) 1057 0 R (HD.7420) 8370 0 R (HD.7421) 8371 0 R (HD.7422) 8372 0 R ] /Limits [ (HD.7395) (HD.7422) ] >>
+endobj
+11874 0 obj
+<< /Names [ (HD.7423) 8373 0 R (HD.7424) 8374 0 R (HD.7425) 8375 0 R (HD.7426) 8376 0 R (HD.7427) 8377 0 R (HD.7428) 8378 0 R (HD.7429) 8383 0 R (HD.743) 1058 0 R (HD.7430) 8384 0 R (HD.7431) 8385 0 R (HD.7432) 8386 0 R (HD.7433) 8387 0 R (HD.7434) 8388 0 R (HD.7435) 8389 0 R (HD.7436) 8390 0 R (HD.7437) 8391 0 R (HD.7438) 8392 0 R (HD.7439) 8393 0 R (HD.744) 1059 0 R (HD.7440) 8394 0 R (HD.7441) 8395 0 R (HD.7442) 8396 0 R (HD.7443) 8397 0 R (HD.7444) 8398 0 R (HD.7445) 8399 0 R (HD.7446) 8400 0 R (HD.7447) 8401 0 R (HD.7448) 8402 0 R (HD.7449) 8403 0 R (HD.745) 1060 0 R (HD.7450) 8404 0 R (HD.7451) 8405 0 R ] /Limits [ (HD.7423) (HD.7451) ] >>
+endobj
+11875 0 obj
+<< /Names [ (HD.7452) 8406 0 R (HD.7453) 8407 0 R (HD.7454) 8408 0 R (HD.7455) 8409 0 R (HD.7456) 8410 0 R (HD.7457) 8411 0 R (HD.7458) 8412 0 R (HD.7459) 8413 0 R (HD.746) 1061 0 R (HD.7460) 8414 0 R (HD.7461) 8415 0 R (HD.7462) 8416 0 R (HD.7463) 8417 0 R (HD.7464) 8418 0 R (HD.7465) 8419 0 R (HD.7466) 8420 0 R (HD.7467) 8421 0 R (HD.7468) 8422 0 R (HD.7469) 8423 0 R (HD.747) 1062 0 R (HD.7470) 8424 0 R (HD.7471) 8425 0 R (HD.7472) 8426 0 R (HD.7473) 8427 0 R (HD.7474) 8428 0 R (HD.7475) 8429 0 R (HD.7476) 8430 0 R (HD.7477) 8431 0 R (HD.7478) 8432 0 R (HD.7479) 8433 0 R (HD.748) 1063 0 R (HD.7480) 8434 0 R ] /Limits [ (HD.7452) (HD.7480) ] >>
+endobj
+11876 0 obj
+<< /Names [ (HD.7481) 8435 0 R (HD.7482) 8440 0 R (HD.7483) 8441 0 R (HD.7484) 8442 0 R (HD.7485) 8443 0 R (HD.7486) 8444 0 R (HD.7487) 8445 0 R (HD.7488) 8446 0 R (HD.7489) 8447 0 R (HD.749) 1064 0 R (HD.7490) 8448 0 R (HD.7491) 8449 0 R (HD.7492) 8450 0 R (HD.7493) 8451 0 R (HD.7494) 8452 0 R (HD.7495) 8453 0 R (HD.7496) 8454 0 R (HD.7497) 8455 0 R (HD.7498) 8456 0 R (HD.7499) 8457 0 R (HD.75) 274 0 R (HD.750) 1065 0 R (HD.7500) 8458 0 R (HD.7501) 8459 0 R (HD.7502) 8460 0 R (HD.7503) 8461 0 R (HD.7504) 8462 0 R (HD.7505) 8463 0 R (HD.7506) 8464 0 R (HD.7507) 8465 0 R (HD.7508) 8466 0 R (HD.7509) 8467 0 R ] /Limits [ (HD.7481) (HD.7509) ] >>
+endobj
+11877 0 obj
+<< /Names [ (HD.751) 1066 0 R (HD.7510) 8468 0 R (HD.7511) 8469 0 R (HD.7512) 8470 0 R (HD.7513) 8471 0 R (HD.7514) 8472 0 R (HD.7515) 8473 0 R (HD.7516) 8474 0 R (HD.7517) 8475 0 R (HD.7518) 8476 0 R (HD.7519) 8477 0 R (HD.752) 1067 0 R (HD.7520) 8478 0 R (HD.7521) 8479 0 R (HD.7522) 8480 0 R (HD.7523) 8481 0 R (HD.7524) 8482 0 R (HD.7525) 8483 0 R (HD.7526) 8484 0 R (HD.7527) 8485 0 R (HD.7528) 8486 0 R (HD.7529) 8487 0 R (HD.753) 1072 0 R (HD.7530) 8492 0 R (HD.7531) 8493 0 R (HD.7532) 8494 0 R (HD.7533) 8495 0 R (HD.7534) 8496 0 R (HD.7535) 8497 0 R (HD.7536) 8498 0 R (HD.7537) 8499 0 R (HD.7538) 8500 0 R ] /Limits [ (HD.751) (HD.7538) ] >>
+endobj
+11878 0 obj
+<< /Names [ (HD.7539) 8501 0 R (HD.754) 1073 0 R (HD.7540) 8502 0 R (HD.7541) 8503 0 R (HD.7542) 8504 0 R (HD.7543) 8505 0 R (HD.7544) 8506 0 R (HD.7545) 8507 0 R (HD.7546) 8508 0 R (HD.7547) 8509 0 R (HD.7548) 8510 0 R (HD.7549) 8511 0 R (HD.755) 1074 0 R (HD.7550) 8512 0 R (HD.7551) 8513 0 R (HD.7552) 8514 0 R (HD.7553) 8515 0 R (HD.7554) 8516 0 R (HD.7555) 8517 0 R (HD.7556) 8518 0 R (HD.7557) 8519 0 R (HD.7558) 8520 0 R (HD.7559) 8521 0 R (HD.756) 1075 0 R (HD.7560) 8522 0 R (HD.7561) 8523 0 R (HD.7562) 8524 0 R (HD.7563) 8525 0 R (HD.7564) 8526 0 R (HD.7565) 8527 0 R (HD.7566) 8528 0 R (HD.7567) 8529 0 R ] /Limits [ (HD.7539) (HD.7567) ] >>
+endobj
+11879 0 obj
+<< /Names [ (HD.7568) 8530 0 R (HD.7569) 8531 0 R (HD.757) 1076 0 R (HD.7570) 8532 0 R (HD.7571) 8533 0 R (HD.7572) 8534 0 R (HD.7573) 8535 0 R (HD.7574) 8536 0 R (HD.7575) 8537 0 R (HD.7576) 8538 0 R (HD.7577) 8539 0 R (HD.7578) 8540 0 R (HD.7579) 8541 0 R (HD.758) 1077 0 R (HD.7580) 8542 0 R (HD.7581) 8543 0 R (HD.7582) 8544 0 R (HD.7583) 8545 0 R (HD.7584) 8546 0 R (HD.7585) 8547 0 R (HD.7586) 8552 0 R (HD.7587) 8553 0 R (HD.7588) 8554 0 R (HD.7589) 8555 0 R (HD.759) 1078 0 R (HD.7590) 8556 0 R (HD.7591) 8557 0 R (HD.7592) 8558 0 R (HD.7593) 8559 0 R (HD.7594) 8560 0 R (HD.7595) 8561 0 R (HD.7596) 8562 0 R ] /Limits [ (HD.7568) (HD.7596) ] >>
+endobj
+11880 0 obj
+<< /Names [ (HD.7597) 8563 0 R (HD.7598) 8564 0 R (HD.7599) 8565 0 R (HD.76) 275 0 R (HD.760) 1079 0 R (HD.7600) 8566 0 R (HD.7601) 8567 0 R (HD.7602) 8568 0 R (HD.7603) 8569 0 R (HD.7604) 8570 0 R (HD.7605) 8571 0 R (HD.7606) 8572 0 R (HD.7607) 8573 0 R (HD.7608) 8574 0 R (HD.7609) 8575 0 R (HD.761) 1080 0 R (HD.7610) 8576 0 R (HD.7611) 8577 0 R (HD.7612) 8578 0 R (HD.7613) 8579 0 R (HD.7614) 8580 0 R (HD.7615) 8581 0 R (HD.7616) 8582 0 R (HD.7617) 8583 0 R (HD.7618) 8584 0 R (HD.7619) 8585 0 R (HD.762) 1081 0 R (HD.7620) 8586 0 R (HD.7621) 8587 0 R (HD.7622) 8588 0 R (HD.7623) 8589 0 R (HD.7624) 8590 0 R ] /Limits [ (HD.7597) (HD.7624) ] >>
+endobj
+11881 0 obj
+<< /Names [ (HD.7625) 8591 0 R (HD.7626) 8596 0 R (HD.7627) 8597 0 R (HD.7628) 8598 0 R (HD.7629) 8599 0 R (HD.763) 1082 0 R (HD.7630) 8600 0 R (HD.7631) 8601 0 R (HD.7632) 8602 0 R (HD.7633) 8603 0 R (HD.7634) 8604 0 R (HD.7635) 8605 0 R (HD.7636) 8606 0 R (HD.7637) 8607 0 R (HD.7638) 8608 0 R (HD.7639) 8609 0 R (HD.764) 1083 0 R (HD.7640) 8610 0 R (HD.7641) 8611 0 R (HD.7642) 8612 0 R (HD.7643) 8613 0 R (HD.7644) 8614 0 R (HD.7645) 8615 0 R (HD.7646) 8616 0 R (HD.7647) 8617 0 R (HD.7648) 8618 0 R (HD.7649) 8619 0 R (HD.765) 1084 0 R (HD.7650) 8620 0 R (HD.7651) 8621 0 R (HD.7652) 8622 0 R (HD.7653) 8623 0 R ] /Limits [ (HD.7625) (HD.7653) ] >>
+endobj
+11882 0 obj
+<< /Names [ (HD.7654) 8624 0 R (HD.7655) 8625 0 R (HD.7656) 8626 0 R (HD.7657) 8627 0 R (HD.7658) 8628 0 R (HD.7659) 8629 0 R (HD.766) 1085 0 R (HD.7660) 8630 0 R (HD.7661) 8631 0 R (HD.7662) 8632 0 R (HD.7663) 8633 0 R (HD.7664) 8634 0 R (HD.7665) 8635 0 R (HD.7666) 8636 0 R (HD.7667) 8637 0 R (HD.7668) 8638 0 R (HD.7669) 8639 0 R (HD.767) 1086 0 R (HD.7670) 8640 0 R (HD.7671) 8641 0 R (HD.7672) 8646 0 R (HD.7673) 8647 0 R (HD.7674) 8648 0 R (HD.7675) 8649 0 R (HD.7676) 8650 0 R (HD.7677) 8651 0 R (HD.7678) 8652 0 R (HD.7679) 8653 0 R (HD.768) 1087 0 R (HD.7680) 8654 0 R (HD.7681) 8655 0 R (HD.7682) 8656 0 R ] /Limits [ (HD.7654) (HD.7682) ] >>
+endobj
+11883 0 obj
+<< /Names [ (HD.7683) 8657 0 R (HD.7684) 8658 0 R (HD.7685) 8659 0 R (HD.7686) 8660 0 R (HD.7687) 8661 0 R (HD.7688) 8662 0 R (HD.7689) 8663 0 R (HD.769) 1088 0 R (HD.7690) 8664 0 R (HD.7691) 8665 0 R (HD.7692) 8666 0 R (HD.7693) 8667 0 R (HD.7694) 8668 0 R (HD.7695) 8669 0 R (HD.7696) 8670 0 R (HD.7697) 8671 0 R (HD.7698) 8672 0 R (HD.7699) 8673 0 R (HD.77) 276 0 R (HD.770) 1089 0 R (HD.7700) 8674 0 R (HD.7701) 8675 0 R (HD.7702) 8676 0 R (HD.7703) 8677 0 R (HD.7704) 8678 0 R (HD.7705) 8679 0 R (HD.7706) 8680 0 R (HD.7707) 8681 0 R (HD.7708) 8682 0 R (HD.7709) 8683 0 R (HD.771) 1090 0 R (HD.7710) 8684 0 R ] /Limits [ (HD.7683) (HD.7710) ] >>
+endobj
+11884 0 obj
+<< /Names [ (HD.7711) 8685 0 R (HD.7712) 8686 0 R (HD.7713) 8687 0 R (HD.7714) 8688 0 R (HD.7715) 8689 0 R (HD.7716) 8690 0 R (HD.7717) 8691 0 R (HD.7718) 8692 0 R (HD.7719) 8693 0 R (HD.772) 1095 0 R (HD.7720) 8694 0 R (HD.7721) 8695 0 R (HD.7722) 8696 0 R (HD.7723) 8697 0 R (HD.7724) 8698 0 R (HD.7725) 8699 0 R (HD.7726) 8700 0 R (HD.7727) 8701 0 R (HD.7728) 8702 0 R (HD.7729) 8703 0 R (HD.773) 1096 0 R (HD.7730) 8704 0 R (HD.7731) 8709 0 R (HD.7732) 8710 0 R (HD.7733) 8711 0 R (HD.7734) 8712 0 R (HD.7735) 8713 0 R (HD.7736) 8714 0 R (HD.7737) 8715 0 R (HD.7738) 8716 0 R (HD.7739) 8717 0 R (HD.774) 1097 0 R ] /Limits [ (HD.7711) (HD.774) ] >>
+endobj
+11885 0 obj
+<< /Names [ (HD.7740) 8718 0 R (HD.7741) 8719 0 R (HD.7742) 8720 0 R (HD.7743) 8721 0 R (HD.7744) 8722 0 R (HD.7745) 8723 0 R (HD.7746) 8724 0 R (HD.7747) 8725 0 R (HD.7748) 8726 0 R (HD.7749) 8727 0 R (HD.775) 1098 0 R (HD.7750) 8728 0 R (HD.7751) 8729 0 R (HD.7752) 8730 0 R (HD.7753) 8731 0 R (HD.7754) 8732 0 R (HD.7755) 8733 0 R (HD.7756) 8734 0 R (HD.7757) 8735 0 R (HD.7758) 8736 0 R (HD.7759) 8737 0 R (HD.776) 1099 0 R (HD.7760) 8738 0 R (HD.7761) 8739 0 R (HD.7762) 8740 0 R (HD.7763) 8741 0 R (HD.7764) 8742 0 R (HD.7765) 8743 0 R (HD.7766) 8744 0 R (HD.7767) 8745 0 R (HD.7768) 8746 0 R (HD.7769) 8747 0 R ] /Limits [ (HD.7740) (HD.7769) ] >>
+endobj
+11886 0 obj
+<< /Names [ (HD.777) 1100 0 R (HD.7770) 8748 0 R (HD.7771) 8749 0 R (HD.7772) 8750 0 R (HD.7773) 8751 0 R (HD.7774) 8752 0 R (HD.7775) 8753 0 R (HD.7776) 8754 0 R (HD.7777) 8755 0 R (HD.7778) 8756 0 R (HD.7779) 8757 0 R (HD.778) 1101 0 R (HD.7780) 8758 0 R (HD.7781) 8759 0 R (HD.7782) 8760 0 R (HD.7783) 8761 0 R (HD.7784) 8762 0 R (HD.7785) 8763 0 R (HD.7786) 8764 0 R (HD.7787) 8765 0 R (HD.7788) 8766 0 R (HD.7789) 8767 0 R (HD.779) 1102 0 R (HD.7790) 8768 0 R (HD.7791) 8769 0 R (HD.7792) 8770 0 R (HD.7793) 8775 0 R (HD.7794) 8776 0 R (HD.7795) 8777 0 R (HD.7796) 8778 0 R (HD.7797) 8779 0 R (HD.7798) 8780 0 R ] /Limits [ (HD.777) (HD.7798) ] >>
+endobj
+11887 0 obj
+<< /Names [ (HD.7799) 8781 0 R (HD.78) 277 0 R (HD.780) 1103 0 R (HD.7800) 8782 0 R (HD.7801) 8783 0 R (HD.7802) 8784 0 R (HD.7803) 8785 0 R (HD.7804) 8786 0 R (HD.7805) 8787 0 R (HD.7806) 8788 0 R (HD.7807) 8789 0 R (HD.7808) 8790 0 R (HD.7809) 8791 0 R (HD.781) 1104 0 R (HD.7810) 8792 0 R (HD.7811) 8793 0 R (HD.7812) 8794 0 R (HD.7813) 8795 0 R (HD.7814) 8796 0 R (HD.7815) 8797 0 R (HD.7816) 8798 0 R (HD.7817) 8799 0 R (HD.7818) 8800 0 R (HD.7819) 8801 0 R (HD.782) 1105 0 R (HD.7820) 8802 0 R (HD.7821) 8803 0 R (HD.7822) 8804 0 R (HD.7823) 8805 0 R (HD.7824) 8806 0 R (HD.7825) 8807 0 R (HD.7826) 8808 0 R ] /Limits [ (HD.7799) (HD.7826) ] >>
+endobj
+11888 0 obj
+<< /Names [ (HD.7827) 8809 0 R (HD.7828) 8810 0 R (HD.7829) 8811 0 R (HD.783) 1106 0 R (HD.7830) 8812 0 R (HD.7831) 8813 0 R (HD.7832) 8814 0 R (HD.7833) 8815 0 R (HD.7834) 8816 0 R (HD.7835) 8817 0 R (HD.7836) 8818 0 R (HD.7837) 8819 0 R (HD.7838) 8820 0 R (HD.7839) 8821 0 R (HD.784) 1107 0 R (HD.7840) 8822 0 R (HD.7841) 8823 0 R (HD.7842) 8824 0 R (HD.7843) 8825 0 R (HD.7844) 8826 0 R (HD.7845) 8827 0 R (HD.7846) 8828 0 R (HD.7847) 8829 0 R (HD.7848) 8834 0 R (HD.7849) 8835 0 R (HD.785) 1108 0 R (HD.7850) 8836 0 R (HD.7851) 8837 0 R (HD.7852) 8838 0 R (HD.7853) 8839 0 R (HD.7854) 8840 0 R (HD.7855) 8841 0 R ] /Limits [ (HD.7827) (HD.7855) ] >>
+endobj
+11889 0 obj
+<< /Names [ (HD.7856) 8842 0 R (HD.7857) 8843 0 R (HD.7858) 8844 0 R (HD.7859) 8845 0 R (HD.786) 1109 0 R (HD.7860) 8846 0 R (HD.7861) 8847 0 R (HD.7862) 8848 0 R (HD.7863) 8849 0 R (HD.7864) 8850 0 R (HD.7865) 8851 0 R (HD.7866) 8852 0 R (HD.7867) 8853 0 R (HD.7868) 8854 0 R (HD.7869) 8855 0 R (HD.787) 1110 0 R (HD.7870) 8856 0 R (HD.7871) 8857 0 R (HD.7872) 8858 0 R (HD.7873) 8859 0 R (HD.7874) 8860 0 R (HD.7875) 8861 0 R (HD.7876) 8862 0 R (HD.7877) 8863 0 R (HD.7878) 8864 0 R (HD.7879) 8865 0 R (HD.788) 1111 0 R (HD.7880) 8866 0 R (HD.7881) 8867 0 R (HD.7882) 8868 0 R (HD.7883) 8869 0 R (HD.7884) 8870 0 R ] /Limits [ (HD.7856) (HD.7884) ] >>
+endobj
+11890 0 obj
+<< /Names [ (HD.7885) 8871 0 R (HD.7886) 8872 0 R (HD.7887) 8873 0 R (HD.7888) 8874 0 R (HD.7889) 8875 0 R (HD.789) 1112 0 R (HD.7890) 8876 0 R (HD.7891) 8877 0 R (HD.7892) 8878 0 R (HD.7893) 8879 0 R (HD.7894) 8880 0 R (HD.7895) 8881 0 R (HD.7896) 8882 0 R (HD.7897) 8883 0 R (HD.7898) 8884 0 R (HD.7899) 8885 0 R (HD.79) 278 0 R (HD.790) 1113 0 R (HD.7900) 8886 0 R (HD.7901) 8887 0 R (HD.7902) 8888 0 R (HD.7903) 8889 0 R (HD.7904) 8890 0 R (HD.7905) 8891 0 R (HD.7906) 8892 0 R (HD.7907) 8898 0 R (HD.7908) 8899 0 R (HD.7909) 8900 0 R (HD.791) 1114 0 R (HD.7910) 8901 0 R (HD.7911) 8902 0 R (HD.7912) 8903 0 R ] /Limits [ (HD.7885) (HD.7912) ] >>
+endobj
+11891 0 obj
+<< /Names [ (HD.7913) 8904 0 R (HD.7914) 8905 0 R (HD.7915) 8906 0 R (HD.7916) 8907 0 R (HD.7917) 8908 0 R (HD.7918) 8909 0 R (HD.7919) 8910 0 R (HD.792) 1115 0 R (HD.7920) 8911 0 R (HD.7921) 8912 0 R (HD.7922) 8913 0 R (HD.7923) 8914 0 R (HD.7924) 8915 0 R (HD.7925) 8916 0 R (HD.7926) 8917 0 R (HD.7927) 8918 0 R (HD.7928) 8919 0 R (HD.7929) 8920 0 R (HD.793) 1116 0 R (HD.7930) 8921 0 R (HD.7931) 8922 0 R (HD.7932) 8923 0 R (HD.7933) 8924 0 R (HD.7934) 8925 0 R (HD.7935) 8926 0 R (HD.7936) 8927 0 R (HD.7937) 8928 0 R (HD.7938) 8929 0 R (HD.7939) 8930 0 R (HD.794) 1117 0 R (HD.7940) 8931 0 R (HD.7941) 8932 0 R ] /Limits [ (HD.7913) (HD.7941) ] >>
+endobj
+11892 0 obj
+<< /Names [ (HD.7942) 8933 0 R (HD.7943) 8934 0 R (HD.7944) 8935 0 R (HD.7945) 8936 0 R (HD.7946) 8937 0 R (HD.7947) 8938 0 R (HD.7948) 8939 0 R (HD.7949) 8940 0 R (HD.795) 1118 0 R (HD.7950) 8941 0 R (HD.7951) 8942 0 R (HD.7952) 8943 0 R (HD.7953) 8944 0 R (HD.7954) 8945 0 R (HD.7955) 8946 0 R (HD.7956) 8947 0 R (HD.7957) 8948 0 R (HD.7958) 8949 0 R (HD.7959) 8950 0 R (HD.796) 1119 0 R (HD.7960) 8951 0 R (HD.7961) 8956 0 R (HD.7962) 8957 0 R (HD.7963) 8958 0 R (HD.7964) 8959 0 R (HD.7965) 8960 0 R (HD.7966) 8961 0 R (HD.7967) 8962 0 R (HD.7968) 8963 0 R (HD.7969) 8964 0 R (HD.797) 1120 0 R (HD.7970) 8965 0 R ] /Limits [ (HD.7942) (HD.7970) ] >>
+endobj
+11893 0 obj
+<< /Names [ (HD.7971) 8966 0 R (HD.7972) 8967 0 R (HD.7973) 8968 0 R (HD.7974) 8969 0 R (HD.7975) 8970 0 R (HD.7976) 8971 0 R (HD.7977) 8972 0 R (HD.7978) 8973 0 R (HD.7979) 8974 0 R (HD.798) 1121 0 R (HD.7980) 8975 0 R (HD.7981) 8976 0 R (HD.7982) 8977 0 R (HD.7983) 8978 0 R (HD.7984) 8979 0 R (HD.7985) 8980 0 R (HD.7986) 8981 0 R (HD.7987) 8982 0 R (HD.7988) 8983 0 R (HD.7989) 8984 0 R (HD.799) 1122 0 R (HD.7990) 8985 0 R (HD.7991) 8986 0 R (HD.7992) 8987 0 R (HD.7993) 8988 0 R (HD.7994) 8989 0 R (HD.7995) 8990 0 R (HD.7996) 8991 0 R (HD.7997) 8992 0 R (HD.7998) 8993 0 R (HD.7999) 8994 0 R (HD.8) 196 0 R ] /Limits [ (HD.7971) (HD.8) ] >>
+endobj
+11894 0 obj
+<< /Names [ (HD.80) 279 0 R (HD.800) 1123 0 R (HD.8000) 8995 0 R (HD.8001) 8996 0 R (HD.8002) 8997 0 R (HD.8003) 8998 0 R (HD.8004) 8999 0 R (HD.8005) 9000 0 R (HD.8006) 9001 0 R (HD.8007) 9002 0 R (HD.8008) 9003 0 R (HD.8009) 9004 0 R (HD.801) 1124 0 R (HD.8010) 9005 0 R (HD.8011) 9006 0 R (HD.8012) 9007 0 R (HD.8013) 9008 0 R (HD.8014) 9009 0 R (HD.8015) 9010 0 R (HD.8016) 9011 0 R (HD.8017) 9012 0 R (HD.8018) 9017 0 R (HD.8019) 9018 0 R (HD.802) 1125 0 R (HD.8020) 9019 0 R (HD.8021) 9020 0 R (HD.8022) 9021 0 R (HD.8023) 9022 0 R (HD.8024) 9023 0 R (HD.8025) 9024 0 R (HD.8026) 9025 0 R (HD.8027) 9026 0 R ] /Limits [ (HD.80) (HD.8027) ] >>
+endobj
+11895 0 obj
+<< /Names [ (HD.8028) 9027 0 R (HD.8029) 9028 0 R (HD.803) 1126 0 R (HD.8030) 9029 0 R (HD.8031) 9030 0 R (HD.8032) 9031 0 R (HD.8033) 9032 0 R (HD.8034) 9033 0 R (HD.8035) 9034 0 R (HD.8036) 9035 0 R (HD.8037) 9036 0 R (HD.8038) 9037 0 R (HD.8039) 9038 0 R (HD.804) 1127 0 R (HD.8040) 9039 0 R (HD.8041) 9040 0 R (HD.8042) 9041 0 R (HD.8043) 9042 0 R (HD.8044) 9043 0 R (HD.8045) 9044 0 R (HD.8046) 9045 0 R (HD.8047) 9046 0 R (HD.8048) 9047 0 R (HD.8049) 9048 0 R (HD.805) 1128 0 R (HD.8050) 9049 0 R (HD.8051) 9050 0 R (HD.8052) 9051 0 R (HD.8053) 9052 0 R (HD.8054) 9053 0 R (HD.8055) 9054 0 R (HD.8056) 9055 0 R ] /Limits [ (HD.8028) (HD.8056) ] >>
+endobj
+11896 0 obj
+<< /Names [ (HD.8057) 9056 0 R (HD.8058) 9057 0 R (HD.8059) 9058 0 R (HD.806) 1129 0 R (HD.8060) 9059 0 R (HD.8061) 9060 0 R (HD.8062) 9061 0 R (HD.8063) 9062 0 R (HD.8064) 9063 0 R (HD.8065) 9064 0 R (HD.8066) 9065 0 R (HD.8067) 9066 0 R (HD.8068) 9067 0 R (HD.8069) 9068 0 R (HD.807) 1130 0 R (HD.8070) 9069 0 R (HD.8071) 9070 0 R (HD.8072) 9071 0 R (HD.8073) 9072 0 R (HD.8074) 9073 0 R (HD.8075) 9074 0 R (HD.8076) 9079 0 R (HD.8077) 9080 0 R (HD.8078) 9081 0 R (HD.8079) 9082 0 R (HD.808) 1131 0 R (HD.8080) 9083 0 R (HD.8081) 9084 0 R (HD.8082) 9085 0 R (HD.8083) 9086 0 R (HD.8084) 9087 0 R (HD.8085) 9088 0 R ] /Limits [ (HD.8057) (HD.8085) ] >>
+endobj
+11897 0 obj
+<< /Names [ (HD.8086) 9089 0 R (HD.8087) 9090 0 R (HD.8088) 9091 0 R (HD.8089) 9092 0 R (HD.809) 1132 0 R (HD.8090) 9093 0 R (HD.8091) 9094 0 R (HD.8092) 9095 0 R (HD.8093) 9096 0 R (HD.8094) 9097 0 R (HD.8095) 9098 0 R (HD.8096) 9099 0 R (HD.8097) 9100 0 R (HD.8098) 9101 0 R (HD.8099) 9102 0 R (HD.81) 280 0 R (HD.810) 1133 0 R (HD.8100) 9103 0 R (HD.8101) 9104 0 R (HD.8102) 9105 0 R (HD.8103) 9106 0 R (HD.8104) 9107 0 R (HD.8105) 9108 0 R (HD.8106) 9109 0 R (HD.8107) 9110 0 R (HD.8108) 9111 0 R (HD.8109) 9112 0 R (HD.811) 1134 0 R (HD.8110) 9113 0 R (HD.8111) 9114 0 R (HD.8112) 9115 0 R (HD.8113) 9116 0 R ] /Limits [ (HD.8086) (HD.8113) ] >>
+endobj
+11898 0 obj
+<< /Names [ (HD.8114) 9117 0 R (HD.8115) 9118 0 R (HD.8116) 9119 0 R (HD.8117) 9120 0 R (HD.8118) 9121 0 R (HD.8119) 9122 0 R (HD.812) 1135 0 R (HD.8120) 9123 0 R (HD.8121) 9124 0 R (HD.8122) 9125 0 R (HD.8123) 9126 0 R (HD.8124) 9127 0 R (HD.8125) 9128 0 R (HD.8126) 9129 0 R (HD.8127) 9130 0 R (HD.8128) 9131 0 R (HD.8129) 9132 0 R (HD.813) 1136 0 R (HD.8130) 9133 0 R (HD.8131) 9134 0 R (HD.8132) 9135 0 R (HD.8133) 9140 0 R (HD.8134) 9141 0 R (HD.8135) 9142 0 R (HD.8136) 9143 0 R (HD.8137) 9144 0 R (HD.8138) 9145 0 R (HD.8139) 9146 0 R (HD.814) 1137 0 R (HD.8140) 9147 0 R (HD.8141) 9148 0 R (HD.8142) 9149 0 R ] /Limits [ (HD.8114) (HD.8142) ] >>
+endobj
+11899 0 obj
+<< /Names [ (HD.8143) 9150 0 R (HD.8144) 9151 0 R (HD.8145) 9152 0 R (HD.8146) 9153 0 R (HD.8147) 9154 0 R (HD.8148) 9155 0 R (HD.8149) 9156 0 R (HD.815) 1142 0 R (HD.8150) 9157 0 R (HD.8151) 9158 0 R (HD.8152) 9159 0 R (HD.8153) 9160 0 R (HD.8154) 9161 0 R (HD.8155) 9162 0 R (HD.8156) 9163 0 R (HD.8157) 9164 0 R (HD.8158) 9165 0 R (HD.8159) 9166 0 R (HD.816) 1143 0 R (HD.8160) 9167 0 R (HD.8161) 9168 0 R (HD.8162) 9169 0 R (HD.8163) 9170 0 R (HD.8164) 9171 0 R (HD.8165) 9172 0 R (HD.8166) 9173 0 R (HD.8167) 9174 0 R (HD.8168) 9175 0 R (HD.8169) 9176 0 R (HD.817) 1144 0 R (HD.8170) 9177 0 R (HD.8171) 9178 0 R ] /Limits [ (HD.8143) (HD.8171) ] >>
+endobj
+11900 0 obj
+<< /Names [ (HD.8172) 9179 0 R (HD.8173) 9180 0 R (HD.8174) 9181 0 R (HD.8175) 9182 0 R (HD.8176) 9183 0 R (HD.8177) 9184 0 R (HD.8178) 9185 0 R (HD.8179) 9186 0 R (HD.818) 1145 0 R (HD.8180) 9191 0 R (HD.8181) 9192 0 R (HD.8182) 9193 0 R (HD.8183) 9194 0 R (HD.8184) 9195 0 R (HD.8185) 9196 0 R (HD.8186) 9197 0 R (HD.8187) 9198 0 R (HD.8188) 9199 0 R (HD.8189) 9200 0 R (HD.819) 1146 0 R (HD.8190) 9201 0 R (HD.8191) 9202 0 R (HD.8192) 9203 0 R (HD.8193) 9204 0 R (HD.8194) 9205 0 R (HD.8195) 9206 0 R (HD.8196) 9207 0 R (HD.8197) 9208 0 R (HD.8198) 9209 0 R (HD.8199) 9210 0 R (HD.82) 281 0 R (HD.820) 1147 0 R ] /Limits [ (HD.8172) (HD.820) ] >>
+endobj
+11901 0 obj
+<< /Names [ (HD.8200) 9211 0 R (HD.8201) 9212 0 R (HD.8202) 9213 0 R (HD.8203) 9214 0 R (HD.8204) 9215 0 R (HD.8205) 9216 0 R (HD.8206) 9217 0 R (HD.8207) 9218 0 R (HD.8208) 9219 0 R (HD.8209) 9220 0 R (HD.821) 1148 0 R (HD.8210) 9221 0 R (HD.8211) 9222 0 R (HD.8212) 9223 0 R (HD.8213) 9224 0 R (HD.8214) 9225 0 R (HD.8215) 9226 0 R (HD.8216) 9227 0 R (HD.8217) 9228 0 R (HD.8218) 9229 0 R (HD.8219) 9230 0 R (HD.822) 1149 0 R (HD.8220) 9231 0 R (HD.8221) 9232 0 R (HD.8222) 9233 0 R (HD.8223) 9234 0 R (HD.8224) 9235 0 R (HD.8225) 9236 0 R (HD.8226) 9237 0 R (HD.8227) 9238 0 R (HD.8228) 9239 0 R (HD.8229) 9240 0 R ] /Limits [ (HD.8200) (HD.8229) ] >>
+endobj
+11902 0 obj
+<< /Names [ (HD.823) 1150 0 R (HD.8230) 9241 0 R (HD.8231) 9246 0 R (HD.8232) 9247 0 R (HD.8233) 9248 0 R (HD.8234) 9249 0 R (HD.8235) 9250 0 R (HD.8236) 9251 0 R (HD.8237) 9252 0 R (HD.8238) 9253 0 R (HD.8239) 9254 0 R (HD.824) 1151 0 R (HD.8240) 9255 0 R (HD.8241) 9256 0 R (HD.8242) 9257 0 R (HD.8243) 9258 0 R (HD.8244) 9259 0 R (HD.8245) 9260 0 R (HD.8246) 9261 0 R (HD.8247) 9262 0 R (HD.8248) 9263 0 R (HD.8249) 9264 0 R (HD.825) 1152 0 R (HD.8250) 9265 0 R (HD.8251) 9266 0 R (HD.8252) 9267 0 R (HD.8253) 9268 0 R (HD.8254) 9269 0 R (HD.8255) 9270 0 R (HD.8256) 9271 0 R (HD.8257) 9272 0 R (HD.8258) 9273 0 R ] /Limits [ (HD.823) (HD.8258) ] >>
+endobj
+11903 0 obj
+<< /Names [ (HD.8259) 9274 0 R (HD.826) 1153 0 R (HD.8260) 9275 0 R (HD.8261) 9276 0 R (HD.8262) 9277 0 R (HD.8263) 9278 0 R (HD.8264) 9279 0 R (HD.8265) 9280 0 R (HD.8266) 9281 0 R (HD.8267) 9282 0 R (HD.8268) 9283 0 R (HD.8269) 9284 0 R (HD.827) 1154 0 R (HD.8270) 9289 0 R (HD.8271) 9290 0 R (HD.8272) 9291 0 R (HD.8273) 9292 0 R (HD.8274) 9293 0 R (HD.8275) 9294 0 R (HD.8276) 9295 0 R (HD.8277) 9296 0 R (HD.8278) 9297 0 R (HD.8279) 9298 0 R (HD.828) 1155 0 R (HD.8280) 9299 0 R (HD.8281) 9300 0 R (HD.8282) 9301 0 R (HD.8283) 9302 0 R (HD.8284) 9303 0 R (HD.8285) 9304 0 R (HD.8286) 9305 0 R (HD.8287) 9306 0 R ] /Limits [ (HD.8259) (HD.8287) ] >>
+endobj
+11904 0 obj
+<< /Names [ (HD.8288) 9307 0 R (HD.8289) 9308 0 R (HD.829) 1156 0 R (HD.8290) 9309 0 R (HD.8291) 9310 0 R (HD.8292) 9311 0 R (HD.8293) 9312 0 R (HD.8294) 9313 0 R (HD.8295) 9314 0 R (HD.8296) 9315 0 R (HD.8297) 9316 0 R (HD.8298) 9317 0 R (HD.8299) 9318 0 R (HD.83) 282 0 R (HD.830) 1157 0 R (HD.8300) 9319 0 R (HD.8301) 9320 0 R (HD.8302) 9321 0 R (HD.8303) 9322 0 R (HD.8304) 9323 0 R (HD.8305) 9324 0 R (HD.8306) 9325 0 R (HD.8307) 9326 0 R (HD.8308) 9327 0 R (HD.8309) 9328 0 R (HD.831) 1158 0 R (HD.8310) 9329 0 R (HD.8311) 9330 0 R (HD.8312) 9331 0 R (HD.8313) 9332 0 R (HD.8314) 9338 0 R (HD.8315) 9339 0 R ] /Limits [ (HD.8288) (HD.8315) ] >>
+endobj
+11905 0 obj
+<< /Names [ (HD.8316) 9340 0 R (HD.8317) 9341 0 R (HD.8318) 9342 0 R (HD.8319) 9343 0 R (HD.832) 1159 0 R (HD.8320) 9344 0 R (HD.8321) 9345 0 R (HD.8322) 9346 0 R (HD.8323) 9347 0 R (HD.8324) 9348 0 R (HD.8325) 9349 0 R (HD.8326) 9350 0 R (HD.8327) 9351 0 R (HD.8328) 9352 0 R (HD.8329) 9353 0 R (HD.833) 1160 0 R (HD.8330) 9354 0 R (HD.8331) 9355 0 R (HD.8332) 9356 0 R (HD.8333) 9357 0 R (HD.8334) 9358 0 R (HD.8335) 9359 0 R (HD.8336) 9360 0 R (HD.8337) 9361 0 R (HD.8338) 9362 0 R (HD.8339) 9363 0 R (HD.834) 1161 0 R (HD.8340) 9364 0 R (HD.8341) 9365 0 R (HD.8342) 9366 0 R (HD.8343) 9367 0 R (HD.8344) 9368 0 R ] /Limits [ (HD.8316) (HD.8344) ] >>
+endobj
+11906 0 obj
+<< /Names [ (HD.8345) 9369 0 R (HD.8346) 9370 0 R (HD.8347) 9371 0 R (HD.8348) 9372 0 R (HD.8349) 9373 0 R (HD.835) 1162 0 R (HD.8350) 9374 0 R (HD.8351) 9380 0 R (HD.8352) 9381 0 R (HD.8353) 9382 0 R (HD.8354) 9383 0 R (HD.8355) 9384 0 R (HD.8356) 9385 0 R (HD.8357) 9386 0 R (HD.8358) 9387 0 R (HD.8359) 9388 0 R (HD.836) 1163 0 R (HD.8360) 9389 0 R (HD.8361) 9390 0 R (HD.8362) 9391 0 R (HD.8363) 9392 0 R (HD.8364) 9393 0 R (HD.8365) 9394 0 R (HD.8366) 9395 0 R (HD.8367) 9396 0 R (HD.8368) 9397 0 R (HD.8369) 9398 0 R (HD.837) 1164 0 R (HD.8370) 9399 0 R (HD.8371) 9400 0 R (HD.8372) 9401 0 R (HD.8373) 9402 0 R ] /Limits [ (HD.8345) (HD.8373) ] >>
+endobj
+11907 0 obj
+<< /Names [ (HD.8374) 9403 0 R (HD.8375) 9404 0 R (HD.8376) 9405 0 R (HD.8377) 9406 0 R (HD.8378) 9407 0 R (HD.8379) 9408 0 R (HD.838) 1165 0 R (HD.8380) 9409 0 R (HD.8381) 9410 0 R (HD.8382) 9411 0 R (HD.8383) 9412 0 R (HD.8384) 9413 0 R (HD.8385) 9414 0 R (HD.8386) 9415 0 R (HD.8387) 9416 0 R (HD.8388) 9417 0 R (HD.8389) 9418 0 R (HD.839) 1166 0 R (HD.8390) 9419 0 R (HD.8391) 9425 0 R (HD.8392) 9426 0 R (HD.8393) 9427 0 R (HD.8394) 9428 0 R (HD.8395) 9429 0 R (HD.8396) 9430 0 R (HD.8397) 9431 0 R (HD.8398) 9432 0 R (HD.8399) 9433 0 R (HD.84) 283 0 R (HD.840) 1167 0 R (HD.8400) 9434 0 R (HD.8401) 9435 0 R ] /Limits [ (HD.8374) (HD.8401) ] >>
+endobj
+11908 0 obj
+<< /Names [ (HD.8402) 9436 0 R (HD.8403) 9437 0 R (HD.8404) 9438 0 R (HD.8405) 9439 0 R (HD.8406) 9440 0 R (HD.8407) 9441 0 R (HD.8408) 9442 0 R (HD.8409) 9443 0 R (HD.841) 1168 0 R (HD.8410) 9444 0 R (HD.8411) 9445 0 R (HD.8412) 9446 0 R (HD.8413) 9447 0 R (HD.8414) 9448 0 R (HD.8415) 9449 0 R (HD.8416) 9450 0 R (HD.8417) 9451 0 R (HD.8418) 9452 0 R (HD.8419) 9453 0 R (HD.842) 1169 0 R (HD.8420) 9454 0 R (HD.8421) 9455 0 R (HD.8422) 9456 0 R (HD.8423) 9457 0 R (HD.8424) 9458 0 R (HD.8425) 9459 0 R (HD.8426) 9460 0 R (HD.8427) 9461 0 R (HD.8428) 9462 0 R (HD.8429) 9463 0 R (HD.843) 1170 0 R (HD.8430) 9464 0 R ] /Limits [ (HD.8402) (HD.8430) ] >>
+endobj
+11909 0 obj
+<< /Names [ (HD.8431) 9465 0 R (HD.8432) 9466 0 R (HD.8433) 9467 0 R (HD.8434) 9468 0 R (HD.8435) 9469 0 R (HD.8436) 9470 0 R (HD.8437) 9471 0 R (HD.8438) 9472 0 R (HD.8439) 9473 0 R (HD.844) 1171 0 R (HD.8440) 9474 0 R (HD.8441) 9475 0 R (HD.8442) 9476 0 R (HD.8443) 9477 0 R (HD.8444) 9478 0 R (HD.8445) 9483 0 R (HD.8446) 9484 0 R (HD.8447) 9485 0 R (HD.8448) 9486 0 R (HD.8449) 9487 0 R (HD.845) 1172 0 R (HD.8450) 9488 0 R (HD.8451) 9489 0 R (HD.8452) 9490 0 R (HD.8453) 9491 0 R (HD.8454) 9492 0 R (HD.8455) 9493 0 R (HD.8456) 9494 0 R (HD.8457) 9495 0 R (HD.8458) 9496 0 R (HD.8459) 9497 0 R (HD.846) 1173 0 R ] /Limits [ (HD.8431) (HD.846) ] >>
+endobj
+11910 0 obj
+<< /Names [ (HD.8460) 9498 0 R (HD.8461) 9499 0 R (HD.8462) 9500 0 R (HD.8463) 9501 0 R (HD.8464) 9502 0 R (HD.8465) 9503 0 R (HD.8466) 9504 0 R (HD.8467) 9505 0 R (HD.8468) 9506 0 R (HD.8469) 9507 0 R (HD.847) 1174 0 R (HD.8470) 9508 0 R (HD.8471) 9509 0 R (HD.8472) 9510 0 R (HD.8473) 9511 0 R (HD.8474) 9512 0 R (HD.8475) 9513 0 R (HD.8476) 9514 0 R (HD.8477) 9515 0 R (HD.8478) 9516 0 R (HD.8479) 9517 0 R (HD.848) 1175 0 R (HD.8480) 9518 0 R (HD.8481) 9519 0 R (HD.8482) 9520 0 R (HD.8483) 9521 0 R (HD.8484) 9522 0 R (HD.8485) 9523 0 R (HD.8486) 9524 0 R (HD.8487) 9525 0 R (HD.8488) 9526 0 R (HD.8489) 9527 0 R ] /Limits [ (HD.8460) (HD.8489) ] >>
+endobj
+11911 0 obj
+<< /Names [ (HD.849) 1176 0 R (HD.8490) 9528 0 R (HD.8491) 9529 0 R (HD.8492) 9530 0 R (HD.8493) 9531 0 R (HD.8494) 9532 0 R (HD.8495) 9533 0 R (HD.8496) 9534 0 R (HD.8497) 9535 0 R (HD.8498) 9536 0 R (HD.8499) 9537 0 R (HD.85) 284 0 R (HD.850) 1177 0 R (HD.8500) 9542 0 R (HD.8501) 9543 0 R (HD.8502) 9544 0 R (HD.8503) 9545 0 R (HD.8504) 9546 0 R (HD.8505) 9547 0 R (HD.8506) 9548 0 R (HD.8507) 9549 0 R (HD.8508) 9550 0 R (HD.8509) 9551 0 R (HD.851) 1178 0 R (HD.8510) 9552 0 R (HD.8511) 9553 0 R (HD.8512) 9554 0 R (HD.8513) 9555 0 R (HD.8514) 9556 0 R (HD.8515) 9557 0 R (HD.8516) 9558 0 R (HD.8517) 9559 0 R ] /Limits [ (HD.849) (HD.8517) ] >>
+endobj
+11912 0 obj
+<< /Names [ (HD.8518) 9560 0 R (HD.8519) 9561 0 R (HD.852) 1179 0 R (HD.8520) 9562 0 R (HD.8521) 9563 0 R (HD.8522) 9564 0 R (HD.8523) 9565 0 R (HD.8524) 9566 0 R (HD.8525) 9567 0 R (HD.8526) 9568 0 R (HD.8527) 9569 0 R (HD.8528) 9570 0 R (HD.8529) 9571 0 R (HD.853) 1180 0 R (HD.8530) 9572 0 R (HD.8531) 9573 0 R (HD.8532) 9574 0 R (HD.8533) 9575 0 R (HD.8534) 9576 0 R (HD.8535) 9577 0 R (HD.8536) 9578 0 R (HD.8537) 9579 0 R (HD.8538) 9580 0 R (HD.8539) 9581 0 R (HD.854) 1181 0 R (HD.8540) 9582 0 R (HD.8541) 9583 0 R (HD.8542) 9584 0 R (HD.8543) 9585 0 R (HD.8544) 9590 0 R (HD.8545) 9591 0 R (HD.8546) 9592 0 R ] /Limits [ (HD.8518) (HD.8546) ] >>
+endobj
+11913 0 obj
+<< /Names [ (HD.8547) 9593 0 R (HD.8548) 9594 0 R (HD.8549) 9595 0 R (HD.855) 1182 0 R (HD.8550) 9596 0 R (HD.8551) 9597 0 R (HD.8552) 9598 0 R (HD.8553) 9599 0 R (HD.8554) 9600 0 R (HD.8555) 9601 0 R (HD.8556) 9602 0 R (HD.8557) 9603 0 R (HD.8558) 9604 0 R (HD.8559) 9605 0 R (HD.856) 1183 0 R (HD.8560) 9606 0 R (HD.8561) 9607 0 R (HD.8562) 9608 0 R (HD.8563) 9609 0 R (HD.8564) 9610 0 R (HD.8565) 9611 0 R (HD.8566) 9612 0 R (HD.8567) 9613 0 R (HD.8568) 9614 0 R (HD.8569) 9615 0 R (HD.857) 1184 0 R (HD.8570) 9616 0 R (HD.8571) 9617 0 R (HD.8572) 9618 0 R (HD.8573) 9619 0 R (HD.8574) 9620 0 R (HD.8575) 9621 0 R ] /Limits [ (HD.8547) (HD.8575) ] >>
+endobj
+11914 0 obj
+<< /Names [ (HD.8576) 9622 0 R (HD.8577) 9623 0 R (HD.8578) 9624 0 R (HD.8579) 9625 0 R (HD.858) 1185 0 R (HD.8580) 9626 0 R (HD.8581) 9627 0 R (HD.8582) 9628 0 R (HD.8583) 9629 0 R (HD.8584) 9630 0 R (HD.8585) 9631 0 R (HD.8586) 9632 0 R (HD.8587) 9633 0 R (HD.8588) 9634 0 R (HD.8589) 9635 0 R (HD.859) 1186 0 R (HD.8590) 9636 0 R (HD.8591) 9637 0 R (HD.8592) 9638 0 R (HD.8593) 9639 0 R (HD.8594) 9640 0 R (HD.8595) 9641 0 R (HD.8596) 9642 0 R (HD.8597) 9643 0 R (HD.8598) 9644 0 R (HD.8599) 9645 0 R (HD.86) 285 0 R (HD.860) 1187 0 R (HD.8600) 9646 0 R (HD.8601) 9647 0 R (HD.8602) 9648 0 R (HD.8603) 9653 0 R ] /Limits [ (HD.8576) (HD.8603) ] >>
+endobj
+11915 0 obj
+<< /Names [ (HD.8604) 9654 0 R (HD.8605) 9655 0 R (HD.8606) 9656 0 R (HD.8607) 9657 0 R (HD.8608) 9658 0 R (HD.8609) 9659 0 R (HD.861) 1188 0 R (HD.8610) 9660 0 R (HD.8611) 9661 0 R (HD.8612) 9662 0 R (HD.8613) 9663 0 R (HD.8614) 9664 0 R (HD.8615) 9665 0 R (HD.8616) 9666 0 R (HD.8617) 9667 0 R (HD.8618) 9668 0 R (HD.8619) 9669 0 R (HD.862) 1189 0 R (HD.8620) 9670 0 R (HD.8621) 9671 0 R (HD.8622) 9672 0 R (HD.8623) 9673 0 R (HD.8624) 9674 0 R (HD.8625) 9675 0 R (HD.8626) 9676 0 R (HD.8627) 9677 0 R (HD.8628) 9678 0 R (HD.8629) 9679 0 R (HD.863) 1190 0 R (HD.8630) 9680 0 R (HD.8631) 9681 0 R (HD.8632) 9682 0 R ] /Limits [ (HD.8604) (HD.8632) ] >>
+endobj
+11916 0 obj
+<< /Names [ (HD.8633) 9683 0 R (HD.8634) 9684 0 R (HD.8635) 9685 0 R (HD.8636) 9686 0 R (HD.8637) 9687 0 R (HD.8638) 9688 0 R (HD.8639) 9689 0 R (HD.864) 1191 0 R (HD.8640) 9690 0 R (HD.8641) 9691 0 R (HD.8642) 9692 0 R (HD.8643) 9693 0 R (HD.8644) 9694 0 R (HD.8645) 9695 0 R (HD.8646) 9696 0 R (HD.8647) 9697 0 R (HD.8648) 9698 0 R (HD.8649) 9699 0 R (HD.865) 1192 0 R (HD.8650) 9700 0 R (HD.8651) 9701 0 R (HD.8652) 9706 0 R (HD.8653) 9707 0 R (HD.8654) 9708 0 R (HD.8655) 9709 0 R (HD.8656) 9710 0 R (HD.8657) 9711 0 R (HD.8658) 9712 0 R (HD.8659) 9713 0 R (HD.866) 1197 0 R (HD.8660) 9714 0 R (HD.8661) 9715 0 R ] /Limits [ (HD.8633) (HD.8661) ] >>
+endobj
+11917 0 obj
+<< /Names [ (HD.8662) 9716 0 R (HD.8663) 9717 0 R (HD.8664) 9718 0 R (HD.8665) 9719 0 R (HD.8666) 9720 0 R (HD.8667) 9721 0 R (HD.8668) 9722 0 R (HD.8669) 9723 0 R (HD.867) 1198 0 R (HD.8670) 9724 0 R (HD.8671) 9725 0 R (HD.8672) 9726 0 R (HD.8673) 9727 0 R (HD.8674) 9728 0 R (HD.8675) 9729 0 R (HD.8676) 9730 0 R (HD.8677) 9731 0 R (HD.8678) 9732 0 R (HD.8679) 9733 0 R (HD.868) 1199 0 R (HD.8680) 9734 0 R (HD.8681) 9735 0 R (HD.8682) 9736 0 R (HD.8683) 9737 0 R (HD.8684) 9738 0 R (HD.8685) 9739 0 R (HD.8686) 9740 0 R (HD.8687) 9741 0 R (HD.8688) 9742 0 R (HD.8689) 9743 0 R (HD.869) 1200 0 R (HD.8690) 9744 0 R ] /Limits [ (HD.8662) (HD.8690) ] >>
+endobj
+11918 0 obj
+<< /Names [ (HD.8691) 9745 0 R (HD.8692) 9746 0 R (HD.8693) 9747 0 R (HD.8694) 9748 0 R (HD.8695) 9749 0 R (HD.8696) 9750 0 R (HD.8697) 9751 0 R (HD.8698) 9752 0 R (HD.8699) 9753 0 R (HD.87) 286 0 R (HD.870) 1201 0 R (HD.8700) 9754 0 R (HD.8701) 9755 0 R (HD.8702) 9756 0 R (HD.8703) 9761 0 R (HD.8704) 9762 0 R (HD.8705) 9763 0 R (HD.8706) 9764 0 R (HD.8707) 9765 0 R (HD.8708) 9766 0 R (HD.8709) 9767 0 R (HD.871) 1202 0 R (HD.8710) 9768 0 R (HD.8711) 9769 0 R (HD.8712) 9770 0 R (HD.8713) 9771 0 R (HD.8714) 9772 0 R (HD.8715) 9773 0 R (HD.8716) 9774 0 R (HD.8717) 9775 0 R (HD.8718) 9776 0 R (HD.8719) 9777 0 R ] /Limits [ (HD.8691) (HD.8719) ] >>
+endobj
+11919 0 obj
+<< /Names [ (HD.872) 1203 0 R (HD.8720) 9778 0 R (HD.8721) 9779 0 R (HD.8722) 9780 0 R (HD.8723) 9781 0 R (HD.8724) 9782 0 R (HD.8725) 9783 0 R (HD.8726) 9784 0 R (HD.8727) 9785 0 R (HD.8728) 9786 0 R (HD.8729) 9787 0 R (HD.873) 1204 0 R (HD.8730) 9788 0 R (HD.8731) 9789 0 R (HD.8732) 9790 0 R (HD.8733) 9791 0 R (HD.8734) 9792 0 R (HD.8735) 9793 0 R (HD.8736) 9794 0 R (HD.8737) 9795 0 R (HD.8738) 9800 0 R (HD.8739) 9801 0 R (HD.874) 1205 0 R (HD.8740) 9802 0 R (HD.8741) 9803 0 R (HD.8742) 9804 0 R (HD.8743) 9805 0 R (HD.8744) 9806 0 R (HD.8745) 9807 0 R (HD.8746) 9808 0 R (HD.8747) 9809 0 R (HD.8748) 9810 0 R ] /Limits [ (HD.872) (HD.8748) ] >>
+endobj
+11920 0 obj
+<< /Names [ (HD.8749) 9811 0 R (HD.875) 1206 0 R (HD.8750) 9812 0 R (HD.8751) 9813 0 R (HD.8752) 9814 0 R (HD.8753) 9815 0 R (HD.8754) 9816 0 R (HD.8755) 9817 0 R (HD.8756) 9818 0 R (HD.8757) 9819 0 R (HD.8758) 9820 0 R (HD.8759) 9821 0 R (HD.876) 1207 0 R (HD.8760) 9822 0 R (HD.8761) 9823 0 R (HD.8762) 9824 0 R (HD.8763) 9825 0 R (HD.8764) 9826 0 R (HD.8765) 9827 0 R (HD.8766) 9828 0 R (HD.8767) 9829 0 R (HD.8768) 9830 0 R (HD.8769) 9831 0 R (HD.877) 1208 0 R (HD.8770) 9832 0 R (HD.8771) 9833 0 R (HD.8772) 9834 0 R (HD.8773) 9835 0 R (HD.8774) 9836 0 R (HD.8775) 9837 0 R (HD.8776) 9838 0 R (HD.8777) 9839 0 R ] /Limits [ (HD.8749) (HD.8777) ] >>
+endobj
+11921 0 obj
+<< /Names [ (HD.8778) 9840 0 R (HD.8779) 9841 0 R (HD.878) 1209 0 R (HD.8780) 9842 0 R (HD.8781) 9843 0 R (HD.8782) 9844 0 R (HD.8783) 9845 0 R (HD.8784) 9850 0 R (HD.8785) 9851 0 R (HD.8786) 9852 0 R (HD.8787) 9853 0 R (HD.8788) 9854 0 R (HD.8789) 9855 0 R (HD.879) 1210 0 R (HD.8790) 9856 0 R (HD.8791) 9857 0 R (HD.8792) 9858 0 R (HD.8793) 9859 0 R (HD.8794) 9860 0 R (HD.8795) 9861 0 R (HD.8796) 9862 0 R (HD.8797) 9863 0 R (HD.8798) 9864 0 R (HD.8799) 9865 0 R (HD.88) 287 0 R (HD.880) 1211 0 R (HD.8800) 9866 0 R (HD.8801) 9867 0 R (HD.8802) 9868 0 R (HD.8803) 9869 0 R (HD.8804) 9870 0 R (HD.8805) 9871 0 R ] /Limits [ (HD.8778) (HD.8805) ] >>
+endobj
+11922 0 obj
+<< /Names [ (HD.8806) 9872 0 R (HD.8807) 9873 0 R (HD.8808) 9874 0 R (HD.8809) 9875 0 R (HD.881) 1212 0 R (HD.8810) 9876 0 R (HD.8811) 9877 0 R (HD.8812) 9878 0 R (HD.8813) 9879 0 R (HD.8814) 9880 0 R (HD.8815) 9881 0 R (HD.8816) 9882 0 R (HD.8817) 9883 0 R (HD.8818) 9884 0 R (HD.8819) 9885 0 R (HD.882) 1213 0 R (HD.8820) 9886 0 R (HD.8821) 9887 0 R (HD.8822) 9888 0 R (HD.8823) 9889 0 R (HD.8824) 9890 0 R (HD.8825) 9891 0 R (HD.8826) 9892 0 R (HD.8827) 9893 0 R (HD.8828) 9894 0 R (HD.8829) 9895 0 R (HD.883) 1214 0 R (HD.8830) 9896 0 R (HD.8831) 9897 0 R (HD.8832) 9898 0 R (HD.8833) 9903 0 R (HD.8834) 9904 0 R ] /Limits [ (HD.8806) (HD.8834) ] >>
+endobj
+11923 0 obj
+<< /Names [ (HD.8835) 9905 0 R (HD.8836) 9906 0 R (HD.8837) 9907 0 R (HD.8838) 9908 0 R (HD.8839) 9909 0 R (HD.884) 1215 0 R (HD.8840) 9910 0 R (HD.8841) 9911 0 R (HD.8842) 9912 0 R (HD.8843) 9913 0 R (HD.8844) 9914 0 R (HD.8845) 9915 0 R (HD.8846) 9916 0 R (HD.8847) 9917 0 R (HD.8848) 9918 0 R (HD.8849) 9919 0 R (HD.885) 1216 0 R (HD.8850) 9920 0 R (HD.8851) 9921 0 R (HD.8852) 9922 0 R (HD.8853) 9923 0 R (HD.8854) 9924 0 R (HD.8855) 9925 0 R (HD.8856) 9926 0 R (HD.8857) 9927 0 R (HD.8858) 9928 0 R (HD.8859) 9929 0 R (HD.886) 1217 0 R (HD.8860) 9930 0 R (HD.8861) 9931 0 R (HD.8862) 9932 0 R (HD.8863) 9933 0 R ] /Limits [ (HD.8835) (HD.8863) ] >>
+endobj
+11924 0 obj
+<< /Names [ (HD.8864) 9934 0 R (HD.8865) 9935 0 R (HD.8866) 9936 0 R (HD.8867) 9937 0 R (HD.8868) 9938 0 R (HD.8869) 9939 0 R (HD.887) 1218 0 R (HD.8870) 9940 0 R (HD.8871) 9941 0 R (HD.8872) 9942 0 R (HD.8873) 9943 0 R (HD.8874) 9944 0 R (HD.8875) 9945 0 R (HD.8876) 9946 0 R (HD.8877) 9947 0 R (HD.8878) 9948 0 R (HD.8879) 9949 0 R (HD.888) 1219 0 R (HD.8880) 9950 0 R (HD.8881) 9951 0 R (HD.8882) 9952 0 R (HD.8883) 9953 0 R (HD.8884) 9954 0 R (HD.8885) 9955 0 R (HD.8886) 9956 0 R (HD.8887) 9957 0 R (HD.8888) 9958 0 R (HD.8889) 9959 0 R (HD.889) 1220 0 R (HD.8890) 9960 0 R (HD.8891) 9966 0 R (HD.8892) 9967 0 R ] /Limits [ (HD.8864) (HD.8892) ] >>
+endobj
+11925 0 obj
+<< /Names [ (HD.8893) 9968 0 R (HD.8894) 9969 0 R (HD.8895) 9970 0 R (HD.8896) 9971 0 R (HD.8897) 9972 0 R (HD.8898) 9973 0 R (HD.8899) 9974 0 R (HD.89) 288 0 R (HD.890) 1221 0 R (HD.8900) 9975 0 R (HD.8901) 9976 0 R (HD.8902) 9977 0 R (HD.8903) 9978 0 R (HD.8904) 9979 0 R (HD.8905) 9980 0 R (HD.8906) 9981 0 R (HD.8907) 9982 0 R (HD.8908) 9983 0 R (HD.8909) 9984 0 R (HD.891) 1222 0 R (HD.8910) 9985 0 R (HD.8911) 9986 0 R (HD.8912) 9987 0 R (HD.8913) 9988 0 R (HD.8914) 9989 0 R (HD.8915) 9990 0 R (HD.8916) 9991 0 R (HD.8917) 9992 0 R (HD.8918) 9993 0 R (HD.8919) 9994 0 R (HD.892) 1223 0 R (HD.8920) 9995 0 R ] /Limits [ (HD.8893) (HD.8920) ] >>
+endobj
+11926 0 obj
+<< /Names [ (HD.8921) 9996 0 R (HD.8922) 9997 0 R (HD.8923) 9998 0 R (HD.8924) 9999 0 R (HD.8925) 10000 0 R (HD.8926) 10001 0 R (HD.8927) 10002 0 R (HD.8928) 10003 0 R (HD.8929) 10004 0 R (HD.893) 1224 0 R (HD.8930) 10005 0 R (HD.8931) 10006 0 R (HD.8932) 10007 0 R (HD.8933) 10008 0 R (HD.8934) 10009 0 R (HD.8935) 10010 0 R (HD.8936) 10011 0 R (HD.8937) 10012 0 R (HD.8938) 10013 0 R (HD.8939) 10014 0 R (HD.894) 1225 0 R (HD.8940) 10015 0 R (HD.8941) 10016 0 R (HD.8942) 10017 0 R (HD.8943) 10018 0 R (HD.8944) 10019 0 R (HD.8945) 10020 0 R (HD.8946) 10021 0 R (HD.8947) 10022 0 R (HD.8948) 10023 0 R (HD.8949) 10024 0 R (HD.895) 1226 0 R ] /Limits [ (HD.8921) (HD.895) ] >>
+endobj
+11927 0 obj
+<< /Names [ (HD.8950) 10029 0 R (HD.8951) 10030 0 R (HD.8952) 10031 0 R (HD.8953) 10032 0 R (HD.8954) 10033 0 R (HD.8955) 10034 0 R (HD.8956) 10035 0 R (HD.8957) 10036 0 R (HD.8958) 10037 0 R (HD.8959) 10038 0 R (HD.896) 1227 0 R (HD.8960) 10039 0 R (HD.8961) 10040 0 R (HD.8962) 10041 0 R (HD.8963) 10042 0 R (HD.8964) 10043 0 R (HD.8965) 10044 0 R (HD.8966) 10045 0 R (HD.8967) 10046 0 R (HD.8968) 10047 0 R (HD.8969) 10048 0 R (HD.897) 1228 0 R (HD.8970) 10049 0 R (HD.8971) 10050 0 R (HD.8972) 10051 0 R (HD.8973) 10052 0 R (HD.8974) 10053 0 R (HD.8975) 10054 0 R (HD.8976) 10055 0 R (HD.8977) 10056 0 R (HD.8978) 10057 0 R (HD.8979) 10058 0 R ] /Limits [ (HD.8950) (HD.8979) ] >>
+endobj
+11928 0 obj
+<< /Names [ (HD.898) 1229 0 R (HD.8980) 10059 0 R (HD.8981) 10060 0 R (HD.8982) 10061 0 R (HD.8983) 10062 0 R (HD.8984) 10063 0 R (HD.8985) 10064 0 R (HD.8986) 10065 0 R (HD.8987) 10066 0 R (HD.8988) 10067 0 R (HD.8989) 10068 0 R (HD.899) 1230 0 R (HD.8990) 10069 0 R (HD.8991) 10070 0 R (HD.8992) 10071 0 R (HD.8993) 10072 0 R (HD.8994) 10073 0 R (HD.8995) 10074 0 R (HD.8996) 10075 0 R (HD.8997) 10076 0 R (HD.8998) 10077 0 R (HD.8999) 10078 0 R (HD.9) 197 0 R (HD.90) 289 0 R (HD.900) 1231 0 R (HD.9000) 10079 0 R (HD.9001) 10080 0 R (HD.9002) 10081 0 R (HD.9003) 10082 0 R (HD.9004) 10083 0 R (HD.9005) 10084 0 R (HD.9006) 10089 0 R ] /Limits [ (HD.898) (HD.9006) ] >>
+endobj
+11929 0 obj
+<< /Names [ (HD.9007) 10090 0 R (HD.9008) 10091 0 R (HD.9009) 10092 0 R (HD.901) 1232 0 R (HD.9010) 10093 0 R (HD.9011) 10094 0 R (HD.9012) 10095 0 R (HD.9013) 10096 0 R (HD.9014) 10097 0 R (HD.9015) 10098 0 R (HD.9016) 10099 0 R (HD.9017) 10100 0 R (HD.9018) 10101 0 R (HD.9019) 10102 0 R (HD.902) 1233 0 R (HD.9020) 10103 0 R (HD.9021) 10104 0 R (HD.9022) 10105 0 R (HD.9023) 10106 0 R (HD.9024) 10107 0 R (HD.9025) 10108 0 R (HD.9026) 10109 0 R (HD.9027) 10110 0 R (HD.9028) 10111 0 R (HD.9029) 10112 0 R (HD.903) 1234 0 R (HD.9030) 10113 0 R (HD.9031) 10114 0 R (HD.9032) 10115 0 R (HD.9033) 10116 0 R (HD.9034) 10117 0 R (HD.9035) 10118 0 R ] /Limits [ (HD.9007) (HD.9035) ] >>
+endobj
+11930 0 obj
+<< /Names [ (HD.9036) 10119 0 R (HD.9037) 10120 0 R (HD.9038) 10121 0 R (HD.9039) 10122 0 R (HD.904) 1235 0 R (HD.9040) 10123 0 R (HD.9041) 10124 0 R (HD.9042) 10125 0 R (HD.9043) 10126 0 R (HD.9044) 10127 0 R (HD.9045) 10128 0 R (HD.9046) 10129 0 R (HD.9047) 10130 0 R (HD.9048) 10131 0 R (HD.9049) 10132 0 R (HD.905) 1236 0 R (HD.9050) 10133 0 R (HD.9051) 10134 0 R (HD.9052) 10135 0 R (HD.9053) 10136 0 R (HD.9054) 10137 0 R (HD.9055) 10138 0 R (HD.9056) 10139 0 R (HD.9057) 10140 0 R (HD.9058) 10141 0 R (HD.9059) 10142 0 R (HD.906) 1237 0 R (HD.9060) 10143 0 R (HD.9061) 10144 0 R (HD.9062) 10145 0 R (HD.9063) 10146 0 R (HD.9064) 10147 0 R ] /Limits [ (HD.9036) (HD.9064) ] >>
+endobj
+11931 0 obj
+<< /Names [ (HD.9065) 10148 0 R (HD.9066) 10149 0 R (HD.9067) 10154 0 R (HD.9068) 10155 0 R (HD.9069) 10156 0 R (HD.907) 1238 0 R (HD.9070) 10157 0 R (HD.9071) 10158 0 R (HD.9072) 10159 0 R (HD.9073) 10160 0 R (HD.9074) 10161 0 R (HD.9075) 10162 0 R (HD.9076) 10163 0 R (HD.9077) 10164 0 R (HD.9078) 10165 0 R (HD.9079) 10166 0 R (HD.908) 1239 0 R (HD.9080) 10167 0 R (HD.9081) 10168 0 R (HD.9082) 10169 0 R (HD.9083) 10170 0 R (HD.9084) 10171 0 R (HD.9085) 10172 0 R (HD.9086) 10173 0 R (HD.9087) 10174 0 R (HD.9088) 10175 0 R (HD.9089) 10176 0 R (HD.909) 1240 0 R (HD.9090) 10177 0 R (HD.9091) 10178 0 R (HD.9092) 10179 0 R (HD.9093) 10180 0 R ] /Limits [ (HD.9065) (HD.9093) ] >>
+endobj
+11932 0 obj
+<< /Names [ (HD.9094) 10181 0 R (HD.9095) 10182 0 R (HD.9096) 10183 0 R (HD.9097) 10184 0 R (HD.9098) 10185 0 R (HD.9099) 10186 0 R (HD.91) 290 0 R (HD.910) 1241 0 R (HD.9100) 10187 0 R (HD.9101) 10188 0 R (HD.9102) 10189 0 R (HD.9103) 10190 0 R (HD.9104) 10191 0 R (HD.9105) 10192 0 R (HD.9106) 10193 0 R (HD.9107) 10194 0 R (HD.9108) 10195 0 R (HD.9109) 10196 0 R (HD.911) 1242 0 R (HD.9110) 10197 0 R (HD.9111) 10198 0 R (HD.9112) 10199 0 R (HD.9113) 10200 0 R (HD.9114) 10201 0 R (HD.9115) 10202 0 R (HD.9116) 10203 0 R (HD.9117) 10204 0 R (HD.9118) 10205 0 R (HD.9119) 10206 0 R (HD.912) 1243 0 R (HD.9120) 10207 0 R (HD.9121) 10208 0 R ] /Limits [ (HD.9094) (HD.9121) ] >>
+endobj
+11933 0 obj
+<< /Names [ (HD.9122) 10209 0 R (HD.9123) 10210 0 R (HD.9124) 10211 0 R (HD.9125) 10212 0 R (HD.9126) 10217 0 R (HD.9127) 10218 0 R (HD.9128) 10219 0 R (HD.9129) 10220 0 R (HD.913) 1244 0 R (HD.9130) 10221 0 R (HD.9131) 10222 0 R (HD.9132) 10223 0 R (HD.9133) 10224 0 R (HD.9134) 10225 0 R (HD.9135) 10226 0 R (HD.9136) 10227 0 R (HD.9137) 10228 0 R (HD.9138) 10229 0 R (HD.9139) 10230 0 R (HD.914) 1245 0 R (HD.9140) 10231 0 R (HD.9141) 10232 0 R (HD.9142) 10233 0 R (HD.9143) 10234 0 R (HD.9144) 10235 0 R (HD.9145) 10236 0 R (HD.9146) 10237 0 R (HD.9147) 10238 0 R (HD.9148) 10239 0 R (HD.9149) 10240 0 R (HD.915) 1246 0 R (HD.9150) 10241 0 R ] /Limits [ (HD.9122) (HD.9150) ] >>
+endobj
+11934 0 obj
+<< /Names [ (HD.9151) 10242 0 R (HD.9152) 10243 0 R (HD.9153) 10244 0 R (HD.9154) 10245 0 R (HD.9155) 10246 0 R (HD.9156) 10247 0 R (HD.9157) 10248 0 R (HD.9158) 10249 0 R (HD.9159) 10250 0 R (HD.916) 1247 0 R (HD.9160) 10251 0 R (HD.9161) 10252 0 R (HD.9162) 10253 0 R (HD.9163) 10254 0 R (HD.9164) 10255 0 R (HD.9165) 10256 0 R (HD.9166) 10257 0 R (HD.9167) 10258 0 R (HD.9168) 10259 0 R (HD.9169) 10260 0 R (HD.917) 1248 0 R (HD.9170) 10261 0 R (HD.9171) 10262 0 R (HD.9172) 10263 0 R (HD.9173) 10264 0 R (HD.9174) 10265 0 R (HD.9175) 10266 0 R (HD.9176) 10267 0 R (HD.9177) 10268 0 R (HD.9178) 10269 0 R (HD.9179) 10270 0 R (HD.918) 1249 0 R ] /Limits [ (HD.9151) (HD.918) ] >>
+endobj
+11935 0 obj
+<< /Names [ (HD.9180) 10271 0 R (HD.9181) 10272 0 R (HD.9182) 10273 0 R (HD.9183) 10274 0 R (HD.9184) 10275 0 R (HD.9185) 10276 0 R (HD.9186) 10277 0 R (HD.9187) 10278 0 R (HD.9188) 10279 0 R (HD.9189) 10284 0 R (HD.919) 1250 0 R (HD.9190) 10285 0 R (HD.9191) 10286 0 R (HD.9192) 10287 0 R (HD.9193) 10288 0 R (HD.9194) 10289 0 R (HD.9195) 10290 0 R (HD.9196) 10291 0 R (HD.9197) 10292 0 R (HD.9198) 10293 0 R (HD.9199) 10294 0 R (HD.92) 291 0 R (HD.920) 1251 0 R (HD.9200) 10295 0 R (HD.9201) 10296 0 R (HD.9202) 10297 0 R (HD.9203) 10298 0 R (HD.9204) 10299 0 R (HD.9205) 10300 0 R (HD.9206) 10301 0 R (HD.9207) 10302 0 R (HD.9208) 10303 0 R ] /Limits [ (HD.9180) (HD.9208) ] >>
+endobj
+11936 0 obj
+<< /Names [ (HD.9209) 10304 0 R (HD.921) 1252 0 R (HD.9210) 10305 0 R (HD.9211) 10306 0 R (HD.9212) 10307 0 R (HD.9213) 10308 0 R (HD.9214) 10309 0 R (HD.9215) 10310 0 R (HD.9216) 10311 0 R (HD.9217) 10312 0 R (HD.9218) 10313 0 R (HD.9219) 10314 0 R (HD.922) 1253 0 R (HD.9220) 10315 0 R (HD.9221) 10316 0 R (HD.9222) 10317 0 R (HD.9223) 10318 0 R (HD.9224) 10319 0 R (HD.9225) 10320 0 R (HD.9226) 10321 0 R (HD.9227) 10322 0 R (HD.9228) 10323 0 R (HD.9229) 10324 0 R (HD.923) 1254 0 R (HD.9230) 10325 0 R (HD.9231) 10326 0 R (HD.9232) 10327 0 R (HD.9233) 10328 0 R (HD.9234) 10329 0 R (HD.9235) 10330 0 R (HD.9236) 10331 0 R (HD.9237) 10336 0 R ] /Limits [ (HD.9209) (HD.9237) ] >>
+endobj
+11937 0 obj
+<< /Names [ (HD.9238) 10337 0 R (HD.9239) 10338 0 R (HD.924) 1259 0 R (HD.9240) 10339 0 R (HD.9241) 10340 0 R (HD.9242) 10341 0 R (HD.9243) 10342 0 R (HD.9244) 10343 0 R (HD.9245) 10344 0 R (HD.9246) 10345 0 R (HD.9247) 10346 0 R (HD.9248) 10347 0 R (HD.9249) 10348 0 R (HD.925) 1260 0 R (HD.9250) 10349 0 R (HD.9251) 10350 0 R (HD.9252) 10351 0 R (HD.9253) 10352 0 R (HD.9254) 10353 0 R (HD.9255) 10354 0 R (HD.9256) 10355 0 R (HD.9257) 10356 0 R (HD.9258) 10357 0 R (HD.9259) 10358 0 R (HD.926) 1261 0 R (HD.9260) 10359 0 R (HD.9261) 10360 0 R (HD.9262) 10361 0 R (HD.9263) 10362 0 R (HD.9264) 10363 0 R (HD.9265) 10364 0 R (HD.9266) 10365 0 R ] /Limits [ (HD.9238) (HD.9266) ] >>
+endobj
+11938 0 obj
+<< /Names [ (HD.9267) 10366 0 R (HD.9268) 10367 0 R (HD.9269) 10368 0 R (HD.927) 1262 0 R (HD.9270) 10369 0 R (HD.9271) 10370 0 R (HD.9272) 10371 0 R (HD.9273) 10372 0 R (HD.9274) 10373 0 R (HD.9275) 10374 0 R (HD.9276) 10375 0 R (HD.9277) 10376 0 R (HD.9278) 10377 0 R (HD.9279) 10378 0 R (HD.928) 1263 0 R (HD.9280) 10379 0 R (HD.9281) 10380 0 R (HD.9282) 10381 0 R (HD.9283) 10382 0 R (HD.9284) 10383 0 R (HD.9285) 10384 0 R (HD.9286) 10385 0 R (HD.9287) 10386 0 R (HD.9288) 10387 0 R (HD.9289) 10388 0 R (HD.929) 1264 0 R (HD.9290) 10389 0 R (HD.9291) 10390 0 R (HD.9292) 10391 0 R (HD.9293) 10396 0 R (HD.9294) 10397 0 R (HD.9295) 10398 0 R ] /Limits [ (HD.9267) (HD.9295) ] >>
+endobj
+11939 0 obj
+<< /Names [ (HD.9296) 10399 0 R (HD.9297) 10400 0 R (HD.9298) 10401 0 R (HD.9299) 10402 0 R (HD.93) 292 0 R (HD.930) 1265 0 R (HD.9300) 10403 0 R (HD.9301) 10404 0 R (HD.9302) 10405 0 R (HD.9303) 10406 0 R (HD.9304) 10407 0 R (HD.9305) 10408 0 R (HD.9306) 10409 0 R (HD.9307) 10410 0 R (HD.9308) 10411 0 R (HD.9309) 10412 0 R (HD.931) 1266 0 R (HD.9310) 10413 0 R (HD.9311) 10414 0 R (HD.9312) 10415 0 R (HD.9313) 10416 0 R (HD.9314) 10417 0 R (HD.9315) 10418 0 R (HD.9316) 10419 0 R (HD.9317) 10420 0 R (HD.9318) 10421 0 R (HD.9319) 10422 0 R (HD.932) 1267 0 R (HD.9320) 10423 0 R (HD.9321) 10424 0 R (HD.9322) 10425 0 R (HD.9323) 10426 0 R ] /Limits [ (HD.9296) (HD.9323) ] >>
+endobj
+11940 0 obj
+<< /Names [ (HD.9324) 10427 0 R (HD.9325) 10428 0 R (HD.9326) 10429 0 R (HD.9327) 10430 0 R (HD.9328) 10431 0 R (HD.9329) 10436 0 R (HD.933) 1268 0 R (HD.9330) 10437 0 R (HD.9331) 10438 0 R (HD.9332) 10439 0 R (HD.9333) 10440 0 R (HD.9334) 10441 0 R (HD.9335) 10442 0 R (HD.9336) 10443 0 R (HD.9337) 10444 0 R (HD.9338) 10445 0 R (HD.9339) 10446 0 R (HD.934) 1269 0 R (HD.9340) 10447 0 R (HD.9341) 10448 0 R (HD.9342) 10449 0 R (HD.9343) 10450 0 R (HD.9344) 10451 0 R (HD.9345) 10452 0 R (HD.9346) 10453 0 R (HD.9347) 10454 0 R (HD.9348) 10455 0 R (HD.9349) 10456 0 R (HD.935) 1270 0 R (HD.9350) 10457 0 R (HD.9351) 10458 0 R (HD.9352) 10459 0 R ] /Limits [ (HD.9324) (HD.9352) ] >>
+endobj
+11941 0 obj
+<< /Names [ (HD.9353) 10460 0 R (HD.9354) 10461 0 R (HD.9355) 10462 0 R (HD.9356) 10463 0 R (HD.9357) 10464 0 R (HD.9358) 10465 0 R (HD.9359) 10466 0 R (HD.936) 1271 0 R (HD.9360) 10467 0 R (HD.9361) 10468 0 R (HD.9362) 10469 0 R (HD.9363) 10470 0 R (HD.9364) 10471 0 R (HD.9365) 10472 0 R (HD.9366) 10473 0 R (HD.9367) 10474 0 R (HD.9368) 10475 0 R (HD.9369) 10476 0 R (HD.937) 1272 0 R (HD.9370) 10477 0 R (HD.9371) 10478 0 R (HD.9372) 10479 0 R (HD.9373) 10480 0 R (HD.9374) 10481 0 R (HD.9375) 10482 0 R (HD.9376) 10483 0 R (HD.9377) 10484 0 R (HD.9378) 10485 0 R (HD.9379) 10486 0 R (HD.938) 1273 0 R (HD.9380) 10487 0 R (HD.9381) 10488 0 R ] /Limits [ (HD.9353) (HD.9381) ] >>
+endobj
+11942 0 obj
+<< /Names [ (HD.9382) 10489 0 R (HD.9383) 10490 0 R (HD.9384) 10491 0 R (HD.9385) 10492 0 R (HD.9386) 10493 0 R (HD.9387) 10498 0 R (HD.9388) 10499 0 R (HD.9389) 10500 0 R (HD.939) 1274 0 R (HD.9390) 10501 0 R (HD.9391) 10502 0 R (HD.9392) 10503 0 R (HD.9393) 10504 0 R (HD.9394) 10505 0 R (HD.9395) 10506 0 R (HD.9396) 10507 0 R (HD.9397) 10508 0 R (HD.9398) 10509 0 R (HD.9399) 10510 0 R (HD.94) 293 0 R (HD.940) 1275 0 R (HD.9400) 10511 0 R (HD.9401) 10512 0 R (HD.9402) 10513 0 R (HD.9403) 10514 0 R (HD.9404) 10515 0 R (HD.9405) 10516 0 R (HD.9406) 10517 0 R (HD.9407) 10518 0 R (HD.9408) 10519 0 R (HD.9409) 10520 0 R (HD.941) 1276 0 R ] /Limits [ (HD.9382) (HD.941) ] >>
+endobj
+11943 0 obj
+<< /Names [ (HD.9410) 10521 0 R (HD.9411) 10522 0 R (HD.9412) 10523 0 R (HD.9413) 10524 0 R (HD.9414) 10525 0 R (HD.9415) 10526 0 R (HD.9416) 10527 0 R (HD.9417) 10528 0 R (HD.9418) 10529 0 R (HD.9419) 10530 0 R (HD.942) 1277 0 R (HD.9420) 10531 0 R (HD.9421) 10532 0 R (HD.9422) 10533 0 R (HD.9423) 10534 0 R (HD.9424) 10535 0 R (HD.9425) 10536 0 R (HD.9426) 10537 0 R (HD.9427) 10538 0 R (HD.9428) 10539 0 R (HD.9429) 10540 0 R (HD.943) 1278 0 R (HD.9430) 10541 0 R (HD.9431) 10542 0 R (HD.9432) 10543 0 R (HD.9433) 10544 0 R (HD.9434) 10545 0 R (HD.9435) 10546 0 R (HD.9436) 10547 0 R (HD.9437) 10548 0 R (HD.9438) 10549 0 R (HD.9439) 10550 0 R ] /Limits [ (HD.9410) (HD.9439) ] >>
+endobj
+11944 0 obj
+<< /Names [ (HD.944) 1279 0 R (HD.9440) 10551 0 R (HD.9441) 10552 0 R (HD.9442) 10553 0 R (HD.9443) 10554 0 R (HD.9444) 10555 0 R (HD.9445) 10556 0 R (HD.9446) 10562 0 R (HD.9447) 10563 0 R (HD.9448) 10564 0 R (HD.9449) 10565 0 R (HD.945) 1280 0 R (HD.9450) 10566 0 R (HD.9451) 10567 0 R (HD.9452) 10568 0 R (HD.9453) 10569 0 R (HD.9454) 10570 0 R (HD.9455) 10571 0 R (HD.9456) 10572 0 R (HD.9457) 10573 0 R (HD.9458) 10574 0 R (HD.9459) 10575 0 R (HD.946) 1281 0 R (HD.9460) 10576 0 R (HD.9461) 10577 0 R (HD.9462) 10578 0 R (HD.9463) 10579 0 R (HD.9464) 10580 0 R (HD.9465) 10581 0 R (HD.9466) 10582 0 R (HD.9467) 10583 0 R (HD.9468) 10584 0 R ] /Limits [ (HD.944) (HD.9468) ] >>
+endobj
+11945 0 obj
+<< /Names [ (HD.9469) 10585 0 R (HD.947) 1282 0 R (HD.9470) 10586 0 R (HD.9471) 10587 0 R (HD.9472) 10588 0 R (HD.9473) 10589 0 R (HD.9474) 10590 0 R (HD.9475) 10591 0 R (HD.9476) 10592 0 R (HD.9477) 10593 0 R (HD.9478) 10594 0 R (HD.9479) 10595 0 R (HD.948) 1283 0 R (HD.9480) 10596 0 R (HD.9481) 10597 0 R (HD.9482) 10598 0 R (HD.9483) 10599 0 R (HD.9484) 10600 0 R (HD.9485) 10601 0 R (HD.9486) 10602 0 R (HD.9487) 10603 0 R (HD.9488) 10604 0 R (HD.9489) 10605 0 R (HD.949) 1284 0 R (HD.9490) 10606 0 R (HD.9491) 10607 0 R (HD.9492) 10608 0 R (HD.9493) 10609 0 R (HD.9494) 10610 0 R (HD.9495) 10611 0 R (HD.9496) 10612 0 R (HD.9497) 10613 0 R ] /Limits [ (HD.9469) (HD.9497) ] >>
+endobj
+11946 0 obj
+<< /Names [ (HD.9498) 10614 0 R (HD.9499) 10615 0 R (HD.95) 294 0 R (HD.950) 1285 0 R (HD.9500) 10616 0 R (HD.9501) 10617 0 R (HD.9502) 10618 0 R (HD.9503) 10619 0 R (HD.9504) 10620 0 R (HD.9505) 10621 0 R (HD.9506) 10626 0 R (HD.9507) 10627 0 R (HD.9508) 10628 0 R (HD.9509) 10629 0 R (HD.951) 1286 0 R (HD.9510) 10630 0 R (HD.9511) 10631 0 R (HD.9512) 10632 0 R (HD.9513) 10633 0 R (HD.9514) 10634 0 R (HD.9515) 10635 0 R (HD.9516) 10636 0 R (HD.9517) 10637 0 R (HD.9518) 10638 0 R (HD.9519) 10639 0 R (HD.952) 1287 0 R (HD.9520) 10640 0 R (HD.9521) 10641 0 R (HD.9522) 10642 0 R (HD.9523) 10643 0 R (HD.9524) 10644 0 R (HD.9525) 10645 0 R ] /Limits [ (HD.9498) (HD.9525) ] >>
+endobj
+11947 0 obj
+<< /Names [ (HD.9526) 10646 0 R (HD.9527) 10647 0 R (HD.9528) 10648 0 R (HD.9529) 10649 0 R (HD.953) 1288 0 R (HD.9530) 10650 0 R (HD.9531) 10651 0 R (HD.9532) 10652 0 R (HD.9533) 10653 0 R (HD.9534) 10654 0 R (HD.9535) 10655 0 R (HD.9536) 10656 0 R (HD.9537) 10657 0 R (HD.9538) 10658 0 R (HD.9539) 10659 0 R (HD.954) 1289 0 R (HD.9540) 10660 0 R (HD.9541) 10661 0 R (HD.9542) 10662 0 R (HD.9543) 10663 0 R (HD.9544) 10664 0 R (HD.9545) 10665 0 R (HD.9546) 10666 0 R (HD.9547) 10667 0 R (HD.9548) 10668 0 R (HD.9549) 10669 0 R (HD.955) 1290 0 R (HD.9550) 10670 0 R (HD.9551) 10671 0 R (HD.9552) 10672 0 R (HD.9553) 10673 0 R (HD.9554) 10674 0 R ] /Limits [ (HD.9526) (HD.9554) ] >>
+endobj
+11948 0 obj
+<< /Names [ (HD.9555) 10675 0 R (HD.9556) 10676 0 R (HD.9557) 10677 0 R (HD.9558) 10678 0 R (HD.9559) 10679 0 R (HD.956) 1291 0 R (HD.9560) 10680 0 R (HD.9561) 10681 0 R (HD.9562) 10682 0 R (HD.9563) 10683 0 R (HD.9564) 10684 0 R (HD.9565) 10685 0 R (HD.9566) 10686 0 R (HD.9567) 10691 0 R (HD.9568) 10692 0 R (HD.9569) 10693 0 R (HD.957) 1292 0 R (HD.9570) 10694 0 R (HD.9571) 10695 0 R (HD.9572) 10696 0 R (HD.9573) 10697 0 R (HD.9574) 10698 0 R (HD.9575) 10699 0 R (HD.9576) 10700 0 R (HD.9577) 10701 0 R (HD.9578) 10702 0 R (HD.9579) 10703 0 R (HD.958) 1293 0 R (HD.9580) 10704 0 R (HD.9581) 10705 0 R (HD.9582) 10706 0 R (HD.9583) 10707 0 R ] /Limits [ (HD.9555) (HD.9583) ] >>
+endobj
+11949 0 obj
+<< /Names [ (HD.9584) 10708 0 R (HD.9585) 10709 0 R (HD.9586) 10710 0 R (HD.9587) 10711 0 R (HD.9588) 10712 0 R (HD.9589) 10713 0 R (HD.959) 1294 0 R (HD.9590) 10714 0 R (HD.9591) 10715 0 R (HD.9592) 10716 0 R (HD.9593) 10717 0 R (HD.9594) 10718 0 R (HD.9595) 10719 0 R (HD.9596) 10720 0 R (HD.9597) 10721 0 R (HD.9598) 10722 0 R (HD.9599) 10723 0 R (HD.96) 295 0 R (HD.960) 1295 0 R (HD.9600) 10724 0 R (HD.9601) 10725 0 R (HD.9602) 10726 0 R (HD.9603) 10727 0 R (HD.9604) 10728 0 R (HD.9605) 10729 0 R (HD.9606) 10730 0 R (HD.9607) 10731 0 R (HD.9608) 10732 0 R (HD.9609) 10733 0 R (HD.961) 1296 0 R (HD.9610) 10734 0 R (HD.9611) 10735 0 R ] /Limits [ (HD.9584) (HD.9611) ] >>
+endobj
+11950 0 obj
+<< /Names [ (HD.9612) 10736 0 R (HD.9613) 10737 0 R (HD.9614) 10738 0 R (HD.9615) 10739 0 R (HD.9616) 10740 0 R (HD.9617) 10741 0 R (HD.9618) 10742 0 R (HD.9619) 10743 0 R (HD.962) 1297 0 R (HD.9620) 10744 0 R (HD.9621) 10745 0 R (HD.9622) 10746 0 R (HD.9623) 10747 0 R (HD.9624) 10748 0 R (HD.9625) 10749 0 R (HD.9626) 10750 0 R (HD.9627) 10755 0 R (HD.9628) 10756 0 R (HD.9629) 10757 0 R (HD.963) 1298 0 R (HD.9630) 10758 0 R (HD.9631) 10759 0 R (HD.9632) 10760 0 R (HD.9633) 10761 0 R (HD.9634) 10762 0 R (HD.9635) 10763 0 R (HD.9636) 10764 0 R (HD.9637) 10765 0 R (HD.9638) 10766 0 R (HD.9639) 10767 0 R (HD.964) 1299 0 R (HD.9640) 10768 0 R ] /Limits [ (HD.9612) (HD.9640) ] >>
+endobj
+11951 0 obj
+<< /Names [ (HD.9641) 10769 0 R (HD.9642) 10770 0 R (HD.9643) 10771 0 R (HD.9644) 10772 0 R (HD.9645) 10773 0 R (HD.9646) 10774 0 R (HD.9647) 10775 0 R (HD.9648) 10776 0 R (HD.9649) 10777 0 R (HD.965) 1300 0 R (HD.9650) 10778 0 R (HD.9651) 10779 0 R (HD.9652) 10780 0 R (HD.9653) 10781 0 R (HD.9654) 10782 0 R (HD.9655) 10783 0 R (HD.9656) 10784 0 R (HD.9657) 10785 0 R (HD.9658) 10786 0 R (HD.9659) 10787 0 R (HD.966) 1301 0 R (HD.9660) 10788 0 R (HD.9661) 10789 0 R (HD.9662) 10790 0 R (HD.9663) 10791 0 R (HD.9664) 10792 0 R (HD.9665) 10793 0 R (HD.9666) 10794 0 R (HD.9667) 10795 0 R (HD.9668) 10796 0 R (HD.9669) 10797 0 R (HD.967) 1302 0 R ] /Limits [ (HD.9641) (HD.967) ] >>
+endobj
+11952 0 obj
+<< /Names [ (HD.9670) 10798 0 R (HD.9671) 10799 0 R (HD.9672) 10800 0 R (HD.9673) 10801 0 R (HD.9674) 10802 0 R (HD.9675) 10803 0 R (HD.9676) 10804 0 R (HD.9677) 10805 0 R (HD.9678) 10806 0 R (HD.9679) 10807 0 R (HD.968) 1303 0 R (HD.9680) 10808 0 R (HD.9681) 10809 0 R (HD.9682) 10810 0 R (HD.9683) 10811 0 R (HD.9684) 10812 0 R (HD.9685) 10813 0 R (HD.9686) 10814 0 R (HD.9687) 10815 0 R (HD.9688) 10820 0 R (HD.9689) 10821 0 R (HD.969) 1304 0 R (HD.9690) 10822 0 R (HD.9691) 10823 0 R (HD.9692) 10824 0 R (HD.9693) 10825 0 R (HD.9694) 10826 0 R (HD.9695) 10827 0 R (HD.9696) 10828 0 R (HD.9697) 10829 0 R (HD.9698) 10830 0 R (HD.9699) 10831 0 R ] /Limits [ (HD.9670) (HD.9699) ] >>
+endobj
+11953 0 obj
+<< /Names [ (HD.97) 296 0 R (HD.970) 1305 0 R (HD.9700) 10832 0 R (HD.9701) 10833 0 R (HD.9702) 10834 0 R (HD.9703) 10835 0 R (HD.9704) 10836 0 R (HD.9705) 10837 0 R (HD.9706) 10838 0 R (HD.9707) 10839 0 R (HD.9708) 10840 0 R (HD.9709) 10841 0 R (HD.971) 1306 0 R (HD.9710) 10842 0 R (HD.9711) 10843 0 R (HD.9712) 10844 0 R (HD.9713) 10845 0 R (HD.9714) 10846 0 R (HD.9715) 10847 0 R (HD.9716) 10848 0 R (HD.9717) 10849 0 R (HD.9718) 10850 0 R (HD.9719) 10851 0 R (HD.972) 1307 0 R (HD.9720) 10852 0 R (HD.9721) 10853 0 R (HD.9722) 10854 0 R (HD.9723) 10855 0 R (HD.9724) 10856 0 R (HD.9725) 10857 0 R (HD.9726) 10858 0 R (HD.9727) 10859 0 R ] /Limits [ (HD.97) (HD.9727) ] >>
+endobj
+11954 0 obj
+<< /Names [ (HD.9728) 10860 0 R (HD.9729) 10861 0 R (HD.973) 1308 0 R (HD.9730) 10862 0 R (HD.9731) 10863 0 R (HD.9732) 10864 0 R (HD.9733) 10865 0 R (HD.9734) 10866 0 R (HD.9735) 10867 0 R (HD.9736) 10868 0 R (HD.9737) 10869 0 R (HD.9738) 10870 0 R (HD.9739) 10871 0 R (HD.974) 1309 0 R (HD.9740) 10872 0 R (HD.9741) 10873 0 R (HD.9742) 10874 0 R (HD.9743) 10875 0 R (HD.9744) 10876 0 R (HD.9745) 10877 0 R (HD.9746) 10878 0 R (HD.9747) 10879 0 R (HD.9748) 10880 0 R (HD.9749) 10885 0 R (HD.975) 1310 0 R (HD.9750) 10886 0 R (HD.9751) 10887 0 R (HD.9752) 10888 0 R (HD.9753) 10889 0 R (HD.9754) 10890 0 R (HD.9755) 10891 0 R (HD.9756) 10892 0 R ] /Limits [ (HD.9728) (HD.9756) ] >>
+endobj
+11955 0 obj
+<< /Names [ (HD.9757) 10893 0 R (HD.9758) 10894 0 R (HD.9759) 10895 0 R (HD.976) 1311 0 R (HD.9760) 10896 0 R (HD.9761) 10897 0 R (HD.9762) 10898 0 R (HD.9763) 10899 0 R (HD.9764) 10900 0 R (HD.9765) 10901 0 R (HD.9766) 10902 0 R (HD.9767) 10903 0 R (HD.9768) 10904 0 R (HD.9769) 10905 0 R (HD.977) 1317 0 R (HD.9770) 10906 0 R (HD.9771) 10907 0 R (HD.9772) 10908 0 R (HD.9773) 10909 0 R (HD.9774) 10910 0 R (HD.9775) 10911 0 R (HD.9776) 10912 0 R (HD.9777) 10913 0 R (HD.9778) 10914 0 R (HD.9779) 10915 0 R (HD.978) 1318 0 R (HD.9780) 10916 0 R (HD.9781) 10917 0 R (HD.9782) 10918 0 R (HD.9783) 10919 0 R (HD.9784) 10920 0 R (HD.9785) 10921 0 R ] /Limits [ (HD.9757) (HD.9785) ] >>
+endobj
+11956 0 obj
+<< /Names [ (HD.9786) 10922 0 R (HD.9787) 10923 0 R (HD.9788) 10924 0 R (HD.9789) 10925 0 R (HD.979) 1319 0 R (HD.9790) 10926 0 R (HD.9791) 10927 0 R (HD.9792) 10928 0 R (HD.9793) 10929 0 R (HD.9794) 10930 0 R (HD.9795) 10931 0 R (HD.9796) 10932 0 R (HD.9797) 10933 0 R (HD.9798) 10934 0 R (HD.9799) 10935 0 R (HD.98) 301 0 R (HD.980) 1320 0 R (HD.9800) 10936 0 R (HD.9801) 10937 0 R (HD.9802) 10938 0 R (HD.9803) 10939 0 R (HD.9804) 10940 0 R (HD.9805) 10941 0 R (HD.9806) 10942 0 R (HD.9807) 10943 0 R (HD.9808) 10944 0 R (HD.9809) 10949 0 R (HD.981) 1321 0 R (HD.9810) 10950 0 R (HD.9811) 10951 0 R (HD.9812) 10952 0 R (HD.9813) 10953 0 R ] /Limits [ (HD.9786) (HD.9813) ] >>
+endobj
+11957 0 obj
+<< /Names [ (HD.9814) 10954 0 R (HD.9815) 10955 0 R (HD.9816) 10956 0 R (HD.9817) 10957 0 R (HD.9818) 10958 0 R (HD.9819) 10959 0 R (HD.982) 1322 0 R (HD.9820) 10960 0 R (HD.9821) 10961 0 R (HD.9822) 10962 0 R (HD.9823) 10963 0 R (HD.9824) 10964 0 R (HD.9825) 10965 0 R (HD.9826) 10966 0 R (HD.9827) 10967 0 R (HD.9828) 10968 0 R (HD.9829) 10969 0 R (HD.983) 1323 0 R (HD.9830) 10970 0 R (HD.9831) 10971 0 R (HD.9832) 10972 0 R (HD.9833) 10973 0 R (HD.9834) 10974 0 R (HD.9835) 10975 0 R (HD.9836) 10976 0 R (HD.9837) 10977 0 R (HD.9838) 10978 0 R (HD.9839) 10979 0 R (HD.984) 1324 0 R (HD.9840) 10980 0 R (HD.9841) 10981 0 R (HD.9842) 10982 0 R ] /Limits [ (HD.9814) (HD.9842) ] >>
+endobj
+11958 0 obj
+<< /Names [ (HD.9843) 10983 0 R (HD.9844) 10984 0 R (HD.9845) 10985 0 R (HD.9846) 10986 0 R (HD.9847) 10987 0 R (HD.9848) 10988 0 R (HD.9849) 10989 0 R (HD.985) 1325 0 R (HD.9850) 10990 0 R (HD.9851) 10991 0 R (HD.9852) 10992 0 R (HD.9853) 10993 0 R (HD.9854) 10994 0 R (HD.9855) 10995 0 R (HD.9856) 10996 0 R (HD.9857) 10997 0 R (HD.9858) 10998 0 R (HD.9859) 10999 0 R (HD.986) 1326 0 R (HD.9860) 11000 0 R (HD.9861) 11001 0 R (HD.9862) 11002 0 R (HD.9863) 11003 0 R (HD.9864) 11004 0 R (HD.9865) 11005 0 R (HD.9866) 11006 0 R (HD.9867) 11007 0 R (HD.9868) 11008 0 R (HD.9869) 11013 0 R (HD.987) 1327 0 R (HD.9870) 11014 0 R (HD.9871) 11015 0 R ] /Limits [ (HD.9843) (HD.9871) ] >>
+endobj
+11959 0 obj
+<< /Names [ (HD.9872) 11016 0 R (HD.9873) 11017 0 R (HD.9874) 11018 0 R (HD.9875) 11019 0 R (HD.9876) 11020 0 R (HD.9877) 11021 0 R (HD.9878) 11022 0 R (HD.9879) 11023 0 R (HD.988) 1328 0 R (HD.9880) 11024 0 R (HD.9881) 11025 0 R (HD.9882) 11026 0 R (HD.9883) 11027 0 R (HD.9884) 11028 0 R (HD.9885) 11029 0 R (HD.9886) 11030 0 R (HD.9887) 11031 0 R (HD.9888) 11032 0 R (HD.9889) 11033 0 R (HD.989) 1329 0 R (HD.9890) 11034 0 R (HD.9891) 11035 0 R (HD.9892) 11036 0 R (HD.9893) 11037 0 R (HD.9894) 11038 0 R (HD.9895) 11039 0 R (HD.9896) 11040 0 R (HD.9897) 11041 0 R (HD.9898) 11042 0 R (HD.9899) 11043 0 R (HD.99) 302 0 R (HD.990) 1330 0 R ] /Limits [ (HD.9872) (HD.990) ] >>
+endobj
+11960 0 obj
+<< /Names [ (HD.9900) 11044 0 R (HD.9901) 11045 0 R (HD.9902) 11046 0 R (HD.9903) 11047 0 R (HD.9904) 11048 0 R (HD.9905) 11049 0 R (HD.9906) 11050 0 R (HD.9907) 11051 0 R (HD.9908) 11052 0 R (HD.9909) 11053 0 R (HD.991) 1331 0 R (HD.9910) 11054 0 R (HD.9911) 11055 0 R (HD.9912) 11056 0 R (HD.9913) 11057 0 R (HD.9914) 11058 0 R (HD.9915) 11059 0 R (HD.9916) 11060 0 R (HD.9917) 11061 0 R (HD.9918) 11062 0 R (HD.9919) 11063 0 R (HD.992) 1332 0 R (HD.9920) 11064 0 R (HD.9921) 11065 0 R (HD.9922) 11066 0 R (HD.9923) 11067 0 R (HD.9924) 11068 0 R (HD.9925) 11069 0 R (HD.9926) 11070 0 R (HD.9927) 11071 0 R (HD.9928) 11072 0 R (HD.9929) 11077 0 R ] /Limits [ (HD.9900) (HD.9929) ] >>
+endobj
+11961 0 obj
+<< /Names [ (HD.993) 1333 0 R (HD.9930) 11078 0 R (HD.9931) 11079 0 R (HD.9932) 11080 0 R (HD.9933) 11081 0 R (HD.9934) 11082 0 R (HD.9935) 11083 0 R (HD.9936) 11084 0 R (HD.9937) 11085 0 R (HD.9938) 11086 0 R (HD.9939) 11087 0 R (HD.994) 1334 0 R (HD.9940) 11088 0 R (HD.9941) 11089 0 R (HD.9942) 11090 0 R (HD.9943) 11091 0 R (HD.9944) 11092 0 R (HD.9945) 11093 0 R (HD.9946) 11094 0 R (HD.9947) 11095 0 R (HD.9948) 11096 0 R (HD.9949) 11097 0 R (HD.995) 1335 0 R (HD.9950) 11098 0 R (HD.9951) 11099 0 R (HD.9952) 11100 0 R (HD.9953) 11101 0 R (HD.9954) 11102 0 R (HD.9955) 11103 0 R (HD.9956) 11104 0 R (HD.9957) 11105 0 R (HD.9958) 11106 0 R ] /Limits [ (HD.993) (HD.9958) ] >>
+endobj
+11962 0 obj
+<< /Names [ (HD.9959) 11107 0 R (HD.996) 1336 0 R (HD.9960) 11108 0 R (HD.9961) 11109 0 R (HD.9962) 11110 0 R (HD.9963) 11111 0 R (HD.9964) 11112 0 R (HD.9965) 11113 0 R (HD.9966) 11114 0 R (HD.9967) 11115 0 R (HD.9968) 11116 0 R (HD.9969) 11117 0 R (HD.997) 1337 0 R (HD.9970) 11118 0 R (HD.9971) 11119 0 R (HD.9972) 11120 0 R (HD.9973) 11121 0 R (HD.9974) 11122 0 R (HD.9975) 11123 0 R (HD.9976) 11124 0 R (HD.9977) 11125 0 R (HD.9978) 11126 0 R (HD.9979) 11127 0 R (HD.998) 1338 0 R (HD.9980) 11128 0 R (HD.9981) 11129 0 R (HD.9982) 11130 0 R (HD.9983) 11131 0 R (HD.9984) 11132 0 R (HD.9985) 11133 0 R (HD.9986) 11134 0 R (HD.9987) 11135 0 R ] /Limits [ (HD.9959) (HD.9987) ] >>
+endobj
+11963 0 obj
+<< /Names [ (HD.9988) 11136 0 R (HD.9989) 11137 0 R (HD.999) 1339 0 R (HD.9990) 11138 0 R (HD.9991) 11143 0 R (HD.9992) 11144 0 R (HD.9993) 11145 0 R (HD.9994) 11146 0 R (HD.9995) 11147 0 R (HD.9996) 11148 0 R (HD.9997) 11149 0 R (HD.9998) 11150 0 R (HD.9999) 11151 0 R (Hfootnote.1) 469 0 R (Hfootnote.10) 2701 0 R (Hfootnote.11) 4510 0 R (Hfootnote.12) 4595 0 R (Hfootnote.13) 6043 0 R (Hfootnote.14) 7875 0 R (Hfootnote.2) 759 0 R (Hfootnote.3) 814 0 R (Hfootnote.4) 1955 0 R (Hfootnote.5) 1956 0 R (Hfootnote.6) 2314 0 R (Hfootnote.7) 2407 0 R (Hfootnote.8) 2509 0 R (Hfootnote.9) 2564 0 R (page.1) 172 0 R (page.10) 556 0 R (page.100) 4702 0 R (page.101) 4726 0 R (page.102) 4784 0 R ] /Limits [ (HD.9988) (page.102) ] >>
+endobj
+11964 0 obj
+<< /Names [ (page.103) 4841 0 R (page.104) 4891 0 R (page.105) 4950 0 R (page.106) 5009 0 R (page.107) 5053 0 R (page.108) 5095 0 R (page.109) 5162 0 R (page.11) 576 0 R (page.110) 5204 0 R (page.111) 5261 0 R (page.112) 5303 0 R (page.113) 5339 0 R (page.114) 5385 0 R (page.115) 5433 0 R (page.116) 5491 0 R (page.117) 5544 0 R (page.118) 5604 0 R (page.119) 5671 0 R (page.12) 598 0 R (page.120) 5722 0 R (page.121) 5786 0 R (page.122) 5832 0 R (page.123) 5895 0 R (page.124) 5949 0 R (page.125) 6007 0 R (page.126) 6048 0 R (page.127) 6086 0 R (page.128) 6138 0 R (page.129) 6191 0 R (page.13) 629 0 R (page.130) 6224 0 R (page.131) 6278 0 R ] /Limits [ (page.103) (page.131) ] >>
+endobj
+11965 0 obj
+<< /Names [ (page.132) 6326 0 R (page.133) 6378 0 R (page.134) 6424 0 R (page.135) 6471 0 R (page.136) 6523 0 R (page.137) 6576 0 R (page.138) 6634 0 R (page.139) 6687 0 R (page.14) 650 0 R (page.140) 6726 0 R (page.141) 6766 0 R (page.142) 6804 0 R (page.143) 6845 0 R (page.144) 6886 0 R (page.145) 6947 0 R (page.146) 7009 0 R (page.147) 7063 0 R (page.148) 7112 0 R (page.149) 7175 0 R (page.15) 676 0 R (page.150) 7222 0 R (page.151) 7274 0 R (page.152) 7324 0 R (page.153) 7382 0 R (page.154) 7425 0 R (page.155) 7488 0 R (page.156) 7544 0 R (page.157) 7592 0 R (page.158) 7638 0 R (page.159) 7689 0 R (page.16) 693 0 R (page.160) 7740 0 R ] /Limits [ (page.132) (page.160) ] >>
+endobj
+11966 0 obj
+<< /Names [ (page.161) 7776 0 R (page.162) 7832 0 R (page.163) 7880 0 R (page.164) 7933 0 R (page.165) 7983 0 R (page.166) 8024 0 R (page.167) 8072 0 R (page.168) 8114 0 R (page.169) 8161 0 R (page.17) 719 0 R (page.170) 8212 0 R (page.171) 8275 0 R (page.172) 8325 0 R (page.173) 8382 0 R (page.174) 8439 0 R (page.175) 8491 0 R (page.176) 8551 0 R (page.177) 8595 0 R (page.178) 8645 0 R (page.179) 8708 0 R (page.18) 745 0 R (page.180) 8774 0 R (page.181) 8833 0 R (page.182) 8897 0 R (page.183) 8955 0 R (page.184) 9016 0 R (page.185) 9078 0 R (page.186) 9139 0 R (page.187) 9190 0 R (page.188) 9245 0 R (page.189) 9288 0 R (page.19) 768 0 R ] /Limits [ (page.161) (page.19) ] >>
+endobj
+11967 0 obj
+<< /Names [ (page.190) 9337 0 R (page.191) 9379 0 R (page.192) 9424 0 R (page.193) 9482 0 R (page.194) 9541 0 R (page.195) 9589 0 R (page.196) 9652 0 R (page.197) 9705 0 R (page.198) 9760 0 R (page.199) 9799 0 R (page.2) 208 0 R (page.20) 797 0 R (page.200) 9849 0 R (page.201) 9902 0 R (page.202) 9965 0 R (page.203) 10028 0 R (page.204) 10088 0 R (page.205) 10153 0 R (page.206) 10216 0 R (page.207) 10283 0 R (page.208) 10335 0 R (page.209) 10395 0 R (page.21) 819 0 R (page.210) 10435 0 R (page.211) 10497 0 R (page.212) 10561 0 R (page.213) 10625 0 R (page.214) 10690 0 R (page.215) 10754 0 R (page.216) 10819 0 R (page.217) 10884 0 R (page.218) 10948 0 R ] /Limits [ (page.190) (page.218) ] >>
+endobj
+11968 0 obj
+<< /Names [ (page.219) 11012 0 R (page.22) 872 0 R (page.220) 11076 0 R (page.221) 11142 0 R (page.222) 11210 0 R (page.223) 11275 0 R (page.224) 11340 0 R (page.225) 11407 0 R (page.226) 11474 0 R (page.227) 11524 0 R (page.228) 11538 0 R (page.23) 919 0 R (page.24) 959 0 R (page.25) 1009 0 R (page.26) 1044 0 R (page.27) 1071 0 R (page.28) 1094 0 R (page.29) 1141 0 R (page.3) 255 0 R (page.30) 1196 0 R (page.31) 1258 0 R (page.32) 1316 0 R (page.33) 1379 0 R (page.34) 1430 0 R (page.35) 1480 0 R (page.36) 1532 0 R (page.37) 1565 0 R (page.38) 1613 0 R (page.39) 1677 0 R (page.4) 300 0 R (page.40) 1712 0 R (page.41) 1765 0 R ] /Limits [ (page.219) (page.41) ] >>
+endobj
+11969 0 obj
+<< /Names [ (page.42) 1808 0 R (page.43) 1861 0 R (page.44) 1917 0 R (page.45) 1961 0 R (page.46) 2006 0 R (page.47) 2058 0 R (page.48) 2095 0 R (page.49) 2132 0 R (page.5) 339 0 R (page.50) 2165 0 R (page.51) 2214 0 R (page.52) 2258 0 R (page.53) 2320 0 R (page.54) 2372 0 R (page.55) 2412 0 R (page.56) 2464 0 R (page.57) 2516 0 R (page.58) 2569 0 R (page.59) 2608 0 R (page.6) 380 0 R (page.60) 2656 0 R (page.61) 2706 0 R (page.62) 2763 0 R (page.63) 2819 0 R (page.64) 2872 0 R (page.65) 2916 0 R (page.66) 2961 0 R (page.67) 3012 0 R (page.68) 3065 0 R (page.69) 3122 0 R (page.7) 428 0 R (page.70) 3174 0 R ] /Limits [ (page.42) (page.70) ] >>
+endobj
+11970 0 obj
+<< /Names [ (page.71) 3235 0 R (page.72) 3290 0 R (page.73) 3327 0 R (page.74) 3371 0 R (page.75) 3424 0 R (page.76) 3481 0 R (page.77) 3533 0 R (page.78) 3584 0 R (page.79) 3631 0 R (page.8) 474 0 R (page.80) 3679 0 R (page.81) 3729 0 R (page.82) 3786 0 R (page.83) 3837 0 R (page.84) 3875 0 R (page.85) 3919 0 R (page.86) 3979 0 R (page.87) 4035 0 R (page.88) 4093 0 R (page.89) 4147 0 R (page.9) 527 0 R (page.90) 4195 0 R (page.91) 4246 0 R (page.92) 4303 0 R (page.93) 4361 0 R (page.94) 4416 0 R (page.95) 4461 0 R (page.96) 4515 0 R (page.97) 4562 0 R (page.98) 4600 0 R (page.99) 4647 0 R (section.0.1) 5 0 R ] /Limits [ (page.71) (section.0.1) ] >>
+endobj
+11971 0 obj
+<< /Names [ (section.0.10) 41 0 R (section.0.11) 45 0 R (section.0.12) 49 0 R (section.0.13) 53 0 R (section.0.14) 57 0 R (section.0.15) 61 0 R (section.0.16) 65 0 R (section.0.17) 69 0 R (section.0.18) 73 0 R (section.0.19) 77 0 R (section.0.2) 9 0 R (section.0.20) 81 0 R (section.0.21) 85 0 R (section.0.22) 89 0 R (section.0.23) 93 0 R (section.0.24) 97 0 R (section.0.25) 101 0 R (section.0.26) 105 0 R (section.0.27) 109 0 R (section.0.28) 113 0 R (section.0.29) 117 0 R (section.0.3) 13 0 R (section.0.30) 121 0 R (section.0.31) 125 0 R (section.0.32) 129 0 R (section.0.33) 133 0 R (section.0.34) 137 0 R (section.0.35) 141 0 R (section.0.36) 145 0 R (section.0.37) 149 0 R (section.0.38) 153 0 R (section.0.39) 157 0 R ] /Limits [ (section.0.10) (section.0.39) ] >>
+endobj
+11972 0 obj
+<< /Names [ (section.0.4) 17 0 R (section.0.40) 161 0 R (section.0.5) 21 0 R (section.0.6) 25 0 R (section.0.7) 29 0 R (section.0.8) 33 0 R (section.0.9) 37 0 R (toc1.1) 165 0 R ] /Limits [ (section.0.4) (toc1.1) ] >>
+endobj
+11973 0 obj
+<< /Kids [ 11641 0 R 11642 0 R 11643 0 R 11644 0 R 11645 0 R 11646 0 R 11647 0 R 11648 0 R 11649 0 R 11650 0 R 11651 0 R 11652 0 R 11653 0 R 11654 0 R 11655 0 R 11656 0 R 11657 0 R 11658 0 R 11659 0 R 11660 0 R 11661 0 R 11662 0 R 11663 0 R 11664 0 R 11665 0 R 11666 0 R 11667 0 R 11668 0 R 11669 0 R 11670 0 R 11671 0 R 11672 0 R ] /Limits [ (Doc-Start) (HD.1633) ] >>
+endobj
+11974 0 obj
+<< /Kids [ 11673 0 R 11674 0 R 11675 0 R 11676 0 R 11677 0 R 11678 0 R 11679 0 R 11680 0 R 11681 0 R 11682 0 R 11683 0 R 11684 0 R 11685 0 R 11686 0 R 11687 0 R 11688 0 R 11689 0 R 11690 0 R 11691 0 R 11692 0 R 11693 0 R 11694 0 R 11695 0 R 11696 0 R 11697 0 R 11698 0 R 11699 0 R 11700 0 R 11701 0 R 11702 0 R 11703 0 R 11704 0 R ] /Limits [ (HD.1634) (HD.2555) ] >>
+endobj
+11975 0 obj
+<< /Kids [ 11705 0 R 11706 0 R 11707 0 R 11708 0 R 11709 0 R 11710 0 R 11711 0 R 11712 0 R 11713 0 R 11714 0 R 11715 0 R 11716 0 R 11717 0 R 11718 0 R 11719 0 R 11720 0 R 11721 0 R 11722 0 R 11723 0 R 11724 0 R 11725 0 R 11726 0 R 11727 0 R 11728 0 R 11729 0 R 11730 0 R 11731 0 R 11732 0 R 11733 0 R 11734 0 R 11735 0 R 11736 0 R ] /Limits [ (HD.2556) (HD.3477) ] >>
+endobj
+11976 0 obj
+<< /Kids [ 11737 0 R 11738 0 R 11739 0 R 11740 0 R 11741 0 R 11742 0 R 11743 0 R 11744 0 R 11745 0 R 11746 0 R 11747 0 R 11748 0 R 11749 0 R 11750 0 R 11751 0 R 11752 0 R 11753 0 R 11754 0 R 11755 0 R 11756 0 R 11757 0 R 11758 0 R 11759 0 R 11760 0 R 11761 0 R 11762 0 R 11763 0 R 11764 0 R 11765 0 R 11766 0 R 11767 0 R 11768 0 R ] /Limits [ (HD.3478) (HD.4399) ] >>
+endobj
+11977 0 obj
+<< /Kids [ 11769 0 R 11770 0 R 11771 0 R 11772 0 R 11773 0 R 11774 0 R 11775 0 R 11776 0 R 11777 0 R 11778 0 R 11779 0 R 11780 0 R 11781 0 R 11782 0 R 11783 0 R 11784 0 R 11785 0 R 11786 0 R 11787 0 R 11788 0 R 11789 0 R 11790 0 R 11791 0 R 11792 0 R 11793 0 R 11794 0 R 11795 0 R 11796 0 R 11797 0 R 11798 0 R 11799 0 R 11800 0 R ] /Limits [ (HD.44) (HD.532) ] >>
+endobj
+11978 0 obj
+<< /Kids [ 11801 0 R 11802 0 R 11803 0 R 11804 0 R 11805 0 R 11806 0 R 11807 0 R 11808 0 R 11809 0 R 11810 0 R 11811 0 R 11812 0 R 11813 0 R 11814 0 R 11815 0 R 11816 0 R 11817 0 R 11818 0 R 11819 0 R 11820 0 R 11821 0 R 11822 0 R 11823 0 R 11824 0 R 11825 0 R 11826 0 R 11827 0 R 11828 0 R 11829 0 R 11830 0 R 11831 0 R 11832 0 R ] /Limits [ (HD.5320) (HD.6241) ] >>
+endobj
+11979 0 obj
+<< /Kids [ 11833 0 R 11834 0 R 11835 0 R 11836 0 R 11837 0 R 11838 0 R 11839 0 R 11840 0 R 11841 0 R 11842 0 R 11843 0 R 11844 0 R 11845 0 R 11846 0 R 11847 0 R 11848 0 R 11849 0 R 11850 0 R 11851 0 R 11852 0 R 11853 0 R 11854 0 R 11855 0 R 11856 0 R 11857 0 R 11858 0 R 11859 0 R 11860 0 R 11861 0 R 11862 0 R 11863 0 R 11864 0 R ] /Limits [ (HD.6242) (HD.7163) ] >>
+endobj
+11980 0 obj
+<< /Kids [ 11865 0 R 11866 0 R 11867 0 R 11868 0 R 11869 0 R 11870 0 R 11871 0 R 11872 0 R 11873 0 R 11874 0 R 11875 0 R 11876 0 R 11877 0 R 11878 0 R 11879 0 R 11880 0 R 11881 0 R 11882 0 R 11883 0 R 11884 0 R 11885 0 R 11886 0 R 11887 0 R 11888 0 R 11889 0 R 11890 0 R 11891 0 R 11892 0 R 11893 0 R 11894 0 R 11895 0 R 11896 0 R ] /Limits [ (HD.7164) (HD.8085) ] >>
+endobj
+11981 0 obj
+<< /Kids [ 11897 0 R 11898 0 R 11899 0 R 11900 0 R 11901 0 R 11902 0 R 11903 0 R 11904 0 R 11905 0 R 11906 0 R 11907 0 R 11908 0 R 11909 0 R 11910 0 R 11911 0 R 11912 0 R 11913 0 R 11914 0 R 11915 0 R 11916 0 R 11917 0 R 11918 0 R 11919 0 R 11920 0 R 11921 0 R 11922 0 R 11923 0 R 11924 0 R 11925 0 R 11926 0 R 11927 0 R 11928 0 R ] /Limits [ (HD.8086) (HD.9006) ] >>
+endobj
+11982 0 obj
+<< /Kids [ 11929 0 R 11930 0 R 11931 0 R 11932 0 R 11933 0 R 11934 0 R 11935 0 R 11936 0 R 11937 0 R 11938 0 R 11939 0 R 11940 0 R 11941 0 R 11942 0 R 11943 0 R 11944 0 R 11945 0 R 11946 0 R 11947 0 R 11948 0 R 11949 0 R 11950 0 R 11951 0 R 11952 0 R 11953 0 R 11954 0 R 11955 0 R 11956 0 R 11957 0 R 11958 0 R 11959 0 R 11960 0 R ] /Limits [ (HD.9007) (HD.9929) ] >>
+endobj
+11983 0 obj
+<< /Kids [ 11961 0 R 11962 0 R 11963 0 R 11964 0 R 11965 0 R 11966 0 R 11967 0 R 11968 0 R 11969 0 R 11970 0 R 11971 0 R 11972 0 R ] /Limits [ (HD.993) (toc1.1) ] >>
+endobj
+11984 0 obj
+<< /Kids [ 11973 0 R 11974 0 R 11975 0 R 11976 0 R 11977 0 R 11978 0 R 11979 0 R 11980 0 R 11981 0 R 11982 0 R 11983 0 R ] /Limits [ (Doc-Start) (toc1.1) ] >>
+endobj
+11985 0 obj
+<< /Dests 11984 0 R >>
+endobj
+11986 0 obj
+<< /Type /Catalog /Pages 11639 0 R /Outlines 11640 0 R /Names 11985 0 R /PageMode/UseOutlines /OpenAction 168 0 R >>
+endobj
+11987 0 obj
+<< /Author(\376\377\000F\000.\000\040\000P\000a\000n\000t\000i\000g\000n\000y)/Title(\376\377\000T\000h\000e\000\040\000c\000o\000d\000e\000\040\000o\000f\000\040\000t\000h\000e\000\040\000p\000a\000c\000k\000a\000g\000e\000\040\000'\000n\000i\000c\000e\000m\000a\000t\000r\000i\000x\000')/Subject(\376\377\000A\000\040\000L\000a\000T\000e\000X\000\040\000p\000a\000c\000k\000a\000g\000e)/Creator(LaTeX with hyperref)/Keywords() /Producer (LuaTeX-1.18.1) /CreationDate (D:20240529135025+02'00') /ModDate (D:20240529135025+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.1 (MiKTeX 24.4)) >>
+endobj
+xref
+0 11988
+0000000000 65535 f
+0001292294 00000 n
+0001292348 00000 n
+0001292368 00000 n
+0000000020 00000 n
+0000012808 00000 n
+0001881371 00000 n
+0000000067 00000 n
+0000000355 00000 n
+0000018973 00000 n
+0001881283 00000 n
+0000000402 00000 n
+0000000511 00000 n
+0000026858 00000 n
+0001881193 00000 n
+0000000559 00000 n
+0000000693 00000 n
+0000028051 00000 n
+0001881103 00000 n
+0000000741 00000 n
+0000000890 00000 n
+0000055322 00000 n
+0001881013 00000 n
+0000000938 00000 n
+0000001029 00000 n
+0000101027 00000 n
+0001880923 00000 n
+0000001077 00000 n
+0000001247 00000 n
+0000126808 00000 n
+0001880833 00000 n
+0000001295 00000 n
+0000001546 00000 n
+0000132641 00000 n
+0001880743 00000 n
+0000001594 00000 n
+0000001693 00000 n
+0000191704 00000 n
+0001880653 00000 n
+0000001741 00000 n
+0000002028 00000 n
+0000267970 00000 n
+0001880563 00000 n
+0000002077 00000 n
+0000002204 00000 n
+0000290484 00000 n
+0001880473 00000 n
+0000002253 00000 n
+0000002496 00000 n
+0000320456 00000 n
+0001880383 00000 n
+0000002545 00000 n
+0000002799 00000 n
+0000406395 00000 n
+0001880293 00000 n
+0000002848 00000 n
+0000003066 00000 n
+0000506549 00000 n
+0001880203 00000 n
+0000003115 00000 n
+0000003407 00000 n
+0000512671 00000 n
+0001880113 00000 n
+0000003456 00000 n
+0000003769 00000 n
+0000519410 00000 n
+0001880023 00000 n
+0000003818 00000 n
+0000004054 00000 n
+0000560476 00000 n
+0001879933 00000 n
+0000004103 00000 n
+0000004281 00000 n
+0000630469 00000 n
+0001879843 00000 n
+0000004330 00000 n
+0000004713 00000 n
+0000662537 00000 n
+0001879753 00000 n
+0000004762 00000 n
+0000005061 00000 n
+0000697901 00000 n
+0001879663 00000 n
+0000005110 00000 n
+0000005384 00000 n
+0000704689 00000 n
+0001879573 00000 n
+0000005433 00000 n
+0000005593 00000 n
+0000720430 00000 n
+0001879483 00000 n
+0000005642 00000 n
+0000005868 00000 n
+0000786610 00000 n
+0001879393 00000 n
+0000005917 00000 n
+0000006140 00000 n
+0000874089 00000 n
+0001879302 00000 n
+0000006189 00000 n
+0000006326 00000 n
+0000886249 00000 n
+0001879208 00000 n
+0000006376 00000 n
+0000006600 00000 n
+0000891808 00000 n
+0001879113 00000 n
+0000006650 00000 n
+0000006778 00000 n
+0000918450 00000 n
+0001879018 00000 n
+0000006828 00000 n
+0000006928 00000 n
+0001049177 00000 n
+0001878923 00000 n
+0000006978 00000 n
+0000007253 00000 n
+0001052930 00000 n
+0001878828 00000 n
+0000007303 00000 n
+0000007433 00000 n
+0001060139 00000 n
+0001878733 00000 n
+0000007483 00000 n
+0000007756 00000 n
+0001060722 00000 n
+0001878638 00000 n
+0000007806 00000 n
+0000007962 00000 n
+0001070731 00000 n
+0001878543 00000 n
+0000008012 00000 n
+0000008178 00000 n
+0001071831 00000 n
+0001878448 00000 n
+0000008228 00000 n
+0000008437 00000 n
+0001080667 00000 n
+0001878353 00000 n
+0000008487 00000 n
+0000008653 00000 n
+0001127714 00000 n
+0001878258 00000 n
+0000008703 00000 n
+0000008963 00000 n
+0001145295 00000 n
+0001878163 00000 n
+0000009013 00000 n
+0000009191 00000 n
+0001155665 00000 n
+0001878068 00000 n
+0000009241 00000 n
+0000009427 00000 n
+0001170867 00000 n
+0001877973 00000 n
+0000009477 00000 n
+0000009747 00000 n
+0001180068 00000 n
+0001877878 00000 n
+0000009797 00000 n
+0000009993 00000 n
+0001181002 00000 n
+0001877783 00000 n
+0000010043 00000 n
+0000010247 00000 n
+0001289443 00000 n
+0001877702 00000 n
+0000010291 00000 n
+0000010360 00000 n
+0000012563 00000 n
+0000013685 00000 n
+0000010424 00000 n
+0000012684 00000 n
+0000012746 00000 n
+0001868655 00000 n
+0001870262 00000 n
+0001872243 00000 n
+0001868476 00000 n
+0001870972 00000 n
+0001867939 00000 n
+0001869366 00000 n
+0001870617 00000 n
+0001869722 00000 n
+0001871327 00000 n
+0001868297 00000 n
+0001870084 00000 n
+0001870794 00000 n
+0001867763 00000 n
+0000012868 00000 n
+0001870440 00000 n
+0000012931 00000 n
+0000012993 00000 n
+0000013056 00000 n
+0000013119 00000 n
+0000013181 00000 n
+0000013244 00000 n
+0000013307 00000 n
+0000013370 00000 n
+0000013433 00000 n
+0000013496 00000 n
+0000013559 00000 n
+0000013622 00000 n
+0001872425 00000 n
+0001869188 00000 n
+0001873321 00000 n
+0000019033 00000 n
+0000016087 00000 n
+0000014017 00000 n
+0000016208 00000 n
+0000016270 00000 n
+0000016333 00000 n
+0000016396 00000 n
+0000016459 00000 n
+0000016522 00000 n
+0000016585 00000 n
+0000016648 00000 n
+0000016711 00000 n
+0000016774 00000 n
+0000016836 00000 n
+0000016899 00000 n
+0000016962 00000 n
+0000017025 00000 n
+0000017088 00000 n
+0000017151 00000 n
+0000017214 00000 n
+0000017277 00000 n
+0000017340 00000 n
+0000017403 00000 n
+0000017465 00000 n
+0000017528 00000 n
+0000017591 00000 n
+0000017654 00000 n
+0000017717 00000 n
+0000017779 00000 n
+0000017842 00000 n
+0000017905 00000 n
+0000017968 00000 n
+0000018031 00000 n
+0000018094 00000 n
+0000018157 00000 n
+0000018220 00000 n
+0000018283 00000 n
+0000018344 00000 n
+0000018407 00000 n
+0000018470 00000 n
+0000018533 00000 n
+0000018596 00000 n
+0000018659 00000 n
+0000018722 00000 n
+0000018785 00000 n
+0000018848 00000 n
+0000018911 00000 n
+0000024492 00000 n
+0000021731 00000 n
+0000019196 00000 n
+0000021852 00000 n
+0000021914 00000 n
+0000021977 00000 n
+0000022040 00000 n
+0000022103 00000 n
+0000022166 00000 n
+0000022229 00000 n
+0000022292 00000 n
+0000022355 00000 n
+0000022417 00000 n
+0000022480 00000 n
+0000022543 00000 n
+0000022606 00000 n
+0000022669 00000 n
+0000022732 00000 n
+0000022795 00000 n
+0000022858 00000 n
+0000022921 00000 n
+0000022983 00000 n
+0000023046 00000 n
+0000023109 00000 n
+0000023172 00000 n
+0000023235 00000 n
+0000023298 00000 n
+0000023361 00000 n
+0000023424 00000 n
+0000023487 00000 n
+0000023550 00000 n
+0000023613 00000 n
+0000023676 00000 n
+0000023739 00000 n
+0000023802 00000 n
+0000023865 00000 n
+0000023928 00000 n
+0000023991 00000 n
+0000024054 00000 n
+0000024116 00000 n
+0000024179 00000 n
+0000024242 00000 n
+0000024305 00000 n
+0000024368 00000 n
+0000024430 00000 n
+0000028865 00000 n
+0000026486 00000 n
+0000024681 00000 n
+0000026607 00000 n
+0000026669 00000 n
+0000026732 00000 n
+0000026795 00000 n
+0001869900 00000 n
+0001869544 00000 n
+0000026919 00000 n
+0000026982 00000 n
+0000027044 00000 n
+0000027107 00000 n
+0000027170 00000 n
+0000027233 00000 n
+0000027296 00000 n
+0000027359 00000 n
+0000027422 00000 n
+0000027485 00000 n
+0000027548 00000 n
+0000027610 00000 n
+0000027673 00000 n
+0000027736 00000 n
+0000027799 00000 n
+0000027862 00000 n
+0000027925 00000 n
+0000027988 00000 n
+0000028112 00000 n
+0000028175 00000 n
+0000028238 00000 n
+0000028301 00000 n
+0000028364 00000 n
+0000028427 00000 n
+0000028489 00000 n
+0000028552 00000 n
+0000028615 00000 n
+0000028678 00000 n
+0000028741 00000 n
+0000028803 00000 n
+0000034558 00000 n
+0000032051 00000 n
+0000029067 00000 n
+0000032172 00000 n
+0000032234 00000 n
+0000032297 00000 n
+0000032360 00000 n
+0000032423 00000 n
+0000032486 00000 n
+0000032548 00000 n
+0000032611 00000 n
+0000032674 00000 n
+0000032737 00000 n
+0000032800 00000 n
+0000032863 00000 n
+0000032926 00000 n
+0000032988 00000 n
+0000033051 00000 n
+0000033114 00000 n
+0000033177 00000 n
+0000033240 00000 n
+0000033303 00000 n
+0000033366 00000 n
+0000033429 00000 n
+0000033492 00000 n
+0000033554 00000 n
+0000033617 00000 n
+0000033680 00000 n
+0000033743 00000 n
+0000033806 00000 n
+0000033869 00000 n
+0000033932 00000 n
+0000033995 00000 n
+0000034057 00000 n
+0000034120 00000 n
+0000034182 00000 n
+0000034245 00000 n
+0000034308 00000 n
+0000034371 00000 n
+0000034434 00000 n
+0000034496 00000 n
+0000040332 00000 n
+0000037444 00000 n
+0000034747 00000 n
+0000037565 00000 n
+0000037627 00000 n
+0000037690 00000 n
+0000037753 00000 n
+0000037816 00000 n
+0000037879 00000 n
+0000037942 00000 n
+0000038005 00000 n
+0000038068 00000 n
+0000038131 00000 n
+0000038194 00000 n
+0000038256 00000 n
+0000038319 00000 n
+0000038382 00000 n
+0000038445 00000 n
+0000038508 00000 n
+0000038571 00000 n
+0000038634 00000 n
+0000038697 00000 n
+0000038760 00000 n
+0000038823 00000 n
+0000038886 00000 n
+0000038949 00000 n
+0000039012 00000 n
+0000039075 00000 n
+0000039138 00000 n
+0000039201 00000 n
+0000039264 00000 n
+0000039327 00000 n
+0000039390 00000 n
+0000039452 00000 n
+0000039515 00000 n
+0000039578 00000 n
+0000039641 00000 n
+0000039704 00000 n
+0000039767 00000 n
+0000039830 00000 n
+0000039893 00000 n
+0000039956 00000 n
+0000040019 00000 n
+0000040082 00000 n
+0000040145 00000 n
+0000040208 00000 n
+0000040270 00000 n
+0000043448 00000 n
+0000046117 00000 n
+0000043282 00000 n
+0000040508 00000 n
+0000043604 00000 n
+0000043666 00000 n
+0000043729 00000 n
+0000043792 00000 n
+0000043855 00000 n
+0000043918 00000 n
+0000043981 00000 n
+0000044044 00000 n
+0000044107 00000 n
+0000044170 00000 n
+0000044233 00000 n
+0000044296 00000 n
+0000044358 00000 n
+0000044421 00000 n
+0000044484 00000 n
+0000044547 00000 n
+0000044610 00000 n
+0000044673 00000 n
+0000044736 00000 n
+0000044799 00000 n
+0000044862 00000 n
+0000044924 00000 n
+0000044987 00000 n
+0000045050 00000 n
+0000045112 00000 n
+0000045175 00000 n
+0000045238 00000 n
+0000045301 00000 n
+0000045364 00000 n
+0000045427 00000 n
+0000045490 00000 n
+0001869011 00000 n
+0000045553 00000 n
+0000045616 00000 n
+0000045679 00000 n
+0000045741 00000 n
+0000045804 00000 n
+0000045867 00000 n
+0000045930 00000 n
+0000045993 00000 n
+0001868834 00000 n
+0000046056 00000 n
+0000043419 00000 n
+0000051666 00000 n
+0000048405 00000 n
+0000046345 00000 n
+0000048526 00000 n
+0000048588 00000 n
+0000048651 00000 n
+0000048714 00000 n
+0000048777 00000 n
+0000048840 00000 n
+0000048903 00000 n
+0000048966 00000 n
+0000049029 00000 n
+0000049092 00000 n
+0000049154 00000 n
+0000049217 00000 n
+0000049280 00000 n
+0000049343 00000 n
+0000049406 00000 n
+0000049469 00000 n
+0000049532 00000 n
+0000049595 00000 n
+0000049656 00000 n
+0000049719 00000 n
+0000049782 00000 n
+0000049845 00000 n
+0000049907 00000 n
+0000049970 00000 n
+0000050033 00000 n
+0000050096 00000 n
+0000050159 00000 n
+0000050222 00000 n
+0000050285 00000 n
+0000050348 00000 n
+0000050410 00000 n
+0000050473 00000 n
+0000050536 00000 n
+0000050599 00000 n
+0000050662 00000 n
+0000050725 00000 n
+0000050788 00000 n
+0000050851 00000 n
+0000050914 00000 n
+0000050977 00000 n
+0000051040 00000 n
+0000051103 00000 n
+0000051166 00000 n
+0000051228 00000 n
+0000051290 00000 n
+0000051353 00000 n
+0000051416 00000 n
+0000051479 00000 n
+0000051542 00000 n
+0000051604 00000 n
+0000056072 00000 n
+0000054323 00000 n
+0000051842 00000 n
+0000054444 00000 n
+0000054506 00000 n
+0000054568 00000 n
+0000054631 00000 n
+0000054694 00000 n
+0000054757 00000 n
+0000054820 00000 n
+0000054883 00000 n
+0000054946 00000 n
+0000055009 00000 n
+0000055072 00000 n
+0000055135 00000 n
+0000055198 00000 n
+0000055259 00000 n
+0000055383 00000 n
+0001868114 00000 n
+0000055444 00000 n
+0000055507 00000 n
+0000055570 00000 n
+0000055633 00000 n
+0000055696 00000 n
+0000055759 00000 n
+0000055822 00000 n
+0000055885 00000 n
+0000055948 00000 n
+0000056010 00000 n
+0000060581 00000 n
+0000059391 00000 n
+0000056287 00000 n
+0000059512 00000 n
+0000059574 00000 n
+0000059637 00000 n
+0000059700 00000 n
+0000059763 00000 n
+0000059826 00000 n
+0000059889 00000 n
+0000059952 00000 n
+0000060015 00000 n
+0000060078 00000 n
+0000060141 00000 n
+0000060204 00000 n
+0000060267 00000 n
+0000060330 00000 n
+0000060393 00000 n
+0000060456 00000 n
+0000060519 00000 n
+0000064585 00000 n
+0000063333 00000 n
+0000060757 00000 n
+0000063454 00000 n
+0000063516 00000 n
+0000063579 00000 n
+0000063641 00000 n
+0000063704 00000 n
+0000063767 00000 n
+0000063830 00000 n
+0000063893 00000 n
+0000063956 00000 n
+0000064019 00000 n
+0000064082 00000 n
+0000064145 00000 n
+0000064208 00000 n
+0000064271 00000 n
+0000064334 00000 n
+0000064397 00000 n
+0000064460 00000 n
+0000064523 00000 n
+0001873475 00000 n
+0000069451 00000 n
+0000067570 00000 n
+0000064774 00000 n
+0000067691 00000 n
+0000067753 00000 n
+0000067816 00000 n
+0000067879 00000 n
+0000067942 00000 n
+0000068005 00000 n
+0000068068 00000 n
+0000068131 00000 n
+0000068194 00000 n
+0000068257 00000 n
+0000068320 00000 n
+0000068383 00000 n
+0000068446 00000 n
+0000068509 00000 n
+0000068571 00000 n
+0000068634 00000 n
+0000068697 00000 n
+0000068760 00000 n
+0000068823 00000 n
+0000068886 00000 n
+0000068949 00000 n
+0000069012 00000 n
+0000069075 00000 n
+0000069138 00000 n
+0000069201 00000 n
+0000069264 00000 n
+0000069327 00000 n
+0000069389 00000 n
+0000073714 00000 n
+0000072589 00000 n
+0000069653 00000 n
+0000072710 00000 n
+0000072772 00000 n
+0000072835 00000 n
+0000072898 00000 n
+0000072961 00000 n
+0000073024 00000 n
+0000073087 00000 n
+0000073150 00000 n
+0000073211 00000 n
+0000073274 00000 n
+0000073337 00000 n
+0000073400 00000 n
+0000073463 00000 n
+0001872787 00000 n
+0000073525 00000 n
+0001871874 00000 n
+0000073588 00000 n
+0000073651 00000 n
+0000078097 00000 n
+0000076593 00000 n
+0000073903 00000 n
+0000076714 00000 n
+0000076776 00000 n
+0000076839 00000 n
+0000076902 00000 n
+0001873141 00000 n
+0000076965 00000 n
+0000077028 00000 n
+0000077091 00000 n
+0000077154 00000 n
+0000077217 00000 n
+0000077280 00000 n
+0000077343 00000 n
+0000077406 00000 n
+0000077469 00000 n
+0000077532 00000 n
+0000077595 00000 n
+0000077658 00000 n
+0000077721 00000 n
+0000077784 00000 n
+0000077847 00000 n
+0000077910 00000 n
+0000077973 00000 n
+0000078035 00000 n
+0000082876 00000 n
+0000081875 00000 n
+0000078299 00000 n
+0000081996 00000 n
+0000082058 00000 n
+0000082121 00000 n
+0000082184 00000 n
+0000082247 00000 n
+0000082310 00000 n
+0000082373 00000 n
+0000082436 00000 n
+0000082499 00000 n
+0000082561 00000 n
+0000082624 00000 n
+0000082687 00000 n
+0000082750 00000 n
+0000082813 00000 n
+0000087943 00000 n
+0000086375 00000 n
+0000083091 00000 n
+0000086496 00000 n
+0000086558 00000 n
+0000086621 00000 n
+0000086684 00000 n
+0000086747 00000 n
+0000086810 00000 n
+0000086873 00000 n
+0000086936 00000 n
+0000086999 00000 n
+0000087061 00000 n
+0000087124 00000 n
+0000087187 00000 n
+0000087250 00000 n
+0000087313 00000 n
+0000087376 00000 n
+0000087439 00000 n
+0000087502 00000 n
+0000087565 00000 n
+0000087628 00000 n
+0000087691 00000 n
+0000087754 00000 n
+0000087817 00000 n
+0000087880 00000 n
+0000091946 00000 n
+0000090503 00000 n
+0000088132 00000 n
+0000090624 00000 n
+0000090686 00000 n
+0000090749 00000 n
+0000090812 00000 n
+0000090875 00000 n
+0000090938 00000 n
+0000091001 00000 n
+0000091064 00000 n
+0000091127 00000 n
+0000091190 00000 n
+0000091253 00000 n
+0000091316 00000 n
+0000091379 00000 n
+0000091442 00000 n
+0000091505 00000 n
+0000091568 00000 n
+0000091631 00000 n
+0001867587 00000 n
+0000091694 00000 n
+0000091757 00000 n
+0000091820 00000 n
+0000091883 00000 n
+0000095222 00000 n
+0000096320 00000 n
+0000095056 00000 n
+0000092148 00000 n
+0000095378 00000 n
+0000095440 00000 n
+0000095503 00000 n
+0000095566 00000 n
+0000095629 00000 n
+0000095692 00000 n
+0000095755 00000 n
+0000095818 00000 n
+0000095881 00000 n
+0000095944 00000 n
+0000096006 00000 n
+0000096069 00000 n
+0000096132 00000 n
+0000096195 00000 n
+0000096258 00000 n
+0001871150 00000 n
+0001872606 00000 n
+0001872964 00000 n
+0000095193 00000 n
+0000104583 00000 n
+0000101088 00000 n
+0000099272 00000 n
+0000096613 00000 n
+0000099393 00000 n
+0000099455 00000 n
+0000099518 00000 n
+0000099581 00000 n
+0000099644 00000 n
+0000099707 00000 n
+0000099770 00000 n
+0000099833 00000 n
+0000099895 00000 n
+0000099958 00000 n
+0000100021 00000 n
+0000100084 00000 n
+0000100147 00000 n
+0000100210 00000 n
+0000100273 00000 n
+0000100336 00000 n
+0000100399 00000 n
+0000100461 00000 n
+0000100524 00000 n
+0000100587 00000 n
+0000100650 00000 n
+0000100713 00000 n
+0000100776 00000 n
+0000100839 00000 n
+0000100902 00000 n
+0000100965 00000 n
+0000105808 00000 n
+0000104417 00000 n
+0000101290 00000 n
+0000104739 00000 n
+0001871504 00000 n
+0000104801 00000 n
+0000104864 00000 n
+0000104927 00000 n
+0000104990 00000 n
+0000105053 00000 n
+0000105116 00000 n
+0000105179 00000 n
+0000105242 00000 n
+0000105305 00000 n
+0000105368 00000 n
+0000105431 00000 n
+0000105494 00000 n
+0000105557 00000 n
+0000105620 00000 n
+0000105683 00000 n
+0000105746 00000 n
+0000104554 00000 n
+0000111799 00000 n
+0000108599 00000 n
+0000106062 00000 n
+0000108720 00000 n
+0000108782 00000 n
+0000108845 00000 n
+0000108908 00000 n
+0000108971 00000 n
+0000109034 00000 n
+0000109096 00000 n
+0000109159 00000 n
+0000109222 00000 n
+0000109285 00000 n
+0000109348 00000 n
+0000109411 00000 n
+0000109474 00000 n
+0000109537 00000 n
+0000109600 00000 n
+0000109662 00000 n
+0000109725 00000 n
+0000109788 00000 n
+0000109851 00000 n
+0000109914 00000 n
+0000109977 00000 n
+0000110040 00000 n
+0000110103 00000 n
+0000110166 00000 n
+0000110228 00000 n
+0000110291 00000 n
+0000110354 00000 n
+0000110417 00000 n
+0000110479 00000 n
+0000110542 00000 n
+0000110605 00000 n
+0000110668 00000 n
+0000110731 00000 n
+0000110794 00000 n
+0000110857 00000 n
+0000110920 00000 n
+0000110983 00000 n
+0000111045 00000 n
+0000111108 00000 n
+0000111171 00000 n
+0000111234 00000 n
+0000111297 00000 n
+0000111360 00000 n
+0000111423 00000 n
+0000111486 00000 n
+0000111549 00000 n
+0000111611 00000 n
+0000111674 00000 n
+0000111737 00000 n
+0001873629 00000 n
+0000117498 00000 n
+0000114611 00000 n
+0000111975 00000 n
+0000114732 00000 n
+0000114794 00000 n
+0000114857 00000 n
+0000114920 00000 n
+0000114983 00000 n
+0000115046 00000 n
+0000115109 00000 n
+0000115172 00000 n
+0000115235 00000 n
+0000115298 00000 n
+0000115359 00000 n
+0000115422 00000 n
+0000115485 00000 n
+0000115548 00000 n
+0000115611 00000 n
+0000115674 00000 n
+0000115737 00000 n
+0000115800 00000 n
+0000115863 00000 n
+0000115925 00000 n
+0000115988 00000 n
+0000116051 00000 n
+0000116114 00000 n
+0000116177 00000 n
+0000116240 00000 n
+0000116303 00000 n
+0000116366 00000 n
+0000116429 00000 n
+0000116491 00000 n
+0000116554 00000 n
+0000116617 00000 n
+0000116680 00000 n
+0000116743 00000 n
+0000116806 00000 n
+0000116869 00000 n
+0000116932 00000 n
+0000116995 00000 n
+0000117057 00000 n
+0000117120 00000 n
+0000117183 00000 n
+0000117246 00000 n
+0000117309 00000 n
+0000117372 00000 n
+0000117435 00000 n
+0000122819 00000 n
+0000120373 00000 n
+0000117687 00000 n
+0000120494 00000 n
+0000120556 00000 n
+0000120619 00000 n
+0000120681 00000 n
+0000120744 00000 n
+0000120807 00000 n
+0000120870 00000 n
+0000120933 00000 n
+0000120996 00000 n
+0000121059 00000 n
+0000121122 00000 n
+0000121185 00000 n
+0000121248 00000 n
+0000121310 00000 n
+0000121373 00000 n
+0000121436 00000 n
+0000121499 00000 n
+0000121562 00000 n
+0000121625 00000 n
+0000121688 00000 n
+0000121751 00000 n
+0000121814 00000 n
+0000121877 00000 n
+0000121940 00000 n
+0000122003 00000 n
+0000122065 00000 n
+0000122128 00000 n
+0000122191 00000 n
+0000122253 00000 n
+0000122316 00000 n
+0000122379 00000 n
+0000122442 00000 n
+0000122505 00000 n
+0000122568 00000 n
+0000122631 00000 n
+0000122693 00000 n
+0000122756 00000 n
+0000128381 00000 n
+0000125240 00000 n
+0000122995 00000 n
+0000125361 00000 n
+0000125423 00000 n
+0000125486 00000 n
+0000125549 00000 n
+0000125612 00000 n
+0000125675 00000 n
+0000125738 00000 n
+0000125801 00000 n
+0000125864 00000 n
+0000125927 00000 n
+0000125990 00000 n
+0000126053 00000 n
+0000126116 00000 n
+0000126179 00000 n
+0000126242 00000 n
+0000126304 00000 n
+0000126367 00000 n
+0000126430 00000 n
+0000126493 00000 n
+0000126556 00000 n
+0000126619 00000 n
+0000126682 00000 n
+0000126745 00000 n
+0000126869 00000 n
+0000126932 00000 n
+0000126995 00000 n
+0000127057 00000 n
+0000127120 00000 n
+0000127183 00000 n
+0000127246 00000 n
+0000127309 00000 n
+0000127372 00000 n
+0000127435 00000 n
+0000127498 00000 n
+0000127561 00000 n
+0000127622 00000 n
+0000127685 00000 n
+0000127748 00000 n
+0000127811 00000 n
+0000127874 00000 n
+0000127937 00000 n
+0000128000 00000 n
+0000128064 00000 n
+0000128128 00000 n
+0000128191 00000 n
+0000128255 00000 n
+0000128318 00000 n
+0000133222 00000 n
+0000130961 00000 n
+0000128570 00000 n
+0000131085 00000 n
+0000131149 00000 n
+0000131214 00000 n
+0000131278 00000 n
+0000131343 00000 n
+0000131408 00000 n
+0000131473 00000 n
+0000131538 00000 n
+0000131603 00000 n
+0000131668 00000 n
+0000131733 00000 n
+0000131798 00000 n
+0000131862 00000 n
+0000131927 00000 n
+0000131992 00000 n
+0000132057 00000 n
+0000132122 00000 n
+0000132187 00000 n
+0000132252 00000 n
+0000132317 00000 n
+0000132382 00000 n
+0000132446 00000 n
+0000132511 00000 n
+0000132576 00000 n
+0000132703 00000 n
+0000132768 00000 n
+0000132832 00000 n
+0000132897 00000 n
+0000132962 00000 n
+0000133027 00000 n
+0000133092 00000 n
+0000133157 00000 n
+0000137804 00000 n
+0000136123 00000 n
+0000133425 00000 n
+0000136247 00000 n
+0000136311 00000 n
+0000136376 00000 n
+0000136441 00000 n
+0000136506 00000 n
+0000136571 00000 n
+0000136636 00000 n
+0000136701 00000 n
+0000136766 00000 n
+0000136830 00000 n
+0000136895 00000 n
+0000136960 00000 n
+0000137025 00000 n
+0000137090 00000 n
+0000137155 00000 n
+0000137220 00000 n
+0000137285 00000 n
+0000137350 00000 n
+0000137415 00000 n
+0000137480 00000 n
+0000137545 00000 n
+0000137610 00000 n
+0000137675 00000 n
+0000137740 00000 n
+0000142153 00000 n
+0000140735 00000 n
+0000137981 00000 n
+0000140859 00000 n
+0000140923 00000 n
+0000140988 00000 n
+0000141053 00000 n
+0000141118 00000 n
+0000141183 00000 n
+0000141248 00000 n
+0000141313 00000 n
+0000141377 00000 n
+0000141442 00000 n
+0000141507 00000 n
+0000141572 00000 n
+0000141637 00000 n
+0000141702 00000 n
+0000141767 00000 n
+0000141832 00000 n
+0000141896 00000 n
+0000141960 00000 n
+0000142025 00000 n
+0000142089 00000 n
+0000147831 00000 n
+0000144855 00000 n
+0000142330 00000 n
+0000144979 00000 n
+0000145043 00000 n
+0000145108 00000 n
+0000145172 00000 n
+0000145237 00000 n
+0000145302 00000 n
+0000145367 00000 n
+0000145432 00000 n
+0000145497 00000 n
+0000145562 00000 n
+0000145626 00000 n
+0000145691 00000 n
+0000145756 00000 n
+0000145821 00000 n
+0000145886 00000 n
+0000145951 00000 n
+0000146016 00000 n
+0000146081 00000 n
+0000146146 00000 n
+0000146210 00000 n
+0000146275 00000 n
+0000146340 00000 n
+0000146405 00000 n
+0000146470 00000 n
+0000146535 00000 n
+0000146600 00000 n
+0000146665 00000 n
+0000146730 00000 n
+0000146793 00000 n
+0000146858 00000 n
+0000146923 00000 n
+0000146988 00000 n
+0000147053 00000 n
+0000147118 00000 n
+0000147183 00000 n
+0000147248 00000 n
+0000147313 00000 n
+0000147377 00000 n
+0000147442 00000 n
+0000147507 00000 n
+0000147572 00000 n
+0000147637 00000 n
+0000147702 00000 n
+0000147767 00000 n
+0000153912 00000 n
+0000150416 00000 n
+0000148008 00000 n
+0000150540 00000 n
+0000150604 00000 n
+0000150669 00000 n
+0000150734 00000 n
+0000150799 00000 n
+0000150864 00000 n
+0000150929 00000 n
+0000150993 00000 n
+0000151058 00000 n
+0000151123 00000 n
+0000151188 00000 n
+0000151253 00000 n
+0000151318 00000 n
+0000151383 00000 n
+0000151448 00000 n
+0000151512 00000 n
+0000151577 00000 n
+0000151642 00000 n
+0000151706 00000 n
+0000151771 00000 n
+0000151836 00000 n
+0000151901 00000 n
+0000151966 00000 n
+0000152031 00000 n
+0000152096 00000 n
+0000152161 00000 n
+0000152226 00000 n
+0000152290 00000 n
+0000152355 00000 n
+0000152420 00000 n
+0000152485 00000 n
+0000152550 00000 n
+0000152615 00000 n
+0000152680 00000 n
+0000152745 00000 n
+0000152810 00000 n
+0000152875 00000 n
+0000152940 00000 n
+0000153005 00000 n
+0000153070 00000 n
+0000153135 00000 n
+0000153200 00000 n
+0000153265 00000 n
+0000153330 00000 n
+0000153395 00000 n
+0000153460 00000 n
+0000153524 00000 n
+0000153589 00000 n
+0000153654 00000 n
+0000153719 00000 n
+0000153784 00000 n
+0000153848 00000 n
+0000160069 00000 n
+0000156119 00000 n
+0000154076 00000 n
+0000156243 00000 n
+0000156307 00000 n
+0000156372 00000 n
+0000156437 00000 n
+0000156502 00000 n
+0000156567 00000 n
+0000156632 00000 n
+0000156697 00000 n
+0000156762 00000 n
+0000156827 00000 n
+0000156891 00000 n
+0000156956 00000 n
+0000157021 00000 n
+0000157086 00000 n
+0000157151 00000 n
+0000157216 00000 n
+0000157281 00000 n
+0000157346 00000 n
+0000157411 00000 n
+0000157475 00000 n
+0000157540 00000 n
+0000157605 00000 n
+0000157670 00000 n
+0000157735 00000 n
+0000157800 00000 n
+0000157865 00000 n
+0000157930 00000 n
+0000157995 00000 n
+0000158060 00000 n
+0000158125 00000 n
+0000158190 00000 n
+0000158255 00000 n
+0000158320 00000 n
+0000158384 00000 n
+0000158449 00000 n
+0000158514 00000 n
+0000158579 00000 n
+0000158644 00000 n
+0000158709 00000 n
+0000158774 00000 n
+0000158839 00000 n
+0000158904 00000 n
+0000158969 00000 n
+0000159034 00000 n
+0000159099 00000 n
+0000159163 00000 n
+0000159228 00000 n
+0000159293 00000 n
+0000159358 00000 n
+0000159423 00000 n
+0000159488 00000 n
+0000159553 00000 n
+0000159618 00000 n
+0000159683 00000 n
+0000159746 00000 n
+0000159811 00000 n
+0000159876 00000 n
+0000159941 00000 n
+0000160005 00000 n
+0000166004 00000 n
+0000162378 00000 n
+0000160233 00000 n
+0000162503 00000 n
+0000162567 00000 n
+0000162632 00000 n
+0000162697 00000 n
+0000162762 00000 n
+0000162827 00000 n
+0000162892 00000 n
+0000162957 00000 n
+0000163022 00000 n
+0000163087 00000 n
+0000163152 00000 n
+0000163217 00000 n
+0000163280 00000 n
+0000163345 00000 n
+0000163410 00000 n
+0000163475 00000 n
+0000163540 00000 n
+0000163605 00000 n
+0000163670 00000 n
+0000163735 00000 n
+0000163800 00000 n
+0000163865 00000 n
+0000163930 00000 n
+0000163995 00000 n
+0000164059 00000 n
+0000164124 00000 n
+0000164189 00000 n
+0000164254 00000 n
+0000164319 00000 n
+0000164384 00000 n
+0000164449 00000 n
+0000164514 00000 n
+0000164578 00000 n
+0000164643 00000 n
+0000164708 00000 n
+0000164773 00000 n
+0000164838 00000 n
+0000164903 00000 n
+0000164968 00000 n
+0000165033 00000 n
+0000165098 00000 n
+0000165162 00000 n
+0000165227 00000 n
+0000165292 00000 n
+0000165357 00000 n
+0000165422 00000 n
+0000165487 00000 n
+0000165552 00000 n
+0000165617 00000 n
+0000165682 00000 n
+0000165747 00000 n
+0000165811 00000 n
+0000165876 00000 n
+0000165940 00000 n
+0001873789 00000 n
+0000171919 00000 n
+0000167905 00000 n
+0000166181 00000 n
+0000168030 00000 n
+0000168094 00000 n
+0000168159 00000 n
+0000168224 00000 n
+0000168289 00000 n
+0000168354 00000 n
+0000168419 00000 n
+0000168484 00000 n
+0000168549 00000 n
+0000168614 00000 n
+0000168678 00000 n
+0000168743 00000 n
+0000168808 00000 n
+0000168873 00000 n
+0000168938 00000 n
+0000169003 00000 n
+0000169068 00000 n
+0000169133 00000 n
+0000169198 00000 n
+0000169262 00000 n
+0000169327 00000 n
+0000169392 00000 n
+0000169457 00000 n
+0000169522 00000 n
+0000169587 00000 n
+0000169652 00000 n
+0000169717 00000 n
+0000169782 00000 n
+0000169845 00000 n
+0000169910 00000 n
+0000169975 00000 n
+0000170040 00000 n
+0000170105 00000 n
+0000170170 00000 n
+0000170235 00000 n
+0000170300 00000 n
+0000170365 00000 n
+0000170430 00000 n
+0000170494 00000 n
+0000170559 00000 n
+0000170624 00000 n
+0000170689 00000 n
+0000170754 00000 n
+0000170817 00000 n
+0000170882 00000 n
+0000170947 00000 n
+0000171012 00000 n
+0000171077 00000 n
+0000171142 00000 n
+0000171207 00000 n
+0000171272 00000 n
+0000171337 00000 n
+0000171401 00000 n
+0000171466 00000 n
+0000171531 00000 n
+0000171596 00000 n
+0000171661 00000 n
+0000171726 00000 n
+0000171791 00000 n
+0000171855 00000 n
+0000177339 00000 n
+0000174099 00000 n
+0000172070 00000 n
+0000174224 00000 n
+0000174288 00000 n
+0000174353 00000 n
+0000174418 00000 n
+0000174483 00000 n
+0000174548 00000 n
+0000174613 00000 n
+0000174678 00000 n
+0000174743 00000 n
+0000174808 00000 n
+0000174872 00000 n
+0000174937 00000 n
+0000175002 00000 n
+0000175067 00000 n
+0000175132 00000 n
+0000175197 00000 n
+0000175262 00000 n
+0000175327 00000 n
+0000175392 00000 n
+0000175456 00000 n
+0000175521 00000 n
+0000175586 00000 n
+0000175651 00000 n
+0000175716 00000 n
+0000175781 00000 n
+0000175846 00000 n
+0000175911 00000 n
+0000175976 00000 n
+0000176041 00000 n
+0000176106 00000 n
+0000176171 00000 n
+0000176235 00000 n
+0000176300 00000 n
+0000176365 00000 n
+0000176430 00000 n
+0000176495 00000 n
+0000176560 00000 n
+0000176625 00000 n
+0000176690 00000 n
+0000176755 00000 n
+0000176819 00000 n
+0000176884 00000 n
+0000176949 00000 n
+0000177014 00000 n
+0000177079 00000 n
+0000177144 00000 n
+0000177209 00000 n
+0000177274 00000 n
+0000183057 00000 n
+0000179882 00000 n
+0000177516 00000 n
+0000180007 00000 n
+0000180071 00000 n
+0000180136 00000 n
+0000180201 00000 n
+0000180266 00000 n
+0000180331 00000 n
+0000180396 00000 n
+0000180461 00000 n
+0000180526 00000 n
+0000180591 00000 n
+0000180656 00000 n
+0000180721 00000 n
+0000180786 00000 n
+0000180851 00000 n
+0000180916 00000 n
+0000180981 00000 n
+0000181046 00000 n
+0000181111 00000 n
+0000181176 00000 n
+0000181241 00000 n
+0000181306 00000 n
+0000181371 00000 n
+0000181435 00000 n
+0000181500 00000 n
+0000181565 00000 n
+0000181630 00000 n
+0000181695 00000 n
+0000181760 00000 n
+0000181825 00000 n
+0000181890 00000 n
+0000181955 00000 n
+0000182020 00000 n
+0000182085 00000 n
+0000182150 00000 n
+0000182215 00000 n
+0000182280 00000 n
+0000182345 00000 n
+0000182410 00000 n
+0000182475 00000 n
+0000182540 00000 n
+0000182605 00000 n
+0000182669 00000 n
+0000182734 00000 n
+0000182799 00000 n
+0000182864 00000 n
+0000182929 00000 n
+0000182993 00000 n
+0000188625 00000 n
+0000185323 00000 n
+0000183234 00000 n
+0000185448 00000 n
+0000185512 00000 n
+0000185577 00000 n
+0000185642 00000 n
+0000185707 00000 n
+0000185772 00000 n
+0000185837 00000 n
+0000185902 00000 n
+0000185967 00000 n
+0000186032 00000 n
+0000186097 00000 n
+0000186161 00000 n
+0000186226 00000 n
+0000186291 00000 n
+0000186356 00000 n
+0000186421 00000 n
+0000186486 00000 n
+0000186551 00000 n
+0000186616 00000 n
+0000186681 00000 n
+0000186745 00000 n
+0000186810 00000 n
+0000186875 00000 n
+0000186940 00000 n
+0000187005 00000 n
+0000187070 00000 n
+0000187135 00000 n
+0000187200 00000 n
+0000187264 00000 n
+0000187329 00000 n
+0000187394 00000 n
+0000187459 00000 n
+0000187524 00000 n
+0000187589 00000 n
+0000187654 00000 n
+0000187719 00000 n
+0000187784 00000 n
+0000187848 00000 n
+0000187913 00000 n
+0000187978 00000 n
+0000188043 00000 n
+0000188108 00000 n
+0000188173 00000 n
+0000188238 00000 n
+0000188303 00000 n
+0000188368 00000 n
+0000188433 00000 n
+0000188497 00000 n
+0000188561 00000 n
+0000193322 00000 n
+0000191190 00000 n
+0000188815 00000 n
+0000191315 00000 n
+0000191379 00000 n
+0000191444 00000 n
+0000191509 00000 n
+0000191574 00000 n
+0000191639 00000 n
+0000191766 00000 n
+0000191831 00000 n
+0000191896 00000 n
+0000191961 00000 n
+0000192026 00000 n
+0000192091 00000 n
+0000192156 00000 n
+0000192221 00000 n
+0000192286 00000 n
+0000192350 00000 n
+0000192414 00000 n
+0000192479 00000 n
+0000192544 00000 n
+0000192609 00000 n
+0000192674 00000 n
+0000192738 00000 n
+0000192803 00000 n
+0000192868 00000 n
+0000192933 00000 n
+0000192998 00000 n
+0000193063 00000 n
+0000193128 00000 n
+0000193193 00000 n
+0000193258 00000 n
+0000198987 00000 n
+0000195944 00000 n
+0000193525 00000 n
+0000196069 00000 n
+0000196133 00000 n
+0000196198 00000 n
+0000196262 00000 n
+0000196327 00000 n
+0000196392 00000 n
+0000196457 00000 n
+0000196522 00000 n
+0000196587 00000 n
+0000196652 00000 n
+0000196717 00000 n
+0000196782 00000 n
+0000196847 00000 n
+0000196912 00000 n
+0000196977 00000 n
+0000197042 00000 n
+0000197107 00000 n
+0000197172 00000 n
+0000197237 00000 n
+0000197302 00000 n
+0000197366 00000 n
+0000197431 00000 n
+0000197496 00000 n
+0000197561 00000 n
+0000197626 00000 n
+0000197691 00000 n
+0000197756 00000 n
+0000197821 00000 n
+0000197886 00000 n
+0000197950 00000 n
+0000198015 00000 n
+0000198080 00000 n
+0000198145 00000 n
+0000198210 00000 n
+0000198275 00000 n
+0000198340 00000 n
+0000198405 00000 n
+0000198470 00000 n
+0000198535 00000 n
+0000198600 00000 n
+0000198665 00000 n
+0000198730 00000 n
+0000198795 00000 n
+0000198860 00000 n
+0000198923 00000 n
+0000204810 00000 n
+0000200727 00000 n
+0000199177 00000 n
+0000200852 00000 n
+0000200916 00000 n
+0000200981 00000 n
+0000201046 00000 n
+0000201111 00000 n
+0000201176 00000 n
+0000201241 00000 n
+0000201306 00000 n
+0000201371 00000 n
+0000201436 00000 n
+0000201501 00000 n
+0000201565 00000 n
+0000201630 00000 n
+0000201695 00000 n
+0000201760 00000 n
+0000201825 00000 n
+0000201890 00000 n
+0000201955 00000 n
+0000202020 00000 n
+0000202085 00000 n
+0000202149 00000 n
+0000202214 00000 n
+0000202279 00000 n
+0000202344 00000 n
+0000202409 00000 n
+0000202474 00000 n
+0000202539 00000 n
+0000202604 00000 n
+0000202669 00000 n
+0000202733 00000 n
+0000202798 00000 n
+0000202863 00000 n
+0000202928 00000 n
+0000202993 00000 n
+0000203058 00000 n
+0000203123 00000 n
+0000203188 00000 n
+0000203253 00000 n
+0000203318 00000 n
+0000203382 00000 n
+0000203447 00000 n
+0000203512 00000 n
+0000203577 00000 n
+0000203642 00000 n
+0000203707 00000 n
+0000203772 00000 n
+0000203837 00000 n
+0000203902 00000 n
+0000203967 00000 n
+0000204032 00000 n
+0000204097 00000 n
+0000204162 00000 n
+0000204227 00000 n
+0000204292 00000 n
+0000204357 00000 n
+0000204422 00000 n
+0000204487 00000 n
+0000204552 00000 n
+0000204617 00000 n
+0000204682 00000 n
+0000204746 00000 n
+0000210260 00000 n
+0000208059 00000 n
+0000204961 00000 n
+0000208184 00000 n
+0000208248 00000 n
+0000208313 00000 n
+0000208378 00000 n
+0000208443 00000 n
+0000208508 00000 n
+0000208573 00000 n
+0000208638 00000 n
+0000208703 00000 n
+0000208768 00000 n
+0000208833 00000 n
+0000208898 00000 n
+0000208963 00000 n
+0000209028 00000 n
+0000209093 00000 n
+0000209158 00000 n
+0000209223 00000 n
+0000209288 00000 n
+0000209353 00000 n
+0000209418 00000 n
+0000209482 00000 n
+0000209547 00000 n
+0000209612 00000 n
+0000209677 00000 n
+0000209742 00000 n
+0000209807 00000 n
+0000209872 00000 n
+0000209937 00000 n
+0000210002 00000 n
+0000210067 00000 n
+0000210132 00000 n
+0000210196 00000 n
+0000216009 00000 n
+0000212642 00000 n
+0000210476 00000 n
+0000212767 00000 n
+0000212831 00000 n
+0000212896 00000 n
+0000212961 00000 n
+0000213026 00000 n
+0000213091 00000 n
+0000213156 00000 n
+0000213221 00000 n
+0000213286 00000 n
+0000213351 00000 n
+0000213415 00000 n
+0000213480 00000 n
+0000213545 00000 n
+0000213610 00000 n
+0000213675 00000 n
+0000213740 00000 n
+0000213803 00000 n
+0000213868 00000 n
+0000213933 00000 n
+0000213998 00000 n
+0000214063 00000 n
+0000214128 00000 n
+0000214193 00000 n
+0000214258 00000 n
+0000214323 00000 n
+0000214388 00000 n
+0000214453 00000 n
+0000214518 00000 n
+0000214583 00000 n
+0000214648 00000 n
+0000214713 00000 n
+0000214778 00000 n
+0000214842 00000 n
+0000214907 00000 n
+0000214971 00000 n
+0000215036 00000 n
+0000215101 00000 n
+0000215166 00000 n
+0000215231 00000 n
+0000215296 00000 n
+0000215361 00000 n
+0000215426 00000 n
+0000215491 00000 n
+0000215556 00000 n
+0000215621 00000 n
+0000215686 00000 n
+0000215751 00000 n
+0000215816 00000 n
+0000215881 00000 n
+0000215945 00000 n
+0000223045 00000 n
+0000220456 00000 n
+0000216186 00000 n
+0000220581 00000 n
+0000220645 00000 n
+0000220710 00000 n
+0000220775 00000 n
+0000220840 00000 n
+0000220905 00000 n
+0000220970 00000 n
+0000221035 00000 n
+0000221100 00000 n
+0000221165 00000 n
+0000221230 00000 n
+0000221295 00000 n
+0000221360 00000 n
+0000221425 00000 n
+0000221489 00000 n
+0000221554 00000 n
+0000221619 00000 n
+0000221684 00000 n
+0000221749 00000 n
+0000221814 00000 n
+0000221879 00000 n
+0000221944 00000 n
+0000222008 00000 n
+0000222073 00000 n
+0000222138 00000 n
+0000222203 00000 n
+0000222268 00000 n
+0001871687 00000 n
+0000222333 00000 n
+0000222398 00000 n
+0000222463 00000 n
+0000222528 00000 n
+0000222593 00000 n
+0000222657 00000 n
+0000222722 00000 n
+0000222787 00000 n
+0000222852 00000 n
+0000222917 00000 n
+0000222981 00000 n
+0001873954 00000 n
+0000229182 00000 n
+0000225812 00000 n
+0000223249 00000 n
+0000225937 00000 n
+0000226001 00000 n
+0000226066 00000 n
+0000226131 00000 n
+0000226196 00000 n
+0000226261 00000 n
+0000226326 00000 n
+0000226391 00000 n
+0000226456 00000 n
+0000226521 00000 n
+0000226586 00000 n
+0000226651 00000 n
+0000226716 00000 n
+0000226781 00000 n
+0000226846 00000 n
+0000226911 00000 n
+0000226976 00000 n
+0000227040 00000 n
+0000227105 00000 n
+0000227170 00000 n
+0000227235 00000 n
+0000227300 00000 n
+0000227365 00000 n
+0000227430 00000 n
+0000227495 00000 n
+0000227560 00000 n
+0000227625 00000 n
+0000227690 00000 n
+0000227755 00000 n
+0000227820 00000 n
+0000227885 00000 n
+0000227950 00000 n
+0000228015 00000 n
+0000228080 00000 n
+0000228145 00000 n
+0000228210 00000 n
+0000228275 00000 n
+0000228340 00000 n
+0000228405 00000 n
+0000228470 00000 n
+0000228535 00000 n
+0000228600 00000 n
+0000228665 00000 n
+0000228730 00000 n
+0000228794 00000 n
+0000228859 00000 n
+0000228924 00000 n
+0000228989 00000 n
+0000229054 00000 n
+0000229118 00000 n
+0000234924 00000 n
+0000231492 00000 n
+0000229359 00000 n
+0000231617 00000 n
+0000231681 00000 n
+0000231745 00000 n
+0000231810 00000 n
+0000231875 00000 n
+0000231940 00000 n
+0000232005 00000 n
+0000232070 00000 n
+0000232134 00000 n
+0000232199 00000 n
+0000232264 00000 n
+0000232329 00000 n
+0000232394 00000 n
+0000232459 00000 n
+0000232524 00000 n
+0000232589 00000 n
+0000232654 00000 n
+0000232719 00000 n
+0000232784 00000 n
+0000232849 00000 n
+0000232913 00000 n
+0000232978 00000 n
+0000233043 00000 n
+0000233108 00000 n
+0000233173 00000 n
+0000233238 00000 n
+0000233303 00000 n
+0000233368 00000 n
+0000233433 00000 n
+0000233498 00000 n
+0000233563 00000 n
+0000233628 00000 n
+0000233693 00000 n
+0000233758 00000 n
+0000233823 00000 n
+0000233888 00000 n
+0000233953 00000 n
+0000234017 00000 n
+0000234082 00000 n
+0000234147 00000 n
+0000234212 00000 n
+0000234277 00000 n
+0000234342 00000 n
+0000234407 00000 n
+0000234472 00000 n
+0000234537 00000 n
+0000234601 00000 n
+0000234666 00000 n
+0000234731 00000 n
+0000234796 00000 n
+0000234860 00000 n
+0000238486 00000 n
+0000238643 00000 n
+0000241394 00000 n
+0000238304 00000 n
+0000235140 00000 n
+0000238800 00000 n
+0000238864 00000 n
+0000238929 00000 n
+0000238994 00000 n
+0000239059 00000 n
+0000239124 00000 n
+0000239189 00000 n
+0000239254 00000 n
+0000239319 00000 n
+0000239384 00000 n
+0000239448 00000 n
+0000239513 00000 n
+0000239578 00000 n
+0000239643 00000 n
+0000239708 00000 n
+0000239773 00000 n
+0000239838 00000 n
+0000239903 00000 n
+0000239968 00000 n
+0000240033 00000 n
+0000240098 00000 n
+0000240163 00000 n
+0000240228 00000 n
+0000240293 00000 n
+0000240357 00000 n
+0000240422 00000 n
+0000240487 00000 n
+0000240552 00000 n
+0000240617 00000 n
+0000240682 00000 n
+0000240747 00000 n
+0000240812 00000 n
+0000240875 00000 n
+0000240940 00000 n
+0000241005 00000 n
+0000241070 00000 n
+0000241135 00000 n
+0000241199 00000 n
+0000241264 00000 n
+0000241329 00000 n
+0000238446 00000 n
+0000246705 00000 n
+0000243857 00000 n
+0000241636 00000 n
+0000243982 00000 n
+0000244046 00000 n
+0000244111 00000 n
+0000244176 00000 n
+0000244241 00000 n
+0000244306 00000 n
+0000244371 00000 n
+0000244436 00000 n
+0000244501 00000 n
+0000244566 00000 n
+0000244631 00000 n
+0000244696 00000 n
+0000244759 00000 n
+0000244824 00000 n
+0000244889 00000 n
+0000244954 00000 n
+0000245018 00000 n
+0000245083 00000 n
+0000245148 00000 n
+0000245213 00000 n
+0000245278 00000 n
+0000245343 00000 n
+0000245408 00000 n
+0000245473 00000 n
+0000245538 00000 n
+0000245603 00000 n
+0000245667 00000 n
+0000245732 00000 n
+0000245797 00000 n
+0000245862 00000 n
+0000245927 00000 n
+0000245992 00000 n
+0000246057 00000 n
+0000246122 00000 n
+0000246187 00000 n
+0000246252 00000 n
+0000246317 00000 n
+0000246382 00000 n
+0000246447 00000 n
+0000246512 00000 n
+0000246577 00000 n
+0000246640 00000 n
+0000253070 00000 n
+0000249766 00000 n
+0000246895 00000 n
+0000249891 00000 n
+0000249955 00000 n
+0000250020 00000 n
+0000250085 00000 n
+0000250150 00000 n
+0000250215 00000 n
+0000250280 00000 n
+0000250345 00000 n
+0000250409 00000 n
+0000250474 00000 n
+0000250539 00000 n
+0000250604 00000 n
+0000250669 00000 n
+0000250734 00000 n
+0000250799 00000 n
+0000250864 00000 n
+0000250929 00000 n
+0000250993 00000 n
+0000251058 00000 n
+0000251123 00000 n
+0000251188 00000 n
+0000251253 00000 n
+0000251318 00000 n
+0000251383 00000 n
+0000251448 00000 n
+0000251513 00000 n
+0000251577 00000 n
+0000251642 00000 n
+0000251707 00000 n
+0000251772 00000 n
+0000251837 00000 n
+0000251902 00000 n
+0000251967 00000 n
+0000252032 00000 n
+0000252097 00000 n
+0000252161 00000 n
+0000252226 00000 n
+0000252291 00000 n
+0000252355 00000 n
+0000252420 00000 n
+0000252485 00000 n
+0000252550 00000 n
+0000252615 00000 n
+0000252680 00000 n
+0000252745 00000 n
+0000252810 00000 n
+0000252875 00000 n
+0000252940 00000 n
+0000253005 00000 n
+0000258456 00000 n
+0000256127 00000 n
+0000253286 00000 n
+0000256252 00000 n
+0000256316 00000 n
+0000256381 00000 n
+0000256445 00000 n
+0000256510 00000 n
+0000256575 00000 n
+0000256640 00000 n
+0000256705 00000 n
+0000256770 00000 n
+0000256835 00000 n
+0000256900 00000 n
+0000256965 00000 n
+0000257030 00000 n
+0000257095 00000 n
+0000257160 00000 n
+0000257225 00000 n
+0000257290 00000 n
+0000257355 00000 n
+0000257420 00000 n
+0000257485 00000 n
+0000257549 00000 n
+0000257614 00000 n
+0000257679 00000 n
+0000257744 00000 n
+0000257809 00000 n
+0000257874 00000 n
+0000257939 00000 n
+0000258004 00000 n
+0000258069 00000 n
+0000258134 00000 n
+0000258199 00000 n
+0000258264 00000 n
+0000258328 00000 n
+0000258392 00000 n
+0000263630 00000 n
+0000261302 00000 n
+0000258659 00000 n
+0000261427 00000 n
+0000261491 00000 n
+0000261556 00000 n
+0000261621 00000 n
+0000261686 00000 n
+0000261751 00000 n
+0000261816 00000 n
+0000261880 00000 n
+0000261945 00000 n
+0000262010 00000 n
+0000262075 00000 n
+0000262140 00000 n
+0000262204 00000 n
+0000262269 00000 n
+0000262334 00000 n
+0000262399 00000 n
+0000262464 00000 n
+0000262528 00000 n
+0000262593 00000 n
+0000262658 00000 n
+0000262723 00000 n
+0000262788 00000 n
+0000262853 00000 n
+0000262918 00000 n
+0000262983 00000 n
+0000263048 00000 n
+0000263113 00000 n
+0000263178 00000 n
+0000263242 00000 n
+0000263307 00000 n
+0000263372 00000 n
+0000263437 00000 n
+0000263502 00000 n
+0000263566 00000 n
+0000268679 00000 n
+0000266548 00000 n
+0000263833 00000 n
+0000266673 00000 n
+0000266737 00000 n
+0000266802 00000 n
+0000266867 00000 n
+0000266932 00000 n
+0000266997 00000 n
+0000267062 00000 n
+0000267127 00000 n
+0000267192 00000 n
+0000267256 00000 n
+0000267321 00000 n
+0000267386 00000 n
+0000267451 00000 n
+0000267516 00000 n
+0000267580 00000 n
+0000267645 00000 n
+0000267710 00000 n
+0000267775 00000 n
+0000267840 00000 n
+0000267905 00000 n
+0000268032 00000 n
+0000268095 00000 n
+0000268160 00000 n
+0000268225 00000 n
+0000268289 00000 n
+0000268354 00000 n
+0000268419 00000 n
+0000268484 00000 n
+0000268549 00000 n
+0000268614 00000 n
+0000274236 00000 n
+0000271127 00000 n
+0000268856 00000 n
+0000271252 00000 n
+0000271316 00000 n
+0000271381 00000 n
+0000271446 00000 n
+0000271511 00000 n
+0000271576 00000 n
+0000271641 00000 n
+0000271706 00000 n
+0000271771 00000 n
+0000271836 00000 n
+0000271901 00000 n
+0000271966 00000 n
+0000272031 00000 n
+0000272095 00000 n
+0000272160 00000 n
+0000272225 00000 n
+0000272290 00000 n
+0000272355 00000 n
+0000272420 00000 n
+0000272485 00000 n
+0000272550 00000 n
+0000272615 00000 n
+0000272680 00000 n
+0000272745 00000 n
+0000272810 00000 n
+0000272874 00000 n
+0000272939 00000 n
+0000273004 00000 n
+0000273069 00000 n
+0000273134 00000 n
+0000273199 00000 n
+0000273264 00000 n
+0000273329 00000 n
+0000273394 00000 n
+0000273458 00000 n
+0000273523 00000 n
+0000273588 00000 n
+0000273653 00000 n
+0000273718 00000 n
+0000273783 00000 n
+0000273847 00000 n
+0000273912 00000 n
+0000273977 00000 n
+0000274042 00000 n
+0000274107 00000 n
+0000274172 00000 n
+0000280193 00000 n
+0000277538 00000 n
+0000274426 00000 n
+0000277663 00000 n
+0000277727 00000 n
+0000277792 00000 n
+0000277857 00000 n
+0000277922 00000 n
+0000277987 00000 n
+0000278052 00000 n
+0000278117 00000 n
+0000278182 00000 n
+0000278247 00000 n
+0000278312 00000 n
+0000278377 00000 n
+0000278442 00000 n
+0000278507 00000 n
+0000278572 00000 n
+0000278637 00000 n
+0000278702 00000 n
+0000278767 00000 n
+0000278832 00000 n
+0000278897 00000 n
+0000278962 00000 n
+0000279027 00000 n
+0000279092 00000 n
+0000279157 00000 n
+0000279222 00000 n
+0000279287 00000 n
+0000279352 00000 n
+0000279417 00000 n
+0000279482 00000 n
+0000279547 00000 n
+0000279612 00000 n
+0000279677 00000 n
+0000279742 00000 n
+0000279807 00000 n
+0000279871 00000 n
+0000279936 00000 n
+0000280001 00000 n
+0000280065 00000 n
+0000280129 00000 n
+0001874119 00000 n
+0000282685 00000 n
+0000286538 00000 n
+0000282512 00000 n
+0000280396 00000 n
+0000282842 00000 n
+0000282906 00000 n
+0000282971 00000 n
+0000283036 00000 n
+0000283101 00000 n
+0000283166 00000 n
+0000283231 00000 n
+0000283296 00000 n
+0000283361 00000 n
+0000283426 00000 n
+0000283490 00000 n
+0000283555 00000 n
+0000283620 00000 n
+0000283685 00000 n
+0000283750 00000 n
+0000283815 00000 n
+0000283880 00000 n
+0000283945 00000 n
+0000284010 00000 n
+0000284074 00000 n
+0000284139 00000 n
+0000284204 00000 n
+0000284269 00000 n
+0000284334 00000 n
+0000284399 00000 n
+0000284464 00000 n
+0000284529 00000 n
+0000284594 00000 n
+0000284657 00000 n
+0000284722 00000 n
+0000284787 00000 n
+0000284852 00000 n
+0000284917 00000 n
+0000284982 00000 n
+0000285047 00000 n
+0000285112 00000 n
+0000285177 00000 n
+0000285241 00000 n
+0000285306 00000 n
+0000285371 00000 n
+0000285436 00000 n
+0000285501 00000 n
+0000285565 00000 n
+0000285630 00000 n
+0000285695 00000 n
+0000285760 00000 n
+0000285825 00000 n
+0000285890 00000 n
+0000285955 00000 n
+0000286020 00000 n
+0000286085 00000 n
+0000286149 00000 n
+0000286214 00000 n
+0000286279 00000 n
+0000286344 00000 n
+0000286409 00000 n
+0000286474 00000 n
+0000282654 00000 n
+0000295448 00000 n
+0000291970 00000 n
+0000288608 00000 n
+0000286754 00000 n
+0000288733 00000 n
+0000288797 00000 n
+0000288862 00000 n
+0000288927 00000 n
+0000288992 00000 n
+0000289057 00000 n
+0000289122 00000 n
+0000289187 00000 n
+0000289252 00000 n
+0000289317 00000 n
+0000289381 00000 n
+0000289446 00000 n
+0000289511 00000 n
+0000289576 00000 n
+0000289639 00000 n
+0000289704 00000 n
+0000289769 00000 n
+0000289834 00000 n
+0000289899 00000 n
+0000289964 00000 n
+0000290029 00000 n
+0000290094 00000 n
+0000290159 00000 n
+0000290224 00000 n
+0000290289 00000 n
+0000290354 00000 n
+0000290419 00000 n
+0000290546 00000 n
+0000290611 00000 n
+0000290676 00000 n
+0000290741 00000 n
+0000290806 00000 n
+0000290871 00000 n
+0000290935 00000 n
+0000290999 00000 n
+0000291064 00000 n
+0000291129 00000 n
+0000291194 00000 n
+0000291258 00000 n
+0000291323 00000 n
+0000291388 00000 n
+0000291453 00000 n
+0000291518 00000 n
+0000291583 00000 n
+0000291647 00000 n
+0000291712 00000 n
+0000291777 00000 n
+0000291842 00000 n
+0000291906 00000 n
+0000297942 00000 n
+0000295275 00000 n
+0000292147 00000 n
+0000295605 00000 n
+0000295669 00000 n
+0000295734 00000 n
+0000295799 00000 n
+0000295863 00000 n
+0000295928 00000 n
+0000295993 00000 n
+0000296058 00000 n
+0000296123 00000 n
+0000296188 00000 n
+0000296253 00000 n
+0000296318 00000 n
+0000296383 00000 n
+0000296448 00000 n
+0000296513 00000 n
+0000296578 00000 n
+0000296643 00000 n
+0000296708 00000 n
+0000296773 00000 n
+0000296838 00000 n
+0000296903 00000 n
+0000296968 00000 n
+0000297033 00000 n
+0000297098 00000 n
+0000297163 00000 n
+0000297228 00000 n
+0000297293 00000 n
+0000297358 00000 n
+0000297423 00000 n
+0000297488 00000 n
+0000297553 00000 n
+0000297618 00000 n
+0000297683 00000 n
+0000297748 00000 n
+0000297813 00000 n
+0000297878 00000 n
+0000295417 00000 n
+0000303934 00000 n
+0000300762 00000 n
+0000298197 00000 n
+0000300887 00000 n
+0000300951 00000 n
+0000301016 00000 n
+0000301081 00000 n
+0000301146 00000 n
+0000301211 00000 n
+0000301276 00000 n
+0000301341 00000 n
+0000301406 00000 n
+0000301471 00000 n
+0000301536 00000 n
+0000301600 00000 n
+0000301665 00000 n
+0000301730 00000 n
+0000301795 00000 n
+0000301860 00000 n
+0000301925 00000 n
+0000301990 00000 n
+0000302055 00000 n
+0000302120 00000 n
+0000302184 00000 n
+0000302249 00000 n
+0000302314 00000 n
+0000302379 00000 n
+0000302444 00000 n
+0000302509 00000 n
+0000302574 00000 n
+0000302639 00000 n
+0000302704 00000 n
+0000302769 00000 n
+0000302834 00000 n
+0000302899 00000 n
+0000302964 00000 n
+0000303028 00000 n
+0000303093 00000 n
+0000303158 00000 n
+0000303223 00000 n
+0000303288 00000 n
+0000303353 00000 n
+0000303418 00000 n
+0000303483 00000 n
+0000303548 00000 n
+0000303611 00000 n
+0000303676 00000 n
+0000303741 00000 n
+0000303806 00000 n
+0000303870 00000 n
+0000306905 00000 n
+0000307062 00000 n
+0000310204 00000 n
+0000306723 00000 n
+0000304124 00000 n
+0000307220 00000 n
+0000307284 00000 n
+0000307349 00000 n
+0000307414 00000 n
+0000307479 00000 n
+0000307544 00000 n
+0000307609 00000 n
+0000307674 00000 n
+0000307739 00000 n
+0000307804 00000 n
+0000307869 00000 n
+0000307934 00000 n
+0000307999 00000 n
+0000308064 00000 n
+0000308129 00000 n
+0000308194 00000 n
+0000308259 00000 n
+0000308324 00000 n
+0000308389 00000 n
+0000308454 00000 n
+0000308519 00000 n
+0000308584 00000 n
+0000308649 00000 n
+0000308714 00000 n
+0000308779 00000 n
+0000308844 00000 n
+0000308909 00000 n
+0000308974 00000 n
+0000309039 00000 n
+0000309104 00000 n
+0000309168 00000 n
+0000309233 00000 n
+0000309298 00000 n
+0000309361 00000 n
+0000309426 00000 n
+0000309491 00000 n
+0000309556 00000 n
+0000309621 00000 n
+0000309686 00000 n
+0000309751 00000 n
+0000309816 00000 n
+0000309881 00000 n
+0000309945 00000 n
+0000310010 00000 n
+0000310075 00000 n
+0000310140 00000 n
+0000306865 00000 n
+0000313300 00000 n
+0000313457 00000 n
+0000316792 00000 n
+0000313118 00000 n
+0000310433 00000 n
+0000313615 00000 n
+0000313679 00000 n
+0000313744 00000 n
+0000313809 00000 n
+0000313874 00000 n
+0000313939 00000 n
+0000314004 00000 n
+0000314069 00000 n
+0000314134 00000 n
+0000314198 00000 n
+0000314263 00000 n
+0000314328 00000 n
+0000314393 00000 n
+0000314458 00000 n
+0000314523 00000 n
+0000314588 00000 n
+0000314653 00000 n
+0000314717 00000 n
+0000314781 00000 n
+0000314846 00000 n
+0000314911 00000 n
+0000314976 00000 n
+0000315041 00000 n
+0000315106 00000 n
+0000315171 00000 n
+0000315236 00000 n
+0000315301 00000 n
+0000315365 00000 n
+0000315430 00000 n
+0000315495 00000 n
+0000315560 00000 n
+0000315623 00000 n
+0000315688 00000 n
+0000315753 00000 n
+0000315818 00000 n
+0000315883 00000 n
+0000315948 00000 n
+0000316013 00000 n
+0000316078 00000 n
+0000316143 00000 n
+0000316208 00000 n
+0000316273 00000 n
+0000316338 00000 n
+0000316403 00000 n
+0000316468 00000 n
+0000316533 00000 n
+0000316598 00000 n
+0000316663 00000 n
+0000316728 00000 n
+0000313260 00000 n
+0000321945 00000 n
+0000319423 00000 n
+0000317060 00000 n
+0000319548 00000 n
+0000319612 00000 n
+0000319677 00000 n
+0000319742 00000 n
+0000319807 00000 n
+0000319872 00000 n
+0000319937 00000 n
+0000320002 00000 n
+0000320066 00000 n
+0000320131 00000 n
+0000320196 00000 n
+0000320261 00000 n
+0000320326 00000 n
+0000320391 00000 n
+0000320518 00000 n
+0000320582 00000 n
+0000320647 00000 n
+0000320712 00000 n
+0000320777 00000 n
+0000320842 00000 n
+0000320907 00000 n
+0000320972 00000 n
+0000321037 00000 n
+0000321102 00000 n
+0000321167 00000 n
+0000321232 00000 n
+0000321297 00000 n
+0000321362 00000 n
+0000321427 00000 n
+0000321492 00000 n
+0000321557 00000 n
+0000321622 00000 n
+0000321687 00000 n
+0000321752 00000 n
+0000321817 00000 n
+0000321881 00000 n
+0000327258 00000 n
+0000324280 00000 n
+0000322135 00000 n
+0000324405 00000 n
+0000324469 00000 n
+0000324534 00000 n
+0000324599 00000 n
+0000324664 00000 n
+0000324729 00000 n
+0000324793 00000 n
+0000324858 00000 n
+0000324923 00000 n
+0000324988 00000 n
+0000325053 00000 n
+0000325118 00000 n
+0000325183 00000 n
+0000325248 00000 n
+0000325313 00000 n
+0000325378 00000 n
+0000325443 00000 n
+0000325508 00000 n
+0000325573 00000 n
+0000325638 00000 n
+0000325702 00000 n
+0000325767 00000 n
+0000325832 00000 n
+0000325897 00000 n
+0000325962 00000 n
+0000326027 00000 n
+0000326092 00000 n
+0000326157 00000 n
+0000326222 00000 n
+0000326286 00000 n
+0000326351 00000 n
+0000326416 00000 n
+0000326481 00000 n
+0000326546 00000 n
+0000326611 00000 n
+0000326676 00000 n
+0000326741 00000 n
+0000326806 00000 n
+0000326870 00000 n
+0000326935 00000 n
+0000327000 00000 n
+0000327065 00000 n
+0000327130 00000 n
+0000327194 00000 n
+0000330079 00000 n
+0000333219 00000 n
+0000329906 00000 n
+0000327435 00000 n
+0000330236 00000 n
+0000330300 00000 n
+0000330365 00000 n
+0000330430 00000 n
+0000330495 00000 n
+0000330560 00000 n
+0000330625 00000 n
+0000330690 00000 n
+0000330755 00000 n
+0000330820 00000 n
+0000330884 00000 n
+0000330949 00000 n
+0000331014 00000 n
+0000331079 00000 n
+0000331144 00000 n
+0000331209 00000 n
+0000331274 00000 n
+0000331339 00000 n
+0000331404 00000 n
+0000331468 00000 n
+0000331533 00000 n
+0000331598 00000 n
+0000331663 00000 n
+0000331728 00000 n
+0000331793 00000 n
+0000331858 00000 n
+0000331923 00000 n
+0000331988 00000 n
+0000332053 00000 n
+0000332116 00000 n
+0000332181 00000 n
+0000332246 00000 n
+0000332310 00000 n
+0000332375 00000 n
+0000332439 00000 n
+0000332504 00000 n
+0000332569 00000 n
+0000332634 00000 n
+0000332699 00000 n
+0000332764 00000 n
+0000332829 00000 n
+0000332894 00000 n
+0000332959 00000 n
+0000333024 00000 n
+0000333089 00000 n
+0000333154 00000 n
+0000330048 00000 n
+0000338597 00000 n
+0000335036 00000 n
+0000333448 00000 n
+0000335161 00000 n
+0000335225 00000 n
+0000335290 00000 n
+0000335355 00000 n
+0000335420 00000 n
+0000335485 00000 n
+0000335550 00000 n
+0000335615 00000 n
+0000335680 00000 n
+0000335745 00000 n
+0000335809 00000 n
+0000335873 00000 n
+0000335938 00000 n
+0000336003 00000 n
+0000336068 00000 n
+0000336133 00000 n
+0000336198 00000 n
+0000336263 00000 n
+0000336328 00000 n
+0000336393 00000 n
+0000336457 00000 n
+0000336522 00000 n
+0000336587 00000 n
+0000336652 00000 n
+0000336717 00000 n
+0000336782 00000 n
+0000336847 00000 n
+0000336912 00000 n
+0000336977 00000 n
+0000337042 00000 n
+0000337107 00000 n
+0000337171 00000 n
+0000337236 00000 n
+0000337301 00000 n
+0000337366 00000 n
+0000337431 00000 n
+0000337496 00000 n
+0000337561 00000 n
+0000337626 00000 n
+0000337691 00000 n
+0000337756 00000 n
+0000337821 00000 n
+0000337885 00000 n
+0000337949 00000 n
+0000338014 00000 n
+0000338078 00000 n
+0000338143 00000 n
+0000338208 00000 n
+0000338273 00000 n
+0000338338 00000 n
+0000338403 00000 n
+0000338468 00000 n
+0000338533 00000 n
+0001874284 00000 n
+0000344445 00000 n
+0000340886 00000 n
+0000338761 00000 n
+0000341011 00000 n
+0000341075 00000 n
+0000341140 00000 n
+0000341205 00000 n
+0000341270 00000 n
+0000341335 00000 n
+0000341400 00000 n
+0000341465 00000 n
+0000341530 00000 n
+0000341595 00000 n
+0000341660 00000 n
+0000341724 00000 n
+0000341789 00000 n
+0000341854 00000 n
+0000341919 00000 n
+0000341984 00000 n
+0000342047 00000 n
+0000342112 00000 n
+0000342177 00000 n
+0000342242 00000 n
+0000342307 00000 n
+0000342372 00000 n
+0000342437 00000 n
+0000342502 00000 n
+0000342567 00000 n
+0000342631 00000 n
+0000342696 00000 n
+0000342761 00000 n
+0000342826 00000 n
+0000342891 00000 n
+0000342956 00000 n
+0000343021 00000 n
+0000343085 00000 n
+0000343150 00000 n
+0000343215 00000 n
+0000343280 00000 n
+0000343345 00000 n
+0000343410 00000 n
+0000343475 00000 n
+0000343539 00000 n
+0000343604 00000 n
+0000343669 00000 n
+0000343734 00000 n
+0000343799 00000 n
+0000343864 00000 n
+0000343929 00000 n
+0000343994 00000 n
+0000344059 00000 n
+0000344122 00000 n
+0000344187 00000 n
+0000344252 00000 n
+0000344317 00000 n
+0000344381 00000 n
+0000350163 00000 n
+0000346795 00000 n
+0000344622 00000 n
+0000346920 00000 n
+0000346984 00000 n
+0000347049 00000 n
+0000347114 00000 n
+0000347179 00000 n
+0000347244 00000 n
+0000347309 00000 n
+0000347374 00000 n
+0000347439 00000 n
+0000347504 00000 n
+0000347568 00000 n
+0000347633 00000 n
+0000347698 00000 n
+0000347763 00000 n
+0000347828 00000 n
+0000347893 00000 n
+0000347958 00000 n
+0000348023 00000 n
+0000348088 00000 n
+0000348152 00000 n
+0000348217 00000 n
+0000348282 00000 n
+0000348347 00000 n
+0000348412 00000 n
+0000348477 00000 n
+0000348542 00000 n
+0000348607 00000 n
+0000348672 00000 n
+0000348736 00000 n
+0000348801 00000 n
+0000348866 00000 n
+0000348930 00000 n
+0000348995 00000 n
+0000349060 00000 n
+0000349125 00000 n
+0000349190 00000 n
+0000349255 00000 n
+0000349320 00000 n
+0000349385 00000 n
+0000349450 00000 n
+0000349515 00000 n
+0000349580 00000 n
+0000349645 00000 n
+0000349710 00000 n
+0000349775 00000 n
+0000349840 00000 n
+0000349905 00000 n
+0000349970 00000 n
+0000350035 00000 n
+0000350099 00000 n
+0000356007 00000 n
+0000353223 00000 n
+0000350340 00000 n
+0000353348 00000 n
+0000353412 00000 n
+0000353477 00000 n
+0000353542 00000 n
+0000353607 00000 n
+0000353672 00000 n
+0000353737 00000 n
+0000353802 00000 n
+0000353867 00000 n
+0000353932 00000 n
+0000353997 00000 n
+0000354062 00000 n
+0000354127 00000 n
+0000354192 00000 n
+0000354257 00000 n
+0000354322 00000 n
+0000354387 00000 n
+0000354451 00000 n
+0000354516 00000 n
+0000354581 00000 n
+0000354646 00000 n
+0000354711 00000 n
+0000354776 00000 n
+0000354841 00000 n
+0000354906 00000 n
+0000354971 00000 n
+0000355035 00000 n
+0000355100 00000 n
+0000355165 00000 n
+0000355230 00000 n
+0000355295 00000 n
+0000355360 00000 n
+0000355425 00000 n
+0000355490 00000 n
+0000355555 00000 n
+0000355619 00000 n
+0000355684 00000 n
+0000355749 00000 n
+0000355813 00000 n
+0000355878 00000 n
+0000355942 00000 n
+0000361618 00000 n
+0000358769 00000 n
+0000356184 00000 n
+0000358894 00000 n
+0000358958 00000 n
+0000359023 00000 n
+0000359088 00000 n
+0000359153 00000 n
+0000359218 00000 n
+0000359283 00000 n
+0000359348 00000 n
+0000359413 00000 n
+0000359478 00000 n
+0000359542 00000 n
+0000359607 00000 n
+0000359672 00000 n
+0000359737 00000 n
+0000359802 00000 n
+0000359867 00000 n
+0000359932 00000 n
+0000359996 00000 n
+0000360061 00000 n
+0000360126 00000 n
+0000360191 00000 n
+0000360256 00000 n
+0000360321 00000 n
+0000360386 00000 n
+0000360451 00000 n
+0000360516 00000 n
+0000360581 00000 n
+0000360645 00000 n
+0000360710 00000 n
+0000360775 00000 n
+0000360840 00000 n
+0000360905 00000 n
+0000360970 00000 n
+0000361035 00000 n
+0000361100 00000 n
+0000361165 00000 n
+0000361230 00000 n
+0000361295 00000 n
+0000361360 00000 n
+0000361425 00000 n
+0000361490 00000 n
+0000361555 00000 n
+0000367316 00000 n
+0000364076 00000 n
+0000361795 00000 n
+0000364201 00000 n
+0000364265 00000 n
+0000364330 00000 n
+0000364395 00000 n
+0000364460 00000 n
+0000364525 00000 n
+0000364590 00000 n
+0000364655 00000 n
+0000364720 00000 n
+0000364785 00000 n
+0000364849 00000 n
+0000364914 00000 n
+0000364979 00000 n
+0000365044 00000 n
+0000365109 00000 n
+0000365174 00000 n
+0000365239 00000 n
+0000365304 00000 n
+0000365369 00000 n
+0000365434 00000 n
+0000365498 00000 n
+0000365563 00000 n
+0000365628 00000 n
+0000365693 00000 n
+0000365758 00000 n
+0000365823 00000 n
+0000365888 00000 n
+0000365953 00000 n
+0000366018 00000 n
+0000366083 00000 n
+0000366148 00000 n
+0000366213 00000 n
+0000366278 00000 n
+0000366343 00000 n
+0000366408 00000 n
+0000366473 00000 n
+0000366538 00000 n
+0000366603 00000 n
+0000366668 00000 n
+0000366733 00000 n
+0000366797 00000 n
+0000366862 00000 n
+0000366927 00000 n
+0000366992 00000 n
+0000367057 00000 n
+0000367122 00000 n
+0000367187 00000 n
+0000367252 00000 n
+0000372830 00000 n
+0000369461 00000 n
+0000367506 00000 n
+0000369586 00000 n
+0000369650 00000 n
+0000369715 00000 n
+0000369780 00000 n
+0000369845 00000 n
+0000369910 00000 n
+0000369975 00000 n
+0000370040 00000 n
+0000370105 00000 n
+0000370170 00000 n
+0000370234 00000 n
+0000370299 00000 n
+0000370364 00000 n
+0000370429 00000 n
+0000370494 00000 n
+0000370559 00000 n
+0000370624 00000 n
+0000370689 00000 n
+0000370754 00000 n
+0000370818 00000 n
+0000370883 00000 n
+0000370948 00000 n
+0000371013 00000 n
+0000371078 00000 n
+0000371143 00000 n
+0000371208 00000 n
+0000371273 00000 n
+0000371338 00000 n
+0000371403 00000 n
+0000371468 00000 n
+0000371532 00000 n
+0000371597 00000 n
+0000371662 00000 n
+0000371727 00000 n
+0000371792 00000 n
+0000371857 00000 n
+0000371922 00000 n
+0000371987 00000 n
+0000372052 00000 n
+0000372116 00000 n
+0000372181 00000 n
+0000372246 00000 n
+0000372311 00000 n
+0000372376 00000 n
+0000372441 00000 n
+0000372506 00000 n
+0000372571 00000 n
+0000372636 00000 n
+0000372700 00000 n
+0000372765 00000 n
+0000378614 00000 n
+0000374986 00000 n
+0000373007 00000 n
+0000375111 00000 n
+0000375175 00000 n
+0000375240 00000 n
+0000375305 00000 n
+0000375370 00000 n
+0000375435 00000 n
+0000375500 00000 n
+0000375565 00000 n
+0000375630 00000 n
+0000375695 00000 n
+0000375760 00000 n
+0000375825 00000 n
+0000375890 00000 n
+0000375955 00000 n
+0000376020 00000 n
+0000376084 00000 n
+0000376149 00000 n
+0000376214 00000 n
+0000376279 00000 n
+0000376344 00000 n
+0000376409 00000 n
+0000376474 00000 n
+0000376539 00000 n
+0000376604 00000 n
+0000376669 00000 n
+0000376734 00000 n
+0000376799 00000 n
+0000376864 00000 n
+0000376929 00000 n
+0000376994 00000 n
+0000377059 00000 n
+0000377124 00000 n
+0000377189 00000 n
+0000377254 00000 n
+0000377318 00000 n
+0000377383 00000 n
+0000377448 00000 n
+0000377513 00000 n
+0000377578 00000 n
+0000377643 00000 n
+0000377708 00000 n
+0000377773 00000 n
+0000377838 00000 n
+0000377903 00000 n
+0000377968 00000 n
+0000378032 00000 n
+0000378097 00000 n
+0000378162 00000 n
+0000378227 00000 n
+0000378292 00000 n
+0000378357 00000 n
+0000378422 00000 n
+0000378487 00000 n
+0000378551 00000 n
+0000384396 00000 n
+0000381091 00000 n
+0000378791 00000 n
+0000381216 00000 n
+0000381280 00000 n
+0000381345 00000 n
+0000381410 00000 n
+0000381475 00000 n
+0000381540 00000 n
+0000381605 00000 n
+0000381670 00000 n
+0000381735 00000 n
+0000381800 00000 n
+0000381865 00000 n
+0000381930 00000 n
+0000381995 00000 n
+0000382060 00000 n
+0000382125 00000 n
+0000382190 00000 n
+0000382255 00000 n
+0000382320 00000 n
+0000382385 00000 n
+0000382450 00000 n
+0000382515 00000 n
+0000382580 00000 n
+0000382645 00000 n
+0000382710 00000 n
+0000382775 00000 n
+0000382840 00000 n
+0000382905 00000 n
+0000382970 00000 n
+0000383035 00000 n
+0000383100 00000 n
+0000383165 00000 n
+0000383229 00000 n
+0000383294 00000 n
+0000383359 00000 n
+0000383424 00000 n
+0000383489 00000 n
+0000383554 00000 n
+0000383619 00000 n
+0000383684 00000 n
+0000383749 00000 n
+0000383814 00000 n
+0000383879 00000 n
+0000383944 00000 n
+0000384008 00000 n
+0000384073 00000 n
+0000384138 00000 n
+0000384203 00000 n
+0000384268 00000 n
+0000384332 00000 n
+0000390335 00000 n
+0000386449 00000 n
+0000384560 00000 n
+0000386574 00000 n
+0000386638 00000 n
+0000386703 00000 n
+0000386768 00000 n
+0000386833 00000 n
+0000386898 00000 n
+0000386963 00000 n
+0000387028 00000 n
+0000387093 00000 n
+0000387158 00000 n
+0000387222 00000 n
+0000387287 00000 n
+0000387352 00000 n
+0000387417 00000 n
+0000387482 00000 n
+0000387547 00000 n
+0000387612 00000 n
+0000387677 00000 n
+0000387742 00000 n
+0000387807 00000 n
+0000387872 00000 n
+0000387936 00000 n
+0000388001 00000 n
+0000388066 00000 n
+0000388131 00000 n
+0000388196 00000 n
+0000388261 00000 n
+0000388326 00000 n
+0000388391 00000 n
+0000388456 00000 n
+0000388520 00000 n
+0000388585 00000 n
+0000388650 00000 n
+0000388715 00000 n
+0000388780 00000 n
+0000388845 00000 n
+0000388910 00000 n
+0000388975 00000 n
+0000389040 00000 n
+0000389103 00000 n
+0000389168 00000 n
+0000389233 00000 n
+0000389298 00000 n
+0000389363 00000 n
+0000389428 00000 n
+0000389493 00000 n
+0000389558 00000 n
+0000389623 00000 n
+0000389688 00000 n
+0000389753 00000 n
+0000389818 00000 n
+0000389883 00000 n
+0000389947 00000 n
+0000390012 00000 n
+0000390077 00000 n
+0000390142 00000 n
+0000390207 00000 n
+0000390271 00000 n
+0000395958 00000 n
+0000392524 00000 n
+0000390499 00000 n
+0000392649 00000 n
+0000392713 00000 n
+0000392778 00000 n
+0000392843 00000 n
+0000392908 00000 n
+0000392973 00000 n
+0000393038 00000 n
+0000393103 00000 n
+0000393168 00000 n
+0000393233 00000 n
+0000393297 00000 n
+0000393362 00000 n
+0000393427 00000 n
+0000393492 00000 n
+0000393557 00000 n
+0000393622 00000 n
+0000393687 00000 n
+0000393752 00000 n
+0000393817 00000 n
+0000393882 00000 n
+0000393946 00000 n
+0000394011 00000 n
+0000394076 00000 n
+0000394141 00000 n
+0000394206 00000 n
+0000394271 00000 n
+0000394336 00000 n
+0000394401 00000 n
+0000394466 00000 n
+0000394530 00000 n
+0000394595 00000 n
+0000394660 00000 n
+0000394725 00000 n
+0000394790 00000 n
+0000394855 00000 n
+0000394920 00000 n
+0000394985 00000 n
+0000395050 00000 n
+0000395115 00000 n
+0000395180 00000 n
+0000395245 00000 n
+0000395310 00000 n
+0000395375 00000 n
+0000395440 00000 n
+0000395505 00000 n
+0000395570 00000 n
+0000395635 00000 n
+0000395700 00000 n
+0000395765 00000 n
+0000395830 00000 n
+0000395894 00000 n
+0001874449 00000 n
+0000401654 00000 n
+0000399325 00000 n
+0000396122 00000 n
+0000399450 00000 n
+0000399514 00000 n
+0000399579 00000 n
+0000399644 00000 n
+0000399709 00000 n
+0000399774 00000 n
+0000399839 00000 n
+0000399903 00000 n
+0000399968 00000 n
+0000400033 00000 n
+0000400098 00000 n
+0000400163 00000 n
+0000400228 00000 n
+0000400293 00000 n
+0000400358 00000 n
+0000400423 00000 n
+0000400488 00000 n
+0000400552 00000 n
+0000400617 00000 n
+0000400682 00000 n
+0000400747 00000 n
+0000400812 00000 n
+0000400877 00000 n
+0000400942 00000 n
+0000401006 00000 n
+0000401071 00000 n
+0000401136 00000 n
+0000401201 00000 n
+0000401266 00000 n
+0000401331 00000 n
+0000401396 00000 n
+0000401461 00000 n
+0000401525 00000 n
+0000401590 00000 n
+0000407038 00000 n
+0000404195 00000 n
+0000401857 00000 n
+0000404320 00000 n
+0000404384 00000 n
+0000404448 00000 n
+0000404513 00000 n
+0000404578 00000 n
+0000404643 00000 n
+0000404708 00000 n
+0000404773 00000 n
+0000404838 00000 n
+0000404903 00000 n
+0000404968 00000 n
+0000405032 00000 n
+0000405097 00000 n
+0000405162 00000 n
+0000405227 00000 n
+0000405292 00000 n
+0000405357 00000 n
+0000405422 00000 n
+0000405487 00000 n
+0000405552 00000 n
+0000405616 00000 n
+0000405681 00000 n
+0000405746 00000 n
+0000405811 00000 n
+0000405876 00000 n
+0000405941 00000 n
+0000406006 00000 n
+0000406071 00000 n
+0000406136 00000 n
+0000406201 00000 n
+0000406266 00000 n
+0000406330 00000 n
+0000406457 00000 n
+0000406522 00000 n
+0000406586 00000 n
+0000406650 00000 n
+0000406715 00000 n
+0000406780 00000 n
+0000406845 00000 n
+0000406910 00000 n
+0000406974 00000 n
+0000412662 00000 n
+0000409295 00000 n
+0000407241 00000 n
+0000409420 00000 n
+0000409484 00000 n
+0000409549 00000 n
+0000409614 00000 n
+0000409679 00000 n
+0000409744 00000 n
+0000409809 00000 n
+0000409874 00000 n
+0000409938 00000 n
+0000410003 00000 n
+0000410068 00000 n
+0000410133 00000 n
+0000410198 00000 n
+0000410262 00000 n
+0000410327 00000 n
+0000410392 00000 n
+0000410457 00000 n
+0000410522 00000 n
+0000410587 00000 n
+0000410652 00000 n
+0000410717 00000 n
+0000410782 00000 n
+0000410846 00000 n
+0000410911 00000 n
+0000410976 00000 n
+0000411041 00000 n
+0000411106 00000 n
+0000411171 00000 n
+0000411236 00000 n
+0000411301 00000 n
+0000411366 00000 n
+0000411430 00000 n
+0000411495 00000 n
+0000411560 00000 n
+0000411625 00000 n
+0000411690 00000 n
+0000411755 00000 n
+0000411820 00000 n
+0000411885 00000 n
+0000411950 00000 n
+0000412015 00000 n
+0000412080 00000 n
+0000412145 00000 n
+0000412210 00000 n
+0000412274 00000 n
+0000412339 00000 n
+0000412404 00000 n
+0000412469 00000 n
+0000412534 00000 n
+0000412598 00000 n
+0000418106 00000 n
+0000414480 00000 n
+0000412839 00000 n
+0000414605 00000 n
+0000414669 00000 n
+0000414734 00000 n
+0000414799 00000 n
+0000414864 00000 n
+0000414929 00000 n
+0000414994 00000 n
+0000415059 00000 n
+0000415124 00000 n
+0000415189 00000 n
+0000415253 00000 n
+0000415318 00000 n
+0000415383 00000 n
+0000415448 00000 n
+0000415513 00000 n
+0000415578 00000 n
+0000415643 00000 n
+0000415708 00000 n
+0000415773 00000 n
+0000415837 00000 n
+0000415902 00000 n
+0000415967 00000 n
+0000416032 00000 n
+0000416097 00000 n
+0000416162 00000 n
+0000416227 00000 n
+0000416292 00000 n
+0000416357 00000 n
+0000416421 00000 n
+0000416486 00000 n
+0000416551 00000 n
+0000416615 00000 n
+0000416680 00000 n
+0000416745 00000 n
+0000416810 00000 n
+0000416875 00000 n
+0000416940 00000 n
+0000417005 00000 n
+0000417070 00000 n
+0000417135 00000 n
+0000417199 00000 n
+0000417264 00000 n
+0000417329 00000 n
+0000417394 00000 n
+0000417459 00000 n
+0000417524 00000 n
+0000417589 00000 n
+0000417654 00000 n
+0000417719 00000 n
+0000417784 00000 n
+0000417848 00000 n
+0000417913 00000 n
+0000417978 00000 n
+0000418042 00000 n
+0000423624 00000 n
+0000420320 00000 n
+0000418270 00000 n
+0000420445 00000 n
+0000420509 00000 n
+0000420574 00000 n
+0000420639 00000 n
+0000420704 00000 n
+0000420769 00000 n
+0000420834 00000 n
+0000420899 00000 n
+0000420964 00000 n
+0000421029 00000 n
+0000421094 00000 n
+0000421159 00000 n
+0000421222 00000 n
+0000421287 00000 n
+0000421352 00000 n
+0000421417 00000 n
+0000421482 00000 n
+0000421547 00000 n
+0000421612 00000 n
+0000421677 00000 n
+0000421742 00000 n
+0000421807 00000 n
+0000421872 00000 n
+0000421937 00000 n
+0000422002 00000 n
+0000422067 00000 n
+0000422132 00000 n
+0000422197 00000 n
+0000422262 00000 n
+0000422327 00000 n
+0000422392 00000 n
+0000422457 00000 n
+0000422522 00000 n
+0000422587 00000 n
+0000422652 00000 n
+0000422717 00000 n
+0000422781 00000 n
+0000422845 00000 n
+0000422910 00000 n
+0000422975 00000 n
+0000423040 00000 n
+0000423105 00000 n
+0000423169 00000 n
+0000423234 00000 n
+0000423299 00000 n
+0000423364 00000 n
+0000423429 00000 n
+0000423494 00000 n
+0000423559 00000 n
+0000429473 00000 n
+0000426236 00000 n
+0000423788 00000 n
+0000426361 00000 n
+0000426425 00000 n
+0000426489 00000 n
+0000426554 00000 n
+0000426619 00000 n
+0000426684 00000 n
+0000426749 00000 n
+0000426814 00000 n
+0000426879 00000 n
+0000426944 00000 n
+0000427009 00000 n
+0000427074 00000 n
+0000427139 00000 n
+0000427204 00000 n
+0000427269 00000 n
+0000427334 00000 n
+0000427399 00000 n
+0000427462 00000 n
+0000427527 00000 n
+0000427592 00000 n
+0000427657 00000 n
+0000427722 00000 n
+0000427787 00000 n
+0000427852 00000 n
+0000427917 00000 n
+0000427982 00000 n
+0000428046 00000 n
+0000428111 00000 n
+0000428176 00000 n
+0000428241 00000 n
+0000428306 00000 n
+0000428371 00000 n
+0000428436 00000 n
+0000428501 00000 n
+0000428566 00000 n
+0000428630 00000 n
+0000428695 00000 n
+0000428760 00000 n
+0000428825 00000 n
+0000428890 00000 n
+0000428955 00000 n
+0000429020 00000 n
+0000429085 00000 n
+0000429150 00000 n
+0000429215 00000 n
+0000429280 00000 n
+0000429345 00000 n
+0000429409 00000 n
+0000435142 00000 n
+0000432166 00000 n
+0000429663 00000 n
+0000432291 00000 n
+0000432355 00000 n
+0000432420 00000 n
+0000432485 00000 n
+0000432550 00000 n
+0000432615 00000 n
+0000432680 00000 n
+0000432745 00000 n
+0000432809 00000 n
+0000432874 00000 n
+0000432939 00000 n
+0000433004 00000 n
+0000433069 00000 n
+0000433134 00000 n
+0000433199 00000 n
+0000433264 00000 n
+0000433329 00000 n
+0000433394 00000 n
+0000433459 00000 n
+0000433524 00000 n
+0000433589 00000 n
+0000433654 00000 n
+0000433719 00000 n
+0000433783 00000 n
+0000433848 00000 n
+0000433913 00000 n
+0000433978 00000 n
+0000434043 00000 n
+0000434108 00000 n
+0000434172 00000 n
+0000434237 00000 n
+0000434302 00000 n
+0000434366 00000 n
+0000434431 00000 n
+0000434496 00000 n
+0000434561 00000 n
+0000434626 00000 n
+0000434691 00000 n
+0000434756 00000 n
+0000434821 00000 n
+0000434886 00000 n
+0000434949 00000 n
+0000435014 00000 n
+0000435078 00000 n
+0000440663 00000 n
+0000437619 00000 n
+0000435319 00000 n
+0000437744 00000 n
+0000437808 00000 n
+0000437873 00000 n
+0000437938 00000 n
+0000438003 00000 n
+0000438068 00000 n
+0000438133 00000 n
+0000438198 00000 n
+0000438263 00000 n
+0000438328 00000 n
+0000438393 00000 n
+0000438458 00000 n
+0000438523 00000 n
+0000438588 00000 n
+0000438653 00000 n
+0000438718 00000 n
+0000438783 00000 n
+0000438848 00000 n
+0000438913 00000 n
+0000438978 00000 n
+0000439043 00000 n
+0000439108 00000 n
+0000439173 00000 n
+0000439236 00000 n
+0000439301 00000 n
+0000439366 00000 n
+0000439431 00000 n
+0000439496 00000 n
+0000439561 00000 n
+0000439626 00000 n
+0000439691 00000 n
+0000439756 00000 n
+0000439821 00000 n
+0000439885 00000 n
+0000439950 00000 n
+0000440014 00000 n
+0000440079 00000 n
+0000440144 00000 n
+0000440209 00000 n
+0000440273 00000 n
+0000440338 00000 n
+0000440403 00000 n
+0000440468 00000 n
+0000440533 00000 n
+0000440598 00000 n
+0000446734 00000 n
+0000443561 00000 n
+0000440840 00000 n
+0000443686 00000 n
+0000443750 00000 n
+0000443815 00000 n
+0000443880 00000 n
+0000443945 00000 n
+0000444010 00000 n
+0000444074 00000 n
+0000444139 00000 n
+0000444204 00000 n
+0000444269 00000 n
+0000444334 00000 n
+0000444399 00000 n
+0000444464 00000 n
+0000444529 00000 n
+0000444594 00000 n
+0000444659 00000 n
+0000444724 00000 n
+0000444789 00000 n
+0000444853 00000 n
+0000444918 00000 n
+0000444983 00000 n
+0000445048 00000 n
+0000445113 00000 n
+0000445178 00000 n
+0000445243 00000 n
+0000445308 00000 n
+0000445373 00000 n
+0000445438 00000 n
+0000445503 00000 n
+0000445568 00000 n
+0000445633 00000 n
+0000445698 00000 n
+0000445763 00000 n
+0000445827 00000 n
+0000445892 00000 n
+0000445957 00000 n
+0000446022 00000 n
+0000446087 00000 n
+0000446152 00000 n
+0000446216 00000 n
+0000446281 00000 n
+0000446346 00000 n
+0000446411 00000 n
+0000446476 00000 n
+0000446541 00000 n
+0000446606 00000 n
+0000446670 00000 n
+0000452436 00000 n
+0000448874 00000 n
+0000446911 00000 n
+0000448999 00000 n
+0000449063 00000 n
+0000449128 00000 n
+0000449193 00000 n
+0000449258 00000 n
+0000449323 00000 n
+0000449388 00000 n
+0000449453 00000 n
+0000449518 00000 n
+0000449583 00000 n
+0000449647 00000 n
+0000449712 00000 n
+0000449777 00000 n
+0000449842 00000 n
+0000449907 00000 n
+0000449972 00000 n
+0000450037 00000 n
+0000450102 00000 n
+0000450167 00000 n
+0000450232 00000 n
+0000450296 00000 n
+0000450361 00000 n
+0000450426 00000 n
+0000450491 00000 n
+0000450556 00000 n
+0000450621 00000 n
+0000450686 00000 n
+0000450751 00000 n
+0000450816 00000 n
+0000450880 00000 n
+0000450945 00000 n
+0000451010 00000 n
+0000451075 00000 n
+0000451140 00000 n
+0000451205 00000 n
+0000451270 00000 n
+0000451335 00000 n
+0000451400 00000 n
+0000451464 00000 n
+0000451529 00000 n
+0000451594 00000 n
+0000451659 00000 n
+0000451724 00000 n
+0000451789 00000 n
+0000451854 00000 n
+0000451919 00000 n
+0000451984 00000 n
+0000452048 00000 n
+0000452113 00000 n
+0000452178 00000 n
+0000452243 00000 n
+0000452308 00000 n
+0000452372 00000 n
+0001874614 00000 n
+0000458165 00000 n
+0000454928 00000 n
+0000452600 00000 n
+0000455053 00000 n
+0000455117 00000 n
+0000455182 00000 n
+0000455247 00000 n
+0000455312 00000 n
+0000455377 00000 n
+0000455442 00000 n
+0000455507 00000 n
+0000455572 00000 n
+0000455636 00000 n
+0000455701 00000 n
+0000455766 00000 n
+0000455831 00000 n
+0000455896 00000 n
+0000455961 00000 n
+0000456026 00000 n
+0000456091 00000 n
+0000456156 00000 n
+0000456220 00000 n
+0000456285 00000 n
+0000456350 00000 n
+0000456415 00000 n
+0000456480 00000 n
+0000456545 00000 n
+0000456610 00000 n
+0000456675 00000 n
+0000456740 00000 n
+0000456805 00000 n
+0000456870 00000 n
+0000456935 00000 n
+0000457000 00000 n
+0000457065 00000 n
+0000457130 00000 n
+0000457195 00000 n
+0000457258 00000 n
+0000457323 00000 n
+0000457388 00000 n
+0000457453 00000 n
+0000457518 00000 n
+0000457583 00000 n
+0000457647 00000 n
+0000457712 00000 n
+0000457777 00000 n
+0000457842 00000 n
+0000457907 00000 n
+0000457972 00000 n
+0000458037 00000 n
+0000458101 00000 n
+0000463717 00000 n
+0000461320 00000 n
+0000458342 00000 n
+0000461445 00000 n
+0000461509 00000 n
+0000461574 00000 n
+0000461639 00000 n
+0000461704 00000 n
+0000461769 00000 n
+0000461834 00000 n
+0000461899 00000 n
+0000461964 00000 n
+0000462029 00000 n
+0000462094 00000 n
+0000462159 00000 n
+0000462224 00000 n
+0000462289 00000 n
+0000462354 00000 n
+0000462418 00000 n
+0000462483 00000 n
+0000462548 00000 n
+0000462613 00000 n
+0000462678 00000 n
+0000462743 00000 n
+0000462808 00000 n
+0000462873 00000 n
+0000462938 00000 n
+0000463003 00000 n
+0000463068 00000 n
+0000463133 00000 n
+0000463198 00000 n
+0000463263 00000 n
+0000463328 00000 n
+0000463393 00000 n
+0000463458 00000 n
+0000463523 00000 n
+0000463588 00000 n
+0000463653 00000 n
+0000469253 00000 n
+0000466468 00000 n
+0000463920 00000 n
+0000466593 00000 n
+0000466657 00000 n
+0000466722 00000 n
+0000466787 00000 n
+0000466852 00000 n
+0000466917 00000 n
+0000466982 00000 n
+0000467047 00000 n
+0000467112 00000 n
+0000467177 00000 n
+0000467242 00000 n
+0000467307 00000 n
+0000467372 00000 n
+0000467437 00000 n
+0000467501 00000 n
+0000467566 00000 n
+0000467631 00000 n
+0000467696 00000 n
+0000467761 00000 n
+0000467826 00000 n
+0000467891 00000 n
+0000467956 00000 n
+0000468021 00000 n
+0000468086 00000 n
+0000468151 00000 n
+0000468216 00000 n
+0000468281 00000 n
+0000468346 00000 n
+0000468410 00000 n
+0000468475 00000 n
+0000468540 00000 n
+0000468605 00000 n
+0000468670 00000 n
+0000468735 00000 n
+0000468800 00000 n
+0000468865 00000 n
+0000468930 00000 n
+0000468994 00000 n
+0000469059 00000 n
+0000469124 00000 n
+0000469189 00000 n
+0000475197 00000 n
+0000471376 00000 n
+0000469430 00000 n
+0000471501 00000 n
+0000471565 00000 n
+0000471630 00000 n
+0000471695 00000 n
+0000471760 00000 n
+0000471825 00000 n
+0000471890 00000 n
+0000471955 00000 n
+0000472019 00000 n
+0000472084 00000 n
+0000472149 00000 n
+0000472214 00000 n
+0000472279 00000 n
+0000472344 00000 n
+0000472409 00000 n
+0000472474 00000 n
+0000472539 00000 n
+0000472603 00000 n
+0000472668 00000 n
+0000472733 00000 n
+0000472798 00000 n
+0000472863 00000 n
+0000472928 00000 n
+0000472993 00000 n
+0000473058 00000 n
+0000473123 00000 n
+0000473188 00000 n
+0000473252 00000 n
+0000473317 00000 n
+0000473382 00000 n
+0000473447 00000 n
+0000473512 00000 n
+0000473577 00000 n
+0000473642 00000 n
+0000473707 00000 n
+0000473772 00000 n
+0000473836 00000 n
+0000473901 00000 n
+0000473966 00000 n
+0000474031 00000 n
+0000474096 00000 n
+0000474161 00000 n
+0000474226 00000 n
+0000474291 00000 n
+0000474356 00000 n
+0000474420 00000 n
+0000474485 00000 n
+0000474550 00000 n
+0000474615 00000 n
+0000474680 00000 n
+0000474745 00000 n
+0000474810 00000 n
+0000474875 00000 n
+0000474940 00000 n
+0000475004 00000 n
+0000475069 00000 n
+0000475133 00000 n
+0000481178 00000 n
+0000477617 00000 n
+0000475374 00000 n
+0000477742 00000 n
+0000477806 00000 n
+0000477871 00000 n
+0000477936 00000 n
+0000478001 00000 n
+0000478066 00000 n
+0000478131 00000 n
+0000478195 00000 n
+0000478260 00000 n
+0000478325 00000 n
+0000478390 00000 n
+0000478455 00000 n
+0000478520 00000 n
+0000478585 00000 n
+0000478650 00000 n
+0000478715 00000 n
+0000478779 00000 n
+0000478844 00000 n
+0000478909 00000 n
+0000478974 00000 n
+0000479039 00000 n
+0000479104 00000 n
+0000479169 00000 n
+0000479234 00000 n
+0000479299 00000 n
+0000479363 00000 n
+0000479428 00000 n
+0000479493 00000 n
+0000479558 00000 n
+0000479623 00000 n
+0000479688 00000 n
+0000479753 00000 n
+0000479818 00000 n
+0000479883 00000 n
+0000479948 00000 n
+0000480012 00000 n
+0000480077 00000 n
+0000480142 00000 n
+0000480207 00000 n
+0000480272 00000 n
+0000480337 00000 n
+0000480402 00000 n
+0000480466 00000 n
+0000480531 00000 n
+0000480596 00000 n
+0000480661 00000 n
+0000480726 00000 n
+0000480791 00000 n
+0000480856 00000 n
+0000480921 00000 n
+0000480986 00000 n
+0000481051 00000 n
+0000481115 00000 n
+0000487047 00000 n
+0000483354 00000 n
+0000481342 00000 n
+0000483479 00000 n
+0000483543 00000 n
+0000483608 00000 n
+0000483673 00000 n
+0000483738 00000 n
+0000483803 00000 n
+0000483868 00000 n
+0000483932 00000 n
+0000483997 00000 n
+0000484062 00000 n
+0000484127 00000 n
+0000484192 00000 n
+0000484257 00000 n
+0000484322 00000 n
+0000484387 00000 n
+0000484452 00000 n
+0000484517 00000 n
+0000484581 00000 n
+0000484646 00000 n
+0000484711 00000 n
+0000484776 00000 n
+0000484841 00000 n
+0000484906 00000 n
+0000484971 00000 n
+0000485036 00000 n
+0000485101 00000 n
+0000485166 00000 n
+0000485231 00000 n
+0000485296 00000 n
+0000485361 00000 n
+0000485426 00000 n
+0000485491 00000 n
+0000485556 00000 n
+0000485620 00000 n
+0000485685 00000 n
+0000485750 00000 n
+0000485815 00000 n
+0000485880 00000 n
+0000485945 00000 n
+0000486010 00000 n
+0000486075 00000 n
+0000486140 00000 n
+0000486205 00000 n
+0000486270 00000 n
+0000486335 00000 n
+0000486400 00000 n
+0000486465 00000 n
+0000486530 00000 n
+0000486595 00000 n
+0000486659 00000 n
+0000486724 00000 n
+0000486789 00000 n
+0000486854 00000 n
+0000486919 00000 n
+0000486983 00000 n
+0000492634 00000 n
+0000489202 00000 n
+0000487211 00000 n
+0000489327 00000 n
+0000489391 00000 n
+0000489456 00000 n
+0000489521 00000 n
+0000489586 00000 n
+0000489651 00000 n
+0000489716 00000 n
+0000489781 00000 n
+0000489846 00000 n
+0000489911 00000 n
+0000489976 00000 n
+0000490041 00000 n
+0000490106 00000 n
+0000490171 00000 n
+0000490234 00000 n
+0000490299 00000 n
+0000490364 00000 n
+0000490429 00000 n
+0000490494 00000 n
+0000490559 00000 n
+0000490624 00000 n
+0000490689 00000 n
+0000490754 00000 n
+0000490819 00000 n
+0000490884 00000 n
+0000490949 00000 n
+0000491014 00000 n
+0000491079 00000 n
+0000491144 00000 n
+0000491209 00000 n
+0000491274 00000 n
+0000491339 00000 n
+0000491404 00000 n
+0000491468 00000 n
+0000491533 00000 n
+0000491598 00000 n
+0000491663 00000 n
+0000491728 00000 n
+0000491793 00000 n
+0000491858 00000 n
+0000491921 00000 n
+0000491986 00000 n
+0000492051 00000 n
+0000492116 00000 n
+0000492181 00000 n
+0000492246 00000 n
+0000492311 00000 n
+0000492376 00000 n
+0000492441 00000 n
+0000492506 00000 n
+0000492570 00000 n
+0000498087 00000 n
+0000495041 00000 n
+0000492798 00000 n
+0000495166 00000 n
+0000495230 00000 n
+0000495295 00000 n
+0000495360 00000 n
+0000495425 00000 n
+0000495490 00000 n
+0000495555 00000 n
+0000495620 00000 n
+0000495685 00000 n
+0000495750 00000 n
+0000495814 00000 n
+0000495879 00000 n
+0000495944 00000 n
+0000496009 00000 n
+0000496074 00000 n
+0000496139 00000 n
+0000496204 00000 n
+0000496268 00000 n
+0000496333 00000 n
+0000496398 00000 n
+0000496463 00000 n
+0000496528 00000 n
+0000496593 00000 n
+0000496658 00000 n
+0000496723 00000 n
+0000496788 00000 n
+0000496853 00000 n
+0000496918 00000 n
+0000496983 00000 n
+0000497048 00000 n
+0000497113 00000 n
+0000497178 00000 n
+0000497243 00000 n
+0000497308 00000 n
+0000497373 00000 n
+0000497438 00000 n
+0000497503 00000 n
+0000497568 00000 n
+0000497632 00000 n
+0000497697 00000 n
+0000497762 00000 n
+0000497827 00000 n
+0000497892 00000 n
+0000497957 00000 n
+0000498022 00000 n
+0000503540 00000 n
+0000500303 00000 n
+0000498251 00000 n
+0000500428 00000 n
+0000500492 00000 n
+0000500557 00000 n
+0000500621 00000 n
+0000500686 00000 n
+0000500751 00000 n
+0000500816 00000 n
+0000500881 00000 n
+0000500946 00000 n
+0000501011 00000 n
+0000501076 00000 n
+0000501141 00000 n
+0000501205 00000 n
+0000501270 00000 n
+0000501335 00000 n
+0000501400 00000 n
+0000501465 00000 n
+0000501530 00000 n
+0000501595 00000 n
+0000501660 00000 n
+0000501725 00000 n
+0000501790 00000 n
+0000501855 00000 n
+0000501920 00000 n
+0000501985 00000 n
+0000502050 00000 n
+0000502115 00000 n
+0000502180 00000 n
+0000502245 00000 n
+0000502310 00000 n
+0000502375 00000 n
+0000502438 00000 n
+0000502503 00000 n
+0000502568 00000 n
+0000502633 00000 n
+0000502698 00000 n
+0000502763 00000 n
+0000502828 00000 n
+0000502893 00000 n
+0000502958 00000 n
+0000503023 00000 n
+0000503088 00000 n
+0000503153 00000 n
+0000503217 00000 n
+0000503282 00000 n
+0000503347 00000 n
+0000503412 00000 n
+0000503476 00000 n
+0000509142 00000 n
+0000505516 00000 n
+0000503704 00000 n
+0000505641 00000 n
+0000505705 00000 n
+0000505770 00000 n
+0000505835 00000 n
+0000505900 00000 n
+0000505965 00000 n
+0000506030 00000 n
+0000506095 00000 n
+0000506160 00000 n
+0000506225 00000 n
+0000506290 00000 n
+0000506354 00000 n
+0000506419 00000 n
+0000506484 00000 n
+0000506611 00000 n
+0000506676 00000 n
+0000506741 00000 n
+0000506806 00000 n
+0000506871 00000 n
+0000506936 00000 n
+0000507001 00000 n
+0000507064 00000 n
+0000507129 00000 n
+0000507194 00000 n
+0000507259 00000 n
+0000507324 00000 n
+0000507389 00000 n
+0000507454 00000 n
+0000507519 00000 n
+0000507584 00000 n
+0000507649 00000 n
+0000507714 00000 n
+0000507779 00000 n
+0000507844 00000 n
+0000507909 00000 n
+0000507974 00000 n
+0000508038 00000 n
+0000508103 00000 n
+0000508168 00000 n
+0000508233 00000 n
+0000508298 00000 n
+0000508363 00000 n
+0000508428 00000 n
+0000508493 00000 n
+0000508558 00000 n
+0000508622 00000 n
+0000508687 00000 n
+0000508752 00000 n
+0000508817 00000 n
+0000508882 00000 n
+0000508947 00000 n
+0000509012 00000 n
+0000509077 00000 n
+0001874779 00000 n
+0000515067 00000 n
+0000511314 00000 n
+0000509332 00000 n
+0000511439 00000 n
+0000511503 00000 n
+0000511568 00000 n
+0000511633 00000 n
+0000511698 00000 n
+0000511763 00000 n
+0000511828 00000 n
+0000511893 00000 n
+0000511958 00000 n
+0000512023 00000 n
+0000512087 00000 n
+0000512152 00000 n
+0000512217 00000 n
+0000512282 00000 n
+0000512347 00000 n
+0000512412 00000 n
+0000512477 00000 n
+0000512542 00000 n
+0000512606 00000 n
+0000512733 00000 n
+0000512798 00000 n
+0000512863 00000 n
+0000512928 00000 n
+0000512993 00000 n
+0000513057 00000 n
+0000513122 00000 n
+0000513187 00000 n
+0000513252 00000 n
+0000513317 00000 n
+0000513382 00000 n
+0000513447 00000 n
+0000513512 00000 n
+0000513577 00000 n
+0000513641 00000 n
+0000513706 00000 n
+0000513771 00000 n
+0000513836 00000 n
+0000513901 00000 n
+0000513966 00000 n
+0000514031 00000 n
+0000514096 00000 n
+0000514161 00000 n
+0000514225 00000 n
+0000514290 00000 n
+0000514355 00000 n
+0000514420 00000 n
+0000514485 00000 n
+0000514550 00000 n
+0000514615 00000 n
+0000514680 00000 n
+0000514745 00000 n
+0000514809 00000 n
+0000514874 00000 n
+0000514939 00000 n
+0000515003 00000 n
+0000520704 00000 n
+0000517143 00000 n
+0000515270 00000 n
+0000517268 00000 n
+0000517332 00000 n
+0000517397 00000 n
+0000517462 00000 n
+0000517527 00000 n
+0000517592 00000 n
+0000517657 00000 n
+0000517722 00000 n
+0000517787 00000 n
+0000517852 00000 n
+0000517917 00000 n
+0000517981 00000 n
+0000518046 00000 n
+0000518111 00000 n
+0000518176 00000 n
+0000518241 00000 n
+0000518306 00000 n
+0000518371 00000 n
+0000518436 00000 n
+0000518501 00000 n
+0000518566 00000 n
+0000518631 00000 n
+0000518696 00000 n
+0000518761 00000 n
+0000518826 00000 n
+0000518891 00000 n
+0000518956 00000 n
+0000519021 00000 n
+0000519086 00000 n
+0000519150 00000 n
+0000519215 00000 n
+0000519280 00000 n
+0000519345 00000 n
+0000519472 00000 n
+0000519537 00000 n
+0000519602 00000 n
+0000519667 00000 n
+0000519732 00000 n
+0000519797 00000 n
+0000519862 00000 n
+0000519927 00000 n
+0000519992 00000 n
+0000520057 00000 n
+0000520122 00000 n
+0000520187 00000 n
+0000520252 00000 n
+0000520316 00000 n
+0000520381 00000 n
+0000520446 00000 n
+0000520511 00000 n
+0000520576 00000 n
+0000520640 00000 n
+0000526312 00000 n
+0000523529 00000 n
+0000520894 00000 n
+0000523654 00000 n
+0000523718 00000 n
+0000523783 00000 n
+0000523848 00000 n
+0000523913 00000 n
+0000523978 00000 n
+0000524043 00000 n
+0000524108 00000 n
+0000524173 00000 n
+0000524238 00000 n
+0000524303 00000 n
+0000524368 00000 n
+0000524433 00000 n
+0000524498 00000 n
+0000524562 00000 n
+0000524627 00000 n
+0000524692 00000 n
+0000524757 00000 n
+0000524822 00000 n
+0000524887 00000 n
+0000524952 00000 n
+0000525016 00000 n
+0000525081 00000 n
+0000525146 00000 n
+0000525211 00000 n
+0000525276 00000 n
+0000525341 00000 n
+0000525406 00000 n
+0000525471 00000 n
+0000525536 00000 n
+0000525601 00000 n
+0000525666 00000 n
+0000525731 00000 n
+0000525796 00000 n
+0000525861 00000 n
+0000525926 00000 n
+0000525989 00000 n
+0000526054 00000 n
+0000526119 00000 n
+0000526184 00000 n
+0000526248 00000 n
+0000529027 00000 n
+0000532364 00000 n
+0000528854 00000 n
+0000526489 00000 n
+0000529185 00000 n
+0000529249 00000 n
+0000529314 00000 n
+0000529379 00000 n
+0000529444 00000 n
+0000529509 00000 n
+0000529574 00000 n
+0000529639 00000 n
+0000529704 00000 n
+0000529769 00000 n
+0000529833 00000 n
+0000529898 00000 n
+0000529963 00000 n
+0000530028 00000 n
+0000530093 00000 n
+0000530158 00000 n
+0000530223 00000 n
+0000530288 00000 n
+0000530353 00000 n
+0000530417 00000 n
+0000530482 00000 n
+0000530547 00000 n
+0000530612 00000 n
+0000530677 00000 n
+0000530742 00000 n
+0000530807 00000 n
+0000530872 00000 n
+0000530937 00000 n
+0000531001 00000 n
+0000531066 00000 n
+0000531131 00000 n
+0000531196 00000 n
+0000531261 00000 n
+0000531326 00000 n
+0000531391 00000 n
+0000531456 00000 n
+0000531521 00000 n
+0000531586 00000 n
+0000531651 00000 n
+0000531716 00000 n
+0000531780 00000 n
+0001872058 00000 n
+0000531845 00000 n
+0000531910 00000 n
+0000531975 00000 n
+0000532040 00000 n
+0000532105 00000 n
+0000532170 00000 n
+0000532235 00000 n
+0000532300 00000 n
+0000528996 00000 n
+0000537940 00000 n
+0000535028 00000 n
+0000532607 00000 n
+0000535153 00000 n
+0000535217 00000 n
+0000535282 00000 n
+0000535347 00000 n
+0000535412 00000 n
+0000535477 00000 n
+0000535541 00000 n
+0000535606 00000 n
+0000535671 00000 n
+0000535736 00000 n
+0000535801 00000 n
+0000535866 00000 n
+0000535931 00000 n
+0000535995 00000 n
+0000536060 00000 n
+0000536125 00000 n
+0000536190 00000 n
+0000536255 00000 n
+0000536320 00000 n
+0000536385 00000 n
+0000536450 00000 n
+0000536515 00000 n
+0000536580 00000 n
+0000536644 00000 n
+0000536709 00000 n
+0000536774 00000 n
+0000536839 00000 n
+0000536904 00000 n
+0000536969 00000 n
+0000537034 00000 n
+0000537099 00000 n
+0000537164 00000 n
+0000537228 00000 n
+0000537293 00000 n
+0000537358 00000 n
+0000537423 00000 n
+0000537488 00000 n
+0000537553 00000 n
+0000537618 00000 n
+0000537683 00000 n
+0000537748 00000 n
+0000537812 00000 n
+0000537876 00000 n
+0000541227 00000 n
+0000543589 00000 n
+0000541054 00000 n
+0000538104 00000 n
+0000541384 00000 n
+0000541448 00000 n
+0000541513 00000 n
+0000541578 00000 n
+0000541643 00000 n
+0000541708 00000 n
+0000541773 00000 n
+0000541837 00000 n
+0000541902 00000 n
+0000541967 00000 n
+0000542032 00000 n
+0000542097 00000 n
+0000542162 00000 n
+0000542227 00000 n
+0000542292 00000 n
+0000542357 00000 n
+0000542422 00000 n
+0000542486 00000 n
+0000542551 00000 n
+0000542616 00000 n
+0000542681 00000 n
+0000542746 00000 n
+0000542811 00000 n
+0000542876 00000 n
+0000542941 00000 n
+0000543006 00000 n
+0000543070 00000 n
+0000543135 00000 n
+0000543200 00000 n
+0000543265 00000 n
+0000543330 00000 n
+0000543395 00000 n
+0000543460 00000 n
+0000543525 00000 n
+0000541196 00000 n
+0000549583 00000 n
+0000546606 00000 n
+0000543844 00000 n
+0000546731 00000 n
+0000546795 00000 n
+0000546860 00000 n
+0000546925 00000 n
+0000546990 00000 n
+0000547054 00000 n
+0000547119 00000 n
+0000547184 00000 n
+0000547249 00000 n
+0000547314 00000 n
+0000547379 00000 n
+0000547444 00000 n
+0000547509 00000 n
+0000547573 00000 n
+0000547638 00000 n
+0000547703 00000 n
+0000547768 00000 n
+0000547833 00000 n
+0000547898 00000 n
+0000547963 00000 n
+0000548028 00000 n
+0000548093 00000 n
+0000548157 00000 n
+0000548222 00000 n
+0000548287 00000 n
+0000548352 00000 n
+0000548416 00000 n
+0000548481 00000 n
+0000548546 00000 n
+0000548611 00000 n
+0000548676 00000 n
+0000548741 00000 n
+0000548806 00000 n
+0000548871 00000 n
+0000548936 00000 n
+0000549001 00000 n
+0000549066 00000 n
+0000549131 00000 n
+0000549195 00000 n
+0000549260 00000 n
+0000549325 00000 n
+0000549390 00000 n
+0000549455 00000 n
+0000549519 00000 n
+0000555473 00000 n
+0000551977 00000 n
+0000549786 00000 n
+0000552102 00000 n
+0000552166 00000 n
+0000552231 00000 n
+0000552296 00000 n
+0000552361 00000 n
+0000552426 00000 n
+0000552491 00000 n
+0000552556 00000 n
+0000552621 00000 n
+0000552686 00000 n
+0000552751 00000 n
+0000552816 00000 n
+0000552881 00000 n
+0000552946 00000 n
+0000553011 00000 n
+0000553075 00000 n
+0000553140 00000 n
+0000553205 00000 n
+0000553270 00000 n
+0000553335 00000 n
+0000553400 00000 n
+0000553465 00000 n
+0000553530 00000 n
+0000553595 00000 n
+0000553659 00000 n
+0000553724 00000 n
+0000553788 00000 n
+0000553853 00000 n
+0000553918 00000 n
+0000553983 00000 n
+0000554048 00000 n
+0000554113 00000 n
+0000554178 00000 n
+0000554243 00000 n
+0000554308 00000 n
+0000554372 00000 n
+0000554437 00000 n
+0000554502 00000 n
+0000554567 00000 n
+0000554632 00000 n
+0000554697 00000 n
+0000554762 00000 n
+0000554827 00000 n
+0000554892 00000 n
+0000554957 00000 n
+0000555021 00000 n
+0000555085 00000 n
+0000555150 00000 n
+0000555215 00000 n
+0000555280 00000 n
+0000555345 00000 n
+0000555409 00000 n
+0000560991 00000 n
+0000559443 00000 n
+0000555650 00000 n
+0000559568 00000 n
+0000559632 00000 n
+0000559697 00000 n
+0000559762 00000 n
+0000559827 00000 n
+0000559892 00000 n
+0000559957 00000 n
+0000560022 00000 n
+0000560087 00000 n
+0000560152 00000 n
+0000560216 00000 n
+0000560281 00000 n
+0000560346 00000 n
+0000560411 00000 n
+0000560538 00000 n
+0000560603 00000 n
+0000560666 00000 n
+0000560731 00000 n
+0000560796 00000 n
+0000560861 00000 n
+0000560926 00000 n
+0000566773 00000 n
+0000563144 00000 n
+0000561234 00000 n
+0000563269 00000 n
+0000563333 00000 n
+0000563398 00000 n
+0000563463 00000 n
+0000563528 00000 n
+0000563593 00000 n
+0000563658 00000 n
+0000563723 00000 n
+0000563788 00000 n
+0000563853 00000 n
+0000563918 00000 n
+0000563983 00000 n
+0000564048 00000 n
+0000564113 00000 n
+0000564178 00000 n
+0000564243 00000 n
+0000564307 00000 n
+0000564372 00000 n
+0000564437 00000 n
+0000564502 00000 n
+0000564567 00000 n
+0000564632 00000 n
+0000564697 00000 n
+0000564762 00000 n
+0000564827 00000 n
+0000564891 00000 n
+0000564956 00000 n
+0000565021 00000 n
+0000565086 00000 n
+0000565151 00000 n
+0000565216 00000 n
+0000565281 00000 n
+0000565346 00000 n
+0000565411 00000 n
+0000565476 00000 n
+0000565541 00000 n
+0000565606 00000 n
+0000565671 00000 n
+0000565736 00000 n
+0000565801 00000 n
+0000565866 00000 n
+0000565931 00000 n
+0000565996 00000 n
+0000566061 00000 n
+0000566126 00000 n
+0000566191 00000 n
+0000566256 00000 n
+0000566321 00000 n
+0000566385 00000 n
+0000566450 00000 n
+0000566515 00000 n
+0000566580 00000 n
+0000566645 00000 n
+0000566709 00000 n
+0001874944 00000 n
+0000572486 00000 n
+0000568859 00000 n
+0000566950 00000 n
+0000568984 00000 n
+0000569048 00000 n
+0000569113 00000 n
+0000569178 00000 n
+0000569243 00000 n
+0000569308 00000 n
+0000569373 00000 n
+0000569438 00000 n
+0000569503 00000 n
+0000569568 00000 n
+0000569633 00000 n
+0000569698 00000 n
+0000569763 00000 n
+0000569827 00000 n
+0000569892 00000 n
+0000569957 00000 n
+0000570022 00000 n
+0000570087 00000 n
+0000570152 00000 n
+0000570217 00000 n
+0000570282 00000 n
+0000570347 00000 n
+0000570411 00000 n
+0000570476 00000 n
+0000570541 00000 n
+0000570606 00000 n
+0000570671 00000 n
+0000570736 00000 n
+0000570801 00000 n
+0000570866 00000 n
+0000570931 00000 n
+0000570995 00000 n
+0000571060 00000 n
+0000571125 00000 n
+0000571190 00000 n
+0000571255 00000 n
+0000571320 00000 n
+0000571385 00000 n
+0000571450 00000 n
+0000571515 00000 n
+0000571579 00000 n
+0000571644 00000 n
+0000571709 00000 n
+0000571774 00000 n
+0000571839 00000 n
+0000571904 00000 n
+0000571969 00000 n
+0000572034 00000 n
+0000572099 00000 n
+0000572164 00000 n
+0000572228 00000 n
+0000572293 00000 n
+0000572358 00000 n
+0000572422 00000 n
+0000578432 00000 n
+0000575258 00000 n
+0000572650 00000 n
+0000575383 00000 n
+0000575447 00000 n
+0000575512 00000 n
+0000575577 00000 n
+0000575642 00000 n
+0000575707 00000 n
+0000575772 00000 n
+0000575837 00000 n
+0000575902 00000 n
+0000575967 00000 n
+0000576031 00000 n
+0000576096 00000 n
+0000576161 00000 n
+0000576226 00000 n
+0000576291 00000 n
+0000576356 00000 n
+0000576421 00000 n
+0000576486 00000 n
+0000576551 00000 n
+0000576615 00000 n
+0000576680 00000 n
+0000576745 00000 n
+0000576810 00000 n
+0000576875 00000 n
+0000576940 00000 n
+0000577005 00000 n
+0000577070 00000 n
+0000577135 00000 n
+0000577198 00000 n
+0000577263 00000 n
+0000577328 00000 n
+0000577393 00000 n
+0000577458 00000 n
+0000577523 00000 n
+0000577588 00000 n
+0000577653 00000 n
+0000577718 00000 n
+0000577783 00000 n
+0000577847 00000 n
+0000577912 00000 n
+0000577977 00000 n
+0000578042 00000 n
+0000578107 00000 n
+0000578172 00000 n
+0000578237 00000 n
+0000578302 00000 n
+0000578367 00000 n
+0000584286 00000 n
+0000580529 00000 n
+0000578609 00000 n
+0000580654 00000 n
+0000580718 00000 n
+0000580783 00000 n
+0000580848 00000 n
+0000580913 00000 n
+0000580978 00000 n
+0000581043 00000 n
+0000581108 00000 n
+0000581172 00000 n
+0000581237 00000 n
+0000581302 00000 n
+0000581367 00000 n
+0000581432 00000 n
+0000581497 00000 n
+0000581562 00000 n
+0000581627 00000 n
+0000581692 00000 n
+0000581756 00000 n
+0000581821 00000 n
+0000581886 00000 n
+0000581951 00000 n
+0000582016 00000 n
+0000582081 00000 n
+0000582146 00000 n
+0000582211 00000 n
+0000582276 00000 n
+0000582341 00000 n
+0000582406 00000 n
+0000582471 00000 n
+0000582536 00000 n
+0000582601 00000 n
+0000582666 00000 n
+0000582731 00000 n
+0000582796 00000 n
+0000582860 00000 n
+0000582925 00000 n
+0000582990 00000 n
+0000583055 00000 n
+0000583120 00000 n
+0000583185 00000 n
+0000583250 00000 n
+0000583315 00000 n
+0000583380 00000 n
+0000583444 00000 n
+0000583509 00000 n
+0000583574 00000 n
+0000583639 00000 n
+0000583704 00000 n
+0000583769 00000 n
+0000583834 00000 n
+0000583899 00000 n
+0000583964 00000 n
+0000584028 00000 n
+0000584093 00000 n
+0000584158 00000 n
+0000584222 00000 n
+0000589869 00000 n
+0000586114 00000 n
+0000584463 00000 n
+0000586239 00000 n
+0000586303 00000 n
+0000586368 00000 n
+0000586433 00000 n
+0000586498 00000 n
+0000586563 00000 n
+0000586628 00000 n
+0000586693 00000 n
+0000586758 00000 n
+0000586823 00000 n
+0000586887 00000 n
+0000586951 00000 n
+0000587016 00000 n
+0000587081 00000 n
+0000587146 00000 n
+0000587211 00000 n
+0000587276 00000 n
+0000587341 00000 n
+0000587406 00000 n
+0000587471 00000 n
+0000587534 00000 n
+0000587599 00000 n
+0000587664 00000 n
+0000587729 00000 n
+0000587794 00000 n
+0000587859 00000 n
+0000587924 00000 n
+0000587989 00000 n
+0000588054 00000 n
+0000588118 00000 n
+0000588183 00000 n
+0000588248 00000 n
+0000588313 00000 n
+0000588378 00000 n
+0000588443 00000 n
+0000588508 00000 n
+0000588573 00000 n
+0000588638 00000 n
+0000588703 00000 n
+0000588768 00000 n
+0000588833 00000 n
+0000588898 00000 n
+0000588963 00000 n
+0000589028 00000 n
+0000589093 00000 n
+0000589158 00000 n
+0000589223 00000 n
+0000589288 00000 n
+0000589353 00000 n
+0000589416 00000 n
+0000589481 00000 n
+0000589546 00000 n
+0000589611 00000 n
+0000589676 00000 n
+0000589741 00000 n
+0000589805 00000 n
+0000595068 00000 n
+0000592286 00000 n
+0000590020 00000 n
+0000592411 00000 n
+0000592475 00000 n
+0000592540 00000 n
+0000592605 00000 n
+0000592670 00000 n
+0000592735 00000 n
+0000592800 00000 n
+0000592865 00000 n
+0000592930 00000 n
+0000592995 00000 n
+0000593059 00000 n
+0000593124 00000 n
+0000593189 00000 n
+0000593254 00000 n
+0000593319 00000 n
+0000593384 00000 n
+0000593449 00000 n
+0000593514 00000 n
+0000593579 00000 n
+0000593643 00000 n
+0000593708 00000 n
+0000593771 00000 n
+0000593836 00000 n
+0000593901 00000 n
+0000593966 00000 n
+0000594031 00000 n
+0000594096 00000 n
+0000594161 00000 n
+0000594226 00000 n
+0000594291 00000 n
+0000594355 00000 n
+0000594420 00000 n
+0000594485 00000 n
+0000594550 00000 n
+0000594615 00000 n
+0000594680 00000 n
+0000594745 00000 n
+0000594810 00000 n
+0000594875 00000 n
+0000594940 00000 n
+0000595004 00000 n
+0000600116 00000 n
+0000597463 00000 n
+0000595245 00000 n
+0000597588 00000 n
+0000597652 00000 n
+0000597717 00000 n
+0000597782 00000 n
+0000597847 00000 n
+0000597912 00000 n
+0000597977 00000 n
+0000598042 00000 n
+0000598107 00000 n
+0000598172 00000 n
+0000598237 00000 n
+0000598301 00000 n
+0000598366 00000 n
+0000598431 00000 n
+0000598496 00000 n
+0000598560 00000 n
+0000598625 00000 n
+0000598690 00000 n
+0000598755 00000 n
+0000598820 00000 n
+0000598885 00000 n
+0000598950 00000 n
+0000599015 00000 n
+0000599080 00000 n
+0000599145 00000 n
+0000599210 00000 n
+0000599275 00000 n
+0000599339 00000 n
+0000599404 00000 n
+0000599469 00000 n
+0000599534 00000 n
+0000599599 00000 n
+0000599664 00000 n
+0000599728 00000 n
+0000599793 00000 n
+0000599858 00000 n
+0000599923 00000 n
+0000599988 00000 n
+0000600052 00000 n
+0000606150 00000 n
+0000601876 00000 n
+0000600293 00000 n
+0000602001 00000 n
+0000602065 00000 n
+0000602130 00000 n
+0000602195 00000 n
+0000602260 00000 n
+0000602325 00000 n
+0000602390 00000 n
+0000602455 00000 n
+0000602520 00000 n
+0000602585 00000 n
+0000602649 00000 n
+0000602714 00000 n
+0000602779 00000 n
+0000602844 00000 n
+0000602909 00000 n
+0000602974 00000 n
+0000603039 00000 n
+0000603104 00000 n
+0000603169 00000 n
+0000603233 00000 n
+0000603297 00000 n
+0000603362 00000 n
+0000603427 00000 n
+0000603492 00000 n
+0000603557 00000 n
+0000603622 00000 n
+0000603687 00000 n
+0000603752 00000 n
+0000603817 00000 n
+0000603881 00000 n
+0000603946 00000 n
+0000604011 00000 n
+0000604076 00000 n
+0000604141 00000 n
+0000604206 00000 n
+0000604271 00000 n
+0000604336 00000 n
+0000604401 00000 n
+0000604465 00000 n
+0000604530 00000 n
+0000604595 00000 n
+0000604660 00000 n
+0000604725 00000 n
+0000604790 00000 n
+0000604855 00000 n
+0000604920 00000 n
+0000604985 00000 n
+0000605048 00000 n
+0000605113 00000 n
+0000605178 00000 n
+0000605243 00000 n
+0000605308 00000 n
+0000605373 00000 n
+0000605438 00000 n
+0000605503 00000 n
+0000605568 00000 n
+0000605633 00000 n
+0000605698 00000 n
+0000605762 00000 n
+0000605827 00000 n
+0000605892 00000 n
+0000605957 00000 n
+0000606022 00000 n
+0000606086 00000 n
+0000611044 00000 n
+0000608390 00000 n
+0000606301 00000 n
+0000608515 00000 n
+0000608579 00000 n
+0000608644 00000 n
+0000608709 00000 n
+0000608774 00000 n
+0000608839 00000 n
+0000608904 00000 n
+0000608969 00000 n
+0000609034 00000 n
+0000609099 00000 n
+0000609164 00000 n
+0000609228 00000 n
+0000609293 00000 n
+0000609358 00000 n
+0000609423 00000 n
+0000609488 00000 n
+0000609552 00000 n
+0000609617 00000 n
+0000609682 00000 n
+0000609747 00000 n
+0000609812 00000 n
+0000609877 00000 n
+0000609942 00000 n
+0000610007 00000 n
+0000610072 00000 n
+0000610137 00000 n
+0000610202 00000 n
+0000610267 00000 n
+0000610332 00000 n
+0000610397 00000 n
+0000610462 00000 n
+0000610527 00000 n
+0000610591 00000 n
+0000610656 00000 n
+0000610721 00000 n
+0000610786 00000 n
+0000610851 00000 n
+0000610916 00000 n
+0000610980 00000 n
+0000616831 00000 n
+0000613205 00000 n
+0000611234 00000 n
+0000613330 00000 n
+0000613394 00000 n
+0000613459 00000 n
+0000613524 00000 n
+0000613589 00000 n
+0000613654 00000 n
+0000613719 00000 n
+0000613784 00000 n
+0000613849 00000 n
+0000613914 00000 n
+0000613979 00000 n
+0000614044 00000 n
+0000614108 00000 n
+0000614173 00000 n
+0000614238 00000 n
+0000614301 00000 n
+0000614366 00000 n
+0000614431 00000 n
+0000614496 00000 n
+0000614561 00000 n
+0000614626 00000 n
+0000614691 00000 n
+0000614756 00000 n
+0000614821 00000 n
+0000614886 00000 n
+0000614951 00000 n
+0000615016 00000 n
+0000615081 00000 n
+0000615146 00000 n
+0000615211 00000 n
+0000615276 00000 n
+0000615340 00000 n
+0000615405 00000 n
+0000615470 00000 n
+0000615535 00000 n
+0000615600 00000 n
+0000615665 00000 n
+0000615730 00000 n
+0000615795 00000 n
+0000615860 00000 n
+0000615925 00000 n
+0000615990 00000 n
+0000616055 00000 n
+0000616119 00000 n
+0000616184 00000 n
+0000616249 00000 n
+0000616314 00000 n
+0000616379 00000 n
+0000616444 00000 n
+0000616509 00000 n
+0000616573 00000 n
+0000616638 00000 n
+0000616703 00000 n
+0000616767 00000 n
+0000621670 00000 n
+0000619080 00000 n
+0000617008 00000 n
+0000619205 00000 n
+0000619269 00000 n
+0000619334 00000 n
+0000619399 00000 n
+0000619464 00000 n
+0000619529 00000 n
+0000619594 00000 n
+0000619659 00000 n
+0000619724 00000 n
+0000619789 00000 n
+0000619854 00000 n
+0000619919 00000 n
+0000619984 00000 n
+0000620049 00000 n
+0000620114 00000 n
+0000620178 00000 n
+0000620243 00000 n
+0000620308 00000 n
+0000620373 00000 n
+0000620438 00000 n
+0000620503 00000 n
+0000620568 00000 n
+0000620633 00000 n
+0000620698 00000 n
+0000620763 00000 n
+0000620828 00000 n
+0000620893 00000 n
+0000620957 00000 n
+0000621022 00000 n
+0000621087 00000 n
+0000621152 00000 n
+0000621217 00000 n
+0000621282 00000 n
+0000621347 00000 n
+0000621412 00000 n
+0000621477 00000 n
+0000621542 00000 n
+0000621606 00000 n
+0001875109 00000 n
+0000626242 00000 n
+0000623977 00000 n
+0000621847 00000 n
+0000624102 00000 n
+0000624166 00000 n
+0000624231 00000 n
+0000624296 00000 n
+0000624361 00000 n
+0000624426 00000 n
+0000624491 00000 n
+0000624556 00000 n
+0000624621 00000 n
+0000624686 00000 n
+0000624751 00000 n
+0000624816 00000 n
+0000624881 00000 n
+0000624946 00000 n
+0000625011 00000 n
+0000625076 00000 n
+0000625141 00000 n
+0000625206 00000 n
+0000625271 00000 n
+0000625336 00000 n
+0000625401 00000 n
+0000625466 00000 n
+0000625531 00000 n
+0000625596 00000 n
+0000625661 00000 n
+0000625724 00000 n
+0000625789 00000 n
+0000625854 00000 n
+0000625919 00000 n
+0000625984 00000 n
+0000626049 00000 n
+0000626114 00000 n
+0000626177 00000 n
+0000630983 00000 n
+0000628009 00000 n
+0000626446 00000 n
+0000628134 00000 n
+0000628198 00000 n
+0000628263 00000 n
+0000628328 00000 n
+0000628393 00000 n
+0000628458 00000 n
+0000628523 00000 n
+0000628588 00000 n
+0000628653 00000 n
+0000628718 00000 n
+0000628782 00000 n
+0000628847 00000 n
+0000628912 00000 n
+0000628977 00000 n
+0000629042 00000 n
+0000629107 00000 n
+0000629172 00000 n
+0000629237 00000 n
+0000629302 00000 n
+0000629366 00000 n
+0000629431 00000 n
+0000629496 00000 n
+0000629561 00000 n
+0000629626 00000 n
+0000629691 00000 n
+0000629756 00000 n
+0000629821 00000 n
+0000629886 00000 n
+0000629949 00000 n
+0000630014 00000 n
+0000630079 00000 n
+0000630144 00000 n
+0000630209 00000 n
+0000630274 00000 n
+0000630339 00000 n
+0000630404 00000 n
+0000630531 00000 n
+0000630595 00000 n
+0000630660 00000 n
+0000630725 00000 n
+0000630790 00000 n
+0000630855 00000 n
+0000630919 00000 n
+0000636556 00000 n
+0000633514 00000 n
+0000631173 00000 n
+0000633639 00000 n
+0000633703 00000 n
+0000633768 00000 n
+0000633833 00000 n
+0000633898 00000 n
+0000633963 00000 n
+0000634028 00000 n
+0000634093 00000 n
+0000634157 00000 n
+0000634222 00000 n
+0000634287 00000 n
+0000634352 00000 n
+0000634417 00000 n
+0000634482 00000 n
+0000634547 00000 n
+0000634612 00000 n
+0000634677 00000 n
+0000634742 00000 n
+0000634807 00000 n
+0000634871 00000 n
+0000634936 00000 n
+0000635000 00000 n
+0000635065 00000 n
+0000635130 00000 n
+0000635195 00000 n
+0000635260 00000 n
+0000635325 00000 n
+0000635390 00000 n
+0000635455 00000 n
+0000635520 00000 n
+0000635585 00000 n
+0000635649 00000 n
+0000635714 00000 n
+0000635779 00000 n
+0000635844 00000 n
+0000635909 00000 n
+0000635974 00000 n
+0000636039 00000 n
+0000636104 00000 n
+0000636168 00000 n
+0000636233 00000 n
+0000636298 00000 n
+0000636363 00000 n
+0000636428 00000 n
+0000636492 00000 n
+0000642637 00000 n
+0000638946 00000 n
+0000636746 00000 n
+0000639071 00000 n
+0000639135 00000 n
+0000639200 00000 n
+0000639265 00000 n
+0000639330 00000 n
+0000639395 00000 n
+0000639460 00000 n
+0000639525 00000 n
+0000639589 00000 n
+0000639654 00000 n
+0000639719 00000 n
+0000639784 00000 n
+0000639849 00000 n
+0000639914 00000 n
+0000639979 00000 n
+0000640044 00000 n
+0000640109 00000 n
+0000640174 00000 n
+0000640239 00000 n
+0000640304 00000 n
+0000640368 00000 n
+0000640433 00000 n
+0000640498 00000 n
+0000640563 00000 n
+0000640628 00000 n
+0000640693 00000 n
+0000640758 00000 n
+0000640822 00000 n
+0000640887 00000 n
+0000640952 00000 n
+0000641017 00000 n
+0000641082 00000 n
+0000641147 00000 n
+0000641212 00000 n
+0000641277 00000 n
+0000641342 00000 n
+0000641407 00000 n
+0000641471 00000 n
+0000641536 00000 n
+0000641601 00000 n
+0000641666 00000 n
+0000641731 00000 n
+0000641796 00000 n
+0000641861 00000 n
+0000641926 00000 n
+0000641991 00000 n
+0000642055 00000 n
+0000642120 00000 n
+0000642185 00000 n
+0000642250 00000 n
+0000642315 00000 n
+0000642380 00000 n
+0000642445 00000 n
+0000642510 00000 n
+0000642574 00000 n
+0000648293 00000 n
+0000644925 00000 n
+0000642827 00000 n
+0000645050 00000 n
+0000645114 00000 n
+0000645179 00000 n
+0000645244 00000 n
+0000645309 00000 n
+0000645374 00000 n
+0000645439 00000 n
+0000645504 00000 n
+0000645569 00000 n
+0000645634 00000 n
+0000645699 00000 n
+0000645764 00000 n
+0000645829 00000 n
+0000645894 00000 n
+0000645959 00000 n
+0000646024 00000 n
+0000646089 00000 n
+0000646154 00000 n
+0000646219 00000 n
+0000646284 00000 n
+0000646349 00000 n
+0000646413 00000 n
+0000646478 00000 n
+0000646543 00000 n
+0000646608 00000 n
+0000646673 00000 n
+0000646738 00000 n
+0000646802 00000 n
+0000646867 00000 n
+0000646932 00000 n
+0000646997 00000 n
+0000647062 00000 n
+0000647127 00000 n
+0000647192 00000 n
+0000647257 00000 n
+0000647322 00000 n
+0000647386 00000 n
+0000647451 00000 n
+0000647516 00000 n
+0000647581 00000 n
+0000647646 00000 n
+0000647711 00000 n
+0000647776 00000 n
+0000647841 00000 n
+0000647905 00000 n
+0000647970 00000 n
+0000648035 00000 n
+0000648100 00000 n
+0000648165 00000 n
+0000648229 00000 n
+0000653982 00000 n
+0000650160 00000 n
+0000648470 00000 n
+0000650285 00000 n
+0000650349 00000 n
+0000650414 00000 n
+0000650479 00000 n
+0000650544 00000 n
+0000650609 00000 n
+0000650673 00000 n
+0000650738 00000 n
+0000650803 00000 n
+0000650868 00000 n
+0000650933 00000 n
+0000650998 00000 n
+0000651063 00000 n
+0000651128 00000 n
+0000651193 00000 n
+0000651258 00000 n
+0000651323 00000 n
+0000651388 00000 n
+0000651453 00000 n
+0000651518 00000 n
+0000651583 00000 n
+0000651648 00000 n
+0000651713 00000 n
+0000651777 00000 n
+0000651842 00000 n
+0000651907 00000 n
+0000651972 00000 n
+0000652037 00000 n
+0000652102 00000 n
+0000652167 00000 n
+0000652232 00000 n
+0000652297 00000 n
+0000652362 00000 n
+0000652426 00000 n
+0000652491 00000 n
+0000652556 00000 n
+0000652621 00000 n
+0000652686 00000 n
+0000652751 00000 n
+0000652816 00000 n
+0000652881 00000 n
+0000652946 00000 n
+0000653010 00000 n
+0000653075 00000 n
+0000653140 00000 n
+0000653205 00000 n
+0000653270 00000 n
+0000653335 00000 n
+0000653400 00000 n
+0000653465 00000 n
+0000653530 00000 n
+0000653594 00000 n
+0000653659 00000 n
+0000653724 00000 n
+0000653789 00000 n
+0000653854 00000 n
+0000653918 00000 n
+0000659820 00000 n
+0000655545 00000 n
+0000654146 00000 n
+0000655670 00000 n
+0000655734 00000 n
+0000655799 00000 n
+0000655864 00000 n
+0000655929 00000 n
+0000655994 00000 n
+0000656059 00000 n
+0000656124 00000 n
+0000656189 00000 n
+0000656254 00000 n
+0000656318 00000 n
+0000656383 00000 n
+0000656448 00000 n
+0000656513 00000 n
+0000656578 00000 n
+0000656643 00000 n
+0000656708 00000 n
+0000656773 00000 n
+0000656838 00000 n
+0000656902 00000 n
+0000656967 00000 n
+0000657032 00000 n
+0000657097 00000 n
+0000657162 00000 n
+0000657227 00000 n
+0000657292 00000 n
+0000657357 00000 n
+0000657422 00000 n
+0000657485 00000 n
+0000657550 00000 n
+0000657615 00000 n
+0000657680 00000 n
+0000657745 00000 n
+0000657810 00000 n
+0000657875 00000 n
+0000657940 00000 n
+0000658005 00000 n
+0000658069 00000 n
+0000658134 00000 n
+0000658199 00000 n
+0000658264 00000 n
+0000658329 00000 n
+0000658394 00000 n
+0000658459 00000 n
+0000658524 00000 n
+0000658589 00000 n
+0000658653 00000 n
+0000658718 00000 n
+0000658783 00000 n
+0000658848 00000 n
+0000658913 00000 n
+0000658978 00000 n
+0000659043 00000 n
+0000659108 00000 n
+0000659173 00000 n
+0000659237 00000 n
+0000659302 00000 n
+0000659367 00000 n
+0000659432 00000 n
+0000659497 00000 n
+0000659562 00000 n
+0000659627 00000 n
+0000659692 00000 n
+0000659757 00000 n
+0000665647 00000 n
+0000662348 00000 n
+0000659971 00000 n
+0000662473 00000 n
+0000662599 00000 n
+0000662664 00000 n
+0000662729 00000 n
+0000662794 00000 n
+0000662859 00000 n
+0000662924 00000 n
+0000662989 00000 n
+0000663054 00000 n
+0000663119 00000 n
+0000663184 00000 n
+0000663249 00000 n
+0000663314 00000 n
+0000663378 00000 n
+0000663443 00000 n
+0000663508 00000 n
+0000663573 00000 n
+0000663638 00000 n
+0000663703 00000 n
+0000663768 00000 n
+0000663833 00000 n
+0000663898 00000 n
+0000663962 00000 n
+0000664027 00000 n
+0000664092 00000 n
+0000664157 00000 n
+0000664222 00000 n
+0000664287 00000 n
+0000664352 00000 n
+0000664416 00000 n
+0000664481 00000 n
+0000664546 00000 n
+0000664611 00000 n
+0000664676 00000 n
+0000664741 00000 n
+0000664806 00000 n
+0000664871 00000 n
+0000664936 00000 n
+0000665000 00000 n
+0000665065 00000 n
+0000665130 00000 n
+0000665195 00000 n
+0000665260 00000 n
+0000665325 00000 n
+0000665390 00000 n
+0000665454 00000 n
+0000665519 00000 n
+0000665583 00000 n
+0000671482 00000 n
+0000667400 00000 n
+0000665863 00000 n
+0000667525 00000 n
+0000667589 00000 n
+0000667654 00000 n
+0000667719 00000 n
+0000667784 00000 n
+0000667849 00000 n
+0000667914 00000 n
+0000667979 00000 n
+0000668044 00000 n
+0000668109 00000 n
+0000668173 00000 n
+0000668238 00000 n
+0000668303 00000 n
+0000668368 00000 n
+0000668433 00000 n
+0000668498 00000 n
+0000668563 00000 n
+0000668628 00000 n
+0000668692 00000 n
+0000668757 00000 n
+0000668822 00000 n
+0000668887 00000 n
+0000668952 00000 n
+0000669017 00000 n
+0000669082 00000 n
+0000669147 00000 n
+0000669212 00000 n
+0000669277 00000 n
+0000669341 00000 n
+0000669406 00000 n
+0000669471 00000 n
+0000669536 00000 n
+0000669601 00000 n
+0000669666 00000 n
+0000669731 00000 n
+0000669796 00000 n
+0000669861 00000 n
+0000669925 00000 n
+0000669990 00000 n
+0000670055 00000 n
+0000670120 00000 n
+0000670185 00000 n
+0000670250 00000 n
+0000670315 00000 n
+0000670380 00000 n
+0000670445 00000 n
+0000670510 00000 n
+0000670575 00000 n
+0000670640 00000 n
+0000670705 00000 n
+0000670770 00000 n
+0000670835 00000 n
+0000670900 00000 n
+0000670965 00000 n
+0000671030 00000 n
+0000671094 00000 n
+0000671159 00000 n
+0000671224 00000 n
+0000671289 00000 n
+0000671354 00000 n
+0000671418 00000 n
+0000676972 00000 n
+0000674126 00000 n
+0000671633 00000 n
+0000674251 00000 n
+0000674315 00000 n
+0000674380 00000 n
+0000674445 00000 n
+0000674510 00000 n
+0000674575 00000 n
+0000674639 00000 n
+0000674704 00000 n
+0000674769 00000 n
+0000674834 00000 n
+0000674899 00000 n
+0000674964 00000 n
+0000675029 00000 n
+0000675093 00000 n
+0000675158 00000 n
+0000675223 00000 n
+0000675287 00000 n
+0000675352 00000 n
+0000675417 00000 n
+0000675482 00000 n
+0000675547 00000 n
+0000675611 00000 n
+0000675676 00000 n
+0000675741 00000 n
+0000675806 00000 n
+0000675871 00000 n
+0000675936 00000 n
+0000676001 00000 n
+0000676066 00000 n
+0000676131 00000 n
+0000676195 00000 n
+0000676260 00000 n
+0000676325 00000 n
+0000676390 00000 n
+0000676455 00000 n
+0000676520 00000 n
+0000676585 00000 n
+0000676650 00000 n
+0000676715 00000 n
+0000676780 00000 n
+0000676844 00000 n
+0000676908 00000 n
+0001875274 00000 n
+0000682729 00000 n
+0000678715 00000 n
+0000677149 00000 n
+0000678840 00000 n
+0000678904 00000 n
+0000678969 00000 n
+0000679034 00000 n
+0000679099 00000 n
+0000679164 00000 n
+0000679229 00000 n
+0000679294 00000 n
+0000679359 00000 n
+0000679424 00000 n
+0000679488 00000 n
+0000679553 00000 n
+0000679618 00000 n
+0000679683 00000 n
+0000679748 00000 n
+0000679813 00000 n
+0000679878 00000 n
+0000679943 00000 n
+0000680008 00000 n
+0000680072 00000 n
+0000680137 00000 n
+0000680202 00000 n
+0000680267 00000 n
+0000680332 00000 n
+0000680397 00000 n
+0000680462 00000 n
+0000680526 00000 n
+0000680591 00000 n
+0000680656 00000 n
+0000680721 00000 n
+0000680786 00000 n
+0000680851 00000 n
+0000680916 00000 n
+0000680979 00000 n
+0000681044 00000 n
+0000681109 00000 n
+0000681174 00000 n
+0000681239 00000 n
+0000681304 00000 n
+0000681369 00000 n
+0000681434 00000 n
+0000681499 00000 n
+0000681563 00000 n
+0000681628 00000 n
+0000681693 00000 n
+0000681758 00000 n
+0000681823 00000 n
+0000681888 00000 n
+0000681953 00000 n
+0000682018 00000 n
+0000682083 00000 n
+0000682147 00000 n
+0000682212 00000 n
+0000682277 00000 n
+0000682342 00000 n
+0000682407 00000 n
+0000682472 00000 n
+0000682537 00000 n
+0000682602 00000 n
+0000682666 00000 n
+0000688244 00000 n
+0000684808 00000 n
+0000682880 00000 n
+0000684933 00000 n
+0000684997 00000 n
+0000685062 00000 n
+0000685127 00000 n
+0000685192 00000 n
+0000685257 00000 n
+0000685322 00000 n
+0000685387 00000 n
+0000685452 00000 n
+0000685517 00000 n
+0000685582 00000 n
+0000685646 00000 n
+0000685711 00000 n
+0000685776 00000 n
+0000685841 00000 n
+0000685906 00000 n
+0000685971 00000 n
+0000686036 00000 n
+0000686101 00000 n
+0000686166 00000 n
+0000686231 00000 n
+0000686296 00000 n
+0000686361 00000 n
+0000686426 00000 n
+0000686491 00000 n
+0000686556 00000 n
+0000686621 00000 n
+0000686686 00000 n
+0000686750 00000 n
+0000686815 00000 n
+0000686880 00000 n
+0000686945 00000 n
+0000687010 00000 n
+0000687075 00000 n
+0000687140 00000 n
+0000687205 00000 n
+0000687270 00000 n
+0000687334 00000 n
+0000687399 00000 n
+0000687464 00000 n
+0000687529 00000 n
+0000687594 00000 n
+0000687659 00000 n
+0000687724 00000 n
+0000687789 00000 n
+0000687854 00000 n
+0000687919 00000 n
+0000687984 00000 n
+0000688049 00000 n
+0000688114 00000 n
+0000688179 00000 n
+0000693965 00000 n
+0000690338 00000 n
+0000688408 00000 n
+0000690463 00000 n
+0000690527 00000 n
+0000690592 00000 n
+0000690657 00000 n
+0000690722 00000 n
+0000690787 00000 n
+0000690852 00000 n
+0000690917 00000 n
+0000690982 00000 n
+0000691047 00000 n
+0000691112 00000 n
+0000691177 00000 n
+0000691242 00000 n
+0000691307 00000 n
+0000691372 00000 n
+0000691437 00000 n
+0000691502 00000 n
+0000691565 00000 n
+0000691630 00000 n
+0000691695 00000 n
+0000691760 00000 n
+0000691825 00000 n
+0000691890 00000 n
+0000691955 00000 n
+0000692020 00000 n
+0000692085 00000 n
+0000692149 00000 n
+0000692214 00000 n
+0000692279 00000 n
+0000692344 00000 n
+0000692409 00000 n
+0000692474 00000 n
+0000692539 00000 n
+0000692604 00000 n
+0000692669 00000 n
+0000692733 00000 n
+0000692798 00000 n
+0000692863 00000 n
+0000692928 00000 n
+0000692993 00000 n
+0000693058 00000 n
+0000693123 00000 n
+0000693188 00000 n
+0000693253 00000 n
+0000693318 00000 n
+0000693382 00000 n
+0000693447 00000 n
+0000693512 00000 n
+0000693577 00000 n
+0000693642 00000 n
+0000693707 00000 n
+0000693772 00000 n
+0000693837 00000 n
+0000693901 00000 n
+0000696900 00000 n
+0000699521 00000 n
+0000696727 00000 n
+0000694129 00000 n
+0000697058 00000 n
+0000697122 00000 n
+0000697187 00000 n
+0000697252 00000 n
+0000697317 00000 n
+0000697382 00000 n
+0000697447 00000 n
+0000697512 00000 n
+0000697577 00000 n
+0000697641 00000 n
+0000697706 00000 n
+0000697771 00000 n
+0000697836 00000 n
+0000697963 00000 n
+0000698028 00000 n
+0000698093 00000 n
+0000698158 00000 n
+0000698223 00000 n
+0000698288 00000 n
+0000698353 00000 n
+0000698418 00000 n
+0000698483 00000 n
+0000698548 00000 n
+0000698613 00000 n
+0000698678 00000 n
+0000698743 00000 n
+0000698808 00000 n
+0000698872 00000 n
+0000698937 00000 n
+0000699002 00000 n
+0000699067 00000 n
+0000699132 00000 n
+0000699197 00000 n
+0000699262 00000 n
+0000699327 00000 n
+0000699392 00000 n
+0000699457 00000 n
+0000696869 00000 n
+0000704751 00000 n
+0000702294 00000 n
+0000699789 00000 n
+0000702419 00000 n
+0000702483 00000 n
+0000702548 00000 n
+0000702613 00000 n
+0000702678 00000 n
+0000702743 00000 n
+0000702808 00000 n
+0000702873 00000 n
+0000702938 00000 n
+0000703003 00000 n
+0000703068 00000 n
+0000703132 00000 n
+0000703197 00000 n
+0000703262 00000 n
+0000703327 00000 n
+0000703392 00000 n
+0000703457 00000 n
+0000703521 00000 n
+0000703586 00000 n
+0000703651 00000 n
+0000703716 00000 n
+0000703781 00000 n
+0000703845 00000 n
+0000703910 00000 n
+0000703975 00000 n
+0000704040 00000 n
+0000704105 00000 n
+0000704170 00000 n
+0000704235 00000 n
+0000704299 00000 n
+0000704364 00000 n
+0000704429 00000 n
+0000704494 00000 n
+0000704559 00000 n
+0000704624 00000 n
+0000710207 00000 n
+0000706907 00000 n
+0000704941 00000 n
+0000707032 00000 n
+0000707096 00000 n
+0000707161 00000 n
+0000707226 00000 n
+0000707291 00000 n
+0000707356 00000 n
+0000707420 00000 n
+0000707485 00000 n
+0000707550 00000 n
+0000707615 00000 n
+0000707680 00000 n
+0000707744 00000 n
+0000707809 00000 n
+0000707874 00000 n
+0000707939 00000 n
+0000708004 00000 n
+0000708069 00000 n
+0000708134 00000 n
+0000708198 00000 n
+0000708263 00000 n
+0000708328 00000 n
+0000708393 00000 n
+0000708458 00000 n
+0000708523 00000 n
+0000708588 00000 n
+0000708653 00000 n
+0000708718 00000 n
+0000708781 00000 n
+0000708846 00000 n
+0000708911 00000 n
+0000708976 00000 n
+0000709041 00000 n
+0000709106 00000 n
+0000709171 00000 n
+0000709236 00000 n
+0000709301 00000 n
+0000709365 00000 n
+0000709430 00000 n
+0000709495 00000 n
+0000709560 00000 n
+0000709625 00000 n
+0000709690 00000 n
+0000709755 00000 n
+0000709819 00000 n
+0000709884 00000 n
+0000709949 00000 n
+0000710014 00000 n
+0000710079 00000 n
+0000710143 00000 n
+0000715660 00000 n
+0000712291 00000 n
+0000710384 00000 n
+0000712416 00000 n
+0000712480 00000 n
+0000712545 00000 n
+0000712610 00000 n
+0000712675 00000 n
+0000712740 00000 n
+0000712805 00000 n
+0000712870 00000 n
+0000712935 00000 n
+0000713000 00000 n
+0000713065 00000 n
+0000713130 00000 n
+0000713195 00000 n
+0000713260 00000 n
+0000713325 00000 n
+0000713390 00000 n
+0000713455 00000 n
+0000713520 00000 n
+0000713585 00000 n
+0000713650 00000 n
+0000713715 00000 n
+0000713780 00000 n
+0000713845 00000 n
+0000713910 00000 n
+0000713974 00000 n
+0000714039 00000 n
+0000714104 00000 n
+0000714168 00000 n
+0000714233 00000 n
+0000714298 00000 n
+0000714363 00000 n
+0000714428 00000 n
+0000714493 00000 n
+0000714558 00000 n
+0000714623 00000 n
+0000714688 00000 n
+0000714753 00000 n
+0000714818 00000 n
+0000714881 00000 n
+0000714946 00000 n
+0000715011 00000 n
+0000715076 00000 n
+0000715141 00000 n
+0000715206 00000 n
+0000715271 00000 n
+0000715336 00000 n
+0000715401 00000 n
+0000715466 00000 n
+0000715531 00000 n
+0000715596 00000 n
+0000721074 00000 n
+0000718943 00000 n
+0000715837 00000 n
+0000719068 00000 n
+0000719132 00000 n
+0000719197 00000 n
+0000719261 00000 n
+0000719326 00000 n
+0000719391 00000 n
+0000719456 00000 n
+0000719521 00000 n
+0000719586 00000 n
+0000719651 00000 n
+0000719716 00000 n
+0000719781 00000 n
+0000719845 00000 n
+0000719910 00000 n
+0000719975 00000 n
+0000720040 00000 n
+0000720105 00000 n
+0000720170 00000 n
+0000720235 00000 n
+0000720300 00000 n
+0000720365 00000 n
+0000720491 00000 n
+0000720556 00000 n
+0000720621 00000 n
+0000720686 00000 n
+0000720751 00000 n
+0000720816 00000 n
+0000720881 00000 n
+0000720946 00000 n
+0000721010 00000 n
+0000727072 00000 n
+0000723638 00000 n
+0000721329 00000 n
+0000723763 00000 n
+0000723827 00000 n
+0000723892 00000 n
+0000723957 00000 n
+0000724022 00000 n
+0000724087 00000 n
+0000724152 00000 n
+0000724217 00000 n
+0000724282 00000 n
+0000724347 00000 n
+0000724412 00000 n
+0000724477 00000 n
+0000724542 00000 n
+0000724607 00000 n
+0000724672 00000 n
+0000724737 00000 n
+0000724802 00000 n
+0000724867 00000 n
+0000724932 00000 n
+0000724997 00000 n
+0000725061 00000 n
+0000725126 00000 n
+0000725191 00000 n
+0000725256 00000 n
+0000725321 00000 n
+0000725386 00000 n
+0000725450 00000 n
+0000725515 00000 n
+0000725580 00000 n
+0000725645 00000 n
+0000725710 00000 n
+0000725775 00000 n
+0000725840 00000 n
+0000725905 00000 n
+0000725970 00000 n
+0000726035 00000 n
+0000726100 00000 n
+0000726165 00000 n
+0000726230 00000 n
+0000726295 00000 n
+0000726360 00000 n
+0000726425 00000 n
+0000726490 00000 n
+0000726555 00000 n
+0000726620 00000 n
+0000726684 00000 n
+0000726749 00000 n
+0000726814 00000 n
+0000726879 00000 n
+0000726944 00000 n
+0000727008 00000 n
+0000732581 00000 n
+0000729603 00000 n
+0000727275 00000 n
+0000729728 00000 n
+0000729792 00000 n
+0000729857 00000 n
+0000729922 00000 n
+0000729987 00000 n
+0000730052 00000 n
+0000730117 00000 n
+0000730182 00000 n
+0000730245 00000 n
+0000730310 00000 n
+0000730375 00000 n
+0000730440 00000 n
+0000730505 00000 n
+0000730570 00000 n
+0000730635 00000 n
+0000730700 00000 n
+0000730765 00000 n
+0000730830 00000 n
+0000730895 00000 n
+0000730960 00000 n
+0000731025 00000 n
+0000731090 00000 n
+0000731155 00000 n
+0000731220 00000 n
+0000731285 00000 n
+0000731350 00000 n
+0000731415 00000 n
+0000731479 00000 n
+0000731544 00000 n
+0000731608 00000 n
+0000731673 00000 n
+0000731738 00000 n
+0000731803 00000 n
+0000731868 00000 n
+0000731933 00000 n
+0000731998 00000 n
+0000732063 00000 n
+0000732128 00000 n
+0000732193 00000 n
+0000732258 00000 n
+0000732323 00000 n
+0000732388 00000 n
+0000732453 00000 n
+0000732517 00000 n
+0001875439 00000 n
+0000737491 00000 n
+0000734189 00000 n
+0000732758 00000 n
+0000734314 00000 n
+0000734378 00000 n
+0000734443 00000 n
+0000734508 00000 n
+0000734573 00000 n
+0000734637 00000 n
+0000734702 00000 n
+0000734767 00000 n
+0000734832 00000 n
+0000734897 00000 n
+0000734962 00000 n
+0000735027 00000 n
+0000735092 00000 n
+0000735157 00000 n
+0000735222 00000 n
+0000735286 00000 n
+0000735351 00000 n
+0000735416 00000 n
+0000735481 00000 n
+0000735546 00000 n
+0000735611 00000 n
+0000735676 00000 n
+0000735740 00000 n
+0000735805 00000 n
+0000735870 00000 n
+0000735935 00000 n
+0000736000 00000 n
+0000736065 00000 n
+0000736130 00000 n
+0000736194 00000 n
+0000736259 00000 n
+0000736324 00000 n
+0000736389 00000 n
+0000736454 00000 n
+0000736519 00000 n
+0000736584 00000 n
+0000736649 00000 n
+0000736714 00000 n
+0000736779 00000 n
+0000736844 00000 n
+0000736909 00000 n
+0000736974 00000 n
+0000737039 00000 n
+0000737104 00000 n
+0000737169 00000 n
+0000737234 00000 n
+0000737298 00000 n
+0000737363 00000 n
+0000737427 00000 n
+0000742795 00000 n
+0000739879 00000 n
+0000737655 00000 n
+0000740004 00000 n
+0000740068 00000 n
+0000740133 00000 n
+0000740198 00000 n
+0000740263 00000 n
+0000740328 00000 n
+0000740393 00000 n
+0000740458 00000 n
+0000740523 00000 n
+0000740588 00000 n
+0000740653 00000 n
+0000740718 00000 n
+0000740783 00000 n
+0000740848 00000 n
+0000740913 00000 n
+0000740977 00000 n
+0000741042 00000 n
+0000741107 00000 n
+0000741172 00000 n
+0000741237 00000 n
+0000741301 00000 n
+0000741366 00000 n
+0000741431 00000 n
+0000741496 00000 n
+0000741561 00000 n
+0000741626 00000 n
+0000741691 00000 n
+0000741756 00000 n
+0000741821 00000 n
+0000741886 00000 n
+0000741950 00000 n
+0000742015 00000 n
+0000742080 00000 n
+0000742145 00000 n
+0000742210 00000 n
+0000742275 00000 n
+0000742340 00000 n
+0000742405 00000 n
+0000742470 00000 n
+0000742535 00000 n
+0000742600 00000 n
+0000742665 00000 n
+0000742730 00000 n
+0000748507 00000 n
+0000745530 00000 n
+0000742985 00000 n
+0000745655 00000 n
+0000745719 00000 n
+0000745784 00000 n
+0000745848 00000 n
+0000745913 00000 n
+0000745978 00000 n
+0000746042 00000 n
+0000746107 00000 n
+0000746172 00000 n
+0000746237 00000 n
+0000746302 00000 n
+0000746367 00000 n
+0000746432 00000 n
+0000746496 00000 n
+0000746561 00000 n
+0000746626 00000 n
+0000746691 00000 n
+0000746756 00000 n
+0000746821 00000 n
+0000746886 00000 n
+0000746951 00000 n
+0000747016 00000 n
+0000747081 00000 n
+0000747146 00000 n
+0000747211 00000 n
+0000747276 00000 n
+0000747341 00000 n
+0000747406 00000 n
+0000747471 00000 n
+0000747536 00000 n
+0000747600 00000 n
+0000747665 00000 n
+0000747730 00000 n
+0000747795 00000 n
+0000747860 00000 n
+0000747924 00000 n
+0000747989 00000 n
+0000748054 00000 n
+0000748119 00000 n
+0000748184 00000 n
+0000748249 00000 n
+0000748314 00000 n
+0000748379 00000 n
+0000748443 00000 n
+0000754110 00000 n
+0000750808 00000 n
+0000748697 00000 n
+0000750933 00000 n
+0000750997 00000 n
+0000751062 00000 n
+0000751127 00000 n
+0000751192 00000 n
+0000751257 00000 n
+0000751322 00000 n
+0000751387 00000 n
+0000751452 00000 n
+0000751517 00000 n
+0000751581 00000 n
+0000751646 00000 n
+0000751711 00000 n
+0000751776 00000 n
+0000751841 00000 n
+0000751906 00000 n
+0000751971 00000 n
+0000752036 00000 n
+0000752101 00000 n
+0000752165 00000 n
+0000752230 00000 n
+0000752295 00000 n
+0000752360 00000 n
+0000752425 00000 n
+0000752490 00000 n
+0000752555 00000 n
+0000752619 00000 n
+0000752684 00000 n
+0000752749 00000 n
+0000752814 00000 n
+0000752879 00000 n
+0000752944 00000 n
+0000753009 00000 n
+0000753074 00000 n
+0000753139 00000 n
+0000753204 00000 n
+0000753269 00000 n
+0000753334 00000 n
+0000753399 00000 n
+0000753464 00000 n
+0000753527 00000 n
+0000753592 00000 n
+0000753657 00000 n
+0000753722 00000 n
+0000753787 00000 n
+0000753852 00000 n
+0000753917 00000 n
+0000753982 00000 n
+0000754046 00000 n
+0000759944 00000 n
+0000756576 00000 n
+0000754274 00000 n
+0000756701 00000 n
+0000756765 00000 n
+0000756830 00000 n
+0000756895 00000 n
+0000756960 00000 n
+0000757025 00000 n
+0000757090 00000 n
+0000757155 00000 n
+0000757220 00000 n
+0000757285 00000 n
+0000757350 00000 n
+0000757414 00000 n
+0000757479 00000 n
+0000757544 00000 n
+0000757609 00000 n
+0000757674 00000 n
+0000757739 00000 n
+0000757804 00000 n
+0000757869 00000 n
+0000757934 00000 n
+0000757998 00000 n
+0000758063 00000 n
+0000758128 00000 n
+0000758193 00000 n
+0000758258 00000 n
+0000758323 00000 n
+0000758388 00000 n
+0000758453 00000 n
+0000758518 00000 n
+0000758583 00000 n
+0000758648 00000 n
+0000758713 00000 n
+0000758778 00000 n
+0000758842 00000 n
+0000758907 00000 n
+0000758972 00000 n
+0000759037 00000 n
+0000759102 00000 n
+0000759167 00000 n
+0000759232 00000 n
+0000759297 00000 n
+0000759362 00000 n
+0000759426 00000 n
+0000759491 00000 n
+0000759556 00000 n
+0000759621 00000 n
+0000759686 00000 n
+0000759751 00000 n
+0000759816 00000 n
+0000759880 00000 n
+0000765737 00000 n
+0000762047 00000 n
+0000760147 00000 n
+0000762172 00000 n
+0000762236 00000 n
+0000762301 00000 n
+0000762366 00000 n
+0000762431 00000 n
+0000762496 00000 n
+0000762561 00000 n
+0000762626 00000 n
+0000762691 00000 n
+0000762756 00000 n
+0000762821 00000 n
+0000762886 00000 n
+0000762950 00000 n
+0000763015 00000 n
+0000763080 00000 n
+0000763145 00000 n
+0000763210 00000 n
+0000763275 00000 n
+0000763340 00000 n
+0000763405 00000 n
+0000763470 00000 n
+0000763534 00000 n
+0000763599 00000 n
+0000763664 00000 n
+0000763728 00000 n
+0000763793 00000 n
+0000763858 00000 n
+0000763923 00000 n
+0000763988 00000 n
+0000764053 00000 n
+0000764118 00000 n
+0000764183 00000 n
+0000764248 00000 n
+0000764312 00000 n
+0000764377 00000 n
+0000764442 00000 n
+0000764507 00000 n
+0000764572 00000 n
+0000764637 00000 n
+0000764702 00000 n
+0000764766 00000 n
+0000764831 00000 n
+0000764896 00000 n
+0000764960 00000 n
+0000765025 00000 n
+0000765090 00000 n
+0000765155 00000 n
+0000765220 00000 n
+0000765285 00000 n
+0000765350 00000 n
+0000765415 00000 n
+0000765480 00000 n
+0000765545 00000 n
+0000765610 00000 n
+0000765673 00000 n
+0000771655 00000 n
+0000768286 00000 n
+0000765901 00000 n
+0000768411 00000 n
+0000768475 00000 n
+0000768540 00000 n
+0000768605 00000 n
+0000768670 00000 n
+0000768735 00000 n
+0000768800 00000 n
+0000768865 00000 n
+0000768930 00000 n
+0000768995 00000 n
+0000769059 00000 n
+0000769124 00000 n
+0000769189 00000 n
+0000769254 00000 n
+0000769319 00000 n
+0000769384 00000 n
+0000769449 00000 n
+0000769513 00000 n
+0000769578 00000 n
+0000769643 00000 n
+0000769708 00000 n
+0000769773 00000 n
+0000769838 00000 n
+0000769903 00000 n
+0000769968 00000 n
+0000770033 00000 n
+0000770098 00000 n
+0000770163 00000 n
+0000770228 00000 n
+0000770293 00000 n
+0000770358 00000 n
+0000770423 00000 n
+0000770488 00000 n
+0000770553 00000 n
+0000770618 00000 n
+0000770683 00000 n
+0000770748 00000 n
+0000770813 00000 n
+0000770878 00000 n
+0000770943 00000 n
+0000771008 00000 n
+0000771073 00000 n
+0000771138 00000 n
+0000771203 00000 n
+0000771267 00000 n
+0000771332 00000 n
+0000771397 00000 n
+0000771462 00000 n
+0000771527 00000 n
+0000771591 00000 n
+0000776960 00000 n
+0000774502 00000 n
+0000771845 00000 n
+0000774627 00000 n
+0000774691 00000 n
+0000774756 00000 n
+0000774820 00000 n
+0000774885 00000 n
+0000774950 00000 n
+0000775015 00000 n
+0000775080 00000 n
+0000775145 00000 n
+0000775210 00000 n
+0000775274 00000 n
+0000775339 00000 n
+0000775404 00000 n
+0000775468 00000 n
+0000775533 00000 n
+0000775598 00000 n
+0000775663 00000 n
+0000775728 00000 n
+0000775793 00000 n
+0000775858 00000 n
+0000775923 00000 n
+0000775988 00000 n
+0000776052 00000 n
+0000776117 00000 n
+0000776182 00000 n
+0000776247 00000 n
+0000776312 00000 n
+0000776377 00000 n
+0000776442 00000 n
+0000776507 00000 n
+0000776572 00000 n
+0000776637 00000 n
+0000776702 00000 n
+0000776767 00000 n
+0000776831 00000 n
+0000776896 00000 n
+0000782057 00000 n
+0000779533 00000 n
+0000777150 00000 n
+0000779658 00000 n
+0000779722 00000 n
+0000779787 00000 n
+0000779851 00000 n
+0000779916 00000 n
+0000779981 00000 n
+0000780046 00000 n
+0000780111 00000 n
+0000780176 00000 n
+0000780241 00000 n
+0000780306 00000 n
+0000780371 00000 n
+0000780436 00000 n
+0000780501 00000 n
+0000780566 00000 n
+0000780631 00000 n
+0000780696 00000 n
+0000780761 00000 n
+0000780825 00000 n
+0000780890 00000 n
+0000780955 00000 n
+0000781020 00000 n
+0000781085 00000 n
+0000781150 00000 n
+0000781215 00000 n
+0000781280 00000 n
+0000781344 00000 n
+0000781409 00000 n
+0000781474 00000 n
+0000781539 00000 n
+0000781604 00000 n
+0000781669 00000 n
+0000781734 00000 n
+0000781798 00000 n
+0000781863 00000 n
+0000781928 00000 n
+0000781992 00000 n
+0000787124 00000 n
+0000784733 00000 n
+0000782247 00000 n
+0000784858 00000 n
+0000784922 00000 n
+0000784987 00000 n
+0000785051 00000 n
+0000785116 00000 n
+0000785181 00000 n
+0000785246 00000 n
+0000785311 00000 n
+0000785376 00000 n
+0000785441 00000 n
+0000785506 00000 n
+0000785571 00000 n
+0000785636 00000 n
+0000785701 00000 n
+0000785766 00000 n
+0000785830 00000 n
+0000785895 00000 n
+0000785960 00000 n
+0000786025 00000 n
+0000786090 00000 n
+0000786155 00000 n
+0000786220 00000 n
+0000786285 00000 n
+0000786350 00000 n
+0000786415 00000 n
+0000786480 00000 n
+0000786545 00000 n
+0000786672 00000 n
+0000786736 00000 n
+0000786801 00000 n
+0000786866 00000 n
+0000786931 00000 n
+0000786996 00000 n
+0000787060 00000 n
+0001875604 00000 n
+0000792646 00000 n
+0000790056 00000 n
+0000787340 00000 n
+0000790181 00000 n
+0000790245 00000 n
+0000790310 00000 n
+0000790375 00000 n
+0000790440 00000 n
+0000790505 00000 n
+0000790570 00000 n
+0000790635 00000 n
+0000790700 00000 n
+0000790764 00000 n
+0000790829 00000 n
+0000790894 00000 n
+0000790959 00000 n
+0000791024 00000 n
+0000791089 00000 n
+0000791154 00000 n
+0000791219 00000 n
+0000791284 00000 n
+0000791348 00000 n
+0000791413 00000 n
+0000791478 00000 n
+0000791543 00000 n
+0000791608 00000 n
+0000791673 00000 n
+0000791737 00000 n
+0000791802 00000 n
+0000791867 00000 n
+0000791932 00000 n
+0000791997 00000 n
+0000792062 00000 n
+0000792127 00000 n
+0000792192 00000 n
+0000792257 00000 n
+0000792322 00000 n
+0000792387 00000 n
+0000792452 00000 n
+0000792516 00000 n
+0000792581 00000 n
+0000798444 00000 n
+0000795855 00000 n
+0000792888 00000 n
+0000795980 00000 n
+0000796044 00000 n
+0000796109 00000 n
+0000796174 00000 n
+0000796239 00000 n
+0000796304 00000 n
+0000796369 00000 n
+0000796434 00000 n
+0000796499 00000 n
+0000796564 00000 n
+0000796629 00000 n
+0000796694 00000 n
+0000796759 00000 n
+0000796824 00000 n
+0000796889 00000 n
+0000796953 00000 n
+0000797018 00000 n
+0000797083 00000 n
+0000797148 00000 n
+0000797213 00000 n
+0000797278 00000 n
+0000797343 00000 n
+0000797408 00000 n
+0000797473 00000 n
+0000797537 00000 n
+0000797602 00000 n
+0000797667 00000 n
+0000797732 00000 n
+0000797797 00000 n
+0000797862 00000 n
+0000797927 00000 n
+0000797992 00000 n
+0000798057 00000 n
+0000798121 00000 n
+0000798186 00000 n
+0000798251 00000 n
+0000798316 00000 n
+0000798380 00000 n
+0000804199 00000 n
+0000800312 00000 n
+0000798634 00000 n
+0000800437 00000 n
+0000800501 00000 n
+0000800566 00000 n
+0000800631 00000 n
+0000800696 00000 n
+0000800761 00000 n
+0000800826 00000 n
+0000800891 00000 n
+0000800955 00000 n
+0000801020 00000 n
+0000801085 00000 n
+0000801150 00000 n
+0000801215 00000 n
+0000801280 00000 n
+0000801345 00000 n
+0000801410 00000 n
+0000801475 00000 n
+0000801539 00000 n
+0000801604 00000 n
+0000801669 00000 n
+0000801734 00000 n
+0000801799 00000 n
+0000801864 00000 n
+0000801929 00000 n
+0000801994 00000 n
+0000802059 00000 n
+0000802124 00000 n
+0000802189 00000 n
+0000802254 00000 n
+0000802319 00000 n
+0000802384 00000 n
+0000802448 00000 n
+0000802513 00000 n
+0000802578 00000 n
+0000802643 00000 n
+0000802708 00000 n
+0000802773 00000 n
+0000802838 00000 n
+0000802903 00000 n
+0000802968 00000 n
+0000803032 00000 n
+0000803097 00000 n
+0000803162 00000 n
+0000803227 00000 n
+0000803292 00000 n
+0000803357 00000 n
+0000803422 00000 n
+0000803487 00000 n
+0000803552 00000 n
+0000803617 00000 n
+0000803682 00000 n
+0000803747 00000 n
+0000803812 00000 n
+0000803877 00000 n
+0000803942 00000 n
+0000804007 00000 n
+0000804071 00000 n
+0000804135 00000 n
+0000810154 00000 n
+0000806201 00000 n
+0000804363 00000 n
+0000806326 00000 n
+0000806390 00000 n
+0000806455 00000 n
+0000806520 00000 n
+0000806585 00000 n
+0000806650 00000 n
+0000806715 00000 n
+0000806780 00000 n
+0000806845 00000 n
+0000806910 00000 n
+0000806974 00000 n
+0000807039 00000 n
+0000807104 00000 n
+0000807169 00000 n
+0000807234 00000 n
+0000807299 00000 n
+0000807364 00000 n
+0000807429 00000 n
+0000807494 00000 n
+0000807558 00000 n
+0000807623 00000 n
+0000807688 00000 n
+0000807753 00000 n
+0000807818 00000 n
+0000807883 00000 n
+0000807948 00000 n
+0000808013 00000 n
+0000808078 00000 n
+0000808142 00000 n
+0000808207 00000 n
+0000808272 00000 n
+0000808337 00000 n
+0000808402 00000 n
+0000808467 00000 n
+0000808532 00000 n
+0000808597 00000 n
+0000808662 00000 n
+0000808726 00000 n
+0000808791 00000 n
+0000808856 00000 n
+0000808921 00000 n
+0000808986 00000 n
+0000809051 00000 n
+0000809116 00000 n
+0000809181 00000 n
+0000809246 00000 n
+0000809311 00000 n
+0000809376 00000 n
+0000809441 00000 n
+0000809506 00000 n
+0000809571 00000 n
+0000809636 00000 n
+0000809701 00000 n
+0000809766 00000 n
+0000809831 00000 n
+0000809896 00000 n
+0000809960 00000 n
+0000810025 00000 n
+0000810090 00000 n
+0000815923 00000 n
+0000812490 00000 n
+0000810318 00000 n
+0000812615 00000 n
+0000812679 00000 n
+0000812744 00000 n
+0000812809 00000 n
+0000812874 00000 n
+0000812939 00000 n
+0000813004 00000 n
+0000813069 00000 n
+0000813134 00000 n
+0000813199 00000 n
+0000813263 00000 n
+0000813328 00000 n
+0000813393 00000 n
+0000813458 00000 n
+0000813523 00000 n
+0000813588 00000 n
+0000813653 00000 n
+0000813717 00000 n
+0000813782 00000 n
+0000813847 00000 n
+0000813911 00000 n
+0000813976 00000 n
+0000814041 00000 n
+0000814106 00000 n
+0000814171 00000 n
+0000814236 00000 n
+0000814301 00000 n
+0000814366 00000 n
+0000814431 00000 n
+0000814495 00000 n
+0000814560 00000 n
+0000814625 00000 n
+0000814690 00000 n
+0000814755 00000 n
+0000814820 00000 n
+0000814885 00000 n
+0000814950 00000 n
+0000815015 00000 n
+0000815080 00000 n
+0000815145 00000 n
+0000815210 00000 n
+0000815274 00000 n
+0000815339 00000 n
+0000815404 00000 n
+0000815469 00000 n
+0000815534 00000 n
+0000815599 00000 n
+0000815664 00000 n
+0000815729 00000 n
+0000815794 00000 n
+0000815858 00000 n
+0000821567 00000 n
+0000818460 00000 n
+0000816100 00000 n
+0000818585 00000 n
+0000818649 00000 n
+0000818714 00000 n
+0000818779 00000 n
+0000818844 00000 n
+0000818909 00000 n
+0000818974 00000 n
+0000819039 00000 n
+0000819104 00000 n
+0000819169 00000 n
+0000819233 00000 n
+0000819297 00000 n
+0000819362 00000 n
+0000819427 00000 n
+0000819492 00000 n
+0000819557 00000 n
+0000819622 00000 n
+0000819687 00000 n
+0000819752 00000 n
+0000819816 00000 n
+0000819881 00000 n
+0000819946 00000 n
+0000820011 00000 n
+0000820076 00000 n
+0000820141 00000 n
+0000820206 00000 n
+0000820271 00000 n
+0000820336 00000 n
+0000820400 00000 n
+0000820465 00000 n
+0000820530 00000 n
+0000820595 00000 n
+0000820660 00000 n
+0000820725 00000 n
+0000820790 00000 n
+0000820854 00000 n
+0000820919 00000 n
+0000820984 00000 n
+0000821049 00000 n
+0000821114 00000 n
+0000821179 00000 n
+0000821244 00000 n
+0000821309 00000 n
+0000821374 00000 n
+0000821438 00000 n
+0000821503 00000 n
+0000827552 00000 n
+0000823534 00000 n
+0000821757 00000 n
+0000823659 00000 n
+0000823723 00000 n
+0000823788 00000 n
+0000823853 00000 n
+0000823918 00000 n
+0000823983 00000 n
+0000824048 00000 n
+0000824113 00000 n
+0000824178 00000 n
+0000824243 00000 n
+0000824307 00000 n
+0000824372 00000 n
+0000824437 00000 n
+0000824502 00000 n
+0000824567 00000 n
+0000824632 00000 n
+0000824697 00000 n
+0000824762 00000 n
+0000824827 00000 n
+0000824891 00000 n
+0000824956 00000 n
+0000825021 00000 n
+0000825086 00000 n
+0000825151 00000 n
+0000825216 00000 n
+0000825281 00000 n
+0000825346 00000 n
+0000825411 00000 n
+0000825476 00000 n
+0000825541 00000 n
+0000825606 00000 n
+0000825671 00000 n
+0000825736 00000 n
+0000825801 00000 n
+0000825866 00000 n
+0000825930 00000 n
+0000825995 00000 n
+0000826060 00000 n
+0000826125 00000 n
+0000826190 00000 n
+0000826255 00000 n
+0000826320 00000 n
+0000826385 00000 n
+0000826450 00000 n
+0000826515 00000 n
+0000826580 00000 n
+0000826645 00000 n
+0000826710 00000 n
+0000826775 00000 n
+0000826840 00000 n
+0000826905 00000 n
+0000826970 00000 n
+0000827035 00000 n
+0000827100 00000 n
+0000827164 00000 n
+0000827229 00000 n
+0000827294 00000 n
+0000827359 00000 n
+0000827424 00000 n
+0000827488 00000 n
+0000835176 00000 n
+0000832200 00000 n
+0000827716 00000 n
+0000832325 00000 n
+0000832389 00000 n
+0000832454 00000 n
+0000832519 00000 n
+0000832584 00000 n
+0000832649 00000 n
+0000832714 00000 n
+0000832779 00000 n
+0000832844 00000 n
+0000832909 00000 n
+0000832973 00000 n
+0000833038 00000 n
+0000833103 00000 n
+0000833168 00000 n
+0000833233 00000 n
+0000833298 00000 n
+0000833363 00000 n
+0000833428 00000 n
+0000833493 00000 n
+0000833557 00000 n
+0000833622 00000 n
+0000833687 00000 n
+0000833752 00000 n
+0000833817 00000 n
+0000833882 00000 n
+0000833947 00000 n
+0000834012 00000 n
+0000834077 00000 n
+0000834140 00000 n
+0000834205 00000 n
+0000834270 00000 n
+0000834335 00000 n
+0000834400 00000 n
+0000834465 00000 n
+0000834530 00000 n
+0000834594 00000 n
+0000834659 00000 n
+0000834724 00000 n
+0000834789 00000 n
+0000834854 00000 n
+0000834919 00000 n
+0000834984 00000 n
+0000835049 00000 n
+0000835113 00000 n
+0000841176 00000 n
+0000837874 00000 n
+0000835367 00000 n
+0000837999 00000 n
+0000838063 00000 n
+0000838128 00000 n
+0000838193 00000 n
+0000838258 00000 n
+0000838323 00000 n
+0000838388 00000 n
+0000838453 00000 n
+0000838518 00000 n
+0000838583 00000 n
+0000838647 00000 n
+0000838712 00000 n
+0000838777 00000 n
+0000838842 00000 n
+0000838907 00000 n
+0000838972 00000 n
+0000839037 00000 n
+0000839102 00000 n
+0000839167 00000 n
+0000839231 00000 n
+0000839296 00000 n
+0000839361 00000 n
+0000839425 00000 n
+0000839490 00000 n
+0000839555 00000 n
+0000839619 00000 n
+0000839684 00000 n
+0000839749 00000 n
+0000839814 00000 n
+0000839879 00000 n
+0000839944 00000 n
+0000840009 00000 n
+0000840074 00000 n
+0000840139 00000 n
+0000840203 00000 n
+0000840268 00000 n
+0000840333 00000 n
+0000840398 00000 n
+0000840463 00000 n
+0000840528 00000 n
+0000840593 00000 n
+0000840658 00000 n
+0000840723 00000 n
+0000840788 00000 n
+0000840853 00000 n
+0000840918 00000 n
+0000840983 00000 n
+0000841048 00000 n
+0000841112 00000 n
+0000846862 00000 n
+0000843755 00000 n
+0000841366 00000 n
+0000843880 00000 n
+0000843944 00000 n
+0000844009 00000 n
+0000844074 00000 n
+0000844139 00000 n
+0000844204 00000 n
+0000844269 00000 n
+0000844334 00000 n
+0000844399 00000 n
+0000844464 00000 n
+0000844528 00000 n
+0000844593 00000 n
+0000844658 00000 n
+0000844723 00000 n
+0000844788 00000 n
+0000844853 00000 n
+0000844918 00000 n
+0000844983 00000 n
+0000845048 00000 n
+0000845113 00000 n
+0000845178 00000 n
+0000845243 00000 n
+0000845308 00000 n
+0000845372 00000 n
+0000845437 00000 n
+0000845502 00000 n
+0000845567 00000 n
+0000845632 00000 n
+0000845697 00000 n
+0000845762 00000 n
+0000845827 00000 n
+0000845892 00000 n
+0000845955 00000 n
+0000846020 00000 n
+0000846085 00000 n
+0000846150 00000 n
+0000846215 00000 n
+0000846280 00000 n
+0000846344 00000 n
+0000846409 00000 n
+0000846474 00000 n
+0000846539 00000 n
+0000846604 00000 n
+0000846669 00000 n
+0000846734 00000 n
+0000846798 00000 n
+0001875769 00000 n
+0000852760 00000 n
+0000849068 00000 n
+0000847065 00000 n
+0000849193 00000 n
+0000849257 00000 n
+0000849322 00000 n
+0000849387 00000 n
+0000849452 00000 n
+0000849517 00000 n
+0000849582 00000 n
+0000849647 00000 n
+0000849712 00000 n
+0000849777 00000 n
+0000849840 00000 n
+0000849905 00000 n
+0000849970 00000 n
+0000850035 00000 n
+0000850100 00000 n
+0000850165 00000 n
+0000850230 00000 n
+0000850295 00000 n
+0000850360 00000 n
+0000850425 00000 n
+0000850490 00000 n
+0000850555 00000 n
+0000850620 00000 n
+0000850685 00000 n
+0000850750 00000 n
+0000850814 00000 n
+0000850879 00000 n
+0000850944 00000 n
+0000851009 00000 n
+0000851074 00000 n
+0000851139 00000 n
+0000851204 00000 n
+0000851269 00000 n
+0000851334 00000 n
+0000851398 00000 n
+0000851463 00000 n
+0000851528 00000 n
+0000851593 00000 n
+0000851658 00000 n
+0000851723 00000 n
+0000851788 00000 n
+0000851853 00000 n
+0000851918 00000 n
+0000851983 00000 n
+0000852048 00000 n
+0000852113 00000 n
+0000852178 00000 n
+0000852243 00000 n
+0000852307 00000 n
+0000852372 00000 n
+0000852437 00000 n
+0000852502 00000 n
+0000852567 00000 n
+0000852632 00000 n
+0000852696 00000 n
+0000858363 00000 n
+0000855643 00000 n
+0000852924 00000 n
+0000855768 00000 n
+0000855832 00000 n
+0000855897 00000 n
+0000855962 00000 n
+0000856027 00000 n
+0000856092 00000 n
+0000856157 00000 n
+0000856222 00000 n
+0000856287 00000 n
+0000856352 00000 n
+0000856417 00000 n
+0000856482 00000 n
+0000856547 00000 n
+0000856611 00000 n
+0000856676 00000 n
+0000856741 00000 n
+0000856806 00000 n
+0000856871 00000 n
+0000856936 00000 n
+0000857001 00000 n
+0000857066 00000 n
+0000857131 00000 n
+0000857196 00000 n
+0000857261 00000 n
+0000857326 00000 n
+0000857391 00000 n
+0000857455 00000 n
+0000857520 00000 n
+0000857585 00000 n
+0000857650 00000 n
+0000857715 00000 n
+0000857780 00000 n
+0000857845 00000 n
+0000857910 00000 n
+0000857975 00000 n
+0000858039 00000 n
+0000858104 00000 n
+0000858168 00000 n
+0000858233 00000 n
+0000858298 00000 n
+0000864519 00000 n
+0000860504 00000 n
+0000858540 00000 n
+0000860629 00000 n
+0000860693 00000 n
+0000860758 00000 n
+0000860823 00000 n
+0000860888 00000 n
+0000860953 00000 n
+0000861018 00000 n
+0000861083 00000 n
+0000861148 00000 n
+0000861213 00000 n
+0000861278 00000 n
+0000861343 00000 n
+0000861407 00000 n
+0000861472 00000 n
+0000861537 00000 n
+0000861602 00000 n
+0000861667 00000 n
+0000861732 00000 n
+0000861797 00000 n
+0000861862 00000 n
+0000861927 00000 n
+0000861992 00000 n
+0000862057 00000 n
+0000862122 00000 n
+0000862186 00000 n
+0000862251 00000 n
+0000862316 00000 n
+0000862381 00000 n
+0000862446 00000 n
+0000862511 00000 n
+0000862576 00000 n
+0000862641 00000 n
+0000862706 00000 n
+0000862770 00000 n
+0000862835 00000 n
+0000862900 00000 n
+0000862965 00000 n
+0000863030 00000 n
+0000863095 00000 n
+0000863158 00000 n
+0000863223 00000 n
+0000863288 00000 n
+0000863353 00000 n
+0000863418 00000 n
+0000863483 00000 n
+0000863548 00000 n
+0000863613 00000 n
+0000863678 00000 n
+0000863742 00000 n
+0000863807 00000 n
+0000863872 00000 n
+0000863937 00000 n
+0000864002 00000 n
+0000864067 00000 n
+0000864132 00000 n
+0000864197 00000 n
+0000864262 00000 n
+0000864326 00000 n
+0000864391 00000 n
+0000864455 00000 n
+0000870261 00000 n
+0000866698 00000 n
+0000864696 00000 n
+0000866823 00000 n
+0000866887 00000 n
+0000866952 00000 n
+0000867017 00000 n
+0000867082 00000 n
+0000867147 00000 n
+0000867212 00000 n
+0000867277 00000 n
+0000867342 00000 n
+0000867407 00000 n
+0000867472 00000 n
+0000867537 00000 n
+0000867602 00000 n
+0000867667 00000 n
+0000867732 00000 n
+0000867797 00000 n
+0000867862 00000 n
+0000867926 00000 n
+0000867991 00000 n
+0000868056 00000 n
+0000868121 00000 n
+0000868186 00000 n
+0000868251 00000 n
+0000868316 00000 n
+0000868381 00000 n
+0000868446 00000 n
+0000868510 00000 n
+0000868575 00000 n
+0000868640 00000 n
+0000868705 00000 n
+0000868770 00000 n
+0000868835 00000 n
+0000868900 00000 n
+0000868965 00000 n
+0000869030 00000 n
+0000869095 00000 n
+0000869160 00000 n
+0000869225 00000 n
+0000869289 00000 n
+0000869354 00000 n
+0000869419 00000 n
+0000869484 00000 n
+0000869549 00000 n
+0000869614 00000 n
+0000869679 00000 n
+0000869744 00000 n
+0000869809 00000 n
+0000869874 00000 n
+0000869938 00000 n
+0000870003 00000 n
+0000870068 00000 n
+0000870133 00000 n
+0000870197 00000 n
+0000875642 00000 n
+0000872537 00000 n
+0000870438 00000 n
+0000872662 00000 n
+0000872726 00000 n
+0000872791 00000 n
+0000872856 00000 n
+0000872921 00000 n
+0000872986 00000 n
+0000873051 00000 n
+0000873116 00000 n
+0000873181 00000 n
+0000873245 00000 n
+0000873310 00000 n
+0000873375 00000 n
+0000873440 00000 n
+0000873505 00000 n
+0000873570 00000 n
+0000873635 00000 n
+0000873700 00000 n
+0000873765 00000 n
+0000873829 00000 n
+0000873894 00000 n
+0000873959 00000 n
+0000874024 00000 n
+0000874151 00000 n
+0000874216 00000 n
+0000874281 00000 n
+0000874346 00000 n
+0000874411 00000 n
+0000874476 00000 n
+0000874540 00000 n
+0000874605 00000 n
+0000874670 00000 n
+0000874735 00000 n
+0000874800 00000 n
+0000874865 00000 n
+0000874930 00000 n
+0000874995 00000 n
+0000875060 00000 n
+0000875124 00000 n
+0000875189 00000 n
+0000875254 00000 n
+0000875319 00000 n
+0000875384 00000 n
+0000875449 00000 n
+0000875514 00000 n
+0000875578 00000 n
+0000880897 00000 n
+0000877983 00000 n
+0000875819 00000 n
+0000878108 00000 n
+0000878172 00000 n
+0000878237 00000 n
+0000878302 00000 n
+0000878367 00000 n
+0000878432 00000 n
+0000878497 00000 n
+0000878562 00000 n
+0000878627 00000 n
+0000878692 00000 n
+0000878757 00000 n
+0000878822 00000 n
+0000878887 00000 n
+0000878951 00000 n
+0000879016 00000 n
+0000879081 00000 n
+0000879146 00000 n
+0000879211 00000 n
+0000879276 00000 n
+0000879341 00000 n
+0000879406 00000 n
+0000879471 00000 n
+0000879536 00000 n
+0000879600 00000 n
+0000879665 00000 n
+0000879730 00000 n
+0000879795 00000 n
+0000879860 00000 n
+0000879925 00000 n
+0000879990 00000 n
+0000880055 00000 n
+0000880120 00000 n
+0000880185 00000 n
+0000880250 00000 n
+0000880314 00000 n
+0000880379 00000 n
+0000880444 00000 n
+0000880509 00000 n
+0000880574 00000 n
+0000880639 00000 n
+0000880704 00000 n
+0000880769 00000 n
+0000880834 00000 n
+0000886312 00000 n
+0000883010 00000 n
+0000881087 00000 n
+0000883135 00000 n
+0000883199 00000 n
+0000883264 00000 n
+0000883329 00000 n
+0000883394 00000 n
+0000883459 00000 n
+0000883524 00000 n
+0000883589 00000 n
+0000883654 00000 n
+0000883719 00000 n
+0000883784 00000 n
+0000883848 00000 n
+0000883913 00000 n
+0000883978 00000 n
+0000884043 00000 n
+0000884108 00000 n
+0000884173 00000 n
+0000884238 00000 n
+0000884303 00000 n
+0000884368 00000 n
+0000884432 00000 n
+0000884497 00000 n
+0000884562 00000 n
+0000884627 00000 n
+0000884692 00000 n
+0000884757 00000 n
+0000884822 00000 n
+0000884887 00000 n
+0000884952 00000 n
+0000885017 00000 n
+0000885082 00000 n
+0000885147 00000 n
+0000885212 00000 n
+0000885277 00000 n
+0000885342 00000 n
+0000885407 00000 n
+0000885472 00000 n
+0000885537 00000 n
+0000885602 00000 n
+0000885666 00000 n
+0000885731 00000 n
+0000885796 00000 n
+0000885861 00000 n
+0000885926 00000 n
+0000885991 00000 n
+0000886056 00000 n
+0000886121 00000 n
+0000886186 00000 n
+0000891871 00000 n
+0000888568 00000 n
+0000886489 00000 n
+0000888693 00000 n
+0000888757 00000 n
+0000888822 00000 n
+0000888887 00000 n
+0000888952 00000 n
+0000889017 00000 n
+0000889082 00000 n
+0000889147 00000 n
+0000889211 00000 n
+0000889276 00000 n
+0000889341 00000 n
+0000889406 00000 n
+0000889471 00000 n
+0000889536 00000 n
+0000889601 00000 n
+0000889666 00000 n
+0000889731 00000 n
+0000889796 00000 n
+0000889861 00000 n
+0000889926 00000 n
+0000889991 00000 n
+0000890056 00000 n
+0000890120 00000 n
+0000890185 00000 n
+0000890250 00000 n
+0000890315 00000 n
+0000890380 00000 n
+0000890445 00000 n
+0000890510 00000 n
+0000890575 00000 n
+0000890640 00000 n
+0000890705 00000 n
+0000890770 00000 n
+0000890835 00000 n
+0000890900 00000 n
+0000890965 00000 n
+0000891030 00000 n
+0000891095 00000 n
+0000891160 00000 n
+0000891225 00000 n
+0000891290 00000 n
+0000891354 00000 n
+0000891419 00000 n
+0000891483 00000 n
+0000891548 00000 n
+0000891613 00000 n
+0000891678 00000 n
+0000891743 00000 n
+0000897055 00000 n
+0000894790 00000 n
+0000892048 00000 n
+0000894915 00000 n
+0000894979 00000 n
+0000895044 00000 n
+0000895109 00000 n
+0000895174 00000 n
+0000895238 00000 n
+0000895303 00000 n
+0000895368 00000 n
+0000895433 00000 n
+0000895498 00000 n
+0000895563 00000 n
+0000895628 00000 n
+0000895693 00000 n
+0000895758 00000 n
+0000895823 00000 n
+0000895888 00000 n
+0000895953 00000 n
+0000896018 00000 n
+0000896083 00000 n
+0000896148 00000 n
+0000896213 00000 n
+0000896278 00000 n
+0000896342 00000 n
+0000896407 00000 n
+0000896472 00000 n
+0000896537 00000 n
+0000896602 00000 n
+0000896667 00000 n
+0000896732 00000 n
+0000896797 00000 n
+0000896862 00000 n
+0000896927 00000 n
+0000896991 00000 n
+0000902893 00000 n
+0000899461 00000 n
+0000897258 00000 n
+0000899586 00000 n
+0000899650 00000 n
+0000899715 00000 n
+0000899780 00000 n
+0000899845 00000 n
+0000899910 00000 n
+0000899975 00000 n
+0000900040 00000 n
+0000900105 00000 n
+0000900170 00000 n
+0000900235 00000 n
+0000900300 00000 n
+0000900365 00000 n
+0000900429 00000 n
+0000900494 00000 n
+0000900559 00000 n
+0000900623 00000 n
+0000900688 00000 n
+0000900753 00000 n
+0000900818 00000 n
+0000900883 00000 n
+0000900948 00000 n
+0000901013 00000 n
+0000901078 00000 n
+0000901143 00000 n
+0000901208 00000 n
+0000901273 00000 n
+0000901338 00000 n
+0000901402 00000 n
+0000901467 00000 n
+0000901532 00000 n
+0000901597 00000 n
+0000901662 00000 n
+0000901727 00000 n
+0000901792 00000 n
+0000901857 00000 n
+0000901922 00000 n
+0000901985 00000 n
+0000902050 00000 n
+0000902115 00000 n
+0000902180 00000 n
+0000902245 00000 n
+0000902310 00000 n
+0000902375 00000 n
+0000902440 00000 n
+0000902505 00000 n
+0000902570 00000 n
+0000902635 00000 n
+0000902700 00000 n
+0000902765 00000 n
+0000902829 00000 n
+0001875934 00000 n
+0000905585 00000 n
+0000908596 00000 n
+0000905412 00000 n
+0000903070 00000 n
+0000905743 00000 n
+0000905807 00000 n
+0000905872 00000 n
+0000905936 00000 n
+0000906001 00000 n
+0000906066 00000 n
+0000906131 00000 n
+0000906196 00000 n
+0000906261 00000 n
+0000906326 00000 n
+0000906391 00000 n
+0000906456 00000 n
+0000906521 00000 n
+0000906585 00000 n
+0000906650 00000 n
+0000906715 00000 n
+0000906780 00000 n
+0000906845 00000 n
+0000906910 00000 n
+0000906975 00000 n
+0000907040 00000 n
+0000907105 00000 n
+0000907170 00000 n
+0000907235 00000 n
+0000907299 00000 n
+0000907364 00000 n
+0000907429 00000 n
+0000907494 00000 n
+0000907559 00000 n
+0000907624 00000 n
+0000907689 00000 n
+0000907754 00000 n
+0000907819 00000 n
+0000907884 00000 n
+0000907948 00000 n
+0000908013 00000 n
+0000908078 00000 n
+0000908143 00000 n
+0000908208 00000 n
+0000908273 00000 n
+0000908338 00000 n
+0000908403 00000 n
+0000908468 00000 n
+0000908532 00000 n
+0000905554 00000 n
+0000914635 00000 n
+0000911266 00000 n
+0000908825 00000 n
+0000911391 00000 n
+0000911455 00000 n
+0000911520 00000 n
+0000911585 00000 n
+0000911650 00000 n
+0000911715 00000 n
+0000911780 00000 n
+0000911845 00000 n
+0000911910 00000 n
+0000911975 00000 n
+0000912039 00000 n
+0000912104 00000 n
+0000912169 00000 n
+0000912234 00000 n
+0000912299 00000 n
+0000912364 00000 n
+0000912429 00000 n
+0000912494 00000 n
+0000912559 00000 n
+0000912624 00000 n
+0000912689 00000 n
+0000912754 00000 n
+0000912819 00000 n
+0000912884 00000 n
+0000912949 00000 n
+0000913014 00000 n
+0000913079 00000 n
+0000913144 00000 n
+0000913208 00000 n
+0000913273 00000 n
+0000913338 00000 n
+0000913403 00000 n
+0000913468 00000 n
+0000913533 00000 n
+0000913598 00000 n
+0000913663 00000 n
+0000913728 00000 n
+0000913793 00000 n
+0000913858 00000 n
+0000913923 00000 n
+0000913988 00000 n
+0000914053 00000 n
+0000914118 00000 n
+0000914183 00000 n
+0000914248 00000 n
+0000914312 00000 n
+0000914377 00000 n
+0000914442 00000 n
+0000914507 00000 n
+0000914571 00000 n
+0000920135 00000 n
+0000916898 00000 n
+0000914825 00000 n
+0000917023 00000 n
+0000917087 00000 n
+0000917152 00000 n
+0000917217 00000 n
+0000917282 00000 n
+0000917347 00000 n
+0000917412 00000 n
+0000917477 00000 n
+0000917542 00000 n
+0000917607 00000 n
+0000917672 00000 n
+0000917736 00000 n
+0000917801 00000 n
+0000917866 00000 n
+0000917931 00000 n
+0000917996 00000 n
+0000918061 00000 n
+0000918126 00000 n
+0000918191 00000 n
+0000918256 00000 n
+0000918320 00000 n
+0000918385 00000 n
+0000918513 00000 n
+0000918578 00000 n
+0000918643 00000 n
+0000918708 00000 n
+0000918773 00000 n
+0000918838 00000 n
+0000918903 00000 n
+0000918968 00000 n
+0000919033 00000 n
+0000919098 00000 n
+0000919163 00000 n
+0000919228 00000 n
+0000919293 00000 n
+0000919358 00000 n
+0000919423 00000 n
+0000919488 00000 n
+0000919553 00000 n
+0000919618 00000 n
+0000919683 00000 n
+0000919747 00000 n
+0000919812 00000 n
+0000919877 00000 n
+0000919942 00000 n
+0000920007 00000 n
+0000920071 00000 n
+0000926109 00000 n
+0000923520 00000 n
+0000920325 00000 n
+0000923645 00000 n
+0000923709 00000 n
+0000923774 00000 n
+0000923839 00000 n
+0000923904 00000 n
+0000923969 00000 n
+0000924034 00000 n
+0000924099 00000 n
+0000924164 00000 n
+0000924229 00000 n
+0000924293 00000 n
+0000924358 00000 n
+0000924423 00000 n
+0000924488 00000 n
+0000924553 00000 n
+0000924617 00000 n
+0000924682 00000 n
+0000924747 00000 n
+0000924812 00000 n
+0000924877 00000 n
+0000924942 00000 n
+0000925007 00000 n
+0000925071 00000 n
+0000925136 00000 n
+0000925201 00000 n
+0000925266 00000 n
+0000925331 00000 n
+0000925396 00000 n
+0000925461 00000 n
+0000925526 00000 n
+0000925591 00000 n
+0000925656 00000 n
+0000925721 00000 n
+0000925786 00000 n
+0000925851 00000 n
+0000925916 00000 n
+0000925981 00000 n
+0000926045 00000 n
+0000931939 00000 n
+0000928896 00000 n
+0000926325 00000 n
+0000929021 00000 n
+0000929085 00000 n
+0000929150 00000 n
+0000929215 00000 n
+0000929280 00000 n
+0000929345 00000 n
+0000929410 00000 n
+0000929475 00000 n
+0000929540 00000 n
+0000929605 00000 n
+0000929669 00000 n
+0000929734 00000 n
+0000929799 00000 n
+0000929864 00000 n
+0000929929 00000 n
+0000929994 00000 n
+0000930059 00000 n
+0000930123 00000 n
+0000930187 00000 n
+0000930252 00000 n
+0000930317 00000 n
+0000930382 00000 n
+0000930447 00000 n
+0000930512 00000 n
+0000930577 00000 n
+0000930642 00000 n
+0000930706 00000 n
+0000930771 00000 n
+0000930836 00000 n
+0000930901 00000 n
+0000930966 00000 n
+0000931031 00000 n
+0000931096 00000 n
+0000931161 00000 n
+0000931226 00000 n
+0000931291 00000 n
+0000931356 00000 n
+0000931421 00000 n
+0000931486 00000 n
+0000931551 00000 n
+0000931616 00000 n
+0000931681 00000 n
+0000931746 00000 n
+0000931811 00000 n
+0000931875 00000 n
+0000938010 00000 n
+0000935357 00000 n
+0000932116 00000 n
+0000935482 00000 n
+0000935546 00000 n
+0000935611 00000 n
+0000935676 00000 n
+0000935741 00000 n
+0000935806 00000 n
+0000935871 00000 n
+0000935936 00000 n
+0000936001 00000 n
+0000936065 00000 n
+0000936130 00000 n
+0000936195 00000 n
+0000936260 00000 n
+0000936325 00000 n
+0000936390 00000 n
+0000936455 00000 n
+0000936520 00000 n
+0000936585 00000 n
+0000936649 00000 n
+0000936714 00000 n
+0000936779 00000 n
+0000936844 00000 n
+0000936909 00000 n
+0000936974 00000 n
+0000937039 00000 n
+0000937104 00000 n
+0000937168 00000 n
+0000937233 00000 n
+0000937298 00000 n
+0000937363 00000 n
+0000937428 00000 n
+0000937493 00000 n
+0000937558 00000 n
+0000937623 00000 n
+0000937688 00000 n
+0000937753 00000 n
+0000937817 00000 n
+0000937882 00000 n
+0000937946 00000 n
+0000943747 00000 n
+0000940769 00000 n
+0000938239 00000 n
+0000940894 00000 n
+0000940958 00000 n
+0000941023 00000 n
+0000941088 00000 n
+0000941153 00000 n
+0000941218 00000 n
+0000941283 00000 n
+0000941348 00000 n
+0000941413 00000 n
+0000941477 00000 n
+0000941542 00000 n
+0000941607 00000 n
+0000941672 00000 n
+0000941737 00000 n
+0000941802 00000 n
+0000941867 00000 n
+0000941932 00000 n
+0000941997 00000 n
+0000942062 00000 n
+0000942126 00000 n
+0000942191 00000 n
+0000942256 00000 n
+0000942321 00000 n
+0000942386 00000 n
+0000942451 00000 n
+0000942516 00000 n
+0000942581 00000 n
+0000942646 00000 n
+0000942711 00000 n
+0000942776 00000 n
+0000942840 00000 n
+0000942905 00000 n
+0000942970 00000 n
+0000943035 00000 n
+0000943100 00000 n
+0000943165 00000 n
+0000943230 00000 n
+0000943295 00000 n
+0000943359 00000 n
+0000943424 00000 n
+0000943489 00000 n
+0000943554 00000 n
+0000943619 00000 n
+0000943683 00000 n
+0000949400 00000 n
+0000946162 00000 n
+0000943950 00000 n
+0000946287 00000 n
+0000946351 00000 n
+0000946416 00000 n
+0000946481 00000 n
+0000946546 00000 n
+0000946611 00000 n
+0000946676 00000 n
+0000946741 00000 n
+0000946806 00000 n
+0000946871 00000 n
+0000946936 00000 n
+0000947001 00000 n
+0000947066 00000 n
+0000947131 00000 n
+0000947196 00000 n
+0000947260 00000 n
+0000947325 00000 n
+0000947390 00000 n
+0000947455 00000 n
+0000947520 00000 n
+0000947585 00000 n
+0000947650 00000 n
+0000947714 00000 n
+0000947779 00000 n
+0000947844 00000 n
+0000947909 00000 n
+0000947974 00000 n
+0000948039 00000 n
+0000948104 00000 n
+0000948169 00000 n
+0000948234 00000 n
+0000948299 00000 n
+0000948363 00000 n
+0000948428 00000 n
+0000948493 00000 n
+0000948558 00000 n
+0000948623 00000 n
+0000948688 00000 n
+0000948753 00000 n
+0000948818 00000 n
+0000948883 00000 n
+0000948947 00000 n
+0000949012 00000 n
+0000949077 00000 n
+0000949142 00000 n
+0000949207 00000 n
+0000949272 00000 n
+0000949336 00000 n
+0000955147 00000 n
+0000951129 00000 n
+0000949564 00000 n
+0000951254 00000 n
+0000951318 00000 n
+0000951383 00000 n
+0000951448 00000 n
+0000951513 00000 n
+0000951578 00000 n
+0000951643 00000 n
+0000951708 00000 n
+0000951773 00000 n
+0000951838 00000 n
+0000951902 00000 n
+0000951967 00000 n
+0000952032 00000 n
+0000952097 00000 n
+0000952162 00000 n
+0000952227 00000 n
+0000952292 00000 n
+0000952357 00000 n
+0000952422 00000 n
+0000952487 00000 n
+0000952552 00000 n
+0000952617 00000 n
+0000952681 00000 n
+0000952746 00000 n
+0000952811 00000 n
+0000952876 00000 n
+0000952941 00000 n
+0000953006 00000 n
+0000953071 00000 n
+0000953136 00000 n
+0000953201 00000 n
+0000953266 00000 n
+0000953331 00000 n
+0000953396 00000 n
+0000953461 00000 n
+0000953525 00000 n
+0000953590 00000 n
+0000953655 00000 n
+0000953720 00000 n
+0000953785 00000 n
+0000953850 00000 n
+0000953915 00000 n
+0000953980 00000 n
+0000954045 00000 n
+0000954110 00000 n
+0000954175 00000 n
+0000954240 00000 n
+0000954305 00000 n
+0000954370 00000 n
+0000954435 00000 n
+0000954500 00000 n
+0000954565 00000 n
+0000954630 00000 n
+0000954695 00000 n
+0000954759 00000 n
+0000954824 00000 n
+0000954889 00000 n
+0000954954 00000 n
+0000955019 00000 n
+0000955083 00000 n
+0000961022 00000 n
+0000957915 00000 n
+0000955311 00000 n
+0000958040 00000 n
+0000958104 00000 n
+0000958169 00000 n
+0000958234 00000 n
+0000958299 00000 n
+0000958364 00000 n
+0000958429 00000 n
+0000958494 00000 n
+0000958557 00000 n
+0000958622 00000 n
+0000958687 00000 n
+0000958752 00000 n
+0000958817 00000 n
+0000958882 00000 n
+0000958947 00000 n
+0000959012 00000 n
+0000959077 00000 n
+0000959142 00000 n
+0000959207 00000 n
+0000959272 00000 n
+0000959337 00000 n
+0000959402 00000 n
+0000959467 00000 n
+0000959531 00000 n
+0000959596 00000 n
+0000959661 00000 n
+0000959726 00000 n
+0000959791 00000 n
+0000959856 00000 n
+0000959921 00000 n
+0000959986 00000 n
+0000960051 00000 n
+0000960116 00000 n
+0000960181 00000 n
+0000960246 00000 n
+0000960311 00000 n
+0000960376 00000 n
+0000960440 00000 n
+0000960505 00000 n
+0000960570 00000 n
+0000960635 00000 n
+0000960700 00000 n
+0000960765 00000 n
+0000960830 00000 n
+0000960895 00000 n
+0000960959 00000 n
+0001876099 00000 n
+0000966683 00000 n
+0000963055 00000 n
+0000961225 00000 n
+0000963180 00000 n
+0000963244 00000 n
+0000963309 00000 n
+0000963374 00000 n
+0000963439 00000 n
+0000963504 00000 n
+0000963569 00000 n
+0000963634 00000 n
+0000963699 00000 n
+0000963764 00000 n
+0000963829 00000 n
+0000963893 00000 n
+0000963958 00000 n
+0000964023 00000 n
+0000964088 00000 n
+0000964153 00000 n
+0000964218 00000 n
+0000964283 00000 n
+0000964348 00000 n
+0000964413 00000 n
+0000964478 00000 n
+0000964542 00000 n
+0000964607 00000 n
+0000964672 00000 n
+0000964737 00000 n
+0000964802 00000 n
+0000964867 00000 n
+0000964932 00000 n
+0000964997 00000 n
+0000965061 00000 n
+0000965126 00000 n
+0000965191 00000 n
+0000965256 00000 n
+0000965321 00000 n
+0000965386 00000 n
+0000965451 00000 n
+0000965516 00000 n
+0000965581 00000 n
+0000965646 00000 n
+0000965711 00000 n
+0000965776 00000 n
+0000965841 00000 n
+0000965906 00000 n
+0000965971 00000 n
+0000966036 00000 n
+0000966101 00000 n
+0000966166 00000 n
+0000966231 00000 n
+0000966295 00000 n
+0000966360 00000 n
+0000966425 00000 n
+0000966490 00000 n
+0000966555 00000 n
+0000966619 00000 n
+0000972622 00000 n
+0000968996 00000 n
+0000966873 00000 n
+0000969121 00000 n
+0000969185 00000 n
+0000969250 00000 n
+0000969315 00000 n
+0000969380 00000 n
+0000969445 00000 n
+0000969510 00000 n
+0000969575 00000 n
+0000969640 00000 n
+0000969705 00000 n
+0000969769 00000 n
+0000969834 00000 n
+0000969899 00000 n
+0000969964 00000 n
+0000970027 00000 n
+0000970092 00000 n
+0000970157 00000 n
+0000970222 00000 n
+0000970287 00000 n
+0000970352 00000 n
+0000970417 00000 n
+0000970482 00000 n
+0000970547 00000 n
+0000970612 00000 n
+0000970677 00000 n
+0000970742 00000 n
+0000970807 00000 n
+0000970872 00000 n
+0000970937 00000 n
+0000971002 00000 n
+0000971067 00000 n
+0000971132 00000 n
+0000971197 00000 n
+0000971261 00000 n
+0000971326 00000 n
+0000971391 00000 n
+0000971456 00000 n
+0000971521 00000 n
+0000971586 00000 n
+0000971651 00000 n
+0000971716 00000 n
+0000971781 00000 n
+0000971845 00000 n
+0000971910 00000 n
+0000971975 00000 n
+0000972040 00000 n
+0000972105 00000 n
+0000972170 00000 n
+0000972235 00000 n
+0000972299 00000 n
+0000972364 00000 n
+0000972429 00000 n
+0000972494 00000 n
+0000972558 00000 n
+0000978696 00000 n
+0000975394 00000 n
+0000972786 00000 n
+0000975519 00000 n
+0000975583 00000 n
+0000975648 00000 n
+0000975713 00000 n
+0000975777 00000 n
+0000975842 00000 n
+0000975907 00000 n
+0000975972 00000 n
+0000976037 00000 n
+0000976102 00000 n
+0000976167 00000 n
+0000976232 00000 n
+0000976297 00000 n
+0000976361 00000 n
+0000976426 00000 n
+0000976491 00000 n
+0000976556 00000 n
+0000976621 00000 n
+0000976686 00000 n
+0000976751 00000 n
+0000976816 00000 n
+0000976881 00000 n
+0000976945 00000 n
+0000977010 00000 n
+0000977075 00000 n
+0000977140 00000 n
+0000977205 00000 n
+0000977270 00000 n
+0000977335 00000 n
+0000977400 00000 n
+0000977465 00000 n
+0000977530 00000 n
+0000977595 00000 n
+0000977660 00000 n
+0000977724 00000 n
+0000977789 00000 n
+0000977854 00000 n
+0000977919 00000 n
+0000977984 00000 n
+0000978049 00000 n
+0000978114 00000 n
+0000978179 00000 n
+0000978244 00000 n
+0000978308 00000 n
+0000978373 00000 n
+0000978438 00000 n
+0000978503 00000 n
+0000978568 00000 n
+0000978632 00000 n
+0000984429 00000 n
+0000980607 00000 n
+0000978886 00000 n
+0000980732 00000 n
+0000980796 00000 n
+0000980861 00000 n
+0000980926 00000 n
+0000980991 00000 n
+0000981056 00000 n
+0000981121 00000 n
+0000981186 00000 n
+0000981251 00000 n
+0000981316 00000 n
+0000981380 00000 n
+0000981445 00000 n
+0000981510 00000 n
+0000981575 00000 n
+0000981640 00000 n
+0000981705 00000 n
+0000981770 00000 n
+0000981835 00000 n
+0000981900 00000 n
+0000981965 00000 n
+0000982030 00000 n
+0000982095 00000 n
+0000982160 00000 n
+0000982225 00000 n
+0000982289 00000 n
+0000982354 00000 n
+0000982419 00000 n
+0000982484 00000 n
+0000982549 00000 n
+0000982613 00000 n
+0000982678 00000 n
+0000982743 00000 n
+0000982808 00000 n
+0000982873 00000 n
+0000982938 00000 n
+0000983003 00000 n
+0000983068 00000 n
+0000983133 00000 n
+0000983198 00000 n
+0000983262 00000 n
+0000983327 00000 n
+0000983392 00000 n
+0000983457 00000 n
+0000983522 00000 n
+0000983587 00000 n
+0000983652 00000 n
+0000983717 00000 n
+0000983782 00000 n
+0000983847 00000 n
+0000983911 00000 n
+0000983976 00000 n
+0000984041 00000 n
+0000984106 00000 n
+0000984171 00000 n
+0000984236 00000 n
+0000984301 00000 n
+0000984365 00000 n
+0000990162 00000 n
+0000987379 00000 n
+0000984593 00000 n
+0000987504 00000 n
+0000987568 00000 n
+0000987633 00000 n
+0000987698 00000 n
+0000987763 00000 n
+0000987828 00000 n
+0000987893 00000 n
+0000987958 00000 n
+0000988023 00000 n
+0000988088 00000 n
+0000988152 00000 n
+0000988217 00000 n
+0000988282 00000 n
+0000988347 00000 n
+0000988412 00000 n
+0000988477 00000 n
+0000988542 00000 n
+0000988607 00000 n
+0000988672 00000 n
+0000988737 00000 n
+0000988802 00000 n
+0000988867 00000 n
+0000988931 00000 n
+0000988996 00000 n
+0000989061 00000 n
+0000989126 00000 n
+0000989191 00000 n
+0000989255 00000 n
+0000989320 00000 n
+0000989385 00000 n
+0000989450 00000 n
+0000989515 00000 n
+0000989580 00000 n
+0000989645 00000 n
+0000989710 00000 n
+0000989775 00000 n
+0000989839 00000 n
+0000989904 00000 n
+0000989969 00000 n
+0000990034 00000 n
+0000990098 00000 n
+0000996024 00000 n
+0000992851 00000 n
+0000990339 00000 n
+0000992976 00000 n
+0000993040 00000 n
+0000993105 00000 n
+0000993170 00000 n
+0000993235 00000 n
+0000993300 00000 n
+0000993365 00000 n
+0000993430 00000 n
+0000993495 00000 n
+0000993560 00000 n
+0000993625 00000 n
+0000993690 00000 n
+0000993753 00000 n
+0000993818 00000 n
+0000993883 00000 n
+0000993948 00000 n
+0000994013 00000 n
+0000994078 00000 n
+0000994143 00000 n
+0000994208 00000 n
+0000994273 00000 n
+0000994338 00000 n
+0000994403 00000 n
+0000994468 00000 n
+0000994533 00000 n
+0000994598 00000 n
+0000994663 00000 n
+0000994728 00000 n
+0000994793 00000 n
+0000994858 00000 n
+0000994923 00000 n
+0000994988 00000 n
+0000995053 00000 n
+0000995118 00000 n
+0000995183 00000 n
+0000995248 00000 n
+0000995313 00000 n
+0000995377 00000 n
+0000995442 00000 n
+0000995507 00000 n
+0000995572 00000 n
+0000995637 00000 n
+0000995702 00000 n
+0000995767 00000 n
+0000995831 00000 n
+0000995896 00000 n
+0000995960 00000 n
+0001002165 00000 n
+0000998148 00000 n
+0000996201 00000 n
+0000998273 00000 n
+0000998337 00000 n
+0000998402 00000 n
+0000998467 00000 n
+0000998532 00000 n
+0000998597 00000 n
+0000998662 00000 n
+0000998727 00000 n
+0000998792 00000 n
+0000998857 00000 n
+0000998921 00000 n
+0000998986 00000 n
+0000999051 00000 n
+0000999116 00000 n
+0000999181 00000 n
+0000999246 00000 n
+0000999311 00000 n
+0000999376 00000 n
+0000999441 00000 n
+0000999505 00000 n
+0000999570 00000 n
+0000999635 00000 n
+0000999700 00000 n
+0000999764 00000 n
+0000999829 00000 n
+0000999894 00000 n
+0000999959 00000 n
+0001000024 00000 n
+0001000089 00000 n
+0001000154 00000 n
+0001000219 00000 n
+0001000284 00000 n
+0001000348 00000 n
+0001000413 00000 n
+0001000478 00000 n
+0001000543 00000 n
+0001000608 00000 n
+0001000673 00000 n
+0001000738 00000 n
+0001000803 00000 n
+0001000868 00000 n
+0001000933 00000 n
+0001000998 00000 n
+0001001063 00000 n
+0001001128 00000 n
+0001001193 00000 n
+0001001258 00000 n
+0001001323 00000 n
+0001001388 00000 n
+0001001453 00000 n
+0001001518 00000 n
+0001001583 00000 n
+0001001648 00000 n
+0001001713 00000 n
+0001001777 00000 n
+0001001842 00000 n
+0001001907 00000 n
+0001001972 00000 n
+0001002037 00000 n
+0001002101 00000 n
+0001008201 00000 n
+0001003991 00000 n
+0001002342 00000 n
+0001004116 00000 n
+0001004180 00000 n
+0001004245 00000 n
+0001004310 00000 n
+0001004375 00000 n
+0001004440 00000 n
+0001004505 00000 n
+0001004570 00000 n
+0001004635 00000 n
+0001004700 00000 n
+0001004764 00000 n
+0001004829 00000 n
+0001004894 00000 n
+0001004959 00000 n
+0001005024 00000 n
+0001005089 00000 n
+0001005154 00000 n
+0001005219 00000 n
+0001005284 00000 n
+0001005348 00000 n
+0001005413 00000 n
+0001005478 00000 n
+0001005543 00000 n
+0001005608 00000 n
+0001005673 00000 n
+0001005738 00000 n
+0001005803 00000 n
+0001005868 00000 n
+0001005931 00000 n
+0001005996 00000 n
+0001006061 00000 n
+0001006126 00000 n
+0001006191 00000 n
+0001006256 00000 n
+0001006321 00000 n
+0001006386 00000 n
+0001006451 00000 n
+0001006515 00000 n
+0001006580 00000 n
+0001006645 00000 n
+0001006710 00000 n
+0001006775 00000 n
+0001006840 00000 n
+0001006905 00000 n
+0001006970 00000 n
+0001007035 00000 n
+0001007099 00000 n
+0001007164 00000 n
+0001007229 00000 n
+0001007294 00000 n
+0001007359 00000 n
+0001007424 00000 n
+0001007489 00000 n
+0001007554 00000 n
+0001007619 00000 n
+0001007683 00000 n
+0001007748 00000 n
+0001007813 00000 n
+0001007878 00000 n
+0001007943 00000 n
+0001008008 00000 n
+0001008073 00000 n
+0001008137 00000 n
+0001014001 00000 n
+0001010244 00000 n
+0001008365 00000 n
+0001010369 00000 n
+0001010433 00000 n
+0001010498 00000 n
+0001010563 00000 n
+0001010628 00000 n
+0001010693 00000 n
+0001010758 00000 n
+0001010823 00000 n
+0001010888 00000 n
+0001010953 00000 n
+0001011017 00000 n
+0001011082 00000 n
+0001011147 00000 n
+0001011212 00000 n
+0001011277 00000 n
+0001011342 00000 n
+0001011407 00000 n
+0001011472 00000 n
+0001011537 00000 n
+0001011601 00000 n
+0001011666 00000 n
+0001011731 00000 n
+0001011796 00000 n
+0001011861 00000 n
+0001011926 00000 n
+0001011991 00000 n
+0001012056 00000 n
+0001012121 00000 n
+0001012186 00000 n
+0001012251 00000 n
+0001012316 00000 n
+0001012380 00000 n
+0001012445 00000 n
+0001012510 00000 n
+0001012575 00000 n
+0001012640 00000 n
+0001012705 00000 n
+0001012770 00000 n
+0001012835 00000 n
+0001012900 00000 n
+0001012965 00000 n
+0001013030 00000 n
+0001013094 00000 n
+0001013159 00000 n
+0001013224 00000 n
+0001013289 00000 n
+0001013354 00000 n
+0001013419 00000 n
+0001013484 00000 n
+0001013549 00000 n
+0001013613 00000 n
+0001013678 00000 n
+0001013743 00000 n
+0001013808 00000 n
+0001013873 00000 n
+0001013937 00000 n
+0001019840 00000 n
+0001015824 00000 n
+0001014178 00000 n
+0001015949 00000 n
+0001016013 00000 n
+0001016078 00000 n
+0001016143 00000 n
+0001016208 00000 n
+0001016273 00000 n
+0001016338 00000 n
+0001016403 00000 n
+0001016468 00000 n
+0001016533 00000 n
+0001016597 00000 n
+0001016662 00000 n
+0001016727 00000 n
+0001016792 00000 n
+0001016857 00000 n
+0001016922 00000 n
+0001016987 00000 n
+0001017052 00000 n
+0001017117 00000 n
+0001017181 00000 n
+0001017246 00000 n
+0001017311 00000 n
+0001017376 00000 n
+0001017441 00000 n
+0001017506 00000 n
+0001017571 00000 n
+0001017636 00000 n
+0001017701 00000 n
+0001017766 00000 n
+0001017830 00000 n
+0001017895 00000 n
+0001017960 00000 n
+0001018025 00000 n
+0001018090 00000 n
+0001018155 00000 n
+0001018220 00000 n
+0001018285 00000 n
+0001018350 00000 n
+0001018414 00000 n
+0001018479 00000 n
+0001018544 00000 n
+0001018609 00000 n
+0001018674 00000 n
+0001018739 00000 n
+0001018804 00000 n
+0001018869 00000 n
+0001018934 00000 n
+0001018999 00000 n
+0001019064 00000 n
+0001019129 00000 n
+0001019194 00000 n
+0001019259 00000 n
+0001019324 00000 n
+0001019388 00000 n
+0001019453 00000 n
+0001019518 00000 n
+0001019583 00000 n
+0001019648 00000 n
+0001019712 00000 n
+0001019776 00000 n
+0001876264 00000 n
+0001025817 00000 n
+0001022124 00000 n
+0001020017 00000 n
+0001022249 00000 n
+0001022313 00000 n
+0001022378 00000 n
+0001022443 00000 n
+0001022508 00000 n
+0001022573 00000 n
+0001022638 00000 n
+0001022703 00000 n
+0001022768 00000 n
+0001022833 00000 n
+0001022898 00000 n
+0001022963 00000 n
+0001023027 00000 n
+0001023092 00000 n
+0001023157 00000 n
+0001023222 00000 n
+0001023287 00000 n
+0001023352 00000 n
+0001023417 00000 n
+0001023482 00000 n
+0001023547 00000 n
+0001023611 00000 n
+0001023676 00000 n
+0001023741 00000 n
+0001023806 00000 n
+0001023871 00000 n
+0001023936 00000 n
+0001024001 00000 n
+0001024066 00000 n
+0001024131 00000 n
+0001024196 00000 n
+0001024261 00000 n
+0001024325 00000 n
+0001024390 00000 n
+0001024455 00000 n
+0001024520 00000 n
+0001024585 00000 n
+0001024650 00000 n
+0001024715 00000 n
+0001024780 00000 n
+0001024845 00000 n
+0001024910 00000 n
+0001024975 00000 n
+0001025040 00000 n
+0001025105 00000 n
+0001025170 00000 n
+0001025235 00000 n
+0001025300 00000 n
+0001025365 00000 n
+0001025429 00000 n
+0001025494 00000 n
+0001025559 00000 n
+0001025624 00000 n
+0001025689 00000 n
+0001025753 00000 n
+0001031976 00000 n
+0001028090 00000 n
+0001025994 00000 n
+0001028215 00000 n
+0001028279 00000 n
+0001028344 00000 n
+0001028409 00000 n
+0001028474 00000 n
+0001028539 00000 n
+0001028604 00000 n
+0001028669 00000 n
+0001028734 00000 n
+0001028799 00000 n
+0001028863 00000 n
+0001028928 00000 n
+0001028993 00000 n
+0001029058 00000 n
+0001029123 00000 n
+0001029188 00000 n
+0001029253 00000 n
+0001029318 00000 n
+0001029383 00000 n
+0001029447 00000 n
+0001029512 00000 n
+0001029577 00000 n
+0001029642 00000 n
+0001029707 00000 n
+0001029772 00000 n
+0001029837 00000 n
+0001029902 00000 n
+0001029967 00000 n
+0001030032 00000 n
+0001030097 00000 n
+0001030161 00000 n
+0001030226 00000 n
+0001030291 00000 n
+0001030356 00000 n
+0001030421 00000 n
+0001030486 00000 n
+0001030551 00000 n
+0001030616 00000 n
+0001030680 00000 n
+0001030745 00000 n
+0001030810 00000 n
+0001030875 00000 n
+0001030940 00000 n
+0001031005 00000 n
+0001031070 00000 n
+0001031135 00000 n
+0001031200 00000 n
+0001031264 00000 n
+0001031329 00000 n
+0001031394 00000 n
+0001031459 00000 n
+0001031524 00000 n
+0001031589 00000 n
+0001031654 00000 n
+0001031719 00000 n
+0001031784 00000 n
+0001031848 00000 n
+0001031912 00000 n
+0001038036 00000 n
+0001034085 00000 n
+0001032153 00000 n
+0001034210 00000 n
+0001034274 00000 n
+0001034339 00000 n
+0001034404 00000 n
+0001034469 00000 n
+0001034534 00000 n
+0001034599 00000 n
+0001034664 00000 n
+0001034729 00000 n
+0001034794 00000 n
+0001034858 00000 n
+0001034923 00000 n
+0001034988 00000 n
+0001035053 00000 n
+0001035118 00000 n
+0001035183 00000 n
+0001035248 00000 n
+0001035313 00000 n
+0001035378 00000 n
+0001035442 00000 n
+0001035507 00000 n
+0001035572 00000 n
+0001035637 00000 n
+0001035702 00000 n
+0001035767 00000 n
+0001035832 00000 n
+0001035896 00000 n
+0001035961 00000 n
+0001036026 00000 n
+0001036091 00000 n
+0001036156 00000 n
+0001036221 00000 n
+0001036286 00000 n
+0001036351 00000 n
+0001036416 00000 n
+0001036480 00000 n
+0001036545 00000 n
+0001036610 00000 n
+0001036675 00000 n
+0001036740 00000 n
+0001036805 00000 n
+0001036870 00000 n
+0001036935 00000 n
+0001037000 00000 n
+0001037065 00000 n
+0001037130 00000 n
+0001037194 00000 n
+0001037259 00000 n
+0001037324 00000 n
+0001037389 00000 n
+0001037454 00000 n
+0001037519 00000 n
+0001037584 00000 n
+0001037649 00000 n
+0001037714 00000 n
+0001037779 00000 n
+0001037843 00000 n
+0001037908 00000 n
+0001037972 00000 n
+0001044042 00000 n
+0001040155 00000 n
+0001038213 00000 n
+0001040280 00000 n
+0001040344 00000 n
+0001040409 00000 n
+0001040474 00000 n
+0001040539 00000 n
+0001040604 00000 n
+0001040669 00000 n
+0001040734 00000 n
+0001040799 00000 n
+0001040864 00000 n
+0001040928 00000 n
+0001040993 00000 n
+0001041058 00000 n
+0001041123 00000 n
+0001041188 00000 n
+0001041253 00000 n
+0001041318 00000 n
+0001041383 00000 n
+0001041447 00000 n
+0001041512 00000 n
+0001041577 00000 n
+0001041642 00000 n
+0001041707 00000 n
+0001041772 00000 n
+0001041837 00000 n
+0001041902 00000 n
+0001041967 00000 n
+0001042032 00000 n
+0001042097 00000 n
+0001042162 00000 n
+0001042227 00000 n
+0001042291 00000 n
+0001042356 00000 n
+0001042421 00000 n
+0001042486 00000 n
+0001042551 00000 n
+0001042616 00000 n
+0001042681 00000 n
+0001042746 00000 n
+0001042811 00000 n
+0001042875 00000 n
+0001042940 00000 n
+0001043005 00000 n
+0001043070 00000 n
+0001043135 00000 n
+0001043200 00000 n
+0001043265 00000 n
+0001043330 00000 n
+0001043395 00000 n
+0001043460 00000 n
+0001043525 00000 n
+0001043590 00000 n
+0001043654 00000 n
+0001043719 00000 n
+0001043784 00000 n
+0001043849 00000 n
+0001043914 00000 n
+0001043978 00000 n
+0001049692 00000 n
+0001046393 00000 n
+0001044206 00000 n
+0001046518 00000 n
+0001046582 00000 n
+0001046647 00000 n
+0001046712 00000 n
+0001046777 00000 n
+0001046842 00000 n
+0001046907 00000 n
+0001046972 00000 n
+0001047037 00000 n
+0001047102 00000 n
+0001047166 00000 n
+0001047231 00000 n
+0001047296 00000 n
+0001047361 00000 n
+0001047426 00000 n
+0001047491 00000 n
+0001047556 00000 n
+0001047621 00000 n
+0001047686 00000 n
+0001047751 00000 n
+0001047815 00000 n
+0001047880 00000 n
+0001047945 00000 n
+0001048010 00000 n
+0001048075 00000 n
+0001048140 00000 n
+0001048205 00000 n
+0001048270 00000 n
+0001048335 00000 n
+0001048400 00000 n
+0001048463 00000 n
+0001048528 00000 n
+0001048593 00000 n
+0001048658 00000 n
+0001048723 00000 n
+0001048788 00000 n
+0001048853 00000 n
+0001048918 00000 n
+0001048983 00000 n
+0001049047 00000 n
+0001049112 00000 n
+0001049240 00000 n
+0001049304 00000 n
+0001049369 00000 n
+0001049434 00000 n
+0001049499 00000 n
+0001049564 00000 n
+0001049628 00000 n
+0001055588 00000 n
+0001052027 00000 n
+0001049882 00000 n
+0001052152 00000 n
+0001052216 00000 n
+0001052281 00000 n
+0001052346 00000 n
+0001052411 00000 n
+0001052476 00000 n
+0001052541 00000 n
+0001052606 00000 n
+0001052671 00000 n
+0001052736 00000 n
+0001052800 00000 n
+0001052865 00000 n
+0001052993 00000 n
+0001053058 00000 n
+0001053123 00000 n
+0001053188 00000 n
+0001053252 00000 n
+0001053317 00000 n
+0001053382 00000 n
+0001053447 00000 n
+0001053512 00000 n
+0001053577 00000 n
+0001053642 00000 n
+0001053707 00000 n
+0001053772 00000 n
+0001053836 00000 n
+0001053901 00000 n
+0001053966 00000 n
+0001054031 00000 n
+0001054096 00000 n
+0001054161 00000 n
+0001054226 00000 n
+0001054291 00000 n
+0001054356 00000 n
+0001054421 00000 n
+0001054486 00000 n
+0001054551 00000 n
+0001054616 00000 n
+0001054681 00000 n
+0001054746 00000 n
+0001054811 00000 n
+0001054876 00000 n
+0001054940 00000 n
+0001055005 00000 n
+0001055070 00000 n
+0001055135 00000 n
+0001055200 00000 n
+0001055265 00000 n
+0001055330 00000 n
+0001055395 00000 n
+0001055460 00000 n
+0001055524 00000 n
+0001060785 00000 n
+0001057938 00000 n
+0001055765 00000 n
+0001058063 00000 n
+0001058127 00000 n
+0001058192 00000 n
+0001058257 00000 n
+0001058322 00000 n
+0001058387 00000 n
+0001058452 00000 n
+0001058517 00000 n
+0001058582 00000 n
+0001058647 00000 n
+0001058711 00000 n
+0001058776 00000 n
+0001058841 00000 n
+0001058906 00000 n
+0001058971 00000 n
+0001059036 00000 n
+0001059101 00000 n
+0001059164 00000 n
+0001059229 00000 n
+0001059294 00000 n
+0001059359 00000 n
+0001059424 00000 n
+0001059489 00000 n
+0001059554 00000 n
+0001059619 00000 n
+0001059684 00000 n
+0001059749 00000 n
+0001059814 00000 n
+0001059879 00000 n
+0001059944 00000 n
+0001060009 00000 n
+0001060074 00000 n
+0001060202 00000 n
+0001060267 00000 n
+0001060332 00000 n
+0001060397 00000 n
+0001060462 00000 n
+0001060527 00000 n
+0001060592 00000 n
+0001060657 00000 n
+0001066440 00000 n
+0001063397 00000 n
+0001060975 00000 n
+0001063522 00000 n
+0001063586 00000 n
+0001063651 00000 n
+0001063716 00000 n
+0001063781 00000 n
+0001063846 00000 n
+0001063911 00000 n
+0001063976 00000 n
+0001064041 00000 n
+0001064106 00000 n
+0001064170 00000 n
+0001064235 00000 n
+0001064300 00000 n
+0001064365 00000 n
+0001064430 00000 n
+0001064495 00000 n
+0001064560 00000 n
+0001064625 00000 n
+0001064690 00000 n
+0001064755 00000 n
+0001064820 00000 n
+0001064885 00000 n
+0001064950 00000 n
+0001065015 00000 n
+0001065080 00000 n
+0001065145 00000 n
+0001065210 00000 n
+0001065275 00000 n
+0001065339 00000 n
+0001065404 00000 n
+0001065469 00000 n
+0001065534 00000 n
+0001065599 00000 n
+0001065664 00000 n
+0001065729 00000 n
+0001065794 00000 n
+0001065859 00000 n
+0001065923 00000 n
+0001065988 00000 n
+0001066053 00000 n
+0001066118 00000 n
+0001066183 00000 n
+0001066248 00000 n
+0001066313 00000 n
+0001066376 00000 n
+0001069147 00000 n
+0001071892 00000 n
+0001068974 00000 n
+0001066617 00000 n
+0001069304 00000 n
+0001069368 00000 n
+0001069433 00000 n
+0001069498 00000 n
+0001069563 00000 n
+0001069628 00000 n
+0001069693 00000 n
+0001069758 00000 n
+0001069823 00000 n
+0001069888 00000 n
+0001069952 00000 n
+0001070017 00000 n
+0001070082 00000 n
+0001070147 00000 n
+0001070212 00000 n
+0001070277 00000 n
+0001070342 00000 n
+0001070407 00000 n
+0001070472 00000 n
+0001070536 00000 n
+0001070601 00000 n
+0001070666 00000 n
+0001070794 00000 n
+0001070859 00000 n
+0001070924 00000 n
+0001070989 00000 n
+0001071054 00000 n
+0001071119 00000 n
+0001071184 00000 n
+0001071249 00000 n
+0001071313 00000 n
+0001071378 00000 n
+0001071443 00000 n
+0001071508 00000 n
+0001071573 00000 n
+0001071638 00000 n
+0001071703 00000 n
+0001071767 00000 n
+0001069116 00000 n
+0001077639 00000 n
+0001074856 00000 n
+0001072095 00000 n
+0001074981 00000 n
+0001075045 00000 n
+0001075110 00000 n
+0001075175 00000 n
+0001075240 00000 n
+0001075305 00000 n
+0001075370 00000 n
+0001075435 00000 n
+0001075499 00000 n
+0001075564 00000 n
+0001075629 00000 n
+0001075694 00000 n
+0001075759 00000 n
+0001075823 00000 n
+0001075888 00000 n
+0001075953 00000 n
+0001076018 00000 n
+0001076083 00000 n
+0001076148 00000 n
+0001076213 00000 n
+0001076278 00000 n
+0001076343 00000 n
+0001076407 00000 n
+0001076472 00000 n
+0001076537 00000 n
+0001076602 00000 n
+0001076667 00000 n
+0001076732 00000 n
+0001076797 00000 n
+0001076862 00000 n
+0001076927 00000 n
+0001076992 00000 n
+0001077057 00000 n
+0001077121 00000 n
+0001077186 00000 n
+0001077251 00000 n
+0001077316 00000 n
+0001077381 00000 n
+0001077446 00000 n
+0001077511 00000 n
+0001077575 00000 n
+0001876429 00000 n
+0001083257 00000 n
+0001079504 00000 n
+0001077855 00000 n
+0001079629 00000 n
+0001079693 00000 n
+0001079758 00000 n
+0001079823 00000 n
+0001079888 00000 n
+0001079953 00000 n
+0001080018 00000 n
+0001080083 00000 n
+0001080148 00000 n
+0001080213 00000 n
+0001080277 00000 n
+0001080342 00000 n
+0001080407 00000 n
+0001080472 00000 n
+0001080537 00000 n
+0001080602 00000 n
+0001080728 00000 n
+0001080793 00000 n
+0001080858 00000 n
+0001080923 00000 n
+0001080988 00000 n
+0001081052 00000 n
+0001081117 00000 n
+0001081182 00000 n
+0001081247 00000 n
+0001081312 00000 n
+0001081377 00000 n
+0001081442 00000 n
+0001081507 00000 n
+0001081572 00000 n
+0001081636 00000 n
+0001081701 00000 n
+0001081766 00000 n
+0001081831 00000 n
+0001081896 00000 n
+0001081961 00000 n
+0001082026 00000 n
+0001082091 00000 n
+0001082156 00000 n
+0001082220 00000 n
+0001082285 00000 n
+0001082350 00000 n
+0001082415 00000 n
+0001082480 00000 n
+0001082545 00000 n
+0001082610 00000 n
+0001082675 00000 n
+0001082739 00000 n
+0001082804 00000 n
+0001082869 00000 n
+0001082934 00000 n
+0001082999 00000 n
+0001083064 00000 n
+0001083129 00000 n
+0001083193 00000 n
+0001089160 00000 n
+0001085400 00000 n
+0001083434 00000 n
+0001085525 00000 n
+0001085589 00000 n
+0001085654 00000 n
+0001085719 00000 n
+0001085784 00000 n
+0001085849 00000 n
+0001085914 00000 n
+0001085979 00000 n
+0001086044 00000 n
+0001086109 00000 n
+0001086173 00000 n
+0001086238 00000 n
+0001086303 00000 n
+0001086368 00000 n
+0001086433 00000 n
+0001086498 00000 n
+0001086563 00000 n
+0001086628 00000 n
+0001086693 00000 n
+0001086757 00000 n
+0001086822 00000 n
+0001086887 00000 n
+0001086952 00000 n
+0001087017 00000 n
+0001087082 00000 n
+0001087147 00000 n
+0001087212 00000 n
+0001087277 00000 n
+0001087342 00000 n
+0001087407 00000 n
+0001087472 00000 n
+0001087536 00000 n
+0001087601 00000 n
+0001087666 00000 n
+0001087731 00000 n
+0001087796 00000 n
+0001087861 00000 n
+0001087926 00000 n
+0001087991 00000 n
+0001088056 00000 n
+0001088121 00000 n
+0001088185 00000 n
+0001088250 00000 n
+0001088315 00000 n
+0001088380 00000 n
+0001088445 00000 n
+0001088510 00000 n
+0001088575 00000 n
+0001088640 00000 n
+0001088705 00000 n
+0001088770 00000 n
+0001088835 00000 n
+0001088900 00000 n
+0001088965 00000 n
+0001089030 00000 n
+0001089095 00000 n
+0001094623 00000 n
+0001091580 00000 n
+0001089337 00000 n
+0001091705 00000 n
+0001091769 00000 n
+0001091834 00000 n
+0001091899 00000 n
+0001091964 00000 n
+0001092029 00000 n
+0001092094 00000 n
+0001092159 00000 n
+0001092224 00000 n
+0001092289 00000 n
+0001092353 00000 n
+0001092418 00000 n
+0001092483 00000 n
+0001092548 00000 n
+0001092613 00000 n
+0001092678 00000 n
+0001092743 00000 n
+0001092808 00000 n
+0001092873 00000 n
+0001092938 00000 n
+0001093003 00000 n
+0001093068 00000 n
+0001093132 00000 n
+0001093197 00000 n
+0001093262 00000 n
+0001093327 00000 n
+0001093392 00000 n
+0001093457 00000 n
+0001093522 00000 n
+0001093587 00000 n
+0001093652 00000 n
+0001093716 00000 n
+0001093781 00000 n
+0001093846 00000 n
+0001093911 00000 n
+0001093976 00000 n
+0001094041 00000 n
+0001094106 00000 n
+0001094171 00000 n
+0001094235 00000 n
+0001094300 00000 n
+0001094365 00000 n
+0001094430 00000 n
+0001094495 00000 n
+0001094559 00000 n
+0001100772 00000 n
+0001096756 00000 n
+0001094813 00000 n
+0001096881 00000 n
+0001096945 00000 n
+0001097010 00000 n
+0001097075 00000 n
+0001097140 00000 n
+0001097205 00000 n
+0001097270 00000 n
+0001097335 00000 n
+0001097400 00000 n
+0001097465 00000 n
+0001097530 00000 n
+0001097595 00000 n
+0001097659 00000 n
+0001097724 00000 n
+0001097789 00000 n
+0001097854 00000 n
+0001097919 00000 n
+0001097984 00000 n
+0001098049 00000 n
+0001098114 00000 n
+0001098179 00000 n
+0001098243 00000 n
+0001098308 00000 n
+0001098373 00000 n
+0001098438 00000 n
+0001098503 00000 n
+0001098568 00000 n
+0001098633 00000 n
+0001098698 00000 n
+0001098763 00000 n
+0001098827 00000 n
+0001098892 00000 n
+0001098957 00000 n
+0001099022 00000 n
+0001099087 00000 n
+0001099152 00000 n
+0001099217 00000 n
+0001099282 00000 n
+0001099346 00000 n
+0001099411 00000 n
+0001099476 00000 n
+0001099541 00000 n
+0001099606 00000 n
+0001099671 00000 n
+0001099736 00000 n
+0001099801 00000 n
+0001099866 00000 n
+0001099930 00000 n
+0001099995 00000 n
+0001100060 00000 n
+0001100125 00000 n
+0001100190 00000 n
+0001100255 00000 n
+0001100320 00000 n
+0001100385 00000 n
+0001100450 00000 n
+0001100514 00000 n
+0001100579 00000 n
+0001100644 00000 n
+0001100708 00000 n
+0001106519 00000 n
+0001103152 00000 n
+0001100936 00000 n
+0001103277 00000 n
+0001103341 00000 n
+0001103406 00000 n
+0001103471 00000 n
+0001103536 00000 n
+0001103601 00000 n
+0001103666 00000 n
+0001103731 00000 n
+0001103796 00000 n
+0001103861 00000 n
+0001103925 00000 n
+0001103990 00000 n
+0001104055 00000 n
+0001104120 00000 n
+0001104185 00000 n
+0001104250 00000 n
+0001104315 00000 n
+0001104379 00000 n
+0001104444 00000 n
+0001104509 00000 n
+0001104573 00000 n
+0001104638 00000 n
+0001104703 00000 n
+0001104768 00000 n
+0001104833 00000 n
+0001104898 00000 n
+0001104963 00000 n
+0001105028 00000 n
+0001105093 00000 n
+0001105158 00000 n
+0001105223 00000 n
+0001105287 00000 n
+0001105352 00000 n
+0001105417 00000 n
+0001105482 00000 n
+0001105547 00000 n
+0001105610 00000 n
+0001105675 00000 n
+0001105740 00000 n
+0001105805 00000 n
+0001105870 00000 n
+0001105935 00000 n
+0001106000 00000 n
+0001106065 00000 n
+0001106130 00000 n
+0001106194 00000 n
+0001106259 00000 n
+0001106324 00000 n
+0001106389 00000 n
+0001106454 00000 n
+0001112335 00000 n
+0001108840 00000 n
+0001106683 00000 n
+0001108965 00000 n
+0001109029 00000 n
+0001109094 00000 n
+0001109159 00000 n
+0001109224 00000 n
+0001109289 00000 n
+0001109354 00000 n
+0001109419 00000 n
+0001109484 00000 n
+0001109549 00000 n
+0001109613 00000 n
+0001109678 00000 n
+0001109743 00000 n
+0001109808 00000 n
+0001109873 00000 n
+0001109936 00000 n
+0001110001 00000 n
+0001110066 00000 n
+0001110131 00000 n
+0001110196 00000 n
+0001110261 00000 n
+0001110326 00000 n
+0001110391 00000 n
+0001110456 00000 n
+0001110521 00000 n
+0001110586 00000 n
+0001110650 00000 n
+0001110715 00000 n
+0001110780 00000 n
+0001110845 00000 n
+0001110910 00000 n
+0001110975 00000 n
+0001111040 00000 n
+0001111105 00000 n
+0001111170 00000 n
+0001111234 00000 n
+0001111299 00000 n
+0001111364 00000 n
+0001111429 00000 n
+0001111494 00000 n
+0001111558 00000 n
+0001111623 00000 n
+0001111688 00000 n
+0001111753 00000 n
+0001111818 00000 n
+0001111883 00000 n
+0001111948 00000 n
+0001112013 00000 n
+0001112078 00000 n
+0001112143 00000 n
+0001112207 00000 n
+0001112271 00000 n
+0001117712 00000 n
+0001115250 00000 n
+0001112512 00000 n
+0001115375 00000 n
+0001115439 00000 n
+0001115504 00000 n
+0001115569 00000 n
+0001115634 00000 n
+0001115699 00000 n
+0001115764 00000 n
+0001115829 00000 n
+0001115894 00000 n
+0001115959 00000 n
+0001116023 00000 n
+0001116088 00000 n
+0001116153 00000 n
+0001116218 00000 n
+0001116283 00000 n
+0001116348 00000 n
+0001116413 00000 n
+0001116478 00000 n
+0001116543 00000 n
+0001116608 00000 n
+0001116673 00000 n
+0001116738 00000 n
+0001116803 00000 n
+0001116868 00000 n
+0001116932 00000 n
+0001116997 00000 n
+0001117062 00000 n
+0001117127 00000 n
+0001117192 00000 n
+0001117257 00000 n
+0001117322 00000 n
+0001117387 00000 n
+0001117452 00000 n
+0001117517 00000 n
+0001117582 00000 n
+0001117647 00000 n
+0001123650 00000 n
+0001120476 00000 n
+0001117902 00000 n
+0001120601 00000 n
+0001120665 00000 n
+0001120730 00000 n
+0001120795 00000 n
+0001120860 00000 n
+0001120925 00000 n
+0001120989 00000 n
+0001121054 00000 n
+0001121119 00000 n
+0001121184 00000 n
+0001121249 00000 n
+0001121314 00000 n
+0001121379 00000 n
+0001121444 00000 n
+0001121508 00000 n
+0001121573 00000 n
+0001121638 00000 n
+0001121703 00000 n
+0001121768 00000 n
+0001121833 00000 n
+0001121898 00000 n
+0001121963 00000 n
+0001122028 00000 n
+0001122093 00000 n
+0001122158 00000 n
+0001122223 00000 n
+0001122288 00000 n
+0001122353 00000 n
+0001122418 00000 n
+0001122483 00000 n
+0001122548 00000 n
+0001122613 00000 n
+0001122678 00000 n
+0001122743 00000 n
+0001122808 00000 n
+0001122873 00000 n
+0001122938 00000 n
+0001123003 00000 n
+0001123068 00000 n
+0001123133 00000 n
+0001123198 00000 n
+0001123262 00000 n
+0001123327 00000 n
+0001123392 00000 n
+0001123457 00000 n
+0001123522 00000 n
+0001123586 00000 n
+0001129202 00000 n
+0001125776 00000 n
+0001123827 00000 n
+0001125901 00000 n
+0001125965 00000 n
+0001126030 00000 n
+0001126095 00000 n
+0001126160 00000 n
+0001126225 00000 n
+0001126290 00000 n
+0001126354 00000 n
+0001126419 00000 n
+0001126484 00000 n
+0001126549 00000 n
+0001126614 00000 n
+0001126679 00000 n
+0001126744 00000 n
+0001126809 00000 n
+0001126874 00000 n
+0001126935 00000 n
+0001127000 00000 n
+0001127065 00000 n
+0001127130 00000 n
+0001127195 00000 n
+0001127260 00000 n
+0001127325 00000 n
+0001127390 00000 n
+0001127455 00000 n
+0001127519 00000 n
+0001127584 00000 n
+0001127649 00000 n
+0001127777 00000 n
+0001127842 00000 n
+0001127906 00000 n
+0001127971 00000 n
+0001128036 00000 n
+0001128101 00000 n
+0001128166 00000 n
+0001128230 00000 n
+0001128295 00000 n
+0001128360 00000 n
+0001128425 00000 n
+0001128490 00000 n
+0001128555 00000 n
+0001128620 00000 n
+0001128685 00000 n
+0001128750 00000 n
+0001128814 00000 n
+0001128879 00000 n
+0001128944 00000 n
+0001129009 00000 n
+0001129074 00000 n
+0001129138 00000 n
+0001135531 00000 n
+0001131580 00000 n
+0001129379 00000 n
+0001131705 00000 n
+0001131769 00000 n
+0001131834 00000 n
+0001131899 00000 n
+0001131964 00000 n
+0001132029 00000 n
+0001132094 00000 n
+0001132157 00000 n
+0001132222 00000 n
+0001132287 00000 n
+0001132352 00000 n
+0001132417 00000 n
+0001132482 00000 n
+0001132547 00000 n
+0001132612 00000 n
+0001132677 00000 n
+0001132741 00000 n
+0001132806 00000 n
+0001132871 00000 n
+0001132936 00000 n
+0001133001 00000 n
+0001133066 00000 n
+0001133131 00000 n
+0001133196 00000 n
+0001133261 00000 n
+0001133325 00000 n
+0001133390 00000 n
+0001133455 00000 n
+0001133520 00000 n
+0001133585 00000 n
+0001133650 00000 n
+0001133715 00000 n
+0001133780 00000 n
+0001133845 00000 n
+0001133909 00000 n
+0001133974 00000 n
+0001134039 00000 n
+0001134104 00000 n
+0001134169 00000 n
+0001134234 00000 n
+0001134299 00000 n
+0001134364 00000 n
+0001134429 00000 n
+0001134494 00000 n
+0001134559 00000 n
+0001134624 00000 n
+0001134689 00000 n
+0001134754 00000 n
+0001134819 00000 n
+0001134884 00000 n
+0001134949 00000 n
+0001135014 00000 n
+0001135079 00000 n
+0001135143 00000 n
+0001135208 00000 n
+0001135273 00000 n
+0001135338 00000 n
+0001135403 00000 n
+0001135467 00000 n
+0001876594 00000 n
+0001141410 00000 n
+0001137369 00000 n
+0001135721 00000 n
+0001137494 00000 n
+0001137558 00000 n
+0001137623 00000 n
+0001137688 00000 n
+0001137753 00000 n
+0001137818 00000 n
+0001137883 00000 n
+0001137948 00000 n
+0001138013 00000 n
+0001138078 00000 n
+0001138142 00000 n
+0001138207 00000 n
+0001138272 00000 n
+0001138337 00000 n
+0001138402 00000 n
+0001138467 00000 n
+0001138532 00000 n
+0001138597 00000 n
+0001138662 00000 n
+0001138726 00000 n
+0001138791 00000 n
+0001138856 00000 n
+0001138921 00000 n
+0001138986 00000 n
+0001139051 00000 n
+0001139116 00000 n
+0001139181 00000 n
+0001139246 00000 n
+0001139310 00000 n
+0001139375 00000 n
+0001139440 00000 n
+0001139505 00000 n
+0001139570 00000 n
+0001139635 00000 n
+0001139700 00000 n
+0001139765 00000 n
+0001139831 00000 n
+0001139896 00000 n
+0001139962 00000 n
+0001140028 00000 n
+0001140094 00000 n
+0001140160 00000 n
+0001140226 00000 n
+0001140292 00000 n
+0001140358 00000 n
+0001140424 00000 n
+0001140489 00000 n
+0001140555 00000 n
+0001140621 00000 n
+0001140687 00000 n
+0001140753 00000 n
+0001140819 00000 n
+0001140885 00000 n
+0001140951 00000 n
+0001141017 00000 n
+0001141083 00000 n
+0001141148 00000 n
+0001141214 00000 n
+0001141280 00000 n
+0001141345 00000 n
+0001147097 00000 n
+0001143095 00000 n
+0001141561 00000 n
+0001143223 00000 n
+0001143289 00000 n
+0001143356 00000 n
+0001143423 00000 n
+0001143490 00000 n
+0001143557 00000 n
+0001143624 00000 n
+0001143691 00000 n
+0001143758 00000 n
+0001143825 00000 n
+0001143891 00000 n
+0001143958 00000 n
+0001144025 00000 n
+0001144092 00000 n
+0001144159 00000 n
+0001144226 00000 n
+0001144293 00000 n
+0001144360 00000 n
+0001144427 00000 n
+0001144493 00000 n
+0001144560 00000 n
+0001144627 00000 n
+0001144694 00000 n
+0001144761 00000 n
+0001144828 00000 n
+0001144895 00000 n
+0001144962 00000 n
+0001145029 00000 n
+0001145094 00000 n
+0001145161 00000 n
+0001145228 00000 n
+0001145359 00000 n
+0001145426 00000 n
+0001145493 00000 n
+0001145560 00000 n
+0001145627 00000 n
+0001145694 00000 n
+0001145761 00000 n
+0001145828 00000 n
+0001145895 00000 n
+0001145962 00000 n
+0001146029 00000 n
+0001146096 00000 n
+0001146162 00000 n
+0001146229 00000 n
+0001146296 00000 n
+0001146363 00000 n
+0001146430 00000 n
+0001146497 00000 n
+0001146564 00000 n
+0001146631 00000 n
+0001146698 00000 n
+0001146764 00000 n
+0001146831 00000 n
+0001146898 00000 n
+0001146965 00000 n
+0001147031 00000 n
+0001153294 00000 n
+0001149022 00000 n
+0001147262 00000 n
+0001149150 00000 n
+0001149216 00000 n
+0001149283 00000 n
+0001149350 00000 n
+0001149417 00000 n
+0001149484 00000 n
+0001149551 00000 n
+0001149618 00000 n
+0001149685 00000 n
+0001149752 00000 n
+0001149819 00000 n
+0001149885 00000 n
+0001149952 00000 n
+0001150019 00000 n
+0001150086 00000 n
+0001150153 00000 n
+0001150220 00000 n
+0001150287 00000 n
+0001150354 00000 n
+0001150421 00000 n
+0001150487 00000 n
+0001150554 00000 n
+0001150621 00000 n
+0001150688 00000 n
+0001150755 00000 n
+0001150822 00000 n
+0001150889 00000 n
+0001150956 00000 n
+0001151023 00000 n
+0001151089 00000 n
+0001151156 00000 n
+0001151223 00000 n
+0001151290 00000 n
+0001151357 00000 n
+0001151424 00000 n
+0001151491 00000 n
+0001151558 00000 n
+0001151625 00000 n
+0001151691 00000 n
+0001151758 00000 n
+0001151825 00000 n
+0001151892 00000 n
+0001151959 00000 n
+0001152026 00000 n
+0001152093 00000 n
+0001152160 00000 n
+0001152227 00000 n
+0001152294 00000 n
+0001152360 00000 n
+0001152427 00000 n
+0001152494 00000 n
+0001152561 00000 n
+0001152628 00000 n
+0001152695 00000 n
+0001152762 00000 n
+0001152829 00000 n
+0001152896 00000 n
+0001152961 00000 n
+0001153028 00000 n
+0001153095 00000 n
+0001153162 00000 n
+0001153228 00000 n
+0001159338 00000 n
+0001155136 00000 n
+0001153472 00000 n
+0001155264 00000 n
+0001155330 00000 n
+0001155397 00000 n
+0001155464 00000 n
+0001155531 00000 n
+0001155598 00000 n
+0001155729 00000 n
+0001155796 00000 n
+0001155863 00000 n
+0001155930 00000 n
+0001155997 00000 n
+0001156064 00000 n
+0001156131 00000 n
+0001156198 00000 n
+0001156264 00000 n
+0001156331 00000 n
+0001156398 00000 n
+0001156465 00000 n
+0001156532 00000 n
+0001156599 00000 n
+0001156666 00000 n
+0001156733 00000 n
+0001156800 00000 n
+0001156866 00000 n
+0001156933 00000 n
+0001157000 00000 n
+0001157067 00000 n
+0001157134 00000 n
+0001157201 00000 n
+0001157268 00000 n
+0001157335 00000 n
+0001157402 00000 n
+0001157467 00000 n
+0001157534 00000 n
+0001157601 00000 n
+0001157668 00000 n
+0001157735 00000 n
+0001157802 00000 n
+0001157869 00000 n
+0001157936 00000 n
+0001158003 00000 n
+0001158070 00000 n
+0001158136 00000 n
+0001158203 00000 n
+0001158270 00000 n
+0001158337 00000 n
+0001158404 00000 n
+0001158471 00000 n
+0001158538 00000 n
+0001158605 00000 n
+0001158672 00000 n
+0001158738 00000 n
+0001158805 00000 n
+0001158872 00000 n
+0001158939 00000 n
+0001159006 00000 n
+0001159073 00000 n
+0001159140 00000 n
+0001159207 00000 n
+0001159273 00000 n
+0001165523 00000 n
+0001161117 00000 n
+0001159503 00000 n
+0001161245 00000 n
+0001161311 00000 n
+0001161378 00000 n
+0001161445 00000 n
+0001161512 00000 n
+0001161579 00000 n
+0001161646 00000 n
+0001161713 00000 n
+0001161780 00000 n
+0001161847 00000 n
+0001161913 00000 n
+0001161980 00000 n
+0001162047 00000 n
+0001162114 00000 n
+0001162181 00000 n
+0001162248 00000 n
+0001162315 00000 n
+0001162382 00000 n
+0001162449 00000 n
+0001162516 00000 n
+0001162582 00000 n
+0001162649 00000 n
+0001162716 00000 n
+0001162783 00000 n
+0001162850 00000 n
+0001162917 00000 n
+0001162984 00000 n
+0001163051 00000 n
+0001163118 00000 n
+0001163184 00000 n
+0001163251 00000 n
+0001163318 00000 n
+0001163385 00000 n
+0001163452 00000 n
+0001163519 00000 n
+0001163586 00000 n
+0001163653 00000 n
+0001163720 00000 n
+0001163786 00000 n
+0001163853 00000 n
+0001163920 00000 n
+0001163987 00000 n
+0001164054 00000 n
+0001164121 00000 n
+0001164188 00000 n
+0001164255 00000 n
+0001164322 00000 n
+0001164387 00000 n
+0001164454 00000 n
+0001164521 00000 n
+0001164588 00000 n
+0001164655 00000 n
+0001164722 00000 n
+0001164789 00000 n
+0001164856 00000 n
+0001164923 00000 n
+0001164989 00000 n
+0001165056 00000 n
+0001165123 00000 n
+0001165190 00000 n
+0001165257 00000 n
+0001165324 00000 n
+0001165391 00000 n
+0001165457 00000 n
+0001171263 00000 n
+0001167797 00000 n
+0001165675 00000 n
+0001167925 00000 n
+0001167991 00000 n
+0001168058 00000 n
+0001168125 00000 n
+0001168192 00000 n
+0001168259 00000 n
+0001168326 00000 n
+0001168393 00000 n
+0001168460 00000 n
+0001168527 00000 n
+0001168593 00000 n
+0001168660 00000 n
+0001168727 00000 n
+0001168794 00000 n
+0001168861 00000 n
+0001168928 00000 n
+0001168995 00000 n
+0001169062 00000 n
+0001169129 00000 n
+0001169195 00000 n
+0001169262 00000 n
+0001169329 00000 n
+0001169396 00000 n
+0001169463 00000 n
+0001169530 00000 n
+0001169597 00000 n
+0001169664 00000 n
+0001169731 00000 n
+0001169796 00000 n
+0001169863 00000 n
+0001169930 00000 n
+0001169997 00000 n
+0001170064 00000 n
+0001170131 00000 n
+0001170198 00000 n
+0001170265 00000 n
+0001170332 00000 n
+0001170398 00000 n
+0001170465 00000 n
+0001170532 00000 n
+0001170599 00000 n
+0001170666 00000 n
+0001170733 00000 n
+0001170800 00000 n
+0001170931 00000 n
+0001170997 00000 n
+0001171064 00000 n
+0001171131 00000 n
+0001171197 00000 n
+0001177161 00000 n
+0001173223 00000 n
+0001171441 00000 n
+0001173351 00000 n
+0001173417 00000 n
+0001173484 00000 n
+0001173551 00000 n
+0001173618 00000 n
+0001173685 00000 n
+0001173752 00000 n
+0001173819 00000 n
+0001173886 00000 n
+0001173953 00000 n
+0001174019 00000 n
+0001174086 00000 n
+0001174153 00000 n
+0001174220 00000 n
+0001174287 00000 n
+0001174354 00000 n
+0001174421 00000 n
+0001174488 00000 n
+0001174555 00000 n
+0001174622 00000 n
+0001174688 00000 n
+0001174755 00000 n
+0001174822 00000 n
+0001174889 00000 n
+0001174956 00000 n
+0001175023 00000 n
+0001175090 00000 n
+0001175157 00000 n
+0001175224 00000 n
+0001175291 00000 n
+0001175358 00000 n
+0001175425 00000 n
+0001175492 00000 n
+0001175559 00000 n
+0001175626 00000 n
+0001175693 00000 n
+0001175759 00000 n
+0001175825 00000 n
+0001175892 00000 n
+0001175959 00000 n
+0001176026 00000 n
+0001176093 00000 n
+0001176160 00000 n
+0001176227 00000 n
+0001176294 00000 n
+0001176361 00000 n
+0001176428 00000 n
+0001176494 00000 n
+0001176561 00000 n
+0001176628 00000 n
+0001176695 00000 n
+0001176762 00000 n
+0001176829 00000 n
+0001176896 00000 n
+0001176963 00000 n
+0001177030 00000 n
+0001177096 00000 n
+0001182002 00000 n
+0001179272 00000 n
+0001177326 00000 n
+0001179400 00000 n
+0001179466 00000 n
+0001179533 00000 n
+0001179599 00000 n
+0001179666 00000 n
+0001179733 00000 n
+0001179800 00000 n
+0001179867 00000 n
+0001179934 00000 n
+0001180001 00000 n
+0001180132 00000 n
+0001180199 00000 n
+0001180266 00000 n
+0001180333 00000 n
+0001180400 00000 n
+0001180467 00000 n
+0001180534 00000 n
+0001180600 00000 n
+0001180667 00000 n
+0001180734 00000 n
+0001180801 00000 n
+0001180868 00000 n
+0001180935 00000 n
+0001181066 00000 n
+0001181133 00000 n
+0001181199 00000 n
+0001181266 00000 n
+0001181333 00000 n
+0001181400 00000 n
+0001181467 00000 n
+0001181534 00000 n
+0001181601 00000 n
+0001181668 00000 n
+0001181735 00000 n
+0001181802 00000 n
+0001181868 00000 n
+0001181935 00000 n
+0001188420 00000 n
+0001184351 00000 n
+0001182206 00000 n
+0001184479 00000 n
+0001184545 00000 n
+0001184612 00000 n
+0001184679 00000 n
+0001184742 00000 n
+0001184809 00000 n
+0001184876 00000 n
+0001184943 00000 n
+0001185010 00000 n
+0001185077 00000 n
+0001185144 00000 n
+0001185211 00000 n
+0001185278 00000 n
+0001185344 00000 n
+0001185411 00000 n
+0001185478 00000 n
+0001185545 00000 n
+0001185612 00000 n
+0001185679 00000 n
+0001185746 00000 n
+0001185813 00000 n
+0001185880 00000 n
+0001185947 00000 n
+0001186014 00000 n
+0001186081 00000 n
+0001186147 00000 n
+0001186214 00000 n
+0001186281 00000 n
+0001186348 00000 n
+0001186415 00000 n
+0001186482 00000 n
+0001186549 00000 n
+0001186616 00000 n
+0001186683 00000 n
+0001186750 00000 n
+0001186816 00000 n
+0001186883 00000 n
+0001186950 00000 n
+0001187017 00000 n
+0001187084 00000 n
+0001187151 00000 n
+0001187218 00000 n
+0001187285 00000 n
+0001187352 00000 n
+0001187419 00000 n
+0001187486 00000 n
+0001187553 00000 n
+0001187619 00000 n
+0001187686 00000 n
+0001187753 00000 n
+0001187820 00000 n
+0001187887 00000 n
+0001187954 00000 n
+0001188021 00000 n
+0001188088 00000 n
+0001188155 00000 n
+0001188222 00000 n
+0001188288 00000 n
+0001188354 00000 n
+0001194416 00000 n
+0001190277 00000 n
+0001188598 00000 n
+0001190406 00000 n
+0001190472 00000 n
+0001190539 00000 n
+0001190606 00000 n
+0001190673 00000 n
+0001190740 00000 n
+0001190807 00000 n
+0001190874 00000 n
+0001190941 00000 n
+0001191007 00000 n
+0001191074 00000 n
+0001191141 00000 n
+0001191208 00000 n
+0001191275 00000 n
+0001191342 00000 n
+0001191409 00000 n
+0001191476 00000 n
+0001191543 00000 n
+0001191610 00000 n
+0001191676 00000 n
+0001191743 00000 n
+0001191810 00000 n
+0001191877 00000 n
+0001191944 00000 n
+0001192011 00000 n
+0001192078 00000 n
+0001192145 00000 n
+0001192212 00000 n
+0001192279 00000 n
+0001192345 00000 n
+0001192411 00000 n
+0001192478 00000 n
+0001192545 00000 n
+0001192612 00000 n
+0001192679 00000 n
+0001192746 00000 n
+0001192813 00000 n
+0001192880 00000 n
+0001192947 00000 n
+0001193014 00000 n
+0001193081 00000 n
+0001193147 00000 n
+0001193213 00000 n
+0001193280 00000 n
+0001193347 00000 n
+0001193414 00000 n
+0001193481 00000 n
+0001193548 00000 n
+0001193615 00000 n
+0001193682 00000 n
+0001193749 00000 n
+0001193816 00000 n
+0001193882 00000 n
+0001193949 00000 n
+0001194016 00000 n
+0001194083 00000 n
+0001194150 00000 n
+0001194217 00000 n
+0001194284 00000 n
+0001194350 00000 n
+0001876767 00000 n
+0001200510 00000 n
+0001196300 00000 n
+0001194568 00000 n
+0001196429 00000 n
+0001196495 00000 n
+0001196562 00000 n
+0001196629 00000 n
+0001196696 00000 n
+0001196763 00000 n
+0001196830 00000 n
+0001196897 00000 n
+0001196964 00000 n
+0001197031 00000 n
+0001197098 00000 n
+0001197165 00000 n
+0001197232 00000 n
+0001197299 00000 n
+0001197366 00000 n
+0001197433 00000 n
+0001197500 00000 n
+0001197567 00000 n
+0001197634 00000 n
+0001197701 00000 n
+0001197768 00000 n
+0001197835 00000 n
+0001197902 00000 n
+0001197969 00000 n
+0001198036 00000 n
+0001198103 00000 n
+0001198170 00000 n
+0001198237 00000 n
+0001198304 00000 n
+0001198371 00000 n
+0001198438 00000 n
+0001198504 00000 n
+0001198571 00000 n
+0001198638 00000 n
+0001198705 00000 n
+0001198772 00000 n
+0001198839 00000 n
+0001198906 00000 n
+0001198973 00000 n
+0001199040 00000 n
+0001199107 00000 n
+0001199174 00000 n
+0001199241 00000 n
+0001199308 00000 n
+0001199375 00000 n
+0001199442 00000 n
+0001199509 00000 n
+0001199576 00000 n
+0001199643 00000 n
+0001199710 00000 n
+0001199777 00000 n
+0001199844 00000 n
+0001199910 00000 n
+0001199977 00000 n
+0001200044 00000 n
+0001200111 00000 n
+0001200178 00000 n
+0001200245 00000 n
+0001200311 00000 n
+0001200378 00000 n
+0001200444 00000 n
+0001206728 00000 n
+0001202455 00000 n
+0001200662 00000 n
+0001202584 00000 n
+0001202650 00000 n
+0001202717 00000 n
+0001202784 00000 n
+0001202851 00000 n
+0001202918 00000 n
+0001202985 00000 n
+0001203052 00000 n
+0001203119 00000 n
+0001203186 00000 n
+0001203252 00000 n
+0001203319 00000 n
+0001203386 00000 n
+0001203453 00000 n
+0001203520 00000 n
+0001203587 00000 n
+0001203654 00000 n
+0001203721 00000 n
+0001203788 00000 n
+0001203855 00000 n
+0001203921 00000 n
+0001203988 00000 n
+0001204055 00000 n
+0001204122 00000 n
+0001204189 00000 n
+0001204256 00000 n
+0001204323 00000 n
+0001204390 00000 n
+0001204457 00000 n
+0001204523 00000 n
+0001204590 00000 n
+0001204657 00000 n
+0001204724 00000 n
+0001204791 00000 n
+0001204858 00000 n
+0001204925 00000 n
+0001204992 00000 n
+0001205059 00000 n
+0001205126 00000 n
+0001205192 00000 n
+0001205259 00000 n
+0001205325 00000 n
+0001205392 00000 n
+0001205459 00000 n
+0001205526 00000 n
+0001205593 00000 n
+0001205660 00000 n
+0001205727 00000 n
+0001205794 00000 n
+0001205861 00000 n
+0001205928 00000 n
+0001205995 00000 n
+0001206061 00000 n
+0001206128 00000 n
+0001206195 00000 n
+0001206262 00000 n
+0001206329 00000 n
+0001206396 00000 n
+0001206463 00000 n
+0001206530 00000 n
+0001206597 00000 n
+0001206663 00000 n
+0001212998 00000 n
+0001208795 00000 n
+0001206880 00000 n
+0001208924 00000 n
+0001208990 00000 n
+0001209057 00000 n
+0001209124 00000 n
+0001209190 00000 n
+0001209257 00000 n
+0001209324 00000 n
+0001209391 00000 n
+0001209458 00000 n
+0001209525 00000 n
+0001209592 00000 n
+0001209659 00000 n
+0001209726 00000 n
+0001209793 00000 n
+0001209860 00000 n
+0001209927 00000 n
+0001209993 00000 n
+0001210060 00000 n
+0001210127 00000 n
+0001210193 00000 n
+0001210260 00000 n
+0001210327 00000 n
+0001210394 00000 n
+0001210461 00000 n
+0001210528 00000 n
+0001210595 00000 n
+0001210662 00000 n
+0001210729 00000 n
+0001210796 00000 n
+0001210863 00000 n
+0001210930 00000 n
+0001210997 00000 n
+0001211063 00000 n
+0001211130 00000 n
+0001211197 00000 n
+0001211263 00000 n
+0001211330 00000 n
+0001211397 00000 n
+0001211464 00000 n
+0001211531 00000 n
+0001211598 00000 n
+0001211665 00000 n
+0001211732 00000 n
+0001211799 00000 n
+0001211866 00000 n
+0001211933 00000 n
+0001212000 00000 n
+0001212065 00000 n
+0001212132 00000 n
+0001212199 00000 n
+0001212266 00000 n
+0001212331 00000 n
+0001212398 00000 n
+0001212465 00000 n
+0001212531 00000 n
+0001212598 00000 n
+0001212665 00000 n
+0001212732 00000 n
+0001212799 00000 n
+0001212866 00000 n
+0001212932 00000 n
+0001219282 00000 n
+0001215008 00000 n
+0001213150 00000 n
+0001215137 00000 n
+0001215203 00000 n
+0001215270 00000 n
+0001215337 00000 n
+0001215404 00000 n
+0001215471 00000 n
+0001215538 00000 n
+0001215605 00000 n
+0001215672 00000 n
+0001215739 00000 n
+0001215806 00000 n
+0001215873 00000 n
+0001215940 00000 n
+0001216007 00000 n
+0001216074 00000 n
+0001216139 00000 n
+0001216206 00000 n
+0001216273 00000 n
+0001216340 00000 n
+0001216407 00000 n
+0001216473 00000 n
+0001216540 00000 n
+0001216607 00000 n
+0001216674 00000 n
+0001216741 00000 n
+0001216808 00000 n
+0001216875 00000 n
+0001216942 00000 n
+0001217009 00000 n
+0001217075 00000 n
+0001217142 00000 n
+0001217209 00000 n
+0001217276 00000 n
+0001217343 00000 n
+0001217410 00000 n
+0001217477 00000 n
+0001217544 00000 n
+0001217611 00000 n
+0001217678 00000 n
+0001217745 00000 n
+0001217811 00000 n
+0001217878 00000 n
+0001217945 00000 n
+0001218012 00000 n
+0001218079 00000 n
+0001218145 00000 n
+0001218212 00000 n
+0001218279 00000 n
+0001218346 00000 n
+0001218413 00000 n
+0001218480 00000 n
+0001218547 00000 n
+0001218614 00000 n
+0001218681 00000 n
+0001218748 00000 n
+0001218815 00000 n
+0001218882 00000 n
+0001218949 00000 n
+0001219016 00000 n
+0001219083 00000 n
+0001219150 00000 n
+0001219216 00000 n
+0001225601 00000 n
+0001221327 00000 n
+0001219434 00000 n
+0001221456 00000 n
+0001221522 00000 n
+0001221589 00000 n
+0001221656 00000 n
+0001221723 00000 n
+0001221790 00000 n
+0001221856 00000 n
+0001221923 00000 n
+0001221990 00000 n
+0001222057 00000 n
+0001222124 00000 n
+0001222190 00000 n
+0001222257 00000 n
+0001222324 00000 n
+0001222391 00000 n
+0001222458 00000 n
+0001222525 00000 n
+0001222592 00000 n
+0001222659 00000 n
+0001222726 00000 n
+0001222793 00000 n
+0001222860 00000 n
+0001222927 00000 n
+0001222994 00000 n
+0001223061 00000 n
+0001223127 00000 n
+0001223194 00000 n
+0001223261 00000 n
+0001223328 00000 n
+0001223395 00000 n
+0001223462 00000 n
+0001223528 00000 n
+0001223595 00000 n
+0001223662 00000 n
+0001223729 00000 n
+0001223796 00000 n
+0001223863 00000 n
+0001223930 00000 n
+0001223997 00000 n
+0001224064 00000 n
+0001224131 00000 n
+0001224198 00000 n
+0001224265 00000 n
+0001224332 00000 n
+0001224399 00000 n
+0001224466 00000 n
+0001224533 00000 n
+0001224600 00000 n
+0001224667 00000 n
+0001224734 00000 n
+0001224800 00000 n
+0001224867 00000 n
+0001224934 00000 n
+0001225001 00000 n
+0001225068 00000 n
+0001225135 00000 n
+0001225201 00000 n
+0001225268 00000 n
+0001225335 00000 n
+0001225402 00000 n
+0001225469 00000 n
+0001225535 00000 n
+0001231674 00000 n
+0001227465 00000 n
+0001225753 00000 n
+0001227594 00000 n
+0001227660 00000 n
+0001227727 00000 n
+0001227794 00000 n
+0001227861 00000 n
+0001227928 00000 n
+0001227995 00000 n
+0001228062 00000 n
+0001228129 00000 n
+0001228196 00000 n
+0001228263 00000 n
+0001228330 00000 n
+0001228396 00000 n
+0001228463 00000 n
+0001228530 00000 n
+0001228597 00000 n
+0001228664 00000 n
+0001228731 00000 n
+0001228798 00000 n
+0001228865 00000 n
+0001228932 00000 n
+0001228999 00000 n
+0001229065 00000 n
+0001229132 00000 n
+0001229199 00000 n
+0001229266 00000 n
+0001229333 00000 n
+0001229400 00000 n
+0001229467 00000 n
+0001229534 00000 n
+0001229601 00000 n
+0001229668 00000 n
+0001229735 00000 n
+0001229802 00000 n
+0001229868 00000 n
+0001229935 00000 n
+0001230002 00000 n
+0001230069 00000 n
+0001230136 00000 n
+0001230203 00000 n
+0001230270 00000 n
+0001230337 00000 n
+0001230404 00000 n
+0001230471 00000 n
+0001230537 00000 n
+0001230604 00000 n
+0001230671 00000 n
+0001230738 00000 n
+0001230805 00000 n
+0001230872 00000 n
+0001230939 00000 n
+0001231006 00000 n
+0001231073 00000 n
+0001231140 00000 n
+0001231207 00000 n
+0001231274 00000 n
+0001231341 00000 n
+0001231408 00000 n
+0001231475 00000 n
+0001231542 00000 n
+0001231608 00000 n
+0001237711 00000 n
+0001233503 00000 n
+0001231826 00000 n
+0001233632 00000 n
+0001233698 00000 n
+0001233765 00000 n
+0001233832 00000 n
+0001233899 00000 n
+0001233966 00000 n
+0001234033 00000 n
+0001234100 00000 n
+0001234167 00000 n
+0001234234 00000 n
+0001234301 00000 n
+0001234367 00000 n
+0001234434 00000 n
+0001234501 00000 n
+0001234568 00000 n
+0001234635 00000 n
+0001234702 00000 n
+0001234769 00000 n
+0001234836 00000 n
+0001234903 00000 n
+0001234970 00000 n
+0001235036 00000 n
+0001235103 00000 n
+0001235170 00000 n
+0001235237 00000 n
+0001235304 00000 n
+0001235371 00000 n
+0001235438 00000 n
+0001235505 00000 n
+0001235572 00000 n
+0001235639 00000 n
+0001235706 00000 n
+0001235773 00000 n
+0001235839 00000 n
+0001235906 00000 n
+0001235973 00000 n
+0001236040 00000 n
+0001236107 00000 n
+0001236174 00000 n
+0001236241 00000 n
+0001236308 00000 n
+0001236375 00000 n
+0001236442 00000 n
+0001236508 00000 n
+0001236574 00000 n
+0001236641 00000 n
+0001236708 00000 n
+0001236775 00000 n
+0001236842 00000 n
+0001236909 00000 n
+0001236976 00000 n
+0001237043 00000 n
+0001237110 00000 n
+0001237177 00000 n
+0001237244 00000 n
+0001237311 00000 n
+0001237378 00000 n
+0001237445 00000 n
+0001237512 00000 n
+0001237579 00000 n
+0001237645 00000 n
+0001243937 00000 n
+0001239730 00000 n
+0001237863 00000 n
+0001239859 00000 n
+0001239925 00000 n
+0001239992 00000 n
+0001240059 00000 n
+0001240126 00000 n
+0001240193 00000 n
+0001240260 00000 n
+0001240327 00000 n
+0001240394 00000 n
+0001240461 00000 n
+0001240528 00000 n
+0001240594 00000 n
+0001240661 00000 n
+0001240728 00000 n
+0001240795 00000 n
+0001240862 00000 n
+0001240929 00000 n
+0001240996 00000 n
+0001241063 00000 n
+0001241130 00000 n
+0001241197 00000 n
+0001241263 00000 n
+0001241330 00000 n
+0001241397 00000 n
+0001241464 00000 n
+0001241531 00000 n
+0001241598 00000 n
+0001241665 00000 n
+0001241732 00000 n
+0001241799 00000 n
+0001241866 00000 n
+0001241933 00000 n
+0001242000 00000 n
+0001242066 00000 n
+0001242133 00000 n
+0001242200 00000 n
+0001242267 00000 n
+0001242334 00000 n
+0001242401 00000 n
+0001242468 00000 n
+0001242535 00000 n
+0001242602 00000 n
+0001242669 00000 n
+0001242736 00000 n
+0001242802 00000 n
+0001242869 00000 n
+0001242936 00000 n
+0001243003 00000 n
+0001243070 00000 n
+0001243137 00000 n
+0001243204 00000 n
+0001243271 00000 n
+0001243338 00000 n
+0001243405 00000 n
+0001243472 00000 n
+0001243539 00000 n
+0001243604 00000 n
+0001243671 00000 n
+0001243738 00000 n
+0001243805 00000 n
+0001243871 00000 n
+0001249990 00000 n
+0001245651 00000 n
+0001244089 00000 n
+0001245780 00000 n
+0001245846 00000 n
+0001245913 00000 n
+0001245980 00000 n
+0001246047 00000 n
+0001246114 00000 n
+0001246181 00000 n
+0001246248 00000 n
+0001246315 00000 n
+0001246382 00000 n
+0001246448 00000 n
+0001246514 00000 n
+0001246581 00000 n
+0001246648 00000 n
+0001246715 00000 n
+0001246782 00000 n
+0001246849 00000 n
+0001246916 00000 n
+0001246983 00000 n
+0001247050 00000 n
+0001247116 00000 n
+0001247183 00000 n
+0001247250 00000 n
+0001247317 00000 n
+0001247384 00000 n
+0001247451 00000 n
+0001247518 00000 n
+0001247585 00000 n
+0001247652 00000 n
+0001247719 00000 n
+0001247785 00000 n
+0001247852 00000 n
+0001247919 00000 n
+0001247986 00000 n
+0001248053 00000 n
+0001248120 00000 n
+0001248187 00000 n
+0001248254 00000 n
+0001248321 00000 n
+0001248388 00000 n
+0001248455 00000 n
+0001248521 00000 n
+0001248588 00000 n
+0001248655 00000 n
+0001248722 00000 n
+0001248789 00000 n
+0001248856 00000 n
+0001248923 00000 n
+0001248990 00000 n
+0001249057 00000 n
+0001249123 00000 n
+0001249189 00000 n
+0001249256 00000 n
+0001249323 00000 n
+0001249390 00000 n
+0001249457 00000 n
+0001249524 00000 n
+0001249591 00000 n
+0001249658 00000 n
+0001249725 00000 n
+0001249791 00000 n
+0001249858 00000 n
+0001249924 00000 n
+0001256062 00000 n
+0001251654 00000 n
+0001250142 00000 n
+0001251783 00000 n
+0001251849 00000 n
+0001251916 00000 n
+0001251983 00000 n
+0001252050 00000 n
+0001252117 00000 n
+0001252184 00000 n
+0001252251 00000 n
+0001252318 00000 n
+0001252385 00000 n
+0001252451 00000 n
+0001252518 00000 n
+0001252585 00000 n
+0001252652 00000 n
+0001252719 00000 n
+0001252786 00000 n
+0001252853 00000 n
+0001252920 00000 n
+0001252987 00000 n
+0001253053 00000 n
+0001253120 00000 n
+0001253187 00000 n
+0001253254 00000 n
+0001253321 00000 n
+0001253388 00000 n
+0001253455 00000 n
+0001253522 00000 n
+0001253589 00000 n
+0001253656 00000 n
+0001253722 00000 n
+0001253789 00000 n
+0001253856 00000 n
+0001253923 00000 n
+0001253990 00000 n
+0001254057 00000 n
+0001254124 00000 n
+0001254191 00000 n
+0001254258 00000 n
+0001254324 00000 n
+0001254391 00000 n
+0001254458 00000 n
+0001254525 00000 n
+0001254592 00000 n
+0001254659 00000 n
+0001254726 00000 n
+0001254793 00000 n
+0001254860 00000 n
+0001254927 00000 n
+0001254993 00000 n
+0001255060 00000 n
+0001255127 00000 n
+0001255194 00000 n
+0001255261 00000 n
+0001255328 00000 n
+0001255395 00000 n
+0001255462 00000 n
+0001255529 00000 n
+0001255595 00000 n
+0001255662 00000 n
+0001255729 00000 n
+0001255796 00000 n
+0001255863 00000 n
+0001255930 00000 n
+0001255996 00000 n
+0001876943 00000 n
+0001262207 00000 n
+0001257935 00000 n
+0001256214 00000 n
+0001258064 00000 n
+0001258130 00000 n
+0001258197 00000 n
+0001258264 00000 n
+0001258331 00000 n
+0001258398 00000 n
+0001258465 00000 n
+0001258532 00000 n
+0001258599 00000 n
+0001258666 00000 n
+0001258732 00000 n
+0001258799 00000 n
+0001258866 00000 n
+0001258933 00000 n
+0001259000 00000 n
+0001259067 00000 n
+0001259134 00000 n
+0001259201 00000 n
+0001259268 00000 n
+0001259334 00000 n
+0001259401 00000 n
+0001259468 00000 n
+0001259535 00000 n
+0001259602 00000 n
+0001259669 00000 n
+0001259736 00000 n
+0001259803 00000 n
+0001259870 00000 n
+0001259935 00000 n
+0001260002 00000 n
+0001260069 00000 n
+0001260136 00000 n
+0001260203 00000 n
+0001260270 00000 n
+0001260337 00000 n
+0001260404 00000 n
+0001260471 00000 n
+0001260537 00000 n
+0001260604 00000 n
+0001260671 00000 n
+0001260738 00000 n
+0001260805 00000 n
+0001260872 00000 n
+0001260939 00000 n
+0001261006 00000 n
+0001261073 00000 n
+0001261139 00000 n
+0001261206 00000 n
+0001261273 00000 n
+0001261340 00000 n
+0001261407 00000 n
+0001261474 00000 n
+0001261541 00000 n
+0001261608 00000 n
+0001261675 00000 n
+0001261742 00000 n
+0001261809 00000 n
+0001261874 00000 n
+0001261941 00000 n
+0001262008 00000 n
+0001262075 00000 n
+0001262141 00000 n
+0001268359 00000 n
+0001264086 00000 n
+0001262372 00000 n
+0001264215 00000 n
+0001264281 00000 n
+0001264348 00000 n
+0001264415 00000 n
+0001264482 00000 n
+0001264549 00000 n
+0001264616 00000 n
+0001264683 00000 n
+0001264750 00000 n
+0001264817 00000 n
+0001264883 00000 n
+0001264950 00000 n
+0001265017 00000 n
+0001265084 00000 n
+0001265151 00000 n
+0001265218 00000 n
+0001265285 00000 n
+0001265352 00000 n
+0001265419 00000 n
+0001265485 00000 n
+0001265552 00000 n
+0001265619 00000 n
+0001265686 00000 n
+0001265753 00000 n
+0001265820 00000 n
+0001265887 00000 n
+0001265954 00000 n
+0001266021 00000 n
+0001266086 00000 n
+0001266153 00000 n
+0001266220 00000 n
+0001266287 00000 n
+0001266354 00000 n
+0001266421 00000 n
+0001266488 00000 n
+0001266555 00000 n
+0001266622 00000 n
+0001266688 00000 n
+0001266755 00000 n
+0001266822 00000 n
+0001266889 00000 n
+0001266956 00000 n
+0001267023 00000 n
+0001267090 00000 n
+0001267157 00000 n
+0001267224 00000 n
+0001267290 00000 n
+0001267357 00000 n
+0001267424 00000 n
+0001267491 00000 n
+0001267558 00000 n
+0001267625 00000 n
+0001267692 00000 n
+0001267759 00000 n
+0001267826 00000 n
+0001267893 00000 n
+0001267959 00000 n
+0001268026 00000 n
+0001268093 00000 n
+0001268160 00000 n
+0001268227 00000 n
+0001268293 00000 n
+0001274426 00000 n
+0001270019 00000 n
+0001268524 00000 n
+0001270148 00000 n
+0001270214 00000 n
+0001270281 00000 n
+0001270348 00000 n
+0001270415 00000 n
+0001270482 00000 n
+0001270549 00000 n
+0001270616 00000 n
+0001270683 00000 n
+0001270750 00000 n
+0001270816 00000 n
+0001270883 00000 n
+0001270950 00000 n
+0001271017 00000 n
+0001271084 00000 n
+0001271151 00000 n
+0001271218 00000 n
+0001271285 00000 n
+0001271352 00000 n
+0001271418 00000 n
+0001271485 00000 n
+0001271552 00000 n
+0001271619 00000 n
+0001271686 00000 n
+0001271753 00000 n
+0001271820 00000 n
+0001271887 00000 n
+0001271954 00000 n
+0001272019 00000 n
+0001272086 00000 n
+0001272153 00000 n
+0001272220 00000 n
+0001272287 00000 n
+0001272354 00000 n
+0001272421 00000 n
+0001272488 00000 n
+0001272555 00000 n
+0001272621 00000 n
+0001272688 00000 n
+0001272755 00000 n
+0001272822 00000 n
+0001272889 00000 n
+0001272956 00000 n
+0001273023 00000 n
+0001273090 00000 n
+0001273157 00000 n
+0001273224 00000 n
+0001273291 00000 n
+0001273358 00000 n
+0001273425 00000 n
+0001273492 00000 n
+0001273559 00000 n
+0001273626 00000 n
+0001273693 00000 n
+0001273759 00000 n
+0001273826 00000 n
+0001273893 00000 n
+0001273960 00000 n
+0001274027 00000 n
+0001274094 00000 n
+0001274161 00000 n
+0001274228 00000 n
+0001274295 00000 n
+0001274360 00000 n
+0001280759 00000 n
+0001276353 00000 n
+0001274578 00000 n
+0001276482 00000 n
+0001276548 00000 n
+0001276615 00000 n
+0001276682 00000 n
+0001276749 00000 n
+0001276816 00000 n
+0001276883 00000 n
+0001276950 00000 n
+0001277017 00000 n
+0001277084 00000 n
+0001277150 00000 n
+0001277217 00000 n
+0001277284 00000 n
+0001277351 00000 n
+0001277418 00000 n
+0001277485 00000 n
+0001277552 00000 n
+0001277619 00000 n
+0001277686 00000 n
+0001277752 00000 n
+0001277819 00000 n
+0001277886 00000 n
+0001277953 00000 n
+0001278020 00000 n
+0001278087 00000 n
+0001278154 00000 n
+0001278221 00000 n
+0001278288 00000 n
+0001278353 00000 n
+0001278420 00000 n
+0001278487 00000 n
+0001278554 00000 n
+0001278621 00000 n
+0001278688 00000 n
+0001278755 00000 n
+0001278822 00000 n
+0001278889 00000 n
+0001278955 00000 n
+0001279022 00000 n
+0001279089 00000 n
+0001279156 00000 n
+0001279223 00000 n
+0001279290 00000 n
+0001279357 00000 n
+0001279424 00000 n
+0001279491 00000 n
+0001279558 00000 n
+0001279623 00000 n
+0001279690 00000 n
+0001279757 00000 n
+0001279824 00000 n
+0001279891 00000 n
+0001279958 00000 n
+0001280025 00000 n
+0001280092 00000 n
+0001280159 00000 n
+0001280225 00000 n
+0001280292 00000 n
+0001280359 00000 n
+0001280426 00000 n
+0001280493 00000 n
+0001280560 00000 n
+0001280627 00000 n
+0001280693 00000 n
+0001282729 00000 n
+0001281530 00000 n
+0001280911 00000 n
+0001281659 00000 n
+0001281725 00000 n
+0001281792 00000 n
+0001281859 00000 n
+0001281926 00000 n
+0001281993 00000 n
+0001282060 00000 n
+0001282127 00000 n
+0001282194 00000 n
+0001282261 00000 n
+0001282328 00000 n
+0001282395 00000 n
+0001282461 00000 n
+0001282528 00000 n
+0001282595 00000 n
+0001282662 00000 n
+0001284658 00000 n
+0001284814 00000 n
+0001284971 00000 n
+0001285128 00000 n
+0001285284 00000 n
+0001285441 00000 n
+0001285598 00000 n
+0001285755 00000 n
+0001285912 00000 n
+0001286069 00000 n
+0001286227 00000 n
+0001286385 00000 n
+0001286543 00000 n
+0001286699 00000 n
+0001286856 00000 n
+0001287014 00000 n
+0001287172 00000 n
+0001287330 00000 n
+0001287488 00000 n
+0001287646 00000 n
+0001287804 00000 n
+0001287961 00000 n
+0001288118 00000 n
+0001288275 00000 n
+0001288432 00000 n
+0001288590 00000 n
+0001288748 00000 n
+0001288906 00000 n
+0001289064 00000 n
+0001289222 00000 n
+0001290511 00000 n
+0001289507 00000 n
+0001284188 00000 n
+0001282881 00000 n
+0001289377 00000 n
+0001284335 00000 n
+0001290669 00000 n
+0001290827 00000 n
+0001290985 00000 n
+0001291143 00000 n
+0001291301 00000 n
+0001291459 00000 n
+0001291615 00000 n
+0001291773 00000 n
+0001291931 00000 n
+0001292155 00000 n
+0001290241 00000 n
+0001289659 00000 n
+0001292089 00000 n
+0001290388 00000 n
+0001867184 00000 n
+0001292421 00000 n
+0001867004 00000 n
+0001292455 00000 n
+0001866349 00000 n
+0001292537 00000 n
+0001867391 00000 n
+0001292635 00000 n
+0001867308 00000 n
+0001292669 00000 n
+0001292697 00000 n
+0001293043 00000 n
+0001867517 00000 n
+0001293481 00000 n
+0001293509 00000 n
+0001293699 00000 n
+0001293855 00000 n
+0001293947 00000 n
+0001294029 00000 n
+0001294111 00000 n
+0001294435 00000 n
+0001294705 00000 n
+0001295149 00000 n
+0001295177 00000 n
+0001295421 00000 n
+0001295845 00000 n
+0001296217 00000 n
+0001296537 00000 n
+0001297069 00000 n
+0001297463 00000 n
+0001297511 00000 n
+0001297617 00000 n
+0001297901 00000 n
+0001298055 00000 n
+0001298285 00000 n
+0001298513 00000 n
+0001298549 00000 n
+0001298655 00000 n
+0001330689 00000 n
+0001298791 00000 n
+0001361175 00000 n
+0001331193 00000 n
+0001384336 00000 n
+0001361658 00000 n
+0001405370 00000 n
+0001384590 00000 n
+0001408856 00000 n
+0001405631 00000 n
+0001414653 00000 n
+0001409212 00000 n
+0001418031 00000 n
+0001414942 00000 n
+0001454768 00000 n
+0001418276 00000 n
+0001477532 00000 n
+0001455452 00000 n
+0001500922 00000 n
+0001477833 00000 n
+0001523797 00000 n
+0001501194 00000 n
+0001546385 00000 n
+0001524092 00000 n
+0001577287 00000 n
+0001546680 00000 n
+0001603474 00000 n
+0001577768 00000 n
+0001622064 00000 n
+0001603831 00000 n
+0001630253 00000 n
+0001622412 00000 n
+0001658694 00000 n
+0001630498 00000 n
+0001678132 00000 n
+0001659028 00000 n
+0001692753 00000 n
+0001678475 00000 n
+0001707397 00000 n
+0001693015 00000 n
+0001721225 00000 n
+0001707718 00000 n
+0001724427 00000 n
+0001721486 00000 n
+0001727191 00000 n
+0001724690 00000 n
+0001730197 00000 n
+0001727445 00000 n
+0001763015 00000 n
+0001730445 00000 n
+0001783399 00000 n
+0001763682 00000 n
+0001808614 00000 n
+0001783681 00000 n
+0001841351 00000 n
+0001809047 00000 n
+0001866067 00000 n
+0001842101 00000 n
+0001877098 00000 n
+0001877262 00000 n
+0001877429 00000 n
+0001877534 00000 n
+0001877624 00000 n
+0001881445 00000 n
+0001882166 00000 n
+0001882902 00000 n
+0001883638 00000 n
+0001884370 00000 n
+0001885105 00000 n
+0001885843 00000 n
+0001886578 00000 n
+0001887310 00000 n
+0001888046 00000 n
+0001888782 00000 n
+0001889514 00000 n
+0001890195 00000 n
+0001890865 00000 n
+0001891532 00000 n
+0001892202 00000 n
+0001892872 00000 n
+0001893539 00000 n
+0001894208 00000 n
+0001894880 00000 n
+0001895549 00000 n
+0001896216 00000 n
+0001896886 00000 n
+0001897556 00000 n
+0001898223 00000 n
+0001898893 00000 n
+0001899563 00000 n
+0001900232 00000 n
+0001900901 00000 n
+0001901571 00000 n
+0001902241 00000 n
+0001902908 00000 n
+0001903578 00000 n
+0001904248 00000 n
+0001904918 00000 n
+0001905584 00000 n
+0001906256 00000 n
+0001906925 00000 n
+0001907592 00000 n
+0001908262 00000 n
+0001908932 00000 n
+0001909602 00000 n
+0001910269 00000 n
+0001910939 00000 n
+0001911608 00000 n
+0001912273 00000 n
+0001912943 00000 n
+0001913613 00000 n
+0001914283 00000 n
+0001914950 00000 n
+0001915620 00000 n
+0001916290 00000 n
+0001916959 00000 n
+0001917628 00000 n
+0001918298 00000 n
+0001918968 00000 n
+0001919635 00000 n
+0001920305 00000 n
+0001920975 00000 n
+0001921642 00000 n
+0001922311 00000 n
+0001922983 00000 n
+0001923652 00000 n
+0001924319 00000 n
+0001924989 00000 n
+0001925659 00000 n
+0001926326 00000 n
+0001926996 00000 n
+0001927666 00000 n
+0001928333 00000 n
+0001929002 00000 n
+0001929672 00000 n
+0001930342 00000 n
+0001931009 00000 n
+0001931679 00000 n
+0001932349 00000 n
+0001933016 00000 n
+0001933685 00000 n
+0001934357 00000 n
+0001935026 00000 n
+0001935689 00000 n
+0001936359 00000 n
+0001937029 00000 n
+0001937696 00000 n
+0001938366 00000 n
+0001939035 00000 n
+0001939707 00000 n
+0001940373 00000 n
+0001941043 00000 n
+0001941713 00000 n
+0001942380 00000 n
+0001943050 00000 n
+0001943720 00000 n
+0001944390 00000 n
+0001945059 00000 n
+0001945728 00000 n
+0001946398 00000 n
+0001947065 00000 n
+0001947735 00000 n
+0001948405 00000 n
+0001949075 00000 n
+0001949742 00000 n
+0001950411 00000 n
+0001951083 00000 n
+0001951749 00000 n
+0001952419 00000 n
+0001953089 00000 n
+0001953759 00000 n
+0001954426 00000 n
+0001955096 00000 n
+0001955766 00000 n
+0001956435 00000 n
+0001957104 00000 n
+0001957774 00000 n
+0001958444 00000 n
+0001959107 00000 n
+0001959777 00000 n
+0001960447 00000 n
+0001961113 00000 n
+0001961785 00000 n
+0001962454 00000 n
+0001963124 00000 n
+0001963791 00000 n
+0001964461 00000 n
+0001965131 00000 n
+0001965798 00000 n
+0001966468 00000 n
+0001967137 00000 n
+0001967809 00000 n
+0001968474 00000 n
+0001969144 00000 n
+0001969814 00000 n
+0001970481 00000 n
+0001971151 00000 n
+0001971821 00000 n
+0001972487 00000 n
+0001973159 00000 n
+0001973828 00000 n
+0001974498 00000 n
+0001975165 00000 n
+0001975835 00000 n
+0001976505 00000 n
+0001977172 00000 n
+0001977842 00000 n
+0001978511 00000 n
+0001979183 00000 n
+0001979849 00000 n
+0001980519 00000 n
+0001981189 00000 n
+0001981852 00000 n
+0001982522 00000 n
+0001983192 00000 n
+0001983861 00000 n
+0001984530 00000 n
+0001985200 00000 n
+0001985870 00000 n
+0001986537 00000 n
+0001987207 00000 n
+0001987877 00000 n
+0001988547 00000 n
+0001989213 00000 n
+0001989885 00000 n
+0001990554 00000 n
+0001991221 00000 n
+0001991891 00000 n
+0001992561 00000 n
+0001993231 00000 n
+0001993898 00000 n
+0001994568 00000 n
+0001995237 00000 n
+0001995906 00000 n
+0001996576 00000 n
+0001997246 00000 n
+0001997916 00000 n
+0001998583 00000 n
+0001999253 00000 n
+0001999923 00000 n
+0002000589 00000 n
+0002001261 00000 n
+0002001930 00000 n
+0002002600 00000 n
+0002003267 00000 n
+0002003937 00000 n
+0002004607 00000 n
+0002005270 00000 n
+0002005939 00000 n
+0002006611 00000 n
+0002007280 00000 n
+0002007947 00000 n
+0002008617 00000 n
+0002009287 00000 n
+0002009954 00000 n
+0002010624 00000 n
+0002011294 00000 n
+0002011961 00000 n
+0002012630 00000 n
+0002013300 00000 n
+0002013970 00000 n
+0002014637 00000 n
+0002015307 00000 n
+0002015977 00000 n
+0002016644 00000 n
+0002017313 00000 n
+0002017985 00000 n
+0002018654 00000 n
+0002019321 00000 n
+0002019991 00000 n
+0002020661 00000 n
+0002021328 00000 n
+0002021998 00000 n
+0002022668 00000 n
+0002023337 00000 n
+0002024006 00000 n
+0002024676 00000 n
+0002025346 00000 n
+0002026013 00000 n
+0002026684 00000 n
+0002027357 00000 n
+0002028030 00000 n
+0002028697 00000 n
+0002029369 00000 n
+0002030042 00000 n
+0002030712 00000 n
+0002031385 00000 n
+0002032058 00000 n
+0002032731 00000 n
+0002033401 00000 n
+0002034073 00000 n
+0002034747 00000 n
+0002035416 00000 n
+0002036089 00000 n
+0002036762 00000 n
+0002037435 00000 n
+0002038105 00000 n
+0002038778 00000 n
+0002039451 00000 n
+0002040122 00000 n
+0002040794 00000 n
+0002041467 00000 n
+0002042140 00000 n
+0002042810 00000 n
+0002043483 00000 n
+0002044156 00000 n
+0002044826 00000 n
+0002045498 00000 n
+0002046172 00000 n
+0002046844 00000 n
+0002047514 00000 n
+0002048187 00000 n
+0002048860 00000 n
+0002049530 00000 n
+0002050203 00000 n
+0002050876 00000 n
+0002051543 00000 n
+0002052211 00000 n
+0002052884 00000 n
+0002053557 00000 n
+0002054227 00000 n
+0002054900 00000 n
+0002055573 00000 n
+0002056242 00000 n
+0002056916 00000 n
+0002057588 00000 n
+0002058261 00000 n
+0002058931 00000 n
+0002059604 00000 n
+0002060277 00000 n
+0002060947 00000 n
+0002061620 00000 n
+0002062292 00000 n
+0002062966 00000 n
+0002063635 00000 n
+0002064308 00000 n
+0002064981 00000 n
+0002065651 00000 n
+0002066324 00000 n
+0002066997 00000 n
+0002067670 00000 n
+0002068341 00000 n
+0002069013 00000 n
+0002069686 00000 n
+0002070356 00000 n
+0002071029 00000 n
+0002071702 00000 n
+0002072375 00000 n
+0002073045 00000 n
+0002073742 00000 n
+0002074446 00000 n
+0002075138 00000 n
+0002075840 00000 n
+0002076542 00000 n
+0002077244 00000 n
+0002077942 00000 n
+0002078644 00000 n
+0002079345 00000 n
+0002080045 00000 n
+0002080747 00000 n
+0002081449 00000 n
+0002082151 00000 n
+0002082849 00000 n
+0002083551 00000 n
+0002084253 00000 n
+0002084950 00000 n
+0002085654 00000 n
+0002086355 00000 n
+0002087057 00000 n
+0002087755 00000 n
+0002088457 00000 n
+0002089159 00000 n
+0002089857 00000 n
+0002090559 00000 n
+0002091260 00000 n
+0002091964 00000 n
+0002092660 00000 n
+0002093362 00000 n
+0002094064 00000 n
+0002094762 00000 n
+0002095464 00000 n
+0002096166 00000 n
+0002096863 00000 n
+0002097567 00000 n
+0002098268 00000 n
+0002098970 00000 n
+0002099716 00000 n
+0002100420 00000 n
+0002101124 00000 n
+0002101827 00000 n
+0002102546 00000 n
+0002103236 00000 n
+0002103906 00000 n
+0002104583 00000 n
+0002105377 00000 n
+0002105614 00000 n
+0002106003 00000 n
+0002106390 00000 n
+0002106777 00000 n
+0002107164 00000 n
+0002107548 00000 n
+0002107935 00000 n
+0002108322 00000 n
+0002108709 00000 n
+0002109096 00000 n
+0002109483 00000 n
+0002109668 00000 n
+0002109846 00000 n
+0002109888 00000 n
+0002110024 00000 n
+trailer
+<< /Size 11988 /Root 11986 0 R /Info 11987 0 R /ID [ <A7191B516F8EAA4F33A643097ACF5C36> <A7191B516F8EAA4F33A643097ACF5C36> ] >>
+startxref
+2110658
+%%EOF
diff --git a/macros/latex/contrib/nicematrix/nicematrix-french.pdf b/macros/latex/contrib/nicematrix/nicematrix-french.pdf
index f5ec63ad3a..ff51f1829e 100644
--- a/macros/latex/contrib/nicematrix/nicematrix-french.pdf
+++ b/macros/latex/contrib/nicematrix/nicematrix-french.pdf
@@ -71,617 +71,623 @@ endobj
endobj
44 0 obj
-<< /S /GoTo /D (section.5) >>
+<< /S /GoTo /D (subsection.4.7) >>
endobj
47 0 obj
-(\376\377\000L\000e\000s\000\040\000f\000i\000l\000e\000t\000s\000\040\000h\000o\000r\000i\000z\000o\000n\000t\000a\000u\000x\000\040\000e\000t\000\040\000v\000e\000r\000t\000i\000c\000a\000u\000x)
+(\376\377\000\134\000\134\000\040\000e\000t\000\040\000\046\000\040\000d\000a\000n\000s\000\040\000l\000e\000s\000\040\000b\000l\000o\000c\000s)
endobj
48 0 obj
-<< /S /GoTo /D (subsection.5.1) >>
+<< /S /GoTo /D (section.5) >>
endobj
51 0 obj
-(\376\377\000Q\000u\000e\000l\000q\000u\000e\000s\000\040\000d\000i\000f\000f\000\351\000r\000e\000n\000c\000e\000s\000\040\000a\000v\000e\000c\000\040\000l\000e\000s\000\040\000e\000n\000v\000i\000r\000o\000n\000n\000e\000m\000e\000n\000t\000s\000\040\000c\000l\000a\000s\000s\000i\000q\000u\000e\000s)
+(\376\377\000L\000e\000s\000\040\000f\000i\000l\000e\000t\000s\000\040\000h\000o\000r\000i\000z\000o\000n\000t\000a\000u\000x\000\040\000e\000t\000\040\000v\000e\000r\000t\000i\000c\000a\000u\000x)
endobj
52 0 obj
-<< /S /GoTo /D (subsubsection.5.1.1) >>
+<< /S /GoTo /D (subsection.5.1) >>
endobj
55 0 obj
-(\376\377\000L\000e\000s\000\040\000f\000i\000l\000e\000t\000s\000\040\000v\000e\000r\000t\000i\000c\000a\000u\000x)
+(\376\377\000Q\000u\000e\000l\000q\000u\000e\000s\000\040\000d\000i\000f\000f\000\351\000r\000e\000n\000c\000e\000s\000\040\000a\000v\000e\000c\000\040\000l\000e\000s\000\040\000e\000n\000v\000i\000r\000o\000n\000n\000e\000m\000e\000n\000t\000s\000\040\000c\000l\000a\000s\000s\000i\000q\000u\000e\000s)
endobj
56 0 obj
-<< /S /GoTo /D (subsubsection.5.1.2) >>
+<< /S /GoTo /D (subsubsection.5.1.1) >>
endobj
59 0 obj
-(\376\377\000L\000a\000\040\000c\000o\000m\000m\000a\000n\000d\000e\000\040\000\134\000c\000l\000i\000n\000e)
+(\376\377\000L\000e\000s\000\040\000f\000i\000l\000e\000t\000s\000\040\000v\000e\000r\000t\000i\000c\000a\000u\000x)
endobj
60 0 obj
-<< /S /GoTo /D (subsection.5.2) >>
+<< /S /GoTo /D (subsubsection.5.1.2) >>
endobj
63 0 obj
-(\376\377\000L\000'\000\351\000p\000a\000i\000s\000s\000e\000u\000r\000\040\000e\000t\000\040\000l\000a\000\040\000c\000o\000u\000l\000e\000u\000r\000\040\000d\000e\000s\000\040\000f\000i\000l\000e\000t\000s)
+(\376\377\000L\000a\000\040\000c\000o\000m\000m\000a\000n\000d\000e\000\040\000\134\000c\000l\000i\000n\000e)
endobj
64 0 obj
-<< /S /GoTo /D (subsection.5.3) >>
+<< /S /GoTo /D (subsection.5.2) >>
endobj
67 0 obj
-(\376\377\000L\000e\000s\000\040\000o\000u\000t\000i\000l\000s\000\040\000d\000e\000\040\000n\000i\000c\000e\000m\000a\000t\000r\000i\000x\000\040\000p\000o\000u\000r\000\040\000t\000r\000a\000c\000e\000r\000\040\000d\000e\000s\000\040\000f\000i\000l\000e\000t\000s)
+(\376\377\000L\000'\000\351\000p\000a\000i\000s\000s\000e\000u\000r\000\040\000e\000t\000\040\000l\000a\000\040\000c\000o\000u\000l\000e\000u\000r\000\040\000d\000e\000s\000\040\000f\000i\000l\000e\000t\000s)
endobj
68 0 obj
-<< /S /GoTo /D (subsubsection.5.3.1) >>
+<< /S /GoTo /D (subsection.5.3) >>
endobj
71 0 obj
-(\376\377\000L\000e\000s\000\040\000c\000l\000\351\000s\000\040\000h\000l\000i\000n\000e\000s\000\040\000e\000t\000\040\000v\000l\000i\000n\000e\000s)
+(\376\377\000L\000e\000s\000\040\000o\000u\000t\000i\000l\000s\000\040\000d\000e\000\040\000n\000i\000c\000e\000m\000a\000t\000r\000i\000x\000\040\000p\000o\000u\000r\000\040\000t\000r\000a\000c\000e\000r\000\040\000d\000e\000s\000\040\000f\000i\000l\000e\000t\000s)
endobj
72 0 obj
-<< /S /GoTo /D (subsubsection.5.3.2) >>
+<< /S /GoTo /D (subsubsection.5.3.1) >>
endobj
75 0 obj
-(\376\377\000L\000e\000s\000\040\000c\000l\000\351\000s\000\040\000h\000v\000l\000i\000n\000e\000s\000\040\000e\000t\000\040\000h\000v\000l\000i\000n\000e\000s\000-\000e\000x\000c\000e\000p\000t\000-\000b\000o\000r\000d\000e\000r\000s)
+(\376\377\000L\000e\000s\000\040\000c\000l\000\351\000s\000\040\000h\000l\000i\000n\000e\000s\000\040\000e\000t\000\040\000v\000l\000i\000n\000e\000s)
endobj
76 0 obj
-<< /S /GoTo /D (subsubsection.5.3.3) >>
+<< /S /GoTo /D (subsubsection.5.3.2) >>
endobj
79 0 obj
-(\376\377\000L\000e\000s\000\040\000c\000o\000i\000n\000s\000\040\000\050\000v\000i\000d\000e\000s\000\051)
+(\376\377\000L\000e\000s\000\040\000c\000l\000\351\000s\000\040\000h\000v\000l\000i\000n\000e\000s\000\040\000e\000t\000\040\000h\000v\000l\000i\000n\000e\000s\000-\000e\000x\000c\000e\000p\000t\000-\000b\000o\000r\000d\000e\000r\000s)
endobj
80 0 obj
-<< /S /GoTo /D (subsubsection.5.3.4) >>
+<< /S /GoTo /D (subsubsection.5.3.3) >>
endobj
83 0 obj
-(\376\377\000L\000a\000\040\000c\000o\000m\000m\000a\000n\000d\000e\000\040\000\134\000d\000i\000a\000g\000b\000o\000x)
+(\376\377\000L\000e\000s\000\040\000c\000o\000i\000n\000s\000\040\000\050\000v\000i\000d\000e\000s\000\051)
endobj
84 0 obj
-<< /S /GoTo /D (subsubsection.5.3.5) >>
+<< /S /GoTo /D (subsubsection.5.3.4) >>
endobj
87 0 obj
-(\376\377\000C\000o\000m\000m\000a\000n\000d\000e\000s\000\040\000p\000o\000u\000r\000\040\000f\000i\000l\000e\000t\000s\000\040\000p\000e\000r\000s\000o\000n\000n\000a\000l\000i\000s\000\351\000s)
+(\376\377\000L\000a\000\040\000c\000o\000m\000m\000a\000n\000d\000e\000\040\000\134\000d\000i\000a\000g\000b\000o\000x)
endobj
88 0 obj
-<< /S /GoTo /D (section.6) >>
+<< /S /GoTo /D (subsubsection.5.3.5) >>
endobj
91 0 obj
-(\376\377\000L\000e\000s\000\040\000c\000o\000u\000l\000e\000u\000r\000s\000\040\000d\000e\000\040\000f\000o\000n\000d\000\040\000d\000e\000s\000\040\000r\000a\000n\000g\000\351\000e\000s\000\040\000e\000t\000\040\000d\000e\000s\000\040\000c\000o\000l\000o\000n\000n\000e\000s)
+(\376\377\000C\000o\000m\000m\000a\000n\000d\000e\000s\000\040\000p\000o\000u\000r\000\040\000f\000i\000l\000e\000t\000s\000\040\000p\000e\000r\000s\000o\000n\000n\000a\000l\000i\000s\000\351\000s)
endobj
92 0 obj
-<< /S /GoTo /D (subsection.6.1) >>
+<< /S /GoTo /D (section.6) >>
endobj
95 0 obj
-(\376\377\000U\000t\000i\000l\000i\000s\000a\000t\000i\000o\000n\000\040\000d\000e\000\040\000c\000o\000l\000o\000r\000t\000b\000l)
+(\376\377\000L\000e\000s\000\040\000c\000o\000u\000l\000e\000u\000r\000s\000\040\000d\000e\000\040\000f\000o\000n\000d\000\040\000d\000e\000s\000\040\000r\000a\000n\000g\000\351\000e\000s\000\040\000e\000t\000\040\000d\000e\000s\000\040\000c\000o\000l\000o\000n\000n\000e\000s)
endobj
96 0 obj
-<< /S /GoTo /D (subsection.6.2) >>
+<< /S /GoTo /D (subsection.6.1) >>
endobj
99 0 obj
-(\376\377\000L\000e\000s\000\040\000o\000u\000t\000i\000l\000s\000\040\000d\000e\000\040\000n\000i\000c\000e\000m\000a\000t\000r\000i\000x\000\040\000d\000a\000n\000s\000\040\000l\000e\000\040\000\134\000C\000o\000d\000e\000B\000e\000f\000o\000r\000e)
+(\376\377\000U\000t\000i\000l\000i\000s\000a\000t\000i\000o\000n\000\040\000d\000e\000\040\000c\000o\000l\000o\000r\000t\000b\000l)
endobj
100 0 obj
-<< /S /GoTo /D (subsection.6.3) >>
+<< /S /GoTo /D (subsection.6.2) >>
endobj
103 0 obj
-(\376\377\000O\000u\000t\000i\000l\000s\000\040\000d\000e\000\040\000c\000o\000l\000o\000r\000i\000a\000g\000e\000\040\000e\000n\000\040\000t\000a\000b\000l\000e\000a\000u)
+(\376\377\000L\000e\000s\000\040\000o\000u\000t\000i\000l\000s\000\040\000d\000e\000\040\000n\000i\000c\000e\000m\000a\000t\000r\000i\000x\000\040\000d\000a\000n\000s\000\040\000l\000e\000\040\000\134\000C\000o\000d\000e\000B\000e\000f\000o\000r\000e)
endobj
104 0 obj
-<< /S /GoTo /D (subsection.6.4) >>
+<< /S /GoTo /D (subsection.6.3) >>
endobj
107 0 obj
-(\376\377\000L\000a\000\040\000c\000o\000u\000l\000e\000u\000r\000\040\000s\000p\000\351\000c\000i\000a\000l\000\040\000\253\000n\000o\000c\000o\000l\000o\000r\000\273)
+(\376\377\000O\000u\000t\000i\000l\000s\000\040\000d\000e\000\040\000c\000o\000l\000o\000r\000i\000a\000g\000e\000\040\000e\000n\000\040\000t\000a\000b\000l\000e\000a\000u)
endobj
108 0 obj
-<< /S /GoTo /D (section.7) >>
+<< /S /GoTo /D (subsection.6.4) >>
endobj
111 0 obj
-(\376\377\000L\000a\000\040\000c\000o\000m\000m\000a\000n\000d\000e\000\040\000\134\000R\000o\000w\000S\000t\000y\000l\000e)
+(\376\377\000L\000a\000\040\000c\000o\000u\000l\000e\000u\000r\000\040\000s\000p\000\351\000c\000i\000a\000l\000\040\000\253\000n\000o\000c\000o\000l\000o\000r\000\273)
endobj
112 0 obj
-<< /S /GoTo /D (section.8) >>
+<< /S /GoTo /D (section.7) >>
endobj
115 0 obj
-(\376\377\000L\000a\000\040\000l\000a\000r\000g\000e\000u\000r\000\040\000d\000e\000s\000\040\000c\000o\000l\000o\000n\000n\000e\000s)
+(\376\377\000L\000a\000\040\000c\000o\000m\000m\000a\000n\000d\000e\000\040\000\134\000R\000o\000w\000S\000t\000y\000l\000e)
endobj
116 0 obj
-<< /S /GoTo /D (subsection.8.1) >>
+<< /S /GoTo /D (section.8) >>
endobj
119 0 obj
-(\376\377\000T\000e\000c\000h\000n\000i\000q\000u\000e\000s\000\040\000d\000e\000\040\000b\000a\000s\000e)
+(\376\377\000L\000a\000\040\000l\000a\000r\000g\000e\000u\000r\000\040\000d\000e\000s\000\040\000c\000o\000l\000o\000n\000n\000e\000s)
endobj
120 0 obj
-<< /S /GoTo /D (subsection.8.2) >>
+<< /S /GoTo /D (subsection.8.1) >>
endobj
123 0 obj
-(\376\377\000L\000e\000s\000\040\000c\000o\000l\000o\000n\000n\000e\000s\000\040\000X)
+(\376\377\000T\000e\000c\000h\000n\000i\000q\000u\000e\000s\000\040\000d\000e\000\040\000b\000a\000s\000e)
endobj
124 0 obj
-<< /S /GoTo /D (subsection.8.3) >>
+<< /S /GoTo /D (subsection.8.2) >>
endobj
127 0 obj
-(\376\377\000L\000e\000s\000\040\000c\000o\000l\000o\000n\000n\000e\000s\000\040\000V\000\040\000d\000e\000\040\000v\000a\000r\000w\000i\000d\000t\000h)
+(\376\377\000L\000e\000s\000\040\000c\000o\000l\000o\000n\000n\000e\000s\000\040\000X)
endobj
128 0 obj
-<< /S /GoTo /D (section.9) >>
+<< /S /GoTo /D (subsection.8.3) >>
endobj
131 0 obj
-(\376\377\000L\000e\000s\000\040\000r\000a\000n\000g\000\351\000e\000s\000\040\000e\000t\000\040\000c\000o\000l\000o\000n\000n\000e\000s\000\040\000e\000x\000t\000\351\000r\000i\000e\000u\000r\000e\000s)
+(\376\377\000L\000e\000s\000\040\000c\000o\000l\000o\000n\000n\000e\000s\000\040\000V\000\040\000d\000e\000\040\000v\000a\000r\000w\000i\000d\000t\000h)
endobj
132 0 obj
-<< /S /GoTo /D (section.10) >>
+<< /S /GoTo /D (section.9) >>
endobj
135 0 obj
-(\376\377\000L\000e\000s\000\040\000l\000i\000g\000n\000e\000s\000\040\000e\000n\000\040\000p\000o\000i\000n\000t\000i\000l\000l\000\351\000s\000\040\000c\000o\000n\000t\000i\000n\000u\000e\000s)
+(\376\377\000L\000e\000s\000\040\000r\000a\000n\000g\000\351\000e\000s\000\040\000e\000t\000\040\000c\000o\000l\000o\000n\000n\000e\000s\000\040\000e\000x\000t\000\351\000r\000i\000e\000u\000r\000e\000s)
endobj
136 0 obj
-<< /S /GoTo /D (subsection.10.1) >>
+<< /S /GoTo /D (section.10) >>
endobj
139 0 obj
-(\376\377\000L\000'\000o\000p\000t\000i\000o\000n\000\040\000n\000u\000l\000l\000i\000f\000y\000-\000d\000o\000t\000s)
+(\376\377\000L\000e\000s\000\040\000l\000i\000g\000n\000e\000s\000\040\000e\000n\000\040\000p\000o\000i\000n\000t\000i\000l\000l\000\351\000s\000\040\000c\000o\000n\000t\000i\000n\000u\000e\000s)
endobj
140 0 obj
-<< /S /GoTo /D (subsection.10.2) >>
+<< /S /GoTo /D (subsection.10.1) >>
endobj
143 0 obj
-(\376\377\000L\000e\000s\000\040\000c\000o\000m\000m\000a\000n\000d\000e\000s\000\040\000\134\000H\000d\000o\000t\000s\000f\000o\000r\000\040\000e\000t\000\040\000\134\000V\000d\000o\000t\000s\000f\000o\000r)
+(\376\377\000L\000'\000o\000p\000t\000i\000o\000n\000\040\000n\000u\000l\000l\000i\000f\000y\000-\000d\000o\000t\000s)
endobj
144 0 obj
-<< /S /GoTo /D (subsection.10.3) >>
+<< /S /GoTo /D (subsection.10.2) >>
endobj
147 0 obj
-(\376\377\000C\000o\000m\000m\000e\000n\000t\000\040\000c\000r\000\351\000e\000r\000\040\000l\000e\000s\000\040\000l\000i\000g\000n\000e\000s\000\040\000e\000n\000\040\000p\000o\000i\000n\000t\000i\000l\000l\000\351\000s\000\040\000d\000e\000\040\000m\000a\000n\000i\000\350\000r\000e\000\040\000t\000r\000a\000n\000s\000p\000a\000r\000e\000n\000t\000e)
+(\376\377\000L\000e\000s\000\040\000c\000o\000m\000m\000a\000n\000d\000e\000s\000\040\000\134\000H\000d\000o\000t\000s\000f\000o\000r\000\040\000e\000t\000\040\000\134\000V\000d\000o\000t\000s\000f\000o\000r)
endobj
148 0 obj
-<< /S /GoTo /D (subsection.10.4) >>
+<< /S /GoTo /D (subsection.10.3) >>
endobj
151 0 obj
-(\376\377\000L\000e\000s\000\040\000l\000a\000b\000e\000l\000s\000\040\000d\000e\000s\000\040\000l\000i\000g\000n\000e\000s\000\040\000e\000n\000\040\000p\000o\000i\000n\000t\000i\000l\000l\000\351\000s)
+(\376\377\000C\000o\000m\000m\000e\000n\000t\000\040\000c\000r\000\351\000e\000r\000\040\000l\000e\000s\000\040\000l\000i\000g\000n\000e\000s\000\040\000e\000n\000\040\000p\000o\000i\000n\000t\000i\000l\000l\000\351\000s\000\040\000d\000e\000\040\000m\000a\000n\000i\000\350\000r\000e\000\040\000t\000r\000a\000n\000s\000p\000a\000r\000e\000n\000t\000e)
endobj
152 0 obj
-<< /S /GoTo /D (subsection.10.5) >>
+<< /S /GoTo /D (subsection.10.4) >>
endobj
155 0 obj
-(\376\377\000P\000e\000r\000s\000o\000n\000n\000a\000l\000i\000s\000a\000t\000i\000o\000n\000\040\000d\000e\000s\000\040\000l\000i\000g\000n\000e\000s\000\040\000e\000n\000\040\000p\000o\000i\000n\000t\000i\000l\000l\000\351\000s)
+(\376\377\000L\000e\000s\000\040\000l\000a\000b\000e\000l\000s\000\040\000d\000e\000s\000\040\000l\000i\000g\000n\000e\000s\000\040\000e\000n\000\040\000p\000o\000i\000n\000t\000i\000l\000l\000\351\000s)
endobj
156 0 obj
-<< /S /GoTo /D (subsection.10.6) >>
+<< /S /GoTo /D (subsection.10.5) >>
endobj
159 0 obj
-(\376\377\000L\000e\000s\000\040\000l\000i\000g\000n\000e\000s\000\040\000p\000o\000i\000n\000t\000i\000l\000l\000\351\000e\000s\000\040\000e\000t\000\040\000l\000e\000s\000\040\000f\000i\000l\000e\000t\000s)
+(\376\377\000P\000e\000r\000s\000o\000n\000n\000a\000l\000i\000s\000a\000t\000i\000o\000n\000\040\000d\000e\000s\000\040\000l\000i\000g\000n\000e\000s\000\040\000e\000n\000\040\000p\000o\000i\000n\000t\000i\000l\000l\000\351\000s)
endobj
160 0 obj
-<< /S /GoTo /D (section.11) >>
+<< /S /GoTo /D (subsection.10.6) >>
endobj
163 0 obj
-(\376\377\000D\000\351\000l\000i\000m\000i\000t\000e\000u\000r\000s\000\040\000d\000a\000n\000s\000\040\000l\000e\000\040\000p\000r\000\351\000a\000m\000b\000u\000l\000e\000\040\000d\000e\000\040\000l\000'\000e\000n\000v\000i\000r\000o\000n\000n\000e\000m\000e\000n\000t)
+(\376\377\000L\000e\000s\000\040\000l\000i\000g\000n\000e\000s\000\040\000p\000o\000i\000n\000t\000i\000l\000l\000\351\000e\000s\000\040\000e\000t\000\040\000l\000e\000s\000\040\000f\000i\000l\000e\000t\000s)
endobj
164 0 obj
-<< /S /GoTo /D (section.12) >>
+<< /S /GoTo /D (section.11) >>
endobj
167 0 obj
-(\376\377\000L\000e\000\040\000\134\000C\000o\000d\000e\000A\000f\000t\000e\000r)
+(\376\377\000D\000\351\000l\000i\000m\000i\000t\000e\000u\000r\000s\000\040\000d\000a\000n\000s\000\040\000l\000e\000\040\000p\000r\000\351\000a\000m\000b\000u\000l\000e\000\040\000d\000e\000\040\000l\000'\000e\000n\000v\000i\000r\000o\000n\000n\000e\000m\000e\000n\000t)
endobj
168 0 obj
-<< /S /GoTo /D (subsection.12.1) >>
+<< /S /GoTo /D (section.12) >>
endobj
171 0 obj
-(\376\377\000L\000a\000\040\000c\000o\000m\000m\000a\000n\000d\000e\000\040\000\134\000l\000i\000n\000e\000\040\000d\000a\000n\000s\000\040\000l\000e\000\040\000\134\000C\000o\000d\000e\000A\000f\000t\000e\000r)
+(\376\377\000L\000e\000\040\000\134\000C\000o\000d\000e\000A\000f\000t\000e\000r)
endobj
172 0 obj
-<< /S /GoTo /D (subsection.12.2) >>
+<< /S /GoTo /D (subsection.12.1) >>
endobj
175 0 obj
-(\376\377\000L\000a\000\040\000c\000o\000m\000m\000a\000n\000d\000e\000\040\000\134\000S\000u\000b\000M\000a\000t\000r\000i\000x\000\040\000d\000a\000n\000s\000\040\000l\000e\000\040\000\134\000C\000o\000d\000e\000A\000f\000t\000e\000r\000\040\000\050\000e\000t\000\040\000l\000e\000\040\000\134\000C\000o\000d\000e\000B\000e\000f\000o\000r\000e\000\051)
+(\376\377\000L\000a\000\040\000c\000o\000m\000m\000a\000n\000d\000e\000\040\000\134\000l\000i\000n\000e\000\040\000d\000a\000n\000s\000\040\000l\000e\000\040\000\134\000C\000o\000d\000e\000A\000f\000t\000e\000r)
endobj
176 0 obj
-<< /S /GoTo /D (subsection.12.3) >>
+<< /S /GoTo /D (subsection.12.2) >>
endobj
179 0 obj
-(\376\377\000L\000e\000s\000\040\000c\000o\000m\000m\000a\000n\000d\000e\000s\000\040\000\134\000O\000v\000e\000r\000B\000r\000a\000c\000e\000\040\000e\000t\000\040\000\134\000U\000n\000d\000e\000r\000B\000r\000a\000c\000e\000\040\000d\000a\000n\000s\000\040\000l\000e\000\040\000\134\000C\000o\000d\000e\000A\000f\000t\000e\000r)
+(\376\377\000L\000a\000\040\000c\000o\000m\000m\000a\000n\000d\000e\000\040\000\134\000S\000u\000b\000M\000a\000t\000r\000i\000x\000\040\000d\000a\000n\000s\000\040\000l\000e\000\040\000\134\000C\000o\000d\000e\000A\000f\000t\000e\000r\000\040\000\050\000e\000t\000\040\000l\000e\000\040\000\134\000C\000o\000d\000e\000B\000e\000f\000o\000r\000e\000\051)
endobj
180 0 obj
-<< /S /GoTo /D (subsection.12.4) >>
+<< /S /GoTo /D (subsection.12.3) >>
endobj
183 0 obj
-(\376\377\000L\000a\000\040\000c\000o\000m\000m\000a\000n\000d\000e\000\040\000\134\000T\000i\000k\000z\000E\000v\000e\000r\000y\000C\000e\000l\000l\000\040\000d\000a\000n\000s\000\040\000l\000e\000\040\000\134\000C\000o\000d\000e\000A\000f\000t\000e\000r)
+(\376\377\000L\000e\000s\000\040\000c\000o\000m\000m\000a\000n\000d\000e\000s\000\040\000\134\000O\000v\000e\000r\000B\000r\000a\000c\000e\000\040\000e\000t\000\040\000\134\000U\000n\000d\000e\000r\000B\000r\000a\000c\000e\000\040\000d\000a\000n\000s\000\040\000l\000e\000\040\000\134\000C\000o\000d\000e\000A\000f\000t\000e\000r)
endobj
184 0 obj
-<< /S /GoTo /D (section.13) >>
+<< /S /GoTo /D (subsection.12.4) >>
endobj
187 0 obj
-(\376\377\000L\000e\000s\000\040\000l\000\351\000g\000e\000n\000d\000e\000s\000\040\000e\000t\000\040\000l\000e\000s\000\040\000n\000o\000t\000e\000s\000\040\000d\000a\000n\000s\000\040\000l\000e\000s\000\040\000t\000a\000b\000l\000e\000a\000u\000x)
+(\376\377\000L\000a\000\040\000c\000o\000m\000m\000a\000n\000d\000e\000\040\000\134\000T\000i\000k\000z\000E\000v\000e\000r\000y\000C\000e\000l\000l\000\040\000d\000a\000n\000s\000\040\000l\000e\000\040\000\134\000C\000o\000d\000e\000A\000f\000t\000e\000r)
endobj
188 0 obj
-<< /S /GoTo /D (subsection.13.1) >>
+<< /S /GoTo /D (section.13) >>
endobj
191 0 obj
-(\376\377\000L\000a\000\040\000l\000\351\000g\000e\000n\000d\000e\000s\000\040\000d\000e\000s\000\040\000t\000a\000b\000l\000e\000a\000u\000x)
+(\376\377\000L\000e\000s\000\040\000l\000\351\000g\000e\000n\000d\000e\000s\000\040\000e\000t\000\040\000l\000e\000s\000\040\000n\000o\000t\000e\000s\000\040\000d\000a\000n\000s\000\040\000l\000e\000s\000\040\000t\000a\000b\000l\000e\000a\000u\000x)
endobj
192 0 obj
-<< /S /GoTo /D (subsection.13.2) >>
+<< /S /GoTo /D (subsection.13.1) >>
endobj
195 0 obj
-(\376\377\000L\000e\000s\000\040\000n\000o\000t\000e\000s\000\040\000d\000e\000\040\000p\000i\000e\000d\000\040\000d\000e\000\040\000p\000a\000g\000e)
+(\376\377\000L\000a\000\040\000l\000\351\000g\000e\000n\000d\000e\000s\000\040\000d\000e\000s\000\040\000t\000a\000b\000l\000e\000a\000u\000x)
endobj
196 0 obj
-<< /S /GoTo /D (subsection.13.3) >>
+<< /S /GoTo /D (subsection.13.2) >>
endobj
199 0 obj
-(\376\377\000L\000e\000s\000\040\000n\000o\000t\000e\000s\000\040\000d\000e\000\040\000t\000a\000b\000l\000e\000a\000u\000x)
+(\376\377\000L\000e\000s\000\040\000n\000o\000t\000e\000s\000\040\000d\000e\000\040\000p\000i\000e\000d\000\040\000d\000e\000\040\000p\000a\000g\000e)
endobj
200 0 obj
-<< /S /GoTo /D (subsection.13.4) >>
+<< /S /GoTo /D (subsection.13.3) >>
endobj
203 0 obj
-(\376\377\000P\000e\000r\000s\000o\000n\000n\000a\000l\000i\000s\000a\000t\000i\000o\000n\000\040\000d\000e\000s\000\040\000n\000o\000t\000e\000s\000\040\000d\000e\000\040\000t\000a\000b\000l\000e\000a\000u)
+(\376\377\000L\000e\000s\000\040\000n\000o\000t\000e\000s\000\040\000d\000e\000\040\000t\000a\000b\000l\000e\000a\000u\000x)
endobj
204 0 obj
-<< /S /GoTo /D (subsection.13.5) >>
+<< /S /GoTo /D (subsection.13.4) >>
endobj
207 0 obj
-(\376\377\000U\000t\000i\000l\000i\000s\000a\000t\000i\000o\000n\000\040\000d\000e\000\040\000\173\000N\000i\000c\000e\000T\000a\000b\000u\000l\000a\000r\000\175\000\040\000a\000v\000e\000c\000\040\000t\000h\000r\000e\000e\000p\000a\000r\000t\000t\000a\000b\000l\000e)
+(\376\377\000P\000e\000r\000s\000o\000n\000n\000a\000l\000i\000s\000a\000t\000i\000o\000n\000\040\000d\000e\000s\000\040\000n\000o\000t\000e\000s\000\040\000d\000e\000\040\000t\000a\000b\000l\000e\000a\000u)
endobj
208 0 obj
-<< /S /GoTo /D (section.14) >>
+<< /S /GoTo /D (subsection.13.5) >>
endobj
211 0 obj
-(\376\377\000A\000u\000t\000r\000e\000s\000\040\000f\000o\000n\000c\000t\000i\000o\000n\000n\000a\000l\000i\000t\000\351\000s)
+(\376\377\000U\000t\000i\000l\000i\000s\000a\000t\000i\000o\000n\000\040\000d\000e\000\040\000\173\000N\000i\000c\000e\000T\000a\000b\000u\000l\000a\000r\000\175\000\040\000a\000v\000e\000c\000\040\000t\000h\000r\000e\000e\000p\000a\000r\000t\000t\000a\000b\000l\000e)
endobj
212 0 obj
-<< /S /GoTo /D (subsection.14.1) >>
+<< /S /GoTo /D (section.14) >>
endobj
215 0 obj
-(\376\377\000L\000a\000\040\000c\000l\000\351\000\040\000r\000o\000u\000n\000d\000e\000d\000-\000c\000o\000r\000n\000e\000r\000s)
+(\376\377\000A\000u\000t\000r\000e\000s\000\040\000f\000o\000n\000c\000t\000i\000o\000n\000n\000a\000l\000i\000t\000\351\000s)
endobj
216 0 obj
-<< /S /GoTo /D (subsection.14.2) >>
+<< /S /GoTo /D (subsection.14.1) >>
endobj
219 0 obj
-(\376\377\000C\000o\000m\000m\000a\000n\000d\000e\000\040\000\134\000S\000h\000o\000w\000C\000e\000l\000l\000N\000a\000m\000e\000s)
+(\376\377\000L\000a\000\040\000c\000l\000\351\000\040\000r\000o\000u\000n\000d\000e\000d\000-\000c\000o\000r\000n\000e\000r\000s)
endobj
220 0 obj
-<< /S /GoTo /D (subsection.14.3) >>
+<< /S /GoTo /D (subsection.14.2) >>
endobj
223 0 obj
-(\376\377\000U\000t\000i\000l\000i\000s\000a\000t\000i\000o\000n\000\040\000d\000u\000\040\000t\000y\000p\000e\000\040\000d\000e\000\040\000c\000o\000l\000o\000n\000n\000e\000\040\000S\000\040\000d\000e\000\040\000s\000i\000u\000n\000i\000t\000x)
+(\376\377\000C\000o\000m\000m\000a\000n\000d\000e\000\040\000\134\000S\000h\000o\000w\000C\000e\000l\000l\000N\000a\000m\000e\000s)
endobj
224 0 obj
-<< /S /GoTo /D (subsection.14.4) >>
+<< /S /GoTo /D (subsection.14.3) >>
endobj
227 0 obj
-(\376\377\000T\000y\000p\000e\000\040\000d\000e\000\040\000c\000o\000l\000o\000n\000n\000e\000\040\000p\000a\000r\000\040\000d\000\351\000f\000a\000u\000t\000\040\000d\000a\000n\000s\000\040\000\173\000N\000i\000c\000e\000M\000a\000t\000r\000i\000x\000\175)
+(\376\377\000U\000t\000i\000l\000i\000s\000a\000t\000i\000o\000n\000\040\000d\000u\000\040\000t\000y\000p\000e\000\040\000d\000e\000\040\000c\000o\000l\000o\000n\000n\000e\000\040\000S\000\040\000d\000e\000\040\000s\000i\000u\000n\000i\000t\000x)
endobj
228 0 obj
-<< /S /GoTo /D (subsection.14.5) >>
+<< /S /GoTo /D (subsection.14.4) >>
endobj
231 0 obj
-(\376\377\000L\000a\000\040\000c\000o\000m\000m\000a\000n\000d\000e\000\040\000\134\000r\000o\000t\000a\000t\000e)
+(\376\377\000T\000y\000p\000e\000\040\000d\000e\000\040\000c\000o\000l\000o\000n\000n\000e\000\040\000p\000a\000r\000\040\000d\000\351\000f\000a\000u\000t\000\040\000d\000a\000n\000s\000\040\000\173\000N\000i\000c\000e\000M\000a\000t\000r\000i\000x\000\175)
endobj
232 0 obj
-<< /S /GoTo /D (subsection.14.6) >>
+<< /S /GoTo /D (subsection.14.5) >>
endobj
235 0 obj
-(\376\377\000L\000'\000o\000p\000t\000i\000o\000n\000\040\000s\000m\000a\000l\000l)
+(\376\377\000L\000a\000\040\000c\000o\000m\000m\000a\000n\000d\000e\000\040\000\134\000r\000o\000t\000a\000t\000e)
endobj
236 0 obj
-<< /S /GoTo /D (subsection.14.7) >>
+<< /S /GoTo /D (subsection.14.6) >>
endobj
239 0 obj
-(\376\377\000L\000e\000s\000\040\000c\000o\000m\000p\000t\000e\000u\000r\000s\000\040\000i\000R\000o\000w\000\040\000e\000t\000\040\000j\000C\000o\000l)
+(\376\377\000L\000'\000o\000p\000t\000i\000o\000n\000\040\000s\000m\000a\000l\000l)
endobj
240 0 obj
-<< /S /GoTo /D (subsection.14.8) >>
+<< /S /GoTo /D (subsection.14.7) >>
endobj
243 0 obj
-(\376\377\000L\000'\000o\000p\000t\000i\000o\000n\000\040\000l\000i\000g\000h\000t\000-\000s\000y\000n\000t\000a\000x)
+(\376\377\000L\000e\000s\000\040\000c\000o\000m\000p\000t\000e\000u\000r\000s\000\040\000i\000R\000o\000w\000\040\000e\000t\000\040\000j\000C\000o\000l)
endobj
244 0 obj
-<< /S /GoTo /D (subsection.14.9) >>
+<< /S /GoTo /D (subsection.14.8) >>
endobj
247 0 obj
-(\376\377\000C\000o\000u\000l\000e\000u\000r\000\040\000d\000e\000s\000\040\000d\000\351\000l\000i\000m\000i\000t\000e\000u\000r\000s)
+(\376\377\000L\000'\000o\000p\000t\000i\000o\000n\000\040\000l\000i\000g\000h\000t\000-\000s\000y\000n\000t\000a\000x)
endobj
248 0 obj
-<< /S /GoTo /D (subsection.14.10) >>
+<< /S /GoTo /D (subsection.14.9) >>
endobj
251 0 obj
-(\376\377\000L\000'\000e\000n\000v\000i\000r\000o\000n\000n\000e\000m\000e\000n\000t\000\040\000\173\000N\000i\000c\000e\000A\000r\000r\000a\000y\000W\000i\000t\000h\000D\000e\000l\000i\000m\000s\000\175)
+(\376\377\000C\000o\000u\000l\000e\000u\000r\000\040\000d\000e\000s\000\040\000d\000\351\000l\000i\000m\000i\000t\000e\000u\000r\000s)
endobj
252 0 obj
-<< /S /GoTo /D (subsection.14.11) >>
+<< /S /GoTo /D (subsection.14.10) >>
endobj
255 0 obj
-(\376\377\000L\000a\000\040\000c\000o\000m\000m\000a\000n\000d\000e\000\040\000\134\000O\000n\000l\000y\000M\000a\000i\000n\000N\000i\000c\000e\000M\000a\000t\000r\000i\000x)
+(\376\377\000L\000'\000e\000n\000v\000i\000r\000o\000n\000n\000e\000m\000e\000n\000t\000\040\000\173\000N\000i\000c\000e\000A\000r\000r\000a\000y\000W\000i\000t\000h\000D\000e\000l\000i\000m\000s\000\175)
endobj
256 0 obj
-<< /S /GoTo /D (section.15) >>
+<< /S /GoTo /D (subsection.14.11) >>
endobj
259 0 obj
-(\376\377\000U\000t\000i\000l\000i\000s\000a\000t\000i\000o\000n\000\040\000d\000e\000\040\000T\000i\000k\000Z\000\040\000a\000v\000e\000c\000\040\000n\000i\000c\000e\000m\000a\000t\000r\000i\000x)
+(\376\377\000L\000a\000\040\000c\000o\000m\000m\000a\000n\000d\000e\000\040\000\134\000O\000n\000l\000y\000M\000a\000i\000n\000N\000i\000c\000e\000M\000a\000t\000r\000i\000x)
endobj
260 0 obj
-<< /S /GoTo /D (subsection.15.1) >>
+<< /S /GoTo /D (section.15) >>
endobj
263 0 obj
-(\376\377\000L\000e\000s\000\040\000n\001\123\000u\000d\000s\000\040\000c\000o\000r\000r\000e\000s\000p\000o\000n\000d\000a\000n\000t\000\040\000a\000u\000x\000\040\000c\000o\000n\000t\000e\000n\000u\000s\000\040\000d\000e\000s\000\040\000c\000a\000s\000e\000s)
+(\376\377\000U\000t\000i\000l\000i\000s\000a\000t\000i\000o\000n\000\040\000d\000e\000\040\000T\000i\000k\000Z\000\040\000a\000v\000e\000c\000\040\000n\000i\000c\000e\000m\000a\000t\000r\000i\000x)
endobj
264 0 obj
-<< /S /GoTo /D (subsubsection.15.1.1) >>
+<< /S /GoTo /D (subsection.15.1) >>
endobj
267 0 obj
-(\376\377\000L\000a\000\040\000c\000l\000\351\000\040\000p\000g\000f\000-\000n\000o\000d\000e\000-\000c\000o\000d\000e)
+(\376\377\000L\000e\000s\000\040\000n\001\123\000u\000d\000s\000\040\000c\000o\000r\000r\000e\000s\000p\000o\000n\000d\000a\000n\000t\000\040\000a\000u\000x\000\040\000c\000o\000n\000t\000e\000n\000u\000s\000\040\000d\000e\000s\000\040\000c\000a\000s\000e\000s)
endobj
268 0 obj
-<< /S /GoTo /D (subsubsection.15.1.2) >>
+<< /S /GoTo /D (subsubsection.15.1.1) >>
endobj
271 0 obj
-(\376\377\000L\000e\000s\000\040\000c\000o\000l\000o\000n\000n\000e\000s\000\040\000V\000\040\000d\000e\000\040\000v\000a\000r\000w\000i\000d\000t\000h)
+(\376\377\000L\000a\000\040\000c\000l\000\351\000\040\000p\000g\000f\000-\000n\000o\000d\000e\000-\000c\000o\000d\000e)
endobj
272 0 obj
-<< /S /GoTo /D (subsection.15.2) >>
+<< /S /GoTo /D (subsubsection.15.1.2) >>
endobj
275 0 obj
-(\376\377\000L\000e\000s\000\040\000\253\000n\001\123\000u\000d\000s\000\040\000m\000o\000y\000e\000n\000s\000\273\000\040\000e\000t\000\040\000l\000e\000s\000\040\000\253\000n\001\123\000u\000d\000s\000\040\000l\000a\000r\000g\000e\000s\000\273)
+(\376\377\000L\000e\000s\000\040\000c\000o\000l\000o\000n\000n\000e\000s\000\040\000V\000\040\000d\000e\000\040\000v\000a\000r\000w\000i\000d\000t\000h)
endobj
276 0 obj
-<< /S /GoTo /D (subsection.15.3) >>
+<< /S /GoTo /D (subsection.15.2) >>
endobj
279 0 obj
-(\376\377\000L\000e\000s\000\040\000n\001\123\000u\000d\000s\000\040\000i\000n\000d\000i\000q\000u\000a\000n\000t\000\040\000l\000a\000\040\000p\000o\000s\000i\000t\000i\000o\000n\000\040\000d\000e\000s\000\040\000f\000i\000l\000e\000t\000s)
+(\376\377\000L\000e\000s\000\040\000\253\000n\001\123\000u\000d\000s\000\040\000m\000o\000y\000e\000n\000s\000\273\000\040\000e\000t\000\040\000l\000e\000s\000\040\000\253\000n\001\123\000u\000d\000s\000\040\000l\000a\000r\000g\000e\000s\000\273)
endobj
280 0 obj
-<< /S /GoTo /D (subsection.15.4) >>
+<< /S /GoTo /D (subsection.15.3) >>
endobj
283 0 obj
-(\376\377\000L\000e\000s\000\040\000n\001\123\000u\000d\000s\000\040\000c\000o\000r\000r\000e\000s\000p\000o\000n\000d\000a\000n\000t\000\040\000a\000u\000x\000\040\000c\000o\000m\000m\000a\000n\000d\000e\000s\000\040\000\134\000S\000u\000b\000M\000a\000t\000r\000i\000x)
+(\376\377\000L\000e\000s\000\040\000n\001\123\000u\000d\000s\000\040\000i\000n\000d\000i\000q\000u\000a\000n\000t\000\040\000l\000a\000\040\000p\000o\000s\000i\000t\000i\000o\000n\000\040\000d\000e\000s\000\040\000f\000i\000l\000e\000t\000s)
endobj
284 0 obj
-<< /S /GoTo /D (section.16) >>
+<< /S /GoTo /D (subsection.15.4) >>
endobj
287 0 obj
-(\376\377\000A\000P\000I\000\040\000p\000o\000u\000r\000\040\000l\000e\000s\000\040\000d\000\351\000v\000e\000l\000o\000p\000p\000e\000u\000r\000s)
+(\376\377\000L\000e\000s\000\040\000n\001\123\000u\000d\000s\000\040\000c\000o\000r\000r\000e\000s\000p\000o\000n\000d\000a\000n\000t\000\040\000a\000u\000x\000\040\000c\000o\000m\000m\000a\000n\000d\000e\000s\000\040\000\134\000S\000u\000b\000M\000a\000t\000r\000i\000x)
endobj
288 0 obj
-<< /S /GoTo /D (section.17) >>
+<< /S /GoTo /D (section.16) >>
endobj
291 0 obj
-(\376\377\000R\000e\000m\000a\000r\000q\000u\000e\000s\000\040\000t\000e\000c\000h\000n\000i\000q\000u\000e\000s)
+(\376\377\000A\000P\000I\000\040\000p\000o\000u\000r\000\040\000l\000e\000s\000\040\000d\000\351\000v\000e\000l\000o\000p\000p\000e\000u\000r\000s)
endobj
292 0 obj
-<< /S /GoTo /D (subsection.17.1) >>
+<< /S /GoTo /D (section.17) >>
endobj
295 0 obj
-(\376\377\000L\000i\000g\000n\000e\000s\000\040\000d\000i\000a\000g\000o\000n\000a\000l\000e\000s)
+(\376\377\000R\000e\000m\000a\000r\000q\000u\000e\000s\000\040\000t\000e\000c\000h\000n\000i\000q\000u\000e\000s)
endobj
296 0 obj
-<< /S /GoTo /D (subsection.17.2) >>
+<< /S /GoTo /D (subsection.17.1) >>
endobj
299 0 obj
-(\376\377\000L\000e\000s\000\040\000c\000a\000s\000e\000s\000\040\000\253\000v\000i\000d\000e\000s\000\273)
+(\376\377\000L\000i\000g\000n\000e\000s\000\040\000d\000i\000a\000g\000o\000n\000a\000l\000e\000s)
endobj
300 0 obj
-<< /S /GoTo /D (subsection.17.3) >>
+<< /S /GoTo /D (subsection.17.2) >>
endobj
303 0 obj
-(\376\377\000L\000'\000o\000p\000t\000i\000o\000n\000\040\000e\000x\000t\000e\000r\000i\000o\000r\000-\000a\000r\000r\000a\000y\000c\000o\000l\000s\000e\000p)
+(\376\377\000L\000e\000s\000\040\000c\000a\000s\000e\000s\000\040\000\253\000v\000i\000d\000e\000s\000\273)
endobj
304 0 obj
-<< /S /GoTo /D (subsection.17.4) >>
+<< /S /GoTo /D (subsection.17.3) >>
endobj
307 0 obj
-(\376\377\000I\000n\000c\000o\000m\000p\000a\000t\000i\000b\000i\000l\000i\000t\000\351\000s)
+(\376\377\000L\000'\000o\000p\000t\000i\000o\000n\000\040\000e\000x\000t\000e\000r\000i\000o\000r\000-\000a\000r\000r\000a\000y\000c\000o\000l\000s\000e\000p)
endobj
308 0 obj
-<< /S /GoTo /D (section.18) >>
+<< /S /GoTo /D (subsection.17.4) >>
endobj
311 0 obj
-(\376\377\000E\000x\000e\000m\000p\000l\000e\000s)
+(\376\377\000I\000n\000c\000o\000m\000p\000a\000t\000i\000b\000i\000l\000i\000t\000\351\000s)
endobj
312 0 obj
-<< /S /GoTo /D (subsection.18.1) >>
+<< /S /GoTo /D (section.18) >>
endobj
315 0 obj
-(\376\377\000U\000t\000i\000l\000i\000s\000a\000t\000i\000o\000n\000\040\000d\000e\000\040\000l\000a\000\040\000c\000l\000\351\000\040\000\253\000t\000i\000k\000z\000\273\000\040\000d\000e\000\040\000l\000a\000\040\000c\000o\000m\000m\000a\000n\000d\000e\000\040\000\134\000B\000l\000o\000c\000k)
+(\376\377\000E\000x\000e\000m\000p\000l\000e\000s)
endobj
316 0 obj
-<< /S /GoTo /D (subsection.18.2) >>
+<< /S /GoTo /D (subsection.18.1) >>
endobj
319 0 obj
-(\376\377\000U\000t\000i\000l\000i\000s\000a\000t\000i\000o\000n\000\040\000a\000v\000e\000c\000\040\000t\000c\000o\000l\000o\000r\000b\000o\000x)
+(\376\377\000U\000t\000i\000l\000i\000s\000a\000t\000i\000o\000n\000\040\000d\000e\000\040\000l\000a\000\040\000c\000l\000\351\000\040\000\253\000t\000i\000k\000z\000\273\000\040\000d\000e\000\040\000l\000a\000\040\000c\000o\000m\000m\000a\000n\000d\000e\000\040\000\134\000B\000l\000o\000c\000k)
endobj
320 0 obj
-<< /S /GoTo /D (subsection.18.3) >>
+<< /S /GoTo /D (subsection.18.2) >>
endobj
323 0 obj
-(\376\377\000N\000o\000t\000e\000s\000\040\000d\000a\000n\000s\000\040\000l\000e\000s\000\040\000t\000a\000b\000l\000e\000a\000u\000x)
+(\376\377\000U\000t\000i\000l\000i\000s\000a\000t\000i\000o\000n\000\040\000a\000v\000e\000c\000\040\000t\000c\000o\000l\000o\000r\000b\000o\000x)
endobj
324 0 obj
-<< /S /GoTo /D (subsection.18.4) >>
+<< /S /GoTo /D (subsection.18.3) >>
endobj
327 0 obj
-(\376\377\000L\000i\000g\000n\000e\000s\000\040\000e\000n\000\040\000p\000o\000i\000n\000t\000i\000l\000l\000\351\000s)
+(\376\377\000N\000o\000t\000e\000s\000\040\000d\000a\000n\000s\000\040\000l\000e\000s\000\040\000t\000a\000b\000l\000e\000a\000u\000x)
endobj
328 0 obj
-<< /S /GoTo /D (subsection.18.5) >>
+<< /S /GoTo /D (subsection.18.4) >>
endobj
331 0 obj
-(\376\377\000D\000e\000s\000\040\000l\000i\000g\000n\000e\000s\000\040\000p\000o\000i\000n\000t\000i\000l\000l\000\351\000e\000s\000\040\000q\000u\000i\000\040\000n\000e\000\040\000s\000o\000n\000t\000\040\000p\000l\000u\000s\000\040\000p\000o\000i\000n\000t\000i\000l\000l\000\351\000e\000s)
+(\376\377\000L\000i\000g\000n\000e\000s\000\040\000e\000n\000\040\000p\000o\000i\000n\000t\000i\000l\000l\000\351\000s)
endobj
332 0 obj
-<< /S /GoTo /D (subsection.18.6) >>
+<< /S /GoTo /D (subsection.18.5) >>
endobj
335 0 obj
-(\376\377\000L\000i\000g\000n\000e\000s\000\040\000e\000n\000\040\000t\000i\000r\000e\000t\000\351\000s)
+(\376\377\000D\000e\000s\000\040\000l\000i\000g\000n\000e\000s\000\040\000p\000o\000i\000n\000t\000i\000l\000l\000\351\000e\000s\000\040\000q\000u\000i\000\040\000n\000e\000\040\000s\000o\000n\000t\000\040\000p\000l\000u\000s\000\040\000p\000o\000i\000n\000t\000i\000l\000l\000\351\000e\000s)
endobj
336 0 obj
-<< /S /GoTo /D (subsection.18.7) >>
+<< /S /GoTo /D (subsection.18.6) >>
endobj
339 0 obj
-(\376\377\000E\000m\000p\000i\000l\000e\000m\000e\000n\000t\000s\000\040\000d\000e\000\040\000m\000a\000t\000r\000i\000c\000e\000s)
+(\376\377\000L\000i\000g\000n\000e\000s\000\040\000e\000n\000\040\000t\000i\000r\000e\000t\000\351\000s)
endobj
340 0 obj
-<< /S /GoTo /D (subsection.18.8) >>
+<< /S /GoTo /D (subsection.18.7) >>
endobj
343 0 obj
-(\376\377\000C\000o\000m\000m\000e\000n\000t\000\040\000s\000u\000r\000l\000i\000g\000n\000e\000r\000\040\000l\000e\000s\000\040\000c\000a\000s\000e\000s\000\040\000d\000'\000u\000n\000e\000\040\000m\000a\000t\000r\000i\000c\000e)
+(\376\377\000E\000m\000p\000i\000l\000e\000m\000e\000n\000t\000s\000\040\000d\000e\000\040\000m\000a\000t\000r\000i\000c\000e\000s)
endobj
344 0 obj
-<< /S /GoTo /D (subsection.18.9) >>
+<< /S /GoTo /D (subsection.18.8) >>
endobj
347 0 obj
-(\376\377\000U\000t\000i\000l\000i\000s\000a\000t\000i\000o\000n\000\040\000d\000e\000\040\000\134\000S\000u\000b\000M\000a\000t\000r\000i\000x\000\040\000d\000a\000n\000s\000\040\000l\000e\000\040\000\134\000C\000o\000d\000e\000B\000e\000f\000o\000r\000e)
+(\376\377\000C\000o\000m\000m\000e\000n\000t\000\040\000s\000u\000r\000l\000i\000g\000n\000e\000r\000\040\000l\000e\000s\000\040\000c\000a\000s\000e\000s\000\040\000d\000'\000u\000n\000e\000\040\000m\000a\000t\000r\000i\000c\000e)
endobj
348 0 obj
-<< /S /GoTo /D (subsection.18.10) >>
+<< /S /GoTo /D (subsection.18.9) >>
endobj
351 0 obj
-(\376\377\000U\000n\000\040\000t\000a\000b\000l\000e\000a\000u\000\040\000t\000r\000i\000a\000n\000g\000u\000l\000a\000i\000r\000e)
+(\376\377\000U\000t\000i\000l\000i\000s\000a\000t\000i\000o\000n\000\040\000d\000e\000\040\000\134\000S\000u\000b\000M\000a\000t\000r\000i\000x\000\040\000d\000a\000n\000s\000\040\000l\000e\000\040\000\134\000C\000o\000d\000e\000B\000e\000f\000o\000r\000e)
endobj
352 0 obj
-<< /S /GoTo /D (section*.2) >>
+<< /S /GoTo /D (subsection.18.10) >>
endobj
355 0 obj
-(\376\377\000I\000n\000d\000e\000x)
+(\376\377\000U\000n\000\040\000t\000a\000b\000l\000e\000a\000u\000\040\000t\000r\000i\000a\000n\000g\000u\000l\000a\000i\000r\000e)
endobj
356 0 obj
-<< /S /GoTo /D [ 357 0 R /Fit ] >>
+<< /S /GoTo /D (section*.2) >>
endobj
-360 0 obj
-<< /Filter /FlateDecode /Length 10176 >>
-stream
-x}I%~;J  Td(4RukF1#i ̒009if\nn2On?d/fotg׿1!ΘIg?+χM*pC,~j@k[CAv1-:ǭz.n!Eښ)7qy ovS7<j?)hZNdR=4A[iTF{+]N2Qq)lPImճ T_ech o6ukPne)
-=CoLެ%x'z&8 й2<1en-zO+K4Zi+t!ow^r'۱jT oaXB|veլykV
-OAOIS_@Ply0Ҧ Gn'CKnvtR朻c.,wW7Y:o_nxky'HOˍۅ{{)js c;݀6響%QƆ(¬v_"Ķ
-r{4'g
-Uc!ƹ:)%aސ; ^.)r2Ryј8Ku?4Ҿ ffy
-fmJXC=T'`K[d𤄶- =- Z3`+f‚KtMY讥z7@3<yFb(aSI*< _ %@E&6`FڢO LAŖye%(q4$b
-P:PF|vÄM<"Q%wVb8Yw Խd1B&,Ok$D&4NVW8=is1n3hPA l[R9T} 
-lHVٹC#TX/;\UD{qJU+viFvI-^P)9Dy#EP$*,cAWlӌH[\!st#H*B.)N[ d: xlԬH\[:
-<L0iajWo;*Wj-s01Ol5FrqDJє5ˆ xDViZ |G{dPY
-b^*1D#V olbI
-ǡS*LL1U,TW<Ql[-jPt/EGUQï'/suz4uDLaU$+h$:*zu QAv9b!SKdS &$h: O5HJPa~Ƚ;@!yB(k421m.8nx\JkVDAK".i6H7䴨N!!OQӝj5e4 xDV*Jjb!B>'!y6SR407A6 %5ִW-(UW24v4/f qA|2 ćgݜKcTRp)!) 9y`[WBGC"N@0q
+359 0 obj
+(\376\377\000I\000n\000d\000e\000x)
-ux2
-A#óD{KSÌuf-965g)EкZȥ> !&Ճ4ڒ̨}!q{JG
-Ykz9c7Ab3DHa0DEڛWoRXaZ)H\!`P"f\'DP*~wK fTtx B, P~[P( hL=^QFyeRFԾ3c&-IwejmB.ηZky(9
-!%TTwLoz«1ː\~r4#jҘ4a Y ٧1J(Tb,'TvHPi\&6  P^cFS;"}1Ps$n/}%TgP)3eU&=qHP(&taq4a4FvJH2(rTk-Ȉ:`+ 8P{Tgbq2!#DrDR#1kHۻ*" UD|9؄3  :
-I>^ 5:KPUgTa\(>lX1&E M(*ye;aC r%pLANc9(rkc)PNec;)Z8bœIE4L%qDL&DEl8(-Sl),R`L(O≅L]<|\`Px(Fx1iBFQNZ l3sV
-Y9%kh0nflBrdݷZ46:q䴨U؈y=#Y;g)+
-U(xa3V -HKV=64! cYFc6D.J@]RV]L z|1H˜qገ#Ymc&I9J\*
-ٔS$j秬H@Ψ LѠ(С~ٛ7QH BQTűӬVc)6Ld-6J$']mG<TS R
-0I3o*JQHgp2mR/8_F"Mn a;GׂfFr U\AKe U %I4:ai3aQ6]+ N'TK .A#*J48i쳨}}vޮ% HDj134T(FT8&M(pǬvFl[]]k N'Tq .B&^(aLhjEU ky53O
-U a*fd
-QT(qLQ KY ۧ7xV5 O 38TL|\QˆQ
-KbwEELFst-kf(ӟPT ̸PZQ4A&> O3o,mvk4 T|/c*[_<W6f2,NEAQ4U؉-vi]p:vDx{N4UU"{Zɳ^N ^$^ԉ2aH
-*E%D/'JaސȽsQ {ר-vT qAj+ebUMDj`5gJ$#kU"{Bh?<pY6܄@"
-V`8iXO4&g"RXbjH8ZPk S u[5M\XD&Kdv 2TX?$q\,gjzQBӘh
-(M&Dx'J(ΈrZG((=pk(SeG]5[X0D&pLd
-Y/bMCc3T(
-QH]&=D'1vk~gO+ʕ>O30q3 !0nr1&!?\3t@~<{y}4##krvķK/ĝol
->’4(iH/#ͥ,t,j~djkl5[toķ0xN
-/J¡ЏJ+\v}Zjeby~U3è<D]xʨMsu%e}<*Y"~kf|kL%bV:r.:ùO*wLg5ZZgUs${#/&NI.`e}Jko*@[$zY:-|Sז8[RNnena 5o:g
-ގKƫ#>0I`v*UdܕoX> xIyuBm'oV%(0Q3OF0ZZu}Uc ohɉ,4xZTGVa91;6.$
-I^l%fޥ"M*٩ueZSJ 6Ho24ܗ궲.ȤΏ܆4
-z1;fFߣ8xsk=#%T:ޖm@AVA=ywb9oͱev?i!^X0+U]#9I# x蔏YI >麳;ťAɮu n #.?܋uM~r4(~zXbV3)2:]%IMُma
-|;:^ܧ05ޚ;//[<+ ]Hn®F̂R=*I._~=:{M܆/
-kjb.ױOwy.Wku>g ])ςUN-M.u )M1;EJ)q5ǰ;:9 [+gX
-i3ۥ1nު!?n^77Se_oʝTt]/d
+endobj
+360 0 obj
+<< /S /GoTo /D [ 361 0 R /Fit ] >>
+endobj
+364 0 obj
+<< /Filter /FlateDecode /Length 10167 >>
+stream
+x}I%9=;VZ2^@c.9]Fѝ5.Dg#2+tgI-&3O?yfl _~s7ger_oɘ}OxgLƤo3 E?+χ~'pC,kt5-!ڃ AA[vq )֌Ky@]".Zb$-.&Gg4𯓖TMr>mr|fo}įQ, `f7y_An.'-EىJBU?wpDX{ѿr+[M1{K4F0uIG- ,³+~o@-z*K4Zd+zcw^=q'u۱jT X +ïf[8'¦sa#jc$G YjC]ڊF_krEe5c83՚OyQxF SCg.uUmpѯI'oV]ݵ99,! b*0߻]+ 8-&m%.~o`z[W7_FG`<Olj
+eL("cg*,#h,C,P=$*d*q b)F1dgȩ=yUQf
+4w
+ڢ:hO[~ 3g|?P/QK9ogi'0pH.P͖8
+1 ݵT D\03GaY̾T%Z,X& ~Ll3F rk]emѧ@:wg[畅(ѐRnST)"4k76٦G$jq#%JL:za`YLK3 ]ldaA/@r)KtzqKAwTjWLS3諴pP${;E1T*T곏A R"iX&\]9
+=J1sj:-aD{qJuꓑw%٥)mr}p$uʩ(#/3)lRf&YҩRidd2+!IPt%I~ LWRGt8
+2
+%tqJ\[:
+bsXͳFݰ6="Q!Pnq51Qpkh!f;>H̳IMa dso Q5h5͋!mՆF 0FOQGd0}2 ć5[&1*o)\hSмPO QD!!AO[' Q8&4k7&#8
+!!T
+H_B
+*(wJeoւ(# i9WJUU!Bf5ei3JZd/
+pFȀc#@*d ^VTƀ$Fi8!II%X*x@ΑT ():]57c19(F0kqTMY 9B'N PFF S8,Lj$ƌj$>Oid$H,>B@_\ Q7.@`
+kƒǘIa# .^ 7k$m-#d2 pR%A[cKaLrd</Iњ^;#Lj.f'`*!(t4$b2',
+'fZzdLS$j\d
+A%X;j%6l HٹT"'
+S֝Q A2`m&d(WL} Hj,1Ib#ß)j6<ƞυHj1q6JX݂8"1z<,Y؜$7,]f6٦_$jp'Q eo%0tK qD$g8r
+X6f^@
+#F/,,2fNsE
+
+A%X;j%6l`cϦYFd~ ^
+ <TS  `g(T0RYehۤ$ _4qHDRbdkABP 2@B`:EcFP;,mj8ld i;o׊FIp0}:@%`BEcGR;S<Jp}}vޮ%a$cj1A#U*B4:aicVa&l[]]k*But !*B$0}_*qa&ky5'
+U a*42TFU8&)duxҦˬVAIF-ޮU aJ!(A쮰$vwjL&pk95'
+ _*4.TFV8&)huҦϬVIF-ޮuA5qLEsei&(&jX{bHIEɥ&Bdݬ,v:'/!]:eExLr")zWzRk+d(H*A%TVNV ; Z #Fmb R^)W5E"τHF@h` C%tD}ׅFyɳ^m8@"
+V`Tu֊&dlL
+idȽ8ZPk *-P&.XAh*E~ .NVI9#_ QW
+\V:FA[@QguAj<naH hEH)pLd
+qIVlƾo$(=e?/KOw?jr tŦ0?^
+ oM,29[{ZH.OJ
+UGy&,?`YkB.
+Cޑvi`KrB-{EXRXqm Hg`X;|zz>+(mm%}k
+ov<Iy|A7XsHfFv7G`S
+Edܕ/Y> Q Ϭߢ&\<tnmo[vO+. };=eA2Ց&?Jq?&Sq6 /yьc\7Np;R!>XyaJ^\"vkF Wjf]-TΡ>+m7!S=9vd?gi3|G%"fEq}8a]n˰!6 OdlXk}ϣQVORoHs$J4Cǃu;t/!iYB=ՄFeOys!Lކo2ǫCA_t1p<W"%'2̓'Rh%GCMWdE(0[anca'1(ty6CSZ@Spii9Kֱa=twqBMm6~745iB*0eSZgk\Ck*$ Oz>˟{HjP.^ tk߅X<Wz BE'}Q ilf&1?!ʔf]Yc~;Xԕ)G{CҾW7v w߻$%Nk-[ՒPXKAz_ܟ<VcuaNlmHc p xxö/l)kFEtDffĻXe=G9zGڇVw
+VQQ#cz4𢘓mE,9. ]mE7 uP]~ܽٹW[HQ%߄*4i#N,i3@B=>HJzC+n$\ 4hv2{mOmaX,ޢ DPZӹK]iN mڗz>46{͏I7ǃD.d ˍiɢؽ;8piK4ն/eCߗe N;δ0C(qPx#'"8˥ҪTu„o8P
+eПO!#Lh4Åt2VT^mȧ_:9X1[CU1}olfσV/P̩C[ZQ'=*ZUT/&}R&=jŠH#xF$ȧK--νeOFki{UޝXksh"~Wh BΪ!}:\f*AC|<h*1an]%0gFT=xYMhXr'j5UEIOBTOb~j Vp.&RجDIE,]|OiQ}\|"w{#vm}/`U{2 JX\m{tRI^h.-ӆ/
+@c<:.4hwgbo1BD6k<˓!cp<vU
endstream
endobj
-357 0 obj
-<< /Type /Page /Contents 360 0 R /Resources 359 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 390 0 R /Annots 391 0 R >>
+361 0 obj
+<< /Type /Page /Contents 364 0 R /Resources 363 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 394 0 R /Annots 395 0 R >>
endobj
-391 0 obj
-[ 358 0 R ]
+395 0 obj
+[ 362 0 R ]
endobj
-358 0 obj
-<< /Type /Annot /Border[0 0 1]/H/I/C[0 1 1] /Rect [ 78.374 76.495 499.819 87.952 ]
+362 0 obj
+<< /Type /Annot /Border[0 0 1]/H/I/C[0 1 1] /Rect [ 78.374 76.495 499.819 87.953 ]
/Subtype/Link/A<</Type/Action/S/URI/URI(https:www.tug.org/svn/texlive/trunk/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty)>>
>>
endobj
-361 0 obj
-<< /D [ 357 0 R /XYZ 78.37 808.885 null ] >>
+365 0 obj
+<< /D [ 361 0 R /XYZ 78.37 808.885 null ] >>
endobj
-362 0 obj
-<< /D [ 357 0 R /XYZ 79.37 771.024 null ] >>
+366 0 obj
+<< /D [ 361 0 R /XYZ 79.37 771.024 null ] >>
endobj
-359 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F16 363 0 R /F17 364 0 R /F30 365 0 R /F39 366 0 R /F48 367 0 R /F47 368 0 R /F49 369 0 R /F50 370 0 R /F29 371 0 R /F52 372 0 R /F41 373 0 R /F42 374 0 R /F23 375 0 R /F51 376 0 R /F15 377 0 R /F20 378 0 R /F55 379 0 R /F56 380 0 R /F57 381 0 R /F58 382 0 R /F65 383 0 R /F66 384 0 R /F67 385 0 R /F45 386 0 R /F40 387 0 R /F46 388 0 R /F59 389 0 R >> /ProcSet [ /PDF /Text ] >>
+363 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F16 367 0 R /F17 368 0 R /F30 369 0 R /F39 370 0 R /F48 371 0 R /F47 372 0 R /F49 373 0 R /F50 374 0 R /F29 375 0 R /F52 376 0 R /F41 377 0 R /F42 378 0 R /F23 379 0 R /F51 380 0 R /F15 381 0 R /F20 382 0 R /F55 383 0 R /F56 384 0 R /F57 385 0 R /F58 386 0 R /F65 387 0 R /F66 388 0 R /F67 389 0 R /F45 390 0 R /F40 391 0 R /F46 392 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-396 0 obj
+400 0 obj
<< /Filter /FlateDecode /Length 4030 >>
stream
x5hgR0u`h
@@ -691,51 +697,45 @@ XG7a ( /PvJtBO|}$R? [#,FY" [~_~yT
dp6ɞV p,~5sɡuPK
o^CЊ,M$HSl  +ؙRGpS/Xx[i@qa8m
`>{ 1ڶz9T/Qr,&`[y-bZżHVo9o]kYSa!&Ƹ~+ljS1}(فpG%
-Rn}!6jV0dCDo$Xڵ@$?M " T} uw] c\tM%,ʳZ.G|6pI`"!n۱A#p"ayGL%Ԁ>XzˆA/鍡DC*Яm#AEBh В(pr}öU@ح˶ٕk 끔#iyy3Y;2OJ[yp9p=[?Q&'Z[!,^((8⌰j by_YڬW\D(^ MPFFQ* 1#5<=a(^gLjgu^IF_Ev=} XźGMc3„{]kQ3.p+l.LF)1tާpϨ~S.l.!D@zХ' i:Z} \|LȜNd]
-%:,G̚cojQ* ,,U'[1B,*RaKS^n$Pֆ-KZgK%nUf4akD!0BGDa"+W0zlr@n/u]@^A)MKu!8"edo<3~Υ8vc%Z+ պ.۞.`z?y$5f27m# ҦM Yv3EY]~ P&٧]]fnUD,>5Y8?:2 dl_!'|5J6[E}n3@1H0KB:ʍۭ3kʥkϢlc܄r̗s,hD!6^ZwcT)^r Pm'  e2
-QDiҖ81W6ny0%eZM}Ka5]j`7aM#lJ&r=: ou*9sbD^L߅yQ1lj9@k%ˎc542
-zJ=nMzZJ, % >`aE~wRl j~^5ZikC.ĥ
-:RDbV^
-ǯˤ%]㷤< &ɉ2Lo#LG wA 8Ea t
-=ʰG,#niԠ t.&e3 E3h/oìsX ?n3
-m'dH:LyM=#疘7KT XcYH[`Ub- .o5uR`t~XwG@|q 2847p#)3XPnw^WH(+
-_23p)azdpv ⴭˍ!Z!nҙ!ƴI,]kCu2ޭ7pm۵e5 *{P|%$Z
-
-ס 6-zaXz;ˆPBN:]ׅZ4}R`HG mp&WaDztIX ȿQCH[DBdή3!T^C=Kr&veQ_
-1/[4%Aݔi} LCc4_41T@'7ƻN P"t#19UJ9Pk(=Yk2AOUxV.#vZ))Ytm4gGA͢i\|\{Z IH{;:jsIj}0)*p'dKX|}e2a–Ziwg꛵[@#܁xzHLSCL􇚝;U2a܏9A: aJr~kR)}ECf\I4?@CW
+Rn}!6jV0dCDo$Xڵ@$?M " T} uw] c\tM%,ʳZ.G|6pI`"!n۱A#p"ayGL%Ԁ>XzˆA/鍡DC*Яm#AEBh В(pr}öU@ح˶ٕk 끔#iyy3Y;2OJ[yp9p=[?Q&'Z[!,^((8⌰j c&[zE MŀЄ
+mC}
+?"aJ 'K ]*pFU۪qͥDŽD["^ϲqĬ96 &f5Ȫ
+emز˨qVTy]eNfkѾFR-z #zD4-!R+,q%&w T RU t)..*M.aHܤH49^P#R1*M0\Zc'>Ve(iYa Z!
+AXm&Cq6 "m:Dze7S9
+уu?ka&CT.iu988;b[<ﮕ2BMVKs|hxT,F_ǵWʐ$'zjλ3;y#;gBt!*p'dKX|}e2a–Ziwg꛵[@#܁xzHLSCL􇚝;U2a܏9A: aJr~kR)}ECf\I4?@CW
3sP*[Zp
Ju01 ryL,
-)z:-̮kN/=9$&!-`"F5F<hcx.ʰG,ze~-AdEoeT5jZEX:VTMc(a͊>p7@M$v_=yQL}JyTC4h'"qqb³&ܫyiƪG<j"? W||@x,MKl:K?
-ms@o<E
-⭈cy킻sy>G:pa'tec:eHZ;Ҙn]5~1p-X1+_ސM<LfƂGBӸdgJoM9HЀ1wFqF\~$&&B>p0jd\n3)}ln[*d56U4m7q31IvKm tWLˡZјIDaF .g(V`u JhxZ]5ؚ<_m!Ĕr8%2vTB,IFv
-6i^R
+)z:-̮kN/=9$&!-`"F5F<hcx.ʰG,ze~-AdEoeT5jZEX:VTMc(a͊>p7@M$v_=yQL}JyTC4h'"qqb³&ܫyiƪG<j"? W||@x,MKl:K?
+0jpv=CQE Ǜֺ Uﺭ9D
+M4hs_!ܕ!,ѵ#bI
+4+P / ^L
endstream
endobj
-395 0 obj
-<< /Type /Page /Contents 396 0 R /Resources 394 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 390 0 R /Annots 401 0 R >>
+399 0 obj
+<< /Type /Page /Contents 400 0 R /Resources 398 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 394 0 R /Annots 405 0 R >>
endobj
-401 0 obj
-[ 393 0 R 392 0 R ]
+405 0 obj
+[ 397 0 R 396 0 R ]
endobj
-393 0 obj
+397 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 189.926 133.102 201.881 145.058 ]/A << /S /GoTo /D (section.7) >> >>
endobj
-392 0 obj
+396 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 317.374 85.96 327.831 97.417 ]/A << /S /GoTo /D (subsection.8.2) >> >>
endobj
-397 0 obj
-<< /D [ 395 0 R /XYZ 78.37 808.885 null ] >>
+401 0 obj
+<< /D [ 399 0 R /XYZ 78.37 808.885 null ] >>
endobj
5 0 obj
-<< /D [ 395 0 R /XYZ 79.37 771.024 null ] >>
+<< /D [ 399 0 R /XYZ 79.37 771.024 null ] >>
endobj
9 0 obj
-<< /D [ 395 0 R /XYZ 79.37 443.151 null ] >>
+<< /D [ 399 0 R /XYZ 79.37 443.151 null ] >>
endobj
-394 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 398 0 R /F15 377 0 R /F55 379 0 R /F56 380 0 R /F58 382 0 R /F67 385 0 R /F70 399 0 R /F65 383 0 R /F29 371 0 R /F51 376 0 R /F26 400 0 R /F20 378 0 R /F40 387 0 R /F59 389 0 R /F46 388 0 R >> /ProcSet [ /PDF /Text ] >>
+398 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 402 0 R /F15 381 0 R /F55 383 0 R /F56 384 0 R /F58 386 0 R /F67 389 0 R /F70 403 0 R /F65 387 0 R /F29 375 0 R /F51 380 0 R /F26 404 0 R /F20 382 0 R /F40 391 0 R /F59 393 0 R /F46 392 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-404 0 obj
+408 0 obj
<< /Filter /FlateDecode /Length 5116 >>
stream
x]K$ׯ
@@ -764,1218 +764,1274 @@ E;}W(m!E;71⌾HM>X8ۗ8qp9{p9x^ o'[ṪΣ!5qvr}
VH(,]9,l˷ӫ??&`^WPjr~rT|
endstream
endobj
-403 0 obj
-<< /Type /Page /Contents 404 0 R /Resources 402 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 390 0 R >>
+407 0 obj
+<< /Type /Page /Contents 408 0 R /Resources 406 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 394 0 R >>
endobj
-405 0 obj
-<< /D [ 403 0 R /XYZ 78.37 808.885 null ] >>
+409 0 obj
+<< /D [ 407 0 R /XYZ 78.37 808.885 null ] >>
endobj
13 0 obj
-<< /D [ 403 0 R /XYZ 79.37 771.024 null ] >>
+<< /D [ 407 0 R /XYZ 79.37 771.024 null ] >>
endobj
-407 0 obj
-<< /D [ 403 0 R /XYZ 337.806 486.345 null ] >>
+411 0 obj
+<< /D [ 407 0 R /XYZ 337.806 486.345 null ] >>
endobj
-408 0 obj
-<< /D [ 403 0 R /XYZ 337.806 474.894 null ] >>
+412 0 obj
+<< /D [ 407 0 R /XYZ 337.806 474.894 null ] >>
endobj
-409 0 obj
-<< /D [ 403 0 R /XYZ 337.806 317.011 null ] >>
+413 0 obj
+<< /D [ 407 0 R /XYZ 337.806 317.011 null ] >>
endobj
-410 0 obj
-<< /D [ 403 0 R /XYZ 337.806 305.56 null ] >>
+414 0 obj
+<< /D [ 407 0 R /XYZ 337.806 305.56 null ] >>
endobj
-402 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 398 0 R /F15 377 0 R /F55 379 0 R /F56 380 0 R /F23 375 0 R /F20 378 0 R /F29 371 0 R /F51 376 0 R /F54 406 0 R /F52 372 0 R /F41 373 0 R /F26 400 0 R /F65 383 0 R /F57 381 0 R >> /ProcSet [ /PDF /Text ] >>
+406 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 402 0 R /F15 381 0 R /F55 383 0 R /F56 384 0 R /F23 379 0 R /F20 382 0 R /F29 375 0 R /F51 380 0 R /F54 410 0 R /F52 376 0 R /F41 377 0 R /F26 404 0 R /F65 387 0 R /F57 385 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-417 0 obj
-<< /Filter /FlateDecode /Length 5479 >>
-stream
-x=ˎ$78ڇt9 xO`N}^ԋBY=ve2(/Q
-_$OHj' "Woj\>E?ϭyŕB>xhpó J4a%@$.1'kV GJy!EYXc+QL#Wg^_'2 .qN93IU+ӨXھDxr7mgP0*ken΅p¥rZ7\T6A%$f.7+cWF[k͇$@R*'G[T
-XDP!㩃 1B
-q3u`-ꢹU`]H& 'NLtO"W䑡X=E Oa#i,H$eUWǸHЌSk$EKj֞'ljתNuyB#ڬpf:c*V%^!YC0G#kaM C
-$= boln{ !ТmOWʵ(jk#@ѝѥjUo2N[Ll ?l57 dz-,lSf2R@ٱY<Y&ANY5Aj&R<=4x}쎵`Muk006e^kO”d=Qk5 `TU8i*oq8rɴFA2gѽ e,)*q-TUi8 I\_diG>8^aUݶjU{0 y%#IגꦠJJRw CŔ SEصNٵte^S> H
-5d0(ê&\m F EIt}c͟+ CSg< -^kMP/o߸Y5{ smڜJŝn^_i/xv&Z!h5vP}Vok7:N%=H
-nBRaL+ ͖mvu_J]uaM]- X_r;Q3=}a+IeU$ny(_Wm
-ÿ&(򬰨kL}AJ 9ҙ31oV^ZmCت}uRAR=:]i۵ƪc^һ[oh!Pk}vpQ/>CU˞7ח~Tq/aybN}Ϲλ߹)ՖzCJI?~fHq ݪ^"$9?-ORjZC%l#HHqZM[
-zNsk3@ ɸ4*ٻz#T̿$m\a_- kBd|<k؂}ҰD-ZC<C3yI
-٘JeoWcC e!Z}&栓Ws[wćsסwN 3cJH4P}G;0;YV0Qc@3N 뱴ƻu|cFWib\Av>_|K)#%' ,xcC.IMWaT2\uS69
-]wPx²W;f0I괘4dT H-+.>S@h"8Nw-M@[{v}Kr$ F#]RO羝%fQJF@F!$(cf@_Y9ݖ j ȗoᮡX('g7Q܎0$5WYCtVs*W
-G,9J:18BJ yԫIJmu
-`,8w%W UPX%rT{A-jVWU* 5*AQ#3!%
-C62}uz@R
-& {L̰b79Ԁ$QFSEZE!<M>kdp?3 &aAG
-n$k(O£a%PM'~BRݪY!+>URcؕ۔$Ҍ [S
-StW2mO5BӱrVBv\VڍX7p[1W5S*5d|nC8
-1%n85R*FO*XD Ð\,x!QyXMN̨y:ymzX:2c޴X \_[gֻhcAe.NF~'
-:Z'!3{(>f[R_;( 2ܤ{]VaNPl-
-ϳAUό0 ;dLpln;eEQ.BDM_y﴾QntNQᥳwjpSA0WQ 3fĽ@ ^FtWϨZ]YPysw9r2~r\ǔjܗ*ur\<Ʉ5A`N# XeZW5h8Y V1ߦ?\0x:k؂}ҰDY[DUb+eŸŸ'+GŸǢ׷x_qœ0Sr|S٪$ ][ո; ύj\L
-'qu^e~;(<wAn5.'k㚷G1Q(}>qŸbG1Q(}>qŸbG1?n*-!_r D+*}T`2t5Qܺ az!oqj'+Υ26jj5uIWK_ٔhMq;+\f#W)v56??4/@}Ib%avR\{7=uun N7iP_r[t(zk[s^g<Nʏ\2ڑ\7FGVx@~{lRrSUī?aF
-uo)pdv֧&E;G7]lf1,񜦧Zfj/iuYϦ90-GvYA
-Rj-\Y`Et3Gpi.e]~s<Q|Oeps~^9ոR=oXNH 럚,: 6t歡AA%X$654@0 G1J8}o^Pv;{mrcF:s<+S0;} b[veѝ"ϾYHO[#:7C
-Ա֔iXWz:)[nrg#F/tQA>%<3(_Z~gV=F%-gCů2X+{_sg)vp[=s- `=HʵxnRQ)nUIh\CXxEw7~1{( ˗͝xc 9]B'[P \n:
-;aFŹN).X7LjlU?z0ZFm{ ~C%b([YK:?1vi{mi4)= ~b8vwE*_ɰ%A^vH?paTp!g;CwsդMlo4]Vڳt'5V6;}KxR M5W-rRГn VGwM4l`ykSۓ*a[&] GWG!_^uwzv?d o*ZH LK1_~
+421 0 obj
+<< /Filter /FlateDecode /Length 5800 >>
+stream
+x=ˎ$9n8*VPhkr}[k7)"2;3SAQ|$]ӓ>/_xuqfƩ/OE.>/ކx|u:~˗[
++\}#PC ԇg-( A+Db%=H3ArJ?H58O6Ĩv( Uq>
+!?q4r??&$J5:̄&WLcZZ%ݤ!Ke^?(AT¨ܮ.% "&9^uŧJ;R nL-JIT3oWƮ Iךω$N(
+*BHQT!ᩁ Lq3u-T5܂q"0ҮakUDM&2B'+XP>/Ÿ{KtSHDlZ0Ms;IX*1*Ri)5Z5URTTV5k FuyB3Y#>*>Lua*V%^`Y҃3G#k!MizU1WZR&lK?n^=Qw+"%[d5ÈJ+C*4*7n)]o:Usq~5uCMRy6툍!S
+iGwwv>mg7۾]EMqOd}f`v~| ؏ }7gC Unl56QtaW۬>Z/uHTQ+[Խ_39ݿ3}Wq[Ҝt"iNeji<|]?Bƴ2@Jb"pR|g6hF!* =0jW(&w8H?ʠ]ip4E :2> .NSWϼVeiL`|ܿBt ROK)Wi3ecR+/Qs6'gj! Zq8}x?%f 326Jo~U}FoWDTFk.>pU_<᫐.=kZzO|kZ oTCoBCpT!8u@ldcjuAs:BUbď_P\t}+qQ/_}mZ`gyB^WsHKg+8A?D
+e1d]>.VU8E%J
+xN?pm3Ѐ1ɨ<
+>,z+lZϥڛ+xhSǓpE~k Ӱ_?K
+G&Q0bKU?Ww-"K|c ¡fy6҆Ůч7uYڤ.0}T} n.hvB 3YFC3kupV.; , mD$?IZ⨿rg S%Krܝ\>S&h¨xR0+ Ǧ.s{uKU?zzmD!(X!̗fh)<o@-9PWjV#=32zfKVj Ö:策B]#
+Oo͆o"
+<^AaiQ2Ox;1CG8KM0-NxPZxWlQZ5H -j F^֤JO cc5ΥDd$qC7|1u<@ԪP2s]O hL03@ !\։@"|kQ!+7qwc2J OWE:ˊ8 a
+v;B7LWq~4 |’&f ‚sa
+9HICxԭF{ISxƹC(7AuLUr{}&:h_3 +,)SV굷n"`^#{fdih6N:mQSF%wG}3T["Zk# Ka2l3ZVbw1Ta4/"'
+eipQM&-I{/Br}Y >VՒx4%LX'n\{tOTJNMІPrү}/Pc`)Yjf*q\7BH3e>wUsL~N`:-"tu %NނhWs=P(aZӀo74]*wɾ
+5O'm
+seYS~l͛igا)DŽzIY.7ȗ9s;+;j`0tv㻓M6>l=2
+<U~>2Bp1eɱ'cea;K3;ӷωm=BD`{gfl@㔽?]: N6c[&b{= q|]mm}t]qdwjy滦j`&]W{:uQ\j\9LE5ʺ=x5[:9S;ZO&Usb |(V4?}R;e7YW+ΜL֭um9+9GsIk;
+ܑ8]ys]1ڇUv0OTxԻ0kzrnVdsF23y7S[r0tks9VvƜ\y2Dks2d.*Mˊ}r=93dŔ'/m;Q<X&-RkyOes!wL 4iﴁ`Ki%u0kg`珞#;{:670Nm'C~9abDCT`F[Zt` ZHڽ:{TGƺyƻ-ì^ڮ(|^=[g_{:azw5aL9f 0Jev3(  7 Y\ٳA!]l2Yn}qiNSMTopxbNݬ:6 Yn:ҕjSsMo Gr~ϻ'ǔ[8HmJ<LD%*;7Ŧo^\]5yi؏ =թ;ЩIc3c^>zh []
+0EӬk!0{kPP(F7C=D\@1CLUƙA1
+#1Ⱦu3-3o螇Lg%'9;Mtl&tڅ8{L=Tbk1@" X2-֨wFڷ= l$SuUh]xf$.~֕@6<b_&: fJ908S!ul=l>jb/q w0G݀N\Gdp|/q`b+[uWpCpHmA#ԃtD
+;SIPAu;[r,+u<lzx3ykj̿$I>0ZEUhbu:wc" :ǝZ |LI/yuGtڵ\zqS0tG_ѵhr×?68ܝǀؖ~T62NW:':[Oj$<2Q*@iUt§쐫ͅ[7 Q`.E8«C)&N~i Gӱo᧔\wzԮ1;&YPg)(j c<ƥɳ;EG޿ on
+cU+44䱮)6d} qS);Rэ[3Ne2,xslP{V׽hnb=Ӻ;=G<XQs^<{܎|+_ü'#oaԃӋ
+\T51T6to&d
endstream
endobj
-416 0 obj
-<< /Type /Page /Contents 417 0 R /Resources 415 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 390 0 R /Annots 420 0 R >>
-endobj
420 0 obj
-[ 411 0 R 412 0 R ]
+<< /Type /Page /Contents 421 0 R /Resources 419 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 394 0 R /Annots 424 0 R >>
endobj
-411 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 233.018 77.446 250.058 88.903 ]/A << /S /GoTo /D (subsection.14.5) >> >>
+424 0 obj
+[ 415 0 R 416 0 R 417 0 R 418 0 R ]
endobj
-412 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 263.113 77.446 273.57 88.903 ]/A << /S /GoTo /D (subsection.14.5) >> >>
+415 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 233.018 85.96 250.058 97.417 ]/A << /S /GoTo /D (subsection.14.5) >> >>
+endobj
+416 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 263.113 85.96 273.57 97.417 ]/A << /S /GoTo /D (subsection.14.5) >> >>
+endobj
+417 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 410.999 67.03 417.223 78.488 ]/A << /S /GoTo /D (section.5) >> >>
endobj
418 0 obj
-<< /D [ 416 0 R /XYZ 78.37 808.885 null ] >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 427.927 67.03 438.384 78.488 ]/A << /S /GoTo /D (section.5) >> >>
+endobj
+422 0 obj
+<< /D [ 420 0 R /XYZ 78.37 808.885 null ] >>
endobj
17 0 obj
-<< /D [ 416 0 R /XYZ 79.37 771.024 null ] >>
+<< /D [ 420 0 R /XYZ 79.37 771.024 null ] >>
endobj
21 0 obj
-<< /D [ 416 0 R /XYZ 79.37 734.627 null ] >>
+<< /D [ 420 0 R /XYZ 79.37 734.627 null ] >>
endobj
-415 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 398 0 R /F15 377 0 R /F55 379 0 R /F56 380 0 R /F58 382 0 R /F23 375 0 R /F29 371 0 R /F20 378 0 R /F57 381 0 R /F21 419 0 R /F65 383 0 R /F40 387 0 R /F59 389 0 R /F46 388 0 R >> /ProcSet [ /PDF /Text ] >>
+419 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 402 0 R /F15 381 0 R /F55 383 0 R /F56 384 0 R /F58 386 0 R /F23 379 0 R /F29 375 0 R /F20 382 0 R /F57 385 0 R /F21 423 0 R /F65 387 0 R /F40 391 0 R /F59 393 0 R /F46 392 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-432 0 obj
-<< /Filter /FlateDecode /Length 5033 >>
-stream
-xڵ\9$;Wk<
- tVv>5ce>cٿA:"2ꪈPPEH"/~/+{":_>u Qc.)!7_~ާJO%)鯿 1fZ"&j|ށz} 寿I[^~Ǘ?DMT ͽppkXF\;8b s^HyS^Z|~Z[a,ON_kBwKxn။=%LmueU~{xɦi"^ dS~tژrǪJZ\'7r
-,vZ9wzaꀢZ
-0Nia7f.Ku2%Pdp̵*U]$I-UccObzjNNrgcj'6MݰrlTeZׇ2i?lܼ\uf^ HX(NX=oGh 21+=Q4
-|[@yƫOzaI3
-7~!WިhhϲY8?*k_ ?'7KWj"UcCo4z-tA4NjvO$#t'1%(P]
-Uu)
-0[+
-IG*?02=4L=ʪb:!¬fC,^bA2;y,;(׫ Hޗ1״?!״$`pyl0mEȾGO0u 'dsY5Q_eGޞ q)#όQ A&T^
-
-#Z
-9fNkڀeaZk>bn/(bhjޙo 0@ۀKveXA'4&%װRYNa#ggn~h-O":bdF}z Ӽ۳V^mv&Sw|_*ph>4T.Dv:.Cwؐ[sOXZ'.Rr-R ~Z*1nƭ'7k\'P=LʷsqTqU:^ɨaGnyytVۙz[#Y(d~ ۱FtK\Y0XCwX)f6ܑ\l=32P-V35V\lX ~߯ASbWy"̝ v1n0_vL
-kQ0:8ܳ~C}Z 2HecWnxɷ:SnDPW NZFα-HjRn[u?i='$ 8tL9k!K&0{gi?(!5M:J##~zG
--sg.\qnxʠUmLpG^1T:=.S_CT9t>A"`81-ډr9P;T&LRRI-wۥ<zm
-P_cIO(Qe<q[ xr ܻۻG4>jU^JNbVZs廇6P}3Pyh iíy!.!"J(v6$;XHʬ)ox}InuAgtцV?M@gYs?4ΨkxrVl3kզav#<ȶqZFZZaZ/[`c."#R)=*T{ᥨs`I;˝~b8,篸\h><wBiN=4(j.-
-,Ӝnvh(=(S䔱bN( EmxJe4s ө#^$h-ԑg|jV/͉7rz'_z69L󭂥]N`_Clyܜ2G̕%d;uzgq!NJayS˦R4fAnFg&Du>sİS|I-P@;C.&xvyNrՕoבI¹Wւv_I7! 7{w}ٶTi@MԴ/g<(2.쁗{Q .aS 0S`o*ZtaDIM=t;%q \ 4\qQzmmlSmvϦ?V}Gf΅;a.4|3,wytߋSytZXLx`Y9nXwP9+'6=IVhEww&,|)g7[.f|=Ǿo#' >ΕϿ3APuY8 H+2r: +:2;uB&9_onr/Oy"z* %/CO'WM H`st(&6.;=ۑms?]@(ծq)h8エɿ!:F7n?
-/u$<NF&6zR%P"(-%4%4i)OOۡdPGxvHLq HMjs],lFnL1/G@ڨL}AMs)"wOpfQ(MPeÇ1{#U svsjYumж ~bvV&Xgd-_; HFJg#ڢIkY@ArVE>ӳnRgAܯa#<^vxeq43;:5zf0w|`毧o;~kht
-SА|c7!^]ι1cķ5HUwv>͆3q1~&[[iR *a,9ntz3 6+/a4r!j mftyӁx(& ى OO\Y 9L\ݐ.,KZlb^PM=si$>JTN8IG7
-TV+! 1
+436 0 obj
+<< /Filter /FlateDecode /Length 4709 >>
+stream
+xڵ$-߯D
+_?ehnJΠMJJ).]J}]A*aY<Jf]ᬈ-]ӈ|+w jeCq
+H9V@7?@+$S: jbX)lU7%oWWoym`%Lp3ooF#yyCHLITݖt]ZE~.dc+:O++TP ˮNeWR޻MHR0Z 'ݴUqQh|!FL<P:W(:ڙ6/,#Zkhle<'QH9\oވOWY+ ~¨mpPigiLp'fzYfr懮$>7#"rջW
+Fv(lWWf@j}}66^On\
+D WC+ad1z$=Neќ</ QY#4|w$[anEx~^y]yh
+oV6g ?+,oݭ̢Dk+e-=2"<*LEnWRtg0eշFzrŦh9HPGV*ՙF*7x8@O-sx0Ruu:h e[EAIsI?( 1NЬ2Akw+*tlWJ KE4d< w $nǗWo_0ciBi$_ml,DmLĠ|[=ٽn#BFܖU UU<y{Ms!#} Q יA&^
+RG
+ -}4i J[QV1I[u
+
+eZV NgۛES,Kk_j Ap<rdmT#d>mjt 糩 ͻ
+gMƿڃ_YPE^CRpr<3ѓLE3wiX51݉ѝǬCQR唅*r6.;1)@3e4s husƳ4aC5&)qjѧsvgIͮ XFF}=;1ع#,C<nnI̕u77aaHO^Y]&\f=m_2GWjtKo5&9۲ø_fvFáϜ;X!}gHeT%3^klǹC+~WITpWՅW͇LN[0~F8e}AwrC6}/@eH{?ʕ |6G=6G;gR5`dWB+&/{x&<^;;꼮c1nw@Vǎ?D$3~۰wHdvkR33o)ؼ-.T6Gi?/y*5 耲g=JW+ܓf?QOu$Xi׼:vH9˻kʿ,o8o6]z| *%̑ѿ,P^;UR4?ĸ~7AUhB)Ve u
+5@IH4pg"d u[Zt^h3{&@O;3~tFvPPiG yԏ!Ml^XO?~D111\G;察Rx /^D9X>J_TR* *GBmÉGy(a@< H,-o,X G0ِ5pgleub+.d9wRR5lVG1`g[F"pΕ^(Qs4Se
+
+]s#8϶ı1~ʃax p{z!(J1+B04c:!wS5C_$&o0i1plq97QOƤ:k
+"v Nl猆
endstream
endobj
-431 0 obj
-<< /Type /Page /Contents 432 0 R /Resources 430 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 390 0 R /Annots 435 0 R >>
-endobj
435 0 obj
-[ 421 0 R 422 0 R 423 0 R 424 0 R 425 0 R 426 0 R 427 0 R 428 0 R 429 0 R 413 0 R 414 0 R ]
+<< /Type /Page /Contents 436 0 R /Resources 434 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 394 0 R /Annots 439 0 R >>
endobj
-421 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 328.934 580.721 340.889 592.676 ]/A << /S /GoTo /D (subsection.18.6) >> >>
-endobj
-422 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 214.424 530.024 226.379 540.903 ]/A << /S /GoTo /D (subsection.18.1) >> >>
-endobj
-423 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 302.553 419.259 314.508 431.214 ]/A << /S /GoTo /D (section.12) >> >>
-endobj
-424 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 136.536 363.781 143.51 377.297 ]/A << /S /GoTo /D (section.5) >> >>
+439 0 obj
+[ 425 0 R 426 0 R 427 0 R 428 0 R 429 0 R 430 0 R 431 0 R 432 0 R 433 0 R ]
endobj
425 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 156.461 363.781 163.435 377.297 ]/A << /S /GoTo /D (section.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 328.934 600.532 340.889 612.487 ]/A << /S /GoTo /D (subsection.18.6) >> >>
endobj
426 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 247.43 351.334 267.136 362.293 ]/A << /S /GoTo /D (subsection.18.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 214.424 550.783 226.379 561.662 ]/A << /S /GoTo /D (subsection.18.1) >> >>
endobj
427 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 294.474 351.334 306.429 362.293 ]/A << /S /GoTo /D (subsection.18.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 302.553 443.49 314.508 455.446 ]/A << /S /GoTo /D (section.12) >> >>
endobj
428 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 95.809 309.877 110.533 321.832 ]/A << /S /GoTo /D (subsection.4.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 136.536 389.91 143.51 403.426 ]/A << /S /GoTo /D (section.5) >> >>
endobj
429 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 123.485 309.877 130.459 321.832 ]/A << /S /GoTo /D (subsection.4.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 156.461 389.91 168.416 403.426 ]/A << /S /GoTo /D (section.5) >> >>
endobj
-413 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 410.999 115.689 417.223 127.146 ]/A << /S /GoTo /D (section.5) >> >>
+430 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 247.43 377.937 267.136 388.896 ]/A << /S /GoTo /D (subsection.18.1) >> >>
endobj
-414 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 427.927 115.689 434.152 127.146 ]/A << /S /GoTo /D (section.5) >> >>
+431 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 294.474 377.937 306.429 388.896 ]/A << /S /GoTo /D (subsection.18.1) >> >>
+endobj
+432 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 95.809 337.903 110.533 349.858 ]/A << /S /GoTo /D (subsection.4.5) >> >>
endobj
433 0 obj
-<< /D [ 431 0 R /XYZ 78.37 808.885 null ] >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 123.485 337.903 130.459 349.858 ]/A << /S /GoTo /D (subsection.4.5) >> >>
endobj
-430 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 377 0 R /F56 380 0 R /F58 382 0 R /F55 379 0 R /F66 384 0 R /F65 383 0 R /F67 385 0 R /F20 378 0 R /F40 387 0 R /F46 388 0 R /F59 389 0 R /F72 434 0 R >> /ProcSet [ /PDF /Text ] >>
+437 0 obj
+<< /D [ 435 0 R /XYZ 78.37 808.885 null ] >>
endobj
-445 0 obj
-<< /Filter /FlateDecode /Length 4590 >>
-stream
-xɎ%>_Q?Jځ
-_] Ӛ[$FdPE~
-7ԱKiS
-4=nBv itKz&uϛYBK"y+В9fpCA~ gkP{[
-e-GZN_!\V4A.7lV& Kmi<BD?E>*'lL0z=٘AsD(\~b~o 7=H'ed"SP*yqRxW+y F lKܫ^t6^/JQn_<'
-'nZPՠD'{*7V`}!V`D;=:H[ZHЕ]=&Ƕ;~Lg1fqj6a"bτt( uC"jڂGГGZn^o׾6W
-2&x*I)=Ph8Pw꒺3斲/K=q͸ymME9(v~T_T:i%M_lZXA.f
-&tSm%F`r'ة[ƞmKhc*J-Bd[l"ܮjvfztA(Z.3KeY{qmNl[u<lQ2Gu.n턏*t(}a}4Ts(lF2PM6WKV}C6n[\#`3] OJ%TrKE>-j9W\oCո4")TTǁM>R_`op
-4BVgwK>r*rc(хT] S [YNEZŃ>"iy+$e`j
-_"lÙu T/As\`sQ]'fuo`_p0^78mkVǓZqdS]hM\gybrYQ®.`292!P$ DG1WT!٬;
+434 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F56 384 0 R /F58 386 0 R /F55 383 0 R /F66 388 0 R /F65 387 0 R /F20 382 0 R /F67 389 0 R /F40 391 0 R /F72 438 0 R /F46 392 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+449 0 obj
+<< /Filter /FlateDecode /Length 5235 >>
+stream
+x=ێ\Jhp]߂<"
+@M0|?_n + A6 ᑾD9I?c7}%*`R9k4hsğ2vO~_͇Y诸۲@8ϔQFސM홐aJl4KumDq\EܼF!"5T)}$Vڀ##B1`([⢴ piZ=B)W[@ѵ)s󏮕V(H)O;<b[YeI S\l,8AIc9mPԳQ
+[@S;,G뢎kd/J+f9, > INQI|^@dП:\P7is;f ;e8+ifN9иAY@mV`ւeVm( sPDzi˅EpQ9-`R AJJ٢Cx3[wV#Am=-yD(\\pn$YM?*NJV՞`JaZ]Ӽ\\"#Ada[TwM#b/f
+|XxT7{}A)&:æ`[gzW3tC!h۩o$N1cJ_ Vg<o` q ^R3'þR3 .z7>/B<ItFs"t45XS/%SFP8nqFh"D SE6B(sM *V(0F3SŠi)/iwFmU=?~/|gJ:/I93> %'
+KPGlF+js@ 43YbM3~#p?f*d)Mշk;*äV7I5&b(RtRűg涣$P'M!5.525
+#9-lkgތL [$h1r?b)X$MVi-9FqEsA&<yy͌!)RO2R+zO /croN1)JkC{19sәr(4F (!ڴQ3r\>1Ϻ!|݊V +"F*$i3^BxeY 87"heZ"be~^{s2#tv'
+Y̦ $7=@Q%id/uv[O#kUiBAl bf)1 "L"v}nZ@SqSݻ3ӽK<܊N.r@
+J|w-q'{!$ OsB9~4#Gm8B$C'<Nw^@w x`P",K8dU][fޭ~-:= zUC~ٺеf*ۺ|tTcKFTs㷻ŇA7[<l96&ݽTz!TxCñD 2#/TDPh;HOPK=d9rbqE0<p}`qz}۔f,v P9FAl%CJv)8<y:Ӟq^ZgNx&~tUNt#V:2)WOFFD4;srRiO=*'
++zB'%j4,(4!<u&>5X<p%;8DOqĢ=Md ]uq&.yHca@}ǶKVK琼
+3{vyq Dt_sMnz|ȫ*ޕ:>ZaIj}^MvfoLװyb;ҵL}nԞ50A_25yd@Ƴ ^0 ANƬn7 o¦{7As)1rePMKv/-tŬQOGV1!\ Re-x Qo!2 NO>C_Bs(IDi@si FR1}t&a~ )ڹٝ5bيjS.0-K6F]{FH[}N`]U;R_:Q\
+}&٨]t 4ØЍЬ4gw1tC&D2Dnw1;3!u ݮ ;/"TW9m܀?_G =*m/Q^˷IZr}5HY{@ˮOVpx.>S~{ :۵,u2-٣9&R^8) SAX`ND|iN`ܽo'W)f)?L8TљL/3Q_ pcIEşKަb )FKDDŽSINv2eP=N5PNLpW3? Pӊ=_'Ҫ= .Ěq.-MH?ꁉٽoxw::JT6&*Q~Q#Ш('.DEԉ=ܱZ}c)>ڛj>4/%V|R\aB ׶mYrD&;[5>Uܞ6acip`E r4 15杭8^Z
+%Xјj0g V70y#eP}R
+Ո"uf&58] YiRecqqV.*0[m3a6SrG"J״ ڸSjBk&@a #SvY
+^=8ڤzKUO?vҁ8Sdz_KU8O>^Ox2#^n킸mPܷ8ʏO=m ӯT)pt|LMSV@isciHkjKa45.enNd*q/Lɱ W>:=%(U7 F<S̔3Vl^Qtn U)يdqsIz7r*⨀ԲR'8\Tr)Kre5O:Vǎv,PI3"d
+Z vr
+e8 Xj/Pv'[p;X8HGJω]rhn3ghiT,>n*Y{R2qA^zt758`Y' :4x<y mqZe-jbvtF!+ ;9隳=Sf\s*-R]!_
+1+%Km2Rm#rj <Q0))p5LvsPJ%VkRaLKQӍ77P6/YLSlTl9lSgRv4xBK>6[TDʶSE\^`|iF9h3䢒W{@2`R? l8 jWR'/\6u900r`5BK-cuFNe8ɲ eǎ[XZ*u-[<㎎"I ڄ9 GZFE^j?$ XEDwiqbݺZ-:_j
+qy#Ѫ5hi=gh1|nNMޘ
+R:YY>6
+G,B|#8I5H,-nV1Pپ$.bFr.TfQ5Qm: u5$SW̴A֤7΂>d/n"M'zu[(ZXQmhqZ&ؚY BOCeҙ̙+,ބ^8#D3]Sy^ЗQ˙~b$%-R2Ṏ 2`@8dj-BsVD. ^k6bD2TS7txɣ* Vяut'v^ˉp7G=
endstream
endobj
-444 0 obj
-<< /Type /Page /Contents 445 0 R /Resources 443 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 390 0 R /Annots 447 0 R >>
+448 0 obj
+<< /Type /Page /Contents 449 0 R /Resources 447 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 394 0 R /Annots 451 0 R >>
endobj
-447 0 obj
-[ 436 0 R 437 0 R 438 0 R 439 0 R 440 0 R 441 0 R ]
+451 0 obj
+[ 440 0 R 441 0 R 442 0 R 443 0 R 444 0 R 445 0 R 446 0 R ]
endobj
-436 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.84 509.22 131.564 521.176 ]/A << /S /GoTo /D (subsection.4.5) >> >>
+440 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 169.731 565.42 184.456 576.369 ]/A << /S /GoTo /D (subsection.4.5) >> >>
endobj
-437 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 144.516 509.22 151.49 521.176 ]/A << /S /GoTo /D (subsection.4.5) >> >>
+441 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 197.408 565.42 204.381 576.369 ]/A << /S /GoTo /D (subsection.4.5) >> >>
endobj
-438 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 284.581 224.577 299.305 236.532 ]/A << /S /GoTo /D (subsection.4.6) >> >>
+442 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 284.581 280.218 299.305 292.173 ]/A << /S /GoTo /D (subsection.4.6) >> >>
endobj
-439 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 315.026 224.577 322 236.532 ]/A << /S /GoTo /D (subsection.4.6) >> >>
+443 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 315.026 280.218 322 292.173 ]/A << /S /GoTo /D (subsection.4.6) >> >>
endobj
-440 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 320.625 96.423 335.35 108.378 ]/A << /S /GoTo /D (subsection.4.5) >> >>
+444 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 320.625 152.064 335.35 164.019 ]/A << /S /GoTo /D (subsection.4.5) >> >>
endobj
-441 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 348.302 96.423 355.276 108.378 ]/A << /S /GoTo /D (subsection.4.5) >> >>
+445 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 348.302 152.064 355.276 164.019 ]/A << /S /GoTo /D (subsection.4.5) >> >>
endobj
446 0 obj
-<< /D [ 444 0 R /XYZ 78.37 808.885 null ] >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 323.989 67.047 334.446 78.504 ]/A << /S /GoTo /D (subsection.6.3) >> >>
+endobj
+450 0 obj
+<< /D [ 448 0 R /XYZ 78.37 808.885 null ] >>
endobj
25 0 obj
-<< /D [ 444 0 R /XYZ 79.37 636.284 null ] >>
+<< /D [ 448 0 R /XYZ 79.37 703.88 null ] >>
endobj
29 0 obj
-<< /D [ 444 0 R /XYZ 79.37 295.232 null ] >>
+<< /D [ 448 0 R /XYZ 79.37 350.873 null ] >>
endobj
33 0 obj
-<< /D [ 444 0 R /XYZ 79.37 206.251 null ] >>
+<< /D [ 448 0 R /XYZ 79.37 261.892 null ] >>
endobj
-443 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 380 0 R /F15 377 0 R /F16 363 0 R /F69 398 0 R /F57 381 0 R >> /ProcSet [ /PDF /Text ] >>
+447 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F16 367 0 R /F69 402 0 R /F56 384 0 R /F57 385 0 R /F58 386 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-450 0 obj
-<< /Filter /FlateDecode /Length 5953 >>
-stream
-x]Id7ׯc!P@is*o>y`4HI(=jqzE~D-M~ /-䵷_~[Ls ^ o(z|/?D:Z:)}t7]Ga>  >@~R?*lO_ 3[c4=
-Sw;<#U|[ (0Vpۛk`MiƇT@֫8%k
-
-[A"ҝ]IO/Ω
--* 6ʩ{cک5m$J)0=cIP1Ͱ^Ϲ~_~6$\#\yܘˉ "ny?C/v+gwv׻h ,O_ ƊZPe\*<Ԭ6wҁ:fhNsl#3]gTs ΚBbJR8UӦ<QFH;aDXZ+ѡA CoW P69< joY{0ks,sCZ
-|*|z)m?xFl] |ǒSBD ?oBXc+4АJ~3բZ?뵰`+Ĺ\HJ\;[ ~%9#.Bo | Sq$U.!r;G,}F9uC3 Lݱ\o\C/^(o>!f7 閩(@ wۇ}|;x&¿ Y
-vJIԜP [r'ɡSʇ&hUbg6Qh *A(|!rR(NCz}B9D`ah P&aR"xlEjH "60f.7Ibxs&;ӗc,Dny@ŗZ Jn;}"
-.X##n@hfZc!']m#*6*O kfZ* *핟'HxV@[
-Ol8 Od%a۴yݏ,A=j~KiM 8ilB3Pz7֥4"'d/eQKE((:(xf@bSWa0uMZwy;XXPG}ϯxˈZn.h
-CW2_0u{>.6S1u`u6請`r.[ &R7`
-QAOZasn$Vٵ$*mPx5"ou*YOߥo
-S%O0ԮSu0u99iUs&J UM;U'HK)%:t€%Hv HJ yZC6Ǧ:+]qwiЩRTR
-f%AZq6&J 0\6Y@ƑuzjWsʷzLL 'NjᢇCCr8r2M0AW>4:IJ5XjSqlʳ9NLN,W:$PydoJZspRmK0ØGXih<F[W;`E䤤JP044,690u3d'Ls${5N(IJ5Xjӊqlڳ9PLN,W:$Py6XJZYF0 8J (a a0XTOZu]^
-8i|`~6ۣcrgA`-zF6H&
-[JTt*:nr$M/ꅎ_v|fDdPRQ-Tʼ!ֵe06^(ۉyq*Ae#Lm
-N`D(j[(y
-9am= *:$%΁vb7O< q!S~!(8sׂ=D
-^4#`u#qu#wmupĥW};DjH/niȵKw8ul/<eP$BR+%]\Ҁlr~/Z+D땴1 )bڜ7Ɍ]+:l'`<)מae#61{| _*ΟhyK=6Zu)/[i!2swK\ݩ%Aߝ:76zG_[޹ܑ5f\Θ٣ۖwZ&ԯ**wiHot΁iK ?8wWֵH.]]]%ܣ ?DNԫÑ[$^6 /^#Aŧ;܎wBkZkbB*A;:7NDNML#L0W`!9
-
-Zo011PW@OxB&cq/ 3k ~K 'Q 2.޼gʴlnERa+0l796qI< Ma 56Ŝi*6} mƹG)X\pg_j R.`TrncpA
-C;R# <;^L;y'󁭓NRqܡ߯?9z_9sT'H_A?rO"9H0ip!yWN&GoRvJuT 'm:ܟt'
-棷1N:y Wjr/NNGGN~!R:"}?wv NzS~!yWN&Gop䯣g8s
-=;%8&I>:8 YWsSYޭ*l/,Z5~CO>|_Hh=i~|Wc4蝍Ն*G ot\;a$}o}/pv8`HwȌG/#sf {vjQ/Rchn-T>uWOnqO
+454 0 obj
+<< /Filter /FlateDecode /Length 5837 >>
+stream
+x]Kd'ׯȥ{y?RI7}}-yV+ϸGH
+>Y.%r=-
+D
+[4$+O͢HVrj1ڌ5NR@z!ҙXFrq\ҁ2y@=
+Ɇ* 2ǻ%]TcD9<h`#ŗj \?Ѩw, D>
+<O72c Oʺ(=W`Q<} ɹ-ՃZdBeK֤_*<j7/4%0hy ]<c6t_>Z k ]M4j
+3a*5Egÿye/ڛ$}-ͩ&Jj^ʑ^k6_nҨC"N{ (^72=2QmSuI2I\a7nֹxƨ?"w Bm
+EKc#=JLT KFŴDc[Eh -oǭAЋd~֎(;Z߹m
+ qjBEߙD.U>}ϯ_AKb|rqihx[(B3+NSȉ:a%2[64w%TÆwݰ0_NmB}a3 믮:ˍUgBG5gt%w盷6fACETxPDN 5Ro(
+hw~( JE-us>%c 71{
+Q2c@GrC^| `¼U\{ƾ6=tӫ5Q[;~c;h= Iѵ50`$Qt0iUzþ{
+o m„,qD]AuzXze tlGI=,-aQR;U*adU(4H9"%= 'B ?Xt1 -%â!V6pRve[St80Y6qdqؒY,QÀi&+ےҫECV*C,Nye0p4%RJUy F#;!
+}a2J]ZdĢs:)PVGۤa5!قR1t,۴TxM`r fuW8NdRY$/PuB1$Ф&I"ɄZNv`EzLI\D
+Se0q*Yv.ْq(6ԊTptNZdclEwG<У*j 6ԤVU%&S4q%wQ
+BTJ7纞iAQ`f,wY
+64SY(ײ;-%IWrLH1R"UmdÂ
+$PchS(Ai^x.tT*}y
+B8VWDIٽap9.tlGJsqB
+IPJHzzNH}~pT֥/La6<hKAI 㼯q4Z-TIlC B{ }j> ?_EFp<
+)/F<
+(SڧbgZjxJOeCOGbch@ɮA*i$Fm1WEBFܶcFQُ#.Vvln yDžO0yNV<(:z4Vkb0Ϻ510jɭ5r)B&o=D)mjrv .V5ۋZ'mZK)#5?isw(ҧ2c^L󦴗:.>{G[٪u1rc[!eߔ&:6)4f?ݭ󲇗ҋkNyqfV+M~Mex\^)C'NPM<ڑൃwj'{ ׵p;=av^߽KxоvOrW^vβKjc7g7;
+nn !8%=%=^BݕvDn賮^B] \&X܈wR9ܕR K.sy"'<b>fQo*&3
+ YCG_O7@Pj
+Bg@L/a MEri2/S<+z6=Zx~&ҢI|!{Lf~< |y3]ē0 a -b̴S`~tVQ8<8t|lJG̔+y{r2>s
+z%oΌID2^;?0"mIH2LIv߁=s(y?ʟ`ORgn w=T#"c}b?;'j2/Fٿ_#
+2=## {3)Fz0>2O"9HކȏweOaRmC#?ȟl{4gs#
+j'C#g]/Azgȟt:foތ9DF|c#b'##?]ST=q52xF(dAC#6@6z}r㡑ʳF?IËOR<)zC24RwT!ʕ74v>Qc4w.FyyNE%OQ8}zqOפOPEx.vCـ١i%4wfKOYzx{4ϕ>0
+~Nhßg&N'6zі6EZpG_<r֑K;g[dJʅJ;g[x 5͞橮Y|
+% "%/g3,PShڒr֯*h*Gw&
+iPxE&('{}s#z<=NŷQdWn9Uy5|ۯAt>K j~4g~(rJƤRu]XАr zbkOF
endstream
endobj
-449 0 obj
-<< /Type /Page /Contents 450 0 R /Resources 448 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 390 0 R /Annots 452 0 R >>
-endobj
-452 0 obj
-[ 442 0 R ]
-endobj
-442 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 323.989 76.495 334.446 87.952 ]/A << /S /GoTo /D (subsection.6.3) >> >>
+453 0 obj
+<< /Type /Page /Contents 454 0 R /Resources 452 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 394 0 R >>
endobj
-451 0 obj
-<< /D [ 449 0 R /XYZ 78.37 808.885 null ] >>
+455 0 obj
+<< /D [ 453 0 R /XYZ 78.37 808.885 null ] >>
endobj
37 0 obj
-<< /D [ 449 0 R /XYZ 79.37 568.541 null ] >>
+<< /D [ 453 0 R /XYZ 79.37 616.605 null ] >>
endobj
-448 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 377 0 R /F56 380 0 R /F58 382 0 R /F69 398 0 R /F29 371 0 R /F20 378 0 R /F21 419 0 R /F57 381 0 R /F40 387 0 R /F59 389 0 R >> /ProcSet [ /PDF /Text ] >>
+452 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 384 0 R /F15 381 0 R /F58 386 0 R /F69 402 0 R /F29 375 0 R /F20 382 0 R /F21 423 0 R /F57 385 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-455 0 obj
-<< /Filter /FlateDecode /Length 4717 >>
-stream
-x]Ɏ$9rW$4
-ȨhuJMs)≠N!@(0l;iAD_L-8͵\ 8"b4#To?QnQ_~y 7ih@zW _KS<_ßn5t]jTc 4p% mwJSOD9&i[-Εs: D(ć LvѼ## ISk`~e.aT'K+@
-^
-iBtTe,c:$" H#B 4jMiRef<(RilURE%[Ɔw,ܕYz9I,$Nt_Ҝ
-YKƱ{/=}[⽞{3,iHi׮BxPaP_c⅟r9Len;D91x}QM}m7Ɠtq<^|LZސO _7MUxmK!qT|_W{LQǻe/&W** ϕ%o|2i/D"A[roԄ2 xj5Y۲en.Klo_1:Hb0?> W.zw4%D  皜{lF2lcIL7RFX#ᔮ&~Is|
-<?"y~ost x˸ޙ
-AX/Q_%ayw!B#' ?;jHbCgJL!i|PH&QLh8 @Ǚ0
-aEI3MOʦt <? qIΓ\*b?A_RD _5AC`<y'ȏy @=A<A WA $z$N߀䑂1L(M^ʟgƓ_'9%oo| &u
-/A4A)H_! !x/_Dc =) sH*$A<*F?JPޚo!Pr7|@w5n/G|N[2n/?n?A
--C{A~ȣc =F A$1HO 
-01zmEWc=l OJ?Js wyP ng7cb <:@i{Ϫ轧4 nTnPP=Uٱzt0-Ha5FpZ~th"W
- F#N>|\yB*c]5_.iTgrEqOoճRrL5:*m11 xt 긽ۭ[J}(~X:hHmH
-֙XK# 'Ne`L4uGʹ0S%kl Kk!؇)U(&m٪4bW
-u^iGso:jh]~e;Q;rd[%c@
-x4q?.0AGJC!@ igG[WX7V5f䪞_RѢTvd1.D;wٵt'{+QopHq| ƔLGJA*HLs15 cITmd]0\ 6xwoeV|=&.[RpkḀ̊rMJI$w}ϋn8노5Uআ41 .RVIѡLq UcKH!1 nV<;L[yCOeg7ه9ٵ!Ohh^@❵ wX=]B5?.؁B@  b]PWòn!̖g/DhxQ͆oԕ>qD޾I`Z^+jCQn;o* Em{!
-sJx
-3~5(ۤˣTX%33|,=(]6cIbfWN9.<CcOTt_a/_{(CִC"X9PdcX!@CbUޠLkD+~X.sjRr9tK}z8"f`'sK~ʼƎYAG}[AD
-30->'a:?82w$Vs0{((} D~ yȘ~Asll>u<%̞9u@P-K<t8F Xj|sD;<f?.y t 1$ojHx.NO,$3EYzXaAviJ8pM̅+saDqN2(>u0.#Hyr 93k2Eu!`bZ5w
- ˯SE*KZ5.O-΂p ןЗnRWz
-2*⊊gsgS:BYSK7>ZNq+@۟i֘f}xA1! lҟU}f$ь3sL&5
-$ub~Yb=Pl=(J0/}qӨ~ i;Nlkz_FCDi ҿ,If#ehp<g$j󟯜"LB6@ tG:
+458 0 obj
+<< /Filter /FlateDecode /Length 5026 >>
+stream
+x]IoWtPOOOs'}ϫ}aY9EZz[˗/?<]??.bToBeSaI_<bL9\ cFbߏ^{1&=Sy( *p,K?BuW/O6T*$M} ydbp^!t-v>]nDW( 1g
+w_r"u$Kn
+_~ e
+BG;0Ue:T$ zL{0 eZk'QaeS
+Ǡy]'@>z<irhɿg{(Gmv&myNC8u::]'N~
+kS{N {ss'G$O9|c'?Ip}H<C&G4'-uQN~>C;wS$=
+\&޹%>(yஓ$;)P_䏃rɇ5
+D5m Sf[@RA +B̄* dQaÐ2X HnItÅ1ۤ'\fWg-j%}<]δ\`]5\d<y
+XEo]>zM]}+`26iKbϑx3k۞iVBÓy3ܶ '~ݮv>|5 h#¨P7^ƹ#>fw`Dd^&*UϘh06K{~h!裷-n luc#vQK9i~  i`;!3NӸ^qBlho/1*$CB!4 :׼yG}躲{x{:'f}!f)Ș4+&x@~tt\yV.i\>PS6/'S^ݱ>KP<IHrkNt H=[wseoFjw[bVKHB"_,O:–J2hLi=Q
+TF[R@IzrBk
+!~bB7TQlsbDȺvy%0/Ͽk6%dS@J=x]V{ÑlɅv!)С*z~~"RIG$R:->2 Xx٪X:v˜%=^0aqfwV\γ/i36=Y̦U7o)]VرM#Qi"k*Oi*􁚖Ku;C758^>ܓt;ǽ)w9 )69Jf“"
+sĴ7[j]\mOL}A3F@&1l-ua+0Qx?n41>ȖЦ 쌀d͍oaPמ[N [=DOѼ|Z.h^w<+iBnWG\Cje:a
+6/@ոSI\B#B^ݱ%ҖFJDƈ|=n{ū,ZjW~x^1WFCfGZ>~[u$VS
+qZK .*`^UM),㘚j$5Ytaʩ
+ޓӆfr,~oSd1!oe|]3^ QIrpT2œ1ze/eWGd
+<Us ;и?)Lb81Ho0 #{ &+ mސ! UlHw2.u=
+shB$"F*Q*=lNxV!(~@c˝
+ȬS]7s !uBSGަ;QY7:1bb5wZaZqѨt~SCJ'a >K'Wzk6Z5P] +Sǡ89! if}[򩞯Sݫ*`|.,g6)p#es L(WS{8DmNj9|PDUʷ;SaQ.{+M8t+AW% *JgkŒDǤnUn}3 Sńi蜾)i?Q}iH&s9JskUIw.<Yۋ͂v!vIª`bpbmjK *LAXӬǐ@Eb3^^BTM<
+-:8oS.(t~^pQSK7 ESxM\|~'{QV^U<lŗ#N<X3̐ڀ4Hë;sCTi1_!T`ºs_0*d?qx[fU^CVc}XGH9S՗Sk#orN=<H\s]35O_Tg3!pֺ md%]_܅>2;R~"&Ғ1GW&MN~.nʒu^FU
+'׌l6`7f$OA5hG[/sݴE)fQb$L #'ƠMI4eT0mwtDч & <vpZm)aR #rqŗ Dل` 8~.-%!}f\'X`n7Q؉n 0}K?3/ڮAy/K@xN^%^.֠ ~۶[=lH!FI7s}ܦc ]
+)4vhEGh>]oq:,il@lp xpR0:dmĈ<R\oZ7HQs}kiv䑺pu0n:l7 #E 0 l0M`wSkx}$ozu(5l&<TwFl+
+@oizBOa+Nuv#WgfDq$ Y]va|'5 :팯Q؎{@EaX GogE\
+馏h;pH_g)UuoJ
+/DOk]?
+,]
endstream
endobj
-454 0 obj
-<< /Type /Page /Contents 455 0 R /Resources 453 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 390 0 R >>
+457 0 obj
+<< /Type /Page /Contents 458 0 R /Resources 456 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 394 0 R >>
endobj
-456 0 obj
-<< /D [ 454 0 R /XYZ 78.37 808.885 null ] >>
+459 0 obj
+<< /D [ 457 0 R /XYZ 78.37 808.885 null ] >>
endobj
41 0 obj
-<< /D [ 454 0 R /XYZ 79.37 443.755 null ] >>
+<< /D [ 457 0 R /XYZ 79.37 429.973 null ] >>
endobj
-453 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 377 0 R /F56 380 0 R /F69 398 0 R /F58 382 0 R /F16 363 0 R /F40 387 0 R /F59 389 0 R >> /ProcSet [ /PDF /Text ] >>
+456 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 384 0 R /F15 381 0 R /F67 389 0 R /F69 402 0 R /F58 386 0 R /F16 367 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
462 0 obj
-<< /Filter /FlateDecode /Length 4048 >>
-stream
-x]Ks7WGJU&Uޓ7rJ6>lU%~Lwk$3 $
-xqp}mQb(&;4=a#}QFf氂8cG8zF/:IhD=dEM{9m Cs= 2٩Fy)XD$K}-ۜQR.>Gypmdkd2A]/uqRF{TW<b:M |^n<ټ\cᢞ"ͺ6OϹ95aQi~r
-MX
-&EE؍9pb.Rٴq_w*&">z}MavƱ%AQ{oŚdj[Ǖ)
-O6@oB yd"7aVIi Rm#!)!nTL4g
-_oC7RX!>wK7b2}cc̰4Y]0<c|
-myO&5._%ZJe U֌X~ `CK7^'{qFq-GZ~F4M6z *)0yʙ\5C _]]_vZx5lH$ӯvhYfWE;4hr``'QN]PZ-\֊+aaَuTsX(aWa֡KXG<Ehزpka|يeu|= [u$MXG.C*wu@!XGޅuTM:u`BU:njnaa]c Z#܅u PFvP:.jbwgމu"!bX[uX:"!ܰ\@$Z3͑\c9HHGB/0z;ґNt(Z؍t k"n?fPHۅtqC:nH yP.WC:Ok_D:z~CY@Hx\鐎ՑiPGW:RD)vXt\ rQ1!]>bC:*騘Et'Q1h󭑊t|=`]t$MHGt(ꈺ\SzQ5u{# .qԑx7Qai aH/96ot !5lk[ s$]0G9#GVt2iҪ"+$Jn,FvU8FGV퍎qmF 7{91\T;OBj>F8$콹qQ&a8SK'd
-p~"aK{!&b XO~) @*/`.ՂTwjg)[nb1Wp$Tui*c2M
-FS@)>r Lemsu%R{H.8"<FrscM8] Z@]]׺cӾᬖĔr"ս.PzD=;J*YgBh5Orzܾlőp!``$U}i\F1S/$ˣ>S)yBG1NʄjPMTB бE7uODZ}s[J>!V KgBs9^U=FRxL}4m lT@ ;%sL6R%@PdQr#)ЬTrJUW)W_ʟwYό )Dc+qxzRԭfz7{Wrpu
-?WX74?TyX8-Xxx8.E0
-Fz1\K9v|'2*Z?t^V h v!#a*ŹD;n#] =h};b>㏪SHkS\ m`y\
-W*98'T"'THJuJ*l=m"r&d99Ue|n>kNJڨ32ޙ]钰T̖ SU]Ȟp̸>
-kǜ:L5cN }ߠKUek,anQv8w0].f8f \C@$_  ?}zZ J?RƋ9z-^/NKqF`9hjp&;cccNN"3agVCpDIupr,7v5QϷ0mxNex!3\(<Q沊OV@(dl}._6+'n8Wo7!?(y ltcڿio(*j%wZ8X:aQ-pmB旊%D1-6Q0*6H)/=P' F9ᛏLDCa5@aKdGCfBǣ6BLal r*m⽾`'Jw_$Wz$uR`YC.!19"}% }P꾔QijAlT2& ʚaBgS%-OהmDcx1.+U$o;sj 3I%b7 Nö;k띈+֛oKz9X8vm[83Qe/9;| Oc7^Rk{2PT++`c3جG:9m*[jOs5y>q^c[e2ꊇų+A$,k`Ҷ8@~%SYpzSsl={WV% ؍-$\Ý#FRyg}Qb99p[_ ^,km%\jTR;M)uvT*QŘ|<%?Y0X/) QnE.1$W&| ON cu|&(0[l(ݛ{J3ыT¥eC/ [D/T*#ry#$%Źwc(l[ t;r٩+
-O(
-KN;gsn
-ƜV) ^m<
-Bӿ8&|!ttzܿR'&\[oE<YmY
-@gmQx1Ywe,O\&? 
+<< /Filter /FlateDecode /Length 4774 >>
+stream
+x=ˎ$~
+p p}}q ".{.\(3紨Ffg}H+"VXdNO(K:JVIK9C,)n7~L#hG2Զ4h}\;u^ 3rg`^P5hO^C4>[o9jgYzf%Ͷ/;e-F Z7˿'
+\vOݸ>lX~F cQ#
+1d!B,.Tq=b`Bo
+1%R!:&vAixTH$_sy-bVT*A^KX:
+iR-sy}:~E~B~TI=?
+ixBr*Jp#LTH3R!臼;S!}:tLT!BMo
+q*঴;S!}*tBɃOcD>
+TTHƇE;k
+RY<D@Md}= V<S10G#l&nV,*#+T׎Dy]") VUH,eJw^s{]&HPja/2 m)eGiTCr=-(E溶S2|ugNه57)V?q]Ihnx+j_3p^ٹ?K>
+0kHՆKXIGsMJ1wo` sJ2lQ,i=|yHwܨ6GFH
+7T Lvit.ژ88N״i,RrC\R '&H!S%V4oPzesg$>r=u0F=2haѼ.bqi`q~(",V[Y'M ѶHqijjV6^O
+etŘ7h#Y[#`tG,"d ;fbOFZ>G;R뇿ZX8X1yp4I!V45h>\,IUvBrfr|J,jj,(AEk lWQab4ő
+8jn"&QW mȈf8SH3wK[b%N>Mm0]-Ƭ oeK6ɊmcSH[q^)O3 97:_Yr֑/K}Ph+lЩVbJd`lrS5X-WZ+2qB$g2/]"\G&A-'m`pVaoxJsʍ0?K KV¯u%mH&Z@ lv1P Y+mW\7@ ͢?[+Y]nmƈgU7=(]s,u"zUJ' /
+/ěaΘ2bXݱN{'xiv \IՆ*
+ 9Af#uaw\u _ K]3uo,KYny
+%f{y5y!\]3q;taoZ fh^rֽ3{"3 WindͤApYW6srݚ|ZpXJWeüXGLq[> uwXzݵ]?5ZmcZH`c!Rߜ
+o̻ }ƽT˾*YɅ}EX~ߟH<,݂G寴ϣrfۭ(
+~[#m]muV9l`c;|3375i]qTl|?sVnX4vKepFW>^
+nC.+Z].ڍj
+ՇCM&VX}9'*գc{lAd.Tԧӯx zVlŊ 1بiT[q_jEœ}5\Qr?Sar(rWD6#I#1TֺtxQRץ*\g,U{107<"WpӚYh9?'ǂjoH¢LS[~dhHh/CړtKG&XK唖'
+'*@
+KJgn:߷p&O+zH']xKҎ傅v\jXơEъ4YQ%V"r914AΘxLS>i;x5?)X{h|eK9aPC:8,Ս\|+W8Z
endstream
endobj
461 0 obj
-<< /Type /Page /Contents 462 0 R /Resources 460 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 390 0 R /Annots 464 0 R >>
-endobj
-464 0 obj
-[ 457 0 R 458 0 R 459 0 R ]
-endobj
-457 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 506.052 160.136 513.026 172.092 ]/A << /S /GoTo /D (section.4) >> >>
-endobj
-458 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 400.205 148.181 412.16 160.136 ]/A << /S /GoTo /D (subsubsection.5.3.3) >> >>
-endobj
-459 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 386.259 136.226 398.215 148.181 ]/A << /S /GoTo /D (section.9) >> >>
+<< /Type /Page /Contents 462 0 R /Resources 460 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 394 0 R >>
endobj
463 0 obj
<< /D [ 461 0 R /XYZ 78.37 808.885 null ] >>
endobj
45 0 obj
-<< /D [ 461 0 R /XYZ 79.37 422.814 null ] >>
-endobj
-49 0 obj
-<< /D [ 461 0 R /XYZ 79.37 326.258 null ] >>
-endobj
-53 0 obj
-<< /D [ 461 0 R /XYZ 79.37 301.471 null ] >>
+<< /D [ 461 0 R /XYZ 79.37 432.681 null ] >>
endobj
460 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 380 0 R /F16 363 0 R /F15 377 0 R /F69 398 0 R /F55 379 0 R /F67 385 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 384 0 R /F16 367 0 R /F15 381 0 R /F69 402 0 R /F67 389 0 R /F55 383 0 R /F58 386 0 R /F57 385 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-467 0 obj
-<< /Filter /FlateDecode /Length 4726 >>
-stream
-x]Id cr(Y rOpN!c \CJUs詪(J(>i83.7l>=}s7X˧_񋸸8+O/?\qΥ?$8_ooyK|'/!>}-qbt?V"gNM&U̶
-HLL4ź$ :7Dň<EC>%S^u:3?lrL@m0u
-mKÌoÿQߤs}W(f|y)29S<I>LI vN T.O// [~ˀ~ ~ߣHɭ5Аp
-q *άRmJ|mЮ~s6U0 -)G*Ry"'jͿSu? øw' L &Iyl)`PZTfF 4e|2y70P/@^
-P۾>q r2y
-NԬnv \o!ByQhQdHg7m3>c.<ӹ.gMܭi0=*g|㧽u<k(Kk PhNJgે*=L]\ua0t:- P*'Yҗēc䖞Ym)KOB-S"$XҼ2 FNvHpSb(W3tJ"Bݼ5@8c+\U2X<^O:F:Oޚil¿p!n-4S7z
-mCaG`4c@l.EmIv5-]J 2L;F[f!
-g?(;Z/ A5RDHnFyqzqՈAgW`%}Sctt)m&
-ݽnBW
- ō)!8Fk |2|qvA 5j.4B2K_KY:T=-i&-:D 8^6ͻwB
-ny+` RB]"Oԛk"ְZ%)2V?H;KeiA'E:`e=T-KIZر&Ch4EugaF?$*:
-JD
-B6O x&7guH5pwJa. l.fu@oL ;P0~fbaquG|P`AiibqmgQm'w:kJ~J@c쬻՜:pW:Քtp쮶tU9tp6t<^`΁Ȓ/g
-p~8/
-{ |E9W.zeO)BTJGL[`NxCTxKXX\6)T}5Pb
-+v0>i2:\1 fIj e+JE6dnFJP:rzWcB 9L7/B>dTfhossPQ3X޴l@m bԀ]j2:sˡe*+\y_l _ L{PHylR™gr-+˻A** 1S0t-A`X$73jOMsXZGR5Cl{i'RLX JR
-GA?.%Y^BQ W>B  ㉛*p85sWd3{D,WwvKfeŀ-{\٫nEn M?Iwz[w ]!̢0{Oͩ]1% ݏo#P|Kcx6w}FLڀ`]`۽dIk`$M爨|?c rMV:YVB$n,d'a<bQNo Gуb ~O$-
-z.ADb5cTg\5F^71 tˬ8AiN@{eęܗr*Q+yQzm3TB K
-jūՃZ-:u<-;j ypj 2J'xm$^uИY7^HmWaݷILG$OoZL*ţ Fl*Nv(B,8 r+w'xi"M4;W<^Czbk"~lXm>*Iו)<3_o5-+{S$L=wSqPDTr
-W8~9
-kgz)9ۡ>2oh&79WX{.e~ aNqD
-O
-ʩwSC^
-qX8 -TryK"@_&j^ʘ"X㥓As=djlW5QU)y!W 67$цoaқE>=Ud6bÖNȿ|p[F: Q96ۖ2m̗%h(}j9){nTMa>jLu3jUsNiʮhn"
-bݑʲ?z`a`hsIr"
+469 0 obj
+<< /Filter /FlateDecode /Length 5059 >>
+stream
+x=ˎ$9n<z7Phkj}[}szSGFDմٕAR$EQH?olMߟߞf-۷xR$oFݾ}EJ0Rj]J+>sK )՗*WP|o}c04~@ZMJ62/ҾA粼ϓoMU7*ƟSǤ?XKPaO?{ydIr$8Sx+YՏ</M}zl.=яYYia5+V2߲6pg]:~ W>P&pCojzωʘ{ASl7yޏ6g[oN谜~ eht:{?oO_o!Dp0sJcĝoʟh
+нm[X |T?oPQ`x{NŬ<W)6W5f0$*ׅSTUcFk
+=CMT (i05aTp2l!j /zPIm">YAETpyfTCBXhD8}X#pM!Fj"UH疱' J!,uhmǕRRcM0"Z4KXxpX3I *=
+·8n*!
+!B,0Ҝ9ƴz2OpAk;DP:i_3,$ws6
+0%F|`O*@mhԵ6
+z'p 7BQ(\8L'hu$mO&جOluTemCAoIlGC*!E]:cP\3koZZP Wr{° 4j.ܾOu#2(3z:c31w8?9a|ظd-hWZ=1`>;_YĕB~}^$aH ҉!p)YɜAϢKVygT:8KW0J_su\kNF-!}z| ?|cO
+d#_ [9dE3`Fgyw=v$ q%N+qp5p&rr32sE*f-I'Vq;HW:bᢽ+.u"\b
+&qwrsƑn5wkH,*He=*fm]擫diě~,3S}hB+U6^&J ]% |N
+nݣ=E$7?"yDO7>RLtbkț܀AJ$ߦz%Lk>q3x@}i͵=lUOQLQ QA穖c
+v_\"B c(oC:tp6V-Nbt<SBim<ٕWWTxES>tkE )PQAplHmOm0}W0'\FhE ƮL"LUȆWCԚY#}$D0w~ͯjn¹diowHs* 쑵Ea:}[;6<^{+`\coF*e
+ 2مzoȞݧR;UuTYu?ƣ[4oj]bl:{U,w!^^7\ɎBo68 0J?W+I֝Bx<uΓB9YY^Z
+*^?ilӊi-& c+!mkЅeW;uw)ʪֵ6Io4H.~[ YF/vki0GVGV4dyMc#Ybg[!{[Id
+N{Jf8I[T<ʤM:;7dA(Xtu#z!G%
+ǃ# nF}n_?_n?nyyXwNAY(YY8HovL垉DOEN.0aUA4pUc{UˈSDe}a,< ]æ>cKEqeJߡsx}>?P9d8iARbELwAO{:N?
+~P
+2ڇX݁3$p*]p`MǴVf nV<#4DpLOܙ
+%{)VRʡj Z+,Eq\;YS1;Lo9֑~|JVVP8lk+Y_"l¯$%oA$TZXcqr{}!Hkb:X-oVmopm˲=ߝTWv ̻<mOG5YڣBg uvgv{x_g䔾tqRxkV8~k[[Q:󊚷Q%ѯB[ ʛǷe-J][,P"Hm5V7<+'ψs}OVydz{'{Gj_Re#: \Cvhb8ыI_*{21W@MU99?m[p}s H_oEG^Ȅ v -WR4AZ<F-Boڠ"
+է'f߸I&48*
+g(hZ UJC2}>?<F*󵨰fF@T9(;[^$I0II)4C}w :D=!h\iiȳf9M7#} 45EIOQ ,W-a=]uw@O2ʏo[#+Me(ڵT s!JE/MmB@ᒣ%\zS5[mû<,Ax१Cn%tɣ>Pb|<O9ˋEtk);<B;&]yAX-C|?>Q3~p%{nN)н8)ի>(=W2>?؋mTǜUbN ibR~W]SoЩ734IsVVO(@F)U@ڼj
+\/Ξ3
+OaTIn*A/N` cQTIT
+`Hٛ t"ҽ&to6ݛ;Q7% &v @Yx=>|Mif0 KUof|u?l
+_5мUc_sZ?8L̸ p)#6gNݤ)la(nEc*e<h8Ib>w]4 U4 c.>]IBw%:;'HN"\.!T+Fݩ ^=[Z/4MNP9{(s8tYz+# JZʯCSpgYTXn{=f,OgV(2٣cFiYCX:[Xdbݞ@pY*)8L ŔYO8>Oh6m&o쒖ݳފ52vhaEʦ3jdVDEvڈ[ #Y? ?> k5zi[|
+79v\Y^mw# ;G7^zYp0ʹWOr5j028U:hGd8XNJof7ʁ" ]8RJGNi8M
+#ḤxRsw)%l5.x[s~HiҺmhQ9TwJ~zOSz`J*:ڀ.]-$i.дsKb/"ҡta[V ?2ʸȬ{QP <Uf N?>3]xdL d&Av wJ .B_`fY =/LF+.:dR8C>GZvX"/s<@wt[jFu4eNVnx0LGr%8qӷu f
endstream
endobj
+468 0 obj
+<< /Type /Page /Contents 469 0 R /Resources 467 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 394 0 R /Annots 471 0 R >>
+endobj
+471 0 obj
+[ 464 0 R 465 0 R 466 0 R ]
+endobj
+464 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 506.052 369.969 513.026 381.925 ]/A << /S /GoTo /D (section.4) >> >>
+endobj
+465 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 400.205 358.014 412.16 369.969 ]/A << /S /GoTo /D (subsubsection.5.3.3) >> >>
+endobj
466 0 obj
-<< /Type /Page /Contents 467 0 R /Resources 465 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 390 0 R >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 386.259 346.059 398.215 358.014 ]/A << /S /GoTo /D (section.9) >> >>
endobj
-468 0 obj
-<< /D [ 466 0 R /XYZ 78.37 808.885 null ] >>
+470 0 obj
+<< /D [ 468 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+49 0 obj
+<< /D [ 468 0 R /XYZ 79.37 634.979 null ] >>
+endobj
+53 0 obj
+<< /D [ 468 0 R /XYZ 79.37 536.092 null ] >>
endobj
57 0 obj
-<< /D [ 466 0 R /XYZ 79.37 638.682 null ] >>
+<< /D [ 468 0 R /XYZ 79.37 511.304 null ] >>
endobj
61 0 obj
-<< /D [ 466 0 R /XYZ 79.37 355.305 null ] >>
+<< /D [ 468 0 R /XYZ 79.37 166.455 null ] >>
endobj
-465 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 380 0 R /F23 375 0 R /F20 378 0 R /F15 377 0 R /F55 379 0 R /F67 385 0 R /F74 469 0 R /F69 398 0 R >> /ProcSet [ /PDF /Text ] >>
+467 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 384 0 R /F15 381 0 R /F69 402 0 R /F55 383 0 R /F67 389 0 R /F23 379 0 R /F20 382 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-477 0 obj
-<< /Filter /FlateDecode /Length 4704 >>
-stream
-xˎ$>_QG0D"3nނ$c8~7Rz (K|ćO.$ _b=vF0nKǹ?OxJVbKVYZO_7(G=_`5aQ)>wVUᛠ]4 6uJaoi`oѿ x 5aL 7%]=[)J<KO%dHj`縺G0@؍aCޜd2$1e|yS;Xɵ6Z[
- V) (
-dh i<f:2ma) C[ſ7o8Tw5b~V37LA
-V:zؙDM[$9@^voP+Ul_$aZv۞X` LP{鋱HN@ <ʰ!i(3ť
-Հi)mҕu}ԭcJU) q֨ul<'PޔWi8VF"OʫjՖ`S.SfW
-)a
-Dn-O٢}OK
-87q!}V@)"߉l(lGHf
-vQqq)%̙h+\4_sV3
-{Dd/$+;_knEw'vf7m]r.
-) )2\-Y8Oܭ0ݮs6ѮDR%@wmD7Vq& xfӛ-3b38"8cJ>̘*1nPcxwz۴5a!~9'PK1ȄO6 D>1qUVڀNSXH
-@3e!]1"#G
-tI6+Lũ:|?£N5J Tl8>-t> Ҍ>Ƭ^-wn f!Um*~AYmGdk#ufm3AZh7͒|FUM=y߹>VU{bc$\QJ%c֑AI)lirʜC52I&LޝNw3dK+51&8J"LʞzbPILO7$HגIu8)mP#qIb^ƔC֐4`HҤ׽J~߬zl&Sk#FH܊r$eX#znp/za|"~kPJljkR5Odq|GbWobW;
-Tz6丧8I:SuNԳQ*׾mI@V6.%l_ӷqL;8jbE?|hGk䁋!u2jߒ 2a@K?v>@0_rvr=*i-ɄAK @iI˽o~!d:g3D
-.ôtqX8I2*V~pǨ`?Cw
-Cvpꩇp_ըEcZ{
-=U7N8)mӌ#÷N3\>|4t9"<KSޜpn?='qv핽p⠆CED7=qV;m\m[OSlJ߮6hkDI #>TR +W2Q걺r\U&ܰ #e(XuF0r$D!]Fܝ5W~WR"Z=,j1
-"M%Y6XP
-=ś2:fKNjҺYihѮe&<u}~ 9'F&=P5kL u=dU8h@5S/ឩ_~L~NC|C:_PcA~HoK=1FAU6^ޔ9u ?܏# [ uDWʾ9uB&|P/)s ݅={s}'sO\g\ܼp-% a%)̣-~B{ɩEO֛ź[$8lYI4C3?zZMyes&}߿I 8fJ蝜on˴ӯ-O/@@*#r<%(z9!x瀠T{:0dNn耒Ю0*dzuh\TK0Dg@PQ>=E!2%Ǜa5I-okMiir[ 3j?vu
-=#K.tԒ0VRQ"zQȡZSy$q-*8_ Ոqe<C5X\%`gA=RgsSڢ)n Z;xh1HN<
-mw#~%[ْI/FqX#G]+"Wr[Ϸ-oʯtLrQqnռXKlv9?G􇢨U"'.i`?DVj4!
-WMVXr:Z|#=u-uX8@l Yn͒}A߿ݵH /9P|6h7vװʐmo{fQ;.^FN
+478 0 obj
+<< /Filter /FlateDecode /Length 4399 >>
+stream
+x\K\?ЊDQ/@uʈwAV7,f
+À#o[& ܎Hu˟@zi R/ F
+ڐa=<Օ;J'tF]U%sdcpB]m`sS3`p09 08VW
+%VG>v6
+Aց m|T?xYFi.#kcܮqxm%ʵ/xp(MimEZΤ[Jird*ug8pP+>F0!`DSoL)>,$Y8%8VOL
+ISbş3L;g&ڳXj7X_ww?<N{깔EhUJ^+ޙmk)g9f(C
+]ܙ;o6@|k3MsƵtѕgMU:^LՌ cmirPk8þGjǼi<[{agڧx͜Qr뜚~t2}i}"d>^:Iw7 fSr JuOAx9Gj=1mc3iOc+䞬BT
+NJn>S&CfsgKw
+Y6)+|il_ߦ™!ZmڬmwdSʹUnSäg@zC7= $wo
+M^{EF$5
+5OP!jsQrܗK)BrpLziˊepۍ?\P74{spcG)ގ|ly_@SL5jκHae9\\YVBթ@Ǚi|A_˪6Q¡mf([$fD}; {-q&:)yhgJårgЖSnЫ+EvQ%3NȔ'1/OCr$r15.紬sxQ4nbJ؎ֶV@)Yi[+ (-J`q|y)ږJ/w[eȀozZ`9i7zp(vS8R9(QB`@36 3<(`8ϦalW"#xh=ožԛs´l~\b93h+0k=wk'}yChf8<}4C^Ns@WkZ]u%
+ 0@:wtt?Z*t#'|4m 1RRlUmKxkpϒ_i/4݅ΡlibdӾdi_W{eB.nfwLtpShafZTU(v5^%4quEz|-n^o<*9f?I fe ]>;)(N]}^Bv<5?%~A*w:wvRXBSX}sފstK^}nnxnxNcç@3кxxb0Wi=9R){_D$ t)2n$_D
+-"Aq#Rȹ[%<G >PCUw&-X$21 0J9[`iw)Cb@B$bk{J<4l
+IDRT5RSnek}:Wl7[^4!)O@p@Sߐ+ԃO7
endstream
endobj
-476 0 obj
-<< /Type /Page /Contents 477 0 R /Resources 475 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 480 0 R /Annots 481 0 R >>
-endobj
-481 0 obj
-[ 470 0 R 471 0 R 472 0 R 473 0 R 474 0 R ]
-endobj
-470 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 410.79 627.315 417.764 639.556 ]/A << /S /GoTo /D (section.4) >> >>
+477 0 obj
+<< /Type /Page /Contents 478 0 R /Resources 476 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 481 0 R /Annots 482 0 R >>
endobj
-471 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 212.75 601.687 224.705 612.636 ]/A << /S /GoTo /D (section.10) >> >>
+482 0 obj
+[ 472 0 R 473 0 R ]
endobj
472 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 420.112 586.296 432.068 597.245 ]/A << /S /GoTo /D (subsubsection.5.3.3) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 410.788 134.722 417.762 146.893 ]/A << /S /GoTo /D (section.4) >> >>
endobj
473 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 307.126 570.787 319.081 581.855 ]/A << /S /GoTo /D (section.9) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 212.75 109.094 224.705 120.043 ]/A << /S /GoTo /D (section.10) >> >>
endobj
-474 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 492.082 519.65 504.037 531.822 ]/A << /S /GoTo /D (subsubsection.5.3.5) >> >>
-endobj
-478 0 obj
-<< /D [ 476 0 R /XYZ 78.37 808.885 null ] >>
+479 0 obj
+<< /D [ 477 0 R /XYZ 78.37 808.885 null ] >>
endobj
65 0 obj
-<< /D [ 476 0 R /XYZ 79.37 771.024 null ] >>
+<< /D [ 477 0 R /XYZ 79.37 575.442 null ] >>
endobj
69 0 obj
-<< /D [ 476 0 R /XYZ 79.37 385.476 null ] >>
+<< /D [ 477 0 R /XYZ 79.37 282.306 null ] >>
endobj
-475 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 398 0 R /F15 377 0 R /F55 379 0 R /F56 380 0 R /F67 385 0 R /F58 382 0 R /F65 383 0 R /F29 371 0 R /F20 378 0 R /F40 387 0 R /F59 389 0 R /F46 388 0 R /F72 434 0 R /F33 479 0 R >> /ProcSet [ /PDF /Text ] >>
+476 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 384 0 R /F15 381 0 R /F55 383 0 R /F74 480 0 R /F69 402 0 R /F67 389 0 R /F58 386 0 R /F40 391 0 R /F59 393 0 R /F46 392 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-490 0 obj
-<< /Filter /FlateDecode /Length 6159 >>
-stream
-x=˒不<zIΩ=7_ MRRʬv՝
-4%\Kx<3
-"TFrHzdo[xB4dtbH%Sڄ?viQ~k}&;d%L]D2%2 Csm{u`$~7T>D¿SFh6Mӷ}SU0x57%`N2 o/
-
-'h/+5b,8MRsӵ0Le/ڽ\S{9ט㿃~j'3rswg錏ܼ 02}
-7nhG܂n-Kgv-mV*ou ~>NF-d hS z]
-*
-puŠu&Q kd&oEQkG㼧Lu/h?H<߽xt>aCw"(8L8}42.diyn{Y
-F$9ރ`k5oL1,,j0 sdd'8F2<O1 3.]I׵T Wn~sR|&qb!yl<2"}cjCTSkf *ZF#qXѓtYluI\KN)i;1+,=sT?o6+]I
-|A(s*5M597>W:KɇH7Gƶ^2`Rkc2qidWwtQw^d+b[u{MHq^\`/ה ɃlQI.(G/rhqq\ swҴ<#O:1oɅ!1e"SK>n7IUru/ۺ%ku*^:Wh.@,F@I6NMX_s1VֹҒ(7b*u:Cڑs rla {pCűIxhֲ;v`O( Xya0J<* M}<)Ican?}MKMR60#-CYrX(2Mne3fVv+bRhUHT?Q º9)%VJcǺ蔧pgVL݀VhuCPTꈶ8\PBUuQq|!$-qr~23J,;8wQDr֕%Љ䆚'i=|bćZʡ
-*A*" w+Q&) @G/nA}Ou!ȃ6* uԈZI_l V`:C ^ 4W9Nߚ[@nq-/@ׅbo*LD=~爊 nO*basڧ wL"nuVb%&e䗶aqMuxta텱 o.06%oaTC
-Zc26@~Dc0hb1<֭Ġh<d` QzSQ7lu=)p-6 n3rC-Vfvi?~Vw?g1Kє&+` *+%g20HʑD![ZTTQtyY.1?&<Iy,ܸΩߕߣ] g.]JN'- woɉRl!.,Ҏcꪦ0؛N{sZ://6Sf`r0`;5q)X0\o骚`4uG* j-+o'RJ󓼁WW %4Jް&JW#LLPvFVmxBM. Lq 2J3%Ifw /Xw%dOk}xg2%/!&EO*;81QI^-`_4F)KM8II<rBռlff]khz:1cBPTw zűL( xYs$M 72c,Lsmqu4~nJ9{PJ|Zvru,n垭{|}3VeݻWegQ2]{i`G,'Kh g2Hz NyvqK!MIΛ6*nm&M0IW5fZʒvI9aܬ&Lllj o(Ueᾞ1ZFQ.$MK䧣^I:B[8Bb&Z3 ?T67 ab&1B[mQÍH j|-{F{g*0S.` Pė\J'-y^ށHT>ÛxcGͺ͸pxPUH* G 2Ih
-oJizC[6̣0xMoIJ|Dpӏ˽jA!&fr%*J[Rȇ
-9F7o%Qjβ(YG͝֌?_a ]99fakH8L(۲xїٶNa^z*I.Gh@^]›כ:'`Q`ps&RMb ^t!Gf4:DGa=h%f/ԥ| ^3\XۥMű]Y
-,zVo07i
-2 tlCaU|䊬L6h'~jx$ҤB^i@/*?ײrw1pۯP}ටSf ۥ%h-dȜfY'\/Iv,N.yUk)}
-BVgYb1Jڐ
- i9}iga(u#"'oڼڪsl c]f+T$YxOз! <L"0ViDytO)<dѴ :xltOANYJW
-\cڝ>gX:lEyKW?Aҡitmd ״ :2EN¢j~.Dyt;×?BO1 woUz<a kI 6~DeO7#<ciR |Z=S ;9$2-ṝМ OANhNɧLˠCxn'4'Se!uB_ pV~ Ey'T?A)2 itd|ʴ :vBs2H>eZs;9$2-WBag-p[9$:-- AA]7@383 ]u9+Gn`e`g /˧8mZ===)fV,δ[Pո#V-A  H©Ԕw2RY,B#p8_UÛސΗ)bLL;3 CQb!8g;w0'pݛQ)hGssİ{<9%`f$uD͘-;&_ZtG^FZ/W>N;aLb]?xڦ2zWe[D7C[eVCLzY\ÏFCV\S(]?0!
-VÍǶ')Yfƃ'U[-{Lњpm- #)\ ]Hm5V2Lls۶=V:4M%y$SRi*|Z1Eȶ6%$Wb=W%n5cXٖfȄf/5[HX\kfӔgBlΟ lmW(⯔e};8ǭ% ӗt-[>nQP?zU}2Y/y߹JAI_MT vq:.~2lj5R־OWv}rP)FXo9*#}evCFd)qEiX':#3|$B~K W)X߿3' B]u|3ҡ>Ty`awe8CFԇLj2,3,983뾵^E]C+\,=E%/fU[[Nʁ&~>JވИPN0,_hD,fGV}pTW+i*R38NםrXT@t_`>7z3غaüc]
-5j4mN8]4PꡮGU rfN*9 Ry2Q\I.s Y"}+4]^f
-
-*Z9ZԮ j]M0jt#͸_|j #&e1}&GY ^axRֈ6eUrO75kR3QI ^I`#hM@j/p*GL@(ofy+Ơc%o E_5<]Vr]
+486 0 obj
+<< /Filter /FlateDecode /Length 5182 >>
+stream
+x=ɮ$7y)Kis50^K5tPHEdsbY"H"%'zv_>|wcdUӟ^~'v2pOZ1B;}|~04R*x=#2|J%/V\/
++l2Rz_)#{5ƽK7@w7FWDɞDڑl,7ЊHnxH0<= ꅐY|={y5箨jdf)4&x'WǛ3jBUM*%ɩOv\I ת2ZEr ϡbΊN9L".IAP0I@#k5*Ճ\
+(ly_Rʈ@KmCCJa,+g9['.5dxV_?Oߥp1^Pkn}^`TVuM,GVh㤘Aځb0C8pK v1'f%V%ߋ`Y$-%
+祻v>pžcHP8yR@/L3(ܜt"U|i4]
+[@d[r>$1ѤUM蹔f8yM.Ա9 )u~Dp KbQ2>o^?{=K-M[[~ՖG^v) 5L` dqʀTMz|@&ܒœ fF[gΰ
+ lC
+7<E&-ҸIx텡qAoWY3|5Ioka'Mzj> ZҶ-9þ\c3&,6Z`
+<oҠp|!a ng!%2oq Ni(̃
+Omq{ A}&0*#?%+Z9fs"<n 7^K-HXKʒH*}$=\"z pKJ
+tt,q9>u,0й>So.}D/a =.axּ(,ꥐݮʥjXՐ-:zn .L"F9D@Zy$B(
+#'c'e>mj#UR]耙O%%xG⸑.^],P3 $U\,~rܮ퓴_5+g{%^6\=Ձ蹐(t´; ѴÐ8Fc $E-J}m_*K (wRDKL;*-nMy6+Տ27]꤆ɷ{f 8 S`@ 0ApT bC4.t8vpjb]=}u',3yV t(طkzGT&{@PM
+SG].ڮRY='U[+*Cs)Uj"NLy/wJww(ڙRJs>Rڂܙ˖}N%wyn=<1-EJSX;z52VDdLGNDXq VT!Yp0F8cXCjjTS&;c}ǐΟhD><wzxƝ>_DKƁv8B`˸TP菅!>r@S䍨r:slhڕ?5\\C6..~I'̘|5=O['@[G>[ܩEG׎&,zl%]ryY{"[hgI\V.rQks_E;]<^;8"}ҺݎÁwJ^ 0tXZ%1ЀЁbڝ*
+*Ätd2Ó$sG.8nIs0Q]W-I_>4ͶwVJQ%NJ~)~Lʗ{MJ]jP_rߓhۛ3xPyoU0&衊K"q̮YY>QW\.8u9T (-0K[r ۲)>an>NTK@{TMRa;_$UoR8´_鲜*K_~H#?B3
+S0o_>!'ƆgGs0pa !ƕYܝa6x$T5bAu꯾gw'qG;]A; CC-C6 }ln
+#.Z cnkR5
endstream
endobj
+485 0 obj
+<< /Type /Page /Contents 486 0 R /Resources 484 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 481 0 R /Annots 489 0 R >>
+endobj
489 0 obj
-<< /Type /Page /Contents 490 0 R /Resources 488 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 480 0 R /Annots 492 0 R >>
+[ 474 0 R 475 0 R 483 0 R ]
endobj
-492 0 obj
-[ 482 0 R 483 0 R 484 0 R 485 0 R 486 0 R 487 0 R ]
+474 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 420.112 758.132 432.068 769.081 ]/A << /S /GoTo /D (subsubsection.5.3.3) >> >>
endobj
-482 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 368.217 472.929 387.923 483.878 ]/A << /S /GoTo /D (subsection.14.1) >> >>
+475 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 307.126 742.622 319.081 753.691 ]/A << /S /GoTo /D (section.9) >> >>
endobj
483 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 403.644 472.929 415.599 483.878 ]/A << /S /GoTo /D (subsection.14.1) >> >>
-endobj
-484 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 266.008 431.086 277.963 441.925 ]/A << /S /GoTo /D (subsection.18.2) >> >>
-endobj
-485 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 273.956 89.437 284.413 100.894 ]/A << /S /GoTo /D (subsection.17.2) >> >>
-endobj
-486 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 497.51 81.266 514.551 91.43 ]/A << /S /GoTo /D (subsection.14.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 492.084 691.486 504.039 703.657 ]/A << /S /GoTo /D (subsubsection.5.3.5) >> >>
endobj
487 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 88.249 70.508 98.706 81.965 ]/A << /S /GoTo /D (subsection.14.1) >> >>
-endobj
-491 0 obj
-<< /D [ 489 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 485 0 R /XYZ 78.37 808.885 null ] >>
endobj
73 0 obj
-<< /D [ 489 0 R /XYZ 79.37 682.847 null ] >>
+<< /D [ 485 0 R /XYZ 79.37 557.312 null ] >>
endobj
77 0 obj
-<< /D [ 489 0 R /XYZ 79.37 412.149 null ] >>
+<< /D [ 485 0 R /XYZ 79.37 269.03 null ] >>
endobj
-488 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 380 0 R /F23 375 0 R /F20 378 0 R /F67 385 0 R /F15 377 0 R /F16 363 0 R /F55 379 0 R /F57 381 0 R /F58 382 0 R /F26 400 0 R /F40 387 0 R /F59 389 0 R >> /ProcSet [ /PDF /Text ] >>
+484 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F56 384 0 R /F55 383 0 R /F65 387 0 R /F58 386 0 R /F67 389 0 R /F29 375 0 R /F20 382 0 R /F23 379 0 R /F40 391 0 R /F59 393 0 R /F72 438 0 R /F33 488 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-497 0 obj
-<< /Filter /FlateDecode /Length 5297 >>
-stream
-x]K丑ׯq4@k
-`jgU=7 $NYsa-ػ
-3G,;Dq :xcq4AOAYPwu:ΉsrkW|-QKlhEq+0H>4AL7A"a :G' c+ F^[^Vyc<QH|.'}rqJ0^xC2o}z c)<3AǠSxg $>AprΡ }S?3@N߈?34 #)<3AL1{ M&t
-= a'Q z7}N>՚(Ƹ7ʎro1;Dt
-ͽc$*ƠS8xY+NGqċG|G
-Kx*I3)#Is|7ҢnQ/%px [ "N -WlRfwWQ-z|uhU
-|XR<0q IV?/zbju1nEm4(!&z+m!Wz¿;d;ފng[DC-kvv( 8f9f2,Ш@_֚c,Z302UG 17)
-_)&<z'5=QܵKq^`3VII\V5~q뚏/crg {2VƁgTL7^w9ӯpg_;ө/z^/gҥl(hs8*QD%)>"xbK|4n?MY%
-Ї`'!PX;@l5?O7L<.H| $a?(  C7D7
-'dh0Fݢ_Q˖ Eݣü71+
-@ Ν
-yIv'O. )0g>{v$B'kFW!,
-,0WKaOa+l©F6L@Z ]IQT~CQU$rs@/J
-0MR 47pW=M|^{3UL劇Rvέ>k뎔%x%ME0 :. 'ͬfK+xN`n`]TG2D|sUt,8{sf8WϩY(zmq?vB-)2fVsPkkj%
-z,Ű.m9u(s,B5k"#P#kjnP9ݗRGJב?v̋xo+w$Q| /|~_.<\X^D UHכT֤HHt5V3
-WL`'xE47^v_|OI<I'~X_Z^
-
-wkè@x>{x3^3F~_|f纡,p gf OkCO"nLF\J _IRf=J]?`5QFh0;_ݻ5@JgaߜsKV+,+{+]؞G6>!y1FV/gF,,U:܁E .o{+{9r"5S$" UYoF #Q|rDn7[ݿ")WĮQnyuJ)#p?}
-OJYCJKQ\I
-YneJۦ|.&r"fk̴2m#Tt9ͦk
-@fTa1t p38_0]>i;,/'d8
-e4UB鿿M>}n
-
- |~a: •*RY !vQ@*Q9(4%f/-msŻ_Ӝ$$Il깗k[eV3ڦtc U݃:KCK?[ND݇ 2$98^\
-._JRSWA~i6?عߥ[F@J)!ØjRg 7:gPi2i'dwn9QNc' [ZA,2Lc~*61h(…>ͻx# kҏw *r0ͺ*+S/}!tͼ/2oa~y^c^fF7Զf^7c\2sy'^x̻d]kwyך޵+piwy/n>ʻVhFֶٰ+v^"'8ܰj̗n*ߥ
+498 0 obj
+<< /Filter /FlateDecode /Length 6102 >>
+stream
+x]K$@fOmwú /ԓRDd(2k` j:3OI)D/_'E,"8&CXKy8SO\>}[ ,5\Y>oBr _/IRߪ,YP˯~xf[i*}!/Կ~_s97+/RK]f(jF8cB!$3V@,gZi@2HWε?
+ ?QC
++n`?#Sp"ɓJ+:ܫk7 iֻcwD%lGi2R61zQtgt""3j7 ;
+w,Ԕnޓ ™F=̨hRA1m$eƎ|Dai$cHKF>8JZHS+7d4nUŤ>zPn(ˠCim4dAֶim
+k{aJ>z(M
+JDLb4" -<*
+PvUkKxʠW4n8dzHΗeWk/pVWk V_;s-ߪ\RSK]#}TSzRaJ'/ZLxߊ!Zd>}IADսVӹv{'Qz߽igVZVW
+_tvaf4;a0k`dsp"tEi`=h oXBVtN;[d#@ޮЎ| zy.mf(=T­ ]޺ZPOCSށa ͻ:
+e%e<F;?݀yPҴf2V1/Xlm>=|:*EX6 8JjB%+[pZXomU
+ZPSx
+a( 89Y_R[b]TLIc(WV Nq,u9Yh'6<rd_%l2vd<K+~wg7}ZLo赁׉W-;yuVȢjA7(HU]3S Jmf/}]H(&]LsffZV{频,UNpCf{!X )\,-!ڌe㼣qц,D[Ν+үzk3|c
+?8ssۆ
+s$)'`!uҟ (Bwr;)?sQl- Sڜ (_y 9pA @>Dgwn<ǎG2wXd;&I[kga~qπ:U\.0Wg)sI#ƅN(l-M%-y&,)PB ڞo*yvI)ϧ0(޶V;<p;z!/%M ] 
+H5C
+x3v6Ol{_L4s9 )``qou~e=N+
+aAx%?YZ%XD'S((@8{xm|
+T"(>OgBLÿxN8vBX0GV2ҩHL{i6&&41 Kt' Ϭ;f{݊9%Y/wQ+>ȇQTsrŒ=ّrnYwCu{Y|ι-Üy|y|i4qgcDaÔpNr Ҡ2wN'%5dc-KoLvy)R MKrwC..=Ep4Ӣ2d%lo cP;yv)TcUw*|A]]]4yw˕һz3AWc:OFZ˜6SIg@A)K?l^_[Kh) kع-9MF..IpgIblaΫQT/Վ&(G-lX%֦v{E7V[Ⱥzw.۸\|[hǂn]'HmԩK ՙ\Zn2p,ekviT4,Opf}7=KaCKK%Rm<*Sxv$w(p
+!꼽׀q.c̫pd>8"`쫔_h#wVͬ@,-Yb9.Kop%,kmҵȊ"MȾ<Uynd1;}r,2wqh߼,֭,R p3*4$]Zg",.|/yOz#2޿]W5AcC8GWovrlكF+I|h"^!4I䆧r[{عc8-rrl|3Ub,z+qVB;rvcG7F>b>-׮fK%itO^/Fo^G{mu5(Ⱦpww'Zt뚄Mq|2u>5Ed2BjeƑ_<oH*MS nګ ~qc-Rj-Q|RDLշ֋KeVtwjF՘[s72x Э%۾w1Iv0r ]Zفjqjlto6IQ
endstream
endobj
-496 0 obj
-<< /Type /Page /Contents 497 0 R /Resources 495 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 480 0 R /Annots 499 0 R >>
+497 0 obj
+<< /Type /Page /Contents 498 0 R /Resources 496 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 481 0 R /Annots 500 0 R >>
endobj
-499 0 obj
-[ 493 0 R 494 0 R ]
+500 0 obj
+[ 490 0 R 491 0 R 492 0 R 493 0 R 494 0 R 495 0 R ]
+endobj
+490 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 368.217 679.377 387.923 690.326 ]/A << /S /GoTo /D (subsection.14.1) >> >>
+endobj
+491 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 403.644 679.377 415.599 690.326 ]/A << /S /GoTo /D (subsection.14.1) >> >>
+endobj
+492 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 266.008 637.534 277.963 648.373 ]/A << /S /GoTo /D (subsection.18.2) >> >>
endobj
493 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 312.415 421.78 324.37 433.736 ]/A << /S /GoTo /D (subsection.6.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 273.956 86.169 284.413 97.626 ]/A << /S /GoTo /D (subsection.17.2) >> >>
endobj
494 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 279.848 409.825 291.804 421.78 ]/A << /S /GoTo /D (subsection.12.4) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 497.51 77.998 514.551 88.162 ]/A << /S /GoTo /D (subsection.14.1) >> >>
endobj
-498 0 obj
-<< /D [ 496 0 R /XYZ 78.37 808.885 null ] >>
+495 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 88.249 67.24 98.706 78.697 ]/A << /S /GoTo /D (subsection.14.1) >> >>
endobj
-81 0 obj
-<< /D [ 496 0 R /XYZ 79.37 396.866 null ] >>
+499 0 obj
+<< /D [ 497 0 R /XYZ 78.37 808.885 null ] >>
endobj
-85 0 obj
-<< /D [ 496 0 R /XYZ 79.37 231.614 null ] >>
+81 0 obj
+<< /D [ 497 0 R /XYZ 79.37 618.598 null ] >>
endobj
-495 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 380 0 R /F15 377 0 R /F23 375 0 R /F67 385 0 R /F55 379 0 R /F65 383 0 R >> /ProcSet [ /PDF /Text ] >>
+496 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F16 367 0 R /F56 384 0 R /F55 383 0 R /F67 389 0 R /F57 385 0 R /F58 386 0 R /F20 382 0 R /F26 404 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-502 0 obj
-<< /Filter /FlateDecode /Length 4332 >>
-stream
-x\K$ ϯsE`mi>9/ޔJU]co;zP$T/ _}ӟoB/yF-~~_"b`b`܈Յs^\͹Kx}V\b 2u-߹?}h3
-6ȇVN2}Ih]
-Mծ,Sm~)T^{)-J-%Hd:^Y+OC8-0`{kUa{yeMO|hoQ_S ǟvuF)Vji@ XXɒcs"+բ,-y+{if40 mE{4ܚy2\ q:4k]AE1v6&%g,?}~
-q\ P o_~~؏G~hqa܌ v=a<s~I栂`fNm\5ɸl~vKAjƵ:Z |jJUYSCpLZv(*l˘Yl 8f앆bXíXK7$
-G=S4;)=6j{M}w@
-z %MVJyAIh~ؖGл)G/)昤a5p'1P$ؗgDo'a5čcXu5"gcMRw'ލeU|XwmS BbhI{V+ JP-^ӼchF1[6YѴŮBO@NHz iұt] ETSC"Of>6AXRVUF:;-$cGڽC72j/Gp<'/L*CP󳨇}xYso/ō*Y7x:pI={*IԅP0F4+]ѨŹkp{1%=Fftfv}Vw_2uk4rHfRْVퟰaP
-R]҉Gm67_/_g 5F[+(1Q"޼-£*t䳱9t[:8ŗL>!NqڢyfÇ7׼ʑiſ ra7l_sHa0CA쿿o~p۞µG3U=I%՚]v%H|Teʋno`8-
- v82vYiZF0m`s~]?˜v>iSb)GmJz8̦
-_wMt0 `jN9w
-.]8wf୽:h/i7SG)
-(P
-]iRw=9݃)|-1
-<W RXP0gwA4 8HS~Tm8HiDŽ=G'A]jTlcRJ}Y:Ī
-9=Qs|euru_@ΰc.Ff)T?qc:+~/>NtLb
- Wj_ݨiʹ%W+u}n}?&3(ϴ͐fh Lb<
-' ]LCkOl؆6h&9.#o"qI5Z_>XLsuG9g?2BiOtO~_ LJ:} !g]`:md1>ݟvMpp!*su H<<Z]3ʒGU
-M"M\]=ٿ^eχܻ5+ܦԺZ<<h%/ITh?<|{ˬ_@\Zt,G#h鸺ͫv&z17
-Eo8HS tWcFo`D h#rֲwc*_TJnm%1ۣLtHh3nMmWl4Kl tpaJi rCwǁPL:3YrO -؋|"
-߹i(”"jgn>7~ۑ{Uҷѣ)x3)MuCa(
-_+rY3Vƹ4%P$U$Qwu5k#55i,ث٪./a0܎ !6\wp* :CFnBǏc01Jk;!ƴ {w
-RXI7 7 B~MP{+XkI/!\W0sg&_N<Fb͂Üf!<(X >y R 7#ٖL é{mEr2#]sݿ]ڙ^-Rjpr=K+}zpKLneI7Ĵ'ɑDE|,J۴Z^ߧx3UK~J]`RvԷ!_Ciկe2;G @mDįi˩6(tv^_Pnz8mX˙#'nڑ%;IQic^)3LSȁuԶ
-Kn63haG"S.OBd;A.
+505 0 obj
+<< /Filter /FlateDecode /Length 5319 >>
+stream
+x]K\WԲ€շYt{`
+z_yGHQ7i}n[jCc]Y&>!Ϯoc8s: Ħ}bm&]D]r۲T%r=+W2f9@QM02kTJÌ֔V܎Ōc{)jQZa}`-W!0}^1'Ue]qi/kZ*r&k/:t`gV\>Dj00/o>^j9 'rm/(Oߟ~$FIZ<'A*GAapj [J
+pt2< N@YK̺ocq1GNԅX= m'8~y ezWѧ
+yy/SV]۶iFS^~I(-MLc/uyFKR rF>}w$mMl
+K+5
+($ζ>O9`7cM/e n1@12Au?ਦQܨq[5"wV‰ {" Vnz\8ӺYPuwiiL=eji1 bhI臥rawO >b[Ÿ^۞Lj
+81kv#P Ngm(@*x1MNvfŁ1۰l )?fzS-E628u3BlFHM x<njEa[l2^% >X) -C$**YZ74PrA^ @e dc,S B3m q
+3ߖp=pg`Ƒ1w&$ `X3'<3g ,tw*Xk 4J=݂B~[ӝ䏫rFs>
+T@ iPГ*k7}
+R>iY$_i!"21"9]l
+
+mf rq30kOl >u{9]98tnytz_#kBIdI vgCrRS=ԯ7w/lzVS=ԯaȵV@&RyWn֛;^"Bb I&6ϯ*!gI
+&mC:&P; P =L)=ԯ<TߘS@&yl)ls'؞E3y=sz0ܩ%jҺ+
+OfO!"MJ?>o"YM3<\?D sZr
+UIԧ֏Ō8Iˌ3's<E%Vl^Xfs7Tt͍}j]G8Qsx϶{F C]GJCV/8ї7cr m
+o^OydZ#*Q)Fs?uԺJH'*]\'͠3ͪ-"nPDJ UrxV8/܍dBNКsA^iY9|pi;%M!4.ᣙUQr\^7aܭ%v9R(id;VuBJ٭ud'eCWr]"T>\ˠ%,NW 虯b`by 3j#Y\gZ[.6c_}9ǚadA%ެ˗fX%i-˂ZzN[]jC$eۡ-\9J>ު-ydEl"x{M֞%h`RSWmRJ-m;2! R_Ʋ}U]+? 50ZQ:}sɒƴ4(܇E*?HbzW2XJw#!q]R{I9+6m\ 9-XZnY&䁵udg،YwH<hde0dTq]^N:`A\0S1_op4J2XW }V\oo> sw
+0manLT?G8d3.J*Tv+-*O01Lh[^}2leB[rѴWw<h̭%I% jŴ4kSaόmxq z
+ udQyU䧿0x~CMo0W&;fMC dt"6|0]qe %Crc} Kl`?B/\UG96j|4v
+| ֦T1}|c+0<TZvXX
+kk
+t+-)#t*u}ZQ%Z-^$!u#榥 x1Gj|V+'i.!sZIoovqq.Q\YZ.S5Ê[+C. )ji][Sn5V~ƚƩX)ڽKi4~~ne3OeE<c5 > _, Ny3)9\_°qY֤5Lԭ#on~,bcKx8R)YisC8<"b}mP ?cYوI$pXBl4?ˠ;ǾY5
+DU $7nTh(*3N:ys6zp=n=܏E'k4`5^k_`۾@-bѵz<{}?-h>ѤN$~sVŠԵ}S;w[VDqR:zȓޯT1fAokSkŒ5E^TAS.]q^͋512/}򵀁Zzx9sNy(j? V8|ʷuBp37~<0} R3 b8nZֵ"7xr'䰋f>X[Pa720 RB(f Hc<-Do\ GcuGBYX\ c|;ܨhF<71فO9vQRV'S4~*87c@Q:@t)8b~:RldA(wmqh%$g~SP#}3mvRMx0^7%eSI/6FʝeQ#ɷ9_d
+쉿'rh~
+,˟aEW_`Xw{vDTKO݁AWMܖ{.A JO"t>9"$g+LwnK$P=qe5mWv\Lx'C7t{?GUyZc5]W~emK N#̘.fnIq/ב{ OܣMn'=m@ɷuCʎe ZkFj4`t֍Z܋lM" $Gu.xި2mI]3lmt zX0i-ä^)(pdsиŻ_i&C;a%3: >
+ xk?5,o
endstream
endobj
-501 0 obj
-<< /Type /Page /Contents 502 0 R /Resources 500 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 480 0 R >>
+504 0 obj
+<< /Type /Page /Contents 505 0 R /Resources 503 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 481 0 R /Annots 507 0 R >>
endobj
-503 0 obj
-<< /D [ 501 0 R /XYZ 78.37 808.885 null ] >>
+507 0 obj
+[ 501 0 R 502 0 R ]
endobj
-500 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 377 0 R /F56 380 0 R /F23 375 0 R /F58 382 0 R /F57 381 0 R /F55 379 0 R /F20 378 0 R /F66 384 0 R /F65 383 0 R /F40 387 0 R /F59 389 0 R >> /ProcSet [ /PDF /Text ] >>
+501 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 312.415 625.868 324.37 637.823 ]/A << /S /GoTo /D (subsection.6.2) >> >>
endobj
-507 0 obj
-<< /Filter /FlateDecode /Length 5896 >>
-stream
-x]K$ϯ}h0vZ6= MI k-H2dfVeԪ`0d0dIY_>Y~*돟򭙖}ɁRn%;chm~<
-Vkn]m`Z0Ǭ ݾ#;.d|*&zKϿ| r۴o釛
-&w{&vT2)?((m`
-hXuҾ;+LdBjW!y;skGicMe>‡L\,
-%%2jmGku~g>BЏ#ן{u[޸srVA_3*xXuzJ٣q<A ~&[x>ĄCd3 ''U{#RMV9 lVeJOt&hJ-Yd.bD{F3 qЊ7O-_!Cbuaҕf'jiVnQjImHk̕W<{d7:l*!R\Wɭml+
-gN2oyAubC"7pB}at.y:Zc
-ԓww/{NyIkKmNͳ7-`ݶ7gc՛}m@= "дƵ|h.4F֑Ҵ'đKPn2ǡiA^ꊞV4$Tj=@w=2LZz_?iGoX1Iq/ V(b {jmDA]5.HFE$ĩ}7('%Q+O:ⲬCЫ"Y
-@oz{~~EĴd{|5Z8Ϳ~`l9Mq䰏Z(z|Cyɚ#4cj?4$w*v3*%mp8@7p<ĥ5dȻ{3Uîw-B=_x
-~-
-_g
-j[&Fi}X@n"i˺kۮb_ pҞ}M}4;Q򅋮/
-Ki&܊Z-k;"X8gCS$tXc8LLr[a&:׉< ɩyS9($2:M9beGL:A;ĢҚE8I@B51&bWAFI$$d1+ W - d! ͵6
-t/τDTWXx'O]Q <"ږ#!a C LSD~1!+o*▙R7e9HB,D@B@dorT7mMv4opθx[Wyl'2Z`jz/lea>JM
-UŐѢb5ŨH3Do)\
-kҁDn 4H`0q–Gj+"F F1dUs#iŁA[,<Gr;-xAWCE71+FD T;H)CkLWc״_[ҢOpȬs
-࡝\\:!Ԅt+8^b'ۤV ѳ 3"e0b!KNہ"CQ,
-|g⥞K Ik ܢXU|(j1
-%R$B [b\Rjs6H0>S19wb~CN.r)au
-%ʵ,]0)xzAxpbvZ˃{W|s6q>% >?i׷@Gt' o|@5@_7Wa\GtvE=a6A=$|w^'7tWkBj*ܘ@NGHW= T :n ]/ټr$CB4bK Suc_b3,oxͻ
-endstream
+502 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 279.848 613.913 291.804 625.868 ]/A << /S /GoTo /D (subsection.12.4) >> >>
endobj
506 0 obj
-<< /Type /Page /Contents 507 0 R /Resources 505 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 480 0 R /Annots 509 0 R >>
+<< /D [ 504 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+85 0 obj
+<< /D [ 504 0 R /XYZ 79.37 601.029 null ] >>
+endobj
+89 0 obj
+<< /D [ 504 0 R /XYZ 79.37 436.2 null ] >>
+endobj
+503 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 384 0 R /F15 381 0 R /F23 379 0 R /F67 389 0 R /F55 383 0 R /F65 387 0 R /F58 386 0 R /F57 385 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+510 0 obj
+<< /Filter /FlateDecode /Length 4151 >>
+stream
+x\I7̡ h <-)3!q2HTk;C("OD/,|/ z|I#gV,?-?<q!^mRKD05מsKzsutV6_qy?X"8SڟY~~WH{hfdjSWrntz^uOr3Jw~*ԨUy-f.,|3}eS
+=!]|ݸLaON&j
+5Ux]Xg^W6 n/FYJi,/߰^/kjE,K%<q WQ.VpMzXW77ǏwLѵTdbT0 c$QD([Q_nE=3~AZTGT"T"v0JMD%*<jeIBEԚmZW[=nǒr @E$!uFh,.X*ykbPBzBAEZ_u )osdղKO.l=K9E*f;;tuN=kNPaSLh)EAjdZC_6MkFOHC/
+9vԍo*x"sk*xL{qJEϒkƅ[%Tϑ#qRf{f%(Jp#[P4D7 @zfE%ujlTk{&
+$BH9= r:ZgʍWN2L괅/Fih+[.I-?5HP6Yq/YJ͚2]"IBE>B}LtThjL&>OazvI s[ϳ1OI]gǥik`
+GĚz!+8ݳn}6`2>JJ9u&ZԯKQWOܘw@-N:I1|ʹ"єlKa ^4 ܟ(@eFTM02̾k+[-plKLԛԯx{9Q|G8HwA&0@٨r( JV营5(}6rr:g!@[-q
+q-ujڞ&=$,{/ Ɵk^Yd3q{?}Gg:) XܹgKCꬕ h Bx x %_U/ރ,t@eBJ JetXX=vpXyQ;1)YIARoE
+Ƭﳴ ۥc)]u||;,m&FsmTk2yWp `>p&% u[5%1S{4咠:IU;kEHm۸Vb s}(V-*iWnq=[e-U{3$T
+^f]I~;܆q'
+Wpu-/ZLD$4c݇Xd2)ڭF)3rFiiާ)v2
+圬0xKplH $ݱL.}1RQ
+^lx,H\iA~Jn$$-o;7G80c~l|$9L~TA!8D2\&2@pm+&eǰY%0y.VKc@ 24)\#7e%|=(yqcN8!_k<-^QKN/quu~CP_]gQ{
+/7w~2}N`/ߤJCM8=K2DP׭KVxpƬqОK>֢+7Y!#`S;?Ll+<
+EУ/)Qft J>ac>i&cZEOl-9&P$1epƕRzff<͸t $i НT&lDY$ʔk4@LٸW.[Ou4RQ&@B:'8[jz  }¸_p@q& FbI;GFKdF%/#jVsl3U{Npksr$ho+[} NpXDg~7q@0QT`/}*{e
+
+veO`uMTmn ӋhaNO:WCZ~#e@\)aG,]̓r<&xpO í3[7g~c.jW cڌZQ [)ֶPVÜ
+ 5jxZ~#O̔
+endstream
endobj
509 0 obj
-[ 504 0 R ]
+<< /Type /Page /Contents 510 0 R /Resources 508 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 481 0 R >>
endobj
-504 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 138.738 432.776 150.693 444.732 ]/A << /S /GoTo /D (section.10) >> >>
+511 0 obj
+<< /D [ 509 0 R /XYZ 78.37 808.885 null ] >>
endobj
508 0 obj
-<< /D [ 506 0 R /XYZ 78.37 808.885 null ] >>
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F56 384 0 R /F20 382 0 R /F55 383 0 R /F57 385 0 R /F66 388 0 R /F65 387 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-505 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 380 0 R /F15 377 0 R /F57 381 0 R /F55 379 0 R /F58 382 0 R /F29 371 0 R /F20 378 0 R /F40 387 0 R /F59 389 0 R >> /ProcSet [ /PDF /Text ] >>
+515 0 obj
+<< /Filter /FlateDecode /Length 5992 >>
+stream
+x]M$7!5
+r 0{joO, x/DRDdFVu{ ]UL{(JPj.h_?h 
+⥨m`@I_hlJ\~zIkៅߟvڀ,g |,ۏ?mM(#Sg㾶KjR[uk _n/?;_ ʔpT-S*HwMnu+{ٯLes_[-U
+J5ߗg^voL.<{i_ ʄc(J?_B[uدӶlo mNIt&1(o7@tԺ4!6no̍$mjeP{y-*/}ȃ%½„BH4vFT({_$I՗X`jAEXmBZKǴ|6g5uԦoiqiFX~pɗY}oPjCwb]>×;sfb9]*pW S OKԀ6Y}(:7:iO{RR*~YipQN`@ۈpکY"H}!bGgB$-#›;HQ7i;G^&R2(6\a2TU%1^?<,#lް}s8W
+4LŷӠ\(g!y;s⽣ƷQsSsS!K5
+hwO`!l10iRo8ГsKl~W/3uZfj]mdC5JG<s'BTSG!RjܜW!Cd6Fj􀨕s;
+H2_yNt9'bC"/qwB} nw&y8؜wc
+ww+zLG:˜ ݚg=nqio0
+Z;K*AZz]?{/N%Xo$y LC[ɮגnE] nĠ]&+]g|T`yc!BpIޯk^dk@z:qY\j3OS9Sbgƫl"m&Vzf Wp!2^ l0xS }#'pqO0 cXߏX(!Iq ,4O\MϷS(Ua)e2;.o %e0>4%N#|rH4.*QXcqVh3? FT<>4/k`y3q.:Rq7֞<QWѤ|y;xS'7:)5ޚdA\H%>Yχӈ?r*j1/=o}I~óS֔vZi'1RZ7kU'sÜF;_a㘏5۷*57 ҕL0 X9 8[{i٘RS7nBFD^vC]x~ _Ns&fh;sF;<0% o14+,'zr^y=7;oG5>dn&k9aA2Džtod+"YEN>ϗf`+P,'2hemV*_G5so<ٲ4c
+}kOAR1%!^G/p<GYXW~x8HS'JE{>No_J7p:g:'_-BM>H}"hWވҕNoz~V#`yNp>x2/8[g3x6vtg7Ξ?"ğC8{
+F=
+ ^ ߯Ekxgq\w|
+5iL@">@>;h^_wCSN.֨oOW.ClQt}/˩ޞA{QrQS<W/E֩nE'k)Ҵ7M BhZgC{Dz(lBJR0k4ǢVm+KҬ6cZQ.:s6
+(h,/J ȘqfndbN!K[B$R31Q6
+챴# x&n@Xb] reRܰtak2*ab -`iX@,܍G2 ĝv ڊ!XÕWF#e_#1s,P dT*I4
+2>Kd5HldK+CH5;jXIŎm7TNE8}eZ;(gL\VxD׺I+ljځb@W:2|
+b7ܹ i{7/[RS0NC}6} qxO2Нiv3;nhu;w]|tN2*qln\OnȮZ+LjF\@GsO+zUC7r׷_Mgnlވ4|;_RxU*ZT> ?|of~XӢ׋I~'_Zm znpΗJ <A*.;ϲim)OoĆrz}DMGP4e]]{w'1k+_oe9\P
+^n{׶{KpT]7Cgc;$V?z[
+h,朸nMī+mp
+endstream
+endobj
+514 0 obj
+<< /Type /Page /Contents 515 0 R /Resources 513 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 481 0 R /Annots 517 0 R >>
+endobj
+517 0 obj
+[ 512 0 R ]
+endobj
+512 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 138.738 432.711 150.693 444.666 ]/A << /S /GoTo /D (section.10) >> >>
+endobj
+516 0 obj
+<< /D [ 514 0 R /XYZ 78.37 808.885 null ] >>
endobj
513 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 384 0 R /F15 381 0 R /F57 385 0 R /F55 383 0 R /F58 386 0 R /F29 375 0 R /F20 382 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+521 0 obj
<< /Filter /FlateDecode /Length 4840 >>
stream
-x=ˎ$9n<z`}o=6`9zP"Ȫ3SAQ$E%fE^~~*\~tKko/
-xC0߿h HKI
-L׆b7&$2!ʤiu!pjV_u?4}Hnh)M+ 79SU2>g^:6]+t{T7ӖBE$]Y__(q']A|>^k@_<v@M^~ylЗ(O'i 6`0_\**>(dљ-7eJnܛ23`ib_+D  =
-}أ6O0{+<
-qIBUn)& 2$Q$y0cA`Pt4s8cq( `[[rDEpIBU6): 2i
-|PD`pCD#I C
-{׮7xӷve<n ~2ΩW+ [n|JLXU(~DrN մ[ezG|1o2k&pue+ۂ)BN?[nmb `
-wd dur_#y)gD'Ƽ#_NuE*OU?=zqO/ Z(sqK C
-~%fLHʻR;vZ&SAa
-9="ӭ#cY%@yxn5FI+DL">˝)mJwJqH:W)y5uT@%!9VUq<z;b/]%T.3b&h_wTu1XevC{i.wt#c穮QiO%S#WL5ĺ67|ލe:#̉za&읁6䤿皂!hRtҵ*LÉSIp9UU:rkv[plWVE8wuDqRޮ3$+Cg+W&i'GҀSl,DSrܧb5H66E픤[Y5[Uc8[r>0XNUxJ4XSgPz*8=Pu:dmV;׆sN0jrhd 7\*k%=)a?Wly
-׹^ua!YDz<l)`:~xqն UWqD]0E"[wš1VD 6}j$ eХ>đ w"fHt`n627|VqUw (]^y2>n7J\^~ST^EHE<ՒhH\fz*"(e6aZSI5@*zѩ#L[NNmXjsvs6Wb C x`uL`-vM@4 ']:܂8Sp73Zt^>"ByǑ%=~b<dg{73!aV 9[v̀<k[+}hЀ11f ij1}uȺ7 l'S]vٙ=]P`*T80H&+˴@n64A?Lͽ 6.]Ȗ&F]_y}I!YGrC~X~-bo
-ǹIf `qwFigOY/ٞO*Zb ];ZxH,.\w4¤Eי-2Ғ⯇-)ӬgW )'Ut`ahMrm(֣j5w "{}1JDi?3*Ἒ1=3-eߠ=uG߮sQn%M|#}á1;IR~bTN5o|E7<)-rwһnF k/!wWHe%^(37R/=z1
-{7FQͪ.syo)ȊZ{o!{:[ᎉvZ
-
-Rk8U2w˹4.i =Pm8ǥ
- ӑĄ1לNQ9,y׶}Eh}U^(>Mae!_y_^;M&_g$sS',+|'ޤK5rbI5]wZ$C/=%YTܓM UU&`}TZVL\7ZwvZH j_S֏px8ƻyo?v@Vs凞Í[pHwL"5O<`¸`(x9*8ϿJ?oC<K |6`F1ުggi44,%Kn*^WB}=k #Ѳ[eeD_хCߎ .@꣍ϸqɽ T7]tb&6o(F::psz8N,V%O|2o3i _7@(_p_Ζ/+V^ cpqa5g&1[#i6ԟߴ¬P>I)sYVy奙~h)/s[' egqO㮲•KUG;}OYRuArYX75G;A.Gp~]9/jrE CQ%#h<45
-c;H.ڃk?};NMZiS1R&&~ nj"^([*lK:ɣ"=ÍUS9mޭbyסNZxE,*lW*~
+x=ˎ$9n<zуz+:XbOc m`N()"2f<TPIQ|-/y$
+??]?tEt?ɋ( B{N P?.{R)ƿcNJk?<Ѿ'yL_Hn&kEry4D"'Vo]ϯgϡf VtvZ&f ωbﯪ09?_7^ױ<WVF^ҥۣT6O7x'B@%(im"‰k ?pZ# 4 .%Ӏhb^˥e<a\<=I#!f܁RY&!#\klܔe',( FhĽ/3
+!$x{+H
+>owٟos
+' JNEZ}ILt8+%pЎAC/g%PG D#:H
+J_~L'7S;HQ<5 .*̀56K[a|ܕcHZp6sS&>6oǀvir<ԜyIr<ueb0srTǍ-I#L:c-|BB[5zDu SHT8Tc (6
+LB{A"Nf'ql2e8'XƖeS-S
+Si -mPۤ/H4:T0Nd\
+`<.-gO
+ Uh,8HC
+eWLhp}tL ש'd3@6y
+ڠ1,k#h:c-βٖ^)լJJi;4hmh
+GiOq'2\=0|]9'pS@%hŌ@IjJDk‚6!; iY_#W 4^Nr,!Pn)U.Cz
+nEfLHJ;vZy&sAQ
+#ӭ#SY$ymx5FI+DC|DL kL)mBwJʻ~X:W9OyUuT@%19VUq<z;c/m%T*3ch'h_wu1Xfv yv<ӣUF>(ګNO)ˌ\254y3w ?'yd0Yhks.PNQSh0v,E.]PeN5r$s%!"[5V^^#e{%(ڿZ.A9+#jt,:B-D|rEfGq' q;ņr^:%,;0I5=LI:5T(1QI/\UuTڈk@ҤĚ2שz0HSo^h" Y|[a ,g.dnTke>a?Wcly2׹^tb!Yò<lPv*m!\ms L5N:c<D#1▷T$iK }j$ s)]$wI#^D 9̖il,A[UθKt zG뵔:ypCp*B5D*mS-45AOZEMT4gAZ<#zz)
+cMYup\e'4lK376110l$PxV3ToNz2t-%banf6g^lyo8sFvb^q#Xn8gc(
+]"3^sطA=Ny>նW{_13c^cҔbdh5oJNs=]PP2TbéRhWi%mdF~H z.odvݮyz>kC*~SD豨(["5N_^k1&]5;Šm%9:Ӎf̣ǟ[^ g{>ѫh-eCHgi,״&-}o ﴤ w=lIf=2hH9"l.cK 5IqZ%;ULҋg(Y(uj|\}:Ԏ>v*o|:_Nd7'>:Nr=r*1x{..Oyy֍p#0^Uh]} B*ؖzC˜X?75N$I`+kl&iK
+lSES `Ɍf..@엖{c(R+Cg{`6-t
+(\>*콻C8yw
+r&}phm$TL^ E<r!X;;=jz.ق^v W;W7Džћ`o
+7IDp!a
+f8ӻ`,?#LBb8angH f-F+<W'``1 fQɦP y m]-_+Vbɭ1-rݥ0ۮ\S7
+ƻe8r
+3%U{ 4 K|2B3^uzt17Ez>9{u(ћtN׽~RU.X5XVQ@Cec"K
+˟{0?jZ%aGe~Tus~guԙoV-e
+_ njcthWc ;a9k1n$]CCy+
+B~u<c=OQ{@d.({D6NsyC ·o1k+C6ޭ]~u(VhLLRyIvV S}/N v9S-%Z=σ?!hKSڛpawqp!3
+hS6:^-j=F0Es,8M)i~wRkعPk/w'MTr
+Ȧ{'efҤe돧z?nrgߖ-/s_7A^0caa[)koVxɳdgB G YJ6t&ȼXilWrrƔwdv!]:Gԯ* \$_w{X_;e]aE>83zsjyaPIHs=$z("h7QM豛^`ٷ?ˢگ+Nob)<ZITJ2z65C(8]4dȺɖ:'aIg6y4SD?آzh,w{;X\)6Q H
endstream
endobj
-512 0 obj
-<< /Type /Page /Contents 513 0 R /Resources 511 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 480 0 R >>
-endobj
-514 0 obj
-<< /D [ 512 0 R /XYZ 78.37 808.885 null ] >>
+520 0 obj
+<< /Type /Page /Contents 521 0 R /Resources 519 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 481 0 R >>
endobj
-89 0 obj
-<< /D [ 512 0 R /XYZ 79.37 675.694 null ] >>
+522 0 obj
+<< /D [ 520 0 R /XYZ 78.37 808.885 null ] >>
endobj
93 0 obj
-<< /D [ 512 0 R /XYZ 79.37 638.301 null ] >>
+<< /D [ 520 0 R /XYZ 79.37 675.694 null ] >>
endobj
97 0 obj
-<< /D [ 512 0 R /XYZ 79.37 340.527 null ] >>
+<< /D [ 520 0 R /XYZ 79.37 638.301 null ] >>
endobj
-511 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 380 0 R /F29 371 0 R /F20 378 0 R /F69 398 0 R /F15 377 0 R /F55 379 0 R /F66 384 0 R /F58 382 0 R /F74 469 0 R /F65 383 0 R /F40 387 0 R /F59 389 0 R >> /ProcSet [ /PDF /Text ] >>
+101 0 obj
+<< /D [ 520 0 R /XYZ 79.37 340.527 null ] >>
endobj
-522 0 obj
-<< /Filter /FlateDecode /Length 4988 >>
-stream
-x]K$ ϯ}hE0Xdz۽s7'$6
- R(y_ [{je/Z^‡DGk]G
-s" ?pW-cT]xb3-ADpK950Q(>Ж0~MFnMI͑eu9 a Ю1:DaBlbTeo!jqM -a-uhPL;.Nap%4h{#RxE
-4- 7>]:K%ke;IdϭCتVo3Dds NnA󒕙XCg]1:ڐE+ .|_DRkկDZ>ؒzŃoZ=2$)l.s
-4!{[ezJ rC(ۤ
-.-kSc-zJCWT`^XзUzIkDF,P1BCFn4
-KkLN٠~ QNQEI_c9WRx$K^xZ7 ,.%x_Ķ/}DQ]SZ9N< _pK&qb:v@UdL*_Ev$n4E]l5 W9,0(NUkq╵r1jfF'%ͱ /?1YDi+iu' ܂8im.] rc:XY /݂$kAM!OG䥶CfKozT@0c7%0K.v`E,uGԌXR J뵜eyJD:F:) &Wp͵vK]`7*5NenOFe;1j9bӔ$,OLP{S9wX*HWLX }(/r"YmR&!#_#זX,]e1^wG:D4} 'p:,e1Yʡ\k}.ptkveˊr
-L??&btl^bt9i])[nBZ>lLKr?4RDÈ(#aOOd|,cY{O?=}2u]5}?,ʏ*\u\\_[ Gj,S-Lj"1N> U AzW%\ž.GKnkE`̽/9l*nit +:SM2).|,p \kCJZ5K\b ͲJ~JB_Xr1KP(}7B+NE<l+vET_i\b1zq!4ĥ}<еcJH^qF+Mܑ `(S 2.AS>+}"KJMGAv8_ &%snoҴ;esjA.F3-BvY9Nģ@cTc`nv9TF2zAN4j澮A"̶qf\L8FAJ^uR{9v2ƾ91eɐ e
-3=ݍAK>zn 6j?Qr1:5_T@Ig.2h A^I^\k!q,4a! My)dCAm 1=./.!HsV4YAG H9sdW%%4*=Ѥ_evP0GiAƤ~8yjP 18: GէԠ\3>~wZ We : X*W ԝKWʿ+ѷA ̪=fZN t,yq(O(1}ʏ-Xc NhH%h'AEP7\I ?tʪ{@C Ej5-1Pl!ay`+'@ $twx4uWͯ-fͅ]"pn"HXA_AjH
-@4}
-O~MI~t YwsEg eۙ?ׁdf<ķꨶ{uԬe><(4-!Zmy*cC4ewKN|o Ok )8R%oAV>
-[|cl@}ňd _ʺis4LC-gnҷ!QCޱɋY(ERipjN]xE~7M#_˶nYoXn(uGVtKq})V_oA>Վl=p;jf8t$#WQ#G-Z(T}?T<P`+:0i0%uAAHH{EHќ|EH%^0l+;DL87 wFU5HHP0}^TʮEB%dwEUׁ@&A%/SMY ClIOB<s"H!5gR
-<")h:=̣;ЎD}#H'H1-sI'/ !T>› wF'E_Jgꪟ&AZ1\ & (љ+M<V?<c^I+ΒzX[&݁ptP]"v`ӓt5OkZB1*-/*5ArpK}ͷ<,S.; t!@KJ6խ( 9O6s)}?fX_A|.5讓oUXs&9y= LtяWAro&/)^vFC=4K:XCDQ ~t{Vr[0Y]6𑉲Bm3h3J>cwCٜ!qJP6s$Ʋ;>vioho޻`6xrba|oL*S8sմYBEwI)}]]_ ^; ?xƄ2M*]j^U,q(KW{/^\,?
-1ec, z턗#N)N8*jN^<*U\nL=3Ejޥl]D?7uK;=* !,2:֣ -(\ ܍Vlx(+u]2 Dgxe''D3X^xmgKAҡ q2b_Άvfc&|^u/ewUEy$ގ1^kX[C+ qM6ŖXԖD=x~3YS{A\0˂M#`Vn_V=zN;օֵ⳪m)mOe gf&SlsRך0inQMNዚ@;7fow=V}jmV9Ms?1"Y
-teӋDޤI/2I^酔pVrca^Vw 0}Xv ?d|zlψEs~)9 yt!!-E_mG2_<|$Qר+?~|=szO0jhgߧA0},g1x)vKp8/^-;
-ܞF $/`Wz S~MOJ.SP&gPGߔ8$`r,,oY[%x۝?vwcj9E7%#صU8TX/3wexQZ
-uX J_X"_J!OL ZA})Q]Tx%,VhurK򝢱__o"b:8
-x]FmqJv
-]>PܤP5xr-6y3}{J9K8*^ B/mt-vF
+519 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 384 0 R /F29 375 0 R /F20 382 0 R /F69 402 0 R /F15 381 0 R /F55 383 0 R /F66 388 0 R /F58 386 0 R /F74 480 0 R /F65 387 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+530 0 obj
+<< /Filter /FlateDecode /Length 4991 >>
+stream
+x]K$ׯ!e@S O3'c^`|_Ro)Aۇ쮌(")R|z߽284r0ьP͖_?>ST)$|7JT~6|ojy 1p5%<RO2<RnijSAJ &$|^BͩB5m2p;lҵMMm(+Wo =lN@hveĵ&*&d*KG} Vs%k"\qo H.GmGfr;.@vq=+AgۣJ+ztawOhsV^BX06
+4{[ezJI rC(ۤ
+.-kSc-zJCWT`^XзUzIkDF,P1BCFn4
+K{zFO'lP?Ǝ((z"Oޯ1\+~-<%<?}Krf fb>OnM-SF^I'` ƯqrxK&qb:v@U$L*_Ev$n4E]l- W9,0(NUkq╵r1jfF'%ͱ /?1YDi iq' ܂X46{ƮCba1u,υZ^$[AM!OGCfKozT@00#0K.`E,ugԌXR J뵜uyJD9F:) &Wpͭvk]`:TjdkyɝDO= c}>2cz\Ů)1IXMX@sUz&f䙫#Qf=^!VE8MBFFnX9b0th)/O*+Ec &'CD\ڭ9ؑ-+*28Xѱyuv oB$κI iTk1/q_Ke #$_L93cY/O? kdcYeMyߏk
+7:ׄ3VZ(Fu HiAHgy3HP৞.u钛Zfrz%X,#s/K-JA[sʼTLJK.hf.%WZ8z 1״ZBl}R'8\ B''T3JsЫ"pV}"g Szs4L1
+8 VZ>WV1Y y|}YCq8SDݕ&HsT`ө\D zT5%G㦣 q\v^orciZ2HV W| q!,l'Qu1*YF0g`ZM*#h]OhK'v3sV Tf`@̸jeo.cNebDEe#DJ D9q-;cژO2dHՄ2i a~ ᠥ=7J5(9a,>@~ 5w?"|<3eF\JVRa;ѴBf8aNfӃ[BGr4gE3UOpT3זj򘣤FV%
+(-(<Ә
+񿗝ljE8J^.R"Cp ̀;C/Rq7Atu%&ItU 7[;??
+ï7oCUoKgv)@,yq(O(1}ʏ-Xc NhH%h'AEP[I ?dUʽKr"h.oİ<x: UL䉺
+3ڬ
+;Mee{m{k 2IwqΦE{\]`ugΜ0:ayK﫺w4 )лiG&:{&W8Y8w[hhN{W-.7QCL 2&X{6ai@we}ZAW >Q
+ك$_,>!<n(2/s;Ǹ:lRv󠎚ǘe>ļQ]9];8Pela4|)тO-u)}S
+ҽ!`$hN!`$pߒpo
+i`"&
+Зs|), ClIOB<s"H!-gR
+o.  \F|uj(ѧ~jj p,Pk r4/dD+6X򬲎[x%Hמw2kw֞ %5b6=IWo 96#38cTZ_FUjڂJ}ᢗ oyY2\v GYC Y]mī[QklLV-:
+b}mD#NN^7=o`jcAz̙R70U?bSɾ!#|r:xwux;#/ec= Ew0QZ]Nnʽn8>f9s`_<wG&: ݇͠ח*p"vPTGiw esA<n"zYsƋE+Y3L9eTg y=1'!T;YKtsSs% 3x샘
+w=I$_R$(ߔX]07MΠmN(q,,nAI:Y0+$Y!?ijr/Jmw0R:ߍ oߐ>k<b׾Z\VጏһRRWbʒM!GA[5+dꎮ_a-(}cՊ8|(ٿ?15t_"F/hz`Du]jSpT[u_-W~}Uh|x_㿡E
+hܚ xiXo_[Z,7j#+ x <ס3×8-M s`}UfJ%nd[_
+tXv|.il8xIa%e~Vێ^wUL ATtWnR(<ۖME޼ԙj=%%RC\q/I^
endstream
endobj
-521 0 obj
-<< /Type /Page /Contents 522 0 R /Resources 520 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 480 0 R /Annots 524 0 R >>
+529 0 obj
+<< /Type /Page /Contents 530 0 R /Resources 528 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 481 0 R /Annots 532 0 R >>
endobj
-524 0 obj
-[ 515 0 R 516 0 R 517 0 R 518 0 R 510 0 R ]
+532 0 obj
+[ 523 0 R 524 0 R 525 0 R 526 0 R 518 0 R ]
endobj
-515 0 obj
+523 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 291.425 694.371 303.38 705.32 ]/A << /S /GoTo /D (subsubsection.5.3.3) >> >>
endobj
-516 0 obj
+524 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 494.426 677.873 514.132 689.828 ]/A << /S /GoTo /D (subsection.14.1) >> >>
endobj
-517 0 obj
+525 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 90 665.918 101.955 677.873 ]/A << /S /GoTo /D (subsection.14.1) >> >>
endobj
-518 0 obj
+526 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 354.42 272.601 366.375 284.556 ]/A << /S /GoTo /D (section.9) >> >>
endobj
-510 0 obj
+518 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 307.993 84.779 318.45 96.236 ]/A << /S /GoTo /D (subsection.15.3) >> >>
endobj
-523 0 obj
-<< /D [ 521 0 R /XYZ 78.37 808.885 null ] >>
-endobj
-520 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 377 0 R /F56 380 0 R /F58 382 0 R /F55 379 0 R /F74 469 0 R /F23 375 0 R /F29 371 0 R /F20 378 0 R /F26 400 0 R /F40 387 0 R /F59 389 0 R /F66 384 0 R >> /ProcSet [ /PDF /Text ] >>
+531 0 obj
+<< /D [ 529 0 R /XYZ 78.37 808.885 null ] >>
endobj
528 0 obj
-<< /Filter /FlateDecode /Length 4758 >>
-stream
-x]ˎWh9^ x 8ߝEF
-}b`b NHtWn+Jd[ 9o SVٛLd RثCJ^i>i,e=OYG$= dOJ4}{{-LpHLB > l)#+9ŭ(J W @2HoUP::4\+Mܖl}H5Lt@%quʾ ڶ
-K
-V]^;k&^{t
-6?C/ܯAFlkߵOFl{H3@*}
-g3V,h$aַ-t,q]ߚ%t9Y=KOX¨r2$ȩPcէR{UYA9uTOa1pJ?xT궲b'ȥ8{Z8BsjJ+qL&ϊ˕V%t)V%%t)VXegZ+ZNCXjQ},afGl_ﮖL$5Ijp0(5I*ˋBǛdzř"
-͟o>')Ilp{*cP.&7PYnp,Wp\|у2n[VkljQ WofJMy= ֏l+<+j'S۴sjnmHPFKb.nl H}7_<^wrĺ.M
-ͯHITм5dL*-l?{|B
-Z͟x؝n-L4R2.9Nƽ8e\֗3M7PեUMڶV0]; +V> Ê$<"2+f򫈬hZ4j)dbD=#bkr"3{zI3<3L#}>GΖ*"FP{4V-bn>Q]kL=r֚* ͝1/UnWRJX~La%W>7m>|Rw.*_|L=OgsB/t^OIIpT*sЕmԙ];
-s?5[)xL9FHޙ$'LCBTܶ1q*^b'l8flC5CɻX)͞U:ܿMMЕ+ @\T sjKj4z焄Wȁ- JxҚ
-:>e.1xۂ*l55V6OʋVMhx_jmF,i>
-%MTۙ=nrU냂_ݬH41,c_e^5HVzUO!𑥕jm8<8dJ]h`8|x[2yѷ48KPN9<:0\SQ9v3wZ
-#f eJ>xGDTwM
-7`mիAs*V3U RyDpqYT4/a7D7}Xh\Wx)W9>(t(W)nwvރ&=I-M4:rOW͉F\sB;%D@tߣԩ=p/go' LSY[-+{Y}r4͸eUfTuC{ϡ2)6O
-"ugY {mnyJTۏklm΀OH2wB]Aֈ -[4T{4b4cI8&ֵo7v]a sQ'pP,F::n]x7d|@Gog湰p*0{d)xÊr,P?T'&Mb}ӘlNQ4aGw]ڣK4B_i*|TCݽ]\2XH]K}]0jOE[.Q/$41%68]SgRBOzR IG?a!JLdZ)~?ϷK~a_6=EJTe(2z
-]kbc'~W71Btp?*ٜjɣT}V۬${(ӔM;?\{r*Ҽu7W6'6i36BkL&
-t|佹nd /a2j#?
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F56 384 0 R /F58 386 0 R /F55 383 0 R /F74 480 0 R /F23 379 0 R /F29 375 0 R /F20 382 0 R /F26 404 0 R /F40 391 0 R /F59 393 0 R /F66 388 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+536 0 obj
+<< /Filter /FlateDecode /Length 4762 >>
+stream
+x]ˎWh9^ 1ߝEF
+}c`)V
+GgO>BC(K,W1d0vM.`lUi?: n^G)U/US}ekǞbMq|Z-bHzPvXCDv2\ζʷk^KhjaB #}ԃT9D֒ꙤЗ+v&lOwzhrq4OEѐ2Em8QK6
+mblATR$hυ"n<ή_<"wX֖ pe -J ȭgj<Rmb0rmOD(`,ǿ9Lys?LxAk ?s4tx137^Pt/xP3>{ .6_UD\%}niu^k fAW}Bl7[zrؒro $[-_{-YC[5d AC!JXuIxj
+gDzs9zBa
+nO0t~~4`|aa]@VvR~]UBo,\kW;a((AD{N~]U4!Wɯ*cWR~<JPN~<8R~<%zrUߥ͠*7ܡTXkʁΌaE$|0*q9.e2?/:I*p_[wyh3]@v*}0>+p`#BC5KT<nL-Ru#` h& Gpi˷=d*#N`&RӘo0= Y( >bNCgk^nF:/ 
+@_A
+ݹY
+5b0X%'
+{5JNMUzv
+5f0Y
+ Q~v@'kDc
+0d,=c f^C8 BUJ W Cd"ױS?= )qSʦ%J|"k
++1M<+.WZȳOӥZ سKӥZ T`XjjE: auG7CpSUӒ]Zjp3&&f,/
+Mo=g(4M*o$mr社ApBemr'l^mrC*Znk D,7_In[]#'JGE'<_Mx)aRk7 oku
+$[?FBLmӖΩm67"AE.Rf--6 Y_Plx! V,7: r`xϞqM ,nGf3bG oi7&RTń7ZiZg>O%4 aR:Y% '^49NK#SznLeH㶗QKb6fi)]hw Ʌ"^W5p3) 4"&S}k6@lhK\1L )[ q'[} d+tž
+MBPQF Fd{h%rje3
+[9R05ff/-'9`NRFҗRdi K)22٨1UƮ|u,^A^m
+{ξF=afO^%JrM3dls&>)2QVuZKӥ o>W /겗z>]ij&=\NDP-䮢6eEvLWFڮ#@h)z-|р ĕE<ߪ c%uv6ҐˬݐH-bEi" ֆyt*)k6awB8G2Kp3:^"qY_Z|4u~CATV7izXÈvŋc$Xt$ +jȬ%2˯"kӨL:8]ϯU]&E
+\eܴ 9Kݹo52?͡
+05z=k?%%5]WP^AWVSRgv]
+
+~iwgw^:"%Ҝ~Kxoh"[AHUT={8GVҪDyz(v҂_vmYE
+?*xם=f`%yV*Q~l?9R<! Ivun~[Wc=-qS~ON|sHM1i׀դa`܏[I .ݰ9(uz8( #X7.2>R3\X^BƽE LaEyD9(IZ{vOc &1>uiL ['(0ϣ※I.SzϥY~⯴amVޮs.v,ttԮ^5NKe-meLJA|͘u Vo{W) )'suÇ솤FˣןV}q&2|e~?%|?_Sðޯw@"%p*2_U=5
+?11AW0 ]tRѝtds%PYmTrNS6h(sɩH\(^ؤp
+Y?3+Эz%溑Iv cBN4X)ʔ+a`]t
endstream
endobj
-527 0 obj
-<< /Type /Page /Contents 528 0 R /Resources 526 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 480 0 R /Annots 530 0 R >>
+535 0 obj
+<< /Type /Page /Contents 536 0 R /Resources 534 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 481 0 R /Annots 538 0 R >>
endobj
-530 0 obj
-[ 519 0 R 525 0 R ]
+538 0 obj
+[ 527 0 R 533 0 R ]
endobj
-519 0 obj
+527 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 477.218 757.574 489.173 769.529 ]/A << /S /GoTo /D (subsection.14.4) >> >>
endobj
-525 0 obj
+533 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 298.08 212.267 305.054 224.222 ]/A << /S /GoTo /D (section.4) >> >>
endobj
-529 0 obj
-<< /D [ 527 0 R /XYZ 78.37 808.885 null ] >>
-endobj
-526 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 377 0 R /F56 380 0 R /F55 379 0 R /F23 375 0 R /F51 376 0 R /F57 381 0 R /F65 383 0 R /F58 382 0 R /F40 387 0 R >> /ProcSet [ /PDF /Text ] >>
+537 0 obj
+<< /D [ 535 0 R /XYZ 78.37 808.885 null ] >>
endobj
534 0 obj
-<< /Filter /FlateDecode /Length 5016 >>
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F56 384 0 R /F55 383 0 R /F23 379 0 R /F51 380 0 R /F57 385 0 R /F65 387 0 R /F58 386 0 R /F40 391 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+542 0 obj
+<< /Filter /FlateDecode /Length 5028 >>
stream
x]KW8a`r]Urg7@fIzIU/hTHO:巅¿? =WGZ.~Ā.laTnb4#-߾/}K
ϔJ_; 1<𽶔?z 42>)& -x>I}e]ITJ_7&ߖ& %i(P 4*r$F^
KM~v6ڠ[|F}ԓ Ew)>k(S+ IkWlk_Yi+ds^tnn ʺ+mQ<ԗW@u>L-kAB"iMR ^BIJOڤfkdL[G|o/*EAgY͌! 4 Ck*z={{eZjEo?|LZY͔ )Dƞ,5P+ɈUo/J<;oӚvFF#Yj'ƕ&D8-(4'E;d,_ xj~Y{9xd=P>D /_=ץ
rW_;m ȷ8s#wz7;Gswˇ~)AufR~䮘wsI(>JH*//̻򥅜^_[ʿ;|K|M ,*N D6 RCeйSā.9DK]rkn]82}K(a- s==zM9$ =d%W3"Ձ8Μ$UZc05I:5i *RfauÚ5H IIb|UDU01pp9̅8;8q|{00w
-©uHd)V[բK*ٸKr^vI0TN"#ľ; o%Iw>OjDwbuj:T@f2l~FSw;AD%M_Gղ?>6l(GVGa|70{meLz&gFd\/zc)VY՚uȖZ8Yb:ɩ;n*"%LJPu;PB$uH:ѩ+juU-Y!iT(OIvV'am7䳔(31D+>kG=1R'O]<RlE[4<RNV9ՂKn*j<+7q[ Cff&肫F@h-_RTS^,!nkGh50 !GjC-y=,/^OBrӾ/Qnf:5sZ_ g(ㆲ0 )P~?-ncͭpSrђлQLYXmyQBOhIZ5yH9 ciل#Lɡ=9_7  쒁S1O܂|ovGJ~%M8%3q_M+\+̬µp
-,\_olS"?SW .x#-\>TtN$Lb@OIJopeŽz*렼'7xPYn~qOnpFIn~qOX-/nɭv[ʨܷ->f*-M=8!5L| cjd fKe8e &Rp~bX&
-#VְIIX$Uz=T* ,$R MW{E~
-ˈ JMpwż+"(0ʷ*5]_w;K(>I@@W̻a&a(00./̻%̲(0-?]!rÉs DXz쯟8D@hԸœHpfH4Ⲯ+ah->P <)Du[/nZw$J~$OcՎi}O5pwx 6u.qҎ<R:rRwx&Að ?#ʩ3GD} z_PU:J3H
-x#Fi<w/`> ǔ|U cA"}[k
-~!&v}<d1 /\+B5-/38>m:sڌ"Ϸ0ȡkQ2JDn~TƤ[RAUw)+-iW FzqKr!>ߪl uw(E;w7PAO+0OcBN?Xw, T U2+Këڬ
-SH҂q<S#Fraշg OR߸}|i)RфL9%qK
- #lم[2aziĻGt4 #OWQcH5knQ^o&S58w4@K񗠣 37OCP߅"?9Ëyx
-TT?jgXXbk:`١Fuªd[`q :9F|`\,{w&/a1o<]ɧ䇸~+>r8:>-m2c8m=+QHy~>C&\ AGHՄG `Ǧ>/Aޫc'<[rÑDpN;!ە
-o o|Ch!'0=+]
-WEyWk |cayyWÙ=&0&b9 W[xDGJ"s 4)%x>}V}G<öI9b⩡+%@G(L,k~r0:^H= (yr` ÏQl$DE>C|-s<Q B+UZcROӷ{J¬ ?ЉH`|z)OLxU3`QfpQ+TF`?qz"'l0i+iZݍn!oQaT@n ?=5x'd)ޘav<&Gn`ɉ;=!#Cr3r\٤ az]_s>E >7'fYVڙ5ja9V9qZU)!T#?(#hmb ֣7G^-}iZ!…FdLLB`"v3D 儙IY|M7.I.-Z3\p={jbbܖ C¹-^a4O|3TuI=V[Ɯ/:a5)4n)Q }J>%2[+q{n'I5^ҍ-]JNWͻ㲀YKj|8|wVef^ WyQ[K̄ˤ
-_,п=w_=@s˧!TJh+,ˁiaf.h0qFֻ
-8+ݝ|4 >#ۊMD,0~Prx0Ibr],Qӏmm#-ܚ_[k5(a۪>e%`_]5dT%&vWNc
-ѣ9^ &BZzR'WU91
-r6Z!^ҩfEѹeINO-FX G65ۚi
-|X)J(2QQRz㷲tY5yk02!?2IA!<$ & J=UX#@n*kTcHM]aNUFI>IO*o9Ulrw2-\g9Y׮U<M&mDL`Z))KEem-{^.m2aY^5kQJd®A
+©uHd)V[բK*ٸKr^vI0TN"#ľ; o%Iw>OjDwbuj:T@f2l~FSw;AD%M_Gղ?>6l(GVGa|70{meLz&gFd\/zc)VY՚uȖZ8Yb:ɩ;n*"%LJPu;PB$uH:ѩ+juU-Y!iT(OIvV'am7䳔(31D+>kG=1R'O]<RlE[4<RNV9ՂKn*j<+7q[ Cff&肫F@h-_RTS^,!%岵#4LTt0 $
+DjC-yo=m,/^Brex.Gyh+k'4,V0v8P~?"5 [rƺ2.6墙!..ٹR /aԔ8D m!|܀O1D}>bSuc:[0?P.YQxc8Qzrg=2c/ۂگɸY3g+N6E̴q6-pJ\0 J@6+p}avOVHȗ_O_5Du0T<sR9+2ыZ<>Qh~USjOBe=!R&=jܹQ7%ۭn)rJCdjd痷d7P[0Jy/ 7DMj5N0rSw7u Tb=bFcyrt%Y5֮RSIg&JhD FRqI4gw1k36_/5ɹ;oWA&x1 Yښ#hMn.!6EԒpkMGKzJpa\%L
+{*ɤ̎`1!te0)|dH|XҌޢ0Na,aMwcoqtilo஘W^FQj+]FEyWUi ¼+YEwO:"&bޕ3 EyWPYvQ~aޕ/a%ECgl<g?)Ӹy?$C\IW$BD3C4Q9E&u%_ ; AnNs~qWB&Q
+TGO<Q_;,ەi'PֹI;H]˩KWt߹UPwK&n(Δeq/}W(Ͱn"yeǰ|LV==R
+6ƌMJ8fH"n_ ̂9VB`]0 ~0`_qxS@|h8Erf\M\%3&at5$6NŸad#_X;ׄ6ƇYdv:y6J56!7@^rz J} xP #̍౷/_i*.[ӳ{
+6h]ƟZ}epݸtk^ Cp4QV5WVLW0qp3m"sdz8µ($Q2&Oۣp}8?e6-hsZ.Cu0e~#4t1۟o?3TmsU~ل|Kwڕ -c>^Rk켺Ϸ*R EzqGl]7ʺFvMD9T:/r}
+z /ke푈-52ķbedLJF<|R6”&ҮF\#p(yr:9O@<7ؔ=EHKM<&f)[3Cdhڼ/x`)X_?}mF?܁^)ᑒSwp
+*M*%"hP_ x=-&VXaFj ӃMO&=iyRN{\u
+H~4R1q
+Ξ o*Dh!'0=+]
+WEyW^k |cayyWÙ=&0&bS? @~m)Rp}_ \P[[ d&iIuc
+W31 !$ f&dQX7%_$nJkUΜrm5Qq[. Z+ dpx5c<
+Lt̆դ^ҸMD'\jk](ll _$l^xI7t59]5vEf/QگKMkZyPyi{6\Fn-2,nlC
+$ڽF5ԕ Ye
endstream
endobj
-533 0 obj
-<< /Type /Page /Contents 534 0 R /Resources 532 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 480 0 R /Annots 536 0 R >>
+541 0 obj
+<< /Type /Page /Contents 542 0 R /Resources 540 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 481 0 R /Annots 544 0 R >>
endobj
-536 0 obj
-[ 531 0 R ]
+544 0 obj
+[ 539 0 R ]
endobj
-531 0 obj
+539 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 144.916 111.883 155.373 123.34 ]/A << /S /GoTo /D (subsection.14.7) >> >>
endobj
-535 0 obj
-<< /D [ 533 0 R /XYZ 78.37 808.885 null ] >>
-endobj
-532 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 380 0 R /F15 377 0 R /F55 379 0 R /F58 382 0 R /F40 387 0 R /F59 389 0 R >> /ProcSet [ /PDF /Text ] >>
+543 0 obj
+<< /D [ 541 0 R /XYZ 78.37 808.885 null ] >>
endobj
540 0 obj
-<< /Filter /FlateDecode /Length 5241 >>
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 384 0 R /F15 381 0 R /F55 383 0 R /F58 386 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+548 0 obj
+<< /Filter /FlateDecode /Length 5243 >>
stream
-x]K#9ϯz?":&bLDian'
-F2τ>Zj79śqe}`ֵ/Ԟ9ǜT՚QsvXig%=m "f9{hQڠA6Mf $d>5#<6{cA6YĞ++ܰd3V{BR~Pkp #\\ç_@$ 7^6W[huZ%ƺhM0C24%jwߍUPLY N)ٯڝ} ojԽퟔW{ǤR^`"w폗 e:K#k_!0HFCłA8OP, JiӗZLŴ
-R<8^K1=*=Wl8ckWŴϯ8>X 4 :ހ,:>XKKwNGHNY_̍. -{ȭ٭1J.
+x]I#INr_<8!HpVfeySrDT旱R̙|?W|ݾ~͛V_
+R<8^K1=^*=Wl8ck/WŴϯ8X 4 :ހ,:XKKwNGHnY_̍. -{ȭ٭1J.
01+p*9\d Cכat@ctCN sT\ìūtҿ uL
-}8 à?"iNaPī4^z60zn9^,@qďg8u@(Uzw>!4]q(Cؑ2=IǼq  ūYi^S5wPH^`@9z`d*W֮Whpgmz`28pr&9VE:颅1O\gk\ >)]'Eː;sU?li.yqpS\ jqIs2 w5yk 4\ٍݝ8Xf[ 3vq!<#&?_SWO٤N)R`_}]/ӫU[n@tQ_ݶ:"]۱%K
-rg.zWJkp|ީZ\ӀV m*a;$t:)
-YVv6~Po F}VFhGon\ҮM^^*Zݶ6?RM7unLTVek*4X6*Zk+u^Y*lc 1XlDHjɉT)ӷhUnp*hnq'|xֶŗmF&=}@5m(810jW?_ؖμ:%mQ
- *!^߇`
-#c00概A;.z3fD`,,"cb@vJZv'1DUfi'{'*_ 4AP'#U)9ϼu8k
-D+p#S{ @d¹4 TR8u27v05D):h(! *g
-;5nNAPWd7@
-HTȸt S+Xij)һ[pCBYLA#d7@
-N<4j!CN}AtEp`g=SZKMIv(~K|͡} )wgJIAԩ7ί_COd o6(YFFk>Eݯ
-04j! TUTghAvUo긷@+">͝45x何G3=*~4ApeX4 457b#[
-oBLEEzދN]i:B@ǫ0HA-6%HC+nz;!=,*&PVQi8K Xܷ0wQkV#SxMFA
-
-TΩAJM6҂i\q\E:} -{u !ʚIYP
-ChLȚP剉H*awoUx]UH6,5:GU&nV]*Ԩs3}p.P[u
-ޤYj3A?x}Jz߹Co[`&6YtcQTz)pzv+zn<_+9\Tuh&h^pѢraf-E-ud6V!boHDR+(Ct2,Dל\\q!5\0Ϗ3J8:0Gć^K-Gdw VLz$*R*e$ZJn]g8"}Znt]K)oWo%MxRG׶q`>+M6MXGmř0Kl=6-_.ZUj%itR^Ke
-
-;r[n JzKTqM5_T5OĠ# ß&BPTiUCKz ~g׈q>띑1(]*3gv<"ca8:?N,d"iޣN*?Ox3T*M&a̟hT!C=aP'd “])\îJIX; ;"EAv(q 3/6q ' kI<ex }y GnYLA#d7@
-N<4j!C|A'GVxk+ULڙ?oAPs!BpKàR S'_5S8KR`So11(lDzeJZ;?4j9! ԟUThrBvpjb8"E|eNF Gá+C-,Ԙ
-&bPɹ+<Z[=VSq&v[i:B@ǫ0HA-(D8phuq(+C-܀N}"NXI$j}>ZDO'Q듨I$jFZ;N]V/TNy&ҢZ c̴dQZ#=td-K.1V6a 3-hcOު<3pBpo IlJfցM*HiLSxb+*W%)4 5f+9μ}
-X&좷AHPv2O-!"„kHY{6igz oDȚz;\I=EіR xHrv[KFٝV:J>xn=K€yGJv/ʩ?O6I6k.
+}8 à?"iNaPī4^z60zn9^,@qďg8u@(Uzw>!4]q(Cؑ2=IǼq  ūYi^S5wPH^`@9z`d*+nk2٣#B8F5Xh$#\AIuΡkQNha )!Y4¢OJsIu2\nvild5BmZcx\ n]M4{pbKXC<l+a6' Ox<b"15xUw}&EtM:i֮WK_W5k][i@tQ_ݶ:"םLmo9V;uQ+^nW>T-54eyι*J {ʆBo]M$'8Q}夕>aatjSKE~7ۖgc^iB"_ts-֪,[~PX F[Ebm+ Upl!͂I-90y1Eqv* ;B-ܜ[ڎ.69 }N1n(Tዂ{ sA &|/PٙbUufXT:@ }
+G|֞u}TS"ٷ` u>!(ڋ~~"Ɵ[|<>cvϗ|…}v)2m8,|>r[bV˕!J!%|b))?ڝ2>
+0ŗ< _!({[
+'̿LAXlTap<@/`fWF
+8Ձ s}iԩ,p eo6a;j6R8u Q4B@Uv4 j
+ GnNxh<B
+Rqh<DSʣ֞C?V OTh8ԲB plt‘H7-AQqޟ"Sc*g4 jy%R8w=aPK+y R:w=&J+NH_Oq(+4jpGh'ƨ5+ّ)FܓACt:{!#;Usj0RS`/8s\E:/Z2kAE:)c4\
+QּNȲ2Q6xȮ2K9f6,&}uqq6N%:/%I8YVD`57tOySo9-^V.|LG<v1Qcfևd]{rrs}2ƓB[eʪ]}xWQIIU!?;iY|wGDEYLEc2FC2FCӌV.vN_T%RE;Q"Q2
+a2Pa# øC1*gRq
+atT qCCw>Ny=T7QNkܡZުC;5P";S^A0}ܡw׸Ce ԣyZ;'w;C9,xoa^t|.hDwbg
+;r[n JzKTqM=5_T>5OĠ# ÿ3M#X!87iTq .q/FĠ# X}NAR9#q T1֩Xep*/f&NO=ZbWVI!pP$ ?d¹g4 $Rx'%KbUi2 kgaG#n"Nwp&"Nw$a-x Oڙ?oAP>M<)0yHԉA#d™whTqr$`' kMV1RD&_5*gJ4 j.%R8uAPs>5#aJ$Z.zV8"NXIZP^;ULڙ?oAPBpCà S1(3?.p2b8UXDDjaV8a7"N΍XIZ43zLB=^LA-d7@
+4 ji~@!j]lC+HD8C?XDDjpЈqr
+O'Q듨I$j}>ZDO'Q7Jqzu:3'J1`%^̦+{nYrq4X _hmAW$~V,Qj{ˤuThЈ4:m@m䨂dP=.zU2Brf|lEv>ǙoC˄]6 
+nC\橅6D!P0ѷca>kfV<L9}Y3^o5""(QX|7=|TIN#оn+wi63ӊ
endstream
endobj
-539 0 obj
-<< /Type /Page /Contents 540 0 R /Resources 538 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 480 0 R /Annots 542 0 R >>
+547 0 obj
+<< /Type /Page /Contents 548 0 R /Resources 546 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 550 0 R /Annots 551 0 R >>
endobj
-542 0 obj
-[ 537 0 R ]
+551 0 obj
+[ 545 0 R ]
endobj
-537 0 obj
+545 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 261.027 345.178 272.982 357.133 ]/A << /S /GoTo /D (section.9) >> >>
endobj
-541 0 obj
-<< /D [ 539 0 R /XYZ 78.37 808.885 null ] >>
-endobj
-538 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 380 0 R /F15 377 0 R /F57 381 0 R /F20 378 0 R /F55 379 0 R >> /ProcSet [ /PDF /Text ] >>
+549 0 obj
+<< /D [ 547 0 R /XYZ 78.37 808.885 null ] >>
endobj
546 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 384 0 R /F15 381 0 R /F57 385 0 R /F20 382 0 R /F55 383 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+555 0 obj
<< /Filter /FlateDecode /Length 5078 >>
stream
-x]K$ϯ|hb0ԴZ>y-ޕ
-{BG]gA54q4_q<A:ǜT+֙"[ZΚȖؿ1δrgrZÜC 1庆t-/k5yѣG-ڑЉ
-U4H 捧vV~gJHF! He=.\<Fz9=}^nAh,r͜%v߫}{Jxw6A3!ƹOVsPQ}uo%⭲Fپ~_Gr_[k_nǙoB&ϿvA}pr̛-Q1jo`eR8ʷXzyX/g) !QޠDT.B`2 I_o$Hh_{)&*eu}&#!4_fU9FuR"LMTGHjB<ךijB[z#ڿ;
-$<t +0~3)-M
-äFFɳu (Hd Vn"/epNc\)>D~;|o :=69 j^+1d!uDUk@YcT4?QM>T;n@*0)%Jþ"ЯP"$LHx##
-!B\z+:I3*1.3[|)KE MO}L83~ PʄU JHc@`
-Jɦ2C[(+
-1n"ƽDo
-
-*a48T)T1r7bgu3mFpE4^QE)#w Yor)jWa.;_+qeУP׀." OeUC%Xt}^]Wo .I
-8*SsO}[~ ;uMђ2}Ae %:6kEKU 743´.!6Еw;򋛗},w GhSo c5;!#L2!f 2 f )|-PCI#o.¬\9E-U5C]!BxhW$Ɔ Eˎ7eÇ
-E=-@Ti_T:#s% mz]qn(U|%WZZ'儡?% ;ICezcKz%e8gZJܷHN\/Fphhnvr(C8]-i
-΁}zRJ}O}:(SWUy?_v;#)O u>A2呁K
->M
-Ui|u5xh[i,@.qf;Bf-8Ő;XLfaɁk>G=8H8%$dA!2o=0֦l!MjS WZ+Z8Tc >J{>LGd-g *I<VCO.J!ݱf57S D<؝<Ӟyp.[]0r5Je<i<S߿7;w$CPe6LIab s'o n(e9f[ǜov %S%[N1@,% kEM8}
-'ŹM0xUf']Qs\{JôHO8i#{艂zQwғ^ʅĮ%cGYՄdG$')9+^ʶ
-k6>R?39y(j l}MUKLe'eu_eUJ%z: hkQWtԘFڪ9 1cۼ@Q6)9iڗԆd}:T芵=NT*uq1%4rW!@:yO ט>|nwLQ>̒8秛!rj),ia"Ny\̮nB]LS[΄q<:< )SU6H\Ojԁnr]~2f K #қ(:V߀v8..ѕBX c/w:zDl"U,&߶ϳ+*/1 ./6<8&h\
-ycGʎ.K'c*6(;z)/}q1F:HƂ?M{2Y7K\x%`B.YzT
-s[GIJZ9IBS'^RP]}҆2el';z/piMm*K9m=,@Ǥ1 ],rcPN޻J?E(cwWs)*-LQX* ZBmːtɜjm߃m)^U_/kj0,|1Kȏ$4ݲ/,Ǜ,}3\'vWM8^)ʍמOJ2I9W͐i26j~2˘qg;TeZ7Q6UwR}a-'iO^oz]Wn<}vmb# IWʉ〨/߷[{36x^o}{7/+!jCY/V߽"X9 nL
-Bd0uW_Rvq"ZL^>K{ 98 &5ywJ۰&X=ۈ{{Y_;s]z9jgwBw76ʙ I-Dg{_wmzK|l[^mۧ*Noo6֎TuQO1TC& ݺ*0Zf@SFM,|*˦VMJiFdAKba6@)(6 qY%5obkKbFHr%'g20^mԧ\_MyN#]#XNvQC
-G'5(0X!?la܏\V)c[3nnq Iy?Am)[ו V]9iJ/`)ҿm~b SF "/=?WhOFHGq$-W^z=笘t;|$ 져w^fanXН~Chf^nr[R2FiY&SnO_]}XВnKڪ՜tGM{A :)8'KG
+x]KWG x $+%Y%k[gfZFgU,~'ᷟn;^~3xw/ VZ};M\`ݜLۗoϹ8W~ko~J==s)FДKioV?}Ǘ?bѝ97%'e˥c?Jx)tuy" Һ<?X̉o3ӷ1g`}o,0#[eC|#yrŌalPI}ȑ fU7K6$&hB=/n#]A6qO,&&+<2#.'X瘓j:t6^Ud+@Y7&ÙTLNkQ|!&2C\Cn~eͰF1/zTu^;:Q!#Qi
+z@:^^7Z w(cAQEèP/gG`|=>3rE憅 :{3g]5> =Iqrwe'r ((Cq_Vn~ln#//LȊ7Ff!zOWvA}pr̛-Q1jo`eR8ʷXzyX/g) !QwޠDT\x=!3 y8d&<?9~u qsN1%pW) 5!+0Ԅx!6r gjB<:B_P⑿L;f^_P]PՃ1<Q&!HWH4!PV0ݏjB O1Tb.a) ZYb'ςw5,H#-ZGpһtt8p _gtA{lsԠ7}Đ8#ԹgUewˏ^SQD5PtU\( @KC 3! ㍌+s(f2`޺<K<{Hτߝfpn}Q\h
+*0qF=D$!Ψ8Ƹ"l4/K4=i|3itG0RC)V1(G #A|k֮dmA
+Jɦ2C[(+
+1n"ƽD_7TPD?^U`:6ZIf}j$\l;=Wd-`Q5 C֫\UKʠuk({5K8uY~赆@ EAו*낋`R+0@bpɍw-Ψ^+@$'A`T(ZPAe
+7T`" ӴoݯAPxZ=i ZRQo<\Dgf(
+OsXr俰IYIfx`_GhdžM_I$9ֳּK90uNFQf&X. Ձ%=в\LTHj %nj}}$+XnCm-m܈%v+ '< OJe|
+ֹ46:p{t3k@űLk
+lL7l{glXitvow !]}JD5DT,mF2Ճ- v*On6Ξ35ƙ~`CY){ΐdI05 CWUϯ<w ,13PƘhI˂';ky؉bdnPZ`}(ݡq:_? '1bzl&`E[BD9r̺ d%,u9=ٮ˪i{&La wijpq:4%y1D)xC8ozig>|=|ٽQg4Dek
+䭸wCm+Q4sxkӦaA:.(Bl',Rbi,l"39 t
+|>Iyu`);֬SRPf
+R4Gs3Υ; qFV>M3 7́gu
+B"ˆ0xh
+ %nHMz)("t܎}g >Tڒ`鍒4>Z4/{n>l+mڴVTw}EPۨ3̛QN JZuѾרF13UsbZbƶy^ޣ*mz/ThsҾU/1Q lk{uDUcƹh"+"09C(:te1}&nB|#%q OO7CRX:D왝j7]7|Ts=ϧ x>u@7%6\ySlaㅫaYەë\@F7Q
+<tHPq\!]+u^4tDDnULmg#WjU^a\^miypGqa(}:`/۸ߢ\C2 ]6d,=krMWE d}ZP m%*i$ M틿OrIIBu;HʈwV"5{@)fx,Y
+V
+)eN4#96e@Y,3 [t%qxPdxc{W?UI}*Q.b^19,'[VFT"(f0罧Wҳy,#׹quoPYMn3Bg6P V"\-t
+ AG5F6v"l 5=CO޽;8T}30|=2
endstream
endobj
-545 0 obj
-<< /Type /Page /Contents 546 0 R /Resources 544 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 548 0 R /Annots 549 0 R >>
+554 0 obj
+<< /Type /Page /Contents 555 0 R /Resources 553 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 550 0 R /Annots 557 0 R >>
endobj
-549 0 obj
-[ 543 0 R ]
+557 0 obj
+[ 552 0 R ]
endobj
-543 0 obj
+552 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 139.975 87.384 150.432 98.841 ]/A << /S /GoTo /D (section.7) >> >>
endobj
-547 0 obj
-<< /D [ 545 0 R /XYZ 78.37 808.885 null ] >>
-endobj
-101 0 obj
-<< /D [ 545 0 R /XYZ 79.37 505.126 null ] >>
+556 0 obj
+<< /D [ 554 0 R /XYZ 78.37 808.885 null ] >>
endobj
-544 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 380 0 R /F15 377 0 R /F20 378 0 R /F23 375 0 R /F55 379 0 R /F69 398 0 R /F58 382 0 R /F57 381 0 R /F40 387 0 R /F59 389 0 R /F72 434 0 R /F46 388 0 R /F33 479 0 R >> /ProcSet [ /PDF /Text ] >>
+105 0 obj
+<< /D [ 554 0 R /XYZ 79.37 505.126 null ] >>
endobj
553 0 obj
-<< /Filter /FlateDecode /Length 4587 >>
-stream
-xڵˮ$n?_Q?pBhi VXq lk*]83ն8c;Nqf~'<}ջK`JϿ}
-,.wZ/HLX)ͥ?/c }YV'gl<)h&;G=ԞdBx m-,I$dMyPGwvÅZڿe#>f1#~_W b3އ+b -ULP0.E;@ z_
-+9"4B%3|/}:X#З'|sDA ȼ`]*z8TEjM5 !
--nn.eΡ6%ޚj5 UQ@,2 7[v3$Cf3HyX2Z2i5(>8)dDR]^CWΤ9KJ`%qaS
- 39zyZ2k0x/1:˧Fgʞ0oϴ?y+fFߖgw;Bis L}cuپ!0氌2( Y=l6Pm\1Q AB*SeFO'|;p&C(ĩ8X]yT`F t-n} z.S0&.12(Rֻzs3 JKf+ ŽBA?*>J)3Q/92ܪiSFHD7Z1
-~]If!7}/Ыp^TN lR[~ۻcz8yX@|PW/r){JlO6m2QA>0TRϷawLޞ%Ljq xƟ@`h=0}g3KC3`%xəvgO32KCO3l&e8y0_*jO2'9|H+r`Y/kXVT|$'|ci>'Ϥ 3mi& &u(u ,j>xNƬEgݖrn,xQbMcSgs{Y|н`||[QMy3IXgznV!=7cҗHϣx-M8dLL a 2}I-LܣF.oUT
-&X.Y!ۊotE !(slz6o,{lH4=)oa|~I G`ҵ׀T=c7Aae\9G1myU!S{haU5h xGIPa%w:-m|T'=^4?NJ •c"${*ٔRըƁg6d<OZ' 6GU]!20{H|v‡Tko84XD#/a|+>uZѼ9 vN'Ux7
-a&D.}=TBBi7rs
-ثU>rA^]fDj-[,=͎8\c)_jNԊTTQh:$zE1Ka>_V΄4negȯotˎ,&v,ѹʰ<0t;oǮpa9'D,G
-jV:#wu9q[gcCt`V1*,픜
--;BJ~&S{NE yJH浽H!O[l 7)}1"<a"fЇ
-3휰K
-C]wzqDrNH# BpG^=SD6?U{`.8&@BqM$C|z"<kg}~  fr2~ LiHf?V+-6h7[/ЫކK N:U:<[2 L:z3%y:gɞ;Ǡ1^Lbhw:4!!Lbr'Si{iT!R\7B4lo&(<ъESXym<ц> gZy\[>d5Yy_A d<sUI (ׇPNeG>|2j9ΏXևQj [hO>}vN߫F{mڹtyNW]2]W{rCr -X:lhG ehm骇4XxD|3 X@n%܆zOa]l`"PRXQ, qn2_RoDRYvɚ4"|t)Dh%LtreY2[PCB;΁70W3䔦7]\ow~kFy^X~ڐCyGȠw-ȌML>-]8XpRf[wa$CJNt=i,p?T+c85U+Ye{ >iXڞf<uevSAŠc|P^_u7fKپdoz&rbx vwpI25\ojoU6k#CX5lJ
-{1
-')v-vfg)sHj±{ǕɳXQs%;e2uHU@?['ͤӯ3ȥ'w7死r'O=\I ^1c:\Ѹf@|Hڮ&ĺf^>7qހ;IKw3A.oʑeKp y 6ReKF (t\tr.E(5V7k|Oq)͇#`|XVULVUQ7*eL;WғE0L` hT1֟tw4Æ܉{MA r;0HnۍۦNa
-Mm%TlmKMnBoAQkm4\: ( =Q߿"-PN/+oA4JKTwXO*a5mhUݦ:h1˒n3[Ǜek8:&A|h)YM j()J݉{nId5 A;p8~\:V0}}WL
-aP (B&;fҹ Zum!m X`Ǘa}#VԪ%H+E4^3(֊1n ͠}pZT-R}k/v/НiwAAk#fk.ZmVl!!6,LS9u jNUEeLhL v/Jòni9xzPJPZ
-endstream
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 384 0 R /F15 381 0 R /F20 382 0 R /F23 379 0 R /F55 383 0 R /F69 402 0 R /F58 386 0 R /F57 385 0 R /F40 391 0 R /F59 393 0 R /F72 438 0 R /F46 392 0 R /F33 488 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-552 0 obj
-<< /Type /Page /Contents 553 0 R /Resources 551 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 548 0 R /Annots 555 0 R >>
+561 0 obj
+<< /Filter /FlateDecode /Length 4477 >>
+stream
+xڵˎ#7_Q?`E@q=%"lfl.%sLRER$Egz}7N7wm&ϼ/ ⓘgNƍ|ιK?H#7<~7E~?{w>5WO%Mx! }_&k-f'U7%x5ϲG?o/-"OD1>)Uiϛ2ׅ̈́geL\h][M-!El
+={b"y?+` MELP8nE[Vy@NXZC~$zGn-.k?1C(b^0&G f Z\TYjU5K4S>-l ny6Ρ5l
+4jjDDa鳢ЈnY$A:mk63$f&- 4S) >HF$=){7X/q_]8p/V3i^iɢMm3l8ǜOvFp߈F SF&ꘖbˈx.##6Wi 6S3'Y7c% )K4}e!]MOhjʌu5'] vt2 3Q)z~3)[u'^b,_N4= IsS6[2#)6L[i:knAi=mߔgoL2->
+a}b{bY=m&P'm\2^ eAB*SeFu6e6nљaPPCq<sJ17<gRp u a-8&Lk[B |P.]zfٳf.FT'
+ٯWJ|R(f.4GۏUUFN#<bkKf06}гpZXl62w[@ |PWrɅG 2m^2Nۼa|a@·M~}LɛwBppRQbx?Ǵ\25=VPJu<#^*xy3ef$KEO3LheDKA)f#ʧ4# q(i"%AHGo4
+NXk!Y{F9_GiwKMvx-gB'*1DX#p|Kg}qcd3u
+Ls?r*PV/oB$|XfjqHiV%ɕؔ~M'Ee
+-糳6 {6l*Bk#iUϪj>W@ݒТLP>hnL
+L5 ym5+"HjVFT-Kݯ-l8 ׇ/H(sOdM%ERΖiV8ֳe&cJ]LkYLgD!ړSZU7_ՔrdȬt2dNYf%cj6\H:@B7t %\gtV 3ک_RpWF.vPq1
+ . κ]mիYKڷC桌P8F1vajNC
+K~6c7ȫ0wѰЯȫ>޳WWU2O/QG=W'WUjI-O1@O..Hҡ]Dy
+[I{;dd j}|0bA?|
+v?:/&p{73xQ8zlfKG{ ͖3,zᶈ[&BWWx3
+o0ȸ(fC <C/&TEuLUo7Sл0xH+j&1=zܚP/wH8j `&Gx@(pT+UɌ;A-D1'ZЖh
+øljV%PCqe+ )餢0}?%I}ALo?LG<|rPER.Lh{ӣgFM)ʤUO<}vN׫F}mڞt~ NgÝ<3Mg9Sפ
+EۜI?; A=J%t7la|G,!Abz>8[8;F0!|-1!̋ L(,Xa%W0CKsNxifQEqnKWm3[7G]jjWH#sN
+
+kV\$(`Z_ʺZ7jG˨RP_Q" #Ƽex䍥d4HE2z7%[ǎoQk=UF9LŌJijgryQVV
+b}SPW[w,d\Ψvo/ TWekOfےtڽյiѾO4szm./ bc2o emg
+'c7KZ8l͐Se~
+mڼ,VZ}ԇz`+_40q]k3(M#"Ћ+4W+X?c 鷷zR!˷)2 ,{
+S xg-, Fˇk79VvXGr^QjxV2Dxy"i-"QeALYh?MBrGɖ_q
+Ba}ɥ^S.?
+endstream
endobj
-555 0 obj
-[ 550 0 R ]
+560 0 obj
+<< /Type /Page /Contents 561 0 R /Resources 559 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 550 0 R /Annots 563 0 R >>
endobj
-550 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 408.097 105.828 415.071 117.783 ]/A << /S /GoTo /D (section.2) >> >>
+563 0 obj
+[ 558 0 R ]
endobj
-554 0 obj
-<< /D [ 552 0 R /XYZ 78.37 808.885 null ] >>
+558 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 408.097 123.183 415.071 135.138 ]/A << /S /GoTo /D (section.2) >> >>
endobj
-105 0 obj
-<< /D [ 552 0 R /XYZ 79.37 377.683 null ] >>
+562 0 obj
+<< /D [ 560 0 R /XYZ 78.37 808.885 null ] >>
endobj
109 0 obj
-<< /D [ 552 0 R /XYZ 79.37 241.638 null ] >>
+<< /D [ 560 0 R /XYZ 79.37 380.034 null ] >>
endobj
-551 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 380 0 R /F15 377 0 R /F67 385 0 R /F58 382 0 R /F69 398 0 R /F55 379 0 R /F65 383 0 R /F40 387 0 R /F72 434 0 R >> /ProcSet [ /PDF /Text ] >>
+113 0 obj
+<< /D [ 560 0 R /XYZ 79.37 258.993 null ] >>
endobj
-560 0 obj
-<< /Filter /FlateDecode /Length 5527 >>
-stream
-x]Idm!iQ.DOcMI "}ܗfVCugA#
-T=qo^BnR]Z{Y-ȵ
- ؞9`,)Xð>epH=Z-,B+V7',R" (|kutFg$dF,P:s<`G?\H2l_ϭƩ.Z2D,b#y.n-
-7y &3aLb2< cJDU@
-wD>"PpF}L{IBAH$CB-{9pv.D5}qKiڷ"̮݊䙺V_vgTy?I"1 F,=zҀ $6U&o`sմ
-zDؼ6QM۫ՠ5?_$nk MN mkzAvQ\4C1RkWx>s̭pq܄bF3Ez Vo ~o|2-ht[.t1nڸ9q@R}* }B/oshDoCӻbZN^YEUPcɞ(OZѰ<yh cvm;p h㯩+I!L
-g Ųm#_jJaWϪ@Y|ͪF"Z6ۦ$.qkqm"2$&Զ&gWEޒ^wNen1f4Mɔё܁%TV!풄-]Emvd!mH.*BUZa̮Ja @lǹTq@wS=!Tخ y.a0jGpl]w\M`.0Bd(6S SaZVFQ|oqH;pcJQ0'J ɿ{iMM6f=n~ ܞZ?&D-( 9NJ&5( nW\+8/YfB>#9(ڤItoVDeׄ 0Bsj_]=]>mޥjvKVUUF%$O&θ[:[e~z4`Q(Њd΃\f`xgC~2v#˫ҖI;۾LD*fڦ<qKJ*L .|څM:) ,gӷ %:{\~PA?_wH=hWqy teqedV^Vb:\OLz4Ip"?4dڙ4XzTSR%,Ϣ:3`izJf}Kن&kUD"M/O]qYuL W1ݹIy;FL=gپ`|Ӂ'UBx1AYLɣPd
-_d=g4[ܣgՔNZ(8|y};JjND%CTxJkZ()թZtJ<:ylJq.
-+QoyaҀ鹗1bI)lm"݄^-۸X5IcJ=HJ&
-23۔KHR#
-1NsoU|N|5 JK6ANٴ
-Ҟn6j+~(S݊Ťɪ[܂kDPxtww8ü,Ώcd,oAB|pgUorT3ئȥ*9sx.q.ǚB tq3/cu'r
-Z0Ѭ$_3gꀕDϜN<E((
-*8
-Wsfe AK|- Ixb8V^)l̜&C6TGz`t/ EK?OڌŮSWz+&Ym"/m3=c6P˩&5cb#tzx)sܶ3~Hz<:'Efᦟ <eZsog]k椚8G%n%_>g8BYfnMw,<Bijl^cp~<
-KKZ4Vᑕ*qpK7Y满%
-蜢UT}R|i1Mjd.W]beکV:Ew-Ɯ7NF&&&3_D\>NENn,^6)[ { _xyhӋ}̙Ɔi6Mnki[ M^b5%R(ɷF^ @=+ogTgISNk\7^O íG5? 3\/q&
+559 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 384 0 R /F15 381 0 R /F58 386 0 R /F69 402 0 R /F55 383 0 R /F65 387 0 R /F40 391 0 R /F72 438 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+568 0 obj
+<< /Filter /FlateDecode /Length 5529 >>
+stream
+x]Idm!iQ.DOcMI "}ܗfVCugA#
+qg|w*C{@9tSxo$Cc~xpSǥ2@?c.S@+צ(JyG8>Z̈H#gQaK/~u`]R"W 3~O
+ =}OMWuCQ2᤿Wg&,zT9;; ӨOW%*A ioǍ&Իd0MM6m_Fnz#JsVT/`ZêQaT#
+V0m5R.֡C Њh% K|z
+n"-bu݁m0ũ 66ؑC+Lyqx$#W,skqjL*QKHz[-醂=MG5Lz{D>`bn Oar˜'AF$"2yBqsc$  IgaI<-wma.ib3v+gO޷[}#-ϟR噳0&|$63peI3[T}DaVu'Qr<U|Bxp
+<k؎-8z`3XLrP.y59>赖|J DpxEk&3"8w<Px#ڐTM?;EB9
+GֽE7Ug+OaD77mV
+P=b%0 79q=Dq5D ]ڎcK] &Rט[ @9㧍f r`%-0R~}pVd[訷B5#88]cd GEݴqrL Uy%^fӉ" w":K=Qay6wі_SWBo$eGāH5ʁIykXUuG=>c!UύENmMI\@DJeIMmMή% 0Ž)ﰝ c"h“)#K1 0B% %[ ,ۊ<C)ې\vUȅU&Ø]s6>Y3as0m82R{" C.]Z[ l]2a,Վٺ$⹚Jv]`P*%m֧0էniô0S+בֿ44+HwnƔaN\Қ4mv{=)=?LJω$ZQrhMjPJ2)=H6S$So 7W DqX_(0|Fjs&$QI _߬ {>o%`(J>6=mz|9Kݹ?ʗXݫ<JI(LqhuJR?>iP1M?Ɲ̢9G#Άd
+#FW-v}<S&דU,&ӳʹM58Oy?pU-A\2K yh/uXMSXϦoJ7uH~'20LzDi"ɐb<8|'tRVa4iQD~hJYU0
+3i0Lq;:
+K&`YEug2iz 2  L& D^ȉjVS#3bszwƍzZiϲ}O(cHG)5.*$Ozph^GϪ)GTQp('
+zQK= M'vԜ&]KƇxL31PRS1yt2 w\
+9-=>s/OcĒ;S;D Zq=fձk8Q"Ƹ]I{򑸕Mm* fehg啃s)n9FFL&JS,EM)QBCQEY1ʢ(ڋ$ jNPV5@VnzqvG4 xϙz6QDEaW,. eϵG(mcN(:iq+ߪq~mkl-أ'_VVtQ[kFV,&MV=\&£{ ev~t$#eI |; B8z3 I6G.TQpsa>ּ 'vy9+;
+4C
+ ~0wuw GU:GM V6zWЂf$"<S5'@}<=(6~wQ/D G=
+ph88XEne
+s^qƃOQžf ?VP)4<^jj$;:>aYĈd=٪g
+=X 6#? 90Kg$.|=ڊ\Wlh)5O6%c;ܲr\.PK[{ptwsu&5omz_^H*ôuFIv*׵(ނQYy˾8DcyHǼ8AK Xa Oҙ%y9ȓ$B9c Ԕo{Hy= dFJ OG\s ^s~ W^NJBx2^8xb\%tKۏ*DLOJ+ l8
+@&
+j@t۱1SzAَ?w{ʶG?w{v~;e{ zZ,pU2G(4sEdBx]Q<K>\&SsX /]RZ!d)8 :;s1CbZ6R"VZBi=cV-[Q`5]
+e/һH}aUOaiAdS;ߘ+|ZvAаr=/,?DHH&_8[u;A$]q>p}# B:W|btpy@3#>{_"
+oZ A n/-T5o8C;Tks#va~!"x Io}坓k-n0S*Ja,J%fW-P"ԗҞ_!_ωt|Tdټc:s<g@a\^,Z((/c^j#}ѾcO}4¯T6TtlI=. x똲V&[CYM*I!}e }rj)FeSi7.oZmB
+l}6͡!0dtOp&Z'XCbY|^)pI1ܓr4h_"yowCu+:BOC<QvCvĠq.P=ݔ7Ei*$g!
+Arh,۾4J n53_4[n}L/ȖbB{ 85xoZLȗf!aĩFru%_QMMjSt&زnx$j)vޒoTl.3'" ' 7MM/-L5߆/VEc :Lc4&R5EҴnaQZ@j
+/^k|s[#Hin/QF{]e3U)g5s͋c\}DΣJ.>&
endstream
endobj
-559 0 obj
-<< /Type /Page /Contents 560 0 R /Resources 558 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 548 0 R /Annots 562 0 R >>
+567 0 obj
+<< /Type /Page /Contents 568 0 R /Resources 566 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 550 0 R /Annots 570 0 R >>
endobj
-562 0 obj
-[ 556 0 R 557 0 R ]
+570 0 obj
+[ 564 0 R 565 0 R ]
endobj
-556 0 obj
+564 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 253.318 608.534 265.273 619.413 ]/A << /S /GoTo /D (subsection.14.5) >> >>
endobj
-557 0 obj
+565 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 387.188 387.244 399.143 399.199 ]/A << /S /GoTo /D (section.9) >> >>
endobj
-561 0 obj
-<< /D [ 559 0 R /XYZ 78.37 808.885 null ] >>
-endobj
-113 0 obj
-<< /D [ 559 0 R /XYZ 79.37 581.869 null ] >>
+569 0 obj
+<< /D [ 567 0 R /XYZ 78.37 808.885 null ] >>
endobj
117 0 obj
-<< /D [ 559 0 R /XYZ 79.37 542.025 null ] >>
+<< /D [ 567 0 R /XYZ 79.37 581.869 null ] >>
endobj
-558 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 377 0 R /F56 380 0 R /F58 382 0 R /F55 379 0 R /F69 398 0 R /F57 381 0 R /F29 371 0 R /F20 378 0 R /F26 400 0 R /F40 387 0 R /F59 389 0 R >> /ProcSet [ /PDF /Text ] >>
+121 0 obj
+<< /D [ 567 0 R /XYZ 79.37 542.025 null ] >>
endobj
566 0 obj
-<< /Filter /FlateDecode /Length 4580 >>
-stream
-x<ɎdI8!w3_ 9pFaF?jCfDgnΙׅ߾pϘQ ~K?___~uWӠ^Dx%.14o\}r)?s.v;Cp+gJ~:,=ZS3n s} }<<,A:&k@8K=40&v>oӏ>e ߯}/(l5wL2w+.n :M{=s.՘0qx4i4V,hKD "GK7_@`N2÷/o/atV]~y˗Ki&4S
-=&S:" q u|Nt=y_K?pw Cl"`>s?S-8jigIe᱖V\"3ZZ<SKgdMZZ@VDl H[=X ߢWI?O1g Wo1$U_ІQa44x [gk+,㖗axƞBx0[
-ȹ
-x'0o9AնmH/UP$Kx`Vq#L^y-Cݯmmm!
-Ӱ BH6xvoK/Ó?\SOݮ]gkhsYj)%3c_OvA*Vf~AO]]\[)B^+lhcN򇇕> *ҍބ9?1>b3wW)yxuB/ ~ȜARȊbCZYfW5÷ZH#Ps^S) Pz4#"Cҍ~giZoqQ$O@>OHJGPe!d&o=ƷYФ2I]ʱw}• GT/Q>i{
-ģB%h-npՏMWZ+". 4
-D*V\wT~Oe'O.t>]TN0ԙTxGI0Rʒm}:~f5̘Җq{
-u}ON)2+̙"'̛GJJ]َʼ=E5|_@|ZOg6?d9t*L*fv[fJ{J/j.s$ C"B.p
-
-,W㨫Np'R2͸q !mq>x HF410ǃ=Cr*_^kq>%\ߧ[]|ݯ+AIUWQ[]ĆMFCa[A8MR7fK eOr l8&9)&կ[\Ѧ^KQNsL2|yN2DADʥBDf).Rh>Mm:J-H@MzZtZ?~NP =lfx#aG4I{V2ۛK$tH.NW((hʷ,,Mz81DaXIf6ĞjEBO[)Ī6F̘Z^خ)ۧPdö8HǨ6ћ%f D݆ ЍA#]}pBk$N3#+R~1TomZJ";
-b;YJҙ̼ j:.r1lQӘz깐F+`Vƾ RmT_2+>k5 2UOQߡn͚/7V'̣SUPr18\Dϋ; 8t|+sV6uDM qա~w 2E\R-_ZYNm #6U6xhl覈e+r@
-ivغqֶ"ö-$ ga g(6t3}2eRsz'TW)}ucglrfqw… v
-@z--*"BC)m%qG շ ȸVidSMd v -M[»jݎ_c-,4iPP}"vYLm1@ yyP!d3@o'`6鈿=+="mg\̆n,Cr[ovl
-\J"wLKBټgem)j1r$rz5
->s[/ OO=KlY>h.ki}Q"}i|1[nޭ(y{A{V}caWf}I61`/΂I
-m|\{`!S`6MR9K3J+qz+k*19ѿU:{o+Kfx^a)Q3<p@<etkL-^Gm.r[>]tKyŒyѝrqc1)W
-cSc\Lc9ቐ'#MNR(Hl䳈""y'jU>
-U
-ÝHsΊ̭0.̸>E G-wgsK57d_6恳sXA<p[9[$#P%+xY۬zMdOdޖ|ԩMҫM4*f%`:h6qujt0q֫J*~i&5T-
-t.p}
-$q8-GƾM; osm
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F56 384 0 R /F58 386 0 R /F55 383 0 R /F69 402 0 R /F57 385 0 R /F29 375 0 R /F20 382 0 R /F26 404 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+574 0 obj
+<< /Filter /FlateDecode /Length 4589 >>
+stream
+x<ɒdm<JHkD#:OHyAjGIop_ߒYcCUf
+m\_hYk{(MUHs
+cEۖ-h{=/h$5>M7 0@(XOxUhW#H nsp {
+&gI$.QĈz)%* Y:hq~<6^kbpd**iZ%sݥR%?/<Q~vQ9SgRI;H9*Kc6YLF9eI1- ,RW)3"'̛'RJJ]َʼ=6E5|_@_|\Og6?d9t*7;O:Pfd!gPw0~7`CrV cJ8Am
+um5=˝Rrw3w90'v|^ *S!ok\>TrgbJMn'{:{`CPzn5)S%OמטJzriR[kgƆoZF<"jfjQQ=AڶAdVEea,씦C%-<=Jm 4=VILKPm$v1;g3v"q=K Gޖx@55*:B*m* %qG Dշ ĸVudSP7Nj Jv93pDw;V:lwIcK+gŴv$Gy(Q!"3@NIGq]9Ao>
+~6,_8
+~ӤIm#[RǪw6CFXn{%̒>.UG.<^Xt>9CO%6xg%B߶VlsM]B<aD8NՓ#=fRm2S+Nr1儿`h'bv49JQGA`Eם@/-1g{]!~QV]裡 w xkմA;xoFN< 5B.WxyMu{@ݡ ]{VY:!hӌ5Rj yW42PzW&brI"8Z{\h)0AE8ǃq5
+_?W fL㝱6`n!ĊGkBzs_$
+|\<lvO)fE<S;ύ;03:.0Iꀻ4 rluHU3*p@,˝-{Ҳzt\vN1~B>s Dk"g\4&p]įۛ'|<޹?g*#XaG~ɐB\`4泐s,&CI*ӹӮV1n/51M\\|R]g0WqrH!!#4qʷ)hjJa?\c3$]kFϞ?.t
+#rPbT]ZRmy2%efvݛn0&-10y`W)2w# [Q]ia~׋<R+0Z.(jˊ5,bS8-[MM$ceYm}NRFhn!WCɖM¯ z-_mlbsu7}BeP5-^-V)2 -3 LD-3=sq}[RHۤ79xnQW3@*ԋtKo*vO>_~%dnP) CxO!i
endstream
endobj
-565 0 obj
-<< /Type /Page /Contents 566 0 R /Resources 564 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 548 0 R /Annots 568 0 R >>
+573 0 obj
+<< /Type /Page /Contents 574 0 R /Resources 572 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 550 0 R /Annots 576 0 R >>
endobj
-568 0 obj
-[ 563 0 R ]
+576 0 obj
+[ 571 0 R ]
endobj
-563 0 obj
+571 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 254.992 607.586 261.965 619.542 ]/A << /S /GoTo /D (section.4) >> >>
endobj
-567 0 obj
-<< /D [ 565 0 R /XYZ 78.37 808.885 null ] >>
+575 0 obj
+<< /D [ 573 0 R /XYZ 78.37 808.885 null ] >>
endobj
-121 0 obj
-<< /D [ 565 0 R /XYZ 79.37 460.244 null ] >>
+125 0 obj
+<< /D [ 573 0 R /XYZ 79.37 460.244 null ] >>
endobj
-564 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 380 0 R /F29 371 0 R /F23 375 0 R /F20 378 0 R /F15 377 0 R /F58 382 0 R /F26 400 0 R /F69 398 0 R /F55 379 0 R /F40 387 0 R /F59 389 0 R /F46 388 0 R /F72 434 0 R >> /ProcSet [ /PDF /Text ] >>
+572 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 384 0 R /F29 375 0 R /F23 379 0 R /F20 382 0 R /F15 381 0 R /F58 386 0 R /F26 404 0 R /F69 402 0 R /F55 383 0 R /F40 391 0 R /F59 393 0 R /F46 392 0 R /F72 438 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-574 0 obj
-<< /Filter /FlateDecode /Length 3554 >>
+582 0 obj
+<< /Filter /FlateDecode /Length 3555 >>
stream
-x72_ѡ MV=o$XXkG[gF64Mb],O _W|0q&c >9Ѩ03tVM^3|<b$6a}ŸuNM<iyz.&K<`qM1A1y/o89o//<~s>~~$ MvMw~ 淊W~SHh\Je ", tPQ]K]zMBl+KçUaW! CZSa I*Htİrԝ%t^FPܨUC!Yd\Kjհ
-5KNZFZe6|
+x72_ѡ M i x# G6Z 8}=3n.bQ|ħ_ʿ擘7#~D~ΤjTi&.mO2i'YG_Dӟog"h2*
1>.=!Zm
-cf%(&!Èd]n9hZh9Ik˸,17Wdu&n7Β&d7j`H"ҷ2nxJ{".2&E+~TϷ@ݚOIä%Exޢ+R÷HS
-L̖. 7C+,۵Y)Dg3T)i5yMM,94RP P(0𻶉G$&`Bsdd~"wv2dU,yJZ.
-G(Q ? X0ѲR!'1@Pt s9hSvMƶ%d-{jpz}^y7-`5ffi??~Y*wzh̒4{
-1n4:k_-H|rKKm~j P5E}K
-b,R#$(_O(edIYדf*N$[ǿUݣTYaokMfRtqײ') &Zղ3@K2=&D&צ ~E-*ZB꩎I۱ǼOL\lf-
-οJ_~??M!5t܏<9EyL?|8
-Rqڇ?׆0 ~ dÝzÈM̾ 07zC0
-70Ff6NA !4n[4
-z,;T菭zD 7)kbYyrb}GH&Y ʁ#*"*"g\`RN\5&ulsfxGޮK+0^z!9/e{t_Ͽ W~6]y?胀KJ+x~}zd_#NG7݉ ?oϝ
-KcHJ+Mѝ촓/uwy|}|$ྎZ "|S1+o-ұ8vJuӇxWJ+Jxޏ+]qp{K AOKmcO误Y12vF7<٪Q*fAȣ:V2^7S r]0ĉ|"Ls{baS86L8/1~,sK<t Ly?μԩd/j_$ij޸ 8\'wuB'qCit/Ϗ FkK
-A
-/?x~q隷AZC[tlp$7,_
-Sp۲@y(KMdm39 Zą$Ypvfם?<D%4Sz. ?7ugeHK,u }:\;2_?arLPd>"Ƨ lU`WslqA%)R2RDm7L0fX.VˮX9]5.]6g(eWØ%8Ek
-InŹPY>m0j<eė=m6Hvju'j6?֦nI͵V/DZC,el[muEm_ D_C FR!,Tke֮UuMt[ >fXBx01<GSTDCt:r1 9ыE
-% 냥qr<z
+cfΐad]n9hZh9Ik8AJolLV2n&d7j`H"ҷ2nxJ{".2&E+~TϷ@ݚOal~n
+^j֐IH8d ;3~r[
+K oڈm_ f,0=[pSD!ْk$ERK~-A]d 7C+,۵Y)Dg3T)i5yMMһYYHAAP`wm ``$9olr /U.Zq=~
+%O)P]eu@%
+5AĈE&Zvt 9ZA#k2,iHlLרV0AUgz Vcf[ha(뗵!Ar7-~,Ic6IoAY"ć#l\ZjSk25O-/[bo(HK"!DEγdi 5 2ԇ|aqm
+[!y3K"W#Vk ‹}ZMZ+49xi)[7TJ(tIsY {-)]$ifj&-e 6DL`"hdT[xk+Z<~se#~ToW֛j2BUJ1A)n d'k2KI3ϓ*N$[ǿUݣTY92w#&r#eO R6"0\kVvl
+L(8+}4Ԝq?H?~~8
+ʮzR_Ů^:/PX4o%QO%"+1gLmQHIFCfDdDoG#`F.W7XI)p?Srm|7ƺW0kw~;_snpԻ8k=J(tQ,nؕ{("[;V`keiץRFlՅ#'w@F&f9NYVv'@ΓSvwT 2f#*tܫ\0܊eRm-.rj>(5ٴge+dF6+8v]Z JKR۳|NzErugiA))s#ԮlEku. "o٬?p:N9}{rZ%%eIћRFR 3.`fa0X2>Gb X5kxA򺖳2D4wm'hঌ%hG
+$X%
+&NYv:<[>etX>!.yL>y|@7͖PX\vJuӇxWJ+Jxޏ+._% '%
+.jܽfSVzdviYM01t;"2aR8'wkGE&Iq'Ò%Ygs(!A7Qn+>@hfuzcP}^bvZ׎^kV*.:OY\B<F'yW `Fnch?1o U۶$Ҩ 鄞unan}H[;—{ev/SfufIƭ Jeљ[|`;0Npc4ȍWJ +pŸ# \+d z$;,:P4mm-#43Ynbp*L;>V'qI,8;[zO)=?7ugeHK,uH1,.si)T3R&>嘠|EOF\A=H &Ճ& )R2(F"Ͷ &t]3z@
++V}WK;r3\G~M!ɂs߼Yt.A֦Ou/{Z W'Sц aJVZxҨf#3<omF$\nr;[/J_ܾ>!W=5Hiuo2kWӂ غ&DUt _fXBx01<GSTDCt:r1 lEv"y@%% 냥qr<!
endstream
endobj
-573 0 obj
-<< /Type /Page /Contents 574 0 R /Resources 572 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 548 0 R /Annots 576 0 R >>
+581 0 obj
+<< /Type /Page /Contents 582 0 R /Resources 580 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 550 0 R /Annots 584 0 R >>
endobj
-576 0 obj
-[ 569 0 R 570 0 R 571 0 R ]
+584 0 obj
+[ 577 0 R 578 0 R 579 0 R ]
endobj
-569 0 obj
+577 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 396.302 135.32 408.257 146.388 ]/A << /S /GoTo /D (subsubsection.15.1.2) >> >>
endobj
-570 0 obj
+578 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 201.96 105.613 216.685 116.492 ]/A << /S /GoTo /D (subsection.8.2) >> >>
endobj
-571 0 obj
+579 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 232.406 105.613 244.361 116.492 ]/A << /S /GoTo /D (subsection.8.2) >> >>
endobj
-575 0 obj
-<< /D [ 573 0 R /XYZ 78.37 808.885 null ] >>
+583 0 obj
+<< /D [ 581 0 R /XYZ 78.37 808.885 null ] >>
endobj
-125 0 obj
-<< /D [ 573 0 R /XYZ 79.37 678.801 null ] >>
+129 0 obj
+<< /D [ 581 0 R /XYZ 79.37 678.801 null ] >>
endobj
-572 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 377 0 R /F69 398 0 R /F56 380 0 R /F55 379 0 R /F57 381 0 R /F26 400 0 R /F65 383 0 R >> /ProcSet [ /PDF /Text ] >>
+580 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F69 402 0 R /F56 384 0 R /F55 383 0 R /F57 385 0 R /F26 404 0 R /F65 387 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-582 0 obj
+590 0 obj
<< /Filter /FlateDecode /Length 6934 >>
stream
-x]Id9nׯc!h_D ps0z060n}oj"5 
-E~HQO!OjO| b]0Io1/6ޢO󯷿<+~ǑW+lWQ)k
-(A)7wUי~^g+5g:׽}O-/96,6a 1n`ꭹg߱TZs̛v,żo>~S4NDwh΂b <[3YW!vDP{0i.8L}N75<aY*
-[ >@M
- ʡ*V(H(W5 ve؎}BW2/JtGުbG+W,g=]%*j81\YbX'-F2ڪre#ܙיӾ5U%Ct2<$M- bJHR7TJ窃ffgpr6*bRöciZC(ömYtirjfnh]ި-w??b; (`{9ٌ*c_R\`mͷ/=9b0eLKUd 0V̒p)3 *2w7a!,YxIئ}Xu_`Pȡjɵ܆3 9 t:Me8%seMCbL#Aĵv<mbxVVD-ّGߐT
-k|瑶l9Sp[v;<T<g6ڽִ?'^y9)<G:m,w o$u)]x</<[voiwzU^.r fl>7Wqѐ'7?NRwfwzͷt޵g3mbb}{_jXYTެL䂽 nD9[U+o~xaQuZxbTKe(cXbʷ_~ V-js>O7-9SZlP O~7n_~5I*ܓa6ggvܸ;sKuԓO@|y4ANQA>(#0V4V0kb]r_̂G`=.9 ,>8sS]*6N0ug,?Ύ=vh"3; ]uы2f"`<M!kb~ <D  3׈%bA #*bĒ;#fvX#fŬ2 L"@fa qsj#z5u:#AE A[xJ0%zKK
-\.EIf<|\s 1L
-tN<F2vaqHꭎ(%07 iF0a$m4uef`>6Y44vgH,E
-Zm{D)ho%<O5rCmH9$q2{6rHKH$y=ID∄NA\tB "Ð&ڄ`eIl"oL_ʹz`Zja L4KNa D-z .Ԝu|+e)`HLU>$ )2I1%+04YaD)7EYdDRii=m,ؖL@]%!IIuH7DR  zb@);)b:@BAk3eeRO-(gH(6e,IP(Z$r5(%Pq47eH@a. 9"eD֡"d!= ԜLBCHh IvH j3;[YAF蝖lMxQABGN3 Tr#c) Rk?KTfnBY/=lI4~6(0(o@NT4A4~-#4S| &HAEkHȐz@i+k(D)sܧvkbY$ 6Jb|ia)(-$5(MV%61J#*`r!}*0h XNP>%cX2 D4d i'2c#
-v@
-dd~FCd+I#hcR(ne/#2ނQO
->])S5@^ /)ti ,G$14ڍaqd15+!$V✇E
- @[Bܧ1Ҩd$)Xu#cJY686!QV":B(D2O2IF ݔ\^`Ht┕cJPA춐(2Ȱn,@i+S;2Rθ}*hǁd1aBAlSQ&$Tı
-::J6eP,VUexlTrJGPGVsVP2]*(Kd1}*!4:#S9j5Ș}{G$GRVS< 3
-3P^G% *'AhI-=u!z/KNT1mFGVeJLö-Y)*uZGI%̞ vl~^M@a1)96
-
-"Tb*E2M5eB$! Z` E%+ۉ"׶J/l~
-'$Y[:D
- wl|'\Y[U;Dڀ$a,XQfvȵs<B.,jS @%WR $RڭbqdhX$tl"J\= X%,,;XKN8a);w*IFX$#`*DkyDj]2YFE@* ,,l%XXJ6%h$D,de; yB+]2% ,*sGV "&hd,VY(rm\>y&?uc%.y"EtclӫynCæ_F1Cgs$I3
-`^榳[<m(|!{e'yx&|ve8bO =|86k!LCƑZ,V $J7o\4ܜ/5KGם[:10I{vuw:!9]Wctqv!母
-̀Im1yx3x:CvJO22C?Y*^`sCa57r|+W hwA3ݏc1_Nw>(Rb֨ sD W>[7r9Rox'*ŵ
-'3]E>qFp$z⛯=#I
--?m:3A@Qֱ 4\OH{()p}漻pȼJ|Qt3Gw/2-i{[Mx=[gt{lM ;yu9䞍> .ǣogʴ֛YDt|gG n!yEX}NH/YArvK9D"@39m8)2@P/^{CͳcV^mfu]^{ y ><\xtV9<B2-nf+ E<W%2(O2Cm!OfE(.B\t2y4n9ސ$m?92<߼c> ?<~<B^ktOdz 䇑[Ș,\YL]{PO !䝹YZڜ
-(IKSO}rFnnk -G5qja|ɧE9'/HC4tVHBżt~(ЖpZ8Ԡɔ✝g
-/nZ5r?]dC}]8riQDZ- u~*szyi7߾({ FJ/>Zۉ [E#ԚZ"T뀏k#y涬[s{Տ\irhk\ˍ4T1='ǁdPio~ay
-"*,tߝG8Q|S jzgg&LJx >"- !OYaIÅ*6z/_tXdѹfTA?sv/5ThjԢ)EtJ.15hmN(/TkaIii=F{LW(} 8dʻ|^Ϸ^4\n2zr Vn-Lz|f!$_)?L7NWq:isL)`YRO'[>X7}5f;V8~1cs!ZiΟo>& s67$n>%F3?}
-Cz'f\Ik Wz'@δ\['B- ts,As⠟2? \{pIJHKec^}# ϤOZPvuxj3 ^[T9Ew
-\$7Ճk/ O.vo[^< r!{6V&"-;^&.kj So=hiJ~t.Jj;sUk0dh]4$?h–4h;e07-r|
-nV/Ğ#fr/_ƜVN..k'k*p[s[9J5dfQGZSumBeɪm=w4T.);ymR({ [;o~w`
-z_}F<w:%|:_J0;z?j| {x3 &q; c|bU^#qɲCҦyMrފ)nk\~+^5oq=p6d6bJ;M}ĴmQ,;kdW/.im/˻GJ&q>G,c˷8ZڶN\=M] e5q.R~wQo]#p],9q>./*ڏ{3 q mY]+)"lR6G]Q>Dxmqݔ87鸅ԛV6l)Zػ>ziw.];acS=2W<w~Nocx x缅D o! 7 yi9Sp[!~@(UG;/ϟn?+0tynnqQ]K[=n=lsZp5񋄭8wMP[kaZ̃a6Vw+AJc@- ?F1B??Ou^Dxt7\+[i{S3&3L[g_vpbbTK
-A=C_=m6fR; ~㒧tJ_ix^84Lg[XVLVocb`Z_y༻CE&TUet{v,R?asF sd(sL"'~%
+x]Id9nׯc!h_D ps0z060n}oj"5 
+&E~HQO!Oj?|n.o1/6ޢO󯷿<+~ǑW+lWQ)k
+(A)_W^g)'S}Ϯ<$V\?Q`۰؄%ĸeɪMRiaϽ2oznڱV
+U~'CK Htv([P%ٚe
+C O܃oMuasھyu :UP4]jƵ:heԚՇMyQѯZ쐡wSx,u1,ZP(}P}Q5
+&c8i4d,+NVO]NqdiPŗ#ݸ aɊ%NN6+"2͌^fFw\mg1ːJd[Y"l<Yj_֔?$Ɣ;D\kg L/|&.qilEݒa?~CR+6<:HGڲyvfyxl{i?'^y9)<G:m,w o$u)]x</<[voiwzU^.r fl>7Wqѐ'7?NRwfwzͷt޵g3mbb}{_jXYTެL䂽 nD9[ߪ7?:-<b*X|YP|1,1/~Fx@
+9?o얜)-6\(c'7XHG_oMҸ
+d|X #ř".].7\絾hP:_? ¨ˀ +`+
+;4Tv`CO D:Ep30Pː5? ya?"vFĄkB~1NĠubAΝ3 bVWC 0LOݸ9̚
+lZTp1'~v K~Lr TS^LxP(=IC{̓ kt f@5xí逖ʩwiԧ3`R RZ8rs"풬fhitݻ!ɨ H/# 'hTaiNk7^D=S<u wm(i2v&
+Pz
+jNe=\.IH0,Is`bCfp$F2pقLg"T&K`l6B36HAm
+8 1 Cے #x$d0i2~Rr1I`cnzQ
+DaRO (r6%SLWGtH4h|mL)y f6%
+Aa$QneA*N&li=$G R:B,vDџiu\h -A8)AmvygK6+b2^ӒIP/*hW(|ii&}uPnd84AjgjM3K"闦qӏ6ڡ i8ظ%:|z
+T4CBI@#h cRO(me-2=ernM,$FiZ9M7t9|1%6$TԪĆ#FiDB W.DOEp#5  *81`d UF06Ɛ,6!$#ـVvlPUSHa#lOhq%cQ t!ql5;C
+20ŭExP"[0 A\2
+@3%5Фɲ,Cy^$Tı
+3P^DGe \HFW6H PrL
+c#EsM2(mejGF
+2OEcR-8l6&L8(mJ#c6Q88!QV"<B(a3Z}jHAG'CIyæت ZJSI*CjnW
+JF2[Be,&OEx<Fgd*3#<@~H*CjjwdFa[ًQ%d"-Ug.ZeɉJ8 ڪL)iPe6+EBNCH56sY:.O (,&%'֜R"$bl>5>jJN%-vd~&zm9r
+T"Ŵ)IFH"mK:X%nX>&X* 
+wd
+F
+HUrb+2M5YB$YύKXK6S;.R#kjGHd4E2
+Vr*W
+$DJRU, KMDkx]2ek ',eGV"6@%hd,VY(rm\"P͸K&˨Pe9 _ $-ch]%lga\0O`Kf$`a9EeڪQ$$X-c
+_qI=n$w=^I/؝üFģ1jϽi2Z3q|iz8F; )- 7Ku(a| tݧ|yݝ`GH(8]ppzk.B3`RrL%vi NrApOg
+PvX͍_y]Lq̗ӝ4J5jÍ\T|މ1Jq7|#_GOxܪ<kOs3|ˇ{OΌhP/e{`0wtt6;u,| Wg,J:\xsoGh9.2\};_]̑eLKxޖb^ow^?[StN^]a.h14gOüƙ2fF78l]*|[z5r^V'$ɬ 9ǥ"ߍ
+(YKS^O}zFnnO -NG5qja|ɧE9'oHC4tVHBżv~(ЖpZ8ɔ✝g
+W_ؕN0u(o,Ib|\3eݽ+MC\\oݤ<;$LG}l_3 SQfwK<ű6OόZ\櫊.fP8;cu5qfgW0\pYT$to a}$(.-J m +5MPשS}I/&`E7{Lz( (U`{.JXB{P{ͮS'K);˫9PRч%§I/Z19 /E|n)/.{=ߎzz'(rj8O2X`3-
+c|0Vӧ0q:^9]9騇͕3e]K>nm`]A?FX}6e jjV9:pV,l"xg2OXK5Lr_[;pp5R69_Dү7\Kf z|1h9ڃPlUx[6vqICkWʮ.S-v;{k~p*絨R?ҁzpEܱam['Wndf*]du%{Ye$eMͽ!@tʰgm;-ߩϼ&B_mq.JsM pX˜Bޟ$/< "]زxFm E2O{܎b`prČ__;ܘӊ+-~\[yMΝ|ukN╔z<]Q)Æ >H+}jڟ}•Z>Yߟn8%e'-\
+{w!Z?pbKy)\OW[+ψR$oCK f'ֹX/Zܒoa׵R8`Aޤ4<zdO^ʹK4b$N>YH4)>?P[1mcoū|5ӆFL ag)O^s߁3Q5ŗu{-BAm%meyT?n?s%zuv[2:V]։{Klg;ޅut^ʷ.7{u5WŒ`#7\ܖWе|.6.eg@xC_AM鍓xY[H@iUocƋ+qxǙ6lljc_-so/Aն1df$#m;<G?Uy RucW ~tY斠cuO?o8uK
+r_%xqaӂ$lmƹkozl/Ư 7K{ [ TڵTcZoaH0yί61$r'%㦧Zi#O %0a:>7ZRr'ri)WY<SjL o~)Zša:zڴ2e} ;4T
+UL*2m*ۧ$|޳c)QQÜma6,Sɺ[ ?Z;
endstream
endobj
-581 0 obj
-<< /Type /Page /Contents 582 0 R /Resources 580 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 548 0 R /Annots 584 0 R >>
+589 0 obj
+<< /Type /Page /Contents 590 0 R /Resources 588 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 550 0 R /Annots 592 0 R >>
endobj
-584 0 obj
-[ 577 0 R 579 0 R 578 0 R ]
+592 0 obj
+[ 585 0 R 587 0 R 586 0 R ]
endobj
-577 0 obj
+585 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 402.528 481.923 414.484 492.921 ]/A << /S /GoTo /D (section.10) >> >>
endobj
-579 0 obj
+587 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 332.029 340.922 343.984 352.877 ]/A << /S /GoTo /D (subsection.14.8) >> >>
endobj
-578 0 obj
+586 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 330.524 67.03 340.981 78.488 ]/A << /S /GoTo /D (subsection.12.2) >> >>
endobj
-583 0 obj
-<< /D [ 581 0 R /XYZ 78.37 808.885 null ] >>
+591 0 obj
+<< /D [ 589 0 R /XYZ 78.37 808.885 null ] >>
endobj
-129 0 obj
-<< /D [ 581 0 R /XYZ 79.37 771.024 null ] >>
+133 0 obj
+<< /D [ 589 0 R /XYZ 79.37 771.024 null ] >>
endobj
-580 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 398 0 R /F15 377 0 R /F55 379 0 R /F56 380 0 R /F20 378 0 R /F29 371 0 R /F23 375 0 R /F51 376 0 R /F58 382 0 R /F65 383 0 R /F40 387 0 R /F59 389 0 R >> /ProcSet [ /PDF /Text ] >>
+588 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 402 0 R /F15 381 0 R /F55 383 0 R /F56 384 0 R /F20 382 0 R /F29 375 0 R /F23 379 0 R /F51 380 0 R /F58 386 0 R /F65 387 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-592 0 obj
-<< /Filter /FlateDecode /Length 11369 >>
-stream
-x}K&^[v/n:&0uU.xŠ
- /[[JCdGˏai0>.Ͽ?ĘOysKRHh'ANo&Nw8H@]! d"l; ;߆z Rd
-#2x*է/05Kl/HaM}b1֭9,S P_LK;'7-B-Kfc~];kS%-iy2/MW9LQ6S Qn2=MSqx3NOu 9(@e(C 4Qy[+珷~ҏ`K.wP7_ܳ!yjCJ)8$?ِe3bdÐ|Io)$?E9l8{_'# QH6=/WKVS5+'׆~ۋVqGBsd*2=NERsLc cS%aTe(Sq*zB*z4J/FȐ8>4# XI+K^z)? ְ~"'N:W|z)C\}{yϳJ!mݟދ<N+/'wypܼ޻P E`<0}Zlޣq V|wߣRQ|\ߣ 0ur ΓR1lQWѥkR5@1fz^&. zfz^Ɨ.Ź[b~y)_ɣ=:VpڭGw0Ҝbx[q}o{C}hAd_m+.UV%beq{Fodj͛IFOGa+p %m  O;$[x219dԶANԶR O%HYZ9e!AgːaA3cJ?Y^
-'߼2\@Ik6Sq!f
-">kSQBB/jaXQXeS8r5E`ICF1oiO1(N@1ʭjN;7!-qҡ WJ2
-||Ԝ.9mnPooZcD ܪḘXe9yr!$( te-/ m=K!e5Ex D1\nT"ΉEVeRp[k9 !4c3%e|lDj@S"20Nn~BDVD\ ؒdHaVQUɒSQ$-HV51(*`dnJeS8@g^
-Af,10ugI8hj8D ^niE&,V"Fdbgg\F@@Pjp:^u5+ - y>Q̻/j<DѢcҪEEEmQi! !tIj0\Xӽ*`sNc,Ѭ(!`c[5wZa5hQ&k BBzX">nOrAHhZ1KjV9ӰREL
-XX=_^ECc_Pê0ʼn2$HAC {X0'%&RS Q^!)gs"IM)odidԪ<b_+ʅ n*ԪT3jZbB&&iݐ%jUD&*Ӳµ1!bN3@%BVuԑ֤YZLĤ0 QV5k幰2KDEϵ剋FJe“(1)u͓5 [1hw> J'*$*՛ڤ)pIA/QQՀZZVr#ȸT PgjT[2ʈ'0e 5UMpR.PIwGLF[UVD&%%LdMK$PT52xV'*.x.-K\ZQjZ&LDL2uMrTT5 2yľV +T2*"5T.dQaU~&LńLL
-Һ!KժHL׊ײBtRRŪU56eBO\$Wk
-^(pjSçra
-XJue)-&\bRK)Sk
-"_+c WwYX.TQQk5G2E01)p)&k8 Z^(B򎘘TzREŮ֜6D“(6'إaCUX\a!DЏd}!?폜Q#U\ZqL/^0L߾K57yy[wM bmr^s;}i.eD{4[D8n.עw,}gHY݉}o|?L')¿ ^rYٿ. qp$[ űd3Lm7ms(i?mKe
-: WFl0Kq yv;~:&!~:乧"؇y Cڻ{7Y9$u/B^w}~7tXGu`kJ2b,S@FOaGmCy{7?G3",(pV\p`^NIzjoG_a]3dIE6Wrq6> 7'J~z
-;#xQ(IŭSK~-ŁGƧGFP;5iXu+P>;
-EsTC^_C[lG97⓾5\Q4ad5F?lO=>' ݳ1'B2u3:Ncs0眲t wj<G*-lvdCjN<=Cf躔!j(:r2;]cEqL}1~xc[@2z(WpJ“bLEV^$=HfdMtze7tO k^['m5SJӸ!noVDw KLyS5?KgA5Ꝓ^{e%ij:Ap؝ٻGPG94|
-LftO3>291YuA XRd=o4tؙIҘLle;hi*\ f1oL53%:<CtYOŸ wﶢ(e"׾rԩY
-!d9h{TCjtfaΝ$
-K|[9E'>a~6> 32.2(~^0C`ӿt:8[J81Fզ
-ߓ`SÏPLET\K;.!o9qPQr{kwM(Z)M$|-xrs,W჏6
-) -=3\R-( {=AvopxӻcV3souu,,FKtb$4Mu
-S9@%Kož=u@<:P\zuEH/Ɩg[ +wip9zI;?
-~`] U]JEUD*"PѕZ컧XǖP~&mޅ#ɵAG]rly\`QYj/WL~D^S/22/+0Nx&# Z^<
-k^+ԣpRJ)Ds|{w.*R۷iO8f`1-Web 1Ǣ켔>S4VZJJytOimJۆ)'@Tv
-2=psD{dU$\, ܘhrtFYaY
-#3鈭W3n͑psx%j,hn1p,¥˽FamqwO@\އ D:]ȡI!)PBƆ;T'/{P-dn\>jLer2(#D{k[M+ }Rw7쓚!Vt@hlҐPB߆)d8/ `^7b-gZ: $:؞W>3]ˋwυ2犋\1>* ] ̒^Z*" 79diěm᤭Mux&j
-4u@Ij+
-~{\d*|.`ƺƜ2f:}+[ }?xV_w5F,0p7e v,f=GĘJ(L@h?oJsmlrca{NcOuj?`);+5WeLIF!2.FFnDs+
-v*3AƎ5C?HS8
-i$KVc4Ja*cHL7G*X:6OX>D0YD05,/Zw|YSvJ65cЍMl瀓NnS `鮥:۫h}M .=[qc bnT¾v8B}q_
+600 0 obj
+<< /Filter /FlateDecode /Length 11372 >>
+stream
+x}K&^[v/n:&0uU.xŠ
+ AЇ[4I]'MJnȐ2\WoCq1)?Y"5k7b?_?\ nx
+؍~&R-< ޘ2mij$-$()c#K 7,$hlEf̤D8s$n-+i)$HeZc4\Yb"`k 5,0k3mvLbl0M|r@ɛC"KRd`lB=rFNSrk!Tib;pt;AYjlM쀴f F+Ya G|@Ll`3aNBV)" CP\XaBpti- )UWG?ܯXL!M"3a]2A*r5R5+KJ"ÙΡM@Fq)- Yx+t94G#-"["D6C9SC H4&2` -O̢9LW<=0QĬD؊dHB 2KF33e#JtiNc
+v5]'%dj$
+#J733 hA~sp0}ɘAvBa!KJÊ!-8Ba)-
+ p g(B2JYa8p&y6#CŤVGKo:P
+pV`.5(i%rR2Q[!Re%-$lLW G&$e1N:9*_BF >' TfX9QB+{5px+l29oT.$Nlͮ'z)zH/Z81N5-)XdmE:iQ&
+ԥnU_=pcfE հBi=%,REd%^ H Y>@2cev?!#EiQB.9լHpaMkD*{2+Bzl}BVA ,P( CJ82ȘĚ9)6 'MbT O9NJ/*ҪКnJIw& VwjRj@d}(Vκ#&dTi[ȢbPRͨMj"K Ļ!KժLUek;bBFŜfJ,*#I)Ia@$PV5k幰2KDEϵ剋FJe“(1)ŻIԚ쭘jtaj;bEEOZMmROZLĤ' TT5 2yľV'2.TYL2 LdĹJ)Y<"_օ* Ո?U~ UԊ2HѤ rqkHEU#!Gk%kxQ2вEU6e”Od$3kT#]XQp!
+SJ6e,-&dbR, T
+ 1b_+^
+҉ K FKVuԴڤ UF<q)_yT@EU!kPB1զO5Z\mQSZLĤ)Sk
+"_+c WwYX.TQQk5G2E01)s͔
+5 iR-/P!yGLLQesibWkΊXT"IK $1jU"WkmQ57Ya~jO#*.8SoGo%<v-׻Ŧo WG1}6s/>d N4~_Kg>*<QZE ;Kb8o훏)?EWc0r U.+㛿#1"Yv[pd˝8v>v)M|N哒6G-6wLAǃ~}8Ј fw>1νc^$#]'6<8=}矰?!;{teACx["d5xwwa[NW1Tw Wҗ^{c2Bm
+=G<֎gDX&Q%A~ޝ.-,Ԑߎº\umt> S7'J~z
+u [404Arn3kt]!k(:s2;]cDqz〚Ȏm>Ɍ?~\u(IO1Q0d>?Ɍ2iNPˣ SÚ֯탶)%M̩_UHOy7ee7+"}{tnHySK5?KgA5; N{aiئ鸾'aw]>h:76%A V3?ͬx>qAXgEPFxԁbIK:Sؿ] 0`gjo'JcV,}v2s%1̔v0Uͮf<Zl*mEMYΡG\f˭RN\am#svN'˽uX{c9}k'7 LiFEu#>GފEYfHROmӉwʺ\:+\!SuFng8䶐)hھ_/s`uoƿj>#telxɈvĭrDXO]_.cV
+ "rBL 8dK=\IzœI+`[-rw0?f\ Ʉn#(~^0C`ӿt:8[J81zզ
+ߓ`SÏPLE +wxU]Rްs1:N<^QRIrU[~Xu5m
+N{A)1b;<_2us{Sc !w5_.n+;ƗײUwGW*=^=dS_J;Zz9!ZPz!Al[[(/7@=>3UVwZzoBA(F0pm۴L]~
+`-5}
+ڬGSrc1 <nVj-Ғ>?sy& qZ
+eIlH5OgĽ\_"INvZ(.bhMK MtKhvϽހ^z{E/N;Y
+^յ6UߵNO[oyT~"%(!{ïh{> Aw7pg18ő,pIVb䫧cY7j(鸾ÝO|z^Vvy}ФZ pfmb+ 
+=Ӵ#&5wWTXW龫>sk|agb[p~o' nQ;R}a9 N>iZ=WK"65odp*v5jcg/{r~Njqʃyo79?-z!L|0ے= ûOkr0}>Mؗ>?;l:t|=t@–<~Ly|rS`>c>(S{\`:o-?ʉv]9s=^ gv2(3ǞV͵嚾m?0mNO]/5=#n.7.6}~Lqdg&*/T YFW?,wR?wU Xt6ߕ
+gʘ㛍q-ry^ OG_>:aB{tT'g?)Py@tv&yoP8^|eMSMb˳-;4_=ܤzϟr
+~`] U]JEUD*"PѕZ{XǖP~&mޅ"ɵ9G[rky\Ư`QQj/WL~DVS/22/+0Nx$#tZ^< k^+ԓp{RޏJ)Dr{{w.*RwiOg`0-Web 1Ǣv^BبmP`-h^:EbZ[Үa P&ݵ4Q3:FYfDͱh8& ']/,70S"\FU
+-4+v%ܬMaF) K?C/qSȊ]ТUds
+(7țNcJjlh85B%
+U,2(E\g-){{;ͨH"ÎQ9 9?ݘ I,7ꁙs\51X:'^mEݭ7: ibphz"K(*dnE{ĥ.1LɪPsycT'pcRdû-I"4)U$&T]Rr@7[6P6iI$ZR^#9^x0
+!V1e O!##Od7ϒ3X|2KQ "-Y7 IQ`;,YJU
+I EAڬeJ$aNd;Wob 
+TrHpĥ(v1e҆f;.! ; dSS``%fH@ \ m;&SJ)lXAi q)>D)%. %org51_ΗȰb[\p
+ZVSr
+C]MsfHb=}+-Xr8/$ai=k)<!2nZ^t߼}.=W\)PԠo]`\jRI弒!o%6$ɗLiꀒ6Vg.qAM>s1Se\b"h:Lݔ5[M#<GĘJ(L@h>Jsmr}a{NcKuj?`);+5WeLIyfHxWTO#j#$܆}ƊCq~^tT<@m?՜bQXۛ"t);RXq"~I4nj C
+"}؏÷b>t\$>`{C.aQ4BL(͈KZ6E췽~&ۼ${Jk
+;&"7leLK? LY6tet d=XH0jE5eExJq*ߴ5G$2YUaO@I/cZpin=N΀nPAG@qe_ŭVJ_5N,j/01M<a;ɦd4bp=i2!:ƹRoĐCAhoj )+hXSŞȆykIu,E9ndrRT52yNLiPBïn2_.\QV[-Qz0Mk{(ZdRI#"{K;ɾ)P*,eXNx+O!u0CƊԡ(y:L\!x"ga_|ъXʜ )Л<TA;/#('ܦ@(D]K 4hWb7\{5S1"E K[#T±v8B}q_
'
-y,'B(뇭)p"R"&\iT8aDg8VVr(8KR#8G[8%璽Ui9)NXhF')lStx,.`2t
-˳+bL(bMܦ"QR.z9ѥt-%Nn<[ZHi[Jv22FpI {FJ=9$NMs.cǀWtWke!eTRÝ&  "ܢ<9F cYet_ZS2X㗔+ s9 +"%8bm"FsIp0vRH(DtS:6iI0=do<QS"E
-K [#ܨ"}>YA%
-PZ:QALĐ*<Xcp"R#&\iT8aHg3T[*
->ܛ|~)%آ:R`2zLFseM),e4l
-;xڞ"@04X==))F(ҮG)RXp!F-(M Bppw҉G<^OQ- H!PFӣvr걨E6KBFJ?9A0? 羂_G Dvs~jŔ̐ Y4u*X+kJ4Zײ4쵿`.l])O[tEYT8 h]K X 7QI~7k-hEo)FI ܮԊ =ʨϵ2:|)xpp_GAdBO*>6zU5%vts {@ZyBG6 :l =U |
-?_3XQRB1kaYQØxev}A>{wO:ATӱ=Q=;Ğ!>كG'}|O<n
-7Mr8ZܙlI{ztKwλ:Plm+ֿW
-o4BoP|doOF?|! i9Cf6 T9<y4s~*.)3[ul$5{m6=o$\:oN lnyP] ӾxӮN4큉gx{^5k(i A
- ܶw1[-Tp2M)׃vIr 9>ws 3@c7+2jh:FL:?KWgꚲ7s\n@mΙLq6cOGgqm߇x3gxx{lzpK>s:BXx[<3D@\2'71F|}!^?c흾`:r`J,f8J)^Dɩ]SOdy>"Byuc':J6lDj%uTN#pzz;N;LqN^wzIw=&-X$^;v{ss<N) pck&<{_K{{snɏ?ioe=6g<GIs=mY~f<<r_>}"^k<yӋ3УKævPdw}rCflN.]뻧\uW6L?f/T@n┦غm:N7L1EX<vȫ<̶)TO{J<
+y,'B(ꇭ)p"R"&\q*ph3g++DZPv섥k)CP-s*4l',e4lS FJ?9!$9˰K":,@T8:Yl
+>'+JXa)ak0R$2љѓ#JB7'I”t}rK ) yW[Zcp"RC.TpdѳJDAP$<RJ0vLxE
+|uPR`^QfK%E<)k"Q)'(0A΂,E%=$;~Ii8MB@9;c"R#&bq*HlN*EkBB ՠ3Х%ÄTRăhDeN),e0lSE
+&J#|6$JAp?۵t4' !o9i
+>ܛ|~)%U)Oa=x|L&v#ѹD2Fɧ#=9$RSZ:Qx^ ~)XA%ފk J"U !)ql
+FQk)p1L! .־͔֞#]}71D2F٩c?9:ATZ:q8 =])$hZԎ_.UHR#&bq*HlNØ@2Kx+?ZamuT@l7V\]L* #!B.ZRkeMy-K^ l̦hNF|'
++ʢaBZJ`lJB 7Yn=u6D%%8lN0_ ;%zQ!ke R:Dᾎ:%ɄfU|mkkJ$h#4Hx@ZyBG6 کl =U |
+u>Ql1cE%%4lN_ Ȋ4wK(L= 7 }ߋn)>~zp(JWGꝎr&ɞ;?c4}JvsWPîdSMf
endstream
endobj
-591 0 obj
-<< /Type /Page /Contents 592 0 R /Resources 590 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 548 0 R /Annots 595 0 R >>
+599 0 obj
+<< /Type /Page /Contents 600 0 R /Resources 598 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 550 0 R /Annots 603 0 R >>
endobj
-595 0 obj
-[ 585 0 R 586 0 R 587 0 R 588 0 R 589 0 R ]
+603 0 obj
+[ 593 0 R 594 0 R 595 0 R 596 0 R 597 0 R ]
endobj
-585 0 obj
+593 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 425.532 553.81 437.487 565.765 ]/A << /S /GoTo /D (subsubsection.5.3.5) >> >>
endobj
-586 0 obj
+594 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 378.344 499.119 390.299 511.074 ]/A << /S /GoTo /D (section.8) >> >>
endobj
-587 0 obj
+595 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 198.474 435.908 210.429 447.864 ]/A << /S /GoTo /D (subsection.12.2) >> >>
endobj
-588 0 obj
+596 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 458.926 88.775 469.383 100.232 ]/A << /S /GoTo /D (subsection.17.2) >> >>
endobj
-589 0 obj
+597 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 328.62 69.846 339.076 81.303 ]/A << /S /GoTo /D (subsection.10.5) >> >>
endobj
-593 0 obj
-<< /D [ 591 0 R /XYZ 78.37 808.885 null ] >>
+601 0 obj
+<< /D [ 599 0 R /XYZ 78.37 808.885 null ] >>
endobj
-133 0 obj
-<< /D [ 591 0 R /XYZ 79.37 408.994 null ] >>
+137 0 obj
+<< /D [ 599 0 R /XYZ 79.37 408.994 null ] >>
endobj
-590 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 380 0 R /F29 371 0 R /F23 375 0 R /F51 376 0 R /F57 381 0 R /F15 377 0 R /F55 379 0 R /F69 398 0 R /F58 382 0 R /F52 372 0 R /F40 387 0 R /F59 389 0 R /F46 388 0 R /F75 594 0 R >> /ProcSet [ /PDF /Text ] >>
+598 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 384 0 R /F29 375 0 R /F23 379 0 R /F51 380 0 R /F57 385 0 R /F15 381 0 R /F55 383 0 R /F69 402 0 R /F58 386 0 R /F52 376 0 R /F40 391 0 R /F59 393 0 R /F46 392 0 R /F75 602 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-599 0 obj
-<< /Filter /FlateDecode /Length 10103 >>
+607 0 obj
+<< /Filter /FlateDecode /Length 10105 >>
stream
x]M$WQ:t:MFNۣvXݼ>͆׻6'_0I
;쑡/Ft_br?SH&YɤJBR KHՐ;RJV:p!3 dZ-f.a%AHS&".@Dk8vbJ
@@ -1993,54 +2049,60 @@ $znTrSɑPuGG58Ujnu&<?R9hZ#;j5'"<E q7'D/$
|4IHe8.'Ɵ/hcY+|^^~S"@v5ulGj| stz5y׋uO)/o~IRw-.{{Y=K~)kqyXy -q2`7˽ @m0P~P%R%*dgH\ۧ
<p1U6iN ב(#6w(Ra'. ]C5+CuӒ}
WAXcgֿT¯a맙(.A>={,8Eܽn$[SZG>5KN穕@ =<,7|yDʠ FS%,:9nChA@0R4J=k뽯_u;9&<L|R
-{
-[W>aХZGh
-zcΝ]A>is,{r<bKZ9/biѝ, zRYԧx;#/mqlI8gX6cw;
-3{-kRJb7a\Lbcmy_[oٻ[c.l R.]{gAgSvam |ok_`5_Ieļݍ{Uz(_/Cn(+uKUpN'*D}K
-.'*DohK}i.>elyܸu>SڀvքWv>sC9ݾKmӮKO89z'7ɮ4DxhO j-1 7QI&mEH.TK;4_ۥXsX+,zbbvx戈\o.ޥ\-bŹQEA@E(Rq1w;
-2KչXtj VMDElJkP΁Z ^MgB%,lu쓫TK 2skWPa!zZs,b1T5-]W1JCA9`(ְwNWXŮxTQP9a!;JLݜ֨ߡ]DEd9&b)WwUWXӮxTQP9iY;-D:~v@#HM@8:fc,oWַkRb;RUů&UE8HF&z]u(* 9}+e/ lF&TUP(k'r=J=;.EayB>LCBݑlnyKb
-$cdbJq.p`[u0c0b4z4z4z4z4z4z4z4z4"@}Ayx[-bx@Q9iҖU5N+d
-5C
-5C-:_uu$9?H2ɩ2RIx2!fCR4.T %
- ۵44dECG[RAEr4>T ܄{%
-$V"׺<L4(bD*PԚȋj
-YH|( ,B>̫*%C7Ud3r@E; heēE`0ќRA,"C{;ӛ ޫK8o'}¨^;&UT0A4LUU8bq{~G1"[si$
-Qmϥ  nO ;TWheJJT{ITU#w!?vLf
-pc$R
- 5@D̀?v<
-&5
-G,po:Bcw
-]^4k
-l2ОJ!1$'*
-&v|mZUA}{Ȼ bw.stK|`82_ЅV`.unw ^`Jd5uҜv{n튜H' .8[RAEZ.y?}<}~@-SA&c?Cy]qz<ޗɔ\#
- (tɿ%\Yk] nj-_u[ #ۿ|DOҷ:vS5Ef~=
-{/vjU>ěX}3wP[mcX\1vjDXN:/
-VcQ
+{
+yD)v!|p1n+sT0\eexi
+l
+-?ݱ".L]j#ԾV([MPB8kN44q93"ro~;>m0g>1l3чO8>ɗ9Dn*>*0
+ϖ`tIIWli(l6[PϸjwǼo=DU;7Ы]MX{}sml=wXM= 4>vBUZ1. 9~^G=91-Z-y ϗˑ2[5.إxtOcJ{mG:^_o.9vqulC\ u3>eY@s5Mjz{yb߹2iYgeas_7N7r7fz)ΥtWťŕr_,~sg⹚DŔx_;n .%ӳw9k_k/ƨ\~~ݷ^կ៵ZdK ^~~mj(־6W;gkg/47͈ym~7!%fQ^҇PV NT`>Q%L\OTp>S%z5'.64n\|ʊmqk/}k.40 l/}k<as}^ۓ]tq49QsO]9v;1hЪ@{ِ[b^c;5oM*ڪh;].PwhDoKٱV(9V(~YDCC5H\K)ZĒsţŹHQʵbN Px.`s;;zKA] P.x@Q9i J\"sqe ~,!g)3WX(TQ9IE:
+{!bs:Kx( 뎙#Rmri:;sDR֧P+ٔǡDC1΄bjY
+'!(UE!6 AulEKP`S3Cc6H=XJ Ucj
+$ZR8cZ.Nu ;5:sP-R-bR]񨢠Vs"Jv9-RC1.21sLP R.iR]񨢠Vs Һv=ZG u :PG܁qtX߮b-ppw_M qMjz
+5PTUAr3Vr=^\898 }Md2&QּOdzt \zwU]41
+ tYs# H#4H$PHt BŔl]tfa87b:LLLLLLLLLE:Sj.ZD]"s(,-VkzWL%:BOwPwLyh]]b|#xoQhQ{P.HR/*AL0!@|K,Vtkf ^YۂC@vn
+5C
+5C)
+NOSmAs,5'RxEZ4:ڄP(Lycҹ!)?<]V.#᪊Vdx2QԈT5,nn$>UjnV{t?UN I(s8(dB3S[d4Փ80geCVuh\؃GkJn6
+)nqXUnMdkYH|( v,JC$4\k+ ii0b%GF fuh|A -7K
+ϥOa3ĄOEV#mD2R#TQ@Zm!X}D=tWcUJ\o$&g倊w/ 6k'KJ`9XY/&FE"v7#W?2 #pOQvML9R`R
+]}$ipb DҎI^
+(5@
+G,p-Bd'.
+(5@
+G,p2FB&TȈͯ& Ĩ^TA)E*@jPq"Ro5&d.x#C.5ZD0RF Hd0`pB=Dί&Ĩ^^I)I*LjP% SUXt ;si$
+
+v4Ap{~2_
+i@a"^%DRH0UUЈFd`CK;"~
+nu iPބyz72ro Υ}@Uۋ42I *t=a;[$[{nu̴=6=ήɐ}WImmYeY"_j/u=;nfVۻN:ehU~;\ejM֞E(U,w^aZ1M=ȚjY/;6vM]dm)ùoc⾍Dk m53Mڴrԃw\n]ltpeh ]jxvC{@ǽ܍<[{u/k nϭ]!'_9H2HS%qheJ4[<}t37^<2ur:y@ߵtv.5+k[_嫎c+a| _C_g[׮4vr:o]NY
+1v݇xkW[{F:tkV~l:Fbn^m+Iez@zJh7ygi$'nnt_߻crc+a?<x=V&v{)}^;ۚbO$mO7jszn--Ѻ^KXa:~?6|<XL6_8V{j5Qn{rr*]YMS[CXWvU>Fd51O#ڵ8LףÞkk1P9/0uS-qqF3[`79ŻyFv7>B;^&s'g|7o4͖1u4k$go ܳvNs+.@|б7m>W-(mGCn@yl^8rUh8@N|Μe>nEqCVޮ1V5:wo<Ot3:ƄX˼XDG颙.lFy&fo澷lcgovhO,~ Ӥnۘ[X[j3FI@ؿ
endstream
endobj
-598 0 obj
-<< /Type /Page /Contents 599 0 R /Resources 597 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 548 0 R /Annots 601 0 R >>
+606 0 obj
+<< /Type /Page /Contents 607 0 R /Resources 605 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 550 0 R /Annots 609 0 R >>
endobj
-601 0 obj
-[ 596 0 R ]
+609 0 obj
+[ 604 0 R ]
endobj
-596 0 obj
+604 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 207.697 90.241 218.154 101.698 ]/A << /S /GoTo /D (section.8) >> >>
endobj
-600 0 obj
-<< /D [ 598 0 R /XYZ 78.37 808.885 null ] >>
+608 0 obj
+<< /D [ 606 0 R /XYZ 78.37 808.885 null ] >>
endobj
-137 0 obj
-<< /D [ 598 0 R /XYZ 79.37 276.233 null ] >>
+141 0 obj
+<< /D [ 606 0 R /XYZ 79.37 276.233 null ] >>
endobj
-597 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 380 0 R /F29 371 0 R /F20 378 0 R /F15 377 0 R /F55 379 0 R /F58 382 0 R /F69 398 0 R /F23 375 0 R /F40 387 0 R /F46 388 0 R /F59 389 0 R >> /ProcSet [ /PDF /Text ] >>
+605 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 384 0 R /F29 375 0 R /F20 382 0 R /F15 381 0 R /F55 383 0 R /F58 386 0 R /F69 402 0 R /F23 379 0 R /F40 391 0 R /F46 392 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-604 0 obj
-<< /Filter /FlateDecode /Length 8678 >>
-stream
-x]˒嶑+(DOtԎ&<~i"|d@^խ <@$@\ 7T.uɥpXp2{u]IO??gx[2&[??vn.%}jmؗ309jØcr}^3]..10yt^R'Oip^[|+<1ԜC</J.C "[ KqiU'}gc}iû »~i]C:tw@ֻ)i\њFqM\N|?+ڤ%H#}|xr1o=_^ZOq/?8̦}=hm >g=3G3?\Cf9-[GNp;)DVlڏ}awG[8]q tM:ˆ7ڵ|^svbC9 V0bW ,lۭsHaa OX8#ZXvzZ'Pi(]Ó} \;_>-ޑ'&'Q:];bOV;a/L܇'KtYF+uf|sq_ڇNc7H-\vS;H,.ޞr>OwOAR,)}>)S*U;LS~PuIήˏ?} eEW(|oHYjTN\q>]K #q<Hcx'^dj&o-K
-4|(6=?ذc'#~
+612 0 obj
+<< /Filter /FlateDecode /Length 8676 >>
+stream
+x]˒ݸ+R^cBUϪýx4^y>2  y/UI]TYDC Y.7?7ӥ.5.?'s\/9%ˏ/g78gL~:٘
+d7r kI[m'%ٺl2MZ?ʻ'S>Ac)#z4=ics[q}` ѽאY8E9rđ-c
+Qۢc}w}NW]{ǹzx{ #v-'ÜP17K1vRX`X?S(y/֧޸ z.C
+k{.8OwocNN6{|4S'NZzS 
+]:D,#:L3>9͸ OCvgO;7ٝr`oO9N )Ŕ>p)K)?*Ǻ$gWo~H`X
+7{yEjR<ŧr @IO/-PcO2#%&1{wx铩 !.f,)`=>?{U]bw%G4} /Ls HwcZ/w_O3~JKr7~(o'y
ɶ:qq|! :N6:'\
G`XxnȠT
@3m3Yan\aH4UdU8MLqkGBn3S
@@ -2052,50 +2114,46 @@ x]˒嶑+(DOtԎ&<~i"|d@^խ <@$@\ 7
lm'X+;+ }HR8enp$cv57v0t oGQDsaoTS6oGpM
'فNOD۠%rz6
' VzY2r?0x&SÓ\`bQJ(5)<&Ǥvt *=#U8?^v['Zh}tMTe!2QͅU" E5?a(8l(c%K ]WX *
-UǼ#)d;挠Gʽ(2iHk#cU:#aM軏We>#9( $&u+툺GnXyGCh 1DU+fHIH~C_lBKoM8ao}h)qlRD:GD]NJlLMGH31;PяmU k:,krvc >zWKwE)]"l
-L4[tmR/
-'݁NP%͗eИ%C]L5qj`B~=Mj[un݁NP D5
-v%pJ8w}`1IR-9SMJVhq8qq~6%ŗ¢hsFAnկP[fC~KеIV_ȭ5;phD@Q.8Wɖtl%Rʈ')RIa- /vxbmnױI*&'&nw|qڱ&$kR`ll$Jx`m%Ǥ4]"Nfʢ!PZ֛đH TbFP(CJ*eq@ EMe ]GqBpUvQ'; nK&Fg˺Yn1CѲɧn͸jpaV)٠R&E[@'( Cm=
-/Vb#R8,K̒&hARh[IM
-ÉT$MÕjI&C"rl%bDgtf_ 8, xm R&%bpőaH ^GQDJn^ӧg)U30cX^~ֱIV45;iBG9EɺrJU1˸)L &AXC
-ALJVgq8Qqq܋G!6xI("bki+PPs]+}΍:(nȨk-
-l>[IE0bńqh55=lRDR赴3Ѕ; ۞8 PI֓REq=-P2,,DaqZ&59a! so~KQ#l?'fWr2cB`t563y:+w*Fi5ҳR860jcОƧȝ΂˃C՛;j&f;rEɻi#u)+:_>NTRÕ$ws57]b:!T}@,t\rԧYUn+#q5vUK>4񱷷nA>ՇZ;[yތk[#w礶]etzXr
-7qKThY>H>6 Yx}ITk{\a 񩭕i-|sd`
-<J=ܼF͆ło^a92Αwo<(v諨L:țv> 1D3`
-oYg7Pˆ(&zݭm"]uiG;y8wOk&kpӾuY?&ǽ
-а{j΀Iy)swFG8sdC2z+Sq
-
-֒G e 3ߐG2wmd18_a{%bÞ
-+hbW^yq~X%?ӹ%;VJ}~/79ycnppݘMiկ+j7>&pb#b-mpR^771_u WǽYJk );{+eӋj
-,#+zUmv({$dg;d5{p}W2Lo
-8ZjTĢ `PZĭ.&D
-W"l1p(-j6(/RH3BZU+r#C
-P8c+ū6$YdJ6(-%Ҍ`
-Z,B JK(u4#$:3T_0%y
-NߨeW{=95EAFA(8Ai1A㖚xd(lʆ2R[
-M A #0 \pNFyK-_}R7W:>ܨfY3lV^-άNS{$:cWbծ$R[ze+@N{HgJu cq`
-m
-pOGWzշ.Ձ~tuWt{R^ab|zU l*7Z4YV9~ -F0D\?RmE' AgiWO\H{% f(jm~~w
-D6kvd" i-b&&
-I=@i"8'9Ќ3~vզx`#Jku`<ƒb)Śe@&ɞBjm n-qjG3^PH%obN B9I57z%i"\MP$AI dP^FK !!
--BZ4y׺-bPS!l=E@%n-s 4`#$ydX0z`1C* `W^rUH,L8{=%Z:ЀU`v!Ҙl>~i&SL% -6(X
-K(w 5!$.
+UǼ#)d;挠Gʽ(2iHk#cU:#aMWe>#9( $&u+툺GnXyGCh 1DU+PC+>ߑ؄筿ߚ4qcKIıiHu9#d+V397-&"?@E?%BT7x `+GvɭY5/]-gUF0w-\bͺ/uK?5RJ;:ң=߅E9
+1mRU+z8spH($ QP+᭄Vh%AKOBnq͙|ulR/DÉ_ t -)E7
+Be%8p]~2_2vxMjZEnفNOD۠%rvJc+ɐ2TF?I2L
+kEMxYKXksuMJVQ5q85qԎ7%Yge#!TVh/f>&Rq2[ W | &@m3
+/@VR!,b0%,j*K4ܷ@:ؤDMl;8Aap^5)08[Ͳm%<pM>
+"NUr>m%<ư(L.
+'فNOu:ڄ(JVgEY_L`b0 j W j/eRj/>É^82 Kr/Fa[ӼO[ 膚삝p_kX\tn֑EqCF-]k0790ùiǎ@m3
+Ҽtc+TeŒ+:r5Bet &W:2)1[EDr8NP%9s]GО3r<LO=2*BQN-X D$a5kU{w$z\ΚޔŹ Hf@.hMU@
+27̨iM/8Lu&~;Btd#8aVa]zbVq%w+C>M F[lJ;cR9z^kTv]#=+c6o|,<8T,vi"mF#,W鞶=RRBc%YJ*5\I"\q7Wp% xIՇKXB)G}Uu`!JB0Wcj\}{{X}E(1>u?z7
+X}NjUKW 7][~B_3n
+-G>
+>vO_ZO i֟Ӻ&_e|Pk/믙
+>Ov}p=G
+;Ao# f.8dSHBw1nU((:((:(1qK !
+1H pŐA9XJ* 2DE JK(u4#$:
+ֶu/n. \Pȍi*8'H3<Z1++ظw:0TX%}1i/ +[I!YdJR!QjHĸT
+᮴,!뱂+sS*Cn6( 4QiGK~%{v7>)Eqx̦.[վS3S*+U#X>ɢ֢^d
+Pbҙc&w?XrB,ugh#0qPbYR,V}>_YrKmnƿXc {T]wjfU7-(K7E_]⽰xu'cd¡Τ| ݮ rUR_:[5-*SVW]UO7g: xU+9zժ"WWM
+6@_fo-KMy,
+?o#~]"emli}"Aw Y3ִī'.Fp3~b6J?@?Ǎ;"~5Y;2`״naȇSd
+)VSB,B$H 4{qhFGDp?jS<qqɵ:D\S
+$m=Gb|ԞfN-oh@G*^0;i6Ju4Y}N)&bjRJ,
+?oO쁢bGKI>^se^bY[}
+XR
endstream
endobj
-603 0 obj
-<< /Type /Page /Contents 604 0 R /Resources 602 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 548 0 R >>
+611 0 obj
+<< /Type /Page /Contents 612 0 R /Resources 610 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 550 0 R >>
endobj
-605 0 obj
-<< /D [ 603 0 R /XYZ 78.37 808.885 null ] >>
+613 0 obj
+<< /D [ 611 0 R /XYZ 78.37 808.885 null ] >>
endobj
-141 0 obj
-<< /D [ 603 0 R /XYZ 79.37 460.075 null ] >>
+145 0 obj
+<< /D [ 611 0 R /XYZ 79.37 460.075 null ] >>
endobj
-602 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 380 0 R /F23 375 0 R /F20 378 0 R /F29 371 0 R /F15 377 0 R /F55 379 0 R /F69 398 0 R /F57 381 0 R /F58 382 0 R /F40 387 0 R /F46 388 0 R /F59 389 0 R >> /ProcSet [ /PDF /Text ] >>
+610 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 384 0 R /F23 379 0 R /F20 382 0 R /F29 375 0 R /F15 381 0 R /F55 383 0 R /F69 402 0 R /F57 385 0 R /F58 386 0 R /F40 391 0 R /F46 392 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-609 0 obj
-<< /Filter /FlateDecode /Length 22480 >>
+617 0 obj
+<< /Filter /FlateDecode /Length 22481 >>
stream
xݽO$%xO;O
R)ѭBl5O׌=GDFJF]/I:<>ߟ? 㼝5[jQ_~##|Ǒq|οП?_]xae2ğ+7aBky1:P9;sɓs+/8IӗTˏ%eʑaӳXNrHuD-^)z=I~ #sߏ2kYg:v/:v_BU_U<)o~k0tH?ڎFMI+._*(+*:>RɹzN.)yu;PhjT+X^FkԆ?Z?clL񷏭R;p|yo{qKga\u
@@ -2153,366 +2211,356 @@ ifnIcQL.M̢¥ޗ#<AEeS]Cί ZH0G uc4 LBx
m0oNyf.rM$
UY\f6kt7:#tl= Չ4{3RY.*Ղgo
~c=߸SqQǿ_!+LRg#2^??ZϚ"_?*}gb*qY&+(4 w VUԵ֎WQ
-P wV&kYª~pPZ{Gg/nc6X^Rs޺:/'7]ՊVV̻(=k&Wۄg"yW*;|SEc|5΁kWw8ǡ)J'"w8̧to@>'Wa ~l͕~<0PnQx}V/r9kPtKyN '閎r|VF)+?%>^@m~Vy/[ڛg>1dp,bCOl(<w>L*ifa_' ] :,]OhJ~ޭ#2~=z ؗo?EF zI;$r?>ݵ&}vk]g^ɜz5^1Sp<y>3qkT-xߋor87y\Fj}v(_j7/ 3&'gm]8ixo߉Y>ߝsxٍBE[^v7墮&[2 ࿕o?2)w7ϵIJy0mӻ#EHc512lS!~7Pk=Z,6ۭAeTJ>@y-|Kt@L
-&SC*%i|OAԉ(ɿ<9FerPxpJ>M 6C5
-N.|k|5oshsosƵJ ;Q8wD{v숼ngtPwk7NhPZ3Hku y'C8n9hSk>TL9~Y!',(RDV"ق#'ӎlBt쓉k>Lpu){4=9|Y+dv%Ō
-J 9}^v/Xk֞~&x|ݛ7i
-y|+ cN (gI 'z/'ߏyVָ>˗o}-/y.<8qV>~ƼoC~~{>K'ZW!<ܝ '1v;LGCxm|#xiiHXkCխ>Bc契F QiZ&nh)KYIC,ީ7|xF?bF׏IIcǗ&][G:#v~r{W۟w٥B|Ox>9E޽E-*><P?'7+sGa4k5lB)k5 uix{1E嫾˸js{k?(YIW+&~E&~ ~km0_/ vMOM0^˾yA|シSsC3V^ߋ;l$kݵ[WW˹x_;ƇG ؽ.bsWgXnGnOx׉ׅ_ʍs<N2-u]nǿїpj?ƝSsyj/4PO^{K3V!^xCTCA6fZES>d ;+xgqAvk<2^=_cnCH핗+B8@TgLhW GK$BR7]}T:{;~=i&Jch݈īwĮRrX)X\̋'wyrz8#NO*A6e!<1BE E̍h[qOvLMX-L)nRߤ
--#U(KoQ*A6M{ZhRF\;d&æHcdB2APHlW[r_>/oVq)U?
-mR1\UEWHB3aE^ŘGQ!Dza+7^chq؛2TaX#^ܹkcyx2TO풦`!*ʍ0){3)JirXb>]y,4
-E%4~#_V[_r5>m<MͲuy'oKa]uuLd[LKIifH6e=~ULT8dxu-JrNѱ-HJufp#:P6^câL"Uܗ_xs~U+ŖQl{K*)4K|ptz{z-W gř!ۥ^Nn7R30+~tyc0pE6ԭ|B-$WaU"Az,LcGc Xo9bI.ۃ nqGvPMsS+Z0E!(^V[cMjr]EDkcڏrP+|tB누#
-@`h.U d5SЅ||Wr
-"UbPcukPMԵ}P:[|`@\9AИe?v1K]00.R\a4xV~wE]w
-ʕc:3Zi͐gO! M!)v]hinsӛVnElQ``
-IZEkᏱѭ».X$-]di6&(hwid:N3s2!#5ɠ]oqS@N"
-, EwC#QcL8r*yG|y+=涅RwQ6^C0q?l>g꒦Fud%ҪXz}x9bX>BvA)Ȕ]hzwՂr# Hϥ"S
-R`3wCEQ^O(J,Y wͣQƖy:91rs遜xO ?3*Cf fĚKN}P֤J$qA=? sԵ3(#enX3dG0zR+!ϹC'x/PfV4/Ϧ${MG%
-k|`К9rF:feByfnT͉.dM"4 4EmtJQmy6kS=pLyM+К 8<Iܱ4J-lcz/a Y L(is S-<ˆ1zMM@kJ#5,֞rC:u9'U3J7bVzʄ"VJs!-7F]Z ^2uLbК86;oMh;USysUo/lj
-] bt^aP1`׸$oIkw`;F
-˘ a@njS F8FfrcR5 )j)Qf"-j^ @js[`OU4tYjp<4Jl\=]*U@ӡlb01Eg瀩6{SǛH[ODКkȅ;:Bfj)9W/LXBddq(d]%H_^sV2['VQ'VXL(К}8"Ӹ49FŴq9tW`$aZe,]T]c(F%6^璪lh98S uDτ4OWh'1@`"n>q
-Sͯ>f]:Jq1TrKU]Z'QŀCP$x(9Z䭲7<Sy.gQ(Ir7M FKc@yy)x.1gnaJHgZ]wdjN%k茥gq*.jfR~}·9aKOb連Co55fT獦K]ZH ~!-/19+`!&FLXvh*v]^y7ۑ M;M٩Uq%RhA1(r= .Fw+OsFc>(>FEOva[xrMۣ<1U} 8St
-=3ZG@atb1#xV,!;
-<ƛ"_BXWZB!3PUctEs,A *mk&T
-@U1*j"oӈ}@BR:͚+.%L!FQtXuHv^F4k%Ru&l۪oQ
-5$!NU $TS9%'FBʘc( s( 3
-@Sc|W60M` x4*`;LRt$N"z IQStE,C!Fwl cndf4e>tQϲDp+\2Gi*J1
- M 45wnc dVҞ"Wwc6^a(/V( 6]Fp҄%.ma9sQ7ks|t:PГ?e4 |2؄ʷ'KSAnc~3x⭸kq8Aͧe\r
-!b(U 6Y&J*چ"*HݸwH,{
-]>4ciν`%}I?U7nQ<kE!!ӗ:]UED
+P wV&kYª~pPZ{Gg/nc6X^Rs޺:/'7]ՊVV̻(=k&Wۄg"yW*;|SEc|5΁k^w[\Q}"t"B~|J}_|r\3 3) !yg9"׺ӸF?N < OGgYqa0=qnhgeob97OOWs-w9O}|û3|y'Cl|mEF|%< + ]9;:v',OhM~gް#2~{ ؝otAQv :I$u?ݵ&ݮvkig^ɜ:5^2Sp<y>3qkTMxߋot8w pQn^CPg{NHۺ0}3^ҍ?y|(;vCY텶</E]M|e$+@<xe~3So<8m`8w $jbd, C@Kox
+/|k!5ouhso uƵJ ;8wD{v숼ngtPwk7NhRZ3Hku y3C8n9hSk>T9~Y"',(RSDVg"ق#'ӎlBt3퓉k>Lpu){4=9|Ydv%Ť/ J 9}ݴw/£Xk֞~2x|ݛ7i
+oz|1 cN (gI '}/ߏyVָ>˗o}07/y.<8qV>~Ƽos~~gFn>N'Z!<ܝk'1v;LGCxy|#xiiHXkCխ>Bc契FkQ׬i.\&h)YIC,ެ|xF?bF׏I-IcǗG&]^G:#v~r{W۟w٥B|Ox>9EE-*><P?v7+sGa4k5lB)k5 uix{1E嫾˸js{k?(YI,&~E&~ ~km0_/ vMOM0^˾yA|シSsCCcV^ߋ;l$kݵ[WW˹
+5VA~
+e -J%ѦiO뗃-Y*(kq6`iL_1BP7Jq*wK%<nr40A-BR7WJS
+jt`=Qcq&SKs.*ĺ0H4l`kl
+︮ERZB 85:I nDk,CR~XZDݒ {xkr;
+/tyO0pIE6fޓoRo}~R
+l8 dԋ1w=֩@j`W`ҋlR-V[e9L]u9x-ZH櫌E8!^=#Y*Ǝr\E54(V`!BxQ|5.‰ǚ
+庆'#0C8V ) GG7U#,v]Af͉Fk h LE:Zy "J}<,> k4pgWu)#+6:fr41˖F:9afa aQ] h%h2+tZ&Қ!kۀ#+CBRVќp7-C X': Je-P٥
+=鹑ǎ"*#ݣYΎRz.Q2K\
+HW0NBμ,r_L
+4ϸ0PELV=ڄl
+w Z'V2^P=1(ؘ/<oܶP6Jfbs(U&ѕ-L]ҴP(nDZ+UVRo/GGHs4(" CQZPxTdJA
+s.yb1ʋr E%kvyA:*2 C126Rv@S5=ag~Fe,q]8̓XD<vA&fV$+.zA6,ݝiDig,sWƚ k>?"#zX %~'Hm :{-`78xy6 ٛl?8*W'&昜\;034@>34] ʓ0sE7jN,v!kaaA.bmCU.̜j;ȳYs@1ckB^ل\O厝<YPj`{ K]*tea@NKP>0j\6Pw??9wkmҿ4eZS4a1)$k9UM50P&\ P 4iɇ}0ZG$-cBܤYιywb~@q'|{9N,WUJ #%yKZc/1¨YV@XL
+^MG7;}z>Z:bBPIƥ1*2}
+53RsF0`d2B<!\{.1Z\'\7gV~K}ݏByc1:m9 .Fw+s FX^݆g%^0z^y,$oL 2#buu(y[셬a$ q讲m ͅ| /QpP<a47T$8Ci Fi
+JQ
+!iKǣQq~,a['Qmw=to{t
endstream
endobj
-608 0 obj
-<< /Type /Page /Contents 609 0 R /Resources 607 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 548 0 R >>
+616 0 obj
+<< /Type /Page /Contents 617 0 R /Resources 615 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 619 0 R >>
endobj
-610 0 obj
-<< /D [ 608 0 R /XYZ 78.37 808.885 null ] >>
+618 0 obj
+<< /D [ 616 0 R /XYZ 78.37 808.885 null ] >>
endobj
-145 0 obj
-<< /D [ 608 0 R /XYZ 79.37 400.5 null ] >>
+149 0 obj
+<< /D [ 616 0 R /XYZ 79.37 400.5 null ] >>
endobj
-607 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 377 0 R /F55 379 0 R /F56 380 0 R /F50 370 0 R /F29 371 0 R /F23 375 0 R /F20 378 0 R /F51 376 0 R /F52 372 0 R /F69 398 0 R /F58 382 0 R /F40 387 0 R /F59 389 0 R >> /ProcSet [ /PDF /Text ] >>
+615 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F55 383 0 R /F56 384 0 R /F50 374 0 R /F29 375 0 R /F23 379 0 R /F20 382 0 R /F51 380 0 R /F52 376 0 R /F69 402 0 R /F58 386 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-616 0 obj
+625 0 obj
<< /Filter /FlateDecode /Length 5489 >>
stream
x=M7w:]0{2`O,
H.'<
-0t ɷe4<!7Ws%$,} qptoB7aesx;;(ux0mm%E't"9`L'N
-иH8IF֛oĐ<|a{S+ GI?tS{cҭN* %voaBJ r5@@UE,$1٩[S$[b3ʃ` 8{Qt<B,NY7Rp%
-H)L͝'-٠<өp=4]# vK
-9{O+fyr'$LJLv2|χ 7ـ :~nYHf֗,@Y\"Gt`rK%#.yr܊"o]Xz*dzUs-~s͆aw}c^>g
-~
- ;(,`0¼ü~u>C89'\\H]}<13XҧFm*A!:ܗXʧJ:pn |FqwmOM}[>YzgZ]a] YjD '.Xyhmia(]cWAB[FBRNv Th A6gʔ¬8aq-@)l@0oIC|(i!LF="
-c@B[R\AAh]d A6y2rհG!NL@PAdPV6H$1KVTf m
-_
- ^ 6>0>bWE|mгX+ `(Llډ€U #
-JbZ-_!BgWAB[
-OR\;s=yk@
-eUd ;Ǵ CXpRu:
-FO 8:8!FiIAL2ކU !az4VfКH,jjԑ 2a -wF|LfW0
-Hǜkp!K&3DX5Hn163'Hk-YU2#+4NMa*B CfT8a)^!D+dl
-ʭ
- JG0vh%Df^ӁpM }F`k#T;y2v"2$HfrBJΌrB!$7Y(A^ET f]4MfȏXU* dg:M cLUehZrf,t u c -qĢ@cєh& X.DZ؂1~y2 oa`%G 4G28β֓ 2@
-+
-aʏ`+ar1'hO2C%a!P՘1 F6.e$}1k`/Yxr=Vwg\Kډ[$}A6
-=қW\XW
-m2\)EFawY)8tXm3-İ_B⤍fE$?d٥"IWpeq5ZE$w<*"UnXm X\)yVo!
-&tƃ"T2ڹV=.jH '.yXCrK֐ZmO5>WCx5$ @֐\7@WC5$&:ι.kH(?/
-{(,(Ң^ fʨ陼Ľ=!1!1o5$o5$o5$o5$o5$o5$o5$o5$o5$o5$o5$o5$o5$o5$o5$o5$5$B+)_SC~N%T$JP.PQV뮝gq% A 'yX|2[@nM~9lwKi
-ێ{|MqkB5#XۆfJw73I~vw(^^,eÁtƽ G<=c:uc\ڿ9+.';ҕу9-8k'_4x/6!wa{IZ)i~VR'`.6\;IуE`$0iDze37:P8-MqV>TiC7NSk
-)7KEZq~Ef>Sa&4<>h
-AWX=O#]p_o ięYe +lgkv-j5i躺g[հQwushPZ|}カ ~GUo|5t[X,(q΢,4*Q*~u=l?h#^GGk9.TQXKjU:}UG :k.z#'EZHHENv=/0hДՃU"kk8;_[?ǎ9m
-]; ߣ~kGwҌ%{نл8݂اg,nVr>ݿ76V
+0t ɷe4<!7Ws%$,} qptoB7aesx;;(ux0mm%E't"9`LHAO*И| '# $qpj(V7߈!y !W0Ƥ[hUJ4K#"R"j%{ bYH"cSH
+$fNpnxXn:J$$^R>h51>2y;7OZAyS{hTG4 ZٗN%*v ڞ#_cm2H~ihÿ`:OS{C5eԚ,s{CR|i@(ˆ.zWݎìkz?GSܕB\Qc >s!^tim
+Dh^/6 J~Cc& @[Q4:X/e\aWFM13\Qƅ/{s$AH[)8'&2dI|pW6P?6YH%he6
+eP~°0Z-/mc$@1w\}^Z.
+ĺP>Uҁtk\3K m#|jz;բ
+J`R H8}pɟCk@/H C!zĠ$
+
+U6
+0vʔrKB[lL bh;WfhLŬ>`
+:@e
+
+Dc%\lL bїÔa5_dD?
+uBxg"A q^r<ꠥ(7[h+TȠ^FϚ%Km-Ҭ`*0ien&H
+Ux) [R(xxm%0M$9f"Ūp N_>0ȣWAI>Z 7r@z*B!pr& eM51#S4^5de
+w
+#H`x
++TXB6 3NA]G ZI%e
+a&aLβF -5<1Ji0@~d BPnD$;+ tmAC@$e*C4DԒ3fK0|g[#̠pH,m#dF3m2v$r0' +ax sN`/<ZH9*eq,4m`YxILHp~PN$0Ån,r~ i+-n @vamI%a!Xd蕷K ujaҍqrr-FsLVHt, 4XQH S~{\ [%= <A{y8*, .p\l0j7v,&Y{“ I,8j_N" `}B |ڦKa˄q
+U'a}Ã'88oA'Y$H xvq<wMOMKfo1m=}֙5Q*nۺ3ebZ-ˍ!dCSs8v.rr2Z⥒P
+\jJWxX GiԝWZB LbWVA޼VmK.J)B5LsJmci!GE$'m7+"E$.XL.HLO,"-Q u-rjaMczcQ0s5ڐε-v>WCxՐ\8i?%w]א?Lmxr!9g
+6\w-z.Ȑmk6\W Q0FR#w4EX<yރ싲'zK!U V621;K uJ\,,x_-pG=<yk Gӫp
+~.JZ=Q %M}y[N 
+F"f+v rbYܯc~X(S6Wi9M)k7SOxV7vjV }FHpxLrE.29 xp8j}M Z: k ۡWxǶggPHO^*Ҋ+2͝39x67)/GLWb_Jy92[H|Em8=H&̚/#MXd<[scnyWmOsG 8S.wx
+:GX͍{/N 8z㫡bymFiseɿVzWpfEj=:]=^qaZWQm?JY3hwYd>(BB:lVO,tS_/|ϟʃAT4BWQȅ_GO7X[Q
+8vԷ͹^]oSyv'\%[8pVft(6>=`qvWӗwAcfJZUĔi_}9B JNEG X;HHܣKƔw/|Ys?
+30ɱrw@ գ776}pp Af|= V9*'])5NXGNN|"WWB 4 R=\XLߧC
+<֢Y3
+~1ǽ2%.iREJ9݃2^;`!%;xH[;PO?"J1ґaݴ&{ Sӛnn7s";o;ܪF 6ȬRrLv=sKw0B.A._vrK?0Nh!}2Kه}ltTՀ|Csҩ+T2)V~,GgqϿ=4|m ~sNJ{
Uݟ`:jO>zV<FT#׀olnKgYTPCq\9,0h5/Gݚ[7Êx웎m`̴g|,6lWAskLٱg_ϰz0oR
-8ǷK뼜CFv^v:LsbJ5
+8ǷK뼜CFv^v:Lsbט0
endstream
endobj
-615 0 obj
-<< /Type /Page /Contents 616 0 R /Resources 614 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 618 0 R /Annots 619 0 R >>
+624 0 obj
+<< /Type /Page /Contents 625 0 R /Resources 623 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 619 0 R /Annots 627 0 R >>
endobj
-619 0 obj
-[ 606 0 R 611 0 R 612 0 R 613 0 R ]
+627 0 obj
+[ 614 0 R 620 0 R 621 0 R 622 0 R ]
endobj
-606 0 obj
+614 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 314.182 725.076 326.138 737.031 ]/A << /S /GoTo /D (subsection.12.1) >> >>
endobj
-611 0 obj
+620 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 246.444 662.311 258.399 674.266 ]/A << /S /GoTo /D (subsection.18.5) >> >>
endobj
-612 0 obj
+621 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 368.723 426.788 380.678 438.743 ]/A << /S /GoTo /D (subsection.12.1) >> >>
endobj
-613 0 obj
+622 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 174.195 98.189 186.15 109.258 ]/A << /S /GoTo /D (section.9) >> >>
endobj
-617 0 obj
-<< /D [ 615 0 R /XYZ 78.37 808.885 null ] >>
-endobj
-149 0 obj
-<< /D [ 615 0 R /XYZ 79.37 771.024 null ] >>
+626 0 obj
+<< /D [ 624 0 R /XYZ 78.37 808.885 null ] >>
endobj
153 0 obj
-<< /D [ 615 0 R /XYZ 79.37 473.533 null ] >>
+<< /D [ 624 0 R /XYZ 79.37 771.024 null ] >>
endobj
-614 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 398 0 R /F15 377 0 R /F56 380 0 R /F55 379 0 R /F57 381 0 R /F29 371 0 R /F20 378 0 R /F52 372 0 R /F58 382 0 R /F65 383 0 R /F23 375 0 R >> /ProcSet [ /PDF /Text ] >>
+157 0 obj
+<< /D [ 624 0 R /XYZ 79.37 473.533 null ] >>
endobj
-624 0 obj
-<< /Filter /FlateDecode /Length 7267 >>
+623 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 402 0 R /F15 381 0 R /F56 384 0 R /F55 383 0 R /F57 385 0 R /F29 375 0 R /F20 382 0 R /F52 376 0 R /F58 386 0 R /F65 387 0 R /F23 379 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+632 0 obj
+<< /Filter /FlateDecode /Length 7271 >>
stream
-x=M%mh1ۀsZxo '
+x=M%mh1 '
Zϴ ԾJPZ巡vY!~d6oDRk$,t^fhQf @ez̴1"Q2˲2:eFoB#})˲j%jϞy>ئE iʨX2V׊ &I(&eT۪{պ
-Hَ}V2_.޼HDz Cfc CvfJBÄx$ORlhDˬ?A9,y5 F`WvCW#k%&]f*[Q.V)/OL}SS/^\xҧl^Uٕ9Nמ7N 7gr,h~bݡ׳U*r{Ev핖ɲd"x]#2՜!v&cڭy@&wZ즙moyU3b[J+ru)<ϫ5y^ |_Za#Ǣ>~3U^zZH*@GD]|}f>и}b_\UM~Je}YضGؑNs1B%umCD7#z6ECSҷi nݟZX"kw\@-i<P`JBPv(
-|Y =SW%~RU)d(Eb;*[o
-?-k&
- x`
+Hَ}V2_.޼HDz l4ahLWSIh@ʜR8h'('%p,njd$RФLEz+*ԡEp<~~*<ū< X4ͳ49:_׫JR 92#g׉=F)&{¡?]}-я];z6aJEnȎ2=Y B{C!~Ca߭{5'dHúɭE'|(حvkP]iya۪y^tUvؖJ\C
+j|`28/bji3AHƱƌeke
+0Q_g,34.eXa;WURnuY_rv\ Pmn w]͈MmB[ִŝ@;,af 1q+л/"u5<4,:x`
,G"MF,0ϟ*+>:~EqLĠYf6P}FäT†9ew]FzƦpW׹|Ĕ>!-pߵD<$Z~^F]]Fs\Oˌ1#{gb&zu $%ngJ<OVY#bc7z -;
oAX^3h!I~r UԂ:n,ꂨu~H[!?!K2z\J)^HUi*9#_0[G$l-j 贁
Tt h/[*3I[.oh\ZGݫ-O}׾hv]qW'}-p`#TTF;%F-xI-JXţ,LYL<7bie+ŗg)TjYzz}+أs{GslJIw/,G1cl 7r;9VJα vu
-;G&cƿx:} OdA|Ki{@GmzHv8ә9ҿ}cKz~׼wԊ/c@|>[sF\
-NaT |aĤ *9Q9G$:a|:AɦcZkT~N RoƗJVn <I o W{mŠU}?v+9\-&X^xb*4gA;&`fp߃v^Fauٯ= Q~ؤ(ZM\f}<sHpoJ}AVg'sp4> uG`bj᭎&
-1=-S>i!
-~R&9A_6ukЁ$C^ _~o?\.{v_ !6?+
->oGơixZ<Ɋw"LN'>E0o"~k~i<AJXH M{MlE%a}8T蓋H}nϾqg|}? }~ %] MEZ6
->oh5Ԋ}NFXN ۑkG9|Dx遝o:h+DZ+8ƓT5<6vuA=vORw@I;I2aySۘ3d*@Jfv?" fKu wz}'S=꧷Nm jask
-[YX:zR2,α:ñ!3Ӷzfsg6gM>^t Dl Rx,JgWrF5UصUaᅵ>@Yhˏ#vlxu]v,M+?xEc1Oe_NU23d/waUkGNRgb%텠O~f`y8:Wаi'*-r&_4ϼ#i:, {Iǵd7L[ q'c4Ȓ^8i*;Jj-V^}X)哰aá> <D5e
-Kls˺jK*eプtƞꚗKY˥7Zjea:oR \lm^Z ϕV:P!&
-#!zm <Hk%0yn#3.'i{6WVkZZ{9׃6[4)A8x'[b )k9aL伱/־{bSS$5)XLqoMNik{߱ŃK9=3D澬a~5ѨA+u 1VQmXY:7+GipN"5逍ߎ5aG@|L\0FDx42.F6+)ੲ-E#acP(N#5逍厎hA4I8aIUZt@ޤ07Tշ J.0ȣ Mo( 0^f{[ɍZYtN7ٛed}w,֤UA03:\[Fh`M;*j`gЖ ݠH-@:XP<a ѕu-Mq3LeC$ǬJX
-.F'Шq]F %sѕ6V{H(7lW9 x<@ѕ޲d [
-[;KL
-:BZX B3aM\F8:}AHY$IHo[)4'h :%a(%uJd19 +qbtr%p^5"*nkʀMzp8f ,(̇% O( Wc>A9r9 m"10}*4y7p-o&!< OzP<yrd1! #qBjTrYpvY<2ist Y$$+Ki&Д0|DIm\H;}AHʹ$IP/s%?π(֕E'NDzPkῆ{XPoky88r:J/;|g?EØ 9h>+HoFxݔ9i5EJL4AEv)en$=oO fB2ꔜY躮Km9b{__ZDGP\U>HE_ıם׳a L#$Ɓny#yے{+e)1iF>YlfJT uU@e!ЗC {k
-j>e<5XzS8dJ8԰ ew;:(CޱѩE;Jդj{=)'kR+WPM('k!WH C
-nW&na]ɭ4%0eyuϘKDrV -gKfKvcNУcd5Զ{ CU7[Kya>e'3Zoby"yo&
-/1;|-t<1SP] N^m 1NW;Wݝ{Z]#ͬu+^
-%|WΌUkS>fcyˬkۮDܨaQTi"X۝Ýt*Ռd~&焃֖&=梴*\B7w"r2 +p^r*h w $M[uPX v
-z]S
+;G&1Oge_x
+hG>S ~%=`6=wA$;tGG>%=?k;OljŗV >-[9#W.xm'JN0eyDbCxށ0H}bR#q0>d1-D* LisDju^7SK%+RT{7ubЪLe{W.Pn/Y1Wy0`^3y AA;sL|#0:WШ~
+Gͻ*H6C%bzj'Yim`!*06X)<sPZw8aF.tQ+o"Fl`u cLQHr};|9))ޔF.( z`Z:w
+a*j\>k͇Zz+ KG^OX?9VGr869|5$|fږz{Zl&~촓Cz Zx7#-JکpٕjQcr{U<vmU0myxa P m}a?iy{SٗS ݲDXZ'd@gők(XI{!hS1yš7_↙>F;*0NN34#mIJˮIW43j+˂åm&-gD^uq-~;4 nB\IvbʶNҬZWVJ$lpqZ!M( N2ɜC$u?Wa6aUaUaaMC9nR\FӻkC˄=T['a :Ǐ6=ru_=pqxb;D] ^>afy2gh89o,_lvxոV:ϖQ7>|cfrfrtxO^|
+b7!5Unb'=6 S @_r)C<TZ$8A'TCZ4UzYm>:g{UM "%ڊ xV*I]ߢkWJ={+fdDcC̟|}Z A}^΢6'sDŽߍvR
+_PZkʚ1,cL&⩦ ]kqs_0ahTZ[ꠕ6B,ƕ 4zj`r 'FtoGǚ\  >&.#"<|XjEnv#ف;Iqр1(cFtrGGM4 $$*C-\:XgP͌RY
+ `e}[ur%Hmрˆ7Y@‰SFK-,:XPͲX;nkت -z4 Ј@04hnPFFA sDfg0JF֊
+{=)';R+PM('k!+HC
+?? |-t<75SP] P^m 1KJ(o%wwV7A3|zׅB 3cIꔧϿC2k(;7jXUv6q' ϠJ5##/99` wb
+D=E)8A;?!ݤ\r8wvK[0sr.xiNzNox^7[^P@
endstream
endobj
-623 0 obj
-<< /Type /Page /Contents 624 0 R /Resources 622 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 618 0 R /Annots 627 0 R >>
+631 0 obj
+<< /Type /Page /Contents 632 0 R /Resources 630 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 619 0 R /Annots 635 0 R >>
endobj
-627 0 obj
-[ 620 0 R 621 0 R ]
+635 0 obj
+[ 628 0 R 629 0 R ]
endobj
-620 0 obj
+628 0 obj
<< /Type /Annot /Border[0 0 1]/H/I/C[0 1 1] /Rect [ 78.374 84.682 416.581 96.139 ]
/Subtype/Link/A<</Type/Action/S/URI/URI(https://tex.stackexchange.com/questions/52848/tikz-line-with-large-dots)>>
>>
endobj
-621 0 obj
+629 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 324.371 75.217 334.828 86.674 ]/A << /S /GoTo /D (subsection.12.1) >> >>
endobj
-625 0 obj
-<< /D [ 623 0 R /XYZ 78.37 808.885 null ] >>
+633 0 obj
+<< /D [ 631 0 R /XYZ 78.37 808.885 null ] >>
endobj
-157 0 obj
-<< /D [ 623 0 R /XYZ 79.37 336.159 null ] >>
+161 0 obj
+<< /D [ 631 0 R /XYZ 79.37 336.159 null ] >>
endobj
-622 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 377 0 R /F56 380 0 R /F20 378 0 R /F23 375 0 R /F58 382 0 R /F67 385 0 R /F77 626 0 R /F57 381 0 R /F55 379 0 R /F29 371 0 R /F69 398 0 R /F21 419 0 R /F40 387 0 R /F59 389 0 R /F66 384 0 R /F50 370 0 R >> /ProcSet [ /PDF /Text ] >>
+630 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F56 384 0 R /F20 382 0 R /F23 379 0 R /F58 386 0 R /F67 389 0 R /F77 634 0 R /F57 385 0 R /F55 383 0 R /F29 375 0 R /F69 402 0 R /F21 423 0 R /F40 391 0 R /F59 393 0 R /F66 388 0 R /F50 374 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-636 0 obj
-<< /Filter /FlateDecode /Length 4962 >>
-stream
-x]I#9nׯб*&澌k^c_*\YvD?
-9{ۋ`V-5r5'Сwy R_BQV;?L]qk9k”˰n?a y\qǾYFDjXySz4:81Q7>/AVb84k?L}*`>C9Ă95\ Ċ؇8NzjO_&Z#~EZ;?<C̛ST:'DdJ} C։H`Fy5"R%[=[5Fm7ڍӒt^@]b2IJ<G`9gh'MA s"
-S)k ֹБ<̋ES2b[0=UQvޡ*rq*7
-e)a}P({.γ>; 9D](jjlt\~ >-'e {H)g3cs#OL+ggu*1G q%rc~
-ڟfœ2z/zMOi' ?=.>>+J#Ŋ:rO[ES#>Z>
-"~QJOqDž5u^/Zi|
-=A' >
-iME $iiTrbCh9DRKVOD U8tW[9\1࣎['J[ܰ0PAD"*"m(.ҼʭZbF_=ze
-9vw$Hc#W wH᯾u_/˃uxXV3^+\Zmh˷G/]%Q 5]2F!newk?O?׷8uFGg~vmN{* =Ơg!h?բeX4 eLLI45P(Ct܁~'yVQǃEY? C%l{qߗ_/x_.WKL,׊,K+]+s*uyc+NNjI O*֛x?l
-VYi4r>ٿ*_r)(MJᘿi GNؽm
-qH&;Ҧt>aFˁlVU"Z^FDO+qi
-KPӤyy&YbLSb抈+~L q}08{cN
-n4q)Ҕtp7Tp9S@4[SL ykezFnM{$M:dN ʮd ´Pj{shGKm l>sUmD)N^k1en|^ԏ8N-hzB+/ F1u5~P?0(x>~lBɮ@ ?M spxXk>a7~Gڳͱ&ӭN&J<5]V?*vvMx24K'`3<Ӣ) A=398ɩݞa]bwe'1gn>+ -n>cueí-nOk԰aʞyй ۴]%u@мS)s-5(ם
-DTҩҁSP;TFqTζNeS8fe8C5#b}yi. XY_J
-e~M{N_yo]_̻gL\9]GxVr^?R
-s
-g#f2d dNlvLN P3gjD~3!1+l翮eW,4UgOآ @^u G;>c?P?̙VX
-ӜDO$YQM"4NHP9%{9Q$5r
-P, D|@m "E !E搢scǓ`⃢S`:":zbb@3!}K X޼f"f&Ldшs
-MPu@#D=3ɾ~f}M$s -FFL4wAp*XRgH&H&I33/E
-VHn{c$fJk5\?nյ][{>-yyW5Q#2{]f.4/j++"ubjp{/Bn˹2ޢFc1ҏrTTpᰐ=\ǿ*`A{ngq^0SU2I |Kc<ںڭwTA']Aao$I4%~PqqҮA:EVku?%<Kmh𺉪q9NJǭnBGT}O|No;1k?a,φ&UfLjvm3RnXF}0d_?I.s͹}pN%yR|xp+.BtҗD}5=˾f#&~eEah m$0./Lϗm7
-{Z7cu{nu
-<`mQNWRq~qá3 \h a3Oxf߮77)"<A gP\ wWQ:5yjQT><fD+~-"مQ*l96ǬGÊt+B',sŻ=(Z3TׂRvef
+644 0 obj
+<< /Filter /FlateDecode /Length 4961 >>
+stream
+x]K[WhiWJlV,l\U^:LW?
+\WJY_H΅wa^-QҀag#W4plV!je9B)j:S4\ގ'uqh+C|Q6dzPKO#IΌ!΍D?1ΞIG3 Ǖ f <)jORx-#5N^?]ZPb4N *\+ȥ?mOւh(F)=?Qyhm)@ ( ER6=%HQ͒wmesTIU/m[ <sj:R!6VWI]msqRLj:nq(Qo=rCm Zh2zQ@ K[ȍ,[z8kˌRܵ r͉r$ Hb!(܍$Ʊ8G@\Q`_}޿#^ Wtµm7Ռe,m[!sޣB鈮eǿsم.2F!newk?O?׷8uFGg~vmNy* =Ơg!o?ԢeX4 eLLI45P(Ct܁'‡ C%l{uy˻/e%Zm?kE|_8JW(\(B@؊b}1~[j'/i_ 7
+36W 6=
+7llk
+?|7n•M-I20վ1&8x
+1k~7b~$ćJcj~Z<0*Ǽ[2X8ֈMx()GʉLkA" \csX$eFV QVj\)T"jPHrHq.6C[U!znhyiT  BGS(>ƥ;*0AO1fa3Ỷ+"13ąwH
+:OLJ~*׏;W`<ƞ4bYǻHSc={8ޘS@NlUN0>s+3r
+DTҩҁSP;TFqTζNeS8fe8C5#b}yin XY`J
+qpQܨ BRA2`5} ب^'B$׿K10lI7oHkR$Xpxk
+eËD^2wϘr!~
+X`tH1k?I$ *dv4'371fPNv=/<A4R4`n,=bxL|R4}
+LGZSϔ3RLt3RLT3Phfb33:XOcEL$I3̵0!1yP
+.< W:(`L>Kf*X&)om g[[ۘl˿Tƚ^']Aao$I4%~PqqҮ A:EVlu?%<Kmh𺉪q9NJǭnBWT}O|Oo;1'k?a,φ&UfLϾjvmCRnXF}0d_?I.s͹}pN&yT|yp+.BtӗD}5=̾f#&~eEah m$0./Lϗm7
+{Z7cu{nu
+<`mQNgRq~yá3 \h a3xf߮77)"<A gP\ wgQ:5yjQT>sy͈Vދ\Dha U\slYv.WOPoXw{/ QbnhI +U7`qoYVP1DE:N}
endstream
endobj
-635 0 obj
-<< /Type /Page /Contents 636 0 R /Resources 634 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 618 0 R /Annots 639 0 R >>
+643 0 obj
+<< /Type /Page /Contents 644 0 R /Resources 642 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 619 0 R /Annots 647 0 R >>
endobj
-639 0 obj
-[ 628 0 R 629 0 R 630 0 R 631 0 R 632 0 R ]
+647 0 obj
+[ 636 0 R 637 0 R 638 0 R 639 0 R 640 0 R ]
endobj
-628 0 obj
+636 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 448.38 524.299 473.068 536.254 ]/A << /S /GoTo /D (subsection.14.10) >> >>
endobj
-629 0 obj
+637 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 489.233 524.299 501.188 536.254 ]/A << /S /GoTo /D (subsection.14.10) >> >>
endobj
-630 0 obj
+638 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 178.598 512.343 190.553 524.299 ]/A << /S /GoTo /D (section.9) >> >>
endobj
-631 0 obj
+639 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 205.148 128.799 224.855 139.638 ]/A << /S /GoTo /D (subsection.12.2) >> >>
endobj
-632 0 obj
+640 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 240.576 128.799 252.531 139.638 ]/A << /S /GoTo /D (subsection.12.2) >> >>
endobj
-637 0 obj
-<< /D [ 635 0 R /XYZ 78.37 808.885 null ] >>
+645 0 obj
+<< /D [ 643 0 R /XYZ 78.37 808.885 null ] >>
endobj
-161 0 obj
-<< /D [ 635 0 R /XYZ 79.37 771.024 null ] >>
+165 0 obj
+<< /D [ 643 0 R /XYZ 79.37 771.024 null ] >>
endobj
-634 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 398 0 R /F15 377 0 R /F56 380 0 R /F58 382 0 R /F29 371 0 R /F20 378 0 R /F52 372 0 R /F41 373 0 R /F53 638 0 R /F51 376 0 R /F23 375 0 R /F26 400 0 R /F40 387 0 R /F46 388 0 R /F59 389 0 R >> /ProcSet [ /PDF /Text ] >>
+642 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 402 0 R /F15 381 0 R /F56 384 0 R /F58 386 0 R /F29 375 0 R /F20 382 0 R /F52 376 0 R /F41 377 0 R /F53 646 0 R /F51 380 0 R /F23 379 0 R /F26 404 0 R /F40 391 0 R /F46 392 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-645 0 obj
-<< /Filter /FlateDecode /Length 16844 >>
-stream
-x}ˎ,7^_EF9$ ԭ[Uak*
->QIeG)BEE?tZ_M=4m_&ž>V+p%^(^?Qgbj#ZÛS7"[jBE  Kg2/2x%wZ_}4r%!َHǬqwaսܭ5_}
-|F#f1ݓ6B :
-<8T~m8>n~wF? Ԑw8|-i ?o]57vae@V##]VYؔ~ꟗ[8aT* 5E.`WgeX+=DлWƩ\Rs{h_)>S[=ǽ^p%-i]c;1QGtzk qcʗF<Xy}|:valT̫o?ԩAxjfk|st*gjGVw-K N+ZO5^İ rtA۾ Y ڽTvxgp\S>Vuz8+ۮખ\g
-}a/B>XKjZ3%_*"eyMG<IK?׾*$KKΉ5zQIK V͕%9tz#@%a\Gev_/3uj!ƖH"B|}G!VR w4ln~1}Q+$k:PcV?@\W8 :"M,ٿ>Gw%3غD$ˮ:;upâ%reXJGVjκF
-oc^vgK2YK.O-=:L߭~(D[Itr.I;% p!5A;vB ]sȻƿE@Ch'?=vM^8i7]s'/3
-nՍ|un4S WY{I [)]v!ۃ>xF>eHz̽v29A)NɕsuL΃P>"ca8kQAs)5v'6>~i+|s157'kyXګ\IgMxV6A5 $
-߯OG3wpdAe.$\XiKm=_Zxs :Qy'IPSHj 'Mxsk"XB+؎= иPن']1DʦccI(~#%Ϩn)][MODOZdܣŢxlONuR
-}V=[_m$cJLGw]€ҟ?=}xy!C &ݟr
-_9</V"?EJNp6xh/^*6 ^7L
-4};gh~xs{
-O4f~-ֵ<sFOۄʟxlP336 4[[uyh097{HyܼWOq?X[,_٦)G=ݹ/ ѧ+'"6wQprֿZ?xoV2d:[o$]_$O<>m8B>(GS'9 Z~+d*BhG飙^oNH^uaN/ aA3
--?\CXfz5t;32_ _hljYOw !}Jo:R{0V oh=7ֿ]g}B>>ݥ)4~K߿ۓV^?_Y]73Y/Y3㗻ϥ/5'㝏Oڟ&z|:XRBtkݫu&8z{d&8z{dbO7b~JEËdR]B_h$ ͮ;os=|K7<aorodj=y\F7%v9X.lhMGqĢ\=RG| r+ ֖bV}>KQT@?Unq)Uy ;kǸ\S!R'(]H~+j~_1LVupFw
-rWyua +rZ1CaN|OѰ{ l58;}0HVqppFoBimkAgZ .ff񋫝.]QM*(7]K8*VkAEl0EWA9 cXP#w5?Լ5A.VETY2 \8q6縺RY03c3mv% q~='H]
-(px' FT`47+D6![;z@ɕKBfLBEB3!`YTA3604(Tk+ w3.J (Ъau(wU( w(WU44$}!'у<K[1]*
-dF\=.P/zUq(jh%.e s>pw#=C[}P/Z5H|OybK*bi|euf(t^(ﺺ:Hn#*v:1/=U$Ix*r]u;A=Lj9PSh;USJxo::yǸtu*ʀG + ALvBkܐ#GD/.S?/E C-S\ StS@yTkxB/֌
-t1
-4˝0w_ÆV]?P;.!u,@(=3\\ RgX
-WW~ZN
-R|M}} '\.(ãthg.kDE.ꃚZ % r!̘a\\~-zE!'. e*(3GcYu;U4RrR.9`
-+m<DC%'N|eNU>fDVR
-ys5FWDɑjU'4h%-VOH:s]<56aO;Ck͡1&^7We"*g@S^*ufjEOh:2ꉠD&(QۈuD*sNA
-Xrʎi4ythQwFZ]
-%Cup~aƃfY SmRQ;c< uw+
-I@
-Yx`(,ݙeŤlT3x2ﰳf,PҦiK0 `e.E
+653 0 obj
+<< /Filter /FlateDecode /Length 16842 >>
+stream
+x}ˎ$9==6I Q،̞SƜbQOJRU4wfQ 5ISfqqcOk_~_w)ʥz]~ǑqQbv b9x %O>ҟ/ƿ>Jin|2ͥKs|⾒Ğݏq|2ΗϣolyLT: Ssܯ:LVkH={0*8b
+>QIeG)?BEE?tZoM=8m_&ž: 9V,JQ~ԮGJ'^'/o_$!
+_c̻'m@t$yp=-p|{~>!pnZ\~8ߺ'kn^[ˀ''w tYeaSz["?+R ?])r9*h?#,ZM &޽6N墿CzK"Q<n+lݡ:ߠs][/UӺ*_y`Y؅yjWS1O
+Iҽsbzn~bϷ;q4Q>*$'BN^U$| ׿&qNM#RģTo(Cj펆M<ͯ\Yor3J|Dm^jQ\j=;
+'A5SI%]Dw[7vdٵ_#Q<<,Y*W
+/RM=՜ulc^vgK2YWK.O-=:L_~(D[Itr.Io;% p!5AvD ]sȻƿE@Ch'?>vMV8i7]s'/3
+ SMpwmԵ;X
+MvLE`=]솪6<_Q*e%TV=ƿڧown5==ekAs՗Y/>;_9H* [i~}+1>|Lfw= J_ɚ5]xS%$tߏ)D|ZT(;ࡽt$S{_m\'T{nz0yM+4z(ӈ#ALKu)<l~.ӘX[.v<#>lnvo(yu"D~Cl $иnYl kFDTJ~"5s^=郺hbmI
+|bf"tڂ{D܅GMYDj [pPYڃnk`\vs}u<6,\ֽF$%rN1;2kI+fȺ[o+yzr;#W[1RB=J;;,2Ȳsδ./
+Nk\?}g-&M9/c5ScvMa6j'o0ɠυ8.m̰4Y!|Ucqn]w^M<+ԓo5'[q#{Wx_oKz}Q#VKyQ?e{[@>"37
+#vOvJ {d+-zhR0鋡yNľh3ni)ݷl6dQ T0ym%# M.>49J_4yhBwZn׋RRyy?.$_/] t˧|.Ak ^DOo3~kڨ?_.:^}rqt͵G]=sJ?aX[m;4~^ؾW
+G!@|3~yO󣲕MRfe ? 5!SHZ]Xf}]vbO[ȿקTV>ڧ}4uP5d&uiw{r_7ߵKf ^3#??jf`tD}[sDO U@nM{u{V5x:bxGoL`vGoLl4z#GTq><:J&u%FK_ڿ1tvxl<x^"Wn~F:Wʅ{ ޿?/t [roˆ9tבI,#u7 o|%r]̪G]})4
+*|o[j\Jh^;3C Nd9.WTԉ6JWv4ߊDW SU4ѝBU@]35Gʠ\VyPiߓ<7h4,my(qz RU4ћ EFuZPja)ȢYjr~a~cJ<MZE4Lѕ ExmyD~+9H"7?;] 5ozˀ:c~DfE-k n9Ԡ8A- G] #3:¯)`4FKSGQqam&3+gH+@F|ǵ<
+#~+oJoߠMeV)Pre҃3Т*Ss(wD}cXDUL).
+J%&˵R1
+*FX!4]<Jã#h ' t=s[ɽ+g (5RVLW ԋ^rᇀ-ZKق"-\nO2 HЖr9vˆVG SRjJ,ıFj`G}}Y2
+
+}廮kk8,R x;QER*$[DD~Wy9:Cԉ٠&s Q(])4ʝ*)%zwJȼpFf@a:QeiʕwEx;En#}ڗpGqV.)T)QVQ5w<krz1
+2 q1W+CsʡCuzj% ɇ,jji}Ҋ"=<J V,~Rؼf@Pt>UP o#s!̡qvToWE(5DυtڡLw@>PU:`c,r絊FJNQ?GLrz1
+?"ӵҭtC)P{C/EGzH㉝ŐR^@yD*X7z^R'6ѩ0PO;OQX
+)[rvc=
+-;ZҠ"4~SzLEHn
+l,1q1g2lBF utG2Y\IXP`sלg ,uͬLsMGzbAVSq)[9N0ؘo 9 ?ϩ(u[OõF}7&5 _ݬб U򳣥@&ڿAM~?h;4Caavڔ3;N6<QtPa i|Cis~Юr.dd̝2bQ&sv*ǘ=5$.*dxPbE=+;ڦMRT<x8@FGi-wG4CaN|E cBx~1||*0־]Q*%Cg6
+*uHTb3Ce`NTe<@ !9G =S9Ў nD}CCy GQȣᤁ60#dLGw+A-bÆMRe5LmI GQXjh4ݙdTǰ98W3RcJxiП8*K͋KFr=O3UBsɃ_'4$L0d݉p #Ӄx<
+'FNʛnsi
+ L546L\EpBF.-v%U)weş! FI})q+PX3a˨IAdmGdD agXM! E[7Ӗxեa& \
蛯cd8y3'ȼpftu'ZCi'xfSE ď/BJg}[eqM=R
-Π9 TjHw QV|~LwZ=+М7qg;UG
-~4b WwR`#1k:Χ[V$KF
-4#^?_Yb#!Tne"(f
-uqoi\M%BCK"%ߴ \hdz$ȒYlɡ`Iy]Mc
-I"%h6+@,TP3?u5C-NG ihDm>eH
-=:yC7j=þ3fKm,NQ&n82vaB`D݉IbpUüS4jWԣ@F$2Kޫq EDTuaF- <?Wp6:MR;FѻTXlqhZ-R!Qgg@Yg~A='4r!\c%X7ۊ  \MBl.++Iմ't0بq 9$ oHīl>Ә+sǚ;D'aQ0\-Xw6SR5l.+̛Ї pq( +v@WS%.OU,$$>69kNB`p~j}GŕBPV# _Vޱrg|f4㙱Jd|PL/0og8~
-&o*{ > AjIj 
-~ho,R` L<
-]*B(JL_zI w{qF[y0<W^\=Q>i*#[.m>\L_-UJP)ih?|0*1oLttf SBL4
-Zhg[^jbbG|`V*Qx7tcN(e}z;{<J<U7+]B=EWWRx ʵӗy ZDn3 sSej6G_tBcCo$9#-4F<;!S;Pobځg/sVѧ+m[ Uq @7]8 .
-1>8 ιPƫwk[j0;>f,23CFJAyCJCX-U0)vƷNǍ*t@/ljn/HWBߵP,p1P/Z.(<{oa#^R`r L yN zBNMGrx>cOkݝ@LaKzrDiۢHp
-6cq;s
-H$ǘlj׹EIJB?]Ċsfc#X4,J%=<SnCFr@yЏ8qGP=I͸gOU&`x>4f3#8>qat|8@ʕ]
-j8PC-ᄆXߠ2F [UHF>> -4~4Ց|Gm!)ƘR'rlP0W;UUx48R j8WJo61sL&v<^nSSvDl{>撓R`R t1w
-&TYaUI5Ç􌡔| o\I!fxH4)@hO:6g;$'R` LiT5="8816AϽ23@Ę7-#+b#Xp[ڇMbltIǠk'e,7)qJbӃ 0AL1Snj~*~Cj,x< cV)
-J_͑05J(&Pʊ癏R<ۅp>2s5OGP
-1u U( L<qW8w.?aAGlH<^8ڱJP|~2: 2xGE/BY$O!J(F'2ֺ f6ƽ PrW4D0U*ZUBsŠ# lGш1,5ͳK@*4E, t1;,;(-TI) m}s,X0k6KP,U, L<qAi*nbOP'G(g {7EZXRr肁R-siE)s 9u,8 wh\`t><]#r6 GP(R J<,I\jy /jkREzHEYW RKJ_@I\'BUXzVQ,>=㉱#߾,[es(((w@^ ^uTm -6FDlJ!:y\]:*;b m[:DK2rRoJE,<4$Vއ* Ckz8C5gy?(}K'FPO SPȣ0w'"!nӀQǒ\b mCwu\{pȣQwZ]
-C[)BJ)g+
-*󥌭PƢCܝ T;u[ETxpY, |D۰Laհ ͝BGk-wG4CaN|E cBRɇU˲Dț~aWYϪ+]f2y U>NY[(; (!(lwBgzϯ-ejI7@E3ZgvTE`4"ypt9 ʥNv_@EmzS,̗jh8i_,2&?I)Q]αld49SW*q YuK
-?iBXf)yV
-9|ݪa|z%#Rq繴p HYh98-W@b ܿ+@}0 )WxܣE^_WQ1Á54E0 ,<K7'dJ).[EksUK'T_ƭ!nj!l.
-.^jTezUn'C])twMQ4YF VvQDA. i؛ duM'Yz^M
-5Dؘ̄K
-G,L546L|_$'Вc/R
-X. 6fRQ)  ۉK۫$t.Hc]"fJ
-*eyIWӱz4 d2hKeoLv漯ojrxri஋ΫL捦4.3
-`e.E
-w&/s} ss{"\@_ :0+WVԥ̢ fɕ LH.|w\GbGoCțUb%:PvS:ADw8 jv m  [+obE
-tp20o'2 <@!b腡9jnnm>&;b7i 4ʝNQ}%s7XDn#MDV&BG/d^7Pm5u(P Ki/ZgfH=Ot3@y@]]?9*t1
-Re\@s{z/P s{FvJL\e6\}acPy&8&2
-pk5H&s/!oyӝBRV'< :9=3%6],z4 r厏:ƻ˻W>cB{*P?nv-89?E1gGy9 #s9mq{M}b>c2&=g?'Ezx< Sk{
-4WԊYDA ̈́9 }>+#8war2'M3~A}c2HI*c3OjaF#"33&j&BC2hrhw[Hm&Jy$/»XrGHqByOz1W8%
-rqrXf\FN&U7w`K3~.4δ1~#.`R{'CFBC4'>SR
-GiJ(<(n#BP&H)Pq{np$D!Qe7N=F>mBY_[(UC}(T&-
-DP-y_'V 1l\ y؄
-֣D8azhJy8Dl>/7񍿠g.m/)gUD>ȳC/porwEczO u5̱(v^:߇-R`DhF\9HHp8N(3sRPX~ .i0hSՂ[M6mi@T .H4Sc.OM %$:O~ -|k??_ s& w&v<=x˿~O_~Vÿ/_q~gN<pO _#x/g 27F.)Q>hȵy?rل@!4Iޏ얹r{]?TO`βFΝԫcwJ(x~7Y\sX&t(ަgqڮ[edWdEѲ,aQEnö+ZgEiV'4RKA$i;5i)py_g&ˢ@۝\unˁUߠ.SFM#|R<Z+1"8. w]ҝUyJ7;/>zn˅rsomtS- XI \aҽF޼[Үbµ:k$]Wg}=Zr<)bˬ7ᾷ6jICKR>^.RmDSf.î꘡dh0U޿S<2Jm(,2=- -7{Z>~4yCN>ޭZKz@5C{`6E >qZx-Ou{'Yb:}5}<=mE!]M5DaH#;S~4|¯QZs>0>Hw%A%0 7ɧ8?
+Π9 TjHw QV|~LwZ=+М7qg;UG
+<u6lfp;umW#65 M~=yƟygyfמ{Z=څ6dҬU|zZU~<Я{+m>TԫE׫wڠ?if);ђi[܂)r|b &chۃʯzN˗j!mi`?49,L vkKva߳_y<C՝TH@ξ)n$툧O'oH!
+Y?/@KR
+ 4L E*ɡ4 4fpp2$IO4Pa䧮
+gugf`DiBebe!|wuNs|RהP_64>{ j<lG
+oy;=sjWv+FrG߉7[cx]M,tqS-z-/21ݱQ2oZRZEY-ĤUB@a^f
+HFM\!ba%F6yyq(yO7csypP!0"1*aލf5ǫ\QMr_I]%U踆T"YT#Q]+mEKdqAmw}ZCЦb)ѝa]*{,JEuM[|٨3V J3}H.ޱ o,G]q_S mzT[[\6Jv$sIrjZz0بq 9$ oHīl>Ә+sǚ;D'aQ0\-Xw6SR5l.+̛Ї pq( +6JH]X@ TII}x39lrE̻$b+FrG|c
+$Wi3c:
+>8DXhf3H0.D[dBN(tP*2~'xi*" FQl)o"O_KzrD7j4mu+RV`o3bo!
+zT-OO0ya)[0| \E'u=!&|qȈ#IJhTzd
+aKﱧ؈5c
+i0%`pzm z}8zo 6cq;s
+H$ǘlj׹EIJB?]Ċsfc#X4,J%=<SnCFr@yЏ8qGP=I{q<hL|hN?̲/,gG q||lq0+
+mQ%'4_xxO^ 5JتB29!fmk~ΠQ;J=Go 7N1 :sSUeh@Ca>/Ѡ݀sz%ޯLݎk_dbo2wmjʃ6nSu?`G\rZZ^JLJ.r㮃$j?eWt9̡tp
+@<'>Ss1-|ϣH e7ߌ\!* py"
+!8)vv1Rϒ+9=ic3>,Q`2)ֶ~>%xh RltGBXJm>S.w0~M'-42?t0cN`̵EsF
+XXb: wXvPZNSXSQ!X6x`l01VX
+3u
+hX(*!py9UP‹O,q+QnԱc( 6Z[RbrpYpBAиJ+ q|xG(%l96P
+/u U' ,x<1Yv!
+ PIQޔYxh8I T@ȯ7tq"1j|~PlPN'@Gk-wG4CaN|E Br ‡%>1  GQȣᤁ6"1!j'`E'Yƺ*OiU[*B&)k+
+iu5>Xk<* sw+
+_z =޸xu<Ǽxͻƕ_uu q*Ah*C}ۨ!+~bNWgnWAphnM a5S>"l/UTV.ތ=ϥWA2U ̢Eiqׇ
+`e.E
+}(d0ؘ3}{DBK֗\4ބkme3_F,H.L{[_$@^Wd{ P%e: AjhDݙ"!K`$kH]7dMe]":l̥
+`R&
+w&/jxgkʫRot)2"
+`R&
+w&/B}THUi.͛Lнգa F\*{+e(Ψ3}|SCOw]t^e5o4qt3J
+ L06L|_H$Вj?נ7j8VWN/dTBT;cbΤ5U ]g~
+IZEs0oc.XDL̔tuj4ȕ;>t.
+:^P[
+KPB}R
+QƖl"RnbXuǜ 2G\h&!p5c7U֏=ʜ*}[$L+DJ
+*\Q+gq#04Fj(Ctgx8P0_Dޅ@4z[G^fB| %ͫ9w<) 6B1W;7甹GCۂEo3VJ3 g~ю7Otއ,Œ#8D
+{ՋA(Q'eFEldR՜iW}}W8BL#=2> V)վx2d8/0Az}?% 6QE>D ug=6>_y#Vkw,=6<)ۘV4Z~Qڼf@
+1+J !pvb(G=7yvXꨲz#6Om! 䬯-fh*A
+;JC~g[1KOc }ظ> 4*Z3'z~iNdΠ
+LO'" 0<d<}!2[`׎z2Hi
+·\D]z?f̕#Sr|"s7
+t^u7SBq{$?m_?#`ճ`^5l?z*="^kZn]UD˲2E2W ۮhǩw<[H鶊3>.=X֔}{ѯ֯r7w#"?owre~.~HV]~L5IhxĈ,DӫrWܩW^{DKw>c
+eb|맿>|eK $UֿE޼[Үbµ:k$]Wgm-~epZD#:sg[+E!q7٥U3 гw9~^ׇQF~SE%ta>հfK_YkܻяR3{tU)û;YcIFph FmZkN^O7{ڂPx|b%f-WCVҕ$_)qHԋiOn4q?97I>7*MI^ ~[P&=0b~OC
endstream
endobj
-644 0 obj
-<< /Type /Page /Contents 645 0 R /Resources 643 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 618 0 R /Annots 647 0 R >>
+652 0 obj
+<< /Type /Page /Contents 653 0 R /Resources 651 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 619 0 R /Annots 655 0 R >>
endobj
-647 0 obj
-[ 633 0 R 640 0 R 641 0 R 642 0 R ]
+655 0 obj
+[ 641 0 R 648 0 R 649 0 R 650 0 R ]
endobj
-633 0 obj
+641 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 154.725 723.678 166.68 734.627 ]/A << /S /GoTo /D (subsection.6.2) >> >>
endobj
-640 0 obj
+648 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 358.772 639.872 370.728 650.941 ]/A << /S /GoTo /D (section.15) >> >>
endobj
-641 0 obj
+649 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 306.379 485.652 318.334 497.607 ]/A << /S /GoTo /D (subsection.10.5) >> >>
endobj
-642 0 obj
+650 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 385.311 334.678 397.266 346.633 ]/A << /S /GoTo /D (subsection.17.1) >> >>
endobj
-646 0 obj
-<< /D [ 644 0 R /XYZ 78.37 808.885 null ] >>
-endobj
-165 0 obj
-<< /D [ 644 0 R /XYZ 79.37 771.024 null ] >>
+654 0 obj
+<< /D [ 652 0 R /XYZ 78.37 808.885 null ] >>
endobj
169 0 obj
-<< /D [ 644 0 R /XYZ 79.37 591.439 null ] >>
+<< /D [ 652 0 R /XYZ 79.37 771.024 null ] >>
endobj
173 0 obj
-<< /D [ 644 0 R /XYZ 79.37 161.114 null ] >>
+<< /D [ 652 0 R /XYZ 79.37 591.439 null ] >>
endobj
-643 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 398 0 R /F15 377 0 R /F56 380 0 R /F57 381 0 R /F58 382 0 R /F55 379 0 R /F23 375 0 R /F29 371 0 R /F20 378 0 R /F40 387 0 R /F59 389 0 R >> /ProcSet [ /PDF /Text ] >>
+177 0 obj
+<< /D [ 652 0 R /XYZ 79.37 161.114 null ] >>
endobj
-652 0 obj
+651 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 402 0 R /F15 381 0 R /F56 384 0 R /F57 385 0 R /F58 386 0 R /F55 383 0 R /F23 379 0 R /F29 375 0 R /F20 382 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+660 0 obj
<< /Filter /FlateDecode /Length 5680 >>
stream
-x=Mdmu9`HWi9>$\ׇӫwl,zD(O'z|S'GZ/艝#BьPN_>3eۯ.30pc:h*-e𗒔j?o.z-A^+ڗo.S.~}o_b_Q?<҃/gn?#t.}Q$67Wn P,ƱnN#[pQxgt1FuI!'$~+r?"_ݔ SHJ@q]҆@E+ݗw/@@7Gsh&Gy[\y^c>4I5$,؜1CԴ1f!IHƽ
-ۢɂ],zmY
-4ձ-XCo7=ZAB׶_35-?/BB@Wv(]M$Л/`c*/._X](2N0v[yVEŝe- BL$XC_R}/zЩ1{"vbhiS,dy9Ji[}O9wٙbH#T,Sjkݍ^)]lR9Dap m{UzrI
-(氹 45n1ky
-&WH&YWfۊ>
-{Q|uۭEu--:{k06/$az{36-RJ"ʖ,H ~eKA`O&
-yKQw7аK78lDpp{}Upf'AKH(% O2~~[tCz]A |
- Z=RVإc@u|ץ| (. .a|J ,jn<xÀn }
-&HK'F9 FMEdǹ/E8/UsL /~T^@`^jȎ/ٌ,nfZ-⍔/dǮy``i=g\NBaK 9HMʄLu< tҮf-.8/ԋcEzR#sMIB.#~ HMj2\nUǣ2u/`an5AѦXPmκAvDַjnz[|S
-2d;hk5Lm 3.I]3ywq+ m:}nJN: pXl/KRyr%C;iۏ*"t7Xs߫yFp v _'y=|`Mh+6c> ^?z^C3{
-:S8/絹ݼ"f}ʩܪ _+?8^@yDPf*,
-a_bI*D/X<CZeb-|滄o7Jҟ'įaD8$:y M%߹U=j7R5-o.kmK0"/G1aW5N2 7 ݖaeX1ӫZTS~US@ЂUU ?m^HR5&f@o-UЋ3^Kp5`1HX=&\5l X렋.\@!>Ak4Liuh~0Оk>Y\ǖҴ?/fClY;:Q&
-B3#+ "iW؁.'V.|YdVA afޓS|xg'#"H@ā^ȹyPɻmQn']7?rbE-aϸp.TX#1]XrH<z
-7xy]
-h-\ C 燖ĨGwZI<Ti>L3`|Rcu\\[%?4J)ULƎk -qrؓ1-X>8q$c#SE0I#/3,U
-re`dtOR<`C:# ޼[*)s\g(VS{V23B1%mGY*eTWdRZ(6 :X>5k~o0e 2tG>HM_]<~ %~W
-3}
+x=ˎ$<vR4
+Y99}joc10x_ԛR("Zʤ(")$z󉞾G/_/z zb'd4#TӗN?|]^~嗥}fTnLMT𗳠 RRM'~x]S&V_#TpkqvR%~*QڥWܯ/ KK2>ǞGTzPGΥ:JME8­cI|bdV^#| .
+.fR:¨337/bEGok#bJ)X߃RXH|1v_hhe28eȾ^shN??~~|K3kc~x \X"& 1c9 1$I۸Wa[4"YEOM<]X:kFGv7R+"XڶKBb](z`LC"kжEC F"Nߒ4u+J
+Ul1t#G 3maSVX g\^7;SiĘC3bJ_x K#ŰWx޷ 6ڟM8簞<.3@ aQ*_ON j"̬=dOPkR^1)#9_|0&Zf̮1eeAіJl LM!us
+VN I&CXնQ`/*+m i h}8J{gI̸dM$+.[ ~eb6=vX,씺z]I OK xǜ1xlك4%AI$Z y##q>F;3֓:cѬ7ת,aפcZwL_A@i [pMkTH=7Q1k풿؂FYNv>Ajs]5nAky
+6W-H&YWfۊ>:9B"ў(ba'aЄ[ގ9&04ރ9npeCQڝ˭{LeҞ#^_Ɏᅈ6kfqX!e|l˜gw ,dhnDPF8=&|.*^+Msn϶8A^{9~Ґ|,ovb0o.z8';ʳ{
+>hL _q znW@I7${:ğ4.`X. O͟B|uDksf-QV/z-m!2:p՗ꪧpW$ Q*vAV^&;î{Vې21IFo#nf,q_m~mӨ>=a y#!s)79mS+ @hs@3#V͜7euhDS24gJ/{nP!%fa#͟ Fڍ3ذ[̭whŀw_ţg˰ӏ?ߟ4 Q8غwOu-:-LL7D::ǟNSl:K*90e=P03t$,k ]o
+lGo?/OtY/_<շ҄u}/?- 1UG)a^&- qbu {H=/j1='Ž3}N÷ly8q/C^7X|IiW2Ozv$6Qw7L}"FQ/v}ȣ61JL̞uИl
+S_?]k1g8Yy/ݜaٚo
+Xv7NGpea'b=Çp³wh/J|ߥJ%2x4='”ϧ~"|l`l XCpl{``}VؖxҰNd`=Uh9!d]* ȺTMFM<ْJI\uzk |K(3ȆPf BYY2J9128e!W5 aС\Q
+lv)R*\|ܪ8d>śC| U:-G ~ M-bB*QJJ#@&KP kI_.|A,WG׫lsJڕ3>m Gl_ehaQz,걠j:s$ h'rIw&Nvp)^.OI+w( |̧ɔ߯7bQxpd
+Yj)˥:<fH`6j Rwb R{",϶kH172o7} yφsHd?Qv߲@Pj=xޫ/hd3K ;hkOГ.e]9d[w]ʷ̀R1 
+H
+ hxfr,-^IK&$Tf]d
+R[ɚԤLh˴yoXS;_A'j&↽cF8f9ܤo52ה/;<'u> Xޤ&Vp<!_^fVjmJnPKa}檷7 SK&|#pVD0n薤=Sw7G¹Ц3珻$Jᬳ
+#皃ÂCm tC%B%;D5t5z^̊ =
+fjPb]taA yH \R? U{Sӕ>y?My?s?vu/^Ycq>oZh](@>.u-Qt7x¥|Pw J<~%hRh=ZT'c([x"|;|_1lqH.ǴGu&K`XՓGx{_fY"`Ϸ,&y28y2$B׵d^:)GV<9" g.
+ afiC~X*Q6o8#ϴ>O[ށwiݿ>7c>V{ޜS  )uOե4)۞6Vd6ƱꙒDq^H@Mkd=,mCqOµ/xN!/tqGyѷUR根tPR/
+efHcJڎ0wUҩ^8;Qlt.|j0zW1<aJG)]eV"|_ *~'xJd
+AQ N4nnG^Xi5
+4Q7UڧQUn@_p
+V(hc$^_ORp}[T0q񉦯VU -n-`ir):ػMY͊?؎#fۭ^G\`Wc\Y_"P<7
endstream
endobj
-651 0 obj
-<< /Type /Page /Contents 652 0 R /Resources 650 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 618 0 R /Annots 654 0 R >>
+659 0 obj
+<< /Type /Page /Contents 660 0 R /Resources 658 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 619 0 R /Annots 662 0 R >>
endobj
-654 0 obj
-[ 648 0 R 649 0 R ]
+662 0 obj
+[ 656 0 R 657 0 R ]
endobj
-648 0 obj
+656 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 380.656 487.577 392.611 499.532 ]/A << /S /GoTo /D (section.11) >> >>
endobj
-649 0 obj
+657 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 409.423 487.577 421.378 499.532 ]/A << /S /GoTo /D (section.11) >> >>
endobj
-653 0 obj
-<< /D [ 651 0 R /XYZ 78.37 808.885 null ] >>
+661 0 obj
+<< /D [ 659 0 R /XYZ 78.37 808.885 null ] >>
endobj
-650 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 377 0 R /F56 380 0 R /F23 375 0 R /F65 383 0 R /F58 382 0 R /F57 381 0 R /F20 378 0 R /F29 371 0 R /F52 372 0 R /F40 387 0 R /F59 389 0 R >> /ProcSet [ /PDF /Text ] >>
+658 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F56 384 0 R /F23 379 0 R /F65 387 0 R /F58 386 0 R /F57 385 0 R /F20 382 0 R /F29 375 0 R /F52 376 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-660 0 obj
-<< /Filter /FlateDecode /Length 4634 >>
+668 0 obj
+<< /Filter /FlateDecode /Length 4636 >>
stream
xɮbr }h4;!Q
hw@d"89Jb; 
@@ -2526,290 +2574,283 @@ weaI4]o7^蕂0o;<VJךU~i-T޶הB;2ٚ
ӿOONeӅ8%QVhn \`ǖEhFZtڧg)8P&OgeDx88v !S΁þ"k(8O)
Z¨L<:Ks$vð]+꨺Rzڦ.j>+!G߲L&}$z߯䕜ÉWկ&ĘS‚ggˤx$bT(eS&$.kJ$죊* &jyfak噅i37ݒ}d9(%G?HpM
-J{pr‡A\9[9qĬ!nV+ڿŦeI,s-ifv4^qY8EYf2W_ky0e^cue{p8ə u/ 3J%=R*i%L'/i>TSH
-hVU@Sؐ{uk\V\hs]cn UXgM/kWզ38%;HˈQb4_1;{I+v~þ11ZoӕNjFq-]/UN2Qe nF<L}t6D|?1ppJ u/~IX&Fbq V
-GX΄; R",Knͷ#E
-(NtwX ? 1c j- *v=ffa1 ߷ƿE֫=|s'lf:~jyiIz>Sr98kߗ"{:coFgň.YZl1^e/ؑ)QB87zmҽ*!TۗOJZM^Y&kMEkiv4٥x7޴rmP|i|rA&a]k 7+٦')% Ot[B\WԎx#XqFsY,={;+Μ=b'J% <v骡E3!VY'\J/յk6`TxĞG5 ػ2LlB+321G6N9Cͷ U׹TK
-¿+.-w:;PNӎ^Svldti+i*[ZH{ԍ3_iaOXPkJW58y
-*K Ӈ^b M=loEhp@tjY"c=ֺ 6. X_ `'\*vGx0כ戃s,'0Dq7nB
-nkTj"k7
-h\ D@up ]sߤTݦs)p,ßǝFMUߖJ|#H%a
- ϗ!L,: WR/|`J4SܴD~h:tYc|;r4ً?ioM/>
+J{pr‡A\9[9qĬ!nV+ڿŦeI,s-ifv4^qY8EYf2W_ky0e^cue{p8ə u/ 3J%=R*i%L'/i>TSH
+O>:_"JIAZ!̈p8t L8]yV%KP:t$U, +_G#B,gBs{zEm[7["U hg;sԱ|XږnBr3װ[_"v 6vJJGe?G5삼xִ$NZ=J9{CWƎMKcu=7#g3bD҂{,-6V͉zEHZ(!XvskQKHקG% ԦoT";mkoZiTEG>`z 05ˆΛLSlӓÆ'h-!+jGr^ԑv8_w W]ygNntk;t"Berrvg%5e_0WOS_cTbO~S]u&6V! ƙ\#Ԋ\Pqᜡ[Yn\*åNQ^-NEYմ˞ʴ+/$
+b'章sk$MpNkKxEoaT;I-.Kxܗ+k5[p+}LjIߕI;(iGq)G;6k2 4qt
+iu-Jv$=Fۙwy',Q5%|իT^hj<HcZcK%QC/1&J7F"48u͊pH:R,k/aXw .csC;#<Ms{_ QFછx@8<͈AG20Uf.`ns-%O5ȳ:C+)3̃^Q8C@LA
+8S?CE "A=HkQG.7> 򥁾UqCb&?A-} C
endstream
endobj
-659 0 obj
-<< /Type /Page /Contents 660 0 R /Resources 658 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 618 0 R /Annots 662 0 R >>
+667 0 obj
+<< /Type /Page /Contents 668 0 R /Resources 666 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 619 0 R /Annots 670 0 R >>
endobj
-662 0 obj
-[ 655 0 R 656 0 R 657 0 R ]
+670 0 obj
+[ 663 0 R 664 0 R 665 0 R ]
endobj
-655 0 obj
+663 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 402.269 316.805 414.224 327.754 ]/A << /S /GoTo /D (subsection.15.4) >> >>
endobj
-656 0 obj
+664 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 178.2 245.074 197.906 255.913 ]/A << /S /GoTo /D (subsection.18.9) >> >>
endobj
-657 0 obj
+665 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 210.857 245.074 222.812 255.913 ]/A << /S /GoTo /D (subsection.18.9) >> >>
endobj
-661 0 obj
-<< /D [ 659 0 R /XYZ 78.37 808.885 null ] >>
-endobj
-658 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 377 0 R /F56 380 0 R /F55 379 0 R /F51 376 0 R /F23 375 0 R /F20 378 0 R /F29 371 0 R >> /ProcSet [ /PDF /Text ] >>
+669 0 obj
+<< /D [ 667 0 R /XYZ 78.37 808.885 null ] >>
endobj
666 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F56 384 0 R /F55 383 0 R /F51 380 0 R /F23 379 0 R /F20 382 0 R /F29 375 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+674 0 obj
<< /Filter /FlateDecode /Length 4950 >>
stream
xɮbah 䍞FsRI
0~aK}cзJ#[ny,=\=D<~OTM^RT?tIWRIl/[Oq3rSCRP0fsdK^=ȷ m9V[q<\ߞawHl :K9٭Q^m}1{{+ oK I W@M`3mL/zn4/iXFX
$zJ=g.դ\)jQK*H cY =XN z)V~V`88:aS2CߗOUc(RYpKRt<d!*QV)4*Ndo
-Pa15~G}IzLF$
-7CQע˸]v.i yH尧G-zL+'%nsMH6/ytJ]Gn]6/kF0F4gz?k+!wG9GxB o3G+,y]JȪ$G d\Bwrrgw]۾V)Bh*)3&t1y*M-=8-I.ka7fHaS&-吝otq{ &zە;6YuU <e4GQ@~Tel~Na=<SX-%n VcY,%Ս2bJUΒ˚DOMBm>)$h>r
-\@lc
-pm uPy";S9(8BJ[ a5 gᇞ5bi^7OZO(?׭OOѢZi ,-ceO4_f4?!0?b+L'؞FhE! _XY/1k^띰IZNXzf507nFE!OQ!|} dni4 =/oa=Ag~sÂdDŽXOM89 g<p@ 8C F,1i.fO:m򳢰*K{븜Tf;0βqy_:㻥6B8zis<܊5/PC:5D\@k:‘3 ylw^? S[Uağ&Lɮ_f9 5D}4:;-%#Bbjcp>t 7cP3_C]>83+ O_~$C>HjM0pN{o_ 7͔X3v{ikf(.ĵYB)fgc.mW05M,F%Nu: jHL>ma}9kj_ Y:ߞNB;mRbbBlrzZHw} Ґί *<ǧf}&Օ(Gԓ*ۃ8JѡwCmrC),KQX,AgkKt4EA#d]))cej+C3!Ϥ<Kn]o#~K
-E5iu;q}&63'S1;a9A)yQms!AM!k5xI,1Դ~7ޗ{n-aԶͦ#\le0 ZLAvou?زX>WWHq(vSWbMt#yX(Yl83 iSz#=8A`*O[_#׍yG㳸5X:qCJM-{cJ5Zͪ΢0.#TOY'md
-ۙjEI?3X2,Jf\>B" Ӽ$Pϯ#|F;.)ќ/؞(*jY؟,aU$GYR3T,:qzA̰o M3LZl9GS)ګ^BɊ1H81}KYƞp6`I^}it!$07")`RIq:ÂE"ղyzQ`hϨN_e WRΰel 6;蒌0%]\sGs-.ӡmvǥeX|eLd</7(qZ*q'JpڭOXqʻaL[it`
-6fuc!~;j},
-!
-4f?$ص0F4Pf!ׂPS3\n]3H{B9KA<?p
- _|]\R3(Ω05zDPD<EyGTS T9KVm{gv ȅW0>|pЛs$꓇h:F*nf겺-`5:簯nyK5tv>#9BpfÀ=1ի7lvfůh ` 㷛ԗEܳ%'VmC+^0zô%{T)t͛SĞ\AmfνĞ\P?XҎ"{rWx'Fn\c {mw"M8؄e.>͠y \D2ݖ.kG)ߟ)m`iVVy}ro}[{xcX)^' a#edZ~s h$vȁc著=F9"sX]YecβvӍ-Mڀ~{h|9 23,BOߦ,BғIE\TKE,2~&~+j(nj˽Mm܈Tf%p;bīhuژWi @!қ_Go;DX1!H{s򽐴qq%j2^0[+N_ZW;I3y_LYAfeu&tS=!OEb4Xy"^-ktk6ʥo})lcYE6.h^Gy'Iv~2
+Pa15~G}IzLF$
+D_.t!.#ɾÞ1ѶN,Xȫ[15]#(JKue] Qstڼќ P/>6Ѻ }6X𿝚X#V'ǻ=v)1~VH[q jvmvk4[%
+ț乪:7P'!֛q|/#O$DSBIl8d!{U1{bQFJ
+S9La$Q҂X^JXeV7PX+U;K.k6s+'?5"~|
+nShJ
+yşi%JY$F
+ЍR!a &f3 wϦ~Qo6+X..;CakK ?O@ +oMs 'a0Ajz ԈsdexP/߯?!?|j>g\F?>շFj5L|xh>|<t<dݯ0`{`ܣכo| cfTƬ2SxYwB'k9ap̺ A<#? G7\`| R35zvZC0JkԊg}' FNPc}b<Y73op6 5d 8ƀm ֦=J7gϊ"G,rRAʎ@8}upV,j¦ t+QC D"B>tg·g8 T/䱽y4OzlUᇭ#B0%gvΖXc8uT86lĦBr߷]=k56tfz <t&WތCQ | ubϬ<4xJW?}m $7B$*@y;QDQǾq84S:c
+6vS,"eз]ƂüzDפ6i \z,j:i訂t٦*1i#M
+>ڮ})|sd{:ʞ*=K %ʕs6uoh63ݡdG5HC:&ǪlПTXRO7תnX+U* ! d,p.cGahL]z.I|"uҎ{C %τt?X#.Euj-1Ǜx7[W5)(Յ2
+G/̜Ni܆zn'GͅI6|%$8Cg\S_l{_^tI=Q7Xhs$4B3je0ٽ`ˢbm^b\"šdع|N]b5ad(u@bg1Qw̴ԦŦgN>Fn}\7^CcvJ ]J5\9)^j5:
+(TjR=gط+ngU&-c!\(q,L$GB R?Dsc{rw+!g=bFz5rQ:l2vgI|PBrCP3*]44n0j}N>kXz '+: S-g{,%~z=`r
+"Ӆ`J$% ZTFق?b;}ї͂2\ Hᚧ:bHAò/젯ڣK2”|vqa=LfnʶNvoca92Y𰾲ޠQj"Ԫ (arkjT<abǕ+F!j0mҁ!Η>(ؘ o0f@7(80Thh`oҔk7ek׋Kx_BNj]3zbE"oV ~N|v/2,]3s!ncq;RySA37hF톖cpو.-M
+
+I
+~>}IO|$WWiZH@rQ^/e
+Vcۚdߪ98d-6sr#R%}kc^9yL.,#DatKo~-w!`\ CZ%9Ȭuj[sg4)"z&䀹)+(ج$n'䉶Z&]=?"\<RīxN=ymF㭏;%}8%'ۛպWD+ d7=-B
endstream
endobj
-665 0 obj
-<< /Type /Page /Contents 666 0 R /Resources 664 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 618 0 R /Annots 668 0 R >>
+673 0 obj
+<< /Type /Page /Contents 674 0 R /Resources 672 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 619 0 R /Annots 676 0 R >>
endobj
-668 0 obj
-[ 663 0 R ]
+676 0 obj
+[ 671 0 R ]
endobj
-663 0 obj
+671 0 obj
<< /Type /Annot /Border[0 0 1]/H/I/C[0 1 1] /Rect [ 161.072 86.225 357.742 97.682 ]
/Subtype/Link/A<</Type/Action/S/URI/URI(https://tex.stackexchange.com/questions/685755)>>
>>
endobj
-667 0 obj
-<< /D [ 665 0 R /XYZ 78.37 808.885 null ] >>
+675 0 obj
+<< /D [ 673 0 R /XYZ 78.37 808.885 null ] >>
endobj
-177 0 obj
-<< /D [ 665 0 R /XYZ 79.37 420.104 null ] >>
+181 0 obj
+<< /D [ 673 0 R /XYZ 79.37 420.104 null ] >>
endobj
-664 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F57 381 0 R /F15 377 0 R /F56 380 0 R /F58 382 0 R /F26 400 0 R /F20 378 0 R /F29 371 0 R /F69 398 0 R /F23 375 0 R /F55 379 0 R /F66 384 0 R /F65 383 0 R /F40 387 0 R /F59 389 0 R /F72 434 0 R >> /ProcSet [ /PDF /Text ] >>
+672 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F57 385 0 R /F15 381 0 R /F56 384 0 R /F58 386 0 R /F26 404 0 R /F20 382 0 R /F29 375 0 R /F69 402 0 R /F23 379 0 R /F55 383 0 R /F66 388 0 R /F65 387 0 R /F40 391 0 R /F59 393 0 R /F72 438 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-675 0 obj
-<< /Filter /FlateDecode /Length 4682 >>
-stream
-x]K9rWs( _@CJ$XO .`ŀ|*AU`0s/y9}o\,^E]|Z닳JH._E*u_?ϿII'ח?(~r/#^HcWB*i,D/礴Kߤ4>4fxO5iaGen6l[q{VO;Z<; FV-;^ydC#W 4r%
-nGkTeӈ<S :oiuEYokgFMcۭkE+'_>U;MlCm.~+Tkm_
-lP*dyM1Q֪X]ǫ8H>G=W"Q=TtQ$gVS-<KkSykTG TiIqGڹreNEj ͔=u]&q
-Ueb#T05 ff_(Qi)(NM~{2FyT4Lr)e\S 4RSH+ <[,5 {G.led/Ź pyh+A>M3F/TkO4m6@,Frh6 b6(t{-3SKRJg.6O<[("Q怼9w^t2. Sȭs8 BX3aB!Ot\ !au9o.9ܹucs60T0Q&a`=5ErE>#Xhs38\Xe$EB۫]^ۢӶME_5- WrQu*>miVd'Ҕհ6ɔn- #)B۷u (o=Qgbza(7ȹe?{bұ;?n%K֛m6` .jƼ6k(d~~; mo4hZY\{:PaYQҒ_"H_7VJ{"žobKԥ7|ˇ/69.WO.ާ_;j%-?K4FJv!3.u) qԕW󠰁8'e)['1ɇ'婢':)}&w?Qo4}#%Hr|?
-Es]PSjxu쁪,iAssLj✻qFs2{~v)ιk[֗$<
-THwB膴XړCz][Y[L]/mAQoVa_~Ȃ@ecuu>8pqh?
-ñۆ RX{,k*μp׶r"'cȴgiM"ve{+?U֥`W5R7:Y[)(Y|ʠJB|2'jay5wD
-3Na![X&ȃxUwO쥜EOx7jQ/woxh>mL'+U1P Q(SDvwtֺ%h2 4
-Um>PV L1OMZ[^㺾ǂ/Yl};8PTJMM\aNy*Ƿ[C&C)sYFYO[uq,3} Q0E QQ}.^@ίpuRidzai
- i
-O`hD6%Fu^4>0 oUK((ŒaTZݐ-kyW eu~H*kg4w./I
-u>qw' oE%C m>E4yd˦.Gmt@ݩIۑ3[)S t<U6.km.#H`#d{@ygHn-v.o6M_NϙʬǴ%x5S'@|ӴP47f(
-e${_F)%qK5}݅%@3zfĽ=nPPK$#-<ͭrC& A4P;FQeb@rycOraS"2j,e޼J:-,5<#Fu[ A /6A?N6>W\<.)5=5ݓ;q}ս<Yq
-0RXg>x!j5 v35[*b:{GVtm:ѯt
-rttNExQ-'u\*RVV
-r;aP1<(<q(ÃJ
-x\'"@{X;}zȬ81s@h/ lu wޡ
+683 0 obj
+<< /Filter /FlateDecode /Length 4629 >>
+stream
+x]K$ ϯc|hE v{ $Ed l%@=Rz{ǛzT%I>?ćO~7O_89ϔR'kF>~: qyT>/oO 'IkOV[f:^`XoHqǟN??}fI5{q$ZoˉqDD#bZٱUf۪\a
+b#(sXE噱4l 1\(h)1Es_Π%Jm' j~z s+RD)>dϑ&lYzcѪWJxפ
+005iqbjXո
+<-_S?doI^qǞ7/UZ#$+E+G E)y}G%jY
+^%#CYϽJ,sT]JbgJl\SKj9SZoEeud=R?E'wϤHPS̈l'>ff~ub Y^M / Ь&/-*k3 shdhiN*nZ|lUŒ~`Wj&.QW0&"NZ --E⫡;=Š X}l&9qS9fϜSt|h
+%f1JM<JAbw43.c%V3 Jc1ޱe'8#]P>@)g;\KgKrC.Cq q8уeBT`9VWmWG"KNR[85k55L^eOܤeal0fN_oOxL^eo]շ%o5LR`tN3>Ftnձqў"=u \c{mE?rkBN+?]sE(mWXF q4ez+MC{,Fd Z&-Y´\zv^iq3" ?`/jqQ{4 dOShťӧ~zpc`0ݕ$O?WsC->">Ο`.Ng &u!J>Ou&ߵb#
+0/mNsoh`O
+I&& .4(&x-D;cBht_cEisv0*.mE**5`pԨJ4u^>[Do)|v`Jܹ|sfm2 ]~1lo{҃@‚6ų ; {T\L3xyo^\ZTa"
+oE/ǧ&pA K![gT/L߶_s#7)'%2AL J9mVp<CyS|dx}
+~q9a0g!M4SAtɩHG6I:4 J*I
+ <we7$
+O\!Hڴ4JjlTx[ 5"7,:p' /r*nũDQP,c+E([9d!Eb8-(m賢)8㲊2#wBy&t/Ng)g:EFIڅ/Sc0\x:Y&4Hifz=1{]yƔTfD oJVJN;#:Ԩ\IT*5)誚ziw%k7ƲB)ȗ IYmFsa&EO"eynxJ^(ԑl9-ۏm֤ J!i!,WIɷ3t.wd
+3 rliq$ "IJݞ r[7iIE8{rxYVOvF `rT.(Yݸѥ1an0(%O niY^oJu^hLwk\Z
+H|ȷ86F+(X&j7ūzf 8L;FY[.a?Eyk
endstream
endobj
-674 0 obj
-<< /Type /Page /Contents 675 0 R /Resources 673 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 618 0 R /Annots 677 0 R >>
-endobj
-677 0 obj
-[ 669 0 R 670 0 R ]
+682 0 obj
+<< /Type /Page /Contents 683 0 R /Resources 681 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 619 0 R /Annots 685 0 R >>
endobj
-669 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 155.393 468.202 167.348 480.157 ]/A << /S /GoTo /D (section.9) >> >>
+685 0 obj
+[ 677 0 R 678 0 R ]
endobj
-670 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 498.301 468.202 510.257 480.157 ]/A << /S /GoTo /D (subsubsection.5.3.3) >> >>
+677 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 501.071 483.206 513.026 495.161 ]/A << /S /GoTo /D (section.9) >> >>
endobj
-676 0 obj
-<< /D [ 674 0 R /XYZ 78.37 808.885 null ] >>
+678 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 429.774 471.251 441.729 483.206 ]/A << /S /GoTo /D (subsubsection.5.3.3) >> >>
endobj
-181 0 obj
-<< /D [ 674 0 R /XYZ 79.37 553.861 null ] >>
+684 0 obj
+<< /D [ 682 0 R /XYZ 78.37 808.885 null ] >>
endobj
185 0 obj
-<< /D [ 674 0 R /XYZ 79.37 160.457 null ] >>
+<< /D [ 682 0 R /XYZ 79.37 553.861 null ] >>
endobj
189 0 obj
-<< /D [ 674 0 R /XYZ 79.37 120.953 null ] >>
+<< /D [ 682 0 R /XYZ 79.37 163.506 null ] >>
endobj
-673 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 377 0 R /F56 380 0 R /F29 371 0 R /F20 378 0 R /F23 375 0 R /F69 398 0 R /F67 385 0 R /F65 383 0 R /F55 379 0 R >> /ProcSet [ /PDF /Text ] >>
+193 0 obj
+<< /D [ 682 0 R /XYZ 79.37 124.001 null ] >>
endobj
-684 0 obj
-<< /Filter /FlateDecode /Length 3410 >>
-stream
-x#1  v`S"Gwx֨,} ?\ VZ}o^8+ߗ]9׎O 38oɹߥ Fj{˫.?-aqV$}ݷ"x&qO΍nXKbD\
-M'lM=?)%-E-q*|p_SKX7G|P^3F>yg.LUq}u>o%ӛ0Q&'}x'g ˉ{{tlr}=32J j{o^*OJ1rtbHitT 
-ӝ'n4_g4|Q3պ
-F 崳3'qYFJ)5_Y흍1ۑ(;@A;E=JEjHZQYLǨI{W3Ŷ
->CޣFڋ|P#{HI$o1Cqu`j٦RKh<YWޝ2Fd1YPn;aW>Yp&7'-^7ST޼gz#s<NMy'%?I}MK W(wW}k+~V{B+4yY]S/Y QE8b_z8L
-u9?c<)|LzU(ß?}Woxcܕ3LM/zŔ$1 5#$nB2*<dԎ@iJB䙼#Y)ahΖ,hkPma5BhX@=VQhYrb@LM
-Ey7PPΉN&`KǪqEeVba䩢$C 2q'\z5ny Ib.K NN{0/
-7g$iے[̟kb
-޻CnfbA Uy{ǛC)ɨwMr{f~w j5" Rim e?Fpm&l><o-Wm+Sx-(xcgq]KNXhB7oxVKex}6NI!c=z(5vP#ܲ3a?#a3iFQ>Gˆ{Hwa4 ]88E$bƙ55CC#;So*a\w Pg?̩7Uo;'tEG_ȄL
-fM~rnչvD?bnJ2aG򼁡id^ p >?l՜,ܗX2«>21p,TQR m!ך6xl:H/ѾK.1zm}cCP͌`yz#B!YH?iUc`$=:2;S?D޺O蝱PMRhA2GY
-µءѶ xlox2RpՋ ٰWo<"C8.`W(Rx1D:N4"Hhcw8aTfD4tD[\]\[z.(`['sos6ć.4^^F}]F _::)2 *pSB '.<3"1B:UY%mJRO7FjiPܱ
-gӵ &ձuM,[;sp_
-^Kξ۞I7
-M_@%Cj/p`1Ŀtb_Gg󎇧~~L鑥h47U4_Uӓ:_9MsWP
-z:xi5a}04֞5 #.WQy%uzč<
-NOfRBzFu&Ky^eĔN`OHlJ|\IF iVp4II;6pۺ*Pf? @G9pX큿akC!Xz3kf?O~:Mtyӵ4'ϋA3X;HL2Pi'sD-uLURpNz?!-)K͈5Ws#{w&MwfW/
-&#V ⩜K]sT-t_Jz6< pbՑx7щ5e/q񻥵.0/\/6;)MWZӶ]TWAj˃euɔN߰uP^c8#pEtMF*Q)j iN&?Al똎t )fퟜ!u!~{Qz>M*6Ⓢ(uDP"/4٧WWWdy1IVDC8_jtj"0_Yx!{[_8\xDŽWclG@x  B~^zf!@Ai U$ЯXu|
+681 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F56 384 0 R /F29 375 0 R /F20 382 0 R /F23 379 0 R /F69 402 0 R /F65 387 0 R /F55 383 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+692 0 obj
+<< /Filter /FlateDecode /Length 3412 >>
+stream
+xɮ#_h$jk߂\CZ(Q*[r $&z'y󛬟){":?)|!O
+|6}+ݵʻBtSj'K}h&]~_cVz9V?caUƿ@[ӯ# -AITON7V//eSeOۅ>uF
+
+gie󔃕Ù8(- o^JZxRU~[8TP }sbW n
+_m_,**S r0P{5AKCu[88_6Bɲ伯R`6ҡ3]{^@dmXFJ]eZSPq Z]f
+dôlUk{uǿ3R$w
+M-PzvEy<fT]Ŕ[_Uv<OwT
+f>`Nv<$gs$´'8X8]+k<oXw.i݄!kƭuY5VvpOQ? qUR
+Q{+`7,(pw9fQϐ,$wAgn:A3"v^~.Xodza`2̶JJ_3:Sl[kG˯$=Gkaw}.;a
+ӽijQ\+E{iSb?vRaD:c|&`GÜ6~$!](7GN~9y7xݞ?+\#a]S_< V::OIy:YVMB!LrsMr㏚  E1My#:)Pś5ɱ9VV@qÀid^ H>x<l՜׽X›>2쐆L1JaVo oTgk um,_}--fR k͌Ɔ FaJdd.,~)eǠnxztlvN^?wa5Y4 u }σ!vY
+Z7Jɼ
+03K1Vo CT<68mS5^vQ\
+pT0`=0ۅBJgQڲ;zEa CUVOi[ׯ{ܨht~28C&_md4^ER.#tK}*`TׁtO
+Z;NGR÷XMiIJñETJr7S1i
+E?R̡L [S*5[T3yI._: ֶ~:=ZO3=KG#s e?3TCM.Oړ3F?VI-pt4p )3MI^F<ѿi4krsifOҁ`6oߢ*/Q[5oQbg#
+gkqk`.qP?\})>3Z `yOf?lkt 9qf3e5?;;#:,CA`'[Q~>Ͳ.'1(:V":4gVW_exK1Qv!b
+ݯj0N>kėtք)^i=-m3G<W `dsy (oD&_{4 ]
+q
endstream
endobj
-683 0 obj
-<< /Type /Page /Contents 684 0 R /Resources 682 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 618 0 R /Annots 686 0 R >>
+691 0 obj
+<< /Type /Page /Contents 692 0 R /Resources 690 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 619 0 R /Annots 694 0 R >>
endobj
-686 0 obj
-[ 671 0 R 672 0 R 678 0 R 679 0 R 680 0 R 681 0 R ]
+694 0 obj
+[ 679 0 R 680 0 R 686 0 R 687 0 R 688 0 R 689 0 R ]
endobj
-671 0 obj
+679 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 205.306 733.664 212.28 745.619 ]/A << /S /GoTo /D (section.9) >> >>
endobj
-672 0 obj
+680 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 228.048 733.664 240.003 745.619 ]/A << /S /GoTo /D (section.9) >> >>
endobj
-678 0 obj
+686 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 124.899 653.245 131.873 664.403 ]/A << /S /GoTo /D (table.caption.1) >> >>
endobj
-679 0 obj
+687 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 147.594 653.245 159.549 664.403 ]/A << /S /GoTo /D (table.caption.1) >> >>
endobj
-680 0 obj
+688 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 410.528 363.024 417.502 374.979 ]/A << /S /GoTo /D (section.9) >> >>
endobj
-681 0 obj
+689 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 434.1 363.024 446.055 374.979 ]/A << /S /GoTo /D (section.9) >> >>
endobj
-685 0 obj
-<< /D [ 683 0 R /XYZ 78.37 808.885 null ] >>
-endobj
-193 0 obj
-<< /D [ 683 0 R /XYZ 79.37 620.254 null ] >>
+693 0 obj
+<< /D [ 691 0 R /XYZ 78.37 808.885 null ] >>
endobj
197 0 obj
-<< /D [ 683 0 R /XYZ 79.37 422.869 null ] >>
+<< /D [ 691 0 R /XYZ 79.37 620.254 null ] >>
endobj
-682 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 377 0 R /F56 380 0 R /F55 379 0 R /F69 398 0 R >> /ProcSet [ /PDF /Text ] >>
+201 0 obj
+<< /D [ 691 0 R /XYZ 79.37 422.869 null ] >>
endobj
-692 0 obj
-<< /Filter /FlateDecode /Length 4636 >>
-stream
-xڽ\Ɏ$ WF
-4`=7PTV]ET?//ீE\D[}qN0.߾~V_8S/_sa%//aw|c`lnjv_;, =|: Ʉ5~!aRGoe=^]/mz/?῁+ُ_g?~ss#?\GaGf=#+,g Vx/{ l>(-~~e$2fbnsFk;DqˬgϜ 8WEyUXl%+t 5<8hI:/V: ekikH=~G8b_{H#mʈ0HRZ7T^dGIIk݅e)
-[T^i2;+&>fKͤD&$QG%љ9 xe |$޳r@N1%;3mvəUO, i~@
-@*>`ߌ
-q3۪o|/BI~ KYMHˤ v9و_+8\9A; Sd+`LZ> ʆ}O ` nCiKsK#zx;Z8Vo,:S|T8T5rȪ#/}P%&.yPq4tL]&#
-/JozFk+=iBo{5 !{ftY]߲K`CocpazNž JRC}_i6*;1L,λ)D}}ʧRf\
-Tcߏ7(;J#WIp!<0':cfa
-i!46$s p 2@g6@EٔpE dtl(wViK )!@/!LJ
-d@߿yYf>5Ny?J+rzE97TD79dw5(a,?>1"x=R369O17K2*u[u͚W8lI] yZM$c;5ݹOW`RTn+|y\~LRik/r+۹9%KO1S=;"+B1~v;|8qUিc5<2x+hL
-QxW'(q7`+nys*+0.`>}LJ77:$n2$}hjԵF]wFlOaS_:=0-|JMw>ADq#@3g flfiX`$;*--NդYIJrO7M˃6Q^oHD׺ - Zfe!!myJ|4m-ұp_{?$źW<AGrV+ΜN<1Of 2 Ak[8#
-za+3 6iu0T̹SS'Tj: 2cOfMߴ]OMwOW8 }^@.`L$019F!#(e>kcU72{)T1؎ZCE][_AܫsV %6M7섹|"|p*OsB,2q1.QM;I0Q)@k¹0u!eg7 i3v&)`)~
- *4gjhRdSqwA?qI,.wbCN9͌MSG 3!H"v)x::NnRNj27kC*kcTZx'叧;:úB9Ji„W^V24\gRCK2[k!j~`2h*UT1bB3@)"eL˹sw pg 4 ZpԱ6Cvv
-(R|mifϢ;GywV$[.RG7⺐6jbq5/CQ9Ku\4بf%ܩj͛ά̛f1P5\c(׳u5x'[$S~()I96,y_)sex!
-x;1
-҄CiVw ^i~<n~lUo
-i9 hc0vx^IyOQ3?fn&~Z\ЎYƶ sKoqQh 'h^d5u}Taz^qk8]I=om3
-Q?Nk~„и 7/X>=7p䀞c anڢfd(nfx3q|<<JOjeUokv{<._0VLWJځJWUǏT[1
-
-endstream
+690 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F56 384 0 R /F55 383 0 R /F69 402 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-691 0 obj
-<< /Type /Page /Contents 692 0 R /Resources 690 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 618 0 R /Annots 699 0 R >>
+700 0 obj
+<< /Filter /FlateDecode /Length 4639 >>
+stream
+xڽ\Ic ((n$F4L9Z(Q{jrpW=(" ?+_~<V_K}/_՟.T˗\|<xYK|">p悃o0cF;/vΦB2!o_HkX4L*, řM3Xuni^987^uva>r`E`NBɸW/rW_F"_j&8x6gf޽SJZl>pF̹
+@Qq&`65෇{I`LDsV˼r-V<٪UfcT!{!0CV4qGpŤlȤ]]`=?:3'⏾SzYC,,\ SLIL[Arf[C@1PZ,*|MP 1(T T |Eڤ7Bvb(*l*ۯ ߋj!ÒCtUF,2{AƇ]aC6b
+WtNF`P*~'>Y
+Vd`aS
+#pĈ t;#ސr ">6nbpn䓴Kחw ™(/gO2s4vȁdx^}@po`m ( pqG
+gZQК`+|>!!ӒP o/uPcv"O9# #zGdO^6"B\r, қψBquavEg\Qd̀2gX嵍A8s+f$)r&q0t(Z{fy+ɺ!h\uK؟ZǦmU]$.?) L&}*JGDMeَG $mke> g+. Uӌlw<%huK;C2߼,+s
+RO_q'=Tۼ
+9t_u -Qx EN#6ٝk 2kOcOL6^ԌMSyL4{ݖu_7bVd`}6tमͅ<i&xКܧo`RTno8y~LRik/r+۹9%Ko1S=;"+B1~v;|8qUিcx4<2x+hL
+ =^k/Wp
+i(m;P!YlaJL~Ķb#<UT}ib`p$ۋz&~owkY=>R 6MoLq֥$YǨ:S6@;Ja6z~uBY͸MZ];^§nR s~peػU2cNP]M[ݿw}L)U#N'#hG=\\w8>vfRSbğ>PJMW~n#'"1d 6UXGxIrv--p<q6{9'FHCWSSNmr]Cr)4kQٝĻۼ]lAl+Q-O΂Uq'q]LV51D]9Mu\4f&ܩjӛ.Lf5P5\c(׳5q~o<$Ii<ۯӔ92}Hb;
+QB<ax4Q.- ֏Ԛ@q3 ׺m'L4o} xG%N9& o^*t/
+7sC L$ȟGV>!*Yߞ܀bR}^璏^akI͘|os6 c{1X
+Q/&] B.7\d`R@(>9ޯ|mBn7wYNLw2ߏ5fқZZUǫ"E,êg2ƃCⷅӕ5v`]W
+endstream
endobj
699 0 obj
-[ 688 0 R 689 0 R ]
+<< /Type /Page /Contents 700 0 R /Resources 698 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 707 0 R /Annots 708 0 R >>
endobj
-688 0 obj
+708 0 obj
+[ 696 0 R 697 0 R ]
+endobj
+696 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 154.915 234.862 161.889 245.811 ]/A << /S /GoTo /D (table.caption.1) >> >>
endobj
-689 0 obj
+697 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 178.741 234.862 190.696 245.811 ]/A << /S /GoTo /D (table.caption.1) >> >>
endobj
-693 0 obj
-<< /D [ 691 0 R /XYZ 78.37 808.885 null ] >>
+701 0 obj
+<< /D [ 699 0 R /XYZ 78.37 808.885 null ] >>
endobj
-694 0 obj
-<< /D [ 691 0 R /XYZ 230.167 742.105 null ] >>
+702 0 obj
+<< /D [ 699 0 R /XYZ 230.167 742.105 null ] >>
endobj
-696 0 obj
-<< /D [ 691 0 R /XYZ 235.836 730.056 null ] >>
+704 0 obj
+<< /D [ 699 0 R /XYZ 235.836 730.056 null ] >>
endobj
-697 0 obj
-<< /D [ 691 0 R /XYZ 198.864 697.254 null ] >>
+705 0 obj
+<< /D [ 699 0 R /XYZ 198.864 697.254 null ] >>
endobj
-698 0 obj
-<< /D [ 691 0 R /XYZ 198.864 677.06 null ] >>
+706 0 obj
+<< /D [ 699 0 R /XYZ 198.864 677.06 null ] >>
endobj
-690 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F67 385 0 R /F15 377 0 R /F79 695 0 R /F56 380 0 R /F55 379 0 R /F57 381 0 R /F58 382 0 R /F50 370 0 R /F40 387 0 R /F59 389 0 R >> /ProcSet [ /PDF /Text ] >>
+698 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F67 389 0 R /F15 381 0 R /F79 703 0 R /F56 384 0 R /F55 383 0 R /F57 385 0 R /F58 386 0 R /F50 374 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-702 0 obj
-<< /Filter /FlateDecode /Length 3096 >>
-stream
-x\K 19FP蠫4H{ 9$`NOelcSU6%HH,\0gqexH'Dx!2EI$+R1O{I)e|pA-?c XԌhAHKyK𙱨FD؞|`~Ufڶy^"_w9-q{&
-Q*Jo_n,2v5&>:Y"8/-nYYaU΁
-na
-0c#]gSZ
-4 {紥@s,@Ky:,C08gʼn\(Up`C3hӗ)|ϫߛ>=YW~ǧz3S\dU̎ӕ""H<܂J9c58[^"MtdB
-I&Qj5l(/+DR
-*yRPlW͐4g(/+>!i퓐 k C(QX}LkakD3_-fsO%IzEʩV3hлSG X0̑޲/Ay@(Fm!̟Rq{t$f/}{
-VɓȀ@ذYd"yLUĨPyjbvR s
-B!մUZ;F}R
-n789!<,D~o@Bzp$⺵G
-d5,E|Ih)(H\Xw}޼cΤO cbb^} /l#uQb.7Fn~^?|0!c4IyæfcPFEtXXJ}c27P{j&>w[ϙ&qdJM\z>7~/f״
-\a,:v}/H蚀jz= 3 *A $ڝul`ky'ީ+jaԾ7 QNLOG1BYΔ; C(wA
-v6{
-<S -
+711 0 obj
+<< /Filter /FlateDecode /Length 3095 >>
+stream
+x\K ϯcrY0`zڽdķŞ6HRWu^c\*J"?Iu?=QսwE/8|"za0]>B67JR/M)>^]^; H~KQ(nF+aR$Z.XJ-aVl_>cuohKX{3׌of窖Ŷ߾Tun{l_Y| $i_#~V F,)"c
+اUna 8cV!]gOS[^Lȡym}#:DhjZ@k@"CCVȕ2Q696hʧ6}ڐ x>G֛Jd<HPv֜HQAN5T]c5Ggp-TB OG<Q
+K{,\<7ň4%Ł7s!*QTS=70+0C%Ͱ~Y +axx:QSQmc#RrR}W *q^<GnkVn j^̦pAJS
+N1xeѮcjK?͇;S>!igak"G(S!{Ʒ'%
+3<P
+xWn_J}=>>2G7b#$ZC~- h H62z03˟kyDGAb/O_/@S?O[zy_~gt
+xA(YJcbw*~C/YZs!K*U
+G*[~ GX [G5t .9BT?e$qt'R+VJ@6"F-CX"5_n ;u^7X_5X>~7 ’'s](Į= VJEJ캙ƴFĉFiǾͬi .pp-WJ?9-Lg*&뜦@!gyDaf9 ME5XU^\Ow;Ȩr9Jo55uhMɻ;EfDcv l-,U|ih8ĸRucnj]h:@$ԺV䧍]:_Ģ'܇b)wF~Q?z0#!h(E͇MͦC/*m]7xa DAYmm=ڮ8 ԑ*7q<Q}`^̮ia7
+b%Z~Kw9n&+7m^rNF-2;ʛjVYضwڍ~nmzeElkoؔH#<ʧ\):"i;l2!TݴX~-np&T) ՟Ҵ (:,iR'FHG' =s}m|
+g%ScO |#+4*6<!|/4`@ۨۇڼD|  y*fH˭r&ȬЛޞ$9cS;õT@!]
+gp=n,Nͪё8c۷vJ3 ǃwոsJt#^YOQL,gJ.Z!x< 9,w2L)dž^ԵXW3~sҶ|Q$%5{|lKAcgnZoN}EY֛,v%-y^8$U&!?,NiNC"PJ;mMMr+S&EtFUDڶ"{3oibڛb2d9)Xξb]iȼΚyz"Q˘FL!69Ņ- ߤ
+KK0ոO\LoIt.P!Čw},=iB"_ IC<QBr]BałXiuKP6iq#i` *L/aM_ ]IUatkqX)/hӉKIzb\,{эz^Wzqv m'تO :1!iuLc%,%Go5_!kss q|TߺǨ%V ~\<@6ߎfhAu gh2H x1}[?׊ Pu ~?
endstream
endobj
-701 0 obj
-<< /Type /Page /Contents 702 0 R /Resources 700 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 710 0 R >>
+710 0 obj
+<< /Type /Page /Contents 711 0 R /Resources 709 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 707 0 R >>
endobj
-703 0 obj
-<< /D [ 701 0 R /XYZ 78.37 808.885 null ] >>
+712 0 obj
+<< /D [ 710 0 R /XYZ 78.37 808.885 null ] >>
endobj
-687 0 obj
-<< /D [ 701 0 R /XYZ 79.37 598.045 null ] >>
+695 0 obj
+<< /D [ 710 0 R /XYZ 79.37 598.045 null ] >>
endobj
-704 0 obj
-<< /D [ 701 0 R /XYZ 316.728 517.227 null ] >>
+713 0 obj
+<< /D [ 710 0 R /XYZ 316.728 517.227 null ] >>
endobj
-705 0 obj
-<< /D [ 701 0 R /XYZ 365.552 505.178 null ] >>
+714 0 obj
+<< /D [ 710 0 R /XYZ 365.552 505.178 null ] >>
endobj
-706 0 obj
-<< /D [ 701 0 R /XYZ 207.228 436.785 null ] >>
+715 0 obj
+<< /D [ 710 0 R /XYZ 207.228 436.785 null ] >>
endobj
-707 0 obj
-<< /D [ 701 0 R /XYZ 207.228 414.817 null ] >>
+716 0 obj
+<< /D [ 710 0 R /XYZ 207.228 414.817 null ] >>
endobj
-708 0 obj
-<< /D [ 701 0 R /XYZ 207.228 401.039 null ] >>
+717 0 obj
+<< /D [ 710 0 R /XYZ 207.228 401.039 null ] >>
endobj
-709 0 obj
-<< /D [ 701 0 R /XYZ 207.228 378.952 null ] >>
+718 0 obj
+<< /D [ 710 0 R /XYZ 207.228 378.952 null ] >>
endobj
-201 0 obj
-<< /D [ 701 0 R /XYZ 79.37 331.043 null ] >>
+205 0 obj
+<< /D [ 710 0 R /XYZ 79.37 331.043 null ] >>
endobj
-700 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F50 370 0 R /F66 384 0 R /F15 377 0 R /F56 380 0 R /F52 372 0 R /F79 695 0 R /F58 382 0 R /F69 398 0 R /F65 383 0 R >> /ProcSet [ /PDF /Text ] >>
+709 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F50 374 0 R /F66 388 0 R /F15 381 0 R /F56 384 0 R /F52 376 0 R /F79 703 0 R /F58 386 0 R /F69 402 0 R /F65 387 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-715 0 obj
-<< /Filter /FlateDecode /Length 3486 >>
+723 0 obj
+<< /Filter /FlateDecode /Length 3487 >>
stream
x\ˎ ++Q  vwA*zQU]mO,hJ$")j0o~߿}[=7/ڿ7Y%Uo?w);Ҩ=O]=~Rjmy,#pe, e gGx:xi 1~ǡ$=͇z^(W24Vi/xW9`. hH+ګ4x暾 `y9do/Qh ih:-ev$,ԧy(nٚ-Y?ʼhJjJ,LS-UkCǭo"M77J?3Uwy}D9ݴʸH۶(ĬQq`0Fv00/–ŏ-,MPދB5)mfʉd/
ͼu}75s<O JFD&.R;w_;nxdv}UML1cdi1=u%F%%0>ʦHz릷4fF\Eh ^
@@ -2819,80 +2860,86 @@ x\ˎ ++Q  vwA*zQU]mO,hJ$")j0o~߿}[=
ۢ$_:65T3[*\ ?hWhˬo)YqGT/T2@;pL,e>OC@`}E7uOtje cA>{!-Ex~4mK0QǽjנlխP
--H~D&ֵmͨ&MF7vTIMy WzS@wXbX;VV TiÔ/f_ +:PqӬ? '3gXb1,-‹X蠈F`'<`dѿ O4{{4?T6v@23O7ZWN]
-csX^ì.V7%3vPh3*vxGggA@!1/f{:<
-' J@U$"+\SLVR~,\r]Ws fHEa}eOFF8SnrZ{ :즬t1fr=[mX<E B?06[ACAxX"^9 VʅA|9yR
-nXUapSvޯRwINˍWzGP~hw>2'pB9A!⮐|jBF+5x\Rw
+' J@U$"+\SLVR~,\r]Ws fHEa}eOFF8SnrZ{ :즬t1fr=[mX<E B?06[A{[`(2h\I'UQ NL{Z]ֶfr:YۯC FF§wPFU7Uo*ud=ox}y
+i˧/d`Q%|7I \zg_1
+>QbZ8>$f16*nZE6e߆W
endstream
endobj
-714 0 obj
-<< /Type /Page /Contents 715 0 R /Resources 713 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 710 0 R /Annots 717 0 R >>
+722 0 obj
+<< /Type /Page /Contents 723 0 R /Resources 721 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 707 0 R /Annots 725 0 R >>
endobj
-717 0 obj
-[ 711 0 R 712 0 R ]
+725 0 obj
+[ 719 0 R 720 0 R ]
endobj
-711 0 obj
+719 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 507.158 110.852 514.132 122.807 ]/A << /S /GoTo /D (table.caption.1) >> >>
endobj
-712 0 obj
+720 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 114.907 98.897 126.862 110.852 ]/A << /S /GoTo /D (table.caption.1) >> >>
endobj
-716 0 obj
-<< /D [ 714 0 R /XYZ 78.37 808.885 null ] >>
+724 0 obj
+<< /D [ 722 0 R /XYZ 78.37 808.885 null ] >>
endobj
-713 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F50 370 0 R /F15 377 0 R /F56 380 0 R /F55 379 0 R /F57 381 0 R >> /ProcSet [ /PDF /Text ] >>
+721 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F50 374 0 R /F15 381 0 R /F56 384 0 R /F55 383 0 R /F57 385 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-725 0 obj
-<< /Filter /FlateDecode /Length 3525 >>
-stream
-xڽ[͎ )`ڽނS%>׏(SU;qTERG%/o{闇 g._I.[ZwJH._]Jno~O4FKT_>MGúJD.UR .gphcҵew=g eb13DzF*hCs$$A#7\-+>ho௴:zsԻ̎8QjH5e޳3lע
-_5MM2Ea4uaظpú+)<-J"YU4\xN2eKv™Fna#wPVGwSuŁHךY}ZzW/A4ovQЀpj3w7:|ݽ":Sݒ"LA4or',`ZtA:ڨ9(ا&D#U0R.}iJE|Eb)+FQZ$%{'hRi;f _
-,.JuD3D)Bߕ F+VD( W}Mg9>Ao|lCJҵJ; 6yU@dW@ svVytgiy~ϒ[%0Y@NT8BOA
-`eZJQ]]i!W>5*k)>'mn$9X [F5w4ӂc!k6sd˚Zx
-ZᴙhGӹVHxFA%.+7˘󅑛aY{ɟ&.$l#)z7[[NV1rDkX*.i>ޑAYF%Sޮ2ΎkVR]D|[+<yԵѹiV"PwǮ g/AÝ!<֢/Vw
-t6aZ^LM%4X,n[YqEH}ƄKy%܌j|#6*oǝUT&-<Z$W2?E^OX^৔Bњ[g5jϑ6R/J5[ŀ"ڧx_*־ߡᙉ12zqlfKa.^8ƙ ק,F9ĭy!9Ie#T1\Ƞ+~6I)\s(m:/hl$v#!Q~>5{/uO?4!b$Z'A5<bz^DŪY!cN:C|LhN%җJEjR֪mLi@SbMTHA)/_[">4E&${~uCI`T4 +CO#=;mUPꬼTӠ
-K̍7\t`
- { rtJD=-e׏|n~d?YVKl6rLTL݃)co?GtZR[5B$M*vQt 1ZDS P}ʒO <]]#q':և-痴XL5?^aa[(i^gގ'C9s riaZ,>
-3/Z*B kFZ?oĝ4Ywљ HO5]INLMuάMa =/ōNŘSflB1#'B,^w/)FLeҏs<T~Rm;*5[7u++D N6ՠ`cf&_:&~Ζ#0ٱiA}3s͚08"{k&:kKOtǍA]1:ӓj7l}Ydvb H[Q:x3Wintz^oNZ3%%Xt3m6l-{zm h3m'yWFT
- XAu_8w6 0}ip}ga<?;fk<)J:Gv&SPى,]ӿ:[,Qߺ{4KO뙍WJ݆j@n}\75cK:^$UQ&AA݃?0oOF)$ZaN"_ϵ?Wj^9FI,mS'[2<Co-?F$h* i߫b~Ю[k8:k" zn/ǾR`Yy<ϟ"D@܇#jA6WUGf T[ˏjjбEV3<&X6J;fxGΦ~?RPZ o3+~B4Ey#}oK ߁(
+733 0 obj
+<< /Filter /FlateDecode /Length 3524 >>
+stream
+xڽ[ˮ +W h\=x7U&^dߏ(nqRII]Or}CK3oyQ-;%So/_R?VߧJR/ou
+n&#úJ4]JtAJ \?>sƤk8{x$-^Db&h͉x)U*m0 ,h|Jc>R#̮] \Q:nWG|D)#p5oa+"&]0A(]q4
+NK
+מފJl)q&y:JHy!X!ͿmZŃ8C'D%2CPMqHv7_8>!}NP&9λ8 eNA`hT[i',<*Hz044Wx <?ZOЮRmJmږ) ACS6]I5mdTΪrX$e…8S$h'YJtx/&8[|i
+l5tg6UW[*Xp7ygnAHOsq3F NmS&﨎'EwoŭHT$9 MDZ 'XY=ݹ }௎qN(=Ω QI3ET@u1:˅mnȭӞc=v4s;f< _r,.ru)gR6[+g  4?0 &W6eV5zfk`; x +
+JBKft+(2
+r۬ݶ^NiС?˔+-ӌؓfs;fYWAۦ~#6/IQܰyL_ob үZ
+4מz4k`$ْg^t1_OYn iA6w۾Vi=g @ YyT"Uλq*歞g%Z:EDG@]f)ui<\*z\ `iүq:r蝡dXD?:S]&%]f}~dIyR&lCk8 ^ M%4Xn[Yqqom ܗ5&\r[Ή|f綷PQy;D2/4IR'\M{I<zaB2 Ej+n}ry=G4_zY=[(lkrbm}IdZ~;g&hiUNZ.i;/xWz?Ll}^XT42[Cs6#EG)+acPASMR=qFLi̥ шzs4W_O?%4!$Z'F5<`zYgU12&+U!cN!>"+M)ERb0PMJpZ_sWA^ sJu*)0(%*Rŀ*(45 Yӫ*HOHοZ]~kd{xѭ
+J^:bT!`ᚹzSIE3F %ߡZ V3PR8%}
+&nRhjGp5K4>%WS|Z!pu8XhP ]cʃ]v~ K:RUĚ0j/԰v/Zce(GβVn7Y; !̜Ky8GażKEd8Oq6-B::sð)d VUT%єVjB' m}wfMޯk聵Nc6cBtNM] Ō
+'Κ³-ӱN("iLpy9~aqi#Al3gJ3~=E
+( 1~XC8:joQRmSb?:ȪF{D )x|tOJ(|﷋:l/?-lGZvLXD|em5;gזlf"} ]+5=m]&GE"a u##I
+k& z1wPe,+%1:.qna뵫1>.4y
+,]{gE jAZat\U[nXB xIW
+qgMYp,h5S˓s|4; D!p7[{91 ?'
endstream
endobj
-724 0 obj
-<< /Type /Page /Contents 725 0 R /Resources 723 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 710 0 R /Annots 727 0 R >>
+732 0 obj
+<< /Type /Page /Contents 733 0 R /Resources 731 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 707 0 R /Annots 735 0 R >>
endobj
-727 0 obj
-[ 718 0 R 719 0 R 720 0 R 721 0 R 722 0 R ]
+735 0 obj
+[ 726 0 R 727 0 R 728 0 R 729 0 R 730 0 R ]
endobj
-718 0 obj
+726 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 369.124 508.381 381.079 519.22 ]/A << /S /GoTo /D (subsection.18.3) >> >>
endobj
-719 0 obj
+727 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 351.241 357.472 370.947 369.427 ]/A << /S /GoTo /D (subsection.13.1) >> >>
endobj
-720 0 obj
+728 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 386.668 357.472 398.623 369.427 ]/A << /S /GoTo /D (subsection.13.1) >> >>
endobj
-721 0 obj
+729 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 310.412 244.527 332.887 256.482 ]/A << /S /GoTo /D (subsubsection.5.3.3) >> >>
endobj
-722 0 obj
+730 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 348.609 244.527 360.564 256.482 ]/A << /S /GoTo /D (subsubsection.5.3.3) >> >>
endobj
-726 0 obj
-<< /D [ 724 0 R /XYZ 78.37 808.885 null ] >>
-endobj
-205 0 obj
-<< /D [ 724 0 R /XYZ 79.37 490.054 null ] >>
+734 0 obj
+<< /D [ 732 0 R /XYZ 78.37 808.885 null ] >>
endobj
209 0 obj
-<< /D [ 724 0 R /XYZ 79.37 330.558 null ] >>
+<< /D [ 732 0 R /XYZ 79.37 490.054 null ] >>
endobj
213 0 obj
-<< /D [ 724 0 R /XYZ 79.37 291.272 null ] >>
+<< /D [ 732 0 R /XYZ 79.37 330.558 null ] >>
endobj
-723 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 377 0 R /F56 380 0 R /F55 379 0 R /F65 383 0 R /F69 398 0 R /F58 382 0 R /F40 387 0 R /F59 389 0 R >> /ProcSet [ /PDF /Text ] >>
+217 0 obj
+<< /D [ 732 0 R /XYZ 79.37 291.272 null ] >>
endobj
-730 0 obj
+731 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F56 384 0 R /F55 383 0 R /F65 387 0 R /F69 402 0 R /F58 386 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+738 0 obj
<< /Filter /FlateDecode /Length 8481 >>
stream
x]K$qW<tF9&6Q|Z>X>86LZ6I[zg״+$}x?*1_~̗3>o^M,m拹er钢h.|yyK컫<>3JWtIb_AI)& /U#,%1Fd)fb')/l2U/MYtsc;ϽJ
@@ -2902,263 +2949,268 @@ vrf͗>J<Ե7ϓ] [66 ҶJ#^٧)ݒ/7dR\#
++f@!f =f 3f^7jaT|!ny=CoДїhZt80'7cU~DO$q,n9ZCp8疲5U~,7/yc<a%rvo<}ВrZx}%1h/|sUiAqQ`XKFbJ)ܬ%,}8@Qj^~
_J/&@>$mSwW[m4z;g&};F-8 l~Z\7{?dR<',˛@m~ jpHe>+Nn문HW%@q . !T =K:%NCܟo;[N e*uuR^m1,CMGv냅,T9εO=nB/ebo?wfq|; l<ȩNiJwjtc:@!SJsf*y;U^;V0A>Pu-0A_4i"^_nZk^@}>)iYxϰ@qstϪ&s3܂ru, pFL)8̔S("[4O{ ͋2=_XFߺ@i4gşURy$,/|O 11nV[)-c"%q:2\fBVc.u1iu -z[Eu\:/do*J?_Ͻu.sm4_0;{y$ ކUvW0<?_|?09v>MyIoK |oMޯ{>q!L`n=6iߺIdr
APN9&?rJ=7ȃe+xk{MVwywosHm
-pmKQodf3PnSfsU'msod`VhoA&w6S3a6S^9N+twH[ TDZ@ҙh>x5EMUU;;__SC: IˉM ;sSs'!0Ov,a8w̢i V5cOnu jʦ>?
-Yn!>*ǃ%TxspzK{ăuf %󕏖
-wٚ<M䠦Z*>M%U3Χ"<Ú2_e2ON2խGo?KYf7lK?nӭ79n Ж_pR׍gL[~w6^v>#M 7)|S鰫Ƿ21lc<h~;V y,w#u؋!H_xoF, wE(uXlI{ڷO80^ǯqF=%s7eZe=mvgoį/|&wGnwdվ[n`/ֺTM#ww[fu3į۶q*9?uJ|u2`VlnAf}d{}7큾 \l1wGm|Mz;m,˴p쮘wam{ؐ0~ؿŴ:^9y-.XGo9Mfsf;%}DI +m3zln}TƟ"ڋ1Mew7T8tNaw|⌼ iZ:)Putx;.,z Xua<kۚN_ջR!ѵ>X
-e\3az_ZpysGz^uwܹY]ȣ?);GwkE:λc2O~Y~
-]aU"]EjCWR7V}o7#TvknYudZWw`\=خėgKIϹkwv0lG
-VQ2{ 8 KKd!I:NDMyOF+NDYooh#p1[#Ckb (;FD"3,IeF Q0di7r cJ0E׎iY.&jg+,yub2 d+P\8ÜI:"DM&K#U  R[궮82I4Z
-o9C@E0= e$I*d1&iLb*M1,I3#
-Y[A]18Ԃ
-d0ꑁ#\zL91GKP!h8\ը#)5LrP1Łw 5&bP:ES"x lU=Vcdk"fG Θ!jULD>J 6 vL"25b Įb%l#ԓ62H!%.y#lGOBV#pU=w}Hyyxa{zbFX-qHKw;0;wؑHmyz$<ȨŜ`ms<Hz8" s++zሶ;99n/XV0[\$8k3{(J!+",!ZSmKRʎ5qu|IEAAF%mR`FAO+%4Aiјm7|tZ~5%R()asakZ"Gl
+pmKQodf3PnSfsU'msod`VhoA&w6S3a6S^9N+twH[ TDZ@ҙh>x5EMUU;;__SC: IˉM ;sSs'!0Ov,a8w̢i pBFj.x1 ҕMq`X7*S'pzK{ăuvK%Յϝ
+wٚ<[퐈Z*>Ms'qV3ϧ"<Ú2_eȫ2ON2խGo?KY7lK?nӭ79wr Oז_p RgL[~W 6{v> M\ w0S鰫Ƿ21Tc<P;V yfw#u؋3!H_xoF wE(uXlI{¸O80^ǯqRF=%s7eZ=mvgoį/|&gwGnwdվ[n`/ֺTM#ww[fu3į۶q+9?u2|u2`VlnAf}d{}7큾 \l1wGm|Mzm,˴p"wam^${"ِ0~ؿ:^!z-.ZY^p9jfsf;%}D1 +p3zmo})? 1Me7TǛ:tNwew|́ NliZ:]8Put 0,z ua`Z{5S}wB]D;'\}8
+^߹g S @XZ}%62 M]47->s45G+LSvnˏ׊~e9!wwPeBª$-:*ꇨ8=Ar߮Mީ4\?>i൮0JȹK݇/$b>S)7
+s-4Haَ>=Xsm9䒝|RC_Ū"ω ndzdU
+*uUJ|iU_%v9rHW
+=i6dl?"(,p-]}~u7<yry+:[LyҽkWɻnNI>bS־6vZ\Xyx)bu)LKus7ͫ]㷕J.q@4$.p}py԰oKo[4xZ)Lsg>px*+s>m*Ѷ.)zrr>i7ԇv7?͘%9p^a0gu|Img @Gd\C|4="%Xƃ|&_vHG/{ {ʍ % ={^3>Y#he24рuc;oWNڅjݭS&ߧ;J1oS9N@XLͪ@2?z ƭҟ;nucX*@0h' J^΄pT V?ߤ:ejۤ:iXIiާU$ &g#4yφ#StVs{eS,Sć*pw5rHva;*R`$+
+VQ2c 8 KKd!I:NDMyOF+N SYooh#p1[#Ckb (;F"3,IeF Q0di7r cJ0E׎iY.&jg+,yub2 ?d+P\ ĜI:"DM&K#U  R[궮82I4Z
+o9C@xF0= e$I*d1&iLb*%M1,I3#
+Y[A]18Dۂ
+d0ꑁä\zQL91GKP!h8\ը#)5Lr1Łw 5&bP:ES"x lU=Vcdk"fG Θ!jULD>J 6 vL"25b Įb%l#ԓ62H!%.y#lGOBV#pU=w}Hyyxa{zbFX-qHKw;0;wؑHmyz$<ȨŜ`ms<Hz8" s++zሶ;99n/XV0[\$8k3{(J!+",!ZSmKRʎ5qu|IEAAF%mR`FAO+%4Aiјm7|tZ~5%R()asakZ"Gl
)/&K<K
-sYzr*HG1hW#AVxi*"
-ns=07CCD)z9AjzAV05^GUD|d
-oQi >sŕ+&膪E6'9ߎO1Cmh()k})f,C=h{['kJQRB2e1AVh),x J|r= b1xwsUB-nak Yr܈{ZAmFU4þnTNf ~17ɺΚH7"$0lK s7(* dnQF? sÈxa`RqE1wmT-mx|5=Vddnѣ*"f|jWJx,~v
-?7cBZQR5AVxeTP^&]aC95aia>J?̺ai c̒&GԊ`5ڤbaK ~Q]0AK[9FE%%,lN
-)#g3SvUF6uGKa|FgL.]LYT&sȃJ1B2D5ߖd*onyCyosm6n)5LPYT/%(c!=3xbl51(ZDؠ%FjR1VS7K+D(a6-~ +m80b)(tSwVQ$Cڜ /ZZ5,*f;T)(#vZRSaQ=30I+B3ʜ)fak s̰w 4S+Č(TG=+mP<>n Zc(KŌ‹nJZ$hi#䪘ChVPi,*,~#v}S_3"o%3Rj(b|it"E6,lrrfhDI(s~҆DPײ85pb߱B^/Vɚ +ZZ5˙*R7R
-eFJ]
+sYzrF*HG1hW#AVxi*"
+ns=07CCD)z9AjzAV05^GUD|
+Ui >sŕ+&膪E6'9ߎO1Cmh()k})f,C=h{['kJQRB2e1AVh),xOJ|r= b1xwsUB-nak Yr܈{ZAmFU4 þnTNf ~17ɺΚH7"$0lK s7(* dnQF@ spxaRqE1wmT-mx|5=Vddnѣ*"f|jWJx,~v
+?7cBZQR5AVxeTP^&]aC95aia>J?̺ai c̒&GԊ`5ڤbaK ~Q]0AK[9FE%%,lN
+)#g3SvUF6uGKa|FgL.Q]LYT&sȃJ1B2D5ߖd*ryCysm6n)5LPYT/%(c!=3xbl61(ZDؠ%FjR1VS7K+D(a6-~ +m80c)(SwVQ$Cڜ /ZZ5,*f;T)(#v[RSaQ=30I+B3ʜ)fak s̰w 4S+Č(TG L+mP<ϛn Zc(KŌ‹nJZ$hi#䪘ChVPi,*,~#v}S:"o%3Rj(bit"E6,lrrfhDI(s~҆DPײ85pb߱B^/Vɚ +ZZ5˙*R7R
+eFJ]
Mwłf\di}Y&RRBd$>HװBOOw
=O{xUi-MLSՉ2ePkZUp5q1B] iffY4ת<&E֑ńLL
{G8*'\c=+<32+xBޓkJ+mRdNܐ)̀]ժL댁6ߓ
6i>0EJmQdSZLĤ;OT
- )a _{OzͺE 2%s͓rS45JF>FJh+\4i&?PEJK mRdUZLĤ w\ZUp@YR@3@35C=U,RRBdyR>jY܀=YBh&+ha|牗Z$ڤ4UIa@rG#q3{REkUUEYG.1)%*qTTJ>l:J~l|SJ_ ^'7^!A`vF?NIJ12۫΍w?Fm\ނ}cCx2|kym#/m{VvζaxFJi;rbKlz%7{6A@~T0ɷ:eό0s.Gy:v3ũr"V!aoAX,7()d}S:l߉﷈7"t=6tY„&7֤7\M|̈́ڦJHK'P-3nuސ17g8VG}ˮāXʱ"'K2^Qzv[g4w K3yȯ!Dʑܐkaw6:<IwZLv(0,췞&mbf)d:5Z=]+wjo[2-{bI7 FW|SʡuK;.3=މ0No:$0eEQͭ]_J6~+GӐ`J<dQ;GS@]cM EVQ)X/z>Ku5ԇ0Q;o37NaOfUN{hNB \՟{P̥,w6xQ=unslsC?BjhT!~wݳ{6о+l;x8߈WVE[95ΟU]<UnaI_;ΜOo5O +a0@—(iU [o7äa1<3) ܴOp'G\IQߪzގ@<0RϿIgChV wkοE޾9>)-p*mQV7ᣟCU'C%DARH?nRs*=uCz>!,N".z},|2r
-8濳/dN\;oaD^zauz12 GCvbt7P`t?0[&+Ok u`y$+zZި5᧾jUr|lJ\<zIy*]qVvf62!++ϭhъzg1aD~b)̲!73~ǜg]vdvǀF;Poz1T%Ծն[ئ<nGKEo-w6ɚZ﫬 8vƕ8w #s|̘p O^ըЫ/_dYƇ
+ )a _{OzͺE 2%s͓rS45JF>FJh+\4i&?PEJK mRdUZLĤ w\ZUp@YR@3@35C=U,RRBdyR>jY܀=YBh&+ha|牗Z$ڤ4UIa@rG#q3{REkUUEYG.1)%*qTTJ>l:J~l|SJ_ ^'7(A`vF\IM12ۓ΍w?Fm\ނ}c+x2^|kym#/m{VvζaxFJi;rbKlzB7{,6A@~U7ɷ:eό0s.Gy:v3ũr"V!aoAX,*)d}p:l>%﷈$t=6tY„&7֤7\M|̈́ڦJK9L'kP-3nuސ17g8VG}ˮāXʱ<"'32Xz$v[g4w K3yȯ!Dʑܐkaw6:<IwZ?Lv(0,? &mbf)d:5Z=]+ xjo[2-{bI/7 FW|SʡuK;.3މ0No:$0eEQͭ]_J6~+GӐ`J<dQ;GS@]cM EVQg)X/z>Ku5W0Q;o37NaOfUN{hNB \՟{P̥,w6xQ=uorslsCPjhT!~wݛ{6о+l;x8߈WVE[95ΟU]<UnaI_;ΜO9+a0@—(iU [o7äa1<3) ܴOp'G_\IQߪzގ@<0RϿIgChV wil?T޾9>)-p*mQV7ᣟCU'C%DARH?nRs*=uCz>!,N".z},|2r
+8濳/dN\;oaD^zauz12 GCvbt7P`t?0[&+Ok u`y$+zZި5᧾jUr|lJ\<zIy*]qVvf62!++ϭhъzg1aD~b)̲!73~ǜg]vdvǀF;Poz1T%Ծն[ئ<nGKEo-w6ɚZ﫬 8vƕ8w #s|̘p O^ըЫ/_dJ_ (
endstream
endobj
-729 0 obj
-<< /Type /Page /Contents 730 0 R /Resources 728 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 710 0 R >>
-endobj
-731 0 obj
-<< /D [ 729 0 R /XYZ 78.37 808.885 null ] >>
+737 0 obj
+<< /Type /Page /Contents 738 0 R /Resources 736 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 707 0 R >>
endobj
-217 0 obj
-<< /D [ 729 0 R /XYZ 79.37 616.209 null ] >>
+739 0 obj
+<< /D [ 737 0 R /XYZ 78.37 808.885 null ] >>
endobj
221 0 obj
-<< /D [ 729 0 R /XYZ 79.37 446.032 null ] >>
+<< /D [ 737 0 R /XYZ 79.37 616.209 null ] >>
endobj
225 0 obj
-<< /D [ 729 0 R /XYZ 79.37 260.473 null ] >>
+<< /D [ 737 0 R /XYZ 79.37 446.032 null ] >>
endobj
-728 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 377 0 R /F55 379 0 R /F56 380 0 R /F69 398 0 R /F23 375 0 R /F66 384 0 R /F70 399 0 R /F29 371 0 R /F51 376 0 R /F52 372 0 R /F20 378 0 R /F57 381 0 R /F26 400 0 R >> /ProcSet [ /PDF /Text ] >>
+229 0 obj
+<< /D [ 737 0 R /XYZ 79.37 260.473 null ] >>
endobj
-735 0 obj
-<< /Filter /FlateDecode /Length 5116 >>
+736 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F55 383 0 R /F56 384 0 R /F69 402 0 R /F23 379 0 R /F66 388 0 R /F70 403 0 R /F29 375 0 R /F51 380 0 R /F52 376 0 R /F20 382 0 R /F57 385 0 R /F26 404 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+743 0 obj
+<< /Filter /FlateDecode /Length 5115 >>
stream
x]Ko$WA
-?yM*zVӻzzӳ46[5z }Qc')cklnc3clhRnCs2<87 tŌB竚d`8 x6kj=ie/fi8@T¥{QWl0˺i%Z#48׃[!64Vl!O'Å/ߋV!=/Ʀ'^?YqUr <3gR6P+f=6ӦԩmLI هސV<.*Kֻ
-y.j8țv!<Nz_se%"N"bիM[A+%]-s}3Ih{?K/{CWU{r{uSb 9{EO*&ap$ >꾦/\{53]<S6 @ÖBOZ
-`SXL$8W+ؘ'3y&ί`M]C9
-0}=L^)@n*~
-ii+M4'
-؊yXCs4j
-Z5 vPCAlnP:Zz;Pc
-(>*zC)
-(.*:A)p+ TE0(F͐'0W/ ͏_ +a׋7G v>h!!Jpt@OclE8Kg:դ皷֌[?6;:Eҁ]<9ֹ\}nk3,rG\HOêp]-X<*B0S7p#€R%4݈>+nJyjEv$%=9\P) ~)OVx\#u!ǩOxR>yoK916=b)l
-N L]ok0ȼRzoi F B Vz$'wH0+@p fuo1.pIvp`=8>+ qo]0g t*2]0Co]0]e6vyنA%l31{|9o`z ό?QWU',h:9
-
-a3y%΁XM}nc"vsy|d́;nFNz<~iLp; ӘPw_;5
-8NTI1'읆-ɿg$,cL=vFx_4&v8T|KiLo;x'A$||kQӫ/2%(4];ꗄSt8+Y t":vQ(ݡrЎ# 8^dB=rgXD3^2@y͸$,un/ٿ=3}㨰w^3~)}eVʉ>ן[
-6j}cOiM|;xH[nSRCn?rB\ a Lj-~]3cٺFW-u]T;ІoK\yF,Ư4x[iߪbL8lL OOMzlt9Q.FQdqMeLlBdu߳8!~m 'C@u l_Mfk
-[N}=lcz2{qw K{+ck4O9 jG>.}fǦ ,Sl|ͣ%i \$B, 'M|~َ\wêRҩd ̢ϭ`7pAh)_.j'/݋d[r \餿Ti
-9*/v8eWT;;VHdt|<;V~$uە~[V
-vLd3o3I& D#0:ouV3qO]Z}&]&Z7Z~[mSI'C;dex=^,3hg"`W58I:їkT0kn_Y睗|sw I!7k)' \ Sa7eHѻy{yq9E޽,+|%N>9K9g2G$Eލy1bD<o8t#:rf(ˢfc3iF3lҚ٠ZWeN_ISMaOQ`GYE~lշ6s6 _gg 9[#3c63L\vOSldz6F-rY+o{O_&-hӨ <bB[~,,^VΨ4AB|)|1Rq,uN\@ςpVoa6#PYCcBok
-7U*#>Se1g&+7- P
-+a!Xz nFj#,+iMs/S(|jqľ8
-֌ζAFp+3m&xQu:۾lĨ֡p
-_&w*8 ޱs(0&ow(02SPv(0&ݩ(ؔ~+yqy|n, PP]q Zh, wcmShgn[ aY<6!0eMOI{x߲9tfqɜ l-u& /Nrg
-([Вc$ja&RdAYW?G'>z TQ`3l+`ƛ;) ^JɆ/(tLcb O ŻU2撥`X$2b$~rm2 ҧQ".Ow_x 1D4a ˕og6cg!J
-~t^CV~DI!Rl}/}
-0jп/;x+Md[h'R~cbp[wƨMrn =mj<ܟ s̩s=~3f)[
-J1h8w5sJ)gMd}'CVCڴ-88g,"GqyRKVKS…۶آ9Ly(|mHD[> dx'uͶW)k+;z_j
-DŽ*K(jQ+O{s^s{,_NU8FgjdUufysLUgL 27$lS8jiI^H)Rffu]}J)/2"ƖQ:dn?4K_I/?)Ƶ"׸:{缭'asчg i*AbSetNQJ)?yRlM,a+'+g&'+II 9B621Ow#3ӾZqfZ:跈wֈܙ nl˙+Ryt6R
+?yM*zVӻzzӳ46[5z }Qc')cklnc3clhRnCs2<87 tŌB竚d`8 x6kj=ie/fi8@T¥{QWl0˺i%Z#48׃[!64Vl!O'Å/ߋV!=/Ʀ'^?YqUr+Β3)3h-_3iS6FlCoB+y%o]th7i_JljҙNts{K;Kyge`3g@e!6_SE68fSLf\UE{oRaKZO4ڟͽZŬ3u]8q#ԇ^ueNXrԙ4xlFP22Y7CuL1˘{ݫ_F{\Իzʱ]t-A#oo/ޮbWgqNޭW'`FPoQfhwثUdLIJ&ta~xU^$QqM)E4U.&K3WT3LDH !rLYI3ޟ2?MQP*@;g<-Xbh`mp)ńCB|!԰g>?z\]d~H
+{ bbl1.1@!/%^ys.:dgIOT<kxd])XDRBzi+Hyˢ~}nb& y/T;}%{pxՙރ
+\zOzny>@!{/hI$t>TݧV״qcbgʆB(bRIK,qj+bd&/֕kUV?w<G+M4R0-2y
+q#tMrUڿu8?#o\}zzD' *%/8
+OskDBB.8O*_'~`)6f4[TV>-@e97hxZ4@
+bI0)]4c?ޏDZYs 2j>dCXSiU qXya WXC 8ArABaJ`dI00e$$J G`&Xfp
+]\bKI ç3r!JDFilBC͵<VW\ZQ:a9-1芢`ºv-R&'
+QD\~/@u۶g?pcZn0!Vk@NҁgYpE=G
+XX:5lY56h8S{,|P@u=J3mZa^:G%,wgg
+LgG}j#P5oJa~Bvm?)„hFǼ>tp&0+yZ˹oܶ]FS1s˷m*I"dh ^e _C쪦'iR[}q9r
+f-+=oNݳ! 6sm89DAc<a506ҹ1z4`/ .ȻeQ$)'v)Lհhۻ1ov3F nD״ZleYll<#{6v&hM_WZ3[+xʶ#8
+(ȯm#6f&쌒A2gk~ff0|_]i}xVf(E.rro=x%bܖ}ZYLhw/e˪95݃fa2H9=?=Eځ/F*<>\r"e6|‰kY04*-f*+zhB^Q-u q̊a<<O_uOԕp Y~RXᦊZeDg9& szd2y%&>a2"^
+@^t0L^)`3>
+'Q8v7(]{M<j8B$.ɍݏGZwXa%,x" X/QA-U-~E6iQ"J]-GV9h`vm:Xgۗ :60
+dP`~C1N;/ P&w
+ܢϳ;_o20/N?ςύbX@2k:cZ n,pm
+ma2LV\}04D)io[1,.sat$9IL<Y@}Z`D-C?HW9wχQ*J|R2mrx3s'3rK).slS\ix*^\l Y7$|_&[lԢ0]nMaBW4Jk϶x!x&a~~y쌙u"DIA/WЫrJO()D*mOOF ZxevowElk
+G _mL*Wl4o0)l1R2ܖm
+G3- 2E̬ O]W 0%EX2*[fK3E'x<ŸbY$WV`O5#qxN!0[[>Me'M9F*4IIe4_l''&
+Ȁ<kE Lj ̚iIΊ/"F$\pc[_b'ͫ@UX
endstream
endobj
-734 0 obj
-<< /Type /Page /Contents 735 0 R /Resources 733 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 710 0 R /Annots 738 0 R >>
+742 0 obj
+<< /Type /Page /Contents 743 0 R /Resources 741 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 707 0 R /Annots 746 0 R >>
endobj
-738 0 obj
-[ 732 0 R ]
+746 0 obj
+[ 740 0 R ]
endobj
-732 0 obj
+740 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 272.438 67.03 282.895 78.488 ]/A << /S /GoTo /D (section.7) >> >>
endobj
-736 0 obj
-<< /D [ 734 0 R /XYZ 78.37 808.885 null ] >>
-endobj
-229 0 obj
-<< /D [ 734 0 R /XYZ 79.37 771.024 null ] >>
+744 0 obj
+<< /D [ 742 0 R /XYZ 78.37 808.885 null ] >>
endobj
233 0 obj
-<< /D [ 734 0 R /XYZ 79.37 353.704 null ] >>
+<< /D [ 742 0 R /XYZ 79.37 771.024 null ] >>
endobj
-733 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 398 0 R /F15 377 0 R /F56 380 0 R /F55 379 0 R /F58 382 0 R /F23 375 0 R /F20 378 0 R /F29 371 0 R /F52 372 0 R /F41 373 0 R /F51 376 0 R /F53 638 0 R /F42 374 0 R /F43 737 0 R /F40 387 0 R /F59 389 0 R >> /ProcSet [ /PDF /Text ] >>
+237 0 obj
+<< /D [ 742 0 R /XYZ 79.37 353.704 null ] >>
endobj
-746 0 obj
-<< /Filter /FlateDecode /Length 5030 >>
+741 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 402 0 R /F15 381 0 R /F56 384 0 R /F55 383 0 R /F58 386 0 R /F23 379 0 R /F20 382 0 R /F29 375 0 R /F52 376 0 R /F41 377 0 R /F51 380 0 R /F53 646 0 R /F42 378 0 R /F43 745 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+754 0 obj
+<< /Filter /FlateDecode /Length 5032 >>
stream
x]9d9W9k}@3A6`m0KZ}RGJ)=m0jԑ>T/o_>EK`J/_A ~R`܊˗.|B>jy$\3@͵\IέtqnOW d3JlX}owGzZ3;ZNƆ7$cgRr;/u36h9s@ia4S2-X5*Ofݚ֘J'fyĿc瑑L#e! 3>dSm;|tT >yfg5KXSJi )Y0/o69wvl,cJ*ΤTxY*8S& $sQlJ쩎3fGs9;򧫰v_B3h REE&aBpeœ>Il)ҫ[D,:ԲGOG1dYjunQ9MFkk PT.6(fJ|βɓO pHC|dyfgs&*0[xA޴]60XK7R
-#D6of'JP;}L ]!h>]("/[oQ^8$QIy˴U!@DsjXSawf^0 *x.BePW2{F2I1mbC6÷ '/f-<ZMвh#Z)ƉC?k<~4jkL"MoXmj SXb-dIOX8o v| ڔ:PF8)#G)}+m
-9Rpt`Q( OCl@z>!
-x jGYxs ˔ ^ܡ0uȚ~&Dt@6<r/T.opwCn/8:kutS$)c*e]ag89j.azSnR``Bbm+Ϥgc "ʛY,Evb\.ZFNW3C`1'.MQr !UZ|F?4:h'B_<77 \_d
+#D6of'JP;}L ]!h>]("/[oQ^8$QIy˴U!@DsjXSawf^0 *x.BePW2{F2I1mbC6÷ '/f-<ZMвh#Z)ƉC?k<~4jkL"MoXmj SXb-dIOX8o v| ڔ:PF8)#G)}+m02lsG`|)#EʂӐW( /lf-,S&4{Is7"kZ3ESAY~ۤ|ʽS\N)JT [7_ |ݔ.IgymxخJrYWXD Ti!F7&n) &i5#l[y&?=3/"ʛE0qDl)ƥ[FNW3C`1'.MQr !UZ|F?4:h'B_<77 \_d
&&<ӶD9ZۙQ֧ki#dۮ; ck2$SD? M=z| qn3Ea%d-W :vct_ p+yEC ҩ':kٟ71X뉙]c fvaӰf>
-N0XC7ClPɜαסs[sl͌UOþNaNq*M.][FY]V?V)*:X=YXp,Jl|f-#cZg){Vkf^ldS46l-l B:N.K& @ٛoq"{_" Fm6r뷼I#AcXcz VVZ.jTrqu#~gVvAaٵs:QUaJmк9gRomZڲyg&!0iuGlWTxsPwtgny΀:ctZ{~R'hI?-vRwqMP1N&Kԥ~;υm՝f\fT9-JJ烞}2ZTt[0NIpĽ賄 z֞
-˱=#znϢ,S[P' Roz".,rHovԊU|8#a~va`%]/(LPn~HҨdV@w&Z%u,\o.|KsYrLAG I0r?5+ .HU{ɸST C'>$
-
-y'
-g>T|̄Į`J+1/𕻒O֢R3F[]f:L (S3?c=Rd(_tw(*dZ̞ڶϠ%VfE64ioOv,eW]\z^F9j}D`"~ƹ )a 4
-޺\
-'U5}k. ƂJt9E6[ϙ-L/>fUc)lbkI/)MM "q+5.HPM9e˱=љ]1+䪆x"*kב5 Iogq>,}Ӗ93vS. `"Wp]*y#n<ԭڪҠXk# τ[7 =y<F w=.M<q Բ8^&^|)n;z@-- >#S<Y4(O%G.ifE,>|_/_34 \jWŅgԒ(<' fb6]w^I
-OFgEr ߪnPZO .˳#:ZvWE5̔fZA)2
+N0XC7ClPɜαסs[sl͌UOþNaNq*M.][FYU0bdQ{c;±(}l6?
+S"n09*|k;ҖÄ<}4=7Y^Os?g]zۮΆ#@-?kuSv U7ց@~-S:u?GCMlѷ3Km2IF>t2Y.qPG}.l4s5TiVVT=ђMR-tL;_5 DG%LгT
+#u՟zDSCsO
+%Wk'
+\pR㎰hj?k
+e #9xsI/Xb
+df+(Bd7K;inLl
+&[/8,!}MިW+- B5OcKL>]''G6o*E0f<fc}[\A$w-RH7XFɲI()<,/O!Ն)3!o+%Rs |d{h%ŌeGW$=~a$ X ?J(
+ٹ'13h uѼM7MZۓ,KUޤmaZx߹sqnx~JXBCC)ӾI7mI1XCGa`VT/f8 .d:cdyш5<t nO{VVoUr[F$Vn6֮˜1 ʱޱƿ
+RZ.l^^KzA<z)IKCitL!3ƫe>"Q.d" ؇cjA9
+R!Z2i}\;Cz`sB/'yB/2lAicwwuߥ*9v`c<fG؈tcc9>Aӏ)\kJk+;0Lak,%WabيN54ubPr%IfYxL/9<Ġ|2fYɛzkY~ޞ_- kX`oAaQaYwXx^-ijnt;tLM4J`,@^aOhkGD͑GڶF<h0C$u#QC]rrIg=
+&nl=)2;NY#W~^ NUg8
+Hp/i9r䩾|rQ韣 F$=-A^~6<\n^ˍkvRϤ4G`?0A㤪fOubX0T.Ѧw9E և,j^Z9T]l-%itSO$w
+)Ƕl9':SK?f\/_D%Buͳ:rf! ,؇Eozr2rFnj;%_
+{Ke0oy픇`Q[Cyk }$;pF㑡'ϟ3gߥg?R .$Zgċ/6mU/t:bӳe|er?ᖻXxz<'U? >$<HE8ͬyÇ%ckK1Z%Y^!Q68aL̦n+<^ luH[
+#]+Y^#r"eybD'SJ賆Lk=1EQ Vn(-B n1Ts{a-V/fwVzl\}um ژ8CBeR
endstream
endobj
-745 0 obj
-<< /Type /Page /Contents 746 0 R /Resources 744 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 710 0 R /Annots 749 0 R >>
+753 0 obj
+<< /Type /Page /Contents 754 0 R /Resources 752 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 707 0 R /Annots 757 0 R >>
endobj
-749 0 obj
-[ 739 0 R 740 0 R 741 0 R 742 0 R 743 0 R ]
+757 0 obj
+[ 747 0 R 748 0 R 749 0 R 750 0 R 751 0 R ]
endobj
-739 0 obj
+747 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 230.065 666.125 242.02 678.08 ]/A << /S /GoTo /D (section.11) >> >>
endobj
-740 0 obj
+748 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 257.741 666.125 269.696 678.08 ]/A << /S /GoTo /D (section.11) >> >>
endobj
-741 0 obj
+749 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 205.692 551.065 217.647 563.02 ]/A << /S /GoTo /D (subsection.6.2) >> >>
endobj
-742 0 obj
+750 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 355.086 551.065 367.041 563.02 ]/A << /S /GoTo /D (section.12) >> >>
endobj
-743 0 obj
+751 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 318.024 539.109 329.979 551.065 ]/A << /S /GoTo /D (section.9) >> >>
endobj
-747 0 obj
-<< /D [ 745 0 R /XYZ 78.37 808.885 null ] >>
-endobj
-237 0 obj
-<< /D [ 745 0 R /XYZ 79.37 647.799 null ] >>
+755 0 obj
+<< /D [ 753 0 R /XYZ 78.37 808.885 null ] >>
endobj
241 0 obj
-<< /D [ 745 0 R /XYZ 79.37 197.296 null ] >>
+<< /D [ 753 0 R /XYZ 79.37 647.799 null ] >>
endobj
-744 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 377 0 R /F56 380 0 R /F20 378 0 R /F23 375 0 R /F55 379 0 R /F69 398 0 R /F58 382 0 R /F29 371 0 R /F82 748 0 R /F51 376 0 R /F52 372 0 R /F40 387 0 R /F59 389 0 R >> /ProcSet [ /PDF /Text ] >>
+245 0 obj
+<< /D [ 753 0 R /XYZ 79.37 197.296 null ] >>
endobj
-755 0 obj
-<< /Filter /FlateDecode /Length 4407 >>
-stream
-x˒#>_R~TMkdYO!qbM! jif7[{
-8o͉y3|fŲQ
-%! UP'4fjT$>9^* *5p%
-<bv;_&v wkޞD]?)E~u PN3v zĄjLY\,CZ,Ae$M Dg 8TD/ZGL JEbO311ৈ&Y'?N̷tRu̼̒4~fo C,iVx$$U>sQ^pl_ 6Ƚm22gfy,:G2:ʀzA+*᷿~~xJ`݌p(!Rʒ4 hJ>lyEtW |ӅL{%є64޶9#sdo<VUm1{bE0ÉzWI{սe1"nt&j/c&˔zᝥ_`UG{N"\KcGqF#ݛQHGwD™t846k2B<Bȱb?\N!|$Lj1 zD s`'>'_&i`A$\ FkO%cN.HsVO|9)%S!;W6>ͅhg6=܊(9]ݓ&jsLs7.Je)~ &1 GXYIqJ ۦ!E=Z9Aѷ,”gu܍N+M7QLq :%NI!DMlXp&GM4ưM!D=-eN;j4,nF(>3ҍhȖR|_+hvv 4{ZoK?䛞li OIQ1ү*,J"#aL
-t`vB?
-0*حa+f > pÂYpg5j }[P %J0,Hihn20is(
-}
-wOdqtzO"}{I#@=R> ]/A >]{]6|SVI}1Nw]1^U) a T>WI+ך|$8I<KbTXV9HCyбJ2fD/D'b9޷M%ǂn&
-羻_V(u%>rt65o*mureʉB*qn6FJ+8Q|<DrؙdgF&O5vu 9 N/fȦAa;ȈDq̓jBe6﮻# .ltN܍N#-th -)' nIU2R+.^eg %>ƯO4\liZf|WB1ϫ\3ySUQ{.FsH~p4r΃^dkAKX|WoZ~@0ۙoܯH&6^Lʌ%B KƚX
-CE^U TCԬ>IqZU5[Q}giV?s5>^ܩf:r]U:f'iWlOFQ5%>\S[i̽bY}*eimXpQ{.
-n
-۠|+ULplH2Mɞ}~bה@攮
-%D\/hR2`wWXRu%Tb+V#_}Cvv8[ږbWCh|?sBdu3&+~R oboOޗ |<wLnE%3ġ~dQO!HӸzcPhJ ^?*Ǧ.~kTFʄ:GZVAVש_i*J-$A܇MʟU5z/l1cM5F 85I=&*K;\|v|quc|Y/d^F56? IUeԚuLxzttn!yD,8-{=:nS
+752 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F56 384 0 R /F20 382 0 R /F23 379 0 R /F55 383 0 R /F69 402 0 R /F58 386 0 R /F29 375 0 R /F82 756 0 R /F51 380 0 R /F52 376 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+763 0 obj
+<< /Filter /FlateDecode /Length 4323 >>
+stream
+xˎ>_GA
+}*B 珧) ULNjSr#qe ǷTDf=4LV
+34 G6bhO`s`uag m=\䂰P
+7$
+昘ʔw!EFyiGYCn
+{|V!M*ÄjQ*`|H I5O?)!*ih{MJ!.=]eOElBo&RUe0{O}k0PJ-T_
+uޔu@C! ƉɱZyN_$|rGeO,JL$EA
+An(qͣq@VTH*k?'(Qe\)[KJꫢFH)r.?1hAQSձdYʤ2@0(ML 127xuIQX#!:-5rbtZ$, .!N=ou$@XnۤKfHM.f/#5j:z'7NSݶZ)B6Zf)]'LZS4~'ntO5:-+y73U"IT/źWHxclZ@鴖E z*i}%f'7Tp2[֕Eu  BQQ):/f9Ftך1f%nkFET*,t3ds^
+G"ϢsZD;5hyH[}n0Qh|RbdBܺQu{fRP&F`Ss+D\H#O]3ؠCX@t I.%oܓUA&eTQוʩ /6H9jU<PTmru[ G5a_8gZ~ ]pդUu&bƑWl%Ɇr K:P~}LVq\6e[}?HEk lB_rxD̽k=+m c>y#+\IDA\sԻc"Y4,+ Ow<bf
+#lPx2cu}b<ykJzQägR1X
+/cXRsrm"jiPaž+Cv0ZI2]H$X(ECs"N\Xvkœ3:-1@+1Argd]/hSGˤ0t)f}\3}h&\ah8 2ynєʃ<+/O(a߸3
+/.,e?q4 p!&muwxo
+S7kB\,PY+[ !n~QACa,2 T.(` V}ȊDE(aQT}MmpYi`84y*n?ˍh9 txN5]4t E l}8\F~g֙Hk,`5h e[!MP\.W]W&B2qM"_'hi*VW~%|MBLF&&IHj9MsX9!~PTOd\x`RG )`.h~Dm4ԗq]1(fjlNF,u4"gw=E.8귰zDx3W֏kV~MY
+Q)u*q\vb9QOW͓:TÍ2HӐ?*LuMyK.jtԽbuJhHY\E6"X֏_ #2T-.*,qyscKq+0[QڿG#R ɾ) G;:؛mƫ!@#K]ԲRI$'’f5*:zBTQUj><猣iN$j/Dɥ{"*>P'$mxMabRwszLe/3/"Umz qJlvMqd֋~Bө` ephc)[i=XhCLXKaXWӫZp Mު(y R }KzJR4gƇ(Ň1[' ڌ' r.@TqGi\jN#en.Jb :qjg͔E)䍡Lc{|B>@>tN|QXs45]u>ɪ)lvtCx -{GbILV;C'=7nz`K'Z6o}KV@$ή_TNAө75M)gRf&ΡV6gh4^8nV![(,A?7E;9W}iB=y'a^.2,$ZC@%{,A~ȚU_?_o"_>YelQ޿r3c3ݻYfVqfl8if1fd9yefGyo̾bY~>i'o~3 ?MT^@3!T ,gd2-&UL9
+yɝخ}JkadYsa-r;CWk9 JLRkMnp'.1XP*ߋ){(=Yx8᎖
+ؽz&FۤE|CJx͕{aF>Sv"2O42j6<J Zn͠e] yE!GHG
endstream
endobj
-754 0 obj
-<< /Type /Page /Contents 755 0 R /Resources 753 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 710 0 R /Annots 757 0 R >>
+762 0 obj
+<< /Type /Page /Contents 763 0 R /Resources 761 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 707 0 R /Annots 765 0 R >>
endobj
-757 0 obj
-[ 750 0 R 751 0 R 752 0 R ]
+765 0 obj
+[ 758 0 R 759 0 R 760 0 R ]
endobj
-750 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 417.687 466.68 429.642 478.635 ]/A << /S /GoTo /D (subsection.12.2) >> >>
+758 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 417.687 468.035 429.642 479.99 ]/A << /S /GoTo /D (subsection.12.2) >> >>
endobj
-751 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 427.973 454.725 439.928 466.68 ]/A << /S /GoTo /D (section.11) >> >>
+759 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 427.973 456.08 439.928 468.035 ]/A << /S /GoTo /D (section.11) >> >>
endobj
-752 0 obj
-<< /Type /Annot /Border[0 0 1]/H/I/C[0 1 1] /Rect [ 233.622 195.298 434.369 206.486 ]
+760 0 obj
+<< /Type /Annot /Border[0 0 1]/H/I/C[0 1 1] /Rect [ 233.622 196.653 434.369 207.841 ]
/Subtype/Link/A<</Type/Action/S/URI/URI(tex.stackexchange.com/questions/488566)>>
>>
endobj
-756 0 obj
-<< /D [ 754 0 R /XYZ 78.37 808.885 null ] >>
-endobj
-245 0 obj
-<< /D [ 754 0 R /XYZ 79.37 587.905 null ] >>
+764 0 obj
+<< /D [ 762 0 R /XYZ 78.37 808.885 null ] >>
endobj
249 0 obj
-<< /D [ 754 0 R /XYZ 79.37 436.398 null ] >>
+<< /D [ 762 0 R /XYZ 79.37 589.26 null ] >>
endobj
253 0 obj
-<< /D [ 754 0 R /XYZ 79.37 265.743 null ] >>
+<< /D [ 762 0 R /XYZ 79.37 437.753 null ] >>
endobj
-753 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 380 0 R /F29 371 0 R /F23 375 0 R /F20 378 0 R /F15 377 0 R /F58 382 0 R /F67 385 0 R /F69 398 0 R /F55 379 0 R /F40 387 0 R /F59 389 0 R >> /ProcSet [ /PDF /Text ] >>
+257 0 obj
+<< /D [ 762 0 R /XYZ 79.37 267.098 null ] >>
endobj
-764 0 obj
-<< /Filter /FlateDecode /Length 4970 >>
-stream
-x=Ɏ\w}EE(V*U xN f32Ч .AFgT%"+Oy/.ޔ8}w
-_ț(y/RZR6W2>_`Gʧ?Ş[O[/87W'T}|~zY>5;5卹pΛB%/
-6h9FxWuR,3o6.gzJiX`9,0:",a
-M,}8BK6X$P'/$Q +C{iQ.?Hd8+,v[ i,E3h
-ޙ#e42 b#|`l73_RdكZVIz- e3_/QvʄP}/dV@WӚ u aiB GCumQk}R7ݫ5L*-JlF"*9nYqS3VheT^b&~cׇ'wN
-mS 4spZ2cFK$$øqEAɤBv;ÅGd9[j j&)B֌b:vԻC5fJ^Z w:T)L_vlWT}Ud )$IKD^E^x{R!"+aAG#B6}yfO"tbql! ͎ka}0W-h:VŠI:&mn $czF|
-8A57*rK)|d^"_1IWG ֕$P
-2M1+4FҾi>tR9xQ$ <:g}|oV?(5D02~Hp A @cgk1x`=eoPάu]f;Pؗo "*h G {1gݗ-߳sw@ʪ^)^isQdJXu '':p{d.eͽ!~F!k}
-e[0/!ƣ`&Pq j@bA<7 TvfWđJXyyR^:ogB̈́'A#x"PǪN~u~(Feo.Fdʄy|.aeU^:3lĦbټ
-ڴ<Ŗw-XLߟvC˲ } . @0&%UVoԘߘ"mB% ziҭ,yTXěBzO|&Lԣ|C4TS>ia<{6zu6xzn>-+G*1I0^;@4O"
-16Luc|7?XЏNq̨S^ܻeFU&NZ&^J;gJ3i>[ob?g ,d3z:! qkAg.K~?rR&fڲsOY E8P˗wpnD[["u{
-˝жOVF?OIX!̇A݊ҜZgRB0ͭq5?+1 ⻎i=菍$.sWѯ.Sx? k$-eICh%Τ6~v *<}{&io&i'SI{5~ג WmΤg~vz@?Hڛƞ$"<uvI.d'bt5քft˥*P:wLq1.qf:t}}FN `nA8_7tԺN# b
-RTg=Am990~&<4\Lc[JxGO:U-O>Rm
-=F/Ȁ]͚Fw5I$6uԿ -ս\j}-k~;L/ϲ&o{a~m>5y=I \˥ײ&l+i?˚i웤]Cd5y=~Y0N(u٦ײ&l+i?˚i웤]Cd5y=eMxbdpY=͚zY4kr"AA
-Mm/
-f٭:b2v3Y%C;mʽ*T7`^uehrP1'21plsAkftNvE}g$ ر:;dO5kJߟn=B(gSbߍyT(f%v+PTY<,z|ΪK|^t¦GԶ FFv5/]nů)hn܊:43%_upBڣ),[C8cKy-xqYIN. B
- TrFi@VZhGڞ)yru{w"K fy>EQ'dv'GLiT:Yƃde`zYjK#zӅ=
-RrW5*$ښۥ47a^u>\exkV[exkW8#x5eEzj+[WgKaknZ'oW/ę&Z;dE S%0|0*D"L\uBkcle9l濄2|NC
-|>Opx_zQ1d 4T.*5G~ikw2S˛_j
-_jiS•'[~.OWy-:߳,ݾFlV+ߔ ˸@em"_=ִ\KX[U惉\4.
-4G@-/Us&nUbD{SAK6u|HjqZ\q5F0Oiy1&Vjk
-,.YKPF߸~{o~1/ɢ1^ȼ݄^I" gzCR@
+761 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 384 0 R /F29 375 0 R /F23 379 0 R /F20 382 0 R /F15 381 0 R /F58 386 0 R /F69 402 0 R /F55 383 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+772 0 obj
+<< /Filter /FlateDecode /Length 4972 >>
+stream
+x=ˎ]9n{]v/J#Qo`dewYudx^C=(Q::+B'=GHOQҕ/yO/.ޔ8}
+_ț(yRZR+Etp/Ji bϭ[/87W'T}~zY>5;5ϥs!Λ%/
+qibyWF7]ڤ I@ˠ*4fva킑`"m➘ku—y^[MZVI{-)e3_OQAvʌQ}/lVDWÚFu QEiaB G#u-mj}A}2$Q<n<ѡq:|jlԅWiˆÏgdF/rCr713 z~{zP, j\6B{%_\2 dN^:xay{wC59N;Hᤚ8
+p5DՋzw(@6]Z; nVINZx.8g@h7bΓ"a3 4ib%gI5XZ$
+)28-` M\  =0،d3QIcS!4L܁v{GUѡ.bmpZ!3zς#ix8dˉ@"unZ({ުJ iZp]Ǡ988 _,!߬hM&[bRZ&1LL*qX i+gɤ<<}
+SԲ& >JƊ8a 7.lK)0h*UQtDo0c]RR%7l&IDJfJCKHW|>0+S-_n0):{FPƠI[ţ|xl "6M0w1kYwtlL!t5쩮64m]99![ZHeB!tfH<!m( ܊ZUfaJ4|zfK[2blݪ#9<ց#u-]aD3iL_S,Dy15c3Ǩ$..#c!Nh6!I@%r9GVP ޹Ipad8 aB^9B)̚i1<8xRaJLSv9x7!\z{y$ ގQJeʷ֯eY雛G}ڝDEȥlWB@QmB1d8%%hB:Ǽs LR]c(j-$
+Dv}5!Hz G&7%e/j!4Zl%UVuNhQ=}j=րqvßJ%m L|m↓85q۶y5aաfq/3.Y#۷ zId2A7u|!Cs#lT;WI,ÔeNbYdDWpgoci)f+(
+B[6[\
+vV {~2RH LAN!poz+j;: ҹ+R^0@' D+9UgNtR{yꥈ0wL|F'3vZ)Of+Qr8
+a 45SPEp`Z
+
+|FDZL:g0OTL|^d蕿aIxҩP$a$3'fނ{g^J32ѧ%~S#MfLC%~M{n_1Q-{6w9{r̙~=m.`@1,LAB+?ɟ9[7n)7
+RvF~ q@?nܺ1CvB?J[40s&?hN {Ȣ3|æyMx,3w>YėƜvإ}h.IdY_]ש? {,gChau9U5p홖gꛚ]#TN hSQji մD5iɯ㙦ӴKuwc<q'Kx"0cT5QѸb&uQL1a82FI `nA_]{>d$AC.=[/m!ט3%tr,- ~Kϐ:hNh|{}kMC:Z(:!CRVPveF؞ /֎po6$b_/ >O<0Ϛu_6m^sZ&W#fNvӦ&Q0<^``>-/4=CEq,Dfqs/DD նL֮!1ђ7L?DT]= oakg "pl]RiWK}3__F-V7 y{*PR]YEkC;3
+D^U
+'
+RdVg{<
+{&dGi=hҾi h~ηTtp[<mo$.:+U9㊖])~
+rRoBVZH1l+jLٞӂwoVE?uuP}+&žaަޑvLyCaV1&nVK{Ql^bI*kh(WWr nW._ZUL5t|hz&`ӾuIj}j`_MFUNY]S4;Ӫqyת& մkWUM5MӮO?ת&y pj£udw&)t
+v%Cӻ}й**47N`9<{Y};"Lyv{);^ˎo3e5%ߟo9<(ӗv_~uˇ/ſyIfu+t<|hdՁإcXZ>.\in:ŊˣXasG\j.Pd7~w9&sV&s?sUg 3=!Ӄ3Di#<μہ7 <0)qk@ܠCe3gKJ듻1૶'WM
+ރr;s@yfcN*7% ڑN3@<JWamf6? y>٬lgLbuݥ?"
+\Ȟ yKC#ښۥ67da^u >1xkVZc<h>՜iTW]6bL?1\j͝Wɛš%qRN"GK[NfPqjwD6#y;fu~KN=l4 '`m2Sh=m7a/+߯T4\ \UFkLy?h˝k2So4W?0udWվiKJ
+W4o<~gk˲IicW:7e2-y'Z_vD֖%&\5*Ҋ?ϻ-QukY W2MO7O*=,C~ZCޫx#0zȼVjݭ /Epn\Rqy? >'B:|g{J>]L{
endstream
endobj
-763 0 obj
-<< /Type /Page /Contents 764 0 R /Resources 762 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 710 0 R /Annots 766 0 R >>
+771 0 obj
+<< /Type /Page /Contents 772 0 R /Resources 770 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 707 0 R /Annots 774 0 R >>
endobj
-766 0 obj
-[ 758 0 R 759 0 R 760 0 R 761 0 R ]
+774 0 obj
+[ 766 0 R 767 0 R 768 0 R 769 0 R ]
endobj
-758 0 obj
+766 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 256.857 85.96 267.313 97.417 ]/A << /S /GoTo /D (section.10) >> >>
endobj
-759 0 obj
+767 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 419.713 85.96 430.17 97.417 ]/A << /S /GoTo /D (subsubsection.5.3.3) >> >>
endobj
-760 0 obj
+768 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 247.372 67.03 253.597 78.488 ]/A << /S /GoTo /D (section.9) >> >>
endobj
-761 0 obj
+769 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 266.652 67.03 277.109 78.488 ]/A << /S /GoTo /D (section.9) >> >>
endobj
-765 0 obj
-<< /D [ 763 0 R /XYZ 78.37 808.885 null ] >>
-endobj
-257 0 obj
-<< /D [ 763 0 R /XYZ 79.37 771.024 null ] >>
+773 0 obj
+<< /D [ 771 0 R /XYZ 78.37 808.885 null ] >>
endobj
261 0 obj
-<< /D [ 763 0 R /XYZ 79.37 734.627 null ] >>
+<< /D [ 771 0 R /XYZ 79.37 771.024 null ] >>
endobj
-762 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 398 0 R /F15 377 0 R /F55 379 0 R /F58 382 0 R /F67 385 0 R /F56 380 0 R /F23 375 0 R /F65 383 0 R /F66 384 0 R /F29 371 0 R /F20 378 0 R /F40 387 0 R /F46 388 0 R /F72 434 0 R >> /ProcSet [ /PDF /Text ] >>
+265 0 obj
+<< /D [ 771 0 R /XYZ 79.37 734.627 null ] >>
endobj
-772 0 obj
-<< /Filter /FlateDecode /Length 4202 >>
+770 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 402 0 R /F15 381 0 R /F55 383 0 R /F58 386 0 R /F67 389 0 R /F56 384 0 R /F23 379 0 R /F65 387 0 R /F66 388 0 R /F29 375 0 R /F20 382 0 R /F40 391 0 R /F46 392 0 R /F72 438 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+780 0 obj
+<< /Filter /FlateDecode /Length 4203 >>
stream
-xM$9> !q'MsC`E ÉJUW8*ql_IF^vݯ/QD\>.`N_9wnA^ sR/Ia|wlB`/ݧK3"u"Fy
+xM$9> !q'MsC`E ÉJUW8*ql_IF^vyw(g.N yQ0Nh/F᜻|__o F uMCY)d0yAd6Ic_ӥ\O#pȈ<GH?7׌ʋ"_/Q2
+e߿R.
.Woa"}~&,?eA0R^KFZZkJ_#h pԾ^xPe /Gnd<-
5
&_z(V(UӨ!.4Ϫ(
@@ -3167,257 +3219,267 @@ xM$9> !q'MsC`E ÉJUW8*ql_IF^vݯ/
g3
|tM朼ȁӺIbZ
B|^\W%PU0L WmP'a_V:9jX pjTX3]:Fp^@
-Vk4{A0#]1 uyٔ <I6O n_PqeZBCi)j)ݛ/~z5!ү7n LA%WwLoKT!ē~oBxLfRJF&ivhfz
-Nµ
-ᥐ6ĦWqe$B#lpf^Ҭ N@T$DF&%&iPVU$@m2_4U@4V{"x@ 'gT2Ke%,"Sm8Q6Qgvb2bZ?1aQ(̽Cf;YX7B붬p~)VA \,5[$Q
-\(3'n)<á`># &gfDWVָ2CA
-RݙW;:4=)NCy{J[(;)c_>V:Z>e2~~UKXKEȝ^,e%4y*p1%7[pyJ2.]H
-%wF=NP|qL{寏o~^ґK`=ÍQUVDŽ{5O ^lļX~ × ,%ɈuV5IZY0bF2NރyV=,X)Xf jh]M/̲x?YOϐD5|dhr0˜d]5Ge~jj{<a3,'!GV%ܓUلONRIL?
-S{: &)
-f&bI=㴴!~
-3tNV"1=@ϑ-Pnj5Xh5~_Z#,йr>",&Vydn5 ҪC烈tOFFx3ֹ偗Cn('j
+Vk4{A0#]1 uyٔ <I6O n_PqeZBCi)j)ݛz5!ү7n LA%WwLoKT!ē~߼nԥ`M)"*[]+8 ך+B\ŕђMx,&EW{K*/8Q%1CS[U
+lWoI&Ӏ[ ~54
+w+YZW-+fjdʼnR<Եs &?ٹ([9X/-@1*{댒>;djex#n˺ WBn/˅ REIšUjb>3|R6“9
+ <`2yiYmNڼ|ie+>d)۝yC34tg.)3:
+V8@_e٧/f_cR&r/K$synpI6Mb
+\LA6\kL eע9|џ'(8\kcwX:rx1>YPUx&}?iWKѯаqa8Ί`tF_"Q\+<Fh^P]UU5{"X_0[s,AM3#Yv/'K)uaMf<=+h̏Bm5Z'R3lvٽb&d;Ȫđ{j8 ~i~T* i?Gaj~4Cg$ED,g6įP`-~HF`輶„g
+rO4Gg=꧹q>ƳP6!xkYc2C`x9]`Nbo5C6
+Sb~"6Yt=MOXD-".hc{+=oo/UzywR"0T>.)y.d UŘr\vj~)mcr<Yؤs ob2tB|f:&
+=Dbz«#[`bkzо5~_Z#,йr>",&Vydn5 ҪC烈tOFFx3ֹ偗Cn('j
14;'eoZL QâW0 E杗nf
ќȩY+Y)<Y5'%+OF&m.Ι'gAw/AԖX+|мY;oQJM66U<>:5KxI7nh\NomW(׼5ib7nI}I_LR)K HÚ5F= 8ѐ7o.Sd`&XMY4m7SD=+wk3|h̭S^|cZNy0=es[tZydc@ml~> u$ېWmG~P0 W=q崀` ߞM WG鳻#>`5gwF(wKoX'2K/ ݢ咉4[l
ե4/! Hl 2uI!^A4zT*ԝŽ|r֓зJy*X
ΡF
h996op[+θ|H{WaeJ
p+eKq$`+Eo`e*j4z+һ*Ik\qf'HI'>*dmU g(5?sfQU]z?X<늝1Mb2(6Nt8IR<}6]~:rHh|<kfsmӍ.qȷ: E1AX스=G7XP۱xtt;VYU'dT.x1 =:u| =BT/'^Dxk(_ٺج|~ qM-N0i5ۻ˷pRCmx(tMEuSZy0}AE
-gbS[G]y,-*ii,\R$h a.fl&W߶!VU
-{rLv]uO=cVeA;_E,|SZyՉ-??+|W
-{u \Ra6vK߆_бmk2l ͕6{ɞD17
-ڞKb1exoC \z+~z=+OR \z*Cр
-4PӣS9q5i)L,JKkXbMfIt
-Z 8\{Z+!jؙNò(\Zm;+!u 52-Y҅
-O%$I2MI1!Y:wn0\L\ZJf13TkP̫Ez\v ESgW#'t F .eqmi-
-:S ѿ"mtQJ c-I=Pte0SǍm}.R{H"bJmiڄ*tږYɫXviL_952OGYn|mz,u3\czsZ5Fc p"Ll&ɻ>
-]\68I~ީϞ;;ثj}w=uo_P9>g2vܮ%|e$ۍw~Uxt@D9kJ>LIc~H^bd[l22NכO[S-=q/<:7zzp\]T BWٿG7- 1
+gbS[G]y,-*ii,\R$h a.fl&Wg*C9Z ;~.1 "PRX)i<G
+վ=d:^bTfMҷt,k7ǚ BsekMc'v/
+Yw>es-ga)8F>gŋ+9Ͽ3}cϯ4 ʤ2Xbx> .wytcpC?}7)
+UH9{N v4svn:
+,EIkIӫ= ncG׎<(]_0QNx׎\S.c5&
+=(ru5~oHkAc'ʱ' 70^AwZu!WT. 9b?JRi:{C~1)g ="~
+ͱ%XjI"BL-W4Bc\ڞUY6+yn7+[h?K؍o|MNbklZoNKմhNͰ$<ywG+#ӆ';3{Tuf}W+/ >z?#޾s|re1 ]3JHo-F=(dsהJ};ķI'dd77Zz<_xtnQ6ɻḦۻݩMoR[߽ct4$_"Yn~VSͪ}wK1S5 d{~W^bZX_b-D |wB='fb0 Ŝ9,-ʤU}*9: Sq5˯/2_,;Qa*>@#ldnBH-幬꼿
endstream
endobj
-771 0 obj
-<< /Type /Page /Contents 772 0 R /Resources 770 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 710 0 R /Annots 774 0 R >>
+779 0 obj
+<< /Type /Page /Contents 780 0 R /Resources 778 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 707 0 R /Annots 782 0 R >>
endobj
-774 0 obj
-[ 767 0 R 768 0 R 769 0 R ]
+782 0 obj
+[ 775 0 R 776 0 R 777 0 R ]
endobj
-767 0 obj
+775 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 273.502 521.07 298.19 531.91 ]/A << /S /GoTo /D (subsection.18.10) >> >>
endobj
-768 0 obj
+776 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 313.911 521.07 325.866 531.91 ]/A << /S /GoTo /D (subsection.18.10) >> >>
endobj
-769 0 obj
+777 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 486.065 147.626 498.02 158.575 ]/A << /S /GoTo /D (subsection.15.3) >> >>
endobj
-773 0 obj
-<< /D [ 771 0 R /XYZ 78.37 808.885 null ] >>
-endobj
-265 0 obj
-<< /D [ 771 0 R /XYZ 79.37 508.112 null ] >>
+781 0 obj
+<< /D [ 779 0 R /XYZ 78.37 808.885 null ] >>
endobj
269 0 obj
-<< /D [ 771 0 R /XYZ 79.37 415.636 null ] >>
+<< /D [ 779 0 R /XYZ 79.37 508.112 null ] >>
endobj
273 0 obj
-<< /D [ 771 0 R /XYZ 79.37 129.3 null ] >>
+<< /D [ 779 0 R /XYZ 79.37 415.636 null ] >>
endobj
-770 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F29 371 0 R /F23 375 0 R /F20 378 0 R /F15 377 0 R /F56 380 0 R /F67 385 0 R /F55 379 0 R /F69 398 0 R /F57 381 0 R >> /ProcSet [ /PDF /Text ] >>
+277 0 obj
+<< /D [ 779 0 R /XYZ 79.37 129.3 null ] >>
endobj
-779 0 obj
-<< /Filter /FlateDecode /Length 6917 >>
-stream
-x]KWe
-+J/(JкTļO.ᯱȰcYC?q1j.ԓ}Qkʟ~=`(aL(x;1xEggD 9oClq '$]] cKS=0f#%05D'X[aU+eVGC?#`9]i !{!@j|ʦ_u[x)eJxRK=銷wކvhBl7zϽ7#.Ҿe=sX+`gpmWPcQcI
-?psNAJ>EmRAIlCKEi$۽ݢ$^EC_1)q
-[0P
-, Q(" RQD€."(] ܃Yatbח$=%#O bExؖJAlJFlKFLn b[Vb++qqԫ _,:G Υ0*,&A+Sa;z%/EˏYIqTL1&5rwZ6x.ruraG-uOo#(,r/ċ d+Zr/E˽`٪y\Kr)Tj#*ТZ +Y^zX9xj{5G-[U/꩝UtU_{U~
-wҴB7P:n(kxK5_+pϹ
-so+1޴[zP)_9QM,,X:@g
-8%j{mo@'uc
-N#@Qr?(agɒ'쨏ړQ\œ\<9g@O@ WLfbLkv,xKԄ!OܠoT'*^euFSJ`0H\4MB̢үAjOT5$.-줜*eoQ>Y<5?[DŸHt%I~-1Jx%_b)SJ̤96
-siȬS~(p&yjv5V*[,.̭ƿ+<rف* f31=eը
-FZUVs2 PcyLcRd}$[\GBsawX-+ ^2 M9UmO8]ƌU~4kGgt̴う
-P.
-A,+lq
-C2
-+n9eg`su{Pvb=&:G ?^l)?8G69CcG Cxb.C8
-29!ΨcMs]߳3+~1JnZIS_2bR.w+Ķ$&V
-b;V2b3_2bJBg` b[Vb++CX$@9A} &+Tx žf؄nͪsA\GDT,Sz`INRуSӃo҃-zp
-k`lAB Ӱ2%/@v*Gsrpl` A"78G-wqROBלQ^sj"|0"TxSi~E
+778 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F29 375 0 R /F23 379 0 R /F20 382 0 R /F15 381 0 R /F56 384 0 R /F67 389 0 R /F55 383 0 R /F69 402 0 R /F57 385 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+787 0 obj
+<< /Filter /FlateDecode /Length 6926 >>
+stream
+x]KWe
++J/(JкTļO.ᯱȰcYC?q1j.ԓ}Qkʟ~=`(aL(x;1xEggD 9oClq '$]] cKS=0f#%05D'X[aU+ea'g|)JK!>/1R ;P6cb;O)VZģz_MW}_F6CbCe{qw-y\+z؀L.*>ؑ ?60 7dC[t-ކ/䙤6D;\J2%*څIf I kL;^.u_Dp#|N[TBj-ZeT13йlL蠌pKhho'DCy{~ppĀA>!~ 6ޒ^(:^OZ4-];<h|Ͷ\c \-QxGYxK QEvO^PQhtmD<lW_[9ٖFĘgydjJF잝UV칑S?d,5҄Bax#r-͉
+s.œJl7햅`d!ă/'DJiWNETfcKK12NPJ±伀iZvIݲX|
+n%'-'Brkɩh:oy=w/ߕ^jҸs!WHhu"D\"ٹӅ~L7Z.q^s?u5_K
+zWdhzJLޢUhzhzhz#=
+U%|@2VPzf [Vԗ&5 b[Vb++/1f&bExؖJAlJF/ xxrsMOzm^rga6oyŃ[sԲYu?pyB3 <KdX(:JU4.p*Q [R`)rZjZ^jRK9XR`9slqe Uтa^RivpAP,XYN덭|)j^Kh9 taKӫf 4==?) b&<=e)axz0XvyIzkcggZbWKL zC?o b,0Nggܼ 6WK̘y6\&_Z6nZLGXx-ų>_+ykfļFd׈Lyc<% fGDzk:}yAo gJޒXx7>ޗh2XYțr~>
+N#@Qr?(agɒ'쨏ړQ\œ\<9g@O@Ϗ WLfbLkV,xKԄ!OܠoT'*^duFSJ`p+<.I:c#ik 2J[{2ҵ!qyla'-'F3gˢHD#/~(l/1͔)JIslҐY|(eL>jb(fnF[wn 5]!h/o6LUHW6Q*_c}v>g~}L=EǤLIH)؅"DML1:ZVdf34TQ<QHqU~4kGgtȴう
+|lуS\cc# *_ʔ
7"kLFde
-K| uw5S']+kc5(q*mQ6Nv DmD{vr{dɷ (zP%ϵg|vr`&ḮЎ X@v DYOEt\zKczK; G,&<I$I[(y60=P{(5OZga h2]M , ?`;K\X4q9X3],U9Vr-m \?uLDVbqC_2AFoTKDA_D8ϴ2Y@pT/Hb0 3z˞ JoEze -Ԓ9l,E/2!1PBc{(*]Yu<\gmp`{Ɗ|f#
-=_R%S>Ζ/)Ġ5|ɘq/ypt7mrׂGAXt.l_w gRGC`IHW5t"5[#~{J$.5 ԅ G&ks .dEJ >@ 2$JW=PdY5WOEJ =M*fP1aefUQ1t쉲3*ft R%RlGs+eϩ)D>`i>Sd#,MgP1aae#tPsyҕM.Vn
-JϬ@כVԗɎEO۲X)XɈ|ɈZKX e%!6R۱˨ঠƸk\ u҈Zv٘HfU2fMƌZvɘu6fƌJؘ9Z.1SK21Z.1o1=>fw -{.7cq2S\dfIĈۣd*'&'3jĵK>dVDcP;Rf^>>d
-O?Q2D^)E)c
-\N4Qs!I5NQ_8YTW^tI[7,:#e뜄 i8rQ+j|+wrQ*?$,1jR~g*}kJ*y
-ZcShN:]܊upb-o; `,ڟ?ٔPbyÑNDJ[5t$|(WcȟαX63®rW<[
-:' <\$9.GQ-rpkJ!\ hmi &qkwbYVQVnϹ$ʰL4mN, }ۊ92'Z qՇ3uCTL۳sO%SCMBDQ'Vie]uل/[,kTq&xih)(0> K1 ak̓Wgy*~y=UKӟ8BwN)fMXKc,>Y(+o1܃ERpUTt xP8U: KuH`&&ʄ`gT!2ʟ6)+vvVVibGɴ{?5+nv5TRA_d} xR=';4>28}.n1cl*FPCl!s]e<jbksPviknv5@R;y9cxK]W@p7),~Jq.:] df}{.z%Z٫^q툔 xKqO8S2EE"i<ʾp]D`.Q߾4q51f(%NAJwgϾ-m3߷Ik}O԰5u`kKwH.y<_=$5|&PN? o.?/t? n7#;0 `żcS"?N猖U fH£JxPTU_K^6#>H)7nTOL~U6+
-VC_ 1WB|0o7/h:1&;/-HJRlfp%76BrʤlaROgQLh/Uq,SIćG@=pxPgьGcˉ1:8Nˆmc{v_=
-(aOn7U_5ݼucAˋڒ;IowSE=fը.uNzNGm _=C,{l+y{:?tZ߉"w TxhgE-m[j7o4Jf'hAq_Z{~gO{'6 Þ8Ί]BXJ׽?vp` I:$JDIY\t:4OS{2Keu(|6]!;YX h:;ätQ)?Be[IT~/_']qSb`׹e[(Xy|W5sZޥ@92Hw{yzQ[~
+Kx uw5S']+kc5(üp6(/żMƲ(9ѯa[(8ў&smr
+JϬ@כVԗEO۲X)XɈ|Ɉ\KX e%!6R۱˨ঠƸk\ u҈Zv٘HfU2fMƌZvɘu6fƌJؘ9Z.1SK 2j#db\cbKcF-{|- 21Z%\.12oJ!Lr&%#nSUN&6MNfrsj}LSuNǠv<7$}|ڟ~ d
+*S$R%DS2
+ᚎgاF nK7Q [c{Hm4ҷ7t{%Qehp߷#+|'.Q}?\7DŔ5ߞ~(9O7 utGg[覕^ƯzveF޿+oͳgP]Ǚ ק)M_iKc*D= oUtZJ#|!$b]űi9ƲѭU< =X$[EK(ɏ'H^RC 61Q&l
+
+FeitT< %X;ZBwN>J];4dhf"iPI]2ϏK}Ш޻Nvcx1Ĵ󎱩^@A0_RH$һ.wyfr״[^??m-kv swoRX^]'uѩ]^KW4| )
+)Յ#
+# xpd8S1Ex})?>ẸLGٗ"95C,VZP"g-?~C$<3~hLJ?lk55 MHZ{Z}We-5[[CDr;-1$iwt7qurҿ\j_oG v|!!@b^o?|
+B*CwH
+"~!C5X6N|Bٍ鏉*z@Oa,-J>YW *iÌoZ.ɴhwpV, GoFbň#h%|Z+iau ]EI~?6. JC7Tf5fJA<r̆$uu?(/? WQY47;/-Hl͢QSJo8m^/:9I=k/JbkV<FqşGꅛpfGO7 )sl{Tm,mF3 !:78`Ο; 0lq(=W5QOK׀v"ُ%ef{(_Q_ |^3I-=kfeme;oOBZ];z[?Jc~R^q S_M4:՗iG>aG ڏ#ڣT;{#<YuM&%O8{ >vp`du nI4-vqPG<M(5RciT~tw0ЎuwҤtQ)?Be[پ\.?^r/
+|O(lySb` ׹e[(Xy=1h_/4𯊍k4Kx؉GҰ պ` w
endstream
endobj
-778 0 obj
-<< /Type /Page /Contents 779 0 R /Resources 777 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 710 0 R /Annots 781 0 R >>
+786 0 obj
+<< /Type /Page /Contents 787 0 R /Resources 785 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 789 0 R /Annots 790 0 R >>
endobj
-781 0 obj
-[ 775 0 R ]
+790 0 obj
+[ 783 0 R ]
endobj
-775 0 obj
+783 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 88.249 121.109 98.706 132.566 ]/A << /S /GoTo /D (section.9) >> >>
endobj
-780 0 obj
-<< /D [ 778 0 R /XYZ 78.37 808.885 null ] >>
-endobj
-777 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 377 0 R /F56 380 0 R /F58 382 0 R /F55 379 0 R /F29 371 0 R /F23 375 0 R /F20 378 0 R /F67 385 0 R /F30 365 0 R /F40 387 0 R /F59 389 0 R >> /ProcSet [ /PDF /Text ] >>
+788 0 obj
+<< /D [ 786 0 R /XYZ 78.37 808.885 null ] >>
endobj
785 0 obj
-<< /Filter /FlateDecode /Length 6978 >>
-stream
-x=ێdqh!h 2zl"9WT,ޚ3فl,fg]7"O"t>_? s ,Xi?_iJ/ȹ|\K#FOH
-fTPB,d! $ ʁ xP
-x-~88j^2D1RA  itiQ3xًHՄ={38E":1OJwo7`=sQΩO+4F|s#J;[wI9C lՁ ,{'Nм'’w? Zl`>3{ %X{
-.ٛHApzsV^ ]s=`[sݝwBh-lFmb\=KSWqځUhuݩthEw=mީv.f-?%~
-}.ȓʪ:åkK). .UcF
-N(Qu)k
-zoΚp`%
-^ɋQ3m"z/CydvȵRyilI.)ǧZ!{Ą>S(p3 A8a]B/(Kw^ȵP9$x6qf sf3W!uNDL'|6Uh'~1 i
-l4Ѭ4Nl5{#: |u}'˻5r76HMfUrd/wJz2ܫŬU;'k6m
-ڪ~NQϸ'dԍD+r*޺vN'[QL Îw&f 3a0 f_-5 7 f1kʵkҾ^J"fsPVa=϶&R%8MTߪ Z5mk-f8TV ֲO)}/4( 3IimmYItW[~6Co4ˬ6K#$G噾$1Hg0/7^1 <G7׾BW<FS25͡b6`Ja0WL-S3Ez[v즊%k*<?n,xPnzXGr+US@D>'!>x?bq2}f+3m 5=4if:AUdJ<TB?f5LBf3+ zipYknS8){TShT;ٰރKbf똘,m2QU2 X 'N| [;aFE(L`;Z*]O2VS7t#č0?!V gQ
-泼EeaQrĎVT#U?cjv~Xwn-iYq" Yn@1,B0RЄAШd+
-HB/Iʧl%(U1 tG v-ӕ`v&]ፂw̃• ׍0R3Hj֓1jNuҪ<VG!auLqGٰ%7Z߽f;k>Yw姼\L~{|ꠙll ?h)a(O>nw~t=ty,L/jK.O+}8GM؇uyZyx̦~Tؐ9%y}j=O˅>=>L+TZҋsM6AL4i\Ċ"8wܭ<4f 㦟-䚍c's_V)cY7ʹ
-<,82qs}-/ ޛpn fOK>
-~X7g ZR޺8$JD0`' ~w~o8ӗ>~wxuX[AX7P*f@cbZ4&,LQZ
-! qD-[[-0B ~k6%l'%3Mo9|͆i]^*%}I;"vY*Ei^&%nr\I *L[o(~C`PC,TJzU`oCGcWz;ij}l`7ԟjUTj$
-}KeIb*2Zo0jXQT)5Z^oتȥDL+uyBjrh(J]7>AY+jGwU*=MMZ"5XE?t4hG3(/mYe=S otw|"aM3[U0V+aR"6P
-SJF^ӒI!.X][AU ,5J8u}FN=6
-/~_ErrO\d!%nvjߺꅢxZ.a ÔD;ZW<_r{)QKM8)w3:n/&rIT[OlWb{w<U΢滮\a;lh εaOu
-t6]xu6u{&xةAUą\ք.5fc
- õn h2ܜ׀[\ZMM99ܻ
-m0mI6NYosiIjfd<7}ʢg1+`Iwq۩ncavĴuzw[v I@hw 1ة][֨&Ըb҃˅Vq ۋ:u/04K[  :PQ9' Ij# Za{c"/ HB[>e8X# d3ՂG!R2,Erh3tc<=*HdxxWlRSj/D>+8
-*E(RI  SD* +De\[=92j$ƈ>–aiqf3t.xz]1p7+^9l1K5̀nlzԄpIU}ˆ5ˌ5竤[QI
-Wn:Mt7R"<2iЉ
-. 9gr tz[$&z"Ez/eH,2Cg`J ;,-:Y؛JN .M:7 f1IiD
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F56 384 0 R /F58 386 0 R /F55 383 0 R /F29 375 0 R /F23 379 0 R /F20 382 0 R /F67 389 0 R /F30 369 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+794 0 obj
+<< /Filter /FlateDecode /Length 5733 >>
+stream
+x]K7A|?
+@F# #74F(tU&4RLr=4k_[bmTgRr̓gc w@X
+b?;{D8NOg
+8y@ Ł ['Ntpቱ0ǽcS7{ `
+{z{.
+v|
+u4!b0#'Q*_6Յ6$
+ň9!\ ѧそxd5]֘G
+}IJ fdd `\
+bVF|w  V~w} L^
+~5%M&Rg @ur2.vȹPylI)VC'woLʯl
+%C[X+n3C'V[ٌ"jgF6sfhn4Bdf'
+_}Ф).%_f<[oj:Gt44b5cޣ]+$O&3U}G/ͽXxoc߷ $h6l~SK~\v7L%rgI.{qI;%?E\DY{I.;Nrى
+N$Up+e/:8LrYK'Nr>rMͧ\*^oxNrYΒ\⃓n |KI.h',3 z8 K 4<3E?VfX`(Hq1]B)qA1`kqo}41l,;Ad[2V%mdM'_{~e+eUv5Dےrm/-גOSO)(+m-eϺ$Rv&EZ+gc[)aKڪym5t)A|ۆC'L*+KL)+c4h+?AgԳ'mIm4c!OO4dxؘ-6k$[ޮo3Mo+1iQܛcp l
+<WRc=eFV2E;WR7Bَb]ڬQW6L<uW|*ZJQ:(MI%"'s2X1hΝIٗlp1-Z\~1kbKg`mfqZaE
+Ng>~0#O9kMW6(4f2r!Dr!`b&&s+J4y]9r/x;>H9bnFPU"`Ծ]w/SM(.Fz=uE7rZrZ,OqmUn4A*∫`:[u[.>6IcfGg%­Ed~'̱IC|րU'N rf%[_Z|: JxIaR8J%fC0w$s]ѩWpJ \طBY
+ġccT(Q_j
+.1N vD`ODCJ
+UuT!5sOmU \/)=?aDeYhY)Z9$(aa!k"!^*8\x*]io.X bIP
+RuYG_QgӱWU5}k2ɜkXbY.H[S cRb * o o(}GU#v X2x/\+5Pe TrNPz83}=1Sۙ*l 4xG&BjUY[7cHs}\Ua,V*WJmө}|Yx "梨-…Xڀ2y^c}.~=ՙ)/m6.ϥos,,x厮}+Kъz'p<.wJS iGO}*cUG8# "jj_;ˀKbez[Jk`+ZVPë҃R{CA_#e^ b(z`BV0] ,UBYU -5[1x^4Yd+AP-E>udvKU؅7=e,!ls?= "6=XDDJĤFe_;w[wD|Iėӕndd'ZiJr, +{wBK$b;PcN6znX急.-9G68lԢޜ9)9s /f\G,T.c ;]FׅO0{/8
+uz {yxٵ=^8[\Ҝ+ [QKU~[Y5kq{Yn78w皘6=p桌:NԠ%ʻ?sۻ
endstream
endobj
-784 0 obj
-<< /Type /Page /Contents 785 0 R /Resources 783 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 788 0 R /Annots 789 0 R >>
+793 0 obj
+<< /Type /Page /Contents 794 0 R /Resources 792 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 789 0 R /Annots 796 0 R >>
endobj
-789 0 obj
-[ 776 0 R 782 0 R ]
+796 0 obj
+[ 784 0 R 791 0 R ]
endobj
-776 0 obj
+784 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 256.944 734.5 268.899 746.455 ]/A << /S /GoTo /D (subsection.6.2) >> >>
endobj
-782 0 obj
+791 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 90 592.245 101.955 604.2 ]/A << /S /GoTo /D (subsection.6.2) >> >>
endobj
-786 0 obj
-<< /D [ 784 0 R /XYZ 78.37 808.885 null ] >>
+795 0 obj
+<< /D [ 793 0 R /XYZ 78.37 808.885 null ] >>
endobj
-277 0 obj
-<< /D [ 784 0 R /XYZ 79.37 195.368 null ] >>
+281 0 obj
+<< /D [ 793 0 R /XYZ 79.37 188.613 null ] >>
endobj
-783 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 377 0 R /F56 380 0 R /F30 365 0 R /F23 375 0 R /F51 376 0 R /F26 400 0 R /F20 378 0 R /F52 372 0 R /F53 638 0 R /F69 398 0 R /F55 379 0 R /F76 787 0 R >> /ProcSet [ /PDF /Text ] >>
+792 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F56 384 0 R /F30 369 0 R /F23 379 0 R /F51 380 0 R /F26 404 0 R /F20 382 0 R /F52 376 0 R /F53 646 0 R /F69 402 0 R /F55 383 0 R /F67 389 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-793 0 obj
-<< /Filter /FlateDecode /Length 4782 >>
-stream
-x]K$qȣt(0kz{:=7I ޵A`;J>.1鮬H`D0 姅.?7L-8͵\> 8"b4#T(E/B I?Ï5^RSj*D)e?/ܾbX[Txc򧏿eP.$mSl&x_o$x QڑH~}ύW9)igTXyIK$RO%]"&F^߶ZsԆ Ĺ9hD2 hLԇJGիh,ؼj4v_桶
-/0tA ʵMæu{P w[<Vt,g>N>fқcDw#DV8
-0ArD~irf/ Ҩ|}(f4Ը7zJu\_K_;iv}5[qkZ\r u[ 4H֤Lʷ.he6ŀdx= Q}:]jL{'{u>%t8YA )jz1zЋ0"܊rD)x/ k%S&9v~N7^ѝߛ19۽qF(bVף63v1cov6yF+ܷ1o-Mmuҍ^Q5D/j#ry)w,C*j!%D營 ~ jru V.)%Q.H xSρi箘C<g0HRbR~⮘;YԖ(jgo[Jl殘{ADG抷.,0'(*>g[+^>(/>]1w{ {\v!Q^ 7'<Vߖ;<bUo+pO =miy0 :*`J`bœCZ{W׻}p Qp#q o
-7D7DV=G$1N~Rb,:'j)
-s/KHszZbl*!53 ]_Rm_@
-_͉NߢBEelrf-$Oa36ۓts`U=dBšZvTJr }U
-ܘ\=Ic&v.zYE\?$|CK9#iIf!a1W@
-JeruRJ!ls.(ŏ
-rk+smXk{%ԼkJZF*(Uu̵CoB}\(^{{Ww^`'䒖䣒S5Q
-d+KnZ'o늎3:7!|\WkK| շ#!?`_͉06;B')FpMf)xmPlo7Ok&K xֱFrBя^Geǒ4-p<+Oei~6:3t9D{i@^--xDBJRώ
-~[3^5?cF&]k[’nÝlɕbkS]yunђHy>.)/un+'䢒vOh#}^ )vx`0?KmPgz 9,?މwIzѩ (<5/\&):JE]j'?%ӵrf*kQkON4aړ z 6V>4K ;$^pD+gͪP5[cՇbg¿5wAb#?i)D3ȃ-yиj1K?{fW~韨k~9ޖņ;v۬hXS?S wY5fȖ^Cߒ0 =4 *C$Ftck$Ա"A媖?& ?TH Bl'8 !Zy ^Rzinu;q ᮨ3p$VZNyҷ`W~aH%^X
-@nRٳbCv|(2ukgɇyorPgRݹ9͑HtO'jiKJXE?@"o/QW"A:
+800 0 obj
+<< /Filter /FlateDecode /Length 6277 >>
+stream
+x=I9nw9ZƼ98-I܃I >vۤz >KER$EQF嗅.?;Kp 7b1w-
+[0N[hHr]v>hFrHOL-8͵\>\ ˿T;<R*-|8J~p ?Ꮯ.%@-ҧ^=NzqF! ulT; jhЮ2zV
+|z@[ Eҧtrנylq}{[rKJOt[-Qf\9S
+&*ʸ>7-N1EjcuTDヾ&C%Ě0p`ILXFcR? tzO6-,$3#f9.)QhOȤXJ]T0:6
+JUiۿ
+RSMe_< i%PSFmC2z,fJ$) K5Ǣ,YJpy\ӎ7 %
+%n+@N@uȣ&
+\P[ tS/fD&yyKpc J Ntԇs Q[ bf)G T0_q M--dQ I%q.KEh)GGgQnTU"b)Hбm]m. VIb/k4Mͼ
+Mwv0`W}QLhODǝiOۖfiL]V
+LÕq4c_؁3( Me sY+1d.C ♊!VUo_pգY٬Ze X3FB^a>IF)QeO(05KZzSBG{o{(
+M:6Vn O3"/JVԷS:{J'Yt:Þt4Ǹў]h 9C(c}""@6S5z (1̸<sDqݡ3xdMb썈PDŸhX3M qȺO9]5X"~#W<Vt8Q`S@@}qemG
+S J [c=W۸jz a}FQ~7[=\1̍a8O??F,ɵ<Xnd&r; x8@F0 㝧Byp66&Fbe`n1z q=z"RnSIt=<{"+D'q>Db}.vy9lOsm QZm׭Ү®-1~?bWj]6[lG;vGgvV<l˲ݨgN +XۗyZ^כp[D/0="3O75-9]ESΎ!1ˊ‚t[®=9k$]!qc
+o!\f&OrO_Y"pA,]["r/v]!fzRb]!;m
+-iB܍=Lm+hOЃ=о6wjӞ6oΘ: 8^<7"7>:{FIbҕC]9u4zwh\G
+Pv^s=rbV@o-{@s=s4`8gV5G5ЁOj7*
+;nZtW7nƏp{n4ƏZ|MzJjsh5n|:7C#Ȑpv 8C/1{h><Ѓm}
+Y+vS6܎i :nocH:Wnaa7{Aj%1t [[
+@{虣8Jdz8?AE8س}1(۳c[wq j 7P,Qoq j 70,EcH6Ѓc/0)L7>z }1>68
+)@ z虨KjP̡ }+L!{ҹ>!8ňv4otKwah 3qq*^
+L#0G$Lk_R{\B fyS39=^
+r
+1mM^Q=1mrFᶓ@I8)ŕRaЙdF{RO0}̃0- /LW "TQ'g <A߄q-%F w|Fŏz @*(@Z"xGF=Ċ”|v5} w5:5cG1&~ |߾fL=j٩W75c
+HޣVVk8m̍5 zT o O}
+x{_3(+`ɖ@={SEJ1L啄ITs<ͤ5 ROjIJyv1 .+RpE/!dvtD͘ҿ%ֿbr?X
++dv@؞Ri7o{5;tk%kCMe)l=\4Keh9$a*٪l#}ET=bbV%?Ph/Y_0'сR x^M;f
+J>c~3)%Ж 0WKq8J<Ӑ3-%
+g-s(y*< *f@MU(/2dlz.>Yfo1؊5@@OܾbOvzKC>$n?f4T!jkzhٺWbyݳ{ByŜ
+x-*\يC_?&[:~h+`{y̭-֎}cDύF1:n74ڧJjozjё(y,}MCms(0jj{a|{Jp<qP_f@Iɜ{E5t!  (RfRdrkSeJ| It˛f{`F(WtՁޟI4gWYS@>xwCɆ-ZV&IGㄚW|Й{aOs9dyL/;% q-tS!y1Q?khpنA6a4q|?9gN{JjOԿݶoݿO$QwsvYxWr^=ut)@jޱ#Js:ı7@cDj@rQQt},
+>X%ؘET}FιP""S=7X[q呯+$;1Ǚ<=Եy/{e9#vKQuko #`$Կq#0S B ¬ Y!@0G0ft&#!4uRAOEr|qOa-
+|=o]^-ÐSf9јvPQہ_Ο1~u,|8j 7RjFw#SMT WQN3<,ܸt;95X_0|]k<AyZ>7uapVA DFB߃'7p;C*nV̫1$7)Oδ
+nu;~vO, 8u@ZV:3gi B7Rٳٛ*~yC*HЭ]=ߔ0{{3&~l?o-a0o('Zj1sXEr8&~.J~fHHot?3&~nl3?)K65,L 
+m8~o_oyQQT,iE!+uf/~^6fF$3qZ#>{X!.uv$cV2 Q>2-2ϓ/xeVL LU"i"Mܥz0h3xCR?
endstream
endobj
-792 0 obj
-<< /Type /Page /Contents 793 0 R /Resources 791 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 788 0 R /Annots 795 0 R >>
+799 0 obj
+<< /Type /Page /Contents 800 0 R /Resources 798 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 789 0 R /Annots 803 0 R >>
endobj
-795 0 obj
-[ 790 0 R ]
+803 0 obj
+[ 797 0 R ]
endobj
-790 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 414.633 270.794 426.588 281.674 ]/A << /S /GoTo /D (subsection.12.2) >> >>
+797 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 414.633 215.502 426.588 226.381 ]/A << /S /GoTo /D (subsection.12.2) >> >>
endobj
-794 0 obj
-<< /D [ 792 0 R /XYZ 78.37 808.885 null ] >>
+801 0 obj
+<< /D [ 799 0 R /XYZ 78.37 808.885 null ] >>
endobj
-281 0 obj
-<< /D [ 792 0 R /XYZ 79.37 305.026 null ] >>
+285 0 obj
+<< /D [ 799 0 R /XYZ 79.37 249.733 null ] >>
endobj
-791 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 377 0 R /F55 379 0 R /F66 384 0 R /F56 380 0 R /F23 375 0 R /F20 378 0 R /F29 371 0 R /F69 398 0 R /F74 469 0 R >> /ProcSet [ /PDF /Text ] >>
+798 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F76 802 0 R /F55 383 0 R /F66 388 0 R /F56 384 0 R /F23 379 0 R /F20 382 0 R /F29 375 0 R /F69 402 0 R /F74 480 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-799 0 obj
-<< /Filter /FlateDecode /Length 3559 >>
-stream
-xˎ$>_Q?в`i>9/(QGWLlzDRߔT+_|~ׇ^|Zz|A\0a .
-G)һ?~ x%+u$#U.&8$a/
-h=GҐRA" CQB\getd$n,L;ad^|Ou2u>Wn2ZXVԟ }TXfAmkiŷ \}&@0Tt P+ͤ m$>%CMuevxz<Uq"_RDk")Ok@5CWii,Ø%%'EJ]``o*HZC& .Y3(mTćߛeC6
-C;-L3 '+~0Fw¢ =u¦w`q#3mOՓ O:+őW2/yzZx,>\
-Ѐ_wzA22/V~[ R(WK :رc!$ue%q )YzM㡊A% a 2PB+5@мh~SD+Bzjp^ "w4:ֆB]+;S7&W)Kw?Bx1?jhͲ=Z['i除ɥ(!}HMUY}cpv%-YJ
- m9Ky:Kyz/EgЪO7BMB[M2υGcHI \ e
-WABYt/Q y1[n=
-JdgLLRw%r+d*w
-D4qQ1Ӽ0'P+|tp8;o{z>%nſd~1p9uؙbdž+*[SV
-f]H71|hplG4
-dsyUSd 7R(xu4}m&)v`~ImIlhL3smg!nġ8nJ&jܚ${uJ!~SLՃ)nǽeV oW>wTq< X-Ug(7lN'ZniVRԙr7C#9gY]Xm# Ph(tZSZiH7:$Yv $_BN
-MGaAG"NUv^Ȗ>9w
-+/v>eֽI^%JV=M/2ƕZ~vxI/]M1A#7y?^3 0fN/:輔J'ܸhdqq"p 4`3$2{]3ƙ;,b,r:GkepwpzR64Jsw7 +N w;Pil|Q!>`W{5`+^|g!vtwhEww&ZP%jbxhgaA9 (Knτ /)9ϲ-mJY Ū+8s|X>M{O hiNιO`)Mp1/#["TE5c8ؙ4SBiC
- `.?}{mK1aeX.
-brL)ÿ-~YV!kZ#T6GL߁(NHž8N4O`HJVx. 9(l\~m/`5
-_`#V.F^~:TC`? 5HruI7ƒ|r"p0w3~;c2$tAyp>^<)淵-ld굒-EuZ2|vܕDd [Z2NK&7N2:Y$۹OJ3IJle+)]F@aΫƍUԨWݜpc'ӑ+sB*؊V { =+v t"r㶒OZ+mFX}~t %M,xU}h4@+ykB(kH
-(lߕĀ:
-s|kJCoNGYn
+807 0 obj
+<< /Filter /FlateDecode /Length 3560 >>
+stream
+xˎ7>_Q?Њ``-)a(QGWLtH⛒re˧9~}٧EYaן E-! ࢰA-_-?<J鴔޽FL"Vo
+(IC6JipMO@"wG
+qe2Z&ё[H^{0턑OzN
+'YWŋLt|&JG{4c]Ijæ G c
+[^i2fhؠߏ5fwҎ5p<%\^Tc.$Crnʵ6C]k,"rnw|[ŻI;ؾ߶cR[`&m`wFkqh R+"D"'p|kz7j^۲L+;8WU*NJ3uBJ6KBIJBgZ74SW+uGSYӜ3.J,එ`Ev^k(4:R-4WJ,rNn'#0lgc#
+T'*j^TA wk/dˀo;9KfN=m:=sXQ
+;N: NH^v\yX ‹ڭ\CweS7X_ߡ̂e
+ߤ}׬賵DA2[{?IaK9U<[{_m%(yoڽ6\D)Flf+i j5:GiI4yiy>7i=T$:s=tk6\+l*zfآ@DavU?5Vo.x#R*;'h &E=JiZ$V}]{#R*1@j4- #8)Oe -7,)èx,'7Ƣf찠LmOcTO>c&
++; _ ^%/^ޒ}Sr+MmJ-\?]; .Vx&L_
+'0$p%+fa6.{yyir{Yʗ~zZ@/Z @+#|Z/g!rO$AvD|8rraPCh<wFvb 8A]/ZJduZ2FR@Ŗ:-
+>If; Jf"2If-'%_& fd|ܿ'$%.Jcxދ {A0U_*jԫnN1ȕ9IlE+U`Eyt@aP`žOYWa:Xq[ m-B6P#G}yru
+*ba4V6D!_h5V$xXJb@ѹu>Q`y 7'EAУ,V7
+|%iA9sXw{N`E
endstream
endobj
-798 0 obj
-<< /Type /Page /Contents 799 0 R /Resources 797 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 788 0 R /Annots 801 0 R >>
+806 0 obj
+<< /Type /Page /Contents 807 0 R /Resources 805 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 789 0 R /Annots 809 0 R >>
endobj
-801 0 obj
-[ 796 0 R ]
+809 0 obj
+[ 804 0 R ]
endobj
-796 0 obj
+804 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 414.424 267.823 426.379 279.778 ]/A << /S /GoTo /D (subsection.14.7) >> >>
endobj
-800 0 obj
-<< /D [ 798 0 R /XYZ 78.37 808.885 null ] >>
+808 0 obj
+<< /D [ 806 0 R /XYZ 78.37 808.885 null ] >>
endobj
-285 0 obj
-<< /D [ 798 0 R /XYZ 79.37 771.024 null ] >>
+289 0 obj
+<< /D [ 806 0 R /XYZ 79.37 771.024 null ] >>
endobj
-797 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 398 0 R /F15 377 0 R /F55 379 0 R /F58 382 0 R /F56 380 0 R /F57 381 0 R /F65 383 0 R /F40 387 0 R /F59 389 0 R >> /ProcSet [ /PDF /Text ] >>
+805 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 402 0 R /F15 381 0 R /F55 383 0 R /F58 386 0 R /F56 384 0 R /F57 385 0 R /F65 387 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-807 0 obj
-<< /Filter /FlateDecode /Length 12532 >>
-stream
-x}[%z`t nxjZ%`4X-.C6`=w#dsԌ'T}d{/O߹otT˟?RKHտ\Ε_OS{׏vn\F94v+%|k _#L ©Û/%tP"etzJJ}ER)5
-I#@K`=N>KugiX}Pî8[{Tm}*w$#o6q_)oc#AMzW8e کӔJ=|A$2%LE[p@OHowͬB˯W]gxDqS>APƑGo< v{Ꮮ竭4IϷ' P҈\żW7Pr?BK:9P`-6Q/_i ގ r3?]n/5\RzWIp0Q=3Ӹzi8^iH2Zg6_۔k})cI0S3w"$r=!C=2N1?ܗE.| cj#1SJ.2%#u1Bj̤'DZH9G͌a䧬]4qԪ̾嫬k`0O5ݍǶ3"F^$KIz=uGc9|c@9[kkV839珩2V*h'?!F
-=?v'Y^υ!_FxW.NYiSà9jHhο낳LYٵyܚMa x }װx^-&WG񐘉B҃D) fn{871PgA(0UHկɅ. JNooY5S\LH!_|\t㙻á!SF>>4cYr?{c)0pkϭ^ݽ1{O+"7yҐ5[>-+L\#c Wf0`&w H^Wpbضڪ뭎+<Wp]eGtg.S~nUe|;ДniYןz4]mZ>Zng~vzӱyo>w
-o/ߗ~|41|jG,FH/Wd?BOT0>jPP1N '{;lVa|;!ϹD +φ/ſK?O*$>=hѱ+=.>?>r:V)hLoU,.#\?IVz;ZOk~P>jsU蘖G{ukz'i1ezPB,!d<9lo!!^QC~6"Dê?hHllۓ}@,>c=Ϗ o/A73i"U =~-$a'|O nvB8UUB/wDL!|GwDl!|Opjx(Bݜ_"ao_*˵Jm?iWPqĄ1liΰ.xЂbnIZnz=m,K ݏO]ܸJ!2֒K~ 8w<$5zǖ^*Xcj3Y ׍:xCvz'?D*4_dwj<
-TobdoZLbl bW(b'wTq aJ3 Q dpI'XCJ&
-%_Z3{؀elHv&Ә" A7[;\+1vSQYº<VSUga(;JY1r^U1rVL7b) #G-ㄕLANhIp %/V
-,GmXQ QT> Xp
-2\Ňb\Ǻ`kf@UZoʇ%Y08S>-YVTR2Y3446.B}Q9K.U؃a"p\\jk)Ym"ܖp9ZƬ 1r3vVh*l4*(ZQ׊
- 8>E+Ityr=Wm Yn;L}sɘ{*gBmh97FlxBi@A儶Vad\
-x\h}bP'8#UY   {i6G^!q|Y\m&l(zBƐ"I8sxg' Ld8s3LcF ԠBSUEnH loXN]x8:TTz'oɷE0@%+& #]km@:z&4>Wf
-&?ƁSHrۉFcŨLy<3
-N>VprvR|I
-Pҙ$:E,qX DFDs9mpܳ*;9ީAԝ& (`~Q
-Y>ʀBA=v 2m*!Q]vNMdD9yx@{VB-GlaZ6>
-A
-v yQL᪺ YnhwQ}h
-mA(T,Ɔb8E~
- 3';RvrGs`˄ǘ=m6>XRmnp*1*arՇź`ܜTI(<-YZMB`6/-Tz>G?ǗP> Aı:wj y!sLF ӣEkxd4BtfVr
+815 0 obj
+<< /Filter /FlateDecode /Length 12533 >>
+stream
+x}[%z`t 0nkZ%`4X-.C6`=w#dsԌ'T}d{/O߹otT˟?RKHտ޹+
+͹ҫsh
+-_%vaMA)G`5Ns?zξ[X' T?ߞ,|>BJ#sN2_eSC-@SOF|;z`Hoez;j<2Rhtrgw_J G}^%8^1Q(NKcmJE:Rަ^cNsOǷϟBux+B"?#}nAZVLj^^WWrI˺|]fғX$͜ˆ#f0S.8jUFfUV]ʎ^B50g`omFϧc#e%KBOј?qPo3AGZLc꠵L~~q=jス9DȰDB]Ƀs~skp58,Ӯ@lw!0hZbe o/,SVvv.fS.lB_?j5<^|GF0gi|<$f"gе%QʂY.F=,HeTwsju<p:#Z- Ft*i)+E;}/xnƄphFȄ/񔑏awִ\F^X
+:'l/$ܚs={}wo3i4d<3{!zm&Ui.[rܑf3q0vX;G$/P8?l[/zJ>_6?ẹ"ְnإum;5Cw,WaRm<<m?SMGV,NS{:/G`hF3z쯏
+<%_/?5;}N˧vҟnUOF?O/i=aA XP iykͷq[GDpl"\ ᯡB@"Ӄ&J-m?>2q\"=U=nM4m6ک69^iW=lPQ}vq\LC]PG!BɓC6BP!N15g-H4Gp#ƶ=ݧ$:?v x t3O/Aߞ>&?J{\l|Lvb7: kw,S[_u-R|N[pGwDl!|GDL!e/Ss 7NFa|RYUjIj
+#&斟fMsmwsOrahcY^j(~|?HVt_K!ay;ŭVV*hLxn+;yL P"S9W fM ZRF_V
+%ZwUតۡÀXѤTw6tXARh]`v
+S5)BlT|7 h%f{
+bsR*Sq+xTb]4`/vX0$QpB~#Kxb⏇o.cKJDX?;dp
+r@du1Pn\!p[[JQ
+xOٹCHi`*,.]l"*Ftd_\[v}.ؚ$41Sا,ل*$T.c3@4a%'ԞIZو*E"7$౪`lV#U#gńp#v`8+
+Q}2NX TᄖA ר](l`CeFkW%5 Nԝݳs'b'4^['Ys3fSA䚙rr)s=Y;zD6xP*Z3lUcD oCCXc* cE5DQy<n'2c9)pq낭2Ui1%+λ^dL5.WĶdYQ HUc?'deиrЈ϶W8P
+]D7.T
+`* gÑspqdr[FZTSpj5 T)ZIYѨnp
+L\+vRlr;aZ
+o<X;AY
+(Fa2`& (3RH;@tl ζ:C#w#R%Tطdu &`)F__"8dP{1=LI9093ݎUZZjʏ\؏L"4NT1nÐyWK䐊Ӣh `<׈q S1m ?tbƎ#׾k%id nr@4';I^x
++s}QEXRD9!4 -xH$Ciܩ桀0DOQ6vx*$* |-r@rMMwj
+AఏT"dq4T0T,ܧ&j"=yef saP!(+n` CG|$h᝝S6x001R
+MU)B!va;uxSQmN蝼%A
+h؏Hw p֯9n(ζ
+
+K%
+Vrc,qDr'+|cf(
+A@U02| x"VVH d[N' ֆPbFz'w94S 5EZ ;8iEp+6"(N1UF1=&Df-}/F]+eUPPm{B<z|_;F)$,gJ́ /c`I5
+&©ĨUqsS%Mdj5 _ƃTz>G?ǗP> Aı:wj y!sLF ӣEkxd4BtfVr
נ%GVbϳ`N'A \4,FPM!zPQ"
uGih12I,+w z;9N9 ej;-Tl@3sqK\$5"5C_H |cKF
@@ -3453,106 +3515,107 @@ gpo*r7oT)Ba0m87XKgr̊jQ_"KpI{,D=l x/-؁@
єxYAYG
5;9L:*1M
B :]DAnNuR+e Cm* $??n7L:m`)N?T">J2!A":XK]T*&ֹ© jN4cqԊj*6Yg&W<Rچsی‡牃t2r=
-B݉G VBdX0R$O|P%WӂqsqRE5Uy[dc҄}7
-CvCcR6ʎYjdEߍ׍ aDs=V])E2Mo݈x|}-y dI&<&XPjXD%\Um!,`q^XX-]Y{:2v:.b5$KD8YSDbAZ
-a(L̄A5v0,"tou@aRcbUHxG#6^IV lRXK1zfFEH`3Ԟ@BMY(4آsa:s-O)*-`VOѰGZC?2A:3aL 5*ס~$;stTLE[hu-kĸéq@<|2XX ^{#BÁ"gk%id nIҺ.iNwR1\U*oGL923H@/B"n>b+BlhLDXnľ"D,rC)g3f䖊i<hOuw
- N:|7 ϥq -vxxMAgU +3ޱVp;FITcj'J!HuPabpKHDS,qX DFDsCmj>枭U玽SA;+1JMQ}7ACF,Y>ʨȖ&U02|y+ +$Ue2-'ڠUeH;Fը@lGΩ@ԝB̘H4cj܋vjq<b Z==
-A
-1*Uu"ܖ>
-ѻŬB۲*(Q=XyԄb8#ME⛻>I{F*RvrGs`pMMKQ0N1wUqsS%MZMBƋD
-sZapo0'%ǂqOisLF ӣEkxd4Btc\06nZ*\U`K: g8&L+!FPM!zM"O#>0LbD#־fH^u&'26s3cǮ]>8v}p.:݋Nӽt/:݋Nӽt/:݋Nӽt/:݋Nӽt/:݋Nӽt/:݋Nӽt/:|M7cpY #ѐ<_V^ycQì$%)Q")곜OUvorBSW
-
-Dҳb oL$,Iŧ3Wk`w7ļɢ1?ȇs,<DD \|-=s^tg{o\Z6W`mm{>pJX:#x4xc7IIUVNn^<{{W{oJx!FQ< `"N>1N(Yx k*lǪs#pC[$.|- &P>h̜;}KǸ8 ̉\N1s#_L?fJ>sb 1,:Zj}&mLwNgp>f$1ޘa<
-f;Quuꭝ@yxIlRˊ
-ݏzh5M[BWú/9ufn"^,v{SpG6ɴG.~}>i{,U"ą^i!.VBºIpk.d2L0J(=VjG}%^o)YU ۝r)%@ze8S(k}u
-!@qEm\T/bK"g}fYoe2sK5݁zo^߿OaS}<chNq Bi_0BٙTEd͗uZ, G,:.kKr]?W |ExX9)Q\:ޤX ޚ`9c,J:-6ޯ)dZL5 ^|1R~NZ^veȘS?ݯ}8˾_GBnu[I7a윾O!ΟPOzz[*7|c7EO7,|Q<c|Mگ_S¯[oo~N)R+g6zwO/߆O(G:I:sW`c2(us!سYNi+̝mOHrU|LUHioŀ3ĿE(v6.[뻦9"("[R}fVشȵJx[ԣD`?NZ);k)<WV~OJ=ZA>wAk.oM^ 
+B݉G VBdX0R$O|P%WӂqsqRE5Uy[dc҄}7
+蹗/w|br
+td
+ u\kHV"dLqY.>[dU)P%žQ  Kwj&`
+m'gØ0fa='kT3CjIw:-ДZ<׈q S24xdӱ
+G7fsE$+ּKF7"1Ru\lӜ 'yb⹪TnkL)-sd> f́^vD|6WbJ#"s}QEXRD9Mg -xH+4T ~ qa0h.rꔉӳ` HU)Bt# V=yef Om&L
+Vrc,n
+wЍQَSA;*1hENJԸi5 xzz"pbN91UF1={&Df-}wY]+eUPPm{v d!=qG #ދ7w}T(|OhT`b+c0Q 3>,JE)l}AY{1梵)3`N>Ka5ʟQGkhh##Ƹ`lݴ3U)ҙ=tp*MWC􍠚BsEߟp1--Fƅ}a2s׉F<ܭ}͐LN9 ej;mf@3Ǯ]>8v}pc]tE{^tE{^tE{^tE{^tE{^tE{^t:]&n
+XG<!˝;xn.)~䣆YqIJ8j%S,EjSg9u !?`䢅[_ɯ$b2։vgޘ5d!~I$YMAyY"3Ec?<Ogn;yEU b~17rY
+mx{%6qryjx^ųǃA*1V&RFbP <'?<&}WZ9yY_A)xD,vx;!i
+"nh:hf7$f[sG}Q '0vv*'tka0A&Hn9ͼӏz߷t#̜37t~1P:neP!f9U\3ooofs:S16'ƬQ0ۉ:{gOVo6Kb\VT~CW?do-2D}ɩ3pyL$57F
+| WﱨVD3ZB !vO#\s!Жd쇩$HT2F Vd=+ P<z[?NY2JdLi'-+)Di%]#M_ecUݸ,+m㢲MX93Sz+ [z |{ n~
+Cw4J"Τ.$hxbQf|?b
+GwO@˵57JهocU~
+qzm=x<R 6(=޷i-"~eeR0o~~z;}kEs״Lr@wO]9_׻~z/6$nOGw?Mr/a˖A;4n
+yY,'洕smOHrU|LUHioŀ3ĿE(v6.[뻦9"("[R}fVشȵJx[ԣD`?NZ);k)<WV~P%ɞc {; 5oڷ&Áiq(X
endstream
endobj
-806 0 obj
-<< /Type /Page /Contents 807 0 R /Resources 805 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 788 0 R /Annots 809 0 R >>
+814 0 obj
+<< /Type /Page /Contents 815 0 R /Resources 813 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 789 0 R /Annots 817 0 R >>
endobj
-809 0 obj
-[ 802 0 R ]
+817 0 obj
+[ 810 0 R ]
endobj
-802 0 obj
+810 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 363.495 251.269 375.45 263.224 ]/A << /S /GoTo /D (subsubsection.5.3.3) >> >>
endobj
-808 0 obj
-<< /D [ 806 0 R /XYZ 78.37 808.885 null ] >>
-endobj
-289 0 obj
-<< /D [ 806 0 R /XYZ 79.37 771.024 null ] >>
+816 0 obj
+<< /D [ 814 0 R /XYZ 78.37 808.885 null ] >>
endobj
293 0 obj
-<< /D [ 806 0 R /XYZ 79.37 693.277 null ] >>
+<< /D [ 814 0 R /XYZ 79.37 771.024 null ] >>
endobj
297 0 obj
-<< /D [ 806 0 R /XYZ 79.37 298.711 null ] >>
+<< /D [ 814 0 R /XYZ 79.37 693.277 null ] >>
endobj
-805 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 398 0 R /F15 377 0 R /F55 379 0 R /F58 382 0 R /F56 380 0 R /F23 375 0 R /F20 378 0 R /F29 371 0 R /F40 387 0 R /F59 389 0 R >> /ProcSet [ /PDF /Text ] >>
+301 0 obj
+<< /D [ 814 0 R /XYZ 79.37 298.711 null ] >>
endobj
-816 0 obj
-<< /Filter /FlateDecode /Length 4647 >>
-stream
-x<ˎc
-@J(Юjn0 jM"~%q]EM:y79MKс3_M.!
-;%S_\"m> V~-~*);~wm">1AJ e\%}/i-=!(.ǿ=ݬ n,‚
-'>cD,; 5 ˲TcΌL1ZXE)Z*ݐz"ޒxWOg᮳ę?KcLfm{W7sߋ5Bp_qQ6C0
-3`bgƭ:)wVlAoe%T&+kЕ\t ^~/?MJOMhKusɖГ̨2Z14lMT1YCq7:<,
-0У0ɩTӥ1O\!Y-xgRB.'xmVrן)8~PDo
-3Ca*Ϋ|{Yyޭ첇scPžQ?q'\6guO<J|F00V`aFvŠr4&˰mBUl;ܥ '1فApWVGrabqH gN$]7- )Rp$Ǒ.Id;q Z;VX똱Vӂj9y؎ 7N&ÌRz ;2 5ƽĝK۳$F1Uj ,?(g:A\c.4?ܼi'L"va־U0A 5g>pc[ 6TC&Z Y +#:b֝%xrwTnzh0||?o6T&8RbeʳZ9r9[21 H~yLL6Ȧ4Ls^' ؟n4~=:ed!\㩫Ջ1xYY6C <|
- <+l깭-P>vP#
-J Oo͌| ~bέu kK\E|R<57r)1,MFUL^JÝ2Vft)>1v*p+q(γ|eB]? ^x־bʋɢRHbTͬnTVTEED*f~'KE+4FK_.ɂ `G%>[sw-(V
-d5.Y9;y+QqM\5_ܻQ5B`&u#ؘGX'>l^JޞFM>4`S=(Ώr] mbHz$6)rw~LM-gScx`Zӵ]1 aa.;Ѭ1*S ©j4*.Q3qاAVr71EyO*%WZ*q:徹 |x9Ryʓ>›X:<1W֚Ώ7
-}ihMB"h3X铬
-)t H~թX?㯉S
-}Dl2 lLҖ<k{(CIJOcnW; xL[YqOРDfRmG2wʘ<˺ ӢV$@W^xݛ8Pפ)Rk}IE !r._~׵IN-Ԩif&!AGc2t#V%}/~Q:^)!o/ҞXV2qGVrU¦
--fUf; fH/cf\y$S@suδXtkE~
->`׷ls⃹;>;~>RpW*Ny*o2ELCbt;%*GTy/2 e_K=DUE+*UYPTBٰ%dZXO6MYƚgΜ [_/,*p_4`q;un
-T`è7.0M5$pzpU88p|NLx3&CK؞Jj„O{ց$bd.pԙޥ!R#y֌:s4cP==Zėf!3t6| ՄN=1
-u-RJo|acbrL4d4M_'7(Y7RZ~ks.H:T/wD*]W:ѢlI#'ii|(PƏ*ъ6#P<5RQ-]ȥfQh7n7#rOصщ(gu |s>wxZg㡖hcETSP4Q^1gG|1֩ҶY&\MQ$4 )l;AtmHuǔ(:wɯشϬ!eTl &-!}kTl0pZc`{*'ֻ{Hu:%lSka)=BVJp-W 5q<]~vZ`(-د0vSn _kVR#bWd_\è;έ28V7>
+813 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 402 0 R /F15 381 0 R /F55 383 0 R /F58 386 0 R /F56 384 0 R /F23 379 0 R /F20 382 0 R /F29 375 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+824 0 obj
+<< /Filter /FlateDecode /Length 4505 >>
+stream
+xnd_hj .k܂-S9P\$jw$>ɧ>ɧ__>Ev Sҩ?Y*uyz$4[ZCt/ D 8qJї2/4F蛋w^/sBu}ifA=5J?HVY %GZUYϲFp*wUɉM*'7iһ
+zYXxpeWzsi4Baj)F*NN7.- 8"Y눗R3ϰh+۪=:pp_4H9!m;t*7
+!.%mB#Qe!xeixf4RŤ9A''{X4^
+V$[%)# <G *KIv9z'Ufϵ
+ ks0£3-_P!1|ϫfї%a.bbTMrpm9-:`6̘
+PD@xzs3(
+eO9Yengiə.U,YFf ݠc}ђFNkGIbmy݉3˚f;2 ]Lnv$YЦy7Bk3p wclPiTUVxx@g xd1~PF5CrGܸw3si[KC@(JQ<z=ؖ@չXș\wVB Ōp6ۆMb;j$Z+S}z>|ʙss]QTΒh<;Tnz;L2$JcRUY
+W,m}5@yV 3G.5cx"*Pw>_;<jo22=%jHqFISn3Q1X>̅k<u5{1:ϴ1:f軋Z9!癍hZ^QqXzٛO+&z319_%M."?)~ ]c-gLJÍ<Vjft>n+24T'*(γ|eB]> Yx>~oE³IRPt$Q6)g8*OZhv~*/"|"L"4f٥ݥ /bEN[6pY yXV.6{BQfAVp>vd}ݷfkv^%j sa+j/:xfvdsBG\Sd)5)@yEq_(qf;eWr4Jlq<$B[?J
+,yd*6ƚ$zi:RRΠs[a\1nЇ%ڣvqƀ.cXchi$x%©h kc^q;h ("*AK9Nyo!D< eef][Ǖ'Fz3y} Ӈ6ִ/Y) >IЁb/1T%N
+ncUv OQ zf"޶!KB5 &.u- nT!h_IQ0t]m?M dqO#ggv.(vO]-Q ]
+ ؠN+xdZCCnfV-8OIT J;p#p\8+KWES%L#e ݪ>mӬ>DQtyL)
+yU/R0**-.rz-dXyeUF?̠+WJa6aL Z=emCJy59D@V'g9v^/}j'4[mx9\ͅt<k)SIT ÓwB86@fO;5*PB`\ 4(TyM^9
+6 ,C%Qf"5cxyW\efClQxRfi !r]kA~HN-Ԩ*LW'5[5f^);7ə;oBX)4ol][;G/7Q-mrI탊<+94+'JK7(ʅ@4kދi4*8i
+gFbY PV%MZR:JA|`s&kFggb(<<c>0˄G-İOu])FHF ?ܼ
+>. s6uo_qaaSSG;OtPԫ7aǛ^&XXVBE<ÅVyjîK2zFzEE绞1hoF
+>KZt/}Gk]3t yF55,IOV
+ i[9yy̵KJ%u[#|6#g)c_qwff2cc, =IscURHu/W
+8Z \{A!ÿ~Xٕ̆BC:9u$ kH,Ýv;uG./ߝf 'O$]ʝe@JG^2c޽]k
endstream
endobj
-815 0 obj
-<< /Type /Page /Contents 816 0 R /Resources 814 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 788 0 R /Annots 819 0 R >>
+823 0 obj
+<< /Type /Page /Contents 824 0 R /Resources 822 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 789 0 R /Annots 827 0 R >>
endobj
-819 0 obj
-[ 811 0 R 803 0 R 804 0 R 810 0 R ]
+827 0 obj
+[ 811 0 R 812 0 R 818 0 R ]
endobj
811 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 229.069 182.009 241.024 193.964 ]/A << /S /GoTo /D (subsubsection.5.3.3) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 434.303 163.448 444.76 174.905 ]/A << /S /GoTo /D (subsection.8.3) >> >>
endobj
-803 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 434.303 148.634 444.76 160.091 ]/A << /S /GoTo /D (subsection.8.3) >> >>
-endobj
-804 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 202.628 139.169 213.085 150.626 ]/A << /S /GoTo /D (subsection.8.2) >> >>
+812 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 202.628 153.984 213.085 165.441 ]/A << /S /GoTo /D (subsection.8.2) >> >>
endobj
-810 0 obj
-<< /Type /Annot /Border[0 0 1]/H/I/C[0 1 1] /Rect [ 117.993 82.382 482.208 93.839 ]
+818 0 obj
+<< /Type /Annot /Border[0 0 1]/H/I/C[0 1 1] /Rect [ 117.993 97.196 482.208 108.654 ]
/Subtype/Link/A<</Type/Action/S/URI/URI(https://tex.stackexchange.com/questions/528975/error-loading-tikz-in-ieeeaccess-class)>>
>>
endobj
-817 0 obj
-<< /D [ 815 0 R /XYZ 78.37 808.885 null ] >>
-endobj
-301 0 obj
-<< /D [ 815 0 R /XYZ 79.37 591.896 null ] >>
+825 0 obj
+<< /D [ 823 0 R /XYZ 78.37 808.885 null ] >>
endobj
305 0 obj
-<< /D [ 815 0 R /XYZ 79.37 418.093 null ] >>
+<< /D [ 823 0 R /XYZ 79.37 591.896 null ] >>
endobj
-814 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 377 0 R /F56 380 0 R /F58 382 0 R /F55 379 0 R /F69 398 0 R /F57 381 0 R /F40 387 0 R /F59 389 0 R /F46 388 0 R /F72 434 0 R /F88 818 0 R >> /ProcSet [ /PDF /Text ] >>
+309 0 obj
+<< /D [ 823 0 R /XYZ 79.37 418.093 null ] >>
endobj
-820 0 obj
+822 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F56 384 0 R /F58 386 0 R /F55 383 0 R /F69 402 0 R /F57 385 0 R /F40 391 0 R /F59 393 0 R /F46 392 0 R /F72 438 0 R /F88 826 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+828 0 obj
<< /Type /Pattern /PatternType 1 /PaintType 2 /TilingType 1 /BBox [-0.99628 -0.99628 3.9851 3.9851] /XStep 2.98883 /YStep 2.98883 /Matrix [1.0 0.0 0.0 1.0 0.0 0.0] /Resources <</Pattern<<>>>> /Filter /FlateDecode /Length 45 >>
stream
x+T030U(2 8LXX) @`@
endstream
endobj
-821 0 obj
+829 0 obj
<< /Type /Pattern /PatternType 1 /PaintType 2 /TilingType 1 /BBox [-0.99628 -0.99628 3.9851 3.9851] /XStep 2.98883 /YStep 2.98883 /Matrix [1.0 0.0 0.0 1.0 0.0 0.0] /Resources <</Pattern<<>>>> /Filter /FlateDecode /Length 53 >>
stream
x+T030U(2 ,-,,r ,,Lt–fF
@@ -3562,1944 +3625,1983 @@ x+T030U(2 ,-,,r ,,Lt–fF
endstream
endobj
-822 0 obj
-<< /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0 0 100 100 ] /Matrix [ 1 0 0 1 0 0 ] /Resources 823 0 R /Filter /FlateDecode /Length 15 >>
+830 0 obj
+<< /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0 0 100 100 ] /Matrix [ 1 0 0 1 0 0 ] /Resources 831 0 R /Filter /FlateDecode /Length 15 >>
stream
xP(
endstream
endobj
-823 0 obj
+831 0 obj
<< /Shading << /Sh << /ShadingType 3 /ColorSpace /DeviceRGB /Domain [0.0 50.00064] /Coords [50.00064 50.00064 0.0 50.00064 50.00064 50.00064] /Function << /FunctionType 3 /Domain [0.0 50.00064] /Functions [ << /FunctionType 2 /Domain [0.0 50.00064] /C0 [1 1 1] /C1 [1 0.5 0.5] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [1 0.5 0.5] /C1 [1 0.5 0.5] /N 1 >> ] /Bounds [ 25.00032] /Encode [0 1 0 1] >> /Extend [true false] >> >> /ProcSet [ /PDF ] >>
endobj
-824 0 obj
+832 0 obj
<< /Type /Pattern /PatternType 1 /PaintType 2 /TilingType 1 /BBox [0.0 0.0 8.50403 8.50403] /XStep 8.50403 /YStep 8.50403 /Matrix [1.0 0.0 0.0 1.0 0.0 0.0] /Resources <</Pattern<<>>>> /Filter /FlateDecode /Length 79 >>
stream
x=0W Y".RRҿ^( U b1H<ܪY`2rir:"B,Yr߻qB
endstream
endobj
-825 0 obj
-<< /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0 0 100 100 ] /Matrix [ 1 0 0 1 0 0 ] /Resources 826 0 R /Filter /FlateDecode /Length 15 >>
+833 0 obj
+<< /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0 0 100 100 ] /Matrix [ 1 0 0 1 0 0 ] /Resources 834 0 R /Filter /FlateDecode /Length 15 >>
stream
xP(
endstream
endobj
-826 0 obj
+834 0 obj
<< /Shading << /Sh << /ShadingType 2 /ColorSpace /DeviceRGB /Domain [0.0 100.00128] /Coords [0 0.0 0 100.00128] /Function << /FunctionType 3 /Domain [0.0 100.00128] /Functions [ << /FunctionType 2 /Domain [0.0 100.00128] /C0 [1 1 1] /C1 [1 1 1] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [1 1 1] /C1 [0.75 0.75 1] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [0.75 0.75 1] /C1 [0.5 0.5 1] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [0.5 0.5 1] /C1 [0.5 0.5 1] /N 1 >> ] /Bounds [ 25.00032 50.00064 75.00096] /Encode [0 1 0 1 0 1 0 1] >> /Extend [false false] >> >> /ProcSet [ /PDF ] >>
endobj
-831 0 obj
-<< /Filter /FlateDecode /Length 4697 >>
-stream
-x]KWhX@
-pN`(Dr,;@~&=3k fEVb_K_&:}AOLM8͵|df2P)R#).gQ ~VCLρ?E^ZRHyjf)P6ʹNg4Q2)P0uGn-?UT\IŒ:7ۇ@[{IKRX5V,?)42 YJI4s=UZ5f“>)I^=_k@:ձC.E
-<=AM\
- A%:: W*OpE*ni7oi|ʲXS
-6i+rWT_~F,KuڼO80Eb@ݓZ<Yd#k^'=[Y5ަr@zo(A]e @ Y5<ȋź>j*YlXѝu=&1,{] RY
-dԯ8JaTm S6j͐]! tcc*t/
-NgYF h]R47µː=z&EӸȡm%zS{ ]sN/2?')0IaUaX")."+-܃; Q˸(qیKCNV{Wɮs8V(%7tʼnX簚aW-XVv1WwߎsdcPT(%
--0$@J5\(Ib ~Q_-1Pk]f=&;ޑ:ޘ+N%JB6v628'Oxmhw}9jZ|5"Y(q*׫1L=1=zқIZ|3_n$_狺IYv=(=5<*M::"0yĩ?_Y"s?VN~b}4G݊3R
-`X多sS3WX|Pjh 8e `L J.k[[ZSGz[s<ۈKvCJD: ?/:VO}|KcB)9Sܘ ętX3p{NtTZ
-}off?g^)*D[MW,nF%cݶBjG54ǦR9}\jE54r0b+)YШv)$Z`aLZ0&N \.TzmB_fV "s˚//~9(JVP'sQ֪w4Xr+xM ,1tQ# }R0
-zӮ`jW(shc]4$1rڮwR\t\&%Ҹ/XmY`BUyr
-SEmǏu5,F/fu +uA8ŴOAhO[0fĪbD|yi)7`IV6Mw=; ͟=Fظ0IݴUS:#NjE ]mvoE6V*TvSr7q)Q|BzQ=j*B9/l)ݮ :?ySN]z>#/Pfaۏn+G
-]V~7aƍHLS@GwU>22pļU> ֙Ahap6
-a;&3PLiWao_H5€ጀ8=Lg ^)jzǴVOKO4فXJ]oZ@ ~ X]I&eja{?]!?ݥ ;'JgPh{$?e.č){ CW*m_B_n)#-,Rn9ZaU]nb)@ݿ?Uq@;*^=0~њPzP*F]{⩡[J&p~DVُLUAŞܛzOmko[Rڮ+Ltwնp+[{*xjbH;yGs{3WËױ.jmpsx
-w jE>;x=sю2n|aW%M֋I>3$>DKX}: U Y8'3ݜpZ! 95zqJ*ԛ7ڔt-Չ$_pO?ËW `/~ P{yŻ*hQy K:Q).}wlڻG*(C$]O7:<נՈM.3¬\.S`cw3|դzȂ_VѿKN 1-8MYj\7ddSxɻKa)EC@tq|
+839 0 obj
+<< /Filter /FlateDecode /Length 4234 >>
+stream
+x\Y~_)X@p ȃd[@O.sh6Ѓ fMU$)Qo x>>9184rtaqDhFfǗGJ[J;j
+!/i/ /9<q O}YPK3OOԧ+4dŶL1e.rhh-вF.<%OYf>Ṡ<Ɩ4)pAj )CJDiS9QZTli^
+¸-7t:8n,ݱ0Uc$Pu*xQИ1D+=\ @ܨ%xW4; 4&XL`bE<u_LL?^)󦣚Ô
+}'3=QCm۾Ť(E7~Ji&F3U$mJ2x_6Icu
+b >-ƁVi]c?UEcƬ]ic#8L.>z=;p fP0J]3c?[<> b͏`.NBs?HI4sQ?芳Bid7e'H}\ UZg[$X&EV-ϣb2}l-jj t9)sۆ=
+PV+UЊ!{jEE<O'[ WބS}@%[uڼ8>\y5X}żtGij$'bagTAlU Y<U# ܮ8 OT͝!ng4-MjxViŭ&!݅YMP> vd M4]5\)a`;]+ 0z^0pڎ)*za5DF8! 2 &%>M
+nԒی% bBXЍMLKn/J-&Pb>+IUpZ`ZbEO.X}.QhSۗnC!l譑e>cp#iq㐡D :4_U$gAxu*U Yqk]O(!/`t#D*ȅ7$Zg#)q='
+VBQ:ϿI|N}TX#5lp"jdTaLQ5a:d uL0_`|e9{MwY+a
+WLI +vVߟ_B 7--?4&Z l!tR:kj9kcͲ
+F+5<}on%W_ , RZ
+jE!j&k  Y}O B:ZS67\]r33}e̷пBUڨ(禴 vRF> (~BJ܀$Ŀ/ߕQǿgv@oQ˟ϿOΤ ރ˪>M_P>|G7`Pdʨܗ:MFYw|{prГW2mZ܂bVSw~Bg9Pb/QϷ6
+Xv!>6@L|;foQ0@2Uw77a)-}0V|cu.e.nbvvb(KD(C*n]^^7 ~`= _c)+_~\V`-YuZ=F*jwF
+ PؽGZq!XihKpM!DS m[:Ʉc|u
+f+\iKbG[d'[P=S-Whȭ ,bݙfZttEYU`>& DY6n>qϑ!9`_P ?K1p><Mhʇx)LL8o;P뷱9ܒoxb7^(~72O<M(&c^F2˩]~f4qP?ٯ?Mb=G-iY+SJÈn Bh8݊'}>$/oGE@*bl7^ObAVh엮sհq__7!.Q
+8^" tM;
+bPEJ< .SϔO~ |tf> l>rB8!dz^1\b)83-'mnq#Z p\MdǦ?إVVFsIp%UDDizBKDj3 uCHG,*F%%5 68!Q蒷döcC}XE$+T]7p>:]sJ˵sEWBG4[̡.\/}rPˆX#
endstream
endobj
-830 0 obj
-<< /Type /Page /Contents 831 0 R /Resources 829 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 788 0 R /Annots 833 0 R >>
+838 0 obj
+<< /Type /Page /Contents 839 0 R /Resources 837 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 789 0 R /Annots 841 0 R >>
endobj
-833 0 obj
-[ 812 0 R 813 0 R 827 0 R 828 0 R ]
+841 0 obj
+[ 819 0 R 820 0 R 821 0 R 835 0 R 836 0 R ]
endobj
-812 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 393.199 721.708 415.675 733.664 ]/A << /S /GoTo /D (subsubsection.5.3.5) >> >>
+819 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 229.069 727.686 241.024 739.641 ]/A << /S /GoTo /D (subsubsection.5.3.3) >> >>
endobj
-813 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 432.088 721.708 444.043 733.664 ]/A << /S /GoTo /D (subsubsection.5.3.5) >> >>
+820 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 393.199 673.888 415.675 685.843 ]/A << /S /GoTo /D (subsubsection.5.3.5) >> >>
endobj
-827 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 463.299 74.11 469.523 85.567 ]/A << /S /GoTo /D (section.5) >> >>
+821 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 432.088 673.888 444.043 685.843 ]/A << /S /GoTo /D (subsubsection.5.3.5) >> >>
endobj
-828 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 480.227 74.11 486.452 85.567 ]/A << /S /GoTo /D (section.5) >> >>
+835 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 463.299 69.726 469.523 81.183 ]/A << /S /GoTo /D (section.5) >> >>
endobj
-832 0 obj
-<< /D [ 830 0 R /XYZ 78.37 808.885 null ] >>
+836 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 480.227 69.726 490.684 81.183 ]/A << /S /GoTo /D (section.5) >> >>
endobj
-309 0 obj
-<< /D [ 830 0 R /XYZ 79.37 652.951 null ] >>
+840 0 obj
+<< /D [ 838 0 R /XYZ 78.37 808.885 null ] >>
endobj
313 0 obj
-<< /D [ 830 0 R /XYZ 79.37 613.666 null ] >>
-endobj
-829 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 377 0 R /F55 379 0 R /F56 380 0 R /F69 398 0 R /F58 382 0 R /F50 370 0 R /F40 387 0 R /F46 388 0 R /F66 384 0 R /F59 389 0 R >> /XObject << /Fm1 822 0 R /Fm2 825 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /D [ 838 0 R /XYZ 79.37 605.131 null ] >>
endobj
-838 0 obj
-<< /Filter /FlateDecode /Length 3078 >>
-stream
-xڵˎ>_Q?вD mY{X8ij:zT{=ݥ)S$wr>|xsuqRJDk>~~PFNjQh?ytj2() ;?}Uᔲ'Ji Gqt>қ'q[s I8[UMU).VF)ǂBNFӨd2A&|Juu$[F?h)6p
-{Rÿ6%Kڡ `|.+1X8nm7);m0L2d $d UqL2WyFec]ߧhB]sG"#Jlm/irS~bma2mIl=TKoB$) =t\q$ldqs)pG'j#+#:Q\ks7eL6su=ٔSX90Y16Q5Pvxc_o:
-3SJ6L\7D-=an$^(q<Bѯ9p&/
-.]ȼ%~ o-g$֒m:#A9ӖHh|fx<,gܤQ}{S&tFc<[t8mU?JٻBU">PÚ:7MqGh?=Vst><1wSnD`?<,G/} 4ONF$%?b}A_3f
-6xc}P p^߇* JT[HD"H|\"ԿÇ$C5-Q^+.60nĂb1XY!S$3WGuq5 | &2 {R<U%ziS)coAhW>k4:NN:kofyUKT0">t^OSQQJ[@[gЫLND5=
-̀?^f#~\9*6T>ߧwC/3}Hp?]**+\ 8ӷ%㪛hTWW&F-\@0a(~hfT⮃DĤQ uoKuv=l,2r
-Hkk:
-MaFoFDA24Y)w
-endstream
+317 0 obj
+<< /D [ 838 0 R /XYZ 79.37 565.845 null ] >>
endobj
837 0 obj
-<< /Type /Page /Contents 838 0 R /Resources 836 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 788 0 R /Annots 840 0 R >>
-endobj
-840 0 obj
-[ 834 0 R 835 0 R ]
-endobj
-834 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 450.259 200.734 462.215 211.613 ]/A << /S /GoTo /D (section.13) >> >>
-endobj
-835 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 475.166 200.734 487.121 211.613 ]/A << /S /GoTo /D (section.13) >> >>
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F55 383 0 R /F56 384 0 R /F69 402 0 R /F58 386 0 R /F50 374 0 R /F40 391 0 R /F46 392 0 R /F66 388 0 R /F59 393 0 R >> /XObject << /Fm1 830 0 R /Fm2 833 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-839 0 obj
-<< /D [ 837 0 R /XYZ 78.37 808.885 null ] >>
-endobj
-317 0 obj
-<< /D [ 837 0 R /XYZ 79.37 771.024 null ] >>
-endobj
-321 0 obj
-<< /D [ 837 0 R /XYZ 79.37 238.154 null ] >>
+846 0 obj
+<< /Filter /FlateDecode /Length 3553 >>
+stream
+xڵ\ێ7}(Y`wڀiyHfcXO ԽTiJ#R"%vy;-_>b*rx~{^363nтcq _OK}&uC犁q_ &9?Q7a%S㟩b|P]p%53cJ m,~kmWʕW?SYi@0
+DdJR} ~tL͸ HBS(]w mw ^kHnFlR2L^OIm2 )I8%B3]1@"_It&Xzm #"d0 w]Vn4`BNc!8Us)))ÿDϙN*XN O׳mst7l3tbڦŀ
+paM{iyJ.;KM'|7,Er@k-lZ(t%`KuנS3Ф)d .5Fi=y-ߴc~K4)5=<kAC8Rd )Nפ;:դ'BcJ\M A̹3KQ gwU8Dsn$q2(ȁb,3A OcdmVHb~aQ̒
+UeJ"93;YaxȍsI#hԼ5 b֙;(.ۙ<H<r6RMOH%覿yul:͟unl%$Ѫ @YaiA9IS} ؤN# a Gh!j{jZ}xzCRkx>1]}u=Rd/.2ɢYa8:E_BukғnJ58z2$t4sWMab+:$>CIac6>$1wʬ]"e-(*a} M ! I$?#DǿaiI.ٸ{"=,
+pV '7oqe A]OMY`®OEU6M#뛵qu,Io`7`lkJc0~sv
+InhdL-<Fün nְ~hu o+q2cơ
+U5mUG(H΄K̂SznA=lI1LK m/Ai}x;4,01s5rLsC+[yn+10X~xw{)u6wo/U|k+>|OYQ}-pGL_023L- 1J1a>X&, ÝtmYzm:}w6
+q~m"Қ6fnnWLJD]L}]CߧL +E `i2q&%m+7]`Az aYWrK`nB^CK}͵:LQvǭ!'vsU
+:kG
+KVXa"%Ls"%fjI}̳2/wXR.s:d\Ф4ˇ;e!h}FÝqw!SC6W)ضnF{F=xOpG*+)-v8Xiǰ]x,Nʹc%,W(DpF(Bҙu`n"-߽?C2חm4Ip cP~CFm<af fj%S:; gtҺ=ߡ1%+RSk>^r0eŦoM;B:x7j*uR]UKdzkWECZ;@FAiT.ҫow%
+14=t7ښ2g:,q'
+Np)'2eMqt5-q.I0LrC긹:5 4kB52,Ao%nP`|׶T Ԡ¼ 6?: ~e)nEވ4+cBn>^@OW嫒oq}.t.Da |ڥ1=U'-ɈqSK39bsQ]G?
+iJdwj+d4i5u]qB@PI(h
+endstream
endobj
-836 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 398 0 R /F15 377 0 R /F56 380 0 R /F55 379 0 R /F67 385 0 R /F58 382 0 R /F40 387 0 R >> /ProcSet [ /PDF /Text ] >>
+845 0 obj
+<< /Type /Page /Contents 846 0 R /Resources 844 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 789 0 R /Annots 848 0 R >>
endobj
-843 0 obj
-<< /Filter /FlateDecode /Length 3327 >>
-stream
-xڽ[Ko$W19
-Ҏ $d"94],>֋E6g ?>+'϶oO?\OE\\`][q Rs-߁s^o?<u`[SC%\ r~Soo}|_|'~9s$ ]ۿQVa6.+L !r0/%ёQ3tcڞ8|)e-3zi!e}F<wdd˴;Ǝ|f
-~nKԏ2=3v8fo>tkCߠe#h;bB=SAc4; #nw0pڛhL'VFʫy-im窢 Nc-!kFD9"m-dU(~d 2h'N71Ay+DD[e2\
-II`i
-$%7uK[2K y:`km<
-Ӡd,jcNSFt Ie"K9ˑ 42{u#މ7xIh4LOϣaib`"*n:&ו-rGr-F\m68MMuPx :tnh:y(߱&so<P'Yg$ȝ7L/u$֌NqGZJ ɷ{!ft`45rXy8nc_53ȝ$.SnʘS,Pe "bB N(ԖYA(HRbKO{@[
-i/LU3& %SR( WSS$~V1֧qf)qFCMct\,ZBaNePäj~(uvz$flP(˂#y§s$JEs,7G].XN,Ts{f~syFx'-T<++ފ# V$4S O5w$̈́Al$k =c`>k{
-h°zGiNDETD_Zـxs[[^&pG=jedb #wf78}&RO!½gkSEה|jB2aBt9TiU{ϤٍC~=qD,f)V=y>ˊ|oXN>k;FFݷbR(+hhL: XE<p14h)9&ܟ]xm aI򜭗YV|{Ǵ𛵗1FԊJW2׻bN|!G-v9,֖njXC6hR]n 7 PW~HI $Z<}^cyuܪU햮q U
-C.Ϋ =:#BĿ.KbĶO'ǚ՘?.SۡupE?TLȽ~,:(iܿm꓈(SQCshf qE.3z+sQ7]B?$C5~kA+';d
-/doHhL1h 6-%S?X@J}~2[f](i_?v/_ŕ/O<}xYsz #
-#>~򷧯74OkτZ0xV.EԌWkZzV #ӛ^BlYJf.
-
-C1,dTW@m]
-d?Җc!$Kbvt y9{N)gn![
-j{J}
-WN hV@U9'K8>~m紦}-=XqYOʷz$ލ'mp ~{U*<ء?HGcfF˧GDErKI㰓-v;}d mއHɧ'V-C&“."Z& H*[K;QG~84)Lxh<:
-C03H)>6׼#~ n&{rU6
-xJȰ|sO
-endstream
+848 0 obj
+[ 842 0 R 843 0 R ]
endobj
842 0 obj
-<< /Type /Page /Contents 843 0 R /Resources 841 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 788 0 R >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 450.259 143.155 462.215 154.034 ]/A << /S /GoTo /D (section.13) >> >>
endobj
-844 0 obj
-<< /D [ 842 0 R /XYZ 78.37 808.885 null ] >>
+843 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 475.166 143.155 487.121 154.034 ]/A << /S /GoTo /D (section.13) >> >>
endobj
-845 0 obj
-<< /D [ 842 0 R /XYZ 196.679 252.834 null ] >>
+847 0 obj
+<< /D [ 845 0 R /XYZ 78.37 808.885 null ] >>
endobj
-846 0 obj
-<< /D [ 842 0 R /XYZ 196.679 232.64 null ] >>
+321 0 obj
+<< /D [ 845 0 R /XYZ 79.37 714.242 null ] >>
endobj
325 0 obj
-<< /D [ 842 0 R /XYZ 79.37 185.93 null ] >>
+<< /D [ 845 0 R /XYZ 79.37 180.575 null ] >>
endobj
-841 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 380 0 R /F15 377 0 R /F55 379 0 R /F67 385 0 R /F52 372 0 R /F69 398 0 R >> /ProcSet [ /PDF /Text ] >>
+844 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F69 402 0 R /F56 384 0 R /F55 383 0 R /F67 389 0 R /F58 386 0 R /F40 391 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-849 0 obj
-<< /Filter /FlateDecode /Length 19536 >>
-stream
-x}M-7r^E]'I!LԀ1aОpO ﭺjyq.dF-Eo./7`_~HZ9o]/[(/%ەO?+G{JFw?ӟp};pmO]|t3=q\\rF\{s<}/n% Inu/k/t~o][i{\N|.~hujXo5j>Uɷ?lWn-֏2|dꭵr#XnWc#nWΞNJ\]#ͻ]pqv^~o/t34_Vy?^E+5z.__~N?o? q{륞wk-}?ź?V4C5\BO.μ ʼ9ܗ]2w'D h4< XO&F{W-9h]4 yw kZ>ݫi`Wb^6 Q{s^hICܧ45\7J)|"i.Fbt#3QIpFҜN?3> <zk''<x\ <W"c97|oAO%mj`]R)Ok6kvn喨 s4a-vxJ3MQ'}8<\Ś>=V'L'?A6wk_h֡g5sٿ;|$fMAѭCkӭ^|N?}5J&r%&9<sX?3i+M[4j3WB4{UL̍bB<3P'CĀpbO?s=\Y-.mrwC 6|V.!/%dzw yYV.!/%d5zw yYV.!/w%dzw yYV.!/%dp 94h#>9J](UtĔu]ƞk/SYyxgb1r,u]=QJd׾7r}{\nIQo$+7fqQ_׮K|j^}i_%Ӝ\XH5v]LnzSm^ޢɘglxL;@Yn5szLφS (54[U fT;`SM*0B&_0$Fd~B߂mBS(mܧNwqt.P(Z* %xl:hMLd| fu PnB=OY'!x
-i
-
-"S!oR4FǡK:)⎔IncΔUj2#5Z
-p)Rx C=~T54yܗ
-W]~Ta GnsnX3/Xnr*2v_.`!+"Jo) :fBV4Єv ~F5T^2Ljfh8ڴŏM<;
-dAâ;=8wd-72bE9jXP é@= $D$ϳSHkMt)JW@4W2` '?DnGbN(ato-UJ:P"6[ ef=+I(P=WQn0FѶUWLSdZ+E0ɔh4/3TX*]۔Bd<#?z ´xq)6B*ئ2]/Jĺs+ r<,^Xb@Y(OJ‹zK?9f Y
-]"n7(mGMXfLTlMWBy}H~j8@DO"T۔ZKEUi/1eT3 + <c?źJgԮE˳6~uYT
-v_9*&2]
-,JĆMBfPY.&*s}E~'6Fb*
-)}=xgtž[k͛B1+1
-
-S:k|9] 6=vAJԈ-xцfHI;R@([z=G^\c@ִVK.+~}AJg.\>L1 <cWتB|Ip5pR}p0%d`.s {Fs1VG#R64&_}aQPs+Pc:2["xS/wµMքJӨb'1w4sJw\a]ϪF0HYENP
-cePHαҝ|5 %4Pev
-%p>.W8W"}%nQ\_[rcU*
-4!|ϟp5x7W8_ lص6 4VSc'M@ʅL3_TПJ`oųyTS#`QQ
-%x4F`rG^aW.~+shk䉕FQkgR-+|͜^) 03WͦvF U& WY5ژv+%BbVɜ>hųj,+OЖp@Z4|^
-;ސce!
-(e^ʴc)Ko3udN_j?(9~)m^K(O x t
-٘LKa~f"][ǒ/}b'2VB\Θ0kvR1.+\(w/Hoqf˻`oTT#v A2d1j̏)J9rWyzk _,XTH7C Xw.W+;d+nsfg;Q=rQ
-yA>U]@EBH^zάsO<7EF;i;[r ȶV( 7:^9mx4$`ۣUq4T~kTTf#X-x
-_Zk00UnAv!t
-$~Gt6^Ugz^ LYY`r˼]j/$H91l B BvׅSxvȼrN$Ŵ90@
-2B&/#@S_,xs\ K,,-&r%X֐St
- ZE]_,:*.@e=XB)v_(%'2kT^~frrnƵ-##:\H t
-~-9y9Xh DC nm<@Jű>&ze_L(ͤѐءnt
-h_浳#);z=%姈S//w{~ZITtKi"l24kG^Q[dkNNgnHE(WKdFF.b%=6#ѸHoQrRD\+#}^d?3-FSFsgP#TH*s g;JDλNx
-A$R[w|;LuJk,Kg(Pցw bց$BU6xwl158heA9D8J_Z 2!ry !`÷O@Rp1%뉘r0@y/ٴZUbA):,Ȗ^\ã
-?
-xL@ 4ښS(%4ھ
-d
->l6ڣȠ?|3W֓:B [>ԃ
-4J&US)7=?_5%NR-У(u '*) ,Ǫ
-L9UPڔsjmqܣo9̖s)"gG9&5n@Fjaª
-lEJR*&mM1ĮТ{*xtXS(؏MkxMׯ;ocg) T(f+:T4sZ8f޷g0˷`Új4J}sAޮPeӾ[T$K+*ti bsESxxs)ĩGGAǦ8}DA)s:^[!B![a-GDp}"|xWVx[ JHO2])|ϣinNwoZjêzc,Ȋh-0#&hK?6c * F ,wt~`/ .WB AL R`3x }usoT?n5^TEpw7" #rB!
-5-R_Ii[IՄB
-@M'IJG'*d
-@p&l{{UA
-" ?#\CPAP|*Pu
-._BB 71N2P#޽
-!U8KP
-@(gS˫6δ*+dC!Sa GE)ҝJa葱@?Ue&_T{{ɇ _ ~yn- */0Jj8BCSQجփKO*0h%M_L6­. m ̃(*茶#1eL7BGSG ݍ?e2Z{l{]ƼJnt փf2oMΩzuAb*:li7[[Ƈ[RX1,Pl!ڣ;8VԶVvxdSȡ䰦@RNLZ^3gҿYh
-a
-Qɱi" }Z UERC [Rt
- NѮ,{ZG`0dbKEpVs2k
-1  #} a02@@SEٮ`*pTiZ/j?0jڊc<E 邆+aPڒ>#wmfRSdgV`RM }9MgAciҏښxTVG l X"8ۂԘQ 1N\LJC_T(hP/R"`-
-GpFcޑ,HYU?ޜx}P,U- pJAUk6).6+cA6KhvNyH4xCێeSx19*4UP۰ť?#vΛP*VU_sвWn\3%#
-n+x֡
->*hc4^Y ki>A"x(XY &l+|
-n,hE)HhVi
-sAЀv`A+sO]DZ)ҟ,j L!55*pAóf H\ÂX^Ӳ!I#atґ%daX؂d XhL{erb53-t
-M)pTuޗ4daM~)MK?8,B-3.t3j#V
-J󷶼'*+anaD!(y1f&M Á7|Y|eqK֯`M1@!<k_69f=?3rm7?/Ծ,XQb)6.(px̔)#G{%&LJҟrj
-cLe) 30h*u.HXwn*bFZ_7<sLQ5xr|1h?~;7J?i,Ǡ %bQ10 > %ѷJk3JfSEGBm rXNQsd!T$Dl62ܿz2HӏHT03`Q3d[3cjcjmJK߾PkNf*g騉 M ߡ`M1<" i$Rgғ(Tn砚1z-n,TԠ #bùľ'PO]\ S]c-%d#jl6IOMv?wkUKY3غ
-VfmT
-ira6Gf1+IwXAL_FMƖƽR˲0ScMG "6|)!)yӹa.!#g{Q~|?/?Ne Еv =gǒB;erM _31 ^wːtPnAw^hv/JbuQy 3 lPN0w1H}ǀm*+`ChP~.ςjW +0cq)8T 9+\Yupt
-[#x >U[8PCtG6wU๩^sPDS(M亊w F5[
-"å%
-YYPÚtg.w%b;X.w-
-jA0j+ ãѥq oK ޿QL?wEy\tș
-ߴEʃj.ӣgxhn8!quZDl2fѤ:b<2{_ye qDDEz`fR2<A.A^/>$cTHb sn}+ۺ|{lM^y?.P#^t FB,$A)[ id v
-\8Qzoe&Uj+dChc.4.YuPØtg<"cⵟ2NE}ӍY|Q6[AIތ6@q.ɘ('!IRv[Dln26b: ǛJ|k6] TBˤ)}Axw\J8\`h/NVŬTt)( 6[xLס<.˘J@Jy'CGx<a KҭSqUM,5`&Vێ#u `Xhwb?źJۨ|™m3TޭXog;3)f2Rމ*7/6)̍&Ji}LbӣڄKg9R;|ϓtaalSIM!t4O&I}ޤPmIJΤwb?źJQ=K|T*6JL!~a4Pw E%e^S\5äbPhggy_Jr ҷ2Vl"M3\ 6n"8xEM$4PNԧJHѬlc+ImH+fZKEi݊_g^k0V obФ!Wy^.^ߙ 5_͗\_ _վ8)$姟_ו|]o_C{nzXbr"Cly;˹4XsGEǟygeOP/1wbx 1bG{(geظ/=iz7]] e\??i>N˰c3_kvk#yٯ#~i߶u;tSĿ=O>Mp}l$%jᩴ;`'^x V݋ﵝ Q7O,Hf1e;gJiLz/~O{]X?}B?}B.T~AM_q|,3vZ4O_!ƯC|iԟ>Q}nԐN{u;!4Af>? k̈<ٰp̆G2͇?\֩EoFV_ph}ׄƖ .N5[[2rMx M xsO'k6ⲔiBo-cw#h,?͕? nטb݅r^m}7ވE\ۿx.id0?jx:idƇ|*|uSfϟ]=?n}7 ~=@oO/aنavZ/n{f _N aυ/sff_Χ߭f'y܍?:`S W|4X2
-Ls
-q u޻%y xLo =U3 jZB?4pǽiM뻇~i?^ɶiggٺsN_=烙vfNjImqn'—i7\2Ma?;|6ZZo;o|0
-R헺_
-~nݙ@<wϞΖ-Cm";]Xk} ?Ƈ..H@ KB'.JGY]!_Ȏ@]*_;:? B4F^{?1;_ bzKuez^@oF1f/#]{> P[V
-h6D.AK#%V?N 2O=C{&n~`ecR^=9Шlj<P ގsa“H̤ՋhnWnV:_U0o>d
-k BSilчD!2| AS
-.h6F.AO_Er3v,ue"<=Ĺ/=-{Kzsn?w˙:MH<["ltUhlڌ[6)(gЇH|Pn'g6*U><(ήQ gȧlUdhBDjQL3S PJ'~anu\76I6g~xf./A4;\Z,>{Q-; F-c=GjPm 3[0#k?6c2+M^ݾbg2Fhwe[]sgD7<Zs?a#ڠy4Zq*/:籶~,CCxu ǹ픁 q|j?DH) {!4[8.@Ƶ`V#0],3CGK _8$z+[𦹂mR((72y=8zylkb@By~u_'`(H $4hQ"6[<y!WӱR-;?&'4>JO.9!\P>ї~9 ynBt$Eƹ_.;g5R3M q;](]_ފ[Ah޲ЄVOJW{*ùf|.{*S!ZJpn%z"O3)JW?BV dUK GwIGv8hŧUԉl2-; })$~7x/̇DZ0A"=Pa#;8=-Z6rDp߻T%\2r9>;st׏/&ؚgz$Ns`窝^a5&.)ф]7z$A&~_Pi`n[wT8u{o[cGHV7>SoI,خ.)ф]7~ZϩZݸ5vݖ LXpui~kۼ(7{"$齕TC .%5 r^.E` 6)ĢGz- 75wm&,4R87QX]qy:_z@ )cFdSH܎N77u1ׂFc)X֥EXWBoOHP[Aqlz$)$4][Lq:/0!RN}Rٶeq IADŽT> c% |ǭ[zEzs ezRBy
-/Koh@i,I:\6}i@o~2ug2|A| ɋ2eIPp l TuZ񦫹 _ RozhP!+ݱQ fW#RH<KMg4*hhܲӘk R>fF)Œ&#X/ ^I@&5v=wSҳXvA戴VVDʳy6zl',ȟ=5a|rY
-dZ0T4{^ϤUqi -̄zffxG^#d\^rϏ$TsYc7 K
-t %Q6Wtԓ/E^t
-I KPj yxc&׏$JP!Þ6AWoMY=EWb*6t*IqPcXtG{kTw!hh/XWqw*dR]0$
-"õ~z:V̤T##=Zh2 qJ.yQ,tB6].6@[Z&`/]*O?W-EȢc>R`䆼~ȋ;p$~<ؘm&,^<
-4֊T3i&^أ2c!_-ٜ|ʛ)e-o`ͅRSf54L5 <bׇU U" 4̉B*5dzgLyӢli1PܛTj5&e=W %Lxw[i ;:4tEmpi&c8P"n$I5`捍Ucd
-4tkľ 2aE˕S%J~7%͔DLol5~C;)#G򬋼K.B<2ot;V7Mݸ7gR9MP"rpg~ Wm\fRm>ȸF+ Xf%G=oW7C<!`x͋QphZ'᝸E(൙84Z]\װ0WC ex
->20r ƚfًlxUwdP SH)u
-i?fLm)AQvI)겜F\\Vx0bԸkTh glT,NU޳
-ġ1ikcv4ֈd
-ʬ֩0PY5vH7>/ &y89Ny| gvP}NgJv<  q1Y$eqA@i4vAqCYB ^~Qju_wƘWe] q pт V7m/BJzH!3CͿb>!B#/)״yپCN.fph F5h]뮂nԇ_!B[jA#pMyJrmyw?V75Be)V n`+멂 %xw"I=1寲 -lKpYftCX%45+^EJ]j|x;fW;Zrq[]Uqqт V`0ƐACr誼;K+FC!Kw}#4o2
-qYY۵ǰ7Mdc!X_/@36`U k5 Wpݬ4RGVK@85[+oɍ- C ,-%nZ ]PvtX^cxEOUR?}f f_Q
-PJV˱iMWq,GíyKsk/DLcs}ʏ Ms~7CvpvD?2+xG7.P񺒿ߕ]C` \
-evNϧg0`gvfa`豭vD0"
+851 0 obj
+<< /Filter /FlateDecode /Length 3469 >>
+stream
+xڽn,cr}c9= $x'~Kť{zFN.odo/ߗO?\ VZ}Ǔ| LYo//ιx}^•w.d|+PFs.9\/dn#:ן
+cWTHzCN6x]fZCz\LqHC-~DWZv] #3'˪,GZ+F Tyby9di.>QpFeQõPL({Eu`n7H9z)bEV(:,#_d8-e1]Y zTFF(Wr4RPlPWB. )StJk$sW]&k8g&/-q+STJD ̎bf>7Hϳ stNtp~<jۼumw 3umJ4*pջI<p{%a(f|ŝ(=x:VIG~Dmm`3Y8xsU)ר9-+L=qa8ς6{T딋,cu$_bCgKBҸZ#;1Y91tUa|O|%^syL{Et┟x}[射R4'~5܌qmZ@8
+J8y7Ԝ8P*b2"UC Ezߖgl53KC5Wú.+.#3tsxE\)+t($sf
+"e%q|Em֩X#Ȋ:GKiOJg4ZH#(8ҧ$p^I"yeV5 ⼳0q Aܪ
+QaRYVFvhq t,d@U@[rK⥛C^ZѧYt웧T!.= OE 0gu!7r PH)N)W9՜Y/Eqqk'Xppu]-XЀ|.˺oԵNtij;00ΥÔn(&
+RY K(^J$EY-dN%)#&hJ"[K(acjʏP~{xO2!} '_I|><kjFRGӣH!H;`b%?KE?eɎG$S)w@GMr}0Y (% ɗ%n.%I8чbw#ShCvzD-JȥL͹^P%dPT])Z|+7?!LMog3D~(eAquΧ$
+Eӓ?:HO# H*a qJ:\[ J x{e|`^Ik}L]uJҍsl~٬`莰YVұWsx듌s%W˟{hj{
+&TgD$7AlБ8C519媣8!Aht}Mk{'s#C2tGi}x-qz"3]쪵z P*YywSMdۚC-"!/ps!3chG@˙x $Ӣ?]@}v2|l[fAqdr
+loOٞl7i~.'mr(joO_`OMseLH?h^߿}+f] tͺe[ԦJ,m5_FV@Q-yVt0!^p$/|EM.]r/$_5cМ9{A-QI >}}Vkye9Nd89.sR?qYǠBFfN0G4s~ޏ8?Ic#;]\t^^?\.XrN0%rCjmRc<S-}%bj&=S3niBdnund84{|`jQҦ=튛]3L޳R?1 ~Svv~Z4qw` sqz KM޺p%(23$Vp'4w7)FS<pTM
+y>] JBCn!׳na|)B-fA{Z-h,@v#sKf Җa\@BvOLyPȁCZ7BnKKާýg4Q|sK>r)AwK]sh{6Rv)݇{huW^ 詍֟.$n~[{ s\j{O>kTt`PClGa[&Oi
+8+ɴ4grS}uiq~XpwB=)nm?{hcf1eƛ;df}hȁ9SIp Vr\5Unġݑ-E:s !t錸@TfGFeyOUPuJ#"ZQVan9xGRD,wWs 8J H^ )\]_"J2l ^#dN:ς:x>mY+f#!0Z<;* O32 2]Ùz9N7;}n&eo<gjw[4M'DĽQ_mJ _۴&oƍ1xSh`W]Vy+{HAE`00*9=U|;^v)W1Tx"xs۾X"
+wXTD*=zH'+iMZ<\7?`X,+䊷wra<ܝkY+`&̛ lK0o|?.iohguN|>qʊ7`!SWyBU+_Mx/]@y{ieηwL`@4´
endstream
endobj
-848 0 obj
-<< /Type /Page /Contents 849 0 R /Resources 847 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 788 0 R >>
-endobj
850 0 obj
-<< /D [ 848 0 R /XYZ 78.37 808.885 null ] >>
+<< /Type /Page /Contents 851 0 R /Resources 849 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 789 0 R >>
endobj
-329 0 obj
-<< /D [ 848 0 R /XYZ 79.37 305.806 null ] >>
-endobj
-847 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 380 0 R /F29 371 0 R /F23 375 0 R /F51 376 0 R /F52 372 0 R /F15 377 0 R /F20 378 0 R /F41 373 0 R /F53 638 0 R /F42 374 0 R /F69 398 0 R /F50 370 0 R >> /ProcSet [ /PDF /Text ] >>
+852 0 obj
+<< /D [ 850 0 R /XYZ 78.37 808.885 null ] >>
endobj
853 0 obj
-<< /Filter /FlateDecode /Length 5979 >>
-stream
-x]I6r`dc_"Vu&bnm&ϩl9Bsw&@<>TH*߇ܘHL8?OQ)`O|$gOf~m? dBɄxXE(˄ћ΄[a !<Rl"$Zm!en9o lL-=L)Lp)_[[ʹܺnxF2mB[CƿE?5 ͤ
-BEϼ`Lݫ޹{UApÍT`ވ7tvjf޺!S ? ݌^UeZ_ F <j!5b5}gܿk!r5v5ppZV.k?d-x +4.y}6ux8 Nۡ$X sF{O8]`Sk}OݽNڡ\WCK dV9/\Gg=0ng6ͅgE_Gu6^X7=2̄3{X^~%8k>_p[yʝI;p- Q-lhwa3;C?GZpLg ]PXPڱXȉp+"?B M<|E|Uʽ`A&IXxבm{`'p 'cE%Z6@G޾$D?`V2|^i9|u룇g֙rX</v:]iV|@%;vYiW}Aeub]iV~@ڥ{s.܁? H}1$`j.%3oj`xj;^n;_:03^rmڸĤ53\ܡS&Թsms"%g0,εqϝZwyn:o.3<y榥eKQ!ֹmmU>K~x綵iz=[z綵iY:z綵闡fr{ /QV欳I4S&AP!= NoӇIF䈳 @Q_̟Fn)mB* feΝ\ '+(Gw  +ӿ&
-u;"L,s:9ƟZř<kIPM9RDe/s| s)Dtj93©QT{$B݉t%틔Q
-V,gS=ЫNhXM§ЧvSsSPV.IS¹erTہDITod;W©e;Qb8kIv3̉V0tL+#|,-I\hI>H4%>!Sl *ۊc!%Ժp-G{MY'5z6ƜrhߙCbs/L{ ν!;y crRMב-q%u5Sm,X,ZN YܯֲT,dD{gEhcPayc{qVa
-n+*#[BFyqאd"$Yc02)7چ ^]%%mJG ;\XL4U\@) ⦆q QRgэEK-.pr4Ǥp -j dJ,-J)e%f7ᓰF,ўYX"!KE-sa0D {K"Ь1a$.
-" BXWRRU3B.bl86$R2UXB?VV8YS8X^<U_p.p\>nL
-D!,wVSn탷nUL(]˱ԸR` {ܼH& N:.dIni29aZ}po1zُĩ(P'pRtre\@4҈9 BHrLS6
-,Z42)it*6˾h5VHlA8C`lH0kDza 8)$#74b_)iadqm"T0y3!!+DHIG([= {([:%'a1K`=UeEVI^bęL!D2!KKJP5&q#OTfh pόlU^>!Ә!nx!Fz+QP9 j6U"f:bU($2,TApgpe~N[DzJf*ݘ2->%7)ƝJx70VJ.ͺ
-m$ZƍO8ɠKN\;Y-tN E'L -j+2VjB\lXVZ[W*t9|F5LB
-'SҝJbyc9y[\]AU15yܐmERרl4M4H@!=ƶ ,R Fc êLXB
-ʺV8pREV++쩖o<&X ½
-=ȴ
-y?i іKgA3|}L; t@r?δg=ӦL]<f,fX/i̧9fvs
-k˚εmigKμ8MMڶGh7r.MM8u7MMKˎT,6`֖/=7:9?UX+uZ6έ|N&\k|X`-sc
-
-=ַ>yww&*{9tClY7M+inE>sTaX,I*%q.yjZ⥂/U>q?p!b]VVVɢvA\oSm_hjţ%sW}!ղUITE#jtP(\d"R] HEށPﮨ[G@ZF`&0,VȠV(̂Eu  E #KmقsrAᆯY2)]R
-漽r2|kƁyg/R蜡,I-JgP&uBAoC~T,
-cPW|F(/;!Pb;a;a.
-iN خ$v`s[M)^R:^ݵ"꽼X޸Xy8[s5Kzk!_ֻ5뽕jwzk[)^SzQo%Q陋elbLc}l*?ϭ%AnATD^ԕC%^zNS"A^OmSwYhmT
-<=4U,.@=h[^S}H`v@5%k}KŘ?C'.AJ";M?~R<މѧ9}pcF7Np7jeGz`|el8Jr5TL+՛|_ϵ$C~C"Y&h0PlC*`Q
-<[s"xu*
-doRv˺TAu뮋0z,wH
-ёT S8-{̊U-OVJn*w |IʷMUkˊC+ym)/%9nb`tBSktWSm=o~mYzY+LNC}ߨ.|
-endstream
-endobj
-852 0 obj
-<< /Type /Page /Contents 853 0 R /Resources 851 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 788 0 R >>
+<< /D [ 850 0 R /XYZ 196.679 222.946 null ] >>
endobj
854 0 obj
-<< /D [ 852 0 R /XYZ 78.37 808.885 null ] >>
+<< /D [ 850 0 R /XYZ 196.679 202.752 null ] >>
endobj
-851 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F29 371 0 R /F20 378 0 R /F26 400 0 R /F23 375 0 R /F53 638 0 R /F15 377 0 R /F58 382 0 R /F56 380 0 R /F51 376 0 R /F40 387 0 R /F46 388 0 R >> /ProcSet [ /PDF /Text ] >>
+329 0 obj
+<< /D [ 850 0 R /XYZ 79.37 156.042 null ] >>
+endobj
+849 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F56 384 0 R /F58 386 0 R /F55 383 0 R /F67 389 0 R /F52 376 0 R /F69 402 0 R /F40 391 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
857 0 obj
-<< /Filter /FlateDecode /Length 3106 >>
-stream
-x\Ko#W1{,k4 9 6HS~Knʞ`ԭz}UEi5/\g!ZXg.ƍX-?\R_RdW`> ǃcR'2>|AᇳЋgހQ++δp>s.>%A(q\M I?j*~DiSGKe[DZ$T\=*ȃcrL/L>fz]xqA"HZ˼P$RF)d ס;Dμ Uz:<,{oo#66)(8Ke!RcCcrlm 9t)9-b<ENo/5FXBc a!i) gqiR6؏X$b`ԪMN!sra}dY8 )ݣ(짜*g@Fh*t-i.da rƧ q8UKc 4\!ʢ<Dcvsm<@Dx`Zv7+N=jW]G_1i_|.~㘑n*W:<9X=m$bz.>qWYsqOgȼ 0k~ߒ.lxm~^˭./4׀3'tͼyj71gc/sQmc+./_ZUDi&^8U'Sk^!Nb 9?p|W$,l(r$$sN'?G c^
- gX{DbK]<|]
-bg˃<0u+&Qz$A
-1Tbfdi[i컭4svn;T9T;Z*;4SK?RuOc@}ߕfT;0PҘJqOl;S@}ϕf>Վ9]W9T;Zv\Gf
--~[i _]iS+͜v9`J 5ԓʾJ3jGUaqL䂫^i3]렢wZTҔci?A3Rwys
-H}וf?Վܭ4*͜vPfǝ;~
-I5A+$ORAkF3Y"HǴַ%*8"c 3ΌZ\ܘ]Fhs<T֕X\o9uc΁ Y 8bqn/1~Z\ϬI~Fg{,F[<8scYLl|kbRZ,^FJ䅌Z@L
-ݽY^"ﭼ]{[" X3 G*ppaZWS\|T}h.a 1nKR00Jz|Mˡt)>_A:FWtj=.UOt0Pqͨ ND=@@y8m#zp>w&<'}:NЫ
->&t:eOb4>m;L՝>wTPb;x7;բR^Kdoop~ҚYC!bSπ&1fo*A&r/sׅ g2~1khѩ3h{-@w@%-s’)i7!MBQ!ʉ4p:IHCRY-|I@E&_v
-}j`){@np ϛpeό
-7h<|~~;
+<< /Filter /FlateDecode /Length 19591 >>
+stream
+x}M-7^Ӌ&~^ok73 O=^Xj#HFyo--c=zsd$3n^.?7Ks|82^KiP^Jv+~~?]וu_nse`+aV wmޏlHo_|_~ǽ}ܕ}> N拳mEWn`˰q_F{m%/lcwk~Dqv_>5I[[(7TZ?oذfῇ!ދɧkiMЍ}>Gs|OCzLH~!]3wG?+WO>Q=g~V)L\\uggn=zԃ=˽0RlF4NN_?~xk{<\NByc\C++Ԩ\au+%~dE--`ZU>GV5jZ]Z?lW֏ra>JJ꺵ab])?
+i~,_nW;?!OƳ秗 .y %QOo_zˮ:UA?=2~kJ)?2zjXM5v0G}{Osj.$u7<^BɦOtI>48ؠʛj}Y~%sWBP/ЛY܈|%mw:n4} T˧{5ݤW=j+=>٫gzẼ^{OE{W?%ttݧ43\7hRw|i.F"8qȳ9oT-P~'_0>/xJ?$zp噁<s%Rku>뽁쿏z>c?5X_l`-QW3=NA6`]in1vxJ3MQ'}8<qc5=FN?=٭gu*xQ9x[S[LW =᳧ 1[n
+n9U7ODҸ_|CD}nWGN65{b{F75CK껞rw._^ܭEP9 ,"ջj"zoY]D^V-"ջb"zoY]D^V-"ջj"zoY]D^V-"{j"zoY>ZDTx!4lm!R%/IyǍ=_}5&yu]phg>}]WEdg絯⍽4zɸ\Wo4RT'ǥʍϱ$v]SKw9뇒iRyst,$kW,, {fDS~W2 rw( (ﳡT-vL *VyafC59#U,l
+L5Ũt E䗣q з`PTcJ]Ac 17j
+deC 
+tu$S)9 Ɯ)cԶeFj3P2\+'JdF%SFsgpFP8= <ݢ%m[Q?W,Cz4Zy-D;"ʃ
+s2R=ЄWaZ<JiF)N
+`Rt(έP&({b+f23<"?+ /5pCrGBMK'dUZ+ta[4FF4a+1QM#4]
+!#9 N87:ѓH,t~6R`Q"6obUKLFƕLmb
+H(OY%kis jebV,0Ura݊EpLW.(aK`.˘8*VC# te3WNz
+L}urf + <c?źJ\Dy_Aɳ Qa+ŬX`
+
+}^ZsOeUwF㥡3 * KBnjhUnRjZ+ئ
+zlibByF}t_|;'2EiތYT
+S:k|9] 6=vAJԈ-xцfDުp) ]n-=Q]Wu~`#F[y~?ZJņw\a Rf4˻`rl2ŀ]Rb
+ %'R}p0%d`.s {Fs1VG#R64&_}aQPs+Pc:2["xS/wµMքJӨb71w4sJw\a(ez oݳ`4]]yQ+4P,c_eF#Ba̎_~@ó\=`O7GaF,
+vFG"rxQJc,#J/Rbcu"GFc)li4mYFoXzuZ0zL!<W%|"9=l͝p
+_ 2ys/ KMňͫkq)J|\p^FJ.x43øERAT W5y7ǻZeîdL]F
+W9 +'H6q*N0̈́~QC*S N)E!$F)(lzվM_^h.shk䉕FQkgR-+|͜^) 03WͦvF U& WY5ژv+%BbVɜ>hųj,+OЖp@Z4|^
+;ސce!
+(e^ʴc)Ko3udN_j?(9~)m^K(C)-4v0%ׂHc
+<A-R갠Hׂ̔!M#t
+6<:{_*4D΀WYj~-/C5rǫ
+q3 YGGd
+y_q825&T!^՗c)w/cP K,,eB\{E 5T,BVQ8v+мv6p(mVP@a5zoJ~ Y\[qmȈRB_ hnN^o:2~~gP[t[".!zyA08GFCq쯧Ͼ^ٗ5+
+q34d4mv!@VQCFhYDFgLCTGSd FyiW;Jlz( xΫ4+ЛfCcϥ@2yD/Jy'48)^x흍[f";bi4%<s<h^}?D,
+q#y1l4K;U~kCN:^o4@eaIA=vSD驗=X$*AyrBƥ4v?| 
+=r+%2E#sHDh\P7DH(`FsQ)".畊Ƒ>/.˩@oqhq K^rlJ3_]'
+U
+R߁uP
+7$oP TJQb%ޚgjxƂ?z lJqR*&mA)e؉gyXSS)؏zVFWC%np~(C![b-G6|ۊ$ # 6_u=Sf! RZB=^˻J,>E2c؋;k}x4 4*\,
+EFWۗ_L F{T{!UsS_zrUGdk=pTq
+4\rB[߻-:{-ǂr0X (W ȗHT0^9LXU@S)@JĻ 8Z|\ٚkqQӱ"u um sÚ
+lEJ0]zBkG6 fsXSF)r#4lڷr+q<ja]cEbÚ" TLzCz(y
+5z48(T=;8en`Uk/W(d:0R`\06ScF
+hփ1~ڰbK!"6Z`>0 #sH* ҏX3
+GK@D- Ă˷CSfL!^%C
+xϽS!
+
+0Sh5
+e
+@ M
+d
+@&t{{u\Md9P~zPA j14%pij?Ћ/L#zȔ VY* H}'yl5'U
+c8: ݀ԭ)
+d?Fl{\K >WkyZ/Y C!SRt
+_Sh[`fE'
+c ^bNJh%
+?Ue&_T{{ɇ _ ~yn- */0Jj8BCSQܬփKO*0h%M_L6­. m ̃(*茶#1eL7BGS ݍe2Z{l{]ƼJnt փf2oMΩzuAb*:li7[[Ƈ[RX1,Pl!ڣ;8VԶVvxdSȡ䰦@RNLZ^3gҿYh
+a
+Qɱi" }Z UERC [Rt
+ NѮ,{ZG`0dbKEpVs2k
+1  #} a02@@SEٮ`*pTiZ/j?0jڊc<E 邆+aPڒc˻d3^A)Qh3+0x>dzߴ`mf<I +׊x
+J^Q֡XQ_bI (<tSEZ.*u/V&*a#Y2~9>XD["Vƫhm Sx]l<V
+h{m1 Ý+i4m˦F%zcrfۑnU*h'Ha+UᯋKOC+F7-l+U1+\<%8U:d>yeSy:fJF*VCVF P}>T
+XXRцӘ@
+h[5^Ya ?1W枺R?Yp?Bk:jT ႆgSG \W?#x -h,#车eC*=FN(!#-J(1B°-g
+*$ј:.j f[
+q1a. R7pJH8_/KiL J
+R"֝J~p7Y[b | fj]
+g2q.FOhomyOUV¸߉BPbF) -Lo\▬_L bBx׾lrz~fHWK@njuI^}M-Y)R.l8750 ˙]P
+}=.)ASGJM)i ??p3Ƙ
+RfaT\Tp ޿ #ooЏy
+fldgȶfJ$|džA/׷%ڔ}֜,TXQc)֝FS2#C7sL b<ByDXIΤ'Q40A5 c([*oYAK)AFĆsSW(}O f˹@ZJ8ȸGlH%J~
+0֪>f>u,T۠ ĻIAmXus=!S{c W {/h+ .!-yG #΍{eaǚJ$Dl6E9 SB Rsc]0(AC Fϸ=Ϳo7?\Ɛ^,_詨=;n)+hJq,{h]t ZEc߶{U{zhli` u4<AOF
+L[>l@V5\+BïUÔxwх~TCYqptg<w|O:oY"Ȫ+hSHqȤlb*d1ڤ;ݵM"Gi"UT1¨يW..WxYm~4]FY]pFtg05mr8N=m8jV_+!enxU;W +jp8Aό, O%?eTȳ 5Ek W4.:[(N!#10&.!xk6POM(+u2
+dQ-HZyxy?.:ug+<hM3CBi)p9HG0\2,Cz!4y-2ꊮo"4t@>:F|s?v=MޭE WJ ku}Uۨ~ڠ7xy
+AU05g3BFe1+"AHC}i~vk2Ca׀F~JKtL-H<ZY 94/sk:(deAC kҝܕw/%`kߍ+ث1¨T F_.,-Y.x
+bDA3i:b{]Sr!g*LvAl",f+L6᡹ĵֽj% IDd~bu ,ĉ=鉃M#iJhxL.yR!#1O#]lc7yul 2,Cx-Hi%ϓlRnA2`M3]*pDz߿[ W!j;5o|Ҹ
+dAC cҝ|~ZP8M7J+fZ+E tn5%y3ڼZƹ`V&cgP$SJ'욷Bdm2!.t7l&)^\\ +Iy'Sp¹_,IYR`Qlxb6DCwy]0+1NXT}7x.I6[ `Xj
+
+(Mܷ/F,ꪥw6t4)~u_pQ3q'3]őf:5N) 6[B<t1wfS̊eL% !#Uo ]_lR{-AM,5`&ĀߧG;` +v'Sruv'A-*ئBJi}˟3M'Iے(4I)~u_z,.I Tl'jBhz%J2ˈƹjI6tE3)ϸτ rNo} -/dLDflD'q 6>;2)bHh*(坨OY~W;ې#aMWJL`û+wμ`B f2+Iy'C,Tս\{!?gK?o姿}q腦R~//]W-&q7~+],wJ-/[/{d̖sKu1wd_t/>;,+ݷ?~C?˿ Ř;1$@l"a7|Y^h eǭ8t{x^VgWBGnW]?mi}vol#s u!8u~/۶/=pM7/E?.wO͟ϻ$xQ 8<v^/ӳk;oXx~ fW?ywX~T}}ǒ8>w׭&[ c{f[!_rtw珕{q3n<oN#(~~
+טy6sa?I =oIb*{<5x/wM|+ooL|ssyhr9H׮fSK7'QV6=(_ W%\kEnA緟gוon%nlrB%qލ=o2;> y>2XCۅBO O /vꙘ=΁wo{~4՘1ӿkvƻB.jO5T1=;\NEޭsˀ<|~!ep|߬S@TCkv$?/WL>u
+$>OJFin]?~ce<$.!Z?y tX/LrLCȔ+;?4ǽiM~iU%Ӵ3l] 9&@}od֞ӦsSbh>bsʷ1r_yÙ`rt8a3 øms'6qӰ]1<=>s O_: \;oo>NdZ;YߘFX?95/hBߢz:id'r>?A)A>\kYO?͟
+>.{b~+{t(eBqrKDc󕠙
+.Ƭl>Q~u?Onm8x烵`άf#L4bx
+m?[,Chڃ<$<w
+hԣD;YC: %WEvĸ+ ě^ې-n4rLP4#@ħхLc;Q{BVeQ }47_A'Fy4B]l\ \&flXLl2tExD{s_W~{\ƙL C &$F!*h4vlƭ`F3CGrT>(3*MgW̨3xShx*UzlD[~4M"5(&)(j_g?^D7]㺱Iuy>=xAwџppy
+2 ZfBE(;~/3~*l9zT\ٌSb G@Pwk4y#q-[gPŢۣݕFuͭBߟh熍j3Ekc;x[Ȋ ! ;=Թ/sD.QN'!ꃆ3Epld껰
+"nG&lGzrSᵏΝ4scU
+Y}RFFs++A~IoW\ Xb8xF H>zÉ2+F(>\NdiiM!8|f>-D,&Ҳ
+)
+ҢU|
++WQ p\uw$U܌8Xkfvrr֮@&8
+C?Qxξr)hl2uJA^*V1R">r"}9s4^2=馋i!߼pVR?OC~Nzm4 zhaSU!\ 䲤ܷp>9Fh^[*ڌY =9!I 2ZfE(jk|qI6}-`[8 rzi GzHߑr`xjgZ8/9sR*wξ)xm4u4 FB/~_=I&9YqO-P}uƵbh<&l ɲ
+_sCLrk {j^17e-]Щ@&CaYQASW>܅t䓯c]AީIuPXh5XN) a_X1ZSDjɠ'+Emo wJN
+A`03F
+ke1lJF+<(
+@ZUט), .Cc5 v\Gwz2j>o悌
+al3gh'BJyD:1j  <s^b+@j^IjƒYƁJw1j~ 1f0ThBϫ5xgL6MBG3eBZ9597Sf[([5 kh(j@@yĮE6?>AVi3Kԙ1jUj6vW/Θy'E ʳ <b\3764kLzzAdKGd#Avsu[i4c>ڄRMq닡DleI2j6 &z'~ ciֈ}L7 :seJ틖+nԵK
++nܙKr)?79C20jR 1v.SG(Yy$\6ەy":e w&+n q'nΤ-r򛊡Dl30\4ڸ4}qIQ8Ẅ́5JR ׭{"ޮ>roy/B07̛&5fH41N;qPk3q
+ʬ֩0PY5vH7> &y89Ny| gvP}NgJv<  q1Y Jx 2rxa7gp;2V[5Ƽ-nkXmi{UC Aj)?\.m.g9˺@#%B]R&ՠv
+Q~kW|yi l!o|=Xc~
+RXVsVS A KJ+D~Ly{6b_e[ؔ-膰K
+h ZkW@ovkv5w=V H@5Vt`!+J UywW/;nCq6F:hdf;
+ "%cXG]PUXU ?ʵ+EnV#x+%Ufb7ʅT`y7R.SS(C;:P,/1"*p)>qu3W3/(Dt+ڈ+Ÿm#{95?\~
+?_oB~3x#A8ǯ]8
+T/]'Z麒迕[3`ֱ \
+ۗ&5ݻnB՘X Ü {Kݳv߯^ek5?שվ0;}@C</~V'gS_+>x\:2<8U=Up22wmmxkvq)})=уYJ R뿻'?#e,?虋7{?p7h]_rw¯)Q;V񺵢7~N?}hr
endstream
endobj
856 0 obj
-<< /Type /Page /Contents 857 0 R /Resources 855 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 859 0 R >>
+<< /Type /Page /Contents 857 0 R /Resources 855 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 789 0 R >>
endobj
858 0 obj
<< /D [ 856 0 R /XYZ 78.37 808.885 null ] >>
endobj
333 0 obj
-<< /D [ 856 0 R /XYZ 79.37 771.024 null ] >>
-endobj
-337 0 obj
-<< /D [ 856 0 R /XYZ 79.37 499.028 null ] >>
+<< /D [ 856 0 R /XYZ 79.37 230.916 null ] >>
endobj
855 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 398 0 R /F15 377 0 R /F56 380 0 R /F29 371 0 R /F20 378 0 R /F26 400 0 R /F50 370 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 384 0 R /F29 375 0 R /F23 379 0 R /F51 380 0 R /F52 376 0 R /F15 381 0 R /F20 382 0 R /F41 377 0 R /F53 646 0 R /F42 378 0 R /F69 402 0 R /F50 374 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-862 0 obj
-<< /Filter /FlateDecode /Length 3320 >>
-stream
-x\K$ ϯ0ZE p|doNNCK~WT]U-5G)QQRIdޫg߼i99A7}0`^! L>N?>Ii旖wV{Nfz|LJ &~^>+e C/9 g~m>ӟ~ݒ
-tNЃΉLi4BSA'l 7I`?*z !ZE/ʗwCY.W={Y]3M|~meQ >F B8[KC%3w[yS~<(C`X.ĉ-tGUmBJxD<oR(+$!Yh(@ t¸4.=9R|a&ȃgu!駏Llh zMO3
-j%B }uRwkݣߵ{=#"H߈a&+u#FB5c䨅t>[ نkɈH{Fd'D}I`D
->l@ܕm uMkP)Qd?lRIQ6$Gjqh*m<pV`~1y'BU%2CX|NqrZ!h9Rji}]B橉?6
-t/A[^u0P$gMɉc[kt---[HlDHYkkXrZdY1i, Ixm ZlsXN)=Bc*w3`H4G¡iecٜӁh u 5JܖˎFf,/tC/Lodj|_ԁ[0ArB(Wصk,v-˺1_sy║V+1*e-1_uF$ ˣ—p7q+xӎLސAJ# q[/l)Q[7sD]1Y uvte*,![8U\XuV+Kݞڛ]~[F
-qݥZ zd{ O;%R}CR-bwHUI!ֱK';M:^R.omzdiغSw"@{ZklvMf욷$-{Lx-Lm2%MM⟧A;6h)dnRl•z69s'SԘ5#plXiB|OiP{?F$}=4 O4b&#Df/7M#]y39FnFwܠer\k)qnkm< WY_Zy? 9/990'r`|く=)p= 6Sej(0a@ {9;5%'/Ʌ4&i_$! 4aO x͝gSLTGA;C׼P!5n3xTvT1؆S(>kìnT, C z@d_0 j^P~)-l2j_yK0t$N KO0 s(9ܻlĐ[ekaίM0I ΟyO0vI bٙWaʶ˟.O
-F}rZhnۖ؃mXPp˹;2l;ܶ);2an:Q'@[fd牸}$y"FBy䗧1rT A<Ε:}YR=Cku&T,OB="8<t|Y_j/fW o&Pƪ' KT<*>{yB%~k`"QZ$a-K#p }. Uˮƛ6^`JEMu+;jiW@|7ʖ5ٕ_-ϒUƋ~O6dV
-ǀҗ-M֭nrn#?<Y6m~RV6,/9sƬcJA!جD ٧*"Y$w~H-O&S1f,usu
- \w/m/Wلo ΊWH4KɛR;k=f6#ȬtVq%9𜅯$qTUq+u5*d$+uy9/sJ/<ݫZ^, a9~5zJq2[6!V5PPkf1 Z-uͶmeRZMI\P[{FB]lŜSxbZj
-Xka.꼸bq^ [*eX;^GoW^ <Zt.5e+# UJBr}a .|*=,S*rs@hs5b2CbUԨ\ŮKܟ#)\>Z{V+[|n*Gj}ei/P\S*g|g58TݒɶGgy% ҝW6[!Uo,pzm
-a}XAVZ'wТT7 j6` 8ת6B=tAX;5j6&w`C
+861 0 obj
+<< /Filter /FlateDecode /Length 5475 >>
+stream
+x=ˎ$9nO
+δ_̛j$ Ҋ$)0c] TW0a= rHŴ{xەCî0# -v13Vaxnj7Y+3l t1~ i&7sӗw_Ϳ,AQt->-efe5azy_kE ʬeIB#dՂqM텖 ;J]zlQLncvnY簚
+J{s 9ҞltG?P+(5
+Jss=
+j#˴k<R׀Ģ53JǮuH]qwT<vG°"95sz#u jأk;Od*Zie@
+\7(/U* #H`b!B6 ڀaȅSfQ=9p+2DV*ĺfCKH2ӵrD酳̹ӅKLo
+'`?.3  QQD"5ON'ybm-OZTC 6 h"gGt7+ZC7DT(
+ b\@oxPg$xp`T
+a
+w$
+
+Z#31SN-3!s옡&vZAV`vL@ "4`Oqc6`Ԡ8n+Zx
+c½UU ^2LY)%!.AOyp_5g!WAq[RdBV!t FjQ!9h]n! !{fm,Z`}XC9&/(-
+cz+(r-z> k)K%lPMdQWLԒmlWE)JKp
+J
+URJ/0жL bdI\2!Zm$cՏ` $zq
+H S6
+,Z42)Id*HUl3jmѐkۃu@
+Ex#C %$cQ)?GaFǼ_)iH4D]x3! +{ z$#! -IHՐ4( ɆAcX&~g2ˀ- U2ʨYJ{'`:!|A1#|RPB
+@ӫFj#*bG(d|7"-S=%qpы] -6Ӓ)CNr/pRr`HBs/ 8*ߡz<"ypjȹbiAPx|ݲ&SlQDRlpcHKvQ,<V2B:PKPK|y& bH0bGW(c"'D"&XMbVVKx9%؄3(],p*ֳ.j
+E;N_3IBzEiSj1
+K$E +1'S䬨DBsTKY5pn6nT\5*"(g j@Oitj[ ,R
+#qx *&_eN̜l1yTK1 6ߕPSo) _
+c<_ (()L$wzTF
+UG
+7o
+xk|&,;& fkexdçDVʦ3'VC|idE3p߉L,oIv(?$뻏iX3 UQ:i2[C=E}hgzIϟc$΍ƕnX%l
+} ;}l'ޏJF%rEHvd.DA;PIc<vJ>(EOD!$;2}ho"UxaF 3Gî4o= ߯=bK6H?pcmؾڹYNbӷ)ԸP=S@(ROmejw->נn`—tJNF
+Tɜa۶l ;4/#Mvmش?S'zO }j9PYy<6~4!܊mViD/- 3
+Bmw,(E]Cx>d^^miq5+/N/So)Nge #e)%lBS"v盭L\'-=|'׻y wi2Og{N_IY3.?fDb2f GH;>9s9g#<;ΩOsNH"-n}lM"m|ǑvN}si @s
+ BrZou@;h` {tc{S >/b<Y@w4(KbpQ}ihҶ+֞Ycs`KxU +7?
+.]^KŚ~XGLu2g.DX"vsvjhI]|!d>OQ@>!]}!t. n^zqF<j /u@zRr%a)v ׽X]W^Cbo=]d؍]T *-%x_](_~{޳vvotc
+įC{+bP!X?_}J拃2w<6X<W~QsyLG
+?B#XK*IBE5M"t!TubrH0Կ PEnh%f^*
+gKH ۦoCX50IHCKӾ#MS5V&Ka!&Yjd-/Dc+WIs9Q Um KX?<xFVg9KTF7M5sokۢ-2Q-~{ vWִ51`m/Q,
endstream
endobj
-861 0 obj
-<< /Type /Page /Contents 862 0 R /Resources 860 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 859 0 R >>
+860 0 obj
+<< /Type /Page /Contents 861 0 R /Resources 859 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 863 0 R >>
endobj
-863 0 obj
-<< /D [ 861 0 R /XYZ 78.37 808.885 null ] >>
+862 0 obj
+<< /D [ 860 0 R /XYZ 78.37 808.885 null ] >>
endobj
-860 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F50 370 0 R /F29 371 0 R /F20 378 0 R /F26 400 0 R /F52 372 0 R /F41 373 0 R /F53 638 0 R /F51 376 0 R /F15 377 0 R /F56 380 0 R >> /ProcSet [ /PDF /Text ] >>
+859 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F50 374 0 R /F29 375 0 R /F20 382 0 R /F26 404 0 R /F23 379 0 R /F53 646 0 R /F15 381 0 R /F58 386 0 R /F56 384 0 R /F51 380 0 R /F40 391 0 R /F46 392 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
866 0 obj
-<< /Filter /FlateDecode /Length 5035 >>
-stream
-x]ͯ#9n{Z}
-S[b,((~(Â*`xD8.{y˧Kfc/Wx.a\hgܠ=u$0,
-0
-]kƎ5gXL,q/"$)vSQ"ND
-˅A!6N5EK:0zʜR
-.ܹ_dm$kZ
-R7v)Q~G]̇/j5x\23 H
-_M5 L
-EDE3ȅ>eGkbm%s
-a lQtdMd MJG G0D
- /D R~D˿t"tkឈ.Ŝ.j}іi>n@u5;'? ?zT;@j HJn {Xu&V[\u4*^t:(ph@5ĭ3?W^'d\ VZAWz^&Vϕ9|Ros5ʏbiy\k cPTSG_
-1upj8 RLȉ]J(*,lUjy^w$@U{ݙ[鰦2ծ
-ʠjvF]\;"5+P`婮Lve;DAWF$B<!7rrnK[wq͟ C*ZepuzV?AzKUJ >owJGO }g'؍N7^o'n<Kc෨MrtKq+ Cvv$=7r=7ZOF<i`>w7(Kp4Q4[Rn
-
-V{$B 롢*Gͺ d2f
-驪rlҎ󘨶鍟¤r<<c
-&-KOmxۄo^D)$41/,v'f{p8Vyl6Bi6KS,Cw(ߟs$"Sˀ-z?wXRz@ hߗ0@&C=aՑB_&;,kQG/S~~Lm:R<f ?+E‹y\xlNK}L/'5|nJ.iiך`Gu']'[^mgo;nF/ӲLk!ݶ,뵖u(crT?[>`gz@ռ£3#O U:lQr_$9Wzcflf+cz
-w-y7۞g5ky͏K~$k?W}5bXjfsK3 hгp4u S*~*ng
-b7w>a>A8F<mf%٪_F>/z89*أre%FA:ySj}JQbE-PjܷWc8edIIk\M`*R-ܞCN[Ù7ktچ Ծ _[mzƿԷP]vXZ/4e!_hQsEgX(5%Y@fk~Q6 I;VCLa8l-' ZM;F~; bP,ZD@У_)x
-ooakƨa+lCav6cHlj
-zK
- ]v똥p/"5e#WVW
-n[bFmͬ)#t:r5RIBݱbqL_ U?v<A'j|!y8<@W\>lOv<tH^0=d8
-:
-I숤@v }dS,շzl,0a0\}=B*$2Tڣp`_|<0@ŧxYǓw|ݗQd(ar KXn؅%\r buBi9!#f 9Q~Q̹FO:+wlڎgݢ?(a4]s5ۼ߷vsU?<2m[g':GO?,
+<< /Filter /FlateDecode /Length 4192 >>
+stream
+x]Kcrh j"9>9q$
+\S|tWH|,ֻrfL~vlxݓ S`J<ObF0egډ??k,(!Y0a"= ^lC\oBeV S|P3`ZON理Й
+L3=<Oui0E (ŌQ:)T?աcӔ)e?iCa܂hn|$}PF#8D& m`.(
+}@)-_CJp(Ag4IEt1o4ӪVL[;;I@;}LK'I|LKs'M{͙V:&<uM[L(8I@;}LK'I|LKs'MLgZg݉3-׃ZhiQ>q&>w)
+2(!-p:_SCgRm{qvYcs~֠&lG==% {^ӗHӑ"8@~?cNJ T)X1`F!8 4ou\3yBZcxcݷ}%q+)Ѿ) $ 潰>=2]Eb
+'ybl@2A#)WԲ3JN0-B)52ٚ Jީ<t8S=HK#2ZhX6d{ <VXZXDIphE"ZՊc@ +^BeVN}ъSѢU2=U\Cj6/|p@'kr@i(c嬜`AJAQ ,B+h<v/@3t
+}h;'*9ԅy-Q>uOUV`ZpX0>F;]p\ :/=s`ORe*3weؐ*1
+6@hQ"q._5qTv[讻Cêw+0nMX]r.G*[LaQY [xGcv#d|sW&s6>j6,%,H-;Av.Yq$aVcuRGXhit[9KC`Ś1~WT<Q(pB!Mi#'B2v
+81ۼ9iXZ%@3i/=PHCz"CxYMUyj@_?zӀ#_ 7m/tc < 9~p>@XN_k+*?i//~.]%_D)`W&*
+0/"_V8j)i[iVX;zn9,W44vWҐ䯵$>uɏ&>w)
+л~ӕFiE>*hbiO[ihc?O]ihc?O]iHAD/v+qJCS
+IWAA-ve?-PMwKM.4%3l y/E~ ;= >fkD H6έ:#$e
+bQZ<-DmQ@͏OŢo  `}jmݢi+k/O%"`<(HɀKz'ʨkvZS[&L,ī>![\(*i~ԡNݪe!;6zN/!bvYO EtTOOG&ꩡzZvYR dPϮGӦ-Ftja|m6qS7mwԈW)R Yf-tVak%c=~ozK޺+Vl~jq6g\Qg¼-٣/,
+vD7 @5l*!}r"Iϗ9c9'/<+ {5{R1RoPS*x[lA| trQe/fu'W{.RzR{,FJA ;]|1eivT)㱺R ə׭%SJ^*Kx[ݙ%JM pzJ kZ\)?lV![-0>C洁`9qET?{ëQn/Oo`(-Od)ZSCv˔nB&zeuN9EƗS&2uo8}eS-"t.[~C1B׹%<+^[lcKWx|K_OXD/X{, yW
endstream
endobj
865 0 obj
-<< /Type /Page /Contents 866 0 R /Resources 864 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 859 0 R >>
+<< /Type /Page /Contents 866 0 R /Resources 864 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 863 0 R >>
endobj
867 0 obj
<< /D [ 865 0 R /XYZ 78.37 808.885 null ] >>
endobj
+337 0 obj
+<< /D [ 865 0 R /XYZ 79.37 679.821 null ] >>
+endobj
+341 0 obj
+<< /D [ 865 0 R /XYZ 79.37 407.279 null ] >>
+endobj
864 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F29 371 0 R /F20 378 0 R /F26 400 0 R /F52 372 0 R /F41 373 0 R /F53 638 0 R /F51 376 0 R /F15 377 0 R /F56 380 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F29 375 0 R /F20 382 0 R /F51 380 0 R /F69 402 0 R /F15 381 0 R /F56 384 0 R /F26 404 0 R /F50 374 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
870 0 obj
-<< /Filter /FlateDecode /Length 3906 >>
-stream
-x]K ϯܲX0L{8-i!q%?TIRj{ CS$E~") ]~x맧?|`jqiO ޠ [#,F3B5[>}^RRRBo/pJX\ih
- $6 
-5g
-6 t OPhaxrCh*rް#ya?"EVr~)aˌWɻs4Th%Ž"]ܻ9Jfc4v I9'J(/Iz6sܛt"՝n"R#STJ9W?WcV(c3;t`K=zٛ-׸gaf!JЎ'&jP 6X f &k-ϡ&` F+&c D"y+}
-tWݰeKZLXSfgW)'^KD@"y8JoFTcL6M6-qR{9Q+sͰПM{kslj4OȦy&My5la;Y8
-AUJ^l.W%|A#U%98.Xs*ڕ 22Rcs,#JMc-9;ꧽ gڪ~ L<ɼ
-@E}z@J8
-eM
-knkvvq"ydH^
-7 wmIm$6tmv>$[e,q8gwEߵh@a=LCI#'hY*{$OvH$6FZ?2Z׍ih`AVm;
-h~\@#ɠv m`pZ. -8.};!jxm:/8WÏw{~|&'c0"Ǥ&1{` ho=O;` xLp3~VCKuϓ3'׽OyYyJ-'(wy6ٔ ~כAQž06)Xw| p@Û#RՈ
+<< /Filter /FlateDecode /Length 3193 >>
+stream
+xM+bz "\^nmOC
+XrH_Ù^~Z8;_\;z7O"˧__8sc5{-շgi}t %ڲ tZ{܀y׿~/Lp SՁ<ohmTL(hSM~e#OՓx>ڣPp*"ZyxM}^k*7LSCrs\|k&ӪAx̀ے&ytw%,״L->b|cld}1f8մd
+aϺһP}NSZ0e7[#=Zri{0?E{Ì ZN3+άr\sa戉ad4,-"2FEcM!*k
+l,%+~_
+jts
+)_-%f`[! :*$T*Y2I.(1m ; ^%hf\FQV&tj0y@Ca
+s!`W I<
+
+ImlO\q"UU}WA@pr$)J2Uіm]r*ׯ E Q=耔eG;'QN8stAfP=XWL !Q,4y f'ӆ)Ei)([D$v03.'ken儺b~
+"} @[|<%ލLsy5ʄ__T灃J[yGVZWV3p8
+*QĊ5秄g:kP23&?8Q11 ʇ%e0`h-bz*Ka-/kh+L͛8 mӢv3R zǛ:c-8 8Ru4RhT\q#=嶛`q&icJ,,\8HБnn|`P7P:UX%1Ǭf7|p'X>_&7|׷ 9/FWk̙>UwR.F7oT(
+˨Xsީ%W-Ę-Z]Rs^\ U[ n$%{p)}K \hjscm}kw㚔7F(+8
+"a:UXV8<3gl}qOUJU ,8wzD yO|z]Q)ȸ^MOREKu> J5p`(/c.FtNMVz*v
+%2$
+$̏@ <aseC/w5@*Ԧ)3cM)J%t05KCo36"IsW_&2@7h՗Iݾ Cp?}QDpw > K;:p+9PN׫MFS;6 F/tH(&D33p 0 d+4!>T.iƈGJJrssC+;hnVT•WWh fd<G?^{)iSCy9T|dÒ⃨De[߾l|\$ͽu%n<{=}tSRv*-K+"
+]վ+lNVjٮ Y"e dmDk+ajwU5)ϗAܷ0jk2UEd  SgK})<"|ʖ p.[w؇)Ҿ%jQՙ0
+0@ܬuϋ ߼ˤy"6ЦT{`/j
+8y(~͉va5B'S-;lVmj"džl;Wi^`q P+Rj
endstream
endobj
869 0 obj
-<< /Type /Page /Contents 870 0 R /Resources 868 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 859 0 R >>
+<< /Type /Page /Contents 870 0 R /Resources 868 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 863 0 R >>
endobj
871 0 obj
<< /D [ 869 0 R /XYZ 78.37 808.885 null ] >>
endobj
868 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 377 0 R /F56 380 0 R /F20 378 0 R /F26 400 0 R /F52 372 0 R /F41 373 0 R /F53 638 0 R /F51 376 0 R /F29 371 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F50 374 0 R /F29 375 0 R /F20 382 0 R /F26 404 0 R /F52 376 0 R /F41 377 0 R /F53 646 0 R /F51 380 0 R /F15 381 0 R /F56 384 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-875 0 obj
-<< /Filter /FlateDecode /Length 4928 >>
-stream
-x]K WQ>LGVv4W9'ź|H9Re_>@lkw%Mh5 |
-b3*4 1{CIf't\a׷2BuL~4 >EEкى) 2^zL®g $j$
-
-jǎ ]<=igu/X.!:_7im9}?sv0>,1)_~ܣ 2ym -FMZ?ubaUၡT:i ysWH1 =0\"!O Wp;cΐŽuvrl[i
-ZmPG TLL+N:_0XRQ_ʋ<,,EB@
-B&M(L=ļɔĈbjpN!2] ,dͲrUI/|%#,b6Ͱ d]kR
-y$tY%(&]z{w{rd|',6pع1 ++@ISI3=)_L%B%B.
-0+R5M]SeB{](ZUO>8VX5oVݘ]*A`zk$Siu΁ݙ1sw8oDFQZRҟ#Wέ|e|髼aPS*͹hjD&c^z؎52u8Xue6E6;׏"(;
-b -L t˭$Lc}Fm''x?b/ҋEWg]C[Ӷx9aGI-> _JˎJkVby;$o\?b/UBznH0uj`'˭=I`g[GB$>K<x[
-{R NT ӕO:BR%F"YNvɏ3}ZVRX"4$?
-MZm3BqT,`#jˮur6|7Ab'vÄ1ca5"VZL 3x[HSV]kÏ\~xF.[ҺG/ﳹ
-Mx~K"^6K$KEm[.|W4TZuf,F0"
-a8*h+CG&nKb,
-%7LIj<salaz uU 64VJ6Գ~_54$mզ'Fum+K#o_W_Ԅ۬HR5P0f'M
-u+ :C(4̤
-Ot[\4$)7K}_f(g<qtƺNvԸm-X.;p\[lUb’c|Դ>TC:KmfwX-s'n< `pQxg15qM+712y%/B22g'+L/<y@dYrF ޱ2
-f]6k.G( v
-qv3Y5:LU(Ys7W7ʏ57gE2V~ ]G˪,xt$*lW \faH尰($SS5:,4
+874 0 obj
+<< /Filter /FlateDecode /Length 2883 >>
+stream
+x\KϯPnkM7`,ҽ&{Kr2 \SŗH5%Qʤsú[R}zU׉O^x}y7`o/IL3)d-gw~BKƽ.LI!zBj&ۢ
+xLzO/^>O&O!q2OѴԼgL1]L@9Ϡ:3.}gZNӵva԰) G:bAÄA*;0'ڠ64L9 ̧`A'~h@ rB3DrŮH#[$gA$נA['F)l~sIأKb0%p2]HIB< dLDT93v@XŴ-v? 00E鐂S/]!}YJ"OŇM{ +`jI;NAN`I!m>>Ic?VHd@m.7l[1$)=G_Y {q7){{^f;' a \I\89!3pUS2wP-Cz9Sa_aizIH9uxczS'Act^82'݁O^Gٳ?kjBaь5X(H Ok R~;Gڃ34 (ơ+P2qXmK`w-vߖ+**hD+ׯ OSQ7'cJӆIfmX"!Mid[bY[I*k"LhN1'M+ؖ%7p#<mu#bҹ/(>1_͗D\\4cjL j9[4v JvJ]l\r=meNη
+rײ9_~:G$ݹgEx'63Zv1x(}\ eQ`Ub,y-YF=PNfve,y5nR.ΪmT;bN%juqԄV3S۷3>5j{':](:$v
+^~8h#')$ShKeSGNMKaiWHvjWHa$0Pz3
+yQG5o/C]<x QPըã Lp֖<`mOj(F:VĂW'ZKQ+&bE' Oq"c3v7vJzҹF ɥs r~Q4V^/VP}|d@+p}Ʈԥ!Xb% { S՝GKӈ
+9 d4b/3xSA,*fQ [K޴K("Չs"5H`b(FM7N%jK yȵG?)8HzFV`j0` flPG L83\<mގFL` 5^`jU~hn=_Q0MwAmͩLd$nqpj&3N3s3]ږNYo MȊ+U~I,nw(^QK!ԅz&-- 97_RWt%;ι|\| Z{ 4.=!Z{yMxOLnI%nwh]{y\sIE&4ܖ|A{MZiOd<" `Pn\p$n
+Ԣ`Xbv..!er!tdӁFpO~Tq%1{nsF4<~x+9S3 z}.ix1릠#v=IMU6[E7ߔ>Y,9kHTtoNPBJXiNh&#y$ȠOdK . /t)AQ!f&2G)diM?9.=ԩsϦ ƻ\`" 9[%'B0>H 60؎I(hХOyC-H<ՇTAwԞWlblG! rNd{vd=g9({<OkgmMg$5n0ˣ&d1؁Ia#oȗ}[Q3{uhܪ'5|H'GOn rH'nD=(?^ܞ;cj{|~W6=;ZM.EzKL/XYrX8]lc{V616zK{+q7읷y5i[b[8R[\1xćZ: #Ÿ2{-}X-k~Ö=d4o40Ozw.m/2i2cm`޽Fuur}Dža
+f?kY!KXm9 V~V
endstream
endobj
-874 0 obj
-<< /Type /Page /Contents 875 0 R /Resources 873 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 859 0 R /Annots 877 0 R >>
+873 0 obj
+<< /Type /Page /Contents 874 0 R /Resources 872 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 863 0 R >>
endobj
-877 0 obj
-[ 872 0 R ]
+875 0 obj
+<< /D [ 873 0 R /XYZ 78.37 808.885 null ] >>
endobj
872 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 276.144 74.213 286.601 85.67 ]/A << /S /GoTo /D (subsubsection.5.1.2) >> >>
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F29 375 0 R /F20 382 0 R /F26 404 0 R /F52 376 0 R /F41 377 0 R /F53 646 0 R /F51 380 0 R /F15 381 0 R /F56 384 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-876 0 obj
-<< /D [ 874 0 R /XYZ 78.37 808.885 null ] >>
-endobj
-341 0 obj
-<< /D [ 874 0 R /XYZ 79.37 771.024 null ] >>
-endobj
-873 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 398 0 R /F15 377 0 R /F56 380 0 R /F58 382 0 R /F29 371 0 R /F23 375 0 R /F51 376 0 R /F57 381 0 R /F55 379 0 R /F66 384 0 R /F40 387 0 R /F59 389 0 R >> /ProcSet [ /PDF /Text ] >>
-endobj
-880 0 obj
-<< /Filter /FlateDecode /Length 5615 >>
-stream
-x]K9rWqFo ؾmჷY;dGZ`2yr]ff  ×w%Mko/_~yiKH `Ӥf/-F<[m \h؏廀:‡NpMf}&y=NbMY(t=|ֱxE4*{9 cKdRGz.{$
-&Eel&\ oјus9[~;JdlkћE̤mW> F >IGN\ǖ(+>rIɼ6m p Y7z06t>T/թȧ/l7qRA_}`%sCAMt]War665GkIZ;3EANAUZVM^d(|K X.JO֙cEd?/x@ݰPܘ'
-1
->qe%ehmUy:rKII,fۗO6tmFMi.R2wLﰝh >+w{YKIެKi"0T#;v-r6 ;qTZ=w)B`X╰3~bȽ?{Zq1pc \œ36Gk~mO<r?01(rњ;vσgW#]cJHnRA? ph!qcyb\F'[0\qybf\ fohOJ^p+j^W4+gCIǃwXU%_zkr;jLz$9< 3)ڠ}#=pFcJN*T3h/B\A[#\DtJ["Zx`~DZD $7]ψZ|I-=Zi8fW9E&ޚT$`X#R48o.7
-͐׾&&H"7J2rCI>RbƖwuj FI.%2L
-^3&]G|SǤI4us+sl" RwoMT*a&S)s &)q1_*$AxX]va%#An-
-5֩5h$'f`$YTԠu+c)#Jˍ XXL4݄Z3#-%N` ̋ȩH , 6y6F;L%I$GP)Vעf]zAax)=B)'ٺa`ZlqqywEW%J親QŮw0qF
-J Dڸd#IeV5
-)<4e(-!X`U)[ a[sT1]veP[b \ 갍p("H!&YQ\sR47i6b { mMf{d+W"Jˆ Xe6ر֜'UccgbFB(Hu .ب6U"҈j.!d#I؋eܟV5
-nv)/Ꝓ+WZ6F@j8H6&s>57io65"@EIͪuFjF(HU,v !$9O~+b53dׁ:dýBVN?&u-W0R3.Pb I] E4[)]ەl vl]+Rk0ZܹpK_1FRk<M̊4M@n{pڥֈJmw"^c}b{
-FjB *8b6+C .
-4qK
-vJ#ŗ )mld<H/Ob}v=~-iǞ kCkk[~5>x_[?7~}\E w6ꂶZ
-w]t] >4ABxD?9UQDM+Fm(:#[>j^s~5#JcpI^™)w;)N{_}-a>Ȳ
-TXv=6+J)U`94PdoY@V'Є`q >X;2
-rhUZ,dduUvpk̈́g%AW>VM'`!_;Z S7+Nܩ/.4k9RgX*c k3dm}̯r&PR6d(6QLI5Ja؆ /Xq_%bk&j7YkN)z~⪳s µ)mX-,Mq{`_/7 ->췠(Ҙ=7'؛͑)}xoMA -f1ssuo=Mao[8ܛ
-.$NlIYOk*Y*f3qVF smh8EyFY0'Qڴ|)9<Zk>c *E"I0GHZHZVYb%6$ >qh4c(74aN5WDžc_6F{qrAo
-5T
-J:kNiIsN![:PGuN ^ : SCB6<qeƱJ
-e
-VƸ.:W&QSV.VZ]XlYẜBu;BWf=P 5@ɦ Oښ'gErZi3ph*;9Mی\/ge%غA%Ik*(vW"9U9z%BP+V!޽ҊZM$3MHSx̊-^"
-+;fwo-APϲ$
-\)\)d[|8jsO_Iז,J;kSWZ&23pv=_]yqcJ}} ,`Upx
-?ܼq{tYx { S?/$` މ샩w"0<5<4%3sWU6L}9iyípܽ;΃S۾{7 S>~0 C&`К
-؆/[Oz>74n;LJQ?ɨ&
-ڎ?ǿ?i7ؗUo; !1j=<)fSqqX|h{'Q\˼ݙ?]AK I4z[[/GLJZ-onɔ5p{;g{8Nʔ毕qe [N۝uQșN7zNx;vһA
+878 0 obj
+<< /Filter /FlateDecode /Length 3851 >>
+stream
+x]K ϯ,ZF=$'e@|H`sU$Tڳ9O$EQc|Yw҅-Qb]j>.+%Yoyif0F8h.ION|ɨ{$V]8DS\je\??#Ns-Pg?}&.9o@
+L!P %5v
+^Ѱe FQ_X2lG7 SA:JرnkL7(20k'Xɨ)sBPcPVsZnnCi&BEFl
+
+y ̥` ;70qzbyF)am!?аSS8Ā*L8H sU91;D>ZNr.eF8m܎YlL1C'339(bF~X̔-f&tKL%GaTP/9% ,i/t*酠HKv٧}dJ
+я\ݒjS?V8|Tg~8d*ɹب*ibvV0̡57JM҉yrP Uw*)'L*ɹĠQ@1(5e$N{ױ&uXT7(~ZwXh\#n&SA[Տ=aGj.59k|<߄l8I9
+{H 1ŴK'
+dAG#egCr]?Bݬ{ٙ+W4ǔHY/;o%")ѡeY/;o%[Tu#emˆ;emِ8tcӲ7Ύd`"KTn]7Ύdoo
+w֎l+~B-7VH1#WѰp}o v|Ub,'F?&F(x^@an%,Ժfɍ2Pd!{įZNpO+I^DnT}y]v>-SIT pYaFC!d>T-p#n%!rY< , gGѠ}sA#?h(Glَa hPu :$Ik7Z(Qo5AX- М[.q\J{@`~ʰ` >(ˑ5xw1
+/rT:q 6QPw1V󋈆 Lq/Vڄ7H
+Bظq6Zby".po߁mgS"/l]oEe {}wq+:9L2 ͢RRR={WJz%J@YMßUFo|'Amcvv̪ɢTc,G02Jn½@&$Mܮ$l*hSõk c@oӕ:ᕐkcORXsVt(1QdzcdhhFwmYM`"uXI}6aּr_Y/h(
+g$] dNPqv$[Ĕxf@M:S
+dޏ;dҥ9G'9>5bOyL~eyOcl )ҞRңz7CԆM =V9>{+^m#=&MWJ#Ok*sB&-2p\=WZcnzW't[DM4U\@n]u]-w+N}<J ȾF} 6 >6Cv{ۧ\e#>n-avd^=[v/AQ_/
endstream
endobj
-879 0 obj
-<< /Type /Page /Contents 880 0 R /Resources 878 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 859 0 R >>
-endobj
-881 0 obj
-<< /D [ 879 0 R /XYZ 78.37 808.885 null ] >>
+877 0 obj
+<< /Type /Page /Contents 878 0 R /Resources 876 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 863 0 R >>
endobj
-345 0 obj
-<< /D [ 879 0 R /XYZ 79.37 144.873 null ] >>
+879 0 obj
+<< /D [ 877 0 R /XYZ 78.37 808.885 null ] >>
endobj
-878 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 380 0 R /F29 371 0 R /F20 378 0 R /F15 377 0 R /F23 375 0 R /F51 376 0 R /F69 398 0 R >> /ProcSet [ /PDF /Text ] >>
+876 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F20 382 0 R /F26 404 0 R /F52 376 0 R /F41 377 0 R /F53 646 0 R /F51 380 0 R /F29 375 0 R /F15 381 0 R /F56 384 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-884 0 obj
-<< /Filter /FlateDecode /Length 10368 >>
-stream
-x}ˎ%9ݾ"Ex;$P(Ij'h1JZj`fߗF;F{V5ΈF×9ew/ŵ%^rs{wBV|9L۷jz?/w`΂/٥Fϟ~?bBPsCe<«ԶX+ms5<«ضY6Gi(yKGi(wy.=>( m;nK[ڟl^.3uԨl1?5Ga(xO<
-ywܓPvNvԬ%-'ukİlPחQǿdge_/W58wf.zW-|YC[B1x4^UK_Q3N<gý~׭Q|k-:!e_gH[}FpY+1E/ejqֻjװS&?4?|R7ɡ KÅU )lSJBzg HgoO ^Z _-U^iֲۡ7^;kt㌍m%0(7b/+Mh]+@-4>QىRomoC=/9hRſh0d"0ူuЧ^z3j0Q̿,y gO4>h/3Q/@E yײ +.ŗ2_B"' hI$lZ)WRԳD)!'X03猳(!E&'"A|;8A'Yr?)7_X.q,1~w77c.lo@^ɶpfe>ŭP?$lp_uӀF25{YS}?|LɷVo^_ǯDOꂷE
-eftEl(/?z~ULjƳW=-Wo9O\>=i9m'>)D7ۉʶs4s>dh^5)7M>u46Rm"`zj(|H4ODK<â gDr^D"7eRњ"rS%U͕̍geOf҃2gdTn7KHSy9MQo1=(eʵG^DJ?2J\mF)`qO}q=b+P{WiӋ'Z[kXz?h.f_{d8BHO'OwE<
-V&/Eۮ ˸?S
-(K-j%cVLMw?66N/ X$?ʾj!ܯ=˾j{\>}§dKgce_/]5d,>ʾj_&Odg?JW-xRzz OcEg/f;j{(Ecas|05#]zo/ECm+,?(E׶l^)),={L(EkO/(}A[*nSt9JK]MUBDPȧ^_ 5 %E=e4 +h8Cz[x3.
-
-dD1tfi\ӏ&Mԡ(H2UgJ*'VAr%'deA
-dC 'N|WyPZԏjXb$A Kk M>ŨH4n&
-J
-/4ϗjZiMv)b*5W
-@<M
-[8Nbus|=_xqARo|G9E!qV#q0`)\3!LP<xx2C'pޕ>|{wpF8ϴVnX0n1Òǡոa 1Rn:)Q^pgoq]Cj`(2?zݫd-kV2~<V/*+%p{! i(k |'hs \tC V":>en)ڙbthԦ۳gPc!.6E{|YkZ+fS_;֚tb:M&,n*OR$f]Ice8t‚8Lm.u1^E"Mف
-wuXDK4>PĬT`: 3XתOU<;.o`nK)f2"D|/PEӣ&Ȧ;<>tC̲; q*آ
-wuX}*p\R' |jklJM<s?ku
-oR
-cJ N! ʱs
-)ss|RHQ\itBA
->I}"<\
-5 ˥K!k<n[{ ˥P \
-Hz{9R=p)Q|S5 9 cQøUǰJol{^*rt`Ԧ۳ݐ(QNPOc$|Ի6L'Hg֭=E:>7_trȸ  |E8vS_ q}
- $)\u3"q`aխloԑ9 AU80Ff…p вmaeJҋ"tjtb0)ӑy 7
-
-%8_ Tnj`l$8pL.uʂ1^\vC;~ .FSzۤhm`rSX!u9+6TM<?KvS3\ Dg+l6gl`^CxL@Q'*j*#)qzBeV4 ˵6
-
-q|g(6 v*
-N_Rw*Ρi h kh7AT
-.{43{qqCHAtQw֋hh8iyd̬3zϧ挹|shx($r@/\)k4ASWl=QHr1Օh3geC`z=#qƊz(z(($ĕ3iO'&Y|=esdSVGT ńp2#ĄfzlcGX-P( ˾E71F B\)S"/V6k1$- L
-&ٹΣ&3@#AOPE,4YV L3\\<e88`Ҝ:1s
-5C])z
-
-L3{@5$V3rq[s=0Is.ݨL u )d$xqr\ep34U9}<fqwrFp|6i1-)c`"cͧ4HH`YC~ܻO|Px*M&Lo")+(!X4Vc*Y)Ri-2gŽS]6:$~Qh*'1uOb
-OrQEڍb*+)uz@3PjSOzÝ!G;9ةՌ&/#|EeS\)WBCiX׳
-S8Յp+Uwpn~5PV
-pOUp/+3zVA3P ~:w qՂ<:OLb']L2Χ[Q8ŕz-4+kz=0Cz Pgb ?~@B~&ɷ W
-jO~Uj.NZ$Hf6MJ?Tw;aԊ;)rvc0nDWj1f@|2l: C>tFttVӶV
-lOTh+*+yV@DCjMwi:vU|_O%65l_C 5SoE`Rg h S.>4h*~i%VAMq^A
-10^/T!=({ C>SFA1]٥X7 RT`x0SgD8Co
-ԯJV2oRxS,t~FøQ&5un`@^G
-^+?@@ тg}RK8T{2;:^tqȶҚU 0m@nzTr#jz?JCx|J=.JF=ܧx_ӚBOA5z)4F ܞE!=ԇE~
->9[J{V@ ꀏqmfW:ZeOnA
-RhV7 /p{a>Wa&4"|L5/5| D`dRRg3Ej( uAB ? ݢ7v%;yshA3z!4Dk=03P]|rtɬ#voreU>.D~X4VUV,T ȁ8ʻ]\xF)%5ǯ֟j+?J@F6 /p{afmHknpQ`!$KɈFCLxS rPA 硓ajWjރ-؏^K2JW[~ !2<YIF J5U6L\儤@ϗf!߃]SA9%(MKg\ь?L
-+'gF#-[)F@Gȅ/\V0HId7e" IPn%T#E'%p7CŨJE]Ydz޴k,j KkyX3%_2^b JK=*}(QA+qQ
-I$>]?'3'~C.˅VDT;*'}(T٨3q9v@~ut
-/~Z[Zm?ށ|-VNQkF$Z*Y4BFF۽oA0I鸻/ͼtiXR f dRXYG%uL46qQ
-Iً̯+x炁cۏuOAI0[߬q+Y)=
-%P
-1PAg+y"tpJ녏8
-(oƩ0n
- $/O.[Jρx+1oUƹHn
-rMa_{DpUe(vynǍǤFzg Jӵ Je0A<I?]Hڅҿs|8jǾHҺL3ybC|c3$ֹ-2Mxh#ds]2
-wׄ_ ]T5Bԑ(`>ۥUeO#䕛y^OGF};H ӵ Կa0AOD]?5FC$w4=D!&74=D!+{g"&4=>&4;>хcy||AAW/)oM$B~R{~/ʕBݢGv+GGaоUlAV\oG0zRw9{6~wdFYn~B~[q?͇Gl,3:ەDʈSD!Q4\s푺Vݧ\:==bQsbTZW#TA[V4^4>`=Gچ_ˬhXO˫v\=8nяݓ/Ez!<Yo+|ܳvY oʍ{Dtc{^
-WBJ+28f0@)oWM.^_Of*O요]W݇3͡H'T,=c˘nN먃C%B8J5`]D2my 'Ư>ck}}^nR˿wC^p5-u5vCG4+exJ~N}O-pYzuyek+w_=x[>kokٷ|#F4x@}K/ҫnRc]-7m{|rO_,[Cwvyweg0W~*wHa7wCޖ]coN%swrg|vG;/:Gݑߏ.k[)GUwf9+4ͩ]'m=|;9
-ź.yܽcn/m>ox6V8nN.鼻a[ +}YRε~F>wnVMhñ{8E$;dGby4⇱8_7^:|?V㷃Xc8ֺ|kݒq 8d0׷%H?~\b݅-M?"ʝ7ե"RC{{̈z1WkM2fILMw_]WQ4z17|KJTqdsR-NK gC*k,ЁM݋ Olro,ZB8h{w6\ Cq~4WV*2&?~ŔdV>oO/mBqmPRKN臮ĠA{K}mZq{4G=c:ކs>kZY.<pՓr~ zux"+ؗ1D!؟_̯Y~<!ډ85&QpIn]xhKJkJ!IU6916 xSoMorc'oX_y+pfIF*pūw<"7C(r4#VIϗ:}U%ǖE?ښؒqTŏhhЖ*ZW-__%Z;!a غ)z sP[s*SMC:[p`lsͶM?ɤ[-M[]tGwM
+883 0 obj
+<< /Filter /FlateDecode /Length 6096 >>
+stream
+x]K$mϯ(PTGĄ7Be:8dk:bo$Yd&X*Տ*$>  Y]o?م_sWb ۘї? P} &ӗ|ˇo^o)2ڼלZQ K?t-R]grmpl"o.?e&g~7\~]iXȯ=
+!{:O=m~Ʈ%SM?[Z~q|u^c׌۔uƆ-7[_f6m:4ɦ@:Ӆ@>ISGp쎾ٔw͍334Ġyo8 7 i| ۃ͉
+.0'V|?7 k; Xd)@Ŀ׈(y9XJmJ@ I"o0}ZG*Y)Z
+XOO'iB%]']OBԛ8{t\OBT2MJj.~ 1{4ZP^I?J,j",N
+3󉚚|qfF3C-3OSk8x<
+E?M i#6rej"&J[ k#kC* W'j &[JӐt<ND$|"nd?M[Hhˑ̍M`޸ z 6^S"0Ĭ%`3-Zq7|S] *B3OXug[gN&j3w[|"^71^Mo<^wޮm 5~zymٝmtxrۅs2 lf8i~;WÅs2pg$}m_IʝMI3-G09{` l]?ocy!7pFBpn\<FܝӃ#^ihVۍcmoHM04!!vD$4|$@R9;U ˍRJ{
+G\ !ϏVЂGzOIlhI8"h-ЦKaֲ(f:h`2!`԰NHjX`k^5*0-d-\a )U|Z_.ƩKAÍqC C>OTv=&RFe*Q$qJh^=n"TD: .Ɨ}B~oS1k
+{+кLEh2eFX4F8V^Etfh/ZMh?2cRo?iz0[g3KBCj 5b)t;xeJ4#;F /&[*dNX׃K`dO}RF%>^ROa J~,H^摼O˨U#Ix;<|2~# 3;Z}BCS2OQ5@ 0Zq殧[Ղ`A|#'T|)M6WL4E_"8{>x 4̏Z㖲#Rh9QD[q .6uےց;(Z"YJ</"Y%OY4O* sn$憅#=6Gg>
+$F3MɄߟȽwMF0eۇԗv-󧨖E5Xx^&>lӈ{{ne*%N*x>9۟yIUËC
+ٛYߝGa?]&!sw T t/Dѿ Gpg.̦xef@CpF1C.z.UX¥~{Ks +3`>_77;VG3"(W> UEh>b
+SԗH1;.`aEI9Bd0VH4?&7=T6}(t_* *^KK
+ LI@
+Mq%%VYa^$_F2Ly ^ֺEwS
+02?H)Sh`a+,lL՜4 )lMJ7i
+nS$`*㝦Ӝ8xe
+aSJ/i һ)3t3A,]j3hP쩋0 x\A^ 6ЬB7e7 Te Y:6w Â:=p!RC%M?{Vܬ<tWeB2,atI 'JGeT5xQ.=l̯tEkaśO ,fcZ`&WZz6icʨj"VhPO&
+"kjśO
+e7Ja"k=%.[Fb', D/G/y4zOu(Gt|4CxZQ:byR H<
+?({xY촳ءvb[ݡw =pfj}K a4 ;1/y)awվjTjW'ҦX򉛆լMJiNES: A2$]1TRI(wSė#.Z<&k$+ZӃ| R}BPQdn>W%YJN%:I޷+qxF+JR^b4?㇃t?[9?x7x( Xwo݃(61HCMUZ:08
+VH햬(
+TMhhCϱnuRsy Wt4fh' \%#oZ}i(Sp)h9P*v;s z}X_YLy*o˟{|qM"^䰔tN2~Cx{ϵɵǥ"a2un}9U-XpW
+72թJ _z?,6>'u@X4B#E]TN+\6n9akL<yU^]a tY`|Qs
+/SQ;.\xPAmSD(}">QF+[K^_N+ N7 'xc/Ӓڧ;Jj5Z'CϷ +¥]7R}>4uzZgD}z:[8)lKkmM*l?|ttJ^xk9 n-hbr1+w߇?bۇynSZ(2}nL^e>i]1ʫ3&cÏ_~<HȽxyf5>.
+& `
+/u ܠ[B`+30Uh鰔S0X1\ˆ֮#˞̓f}-k2 g:ˊGm1 yIq9֜4r+V F"HDvoR-]Ϫ" fᖺIem7ȅn$~9vKҨh)MW4^eWtNX^te+M7D]wSt醨+ d]i
+V-V']qdWtO]:OM֕л)tCԕn4us4F*rWtE}@Xte+M7D]wSt醨+ d]i늈#
endstream
endobj
-883 0 obj
-<< /Type /Page /Contents 884 0 R /Resources 882 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 859 0 R >>
+882 0 obj
+<< /Type /Page /Contents 883 0 R /Resources 881 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 863 0 R /Annots 885 0 R >>
endobj
885 0 obj
-<< /D [ 883 0 R /XYZ 78.37 808.885 null ] >>
+[ 880 0 R ]
endobj
-349 0 obj
-<< /D [ 883 0 R /XYZ 79.37 251.543 null ] >>
+880 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 276.144 69.91 286.601 81.367 ]/A << /S /GoTo /D (subsubsection.5.1.2) >> >>
endobj
-882 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F52 372 0 R /F42 374 0 R /F23 375 0 R /F51 376 0 R /F29 371 0 R /F56 380 0 R /F59 389 0 R /F69 398 0 R /F15 377 0 R >> /ProcSet [ /PDF /Text ] >>
+884 0 obj
+<< /D [ 882 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+345 0 obj
+<< /D [ 882 0 R /XYZ 79.37 539.971 null ] >>
+endobj
+881 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F20 382 0 R /F26 404 0 R /F52 376 0 R /F41 377 0 R /F53 646 0 R /F51 380 0 R /F29 375 0 R /F69 402 0 R /F15 381 0 R /F56 384 0 R /F58 386 0 R /F23 379 0 R /F57 385 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
888 0 obj
-<< /Filter /FlateDecode /Length 2111 >>
-stream
-x\K4o !ͰJ{ⴂ0H>G؝@8\R/w'Ù>w~.7<^gvƍ^ߺ
-_OkK#ip/)Lps wȄ-Oa Ɣ捲f!ۨ`ʁMgeg2l LXsK4^=u~!396Kczhr傁k{Iizl\&A(9a꫱esCet7hj{ג)[f`u[zj)D KaScѥdYHbюIl ^GvU>]\8?=tCϱHg2<܇]1e@*ޢK73<h/_*^r`^F](S|5i!rKНf2\F۳J gN;ĶrKХa
-}0 iгrKYkXZ14 9
-I7¢s-I'mV2גH
-
-[{=7N_峓lz[TN>qIQ >q[kg~6{gCpⒷ!,y`S(KF2h
-?&̙ea)m h( i8B1kEK #i =e;)1^ lg4r tns~5&
-5+y̤ fKdzf<g
-t51Y"~q)y6fz4X61;[$q6^7ei?]T͙1ϛ}ӽH7ᎬA27
-hMFW3 3үMBH(LYq= 3LhլdqGzc*ڙq08eFL #&VU9Ys5ڬj,]L')x2dqr
-'JjcsPX 3z9'L<9L e$Azpsr0W3f&9ŎIWNZ0WfG=w<0i}'v2\wz!-`/g1k'pSYX7&8 '&b7?To MEm=SJoEo2?QZ^8.qu,NI7=nUḺXN<ev
-;:vi*3oP%3Y0T5c׊yajSkkMD Y|Fr#Jms+'-K' lT2393hP;?h.<e`JnI|ە={o$ 
-_n7 ޸%ܓd9-?#_gELoL@%tk .HZ!һz-3s齎ϼoDJr_hGO%͏*eЦ0 m#~V m~|kB{]˪K-6Z6O;>~TaV']mttVɚ-}ΔtR}.)*Gsнuji <QuMoѝ!,dž?'>`lDO}1$ԀN+7OQr= CW1ђҝ3rއΙ\m8vN)Ɯw6cl%>?gFC@α )̰J0S5a5awr f_ k?=g޺;Υ;
+<< /Filter /FlateDecode /Length 5221 >>
+stream
+x]K$9nϯ.4Z>poR)J/̡2ŏH)BT_o_%h.b%/;\TyuŻWFrKoJ=dS[oAVJǞ{{+U{~vi=F!5M{|P9+5짪ϵ[buOCFHPZhԛ~rW?>uy*OoM hccFLi ȸōOtSh(tT(XsՄc7P[h 5.5ߢkU!NwtzJ ;.Qa{_,WtenF =<fYDWk6 [@K)0K.H/oklO4`?5&$[A_C͹8^/]]]_jf%8x$py1:d{5@;UMM44Kjf)A` 8ٴ1fhj0oɘ^nn.Na#MC
+ZOUk2YqA"3g-QD8]Tu|̐36 V(F"8sT$zV+mX()U~빇<q0@?jZ썣jbq*UK Ąn2n.6u1IS,zLv:ww_DQՇ$W6:L om=3ϔ;:?ϒ*ONJv<Y=1h%F2y]QD/G xw"Tfdw*i\:U?k'u71igHm`Yq-4 wŒigޤ.l'&VUrG^%{&ۑ@ϖ@6(ӠUӂ
+jPA'ޏӚo<X%s[r;*h7U% j7ghQ51ݴi
+%uN/XXaY$Um8^ܷ7xrikM}wW>).
+ҒTZ]^5:u&˜K006#˵L˩c_K>%0)\\rs߳i^[e(gBd][~k6,Ot|%4ĭ8лc=DG^辑\I{͇a1W"F^n z$C|E{Kɷe|obpvIV,.&,ƩκZBmss,l>N">l݋PK.eϳ6*-Jm@os^3 \ WZ44Bj ӰnZVBmȓ[TT#a%}j͢g4OR8Vn<Ԧ_t+`sjdc1[Ӗ垟8=oN-25/sƿ]
+7/wC&YW`MiqHizGi7֢Ik
+ s[kxob<f:_p/MX؜纸֦ӆ|Q:>AkJU MxR|2!{;?9o{u[7I..j!EkP.,)ؐI*8 { p@~_: B]
+C0E_& G 3A u).)
+#Z MXWA9*~L%
+E)xXcaX1鵷ĸVrII%NZSn
+Dt3[`󁲆)1/
+vFĭ6H/o.`ʃm4!d[pd4xG*9)MmlCI>@fd!>:Om`L\9 @hhcFlڈm# Nǘ{6](`f)T@ 6S e0RΦ<UY*I<JxX\Ga%# q+d!B }jãJ"#YhFcȗ}]QmaaQ w)-uI[AmB pۧ q1XJd[Fngt>i*I8JxX\Ga%# q+d! L00n lw="eH杍Rt)!8E"֢G i\$j8pSH9Ipl5)KQDĆE1RQl]y5cemah)ä<7X2lg4%uF'aR5^iN&xs9m΁ ӚTVEn Al X5X֕'Q393)Q e`ʢRm) H(HTGJ=!$)Ofs.9?
+Nv4NUҫɝI[NMfxs`S2!l%%);.S9:Pz BI6RD|+1QN^&+8/EcҐr#%S!NjC*LER&6u(CڕldΉwg]j)C5؆SX I6tqw+lc6d9xBR{DҝKyl4 eOH)VH$aA%0,s0"
+vrLm THW$aA%<,As6`c $kvN҃8RΉ26baDĆEޣ0K׌ل$jsף(R eFhʴұ'H2JxXnmX=H
+윺~l<㡇
+S׋z^ܽL`WNQ
+jQ jLňc[%jziQ\XuT>aUjepOn(sޮ=\ et{y5tnVsNMs7ܦRL*h{bYhυTwF'$'ݰܸ{O{}QFʓ(*j0Y/.)I>A}Ãp)R"l7GaᇇN0qnqҍZ@֯ Q@=aǮȏoG
+(0:/Ѧ?n饰ϾU~I&+9]/8eaNc~cl.Ϲ`Tq㹼7.xJ{XTGuh<IaxkGG uhS@ {8YsMV?Xo#\}ZAmiӮ$?n%ݺE
+*hubҗB.2he0UNt7cayU$ wLhLC /BO&,)&˙.^R(헑0|F=[qbLVY\W:Vl]Ԥ\O׼`xU$M4i9hw]5Rt__M}̈́%AVJ ֝+KJU4DR@X:!^Yj4+q=fG3~婶$!-L$g1
+kzvQh A z ,&@M{I dصhgiu!TƇ /.~t#jFrr*MC#^,4 c]oN'o
+ &G =6S+IcU{M)/>x#ݪSv9u0M
+S >jڋ3M}88a\+c}0v?o<cGo߀TO' 1P8QIf^|ڴ; @OQ
+gz, W<cƿP|pz>j.%_сNۏ$zva}[ѩ'iRVF/X
endstream
endobj
887 0 obj
-<< /Type /Page /Contents 888 0 R /Resources 886 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 859 0 R >>
+<< /Type /Page /Contents 888 0 R /Resources 886 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 863 0 R >>
endobj
889 0 obj
<< /D [ 887 0 R /XYZ 78.37 808.885 null ] >>
endobj
886 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 380 0 R /F15 377 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F55 383 0 R /F66 388 0 R /F56 384 0 R /F29 375 0 R /F20 382 0 R /F23 379 0 R /F51 380 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-1007 0 obj
-<< /Filter /FlateDecode /Length 3241 >>
-stream
-x\n;+DQ/0:lgVۡTRDEDZMR$E>ߛd_pS(4Z7Eoț 9-MJTRjsF-`bMJl,Ԓ>> |>]J+W"2c
--;l#ߐ~O01Vh5ŒKtR 3۔&\qNOjMqMZ(i6py= J#: ǟhx{;.XtD{]er.Yݤ>&h
- kli ;c[l&&B[1|Hyl)o L)# N9:&A$^=e[P {K.jT6g9buE6
-x#} ?-YnITXbnEWBXM{ VJ2Q
-UJ:"ٹ $Biqnj| ȧ_+|rK+t\kḁ*#򠌄M,~d QQ9&J)aIS@p8PBb Gtc9PX1}1UoĻƬsx) j!tp2@ >lY텄rM<wKĖ-ZH nH:8۱}"w:/R{dGG-#
-3-
-oeC)k߲unt!<p %U*᷎ |L^魪m ]kw%9D+_P!qΥxZ|C;'„2V{"<)S'8Z#Bqiil;rAڠ )T)!y5 @IG %_3h94FP_ٯ6I%Ejdlژ G-<#SJ*:}A'XfɁr,q@58@ I>ͩN
-mcέbJEp/tGE0󔆀S}51囔f{,@."-G>{5
- Cu\-.};@lP<
-uػ-A[1R]B}0K 6cdl %W#eAc,N nuv ~ (6 >+PQVNmBqTN)Q傟wT]َ_L6??JJ>Aۗ~ ը,+ "xu6bG fJX8e.> 0Dn_ Tj_^M"CI@ݩgDXb-Z-UX!ܳ߆qjr)a-
-
-vIJݺ,)Uƭ]36WQG˸ SXZv [ڃP:J|ݝ-}Vl@iD%2N9D| !ؑH{XP:mcM/)߁hN'<UNX;҂jSO =poRK@z˩*ԤUXX˞CZ18l|_=|K_
-%_(,'\CrPoBMP/#U.1(p:}J Hj|zo<e<\F֎7Gk2Hz=LVw&[^,i۸RTw[DtQ-R9¦6V5yT$ U/ؽ+"
-Ȩ?/Gk*V+4eAfO@-Vmhr]ؗ*CqMn2[!ᨤ⊱jVWAXi]q7NXi)Y 6x}GO?yFP+ GaՆA;uuK)h\vʣ -4a"(`P>Fq(HEkdEh]MWF:Ga `Ȭ{Q2e:#1:{~L3ziX[;MM@% `AHX-#B\TQ\DF
-i%>\ZMw+&3Fj4qSR%פ*_'֔S`#[ssޯ5TN:Fbꬎs7oo쬪̏9JlNmGKu>ϥFұ7GDx_&Rbt2-N{n;w܅[edޏ9k|"Qs7\S2` f[LO yJU`\"lbNCGA`Fȟ</ܑ9@e:vv8UЙnCws- irǡqz8?j3jasq{6:+ ^ =ox "zѧ,tgjXm~ <=͍\?vvd;NO^L3J\X
-s2)U+FKh_WBq\NS@k Z9sj}}z񬸎\"_TjΚl׭gP
- OkLvǩ?$ˇ6u9VXr
-OdUk` fe4ȸ{J
-B G}W%f]~ ԜHraG9:Df'8u24le1h1TVw{43JC_F+8] ]6qߊ䃰a,=MPE1wͲ =BiTJrMZ>
+892 0 obj
+<< /Filter /FlateDecode /Length 11739 >>
+stream
+x}M%^-%7'Mtuu 0q /HZg8dfw*MC3Zy`ïH&3s۟v?n_>[Jѿ2[*Ko)m_wS}=Ӿ;L?~wy=f|7FB<^=5n_6oqj.m&ͱr7x8>O?'5c%[S-gY]6lVIqR3 tc=+2Xn6{qו?WҰgDLڃ~^7Z/8{p\j=2˨Һ%b7c_o՚ WX|ݬ[6mJ4Ͽֲ?A(4yoV2fI]7G3-ys/0o[:nM|&ʛ1[V޴Y !__}?[p*<Q+|?_¾_kQ̻%}1l
+6[I AG(wZFevNZ?6^EGdlu$Λ37bCf7\|QΆ繘sBvνwuT~]F.ej`ǨTnݍPٸ ]-({sCy~Q>OK$K\H:KKfQtR^]"bqNOhhƗuPdKzG%Te3Μf6(l+:6C(Hu(A/|;,J7W-gŀA]Mh|eϿYD&4ޭȿD
+K2OLܬ{ޚԕ~.U,5D{7<Mߋ޴齀cTA+J.Ơ}i.֊`_jQN ⾷]CK/>ォ?=]_
+ -i_F[0c.&q ͻfڭ&[ú[xtγeF{^νM /
+8Bⳇ z(x~~~l/:J~=Q9lz`ptf)Ru?MG#Bw 4o?um?q>?~s)|'go|"ٴ|te&O_g>٣ˆK-vp}<dv?i ¹[ I~S%j0Jm>6רۏb=k̹*X7΂
+X Q*g?}ڒZIu>Z~k6M.ok;&qA{g.vȈs%RPt.MM/Q{G;bf>k`V|Sw1{<hOEҥw^K]r<ڊM+ښ͇n-ק|g=&cf[Wc8
+]hDn=?8k0S
+-ǟ.&.zs%$6S~$i˾){Ր:Zn)'d=;sv+ϮR
+ξROŻg|Px曷qGKCտ.dY)z2@JC?#KC?]G[KC?;n 3,]F겁.|\ك|0]MqO CJu0ޗx@e+ eV%Djp?ۨ0z$x`"xx+{§'qf5cz~+{§5UXBk5OhoZfhԟmؼyi[϶F+{XRw]WHp(|^޾ġ}C<hY #jkTC/|c||mRDޮ=㞗 kf^?|^_0sϠZ|lt{/ 5 S&NuZ^߂swypG%mh0NbJC=()]
+â²+`=>e;MH8QڝNOz wvs^9m"O ioLkUu J[ט4{ h& еlo㺻oz(E0  ƾbl|ES > eBQr?(_XNjΧK|黛y[ϙ8iΉy[~K&?u˽?w4moS cvԛX׻?޶6KEef@6~<Hpr?l)3B?#d,^}xX.kKu`if.iϡlʏr0RDxƄ'DR&Z <,Z7F4!E4)r1r9KV6g2 &svm;A32SS*JWқzҪd)tK\շ[Ty}ηz>jR Ya-klYq=['*O/vO(|eIbbHdNy3~G'+s#˫Ue if,[jXELtKΗ;S?#-v޸Ek0L]Dqw#f=+I*7rYOϕOdKe^p q6~[Ym ~Pnf;HvwjG\50VnV;
+w;>ҖQt|GcTo?'լ Cxڲ):mzzմ'm)Yz#X`;bU9[&驛/̷TsxXń"^p(\'}uyk֬G&ZA󸞆Ǜ6db>iܚo,ݽ
+O8E[Qp<9AneaoB| es~hb7U ~,M-s ,pnt/xq.S"wgD|3-"ߙV iJOw;2:|}eTo
+u<iM1ߒ=W3Meg4y}yޞEM /7Ͽ޴=<-إM EHo7iq`t3Iia`0cm]|gCi剝^t\;Z1s]1UgjVVG˖"/S2g_Yjџ?(1LϾȼբ_z_:mn)+]J] y#tXxk>,aŗ 'EZ.ySBz=04᫷g;29=oFY3)$ euHtR:klpEqaʠageN5ॻK8V~ɖ"9 T:epH!?!0\$X@2`2GĀy?Eg(Ф euHtRe7UQ;YH49eo3? .*w+UM{>= :Wp&H|@WlSSB&Q&Aj8i9 Ԡ(&IDQ;iN8KYYp, vmzTk()E1[ߜ=ؑIa%lO}ԆĹCu<6IpRo UsyV4_l= 섲:SU:)L%Ь vmzP4A(ZN( kϟ}۷ [cgH+%=φ4|Awz{ف<4yb^>{j݁oW .&ȯCyR0ag
+ՁAS hO,hvrkANNJ bФdI2z;ꇾZ@8`݁*
+CQvKRd4 h\wx/xK F1t'7 %OK}@jXiMv)b*5Wf#x\9^j.
+4ˣ@N!xXY j.po S +G?W|?9xh٭5qa yBx`n*tfzgm6 n\qПi9s.ƢV*?8~|X{ *#QKV<*$wȀkuL]dhyP\%cnO$=V(=4^1n.]٭-E:cYNn[<S pp{(JTdz<'X=n{ Z;?ܚ,<%4m1N@aaMCEA
+&fgCwe8t‚M N]`jCX usT?Ml+#(QKu;}"@d0);>O)y H0V6HD U9meH`R6(ζM`BCX&u3T?Mg+#(Qu:9^O/!;%rVlkgӖKZSj˟+7ѹ. Q[4UB}Mp/U $/ﱽIcr`Xh*
+KZXֈ$u<ݐE(1C*(Ӆ$u#|1gvP[dBS.k2mIeA~>Y*0QsUhѝ\'ԊŊnK)6k5
+ $ny)\uEɭ-U;yLa\cd&^*-0p&/gq53۶`SX#uT?Mr+++zxt4'\f#D-<MrJqRLN32Ki~XY G NTPg.FSzAqmRN:1_A8AjQKime@tԦ&ۮt`0!' >j*#)qzDeV4d˔
+6k8tRؼ/ǦP8Bqp! ZEy4@44݁oɀ\+P&ݤ%e18|.6
+N)z'm$>Sl*
+IN$xu5s33q~;C$`ZӂEɊz(z(($ĕ#awOS^Vp-eʳgy jR
+ $n4ӛsyT%_BX%?Z|#OfPPX+e*5NH`j㜵LbJZP
+#!4GjH:2Fh"H{,`0As,ݨL u`')d$xqr\e03yӾNsz
+mƉ^3䌠~A6a7`\윌Sڭ"b͆x9dIH`Qnɹ`gKUVhJ q`jWsAMq%^A `McL<*0DSj E~.8i!BC:Ɵcpl.p
+( U}R Bc%Nb3Ԇ3pgQfN;v:kFkf:+#|EeS\)WBCx'ca^* g=\&y+ͯ_t{0.U|P0 2SGD
+ec!?䃝_wANq^A aN㝌z=0Cz g| ?~@B8~&ƟsW
+j~U&4\A
+le`b)I !Øȟ@p^A a❌z= M@m)ה3eYw[vL.C-ٔZ֘է-
+`M=0tCzC?$Wn&!<E6j\LsQA p^U `mĪJI}ُd0Mp.. 4[7f̛yO h8S F0iN EC}I5.>8V0]e{g2*V
+l?
+J
+<P7QQG.'$X4s,,
+&>.EZNz$7a I)QƇE#Za&܃;X fuf+i$(3%T#E%p7CŨJE]Ydz8޴+,rvS)qXVK&e?@(zTZF]E)$tރ;3IYbZ.9OK$A7݁?T)-8CݨDF]˱$=Tx? '2|<5;fqȤrR]dAeE#djxjr4N2ջnI J)d7 VVQk(D9LpyB\BREaWV4|ˮsa}:^*d}og7lַ8Jt` @<n=xWs)Fz:[\ i+.wp!uA@?
+v~
+"3%Ύ~B]Ļ 7QH !4wSQ-ŕp**A+R:Z#y +mhK'0U+=E<Y TfB_W
+Ro7>bKn_I3[=7V)޻B /7W~hZ87JY*wn=et}-Gn;l-aSl.{͎8C1?Gl里B YDR8SDҐ5k(5\:!-zlE]-m?G+O45\h]EçW}zď DYsm ]U;. &z^=z?[=,[resAq?Y[5[^Tcދ`Ϧ{쪰-eGK_[75oz|oejO$nVn޺[Zmsmh{ 爱S[21R{V܆Voe|o1ղ20xK|Kc=C{ _-?%%u5Iɘ)4ɇZ'}n>>I/<4Xɝq318p?8Y;isc/eʲO:;߱vWG?Mձ܏dKkX(ӿE,uМyxӟ)| =k5Q:ḄWQ\Ov[}o~ouSqkk]w&_ t_Ӹ0׫pZOkzk<-w.n|_k-en۸08,h3}A^|vcju=lsOk.5-]9o{{/7?BzD bq/òEoL҉dlMv?bqSLJ/w|3|~MXݼRͺ-[.W`/'7dwrb4%;8o:?|l8ӊoSr~o9R;
endstream
endobj
-1006 0 obj
-<< /Type /Page /Contents 1007 0 R /Resources 1005 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 859 0 R /Annots 1009 0 R >>
+891 0 obj
+<< /Type /Page /Contents 892 0 R /Resources 890 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 863 0 R >>
endobj
-1009 0 obj
-[ 890 0 R 891 0 R 892 0 R 893 0 R 894 0 R 895 0 R 896 0 R 897 0 R 898 0 R 899 0 R 900 0 R 901 0 R 902 0 R 903 0 R 904 0 R 905 0 R 906 0 R 907 0 R 908 0 R 909 0 R 910 0 R 911 0 R 912 0 R 913 0 R 914 0 R 915 0 R 916 0 R 917 0 R 918 0 R 919 0 R 920 0 R 921 0 R 922 0 R 923 0 R 924 0 R 925 0 R 926 0 R 927 0 R 928 0 R 929 0 R 930 0 R 931 0 R 932 0 R 933 0 R 934 0 R 935 0 R 936 0 R 937 0 R 938 0 R 939 0 R 940 0 R 941 0 R 942 0 R 943 0 R 944 0 R 945 0 R 946 0 R 947 0 R 948 0 R 949 0 R 950 0 R 951 0 R 952 0 R 953 0 R 954 0 R 955 0 R 956 0 R 957 0 R 958 0 R 959 0 R 960 0 R 961 0 R 962 0 R 963 0 R 964 0 R 965 0 R 966 0 R 967 0 R 968 0 R 969 0 R 970 0 R 971 0 R 972 0 R 973 0 R 974 0 R 975 0 R 976 0 R 977 0 R 978 0 R 979 0 R 980 0 R 981 0 R 982 0 R 983 0 R 984 0 R 985 0 R 986 0 R 987 0 R 988 0 R 989 0 R 990 0 R 991 0 R 992 0 R 993 0 R 994 0 R 995 0 R 996 0 R 997 0 R 998 0 R 999 0 R 1000 0 R 1001 0 R 1002 0 R ]
+893 0 obj
+<< /D [ 891 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+349 0 obj
+<< /D [ 891 0 R /XYZ 79.37 615.945 null ] >>
endobj
890 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 276.152 681.312 288.107 693.267 ]/A << /S /GoTo /D (page.17) >> >>
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 384 0 R /F29 375 0 R /F23 379 0 R /F20 382 0 R /F51 380 0 R /F69 402 0 R /F15 381 0 R /F52 376 0 R /F42 378 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-891 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 162.917 669.576 174.872 680.754 ]/A << /S /GoTo /D (page.10) >> >>
+896 0 obj
+<< /Filter /FlateDecode /Length 2924 >>
+stream
+x\͎S%xi9-{H&%*-EU},~*-ħ//;>^~8? N'1YϤ1}|#8.~o?+
+=y 2ř.+ի8h*^vfI䯚lx@i>=^']B }/
+[^ ȡ|^1I
+[f) sZܨ4.8T4sBPoEƥ4b8n΍ͤ;^@#x&Cړ4V> 82spLYPLfd>ǩT!FJ-,h
+6J)$;2$ˢʹCCY4zTl[ae4| շm߅o|)D)V %Vpw2dO#EgD,G(4ͪ bcrm)WRu_BQx(nH )hgSK2 ӷ x=N1M')xh(ҕcw 65ECLo:h ¿_N`t1AGU%f3ge=fM*fe'l5Z?韪opCsKabW~4&
+sf)Hm'~ILs*w^l2XQaI+q3%=
+0ܩ=s grvQ0qr5kL1s/e&3)\̃|
+3;
+uDD,7=Ջ[&cp\$2t.z.AvxN|qk]Eߺ8NyYϳ#/3𬓿e;lb-0x/O{` ђwN󝲾f$=VvJϘ |F^3;Ǹ3i瑴Z6LTKf+Auz$[rLnf(e }bQ9i)G7In߹nEafx7.gty~?V]wq"; h"Fü]ޜޣcyz>|KDIynCzG},)ύv <>~+VYyn{|O[w'=};>Ks- Zc|)/UVűS:(;UF6:9va'ٖ>gJ:+L?M/1*Ŕs0}i_n
+ءBo~'ڋotK{%]´fL͂ $p1xb~=,@`ns%zoE]@
+endstream
endobj
-892 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 162.917 657.621 174.872 668.799 ]/A << /S /GoTo /D (page.10) >> >>
+895 0 obj
+<< /Type /Page /Contents 896 0 R /Resources 894 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 863 0 R >>
endobj
-893 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 229.268 633.491 241.223 645.446 ]/A << /S /GoTo /D (page.24) >> >>
+897 0 obj
+<< /D [ 895 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+353 0 obj
+<< /D [ 895 0 R /XYZ 79.37 771.024 null ] >>
endobj
894 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 245.318 633.491 257.492 645.446 ]/A << /S /GoTo /D (page.62) >> >>
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 402 0 R /F15 381 0 R /F56 384 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-895 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 162.917 622.104 174.872 632.933 ]/A << /S /GoTo /D (page.46) >> >>
+1016 0 obj
+<< /Filter /FlateDecode /Length 3278 >>
+stream
+x\ώ )>ٸ@Ϲf4#Qu6")GZ}E_Mo\RH.?b.>*ZYw˿޴&?ZMk=?7jL_դ yeEB\ߌ=wq{; p_)X\#`yȯ4p}ϯ䖇/DLXuߗ˃
+haEK\:}wfCZnmEԋE(wP~AA
+CGX}(>E i[cPC
+W+%!`BCc2ț)4.ufĜK nj1*4GyObQ̥(o\ƟdX7v-37Xr}E-清ٲZo=aƎym_cJ&dIñ%%VAkE|H
+!֎%Vmxq23* VRN·ka0 IOIk}{s6ȭlAGn^0Q ;Bx[qiG .?-Yn$),^1ž\1$ VIRS^:e
+n/ѝ?As ڎCB&c#T>A*kOw7=:qyPFF63~UFAmTPn”Na
+:*[^<K
+;h<*&&z]ՊUOnLj`
+f"#ױe)^gH{k[6 ZE%вqZDB6\r"Py?6`!Kuc9lec-7V
+>#CI :9v,PX9x6 I_94(`] zr6(`Ԃ׎OA*l{r'Htz; f2HOv(fJ@Rz,8nIJ\zi.fPᗜZ/s]bP>y7rIa:IS7y
+8YIK ~tG1kȯCv+ [ΛS!:PNJrs
+Ot=Sȵ)O;[䨀aS`)&6x5RP4wZfa{%2hK1a *;5Im|bC6t6*^zM+wBeiA,_d$A<b_qm&URRNuO% mxHT %|JB5<1!Zw6ROVB},8_  5UڿN4pmC9iY.<q vor!2DPAe7TP
+O52
+;Ip$ 5T7IIq0 0HyOMEVwvPkOߦ
+eu"P)嗭k_U'RE
+ ^~̃k9"W$R(?''+ymGSG֙a3P[I)_FѪ8ǽlzlP\]uNkvZcw#)*tQ9fU,8CeYslC'=Yu>[6x}wAYrUz'Mw͋̊Qy{Sи딛 -4a"X`+ן_W!si})}m8ZvTX3]"4V*rc9>} E6Dp%핍VJTƠ<˦Zdw. v rA˾.CHK*m ;p3ԣyX}M
+w#c7V89FⴑD^[c_H4qwoKԓ'B\z)oFmqA*I}nrr?[p,c|fₚi㡡GDg:JRc7%j_LܠLq >V(jіOJ}Kdz8҄{}c^)qwYN8~X7quS}8,nۀWq ˥v%lb+Qnvl.}鋫28vk[*T{HH=5B5vO-ǚm(?rqM3@K+Jm}@)M<Qi
+endstream
endobj
-896 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 246.752 587.663 253.726 599.618 ]/A << /S /GoTo /D (page.3) >> >>
+1015 0 obj
+<< /Type /Page /Contents 1016 0 R /Resources 1014 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 863 0 R /Annots 1018 0 R >>
endobj
-897 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 168.147 576.276 180.102 587.105 ]/A << /S /GoTo /D (page.46) >> >>
+1018 0 obj
+[ 898 0 R 899 0 R 900 0 R 901 0 R 902 0 R 903 0 R 904 0 R 905 0 R 906 0 R 907 0 R 908 0 R 909 0 R 910 0 R 911 0 R 912 0 R 913 0 R 914 0 R 915 0 R 916 0 R 917 0 R 918 0 R 919 0 R 920 0 R 921 0 R 922 0 R 923 0 R 924 0 R 925 0 R 926 0 R 927 0 R 928 0 R 929 0 R 930 0 R 931 0 R 932 0 R 933 0 R 934 0 R 935 0 R 936 0 R 937 0 R 938 0 R 939 0 R 940 0 R 941 0 R 942 0 R 943 0 R 944 0 R 945 0 R 946 0 R 947 0 R 948 0 R 949 0 R 950 0 R 951 0 R 952 0 R 953 0 R 954 0 R 955 0 R 956 0 R 957 0 R 958 0 R 959 0 R 960 0 R 961 0 R 962 0 R 963 0 R 964 0 R 965 0 R 966 0 R 967 0 R 968 0 R 969 0 R 970 0 R 971 0 R 972 0 R 973 0 R 974 0 R 975 0 R 976 0 R 977 0 R 978 0 R 979 0 R 980 0 R 981 0 R 982 0 R 983 0 R 984 0 R 985 0 R 986 0 R 987 0 R 988 0 R 989 0 R 990 0 R 991 0 R 992 0 R 993 0 R 994 0 R 995 0 R 996 0 R 997 0 R 998 0 R 999 0 R 1000 0 R 1001 0 R 1002 0 R 1003 0 R 1004 0 R 1005 0 R 1006 0 R 1007 0 R 1008 0 R 1009 0 R 1010 0 R 1011 0 R ]
endobj
898 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 168.147 564.321 180.102 575.15 ]/A << /S /GoTo /D (page.46) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 173.716 681.87 180.69 692.709 ]/A << /S /GoTo /D (page.9) >> >>
endobj
899 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 169.104 551.798 181.059 563.753 ]/A << /S /GoTo /D (page.33) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 276.152 669.357 288.107 681.312 ]/A << /S /GoTo /D (page.18) >> >>
endobj
900 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 115.843 540.41 122.817 551.24 ]/A << /S /GoTo /D (page.4) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 162.917 657.621 174.872 668.799 ]/A << /S /GoTo /D (page.11) >> >>
endobj
901 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 201.472 528.455 208.446 539.285 ]/A << /S /GoTo /D (page.4) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 162.917 645.666 174.872 656.844 ]/A << /S /GoTo /D (page.11) >> >>
endobj
902 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 211.435 528.455 218.409 539.285 ]/A << /S /GoTo /D (page.9) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 229.268 621.536 241.223 633.491 ]/A << /S /GoTo /D (page.25) >> >>
endobj
903 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 147.226 516.151 154.2 527.329 ]/A << /S /GoTo /D (page.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 245.318 621.536 257.492 633.491 ]/A << /S /GoTo /D (page.63) >> >>
endobj
904 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 147.226 504.196 154.2 515.374 ]/A << /S /GoTo /D (page.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 162.917 610.149 174.872 620.978 ]/A << /S /GoTo /D (page.47) >> >>
endobj
905 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 152.456 492.59 159.43 503.419 ]/A << /S /GoTo /D (page.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 246.752 575.708 253.726 587.663 ]/A << /S /GoTo /D (page.3) >> >>
endobj
906 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 152.456 480.635 159.43 491.464 ]/A << /S /GoTo /D (page.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 168.147 564.321 180.102 575.15 ]/A << /S /GoTo /D (page.47) >> >>
endobj
907 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 189.926 456.156 201.881 468.111 ]/A << /S /GoTo /D (page.23) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 168.147 552.366 180.102 563.195 ]/A << /S /GoTo /D (page.47) >> >>
endobj
908 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 174.165 444.201 181.139 456.156 ]/A << /S /GoTo /D (page.9) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 169.104 539.842 181.059 551.798 ]/A << /S /GoTo /D (page.34) >> >>
endobj
909 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 187.624 432.246 194.598 444.201 ]/A << /S /GoTo /D (page.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 115.843 528.455 122.817 539.285 ]/A << /S /GoTo /D (page.4) >> >>
endobj
910 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 233.032 420.291 244.987 432.246 ]/A << /S /GoTo /D (page.41) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 201.472 516.5 208.446 527.329 ]/A << /S /GoTo /D (page.4) >> >>
endobj
911 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 223.848 386.418 235.804 398.373 ]/A << /S /GoTo /D (page.38) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 211.435 516.5 223.39 527.329 ]/A << /S /GoTo /D (page.10) >> >>
endobj
912 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 144.795 375.021 156.75 385.86 ]/A << /S /GoTo /D (page.38) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 147.226 504.196 154.2 515.374 ]/A << /S /GoTo /D (page.2) >> >>
endobj
913 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 236.479 362.507 248.434 374.463 ]/A << /S /GoTo /D (page.13) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 147.226 492.241 154.2 503.419 ]/A << /S /GoTo /D (page.2) >> >>
endobj
914 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 115.843 351.12 127.799 361.95 ]/A << /S /GoTo /D (page.27) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 152.456 480.635 159.43 491.464 ]/A << /S /GoTo /D (page.2) >> >>
endobj
915 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 147.226 339.165 159.181 349.994 ]/A << /S /GoTo /D (page.15) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 152.456 468.679 159.43 479.509 ]/A << /S /GoTo /D (page.2) >> >>
endobj
916 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 184.406 327.2 191.38 338.039 ]/A << /S /GoTo /D (page.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 189.926 444.201 201.881 456.156 ]/A << /S /GoTo /D (page.24) >> >>
endobj
917 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 195.475 327.2 207.43 338.039 ]/A << /S /GoTo /D (page.22) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 174.165 432.246 186.12 444.201 ]/A << /S /GoTo /D (page.10) >> >>
endobj
918 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 153.183 315.245 160.157 326.084 ]/A << /S /GoTo /D (page.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 187.624 420.291 194.598 432.246 ]/A << /S /GoTo /D (page.5) >> >>
endobj
919 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 164.252 315.245 176.207 326.084 ]/A << /S /GoTo /D (page.22) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 233.032 408.336 244.987 420.291 ]/A << /S /GoTo /D (page.42) >> >>
endobj
920 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 166.972 303.29 173.946 314.129 ]/A << /S /GoTo /D (page.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 223.848 374.463 235.804 386.418 ]/A << /S /GoTo /D (page.39) >> >>
endobj
921 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 178.04 303.29 189.995 314.129 ]/A << /S /GoTo /D (page.22) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 144.795 363.065 156.75 373.905 ]/A << /S /GoTo /D (page.39) >> >>
endobj
922 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 226.12 279.389 238.075 290.219 ]/A << /S /GoTo /D (page.17) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 236.479 350.552 248.434 362.507 ]/A << /S /GoTo /D (page.14) >> >>
endobj
923 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 199.579 267.434 211.535 278.263 ]/A << /S /GoTo /D (page.21) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 115.843 339.165 127.799 349.994 ]/A << /S /GoTo /D (page.28) >> >>
endobj
924 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 172.481 254.911 179.455 266.866 ]/A << /S /GoTo /D (page.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 147.226 327.21 159.181 338.039 ]/A << /S /GoTo /D (page.16) >> >>
endobj
925 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 233.871 231.001 245.826 242.956 ]/A << /S /GoTo /D (page.17) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 184.406 315.245 191.38 326.084 ]/A << /S /GoTo /D (page.2) >> >>
endobj
926 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 249.921 231.001 262.095 242.956 ]/A << /S /GoTo /D (page.67) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 195.475 315.245 207.43 326.084 ]/A << /S /GoTo /D (page.23) >> >>
endobj
927 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 219.465 219.045 231.42 231.001 ]/A << /S /GoTo /D (page.10) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 153.183 303.29 160.157 314.129 ]/A << /S /GoTo /D (page.2) >> >>
endobj
928 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 195.694 207.09 207.649 219.045 ]/A << /S /GoTo /D (page.36) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 164.252 303.29 176.207 314.129 ]/A << /S /GoTo /D (page.23) >> >>
endobj
929 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 127.659 195.703 139.614 206.642 ]/A << /S /GoTo /D (page.34) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 166.972 291.334 173.946 302.174 ]/A << /S /GoTo /D (page.2) >> >>
endobj
930 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 221.238 171.783 233.193 182.662 ]/A << /S /GoTo /D (page.16) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 178.04 291.334 189.995 302.174 ]/A << /S /GoTo /D (page.23) >> >>
endobj
931 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 192.594 159.838 204.549 170.707 ]/A << /S /GoTo /D (page.41) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 226.12 267.434 238.075 278.263 ]/A << /S /GoTo /D (page.18) >> >>
endobj
932 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 155.415 147.882 167.37 158.821 ]/A << /S /GoTo /D (page.26) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 199.579 255.479 211.535 266.308 ]/A << /S /GoTo /D (page.22) >> >>
endobj
933 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 159.041 135.917 170.997 146.866 ]/A << /S /GoTo /D (page.26) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 172.481 242.956 179.455 254.911 ]/A << /S /GoTo /D (page.2) >> >>
endobj
934 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 175.091 135.917 187.266 146.866 ]/A << /S /GoTo /D (page.45) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 233.871 219.045 245.826 231.001 ]/A << /S /GoTo /D (page.18) >> >>
endobj
935 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 191.36 135.917 203.535 146.866 ]/A << /S /GoTo /D (page.60) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 249.921 219.045 262.095 231.001 ]/A << /S /GoTo /D (page.69) >> >>
endobj
936 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 153.721 123.962 165.677 134.911 ]/A << /S /GoTo /D (page.26) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 219.465 207.09 231.42 219.045 ]/A << /S /GoTo /D (page.10) >> >>
endobj
937 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 169.771 123.962 181.946 134.911 ]/A << /S /GoTo /D (page.45) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 195.694 195.135 207.649 207.09 ]/A << /S /GoTo /D (page.37) >> >>
endobj
938 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 186.04 123.962 198.215 134.911 ]/A << /S /GoTo /D (page.59) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 127.659 183.748 139.614 194.687 ]/A << /S /GoTo /D (page.35) >> >>
endobj
939 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 202.847 123.962 215.021 134.911 ]/A << /S /GoTo /D (page.60) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 221.238 159.828 233.193 170.707 ]/A << /S /GoTo /D (page.17) >> >>
endobj
940 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 157.348 112.007 169.303 122.956 ]/A << /S /GoTo /D (page.26) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 192.594 147.882 204.549 158.752 ]/A << /S /GoTo /D (page.42) >> >>
endobj
941 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 173.398 112.007 185.572 122.956 ]/A << /S /GoTo /D (page.45) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 155.415 135.927 167.37 146.866 ]/A << /S /GoTo /D (page.27) >> >>
endobj
942 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 136.765 100.062 148.72 110.891 ]/A << /S /GoTo /D (page.34) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 159.041 123.962 170.997 134.911 ]/A << /S /GoTo /D (page.27) >> >>
endobj
943 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 151.709 100.062 163.664 110.891 ]/A << /S /GoTo /D (page.38) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 175.091 123.962 187.266 134.911 ]/A << /S /GoTo /D (page.46) >> >>
endobj
944 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 167.759 100.062 179.933 110.891 ]/A << /S /GoTo /D (page.66) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 191.36 123.962 203.535 134.911 ]/A << /S /GoTo /D (page.61) >> >>
endobj
945 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 176.456 87.758 188.411 98.936 ]/A << /S /GoTo /D (page.16) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 153.721 112.007 165.677 122.956 ]/A << /S /GoTo /D (page.27) >> >>
endobj
946 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 192.506 87.758 204.68 98.936 ]/A << /S /GoTo /D (page.66) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 169.771 112.007 181.946 122.956 ]/A << /S /GoTo /D (page.46) >> >>
endobj
947 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 209.313 87.758 221.487 98.936 ]/A << /S /GoTo /D (page.67) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 186.04 112.007 198.215 122.956 ]/A << /S /GoTo /D (page.60) >> >>
endobj
948 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 169.572 75.583 181.527 87.539 ]/A << /S /GoTo /D (page.12) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 202.847 112.007 215.021 122.956 ]/A << /S /GoTo /D (page.61) >> >>
endobj
949 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 185.622 75.583 197.796 87.539 ]/A << /S /GoTo /D (page.67) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 157.348 100.052 169.303 111.001 ]/A << /S /GoTo /D (page.27) >> >>
endobj
950 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 383.585 681.87 390.559 692.709 ]/A << /S /GoTo /D (page.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 173.398 100.052 185.572 111.001 ]/A << /S /GoTo /D (page.46) >> >>
endobj
951 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 397.703 669.915 409.658 680.754 ]/A << /S /GoTo /D (page.43) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 136.765 88.107 148.72 98.936 ]/A << /S /GoTo /D (page.35) >> >>
endobj
952 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 387.232 646.014 394.206 656.884 ]/A << /S /GoTo /D (page.4) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 151.709 88.107 163.664 98.936 ]/A << /S /GoTo /D (page.39) >> >>
endobj
953 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 480.622 634.059 492.577 644.928 ]/A << /S /GoTo /D (page.37) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 167.759 88.107 179.933 98.936 ]/A << /S /GoTo /D (page.68) >> >>
endobj
954 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 402.923 621.755 414.878 632.973 ]/A << /S /GoTo /D (page.23) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 176.456 75.803 188.411 86.981 ]/A << /S /GoTo /D (page.17) >> >>
endobj
955 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 421.272 610.149 433.227 621.018 ]/A << /S /GoTo /D (page.14) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 192.506 75.803 204.68 86.981 ]/A << /S /GoTo /D (page.67) >> >>
endobj
956 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 452.079 598.064 464.034 609.063 ]/A << /S /GoTo /D (page.31) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 207.779 75.803 219.953 86.981 ]/A << /S /GoTo /D (page.69) >> >>
endobj
957 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 467.072 586.229 479.028 597.108 ]/A << /S /GoTo /D (page.47) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 392.821 693.267 404.776 705.222 ]/A << /S /GoTo /D (page.13) >> >>
endobj
958 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 357.055 574.283 369.01 585.113 ]/A << /S /GoTo /D (page.21) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 408.871 693.267 421.045 705.222 ]/A << /S /GoTo /D (page.69) >> >>
endobj
959 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 373.105 574.283 385.279 585.113 ]/A << /S /GoTo /D (page.65) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 383.585 669.915 390.559 680.754 ]/A << /S /GoTo /D (page.5) >> >>
endobj
960 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 390.539 561.76 402.495 573.715 ]/A << /S /GoTo /D (page.16) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 397.703 657.96 409.658 668.799 ]/A << /S /GoTo /D (page.44) >> >>
endobj
961 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 490.644 549.805 502.599 561.76 ]/A << /S /GoTo /D (page.18) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 387.232 634.059 394.206 644.928 ]/A << /S /GoTo /D (page.4) >> >>
endobj
962 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 379.381 514.508 391.336 525.058 ]/A << /S /GoTo /D (page.21) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 480.622 622.104 492.577 632.973 ]/A << /S /GoTo /D (page.38) >> >>
endobj
963 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 449.369 502.552 461.324 513.382 ]/A << /S /GoTo /D (page.17) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 402.923 609.8 414.878 621.018 ]/A << /S /GoTo /D (page.24) >> >>
endobj
964 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 465.419 502.552 477.593 513.382 ]/A << /S /GoTo /D (page.56) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 421.272 598.194 433.227 609.063 ]/A << /S /GoTo /D (page.14) >> >>
endobj
965 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 489.229 490.029 501.185 501.984 ]/A << /S /GoTo /D (page.44) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 452.079 586.109 464.034 597.108 ]/A << /S /GoTo /D (page.32) >> >>
endobj
966 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 371.421 478.642 383.376 489.471 ]/A << /S /GoTo /D (page.23) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 467.072 574.273 479.028 585.153 ]/A << /S /GoTo /D (page.48) >> >>
endobj
967 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 455.305 466.119 467.26 478.074 ]/A << /S /GoTo /D (page.13) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 357.055 562.328 369.01 573.158 ]/A << /S /GoTo /D (page.22) >> >>
endobj
968 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 451.481 454.164 463.436 466.119 ]/A << /S /GoTo /D (page.12) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 373.105 562.328 385.279 573.158 ]/A << /S /GoTo /D (page.66) >> >>
endobj
969 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 467.531 454.164 479.705 466.119 ]/A << /S /GoTo /D (page.20) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 390.539 549.805 402.495 561.76 ]/A << /S /GoTo /D (page.17) >> >>
endobj
970 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 423.018 430.811 434.973 441.76 ]/A << /S /GoTo /D (page.16) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 490.644 537.85 502.599 549.805 ]/A << /S /GoTo /D (page.19) >> >>
endobj
971 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 446.28 418.866 458.236 429.735 ]/A << /S /GoTo /D (page.47) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 379.381 502.552 391.336 513.103 ]/A << /S /GoTo /D (page.22) >> >>
endobj
972 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 365.374 406.911 377.329 417.85 ]/A << /S /GoTo /D (page.10) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 449.369 490.597 461.324 501.427 ]/A << /S /GoTo /D (page.18) >> >>
endobj
973 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 476.268 394.388 488.223 406.343 ]/A << /S /GoTo /D (page.51) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 465.419 490.597 477.593 501.427 ]/A << /S /GoTo /D (page.57) >> >>
endobj
974 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 492.318 394.388 504.492 406.343 ]/A << /S /GoTo /D (page.66) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 489.229 478.074 501.185 490.029 ]/A << /S /GoTo /D (page.45) >> >>
endobj
975 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 387.511 383.001 399.466 393.83 ]/A << /S /GoTo /D (page.49) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 371.421 466.687 383.376 477.516 ]/A << /S /GoTo /D (page.24) >> >>
endobj
976 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 386.126 370.916 398.081 381.875 ]/A << /S /GoTo /D (page.49) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 455.305 454.164 467.26 466.119 ]/A << /S /GoTo /D (page.14) >> >>
endobj
977 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 399.934 359.09 411.889 369.92 ]/A << /S /GoTo /D (page.49) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 451.481 442.209 463.436 454.164 ]/A << /S /GoTo /D (page.13) >> >>
endobj
978 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 415.984 359.09 428.158 369.92 ]/A << /S /GoTo /D (page.66) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 467.531 442.209 479.705 454.164 ]/A << /S /GoTo /D (page.21) >> >>
endobj
979 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 470.241 346.567 482.415 358.522 ]/A << /S /GoTo /D (page.53) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 423.018 418.856 434.973 429.805 ]/A << /S /GoTo /D (page.17) >> >>
endobj
980 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 357.573 335.18 369.528 346.009 ]/A << /S /GoTo /D (page.13) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 446.28 406.911 458.236 417.78 ]/A << /S /GoTo /D (page.48) >> >>
endobj
981 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 372.517 335.18 384.472 346.009 ]/A << /S /GoTo /D (page.16) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 365.374 394.956 377.329 405.895 ]/A << /S /GoTo /D (page.11) >> >>
endobj
982 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 339.092 301.307 352.542 312.136 ]/A << /S /GoTo /D (page.27) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 473.372 382.433 485.327 394.388 ]/A << /S /GoTo /D (page.52) >> >>
endobj
983 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 356.637 301.307 368.592 312.136 ]/A << /S /GoTo /D (page.54) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 488.698 382.433 500.873 394.388 ]/A << /S /GoTo /D (page.67) >> >>
endobj
984 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 372.686 301.307 384.861 312.136 ]/A << /S /GoTo /D (page.59) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 504.727 382.433 516.902 394.388 ]/A << /S /GoTo /D (page.68) >> >>
endobj
985 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 500.497 288.784 512.452 300.739 ]/A << /S /GoTo /D (page.19) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 387.511 371.045 399.466 381.875 ]/A << /S /GoTo /D (page.50) >> >>
endobj
986 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 442.823 264.874 454.779 276.829 ]/A << /S /GoTo /D (page.35) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 386.126 358.961 398.081 369.92 ]/A << /S /GoTo /D (page.50) >> >>
endobj
987 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 468.876 252.918 480.831 264.874 ]/A << /S /GoTo /D (page.47) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 399.934 347.135 411.889 357.965 ]/A << /S /GoTo /D (page.50) >> >>
endobj
988 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 389.354 240.963 401.309 252.918 ]/A << /S /GoTo /D (page.62) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 415.984 347.135 428.158 357.965 ]/A << /S /GoTo /D (page.67) >> >>
endobj
989 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 446.071 229.566 458.026 240.445 ]/A << /S /GoTo /D (page.33) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 470.241 334.612 482.415 346.567 ]/A << /S /GoTo /D (page.54) >> >>
endobj
990 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 481.476 217.053 493.432 229.008 ]/A << /S /GoTo /D (page.41) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 357.573 323.225 369.528 334.054 ]/A << /S /GoTo /D (page.14) >> >>
endobj
991 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 349.553 205.307 361.508 216.495 ]/A << /S /GoTo /D (page.13) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 372.517 323.225 384.472 334.054 ]/A << /S /GoTo /D (page.17) >> >>
endobj
992 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 441.476 193.143 453.432 205.098 ]/A << /S /GoTo /D (page.15) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 339.092 289.352 352.542 300.181 ]/A << /S /GoTo /D (page.28) >> >>
endobj
993 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 399.715 181.187 406.689 193.143 ]/A << /S /GoTo /D (page.4) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 356.637 289.352 368.592 300.181 ]/A << /S /GoTo /D (page.55) >> >>
endobj
994 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 410.784 181.187 422.958 193.143 ]/A << /S /GoTo /D (page.65) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 372.686 289.352 384.861 300.181 ]/A << /S /GoTo /D (page.60) >> >>
endobj
995 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 471.825 169.232 483.78 181.187 ]/A << /S /GoTo /D (page.54) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 500.497 276.829 512.452 288.784 ]/A << /S /GoTo /D (page.20) >> >>
endobj
996 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 447.336 135.359 459.292 147.314 ]/A << /S /GoTo /D (page.38) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 442.823 252.918 454.779 264.874 ]/A << /S /GoTo /D (page.36) >> >>
endobj
997 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 479.725 123.404 491.68 135.359 ]/A << /S /GoTo /D (page.47) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 468.876 240.963 480.831 252.918 ]/A << /S /GoTo /D (page.48) >> >>
endobj
998 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 414.201 99.494 426.156 111.449 ]/A << /S /GoTo /D (page.39) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 389.354 229.008 401.309 240.963 ]/A << /S /GoTo /D (page.63) >> >>
endobj
999 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 430.25 99.494 442.425 111.449 ]/A << /S /GoTo /D (page.57) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 446.071 217.611 458.026 228.49 ]/A << /S /GoTo /D (page.34) >> >>
endobj
1000 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 472.61 87.539 484.565 99.494 ]/A << /S /GoTo /D (page.41) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 481.476 205.098 493.432 217.053 ]/A << /S /GoTo /D (page.42) >> >>
endobj
1001 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 488.659 87.539 500.834 99.494 ]/A << /S /GoTo /D (page.57) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 349.553 193.352 361.508 204.54 ]/A << /S /GoTo /D (page.14) >> >>
endobj
1002 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 495.334 75.583 507.29 87.539 ]/A << /S /GoTo /D (page.41) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 441.476 181.187 453.432 193.143 ]/A << /S /GoTo /D (page.16) >> >>
endobj
-1008 0 obj
-<< /D [ 1006 0 R /XYZ 78.37 808.885 null ] >>
+1003 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 399.715 169.232 406.689 181.187 ]/A << /S /GoTo /D (page.4) >> >>
endobj
-353 0 obj
-<< /D [ 1006 0 R /XYZ 79.37 706.717 null ] >>
+1004 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 410.784 169.232 422.958 181.187 ]/A << /S /GoTo /D (page.66) >> >>
endobj
1005 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 398 0 R /F67 385 0 R /F56 380 0 R /F15 377 0 R /F57 381 0 R /F55 379 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 471.825 157.277 483.78 169.232 ]/A << /S /GoTo /D (page.55) >> >>
endobj
-1113 0 obj
-<< /Filter /FlateDecode /Length 3273 >>
-stream
-x\ɮ WZ x@U׽]moCɲZ]K,u.E[^}}ۏ/e.A /M yQvgV]~? C)mXRJOO\/p[~]k㟿Υ #)l9^H +c9 _*_Ǝ:pA
-~5凪X͠9ec[bʨ#{-ҵ[ݪ(+v0
-F` ?n
-dNjy@f
-=< n 'D}.;u
-C 봃`w8Ny)88Z0 t}e |iJrp6:dSb5#0ؔ4t,٤N0ZoN`LQ+ STg\-1'6=?\nH=
-85y7`֧G*,*̵@u>zLAx=F~w+@"#2˝'PW,WF1r@r#_0`W[l5^t/d+z[,iVƠ/@.RA=.6L׵פRBANIϮόim( F}Z*Qr$o@nq4fFhIy'@Md6A#g,/'j|团pۊa<鎊tF2<?Mo_) ZZ7/g,7St]+iRpqZ0\
-֔.mGB%tݟlhyb5Z2GЄ=yď ;T.JG:B 4AOnBNKSWgdN<]"?[aZR|Ŭ,>+hrIە\S2knU[h JW¦7T bѭn6%zAXec@d(+
-|dB_Pm ">QLݚԙ8
-+L)-+2Z6ɎR=½HkMspS>sr .
-B{VhS8+#4.Si }ғj}`TdM06>m:pSEfm+.y;!6uNt ռ/pR:#',t iK1JIWb-a٩LJ7ֵA
-pHu>k?g̖tb6 D`"ujk[9yvKn8ءZ
--3^h`F\g qNrdЌPyCS!?,IqvqzTRP~Z}~RRΉa ȟ+xMN@yOX28rKxQ_z"UgFb_mwˬl85rn+%:ihltߣ2pP*2ϱ8Z;%,4$qm⠠C9/FamnI {L(f9Y=nHwStwA^`:G,/nNlRSi54o%s4 xh#V0|u½da{vWg#]j[J2S0@7-hb6IQ9j83 @%(u~ܝF)9@X^2
-(i^a2<SS%?߬f&uѡrBɳ:<;G2
-oN#Vf +ڰix3`j,;7(HiW (m[mk"񸱴5&k 4Hjph"Rؽ
->EW
-endstream
-endobj
-1112 0 obj
-<< /Type /Page /Contents 1113 0 R /Resources 1111 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 859 0 R /Annots 1115 0 R >>
+1006 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 447.336 123.404 459.292 135.359 ]/A << /S /GoTo /D (page.39) >> >>
endobj
-1115 0 obj
-[ 1003 0 R 1004 0 R 1010 0 R 1011 0 R 1012 0 R 1013 0 R 1014 0 R 1015 0 R 1016 0 R 1017 0 R 1018 0 R 1019 0 R 1020 0 R 1021 0 R 1022 0 R 1023 0 R 1024 0 R 1025 0 R 1026 0 R 1027 0 R 1028 0 R 1029 0 R 1030 0 R 1031 0 R 1032 0 R 1033 0 R 1034 0 R 1035 0 R 1036 0 R 1037 0 R 1038 0 R 1039 0 R 1040 0 R 1041 0 R 1042 0 R 1043 0 R 1044 0 R 1045 0 R 1046 0 R 1047 0 R 1048 0 R 1049 0 R 1050 0 R 1051 0 R 1052 0 R 1053 0 R 1054 0 R 1055 0 R 1056 0 R 1057 0 R 1058 0 R 1059 0 R 1060 0 R 1061 0 R 1062 0 R 1063 0 R 1064 0 R 1065 0 R 1066 0 R 1067 0 R 1068 0 R 1069 0 R 1070 0 R 1071 0 R 1072 0 R 1073 0 R 1074 0 R 1075 0 R 1076 0 R 1077 0 R 1078 0 R 1079 0 R 1080 0 R 1081 0 R 1082 0 R 1083 0 R 1084 0 R 1085 0 R 1086 0 R 1087 0 R 1088 0 R 1089 0 R 1090 0 R 1091 0 R 1092 0 R 1093 0 R 1094 0 R 1095 0 R 1096 0 R 1097 0 R 1098 0 R 1099 0 R 1100 0 R 1101 0 R 1102 0 R 1103 0 R 1104 0 R 1105 0 R 1106 0 R 1107 0 R 1108 0 R 1109 0 R ]
+1007 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 479.725 111.449 491.68 123.404 ]/A << /S /GoTo /D (page.48) >> >>
endobj
-1003 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 170.14 758.022 182.095 768.971 ]/A << /S /GoTo /D (page.55) >> >>
+1008 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 414.201 87.539 426.156 99.494 ]/A << /S /GoTo /D (page.40) >> >>
endobj
-1004 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 228.66 745.619 240.615 757.574 ]/A << /S /GoTo /D (page.35) >> >>
+1009 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 430.25 87.539 442.425 99.494 ]/A << /S /GoTo /D (page.58) >> >>
endobj
1010 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 158.135 734.102 170.09 745.17 ]/A << /S /GoTo /D (page.50) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 472.61 75.583 484.565 87.539 ]/A << /S /GoTo /D (page.42) >> >>
endobj
1011 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 164.81 722.147 176.765 733.106 ]/A << /S /GoTo /D (page.50) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 488.659 75.583 500.834 87.539 ]/A << /S /GoTo /D (page.58) >> >>
endobj
-1012 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 202.279 688.403 209.253 699.233 ]/A << /S /GoTo /D (page.9) >> >>
+1017 0 obj
+<< /D [ 1015 0 R /XYZ 78.37 808.885 null ] >>
endobj
-1013 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 212.242 688.403 224.197 699.233 ]/A << /S /GoTo /D (page.16) >> >>
+357 0 obj
+<< /D [ 1015 0 R /XYZ 79.37 706.717 null ] >>
endobj
1014 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 166.205 675.88 173.178 687.835 ]/A << /S /GoTo /D (page.4) >> >>
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 402 0 R /F67 389 0 R /F15 381 0 R /F56 384 0 R /F57 385 0 R /F55 383 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-1015 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 117.198 664.493 129.153 675.432 ]/A << /S /GoTo /D (page.26) >> >>
+1123 0 obj
+<< /Filter /FlateDecode /Length 3312 >>
+stream
+x\ɒ8+Ls9יu
+ ϸ_?e(tr5#,Y$3Ks=IC'.qaPVpyEZ|e+}λ[jehDΈ&&id߳qULxlRZE"p=h+TG!q˽tn&K&oգU-
+w|9?D,;jA.x3=$)nlBߢIᶫkߒVѣBPO-|@xѰb+7:ˉKj&pJVĨZ_ѫ>9.=}ElUZzK5]ɚ[%_+yX[9.h!j>=1TyW^x8Y2 ̡*0[PB' hM/т⒅)aX6:S5ryW ѕ#29s#"
+ix+piCgq95zĵIzRS^Zs!gZQp)rȑ3X{RGaѕ<?6N3ŀ]'i'
+PRuSd;޷`AV; jUZ5Z% SZVb LgH}@a}ncyBooRC zNv.{u\h3j^r"^%, ?cq1
+]Gjo
+*Eٸٴo_u<ͣ?ͿDZ(#=S ?N(YoLГRA%BNKՊSMǜE:ܤw|H,hqzkQJ„ [\@KA5K`t՚W[2AЩx_t;-!,.&EoٰεYmbAS׌s"] ^`͘ G)+ É 7, ;،<C'˖
+mv&
+b
+d+ݤOWP;ia6z=UNAǪK%t-{H.򳇝쉯IRmqlIΉtޣm?{g^\DDjKwTx Y)Xvs7R欀 9)4i| ݁ݦ|VUn,b)'"*^o@5i,ʣO!FDR
+8ӦcEfbr2σlt^XNa6pJDl?xfU:w~s_
+`^#/MrrߔyK/6_ݳ$-md`N YC6+:{R JGQݺ^~
+B@j}%2& :px;^j:EϭOXa"(%99IJS= ][alV[V!7h !_R IA m"YkZV^{#?vȽHV6 ;ˆ{r$q4ټIPѐ![S!0+"3Zh`t/&
++ᑚ*FU %DT;'bev
+տ|^ ^A*Q .
+ Ê่<x׶hB\O^6=ϸYs:#1{+ǩNAh .FԦoڕg
+gk rk?v mɇ4Hj&:8m}Ir)t
+endstream
endobj
-1016 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 120.825 652.528 132.78 663.477 ]/A << /S /GoTo /D (page.26) >> >>
+1122 0 obj
+<< /Type /Page /Contents 1123 0 R /Resources 1121 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1125 0 R /Annots 1126 0 R >>
endobj
-1017 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 136.875 652.528 149.049 663.477 ]/A << /S /GoTo /D (page.45) >> >>
+1126 0 obj
+[ 1012 0 R 1013 0 R 1019 0 R 1020 0 R 1021 0 R 1022 0 R 1023 0 R 1024 0 R 1025 0 R 1026 0 R 1027 0 R 1028 0 R 1029 0 R 1030 0 R 1031 0 R 1032 0 R 1033 0 R 1034 0 R 1035 0 R 1036 0 R 1037 0 R 1038 0 R 1039 0 R 1040 0 R 1041 0 R 1042 0 R 1043 0 R 1044 0 R 1045 0 R 1046 0 R 1047 0 R 1048 0 R 1049 0 R 1050 0 R 1051 0 R 1052 0 R 1053 0 R 1054 0 R 1055 0 R 1056 0 R 1057 0 R 1058 0 R 1059 0 R 1060 0 R 1061 0 R 1062 0 R 1063 0 R 1064 0 R 1065 0 R 1066 0 R 1067 0 R 1068 0 R 1069 0 R 1070 0 R 1071 0 R 1072 0 R 1073 0 R 1074 0 R 1075 0 R 1076 0 R 1077 0 R 1078 0 R 1079 0 R 1080 0 R 1081 0 R 1082 0 R 1083 0 R 1084 0 R 1085 0 R 1086 0 R 1087 0 R 1088 0 R 1089 0 R 1090 0 R 1091 0 R 1092 0 R 1093 0 R 1094 0 R 1095 0 R 1096 0 R 1097 0 R 1098 0 R 1099 0 R 1100 0 R 1101 0 R 1102 0 R 1103 0 R 1104 0 R 1105 0 R 1106 0 R 1107 0 R 1108 0 R 1109 0 R 1110 0 R 1111 0 R 1112 0 R 1113 0 R 1114 0 R 1115 0 R 1116 0 R 1117 0 R 1118 0 R 1119 0 R ]
endobj
-1018 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 171.305 640.015 183.261 651.97 ]/A << /S /GoTo /D (page.39) >> >>
+1012 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 272.085 757.574 284.041 769.529 ]/A << /S /GoTo /D (page.42) >> >>
+endobj
+1013 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 170.14 746.067 182.095 757.016 ]/A << /S /GoTo /D (page.56) >> >>
endobj
1019 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 143.131 628.06 155.086 640.015 ]/A << /S /GoTo /D (page.39) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 228.66 733.664 240.615 745.619 ]/A << /S /GoTo /D (page.36) >> >>
endobj
1020 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 194.309 616.104 206.264 628.06 ]/A << /S /GoTo /D (page.39) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 158.135 722.147 170.09 733.215 ]/A << /S /GoTo /D (page.51) >> >>
endobj
1021 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 167.799 604.149 179.754 616.104 ]/A << /S /GoTo /D (page.39) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 164.81 710.192 176.765 721.151 ]/A << /S /GoTo /D (page.51) >> >>
endobj
1022 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 225.681 570.486 237.637 581.674 ]/A << /S /GoTo /D (page.53) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 202.279 676.982 214.234 687.812 ]/A << /S /GoTo /D (page.10) >> >>
endobj
1023 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 230.912 558.53 242.867 569.718 ]/A << /S /GoTo /D (page.53) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 217.223 676.982 229.178 687.812 ]/A << /S /GoTo /D (page.17) >> >>
endobj
1024 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 131.535 525.016 143.49 535.845 ]/A << /S /GoTo /D (page.29) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 166.205 664.459 173.178 676.414 ]/A << /S /GoTo /D (page.4) >> >>
endobj
1025 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 147.226 513.061 159.181 523.89 ]/A << /S /GoTo /D (page.15) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 117.198 653.072 129.153 664.011 ]/A << /S /GoTo /D (page.27) >> >>
endobj
1026 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 177.721 488.583 189.896 500.538 ]/A << /S /GoTo /D (page.65) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 120.825 641.107 132.78 652.056 ]/A << /S /GoTo /D (page.27) >> >>
endobj
1027 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 115.843 477.195 127.799 488.025 ]/A << /S /GoTo /D (page.11) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 136.875 641.107 149.049 652.056 ]/A << /S /GoTo /D (page.46) >> >>
endobj
1028 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 163.983 453.285 170.957 464.154 ]/A << /S /GoTo /D (page.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 171.305 628.594 183.261 640.549 ]/A << /S /GoTo /D (page.40) >> >>
endobj
1029 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 184.904 441.33 196.86 452.199 ]/A << /S /GoTo /D (page.36) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 143.131 616.639 155.086 628.594 ]/A << /S /GoTo /D (page.40) >> >>
endobj
1030 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 221.238 429.365 233.193 440.244 ]/A << /S /GoTo /D (page.11) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 194.309 604.683 206.264 616.639 ]/A << /S /GoTo /D (page.40) >> >>
endobj
1031 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 118.224 407.168 130.18 416.015 ]/A << /S /GoTo /D (page.31) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 167.799 592.728 179.754 604.683 ]/A << /S /GoTo /D (page.40) >> >>
endobj
1032 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 121.074 393.22 133.029 404.339 ]/A << /S /GoTo /D (page.28) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 225.681 559.599 237.637 570.787 ]/A << /S /GoTo /D (page.54) >> >>
endobj
1033 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 163.983 369.599 170.957 380.468 ]/A << /S /GoTo /D (page.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 230.912 547.644 242.867 558.832 ]/A << /S /GoTo /D (page.54) >> >>
endobj
1034 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 184.904 357.644 196.86 368.513 ]/A << /S /GoTo /D (page.36) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 131.535 514.663 143.49 525.493 ]/A << /S /GoTo /D (page.30) >> >>
endobj
1035 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 221.238 345.679 233.193 356.558 ]/A << /S /GoTo /D (page.12) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 147.226 502.708 159.181 513.538 ]/A << /S /GoTo /D (page.16) >> >>
endobj
1036 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 181.487 333.723 193.442 344.563 ]/A << /S /GoTo /D (page.12) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 177.721 478.23 189.896 490.185 ]/A << /S /GoTo /D (page.67) >> >>
endobj
1037 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 197.537 333.723 209.711 344.563 ]/A << /S /GoTo /D (page.57) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 115.843 466.843 127.799 477.672 ]/A << /S /GoTo /D (page.11) >> >>
endobj
1038 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 121.074 299.86 134.523 310.69 ]/A << /S /GoTo /D (page.27) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 163.983 442.932 170.957 453.802 ]/A << /S /GoTo /D (page.4) >> >>
endobj
1039 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 138.618 299.86 150.573 310.69 ]/A << /S /GoTo /D (page.54) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 184.904 430.977 196.86 441.846 ]/A << /S /GoTo /D (page.37) >> >>
endobj
1040 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 154.538 287.895 166.493 298.774 ]/A << /S /GoTo /D (page.55) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 221.238 419.012 233.193 429.891 ]/A << /S /GoTo /D (page.12) >> >>
endobj
1041 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 240.207 275.382 252.162 287.337 ]/A << /S /GoTo /D (page.31) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 118.224 396.815 130.18 405.662 ]/A << /S /GoTo /D (page.32) >> >>
endobj
1042 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 191.3 263.427 203.256 275.382 ]/A << /S /GoTo /D (page.46) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 121.074 382.868 133.029 393.986 ]/A << /S /GoTo /D (page.29) >> >>
endobj
1043 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 187.295 229.554 199.251 241.509 ]/A << /S /GoTo /D (page.46) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 163.983 359.246 170.957 370.115 ]/A << /S /GoTo /D (page.4) >> >>
endobj
1044 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 212.501 195.681 224.456 207.636 ]/A << /S /GoTo /D (page.38) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 184.904 347.291 196.86 358.16 ]/A << /S /GoTo /D (page.37) >> >>
endobj
1045 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 233.61 183.726 245.565 195.681 ]/A << /S /GoTo /D (page.41) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 221.238 335.326 233.193 346.205 ]/A << /S /GoTo /D (page.12) >> >>
endobj
1046 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 251.861 171.771 263.816 183.726 ]/A << /S /GoTo /D (page.41) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 181.487 323.371 193.442 334.21 ]/A << /S /GoTo /D (page.12) >> >>
endobj
1047 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 189.716 160.304 201.672 171.213 ]/A << /S /GoTo /D (page.23) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 197.537 323.371 209.711 334.21 ]/A << /S /GoTo /D (page.58) >> >>
endobj
1048 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 204.66 160.304 216.616 171.213 ]/A << /S /GoTo /D (page.25) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 121.074 290.042 134.523 300.871 ]/A << /S /GoTo /D (page.28) >> >>
endobj
1049 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 115.505 148.418 127.46 159.258 ]/A << /S /GoTo /D (page.26) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 138.618 290.042 150.573 300.871 ]/A << /S /GoTo /D (page.55) >> >>
endobj
1050 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 131.554 148.418 143.729 159.258 ]/A << /S /GoTo /D (page.45) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 154.538 278.077 166.493 288.956 ]/A << /S /GoTo /D (page.56) >> >>
endobj
1051 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 147.823 148.418 159.998 159.258 ]/A << /S /GoTo /D (page.59) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 240.207 265.564 252.162 277.519 ]/A << /S /GoTo /D (page.32) >> >>
endobj
1052 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 119.131 136.463 131.086 147.302 ]/A << /S /GoTo /D (page.26) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 191.3 253.609 203.256 265.564 ]/A << /S /GoTo /D (page.47) >> >>
endobj
1053 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 135.181 136.463 147.355 147.302 ]/A << /S /GoTo /D (page.45) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 187.295 220.27 199.251 232.225 ]/A << /S /GoTo /D (page.47) >> >>
endobj
1054 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 115.843 124.518 127.799 135.347 ]/A << /S /GoTo /D (page.27) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 212.501 186.931 224.456 198.886 ]/A << /S /GoTo /D (page.39) >> >>
endobj
1055 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 211.116 88.642 223.071 99.522 ]/A << /S /GoTo /D (page.33) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 233.61 174.976 245.565 186.931 ]/A << /S /GoTo /D (page.42) >> >>
endobj
1056 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 132.371 76.568 144.327 87.636 ]/A << /S /GoTo /D (page.50) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 251.861 163.021 263.816 174.976 ]/A << /S /GoTo /D (page.42) >> >>
endobj
1057 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 408.97 745.619 420.925 757.574 ]/A << /S /GoTo /D (page.37) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 189.716 151.554 201.672 162.463 ]/A << /S /GoTo /D (page.24) >> >>
endobj
1058 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 441.15 733.664 453.105 745.619 ]/A << /S /GoTo /D (page.35) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 204.66 151.554 216.616 162.463 ]/A << /S /GoTo /D (page.26) >> >>
endobj
1059 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 415.386 722.197 427.341 733.205 ]/A << /S /GoTo /D (page.38) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 115.505 139.668 127.46 150.507 ]/A << /S /GoTo /D (page.27) >> >>
endobj
1060 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 436.515 709.753 448.47 721.708 ]/A << /S /GoTo /D (page.13) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 131.554 139.668 143.729 150.507 ]/A << /S /GoTo /D (page.46) >> >>
endobj
1061 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 359.247 698.236 371.202 709.195 ]/A << /S /GoTo /D (page.46) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 147.823 139.668 159.998 150.507 ]/A << /S /GoTo /D (page.60) >> >>
endobj
1062 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 403.81 686.281 415.765 697.24 ]/A << /S /GoTo /D (page.47) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 119.131 127.713 131.086 138.552 ]/A << /S /GoTo /D (page.27) >> >>
endobj
1063 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 461.434 661.933 473.389 673.888 ]/A << /S /GoTo /D (page.34) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 135.181 127.713 147.355 138.552 ]/A << /S /GoTo /D (page.46) >> >>
endobj
1064 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 482.016 649.977 493.972 661.933 ]/A << /S /GoTo /D (page.31) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 115.843 115.768 127.799 126.597 ]/A << /S /GoTo /D (page.28) >> >>
endobj
1065 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 498.066 649.977 510.241 661.933 ]/A << /S /GoTo /D (page.59) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 211.116 79.892 223.071 90.771 ]/A << /S /GoTo /D (page.34) >> >>
endobj
1066 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 422.111 638.022 429.085 649.977 ]/A << /S /GoTo /D (page.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 132.371 67.818 144.327 78.886 ]/A << /S /GoTo /D (page.51) >> >>
endobj
1067 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 398.51 604.149 410.465 616.104 ]/A << /S /GoTo /D (page.27) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 408.97 745.619 420.925 757.574 ]/A << /S /GoTo /D (page.38) >> >>
endobj
1068 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 474.542 592.194 486.498 604.149 ]/A << /S /GoTo /D (page.62) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 441.15 733.664 453.105 745.619 ]/A << /S /GoTo /D (page.36) >> >>
endobj
1069 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 463.344 580.239 475.3 592.194 ]/A << /S /GoTo /D (page.14) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 415.386 722.197 427.341 733.205 ]/A << /S /GoTo /D (page.39) >> >>
endobj
1070 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 387.232 534.979 394.206 545.848 ]/A << /S /GoTo /D (page.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 436.515 709.753 448.47 721.708 ]/A << /S /GoTo /D (page.14) >> >>
endobj
1071 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 408.153 523.024 420.109 533.893 ]/A << /S /GoTo /D (page.52) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 359.247 698.236 371.202 709.195 ]/A << /S /GoTo /D (page.47) >> >>
endobj
1072 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 444.487 511.058 456.442 521.938 ]/A << /S /GoTo /D (page.48) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 403.81 686.281 415.765 697.24 ]/A << /S /GoTo /D (page.48) >> >>
endobj
1073 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 427.909 498.545 439.864 510.5 ]/A << /S /GoTo /D (page.22) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 461.434 661.933 473.389 673.888 ]/A << /S /GoTo /D (page.35) >> >>
endobj
1074 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 365.244 486.809 372.218 497.987 ]/A << /S /GoTo /D (page.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 482.016 649.977 493.972 661.933 ]/A << /S /GoTo /D (page.32) >> >>
endobj
1075 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 417.548 474.854 429.503 486.032 ]/A << /S /GoTo /D (page.47) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 498.066 649.977 510.241 661.933 ]/A << /S /GoTo /D (page.60) >> >>
endobj
1076 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 370.475 463.248 377.449 474.077 ]/A << /S /GoTo /D (page.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 422.111 638.022 429.085 649.977 ]/A << /S /GoTo /D (page.5) >> >>
endobj
1077 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 396.627 451.293 408.582 462.122 ]/A << /S /GoTo /D (page.24) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 398.51 604.149 410.465 616.104 ]/A << /S /GoTo /D (page.28) >> >>
endobj
1078 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 412.676 451.293 424.851 462.122 ]/A << /S /GoTo /D (page.61) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 474.542 592.194 486.498 604.149 ]/A << /S /GoTo /D (page.63) >> >>
endobj
1079 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 401.857 439.337 413.812 450.167 ]/A << /S /GoTo /D (page.48) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 463.344 580.239 475.3 592.194 ]/A << /S /GoTo /D (page.14) >> >>
endobj
1080 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 401.857 427.093 408.831 438.212 ]/A << /S /GoTo /D (page.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 387.232 534.979 394.206 545.848 ]/A << /S /GoTo /D (page.5) >> >>
endobj
1081 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 375.705 415.427 382.679 426.256 ]/A << /S /GoTo /D (page.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 408.153 523.024 420.109 533.893 ]/A << /S /GoTo /D (page.53) >> >>
endobj
1082 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 380.935 403.472 387.909 414.301 ]/A << /S /GoTo /D (page.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 444.487 511.058 456.442 521.938 ]/A << /S /GoTo /D (page.49) >> >>
endobj
1083 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 380.935 391.517 392.891 402.346 ]/A << /S /GoTo /D (page.24) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 427.909 498.545 439.864 510.5 ]/A << /S /GoTo /D (page.23) >> >>
endobj
1084 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 363.939 379.562 375.894 390.391 ]/A << /S /GoTo /D (page.48) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 365.244 486.809 372.218 497.987 ]/A << /S /GoTo /D (page.2) >> >>
endobj
1085 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 339.571 367.606 351.526 378.436 ]/A << /S /GoTo /D (page.22) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 417.548 474.854 429.503 486.032 ]/A << /S /GoTo /D (page.48) >> >>
endobj
1086 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 398.719 355.083 410.674 367.038 ]/A << /S /GoTo /D (page.48) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 370.475 463.248 377.449 474.077 ]/A << /S /GoTo /D (page.2) >> >>
endobj
1087 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 413.663 355.083 425.618 367.038 ]/A << /S /GoTo /D (page.52) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 396.627 451.293 408.582 462.122 ]/A << /S /GoTo /D (page.25) >> >>
endobj
1088 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 466.714 343.128 478.669 355.083 ]/A << /S /GoTo /D (page.38) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 412.676 451.293 424.851 462.122 ]/A << /S /GoTo /D (page.62) >> >>
endobj
1089 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 426.654 331.741 438.609 342.57 ]/A << /S /GoTo /D (page.39) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 401.857 439.337 413.812 450.167 ]/A << /S /GoTo /D (page.49) >> >>
endobj
1090 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 441.598 331.741 453.553 342.57 ]/A << /S /GoTo /D (page.43) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 401.857 427.093 408.831 438.212 ]/A << /S /GoTo /D (page.1) >> >>
endobj
1091 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 457.648 331.741 469.822 342.57 ]/A << /S /GoTo /D (page.57) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 375.705 415.427 382.679 426.256 ]/A << /S /GoTo /D (page.2) >> >>
endobj
1092 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 354.783 319.437 366.739 330.615 ]/A << /S /GoTo /D (page.12) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 380.935 403.472 387.909 414.301 ]/A << /S /GoTo /D (page.2) >> >>
endobj
1093 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 383.546 295.307 395.501 307.263 ]/A << /S /GoTo /D (page.40) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 380.935 391.517 392.891 402.346 ]/A << /S /GoTo /D (page.25) >> >>
endobj
1094 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 399.595 295.307 411.77 307.263 ]/A << /S /GoTo /D (page.57) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 363.939 379.562 375.894 390.391 ]/A << /S /GoTo /D (page.49) >> >>
endobj
1095 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 356.766 283.801 368.721 294.859 ]/A << /S /GoTo /D (page.28) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 339.571 367.606 351.526 378.436 ]/A << /S /GoTo /D (page.23) >> >>
endobj
1096 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 407.087 249.699 419.043 260.877 ]/A << /S /GoTo /D (page.47) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 398.719 355.083 410.674 367.038 ]/A << /S /GoTo /D (page.49) >> >>
endobj
1097 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 455.854 225.569 462.828 237.524 ]/A << /S /GoTo /D (page.4) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 413.663 355.083 425.618 367.038 ]/A << /S /GoTo /D (page.53) >> >>
endobj
1098 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 420.089 201.659 432.044 213.614 ]/A << /S /GoTo /D (page.17) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 466.714 343.128 478.669 355.083 ]/A << /S /GoTo /D (page.39) >> >>
endobj
1099 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 434.983 177.748 446.938 189.703 ]/A << /S /GoTo /D (page.37) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 426.654 331.741 438.609 342.57 ]/A << /S /GoTo /D (page.40) >> >>
endobj
1100 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 427.22 143.875 439.175 155.831 ]/A << /S /GoTo /D (page.41) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 441.598 331.741 453.553 342.57 ]/A << /S /GoTo /D (page.44) >> >>
endobj
1101 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 376.98 132.359 388.935 143.317 ]/A << /S /GoTo /D (page.54) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 457.648 331.741 469.822 342.57 ]/A << /S /GoTo /D (page.58) >> >>
endobj
1102 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 391.396 120.244 403.351 131.362 ]/A << /S /GoTo /D (page.46) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 354.783 319.437 366.739 330.615 ]/A << /S /GoTo /D (page.13) >> >>
endobj
1103 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 368.323 108.448 380.278 119.517 ]/A << /S /GoTo /D (page.49) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 383.546 295.307 395.501 307.263 ]/A << /S /GoTo /D (page.41) >> >>
endobj
1104 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 384.373 108.448 396.547 119.517 ]/A << /S /GoTo /D (page.67) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 399.595 295.307 411.77 307.263 ]/A << /S /GoTo /D (page.58) >> >>
endobj
1105 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 370.475 96.274 377.449 107.452 ]/A << /S /GoTo /D (page.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 356.766 283.801 368.721 294.859 ]/A << /S /GoTo /D (page.29) >> >>
endobj
1106 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 375.705 84.378 382.679 95.497 ]/A << /S /GoTo /D (page.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 407.087 249.699 419.043 260.877 ]/A << /S /GoTo /D (page.48) >> >>
endobj
1107 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 425.588 72.154 437.543 84.099 ]/A << /S /GoTo /D (page.27) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 455.854 225.569 462.828 237.524 ]/A << /S /GoTo /D (page.4) >> >>
endobj
1108 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 440.532 72.154 452.487 84.099 ]/A << /S /GoTo /D (page.32) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 420.089 201.659 432.044 213.614 ]/A << /S /GoTo /D (page.18) >> >>
endobj
1109 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 456.582 72.154 468.756 84.099 ]/A << /S /GoTo /D (page.58) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 434.983 177.748 446.938 189.703 ]/A << /S /GoTo /D (page.38) >> >>
endobj
-1114 0 obj
-<< /D [ 1112 0 R /XYZ 78.37 808.885 null ] >>
+1110 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 427.22 143.875 439.175 155.831 ]/A << /S /GoTo /D (page.42) >> >>
endobj
1111 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 377 0 R /F56 380 0 R /F67 385 0 R /F57 381 0 R /F55 379 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 376.98 132.359 388.935 143.317 ]/A << /S /GoTo /D (page.55) >> >>
endobj
-1205 0 obj
-<< /Filter /FlateDecode /Length 3155 >>
-stream
-x\ˎ$W\#@Z,o{2! lkŨ;+E<N̟_@w "F7EM87JHT_R?Qv ¸ J))CJ'c"EKOK?QY/]M$ɟ6#! *}֟~謹͍ʮҰhF#h$}S%>K<B)|@έX2Q/
-h{M"'<Gk/ 5 M˧qEHQH: 7W]UZ7*qf^e޼E$jX]jFbDY.`ñ33%Lzߩgr@S%0\*iZxa089:c@].oI`-92~uB`ɶbok<7,mve.rCz3Z8z(&3~d.Sf] $,Y|`qz/6&VR;ϗ%O5.ΗʡpUzƌ2Tds`]T O2*q$fZL2Zf+<"I=kd'AG&s.G( N4ȁa> ,ˇM1z7 Sn
-|c-@JkA' G)9\9nop8QkCt&j7Gl :dƕy}X
-*UĆ.He8
-QPG SouW?g7ύw\8w`Q8N]P$)?N
-U'A£USj6!VbFĬZE !m :[ŁVî(BR&HZgF៬O*5b^e+0gk|.7T|2 u
-'7]3v}G2⤌P
-[N U.MӔ>T
-vOT-")rZĵwx4/P6G_??3p4?Z7S>nrg-ጭ޺s`G U;<G\2a .IŖ -tz\?v0^mS\mSIb?F<$( {3邹xG@qCn8ZeXWyoF5&
-endstream
+1112 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 391.396 120.244 403.351 131.362 ]/A << /S /GoTo /D (page.47) >> >>
endobj
-1204 0 obj
-<< /Type /Page /Contents 1205 0 R /Resources 1203 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1207 0 R /Annots 1208 0 R >>
+1113 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 368.323 108.448 380.278 119.517 ]/A << /S /GoTo /D (page.50) >> >>
endobj
-1208 0 obj
-[ 1110 0 R 1116 0 R 1117 0 R 1118 0 R 1119 0 R 1120 0 R 1121 0 R 1122 0 R 1123 0 R 1124 0 R 1125 0 R 1126 0 R 1127 0 R 1128 0 R 1129 0 R 1130 0 R 1131 0 R 1132 0 R 1133 0 R 1134 0 R 1135 0 R 1136 0 R 1137 0 R 1138 0 R 1139 0 R 1140 0 R 1141 0 R 1142 0 R 1143 0 R 1144 0 R 1145 0 R 1146 0 R 1147 0 R 1148 0 R 1149 0 R 1150 0 R 1151 0 R 1152 0 R 1153 0 R 1154 0 R 1155 0 R 1156 0 R 1157 0 R 1158 0 R 1159 0 R 1160 0 R 1161 0 R 1162 0 R 1163 0 R 1164 0 R 1165 0 R 1166 0 R 1167 0 R 1168 0 R 1169 0 R 1170 0 R 1171 0 R 1172 0 R 1173 0 R 1174 0 R 1175 0 R 1176 0 R 1177 0 R 1178 0 R 1179 0 R 1180 0 R 1181 0 R 1182 0 R 1183 0 R 1184 0 R 1185 0 R 1186 0 R 1187 0 R 1188 0 R 1189 0 R 1190 0 R 1191 0 R 1192 0 R 1193 0 R 1194 0 R 1195 0 R 1196 0 R 1197 0 R 1198 0 R 1199 0 R 1200 0 R 1201 0 R 1202 0 R ]
+1114 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 384.373 108.448 396.547 119.517 ]/A << /S /GoTo /D (page.69) >> >>
endobj
-1110 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 246.633 745.619 258.588 757.574 ]/A << /S /GoTo /D (page.31) >> >>
+1115 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 370.475 96.274 377.449 107.452 ]/A << /S /GoTo /D (page.2) >> >>
endobj
1116 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 118.224 723.98 130.18 732.926 ]/A << /S /GoTo /D (page.17) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 375.705 84.378 382.679 95.497 ]/A << /S /GoTo /D (page.2) >> >>
endobj
1117 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 131.584 710.321 143.54 721.151 ]/A << /S /GoTo /D (page.30) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 425.588 72.154 437.543 84.099 ]/A << /S /GoTo /D (page.28) >> >>
endobj
1118 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 142.354 698.366 154.309 708.916 ]/A << /S /GoTo /D (page.30) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 440.532 72.154 452.487 84.099 ]/A << /S /GoTo /D (page.33) >> >>
endobj
1119 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 272.018 685.843 283.973 697.798 ]/A << /S /GoTo /D (page.19) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 456.582 72.154 468.756 84.099 ]/A << /S /GoTo /D (page.59) >> >>
endobj
-1120 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 241.682 673.888 248.655 685.843 ]/A << /S /GoTo /D (page.5) >> >>
+1124 0 obj
+<< /D [ 1122 0 R /XYZ 78.37 808.885 null ] >>
endobj
1121 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 185.721 649.977 197.677 661.933 ]/A << /S /GoTo /D (page.18) >> >>
-endobj
-1122 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 280.187 638.022 292.142 649.977 ]/A << /S /GoTo /D (page.18) >> >>
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F56 384 0 R /F67 389 0 R /F57 385 0 R /F55 383 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-1123 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 211.116 602.715 223.071 613.594 ]/A << /S /GoTo /D (page.33) >> >>
+1216 0 obj
+<< /Filter /FlateDecode /Length 3158 >>
+stream
+x\͒#S d@#W' U Tm}P?ZMMv#U$K ̛A͓Qۯ/Z1n
+Ǩ iOMkw
+ͼ-݅d|s(V "ɠ=)p5*q -Tp]\pH+7²|Ǧa.]CAuSX;Y)z-@sz+ErMy)&H*[y}ָ`
+*nU.HexҤ
+ʃ̝H
+F^|Xv/=ڔC ޛv լc| G`R5yr_Inna^
+[Dk=5*Mr1qnQڃE)6l-5U%'
+?&#Rm1e[W hՔzMeՆؾQ916InH$v*_8Vi Uk4нE=Dj҄T<)h XP vo3i$nU[W,yMWI hxžY79(G7XxPl}?rf@ZsmۖC{wG7m$jpPqM=2=1\0NO *rh#ѐ(#285ͶUzu@NYUx<&^U'͓ko$uuO¥d]مDF"Fr`HjJ9IywH*fli.OV$!WR=$;81q颓\S>+h
+^vg%NIlmyɡebM|jwkS7NTo*fo dɀ2ZN \l囶=9}*
+܎Mf͟ڗ%
+endstream
endobj
-1124 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 139.046 590.64 151.002 601.599 ]/A << /S /GoTo /D (page.50) >> >>
+1215 0 obj
+<< /Type /Page /Contents 1216 0 R /Resources 1214 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1125 0 R /Annots 1218 0 R >>
endobj
-1125 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 185.721 566.291 197.677 578.246 ]/A << /S /GoTo /D (page.37) >> >>
+1218 0 obj
+[ 1120 0 R 1127 0 R 1128 0 R 1129 0 R 1130 0 R 1131 0 R 1132 0 R 1133 0 R 1134 0 R 1135 0 R 1136 0 R 1137 0 R 1138 0 R 1139 0 R 1140 0 R 1141 0 R 1142 0 R 1143 0 R 1144 0 R 1145 0 R 1146 0 R 1147 0 R 1148 0 R 1149 0 R 1150 0 R 1151 0 R 1152 0 R 1153 0 R 1154 0 R 1155 0 R 1156 0 R 1157 0 R 1158 0 R 1159 0 R 1160 0 R 1161 0 R 1162 0 R 1163 0 R 1164 0 R 1165 0 R 1166 0 R 1167 0 R 1168 0 R 1169 0 R 1170 0 R 1171 0 R 1172 0 R 1173 0 R 1174 0 R 1175 0 R 1176 0 R 1177 0 R 1178 0 R 1179 0 R 1180 0 R 1181 0 R 1182 0 R 1183 0 R 1184 0 R 1185 0 R 1186 0 R 1187 0 R 1188 0 R 1189 0 R 1190 0 R 1191 0 R 1192 0 R 1193 0 R 1194 0 R 1195 0 R 1196 0 R 1197 0 R 1198 0 R 1199 0 R 1200 0 R 1201 0 R 1202 0 R 1203 0 R 1204 0 R 1205 0 R 1206 0 R 1207 0 R 1208 0 R 1209 0 R 1210 0 R 1211 0 R 1212 0 R 1213 0 R ]
endobj
-1126 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 224.576 554.336 236.531 566.291 ]/A << /S /GoTo /D (page.35) >> >>
+1120 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 246.633 745.619 258.588 757.574 ]/A << /S /GoTo /D (page.32) >> >>
endobj
1127 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 121.074 542.949 133.248 553.778 ]/A << /S /GoTo /D (page.21) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 118.224 723.98 130.18 732.827 ]/A << /S /GoTo /D (page.18) >> >>
endobj
1128 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 137.343 542.949 149.517 553.778 ]/A << /S /GoTo /D (page.23) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 131.584 710.321 143.54 721.151 ]/A << /S /GoTo /D (page.31) >> >>
endobj
1129 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 153.612 542.949 165.567 553.778 ]/A << /S /GoTo /D (page.45) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 142.354 698.366 154.309 708.916 ]/A << /S /GoTo /D (page.31) >> >>
endobj
1130 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 163.983 519.038 170.957 529.908 ]/A << /S /GoTo /D (page.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 272.018 685.843 283.973 697.798 ]/A << /S /GoTo /D (page.20) >> >>
endobj
1131 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 200.596 507.083 212.551 517.953 ]/A << /S /GoTo /D (page.43) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 241.682 673.888 248.655 685.843 ]/A << /S /GoTo /D (page.5) >> >>
endobj
1132 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 226.12 483.173 238.075 494.002 ]/A << /S /GoTo /D (page.17) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 185.721 649.977 197.677 661.933 ]/A << /S /GoTo /D (page.19) >> >>
endobj
1133 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 242.17 483.173 254.344 494.002 ]/A << /S /GoTo /D (page.57) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 280.187 638.022 292.142 649.977 ]/A << /S /GoTo /D (page.19) >> >>
endobj
1134 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 199.579 471.218 211.535 482.047 ]/A << /S /GoTo /D (page.21) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 211.116 602.715 223.071 613.594 ]/A << /S /GoTo /D (page.34) >> >>
endobj
1135 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 215.629 471.218 227.804 482.047 ]/A << /S /GoTo /D (page.65) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 139.046 590.64 151.002 601.599 ]/A << /S /GoTo /D (page.51) >> >>
endobj
1136 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 207.4 458.695 219.355 470.65 ]/A << /S /GoTo /D (page.23) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 185.721 566.291 197.677 578.246 ]/A << /S /GoTo /D (page.38) >> >>
endobj
1137 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 269.567 446.74 281.522 458.695 ]/A << /S /GoTo /D (page.17) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 224.576 554.336 236.531 566.291 ]/A << /S /GoTo /D (page.36) >> >>
endobj
1138 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 118.224 425.101 130.18 434.047 ]/A << /S /GoTo /D (page.17) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 121.074 542.939 133.248 553.778 ]/A << /S /GoTo /D (page.22) >> >>
endobj
1139 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 131.535 411.093 143.49 422.271 ]/A << /S /GoTo /D (page.22) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 137.343 542.939 149.517 553.778 ]/A << /S /GoTo /D (page.24) >> >>
endobj
1140 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 232.944 398.919 244.899 410.874 ]/A << /S /GoTo /D (page.10) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 153.612 542.939 165.567 553.778 ]/A << /S /GoTo /D (page.46) >> >>
endobj
1141 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 248.994 398.919 261.168 410.874 ]/A << /S /GoTo /D (page.57) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 163.983 519.038 170.957 529.908 ]/A << /S /GoTo /D (page.5) >> >>
endobj
1142 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 204.611 365.046 216.785 377.001 ]/A << /S /GoTo /D (page.21) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 200.596 507.083 212.551 517.953 ]/A << /S /GoTo /D (page.44) >> >>
endobj
1143 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 220.88 365.046 232.835 377.001 ]/A << /S /GoTo /D (page.44) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 226.12 483.173 238.075 494.002 ]/A << /S /GoTo /D (page.18) >> >>
endobj
1144 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 228.26 353.091 240.215 365.046 ]/A << /S /GoTo /D (page.14) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 242.17 483.173 254.344 494.002 ]/A << /S /GoTo /D (page.58) >> >>
endobj
1145 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 142.115 341.694 154.07 352.533 ]/A << /S /GoTo /D (page.38) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 199.579 471.218 211.535 482.047 ]/A << /S /GoTo /D (page.22) >> >>
endobj
1146 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 252.162 329.18 264.117 341.136 ]/A << /S /GoTo /D (page.31) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 215.629 471.218 227.804 482.047 ]/A << /S /GoTo /D (page.66) >> >>
endobj
1147 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 270.982 317.225 282.937 329.18 ]/A << /S /GoTo /D (page.31) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 207.4 458.695 219.355 470.65 ]/A << /S /GoTo /D (page.24) >> >>
endobj
1148 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 276.043 305.27 287.998 317.225 ]/A << /S /GoTo /D (page.31) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 269.567 446.74 281.522 458.695 ]/A << /S /GoTo /D (page.18) >> >>
endobj
1149 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 211.734 281.36 223.689 293.315 ]/A << /S /GoTo /D (page.44) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 118.224 425.101 130.18 433.948 ]/A << /S /GoTo /D (page.18) >> >>
endobj
1150 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 163.335 269.405 175.29 281.36 ]/A << /S /GoTo /D (page.44) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 131.535 411.093 143.49 422.271 ]/A << /S /GoTo /D (page.23) >> >>
endobj
1151 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 193.811 257.449 205.766 269.405 ]/A << /S /GoTo /D (page.35) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 232.944 398.919 244.899 410.874 ]/A << /S /GoTo /D (page.11) >> >>
endobj
1152 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 235.126 245.494 247.081 257.449 ]/A << /S /GoTo /D (page.45) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 248.994 398.919 261.168 410.874 ]/A << /S /GoTo /D (page.58) >> >>
endobj
1153 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 281.698 233.539 293.653 245.494 ]/A << /S /GoTo /D (page.45) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 204.611 365.046 216.785 377.001 ]/A << /S /GoTo /D (page.22) >> >>
endobj
1154 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 145.99 222.152 157.946 232.981 ]/A << /S /GoTo /D (page.10) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 220.88 365.046 232.835 377.001 ]/A << /S /GoTo /D (page.45) >> >>
endobj
1155 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 204.539 209.629 216.494 221.584 ]/A << /S /GoTo /D (page.41) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 228.26 353.091 240.215 365.046 ]/A << /S /GoTo /D (page.14) >> >>
endobj
1156 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 220.589 209.629 232.763 221.584 ]/A << /S /GoTo /D (page.57) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 142.115 341.694 154.07 352.533 ]/A << /S /GoTo /D (page.39) >> >>
endobj
1157 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 118.224 187.99 130.18 196.946 ]/A << /S /GoTo /D (page.34) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 252.162 329.18 264.117 341.136 ]/A << /S /GoTo /D (page.32) >> >>
endobj
1158 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 211.734 161.808 225.183 173.763 ]/A << /S /GoTo /D (page.34) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 270.982 317.225 282.937 329.18 ]/A << /S /GoTo /D (page.32) >> >>
endobj
1159 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 229.278 161.808 241.233 173.763 ]/A << /S /GoTo /D (page.52) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 276.043 305.27 287.998 317.225 ]/A << /S /GoTo /D (page.32) >> >>
endobj
1160 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 245.328 161.808 257.502 173.763 ]/A << /S /GoTo /D (page.63) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 211.734 281.36 223.689 293.315 ]/A << /S /GoTo /D (page.45) >> >>
endobj
1161 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 261.597 161.808 273.771 173.763 ]/A << /S /GoTo /D (page.66) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 163.335 269.405 175.29 281.36 ]/A << /S /GoTo /D (page.45) >> >>
endobj
1162 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 211.734 137.898 225.183 149.853 ]/A << /S /GoTo /D (page.38) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 193.811 257.449 205.766 269.405 ]/A << /S /GoTo /D (page.36) >> >>
endobj
1163 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 147.226 104.593 159.181 115.422 ]/A << /S /GoTo /D (page.39) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 235.126 245.494 247.081 257.449 ]/A << /S /GoTo /D (page.46) >> >>
endobj
1164 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 163.276 104.593 175.45 115.422 ]/A << /S /GoTo /D (page.57) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 281.698 233.539 293.653 245.494 ]/A << /S /GoTo /D (page.46) >> >>
endobj
1165 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 242.15 92.07 254.105 104.025 ]/A << /S /GoTo /D (page.40) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 145.99 222.152 157.946 232.981 ]/A << /S /GoTo /D (page.11) >> >>
endobj
1166 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 152.456 80.682 164.411 91.512 ]/A << /S /GoTo /D (page.40) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 204.539 209.629 216.494 221.584 ]/A << /S /GoTo /D (page.42) >> >>
endobj
1167 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 169.851 68.159 181.806 80.114 ]/A << /S /GoTo /D (page.24) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 220.589 209.629 232.763 221.584 ]/A << /S /GoTo /D (page.58) >> >>
endobj
1168 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 397.732 757.574 409.907 769.529 ]/A << /S /GoTo /D (page.57) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 118.224 187.99 130.18 196.837 ]/A << /S /GoTo /D (page.35) >> >>
endobj
1169 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 417.528 745.619 429.483 757.574 ]/A << /S /GoTo /D (page.43) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 211.734 161.808 225.183 173.763 ]/A << /S /GoTo /D (page.35) >> >>
endobj
1170 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 452.109 733.664 464.064 745.619 ]/A << /S /GoTo /D (page.48) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 229.278 161.808 241.233 173.763 ]/A << /S /GoTo /D (page.53) >> >>
endobj
1171 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 387.232 710.321 394.206 721.19 ]/A << /S /GoTo /D (page.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 245.328 161.808 257.502 173.763 ]/A << /S /GoTo /D (page.64) >> >>
endobj
1172 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 398.3 710.321 410.475 721.19 ]/A << /S /GoTo /D (page.56) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 261.597 161.808 273.771 173.763 ]/A << /S /GoTo /D (page.68) >> >>
endobj
1173 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 452.714 698.366 459.688 709.235 ]/A << /S /GoTo /D (page.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 211.734 137.898 225.183 149.853 ]/A << /S /GoTo /D (page.39) >> >>
endobj
1174 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 463.783 698.366 475.957 709.235 ]/A << /S /GoTo /D (page.61) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 147.226 104.593 159.181 115.422 ]/A << /S /GoTo /D (page.40) >> >>
endobj
1175 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 421.272 686.411 433.227 697.28 ]/A << /S /GoTo /D (page.14) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 163.276 104.593 175.45 115.422 ]/A << /S /GoTo /D (page.58) >> >>
endobj
1176 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 461.96 673.888 473.915 685.843 ]/A << /S /GoTo /D (page.14) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 242.15 92.07 254.105 104.025 ]/A << /S /GoTo /D (page.41) >> >>
endobj
1177 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 428.587 661.933 435.561 673.888 ]/A << /S /GoTo /D (page.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 152.456 80.682 164.411 91.512 ]/A << /S /GoTo /D (page.41) >> >>
endobj
1178 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 439.655 661.933 451.83 673.888 ]/A << /S /GoTo /D (page.56) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 169.851 68.159 181.806 80.114 ]/A << /S /GoTo /D (page.25) >> >>
endobj
1179 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 434.983 616.104 446.938 628.06 ]/A << /S /GoTo /D (page.37) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 397.732 757.574 409.907 769.529 ]/A << /S /GoTo /D (page.58) >> >>
endobj
1180 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 440.253 582.232 452.208 594.187 ]/A << /S /GoTo /D (page.25) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 417.528 745.619 429.483 757.574 ]/A << /S /GoTo /D (page.44) >> >>
endobj
1181 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 456.303 582.232 468.258 594.187 ]/A << /S /GoTo /D (page.49) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 452.109 733.664 464.064 745.619 ]/A << /S /GoTo /D (page.49) >> >>
endobj
1182 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 418.495 570.276 425.468 582.232 ]/A << /S /GoTo /D (page.8) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 387.232 710.321 394.206 721.19 ]/A << /S /GoTo /D (page.5) >> >>
endobj
1183 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 395.112 558.321 407.067 570.276 ]/A << /S /GoTo /D (page.25) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 398.3 710.321 410.475 721.19 ]/A << /S /GoTo /D (page.57) >> >>
endobj
1184 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 411.162 558.321 423.117 570.276 ]/A << /S /GoTo /D (page.49) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 452.714 698.366 459.688 709.235 ]/A << /S /GoTo /D (page.5) >> >>
endobj
1185 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 391.396 546.934 403.351 557.763 ]/A << /S /GoTo /D (page.46) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 463.783 698.366 475.957 709.235 ]/A << /S /GoTo /D (page.62) >> >>
endobj
1186 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 391.396 534.979 403.351 545.808 ]/A << /S /GoTo /D (page.46) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 421.272 686.411 433.227 697.28 ]/A << /S /GoTo /D (page.15) >> >>
endobj
1187 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 339.092 523.024 351.048 533.853 ]/A << /S /GoTo /D (page.27) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 461.96 673.888 473.915 685.843 ]/A << /S /GoTo /D (page.15) >> >>
endobj
1188 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 354.783 511.068 366.739 521.898 ]/A << /S /GoTo /D (page.29) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 428.587 661.933 435.561 673.888 ]/A << /S /GoTo /D (page.5) >> >>
endobj
1189 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 387.232 487.158 394.206 498.027 ]/A << /S /GoTo /D (page.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 439.655 661.933 451.83 673.888 ]/A << /S /GoTo /D (page.57) >> >>
endobj
1190 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 408.153 475.203 420.109 486.072 ]/A << /S /GoTo /D (page.36) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 434.983 616.104 446.938 628.06 ]/A << /S /GoTo /D (page.38) >> >>
endobj
1191 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 444.487 463.238 456.442 474.117 ]/A << /S /GoTo /D (page.11) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 440.253 582.232 452.208 594.187 ]/A << /S /GoTo /D (page.26) >> >>
endobj
1192 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 394.754 451.293 406.709 462.122 ]/A << /S /GoTo /D (page.64) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 456.303 582.232 468.258 594.187 ]/A << /S /GoTo /D (page.50) >> >>
endobj
1193 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 370.475 438.989 377.449 450.167 ]/A << /S /GoTo /D (page.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 418.495 570.276 425.468 582.232 ]/A << /S /GoTo /D (page.8) >> >>
endobj
1194 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 370.475 427.033 377.449 438.212 ]/A << /S /GoTo /D (page.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 395.112 558.321 407.067 570.276 ]/A << /S /GoTo /D (page.26) >> >>
endobj
1195 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 375.705 415.427 382.679 426.256 ]/A << /S /GoTo /D (page.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 411.162 558.321 423.117 570.276 ]/A << /S /GoTo /D (page.50) >> >>
endobj
1196 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 375.705 403.472 382.679 414.301 ]/A << /S /GoTo /D (page.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 391.396 546.934 403.351 557.763 ]/A << /S /GoTo /D (page.47) >> >>
endobj
1197 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 423.845 357.644 435.8 368.513 ]/A << /S /GoTo /D (page.24) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 391.396 534.979 403.351 545.808 ]/A << /S /GoTo /D (page.47) >> >>
endobj
1198 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 413.661 345.689 425.616 356.558 ]/A << /S /GoTo /D (page.10) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 339.092 523.024 351.048 533.853 ]/A << /S /GoTo /D (page.28) >> >>
endobj
1199 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 388.059 311.248 400.014 323.203 ]/A << /S /GoTo /D (page.24) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 354.783 511.068 366.739 521.898 ]/A << /S /GoTo /D (page.30) >> >>
endobj
1200 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 406.798 299.293 418.754 311.248 ]/A << /S /GoTo /D (page.27) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 387.232 487.158 394.206 498.027 ]/A << /S /GoTo /D (page.4) >> >>
endobj
1201 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 423.715 287.337 435.67 299.293 ]/A << /S /GoTo /D (page.35) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 408.153 475.203 420.109 486.072 ]/A << /S /GoTo /D (page.37) >> >>
endobj
1202 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 496.183 253.464 508.138 265.42 ]/A << /S /GoTo /D (page.37) >> >>
-endobj
-1206 0 obj
-<< /D [ 1204 0 R /XYZ 78.37 808.885 null ] >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 444.487 463.238 456.442 474.117 ]/A << /S /GoTo /D (page.12) >> >>
endobj
1203 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F67 385 0 R /F15 377 0 R /F56 380 0 R /F55 379 0 R /F57 381 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 394.754 451.293 406.709 462.122 ]/A << /S /GoTo /D (page.65) >> >>
endobj
-1249 0 obj
-<< /Filter /FlateDecode /Length 2418 >>
-stream
-x\n#;W( ݾ]g7j;zJUtr;tතu)b_s?~ǝE Hpy7qіI}0?9ˋnϺ?ι'+&f&n{|Ewz-Eep &KA6L f>50uFlInqG[
-!eR辡nDV, B#~jY؟̵}s8_MaT^E }x%4U\~nJw=>6nvw+P}$^QAcQ-#,$AэTz-Gc-orIp C6ם@Ʈfq/+'P?U4"ǀP,ė~dbNHBܹK* KPН9(B2mlDBJf {7-M=_Y{aZC \^ґl, T]+9^uڍc.PUj`G|7U/[Num/"竃Bb19XmTI!TB4{UM-VB9fs=Tr"B۰GeBg:7\'
-Գn3$36D@V(v޳ir:A–q ab/Jt6ҋ^ar}'TK\1-Hȉ z*6(є9sR3:JTߛ|n_Dꋐ79+mGk{=
-Qvؓe
-{SW~ ӚSmJ
-M;jS6af2iD5)ڼm/77WX+͌]xP3 .<lTz
-%|N]
-f\2@]t\Aȼ ~8
-B{88QPv+kJ7]!E%[E>v*ІME{A-394i}%`;wz)--@xIџg>xsx1MSmWj;/6 $ODcn+^|wp`38.Ei
-}zJEagԑL!`֡Ze
-{kdmsmXs.CBfsTez3eHچ.}*kJ"TdU+|kAhΔu\o}%aN+;a=gefޒ
-K~hg.|dOLZNpC<p
-<Žk"厛Fr//jFrzk?9+(\<? KQnh$Lu7<t7Mn> KmO0R+S ]3C
-endstream
+1204 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 370.475 438.989 377.449 450.167 ]/A << /S /GoTo /D (page.2) >> >>
endobj
-1248 0 obj
-<< /Type /Page /Contents 1249 0 R /Resources 1247 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1207 0 R /Annots 1251 0 R >>
+1205 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 370.475 427.033 377.449 438.212 ]/A << /S /GoTo /D (page.2) >> >>
endobj
-1251 0 obj
-[ 1209 0 R 1210 0 R 1211 0 R 1212 0 R 1213 0 R 1214 0 R 1215 0 R 1216 0 R 1217 0 R 1218 0 R 1219 0 R 1220 0 R 1221 0 R 1222 0 R 1223 0 R 1224 0 R 1225 0 R 1226 0 R 1227 0 R 1228 0 R 1229 0 R 1230 0 R 1231 0 R 1232 0 R 1233 0 R 1234 0 R 1235 0 R 1236 0 R 1237 0 R 1238 0 R 1239 0 R 1240 0 R 1241 0 R 1242 0 R 1243 0 R 1244 0 R 1245 0 R ]
+1206 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 375.705 415.427 382.679 426.256 ]/A << /S /GoTo /D (page.2) >> >>
+endobj
+1207 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 375.705 403.472 382.679 414.301 ]/A << /S /GoTo /D (page.2) >> >>
+endobj
+1208 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 423.845 357.644 435.8 368.513 ]/A << /S /GoTo /D (page.25) >> >>
endobj
1209 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 594.319 289.293 603.285 ]/A << /S /GoTo /D (section.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 413.661 345.689 425.616 356.558 ]/A << /S /GoTo /D (page.11) >> >>
endobj
1210 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 570.458 265.951 581.467 ]/A << /S /GoTo /D (section.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 388.059 311.248 400.014 323.203 ]/A << /S /GoTo /D (page.25) >> >>
endobj
1211 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 550.433 168.606 559.549 ]/A << /S /GoTo /D (section.3) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 406.798 299.293 418.754 311.248 ]/A << /S /GoTo /D (page.28) >> >>
endobj
1212 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 528.565 140.999 537.532 ]/A << /S /GoTo /D (section.4) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 423.715 287.337 435.67 299.293 ]/A << /S /GoTo /D (page.36) >> >>
endobj
1213 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 514.617 175.639 525.686 ]/A << /S /GoTo /D (subsection.4.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 496.183 253.464 508.138 265.42 ]/A << /S /GoTo /D (page.38) >> >>
endobj
-1214 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 504.495 228.102 513.621 ]/A << /S /GoTo /D (subsection.4.2) >> >>
+1217 0 obj
+<< /D [ 1215 0 R /XYZ 78.37 808.885 null ] >>
endobj
-1215 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 490.707 223.699 501.706 ]/A << /S /GoTo /D (subsection.4.3) >> >>
+1214 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F67 389 0 R /F15 381 0 R /F56 384 0 R /F55 383 0 R /F57 385 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-1216 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 480.585 213.198 489.711 ]/A << /S /GoTo /D (subsection.4.4) >> >>
+1259 0 obj
+<< /Filter /FlateDecode /Length 2414 >>
+stream
+x\n6W! 0 [kr_íe3F[jnz$~/{y]@&QO/bbeh˟I
+os.As%UhKjKho&>o!~)B]s4N h)hV7SO &NQz6@ΤDPіJ@?fOoR%a8RgڒÜf'2DOR~ NwÊ
+lNd(mK:i[6.eci\M\FZZºBle7s%]W~@
+#ʼFrTߗ"oWJpW4oeJy4Qyen+ܜ+zqmeg6t\ ԢT gTBˈP{t#^h][.5\y@JȺLsE2e WIPɗUbN@w¡9QzndƉو
+)zݻoi*~~6-ըVFMRZ떲| B\+>^3tۍc. 蹪Ԁ8!n\tkNem/W*av*8EN!EMUl=)UԠ+e\13=3mDĶq(Ζ $޹
+䬤=j
+);yVJ>>9?kަ ۴5lh)6KTm;}մ1?#qkeu+ޙիl}(;azNN9lɇ$7k׺;9ʁ=
+'CK"(G+&PO{G| ҹ<WJ*~UW:x]"uR*u8 YitNш6H y2ȕ5kx7k6|1XSLXGez>Z&l<&%*ϛ$XՏVpY'<y94 >ASSh K=S+
+6׾<PGY`z PXt*ǡYK-wSs7="
+/F_E+``Lw=WܨG' Jm]<:
+cɥ`qqr}OJKi'I'1e)[A>d-XMn
+r{>PMEPUP(8C8~s\h)+=oT,~}{Főxډ+NmM`YB _?T- )Bh6Gofy&DeG2`8SUUPc v}߆5S)eCTkcݦb,Ҍ
+ =5k u>@@Nn&bMU's
+#
+endstream
endobj
-1217 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 468.63 333.089 477.756 ]/A << /S /GoTo /D (subsection.4.5) >> >>
+1258 0 obj
+<< /Type /Page /Contents 1259 0 R /Resources 1257 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1125 0 R /Annots 1261 0 R >>
endobj
-1218 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 456.675 321.731 465.801 ]/A << /S /GoTo /D (subsection.4.6) >> >>
+1261 0 obj
+[ 1219 0 R 1220 0 R 1221 0 R 1222 0 R 1223 0 R 1224 0 R 1225 0 R 1226 0 R 1227 0 R 1228 0 R 1229 0 R 1230 0 R 1231 0 R 1232 0 R 1233 0 R 1234 0 R 1235 0 R 1236 0 R 1237 0 R 1238 0 R 1239 0 R 1240 0 R 1241 0 R 1242 0 R 1243 0 R 1244 0 R 1245 0 R 1246 0 R 1247 0 R 1248 0 R 1249 0 R 1250 0 R 1251 0 R 1252 0 R 1253 0 R 1254 0 R 1255 0 R ]
endobj
1219 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 434.867 266.419 443.943 ]/A << /S /GoTo /D (section.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 594.319 289.293 603.285 ]/A << /S /GoTo /D (section.1) >> >>
endobj
1220 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 421.088 366.075 432.037 ]/A << /S /GoTo /D (subsection.5.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 570.458 265.951 581.467 ]/A << /S /GoTo /D (section.2) >> >>
endobj
1221 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 410.847 232.008 420.082 ]/A << /S /GoTo /D (subsubsection.5.1.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 550.433 168.606 559.549 ]/A << /S /GoTo /D (section.3) >> >>
endobj
1222 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 396.62 239.34 408.575 ]/A << /S /GoTo /D (subsubsection.5.1.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 528.565 140.999 537.532 ]/A << /S /GoTo /D (section.4) >> >>
endobj
1223 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 385.223 272.267 396.172 ]/A << /S /GoTo /D (subsection.5.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 514.617 175.639 525.686 ]/A << /S /GoTo /D (subsection.4.1) >> >>
endobj
1224 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 373.268 323.246 384.216 ]/A << /S /GoTo /D (subsection.5.3) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 504.495 228.102 513.621 ]/A << /S /GoTo /D (subsection.4.2) >> >>
endobj
1225 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 363.026 251.445 372.192 ]/A << /S /GoTo /D (subsubsection.5.3.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 490.707 223.699 501.706 ]/A << /S /GoTo /D (subsection.4.3) >> >>
endobj
1226 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 349.357 328.765 360.236 ]/A << /S /GoTo /D (subsubsection.5.3.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 480.585 213.198 489.711 ]/A << /S /GoTo /D (subsection.4.4) >> >>
endobj
1227 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 336.844 222.623 348.799 ]/A << /S /GoTo /D (subsubsection.5.3.3) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 468.63 333.089 477.756 ]/A << /S /GoTo /D (subsection.4.5) >> >>
endobj
1228 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 324.889 253.467 336.844 ]/A << /S /GoTo /D (subsubsection.5.3.4) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 456.675 321.731 465.801 ]/A << /S /GoTo /D (subsection.4.6) >> >>
endobj
1229 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 313.492 310.942 324.441 ]/A << /S /GoTo /D (subsubsection.5.3.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 442.448 220.82 454.403 ]/A << /S /GoTo /D (subsection.4.7) >> >>
endobj
1230 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 291.504 338.927 302.513 ]/A << /S /GoTo /D (section.6) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 422.911 266.419 431.987 ]/A << /S /GoTo /D (section.5) >> >>
endobj
1231 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 281.332 220.77 290.458 ]/A << /S /GoTo /D (subsection.6.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 409.133 366.075 420.082 ]/A << /S /GoTo /D (subsection.5.1) >> >>
endobj
1232 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 267.106 322.16 279.061 ]/A << /S /GoTo /D (subsection.6.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 398.891 232.008 408.127 ]/A << /S /GoTo /D (subsubsection.5.1.1) >> >>
endobj
1233 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 255.589 255.35 266.657 ]/A << /S /GoTo /D (subsection.6.3) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 384.665 239.34 396.62 ]/A << /S /GoTo /D (subsubsection.5.1.2) >> >>
endobj
1234 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 243.753 255.298 254.632 ]/A << /S /GoTo /D (subsection.6.4) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 373.268 272.267 384.216 ]/A << /S /GoTo /D (subsection.5.2) >> >>
endobj
1235 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 221.278 221.856 233.233 ]/A << /S /GoTo /D (section.7) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 361.312 323.246 372.261 ]/A << /S /GoTo /D (subsection.5.3) >> >>
endobj
1236 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 199.848 213.129 210.757 ]/A << /S /GoTo /D (section.8) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 351.071 251.445 360.236 ]/A << /S /GoTo /D (subsubsection.5.3.1) >> >>
endobj
1237 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 187.962 208.596 198.802 ]/A << /S /GoTo /D (subsection.8.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 337.402 328.765 348.281 ]/A << /S /GoTo /D (subsubsection.5.3.2) >> >>
endobj
1238 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 177.721 190.464 186.847 ]/A << /S /GoTo /D (subsection.8.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 324.889 222.623 336.844 ]/A << /S /GoTo /D (subsubsection.5.3.3) >> >>
endobj
1239 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 165.766 245.567 174.891 ]/A << /S /GoTo /D (subsection.8.3) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 312.934 253.467 324.889 ]/A << /S /GoTo /D (subsubsection.5.3.4) >> >>
endobj
1240 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 142.065 271.599 153.073 ]/A << /S /GoTo /D (section.9) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 301.537 310.942 312.485 ]/A << /S /GoTo /D (subsubsection.5.3.5) >> >>
endobj
1241 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 120.147 259.166 131.155 ]/A << /S /GoTo /D (section.10) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 279.549 338.927 290.558 ]/A << /S /GoTo /D (section.6) >> >>
endobj
1242 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 108.152 214.254 119.21 ]/A << /S /GoTo /D (subsection.10.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 269.377 220.77 278.503 ]/A << /S /GoTo /D (subsection.6.1) >> >>
endobj
1243 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 95.748 296.347 107.703 ]/A << /S /GoTo /D (subsection.10.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 255.15 322.16 267.106 ]/A << /S /GoTo /D (subsection.6.2) >> >>
endobj
1244 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 84.231 398.942 95.3 ]/A << /S /GoTo /D (subsection.10.3) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 243.634 255.35 254.702 ]/A << /S /GoTo /D (subsection.6.3) >> >>
endobj
1245 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 72.276 268.67 83.275 ]/A << /S /GoTo /D (subsection.10.4) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 231.798 255.298 242.677 ]/A << /S /GoTo /D (subsection.6.4) >> >>
endobj
-1250 0 obj
-<< /D [ 1248 0 R /XYZ 78.37 808.885 null ] >>
+1246 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 209.322 221.856 221.278 ]/A << /S /GoTo /D (section.7) >> >>
endobj
1247 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 398 0 R /F15 377 0 R /F56 380 0 R /F55 379 0 R /F66 384 0 R /F50 370 0 R /F67 385 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 187.893 213.129 198.802 ]/A << /S /GoTo /D (section.8) >> >>
endobj
-1304 0 obj
-<< /Filter /FlateDecode /Length 2270 >>
-stream
-x\r6 ߯%
-p5бA|VkP
-uX>wLYf\vzwZr2ҪO)FWhTWk:/w&PyPkgP31{}wUr]+Dg=UG%5[9ml OxG`8hi^nUbKSp\`H=,&xyUL" ӏ9SD4)Z $,,]+wTS4; Ca$&r3/h[5JI86ëX ]aXtʩ u!}@w,H֥
-)XUDŽwȉ1\raoO1$`ǶQQ7|]F
-eUkѶ-Žwq
-3 kRwERjR8=“O\F=kLY*;0DLtՆ16AɍW33|85٨|n%!}Sӵju99urAK_L^onX {lS= 5nUFkmzFfa`VOU(C UjWumjlTZWp)TK^˰,s..K܏˼@/}ڶ' -
-
-w.fo8Xks;ԴLZyǻE# 2qKUkcNf 5&f9ۈ)v=eXZ&eFD5%m*cRO>11-@ U^'h5.SYP$ rʭ*Jk&)iGf;mkw[V'ZSV 3_/xsC@^F.m,imWnӎs׷6m!֠be k{v>d^-+б`p-PZ#ioƟb.򩪾nob_g`nTW5^EZvn?
- 77oAכ"Őb˯Z[^i{6aVqSy֏}RKZ5}z<ywK)ַ/iQmJ
-ofK
-6[3$
-endstream
+1248 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 176.007 208.596 186.847 ]/A << /S /GoTo /D (subsection.8.1) >> >>
endobj
-1303 0 obj
-<< /Type /Page /Contents 1304 0 R /Resources 1302 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1207 0 R /Annots 1306 0 R >>
+1249 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 165.766 190.464 174.891 ]/A << /S /GoTo /D (subsection.8.2) >> >>
endobj
-1306 0 obj
-[ 1246 0 R 1252 0 R 1253 0 R 1254 0 R 1255 0 R 1256 0 R 1257 0 R 1258 0 R 1259 0 R 1260 0 R 1261 0 R 1262 0 R 1263 0 R 1264 0 R 1265 0 R 1266 0 R 1267 0 R 1268 0 R 1269 0 R 1270 0 R 1271 0 R 1272 0 R 1273 0 R 1274 0 R 1275 0 R 1276 0 R 1277 0 R 1278 0 R 1279 0 R 1280 0 R 1281 0 R 1282 0 R 1283 0 R 1284 0 R 1285 0 R 1286 0 R 1287 0 R 1288 0 R 1289 0 R 1290 0 R 1291 0 R 1292 0 R 1293 0 R 1294 0 R 1295 0 R 1296 0 R 1297 0 R 1298 0 R 1299 0 R 1300 0 R 1301 0 R ]
+1250 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 153.811 245.567 162.936 ]/A << /S /GoTo /D (subsection.8.3) >> >>
endobj
-1246 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 758.012 297.502 769.011 ]/A << /S /GoTo /D (subsection.10.5) >> >>
+1251 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 130.109 271.599 141.118 ]/A << /S /GoTo /D (section.9) >> >>
endobj
1252 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 746.057 264.506 757.126 ]/A << /S /GoTo /D (subsection.10.6) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 108.192 259.166 119.2 ]/A << /S /GoTo /D (section.10) >> >>
endobj
1253 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 724.259 348.591 735.198 ]/A << /S /GoTo /D (section.11) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 96.197 214.254 107.255 ]/A << /S /GoTo /D (subsection.10.1) >> >>
endobj
1254 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 701.783 169.522 713.738 ]/A << /S /GoTo /D (section.12) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 83.793 296.347 95.748 ]/A << /S /GoTo /D (subsection.10.2) >> >>
endobj
1255 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 689.828 297.263 701.783 ]/A << /S /GoTo /D (subsection.12.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 72.276 398.942 83.345 ]/A << /S /GoTo /D (subsection.10.3) >> >>
endobj
-1256 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 677.873 416.735 689.828 ]/A << /S /GoTo /D (subsection.12.2) >> >>
+1260 0 obj
+<< /D [ 1258 0 R /XYZ 78.37 808.885 null ] >>
endobj
1257 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 665.918 406.484 677.873 ]/A << /S /GoTo /D (subsection.12.3) >> >>
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 402 0 R /F15 381 0 R /F56 384 0 R /F55 383 0 R /F66 388 0 R /F50 374 0 R /F67 389 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-1258 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 653.963 343.918 665.918 ]/A << /S /GoTo /D (subsection.12.4) >> >>
+1315 0 obj
+<< /Filter /FlateDecode /Length 2284 >>
+stream
+x\r6 ߯%
+dUtRqa݁w$k1Zc˼K>5֯WM "R_@8 yѽ3"%σP\;{~軫SLP')9T5~*9ْqnc[hx;
+ߊv8~*Ngw1UM䪌 +p::P?bJpW
+zB@@όm]"?ErŘ96;_H t3x3mey$k׺#ߕ)t(p}gP@MƂk<&FNywh {{!&x; Ymx.z\D#Ȫha;vf uu0*?Ka4"[c)sR*;jW~Z`B^w|cpT*WF[agmtt^up>cn=;
+?l
+Sbfyg6CMԫ|XTNx!xsđ/Um3;qo1٨s *E6l0]Ol3 &e-jJ<Tl%Ƃ nϽ}Ec$ нFBפj6Z ˄ԧ- <GW *Jk&)iGf;mkw[V'ZSV 3/BE y>η7]X@ڮo@ش!+б^2@K;t Dȁ?H8}VoAE~X*rZo&}싺!PȆ5d[CI >[~
+ <Sŝ|Ii~vΐ4rQFD2sh٠;NZnzǽ݌YTZ;ſc^0]QQ8ѩ<DŽ޾sC̠jQmJ
+oKzA}z
+endstream
endobj
-1259 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 632.533 308.152 643.542 ]/A << /S /GoTo /D (section.13) >> >>
+1314 0 obj
+<< /Type /Page /Contents 1315 0 R /Resources 1313 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1125 0 R /Annots 1317 0 R >>
endobj
-1260 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 620.528 233.642 631.527 ]/A << /S /GoTo /D (subsection.13.1) >> >>
+1317 0 obj
+[ 1256 0 R 1262 0 R 1263 0 R 1264 0 R 1265 0 R 1266 0 R 1267 0 R 1268 0 R 1269 0 R 1270 0 R 1271 0 R 1272 0 R 1273 0 R 1274 0 R 1275 0 R 1276 0 R 1277 0 R 1278 0 R 1279 0 R 1280 0 R 1281 0 R 1282 0 R 1283 0 R 1284 0 R 1285 0 R 1286 0 R 1287 0 R 1288 0 R 1289 0 R 1290 0 R 1291 0 R 1292 0 R 1293 0 R 1294 0 R 1295 0 R 1296 0 R 1297 0 R 1298 0 R 1299 0 R 1300 0 R 1301 0 R 1302 0 R 1303 0 R 1304 0 R 1305 0 R 1306 0 R 1307 0 R 1308 0 R 1309 0 R 1310 0 R 1311 0 R ]
endobj
-1261 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 608.573 237.228 619.532 ]/A << /S /GoTo /D (subsection.13.2) >> >>
+1256 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 758.012 268.67 769.011 ]/A << /S /GoTo /D (subsection.10.4) >> >>
endobj
1262 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 598.451 219.804 607.576 ]/A << /S /GoTo /D (subsection.13.3) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 746.057 297.502 757.056 ]/A << /S /GoTo /D (subsection.10.5) >> >>
endobj
1263 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 586.496 288.586 595.621 ]/A << /S /GoTo /D (subsection.13.4) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 734.102 264.506 745.17 ]/A << /S /GoTo /D (subsection.10.6) >> >>
endobj
1264 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 572.269 337.881 584.224 ]/A << /S /GoTo /D (subsection.13.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 712.304 348.591 723.243 ]/A << /S /GoTo /D (section.11) >> >>
endobj
1265 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 552.732 205.706 561.848 ]/A << /S /GoTo /D (section.14) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 689.828 169.522 701.783 ]/A << /S /GoTo /D (section.12) >> >>
endobj
1266 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 540.667 224.546 549.833 ]/A << /S /GoTo /D (subsection.14.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 677.873 297.263 689.828 ]/A << /S /GoTo /D (subsection.12.1) >> >>
endobj
1267 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 526.441 251.983 538.396 ]/A << /S /GoTo /D (subsection.14.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 665.918 416.735 677.873 ]/A << /S /GoTo /D (subsection.12.2) >> >>
endobj
1268 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 514.934 312.127 525.992 ]/A << /S /GoTo /D (subsection.14.3) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 653.963 406.484 665.918 ]/A << /S /GoTo /D (subsection.12.3) >> >>
endobj
1269 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 502.53 330.937 514.486 ]/A << /S /GoTo /D (subsection.14.4) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 642.007 343.918 653.963 ]/A << /S /GoTo /D (subsection.12.4) >> >>
endobj
1270 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 490.575 220.551 502.53 ]/A << /S /GoTo /D (subsection.14.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 620.578 308.152 631.586 ]/A << /S /GoTo /D (section.13) >> >>
endobj
1271 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 479.178 187.943 490.017 ]/A << /S /GoTo /D (subsection.14.6) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 608.573 233.642 619.571 ]/A << /S /GoTo /D (subsection.13.1) >> >>
endobj
1272 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 467.113 246.244 478.172 ]/A << /S /GoTo /D (subsection.14.7) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 596.618 237.228 607.576 ]/A << /S /GoTo /D (subsection.13.2) >> >>
endobj
1273 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 455.148 216.735 466.107 ]/A << /S /GoTo /D (subsection.14.8) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 586.496 219.804 595.621 ]/A << /S /GoTo /D (subsection.13.3) >> >>
endobj
1274 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 445.026 228.312 454.261 ]/A << /S /GoTo /D (subsection.14.9) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 574.54 288.586 583.666 ]/A << /S /GoTo /D (subsection.13.4) >> >>
endobj
1275 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 430.799 307.993 442.755 ]/A << /S /GoTo /D (subsection.14.10) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 560.314 337.881 572.269 ]/A << /S /GoTo /D (subsection.13.5) >> >>
endobj
1276 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 418.844 287.271 430.799 ]/A << /S /GoTo /D (subsection.14.11) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 540.827 205.706 549.893 ]/A << /S /GoTo /D (section.14) >> >>
endobj
1277 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 399.307 273.731 408.324 ]/A << /S /GoTo /D (section.15) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 528.822 224.546 537.878 ]/A << /S /GoTo /D (subsection.14.1) >> >>
endobj
1278 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 385.529 338.568 396.368 ]/A << /S /GoTo /D (subsection.15.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 514.486 251.983 526.441 ]/A << /S /GoTo /D (subsection.14.2) >> >>
endobj
1279 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 373.454 240.177 384.523 ]/A << /S /GoTo /D (subsubsection.15.1.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 502.979 312.127 514.037 ]/A << /S /GoTo /D (subsection.14.3) >> >>
endobj
1280 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 363.332 270.474 372.458 ]/A << /S /GoTo /D (subsubsection.15.1.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 490.575 330.937 502.53 ]/A << /S /GoTo /D (subsection.14.4) >> >>
endobj
1281 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 349.544 325.314 360.503 ]/A << /S /GoTo /D (subsection.15.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 478.62 220.551 490.575 ]/A << /S /GoTo /D (subsection.14.5) >> >>
endobj
1282 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 337.708 306.339 348.657 ]/A << /S /GoTo /D (subsection.15.3) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 467.223 187.943 478.062 ]/A << /S /GoTo /D (subsection.14.6) >> >>
endobj
1283 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 325.195 363.933 337.151 ]/A << /S /GoTo /D (subsection.15.4) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 455.158 246.244 466.217 ]/A << /S /GoTo /D (subsection.14.7) >> >>
endobj
1284 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 303.835 229.457 314.774 ]/A << /S /GoTo /D (section.16) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 443.193 216.735 454.152 ]/A << /S /GoTo /D (subsection.14.8) >> >>
endobj
1285 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 281.918 207.569 292.757 ]/A << /S /GoTo /D (section.17) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 433.071 228.312 442.306 ]/A << /S /GoTo /D (subsection.14.9) >> >>
endobj
1286 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 269.843 201.273 280.802 ]/A << /S /GoTo /D (subsection.17.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 418.844 307.993 430.799 ]/A << /S /GoTo /D (subsection.14.10) >> >>
endobj
1287 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 259.721 206.392 268.847 ]/A << /S /GoTo /D (subsection.17.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 406.889 287.271 418.844 ]/A << /S /GoTo /D (subsection.14.11) >> >>
endobj
1288 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 245.943 250.877 256.892 ]/A << /S /GoTo /D (subsection.17.3) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 387.352 273.731 396.368 ]/A << /S /GoTo /D (section.15) >> >>
endobj
1289 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 234.097 195.276 244.976 ]/A << /S /GoTo /D (subsection.17.4) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 373.574 338.568 384.413 ]/A << /S /GoTo /D (subsection.15.1) >> >>
endobj
1290 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 212.179 143.002 223.019 ]/A << /S /GoTo /D (section.18) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 361.499 240.177 372.568 ]/A << /S /GoTo /D (subsubsection.15.1.1) >> >>
endobj
1291 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 199.666 353.181 211.621 ]/A << /S /GoTo /D (subsection.18.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 351.377 270.474 360.503 ]/A << /S /GoTo /D (subsubsection.15.1.2) >> >>
endobj
1292 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 189.982 236.81 199.108 ]/A << /S /GoTo /D (subsection.18.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 337.589 325.314 348.548 ]/A << /S /GoTo /D (subsection.15.2) >> >>
endobj
1293 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 178.027 228.302 187.153 ]/A << /S /GoTo /D (subsection.18.3) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 325.753 306.339 336.702 ]/A << /S /GoTo /D (subsection.15.3) >> >>
endobj
1294 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 164.239 209.024 175.238 ]/A << /S /GoTo /D (subsection.18.4) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 313.24 363.933 325.195 ]/A << /S /GoTo /D (subsection.15.4) >> >>
endobj
1295 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 152.284 335.709 163.283 ]/A << /S /GoTo /D (subsection.18.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 291.88 229.457 302.819 ]/A << /S /GoTo /D (section.16) >> >>
endobj
1296 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 140.329 196.86 151.327 ]/A << /S /GoTo /D (subsection.18.6) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 269.963 207.569 280.802 ]/A << /S /GoTo /D (section.17) >> >>
endobj
1297 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 128.493 234.767 139.332 ]/A << /S /GoTo /D (subsection.18.7) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 257.888 201.273 268.847 ]/A << /S /GoTo /D (subsection.17.1) >> >>
endobj
1298 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 116.418 311.161 127.487 ]/A << /S /GoTo /D (subsection.18.8) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 247.766 206.392 256.892 ]/A << /S /GoTo /D (subsection.17.2) >> >>
endobj
1299 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 104.025 331.415 115.98 ]/A << /S /GoTo /D (subsection.18.9) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 233.987 250.877 244.936 ]/A << /S /GoTo /D (subsection.17.3) >> >>
endobj
1300 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 92.508 227.395 103.467 ]/A << /S /GoTo /D (subsection.18.10) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 222.142 195.276 233.021 ]/A << /S /GoTo /D (subsection.17.4) >> >>
endobj
1301 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 72.533 108.74 81.549 ]/A << /S /GoTo /D (section*.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 200.224 143.002 211.063 ]/A << /S /GoTo /D (section.18) >> >>
+endobj
+1302 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 187.711 353.181 199.666 ]/A << /S /GoTo /D (subsection.18.1) >> >>
+endobj
+1303 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 178.027 236.81 187.153 ]/A << /S /GoTo /D (subsection.18.2) >> >>
+endobj
+1304 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 166.072 228.302 175.198 ]/A << /S /GoTo /D (subsection.18.3) >> >>
endobj
1305 0 obj
-<< /D [ 1303 0 R /XYZ 78.37 808.885 null ] >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 152.284 209.024 163.283 ]/A << /S /GoTo /D (subsection.18.4) >> >>
endobj
-1302 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 377 0 R /F67 385 0 R >> /ProcSet [ /PDF /Text ] >>
+1306 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 140.329 335.709 151.327 ]/A << /S /GoTo /D (subsection.18.5) >> >>
+endobj
+1307 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 128.373 196.86 139.372 ]/A << /S /GoTo /D (subsection.18.6) >> >>
+endobj
+1308 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 116.538 234.767 127.377 ]/A << /S /GoTo /D (subsection.18.7) >> >>
+endobj
+1309 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 104.463 311.161 115.532 ]/A << /S /GoTo /D (subsection.18.8) >> >>
+endobj
+1310 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 92.07 331.415 104.025 ]/A << /S /GoTo /D (subsection.18.9) >> >>
+endobj
+1311 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 80.553 227.395 91.512 ]/A << /S /GoTo /D (subsection.18.10) >> >>
+endobj
+1316 0 obj
+<< /D [ 1314 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+1313 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F67 389 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+1320 0 obj
+<< /Filter /FlateDecode /Length 122 >>
+stream
+xm̱
+1>_1?`n6fB"X[*0 <cSSGפd<fD?pY"#ie=d2~S<Eѭ~$A
+endstream
+endobj
+1319 0 obj
+<< /Type /Page /Contents 1320 0 R /Resources 1318 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1125 0 R /Annots 1322 0 R >>
+endobj
+1322 0 obj
+[ 1312 0 R ]
+endobj
+1312 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 759.955 108.74 768.971 ]/A << /S /GoTo /D (section*.2) >> >>
+endobj
+1321 0 obj
+<< /D [ 1319 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+1318 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F67 389 0 R /F15 381 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
1 0 obj
<< /pgf@ca0.75 << /ca 0.75 >> /pgf@CA0.4 << /CA 0.4 >> /pgf@ca0.4 << /ca 0.4 >> /pgf@bmMultiply<< /BM /Multiply>> /pgf@ca1.0 << /ca 1.0 >>>>
endobj
2 0 obj
-<< /pgfpat5 820 0 R /pgfpat4 821 0 R /pgfpat10 824 0 R>>
+<< /pgfpat5 828 0 R /pgfpat4 829 0 R /pgfpat10 832 0 R>>
endobj
3 0 obj
<< /pgfprgb [/Pattern /DeviceRGB] >>
endobj
-1307 0 obj
+1323 0 obj
[ 28 [ 510 ] 96 [ 363 ] 118 [ 490 ] ]
endobj
-1309 0 obj
+1325 0 obj
<< /Filter /FlateDecode /Length 17 >>
stream
xc```&
endstream
endobj
-1310 0 obj
+1326 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 692 >>
stream
xcd`aa`ddr N+O,,MIyP#C,9?Xy~s0aS  K,t~L;74G$0GAA5/<"-6300q/,L(Q0200
@@ -5512,10 +5614,10 @@ Nz
>XOoOOo_O߄=<<;WLrxxJ
endstream
endobj
-1308 0 obj
-<< /Type /FontDescriptor /FontName /TZAQYL+LMSans8-Oblique /Flags 4 /FontBBox [ -486 -314 1548 1154 ] /Ascent 1154 /CapHeight 694 /Descent -314 /ItalicAngle -12 /StemV 98 /XHeight 444 /FontFile3 1310 0 R /CIDSet 1309 0 R >>
+1324 0 obj
+<< /Type /FontDescriptor /FontName /TZAQYL+LMSans8-Oblique /Flags 4 /FontBBox [ -486 -314 1548 1154 ] /Ascent 1154 /CapHeight 694 /Descent -314 /ItalicAngle -12 /StemV 98 /XHeight 444 /FontFile3 1326 0 R /CIDSet 1325 0 R >>
endobj
-1311 0 obj
+1327 0 obj
<< /Filter /FlateDecode /Length 374 >>
stream
x}RMo@x=Y45!b7}Md.pwwM[< t7ްOa5C/Zt9jȑl9V,
@@ -5525,23 +5627,23 @@ y@ws$壷9wNF IpCPB }Jy"yr^IKDЙ\_r&
rndfA~
endstream
endobj
-818 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /TZAQYL+LMSans8-Oblique /DescendantFonts [ 1312 0 R ] /ToUnicode 1311 0 R >>
+826 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /TZAQYL+LMSans8-Oblique /DescendantFonts [ 1328 0 R ] /ToUnicode 1327 0 R >>
endobj
-1312 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /TZAQYL+LMSans8-Oblique /FontDescriptor 1308 0 R /W 1307 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1328 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /TZAQYL+LMSans8-Oblique /FontDescriptor 1324 0 R /W 1323 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1313 0 obj
+1329 0 obj
[ 56 [ 681 681 ] 82 [ 681 ] 88 [ 403 ] 106 [ 681 681 ] ]
endobj
-1315 0 obj
+1331 0 obj
<< /Filter /FlateDecode /Length 18 >>
stream
xc`

endstream
endobj
-1316 0 obj
+1332 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 1129 >>
stream
xuT{LSW[W@N½G2A ^DŽU{io[z(Pp
@@ -5556,10 +5658,10 @@ xuT{LSW[W@N½G2A ^DŽU{io[z(Pp
sn> <TQZPt@ UQ=R]E&ni,lAC#bdČjnpu,;T7>6<4N=$Z#yB<R eD E*yHa)ݤ1^MZN?|@˰veFb&u!}^w@x Q3%Ib4^A_>>:Xk kPT%J@i~ Ρ{(;> Qd"\4-*ۤQ2{[ F:Ј폾u1B}O jkq \5|[P6?}uxzK2iC惾ELm 9cBO"{lz2|Bh4zGo塞.OgW;Ge_
endstream
endobj
-1314 0 obj
-<< /Type /FontDescriptor /FontName /GOIBMZ+LMRoman5-Regular /Flags 4 /FontBBox [ -566 -303 1772 1126 ] /Ascent 1126 /CapHeight 683 /Descent -303 /ItalicAngle 0 /StemV 134 /XHeight 431 /FontFile3 1316 0 R /CIDSet 1315 0 R >>
+1330 0 obj
+<< /Type /FontDescriptor /FontName /GOIBMZ+LMRoman5-Regular /Flags 4 /FontBBox [ -566 -303 1772 1126 ] /Ascent 1126 /CapHeight 683 /Descent -303 /ItalicAngle 0 /StemV 134 /XHeight 431 /FontFile3 1332 0 R /CIDSet 1331 0 R >>
endobj
-1317 0 obj
+1333 0 obj
<< /Filter /FlateDecode /Length 387 >>
stream
x}Rj0+^xI` YYHB)9s*%#ۇ} /4ovM<7J67[e%t6zȐl5t5tg<iq*aتM]bց?M:]}y﫝,21vxjΙSuYf K1l& 3aEK[9L]'a:*ST5%cʼź*.N}QkMY$ 0uk:+|3~4ˣ5KY:T2ʌ ICJ
@@ -5567,28 +5669,28 @@ x}Rj0+^xI` YYHB)9s*%#ۇ} /4ovM<7J67[e%t
rhah⸁CS-f_&[ QJg`jFo[UTq{ ,r}
endstream
endobj
-787 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /GOIBMZ+LMRoman5-Regular /DescendantFonts [ 1318 0 R ] /ToUnicode 1317 0 R >>
+802 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /GOIBMZ+LMRoman5-Regular /DescendantFonts [ 1334 0 R ] /ToUnicode 1333 0 R >>
endobj
-1318 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /GOIBMZ+LMRoman5-Regular /FontDescriptor 1314 0 R /W 1313 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1334 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /GOIBMZ+LMRoman5-Regular /FontDescriptor 1330 0 R /W 1329 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1319 0 obj
+1335 0 obj
[575 575 575 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 559 638.9 511.1 638.9 ]
endobj
-1320 0 obj
+1336 0 obj
[1083.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1361.1 ]
endobj
-1321 0 obj
+1337 0 obj
[ 28 [ 603 ] 35 [ 544 ] 43 [ 544 ] 47 [ 603 ] ]
endobj
-1323 0 obj
+1339 0 obj
<< /Filter /FlateDecode /Length 14 >>
stream
xc``
endstream
endobj
-1324 0 obj
+1340 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 900 >>
stream
xڵSoL[U]<t}dmbhAf P(d+}mx{v –@2q5,C~G>D_Yh9sﹹ990AkO4_7 N:
@@ -5603,36 +5705,36 @@ WZVRV
1mb7aKuO[&,ڗ:E["aS4c &8dxgxV6-:'T(Ed|<>a)Z9?'Uؚ
endstream
endobj
-1322 0 obj
-<< /Type /FontDescriptor /FontName /BWIYUD+LMRoman7-Italic /Flags 4 /FontBBox [ -528 -292 1571 1123 ] /Ascent 1123 /CapHeight 683 /Descent -292 /ItalicAngle -15 /StemV 123 /XHeight 431 /FontFile3 1324 0 R /CIDSet 1323 0 R >>
+1338 0 obj
+<< /Type /FontDescriptor /FontName /BWIYUD+LMRoman7-Italic /Flags 4 /FontBBox [ -528 -292 1571 1123 ] /Ascent 1123 /CapHeight 683 /Descent -292 /ItalicAngle -15 /StemV 123 /XHeight 431 /FontFile3 1340 0 R /CIDSet 1339 0 R >>
endobj
-1325 0 obj
+1341 0 obj
<< /Filter /FlateDecode /Length 375 >>
stream
x}R]k0}ϯ{6U@0uBa~`cM.`* BJOι7瞴ɣg XF3fˢ"\DiVychr4НeL
ӳLSñUM(M΁?G6^[U)Lq,h'ɊՁ%> ;Z(9O)/TƫI|qk $wI2
endstream
endobj
-695 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /BWIYUD+LMRoman7-Italic /DescendantFonts [ 1326 0 R ] /ToUnicode 1325 0 R >>
+703 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /BWIYUD+LMRoman7-Italic /DescendantFonts [ 1342 0 R ] /ToUnicode 1341 0 R >>
endobj
-1326 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /BWIYUD+LMRoman7-Italic /FontDescriptor 1322 0 R /W 1321 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1342 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /BWIYUD+LMRoman7-Italic /FontDescriptor 1338 0 R /W 1337 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1327 0 obj
+1343 0 obj
[892.9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1138.9 0 585.3 ]
endobj
-1328 0 obj
+1344 0 obj
[ 47 [ 525 ] 50 [ 525 ] 64 [ 525 ] 66 [ 525 ] 72 [ 525 ] 77 [ 525 ] 81 [ 525 ] 98 [ 525 ] 102 [ 525 ] 105 [ 525 ] 116 [ 525 ] 118 [ 525 ] ]
endobj
-1330 0 obj
+1346 0 obj
<< /Filter /FlateDecode /Length 21 >>
stream
xc`

endstream
endobj
-1331 0 obj
+1347 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 1486 >>
stream
xmU{LG%ʉr9ݚj!A⣩Qx==#Z-w CSV5$֤Uk5ZlS5SuV&Mdv3oeǢ1Ǔ
@@ -5651,10 +5753,10 @@ sƭw¸Om-åu^
T;,;T(w ;h 4
endstream
endobj
-1329 0 obj
-<< /Type /FontDescriptor /FontName /MSSSGB+LMMonoLt10-Bold /Flags 4 /FontBBox [ -454 -308 734 1039 ] /Ascent 1039 /CapHeight 611 /Descent -308 /ItalicAngle 0 /StemV 175 /XHeight 431 /FontFile3 1331 0 R /CIDSet 1330 0 R >>
+1345 0 obj
+<< /Type /FontDescriptor /FontName /MSSSGB+LMMonoLt10-Bold /Flags 4 /FontBBox [ -454 -308 734 1039 ] /Ascent 1039 /CapHeight 611 /Descent -308 /ItalicAngle 0 /StemV 175 /XHeight 431 /FontFile3 1347 0 R /CIDSet 1346 0 R >>
endobj
-1332 0 obj
+1348 0 obj
<< /Filter /FlateDecode /Length 420 >>
stream
x}Ok0@zp-;mڔ`$bhRe4
@@ -5663,22 +5765,22 @@ b!~%’]ތGO|{0rV`-L6F j(Qjֈ
aa>>׸1iCU<o3޶g
endstream
endobj
-626 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /MSSSGB+LMMonoLt10-Bold /DescendantFonts [ 1333 0 R ] /ToUnicode 1332 0 R >>
+634 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /MSSSGB+LMMonoLt10-Bold /DescendantFonts [ 1349 0 R ] /ToUnicode 1348 0 R >>
endobj
-1333 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /MSSSGB+LMMonoLt10-Bold /FontDescriptor 1329 0 R /W 1328 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1349 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /MSSSGB+LMMonoLt10-Bold /FontDescriptor 1345 0 R /W 1344 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1334 0 obj
+1350 0 obj
[ 47 [ 590 ] 81 [ 531 ] 98 [ 419 ] 105 [ 413 ] 116 [ 561 ] ]
endobj
-1336 0 obj
+1352 0 obj
<< /Filter /FlateDecode /Length 19 >>
stream
xc`
endstream
endobj
-1337 0 obj
+1353 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 1167 >>
stream
x}TmLe^-+]lqShq ls RPG6Zz#"/\{/0a8`
@@ -5693,10 +5795,10 @@ _eR}&:q5d ub cly}xϱ3L7_kNGWg?v
#h}^
endstream
endobj
-1335 0 obj
-<< /Type /FontDescriptor /FontName /JIXNST+LMRomanSlant8-Regular /Flags 4 /FontBBox [ -483 -292 1526 1125 ] /Ascent 1125 /CapHeight 683 /Descent -292 /ItalicAngle -10 /StemV 98 /XHeight 431 /FontFile3 1337 0 R /CIDSet 1336 0 R >>
+1351 0 obj
+<< /Type /FontDescriptor /FontName /JIXNST+LMRomanSlant8-Regular /Flags 4 /FontBBox [ -483 -292 1526 1125 ] /Ascent 1125 /CapHeight 683 /Descent -292 /ItalicAngle -10 /StemV 98 /XHeight 431 /FontFile3 1353 0 R /CIDSet 1352 0 R >>
endobj
-1338 0 obj
+1354 0 obj
<< /Filter /FlateDecode /Length 388 >>
stream
xڍR]k0}ϯ{6tN鄎ĖkM.&%MKR0Џ{9'<l>V :+IT.P "GVlb .e,Yr,Y^slY^$ցn=o4XT$Ϥ;<yZSar6X
@@ -5705,25 +5807,25 @@ s˭1=Ct8VePgdnWJNñ~
δ3\9N#ƃ< =z5A Ӿ<Fx?)q^ݳZkkL m*U=z}+j
endstream
endobj
-594 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /JIXNST+LMRomanSlant8-Regular /DescendantFonts [ 1339 0 R ] /ToUnicode 1338 0 R >>
+602 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /JIXNST+LMRomanSlant8-Regular /DescendantFonts [ 1355 0 R ] /ToUnicode 1354 0 R >>
endobj
-1339 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /JIXNST+LMRomanSlant8-Regular /FontDescriptor 1335 0 R /W 1334 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1355 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /JIXNST+LMRomanSlant8-Regular /FontDescriptor 1351 0 R /W 1350 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1340 0 obj
+1356 0 obj
[361.7 429.7 0 0 0 644.7 ]
endobj
-1341 0 obj
+1357 0 obj
[ 28 [ 525 ] 35 [ 525 ] 43 [ 525 ] 47 [ 525 ] 50 [ 525 ] 55 [ 525 ] 64 [ 525 ] 66 [ 525 ] 72 [ 525 ] 74 [ 525 525 525 525 ] 81 [ 525 ] 84 [ 525 ] 96 [ 525 ] 98 [ 525 ] 103 [ 525 ] 105 [ 525 ] 109 [ 525 ] 112 [ 525 ] 494 [ 525 ] ]
endobj
-1343 0 obj
+1359 0 obj
<< /Filter /FlateDecode /Length 27 >>
stream
xc``TdXǃaKI
endstream
endobj
-1344 0 obj
+1360 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 2421 >>
stream
xڍW Tgf50h}mU]bEe}VI$07Q <APTX6XOϮu;;S=;ə7
@@ -5740,32 +5842,32 @@ W
CH wu[uE,>>X*uŃibR2z@yRsa)d.($Ge1Հf4ca$Sg~lW/BU٫J]|+ ;rZhwgʪ+Q(_YE
endstream
endobj
-1342 0 obj
-<< /Type /FontDescriptor /FontName /SFCWXS+LMMonoSlant10-Regular /Flags 4 /FontBBox [ -477 -316 786 1016 ] /Ascent 1016 /CapHeight 611 /Descent -316 /ItalicAngle -10 /StemV 175 /XHeight 431 /FontFile3 1344 0 R /CIDSet 1343 0 R >>
+1358 0 obj
+<< /Type /FontDescriptor /FontName /SFCWXS+LMMonoSlant10-Regular /Flags 4 /FontBBox [ -477 -316 786 1016 ] /Ascent 1016 /CapHeight 611 /Descent -316 /ItalicAngle -10 /StemV 175 /XHeight 431 /FontFile3 1360 0 R /CIDSet 1359 0 R >>
endobj
-1345 0 obj
+1361 0 obj
<< /Filter /FlateDecode /Length 471 >>
stream
xڍMo0
!Rz'M!$HH*nĞd- @+V"xw>=,U'WCG!u,; @+2/wÝ7Yo3\<dy*_UpJWMpڄԹXP+!$ Z=Rj?uh*Dsg*''G3"$&O9ЖꬃD6sѫ`BWAgnDnV9\ox01ε9Z] qЌl {e(񗝢h+c 6I9b+$B*֞V )EJ<'CH9ғMH;!=HSJ=%=̞b &mQR(&im<l>cOگ?IwRVvs^<i^.!
endstream
endobj
-469 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /SFCWXS+LMMonoSlant10-Regular /DescendantFonts [ 1346 0 R ] /ToUnicode 1345 0 R >>
+480 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /SFCWXS+LMMonoSlant10-Regular /DescendantFonts [ 1362 0 R ] /ToUnicode 1361 0 R >>
endobj
-1346 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /SFCWXS+LMMonoSlant10-Regular /FontDescriptor 1342 0 R /W 1341 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1362 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /SFCWXS+LMMonoSlant10-Regular /FontDescriptor 1358 0 R /W 1357 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1347 0 obj
+1363 0 obj
[ 28 [ 549 ] 35 [ 494 ] 40 [ 329 329 ] 43 [ 494 ] 45 [ 329 ] 47 [ 549 ] 50 [ 494 ] 55 [ 329 ] 59 [ 494 ] 63 [ 549 ] 66 [ 329 ] 70 [ 494 ] 72 [ 274 ] 75 [ 878 ] 77 [ 603 ] 81 [ 549 ] 84 [ 549 439 439 ] 88 [ 329 ] 96 [ 453 ] 98 [ 439 ] 104 [ 768 357 ] 109 [ 576 ] 112 [ 494 ] 114 [ 713 ] 116 [ 495 ] 118 [ 521 ] 251 [ 494 ] 502 [ 329 ] ]
endobj
-1349 0 obj
+1365 0 obj
<< /Filter /FlateDecode /Length 31 >>
stream
xc``(4ůaU h@/`
endstream
endobj
-1350 0 obj
+1366 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 3600 >>
stream
xڵX tW-!`$TA:!C`:$$a3` "o-[%Kd[TmKf[b$ 0d2I:C:t: 3t~bzdC9JJ*}}wPL `0ڴg]¶u]PVҒDqZ~nFm\r!r&8`=;슍fçbG_>AwqcD:v!Ğ
@@ -5781,42 +5883,42 @@ N Nu|U5ÏCM{E7.UgG'igWW_1GK lO ?Mt= =Kl
nn. ^:{:0IrFٜNU[f _-4UWѻLMvꕉlh!*@Ksvt?kbA/3qr] T5)Kc'S“L [-Vawܱ,V63v
endstream
endobj
-1348 0 obj
-<< /Type /FontDescriptor /FontName /HXCEOC+LMRoman8-Italic /Flags 4 /FontBBox [ -489 -292 1472 1124 ] /Ascent 1124 /CapHeight 683 /Descent -292 /ItalicAngle -15 /StemV 110 /XHeight 431 /FontFile3 1350 0 R /CIDSet 1349 0 R >>
+1364 0 obj
+<< /Type /FontDescriptor /FontName /HXCEOC+LMRoman8-Italic /Flags 4 /FontBBox [ -489 -292 1472 1124 ] /Ascent 1124 /CapHeight 683 /Descent -292 /ItalicAngle -15 /StemV 110 /XHeight 431 /FontFile3 1366 0 R /CIDSet 1365 0 R >>
endobj
-1351 0 obj
+1367 0 obj
<< /Filter /FlateDecode /Length 512 >>
stream
x}M@ރs`l%K3NltHC
נ%hZsSP[`hBP @6K q C["P^`@Y
endstream
endobj
-434 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /HXCEOC+LMRoman8-Italic /DescendantFonts [ 1352 0 R ] /ToUnicode 1351 0 R >>
+438 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /HXCEOC+LMRoman8-Italic /DescendantFonts [ 1368 0 R ] /ToUnicode 1367 0 R >>
endobj
-1352 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /HXCEOC+LMRoman8-Italic /FontDescriptor 1348 0 R /W 1347 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1368 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /HXCEOC+LMRoman8-Italic /FontDescriptor 1364 0 R /W 1363 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1353 0 obj
+1369 0 obj
[734 ]
endobj
-1354 0 obj
+1370 0 obj
[1123 ]
endobj
-1355 0 obj
+1371 0 obj
[777.8 0 777.8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 388.9 388.9 ]
endobj
-1356 0 obj
+1372 0 obj
[ 28 [ 525 ] 43 [ 489 ] 50 [ 511 ] 64 [ 367 ] 66 [ 256 ] 75 [ 867 ] 77 [ 561 ] 82 [ 550 ] 96 [ 372 ] 105 [ 404 550 550 ] 116 [ 500 ] ]
endobj
-1358 0 obj
+1374 0 obj
<< /Filter /FlateDecode /Length 23 >>
stream
xc```P`X P

endstream
endobj
-1359 0 obj
+1375 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 1716 >>
stream
xڍU pEUM,@+v70 X6e -ǀqL!`VK>eKeZ?K1`[4@
@@ -5828,10 +5930,10 @@ NIcO>ܷuecM·:tZ"K 4Hp'L4)v(*(8G:z<9
3##g< AjSS
endstream
endobj
-1357 0 obj
-<< /Type /FontDescriptor /FontName /QJUVUX+LMSans10-Bold /Flags 4 /FontBBox [ -460 -297 1761 1134 ] /Ascent 1134 /CapHeight 694 /Descent -297 /ItalicAngle 0 /StemV 102 /XHeight 458 /FontFile3 1359 0 R /CIDSet 1358 0 R >>
+1373 0 obj
+<< /Type /FontDescriptor /FontName /QJUVUX+LMSans10-Bold /Flags 4 /FontBBox [ -460 -297 1761 1134 ] /Ascent 1134 /CapHeight 694 /Descent -297 /ItalicAngle 0 /StemV 102 /XHeight 458 /FontFile3 1375 0 R /CIDSet 1374 0 R >>
endobj
-1360 0 obj
+1376 0 obj
<< /Filter /FlateDecode /Length 422 >>
stream
x}Kk0stZA04I .O[GX2ȿ[(9gFgƚ{.i6e^5-M&+#u(Qj{ ֈ;.UUw̅^:nZN?k^>eۄG %k8 ImאrZ.MkY<xUZ!!l|^ 
@@ -5839,83 +5941,90 @@ x}Kk0stZA04I .O[GX2ȿ[(9gFgƚ{.i6e^5-M
և! PTa$M%Vzl9'g/SfK co,]#gI)]e<hmsrftŒ\DWDgD7g3#eN~t,zkݎK[TAc_w2
endstream
endobj
-399 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /QJUVUX+LMSans10-Bold /DescendantFonts [ 1361 0 R ] /ToUnicode 1360 0 R >>
+403 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /QJUVUX+LMSans10-Bold /DescendantFonts [ 1377 0 R ] /ToUnicode 1376 0 R >>
endobj
-1361 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /QJUVUX+LMSans10-Bold /FontDescriptor 1357 0 R /W 1356 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1377 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /QJUVUX+LMSans10-Bold /FontDescriptor 1373 0 R /W 1372 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1362 0 obj
-[ 27 [ 850 547 ] 34 [ 800 625 575 ] 38 [ 575 575 ] 42 [ 813 500 ] 46 [ 862 625 ] 49 [ 738 513 563 ] 55 [ 344 563 563 ] 59 [ 563 ] 62 [ 880 625 375 419 313 ] 68 [ 344 ] 70 [ 594 676 313 ] 74 [ 1067 938 880 625 563 ] 80 [ 845 563 563 769 625 438 438 ] 88 [ 313 ] 90 [ 845 594 ] 95 [ 839 460 625 444 ] 100 [ 563 563 ] 104 [ 782 438 563 563 865 625 ] 111 [ 850 594 1162 813 850 594 ] 118 [ 594 688 500 563 656 ] 125 [ 625 ] 251 [ 513 ] 277 [ 513 ] 319 [ 625 625 ] 446 [ 875 ] 502 [ 313 ] ]
+1378 0 obj
+[ 27 [ 850 547 875 ] 34 [ 800 625 575 ] 38 [ 575 575 ] 42 [ 813 500 ] 46 [ 862 625 ] 49 [ 738 513 563 ] 55 [ 344 563 563 ] 59 [ 563 ] 62 [ 880 625 375 419 313 ] 68 [ 344 ] 70 [ 594 676 313 ] 74 [ 1067 938 880 625 563 ] 80 [ 845 563 563 769 625 438 438 ] 88 [ 313 ] 90 [ 845 594 ] 95 [ 839 460 625 444 ] 100 [ 563 563 ] 104 [ 782 438 563 563 865 625 ] 111 [ 850 594 1162 813 850 594 ] 118 [ 594 688 500 563 656 ] 125 [ 625 ] 251 [ 513 ] 277 [ 513 ] 319 [ 625 625 ] 446 [ 875 ] 502 [ 313 ] ]
endobj
-1364 0 obj
+1380 0 obj
<< /Filter /FlateDecode /Length 40 >>
stream
-xc``6.z߿o~€
-X@4c8
+xc``6.z߿o~€
+X@4c8
endstream
endobj
-1365 0 obj
-<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 7313 >>
-stream
-xzw\T׺afa{ރޢbW v@z6t3kfHb1Xr5=D9o xNr{=\D.z<k!)Hdyӂ- ƭ\.8-h;>Y"(d )aHz 0/bcݵ7l"BQ"ԟ|5- %? S \l3{Q"ʎb)d;'O0xwtOɓo:CDr]aJ U#U_ [2KE 6fro228_Izxyz(#<<C>%+•+}wyy*'LP*<=>gN=18{y&lR@Ca,Mp\z.^xbxT+8T6-o <=yxGS䃥SCapj$5K&R);Ի4j:5EͥQ"ʑZB-S+*j5DQzjrP[+FS'CR~?@Rn*
-¨pJEERQT4CSX^Ye2K謩X[]F9VCcWHJJ5ia}{>}e}cc7Q6F'{ܟ^ؾbIBRܱ{YAA44-g ^;!wTf*u!UdfaG<2qE&; դGX*5i3ef6Uwճu707#>CS<Y<<f~FZ_t@o8&4:aѶDjEU2VPY .bg'}[St]C}ԊB.߸U׎ywNl5as^\ƵIP57Aońi[܍'~
-6?#lhB+ LC&<C8=mQ<+}1y]k++H7I<్N lKgx!?y˗u=:#EB.Vhu\W*6>612MN~'ɉbK
-X^)8Yj7-$,@y $fjз ]?΀]si.3(y* U>i60 EZaiGT4^ @x:Up°i_if
-G`/cHihA(SIx$: 6X >$ӋQRVNRw/b㏟vyM:j4Z>33!.q;S[u>s6`Xi<I0
-44}R$A. Qx
-
-O`[.f) kł ؙU/j;ʈ,:]ÞδVhWn. ,@~}T}?x>=vo6Cٖc3alsbuFQI'CyOfhpOr9ALȏr(%A$S,48\m#g#H!Ĥ4j3Ҹ!T[Y<B YNKچ;[f7dG`[|1/I0H%c#U&iSj3*l2Q{.\k%Jku}/ZZ4o솺5=8,帉sg)7PGKqdapJ_˸.ŬY G;'8fQ0Fֵ8Œ"w|R+aw1E'&Ư]i}4{yTx 3Rf,k59\\RrT>V9GPcG-P' 嶉+@6[<dWrk*@*eVޏѱ|ce&99S۷$:oLVbxBG=z]AWRdj}&^^+K>JTj^~2yEo4ɕaa
-.y\J&OWZX̅<K< ܙh 2 YzifzfF*ڷÞcۑTNGMEO@׿9ng-×>E<H$n$leO]ogv4Ӛ %fHĻ.TᲥ߽"3Bz
-yW'ؚ3=Gls1y~D}h %K;dg^%]wwݺ\GuKJo~Qmtp?pXG
-o3
-vK}>C;䷠pBHRj)3PMP]O {SHohڋ7<nG:d)`aB&H2 %x؃₢,KH$bC>wfdeh4<^GWZ}{LW](.+*-~x|~n
-i<1)`^V4ͼLYGQ=Sc \*I%Y#’_P8GwgI-q!YLruu zڨVoҪdJqjA*W%YK*jC28Mt6 '
-a$.!3BJcP-f^GWt8}]X~1KWp|_?g^s0ٶ|` \Lq,C0|i&.^J<9;LTU515!~1;qyAM
-
-9<bqiѽ?oAtf]b'.ԯcdՇ;Qrpꬁ
-ġ89
-{coPbM)9P8}#u|eǞ[|bxpwfyEF12hȂ PV
-I
-gp]{wS0/x` MÓ8)%f,L$ #'4l;HF8rǬK.?mc֬#j[B/0W0PC;<b
-W
-GEVy!rxHxtuxɓoᷫ8i+*dDqڤdu*t,6o
--5m+7OQVI]Wll.`d
-WEHV2yDGjiN_J@jz/?i! DA5+a !
-oΆ5'ߣ*YtyGoMӠ8.#315=SZ |z1-=|4ԍ;\V= iu1o{գ=ܾJӨ=o ^B&RΖN{1z5)H$~%d(/XX&!!!6IꄥS0KP^mIqn.W\ZP֟`,, !4=($|LDw(}#Wwqu'OsmG.нgFlnƻ.i®O9d)¥ρ/@cN1"t^oDw34k'Ӓ_3HH}$'k \%@، ݥax4+=i3ܚ_(NmAWk88
-!:vjHD=#ԪHIaXqU$Z[j=+[6]V绠kK<7;}l
-صŰ}9Bxk_m#Ș@&:'$4}NKi)y\kmvm6#w-((*<8
-i ],_Чh E6pI a!|W]N~͸Fb 7v,ks><_ T_ Og3})cR8,ƃ`qqnMq=jhU`1 ŗA5 ũ<&&R a^.Q}rƾ;grɒ KH5Mfkk7M2|Inv6GNvi$dB"Kc蹥6Z0ɒdtދC͑&gr,Coz~^20?!#dS(+„j z$|i22aN;Y<Z<H,{"<~|օՋX<ax`8
-6vsV)P\;swwk}Ei^y49ŲM\S,`3@`mF(j/flES>SP$ᖯd5Qz`uywllNes ,~…{hK
+1381 0 obj
+<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 7547 >>
+stream
+xzy|6PJ%3)K7EDARJI&'It_hK)- -)mDvYTVE\r}ޓ{|vI3{ND=%\6/XiŠk"¼ç4͈P_۝łBpC0 CG=ed0HpA䵟 rA8vsM(BԷ@rɗ&O:}AĮĨKS<:Kd2!!A
+p_ŲɊoEēA
+@PEb"6/*Z+zdźhE|DT UĆE)bׯ]Q4IS=eJLl䈨)dLоASlMXֺI+.XEcbQ
+_[H/F FP#Q;5OM&SSiK j&5CNAͣSoR )j1ZF-VP+(Oj5ZKS(/j3A))oʇ@*
+BP*vQTMPqT<@%RIT*E2y/vek<{*z&g]}xx I+=ΔΔ\5z,
+vò}2|?_|bmH=T=^bHn'qM $fXKV2D ͋ElR{5Mבұ~47^
+\\N*DƵ>F!GS%:۴Inrn;s\8\/@
+jC(sm-vșݚ\w6&3Z1YN_ށ4ʧo[v?RzoI3C6N| 8G*+lJBɹ `X`唅qSwFˬFk9GJxr5y 1G"p%=ӡ7ϝ
+_Ui Ǽ;Sk;;ޒyTuۏV/{
+>Cӭ)]ʶ/]Ifg0GJ{1AUa|caۙW@#m?qOzf+<vS
+^ux<.9<`䧺}lElLsx[K1w/eiG w8wuA)82
+D`x8ܚI+sEȗ-qZ}}cGl;Zm ݚ.?YC͌:y`d]xP#dZ]N93quVNyi xa?&S
+ S؊ݶǰ, |.dYyNJ(?2KJPqi%) hEWGGҢNBW5(u-}(.8 LHS(IV[昷LcKFTL`x.rƽIyH& fťľ .Qf:DKxmΥgƯ{.Rb ޽JKMS ɕxx :]w:$Ȫu)HMe^h-x84p+<${z-|ވC8݀ ܼkL<ƑpӀQlYta18 $(=YUp YLaEx&i5-%>Xw. cEXi<)0it Y$IF# %Qx(8<ؓ<3fI`%a:1p+-pI4xɃA>LޛI ٦A!)v˄/\,t.v6vGGx#F=WZ
+Nes"mah-5d[ז&˿:;cOSaL8Ce8C?;Rg&:*|e߆RX!+^ww3OSڰ]MnrX)cO}phL擨\a-q|iDI~}'/{esD-ԭOl{MlJF{ɝz>BI⮯@j'~ ,0{~桤 7>HxOt*S^)R3;[֛+8Š0h awD+MN3;d(9G3T&T2vԞѱK TPJᘋmVel)y
+'N@%z]I1WQfn}&
+N^`kF M. yl/̧QUb%,"i? MOr| # mңqy5Oͧw)%XQ=J8qX̭{}Qh%OJH +9{utʘ5r K`̾/W7Gq{,G/Q;.Wʋu\%;Վpoړ_*x61cʉʃc=d+,Tc׀U \wzLlu
+5n]]ք+P
+ ZȆࠨ®'vjdVXj-6wu15RNͧr
+<B]GqIY
+KȵHC`fٞ\˰XPҌNb5]y(9]UVY^_TWf^Q&)rFOt{.PwT wRב`d
+⭡V ^co(|@:<g -qsiʟc\ǽa6]"YAt\qVA%e,"K^j&1^&-njC C4˅:{~
+ӫ’Zu6%.t=e;N0DY)zeˑ}Ch}ȷۻo]}r9;a-qI6<^} ;˫by]n'ŢEBE41sQZo4Mzoic==#hqiV[h!T-g^Ct{9}n] WX~g1[U1[UY2p^kow\p8m 3c `wed̍cyhyV.^
+<54*k.kw5D'Xt'2{P!1;
+XM\P:\vي[Ccmϰw*7V#w"VnS8
+2`GbI0 f<9X"haWkwET-rҘ<˩ IN٬A!؎e|O=&6NĿTvtP?dz}E@.T 0ⱛR4O0,֑+&av"SH>FM
+^!;Ny"RYG6Eea/PC<zr=Q!':^8]㤸g#;g>`PކW\YN//S (L/&DW\ax{-(Ce[^+<`1A@f}9*ED/ xf*bNjs2T`ԣ}%r[Q0Ɏ 19bs:71sI(0;a 30,12#LIӪ3O66]&s0]0sL'e<Jy,[O-0OQ8w_kG$C>,=#"w||Fk<FmYdJ9)C;yMͻ Ze9+a/Cޟ0Su)y#_#'; ;ClpQgZ0|`3wzOe!{ ܘOɪ3 i ڬ4-)'4.]uQ&}*LR`ͦkʟWr=bS uR)pG[U|K]"_|:8#󮶞a[ɲuxH`a'Oz)]]?Qoc-yx04י0XS \:+)QcJjl4U`/6s塝p ■|E_<>Zt[u\ik:dhEE)Yy NY\x|c-1oH;7y[5Gxɕqa1\8cOB=*t:c WZj,olnn>%xmy o":|/ 〗4p>
+חH*=)EQz.MWWl HrY9yҪ
+yn #"5~6^f硬\yR!͝=e;rTRÁ-XE~,هcy{Oy[_?!T< ރ C!;/.3%]9xbw;98(>ƮX<~ ֔к|Su죶y nXqg M<II;UY #Nu_=xWt_\ 3?)16XyhG!ć=^>\gÇwiƄ=~c^ߚ;/4Ǹw4K칁X9l 3RY\*اNF,Lz{q.*фL@~lXihu8hVU%C𳸼0~uU0*.k4ȇ}EOiBH4;fņFH^ { F}N[UM+?bA}47NʾDZXk|2<t|1L= wF# ث}2~
+ Yl7oX-NX[_[C𣸦H_xujӵO42OZ/'o4nn:?c'+F{mGs iRCvIt<WiYLFlA0 I=/ehw1j*qzCa j4<W>`mGP6}:ƅB\Iydj؛ٽ5 ޫ;]6R{q+GL" ">+m.C7T`w٘>a;j/T΃dlϴX=XdK.E4 JPqyS7HA䩭#B𣆟>n, [i>a*^C`q*+k&ы-HWP`VM$sHr6 VQ )=ՠ*:yy<1p-,ܳ7VӰgt*5<G5t{\"6W
+ռ^RvXn }7vs$x+
+ϳN J9sZm3HKbw0JZ\L0m>q=+0`D'0IϨGL͐zN8a32 f ^L;S%"H$jtYY-o;jɒI}HT&Tkdc"Y' 5uVe2NI wG!u|TcrWNkEl빔 ~Km wuopwMua;W$TV
+ INn^yu%&/WkK:ΐ
+X#OxI$Z1hܒo|.r IVNN_yE"̕fqFIA@ϷyT?ÉNk$#}r+=cwxZyh|7čU+[/d˿
endstream
endobj
-1363 0 obj
-<< /Type /FontDescriptor /FontName /CSWAZA+LMRoman12-Bold /Flags 4 /FontBBox [ -476 -289 1577 1137 ] /Ascent 1137 /CapHeight 686 /Descent -289 /ItalicAngle 0 /StemV 104 /XHeight 444 /FontFile3 1365 0 R /CIDSet 1364 0 R >>
+1379 0 obj
+<< /Type /FontDescriptor /FontName /ZCFLPY+LMRoman12-Bold /Flags 4 /FontBBox [ -476 -289 1577 1137 ] /Ascent 1137 /CapHeight 686 /Descent -289 /ItalicAngle 0 /StemV 104 /XHeight 444 /FontFile3 1381 0 R /CIDSet 1380 0 R >>
endobj
-1366 0 obj
-<< /Filter /FlateDecode /Length 676 >>
+1382 0 obj
+<< /Filter /FlateDecode /Length 682 >>
stream
-x}[k0+e[RSBA`{! ˾5$t ,a -26.ta1a4eDww<_Fu5=k[.ymY!v|VϷ?EeS>8gvUtKc.nX(ô]Ug$q,'.>6*[>䈧LWeO~'g?t9&6ڸ`׷!ڴtFR29%tʴ9ΛɰZh_n;p=49Ė6]/M&8)42VOp
-ݯU'͖8?Зa8M 4 9_yiSl;kSuk*,ʰڥMS;,_U4.
+x}[k0+e[Ҧ@n@/!)5$t&),a -2tm4qs[xk`Q瓱1k{f.gbe%ly<ksͺ43~>ϋuSv>8g>r\ݍPiό?%I>XZ=On]4$}lxUnI$#2]=QYI洲:p]^hjV*tsWÒh2a]ad_|]/:qi Ks-kmfWvg&; k'8*?3W(Ir> 4$R(M2d$H)d tDKrP( H"hɾOB0(s];U<CNZF B''$ȡ,K9I":2"JU$Tg.3/@)3
+xjE$p[])uT Պ
+L2Ee.LAKWВ5% k*"hɨ
+d
+Lt"DZ$""/
endstream
endobj
-398 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /CSWAZA+LMRoman12-Bold /DescendantFonts [ 1367 0 R ] /ToUnicode 1366 0 R >>
+402 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /ZCFLPY+LMRoman12-Bold /DescendantFonts [ 1383 0 R ] /ToUnicode 1382 0 R >>
endobj
-1367 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /CSWAZA+LMRoman12-Bold /FontDescriptor 1363 0 R /W 1362 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1383 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /ZCFLPY+LMRoman12-Bold /FontDescriptor 1379 0 R /W 1378 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1368 0 obj
+1384 0 obj
[ 27 [ 531 531 531 ] 32 [ 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 ] 49 [ 531 531 531 531 531 ] 55 [ 531 531 531 ] 59 [ 531 ] 61 [ 531 531 531 531 ] 66 [ 531 ] 68 [ 531 ] 70 [ 531 531 531 531 531 531 531 531 531 ] 80 [ 531 531 531 ] 84 [ 531 531 531 ] 88 [ 531 ] 91 [ 531 ] 95 [ 531 531 531 531 531 531 531 531 531 531 531 531 531 ] 109 [ 531 531 531 531 531 531 531 531 ] 118 [ 531 ] 120 [ 531 ] ]
endobj
-1370 0 obj
+1386 0 obj
<< /Filter /FlateDecode /Length 25 >>
stream
xc``&

endstream
endobj
-1371 0 obj
+1387 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 6684 >>
stream
xڍz \ĐITc1wuV[m"]p)Rwְ@a_nl{EUgݢM۾c/oB~ ޙw=lڙ<<rٛd1~JۭUv*t$c0R#Ot_rt݁o>K5_0 x1y(ǩ/.p| #x $1+ׯ7e"*^sqy}smt_@"V*J̑z̑z*bWr,/"HzɶHcT2JTD^#
@@ -5938,10 +6047,10 @@ svO֛-5rRtnS8(U[ftF\cs
Ut\PYKJwvB1H( H+WqAR2H5~-۟yei xg4n@K*:8:hq_Z}cGyNoL:;q
endstream
endobj
-1369 0 obj
-<< /Type /FontDescriptor /FontName /BAKNBK+LMMono8-Regular /Flags 4 /FontBBox [ -456 -320 743 1014 ] /Ascent 1014 /CapHeight 611 /Descent -320 /ItalicAngle 0 /StemV 177 /XHeight 431 /FontFile3 1371 0 R /CIDSet 1370 0 R >>
+1385 0 obj
+<< /Type /FontDescriptor /FontName /BAKNBK+LMMono8-Regular /Flags 4 /FontBBox [ -456 -320 743 1014 ] /Ascent 1014 /CapHeight 611 /Descent -320 /ItalicAngle 0 /StemV 177 /XHeight 431 /FontFile3 1387 0 R /CIDSet 1386 0 R >>
endobj
-1372 0 obj
+1388 0 obj
<< /Filter /FlateDecode /Length 673 >>
stream
x}Kk0E!]q,YjK@A٦1$EH:'-ZU)W?^m,of6?mjQ秣gk [\V{b0_-VU_ͫ*?
@@ -5951,22 +6060,22 @@ x}Kk0E!]q,YjK@A٦1$EH:'-ZU)W?^m,of6
I(($*#1]vNUЩZZBKj BePm2 <<Sˠit7$tB4)i-nECmjj<S|[< yJjIeHh$#A#eH0]?q@N0%TOƏͮ0>Ä򳩬DŽmW0/#<,ޣ
endstream
endobj
-389 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /BAKNBK+LMMono8-Regular /DescendantFonts [ 1373 0 R ] /ToUnicode 1372 0 R >>
+393 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /BAKNBK+LMMono8-Regular /DescendantFonts [ 1389 0 R ] /ToUnicode 1388 0 R >>
endobj
-1373 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /BAKNBK+LMMono8-Regular /FontDescriptor 1369 0 R /W 1368 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1389 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /BAKNBK+LMMono8-Regular /FontDescriptor 1385 0 R /W 1384 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1374 0 obj
+1390 0 obj
[ 28 [ 510 ] 35 [ 549 ] 43 [ 472 ] 47 [ 549 ] 50 [ 472 ] 63 [ 549 354 ] 66 [ 253 ] 70 [ 519 ] 72 [ 253 ] 75 [ 844 ] 77 [ 549 ] 81 [ 531 ] 84 [ 549 ] 88 [ 295 ] 96 [ 363 ] 98 [ 407 ] 105 [ 384 ] 109 [ 549 ] 112 [ 490 ] 114 [ 726 ] 116 [ 490 ] 118 [ 490 ] ]
endobj
-1376 0 obj
+1392 0 obj
<< /Filter /FlateDecode /Length 23 >>
stream
xc``T`\4ţa*
endstream
endobj
-1377 0 obj
+1393 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 1825 >>
stream
xmU}TWC23,--% ~`AFH &"H5`˩,JY+ǮG .Zp`Y{T{a nOߙy3{w$" fY|u.!huD3,Fg+Nf%%'ů$M2Z|ӏt9! &Ltmo
@@ -5978,10 +6087,10 @@ C(ŢhJ@kmDP*2(ّKDY|=K׉D yx^^$Zɇ=f0C
`=d(#p
endstream
endobj
-1375 0 obj
-<< /Type /FontDescriptor /FontName /QQGJDO+LMSans8-Regular /Flags 4 /FontBBox [ -446 -314 1510 1154 ] /Ascent 1154 /CapHeight 694 /Descent -314 /ItalicAngle 0 /StemV 98 /XHeight 444 /FontFile3 1377 0 R /CIDSet 1376 0 R >>
+1391 0 obj
+<< /Type /FontDescriptor /FontName /QQGJDO+LMSans8-Regular /Flags 4 /FontBBox [ -446 -314 1510 1154 ] /Ascent 1154 /CapHeight 694 /Descent -314 /ItalicAngle 0 /StemV 98 /XHeight 444 /FontFile3 1393 0 R /CIDSet 1392 0 R >>
endobj
-1378 0 obj
+1394 0 obj
<< /Filter /FlateDecode /Length 466 >>
stream
x}Mo0
@@ -5990,22 +6099,22 @@ x}Mo0
_k;eo{?vqr7
endstream
endobj
-388 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /QQGJDO+LMSans8-Regular /DescendantFonts [ 1379 0 R ] /ToUnicode 1378 0 R >>
+392 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /QQGJDO+LMSans8-Regular /DescendantFonts [ 1395 0 R ] /ToUnicode 1394 0 R >>
endobj
-1379 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /QQGJDO+LMSans8-Regular /FontDescriptor 1375 0 R /W 1374 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1395 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /QQGJDO+LMSans8-Regular /FontDescriptor 1391 0 R /W 1390 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1380 0 obj
+1396 0 obj
[ 27 [ 796 531 ] 34 [ 752 590 ] 42 [ 767 472 295 295 811 590 ] 49 [ 723 472 531 ] 54 [ 693 325 531 531 834 531 ] 63 [ 590 354 383 295 ] 68 [ 325 ] 70 [ 561 664 295 ] 75 [ 885 796 590 531 ] 80 [ 826 531 531 723 590 413 413 ] 88 [ 295 ] 90 [ 826 561 ] 95 [ 782 414 590 419 ] 100 [ 531 531 531 ] 104 [ 767 413 531 531 ] 109 [ 590 ] 111 [ 796 561 ] 115 [ 796 561 ] 118 [ 561 649 472 531 620 885 ] 125 [ 590 590 ] 168 [ 531 ] 251 [ 472 ] 257 [ 472 ] 277 [ 472 ] 319 [ 590 590 ] 343 [ 295 ] 428 [ 531 ] 446 [ 826 ] 502 [ 295 ] 575 [ 590 ] 589 [ 590 ] ]
endobj
-1382 0 obj
+1398 0 obj
<< /Filter /FlateDecode /Length 54 >>
stream
xc``0/z޿
endstream
endobj
-1383 0 obj
+1399 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 7732 >>
stream
xڽz xUvuBwEh*갃 Kd
@@ -6044,10 +6153,10 @@ S&p*|o5:|;G|#apXN:6csJUFBe2`hEASE٨Μ}+Lmyf
<Qv* U%<@t _t2_T'̭?(H]A7qbǟ C<EQ3 ԊKAYTP+__<d=41t9g&}^>`ȳ~k)"
endstream
endobj
-1381 0 obj
-<< /Type /FontDescriptor /FontName /OPWHQU+LMRoman8-Regular /Flags 4 /FontBBox [ -456 -292 1497 1125 ] /Ascent 1125 /CapHeight 683 /Descent -292 /ItalicAngle 0 /StemV 98 /XHeight 431 /FontFile3 1383 0 R /CIDSet 1382 0 R >>
+1397 0 obj
+<< /Type /FontDescriptor /FontName /OPWHQU+LMRoman8-Regular /Flags 4 /FontBBox [ -456 -292 1497 1125 ] /Ascent 1125 /CapHeight 683 /Descent -292 /ItalicAngle 0 /StemV 98 /XHeight 431 /FontFile3 1399 0 R /CIDSet 1398 0 R >>
endobj
-1384 0 obj
+1400 0 obj
<< /Filter /FlateDecode /Length 712 >>
stream
x}[o0+ڇ;RDl^^İ_gjHEh}a|٫C_pXvղ{m'k]vҷZzZL3vZ4\B\v/?>~y|m _+So͸dv}|<0q9 p&MN7{ޝ@DnW{k;>ޯ̦ S6a^M0yk7fˮ?hcևi`6c֣r]Uf<~۱,, jk=telu0&3 8ڀӿJ_eMy"f$(be؋A"%@KOvSs 9P,P]z| H;Dҹ{U
@@ -6056,23 +6165,23 @@ DH *$ Rv"eD MLAP I"NY$g1P (DPRxfxNE~m
tKpBKDТkxie :ܕjʹwJ+e}N>Zpx{ BkϙDA<I_Xd»*^9qEY"~gGn_u{;MΝ~~f=o5д?
endstream
endobj
-387 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /OPWHQU+LMRoman8-Regular /DescendantFonts [ 1385 0 R ] /ToUnicode 1384 0 R >>
+391 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /OPWHQU+LMRoman8-Regular /DescendantFonts [ 1401 0 R ] /ToUnicode 1400 0 R >>
endobj
-1385 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /OPWHQU+LMRoman8-Regular /FontDescriptor 1381 0 R /W 1380 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1401 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /OPWHQU+LMRoman8-Regular /FontDescriptor 1397 0 R /W 1396 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1386 0 obj
+1402 0 obj
[ 187 [ 611 ] ]
endobj
-1388 0 obj
+1404 0 obj
<< /Filter /FlateDecode /Length 12 >>
stream
xc`

endstream
endobj
-1389 0 obj
+1405 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 620 >>
stream
xuR]O`n$8*86DF-&z'
@@ -6081,33 +6190,33 @@ xuR]O`n$8*86DF-&z'
Ezsw`#[mrϪ'[Hmr~3S)~ȻxY-toX} vN^%-5{KZ?,sT[-Z𕢶{6:D u
endstream
endobj
-1387 0 obj
-<< /Type /FontDescriptor /FontName /TMHZDF+LMRoman6-Regular /Flags 4 /FontBBox [ -515 -298 1647 1125 ] /Ascent 1125 /CapHeight 683 /Descent -298 /ItalicAngle 0 /StemV 117 /XHeight 431 /FontFile3 1389 0 R /CIDSet 1388 0 R >>
+1403 0 obj
+<< /Type /FontDescriptor /FontName /TMHZDF+LMRoman6-Regular /Flags 4 /FontBBox [ -515 -298 1647 1125 ] /Ascent 1125 /CapHeight 683 /Descent -298 /ItalicAngle 0 /StemV 117 /XHeight 431 /FontFile3 1405 0 R /CIDSet 1404 0 R >>
endobj
-1390 0 obj
+1406 0 obj
<< /Filter /FlateDecode /Length 362 >>
stream
x}_k0)
`"ڮLXQ{4Kbmaoι7<|d '譶yC&]BQm$PtS̘SAmZbb{޷Y;`Uu2`TR, A`^[ڞ%3*,8 #`s垴6Qo5֩($cμժw3CEiیƓuMS偀$ 0,h.|{^מc D`*MNQD⍹уT 1П\9˥Es2ܺhùvJzCp\%F6 .!
endstream
endobj
-386 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /TMHZDF+LMRoman6-Regular /DescendantFonts [ 1391 0 R ] /ToUnicode 1390 0 R >>
+390 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /TMHZDF+LMRoman6-Regular /DescendantFonts [ 1407 0 R ] /ToUnicode 1406 0 R >>
endobj
-1391 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /TMHZDF+LMRoman6-Regular /FontDescriptor 1387 0 R /W 1386 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1407 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /TMHZDF+LMRoman6-Regular /FontDescriptor 1403 0 R /W 1402 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1392 0 obj
+1408 0 obj
[ 27 [ 869 559 ] 34 [ 818 639 575 ] 42 [ 831 511 ] 45 [ 319 882 639 ] 49 [ 756 527 575 ] 54 [ 724 351 575 575 904 575 ] 62 [ 900 639 383 436 319 594 ] 70 [ 607 692 319 ] 74 [ 1092 958 900 639 575 ] 80 [ 864 575 575 786 639 447 447 ] 88 [ 319 ] 91 [ 607 ] 95 [ 863 474 639 454 ] 100 [ 575 575 575 ] 104 [ 800 447 575 575 885 639 ] 111 [ 869 607 1189 831 869 607 869 607 703 511 575 671 ] 125 [ 639 ] 251 [ 527 ] 283 [ 1150 ] 446 [ 894 ] 502 [ 319 ] ]
endobj
-1394 0 obj
+1410 0 obj
<< /Filter /FlateDecode /Length 34 >>
stream
xc``0/y߿€
0A)
endstream
endobj
-1395 0 obj
+1411 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 7229 >>
stream
xڵzw\W0;hq-;8`/(bA5vQQ@AA
@@ -6154,31 +6263,31 @@ rxCʼ[/\oOOnyXo@ۚ#b'qnj(U><Յ|ZUP(痭=_
yY?r
endstream
endobj
-1393 0 obj
-<< /Type /FontDescriptor /FontName /CWYYJT+LMRoman10-Bold /Flags 4 /FontBBox [ -486 -295 1607 1133 ] /Ascent 1133 /CapHeight 686 /Descent -295 /ItalicAngle 0 /StemV 106 /XHeight 444 /FontFile3 1395 0 R /CIDSet 1394 0 R >>
+1409 0 obj
+<< /Type /FontDescriptor /FontName /CWYYJT+LMRoman10-Bold /Flags 4 /FontBBox [ -486 -295 1607 1133 ] /Ascent 1133 /CapHeight 686 /Descent -295 /ItalicAngle 0 /StemV 106 /XHeight 444 /FontFile3 1411 0 R /CIDSet 1410 0 R >>
endobj
-1396 0 obj
+1412 0 obj
<< /Filter /FlateDecode /Length 672 >>
stream
x}[o1WHvW(y+w<k Ucƞ3ǓI*jk쉳OV0uSGެ*NGc7cїh>X=L-G%~K{KuqcO?._s1v7?MӖ}a}0zZ}om'}Q+nH$zQ2]QYIv渴*Yۮ9ŏQѦ)qOX`ƣшis;o6GvѲ;wvb} K'[Tڴ0M4t.(2V8]W^BşM/J&"dhH!FSwJY2A d1BuI3H"S2I @:t2@@9G3H'tct :s8C$"eTU9~J"P]@g
endstream
endobj
-385 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /CWYYJT+LMRoman10-Bold /DescendantFonts [ 1397 0 R ] /ToUnicode 1396 0 R >>
+389 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /CWYYJT+LMRoman10-Bold /DescendantFonts [ 1413 0 R ] /ToUnicode 1412 0 R >>
endobj
-1397 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /CWYYJT+LMRoman10-Bold /FontDescriptor 1393 0 R /W 1392 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1413 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /CWYYJT+LMRoman10-Bold /FontDescriptor 1409 0 R /W 1408 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1398 0 obj
+1414 0 obj
[ 28 [ 613 ] 35 [ 580 ] 47 [ 624 ] 50 [ 558 ] 55 [ 536 ] 59 [ 641 ] 72 [ 513 ] 77 [ 613 ] 82 [ 553 ] 84 [ 558 ] 98 [ 458 ] 104 [ 786 ] 112 [ 613 ] ]
endobj
-1400 0 obj
+1416 0 obj
<< /Filter /FlateDecode /Length 23 >>
stream
xc```T`h`Phh
endstream
endobj
-1401 0 obj
+1417 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 1852 >>
stream
x}UP]43Y ?1D@b
@@ -6191,10 +6300,10 @@ Cأ-ܙo  fn @b B> ߇6'Q0N-ͺ*jq
C?Uks> n=Sߗ]{Uduk4ZAa 0ǰ nwpWB>_`:׍k78L <A¯‘:t@9[v?ӍN4?tn@g@Q[Lh$<xL{״0Q/o^L=S+= #L<B 묯j-nOb)׉x|? CT3: ~;EՕ.%+XʧZ> pJv3^ !N^[;.Di>Ȝ^ԏ+>n7PeЙ^/n
endstream
endobj
-1399 0 obj
-<< /Type /FontDescriptor /FontName /EYRPLG+LMRomanCaps10-Regular /Flags 4 /FontBBox [ -496 -290 1501 1100 ] /Ascent 1100 /CapHeight 683 /Descent -290 /ItalicAngle 0 /StemV 106 /XHeight 514 /FontFile3 1401 0 R /CIDSet 1400 0 R >>
+1415 0 obj
+<< /Type /FontDescriptor /FontName /EYRPLG+LMRomanCaps10-Regular /Flags 4 /FontBBox [ -496 -290 1501 1100 ] /Ascent 1100 /CapHeight 683 /Descent -290 /ItalicAngle 0 /StemV 106 /XHeight 514 /FontFile3 1417 0 R /CIDSet 1416 0 R >>
endobj
-1402 0 obj
+1418 0 obj
<< /Filter /FlateDecode /Length 430 >>
stream
xڍM0C {Z,ub؏i
@@ -6203,22 +6312,22 @@ b!&ޅRB 6~<|v}Qa|[6D9F'Z#ôVVWZ\ߢ
RF)O_J [.!vUkVU {:~h
endstream
endobj
-384 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /EYRPLG+LMRomanCaps10-Regular /DescendantFonts [ 1403 0 R ] /ToUnicode 1402 0 R >>
+388 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /EYRPLG+LMRomanCaps10-Regular /DescendantFonts [ 1419 0 R ] /ToUnicode 1418 0 R >>
endobj
-1403 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /EYRPLG+LMRomanCaps10-Regular /FontDescriptor 1399 0 R /W 1398 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1419 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /EYRPLG+LMRomanCaps10-Regular /FontDescriptor 1415 0 R /W 1414 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1404 0 obj
+1420 0 obj
[ 28 [ 500 ] 35 [ 556 ] 43 [ 444 ] 45 [ 278 ] 47 [ 556 ] 50 [ 444 ] 52 [ 778 ] 55 [ 306 ] 59 [ 500 ] 63 [ 556 333 ] 66 [ 278 ] 71 [ 625 278 ] 75 [ 833 750 556 ] 81 [ 500 ] 84 [ 556 ] 88 [ 278 ] 91 [ 528 ] 96 [ 392 ] 98 [ 394 ] 104 [ 722 389 ] 109 [ 556 ] 112 [ 528 ] 115 [ 750 528 ] 125 [ 556 ] 251 [ 444 ] 257 [ 444 ] 277 [ 444 ] 502 [ 278 ] ]
endobj
-1406 0 obj
+1422 0 obj
<< /Filter /FlateDecode /Length 35 >>
stream
xc``\8c‚#3XP2`
endstream
endobj
-1407 0 obj
+1423 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 3950 >>
stream
xX TSW>NT9M[vQ[Z:Q(jWx(
@@ -6241,31 +6350,31 @@ Qm!5;~DM1S=RH$K#aF@ l~ P4dFf,u@{gȮY
ijYZA+|}l7MҮ%A٠n>u5f˛AANb֠5
endstream
endobj
-1405 0 obj
-<< /Type /FontDescriptor /FontName /ZSUCQN+LMRomanSlant10-Regular /Flags 4 /FontBBox [ -457 -290 1446 1127 ] /Ascent 1127 /CapHeight 683 /Descent -290 /ItalicAngle -10 /StemV 93 /XHeight 431 /FontFile3 1407 0 R /CIDSet 1406 0 R >>
+1421 0 obj
+<< /Type /FontDescriptor /FontName /ZSUCQN+LMRomanSlant10-Regular /Flags 4 /FontBBox [ -457 -290 1446 1127 ] /Ascent 1127 /CapHeight 683 /Descent -290 /ItalicAngle -10 /StemV 93 /XHeight 431 /FontFile3 1423 0 R /CIDSet 1422 0 R >>
endobj
-1408 0 obj
+1424 0 obj
<< /Filter /FlateDecode /Length 531 >>
stream
xڍKo@Y8I,%KH I1B-ǂߙ9c"UUT$1a=wEs$7lO}3v%k:ٺ)ǚ#$h޻i`tjS[Y^FASֿ^\ɏ}+~۹__M]R\kpQ5T4?F>1s~H6wV7[L*):+(3Q%Y<]_<5jYuJS*3BZN0A'unWڐPj~G {_6(+䙜2'lW9'J*n䥪瑗hz!?e5(F,ٞ1vy0r|K,ٞTG@sz6=cAY _"(K%PrMNKl^/1{lXl ysl yKHϽO<i$zoY]\uz*I;62osMoE
endstream
endobj
-383 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /ZSUCQN+LMRomanSlant10-Regular /DescendantFonts [ 1409 0 R ] /ToUnicode 1408 0 R >>
+387 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /ZSUCQN+LMRomanSlant10-Regular /DescendantFonts [ 1425 0 R ] /ToUnicode 1424 0 R >>
endobj
-1409 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /ZSUCQN+LMRomanSlant10-Regular /FontDescriptor 1405 0 R /W 1404 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1425 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /ZSUCQN+LMRomanSlant10-Regular /FontDescriptor 1421 0 R /W 1420 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1410 0 obj
+1426 0 obj
[ 28 [ 569 ] 45 [ 323 ] 47 [ 631 ] 50 [ 508 569 ] 55 [ 354 569 569 ] 59 [ 569 ] 66 [ 323 ] 75 [ 939 ] 78 [ 569 ] 81 [ 569 569 ] 98 [ 453 ] 100 [ 569 569 ] 106 [ 569 569 ] 121 [ 569 ] ]
endobj
-1412 0 obj
+1428 0 obj
<< /Filter /FlateDecode /Length 24 >>
stream
xc````5 c
endstream
endobj
-1413 0 obj
+1429 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 2882 >>
stream
x}V TGa`zTDm5ݦ=DkQcQ a8fd@e9f@DD9JtM< M\]1զ|/{ަ_uwU}UٙH${ǚ뵱
@@ -6280,10 +6389,10 @@ x}V TGa`zTDm5ݦ=DkQcQ a8fd@e9f@DD9JtM< M\
'ѸXfݯ6f,r,G4r ݅,ȦI.x"^[ǤӰ(>f!BS˼x3< #'"vЈzxAیf
endstream
endobj
-1411 0 obj
-<< /Type /FontDescriptor /FontName /PTDKAL+LMRoman7-Regular /Flags 4 /FontBBox [ -483 -292 1562 1124 ] /Ascent 1124 /CapHeight 683 /Descent -292 /ItalicAngle 0 /StemV 108 /XHeight 431 /FontFile3 1413 0 R /CIDSet 1412 0 R >>
+1427 0 obj
+<< /Type /FontDescriptor /FontName /PTDKAL+LMRoman7-Regular /Flags 4 /FontBBox [ -483 -292 1562 1124 ] /Ascent 1124 /CapHeight 683 /Descent -292 /ItalicAngle 0 /StemV 108 /XHeight 431 /FontFile3 1429 0 R /CIDSet 1428 0 R >>
endobj
-1414 0 obj
+1430 0 obj
<< /Filter /FlateDecode /Length 455 >>
stream
x}n0y
@@ -6291,79 +6400,79 @@ wDiBhRPm%bGNqT].R_ΙLnp tj nɤTlh@
4AGJHjsԼwyFgh{>"yDz:cVHXb9R"PL\GlDN\lRs'&dk,٠9Hwis.Ur* 
endstream
endobj
-382 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /PTDKAL+LMRoman7-Regular /DescendantFonts [ 1415 0 R ] /ToUnicode 1414 0 R >>
+386 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /PTDKAL+LMRoman7-Regular /DescendantFonts [ 1431 0 R ] /ToUnicode 1430 0 R >>
endobj
-1415 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /PTDKAL+LMRoman7-Regular /FontDescriptor 1411 0 R /W 1410 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1431 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /PTDKAL+LMRoman7-Regular /FontDescriptor 1427 0 R /W 1426 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1416 0 obj
-[ 27 [ 743 511 ] 35 [ 460 ] 42 [ 716 460 ] 45 [ 307 755 511 ] 49 [ 678 460 511 ] 55 [ 307 511 511 ] 59 [ 460 ] 63 [ 511 358 ] 66 [ 307 ] 72 [ 256 ] 74 [ 897 818 743 562 511 ] 81 [ 511 511 678 511 ] 91 [ 460 ] 95 [ 729 422 562 409 ] 100 [ 511 511 ] 104 [ 716 332 511 511 ] 109 [ 537 ] 112 [ 460 ] 114 [ 664 ] 116 [ 464 ] 118 [ 486 ] 121 [ 511 ] 168 [ 511 ] 251 [ 460 ] 257 [ 460 ] 277 [ 460 ] ]
+1432 0 obj
+[ 27 [ 743 511 ] 35 [ 460 ] 42 [ 716 460 ] 45 [ 307 755 511 ] 49 [ 678 460 511 ] 55 [ 307 511 511 ] 59 [ 460 ] 63 [ 511 358 ] 66 [ 307 ] 72 [ 256 ] 74 [ 897 818 743 562 511 ] 81 [ 511 511 678 511 ] 91 [ 460 ] 95 [ 729 422 562 409 ] 100 [ 511 511 ] 104 [ 716 332 511 511 ] 109 [ 537 ] 112 [ 460 ] 114 [ 664 ] 116 [ 464 ] 118 [ 486 ] 121 [ 511 ] 168 [ 511 ] 251 [ 460 ] 257 [ 460 ] 277 [ 460 ] 284 [ 511 ] ]
endobj
-1418 0 obj
-<< /Filter /FlateDecode /Length 34 >>
+1434 0 obj
+<< /Filter /FlateDecode /Length 35 >>
stream
-xc``0/`_/@X
+xc``0/`_/@X8
endstream
endobj
-1419 0 obj
-<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 6083 >>
-stream
-xY xSe>!PD9rNDDPVY*;elvB4mt˾ϾvoӽPZe"880
-:{zSswIIN~0離߱mwgf-YM}/*Tp&%O" 1.H2ZfBf2CǏPOGs dy\I"F} 0 +d2&1/p3y4!g…K^}^Y7%>)q9$Ζ9;2%Q.gN&LM$gpR3E9{Ӹ9If6CNNOINIaZ2g={9fmd~N2g<''9&
-V.X N]B&gA؇r7ը{mۼ>rǞ\!'%3,GfvF|ڤ̄I|!WyyyyG dYB Md+ َ@v!=^!H$#i9 Dd#BD!EͤA?#G3)f<`m̑7H+}6ZHwNȎIdӏ
-6lCXMXٔo d=]'&>1Ga/cx“']3D]x0<,a~9]Wf~Z5
--I nM>0
-<\`Ds,09W te UEJB-l@?b]v4B5F{kۈ7|rXKlWC ‚HmQf!M:/mFuV-#|%ȓ9AP
-ii9JI~3QJ_ ?\EcuMnQs֓]_Y+N7%'֟ҵu&l*rщ_3OQ+B̂{h.&j\j7gKALb7%֙* װR㞝ljqGF8fS_bKsceW^8N JԔZI(5~tב]ڑiUKV-{sUVTVQV07
-V 0`6Vp8Ao2HIL: MIVo4G+ 4
-e:OEAt٨RQh3GyG!#"m-zQ*héj|xVɍ8
-qY:
-J +RUdK;n7*M7'Īsej E`;gȏ2`,`.\l*)Թj=p^Mii{!3j2
-~#KM&2A%bRO|
-FtFa܅& -߆TY#IVd.PN
-;YVn*vӧ?UZ.\-5uhqU`o&צRsul)-χpW'Q5d94Y`I5 hوpN}0]UyRqcssY28DŽ-נ]Vhd~n|?ב)#ԤI
-SNtVemXoK[
-wU<AyKpT0M
-FY{Nbkg|Vٷ7^u!hwX{ ]*{<(\8\RϖM%FTeX˺2E;2
-L AFeée*O&3bO~/07Yku~
-;vt?ݚg_=w)UsO)<]`)
-St8b=k޺x!G37Y9&i8A~k0?7Kh̥48}jȫDiERő. q Vsd @ZI) <Zs]DG^.X:mPnd5\{[g 7`ɝ/62i"$E
-ɤP1{_%m0Kp wB!0%
-]+J~v+[mz Vnh*5jLN"fOQȾ4B&اұ,Ry ο<@cy8 7Hub5Uow(O(1#۟е|˗ Z☲O Vvp `"03?fPNO~+ 8+(bóFۏV=Q(A$&"CIpA]d
-7]l5F[t j;
-GOk?8}<oѧzCԕWZ9bg֓KP$
-5U|EPcִ߶ }vjjK*m\i fUK
-i !<՜(zv ~@5#٫/(Jƨ'FSCU^q\Cw[(@O$H6m3\ҕN*H}'Po欠bHq}7rUlt'
-)\n) 98lrkK:C->tT]yRQqb4p^o
+1435 0 obj
+<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 6123 >>
+stream
+xyxg1<fB$tBqބlYUԻ>*[{ kJ K I6޻Od?{>W~,#y{ 8a03eӖ/ܵ/+3tm N{炳A(| b AH<e&vgjn(;tH,,z߇YO'MW9X/ !2|0PSxe,yeS??.\dϫ#7.ܞr9 "w-ܝ%r"e"S2R#R#Fd EHFrߜܔH!/9%'Rod;9I)ܔȅ ##sSR"ŋ´EY9iS.P6EH'LʉLN$p2r̄ Y)ےSx 8,<2Y,F"ːJdYG^G6"[d' ٍE!Q$GD$IAr"AGN/,NX,MDw 11G&AЛIؤ!igN3B=a}SNS5ӤF><Bv;Lf~Qg:gHDMGcbƅ'[+*Pwa7-xN-א r1`zC6Z&V |PH)\60֠\Y\d^`!:-mV$jT
+ w0?3ϳ*B _g(s4`-j-fVU`SpqqI=A-菺~t7y!j;jdE"-yljך1Յ
+_<}. '_~r lJEv30>3ۦtFBE,ܰLW:Wj`[3$5 `SM͝wagp',/"xGD! -:nRN:[,XmDkwK
+xazQ'" 3᭟0˂5J *PNC |zPnҨco@ /^r\ãWH;9a->,mm.;3dAh6"fK5$|>x1񲗒"~}yڽYm̪ ݅n^7 "E
+jcGJ+;pc^I^!6 kXmq NcA6s3 FQIXKL
+3Q :4VKr
+]XpkǝUb2S+c
+EYmmeA <3`}'+o%R~x& p P }RИzѠ%űd<.]#-Y-ד_jT
+DZSm':\hw;pl_;٣<M;ِ>HصeOG4J 85Dͣ[qj˭3=^/)Z);eq"%%"\<|*NJ IrRG?~ﶏ(1tݽ
+>x
+r<u*u*IXrMٯ[KV"<>ή*gr\a9L,'__d–kj.4 /!בi#zԨӊ7S:+k+, wU]ZGx/p
+jfaIg ~^g0f$缻dٴ-b pCG:l~1ԅnCшJ_^M*dBT.x_Fc4ɈDy-1mmUp`0dod$-&9];໴30/̾
+ s!G+ݣJ4p1Vczh~J~8/z
+瓏xɽN v'y
+E[7>
+]7[
+M쟮0Lv
+Tf<-=heSQW@יUyQ"=Vmv} p)~:l`z02Z/N=VyRQ+ 2xRc#-նU<ڧbwֿOM#_Gxãqa8[IWJc:I޳{M?:TFAyXˢq49s |B:-_)Q3Toɾ-vjr4:UXZL}
+O]g9A!s3~4Z"1z055)K[dNה%iah-Q/S6t14epUϦ*'yeer(!RkBP"uw[D
+,l6u!S UN6( љ@+T*- ls3g֟]^PQ"UaYt1 Vavփrj.x{H|tѢ3[*,)#<"'ڲM8g{hʦFeuy*s"rtGwYnZ]
+%ᖤrf\5e@ãMiF~1@8O6⇶/oc^GM;{E6dV7,8%Ek|wێM
+j‡%,'X!Ú|弘hVN,~pM٫+(eC-ѣC*;]tn~LZĭiV#%[YNk!LKverh |>2dcpҺQVS;'`hgM:
+
+_rY gtiuN .)򕤪kHM6*.|d=atSBLR)mf
+01K鰘iK_q?:(gvF9zhuj\xpsKO:
endstream
endobj
-1417 0 obj
-<< /Type /FontDescriptor /FontName /HOLXNQ+LMRoman10-Italic /Flags 4 /FontBBox [ -458 -290 1386 1125 ] /Ascent 1125 /CapHeight 683 /Descent -290 /ItalicAngle -15 /StemV 102 /XHeight 431 /FontFile3 1419 0 R /CIDSet 1418 0 R >>
+1433 0 obj
+<< /Type /FontDescriptor /FontName /XVGCGS+LMRoman10-Italic /Flags 4 /FontBBox [ -458 -290 1386 1125 ] /Ascent 1125 /CapHeight 683 /Descent -290 /ItalicAngle -15 /StemV 102 /XHeight 431 /FontFile3 1435 0 R /CIDSet 1434 0 R >>
endobj
-1420 0 obj
-<< /Filter /FlateDecode /Length 579 >>
+1436 0 obj
+<< /Filter /FlateDecode /Length 583 >>
stream
-x}Oo0=8B(-R ]@^ClHĉpۯ7ijZ<{x; Q<r]}k ._VuqR
-)jں8ȞFoTq 9-zR}J6>w}}yU<nZ.7e o̶-ۮ9Le]3-d\*Ҫdw<ߢQÇ{jε3^ۭɮ-ՅQkJN2!ϺhWMղ㽑̷akBHgC)OH%9N@- gCqz 2
+x}k@W>!u9HXTJ_c2vf3sʺ?{9:zߺ˪K7l#ԗM_ΙLVmyj_duo˭4W;-Uy<UI~[bN~iByX.7vx Uf|~[ȼ{ι SU6hK6}UӪlow<Uu9e2aMXF?ۭ[_ɾV_lzcGٞ(>;I*yЭuFE#+]Νde m%(e_/,t<aKuSP .okSqzR ZBp.&ZYSPeZC
+<"s@-Q#z.D%ly uHHI=K6&
+"x v h
+$/h49BZb v]228eKK<ds| ~Wl.V^_6{2wVLΜ/0< >c
endstream
endobj
-381 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /HOLXNQ+LMRoman10-Italic /DescendantFonts [ 1421 0 R ] /ToUnicode 1420 0 R >>
+385 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /XVGCGS+LMRoman10-Italic /DescendantFonts [ 1437 0 R ] /ToUnicode 1436 0 R >>
endobj
-1421 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /HOLXNQ+LMRoman10-Italic /FontDescriptor 1417 0 R /W 1416 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1437 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /XVGCGS+LMRoman10-Italic /FontDescriptor 1433 0 R /W 1432 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1422 0 obj
+1438 0 obj
[ 27 [ 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 ] 61 [ 525 525 525 525 525 525 525 525 ] 70 [ 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 ] 91 [ 525 ] 95 [ 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 ] 120 [ 525 525 ] 245 [ 525 525 ] 252 [ 525 ] 272 [ 525 ] ]
endobj
-1424 0 obj
+1440 0 obj
<< /Filter /FlateDecode /Length 33 >>
stream
xc``_
endstream
endobj
-1425 0 obj
+1441 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 8030 >>
stream
xڽz\WאּD *(3Ěcb((,3{cWlAq$kMLbMs} y .s̜<gV@bˎrptJߘ?gWLn*75E${EcY
@@ -6408,10 +6517,10 @@ MU|\hk!y\&bVf QN^)T6+HLYׅǃ"ƒ|v,
Ct?LCDpƦjYMD<7ťr=?;)ZVM41Yl^W1Yq,+VT̨&n&ggHsZZE1t+AX鿘yLV,, <ӗXQڑQK?Y٦U9iiM_/2t
endstream
endobj
-1423 0 obj
-<< /Type /FontDescriptor /FontName /RXYETB+LMMono10-Regular /Flags 4 /FontBBox [ -451 -316 731 1016 ] /Ascent 1016 /CapHeight 611 /Descent -316 /ItalicAngle 0 /StemV 175 /XHeight 431 /FontFile3 1425 0 R /CIDSet 1424 0 R >>
+1439 0 obj
+<< /Type /FontDescriptor /FontName /RXYETB+LMMono10-Regular /Flags 4 /FontBBox [ -451 -316 731 1016 ] /Ascent 1016 /CapHeight 611 /Descent -316 /ItalicAngle 0 /StemV 175 /XHeight 431 /FontFile3 1441 0 R /CIDSet 1440 0 R >>
endobj
-1426 0 obj
+1442 0 obj
<< /Filter /FlateDecode /Length 738 >>
stream
x}[k@+f/
@@ -6422,22 +6531,22 @@ sAs hvb֓ $sҏO) HҏD? !Oނ'L/Eu%+gH~ςG
F#d0JF@02$IT^H|jYUK_]KL/E%4,CN3oӒS %,aNó6)q^ s0' +8=9- RK&>h%.zCK?ҏ}@-?[$YA˓%sq FY$șNqCqLwOm/xy}/M ox.@V4
endstream
endobj
-380 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /RXYETB+LMMono10-Regular /DescendantFonts [ 1427 0 R ] /ToUnicode 1426 0 R >>
+384 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /RXYETB+LMMono10-Regular /DescendantFonts [ 1443 0 R ] /ToUnicode 1442 0 R >>
endobj
-1427 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /RXYETB+LMMono10-Regular /FontDescriptor 1423 0 R /W 1422 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1443 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /RXYETB+LMMono10-Regular /FontDescriptor 1439 0 R /W 1438 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1428 0 obj
+1444 0 obj
[ 28 [ 481 ] 35 [ 517 ] 43 [ 444 ] 47 [ 517 ] 50 [ 444 ] 55 [ 306 ] 57 [ 500 ] 59 [ 500 ] 63 [ 517 333 278 239 ] 68 [ 267 ] 70 [ 489 ] 72 [ 239 ] 75 [ 794 ] 77 [ 517 ] 81 [ 500 500 ] 84 [ 517 ] 96 [ 342 ] 98 [ 383 ] 101 [ 500 ] 105 [ 361 500 500 ] 109 [ 517 ] 111 [ 667 461 ] 114 [ 683 ] 116 [ 461 ] 118 [ 461 ] 120 [ 435 ] 125 [ 536 536 ] ]
endobj
-1430 0 obj
+1446 0 obj
<< /Filter /FlateDecode /Length 24 >>
stream
xc``T |5%aI6
endstream
endobj
-1431 0 obj
+1447 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 2827 >>
stream
xuV TW1 h@%&RFgjk
@@ -6455,129 +6564,124 @@ m׫&IcT щqRm4T!MKUR:mZr껎u4CHNNUJӒbU:>A% iҥ5
ʊKJm)
endstream
endobj
-1429 0 obj
-<< /Type /FontDescriptor /FontName /JZYRJQ+LMSans10-Regular /Flags 4 /FontBBox [ -420 -309 1431 1154 ] /Ascent 1154 /CapHeight 694 /Descent -309 /ItalicAngle 0 /StemV 93 /XHeight 444 /FontFile3 1431 0 R /CIDSet 1430 0 R >>
+1445 0 obj
+<< /Type /FontDescriptor /FontName /JZYRJQ+LMSans10-Regular /Flags 4 /FontBBox [ -420 -309 1431 1154 ] /Ascent 1154 /CapHeight 694 /Descent -309 /ItalicAngle 0 /StemV 93 /XHeight 444 /FontFile3 1447 0 R /CIDSet 1446 0 R >>
endobj
-1432 0 obj
+1448 0 obj
<< /Filter /FlateDecode /Length 527 >>
stream
x}O0=dqwW(@bS@U[ }m?[$xc&|䞳5YE <HuoDdm؇ ul+Uuw&yYR*uK}pK?—_?/¯Bt8 r{j[uGDf(senZ=sn,득 F^%Ke;+<b&>˓\ڎN+锍Lũ FZԁ ?hr69xeLޔ6'b#;Jh]>vf{iŎ#.kImS u`jL.+ Hɿv{I&>T.-iYP 4vĠ HRУg*<8sG9?|Oc3(@s%>AP&DL'M1FLhI|h,T' .?mzM,nO ~{6\<kmV]v+Eכԍ=
ޗ=
endstream
endobj
-379 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /JZYRJQ+LMSans10-Regular /DescendantFonts [ 1433 0 R ] /ToUnicode 1432 0 R >>
+383 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /JZYRJQ+LMSans10-Regular /DescendantFonts [ 1449 0 R ] /ToUnicode 1448 0 R >>
endobj
-1433 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /JZYRJQ+LMSans10-Regular /FontDescriptor 1429 0 R /W 1428 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1449 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /JZYRJQ+LMSans10-Regular /FontDescriptor 1445 0 R /W 1444 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1434 0 obj
+1450 0 obj
[388.9 388.9 0 777.8 0 0 0 0 500 500 500 500 500 500 500 500 500 500 0 0 0 777.8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 277.8 0 277.8 0 0 0 0 0 444.4 0 0 0 0 0 277.8 0 0 0 0 555.6 500 0 0 0 394.4 ]
endobj
-1435 0 obj
-[ 27 [ 750 500 ] 34 [ 708 556 500 ] 38 [ 500 500 ] 42 [ 722 444 278 278 764 556 ] 49 [ 681 444 500 ] 53 [ 278 653 306 500 500 785 500 ] 62 [ 750 556 333 361 278 514 306 778 528 625 278 ] 74 [ 917 833 750 556 500 ] 80 [ 778 500 500 681 556 389 389 ] 88 [ 278 778 778 528 ] 95 [ 736 392 556 394 278 500 500 500 ] 104 [ 722 389 500 500 750 556 ] 111 [ 750 528 1028 722 750 528 750 528 611 444 500 583 833 ] 125 [ 556 556 ] 144 [ 500 ] 167 [ 750 500 ] 207 [ 444 ] 234 [ 375 ] 250 [ 681 444 ] 257 [ 444 ] 277 [ 444 ] 283 [ 1000 500 ] 319 [ 556 556 ] 343 [ 278 ] 428 [ 500 ] 446 [ 778 ] 502 [ 278 ] 575 [ 556 ] 589 [ 556 ] ]
+1451 0 obj
+[ 27 [ 750 500 778 ] 34 [ 708 556 500 ] 38 [ 500 500 ] 42 [ 722 444 278 278 764 556 ] 49 [ 681 444 500 ] 53 [ 278 653 306 500 500 785 500 ] 62 [ 750 556 333 361 278 514 306 778 528 625 278 ] 74 [ 917 833 750 556 500 ] 80 [ 778 500 500 681 556 389 389 ] 88 [ 278 778 778 528 ] 95 [ 736 392 556 394 278 500 500 500 ] 104 [ 722 389 500 500 750 556 ] 111 [ 750 528 1028 722 750 528 750 528 611 444 500 583 833 ] 125 [ 556 556 ] 144 [ 500 ] 167 [ 750 500 ] 207 [ 444 ] 234 [ 375 ] 250 [ 681 444 ] 257 [ 444 ] 277 [ 444 ] 283 [ 1000 500 ] 319 [ 556 556 ] 343 [ 278 ] 428 [ 500 ] 446 [ 778 ] 502 [ 278 ] 575 [ 556 ] 589 [ 556 ] ]
endobj
-1437 0 obj
+1453 0 obj
<< /Filter /FlateDecode /Length 60 >>
stream
-xc``/߿
+xc``/߿
 , ^X
-8 &#
+8 &#
endstream
endobj
-1438 0 obj
-<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 9131 >>
-stream
-x{t׺hDs!3{ - ; "WlEV*r/&{s$@bBB( 9d~Yo$9!w]h{#1@Ŝ-l@ ǬY\  7
-9'{4pOOh
-sr tZ2iXQU?AN^nNN6:Iý|‚!#: w
-wyx{y:I<œ"|:] 8(iWPӘ1NN^^N!!3Λ'|\@M㬟`uc-psp '%. t +(/"hl
-v`롯r;HEovo8r8X6&h3f#d3>%[XT/0yTrԷF}
- ̇ |TLx
-.>J
-qj:))ٽʻ(X y3{/,%Sf$J&{)nJS
-n&΀]ץtRu.z+i{X'*_
-$FmRhLZD0&&&"c8MP)Yy~3-?j&?^a,ReYpR+ $5Kq
-q<
- CAx4e>]te,L"@L
-}ۃobyK])2(AlE|/" Pa͑_@ubC
-@jI"
-j
-J+{Qw&#|Ǐ#(#O"ۧ<vOonӟ"lk7L^ZZG÷~LOenP4%9jMa2˶):
-+gw56;2 tjFH%Ry9% 0IgAWi
-L,yIU^ `]GM#.8z}:Nz wuc]ÉVGqDp0s5|ـ
-–( {Ck
-x 7g@+
-yƆ0PfZ042E;JWS]Vıj|:+J^\{ g2k.]48aPk\yF`BXWJΠՄ?/;v!J||i!SiU#^}ϏlWt/W>bBukeӍ/
-Ail"y9YU-ۡK<;РRb~븟%U~RZAjK\ٱ/?#7q^'kVI$b J۴v=C/g|Xr`/waI0__hvŭ"ZEEnp&|7I8F[umu=yҴKʘ Oq 2*YJ%7s~_ puWfBBh5@{T\RRJ*1^
-ybTg$g'$R :5X3IB틶6K-ǽXD…Zd1j4b^L,jyK9**>*@sx]W<?#.o l]CE*c:F<*Fye=Cd<ƘOO;a\- ?d"rg<p=g4y_Qa̼Y*l#UkLyͲ <{1caA5LJB҃fB:&EP w7&F30[[ݬ6 V\c'']AϣK/\qMOy P6Ge [NMecN<A~f
-d&F3jDju[Ԩ0\QG5L:da
-|tDue2˕YjJe+j|MEx
-<iBDb6"D$J0^'Π[Cgu- [NrS{8?h|9+r%PİFfyH7rdJIB,sB7/G3pMWHضE 8|5~uhϠ:X/%QQ  *䳐KKKAI>a_J(A]15/㩧ྦྷqFR&'IrANIR3r@WzkخK,ن>pG}!#]?)?h)U
-)1@AMY} j+ez\#m<O!WK^5Rk<^~CD}ۏBՖ5F-|-1?&X'lhW|~"xfǍXgg}Kw `HT53_FoN9C<p;u%U< AkFuX5kWf_X$V%ŋ!7f$Y !\ԀR>W!*۞#8{[RP:gk<}S< ?im2S ZFJ vMu6φ,y3Zp'KBNWH.zj)'PWO ?4i3 tH/a6<V'2k@4N;>fkPM[ZZ-. ٱiԠY3O(/9@j  Ր2g̗|ichǛ%CP!r}$ksuYnYⵆEygʖ{.}B$&6T 1Q*Jq;I#Ek} l]hx1yݨ:ncTw<ZR~6I5F۾2>b{csWbNLA)3aRSuJ/> ݨB.O"+Qa7tr7A =Dl?B%9Qd F_oH5ZF
-EP<<  )ևY--^x@uO
-N/Ja@A1Vp>Fx@.+.zFk%4UMηv ~SpYWL2/][r:l1'{fgdF(R4E5"ת]ꤷr &
-b#n<g<|9ù꒴SHiHC܉M>gĵG!27EJr3{?Β?Ѻ Zv2PS!"\j.v2)۟@yw%S 譨 a~0EPE!q(*bt {` [ Cf5d u r/G=^@eܩ'K-ʉ,I
-ΩݽpEescKA+
- S"pV O:⨸49|ƌ͠
-
-K5 )ȭmUzA l] T[_e*^[iT
-9[K+5?cgTr5C*; fٕ!4"Nl)rMGeh1<¥Se&~[f-&>͒=2if3': `\̎%ߐfualV%2CGF\&P/|cd lN`)MH
-,~w%n~mzrnXwAڌ -^:L>J[Դ\lPsMvsVv<8K]m<=J6m1K؜`2d1Ӎk7FĖ$֮rR1MAkCHa,P73ŒC1~7nI2*!kªeHN N<h" (x}?},H!U*'\mL(eU8jGeBIyyaus&4DnǠnoޛHLpgQ'o%(JW^6hH hI۶+c2Vjd)7b+(tH
-&O5~'|B*|w !wp%V[?|ys̮l".)Y$g^? Gu
-{Ba-ףP)ؿ"{b^  hJ^<d!Y F9w΋4DZ%ճ$C9ּ WdMlp v1Wb,;>q1ӈd`6Z)|rйԙ=E@qn IJbكn#8l}[\ f._>sօ7pKƣ:}'Nw>u?D G!=<@Q[*R
- A}# 9Z+))) 2R әQaL_Xwb'2
-88%1'%]Vfء^<^EE `mD4뵽n|%]PJPj6pKU*RE)5JЌ)bFZQ^W뒒[ $ZNe^r3XVhJdY
+1454 0 obj
+<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 9343 >>
+stream
+x{XW쬍(13hl{{oK,[" FbI%XsvQk3O>fc KVnXhk]Ǝ[fys!ן
+bX,ciX%V}'-'%- iVBaq Żn'NOlVڜ?:(QNO-FOwv׭ۉݽc;qA칶v H=u> K
+%?+}&ovgZ!o G[>:Œ`YwA4#?uA"R<tktzؔaG/4<|D'FY8jѢƶ5 &3-JC˨(sSUtR"b6pT ~ABMa
+&[eqD'H\T:/Y$Ax2v3,xthW}_n"㹨uĚ0Oq [&]4xl*BO]uI`ʢԚmvC5}8֋ب\\("eӞ]j>P1Cut=D^ȻâOIH͈yNjj3R3l2_3Khtoϥ4ӯ&xD>? aJ\6Y aue}|>!!>yo毘5}^8f0i[h#5gV]={ҙZ6L4]ωvpl?{jh.mш:lɴ LmY3uouy0m9VS"qָ5?pߊ ^b֍cl{ӹ/,\&vH<-z+wQoS@VͶ*L&<'"#`G-`Qx_ld$d h31vzݓ0u z2jXXWQY[x 3B&WKA=W$9p/4P_dlf۞xD~ӦhgPNHTHO?Gr.gJnD1
+ 2uln|#JpPȭB%
+m&
+e-Ǿ2pPPQyI/d^RsHK.du$dx'qT$W1xn}
+ZƠ%l(+ea"Q2d
+HHf66NUh"\;•p3B1o2y\o7<raWIv"P&r3*hi~>8Nt"ڻuSТʊ]jzFz=
+Őݲ[h`+WBJ˃Ãë˫tOOّ
+Fr9'&$40.?/=ht*jH˹u |JVY
+fӨRxjĚ`Qh,`3)GI xv+Q{¹FA=&jI*y3$қwGAsEF(}DWa]JP~~ߴ~hKJ+[?0 ʣBn.lbKcYx3xܙ1CujLk&Jyo|dǖU> q߶Kp1mɜNwxS|0>F
+X[x9 '4
+MoIWg1=A8ba@{(HbP¯Ȍ:C1u %IPćQQ;K{`gMFς+#(#[&=WnS_ lK77T^RRM>7]’1J&)jsb섹o(&
+y=[կ nިMgB-ukeՍ/64AkDrB<-*\ɒ!^'^[Rf>O`RkwI^#H]#Ym~zHn<[-Y%QΓ #xm+1zӺ 9@fɁsvU|o3K9V| &hwSj1\19j, joK& '#7,n'&.K
+wˊ{x1*"Ǵø]nScCc1㍩
+D`dRa3Y-Z[e~'ȫ]O8־W;4C
+1),
+n;3o64с D:вngl@ph'i(?lڠ4yt״]usD4|Qf|Sq^#'xngcpnuYJwP?l_ KLY*w{^TrS+ݞߝK5mEW\Dhf@(Dg˔u4V+$R5jOBFA灌b;B^2;U];riRق/dX]ӣG# ޕ@#">9ɅqspM}m.46-c 5CU|il`no?;d vcKlL=8z: 3Gwɭ:/FYX)& ~q~)l% 'ȥh& 7wBcB30OGGGw0~<eY0č Y
+uG=!_ΰOx`6%S Ό9h\z0 .Q d~C{.l XIYWoCfbPrgr`
+k$eVDI60ȒɉjQBo }9%1 ;Np8ٗkӳyLŰ1??H@`NK7FkTc S0y̐So"d@,WHJkN]X.ӛfy
+
+r^򶡝cxKH<`z> _42h;AƏA%1p&.?d+=we ?wW&C53<a۳eK|'IxHJQ3>1acO178}Z~MG$0w2 ȱkv:ͱtHM SK{'Cn<%E,[")7^0| !fWQA-_=$9)r%,}_< >oj&C ZFJKwL9Ֆ6φ pNeSKN.aP/3"YꋓnOhS:#
+E%P< Kc5-`vofUzy|9s.nVxTp03E^`?1ACR,Nd?~ƃT@ɲ ylz.{OpYPg-0ԫ_n$B{AQ4kpREP|d,
+sd @JTxz.'_
+'_sp.?8'',R-z19Eco#[=nQ+iIVRv,iSYʧ;`e2
+8BD]4jgR4w.JԵ0[Q\p=~0NPE! 2׉p-a3SԊǭ: /$&lY4wqdc7r38ʋUX+ldnY5RCi$(u\]A%+*9Eu=
+(UDh@G\KS9}%}Z,ٛ8U̷ȌT<*.p`k?eA6ETNa`
+˼BΖRr)cUͅ/oX9#D͐vggZPّ!4",Nl,rMEh <¥Q&kf-">ϔ {e1SBG: "Wc}`ve`{V&0GF\멊zP/|cX l5 ^&oFh֬4PQ@&Ϝ)g|n~☦fMkXbcG4"p dPrŴ9duNXQ[6Ȁ:ڞJղL\/~R: Ape.IHL."hYK&]Wȯszq=DCUuǓ6Je:{"KK51
+L~w%So|mj+jn(7aOiGO~S~j[ԔlHcmc +;.fP_g昡l:0k9eniF5#$u>׭vT2ABHa,P73Œ@1rЁn*I2*>kv&1x@!Bxzʑh% (x -?l[tBC9 WT E.1qSɃc)Ⲳ]_#p-DD7"߼78ƢwOtx£(iNlQ*Ï~V/m8W^cdKe҂xoBvIxZ;m(ԕWz")RHw
+F`݀>fK,=|s+ *$Elb(Pμ{%Ώ8.95[9Ev}4NB#Ф8B 9v-N#/#<$h t{Tj p>Z^$\5QxBfA_ @XN绣e In#l6>B;/c#{*eŲ+7l/ܴWp*Fɍg\b欋+n|s7{oGggG'O~gN|kwHBQDJ'$&+,zE™0eekssh='WGW>Jn((fL&W0YG@[<+#ӐC#L{G1A{3"Ka0(
+}߸;?Xв?޲|xt{9%^xc*oܮuh&[߆Zlڱm
+:}` + k 律3ϢhP~6/>]eM!+U?!e Y!,_,̏6٦"h6X:r:.7
+Pr>[>$/;=h
+?eLBB'y_X7NlJ+#+3faK`K`k
+b%9!6ruWH,҃ ð?<c'5r
+a!(b:tjrQX8C]ԨKצtt}U#I
endstream
endobj
-1436 0 obj
-<< /Type /FontDescriptor /FontName /NAKQCK+LMRoman10-Regular /Flags 4 /FontBBox [ -430 -290 1417 1127 ] /Ascent 1127 /CapHeight 683 /Descent -290 /ItalicAngle 0 /StemV 93 /XHeight 431 /FontFile3 1438 0 R /CIDSet 1437 0 R >>
+1452 0 obj
+<< /Type /FontDescriptor /FontName /TINWNG+LMRoman10-Regular /Flags 4 /FontBBox [ -430 -290 1417 1127 ] /Ascent 1127 /CapHeight 683 /Descent -290 /ItalicAngle 0 /StemV 93 /XHeight 431 /FontFile3 1454 0 R /CIDSet 1453 0 R >>
endobj
-1439 0 obj
-<< /Filter /FlateDecode /Length 795 >>
+1455 0 obj
+<< /Filter /FlateDecode /Length 798 >>
stream
-xڅ]o0+J%NbT)DB[?Vi41,$(~i*眼o.i~A|7o]irVxra6M}sM9V<ߓv]7)}qnӯ߳oOovpfͲq3SaٰݾnG!0tmor )T WuSuT+>z큌DU[n]ZiyjX ]zN^]0|*Z~&MZw0LDeWnorkŰO`^p4Ίȳ䲭~,ml6‰gئk<ĪM8;z8]0O' "Ecē@ړ hJK B=MB8<E3ǺT`(S $@
-{Q A&=`wX Hz JBTG U@TMI$HW!A <h<$,MjVjOr$8LCRA!F
-O`H|EC
-PB)xP
-ME {o̤<b<t]I~}NW<RhP'!.shb
-:sߗ2[,{/YhDܳD<[h/\ ) lU_" 
+xڅMo@C@!cWH j{%B-95R<ޏwfr͇Dx7fݬ)N{Sw cJS^Fm}:{u;2ߓf[շ)}q2?{_ׁ?x7n~٪vvf
+;,>n=VM,G탬.fߛ<zC
+ËMU-Պ^{Vxy>vf?77\t?x׶4mUo-"NZ ߛLDi6vob7b'0/h՝?hu>: hJs< Ӯ6"ƹx.c.F׺7
+v#ߏԑ"Qbf0;)H9S@ v@H% VŠ@Q1 NE $'E_ueb=z z Q'Q'(QIT=Q5 c$#]EH#YIH>@H^(2 qEJx &=  !+@uɇ'A<hH}S!3T'u­NPЩItFԂ%:K!kM@(@bS3k<Hy6IpIy1t\Oڹzv{' :q_H!E2P<2̠aJ5GVsH {3C?A)Ƚ5qNA:3חAc\aO%䞹%G|w(Nmk wi; \CsW_w!^^s7 c
endstream
endobj
-377 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /NAKQCK+LMRoman10-Regular /DescendantFonts [ 1440 0 R ] /ToUnicode 1439 0 R >>
+381 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /TINWNG+LMRoman10-Regular /DescendantFonts [ 1456 0 R ] /ToUnicode 1455 0 R >>
endobj
-1440 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /NAKQCK+LMRoman10-Regular /FontDescriptor 1436 0 R /W 1435 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1456 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /TINWNG+LMRoman10-Regular /FontDescriptor 1452 0 R /W 1451 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1441 0 obj
+1457 0 obj
[446.4 446.4 0 877 0 0 0 0 569.4 569.4 569.4 569.4 569.4 569.4 569.4 569.4 569.4 569.4 ]
endobj
-1442 0 obj
+1458 0 obj
[500 0 0 0 0 0 0 0 0 0 0 0 277.8 277.8 0 0 0 0 0 750 758.5 714.7 827.9 0 0 0 0 439.6 0 0 680.6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 528.6 429.2 432.8 520.5 465.6 489.6 0 576.2 344.5 411.8 520.6 298.4 878 600.2 0 503.1 0 451.2 0 0 572.5 0 0 571.5 490.3 465 ]
endobj
-1443 0 obj
+1459 0 obj
[955.6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 533.6 588.2 0 0 0 880.8 ]
endobj
-1444 0 obj
+1460 0 obj
[1027.8 0 0 0 0 0 680.6 680.6 680.6 680.6 ]
endobj
-1445 0 obj
+1461 0 obj
[339.3 0 0 0 585.3 0 0 0 819.4 0 0 0 0 0 0 0 0 783.7 0 0 0 0 0 0 0 674.8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 542 0 0 0 404.2 472.7 607.3 0 0 706.2 0 588.9 523.6 0 0 0 0 0 0 647.8 ]
endobj
-1446 0 obj
+1462 0 obj
[333.3 0 0 0 0 0 736.1 736.1 527.8 527.8 0 0 0 0 750 750 0 0 0 0 791.7 791.7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 875 875 666.7 666.7 666.7 666.7 666.7 666.7 888.9 888.9 888.9 888.9 0 0 888.9 666.7 875 875 875 875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 555.6 0 0 0 0 0 0 0 0 0 0 0 0 0 472.2 472.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 666.7 666.7 450 450 450 450 ]
endobj
-1447 0 obj
+1463 0 obj
[ 28 [ 525 525 525 ] 32 [ 525 525 525 525 525 ] 38 [ 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 ] 59 [ 525 ] 62 [ 525 525 525 ] 66 [ 525 525 525 ] 70 [ 525 525 525 ] 74 [ 525 525 525 525 525 ] 80 [ 525 525 525 525 525 525 525 525 525 525 ] 91 [ 525 ] 96 [ 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 ] 116 [ 525 ] 118 [ 525 ] 120 [ 525 525 ] 163 [ 525 ] 246 [ 525 ] 272 [ 525 ] 314 [ 525 525 ] 439 [ 525 ] 494 [ 525 ] ]
endobj
-1449 0 obj
+1465 0 obj
<< /Filter /FlateDecode /Length 43 >>
stream
xc``_ `& n
endstream
endobj
-1450 0 obj
+1466 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 7450 >>
stream
xڽzXSJ\=7u{Q'.=Xa$$M {q *ZqPhۨ:kھyO:<B=~9~?&x<ސWl[n5k2I^j?@ӥ{Hp n8ƊXmxhƛ?{-lFumbB؋CoXgN<u%rEHJ2}M%'K\}U!q,Y3YVHe7D)("Q+JW\P?YG)}%@U)e@[*Yad\qʔRɤIR*xT9S^^S<=)~SLMZv+,]adUJ)xHU>~bp<oMC*SB3A
@@ -6603,10 +6707,10 @@ Dw߂Ӿ.W#=fj֚H4,k\ٍ@':{n<~{ {W5Ugiw
/*lMB6mƎ bO‚9ܒq~fm6fɩL)iɅvhǕ/$#
endstream
endobj
-1448 0 obj
-<< /Type /FontDescriptor /FontName /YTHZRQ+LMMono9-Regular /Flags 4 /FontBBox [ -451 -318 734 1016 ] /Ascent 1016 /CapHeight 611 /Descent -318 /ItalicAngle 0 /StemV 175 /XHeight 431 /FontFile3 1450 0 R /CIDSet 1449 0 R >>
+1464 0 obj
+<< /Type /FontDescriptor /FontName /YTHZRQ+LMMono9-Regular /Flags 4 /FontBBox [ -451 -318 734 1016 ] /Ascent 1016 /CapHeight 611 /Descent -318 /ItalicAngle 0 /StemV 175 /XHeight 431 /FontFile3 1466 0 R /CIDSet 1465 0 R >>
endobj
-1451 0 obj
+1467 0 obj
<< /Filter /FlateDecode /Length 727 >>
stream
x}Ko@Rp=!$FEj j#@-ز͂ߙ9Dh#13s<\_^Lj&?nh0XhldLij^ںXW[yeé4]7̾[|v1?__k[W?mC?"B>.IAny}hH"zWٲ%ͫҌU]o+ ]s| ҴݳݖiaI4\eh{_nN!K5´[7ELx&v@^\?JPth(S<e ֦4H@(q$2@zҠ;im):p 2@A@# #EGGʸD$O A8Մ?NɑjGAT #t
@@ -6614,22 +6718,22 @@ $!SABRP(k@ʈZA5 b B92P-q$Tk"J%<d2)!t3O
GS䒃8siyr@7BJ)Os(K+L(?~ũm <LK?'+kާ}S7TxeX[
endstream
endobj
-370 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /YTHZRQ+LMMono9-Regular /DescendantFonts [ 1452 0 R ] /ToUnicode 1451 0 R >>
+374 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /YTHZRQ+LMMono9-Regular /DescendantFonts [ 1468 0 R ] /ToUnicode 1467 0 R >>
endobj
-1452 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /YTHZRQ+LMMono9-Regular /FontDescriptor 1448 0 R /W 1447 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1468 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /YTHZRQ+LMMono9-Regular /FontDescriptor 1464 0 R /W 1463 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1453 0 obj
+1469 0 obj
[ 28 [ 494 ] 43 [ 457 ] 50 [ 457 ] 63 [ 531 ] 66 [ 245 ] 75 [ 816 ] 77 [ 531 ] 96 [ 351 ] 98 [ 394 ] 105 [ 371 ] 116 [ 474 ] 118 [ 474 ] ]
endobj
-1455 0 obj
+1471 0 obj
<< /Filter /FlateDecode /Length 23 >>
stream
xc```P`Ta`X
endstream
endobj
-1456 0 obj
+1472 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 1234 >>
stream
xmLWQ`j-:OFKЉ ?c2[{A'eTY@nSadςc1Iej=b//{#@h( br,Cn|Vv)OXY+&>j4MЬĆHCdZqc1ɩ
@@ -6639,10 +6743,10 @@ xmLWQ`j-:OFKЉ ?c2[{A'eTY@nSadςc
7bdxo;ts:<0n${z;[ZhoG6z|t?J
endstream
endobj
-1454 0 obj
-<< /Type /FontDescriptor /FontName /VPHLPO+LMSans9-Regular /Flags 4 /FontBBox [ -433 -313 1466 1155 ] /Ascent 1155 /CapHeight 694 /Descent -313 /ItalicAngle 0 /StemV 95 /XHeight 444 /FontFile3 1456 0 R /CIDSet 1455 0 R >>
+1470 0 obj
+<< /Type /FontDescriptor /FontName /VPHLPO+LMSans9-Regular /Flags 4 /FontBBox [ -433 -313 1466 1155 ] /Ascent 1155 /CapHeight 694 /Descent -313 /ItalicAngle 0 /StemV 95 /XHeight 444 /FontFile3 1472 0 R /CIDSet 1471 0 R >>
endobj
-1457 0 obj
+1473 0 obj
<< /Filter /FlateDecode /Length 419 >>
stream
x}N0~âRY8)UH@+R!}ڱؑ, H3rrn{t-?1pxtV`|-k6*D9DZ#
@@ -6652,22 +6756,22 @@ u0=z0a6 4
bXk֊Zow4~~mjWolhf_Xg
endstream
endobj
-369 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /VPHLPO+LMSans9-Regular /DescendantFonts [ 1458 0 R ] /ToUnicode 1457 0 R >>
+373 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /VPHLPO+LMSans9-Regular /DescendantFonts [ 1474 0 R ] /ToUnicode 1473 0 R >>
endobj
-1458 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /VPHLPO+LMSans9-Regular /FontDescriptor 1454 0 R /W 1453 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1474 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /VPHLPO+LMSans9-Regular /FontDescriptor 1470 0 R /W 1469 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1459 0 obj
+1475 0 obj
[ 28 [ 514 ] 43 [ 457 ] 45 [ 286 ] 47 [ 571 ] 50 [ 457 ] 55 [ 314 ] 64 [ 343 ] 66 [ 286 ] 71 [ 642 286 ] 75 [ 856 ] 77 [ 571 ] 81 [ 514 ] 84 [ 571 ] 88 [ 286 ] 91 [ 542 ] 96 [ 402 ] 98 [ 405 ] 104 [ 742 400 ] 109 [ 571 ] 112 [ 542 ] 115 [ 771 542 ] 251 [ 457 ] 502 [ 286 ] ]
endobj
-1461 0 obj
+1477 0 obj
<< /Filter /FlateDecode /Length 31 >>
stream
xc```UdX8c‚#3Ѐ
endstream
endobj
-1462 0 obj
+1478 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 2880 >>
stream
xڵW{TWA7cgV)bU*T(j C$Hx#o ZCA)j-]ڭ[מc'97̝/+1@0uÛWlX9{Ee,#<x<%[!S-oq
@@ -6687,10 +6791,10 @@ y›lz<A/TmζN>rwaD)E~h)xMsvŊ
+/M<LAwD:C~twZڂViuUu Ae'jT/xlX=@$Ahh5hGp]]FCX}}5Pml{jl`(]6S ΀z}˵Fy!?b j-:+ݘgCOQMeyyL.iC7uɹ,ǎ2&
endstream
endobj
-1460 0 obj
-<< /Type /FontDescriptor /FontName /WDPLWN+LMRoman9-Regular /Flags 4 /FontBBox [ -443 -292 1454 1128 ] /Ascent 1128 /CapHeight 683 /Descent -292 /ItalicAngle 0 /StemV 95 /XHeight 431 /FontFile3 1462 0 R /CIDSet 1461 0 R >>
+1476 0 obj
+<< /Type /FontDescriptor /FontName /WDPLWN+LMRoman9-Regular /Flags 4 /FontBBox [ -443 -292 1454 1128 ] /Ascent 1128 /CapHeight 683 /Descent -292 /ItalicAngle 0 /StemV 95 /XHeight 431 /FontFile3 1478 0 R /CIDSet 1477 0 R >>
endobj
-1463 0 obj
+1479 0 obj
<< /Filter /FlateDecode /Length 488 >>
stream
x}n0~
@@ -6699,22 +6803,22 @@ x}n0~
Χ)%`cHvi"`-S7fvk?Q)vAo|p';e[A
endstream
endobj
-368 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /WDPLWN+LMRoman9-Regular /DescendantFonts [ 1464 0 R ] /ToUnicode 1463 0 R >>
+372 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /WDPLWN+LMRoman9-Regular /DescendantFonts [ 1480 0 R ] /ToUnicode 1479 0 R >>
endobj
-1464 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /WDPLWN+LMRoman9-Regular /FontDescriptor 1460 0 R /W 1459 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1480 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /WDPLWN+LMRoman9-Regular /FontDescriptor 1476 0 R /W 1475 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1465 0 obj
+1481 0 obj
[ 75 [ 986 ] 95 [ 887 ] 98 [ 467 ] 109 [ 657 ] 251 [ 543 ] ]
endobj
-1467 0 obj
+1483 0 obj
<< /Filter /FlateDecode /Length 20 >>
stream
xc`Ft
endstream
endobj
-1468 0 obj
+1484 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 1088 >>
stream
xڅTmLSWJ/wQ*ҋhA]@Eatc&vFRt{k%JAriP HcKh4MLlfes&\9ĬY%K&=<oL82yE_R5m{8)I@JIZJäDGIL,C)dMRAdZg_=dF$;H
@@ -6725,10 +6829,10 @@ W-`glZzPV':x`vpN;Y,<pqF5 8m&]Y
y{{`,$(׍u^FfHJU}lķZ9z__njM OH(rCm?'`UYdH&r$}._W_w.Izt#_aT
endstream
endobj
-1466 0 obj
-<< /Type /FontDescriptor /FontName /TZPLIV+LMRoman9-Bold /Flags 4 /FontBBox [ -501 -299 1649 1136 ] /Ascent 1136 /CapHeight 686 /Descent -299 /ItalicAngle 0 /StemV 110 /XHeight 444 /FontFile3 1468 0 R /CIDSet 1467 0 R >>
+1482 0 obj
+<< /Type /FontDescriptor /FontName /TZPLIV+LMRoman9-Bold /Flags 4 /FontBBox [ -501 -299 1649 1136 ] /Ascent 1136 /CapHeight 686 /Descent -299 /ItalicAngle 0 /StemV 110 /XHeight 444 /FontFile3 1484 0 R /CIDSet 1483 0 R >>
endobj
-1469 0 obj
+1485 0 obj
<< /Filter /FlateDecode /Length 381 >>
stream
x}R]@}_q!sa/*b7:#>wf̂EVP<s\N'WW}
@@ -6736,23 +6840,23 @@ G,TzmNgX,wyS8hNXBw-#)ʞGF.Mȗľg߇Mt6ۣb9*(S
܀ B(9ARj$_+~7GBڼd
endstream
endobj
-367 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /TZPLIV+LMRoman9-Bold /DescendantFonts [ 1470 0 R ] /ToUnicode 1469 0 R >>
+371 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /TZPLIV+LMRoman9-Bold /DescendantFonts [ 1486 0 R ] /ToUnicode 1485 0 R >>
endobj
-1470 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /TZPLIV+LMRoman9-Bold /FontDescriptor 1466 0 R /W 1465 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1486 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /TZPLIV+LMRoman9-Bold /FontDescriptor 1482 0 R /W 1481 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1471 0 obj
+1487 0 obj
[ 28 [ 515 ] 33 [ 515 ] 47 [ 515 ] 55 [ 515 ] 59 [ 515 ] 66 [ 515 ] 77 [ 515 ] 81 [ 515 ] 84 [ 515 ] 88 [ 515 ] 96 [ 515 ] 105 [ 515 ] 114 [ 515 ] 118 [ 515 ] ]
endobj
-1473 0 obj
+1489 0 obj
<< /Filter /FlateDecode /Length 23 >>
stream
xc``p`dP`hhpP
D)
endstream
endobj
-1474 0 obj
+1490 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 1845 >>
stream
xuV}TW!@5ʚiZ3K- _EAE%1LBD<u
@@ -6767,79 +6871,74 @@ oRWɧ<| ƠP"{nPq%e}Gܮ(WȗN)QuoYUO&Pn^
g48ԂE>*`zK@E%1άxh@,+&p_(N(/?=u0ݕLDB0O>`R Fon0km(V׮Җ ֐F"3DgϷ^?@%xSEV!6¶M:GӞ`x#qNf4e'_%#l|ZQuJeq?HR@8(fu\o!du8iw6s;YpoۚiPH&Ng y[j;rgRsJcOt~w@[fk9RM
endstream
endobj
-1472 0 obj
-<< /Type /FontDescriptor /FontName /CKBVSC+LMMono12-Regular /Flags 4 /FontBBox [ -444 -311 715 1019 ] /Ascent 1019 /CapHeight 611 /Descent -311 /ItalicAngle 0 /StemV 172 /XHeight 431 /FontFile3 1474 0 R /CIDSet 1473 0 R >>
+1488 0 obj
+<< /Type /FontDescriptor /FontName /CKBVSC+LMMono12-Regular /Flags 4 /FontBBox [ -444 -311 715 1019 ] /Ascent 1019 /CapHeight 611 /Descent -311 /ItalicAngle 0 /StemV 172 /XHeight 431 /FontFile3 1490 0 R /CIDSet 1489 0 R >>
endobj
-1475 0 obj
+1491 0 obj
<< /Filter /FlateDecode /Length 428 >>
stream
x}]O0+`Dpf!q%Df,[֞&%.m{&F%pk z:=A[2,5P3
endstream
endobj
-366 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /CKBVSC+LMMono12-Regular /DescendantFonts [ 1476 0 R ] /ToUnicode 1475 0 R >>
+370 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /CKBVSC+LMMono12-Regular /DescendantFonts [ 1492 0 R ] /ToUnicode 1491 0 R >>
endobj
-1476 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /CKBVSC+LMMono12-Regular /FontDescriptor 1472 0 R /W 1471 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1492 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /CKBVSC+LMMono12-Regular /FontDescriptor 1488 0 R /W 1487 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1477 0 obj
-[ 28 [ 490 ] 35 [ 544 ] 43 [ 435 ] 47 [ 544 ] 50 [ 435 ] 54 [ 639 299 ] 57 [ 490 ] 59 [ 490 ] 63 [ 544 ] 66 [ 272 ] 72 [ 272 ] 75 [ 816 ] 77 [ 544 ] 81 [ 490 ] 83 [ 666 544 ] 88 [ 272 ] 96 [ 381 ] 98 [ 386 ] 105 [ 381 490 490 ] 109 [ 544 ] 112 [ 517 ] 116 [ 517 ] 118 [ 517 ] 121 [ 490 ] 187 [ 489 ] 257 [ 435 ] ]
+1493 0 obj
+[ 28 [ 490 ] 35 [ 544 ] 43 [ 435 ] 47 [ 544 ] 50 [ 435 ] 54 [ 639 299 ] 57 [ 490 ] 59 [ 490 ] 63 [ 544 ] 66 [ 272 ] 75 [ 816 ] 77 [ 544 490 ] 81 [ 490 ] 83 [ 666 544 ] 88 [ 272 ] 96 [ 381 ] 98 [ 386 ] 105 [ 381 ] 107 [ 490 ] 109 [ 544 ] 116 [ 517 ] 118 [ 517 ] 121 [ 490 ] 187 [ 489 ] 257 [ 435 ] ]
endobj
-1479 0 obj
+1495 0 obj
<< /Filter /FlateDecode /Length 31 >>
stream
-xc``TTѰˁ4
+xc``TThX
endstream
endobj
-1480 0 obj
-<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 3575 >>
-stream
-xڭX X皞cL<zT"Ҫ .ȅ
-7]}sF>{/CN#>لnTuRph?M'FYw"Cv]_M
-N˪;-ϛ&& KaCdKdJL 1G,?b2&P9Yy6ٷNsP:*a(k 1R-{LhΤ;@q=cQl XN1h}FP>l [N^gf\`)4eȕH"|Y8 .{\VʎLn/::ˎP
-ʃJLz 倁q>~z<(+pTN'X麟Xpбv+W04$֑OH%|yjki;M\WIUgsN;-Z!h}䀕frau 3`
-MeDz2qP1#sZS(@Ӟ'}#ps!%N*fyC< 7I\hqZLSt2= )'` +S+TÀfFҰI˃KoO}ŇFA#ߑ
-҃PRZZq
-GN-5U9rչII3*ƩOL,\"1Q;(M HrX77r-D˗?
-6Uki1[ 】-澬+0
-3%a3
-fئkI7KGkĜ5!6vWPط yCYOܿ3a F8s/F6m}'s=2Tx}i}UĽ˟h6vmzO)lrCAA*m%N]ƎgRlH#.oh{k.ij
-"F 03rKwWiuVωP
-_ e)9~~`nht]68Npɕ/Zl yr^8 :{w88B J) >d'y}Rǥ_˸9hj
-.җ^Ý:~zv̻qHg1CH~/ľ{ᅂO|ω}?;j-S!> CY=kG<
-GЗ ';튝R">ON/p' d5Sm;AX<
-n25%z< =,|!F-bZ!B=o[@a1i,ؗ]ffeUk608>O{NЖRZ\dosy2 i,**Pb~@m`L䒍2Y^6Bvš95FȖUQn,Z
-13|e?
-t%jR_F
-gO&rƸZ@C?оL.Vlΰ(5:owL<{f68bgs]u^`*Ϋ(KKlE؃G~8τޙnOܥ.qeG{fZ[Apq_JsԆ]5lӾ:,B^bas:CWDMeQge
-tw L3ȥϞD2Ev= z`9W"5۱mĆ)Ea=3ʂ:WWTgOGx`x sgDzXz"7y#09~ yD׀zp=iL*N'89_*M*UU>т˝VWB}3^mݧz215IaցsxUA}ZFNGbc#"wRKb\}ƬlmCA]u6եwƉfTezQr{)xvyVj-";tr mř[M{N7Џw):RE*JԕVSa
+1496 0 obj
+<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 3417 >>
+stream
+xڭW Xg 23:SQKֶZKUUzEAB@!\HBM.!$$\PZ֊OO]{n?9g'[{ݳ3<<3~ S5soT%E+/(W՞܋atG!'B>>^cKСi"OH4</U>/3sKd&b4-\0Q' JNW'(⵲-빾& ޳OKE+cekee*=7AJ)G'TqN#Wkd
+J(O*>'ʣ5XN+W˴rMU*VGe2F.kK:EJh.y XNxD@ؚЕVjӴ8Z+F'$jȟoIщcU15r6A4,[-ƂװױeX[cMXۍ` >, bX:vJ atOb Fpgq}BR+Z*gB<.!ɐ|]-MPx&!O|v*<l\w34&9otA0z(.군ȵJO ԉ,\$z&Zw+QK|V:;dm1]JlaB_06 Kx&J!-FPG'N (RUncƾq]Cc)?RfYmSFA'$n";[2.PRGX
+_r΅K;}>+Ɏ1k&l(SڠAƃJM{ ぁɾ~_m.`㿀Rp6uwg8$4MF7㧝6f tPhDg&FJAX%iu^~YTg
+J񷠍 ,,&Xh?̸]'6 J!kq>/3hO(`9o6PpBc?}/M?/(#XK+qkyR'z<R[ E,¡7~ĉZK^5]PQZ{fCHh6NFץ,n;s!6hpL!RB<<b
+y6hZ?#V
+İ(E.y_]kȺCӀbCk{ tCR|;*scvV2Щȧwߩx\`#|Nͦ[ETx.p3+щ'{AuGZ:ޞ*)X d$
+GFK8i:HiITj!x
+%z%j#gsW]e-o;;D.ߐąS$'w#HzqK67J9Gvw$AE[ڎ4*
+鏜'/ϮZmu B" '
+<v _O0(\ |=PSPu=̰ n@}ϝ, `W5tkAN}';(춀XjzŞ%3ryfzݒ7,'Jm4R$Ss<+gdQj)+$ ߜmOe]$ImǨ{kH{yEe N,yٜ\FR Jy܄7 ?.%M+ `c6̱PIg$";Aהm@E{^TXcv
+`cr|fL_;~꾤]dj67V#jT.DUn^^ ̃fmΦj+ܶ*I[\i0F:>%AH݃Kɪ\&&E6DƄfI`3Pl}}=9`tS-Ƭ3hw3,f;v54l %.G ٥9Llef˘ pş۰ۄO쐢p1 ?Aa"_~Gw]cTZ U.16"1L`Mp[y)+)[lֲVkIYDnǿqg
endstream
endobj
-1478 0 obj
-<< /Type /FontDescriptor /FontName /WUMFPP+LMRoman12-Regular /Flags 4 /FontBBox [ -422 -280 1394 1127 ] /Ascent 1127 /CapHeight 683 /Descent -280 /ItalicAngle 0 /StemV 91 /XHeight 431 /FontFile3 1480 0 R /CIDSet 1479 0 R >>
+1494 0 obj
+<< /Type /FontDescriptor /FontName /ZWUPVI+LMRoman12-Regular /Flags 4 /FontBBox [ -422 -280 1394 1127 ] /Ascent 1127 /CapHeight 683 /Descent -280 /ItalicAngle 0 /StemV 91 /XHeight 431 /FontFile3 1496 0 R /CIDSet 1495 0 R >>
endobj
-1481 0 obj
-<< /Filter /FlateDecode /Length 504 >>
+1497 0 obj
+<< /Filter /FlateDecode /Length 498 >>
stream
-xڅߏ0+z&KC( ɹktH%7ٜ9 gLɷ_ry?~dT~-[o2Yjh@
+xڅMk0C =JK04_`ض!Ieo4
+b!~%Bٰ?wFƣ}$#=%;h^seF@##e*P T-,՗ĞCx۾]]*NKCjĄɭ0qAV$?J,67JI*[rރ8!BΓ啙M_B`>'9Y:wAhd|ˤ5DhD6sz)+ @!LTvכJ:\ -Z@۔thNP[bhc2BOmxi
+QŹ$EJH)i(MHI0Q|MkM|$\!Hki 0HGQU216vk3z%za;'` ' [%Ib{L)r7b/n^k9n}vؽ
+>7TK/$*
endstream
endobj
-365 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /WUMFPP+LMRoman12-Regular /DescendantFonts [ 1482 0 R ] /ToUnicode 1481 0 R >>
+369 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /ZWUPVI+LMRoman12-Regular /DescendantFonts [ 1498 0 R ] /ToUnicode 1497 0 R >>
endobj
-1482 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /WUMFPP+LMRoman12-Regular /FontDescriptor 1478 0 R /W 1477 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1498 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /ZWUPVI+LMRoman12-Regular /FontDescriptor 1494 0 R /W 1493 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1483 0 obj
+1499 0 obj
[ 28 [ 451 ] 43 [ 418 ] 50 [ 418 ] 66 [ 223 ] 75 [ 745 ] 77 [ 484 ] 96 [ 320 ] 105 [ 340 ] 116 [ 432 ] ]
endobj
-1485 0 obj
+1501 0 obj
<< /Filter /FlateDecode /Length 23 >>
stream
xc```P`Pa`hp
endstream
endobj
-1486 0 obj
+1502 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 1024 >>
stream
xuS}LEnY>G[tao(EQ&r irq[]zZ"[%+56m ^(H$!%1?gw1&{&Kz@DVCU弪zOHVhAʕJnfl
@@ -6849,10 +6948,10 @@ xuS}LEnY>G[tao(EQ&r irq[]zZ"[%+56m ^(
CoV< }>q%N鉴4=Z^d
endstream
endobj
-1484 0 obj
-<< /Type /FontDescriptor /FontName /YLODNZ+LMSans17-Regular /Flags 4 /FontBBox [ -395 -305 1355 1159 ] /Ascent 1159 /CapHeight 694 /Descent -305 /ItalicAngle 0 /StemV 87 /XHeight 431 /FontFile3 1486 0 R /CIDSet 1485 0 R >>
+1500 0 obj
+<< /Type /FontDescriptor /FontName /YLODNZ+LMSans17-Regular /Flags 4 /FontBBox [ -395 -305 1355 1159 ] /Ascent 1159 /CapHeight 694 /Descent -305 /ItalicAngle 0 /StemV 87 /XHeight 431 /FontFile3 1502 0 R /CIDSet 1501 0 R >>
endobj
-1487 0 obj
+1503 0 obj
<< /Filter /FlateDecode /Length 404 >>
stream
x}]K0+6s2
@@ -6860,22 +6959,22 @@ nU(MKf`MJ^ߛv8 xzޓyK<p`|Mkj`*֖(5"GW{xъp
*'Zq(K8thSL=RGđy9K-în90jmr;"aMTeNC2-m7 =
endstream
endobj
-364 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /YLODNZ+LMSans17-Regular /DescendantFonts [ 1488 0 R ] /ToUnicode 1487 0 R >>
+368 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /YLODNZ+LMSans17-Regular /DescendantFonts [ 1504 0 R ] /ToUnicode 1503 0 R >>
endobj
-1488 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /YLODNZ+LMSans17-Regular /FontDescriptor 1484 0 R /W 1483 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1504 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /YLODNZ+LMSans17-Regular /FontDescriptor 1500 0 R /W 1499 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1489 0 obj
+1505 0 obj
[ 28 [ 459 ] 46 [ 707 ] 50 [ 406 ] 66 [ 250 ] 68 [ 276 ] 71 [ 576 250 ] 77 [ 511 ] 81 [ 459 ] 91 [ 485 ] 96 [ 354 ] 98 [ 359 ] 105 [ 354 ] 108 [ 693 511 ] 116 [ 485 ] 126 [ 499 ] 277 [ 406 ] 502 [ 250 ] ]
endobj
-1491 0 obj
+1507 0 obj
<< /Filter /FlateDecode /Length 31 >>
stream
xc````R`lqXĀXp&
endstream
endobj
-1492 0 obj
+1508 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 2260 >>
stream
xڭ{TWgcDwFV h TD"Ay Q$$@ (b0(⫂RhmS[k]V[{=w V;ܹ}8&c8KHIX>wj\
@@ -6893,22 +6992,22 @@ M.Y9b+8xZ3b䕋>Ec%2 ypKzCWˣB} , ñ1~0<W
?lV!C/Kt1!<vnN.<5^+_
endstream
endobj
-1490 0 obj
-<< /Type /FontDescriptor /FontName /LNWNPA+LMRoman17-Regular /Flags 4 /FontBBox [ -400 -286 1338 1125 ] /Ascent 1125 /CapHeight 683 /Descent -286 /ItalicAngle 0 /StemV 83 /XHeight 431 /FontFile3 1492 0 R /CIDSet 1491 0 R >>
+1506 0 obj
+<< /Type /FontDescriptor /FontName /LNWNPA+LMRoman17-Regular /Flags 4 /FontBBox [ -400 -286 1338 1125 ] /Ascent 1125 /CapHeight 683 /Descent -286 /ItalicAngle 0 /StemV 83 /XHeight 431 /FontFile3 1508 0 R /CIDSet 1507 0 R >>
endobj
-1493 0 obj
+1509 0 obj
<< /Filter /FlateDecode /Length 460 >>
stream
xڅn0<)=Pl@SEH)I$6+'YKFy=JF_C䑒=43hyWj
endstream
endobj
-363 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /LNWNPA+LMRoman17-Regular /DescendantFonts [ 1494 0 R ] /ToUnicode 1493 0 R >>
+367 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /LNWNPA+LMRoman17-Regular /DescendantFonts [ 1510 0 R ] /ToUnicode 1509 0 R >>
endobj
-1494 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /LNWNPA+LMRoman17-Regular /FontDescriptor 1490 0 R /W 1489 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1510 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /LNWNPA+LMRoman17-Regular /FontDescriptor 1506 0 R /W 1505 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1496 0 obj
+1512 0 obj
<< /Length1 1484 /Length2 8131 /Length3 0 /Filter /FlateDecode /Length 9124 >>
stream
xڍTm6NHt,) ] .²tJH#]J4" HwwS9w3sM\LtZ2`Di
@@ -6950,10 +7049,10 @@ Mt%ŕTMHtwX:n҅O| ҙi,l59k#E~L.pz/'w/
*2;nYK/G-^䙗;%{F!zd[
endstream
endobj
-1495 0 obj
-<< /Type /FontDescriptor /FontName /XEMCLW+CMBX10 /Flags 4 /FontBBox [ -56 -250 1164 750 ] /Ascent 694 /CapHeight 686 /Descent -194 /ItalicAngle 0 /StemV 114 /XHeight 444 /CharSet( /a /b /c /d /one /three /two) /FontFile 1496 0 R >>
+1511 0 obj
+<< /Type /FontDescriptor /FontName /XEMCLW+CMBX10 /Flags 4 /FontBBox [ -56 -250 1164 750 ] /Ascent 694 /CapHeight 686 /Descent -194 /ItalicAngle 0 /StemV 114 /XHeight 444 /CharSet( /a /b /c /d /one /three /two) /FontFile 1512 0 R >>
endobj
-1498 0 obj
+1514 0 obj
<< /Length1 2319 /Length2 9802 /Length3 0 /Filter /FlateDecode /Length 11051 >>
stream
xڍTZ6Lt# 1t*]Jw
@@ -7005,10 +7104,10 @@ l1(fP@weKg}PYۈE[n(#3%[$Bf~΍Nd\zmM0 Y],9Ca0- ub
3H vrH
endstream
endobj
-1497 0 obj
-<< /Type /FontDescriptor /FontName /CFYTDH+CMEX10 /Flags 4 /FontBBox [ -24 -2960 1454 772 ] /Ascent 40 /CapHeight 0 /Descent -600 /ItalicAngle 0 /StemV 47 /XHeight 431 /CharSet( /arrowbt /arrowtp /arrowvertex /braceex /bracehtipdownleft /bracehtipdownright /bracehtipupleft /bracehtipupright /braceleftbigg /braceleftbt /bracelefttp /bracerightbigg /bracerightbt /bracerighttp /bracketleftBig /bracketleftbigg /bracketleftbt /bracketleftex /bracketlefttp /bracketrightBig /bracketrightbigg /bracketrightbt /bracketrightex /bracketrighttp /integraldisplay /parenleftBigg /parenleftbigg /parenleftbt /parenleftex /parenlefttp /parenrightBigg /parenrightbigg /parenrightbt /parenrightex /parenrighttp /vextendsingle) /FontFile 1498 0 R >>
+1513 0 obj
+<< /Type /FontDescriptor /FontName /CFYTDH+CMEX10 /Flags 4 /FontBBox [ -24 -2960 1454 772 ] /Ascent 40 /CapHeight 0 /Descent -600 /ItalicAngle 0 /StemV 47 /XHeight 431 /CharSet( /arrowbt /arrowtp /arrowvertex /braceex /bracehtipdownleft /bracehtipdownright /bracehtipupleft /bracehtipupright /braceleftbigg /braceleftbt /bracelefttp /bracerightbigg /bracerightbt /bracerighttp /bracketleftBig /bracketleftbigg /bracketleftbt /bracketleftex /bracketlefttp /bracketrightBig /bracketrightbigg /bracketrightbt /bracketrightex /bracketrighttp /integraldisplay /parenleftBigg /parenleftbigg /parenleftbt /parenleftex /parenlefttp /parenrightBigg /parenrightbigg /parenrightbt /parenrightex /parenrighttp /vextendsingle) /FontFile 1514 0 R >>
endobj
-1500 0 obj
+1516 0 obj
<< /Length1 1396 /Length2 5867 /Length3 0 /Filter /FlateDecode /Length 6812 >>
stream
xڍTTTk&FPAf@II)!f`:% @B$$DSCR@R@i$;9޵]֞=<]@P"T( X$ TV1
@@ -7041,10 +7140,10 @@ mNվ˘jB5̞cvqc~O\Y)O
ݟ~wb@ ݤmπnsA6&wSlYD]+"@?|9mo]fjǾ{sŸܦ}}rIRBR+譜yScC>gamʁt!eU p/k UQSb3Z Wзo.uY&h) @X`0rEC:s,17v TN
endstream
endobj
-1499 0 obj
-<< /Type /FontDescriptor /FontName /VMQSYC+CMEX7 /Flags 4 /FontBBox [ -12 -2951 1627 770 ] /Ascent 49 /CapHeight 0 /Descent -600 /ItalicAngle 0 /StemV 80 /XHeight 431 /CharSet( /radicalbig) /FontFile 1500 0 R >>
+1515 0 obj
+<< /Type /FontDescriptor /FontName /VMQSYC+CMEX7 /Flags 4 /FontBBox [ -12 -2951 1627 770 ] /Ascent 49 /CapHeight 0 /Descent -600 /ItalicAngle 0 /StemV 80 /XHeight 431 /CharSet( /radicalbig) /FontFile 1516 0 R >>
endobj
-1502 0 obj
+1518 0 obj
<< /Length1 1830 /Length2 11276 /Length3 0 /Filter /FlateDecode /Length 12424 >>
stream
xڍT[-kqS'-- @ )V-VSHhq>zsɞ׷;&9,q
@@ -7087,10 +7186,10 @@ t둭Jc_WP5jbep/wUd22>3}֟Bn9MmGvX-i1@?BDVlt[~_
|UƶO3n0&hWA:fBh;2bVF:u(o7Ȕ?xs4ŹNgX%%F}J34G_1˵-{
endstream
endobj
-1501 0 obj
-<< /Type /FontDescriptor /FontName /CEORQM+CMMI10 /Flags 4 /FontBBox [ -32 -250 1048 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 72 /XHeight 431 /CharSet( /A /B /C /D /I /L /a /b /c /comma /d /e /f /h /i /j /k /l /m /n /p /period /r /triangleright /u /x /y /z) /FontFile 1502 0 R >>
+1517 0 obj
+<< /Type /FontDescriptor /FontName /CEORQM+CMMI10 /Flags 4 /FontBBox [ -32 -250 1048 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 72 /XHeight 431 /CharSet( /A /B /C /D /I /L /a /b /c /comma /d /e /f /h /i /j /k /l /m /n /p /period /r /triangleright /u /x /y /z) /FontFile 1518 0 R >>
endobj
-1504 0 obj
+1520 0 obj
<< /Length1 1415 /Length2 6063 /Length3 0 /Filter /FlateDecode /Length 7021 >>
stream
xڍuTk-Xh
@@ -7120,10 +7219,10 @@ OB+F|72{ .2xcZrL_7-_5Km-܁CEMXo]Y1nfɫt/
bUyLq@jƚm#<՗aVY G<^P4~0-)gV2+ \]"X,p aqה-TW'qY'D#_Ē_w"9FuKK
endstream
endobj
-1503 0 obj
-<< /Type /FontDescriptor /FontName /JZMBET+CMMI12 /Flags 4 /FontBBox [ -31 -250 1026 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 65 /XHeight 431 /CharSet( /A) /FontFile 1504 0 R >>
+1519 0 obj
+<< /Type /FontDescriptor /FontName /JZMBET+CMMI12 /Flags 4 /FontBBox [ -31 -250 1026 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 65 /XHeight 431 /CharSet( /A) /FontFile 1520 0 R >>
endobj
-1506 0 obj
+1522 0 obj
<< /Length1 1451 /Length2 6812 /Length3 0 /Filter /FlateDecode /Length 7785 >>
stream
xڍtTk.)]D`A!ASIiICFwZY羞^Fzm=N[5XspEr*
@@ -7157,10 +7256,10 @@ y[f!i;7W%mIJ ﭓ71v(oT(}6u4/^%O8Ϩu(6g
a e|L1iR]ez[
endstream
endobj
-1505 0 obj
-<< /Type /FontDescriptor /FontName /IUHNPC+CMMI5 /Flags 4 /FontBBox [ 37 -250 1349 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 90 /XHeight 431 /CharSet( /L /i /j /n) /FontFile 1506 0 R >>
+1521 0 obj
+<< /Type /FontDescriptor /FontName /IUHNPC+CMMI5 /Flags 4 /FontBBox [ 37 -250 1349 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 90 /XHeight 431 /CharSet( /L /i /j /n) /FontFile 1522 0 R >>
endobj
-1508 0 obj
+1524 0 obj
<< /Length1 1589 /Length2 8523 /Length3 0 /Filter /FlateDecode /Length 9572 >>
stream
xڍTT.LCH "! 0PC!%)-!!%%ֺwZgγ}}jb&6FiPPx`c`accGաp+ȟft&jW= Iq
@@ -7204,10 +7303,10 @@ Sziq`Rky5zX-
_G)JxУ<g|eBy"7t*<
endstream
endobj
-1507 0 obj
-<< /Type /FontDescriptor /FontName /WUDPRN+CMMI7 /Flags 4 /FontBBox [ -1 -250 1171 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 81 /XHeight 431 /CharSet( /C /L /T /comma /e /i /j /k /n /p /q /star /x) /FontFile 1508 0 R >>
+1523 0 obj
+<< /Type /FontDescriptor /FontName /WUDPRN+CMMI7 /Flags 4 /FontBBox [ -1 -250 1171 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 81 /XHeight 431 /CharSet( /C /L /T /comma /e /i /j /k /n /p /q /star /x) /FontFile 1524 0 R >>
endobj
-1510 0 obj
+1526 0 obj
<< /Length1 1438 /Length2 6548 /Length3 0 /Filter /FlateDecode /Length 7523 >>
stream
xڍt4kׯ"ZD0zF5`0!z[H$DDoD#Ir{޻ֽkϳ=6f]>y{-LA
@@ -7244,10 +7343,10 @@ wt/ְj@884}?em\9P?{6jx)*NaqIuoŀ31&
*INS+$3z t$x g6./)~s_2oϒlAS"F!XzP%i3UsLWsOLۈklm܏f(]zj Y2
endstream
endobj
-1509 0 obj
-<< /Type /FontDescriptor /FontName /TEYYDJ+CMMI8 /Flags 4 /FontBBox [ -24 -250 1110 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 78 /XHeight 431 /CharSet( /i /j /n) /FontFile 1510 0 R >>
+1525 0 obj
+<< /Type /FontDescriptor /FontName /TEYYDJ+CMMI8 /Flags 4 /FontBBox [ -24 -250 1110 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 78 /XHeight 431 /CharSet( /i /j /n) /FontFile 1526 0 R >>
endobj
-1512 0 obj
+1528 0 obj
<< /Length1 1744 /Length2 11235 /Length3 0 /Filter /FlateDecode /Length 12356 >>
stream
xڍP.k;wwwwwg!0 w@pBpw
@@ -7294,10 +7393,10 @@ ttoΎфtč!e웩I]8NG'
o獧{{m1` 8>`9X;;FVqvt$3CY(n3@}"ZWkgcQ͞*EkFY<lc ?v0.+Q2SbMXw`Pi.zN o| Ի)n9`VOi{40ơ
endstream
endobj
-1511 0 obj
-<< /Type /FontDescriptor /FontName /IHIWXH+CMR10 /Flags 4 /FontBBox [ -40 -250 1009 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 69 /XHeight 431 /CharSet( /bracketleft /bracketright /c /eight /equal /five /four /i /n /nine /o /one /parenleft /parenright /plus /s /seven /six /three /two /zero) /FontFile 1512 0 R >>
+1527 0 obj
+<< /Type /FontDescriptor /FontName /IHIWXH+CMR10 /Flags 4 /FontBBox [ -40 -250 1009 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 69 /XHeight 431 /CharSet( /bracketleft /bracketright /c /eight /equal /five /four /i /n /nine /o /one /parenleft /parenright /plus /s /seven /six /three /two /zero) /FontFile 1528 0 R >>
endobj
-1514 0 obj
+1530 0 obj
<< /Length1 1447 /Length2 6556 /Length3 0 /Filter /FlateDecode /Length 7538 >>
stream
xڍVT\%Kph%CbfI%iP@@$nQJ.7zoZ3{kؙu a '<
@@ -7332,10 +7431,10 @@ eO:[1bo_9ͣh[puK}ks 7\GU0Ǟ6Г?ﱿWy$4kw}zK
2h&ji/,
endstream
endobj
-1513 0 obj
-<< /Type /FontDescriptor /FontName /CPMJUS+CMR5 /Flags 4 /FontBBox [ -10 -250 1304 750 ] /Ascent 694 /CapHeight 680 /Descent -194 /ItalicAngle 0 /StemV 89 /XHeight 431 /CharSet( /four /one /plus /three /two) /FontFile 1514 0 R >>
+1529 0 obj
+<< /Type /FontDescriptor /FontName /CPMJUS+CMR5 /Flags 4 /FontBBox [ -10 -250 1304 750 ] /Ascent 694 /CapHeight 680 /Descent -194 /ItalicAngle 0 /StemV 89 /XHeight 431 /CharSet( /four /one /plus /three /two) /FontFile 1530 0 R >>
endobj
-1516 0 obj
+1532 0 obj
<< /Length1 1595 /Length2 7817 /Length3 0 /Filter /FlateDecode /Length 8871 >>
stream
xڍT6t
@@ -7373,10 +7472,10 @@ Y<Qj8e^z 7r-\
.+g!~ŜI #PAiМ'WXϟf'_}xbK$yv[IoRʢTYiGU$ݡsZ,U+hQ
endstream
endobj
-1515 0 obj
-<< /Type /FontDescriptor /FontName /IZMGNT+CMR7 /Flags 4 /FontBBox [ -27 -250 1122 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 79 /XHeight 431 /CharSet( /eight /five /four /nine /one /parenleft /parenright /plus /seven /six /three /two /zero) /FontFile 1516 0 R >>
+1531 0 obj
+<< /Type /FontDescriptor /FontName /IZMGNT+CMR7 /Flags 4 /FontBBox [ -27 -250 1122 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 79 /XHeight 431 /CharSet( /eight /five /four /nine /one /parenleft /parenright /plus /seven /six /three /two /zero) /FontFile 1532 0 R >>
endobj
-1518 0 obj
+1534 0 obj
<< /Length1 1500 /Length2 6516 /Length3 0 /Filter /FlateDecode /Length 7522 >>
stream
xڍxTڲ6"J5 &*IMj $ґ ޕ*IU@tAs=zoe${f+@PU$
@@ -7419,10 +7518,10 @@ BH'渆m|{m/{.xoH2nE -.w}y'*7.^WeNߚFsU%ϏS
;J!ujE%msCzzFeq0x~ǠAJ/]j z8{FqKeI*1HoA(N{&dY __޴T'EQz
endstream
endobj
-1517 0 obj
-<< /Type /FontDescriptor /FontName /VGMPAA+CMSY10 /Flags 4 /FontBBox [ -29 -960 1116 775 ] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 40 /XHeight 431 /CharSet( /angbracketleft /angbracketright /arrowleft /minus /multiply) /FontFile 1518 0 R >>
+1533 0 obj
+<< /Type /FontDescriptor /FontName /VGMPAA+CMSY10 /Flags 4 /FontBBox [ -29 -960 1116 775 ] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 40 /XHeight 431 /CharSet( /angbracketleft /angbracketright /arrowleft /minus /multiply) /FontFile 1534 0 R >>
endobj
-1520 0 obj
+1536 0 obj
<< /Length1 1414 /Length2 6167 /Length3 0 /Filter /FlateDecode /Length 7134 >>
stream
xڍvTTk6(HK7FBADjc`bP:A@:SBRZ@:T@ios5kus=uy8!Jp-BeCS
@@ -7453,10 +7552,10 @@ n<Ȧ
.7z ^XEi[S<p15*;Aջ<d*+w]`ӷ3I4e:dz펢4)AwTiw||/KKj-Tf bS(Tq#z%I`uk9K^e[ZwʣzI|U|˄&eVJ6Sgߪa^4ǵ+ wN\EVةzew`wؓ/:71ἠP@᣸Ft7^HXfM[vU:x'?ibi ZM}&Od@9fcHMFKlpUe]:AE)(xȘkmD@~ F0ANǞEiXQRm9l%i;mFo1j 1^{WG 7HO ]ȉ")UjzlL?o
endstream
endobj
-1519 0 obj
-<< /Type /FontDescriptor /FontName /UZBPXA+CMSY5 /Flags 4 /FontBBox [ 21 -944 1448 791 ] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 56 /XHeight 431 /CharSet( /arrowleft /minus) /FontFile 1520 0 R >>
+1535 0 obj
+<< /Type /FontDescriptor /FontName /UZBPXA+CMSY5 /Flags 4 /FontBBox [ 21 -944 1448 791 ] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 56 /XHeight 431 /CharSet( /arrowleft /minus) /FontFile 1536 0 R >>
endobj
-1522 0 obj
+1538 0 obj
<< /Length1 1435 /Length2 6179 /Length3 0 /Filter /FlateDecode /Length 7153 >>
stream
xڍtT[.(0 ! ҂030 ݍ%* R-Hw7"|ugYxeP%
@@ -7485,317 +7584,320 @@ d"`tUe>!%_lkhCgKOnW~yң@᪘+>1#1VGp.ArrfSb
;jjIZxٱ1INzfݪy1M3"}~]\耆n>s5RQܶ nzp~Fqkqܲ='8~*}
endstream
endobj
-1521 0 obj
-<< /Type /FontDescriptor /FontName /QYJPQA+CMSY7 /Flags 4 /FontBBox [ -15 -951 1251 782 ] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 49 /XHeight 431 /CharSet( /arrowleft /arrowup /minus) /FontFile 1522 0 R >>
+1537 0 obj
+<< /Type /FontDescriptor /FontName /QYJPQA+CMSY7 /Flags 4 /FontBBox [ -15 -951 1251 782 ] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 49 /XHeight 431 /CharSet( /arrowleft /arrowup /minus) /FontFile 1538 0 R >>
endobj
-748 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /XEMCLW+CMBX10 /FontDescriptor 1495 0 R /FirstChar 49 /LastChar 100 /Widths 1319 0 R >>
+756 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /XEMCLW+CMBX10 /FontDescriptor 1511 0 R /FirstChar 49 /LastChar 100 /Widths 1335 0 R >>
endobj
-371 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /CFYTDH+CMEX10 /FontDescriptor 1497 0 R /FirstChar 12 /LastChar 125 /Widths 1446 0 R >>
+375 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /CFYTDH+CMEX10 /FontDescriptor 1513 0 R /FirstChar 12 /LastChar 125 /Widths 1462 0 R >>
endobj
-406 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /VMQSYC+CMEX7 /FontDescriptor 1499 0 R /FirstChar 112 /LastChar 112 /Widths 1354 0 R >>
+410 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /VMQSYC+CMEX7 /FontDescriptor 1515 0 R /FirstChar 112 /LastChar 112 /Widths 1370 0 R >>
endobj
-375 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /CEORQM+CMMI10 /FontDescriptor 1501 0 R /FirstChar 46 /LastChar 122 /Widths 1442 0 R >>
+379 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /CEORQM+CMMI10 /FontDescriptor 1517 0 R /FirstChar 46 /LastChar 122 /Widths 1458 0 R >>
endobj
-419 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /JZMBET+CMMI12 /FontDescriptor 1503 0 R /FirstChar 65 /LastChar 65 /Widths 1353 0 R >>
+423 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /JZMBET+CMMI12 /FontDescriptor 1519 0 R /FirstChar 65 /LastChar 65 /Widths 1369 0 R >>
endobj
-374 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /IUHNPC+CMMI5 /FontDescriptor 1505 0 R /FirstChar 76 /LastChar 110 /Widths 1443 0 R >>
+378 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /IUHNPC+CMMI5 /FontDescriptor 1521 0 R /FirstChar 76 /LastChar 110 /Widths 1459 0 R >>
endobj
-372 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /WUDPRN+CMMI7 /FontDescriptor 1507 0 R /FirstChar 59 /LastChar 120 /Widths 1445 0 R >>
+376 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /WUDPRN+CMMI7 /FontDescriptor 1523 0 R /FirstChar 59 /LastChar 120 /Widths 1461 0 R >>
endobj
-479 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /TEYYDJ+CMMI8 /FontDescriptor 1509 0 R /FirstChar 105 /LastChar 110 /Widths 1340 0 R >>
+488 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /TEYYDJ+CMMI8 /FontDescriptor 1525 0 R /FirstChar 105 /LastChar 110 /Widths 1356 0 R >>
endobj
-378 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /IHIWXH+CMR10 /FontDescriptor 1511 0 R /FirstChar 40 /LastChar 115 /Widths 1434 0 R >>
+382 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /IHIWXH+CMR10 /FontDescriptor 1527 0 R /FirstChar 40 /LastChar 115 /Widths 1450 0 R >>
endobj
-373 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /CPMJUS+CMR5 /FontDescriptor 1513 0 R /FirstChar 43 /LastChar 52 /Widths 1444 0 R >>
+377 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /CPMJUS+CMR5 /FontDescriptor 1529 0 R /FirstChar 43 /LastChar 52 /Widths 1460 0 R >>
endobj
-376 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /IZMGNT+CMR7 /FontDescriptor 1515 0 R /FirstChar 40 /LastChar 57 /Widths 1441 0 R >>
+380 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /IZMGNT+CMR7 /FontDescriptor 1531 0 R /FirstChar 40 /LastChar 57 /Widths 1457 0 R >>
endobj
-400 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /VGMPAA+CMSY10 /FontDescriptor 1517 0 R /FirstChar 0 /LastChar 105 /Widths 1355 0 R >>
+404 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /VGMPAA+CMSY10 /FontDescriptor 1533 0 R /FirstChar 0 /LastChar 105 /Widths 1371 0 R >>
endobj
-737 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /UZBPXA+CMSY5 /FontDescriptor 1519 0 R /FirstChar 0 /LastChar 32 /Widths 1320 0 R >>
+745 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /UZBPXA+CMSY5 /FontDescriptor 1535 0 R /FirstChar 0 /LastChar 32 /Widths 1336 0 R >>
endobj
-638 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /QYJPQA+CMSY7 /FontDescriptor 1521 0 R /FirstChar 0 /LastChar 34 /Widths 1327 0 R >>
+646 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /QYJPQA+CMSY7 /FontDescriptor 1537 0 R /FirstChar 0 /LastChar 34 /Widths 1343 0 R >>
endobj
-390 0 obj
-<< /Type /Pages /Parent 1523 0 R /Count 10 /Kids [ 357 0 R 395 0 R 403 0 R 416 0 R 431 0 R 444 0 R 449 0 R 454 0 R 461 0 R 466 0 R ] >>
+394 0 obj
+<< /Type /Pages /Parent 1539 0 R /Count 10 /Kids [ 361 0 R 399 0 R 407 0 R 420 0 R 435 0 R 448 0 R 453 0 R 457 0 R 461 0 R 468 0 R ] >>
endobj
-480 0 obj
-<< /Type /Pages /Parent 1523 0 R /Count 10 /Kids [ 476 0 R 489 0 R 496 0 R 501 0 R 506 0 R 512 0 R 521 0 R 527 0 R 533 0 R 539 0 R ] >>
+481 0 obj
+<< /Type /Pages /Parent 1539 0 R /Count 10 /Kids [ 477 0 R 485 0 R 497 0 R 504 0 R 509 0 R 514 0 R 520 0 R 529 0 R 535 0 R 541 0 R ] >>
endobj
-548 0 obj
-<< /Type /Pages /Parent 1523 0 R /Count 10 /Kids [ 545 0 R 552 0 R 559 0 R 565 0 R 573 0 R 581 0 R 591 0 R 598 0 R 603 0 R 608 0 R ] >>
+550 0 obj
+<< /Type /Pages /Parent 1539 0 R /Count 10 /Kids [ 547 0 R 554 0 R 560 0 R 567 0 R 573 0 R 581 0 R 589 0 R 599 0 R 606 0 R 611 0 R ] >>
endobj
-618 0 obj
-<< /Type /Pages /Parent 1523 0 R /Count 10 /Kids [ 615 0 R 623 0 R 635 0 R 644 0 R 651 0 R 659 0 R 665 0 R 674 0 R 683 0 R 691 0 R ] >>
+619 0 obj
+<< /Type /Pages /Parent 1539 0 R /Count 10 /Kids [ 616 0 R 624 0 R 631 0 R 643 0 R 652 0 R 659 0 R 667 0 R 673 0 R 682 0 R 691 0 R ] >>
endobj
-710 0 obj
-<< /Type /Pages /Parent 1523 0 R /Count 10 /Kids [ 701 0 R 714 0 R 724 0 R 729 0 R 734 0 R 745 0 R 754 0 R 763 0 R 771 0 R 778 0 R ] >>
+707 0 obj
+<< /Type /Pages /Parent 1539 0 R /Count 10 /Kids [ 699 0 R 710 0 R 722 0 R 732 0 R 737 0 R 742 0 R 753 0 R 762 0 R 771 0 R 779 0 R ] >>
endobj
-788 0 obj
-<< /Type /Pages /Parent 1523 0 R /Count 10 /Kids [ 784 0 R 792 0 R 798 0 R 806 0 R 815 0 R 830 0 R 837 0 R 842 0 R 848 0 R 852 0 R ] >>
+789 0 obj
+<< /Type /Pages /Parent 1539 0 R /Count 10 /Kids [ 786 0 R 793 0 R 799 0 R 806 0 R 814 0 R 823 0 R 838 0 R 845 0 R 850 0 R 856 0 R ] >>
endobj
-859 0 obj
-<< /Type /Pages /Parent 1523 0 R /Count 10 /Kids [ 856 0 R 861 0 R 865 0 R 869 0 R 874 0 R 879 0 R 883 0 R 887 0 R 1006 0 R 1112 0 R ] >>
+863 0 obj
+<< /Type /Pages /Parent 1539 0 R /Count 10 /Kids [ 860 0 R 865 0 R 869 0 R 873 0 R 877 0 R 882 0 R 887 0 R 891 0 R 895 0 R 1015 0 R ] >>
endobj
-1207 0 obj
-<< /Type /Pages /Parent 1523 0 R /Count 3 /Kids [ 1204 0 R 1248 0 R 1303 0 R ] >>
+1125 0 obj
+<< /Type /Pages /Parent 1539 0 R /Count 5 /Kids [ 1122 0 R 1215 0 R 1258 0 R 1314 0 R 1319 0 R ] >>
endobj
-1523 0 obj
-<< /Type /Pages /Count 73 /Kids [ 390 0 R 480 0 R 548 0 R 618 0 R 710 0 R 788 0 R 859 0 R 1207 0 R ] >>
+1539 0 obj
+<< /Type /Pages /Count 75 /Kids [ 394 0 R 481 0 R 550 0 R 619 0 R 707 0 R 789 0 R 863 0 R 1125 0 R ] >>
endobj
-1524 0 obj
-<< /Type /Outlines /First 6 0 R /Last 354 0 R /Count 19 >>
+1540 0 obj
+<< /Type /Outlines /First 6 0 R /Last 358 0 R /Count 19 >>
+endobj
+358 0 obj
+<< /Title 359 0 R /A 356 0 R /Parent 1540 0 R /Prev 314 0 R >>
endobj
354 0 obj
-<< /Title 355 0 R /A 352 0 R /Parent 1524 0 R /Prev 310 0 R >>
+<< /Title 355 0 R /A 352 0 R /Parent 314 0 R /Prev 350 0 R >>
endobj
350 0 obj
-<< /Title 351 0 R /A 348 0 R /Parent 310 0 R /Prev 346 0 R >>
+<< /Title 351 0 R /A 348 0 R /Parent 314 0 R /Prev 346 0 R /Next 354 0 R >>
endobj
346 0 obj
-<< /Title 347 0 R /A 344 0 R /Parent 310 0 R /Prev 342 0 R /Next 350 0 R >>
+<< /Title 347 0 R /A 344 0 R /Parent 314 0 R /Prev 342 0 R /Next 350 0 R >>
endobj
342 0 obj
-<< /Title 343 0 R /A 340 0 R /Parent 310 0 R /Prev 338 0 R /Next 346 0 R >>
+<< /Title 343 0 R /A 340 0 R /Parent 314 0 R /Prev 338 0 R /Next 346 0 R >>
endobj
338 0 obj
-<< /Title 339 0 R /A 336 0 R /Parent 310 0 R /Prev 334 0 R /Next 342 0 R >>
+<< /Title 339 0 R /A 336 0 R /Parent 314 0 R /Prev 334 0 R /Next 342 0 R >>
endobj
334 0 obj
-<< /Title 335 0 R /A 332 0 R /Parent 310 0 R /Prev 330 0 R /Next 338 0 R >>
+<< /Title 335 0 R /A 332 0 R /Parent 314 0 R /Prev 330 0 R /Next 338 0 R >>
endobj
330 0 obj
-<< /Title 331 0 R /A 328 0 R /Parent 310 0 R /Prev 326 0 R /Next 334 0 R >>
+<< /Title 331 0 R /A 328 0 R /Parent 314 0 R /Prev 326 0 R /Next 334 0 R >>
endobj
326 0 obj
-<< /Title 327 0 R /A 324 0 R /Parent 310 0 R /Prev 322 0 R /Next 330 0 R >>
+<< /Title 327 0 R /A 324 0 R /Parent 314 0 R /Prev 322 0 R /Next 330 0 R >>
endobj
322 0 obj
-<< /Title 323 0 R /A 320 0 R /Parent 310 0 R /Prev 318 0 R /Next 326 0 R >>
+<< /Title 323 0 R /A 320 0 R /Parent 314 0 R /Prev 318 0 R /Next 326 0 R >>
endobj
318 0 obj
-<< /Title 319 0 R /A 316 0 R /Parent 310 0 R /Prev 314 0 R /Next 322 0 R >>
+<< /Title 319 0 R /A 316 0 R /Parent 314 0 R /Next 322 0 R >>
endobj
314 0 obj
-<< /Title 315 0 R /A 312 0 R /Parent 310 0 R /Next 318 0 R >>
+<< /Title 315 0 R /A 312 0 R /Parent 1540 0 R /Prev 294 0 R /Next 358 0 R /First 318 0 R /Last 354 0 R /Count -10 >>
endobj
310 0 obj
-<< /Title 311 0 R /A 308 0 R /Parent 1524 0 R /Prev 290 0 R /Next 354 0 R /First 314 0 R /Last 350 0 R /Count -10 >>
+<< /Title 311 0 R /A 308 0 R /Parent 294 0 R /Prev 306 0 R >>
endobj
306 0 obj
-<< /Title 307 0 R /A 304 0 R /Parent 290 0 R /Prev 302 0 R >>
+<< /Title 307 0 R /A 304 0 R /Parent 294 0 R /Prev 302 0 R /Next 310 0 R >>
endobj
302 0 obj
-<< /Title 303 0 R /A 300 0 R /Parent 290 0 R /Prev 298 0 R /Next 306 0 R >>
+<< /Title 303 0 R /A 300 0 R /Parent 294 0 R /Prev 298 0 R /Next 306 0 R >>
endobj
298 0 obj
-<< /Title 299 0 R /A 296 0 R /Parent 290 0 R /Prev 294 0 R /Next 302 0 R >>
+<< /Title 299 0 R /A 296 0 R /Parent 294 0 R /Next 302 0 R >>
endobj
294 0 obj
-<< /Title 295 0 R /A 292 0 R /Parent 290 0 R /Next 298 0 R >>
+<< /Title 295 0 R /A 292 0 R /Parent 1540 0 R /Prev 290 0 R /Next 314 0 R /First 298 0 R /Last 310 0 R /Count -4 >>
endobj
290 0 obj
-<< /Title 291 0 R /A 288 0 R /Parent 1524 0 R /Prev 286 0 R /Next 310 0 R /First 294 0 R /Last 306 0 R /Count -4 >>
+<< /Title 291 0 R /A 288 0 R /Parent 1540 0 R /Prev 262 0 R /Next 294 0 R >>
endobj
286 0 obj
-<< /Title 287 0 R /A 284 0 R /Parent 1524 0 R /Prev 258 0 R /Next 290 0 R >>
+<< /Title 287 0 R /A 284 0 R /Parent 262 0 R /Prev 282 0 R >>
endobj
282 0 obj
-<< /Title 283 0 R /A 280 0 R /Parent 258 0 R /Prev 278 0 R >>
+<< /Title 283 0 R /A 280 0 R /Parent 262 0 R /Prev 278 0 R /Next 286 0 R >>
endobj
278 0 obj
-<< /Title 279 0 R /A 276 0 R /Parent 258 0 R /Prev 274 0 R /Next 282 0 R >>
+<< /Title 279 0 R /A 276 0 R /Parent 262 0 R /Prev 266 0 R /Next 282 0 R >>
endobj
274 0 obj
-<< /Title 275 0 R /A 272 0 R /Parent 258 0 R /Prev 262 0 R /Next 278 0 R >>
+<< /Title 275 0 R /A 272 0 R /Parent 266 0 R /Prev 270 0 R >>
endobj
270 0 obj
-<< /Title 271 0 R /A 268 0 R /Parent 262 0 R /Prev 266 0 R >>
+<< /Title 271 0 R /A 268 0 R /Parent 266 0 R /Next 274 0 R >>
endobj
266 0 obj
-<< /Title 267 0 R /A 264 0 R /Parent 262 0 R /Next 270 0 R >>
+<< /Title 267 0 R /A 264 0 R /Parent 262 0 R /Next 278 0 R /First 270 0 R /Last 274 0 R /Count -2 >>
endobj
262 0 obj
-<< /Title 263 0 R /A 260 0 R /Parent 258 0 R /Next 274 0 R /First 266 0 R /Last 270 0 R /Count -2 >>
+<< /Title 263 0 R /A 260 0 R /Parent 1540 0 R /Prev 214 0 R /Next 290 0 R /First 266 0 R /Last 286 0 R /Count -4 >>
endobj
258 0 obj
-<< /Title 259 0 R /A 256 0 R /Parent 1524 0 R /Prev 210 0 R /Next 286 0 R /First 262 0 R /Last 282 0 R /Count -4 >>
+<< /Title 259 0 R /A 256 0 R /Parent 214 0 R /Prev 254 0 R >>
endobj
254 0 obj
-<< /Title 255 0 R /A 252 0 R /Parent 210 0 R /Prev 250 0 R >>
+<< /Title 255 0 R /A 252 0 R /Parent 214 0 R /Prev 250 0 R /Next 258 0 R >>
endobj
250 0 obj
-<< /Title 251 0 R /A 248 0 R /Parent 210 0 R /Prev 246 0 R /Next 254 0 R >>
+<< /Title 251 0 R /A 248 0 R /Parent 214 0 R /Prev 246 0 R /Next 254 0 R >>
endobj
246 0 obj
-<< /Title 247 0 R /A 244 0 R /Parent 210 0 R /Prev 242 0 R /Next 250 0 R >>
+<< /Title 247 0 R /A 244 0 R /Parent 214 0 R /Prev 242 0 R /Next 250 0 R >>
endobj
242 0 obj
-<< /Title 243 0 R /A 240 0 R /Parent 210 0 R /Prev 238 0 R /Next 246 0 R >>
+<< /Title 243 0 R /A 240 0 R /Parent 214 0 R /Prev 238 0 R /Next 246 0 R >>
endobj
238 0 obj
-<< /Title 239 0 R /A 236 0 R /Parent 210 0 R /Prev 234 0 R /Next 242 0 R >>
+<< /Title 239 0 R /A 236 0 R /Parent 214 0 R /Prev 234 0 R /Next 242 0 R >>
endobj
234 0 obj
-<< /Title 235 0 R /A 232 0 R /Parent 210 0 R /Prev 230 0 R /Next 238 0 R >>
+<< /Title 235 0 R /A 232 0 R /Parent 214 0 R /Prev 230 0 R /Next 238 0 R >>
endobj
230 0 obj
-<< /Title 231 0 R /A 228 0 R /Parent 210 0 R /Prev 226 0 R /Next 234 0 R >>
+<< /Title 231 0 R /A 228 0 R /Parent 214 0 R /Prev 226 0 R /Next 234 0 R >>
endobj
226 0 obj
-<< /Title 227 0 R /A 224 0 R /Parent 210 0 R /Prev 222 0 R /Next 230 0 R >>
+<< /Title 227 0 R /A 224 0 R /Parent 214 0 R /Prev 222 0 R /Next 230 0 R >>
endobj
222 0 obj
-<< /Title 223 0 R /A 220 0 R /Parent 210 0 R /Prev 218 0 R /Next 226 0 R >>
+<< /Title 223 0 R /A 220 0 R /Parent 214 0 R /Prev 218 0 R /Next 226 0 R >>
endobj
218 0 obj
-<< /Title 219 0 R /A 216 0 R /Parent 210 0 R /Prev 214 0 R /Next 222 0 R >>
+<< /Title 219 0 R /A 216 0 R /Parent 214 0 R /Next 222 0 R >>
endobj
214 0 obj
-<< /Title 215 0 R /A 212 0 R /Parent 210 0 R /Next 218 0 R >>
+<< /Title 215 0 R /A 212 0 R /Parent 1540 0 R /Prev 190 0 R /Next 262 0 R /First 218 0 R /Last 258 0 R /Count -11 >>
endobj
210 0 obj
-<< /Title 211 0 R /A 208 0 R /Parent 1524 0 R /Prev 186 0 R /Next 258 0 R /First 214 0 R /Last 254 0 R /Count -11 >>
+<< /Title 211 0 R /A 208 0 R /Parent 190 0 R /Prev 206 0 R >>
endobj
206 0 obj
-<< /Title 207 0 R /A 204 0 R /Parent 186 0 R /Prev 202 0 R >>
+<< /Title 207 0 R /A 204 0 R /Parent 190 0 R /Prev 202 0 R /Next 210 0 R >>
endobj
202 0 obj
-<< /Title 203 0 R /A 200 0 R /Parent 186 0 R /Prev 198 0 R /Next 206 0 R >>
+<< /Title 203 0 R /A 200 0 R /Parent 190 0 R /Prev 198 0 R /Next 206 0 R >>
endobj
198 0 obj
-<< /Title 199 0 R /A 196 0 R /Parent 186 0 R /Prev 194 0 R /Next 202 0 R >>
+<< /Title 199 0 R /A 196 0 R /Parent 190 0 R /Prev 194 0 R /Next 202 0 R >>
endobj
194 0 obj
-<< /Title 195 0 R /A 192 0 R /Parent 186 0 R /Prev 190 0 R /Next 198 0 R >>
+<< /Title 195 0 R /A 192 0 R /Parent 190 0 R /Next 198 0 R >>
endobj
190 0 obj
-<< /Title 191 0 R /A 188 0 R /Parent 186 0 R /Next 194 0 R >>
+<< /Title 191 0 R /A 188 0 R /Parent 1540 0 R /Prev 170 0 R /Next 214 0 R /First 194 0 R /Last 210 0 R /Count -5 >>
endobj
186 0 obj
-<< /Title 187 0 R /A 184 0 R /Parent 1524 0 R /Prev 166 0 R /Next 210 0 R /First 190 0 R /Last 206 0 R /Count -5 >>
+<< /Title 187 0 R /A 184 0 R /Parent 170 0 R /Prev 182 0 R >>
endobj
182 0 obj
-<< /Title 183 0 R /A 180 0 R /Parent 166 0 R /Prev 178 0 R >>
+<< /Title 183 0 R /A 180 0 R /Parent 170 0 R /Prev 178 0 R /Next 186 0 R >>
endobj
178 0 obj
-<< /Title 179 0 R /A 176 0 R /Parent 166 0 R /Prev 174 0 R /Next 182 0 R >>
+<< /Title 179 0 R /A 176 0 R /Parent 170 0 R /Prev 174 0 R /Next 182 0 R >>
endobj
174 0 obj
-<< /Title 175 0 R /A 172 0 R /Parent 166 0 R /Prev 170 0 R /Next 178 0 R >>
+<< /Title 175 0 R /A 172 0 R /Parent 170 0 R /Next 178 0 R >>
endobj
170 0 obj
-<< /Title 171 0 R /A 168 0 R /Parent 166 0 R /Next 174 0 R >>
+<< /Title 171 0 R /A 168 0 R /Parent 1540 0 R /Prev 166 0 R /Next 190 0 R /First 174 0 R /Last 186 0 R /Count -4 >>
endobj
166 0 obj
-<< /Title 167 0 R /A 164 0 R /Parent 1524 0 R /Prev 162 0 R /Next 186 0 R /First 170 0 R /Last 182 0 R /Count -4 >>
+<< /Title 167 0 R /A 164 0 R /Parent 1540 0 R /Prev 138 0 R /Next 170 0 R >>
endobj
162 0 obj
-<< /Title 163 0 R /A 160 0 R /Parent 1524 0 R /Prev 134 0 R /Next 166 0 R >>
+<< /Title 163 0 R /A 160 0 R /Parent 138 0 R /Prev 158 0 R >>
endobj
158 0 obj
-<< /Title 159 0 R /A 156 0 R /Parent 134 0 R /Prev 154 0 R >>
+<< /Title 159 0 R /A 156 0 R /Parent 138 0 R /Prev 154 0 R /Next 162 0 R >>
endobj
154 0 obj
-<< /Title 155 0 R /A 152 0 R /Parent 134 0 R /Prev 150 0 R /Next 158 0 R >>
+<< /Title 155 0 R /A 152 0 R /Parent 138 0 R /Prev 150 0 R /Next 158 0 R >>
endobj
150 0 obj
-<< /Title 151 0 R /A 148 0 R /Parent 134 0 R /Prev 146 0 R /Next 154 0 R >>
+<< /Title 151 0 R /A 148 0 R /Parent 138 0 R /Prev 146 0 R /Next 154 0 R >>
endobj
146 0 obj
-<< /Title 147 0 R /A 144 0 R /Parent 134 0 R /Prev 142 0 R /Next 150 0 R >>
+<< /Title 147 0 R /A 144 0 R /Parent 138 0 R /Prev 142 0 R /Next 150 0 R >>
endobj
142 0 obj
-<< /Title 143 0 R /A 140 0 R /Parent 134 0 R /Prev 138 0 R /Next 146 0 R >>
+<< /Title 143 0 R /A 140 0 R /Parent 138 0 R /Next 146 0 R >>
endobj
138 0 obj
-<< /Title 139 0 R /A 136 0 R /Parent 134 0 R /Next 142 0 R >>
+<< /Title 139 0 R /A 136 0 R /Parent 1540 0 R /Prev 134 0 R /Next 166 0 R /First 142 0 R /Last 162 0 R /Count -6 >>
endobj
134 0 obj
-<< /Title 135 0 R /A 132 0 R /Parent 1524 0 R /Prev 130 0 R /Next 162 0 R /First 138 0 R /Last 158 0 R /Count -6 >>
+<< /Title 135 0 R /A 132 0 R /Parent 1540 0 R /Prev 118 0 R /Next 138 0 R >>
endobj
130 0 obj
-<< /Title 131 0 R /A 128 0 R /Parent 1524 0 R /Prev 114 0 R /Next 134 0 R >>
+<< /Title 131 0 R /A 128 0 R /Parent 118 0 R /Prev 126 0 R >>
endobj
126 0 obj
-<< /Title 127 0 R /A 124 0 R /Parent 114 0 R /Prev 122 0 R >>
+<< /Title 127 0 R /A 124 0 R /Parent 118 0 R /Prev 122 0 R /Next 130 0 R >>
endobj
122 0 obj
-<< /Title 123 0 R /A 120 0 R /Parent 114 0 R /Prev 118 0 R /Next 126 0 R >>
+<< /Title 123 0 R /A 120 0 R /Parent 118 0 R /Next 126 0 R >>
endobj
118 0 obj
-<< /Title 119 0 R /A 116 0 R /Parent 114 0 R /Next 122 0 R >>
+<< /Title 119 0 R /A 116 0 R /Parent 1540 0 R /Prev 114 0 R /Next 134 0 R /First 122 0 R /Last 130 0 R /Count -3 >>
endobj
114 0 obj
-<< /Title 115 0 R /A 112 0 R /Parent 1524 0 R /Prev 110 0 R /Next 130 0 R /First 118 0 R /Last 126 0 R /Count -3 >>
+<< /Title 115 0 R /A 112 0 R /Parent 1540 0 R /Prev 94 0 R /Next 118 0 R >>
endobj
110 0 obj
-<< /Title 111 0 R /A 108 0 R /Parent 1524 0 R /Prev 90 0 R /Next 114 0 R >>
+<< /Title 111 0 R /A 108 0 R /Parent 94 0 R /Prev 106 0 R >>
endobj
106 0 obj
-<< /Title 107 0 R /A 104 0 R /Parent 90 0 R /Prev 102 0 R >>
+<< /Title 107 0 R /A 104 0 R /Parent 94 0 R /Prev 102 0 R /Next 110 0 R >>
endobj
102 0 obj
-<< /Title 103 0 R /A 100 0 R /Parent 90 0 R /Prev 98 0 R /Next 106 0 R >>
+<< /Title 103 0 R /A 100 0 R /Parent 94 0 R /Prev 98 0 R /Next 106 0 R >>
endobj
98 0 obj
-<< /Title 99 0 R /A 96 0 R /Parent 90 0 R /Prev 94 0 R /Next 102 0 R >>
+<< /Title 99 0 R /A 96 0 R /Parent 94 0 R /Next 102 0 R >>
endobj
94 0 obj
-<< /Title 95 0 R /A 92 0 R /Parent 90 0 R /Next 98 0 R >>
+<< /Title 95 0 R /A 92 0 R /Parent 1540 0 R /Prev 50 0 R /Next 114 0 R /First 98 0 R /Last 110 0 R /Count -4 >>
endobj
90 0 obj
-<< /Title 91 0 R /A 88 0 R /Parent 1524 0 R /Prev 46 0 R /Next 110 0 R /First 94 0 R /Last 106 0 R /Count -4 >>
+<< /Title 91 0 R /A 88 0 R /Parent 70 0 R /Prev 86 0 R >>
endobj
86 0 obj
-<< /Title 87 0 R /A 84 0 R /Parent 66 0 R /Prev 82 0 R >>
+<< /Title 87 0 R /A 84 0 R /Parent 70 0 R /Prev 82 0 R /Next 90 0 R >>
endobj
82 0 obj
-<< /Title 83 0 R /A 80 0 R /Parent 66 0 R /Prev 78 0 R /Next 86 0 R >>
+<< /Title 83 0 R /A 80 0 R /Parent 70 0 R /Prev 78 0 R /Next 86 0 R >>
endobj
78 0 obj
-<< /Title 79 0 R /A 76 0 R /Parent 66 0 R /Prev 74 0 R /Next 82 0 R >>
+<< /Title 79 0 R /A 76 0 R /Parent 70 0 R /Prev 74 0 R /Next 82 0 R >>
endobj
74 0 obj
-<< /Title 75 0 R /A 72 0 R /Parent 66 0 R /Prev 70 0 R /Next 78 0 R >>
+<< /Title 75 0 R /A 72 0 R /Parent 70 0 R /Next 78 0 R >>
endobj
70 0 obj
-<< /Title 71 0 R /A 68 0 R /Parent 66 0 R /Next 74 0 R >>
+<< /Title 71 0 R /A 68 0 R /Parent 50 0 R /Prev 66 0 R /First 74 0 R /Last 90 0 R /Count -5 >>
endobj
66 0 obj
-<< /Title 67 0 R /A 64 0 R /Parent 46 0 R /Prev 62 0 R /First 70 0 R /Last 86 0 R /Count -5 >>
+<< /Title 67 0 R /A 64 0 R /Parent 50 0 R /Prev 54 0 R /Next 70 0 R >>
endobj
62 0 obj
-<< /Title 63 0 R /A 60 0 R /Parent 46 0 R /Prev 50 0 R /Next 66 0 R >>
+<< /Title 63 0 R /A 60 0 R /Parent 54 0 R /Prev 58 0 R >>
endobj
58 0 obj
-<< /Title 59 0 R /A 56 0 R /Parent 50 0 R /Prev 54 0 R >>
+<< /Title 59 0 R /A 56 0 R /Parent 54 0 R /Next 62 0 R >>
endobj
54 0 obj
-<< /Title 55 0 R /A 52 0 R /Parent 50 0 R /Next 58 0 R >>
+<< /Title 55 0 R /A 52 0 R /Parent 50 0 R /Next 66 0 R /First 58 0 R /Last 62 0 R /Count -2 >>
endobj
50 0 obj
-<< /Title 51 0 R /A 48 0 R /Parent 46 0 R /Next 62 0 R /First 54 0 R /Last 58 0 R /Count -2 >>
+<< /Title 51 0 R /A 48 0 R /Parent 1540 0 R /Prev 18 0 R /Next 94 0 R /First 54 0 R /Last 70 0 R /Count -3 >>
endobj
46 0 obj
-<< /Title 47 0 R /A 44 0 R /Parent 1524 0 R /Prev 18 0 R /Next 90 0 R /First 50 0 R /Last 66 0 R /Count -3 >>
+<< /Title 47 0 R /A 44 0 R /Parent 18 0 R /Prev 42 0 R >>
endobj
42 0 obj
-<< /Title 43 0 R /A 40 0 R /Parent 18 0 R /Prev 38 0 R >>
+<< /Title 43 0 R /A 40 0 R /Parent 18 0 R /Prev 38 0 R /Next 46 0 R >>
endobj
38 0 obj
<< /Title 39 0 R /A 36 0 R /Parent 18 0 R /Prev 34 0 R /Next 42 0 R >>
@@ -7813,1586 +7915,1602 @@ endobj
<< /Title 23 0 R /A 20 0 R /Parent 18 0 R /Next 26 0 R >>
endobj
18 0 obj
-<< /Title 19 0 R /A 16 0 R /Parent 1524 0 R /Prev 14 0 R /Next 46 0 R /First 22 0 R /Last 42 0 R /Count -6 >>
+<< /Title 19 0 R /A 16 0 R /Parent 1540 0 R /Prev 14 0 R /Next 50 0 R /First 22 0 R /Last 46 0 R /Count -7 >>
endobj
14 0 obj
-<< /Title 15 0 R /A 12 0 R /Parent 1524 0 R /Prev 10 0 R /Next 18 0 R >>
+<< /Title 15 0 R /A 12 0 R /Parent 1540 0 R /Prev 10 0 R /Next 18 0 R >>
endobj
10 0 obj
-<< /Title 11 0 R /A 8 0 R /Parent 1524 0 R /Prev 6 0 R /Next 14 0 R >>
+<< /Title 11 0 R /A 8 0 R /Parent 1540 0 R /Prev 6 0 R /Next 14 0 R >>
endobj
6 0 obj
-<< /Title 7 0 R /A 4 0 R /Parent 1524 0 R /Next 10 0 R >>
+<< /Title 7 0 R /A 4 0 R /Parent 1540 0 R /Next 10 0 R >>
endobj
-1525 0 obj
-<< /Names [ (Doc-Start) 362 0 R (Item.1) 407 0 R (Item.10) 709 0 R (Item.11) 845 0 R (Item.12) 846 0 R (Item.2) 408 0 R (Item.3) 409 0 R (Item.4) 410 0 R (Item.5) 697 0 R (Item.6) 698 0 R (Item.7) 706 0 R (Item.8) 707 0 R (Item.9) 708 0 R (page.1) 361 0 R (page.10) 468 0 R (page.11) 478 0 R (page.12) 491 0 R (page.13) 498 0 R (page.14) 503 0 R (page.15) 508 0 R (page.16) 514 0 R (page.17) 523 0 R (page.18) 529 0 R (page.19) 535 0 R (page.2) 397 0 R (page.20) 541 0 R (page.21) 547 0 R (page.22) 554 0 R (page.23) 561 0 R (page.24) 567 0 R (page.25) 575 0 R (page.26) 583 0 R ] /Limits [ (Doc-Start) (page.26) ] >>
+1541 0 obj
+<< /Names [ (Doc-Start) 366 0 R (Item.1) 411 0 R (Item.10) 718 0 R (Item.11) 853 0 R (Item.12) 854 0 R (Item.2) 412 0 R (Item.3) 413 0 R (Item.4) 414 0 R (Item.5) 705 0 R (Item.6) 706 0 R (Item.7) 715 0 R (Item.8) 716 0 R (Item.9) 717 0 R (page.1) 365 0 R (page.10) 470 0 R (page.11) 479 0 R (page.12) 487 0 R (page.13) 499 0 R (page.14) 506 0 R (page.15) 511 0 R (page.16) 516 0 R (page.17) 522 0 R (page.18) 531 0 R (page.19) 537 0 R (page.2) 401 0 R (page.20) 543 0 R (page.21) 549 0 R (page.22) 556 0 R (page.23) 562 0 R (page.24) 569 0 R (page.25) 575 0 R (page.26) 583 0 R ] /Limits [ (Doc-Start) (page.26) ] >>
endobj
-1526 0 obj
-<< /Names [ (page.27) 593 0 R (page.28) 600 0 R (page.29) 605 0 R (page.3) 405 0 R (page.30) 610 0 R (page.31) 617 0 R (page.32) 625 0 R (page.33) 637 0 R (page.34) 646 0 R (page.35) 653 0 R (page.36) 661 0 R (page.37) 667 0 R (page.38) 676 0 R (page.39) 685 0 R (page.4) 418 0 R (page.40) 693 0 R (page.41) 703 0 R (page.42) 716 0 R (page.43) 726 0 R (page.44) 731 0 R (page.45) 736 0 R (page.46) 747 0 R (page.47) 756 0 R (page.48) 765 0 R (page.49) 773 0 R (page.5) 433 0 R (page.50) 780 0 R (page.51) 786 0 R (page.52) 794 0 R (page.53) 800 0 R (page.54) 808 0 R (page.55) 817 0 R ] /Limits [ (page.27) (page.55) ] >>
+1542 0 obj
+<< /Names [ (page.27) 591 0 R (page.28) 601 0 R (page.29) 608 0 R (page.3) 409 0 R (page.30) 613 0 R (page.31) 618 0 R (page.32) 626 0 R (page.33) 633 0 R (page.34) 645 0 R (page.35) 654 0 R (page.36) 661 0 R (page.37) 669 0 R (page.38) 675 0 R (page.39) 684 0 R (page.4) 422 0 R (page.40) 693 0 R (page.41) 701 0 R (page.42) 712 0 R (page.43) 724 0 R (page.44) 734 0 R (page.45) 739 0 R (page.46) 744 0 R (page.47) 755 0 R (page.48) 764 0 R (page.49) 773 0 R (page.5) 437 0 R (page.50) 781 0 R (page.51) 788 0 R (page.52) 795 0 R (page.53) 801 0 R (page.54) 808 0 R (page.55) 816 0 R ] /Limits [ (page.27) (page.55) ] >>
endobj
-1527 0 obj
-<< /Names [ (page.56) 832 0 R (page.57) 839 0 R (page.58) 844 0 R (page.59) 850 0 R (page.6) 446 0 R (page.60) 854 0 R (page.61) 858 0 R (page.62) 863 0 R (page.63) 867 0 R (page.64) 871 0 R (page.65) 876 0 R (page.66) 881 0 R (page.67) 885 0 R (page.68) 889 0 R (page.69) 1008 0 R (page.7) 451 0 R (page.70) 1114 0 R (page.71) 1206 0 R (page.72) 1250 0 R (page.73) 1305 0 R (page.8) 456 0 R (page.9) 463 0 R (section*.2) 353 0 R (section.1) 5 0 R (section.10) 133 0 R (section.11) 161 0 R (section.12) 165 0 R (section.13) 185 0 R (section.14) 209 0 R (section.15) 257 0 R (section.16) 285 0 R (section.17) 289 0 R ] /Limits [ (page.56) (section.17) ] >>
+1543 0 obj
+<< /Names [ (page.56) 825 0 R (page.57) 840 0 R (page.58) 847 0 R (page.59) 852 0 R (page.6) 450 0 R (page.60) 858 0 R (page.61) 862 0 R (page.62) 867 0 R (page.63) 871 0 R (page.64) 875 0 R (page.65) 879 0 R (page.66) 884 0 R (page.67) 889 0 R (page.68) 893 0 R (page.69) 897 0 R (page.7) 455 0 R (page.70) 1017 0 R (page.71) 1124 0 R (page.72) 1217 0 R (page.73) 1260 0 R (page.74) 1316 0 R (page.75) 1321 0 R (page.8) 459 0 R (page.9) 463 0 R (section*.2) 357 0 R (section.1) 5 0 R (section.10) 137 0 R (section.11) 165 0 R (section.12) 169 0 R (section.13) 189 0 R (section.14) 213 0 R (section.15) 261 0 R ] /Limits [ (page.56) (section.15) ] >>
endobj
-1528 0 obj
-<< /Names [ (section.18) 309 0 R (section.2) 9 0 R (section.3) 13 0 R (section.4) 17 0 R (section.5) 45 0 R (section.6) 89 0 R (section.7) 109 0 R (section.8) 113 0 R (section.9) 129 0 R (subsection.10.1) 137 0 R (subsection.10.2) 141 0 R (subsection.10.3) 145 0 R (subsection.10.4) 149 0 R (subsection.10.5) 153 0 R (subsection.10.6) 157 0 R (subsection.12.1) 169 0 R (subsection.12.2) 173 0 R (subsection.12.3) 177 0 R (subsection.12.4) 181 0 R (subsection.13.1) 189 0 R (subsection.13.2) 193 0 R (subsection.13.3) 197 0 R (subsection.13.4) 201 0 R (subsection.13.5) 205 0 R (subsection.14.1) 213 0 R (subsection.14.10) 249 0 R (subsection.14.11) 253 0 R (subsection.14.2) 217 0 R (subsection.14.3) 221 0 R (subsection.14.4) 225 0 R (subsection.14.5) 229 0 R (subsection.14.6) 233 0 R ] /Limits [ (section.18) (subsection.14.6) ] >>
+1544 0 obj
+<< /Names [ (section.16) 289 0 R (section.17) 293 0 R (section.18) 313 0 R (section.2) 9 0 R (section.3) 13 0 R (section.4) 17 0 R (section.5) 49 0 R (section.6) 93 0 R (section.7) 113 0 R (section.8) 117 0 R (section.9) 133 0 R (subsection.10.1) 141 0 R (subsection.10.2) 145 0 R (subsection.10.3) 149 0 R (subsection.10.4) 153 0 R (subsection.10.5) 157 0 R (subsection.10.6) 161 0 R (subsection.12.1) 173 0 R (subsection.12.2) 177 0 R (subsection.12.3) 181 0 R (subsection.12.4) 185 0 R (subsection.13.1) 193 0 R (subsection.13.2) 197 0 R (subsection.13.3) 201 0 R (subsection.13.4) 205 0 R (subsection.13.5) 209 0 R (subsection.14.1) 217 0 R (subsection.14.10) 253 0 R (subsection.14.11) 257 0 R (subsection.14.2) 221 0 R (subsection.14.3) 225 0 R (subsection.14.4) 229 0 R ] /Limits [ (section.16) (subsection.14.4) ] >>
endobj
-1529 0 obj
-<< /Names [ (subsection.14.7) 237 0 R (subsection.14.8) 241 0 R (subsection.14.9) 245 0 R (subsection.15.1) 261 0 R (subsection.15.2) 273 0 R (subsection.15.3) 277 0 R (subsection.15.4) 281 0 R (subsection.17.1) 293 0 R (subsection.17.2) 297 0 R (subsection.17.3) 301 0 R (subsection.17.4) 305 0 R (subsection.18.1) 313 0 R (subsection.18.10) 349 0 R (subsection.18.2) 317 0 R (subsection.18.3) 321 0 R (subsection.18.4) 325 0 R (subsection.18.5) 329 0 R (subsection.18.6) 333 0 R (subsection.18.7) 337 0 R (subsection.18.8) 341 0 R (subsection.18.9) 345 0 R (subsection.4.1) 21 0 R (subsection.4.2) 25 0 R (subsection.4.3) 29 0 R (subsection.4.4) 33 0 R (subsection.4.5) 37 0 R (subsection.4.6) 41 0 R (subsection.5.1) 49 0 R (subsection.5.2) 61 0 R (subsection.5.3) 65 0 R (subsection.6.1) 93 0 R (subsection.6.2) 97 0 R ] /Limits [ (subsection.14.7) (subsection.6.2) ] >>
+1545 0 obj
+<< /Names [ (subsection.14.5) 233 0 R (subsection.14.6) 237 0 R (subsection.14.7) 241 0 R (subsection.14.8) 245 0 R (subsection.14.9) 249 0 R (subsection.15.1) 265 0 R (subsection.15.2) 277 0 R (subsection.15.3) 281 0 R (subsection.15.4) 285 0 R (subsection.17.1) 297 0 R (subsection.17.2) 301 0 R (subsection.17.3) 305 0 R (subsection.17.4) 309 0 R (subsection.18.1) 317 0 R (subsection.18.10) 353 0 R (subsection.18.2) 321 0 R (subsection.18.3) 325 0 R (subsection.18.4) 329 0 R (subsection.18.5) 333 0 R (subsection.18.6) 337 0 R (subsection.18.7) 341 0 R (subsection.18.8) 345 0 R (subsection.18.9) 349 0 R (subsection.4.1) 21 0 R (subsection.4.2) 25 0 R (subsection.4.3) 29 0 R (subsection.4.4) 33 0 R (subsection.4.5) 37 0 R (subsection.4.6) 41 0 R (subsection.4.7) 45 0 R (subsection.5.1) 53 0 R (subsection.5.2) 65 0 R ] /Limits [ (subsection.14.5) (subsection.5.2) ] >>
endobj
-1530 0 obj
-<< /Names [ (subsection.6.3) 101 0 R (subsection.6.4) 105 0 R (subsection.8.1) 117 0 R (subsection.8.2) 121 0 R (subsection.8.3) 125 0 R (subsubsection.15.1.1) 265 0 R (subsubsection.15.1.2) 269 0 R (subsubsection.5.1.1) 53 0 R (subsubsection.5.1.2) 57 0 R (subsubsection.5.3.1) 69 0 R (subsubsection.5.3.2) 73 0 R (subsubsection.5.3.3) 77 0 R (subsubsection.5.3.4) 81 0 R (subsubsection.5.3.5) 85 0 R (table.caption.1) 687 0 R (tabularnote.1) 694 0 R (tabularnote.2) 696 0 R (tabularnote.3) 704 0 R (tabularnote.4) 705 0 R ] /Limits [ (subsection.6.3) (tabularnote.4) ] >>
+1546 0 obj
+<< /Names [ (subsection.5.3) 69 0 R (subsection.6.1) 97 0 R (subsection.6.2) 101 0 R (subsection.6.3) 105 0 R (subsection.6.4) 109 0 R (subsection.8.1) 121 0 R (subsection.8.2) 125 0 R (subsection.8.3) 129 0 R (subsubsection.15.1.1) 269 0 R (subsubsection.15.1.2) 273 0 R (subsubsection.5.1.1) 57 0 R (subsubsection.5.1.2) 61 0 R (subsubsection.5.3.1) 73 0 R (subsubsection.5.3.2) 77 0 R (subsubsection.5.3.3) 81 0 R (subsubsection.5.3.4) 85 0 R (subsubsection.5.3.5) 89 0 R (table.caption.1) 695 0 R (tabularnote.1) 702 0 R (tabularnote.2) 704 0 R (tabularnote.3) 713 0 R (tabularnote.4) 714 0 R ] /Limits [ (subsection.5.3) (tabularnote.4) ] >>
endobj
-1531 0 obj
-<< /Kids [ 1525 0 R 1526 0 R 1527 0 R 1528 0 R 1529 0 R 1530 0 R ] /Limits [ (Doc-Start) (tabularnote.4) ] >>
+1547 0 obj
+<< /Kids [ 1541 0 R 1542 0 R 1543 0 R 1544 0 R 1545 0 R 1546 0 R ] /Limits [ (Doc-Start) (tabularnote.4) ] >>
endobj
-1532 0 obj
-<< /Dests 1531 0 R >>
+1548 0 obj
+<< /Dests 1547 0 R >>
endobj
-1533 0 obj
-<< /Type /Catalog /Pages 1523 0 R /Outlines 1524 0 R /Names 1532 0 R /PageMode/UseOutlines /OpenAction 356 0 R >>
+1549 0 obj
+<< /Type /Catalog /Pages 1539 0 R /Outlines 1540 0 R /Names 1548 0 R /PageMode/UseOutlines /OpenAction 360 0 R >>
endobj
-1534 0 obj
-<< /Author(\376\377\000F\000.\000\040\000P\000a\000n\000t\000i\000g\000n\000y)/Title(\376\377\000L\040\031\000e\000x\000t\000e\000n\000s\000i\000o\000n\000\040\000n\000i\000c\000e\000m\000a\000t\000r\000i\000x)/Subject(\376\377\000U\000n\000e\000\040\000e\000x\000t\000e\000n\000s\000i\000o\000n\000\040\000L\000a\000T\000e\000X)/Creator(LaTeX with hyperref)/Keywords() /Producer (LuaTeX-1.18.1) /CreationDate (D:20240423141121+02'00') /ModDate (D:20240423141121+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.1 (MiKTeX 24.3.31)) >>
+1550 0 obj
+<< /Author(\376\377\000F\000.\000\040\000P\000a\000n\000t\000i\000g\000n\000y)/Title(\376\377\000L\040\031\000e\000x\000t\000e\000n\000s\000i\000o\000n\000\040\000n\000i\000c\000e\000m\000a\000t\000r\000i\000x)/Subject(\376\377\000U\000n\000e\000\040\000e\000x\000t\000e\000n\000s\000i\000o\000n\000\040\000L\000a\000T\000e\000X)/Creator(LaTeX with hyperref)/Keywords() /Producer (LuaTeX-1.18.1) /CreationDate (D:20240529203244+02'00') /ModDate (D:20240529203244+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.1 (MiKTeX 24.4)) >>
endobj
xref
-0 1535
+0 1551
0000000000 65535 f
-0000577916 00000 n
-0000578072 00000 n
-0000578144 00000 n
+0000588017 00000 n
+0000588173 00000 n
+0000588245 00000 n
0000000020 00000 n
-0000037642 00000 n
-0000869220 00000 n
+0000037848 00000 n
+0000879771 00000 n
0000000065 00000 n
0000000289 00000 n
-0000037702 00000 n
-0000869133 00000 n
+0000037908 00000 n
+0000879684 00000 n
0000000334 00000 n
0000000552 00000 n
-0000043449 00000 n
-0000869044 00000 n
+0000043655 00000 n
+0000879595 00000 n
0000000598 00000 n
0000000710 00000 n
-0000050170 00000 n
-0000868918 00000 n
+0000051013 00000 n
+0000879469 00000 n
0000000756 00000 n
0000000832 00000 n
-0000050231 00000 n
-0000868844 00000 n
+0000051074 00000 n
+0000879395 00000 n
0000000883 00000 n
0000000975 00000 n
-0000063884 00000 n
-0000868757 00000 n
+0000064890 00000 n
+0000879308 00000 n
0000001026 00000 n
0000001170 00000 n
-0000063945 00000 n
-0000868670 00000 n
+0000064950 00000 n
+0000879221 00000 n
0000001221 00000 n
0000001363 00000 n
-0000064006 00000 n
-0000868583 00000 n
+0000065011 00000 n
+0000879134 00000 n
0000001414 00000 n
0000001543 00000 n
-0000070663 00000 n
-0000868496 00000 n
+0000071389 00000 n
+0000879047 00000 n
0000001594 00000 n
0000001867 00000 n
-0000075947 00000 n
-0000868422 00000 n
+0000076982 00000 n
+0000878960 00000 n
0000001918 00000 n
0000002181 00000 n
-0000081055 00000 n
-0000868296 00000 n
-0000002227 00000 n
-0000002442 00000 n
-0000081116 00000 n
-0000868185 00000 n
-0000002493 00000 n
-0000002814 00000 n
-0000081177 00000 n
-0000868111 00000 n
-0000002870 00000 n
-0000003004 00000 n
-0000086418 00000 n
-0000868037 00000 n
-0000003060 00000 n
-0000003187 00000 n
-0000086479 00000 n
-0000867950 00000 n
-0000003238 00000 n
-0000003464 00000 n
-0000092589 00000 n
-0000867839 00000 n
-0000003515 00000 n
-0000003799 00000 n
-0000092650 00000 n
-0000867765 00000 n
-0000003855 00000 n
-0000004023 00000 n
-0000100464 00000 n
-0000867678 00000 n
-0000004079 00000 n
-0000004332 00000 n
-0000100525 00000 n
-0000867591 00000 n
-0000004388 00000 n
-0000004513 00000 n
-0000106784 00000 n
-0000867504 00000 n
-0000004569 00000 n
-0000004706 00000 n
-0000106845 00000 n
-0000867430 00000 n
-0000004762 00000 n
-0000004977 00000 n
-0000123640 00000 n
-0000867302 00000 n
-0000005023 00000 n
-0000005318 00000 n
-0000123701 00000 n
-0000867228 00000 n
-0000005369 00000 n
-0000005518 00000 n
-0000123762 00000 n
-0000867140 00000 n
-0000005569 00000 n
-0000005838 00000 n
-0000153186 00000 n
-0000867049 00000 n
-0000005890 00000 n
-0000006081 00000 n
-0000158579 00000 n
-0000866971 00000 n
-0000006133 00000 n
-0000006320 00000 n
-0000158641 00000 n
-0000866878 00000 n
-0000006367 00000 n
-0000006510 00000 n
-0000165090 00000 n
-0000866745 00000 n
-0000006557 00000 n
-0000006710 00000 n
-0000165152 00000 n
-0000866666 00000 n
-0000006762 00000 n
-0000006887 00000 n
-0000170512 00000 n
-0000866573 00000 n
-0000006939 00000 n
-0000007044 00000 n
-0000175215 00000 n
-0000866494 00000 n
-0000007096 00000 n
-0000007267 00000 n
-0000183211 00000 n
-0000866400 00000 n
-0000007314 00000 n
-0000007536 00000 n
-0000196044 00000 n
-0000866267 00000 n
-0000007584 00000 n
-0000007798 00000 n
-0000206965 00000 n
-0000866188 00000 n
-0000007851 00000 n
-0000007988 00000 n
-0000216224 00000 n
-0000866095 00000 n
-0000008041 00000 n
-0000008268 00000 n
-0000239298 00000 n
-0000866002 00000 n
-0000008321 00000 n
-0000008693 00000 n
-0000246093 00000 n
-0000865909 00000 n
-0000008746 00000 n
-0000008968 00000 n
-0000246155 00000 n
-0000865816 00000 n
-0000009021 00000 n
-0000009270 00000 n
-0000254434 00000 n
-0000865737 00000 n
-0000009323 00000 n
-0000009550 00000 n
-0000260914 00000 n
-0000865643 00000 n
-0000009598 00000 n
-0000009888 00000 n
-0000279093 00000 n
-0000865510 00000 n
-0000009936 00000 n
-0000010036 00000 n
-0000279155 00000 n
-0000865431 00000 n
-0000010089 00000 n
-0000010319 00000 n
-0000279217 00000 n
-0000865338 00000 n
-0000010372 00000 n
-0000010745 00000 n
-0000297191 00000 n
-0000865245 00000 n
-0000010798 00000 n
-0000011147 00000 n
-0000302877 00000 n
-0000865166 00000 n
-0000011200 00000 n
-0000011475 00000 n
-0000302939 00000 n
-0000865033 00000 n
-0000011523 00000 n
-0000011791 00000 n
-0000303001 00000 n
-0000864954 00000 n
-0000011844 00000 n
-0000012005 00000 n
-0000307984 00000 n
-0000864861 00000 n
-0000012058 00000 n
-0000012227 00000 n
-0000308046 00000 n
-0000864768 00000 n
-0000012280 00000 n
-0000012423 00000 n
-0000317848 00000 n
-0000864675 00000 n
-0000012476 00000 n
-0000012702 00000 n
-0000327111 00000 n
-0000864596 00000 n
-0000012755 00000 n
-0000013042 00000 n
-0000327173 00000 n
-0000864462 00000 n
-0000013090 00000 n
-0000013235 00000 n
-0000327235 00000 n
-0000864383 00000 n
-0000013288 00000 n
-0000013436 00000 n
-0000336258 00000 n
-0000864290 00000 n
-0000013489 00000 n
-0000013639 00000 n
-0000336320 00000 n
-0000864197 00000 n
-0000013692 00000 n
-0000013957 00000 n
-0000336382 00000 n
-0000864104 00000 n
-0000014010 00000 n
-0000014286 00000 n
-0000342301 00000 n
-0000864011 00000 n
-0000014339 00000 n
-0000014472 00000 n
-0000342363 00000 n
-0000863918 00000 n
-0000014525 00000 n
-0000014627 00000 n
-0000348889 00000 n
-0000863825 00000 n
-0000014680 00000 n
-0000014851 00000 n
-0000348951 00000 n
-0000863732 00000 n
-0000014904 00000 n
-0000015041 00000 n
-0000354529 00000 n
-0000863639 00000 n
-0000015094 00000 n
-0000015247 00000 n
-0000354591 00000 n
-0000863546 00000 n
-0000015301 00000 n
-0000015524 00000 n
-0000354653 00000 n
-0000863467 00000 n
-0000015578 00000 n
-0000015771 00000 n
-0000360887 00000 n
-0000863334 00000 n
-0000015819 00000 n
-0000016035 00000 n
-0000360949 00000 n
-0000863216 00000 n
-0000016088 00000 n
-0000016368 00000 n
-0000366308 00000 n
-0000863137 00000 n
-0000016426 00000 n
-0000016564 00000 n
-0000366370 00000 n
-0000863058 00000 n
-0000016622 00000 n
-0000016793 00000 n
-0000366432 00000 n
-0000862965 00000 n
-0000016846 00000 n
-0000017111 00000 n
-0000381958 00000 n
-0000862872 00000 n
-0000017164 00000 n
-0000017424 00000 n
-0000387539 00000 n
-0000862793 00000 n
-0000017477 00000 n
-0000017767 00000 n
-0000391858 00000 n
-0000862699 00000 n
-0000017815 00000 n
-0000017981 00000 n
-0000405153 00000 n
-0000862566 00000 n
-0000018029 00000 n
-0000018161 00000 n
-0000405215 00000 n
-0000862487 00000 n
-0000018214 00000 n
-0000018331 00000 n
-0000405277 00000 n
-0000862394 00000 n
-0000018384 00000 n
-0000018510 00000 n
-0000411277 00000 n
-0000862301 00000 n
-0000018563 00000 n
-0000018740 00000 n
-0000411339 00000 n
-0000862222 00000 n
-0000018793 00000 n
-0000018905 00000 n
-0000419832 00000 n
-0000862088 00000 n
-0000018953 00000 n
-0000019022 00000 n
-0000419894 00000 n
-0000862009 00000 n
-0000019075 00000 n
-0000019390 00000 n
-0000423944 00000 n
-0000861916 00000 n
-0000019443 00000 n
-0000019608 00000 n
-0000424006 00000 n
-0000861823 00000 n
-0000019661 00000 n
-0000019814 00000 n
-0000427989 00000 n
-0000861730 00000 n
-0000019867 00000 n
-0000020005 00000 n
-0000448040 00000 n
-0000861637 00000 n
-0000020058 00000 n
-0000020369 00000 n
-0000458238 00000 n
-0000861544 00000 n
-0000020422 00000 n
-0000020545 00000 n
-0000458300 00000 n
-0000861451 00000 n
-0000020598 00000 n
-0000020748 00000 n
-0000477716 00000 n
-0000861358 00000 n
-0000020801 00000 n
-0000021050 00000 n
-0000483925 00000 n
-0000861265 00000 n
-0000021103 00000 n
-0000021378 00000 n
-0000494822 00000 n
-0000861186 00000 n
-0000021432 00000 n
-0000021582 00000 n
-0000519176 00000 n
-0000861106 00000 n
-0000021630 00000 n
-0000021684 00000 n
-0000031994 00000 n
-0000032160 00000 n
-0000032522 00000 n
-0000021736 00000 n
-0000032398 00000 n
-0000032460 00000 n
-0000729539 00000 n
-0000725687 00000 n
-0000723234 00000 n
-0000717914 00000 n
-0000714568 00000 n
-0000712125 00000 n
-0000707558 00000 n
-0000704851 00000 n
-0000857852 00000 n
-0000858580 00000 n
-0000859016 00000 n
-0000858435 00000 n
-0000858144 00000 n
-0000859159 00000 n
-0000694127 00000 n
-0000858871 00000 n
-0000682391 00000 n
-0000677776 00000 n
-0000667641 00000 n
-0000659653 00000 n
-0000655199 00000 n
-0000649425 00000 n
-0000646074 00000 n
-0000636795 00000 n
-0000634889 00000 n
-0000624951 00000 n
-0000621489 00000 n
-0000859733 00000 n
-0000032131 00000 n
-0000037424 00000 n
-0000037270 00000 n
-0000037762 00000 n
-0000037096 00000 n
-0000032984 00000 n
-0000037580 00000 n
-0000612795 00000 n
-0000603392 00000 n
-0000859302 00000 n
-0000037233 00000 n
-0000043765 00000 n
-0000043266 00000 n
-0000038068 00000 n
-0000043387 00000 n
-0000857998 00000 n
-0000043510 00000 n
-0000043574 00000 n
-0000043638 00000 n
-0000043702 00000 n
-0000049793 00000 n
-0000049951 00000 n
-0000057364 00000 n
-0000057518 00000 n
-0000050292 00000 n
-0000049619 00000 n
-0000044058 00000 n
-0000050108 00000 n
-0000858290 00000 n
-0000049756 00000 n
-0000055946 00000 n
-0000056106 00000 n
-0000056266 00000 n
-0000056421 00000 n
-0000056574 00000 n
-0000056728 00000 n
-0000056887 00000 n
-0000057047 00000 n
-0000057205 00000 n
-0000057734 00000 n
-0000055700 00000 n
-0000050585 00000 n
-0000057672 00000 n
-0000599902 00000 n
-0000055837 00000 n
-0000062879 00000 n
-0000063036 00000 n
-0000063193 00000 n
-0000063352 00000 n
-0000063507 00000 n
-0000063664 00000 n
-0000070444 00000 n
-0000064067 00000 n
-0000062673 00000 n
-0000058001 00000 n
-0000063822 00000 n
-0000062810 00000 n
-0000070724 00000 n
-0000070278 00000 n
-0000064243 00000 n
-0000070601 00000 n
-0000070415 00000 n
-0000076008 00000 n
-0000075764 00000 n
-0000070965 00000 n
-0000075885 00000 n
-0000080522 00000 n
-0000080676 00000 n
-0000080839 00000 n
-0000081238 00000 n
-0000080340 00000 n
-0000076210 00000 n
-0000080993 00000 n
-0000080477 00000 n
-0000086540 00000 n
-0000086235 00000 n
-0000081427 00000 n
-0000086356 00000 n
-0000594516 00000 n
-0000091739 00000 n
-0000091892 00000 n
-0000092046 00000 n
-0000092210 00000 n
-0000092364 00000 n
-0000092711 00000 n
-0000091541 00000 n
-0000086755 00000 n
-0000092527 00000 n
-0000858725 00000 n
-0000859886 00000 n
-0000091678 00000 n
-0000099451 00000 n
-0000099611 00000 n
-0000099771 00000 n
-0000099931 00000 n
-0000100090 00000 n
-0000100246 00000 n
-0000100586 00000 n
-0000099245 00000 n
-0000093004 00000 n
-0000100402 00000 n
-0000099382 00000 n
-0000106406 00000 n
-0000106563 00000 n
-0000106906 00000 n
-0000106232 00000 n
-0000100853 00000 n
-0000106722 00000 n
-0000106369 00000 n
-0000111692 00000 n
-0000111509 00000 n
-0000107095 00000 n
-0000111630 00000 n
-0000118090 00000 n
-0000118307 00000 n
-0000117924 00000 n
-0000111946 00000 n
-0000118245 00000 n
-0000118061 00000 n
-0000129988 00000 n
-0000123823 00000 n
-0000123457 00000 n
-0000118535 00000 n
-0000123578 00000 n
-0000129358 00000 n
-0000129520 00000 n
-0000129680 00000 n
-0000129835 00000 n
-0000135488 00000 n
-0000130207 00000 n
-0000129160 00000 n
-0000124090 00000 n
-0000130145 00000 n
-0000129297 00000 n
-0000135648 00000 n
-0000135863 00000 n
-0000135314 00000 n
-0000130474 00000 n
-0000135801 00000 n
-0000135451 00000 n
-0000141355 00000 n
-0000141576 00000 n
-0000141189 00000 n
-0000136091 00000 n
-0000141514 00000 n
-0000141326 00000 n
-0000147254 00000 n
-0000147470 00000 n
-0000147088 00000 n
-0000141765 00000 n
-0000147408 00000 n
-0000147225 00000 n
-0000152972 00000 n
-0000153248 00000 n
-0000152806 00000 n
-0000147646 00000 n
-0000153124 00000 n
-0000860039 00000 n
-0000152943 00000 n
-0000158363 00000 n
-0000158703 00000 n
-0000158197 00000 n
-0000153528 00000 n
-0000158517 00000 n
-0000158334 00000 n
-0000164714 00000 n
-0000164874 00000 n
-0000165214 00000 n
-0000164540 00000 n
-0000158931 00000 n
-0000165028 00000 n
-0000164677 00000 n
-0000170296 00000 n
-0000170574 00000 n
-0000170130 00000 n
-0000165468 00000 n
-0000170450 00000 n
-0000170267 00000 n
-0000174672 00000 n
-0000174836 00000 n
-0000174994 00000 n
-0000175277 00000 n
-0000174490 00000 n
-0000170854 00000 n
-0000175153 00000 n
-0000174627 00000 n
-0000182677 00000 n
-0000182992 00000 n
-0000182832 00000 n
-0000183273 00000 n
-0000182495 00000 n
-0000175479 00000 n
-0000183149 00000 n
-0000182632 00000 n
-0000195189 00000 n
-0000195352 00000 n
-0000195506 00000 n
-0000195666 00000 n
-0000195825 00000 n
-0000196106 00000 n
-0000194991 00000 n
-0000183540 00000 n
-0000195982 00000 n
-0000590410 00000 n
-0000195128 00000 n
-0000206750 00000 n
-0000207027 00000 n
-0000206584 00000 n
-0000196399 00000 n
-0000206903 00000 n
-0000206721 00000 n
-0000216286 00000 n
-0000216041 00000 n
-0000207281 00000 n
-0000216162 00000 n
-0000245399 00000 n
-0000239358 00000 n
-0000239115 00000 n
-0000216553 00000 n
-0000239236 00000 n
-0000245559 00000 n
-0000245719 00000 n
-0000245879 00000 n
-0000246217 00000 n
-0000245209 00000 n
-0000239638 00000 n
-0000246031 00000 n
-0000860192 00000 n
-0000245346 00000 n
-0000253994 00000 n
-0000254214 00000 n
-0000254496 00000 n
-0000253820 00000 n
-0000246471 00000 n
-0000254372 00000 n
-0000587875 00000 n
-0000253957 00000 n
-0000260057 00000 n
-0000260217 00000 n
-0000260378 00000 n
-0000260532 00000 n
-0000260692 00000 n
-0000278398 00000 n
-0000260976 00000 n
-0000259859 00000 n
-0000254815 00000 n
-0000260852 00000 n
-0000859590 00000 n
-0000259996 00000 n
-0000278556 00000 n
-0000278711 00000 n
-0000278871 00000 n
-0000279279 00000 n
-0000278208 00000 n
-0000261282 00000 n
-0000279031 00000 n
-0000278345 00000 n
-0000285469 00000 n
-0000285624 00000 n
-0000285841 00000 n
-0000285295 00000 n
-0000279533 00000 n
-0000285779 00000 n
-0000285432 00000 n
-0000290993 00000 n
-0000291153 00000 n
-0000291311 00000 n
-0000291533 00000 n
-0000290811 00000 n
-0000286095 00000 n
-0000291471 00000 n
-0000290948 00000 n
-0000296933 00000 n
-0000297253 00000 n
-0000296767 00000 n
-0000291735 00000 n
-0000297129 00000 n
-0000296904 00000 n
-0000302497 00000 n
-0000302651 00000 n
-0000306989 00000 n
-0000307142 00000 n
-0000303063 00000 n
-0000302323 00000 n
-0000297559 00000 n
-0000302815 00000 n
-0000302460 00000 n
-0000307296 00000 n
-0000307456 00000 n
-0000307616 00000 n
-0000307770 00000 n
-0000308108 00000 n
-0000306783 00000 n
-0000303291 00000 n
-0000307922 00000 n
-0000306920 00000 n
-0000317402 00000 n
-0000313163 00000 n
-0000313323 00000 n
-0000313800 00000 n
-0000312989 00000 n
-0000308271 00000 n
-0000313483 00000 n
-0000313545 00000 n
-0000584812 00000 n
-0000313609 00000 n
-0000313673 00000 n
-0000313737 00000 n
-0000313126 00000 n
-0000317910 00000 n
-0000317219 00000 n
-0000314041 00000 n
-0000317340 00000 n
-0000317464 00000 n
-0000317528 00000 n
-0000317592 00000 n
-0000317656 00000 n
-0000317720 00000 n
-0000317784 00000 n
-0000860345 00000 n
-0000321880 00000 n
-0000322040 00000 n
-0000322261 00000 n
-0000321706 00000 n
-0000318138 00000 n
-0000322199 00000 n
-0000321843 00000 n
-0000326242 00000 n
-0000326401 00000 n
-0000326561 00000 n
-0000326721 00000 n
-0000326885 00000 n
-0000327297 00000 n
-0000326044 00000 n
-0000322437 00000 n
-0000327049 00000 n
-0000326181 00000 n
-0000336444 00000 n
-0000336075 00000 n
-0000327512 00000 n
-0000336196 00000 n
-0000342088 00000 n
-0000342425 00000 n
-0000341922 00000 n
-0000336724 00000 n
-0000342239 00000 n
-0000859447 00000 n
-0000342059 00000 n
-0000348054 00000 n
-0000348207 00000 n
-0000348361 00000 n
-0000348519 00000 n
-0000348673 00000 n
-0000349013 00000 n
-0000347856 00000 n
-0000342744 00000 n
-0000348827 00000 n
-0000857706 00000 n
-0000347993 00000 n
-0000353964 00000 n
-0000354123 00000 n
-0000354277 00000 n
-0000354715 00000 n
-0000353782 00000 n
-0000349293 00000 n
-0000354467 00000 n
-0000353919 00000 n
-0000360211 00000 n
-0000360363 00000 n
-0000360523 00000 n
-0000360674 00000 n
-0000361011 00000 n
-0000360021 00000 n
-0000354969 00000 n
-0000360825 00000 n
-0000360158 00000 n
-0000365770 00000 n
-0000365928 00000 n
-0000366087 00000 n
-0000366492 00000 n
-0000365588 00000 n
-0000361304 00000 n
-0000366246 00000 n
-0000365725 00000 n
-0000373885 00000 n
-0000381587 00000 n
-0000374099 00000 n
-0000373719 00000 n
-0000366720 00000 n
-0000374037 00000 n
-0000373856 00000 n
-0000381744 00000 n
-0000382020 00000 n
-0000381413 00000 n
-0000374353 00000 n
-0000381896 00000 n
-0000582336 00000 n
-0000860498 00000 n
-0000381550 00000 n
-0000387317 00000 n
-0000387601 00000 n
-0000387151 00000 n
-0000382287 00000 n
-0000387477 00000 n
-0000387288 00000 n
-0000391636 00000 n
-0000391920 00000 n
-0000391470 00000 n
-0000387829 00000 n
-0000391796 00000 n
-0000391607 00000 n
-0000404928 00000 n
-0000410663 00000 n
-0000410821 00000 n
-0000405339 00000 n
-0000404762 00000 n
-0000392148 00000 n
-0000405091 00000 n
-0000404899 00000 n
-0000410980 00000 n
-0000410499 00000 n
-0000419140 00000 n
-0000419304 00000 n
-0000411401 00000 n
-0000410309 00000 n
-0000405580 00000 n
-0000411215 00000 n
-0000579851 00000 n
-0000410446 00000 n
-0000411655 00000 n
-0000411973 00000 n
-0000412299 00000 n
-0000412503 00000 n
-0000412981 00000 n
-0000413325 00000 n
-0000413529 00000 n
-0000419468 00000 n
-0000419619 00000 n
-0000419956 00000 n
-0000418950 00000 n
-0000414171 00000 n
-0000419770 00000 n
-0000419087 00000 n
-0000423572 00000 n
-0000423727 00000 n
-0000424068 00000 n
-0000423398 00000 n
-0000420238 00000 n
-0000423882 00000 n
-0000423535 00000 n
-0000428050 00000 n
-0000427679 00000 n
-0000424270 00000 n
-0000427800 00000 n
-0000427862 00000 n
-0000427926 00000 n
-0000448102 00000 n
-0000447857 00000 n
-0000428239 00000 n
-0000447978 00000 n
-0000454613 00000 n
-0000454430 00000 n
-0000448369 00000 n
-0000454551 00000 n
-0000458362 00000 n
-0000458055 00000 n
-0000454867 00000 n
-0000458176 00000 n
-0000860651 00000 n
-0000462149 00000 n
-0000461966 00000 n
-0000458564 00000 n
-0000462087 00000 n
-0000467690 00000 n
-0000467507 00000 n
-0000462390 00000 n
-0000467628 00000 n
-0000472089 00000 n
-0000471906 00000 n
-0000467918 00000 n
-0000472027 00000 n
-0000477493 00000 n
-0000477778 00000 n
-0000477327 00000 n
-0000472317 00000 n
-0000477654 00000 n
-0000477464 00000 n
-0000483987 00000 n
-0000483742 00000 n
-0000478045 00000 n
-0000483863 00000 n
-0000494884 00000 n
-0000494639 00000 n
-0000484189 00000 n
-0000494760 00000 n
-0000497488 00000 n
-0000497305 00000 n
-0000495112 00000 n
-0000497426 00000 n
-0000502019 00000 n
-0000502171 00000 n
-0000502323 00000 n
-0000502475 00000 n
-0000502627 00000 n
-0000502779 00000 n
-0000502931 00000 n
-0000503082 00000 n
-0000503234 00000 n
-0000503385 00000 n
-0000503537 00000 n
-0000503686 00000 n
-0000503837 00000 n
-0000503988 00000 n
-0000504137 00000 n
-0000504286 00000 n
-0000504435 00000 n
-0000504585 00000 n
-0000504737 00000 n
-0000504888 00000 n
-0000505039 00000 n
-0000505191 00000 n
-0000505343 00000 n
-0000505493 00000 n
-0000505645 00000 n
-0000505795 00000 n
-0000505947 00000 n
-0000506095 00000 n
-0000506244 00000 n
-0000506395 00000 n
-0000506547 00000 n
-0000506697 00000 n
-0000506847 00000 n
-0000506998 00000 n
-0000507150 00000 n
-0000507301 00000 n
-0000507453 00000 n
-0000507605 00000 n
-0000507756 00000 n
-0000507907 00000 n
-0000508059 00000 n
-0000508211 00000 n
-0000508363 00000 n
-0000508514 00000 n
-0000508666 00000 n
-0000508818 00000 n
-0000508969 00000 n
-0000509121 00000 n
-0000509273 00000 n
-0000509424 00000 n
-0000509576 00000 n
-0000509728 00000 n
-0000509880 00000 n
-0000510031 00000 n
-0000510183 00000 n
-0000510335 00000 n
-0000510485 00000 n
-0000510634 00000 n
-0000510784 00000 n
-0000510934 00000 n
-0000511084 00000 n
-0000511234 00000 n
-0000511386 00000 n
-0000511537 00000 n
-0000511689 00000 n
-0000511841 00000 n
-0000511993 00000 n
-0000512145 00000 n
-0000512297 00000 n
-0000512448 00000 n
-0000512600 00000 n
-0000512751 00000 n
-0000512902 00000 n
-0000513054 00000 n
-0000513206 00000 n
-0000513358 00000 n
-0000513510 00000 n
-0000513662 00000 n
-0000513813 00000 n
-0000513965 00000 n
-0000514117 00000 n
-0000514268 00000 n
-0000514419 00000 n
-0000514570 00000 n
-0000514722 00000 n
-0000514874 00000 n
-0000515025 00000 n
-0000515177 00000 n
-0000515327 00000 n
-0000515477 00000 n
-0000515629 00000 n
-0000515780 00000 n
-0000515931 00000 n
-0000516083 00000 n
-0000516235 00000 n
-0000516387 00000 n
-0000516539 00000 n
-0000516691 00000 n
-0000516843 00000 n
-0000516995 00000 n
-0000517147 00000 n
-0000517299 00000 n
-0000517451 00000 n
-0000517603 00000 n
-0000517754 00000 n
-0000517906 00000 n
-0000518057 00000 n
-0000518209 00000 n
-0000518360 00000 n
-0000518511 00000 n
-0000518661 00000 n
-0000518811 00000 n
-0000518962 00000 n
-0000523866 00000 n
-0000524018 00000 n
-0000519239 00000 n
-0000500949 00000 n
-0000497625 00000 n
-0000519112 00000 n
-0000501090 00000 n
-0000524170 00000 n
-0000524321 00000 n
-0000524473 00000 n
-0000524625 00000 n
-0000524778 00000 n
-0000524929 00000 n
-0000525082 00000 n
-0000525234 00000 n
-0000525387 00000 n
-0000525539 00000 n
-0000525691 00000 n
-0000525843 00000 n
-0000525996 00000 n
-0000526149 00000 n
-0000526301 00000 n
-0000526453 00000 n
-0000526605 00000 n
-0000526758 00000 n
-0000526911 00000 n
-0000527063 00000 n
-0000527214 00000 n
-0000527367 00000 n
-0000527519 00000 n
-0000527671 00000 n
-0000527823 00000 n
-0000527975 00000 n
-0000528128 00000 n
-0000528281 00000 n
-0000528434 00000 n
-0000528585 00000 n
-0000528736 00000 n
-0000528889 00000 n
-0000529042 00000 n
-0000529193 00000 n
-0000529346 00000 n
-0000529499 00000 n
-0000529651 00000 n
-0000529804 00000 n
-0000529957 00000 n
-0000530109 00000 n
-0000530261 00000 n
-0000530414 00000 n
-0000530567 00000 n
-0000530720 00000 n
-0000530873 00000 n
-0000531026 00000 n
-0000531177 00000 n
-0000531328 00000 n
-0000531480 00000 n
-0000531632 00000 n
-0000531785 00000 n
-0000531937 00000 n
-0000532090 00000 n
-0000532241 00000 n
-0000532394 00000 n
-0000532547 00000 n
-0000532700 00000 n
-0000532852 00000 n
-0000533004 00000 n
-0000533157 00000 n
-0000533308 00000 n
-0000533460 00000 n
-0000533613 00000 n
-0000533766 00000 n
-0000533917 00000 n
-0000534069 00000 n
-0000534222 00000 n
-0000534374 00000 n
-0000534527 00000 n
-0000534680 00000 n
-0000534833 00000 n
-0000534985 00000 n
-0000535137 00000 n
-0000535289 00000 n
-0000535442 00000 n
-0000535595 00000 n
-0000535748 00000 n
-0000535901 00000 n
-0000536054 00000 n
-0000536207 00000 n
-0000536359 00000 n
-0000536511 00000 n
-0000536663 00000 n
-0000536816 00000 n
-0000536969 00000 n
-0000537121 00000 n
-0000537274 00000 n
-0000537427 00000 n
-0000537579 00000 n
-0000537732 00000 n
-0000537885 00000 n
-0000538037 00000 n
-0000538189 00000 n
-0000538342 00000 n
-0000538495 00000 n
-0000538648 00000 n
-0000538799 00000 n
-0000538949 00000 n
-0000539100 00000 n
-0000539251 00000 n
-0000543837 00000 n
-0000539466 00000 n
-0000522785 00000 n
-0000519429 00000 n
-0000539402 00000 n
-0000522926 00000 n
-0000543990 00000 n
-0000544141 00000 n
-0000544293 00000 n
-0000544446 00000 n
-0000544599 00000 n
-0000544751 00000 n
-0000544904 00000 n
-0000545057 00000 n
-0000545210 00000 n
-0000545362 00000 n
-0000545515 00000 n
-0000545668 00000 n
-0000545821 00000 n
-0000545974 00000 n
-0000546127 00000 n
-0000546279 00000 n
-0000546432 00000 n
-0000546584 00000 n
-0000546736 00000 n
-0000546889 00000 n
-0000547042 00000 n
-0000547192 00000 n
-0000547344 00000 n
-0000547496 00000 n
-0000547648 00000 n
-0000547801 00000 n
-0000547954 00000 n
-0000548107 00000 n
-0000548259 00000 n
-0000548411 00000 n
-0000548563 00000 n
-0000548715 00000 n
-0000548867 00000 n
-0000549019 00000 n
-0000549171 00000 n
-0000549322 00000 n
-0000549475 00000 n
-0000549628 00000 n
-0000549781 00000 n
-0000549933 00000 n
-0000550086 00000 n
-0000550239 00000 n
-0000550390 00000 n
-0000550543 00000 n
-0000550696 00000 n
-0000550849 00000 n
-0000551002 00000 n
-0000551155 00000 n
-0000551308 00000 n
-0000551460 00000 n
-0000551610 00000 n
-0000551761 00000 n
-0000551912 00000 n
-0000552065 00000 n
-0000552218 00000 n
-0000552371 00000 n
-0000552522 00000 n
-0000552672 00000 n
-0000552824 00000 n
-0000552977 00000 n
-0000553129 00000 n
-0000553281 00000 n
-0000553433 00000 n
-0000553585 00000 n
-0000553737 00000 n
-0000553890 00000 n
-0000554043 00000 n
-0000554195 00000 n
-0000554348 00000 n
-0000554501 00000 n
-0000554654 00000 n
-0000554807 00000 n
-0000554960 00000 n
-0000555113 00000 n
-0000555265 00000 n
-0000555418 00000 n
-0000555571 00000 n
-0000555724 00000 n
-0000555876 00000 n
-0000556028 00000 n
-0000556180 00000 n
-0000556332 00000 n
-0000556483 00000 n
-0000556636 00000 n
-0000556789 00000 n
-0000556942 00000 n
-0000557094 00000 n
-0000557310 00000 n
-0000542881 00000 n
-0000539643 00000 n
-0000557246 00000 n
-0000860806 00000 n
-0000543023 00000 n
-0000560485 00000 n
-0000560639 00000 n
-0000560793 00000 n
-0000560947 00000 n
-0000561101 00000 n
-0000561260 00000 n
-0000561419 00000 n
-0000561578 00000 n
-0000561737 00000 n
-0000561895 00000 n
-0000562054 00000 n
-0000562208 00000 n
-0000562367 00000 n
-0000562532 00000 n
-0000562695 00000 n
-0000562854 00000 n
-0000563013 00000 n
-0000563178 00000 n
-0000563343 00000 n
-0000563508 00000 n
-0000563673 00000 n
-0000563838 00000 n
-0000563992 00000 n
-0000564150 00000 n
-0000564308 00000 n
-0000564466 00000 n
-0000564625 00000 n
-0000564779 00000 n
-0000564933 00000 n
-0000565092 00000 n
-0000565251 00000 n
-0000565410 00000 n
-0000565564 00000 n
-0000565719 00000 n
-0000565878 00000 n
-0000566037 00000 n
-0000566193 00000 n
-0000569593 00000 n
-0000566414 00000 n
-0000559988 00000 n
-0000557487 00000 n
-0000566350 00000 n
-0000560130 00000 n
-0000569753 00000 n
-0000569913 00000 n
-0000570068 00000 n
-0000570223 00000 n
-0000570383 00000 n
-0000570543 00000 n
-0000570703 00000 n
-0000570863 00000 n
-0000571018 00000 n
-0000571178 00000 n
-0000571338 00000 n
-0000571498 00000 n
-0000571658 00000 n
-0000571818 00000 n
-0000571973 00000 n
-0000572133 00000 n
-0000572293 00000 n
-0000572453 00000 n
-0000572612 00000 n
-0000572771 00000 n
-0000572931 00000 n
-0000573091 00000 n
-0000573251 00000 n
-0000573411 00000 n
-0000573572 00000 n
-0000573733 00000 n
-0000573888 00000 n
-0000574048 00000 n
-0000574214 00000 n
-0000574380 00000 n
-0000574540 00000 n
-0000574700 00000 n
-0000574860 00000 n
-0000575015 00000 n
-0000575170 00000 n
-0000575330 00000 n
-0000575490 00000 n
-0000575650 00000 n
-0000575810 00000 n
-0000575965 00000 n
-0000576125 00000 n
-0000576284 00000 n
-0000576444 00000 n
-0000576604 00000 n
-0000576764 00000 n
-0000576923 00000 n
-0000577083 00000 n
-0000577243 00000 n
-0000577402 00000 n
-0000577562 00000 n
-0000577778 00000 n
-0000568970 00000 n
-0000566617 00000 n
-0000577714 00000 n
-0000569112 00000 n
-0000578197 00000 n
-0000579152 00000 n
-0000578253 00000 n
-0000578353 00000 n
-0000579394 00000 n
-0000580008 00000 n
-0000580212 00000 n
-0000581624 00000 n
-0000580287 00000 n
-0000580388 00000 n
-0000581866 00000 n
-0000582494 00000 n
-0000582699 00000 n
-0000582844 00000 n
-0000582941 00000 n
-0000584111 00000 n
-0000583007 00000 n
-0000583104 00000 n
-0000584354 00000 n
-0000584969 00000 n
-0000585173 00000 n
-0000585277 00000 n
-0000587132 00000 n
-0000585435 00000 n
-0000585539 00000 n
-0000587372 00000 n
-0000588032 00000 n
-0000588236 00000 n
-0000589691 00000 n
-0000588315 00000 n
-0000588417 00000 n
-0000589939 00000 n
-0000590573 00000 n
-0000590783 00000 n
-0000590828 00000 n
-0000593714 00000 n
-0000591076 00000 n
-0000591186 00000 n
-0000593962 00000 n
-0000594679 00000 n
-0000594889 00000 n
-0000599064 00000 n
-0000595243 00000 n
-0000595357 00000 n
-0000599307 00000 n
-0000600059 00000 n
-0000600263 00000 n
-0000600288 00000 n
-0000600314 00000 n
-0000600566 00000 n
-0000602648 00000 n
-0000600719 00000 n
-0000600825 00000 n
-0000602887 00000 n
-0000603547 00000 n
-0000603749 00000 n
-0000611796 00000 n
-0000604253 00000 n
-0000604376 00000 n
-0000612036 00000 n
-0000612951 00000 n
-0000613154 00000 n
-0000620493 00000 n
-0000613594 00000 n
-0000613702 00000 n
-0000620733 00000 n
-0000621646 00000 n
-0000621850 00000 n
-0000624162 00000 n
-0000622124 00000 n
-0000622230 00000 n
-0000624402 00000 n
-0000625108 00000 n
-0000625312 00000 n
-0000633853 00000 n
-0000625877 00000 n
-0000626014 00000 n
-0000634094 00000 n
-0000635047 00000 n
-0000635252 00000 n
-0000636108 00000 n
-0000635286 00000 n
-0000635381 00000 n
-0000636350 00000 n
-0000636953 00000 n
-0000637158 00000 n
-0000645079 00000 n
-0000637626 00000 n
-0000637743 00000 n
-0000645319 00000 n
-0000646230 00000 n
-0000646433 00000 n
-0000648665 00000 n
-0000646600 00000 n
-0000646706 00000 n
-0000648912 00000 n
-0000649588 00000 n
-0000649798 00000 n
-0000654336 00000 n
-0000650161 00000 n
-0000650279 00000 n
-0000654585 00000 n
-0000655363 00000 n
-0000655574 00000 n
-0000658873 00000 n
-0000655777 00000 n
-0000655884 00000 n
-0000659115 00000 n
-0000659811 00000 n
-0000660016 00000 n
-0000666735 00000 n
-0000660428 00000 n
-0000660545 00000 n
-0000666979 00000 n
-0000667799 00000 n
-0000668004 00000 n
-0000676714 00000 n
-0000668461 00000 n
-0000668577 00000 n
-0000676955 00000 n
-0000677934 00000 n
-0000678139 00000 n
-0000681540 00000 n
-0000678499 00000 n
-0000678606 00000 n
-0000681781 00000 n
-0000682549 00000 n
-0000682754 00000 n
-0000682989 00000 n
-0000693007 00000 n
-0000683626 00000 n
-0000683769 00000 n
-0000693249 00000 n
-0000694286 00000 n
-0000694492 00000 n
-0000694599 00000 n
-0000694878 00000 n
-0000694985 00000 n
-0000695047 00000 n
-0000695242 00000 n
-0000695611 00000 n
-0000703801 00000 n
-0000696118 00000 n
-0000696244 00000 n
-0000704041 00000 n
-0000705008 00000 n
-0000705212 00000 n
-0000706816 00000 n
-0000705369 00000 n
-0000705475 00000 n
-0000707056 00000 n
-0000707715 00000 n
-0000707919 00000 n
-0000711313 00000 n
-0000708212 00000 n
-0000708326 00000 n
-0000711554 00000 n
-0000712283 00000 n
-0000712488 00000 n
-0000713865 00000 n
-0000712567 00000 n
-0000712670 00000 n
-0000714104 00000 n
-0000714723 00000 n
-0000714925 00000 n
-0000717162 00000 n
-0000715104 00000 n
-0000715210 00000 n
-0000717403 00000 n
-0000718072 00000 n
-0000718277 00000 n
-0000722405 00000 n
-0000718609 00000 n
-0000718723 00000 n
-0000722647 00000 n
-0000723393 00000 n
-0000723599 00000 n
-0000724959 00000 n
-0000723722 00000 n
-0000723828 00000 n
-0000725200 00000 n
-0000725845 00000 n
-0000726050 00000 n
-0000728754 00000 n
-0000726273 00000 n
-0000726387 00000 n
-0000728996 00000 n
-0000729698 00000 n
-0000739150 00000 n
-0000729904 00000 n
-0000750574 00000 n
-0000739401 00000 n
-0000758262 00000 n
-0000751328 00000 n
-0000771039 00000 n
-0000758492 00000 n
-0000778510 00000 n
-0000771367 00000 n
-0000786643 00000 n
-0000778736 00000 n
-0000796570 00000 n
-0000786876 00000 n
-0000804482 00000 n
-0000796837 00000 n
-0000817192 00000 n
-0000804713 00000 n
-0000825210 00000 n
-0000817550 00000 n
-0000834451 00000 n
-0000825458 00000 n
-0000842403 00000 n
-0000834759 00000 n
-0000849943 00000 n
-0000842687 00000 n
-0000857457 00000 n
-0000850182 00000 n
-0000860906 00000 n
-0000861029 00000 n
-0000869293 00000 n
-0000869929 00000 n
-0000870569 00000 n
-0000871243 00000 n
+0000082297 00000 n
+0000878886 00000 n
+0000002232 00000 n
+0000002394 00000 n
+0000088455 00000 n
+0000878760 00000 n
+0000002440 00000 n
+0000002655 00000 n
+0000088516 00000 n
+0000878649 00000 n
+0000002706 00000 n
+0000003027 00000 n
+0000088577 00000 n
+0000878575 00000 n
+0000003083 00000 n
+0000003217 00000 n
+0000088638 00000 n
+0000878501 00000 n
+0000003273 00000 n
+0000003400 00000 n
+0000093926 00000 n
+0000878414 00000 n
+0000003451 00000 n
+0000003677 00000 n
+0000093987 00000 n
+0000878303 00000 n
+0000003728 00000 n
+0000004012 00000 n
+0000100279 00000 n
+0000878229 00000 n
+0000004068 00000 n
+0000004236 00000 n
+0000100340 00000 n
+0000878142 00000 n
+0000004292 00000 n
+0000004545 00000 n
+0000108082 00000 n
+0000878055 00000 n
+0000004601 00000 n
+0000004726 00000 n
+0000114352 00000 n
+0000877968 00000 n
+0000004782 00000 n
+0000004919 00000 n
+0000114413 00000 n
+0000877894 00000 n
+0000004975 00000 n
+0000005190 00000 n
+0000131121 00000 n
+0000877766 00000 n
+0000005236 00000 n
+0000005531 00000 n
+0000131182 00000 n
+0000877691 00000 n
+0000005582 00000 n
+0000005731 00000 n
+0000131243 00000 n
+0000877600 00000 n
+0000005783 00000 n
+0000006053 00000 n
+0000160689 00000 n
+0000877508 00000 n
+0000006105 00000 n
+0000006296 00000 n
+0000165972 00000 n
+0000877430 00000 n
+0000006348 00000 n
+0000006535 00000 n
+0000166034 00000 n
+0000877337 00000 n
+0000006582 00000 n
+0000006725 00000 n
+0000172472 00000 n
+0000877204 00000 n
+0000006772 00000 n
+0000006925 00000 n
+0000172534 00000 n
+0000877125 00000 n
+0000006977 00000 n
+0000007102 00000 n
+0000177903 00000 n
+0000877032 00000 n
+0000007154 00000 n
+0000007259 00000 n
+0000182607 00000 n
+0000876953 00000 n
+0000007311 00000 n
+0000007482 00000 n
+0000190603 00000 n
+0000876859 00000 n
+0000007529 00000 n
+0000007751 00000 n
+0000203439 00000 n
+0000876726 00000 n
+0000007799 00000 n
+0000008013 00000 n
+0000214362 00000 n
+0000876647 00000 n
+0000008066 00000 n
+0000008203 00000 n
+0000223619 00000 n
+0000876554 00000 n
+0000008256 00000 n
+0000008483 00000 n
+0000246694 00000 n
+0000876461 00000 n
+0000008536 00000 n
+0000008908 00000 n
+0000253489 00000 n
+0000876368 00000 n
+0000008961 00000 n
+0000009183 00000 n
+0000253551 00000 n
+0000876275 00000 n
+0000009236 00000 n
+0000009485 00000 n
+0000261834 00000 n
+0000876196 00000 n
+0000009538 00000 n
+0000009765 00000 n
+0000268313 00000 n
+0000876102 00000 n
+0000009813 00000 n
+0000010103 00000 n
+0000286490 00000 n
+0000875969 00000 n
+0000010151 00000 n
+0000010251 00000 n
+0000286552 00000 n
+0000875890 00000 n
+0000010304 00000 n
+0000010534 00000 n
+0000286614 00000 n
+0000875797 00000 n
+0000010587 00000 n
+0000010960 00000 n
+0000304590 00000 n
+0000875704 00000 n
+0000011013 00000 n
+0000011362 00000 n
+0000310223 00000 n
+0000875625 00000 n
+0000011415 00000 n
+0000011690 00000 n
+0000310285 00000 n
+0000875492 00000 n
+0000011738 00000 n
+0000012006 00000 n
+0000310347 00000 n
+0000875413 00000 n
+0000012059 00000 n
+0000012220 00000 n
+0000315319 00000 n
+0000875320 00000 n
+0000012273 00000 n
+0000012442 00000 n
+0000315381 00000 n
+0000875227 00000 n
+0000012495 00000 n
+0000012638 00000 n
+0000325185 00000 n
+0000875134 00000 n
+0000012691 00000 n
+0000012917 00000 n
+0000334448 00000 n
+0000875055 00000 n
+0000012970 00000 n
+0000013257 00000 n
+0000334510 00000 n
+0000874921 00000 n
+0000013305 00000 n
+0000013450 00000 n
+0000334572 00000 n
+0000874842 00000 n
+0000013503 00000 n
+0000013651 00000 n
+0000343595 00000 n
+0000874749 00000 n
+0000013704 00000 n
+0000013854 00000 n
+0000343657 00000 n
+0000874656 00000 n
+0000013907 00000 n
+0000014172 00000 n
+0000343719 00000 n
+0000874563 00000 n
+0000014225 00000 n
+0000014501 00000 n
+0000349637 00000 n
+0000874470 00000 n
+0000014554 00000 n
+0000014687 00000 n
+0000349699 00000 n
+0000874377 00000 n
+0000014740 00000 n
+0000014842 00000 n
+0000356227 00000 n
+0000874284 00000 n
+0000014895 00000 n
+0000015066 00000 n
+0000356289 00000 n
+0000874191 00000 n
+0000015119 00000 n
+0000015256 00000 n
+0000361783 00000 n
+0000874098 00000 n
+0000015309 00000 n
+0000015462 00000 n
+0000361844 00000 n
+0000874005 00000 n
+0000015516 00000 n
+0000015739 00000 n
+0000361906 00000 n
+0000873926 00000 n
+0000015793 00000 n
+0000015986 00000 n
+0000368129 00000 n
+0000873793 00000 n
+0000016034 00000 n
+0000016250 00000 n
+0000368191 00000 n
+0000873675 00000 n
+0000016303 00000 n
+0000016583 00000 n
+0000373551 00000 n
+0000873596 00000 n
+0000016641 00000 n
+0000016779 00000 n
+0000373613 00000 n
+0000873517 00000 n
+0000016837 00000 n
+0000017008 00000 n
+0000373675 00000 n
+0000873424 00000 n
+0000017061 00000 n
+0000017326 00000 n
+0000387965 00000 n
+0000873331 00000 n
+0000017379 00000 n
+0000017639 00000 n
+0000395041 00000 n
+0000873252 00000 n
+0000017692 00000 n
+0000017982 00000 n
+0000399374 00000 n
+0000873158 00000 n
+0000018030 00000 n
+0000018196 00000 n
+0000412670 00000 n
+0000873025 00000 n
+0000018244 00000 n
+0000018376 00000 n
+0000412732 00000 n
+0000872946 00000 n
+0000018429 00000 n
+0000018546 00000 n
+0000412794 00000 n
+0000872853 00000 n
+0000018599 00000 n
+0000018725 00000 n
+0000418481 00000 n
+0000872760 00000 n
+0000018778 00000 n
+0000018955 00000 n
+0000418543 00000 n
+0000872681 00000 n
+0000019008 00000 n
+0000019120 00000 n
+0000426747 00000 n
+0000872547 00000 n
+0000019168 00000 n
+0000019237 00000 n
+0000426809 00000 n
+0000872468 00000 n
+0000019290 00000 n
+0000019605 00000 n
+0000431334 00000 n
+0000872375 00000 n
+0000019658 00000 n
+0000019823 00000 n
+0000431396 00000 n
+0000872282 00000 n
+0000019876 00000 n
+0000020029 00000 n
+0000435522 00000 n
+0000872189 00000 n
+0000020082 00000 n
+0000020220 00000 n
+0000455655 00000 n
0000872096 00000 n
-0000872989 00000 n
-0000873581 00000 n
-0000873709 00000 n
-0000873749 00000 n
-0000873881 00000 n
+0000020273 00000 n
+0000020584 00000 n
+0000466448 00000 n
+0000872003 00000 n
+0000020637 00000 n
+0000020760 00000 n
+0000466510 00000 n
+0000871910 00000 n
+0000020813 00000 n
+0000020963 00000 n
+0000484773 00000 n
+0000871817 00000 n
+0000021016 00000 n
+0000021265 00000 n
+0000502846 00000 n
+0000871724 00000 n
+0000021318 00000 n
+0000021593 00000 n
+0000506338 00000 n
+0000871645 00000 n
+0000021647 00000 n
+0000021797 00000 n
+0000528319 00000 n
+0000871565 00000 n
+0000021845 00000 n
+0000021899 00000 n
+0000032200 00000 n
+0000032366 00000 n
+0000032728 00000 n
+0000021951 00000 n
+0000032604 00000 n
+0000032666 00000 n
+0000739981 00000 n
+0000736129 00000 n
+0000733676 00000 n
+0000728535 00000 n
+0000725189 00000 n
+0000722746 00000 n
+0000718179 00000 n
+0000715472 00000 n
+0000868294 00000 n
+0000869022 00000 n
+0000869458 00000 n
+0000868877 00000 n
+0000868586 00000 n
+0000869601 00000 n
+0000704748 00000 n
+0000869313 00000 n
+0000692793 00000 n
+0000688178 00000 n
+0000678043 00000 n
+0000669998 00000 n
+0000665544 00000 n
+0000659770 00000 n
+0000656419 00000 n
+0000647140 00000 n
+0000645234 00000 n
+0000635296 00000 n
+0000631834 00000 n
+0000870175 00000 n
+0000032337 00000 n
+0000037630 00000 n
+0000037476 00000 n
+0000037968 00000 n
+0000037302 00000 n
+0000033190 00000 n
+0000037786 00000 n
+0000623140 00000 n
+0000613493 00000 n
+0000869744 00000 n
+0000037439 00000 n
+0000043971 00000 n
+0000043472 00000 n
+0000038274 00000 n
+0000043593 00000 n
+0000868440 00000 n
+0000043716 00000 n
+0000043780 00000 n
+0000043844 00000 n
+0000043908 00000 n
+0000050336 00000 n
+0000050493 00000 n
+0000050649 00000 n
+0000050800 00000 n
+0000051135 00000 n
+0000050146 00000 n
+0000044264 00000 n
+0000050951 00000 n
+0000868732 00000 n
+0000050283 00000 n
+0000056449 00000 n
+0000056609 00000 n
+0000056769 00000 n
+0000056923 00000 n
+0000057075 00000 n
+0000057228 00000 n
+0000057387 00000 n
+0000057547 00000 n
+0000057705 00000 n
+0000057926 00000 n
+0000056219 00000 n
+0000051428 00000 n
+0000057864 00000 n
+0000610003 00000 n
+0000056356 00000 n
+0000063724 00000 n
+0000063882 00000 n
+0000064040 00000 n
+0000064199 00000 n
+0000064354 00000 n
+0000064512 00000 n
+0000064671 00000 n
+0000065072 00000 n
+0000063510 00000 n
+0000058193 00000 n
+0000064828 00000 n
+0000063647 00000 n
+0000071450 00000 n
+0000071206 00000 n
+0000065287 00000 n
+0000071327 00000 n
+0000077043 00000 n
+0000076799 00000 n
+0000071691 00000 n
+0000076920 00000 n
+0000082358 00000 n
+0000082114 00000 n
+0000077258 00000 n
+0000082235 00000 n
+0000087922 00000 n
+0000088076 00000 n
+0000088239 00000 n
+0000088699 00000 n
+0000087740 00000 n
+0000082599 00000 n
+0000088393 00000 n
+0000087877 00000 n
+0000093556 00000 n
+0000093710 00000 n
+0000099735 00000 n
+0000099899 00000 n
+0000094048 00000 n
+0000093382 00000 n
+0000088901 00000 n
+0000093864 00000 n
+0000604617 00000 n
+0000870328 00000 n
+0000093519 00000 n
+0000100053 00000 n
+0000100400 00000 n
+0000099553 00000 n
+0000094289 00000 n
+0000100217 00000 n
+0000869167 00000 n
+0000099690 00000 n
+0000107070 00000 n
+0000107230 00000 n
+0000107390 00000 n
+0000107550 00000 n
+0000107708 00000 n
+0000107865 00000 n
+0000108143 00000 n
+0000106864 00000 n
+0000100680 00000 n
+0000108020 00000 n
+0000107001 00000 n
+0000113972 00000 n
+0000114130 00000 n
+0000114472 00000 n
+0000113798 00000 n
+0000108397 00000 n
+0000114290 00000 n
+0000113935 00000 n
+0000119129 00000 n
+0000118946 00000 n
+0000114713 00000 n
+0000119067 00000 n
+0000125571 00000 n
+0000125788 00000 n
+0000125405 00000 n
+0000119331 00000 n
+0000125726 00000 n
+0000125542 00000 n
+0000137473 00000 n
+0000131305 00000 n
+0000130938 00000 n
+0000126016 00000 n
+0000131059 00000 n
+0000136843 00000 n
+0000137005 00000 n
+0000137165 00000 n
+0000137320 00000 n
+0000142977 00000 n
+0000137692 00000 n
+0000136645 00000 n
+0000131572 00000 n
+0000137630 00000 n
+0000136782 00000 n
+0000143137 00000 n
+0000143352 00000 n
+0000142803 00000 n
+0000137959 00000 n
+0000143290 00000 n
+0000142940 00000 n
+0000148856 00000 n
+0000149077 00000 n
+0000148690 00000 n
+0000143580 00000 n
+0000149015 00000 n
+0000148827 00000 n
+0000154757 00000 n
+0000154973 00000 n
+0000154591 00000 n
+0000149266 00000 n
+0000154911 00000 n
+0000870481 00000 n
+0000154728 00000 n
+0000160475 00000 n
+0000160751 00000 n
+0000160309 00000 n
+0000155149 00000 n
+0000160627 00000 n
+0000160446 00000 n
+0000165756 00000 n
+0000166096 00000 n
+0000165590 00000 n
+0000161031 00000 n
+0000165910 00000 n
+0000165727 00000 n
+0000172096 00000 n
+0000172256 00000 n
+0000172596 00000 n
+0000171922 00000 n
+0000166311 00000 n
+0000172410 00000 n
+0000172059 00000 n
+0000177687 00000 n
+0000177965 00000 n
+0000177521 00000 n
+0000172850 00000 n
+0000177841 00000 n
+0000177658 00000 n
+0000182064 00000 n
+0000182228 00000 n
+0000182386 00000 n
+0000182669 00000 n
+0000181882 00000 n
+0000178245 00000 n
+0000182545 00000 n
+0000182019 00000 n
+0000190069 00000 n
+0000190384 00000 n
+0000190224 00000 n
+0000190665 00000 n
+0000189887 00000 n
+0000182871 00000 n
+0000190541 00000 n
+0000190024 00000 n
+0000202584 00000 n
+0000202747 00000 n
+0000202901 00000 n
+0000203061 00000 n
+0000203220 00000 n
+0000203501 00000 n
+0000202386 00000 n
+0000190932 00000 n
+0000203377 00000 n
+0000600511 00000 n
+0000202523 00000 n
+0000214147 00000 n
+0000214424 00000 n
+0000213981 00000 n
+0000203794 00000 n
+0000214300 00000 n
+0000214118 00000 n
+0000223681 00000 n
+0000223436 00000 n
+0000214678 00000 n
+0000223557 00000 n
+0000252795 00000 n
+0000246754 00000 n
+0000246511 00000 n
+0000223948 00000 n
+0000246632 00000 n
+0000870634 00000 n
+0000252955 00000 n
+0000253115 00000 n
+0000253275 00000 n
+0000253613 00000 n
+0000252605 00000 n
+0000247034 00000 n
+0000253427 00000 n
+0000252742 00000 n
+0000261394 00000 n
+0000261614 00000 n
+0000261896 00000 n
+0000261220 00000 n
+0000253867 00000 n
+0000261772 00000 n
+0000597976 00000 n
+0000261357 00000 n
+0000267456 00000 n
+0000267616 00000 n
+0000267777 00000 n
+0000267931 00000 n
+0000268091 00000 n
+0000285795 00000 n
+0000268375 00000 n
+0000267258 00000 n
+0000262215 00000 n
+0000268251 00000 n
+0000870032 00000 n
+0000267395 00000 n
+0000285953 00000 n
+0000286108 00000 n
+0000286268 00000 n
+0000286676 00000 n
+0000285605 00000 n
+0000268681 00000 n
+0000286428 00000 n
+0000285742 00000 n
+0000292866 00000 n
+0000293021 00000 n
+0000293238 00000 n
+0000292692 00000 n
+0000286930 00000 n
+0000293176 00000 n
+0000292829 00000 n
+0000298392 00000 n
+0000298552 00000 n
+0000298710 00000 n
+0000298932 00000 n
+0000298210 00000 n
+0000293492 00000 n
+0000298870 00000 n
+0000298347 00000 n
+0000304332 00000 n
+0000304652 00000 n
+0000304166 00000 n
+0000299134 00000 n
+0000304528 00000 n
+0000304303 00000 n
+0000309843 00000 n
+0000309997 00000 n
+0000314324 00000 n
+0000314477 00000 n
+0000310409 00000 n
+0000309669 00000 n
+0000304958 00000 n
+0000310161 00000 n
+0000309806 00000 n
+0000314631 00000 n
+0000314791 00000 n
+0000314951 00000 n
+0000315105 00000 n
+0000315443 00000 n
+0000314118 00000 n
+0000310624 00000 n
+0000315257 00000 n
+0000314255 00000 n
+0000324739 00000 n
+0000320501 00000 n
+0000320661 00000 n
+0000321138 00000 n
+0000320327 00000 n
+0000315606 00000 n
+0000320821 00000 n
+0000320883 00000 n
+0000594913 00000 n
+0000320947 00000 n
+0000321011 00000 n
+0000321075 00000 n
+0000870787 00000 n
+0000320464 00000 n
+0000325247 00000 n
+0000324556 00000 n
+0000321379 00000 n
+0000324677 00000 n
+0000324801 00000 n
+0000324865 00000 n
+0000324929 00000 n
+0000324993 00000 n
+0000325057 00000 n
+0000325121 00000 n
+0000329218 00000 n
+0000329378 00000 n
+0000329599 00000 n
+0000329044 00000 n
+0000325475 00000 n
+0000329537 00000 n
+0000329181 00000 n
+0000333579 00000 n
+0000333738 00000 n
+0000333898 00000 n
+0000334058 00000 n
+0000334222 00000 n
+0000334634 00000 n
+0000333381 00000 n
+0000329775 00000 n
+0000334386 00000 n
+0000333518 00000 n
+0000343781 00000 n
+0000343412 00000 n
+0000334849 00000 n
+0000343533 00000 n
+0000349424 00000 n
+0000349761 00000 n
+0000349258 00000 n
+0000344061 00000 n
+0000349575 00000 n
+0000869889 00000 n
+0000349395 00000 n
+0000355392 00000 n
+0000355545 00000 n
+0000355699 00000 n
+0000355857 00000 n
+0000356011 00000 n
+0000356351 00000 n
+0000355194 00000 n
+0000350080 00000 n
+0000356165 00000 n
+0000868148 00000 n
+0000355331 00000 n
+0000361218 00000 n
+0000361377 00000 n
+0000361531 00000 n
+0000361968 00000 n
+0000361036 00000 n
+0000356631 00000 n
+0000361721 00000 n
+0000361173 00000 n
+0000367453 00000 n
+0000367605 00000 n
+0000367765 00000 n
+0000367916 00000 n
+0000368253 00000 n
+0000367263 00000 n
+0000362209 00000 n
+0000368067 00000 n
+0000367400 00000 n
+0000373013 00000 n
+0000373171 00000 n
+0000373330 00000 n
+0000373735 00000 n
+0000372831 00000 n
+0000368546 00000 n
+0000373489 00000 n
+0000372968 00000 n
+0000381137 00000 n
+0000387594 00000 n
+0000381351 00000 n
+0000380971 00000 n
+0000373963 00000 n
+0000381289 00000 n
+0000870940 00000 n
+0000381108 00000 n
+0000387751 00000 n
+0000388027 00000 n
+0000387420 00000 n
+0000381605 00000 n
+0000387903 00000 n
+0000387557 00000 n
+0000394819 00000 n
+0000395103 00000 n
+0000394653 00000 n
+0000388294 00000 n
+0000394979 00000 n
+0000592437 00000 n
+0000394790 00000 n
+0000399152 00000 n
+0000399436 00000 n
+0000398986 00000 n
+0000395344 00000 n
+0000399312 00000 n
+0000399123 00000 n
+0000412445 00000 n
+0000417866 00000 n
+0000418024 00000 n
+0000412856 00000 n
+0000412279 00000 n
+0000399664 00000 n
+0000412608 00000 n
+0000412416 00000 n
+0000418183 00000 n
+0000425889 00000 n
+0000426053 00000 n
+0000426217 00000 n
+0000418605 00000 n
+0000417684 00000 n
+0000413097 00000 n
+0000418419 00000 n
+0000589952 00000 n
+0000417821 00000 n
+0000418859 00000 n
+0000419177 00000 n
+0000419503 00000 n
+0000419707 00000 n
+0000420185 00000 n
+0000420529 00000 n
+0000420733 00000 n
+0000426381 00000 n
+0000426533 00000 n
+0000426871 00000 n
+0000425691 00000 n
+0000421375 00000 n
+0000426685 00000 n
+0000425828 00000 n
+0000430962 00000 n
+0000431117 00000 n
+0000431458 00000 n
+0000430788 00000 n
+0000427153 00000 n
+0000431272 00000 n
+0000430925 00000 n
+0000435584 00000 n
+0000435211 00000 n
+0000431660 00000 n
+0000435332 00000 n
+0000435394 00000 n
+0000435458 00000 n
+0000455717 00000 n
+0000455472 00000 n
+0000435799 00000 n
+0000455593 00000 n
+0000461724 00000 n
+0000461541 00000 n
+0000455984 00000 n
+0000461662 00000 n
+0000871093 00000 n
+0000466572 00000 n
+0000466265 00000 n
+0000461991 00000 n
+0000466386 00000 n
+0000470245 00000 n
+0000470062 00000 n
+0000466787 00000 n
+0000470183 00000 n
+0000473634 00000 n
+0000473451 00000 n
+0000470486 00000 n
+0000473572 00000 n
+0000477978 00000 n
+0000477795 00000 n
+0000473862 00000 n
+0000477916 00000 n
+0000484550 00000 n
+0000484835 00000 n
+0000484384 00000 n
+0000478206 00000 n
+0000484711 00000 n
+0000484521 00000 n
+0000490627 00000 n
+0000490444 00000 n
+0000485141 00000 n
+0000490565 00000 n
+0000502908 00000 n
+0000502663 00000 n
+0000490842 00000 n
+0000502784 00000 n
+0000506400 00000 n
+0000506155 00000 n
+0000503149 00000 n
+0000506276 00000 n
+0000510998 00000 n
+0000511147 00000 n
+0000511299 00000 n
+0000511451 00000 n
+0000511603 00000 n
+0000511755 00000 n
+0000511907 00000 n
+0000512059 00000 n
+0000512210 00000 n
+0000512361 00000 n
+0000512513 00000 n
+0000512665 00000 n
+0000512816 00000 n
+0000512965 00000 n
+0000513114 00000 n
+0000513263 00000 n
+0000513412 00000 n
+0000513562 00000 n
+0000513712 00000 n
+0000513864 00000 n
+0000514015 00000 n
+0000514166 00000 n
+0000514318 00000 n
+0000514470 00000 n
+0000514621 00000 n
+0000514773 00000 n
+0000514925 00000 n
+0000515076 00000 n
+0000515226 00000 n
+0000515377 00000 n
+0000515527 00000 n
+0000515678 00000 n
+0000515829 00000 n
+0000515980 00000 n
+0000516131 00000 n
+0000516283 00000 n
+0000516434 00000 n
+0000516586 00000 n
+0000516738 00000 n
+0000516888 00000 n
+0000517039 00000 n
+0000517191 00000 n
+0000517343 00000 n
+0000517495 00000 n
+0000517646 00000 n
+0000517798 00000 n
+0000517950 00000 n
+0000518101 00000 n
+0000518253 00000 n
+0000518405 00000 n
+0000518556 00000 n
+0000518708 00000 n
+0000518860 00000 n
+0000519012 00000 n
+0000519161 00000 n
+0000519311 00000 n
+0000519461 00000 n
+0000519611 00000 n
+0000519760 00000 n
+0000519910 00000 n
+0000520062 00000 n
+0000520214 00000 n
+0000520365 00000 n
+0000520516 00000 n
+0000520667 00000 n
+0000520819 00000 n
+0000520969 00000 n
+0000521121 00000 n
+0000521273 00000 n
+0000521425 00000 n
+0000521576 00000 n
+0000521728 00000 n
+0000521879 00000 n
+0000522030 00000 n
+0000522182 00000 n
+0000522334 00000 n
+0000522486 00000 n
+0000522638 00000 n
+0000522790 00000 n
+0000522941 00000 n
+0000523093 00000 n
+0000523245 00000 n
+0000523397 00000 n
+0000523547 00000 n
+0000523699 00000 n
+0000523851 00000 n
+0000524003 00000 n
+0000524155 00000 n
+0000524307 00000 n
+0000524458 00000 n
+0000524610 00000 n
+0000524762 00000 n
+0000524914 00000 n
+0000525066 00000 n
+0000525218 00000 n
+0000525370 00000 n
+0000525522 00000 n
+0000525674 00000 n
+0000525826 00000 n
+0000525978 00000 n
+0000526130 00000 n
+0000526282 00000 n
+0000526433 00000 n
+0000526586 00000 n
+0000526738 00000 n
+0000526891 00000 n
+0000527043 00000 n
+0000527196 00000 n
+0000527348 00000 n
+0000527501 00000 n
+0000527653 00000 n
+0000527804 00000 n
+0000527954 00000 n
+0000528104 00000 n
+0000533058 00000 n
+0000533211 00000 n
+0000528382 00000 n
+0000509911 00000 n
+0000506550 00000 n
+0000528255 00000 n
+0000510052 00000 n
+0000533363 00000 n
+0000533515 00000 n
+0000533667 00000 n
+0000533819 00000 n
+0000533972 00000 n
+0000534125 00000 n
+0000534277 00000 n
+0000534430 00000 n
+0000534582 00000 n
+0000534735 00000 n
+0000534888 00000 n
+0000535041 00000 n
+0000535194 00000 n
+0000535347 00000 n
+0000535500 00000 n
+0000535653 00000 n
+0000535805 00000 n
+0000535958 00000 n
+0000536110 00000 n
+0000536263 00000 n
+0000536415 00000 n
+0000536567 00000 n
+0000536720 00000 n
+0000536872 00000 n
+0000537025 00000 n
+0000537177 00000 n
+0000537328 00000 n
+0000537481 00000 n
+0000537633 00000 n
+0000537785 00000 n
+0000537938 00000 n
+0000538091 00000 n
+0000538244 00000 n
+0000538397 00000 n
+0000538548 00000 n
+0000538700 00000 n
+0000538853 00000 n
+0000539005 00000 n
+0000539158 00000 n
+0000539311 00000 n
+0000539463 00000 n
+0000539615 00000 n
+0000539768 00000 n
+0000539921 00000 n
+0000540074 00000 n
+0000540227 00000 n
+0000540380 00000 n
+0000540531 00000 n
+0000540682 00000 n
+0000540834 00000 n
+0000540986 00000 n
+0000541139 00000 n
+0000541291 00000 n
+0000541444 00000 n
+0000541595 00000 n
+0000541748 00000 n
+0000541901 00000 n
+0000542054 00000 n
+0000542206 00000 n
+0000542358 00000 n
+0000542511 00000 n
+0000542662 00000 n
+0000542814 00000 n
+0000542967 00000 n
+0000543120 00000 n
+0000543271 00000 n
+0000543423 00000 n
+0000543576 00000 n
+0000543728 00000 n
+0000543881 00000 n
+0000544034 00000 n
+0000544187 00000 n
+0000544339 00000 n
+0000544491 00000 n
+0000544643 00000 n
+0000544796 00000 n
+0000544949 00000 n
+0000545102 00000 n
+0000545255 00000 n
+0000545408 00000 n
+0000545561 00000 n
+0000545713 00000 n
+0000545865 00000 n
+0000546017 00000 n
+0000546170 00000 n
+0000546323 00000 n
+0000546475 00000 n
+0000546628 00000 n
+0000546781 00000 n
+0000546933 00000 n
+0000547086 00000 n
+0000547239 00000 n
+0000547391 00000 n
+0000547543 00000 n
+0000547696 00000 n
+0000547849 00000 n
+0000548002 00000 n
+0000548153 00000 n
+0000548303 00000 n
+0000548454 00000 n
+0000548605 00000 n
+0000553194 00000 n
+0000548820 00000 n
+0000531967 00000 n
+0000528572 00000 n
+0000548756 00000 n
+0000871247 00000 n
+0000532109 00000 n
+0000553347 00000 n
+0000553498 00000 n
+0000553650 00000 n
+0000553803 00000 n
+0000553956 00000 n
+0000554108 00000 n
+0000554261 00000 n
+0000554414 00000 n
+0000554567 00000 n
+0000554719 00000 n
+0000554872 00000 n
+0000555025 00000 n
+0000555178 00000 n
+0000555331 00000 n
+0000555484 00000 n
+0000555636 00000 n
+0000555789 00000 n
+0000555941 00000 n
+0000556093 00000 n
+0000556246 00000 n
+0000556399 00000 n
+0000556549 00000 n
+0000556701 00000 n
+0000556853 00000 n
+0000557005 00000 n
+0000557158 00000 n
+0000557311 00000 n
+0000557464 00000 n
+0000557616 00000 n
+0000557768 00000 n
+0000557920 00000 n
+0000558072 00000 n
+0000558224 00000 n
+0000558376 00000 n
+0000558528 00000 n
+0000558679 00000 n
+0000558832 00000 n
+0000558985 00000 n
+0000559138 00000 n
+0000559290 00000 n
+0000559443 00000 n
+0000559596 00000 n
+0000559747 00000 n
+0000559900 00000 n
+0000560053 00000 n
+0000560206 00000 n
+0000560359 00000 n
+0000560512 00000 n
+0000560665 00000 n
+0000560817 00000 n
+0000560967 00000 n
+0000561118 00000 n
+0000561269 00000 n
+0000561422 00000 n
+0000561575 00000 n
+0000561728 00000 n
+0000561879 00000 n
+0000562029 00000 n
+0000562181 00000 n
+0000562334 00000 n
+0000562486 00000 n
+0000562638 00000 n
+0000562790 00000 n
+0000562942 00000 n
+0000563094 00000 n
+0000563247 00000 n
+0000563400 00000 n
+0000563552 00000 n
+0000563705 00000 n
+0000563858 00000 n
+0000564011 00000 n
+0000564164 00000 n
+0000564317 00000 n
+0000564470 00000 n
+0000564622 00000 n
+0000564775 00000 n
+0000564928 00000 n
+0000565081 00000 n
+0000565233 00000 n
+0000565385 00000 n
+0000565537 00000 n
+0000565689 00000 n
+0000565840 00000 n
+0000565993 00000 n
+0000566146 00000 n
+0000566299 00000 n
+0000566451 00000 n
+0000566667 00000 n
+0000552238 00000 n
+0000548997 00000 n
+0000566603 00000 n
+0000552380 00000 n
+0000569838 00000 n
+0000569992 00000 n
+0000570146 00000 n
+0000570300 00000 n
+0000570454 00000 n
+0000570613 00000 n
+0000570772 00000 n
+0000570931 00000 n
+0000571090 00000 n
+0000571248 00000 n
+0000571407 00000 n
+0000571565 00000 n
+0000571719 00000 n
+0000571878 00000 n
+0000572043 00000 n
+0000572206 00000 n
+0000572365 00000 n
+0000572524 00000 n
+0000572689 00000 n
+0000572854 00000 n
+0000573019 00000 n
+0000573184 00000 n
+0000573349 00000 n
+0000573503 00000 n
+0000573661 00000 n
+0000573818 00000 n
+0000573976 00000 n
+0000574135 00000 n
+0000574289 00000 n
+0000574443 00000 n
+0000574602 00000 n
+0000574761 00000 n
+0000574920 00000 n
+0000575074 00000 n
+0000575227 00000 n
+0000575386 00000 n
+0000575544 00000 n
+0000578959 00000 n
+0000575766 00000 n
+0000569341 00000 n
+0000566844 00000 n
+0000575702 00000 n
+0000569483 00000 n
+0000579118 00000 n
+0000579278 00000 n
+0000579437 00000 n
+0000579592 00000 n
+0000579747 00000 n
+0000579907 00000 n
+0000580067 00000 n
+0000580227 00000 n
+0000580387 00000 n
+0000580542 00000 n
+0000580702 00000 n
+0000580862 00000 n
+0000581022 00000 n
+0000581181 00000 n
+0000581341 00000 n
+0000581496 00000 n
+0000581656 00000 n
+0000581816 00000 n
+0000581976 00000 n
+0000582135 00000 n
+0000582294 00000 n
+0000582454 00000 n
+0000582614 00000 n
+0000582774 00000 n
+0000582934 00000 n
+0000583095 00000 n
+0000583256 00000 n
+0000583411 00000 n
+0000583571 00000 n
+0000583737 00000 n
+0000583903 00000 n
+0000584063 00000 n
+0000584223 00000 n
+0000584382 00000 n
+0000584536 00000 n
+0000584691 00000 n
+0000584851 00000 n
+0000585011 00000 n
+0000585171 00000 n
+0000585331 00000 n
+0000585486 00000 n
+0000585646 00000 n
+0000585805 00000 n
+0000585965 00000 n
+0000586125 00000 n
+0000586285 00000 n
+0000586444 00000 n
+0000586604 00000 n
+0000586764 00000 n
+0000586922 00000 n
+0000587661 00000 n
+0000587145 00000 n
+0000578336 00000 n
+0000575969 00000 n
+0000587081 00000 n
+0000578478 00000 n
+0000587879 00000 n
+0000587488 00000 n
+0000587283 00000 n
+0000587815 00000 n
+0000587630 00000 n
+0000588298 00000 n
+0000589253 00000 n
+0000588354 00000 n
+0000588454 00000 n
+0000589495 00000 n
+0000590109 00000 n
+0000590313 00000 n
+0000591725 00000 n
+0000590388 00000 n
+0000590489 00000 n
+0000591967 00000 n
+0000592595 00000 n
+0000592800 00000 n
+0000592945 00000 n
+0000593042 00000 n
+0000594212 00000 n
+0000593108 00000 n
+0000593205 00000 n
+0000594455 00000 n
+0000595070 00000 n
+0000595274 00000 n
+0000595378 00000 n
+0000597233 00000 n
+0000595536 00000 n
+0000595640 00000 n
+0000597473 00000 n
+0000598133 00000 n
+0000598337 00000 n
+0000599792 00000 n
+0000598416 00000 n
+0000598518 00000 n
+0000600040 00000 n
+0000600674 00000 n
+0000600884 00000 n
+0000600929 00000 n
+0000603815 00000 n
+0000601177 00000 n
+0000601287 00000 n
+0000604063 00000 n
+0000604780 00000 n
+0000604990 00000 n
+0000609165 00000 n
+0000605344 00000 n
+0000605458 00000 n
+0000609408 00000 n
+0000610160 00000 n
+0000610364 00000 n
+0000610389 00000 n
+0000610415 00000 n
+0000610667 00000 n
+0000612749 00000 n
+0000610820 00000 n
+0000610926 00000 n
+0000612988 00000 n
+0000613648 00000 n
+0000613850 00000 n
+0000622135 00000 n
+0000614358 00000 n
+0000614481 00000 n
+0000622375 00000 n
+0000623296 00000 n
+0000623499 00000 n
+0000630838 00000 n
+0000623939 00000 n
+0000624047 00000 n
+0000631078 00000 n
+0000631991 00000 n
+0000632195 00000 n
+0000634507 00000 n
+0000632469 00000 n
+0000632575 00000 n
+0000634747 00000 n
+0000635453 00000 n
+0000635657 00000 n
+0000644198 00000 n
+0000636222 00000 n
+0000636359 00000 n
+0000644439 00000 n
+0000645392 00000 n
+0000645597 00000 n
+0000646453 00000 n
+0000645631 00000 n
+0000645726 00000 n
+0000646695 00000 n
+0000647298 00000 n
+0000647503 00000 n
+0000655424 00000 n
+0000647971 00000 n
+0000648088 00000 n
+0000655664 00000 n
+0000656575 00000 n
+0000656778 00000 n
+0000659010 00000 n
+0000656945 00000 n
+0000657051 00000 n
+0000659257 00000 n
+0000659933 00000 n
+0000660143 00000 n
+0000664681 00000 n
+0000660506 00000 n
+0000660624 00000 n
+0000664930 00000 n
+0000665708 00000 n
+0000665919 00000 n
+0000669218 00000 n
+0000666122 00000 n
+0000666229 00000 n
+0000669460 00000 n
+0000670156 00000 n
+0000670361 00000 n
+0000677133 00000 n
+0000670785 00000 n
+0000670903 00000 n
+0000677377 00000 n
+0000678201 00000 n
+0000678406 00000 n
+0000687116 00000 n
+0000678863 00000 n
+0000678979 00000 n
+0000687357 00000 n
+0000688336 00000 n
+0000688541 00000 n
+0000691942 00000 n
+0000688901 00000 n
+0000689008 00000 n
+0000692183 00000 n
+0000692951 00000 n
+0000693156 00000 n
+0000693391 00000 n
+0000703625 00000 n
+0000694032 00000 n
+0000694175 00000 n
+0000703867 00000 n
+0000704907 00000 n
+0000705113 00000 n
+0000705220 00000 n
+0000705499 00000 n
+0000705606 00000 n
+0000705668 00000 n
+0000705863 00000 n
+0000706232 00000 n
+0000714422 00000 n
+0000706739 00000 n
+0000706865 00000 n
+0000714662 00000 n
+0000715629 00000 n
+0000715833 00000 n
+0000717437 00000 n
+0000715990 00000 n
+0000716096 00000 n
+0000717677 00000 n
+0000718336 00000 n
+0000718540 00000 n
+0000721934 00000 n
+0000718833 00000 n
+0000718947 00000 n
+0000722175 00000 n
+0000722904 00000 n
+0000723109 00000 n
+0000724486 00000 n
+0000723188 00000 n
+0000723291 00000 n
+0000724725 00000 n
+0000725344 00000 n
+0000725546 00000 n
+0000727783 00000 n
+0000725725 00000 n
+0000725831 00000 n
+0000728024 00000 n
+0000728693 00000 n
+0000728898 00000 n
+0000732853 00000 n
+0000729215 00000 n
+0000729329 00000 n
+0000733095 00000 n
+0000733835 00000 n
+0000734041 00000 n
+0000735401 00000 n
+0000734164 00000 n
+0000734270 00000 n
+0000735642 00000 n
+0000736287 00000 n
+0000736492 00000 n
+0000739196 00000 n
+0000736715 00000 n
+0000736829 00000 n
+0000739438 00000 n
+0000740140 00000 n
+0000749592 00000 n
+0000740346 00000 n
+0000761016 00000 n
+0000749843 00000 n
+0000768704 00000 n
+0000761770 00000 n
+0000781481 00000 n
+0000768934 00000 n
+0000788952 00000 n
+0000781809 00000 n
+0000797085 00000 n
+0000789178 00000 n
+0000807012 00000 n
+0000797318 00000 n
+0000814924 00000 n
+0000807279 00000 n
+0000827634 00000 n
+0000815155 00000 n
+0000835652 00000 n
+0000827992 00000 n
+0000844893 00000 n
+0000835900 00000 n
+0000852845 00000 n
+0000845201 00000 n
+0000860385 00000 n
+0000853129 00000 n
+0000867899 00000 n
+0000860624 00000 n
+0000871365 00000 n
+0000871488 00000 n
+0000879844 00000 n
+0000880480 00000 n
+0000881120 00000 n
+0000881789 00000 n
+0000882632 00000 n
+0000883529 00000 n
+0000884194 00000 n
+0000884322 00000 n
+0000884362 00000 n
+0000884494 00000 n
trailer
-<< /Size 1535 /Root 1533 0 R /Info 1534 0 R /ID [ <48D60F482EB7B3E72753E06407165887> <48D60F482EB7B3E72753E06407165887> ] >>
+<< /Size 1551 /Root 1549 0 R /Info 1550 0 R /ID [ <5863455A451194380A29DF4EE0F48A1C> <5863455A451194380A29DF4EE0F48A1C> ] >>
startxref
-874458
+885068
%%EOF
diff --git a/macros/latex/contrib/nicematrix/nicematrix-french.tex b/macros/latex/contrib/nicematrix/nicematrix-french.tex
index 4d8cafd6e8..db7c9ec15e 100644
--- a/macros/latex/contrib/nicematrix/nicematrix-french.tex
+++ b/macros/latex/contrib/nicematrix/nicematrix-french.tex
@@ -516,10 +516,11 @@ Si cet argument est laissé blanc, la valeur par défaut est |1-1|. Si le nombre
de rangées n'est pas indiqué, ou bien est égal à |*|, le bloc s'étend jusqu'à la
dernière rangée (idem pour les colonnes).
-\item Le deuxième argument est le contenu du bloc. On peut utiliser |\\| dans ce
-contenu pour avoir un contenu sur plusieurs lignes. Dans |{NiceTabular}|,
-|{NiceTabular*}| et |{NiceTabularX}|, le contenu est composé en mode texte
-tandis que, dans les autres environnements, il est composé en mode mathématique.
+\item Le deuxième argument est le contenu du bloc.
+
+Dans |{NiceTabular}|, |{NiceTabular*}| et |{NiceTabularX}|, le contenu est
+composé en mode texte tandis que, dans les autres environnements, il est composé
+en mode mathématique.
\end{itemize}
\interitem
@@ -641,12 +642,12 @@ options la valeur de cette clé |tikz| (qui doit donc être une liste de clés T
applicables à un chemin de TikZ). Pour des exemples d'utilisation de cette clé
|tikz|, voir p.~\pageref{tikz-key-examples}.
-\colorbox{yellow!50}{\textbf{Nouveau 6.24}}\enskip En fait, dans la liste des
-clés fournies à |tikz|, on peut mettre une clé \Definition{offset}. Cette clé
-n'est pas fournie par TikZ mais par \pkg{nicematrix}. Elle réduit le rectangle
-correspondant au bloc par une marge (horizontalement et verticalement) égale à
-la valeur (passée à |offset|). C'est ce rectangle réduit qui sera le chemin
-exécuté par TikZ avec comme options les autres clés passées à la clé |tikz|.
+En fait, dans la liste des clés fournies à |tikz|, on peut mettre une clé
+\Definition{offset}. Cette clé n'est pas fournie par TikZ mais par
+\pkg{nicematrix}. Elle réduit le rectangle correspondant au bloc par une marge
+(horizontalement et verticalement) égale à la valeur (passée à |offset|). C'est
+ce rectangle réduit qui sera le chemin exécuté par TikZ avec comme options les
+autres clés passées à la clé |tikz|.
\end{itemize}
@@ -725,10 +726,11 @@ Dans les colonnes à largeur fixée (|p{...}|, |b{...}|, |m{...}|, |w{...}{...}|
|W{...}{...}|, |V{...}| et~|X|), le contenu du bloc est mis en forme comme un
paragraphe de cette largeur.
-\item La spécification d'alignement horizontal donnée par le type de
-colonne (|c|, |r| ou |l|) est prise en compte pour le bloc (mais le bloc peut
-avoir sa propre spécification d'alignement horizontal :
-cf.~\ref{horizontal-bloc} p.~\pageref{horizontal-bloc}).
+\item La spécification d'alignement horizontal donnée par le type de colonne
+(|c|, |r| ou |l|) est prise en compte pour le bloc. Pour un bloc dans une
+colonne de type |p{...}| (sans option à |p|), c'est un alignement |c| qui est
+retenu. Le bloc peut bien sûr avoir sa propre spécification d'alignement
+horizontal : cf.~\ref{horizontal-bloc} p.~\pageref{horizontal-bloc}.
\item Les spécifications de fontes imposées à une colonne via la construction
|>{...}| dans le préambule du tableau sont prises en compte pour les
@@ -836,8 +838,9 @@ défaut de ce premier argument obligatoire est |1-1|.}.
\label{horizontal-bloc}
-La commande |\Block| admet les clés |l|, |c| et |r| pour la position horizontale
-du contenu du bloc (calé à gauche, centré ou bien calé à droite).
+La commande |\Block| admet les clés \Definition{l}, \Definition{c} et
+\Definition{r} pour la position horizontale du contenu du bloc (calé à gauche,
+centré ou bien calé à droite).
\medskip
\begin{Code}[width=10.6cm]
@@ -899,7 +902,8 @@ Rang & \Block{1-3}{Premier groupe} & & & \Block{1-3}{Deuxième groupe} \\
\medskip
Pour avoir un positionnement horizontal du contenu du bloc qui s'appuie sur les
limites des colonnes du tableau LaTeX (et non sur le contenu de ces colonnes),
-il faut utiliser les clés |L|, |R| et |C| de la commande |\Block|.
+il faut utiliser les clés \Definition{L}, \Definition{R} et \Definition{C} de la
+commande |\Block|.
\medskip
Voici le même exemple avec la clé |C| pour le premier bloc.
@@ -935,6 +939,16 @@ Rang & \Block[C]{1-3}{Premier groupe} & & & \Block{1-3}{Deuxième groupe} \\
\end{NiceTabular}
\end{center}
+\bigskip
+\colorbox{yellow!50}{\bfseries Nouveau 6.28}\par\nobreak
+
+\smallskip
+La commande |\Block| accepte aussi la clé |p|. Avec cette clé, le contenu du
+bloc est composé comme un paragraphe (de manière similaire à une colonne
+standard de type |p|). Cette clé peut s'utiliser en conjonction avec les clés
+|l|, |c| ou |r| et, alors, le paragraphe est composé avec |\raggedright|,
+|\centering| ou |\raggedleft|. Avec la clé |j|, le paragraphe est composé de
+manière justifiée.
\subsection{Positionnement vertical du contenu des blocs}
@@ -962,7 +976,8 @@ impliquées dans le bloc.
Il n'y a pas de marge verticale. Néanmoins, le contenu du bloc est (toujours)
composé en interne dans une |{minipage}|, un |{tabular}| ou un |{array}|, ce qui
-fait qu'il y a souvent déjà une marge.
+fait qu'il y a souvent déjà une marge. Si besoin est, on peut toujours ajouter
+un |\strut|.
\item Avec la clé \Definition{B}, le contenu du bloc est calé vers le bas.
\end{itemize}
@@ -1063,6 +1078,85 @@ text & text \\
\end{scope}
+
+\subsection{\textbackslash\textbackslash\ et \& dans les blocs}
+
+\index{ampersand-in-blocks}
+
+\colorbox{yellow!50}{\bfseries Nouveau 6.28}\par\nobreak
+
+\medskip
+L'extension \pkg{nicematrix} offre la possibilité d'utiliser directement |\\| et
+|&| dans le contenu d'un bloc (dans le but de formater son contenu) mais il y a
+quelques restrictions.
+
+\begin{itemize}
+\item On ne doit pas utiliser |&| et |\\| dans le même bloc.
+
+\item Pour |\\|, il n'y a pas d'autres restrictions. On peut utiliser
+|\\| dans un bloc pour composer du texte sur plusieurs lignes.
+
+\item Pour pouvoir utiliser |&|, la clé |ampersand-in-blocks| doit avoir été
+activée. Le bloc est alors divisé en sous-blocs comme illustré ci-desous.
+Attention toutefois : quand |ampersand-in-blocks| est utilisée, l'argument
+(principal) de la commande |\Block| est découpé syntaxiquement au niveau des
+esperluettes |&|, celles entre accolades sont masquées mais pas celles dans un
+environnement.\footnote{On ne peut donc écrire :
+ |\Block[ampersand-in-blocks]{}{\begin{array}{cc}1&2\end{array}}|. Bien sûr, on
+ peut le faire sans la clé |ampersand-in-blocks|.}
+\end{itemize}
+
+\bigskip
+L'esperluette |&| permet de diviser horizontalement un bloc en sous-blocs \emph{de même taille}.
+
+\medskip
+\begin{Code}[width=85mm]
+\begin{NiceTabular}{ll}%
+ [hvlines,ampersand-in-blocks]
+ & les cinq premiers entiers naturels \\
+3 & \Block{un&deux&trois} \\
+4 & \Block{un&deux&trois& quatre} \\
+5 & \Block{un&deux&trois&quatre&cinq} \\
+\end{NiceTabular}
+\end{Code}
+%
+\begin{NiceTabular}{ll}%
+ [hvlines,ampersand-in-blocks]
+ & les cinq premiers entiers naturels \\
+3 & \Block{}{un & deux & trois} \\
+4 & \Block{}{un& deux & trois & quatre} \\
+5 & \Block{}{un & deux & trois & quatre & cinq} \\
+\end{NiceTabular}
+
+\medskip
+Comme on le voit, le bloc (qui était ici mono-case) a été divisé en sous-cases
+de même taille. Dans le cas présent, on aurait peut-être préféré le codage
+suivant :
+
+\medskip
+\begin{Code}[width=85mm]
+\begin{NiceTabular}{lccccc}%
+ [hvlines,ampersand-in-blocks]
+ & \Block{1-5}{les cinq premiers
+ entiers naturels} \\
+3 & \Block{1-5}{un & deux & trois} \\
+4 & \Block{1-5}{un& deux & trois & quatre} \\
+5 & un & deux & trois & quatre & cinq \\
+\end{NiceTabular}
+\end{Code}
+%
+\begin{NiceTabular}{lccccc}%
+ [hvlines,ampersand-in-blocks]
+ & \Block{1-5}{les cinq premiers entiers naturels} \\
+3 & \Block{1-5}{un & deux & trois} \\
+4 & \Block{1-5}{un& deux & trois & quatre} \\
+5 & un & deux & trois & quatre & cinq \\
+\end{NiceTabular}
+
+Dans ce codage, il s'agit de blocs de taille |1-5| qui sont coupés en trois et
+quatre sous-blocs.
+
+
\index{Blocs@\textbf{Blocs dans les tableaux}|)}
\section{Les filets horizontaux et verticaux}
@@ -1315,7 +1409,7 @@ des options qui caractérisent le filet à tracer.
\medskip
\begin{Code}[width=10cm]
-\begin{NiceTabular}{|c|\emph{[color=blue]}c|}
+\begin{NiceTabular}{| c | \emph{[color=blue]} c |}
\Hline
a & b \\
\emph{\Hline[color=red]}
@@ -1643,7 +1737,8 @@ d'un environnement ;
\item la clé \Definition{color} fixe la couleur des filets ;
\item la clé \Definition{sep-color} fixe la couleur entre deux filets consécutifs (n'a
-d'intérêt que dans le cas où la clé |multiplicity| est utilisée).
+d'intérêt que dans le cas où la clé |multiplicity| est utilisée). Le nom de
+cette clé est inspirée par la commande |\doublerulesepcolor| de \pkg{colortbl}.
\end{itemize}
\medskip
@@ -1680,6 +1775,51 @@ Produit C & 5 & 4 & 1 \\
\end{center}
+\bigskip
+La clé |sep-color| avec la valeur |white| peut être en particulier utile en cas
+de filet double au-dessus d'une case colorée (pour éviter que la couleur ne
+s'applique aussi entre les deux filets).
+
+
+\begin{scope}
+\NiceMatrixOptions
+ {
+ custom-line =
+ {
+ command = DoubleRule ,
+ multiplicity = 2 ,
+ sep-color = white
+ }
+ }
+
+
+\begin{Code}[width=10cm]
+\NiceMatrixOptions
+ {
+ custom-line =
+ {
+ command = DoubleRule ,
+ multiplicity = 2 ,
+ \emph{sep-color = white}
+ }
+ }
+
+\begin{NiceTabular}{ccc}[color-inside]
+un & deux & trois \\
+\emph{\DoubleRule}
+quatre & \cellcolor{yellow} cinq & six \\
+\end{NiceTabular}
+\end{Code}
+\begin{NiceTabular}{ccc}[color-inside]
+un & deux & trois \\
+\DoubleRule
+quatre & \cellcolor{yellow} cinq & six \\
+\end{NiceTabular}
+
+\end{scope}
+
+
+\bigskip
\item \emph{Deuxième possibilité}\par\nobreak
\index{tikzz@tikz!clé de «custom-line»}
@@ -1691,7 +1831,7 @@ directement avec TikZ en utilisant comme paramètres la valeur de la clé |tikz|
qui doit être une liste de couples \textsl{clé=valeur} applicables à un chemin
TikZ.
-Par défaut aucune réservation de place n'est faite pour le filet qui sera tracé
+Par défaut, aucune réservation de place n'est faite pour le filet qui sera tracé
avec TikZ. On peut demander une réservation (horizontale pour un filet vertical
et verticale pour un filet horizontal) avec la clé |total-width| qui est donc en
quelque sorte la largeur du filet qui sera tracé (cette largeur n'est \emph{pas}
@@ -1736,7 +1876,7 @@ sept & huit & neuf
\end{center}
\medskip
-\item \emph{Troisième possibilité} : la clé |dotted|\par\nobreak
+\item \emph{Troisième possibilité} : la clé \Definition{dotted}\par\nobreak
\label{dotted}
\index{dotted (clé de «custom-line»)}
\indexcommand{hdottedline}
@@ -1753,15 +1893,14 @@ composantes de la matrice par |\Cdots|, |\Vdots|, etc. (voir
p.~\pageref{Cdots}).
\medskip
-L'extension \pkg{nicematrix} prédéfinit en fait les commandes |\hdottedline| et
-|\cdottedline| et la lettre «|:|» pour ces filets en
-pointillés.\footnote{Néanmoins, l'utilisateur peut écraser ces définitions de
+L'extension \pkg{nicematrix} prédéfinit en fait les commandes \Definition{hdottedline} et
+\Definition{cdottedline} et la lettre «|:|» pour ces filets en pointillés.\footnote{Néanmoins, l'utilisateur peut écraser ces définitions de
|\hdottedline|, |\cdottedline| et de «|:|» avec |custom-line| s'il le souhaite
(par exemple pour les remplacer par des lignes en tiretés).}
\smallskip
\begin{Code}
-% présent dans nicematrix.sty
+\emph{% présent dans nicematrix.sty}
\NiceMatrixOptions
{
custom-line =
@@ -2527,12 +2666,11 @@ Dupont & Chantal & 15 janvier 1998 \\
\end{center}
\bigskip
-\colorbox{yellow!50}{\textbf{Nouveau 6.25}}\enskip Chaque utilisation de
-|\rowlistcolors| (et de |\rowcolors| qui en est un cas particulier) met un
-terme aux éventuels schémas\footnote{On a écrit \emph{schémas} au pluriel car on
- peut avoir plusieurs schémas en cours s'ils portent sur des colonnes
- différentes.} de coloriage en cours qui auraient été spécifiés par une
-commande |\rowlistcolors| précédente.
+Chaque utilisation de |\rowlistcolors| (et de |\rowcolors| qui en est un cas
+particulier) met un terme aux éventuels schémas\footnote{On a écrit
+ \emph{schémas} au pluriel car on peut avoir plusieurs schémas en cours s'ils
+ portent sur des colonnes différentes.} de coloriage en cours qui auraient été
+spécifiés par une commande |\rowlistcolors| précédente.
En particulier, on peut engager un coloriage des rangées avec
|\rowlistcolors{...}| et l'arrêter par un |\rowlistcolors{}| avec argument vide.
@@ -2567,10 +2705,9 @@ sept \\
\index{nocolor}
-\colorbox{yellow!50}{\textbf{Nouveau 6.26}}\enskip L'extension \pkg{nicematrix}
-propose la couleur spéciale |nocolor| utilisable dans toutes les commandes de
-coloriage fournies par \pkg{nicematrix} (dans le |\CodeBefore| ou bien dans le
-tableau proprement dit).
+L'extension \pkg{nicematrix} propose la couleur spéciale |nocolor| utilisable
+dans toutes les commandes de coloriage fournies par \pkg{nicematrix} (dans le
+|\CodeBefore| ou bien dans le tableau proprement dit).
Les cases marquées par cette couleur ne seront pas coloriées, quelles que soient
les autres commandes de coloriage qui auraient pu s'appliquer à ces cases.
@@ -2767,7 +2904,7 @@ $\begin{array}{c}
\end{bNiceMatrix} \\ \\
\begin{bNiceMatrix}
1 & 1245345 \\ 345 & 2
-\end{bNiceMatrix}
+\end{bNiceMatrix} \\
\end{array}$
\emph{\end{NiceMatrixBlock}}
\end{Code}
@@ -2778,8 +2915,8 @@ $\begin{array}{c}
\end{bNiceMatrix} \\ \\
\begin{bNiceMatrix}
1 & 1245345 \\ 345 & 2
-\end{bNiceMatrix}
-\end{array}$
+\end{bNiceMatrix} \\
+\end{array}$
\end{NiceMatrixBlock}
@@ -4291,16 +4428,16 @@ $\begin{pNiceMatrix}
\index{empty (clé de \texttt{\textbackslash TikzEveryCell})}
\index{non empty (clé de \texttt{\textbackslash TikzEveryCell})}
-\colorbox{yellow!50}{\textbf{Nouveau 6.24}}\enskip La commande |\TikzEveryCell|
-exécute avec TikZ le chemin rectangulaire qui correspond à chaque case du
-tableau, avec comme paramètres TikZ l'argument de |\TikzEveryCell|. Cet argument
-doit être une liste de couples \textsl{clé=valeur} applicables à un chemin TikZ.
-En fait, cette commande s'applique à chaque case du tableau, exceptées celles
-situées dans les rangées et colonnes extérieures (cf.~p.~\pageref{exterior}) et
-celles situées dans les coins vides (quand la clé |corners| est utilisée:
-cf.~p.~\pageref{corners}). Elle s'applique en fait aussi à chaque bloc (sauf
-ceux qui ont la clé |transparent|) et ne s'applique pas aux cases individuelles
-situées dans ces blocs.
+La commande |\TikzEveryCell| exécute avec TikZ le chemin rectangulaire qui
+correspond à chaque case du tableau, avec comme paramètres TikZ l'argument de
+|\TikzEveryCell|. Cet argument doit être une liste de couples
+\textsl{clé=valeur} applicables à un chemin TikZ. En fait, cette commande
+s'applique à chaque case du tableau, exceptées celles situées dans les rangées
+et colonnes extérieures (cf.~p.~\pageref{exterior}) et celles situées dans les
+coins vides (quand la clé |corners| est utilisée: cf.~p.~\pageref{corners}).
+Elle s'applique en fait aussi à chaque bloc (sauf ceux qui ont la clé
+|transparent|) et ne s'applique pas aux cases individuelles situées dans ces
+blocs.
\medskip
En fait, dans la liste des clés passée en argument on peut mettre une clé
@@ -5209,12 +5346,11 @@ dans les cases du tableau.\footnote{La raison en est que lorsque l'option |light
\medskip
\index{light-syntax-expanded}
-\colorbox{yellow!50}{\textbf{Nouveau 6.27}}\enskip La clé
-|light-syntax-expanded| a le même comportement que la clé |light-syntax| mais
-avec cette différence que le corps de l'environnement est complètement développé
-(au sens de TeX\footnote{Plus précisément, il s'agit d'une expansion de type |e|
-de L3.}) avant découpe en lignes (mais après l'extraction de l'éventuel
-|\CodeAfter|).
+La clé |light-syntax-expanded| a le même comportement que la clé |light-syntax|
+mais avec cette différence que le corps de l'environnement est complètement
+développé (au sens de TeX\footnote{Plus précisément, il s'agit d'une expansion
+ de type |e| de L3.}) avant découpe en lignes (mais après l'extraction de
+l'éventuel |\CodeAfter|).
\subsection{Couleur des délimiteurs}
@@ -5319,7 +5455,7 @@ lignes pointillées (cf.~p.~\pageref{Cdots}) et la détermination des «coins»
\medskip
Comme la création de ces nœuds requiert du temps et de la mémoire, il est
possible de la désactiver ponctuellement avec la clé |no-cell-nodes| pour
-accéler les compilations.
+accélerer les compilations.
\medskip
Tous les nœuds du document doivent avoir des noms deux à deux distincts et le
@@ -5774,9 +5910,14 @@ L'extension \pkg{nicematrix} crée un nœud PGF-TikZ nommé simplement $i$ (pré
du préfixe habituel) à l'intersection du filet horizontal de numéro $i$ et du
filet vertical de numéro~$i$ (ou plutôt la position potentielle de ces filets
car ils ne sont peut-être pas tracés). Le dernier nœud a aussi un alias nommé
-simplement |last|. Il existe aussi un nœud nommé $i$|.5| à mi-chemin entre le
-nœud $i$ et le nœud $i+1$.
+simplement |last|.
+
+\smallskip
+\colorbox{yellow!50}{\textbf{Modification 6.28}}\enskip Il existe aussi des nœuds nommés
+$i$|.1|, $i$|.2|, ... , $i$|.9| intermédiaires entre le nœud~$i$ et le
+nœud~$i+1$ (avant la version 6.28, seul le nœud $i$|.5| existait).
+\smallskip
Ces nœuds sont accessibles dans le
|\CodeAfter| mais aussi dans le |\CodeBefore|.
@@ -6193,10 +6334,18 @@ environnements de l'extension \pkg{nicematrix} ne sont pas affectés).
\medskip
L'extension \pkg{nicematrix} n'est pas compatible avec la classe \cls{ieeeaccess}
-(car cette classe n'est pas compatible avec PGF-TikZ).\footnote{Voir
- \url{https://tex.stackexchange.com/questions/528975/error-loading-tikz-in-ieeeaccess-class}}
+car cette classe n'est pas compatible avec PGF-TikZ. Il existe néanmoins une
+parade simple qui consiste à écrire:\footnote{Voir
+ \url{https://tex.stackexchange.com/questions/528975/error-loading-tikz-in-ieeeaccess-class}}\par\nobreak
+
+\begin{Code}
+\let\TeXyear\year
+\documentclass{IEEEaccess}
+\let\year\TeXyear
+\end{Code}
\medskip
+% l'information suivante est toujours d'actualité le 23 avril 2024
Pour pouvoir utiliser \pkg{nicematrix} avec la classe \cls{aastex631} (de
l'\emph{American Astronomical Society}), on doit ajouter dans le préambule du
fichier les lignes suivantes :
@@ -6780,7 +6929,7 @@ avec l'environnement |{NiceMatrixBlock}| et l'option |auto-columns-width|.
last-col, code-for-last-col = \color{blue}\scriptstyle,
vlines = 5 ,
matrix/columns-type = r ,
- no-cell-nodes
+ no-cell-nodes % facultatif
}
\setlength{\extrarowheight}{1mm}
\end{NiceMatrixBlock}
@@ -6882,7 +7031,7 @@ avec leur largeur maximale grâce à la clé booléenne |delimiters/max-width|.
last-col, code-for-last-col = \color{blue}\scriptstyle,
vlines = 5 ,
matrix/columns-type = r ,
- no-cell-nodes
+ no-cell-nodes % facultatif
}
\setlength{\extrarowheight}{1mm}
@@ -7093,7 +7242,7 @@ la commande |\Block| est laissé vide, le bloc est considéré comme mono-case.}
\label{exemple-CodeAfter}
\begin{Code}
-$\begin{pNiceArray}{>{\strut}cccc}[margin,rules/color=blue]
+$\begin{pNiceArray}{>{\strut}cccc}[margin,rules/color=blue,no-cell-nodes]
\emph{\Block[draw]{}{a_{11}}} & a_{12} & a_{13} & a_{14} \\
a_{21} & \emph{\Block[draw]{}{a_{22}}} & a_{23} & a_{24} \\
a_{31} & a_{32} & \emph{\Block[draw]{}{a_{33}}} & a_{34} \\
@@ -7101,7 +7250,7 @@ a_{41} & a_{42} & a_{43} & \emph{\Block[draw]{}{a_{44}}} \\
\end{pNiceArray}$
\end{Code}
%
-\[\begin{pNiceArray}{>{\strut}cccc}[margin,rules/color=blue]
+\[\begin{pNiceArray}{>{\strut}cccc}[margin,rules/color=blue,no-cell-nodes]
\Block[draw]{}{a_{11}} & a_{12} & a_{13} & a_{14} \\
a_{21} & \Block[draw]{}{a_{22}} & a_{23} & a_{24} \\
a_{31} & a_{32} & \Block[draw]{}{a_{33}} & a_{34} \\
@@ -7126,7 +7275,8 @@ Il est possible de colorier une rangée avec |\rowcolor| dans le |\CodeBefore|
\index{rowcolor@\texttt{\textbackslash rowcolor}!commande en tableau|textit}
\begin{Code}
-\begin{pNiceArray}{>{\strut}cccc}[margin, extra-margin=2pt,color-inside]
+\begin{pNiceArray}{>{\strut}cccc}% <-- % obligatoire
+ [margin, extra-margin=2pt,color-inside,no-cell-nodes]
\emph{\rowcolor{red!15}}A_{11} & A_{12} & A_{13} & A_{14} \\
A_{21} & \emph{\rowcolor{red!15}}A_{22} & A_{23} & A_{24} \\
A_{31} & A_{32} & \emph{\rowcolor{red!15}}A_{33} & A_{34} \\
@@ -7136,7 +7286,7 @@ Il est possible de colorier une rangée avec |\rowcolor| dans le |\CodeBefore|
-\[\begin{pNiceArray}{>{\strut}cccc}[margin, extra-margin=2pt,color-inside]
+\[\begin{pNiceArray}{>{\strut}cccc}[margin, extra-margin=2pt,color-inside,no-cell-nodes]
\rowcolor{red!15}A_{11} & A_{12} & A_{13} & A_{14} \\
A_{21} & \rowcolor{red!15}A_{22} & A_{23} & A_{24} \\
A_{31} & A_{32} & \rowcolor{red!15}A_{33} & A_{34} \\
diff --git a/macros/latex/contrib/nicematrix/nicematrix.pdf b/macros/latex/contrib/nicematrix/nicematrix.pdf
index 7029ce1ed6..d0b37652ae 100644
--- a/macros/latex/contrib/nicematrix/nicematrix.pdf
+++ b/macros/latex/contrib/nicematrix/nicematrix.pdf
@@ -71,626 +71,641 @@ endobj
endobj
44 0 obj
-<< /S /GoTo /D (section.5) >>
+<< /S /GoTo /D (subsection.4.7) >>
endobj
47 0 obj
-(\376\377\000T\000h\000e\000\040\000r\000u\000l\000e\000s)
+(\376\377\000\134\000\134\000\040\000a\000n\000d\000\040\000\046\000\040\000i\000n\000\040\000t\000h\000e\000\040\000b\000l\000o\000c\000k\000s)
endobj
48 0 obj
-<< /S /GoTo /D (subsection.5.1) >>
+<< /S /GoTo /D (section.5) >>
endobj
51 0 obj
-(\376\377\000S\000o\000m\000e\000\040\000d\000i\000f\000f\000e\000r\000e\000n\000c\000e\000s\000\040\000w\000i\000t\000h\000\040\000t\000h\000e\000\040\000c\000l\000a\000s\000s\000i\000c\000a\000l\000\040\000e\000n\000v\000i\000r\000o\000n\000m\000e\000n\000t\000s)
+(\376\377\000T\000h\000e\000\040\000r\000u\000l\000e\000s)
endobj
52 0 obj
-<< /S /GoTo /D (subsubsection.5.1.1) >>
+<< /S /GoTo /D (subsection.5.1) >>
endobj
55 0 obj
-(\376\377\000T\000h\000e\000\040\000v\000e\000r\000t\000i\000c\000a\000l\000\040\000r\000u\000l\000e\000s)
+(\376\377\000S\000o\000m\000e\000\040\000d\000i\000f\000f\000e\000r\000e\000n\000c\000e\000s\000\040\000w\000i\000t\000h\000\040\000t\000h\000e\000\040\000c\000l\000a\000s\000s\000i\000c\000a\000l\000\040\000e\000n\000v\000i\000r\000o\000n\000m\000e\000n\000t\000s)
endobj
56 0 obj
-<< /S /GoTo /D (subsubsection.5.1.2) >>
+<< /S /GoTo /D (subsubsection.5.1.1) >>
endobj
59 0 obj
-(\376\377\000T\000h\000e\000\040\000c\000o\000m\000m\000a\000n\000d\000\040\000\134\000c\000l\000i\000n\000e)
+(\376\377\000T\000h\000e\000\040\000v\000e\000r\000t\000i\000c\000a\000l\000\040\000r\000u\000l\000e\000s)
endobj
60 0 obj
-<< /S /GoTo /D (subsection.5.2) >>
+<< /S /GoTo /D (subsubsection.5.1.2) >>
endobj
63 0 obj
-(\376\377\000T\000h\000e\000\040\000t\000h\000i\000c\000k\000n\000e\000s\000s\000\040\000a\000n\000d\000\040\000t\000h\000e\000\040\000c\000o\000l\000o\000r\000\040\000o\000f\000\040\000t\000h\000e\000\040\000r\000u\000l\000e\000s)
+(\376\377\000T\000h\000e\000\040\000c\000o\000m\000m\000a\000n\000d\000\040\000\134\000c\000l\000i\000n\000e)
endobj
64 0 obj
-<< /S /GoTo /D (subsection.5.3) >>
+<< /S /GoTo /D (subsection.5.2) >>
endobj
67 0 obj
-(\376\377\000T\000h\000e\000\040\000t\000o\000o\000l\000s\000\040\000o\000f\000\040\000n\000i\000c\000e\000m\000a\000t\000r\000i\000x\000\040\000f\000o\000r\000\040\000t\000h\000e\000\040\000r\000u\000l\000e\000s)
+(\376\377\000T\000h\000e\000\040\000t\000h\000i\000c\000k\000n\000e\000s\000s\000\040\000a\000n\000d\000\040\000t\000h\000e\000\040\000c\000o\000l\000o\000r\000\040\000o\000f\000\040\000t\000h\000e\000\040\000r\000u\000l\000e\000s)
endobj
68 0 obj
-<< /S /GoTo /D (subsubsection.5.3.1) >>
+<< /S /GoTo /D (subsection.5.3) >>
endobj
71 0 obj
-(\376\377\000T\000h\000e\000\040\000k\000e\000y\000s\000\040\000h\000l\000i\000n\000e\000s\000\040\000a\000n\000d\000\040\000v\000l\000i\000n\000e\000s)
+(\376\377\000T\000h\000e\000\040\000t\000o\000o\000l\000s\000\040\000o\000f\000\040\000n\000i\000c\000e\000m\000a\000t\000r\000i\000x\000\040\000f\000o\000r\000\040\000t\000h\000e\000\040\000r\000u\000l\000e\000s)
endobj
72 0 obj
-<< /S /GoTo /D (subsubsection.5.3.2) >>
+<< /S /GoTo /D (subsubsection.5.3.1) >>
endobj
75 0 obj
-(\376\377\000T\000h\000e\000\040\000k\000e\000y\000s\000\040\000h\000v\000l\000i\000n\000e\000s\000\040\000a\000n\000d\000\040\000h\000v\000l\000i\000n\000e\000s\000-\000e\000x\000c\000e\000p\000t\000-\000b\000o\000r\000d\000e\000r\000s)
+(\376\377\000T\000h\000e\000\040\000k\000e\000y\000s\000\040\000h\000l\000i\000n\000e\000s\000\040\000a\000n\000d\000\040\000v\000l\000i\000n\000e\000s)
endobj
76 0 obj
-<< /S /GoTo /D (subsubsection.5.3.3) >>
+<< /S /GoTo /D (subsubsection.5.3.2) >>
endobj
79 0 obj
-(\376\377\000T\000h\000e\000\040\000\050\000e\000m\000p\000t\000y\000\051\000\040\000c\000o\000r\000n\000e\000r\000s)
+(\376\377\000T\000h\000e\000\040\000k\000e\000y\000s\000\040\000h\000v\000l\000i\000n\000e\000s\000\040\000a\000n\000d\000\040\000h\000v\000l\000i\000n\000e\000s\000-\000e\000x\000c\000e\000p\000t\000-\000b\000o\000r\000d\000e\000r\000s)
endobj
80 0 obj
-<< /S /GoTo /D (subsubsection.5.3.4) >>
+<< /S /GoTo /D (subsubsection.5.3.3) >>
endobj
83 0 obj
-(\376\377\000T\000h\000e\000\040\000c\000o\000m\000m\000a\000n\000d\000\040\000\134\000d\000i\000a\000g\000b\000o\000x)
+(\376\377\000T\000h\000e\000\040\000\050\000e\000m\000p\000t\000y\000\051\000\040\000c\000o\000r\000n\000e\000r\000s)
endobj
84 0 obj
-<< /S /GoTo /D (subsubsection.5.3.5) >>
+<< /S /GoTo /D (subsubsection.5.3.4) >>
endobj
87 0 obj
-(\376\377\000C\000o\000m\000m\000a\000n\000d\000s\000\040\000f\000o\000r\000\040\000c\000u\000s\000t\000o\000m\000i\000z\000e\000d\000\040\000r\000u\000l\000e\000s)
+(\376\377\000T\000h\000e\000\040\000c\000o\000m\000m\000a\000n\000d\000\040\000\134\000d\000i\000a\000g\000b\000o\000x)
endobj
88 0 obj
-<< /S /GoTo /D (section.6) >>
+<< /S /GoTo /D (subsubsection.5.3.5) >>
endobj
91 0 obj
-(\376\377\000T\000h\000e\000\040\000c\000o\000l\000o\000r\000\040\000o\000f\000\040\000t\000h\000e\000\040\000b\000a\000c\000k\000g\000r\000o\000u\000n\000d\000\040\000o\000f\000\040\000t\000h\000e\000\040\000r\000o\000w\000s\000\040\000a\000n\000d\000\040\000c\000o\000l\000u\000m\000n\000s)
+(\376\377\000C\000o\000m\000m\000a\000n\000d\000s\000\040\000f\000o\000r\000\040\000c\000u\000s\000t\000o\000m\000i\000z\000e\000d\000\040\000r\000u\000l\000e\000s)
endobj
92 0 obj
-<< /S /GoTo /D (subsection.6.1) >>
+<< /S /GoTo /D (section.6) >>
endobj
95 0 obj
-(\376\377\000U\000s\000e\000\040\000o\000f\000\040\000c\000o\000l\000o\000r\000t\000b\000l)
+(\376\377\000T\000h\000e\000\040\000c\000o\000l\000o\000r\000\040\000o\000f\000\040\000t\000h\000e\000\040\000b\000a\000c\000k\000g\000r\000o\000u\000n\000d\000\040\000o\000f\000\040\000t\000h\000e\000\040\000r\000o\000w\000s\000\040\000a\000n\000d\000\040\000c\000o\000l\000u\000m\000n\000s)
endobj
96 0 obj
-<< /S /GoTo /D (subsection.6.2) >>
+<< /S /GoTo /D (subsection.6.1) >>
endobj
99 0 obj
-(\376\377\000T\000h\000e\000\040\000t\000o\000o\000l\000s\000\040\000o\000f\000\040\000n\000i\000c\000e\000m\000a\000t\000r\000i\000x\000\040\000i\000n\000\040\000t\000h\000e\000\040\000\134\000C\000o\000d\000e\000B\000e\000f\000o\000r\000e)
+(\376\377\000U\000s\000e\000\040\000o\000f\000\040\000c\000o\000l\000o\000r\000t\000b\000l)
endobj
100 0 obj
-<< /S /GoTo /D (subsection.6.3) >>
+<< /S /GoTo /D (subsection.6.2) >>
endobj
103 0 obj
-(\376\377\000C\000o\000l\000o\000r\000\040\000t\000o\000o\000l\000s\000\040\000t\000o\000\040\000b\000e\000\040\000u\000s\000e\000d\000\040\000i\000n\000s\000i\000d\000e\000\040\000t\000h\000e\000\040\000t\000a\000b\000u\000l\000a\000r)
+(\376\377\000T\000h\000e\000\040\000t\000o\000o\000l\000s\000\040\000o\000f\000\040\000n\000i\000c\000e\000m\000a\000t\000r\000i\000x\000\040\000i\000n\000\040\000t\000h\000e\000\040\000\134\000C\000o\000d\000e\000B\000e\000f\000o\000r\000e)
endobj
104 0 obj
-<< /S /GoTo /D (subsection.6.4) >>
+<< /S /GoTo /D (subsection.6.3) >>
endobj
107 0 obj
-(\376\377\000T\000h\000e\000\040\000s\000p\000e\000c\000i\000a\000l\000\040\000c\000o\000l\000o\000r\000\040\000`\000`\000n\000o\000c\000o\000l\000o\000r\000'\000')
+(\376\377\000C\000o\000l\000o\000r\000\040\000t\000o\000o\000l\000s\000\040\000t\000o\000\040\000b\000e\000\040\000u\000s\000e\000d\000\040\000i\000n\000s\000i\000d\000e\000\040\000t\000h\000e\000\040\000t\000a\000b\000u\000l\000a\000r)
endobj
108 0 obj
-<< /S /GoTo /D (section.7) >>
+<< /S /GoTo /D (subsection.6.4) >>
endobj
111 0 obj
-(\376\377\000T\000h\000e\000\040\000c\000o\000m\000m\000a\000n\000d\000\040\000\134\000R\000o\000w\000S\000t\000y\000l\000e)
+(\376\377\000T\000h\000e\000\040\000s\000p\000e\000c\000i\000a\000l\000\040\000c\000o\000l\000o\000r\000\040\000`\000`\000n\000o\000c\000o\000l\000o\000r\000'\000')
endobj
112 0 obj
-<< /S /GoTo /D (section.8) >>
+<< /S /GoTo /D (section.7) >>
endobj
115 0 obj
-(\376\377\000T\000h\000e\000\040\000w\000i\000d\000t\000h\000\040\000o\000f\000\040\000t\000h\000e\000\040\000c\000o\000l\000u\000m\000n\000s)
+(\376\377\000T\000h\000e\000\040\000c\000o\000m\000m\000a\000n\000d\000\040\000\134\000R\000o\000w\000S\000t\000y\000l\000e)
endobj
116 0 obj
-<< /S /GoTo /D (subsection.8.1) >>
+<< /S /GoTo /D (section.8) >>
endobj
119 0 obj
-(\376\377\000B\000a\000s\000i\000c\000\040\000t\000o\000o\000l\000s)
+(\376\377\000T\000h\000e\000\040\000w\000i\000d\000t\000h\000\040\000o\000f\000\040\000t\000h\000e\000\040\000c\000o\000l\000u\000m\000n\000s)
endobj
120 0 obj
-<< /S /GoTo /D (subsection.8.2) >>
+<< /S /GoTo /D (subsection.8.1) >>
endobj
123 0 obj
-(\376\377\000T\000h\000e\000\040\000c\000o\000l\000u\000m\000n\000s\000\040\000X)
+(\376\377\000B\000a\000s\000i\000c\000\040\000t\000o\000o\000l\000s)
endobj
124 0 obj
-<< /S /GoTo /D (subsection.8.3) >>
+<< /S /GoTo /D (subsection.8.2) >>
endobj
127 0 obj
-(\376\377\000T\000h\000e\000\040\000c\000o\000l\000u\000m\000n\000s\000\040\000V\000\040\000o\000f\000\040\000v\000a\000r\000w\000i\000d\000t\000h)
+(\376\377\000T\000h\000e\000\040\000c\000o\000l\000u\000m\000n\000s\000\040\000X)
endobj
128 0 obj
-<< /S /GoTo /D (section.9) >>
+<< /S /GoTo /D (subsection.8.3) >>
endobj
131 0 obj
-(\376\377\000T\000h\000e\000\040\000e\000x\000t\000e\000r\000i\000o\000r\000\040\000r\000o\000w\000s\000\040\000a\000n\000d\000\040\000c\000o\000l\000u\000m\000n\000s)
+(\376\377\000T\000h\000e\000\040\000c\000o\000l\000u\000m\000n\000s\000\040\000V\000\040\000o\000f\000\040\000v\000a\000r\000w\000i\000d\000t\000h)
endobj
132 0 obj
-<< /S /GoTo /D (section.10) >>
+<< /S /GoTo /D (section.9) >>
endobj
135 0 obj
-(\376\377\000T\000h\000e\000\040\000c\000o\000n\000t\000i\000n\000u\000o\000u\000s\000\040\000d\000o\000t\000t\000e\000d\000\040\000l\000i\000n\000e\000s)
+(\376\377\000T\000h\000e\000\040\000e\000x\000t\000e\000r\000i\000o\000r\000\040\000r\000o\000w\000s\000\040\000a\000n\000d\000\040\000c\000o\000l\000u\000m\000n\000s)
endobj
136 0 obj
-<< /S /GoTo /D (subsection.10.1) >>
+<< /S /GoTo /D (section.10) >>
endobj
139 0 obj
-(\376\377\000T\000h\000e\000\040\000o\000p\000t\000i\000o\000n\000\040\000n\000u\000l\000l\000i\000f\000y\000-\000d\000o\000t\000s)
+(\376\377\000T\000h\000e\000\040\000c\000o\000n\000t\000i\000n\000u\000o\000u\000s\000\040\000d\000o\000t\000t\000e\000d\000\040\000l\000i\000n\000e\000s)
endobj
140 0 obj
-<< /S /GoTo /D (subsection.10.2) >>
+<< /S /GoTo /D (subsection.10.1) >>
endobj
143 0 obj
-(\376\377\000T\000h\000e\000\040\000c\000o\000m\000m\000a\000n\000d\000s\000\040\000\134\000H\000d\000o\000t\000s\000f\000o\000r\000\040\000a\000n\000d\000\040\000\134\000V\000d\000o\000t\000s\000f\000o\000r)
+(\376\377\000T\000h\000e\000\040\000o\000p\000t\000i\000o\000n\000\040\000n\000u\000l\000l\000i\000f\000y\000-\000d\000o\000t\000s)
endobj
144 0 obj
-<< /S /GoTo /D (subsection.10.3) >>
+<< /S /GoTo /D (subsection.10.2) >>
endobj
147 0 obj
-(\376\377\000H\000o\000w\000\040\000t\000o\000\040\000g\000e\000n\000e\000r\000a\000t\000e\000\040\000t\000h\000e\000\040\000c\000o\000n\000t\000i\000n\000u\000o\000u\000s\000\040\000d\000o\000t\000t\000e\000d\000\040\000l\000i\000n\000e\000s\000\040\000t\000r\000a\000n\000s\000p\000a\000r\000e\000n\000t\000l\000y)
+(\376\377\000T\000h\000e\000\040\000c\000o\000m\000m\000a\000n\000d\000s\000\040\000\134\000H\000d\000o\000t\000s\000f\000o\000r\000\040\000a\000n\000d\000\040\000\134\000V\000d\000o\000t\000s\000f\000o\000r)
endobj
148 0 obj
-<< /S /GoTo /D (subsection.10.4) >>
+<< /S /GoTo /D (subsection.10.3) >>
endobj
151 0 obj
-(\376\377\000T\000h\000e\000\040\000l\000a\000b\000e\000l\000s\000\040\000o\000f\000\040\000t\000h\000e\000\040\000d\000o\000t\000t\000e\000d\000\040\000l\000i\000n\000e\000s)
+(\376\377\000H\000o\000w\000\040\000t\000o\000\040\000g\000e\000n\000e\000r\000a\000t\000e\000\040\000t\000h\000e\000\040\000c\000o\000n\000t\000i\000n\000u\000o\000u\000s\000\040\000d\000o\000t\000t\000e\000d\000\040\000l\000i\000n\000e\000s\000\040\000t\000r\000a\000n\000s\000p\000a\000r\000e\000n\000t\000l\000y)
endobj
152 0 obj
-<< /S /GoTo /D (subsection.10.5) >>
+<< /S /GoTo /D (subsection.10.4) >>
endobj
155 0 obj
-(\376\377\000C\000u\000s\000t\000o\000m\000i\000s\000a\000t\000i\000o\000n\000\040\000o\000f\000\040\000t\000h\000e\000\040\000d\000o\000t\000t\000e\000d\000\040\000l\000i\000n\000e\000s)
+(\376\377\000T\000h\000e\000\040\000l\000a\000b\000e\000l\000s\000\040\000o\000f\000\040\000t\000h\000e\000\040\000d\000o\000t\000t\000e\000d\000\040\000l\000i\000n\000e\000s)
endobj
156 0 obj
-<< /S /GoTo /D (subsection.10.6) >>
+<< /S /GoTo /D (subsection.10.5) >>
endobj
159 0 obj
-(\376\377\000T\000h\000e\000\040\000d\000o\000t\000t\000e\000d\000\040\000l\000i\000n\000e\000s\000\040\000a\000n\000d\000\040\000t\000h\000e\000\040\000r\000u\000l\000e\000s)
+(\376\377\000C\000u\000s\000t\000o\000m\000i\000s\000a\000t\000i\000o\000n\000\040\000o\000f\000\040\000t\000h\000e\000\040\000d\000o\000t\000t\000e\000d\000\040\000l\000i\000n\000e\000s)
endobj
160 0 obj
-<< /S /GoTo /D (section.11) >>
+<< /S /GoTo /D (subsection.10.6) >>
endobj
163 0 obj
-(\376\377\000D\000e\000l\000i\000m\000i\000t\000e\000r\000s\000\040\000i\000n\000\040\000t\000h\000e\000\040\000p\000r\000e\000a\000m\000b\000l\000e\000\040\000o\000f\000\040\000t\000h\000e\000\040\000e\000n\000v\000i\000r\000o\000n\000m\000e\000n\000t)
+(\376\377\000T\000h\000e\000\040\000d\000o\000t\000t\000e\000d\000\040\000l\000i\000n\000e\000s\000\040\000a\000n\000d\000\040\000t\000h\000e\000\040\000r\000u\000l\000e\000s)
endobj
164 0 obj
-<< /S /GoTo /D (section.12) >>
+<< /S /GoTo /D (section.11) >>
endobj
167 0 obj
-(\376\377\000T\000h\000e\000\040\000\134\000C\000o\000d\000e\000A\000f\000t\000e\000r)
+(\376\377\000D\000e\000l\000i\000m\000i\000t\000e\000r\000s\000\040\000i\000n\000\040\000t\000h\000e\000\040\000p\000r\000e\000a\000m\000b\000l\000e\000\040\000o\000f\000\040\000t\000h\000e\000\040\000e\000n\000v\000i\000r\000o\000n\000m\000e\000n\000t)
endobj
168 0 obj
-<< /S /GoTo /D (subsection.12.1) >>
+<< /S /GoTo /D (section.12) >>
endobj
171 0 obj
-(\376\377\000T\000h\000e\000\040\000c\000o\000m\000m\000a\000n\000d\000\040\000\134\000l\000i\000n\000e\000\040\000i\000n\000\040\000t\000h\000e\000\040\000\134\000C\000o\000d\000e\000A\000f\000t\000e\000r)
+(\376\377\000T\000h\000e\000\040\000\134\000C\000o\000d\000e\000A\000f\000t\000e\000r)
endobj
172 0 obj
-<< /S /GoTo /D (subsection.12.2) >>
+<< /S /GoTo /D (subsection.12.1) >>
endobj
175 0 obj
-(\376\377\000T\000h\000e\000\040\000c\000o\000m\000m\000a\000n\000d\000\040\000\134\000S\000u\000b\000M\000a\000t\000r\000i\000x\000\040\000i\000n\000\040\000t\000h\000e\000\040\000\134\000C\000o\000d\000e\000A\000f\000t\000e\000r\000\040\000\050\000a\000n\000d\000\040\000t\000h\000e\000\040\000\134\000C\000o\000d\000e\000B\000e\000f\000o\000r\000e\000\051)
+(\376\377\000T\000h\000e\000\040\000c\000o\000m\000m\000a\000n\000d\000\040\000\134\000l\000i\000n\000e\000\040\000i\000n\000\040\000t\000h\000e\000\040\000\134\000C\000o\000d\000e\000A\000f\000t\000e\000r)
endobj
176 0 obj
-<< /S /GoTo /D (subsection.12.3) >>
+<< /S /GoTo /D (subsection.12.2) >>
endobj
179 0 obj
-(\376\377\000T\000h\000e\000\040\000c\000o\000m\000m\000a\000n\000d\000s\000\040\000\134\000O\000v\000e\000r\000B\000r\000a\000c\000e\000\040\000a\000n\000d\000\040\000\134\000U\000n\000d\000e\000r\000B\000r\000a\000c\000e\000\040\000i\000n\000\040\000t\000h\000e\000\040\000\134\000C\000o\000d\000e\000A\000f\000t\000e\000r)
+(\376\377\000T\000h\000e\000\040\000c\000o\000m\000m\000a\000n\000d\000\040\000\134\000S\000u\000b\000M\000a\000t\000r\000i\000x\000\040\000i\000n\000\040\000t\000h\000e\000\040\000\134\000C\000o\000d\000e\000A\000f\000t\000e\000r\000\040\000\050\000a\000n\000d\000\040\000t\000h\000e\000\040\000\134\000C\000o\000d\000e\000B\000e\000f\000o\000r\000e\000\051)
endobj
180 0 obj
-<< /S /GoTo /D (subsection.12.4) >>
+<< /S /GoTo /D (subsection.12.3) >>
endobj
183 0 obj
-(\376\377\000T\000h\000e\000\040\000c\000o\000m\000m\000a\000n\000d\000\040\000\134\000T\000i\000k\000z\000E\000v\000e\000r\000y\000C\000e\000l\000l\000\040\000i\000n\000\040\000t\000h\000e\000\040\000\134\000C\000o\000d\000e\000A\000f\000t\000e\000r)
+(\376\377\000T\000h\000e\000\040\000c\000o\000m\000m\000a\000n\000d\000s\000\040\000\134\000O\000v\000e\000r\000B\000r\000a\000c\000e\000\040\000a\000n\000d\000\040\000\134\000U\000n\000d\000e\000r\000B\000r\000a\000c\000e\000\040\000i\000n\000\040\000t\000h\000e\000\040\000\134\000C\000o\000d\000e\000A\000f\000t\000e\000r)
endobj
184 0 obj
-<< /S /GoTo /D (section.13) >>
+<< /S /GoTo /D (subsection.12.4) >>
endobj
187 0 obj
-(\376\377\000C\000a\000p\000t\000i\000o\000n\000s\000\040\000a\000n\000d\000\040\000n\000o\000t\000e\000s\000\040\000i\000n\000\040\000t\000h\000e\000\040\000t\000a\000b\000u\000l\000a\000r\000s)
+(\376\377\000T\000h\000e\000\040\000c\000o\000m\000m\000a\000n\000d\000\040\000\134\000T\000i\000k\000z\000E\000v\000e\000r\000y\000C\000e\000l\000l\000\040\000i\000n\000\040\000t\000h\000e\000\040\000\134\000C\000o\000d\000e\000A\000f\000t\000e\000r)
endobj
188 0 obj
-<< /S /GoTo /D (subsection.13.1) >>
+<< /S /GoTo /D (section.13) >>
endobj
191 0 obj
-(\376\377\000C\000a\000p\000t\000i\000o\000n\000\040\000o\000f\000\040\000a\000\040\000t\000a\000b\000u\000l\000a\000r)
+(\376\377\000C\000a\000p\000t\000i\000o\000n\000s\000\040\000a\000n\000d\000\040\000n\000o\000t\000e\000s\000\040\000i\000n\000\040\000t\000h\000e\000\040\000t\000a\000b\000u\000l\000a\000r\000s)
endobj
192 0 obj
-<< /S /GoTo /D (subsection.13.2) >>
+<< /S /GoTo /D (subsection.13.1) >>
endobj
195 0 obj
-(\376\377\000T\000h\000e\000\040\000f\000o\000o\000t\000n\000o\000t\000e\000s)
+(\376\377\000C\000a\000p\000t\000i\000o\000n\000\040\000o\000f\000\040\000a\000\040\000t\000a\000b\000u\000l\000a\000r)
endobj
196 0 obj
-<< /S /GoTo /D (subsection.13.3) >>
+<< /S /GoTo /D (subsection.13.2) >>
endobj
199 0 obj
-(\376\377\000T\000h\000e\000\040\000n\000o\000t\000e\000s\000\040\000o\000f\000\040\000t\000a\000b\000u\000l\000a\000r)
+(\376\377\000T\000h\000e\000\040\000f\000o\000o\000t\000n\000o\000t\000e\000s)
endobj
200 0 obj
-<< /S /GoTo /D (subsection.13.4) >>
+<< /S /GoTo /D (subsection.13.3) >>
endobj
203 0 obj
-(\376\377\000C\000u\000s\000t\000o\000m\000i\000s\000a\000t\000i\000o\000n\000\040\000o\000f\000\040\000t\000h\000e\000\040\000t\000a\000b\000u\000l\000a\000r\000\040\000n\000o\000t\000e\000s)
+(\376\377\000T\000h\000e\000\040\000n\000o\000t\000e\000s\000\040\000o\000f\000\040\000t\000a\000b\000u\000l\000a\000r)
endobj
204 0 obj
-<< /S /GoTo /D (subsection.13.5) >>
+<< /S /GoTo /D (subsection.13.4) >>
endobj
207 0 obj
-(\376\377\000U\000s\000e\000\040\000o\000f\000\040\000\173\000N\000i\000c\000e\000T\000a\000b\000u\000l\000a\000r\000\175\000\040\000w\000i\000t\000h\000\040\000t\000h\000r\000e\000e\000p\000a\000r\000t\000t\000a\000b\000l\000e)
+(\376\377\000C\000u\000s\000t\000o\000m\000i\000s\000a\000t\000i\000o\000n\000\040\000o\000f\000\040\000t\000h\000e\000\040\000t\000a\000b\000u\000l\000a\000r\000\040\000n\000o\000t\000e\000s)
endobj
208 0 obj
-<< /S /GoTo /D (section.14) >>
+<< /S /GoTo /D (subsection.13.5) >>
endobj
211 0 obj
-(\376\377\000O\000t\000h\000e\000r\000\040\000f\000e\000a\000t\000u\000r\000e\000s)
+(\376\377\000U\000s\000e\000\040\000o\000f\000\040\000\173\000N\000i\000c\000e\000T\000a\000b\000u\000l\000a\000r\000\175\000\040\000w\000i\000t\000h\000\040\000t\000h\000r\000e\000e\000p\000a\000r\000t\000t\000a\000b\000l\000e)
endobj
212 0 obj
-<< /S /GoTo /D (subsection.14.1) >>
+<< /S /GoTo /D (section.14) >>
endobj
215 0 obj
-(\376\377\000T\000h\000e\000\040\000k\000e\000y\000\040\000r\000o\000u\000n\000d\000e\000d\000-\000c\000o\000r\000n\000e\000r\000s)
+(\376\377\000O\000t\000h\000e\000r\000\040\000f\000e\000a\000t\000u\000r\000e\000s)
endobj
216 0 obj
-<< /S /GoTo /D (subsection.14.2) >>
+<< /S /GoTo /D (subsection.14.1) >>
endobj
219 0 obj
-(\376\377\000C\000o\000m\000m\000a\000n\000d\000\040\000\134\000S\000h\000o\000w\000C\000e\000l\000l\000N\000a\000m\000e\000s)
+(\376\377\000T\000h\000e\000\040\000k\000e\000y\000\040\000r\000o\000u\000n\000d\000e\000d\000-\000c\000o\000r\000n\000e\000r\000s)
endobj
220 0 obj
-<< /S /GoTo /D (subsection.14.3) >>
+<< /S /GoTo /D (subsection.14.2) >>
endobj
223 0 obj
-(\376\377\000U\000s\000e\000\040\000o\000f\000\040\000t\000h\000e\000\040\000c\000o\000l\000u\000m\000n\000\040\000t\000y\000p\000e\000\040\000S\000\040\000o\000f\000\040\000s\000i\000u\000n\000i\000t\000x)
+(\376\377\000C\000o\000m\000m\000a\000n\000d\000\040\000\134\000S\000h\000o\000w\000C\000e\000l\000l\000N\000a\000m\000e\000s)
endobj
224 0 obj
-<< /S /GoTo /D (subsection.14.4) >>
+<< /S /GoTo /D (subsection.14.3) >>
endobj
227 0 obj
-(\376\377\000D\000e\000f\000a\000u\000l\000t\000\040\000c\000o\000l\000u\000m\000n\000\040\000t\000y\000p\000e\000\040\000i\000n\000\040\000\173\000N\000i\000c\000e\000M\000a\000t\000r\000i\000x\000\175)
+(\376\377\000U\000s\000e\000\040\000o\000f\000\040\000t\000h\000e\000\040\000c\000o\000l\000u\000m\000n\000\040\000t\000y\000p\000e\000\040\000S\000\040\000o\000f\000\040\000s\000i\000u\000n\000i\000t\000x)
endobj
228 0 obj
-<< /S /GoTo /D (subsection.14.5) >>
+<< /S /GoTo /D (subsection.14.4) >>
endobj
231 0 obj
-(\376\377\000T\000h\000e\000\040\000c\000o\000m\000m\000a\000n\000d\000\040\000\134\000r\000o\000t\000a\000t\000e)
+(\376\377\000D\000e\000f\000a\000u\000l\000t\000\040\000c\000o\000l\000u\000m\000n\000\040\000t\000y\000p\000e\000\040\000i\000n\000\040\000\173\000N\000i\000c\000e\000M\000a\000t\000r\000i\000x\000\175)
endobj
232 0 obj
-<< /S /GoTo /D (subsection.14.6) >>
+<< /S /GoTo /D (subsection.14.5) >>
endobj
235 0 obj
-(\376\377\000T\000h\000e\000\040\000o\000p\000t\000i\000o\000n\000\040\000s\000m\000a\000l\000l)
+(\376\377\000T\000h\000e\000\040\000c\000o\000m\000m\000a\000n\000d\000\040\000\134\000r\000o\000t\000a\000t\000e)
endobj
236 0 obj
-<< /S /GoTo /D (subsection.14.7) >>
+<< /S /GoTo /D (subsection.14.6) >>
endobj
239 0 obj
-(\376\377\000T\000h\000e\000\040\000c\000o\000u\000n\000t\000e\000r\000s\000\040\000i\000R\000o\000w\000\040\000a\000n\000d\000\040\000j\000C\000o\000l)
+(\376\377\000T\000h\000e\000\040\000o\000p\000t\000i\000o\000n\000\040\000s\000m\000a\000l\000l)
endobj
240 0 obj
-<< /S /GoTo /D (subsection.14.8) >>
+<< /S /GoTo /D (subsection.14.7) >>
endobj
243 0 obj
-(\376\377\000T\000h\000e\000\040\000k\000e\000y\000\040\000l\000i\000g\000h\000t\000-\000s\000y\000n\000t\000a\000x)
+(\376\377\000T\000h\000e\000\040\000c\000o\000u\000n\000t\000e\000r\000s\000\040\000i\000R\000o\000w\000\040\000a\000n\000d\000\040\000j\000C\000o\000l)
endobj
244 0 obj
-<< /S /GoTo /D (subsection.14.9) >>
+<< /S /GoTo /D (subsection.14.8) >>
endobj
247 0 obj
-(\376\377\000C\000o\000l\000o\000r\000\040\000o\000f\000\040\000t\000h\000e\000\040\000d\000e\000l\000i\000m\000i\000t\000e\000r\000s)
+(\376\377\000T\000h\000e\000\040\000k\000e\000y\000\040\000l\000i\000g\000h\000t\000-\000s\000y\000n\000t\000a\000x)
endobj
248 0 obj
-<< /S /GoTo /D (subsection.14.10) >>
+<< /S /GoTo /D (subsection.14.9) >>
endobj
251 0 obj
-(\376\377\000T\000h\000e\000\040\000e\000n\000v\000i\000r\000o\000n\000m\000e\000n\000t\000\040\000\173\000N\000i\000c\000e\000A\000r\000r\000a\000y\000W\000i\000t\000h\000D\000e\000l\000i\000m\000s\000\175)
+(\376\377\000C\000o\000l\000o\000r\000\040\000o\000f\000\040\000t\000h\000e\000\040\000d\000e\000l\000i\000m\000i\000t\000e\000r\000s)
endobj
252 0 obj
-<< /S /GoTo /D (subsection.14.11) >>
+<< /S /GoTo /D (subsection.14.10) >>
endobj
255 0 obj
-(\376\377\000T\000h\000e\000\040\000c\000o\000m\000m\000a\000n\000d\000\040\000\134\000O\000n\000l\000y\000M\000a\000i\000n\000N\000i\000c\000e\000M\000a\000t\000r\000i\000x)
+(\376\377\000T\000h\000e\000\040\000e\000n\000v\000i\000r\000o\000n\000m\000e\000n\000t\000\040\000\173\000N\000i\000c\000e\000A\000r\000r\000a\000y\000W\000i\000t\000h\000D\000e\000l\000i\000m\000s\000\175)
endobj
256 0 obj
-<< /S /GoTo /D (section.15) >>
+<< /S /GoTo /D (subsection.14.11) >>
endobj
259 0 obj
-(\376\377\000U\000s\000e\000\040\000o\000f\000\040\000T\000i\000k\000Z\000\040\000w\000i\000t\000h\000\040\000n\000i\000c\000e\000m\000a\000t\000r\000i\000x)
+(\376\377\000T\000h\000e\000\040\000c\000o\000m\000m\000a\000n\000d\000\040\000\134\000O\000n\000l\000y\000M\000a\000i\000n\000N\000i\000c\000e\000M\000a\000t\000r\000i\000x)
endobj
260 0 obj
-<< /S /GoTo /D (subsection.15.1) >>
+<< /S /GoTo /D (section.15) >>
endobj
263 0 obj
-(\376\377\000T\000h\000e\000\040\000n\000o\000d\000e\000s\000\040\000c\000o\000r\000r\000e\000s\000p\000o\000n\000d\000i\000n\000g\000\040\000t\000o\000\040\000t\000h\000e\000\040\000c\000o\000n\000t\000e\000n\000t\000s\000\040\000o\000f\000\040\000t\000h\000e\000\040\000c\000e\000l\000l\000s)
+(\376\377\000U\000s\000e\000\040\000o\000f\000\040\000T\000i\000k\000Z\000\040\000w\000i\000t\000h\000\040\000n\000i\000c\000e\000m\000a\000t\000r\000i\000x)
endobj
264 0 obj
-<< /S /GoTo /D (subsubsection.15.1.1) >>
+<< /S /GoTo /D (subsection.15.1) >>
endobj
267 0 obj
-(\376\377\000T\000h\000e\000\040\000k\000e\000y\000\040\000p\000g\000f\000-\000n\000o\000d\000e\000-\000c\000o\000d\000e)
+(\376\377\000T\000h\000e\000\040\000n\000o\000d\000e\000s\000\040\000c\000o\000r\000r\000e\000s\000p\000o\000n\000d\000i\000n\000g\000\040\000t\000o\000\040\000t\000h\000e\000\040\000c\000o\000n\000t\000e\000n\000t\000s\000\040\000o\000f\000\040\000t\000h\000e\000\040\000c\000e\000l\000l\000s)
endobj
268 0 obj
-<< /S /GoTo /D (subsubsection.15.1.2) >>
+<< /S /GoTo /D (subsubsection.15.1.1) >>
endobj
271 0 obj
-(\376\377\000T\000h\000e\000\040\000c\000o\000l\000u\000m\000n\000s\000\040\000V\000\040\000o\000f\000\040\000v\000a\000r\000w\000i\000d\000t\000h)
+(\376\377\000T\000h\000e\000\040\000k\000e\000y\000\040\000p\000g\000f\000-\000n\000o\000d\000e\000-\000c\000o\000d\000e)
endobj
272 0 obj
-<< /S /GoTo /D (subsection.15.2) >>
+<< /S /GoTo /D (subsubsection.15.1.2) >>
endobj
275 0 obj
-(\376\377\000T\000h\000e\000\040\000m\000e\000d\000i\000u\000m\000\040\000n\000o\000d\000e\000s\000\040\000a\000n\000d\000\040\000t\000h\000e\000\040\000l\000a\000r\000g\000e\000\040\000n\000o\000d\000e\000s)
+(\376\377\000T\000h\000e\000\040\000c\000o\000l\000u\000m\000n\000s\000\040\000V\000\040\000o\000f\000\040\000v\000a\000r\000w\000i\000d\000t\000h)
endobj
276 0 obj
-<< /S /GoTo /D (subsection.15.3) >>
+<< /S /GoTo /D (subsection.15.2) >>
endobj
279 0 obj
-(\376\377\000T\000h\000e\000\040\000n\000o\000d\000e\000s\000\040\000w\000h\000i\000c\000h\000\040\000i\000n\000d\000i\000c\000a\000t\000e\000\040\000t\000h\000e\000\040\000p\000o\000s\000i\000t\000i\000o\000n\000\040\000o\000f\000\040\000t\000h\000e\000\040\000r\000u\000l\000e\000s)
+(\376\377\000T\000h\000e\000\040\000m\000e\000d\000i\000u\000m\000\040\000n\000o\000d\000e\000s\000\040\000a\000n\000d\000\040\000t\000h\000e\000\040\000l\000a\000r\000g\000e\000\040\000n\000o\000d\000e\000s)
endobj
280 0 obj
-<< /S /GoTo /D (subsection.15.4) >>
+<< /S /GoTo /D (subsection.15.3) >>
endobj
283 0 obj
-(\376\377\000T\000h\000e\000\040\000n\000o\000d\000e\000s\000\040\000c\000o\000r\000r\000e\000s\000p\000o\000n\000d\000i\000n\000g\000\040\000t\000o\000\040\000t\000h\000e\000\040\000c\000o\000m\000m\000a\000n\000d\000\040\000\134\000S\000u\000b\000M\000a\000t\000r\000i\000x)
+(\376\377\000T\000h\000e\000\040\000n\000o\000d\000e\000s\000\040\000w\000h\000i\000c\000h\000\040\000i\000n\000d\000i\000c\000a\000t\000e\000\040\000t\000h\000e\000\040\000p\000o\000s\000i\000t\000i\000o\000n\000\040\000o\000f\000\040\000t\000h\000e\000\040\000r\000u\000l\000e\000s)
endobj
284 0 obj
-<< /S /GoTo /D (section.16) >>
+<< /S /GoTo /D (subsection.15.4) >>
endobj
287 0 obj
-(\376\377\000A\000P\000I\000\040\000f\000o\000r\000\040\000t\000h\000e\000\040\000d\000e\000v\000e\000l\000o\000p\000e\000r\000s)
+(\376\377\000T\000h\000e\000\040\000n\000o\000d\000e\000s\000\040\000c\000o\000r\000r\000e\000s\000p\000o\000n\000d\000i\000n\000g\000\040\000t\000o\000\040\000t\000h\000e\000\040\000c\000o\000m\000m\000a\000n\000d\000\040\000\134\000S\000u\000b\000M\000a\000t\000r\000i\000x)
endobj
288 0 obj
-<< /S /GoTo /D (section.17) >>
+<< /S /GoTo /D (section.16) >>
endobj
291 0 obj
-(\376\377\000T\000e\000c\000h\000n\000i\000c\000a\000l\000\040\000r\000e\000m\000a\000r\000k\000s)
+(\376\377\000A\000P\000I\000\040\000f\000o\000r\000\040\000t\000h\000e\000\040\000d\000e\000v\000e\000l\000o\000p\000e\000r\000s)
endobj
292 0 obj
-<< /S /GoTo /D (subsection.17.1) >>
+<< /S /GoTo /D (section.17) >>
endobj
295 0 obj
-(\376\377\000D\000i\000a\000g\000o\000n\000a\000l\000\040\000l\000i\000n\000e\000s)
+(\376\377\000T\000e\000c\000h\000n\000i\000c\000a\000l\000\040\000r\000e\000m\000a\000r\000k\000s)
endobj
296 0 obj
-<< /S /GoTo /D (subsection.17.2) >>
+<< /S /GoTo /D (subsection.17.1) >>
endobj
299 0 obj
-(\376\377\000T\000h\000e\000\040\000e\000m\000p\000t\000y\000\040\000c\000e\000l\000l\000s)
+(\376\377\000D\000i\000a\000g\000o\000n\000a\000l\000\040\000l\000i\000n\000e\000s)
endobj
300 0 obj
-<< /S /GoTo /D (subsection.17.3) >>
+<< /S /GoTo /D (subsection.17.2) >>
endobj
303 0 obj
-(\376\377\000T\000h\000e\000\040\000o\000p\000t\000i\000o\000n\000\040\000e\000x\000t\000e\000r\000i\000o\000r\000-\000a\000r\000r\000a\000y\000c\000o\000l\000s\000e\000p)
+(\376\377\000T\000h\000e\000\040\000e\000m\000p\000t\000y\000\040\000c\000e\000l\000l\000s)
endobj
304 0 obj
-<< /S /GoTo /D (subsection.17.4) >>
+<< /S /GoTo /D (subsection.17.3) >>
endobj
307 0 obj
-(\376\377\000I\000n\000c\000o\000m\000p\000a\000t\000i\000b\000i\000l\000i\000t\000i\000e\000s)
+(\376\377\000T\000h\000e\000\040\000o\000p\000t\000i\000o\000n\000\040\000e\000x\000t\000e\000r\000i\000o\000r\000-\000a\000r\000r\000a\000y\000c\000o\000l\000s\000e\000p)
endobj
308 0 obj
-<< /S /GoTo /D (section.18) >>
+<< /S /GoTo /D (subsection.17.4) >>
endobj
311 0 obj
-(\376\377\000E\000x\000a\000m\000p\000l\000e\000s)
+(\376\377\000I\000n\000c\000o\000m\000p\000a\000t\000i\000b\000i\000l\000i\000t\000i\000e\000s)
endobj
312 0 obj
-<< /S /GoTo /D (subsection.18.1) >>
+<< /S /GoTo /D (section.18) >>
endobj
315 0 obj
-(\376\377\000U\000t\000i\000l\000i\000s\000a\000t\000i\000o\000n\000\040\000o\000f\000\040\000t\000h\000e\000\040\000k\000e\000y\000\040\000'\000t\000i\000k\000z\000'\000\040\000o\000f\000\040\000t\000h\000e\000\040\000c\000o\000m\000m\000a\000n\000d\000\040\000\134\000B\000l\000o\000c\000k)
+(\376\377\000E\000x\000a\000m\000p\000l\000e\000s)
endobj
316 0 obj
-<< /S /GoTo /D (subsection.18.2) >>
+<< /S /GoTo /D (subsection.18.1) >>
endobj
319 0 obj
-(\376\377\000U\000s\000e\000\040\000w\000i\000t\000h\000\040\000t\000c\000o\000l\000o\000r\000b\000o\000x)
+(\376\377\000U\000t\000i\000l\000i\000s\000a\000t\000i\000o\000n\000\040\000o\000f\000\040\000t\000h\000e\000\040\000k\000e\000y\000\040\000'\000t\000i\000k\000z\000'\000\040\000o\000f\000\040\000t\000h\000e\000\040\000c\000o\000m\000m\000a\000n\000d\000\040\000\134\000B\000l\000o\000c\000k)
endobj
320 0 obj
-<< /S /GoTo /D (subsection.18.3) >>
+<< /S /GoTo /D (subsection.18.2) >>
endobj
323 0 obj
-(\376\377\000N\000o\000t\000e\000s\000\040\000i\000n\000\040\000t\000h\000e\000\040\000t\000a\000b\000u\000l\000a\000r\000s)
+(\376\377\000U\000s\000e\000\040\000w\000i\000t\000h\000\040\000t\000c\000o\000l\000o\000r\000b\000o\000x)
endobj
324 0 obj
-<< /S /GoTo /D (subsection.18.4) >>
+<< /S /GoTo /D (subsection.18.3) >>
endobj
327 0 obj
-(\376\377\000D\000o\000t\000t\000e\000d\000\040\000l\000i\000n\000e\000s)
+(\376\377\000N\000o\000t\000e\000s\000\040\000i\000n\000\040\000t\000h\000e\000\040\000t\000a\000b\000u\000l\000a\000r\000s)
endobj
328 0 obj
-<< /S /GoTo /D (subsection.18.5) >>
+<< /S /GoTo /D (subsection.18.4) >>
endobj
331 0 obj
-(\376\377\000D\000o\000t\000t\000e\000d\000\040\000l\000i\000n\000e\000s\000\040\000w\000h\000i\000c\000h\000\040\000a\000r\000e\000\040\000n\000o\000\040\000l\000o\000n\000g\000e\000r\000\040\000d\000o\000t\000t\000e\000d)
+(\376\377\000D\000o\000t\000t\000e\000d\000\040\000l\000i\000n\000e\000s)
endobj
332 0 obj
-<< /S /GoTo /D (subsection.18.6) >>
+<< /S /GoTo /D (subsection.18.5) >>
endobj
335 0 obj
-(\376\377\000D\000a\000s\000h\000e\000d\000\040\000r\000u\000l\000e\000s)
+(\376\377\000D\000o\000t\000t\000e\000d\000\040\000l\000i\000n\000e\000s\000\040\000w\000h\000i\000c\000h\000\040\000a\000r\000e\000\040\000n\000o\000\040\000l\000o\000n\000g\000e\000r\000\040\000d\000o\000t\000t\000e\000d)
endobj
336 0 obj
-<< /S /GoTo /D (subsection.18.7) >>
+<< /S /GoTo /D (subsection.18.6) >>
endobj
339 0 obj
-(\376\377\000S\000t\000a\000c\000k\000s\000\040\000o\000f\000\040\000m\000a\000t\000r\000i\000c\000e\000s)
+(\376\377\000D\000a\000s\000h\000e\000d\000\040\000r\000u\000l\000e\000s)
endobj
340 0 obj
-<< /S /GoTo /D (subsection.18.8) >>
+<< /S /GoTo /D (subsection.18.7) >>
endobj
343 0 obj
-(\376\377\000H\000o\000w\000\040\000t\000o\000\040\000h\000i\000g\000h\000l\000i\000g\000h\000t\000\040\000c\000e\000l\000l\000s\000\040\000o\000f\000\040\000a\000\040\000m\000a\000t\000r\000i\000x)
+(\376\377\000S\000t\000a\000c\000k\000s\000\040\000o\000f\000\040\000m\000a\000t\000r\000i\000c\000e\000s)
endobj
344 0 obj
-<< /S /GoTo /D (subsection.18.9) >>
+<< /S /GoTo /D (subsection.18.8) >>
endobj
347 0 obj
-(\376\377\000U\000t\000i\000l\000i\000s\000a\000t\000i\000o\000n\000\040\000o\000f\000\040\000\134\000S\000u\000b\000M\000a\000t\000r\000i\000x\000\040\000i\000n\000\040\000t\000h\000e\000\040\000\134\000C\000o\000d\000e\000B\000e\000f\000o\000r\000e)
+(\376\377\000H\000o\000w\000\040\000t\000o\000\040\000h\000i\000g\000h\000l\000i\000g\000h\000t\000\040\000c\000e\000l\000l\000s\000\040\000o\000f\000\040\000a\000\040\000m\000a\000t\000r\000i\000x)
endobj
348 0 obj
-<< /S /GoTo /D (subsection.18.10) >>
+<< /S /GoTo /D (subsection.18.9) >>
endobj
351 0 obj
-(\376\377\000A\000\040\000t\000r\000i\000a\000n\000g\000u\000l\000a\000r\000\040\000t\000a\000b\000u\000l\000a\000r)
+(\376\377\000U\000t\000i\000l\000i\000s\000a\000t\000i\000o\000n\000\040\000o\000f\000\040\000\134\000S\000u\000b\000M\000a\000t\000r\000i\000x\000\040\000i\000n\000\040\000t\000h\000e\000\040\000\134\000C\000o\000d\000e\000B\000e\000f\000o\000r\000e)
endobj
352 0 obj
-<< /S /GoTo /D (section.19) >>
+<< /S /GoTo /D (subsection.18.10) >>
endobj
355 0 obj
-(\376\377\000H\000i\000s\000t\000o\000r\000y)
+(\376\377\000A\000\040\000t\000r\000i\000a\000n\000g\000u\000l\000a\000r\000\040\000t\000a\000b\000u\000l\000a\000r)
endobj
356 0 obj
-<< /S /GoTo /D (section*.2) >>
+<< /S /GoTo /D (section.19) >>
endobj
359 0 obj
-(\376\377\000I\000n\000d\000e\000x)
+(\376\377\000H\000i\000s\000t\000o\000r\000y)
endobj
360 0 obj
-<< /S /GoTo /D [ 361 0 R /Fit ] >>
+<< /S /GoTo /D (section*.2) >>
+endobj
+363 0 obj
+(\376\377\000I\000n\000d\000e\000x)
+
endobj
364 0 obj
-<< /Filter /FlateDecode /Length 9998 >>
-stream
-x}I%=;Jpq_**} }hLi#etEf-sȪ -I3#N7/̃Omټ9C 17{s6mٔ[Xn?׏Ƥb ܧoPb0h{Rݿ6PI>TMrNDk*3o9 ٭:\~"~}m˔7_ $o%%y'?v[MA3KD&CO460e=EX@4J}T\Rt[L7 ~
-?Ӑ4Xe1BFmXC|*cf_]]t9ӡhfS^-xjHB
-̟E2[yHs$> ?,y>R.kX*<u&hyQ3|2$.͎^@4nfzF-溅Gs8ݜ$z6JpiSI}o p;Sl!4wZиoD B*B|=#Scs
--AyFc AFud Wa[]ruRJE[2rH,R%ԸAe)ru ˟R\~~0K-Z~
-m
-f̔e3ź3w٢:fOFZX62gW!#' s85g8x
-_Ì؟GKaxj0c|5g㰍1z .qrokqL` -O,lN/9Z}ar=''w=eݪf]1
-2#mpH*Am#Wl}J3K륶D5VSV>TzDm¨ q;ə# R@n-6H3<czIwel5<, )H6(`ڑDJ=LJei3>3k{ɴ}ȥP5F/bAQF ; VCXy ;OHAD[XA# Rm0O@Alr-P vsH{{ bRMSHzi{wxNe<0
-]ubk&qL1O=
-{>?K-R͖habтڦphY[))h3CPFe诬D4DՕrQJHnG$jqn``Sʼnj{e Lh(%BW6aa6YqX \~&Mh(F1pzҖc0f*+& ,- ֽQL!*@Ǡa Tj Z)fXQEv`'q ;VC $ f^8Ezgx`SXVoKaTn;xO+b5i`rqe :\W"Fg}ŤDz\:<i' b~Ƚ;4*_X`D@`@Iƕ:t+mJ4:
- mDN6i6rF$ @u$R<Y-Wb0y<E¿K
-bsXͳF0aH@E T[Mx"|4.G$`M h| kp0AFD kl hĢVmH^i$ ld}$@=dˀ$Bvs.QyKUB@䘂慂 WlJ^"
-i z>4(_0F|FMKi0}SA&c6dBĴP3|9paBJGC"1.(?FVIa0*HUF!
-<dNe+Zkh6&53 4 >kF<_crDz[[E\oJ\Y%; dFQBc[Chj
-i
-+\j"BiR=H-Ɍw{4y
-U#!z1d$;25ƶg!
-N PFG SqXI&=IፈcEG ԌI[GT(;+3x0.\p 6J`X"m&laq2띰!OFv8J&à'ER1ޝ
-c*%yNք<"nE(̙*NR9JQHhHd.tY.fB2N?"
-voDqm;ȟiqLDbxX) E%oXj52l_$jpQ/TϨ
-d%
-iBFQNZ 38K(ϺrKaaz'zyPJ&zFBE #
-) _$&HSA31[CѵBWbPR0Bb:EcwXj'p>aT i;o׊f A|:`KH$ vwD,j58bfd߆kI301Q|AyL *%I4:ai1aQ<VWךf€S }Ab`*J40}i/kոq¦v.E͌
-*E%D/'JaސȽs᳎Q {ר-vT qAj+ebUMDj`5gJ$#kU"{Bh?<pY6܄@"
-V`8iZO4&g"RXbjH8ZPk S u[5M\X&D&Kdv 2TX?$q\,gjzNQBӜh
-(M&Dx'J(ΈrZg((=pk(SeG]5[X0&D&pLd
-~=~6j߯oO'W+T^8_ZUPh GEO*["_qy7Oe 'O͖i}W _ ;/6X W19؉XOG`Yba<^~kuu:@9E`w2_2/`Ӗ
-
-Uz؉O> _<e+OBaN-8s]2s=ɨ{ָ-
-[&0bM'Ccs.<'FzhZ#]z1[$K@sbikPƘUM0xupfI˫MPr+%L4LJEԝ8~%V⯼2Z@yX(Wnr1&!οr gk
- >Apm}t}P[m'k8St>zhZ]z1M_Ol'~Z?}Aû.6ben,#Lt_$ /UlQ :Kf]CĘM5 (s\`a'KpPkF7htlj]3t@~y~98EP=Eu12^Q酸 4(`0~|@gfi<O~XSZ_MվV}}ّ;J}_F;|.[X9G͵aGp-4^%5F{=Tv |{i*Lu[7cT`GnwaԎޝS/{ӻ ˥s
- o/m1=
-ùNBO>ڳ24SdT aˣ,,'&nѹsd6VkF m~U KZVSV]{ v.
-(f}ڸ\sG@qL*Хٚ6>bݥnW5u(ϔm74@Td#e!ɨ2eJp 1!*ަ 绦 giIm@uS 7\&骪=,W fZ(cu.Y;G* W}͛և9Uze{?渂ej;5 88{𛩋L`,lFR>h2I ߂;
-~px#y!s2" !<Xp _K~א,>f[ŻVb)<UBU9HJ{[HT$^\]~S)w"= S: e%z߂68z=qE{%4[&UkF{$lڂo4;%uuσyfK!B1d'~m ʳE b>9tr~E H5X|s>z ?I5R}.aR]ضӰJչjts[hdӭ/tLIi Ч\R~itce
-YZzF`HMޅ-gx(Ë/
-.KMy| zD&Ņ% SIlO&j<]=}#fx؀Ow!򃪑Wic x|.Yxz]|ޏݞ{=icbb7`:%FzXjJˑN\zqx.ao-q!CQ
-̫˾^/xneLݏSc82IPABڱ\ӸNx @]4c~qx?{<EbeX`YM (夒8N>>V>|<oNs>qD:<<;eUM)ұq!W̽Bo?(̴ڽ
+<< /S /GoTo /D [ 365 0 R /Fit ] >>
+endobj
+368 0 obj
+<< /Filter /FlateDecode /Length 10005 >>
+stream
+x}K%7޿,݋1(t]..j=7DTD'lbeg2)>>I$P(o7sw_ϟlټ9Cwbnlڲ)l+~I /8`%=m\˿|ěV% 9".2Ugr=[tHѹl1.n!EښM/S|7y˃XQ]Mog4@/TMr>mr,3b w
+Mc):^~LHHFWoltIeoKE޶|bbwtj 3e)uKgL7H-w}m [-R6D#ِc2K
+ !>[Ye|[&jlYcB:L].^F3m%>7;Wz9\;vr@B.
+=Z/DBD\h=t^%pB0X̸!o,_Clp?؈i~{ 0XKW5y|{=͸t35w~C|'('b+9KHABx:;qSRa` rq5Ys (3@4g$dWo U%p9lFn]Of/@2i)ƒ!í' NWT)OZtSܯ|>-|cbcz)$1`l:
+ Đ->l+ QD!!cuP
+Eh$nj7#8|7[0[Dj{a (4SraBWZTq %l:I[=\8-`i*+& ,*-d޲I!
+ܱJaaF۹s6Z .(4H8fqjx
+nz^"ixQAv9,JvXMY R=a!Ru!i]d+&!gh(*${wXIT $,:hgORJ2Tq+mQ)hdfڈ$fשLid#gXvo
+s
+=Lɚ)"NG&pA^Ar
+vIK[\19q_Iπe0˜aWGf,e2mqzWwc 9PtK'IF\Iё *x+l"K\[:
+_|JM*1bW5RTȐ+#RNQ3N2NØ="Q,`#=^NP,t {) X9q@Tf F6pzBS)`fl`JQ"xfTe2q("q;WW`N0GRGd3D~8&#fhe2( q;wb ϐ9P':\W"&ð")D*@, eV'j oym5wR'1sbH N 1Eln IQBGC"&Ƣ ;HѰlZ}wOQbe<̳IMϽa 69H0(t!m(U24v$Ϣ qtCh7\EJH.t
+4HnRмPO QD!!AO' Q8&4s7&#8
+Ə$Us7wƌs~0(yS-@skkh]Ijfh|x*Mmmsm q=#gHC0p2J熸*rJDcwDW @ 5v$O, 7q1c'm'M˛Hz< I[HW
+VC.Z6S0
+ux8
+OA#C_%ߟSbgN:ACKBْo"i]hR`R|HJ dd%
+zx B,
+ TOҒp2 /@nx|H0BZ)m6JLqԫ!$9FVW !1J,[֞P3@JTr0jlHR$Il$uϬWb2p/
+ u Rk<TXY`nj$br2I#NZ4OMH[I&
+&+$*%0ld~ i{WZB
+6Ȁc#@*d ^TƄ$F#($8JLqԫJKE*RΨ76;JMYgbojPaI#^O
+i 3
+H_Ge 97@>IT\LA33Mr2I#7}f6P2k$muj!R_Ϩø( P|46J`f,yI6H
+A%o8vyUؐ}'\#i;o !s 'ER1^
+T('K󲱝 Iy\ERPOR<p0;KI\aD!! Нpa5
+GvtD)R
+x0ʞxEFx1 ֌ JO)n0JLqV"3l38bS$u:e}i4MW5_,KaDe"Y-l)wH@&QXAQ C7i%l%YH91TgNOi`YF(*+vH *%N!$7
+!(T3cR/8_F"F1NkABeWbRq
+D0R"MFP;S<*p}(|vޮa&f 8Tq$K>Z 'oC۵0DLd_fS)D0R"MFP3S{<*h}Ȟ akM0:}b@3K!l$0}aiߩU2c6אt)j4O
+U a*42TFUIRfJcZʹO2Nߦ۵Q0lBځ}J!(ALI](qaӘQ5]
+h +;D"Zɳ^N$@/
+V/QbmLPI@%cYBdV ; uZ #Fmb R^)W5E4JgBD@h` C%+;D"Bh?<pY6BWaW0j:GMkE`I2y"֮bCU:D"hBfwïQ4
+@5jb&1T<"BJʬs\KDG&ZAP2 8J8{!洢 $bTpVJFv~i}íQ3ʎ 5jba&1R<"'
+혤pXq
+8?؉?_E_ǡPgcWWr*Ǔ+WUA>W[7>nQ' {s%ǫ#n/B˻y/<)xjNk:M|`nyǷwLli܃>OOǕ_[yd@Qyμ_NW{. 6mɹv| _FLWHx{7Os}~>[!S`z&VO^ڂm+MP7A;qW([}x_:Lx
+shcEPƆ&L%?&Xvj˷{jO
+X>B^EkM
+HYa{+q$pV@OݝKSRmDfy)d|e+&?N
+OOҳIU˥2]O!x!Ռ. ?]L{ )|؆Vz
+e-(P7_>0~UK^FGTfb*C磳J4Qd0z86.]Lx+ִGۀHE,H--/iYd8d񈽮|<H%2| `brCPp:YXEOѬH
+?.c36ZĿ,z2_qE=m己]š
+$:4ǣv1b3HmeDT ΅}e 7|f@C<.gcG|ԍ|4j)%õ=HH
+e. [vNdRU N R mw+%`na>e\Năo|t">=Fo z#sƖ2gR͝FIw)Oq/A<Uy
+<4R OcM-Ai(OWvvZYK'Q"HWuw4n.yo#d^{ژEq VErӖ|X;&Dgtz[vTP=
+<> V-( F?īx).ζn5=/ a^ӣ|cǔ5;X8,$wy#6|D,h>e9`GOMƠ_O{X٭XrnԀ3P231g+%n⤅<%7>{('wHgGc,8NJgl\sȡ-`ڣsZD
endstream
endobj
-361 0 obj
-<< /Type /Page /Contents 364 0 R /Resources 363 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 394 0 R /Annots 395 0 R >>
+365 0 obj
+<< /Type /Page /Contents 368 0 R /Resources 367 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 398 0 R /Annots 399 0 R >>
endobj
-395 0 obj
-[ 362 0 R ]
+399 0 obj
+[ 366 0 R ]
endobj
-362 0 obj
+366 0 obj
<< /Type /Annot /Border[0 0 1]/H/I/C[0 1 1] /Rect [ 78.374 76.659 499.819 88.116 ]
/Subtype/Link/A<</Type/Action/S/URI/URI(https:www.tug.org/svn/texlive/trunk/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty)>>
>>
endobj
-365 0 obj
-<< /D [ 361 0 R /XYZ 78.37 808.885 null ] >>
+369 0 obj
+<< /D [ 365 0 R /XYZ 78.37 808.885 null ] >>
endobj
-366 0 obj
-<< /D [ 361 0 R /XYZ 79.37 771.024 null ] >>
+370 0 obj
+<< /D [ 365 0 R /XYZ 79.37 771.024 null ] >>
endobj
-363 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F16 367 0 R /F17 368 0 R /F30 369 0 R /F39 370 0 R /F48 371 0 R /F47 372 0 R /F49 373 0 R /F50 374 0 R /F29 375 0 R /F52 376 0 R /F41 377 0 R /F42 378 0 R /F23 379 0 R /F51 380 0 R /F15 381 0 R /F20 382 0 R /F55 383 0 R /F56 384 0 R /F57 385 0 R /F58 386 0 R /F65 387 0 R /F66 388 0 R /F67 389 0 R /F45 390 0 R /F40 391 0 R /F46 392 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
+367 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F16 371 0 R /F17 372 0 R /F30 373 0 R /F39 374 0 R /F48 375 0 R /F47 376 0 R /F49 377 0 R /F50 378 0 R /F29 379 0 R /F52 380 0 R /F41 381 0 R /F42 382 0 R /F23 383 0 R /F51 384 0 R /F15 385 0 R /F20 386 0 R /F55 387 0 R /F56 388 0 R /F57 389 0 R /F58 390 0 R /F65 391 0 R /F66 392 0 R /F67 393 0 R /F45 394 0 R /F40 395 0 R /F46 396 0 R /F59 397 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-400 0 obj
-<< /Filter /FlateDecode /Length 3881 >>
+404 0 obj
+<< /Filter /FlateDecode /Length 3882 >>
stream
xɎ\>_ѹɇ nInOC
ۈ}-mF? ,i;Q2v$i&Òr-{ٶbD׉1dydf"<S㌹?l2VHAfVZo,=e60'l]<LK~
@@ -709,1420 +724,1510 @@ z:flіrG
BS90bX3p@z)F'QTm>?_BfF(^]zT)6V7k,_7jdbKT{Rz꼜cRAbu I=!PFi
R.cU1Cg/(whw*n_Ѕ<ўjͷ֓Tl3XQ,3wbZQVv0&ur<ygjV0iuQOFO\>^*%<0̇#u>{{ɪ%.bQڔ[Gu?0bblg&(J͏γe^JGJR0qp>헒iSc[:>dcuzUךR>S<W+L/$Be$_ϗpK\^\j`_\^)?I2f`]i%B[IpWa1kU$P
U͙hYgVO*4J˙VZJ֜_Fua[dq̠uYS:-> ݗWYDyՓ˫aB^0w+ o?F1vZzM?^jS)RKe^V[os~YLg-*eN *M*^ujZY<ꂁ?-"خ0stL!Y.bo_-[cֽ_z``29ik-}o!yaټwImDbxA,RR6&c
-WBIRM^2Ukk[w\)6VyNZ}oScJO pNЛM(jZ?-X+79kg]=TZ ڭ'.aX-S$X0Ls7BC]idBkhߕmq_.tKb*NR+ΤonB+J$Vn1*SGF-OVhL&<:SX'<RQPK|B.A4f;0:cd<`2͎A:ODJ* hjM]PMS D8"pJ5oy1iUl⧱!oَ_DN05h>́u#o7G QbefApZ.XVic`!K#`;,,3,k%sIs@
+WBIRM^2Ukk[w\)6VyNZ}oScJO pNЛM(jZ?-X+79kg]=TZ ڭ'.aX-S$X0Ls7BC]idBkhߕmq_.tKb*NR+ΤonB+J$Vn1*SGF-OVhL&<:SX'<RQPK|B.A4f;0:y.l*ءLccNQE
+qST}{Sǔ<B8G R͛A^LZiil[#'d%LzM,msE=p݈5BTmXY: U+XHXN7 nK`ɜhR
+ʹ5~~Zn{G! { {ZZ^({&"g1/&U
endstream
endobj
-399 0 obj
-<< /Type /Page /Contents 400 0 R /Resources 398 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 394 0 R /Annots 405 0 R >>
+403 0 obj
+<< /Type /Page /Contents 404 0 R /Resources 402 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 398 0 R /Annots 409 0 R >>
endobj
-405 0 obj
-[ 396 0 R ]
+409 0 obj
+[ 400 0 R ]
endobj
-396 0 obj
+400 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 246.081 100.065 256.538 111.522 ]/A << /S /GoTo /D (subsection.8.2) >> >>
endobj
-401 0 obj
-<< /D [ 399 0 R /XYZ 78.37 808.885 null ] >>
+405 0 obj
+<< /D [ 403 0 R /XYZ 78.37 808.885 null ] >>
endobj
5 0 obj
-<< /D [ 399 0 R /XYZ 79.37 771.024 null ] >>
+<< /D [ 403 0 R /XYZ 79.37 771.024 null ] >>
endobj
9 0 obj
-<< /D [ 399 0 R /XYZ 79.37 428.769 null ] >>
+<< /D [ 403 0 R /XYZ 79.37 428.769 null ] >>
endobj
-398 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 402 0 R /F15 381 0 R /F55 383 0 R /F56 384 0 R /F58 386 0 R /F66 388 0 R /F70 403 0 R /F65 387 0 R /F29 375 0 R /F51 380 0 R /F26 404 0 R /F20 382 0 R /F45 390 0 R /F40 391 0 R /F59 393 0 R /F46 392 0 R >> /ProcSet [ /PDF /Text ] >>
+402 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 406 0 R /F15 385 0 R /F55 387 0 R /F56 388 0 R /F58 390 0 R /F66 392 0 R /F70 407 0 R /F65 391 0 R /F29 379 0 R /F51 384 0 R /F26 408 0 R /F20 386 0 R /F45 394 0 R /F40 395 0 R /F59 397 0 R /F46 396 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-408 0 obj
-<< /Filter /FlateDecode /Length 4404 >>
+412 0 obj
+<< /Filter /FlateDecode /Length 4403 >>
stream
x]ͯ أ`\8/@{2[S:HERߟ3g?/;KR$E8zDž^~|EW=1y*P@/-#TOP*R/r)*1
J
-Gx HQddt4OQ{-ыH~Qj$EA-R֊s~Z? {5ҁǫ*Ӿ/^VO<㟰ۤuP}E>^Б[ u7%$:Y]7 jzGO*v|@WM-vgi`R]|SzWZI'e/L.RNujKkxfm@mx{-go(+a
-yLʜ[Z)C) c8\D13 .<
-`E(,ˆR|n؃q~o4)ӷLoDL5@ez ֽ, Na\q IJrqV$ޅDCFTԡaNB7o">L[8BG<'%B, T(76仁qrCyojjbҾ̾sMJYHmo`a09H7?n SXN57L/_=L=ony7vw'+%g*4_\F 㽊AT6! U@T;(LcEp3GZ^9 2k$iCHG'wg-}gTMa3)OZ My=}3YU? z/8#?yۯ}R)0
-ٲPaLT|zu.~p|x8FT`ʧ!_ojUPq8(q6 xqBa*+2c Lw'59F
-˧Kծ \iڢ?
-G -2/>Ŵ,aIZzXy:A:v`jaZ߰=JeYb8f<y
--7
-)Xz9kCI |/2Z9.&cJP?h (mo^#)0@c^%cفvcU <&8[IA PZޭ6l‚'b%@-@%Z'uxQN-l#] %¢U+!Ma4":wDoԐ8c0=,ǘ)^h-8~ LIq Q :q<M.3 ‹A4w86iu?Õxz+Z"u*R7gм0%drMԭ +ՍqŀCjv&%ow[ڧPY/uKwZj-5Z(64whEL
-
- zXy*Vi8Dag0fߧEh5>9h;9'^s\`}N҂BGkfz,.:g.zfUP"=hK(dKһ)\JԳm(c\Ŭ&vV;JZr4Yj0I +J׆D%XM7 JO`'CXҦWU)-5J7ݠTӲC^r 9ژJ51Zh;DZVo__anC}Di1>&c7반JK}m3S eX]?t&mkԭ(+SEU]x;~96%>f=nS쫓/$1jOyvl.^ =[WueuYekd)o(Mmh+MGU?(;w*+~J* g
-8OH#ey"!
-Z=^!H347/`r9pI Wap8
- ug)@ O5du<cept ZTuFY  p)/"r L
-*B+.ܨ{s%QQ΍uyq!*tyq!*|^^t@$op
-ဗGPB)Tӎ9{Ęb#JFk 
-"}φ?X6p\X6ѝXvfXŲ<y.X=#e#;nNX=#e#;6l&9.7|lLkȴ'4οgd_)Gԯ?@O79~(Fdb>P^~Va/|A2>>^|؂dƌm/?@RK`.B#|Љ+ʫ$r!ENq%ZwHG#<}ˇcN 3bu'TM8fN1f0 ƔW&qgkSM(Swosk1i9b.; !vY74ct^}P ST{aT 04o᎒
-F-X|߁OߪلE{*x|D:xN6;.bZU kϦbVe^$cT P$E#u}ܟV1
+Gx HQddt4OQ{-ыH~Qj$EA-R֊s~Z? {5ҁǫ*Ӿ/^VO<㟰ۤuP}E>^Б[ u7%$:Y]7 jzGO*v|@WM-vgi`R]|Sw_uݓ&
+Fo):5Y3ʈ|6U<h7U0
+v7A8YDXk}7|A”[wS]DS ^b=m`ȅx'0B8ŅܤQ 8
+f`GBSh"͡iA*tn0Go7tTu
+|O-Qo!#Xe֛~O@8^Y<7D55W1i_Qf߹&,M6UH7~Cy0 0Mi7[)r,pT.ӋeO7S*ěvͦJiY?/?Qxlվ nB 
+SXQ/#̑W`Ʃ@F8}+EYFub+rgl̾oʓ5|SD`LfƏ) $N51q1<w߄t" B,,?|,T$0/^~Au~x05˫_/>\251^+N;&iET\E?
+c܃ ^PLXee!fIM#6|D++WO@2O!Vslv  k{.Xid^O?/ϟ. ~e Lu˫u1m=KexXmҺVVNP=Zg7lRD:6ABy~,"
+VOkԣ8
+֠^}pZxzrPR"ߋ VKɘTå2ZJ<H%L<PW $rXvyկ.n7`
+W
+:4 ]Y /jK͚a
+JV$eIíjlv7 kx01l7/
+lJE$X;=W1 E >Vp'M֪)LRŠҵ!9{I.V͂$)UUzJ 5MťҬ: "w@7&մаW\*fC*u|N6&RMjL4[{WذP_+bcz:,nR3pƒl_[5L@%nBoDV*]>IZ*u뾿ks;㔪cCqU_N8pɪϻYjf. IbޢC"E1|CUr]|]qmnf)Je#wJ|ӑi4ʎᝊJz)ƨy3
+\S{xNC\c殸
+b\Q|Jxd͜dĆ{Uoy7eKds{dGM\=#l& s%Ȏ]$9˸/ګW qYsvص`Ni)meD~alj "76lG;亂VzgL:8̓ X"a \1FU4@6pRPz 7L<
+iPʽ 7<\~TTx0sc!*eCx^t@$op
+?5$C; ~^t@$op
+ဗGw8QEDy|u
+ƴc޶1vXňQhp;嚯D} AQqgKgP$Xs@JGv@Y,9 'C; / |CL<(HK/z 78F=(G߳Dz2 ,<xt'7ly7-wl
+#ǭ*#Ӂ NخVՂ(ڳĥnW9X" 6) zCD_x,Uiw ,YŔ=dIBZaڔu͸雔Ύʳ0vp,:_h*$qpxwy#s
+v-DRmlI<G=XtG`#=Y%#>0 
endstream
endobj
-407 0 obj
-<< /Type /Page /Contents 408 0 R /Resources 406 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 394 0 R /Annots 416 0 R >>
+411 0 obj
+<< /Type /Page /Contents 412 0 R /Resources 410 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 398 0 R /Annots 420 0 R >>
endobj
-416 0 obj
-[ 397 0 R ]
+420 0 obj
+[ 401 0 R ]
endobj
-397 0 obj
+401 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 208.645 745.619 220.601 757.574 ]/A << /S /GoTo /D (section.7) >> >>
endobj
-409 0 obj
-<< /D [ 407 0 R /XYZ 78.37 808.885 null ] >>
+413 0 obj
+<< /D [ 411 0 R /XYZ 78.37 808.885 null ] >>
endobj
13 0 obj
-<< /D [ 407 0 R /XYZ 79.37 706.75 null ] >>
+<< /D [ 411 0 R /XYZ 79.37 706.75 null ] >>
endobj
-411 0 obj
-<< /D [ 407 0 R /XYZ 337.806 432.326 null ] >>
+415 0 obj
+<< /D [ 411 0 R /XYZ 337.806 432.326 null ] >>
endobj
-412 0 obj
-<< /D [ 407 0 R /XYZ 337.806 418.607 null ] >>
+416 0 obj
+<< /D [ 411 0 R /XYZ 337.806 418.607 null ] >>
endobj
-413 0 obj
-<< /D [ 407 0 R /XYZ 337.806 273.495 null ] >>
+417 0 obj
+<< /D [ 411 0 R /XYZ 337.806 273.495 null ] >>
endobj
-414 0 obj
-<< /D [ 407 0 R /XYZ 337.806 259.776 null ] >>
+418 0 obj
+<< /D [ 411 0 R /XYZ 337.806 259.776 null ] >>
endobj
-406 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F56 384 0 R /F55 383 0 R /F69 402 0 R /F23 379 0 R /F20 382 0 R /F29 375 0 R /F51 380 0 R /F54 410 0 R /F52 376 0 R /F41 377 0 R /F26 404 0 R /F58 386 0 R /F65 387 0 R /F57 385 0 R /F45 390 0 R /F40 391 0 R /F46 392 0 R /F71 415 0 R >> /ProcSet [ /PDF /Text ] >>
+410 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 385 0 R /F56 388 0 R /F55 387 0 R /F69 406 0 R /F23 383 0 R /F20 386 0 R /F29 379 0 R /F51 384 0 R /F54 414 0 R /F52 380 0 R /F41 381 0 R /F26 408 0 R /F58 390 0 R /F65 391 0 R /F57 389 0 R /F45 394 0 R /F40 395 0 R /F46 396 0 R /F71 419 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-421 0 obj
-<< /Filter /FlateDecode /Length 5840 >>
-stream
-x]K9ׯc!c^fO63I=)YvCUJ")#b.yF=}~Ë,\> H\ŅEryBh!|AE?ؠ`mV/M=%9EDO4ǰ_? u QtGV)x%qO"pV%17Qn# Yf:0P# ԌITSW>-پJ0; v p+[ȍl~oOָ\Gu$p?b&b]7_,ۗɯs@Ëҳ\Kꧏ?SW"] ,=-s#fV/_~4Dp.{ytL0ectF[I_iD-]e>X0$me~Q&k%hzEW/rq{AKΦQK┼;E]dhV=Cd+Yl;3 
-[yA& yfQob7
-*g؏4h^#&rUegL;S%^0[ ЙzF3uc$V_9&TiPe `Dq;TԽL׆*<poR8mLi;TYJ|bW66hd) g+?h73y^ZR>( 6z֜6@&?izm
-~7<Wǫa0;_@vg/`kef$wzV Nm}9;woxPsk9U1
-@&#WzUmePx&zsٍVb\0t%[Ћ>KC\f^QV.=3[$5<=  h F$5<4ɐ+qV=IX*Ix\q6HHA,E
-#Th|`UGTeT*"z;B33*oH[g?d]/LxFUHx2+DQs40*: ޜN4SS)=q-F&4=79rrQ@0AͭDE~'|8|<u6+L/bә+kͤKq5q"wȎT^"QU#O<Pd8<> .kMקIg}닏`~;h=&wKP5ș3A#+9 ~+1uR [G.y7LsZk;ڋ Rqjmoq<P}t'T;)3S5
-mEc77&b
-3#+4qa(9hL{t.aze f|_JYUn?J"'hJ+UE;ʨc\2+&S@,'&{F=դ/oiZ葧)&[z%ǁ@ǃV˩.i.njoZN uí8͡OGY&^©r:@` phGNuB+󁥞OPeOFħt~r?V%N5ⴝe˺;FuxL=5Y`ww :
-s*w:T>[M("/ g7qRV;]$܈k$;!%cr[څֵ][jRx7%=]y1_ pǽ
-4K`ٍ{ ?쒆QMіPpcZXXk]*諺ApC`hkU`WŷY!( 2v+3{M̂;o_z.1iXp
-=-aiה9ŇFۅ!+ŏEt"47yT_ԕ)prEyo
-&Jݾst(ATDΤp9aoX*#Z0S7f/'-)Q `™\n`J3*u#YjX udcq#hUO\u8-$<susnPu%fm%, mug!j}^[Y
-xÖ,)Q 21b Yp H1n7 '6vڙ%Q0֍k6hilȪRӠhNnh!b-5rCg F4lZC9 WZ:;4*v46a3`%eǠBһ#^QY2`g s
-1( lU}
-AL߰BPqV#u[Sr<`HL*@YHG;BKϽKkXDZ_8G\Z9 ^ھ$ًX4Ϧj&)6N ^SwC$Ho&gwB;Pv,y[3Skm:5M6xg&''4H\jSg5>a5m!URi`%:QP3z8j%Zublpn&fl4+:AԢPn(7kdڏ΄G_edy[3SkmJ5M:vg&%,4+J- Ӛu2t[H2,#`&l:9zXj&Zblpn'&g#m4+ͳ:Ip򤎻Vk
-7#T \T9
-7/FIV1ojVMʭ)lDEqtקZw-i*aPly'=VZVc՞ lMry6TT3 9;E+0껄
-::RJːiǒ5C֦UشowjrrҢOcҼ+UMqXt]lJr٦H[[Rkm*5M6xg*flT+Fw֬dѫkzIr .b]VZRcӽ έEry6TT1owT QR)خ|]+k#7{f9L*~}ؓ"(Ee =*FՊ1]0]eμ|ѻ
-7(Pu/(Tr -z",3&PscS(8҆JXB*U
-ԣNR/3 $V5]Gs hh7栽"=ġfP C౶U ]e\0tKMt!a\W˜i2x9)TAh^Wث6P~DyQ y@2k=`#h߆:"J7_/컷>Cl߱:iVpfѢLJ 82H_~n
+425 0 obj
+<< /Filter /FlateDecode /Length 5973 >>
+stream
+x]K9Wq1zP/[Xkٓ1 E izR
+E26@TRIQEy'?{ [o$iwqVn /^^-? ?,^
+a7szS%z}vOW6D}*RfJ*DJboFa_$`u l`G&yEU!|N-ɗj]u]<!0ȭ!+ rGȍl~oVOQ{tU%հʟl1~Y.!E,h p49)7ҨӇ_*V*6kY`+՗~4Dp/ӥֻWV3F0”v݄I 7o%~3'+OIE7$bœH:EM,?뷠7^j_mKkAlKκQ %qJz&`ނs3A+!],љ ǁ
+27z5F +68&Ř^s~{r%0}.s eVcldMrd᫵~d43bg k(As
+Чp}M;ި;
+9IJq-|㜂m)S90n f [|
+!J 03F͚lS)V$N
+}ώ]ඈ
+~j4"Z+LFFgݴM-Rf5İ%:;t~ |γ^4F/ މe<Kb#qV,if=$Gº#\d vl;dr'fلt4K0ik7&e?-.ҔGk{t*aAYŸǕggޤ͇s[՟ػ5Q9P3
+EE*ʫR`7o &:s'8B~jpj fB}:Pn1kli,##rڢ?u;>{'jhȟ
+'̺6v(6\9il)۠.t,8Jm\fqH%fYƮV;LXۘ)*I#JNEfc8J̆싩I=-QҰiTev@Ws5WJ:;4*v46a38`6%e
+'#T7 \tp0N(FIV1/jVMʭ)lDEqtקZVf
+6 ?H\0Rto+}(s-8LY
+zj:Qyu}ar־tIwy=NC*5P]
+ǠF&BAгg6G&@+ Nqo8O|UN=1 sM< fwh8
+U"0ڮ-"aIB#['ܪc j}:b9T e;ZΓS3bhD݉invS`rzWbry@U0x棣؀;Ʋ, UV#!dvҍuP[517(1g{޲p7UiMVSڏ*\ı T|+hwh(>a$\u)H\zC&p
+G[CWnJԙ#^F%zcT̓YLث[O_e-m"/Է=w><Ս6jBfMĬ&_^gު U xk߀x6Z
+ ymZe
+ڭAfb?FZ' H6bv{N9} +fIzuhZԟdV 6ПO-{s ʔsv ej0㹻&t|
+ ]-2K՛B|m;{RiyH<R>a&&) id+JO<g `XBQ'O; haX3ڿ]ooPoa.A9w㩖ՠ\@p2QI`i6K(]HΜh|M. ώ]{(ԏ:b0vOb]ai
endstream
endobj
-420 0 obj
-<< /Type /Page /Contents 421 0 R /Resources 419 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 394 0 R /Annots 424 0 R >>
-endobj
424 0 obj
-[ 417 0 R 418 0 R ]
+<< /Type /Page /Contents 425 0 R /Resources 423 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 398 0 R /Annots 428 0 R >>
endobj
-417 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 230.89 83.773 247.93 95.23 ]/A << /S /GoTo /D (subsection.14.5) >> >>
+428 0 obj
+[ 421 0 R 422 0 R ]
endobj
-418 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 260.985 83.773 271.442 95.23 ]/A << /S /GoTo /D (subsection.14.5) >> >>
+421 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 230.89 67.03 247.93 78.488 ]/A << /S /GoTo /D (subsection.14.5) >> >>
endobj
422 0 obj
-<< /D [ 420 0 R /XYZ 78.37 808.885 null ] >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 260.985 67.03 271.442 78.488 ]/A << /S /GoTo /D (subsection.14.5) >> >>
+endobj
+426 0 obj
+<< /D [ 424 0 R /XYZ 78.37 808.885 null ] >>
endobj
17 0 obj
-<< /D [ 420 0 R /XYZ 79.37 656.936 null ] >>
+<< /D [ 424 0 R /XYZ 79.37 657.502 null ] >>
endobj
21 0 obj
-<< /D [ 420 0 R /XYZ 79.37 619.544 null ] >>
+<< /D [ 424 0 R /XYZ 79.37 620.11 null ] >>
endobj
-419 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 384 0 R /F23 379 0 R /F20 382 0 R /F29 375 0 R /F69 402 0 R /F15 381 0 R /F55 383 0 R /F58 386 0 R /F74 423 0 R /F45 390 0 R /F40 391 0 R /F59 393 0 R /F46 392 0 R >> /ProcSet [ /PDF /Text ] >>
+423 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 388 0 R /F23 383 0 R /F20 386 0 R /F29 379 0 R /F69 406 0 R /F15 385 0 R /F55 387 0 R /F58 390 0 R /F74 427 0 R /F65 391 0 R /F45 394 0 R /F40 395 0 R /F59 397 0 R /F46 396 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-438 0 obj
-<< /Filter /FlateDecode /Length 4829 >>
-stream
-xڽ$-߯V70Xf{
-{Y—2T\ߣ? y υ3p c<˅EZH#`R:@u֞֘$:ZsUQK9FmJaAƬ#[H:#Cv0UNGȜl!Y`mI>vޚyмYQd)OuM':<+yyĎ'#NƱł*NjtUoy3o.%-9.e*Olh2=5*ństãa~*m-JzM2rFY6kp/Zꪐpq~b&f(r,8rE)*W)U4U+r%zl(TYɖL,[ҧ"[ҧll|b ^-Ir hw)E½0 )z$< PߩWvb\ LYC x^|YdH \=3÷RVIu3m`<ŇiW%C>L5g +F:;8&+wY4{Y?b _?|^
-#Z
-LI?̝~9ѵXJ=rMg[Jhc; 8in솥S9׻@ׅ-$LN0Ey]J;Ghg8p'3?B03&
-E{fA2V6 84
-"{˗w.պ'Zƺљ.RnvOc.P%ѕXbs)%8WR@# 6{Ѕ ĕLiޢx~;[I4Vx70D- ӜX fqK^/U 4
-E0Ur$ @{=xq"f`0!8-FfB4d]sEBTL~VEB"$Z-Vdݢ AG?>u!zV%k)B? =72-"m6~%5;J}t 4tEj';Nq4gmx|Ztbsξ"S$4EQ~L+,O;9Ǵ[f)׎aGiy s}}ܕd~֊3]JM!G2nQDaXRڴ˪ jﰈPZ1i9!HX5Eؑ TJva}hJ\O(q9@w zX䑔Dש-=UGqIԽm.$;/qc%2,ɷ4n+OV$`0ZyF"a҃*ѿ{#H1jw[z|Ƶ5;=\źfB$ѓfHc7A3An&<>
-]7Pʾ$ShY
-JzױɄ;dN8YLB6+"v%WCPBaڥ"zH7$:9.'RDŽ׫]mR
-QeYɴK4H*ʤ3D'ԋ WR~/Kʵ!tH*RzZbNmX$IXr o9ީB p$ 5w:-nf;
-6E 2wBiZ)J+=1`,ɱk)]gKޫhR\Q|xĭo[qLuaLY3 i?FіpY
-'MeҘ/Q\[%&@Olћ{C'+B:9ǵM>>F,CGFwj)!g ~ P8כ/((ݡ^;z0]/%~ [/d@FvcF2iYrֿk,l
-('vS/ŔYX}i|oC5+(P{5
-ƕp2VǠڵI:`ײ;,~- f[]]:%zlW]%͔k͕E'Z]{Ec*da{/>w4}%h"Z;D
+442 0 obj
+<< /Filter /FlateDecode /Length 4759 >>
+stream
+x\9+&q ,ae Go`'.ūHY,"7~>߾}!3o۷|L+}F0n߾poekǷ\>|,'|%<ܚD@ o:)djˬ)
+ <^uȇx2H8s3PVIݢ"$Qq7@T <9ɵXIJeos˕喚[ޕb"$.#q*լ \;^S*fQy` ׅ3@fp?j> WmKxxOLiDCH\I>@jfgJwoA0|
+ql>Zfq`ycEIb|tE
+"
+o-Y5kb%FS֒%VbK
+i^uY.2Wmqn_:GgvM幆<ifO_CB$_XJ0BK.Mw&f]nȤDDO2iIuUxX(784FZ%oޘꆸqV1wYަ~B)&L
+up
+j^fJ| t[)H97uɉ &rtX<7#9_5, X
+G\[.ms=<iSz^HyklEW #cU-M WBTο]lo( ]m+4SüA*a$ӈzx}ީ V1n:2Ym`7JC+C-˻4:ƑL]U]g+Ąs
+nw٢SuMJGX[#0Լs9R(MFfd-L2?!|ZCLtk,ETD $YvuH :ٟ:&^hula|"Q2-$bdt4M?S%;c b3:~ZDuyk3H9K/Yͤi1sp}{2FWh L=r&/C&1dH[ayZe~nN,]kC9]{*A%9㮤 V{lsdӔlQDyYVifb4f2 $G貂c:c<[s՜7kyØHЊ+uz$YV\zQӡKKP;G*fs>TǨDƕg3f+ךgimVݜMvzLkuF/ ɦ Dz(Icx F#*XdWvɉޮTgg 8xlY"<Sh! s jppSZ2>
+Yu7jJ{_oA%ThwIej F!':- xf9cg}8/AfCd.a58h2\8~vWF7I/浤4AN+У'.H2A涺\myfV4UhP7+ϫvOЦC4ҍ^F/J'Ÿ^ԡ\
+6
+vj Ymrs<Zϙ诒IdS =>Y͒r>ÒTV =l]%{&h&4jZ@9 '}ݔw#1,9QIUͭd0̅%+!,\h*gݲ43wm TSV,V+S\ye媕ʝ<\.Y%A{,\0꘽χsl9sWr(rN+ *oo^h$%\¥\;`!d F3` <Z17 .Nx͗>CW^_Ұڷ`Uu{
+mYOToGjwy)HZ--f"(fMf
endstream
endobj
-437 0 obj
-<< /Type /Page /Contents 438 0 R /Resources 436 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 394 0 R /Annots 440 0 R >>
-endobj
-440 0 obj
-[ 427 0 R 428 0 R 429 0 R 430 0 R 431 0 R 432 0 R 433 0 R 425 0 R 426 0 R ]
-endobj
-427 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 406.344 413.325 418.299 425.28 ]/A << /S /GoTo /D (subsection.18.6) >> >>
-endobj
-428 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 193.163 277.374 205.119 288.323 ]/A << /S /GoTo /D (subsection.18.1) >> >>
-endobj
-429 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 464.884 216.062 476.84 228.018 ]/A << /S /GoTo /D (section.12) >> >>
+441 0 obj
+<< /Type /Page /Contents 442 0 R /Resources 440 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 398 0 R /Annots 444 0 R >>
endobj
-430 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 509.928 164.595 516.902 176.55 ]/A << /S /GoTo /D (section.5) >> >>
+444 0 obj
+[ 431 0 R 432 0 R 433 0 R 434 0 R 435 0 R 436 0 R 437 0 R 438 0 R 439 0 R 429 0 R 430 0 R ]
endobj
431 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 115.889 151.853 122.863 164.595 ]/A << /S /GoTo /D (section.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 406.344 466.187 418.299 478.142 ]/A << /S /GoTo /D (subsection.18.6) >> >>
endobj
432 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 136.257 141.123 155.963 152.191 ]/A << /S /GoTo /D (subsection.18.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 193.163 344.789 205.119 355.738 ]/A << /S /GoTo /D (subsection.18.1) >> >>
endobj
433 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 193.533 141.123 205.489 152.191 ]/A << /S /GoTo /D (subsection.18.1) >> >>
-endobj
-425 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 341.348 86.285 347.573 97.742 ]/A << /S /GoTo /D (section.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 464.884 287.206 476.84 299.161 ]/A << /S /GoTo /D (section.12) >> >>
endobj
-426 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 358.276 86.285 364.501 97.742 ]/A << /S /GoTo /D (section.5) >> >>
+434 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 509.928 236.981 516.902 248.936 ]/A << /S /GoTo /D (section.5) >> >>
endobj
-439 0 obj
-<< /D [ 437 0 R /XYZ 78.37 808.885 null ] >>
+435 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 115.649 224.238 127.604 236.981 ]/A << /S /GoTo /D (section.5) >> >>
endobj
436 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F56 384 0 R /F65 387 0 R /F58 386 0 R /F55 383 0 R /F67 389 0 R /F66 388 0 R /F20 382 0 R /F45 390 0 R /F40 391 0 R /F46 392 0 R /F59 393 0 R /F71 415 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 136.257 213.509 155.963 224.577 ]/A << /S /GoTo /D (subsection.18.1) >> >>
endobj
-447 0 obj
-<< /Filter /FlateDecode /Length 4698 >>
-stream
-xˎhEY`so6 {[wx@ [ERIQo~x˻?< =y 5};$&뙴5q#/ߦ?=qn
-XB'RG .^6CQA\M W;<aБ a|
-i,k(W.uKPn
-T*s'PӉ$HNO-6`,8{$|\2{R:C$QD ж@6նCچ2ᬹ:$E!V2k1E <[oT?dzJeRDe8uȨdFǖlD;ӷ~a^p0uXa(ԋWQ F%/7c\j켢%^IgG'B$Sp{[rN}O/!_Ӻ,rϢ>c'M:w nΉ0vӝ @w4PMkifS #&iޥo&09{?IiyeeFE^-$>0&8duo+%%{ZR"̇&^[
-硄SO'黯4Ṻ'ʅd˙FMTK<KjeƲ|u&ZߦHUc?ka;C
-5xDzE!\MC o_ݰHYO KE=Ca·cKZøe_,VJM#8&{TH(MIZ0Hf. f»fΟ]8C`;.`$p`Š.Xu.Wu=jsu"[KdC=м+s!i^͓y kDg6"S9P}xaL1]GN/QY,w=0nۻLh-?LF47x _oԱB >2, }@$ e
-K@H{|Bnp{XL'[Dnpߧr6/R3MSL6B-37ϔQFNȥBv㶢4~I˜@(ѹItC"+ݴzcB(8"%|mۀaX&.M!s3UKWjyUm.)Q{-$W
-_<J ~ArH2+(ѿLef+I#`19{P,c΃sQLPZ28z1^8<&8,4h@
-}}Yrf̞Jzs߹"`f:
-Svb&v lҙM7)3(׮tR1g<mG9BI\QT96tސ 9^9O#@#Xn^Sz-fwdJUhӥB24.Yn+U7E<ٔ=-) M2P3-909Kv=1[ԔL=)E |GVT'Z
-QTE\ F7y #jjB74Xƃϰ(bԧ[𕅚Rg~Nϫ!yc)R9 @: DtFlE1QKeT~ `@zǎE<@!N\
-(`HNcX'*&1ǑFasLP/F}ۑ*.y133ݗ̢+R: 쀩";>E]e;[疂܋ܽj]NplzE6ԋ-]|hٍP|*@nK̸1axIśLP. >H"(TSDѕj<2% YXuo
-&zՕ̴Ey3[+
-;KJikw:ǧrU,_i*WW!vcOuZY=.LhMh\3BR7L^F/~HioK+}ئ`(@.Hj= PbKu${4Pwq" %i='9l52
-;%ʫSzڱku5I^,9JX`u<J {uKQTXfdSX ,;цe:I]. @݂r.)`n"}Bt+kÞ߯=n.rT[07U{>ψ⤥'1U--Mƣ
-.]epj掺5
-
-;B'+_|<?ѹ2H,>46.tf/c䮸QyОN_Ś
-%XfJ%X^y
-jK:&R}{>VճֱTdW+aHɧQJO=JtYRk%ԴmzH[rMG~DTC>kb՞@ @⾫*y%W&kC MǗĖВm?EjύEHh/l4g 3t7^G97{4 Iՙ(rܰ2T2`+r6V_uiXh QEKs R: #=a<2ۍ8\Tey+EPY3m  h3X´"}YOf BMzZ$tjD+xOx1"݊baOdsf]^&ޝə*Az^k屧EJhV;#AR|0}Z{V-ڎÃ(4Z1C}}E1H9<5K_'w
-endstream
-endobj
-446 0 obj
-<< /Type /Page /Contents 447 0 R /Resources 445 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 394 0 R /Annots 449 0 R >>
-endobj
-449 0 obj
-[ 434 0 R 435 0 R 441 0 R 442 0 R 443 0 R 444 0 R ]
+437 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 193.533 213.509 205.489 224.577 ]/A << /S /GoTo /D (subsection.18.1) >> >>
endobj
-434 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 471.161 758.022 485.886 769.081 ]/A << /S /GoTo /D (subsection.4.5) >> >>
+438 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 471.161 181.622 485.886 192.68 ]/A << /S /GoTo /D (subsection.4.5) >> >>
endobj
-435 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 498.837 758.022 505.811 769.081 ]/A << /S /GoTo /D (subsection.4.5) >> >>
+439 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 498.837 181.622 505.811 192.68 ]/A << /S /GoTo /D (subsection.4.5) >> >>
endobj
-441 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 502.177 372.415 516.902 384.37 ]/A << /S /GoTo /D (subsection.4.5) >> >>
+429 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 341.348 86.285 347.573 97.742 ]/A << /S /GoTo /D (section.5) >> >>
endobj
-442 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 114.907 360.46 121.881 372.415 ]/A << /S /GoTo /D (subsection.4.5) >> >>
+430 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 358.276 86.285 368.733 97.742 ]/A << /S /GoTo /D (section.5) >> >>
endobj
443 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 67.379 93.099 79.334 ]/A << /S /GoTo /D (subsection.4.6) >> >>
+<< /D [ 441 0 R /XYZ 78.37 808.885 null ] >>
endobj
-444 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 108.82 67.379 115.794 79.334 ]/A << /S /GoTo /D (subsection.4.6) >> >>
+440 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 385 0 R /F56 388 0 R /F58 390 0 R /F55 387 0 R /F67 393 0 R /F65 391 0 R /F20 386 0 R /F66 392 0 R /F45 394 0 R /F40 395 0 R /F46 396 0 R /F59 397 0 R /F71 419 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-448 0 obj
-<< /D [ 446 0 R /XYZ 78.37 808.885 null ] >>
+451 0 obj
+<< /Filter /FlateDecode /Length 4573 >>
+stream
+xɎ%>_Q?ځFii9ML}u
+ P3ѳȓ7<&y v vM)V*&  $lO6!
+rxN*.߇<c Ҵf>r`>՚=BVgdMM/?VF>A-8F{H"
+{ p5㏑6jcKsGܵOscQ*k !͞//|8h%pXu0AҤH0"9Su<C=HNKp0ɨJÔ8w+ޝI<U[y5E-زC%c`]azmZ2)t u"[Hd#C:Ф+iG]ʓy ?!(H >F"˱?ېO_jY%z.awzײs9-KMüsD >i=~^:IA<З9 H:敼H?a7}C3D!yϙ)qȃsZ]} .RaݛtY-[,`-3^ϛg(#RQ僴 a\jC"+\LYaX&/S&"EĪ7:ګzpuFDP$9\V^W4-R&i1na}-7aŝFq U8Pܲ>p<:'8qt?f gv1qr?+CTI%NO!٢HУ:4zK%~vJ d TMN2yﰥf$VdZ S+EgNk%oh1mjf 2hͤ`ԲȞDy뮆/\B,|Cg% _ <Cn97@d0BdX&-Dĝ"wR3|dMbQℐRF? R6G}}8{&8\f#x^m/=rfO,>}UB2wWF3O4W|J뫎Hkռ_.0dF =򴒗Q6`
+|g5`wK-96rvMq#ܝ+ x{quZ] |PӝM 5#}uV؟w >j< VzR϶6fc_OE5_qoW8hIq2utl?Æp`c[P?gmwb{;p8:jFPBQ=:"h=QgEЪ2 ^{x ~Mzlmg
+QHT0j(z@)phوz壳VǓcY FVp8k%{=#_$NI'ݼii3 st ^.dCCG9if?td.B˘t~i8?LE\ڎ\% ]lfEæ^j[w0~QfPӿp8'TRpkBl•SZsuyXgaܹB ~ĢgMN'Cڠ:ͷU2=JU<7)Bc4ų!PR^*`B$
+IkP#!9R8tkӮB&?wTEGPM~fEGC[ *
+F&#[\, jjjEwy[,Vy>aQe$eCLjVW'@7'B幃"P }W}dxTH/G
+`/8k)Fn|0'c9s+"H~ΟW*WjbH&;5
+$D.G
+;YfMP<;g@|R(RT` uWUfptn5˔ې;E6秒zwɍ{@<:xhIh"Rt%uC#t]ưYQ'wht5Q}o!sguGƲ3f,S!tYС]]}Gu}])P##cZNXْ˧ҥ s
+}ĦL1M(<]#yfVa߶Kq`BQM)UmK i q9DH2›->L 9nVcvT)zI|D̙ȼfm#zj:gGhKJ܈qJakn !m!fiM~c~锈~Wxئ#/AnPJv= _+,R
+ /~7l
+f
+ E #{00uor$aVm"Ȳ
+>{Ʃ.}^զ2f5!82tvg@3٫=/6`09款tبC}WNT8
+Qh \_JgDQC4z^ƞ_kJMn.`k1Пv*s˦Ի7W EdxJ;EeW|CHtmvJ 4LZ7'hKLt- k̪`fj41։oq>FT[0&|C/\<lWxY,߫%.]pŧ7:t z}zuz{'IPz ~gj Oߢm#YqA# c唇趻crzPa^x-sw
+endstream
endobj
-25 0 obj
-<< /D [ 446 0 R /XYZ 79.37 495.051 null ] >>
+450 0 obj
+<< /Type /Page /Contents 451 0 R /Resources 449 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 398 0 R /Annots 453 0 R >>
endobj
-29 0 obj
-<< /D [ 446 0 R /XYZ 79.37 138.034 null ] >>
+453 0 obj
+[ 445 0 R 446 0 R 447 0 R 448 0 R ]
endobj
445 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F66 388 0 R /F56 384 0 R /F55 383 0 R /F16 367 0 R /F69 402 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 166.932 400.538 181.657 411.606 ]/A << /S /GoTo /D (subsection.4.5) >> >>
endobj
-452 0 obj
-<< /Filter /FlateDecode /Length 5122 >>
-stream
-x\K$}(YhrjjS}3|Ŭ%"%EDFfO>dUOEI 6ANo_>ݧM)SaO䦶 [JH/߶}$)]ΧQ2
-\cwO/&8(7[/7?RR(,}:w$`p*6a sULɅб[ߙ¨ RSRfcK-Q$gk%#
-
- ީ8ۜG;6G-=ްx4MwJy; 춲:UY.׆ЧlCa+~p 1IZzr'g.]Bw |>S
-ʕ;p^
- \2*WWЀ+Fj6.]߿& wHE-'):c%|a3QI& ^@M[9!\Vö3;QjVKLNkjgcs y_͊qĔe!b QwL}p7ʙ
-';V[11qP} l+a!BRqT]pف
-D )en(#"=5>
-k]2wy.:0(fAt-`>>zkyngwvw$#H!
-i7
-.m]bAQa/( ύ}nq1BF%TŮy_y 4Xh'އoԼeeUٙN/۰ʌ9}TRhkAUP;9Zb~ڹ`C띲ױ /b\7ޑY%̧HO_P"R:;:<+=ݽ>ozPg-u|0rG;i/[iixe(m{9ch'9''u'x7R|3_[gL{6^B_;`.C.Q[N~E=,ᔄ34WafR=7|i,ݒ![᠞ԓ/ۍd&7܀k@]J[B<ivrY_hyܲj(5'(qP)s\c(n~4ciwpgthݙ]76tgvLUٝm=ԥ!^G[iÙO߅ܷ h
-endstream
+446 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 194.608 400.538 201.582 411.606 ]/A << /S /GoTo /D (subsection.4.5) >> >>
endobj
-451 0 obj
-<< /Type /Page /Contents 452 0 R /Resources 450 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 394 0 R >>
+447 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 98.416 93.099 110.371 ]/A << /S /GoTo /D (subsection.4.6) >> >>
endobj
-453 0 obj
-<< /D [ 451 0 R /XYZ 78.37 808.885 null ] >>
+448 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 108.82 98.416 115.794 110.371 ]/A << /S /GoTo /D (subsection.4.6) >> >>
endobj
-33 0 obj
-<< /D [ 451 0 R /XYZ 79.37 771.024 null ] >>
+452 0 obj
+<< /D [ 450 0 R /XYZ 78.37 808.885 null ] >>
endobj
-37 0 obj
-<< /D [ 451 0 R /XYZ 79.37 450.173 null ] >>
+25 0 obj
+<< /D [ 450 0 R /XYZ 79.37 552.448 null ] >>
endobj
-450 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 402 0 R /F15 381 0 R /F56 384 0 R /F58 386 0 R /F29 375 0 R /F20 382 0 R /F74 423 0 R /F57 385 0 R /F45 390 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
+29 0 obj
+<< /D [ 450 0 R /XYZ 79.37 169.071 null ] >>
+endobj
+449 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 385 0 R /F56 388 0 R /F55 387 0 R /F16 371 0 R /F69 406 0 R /F66 392 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
456 0 obj
-<< /Filter /FlateDecode /Length 4276 >>
-stream
-x]ˮ6+.0
-F*Ԋð[4%^O',q:L]\0OMҟ>_~yKz}T~~맟KK?~&~c|DY}'KvRJױk¹9>KC(;',uyWf yB}b aA`e1g1p J0x?`Yfa
-YA_̡/AXR
- C0A`lžA2E@G8L/6 ;#$Q
-BK F6vW;cPDf#*xhnAy%)vp<)<nG[0<Lq1
-Q;ฯ4ϛ3<Kw X™|I@
-CD<cwH(<"=AS,1pfV~oA(D2-Q{:cH!iJNfK,nԛqdڊ
-ؑ$ (> G6nGBg䧮j7x$z!g\^f<6#AIPLZ]l_<,a>h?959=QA bxhnGv[8P^%θm Zj
- M%dǔOKҺhi皈EG-T?
-Mv5^U ?Az?5egq7pT{8D\ dokL,͵~5Ϊu̟w~4iǦj58j F
-b4;hwS-¦1 XS-׮81}OX`l)20(yjѮn 
-sm_Ok<~y-W[_sL{}(-ۙQ\bW+32>m2_^L~ݜ?)_}[x3J.ўoِW܏{'m{| *s07n߯[V;865|9>y쥾ٙ_5^© %_ $V,NW p KYs=:и!KJ4=CH \
-,|$Cp@bpa@)D{)<R
-
-Yan CI7,>a7,pǦQ,Cn$MiA08aɣmE'S96"! 3-Afs؀6L N 6"AI3EAt8 ʝ7PKpŸ:+C$T< yƘ<@4=>8H"QOay":@[<LAu8 ʽyJ鹓u8O<o8OM(
-M/18a<LcPʍ<$l 8QX: T@4=,(y*'s='dBS-z=Q^bp<y(Ǡ=yI$ dp<ϣ)4=*߂qdOp{<
-Bs%{8O'{N-g$Zn9%Ībwfq/|T MՃ}iݐR1R17YN0?M*W1bS1êA8Xejc|:*`ԌzϏfYfZ;'39a6J̯PDykq6\i <n~kjފx>Vs`:!HA}tGi=<,HRR,
-*rMW$V%,շ<TzO´%^>ߒd9HJ*5Y,4Z{0ˉ+=h{DAW٦jwpwɆr:ڡ1C />~HӠgIO`kUXO~U=/-O6S5YU[.QlEH^Ԙqmt:`i⠳6sˌ#2rOzkrZXH eyTn S0)W5gWz3mD_GH
- csIZ;Xqx3.\4Y6 ͟P<ǭĻp( F{jJ+k1ևi-nIȔ"]>nu.G@7ğaHVZstTU8UE^53%ݡ]3(,.F'נr:3gdMpYmJnQ1ʈzuG4<D3Vu6=2\co6|*J8C6ٱ iY')1r=(L~՚\=dPJKlxxk7x/:ehYI7ə ұnT KƛMe%`m
+<< /Filter /FlateDecode /Length 5202 >>
+stream
+x]K WqshE`Y`s2[MK~HHIUuC{fE~(JdyE^~~'O~E)Sw
+u Ip ^ ӗ˟Ki.K(i| J (ZJ) )FM)q
+J>cr$n`p*6a sVLɅбZߙ¨ RSRg}&8[jHK$Go&Ҵ4QL3 k'BC˽;"z3 JVt+ _7߷:T4{>렸B|mM@ ZNQ03\w|+7ՄZY[ B3xP{zjE;XM(Vm3g몈mV+)Bݘ$y7½
+2d.^VJih2jijLJ8.~*Y1U+4h=Q[Wo,'_mi+8>omxt?P[X;
+hC构¹36輠lyN٥6R@Z<ߪ u wY&3V}mxr^mھ;g^=<Z~~F҄?nvIX)04yOvTp?PhV]ybˌs1`Ɯ#2:=@5 Bj7ALh4}W5cV^Uۤ/v]զ2Gx'
+ANU?žmQd*VY~e_-bZ˜h3ev@nm-\׶(e@Q{r)/5YmQ?9E.YSu,Qqz/Q2x>
+_ɕR3 aLAĘ̻;D%o݋5Ivjb
+<4L/(OE#~?b@=XUw@݈g#x,`PF52"w-r`Ϻ'#\ʇm
+:W\h\_cCd,Dְ~V' Wj^{Տ-$ '_kj$`ƌΧ'F}rCk+j7a4 !ظnh a|aTmq.<ֳ敪~6utiy+|zbÙb0UWd0DlCVQ*D?? GEyOGH:
+j{;gyw:[gV)v≭oc #;d}qݷHY>vm|̉KwT5c6'YSx4iӨ3'%Ql-NBYr! k_4LYRV6>nl}ѿ4'AʩI5l'^?|Z;?21@9~
+ܪW+d?r%aqɃ
+ <->wQm!`E0<n
+Bi=)aѶ`=AxogN&,5es%cim9 ^D@Fd8y(~S?5ַ :F7ˑ6MW<yRqN/|cNef-m';PW~R0[GGy7S=> e4k()eBcՍzop˪,Նy88!ydd9fNj0BDeQ@[R~7!Q8֮?L7b" IFGm32.P&䆚7 VB
+M팝Bި3Vw{;h|gR
+z$7u}˾ ʜXڅa4FfTk֚!$< $<#a mZ.IhO3{+UTw:A NX/*B<h˵~\Uф]g`<M|֥zPb. F T P֘rx6
+`ds)3VJHJEZ:/KfDV֒E*]'#*YOfE2, Y3\V4 ĎVGL,,}Lhb k!)ѸM.l@
+ՠA]j}/l:aQjf`Q& K_gF
+3`R҉8
+KW}%iZ_W|[qxf3O="K.I쁃P'#4%y_ RLXd4ƷPK4깕ݙgl'´Poمcx>2Ҩlđ  gezy?VR6Mj-]mr$H*4k]F1&q5M qA w_6*Z:m=Jb-}>Sc :p^ G2=ֺeQ{ ſVܦiזwt#ƞ9dI}LG{ |vot}1N-8oUNo~'E{bvfgHn$b::&?t[Fadg|nuی 2L*Juo㥝JAvTJMjXQEi`gi+ZPPٕNBI(JaOs(Zoe\溹*a>Ez9~5Vy׫MuSv754v~~/L=A{@J'O+|۶B}}ƍ6}?͟}O}o[w޹=}qS/E7ɑ=}yKkҝuGL2ɳJJ&yVer}NI83/ T{56‡
+˱,3&t?wsɓX) ffX;m^8ZYUF9M-4>fWK76Z e}Vh;5ײS/]ݖ?te6qeAH/~8, 7ZGKY K?6n7 ?Ȟ]ٝG 2#3 ٙb,#xabTз]) hu9s9^N.?q_;?_PIL
endstream
endobj
455 0 obj
-<< /Type /Page /Contents 456 0 R /Resources 454 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 394 0 R >>
+<< /Type /Page /Contents 456 0 R /Resources 454 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 398 0 R >>
endobj
457 0 obj
<< /D [ 455 0 R /XYZ 78.37 808.885 null ] >>
endobj
-41 0 obj
-<< /D [ 455 0 R /XYZ 79.37 334.862 null ] >>
+33 0 obj
+<< /D [ 455 0 R /XYZ 79.37 771.024 null ] >>
+endobj
+37 0 obj
+<< /D [ 455 0 R /XYZ 79.37 451.007 null ] >>
endobj
454 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F56 384 0 R /F69 402 0 R /F58 386 0 R /F55 383 0 R /F45 390 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 406 0 R /F15 385 0 R /F56 388 0 R /F58 390 0 R /F29 379 0 R /F20 386 0 R /F74 427 0 R /F57 389 0 R /F45 394 0 R /F40 395 0 R /F59 397 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
460 0 obj
-<< /Filter /FlateDecode /Length 3138 >>
-stream
-x]KoW!X|
-Յ3we wż&SKXP}+fa7}ot0A+ax`\p9p0hH19sFdN eBl\wcxZ{]Qe @ 묤zR yD)ztRe
->Ŏ1؛?v 2v9E,N~?9M.䅺XqՊm~ez_ P28ʟ~"/;5G`.`!
-nw^ x9;@ EwB}r:k羯p=ppvf̼-v-5砻x@}w3L95gZȞA]xTHI)tp0O_ss>V<͑Ǘ ovLJblYO
-DL>^k0[e~bn0c:H&p Tx'Fz0`Zdgu.Y
-.Xz:}ヷo[X j c9߀.gLyb%߇dL>(KJ] tL
-o8i+4ĥN{uM
-^ IKt%#@Gżt/.5aQ1D&Φy ť3<Jw^KaQg9Bƽ0G!tt'9 rZ&/]0G 0?F!f'QaJ+aT9
-Jgҁ?Af'QJE:weD:H ݋t jҡtH3d"j%·'Jb畅N(iJ~NT&/tc%X=uKxzZ:T֡::~<zyah{:[;uzOU H},@b\x}uCcB^бձ@bp%#O먘װ(ztLkH湽݇tTkX&'"*U\:Tǖ:B,XG!t[:2֡9PwacKG:?<]ۉunRwlXF-^t:֡A
-!xrBq}O_ @ܕ0h>b^8@3} Gżr`Nc] P> b^oН{x;#D?ZU/B8*np D8
-uQ:vs$5hUF8*u‘)^#Sߘ4F7K½?ZUJ7we>r[9mi/sPڹ#*/:rTF1zql80805ю#Q=Ì#*xBv@[82@gylã YLy:L!T$VUڍw6bq%aTuxr4L\߲N8SF}L9<S|nȚ$>3.柒BblZB[9^$He4Υ ּxV)>[g ik/4`fM4K'! JX‰cƅÚL9籦17QK-;#!I@5G$E#]*y0vtTu3s:5)TD<k]TeWTD+Uܷ\F5i#r`Auށ&wyH⪯A/}CӨ`SJ~@RM5ki2mf*J:kCNoL;
-
-Dza$Tk%
-l,$קmaXxa*gn0iU4k #92ްorr*'A, >ծ} 0=a֏zrjX81D?͑ry&$}]շRˉ{Xhk92W4Fx9S?q)wy:.+N-c2Gdܕȭ Bjk|Xt=%'Jzjw->L?BDuaN,!/16E/Zx<Ua7*ӂ׻7
+<< /Filter /FlateDecode /Length 4497 >>
+stream
+x]ˎ+ 5JvWNE
+YA_̡/AXR
+ C0A`lžA2E@G8L/6 ; H\9
+yR9i%,``Ai h˯ү2M(FD#LjbTؖc9XM ;D.=R[ ,=Dql)
+Nv;9+8͙8Kw 0sK1
+LjUBWѣ:ǐ\#,~؇Cv0]g鄾p{Aq:,a50<|V[v_cv$(I|Ovo!B}@-#! 3@SW7xC$0+x%O@1i>w}qd Oq>7G_߰0
+b;(!a[ mWuqK
+ЋmAM9`[BvL^*6m0 ~\誅ͭ
+Mv5^U _{>T=ܼF T!9>3O&8<B,z^ . oPL6T,)i~5N߯_+RH`¢5x*)ŦOKOi 0՞>-'ƷC;X{*[~ߩo<eKѮn  XzߩROK7x'aep":N!nŎyEkHӸ6+jo6hɚ;۶YD{n|Hs|7Ues>LC,k%/gx
+Ub<Ec 5w&7ˈ5qMKǿs]&A E5V)uɍo^n0 ey0"y7pQd]+iK{Iud3{˟w?Eg<Fr%`k|Ir+\4zY][VA+: {mYmJ^֏qǶ^6cM
+cxs?x xa=/Z "~7Mm)ȁX_X_`L8[<Y,5D}E
+.M> Z_ .;>XA,+7߻ ۺ)90,aA<-&yh86 %*衪OVf jtDDuI!_~kZohkPmR9ˆz^IOf
+yُgeK#
+kG7.D6Ŕ8Gōw_j|9
+^%Z3ŮV>4#Ť|9S0/7o\+u=߲sx 77N/+˟x!iҮs07_lു ccYbd3bN}G|j-{Y^̯//}ȏ %B+H#M|ӆg=sw 4׆иOqmTM}\B F>µQ5\H
+frwoFmT?^Y8G݋%O@snv"! 3-AnlH{qd &x|ݽHPLQgA^*Y|CUp'ɟCXodOh( Jn18N1<Ǡ 8ʍqI -AplPqH sLp'PqJApqJ s'#8Oqp%z=UQ0bpcy(9LAq<ǀ`86x8B8N-<'9΂r8B *hRO!4%ܢIQUqA -Y9Ƙ<\ǁ<+}@1 zc(DJ`f8ʷ8Prg8 ʽ<
+c8Or|g+刼;Ùa[DVX6,co™QU=؄F6 p7pfoʙS,)[sf3MwΌ=gߟ ׿ֆ4bY9})v
+Layחn@Rhhٚ
+tKqcNnV6t%*[:pD*/b,4Jf±$A[8BDDl@` A_ P업܈ʊ_*)cmGBj<sR))?U<hn'史׈%,3DUȼ.yXCu-m$w*BOx&>UWdieA^!t9SQ ו7\kSvdaQRϋBne(ߌJomRђUJƙ)M]S҈HIJL.D-)ɡJN1KҴK*r=uQh_ߦd݆GB&[28źxoc+ʺmYHRb-R5ۂY!?ƵOI #9G8Fe[Ϥt:X%SJ;1IIKppZ,4ˈ Ig=V× Z8&z'zgU=%(wVQ=ֲB`hdػ躳=/B'7ؽr@rr+d+$m k͔SZl5IqYT!^1UMyRKz8͇.LTOrETv6dhv(:V:/!A xxT_n|ɶ+*kbaRap
+ip O (Ǭ3
+UM`23S(Uq
+]jfu3Id/ɬ{pdM[[B#4@X\BPP~hj~h&uMom_1j,=Mˬǧy MR*h̨|*ox`J/WHjW`.df[;^T||hI*s!åim(󱽒='yd9OLv%$ hWDŚX$|5#I~ט*k1Lɥ P6[M_ J jO4,%?fcr.1G ȋ:~,9Duu4ȅhI@
endstream
endobj
459 0 obj
-<< /Type /Page /Contents 460 0 R /Resources 458 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 394 0 R >>
+<< /Type /Page /Contents 460 0 R /Resources 458 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 398 0 R >>
endobj
461 0 obj
<< /D [ 459 0 R /XYZ 78.37 808.885 null ] >>
endobj
-45 0 obj
-<< /D [ 459 0 R /XYZ 79.37 268.603 null ] >>
-endobj
-49 0 obj
-<< /D [ 459 0 R /XYZ 79.37 177.586 null ] >>
-endobj
-53 0 obj
-<< /D [ 459 0 R /XYZ 79.37 152.789 null ] >>
+41 0 obj
+<< /D [ 459 0 R /XYZ 79.37 249.044 null ] >>
endobj
458 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F56 384 0 R /F16 367 0 R /F69 402 0 R /F55 383 0 R /F66 388 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 385 0 R /F56 388 0 R /F66 392 0 R /F69 406 0 R /F58 390 0 R /F45 394 0 R /F40 395 0 R /F59 397 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-467 0 obj
-<< /Filter /FlateDecode /Length 4536 >>
-stream
-x]Kﯘc|,ƀsCb9$
-\S|{ٵFS,*U((u7NXJ>ĐI[I+F;}|B)pJ9Jo~p +C){҈t(27ҡ.~ R=c/DHd*лz{ ߊ\}EoNQC<9K4' rlخZ3]&[FF@)]ѓV-v]~Ҧzfl}T0ZO:aNZZb: 8yj[#O9=%3%
- >O6Ă?yci"OgC2w+̖DQaB}SS`Pe9tɅ;&A"OԻ}mWn{T%`I
-u$4WQv)9 GnZcth K ;)PsmP
-s.Fziuw~*Ț{fX.$yY}p"Xi5.Yhy;__hEZ8,Tk\ x#yļ_QG~x7tW/F$c#6ffQ09mA 0HDMYiE.I2JQ?qlT.|RPi7S4uvesXb<9r&ZL tJ 4R6;#N`NC3bqsB"=ߥǖEc˥fDZ}8RK-0 vA@]1}yԣVAm#E3SSqH$^GJd`qzۓ K}鼣<d7F埜A)ʿ;
-Λy;筅-v۠TZ(1oa7)f
-WI8zк8џyt|tеK)D䖢^,9Wnt .B
-*;`"lWQ|oa;d' !+cWzׅl-8oÿ{~Gx{ %
-v
-.lpcO<T<x7
-ߊzy#g}}Y[loWiOnW-u[I=l2
-I8C3~_&4hZ*'*3 gݍI5Lr3'2O3b/ވ.tZV1 [uVEgC()eCmbr
-hL>m q0EaM~SʭurJF#a7Y]hʁ#.#Pڃ$:WpM\Af,i€?ٗv\>ܕj9d(D㱛cg' rT3`CIIy fK<v|saPշҮ bԥ+wڦ>o7d!{Rvnbh<5Q/n"-,'Y7&F3*i>֥dtr$-9؜xC7KjS0r2BWg%JZTJ8t޵tqhn.JɥK=bzo.6rMD9^YZ0L_v\o@۳*KIIt mSURmBM ˁwc]4ix\9;8wb[>Ю,}NJ\o6M^SV)I|ݲZQF>)W3l%AҪ4ioLC8v&fwzܛ wܺkmp]#\KE_׶} wssΈv +81KGys14GߴqIwc#ӿv;wP"Ɩ 3C9P|Wkr[Q"DR.Dr:D.?P(j*:aV.mZrR/f=aDA&Wf|[ vi&z2.}FڝHy_{:=ܬ0Oo/;ِ@*["06r'8{Sl1{INuC9pTMQ,˿N /oyt%4|DW׽ipSGN#
-PX V@<'z=ĔKkY'=]ΐtф%ơ9s,Õ\B&9h\
-w,~,*s{-B}v60sC+{wװU;Qoím:w\/)=gxiBJ{ iګ;ܣPC+M t=9\ ǺjAh2̤­-t#|3܄Du7#nץpX1un5[ӑP*ɕD {>ݭ pGy0I@{@ /d
-.I .5ۗ{݅M2iZ8+6 -h ߊK1˜҆Tn눛d'r}ٿ`w76̳۫epC",n8=@9yC
-w^">RyXPzHM
+464 0 obj
+<< /Filter /FlateDecode /Length 3611 >>
+stream
+x]K ϯ?ЊDcc`ķ EC ^C=XR4Q~ERׁxoByF <bikF z{ϿXpڶ+xIJ^;<{Az`>?Ngh&:9!|`DDQӔ_=zmF/A7RlIN༬x\՝Zb _SJN\hxXI>#Uœ\%* Q9r{N:!Iemf^A K|\hiSQ>V̇OB <';I~~i,xyDžܵF8v8$ hgf PkROBt60(S4b"Av"IK81ݙl+%I2\A6I32煉J]p֖Ptfiq-[`DWz*I(`WPLqiu@z攟,(L-vaWY -ha^t5&@gFg$/<NvE*bI<?Gg?{ҧz2clObt(OLSϜ /
+*Q#3z,+H^bųCy%EnzT
+i;>i.*FnvZs/%$s4 4NoMg_+11G:3@:pQҙJgS뙴 ~QX=oti|bVZ)u:y-.AB1&kWOW>%FTAOa 1ЎѬQ*U{h]l13c'?eocLlv]G/WU63J:TM<4؜maYZO1\qA.d)l']Xs :#rbJ3
++4ijMeʫbhȸ&ф㟝p}tº(Z
+tQK^h'FCGX_Us̪ Yb5;$]H@>SH&VZі
+<{ ֽ gF Zf9 fܫ HZysD`+TK02CA
+fB>"^)LN"^YpsDY
+1VA>` "r-7]0H$$BJFZw Uw=0AM ȭ05 R Q3#`# B` l5GK 0 `} % a#p|sr&/xbJ{xP'M ,&h!%@899N:!J:@HHJUuO{!,]BZ}2-]i×MpnnHׄA
+'7GA ׾ aS
+7ЇTK(Ԙd "1)K(EK"o3G*@0*H@C-_?mͩuRuՅAP-c m@u7Ruw\Db EHq$` Rz|7b Ժ z6}P.}UW
+"^m@ +EWAG)*0;H/*H%UQ } b B@āȁȏTW%~7p[@@ZY*R*"^s_E,P {M ?3@0VŷU/ }/bUK RU/CAFEN3k;/TE3x[Aj 8.ddA  kحEA"HA@jaQ UE
+k s@F@k r r At@θ?G-"W "*$ %\LCOw1ד
+a;gz6-ߩKHJT& # 1O3Qk;6Àx$Dř
+5YpɅ/Lgʉ1AΙ'+:q)DZ
+rnz,OT*,wZ-4ִ{*YaUS%(3Ϟ1M1|T;
+#b+]BK4Lu˟
+#7W)ZANj(/_
+iqs IZ$J;usjWJ9$!URˇI0o
endstream
endobj
-466 0 obj
-<< /Type /Page /Contents 467 0 R /Resources 465 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 394 0 R /Annots 470 0 R >>
+463 0 obj
+<< /Type /Page /Contents 464 0 R /Resources 462 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 398 0 R >>
endobj
-470 0 obj
-[ 462 0 R 463 0 R 464 0 R ]
+465 0 obj
+<< /D [ 463 0 R /XYZ 78.37 808.885 null ] >>
endobj
-462 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 456.12 684.847 463.094 696.802 ]/A << /S /GoTo /D (section.4) >> >>
+45 0 obj
+<< /D [ 463 0 R /XYZ 79.37 195.497 null ] >>
endobj
-463 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 262.842 672.892 274.797 684.847 ]/A << /S /GoTo /D (subsubsection.5.3.3) >> >>
+462 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 385 0 R /F56 388 0 R /F55 387 0 R /F16 371 0 R /F69 406 0 R /F66 392 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-464 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 222.364 660.936 234.319 672.892 ]/A << /S /GoTo /D (section.9) >> >>
+471 0 obj
+<< /Filter /FlateDecode /Length 5133 >>
+stream
+x]K$ ϯcrhYb
+FY0#+OAfveDgrGE<h?"P9#Jm&`*\M->lUpbi*e|! 47̱7 E(
+i[EvW!('{dGc#PHm k\i"1 c[8{{n=v_ppH-VQҷ{;o'o"JOc=NNWqyRDr"XE'
+FZL12U6j1Wn.s/Fƿ덦a}Ěb&+?nL1ݰ!ո~W^ bMR9(2 f荃&4D,
+шe% u`WDQ$FɨJQ37HqkM go"ڠ1Z~"G?lz{%(%<=K5yQ+HcBkrԷz| ND4-ote]RGq5 PM]wM:g.Vb5Ԯ~ģLxRD"}$ AWh5i)EAiB,qY;sGYbW\0'qTQ޾*`Yb!{8 ~[n7ҶUyUyG5^ZY$:]?˿/K&Cנr3Ĩy[D UU3`SJRZJ§oK`.8oE)I<vV$ST:;_]DQUPٙB]؟̪:ξԀ)Dh8 exل#l8@Xh.bQMcwXSbpIǠ$+2`aOcPT,(u'AIPxb A JɈ
+:4-QAEPƎ=J,;&#n{;<o{Éu;9濚&`w>k!Opk@0oXc ZI/Pap@;Tӡ.5îk.aP_ʏưX\s2|m?s>mn3e;y4= Yc
+[q-h\4DkbWGk*G ',?./7\n~XSKky
+0XN:mN
+ôO9$W1$=m5ya*<xF`zo_3AlK;'lvM#Ъ^޾yp=M̃/pf^޾yӟw 0
+U@WaNDШB0kw{*p`|F 뻄%
+}.$-33 .Ֆ<%MNM1Sy2~݀Lm}6/:3Qq}:`69{XK*`y,ޫ('1FgR\}(}&BkbMv\͘+] ݤ3Eip
+ʉ޼ |ߦ^{eх7w '&AFM7JGO8)).=Ll8%~i>_zO8|O>/dagɦ6x}`?=u ?hw=슦
+VԱL:&CHʿ%ζݲA|!rLRQw5%x-풾Gh )樠7fϹ5,!㼀S|c'X!ة8nNm)2}p^ֽǗ:yG@ J8HLZJ@$U杌,`9IU¢Kpgʓ{,s;ʈsiX lȫサ鈓ENMI/ YK3UM~j10~p
+Glr@ae1
+wMü9Ta3'*Ds^Iv`S=jt5ygN;k vDEmͱY\ߒ;ea^W0Ix0TvHܘ\Ż{\G;&;Ł9cWg_Zl,
+ EMά CcOZ;7ðv(;4}wG7ҧWÍCطd|G߶Ү5o6G[(K=PO
+􉄑VwQ[ITIMUw?=Ioa~2jddKe,Jܽg7#dM$͔_/.lu'n' Se|p|Q+Rq 
+>wg  Jg혺G#
+endstream
endobj
-468 0 obj
-<< /D [ 466 0 R /XYZ 78.37 808.885 null ] >>
+470 0 obj
+<< /Type /Page /Contents 471 0 R /Resources 469 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 398 0 R /Annots 473 0 R >>
endobj
-57 0 obj
-<< /D [ 466 0 R /XYZ 79.37 452.879 null ] >>
+473 0 obj
+[ 466 0 R 467 0 R 468 0 R ]
endobj
-61 0 obj
-<< /D [ 466 0 R /XYZ 79.37 181.387 null ] >>
+466 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 456.12 249.438 463.094 261.393 ]/A << /S /GoTo /D (section.4) >> >>
endobj
-465 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 384 0 R /F15 381 0 R /F55 383 0 R /F23 379 0 R /F20 382 0 R /F66 388 0 R /F78 469 0 R /F69 402 0 R >> /ProcSet [ /PDF /Text ] >>
+467 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 262.842 237.483 274.797 249.438 ]/A << /S /GoTo /D (subsubsection.5.3.3) >> >>
endobj
-478 0 obj
-<< /Filter /FlateDecode /Length 4234 >>
-stream
-xˮ[m?`q<0]`VStm
-~%J:XM.k#Q$ER?O酗//?݄9/^8;9+Wε}*ɹo5?8ƥX
-qx;^!IRHU5,#.!cC9s0g,||8WY8S
- #Ւb]2kԥjjcqsFY8*8R*%7%DQntcr=&DhO /gVQnG
- Q:;K R;%]#M_t iFK!A ax$*D2d4]?xWZD8
-Μi@;|% A_OBuӯ/+2 }t}Dp(i6LF_ORYyU
-Ǿ7*cʫU!!*L$C ,b!ecdAAbUMc-X6+,ori vGaɯ+7ɷU[ Ysw=}- !Լ[a[ D-s 83Gm`
-]u'ZmRڏW;xMo rp' łud{n? fU@g9x飼|[\֙U{fTd
-$moH5SAQR Uq Xs(ȕG'RdLO"Gj/*xS88X^J[[nAob69\mئ3+0 v yV(z0śTfaKnm$ ƏSj&.[IĖ
-ӳL⊻F-!n$RW\u=B0}Av`+rgY91 gҟD tCzVH8
-G~mHW!p7k&L1M5Rv-SԒ.#098J:yiYb.fk+^`i%20e8:S ^וmQ1x `f-6,?ժk*BcH=VOm"mEs#h [H+6k1a;ɺ%UAH5h!Ӳf>Lµj=##M
-|t&bQq3NJ
-AW`
-17] 3@s ZI+lHfXhejI3apױE^Ό[~LfM_^a-9pa$Xpp*R9og-MmN r8:Dy,n6;_M>xK>@"kwPޠ4hUTI(¥(--E1^s)r$XNkcmZWdNHRZlGr#OFt>Uw,r`%$,/Ojx`#^@LTDR]jհ:8WuhI0/~tL[ͲC}\qMlo wPKT ifo5[g{<i -ERKRȧR.Ib54;.C=@O9$zJ,cUd9utݓl>' 쾦=YpD0-ȟ&>u+;0:Uz"sf'E`K{+$zшÊư;NVۓ \ ېÀ߽eNzB`looobBٝ' t˾K)ֺᨊ
-c{{qzFwlm9 {1c0(&Gj; 4<Qku9➣7Dd=׆ zKF+MQ)rR=uÑWzg=bSd5EK$\L)
-͖Ou2)"b< oyly頡Ebx:}rXЌR| MFCMTcOLNAaŭ.;5J DZK
-6 .t
-$}\C,x|@- >0}*$xMte\ F"zpIS)Ԍ\r2(aܧI?+% xYݼgGV#eg4mߴ}_H E\>Z-Ɔ05c}R* y=QJ뢣][{
-*y1(gd#AYs|17h˫o Jw O8 \2,_P~gכ $XPKF?- ;Ɲ-*]ʛ >y Ǭ2Ë,(HOYS&-^V 8j`XgvEcyKݞeHi[ݓD=;pNswY ><
-36V*ƊJ:E8Lv!dc]6DT d橅jB6t樊 !hXI~=ȆH@BCjHER6gZ 8IT+dFtU5\yC8E*:;m5G7\<8[A{o a<wo1FW*N* cS-bJ<81H@6r;-m܎uKh(ֿPCNG)Lqovrl.v2CuXY!ТGnm,9. s9]̅_R7qҢX26jnqzTrfOnꪔ S{AO뭛;̜݈
-endstream
+468 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 222.364 225.528 234.319 237.483 ]/A << /S /GoTo /D (section.9) >> >>
endobj
-477 0 obj
-<< /Type /Page /Contents 478 0 R /Resources 476 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 480 0 R /Annots 481 0 R >>
+472 0 obj
+<< /D [ 470 0 R /XYZ 78.37 808.885 null ] >>
endobj
-481 0 obj
-[ 471 0 R 472 0 R 473 0 R 474 0 R 475 0 R ]
+49 0 obj
+<< /D [ 470 0 R /XYZ 79.37 518.478 null ] >>
endobj
-471 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 383.227 409.823 390.201 422.174 ]/A << /S /GoTo /D (section.4) >> >>
+53 0 obj
+<< /D [ 470 0 R /XYZ 79.37 425.955 null ] >>
endobj
-472 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 174.175 381.479 186.13 393.435 ]/A << /S /GoTo /D (section.10) >> >>
+57 0 obj
+<< /D [ 470 0 R /XYZ 79.37 401.158 null ] >>
endobj
-473 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 402.977 361.554 414.932 373.509 ]/A << /S /GoTo /D (subsubsection.5.3.3) >> >>
+469 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 385 0 R /F56 388 0 R /F58 390 0 R /F69 406 0 R /F55 387 0 R /F66 392 0 R /F23 383 0 R /F20 386 0 R /F45 394 0 R /F40 395 0 R /F59 397 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-474 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 286.882 342.187 298.837 353.026 ]/A << /S /GoTo /D (section.9) >> >>
+476 0 obj
+<< /Filter /FlateDecode /Length 4112 >>
+stream
+x\K ϯ?Z`
+̼ðiӗT g0= Y@Js^5ԙcJ&#t^Bo7%4P3tTjhktjˈ <~kdz`8FajmAyW ib:%~KWIr-b7 )܆M)k3E+d4ԭLcA'LxUon$`h=? F Q?tf{!vNhԎ4D3L2\,Lg&N3:k[+]$ԊemOv9U浞R^}hIQ%ɛ1Qs()zJB@}W){[/TjRH؃[
+|5Pa"0/}goTJj؃^NԑgN*
+vܿ.
+%EjSȲy4%KQ0)`N82# x a#)lL,uf)bR-d9jw4D[|VeʹLc#j^zz!Kl,R&z^)s%My6qc91ży>?UӔH(q?jv}m(iydch 1IYn~f;#O_
+@Ϛ˅^f^~_?zpyAp1&KԝȀCue #1JpKPSpjH.sVsrm)Ty`mjִߑ#,ZX{_0 #gD|O30Ϝ^xz[;α2L]_^ja mt.^0m9tv>K`0 g9k_ɔm"wDm?PpBLx >?ȏ;oCJ] ^>GH#]m!bF ?/5 U/O_&Fm% 큛f}`jҴfߖȩ" Ձ%*=
+cc >b0E6>lа5'<'oR|uWqwUpW+X ?:A>}wAw^UJ!$q"8h]F~ra2jwƚ~y+|i;9^
+%+1 >,9:VRěZDNiܫZqm\K''uv#f8Y(i0g~
+/\.w[[K7h,A30bƑ]bh{-c͹ko zKf$qogwp'fM4{/z:\r8
+`]
+fm|~װAmAe !^yQݤPbHZPzףE.Hɾ`%/XNO>6-J~ żA9<4.Ј1*E5·g3[eTRyϛ)3bC"s]ά:B qB9 'Ȕ$
+E܃iS<O~ZIyNjd4T 4zc0S+jw8"ŀfq+RUbT\]&l[YSD/d
+4++Gf,e3-z
+V~c)FL<HdwÙM@8)jAN\WX+߭6M4ct8e=Mkƌr7($6Rwe8Yny 8O!:!BiRκ(LZ8OmkVkRAxS4꯭-ȻZ-VLO"f^My_6
+M|3fOӞb3SXzt"8
+Hn
+" ;Hj
+9UwFe` $UR)\~=$mWvrXkM 2]p \j JmXXާb ̩=J,ueh4Jpx?4k.??px_vCT^ϗ k7*Oߺ%j]Q1)ँ9QAnkx;S͏/3-j#B(ܝRܞٓj:6F%ƂqQ&
+t;1$)iKiwv;.SL{TJ
+E?~YwTe/4yhHa\ GH
+endstream
endobj
475 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 405.876 286.286 417.831 298.567 ]/A << /S /GoTo /D (subsubsection.5.3.5) >> >>
+<< /Type /Page /Contents 476 0 R /Resources 474 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 479 0 R >>
endobj
-479 0 obj
-<< /D [ 477 0 R /XYZ 78.37 808.885 null ] >>
+477 0 obj
+<< /D [ 475 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+61 0 obj
+<< /D [ 475 0 R /XYZ 79.37 691.623 null ] >>
endobj
65 0 obj
-<< /D [ 477 0 R /XYZ 79.37 584.727 null ] >>
+<< /D [ 475 0 R /XYZ 79.37 421.843 null ] >>
endobj
-476 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F56 384 0 R /F55 383 0 R /F69 402 0 R /F66 388 0 R /F58 386 0 R /F65 387 0 R /F45 390 0 R /F40 391 0 R /F59 393 0 R /F46 392 0 R >> /ProcSet [ /PDF /Text ] >>
+69 0 obj
+<< /D [ 475 0 R /XYZ 79.37 124.478 null ] >>
endobj
-488 0 obj
-<< /Filter /FlateDecode /Length 5799 >>
-stream
-x]Ko$9rWqP lWk4$o{X>`{emzd$3>*+||]}yE#Ns-/_za0]|Ra)U?㗟 \1NQUXO~ O'^/9R_'t?0Dk5Q(#7ڍqN8e>[1e
-sjtߔhbBv8pI3ߞ fq G zj j35V{[|cͣl% 
-36~ϑv66yIxbhmP˲hh#M_s]7 :BU.h{䓂jKj8/vi1dyOM5M֛gyzQvniVu.Q6w {aUBMDȾ53T0K*dt.`+yIJ/q3m,$E46qСN.6~kv9:y̼tuGpAHjQ*\{ZSb tl6p0q-ɼ[ICXn@4G٤H4}.ZަbKxT!y!ݹ;t$ F{
-Wk?9+p\}p0[a8FLLžo5c_ &{@RC8?Qw5VBiyXQN/ Qt3y\Q/WDWGNy|O|Lw.a}?wU_! kah&ʚ3a~0_LFH<d
-cfQ}7|`K=GF]Q~?)aB˔)X43s\R=Frp .z2T7L韃Endڗ2~= pot?GV 0sڧ*bN1fN7Za?f U8aM
-ȷ*!N -1\GpkO~WuEeD{ t}'.&:@i*ze_{0:3̺$u޻Ey֩h)8KG̒b֢Yީ*ofE9ީl{b\XpCP\R޴<(];8twyxvx]y.k3҄n 9`vFk|õ(#pMg[ 9v", Lntpм☂6s+ہe:n q"& ؚP0hNZE|aQKsoC*(׸*~L [5TK9)RG+Gh[A3h% e<Q?6|3&f2Ϧl5$ʱJ\mlԄST2{uThB|1 !clDo-(j89/@SE`lh"q3UT쪋F|}t#Sƍwig0~ %vܩ-9-QAUy , g8fC`"q>90MKp/[mYԦG۳ *
-BRx ؒ3J"T#'cxqwKoܷ
-
-VB饼)PwaFm7-MgoAy7֓g갋mo=G{o7
-(i޲z1)$҂Q]XZb!4PJ_ZKb
- dL^R|T~ q~]Z\HU]י³|khXfda[ŷmQmg~OB/虗1 yyz>ֱô]żG`|:eO~n54Tme yWlrgJi*rgfLTX
-n5v9LkKYo>YV`P x/] {NP@D(b<=39Ӕ!F-yxP$z1%$2[-s*
-]'S
-L)\DIXJfv&n%St- vG2~T5.%#DI|UBJQVCz (s 7r̕ne
-Mޚ|*O~9dTD Y_hv'^mՎޮRG0q >0]t$G }kg3qR5lM`>uyԧvB]iF4ڨIo3?̓Ny<i78l}IisϪaި/QVv{pAfcs]H09s⛴ `Ćf"
-fi
-o3pHZ0bboQB`x oN$c,ܒu:SoVya
-qU[ 0w5giʪ"f9IwrK3J,;8i7gLL{i
-h"
-/AJbª[RҬtJ Z8ȳ&8ںsh&q?gG14赖}G
-^ )M!ߢa XmQ5ZB4q$7q̶ڷgA>6چ^
--H¿׶>~m*߾6OB.fKc⇮QH
-@6w,IE/SfJ6Զu!YjvMY ?E>ywsϥx4
-Oً567j,;d(l!G
-4`Z^;ǒe' U&i^д*O4hOh?Ge#x}*)}JίTD:ݶ_/F^[jj~1ԒKG'4FE!0*V/1q*2%ls^(@$?ƭH"̿TetYA*%M
- YĿȺd wJ -+j%%IiBݮ`m^(Op_vdZ~,E+QPsg:  w[5!旃+~mY ݸǦE튌-|+xmq1${Ie8okءu4v߶}մ[v&oJ|<9#e.y5U/˺"gG8;r4\SGN`/[EooJ&TJ]b՜++v;oYnKHdWA8t89g~n9? /Vrx3Y][]ygئڵycw@TB)/IJ"^sVvu6ȢgtSvX;Q)O5d; fIь-W.Ae 籗ы0T)w' ubŬ5uNIмcB;Y6bCnl|XiKtavu?3
-endstream
+474 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 385 0 R /F56 388 0 R /F55 387 0 R /F66 392 0 R /F78 478 0 R /F69 406 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
487 0 obj
-<< /Type /Page /Contents 488 0 R /Resources 486 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 480 0 R /Annots 491 0 R >>
+<< /Filter /FlateDecode /Length 5416 >>
+stream
+x=ˎ$9n<2VP(kj}[~emIPD(2k>tWf$EER`^}o\_0_>p]E+}/˗?=1>/}L-Z
+m<c 竔ƴz
+/)k_w(?i3G{:53 <䜴o*ӇB~H*/ρ! 5|7L 0c۩W졇A "x
+
+R
+,Џv\ޔEO=cfQ';5$芭sp!Yㅯ20vJ.s!OY'-0л6e\ d@/$%9ϳu):~OJ n0Z\4"D\S,fHдo}h(lTW5dfcmvdmxY[m7milXځTElOld,"uП'{ žEjH<lMrU"I*L&ɾTБ4&Av4ȷ:Eb
+<@ʿ_VlrE"_ׯwJj䕤_t`A Hԛ(HYZ1a4H;qFM9Q'CԤU+]٥hf;r↴ R}uu^]5O_#5f@
+ݯ_?v/D#=xȿ]>KigJs;H,m* <KϿ~DL}
+h.W+ #=BH@?f3\7Add8" 2+ \hC
+ C~Zpc^s`' װX
+=kPiADP6D0p]n
+uj[R
+O~oX ?~=k@)1#gjƌN.bS >|b ־ S zdXܽ#ߑ(oo'ui.~DF(ҁ9yX[Ը~I.BbyiFK1#6q}`-mPy dM#Z)WBIM Tu ͗%"a1'r"Y\H+Ys'0H]6Ko3/sԸc.C-֖g文5^}qΗ墈B]^7_Tpy[j:.T`kt7X].OͫN|?чO;?Qo0x/4!7 녿{`<s"Jb_Eb*|H<Uۑ׬hyӧF禝8k%{!rt־哾
+w놚Kqw}*Ķ܊˻.E|q*CmZ~.5lE+wQ0+TB7U}ŭA{Brpv砑@ƾpH9F[__񌵢#zuÿt7B]za kZ%]
+endstream
endobj
-491 0 obj
-[ 482 0 R 483 0 R 484 0 R 485 0 R ]
+486 0 obj
+<< /Type /Page /Contents 487 0 R /Resources 485 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 479 0 R /Annots 490 0 R >>
+endobj
+490 0 obj
+[ 480 0 R 481 0 R 482 0 R 483 0 R 484 0 R ]
+endobj
+480 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 383.227 660.388 390.201 672.669 ]/A << /S /GoTo /D (section.4) >> >>
+endobj
+481 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 174.175 632.045 186.13 644 ]/A << /S /GoTo /D (section.10) >> >>
endobj
482 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 456.048 271.858 475.754 282.916 ]/A << /S /GoTo /D (subsection.14.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 402.977 612.119 414.932 624.075 ]/A << /S /GoTo /D (subsubsection.5.3.3) >> >>
endobj
483 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 491.475 271.858 503.43 282.916 ]/A << /S /GoTo /D (subsection.14.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 286.882 592.752 298.837 603.591 ]/A << /S /GoTo /D (section.9) >> >>
endobj
484 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 164.202 224.147 176.157 234.986 ]/A << /S /GoTo /D (subsection.18.2) >> >>
-endobj
-485 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 158.601 81.696 169.058 93.153 ]/A << /S /GoTo /D (subsection.17.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 405.876 536.852 417.831 549.133 ]/A << /S /GoTo /D (subsubsection.5.3.5) >> >>
endobj
-489 0 obj
-<< /D [ 487 0 R /XYZ 78.37 808.885 null ] >>
-endobj
-69 0 obj
-<< /D [ 487 0 R /XYZ 79.37 771.024 null ] >>
+488 0 obj
+<< /D [ 486 0 R /XYZ 78.37 808.885 null ] >>
endobj
73 0 obj
-<< /D [ 487 0 R /XYZ 79.37 499.967 null ] >>
+<< /D [ 486 0 R /XYZ 79.37 396.809 null ] >>
endobj
-77 0 obj
-<< /D [ 487 0 R /XYZ 79.37 211.188 null ] >>
+485 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 385 0 R /F56 388 0 R /F66 392 0 R /F58 390 0 R /F55 387 0 R /F65 391 0 R /F29 379 0 R /F20 386 0 R /F23 383 0 R /F45 394 0 R /F40 395 0 R /F59 397 0 R /F46 396 0 R /F33 489 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-486 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F66 388 0 R /F15 381 0 R /F56 384 0 R /F58 386 0 R /F29 375 0 R /F20 382 0 R /F23 379 0 R /F16 367 0 R /F57 385 0 R /F45 390 0 R /F40 391 0 R /F33 490 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
+499 0 obj
+<< /Filter /FlateDecode /Length 5074 >>
+stream
+x]IoW19 }ex99%l^."Yܺ{9B9"]|y~jX|[[|ȹ??O
+!wf@^O>]WP퓒Wr,(ߨP 4/f%>R:Gyn >gwR'd`bk&ao^Z9h-}th6'AǼ#O̵ 3+n$FP2i-ciO^?FDZXTF>f)ew~ )ǙsymDj?g˜i)Y˗IA%%˧t8IR'ň=Wz\gBTuq.xu2 uл4
+']?aT/C^Sn'+2 S>0Y=RByC%)`Հ_րYۨJeZEa X@p5M/s}y
+xj<uiZՌ<\|1sv$+6$m{]WVW,$2kdHdǰύpAvp|T"\7chl6Zsq#0"Ŏ
+󺞋o2ڵZmc۲[e*(uk/m5y-Z#Sy=c\uod՜q/ `'TfҐ
+TP
+vPFY
+p`
+N&ځ7hM)̴P^[3u>5;LXfY5x}*wk/͞ei6j[.5{I3Ʀ8Xa>Vq\3JZHSڣFqfl}oAgk%іwmߏhUhﯦM{Yo䬡khK%gW#Ұ
+5B,Qr:Q
+ܒ)8DC4V<%e&TTૡ'zđܯZ +;؀aRylGkrFre$1W5S Jc6~e@V}S6! |<0C FQbn@6bp9D| R6sK+S od#_!tzj]8ÌQAPxaB>q"= zK~T:l'Z]tBu<#Q,({~5*JџeS,Vb3YA
+iÕ+F1)fh`<nѸp9<?asŽ܊tB(Z>VKM'"(uE3A~iV.ݫvK6yN\ &./a8v{20)D[S733+w y]!a%XsT>F܏|؇@)
+< cl5Gm!83n%YmyQ
+5ц"v)O|!0d-Jn{
+*#H ;',{;Kl +P6qz 3NBz]Lsv}aC[vp=_[jj#ۓ[}rl}jd%T5`q>ƞ=_{^v+)hffh mc<Gz .vlj嘪21=_ZYTtzg*EfLNnw"c˜ֵ ЌJ_Vګft:jf,c&
+Dd+nS sɎW.>:>osX^ ]jaզ|^kQ1vΦeRB1%]{hPx/LE0MO$7*)X( &%I%I&|_z iLp WKX\ak*i#)/^x*̼҄M5hsfAT2n:@\lL=qu{? #l) hqEuC<oߋ¦QEDA:H%9>Wڑ
+͒RNSA_
+N:!= a@է1 > W` Nh\}C;I ry &11'taX j=o+l0 :@-dP1~' k=xepq _Nk^ٿ/1!btVn|1մbC,fYS1dJc {D;0\ʋ4: "*)\k4\ӻ\k+Y#vj};vXz2:)T⯛c8\
+#D[ΤJ;L*f|xgKc0^09)/t5v
+jPIvZ;LQ~ӟ`XrDS˜|(a̭V6abn<ߵX FR0U`绶r#x6UR}[I\SFm'*)ZpgԢ(
+1Ks/ǖnؾY)<fnbc?_ÝR?XW$Z|B dAyi.{q#(׺~In{J <Wq޵oQ ˝KttFxGr;W#Gw%!J|?V%EYfԧ;Zj%ɧ嗷]/U6_xt!OK4`DE8k2ڤ@m܂@Mm .am3`l}!W#IJCAw†z?<j%ɃyJ+gJ֞6*I+BgdoMNxޡT9ܪ [٪$vtl޺ m~!7.@B1t^"yԔкdB5k&e<6Ɇ/ѺذdHm73u(l. p &TE|d<âkN4MBq/M~FO1V^qu&5 @QjŠFB9+g7DOn%2.r A54~*`z%tͱAa:}˰2n-ԮVo};څ4l)tkbbտHʕY%mjS
+2AXU3%%Ǧ^~IxԥmNF9d~+O.1fn[SoO9V26*)kHʺ
+S!wZwA~{UJ[0jg
+endstream
endobj
498 0 obj
-<< /Filter /FlateDecode /Length 5207 >>
-stream
-x]K>4,x 8M9$ 流d[-QY=bWɏУ'>~*X/'1[1}2Ĺs#>J;yrNjZ4.^JhZx F`s T퓠$ġX)9 _9Q#d隫H!24H)uxqHkT-?EHЃ2g_oNgˋa֨^|u ޯhen4u#MYTqq"E<INjRjF(m]BHXǬ
-8$q$ю9z/ `=gAt,fI'iD2lH QEҊ&zc굚m啒:v-OgѓΪPr_|jr*pX4HoLREPf]~#,˚`| FjG1rG%dƅccg/]'2Z2aS'+Qg >*]R\KZlilV,cic\V|/UQmqEnx *xUύ Lr3ˇO-b
-LVI%
-Sҡ4pϟ|Paw‰3Na |%z0cmNa `Q̕.b bb
-'-YL6Qo(MjgKh+0DN9Iz{{%ԁ_A}K 2΀
--Ipe ը-39Qo1]0
-v]#[ +aO}~$YycxzOD=qIUw739RWMjfyuQꉝb!bܙDDiQ7 [ҌKa$c҇q.vVeKdWJLR1w&eK0QWV7a.q^
-k'MhQg9҅rX
-u%PIZ>+q+rݛ۵/P`,a0!$~R?.^5aZa?dXe*t>)CN}$5:)Ǐ%tSO4R fEQR11Ց[4--#)?,ʂȾb<rcì$TA5>V-0ۜ7\ՂZ,x=%iƕʈAX['jQ!RWuK`U4zR6©?=<fbE
-097T.Sgmӟ$gntvx-)}n;C(2:9
-URN C bW\#|&ᷪD4_35bIjU<A͕|uء
-0~%^V˪%\VlC,$7: `L87ޣf:ΦoRK͎PZ/RPLo(ǼRL3˷<މ0WRo)ԴZޛpbq:0qZybN^~ʀ8Q  3?^pY1U·Y*<o߱XF<=QoAWI
-_,F<(VG#~q ScLU:Sc]ŏa- u܊F ?W5i7kR)յL=kUYum ;-];
-dqƭMߪg)nG-S[[Vk [|-k;􋵍͟gavX8@9D4y%On$)~iğ nN<}r7
-hKnKv$mIOtʪJ*
-vMP](8f6`qİi:[ۜZyÀSk&ỳ+JnS6bb
-Z4w7׹hr5{!"gh+|~mF/pY|S:f¢|b{:͠cR0KY40۬h)Qxef2g凫$R@@ \27( Lj+Q?^GȟZwCI<5tگSyMmf\}+c&J&_\]ګE
-endstream
+<< /Type /Page /Contents 499 0 R /Resources 497 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 479 0 R /Annots 501 0 R >>
endobj
-497 0 obj
-<< /Type /Page /Contents 498 0 R /Resources 496 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 480 0 R /Annots 500 0 R >>
+501 0 obj
+[ 491 0 R 492 0 R 493 0 R 494 0 R 495 0 R 496 0 R ]
endobj
-500 0 obj
-[ 494 0 R 495 0 R 492 0 R 493 0 R ]
+491 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 456.048 542.316 475.754 553.375 ]/A << /S /GoTo /D (subsection.14.1) >> >>
+endobj
+492 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 491.475 542.316 503.43 553.375 ]/A << /S /GoTo /D (subsection.14.1) >> >>
+endobj
+493 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 164.202 494.605 176.157 505.444 ]/A << /S /GoTo /D (subsection.18.2) >> >>
endobj
494 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 429.173 233.701 441.128 245.656 ]/A << /S /GoTo /D (subsection.6.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 158.601 152.794 169.058 164.251 ]/A << /S /GoTo /D (subsection.17.2) >> >>
endobj
495 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 401.358 221.746 413.313 233.701 ]/A << /S /GoTo /D (subsection.12.4) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 497.51 144.38 514.551 154.786 ]/A << /S /GoTo /D (subsection.14.1) >> >>
endobj
-492 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 497.51 115.666 514.551 126.072 ]/A << /S /GoTo /D (subsection.14.1) >> >>
+496 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 88.249 133.702 98.706 145.159 ]/A << /S /GoTo /D (subsection.14.1) >> >>
endobj
-493 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 88.249 104.988 98.706 116.445 ]/A << /S /GoTo /D (subsection.14.1) >> >>
+500 0 obj
+<< /D [ 498 0 R /XYZ 78.37 808.885 null ] >>
endobj
-499 0 obj
-<< /D [ 497 0 R /XYZ 78.37 808.885 null ] >>
+77 0 obj
+<< /D [ 498 0 R /XYZ 79.37 771.024 null ] >>
endobj
81 0 obj
-<< /D [ 497 0 R /XYZ 79.37 197.28 null ] >>
+<< /D [ 498 0 R /XYZ 79.37 481.646 null ] >>
endobj
-496 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F55 383 0 R /F56 384 0 R /F20 382 0 R /F26 404 0 R /F58 386 0 R /F23 379 0 R /F66 388 0 R /F45 390 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
+497 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F66 392 0 R /F15 385 0 R /F56 388 0 R /F16 371 0 R /F57 389 0 R /F58 390 0 R /F55 387 0 R /F20 386 0 R /F26 408 0 R /F45 394 0 R /F40 395 0 R /F59 397 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-503 0 obj
-<< /Filter /FlateDecode /Length 4574 >>
-stream
-xˎ_G4`!pNu3|%HbߧHj{Ūb^nQoowpқ#Ns-c
-[ݻw8i<s|1
-qm_zf#RM)byn<g2R>H=Zd`t?6=@ug=?=%2q% 5=WD_Oc(ߟ2EђOm\"s{IШZP(G(sw_6
-[/ޘAV|escRsg '+榃>in]@kvI
-ۓ0TU# [XuC  QbY1 :>dz2`+_cO
-`-_@oۡ_nhJ&
-w5-C:Ԋ} 6)+~h#PW߷nVIgal2x,Q/x3_?_XIhc 67ցl {y<q"w<{!w<|Yț{+m/2( gf&; QZ_m@p#-iXIPg󄏆gM'aVrȫ|jK@cЛ'gcBI)aATVQ[4xN"(Վ'B ஒoAbƖn$bȠ0cmzoYx%vZ:98nCspV`HhJw49FWSxs,!-ǨälӾ>R_)Z\Yn4noPQ0#4 pQ7\`:=&
-|&hTXJ'UŎI#: 44s"G>4J37 Gq1pE"p\͙[5r]Fn/.C30xΔҷa- }t1n;1V7Lp"[﹔a?
-B_1y RQ/>"/"}aŸQvVaȇj׳7#yӅ sFW;C)AoIW9UUe`-D&EO鱍]9¸O!ڔ()n2^i & .4pJ֒O65^lj[#= M<?܅EyzysÑV+u/?YВE4yTsjSs@̃
-E<XMۉUKf}( UdP H@d? LX?2<t*"d҄ äeZf[&2Azk(Snc̎ڨf=15F 1qDgFQߎbKva\o [{F11s(2A`QT4DFLc 3((s}aڎEba Of(Y
-("YVJ}
-ٌ<'5 pКIN.M[Pe?O3]ΙM'zI2PBl>d:j;5ڑJy0OWo;(m$~5Ap`9Ub'|ҩ6ULZʔ9NڐC$r[k1M.Z6c.L_j2b:wH*C
-Ar9K|ߕb$#\Ũn)fFMPz3:LK%&[R U*$UWWd)A|Gt,"-D7f#i!{SKfxwHA;عFDYcǦrezWz /;HfTU_ Ob#av*"
-u"8t 3Bk.Yb3{#
-&ߟ2\*U뻯!gKsE:[ES9=C[ Q QbIcBp+iBvlgYqe3—73^%@Ef%oZӍ+H9ns5B6-pܞHxANc~` gh"&Edjc4KLpg/-t+ɥ
-fۺ*RSʑrT':DJO
-mY,RX\\:% vW[[SDB^VXR VײP5ap{&Ԕhz;R$8Y|Y {߷I90=G<=>~+7@ЮfԀR  es{<MK=f[yqKP/|#Uw0Q,o^
-op:/HHl3$LD G p~$`5E3g^&?$5tc CP??OjFfhJ|;mj6u57hGE%)D[NMvG׌6&v;z i͈= Ip
-Iľ+{"mܙUC;t[⪸v8bfʅ
-W m-RY Eʔ|,gNG6I'3N8dCj6~Η } UZ9Sv+͋_kgc1llbc!&S5rs/n$Gw:鷬ﴤ8.ӕwF.=vNjcNs&=lr|r'rONlfK/)CjNDX˔T1PM.-+
+506 0 obj
+<< /Filter /FlateDecode /Length 5191 >>
+stream
+x]K$ в`g'c9- {!zKgƝ=tWIIUE)Q\(oY{g/8͵|;D.a.F3"󯗿>P%#qHO i4\3@໒<S >yuo א4@~Ǟ=O.J|zu#RZ.B;">bz=zVԉOs;Y'Jpk4=z` o7o(n 0$~Ѫ-$n͂\McO1{ ~$Z{\%h{Iv{LeOw,2ŋ3ܾh;+|׾Vhe+A,[=_D=bf#j<F{ЃM"ʾ/k5gP4 X97'w_NjΪ˿/~t|
+a6Ԏr{
+bԀ؀KTˬ>a\F1©E~NfjmNN:іz_YuSo+dS֜0
+a ?.;^ o'[a>p_ NɎ@7%90^3g'
+\%>ĜȚ9[
+,\ ֪Y(fꈟ)_~ n 't/!.2+9x7]+:IvgZMCho||Fj
+ִXN1N<Xs̋XRˠ2T{+K8ޔ,vV>_e /ޮFiGxx
+7zn{1DhnW 7c'h !ܜ͘"| {@K?7'\ 'H>s*{2>- n Q~=ބS'csZZ;&Mcb& 8=zD*_B8
+L K!fXX
+`E9%dĸvi2mkD#m^9|wt.ϓ˄ 
+|!rˆ ijJqh"B:-ATh`k,G`-S" `A%#K^rCEepT}7ksHݚߴ5E|Cg
+BFcY¬-Γrz
+
+_Il\!x2ƅƢM:S?!4@>WЈ:lՄgCVY3b\g:_!٘fOJ;6~X'
+mW1fE?σ%5<0 %#(y
+hAH@~,錁0:$88)
+R{k-#a*\UzJOTҊ,)9`ySIyvmԳlhYAj^J m)R
+XD
+gN{nb8)WHK͚:w%]+zPXkFhX8عlW
+CiN..)_=tf7כnRv}[ow,İ:z5a48I݊#A7i5>݀)Ljxk" ?LJn& v,,`Oiy߲YGݿ%ʽj
+.c}0kG81^8K#Zx;\K6r^3k_>ˆT8tX LT(8P&Goa}?ڿyW||jO$Տ4 $ƣ$UeD<M*,].Ӊr̝֖t&vcNx>{Fۄ|6!7 o#ׅr\Fq™Ă N`!baF$) <.n7MJ2wZSy('aVp|+O<[Ê`,X1 B暄V2I6Z:
+1{uhS*mɔ[)pC-7 O?w\ XDXdm.ގͼmq(rn4 NigT_tLo|pw'Yچ K2؁4!ɔG7s~J9n۝SwdW:$f]]Pƍ4n`ixjܣMlc-qalx;2S)"nf?doe6އ#|FR˪<"5
+ݵYS yKQm=fLSZFUuaeY۰YrDZP <d[trFߠU:0 R%JE׌dm\ 0-BJϰUܥB|Um+BV
+V/JU?m]GQ0]*檦"&X3K܃ f}͌@'؀q<\mGYF4rwҒO޵uUecVUs`)ԭj3J_? %8tA"IS׶|'hW. lábή!q˿Ċ2 nkL!ELk"aj w뮶 &aVciR姥|?jT\zƕ_}KjX ިN+z;XMV#avyV wi"9}}zIo;IX7.n[fe<rYWOC"㖽<M^p38lft*v]tz$Қ=7I9H쯓ܘBՕY3 SxPBwbG#]Et2XZ)tk%TYn|J?$l7Nhm qcXnp?_b
endstream
endobj
+505 0 obj
+<< /Type /Page /Contents 506 0 R /Resources 504 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 479 0 R /Annots 508 0 R >>
+endobj
+508 0 obj
+[ 502 0 R 503 0 R ]
+endobj
502 0 obj
-<< /Type /Page /Contents 503 0 R /Resources 501 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 480 0 R >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 429.173 443.811 441.128 455.766 ]/A << /S /GoTo /D (subsection.6.2) >> >>
endobj
-504 0 obj
-<< /D [ 502 0 R /XYZ 78.37 808.885 null ] >>
+503 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 401.358 431.855 413.313 443.811 ]/A << /S /GoTo /D (subsection.12.4) >> >>
+endobj
+507 0 obj
+<< /D [ 505 0 R /XYZ 78.37 808.885 null ] >>
endobj
85 0 obj
-<< /D [ 502 0 R /XYZ 79.37 654.722 null ] >>
+<< /D [ 505 0 R /XYZ 79.37 407.39 null ] >>
endobj
-501 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 384 0 R /F23 379 0 R /F15 381 0 R /F66 388 0 R /F65 387 0 R /F55 383 0 R /F58 386 0 R /F57 385 0 R /F20 382 0 R /F45 390 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
+89 0 obj
+<< /D [ 505 0 R /XYZ 79.37 241.798 null ] >>
endobj
-508 0 obj
-<< /Filter /FlateDecode /Length 3951 >>
-stream
-x\K?04Y|4ZX7C'!Q
-fG Pkw~ĀC[M=
-2C NKi:A&2iP^3U?QyR.GU+6?yu9=V%91:Ac12 !wI4b8ir 3uvfW >#h{B/PzZӚi :u-^QRe?{PiGzH
-JzMRGuJc3[YmN)ҏ(pKi\ nDmıғgy:t,IpD#HeqQuw0r(|Wz)ԋp&|c{KL|+#9(|ڗ磻iCi7(զ]%&U)Ie`5|&3wSY[f.|fU<@61ی\Էf :yoGI]vs7~9:&D{:B1jVř^U芦ݞB]Ft^H<-YD֕V9IG;sab}鵬٫'5vx͚Ώ4omE%m ts]nLպ]tx8~NHQm6[Ӳ,Y(G \\זD<>Ko
-^:H{-ѺL%WhGZ9򜹆RsLٍM7Fm V(SY[neZ$|>'-Aa;pnkOlKuRҲ١( m杺۩uħ[4o_ D,.Qd.$ EVttz\sVG\Q6KeUy %=ZOr8rROZzUJS V;L6y˶JŤ3m1X|>"{)^p-7̆W0pgĔ5c"umO5iKPS}뼆Uz/d<i$+:]?!jm<6":F,;8>}[USUw!8wGh\y|2؟Q9|tM;=v>dZVk;UZ ®u 릣LXDe oɨ R#Z[=SEKUe'ZcDM|bTں#-QƷ&hUCIs[}Ã!}۴L*1הy;~+a) M/.#xTgބoZ
-f$T(}8:n'?x1O|p~{wjي7=4)˸ȍ;$FV~):́8Djﵠ@a+6 T)1\`9CeAZ$а^>8]L#W"B< Jܟ>J2.0%vJdѼ5H=~e100
-bڝ"+yfI(m,OkJ캵or GV MLT{f2[.h)vtQzqrM#Z7iKZVsǰ}RW"Hu nZh;#?*ۖTUcK\?(d7rxvawaԨ)v:n[[zIP'4̉T$21|pqV'=ĢkMhsj. URl&09 N}u46B
-yӚ -*8fލKmAj9P2gr~$E)]c~.]k}Sgx!w AgUUfJWO$۔u=(/ef+.1opBUC\Pʓ0*%^*Nh ŌyQr˸N}F ,A)-woƺ2Yd c:l,kH)]9vٌ1xXô4C!QaE=B/ܨhbäws;׻ WuMYL(ս:԰My橊R }/j 'x[UfUOQ~P˾6)mȶ7Ont\ۡM]#E3; IŔOmfةJCAAs]wB)ۭSy嶭[C>N6 $o7R3 :Q #n:vխRqsvY[ @T+誢.<ɟ|qc@Gs(:7n~Fi413m*  NJ2+ppҵUJשN,.%ެʝR]-թvPV{
-endstream
+504 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 388 0 R /F15 385 0 R /F23 383 0 R /F55 387 0 R /F66 392 0 R /F65 391 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-507 0 obj
-<< /Type /Page /Contents 508 0 R /Resources 506 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 480 0 R /Annots 510 0 R >>
+511 0 obj
+<< /Filter /FlateDecode /Length 3696 >>
+stream
+x\G%ϯ|xY`
+40 etPn؁^, [G/bi\ǂa)1|
+]!jc:fMdC<87i8y:
+
+qKFx;R,M]kZg#5g.In %xr1WoC B;*"亏in28EVhͭbl'WXL`"
+aMSmx3:MzW5bGj_L
+Y୰#8
+& ~9hP:g?|q(نMBl^3 8w[~_"r"J'zj7I3Ϝ]phϔ"$orN1neGAZ!#.N104){ A)ධSjeQy2^I_v
+QAjEzY>6RPݫ;jiVL$'/[H-UZ`}u ù7 4*ʣv9ϑ$1me'u|*Β慄㛭XXY.gPu_LmpC<]sS&c虵FzZz^k(Fr\ƕ د̼),kq*B:L*0{W9XUΌs}y 2ũu:1Vj@%nuZ ^#q"a :*!鶏QދVֻљw%r3C)az AAWQ\h*LSu!.}B5UPPC,L js,}$;dN-dI?W1g}s֭K@սl
+ݩÌOĎ,o,%LgίSy A2x 5bc"e$c؟81rA*y,=h=Eop@k6*8=J̆S&
+@AU=`1i0bM; Wt g>aHdž56f?ujX>f|؇՚sXR&C^f%mOfn4emCˈUŭ3u -]sĄ:75Z8 s;2UNJ}Y. 2\@͋-ɤe']Rk22_Х`mb%0ɀ))i
+
+nřZ`zX8{͡欭yg+6V oﱁ4 uy/ p-\B@cbϛ 7yZ&hi$뼽CN~YʭA!DR̭1C()PLU
+H*ytav=uճhR_!LTb-_
+i3:,֖Iil{FDBW:O!#>1ϙ>gJ:‡\rj\qNxz`:6֘my϶ìwi I/af飸zp^7tupw8">{(MLfń!]Gw90fNO:$Lu92IޞFEMYΠ6p|*gOt+{ַ~}Flrf',g9ѻIW M]
+qlX+
+?MwM8Y.C
+endstream
endobj
510 0 obj
-[ 505 0 R ]
+<< /Type /Page /Contents 511 0 R /Resources 509 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 479 0 R >>
endobj
-505 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 300.561 155.143 312.516 167.098 ]/A << /S /GoTo /D (section.10) >> >>
+512 0 obj
+<< /D [ 510 0 R /XYZ 78.37 808.885 null ] >>
endobj
509 0 obj
-<< /D [ 507 0 R /XYZ 78.37 808.885 null ] >>
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 385 0 R /F56 388 0 R /F23 383 0 R /F58 390 0 R /F57 389 0 R /F55 387 0 R /F66 392 0 R /F20 386 0 R /F45 394 0 R /F40 395 0 R /F59 397 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-506 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 384 0 R /F15 381 0 R /F57 385 0 R /F65 387 0 R /F55 383 0 R /F58 386 0 R /F45 390 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
+516 0 obj
+<< /Filter /FlateDecode /Length 3846 >>
+stream
+x\K7ϯ? ,@dY9e79l@U|nug,KbX/^8}廇6gހQ˗^vXW ]L+8Wƹw=یYVڴ;~|q=Lig26{K˔c2
+y3a8"? OifOHZEYoȼ~b?Zȸ_?b[\qTGRJ젪#U5=˅q{@6a4gV@KJ[qP#mH2Rq]%9QW&!Pmfk#v.5n`NI huV5BZE%8st<89 e?uU}ih=%4:NPgt$#,!z \3!SR͚WfL޴7d_m?$IchuDP= {CZ\$T_t^RL(`\`:ח?zwzkiδ.ңb0Py'R _KI܌<P_x$o%ҝ$F7GR1
+T g:3D [p={ܘTD 4/_h^>+GfymP.L%vLZE +ҏA廇{7bh#ԂLS:x|HU R,qڵ)E>^%h0 C^R&58jSxOFޞGn>|
+ZG
+6]CV!:]k݇*ITǫL ҅]hL
+xl))S{L-/A5"óӲr^elc$~4cnv.⯣ISv{o%F0ŵt0nh4|!," 4)zdS
+%+hd4<8{\{55mOe&_ -)|qϔί-hS8#bO7C
+Lx7RHJ<4rjzT%YNYfW59)rQq.cZ{xT'8`M$+lOT{Eq#Eq`REPRZ'Ȇ g!Gxؠ2œHPIFڝUww 0Ix2R&v))B}l _f=m\xkl ` &t;b]V3bw``N'c0k*N{΅jFeo@Ϥrhh`0gB_-ynI4u0DO1T(R)ObΡ+%{$u_0Ja 0A)ȭB)"9t!('1h8c!( Vz&G> Ja|aψyyz <R1zSa
+M2A*@+0-4gܢymV3 >}\KvTFaj=k4{㌁bb~b/!J&w$煩 -'2HYͷޯ ÂIL⩹{457I/'@BY.URp$ "8F'#1fל2t- $H,-j]E?/ŀFK` I 0
+ J&V  DhŽ,{SB@FLAt18 FFQ'Pһ0b>R[(ågr6!<4c
+EĊN<.{d4G e?q=wØ
+~(]#`>bӜg8
+ޕmB-N2Qa #8/\,.ڻ?,*Éha2HcrxO9\O@YD滄8f)
+endstream
+endobj
+515 0 obj
+<< /Type /Page /Contents 516 0 R /Resources 514 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 479 0 R /Annots 518 0 R >>
+endobj
+518 0 obj
+[ 513 0 R ]
endobj
513 0 obj
-<< /Filter /FlateDecode /Length 6710 >>
-stream
-x]ˎ%7rWr@aUj
-Ѿ^X%ل8;n7^ϑSw)g@SPA7kG8[jqq?'֜Y}&@GZ4i Gȶ r옶PI}#d?EW2@37Yzs{0|C.30gnm0\/30gnt1@Qtb )RpЮw/C1 -ͤ"5|r\:ցXEzxk{Z50f<,}.%مl'r[8nLGr?ClꃌgŶ{MG'zy sf{}5 ZwѶZ)vQtSnYQ/?KҲU3J
-DtCBevH C;' 9mH6  SD=x'JʒH 28E:i$(^
-WS9U[3 v+fm)(HHC4 R~1! 5RHg>HrqE7C
-/.+eڥ{sIxS<aV|- "a
-w:qgBb"Bز*F3,&ߛA3i2E,GB@$ X&++8bB|W2-'2^T%3M |3 i9H|,D@B@dmr7-MvNs8g\,Ɏq+0'2`Ȫz2
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 300.561 135.463 312.516 147.418 ]/A << /S /GoTo /D (section.10) >> >>
+endobj
+517 0 obj
+<< /D [ 515 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+514 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 388 0 R /F15 385 0 R /F57 389 0 R /F65 391 0 R /F55 387 0 R /F58 390 0 R /F45 394 0 R /F40 395 0 R /F59 397 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+521 0 obj
+<< /Filter /FlateDecode /Length 6719 >>
+stream
+x]ˎ%7rWr@aUj
+2@c7W$&fT*R[eGdxJݼĹ6?7/@!m֭u)nma[H&9)@ ƍ|j +/gKٷ!i ZPվP
+q1_z y/[Bw!7ղζ-ㅫ*m 2I;*a6˯T̖9lHO_OPߞ ӧ}'~.o!T/?䶀-\_,znSOR6Ss2&#R9Ieҵ06kC_[(}m' oo.o5\n
+1=ЇܙS-$ 2cI-l6-D !a C LSJ-VfpĄ.SD6[J
+#4 +deEF4p8Z:Iw0$'7DR˛>P$B 6D 8;de7P+P6x{&$-F.C?`\ |ZB(&HH4+deGLCee)<B
+2&d ER+0V%X8
+q*v0=-cWym[.мr
N0+xWm)#RA3:iŁA[ҮXS)r
4v̍8'Tr,ږ)nX*`ؚ@R'n;Qd bnVPB\:ȗ@:7 iۡ ^O-nD`CR57V,
!A=t]2`{ gld2$=z"aF F1d)Us#މ"cs;2]d(bJ xI^8#Kͣ"/
`˖DAZ )P9r1snEXZAJ6$R5+(v
C
-5PS<JW)B⧳r!2Jh9^9zF_Ҟ>M7tͨ o7<+l,㞞+[Jz/h[}(>t'|Gv>A_v aсPa`Ut݄.:E/:)O-UW(k,gڐKIUKtn1Hrܾ/rS-|f-77Ƥq߃ϣ[5خK. {,σ[fӻ#nT;+Ox}îT\'ܓ w27Iܚܙ-{kk须anݝ4q TH{|'{zĵCܿ<Az' C w/O!|ۡދ ~g<xwP8^6k?ryMЕeq^RCy8'(7^ϑS{y9g@SpB7kG]p0~9޴\w &G({h&Ьڭ zteޚpR{k9ք & [.20gޚ8BFx/>׮mHW&Z(0{Z<&g<?|G1mSJ\ܟ|=SxxV]l,n:xdXK 'cMf)Lh ޕ&4ن$>&oVC=U#ax
-@8ܤ$iE%Iq^?{Ua3.Gİ!S"EN͙~r(*D31Z鎘C
-*6tE Tns$hW,I)xI
-R^I&FZ\tx˄Ue؈ 2I&6Dm
-@dbCPĂ^f«B.V7FML܌r=r{_vR V5)0UfE-J 5R'fZ53$ If^[ ҕ
-
-^2vf&ܥDwX4"X:R>x3bIv,yъ6rH
-^25ae35JP+J˞)S|AYuhMFLw<iJve]{XW^ B׭ >$g2$^b i%#GBĠo>of}^?j_"<rb[njQ_9;VSS\hO&wmq'B
-5>E}
-GiGbT"[Ef
-Ͼeңc"'}A\/hXN xRxj܆v,AÃ<&oMjstfm_%4ID]#:]x%4шU;۽,9Djwx۳ymoMD[,t%"n9LʎU}0 q<Ǫ܇
-[fӌt
-*u@; \1}4ZڷU]j_Uiuў|EѻO1,'GRf-T扢#ZC2TS 8~I41fyL.+=JfbȽR CՉRnI !Y$nr\=hX4nH,LuW$ݢߦ.3&Oo^R5px:b
-#BjP_NET ܐ%b0ϒQ1ãG =Dڴ%NKp;e,\<sVGC ֧&F F<pBt4"u@3}xtRB?-qmQx;<ޅV;vLO!-^XǼIneBOF̳_4}HvC‡w(]L:ҬeVGw2۴-r~Jih *b/3A$e
+5PS<JW)B⧳r!2Jh9^9zF_Ҟ>M7tͨ o7<+l,㞞+[Jz/h[}(>t'|Gv>A_v aсPa`Ut݄.:E/:)O-UW(k,gڐKIUKtn1Hrܾ/rS-|f-77q߃ϣ[5خKЄocY}
+0[Op ]x+~vz?ង
+G~F693?Xi3Rm$?Mdzb`q{lg'Ƃ^b
+KĺBtDl?4nMmH!9m=!YFPuV^[
+?ނ_ځ!͇gqނk?ZNònk?\l֖i<jgsKŔ~'q:tP
+Y7O ׹oxwbMo\DUqGU.nf[<[) V% N''SA_ukIԚ{kk%j6HgFNR^uXC?Z?[ qvn LqoYnBx;-(~'=T-_kVho0XoodgVUKQڑ|w/u⻄Ak&H?I_S>:Vxw8{)jm>ƭ}8ArE,:?eIbepӿYb,/Wj E)jH!~ń-nW,^ >CiG4h~v/5 mm7ZMl^[,
+,n]o2dMirnKWj.-VSd
endstream
endobj
-512 0 obj
-<< /Type /Page /Contents 513 0 R /Resources 511 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 480 0 R >>
-endobj
-514 0 obj
-<< /D [ 512 0 R /XYZ 78.37 808.885 null ] >>
+520 0 obj
+<< /Type /Page /Contents 521 0 R /Resources 519 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 479 0 R >>
endobj
-89 0 obj
-<< /D [ 512 0 R /XYZ 79.37 382.758 null ] >>
+522 0 obj
+<< /D [ 520 0 R /XYZ 78.37 808.885 null ] >>
endobj
93 0 obj
-<< /D [ 512 0 R /XYZ 79.37 345.365 null ] >>
+<< /D [ 520 0 R /XYZ 79.37 382.758 null ] >>
endobj
-511 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 384 0 R /F78 469 0 R /F15 381 0 R /F29 375 0 R /F20 382 0 R /F69 402 0 R /F55 383 0 R /F67 389 0 R /F66 388 0 R >> /ProcSet [ /PDF /Text ] >>
+97 0 obj
+<< /D [ 520 0 R /XYZ 79.37 345.365 null ] >>
endobj
-521 0 obj
-<< /Filter /FlateDecode /Length 4700 >>
-stream
-xڵ<ɮ$q9ڀB~ z\7'm̌@RʇDDI%mOo|{w7!ZۯoMl3e7kFl߾oĹќk'1- {wojz'hLoOɹҚZ<ځ%ϗfxJ* ؍ݻЛgH gZ""YZBguoF2cdIfA Wmd
-UF ۙMy*H >4~O8=mFSLIJEdM2 k$L@+mX;1&}$Bd"DTbOlqK__T-eꔹ4e e˱R*ST,3w{F$f49gNhMnUpąlbz=?jFaWpoԮ`5+{{RUD.L &_SؕvI-f$`ZnJcYzh +W"/m+ZPt/(2'J)GKSLi
-Q޿/٤W~%A\򢗬7uP*sw5^+[G@Y AVKmyă[&<Ή4u7xy7`+ΌPWxq{f!YU\`ZMǬeɳZuRB39@o52b<'"9!pdr~ke Te@9#-A6h8=1QOLm bPŝV"TdC^kB)SL=Jg*AX}
-tY/#8J7;>BlB\d\1cFYi XT+SI)^bxiXAF1`D0]5Jp,
-If8ge$i-<.$@"Nz+I)Wx wb
-z`H/SgrWC/ʺvAO^0EL Ezz-ze:'K
-:zy&E3+
-W8[ vKVتsÚ:9kCf0G16au,3( %Xq΍PJ@t|!3>r8UKL&eVv_vԀc'[_vF
-{io(lƾa|a
-O6 SjbQdsgo]JCl+jAnNEj,3
-FxDUN%&r#\˯e 㜂4%K8tIw"@6V|vSg6{|m^jNp͋n>k w~zN#6.}ظt~k698i?1N+u^{a'T ȁ Հ+e`bZdw4OeSJi:
-EgN/pa] HaA}??g ǥtdx#が×z(Qa[rg`oC
-%2Z5QXJ I4m簤Mi 0KP]hr2kQpWXBq]krOChrYd=sWU&;9 R+ԋͮ~fp#{S@&RTLD)
-V5<_kFseg+? 4GHZ0
->n:l?vo[ߔj9g<ƤhuoB2Mx+ `AjhG^!zd%
-gBi)tۯ[B]ĨoORƞ$xPV6QE$eSqSԸfQwUkEfA8=s=R?HȧʹKR>h޶)/N O!6{A˼Z&GeyO 愚Qܺ,Gzv- ~U 4rv_=?m_W6)i# U03Jg.(1AfjI%x R<r<.~ʵkG{c/k N) @i\aԸG5^U9dy<};V~Ρ7L9>e:}Юה!iĞu
-HQNÕ`(dAu@skEЩkYf~"97[߷? 5dC,xAEŇ\]
-(Fۏ ^~x'V|ζF} {؍AP? ?~ 85Z6KkF}
- 
-vݑk|;o[5µl{&˂xξ?ۺhϘ*\JmxTr:KFQSȷ=5 QV*gkÖMY(Ju{M>Wjy7w֏o7twEu<t vc}{ɼ X
-3/hPRD<\AuQK1[ 'lq8z
- ;l/̺COuҞ(EeR[ժgNB[0we<35`h5BWְ5۞\Oqu`~ѥp2gteRs p1ZdaQ81:[ ۩_5A*Q/5U?-h7cef`S^
-
+519 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 388 0 R /F78 478 0 R /F15 385 0 R /F29 379 0 R /F20 386 0 R /F69 406 0 R /F55 387 0 R /F67 393 0 R /F66 392 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+529 0 obj
+<< /Filter /FlateDecode /Length 4704 >>
+stream
+xڵ<Ɏ%w9ڀB99nOۘſ?$*E!(")$oO/r{7oJho("o0ҩ۷?~Y)ms} 8 W-GDH ~7<GKǿkd桶v~h ^eZg4v#:-贃@
+ŠZa}=7#81Nw`GȄ+A@Ͼ@c.Je-<s;ghi47/{#G3gHqaڈNWz-㵐abNOD
+R ᝄ"ۉR64hi)e!lM-{eͯZW'A8ąbܖ c\nU9:@޴Wps"zl' otNۖiˉ\^:30 %q~v|f7I^p*4RhuL[+32óZ̚u2
+9@o52c<'"=ڡpf2z$6e9#-` 4u(у6FhFQNqް4qAVgUS{/.lxF|Gd
+$ELm=P_"<^gQu*q 4(\"?`G]&2ii^8γԗA`81Q=cV>s+98tlε8EE1my&.uy[hGhΔ>'2iu{kjy1؄^%ϰUPYmskWݠ\50q\ $кw|<Bf6`|cN17[ [??md;cggǂȳh@چɄ%[ ]M: =ﳘx}(dtmLm≘j/6S.^!!q/zDx~@#NM䤑ߛRVFfDvpvϐ_O*e'zc\p53.5}$/;["~`2\CkhLP%]育ehN#c 
+c4>N"_A>Z: 3|e}yrUm XzN6a S4PԠiעhu.U?YR
+ݯ(̊"p!.=d>JҫU)ܰf.=n?N5ܟeqv> 5.2U A.䢙p0AU*}XJRtQێ{ˮpd+HiQ7;]\`v>v
+O60fb3A@go)!}l]pl+YmwiCQu^8#ik<2V*gpsфײP qNPzԏ%/{"`@6^}Sg6{|m^jNWpltm>k w~zN#S6.cڸt^~k6%8nB-bVP(ח_zx&S 2.dWT^xi<DhyV=Y|5
+(4ޚ <ΒdbZXtQ7w̋Ew"b1[ݧYyEa;Wwj۹1ʪ7:|k'Υru2̃v:%Jvd+y[Oa٥;<ki4,hdaԀぜLud@{< Ҏ1%w>U_P#ý7`$J,Ih>%jU2-Au5u)FB]aIqB|.b?v!䞆V UDN'2㊧b#Cbm 0x}pԖa5#2Pl`};_~<[毙'ke^qeNL@r%=}cɛ)m}G{Qjã0UVccOhf.Kկ S{u,|sa?nC3Ӧ_h9A
+X4e^uXkڑW8Y+zI™0Vkb=|
+R s1ۓ+ΟDPV6z"H&ʦ%) $֥EU}^`
+|+b,e}+\ײѝP3jέ2~gm(Vj֟7yuAʦ:͂|dʵf{{F#7&)]tlT+>*G͹usTpŶ_8{b7X
+}K9r%K!Ku"cp%J=_k:}u"ҵhxD3p@W~d~K4o(o) P,Otų> *(~/>j
+ ;<ߊf=lCOt9D=>.mӮvvK$m*k/7_ܣ=ScV|._#ĽXS{l{xt?9/BNF<B[3tO|!>ta.Fk|,,WFbV'p7hnv*"Wͨr0A;ʪj笻L7c13hv~X<
endstream
endobj
-520 0 obj
-<< /Type /Page /Contents 521 0 R /Resources 519 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 480 0 R /Annots 523 0 R >>
+528 0 obj
+<< /Type /Page /Contents 529 0 R /Resources 527 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 479 0 R /Annots 531 0 R >>
endobj
-523 0 obj
-[ 516 0 R 517 0 R 518 0 R 515 0 R ]
+531 0 obj
+[ 524 0 R 525 0 R 526 0 R 523 0 R ]
endobj
-516 0 obj
+524 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 193.353 470.815 205.308 481.764 ]/A << /S /GoTo /D (subsubsection.5.3.3) >> >>
endobj
-517 0 obj
+525 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 497.196 452.486 516.902 464.441 ]/A << /S /GoTo /D (subsection.14.1) >> >>
endobj
-518 0 obj
+526 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 130.947 440.531 142.902 452.486 ]/A << /S /GoTo /D (subsection.14.1) >> >>
endobj
-515 0 obj
+523 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 184.002 76.658 194.459 88.115 ]/A << /S /GoTo /D (subsection.15.3) >> >>
endobj
-522 0 obj
-<< /D [ 520 0 R /XYZ 78.37 808.885 null ] >>
+530 0 obj
+<< /D [ 528 0 R /XYZ 78.37 808.885 null ] >>
endobj
-97 0 obj
-<< /D [ 520 0 R /XYZ 79.37 771.024 null ] >>
+101 0 obj
+<< /D [ 528 0 R /XYZ 79.37 771.024 null ] >>
endobj
-519 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 402 0 R /F15 381 0 R /F55 383 0 R /F67 389 0 R /F58 386 0 R /F56 384 0 R /F78 469 0 R /F65 387 0 R /F23 379 0 R /F45 390 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
+527 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 406 0 R /F15 385 0 R /F55 387 0 R /F67 393 0 R /F58 390 0 R /F56 388 0 R /F78 478 0 R /F65 391 0 R /F23 383 0 R /F45 394 0 R /F40 395 0 R /F59 397 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-528 0 obj
-<< /Filter /FlateDecode /Length 4671 >>
+536 0 obj
+<< /Filter /FlateDecode /Length 4670 >>
stream
x]I%7rׯch hJ%`|Ll<H[F}Gp's#_V o}%%H&]~] ޿S#Ns-/0xA8FTьP͖/-̟ͧSkKxƍ~T1J=+ġdc_^^iJb!Ɗ^DJ0F[~yXZB3CA\BY(#@s%/ 5]*fbv8tQcЦ3qNyx[8!w(ʣ_'ʒ:4<+&k0AiµF-iѭr#j"-Э>'![#idabጉ0YIP0ۊ<)V/-Ș۱#g<4)?/އXv_p7 fdSCHۘ,GP/)0H-MAiY2`m7W&Β95~ʉ2cÌ<[1vbwv)tDC(xmAScWicgL[_vѬE$m!%:{ _ɠmZCs6|W$*Օd@sdKf
:/@⩡:j 9ɺ _ւ(fPH~ͳT9OtoMs/_)B]1]
<ݸ9!͍3>4 : ':GV3cn7 a yٷŠuq{ C{mfX{3F'7{Gi&:RLfqs'3LB;$?+59I5Dor-9a0=zP n)[a]ffD,p2k'0Q8 DQ̸Ț9΍)1
-_iy xä(B.R?_!If|$1s>5HqFf9-mQVxN&<4HiZ9Yv@a4NGS1#L}::2 ~*}\@dVƥ?.]! (EsV Dz*HOZO+%
+_iy xä(B.R?_!If|$1s>5HqFf9-mQVxN&<4HiZ9Yv@a4NGS1#L}::2 ~*}\@dVƥ?.]! (EsV Dz*HOZO+%
Co'ĀqSr݀NHS)zfJK 9ށIUaZaT\XŃw3>91f)_ѓ&u'j6EL'-U=H cpsi=GQ>{Cx--.,w;&w@K'w9ɹbL9y8q4- 4&딪uZz>JaD^9H$i1'"ѳ ʣqb4̦t^ƝY s"` @qfRBtB~䮘{Ith3]1O<U!]?`Č/m]8hwQpa
J[y, 9$; ]_2V|WOR;RwX/ۂl+B
-@L
-zXf0bZmWUDyg(5(jP+ &yodD: C6J{]oC0eb0ltAXe146qH{RnVy>
-2w1={
-Ƈ R8
-e/z1̢֐ zAZ=rz1!Ȳ֘ 1z +RI7%~Yۓ-ֵi&.[(
-$O>mnPE-ٝőVxp;z+l ғ[)篂г2Jdv'v-N+\++ͬµP6+pjUi ok6doid̔KR%ݥ/KR ɖxIfŚ-TOVK$$\lOe J5rs5Yn^%\ox%o5F֖oKrkp(zMx)SkKu ƺ>o0p?Ԏ^AQ7wp^whGf`l?.kLK{;=z{7pH֍4>uue_02R378!w@lȼ0r?ڼxAQ˞fj6RirkSUY^*i" Ql>hqq5\1ĩ4"πuRw.ƒ|37
+@L
+zXf0bZmWUDyg(5(jP+ &yodD: C6J{]oC0eb0ltAXe146qH{RnVy>
+1:y|(qW̫=9H\
+`XUu4P1z>}y@ c
+B"˥ &
+r6LxLM:H=
+^
+V'({ bF_Ce1cVnxK'W[kL206s ]p3+5 P"kI4}Yo*[;@;#gaw
+]сVx['*S="W/_ge8Nv ["WV%%VYk%PA+lV`Z 0P?+(l6T)#R)KRK_lIϗhy-pY57[5̟j5HH&7؞kr
+kr%ܼJ5 J$7'\k - ֶQ:*:9SBϩ7/u}*a~nюX) ~,A]}9ҕ[v,{nᴿi|adfoq0BmJya~ -ֵyV%=T7lf077Du5UDV7|Tkb0S}i.^Eĝ\4d[go
endstream
endobj
-527 0 obj
-<< /Type /Page /Contents 528 0 R /Resources 526 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 480 0 R /Annots 530 0 R >>
+535 0 obj
+<< /Type /Page /Contents 536 0 R /Resources 534 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 479 0 R /Annots 538 0 R >>
endobj
-530 0 obj
-[ 524 0 R 525 0 R ]
+538 0 obj
+[ 532 0 R 533 0 R ]
endobj
-524 0 obj
+532 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 449.232 593.689 461.187 605.644 ]/A << /S /GoTo /D (section.9) >> >>
endobj
-525 0 obj
+533 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 415.669 408.443 427.624 420.398 ]/A << /S /GoTo /D (subsection.14.4) >> >>
endobj
-529 0 obj
-<< /D [ 527 0 R /XYZ 78.37 808.885 null ] >>
-endobj
-526 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F56 384 0 R /F29 375 0 R /F20 382 0 R /F26 404 0 R /F55 383 0 R /F23 379 0 R /F51 380 0 R >> /ProcSet [ /PDF /Text ] >>
+537 0 obj
+<< /D [ 535 0 R /XYZ 78.37 808.885 null ] >>
endobj
534 0 obj
-<< /Filter /FlateDecode /Length 5051 >>
-stream
-x=n%qw~;ڇ}
-f5x6/<#3=kZeu5Ie
- K5I# (0#0iMːf _}
-%IK)' P(/I%Q"OBN"Qr]ylUX$ֿ?Ɓ a.jS%.uuWW<z[,_x)43]ߍi o1aSf܁ + 5¯[Ŕ
- 8JvaN%\xU9y=KeA;KKkXB*anAm
-X $5 f
-P[E*"\.&Gu?pbF0LL6rxb1 E1xf4^#z胒Iu^^g@<pI w^yE0`%Z6"z2(qB5.LB+}…ju+ͫT@p(^)H˧k +
->tN%bGF&.3P:/J2 B?0yƷU7<IǫzϻE)nuݜ8j%
-R$qeOD+C"TRm/|pץ/K9MqLb^^'jU7:uX,Ux>n[?`1]kS)sR8,~ Bz#ڱd03WDM5ˍV3Z2@r:n%SXa9]ԑU/Pq&bXSȗ`]J~㊶ph׺ƢHzD؀Gv{ ݡVr R` vbYE!css22c N͉yrLYKaC,d;; 2O
-vmm*_aL`Be|;3!@/}a*80hjX!Chv8S4DFُ
-K4UNuY+2mD).OnrXB| _kyQMV Տ<S\M#Z;jmբG+='_g 8HU#
-k SNX42;+ɐn+G&ӧBeCA+a)XіJ8x0E:uKO2́!rr*h 罀o',
-BR)LCR7ڸ(D+ϊƒxSD&6vS*"Eٳk`mu-&*V.ꤱ׬koBQ+ R*6A$K]# ^
-`a@/DvƟXQ3Ұ-b,d+4[Ss-)hrhr. mm{Q<J^T'
-ga ˳+`2Y8;A'ѬXԥxyJ.lNs [y%[*Bl
-"ɽj?W;#V a_My+eT/$ %3O{ƒ5DVlBBVAU`/7?K8y۸p݁T;%r A3ç=Z-n1X@ g ]9@~02G
-p"<nct_ O_WkE'U&'`n=#^&{ :1?,1Xr-nwƉPrOʸ;$a]rv˚=D5z|CfadY{ѲfLI8sne7R,O/2mtRr2(
-5Qixj8lVi6Ie'5#«U:t@-t[J$G5!IBC,` 3RGYVh`pyeΊ$XoHwb@Kj nhhΣd41@F#*jU8z5U2]NF;9$%vz?iQD;uQV qfR'eš^V b졲8G8J(CI"~A䎈 W 0xg0^-`Uh)qa$I<$ U]!\$ô6<љ O_D BC3GVvL[h19G$\-mJD."'7o})fޝɀ
-ͪlM*!nUϩݪ3GìZ"<AWkYDD_`W3o>8
-x;׾Հ<,\bRqjP9K,;-̏iiKvWg1dsbF~!HdA3s:nfP6Ga5|0ÉzqpExA2<nC\Dž3 ;+vY.vji-NAfK|LhʅC?qtȗ;W|eBRVo`q#VS͐[=?{0?R!g&;nLۼ}\od" z/C RL2G+y FWӏ(ۜ`te ^Zsֹ.rC!V'z!(}skO;C 0g#,`=Bȅ<o~/`
-tG[l?aRicMnxlz>C LsjlɍG3ûჂ6mn]oUv1CF%AD@~ATn/aE:5}tװzÂ4.\뵐Ҹ/\lTa]3߯6`sm%.v B+˲I^HV@oe eO_-C#OO-8|<Pw- 8chq Q|DzA dN[ROǗ<G"wr(y 3Ջi]bZU?ߥE+P5gj&-kZַQ$< :.A%۩Ҟ6-y*
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 385 0 R /F56 388 0 R /F29 379 0 R /F20 386 0 R /F26 408 0 R /F55 387 0 R /F23 383 0 R /F51 384 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+542 0 obj
+<< /Filter /FlateDecode /Length 5060 >>
+stream
+x=Ɏq
+Cs_B]SSOmMIF#r_$ɪ>eDfA.Oۧ{cjqiO ~ [#JhFf˷)|ӷ_3|̨$ܘ~7O\ _(UR>'!f}L-, &S+??(X cY?>}m֛VzmL;@-}p {aWMqq-sTDG;$`"O7%ZLjcZ*ذ
+f5x6<#3=kZeu5Ie
+ K<-I# (0#0iM됖f }
+'IK)' P(/I%Q"OBN"Qr]ylUX$ֿ?Ɓ a.jW%.ux"3#ZY6R$R#if=._ABQM czxx~װ
+*F oSZ["X+bvh*폆9ypU4kk[.X///+aE`
+7F.ǡI}.1xzUo~עG^Uj)Eړ <[
+ ޫ4vRxͧ`"Y,n$p*9YܗIxI6v)5yPI-L3_I:^{>,J 8pDU-P/$(e~`Ǹ Zj{ᣅH'.qYibgh:QZsDTa{Te\ln:S tk"MpΉc8DfKt陒7shTD_)^B7,7ZQ\j鸽w(C $cNaQ]t=SGV@ōP^kaM[C"_uM.*Q+:Vg_R2"b>Y,Zʉ\H-V4:e D.x;v'RdQ?{3e.>j·ɃRNf \2DL?Y*صE\r~zV1 ՞)Fd@yla}LJ 7
+Le?*,T~C1Sd\?Cȴy$FH?UbN M
+8_Gy6Y5jV?VLq5;kYw~^URT|Ҟ5$ 2L V
+F Ƹ5RgxeupJ4gBь7f ZLe?yO7&TKaN
+=:)`IG[*i"sGh->d7*>H˱1&0(I0aX.SqKZ߄k)<KMlOeMյ[USF^\/ !jG
+lK,pRH~ج>K+ }13Fw^?Sga[[X iLZR*)ј:|<]JAxt* N2)gWd^1{qv0N2Y4K+;3d\sZ#~XnzKT
+3ReDp{~vNG~X #d-DV3`_?HKfj ,%kB;r 
+ل8~_`/ %D\v.'\O@*$r A3ç=ץZ-_;@cAFIsaZeNp;(Dx 1d'
+xD
+5Qixjl8lVi6Ie5#«M:t@-txHjjDQS*p7/Hq[
+>ff0> O%L[
+W*\IސlM'#&:W1Q0
+.6
+yG1h-;b^9FUJ9qfueZ)vOsDI&%JH+*!~;MӢ(v(
+< ݤH˄5hCeq*qtKP8U*0'ADaDSϊaY92]MRcI$yjIVBJi)m%y3 A+ Tf1>
+d&[**bc%r6IZT=\E<On$R.;iW'
+aJpyn 1qUm괤s%10ru$q8VqgS+Dq:
+ʻ ЗX!w9~O΂9͙ buhn
+SYV;ߗOE
+ 903", *X dOe ? Id.nWQ w22-JT[no-X_on4vkmZO,xN'ޡ\nL7F'؀7]룞jxӊ9܇|/5#{RC_9ٞDڶ}O/+|Ⱦ׊& 9FN)}֘wh4"pø&Ws<jE9Nha52K!:l
+=lߤ*!&XϩM3GìZ"ɤ<AW[YD_D_`73i
+ aVnH^]gt5D࣍4s9 ӘRۗ[u~H#Ja#S~Tj4VO܂MP)NP[ojƇt#x\W|^KD_k=,>J6yFoZ`llL;Do6^Bm4I;4v
+x;ր<',\չ=RqٶmP9K,m-̏iiK6mg1dsbFnk~!HeA3_cע&iP6ga5|0ÉzqpExC2ؓnϴS=\j1ǧ3b;+vYji-.A[fwPE*WqDq83}#MH2zڔl@NsjqrWGYkŒ~CIez2
+.,7 .a>z3!JlG
+G:m!Rd5_`Z̫ -␨ؾghrC!Vnc*`
+tG[9`ic&{z>C Rsj9g3Û샂6nܴ_v1|DF-AD@~AT/oaE:5}K/BpBj
+t|#u~~sz3^(^㢚W)^޲^EoU#]z:QUz1aעSf{U£tZBipo|_^+޽qb`T/*
endstream
endobj
-533 0 obj
-<< /Type /Page /Contents 534 0 R /Resources 532 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 480 0 R /Annots 536 0 R >>
+541 0 obj
+<< /Type /Page /Contents 542 0 R /Resources 540 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 479 0 R /Annots 544 0 R >>
endobj
-536 0 obj
-[ 531 0 R ]
+544 0 obj
+[ 539 0 R ]
endobj
-531 0 obj
+539 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 485.826 516.478 492.8 528.433 ]/A << /S /GoTo /D (section.4) >> >>
endobj
-535 0 obj
-<< /D [ 533 0 R /XYZ 78.37 808.885 null ] >>
+543 0 obj
+<< /D [ 541 0 R /XYZ 78.37 808.885 null ] >>
endobj
-532 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F56 384 0 R /F57 385 0 R /F55 383 0 R /F23 379 0 R /F65 387 0 R /F66 388 0 R /F58 386 0 R /F45 390 0 R /F40 391 0 R >> /ProcSet [ /PDF /Text ] >>
+540 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 385 0 R /F56 388 0 R /F57 389 0 R /F55 387 0 R /F23 383 0 R /F65 391 0 R /F66 392 0 R /F58 390 0 R /F45 394 0 R /F40 395 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-541 0 obj
-<< /Filter /FlateDecode /Length 5113 >>
-stream
-x]O中(_ Low{J9L}h*˖\5"*HJHJOo<2Wo__~r=y0j O3d goӟ>?/Dgń5q,'^/BOm_|;~Ÿxp՛0ojRPxKRK1sͪ$y &%k%h*\$M\cIfi\l P/w---Q̣NORI)S$:9 `5M3ϿN|Y ,[K!nXmJVvV
-/aV׋⢰$N޲sOQ;R?boYygس,:Ֆ(U˯ݶMn$jQבbQgO$id"~mǶ ﱖyFd>O'+ȩމ_jiչ.M4߁™,n@Z5/ pE`LqauOoIײ ,7mcLzP)iC֞OZGF)l=E,uw۪+<~j:0cuݙr`XL@ha!2;);QgJ:(~UR+YBb"j%r8FS֋P{2Hsh.m¶H'a2| Sa?h !.'+&!%!9lJs0I}k/i 0diu?YWJW97xƶk@ZoҡDiGh24ocg\Zd][S혲.t
-66IS)Rʡ@TL-+'O6w G%fuo%/-KhυG*Az(M{,ntEӞn/[ B<8ƁD Ei3d}(e<"0)3G1jF N)PaKmc̜.ztpW~e*j /tFOsSܔ/l3sSR˳Mڰٝfn7 LÀ+Ϝ_\
-v;a.Z-XjIG4(w-_ŽSpZy$-U2匷cEe*C ^\C0!$˝PfPcXn.CwI~`![a-z109yDD 2h N[逋
-0Ť[%K3OaDGKfݔV̺)=¹)ƌ.ȓq[n33dXjʙ˝[7T2a;dy\l:n/jjj&=vуi "]`wLee@sk6l7L@ \v
-]0gcw\炁C3I?Á ؁{
-b|F<-]0Ety! A(,3C:&ǝD(B;*2ȣ薂 Fc'`#BÖ,Gm9 ̍9 A(<%G ?&À-9!;̹~lJ0O0(ȁQ"'e<+i{c|BۭD^@71a@c:8{fR/U+5í
-o?
-7N>yMܩb跂>DxDn$Jҷ7=ctauy#
-_Ly _0X[~;wpӇHpGq
-0F"'abxg"}*Z;p0`s9c8E%cuW Omq}* VAs>T[À ~*d'pYvx]1<hkܮOEfP1<O6.ʰY {_Tg!ḿSRqiOyT x:UUP1<>y' >̠u-T O|T@tT3>P,6ᩃo
-(U~X3<uRK{fxjS; BͿϧ?%m1ǟ>pVAT3?}: *6(qv
-:
-i< fP1<xܧZk;؝TL=waZ+[xzxx|=`E;;ȇf귇ǘܧb{cC:uȻLjoCg3+H?X`14(Cz)eVJ[)e<E\K mf5f%r^2k%0&hx!JO J g}⾎f>țYo1AN*&G&d+ |5byzI!E3UbyO/</=Ѿً}$<ؘfyhdvwhf)< ƒiLGwUG*]qNҬ/wBO)_^t)>ѵÔNt[Y{]oeEw uc3ozS2|c0J/ʇ2̓3Y>KK0AwEk+'1;jfV53&| F9i#ͫrf*?wR6PL$,2RJJ7DE$QLk:WQ/c^J/Hjwɫ^Uj`[u+])dGUشe*-2@ZJ[JYm@?RO8p"h[+OxV_^.Fo >n7!CZ6T:9YV&EA!)-[M-UkubV{GMs3"WRbcR4jq[Ҷm$$Y C@2a0#䉊lz'ԪHVPf5JQ?B6K2} 9yT-Rc2c\-cMYoIK)Zưb߿#)$5^ٲ[nzuݣ2N+^?;qͤ>͌!
+549 0 obj
+<< /Filter /FlateDecode /Length 5129 >>
+stream
+x=ˎ丑
+@r~
+3aԧВ0vQyDcC/iWl>axA*)WHo+0iԹ/]W
+4P4+p t)uc
+yb n+Ao0_iGU P,FeVm+;+j]齸P(:"ځ:M~lڣv?$(E<{6Y*Y.8!,d$k2f0r3T',ZI9Du,a̍oxc(4Ϝ6zii<*Er4~&&Jf(IZEvEdQ!=(Ah\x"z" sa
+BQA}l *_/<ꗥG.p4A%DM-Nr>'g.} g$FWPsK_[!Ic;
+|f<*ߖ".gY)h\`锂K0赅x"4hv=ߗռcמ0Z3v 4I۪ jge+?ʟQs
+qG2Rk?vR)(˳3ʎG>o@SJ a- >xZKm&H1 ˦ 0bX8ҀC C'ͥhnb43qb<f*Ac+jm
+ zx%M57#W"cq.'*Ű"gjUQ/Y4RœÕ \ˊI\"Q7)[>Mxܤ JC1KxEܦ36eX*w˝[#X|U<q ;@S<gՙbUǜV[ynUGE0=+S"}-ɔ+ xw+២5-
+s|x v T< ,gITɤ}PœӹJdmi=ƒ#?x4؀D#][y1IvFLFKxm!js9u
+X1r>c1|Ku#;/+";n.;ΊEx5%' >wsy1g W~"'|e?&w}`bSb!1<6
+0};q]2
+ iV6u x~=ܶT>""?v~Źu`W&\<o-؊6/Ey: 3ަ9&Vr2z H$j8zWZBg؞mÙ IRKQbwӁt2R hU"U$r:]]T9XC<H4ۉpW3 %^tiおkwH+ҶqsNp-6#זkk0v"Ed7}22V@(n5NhÍKзS2BNxMҫr
+~ƇH Ɯ>m?АyX>3q':"@MgMߊ׿qNs[46YCٚpϗxYEv!瘾\* \@$%Lbo7o %`wԁ6ߨvW{&1U}siԽ:8MgS@nS ]vD͒,[FA] 8.ajkrݙ 䖾bDCd|H'W @nsPM Еɇ @n3N LO|HGl<=
+L:u"$ass8#<h,y0?]1m1\i3T}L>yZ<'/C_ <AiwlG7`L 7<PP0X{9=2)aB, [Hdp˂雏 =.c,H- >wN ¸!<9+5̃@a>
+ޘAoy߰ <GXTnA0 h;7z|S B~F|< O|s24TTߙk mjs> ]uzT"1V1$fAQR;̃a& xb"q <ٍ YQ͂nɊՠAx qX aKHM(7?jlɰޯq'A.l[gv<, OOxyՠAxf3Ȃ>΂ᙟr [B0iQ3EFo>|"<cA5 o|x|4O|X|i͂3ᩝ V_:-SyA019J0?Zj}?0"<3Ƃ4,,xgi:V?|99qĸD=ʹ4H5kH9}<*(Z[>'&Qh:=ȃ>/X$}$|1f|e3c<H4= M% sC|XFކ.4ߡXUA>D)}h1'!MEx h<sDpvL}-ɋsF@0O5$ȐDK|a`9zɸ1 KQB!I[T̆^QK 0*0_j֓g"B#:QoNNȴ89*q3jt@M(x~%7T^꥙̗<Xl4G}F^@m׋wh} k=dw
+}E^VKW$Ux*lqN WB׫Q|So6;KmEQ1Ҋ#LiDQڊ"~k/E\<žMAU35_% ND3D/e-ig}*[2{i|/yrl(N_ R I۷H6CN(Dka6ۨ jC64W}PKOߊZNǿ+PkMtUnKBcӈ~ʮ(76X㨩
+L|P~U鯤,kŢ~.j P/Ҕ" X,`eVO/_vY쉂MeZ3:b_ïە(u^9[Ic˫Gm^UU?Mb"üX
endstream
endobj
-540 0 obj
-<< /Type /Page /Contents 541 0 R /Resources 539 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 480 0 R /Annots 543 0 R >>
+548 0 obj
+<< /Type /Page /Contents 549 0 R /Resources 547 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 551 0 R /Annots 552 0 R >>
endobj
-543 0 obj
-[ 537 0 R ]
+552 0 obj
+[ 545 0 R ]
endobj
-537 0 obj
+545 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 166.619 67.03 177.076 78.488 ]/A << /S /GoTo /D (subsection.14.7) >> >>
endobj
-542 0 obj
-<< /D [ 540 0 R /XYZ 78.37 808.885 null ] >>
+550 0 obj
+<< /D [ 548 0 R /XYZ 78.37 808.885 null ] >>
endobj
-539 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F55 383 0 R /F56 384 0 R /F58 386 0 R /F57 385 0 R /F45 390 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
+547 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 385 0 R /F55 387 0 R /F56 388 0 R /F58 390 0 R /F57 389 0 R /F45 394 0 R /F40 395 0 R /F59 397 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-546 0 obj
-<< /Filter /FlateDecode /Length 5970 >>
-stream
-x]˒+j9($Pjzz"t+ [o&ŬZh+
-}W
-ӮPȱM 4ОMPB$ nx
-gl c'NcՍyqş:R-Rz8S2+ʗ8W-Oӥuzr!m8OPۡ^ $d[A+IUmS
-PN,qƄI2:17ALtR~BE&zm-b0˕
-r%mtA 1Dkطpa69Tq;'XD]l1mL5y .t%`5SFAvITˀ/jH:PGE|w#m7Ji1o) 鷵)uj_֡J\enP-h?w$J2I0SY\@΁Fn:}iWJ%^,Fre-ZJV&}IZ9b ܒ!BRXǜ^:BRJ-E(j>TLec ou)bꔓh[TSYB.:Ky׺F!/b}
-5ϷffH]EA,p)V0za.uBjhxCʀkS^~Y&L}:y %e]Ff`nP \黱G1"Q6Q
-u\~[ukB%sַsd=/1Ǥ{?n 8#18w˗w]PKƴ\ζh+Wb7_j/_Kڍ>n^qA50IIQc!bN\+u~nGǒsոޝѾ 'FyOPr5v<B4U?i?i7]!|2u ˿~i?Vr5B ZZǝnD]\-/KŖx,GrUU3 j!5|$W. TWp5fHvJi{r$XR$r X;s (` Bz)h^ PoR+~Z4wѫA);-@ }9O
-rmX Jp5uوXVqcM/YIc
-(KŸ yLųtYoEk7 c Nc `P8Z9 $sۄ`PXB@Ȥ-@ <Y-F(M0 q<A0l0* o;1A1p
-Ϙ5 u$>0k@)igWak敮u
-WoA3p\#+oexPx[W"sENNĜcq枈sq0s9&!H
-O c0(u0==.FN$}zAgQĴۄyM[I|
-3 .JuNv3C҇9gϔr
-Op `"nBL9wD`Px;AΣ=۷GμST:S?Y OgQDѣmr?I!ƨg\Nz&&T0d: oV
-x1~3Wt 2[=f998L ^}x W(N׫#*!k>hLo\}z+e~9[I|gcE'L;/,zr!ruE;avV2CRePh^y!0%^@[N4G;pB˼r\hUOF^Zi[A2,nJkCo^gKS{Ʊ)PD/s)})iԍa9ӭwٰqQILW+;!$_I@0aWPJw 8Oa#4
-
-15Dn)a=RZU^;jގ>游s Uo %7Q=qfI\$nnWDx)<϶GڍhSt$^y~nG
-3 F.0ibxۻؗ`!:ecxDAA͞ԬcL
-3@`
-3 A SS0aY*$ICn[{s:5`ϞH|)OeO'+DyPA߲N~@/F {Ε~g(k hdzKdz{RA@&õәT&jys)-חƢ!Z->Q;k3㘣o6Le׬>Ra{ť&REqmݴpƜ^18I+b%;TrKޱÎI){LbܕA729.N.sBG_kv͓~~lҥ; kԑ>kܗofZ^1qW%]u'}xݏVs浨~Z{W&_-u(TA
-pNz߿%俚{~$]Ɍ큒#Gh^/} ))VaڊQkDۓ͓Jr@g -m}%x\!ʃq$)X|YH|oJVGo7Q+3 7qP~O}3:r(1 T1RU5,
-kQv a&+so'W:;TCN Q>n͋5u%5,*Bnc;[ĵ,<-Ѽ)T̑I6,\Vhmۅm;#9ӳB$y5r7qM jd惓8/=L_Ff~
-kFt<Ihe&ɚ+D&Mx ZRXi#SPGFAJJL3z12#\j:w{M(&T.;'Zq/f?iVǹpgP|>fK2C& }t,nzB#gX*nPK,ܥrD . ZU)O\oW*_^ y<~C*ՒIA,^ 8SV<;&Cf1qWu,k_XD\eĹu;6-x&,>`[~)eo ۤ
+555 0 obj
+<< /Filter /FlateDecode /Length 5972 >>
+stream
+x]ˎ+j9(Dž @5==ܕ3e`;o2$Va-ueG2y^~_?2uqi1qDьP.\Rm)?\pEIJ
+bp~{
+'-ik;A>H=M?
+Pz\2!L=VIg$pljdt|'8o'iO}Z&6=5< kB=i B:)A&p|N:¨NοE? Zo0Z[)%i@2)_WʰŰ/RgXeUY1^JB \
+|MWҤ6{%bNÓYC$}gԺ;XpfK-Jֽ.]i \.ijh.ӓ#v5{ui*<Uj@^ qES9P?
+Z&9\7!U XP*8aT PBR$Azh%']ğ0rQ &[Lry@{hSzPm)AW8#b-^:M
+<#9"c\0/A&xZxj cMb2m?0}) NDrIX t2⡌j['D:$f>vbJb'xU0o{`}ه*fpNwAx$
+ID󾨛ztޭT&j
+),W/Gp`K2*ٖ[]x+R.$Īc-$9wj]9DU,o(Q9X[Y]Y
+ʐ}k28ؖ?T泐 ΢|Z.7AeP& Pk4&` ˚[ty3$.߂mpV B՗F% /JLi29gw{35#1%e{uC I}&p[<c$*
+D.lek!b 'ZPx^ bxhkc] F4deb&juD~dXD ?[g?l?Nȫ \g5Q:'#$e#ݻ؜D
+ -ڏڕrg
+9s_X5IRAqv~Ԯ{A`Q ُڕro֟BUCx*GJ8 q*h?jW]ʿ!|2u˿~?TrՌۋ9;p) r5/E)X ʎ!A֯FAXQWG$Ũ\n8 7A]b>jLkHtpn= dQ_3Aqr%y4T.䩗{5`N0DRnh:|-k* <Xf=5PVaC;M/IIA
+[ԼEHn$C^a>
+B5y (p4b; a6g`Mc{ !3fDi4x sAb)c
+3*5,JuN涓3CÜsgJ9S
+`zxM] eO7p,Gլٿy_e/=ݢy(Lra/yݢwF/^fBJ~}xi&^~!Lu0Ec}hǘ~mt2=fه֛AFMQ*W4UT|Ruφ+[c(i.NoK;0,zt?aI|igCƷENq5섍Y
+̧yE y <œ9jn (2E_k|j4
+K{kdo['"abqTZ>z-Ou`L&ByĹ'u%sGQךL:eò9{%._ !XrN%afy+|+~SxTwa
+6K
+~fc {8 #z#fr5\KmٱxjH 8PʑǪ>$ܔEz'_l.+۳C^3ќ~XK+\^q_?б﾿~ ݹG*}Hv{ӷ1x
+05ub?V
+RJ^;n{BqCW2
+,YHdp``)ROTXO}?>~~ x/Q? |nT镇 pxC->yBo #‰iBW<]苷2s"BBΞ,c
+k
+ީ=
+Щ(a [RHբ zmqaaY@JniQQ)znUo) 
+٢RZc\Tva~2s5Q=W %}|}T>=yQ9UfF}i_4tۛky°V.?>UpsrmPǪ n ~[D`Sn9*c^Ə+L#ߣ!'!şLBTiT*L208?[97P7Sf@KY>敍[(N +DyPU߲C-38+k-``׀OlZo 5<O T;hmjV+`5UR- %ZJA4Iu? 8Ǔ @v |[߻t:Z‡w@8Je'TtIŘcgFAjw垨ywj/ZS^k!S"}3>{WCVO[4:xX|
+}Ť( $awasȦ^35Yļf53fk/]GB%R6 ԭJ_ 9<5$O #kn}!53?F 0[ځX$^ID]\Hb-2O4sB 1VE͆Dʰ^k߄r¹2`IwԛP]?bM/ B?i$P} T×\ 0(FO'L^P>RU٭kSQe a ! /=W;(Ad V/?yn6t%6T6
+CDv
+eMo};[?yS(Cg!(_.n;Q6f,SXmƧ%H MтV ,_yA!|5<Eb /''-6cgK+}4TַG!|-؋&:9M,֦r?+% 6އmKtr'nM"&zD!_HzeO{aӏz_"<k!-^G̈TDGf|s%R:+Duڕ5ZR^iK#SPGFAL6"✺H8C ?; r4ޝQ?I- jړ+"<Q}|SOE nt8:u`lpP:w-esBⷮo/ͽTѼYWRv0k7Ҹb:wIzQQ"
+k_<(Ks;n87n[|wm-NvʐŃߐ ,ۤHMyC~z JY%U]lt05D$_SMWk%o
endstream
endobj
-545 0 obj
-<< /Type /Page /Contents 546 0 R /Resources 544 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 548 0 R /Annots 549 0 R >>
+554 0 obj
+<< /Type /Page /Contents 555 0 R /Resources 553 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 551 0 R /Annots 557 0 R >>
endobj
-549 0 obj
-[ 538 0 R ]
+557 0 obj
+[ 546 0 R ]
endobj
-538 0 obj
+546 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 303.589 745.619 315.545 757.574 ]/A << /S /GoTo /D (section.9) >> >>
endobj
-547 0 obj
-<< /D [ 545 0 R /XYZ 78.37 808.885 null ] >>
-endobj
-101 0 obj
-<< /D [ 545 0 R /XYZ 79.37 191.651 null ] >>
+556 0 obj
+<< /D [ 554 0 R /XYZ 78.37 808.885 null ] >>
endobj
-544 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F56 384 0 R /F57 385 0 R /F20 382 0 R /F55 383 0 R /F23 379 0 R /F69 402 0 R /F58 386 0 R /F45 390 0 R /F40 391 0 R /F59 393 0 R /F71 415 0 R >> /ProcSet [ /PDF /Text ] >>
+105 0 obj
+<< /D [ 554 0 R /XYZ 79.37 191.651 null ] >>
endobj
553 0 obj
-<< /Filter /FlateDecode /Length 4830 >>
-stream
-x$1߯&opV'@NLP$[lI]7~fg,]d˗_|‡/(7`?E,^0b`܈ˏ8ʾ g$b`be_OY`¹-|HjAKPz\}"~wL6D(΋q4ȏh7)廭qcK"~rKUۧȀ+R-y+n5RX2pJ0S-ef+{{,DT"0ZY'x/_)b܈ HԺ,A4>©ѻ#@Z[hEX%`"YQЀ=I;$!POf+U~t&+`! 9 s|4
-3ΰԦNjK(!AƖo )
-g$ D˶M !yv\zjMkS?jeUƜ(k
-;:RQWIUb@|Fݶ_-YVn(@"Gd{LDq} @BjIPFJ"3i$ +yd`"3*!{Ҟu<OM O iVP6xtj:?}m7CD!0nSh(fY)nX)~y
-暁5?z)b/ŦEIbc9}v&Yzn;>MVĞ"Ha[#)|"d(!
-6zVB[!HcQW6$A ~z(ym//=g ] z&q8ekphܞ7+oݏ<r$L&yyǮ=M z(U>c8@a4OlwA%  dnJJh]N*vЪvM)/LIa'խ#RA|: +C-"=svh}Os:XYB?K,ޘ;e79N vEߌČNc6`gDyl}\+ӈ5%#
-q3)n+\M
-$qJxdy-
--3A;mWZT?TgVcWUme=R.+&y]Xi!ls#~YJ۰pF=^0% -2e:N7.Kv=%u}Y$ܒ)N}!-gҫLJ(혒>s1c*aƑ
-eNb YB"]vgX7y>I
- KϿйi GNcMkܐ:s |.DU)s۰A1}k_}GzL ׯKo^b bȃSaT9)I!KܧoRĺP #_a9
-L Ge^W(g ޏ?[P(q|mS]ƔI&H!F5eLE@r5.A@CzSqAv%
-80+ۢ"i,ɝwZ旕<Kj\Rrڦ S=q'آ`սcZy8VcF<go Ht0d5C:q[tv0˺^cN-H{ Vml[T0>,Y4Ϙ
-ɾiseekK7խ~DZ'DxXi`otʞE,)4];
-l*53{P˥bʘ;P…;K|$R,{}7ȥ5QT{*S?PY
-`ҵr`{ |)V;F|ݯ( 4Ӈ:?[& Dɖ[@*A{LstQ
-[X?j ̻Jw6%@7T3jE Ǵ&dQ W'E vyS| gnIm]j<ZaO3kۜŵ J̇* k;$Z34A$tgc͇} |bT*[=.Kx$\V$n
-[k)ANߠˑVhž[u̵<
-43knBAlz=Q2-9"Ž!8:T\&GE:|FtlO#muht*#7# 'r5K~ZK[c-ifE)p`EXizV߄lO:lb~WJl334[).31e0ا ?Gq</ת۰qPVxϴϠ!^A,셥X¶d3\;o$3PdCrFJ4&_tsӸrCy-\
-_ ~<OeLWq
-y
-_pvt  v~BC-Utv 3چtPJCsƄYig ~'f.XhMn̚,S|1f5̢ûd<^ES9t lSCyN+TНtuO<0[ڡ `>/3/U VN<6ͯ3@2þbz v<_
-K,/lu2!]kM.rs.z|1Q1w܆+H[:nåb9i&
-*pƏ|D68 1t}ݠh@]>:Hgsz(c\>:(0tǀ!exypVaz{`l*`
-b-#Ul bUdžcA͚% jiwgB-Bjfh1wsdVp\Kp'{cBSQ>ܮ$^1 G7pr,#>6w.m:ؾWQ4YZ6umܲn]a<ŗ Ҽ, ^/#O>DE-YP2zRgnK]\Q&f}F/zO@cتET`5Q1]/O8O%X$#Ozl{RD#"Y:*폿 Z-%F¥‡d +ݟWSipǺK&+P@WP[ey(FT|m{b xڒz-;Rz6SzUwO߮6z Q+.nu3K#GAT)|B
-3c&RY
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 385 0 R /F56 388 0 R /F57 389 0 R /F20 386 0 R /F55 387 0 R /F23 383 0 R /F69 406 0 R /F58 390 0 R /F45 394 0 R /F40 395 0 R /F59 397 0 R /F71 419 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+561 0 obj
+<< /Filter /FlateDecode /Length 4780 >>
+stream
+xˎ$>_QGЊ`Y97''6x ؗ~Hսrj)QZ_?=˧_@8FTьP͖Oӧ
+/OOdLJY2X P1¬]aM#"UZTr WJTgiɠKb{3Ћx{yk|~ !Z<d05ZxZ vaUMW.Iщ.=F^{–MC-,Y%H5ykc4j,"Ϸ8K:5B% wl]?J x
+/ "H$Ѐthg9VߕSqJ=Dk2I=H[*JAPgÈu.ϦKU0JcJG*Z.Bym]rZJSϨmQOu2do=x3uD8ledtkYkVEdd~OFnjc Y(z%iEԄI
+<)ƒyNL7j3ւpDQ4f}6A0vgZ[MŇ IԖ\%4Z,Msi:
+Sx<,xu2'gSvL~-M^aǘnWP *~>thkL*>7P-e*P$KZ@PYf-ާSGN>`OeM2WAܷ'UpNr\ӶqlCv=}00 BSsV_Ɛ3kRv{0boke3N0+:l5zۚjB8JYJ2k2FJ&rEAʔ>8uQ@ڌЄsKMN,)I9R O~蛔M1AK&lm<IeCZ # Lߛ]3Y$?Kb-ڀCIwaQ߸hjVM=aT7T4kIa eKۙs vE ^͑G]K>G_5L*Ҙ"4&O(@Į dLXU,䰸cS1iTMݸl.k3Ga8`dj# pG8mx$_6 $3YI3Γ#-_-EZkz^F:ƚ  .I+\'|ղzLTRb-u[OKK.
+>J' Y*ŝf>A)GDt!:MԱ֣yoR"w{[HJNU]/-9ܵmdI'آ7K]~kGXy2ݵ I+/N7L9uPȰ%D~X|kp]'.LN1D??\~sW`nB4Ik\7ށ\!9>W-vXnP} 7$'k ,R}G|_OZ¬ AɆ&Lp 7@v!OBs6ej;?4_8%i
+2i܍nǼs@(A֤kDjsͼdSW!U0O) !;6ǥS5?o؜+mn؀|Գąq'|ۺ9uk"az&m.T-w=O5{-\ .81ALIL3WAhlT6-r&.5>wɛ%k\϶l׹0nqsվa>0 8-yϡ^pٝV.$Z_r1A&=fw,cٛ~Xߜ~cz;<gp퟈j}!(2cLo%^7uj1kvy5Bʥs[_qeme|n1QkV T>ByǠ1PclF?;F0եG ˷j;
+ dxF'<xWr GP/rI
++K) asAFYhˆ8F,vVg&UaX!+"Zzw-49]E PRxDo)Mkٱt^'vՈ8}mV.u.b?U@S1d歜]\u Own!'o5/>`uŒ~Y=)V\䳆xIGA;STGrRĪ*
+VΕX)Xi#ܪjTɒ*cx ÎReW[0›xӤM
+񀘫c5"_#?l A W[qsh0%O>yB/0R{@[dq,*q/0/#e*Qu Uh$V5?vju,0"!TKg`0×=I>;S
+&D$0U\("5=&|B}}.+wsXpbJVp2r hBlmJju KPԒV \ LXpد<AT"&`'s]}DkᯀG]_ɋ ?DRڋ 
+E:TD޵"_шG8FB*(K*Qk__;kq˵͐lWEJ0:nΔ (RPX#}pj}zhb |Ecz9Lf.Wc]TaݜZ_k{,L;6Os|^}k=@b8β<7W5?/
+3 K w\A!xA82ԡ+x3/֒K ö'M(X)贆ayt.@cWoQ{T\7˻PݔA_ޅkgKs|uZ֚
+
+ŝއ+)o!?l$ .ԍ^;{eTJe+Ve^:ƌ$U†ZQ5u
+3f:SڜgAC6cY梁JFwUepv|{pὺ0-JR[_Ö 7yԶtX2\z+Lˬ)4Ήf?žB.Hk@ T -~,[>|*H:m̯ƯQSh[)mbib1:*mTү dXI+ZJ.r%&1b"o$ "'(/Es`7 0[:\e17۪o<r)$(
+kS0QnEM㐺zvi6ٌyauxGRGX;>Tx*Xm#Jܩvs.ê0tvuӱՄʻN AvTd>zdvFva$B!!ΓyE+{)|S_;6}vMb_{IC ĶCZwu3ÍR@ f9>袮9-; ټ=w7!.o{@֙TJDFDڕ>SXD֗n0 {)0,>p3aC)s=Jˍl1y|)YP,G%ֹl5Ϸ
+4ʚN: b
+eX0V
+tk۰©R#{U{ZjتkUn`fT njrg9y)Ckd v+?kxv[;
endstream
endobj
-552 0 obj
-<< /Type /Page /Contents 553 0 R /Resources 551 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 548 0 R /Annots 555 0 R >>
+560 0 obj
+<< /Type /Page /Contents 561 0 R /Resources 559 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 551 0 R /Annots 563 0 R >>
endobj
-555 0 obj
-[ 550 0 R ]
+563 0 obj
+[ 558 0 R ]
endobj
-550 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 88.249 105.214 98.706 116.671 ]/A << /S /GoTo /D (section.7) >> >>
+558 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 88.249 105.274 98.706 116.731 ]/A << /S /GoTo /D (section.7) >> >>
endobj
-554 0 obj
-<< /D [ 552 0 R /XYZ 78.37 808.885 null ] >>
+562 0 obj
+<< /D [ 560 0 R /XYZ 78.37 808.885 null ] >>
endobj
-551 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F56 384 0 R /F58 386 0 R /F55 383 0 R /F66 388 0 R /F45 390 0 R /F40 391 0 R /F46 392 0 R /F33 490 0 R /F59 393 0 R /F71 415 0 R >> /ProcSet [ /PDF /Text ] >>
+559 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 385 0 R /F56 388 0 R /F58 390 0 R /F55 387 0 R /F45 394 0 R /F40 395 0 R /F46 396 0 R /F33 489 0 R /F59 397 0 R /F71 419 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-561 0 obj
-<< /Filter /FlateDecode /Length 4632 >>
-stream
-x\K$ ϯ?Z`mOfxoONCK~H_UbvIJHQE~v_>i1FRl_}b ff3gJTYJ{YNao_n(|AOSJ;6SIi xOd%#
-Va_> $b/<D+1NۿA35zsieD(M"A6] lVT;}27fM2h lTeiԎ #>Ԗӛ)'ރP(y>.A5B 2&Jo%GG*Ss[KL+$Ƚ+m>lI%q  4
-\
-Cbm{y
-c gnmr}O ?hm6YA&ZfQj\IMjHV(SAI^KC^BhQɯ&;/rIU5y'LJ-'^j~Z}' }ť׃'77z#DMD,Q?n{C"5s-'V4Σ5>,(\+Ӹ(\)8Մ;Hzk$Z i2Z3ᛄmnP"iC& { MҊj;ɢU6CP(5f-Tg+;2#Ɖz)pvyDYG{cq; ?к"K~/9 qi_r0
- rQnZ?SЩdI0|+dWZ.:!}ż.:Ce(]zq޽;FT@MɝjS7Wvf/MINXS&;*hv,g2jubϯ -i^|Y6O -D0P<f᭿ =iq5r9w}<~;uX(`ONʩ=hx)pOh|~'iOv8'COie|zm_i71UvecL~ ~o1,D~nf[s/ q#E(h(.4nQ&G/IyQ,f⪷J5(5#RqcqA6{3\R"
-Kvο-)!H=q](fxUaꔂrȻM^ڽ~bۤՉ7IayJ 05vJ+ 5Eܵ4C+c|翯xjiaV=uGzjP)`kȡAsa?-3n{U.EC#}AjӮz7GMq ֔qK
- 0U1$NDCj
-Tl?AxI͙*Vs6@^`Rr,i)O6r }|t6=ZJiѮ)e,4[*)Ps߈㕴!w91su/+5ס>UP⽫-& mc&B$1m*l)(o4jB@f^O1d#w YG=Ԛk# ^"u36<cw?WCS<R$wReࡸ5hm36:t !\W秲jcMIv
-q<ְa;mݻϟ;mA3|pNg%k޳s=;Pƚ̋]#Ͳ Kc V8N , Q?6 yjY8 <Nn(LKQ2u`oǭ
-rW?v)D
-[ EvA4'%a{$DO3|/1?a>hB!4m:B𵆁)@;DnroӸ&`@X^Arvo?Ç'j$;u!].,
-&h;壼U8#y< ?jߴ#H5>CtQs"B!^ow;afP O9>mbi2q<nQ{<ĂUHA類t#$#؈ˀDϧt6r}
-kҾ5Ɂ33Pbͮ&oad
-ֺ@#oa}45Z0*)66O1ʥJ=|S'$UAlG^4t-Ipu 7ږC4qxӤo7P GUT{V^7X-"6Z~nqSȭoޮ!AYvJ{n+nӥdtO,k'QAfK[0^j梤tA6WJ+RP0A.yA]T w,uKy~~WñO7LuO
-j·\ wE4fW+{P]\PJ)1&/I ^ը]T[|r2-JGUiO[Dqh*n>4 lzPaMiob;P=SmR\- Z\%UDy?L@;rRS%c9~L_
-Zgk\J%Xq5혶&$2cS)Kh4Ѷ}K5SKS\jhU<,W\&p&lamf
-8LQJ/u_"A M޹ [yzwN]([]ʰ԰9^ORn׹ t(yySԋϵW-j%vj`Dkͺ(z'HDљM51+݋
-mrɗ>ٯmꏙ$2Y+V佝t- N&ps E KJ_sy
-sw 6x٫AYc,Q؋c5s~A %RX!O}=E̅O!p0鿅$4~zLd
+569 0 obj
+<< /Filter /FlateDecode /Length 4558 >>
+stream
+x<Ɏ%7'k_D<'f݇j}RG|^eEIQDQ >{݆Mn/| LY۷o[ù/~.tGpό bO~)g:+\9W=[#Mky"}÷
+@:rû0[`J=Ԝᗼ nC?6#ŷ܊Y"a<s#{<o$щFzxv|O-ҳأK[%U1/JKmm=SzdLjz'xHJ*]-ڍQ_I@fI.1S{`|*NW@\bԠR't{! [W ԑO0V)ގiQٔ&@lW$N*
+`&n)IM O?6O֦Ȉ2?he 4#.e'|D|)jBdծy锖-e _LR$kFCu0*+4LV0] 'HKm M<s m iƱXhR4Zkf,v_YJ]n\1pH옛A7[TGIkAҺ#G
+-OԲi'S`':J9%#o5+h3uߤ GۣKa&)[
+zI~/.>'ԂA3u88>a"ءOL;#$1 f7bSE# 1h:k]R~ti:
+.p$<\B}6ryv~-j
+Zyh'ffR|;/0izL̰xFf8*P9S5!9FA
+
+v[=M;>`UZ>/CE ߢJQ"X6ZۣT&R
+m2282
+O60sd2-f5쑼S&N8ep}Az>hB[rz
+-/eMM+Qez7ν=n-$LP;0_[X9Ô76lӅ3i:xˇ~-I%þ|OdyhT7u\Dc>݋!M&X6<8լ +0h>PρŪcƜyĽ=-vvu[8qt5g?{+}l:%Z̥hfec;5$`
+^Df
+y,cNdË(!qs/sOlUL_"#;{-2P
+8qjؼF7Hv1P㎜ETENmj`Ts
+!V:<iM<y+BN(Le/c%ԂiKM; i%\źGO{?_?N,OϑL$Y0V<~ 9­d}|4JlO}x4Kܳ/o"֡).&㢴ppٸh3ޙ&Ë p?M>kӦ!_Ck)S<nrV[:7s?")ukF[[ke% B#2xr Vf,VY5\YDBgZBo;sBM\ZtiQܮeS2rSu}'.ԝ/v< wMY Kx%\- q-Kl"2iy:IŤp2e.J \AJdihgc@fddh薢6D9)д#k Ԁ[R..}<<#u 6 /|L{$w'qh[:3࡛ش-*΄٤kMY,]TN޴wn^0eˋLwc[|-`K(P˫^whni651
endstream
endobj
-560 0 obj
-<< /Type /Page /Contents 561 0 R /Resources 559 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 548 0 R /Annots 563 0 R >>
-endobj
-563 0 obj
-[ 556 0 R 557 0 R ]
+568 0 obj
+<< /Type /Page /Contents 569 0 R /Resources 567 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 551 0 R /Annots 571 0 R >>
endobj
-556 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 433.094 502.851 440.068 514.806 ]/A << /S /GoTo /D (section.2) >> >>
+571 0 obj
+[ 564 0 R 565 0 R ]
endobj
-557 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 249.881 321.362 261.836 332.201 ]/A << /S /GoTo /D (subsection.14.5) >> >>
+564 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 433.094 505.9 440.068 517.855 ]/A << /S /GoTo /D (section.2) >> >>
endobj
-562 0 obj
-<< /D [ 560 0 R /XYZ 78.37 808.885 null ] >>
+565 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 249.881 324.41 261.836 335.25 ]/A << /S /GoTo /D (subsection.14.5) >> >>
endobj
-105 0 obj
-<< /D [ 560 0 R /XYZ 79.37 771.024 null ] >>
+570 0 obj
+<< /D [ 568 0 R /XYZ 78.37 808.885 null ] >>
endobj
109 0 obj
-<< /D [ 560 0 R /XYZ 79.37 659.686 null ] >>
+<< /D [ 568 0 R /XYZ 79.37 771.024 null ] >>
endobj
113 0 obj
-<< /D [ 560 0 R /XYZ 79.37 294.448 null ] >>
+<< /D [ 568 0 R /XYZ 79.37 662.735 null ] >>
endobj
117 0 obj
-<< /D [ 560 0 R /XYZ 79.37 254.604 null ] >>
+<< /D [ 568 0 R /XYZ 79.37 297.496 null ] >>
endobj
-559 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 402 0 R /F66 388 0 R /F15 381 0 R /F55 383 0 R /F56 384 0 R /F65 387 0 R /F58 386 0 R /F45 390 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
+121 0 obj
+<< /D [ 568 0 R /XYZ 79.37 257.653 null ] >>
endobj
567 0 obj
-<< /Filter /FlateDecode /Length 4404 >>
-stream
-x]K W1> $RTzrNؕʧ
-`ں saf'M>caRy[aP
-q].uL,ld_E^J7y沖)W-
- Ңq ϼ娍E3MFWqvg(:nC~e\ћLC[,[~"piԔBo&4?,_,fPqOcZ_ww^.4pV]{y˻Obidjh;]J06ZQCA O\BMA](X
-%S~":#y_=Q묣ƺ2~T 7*@
-g[- *_H}
-dndcH
-6uWljk\-JuW1ƍ8ߙ8RwՇ5TH#'9<QjO0C}\%dVY $FHm6WFDԓ7Mv
-Rz+FbiyKo@>QalN@\.iO4;']{?YÕĭٮy$cS-L/p]iv֬^Bk)SɋIҞ;]wbR-6:%?MYܶ.? LHƕ.侩PqB6a;IOy Ob64IaH/J@yôDb\,RP2 R
-z~evݿدVx6G,&p)L鵘`&o} *#po 4JR
-;₊`pA[\PY
-~\:[- @Asraou#1$(swZۆFيei"vAXGƏ@SԭcT3dsVQ6"Q' ww'GۗI1j#F#P~G`?Z~~86CmN4|j`;`3wz_Y*a-%aCqn L$~Δ;+av`!Ʋ 8<Œ\cl$JC?\8D.S9Hd
-3p 'H}<es
-R (ӡ.G~Q ˗QupPGVxd=3hZh"P;>ϟuTZĉZF*mFB'bTI4\<(TG&
-^n`(Te[8a%.U11WX[D(_l
-Jdݰ8M.#*E%ջ$8äGt&Er)B>YШٗJ4v>բCK(Ε\י`0byVڙק r\x޸4>MdVQ߷-uz[;Xsƞe[Msf<턵yijꕲ)[m0ggm5u}1iWrTjs$6dBT( )/g'Xf-Zs[XZO)ӝL$ vQYJ[*@٬[ LzESJ𱕇ڈyAm[⇝ >o23-~$oGTAWA|4gYM 1k2c}GE;V߿7Hި`;Q?^Z-8H9E^Z|gnv/ͿL/{A]0Ȑ4nxg3Ʃ:w8-RU%>Yܒ)ftN>萩P[Jx4]£pm3rfkrzMq;C_8r6'V-fڥJE{&=hQxF/^K峾1\]DS҃#t8X8s'qÃ9%No`4u{4k´ҵ&hͩ\!53NSs+[ [By%^Z{mH-Ydj>ߗ gүOV((YՊ-[7ѡ/oU 5"!}=xH9sJV\UΚa'JT㫰U~A{^p"g@י<ek9P2BaóXwCІ㍃%k
-'@;(egv!lBN8n9oClC3ttF8}KĔ;Vs;iuX?
-%D6z>B(?&?7s|>JI\輱i+xeWaOwp"'깳q)ߵP%+M5C4 a_m[hK}"Y[oN\s =<N@es%v>b͝aB`s1XZO䘆g(H2*ZikVRLhn\4}vEG\4# , T&[~t'*RY!+ѱn8y$OGcO?;nwNɑnw(_bfn;o{]d^W}^wxsEk/aN$)9@np*-
-7E_,Sط]:* &C԰?W5{ ڄpLrm$oaC
-o| ?xhiꪠƃQWnw/.l?Pd<M&Y6ץsƀҏHBOV}ɥcݳ}X'0 @wJS5xM32ύ[=*#.6Npί J%t me=H{L>
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 406 0 R /F15 385 0 R /F55 387 0 R /F56 388 0 R /F65 391 0 R /F58 390 0 R /F45 394 0 R /F40 395 0 R /F59 397 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+575 0 obj
+<< /Filter /FlateDecode /Length 4403 >>
+stream
+x]K W1> $RTzrNؕʧ
+iCqZZzVZTwuh8i#u~|W}XC+Q4RqW3WURHf5@"o4lԖaskMtZ@=)~K</}3MnѽaH 'b$GN, )u-=?foY8ĵ`IC~*YICO5?\KZXʞ7+LRW6w*K#0-`ΚK({-?[*y8Isuǒ\YNL*%FUǢ)ǁ ظ)}q?ոtܷu7U&l')9I]؆7)A)\BW%Q q0ObVPeZ
+
+S7{T
+੧@kYP &PW9 x)d8w=Ǔ9^qm ^W7u09"JrKE3T`4cMcsk0LnM
+Gq} 2U
+xŀؚzBjK\:OBDIo}pSsq.p*4IBNC֜m ù3 %Rd %۫d hd_C=f lgll097O7+f 3JK1DT %ƑV偽>pަ᧗skyZuv5®E"u)Yl},(pfVa7levGGV^
+g:Mqj "[|ӡ|5ZF9&:op5 +~[k' C+BSA̮U
+F{%InԔ7 v<C\Ё߲pAenCqAԙP\PIZ*s\PZ">#.h vT5Ћ: @@rPo7
+bJfq4'#\>ĮPwܬ;RZH|}47/@f=P7C=wmHmd*N\v)Bo上1JydlOZ:5K:F5C6gl#bz } R!q' zZH>)G}q})=b>[y{ )燃mS74Oç_ 6s'pXRf RR1&=t@DRL9Rf^ }M`, CH^,yEq;\OŽd.
+[d}E3O'Kܽ`ې[*ȶ|/K_+2 Q9P[xo(IC_xߪjlDCzcKr
+:jS_ӕ45N%0%T{WaT˽`/E΀3y|ׄsз0:e†gL 3K
+en EѧTjYQov(
+ Xzt,98{]L$6)k5֥j@j0n=`k&(i6P2w~܄2@2D_ѽ9 :?:VZJ~R9zI8>??\Qr0,JW{JtϸZ3,:q2z4?t4H'።.v`w@q  P ] 25O _5~[æE6))Lf|]ݘDH?My(c-_>)? WR/QwK>+?46R&R[<Wl^0YݪTJm/v,*Q$#Li!Rm0RZ*:m>jh.)}%x*`hCw"ؒ,cB 049tzUJؤ_ιI?b#3 =M[%⎝Nwa!\vʺ[*¸
endstream
endobj
-566 0 obj
-<< /Type /Page /Contents 567 0 R /Resources 565 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 548 0 R /Annots 569 0 R >>
+574 0 obj
+<< /Type /Page /Contents 575 0 R /Resources 573 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 551 0 R /Annots 577 0 R >>
endobj
-569 0 obj
-[ 558 0 R 564 0 R ]
+577 0 obj
+[ 566 0 R 572 0 R ]
endobj
-558 0 obj
+566 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 243.425 745.619 255.38 757.574 ]/A << /S /GoTo /D (section.9) >> >>
endobj
-564 0 obj
+572 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 396.68 333.295 403.654 345.25 ]/A << /S /GoTo /D (section.4) >> >>
endobj
-568 0 obj
-<< /D [ 566 0 R /XYZ 78.37 808.885 null ] >>
+576 0 obj
+<< /D [ 574 0 R /XYZ 78.37 808.885 null ] >>
endobj
-121 0 obj
-<< /D [ 566 0 R /XYZ 79.37 185.953 null ] >>
+125 0 obj
+<< /D [ 574 0 R /XYZ 79.37 185.953 null ] >>
endobj
-565 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F55 383 0 R /F57 385 0 R /F56 384 0 R /F29 375 0 R /F20 382 0 R /F26 404 0 R /F58 386 0 R /F23 379 0 R /F69 402 0 R /F45 390 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
+573 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 385 0 R /F55 387 0 R /F57 389 0 R /F56 388 0 R /F29 379 0 R /F20 386 0 R /F26 408 0 R /F58 390 0 R /F23 383 0 R /F69 406 0 R /F45 394 0 R /F40 395 0 R /F59 397 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-572 0 obj
-<< /Filter /FlateDecode /Length 4087 >>
-stream
-xɎd_eځ
-2<>g /dZL+kpeGUnJ<O<姑u~> [
-==Ɇ?]bm޽M_7 o9Hx\KV%$eZ4Dj<J']Ԟ(If g$Gxl^5s>Yvh{:?X,{::D_HzhYI=q#n+pӸS7B.6hMSӉ,|AI _׭<Z8+M2Srkꎳ 'p8<Ot;yF:y:yXQR<q.}f op6Pj"!rnҮ)pT2gCո-*5j(W =U= \a%̌[Z?dM;i孨#E','3%Cp5<: (|ṯ"n%8P#()wwA];Ǽq:R%/Nc
-mE%/цSV_BWy`^$&n (@'\;&`GF}$P
-geOEJL(h1 sjUШtA˘YqaD 4ZΙ#z16SI_NˑtNl~d>~hÙ2Z} ʭ9Y#Ybւ JҀoK ћF|{Goq՚
-TuU2A̎zM+A^%uŸqqqcFEr@K蕏ZI#iI<:n0)5LiAkڼQ@3.17m
-.$1ؙCc
-<R2C͢ C2^,i,pcG֊iD,MaWɹd]X=.OqI 1/7
-D=z_i=`#U`7 qS-%r׀lv^ xǫCbLM&?BZf&˧:+oIq;UwҽicY]"6ge?Si;^Xv!MOʖ\-Xwghhfm1:ƔmJ`DHx^]*h#aB2T;ɏ'r͚IV4#}/5-$L[_uuR+}Rg#MR-OBHx5ER
-iFRu-cJJ->VNS%~Dw[in
-"Dž!N.mn'=*eR|U'%ԝa nn?906RZ#6]*5:3=lyQoѕ[x#mvq%h>xU!<,.
-vK F&e C[9#1\1ѽq_uZa.-.6\Z|$~{FfɟZpOϿ/ſ^#QYry
-Y6ij"4
-FSL8!z}jjӫQ?Ghj0M-P, ¢tZh7xWM=|4%M=bzM hEe~|uuCH U-C'Z(9YjFfN_#Дj #5ޘ֢LPČyAB^냫y|]x̞E|9hڗiîl薑GKz̞6Pwϰ?u)sibx=^Iow<7 HQgFA<ah{VQ%MqLF;{rTt!Y#<վys9\ȋu%;DhHqM0}o*;Yӂ7;mT+ A=[y6u/(3šQ2R3Jt݄ykktxEGgohU,'(a2TzǘR6w *fPi-eVoX) r
+580 0 obj
+<< /Filter /FlateDecode /Length 4095 >>
+stream
+xɎ%_QGϡeځFyii>9Hb$~H[-I=^=")oO߾},7`wجgnƍؾ~~y83OO8}\
+3xQ( <_ f[pL]nxn,ch{C
+LM_7 4sHiV%$eh-"R5L.jYFnn
+Od<aq69,;4=c`tǾ{r/D=f\,Ǥv#n+pH!S4IMsӉ,%v'I&h&~^tz0a\iI)OYʭg>=DsŊorE#d w5ә0x>.y;"U @ukv=LQŅ"̐E8B nW<VCr&L`mZsq FKUÓlR]ފ8Rt’y2#.=-p4iA1_$̒aPM
+ pgNַR;۰v6,`NaG%.M$<0I>א />{ M<@y(ˬG\5=,Z
+Ih'ܴ‰1 ^U[O7!>N2nHz #r+i$?QhcRvޱ͔d/SDi(޴*hV ǸZcgv<90A hNB\qR7 if$E#Zws 1XIɷGۼaWMBL\>j{CɐaVZ/:D@=?BR'gskD0IՉ5ǣ9̺j0
+BcU0Ԋ;heo4FݶlXݿNk SVXKfVpr'b^$H]aN|9\0Df
+InVy/eq1s`@'e4
+G g>}I}Ii#"k%;/' >'+$x[~g+䠆6הQh4ЭEmu MIf%;ciPgfJΤ|"s[$ή\$nİUW/ߤ/>2V39L{}ń;4M|znzes{: CW&~\0.۷?6F㑐ݿ/[gk;$A/~A=zX-ϣ}> mNXwR5>ZRE,EWwQOXR6z w6˸󗷚Z9P^RQO՝NgMɀ=(
+$z h7m{):rjmfIg۵;zVO%eh J%\XOa7/7<p
+tRG~"g
+}j[Tkj-"kpW؝
+;^4qV}GY0<O% aڦT'8KGVkF<%`Xs.0t0~| >
+ͮkHt)Gdʸ v<D>;ɧUfmWMr"+3g~;*5*f׵W2cgPP Mz&T]!t&c%1F&7~Z8:(YO6NyC9bvCV2
+bFr3N6[6KCkRsw4$`I/c˯_-Do+/oL@xX{RjDD F&
+VBHKL:*5 [#t88UWu4uSVw>LI  mjiaQ2W--gFwR#@\T7ki.5_Z|>Zܡb)Cf_M Pxyb@ϛdz
+\@I㫩+1ۙwqt
+U>Md[Iބ^խӳA˗I05.Ўfw75'Èb dݕ½/F>a$%}{l-Q`̹.Q Hj
+ʈ}lkj֙]ɮO?YqkQJV~W}taG(ƨ@hHuOtRZH41
+?D=:4Q̯jH ;HG'.\
+-/9X8̈́TG&WuLށ
endstream
endobj
-571 0 obj
-<< /Type /Page /Contents 572 0 R /Resources 570 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 548 0 R >>
+579 0 obj
+<< /Type /Page /Contents 580 0 R /Resources 578 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 551 0 R >>
endobj
-573 0 obj
-<< /D [ 571 0 R /XYZ 78.37 808.885 null ] >>
+581 0 obj
+<< /D [ 579 0 R /XYZ 78.37 808.885 null ] >>
endobj
-125 0 obj
-<< /D [ 571 0 R /XYZ 79.37 432.887 null ] >>
+129 0 obj
+<< /D [ 579 0 R /XYZ 79.37 432.848 null ] >>
endobj
-570 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F56 384 0 R /F55 383 0 R /F58 386 0 R /F20 382 0 R /F69 402 0 R /F57 385 0 R /F26 404 0 R /F65 387 0 R /F45 390 0 R /F40 391 0 R /F46 392 0 R /F71 415 0 R >> /ProcSet [ /PDF /Text ] >>
+578 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 385 0 R /F56 388 0 R /F55 387 0 R /F58 390 0 R /F20 386 0 R /F69 406 0 R /F57 389 0 R /F26 408 0 R /F65 391 0 R /F45 394 0 R /F40 395 0 R /F46 396 0 R /F71 419 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-581 0 obj
-<< /Filter /FlateDecode /Length 6103 >>
+589 0 obj
+<< /Filter /FlateDecode /Length 6106 >>
stream
x]I%7rxGp_F]j/f`e`N.W4e hUU`|_ &S=?~P#/9?탆C?b^l|Ġ_Q(|zZkA2JQR{'ojvf:jY Sx
-%u94-\3RO`wQ%Ѻo-ݓ[?..ɯ C8DQa>Br"-Kdʅ|xKҫ`4;l+'NmYi/'Omx)ݦ`֒aa`sۖs|B0ZtmWC8l3%*f…
-2 ASn{@ևI]9IŌȳ>3Y X?qqr >>yWk->}njR>{ŕhoЅ~7#v'G
-@hYc)|
-]8>npM@C&Rt'1/aqѪZ&ɌSč@Q{.`S7#OS.v$SVpFN̫qǗ!sᨆ'9ve! lNleZ?1_ڊQܱݍ.)nk~ ,Xj5:dqõ\Av&oy,DZ-n?Yݙ tH~]r1C, /L![3/=͉~_*g]60[=|*t=10w70/꫔m==WVD_#)+\zKNWI(q(/J!CƠHj봟[?k2CQ=hśV٢VrbZAN8Ň8 97Zi\Œ[pS2 *մkK)v{/WάiKhۯYg8=%H!C1}؊鎻lv&$W뗲?!t__aBM_mdw6!kv䄬[6 ݴ:kg=ʌڮ^$70qWB~$؅??aZLH ʍЗŒ}P"nݍ0"vڦl!6.%;uԻf6ykLm7}j(m ܁٧9Iۂz<_TO)m!T_xMśnWrM[ \Mgj4ot\ӛ}h}>ܕy̎GỉNx\u| U tlYaMIRE w|]u#;q>p6791q$}i' :u|}rp4?ǵ-<ea\n IDLޮ#avk-<lSﻗ{*Pߞ~OUE0˹j#tSiC<߸?<#r|Ekcw:jWR_b8_.[էz:5qeO5PgBޅ8r8&yYT.{7(0f,cJώgAQ/A \ؾtS "T.s&t=0'
-nf <Í%IzW3no=7ٛ;n^ck7qs`teQ:e4n8xܼFj7Hqs |ܼh_?n%!$7ڣxf77𞗄.RִƮel6kwfd,3~5PemFN{26IwHf$4ۼ!~%u
-ʁO3|rWNvmXsspyj FW= A=hFH/_hm*ߝ_RVT0:/ʔ^HK:MO[BI 4id]6C(, J .cjȓZ4uOjq*0xA&Qm4T l~ze]2j -M`WlPN 0L
-
-DaQO hr6%SLwGt
-ʗC9>`Oz(tj ]#9fXa($̍"ŐсN*4۹F pv_h rd~FXW*&# `GHc@9Ȋ[EzQ&"[ʚ}i"K@Tߤ! D9!bzasەR`N4*(E+D4Фɲ\Ή3zTLG=# GH c@9Ȋ`aYlHy_р{%HyƗUWeKbjV2CI5VXq&U!KLAIwR}
-37j]eRw6G""2Ǡ݁r 4‹L+mW2-3ݔʡ !Jv@┕}JH!X&%3T$hm3#
-JQNݕ"oJ<" 3Jrn2y4G"A"2Ǩ݁r 4‹LPjeN% ʲJntJezʁQn*E!E<dPsvP*nn#
-"YLz_xf Gz@M?*f͑RC5;CVxa8D&ђZe)Z{f_^FC^E˒p,QU"˰ -bolV?jQ&kR)0,JmW̰{=7ŤĚSZd@#.6'vSj2JF>#%T ?VwU5[*b#.mɔpTd82nWTa](bojM+RiD))EXlsSTehr |.`'J3.,%|&U[u*MlJd,vU%N4>#+T GXJ,d L$D,Tehr}.n'Vz'e\X>JXNTaI:u4*)F\lsU(
-hq|.uGJ.'|,G@XJ,D K$ܸ䉽 qODVbjjG(b&
-bBFզ`Jȑ,,`frAIbs^4,y>JUװx"]1²SZr KQUI TI1"c
+%u94mZP@<Ju C[']\_]uAyqfu7~}pE
+[Z%.p-U04),> 񬗤WWhvVNP=-8"7۲
+&eq}^NvۖcaS&,AM%H1Jm Mx-7Boa^3q𭯆<pfKTn̈́ e.?l>Ɓ<r§A\yIg}g#~)_ų| |T}[6-X[2|"p|VVFqe<tIB4P:Z`V=X
+3=JAPvAʋzK4d ͥ8ؾB>{\`C&Rt'1/aqѪZ&ɌSč@Q{.`S7#OS.v$SVpFN̫qǗ!sᨆ'9ve! lNleZ?1_ڊQܱݍ.)nk~ ,Xj5:dqõ\Av&oy,DZ-n?Yݙ tH~]r1C, /L![3/=͉~_*g]60[=|*t=10w70/꫔m==WVD_#)+\zKNWI(q(/J!CƠHj봟[?k2CQ=hśV٢VrbZAN8Ň8 97Zi\Œ[pS2 *մkK)v{/WάiKhۯYg8=%H!C1}؊鎻̼aLy~):(A%&_.ކNqjfGNȺeAoM~V̨ۣzEr3ߩ?jq%G2q*]ӑ֩ń4p~1.})G E+v݈#bg +mzRk>QSH[ofs$Fzcۧ}:-M4ۚ AN$[)v+H454piy|~hK:> [UoeѿmVC<fsLУִD'\|S:G>ㆪ:$}u s|>}.ȑ̝8|| ?_yFŘ8Q3:Gq>
+SFf<ټ(ds4L7Hd3vlnPK$+7bm7Ԟ71և90v:n2KѨv27we<n^# G9v>n7jJ_\BKBo<YxKB)kcײYf}e5;l32vm{?c~26#e=Geu;l3vmhEҺKB[AA+pA$jxo.>8Cȁ9{r4wN~7w h󬇕V -MVnK*r;*bƎܦyަa}.vBUSyOt:'pMK 'Kg_+'6Q y,_JW~9B8<N]ߞ
+4#/VQ6/)\*ea/$^&'UI!k$VCK.u}
+UCgp %|5fI-캁'8c<EӠ (öGg*S?. b5†&+n6Y('B&a
+<h H(vE& jAe=\ѓ!ESH0lEՑ t7Ch$F(06B]EAWB(MĀL9$Hͨ0KBVi
+[IFp[H6$UY`8#-[m&i\"H좉"q9aCP8P9[KlbH2@8c^S$cu1LUiYS/Rje`Afg9L- 0!LQNeBzNFx
+rJ."e $SOj,D&)Ăv0`c"=uXc@ R9e4#zLJz@3Y-?BKFH bI;"]G%h"Ѱ'B)#t:
+ d>!9&'@Јl&$;TJ5[YaF\𴶼~ ^ ރb քگ%qv6gSvQKzP;UҢ<:K DPf5!)!s !@k+Hdb95'M,$~i0DNyDèS9Ip#D!E4h!Sv%nmF ѡ'Er=:5Q.Ƒ~`TGN0F b y' [HWz/E4?9DHY{?qad+H#1jjwdEͭ"=(-e;Q% J*oR zB"k Ҝ1=R9BJzAH0
+oGD"hdYb.DyDl=A*&ߣ͑H#1fjw dEFfH0,Xy/h@QR$<R˪v \֫ORHi15+!A@c+8a֪ J$;> zTL;#FHc@9Ȋ[EvQ&•dy+x\uyCnVP%; q>%$̍v,d
+\N`+fXXIbRjb)-l Jd)5%Z\#ԑvń
+A^[Ll`JYdܶdJInq\N`+f.P7RETH"ɔ",)R2H4>%X>}SXv:&Y6p%ňM2@;ʪ'\cّvń
+F
+'$U[:D@#.6*vUJ>#%T ֓>#QTJMcAIq%Lzn\^JEƈ׸w"+]1Rzqb
+QUI LI1cL
+1<)<[v7ޚt.]Ք7Е]g:){ghkxi:}kC 2Tn~.X
endstream
endobj
-580 0 obj
-<< /Type /Page /Contents 581 0 R /Resources 579 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 548 0 R /Annots 583 0 R >>
+588 0 obj
+<< /Type /Page /Contents 589 0 R /Resources 587 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 551 0 R /Annots 591 0 R >>
endobj
-583 0 obj
-[ 574 0 R 575 0 R 576 0 R 577 0 R ]
+591 0 obj
+[ 582 0 R 583 0 R 584 0 R 585 0 R ]
endobj
-574 0 obj
+582 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 222.812 543.437 234.767 554.386 ]/A << /S /GoTo /D (subsubsection.15.1.2) >> >>
endobj
-575 0 obj
+583 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 242.658 507.571 257.383 518.411 ]/A << /S /GoTo /D (subsection.8.2) >> >>
endobj
-576 0 obj
+584 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 273.104 507.571 285.059 518.411 ]/A << /S /GoTo /D (subsection.8.2) >> >>
endobj
-577 0 obj
+585 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 350.065 151.966 362.02 162.806 ]/A << /S /GoTo /D (section.10) >> >>
endobj
-582 0 obj
-<< /D [ 580 0 R /XYZ 78.37 808.885 null ] >>
+590 0 obj
+<< /D [ 588 0 R /XYZ 78.37 808.885 null ] >>
endobj
-129 0 obj
-<< /D [ 580 0 R /XYZ 79.37 432.717 null ] >>
+133 0 obj
+<< /D [ 588 0 R /XYZ 79.37 432.717 null ] >>
endobj
-579 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F55 383 0 R /F56 384 0 R /F69 402 0 R /F20 382 0 R /F29 375 0 R /F23 379 0 R /F51 380 0 R >> /ProcSet [ /PDF /Text ] >>
+587 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 385 0 R /F55 387 0 R /F56 388 0 R /F69 406 0 R /F20 386 0 R /F29 379 0 R /F23 383 0 R /F51 384 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-590 0 obj
-<< /Filter /FlateDecode /Length 6715 >>
-stream
-x]K$7rϯt(o&S;  h/>A棲z[{+:#`f狾|A_| r_/\ʦtI(/<iǫ]F똵vVkg'wX~ihFfڗf6¿/?}zc5wk=֒m}vbmm՗.B)}^zoU=H!D:9Βyp%T
-ZXX vjS\
-DXݔ`'v]w/cBqԬXsj,۫$}d/s`Ag3rT͚[\Hf7w\W"X_v1YaIǜTr3g`YFXskI?d:heέuU{I P?d32=葾ڶͲN{^Xlٻ.Lr)̊18>:
-ؼdžZd,K&B_jC+8ݺ^25݈; ?,6YɃV]ꪬ(P?G!S4Ї"&@8~nJKqޘ#t0 1?,*ơV3nre9t<sTry3]*77FTHqEHqy3bMe )耸N큑QgsTS[[*3*ڝXv%xҞ6"Y6[UO0|LoMCkX J JֳK؈ԅHt7Yckgj[iex(?uU3L*9=6[wWJehis騂1{ cu^$Ip"vgVz؋<)pprN32<<L:FG^\$Uy* ٪᳜UdW &ĸ:/^EִtRӇ[R۝;j]:15U47#l=5~3m-h:&}l'8oGq׶tWQNjpaE3#ھ[:ܞNg^,<Wpjga~Y-:)HX[>ЕAx*Jhq,PJ[xnXܜW<{Tx ^YWG&y/<cpf<C \ᠷ](N^H,r+"V9-ߥosCTNͥf[*a' 鲯rDEm[dkWFqx*"lB+a ʶl<Chn On6d_C=l/1A/CYxppkU0NW=W}Ah#ޞ
-; ,|{=${{ĮNJV-~decA>[ ́<ZN BO xmtg
-dZ\>?yߨ嗵o=TKP޶x˶
-@oj8o|"B8T6/~
-u6PNhwwRT7׆ԆG]y;$!^1Û/2>i[E>!^y_qW6^0C>:mJQˉ%*-UȠ^i8o7rv*R{rtoye]">uoJ-i2Ѻт>6Z X5+㬳d޺Xcm]f&@Q5ddslNbӋ4`zG6
-UCgz{AI0Q~ V
-O,OQ64v&þG2H`wH64]qB! N6d& 0HP42(69nGV#Hafc\0qQ4# YdAWI sFy_iH>a&꽎hp$1%` Hues^ ַY2 g3HQaM=%$=|>aXH6$UY`8|(M*ف$4`7hH*v\aC;|C Dc%M!
-v’p:žz'Q&2Khdh׹`˸)`ȒL[>DX֒ ,Tb &Hed&QO'+8hF&&Ya$f(`_2uN &HEŁDŽ9]uTAG+(IE=I#ؕL7 hB)c*z:}q@;CrAY %!"d=%ԡL(B
- deN Ih!24"IK:
-o9W8b!:`0]%6D "Ϙk];-I rABA+z+
-`hnY6)n
-@,N*{]a &($%ı5Hb1KĐ{R+#l fkvh%^H!Y?U.!"!cz!HQVXa9q"JIN^CbTAI'R C^%'ֈ!1v]Ҳ#$Q62`C\ Ҧ/n$!DdR'+
-`hnƊAʧҎ_#&UFq6z(V#K/R؁1KJZ9ڌ"L2F]["`z7%Xj`"X~H )abv'u7B~@fHI qHAƊ͚I## ]EZFE,Y"XŽ^U
-^bDŜd
-
-rl5(e I";T 7YSAkS:Q%݁qa(c7QժN+SiOMB#nCVH\ɎtP}w ` Y"tTm4)e ȄIb@.&vbk1""R2DRWiRYR$3dR\`)/`buTm54)eL I/zT GYUA+s<QqjSrb
- Xu(e))F\lsSd8lqF>W#'T1;0*A%¢vlJUR$@K97OD bd
-+S͑*,vfA!bA94R\AޛwG{2jcRr^|^tay{0\v獗{W"s} ;/&utc0O}qk#+pxk
-as"F6-ssD{)BWuje7GoqHiNĦ?Ճ4xW ߊ,9F2++"9vޖͰW!diz7'
-t)v<A e6 8jNNޓe䳝fu3^pQ94o&;+{ o5엧^j}a:oq#=5>Q2\Yvi"@H3erniuѬ.֌OvVz9r]4dVE2ʳ9K)eq
-JQ
-00s^_jXnU/P+xkE[} ]hysOĔf:Ʃ~cu;y=}K:?Iht='ü]m:5ݴ/V^ť V
-PTOcY/ KnSߞ#m&ywԸ(:#o&o^齉 v/B<!X()(l;ᵵ yn!&
+598 0 obj
+<< /Filter /FlateDecode /Length 6721 >>
+stream
+x]K$Gnϯtt; <V "n=kH2+QY{z`_`dvq|[o}X?˫ hXofVؔn)e/?}\?=\a5uuv]˧F=|6 R}h+G.6*|ziϐ"JKQ9&iRmhdQ a'7՟qdA!Mn,e\B0ߦcXE2u?=,D{ mXj慈|޹ŭsi܊
+2ʨdz6zj:l/Y#)=XѰgvgy97)fXs|KI.9]b`dc)6Hb-KlQ7I Ê
+ kuq!5NApQ3ѦUͺT^tCtOgɤmA\!YKovDp!j$V{X**ARݫXsďX?Τs`Ag3E@bͫ;r.sr7
+;R`Ҍl-{_܏8"+t,iI 56ϣW?eao 9o}5\3y[>jXHfu-G6؇v
+F\5>~>Q{5OQO+$VWdZA9ͧa٢C>sMKӌ$Zݛ~d3Pm2N9qm'.`6qpp|W0T%~0Q}icȸ6TWㇼisY<fPO~''ڧH?$y* cqktq"mh$0ǒf&x< ը@>(<Dd"Q+w8]<?ݱ\ٜ
+ͳ8qH7KuPmF ,;oOd7 Xsz,?r n%m;i>F֘%zCy >mʄO[.josߨ(:]E1|tEk\;dGa)8=)pppK^JIaxgy!"^ypf鋸mG<M}+Mm0/geϲؖ6ڵP@|WTG8Z;?|.uI.oNn`CY;~K𲩍J:<4 n!:3뮭gqkֲ/+8 }s}bY2yu֖/teZ9Ug]u/j=+h ~o|<=F#[0Pl
+_ǫ[Tc䓏4H,q7@l2Z 2dm#ТTن%#Ow@/} 7"*p$RË3hIyPO2d]C=.J.̡,>`g68n[kױL}VRV8JmzI~T=v4UKsh *l<k+Iot
+ =R
+jeէXT=QX^g Ғ
+o~O8 FytbX:y:2 UNp ?y˶>,¸
+%@\A
+,@[$_Ϸ Bɭ] ?n܀qdv_nF^Wa*4
+ԝiK-nsמ AoXh[>o? q\h=R{3ؑÿ8hw#6KgM{sMrtlFs;aiNA&,݂斘̿z.CֹA,{(Yg!bz-`0|7@#W!C0sknAUc0gx
+Ya|`z ӟ
+aB..WI]Y=y!n_CY~ "ևe{P3ܭ}ǖpOgGgˏp>A$uN wOP<շZUN-A7,-#-'Y 6vԘN <O?O<-=%A啽Lc'.KA':Iv`AbxLJ#ϯi[RŠ%h1Җ8lÿ%w8.K2FiLIHq8ޤHp&U# E+Cgad$e Bx
+JSM8)ai8@F
+JidLS4sQf6%
+A)$Q eBA*Nq
+{6,4 8#LdJ!L8< L@ɔ: .4if3ܲY.1Vxr(6 -DaW(FH(i2&#VXXc"i10 ͶԤL/Tmd
+@-&,pXd5ı4H`-!al/ͪ!$#f[!0HNXs@$S-JV i3$'`%Q3Bn6(ADKHK*`H=b q[!1u$4#t)4&)‡c\ZE`"h cSiV i'I(K8^|@$+bdw>֘%f^nd ҈"1D4„cFamE`L ŧM
+"FLK{E m|()I02&r'Bi!0ׅ"bk LD`"C І! 3
+Pl$"d8hFJ"zX3I#T8Ud;2E"FVa(n4B&cP]z@$S s$ -AEYoL"ZB^UCIF2i[!0>@K44/tF _JϮ1c\m$;XY˳JXX=fdPd
+?yO<X|}2܏Nx$S$,06'r'6",,UZPiٵ:) V)Z: 04444dKfHL4w
+zW}
+*J6aMEԐ9g15q4UEj^jL볫Rؤ;5;T5)YA(rk\QN`uBF˰p`96ŠdŚQ4$e,XdePԨPuBF˰`6fu4$e,X(*sBeaVxx4NT4JV-DIcbl<.qb=%'fjtBk2E4K ',$%+֛R $bl=ϮpbEU"F*JA
+]9*b)P'IEH+XGʶ칂VޛpwO{2ogߏX_ap >qM.x[ %wWO|կbbxk WO -6c;TwC)qjͻ\o7/ީaW:u/۾.࢛&O=zeѼ{}
+Yo壿eX]ύTƾ뭕zܒ4abg \>ъhp}|Y/Ĕ.34إu)OåGiudqׇ
+[ǹfOhv1EQOtZ*RTOk: Z']H߯i[4<X|]7TV^~M%inl!υfydQRtDxւ&wAkkw in!&
+;
endstream
endobj
-589 0 obj
-<< /Type /Page /Contents 590 0 R /Resources 588 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 548 0 R /Annots 592 0 R >>
+597 0 obj
+<< /Type /Page /Contents 598 0 R /Resources 596 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 551 0 R /Annots 600 0 R >>
+endobj
+600 0 obj
+[ 592 0 R 593 0 R 594 0 R 586 0 R ]
endobj
592 0 obj
-[ 584 0 R 585 0 R 586 0 R 578 0 R ]
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 297.669 666.582 309.624 678.537 ]/A << /S /GoTo /D (subsection.14.8) >> >>
endobj
-584 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 297.669 666.568 309.624 678.524 ]/A << /S /GoTo /D (subsection.14.8) >> >>
+593 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 156.581 182.984 168.536 194.94 ]/A << /S /GoTo /D (subsubsection.5.3.5) >> >>
endobj
-585 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 156.581 182.934 168.536 194.889 ]/A << /S /GoTo /D (subsubsection.5.3.5) >> >>
+594 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 378.058 119.666 390.013 131.622 ]/A << /S /GoTo /D (section.8) >> >>
endobj
586 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 378.058 119.607 390.013 131.562 ]/A << /S /GoTo /D (section.8) >> >>
-endobj
-578 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 297.743 67.03 308.2 78.488 ]/A << /S /GoTo /D (subsection.12.2) >> >>
endobj
-591 0 obj
-<< /D [ 589 0 R /XYZ 78.37 808.885 null ] >>
+599 0 obj
+<< /D [ 597 0 R /XYZ 78.37 808.885 null ] >>
endobj
-588 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F56 384 0 R /F58 386 0 R /F55 383 0 R /F66 388 0 R /F65 387 0 R /F29 375 0 R /F23 379 0 R /F51 380 0 R /F57 385 0 R /F45 390 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
+596 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 385 0 R /F56 388 0 R /F58 390 0 R /F55 387 0 R /F66 392 0 R /F65 391 0 R /F29 379 0 R /F23 383 0 R /F51 384 0 R /F57 389 0 R /F45 394 0 R /F40 395 0 R /F59 397 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-597 0 obj
-<< /Filter /FlateDecode /Length 11689 >>
-stream
-x}ˎ,徾""]7(T
-fkqսj@3fvH%4
-Ⱥ'̍va ?n˿_o>\ۑ}?nK1Jv۞O?}]/z=n:jF&W>a~GWlwkFؚdU}dDJbV!H|O+8p\y9Ρ>SD U<_ܿ+&?H>EWZ*31G\rC۴8}jߤ
-npdc9UxlnRUV̇q8 ,H/=z $Qe>I]ܵ)q(Q}ά*8kH{ F_EAꋩc^u!-)jp6sqTB[3~1[bf>u쇷q%ޕmZ71_VBXYp#v~ .My[*y(ʐ'Uh侜ޅ-ǸzNiRhc[<3z<89uisG"Hn5!Y+S6|bg9PnI^zsh
-e? I5lW}x |ֻ jlZ/-P9, #͖qîXܬWKw|;ߺޱ _^yqA#Cū]Nq_[C5on^[GM7-S°FCeYj:KvX\_VR*OԱ_,쐶4|TsT\ުwW߿V~^\>ufGWhx*8?R'ځvБ8%sң
-2 B%PMY[(}Co^84m$'gpkL<co?ܺ/[OƢkk65
-ftTc0=iyn9Sb}DbrC微.쟊OZ(utBAy-"),tzDF8= Ho[X3\ccw/axnŴH~[2oӳtNje4<2ŠGUmq+xv/6OrvժW}6ϕv[o8q(1fjɮ<:.nH<Yؑg) gGW<id= 4;̹^ q8k'3VGzex~ކ)7OȲ6#Kۨ 4]GVf^x"]hX <H-z\yT&{]|VUy uJ4iK<OrDS\)Q/~<|J2X}
-{^wͣ ߨ,ww/?3< g:WOԧugSzGofX+=s]oHG|crfE5F&z.򵅧*&4BEJCIcCX"u!L~'*[u4?}[:pPG?oanGu7s*Ylo`6[4@,BsFh׫1q=#w94RUk"J<X%*W [!ʷ#\y"խPkvVQ뭆QoaK<]'"6UR{~|-L0g*QsEJG楀s_:?%T
-boyl5/q7ME'Vϛ0J&jVʙ gddF6iif/l4`gKԉg5ku߶oI߷̚џ;\?ATvz.8 M o1`s"M*q\?d_Ba9 LʵNT NT LMPZB1{+'qD]xIc藾ٵ}dS}ͮ]|HI7]+3՚X"Qq^xnZ^z\k~ x%Z]R_JR"\䅖^1DM3:lXNVTA]LS,Uq r+_./4YRqB9 %SA)˝gi҆*!(WY3TΥC֊R ͠4H
-d!hOX@,`ዻU;PbjE!xhqkB6h8X;z<~e;%l
-0w''y.n)A^ s -͝ 4h +Az.4 MO?DA&Q̂W+UK2O^K RwoLYg%NAGpP f&*%JW$ zXI4\'_
-B'Q͡Ds 4VФ qw"JsGc?Nh"X]
-;oML5S;˓6Pa`dF͔:Q=)s +
-Cs=,
- jκDnCa0EPh [ٞTzrSJVqLbجd:O. ѬiaXa eS#d.ORSnP]ul lTZCaxS*Mb֭آ"Eqy}Zxg E*01U~f&ӡҰ^,Գ c4
-sG,#,(?vP:0LfqPY;YHiXgAC%g'y RuB (͒\ph ;slG X{.fnX}[*P>)t%" L <'Ԉ3C*ج*{pi> Ept8&"? T`Rhj<=Uhz| 'uWbޟr+eDU?iE4,ehQ
- [iu80ey:,UxxUl L<4LJu"8T'Jlj25r~ UQ[_{KyO+ibxl MD2@hDfA8t+n*9s$7.0RYn&GQO+8$%e=`6N0Λń#PO'H [4?j33;oESWHBvy$@|Lb{VSraCKjrzSq -H *Т۷BEɊHBSM|8o
-0aN E3222]nP\!WLBec/G UQh
-J-r\hmkGffi:GxxiЂQWI5U}4k̹#4brZ#~fHu.7FR
-M&;T3P ,)YRk"@q@)+I;Jϙ+  sw;A2 ;Njb>É. ǎyjaxP4~28?yD.7o{%w>aEKjg\ݙLp.=m.l34R65e.;Z
-`-XiԬin#Bq@U7{a -1)p/HH?
-I$w?M.|o_򲹽\TQX=jp)M;P\
-^ວr" (]=x Mpy}Am[S_޸;tKGD!iGvK yK@q@=ϻ,_{#63!
-5M44<
-veŞ'),1Mls»@ F a)4fDnN,E`};I`iZxq%((8SDAaW+HCW7'2a;E=GDގke4Cʨbiҕvl(*&PEc39y0xDŽ!^˷L 2N5jߨ{Y:m0BMM4~si3f%fm9*! 7S+?]LfFBz] KiP/u\hk[(lX@#qg+UIW#hC}T8 o* /mz^uT;Nhh4݉NM^+swR6֑7 Ta dW]ud :;%Ţ8 vbkЉOPs'6*D fKԹgToU|F2
-qe|I x;Qaiӑr2n|b#7IBIdXy)N!)k+
-BW7Ä de`/n"Q@ BEa-wRFCAA|-<EgWP-2¼Sx@;zh&w
-2
-ugI P pw+Ső ?x 8~l=C=#aͻw=>r)F9ՎgJX=@Oy%!:N3j}'bF^_D̸󲍠Gg0{j"閯X*? +rUVֿ1mVa$zf y'r6|D+=}X1SnjL &QUt_?WLg2ʽzxZ͖6.NOu{Uk~Zj1jm/uDWՃѕ^QzҼP>;AiŖGri2b38=O;DixH7~ͫ_:ܩ_f׮;Qrܜ۸wjW٥g~Q_˻_r=.+N:>/VY/͍|(={\>L1kHt`МʔF#aX@jl)~/ұkV09
-P_[6sqS >F dzijqI{ e}c
- :i og>s{Thd24{ODޑkQMP6gH2iKhGo;fePyIЀ/你mإ
-
-jjްT`6+EptnJ{@-{J L̀pu
-жP}Nۣkj19$ \fG'_"RRQ8xPtd  ;Q݈4|FQI^B'%7ʼGec+<*bΔXpf݉mDTץ;􁲸e,4`f~"$ C[-tEbC;$V x4|^n[]}.םPc( o$ ,&LZ(gKܝw4XA%,7QeJoX l4aF"JI@:3Z褌Kܝ24?2;>OdQK[:Y@uAC)W+E(KYN>g9D\xo=ct DdmaXSJI@:3Z褌Kܝ2T5Fk͇pvRpn[d= m4]"KFn7VыGbSˉM#dhd3u<H u؛uQw60i;1(l TC$3ܝi"Bi \E$Tj`e"i`LuX< uHEy60i;/(l TC$3ܝi" }`!%c)rIg4a]":!<GoeN%L{gAt4|
-8onO]-ymzQ;Xsڢq+swt/bb;J}R_U>Ƌ5Oz xm{ނ {Xx5e/Onm;z}ZvY7?y}6K*;B%SA_z_m٥]Ֆf7?fbI}'s~06xIզ-ƺ{&·,|5pvR?=m+-O.3O.KZ
- Z?/
-ML5; g~m}Xh{FL4zrr?, Dpcu9E WsD/g4gJťmzRJ\0X٨GK$u[%oTWRKąIj
-rW*ؖ;jRI:C5
-EFk`]p@N\b+( uLGZ҂3Ce`NTWah+) V.4`m&툇;]*iJ \ab{Zc+4(o|`V{͇yh ksP/w=|e>T sy"}Z Ǹ9+!X&_li20)}σ{|<[2S).OZ*as
-0%`jdekNeAbelP8;0BtIN)+. P pw滪\:.WWM{(k E򉟉 4ބP+@w
-NkȚ3݇E]j8>;@E3Z$[ڱJƄ6"< +ܬL$}\3Xwl2*s\TF3A|-<8^p̯
-N;0g¡.pί5;Gko
-ʹߋ@y
-ȩm!Bi2hEϣ=;@E3Z$y[ځJTW#8Rqv4
-_8ug\TC|@^%B$zyؑBեY̳]U O=B&Fg)vFCA cLS^px~3O+WjnX8op6MT^4I޵bBA+u1KYx4k=+lg1S
-`e.E
-`R&
-_$# JsMgtB0yzDDXIKH s^gx?d|F27@KBG@#TZ6JdApAw+e1xҔk>ӄٴ&%bJ \
-(0ؘ3uH"9XhI%s_4S oJE,>0meNCf-4/
- L546L|,,>*$G/:<Me. 6^R[ᨓ ;^''?)MN2MuB t2؈KoNwA|,H
-V>wէ[ tu!T¥ϽRzSWGOVn"xJԨCQNN.DE*tg_mcW}I[?zӲ$'YurFru|or/a1q! U3IiVŤq0([{Z»<uv~x|,Zm;s)~gk-w{j×LJ7\w&ԁ)̸ަ#;u8!^̾{mމr҃{xqMTa:Kzf)Xv1=.;L*R#DuRw|t#oޡI-*+yje@Od[\_?x|Ƹ:z$E|2K)7 ©f/
-ϯ~[T܊ѲZ MFGyrϧ޳x>M
-Zcg!I
+605 0 obj
+<< /Filter /FlateDecode /Length 11691 >>
+stream
+x}ˎ,徾""o:P(@WY)wѮыTbͦH!#nDT* f079·у?|/~w؎s}p[Vnoq!Pܾ72A}_~wN? w{uf[3}'z|߯%#'R۵AR+$$Z 0/ϣsb$j
+L]4T$Steŭ?;]qJ.7MˍØVMjjЌzO=S,e[Ea|7q
+!C!NU]̊{\{9{QkG oUT:vU'|rܒl3:MIa.5 fv{s(KP~x )]P]9n!VޡX}Q|ʂX1w#cph6|RɫGQD=E#.l9sJES⑟.Qm?ݰ+O; iGr+ a_bϩ!8PG>n.n!fqc 5L7ǝ~
+1
+3е4JT(fOr=14.ؼ O4i7o ||ٵi4)q^xZKQ/*2.+ϔu͡VˋQk?>յܯoWKQ VK]VJĜr+9RvW6Qs kp{)Ԋ*賫7pi
+4.!Vt hTvw@N=*_T1Ffep0Fw
+rgihYj
+~5h ;=s)+<ЀTC3*8I0tя"IBBYS=2)$ Bs
+rm,%|I(a=d:ɗBIBs(\*M:*4AܝȮQq؏/VΛw@:`:TX*XgQ3NTO\kplpwМF=B0h8;Z.4P~hL1C`!V'm.U<:Uĩz+63KzF4kkq3|:af3TT/rWlG5[B(}6$P؃;E'ބ8TJu+dHQ\iuޙsc>b ̇pL_Yt(04>!a6 GJl L<s?Dd| 4{^_32Of^"_4̨۬peH+]gN՛yO@AF=.4pH)Cҿbпo$ Gu#6)A<PG|8A&%LȘ*%mN
+J`EC? f&T IBKKBT [р"K ʏN~q8 SY3TN!)w'm1x}fyPəIk!(-o@~C$\01Cem
+]kA SC$ 5*
+6\&B]:I;1.آOsr?iuO4?Iݕi-b)`./bU:OZQ- KZC#Vg N+_YN/K^uS%. gI(2}L\BU~?oRJX8)HS=:L>c:fe>ѬY䊛
+i ōg:ɑ8A0{Tffloh7Gofi3&0j1au4 ͏̌o[ԕ RPx*m' P _{=04Fj(Cw{7Ք\ВwBKj:C
+P~lf#RPy4,[zXj|CC̵2h̨y[.>W~ShP HUB#;DW*2᭾8i}"c푙pN,$+:^`UR|.pys_y)RݯKMQh@O7j\XF=<Zl"*C \?[.OXy?(CG.-lqω* PpRO̮և3@zf2?^UWy#QkwĦ@04\QyA?S?x:޾kGl)KJ{VHtP/w\;PJRf排sb
+<DAܝy FnbpcnhX," LeGO녷 ^3@pɝOX@Fsw-2#\KO % >M!FMMX @5beP/{\<P~po荇uX}qKj
+\ "9x~@wB5kjQ3 rԬkhrV⣔TL /5Fe>"/{By^ 6Jq1 ! ᧃ N38O0!|zo<[5 @-R^x Awגj`*Sق%J3E6L\BR&6{_.alno9r:VZ"`-\Jӎ=49.'>.7f.Jk^ES#4\^pbcP'[iVx7)C!:Qwq;)QR|ACipP/w\;Pn71E ͌FsH$@
+vj-Oc<e,ٰ&w
+,*&PEc#_x,@Ἷ $_jn@0ka{m
+eT1t[tqfh"rQWBWKM403I{ }L,Eh8ҬI'q#? )d*t`l,iS@pa.(,x%puˀ=%b,6F@EzZ(Q_ݬ$E`i~4 &Ԅr&
+0̆G ϼ)d*d۠k&hRӽiB|Y~
+K?|LS?ۜnsQoBXM42ѫK({N>:Xxޢi\ e,
+ne;i8QP3A,,1͉L!~NQcOQ!a4Z}2Ft["B JG c-dhį~N<m$L
+Qaûu:UfqxU_jv&! BE\_-rFcCCe NTEpjptLH &rRxR:V^8SAt1wEy,@3Wp
+BQ1.*|xAؕnǴӖXu5^
+\U(iot clcɩ`pD3 f ?opO֟?f[paݤڿyhxy}WG{YbYF]WO˼ei~uoj-Ukw[/_?WRGtE^=] ^. '[ ['h9ͣr(V.MQ|&)y( OyK;Kt'BsN7t/ KyyKǥz/>)RZ`XG*8+xx/_'Q)}
+:G (Y H^Qk f.n
+haLbY=V-.iu ub
+ML#x\5Cs4I;2a-QIL)tR&m)m㈸McyǚЬ */P=)4Ҵ FX$A)Eϋw,S_ ڝ{@ufzzmQ ݟx^TNP``,D% 5k.)OJQ@)QIծ?4ltyA{E)ND,f%8
+HvRMC cx;3^E HY$."h*C<D TBx3JF,J042ݙL\߽x\x_Wq-xٴ!"-uEZdAVE7xl-mY[k.mDz$}wHj# $>_޸!<~kZaUxv%/?T/j+[q.W[4:beR7^ |~X׼U"vKjxf_/|b!cm[УTaZ|%mmgQO .7G l_cI?T^:W[v+.eeOooRI|߁3M=8^guK{}lⷱEizl! X8;)nߞ ''J_A(M܏gXGN5u᯼hK=oi.Oa\2-)b|NϾNO,| Om̷sTRerm=X8~^$E:><
+OHڙ5>@v\f׮%K_}lM/\0g\X.X:~Ev/^.L]sk<9:?^
+sį$__PFFmi6,%
+<4C!N|;pz!D
+hetRSգB<ag
+Z,TG`RNp$czZ.Ԉhت%i!QZ/XF;\>4ЬS5W
+JCuݣ9őV(.PU;JJCu$#.4>h8X;p=%I;NJZ4C tX
+ Jx=^aA]jkU%/0l@fj5\H4VF1m
+|FǭI`uL4LJ_^'j&ty3V
+f
+dL/lw'
+>7+9I5 ))BJ)a+nP0_ O;Wy
+3&܆M4iD> xsw7p鷘P)d(lJ|D̒hV
+ L546L|O,H
+ L546L|{,HN
+)N2@SnK@'TV8da cNɬfAJ$/9L)f>@ 6bR[)F]_)$?E1
+o woOзgҠVSt~pU͚ZvxmWzԇQ=h!mwyw2Ew?m?w&4z.v/ZW'*]GlE뛋byi /u'Ͽڞ7˟Ը~URM\2fh507y8AaҪ~+tNƒ_˳Vw=#WV@ <r~Ol`]mg5
+<Q4U 4٨U/t&u>U~6rbF?
+GzI崓f9G#PxV]'>hntj~J'
+o]s-;4Ze~4Oͺ,hLrRWGȻ35rQ: RM{pkV:.bVki6:]g+njvY?<H&e?I
endstream
endobj
-596 0 obj
-<< /Type /Page /Contents 597 0 R /Resources 595 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 548 0 R /Annots 600 0 R >>
+604 0 obj
+<< /Type /Page /Contents 605 0 R /Resources 603 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 551 0 R /Annots 608 0 R >>
endobj
-600 0 obj
-[ 587 0 R 593 0 R 594 0 R ]
+608 0 obj
+[ 595 0 R 601 0 R 602 0 R ]
endobj
-587 0 obj
+595 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 158.992 722.266 170.947 733.106 ]/A << /S /GoTo /D (subsection.12.2) >> >>
endobj
-593 0 obj
+601 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 337.833 111.814 348.29 123.493 ]/A << /S /GoTo /D (subsection.17.2) >> >>
endobj
-594 0 obj
+602 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 252.903 92.662 263.36 104.119 ]/A << /S /GoTo /D (subsection.10.5) >> >>
endobj
-598 0 obj
-<< /D [ 596 0 R /XYZ 78.37 808.885 null ] >>
+606 0 obj
+<< /D [ 604 0 R /XYZ 78.37 808.885 null ] >>
endobj
-133 0 obj
-<< /D [ 596 0 R /XYZ 79.37 695.352 null ] >>
+137 0 obj
+<< /D [ 604 0 R /XYZ 79.37 695.352 null ] >>
endobj
-595 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F56 384 0 R /F69 402 0 R /F55 383 0 R /F58 386 0 R /F29 375 0 R /F23 379 0 R /F51 380 0 R /F52 376 0 R /F20 382 0 R /F45 390 0 R /F40 391 0 R /F59 393 0 R /F46 392 0 R /F79 599 0 R >> /ProcSet [ /PDF /Text ] >>
+603 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 385 0 R /F56 388 0 R /F69 406 0 R /F55 387 0 R /F58 390 0 R /F29 379 0 R /F23 383 0 R /F51 384 0 R /F52 380 0 R /F20 386 0 R /F45 394 0 R /F40 395 0 R /F59 397 0 R /F46 396 0 R /F79 607 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-604 0 obj
-<< /Filter /FlateDecode /Length 11911 >>
-stream
-x}ϓ%7n]ECɍ^ELOa&<7Oژ=_ I
-_SsOԎɍ{m[>֐/:><RgT۳}kn->τ<ٷ[eysӃow螪Ĵ\J6h[sᮊ/[ 龊R C?V*Qrj*/?__|9+^^^^r{"O,|WS~ml?Ko^J/%-67oP탪;H٢MocÊ?͹Kþ=J?F8ƿZ?~/rig^ehѫhR)ee 4< "7=D>jlCQWdҤRӳ'.xڥSX~hby4
-N
-LW0_t~yZM?%Od<5eծl;%9WthlqWpVi IJ=w|<:9:_~Z-xzXRr44PTcBݧYУzZH s4$]}"s't "\8UnzHkIs Np/%CQQ ~%֓ـЃ?ͤj@t4;sPKVE4c
-d":T3D+2PEDayFU4̝\p6xfx'jV¾;tSD398P9I3=&0B5"K:M,xO&m&||#-<M~8hj3{(8yL݇:l@j=L@8Ǹ>s4pЁ4r/ΊliRfdBŮ.ufMlT<c?qR8#@[{ ŵKJsG]Ӑ8ej*z M[8OS5p~:a3)ɤ]
-THH,SFejmڜFvRWP mЀlaڦFjj #:>5 @/51jz[CKL,a 'RfL`43I[C$.B-Lj숹5Dm⵩tX l&aXHLZxM<Q%}Y,oaїz)yP ,HSUjH#/m#4uJo5uPq6$*`JՈKad(@m US* IaJc-mc2uL
-L19їELJGd4v12U sg+;k̕rl.aD M{l[p"꺼'&U_QsCs תLJ|sJT܅vE4 #"ҁD5
-=
-EvASTfw`K Z*x8N%#jK( =4e7aWieFeX2ċz4
-<\Es 2nLx̜vs;  n[a
-ȡm)D®e
-фD>Q́QQsY۝QQ0k+X o]K8)L/~ iV,5P9ì"9* 5w+
-GMP` 8hxKL$KY<'O&6`fR[)F
-)G<=GSsBsu~Ǝ=8m6$s~ɉTNKgLZbn[C #bՂg
-Y ]COǸ2X5JǢ+x|Ջ;{{<f1ϹLZ%zɷ{I7jw|8[>f n3GˢZߜW)jYvÚ\Q=<`穇x?wZ{xZ?=)\yZ?SMhuEVfl~_:֛Z3'9;W~0Mz.子2A?sQTiQ#;/10oܟ__%wacO3-)<띉Zk _\Z&Q$PHiUoޭ)_3R/+OS^h5GAPW%aI}G#b.&@֕Iwk*8FјܶrVT?]=B}wVX=iUE[pp~޺5E~4Oh?֭l~ ?H .ឭ
-Ki* oUpI48K2
-W*0C_ }3*8C$j#ɖ<5GF犟K_ڥJ[.=Yf\j׮5f7/ʳUfvE=]a/ ScG#S?8„-=<c}1q&n>P1nWhDqr6T?֦8kvEcy8;/-"S #ں6x𘢢6s s(jΎHkQju;=sp1H@nGtZ񀢠s S&CjnF`*{rrPWkzp kCáHXpVcv|Z[Y{ 뉙[LM(a=H15kLb'UhgŔCuԊq%&TkiSV!8|@67< B99-Vp5PM`MdFka=d(05j@bMjg՘F*fu%悃dJX"6<͜l6JÜv **ĂDm"# Cں6xL𘢢6s {lu;mg:mUG٘Ol؎lzCۀT 4۞I#B1i93i̺b?quJeNng1y"rRgL0(/dUNF WSV^5D Sh`33O@TZh
-M(qTŀEQ3HMV *_M2@[ ☭y[,B7VkZKZo~[j-VkgSRu "CE(QYZ]
-{9~ۛoQhR! Mb@l&a'K%s[[ mKmfܖrZɏ
-8 Sѹr-`~) Ǐ[f'.
-C(VkI1Pq8R>0
-B
-8Eio$!;LZ-6Wo εoN J*xUEC
- 3Yd<DUAO݊ Y_K nY/ VDdRe =dnQ'D䯥 vY/4nì7%&M&UPfа[H
-MG
-ܚFI0`pAolȊZ*d˶BJ̪}MH2b2ڞX27Muc"D
-[h$ʐYR&
-"0id|DE̅\K!}@dKaHv4fվ&QT1AnmO$jp K`1qiy{.ι@'9-e\4K:JL%K)W
-%%UzQ\W^Du7N/o$k.ViIJrAA!>wխclխHO G.Pu}BFU ri/YXkťfRy.|vWL^xF{/7 4~F}od
-j2EZ}T?w#]U4.Ov姚S<v۾JM?}4abSdo\CN!Ƴ{1}R@s rRT$Go%
-^#qJV c
-s|z쥏F-YOwm\Ȥ~U13M?s~4BD*~<OԖRz{G<xGKj!-_oU+ލ'1/s3\mo_Tnly cEt۱36{X; aoZZU2E*DSW4g_X]G@uU%t^dӧ*n9ử}UBoG?..3~(9:0'E{
-Sd?S+5q}5o>RĪaU-
-q浗xz.^K* $POcǕrbmw`~q^Xey\ze9=ǥW^kiReΕzT!uPrL9zN^"'CK3ّٱsפZ~1޺\>%UL*L5Ժ(* 0y.% Y [؏O[_ԡ41ܑ':7GIfMT`=ML@&O)dwAµtTK
-z9+A =is&vSQṕQQsZ۝QQq0s'B1"*ݯڥPV] 7F70YBpR ;q#bPc'B 8s0${aXfQm^_\p4CqcR ܘ8`^)
-`}r-<GȊ KiaqZ )TЈ5,NԨs Pc@BjtgmpԔy?*`bb_(2nLp̜vs 3w+! _cw{
-OqP{./:sMfk"rDh`ԖAF'n;ST fV$B
-ht! K\7Onb㤨*a(2vLx̜vs 3w+
-5
-9XttGO\*J?ڲ %iqK8QkY[En=U4jV(@CBQHeHZMa|Abܨ-Nܨw80j$)\KQG
-|~Š,;I踦ZLQQsZ۝QMQa^nWJ]KXp,T2[i#͹L9=&U<fNQ[H9[aF
-TC
-gv(ߚ^nZ=QQsZQLOAZ!Ǡ(,Yydr?qYxr5觝嶹R'c&RڶOmr&UPq @k T#SM+:6K`9t? 9gIYf)lܞnvFНr2&ݔ1y
-8NxɄtHFx[gۓ3J1l1P H]>>I9nƌ BaK?>3}7(<)db?Krbәԥrm]ruu葜T%cPd}#i? #;h s:^Sz틳ws$ s7RGޯ-tZE?Fw!wz$ZHw$|;N?[:UȄ^r'{=wdS{)S6?W65'qW2x{ʳzH/:ZVڏ]_-۵%)x7ӴEWLvC8ק7c`i$G7N6::"QNk`b6E,Y,[$L6ˣCE}'K{~<Kv/qQDuxK۞~$/:I{~8Ir/% :E{V~<C;k5xERf2x>?;'?<:<2Ͱr}+7uOL.G/q!Yl`VJ G-.z^O9Sc(VhodG3CRc #}GǥWO^ecssΙn:grW@w.\T5 9ErԖW _f>@ڐa0Yi) I]$$`IH'0.#
-1BpnJJ[,IHK]wׅERã ;ѣ0s'`>Eﮅ R|`{hiy[҅2 .[o9*ŌaF9)
-
-j
-bq۵TRuwskid.o]WޙT1NERKRswN Z hmA+ZhRCU%,u3S:nz" Go6aRZovF3=aNhXtZ*iC\ArהnuMBiM/׽>
-b2 I, I۝RAT0܂WҐ
+612 0 obj
+<< /Filter /FlateDecode /Length 11910 >>
+stream
+x}ϓ%7n]ECɍ^ELOO;>)<7Oژ=_ I
+_SsOԎɍ{m[>֐/:><RgT۳}kn->τ<ٷ[eysӃow螪Ĵ\J6h[sᮊ/[ 龊R CUjT^~雿rA#Vh57^^^r{"O,|WS~ml?Ko^J/%-67oP탪;H٢Mocaş\%a%@#`~L_-tp3Up4U4|[pwyI|~"@XN+R\? iR <kV),{JvEs4<MaCUr[+ /Tp:R<y~K@k|FJܒg2lI_j0N||}}U/],7=)}|nU.\UyxR.RVG'GOOZ*ԃ\n|U#_[h4+zT2Qow\azs=+ASb޴A+VJ#M@r{7U43)v`D݉zH6z>#*Y9\YOz62zpw_#'TXfgNjCsiتfbL@ k+389@a/{u+Nzy&T`͔Iz'jU:] ^L8oV+!7\WZTOHCipE`:nC~f&hud`!l!C["X05!V`+ 7ݹ4J_ \?LdZj@қ(yY(,Ϩ&V@Qԕ l4DMJwnh&j3"iwwd Vh>SpIDФOR/p%g@m@]z'4Pg\-TG٠`g:pfYnY<MLLZ_NTQL>u-T*g'?_phuqoQIix'LQMS P#4SSicS'0x>8 !kqX;Ajw*ԨLMMN]
+Z8A[x  LHMaD@z4F0ST \V|+7`c(czI%}P
+PHH,Au`fDЕLI5X52'124(՜0B̜FS.]*"aweg2[ͥ·:ic} .Q@""8CD]Dc+*R@bnhDZR]/`BʛЮFAT0܂WR
+̝v Aqti!^KשdD͡t e=, MLԈР KWxQPq 0|XkB"P7\y!i"7HhDƍIS.c0s'Dr8 BA9 8PصL>q0w<99*54j0k9 *vfm+
+{r L-&ƇhZBLELFw
+_3%#Hr gtA0uZDb&;4$'H
+x]e,TH}G,$G#<_8j- 822]FI,hn,8f>4#4<2aV 42
+ L
+~h7UИ3uP"1 K0՗ 8hDJ XS*Rd@k+u2sq񀤁> }Hj_cIM Vd`RƁ)pS ;_W$ %#J
+( O@UYnIO&6\fR[ȓ ;^'3P#xdI12L*|kx7EШuBwX
+2_:Ec׸nE|?~ڈ$o=M<-{/Og>q1bKq2g
+6*WޞBBBBZ瓘ŒOm^\vnYꮞSZӕ.cMGZGNtNpUh+YrF+ZPb?p>]?*xᝂ9:ұ=8d}[@:I {1Z;v%l@4b8R3;ݪBLBw_D+Dz]lKjqt u1Plleܠ5(|*#/Ey\t,·^8q{#|aԯe\2|tvɷ|zcF=s,%m0,YnopBe>y vzx'[=.X8YwOOg<^ :%+?!Wu8c[=ʬm~ok^z_0};z~/3g{gZ_]
+fZ t_%P&g.*-*p9fZ[;?tN~\?<ui`%9g3Q ~mK$^)-J|-_]ػU>% {ƗY%Q4Z[z^{ (Jʽ6ܽ2,6}h[%ݺ2)}x_%(vV"ӊ*rX `B\Oj'>_ÿj_~ .ï6[ȏ`Ǻ5֏?S)…3ܳ\S\R| Y;M
+.Fz2TVJf /T`ҀBgsDMb#ٲٹ\q]U)y==ԥ' K_ڵLUyL.xs0"]5ajbȁsDxy@A|V/&:P*-́;RΆg>smڮ~>Qq0s'EtrZ[fQSTfDvrYimw:Js''zn1.ZT+P`Dvڤv(Z͍cڨVTexoVN0WV.1cjmYNA<`m(LQ9kj̎Ok1kuİb=1s 尵4V &`͔Iĵ
+tZCZ1>Ja?z-mj5U݆A('Ŋ# 1[Y x> (}7V&PH4I t [CŁ̝\p0LVYăنSFiҁxct<[DEtXMtDrH[[fiSTfDvRzcGL 3y}6mۑm@bxhp7&sۓ8iD(&@>6GQp&YW'X,
+ 0w} J M %Η
+>к<hz@6j)؊A)]hrAՂ8oZZ&j-VkZKZo~[j-,@}A*qY@Vs((=6kz[wYBAўy/o{sR-
+Mj1d׸_ $dD|N}` $q鐺lY^R1C"۝Cn
+Mҁ&>9Wfh#
+-&k*fTj`ԚAf'j?STfV,Fǝl]J;_3`&Q5֙~/iF=z*x~0[&0fTHԒµs fT
+̝J4ݢ9R8P#⥠;b(8ך"E RC 6;335l0 0^K;ЀXp!QJ~yD^:a $ƋIYS*bޡހRY
+̝Z b4Wt-pHBXD.Pʤ3q̔nLaj!)*ڂR'
+Bsߚ"£FEbmvF3E`VVABHu>Z$dIBKe ԹiA Rbs6
+w¼L\ZZ*deAp$ jvM82b2ڞH27Mub"DҁI
+ vki7U3uc&DRI
+4 r@XH݋YorII&UHfА[I榩*5^wD&6tZ:ɶ
+yq~ON,
+1_+Qs0Vd>ձJZ6
+UjޫZ՝f_)dͅ"-I)Z.<8(nz,W7 nPP
+D.#+YbLq=/oԮ+ohzfh㭚L^MHw&)ܮTv{'!\u۷7^ٿ|g7o۟2Ll}kh=)$xv]}=0ftvQ
+hAN
+vb{ 'f(>[ҠXRP^ :)@Q ~q YI$MlܟT.ܘ4n$;@qSxQ~㨴k *s5s}\kں;2L~9ԣbIw>927N6KUi-'Ff|vcd#sI\r8F㍑roK'ҌR~o(ydmY2 s~t<N҇r}VhרL
+pOpɾ`<+wSa݋r47NiX
+1ܸ9a6?cBaΕOUȣ%in|mq+*fzSGyΏF([cBIW^xohU<>|I-d%|@>ջDy tnX*ލ-<OqaLq3(.y;|f~^v|g!m=uBuBkyJ(?]%h*+@.kLqT%-0|ZJ(~QeE{^Ӿ@Kj>A C}"?/ X^& ?A@Iğ(9>%E{/N)|-O/< _./^ 7/i$"Sj0'~$`ў
+ m nյpotSi./7*50j k7)5v*
+
+58(tHK{9LM)(-="Ƥ
+)hk1Qq0s'r
+'rZn8QQsY۝QMQPPPDuG@{d_37M>OK! EƍIS.r
+ 2čz[ʡF@,µTuq')H˲!kń(5g݉u;z
+U$Ūk
+Z*ۛG:m.W'Ws~Yn+u2f*mk)&mR @=R9Ex
+kmӽdaO[C<!gC`^= }S=Kq,ŞsYzT-SPƤ2&o[/ol{r_zF"67F!VG'ɗU:͘1yp@ 3о㱞}|g7!Q
+VO^}qvn8qx!8uFN'84<.8D^oDkioǩgK
+o)ّüFXzxmqu>6ᕆӱDžW؜sΙl~1ǥ .mCdq8\w:UB%Y1)O6do6 aVhqJBR, IX  H⯥B Җ/KRRqz]u>Fh9CN0 h Oѻkq2ZZ^tL¥E@J1lüD:h¬`X\<v-*.F\Z9,y6[wG5ULS$hRԜ]iSzZ[J`ft:eT::|ǹ`{ {eΟ}yQ) s֛QLOAZ!Ǡ@*ݫjJ2F\5[]xZvKu "BRe!9KCv-u 44$
̝
-=
-)JǕMsm5тA)m%3RXǏ
-6kZ Yo{ZYԕM|XU-O^}{>sWeV4
-=Eu\2r^- 圬Ge囍Al5bg(˭ϫ"E׏V,M#"iꠗZ\i2$wS"jĥ6xls_^u8FMK_O/d7s@L/rM[5zoXb}2/\‘QV`1 4Mݸkcpg*vVrG%EOl~8 Vj6G^(le˔wq@;Misq?+fw׷@`lLDsd+(4QZgO>TlNv<e~.C9(w$.{BOk=b{[Oeo.ѹ}`_}ۡ*r;t$kxrx?p'Y̚ |(6MvO)I.hrwvxr>:3!F-ovQ{FT݇:}W&_>գ`~q]s)yDŽ,pAA_}9_HzLfꉗOȳa SW(~AVr`nk\Rğ8p[
-/y+Cr裯8]CG$48
-i&nE 6X]'D
+=
+a-ҵTҩq.NDڔO">6egTjTjβ)=K4EaNx%=
+kq%gy[M$wnbPdG[$dɌbh*Hq_wVuA,hU瓗b_յA#Mp|¾/`gOgQ5״ܼWA~ C9'tYhfcy[XrHgդ53K7%k:ez6{6H:q 9&^?d]04Na<*e뿑DסӋ+49//}%V.i}PoY\>Bdkm+Pgn\ǵ1Rr3o;D+l"ڧ6?R}LTtn5wj_#nNeʻ8|4幸וG[ \c6&_92ѕYIn(3'dyAF}~bzF6L[rqE~2zbxLч|;|\=|aq1׽-Ǝ }2ط\r>g䯾P\9܏n ]:5YK9Ym,nf>e&M$~49;t;<evnu {W ʙp#U7;|ߨ}q*Cx>+N`]W/hчV0|.9𔇼cuen8lJTb/˾՜/I$=&qtu3_K' YưiիS +qhz5.)Oq\!9 q.c
endstream
endobj
-603 0 obj
-<< /Type /Page /Contents 604 0 R /Resources 602 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 548 0 R /Annots 606 0 R >>
+611 0 obj
+<< /Type /Page /Contents 612 0 R /Resources 610 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 551 0 R /Annots 614 0 R >>
endobj
-606 0 obj
-[ 601 0 R ]
+614 0 obj
+[ 609 0 R ]
endobj
-601 0 obj
+609 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 213.396 67.03 223.852 78.488 ]/A << /S /GoTo /D (section.8) >> >>
endobj
-605 0 obj
-<< /D [ 603 0 R /XYZ 78.37 808.885 null ] >>
+613 0 obj
+<< /D [ 611 0 R /XYZ 78.37 808.885 null ] >>
endobj
-137 0 obj
-<< /D [ 603 0 R /XYZ 79.37 520.772 null ] >>
+141 0 obj
+<< /D [ 611 0 R /XYZ 79.37 520.772 null ] >>
endobj
-602 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 384 0 R /F29 375 0 R /F20 382 0 R /F15 381 0 R /F58 386 0 R /F55 383 0 R /F69 402 0 R /F23 379 0 R /F45 390 0 R /F40 391 0 R /F46 392 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
+610 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 388 0 R /F29 379 0 R /F20 386 0 R /F15 385 0 R /F58 390 0 R /F55 387 0 R /F69 406 0 R /F23 383 0 R /F45 394 0 R /F40 395 0 R /F46 396 0 R /F59 397 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-609 0 obj
+617 0 obj
<< /Filter /FlateDecode /Length 19742 >>
stream
-xM%7%ׯx˪ŻvdRԬ]M-Q=
-]cF̎ѯwoR0?s.NI_߶a[zp;J !loZ _{mk{߶_K b]/tA?V_&l[2 L8EUt_%?oiY?q;j y`w=15BCVQJTyqj^L͛rJ'x -ɿ|I)[.ee+S|_˭+/#Q7<xG-33u=C+R%oˈ )6sއSm_rD2OW#zr/TJM.\mQQS(8e_z/kNre[kVgHєLZWX͹ZeEΎ5O.FVMPG=8މ@,?rhzN\[>HW5V!nT;0[ݬqa!j=no4BnEVҎH U}SNgiANyV/#64㸕|Dα3.ݷ|%j#el6Erޮ -mywpxĕ9덚ڕn9˧^-+=J/Vjur+ZG|b^A\oy>^m8Ahr<r,lzee'D(:fueMS ]{n?h>ᚻmȖsWVyY1؋QߐG,|s̟[9tyXeu4B^槦cJ?ty~Y't,ǿ{^yT=7j:ewyNt۸{ה҈ſ%k+^DG^~Brw%mBۃSԐRn /Cqێ8$C+Dx:O[o?緮T:~f]Ax{ۃw7? &?Bq{`L'kv'܍
-?3}]0owtgKߥUYf3 ]D$z3/ XK]Yf3\D?o{mb&ԿƶPWO63֘4=߶=%_lwMԵ>gs5͘SA?c9A|X sȃ =sH|ؾlwc[>gs1ǍSD7߳>g4hl6 'yc=sH|ؾlklۧS]hT{KO?q65g.|?g.B`Oe閶BQr6?y?K{t5/|+y)Psyy^n.yJ9~F=|Kn{gqE?zNn1רv_}U @y̓(^`i%_oKVoq!y
-W)!憂ATnH^5R7Usg]""޶I +Q!=̘;4BeBg Iˢ$ucZ*gN3@HG6{4;A1@]!
-dok@QPIiߪ"ݨWw׺JC@S!TTJtHb&ժQ 1 =랮"%Bwߐ&
-Q-%츥=pb(*Jjh&a#yZ5NC@h&HEEmV[j&opa1n3 T)!IFjCLiMc@@q7na5Sn9 LRZ"!yaT\Vy
-dg^_kbFe HBVc/}{tQ1 bf(hdEIƴ*;T
- h`@hT^hN&y*oz٫3!w7v/:'^PVD 7m *8ÏՆem,OraQ֦c/.}\ZړM]2.W;O՚;ۈTwVrWo'n8W:הya|ӅE}_/~ x^V;&n%dL[{-ɔ{piա?/<-5ߎٺB#HJv󛖝zy9kYg@ .2-[׎c)\/̅+HKj}mÐp?YdZx'įyA/HK!Q$ }N; O0Ý O0Ý O0Ý }݀_3.(Dž/#)=ٮuckK?o׿g]
-tNH^6rG*P0*?p;w fZP^@}Qc;XaY!?L, М4JVUɛf=J-cՔHHiGm\oak@ИB)!IaH<Y2fٛj9&o}kD"5gG7j՘3ia2R3C0ݨb P޶xM*4ԐbvfxPnP{򸯄5C1ULR D34/ #S(KL ew>P6VUx i#_GmZ n5@,{a2R3B򲰑9mb%#=!\wgae j6*!2DmPLW&' ȩPi߂&Gnc:ρхcRBe9! &):+$/ ܍jQ(^
-C P/"x|z7G!St #xC0ZTm[/C-ϋlR`0$Qw0\H8ajik&>Q7=l|X Jq u8O}ul,~%qp5WCμ_rR/%%}J#3]BzYJ2R|~Vwow oWkW{O8 c}~wֿvQ7j៭:BՉNݯN50k)kU'-|+?wQ:KձTsv{.||b}ȿqΈ1DŜBU3SRSRyoBUjVFf: =iF\вEO](-];k՗OPNU:w|>KU|]U!~<[%񕪜)4d~XK}&7+jrŚ3a鸨 f'ό\P“5{wjvǟ?yd >1C/uy:_?'ݽԏ8<? p~KwgwKwnNd4^vk<Aj;{ZLxGH;+|{yH 5+5a-n1Sxp|/qչ샗_vwUSIz/+^~<k}H 'ƥxp7<=Sq|F孔hw2K*^^^N;#.g;e*?5͝NoM8d &s7JMqy&s7㕚̽^zMμ /L7[ގWj2zKU Io,|[Z TTeF%~|Ӽ<r |G/qAmuG|>{DzԬq+>HS߻5w'}[NU>w"ɽo2'T ti^Ss~Vw|S@K+A/t_,nm
-k0G~ B Ṣ=Ry"
-l<]#=VK9V=JEN/<^YPSԯY]|N*KUG"|lU8ypg*3[aۏ밥tNu J.UϤj/)oϔk:_q-;j~-w7pʁ{؟$;*s wR'i+}^e^?tOꕥp[*WKCB]sC!ܝT`W =Uqv44_%O'D[[zu@W=9 Z
-z|IzwS=d|4@u)4>²> YGHOk3?_u|AZ%/Uk%=_uR잯:hzTV?9hzV/56=U|ցZGNkTu|֡K[{bHZ.9!C]'t;]I=u5{K=ui/LGSf:z6KKSW.OtIzf:z>FW/0W/ënf~
-]T!"wQ].Eu.BpE
-]T!*vQ].u<ClO^=~\nuPo_bk╽R{E!JWvJb^d׾
-rv1 e+Vv*gHGpfņPz,~F R)%8{4QUA@yҮf,p}pt"j=U~}00`Sf怕̲D]'bBW/kTuB'9JZfZq5b K)A<!R
-(8OȾxgBUhofB< W@XRh5?EWԨ͵>PY nbC.R1`Sf怕̲D!TIЕ
-2to&B <iW@GUBEWn԰ U2&h;̳zCXJ*MQ~+YeBUԒ6Ńψ&a/sp: ';R*CT_YFL&%TڼzVj۷ "!Pu
-OPZقx0P
- Ja&AV1-n8 ݴRUZ
-F@fܕ=l
->U\~茐kq +*hB,
-Sֳ  [8m5" qbHNJ)i H}t] Յuꏬ%|BY輐5qcږ{ahN+[fB0jRҳՔ7.t"Kt Ah Y `EeբsC"j%x,tuF7,o% (Mi>VZ.rGh5.K\ӵ.XQ:Z:F57 g$MҞ}8\-+p.itV:7Y)%A qh`}|!t)ɂ*]%on& ,ooD5/ $M&sH'>:Y講d:[:R8Be+4o% (KI+4Wwd#\Ggh\me.x.tk
-]ܸ+,s5shZsrpAҔij,a|FYܐuLG Zj4ZprY.ؤ)هZ"Y
-UНd}oUB:u ǐǭT1ov]"t ?Qc
-CURON]Xݷ}-B}zp_(UƨETssF -FPU'g{OX{=Õ*<
-RS(Qw*>[O1U5Jy~r
--ݩRHrl۷5hcj[uӞJ_gjlFC؜CJ$ZiQ];X^Ah`\u!¦*4P(㐞8!;=t l:]Kg#uH]6m8U2mTl!A!JJ>Yt6V
-7 .bN<i?uߕ{=0rN#JLW1o %`toy
-/#3+,w&*F޹'z=V)U4[|(Q{s_GۃS-zO5n?Y=p'\ M=(QH,=<#3Tq-bWo.\HKq>RU*$[c
-]3q.tZ
-ؼa.)<BblP /Ak
-130tR2W
-ZϞfGTܙ *"X9`Em 'JqT.1?Og|G<G/T(݅8c4h- ƛM`E 13YPU'%@~8=hs?Aܯ+@Tld'!Ǩ%`pZ0&q.}BUR)e| '4֫DF:wpaXF>{K+!} -k9^\=]K
-D%If+r*-h#-U:5׋|GDD8ѝUF7M*@FJE7ޠd=,fW@#ݙ;I=ΈR,
-Ol ~XzhG
--ն `_4ӫ԰-@z*4bB:US&b0LTMU4@ .85Dtr*:x[廝O 'H#<H]Xedh;U4f^ol; Kw$Q*`2/@OW]=gA
-ZJVxhuNc<@U7Nz 9 E'2^qN C7 
--&Θv=2fIH?jKfU-:9&}IzFFz`G7<O\f~"W )!<O-VjzLI\@>h#ɹ
-)/FMz%+z>{P5'oE+g;-~&xl4̧҃ k 2\ܑ @B
-FxB;tMR!0VF8 pc۸;bt
-RZ]blm/>c[ Ӿ*r;=R)ah~HujE#o+#w .} G)WzK2?_(Q1}[X}`(uJ(\=0uNV繍{G].\>Pp D%t/㾠|BТ<%brRrKu+G'-
-\6^Olg.TD $*+§JDC#nq/
-}|8n`r*qI0@ (|\yd BJ &<]1B/CSwkP0VX+.
-bdME69^le9o]xA8:>pLk-:3"8r[<FSO} T! C0JSڳjE||أ_sŚWAG2H&' 0ŭ6K|,kZY ) iyIbM]P@y)?dNԦ#Dx\Tc^K}!`|)/o|%UE@咨 }C^+5 Sg9yvZ ՇnVa4Lʖ HR^Cc~g.Vt**]B^te}_+=| zKj_ľľh
-\!U)]Ui55?h}>D(Է6
-^K*5[Jso[ӑ*^kXJ+ ~ VެPA@a!%+]DhQFy7^Rmrmo,ec2r~C+/+"8r o@փ `bd&(W 5Ԇ9Bcx)aTjCNcu= BhGF"ۂDp$0 TRRFM'"K(*_3]K_Zx]+(I:g{l*o()Q!f3.iOˊ>&Cϊe!+ |]2EPKGd;`6k]fv<{NƧ+(b@a<6ݑeg8xvˇov^C{0o96
-ŮgCO!Vsw%:;DvQ1nK/ඇuxWMhbi P vp`A
-z\BQfIٳ{
-2to&B <iW@7乏KTtQGF{VqG=Ҽ}R1`eJwVY*zqW*
--m`UW+
-ZBS_Z?*AR~-[)(O,򊍻9װ(cP~*^SQ U.4ZsJ@':}`"/θUV⭪krǩ [7͵~S
-0to&B <i * \~D9?EunB` p''ob->}žP pJQSt&
-v>YZ$[|BEjlrW":uکoXO5 6>2 UQFڭ\t@at'Zŀ<F5}tjG[xƋdsk 0GQStYuh8T +րs&<Dب>(uy8\HB捡Th~"V& @ ؐ ]"r%kQF3@%B`&GL0n@EM;s_c.ѩGv7:mc'mpE3` Q:; ;뵹&F>dר K}ypU>qwqݤ7
-2ZsFs
-!2re2"9(=@l*XKE_4;uSB
-hr&I:KTt S(86@eSR(ڢA
-PE2 ЉKt
-y+s'qc~||tQ6U1Auydbgd܉sF&n nN
-['4o!`~3e@c5,g&&W3$o;Q[lqQݛ--KyG\c[EY>:a eE(a<#@xc%1hBg0Ղ>[IgBc5',ge&K(/eVwtWJkt{\黢BZ}_h-<|#0sC0 P6YBtgٸ+:_|}T$.r~ލ5j a`S1v+M$5Lbq)͋ƯTDorM86bm6}VIQC`d &fҝe
-kKXDnoڳ[Jq<h؄e^F,GC),ڎWRssD@"u%>,B~f.9xFQeM%Iw-hdC"h#XD%>;BW1hl܊E,A DX,BV7ݮᩈI&o!jbo1*aжa撃0`P6YBtgٰgIY]g
-Yi+XP$w4G0ęR2m:,? EuxV|yp^
-U6W6JGlu* B<E'HCMPef_~}!п~NCЗ4>~_?F}c=o5̷L4
-/OPAoӓ?BJG6Ou[]MƟȭr] ?_z'hLڶFY[.7Ługɢ˂%<
-,aXO<_:Yɨ_U3Fq{|׵4W7帗iU=4R")L|ğdg_?/X&cZe=T<VpГBF jK(o|Xv9_Ḣ#˯?
+xM%9r%_]91TTV
+;P0BkH1ȬTRd0?s.NI_߶a[K=B_֎[joVۯVⶵܷ~~B(X +]~şS+/D- ?&Ee/z7OG,~ 5|DŽJUK̻ٚ{dhs!?V%<S8i5/M9ޓCVA_ڤ-I>Vӕ]͗<Σʖg^eą?uÏ)aa/9"+ؑK}=FZ*Zo&|gr2߯?5'53hJd`&_,fQrO\wuV?U'#돦a#N H]D}Krw9[='yHn-dw7Jn8ˍuz7[Q#RjBUߔYtqkh}SUˈu=f8n%-s 35w~-jl7Dхeƿ|?k@~K[^)qe.jNi>?hzve;>i?y[pJK=ZznʯVn-+=ma>.~Wx~^_}@owP=n;d3 [rY JY]Y~?ZOmn'A[o\+]<z謏}Emo#|s̟[9tyXeu4B^槦cJ?tyY,{:ϞsWUMZ!~@z}^yo#o56Ğ54"ho,uZW=wl_\݀~g[055#|ܶ#?6s
+Q4Sm閷F"+:퇿YvPmzD=( ?-Í?DvVr0e5qh F悉iPO;%WҀp*3. XK= k|ڀ ȗ,ߥ.r3P. X7ྲྀ[T1 [c[ю'\ckO]mo[Ӟu^^6ﻦeg3fc)F?ֿgF>c9A|X 9D>ol_6ﻱ-g3֘)|
+DA>F#1 ժ.Ƶ"obDv;ڑ褟]ԊR\X;v^T2RC1- ` ,85
+n֢s4I -+sCAՠT*SKD7$/Ӫp
+@y๳ܮ@o[$ЄF^Y¨]ԞMfL2@熤eQ1
+`3xI}pj ģB@
+   TШF- М0lmLid75WHHԨUo{n kG%!*S*%:C$1 j(Ӟ臉uOWTm!{ɻoHuvw
+J-P7IQ h*ʔJI$yZ5!&&1lj }snl)nlj&@ MPL-ݐ0gDi3/A1m$!y+1ۗ=(zV134 Be2g Iˢ$ucZ*
+ ۭ-A@ñ{;_vNeD j(~ [+WT*ltRBr+[{
+?I֦.eiէjmD; wr7œn7S+kʼ0վ/sa˄ </o+{w]yl}_g=
+Җdʽ 4ПǂWoliQÑlu$%|;\MN=,3lohcwCk1L ϔeL l%6aHQ,2-<׼ ݿ( R`~_>'_O_~ ' ΀O_~ ' ΀O_~ ' ΀O_n/HEcjy䔞lgs1SF߳ڮ?ghl -5y=sHK|ޮl*C?[cۧk?olg}
+cєBdZZ
+X-6鸥8YX)-e`27XR&Nl;(ȳeQ3q#deom _`~z&Hwc!x'24 yj9! &(:'$/ #S(f
+TjJBw6(+I
+FHr(4oAl#7a1B1n)2ĜIF(/L
+:柮gC=us'+lki p0/+e<kU949r]ÅyeJ~cQ7x-ɍ,fuBO31v`]ϫHr+<x,,j9}Uk׭%"Beq8Y{ǢbFd=hb񜮊4i\7j7CoHF9 4o'ތ9vN&GYI/i=O<GENo}^թ܅U<շ;5Coǂ~HNՎU^N|bE^TVҹ=
+ggݹYg^qK8'~SWrY:_.sk`Xm@j/4ۑsuvQTp?Zx[%yWʜpT;~:aI2Rwd)wN=R>YqO75d%YE4
+\}oB#PWق<m5_ۇ<hHE%'G?
+[=8~3{kC7xb9rsS~_x\yKe䌞ˇ>UKs>CӭJ_ayg%JroW?ۧu8r}jBoveB%ؐ+ߗ/c{yK']Ͻ+t۹쭑'¼dK—q%i3c{-5{\_F9<YYyR4
+US<Kc7B9[\ɞ݃ }[{>{O3%]ݑNȕs|*`|ۨ77u~mn*켳6#l~ݣOЀyP N ݜ'Hĕn xyY]ʭYǨmnlb=z^ֻ?Lyw<-g_G?N(c6rKCQΏSGEGؿ ly7,<y%lb[߯ySnVU>= 雉ˣp?qH<!|DH~B-BL !eEO6ns)O0zK(YjsI;yB8>%=΅~toXxZɳo /DV`*,=R_]*{__I9\a 3/y\rKyI w߄҈Lp^R̾CƟEa]htìf*~XfĝfZgPu"eS녪y Z_3Zm#qՉw +
+.p'jRu>՜^ X_8's>c5;衘ӳUY_}fWrPW2^}:W
+r(?QgaV7
+%?:}.n|:{7SxKw1sV $޸tTǿg< Tިw3[fIP%kW}=کswdݥlVG_Pٙ_M 繚,/d\^9]4/dvR^əaŚfJM^o *_$Ozk_\^k>ߣHį=
+|1VI2(۩[g# j# Ó5X)QEy
+Hz
+'!LTy~:3}qté<X%T%rM1NŽ<wG-o.7Q9qwD?GensxQ\d<zcԫ뇎It2n_qKjC;Bxaȓ1^~0+qyn7jBPC*ώf+!^h+}K'DKA!Inrz굇ЃH.1GX$1z-}竵:HzZj-k^ՒZMjQ'MO|æv\:pz^zc:tzbKzWlIZ5'd(2Ět#nF~cn3>hLSf:yrxʥ㩗n3ILW/g95ECxx̯`NRRy>;z~ pyjxB j^IE.||;uB * ]T"vQ].!nU]TW!"wQ].EuB`E]TW!"wQ].EU]TamIX<ګݏk⿮-]Kr]Wj?Di*.^]I?Y,Ӌwx@_5>8^_ڥ wjk.]0μO=K qV^IzKy;B[kLXM_>GLPQ6+LIFI7&E4W`RLԅv9Щ֏ԃ$/[;jqщ<ViZBk{rO
+,ZIH'j2OA?_j|t%<1Fc!rV1J "ijtU
+tSc\OPZB?`?x{ꏷtV>MʵXofO$vp@U;lxN( 6eFiX,KԅNAr.f,t%ގ
+2to&
+*(O,wX34N[89JORflʌҝY ]BY
+r^5GIS|ѬZ+F Rd)%ҽS'D \eM Y
+# 2t #ȗQ$D <VLB_ {y
+oVLfEl\ $,y*%`h L)-ݛ)(O,dGUPѕ5{uC̟
+@d8C8xywec9,Rul8P&"`
+6.l avMGV*#,; n{ v|C&U@i <@c((N\r|AcPfQ"f:q
+4Z0ri”iŤ7>§D[fCoqtұ"hy|JDZ5R@0]k€uua]?#k P(:/djXwFp
+Yli5.)|>]F3]eE|shZsrpA.ؤimj,0|FYܐur &-hh [g C0JSڳE.u #tm EAh Y `gN.W
+*KNqMVJ.cIcE}C\-Xa9x4_]Jz
+sqG">EoD+tꛬtK*h  `&w|8\-ʼnpNV<:"9YF喎A0PY
+MfB,Rҳ
+YWY!+WdY /+`8 Kfٺ`ӥgN5t#\JHB7.
+%x,\h .܀u04=pZZ$KQE:7djt0"!ܰu 6iJ{ᴖsH4>ED/tb\2ͅ@0h  C0(S֓ I!RVֆs.uLknu`cD~yuP(/~NQV
+?#qggV:l1 BTLJ_̊ԮyEZ\Z@(t'gB-h
+BU1*$e/F`3ܜQmswbQ.TU*I٩^p%J5OƒT |lJƃc@FS;CURBKdw<k<`mk ZwV%d-*P,6! <yZsl
+8g NNzw-FH];.|`|iloL[e(pHBAO]xB*'6*F'6ވΆVɴ9R!)I٢fA6RlE ʑ k-i; b A(P“Ekh,A-Z<myzߣiO۫:%Wxߗm!Q6Jcs/t>f3QAJy.#uוp;Rum`Y.t:
+R_\GPM.1Gi?y4hۯ4>`
+4˝ b0EÅw. ^Dh$Նi
+@Umt
+tr`tޓ=wۏ{r=I9HS!gjh!4R- `Ͽm0`\՛ RR@9$TJ: X*6:z,gh SK[Sy'g?aN,n72Joܔ%-Mg\ `,~R` 6J{4/piQ:I0X@ZGu9P_ݴcc)4f07*lٵKw4={[7-ڶSp5 5pzVntFT?jj 6J{ro<(]vPw#e("8rX+)$g4D+bҐ"?oaĵ9a)4\6 v>$va XX86o)V%=pC_zn`v2 ]
+}09 `iP+,5LBM[4BblL 
+TIOva 6h-mcf\8`kt'(ܵd)&$=pDz%[V<Էd6^Pg˃Faؠai}is=>Z)`v h E5ĥBVi0h0[ 5YFyڥ;p"mc\
+2e
+DM
+YXHUKivyg jlKq@[6)ðN2^8hhy(u/ )T6+]LԅNA@y.f,t%cBJyopLL`,~2cp6M4%rBhVPjlcJotW,{ QO' CxgP5E:v[r)\k3ltpMKd"AhV8J6P+XBA2dQO@d^\r[¶]G:mA׋XGh<OQ\0˒XYT\ق3K5Jyb(xeϐ cK='4RJ|++k,7ݧT2ǕY$Q-U0)wB
+GV@XQ?LJR3|<Kv:??~3cw$ eł$om2Xт}g.T(I8h 5;N#3Zg&~9k{+I;xtv1@ X/\V4*`ܨ>- 1syPգru
+D%+x M*Qj|N#\5RlJeHm_B ZD.WOt?Rh}gjz\Qb 8wRيܻJmˣ!ZHK_b;?6NthՅM?:v
+QRэ7ho*Hw&g@NR9<{3&
+$sV|^݄yo1r5M^qH
+ra-~$=އ;Q@wn<#Nd
+L' S;:tWY
+Nڤԗ\>F== Ƶ
+[@9wQ ܊HwDHl'T96S;u\17)$kgO=\>F3A qBw;AR5)uDz7>itniXazJ%p?2~PQ\=aP=߀5i}-\<H'I`FO_D^y[=/ MG++Կ Rqp4-8Jfj@Iib3-Inp𙧅J<)W,I>_S gڔ}vY2vV=w}w Ek -JH[GkI#GZq́"4$W8͹#aj`zx8 UHb#]>:ɟޚ#4h-ک*qת}c=StSDK%]
+ (f#/c4Paܟa.WlF-u@A5&
+$E˵~<9Z]90PM^=HHщG~6=S:{*M)SϠu7lJ]TⱄPprCߐ2珵t>f3QAJyҮf1oI3])YR>ҏƒkoEj}arN`9IsQQ2э?%lGyWn亙`:U@
+8o"SeKS$W>=?Hr.6@ 9 e)cutr$És3@Gɖң\ڑ 8[كBF! QyEɊ2xeQʙN߹ $910i:FZCi|﹌
+cLynQ &D!T
+Q*&IW#?ۣp Fe
+}m"QB~ۿvK9cJx}%(z~ P6
+m8ЃGI3O*rˆ'7?ԿZ93%:ʄ 0꓌gJ>WŐ=+#a<La6-%$rN]@z@=CuC?
+:t!`o9^P≵Nz3up=>P=0NcZ뫓0?.X<' "1zy6=Mp8yY[^P5~,γ)SZjKkpLqS_91UHҔZh
+ 84CZh+,!@҅Xg8r^
+!e>~r0㿼:a|6^#G_=q=D@˭>,_@`fbU.u$*C_PpkMCYN^ DF}AU z9G7Ƙ3ʹJW]x`ߗq
+zB /% -19Ӂ0NOzh~sc]ISڳjEcl_A^88^u:bX}JMk(5F[`X X#߹G$WEUJzr@WU4p&xCoM;pM}OZߴO=/- 8Ŷl!+=!8O]"VbM<P@jE*6 /גJt
+(9$=7+sP$aFJ{A"9ZTxQǍT[ǾtzK1 4KJ{P'3$ b2u ;}7:3^JՅZؠD]m}Ǽ8Zȶ9 )?,QSH("GWL^p
+b7;*
+n"d^y9[JJpTY e|ӲbOa³bY|r
+>,k `AR/h.-Ggm1Ϟi
+
+Ʈh(PϢ$$6;MwdY]&a[ D}E
+}]D:R` (M̤;PRx!־:EwG{
+oylx[? Y `
+ʓv5 d+bn5,}Ա_jW|yyb`(M,!P
+H|2+!cߨ<!?UD揼:r &:]ڧ<@`Sѩv+M-IihqCOa$32\XdCe>)C
+RD2y딐3@'I.)D\LN8[t`lAt16k-Ftyd~%2zEo N&y ЩFThniL9tbBt܉Efn\_
+졞|xZj8<-h"X
+fZ(ʳ=Θ~Sk"@^zkW8͹֎y׶yDU 5CMQw*z[v>Nf澶]E<s4V32pY
+`h `ܷ>UFf߭.e [>7́h"XYb2
+{_
+6t({.tN$
+AɗqI' 0nN% @&Ev-ٹd)Z$
+ƳuaC+Xdِ^(]I ԩ3]rF I 5By}y8
+Va:7:Tw>D q&*t["BQ0f6E U"$@J0:%OQ@h P(g٧3׷mo!}1~/y[QBKI[&q?O×__V_]Il?%oo#uȺo _exAll*׵~wm_hg>28P.,Y{Y70G%K)=P=< z8/yV
+3<{@9JFjT#Ϻ?VL,˰0 ۤ~SX
+z@߈A-OGEjeP?QtDԣ
endstream
endobj
-608 0 obj
-<< /Type /Page /Contents 609 0 R /Resources 607 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 548 0 R >>
+616 0 obj
+<< /Type /Page /Contents 617 0 R /Resources 615 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 619 0 R >>
endobj
-610 0 obj
-<< /D [ 608 0 R /XYZ 78.37 808.885 null ] >>
+618 0 obj
+<< /D [ 616 0 R /XYZ 78.37 808.885 null ] >>
endobj
-141 0 obj
-<< /D [ 608 0 R /XYZ 79.37 771.024 null ] >>
+145 0 obj
+<< /D [ 616 0 R /XYZ 79.37 771.024 null ] >>
endobj
-607 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 402 0 R /F15 381 0 R /F56 384 0 R /F55 383 0 R /F29 375 0 R /F20 382 0 R /F58 386 0 R /F50 374 0 R /F23 379 0 R /F51 380 0 R /F52 376 0 R /F45 390 0 R /F40 391 0 R /F46 392 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
+615 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 406 0 R /F15 385 0 R /F56 388 0 R /F55 387 0 R /F29 379 0 R /F20 386 0 R /F58 390 0 R /F50 378 0 R /F23 383 0 R /F51 384 0 R /F52 380 0 R /F45 394 0 R /F40 395 0 R /F46 396 0 R /F59 397 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-616 0 obj
+625 0 obj
<< /Filter /FlateDecode /Length 9837 >>
stream
x]K%qW`]ƀ
@@ -2130,258 +2235,262 @@ x]K%qW`]ƀ
@@N]SY#`)S'i߆<HI>kGHS(MSNU[jr):- hk狞m@>4.`Eono'?Ѕ0Ag
;TvGW?b
-Cu;)P!OޛIsML)!l?}M|yƮl1y~YF-jTnkwQ##g};˽x733ayiy=ޥO}BV[ٞ+^=^uOѡKTT#z޽v9T qS9/6mɌ9!R9It?6ao4y6$c 49utlq[aUN&??s]—Ըr=\Uz eV/qn7` Z=>2grbg3lr^SY=>6\JkGc~hA .8 ҩ=a͈^C4>nf~ }(> xd
-=N y(,gz?vglb S4irP/POၜ7,;w)ǧZܓڇ}qEHe^}]|9so;N,O*g}O<zbފc˙>LBi29jwZAb
-"{=#{$P}FR<~Rm$`Q
-ؔ7cozO󍯰훿ܾ&1V \n;!@G3w=KeK9 g16'ޠ5C~X͆H _fyn\4/پ'ֿ$X; >-`6n0=
-JW2l`%h<Q_3~!>eRU'̋d)yLsAvi0è!u2,'  V%piC"Y:`S*^@kSvBc
-}jũM,ȘRoo cDHf ~ue4]8V4:cj-0\ۢ$cj 4Οϋ5E5mԤ`]<;T sMz .3Zް0flԥRہzZ[׸'tb3[M{ b
-`1LT
-hrDUԥN cPQ9ʼ]X-\ql:tʊU;<K져14CMAM yLBQ̠Ӆ֐ b'ƪX fQMfٲ>Y12Cu3 ]䍼b
-:ZQUF/4Fy+̆',D6ÓLNPDݸ΂B&lI7[OJ#~&0Ŧ#[_̖{ ܹL
-'g7) 2"X}aZ9Fi%Aa1V+MH
-1Oi%vq0!~21B'ű
-̦s胺eXo
-bR@izMH
-7uKxV<uj/iraڻΡ# .w.eQZzJ{;졉-IPYBw.I:cR wfD0Mʼn,e 
-]V>,eҎ'Lԥ>sǭ Z%-B'60ԝc}~0:/iOaMHjn-HY`K,nUwWSal2Bcns{% YIfhBZq]X=hf2,;Hͺ8 {k,m5|*XC(|_jb¨UO7ut:7/#J[חSdf3P>%t`( (Į1ɸ604<ȑ%Œ8ba.]wSܠ[WTB޺¤ S&Q|38
-[cX#2<o&49 :Fh*<eE?`6 Km/7 429(uuI7E5"N;C/r
-ڢ25z NV 
-c`
-%۶/WK0 Ҵ4PIC榠.k7 ]oI[זTTCf3]"6B8d;43@>
-T+&GPTy)gbpSPKmZLh vYg\޺]?SF0srO
-s/Pv~FM"XM-~Q[לHf7Kxu(=
-ƀA/u5,aiºsB
-]na)XM 6WIch$:)Ff͇vK>zs 75M1,2;[RcM8f.E>R`ጽuYOM˝'mN&``xH ::>;laVt԰M8(D<@
-]AĊ6ym2x<&v)c};ʌH.
-g(;|K4Ue䒂{a=[ O1@/c; m@
-婐&\sTPM В0;E0At*Bd>(o-R.u; O1L
-(qPA]tkPPMqXNb "";b9cSjf`RncBD+=ڔ!D|8&C:1XMY1Agׂ
-piCdޟ+&9n.,0͒zұMX-!:}NЋa_' è7 = MZNb`-pO%|2k4@Bq@ vEA *,YbqTf.(=z$v ^e䒂{9@Tƈ#0hX%{
+Cu;)P!OޛIsML)!l?}M|yƮl1y~YF-jTnkwQ##g};˽x733ayiy=ޥO}BV[ٞ+^=^uOѡKTT#z޽v9T qS9/6mɌ9!R9It?6ao4y6$c 49utlq[aUN&??s]—Ըr=\Uz eV/qn7` Z=ʍz&-xKw6cM./&l.:Ci3ͥ}1n9_$Hܐҍ!ZaیU:DjJf6wЇ3ݾ7ݎGJG-5ؽ]bGsG4YoΆC??'-|CmB>Sxx_Ů\1C*[3P'TL:å G]$SH o!`rxx:1.O
+i&F=s`^ǰɚ7O}W|[ESINJ
+ma.Z9=8sCۧG7ӓGWv-ssqKHvKP쥻1BOJz '`g˖êM_<7
+ y7M<܍%/d2O5 bsA4|}.mvβ[7C|ʴ0 f־M~n0ƎУg엤<Zyo<Zϣ~W!_0lʉ(^7B
+ctH;F|cٜq,O[4'xxnvAx&+=8R*^U
+'J|5`j}сR`=PtCIG x8;Et)u6:
+am?vL2ͅ;mՕ3/[ 3Wo?oޮBӂ}qxEٵޏ.9@.Xz(mx g 'b4d@_\R|_{4lێJ󼾩n9Y_^b'j_re,LxzVg¡^O( Ii&$f3}_?**t6z{5w|+lv/o~I̵n/es9_E?|]D}a+mRD-k™#FLI7hgMжV!R9Yj-MgK/{/ e';l3@.N&;=l^k'] \.zf(+SE=N&<kU 6X/O׌_O0ŸT~ D>p|Ӝx]L0jw> lDUz \Py<zk%1׾;&P!P`Bj߮Z}q}wK8:2&ԛQ/w_Gq5|Mm}Θp˅/L-%׶=ɘZr. b lQM5)Xn?`>"BfSu^LV7lia>9̄'57uv)vv;25 VSu6Fq $3v{7uclTT2k0.<V W]:bxzǒ0;(n ЄdpSP:{mP3t!524DⵘɁ6YaYlOwVLdL$H7y#ob|C "ͅb#a0 0 qQ7~rR㓒ň_ hie~w&
+Ay i(:V_V.96?nyZ} mk`n
+24Em@,uvLSwj]2LȺ hrЉaq;n֛k4;FMA]c ހ9O]: 6wFs˝ a```^Rj26{h"e˅`,{qR-&pk u$T62Ý;/i$LSq>Knv}&@}AlWFPG
+5
++
+OYO%.X RہMqLJ(o]]MQ Pb
+R-ƙ)fx( u}v[V3)
+?$pa d[]d z:QAX7@>"av
+b%HH tՂ G[׳kXqbǾ`nlǐH(m7D @Ε|;wni|=DV Lx$ZpA.`*au-NL9Ʊ#،K3
+p1`K]b tj#cnBn[X
+eScU07f쭫j
+Yvaf;b{
+8yСBjjoE{e6/]
+qƘlÎ2#!);nF<
+r@vTSXBd37兀S 0* f O-ȫC0CtPC!Z#Ŷ
+vTBH(i؂iS?
+u(ԈŚ!t֒p=v
+r[ہJ7"Mr"&$34^9a(G`4p
+uքX,)mm
+}gstr"&$34^1 2:EŷbukiNԌ3aISGaV\QPnggdk<m2&û` :MMA7c;1yȝ|in0[Me(KSN)J
+WO2Q&
+RnX5 EvhaYbx#{0184>h &ո8 3&[R0񓂇e%;@ WRjBF ؤ\В|e0ƈ Mbz$Zf1'.a9O"$cjuEm?9:(i2;7 iڸVXR0'0a9O&*ke"6)D|=*)N8@X⧖UZ[f1.a9DGEƖѲ otou9u
+a.ڡwe;* ˳YU=dxrܓ]KKG,0gcTk/ʳl?_*V<Mu:"zÉZP~5pq.VU}5 =,t+NR}r@:I/5lH#
+b'G7!YZg']\mA'.˗jn4tXoZ|}L*jRz|Ojs~rzw vfp)b&~ sa<$rn%08P{Ywiv"1}c#5_v1,b;e ('ǥSʽ#^Sfy?PnQ>[v kd5\ ;Ҕ0/y& ktw ?[pa?xNӍ?%aZ|TU]j7+PHbvh54AB]; hJ;$&T;1Żr6@k^WΞt3)x$z?hx}w?bUw{gFzby?Ezo
+\W?p/ W􇿪1$߻Al1k"2gFyw~n6du
+{lkk!+|?w 뻘6cgHy־M<;wX =^M'$]s%@8w?wIoH¾?c
+!ZЬ ˥uU,d%2 U]A!Tf0 f8V,I`ckwhvJՅB}y, =Ǹ}~?&^QRہZ߾vJtehk
-0Ce(cx*_=|GmT+S{]fdyKZ9kݰYj爂[!Vc0Eytz5 Eǀx_q+0r@ŘN,fgX;!&2-p%cB l
-LbT.7Oۨ2a|$t#"W;GԄdgʘ@`wnS~^axzVE 6h:|D
-ߘ(J'?qXNvXOkK[SklBhJ*:E͖İHG!x&0q؜ $0}"t KO
-)lb.[
-I^Zw`6cnL~+`T^=bDo֋*Hib`7lI"dCf^9⍀_dM,T$S Hoi$KO
-)
-0Vn["FVd4MR/㫯(SM8{W_-
-rve !ej܄tvճW=*GjVܕ/olK/ϺrzP`gUHu]ArOw-i.PôREc?R(ߛç|x Y 4 'k]B9o5ƹHsjZWA`t3mw:Isʅoq$y԰#p*V]w`diewtVNJsm._>i8ebqj5Z2D۫JGSl=ue{q݁lZBAA'c` ø@UeuܥaԼ:6l|۵~ F8~İkT1>~zO}*nxYN="@FC]G6|l=f%rO.ԇWxsKS¼uZ +/}ts6oQ9g,N7wB,fpXXvakaRi;WwHˢB!qݢ׸ ua4c3s*=b쐬GS
-`]@ze^%n8{ͤ>ٓg ;G)VMajmcN  f`iH _~Te}Q Ƹ83E80t=\슈^jkm  .6]čf' 0cavL
-xE}mdf K_#ߊ jWo>w,v%%񠊻<_m=Ə
-<`|W?U{uxpH}K++o1.{fxgvoCVW>߽wv8{`zai!}Qҿrsi3^]z6j{,Ts]ͰStBbU?HJ]sI3p* $=d-OU׶vyRbg%ca}NMď*O+, n.[oL?e>=;\5ʿJkɲמSq^{&~5u=)%]FOa/e7<f|q1:3ۮj
-Lإװd7dE.I7`shY6=} s{[ikc 1.nLZsVelO3sG (%6zn͊݀\j;Pk^5B\Z.CPBe٫`xlŒt6vfJZ](ߗǸø}a2NA].+JaJN\F1*3^v2F9ĀœUн${Yb 9ZA
-t uXj;Pc
-bW
-}2B_znvlxZ 8hm슆*SoUͩCGPc@5 Rtui5.SR6WSw+%!GiBR_s[ er@[`*C}2gYGxJa( N&Ȓgvr-0?{SVZ,!Ԓd3},Q^j*'o[EŀU2L|j8-~&p h 7HjP}¬iG,Էi&Tf4Ǯ^lǷf[+`
-XC[ jK9TJ.sīƝUDF[&cjP*@`PJK$sbEDeb0X,nkA#{a%HH3X`.i.k4X`6 `}+ }@ߥ3<lUռ5bfɶ4aV4uv ;i* QۮЉ l5Uj K |ˁ
-DG:5X˄X
-X>ZnXNX, 'dVåfؤ\ڈԫs +V S %g3i.Dž%c$Z MtjsPlkD3FYO!V2˝)W\?ES0w=U_%ӫ~ y8֔
-va;: ŝ^Rq-썼5kz
-acmq-)cf,e)X]ncVq
+2e(c#,L 8[<Y
++mOn1P*%ƻi٫[Mʠ[)5`+v],#%0mg|˦ Zʮh(@0uV?ۜ:|5_`m.EW7&^"95,js? |gR"y&$5N
+C7aB-IA6l^;c7 ~Xͭ:!X:rp&<@UT X)7'jBpc .̪n{"O}fB5aF}
+V{|h
+qX
+}? okF~ >'~
+% Y&`F}9%킖!eWJ1j52KaZ/VN¢PH5;% 2CU9ǎ@hYjq^Idii2VY6uaiX +zM2~!V4IT," ffd8"qVtM1vN:뢺FU f I vXѷ"!Ї
+]Z1^Uͻ^ *flaA^oEsPJmZC/Ґ VSڰD
+_s~$Ags8liu0Zq`4/\ͦq
+i8Fz,xa`I^^6wUDKR]K!t6uX ?@St[Ap3Q_Pߓ9x}鑌<Lx||Em[l/5ϡxv99'<x9lx^q1cZO9:E1g$j?! ^H:сNz2r?#}yJGzOxOxOxOxOxOxOxOxOxOxOxOxOxOxOxOxO8LWH/I
+p{4ȧB{TiK9'*4qCo=QXrGMQ9'ԓS+cv cMZ3z%3Ź: $Ű<pN::i͝(Zظ+/3c)㗴!,?WU2cx;'m-O*ci߶`k
endstream
endobj
-615 0 obj
-<< /Type /Page /Contents 616 0 R /Resources 614 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 618 0 R /Annots 619 0 R >>
+624 0 obj
+<< /Type /Page /Contents 625 0 R /Resources 623 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 619 0 R /Annots 627 0 R >>
endobj
-619 0 obj
-[ 611 0 R 612 0 R ]
+627 0 obj
+[ 620 0 R 621 0 R ]
endobj
-611 0 obj
+620 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 326.699 386.919 338.654 398.874 ]/A << /S /GoTo /D (subsection.12.1) >> >>
endobj
-612 0 obj
+621 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 162.817 327.143 174.772 339.098 ]/A << /S /GoTo /D (subsection.18.5) >> >>
endobj
-617 0 obj
-<< /D [ 615 0 R /XYZ 78.37 808.885 null ] >>
-endobj
-145 0 obj
-<< /D [ 615 0 R /XYZ 79.37 771.024 null ] >>
+626 0 obj
+<< /D [ 624 0 R /XYZ 78.37 808.885 null ] >>
endobj
149 0 obj
-<< /D [ 615 0 R /XYZ 79.37 433.664 null ] >>
+<< /D [ 624 0 R /XYZ 79.37 771.024 null ] >>
endobj
-614 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 402 0 R /F15 381 0 R /F55 383 0 R /F56 384 0 R /F58 386 0 R /F29 375 0 R /F20 382 0 R /F52 376 0 R /F45 390 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
+153 0 obj
+<< /D [ 624 0 R /XYZ 79.37 433.664 null ] >>
endobj
-624 0 obj
-<< /Filter /FlateDecode /Length 3997 >>
+623 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 406 0 R /F15 385 0 R /F55 387 0 R /F56 388 0 R /F58 390 0 R /F29 379 0 R /F20 386 0 R /F52 380 0 R /F45 394 0 R /F40 395 0 R /F59 397 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+632 0 obj
+<< /Filter /FlateDecode /Length 3996 >>
stream
-x\Io%W}F )sp."Y{yO-hd|U~|Ʒw6!X0FOMl.06gVl߾opn$.oϹE0Lq¹}s}:~^3/r Q#|OxW5}S;VFxf ,Xibњ3#<n}C3#af3r\tɼ8N|f](`JKa.7vZ$AM3W|}Y^1O/+-W}Եc{͔4=<!AM2@͟!/Z{ ВxF+yM+.8AqWgn]^p);5ΏhAÆc`v
-tl'Hqx0LK%+T/EXW`
-~_@Iqv8 vົ{˾7ytpǫА;j\0zod[P#8Ō.$WVYP<Lq|1;SR@>1ׁʉ36a+G-l.[0BYw YwpQYwt+?7JҶ׳(JtAVD,X-4Z`v!^x^ ZA]"ڶ19goOԜI#,$lo
- #zγRRޗ4?/܍8Uo
-qXPz3vHD2onh.y5]P:f9@%Il再\<|Ln
-boޫ@;~o'S(1"G5Kwop N6@|\]<~v7 ~B
-tuIWτSzjD#X_20y캎
-W犺Y~SܰF #n"Qok.$n{wK0Z
+x\Io%W}F )sp."Y{yO-hd|U~|Ʒw6!X0FOMl.06gVl߾opn$.oϹE0Lq¹}s}:~^3/r Q#|OxW5}S;VFxf ,Xibњ3#<n}C3#af3r\tɼ8N|f](`JKa.7vZ$AM3W|}Y^1O/+-W}Եc{͔4=<!AM2@͟!/Z{ ВxF+yM+.8AqWgn]^p);5ΏhAÆc`v
+)8qI}%蓅% ị<LH8Y(uM;nj 3l+8q:6ǓB8R@kpJF*",+I
+7'aam.;T+sdhs
+tz7=CY+:͈GzϏ(xsG~܏p56RQxLY܋tX~yӀagiDvDmV)Jc3q|嬶aC7+Z8vyU(uuXqx$"E}v}4 IHl.x(A $rF.>&70m(#/%jWQ>mc5Q%-UN6ƌux{Sg[A3)ivg+s}F(O~)
+ /"݋~1{ kl
+boޫ@;~o'S(1"G5Kwop N6@|\]<~v7 ~B
+* qkFm=ؼ[
+]Gu;O'btu,h iCDb\utXýTSlDAkotuոO碱iofP`6vo5m^6yy&9NP}UFtUj2{
+dUnJl~֙w%w覊n="KjhG/uG3yHǘU߷!.1z:iZ < *%ڴߡBK1h.5|ﴣmz?fʫrp^rbE;/}|T0ksM,+ni#mS7jEYc7o[a
endstream
endobj
-623 0 obj
-<< /Type /Page /Contents 624 0 R /Resources 622 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 618 0 R /Annots 627 0 R >>
+631 0 obj
+<< /Type /Page /Contents 632 0 R /Resources 630 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 619 0 R /Annots 635 0 R >>
endobj
-627 0 obj
-[ 613 0 R 620 0 R 621 0 R ]
+635 0 obj
+[ 622 0 R 628 0 R 629 0 R ]
endobj
-613 0 obj
+622 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 384.21 725.076 396.165 737.031 ]/A << /S /GoTo /D (subsection.12.1) >> >>
endobj
-620 0 obj
+628 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 449.821 351.038 461.776 361.987 ]/A << /S /GoTo /D (section.9) >> >>
endobj
-621 0 obj
+629 0 obj
<< /Type /Annot /Border[0 0 1]/H/I/C[0 1 1] /Rect [ 78.374 71.409 416.581 82.866 ]
/Subtype/Link/A<</Type/Action/S/URI/URI(https://tex.stackexchange.com/questions/52848/tikz-line-with-large-dots)>>
>>
endobj
-625 0 obj
-<< /D [ 623 0 R /XYZ 78.37 808.885 null ] >>
+633 0 obj
+<< /D [ 631 0 R /XYZ 78.37 808.885 null ] >>
endobj
-153 0 obj
-<< /D [ 623 0 R /XYZ 79.37 771.024 null ] >>
+157 0 obj
+<< /D [ 631 0 R /XYZ 79.37 771.024 null ] >>
endobj
-622 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 402 0 R /F15 381 0 R /F56 384 0 R /F65 387 0 R /F58 386 0 R /F66 388 0 R /F81 626 0 R /F45 390 0 R /F40 391 0 R /F59 393 0 R /F67 389 0 R /F50 374 0 R >> /ProcSet [ /PDF /Text ] >>
+630 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 406 0 R /F15 385 0 R /F56 388 0 R /F65 391 0 R /F58 390 0 R /F66 392 0 R /F81 634 0 R /F45 394 0 R /F40 395 0 R /F59 397 0 R /F67 393 0 R /F50 378 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-631 0 obj
-<< /Filter /FlateDecode /Length 6161 >>
-stream
-x=ˎ$7<z(4e{jL <^x|_R%JndRI#ȐE\~z˗I{Ktʙ˗?$|!.;'/_^~yHyp^' B HE>Y
-=OeQ]%q~O9Q8##hn^H<JE<y+nL-6xMb]B|n դɑT OR@4>ȼ(!S :2\ubfڃ6WƝPqp[o_ՙ9KcŠS[f ZOYSGH}ZsaW#L/m"]!7y FqìA?
-[kDp4z2b2x&6[X[1NdսyPDKZkLzغ
-y7?lUȚ20,aX%|8ƾԏX, ?mr[Xn:"oFqrD.P4;)WFa3qo'Pk[ghIb=+mJ-Y~xg5E8  6"ُ|-}8>}^`_ɭd#2=J7O2Ս{ٖ[ž>2Nٖ̓[puQ8G-Zo?۲Gqo[yĚ9t7ukv<JNteX!roŊbcFy@,"EQaź7Q"]En܊?GB-Eauf1ק?/Ο.I<󥝂/1F
-v!_\
-P;jx<lDN7Kp"lv;(W=vmG"70l.= A]$egݢ=8>6b<nOOfQ}/BN䟻YAj}E0+w
-m/pHs(X<A8,񆟯(MejRH?|l1NUvŽQ7P1
-?FBaǨ(u~Q5kp=Ԩ6lJkk(sK+[Xq:s ,`Q. rbH84)àdY]\֖m~^y5_+fYa$<z
-R2y#N~ tWT\|w_^_
-ޝ2ֽ"*|>)}Ă9}5"})xn*>2uS> -'6Wvd\
-b^UMa*LZc]*bZX 4۽ߎ5- RO
--Muڐ.1f XT GwTBIm: D
-SbIrT(\=Z.ˬV0ӂg+U#;dBq꒒o_p4,#wS +_l;yC+zŌ u,`+_-2vďJݭn
-.=6
-lR˿
-X gW:) )+S_;:oW'g\G=԰7t/G_+fGkU#K6>P{x@EɑA;)y\̵Y*+bsS %quaU.,RJUI^ܿ Üy^j_Zzf8L̔]a/uSYˣkBȤg,s:ц:vpq ƊsN(Ҋ bgdY.L쟭drG-[{>'}`#p<6PVF²oBR3ͻ.k},U&"aXhMu^IYq`L >ⵢT a* jl,ܬ*oUkYsQUST¤DTм`Dc(`!!`
- z0"بOd t  ̩\33` AJ$tOgCI>g퇳\ֶ4攺wXR%Dw}[3@}{lLC~pF׌ou"k3ͽ ͂]o$hl"w3
-O؇ !Ie'9$}ù :3\xiy*58N rE4H}kjXy.mM4&Cn;?}=`4{`1ɊZi`Vs3i9|]ϹG%{|ʈYQcXw֊~-70x -<9qp4mU<N ]iNvL[u5ٳy6@ba1 ɨp2 47-ʘ^R->-m[`%AVqF`0;d6Tq;5 62rD j(静`HpWј`JTh?q8z|+s uVs +!Vy9Jzb%PȤ r+̴
-S+,#h5Ü2T52
-` jPi8*]a5V VZ H$Wb=ut> z7v&Qz݉ ÎZ+^}kv,$CIFI:MJ"VtT)&I ֹfSZv@ 6H;$WTbu)YQ;) ɵ(N7V0Μfy%;0:XcZ$RDos-569fBuD6UkօMhI Do0i/G-I̔j@ WX=Iq-q( (6[睖 KI$W8ݪIx] U*!t!`!18f
-W<6SS-25U3Wc6 J$NiC6a]m
-As9ˇrNCx%cKN|}x\N/paR!m\KTXj>72y6snץ3'YZ>zuڜR y~p\< nuY`]^0j!CynFA(Ɍ92d UBF;njaÌٛK>$8= ?Lmnw4#Iȴ|-w$Ro&rI_>)^,KLƷfz-WC4!gfF̘7qin$Zˈ<|:
-j^m=,㙁qV.fZyE傍xfV7
-XB;]2]؈K2Lvn5D=R{D|=nl⋘S-SU%+njTb1#%Ϥ!evt&Q5Oiɫpq"+iZbMy)aq鶰Y"Z"|li tFCj7mdu8>Q5#C=k~-Urv_J⚨v:]_]KpL^.(oc{Wؗޣxҁ3`^[RFxt:9X ql'PoVc͑D)~Δj (xs|gk)$qqZnV-BD_.uy>3ZVumW-օd0}[Ӥ<C-jf%ӧ&U_1I^fr{,P^:Fק_~+r˿Wp-tĿ.x= 7+W>ڔk4ܤ
-ډ  F|yA+ʾȮM*gV{KW$wuP]*g+RYвś6MvGwqA'Э BaW =QK(DZ}:'t]UxP.MƃIwViVYabzmxj8>>v6.kO^W_ne T֝E53|z[dtsC7AH6*I-ϵVvÃ`K!~i3D5#6`HaHRÇ
+639 0 obj
+<< /Filter /FlateDecode /Length 6142 >>
+stream
+x=ˎ$<ڇ~
+7u Ip ^ 篷_
+~^>M'/ԯR7
+ O<
+9J"b.oR/Þ7O3FG!9
+_|!wyKFqǬA?
+5=#+n5yvo 3!& Fθ҅2B|8mcl{1ژ1腥~E_{sסnQ9["zt͊0)DP4<A`t;כ4uX|NS^CtbS0z(OJG*Wm$tMPm%YG(xL]sW?{Zf-ԘQ&̔*G(+&sgre5-V[]MF7ԡUI2M<w'Gۙ[ ~ؖ]ƏP^ d `=iMvM-1]fӦ
+iw?lӳȚ0,aY%|+|s_J
+gtV8LȲ@-}w+}8 >_:GZYQhWگ͢c>ѨOX-ċtV?ae{}v% K=ztyr,Y5}YL3a ~^ا1~~dbmБGG߾V1A_tͧVr)"3-m3eJ'ziQDgneGbC^c?<`H!>D1V(QtJc-M( y ĕ(_~fKQCa&_~ -+V4&Owӭ펇lt# _w_oR H"?f؄]
+ZfᕃMS m#4XY+ _v埰g4߯
+UD>߲WS] BGM}3ImDlB[r!s}nN 7<ωOğϡV)h}& sۜ`0&V@EQkS#+ H|@U001DZ8ƓT5<6v;IA';($u~|j@\{5IWN F6?CQڛ"N-'8mzQMDªN-'+!$EkrP]+QSM[˟Nŷ}*~U{ۧ;&9$P)|P4`~g"D_<D`$0\BD2 ;BQgAD
+MWq0]7:GBT.%b[f Fcl=*"#1usn4>XN0Xa~^eQT$m]\
+ܘ"1cçx3$#365s!yo4cQ=N`n8f68?puB~Y~5GWFh |KP6I[CvQ a{)NQ'}|0f#ԡ{ʓ$pQ=kQ->usH^@a }$3|s _2$JH.uߔs꣼4]+IxqsFK;DNCN-E8r)>6t6G$lW?x4b'Q=ɋ'10֩/t8pHΖ&Fe}u*G}X
+SbvIr\(RS=z.V2Ҋg+d/\Q
+8MM/l\sWsϑ{Pa7I&;.m<ީblb冦 vwPŏ'^ekV7ERR}u,wJWiu/ހ ]p3n#NGWYM9<'BVlCo&b'mߥiFJni,^}C!t"ȸ/D;WM`tjt#< {1F@y{z:n퓦ӄa/XsDJ$,0|v1llP
+7/R0Xiš L1Ǡ)}X6i"qg&3W&d<{ކ&~kmt&J˂HX ;Ki.lbwV"MeHX|g*zyY6|%JKz PXYkhpǛ
+S…4o7m=*њϫ>`QU?YAQX(_#>HSc%a8Op$y(WBXdnRқ32Yha}E}5c_ȄoȤg$ģ,wZ
+%u9r"&5lV8ikuڿ9Q+\5cwNNNx⣔̊NR2'vVHML&i 3y!0}{)`}M╌E|t>cļh( ̅iTyh񌚤04ZXmZhl)*x t(?Ƨ-.ME G!NY+L
+:b+3W2~oo†s7&q(aTr6âsAakx`g7ocU9VXًy齷X=p FWSdk{k:g،zXV_7M[ˉ2&c>"ċimo޼P
+ i_hʚ*,fbLeSm-K
+SBc;jwIqEq(I)v{烢:KI$78ݦç6
+"};^b<N|{t\/u[k۴"YNeº_gnuOg)=cߡ^4ޜR1}jkJVܚ'S D^gjqsݰ` C& 0j5SoqVA$)4BÃd
+8UCԦRpwmcw>ԨfJx3USd+nonK]2Z+f3RB+#87Ҟ8RGhE-%ІmVv6yvp:މPۑuN;Y6O2cзtH[φR5o\S
+~oz|[\Vƻ>K ik8iyx{t+lÆY1VPI^0'ox}pByJ{pBq/E nxƶ#,=Sϩs^,Fؘ=8/vV):ɮT;^-xᐙ
+6-Nm?/ ݫ,7['i O_ncnj'9g^ə#d*0TyR1uP& ( o?w oYOk$R+W@g0>^-@; &_hcN}!Tb-L<t68@>LeS;o,w1{"-[I¡2zͣsjW0 ˈX);+V]e|
+SZ3.]ƣwOYn6YIbfzmy)r>>W".onWaaT6Ev rYz%[ekCIH6*ֆY=ϭvǃ`OcTf
+i:?*@o }yJ'n
endstream
endobj
-630 0 obj
-<< /Type /Page /Contents 631 0 R /Resources 629 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 618 0 R /Annots 633 0 R >>
-endobj
-633 0 obj
-[ 628 0 R ]
+638 0 obj
+<< /Type /Page /Contents 639 0 R /Resources 637 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 619 0 R /Annots 641 0 R >>
endobj
-628 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 334.246 76.718 344.703 88.397 ]/A << /S /GoTo /D (subsection.12.1) >> >>
+641 0 obj
+[ 636 0 R ]
endobj
-632 0 obj
-<< /D [ 630 0 R /XYZ 78.37 808.885 null ] >>
+636 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 334.246 76.658 344.703 88.337 ]/A << /S /GoTo /D (subsection.12.1) >> >>
endobj
-157 0 obj
-<< /D [ 630 0 R /XYZ 79.37 473.185 null ] >>
+640 0 obj
+<< /D [ 638 0 R /XYZ 78.37 808.885 null ] >>
endobj
161 0 obj
-<< /D [ 630 0 R /XYZ 79.37 295.178 null ] >>
+<< /D [ 638 0 R /XYZ 79.37 473.162 null ] >>
endobj
-629 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F56 384 0 R /F57 385 0 R /F55 383 0 R /F67 389 0 R /F29 375 0 R /F23 379 0 R /F20 382 0 R /F69 402 0 R /F58 386 0 R /F74 423 0 R /F45 390 0 R /F40 391 0 R /F59 393 0 R /F71 415 0 R /F46 392 0 R >> /ProcSet [ /PDF /Text ] >>
+165 0 obj
+<< /D [ 638 0 R /XYZ 79.37 295.141 null ] >>
endobj
-643 0 obj
-<< /Filter /FlateDecode /Length 5463 >>
-stream
-x]K$mϯn("pFHLxNtpH^uĞo$L&<h;U#
-
-[PSa¶@
-feoĤd8R;11jh&hkSlĎێ]:vX[=qNk70.4@<,!X%x{tA.zE}kKnuzߩ4zFa cҰHh .nM,.}9'&{9vuBh!:ћDMo|}I?ÐI&Qq$qs\4SpmvNb]A=B/Ldl|`gY3!ʗANSzg'_-87.ǿo9WCT_8W.~o^ \ސJ6"=ӷ)h (7ع {(2V0<zۈ434٬JJq,4.B3 f]ҬS5D?_Hy4lhE`,f<aau])CxƤ ZVAF#Sh ])[}&-A L
-ЭLB'VVIl` v0Ӵi<ҞX 9D#|dTD<^Xv'[f7؏)BԴ.{+ܙfsE5{n;
-;eO;)1
-m.UdH
-[<^CD4y^$"&=5.d@Nj}OY1T@Vȷ#Z)ک
-A,aAЁ+>wzNZ)SX7uld
- y5yΛs=-kdH hv-U1wtttOwf70< ;=N-Ln:ܩ׭7eY {PNWQJFhTʂ-qc)vp80v*3MA C `"9O$ ѝؖ('-tAu2[  S46uv8|l&m+,G;\A$Ti([Я+<i썟S:2[JVBWVBƵJ&>}te'먃p2kSp1hL5j^ ĿU}b*;@Umw?}?ձ2kQKZnxZ!eg*p]
-ڿAj2<^WaH<$BGaMU1E#K)W~:h)
-f
- ?oϒuWV*da"J^1L AG*^w =]N}ZA2vє~`$%fBU3>z۔LaKK
-w~nzSܭ0mff;O.,)=Sխ=̉))<ʼnjFzLHKJl ]'ǵW>Md,x@ePk_:0zQ'^lb?iKl)JvO{OS9K]
-|K
-c53q`KiX
-ޛ|.nKdԩd9UVl~fGu8]%,T rr_;_5 ^'S)Dq/Ђ:g9I㉔$Nd{I3~=k-z[TXzYKhY`lb
-,?!HeiʪSx{gFT`BR0wPe$ `ewطy#W 0i.fer}Y@OcƂ8CkùQ-)=|Rc=" k%y8-@#:-P@Jc}TwP_-B]6hq1ܟJHuUBSVj%7mgf>`NO$z+`F
-4ʂh JE,A̤f{|W:(+hn疖+ɕfhzN&8&.X
-CP?wu>v*b[h@NhB i.' pFA@ ,RhnAE"ZBnK>LG@#m׊x4o*tt4q5 Vfm\gִ@Uas~UXjnx9D^aA=oh[N/g~@Ed]_PջrPN6']&e9]!楋^F&g-f馨dhoZV4\rm~}qnd|̠\ǃF[[٭A–I$hC,dMA+wosfCƛs1R}L,~r",aP&Pd'-,0%Y5xDGs݈sT[FԄxv능8DJ m}[խ.E›v'
-T]&Xfܳҁ7o=x[ضseH8Y/4efA,4!Tz&CT;=u+O <0k0<U(^iIਯ+>-&=P a'DFʒ>/f}O\IM5TTrt
-!R/UtNTIITeP'!sj SYɈ]S7A,=ܠ!˾[j_
-TU8{f7pF9_) /N|f x
- ϢI ̶=jJ֚z[iU
-ucwZ-=+zR/9Gv
-jێi[Zlr̚
->_-tvR6S Ra#} i97<+Y
-x\M遡Ifqr}/dڝ
+637 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 385 0 R /F56 388 0 R /F57 389 0 R /F55 387 0 R /F67 393 0 R /F29 379 0 R /F23 383 0 R /F20 386 0 R /F69 406 0 R /F58 390 0 R /F74 427 0 R /F45 394 0 R /F40 395 0 R /F59 397 0 R /F71 419 0 R /F46 396 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+651 0 obj
+<< /Filter /FlateDecode /Length 5468 >>
+stream
+x]K$mϯl(|woOo˄d^GJd2ˣ]>
+5
+[PSa¶@
+
+Sjs+EzNߺԓ1Nv?Kmz5h2|3WH33桚PiVi<oLB,4
+M[8%~ BI/j80υ".)LVKH&
++
++qSG6r v0OLViOAsG>Tɨoy.Nةj<o2
+aOP)BԴ.{+ܙfsE5{n; ,vǦc5jj/Lߪ٘1d>tcsMR3gtQA^[ O(dZmtm$=^k"e){I&=)<mϯn`#(*~0 , 7Qq'st{ʊJ$EMT
+ I Y}4ZӁ)̛:M266yΝsM-SkH &8ZB1xtttOf70D K=!Nml`7
+Yu L}#aʹZ_᪝=Xo(*9[]&<n,E4L]LSXiB2a\ Bm-*Q<BT'c!<Ιaj}ƽntǹHGI
+K΅xV"iĈaeݾFA߂5^Ĭo${ՑfhU0Z ؊++!/|]:0\ ڀ.ϸ=׎k<sUR DUm|7ձ*FlQK ZnxZ""et~" !h-
+ř7Q뛎NME}3}o]T#;.dV߱-i;t gݮ\DPk0U "Dv ZsB x7zԴfyRdcx'3֛|Wl\*4iI691:}#ҵ| !'X /KHAZAm#ͣ yOqi}{EJEC(@HKf
+ M'z`j7?u&m!n_zeK1oGCWoea+?†<&U.y|)j
+{8(I`:@^O}T"#l56V!6/|C4&HЂƏ(a~U(ޘq-i`3}:I@AO=(MfH|] Σ TRQE}V< ,N:@ӧxc,nӶН)K<*:ː%+y;v=d0_410SOus]dQ\JZ\R/?\5ˏ2WD1JtyfDY'dHaă ]0ۓUϺ_WOAB8R͟w፯C(gBHSI*
+FȎt!\8Ql7kth v|wRnaփf^<2iZB.vQ뢝Uo#doyڿ5 LCK>k7S_P
+]q^Vχ51KW0K&X٩ v@@KT\糫Fؒ+2Xz/4 ?V_ʦ2xI}q EoAsk-a~LR;ca~fe
+~I
+me@#ug$5C̗òǃ`C`z< 3LL֌'x L<p==%KJw^3OXf!9fL2έ
+8>ԅD]?Fs8RIM4$xz:=Ér?  g:)c8:_&-OM(Eʄu]%wKxWީ^
+;Zҹӓԓ=@n{z0qf~xlI
+v!}NToZ^FoZNT>қcdu]Ruy\i~Ӕq)%_"JQغ$޳.hQt zie\lRnJb&Qq9$.r4pծ=K
+O].`hI:}8̩ENUoHʴu!բDה[K/v DBc\ fFA XmerFI(sq>IȅAg$P#/$)TU?[}LbROQ26kE<7:T8CzjFYUfm\"hִ!=_cǺ3))?f!k?M1+CݒzzW;3|Қvf+dL#<+Dt@Olka
+Z05M>x+5qͫ6͓Lo94|+x(|k+5<_2ɤm`K`Sm8-~mh{)e=?6>(?Vs0(RV3(53V2PyxLCɊ~L?|+kEֱC|&U"3]%boZHieXXu5 ſHӎVaUDD!> d7~:pFdނ7V)xg=R
endstream
endobj
-642 0 obj
-<< /Type /Page /Contents 643 0 R /Resources 641 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 618 0 R /Annots 646 0 R >>
+650 0 obj
+<< /Type /Page /Contents 651 0 R /Resources 649 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 619 0 R /Annots 654 0 R >>
endobj
-646 0 obj
-[ 634 0 R 635 0 R 636 0 R 637 0 R 638 0 R 640 0 R 639 0 R ]
+654 0 obj
+[ 642 0 R 643 0 R 644 0 R 645 0 R 646 0 R 648 0 R 647 0 R ]
endobj
-634 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 147.325 693.209 172.013 705.164 ]/A << /S /GoTo /D (subsection.14.10) >> >>
+642 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 147.325 693.214 172.013 705.17 ]/A << /S /GoTo /D (subsection.14.10) >> >>
endobj
-635 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 187.734 693.209 199.689 705.164 ]/A << /S /GoTo /D (subsection.14.10) >> >>
+643 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 187.734 693.214 199.689 705.17 ]/A << /S /GoTo /D (subsection.14.10) >> >>
endobj
-636 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 334.733 693.209 346.688 705.164 ]/A << /S /GoTo /D (section.9) >> >>
+644 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 334.733 693.214 346.688 705.17 ]/A << /S /GoTo /D (section.9) >> >>
endobj
-637 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 215.091 333.515 234.797 345.47 ]/A << /S /GoTo /D (subsection.12.2) >> >>
+645 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 215.091 333.568 234.797 345.523 ]/A << /S /GoTo /D (subsection.12.2) >> >>
endobj
-638 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 250.518 333.515 262.474 345.47 ]/A << /S /GoTo /D (subsection.12.2) >> >>
+646 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 250.518 333.568 262.474 345.523 ]/A << /S /GoTo /D (subsection.12.2) >> >>
endobj
-640 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 360.107 176.759 372.063 187.828 ]/A << /S /GoTo /D (section.15) >> >>
+648 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 360.107 176.817 372.063 187.885 ]/A << /S /GoTo /D (section.15) >> >>
endobj
-639 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 261.702 86.122 272.159 97.742 ]/A << /S /GoTo /D (subsection.6.2) >> >>
+647 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 261.702 86.182 272.159 97.802 ]/A << /S /GoTo /D (subsection.6.2) >> >>
endobj
-644 0 obj
-<< /D [ 642 0 R /XYZ 78.37 808.885 null ] >>
+652 0 obj
+<< /D [ 650 0 R /XYZ 78.37 808.885 null ] >>
endobj
-165 0 obj
-<< /D [ 642 0 R /XYZ 79.37 307.345 null ] >>
+169 0 obj
+<< /D [ 650 0 R /XYZ 79.37 307.399 null ] >>
endobj
-641 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F29 375 0 R /F20 382 0 R /F52 376 0 R /F41 377 0 R /F53 645 0 R /F51 380 0 R /F15 381 0 R /F56 384 0 R /F58 386 0 R /F23 379 0 R /F26 404 0 R /F57 385 0 R /F69 402 0 R /F55 383 0 R /F45 390 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
+649 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F29 379 0 R /F20 386 0 R /F52 380 0 R /F41 381 0 R /F53 653 0 R /F51 384 0 R /F15 385 0 R /F56 388 0 R /F58 390 0 R /F23 383 0 R /F26 408 0 R /F57 389 0 R /F69 406 0 R /F55 387 0 R /F45 394 0 R /F40 395 0 R /F59 397 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-651 0 obj
-<< /Filter /FlateDecode /Length 16490 >>
+659 0 obj
+<< /Filter /FlateDecode /Length 16492 >>
stream
x}M$9r~E5q~@]]&J-`NkFӳtuV27{N';y\r\~~vqRr/qqҮ\Jv#Ͽ^H8YV_rs~a 7?G2W¿E$~];-o q BP%ͥKsA<ջT;Tyw1]3A;Jtq,} l:0ք-(oO5{ pKbA_Ss;jw 1E\+?%Bߓ<-ڈiڮ*C׋:$ү*{_)3\X{]IWޕ$X@'v,[Nx?#^B_e n5t)GflJSK٭pGR {֟ܯr)އM^w,|z}X%.L?y_] ;x</'klk9>ĽnG7i=uj܂**4*IH
-S}Ýf'5#ZDzI6'Rs\6T{>Y=jkI>j Қ ^f4(ydekm7=S {n%ٴ]tZΞQUhimH,ip|<Z=7Rb} ̹s)_kwf)|1h )K;0]*[+.?{v!qGiU׻iEia*^-W]{ɚީ-\S'O_^ʧ7aenrz f4ҵLY`CiJW<NyZQs7~F9P{Q/rޟnƧGiTyhMV"&^&Ν^уwJ2XfZ`îI?̢ɿC\5!eP9ڑNťkYQ3`ᛥ"qnrgic!q}SOS;
-S/v8*jgsm]{|Ey?>~{,)Ns7zDWn{UF좛|Iķ,=pPgL=;xLlj6L[LLKH&n[=ʃ ^)7[&Іɗ&^kMԄrv&(-g0⼄(kr_.$ğ.] t˧|.6j>5ՋWcX+aexZo]kJ\Yci.]VE՚|?ِ{੅p< E
-:E5NpW.qZA.VjKX?&V0O,p ?5'Ȣhc+a!8S]IS.7t .eFrN-v$GEnjMfV(ΐ|1WBky8<;OiyōhnVzS m0CL$P:BfLBEB3.7nCR'fJA]mTwahPxv;JL˵cʨVwrWeW=Gix|D}%+*Nn{Rj=1Ccr+KVԈE
-b[EZLxdAЖr9vVG$1%j<1/M)ıD?=`Gm}Y2
-
-)su\[saF364TDucN ^L9zHғ;Z5RPKQ[5b4|RIp9Fk(.k^[oNd^8S30]24J;:hto'2AыT>KQ#E8T+*p(w^(lqOEN\n# qw;A %RGeshqƅ)(G=۸&w4J-Pp)&]\f3@4Tn+SzZtذЪkzKHn J}a=\
-8M1IW%aWW~ZN
-r ~o2,Wy ;y A
-wxuVF^~B 5/\G_Ѡ$xbg1W=u(v^;|
-V.߁RDn# U )9w:lw4S̃<J"C;8\6.D$&0L48NmLob;;E'}P CrG|h7I Ifo ʶB>!VuIt(y^-0u)`=Rގh
-!sy.Z!-SƔUn񹻧\X++c:
-X4lhI~t(6<&ZnTKov`fx-&dPJ7x$%̕6aqyf80P>RIm#By{.4Kقqi\xNIeN@z4@|SncVX]ͪ_Jp hiq(v>unOw]r
-*uHTb3Ce`NTe<@1*dNXSܔ<] @ Gk-wGDIm|aRGȘV(1<F'Y <40j|&E@E3Z.cPwg"Q!~\}\28F$ -8*K͋KFr=O3UBsɃ_'4$L0d݉p #Ӄ x<
-4H53&Lpfǰ=L߄DyHNRRad3_F,H.L[tFG8KI*j*H0-k:n3m4vKL'P8a1g/"'Э->]ZjcKR4l+(?C@$RV(*dၡ0wg–QRɈ[ƚCIBnusi2"
+S}Ýf'5#ZDzI6'Rs\6T{>Y=jkI>j Қ ^f4(ydekm7=S {n%ٴ]tZΞQUhimH,ip|<Z=7Rb} ̹s)_kwf)|1h )K;0]*[+.?{v!qGiU׻iEia*^-W]{ɚީ-\S'O_^ʧ7aenrz f4ҵLY`CiJW<NyZQs7~FsG`y>˻4Qa-z Lo5Y)xݚԞ;wzG)-cGcj5f&10>'z)sO׼A嬣GkGz:eOǣf}FoZ! &mN=M6*L 8/kYDWu{_ś5Y3^K<xS;=oe{_iy_Un>%zd?A_;>3ԃ*~؏ aôh̴$mB﹕a
+ڣ<r!1jRm|of_kOM(GiG~nB
+#KRV_/_?BBՠ;ZM|˧?_k^@^}?6o^uxF۵&Kɥa~0vbݕ?`X[}S ~@ؾW
+Yh'>;gYy~j|[N'&]<3s5GE~(g]Xfz5s ?
+G#@x"?=}ͧ+?X
+F ˎF[QHa
+5Shx]p9rc
+cJܝ+D)F^3s\G ZA 2
+]iTc sx-SE3Ns.D)_&x9*VkAEl0EWA9BDXP#w52`ָc"k
+Ff7ՀЦ 3DbA9k5# )a!4]$!42x1,u"*hFugi Ą+\=(Ъau(wU{yGWbᤁ6'y (vу<8*bTlLz\^((/q)[UؘˍI&m)acǿnhu@SvXJPҔBkL v֗ՙ!yl1Wǵ5W)m;cCCe NT8tŔ$=ɻ5ynQ#
+Չ(MP4F:vBk TL;R4 }Lr1LMw
+BPKi)uq\8 6g\
+ܑRkbP~dk[9a|g@~-xwbh;DCa6"8!(ߡuI ;)~縄ֱ
+_VBkDQvQ(sd˖ɇk 9Dʛ
+CM]ZZ~aH؈CHtZvugи2id:BIu8f瘜y@H*)PsZG\h&|P0rxnzͣ4Q=ji}Ҋ"=<ǫ«U6u.\=jj2$m823c"vn"94Ύsq}"?+JrP:JP;ZN٨nRXV)$k v2
+t1
+RG3E+dDH*ғMhLOH:s]<5x'(OtefG< %5<5^ꠤyT/,HV9S%^*5fjEOh:2ꉠD&(QۈuD*sNA
+l,1q1g2lBF 5tG2Y\IXPj`sלg ,5t+fk* ="ԋ ׭iG㩸-Kfjl剷脜D_Q
+:ѭw̯+H#> D7&!9f%oЬАw
+gRQ;c< uw+
+ sw&lq1)(- (u;l>)Dphfh([7L
+ 蛯cd8y3'ȼpftu'ZCi'xfSE ď/B
+o [zAs"Ր^o#@y98<z,W9o23; v6tU>X >Hd< 36^JmI)?ؾzcc|oalSisErlb&ݑ۹d"V=E#+-RlCc(׽H"y4Րxy<>anx}uۜe;[N9sMR SLwyWw==^P#2-w~U3rbRфݙMLa~3OUm?;]~ˎ8Ի_y ;݈~+~yߺ{^)n1T]+<ٮ9`앺IE/SWEvizZrͿo{m>T+xgP>(o>Ӭgl4~F~lԟeRhsˤ–Ig{&}GޞIgb痮~UMr6?09LO(&+#~|~vn}ĕIОI{6>.Ak{ay1k·LpP&>Шdx4fm"7හ
OܹƇo󲏕Zh E˯VibE3߯U4ewm:o}4fw٩i
?}+[MTL'g
R6O;VQ|:-^U#3T sJQ~稵
@@ -2421,36 +2530,36 @@ t8YbWmYpcJuǒsޚOgy$wH4L/~7@FREX3o=
;JC~g[1KOc }ظ> 4*Z3'Z~iNdΠ
LO'" 0<d<}!2[`׎z2Hi
/%%rmp=We$?j6j/L7OkRX~TRi<{AZFC1_~]U|gR
-્'p+ޑsYm/~=exo<fȣA=z%)u"|GsS|%A+W
-MϷo_G:~{^eتSe|á gj5M~˦S-K=>ƿP>Jz70^o/)xJ*\Gr 붉Y۽:2j,HMRݯzD*"CnN2q|869n'sܞ1NۥK5a6t/޸xP>]_E[S-Vxmնkp .oS3U7Wf)Ɏ'2G$\}x ~zz=i.k'xiV~2&'3 _yr $eJCtYg6r
+્'p+ޑsYm/~=exo<fȣA=z%)u"|GsS|%A+W
+zWqYvahtWbsw>ځn9unKR祚0kwo\<("Rp+j58U[]ywszL aiiw/cɸL6-t_0^ja&}CfO8m -fU= ,ʼn"5+Q~>ǕM r{~r
endstream
endobj
-650 0 obj
-<< /Type /Page /Contents 651 0 R /Resources 649 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 618 0 R /Annots 653 0 R >>
+658 0 obj
+<< /Type /Page /Contents 659 0 R /Resources 657 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 619 0 R /Annots 661 0 R >>
endobj
-653 0 obj
-[ 647 0 R 648 0 R ]
+661 0 obj
+[ 655 0 R 656 0 R ]
endobj
-647 0 obj
+655 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 249.532 641.39 261.487 653.345 ]/A << /S /GoTo /D (subsection.10.5) >> >>
endobj
-648 0 obj
+656 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 319.111 477.953 331.066 489.908 ]/A << /S /GoTo /D (subsection.17.1) >> >>
endobj
-652 0 obj
-<< /D [ 650 0 R /XYZ 78.37 808.885 null ] >>
-endobj
-169 0 obj
-<< /D [ 650 0 R /XYZ 79.37 771.024 null ] >>
+660 0 obj
+<< /D [ 658 0 R /XYZ 78.37 808.885 null ] >>
endobj
173 0 obj
-<< /D [ 650 0 R /XYZ 79.37 304.388 null ] >>
+<< /D [ 658 0 R /XYZ 79.37 771.024 null ] >>
endobj
-649 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 402 0 R /F15 381 0 R /F56 384 0 R /F23 379 0 R /F29 375 0 R /F20 382 0 R /F65 387 0 R /F58 386 0 R /F45 390 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
+177 0 obj
+<< /D [ 658 0 R /XYZ 79.37 304.388 null ] >>
endobj
-658 0 obj
-<< /Filter /FlateDecode /Length 5403 >>
+657 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 406 0 R /F15 385 0 R /F56 388 0 R /F23 383 0 R /F29 379 0 R /F20 386 0 R /F65 391 0 R /F58 390 0 R /F45 394 0 R /F40 395 0 R /F59 397 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+666 0 obj
+<< /Filter /FlateDecode /Length 5404 >>
stream
x=˒$m:"wDdž7B>MxnZE.dVՌ;C?* D
cp Q×"R8
@@ -2461,89 +2570,76 @@ x=˒$m:"wDdž7B>MxnZE.dVՌ;C?* D
|ډ*+`YuW} qe1p"mt-vkR܆wUlmG͈h/H:h$HFF>JKcGg"ts|ncx&`k$FFĉmҤ5لҎIi
pn8~Oz2KHXnZt}zUJ"W} & <#@&/Aqr^.5߉Ɔ\#JӧE'u$T'a޵&B~GOpO~B?;)M?:{gmnpMbزЋd5$GW
@z?Tc
-v݆a $Q8\ÇAifM7YPe57bH/LZvrw[Icܲ(1O(ӨcnQ{JЇpk6=v"Xw*bv
-bB!Tg$9m AB ĿͧADa|A \]ӟ)qnF-/(wF_v"䇫<Aƶs5VL
- /
-~(5 /
-~}aѮG7c=tvj>W]\]*!f{+"5B%QtҠ 'F<+
-A:L*ar:~{J;)ػ`'y$ L'K;/o>bx>J'ǟW$xx[O8\@t
-JsZ%
-HD4ZI;¸~sl}2҂/O
-qf=/P*Ff=HWwA/7ۙ(_{ k)=E]ho#H-H-I.=!
-4d"ʅ'taZXR9gVDʜɴ;ݫWl 1x™ Qb.Jk1vdwx7q?Ol)꤫ S/-X)T';Tw7Ox2Y!U!ku [ɄMr?2L
-lB$G2>zӣe?'1բ X9xtoB)śfW)~p>
-6CQPft
- 7=S{dMJƤԤ_3ij=SMY&-rU
-D^b鵴oq;pO-iL I̡en{YT>De8]CpA@#nLG3A}`Av6;BȌw&D` ypqQ]Vi z/"zw p՛J+'vl)W-y!Oʞg,+x+lQK{\*fA$2"Kq eynZҟRS^h۝}i3O>7V)KT]ji̭AP͕d4Ӎ5ŢB1DɠrkIѧzR_9mcĖ\{i'ZQ' T}*`)SQZЋd.>#^p~O>\;>Ae88W!fʞ<ӢJqgM|ikXJ[a⻮V=0w`\=W-I7<?3cP8woDDU+덛aWމoF޲S;rޕpQ}M8?ν8@p yЭwa'\A@ZڞH$#I-5sla C;C
-M !rM?GG4i{~)N/S"l6IKy CE,!_ }o\ﰡT >w#F稷J.
-
-~9%& iuHv6;yA;QOVK= uuMbϹa~h')MWR  3hWjxNxQm88zT:7avaZW9xMm8n+Wb>cz KT4xKz'%7YMVBhS]_4sG*%񪵌rIUƆ3&K0zV:݄ +gfMݜ_.bF>/BAMOh9ضVN aN[[)UId$KrOkUP~Rv?*G%ֲSKue>VZrestNhkrfp籾:Hwa՜OGnJV~Pø;=4gla
-DW[LZ8rC _ 5,i<al19gIC3csj~/QҙY
-C18Quѿ[-K]v6mw!B)S-&}3z AI Dp&0/$ zƾA2Q{]\RWsunZϤByZDZ<ZejA bvG&UgN;OimdC>?JOc:2mDS!wg|$~ ,18m_8}#-g#ق=idK7GNRa53
-tbNXv<X5цꀓEUuSNjkQ+La`9rJFjq+X''r޹?CZ/GH
+v݆a $Q8\ÇAifM7YPe57bH/LZvrw[Icܲ(1O(ӨcnQ{JЇpk6=v"Xw*bv
+$8Ì%D,gt"H,iR/KlcFɰN!p1j@AQĺ||lz-m$[pWpwlz-mXa\?96>Ti'=Irl[~Kbީ:6>8zA|#AԻ zB=F5 @|"O 47smR t$Md2hBV^0-,М3+"ed+WCyhMd<(1S^;lO;៧LuU),Fy ޻v§ N,֐ΪrW:_@ x^J[sd&aR&B6d#y?wCѲjQ݄PS ַg!Д{J8O M/Ʉ[AT>  r3o{GNYh?sX ҔM.ƌt{J62.DWjy3(Ч*y:&?-M}!
+pg4יv[q%{*.p֠V
+(wqi|JB^ƚXQIbQ! X dSN$рӿuČCxNOoίH1bZսzBȴ-(˅}^>0թ(NE2aI/8G'd.i 2 DZ+3MeO˂iQ%83Q&5,%RAM]qt+rmԻpeaʤu}p黷g^iOުMǕ+[ G7#o٩[LJ˨>gzJy^ 8<;I惰 o-mGq]wOlsa90z!d`F&#caOG')6<cˡ"^Q_hnwPVqS}ψDg#sQ%^]QA]MQU$;םټࠝ(̧Lӥ&I0{㉔+i[  +S{|Y<'<T6wG=*xho0ʇT&6Iū
+qzx929tuo5|9
+iyon3JX_z$껰jN㧍|r7
+k%+?}aܝ}60N-&TXxq40TI߳N95?(R,hqIn 4ve5pPR-Ju8 T'"EJU=憯fї.meZ1 LQ
+wMbV\̊AVeys;OyTη:u)z_{sYm&|#lfݦgx7póKKW8^"4@0ͫKzcwk;bEnoɠNEK'8qv8OQ.-N!r賔 ic46nͧGVCV\|}u7S<%b-;ۯQ (A٥Lu~ 1F,xF</EVC&1%+9I:6lҀL,YD3 T6p{epqѯħQn2Y:mm2ۡs'7swnVnܬ6l'Rߔ<:-͂W-2ǚYnLbq#Ɠerp:߭.;ﶋf!UƔYAtBM_i=م "`8
+Ap=c ( GWԽ]rQIF9y:A7k^ gEu{<-y-{u-2W#3ZʹS6x!]1`O6 n3Cx?i/[꾑lӞ42@qܥ#'}ߚO:1jr,jsA`o;h{͚hCu": AT&0Npp #w@iѸ݌,N9ܟ!- 5G
endstream
endobj
-657 0 obj
-<< /Type /Page /Contents 658 0 R /Resources 656 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 618 0 R /Annots 660 0 R >>
+665 0 obj
+<< /Type /Page /Contents 666 0 R /Resources 664 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 619 0 R /Annots 668 0 R >>
endobj
-660 0 obj
-[ 654 0 R 655 0 R ]
+668 0 obj
+[ 662 0 R 663 0 R ]
endobj
-654 0 obj
+662 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 246.713 590.495 258.668 602.451 ]/A << /S /GoTo /D (section.11) >> >>
endobj
-655 0 obj
+663 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 274.389 590.495 286.344 602.451 ]/A << /S /GoTo /D (section.11) >> >>
endobj
-659 0 obj
-<< /D [ 657 0 R /XYZ 78.37 808.885 null ] >>
+667 0 obj
+<< /D [ 665 0 R /XYZ 78.37 808.885 null ] >>
endobj
-656 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F56 384 0 R /F57 385 0 R /F20 382 0 R /F23 379 0 R /F29 375 0 R /F52 376 0 R /F55 383 0 R >> /ProcSet [ /PDF /Text ] >>
+664 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 385 0 R /F56 388 0 R /F57 389 0 R /F20 386 0 R /F23 383 0 R /F29 379 0 R /F52 380 0 R /F55 387 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-666 0 obj
-<< /Filter /FlateDecode /Length 4393 >>
-stream
-x]I_ѹ
- ^OhM"J&h>|{L~(^lN^#7R]pE6@6ʝ?o;&vk%䥌h/ڦsᷦ>:&f^9N>tA~h*:n}M^ŽcWkKQWX&j?/_L+ t!1qŒ\~yO _8.OY>,˅Q𳍄"Lhs, Ԍi bH*
-[4qF@o|% qH$xþE>w$J!;kJ E@7_>Lu-<o;KU.&Zsn("ԽjW3E7f4]X}#.zOOzv<ИqE})K]s:} Cg߾w_Ǎ1 `U?nh[ճ!$Yՙ!;[
-BpX.)k;µD:zKX`&Dje䏱Ɏ`ʄd2J{U"ӕUU4'
-OFq ~͕KOϊ'==+ˆUÉ|'LK1cT0aD~\SoF=aRf W(iԭݴՙɜ7m6d. }Z>L+`mw|YsYSAزuQք0J{Q( ;g8%nסMfɤ9!riFL%=٤'Ѕ;-"tĈzM/5oea،hM/m:xN-/3'$$ʓƀOna*3jӷEc!'0/ beXw1ɍĦW*i2¶2ZRҰ~IkVHRmUWKu͍4x׬:l3vx"7GL{2Vl+ݣH ޢ,q2R"_e}+A~zPNȕpG6rR4܎\]Ha4úP!γTLÄg3^!'L!D-K}8<gbs
- '^K1wFzi^cC.hz-4qv4MWEz"̱2q _ XB#`_q` ~Wpx@_Uq^e!aX{Λt<u|CW*[ q9m<#VO{7N$,IpZ}ѥyQ~d21q
-t asܴlf6X a7LF_,V1+ &O ^lxR`G)=*Sxhc$X\),6;5lFF] r)$Z\)GƒI8aŅktxGׅ7F2`1ڸZC[Bc#n1mi̴H<)AB +,N$D 녈 WB{x]qkAZQ)SHv)SR,nfS6dGF<J{U*s dٍ $+HQ@rprؔbD|hm9P^)UO(k,Ұ!Wv WluxNDRi" IP2U I"X /S`Cm/+%f<"N3xbfe`h-W,no c0$m2jhSg]+=_E!hZ7`F&J~Mv.T"H8"
-Mk9иVT} Ӓ&=6[ -"
-Qع5A(PM0)k{ȉ^iN^Dpj/؄&\ljǥ9&0*Kk~ и4~D}Ri\g\q?vdKb8FXej[3(ϙIs %`ɠo)xYƙzR=)@8"<\Ϲo^8fE,ou]sK~\x2D1y+<w+y,,uII]aӕz${*!ړyguЎ͛9iUĵ륊P9Hqw$k"^x)E|353Nҵn{Mك,`;SK31P9f;!\mq&03"1q8e@"y"? Y{]`QKcn$y5"ʀJ vtf$qNΣY[op#9$:`\zQYp[wҜet QVI5VhcM>wmĀBS2-T d"u^l6 "Z)TZwbGB/;J'>^O)<=ܑzA+"z,{̜@sqsc 5B
-nFYS 9RW_Tp/;2
-бFVc՗ҸqV Cb?;HXO#¹o[Xi`XCŜ
-VLm 3ة-sIm1`@ȇs5ux(ippG/>_;‡ h#{&4k~i=PO5PI'C.aiWe-ՠM' mT̍ .{A$0IT/35LP ԱbX)VkF%խi[c݆qQG_/vrs5l*c,@њm1qwVBpJ) CsM}IHB8amͭN>y}L*$כ
-Mm9OI 82l DX-%
-ǝڬޥ;\Nu;"6@^0<0+Hl0Ԕbmߡ?#N
-ɍ6Ϋ:u1XkhUSEoi˝^tLIG*u3RYYY/<<(Жf}dڶPl،24QM]mU߶SXRx-~b%v'z#߯K{vf-m:,$:{# +)V|f6 V;s${>5jbaj5lqLvH+X%$&*G;={(sA8А7\vmb67{Q& LѼyY7era(9N~NNjsKg3)[|em{q<XvU&}Cu]Afxu켝8t> CTNRyVM~^<z$&5rǸݶmz[ձ\˸\vF.ß\?o1VUaU!- XzFf !V| 'eڐaЎ.fu *FFJeʫv6 d43cL:˙ V>fD#q¦մWT bӐSa=X5n"Ta1-Ma_̉l,)R
-0~
+674 0 obj
+<< /Filter /FlateDecode /Length 4398 >>
+stream
+x]Kl
+S~n6ɞًXtUŪn ]/Q O/J/8͵\>]bf1ɖP*(\+gw7 eapn-xZhdO|>|mkC#?]pS_C۟>КD:"L6&|s^zb3PBG=~!ҹG+\o╭6(mW}m;'ovLeJ{}K"ӽ^,Msᷦ>:g^9Nch*:xzֿtc쫵zԿVhks+A,8/_L7esWDCb/pV-]<}Xr;.& g EuB}YkS8rS)8T.# +WlU H&}6[}I•B?w~@Onݿ<}["xo;4-\L
+ԵU$'i"PjC_ j1ɍĦW*i2¶2ZR77(a֬B|6$6 Zk^ bَf@Dn(,DXt EZ$f9JXF>QG O)FCwTosNL^IRdksivY hu\gڇ 5L#fBO}{BH[q>"px-U+O-c8?9(hҼ#]фZi,+8h/D xEce<31Q
+ >5zL<h*<,}`q轳īNB°7x&8U7sfyF8 2nVIXߏ81aKkYsdcb#6$70iw6jm~3o+؍2X/c,VVX!MA
+E@&6g b7XLA҂ u>\ Pbj8!<Vo9LQ x^G.ea3j#IȨENuxno!5k1p(5ٹPe :P +4 CJXiR2V-LKrlх40>.q|7G) b_J)>Ψz@}OI/Y75 Wx<M(+oz
+[inp![AQM6 :84HBTPGcTC"H"o4 7aSȉ^iNp^;DԞ MȏKsM!*Kk~ 8иA">gI4ZK;%y|1 yvm,t[
+
+ L䍤ݎdPn7I<yЬƙz
+}8q샫 ,5gLK|\Gh1B !U/h=@r^|L;+2
+1UVXr,$ַ4n',OO6~wlyM7x$s-X@S/~|ɉM saa[D7KA%YDشfD& %b );zVkYo?fXHDДW5e:aT^aFL9"LoNTRԺjWpxJ-SԞ
+LoII9\dzXe!mw)H䮦O!E?Mp~w#|i6g{IHmEt^UL;gt Nª(km:g8챊gnlᲁkHrI6YH1sygD[Hb@4j,n5OᲒo
+V5KG0y#fFah Z.aTE\nZ0AST`V6O
+"CYT2m[EislZJ@(^ͦή6oGSXR=-~bvNjz#/KKxf-m/^:,$:{#+9Xaڑޞ#Y5޳V 3U`Cc#Dڕ\U}`/)$0uU ӳAv i9l{ |eGv+f[2a`-ˊ) C=r*urRpe\g|8IAj+l{.㑝*tUԃŰZ,5}}u]^fxu켺.Gt> C^UNRVM~^ו>b%&rǸݶmzձ\˸\vF.\xkqԲ?IJ
+i!`n4ʚ'\iiW !C dhG`{:k#`#RD~_2U]Іo2 r&UwG"ш$ei5Ub/U|à.~4x iXvG6E7 J߰V&/\DC6)UI0Wֱ
endstream
endobj
-665 0 obj
-<< /Type /Page /Contents 666 0 R /Resources 664 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 618 0 R /Annots 668 0 R >>
+673 0 obj
+<< /Type /Page /Contents 674 0 R /Resources 672 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 619 0 R /Annots 676 0 R >>
endobj
-668 0 obj
-[ 661 0 R 662 0 R 663 0 R ]
+676 0 obj
+[ 669 0 R 670 0 R 671 0 R ]
endobj
-661 0 obj
+669 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 247.659 468.618 259.614 480.573 ]/A << /S /GoTo /D (subsection.15.4) >> >>
endobj
-662 0 obj
+670 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 187.923 257.918 207.629 268.757 ]/A << /S /GoTo /D (subsection.18.9) >> >>
endobj
-663 0 obj
+671 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 220.581 257.918 232.536 268.757 ]/A << /S /GoTo /D (subsection.18.9) >> >>
endobj
-667 0 obj
-<< /D [ 665 0 R /XYZ 78.37 808.885 null ] >>
-endobj
-664 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 384 0 R /F51 380 0 R /F23 379 0 R /F20 382 0 R /F29 375 0 R /F15 381 0 R /F55 383 0 R /F57 385 0 R /F58 386 0 R /F45 390 0 R /F40 391 0 R /F59 393 0 R /F71 415 0 R >> /ProcSet [ /PDF /Text ] >>
+675 0 obj
+<< /D [ 673 0 R /XYZ 78.37 808.885 null ] >>
endobj
672 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 388 0 R /F51 384 0 R /F23 383 0 R /F20 386 0 R /F29 379 0 R /F15 385 0 R /F55 387 0 R /F57 389 0 R /F58 390 0 R /F45 394 0 R /F40 395 0 R /F59 397 0 R /F71 419 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+680 0 obj
<< /Filter /FlateDecode /Length 4649 >>
stream
xˎ񮯘upNus|rb#S7n4HѰŪb.r)QO wvwJqky@NaNF3B5;}ڄq=owjK}j8\w钎0k5GרM?baSYFfU q[sQb̘?5?XG`=$G/#i(v`M^3Kc;~ Y:CQ <m")S"~ml5m_Ϲ
@@ -2561,332 +2657,341 @@ xˎ񮯘upNus|rb#S7n4HѰŪb.r)QO wv
Nƽ*o_u" 'BSK%*yﵳ|l܆7F.+H61$]2dZUWwl+[|㲭ƷA_GD+V^ҡ3F憉K{!;[B\U"h;(8 jUu ɯ96.Q°ʶ=d꓀H%N'Z8_nC(S
ւȔ:kxf#ڴwyw.@o%oZO( U @oě S2[lM@J6-J`#hRJb@o%sZG s3 m#Ig1 dLԛIs %藬R +Gg8#[-z\:p9u0[ٖ/ZC}),'03Wa]0K<szͱf
sZc~3#(NJ6Oc|6"1N-&n% m
-]h8;SE0!3_|]F*rn[6fS0ͥZa틞tUKtھOKU@ߜrW*JxKDʷ_\4URF,Ξ4qFڵrBbǹ-WomD%E<2Q;׼xa_RiҎ[i
-8c} yuW۳ ^¹4
-<_(y%{,O}NQC#V]u:-"O; 8tKdy4۪BXz_2_Su?xI:&`V& SOt( \ +
-xReGG^J/ѿ5m߄T;S)jXA~paRmA6
-@;*zv~g뚓F
-dW])AMmܫˆa*Z*h*/9_TE<@}Y#OU6PTז z zA-1BnQMl)i`u' jqDчNtLS#LBUE9H5.&ê*E5U)P RL($TUK*Cf9O`lgx)Kċ;׿z<oa^{Xs!˱:F(9$IJՠ \_PwAI%L3eU}~'UY,'zaޏR
-5|D+4m]_Y+PLh؁q+?~'B$雴c JOU([Bu7[ GK?'!5Xu5ݨ?cܟm$?(t u@P6|K9Gϰ_#޴%xY[3uܞ>R*q?B,
+]h8;SE0!3_|]F*r%zJ}i.
+/Kh_XXޥ|_<RT-д[ _&V梩^֥Wu-%xdɦwu3֮UJ<m cy^;9Qx!c3NsiF4,^<zؗhZmY,Ng_BVrtE`aap. J^+ lz&Sx}e_Ux*G|Dž%ZtdӪܲJGE8X)bGn),ߗ^f[C]F /V BR[kJHߤtL
+;
+Þa*e+>cYpE=T*"T0~HSJ-ѿ3mT9`)jXAvpYRmA6
+lMV=W
+FΞvkN6yV60* ^vl`4uTs"4'x?rƣ$9+$Ku<4uj840P_wSjM=#Օer^)N_崰d F5X9Tp>DŽA-(P܉\v<[)ק*5!UţDPXcXSh**UšQ_Op)Ye,8LWʜEu`UJEs==]0i =,ùvX"LIShbjPyZT{ (s廠$&HR֙2٪>˾ɚ+ =zT0
+G)xջE#l| V_cyl
+
+nok#R6Q57 /=T6poMʠEec>lx=YXRPS trWս!5&@3\δIy#Y@1^a{Gb1 >{񕕢 |1/;h3|>W
endstream
endobj
-671 0 obj
-<< /Type /Page /Contents 672 0 R /Resources 670 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 618 0 R /Annots 674 0 R >>
+679 0 obj
+<< /Type /Page /Contents 680 0 R /Resources 678 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 619 0 R /Annots 682 0 R >>
endobj
-674 0 obj
-[ 669 0 R ]
+682 0 obj
+[ 677 0 R ]
endobj
-669 0 obj
-<< /Type /Annot /Border[0 0 1]/H/I/C[0 1 1] /Rect [ 111.059 85.34 307.73 96.959 ]
+677 0 obj
+<< /Type /Annot /Border[0 0 1]/H/I/C[0 1 1] /Rect [ 111.059 85.19 307.73 96.876 ]
/Subtype/Link/A<</Type/Action/S/URI/URI(https://tex.stackexchange.com/questions/685755)>>
>>
endobj
-673 0 obj
-<< /D [ 671 0 R /XYZ 78.37 808.885 null ] >>
+681 0 obj
+<< /D [ 679 0 R /XYZ 78.37 808.885 null ] >>
endobj
-177 0 obj
-<< /D [ 671 0 R /XYZ 79.37 533.569 null ] >>
+181 0 obj
+<< /D [ 679 0 R /XYZ 79.37 533.569 null ] >>
endobj
-670 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 384 0 R /F26 404 0 R /F20 382 0 R /F29 375 0 R /F15 381 0 R /F57 385 0 R /F69 402 0 R /F23 379 0 R /F55 383 0 R /F67 389 0 R /F58 386 0 R /F65 387 0 R /F45 390 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
+678 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 388 0 R /F26 408 0 R /F20 386 0 R /F29 379 0 R /F15 385 0 R /F57 389 0 R /F69 406 0 R /F23 383 0 R /F55 387 0 R /F67 393 0 R /F58 390 0 R /F65 391 0 R /F45 394 0 R /F40 395 0 R /F59 397 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-683 0 obj
-<< /Filter /FlateDecode /Length 4662 >>
-stream
-xˎ>_Q졵zP/aY 9 ["
-V7`Ou JIA<3ַ\yؿd3pg;np2Ph8ڡL2^<cyz]p \.W$TK->-SFДZ.V #$*'ؠ)]N]-,K:J.o"Lk}T
-/7
-.8*|nWkd7oCDŽЭ%
-.zz/~
-KОٰ) {]541i<
-FbDN m )z &ފ^;L4d ՞hQeը}s0 nagkœlmzRCX&\b9nKn{HsZ=4  8lal^ EhaƿM43`Bv*z矗^8rڨ;!giGsfg}5Pδprg]1eu`!݅<`sT_yP$Gz
-Kn'K{h}OZ ~o2:=RF5N4.u+;c[{x\ Z$)qwtN/-]o~硼PCE|x(?ns3P2ƐFoL\dm2Qq٦OQjV>]ӓwh i-:8BY4>Hv-zG0{Xۦk\I냻' J9EF.U:0ghkq7}ՊJ zwo,^֔@/"5>=gbu=`-}]H4>#>]'剪yv+~{GqQq(!=A^+Ű4[ee)Qv 3a~3 '
-@I㒀Ό6tB؉p?ˠM6 #R%# C$)JhL .U $!q ň<&[n9fGɣSD"q5)& QƕUG5v"CcX V_E\͝/#^ pofOc7pgn{(T+ҳ{<ˌ7EWg?9Ey5EOi-ZwusNrش<{[b#kJs]'ɪ:@QN }bWK$Za*t/]D #
-`6y+L6Tu<ЄJ/\VʂODSxI3[ +Yi7C"筚""8tvԦs&x&_hBE.S%p9UAWi0j+RжC/;֘젦d J ?Mg*(̉R.w BPY\a"o$[WV9ͣ[588Қ0 3ӒƑy6`U嬙7_v̹Qlb+' ,m+L+WT~s*I=ۜsי9mfəcEoc^Fn46P^֋.dMIlXMYzJ1,Si5<ՕMKl8bxBr1)ROI/$]=uN;/dL)5u4\^k,ϭ6zkŋ-pMI6vUoxfgnSt`ʫq1j\nJk>X7j;֣f`.<?aI =)C<2h`kb')i*W`3cI]v
-z荚~ε9l^j}\qa"t\[EcnK3mlȍ3eJDOv6)[#6PūzCnZMx2ӝ9rg$[f=Ĵ-3Wy8Gy5{)P^`?I7N8L<ziNlL%Lj.$q ^o͹n0W0!,** 1mpx9%fqj6$1\rqh>X4IJ젢z:^u,Voxnsy i˨C-J#JI x -UIqTKWOh >"Оug
-favh+of(CS}=s{.3wZcN/gNĭ%!tUl#yˉ8Rfu8ᧉ3Q%ІP=2(Bv|'hkaznmQ"G.Uc;ԁ'˨:uBFfHMb@J+ z8Y&`W[˻ iZٍn(R@eV@P k8<::W>td%{'A9*%P<7F z^.pqYTP|814NrH n0(Z Vq'l Ā NIX@KnJ]C#
-eosm|#Ԣbq@rAl3W/jnGm^ՏyZ"j۫.Nww_= C0q[Rq_eO[dü+׹\p_Xa^t<bvB@^)Rw#7*>w,7L(ms0KՒ<
-hIU3@]9ȕwvm(堥RVQ >"r!eJ gB#2կO^{TVhz|כh}=!֫|N˓m@07Rzpca`
-vS^)V[AkSTX7WPTS_cDc!kZ9nyj%|6{gf& <DU[;6L"DW3CsQ4֎ϻ[{ДBSF~(邾Cz0
-JeMI5 n1~-ʊ?$k7v;VZ ', Q Y3#t˪Bgnj[uwuk3z l=P4rͥ*mZ駐v bNə|+'bN}Ba0\U/Hsk? #t*]҆sN f6ҽu;,,NT4Iw""ʫ.!*둋kfx_[flwpS7bt߹h4Ffq^įn^өRn~kvzc 19kTQ F'F_(žhju2E'ƭG8J?D"[BdɦzM ,AsJ?!t3C0939ybu4IJA\J%GRqO$ӡംLQAÝl7 B>}5^C‡d
+691 0 obj
+<< /Filter /FlateDecode /Length 4714 >>
+stream
+xKbaz<٬dԷIK>{IOkv}xWCQ$ŗ$r/\2M??>}3oǟXϤX#.q
+$ι 5~~cp0nj?>oǥgJFXcxI'ccOdc75KZoʴe<dr,֍\Gh}6ʟ6|GH]ᯕ4ҿyYJ^?WV2ibMkgzn5t𤢌IOtTΫL W4V_qv{#i5 fJW%Hc
+ӧ_/%"?/O<}T昲p:ܱ
+^WUbz@U?r<* bmY/B1oYOsu;&E`1G9;ͼfl3uZfQC5
+@ifysb>`aL
+mHs6$ZL]k*
+δq׺sg]1m}Wm77>
+o
+"PJJ*&վq9;;_D0w_f?)$]CxJZ{њ:\.u: 3N4.uKxJoΘn=нq_.* Z$;|KpM.capPhpP<|IۜA0acY6O[ 9_Ϧh
+uP%v1A
+VYb!ހ!aDWUܴE@Ÿ5lE%Jx*-e unPf-d6NwP4(KVsIقڙHSI
+LY`s"
+yjؤxrKO={V=ըY6O狔YG;$"1&*[k f'Av#i1ND8r=`>cIdoDm.*fS"jcN ,MB6n>lHMkȟ(3'ќ<"@}"uWmT9ćFUWG웹&^Za*DjDu9[ OW
+p
+6մvgĔ4ABAyb>U7eS@Ia֠Fr;O&F2s KJhvvHZnE"&LAk#v7vNodH"m}RyZmO$.SgP]>AMGIń3w|q #ۑ[Q5T:ϥex[Bo
+AnLr>RXTʏ!0b4kO#Ҁ'd!zBܕKC1(N ?0|0u4n5 ZNJ0Zc3L+ع'Wb$3[=ia?Us ߟ G6˙U#k֮6̐'wGRy eS#q_fV{Œ+i(߶+YM~Z#^\ҞV q K'[,g̑&
+<Mbpx *ap#5K%kR%QrPPT3Xu!l]@xrJ9Gt1CۚN 
+))qTJOOH :hE!=aF z7wOm]CR*jvNJ1ީ7Nu+ E`CQ.'JBk! [3~~^
+-C>;L]5գ{4N8A;;/herֵu@(cZ4qn:qy6ǖ5N
+ɕ[Lȩ6_3y 'sy+]QZv;[:,C ꡝֹ#*XelCoOħeWF1<y;xEA w[E-2G?Fӌ;T<x7@xVDJ[ nbWN$)]>N)m`,@^ x>)dpBzZ%е3QU5I]6I@rEtb,V K
+d
+9='
+CGnNQQa " L= };ufIN &3.\K?%\rqXvVzf:yvmMfQ1iʙGH/&nUw-YQۼX|~-fB=Zz`ڮE݊-&Z+9}6kϪVM-桶rӞ{VRthO& \\ln5@p`yl *\iռxa Nqs8
+_4N=Q#$CgVJbsfXɝ$IiED/50:Fw4`Ki9
+h1t1"P3_K^9>t}ҾlYU;r&5)Aܽ}o0Y2H|Ŝ#5Z *󑂩P㒙<"/$cyino~A[7R\|g7>vyT (ὤ*""t~ ٔc
endstream
endobj
-682 0 obj
-<< /Type /Page /Contents 683 0 R /Resources 681 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 618 0 R /Annots 685 0 R >>
+690 0 obj
+<< /Type /Page /Contents 691 0 R /Resources 689 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 619 0 R /Annots 693 0 R >>
endobj
-685 0 obj
-[ 675 0 R 676 0 R 677 0 R 678 0 R ]
+693 0 obj
+[ 683 0 R 684 0 R 685 0 R 686 0 R 687 0 R 688 0 R ]
endobj
-675 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 423.843 591.898 435.798 603.853 ]/A << /S /GoTo /D (section.9) >> >>
+683 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 363.496 595.346 375.451 607.301 ]/A << /S /GoTo /D (section.9) >> >>
endobj
-676 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 313.091 579.943 325.046 591.898 ]/A << /S /GoTo /D (subsubsection.5.3.3) >> >>
+684 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 247.126 583.391 259.081 595.346 ]/A << /S /GoTo /D (subsubsection.5.3.3) >> >>
endobj
-677 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 402.649 132.953 409.623 144.908 ]/A << /S /GoTo /D (section.9) >> >>
+685 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 402.649 160.807 409.623 172.762 ]/A << /S /GoTo /D (section.9) >> >>
endobj
-678 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 425.96 132.953 437.915 144.908 ]/A << /S /GoTo /D (section.9) >> >>
+686 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 425.96 160.807 437.915 172.762 ]/A << /S /GoTo /D (section.9) >> >>
endobj
-684 0 obj
-<< /D [ 682 0 R /XYZ 78.37 808.885 null ] >>
+687 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 120.984 82.049 127.958 93.277 ]/A << /S /GoTo /D (table.caption.1) >> >>
endobj
-181 0 obj
-<< /D [ 682 0 R /XYZ 79.37 665.602 null ] >>
+688 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 143.679 82.049 155.634 93.277 ]/A << /S /GoTo /D (table.caption.1) >> >>
+endobj
+692 0 obj
+<< /D [ 690 0 R /XYZ 78.37 808.885 null ] >>
endobj
185 0 obj
-<< /D [ 682 0 R /XYZ 79.37 248.911 null ] >>
+<< /D [ 690 0 R /XYZ 79.37 666.001 null ] >>
endobj
189 0 obj
-<< /D [ 682 0 R /XYZ 79.37 209.406 null ] >>
+<< /D [ 690 0 R /XYZ 79.37 275.838 null ] >>
endobj
-681 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 384 0 R /F29 375 0 R /F20 382 0 R /F23 379 0 R /F69 402 0 R /F66 388 0 R /F15 381 0 R /F65 387 0 R /F55 383 0 R >> /ProcSet [ /PDF /Text ] >>
-endobj
-690 0 obj
-<< /Filter /FlateDecode /Length 4075 >>
-stream
-xڽˎ#7_hE@t {܂vgK=w=lOrp]%Q7Y/O/<~}&3o/b=b`܈o_8~\BJ)Ϲ9HΕkh_gk{_Z +U5 ق~&L孽;8m_fE)eF5a0
-k(H ښR$-vqZ38;PN#J}`O84kep#jt'wqi>q.] R{x$
-@uh'FZY]d,nqk{>½-&8`XV`G@9.9sV
-|".8=B."uFY*~WXWo4\' Lϫәeg)IfM<
-3㜎fV?1( #W}snW(_4(%Q{gNSi< cj3(!(SX<~ ;+}&xNS!c6c> =d6kfF\A1vNmD;h{
--HLS,S&*P qi-mJ"nEB/URxn<gJBo"$rɘ3½^)Ju.o-=o2y5_tt/(pl|LX?r@axJ;t;d2Y*ͤ#1cHz^<T#`֊K{O661ΠuꭊFIvxORs
-c۵'!lVxͼr#%ZhҶ|ګ z2Sfuj(((Q[=[J@qRK/ [`ptM#g29w3]n )ݗ0 a dk npV(]s?f xk*YkKTdPZA+E>619i
-$5&&?R@{1 qhBg
-{%:}6f{mg)iiθh}1tHa}M݌ Ϯ{zӷ t̛l0ŐRcIRoauz=;zLE -lqhd՗nUd*.AzBfB[ʞ9#Ggՙ @F{1B_,{ij%?Rb[rtSqD'jT!
- CA->F$17 c])Rߵ6[S)~Y>[U`FmJ(JX~Sdh~ޣhƕNXfA{Q,<Roƕ6~1h#cy*6AhYGGoVPFOooG疋t
-$Ьp=B{ ~H,mz+O.]-e-1E{t}O)wȤuRUQeO}9l#ȳd3ӯy֓LWjzƖ') *IyNG32/^|~h7qG T;S15Ja5\)GtO^ζ!uRtnۙm&B x9˔1R-G^׌RS1KO`-פ=ھvn4WmnJ%>ifh@3'sdo{H#qN+W`ԜeoY2Y,\hL<&e"9q4%-ae7FO4Iul;Ԇw
-
-8c[G3𢱚W>٨l
-H(<}ȣKtJ%psb75P?뚇XPwrf9OVF>NہYSD=:ZPԡ pT\WBM4,0iӅiPByW3#4 YGoFQ*7e4 B1<\x*[)Z<NѶ@P9,)jvJ
-4rr@O2x')DG
-ɡZ-5Tâ=%/FH
-ܧ0;F;a!|(9ړ
-FAjp]ľYz؇:GxR̛t\HHfsԏ 1,h@9aʓ䗼()s'%?<7HV/|鬫@[Sl :fW/0`O)QHi{<5]͂?G >iץ#&OS<L"-ξL)wbRhQ3SB[_ 0ױFQ$V2Ƿ!V4EɔF]1WKs*ta29Ih%Z9JWI~Qogk~4H6$m(e_ʄJ4-F&y#F+881)WU!#CPL֝ɝ3_[B͙`2wohV:|-S{Ȩ _ʤ p̂^\ek+2; tt|lO
-!s@'ʉ5IդJ+ey$"ݥ2q@*=
-i8 n<zD8^id~Xmo0>:viak9r
-endstream
+193 0 obj
+<< /D [ 690 0 R /XYZ 79.37 236.333 null ] >>
endobj
689 0 obj
-<< /Type /Page /Contents 690 0 R /Resources 688 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 618 0 R /Annots 697 0 R >>
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 388 0 R /F29 379 0 R /F20 386 0 R /F23 383 0 R /F69 406 0 R /F15 385 0 R /F65 391 0 R /F55 387 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-697 0 obj
-[ 679 0 R 680 0 R 686 0 R 687 0 R ]
-endobj
-679 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 120.984 757.853 127.958 769.081 ]/A << /S /GoTo /D (table.caption.1) >> >>
+699 0 obj
+<< /Filter /FlateDecode /Length 4387 >>
+stream
+xڽɎc_h4M 8Af 9$~K->[z,H~ׅ_~~뷗n6\`." Lq+.߾_~}H'oTXOä;ZnxKDGX2MK`J8*ǂӫ\|\^ߥZr,j"e 0 ;wQh9B>:3}'R8 Olm;uݝ4yt\4zMv'%gJPSg@ 'qK8|Qeࡶx xD*i[P%QұCV^
+3i-j`iAHq@P(?uH_hdgn@DYgf6@ivmAMh=/h4$iIM=MJ88t|[vEmYcy:jɆBoZU/! Y CpUj S44n mXS☓@i3w *B #gPTϭxX,?I'S@K&И%mdH{%34 h=Np8f%.5GhT#;
+}:9
+xLN\EQ8JuoD]A %XOV3+i1-]&ZC<ٵE)~rU%vDOʽqYS׏و@1 !Fv2qy:iGD:`
+܏4Tu}jQeU
+d.͸c&$|R)1Rgǵy/)MQ ΰ3(jɘ3½^o9J}~[Nura /\Q|nJ.dMo\940mZ%G7]?MV0H4^$#$"rFť̽'h:Df;}<L+خ.=
+;GQ]uϸE}9&۵EJ;,fl`}v]LG3Cbu&I~lTz 0͸ӣ-nw4N
+]F91"Zˊ!d3! ,oCK->FDQM2Rk#O='-~Y?vGQɑiso߶~'Z84~SK? B`^q"YDҩC,E,
+LK!8hAYwpGZ`WP&9L-,&5}z}X%FjH2 3DJ,Nz+Fwvh(e-,1E{t)܏dZ2*~U fo8{RSaV9Mzs_ԓOZƺǖ'\$> (7
+N(S3IS7S31J \1GL GLe'adK$[~}(]+'Lb!c^1Rpq$cSbZ.st}q-Iv͈Ɛ|GJҧpdz^o]B;:"aq?n:gY[9gBKo$_}k\
+MQKf٭kCimukx b.@Lޡ2TyVWPӤcEA%|4tT ﲇrqe(KM&.YfP#Ge}9zqA:`xa 7ϰ >54ѻEV S m,B1Y&[!έEG,YTA!^%@ ˸0?*%-RYRԣ}dhRVGh+p "7*y%</e}0p=|kj"`.  *M志,Ɨ!7uUp>6~0sUqش&P
+nw~CLߢyE S>ȇg֕9^z.#%\,A`_G:ٸd)WH<D'fi:aNvF&ZX
+tӏJ!YRf?)= ,qׂRԁPdr^KXjŌ69s^H=Ib?!(e
+C-ݠܬ$4YmڃR "kU=YCD`whmN,B\6_PCuSw"]H&m]gPB1JXy){zyHuUIV'֛eM9`,K#А J1xy=`ӊm< ÒBtVS!ZЧ)-O2z')G
+¨zoMv)IgP^0}
+Cpމ
+NKS΢,`Mt2qœV5\F8;0}mQGOEcw bo&s*<v!
+:uP~&pcwzB61Adg[U  rYDV04+ZOYE䷸[ܝ
+b^p;O3%w8ޯĥH9CO5n}
+T(r=ם0lJ5K5;]YL_;:  Qkä)i7PL&B"z&E])
+endstream
endobj
-680 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 143.679 757.853 155.634 769.081 ]/A << /S /GoTo /D (table.caption.1) >> >>
+698 0 obj
+<< /Type /Page /Contents 699 0 R /Resources 697 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 706 0 R /Annots 707 0 R >>
endobj
-686 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 434.871 467.631 441.844 479.586 ]/A << /S /GoTo /D (section.9) >> >>
+707 0 obj
+[ 695 0 R 696 0 R ]
endobj
-687 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 457.583 467.631 469.538 479.586 ]/A << /S /GoTo /D (section.9) >> >>
+695 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 434.871 518.01 441.844 529.965 ]/A << /S /GoTo /D (section.9) >> >>
endobj
-691 0 obj
-<< /D [ 689 0 R /XYZ 78.37 808.885 null ] >>
+696 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 457.583 518.01 469.538 529.965 ]/A << /S /GoTo /D (section.9) >> >>
endobj
-193 0 obj
-<< /D [ 689 0 R /XYZ 79.37 724.862 null ] >>
+700 0 obj
+<< /D [ 698 0 R /XYZ 78.37 808.885 null ] >>
endobj
197 0 obj
-<< /D [ 689 0 R /XYZ 79.37 527.477 null ] >>
+<< /D [ 698 0 R /XYZ 79.37 771.024 null ] >>
endobj
-692 0 obj
-<< /D [ 689 0 R /XYZ 226.44 223.171 null ] >>
+201 0 obj
+<< /D [ 698 0 R /XYZ 79.37 577.856 null ] >>
endobj
-694 0 obj
-<< /D [ 689 0 R /XYZ 232.109 211.122 null ] >>
+701 0 obj
+<< /D [ 698 0 R /XYZ 226.44 275.776 null ] >>
endobj
-695 0 obj
-<< /D [ 689 0 R /XYZ 195.137 178.32 null ] >>
+703 0 obj
+<< /D [ 698 0 R /XYZ 232.109 263.728 null ] >>
endobj
-696 0 obj
-<< /D [ 689 0 R /XYZ 195.137 168.148 null ] >>
+704 0 obj
+<< /D [ 698 0 R /XYZ 195.137 230.925 null ] >>
endobj
-688 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F56 384 0 R /F55 383 0 R /F69 402 0 R /F66 388 0 R /F83 693 0 R /F57 385 0 R >> /ProcSet [ /PDF /Text ] >>
+705 0 obj
+<< /D [ 698 0 R /XYZ 195.137 220.753 null ] >>
endobj
-703 0 obj
-<< /Filter /FlateDecode /Length 3784 >>
-stream
-x1W,dh #ٰ{G}"G;6rnȺϖ"/"?|WEtڙˏ|QB^%*axt˯/R~JW%%ן/~W)-37|~[rN mt@р#$ʿ,ii h\m?S ga !9M%;\YuSW=* ۨ!O^:)e7-7P 3O𝎉7\`*QtQ0~"A:93%fM=&oU|"^fɪ$zSy״Ӿl%!irfvG,Pᚙj6OF'&PtrV FR{zյ ^(%&*zOM8qȗhW٬&Ҋ6rA
-U*Y\v+3utkB-7,LH+A5+֒t5=*3TOol~y<ŠVeBE۬0g[:;kjW@.
-ݼ^l5*{YaJ;bq6œ4]&LVɆ1p/vԽcm_Q)-Ӧi(>RictpH kE̴"cijĸk"lA(0' &(@U~N qA*nDPF
-r9OBfsuw<DKƝtǸ7W\XF1ÌOt7dxavWΟvߵ1v[KqXkFoUw.Ѯ6KE: 
-q!e>R |bSЖ}fɇ< V~P:3 #<
-^OM#m{ϫәYQBٰ4rc-5j EaTgo5zaj>
-<n%þ#{fi{6!>Z
-֡TYIAiItOxѽl&cS܍V0_v b/60ЌIXg0Q<XfC&CwQ\"G}Hq:~andRdy[DakS<tP4ԟg'i2TMcd[|9+ C3:U搪jOjeR{mKh4Sw 鹠c; ~[-,a =sҏ`4W Kܫ f3t. a`ЎgY[1 }rK~[C l0diJ@d6rm
-34;̲Zv;t?Y72=%7Tןl{ 1zCL)k
-2ejiZ{=noT?TK$[>k@ ʸw}a&oY<hY:
-MdgH?y QoB˥}  yg`
-b}n2-bK%Ax?HĎ^/WcEFvͳ{F Oi_Ójࡢ m sͶtPA zkӍ}wrW0V55 >K7cOƎhGeӓFTu:=+rt*INf'Gs~vڧ1g[V 3[G噍"8:ƸU,&BϓCZU<1!5؀0]Vx\j'19<i?wI<H]̙<v3^>>f2U^Yktcwi5X| wBY6.:J< &iii,`|Aԃ,+/SsZ+~u|E#/Gł?g"FVo7|w"s!y{0xSi߿/ݤ!hCUT3`ML'/(_̩yrs^ oھX 7|Uz{s}}'oSL UvXæ}T@SMҼh8}7es7qIĈwv6i"񀥁07MϬf+8 [Y 3
-T
+697 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 406 0 R /F15 385 0 R /F55 387 0 R /F56 388 0 R /F66 392 0 R /F83 702 0 R /F57 389 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+712 0 obj
+<< /Filter /FlateDecode /Length 3402 >>
+stream
+xc1 G Fٰ֑{G}Q{{#G>)yE^E_~zSEt?(|!/`/)!닔o?~ii |5()
+67~4=Kz"wOoQnRZUA#>;_N-a ~+I7|BTDP
+k9EGʧSŠPfbFEaA3IZ3 Q˟@oL|KjeL|NpEaGLICrM\F
+OIkH2JXUH֕o'z.PH
+$B):@PSy<0t9N TX)9]ou 486e5-yc۷jIU =9Rtkf СѠAj_iT+npK
+wem/_š-E^Suku?w  ߢӅa⩍4ephgahjTW_nΏ(iz~%+!YM#0k1'c/O@w|`uc4S ?V 8G&vH
+Xo` Fs,ͫUӡg窆14H.΋-l'/>=GuYHKEHѐ{a|75[@q(yDwQ4+0*~
+<p*Q9`[hr
+k8S 5P M9K5al**[^a⧜Kqk!kr=1u ϥaFjj&_CiccTZC/>+3:U ѽe39lv
+f\lXD@b?5
+f7z kMߛ$]OYIɺOy,~ھn8AYy?w*D1{ºe&.`顱0Z/INz yWӂ q֌3ߞQ7e6qr[>x^IwR^ޙD۷8xvS˘leCwARJWc'C0'grq6sPQ6Wtj̧֜wlQ+m1)~`,_Nk0|ȿP4g¦P׶g?y H3acRhq&E|g20̍hytNPΔ#&| Ȑ7rp}}3ZGܽ}7?dPÅW_>:bROk۞>tc{]4;hz jw ڛ·?K
+P}ĩ1jUiJ-ȯ2}P=cG%~ϊ(!}QcJꈓk8Z<EY9g4՘ 6jŨG9Mt48[ qmݳh~Mum+('js~)1 cSN
+H}v9﷊SXR&(d}d~)! .L=:I7;i}W`9ZQ[$E=גuΧ q`&X11>8NqLhC,4gqh?dUS9l J:Oh%3
+Fx21ƁLqZ3nʿ:l)W#v"xvIw_e~o"sy4[^}뗿ٮ۩IBTpQƸQ^P`.(ҎM86}~:tmgy\ ml Vcrk^Bk[3-cz?ujd2^i%}L2RWSؕɵY.wt YE~25ҫw˕?2ɮ,V6HY;vhۻw-0 |7
+J
endstream
endobj
-702 0 obj
-<< /Type /Page /Contents 703 0 R /Resources 701 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 705 0 R /Annots 706 0 R >>
+711 0 obj
+<< /Type /Page /Contents 712 0 R /Resources 710 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 706 0 R /Annots 714 0 R >>
endobj
-706 0 obj
-[ 699 0 R 700 0 R ]
+714 0 obj
+[ 708 0 R 709 0 R ]
endobj
-699 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 318.818 365.604 325.792 376.553 ]/A << /S /GoTo /D (table.caption.1) >> >>
+708 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 318.818 433.35 325.792 444.299 ]/A << /S /GoTo /D (table.caption.1) >> >>
endobj
-700 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 342 365.604 353.955 376.553 ]/A << /S /GoTo /D (table.caption.1) >> >>
+709 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 342 433.35 353.955 444.299 ]/A << /S /GoTo /D (table.caption.1) >> >>
endobj
-704 0 obj
-<< /D [ 702 0 R /XYZ 78.37 808.885 null ] >>
+713 0 obj
+<< /D [ 711 0 R /XYZ 78.37 808.885 null ] >>
endobj
-701 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F56 384 0 R /F55 383 0 R /F57 385 0 R /F58 386 0 R /F50 374 0 R /F45 390 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
+710 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 385 0 R /F56 388 0 R /F55 387 0 R /F57 389 0 R /F58 390 0 R /F50 378 0 R /F45 394 0 R /F40 395 0 R /F59 397 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-709 0 obj
-<< /Filter /FlateDecode /Length 2710 >>
+717 0 obj
+<< /Filter /FlateDecode /Length 2642 >>
stream
-x[;6W( =m&3ٸKnU|Zfw@3jH?_)J߅ߟ(]х-a-__)5RJj <RP@N־Np%^/ҷ(a6\Spὼ=t|TpIQ%xЋ~*im7ͨ n Qs3tgjq0.\z\8D:hgZŊ羕 *l(Ekz^5IFң:/U2ԃq% ,ke8/n
-}Y[ [Vf8jO Pl>(H_jq<V߿JEkJ,Xwp;J&-m2<o=NF$1'a2L;ޟto*3,
- Ŝ)0kL0=1l@dt+'#9촆 C)Qw2R+٬i
-5J0 u5E @dLfZuf隥g#Sf9ĦYvҵ( zY`xnQtZ *忥Dj>]@$0x-~px3g 7J'c<pdŧ
-sZc
-j{V^90-s.n( DI̦+UYҲsи%}7gxVڭl̊Smrk7, :9 -naQf?aw%aj4sݻ{=8 -2ijx{Jcm#hc|4:tpe977f7Dyކly*2FGla%
-ȗb1Dϥ7*] -N"eDͥ"v/Lpnp]X `߶cOͫ3t$@|_Cohq{-i ׶]"̙
-|R-cw!d-:Aut?%Ps}@\$0G Kٷv.L=.eay^sXmTޱZRJ*QG+,V25Zz;9rp֚U4 8: ,Y6Ҹ<U"zWW_}6Fe?eT7'üĚtةŎ z̍\wb 1h7I{ɝl)m-e " h3l]6*_'͒<߀cU:酜ƺx}lxZM$f3HO9l+1Ze2,WC-焺w[YO} h6Yy$F>`Pgk{@8J:‘#Jj
-L|~5}5֗B4-=
-8%5,DvI[8<DXsV}JE m9}TŶ+J; HN[#iδC]`4:ZxMCLY9xØS=J.g}ĔɣjKokx2rf]&m#q:h[m!B0 I/4^#<E. G(s~+k6Yz:iRT47\ރ"JUT#H fG$ &WkbH)>$}8:W@̕U|Փ\6e;U/BtЗu.9>4;@ aS- ('BvhYE&%TCqrˌ]anV;0,xP|R ‚6:C (qWf 4+ ^_Um}9ϥ>S ![8֊VJ
-)6atQ-NȮ<, F$[(C4W HHN2Ԙ^5.;Lkn(tczHCTq'!)b1,w+y&)_pC 4. 릢>V7W 3ՖP4BCa֝G''!&<_r
+xڽ[Ko8W{(D T
+Ra(rU x")u2t]٢nA}W4Ihw*6dv)qKN[:tu=9ISsE잦os{)727?nEl ?ݥbmb܎)XY`(,N%/k&L可OeOp<wyz[vnftw'Fy'ua0
+?g[R&6?n+|+җZ| E$
+gcƉt|Bm^0pU\2{ee
+)%z)K?炠'O)9{M(a90rs:lW]bIApyvNO4W uL%!D-~>P fLN _>1'*솚2 @dFKGcZ)(hic R2F:M##5dhagI0⋣uSj=#!BO`Z*3|qtB5k!l$ 4˦'!XKave0 /Xm^Љ8ϔ(>^&iީ2&7kC0&^pZcU#9Xx* Nc 惓q J,~>8N(dֲɪ٭&}x6YSsT,A/?[rHZd:#fxŃ]
+i-=u!?=]ͳApv
+KѠ]KPPs=pm%(tB8dž Ͳk[nKmv[N}[&6]۳ Ckn=Y ~ an`4Ldzj4縷w 5{ed[`հYYpqzQ;X@
+r\O"Sw#H8QXp852[o U)kvтr}'#! bGYG 8z1Q"!UYKZDX>jh 2\55XNl.ߟZjQz ֟L׾ErNTkw*K4m$ժ̫nݖd?YZqkByKI_줌Z4TQ8w$ύw7r+Z6[ mAMAO᪣
+rs-KY,URMu</4ڂh
+f5)sYJIGr
+%ĥ= իBbXhRmm >Ѧ5Qr#n̺\mt
endstream
endobj
-708 0 obj
-<< /Type /Page /Contents 709 0 R /Resources 707 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 705 0 R >>
+716 0 obj
+<< /Type /Page /Contents 717 0 R /Resources 715 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 706 0 R >>
endobj
-710 0 obj
-<< /D [ 708 0 R /XYZ 78.37 808.885 null ] >>
+718 0 obj
+<< /D [ 716 0 R /XYZ 78.37 808.885 null ] >>
endobj
-698 0 obj
-<< /D [ 708 0 R /XYZ 79.37 712.61 null ] >>
+694 0 obj
+<< /D [ 716 0 R /XYZ 79.37 777.001 null ] >>
endobj
-711 0 obj
-<< /D [ 708 0 R /XYZ 311.994 631.792 null ] >>
+719 0 obj
+<< /D [ 716 0 R /XYZ 311.994 696.183 null ] >>
endobj
-712 0 obj
-<< /D [ 708 0 R /XYZ 368.632 619.743 null ] >>
+720 0 obj
+<< /D [ 716 0 R /XYZ 368.632 684.135 null ] >>
endobj
-713 0 obj
-<< /D [ 708 0 R /XYZ 202.495 551.085 null ] >>
+721 0 obj
+<< /D [ 716 0 R /XYZ 202.495 615.476 null ] >>
endobj
-714 0 obj
-<< /D [ 708 0 R /XYZ 202.495 539.021 null ] >>
+722 0 obj
+<< /D [ 716 0 R /XYZ 202.495 603.412 null ] >>
endobj
-715 0 obj
-<< /D [ 708 0 R /XYZ 202.495 527.065 null ] >>
+723 0 obj
+<< /D [ 716 0 R /XYZ 202.495 591.457 null ] >>
endobj
-716 0 obj
-<< /D [ 708 0 R /XYZ 202.495 515.11 null ] >>
+724 0 obj
+<< /D [ 716 0 R /XYZ 202.495 579.501 null ] >>
endobj
-201 0 obj
-<< /D [ 708 0 R /XYZ 79.37 469.822 null ] >>
+205 0 obj
+<< /D [ 716 0 R /XYZ 79.37 543.562 null ] >>
endobj
-707 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F50 374 0 R /F15 381 0 R /F56 384 0 R /F52 376 0 R /F83 693 0 R /F58 386 0 R /F69 402 0 R /F65 387 0 R >> /ProcSet [ /PDF /Text ] >>
+715 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 385 0 R /F56 388 0 R /F52 380 0 R /F83 702 0 R /F58 390 0 R /F69 406 0 R /F65 391 0 R /F50 378 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-721 0 obj
-<< /Filter /FlateDecode /Length 3595 >>
-stream
-x\\ jjԚrԎM$ݚ7p M}
-3G*UjXB顏Z&mdgAۛLHxk1-,⻮Pm*diM6{=hil_>N\~~"F'JpcVڼիYΨ)~lF25OZD [+\h~"3Zj Ed>q~T ;9nʧ4(7s[/]g>>G;=*浼{Hg@=Qzx(~]J'H0-&ӄ=?$
--P©ɬ]KkLj5%DS*W.i[2m3eS<X0-ɖj5>D&=Cq:qru&̩*4__܃ Dü(rMw۲t(b|?R!ur:ѠvettgJH{Fіjhi֭7` ~F7֥SQ^G(ʑmV$4Ϻ4Фj&*12_]K2G[m=CFYemoq ΄I{]IԱO߃)vTimPׁ[<| zis͑VB
-CCr ^D3e!$1"$"OcGz6SaM )ʋY5RNfn$˽f;8)s=wj
-@ug[L*E<ٴ38a=At5h @i(a;ѓImk8sˏJSyYdd&
-5V6 J1kAo TLe0W,ɢ)1~h<᳍MpĝS(~6"Uᅥ9E(T q&G59 6Kze¹yzX@2i&`#~>` 
-Taj*koGD~bJ;WR6Tca*a &/!HO_+ q)^9U 4==te濽_4J& az4Ŏs;oct)OKÖ !\Z!tc7˜^YU$k)
-DX<L{ϪG8ɼʨZY# pa7PAiTX
-*VP!)@pY: 2(%%ب"TVѬ:IVaj. ZVYW`ΏN~*Rs h Tn%v1?Aŗ7.$k(gfUBf7J; `M xf^4\S)a.WU7Vg)ÂYj;'yp#
-_@UR la|[maEe2UTSJ/˼+vjyzAg{I(͟t Z0P04venҧC+`u XWikX7wlE0 }jǤ-m[HЮ<<*lRešCos[,\ma ܷoo3JyN}NKWp:k^ΰkEZ_(tM*p*&> N:wRV/Cp0-2&*SWw8R3i[8ۆܰ3AWp{Mn 6{7ӝ<zWsi"fF!-\f% kJy5o 7@Mc,jW.8J]>VaLkB-@S
-8cgC#)c <%8r =<p3EXYFJĉi-X t3 鸽Os3;ط+<9zoÙg)tؼqzY̋pZDEdY堮f N`[MZEr)cS4&`u> A,w\ؗE`RшҏJD5K[{a;tdosvL43Sڜ:cr1GpSI3}O,!XnTV[yP]7N/guZi Ze/3Ё_Pqꎎ
-t$B)##'K[1!͵M -o\Pt=t 8 蘮Pv
-L49r,dk~Z HV=+ܙ(=ʤ6jkfRyy;ROEt acaÝBXƃ<?;Ğj"Tn0lMUtho8kRW vdho?Lwi_(%*MEg?(1 aǣ!,ZEި0W
-URcX 0e+cZ/2A"URpʹtio#HvOEFKBV찱 ZNgpFޞՍԕ]7%=,o`+[Ywۑnpyհ p\[z}`nk
-`?9 p/Ľ\~Zh:|ULJIB|{*Egʘ]t)f%:wU\)Fh202"
+729 0 obj
+<< /Filter /FlateDecode /Length 3558 >>
+stream
+x\r\ + RjMUޥMVm&>ZVYd!ž@8
+p?m=`}A kLwcw (T8M|ҨH;*68RLW{TUXyq1fyI&x0q4 f [{-]-lɮ7M5
+UH#**
+5E2DE}i>ۑvZH0%mSp9}4~OIklOuUkp򛱯mș4MjaiG(A
+ 긏g}$BTﶥgm?ȯ EhkzW~Aսпr
+ύ6: *PކNl4n-ҥ԰^^75'8(Y'eHays;;}wQ r;אW+?ۧ|9_oީtxQSry"<*
+<MtK!fOU
+s=ku|GOwA '
+}"ES?WjNwkn2ܒܽzR+-`|Q[g>ኙAv56-.'Ql9=n61E^tl9ZQ֎qK{έCTC}A)¸|&֋
endstream
endobj
-720 0 obj
-<< /Type /Page /Contents 721 0 R /Resources 719 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 705 0 R /Annots 723 0 R >>
+728 0 obj
+<< /Type /Page /Contents 729 0 R /Resources 727 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 706 0 R /Annots 731 0 R >>
endobj
-723 0 obj
-[ 717 0 R 718 0 R ]
+731 0 obj
+[ 725 0 R 726 0 R ]
endobj
-717 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 476.105 185.837 483.078 197.792 ]/A << /S /GoTo /D (table.caption.1) >> >>
+725 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 476.105 201.659 483.078 213.614 ]/A << /S /GoTo /D (table.caption.1) >> >>
endobj
-718 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 498.301 185.837 510.257 197.792 ]/A << /S /GoTo /D (table.caption.1) >> >>
+726 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 498.301 201.659 510.257 213.614 ]/A << /S /GoTo /D (table.caption.1) >> >>
endobj
-722 0 obj
-<< /D [ 720 0 R /XYZ 78.37 808.885 null ] >>
+730 0 obj
+<< /D [ 728 0 R /XYZ 78.37 808.885 null ] >>
endobj
-719 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F56 384 0 R /F55 383 0 R /F57 385 0 R /F65 387 0 R >> /ProcSet [ /PDF /Text ] >>
+727 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 385 0 R /F56 388 0 R /F55 387 0 R /F57 389 0 R /F65 391 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-731 0 obj
-<< /Filter /FlateDecode /Length 3043 >>
+739 0 obj
+<< /Filter /FlateDecode /Length 3040 >>
stream
xڽ[n7)ZBm@ 4!P ]n$R/˯O|=7?OqikF\~\~rjxɂ֎\=G>S`p̳0¹5q_ڬn1 wε/|ńùqHw~W6ᑗDu}l4Sv))k-#pvnrZG+2*)h<YcҒ_9X ) B,ӉL + SZN;\}<2MRڍ. ią2ͧ8/PI2waH@dI^ #GH5(aXPHŢ4J1ai@ԛ$Y ˟h5߭Yޭ0iGz),}[kI\X&.;gG222N:rFlQq2r"p$QGsq~2H߮-I|QerqRu\ O+FAT
-=CE*ZѴݡ-sxzv9BVfk?KPȢ-.8PWC`t5ہ"1]7t ַ'J/ :ߴ|@}BE]8hOl@NCRGfsA&;NvA!gcQa9_(Kcp@b9C/8ӏ5ga)6x9zL{3Qgһ[G2PZyZ%Z?|dV ӭs}TvqM:ZP )(`y>I==DRqM'HA0-;3t19IwmX ˸UB.F }ƑM+3 کUN횳mX'AKG (re/om[T(pŌEml sRT g=fm<m"".]VRz ~2Ό2,:d9Sɣa/B0 *T/a f\h^@ou+$hܳ붍ɲzڄҏ>W#upg n#eC2%\3"[3!C<Rt5l1eɠ)fd}!ř1n<&voa74xTD徟`28YގSN0')cfgyG@fwՎc]PYe4-: <0l1;<,nk^}A\v!
-=;wܳ2c8ܩ,JN2ҫn;_#R1Hnp. @~ڭ7KtwMNO`,˥$b<9HVJgn^3̠'F<[)Ǽ=$<{Xm-+֖Sn̛Fѽ5\՞ܛ8r&?V1Pn|b_v/0[Lƪ=ONFԨ-cs~|MBzb@2UL%G}&TJ
-mUv;~nqW<~G@y WOk7λ#uX(
-~j̸܎'٭zq4¬Z[?VM6R)%U һA4룜Ġ҅jbQT?z+rHport(/'驉K 27|!bnuM]虱|NަRkN_ru;!R5>nYu˴yuҖ)YoTR/-'m'?H MsUB
-\yngUy6/;)`7vӚ,% +곆dr^&c.t(D&\{ߋ*ZHb hiBi>V? iڰlTݑӞmŗ߱0(,Ӈ3OA8ƧS_ZhP{NV5d-Z1NO1BO`D| (@~" OJ0
-ᠺYy
-de%Ʒ
-oq/Gԉr<X_Pz%uݙ:2Hyє$gQ0˿~<~eʻ_q揋w?ҟadC,'cur_EY0ǰ )!*7ҝ+pg)۲ק‘V',ov!I̭Z $uMzY^5+ɤQHCn ށ|p=kY
-Q~k)o+ס :5G},jGXp9.W 1/Rj
-Z JXV;Z:OtyPN "NT/{pI# FLZ%pݍ a\+Tla
+=CE*ZѴݡ-sxzv9BVfk?KPȢ-.8PWC`t5ہ"1]7t ַ'J/ :ߴ|@}BE]8hOl@NCRGfsA&;NvA!gcQa9_(Kcp@b9C/8ӏ5ga)6x9zL{3Qgһ[G2PZyZ%Z?|dV ӭs}TvqM:ZP )(`y>I==DRqM'HA0-;3t19IwmX ˸UB.F }ƑM+3 کUN횳mX'AKG (re/om[T(pŌEml sRT g=fm<m"".]VRz ~2Ό2,:d9>y4?Ev!R1@%l6\{;QЌ kn܀{pݶ1YVOvbX]PGjѭulHdBK2uFDsk&${G&m7,4Ls}<83ƍY-,C>1 $xRy̽,V׌Nq+*˺QT'!B 4>fǚ #Ubͫ/h+nR"$ C K*oi&h 2>}
+BxmqV+=p{Ĭo;xw<+x0K Mt9̹%k=V@Pv"B/jCv,U(Zʞ8&
+ѭ^Ղ2KkƴyA0$;X1 0۶>
+%9:ܼ/ *fAq[OwyRy'zI&{y+*\[V-ܘ7{k((x= 7qL~cܒ' 4_`jU{""@ UQM[$3 Tj=0ϣ8!@ŀjke J&\M(9W0@z-I;gV9SsBuЦEޫDM-a4P.]Y W7WgkK| w^HXN+SֽMW?mmݸWБ6z~Tu*}ZU@@+Z#<ct'x
+,?t5bfMn~^xsgV=8aVG&psCY WNQ bPB5aTV=nfx Rgex9$7p:DȥRv
+WJHGV]&.Xfd >bo^5֯`g:faaZ,eZ׼:ig{7 Hˇ]vf*[!<*<k~X
+`0w~;ziMZYSV l2U9U1lnow@:"N|.ufkF-$Z4!4W{mX6
+s`i϶X`b ~Ù wn)z-UZDqz'P+XV'⍧_'[
+jAuo铻+>vOJ@ow|M!𙨆@GURod~,=H6ˍ(2SO[
+saqO]aa'RCDC-Un;W24RJSe'O`#XOJ_Yҟ3C:.[hCAI9(8kVIb%+
+=cRVCtjXj͙ ,3qks ]@b^?ҋܱ0v&u
+,Hb9E8n+qm_$CFtDZW K1AÆ
endstream
endobj
-730 0 obj
-<< /Type /Page /Contents 731 0 R /Resources 729 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 705 0 R /Annots 733 0 R >>
+738 0 obj
+<< /Type /Page /Contents 739 0 R /Resources 737 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 706 0 R /Annots 741 0 R >>
endobj
-733 0 obj
-[ 724 0 R 725 0 R 726 0 R 727 0 R 728 0 R ]
+741 0 obj
+[ 732 0 R 733 0 R 734 0 R 735 0 R 736 0 R ]
endobj
-724 0 obj
+732 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 343.619 566.849 355.574 577.798 ]/A << /S /GoTo /D (subsection.18.3) >> >>
endobj
-725 0 obj
+733 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 429.706 415.94 449.413 427.895 ]/A << /S /GoTo /D (subsection.13.1) >> >>
endobj
-726 0 obj
+734 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 465.134 415.94 477.089 427.895 ]/A << /S /GoTo /D (subsection.13.1) >> >>
endobj
-727 0 obj
+735 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 328.914 302.996 351.39 314.951 ]/A << /S /GoTo /D (subsubsection.5.3.3) >> >>
endobj
-728 0 obj
+736 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 367.111 302.996 379.066 314.951 ]/A << /S /GoTo /D (subsubsection.5.3.3) >> >>
endobj
-732 0 obj
-<< /D [ 730 0 R /XYZ 78.37 808.885 null ] >>
-endobj
-205 0 obj
-<< /D [ 730 0 R /XYZ 79.37 548.523 null ] >>
+740 0 obj
+<< /D [ 738 0 R /XYZ 78.37 808.885 null ] >>
endobj
209 0 obj
-<< /D [ 730 0 R /XYZ 79.37 389.026 null ] >>
+<< /D [ 738 0 R /XYZ 79.37 548.523 null ] >>
endobj
213 0 obj
-<< /D [ 730 0 R /XYZ 79.37 349.74 null ] >>
+<< /D [ 738 0 R /XYZ 79.37 389.026 null ] >>
endobj
-729 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F56 384 0 R /F55 383 0 R /F65 387 0 R /F69 402 0 R /F58 386 0 R /F45 390 0 R /F40 391 0 R /F71 415 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
+217 0 obj
+<< /D [ 738 0 R /XYZ 79.37 349.74 null ] >>
endobj
-736 0 obj
+737 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 385 0 R /F56 388 0 R /F55 387 0 R /F65 391 0 R /F69 406 0 R /F58 390 0 R /F45 394 0 R /F40 395 0 R /F71 419 0 R /F59 397 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+744 0 obj
<< /Filter /FlateDecode /Length 8392 >>
stream
x}K%Grޞ,ũCh4˞ (BhأY?Y̪:%= 7ndd|_ixfJ7ӭ.5n?%s\o9%O1.ow͘
@@ -2900,646 +3005,656 @@ u 1P^)󟍁6gl%G
#Vb~{-CVGS6dsc~.03m6
k>?\`!}X> IY%m#n|򵃡6f^u{:{HEwwur:Sqsig@zfSƸV(ͱzx;[ =tPЪwk
d?~0x֯0ٵh^<;ζC~w߇Nb4ᔯp|Jv~,BK'u絉ͦOO% f/Iz AVٸ[n,XGO꤭mbqL<n
-a\= [qfՃC
-
-Anݻ7U ht
-`,0Xqϙ W!)3tG^lW?,m *}&__Ҷ⧔ԼV:sTQGWےdHwd?hChen6%}㯑Ug{>7'Nx҅_ K&O⟴ϴw RڞM+1X,-zU'u9٤uMZ' =ڄ`vvO@R ƯtV󈧅,T$ħ*^*՗<
-Pbga_ETy p7IE<]oHt5MO{Mc  `.ƊIvnB pJڥp]rʯ=Ng 8_ l:H#nbebb\YD$XFHB$L.X
-Pʐa|Y}펱-mP'|okaNsbZA hIs,*@_a-*C L(7C]7hZwC=XI4ZC]@i6"-<D3#@ 4Û؅ ,`ڱtQuP3Dg-q‚5Zq@Vz=gEQҌmS)00oIZ':cS&&Ck5I(G=w0%/Jpά@zb7;n{䴛$z+d1&5Ӂ<(NUt$EmnQ$@MHyλfH( &)Ss,cCXDrUxX7J=T}y4z(xŜ}`k<pzaC [3 1{><bp<5=0 Q#b$zQ>h)X8G=cZL.v+a9EؕG)qɳ}`K<p~zbyNf|EC Ӄ5ªlHCZx\H$iEFSG"-탇#X#EF-H#-㇘QFÑ83GqoOԄ B%:0(7_z[A1Y+sJfӲz$&%ї(
-
-6,i5
-zC)\ێd̮UH>z1ZeM7JJh؜@lj= ڄBҎ
-. ֑a]b9%rs Z숃` ^)mVZJx<zG~0KJ/, Xa!;haǴ'Ѣ
-xƯp,P@T LTSCN#- f՝)pcԒGEmvzQEDXLK O^[մj+qFFHѣ jwԊ CMxeTP^?v<ܧ4jD̶8*=ѣD%%<lNPsq5nnQFP^6C!e' $)DkGn@Z}`nZ$h)as!ac#N8c)1Kq<gP1.^*“5%R()asaDO kD:_ҎuOK*#9'8 P-hC\57VdbmB۹F x4C<bэ*VZ8KlꨘDq#Bö2g:pމ@6`eTXsX`?(Uݏx\02bmT-x|5=Vddnӣ*"5XJx9cj
-iT1s@-R()asaEQ sD2*D8|',CaG
-K6y>AaMۮQm~\"
-iEw9%ZiY
-KxSb"nJ]'; T*T8c)A?!Qaq!<2!֍ztD",1ZPŽ[ڠ$RECiǁaSX`AT, %D%`H̵9%^t#䪘C6Pi,*Ƴ; +5m?2
-GdU1#)5MmOYT8h2
- ^]!e;@m5V^!̺ejEI;x9WM 9Z74$N9sP1ᡴ
-=s ԕ9%^ak s̰wJ! *M}E#!hlRpb*.nG^ 한)EI;ƀ9W {j[q+,QZ@m ËiȆՀVY6)2}X\^ I6, FUI&
-Młf\Odi٦.RRBd<$>HHO
-=OGxUi-MLS5;2ePkZUp-y1BC iffY4ת<&E6ńLL
-@8*'b#+<>32+xB>kJ+mRdAܑ)̀]ժLn댉>?
->i>1EJmQdSZLĤOT )a _HFu]-L5;.eK'hjdq|ZLP,hʯL~ZڤI!@rG3y2sC1#㥀ffY}m1jGX40 xX|db{^LLP,<@/5*-HIi1!€>%jU)&g2fb
-?-&h1kmRdUZLĤQQU((e)}xW!>x=hj/QL79HנoaSg;2{įCĜPmRautcG1E_Bu[$q)Z"uzTzN;Oa1 {0unS' a^VG{mV%P/\M<O|Ҭa2hUo5U#\0?{ԧJm*%r:|j+Ƈ"ψޑ1o`4eçHc4qϯ0wYzVbb}dzx"j;LR ڛIY Lȯe" ^l{χW``Z!\[(O,SZ9G +=0I=G
-#+r]c_~Y;G EsAe x-~erw3T^FJe5xPn Ev¼Li<o;4o?ʫ`GM'y]kBY Ta8R:=_ϓp(T#_2&z|**psoG)9݅mX'<BеC*yg,zs#&l#4u{2?@s?՛sypT瓲f}crlX(/ ע`O`w}viϝ[o]ܟ/̝Ժm
-"#CO{ DyZ9sjko<D E~A|%`:q
+a\= [qfՃC
+x>܁&5X]%K:vK'Յ;4,~dU;lҏhW":Ú^2ߪeiC<; P^a뗟kK_m}&ozFvG#zW JRӶ}/2%UAj:-T:v`F{Tp*a9e@UAb<R'퉽t<UuwnuGo~%(uX7rt=C™. ]8Nıu9{weZm~g/fMEk=Ļމ&.5q ȳf P6=K6{ !wxuIkL,Lv}wU 5/)-'pn gGm|Kvǭ&ڀ\<wc+э)aߟqG;T]JpA'{ ]bӁg'W9l](I|҂DN9ooOQ>oמlrks 7 ]*43k{Ji1nSx߮xa6+x$~SC^vsǷ/nSG<Ka t7BKNoV]/>ҽZ=Sfk|'i}'.Й0-©O`t
+e;XZ^>zh]NjM`[X/Fx+jYN]'A]%J%c>F@*i`ɕx-k!өىx5`]l"_3<\؟&יt *'ts% L*ni*-uqf]Z6Ԯm}R:HZrHןs`h/{י`$+?z$LWxeهZw[Ox0muƵu+R |;Ϗ;{싯P-(<k5x/l) DWZ7,]ݿZ%1|kJsu۷}SCUo*z\|aqߣxɧ A!_(-YbPIW?ka `4ze0_y`rx  ,8YWr+G|ٔșs$/6٫_6kt/ گTi[; j^v+9ҨNڍkݣ/mI2$;J
+!
+Os27SwHЪ=MrWCtKO %^ďK{N'O[g a^mJ}XS:l:&QNmL0;;R;TCt?ݵ<i$' U' i
+J->
+cuø~;YEW~^G, dqq] R%t#:bdzһl[P5k;%C֦%v)ܥpפkB#NWmۿ҈XDٻD"l=x=Q/F1P=! &T2d%_V_c0uK=,/[ZӜhheD'Zo+D(1
+'Whʐ$''S3 '{qP" sPOs1VG͇j@PPv@Ef6H2!j,f.va)< 3جv,]T]0 YK`k0(G\4^`Yd Bi4cT=0h=~VuؔIZ DQBj A3¢@y&3+ ۞69&b
+Ydt`JSUv9%%FfDQ! kf?7 *uӀ#R#@IJŨz$=mP!h8\ը#)5MmR0.eqja($kMĠu(2^1D<ha.)z; uCf!1*lM= C"}lQ?V#Ddj8]JG'}lve:BJ\lG$2)a9.+Fz`9 8D*[,㐖zv5`$W=wZy'35,HK!#H$xDQ9%HK!x|p$jEA6x7y%5&C>D)aqGI@3{(!'"VdP1Bʜ, ;i1㪉|Ieu;(`;KڤbaPJhC׶#kyR^yVYS"ō6')ہvO16%rĦ3`󱴣;¼K0u$'c AW:mN-p|5;(*dn{ʨ"0l
+ڑV(&z 7ZJ`؜@|n?G-*/XJ`Rqz<TE ˨JdM5JJh؜@lf=S -#6<0ء wݓ(HN0 8=NC%"FK;Ɛ%W͍XvnQE bXt
+nC*:*fk"Q܈-̙ܰw0 XF|?v4JU#F8Gn<̤LX;t"aGK;1Ǩ%_M8h(.c;b/iHofsP=JJx؜|zAQT0/ѣ
+Pр$@zM
+bIˆ}Yn m?0`(Ҋb}᪛ 3ZkYrÜwJ!tS4S?̇BWbW;cN P[ŀWnZhQҎ1^UBα (eN\3Tex(8@u\'+ 6.b앜)+Fx9SEZ
+@J<1iSC)?{ 6y K񭮊by 9%R(iG1窉aC`ST"FY`aV
+r/`#3fKxE
+Yb"E#5jiHQ| @j)xx,k#A\axueN-pC\53RcljJS_eQq
+OŌgdZ@ҊA&kwd$3rd)G$[:cbO5|OL@"B[,1)%)S4F2=/=FBxJ~(fX<Wi>+Qs]Wh"D KdI)%Y"V#%4G? .k4EV6)*-&`bRQ*8}^Px)DV_[đ* L))bs^2<)Yu-,!4? O0Py?K J mRdALĤ0 dZUpX#ࢵO*Z}E@.1)%*qTTJ>lJ~|YJ GZ6K)MhA)'5z=Yyt.1+TT{CQLїPa\A<a7S<
+Ũ#mSẊ:i6!#L`2E{%|Q)|f[w 1<WS;+4k Z[EtU-c>ob:?a[
+kIO>ڊaH|3wd }XMk/ݫAq֫ؾX>o0HfRă7km.C}!{4>x@~J,ABL! lϑJ\u9vQB\+v>c,l6î<F{ :_>Q̏|ﮑRYM2%G0*Sh1[:M#g/1Q(I^vvBqq91U
+ C(ؓ?=]<,nsZsgzW w}3s'8acxӞ`Q8V'*96t??.__X-N|@~5Lj
+hS
+-x\K]}J_ ;KntRÁ-5(/Ku
endstream
endobj
-735 0 obj
-<< /Type /Page /Contents 736 0 R /Resources 734 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 705 0 R >>
-endobj
-737 0 obj
-<< /D [ 735 0 R /XYZ 78.37 808.885 null ] >>
+743 0 obj
+<< /Type /Page /Contents 744 0 R /Resources 742 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 706 0 R >>
endobj
-217 0 obj
-<< /D [ 735 0 R /XYZ 79.37 629.659 null ] >>
+745 0 obj
+<< /D [ 743 0 R /XYZ 78.37 808.885 null ] >>
endobj
221 0 obj
-<< /D [ 735 0 R /XYZ 79.37 459.482 null ] >>
+<< /D [ 743 0 R /XYZ 79.37 629.659 null ] >>
endobj
225 0 obj
-<< /D [ 735 0 R /XYZ 79.37 275.636 null ] >>
+<< /D [ 743 0 R /XYZ 79.37 459.482 null ] >>
endobj
-734 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 384 0 R /F15 381 0 R /F69 402 0 R /F23 379 0 R /F67 389 0 R /F70 403 0 R /F55 383 0 R /F29 375 0 R /F51 380 0 R /F52 376 0 R /F20 382 0 R /F26 404 0 R >> /ProcSet [ /PDF /Text ] >>
+229 0 obj
+<< /D [ 743 0 R /XYZ 79.37 275.636 null ] >>
endobj
-741 0 obj
-<< /Filter /FlateDecode /Length 4819 >>
+742 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 388 0 R /F15 385 0 R /F69 406 0 R /F23 383 0 R /F67 393 0 R /F70 407 0 R /F55 387 0 R /F29 379 0 R /F51 384 0 R /F52 380 0 R /F20 386 0 R /F26 408 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+749 0 obj
+<< /Filter /FlateDecode /Length 4818 >>
stream
x]Ko$WF04`Ʋ 8,7'x*fwGZI1|HW,_9tBoh~xգv c)w [#,F3B5[>~Z~xG
>~JS>/(x¯ T^Ë} 1KHHGvA!,GGZ(fGK 9{n᳸V%a LX@%/Pgā;PU{n᳉PΨٷoĦGpˈƺ'
}ذT/]]? !<k#/< 1$(
-)tHDaDA;AmbZ_g!rQq\v Aηs57:o&(0j{i> udϣp3,ZU5ibKLk|{ԀvP5*hj}y2gȋ]eqV7{9O@pTDhqa߄%bbc|K^6rTDBīuTN*w~DZ]>gDmg7W'˧(k?Ǟ{AE}x
-L?z2e8R-_NIA1%q$R@~A E"ں '/J
-. 1zݯ `v@!
-wra)ɈlA[N?K2j'!;4rlN7FQ<IݪѐeG|WejƂ7I`
-S*PQhYL@P8V _U`f&;5^S
-ot̞BζU(VU)\Uxԇ\etr0ri8nW'b1'`Q
-)&6­+0,YQ7k&*?Dkb{+<]lL/gƮo t )0򨡴)\$HtD0$nLßL_FMo',Oi:?8gQ?{p
-qll
-04ndBMƥ-o',MaOqYZ!?htc@:MEwcN_: (%s?#\w˟]L"}?MW-u^zcM vAl1АR~hspj =sLyI!zd1iNa=8h.U=c(#02UUHOa]a7SځxiiQ:GoeH1H8.vSjE)e l;&A\:Ѵ,vLI{65"(#(pQ;C%T2Wl68Je=僚&QÃ^GO4lI
-T%,D"T5ah_X0ʁ^r
-%`olEqRL.$=*eg?/iAAI/=HOe
-ɗ~Q"CM[NU˕Tw~eajMex0ni}XJ8ބczR?![鏜Z9~ɡ-5c!uHIO_iiEN4!%
-S\YF9<~n9 p>y^Gd\䍞We̞
-ƭʶZYEe<0}|~UQSf#th#Jk:In|b%jAH/F>|JSF>cL0,Y}L=#;q&fyLdd[ߑ ,R`i_34$}= @es6xxҫ>5A(m5f9/tGpnذD3ӦڤvE&>dOq2FλLooz.K
- v 
-١@ νώo
-LϝN ;
--$[QB\&Cj2=E͘nW'k:cagJvZp = = +<!NwxʔPz ѣ>Bqiܻ9:]]A4Ĺ3J%q6Z~97V)~GVg3=.} <B s'xWx}Q?- &eC+裝{+lA3^/ Pȯ=``b(ZN*z>D$7YC ]C;}b&Ttz!B=V7鲞53C(TEb<e?@lSlCz+9w;
+;!]vuaq.ߏb8EcTn|=Els9'dW9BIהӾMh7lΫ?hC4s?u=J2DGkɪWפ}-1mPAy.O
+~(_헟.:hƯF~b{e*g *h3ʰJV|qeb8&Kǔ H}߆wl6Dhȟ7+)h0Ow.8*h?݇$#β"m9
+z?lZd/E&vëOKȨn,rs
+_R ;EKKK?;D$FtFCVgYa\&/]F $u@XlU
+1:VXUasUERrr5ӑT8MD^ItŜ8.ZjTv2JG*PvT~jìnfG<
+?Oxve{M<v3F01X5F@
+Rȣr&f> Z@[)J{KÐT~1i35~u6񿝰4?> LBddl8qGXW)' ){CДs~i
+|
+5x{4=ř
+; JgBLj
+dDb Rȣex6y&i}jN:!Q8T/(=^tp-v3˟4]QCyuΏ5% ń3W@CKIYJ©Y,t@\1%'r8ۓYǤ9)ܶUjTqTmv?Wzxr#=IG :vNajey]D;*JxG;EIe#"{Dև< O D<#5xit"pvDB53% Hb$S⢘E iFP^mZ!cP|(Qbfj*F hx?ѰzG$)S iԋP ׄ[}Wb(z $A
+l`G@1 #('\$EESiQWۦ&½60ʳm$b@~1OB0)
+&Ɲa)J0bcA(P f8
+9
+RFC8' vЏg0Q<IX(bVBIn3=
+G[Gjw[ap}[!_0ӷZUV?nW/5荴''vIW%Ԛ<
+\R7Եf
+滜Y}jDs\$ju2\k Aژ (JZћ5an\_.ѵ{n3,K4K `eM"}ש'Wګ 76ݑp14%pmAؗ+
+[kDgrzUR>CG|k+r&IBUG[UF0ȇZʹyOerLMuҡy)gN!pE,gb0<{كz:s7z^A>1{^cl++jlf
+m@ZVEL|(I B&̓
+ lqAC#sg4CC*]Oz16[0z;g]1XӏSlpƙ>z?2em~G2bK}caH7"
+~(:?7CM'P;??? B3@
+a
+0{~(g97<Ÿ;
+?;
+]e(0?wS;7>2@+ xԻWP` P;bىgKNJ0h*LrX* nڃB("nsA/N"gHг*wf{g<L,AM >gɉS̡1m@_d3ڴυM" 
+OE>w8&%}7^qDc71%EZ.sنt1Y68EuR٘2%UZ%ߘymY^ .jk(S#le~/3kBΟT%H3Q+KGXf4v~6=3K S$c7M|vpN&R/ ½(`绿ēlE sEL2du7cz:-_鞨錕Ξ+iM%34 Ds?:ݕ)SB-D8-qZvuAz+\h]Xa[}7H 1\퇟_#<Du0K7qvuYx@{5n{.`WC!)j]_;]U>ğzdY1w ~B7R|P Xݤz.V h&Smn'$M:֡Q<d[򻹞#{;
endstream
endobj
-740 0 obj
-<< /Type /Page /Contents 741 0 R /Resources 739 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 705 0 R /Annots 744 0 R >>
+748 0 obj
+<< /Type /Page /Contents 749 0 R /Resources 747 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 706 0 R /Annots 752 0 R >>
endobj
-744 0 obj
-[ 738 0 R ]
+752 0 obj
+[ 746 0 R ]
endobj
-738 0 obj
+746 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 240.709 67.03 251.166 78.65 ]/A << /S /GoTo /D (section.7) >> >>
endobj
-742 0 obj
-<< /D [ 740 0 R /XYZ 78.37 808.885 null ] >>
-endobj
-229 0 obj
-<< /D [ 740 0 R /XYZ 79.37 771.024 null ] >>
+750 0 obj
+<< /D [ 748 0 R /XYZ 78.37 808.885 null ] >>
endobj
233 0 obj
-<< /D [ 740 0 R /XYZ 79.37 326.887 null ] >>
+<< /D [ 748 0 R /XYZ 79.37 771.024 null ] >>
endobj
-739 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 402 0 R /F15 381 0 R /F55 383 0 R /F56 384 0 R /F58 386 0 R /F23 379 0 R /F20 382 0 R /F29 375 0 R /F52 376 0 R /F41 377 0 R /F51 380 0 R /F53 645 0 R /F42 378 0 R /F43 743 0 R /F57 385 0 R /F45 390 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
+237 0 obj
+<< /D [ 748 0 R /XYZ 79.37 326.887 null ] >>
endobj
-752 0 obj
-<< /Filter /FlateDecode /Length 4623 >>
-stream
-x]KWQ: $/lGI9|arNx^Uj ZJ$|@% ~Ǎ~xw{UӠ=7q3Is3Z0Ϸ??sss>߆_>x 5%en`}Ҽ+}`wL@;UNa>"F
-ʹwz/0Nf؞[Ay'\ /rAP Jyd%M%v}>Yk 8x5`9aSdL̳sB2)l;}j"M,#n^~|9isd>1!bJ4bzψeZM4= șT- H ؿ'dv0gY& ̄e.sؐJd 3;fF˱9N*29Շ
-0gU L{?!v~#xp}y+iN͊yxΩۥ~ViOc&
-7Mm %K@>_x"I$-lU
-T
-Q/5EA+&"q\NG˻2ea7'7ֿ+h6vΒ<B}AG[ VAsqC9"j9HqBxy2[ODlӬ\lF -0̸eBjZ{+:RWЖ0˞?Ij;~,Ŷk40^ts/N%=KHwp- Du%Oh'߷}_:>?v^{4;"hM/Cm)S Ц} I<}ۖǥE74 3G3[}gqbml;F0ޚpbNU#oZd)e5/笕6}2}-m6kj~U[Xce6vfOJf~i5_- s0&Y`dߟo5'ɳh ~jxygH͸MleDݫpӬZfɻ;æI/i?ɧUJQn!Q_n0rq鬺ݿn~mkI欸=Y&z#A~K?|'~ߝ7LgjNޫ-ԉ8(fh繀? BYK&,<&#X>Sq+}5Qz
+747 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 406 0 R /F15 385 0 R /F55 387 0 R /F56 388 0 R /F58 390 0 R /F23 383 0 R /F20 386 0 R /F29 379 0 R /F52 380 0 R /F41 381 0 R /F51 384 0 R /F53 653 0 R /F42 382 0 R /F43 751 0 R /F57 389 0 R /F45 394 0 R /F40 395 0 R /F59 397 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+760 0 obj
+<< /Filter /FlateDecode /Length 4626 >>
+stream
+x]KWQ: $/lGI9|arNx^Uj 3ݕH 2J~1A zoff`\o~4#+ _>x 5%en`Υy7ѧWOsOC1 @UT;9;*>\?}(pt<*y|jW
+} CvY$hf6M?N<t¾0vڀ&;_Ⳡ ^.u?<IT~dD嵌u+:&ތw5'ٶoU
+G zn˥ތRv&LY9HgET'o|~eB6ˡJ&0:ѱ.`V۞Kv<„Br `JUZ&&8x^fYyJ}~ "ex,>"Bu3B0@%hĂ#czqȐwnlVв_Ӷ{g2d X`Ogp• |"T % GV[XiպրWL{ %g7dGIaS9obu[-}I  S{F,nJql@Τr}oa@J0m81$k93PJ6Aul@`&t/sdžT"$%kQ03]ٜuRA'Q`>xt]| #X"\ _ENJ̝cĖq
+RF*H>UBZrܺ{bIB'?ƚgg5jiYykjV6+tE`Zn dU&Ulglig[>=.84(WtJ 3nf(m%Fq(\j[ EMR<^)!D*SD@ijCQ$ ~hts:@NZHXz $+S{8D͸;g_$L+cƆOh0]:3nX)5soHf(8T? e (Z
+0gU L{?!v4Spp}y+iN͊yxΩۥ~ViOc&
+7Mm %K@>_x"I$-lU
+Q/5EA+&"q\NG K<xpJAs_S4;gkE!T>V #歆dŠԹ
}mYZe0k(hZK cl'ւcݑ[%3u->]t]>Q›3ln_ZפOԵ X/K[Uc5[NClew'#k՟gF|%o5P K1ֳzt, Dj@lK>j
B7rdf%`E(Bx]߉7OXZL0hp ն1Rr:7]7{>c[xO.dA/[ZtÚ4;}uV ORY'ꛅ3޹:1qML(D;"T;/0W2xVڐoMƨ8})p8(ܫ0}1W
- m}qmațk?(ϮrL Ʃ_8Q)4 Vh6/יLV8B=㗿Fj`K؞o|p1GY'"`v3<Zy+CSߝÙKSxιass-g^;jribG)n7hH7UUc&{!fݿϕ Mk{m~Lhc/ɧ8ܣmvd"v2 <6^sA@krчK:glT?=6K#
+ m}qmațk?(ϮrL Ʃ_8Q)4 Vh6/יLV8B=㗿Fj`K؞o|p1GY'"`v3<Zy+CSߝÙMSxιass-g^;jribG)n7hH7UUc&{!fݿϕ Mk{m~Lhc/ɧ8ܣivd"v2 <6^sA@krчK:glT?=6K#
+'eznvIvU~wu]偶uWɥ~mf0p/WRjva"{B_7SvFڇteŹ)Q znKXqcyS(z.U# )`
endstream
endobj
-751 0 obj
-<< /Type /Page /Contents 752 0 R /Resources 750 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 705 0 R /Annots 755 0 R >>
+759 0 obj
+<< /Type /Page /Contents 760 0 R /Resources 758 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 706 0 R /Annots 763 0 R >>
endobj
-755 0 obj
-[ 745 0 R 746 0 R 747 0 R 748 0 R 749 0 R ]
+763 0 obj
+[ 753 0 R 754 0 R 755 0 R 756 0 R 757 0 R ]
endobj
-745 0 obj
+753 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 173.089 598.172 185.044 610.127 ]/A << /S /GoTo /D (section.11) >> >>
endobj
-746 0 obj
+754 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 200.765 598.172 212.72 610.127 ]/A << /S /GoTo /D (section.11) >> >>
endobj
-747 0 obj
+755 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 199.48 483.111 211.435 495.066 ]/A << /S /GoTo /D (subsection.6.2) >> >>
endobj
-748 0 obj
+756 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 350.719 483.111 362.675 495.066 ]/A << /S /GoTo /D (section.12) >> >>
endobj
-749 0 obj
+757 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 312.828 471.156 324.783 483.111 ]/A << /S /GoTo /D (section.9) >> >>
endobj
-753 0 obj
-<< /D [ 751 0 R /XYZ 78.37 808.885 null ] >>
+761 0 obj
+<< /D [ 759 0 R /XYZ 78.37 808.885 null ] >>
endobj
-237 0 obj
-<< /D [ 751 0 R /XYZ 79.37 579.845 null ] >>
+241 0 obj
+<< /D [ 759 0 R /XYZ 79.37 579.845 null ] >>
endobj
-750 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 384 0 R /F15 381 0 R /F55 383 0 R /F20 382 0 R /F23 379 0 R /F69 402 0 R /F58 386 0 R /F29 375 0 R /F86 754 0 R /F51 380 0 R /F52 376 0 R /F45 390 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
+758 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 388 0 R /F15 385 0 R /F55 387 0 R /F20 386 0 R /F23 383 0 R /F69 406 0 R /F58 390 0 R /F29 379 0 R /F86 762 0 R /F51 384 0 R /F52 380 0 R /F45 394 0 R /F40 395 0 R /F59 397 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-761 0 obj
-<< /Filter /FlateDecode /Length 4674 >>
-stream
-xɒ\U[ՔRjUIn' F$
-O8>E8|0 p!=_3|,3o !nH Lq46=00{fpa
-asG^BTo}J2!!o Lq)n{ZpVY)'*/*嘄/)\؛LY[Sg  3.^*]4N< ~W@ ~1mT!+ 7-Ί¯T| a3! (DHBd TX+`  ۚqk<<%t
-&IQV(*u fV02v9uNj"B3ɶاb Z!VpqEV);hzBϫ{Z=Z^؉[J܍bSHvx<k-;-YXNbšt%[ը68lÒoL'HgV*dnb$zf-1=l6 ͪÓj&T"j#M>j*rmSO-7Yq^5y&Ѽ8=QRcl8'(nd,[pH?xc h3(s~ _TG,!Y#Ҽ1N 7 M|JkUsZkP| [xvL&g@ǴIS
-vu g"_1xF4^JXqK\Hy/ջK;y:ytiܠxB(򉺜~KUEsD$X)2xkiʳD6ߍ KJC
-xǀ?1`P^0Ǿ7iˏ*mW4fYjeFe#mqiS  r
-cz" +*w(zQ?XYq;
-E}+ v3c8sjW)rN3m?vݢ  BNXmR#&֝2Q 6G^rD%5~vEdTzrT%$0c4PtB%NZ.!rkB\w,8jdۃW ?!,5dJ6u'5x$~O3pp=#̫Jy%SH}@>-Ncm~vb*@ԹkY%hnC`ו+nVNpϠ@x69vi'UBHF_㷒Q
-S%nM
-HqԭR'ۉCNSϣ wN;ɣ'ɒi/Ȳ%EZ3;y׻~'nzJhǼ4{2O_c.ƙij7 4+fh[BO5b۲p
-̍8J5}Db!P1"1[\ish-Eb/dsRxMU
-%Js㵞e Olg7'=vI_3[T"qPT"ne]J,s<z4|Vv墓 qwNj<?fJv/ +.?@å+?P. ТP 0PM"9Y`tMnQ#K9PjX/9GIS;q䄁'2vt"D:&
-\Kd%^-,׏swELY@TO
-h0+2x
-yø㬸0T?LJ{T
-+![IF]GzyziGmb@_.Bin[Q3sm^JKwl/ãq&slk_H Ģ;my
-M_2<ݗHD9ų Qֺ3JV#Qid/|vEەl10sJf"ù|X|s?D+oҴG:4jZX́-h:0"#rOzZQ['M|Ǭ=?{=73ıTzP/'xaikԎYĿ8e6ֺ
-nxs{p7&:J@a{AN\*@ݩlP~a>7aNsFvB
- ?#!awaO!H͉T F0arTׯ)*~<jQ aD oS:.r\IJ@6:&fdr ًfMr
-?5ڻwUIX&b b&_ JMX{C^8=#G6MU%QMo9s6
+769 0 obj
+<< /Filter /FlateDecode /Length 4592 >>
+stream
+xɎd>_QGPc5m9M27LJA|H&CSzz[͒H$._~w/_`^ka/BE\g^qyZr<v[W'fҌMꪬ'`^)pnM}p&apB;B\| ϼ&
+|ad3.MHGP D+PJf fe+;D{T螄/o BaW}ņ,Ņ̼tz#Tsů;U 6/H!'Xin ΦeJe<SK SU,O}@Y^==N5iDꤾfV?{e+n
+%PV(u fV(:v%Eΐx6D!hfwm?xuUHj\gln*::%:>`K[euOG+qKVQjJ{eeքm,.i皟Qy/UPjs,q,T|"JtL!sS%3/n) gn8V<y),0ѩ vHQn6msTQB)FȼkBHS}m; 9$`]j<[5bde$!+u2(&I,9{u~ыʨ5NVG<o>M`r^噐MjW/̵6EWmg4I˄0mΏY-go+3 1RawM2\w8N_}yˋ: )o$5s~iW!JШhC%a/W-ϑ@c<
+Bv,T\@Gq%4
+cz" +* Q 3ң,vZ6w"ؕV8H:̩ao^^9ͬu2p4(9ץ8$OoGAQ@3w ^=B/^ϕ,&A =J$7m{Ð&!p(;JG'L=^d\w"8dۃg?acykȔm#N N3\D\O+ sz
+/5ji9隵,R ϊV0SYZun">)
+s#'=[Uq/>쑅(0!gwķDy8" +FBF3ь Ú1]- ^Jk=ӺM%m(=O%hRo$CJvb6`ىGZj4,K&'7HCjOR+&q+x<F~̔*W6OJp>T
+0i;oW^ .B
+B/srǔ5i|In$
+y@ø㢸0)a~u
+~*8:J]P6DQN(iQt
+d;O*
+~ ؽ7# 4Lʪ#z6e$ެ@>#K>e,Jd"S!_٪DKY;I
+>Q뿵vhH3=:GlR*q^6>h;Ùb<kMV!=\s (De%iEYos[۱E b GJel<wנ~".Yc^_y
+Swo<t!Sa Ů۷1t:@N;_Kq5K%H.P d&e+R1c=R2Z9Z-J`nu= P:>bh) -fO$\y jM`5:ZcO$IjXj-c=K|(;oG<O`uV-PZJv,/,<1cKL@>P`lvɦ\w2JK$e^qT5EbE9zh2*U/ `[ySJ~ùoW*>M@i*MKQs̒\kY
+Wr!s˶9
+L9 "W]d/`Ddxk ss2p=Pr!h!cuJ
+DYhe Zuş>oL-\S9N4@.IGǗ8o|bH<mY
+7zy/^zļn<hqiװ#/Bqv~-
endstream
endobj
-760 0 obj
-<< /Type /Page /Contents 761 0 R /Resources 759 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 705 0 R /Annots 763 0 R >>
-endobj
-763 0 obj
-[ 756 0 R 757 0 R ]
+768 0 obj
+<< /Type /Page /Contents 769 0 R /Resources 767 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 706 0 R /Annots 771 0 R >>
endobj
-756 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 448.589 386.19 460.544 398.145 ]/A << /S /GoTo /D (subsection.12.2) >> >>
+771 0 obj
+[ 764 0 R 765 0 R ]
endobj
-757 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 456.974 374.235 468.929 386.19 ]/A << /S /GoTo /D (section.11) >> >>
+764 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 448.589 386.54 460.544 398.496 ]/A << /S /GoTo /D (subsection.12.2) >> >>
endobj
-762 0 obj
-<< /D [ 760 0 R /XYZ 78.37 808.885 null ] >>
+765 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 456.974 374.585 468.929 386.54 ]/A << /S /GoTo /D (section.11) >> >>
endobj
-241 0 obj
-<< /D [ 760 0 R /XYZ 79.37 771.024 null ] >>
+770 0 obj
+<< /D [ 768 0 R /XYZ 78.37 808.885 null ] >>
endobj
245 0 obj
-<< /D [ 760 0 R /XYZ 79.37 505.243 null ] >>
+<< /D [ 768 0 R /XYZ 79.37 771.024 null ] >>
endobj
249 0 obj
-<< /D [ 760 0 R /XYZ 79.37 356.374 null ] >>
+<< /D [ 768 0 R /XYZ 79.37 505.906 null ] >>
endobj
253 0 obj
-<< /D [ 760 0 R /XYZ 79.37 187.266 null ] >>
+<< /D [ 768 0 R /XYZ 79.37 356.658 null ] >>
endobj
-759 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 402 0 R /F15 381 0 R /F56 384 0 R /F55 383 0 R /F29 375 0 R /F23 379 0 R /F20 382 0 R /F58 386 0 R /F66 388 0 R /F45 390 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
+257 0 obj
+<< /D [ 768 0 R /XYZ 79.37 187.326 null ] >>
endobj
-770 0 obj
-<< /Filter /FlateDecode /Length 4865 >>
-stream
-x=Ɏ$:J4VM ; <7'{ǀN\ 2KFFC>TW&XYA/~-ۗ~PBG;%S/_ozR*)|z:}S?HiMԧ6!=_6PڥO?=O= 6Kj?Ba
-
-
-c-c&П+Etp?
-ro"!·*y_i,= "vY
-w3Gl{"$?rI;5JpB°!4W-ОW8ܱ&Qū0/7r!3zxൈZmfYd2o#`ؿq^-=
-S6QXX;ygܧ<-kWq[i s&FTWLk%'{]68 KhX o}k3"YGarj;h
-ueƌ2;G6D0+#%4ͱug"rrTyGmK ^hvsUكǷ-@s_Vqq0℻FWȭ4 q
-N7s#&J›`VSX fdP "[2:@㞚yA
-gg4eHK%8&Z@YݭW!o+=M1lQlYzCdF=
-,?y;'ivʌS1p<~B (Gcj3ojʘ+bWOle W Ebc
-K|l.:W.S@ ?r&iR᪤TWҮ_o$=C$$;~w*iFo[V[gTSIc_I~8 }kp㩤Ku9-߄c? v4`&<8&IN  U`~FFIGp.nuFF !1W\z/q>7<VL
-㒿% ~M<"iul'>ܒgѤlcуᤒBS.21.$YK'g[kGkom@ĞF}0 !?=SIͩ*mfMm_jkͪJ)$Qy]q XXGVN
--9/kA ࣩ~8Q>f-4wۂU]|(\X9^q<6kPOwr9=9{0\):̕}+))XOYe7yؓYUb.'fҘ zSذ3 4\aF0`ags^x _M4K2
- B_hV 'xK}Ial|jƑfVf9mRH<o֟›A>`ĊJ~ռC:sP~$
-ūy<_|7TF_$ߚx4pep}TcFI Öf@VK3`<ϐgP@X yzS4ЌcVh3hX`di<4נ<+<. hY ^ ~NWB{mwI zv<ڥZ^!DgwkY>aCq> W#q񨥜bRVj_6:ɓYΕ%Gareq'xe5.6̫mu¡dϽF;{K<j>WjåS)^w3ȫeugpwoJYȷh銁.~P~,'Mӵ[O&ϳ,LV3> -o_ rT?|.7£` R ț~cb@-dȫEˮ'ymX>)O'i?ywiYCK~ ʭOKjj2l_Ci;7Y "r:^uLjM
-4y
-FZtG} .̖wt40鶳f F3:7|\-KtݣhYOovvsM'k+
-?`/`٩M7͠Wl$'Z\DH\
+767 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 406 0 R /F15 385 0 R /F56 388 0 R /F55 387 0 R /F29 379 0 R /F23 383 0 R /F20 386 0 R /F58 390 0 R /F45 394 0 R /F40 395 0 R /F59 397 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+778 0 obj
+<< /Filter /FlateDecode /Length 4882 >>
+stream
+xnGίxGv
+]*#>gDX y^G+lHE"4( 5yV?$qMb(C
+&N6"l
+x,{YAӖ$qPÂqg w=N45OԚ6+t710k8A[yqՆ`Rw'۔ԝ%t>mkbn,U(Vlm|-NlPJ,c(՞3֦
+,Z<bG ms==w0k/.oϷGg/YIG&j5
+#daIBFE{m젳_@Dʉ]Ux~`c- cP\zEɯ#lhP[;ɼόcvG"R˲WyɽUK춥AW;)["[It\bѢ;GܛwcfJȴdZ~~wӞiF\*7m#3&{(2(+#,06Y߶l9\sw9ZHԄں+5rcw'Xvb>hn1pM,=PXhɭȹȀ'͍
+^c1pvqRO=B9sP y=9= vO<:hZ۵MlE8%-%)fFX<a0vF I]u3$Ǔn 8@j\)؏ӵ*6rw@LvSy:v4MQ%< <T6vc1f;ouʓZ$O><!~,Oh z,Uٝ1=$a](+9|R+eJ:f{p#wَ"0]RA
+k^
+ӍVj9ҕt乼ir ڏ
+bz^^$MJ\gᡥ.bUZ.F17tac*h\ vP3)^LrtiPf(%HzR-K΂۽'<~X z|D,o,%٫j4=r'*%ǗIw|^2aɛ`ob dRhL}N~I t0ZwS`2 vyr埑"I=:z )^H iP&'4ՆiNŸZw^5%Lsܼ0p;n ,$ͿfI&HZn}.@~v,<ëJ9PS#ۖ4:Rd+iC?J=j諤0p;RR
+K2 Ei(/[rD2e>PVFշF Kau!=adpԧRWHT늰@X1pmיf݁"UvK.Z^"TbJnאzyO̺jD~Fd+j΁f\\)9*/u9Ba9l
+vh\XxҒ8Rnꃀ0*FրFXfA^=bR*Ge]];k1OպnneukHw{ta%,)[>x
endstream
endobj
-769 0 obj
-<< /Type /Page /Contents 770 0 R /Resources 768 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 705 0 R /Annots 772 0 R >>
+777 0 obj
+<< /Type /Page /Contents 778 0 R /Resources 776 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 706 0 R /Annots 780 0 R >>
endobj
-772 0 obj
-[ 758 0 R 764 0 R 765 0 R 766 0 R 767 0 R ]
+780 0 obj
+[ 766 0 R 772 0 R 773 0 R 774 0 R 775 0 R ]
endobj
-758 0 obj
+766 0 obj
<< /Type /Annot /Border[0 0 1]/H/I/C[0 1 1] /Rect [ 226.429 757.783 427.176 769.081 ]
/Subtype/Link/A<</Type/Action/S/URI/URI(tex.stackexchange.com/questions/488566)>>
>>
endobj
-764 0 obj
+772 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 192.498 86.351 202.955 97.808 ]/A << /S /GoTo /D (section.10) >> >>
endobj
-765 0 obj
+773 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 373.619 86.351 384.076 97.808 ]/A << /S /GoTo /D (subsubsection.5.3.3) >> >>
endobj
-766 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 219.883 67.03 226.108 78.716 ]/A << /S /GoTo /D (section.9) >> >>
-endobj
-767 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 239.163 67.03 249.62 78.716 ]/A << /S /GoTo /D (section.9) >> >>
+774 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 219.883 67.03 226.108 78.65 ]/A << /S /GoTo /D (section.9) >> >>
endobj
-771 0 obj
-<< /D [ 769 0 R /XYZ 78.37 808.885 null ] >>
+775 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 239.163 67.03 249.62 78.65 ]/A << /S /GoTo /D (section.9) >> >>
endobj
-257 0 obj
-<< /D [ 769 0 R /XYZ 79.37 731.106 null ] >>
+779 0 obj
+<< /D [ 777 0 R /XYZ 78.37 808.885 null ] >>
endobj
261 0 obj
-<< /D [ 769 0 R /XYZ 79.37 691.611 null ] >>
+<< /D [ 777 0 R /XYZ 79.37 731.098 null ] >>
endobj
-768 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F56 384 0 R /F69 402 0 R /F55 383 0 R /F58 386 0 R /F66 388 0 R /F23 379 0 R /F65 387 0 R /F67 389 0 R /F29 375 0 R /F20 382 0 R /F45 390 0 R /F40 391 0 R /F46 392 0 R /F71 415 0 R >> /ProcSet [ /PDF /Text ] >>
+265 0 obj
+<< /D [ 777 0 R /XYZ 79.37 691.603 null ] >>
endobj
-778 0 obj
-<< /Filter /FlateDecode /Length 3984 >>
-stream
-xˎ$>_QA+l{{ rH8K~?ԃztxsn(HJZc7/~C%/
-;wJH?.~(}iR~Z&P>V}w!̽Ac7RЦ`vhx(4(S)˹׽qQ(9YA3JX8[mi0'3SmÇ|#*
-#
-ʰ|˿4ol/R_˧Zn@8><B
-2Jj"}y~ItG8ÿR.&Q8^(g 4g5KD>T.7%
- NL@mȭ Sp*En aBlŪo
-x5ąR᪊P
-8aKAEYåQ!=3=Y
-nh@1߻PBϹ
-|΅v? q*IM%.Ko:A# z 剷/w#3ta܍ &w
-PYTQN-bei]-Lr 퇊2DSK*y*꽱 V+J_U]S-Y7Y50+k[$f8lp.CI ^hCFa+M%vn/<qh4`  c0uT#
-++H;-"<qVͩ5%x'RM8C࿆bhr^հ۪#gd[`UI@z$1:K.ji(1NU(/M1ͳYZ) Oul0{Zƒ!UmhE
-NXeg,Ōe'`aw}19sl #dr2ºmTbd#}GEc굆+},s{Ϛ18QURu6P>K[`
-9sNZ{]R}7XE})旌z힭x
-l +*!blkCPhYe +y_Tp-D>q˽'SoYǝqږuǮZGYeu5Q7'[S0S+a'R fĀ2m%rd
-]54ǝGTΛ~&N3t\f&b*<"eA
+776 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 385 0 R /F56 388 0 R /F69 406 0 R /F55 387 0 R /F58 390 0 R /F66 392 0 R /F23 383 0 R /F65 391 0 R /F67 393 0 R /F29 379 0 R /F20 386 0 R /F45 394 0 R /F40 395 0 R /F46 396 0 R /F71 419 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+786 0 obj
+<< /Filter /FlateDecode /Length 3985 >>
+stream
+xˮd9m,AB⼥]s`բw y8qruΝY [؎c;$-,rEֿ/}(D8|Ea\~N ϯR75rQJPRǪN77hlFJ mp*e92<
+%'+?4~ <vvV gr5;MX{&dfm@@R
+]ky4<#bP-45~ۇGH?[FIrB޿//-Q1h'}/?,ebZyFAoJ@p_d )oKJZZkKr/Z,@Tن
+;OKoQ6
+&(QQQC\8+i(
+ v @:uާ#-UT/h' 1;X5\E[Q4
+WVpCѠ ޅB
+~΅Vs.S ]%.UO
+l>/wy{ш ڜonۨWM(O xQv7 n{M%وs7/ݜ9sZw3IL ;+
+}N^yq]\B!B8T3%\P0T.^@ic> a 3)fn̆Ր 7 aFrf凡7Sv)sSc3i4&?vA0篑:Q!m6%0?2}I~0z T]ceTq@=sFrG'$JHYBDH{z% cSRJܤՎtj+NMTj f v hh?TI-W'ZRSQM[u(U­Fhj!ͺ 7βY9^"1aÇu"Lb€G2 w^9l(u{CscwXIHVX9^Aiq䉃<jN}q/[8Aj
+bZ-BK!0dklūV`[XQ e]k$D;j-lnXWj_n!Jeoٌ;<e^?z;8жĭ;v:H
+/ۯq*7<Ҍ5Jz] {<X0c  l+#PzqT(ܠ?4?*r̴0iGu`23SG( 0 R_P*\`輶„ i̠S-4Ggب/s|>kgw{irZm0k_/1'Q~߈،AxB~&[><) `J&&Mۺ1
+t!o*;&zJA5rY2jzҚ`t t* WI
ekزSUVsLZ?H5$|м~֩Vi+A∬Uъ*wK8+UuximꍰBf@w*L}6w.]<{~
-e϶1ȧ[,>^~0_wкPv)'Tѩ|^KױJErGD^NJ݌z)/KiY=R u[W5g
+e϶1ȧ[,>^~0_wкPv)'Tѩ|^KױJErGD^NJ݌z)/KiY=R u[W5g
լ^Q E[FiQC\^LzID9
-<\ûPUD3нڪm-vVR+Y+ܛ<+Җᮮ $`%UBª܋%oBu?%<J>OH(I.ssKhj=\utD~aHNJMg$LD:+(bwÈ} 5s'hq< 3̹]̍ }:rj^46Ϯױ.e(V.
-/jt?cF C%0QG1\hKag2NSk9P*["DYM=lAXftpcx6|a]ƙp-Lf#A~:O7{\aF9!
+<\ûPUD3нڪm-vVR+Y+ܛ<+Җᮮ $`%UBª܋%oBu?%<J>OH(I.ssKhj=\utH~aHNJMg$LD:+(bwÈ} 5s'hq< 3̹]̍ }:rj^46Ϯױ.e(V.
+/jt?cF C%0QG1\hKag2NSk9P*["DYM=lAXftpcx6|e]ƙp-Lf#A~:O7{\aF
+9!
[0S$(yU>UӢr'\Ȱv6 +n=k(V-cnohx
-0~['Y*\ É*=r/3lZZ?УOwfʃRRRl] Nmڨ%lWLmMbֲo+JZR1oVg57vC%)V,|BS~%mQbޱwi}zvV3ֳ# 0cXXsXxtţ~zȃ囅=WZֵuof.y,]q.I%9;6ʸIbM'dRZ ${Y7ֽ"B<b\_01Փ
-kzd r1r_E7*ہµFy]duuDE ޮ!^
+0~['Y*\ É*=r/3lZZ?УOwfʃRRRl] Nmڨ%lWLmMbֲo+JWZR1oVg57vC%)V,|BS~%mQbޱwi}zvV3ֳ# 0cXXsXxtţ~zȃ囅=WZֵuof.y,]q.I%9;6ʸIbM'dRZ ${Y7ֽ"B<b\_01Փ
+kzd r1r_E7*ہµFy]duuDE ޮ!^
oz9Ն8@.l gTV0=qDZP }k0=%1B Aa%.LSRXU`MP\$fT0<7ZFmRPq{Pʤ.aA ^_}$[K}UQX3囊 dBO`Sqx] |4LLO
T~rчǬG 0:/A
-̓Nдz~Vn@wvPXڱ&|SÅ;SI;cd7-LwU- 3Z}Ź_>;7w"Mv(w^na[љLu>Nò9%\r;;+!]e?G$iJOwo sv8J47pM * =u)w7VMm|xދ-sO4SVli~+{ kPh`vDe
-)*#['$U*晇7&Tڊ|YapxyzgWY
-QJ
-B:j5l M| Y]Ձ2վ}#sMUy
+̓Nдz~Vn@wvPXڱ&|SÅ;SI;cd7-LwU- 3Z}ù_>;7w"Mv(w^na[љLu>Nò9%\r;;+!]e?G$iJOwo sv8J47pM * =u)w7VMm|xދ-sO4SVli~+{ kPh`vDe
+I0U"3oFM83ή2 m +tZ+k8]Jj銑9j};7V
endstream
endobj
-777 0 obj
-<< /Type /Page /Contents 778 0 R /Resources 776 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 705 0 R /Annots 780 0 R >>
+785 0 obj
+<< /Type /Page /Contents 786 0 R /Resources 784 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 788 0 R /Annots 789 0 R >>
endobj
-780 0 obj
-[ 773 0 R 774 0 R 775 0 R ]
+789 0 obj
+[ 781 0 R 782 0 R 783 0 R ]
endobj
-773 0 obj
+781 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 248.048 509.115 272.735 520.064 ]/A << /S /GoTo /D (subsection.18.10) >> >>
endobj
-774 0 obj
+782 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 288.456 509.115 300.411 520.064 ]/A << /S /GoTo /D (subsection.18.10) >> >>
endobj
-775 0 obj
+783 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 136.765 107.237 148.72 119.193 ]/A << /S /GoTo /D (subsection.15.3) >> >>
endobj
-779 0 obj
-<< /D [ 777 0 R /XYZ 78.37 808.885 null ] >>
-endobj
-265 0 obj
-<< /D [ 777 0 R /XYZ 79.37 496.156 null ] >>
+787 0 obj
+<< /D [ 785 0 R /XYZ 78.37 808.885 null ] >>
endobj
269 0 obj
-<< /D [ 777 0 R /XYZ 79.37 403.681 null ] >>
+<< /D [ 785 0 R /XYZ 79.37 496.156 null ] >>
endobj
-776 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F29 375 0 R /F23 379 0 R /F20 382 0 R /F56 384 0 R /F66 388 0 R /F55 383 0 R /F69 402 0 R >> /ProcSet [ /PDF /Text ] >>
+273 0 obj
+<< /D [ 785 0 R /XYZ 79.37 403.681 null ] >>
endobj
784 0 obj
-<< /Filter /FlateDecode /Length 6971 >>
-stream
-x]KWea~
-{ηݸQ([t#(84jd/^LtiW#F
-DS;].yA۠q ڇ&Tp#Kd+)&rvh#"
-F\ 5AFٟS.>F&\N a
-nJ)Z^1a5=&^쓮=CBUB~:$eD
-qB݉2WK)0m h0AQ.
-y%}5bfKliD|}R8[؆aGvFrR
-ͻ.NKˠ[ .Ez(wBPϛ^qΔloO@c#J81bhP =Z,?E^߆ΈcA{~萼ֵJ+x1ILn^Im>2BGBhSM /E]+[J֗hٟǏ?U=%_ljדK>s؃?h??*U"uE QzjX쑸6ܙS1ϝékuE @)
-ЎvI3> I`XWC^Bܓ|k$ @B4„Į( NK  m&=wTf??k\ᄺU# Amr0Js#^ D]̃LʼnfzU
-R0G$-c>;B<ؒ䱁)c#[DŽijǖ$ Hkؼ{QMs?}d`I-8^!*,h&TX-.nSg,\>WbFzC)i(C)@HwWu䲨;9w/P\@weQ/6Bxᒙ,EKVRS<˒9Vb)T4ϑQn%@Zndkαrx{#%KdsȥQ}5VYQ(w]ٴ>7@w"'<7B_};dUX0'zP\RZe{{X]|);ܡ1 noc䍻궱;}YݤԴǶ[
-篓Xo`–cMy\72
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 385 0 R /F29 379 0 R /F23 383 0 R /F20 386 0 R /F56 388 0 R /F66 392 0 R /F55 387 0 R /F69 406 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+793 0 obj
+<< /Filter /FlateDecode /Length 6972 >>
+stream
+x]KWee~
+<Wߞ
+SGZv#)Q&+% uI(?Gd;VtFMTW-aty>c36r& w̟㓥B$ٶ"H+dy
+?KD_`ąTp0` 0O|xr!44rjU5D+*hubp4=&^쓮=CBUB~:$eD
+qB݅2Ws)0m| 43LqT %@<Vn
+<LrS%B^zNnM<0x$D*Ѻ8_VVy*t1;aؑc3)pibb^Er'-uy
+qORY P
+ L.8a/GsZko$ 7\;ޅR% @s VM@⎄!+!8{1|uE32'U)H=%Nڒd
+cKRRVdl
+1V[<6R<"%{c3=/S>[p.a_"CURY<,Ճ#[\4ܦZp\ !q(R#]Ցˢ0sx~Qܹۑˢ)^`6Bxᒙ,EKVRS<˒9Vb)T4ϑQn%@ZlX<B%cT4G.KXɪ`9U==ՑK4VqWuOe\Bk<h>([x\lߵ}ZJēVa kpzB<iBqIi='|ʼnŗc~qW6vvǺ;ˡ6vIݬzo=P>!n)-QeXPlC_*uq헝a;~ǎ0_hx`>\8`,wH
++2|K+7?u+ zH-e#?j2a|T8tz 'oZ;js!g=w<p8dX֐ 37D%9ʭN=LmrDǶs:}y4@6j"ROl߶7}3pL #w4tz Fe%L 4܉.I$}*3P/$IݝfI$$S!ﲗ2噏V#9d$=C䒃
+驇V$<CaABFBTW8^tO/g6lszԧў^#MJZzpz=5>-`l/)6}S^|A+^
S!y,KQ<˩⩣i\-YR}%y 8n)X:q>z ZN<(ǀ%XPYN^x
-%Kb)-a^#&WQu՚{UI4FNIC|/z۷{譄#,.'ǧީԱw &u9l݆d/u
-4+ny5CY&a*Ɲc)eǤ:JIOSw#7 _YdKTP*S{!}?&ZU<*|aIך`s޹cKp+<E[ý
-S(%seCJgNtK?a5NB>Fs>s/*yV`[ަ# D~BC+,S.c
-'6Zq}vZұ^Hg(e7DdX]:3I1/7v:V1"i/aXF&Xm c=)p}e;yDMyk#2
+%Kb)-a^#&WQu՞{UI4FNIC|/oN^{W0n~lqZ!mH຾n_w `awE
+B6$#AWN̷`Ţ %r&76ny#݆dd!~ٙo d<)bbHc!]8!=g~s72n~l=g~xmG۵8)P-2i%t}$pG-Gd UWܓ)O>RsO6.GsZةVDHJ8B7IFa98DM~m]G,#WFصGYg;i tv$'d“dh|QC* $3:qaO*Ь\Fd->5 fᛄXbw
+.Ꜧ+%
+?5NUH.TS4}euPW-QALHXSrhU2%]kVy/Ejt6m *N̅ u*:-07}u}_T4A:bhMGvKJ-P҅VY,\ƞ6.Ol/f{# c彐:Pn:3Ȱٻtfb_nj9h7 VtbDҌ_X4kT
+?aƯ*ǯ2"`)97/!]FDꊸůJ5wu"nV`91+KZYHՅu%H;jXS&iҕʍI!!`/Uʐ6"bX/{(f!@SX5k$XX#*QZ™<uEGBΑwM
+Rc\dAvcx%)c)c+RF2c+RΥT[R<HC*b)"D!BN-A"j~HvWs䲨:H#kHv$L^ Ê27%X
šŠ|OsW}B;fP
-5!}
-K-@
-Pu
-vvvnq۔\kֵ=c<fpX Za/ -푺_Ŝ?mF/?T?*ҶJ)w f }퐠#;9zRexrpn<s#7Ñ6
-%9<=3^6.G$EZͻkgTxs,~eZ3ZJ6PBg<Ł] ;ĕm~4D; ,_C(M0[}X]X}8۸a3J 98Dbm߾`a}{Ar1Ax#t}2WH\h[\'t3~w,+#\E]uFَ- EOpH;uFKpSܥ KaJViOkHXub.K\*4]\c2Pr.*(GR|1F/JIC[ǸӮz<$%yl xlEJȖ1A@,z<$%yl xlEJX+u;m|$rYvdqn#;#Ud&Fe]vd ڙ"3ZRNI#9Z.;c?Ewb;K\wb?,Ë!Lr&#n ߙSU'v8G.7 Y-
-w's}jatpW ]H5Jpԇ[a
-F?jxMݤ_V(݊O"B\_
-69&U0b'NgsAGO;C.7w{)`7z :]G/Db.^f ʧG/6OF#:zεk\ss9$ct&wO1i?t?Sb$Ҡ:h0>]&F%Z٫^~hGT'+z.ge8k 5Y?]?|}*f/|Є),k9t<3~hǻ?-s> k|k45"q͟qC_Ϸ~Z"K0Ϗoq!I͖y~z&μ? OM5pea/ß1[+4 $+IӻH< i 33Ru
-(k7\@+xs<a4SVO0,Bڧj\uJ~`gT(/Z nvKWάμ.Wx[Z5 K^[ɤsnW_.'wbz_$exבsC?ɯxWMr6buÊrõR]q77%`:zHo$w7!)B\BVq%m[ڻ8-`ϻv")АOnVt48n:\ͅj ls{c[U JOe.R/w4O(%Bu 6$jU^8r޽)OђZ@2W- a)%W!`ZnM3e4NoɗGj,_Gz.RK'<s[^O7Ցd];ح` ݄Egό y3]9URR_QON6DV< ?]n*y0nE l=vgbIR[Y;xull.Iia60Rz}셽# :P?/H1[ULZKS-K3p+5&\5ӥr3#uҊ)}|3'%}$ [&3}` ۠
+5!սխXs$
+K-@
+%] e(!3r@ERʶERUA?K~"Wij&>.>0 %kߝfpWQ1`o_0pN۾a^8+/cL"!;a]U( _:qGשalqvmcuCv E(Ҏp%\':w'$=o&Eڤ9pd$>`i
+c*MWp:!ذM.+<uE|-JAyыRЖ1״+-IIH)[=6%{LP +-IIH)[=Jp`Ƹk@u\VbF\Eve٩gYW.32YvhL=}aV2{f}e>iwѝ-k.7bȭ<S\wnĈ[wr}/Α~g
+oQaxzoYSa;k!ⷆr160:`{Pd a:};asp~IM @jҹ!tnHξ~JƓ#:ЙS:e[sNl߶Lr+@NAk@H:r/8Ʃ K8T9Hp[{r=YrF3zh HG0N3gaF1ӏ}=hؤ> 9;1VTC\+Ihk:;ݥ[5k~#WErƮ؝^i}  <W:yNc jCK(y
+x]vl'-(55kv v>H2hPcb9B'a7\LPڽޕӂQi}rZSѹRc0EUE+w.tdsh%cÈܭ0Ncd+Ʌe묢L fxO2tsI<wj'Ǽ/aPr:kTMzR"e7]vt:݃KS&`-QSHQ}ߗ+уnU׀fo ?wЧDwQ?h䱰} o ?K~Lt;ޥ~?j:| @D~H1o"&9zO{B[֦sѽ޻BT*]{
+YE*Rv6ZN &ޒ=/%704x^|OۄŸрD?*^}iV7/JbӠS뫙|KOaO
+|9>%\0MZp*4bGf̱j~Bh ^Rk}ۧЛ[&)aen ^+w单k/$4<vC);I9:_y`csFw*&O
+Loҥx~@Lg`P2>l9O话g;"m
+ s-?~|C;9gߊ23ϷOS#W?k|k׎%!" lwxo) JTW_7B!!@b?\Tpϓ0MK-<=c UWSwD1_bڟ"oX$ o)H'X{!SPzK~`ӗgT(/ZZ^xГ_Y
+\@?Z~rϽ^xIֵ#* PL{#p9P3Ej?[G?%:'bi\&>J́q,.bQc_F1.F$u-W`H.bsC.eӛ^8?$,G.B ܪ2PK#@
endstream
endobj
-783 0 obj
-<< /Type /Page /Contents 784 0 R /Resources 782 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 786 0 R /Annots 787 0 R >>
-endobj
-787 0 obj
-[ 781 0 R ]
+792 0 obj
+<< /Type /Page /Contents 793 0 R /Resources 791 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 788 0 R /Annots 795 0 R >>
endobj
-781 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 475.907 101.177 486.364 112.797 ]/A << /S /GoTo /D (section.9) >> >>
+795 0 obj
+[ 790 0 R ]
endobj
-785 0 obj
-<< /D [ 783 0 R /XYZ 78.37 808.885 null ] >>
+790 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 475.907 101.112 486.364 112.797 ]/A << /S /GoTo /D (section.9) >> >>
endobj
-273 0 obj
-<< /D [ 783 0 R /XYZ 79.37 771.024 null ] >>
+794 0 obj
+<< /D [ 792 0 R /XYZ 78.37 808.885 null ] >>
endobj
-782 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 402 0 R /F15 381 0 R /F55 383 0 R /F56 384 0 R /F58 386 0 R /F29 375 0 R /F23 379 0 R /F20 382 0 R /F66 388 0 R /F30 369 0 R /F45 390 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
+277 0 obj
+<< /D [ 792 0 R /XYZ 79.37 771.024 null ] >>
endobj
791 0 obj
-<< /Filter /FlateDecode /Length 6891 >>
-stream
-x=Ɏdq<HR ЭI:mȀz`aA2=5IhTW%36 _ t߼~Q[`Jo?N&n.0nN&/?\~$疧 q;Bb ǿ>r.N:'΍\PH"ņDX  $"Mnԑ')wᷣcҀCn(F_}4v@%֌r̺?R%I2q%c:68 ^\X
-R}py>a7#}Y(pq~n۟on~c!O`015im݅fJ[_(H
-JWHUh!=d! $ ʁQ0ߠ@.pl+g[ Wx+(tQ`ۏ¯vJҍF=il{R}R@Μmߝ;3ژj=cgXB1#ݍob-SϚiV ; Cd+ &'pZU[e诈ez"izg2jѺ b29zh j]YhVA\Tqyu\/~\.h`haU9A;M n05Wh^ ^Mó7Sds\̭VzZ7NcZi7*M)L:4הS:4V|}tͻzRp[6w? ZDH_N Qy$p 8;s+^/\\=oHqHܝvi9u=XVN݃I+]tQjlzk/PWǧ{ 7a8X xQ -++QY EW?I=+@TU'`>L+k-)oz!+֌/7ڙeIg/eK>?D5j;ETǨTN!^'.ю)懨''^ZՖԂ>cS#_k3?͋4a,>iOik\Qr1HK(p 11-'Ǽ*J|*J)K, `A-mUKBt*-`~U1˱ KI=ؠBula:u
-R];unN-izԹA^;uN2cS]:e8~RGwO5tAÍ%#u\qהTP7tt<h>u
-Md
-&k 79TCL8}QKN0*aÀ0!BA!:4xⳮ ͣ
-e.ȋʪ;ں¥kK%..UcF
-.(Qu)kbbgM7q qWaԌvqǃw@ċD:!H?W*6{x
-)k#;V1a?D@x)V8zX+G4]W|"r/TN Mmt0ܖ܅`օf3h6fMhWٞij&~Dt22j5A{O4r76HMfSrd/wIz2ܫlU'k6؏m
-D? %WXP^/tNCmS?gm 2Nyu^9o[;m(&pY;B 0H
-^?*`߫O՝b3$!O֫8oح:vޚ[?f7vO n_?o7_:y
-~O*`߯O׭q8ZgLf ֫4oح*vޚ[?f6uO lԮW?o6_*y
-^?*`߫Opԫ+^ݿre`#ɹ(s *0EI.Lī%z*sfSG^JXZ5}ެ=Jzv1/N#ׂm`U\F㛟y0׈3W˛VFmG+E+S`"8V^TwLXup2Áo'(j$z-.R\Â=X1ГE97ϯ2
-8٘峷) ҃? >.[u\}g[^|dڋO>H]|8oxu:;Luֶ솶S*vb7ok<l{Ehu"7s+Iگ;$ <=Zu D-a\:9
- H4urzfôszSx[Q
-j|CL0L+`WJiC%+$ TzE!,PlwJ4MjY*W҄0Պ۷S$ |~A;5"sZXTi>񊝞ZE[zkL~aR)`(e x- :oi].u:rl ]o79ŤP1mm">i.ӈ%Sc^s XVeS'YtZ2jA^
-_E}lTbE}.fX" Q RTjyvYlkI#K`Y*Xd;ww}1kX`^XMWMEQ2 vNwMVx=S{GHYֲѮw37A^*}Tߥ:Hw7ە޿ach>Iq=]'E_
-ϩN:f ]R^*݌tֲMl:*%Ɂ ÊA: eW!P.Rk'tIwn..aTMzvA?!B?`Wk_Qs
-"wi]M_)M,+;ŮĭAXZ**_F
-Ϣ)nh3tǧc<#
-o>Y$^J(ozxѰPjF3 4k`Gk4k䖛[%%`K,La?F$Ԯs"zx5sdH0Bȣ1 1p=(sW說GLeZh2~zԄCW@\lhQ̈O
-*)' '5ET+EGNjV
-b@āAF*Xou
-n 9ig3u K:S~-5Z&IqȌ{LH-Ju,]a؛=vÍdv0%v 6doveS.$i
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 406 0 R /F15 385 0 R /F55 387 0 R /F56 388 0 R /F58 390 0 R /F29 379 0 R /F23 383 0 R /F20 386 0 R /F66 392 0 R /F30 373 0 R /F45 394 0 R /F40 395 0 R /F59 397 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+799 0 obj
+<< /Filter /FlateDecode /Length 5607 >>
+stream
+x]K7ȣE|?
+2/u>Q1z}Ѵ*CjFTj0C/~zqzq3Z,?/ˑH"I7O\ߗ.:
+}`z~]tnc &'EgÒ߀pxˇ紐K0AxJ8F-,
+ 㹥H2k!uDPd`1 1lC"}iĎcNp%]8Br$Y<,e2H鳭Ce&Q[Vw$0HzaHPN_618bÄd%AE^F0M7y\UTR穭,+U7@LښBc?<Lhx
+~EƥB8*
+iC&a
+)͎w˥5k0qfPN1<0&"Ggu@2󳗃W# cdC\rVz`f~#_)Aj> Ʃ{ 8ZP Є?0O_Cw 4  :qmP>6xzPDH^r|w1'ޢ셨uxAvF%(;s3Q\ =έƉ{ 8߶qÓ SFV٭S >q
+/s^m BYJ4Vt,l);u.:o:KlөS֩T Nc!8I.qtS0)^nX;<P
+5R:h|hH?rAh!N]1&8 $JN0Y*a`P;Px$5#1l˔`;hpIpqIxMqpɈiIR&x$vx$fxDE%7Qqft5aց玉>te"}G䒩l$'oY !|Gv7JL/ܟqf>X/v5 m7cD.)q E.lF.L5 !H*sd"s6S f(|m'[I#]
+F,>xz}:]tlg-om.l<PdO7%}2ܳŌj5^cֶAԭoJB)xoA`B$ X, (.}$ t'` |: wI(QӮe6 eJB9Nw}xN&l`K'лNB6 ͧP
+^r8߶8ϝ%'N$>:'P$OB3l |:K]r
+ ,yzVSk̄|Ob: i,Xd񼆇SLJbEޢ ~㈜)䇤XARyp'aG*BOV VuF#
+6QK[[] d_ EDk-tES V^3fY'DkrǞ:b3e˰=I@IF+Wȭt%FNbw>.ud0o ܴ}^'<+q*tF!ek>`/y
+_
++5
+=QsږAu@-.W8lI~͢ʷm( ۯXo=^S
+ӷq
+y=yXRQ(+XR䱩/dfvy|-y`M&>ux1jr ~Y{rO2Vc鹹F 8U7a<p7~pO4r\'3`O3ҥ[t<N4bF:-¯z22Rtk9$Jv_=
+0RՏYnB_їkVVKa:zM 4X2 v'Д ֓0M{<x. S ʟٶuڌђ8ӓas}aD7.w|MF+דK$5g!ݫ?zàt"9xȼ
+2X(懷;_ahlVbB0N"6@bo;]X xC. ꭸa vcǘHVwGFv#"CbȨ H,Ǻ
+Zs
+}GU!hjCTQ;f8DEp):uy~T~P1 QcAMt$H 9u) 98!z14'8D/0搦UU9wjzC^G48iyUq(V>␂e`S]c1,Op1C
+'8}!bp8\(}^iOz}_,{&wYK?&5z/]Ç:u}Ș9E5e`I%Z/KK~4H?}\}_>sGxQ77 iW2$ UBeRSf-VTʒ)xj,!ھӦ^մ?9` HPkMng'Ѡ[
+t:<]X}De۱*`Wik*\%+#E$}UJU6HW҈
+M4 1Xo::.5$ ,d?쏐۹?ٕR5us[1^;XƙmUzit!Y0ΐTENfUHuϭ:$]}<(0WR^X*k=VE*|MЉ BTn($ȱ{M,>$8:x
endstream
endobj
-790 0 obj
-<< /Type /Page /Contents 791 0 R /Resources 789 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 786 0 R /Annots 794 0 R >>
+798 0 obj
+<< /Type /Page /Contents 799 0 R /Resources 797 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 788 0 R /Annots 801 0 R >>
endobj
-794 0 obj
-[ 788 0 R ]
+801 0 obj
+[ 796 0 R ]
endobj
-788 0 obj
+796 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 480.406 604.2 492.361 616.155 ]/A << /S /GoTo /D (subsection.6.2) >> >>
endobj
-792 0 obj
-<< /D [ 790 0 R /XYZ 78.37 808.885 null ] >>
+800 0 obj
+<< /D [ 798 0 R /XYZ 78.37 808.885 null ] >>
endobj
-277 0 obj
-<< /D [ 790 0 R /XYZ 79.37 199.572 null ] >>
+281 0 obj
+<< /D [ 798 0 R /XYZ 79.37 199.572 null ] >>
endobj
-789 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F56 384 0 R /F30 369 0 R /F23 379 0 R /F51 380 0 R /F26 404 0 R /F20 382 0 R /F52 376 0 R /F53 645 0 R /F69 402 0 R /F55 383 0 R /F80 793 0 R >> /ProcSet [ /PDF /Text ] >>
+797 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 385 0 R /F56 388 0 R /F30 373 0 R /F23 383 0 R /F51 384 0 R /F26 408 0 R /F20 386 0 R /F52 380 0 R /F53 653 0 R /F69 406 0 R /F55 387 0 R /F66 392 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-798 0 obj
-<< /Filter /FlateDecode /Length 4814 >>
-stream
-x]K$qϯȣu(kZ ֞Z]0G&|z˃lwgF 駉O߾3z/$&rq+_s-8WEy9Q:$>3 X\D[9^3H/6
-R7O_ .m±x8"om3re6=Ė.e(%9%fSٌͤOIb ,"JN
-{-+'nC,Xi.=hcήo{6YܘCq,)\®V8^naSLcOCj# -7``wRa ֧.x
-' l0\gz;jHSR|`^^ V84$:V%U'}j%jaWG Ś]HCpiBTE:kٰ2tje2^kN.M~,eޢ7ɠzzu<N~{&T){22ѻuWa~Ew^L]_ ϶xI1!0#Ѭ^sݮV}p<w}lΪ>Oۺx783.a⪝պYYcI%O:l*f SLa,sA
-jo8h3w>\Lgc35+N:
-kzb]8_;/r̛_=t, `)P0zR?2~>ʎhO VFBw:nt.:>\>4 r$pz Z9A2C8+n|':b (&d+=L'[7g^~Y .o
-fe_(*̙",@Oy
-@=;8 dς7d`|iu9/u%@!ȦS;ҲHC9KD$ wn8vjeRihR0pa*ޤA lNwj7%! -y`6χ~IyBAɁo{uYs]gۿ y>>S?Y Oԍ3!W
-TMV?73
-Y1ɨ索j+&.8fis-jp?^~!?kgZ̜t: g֙_̻?>H=xW[!LtDr!^Ԟ2HL<MZ)0?Qs4_dpcd`b!PYa*x:weӽT; D#B`:stc☑ԉSc"f\ jҒ=cQÙ꣆GײGo%Й\p!_iu-jW[zv.ꪉCҥNwrEcz`* hlI/%XZM\2ux ޹7 i+[fǦje(,<k[ JX2} .Gc-g< \tD5)~+O2m}G|mfVa#JCZ}W|֧Y3R,\vT+Oyzb,[43b:)OOdԲ +-YYz]<{O[
-+VW=ssl:
-S~\?K{gUV$VXpa$6}$m/H`({K@W`$/¸q_d'itSѓIPu̓c}]{$qxCj`_S! r?oGN?#L[hҙ"P6gZRݛ@P!d:z:%xxo:3v*sGc:!t;Vpz46 UKNs^8!^GE 7(6svHn[uv!xCh}v!3ǃ{Nd+h0?:Y ut7t -Uu<B2mԝ d?˩B]{kKP;S8; a@%52MGyD<zܓ&2D"A`?]GM>D
-UO.
-6
-Ao??}w?¼`Gނׂz]}pӯ:}qڸ8'l4uZ#EYܢ[_.tǤ0ftE.w~YWOl#!TxYF2] ǜ,]sxcP8
+805 0 obj
+<< /Filter /FlateDecode /Length 6308 >>
+stream
+x]Kemxqe)
+&dGx2ǪzON!2ü6֫J=DxHc/7ױ%Kn4I*z*83!1Xt lM
+f5a>㼳z1Xtsd`N%XY&6X!LMI6DX-y~:4.\*؍2'އ2A
+b(4*5EF#hI Yr홽 \ZDW9}S3+adU<.RgŵFXV i-\Xl<S\$ DvRZ2C5H3
+ 2Uf) ёz9Z,Ws)a/<ZZA5SgS+YV5jv׳YhH}aI*XQh<Sȇ cX*:c10󋄖z2jSpJ9' X 3f[;IV-% 5D5@rI/2B-7*JXRr
+IU%K#j M`+أ`%:QѓugH䙺DvI^3VYf  eQo#YfbK#/8Ve#+*1j<@WE:sQdmtUFQ]\^Pu-UqP" @IN7,5gl-td-,Zi=,8" zqX(.M",(=J3YV{k)D
+##_PtCYh đc\PIR7Iɒe/O(7=)49TU'*l  )(a
+y\д qGjSkK(lt=P OwٜKdt>flw@L
+Р%凤E,"G]o
+XKa3ޡ7!0iH/IS~ߧd:>MecS*ce{tuXC e{s#܏f[6g6JnjmΦ=uqfa`լYmbV]=yja\1+YCu& @%ZRܾwv9TBJx /s7V=>9(2xx`}lvQ
+<~YlnGjCWlV͍[5a0oN}mb |ndz@ oqGL'wapXpք'ކ=hj&:|tiFZ=*_a 8d,/m7.^doʽkytP\1 YoIl'Mq%~s}[鏋`-KO7r"HXh`ʥ9zNx„KhbM D=idU[
+bD̈́ҫz%keK\\m'keȃ[jۉZ ^vy-dyƯ]}fX Ys0VLF#߈nzV{2V{{I%2tA=MlJW81?H!ERr~[i3HГFG:``vI'AWLA2hѤ;^`WGΔo"%eM<SQRB=Ǭ0)ipCWҡ Mkr
+9~UV]~WtMZL7.X|ri?^+︑X|my-.:} /&9n{$IV@Y+t6nlv?e1\JZ^MW#(zL? /Cm#ӽ6 #P >7һ˾a2VOI;2v4Jϸ-^c|@K~B~![_{y'
+_ !NL=޹і/%Q [ڌˡ olN/f;SElNn>{o]셴L^UsT"Xm1ז>w[B _nٞ[;28:G?Z19HnQM:좚r~Ѷowm-6VGK#Jkڶ}׼|sitӬzwmHN'oC8B|y#W4jE*KܓM<txBbCoGise:dd} 
+ $^1HC|!`ZX;ZwI_v`bu`j=0/^}<T{L!]Gi}p7&B 'i>>HZ0/R&{XrwF*ƈ=mX::Xnwj]{hRyXK)PƗR=+اuoo"k(i K>/1P慝9jە <Ē|})\39奎tզ߼cKFCZ_m&bs}lVL: 3Aw#?ŢXw$$!H~^ւnZנzWp9>PY}xi. -j.I<i& ͐Ba2 ငCHtj{TetWo| 1LCvK|;)ʜ&c'L5o|?/qvo63o򕚗1;,DA 
+./pNcm,&}'c67M:%u's^a8$D!DZ˜
+ng
+FZUngv nZez<\M5^v L@y8GAz:lsuƟޅmsK|>A{]o{or'V}Nήo0qQ@j1sRxMOԭ)z N_Li;Yg'y834{nSo+y@{ͮ2pUx0%: z!w[sBn}@l퓴[s;rxf 44 Q^/-{3"~O>,RbN )I&kkI׼?O }V>[SnALI`\Т_OVp%7;DXQj4hxx7iY% zRL=6wաvLs_~w?ϗ_ھG<Iu D`pwxB.4]IR:HI▎#Zў4Ҁ~pp_垧xe^6BW V7*&H2F/yZ'=jY\fa?
endstream
endobj
-797 0 obj
-<< /Type /Page /Contents 798 0 R /Resources 796 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 786 0 R /Annots 800 0 R >>
+804 0 obj
+<< /Type /Page /Contents 805 0 R /Resources 803 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 788 0 R /Annots 808 0 R >>
endobj
-800 0 obj
-[ 795 0 R ]
+808 0 obj
+[ 802 0 R ]
endobj
-795 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 422.205 276.623 434.16 287.462 ]/A << /S /GoTo /D (subsection.12.2) >> >>
+802 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 422.205 217.586 434.16 228.426 ]/A << /S /GoTo /D (subsection.12.2) >> >>
endobj
-799 0 obj
-<< /D [ 797 0 R /XYZ 78.37 808.885 null ] >>
+806 0 obj
+<< /D [ 804 0 R /XYZ 78.37 808.885 null ] >>
endobj
-281 0 obj
-<< /D [ 797 0 R /XYZ 79.37 310.854 null ] >>
+285 0 obj
+<< /D [ 804 0 R /XYZ 79.37 251.818 null ] >>
endobj
-796 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F55 383 0 R /F67 389 0 R /F56 384 0 R /F23 379 0 R /F20 382 0 R /F29 375 0 R /F69 402 0 R /F78 469 0 R >> /ProcSet [ /PDF /Text ] >>
+803 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 385 0 R /F80 807 0 R /F55 387 0 R /F67 393 0 R /F56 388 0 R /F23 383 0 R /F20 386 0 R /F29 379 0 R /F69 406 0 R /F78 478 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-804 0 obj
-<< /Filter /FlateDecode /Length 3541 >>
-stream
-xˎ7>_Q?ЊDm {Ʒ &H.KJ^#ɡ*&\~]IN/O\\8X\~6㳔tO_(^(j$-Q.[G<"<闔^9mBg BDw7e(g6VhYr[RkڙAb?wq&\Ai[y  e׌Kt3oiWA`Œh% VeZ}lsuW.Vduυ2?_gVx<d~d\OG& [dE<!hs/N4”5D:؞OFIMAD媐 )!
-)33>lxTx.H۔4g:>՘ K0dU3fb@1r?ƪW2c-׏w+l5:g#! O1 18<`/F 'V<gZ%{wI#B}%XtfiJHɣlٞ&V䩛f;T A"853u/J}G׏NG7aW7û"μ
-+2yI_fرG nYw + }k,覡GA
-k> :qŻzS!
-gԯz&MqG\fVE><K6ؓƼ$8A uOnJXrf V8f8ՀiҦ=qң]
-?39HϘ)f
-7SXicz# 3^mo2KYI8c-DW"ܰJ ^xRR#|CA e/`b>4LG0DB('oa?RT9_~*Ӟr4"JΕ.x9G}|)\٬"cpTOa:<Z$) $o\)*KB `:p .4(aP$»Pוk3J}٨A)f}TDcKtir re2|4nkI3LQ#
-@ivX%Rװ+Ep::U]syz}JYO
-a;\tX}uv5rNoOO`5EҜYƞ].}6ks;7#CS~mYRP6R6>!s[:VE47fv;D- ̲3;eA1e5h~Ak&l)v7 X8Ɛٿl;~WFy7[yI!b/*0+zsW@cPjo f8&A/7f/x=cM]΂*Znd3MW,ĶNSE\ )=l Nw?RX_
-Km|ӝb
-.3S{\m NV: sI3zX+8G2
-/; 1
-k8ov8矏iNgs*FeOVYk3AV=_!9n8'aU늼Ap3r2+
-WqGqYϳy J+)<npZפ^NhԊҷ_33AڗcOPcew:
+812 0 obj
+<< /Filter /FlateDecode /Length 3540 >>
+stream
+xˎ7>_Q?ЊDm {Ʒ &H.KJ^#ɡ*&\~]IN/O\\8X\~6㳔tO_(^(j$-Q.[G<"<闔^9mBg BDw7e(g6VhYr[RkڙAb?wq&\Ai[y  e׌Kt3oiWA`Œh% VeZ}lsuW.Vduυ2?_gVx<d~d\OG& [dE<!hs/N4”5D:؞OFIMAD媐 Fᔙ 6U<*a]D`_`mRϳdsjL%2*cw3p ׏ޟGp
+c+1HG;Tu6֎̧rJ숌#J @ 3罻$˃ӾS,:t%$QBlmpcl+Mo :ƎJX[|~g]AB/3Fv#ㅍP̂LmstTE d{{^Zak،c=X[t&ԸK.
+t3+ƢQ
+f \Mڠц:wH'7f,qP
+j+~]j`4iTמ8.R$gi3ӛ)1={K7`Mڥ$Zɱ"+nX/Z)u)^c 2ZAPwu0KA^xu&#XJ"QftJL7cu)n E?iO9pmy%JBJ_dS<Rl#i>@M.
+HklVwS8*̧0 -7DPJ0 i8FN0f(w
+]J͵XF%KQlGSADѾx*%o492>ύc75¤(ݑ@OFJU+
+Mqjz~ʹYhϖd^*M$Yv5 i/*&15UיQCHkrkvUcܝԔ lDOLKr3<'Ηh:'S8NO;#G~^D[*cM-2
+"b7atOF&*vONO }5O`N4,
+M bx@{&{gAm i-JrDdkåF)xP"ӆ 6m[ԆN'd;v@),/6>1K)A.6'T +ƹwo=#s
+h<7}[Z)лﭻI]ߖ5S6j-3?sGk qײF,߼'^۵uyu tnSc[u\ß!r"9&`++AX5/?Ӯۼ'mgw|Ew]xg8G{=u|AÞ/ E^Y}[Cy?%fx!# ?h/}xpݳm~[#\TgmOCڀ=ꋪ^nЁPhoP,Ng\ڝpV5طglǴI'9\\+, Y7ҪuE^oGX쫸8\O,Jsxo܊Q{K7cwEk/iD4jE/Z u˱ }W$<}p:
+N {l
&a p3..vSJ2ä;+9m/@͇=pcĥڬBH6;ڄ 9Glw|
V\ xt]>v.CR#+ߜqǵRãkh ϐ-n^S+4L2>Jj%7uN$]{  1ΫO]}Θ(,!]7ϒSY{av5F;D_ƅFEʸ?- cau!dN墨UaSO_@
&Sj~/1݇nZ!CE 2OwXxEJIiqrڄzufk&,{ye|ʃ?~]@gUnXԸ^omAՉ=A&]ҁT- <e%@yUz;J0߶h%!E
iLJooe®%OHmm~}G::-~-g1Ӝ)g.g&$gݬ9cp3ue'9g
,w|:U ʌN(;kAb+h[q0^C[{W=38Cr }yk BR/uENs%COL]fsG^ 9C5RL> 1^ MKLJm盅\Q<=t`-OOPTLX:8|C2&c
-ϽS)I
+ϽS)I
endstream
endobj
-803 0 obj
-<< /Type /Page /Contents 804 0 R /Resources 802 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 786 0 R /Annots 806 0 R >>
+811 0 obj
+<< /Type /Page /Contents 812 0 R /Resources 810 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 788 0 R /Annots 814 0 R >>
endobj
-806 0 obj
-[ 801 0 R ]
+814 0 obj
+[ 809 0 R ]
endobj
-801 0 obj
+809 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 436.381 260.195 448.337 272.15 ]/A << /S /GoTo /D (subsection.14.7) >> >>
endobj
-805 0 obj
-<< /D [ 803 0 R /XYZ 78.37 808.885 null ] >>
+813 0 obj
+<< /D [ 811 0 R /XYZ 78.37 808.885 null ] >>
endobj
-285 0 obj
-<< /D [ 803 0 R /XYZ 79.37 771.024 null ] >>
+289 0 obj
+<< /D [ 811 0 R /XYZ 79.37 771.024 null ] >>
endobj
-802 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 402 0 R /F15 381 0 R /F55 383 0 R /F58 386 0 R /F56 384 0 R /F57 385 0 R /F65 387 0 R /F45 390 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
+810 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 406 0 R /F15 385 0 R /F55 387 0 R /F58 390 0 R /F56 388 0 R /F57 389 0 R /F65 391 0 R /F45 394 0 R /F40 395 0 R /F59 397 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-812 0 obj
-<< /Filter /FlateDecode /Length 12542 >>
-stream
-x}K$7]"Xd4@[XJIsɁv]-Чkf4ճn?^F?/_/>]c*˯yKX/5ko޹+ӿS{ׯРO=#4 ǟ8>?œ?K[!/{@fKJn(XeXAJh?POc6OC!W^ݿyd"|ވ?OR5|ޣ &9@v'|ųqĢp {d]snɣ3-H6N=\y<p>t!ap?]1z TJ&lq=kR Ϸ/l O
-w^o%kwy~}ȭ2#[d#v=0f7j__qJ)m&\`\ 6/S|?5 {:/G Kws#=܁әMV2u뗯j6!ܹg؜Ԟq?1w K*M&Pûk&b`3^o X]cErRvqxD~H bݟ/?](p}ۿ_~5!}i`F:|_*b0g~24 /'\^pa5Йq0Y`ǜ" zoG9$9
-;`X%W]
-~~> P.P`'z\|~d:өf2Wa\ߞX) `k"-nzZZ8˱COZP7qG^]cS_ex-=;|X#6yr
-I/g"4fbf 1a%'Ԟhյkߨ٨RdXNUT%l(pu8fņjbB;LY0u) -I1Q7!P
-hPFkW%5 Nݳs'b4^['Ys3fSA53RMQV`#zFZ3c9Uw9xN*Z3lUcD oCb9bE2xFE1
-NFcV1r3vVh*l4*(ZQ׊
- 8>%W"$_zL)vysטN
-M=3Cd6<!o r@[B2 +\
-;&ZY
-6eϬ rZl&f€0#DiXpUBm@;PeF Jbߒ%f}LE0u:dP{ _1+8ce{sa:s-ⓙ fpb03ܱA )ENTaz.f^Ւ oᐊӢh `<׈q SN6o@+ZqkAȹ|5µoŚ {܌09~Q=
-RӜ oᕊjPLL9$3&dǃ9@@ b=UP3QsNȸ<M{pᖊi<C$Ciܩ桀0DOQ6vx*$*xur@rMMѰ#:a*EEj`XOM0D3L{ ǧ5<΅f†B.PW< 21Dµ9wvND9a3bPRdX ݩ G:9mu{C587g zP+9 }Lx.сSHrۉFcbAgLL A+8cux9;VI>֟"FW{8T
-X:3BNb{YrzeaN4h>枭Uކ
-D!XɍQj\Pq (Դ`| x"VVH $hkOT d
-6eTD JfL$
-JWQ 3>,JE!lɒjyiS
- S^54=jMx?478P!R
-dUeaNVa^6 щ!mCz":M
-AAQ
-5qR(!}ly@+G%`$j3аm'sUaO«]er(CH4pNJТ(:ZzJH86mA!>9!.Z 4r[FFUQ ۳+*8Puxec8*l+X-n
-w,A(Tt4hݺ @KL o&<+ZrCwf5nT[HsF͐ծqVu4@_E?J81X4XʕV} d3Q gӠ쒛 T!Z%W}`/
-}MN'3Ɂkc pT Z쨃Vðx1D`JJzpIOCRUO2E47XD<M.@B̘8Lԇ3G%b["l]ã#.VLr&Lug:h9 UwWcD`[QK6Ԩs{!4{<Ykٌ:izڵQUpJc1&.Ax -EXہt B&3P: x]2#Y9
-Aumqj=8$襈TBwQIJf;em»`aZכ,QtFfjfFT;ī% $"ެG%@:{
-r DYZ{>ф7&$~ l ۪nBEg<nFvmzAaCrc ǀ =m$m
-[3ID5NcvLBf!DCwt쵂wۆ3;^+U5<[MfT!OKnĿ)ALmhԌŤ!˹G9`^,jA:_ 9h3&GQ gӠŬ͍g8vVGi(3 |7Վt' [4xwسXq_v<;fD
-búܞbRDeR/Th=psjƤ)MifTJ/ko؆ ;pb&O
-k\rM"LuǨNFd]>Is<XC!zo|IRMO(˸+xt}$XR3v1mS4=4RUu Ǥ:-tv> jߓ 6Q):8-fƥ*gjܦIݜ;.y1iJ`
--sysXA-׫ RSn[2ʒ\!`Uh M3*U'&IC#(Xu{̺ypL6<]#Xb8eAcٓ"*wkxLTLR7FKlLќ` K^܃)"uy m˵`)ȌJI1n2e4շ{i׋"}~CC E؀SxWN-32i耑* 
-h-Ôo1LM!֤'oe2qsQMYjC5*_VL\U{HFlaT
-"هCB&2 GY!B-w1ŭL5A滛3Cpp(4AL 2Y]`%e0!d#2sȋ75*]"|I=3+ _Vڶ(bda'f2" 'LR:~Gf `iH\ QM9eU0*T BʕT!'VH՚H\oVpF 2WQ9@ZT#y$\bD c/ӑ,@8Zc'CB
-kX1$vD#ܕliC+eU'*Tjeev4
-f?+8ڶhmdbҀ= Ѕ4y# |22ֺʴ!5zS15CQia+[FXoQ ,6x\JU|.vސ
- $޶+a
- O<SaLbwB5-râl 0H$& JtK!w,w 0A}W:qO_K
-o |!3аm'
- S+!ykW )Z;ī3M&' =7+4 !j@(;I/b*q߷
-ު!m'J/mXl2"û)fcUP%3F
-c}F,55+%f6Q5Z)
-M((QS9kQVt3J]±)ӡ$VAjcDrCR~ji:"{xbڣB ӎ@P&h ƒvv%
-upL4"Q( Q;5b)#4hDt}ЃkIR̎. E)mf!rߛ1+eTnJq,d{"RPCȢB<E KH+D(ӽ!Caj30m'ZbkMEXCfyԌ@TB&P
-vA+8Pu[J-31A,FbHx@:B_'d+`(юTLssS#.N?4cqԊj*6Yg&Jh|^9mƈmYy"Q)C܃ ԝx`)4 gFGD!vմ`\TQEUÖ<٘4!06>
-7oVoh|c
-wbo͊f5'$iGPHi u5-\TQ<d=XS5
-G +}
-pgL#~Xn*=RL({~vTlX
-LFx~1ΐ"Dnn{fL&%hBs|bj`([< Ȇh4nI V*OQ11.pƗLWXvJj)9 OB擐$d> OB擐$d> OB擐$d> OB擐$d> OB擐$d> OB擐$d> 2I'1BA
-|Ϝa#XCސVD6{[̼:R2Ձ,(°?#lSYu ,am2n3Wh7=3.b(Q|R@[~G 7UCc>w-±4Ltۻp"ҫE# _|xlk7lCiiIɓ?1p86X{IE
-)#~;\k\;>؟c.᧘oEwߕ8~ӴjIY
-;"#b
-<Ʋ{a2z"1>yO1>yO1>yO1>yy/PfV8(P!
-V .{.)29\m-%@ìp )R:јD8{*7Pmh-KkjEvdpžZQڛ =H+1~t\)UCbv (SJ:wd
-6ET΄&d_O =r@[# 0 |'' <."Z[=ىFGp 0d94&a옕-N}\Vtv\ #͝um#XtЗikFkl5昬o#h5Aᔕ-D}2V"БM#'; E+ ^0 f븈k!Y] n8֚5E$xeϬ *!d LP)g"rNV
-"wB‡ ?1zY'Y]Iaf, ! 2= {8fgLlpa~̵F؂UZ ?5#(٨Sh 1a|p_yWK1W79b(BSk\#-N= `ӱx:noIVei7# nq0S=HNlӜ oᕊjP9828(`Rϑy&A2+$kl/ܥ .LvX%E@"7pLuƞ lbPǧo:;U"63! PxE6mxuD)VT }|\# Zf{ ǧ5<}ZW#2Ām@p!gz!%\sʏS62B ӘK ]lF""7 loXN]x8"80@%+& "a/__Pg:i%(
-DN:LH:.h1V.FtfK]38VwW55JM"[FW{8Tq]W"xG DI,u db9a20M'{'. .{Vb;NM (5YGcf("k^ěԴ`|`20-'ю2%Q5*0 TD JfL$|5EZ ;8i~<ʀpbn91UFxWMh嶌v+41fu EkW nD`-SB7wx/YN3R ;56^,F67W8Ubf,W}X O41Cj5 |!b*IkA?> sx94 \,6_7I yih12M-Zǣ%1c즕5h}_Yl[
-~Siˆxu9DTS`.BQZ4Zl:aa'p6CpI(S1hC@78?<v~xcI{Ꞵ'I{Ꞵ'I{Ꞵ'I{Ꞵ'I{Ꞵ'I{Ꞵ'I7Bkxz%֍խi^ݺV!L4Z_o! iaTEETl\A [^ 4mgidC\n52Anx4"Q rB!~4D7%.ŸKmrfXLAw;J٫ e6yׄ,h(ngB$vxXn;]؍Wav}ڕDEI=b7-* ٨5B}T]S)@{=V{td|<_4?Gt_{{S{쭯x<t'˫/05{|Ken9m*.Y_ ty
-HSA%#F;S;%"+?6J 'C'x}7MO > D8_Vp4H惙(sylW;vsrX0FO}9u|cKt}?ħSRHa^\pLZ _` "Rxթw.a𵬰kIݖρMic@$ szVP=
-1߿֝CAjd6ظ" +PI[P
-+>AXo^c"= 8:?q2㍩A6Q[w>(“`=JhYͅb1?_i%x䥸)2&\S;>yf^IKY|}M\(1Ud0S^%|%;Kd8U;^fS*PD<D6?o9b? B$Ǘ'h b.O<ZsotiPM{;9h.9]W|i~EaSjYMc m̜\@DJn\VK n#$hE^,iDd ?QS1rw2q1Cj0g= |IÍa&. F>qջ]Ma*$5
+820 0 obj
+<< /Filter /FlateDecode /Length 12544 >>
+stream
+x}K$9޽Ew d UPeW
+tkU! /
+vvK*U.灠G {w#RƖK1ԫRJ)._3iÞWLeciJs'kim6Š6Ǜ>Zfװ8ȸX."e>^K%+\sץ9d!$qJD(E덿<q_{+Z Xki:YQYK\IKboh(=*ZF"Ɍ^
+/M47@YR# ֯-r;)x-P
+2cw)?K}(ۙ?7F
+X\ <l|lB)3vXEx K7
+V#?ۯi=\x? C$!̲%;;lY{;_!V *d"Tѿtk/p;#ܟN0הq
+,Lg `\[iqFo_š?m^
+}Ғhz(=n""]D>*'km?ɓ6yiElj&Z?蔠p#]}iO&z,.={=6/>734ǥ {@[I/ o὚~)9?=S[~ދ pny \ _\6e9 cliΰ.xyEZnz=,V /O]׈]k%. ,R}ɗpljC\^7l k[556 v1t1{Ʈ@oi lawj<W ͅL a@J+.'$fmVrm` ʵDk~) q]u: ڎuM:JuxhhM(U /[J֪@KJTN#`][BࡖXdv^P%Ȓ+6TM {K6*dZ^\{T
+ b]4`/vX0$
+M,R?^}s[Uj oG$lRi3A4Xj20$@q"'da}UGv`Y՗DM
+T9ohMxUۄꚘ|seuj8В\P~ޔ̥X,?51VUmVu20
+]D7.T]Dp9R 4r[FõLTSpj5 =AC EPaQ@ՊNV܇Tha)(A',7*cJqƐͣ/UƌwjVn M& }ZBY_$f븧Pz@ 4htt
+-t4&a옕-NɊ4;Dܫ
+r4
+* R]-4Ѯw#+esUcaE4R+.>Ӛ lrsU( 4t<!>v@q btd
+_5VեȰRxQ4*jP,{fUvb00) Jłrh*~4bP.A$7,e*!mʎY(Ô3 әkL0X A
+6fT JnR-`(ZBu[x,e@!ޠ]#ccݞҰBRU&D[x|`m%&kT.;&QwU2c"<W<ƽHa#0hMse@
+a*x<z&4r[F;}h
+mA(T,Ɔb=q #ދ| 3'ٻ&aec̞6^,F67W8UJJ\a.7g?U(
+aKVKtJvhOsi@ı:@!sLFijmZ<-]/c즕5hɑU:,~SG$q}PM!z} (bi:棴h0I,Ոt^m36g'2[*6?sqK\$Gj
+DjG)H |cKF
+
+aT9>u! [$0%YYCӣ܄xJsa\Azp ")00`k#8o<6ªI1 ,!C T+A|2|22 kك3V1U*A#\{适C
+OO"6 v=7,]U OZ*1=TɋDsm礄Z.
+С8"RY`ur9Fi9&kT n;|S9IQ1hdH5p@CgIu6P\/d:%hy|RV-V6 Ԡ-8mX>Qr0{hDMp4 h$ABos,X" 4#<0Y~c`|fҋKeŇJkJ rP0LYn0gb]0.ZQ Ȫcד kfO|
+fMؠA O7>a n3qx´Uga2Z
+>A{]%;jۃ&¸[}(b! gEKn!֬FMj inѨڵY9jۢջ3GзQ '^=kƽK\bWҪVLr&Lu]r3Sj;DY@T[r4
+rVT=&CRIQI1x[ꖞq¶ɜUfҀ%37C|pZlKİ#q=-3 rxtcq݅٪3ID5NvL JzL0,z >`FԘu.x/>5=f3`>Qg M3U7V6=
+0T!^)}L0&_>$|%ouk;^{9;YdfTOKf?+G!-NgJ.ʡ 3IiLt,-Tx <L zs43hT݌X̨*8PuxDڛh_gj-ۄ"6{~f j8S-fLJr4Br4Xn_ښ@sN~U6!M3Q6V63
+T!Vc1IgS|J4XK @;-
+)
+q LT4iwɍ74ޗ4d|97(̋^-HR Dt[C"m(LuQ( efF|ߝa Ɠ{v+N{ٌ(]!|STZlXS #X*^ X8Cr4շnV͘4%)]*4@| <vWU<YIaKUոɓqS5҈L>|'iÒ'v D/I* ewҢb$kTr.mFJu.T@ça|["
+3E[LָT _4SPQ}%O6&M lWe.` 0zVjmTPY+2
+ iRtF$vc$xh%nY7ɆǷc~KLк6Hw},{p_$cZEr /ɓ P6ShT1pɔIS9a|˔{p|2ED6.#/5zmL3eQ) 0MFPus1͔颤/`_C#63S:`J‡&>@"E)<G7߰ ƛH١gwC "@)D!i0l`yLY*hzު-wD
+ާ,!<NN,Sҷ8u|<,O/#ssҿ))pi]&xHui]ZW71ߔ~ 3pPD@œǴxLgRr,X(ϱ0?͡xOuDŽs+U 8 $m.MһwDL{O”wDl{ x/T۹;d'!I|'!I|'!I|'!I| + cCģK |7""7{Ky"0[F SS;5)0[ z\TS@PAAE<hclǺHF(cn
+M0Sǿqx@sDVXIce `و g \eA:5"=Mu._Rbd筶-JA njAiH:X"BnSjn)2
++P9r%UȉR&.CUjD W8t}$ 1+=ɐгbBVu ]n;k weu06zP
+mA4CJ22Dd<lD|Yg6ˍ b/h@rg>XA|a3`iӢAp5u%ZY
+(-Ze4 F"t!M^`_,L2mH`TiLMhhnĐbTZlX
+Vƫ֛@tƸ`B=~5#קRU #7?%8 y!%fAh0~?. TF44#
+"9 T&o
+UgǷ6f|d$E. (} $\#3F6 5Bi1Tqz؝pŰ([C5L#>*Rm-;LПotyUN\גB[F0_wȢ 4rۉrCTJHHhJVp!LSICƥ<ICO 
+MHgfK!'JD-¬cHrۉF%9[nX!TɌѨ9
+%^kR9{#Ȗ]JZoOKUGؿmQg 2KM J꣪fmDɄ/YoggnVBfJT|NFZ@:}qT3]茶R}pb
+t(8ɴUFiܐ@>EA$(%%P´58Ժ 9$ݠ]IC/2QUʬ*oQ"6FÓ)61)8mb7`֎\0<@jC A +H޼QȰ  D"mo(1+&΋=F}'k(\bKc!Mhǝ`{wN0
+w7!i6X)xVU "/=p<S1HT1JBTƎ%eXJ "Q}'(]uZ"#F.lzFٷAy(㬨<f
+f=ACRj(& ꞈ)
+!
+t/x zC 4rۉXZSuVЭYFކ;#5#UP%1F
+1KaQUAM-@(ef
+~SY osSݟzUfDOkǢJ(搁^'6*9_`Ha* 3а˟w(T+5X]v
+0TR`L":;}(3˴87;~@">J2!A"J.*\ԈӨoD,uF<.MV G. װpx1"s[c@{HT@!*u'5Xu
+ 'Q]ry5-7'UTcQǰ%O6&MH/5:.3w"tug,|Љh?}-@5h@Lz CJaӂiҊj4r\XVb-:=
+A i =ߘǝ؛x:tx} ma|f}yzC]M 6</U)*+Y*֔  <(%JB>F7ӈ_+$wʞDo*ֹ=Q9^_3$=.ѰII=J2űy~#!ͱ[h~RFhTL'%&*Vqݴh<Fn+!zgJNB擐$d> OB擐$d> OB擐$d> OB擐$d> OB擐$d> OB擐$d> OBGIDP>3>
+Sw(ւ}*Vu|}P%tX88n{7NDzhd"a /mf_l:}(X#-=I[4yg#">bs/\!Erįxw} sq~cs"s2??.2v6C?;+ ]<<4yzDM7e..\ܿ!\{vGmMBL_\E$ZKa|%f%f^Ic|11m/DL!|GwDL!|X/LNd|<'c|<'c|<'c|<':1|`
+c;YAR*AեZ|%E&_pqdhο"WVPG^5pOf%siBȎ ýW+
+;Z{AѸG)~!&o|1jcHηaeJ)U1YA;ʙD!Z}Ut,k 2^hkd$_YTPz@ ?2;N,Ƥ lr}նũˊN׎ aDs=Ômd2Ms݈x|-y My$M?u&<;rsUOJ:I{dyyacht Blz5$Ka '"Z/>[dU!P%ĞQ  #L
+WҰǰ`~e0u
+m32&kT3CjI7&TLE[hy-kĸéq@/t:VB bCB\;Ɋ5|L5M`f!f݉mm9R1\U*ǵoGL923H0^zD|X؀DإnľX"s TL\QqJ7p&jbW}"N?E
+AఏT"âO3kD5[l672BTO6vDF .L/BksXqFfA9a3b ͨRdX ݩ Gs؜;|[G
+D!TɌDs/<V<ƽHa#0Տ\n#B-;
+(⪺ ܖNw;Ƭ}h
+mA(TejB1Y8#]E>I{FJRvrG0~Q&&k%(
+CLTŒu9&FQx[_TV&! DL9i-LJapo0'Kƕ?!71--FEkxd4Btc#Ƹ`lݴ3U+ҙ bKa<t֏p*M.ۀj
+lŞQC`>JF B0Lb9D#־fH^yN9 ej;mf@3;?<v~xc;;iuOZݓV=iuOZݓV=iuOZݓV=iuOZݓV=iuOZݓV=iuOZݓV=iuFhu Oϻĺ1❵5<ͫ[^*1rY\k -5D6-̚Ș?@ 55{K!ml1lhMF& F_%*a}\Y3*įB\=ƼEsMLI*P}ǡpۡE){U݆1p LN `ǵR *̹؎O(_B<|X^#b}\ȡ
+wtk!2Huxتuz.G5~oz
+rsdy~fo{ tB%E4wp᙮G}#Wi*(RsȘ|g
+c3$SĶf]i!WX$sȣY޽OCﰰYc BčCa%9aJ
+
+hYd>29N-|U vzm7G!cCYXxpi0DsI|:%ŵ uZNi/)+",Wzv _
+6m(ؔ:DJB>~ 2|E&<"M2jzb?'as|1s 3)|3GL*mYռ·]CyƟʓZe֪ϴBO Z؏9<v[D{MJ-5sj .p ߏP[iFDs#>}hơ.}Տpu&ȢD0}9v0}vm#k™oL|jP&J%.ꕐ6pQ n78$`FoȈ+_ZX^"uD=@(OvK?1f,ҳ
+ =Pq&q8'*M
endstream
endobj
-811 0 obj
-<< /Type /Page /Contents 812 0 R /Resources 810 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 786 0 R /Annots 814 0 R >>
+819 0 obj
+<< /Type /Page /Contents 820 0 R /Resources 818 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 788 0 R /Annots 822 0 R >>
endobj
-814 0 obj
-[ 807 0 R ]
+822 0 obj
+[ 815 0 R ]
endobj
-807 0 obj
+815 0 obj
<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 253.045 239.124 265.001 251.079 ]/A << /S /GoTo /D (subsubsection.5.3.3) >> >>
endobj
-813 0 obj
-<< /D [ 811 0 R /XYZ 78.37 808.885 null ] >>
-endobj
-289 0 obj
-<< /D [ 811 0 R /XYZ 79.37 771.024 null ] >>
+821 0 obj
+<< /D [ 819 0 R /XYZ 78.37 808.885 null ] >>
endobj
293 0 obj
-<< /D [ 811 0 R /XYZ 79.37 695.22 null ] >>
+<< /D [ 819 0 R /XYZ 79.37 771.024 null ] >>
endobj
297 0 obj
-<< /D [ 811 0 R /XYZ 79.37 288.23 null ] >>
+<< /D [ 819 0 R /XYZ 79.37 695.22 null ] >>
endobj
-810 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 402 0 R /F15 381 0 R /F55 383 0 R /F58 386 0 R /F56 384 0 R /F23 379 0 R /F20 382 0 R /F29 375 0 R /F45 390 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
+301 0 obj
+<< /D [ 819 0 R /XYZ 79.37 288.23 null ] >>
endobj
-821 0 obj
-<< /Filter /FlateDecode /Length 4519 >>
-stream
-x\Ɏ+
-'71k
-1M!Δ 'yn@w4y&ۨTpMtK/5l6jah<kabLyr@Fhh+TKN"8u
-2dvq贷2V^b8з:,%:α'L OZpR'w=UR&]Mr1nY9+d43x$|R\tVx M3eue|zrh5/@E"kb~BqYWyEV)vB;9w{:RE&͑[]P!M:R;4Q):N mz#rgPBP9O4&3?syN
-8+]֙w:Y[t+GϜ3fxf{5T.~T~S>eCE3iӵziKJmN"
-X6⥺`sO J8Qd_Rnr7 ضpی{
-58 xx|qh;6~hPg]JQ.AT# qoΑ -91ЃhS^ŢL&98R>",12A.phLj7Ttt4H:yTU5(k3.Amݖ6lL_ œP  w;u@\c;IJ
-Ij C* LmG%dB5֡%pզw9Fk+c5{Β3^fp͵,pQ-x6D gLgfi{2os_j3Z[Oz/9hacOM[VCpQ˙.-_b[$ 3D1 uG4Pu)צanCIqlz1h}9W]A_0R@x9Ɉd<Kw{<c]DXgjE`H>Lf\DDHYyybhU7KkcH2.e0E_ȅeQvufGKbpnGt%*~%Ndb܋Df7R]{LAjz3rG<Ge(tO>mi @դ4}0c*IA@ɟ Am~Q(3
-(6x
-Fy`ipl>]?>m19d˵JvTwWO,ɊTJ(jԴY"]V`}Glj s 1D;ѽ@~<<[69W/ #caO`ϼ؈K'`*00`.|VvGyXI6ى^Gu|nYnm Hឣ{+nX*KVM)kIوHQGaߖ 獸pWpx#zc-%Oq\:ձ e^eTUU9q㲲-Yy6=]ڨ$mYuiH-7z|s# 4/ru1/P+
-Ey-|–
-24e CÚ&bRYeO34Kd7NgAqPͣfm8_?/]"干̇d0}-2 ٽ[@<]%Y_X2jRe~q\FuDW*>EVlؖ_SFff,~)IUy3q+_QъHvelp -
-DUDWq{s*)Z5D-,DӋ$hMpxs{:(ԗ.Ij{zHڍ4} Eeܮc-V0='ejj)bMy_^gUA҂=GU LSW $_i6(˱'WMuY\=F|/e^oL
- S҇mONDLCϭ)Aͅ 3g<)
-?])Zh?װWS7vn@B-mrc^ӛ^5tVYA#e$^#T e/,z)2zt& aG8XH{̼ƘI<rTw m\SN.jQ5n7am`Em9)lrU6Abzsh+z-A_SˎBcWd3v6]BnsX :q[qE^ "?Ew0u6;jJVkTX`~SvVȽ
- 6J7' -~&/zs6}f']r#*{Pam\ s0DD g}蛏Wn ߍ
+818 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 406 0 R /F15 385 0 R /F55 387 0 R /F58 390 0 R /F56 388 0 R /F23 383 0 R /F20 386 0 R /F29 379 0 R /F45 394 0 R /F40 395 0 R /F59 397 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+829 0 obj
+<< /Filter /FlateDecode /Length 4343 >>
+stream
+x\Ic ׯ(j
+
+$Lu?L}IZ)ŔS/J9fX
+*ؙIYd_U))+Ro\;)MҊOLt˪>q^3U$QEO]2UB<V4x([q*a~% \=j֣]
+c [Q;^fVHڨq./O8/}JiLeGqzձLl1scѝ<QfO݂ *Y;+0쨲R b F3jPAJ<S?V^ݬa@-(L6[^<0:{pvBď)R-'؄I?h4YG9|'7NEҙNAYiZr8uϢey _lئ,
+W['Y $P^5ɭI1͊[iGT՝ζ-@#-2$Nr!׬~iS+
+"j&ess`=PXG/Gy ,`z
+@_H"x|}dD㪬p*@#WvBZ;^.L_ |f ek)?f%y3mݑ1Ӟq4o0᫁dtb'4w`yr( Z4;,F%b+ćhNZc>V"%[z<\YŸdžLdB؊iy2.hW/A,fҢ+G%>^aRWyT^# hnū@jjQ2rTbFlhX
+WY-!cP$̔z!ei@kD(Ť-5]QQQTO71sNp
+FގRZ$/}Q'U$
+fJcӱDP$2r$ijh)LHGg]z.9
+-IAÓz!/aݷ[)iEnpik~@Atv͓"O,vƣ iKv[͗U*&+ԧ͂ ZfeuwO$N-xK]4?V#ih@
+/]'Ƴ3ocȋ97bG)`^߻I9VP^Mw{ey*LR~cj񎒘(BQVK Nvt/89LcE
+\ksܓni!,F>-]af‰HI55{IR[#P/u [{*dtz<ZJGx_i=WKҋ}d5k6_ h@Msh)~ cjq{\8r | 1k`r|T(=Lfh2Q[SbGoE"@n<ZxJ7hh\*X(K~'jktbrS]s cUAfhe #^oۊj(?_K2
endstream
endobj
-820 0 obj
-<< /Type /Page /Contents 821 0 R /Resources 819 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 786 0 R /Annots 824 0 R >>
+828 0 obj
+<< /Type /Page /Contents 829 0 R /Resources 827 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 788 0 R /Annots 832 0 R >>
endobj
-824 0 obj
-[ 816 0 R 808 0 R 809 0 R 815 0 R ]
+832 0 obj
+[ 816 0 R 817 0 R 823 0 R ]
endobj
816 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 245.069 167.799 257.024 179.755 ]/A << /S /GoTo /D (subsubsection.5.3.3) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 383.119 148.817 393.576 160.503 ]/A << /S /GoTo /D (subsection.8.3) >> >>
endobj
-808 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 383.119 134.196 393.576 145.882 ]/A << /S /GoTo /D (subsection.8.3) >> >>
-endobj
-809 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 117.643 124.503 128.099 136.189 ]/A << /S /GoTo /D (subsection.8.2) >> >>
+817 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 117.643 139.124 128.099 150.81 ]/A << /S /GoTo /D (subsection.8.2) >> >>
endobj
-815 0 obj
-<< /Type /Annot /Border[0 0 1]/H/I/C[0 1 1] /Rect [ 107.768 67.03 471.982 78.716 ]
+823 0 obj
+<< /Type /Annot /Border[0 0 1]/H/I/C[0 1 1] /Rect [ 107.768 81.652 471.982 93.337 ]
/Subtype/Link/A<</Type/Action/S/URI/URI(https://tex.stackexchange.com/questions/528975/error-loading-tikz-in-ieeeaccess-class)>>
>>
endobj
-822 0 obj
-<< /D [ 820 0 R /XYZ 78.37 808.885 null ] >>
-endobj
-301 0 obj
-<< /D [ 820 0 R /XYZ 79.37 591.94 null ] >>
+830 0 obj
+<< /D [ 828 0 R /XYZ 78.37 808.885 null ] >>
endobj
305 0 obj
-<< /D [ 820 0 R /XYZ 79.37 430.206 null ] >>
+<< /D [ 828 0 R /XYZ 79.37 590.246 null ] >>
endobj
-819 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F56 384 0 R /F58 386 0 R /F55 383 0 R /F69 402 0 R /F57 385 0 R /F45 390 0 R /F40 391 0 R /F59 393 0 R /F46 392 0 R /F71 415 0 R /F92 823 0 R >> /ProcSet [ /PDF /Text ] >>
+309 0 obj
+<< /D [ 828 0 R /XYZ 79.37 428.398 null ] >>
endobj
-825 0 obj
+827 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 385 0 R /F56 388 0 R /F58 390 0 R /F55 387 0 R /F69 406 0 R /F57 389 0 R /F45 394 0 R /F40 395 0 R /F59 397 0 R /F46 396 0 R /F71 419 0 R /F92 831 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+833 0 obj
<< /Type /Pattern /PatternType 1 /PaintType 2 /TilingType 1 /BBox [-0.99628 -0.99628 3.9851 3.9851] /XStep 2.98883 /YStep 2.98883 /Matrix [1.0 0.0 0.0 1.0 0.0 0.0] /Resources <</Pattern<<>>>> /Filter /FlateDecode /Length 45 >>
stream
x+T030U(2 8LXX) @`@
endstream
endobj
-826 0 obj
+834 0 obj
<< /Type /Pattern /PatternType 1 /PaintType 2 /TilingType 1 /BBox [-0.99628 -0.99628 3.9851 3.9851] /XStep 2.98883 /YStep 2.98883 /Matrix [1.0 0.0 0.0 1.0 0.0 0.0] /Resources <</Pattern<<>>>> /Filter /FlateDecode /Length 53 >>
stream
x+T030U(2 ,-,,r ,,Lt–fF
@@ -3549,80 +3664,93 @@ x+T030U(2 ,-,,r ,,Lt–fF
endstream
endobj
-827 0 obj
-<< /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0 0 100 100 ] /Matrix [ 1 0 0 1 0 0 ] /Resources 828 0 R /Filter /FlateDecode /Length 15 >>
+835 0 obj
+<< /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0 0 100 100 ] /Matrix [ 1 0 0 1 0 0 ] /Resources 836 0 R /Filter /FlateDecode /Length 15 >>
stream
xP(
endstream
endobj
-828 0 obj
+836 0 obj
<< /Shading << /Sh << /ShadingType 3 /ColorSpace /DeviceRGB /Domain [0.0 50.00064] /Coords [50.00064 50.00064 0.0 50.00064 50.00064 50.00064] /Function << /FunctionType 3 /Domain [0.0 50.00064] /Functions [ << /FunctionType 2 /Domain [0.0 50.00064] /C0 [1 1 1] /C1 [1 0.5 0.5] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [1 0.5 0.5] /C1 [1 0.5 0.5] /N 1 >> ] /Bounds [ 25.00032] /Encode [0 1 0 1] >> /Extend [true false] >> >> /ProcSet [ /PDF ] >>
endobj
-829 0 obj
+837 0 obj
<< /Type /Pattern /PatternType 1 /PaintType 2 /TilingType 1 /BBox [0.0 0.0 8.50403 8.50403] /XStep 8.50403 /YStep 8.50403 /Matrix [1.0 0.0 0.0 1.0 0.0 0.0] /Resources <</Pattern<<>>>> /Filter /FlateDecode /Length 79 >>
stream
x=0W Y".RRҿ^( U b1H<ܪY`2rir:"B,Yr߻qB
endstream
endobj
-830 0 obj
-<< /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0 0 100 100 ] /Matrix [ 1 0 0 1 0 0 ] /Resources 831 0 R /Filter /FlateDecode /Length 15 >>
+838 0 obj
+<< /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0 0 100 100 ] /Matrix [ 1 0 0 1 0 0 ] /Resources 839 0 R /Filter /FlateDecode /Length 15 >>
stream
xP(
endstream
endobj
-831 0 obj
+839 0 obj
<< /Shading << /Sh << /ShadingType 2 /ColorSpace /DeviceRGB /Domain [0.0 100.00128] /Coords [0 0.0 0 100.00128] /Function << /FunctionType 3 /Domain [0.0 100.00128] /Functions [ << /FunctionType 2 /Domain [0.0 100.00128] /C0 [1 1 1] /C1 [1 1 1] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [1 1 1] /C1 [0.75 0.75 1] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [0.75 0.75 1] /C1 [0.5 0.5 1] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [0.5 0.5 1] /C1 [0.5 0.5 1] /N 1 >> ] /Bounds [ 25.00032 50.00064 75.00096] /Encode [0 1 0 1 0 1 0 1] >> /Extend [false false] >> >> /ProcSet [ /PDF ] >>
endobj
-836 0 obj
-<< /Filter /FlateDecode /Length 4619 >>
-stream
-x]IWx x8'%r0|H&Dr,;~oݯgA޼l*~U&+>z\O [#,F3B5[>|^~T[J|E:)JRRn9>Kŝ5IJH)@Q;Hyvf-1z un8VM)Vny)aloH,6<PXFxz& *]!{{˱(&r\oM2KV=Uۋ'-bxGgF;IGu4}>k\
-+9T<0&DiEaN5.*v
-@(Qb7^uY[! b)RWuC72faOhf+֑?z
-8٣NھVYrE)ndL.ϭiHwqeb~iDeo\җ#_C5
-z;om1f5{##6A%28A_݇z՗[|^9U-,ɉH141}U u + 1ڗXmis
- V'BޑQStߦ:- ,X0
-`^wSTnn NuL.e]җor}Iağ|~yu3e69+ԧKy/meK3E^ܐ~ig}-U5M%yl_h_&ϗqz2b? j9 ј j.O1U,2 ؗquse^ώQ5[DW10Դ?\Sf
-.uDSH}t$
-~)8?Ug'Dknp eJT1omW}
-b*.F@x!/JoZ1RnPM{ F۷o*bT%c
-
-NK~X2;%wi|d:"d*n8'UU^`&QT]­@*&i;L!83G
-HI.eLۿ41j8慢tt?E?1C|Ϗ<mrs,hG!GVO/e;%†@#K^rю20wWbѺW܅I':sXG%~:(UDx9/d9ikN;CރhԧGXrj9IlmJ:ٖ,7@آ
+844 0 obj
+<< /Filter /FlateDecode /Length 4901 >>
+stream
+x]Y~ׯ?4z'%`!6)
+:HM&H.+7f
+R0%k-X9`M&%e*/FuTZb@87J2JfT:;JO{Y'`tt}$Su[Y3KV=UςkR}'[Vh:4tfԥ/
+VBɱauC-8|ܸ"1<%ls3D5S938PC:V䐂@c CkTM2JV3֒Po\<fS"2Gϱ)5rħM.ˈuC!' %3bSxг- fv;6h0q4艨27 'ڨ܌bd%_AhQI Ј4_O)X4pYͦ>$Vs!VږxR;A9=pNwF gQ(=:Yhqg|_Ke6
+ fd=(fJ^hKp(_XOy:Tf
+3⌰ua %by\Qۃ1`%x[ kA8Suxc6/%Sb+6Y/ZʱMXP"@uJ}Bf:'brZr
+4%̸?[=<u;vQDӮD,$)*' lb;JGd ""㱠$m*]Iu~ e0mhw}kո&ɽ4qͧc+D"sNvHC$
+cg5 ڛ2>ƾGpp?.\r*&1Y~cZ/Bgax91f{Nc `h_=3x@9#gR?iQYIk ^;)^0~Б Frʙ@Kp%¹MWFc[*Y+Ҋ
+(Sܨ %UVk>Ѐ1iB~ Zf(|h;¥[ 嬿y_wBS1
+J4MKٰT
+6_JN
+GjY U䴏⬐QœXf{,)0KP$g)qA5!M}OU;SGLC ȒҬЮR<I͝*䞏<VNٳs>e/<'B?/U<sJd+pz G*ikNş=PE#Pd
+{$R|Eɋ!l7sA%W `ߍ}?έY#ulBs;&~rI 4h[*Ӵ
+S'F)e+e^8SGSw6v<됛M{1y}
+ۍѽ8__~]k&Ϸ1MVH/?\,U51YOG)O{Xae%
+a "[J"8#_TtvTe0RjJ|COv
+om@6rUg7o}ՂRD%'kF4vuϞc{qeZIGx1^Yⴡd_ޅӎeqGcOSJXxڊE';꒮ wCe_ih|6em3s`;-G \G{,!i/qHi #S!Rt>w{d]KjD<ciU4dIڀ(>DE3q*ǥ} OlgGh}$&`R\e~=/KW{G: x b=H?
+ή^/xHSvۍ/s&˔6(bJP)T%- >Xnjy}GXc27)`iĨ$T0<5jUY7
+SՓqQV5 mv[rOI,AuNt[73dOκ[W_F+n~?.WސϺ!uD>90xj"ˏG1iŲ-TI%c~ Kq<72dOSl 1^SÜ(\əL {B88S^Qu }VTaeL1fNŵ-2 Mqϫ] 8H > \.w Cyh.9]w్3cюf ]_,С=^C` RN1w)e;]["l䒋vtSCCr?80NK<,O-B^w$Z|;H_{2TOd3ݜpᚳΐS#|s]lmr:7@آzd̏?K8?Ӆi+,7kyuĠB~N Zڝt
+"^*)8P:zabpY_~(]oU
+4 nHmv&+ ӯnn_+BV\Wt9M\
+ua]зBj+c5M,XfyKA[/ᆔpRu}|\kZ>vjWꮗ}[NUZOA|o$,Tvs/c
+>~}¦Qi
endstream
endobj
-835 0 obj
-<< /Type /Page /Contents 836 0 R /Resources 834 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 786 0 R /Annots 838 0 R >>
+843 0 obj
+<< /Type /Page /Contents 844 0 R /Resources 842 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 788 0 R /Annots 846 0 R >>
endobj
-838 0 obj
-[ 817 0 R 818 0 R 832 0 R 833 0 R ]
+846 0 obj
+[ 824 0 R 825 0 R 826 0 R 840 0 R 841 0 R ]
endobj
-817 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 118.533 721.708 141.009 733.664 ]/A << /S /GoTo /D (subsubsection.5.3.5) >> >>
+824 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 245.069 725.068 257.024 737.023 ]/A << /S /GoTo /D (subsubsection.5.3.3) >> >>
endobj
-818 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 156.73 721.708 168.685 733.664 ]/A << /S /GoTo /D (subsubsection.5.3.5) >> >>
+825 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 142.772 668.651 165.248 680.606 ]/A << /S /GoTo /D (subsubsection.5.3.5) >> >>
endobj
-832 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 442.409 91.586 448.634 103.271 ]/A << /S /GoTo /D (section.5) >> >>
+826 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 180.969 668.651 192.924 680.606 ]/A << /S /GoTo /D (subsubsection.5.3.5) >> >>
endobj
-833 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 459.337 91.586 465.562 103.271 ]/A << /S /GoTo /D (section.5) >> >>
+840 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 442.409 67.03 448.634 78.65 ]/A << /S /GoTo /D (section.5) >> >>
endobj
-837 0 obj
-<< /D [ 835 0 R /XYZ 78.37 808.885 null ] >>
+841 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 459.337 67.03 469.794 78.65 ]/A << /S /GoTo /D (section.5) >> >>
endobj
-309 0 obj
-<< /D [ 835 0 R /XYZ 79.37 670.884 null ] >>
+845 0 obj
+<< /D [ 843 0 R /XYZ 78.37 808.885 null ] >>
endobj
313 0 obj
-<< /D [ 835 0 R /XYZ 79.37 631.598 null ] >>
+<< /D [ 843 0 R /XYZ 79.37 621.909 null ] >>
endobj
-834 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F55 383 0 R /F56 384 0 R /F69 402 0 R /F58 386 0 R /F50 374 0 R /F45 390 0 R /F40 391 0 R /F46 392 0 R /F67 389 0 R /F59 393 0 R >> /XObject << /Fm1 827 0 R /Fm2 830 0 R >> /ProcSet [ /PDF /Text ] >>
+317 0 obj
+<< /D [ 843 0 R /XYZ 79.37 582.624 null ] >>
endobj
-843 0 obj
-<< /Filter /FlateDecode /Length 3013 >>
+842 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 385 0 R /F55 387 0 R /F56 388 0 R /F69 406 0 R /F58 390 0 R /F50 378 0 R /F45 394 0 R /F40 395 0 R /F46 396 0 R /F67 393 0 R /F59 397 0 R >> /XObject << /Fm1 835 0 R /Fm2 838 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+851 0 obj
+<< /Filter /FlateDecode /Length 3010 >>
stream
xڵ[͎ S ,=-pb:}(T]*"?%qy˻;9|_>ܽzvqQJDk_>|SF.jQ_SB:| Rw]StJYH=x- ~\gn'} IlHIzVv":Dz#U$@f) Q
jz#Jb,V&{gYɪ`VM I,<) "AmQӐ7U'?'l> gF7Ӧt!Wfbv+)QR厔[S{ᡙ[z+FxobWA?aȇ 6«=yRx0mp8!Ce\LNRF5$v^flU߲ۦ-sjdӄs:C-(WmLȗ$$ilaIR</Gm2lv3UrjRf"`f> 0lRfpd
@@ -3631,36 +3759,35 @@ jz#Jb,V&{gYɪ`VM I,<) "AmQӐ7U'?'
+.MqMD7Ce
+l26bRORxaҴǩGޢhr^ْ1ULKɼmGI#M#a[uK([)s
H5E 7Pu AOȄI =3wE/w ClS(69\70fa`1iFY!饔SfݔNAnB^ӕ}GAA9=@€)+'SŌdkENՌ3{ x܃ 0G^|~qf½* cO=)K zoھ? Ns#6w:֠Bt:3uG~_E: pNm#Qǽ/1}iw <|CodPRh22%g\<UBj
-FYg4|Wj(]ҚsUn 行_m 23gɚ:=re$BH%WBu7֮Mx6kfE۩P2.xR ?\toSd$·%Jr]zv\wY_`@ĭ-]j-{jrDHRj."mlgpؒS/fAkJhh@pO=L_IlЮ>)x"(kEh0X 6#\~7 ^^lM
-MAY/E}&>~/-UYy[r&O4Z=L)%`+ `Tʑ Vftr䄑x3vWè |o2a<
+FYg4|Wj(]ҚsUn 行_m 23gɚ:=re$BH%WBu7֮Mx6kfE۩P2.xR ?\ rl$·%Jr]zv\wY_`@ĭ-]j-{jrDHRj."mlgpؒS/fAkJhh@pO=L_IlЮ>S;h"ZpE,لIuSU{g?Fp//xj3J!nd֜ =6=RL8/qI}W{5C70[{e`Pr=R If|86zc?r~Kj}I<=+9<^-9y~.6dQg )z\2<Q;:btaڂ+Əc` N>(cPT;mæZ"1e*s3ᒊTXTƣRHې(
endstream
endobj
-842 0 obj
-<< /Type /Page /Contents 843 0 R /Resources 841 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 786 0 R /Annots 845 0 R >>
-endobj
-845 0 obj
-[ 839 0 R 840 0 R ]
+850 0 obj
+<< /Type /Page /Contents 851 0 R /Resources 849 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 788 0 R /Annots 853 0 R >>
endobj
-839 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 111.629 188.779 123.584 199.339 ]/A << /S /GoTo /D (section.13) >> >>
+853 0 obj
+[ 847 0 R 848 0 R ]
endobj
-840 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 136.536 188.779 148.491 199.339 ]/A << /S /GoTo /D (section.13) >> >>
+847 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 111.629 188.779 123.584 199.449 ]/A << /S /GoTo /D (section.13) >> >>
endobj
-844 0 obj
-<< /D [ 842 0 R /XYZ 78.37 808.885 null ] >>
+848 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 136.536 188.779 148.491 199.449 ]/A << /S /GoTo /D (section.13) >> >>
endobj
-317 0 obj
-<< /D [ 842 0 R /XYZ 79.37 771.024 null ] >>
+852 0 obj
+<< /D [ 850 0 R /XYZ 78.37 808.885 null ] >>
endobj
321 0 obj
-<< /D [ 842 0 R /XYZ 79.37 238.154 null ] >>
+<< /D [ 850 0 R /XYZ 79.37 771.024 null ] >>
endobj
-841 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 402 0 R /F15 381 0 R /F56 384 0 R /F55 383 0 R /F66 388 0 R /F58 386 0 R /F45 390 0 R /F40 391 0 R >> /ProcSet [ /PDF /Text ] >>
+325 0 obj
+<< /D [ 850 0 R /XYZ 79.37 238.154 null ] >>
endobj
-848 0 obj
-<< /Filter /FlateDecode /Length 3034 >>
+849 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 406 0 R /F15 385 0 R /F56 388 0 R /F55 387 0 R /F66 392 0 R /F58 390 0 R /F45 394 0 R /F40 395 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+856 0 obj
+<< /Filter /FlateDecode /Length 3033 >>
stream
xڽ[K$ ϯcrhY0`Ƴm9 7'!
ƭ|rs9Ws.9<1?x?2u`V>JB?' 2-=#5=xxLใOq\Μ8./ZVauN ~gB"a^^Jȵ%:1aDۿ+3B9wY-eB/j3Q(v#~/ kd7^~63
@@ -3673,26 +3800,26 @@ jma>QLL9'e{&'$p;1&qw%)Q`֖?F2cKhҤhaPܯI40M"x(
P;1Ѱ=XG_vAfEyzkd! 7fEC"~x
D,ula<v9}ȭK%&jF٥{O!_K
{OKʯ |Tn$jށgzPU|u E~.!
-EGߎ:D~<쩾Cא;<!lK[g_Aa }l_jRgq?G
+EGߎ:D~<쩾Cא;<!lK[g_Aa }l_jRgq?G
endstream
endobj
-847 0 obj
-<< /Type /Page /Contents 848 0 R /Resources 846 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 786 0 R >>
-endobj
-849 0 obj
-<< /D [ 847 0 R /XYZ 78.37 808.885 null ] >>
+855 0 obj
+<< /Type /Page /Contents 856 0 R /Resources 854 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 788 0 R >>
endobj
-850 0 obj
-<< /D [ 847 0 R /XYZ 195.137 237.821 null ] >>
+857 0 obj
+<< /D [ 855 0 R /XYZ 78.37 808.885 null ] >>
endobj
-851 0 obj
-<< /D [ 847 0 R /XYZ 195.137 227.649 null ] >>
+858 0 obj
+<< /D [ 855 0 R /XYZ 195.137 237.821 null ] >>
endobj
-846 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 384 0 R /F15 381 0 R /F55 383 0 R /F66 388 0 R /F52 376 0 R >> /ProcSet [ /PDF /Text ] >>
+859 0 obj
+<< /D [ 855 0 R /XYZ 195.137 227.649 null ] >>
endobj
854 0 obj
-<< /Filter /FlateDecode /Length 19637 >>
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 388 0 R /F15 385 0 R /F55 387 0 R /F66 392 0 R /F52 380 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+862 0 obj
+<< /Filter /FlateDecode /Length 19636 >>
stream
xM,%_qE$ $F/SO@a6䮻PbTI3##QwW!3?F;A'oo۟͹{Kɕ_[iPJv+_p]_WJn?_U:B']Wn@DPm$HHyM]zk}{rU<o|=1BPŢ᳷滠Oh/i`aĚc e/~;9?&4(K?OC{bL$/U8x s0ey؊hGFon5gepp?oJw+]9? 6Ssm??m.緥}Y 5GIc{cn. uzowK]?7CS >zQ jX$-iwI̠M6ww͙qcЇ4?ޒ%jT]]OC>4e͏.@'8wKo9~=>j^H\6tMޏ9{ ?ԷG2s_1EudwvTa+uo!|fU)f뽕էs+J4b*&JGgV sʗ S+ӧ͢ʕOuѐt}C_g튍?r}֮X)!l+§Vt놽] )8z}mo??rjzo?y=S*y^*+/XSndsjݽvNsnG4.S'F#B @s W-4(怚X9Jk_-D/&FhGzq/;E@n }({˽ƾ^M#=e\i^HO;j?s~I3sًv><9rS/41\7h4pKh+?QHl
!}6l_h
@@ -3789,131 +3916,129 @@ A`03F,-x$~&ؘά&m_E~;P^،wL +Bc>dT
Xw5-p>֮@B.V k1m
@>W&l×./\)/e[ a 8
߷oܻ2DJ fߓߏjݖf)5:~LF+|(ϯ~c[A }?>O6L4(d(RxIXc"U?}OǯXxm[I{*<~uM׸Yo};>3xso1= _\koO^~Ckާvm !>3 BÈ6GE#<먷ߛMa}0'z-%”E4ǚ?NyGWnJy
-ez?Y?lܟC6>icmZѶUG 0_b(pwKyu1j˯Ŀ̳_5s;Ƶ<oOh:ȼ 1"moIc{tͣC -^r˗*CB })`x^~i+CG}Zvlxί[Wx$w{ ww@tGջc;,\iNR5sc/?@ϖf
+ez?Y?lܟC6>icmZѶUG 0_b(pwKyu1j˯Ŀ̳_5s;Ƶ<oOh:ȼ 1"moIc{tͣC -^r˗*CB })`x^~i+CG}Zvlxί[Wx$w{ ww@tGջc;,\iNR5sK1r?@]
endstream
endobj
-853 0 obj
-<< /Type /Page /Contents 854 0 R /Resources 852 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 786 0 R >>
-endobj
-855 0 obj
-<< /D [ 853 0 R /XYZ 78.37 808.885 null ] >>
+861 0 obj
+<< /Type /Page /Contents 862 0 R /Resources 860 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 864 0 R >>
endobj
-325 0 obj
-<< /D [ 853 0 R /XYZ 79.37 771.024 null ] >>
+863 0 obj
+<< /D [ 861 0 R /XYZ 78.37 808.885 null ] >>
endobj
329 0 obj
-<< /D [ 853 0 R /XYZ 79.37 178.379 null ] >>
+<< /D [ 861 0 R /XYZ 79.37 771.024 null ] >>
endobj
-852 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 402 0 R /F15 381 0 R /F56 384 0 R /F29 375 0 R /F23 379 0 R /F51 380 0 R /F52 376 0 R /F20 382 0 R /F41 377 0 R /F53 645 0 R /F42 378 0 R /F50 374 0 R >> /ProcSet [ /PDF /Text ] >>
+333 0 obj
+<< /D [ 861 0 R /XYZ 79.37 178.379 null ] >>
endobj
-858 0 obj
-<< /Filter /FlateDecode /Length 5519 >>
-stream
-xˎ>_!D
-4VKC)8~PMLC[VˌaB`񸎡X{ޱ.`= gXpn}j5d: nCBzWmab[J3vŕ ~I;j\1?~1 i&;LϟLbpFoL>NN4{8
-`?͖ì0"n$_c ;#G7ߵs2p^5cobni6LND'<2Caq=C׆4cg+CDR5JBxZa7t"2?7R.L'p}>etnVv9
-0\0kܪF]C ׈kϸPY\c+ v;@V<iQC;YK6^
-&{Ŝoؕ
-vE663:a_ɯ fg۷uv[5Xl,kPFZT\׌NWƵ>0NNizpfS}ms5Åk`u[3uxl~l^7Ly{3ȯ
-̙ J脽_{UǸJS( V (gP lF'+a?DZpU
-đw*'7hyCՉedYp
-ʉ $>"c;"[-mnԛ
-NPGIy>T7 Vf'cE- 
-t?"8YqR'e^SZ$ )`m2ь9>MENDEn":W3©QTaZP^t%AL(+ $:Eg0~KsSPV.I%sR{nTDITodWF©eWTpג3^~0ieO;L;|U
-K`K|NCH
-)-P⸭h9PM,
-%f㓰F,YDC&Z/*7iàD { "1a$ " BXWPR_\`B*)p"/`d2yPp=gճ bNxayT[\~ab\12*jZ q[aϙoU1 w-
-Jq*)vB#@$8@$KvKI ꋀo&'XXH\$zr
-MT
-R5&q#OTfh pόlTY>!Ә!%F(!
-5fX̔
- /0It+@Iݬ\El"vfǴL0Ʋ+PøSi9؀]IZ)H0My!P[q_z dgPs$ {N-j5X^}`ܸ6-ՖEՇ6pT7.%)H0+XC1S2[&X&5+jk%q\2n|,],pAU\Ϻhs
-W(o0 ,j+2VՄxذ,<SW(L9|F5LB8gEm$Z%0z|>7y܀m"8kT6DQ&$ ՀuZ[*Xa$<`(2Mnb +(ZIZY9gO|@m`{ua5O
-,j
-%[ #љBѡ# *
-/Ll0 ao4eJ酏_a.GO_aA^VWRe|,sBont݊]wdݪЛ=A.a8"\¢"ivb(?¢j=Ұ g
-<ueע4;1zfѓΌ O)a3?[VE,B1KXu+2uɺU/b8*UJ}bQى1DivfeRƖSؕ)?E4ۏ2gN07Wea.ˤllZ`Gw3Tߦ{ {Ůpĉ':e|I-vO~7Gpl'Ol!! #_۾x2qv(5@
-:YT꩕Z1[g6疎薙8
-i.8}ؕrqEJ=Z Xpǰ@oyʯ݄x
->x)}5-l!+M6 4<5D[gXkm23EpzjSM',h{NjJS&* R/M c*{xԉZ="N1.ńv6h)sgvrwXSEL!cK7{jl0t5;mKo[ڳCҙzoU:KmHKh7q9Õk8X=m9ǻ)h٭[WB4* -^V;
-f;6x'EGQLj"-l:6_ϨﱟN*Ni'f vV fbK^7oeOV}av3.Pv@Ft@})}J;=è{_IQ3&4jXc6#_hKδcSþL;
--.ϭcL5-?K4ċa~'xok
-F4'
+860 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 406 0 R /F15 385 0 R /F56 388 0 R /F29 379 0 R /F23 383 0 R /F51 384 0 R /F52 380 0 R /F20 386 0 R /F41 381 0 R /F53 653 0 R /F42 382 0 R /F50 378 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+867 0 obj
+<< /Filter /FlateDecode /Length 5521 >>
+stream
+x=ˎ$Ğև~
+>ÿ--B~u4 ./uy
+LhE\"޾KkEZ 7dp- ?)#hru[Lx7/cᘔfsOGFٰŶ^Ikc`agFb~npP_'QHq7S.Ki%l>ned`q;0OyT2z-stEQVmjXbEu %,=$Yhݓ S]Jjej&O Jbpv1ާV3Nc`v1$,wuЖqv1`+v4jW\\!pzX0]=: fRX1q)'aTfOS,x9͞);N)7_+\aceJ$6O0+ /XMO\k W[>g` +0щ$D,0xjn\Oa!ʐ./TlP!)Vn =Zߛ
+j|f.5J`nU!k5T\Jg\vUdkRTyաC/\NyaƽbΏW7Jc"X^@
+i:o,
+6S5xT(`-*kF'+aWiGSZ&-{:TZrM)kp<@,u~l=3^7[_?/M)S^̄3-sfh~-:a@~1nxJ'(fa38k v ܿpqzM+'8APub5Yµr"&FnDCTZ ]q닭R67M '#$ o:R[ޛ+3KXtדYzwu
+ ɽ&Eym`ɪeT'{-|
+XjqL4eCwSb.33QU-+pj:n!TW"(g3]AIhr>8S1JAlpry4ezY$̩fTKR)G \^e$U~ QR8Y蕑pjY(1$t?` kbcZSfiN1_R$9R;fGJ Ԡ8n+Zdu h5Sa FY1;s(V>Qpbʹ sGPj26\G>TXRW3%K Tc ,I'VkY*g2t=g峢 jcPaya{qVa
+T*#KBFy)P >!B5C 3q_3GaWAIpP|ha k F bJòaCC2C5\Bׇ
+UFxp*$/eWgѢIˤSAj޺싆]cu47f 
+ jz#ê SH48EQA22AAFe+~CZRE# So92llsM^ᐐK $z$#
+-, ՓP5hl'V!M#<֋F ҒRƑ'*j gFN*,iLH_w#PQEZLG
+Df
+Wf$JnV"6v ScZTcYReaܩl. $B\$u&¼܋`-8H/P=Do D3qjbjAPFh='II,/ ϾZ0n\opjˢCSy`CHZyXT_\_`bq$ !˘ -d,S8^ZNj7> .Ip*g]9+7i|Tc{LEjB<lXVX+I>#f&b!`IwҳV S-
+F=pn6nT5*"(g j@ω:x|Ōw^Zp0[0U&7upefY{˳ZKyL
+e
+jX&Oj6İ7\2%oǯ0u b B/+x+)QIJCoqb9W7I7|JtnEn
+;snU H QX.`avf eB4;1fΌcaQ
+iX3UQ:ikC=EhgFiɧϟ} "Un%ٺAwdݪe*v%J>1@Q"C4;3P)c)uJ}bPڏىCivfdD'D0keRW6 {@KW6-#;SSF콆bWN}ēM2>fz'F#8'ySԐPQ/l mćU<QCT V,sJTOhp~-]3aesKntLHʹ >9q͸"e|,ofcX<inBj<c
+O}5-l!+M6 4<5D[gXkm23EpzjSM',h{NjJS&* R/M c*{xԉZ="N1.ńv6h)sgvrwXSEL!c'i{=T6}k[zz>О-*̷{}YjCBl˙F'^jd
+ŕ:/(?b7vsQ@qTťlqsꍵ`k?tJaP $?_ӏRYf'+Eߙ~ t|r@oU
+5epƿsCiʦ5S 9~i.hdOvIU,wKNZFqʮM9=49Jg1$z4voW-Xj9ҁ-~Y\zQ7-ʍeIxzώ+ۚrzf0&t
endstream
endobj
-857 0 obj
-<< /Type /Page /Contents 858 0 R /Resources 856 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 860 0 R >>
+866 0 obj
+<< /Type /Page /Contents 867 0 R /Resources 865 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 864 0 R >>
endobj
-859 0 obj
-<< /D [ 857 0 R /XYZ 78.37 808.885 null ] >>
+868 0 obj
+<< /D [ 866 0 R /XYZ 78.37 808.885 null ] >>
endobj
-856 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F50 374 0 R /F29 375 0 R /F20 382 0 R /F26 404 0 R /F23 379 0 R /F53 645 0 R /F15 381 0 R /F56 384 0 R /F58 386 0 R /F51 380 0 R /F57 385 0 R /F45 390 0 R /F40 391 0 R /F46 392 0 R >> /ProcSet [ /PDF /Text ] >>
+865 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F50 378 0 R /F29 379 0 R /F20 386 0 R /F26 408 0 R /F23 383 0 R /F53 653 0 R /F15 385 0 R /F56 388 0 R /F58 390 0 R /F51 384 0 R /F57 389 0 R /F45 394 0 R /F40 395 0 R /F46 396 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-863 0 obj
-<< /Filter /FlateDecode /Length 4166 >>
-stream
-x]Kϯ1> pNɉ$
-MHD0_rbR/(?
-0pLE>1 s6 xZ k&)`
-:tQǟw=bx@(
-ў`!HW!0[ ONr]Vvh)UoMw^,L;9As4IJ
-?::4N)S6҆ZjLHI& e4Ӛzc\ |2Dzg&_ Ŧ
-q*OV@0(0[(@ \/h˯ 3JEt
-Ч$1x玴41voiu'J1o<10-6'41v玴4`)`@:ҒI
-Zq"{Z`7y+NEVɤTqd4z  ګ QG xf;ed%6-_B4VI՟0Fx WtPj?3`s9;7WED]i̍L%4ќ\t3aVF3cBjO9~W`*}3D!WsηqYXf&KpZs ZuM.hl{g<tﺖ{[ &zMNBӆ+8ٓN_p8 =o*˷2sLR1,Nxfe[JܚEC]C{Ҏ\)Fs|~ARK_ _YɰV8n.}.Q[J*tpɮG.<RRqL#͒}*2mNbI19RIzpIՋN-eԵ]J"w-Zf.2ìeҫ}ˆF%i ,LέcRJYN>%*eS*6!{MgIg.p܎ j6Y4c*W(UUNȼB< 7jlZ]91DYhlJ%f 8s))5->eD\q gkZYdknMN>5N<֪k*Ъ4l^u-FZgc{7k fao&X`Opu2vU>GOfgb"!hӗ>uwN\,#G<юþO<j[75 lkwC]xwm]o_K[Tamxb佬W|s 6\JX\!mB<\EUx@W!0.UHw#kV y
-6QZAtҴ4fe}!_ w3Ͷ44ND9/pԙ'*`@4)x`Qij3 M|43 M~n7lLC^~io441wD;L^iy3SK5MA3M}LCsM2 s|fu&+o?<`DT0c.gHO$ _7M~L8$NO4`¡)`@KO)= &F&>&B4҆&>I;HSg;zn9_ W4p{9Wng AL3i Iv$ٗS4H/N0kƠ?O]HcBsE'~b9*[9'i#e,;Ux*w\zfkRmj^
-4G+O*N^EeQ0 ndq.PkX\TL.
-T=zBە[iam%=wg(͸> aFYV/ FfJKkf@[*&sJlӔOXDW@au@[҉:[)S@:+/OR^
-d?I/PT q;ӭ,ϧ_̪ `꾕ZNXg0ρ"
-:b%XQ; +L,_I0(M-o?ZlZJ,DV<) ܯb33)A( CmFj^E+S^ӊQhݘ aǯHn֠fug3x%h/~}5 mЎ(B;VrWzTM|IBy]\1bk=OJϓ<6Nl:ͳ,EJW127 cd
-Wgh^ibص"iGI cՂqD"ז xz%>mѱOXv%ٱ+=ry;μz:H'V-&5mEs[,e)Wpif%u2l X/
-V˼[%}&6+y-
-oX
-f];Kjadk9c^*T?yO%3lMQiJ^[k:6Ր%cjeJt@n٣cmJgwS&297lm56jjh}ďIZ6
+871 0 obj
+<< /Filter /FlateDecode /Length 4192 >>
+stream
+x]Kϯ1> pNɉ$
+F
+(D `-g. 5 @|W"?t8B4Oֽ&GZ㙰i -ii1v玴4`)`>u%I?;cEieRPiGZ|4#-M;i
+OiI1x玴4;i귋κGZ7i 1-6'4;isGZ0v0P:Ғc$ii1v9JWH[iq>qI?P;ԑ' @|HKlQ JuѾH9g9. Kf~w֯Xo$ݭ6([$-IxWiCK1 Ҝ+fg9+vJ/C6eW$g>.C6vm4My{P2rC
+NԪ28Kعߴ><|!Őǰog,XrL?kPA~N^!t,2__
+Bg&.tI9;7WED]y̍L%4ќ\t3aVF3cBjO9~W`*}3D!WsηqYXf&KpZ7hEW<t67h7NT\tнZo%]Z7;} anL _gO>;} ~V3'/,2nlH:m+sku !I;sD*yUaT)36| Ioa׭p-b\\#߷bT`ณ]#R8e֏
+H',G%T0mIbI19RIA^$}ŌSiDLWBSR/ԟY[ˌr-<Z&/lhQꊑbLJ1)*"uș,QMEʒC(M75& Jcr;
+di *W(UUp]]li!Af56-Kpz՜"T,JnU6g3e \iM%Q9W\uxYZV/iZgi+M@7&'i t|Xk5J\hUqwq@[8l]u˯Wمr|Z9!jAjȠ;b:V%$\ ?]SiH<ڴ
+oC iGi~^-}oI_ȉS>,S^Pȉ
+<ar-^F(- uҴ4f"Bo2qoi nLCÏ4#3 !'Oi
+(D 2M4tk 53 >ԙsGfM'4$5wny9c H}LCS
+514ާ44;hϕi3c4X/QYR"bShPϐHFSN_7 ?&ӌNO4`¡)`RzJBӦ'|L84/h҆> $#3 ?4 d0w
+лn4'-:(L|4CŽy}I|CI~I|C_3@|B/vssE~?EVIZH N
+睹nw/ZsZ@ ׺!)lQ|2"Dz%YC>"WCd-kq} :cxwP elz e8Y%bM.aSgl]^0}I-?ltkokotkokokotk_3ѶGCJs0jع ڥ4շ 2pƑ_%mjsq9/1ƺ)fcGRŨ)A:r.& v+C[[LW ~Eェ.1@ƈ\]
+z P؍ pYVN^EeUQ0 nd8X5lY*&
+"Eܞ=oﭴ]ԶVd8J3.zQօl!AzQzqZ}0ЖB\\}.jIJ7UXtEPt+`uTҽ ?U['ѥj=~VT*8@ "ÙYiB[Uu(n PZcM'jvE:= )F_-E-r<r6e,2a> Ѣ$c kL%JP{d.v2}5Ԭ)~jq4&[nLmP;pWM$\:ų
+[Z}XQWI?OѾ[gG6hsP+klζnj?7ӰܕmF<66j(QUWD 4bkTJ+<6Il:ͳ,EN W127dWqh^i۵kGI ckqD,N#&{%>mvѱqPXvޱJ+ry;μqz; \Ze`Nܶ-VTK4q~T _afvV˼[}&+y-
+oXu
+svhE.Æ.kX;*E-]?WٳygJ^ԁbS&W"=-NɖҒ>-a&|لYydZDfQЩcuJ0!
+>%Ct*lkt[̲ Exol]>RGN>c㫤/>-e9ۂ}]Z,<S+SzǤ[w628("#kS:˔|21k~U49e}8@VEzU
endstream
endobj
-862 0 obj
-<< /Type /Page /Contents 863 0 R /Resources 861 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 860 0 R >>
-endobj
-864 0 obj
-<< /D [ 862 0 R /XYZ 78.37 808.885 null ] >>
+870 0 obj
+<< /Type /Page /Contents 871 0 R /Resources 869 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 864 0 R >>
endobj
-333 0 obj
-<< /D [ 862 0 R /XYZ 79.37 598.595 null ] >>
+872 0 obj
+<< /D [ 870 0 R /XYZ 78.37 808.885 null ] >>
endobj
337 0 obj
-<< /D [ 862 0 R /XYZ 79.37 325.802 null ] >>
+<< /D [ 870 0 R /XYZ 79.37 598.595 null ] >>
endobj
-861 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 384 0 R /F29 375 0 R /F20 382 0 R /F51 380 0 R /F69 402 0 R /F15 381 0 R /F26 404 0 R /F50 374 0 R >> /ProcSet [ /PDF /Text ] >>
+341 0 obj
+<< /D [ 870 0 R /XYZ 79.37 325.802 null ] >>
endobj
-867 0 obj
-<< /Filter /FlateDecode /Length 3140 >>
-stream
-xM+bz "Qbu6@k 9@z/i,5:9xLR$ER$=\w轸w~{U1ot$&뙴5q#O?87s!K֧s_K=LpH.x/k=->/ gh .o u 9G:Wg"=WXK:iKC<ydW# nZ|p9/{!/ƭ{IﲱInZvz밮O6R^Cx"C7-ybR<Do\~^C0uУڐe\Wc%Mqʭ)2oIJ8VObykfMq 0%Ż7`3pL{
- [
-a[fiP϶բavLsy?_u٥WD
-vd϶[9j%sK-[̃"6\k Y~{jL|Xש53$0-K̼g~
-~"Qeb/)'-f~ьW2JSxnCH߂0؄ t L f /1AAbOM裂ԌNO3=|f4 I\c!`餜a I<3x"2 i?*
-_h W'p>Z|=jݣ)~\h h3pLnPڨPT.PqעER)8~5l)uv;Ȅ6xJl$gA$՗H߷NV}LR=%#a.΂GjmQfBʃ{BGK,py:
-XG=0 | mVaktp@T(oG!EI$1+A@pKa15@ xW @)HAz E)͜bLloIAA[ IO<5iqXh? ;i'ӌ) ;I'SF]Qt> 3#D K<'P-|>䤢KSy7HEͫ?MwLMNuz+oǁ݄Rz,lB`nq8pu8
-Kۃ>_Qy36 +}~k+Ķ&V:LcvpFѹJL0Z3 x}cCBnTXFU1ݵ%s} e:z`WTƜ2WgնbvKn{ GG%Źq{;]am K]#:߷vg#HXŌq#hIqv4XIGMeEi7%m Tִ=mCTUm(kMR@H-fMewPO %D?;I~ݔP&jc8;nJv
-o3:A`͵ n?;AzO'UX{;Av~S|Tw*^'EEzNΏj1Z$.d'h\.2:~F\.2:Xir\7:|=V)36WzH@\O1#rWyhxP@\$<g;iy^XG CQZù¤amޛFӂ|RN"'ޛFӂg_|/;iS8~RP8F<VLSq3R
-3R^h+8g̮,#G;~E cͳ=g4aц*4 5K43i[  
+869 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 388 0 R /F29 379 0 R /F20 386 0 R /F51 384 0 R /F69 406 0 R /F15 385 0 R /F26 408 0 R /F50 378 0 R >> /ProcSet [ /PDF /Text ] >>
+endobj
+875 0 obj
+<< /Filter /FlateDecode /Length 3164 >>
+stream
+xM+bz `s6@k 9[ i,5:9오HHzhww~}ɳ`$&rq+׷O[ǹe$.}ιg*,|~Mp&%Q@S_^ր{[x}y?p.5xuyk\"s}z{63M~cR Qv>*ΉfkL->e=/{/Ư>@缾 )Znfn ~
+)KA]D<"CKԇ"Zkݖ<^3Z7w.x?/A:Qoa\V|)[Seޒ,q28Xɴ`ߘC`g&VH
+U( 1l3 l}},fz^7]zJLixÜn*l5F2nF vl8 R._͵Dʼ=p $p!.T5<0 02Y VyGy#E U .K|)5 Kfȿ*!@C9 a BbB@XS[0iR`zk: r +?=6"@3*x3ozi X['!j .L'-S"fL%o:g(QMG v[ cWҁIk,Iz; o)K¸%CZLXPpdVbQ2BejBPf2Zu%P
+t(HDհ!Br@ҡޡCFyT(Ѓ*!՗H߷NV}-^%%$F]Ւ۞)aV۽ i,V ӳ=j :%/=8 Y~qo"i}e:p䀮B~; )JI-f!w_a8;ORb1l|2f!U")3o; E
+)sHt@,$c5LloIA; >Wy[D,O B=͸V! x'mB=͸k$a'i<eeh`@'!G03.HHP3."Hos!4^選2 ʻQ*l^Mpd67345:$.J/&[$&d9Y Pq[†w%xqPb.~u^Ԅ^Sjb.-. P{[1W+jA +PH)kB/wʍsB
+K(մ-k
+K t;2WT|^f}~%a|Ml{/|׷C3t_-WAypQ%!M
+e!SaYMcλkyK,1[-t9/f&Ϊm7%*br4KP_sXwƧK(vmڝ 4k:`& lRBAŧ0bi7mT.PY@ QU=6)!cj6;nPOM}=B=-~'vMpvDvbwߔQ; ''UԚGPg̻hei{ݔmT~}7)Ù[ HY);sAp!;AzO'UX{;A
+~[|Tw*^'E E|N.jg-}wN8 ?:_?p#u.OKy49u.ő7`JU+k=o$p pnL'8+ <4>Q( v\ܴ<hsSŨOTCR6MNiAN1'Q
+g+w80=T)..DB52$qQg3<H~.!E#2(b|2T/d٫Rihe2ᯇq PCF!zJ82J(:a%I\6<5gj܏sy7?i$=]0;
+Ĵ,r"}^,h]Q07iv:OgY+INӾ)o8bADB:C 6X-+2Yn!T2 &GϓwZ.
+ PvvI5ǁ֙tunȑ>ƖJbFN+#vR)֦<=WGYμ9~$j?
+Urj:osvp pƕϛ)W>/yW^fc/t8Y\+-B/jrw)p/
+ȅoҙW5A/8YE+s"sI>4Ẽ;GN%MܛD<Tv̱L19e}Pǯ >΂[{큫Pi
endstream
endobj
-866 0 obj
-<< /Type /Page /Contents 867 0 R /Resources 865 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 860 0 R >>
+874 0 obj
+<< /Type /Page /Contents 875 0 R /Resources 873 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 864 0 R >>
endobj
-868 0 obj
-<< /D [ 866 0 R /XYZ 78.37 808.885 null ] >>
+876 0 obj
+<< /D [ 874 0 R /XYZ 78.37 808.885 null ] >>
endobj
-865 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F50 374 0 R /F29 375 0 R /F20 382 0 R /F26 404 0 R /F52 376 0 R /F41 377 0 R /F53 645 0 R /F51 380 0 R /F15 381 0 R /F56 384 0 R >> /ProcSet [ /PDF /Text ] >>
+873 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F50 378 0 R /F29 379 0 R /F20 386 0 R /F26 408 0 R /F52 380 0 R /F41 381 0 R /F53 653 0 R /F51 384 0 R /F15 385 0 R /F56 388 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-871 0 obj
+879 0 obj
<< /Filter /FlateDecode /Length 3007 >>
stream
xˎ>_0&Y,> Ӟ]/-ɀ}H6s流TSjJ/{ToVU_'I$Wr"X ~˓" 9nrV iRZGmH^3LvB{??yJ“<#|Xl~' zE*^G_{)5i^GXAފY!3GpX/+CZQ15ZSVhk$*dn:L<R[S{'
@@ -3925,20 +4050,20 @@ xˎ>_0&Y,> Ӟ]/-ɀ}H6s流TSjJ/{ToVU_'I$W
mZKp
<LW4. ò2l3sl]6E_U1ںeɴ'?cK
ݻW4`㎯yw[w_G헕GfNVձB"syKi$%zXɥm`^Ž16dh M.S8<9g%w|&B[ o+lxi]#M*h[B/;B}k_X^
-MBI5O_ǷD5d
+MBI5O_ǷD5d
endstream
endobj
-870 0 obj
-<< /Type /Page /Contents 871 0 R /Resources 869 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 860 0 R >>
+878 0 obj
+<< /Type /Page /Contents 879 0 R /Resources 877 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 864 0 R >>
endobj
-872 0 obj
-<< /D [ 870 0 R /XYZ 78.37 808.885 null ] >>
+880 0 obj
+<< /D [ 878 0 R /XYZ 78.37 808.885 null ] >>
endobj
-869 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F50 374 0 R /F29 375 0 R /F20 382 0 R /F26 404 0 R /F52 376 0 R /F41 377 0 R /F53 645 0 R /F51 380 0 R /F15 381 0 R /F56 384 0 R >> /ProcSet [ /PDF /Text ] >>
+877 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F50 378 0 R /F29 379 0 R /F20 386 0 R /F26 408 0 R /F52 380 0 R /F41 381 0 R /F53 653 0 R /F51 384 0 R /F15 385 0 R /F56 388 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-875 0 obj
-<< /Filter /FlateDecode /Length 3868 >>
+883 0 obj
+<< /Filter /FlateDecode /Length 3869 >>
stream
x]Ko$ WTn 
F\C DΖDz {Ӵc`1Bj0Mo랯i>IL*}Tda;Iq`ZY-3~w
@@ -3953,64 +4078,78 @@ HՔ9W5$i:KŏZk k`9h|5@=OO|<_#p|<#
&O

_ ,/_ZY +75Ajn5[^jf)KP1*ʕ
-yII#7ڸLyu>'wy~QP<pZH@$uA?nëh^x}C@k~{ct*ڤ\8io?a. teR\)U{)el~I\;VkѬZ$=}Z(z-=)WcjF<zrҀ`l/ǣ ^ϯ -:{jű)B׼6:+͵׍xѻ㏌4UTzM͝T3-{6h2dK K{J9^_Kފ!HiFzrT}>{+^m#= xr}ƕLj=\-w֘^A3ؘ[wo|L+5@yIx=[4:2/X¿OSO )W1h”WO^X׽S@>o)6Pm~W{w WpbAriѽ:u>~jk'[;;LË{<O.|U^n0ljԮY#vakS`+v¥)AsP/Z5sJMKZ;5tYcsDbgwyf'sIF^̮\z\
+yII#7ڸLyu>'wy~QP<pZH@$uA?nëh^x}C@k~{ct*ڤ\8io?a. teR\)U{)el~I\;VkѬZ$=}Z(z-=)WcjF<zrҀ`l/ǣ ^ϯ -:{jű)B׼6:+͵׍xѻ㏌4UTzM͝T3-{6h2dK K{J9^_Kފ!HiFzrT}>{+^m#= xr}ƕLj=\-w֘^A3ؘ[wo|L+5@yIx=[4:2/X¿OSO )W1h”WO^X׽S@>o)6Pm~W{w WpbAriѽ:u>~jk'[;;LË{<O.|U^n0ljԮY#vakS`+v¥)AsP/Z5sJMKZ;5tYcsDbgwyf'sIF^̮Z q
endstream
endobj
-874 0 obj
-<< /Type /Page /Contents 875 0 R /Resources 873 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 860 0 R >>
+882 0 obj
+<< /Type /Page /Contents 883 0 R /Resources 881 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 864 0 R >>
endobj
-876 0 obj
-<< /D [ 874 0 R /XYZ 78.37 808.885 null ] >>
+884 0 obj
+<< /D [ 882 0 R /XYZ 78.37 808.885 null ] >>
endobj
-873 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F20 382 0 R /F26 404 0 R /F52 376 0 R /F41 377 0 R /F53 645 0 R /F51 380 0 R /F29 375 0 R /F15 381 0 R /F56 384 0 R >> /ProcSet [ /PDF /Text ] >>
+881 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F20 386 0 R /F26 408 0 R /F52 380 0 R /F41 381 0 R /F53 653 0 R /F51 384 0 R /F29 379 0 R /F15 385 0 R /F56 388 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-880 0 obj
-<< /Filter /FlateDecode /Length 6350 >>
-stream
-x]K$mϯ(P#bb;ukoڃؽ#dI7w0U
-3ٗ 'ZB6
-G%$e2*VEyp%)*ɹy_LWԁDkW3ؔ1(՟MRsu,'F%u%7Gg&i/ș =ҫ7y2gOw>8??Ϲ'Mخv2?g8=`|2j's
-H6锓bWV7
-Mu&]lMO6t,66pnXa㷹ݦ Lmxrm}ݽZӭ\靶iքblsL.[SSڧ(!~ŶG3o!Bpor{MiN3S#&{ksG\ZSKmʟOoL]&bT3e3[jr)#qh?;W^j;m2p<myiygcقR)3lO
-!G6waŻ]+~
-7u6):So
-?`[Y>q9`p榸#?R)~Z!٫mQ|L`(M;iK|TbOwxK?
-MbIO7V5 4a7({nE|.49GSFfڅq RR$-
-Բ#H
-OE-;I!)ij"A72FzT8t\-÷"(Ys?ޢ^ԘXA uḹ(;`@ҁ{zk)p`اSMٮpt#(K}G)k
-Bomz^Nkl-QZ}Fo)$L.VRuFk-[
-pp Iqtln+fYx.=v~N~4c}z_Hk,s65W#`̈C,/@&(Ȫ
-~vW_0 ӰgA+aA;}9W¼-6k9qJu
-:9F\88:x B O *Ewu&!L^¡W$h|JІ^o+ATlJx+A!)z7& +hDle%M0psI].I?܅]6ĸ@)$n7uIsEXrIbCEBb[5CYb8f3G:7<.g~OG*,Cߘ/%κ% <@`mޘ%Xnqar-PK* KA*nl(7cj쭡FTke[dk (yXeT>$?p6)CQ:Umąq-ãi$wl !MŁW`69Qkul4Da]#Q~.\e׌DEij1J[>!kG7+zl^'ͱ:P|aC F x\G}b_5C\4A&m|m1R
--{O?~~ehaji.G;cs NAlf_kIю8DTn \?HBb~od ><}'uV@u}Č].ѐ*p9CCIjkfOT ]n_I^m^Ȗ
-<VYI|u^81IV'?aךpDDcWNg'IeqIeأde|ɲ3HCOc"{ b*U4I <?XgfDD3 3'ZjgH29Y"xL(/%HwMhaf@ІM f̹N$[G$<cAxEwj rI_Si|eLunUD~NɼBGj# 1`3t~b=/-[~ EJEDD%G9$.=Z &
--W SqVXk5B[@l!ql!р <9^VxX)SS[=M[=F[GBTXlbU@.HUׇ2̛PQ{~28B1Q
-nrViWu7$!;$FS3MfPd7qku,c-Q›zy+_}(
-
--ZsEۓ~Bxm>(%NpQ \
+888 0 obj
+<< /Filter /FlateDecode /Length 6087 >>
+stream
+x=ɲ$mEܗVK[supqſoK&$3O-U
+Z0x/[Ju g
+û,-`շK ?BF@|,^
+LY4gPpΣzhcdjxjd̀R&A9$j8Q*nP
+0St
+/,$JZ_L(D)a|xKv9ܴZpe TR"N8WN:sUdUba"ͣ.Z?vbhGwLZU~]a n2xށ72LxNv \:y"'MsIzI;c%E -N&* MtQUXs8Ff8 j{NS[qkj+ҳl۹g5 ågjԳúM\L8$E)|7hXWfM $DD5)8IL:=b
+LdIs2xˤ
+xs7M7_&r>o#$CUͯBӆD3x#WXbMRKV4؁@:7)i<c1ve`u4)Ne|ndI" ?]t~k01Z#ZK 3*N-#-c:*Fئڀr1|. v26+c#ߎM NX}9#XN3/sqg%qF]Smݜv 2Ata D5̐]dhbt&WVPmథ@I&7_oLhD;&ji'@ـr,Ҭ&Mou 5A5$E)aF.*7c=Y冦H]Unj;ea+V2[LɋXV
+11X4hL;_Xfal%&Σ\~sXFaPa5JX2)+˙%JJDaI&%;<OO'iNR%'!MI{8I{tOB42MJj,q ulQ Ii[İ4J QbEBپ~Ti"*BJ
+x<M%p]_WWIoZT<S5ԝVif-?2?TsU{+|Ely[k2?]7OT'_骑<E` T]i.Mt uZpgpRs:0Qa28Q34 8M |ڥ^%IF%$ PJBN5X$݊89I׈#/m)Ip ظ2\l虐nX-L;1ۖɶzOSmL[thl4)B%em($KPIb[#
+[P _
+w^3V2rgj&6O[ k3kC* W'jPcOTL)jyI ~OJ<
+w m~!ms/wϙVNo^a
+Yغ~BaۻG aoLX TnapgG
+ z_& *@p
+FH A@bdV}ܗ4s=\q
+(W42o rTʝʝT+w)7AS66`Q8j
+WsLH{΍\):?Mn{@pW6w+s ^~pm(ߕ
+~FĕW~W剶RNV` n&Y4ן>ܵPRx,Ot%]zu!tYDGk,ԊUS
+WE?mYBK_đAJ%>$:2aD1u!(pֹXNnDTz ~E
+)4\X-I Rا@c|2 $b@'Lc:DHX@ g7+"qmO!cv)R}*STΧdO@gNJ4q{yĿh- &Zc4bq ujB&
+S2sPc%&w :DDf?>yKDE3]^Y%ft ^e<id {"ǧFr
+>Q}4S+o>B/,*ּ^ֱJI
+ XSQyNa>^èD)Â쯦(|^KHz&Kx CWkk|(DZ=h~^M'wYAWu"se /^ h8E׫]y݇*ބ(^c!79;m jA$BMp&aSNnn/0vt;,*( (Ze<j !~(|Jy9>;㢰`ű
+h:6 \`/r8kFS%)L2vEm)}4 \ 6\h%O`e:W:Ǿr`Be'keNs }K^-I@:m6t} f-uf85m m\t_N*}BRx.$"*Nj
+6 - ,-,M
+JB__$V1vd#ʿlVo|*@ப=M>+g&Χ@|ʱn0qϰS`vބy/}k/ .8mńzq7>Eךd%6LD9n߼mw,&qBqH'dlgU{w(k+6M7~^:$8Mi`}
+Gȟֵtfm/O0'o#q=OV/KBcwGj4Q<g6*maeR2.4RDݜwѮA':vĮ3S"ud;UfhF(6yڋsh֗'$ǞOդ8}ΛSXi 虛!{ `"fa!7BlHq 5r%6ÈS_QK!ȰO\_比f®[G?286r{%q1\.Uz۲Klcgޥy)
+ˌ6KIEoA$|^4I0xcEgjMc6G=صr
+>.BNoxUK7Z8 ғ
+oq{XS-&~l|Waz1 DkT)W[5Hh2WAk0D]Tݒ^a:dӞ5&wXlh- l~A襹j~Q`)詭TgVHdS'y b* lҰ!b* _.r+[-$J^Vﳭ,)Ұ!
+f+ ,)Ұۊ T^sS+;NmϦJÆh*t64lJfn*#+=L11H|*اO7eg՜5AD::
+H~7 H,Wsr|$1;GgW2}h[6<ח}}6~-dr__B0_~ϐ~GwH Op˜/߿R˚p p{xO|X%49Cb<O-UZ(-9%GYKru09mr\T!2~]m/[Ir{O笎'IW@e+R,6ܛ^W-́6PZq4
+.e8UAu%JJYzohsNtG
+}3
endstream
endobj
-879 0 obj
-<< /Type /Page /Contents 880 0 R /Resources 878 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 860 0 R /Annots 882 0 R >>
+887 0 obj
+<< /Type /Page /Contents 888 0 R /Resources 886 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 864 0 R /Annots 890 0 R >>
endobj
-882 0 obj
-[ 877 0 R ]
+890 0 obj
+[ 885 0 R ]
endobj
-877 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 258.666 75.503 269.123 87.182 ]/A << /S /GoTo /D (subsubsection.5.1.2) >> >>
+885 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 258.666 67.03 269.123 78.65 ]/A << /S /GoTo /D (subsubsection.5.1.2) >> >>
endobj
-881 0 obj
-<< /D [ 879 0 R /XYZ 78.37 808.885 null ] >>
+889 0 obj
+<< /D [ 887 0 R /XYZ 78.37 808.885 null ] >>
endobj
-341 0 obj
-<< /D [ 879 0 R /XYZ 79.37 539.971 null ] >>
+345 0 obj
+<< /D [ 887 0 R /XYZ 79.37 540.353 null ] >>
endobj
-878 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F20 382 0 R /F26 404 0 R /F52 376 0 R /F41 377 0 R /F53 645 0 R /F51 380 0 R /F29 375 0 R /F69 402 0 R /F15 381 0 R /F56 384 0 R /F58 386 0 R /F23 379 0 R /F57 385 0 R /F55 383 0 R /F45 390 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
+886 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F20 386 0 R /F26 408 0 R /F52 380 0 R /F41 381 0 R /F53 653 0 R /F51 384 0 R /F29 379 0 R /F69 406 0 R /F15 385 0 R /F56 388 0 R /F58 390 0 R /F23 383 0 R /F57 389 0 R /F55 387 0 R /F45 394 0 R /F40 395 0 R /F59 397 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-885 0 obj
-<< /Filter /FlateDecode /Length 5085 >>
+893 0 obj
+<< /Filter /FlateDecode /Length 5086 >>
stream
x]K$9nȣ4ښZ>.v/&%̚~ŏbRT?_OT^%4\P}y^TЗϿ\R'`|>9(()Y T|dxZD?XP45qDkh^?H\ۅFEN.k~^Pʖ&Щ(mS5HE MAOMT!PS EK qI_;FoE@Cڋ!Zk(Hz͊?b^BH0
r3W(;WlӐ
@@ -4032,19 +4171,19 @@ FJB ~ TYbiH&#m!J6@V`;X.!sl)s`yuǤnImx8ݻ1@
J- +1rIJIU[d.
YU/RbzSAѺWg JPKad]O`u Nym.fOۂͅTn]R6zY =$JJx-
uU3aAkk%}wmː˦55;qSnm=ז֫. 5ؐ@pK(;RYoX` $nj{jK&UP6];O:vY1e|{xrpSw)MC#]Xh9FSz4ayh|4q``h6XM9[|br?L\剳ߪd[u saυu! ⮈+I#y7$5X<0Oد25ġɍ(h̼fIj> sc,p2 +*qphq0ij[>7B9#Wo@A*Ow;ħs! p2>$ݏӦ·+6K<
-Bd>~]g'W9dħ(m~ om<luIፔbm'si>qٜI8Z6g޹RgW6Oz?xߤEXfэc~4'6ul+vѿ7-)®Mo-\xxT
+Bd>~]g'W9dħ(m~ om<luIፔbm'si>qٜI8Z6g޹RgW6Oz?xߤEXfэc~4'6ul+vѿ7-)®Mo-\xx SOP
endstream
endobj
-884 0 obj
-<< /Type /Page /Contents 885 0 R /Resources 883 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 860 0 R >>
+892 0 obj
+<< /Type /Page /Contents 893 0 R /Resources 891 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 864 0 R >>
endobj
-886 0 obj
-<< /D [ 884 0 R /XYZ 78.37 808.885 null ] >>
+894 0 obj
+<< /D [ 892 0 R /XYZ 78.37 808.885 null ] >>
endobj
-883 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F55 383 0 R /F67 389 0 R /F56 384 0 R /F29 375 0 R /F20 382 0 R /F23 379 0 R /F51 380 0 R >> /ProcSet [ /PDF /Text ] >>
+891 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 385 0 R /F55 387 0 R /F67 393 0 R /F56 388 0 R /F29 379 0 R /F20 386 0 R /F23 383 0 R /F51 384 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-889 0 obj
+897 0 obj
<< /Filter /FlateDecode /Length 11642 >>
stream
x}M%7ݾ[vø9oQT hŸn{Հg8dfwﭪf
@@ -4090,1582 +4229,1594 @@ lo
%P
1PAg+"t$wJy9*ԭ0R|p0Ep RT"zibّ Y.|p=>9ĶÕ| #Ѝ ؞@Kq^EHL Y.v,5I
Pj@bZWTy.ģZv+}NeiP+Q$ЪA) R̈́ ZyHb|}.x?vϾ>Y*}*ƱHn
-co?CpS|O}ɛi<}773_1A<7A/LP+s);k1ԐmϴcXﴓuN0E=,"?ϲME^x9lOwMxw5FP`&nV=7t]y^/0& ( a_aNuVZI ar9H QA2L0;Hi+5i>۽\HԾ!r &#d\arw3҆݋#>Ր~h)Ly!5Bo{%WuV7*{OhamX/C<k۽\<ݾ[O>zK(M~;pK~>gdzY9f~o~l̏d[iĸP3F Q#ν  ל=t8&l!U'ZbAhyW*M ڟ`;z4GGHٱL:צwq `A?5O6E v;VoIح Kرl>(73k˿7{܉jL;Q
-endstream
-endobj
-888 0 obj
-<< /Type /Page /Contents 889 0 R /Resources 887 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 860 0 R >>
-endobj
-890 0 obj
-<< /D [ 888 0 R /XYZ 78.37 808.885 null ] >>
-endobj
-345 0 obj
-<< /D [ 888 0 R /XYZ 79.37 639.272 null ] >>
-endobj
-887 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 384 0 R /F29 375 0 R /F23 379 0 R /F20 382 0 R /F51 380 0 R /F69 402 0 R /F15 381 0 R /F52 376 0 R /F42 378 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
-endobj
-893 0 obj
-<< /Filter /FlateDecode /Length 2911 >>
-stream
-x\͎S%
-@@+,osB|G=amL:]3o(δp%7D;~Z$Hh
--Dk$-H(Pi hVQ!u#F%(-guS&fy\7C&^YE
-P挙N~O`++VdKG}b(fF{X/~`&g7p><FGIMufb<@@IW˕7be^`|V4$#vҺB Mb")w'B%̬FC-9P7UQWXNaũZ:K Y}bfWd :jh3Rywh!(ސԐ*:{\$ vRKlݳhJf)tޚDN&ΔI4-.Ɋo<1v0\m0i3LےlY{I&p?韪#pCpKabSp?vQg4cE)KƖf:Y-黯kj.ӑt<LkSB ҝc`$ykC8eZ߬Xi,uP2Q*M$Oq-c,SWd57R0t3y%-^9ȼΥNzT~(k3ʋPw͋TC!,|=v<" O6>Kԇe"0b>`4_]SB.:Ow"F^I:-v;oݵ>%ycs1u[[om"c;WqZ5qrV?՚dne]¼/5dM] :Lx!K5۵ TN⦕dV%kci[X֖Fhy~sʹaQ՞3y-܎}SnCJo}Vmh;Y?U.vI K_P?{g
-vl_S)c/唶<f5ʅZThǜ gfAL?{K14@z(~)c"ӿL]̯7La퇠i-~vrҡK@
-af831[@n$>L<yF
-01IzNy!ƥ%)cfN3O?G1(ܳM
-+n1\7%?]4L.̘nt-3ҪM#e&̼mMaf4F&I3oMqu0/AgmLOaZ 8[SpgX1 {ff$00)i6]PX I~uK ܥ8
-;[R͎ $ޱ\.,,en&\7f$sy+|OwXT/JoI<KeNR{]$޺x;Wpuq$޳6.^fGn3𬓿e;lb-0x/O{` ђ\vN󝲾f$=VvJϘ |N^딎3;Ǹ3i瑴Z6LTKf.+Auz$[rLf(e cbQ9i)G7In?nEafx7.gty~?VCwq" h"FüoNуx1
-=~%<7KJ!#EjyFWy<7=>^'hw>o%չv-1}cTa+):Taܜ\uo}lO3%TQBXb9M/7
-pi8āׄ9 ),ǒУȶ6迾6ކ
-endstream
-endobj
-892 0 obj
-<< /Type /Page /Contents 893 0 R /Resources 891 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 860 0 R >>
-endobj
-894 0 obj
-<< /D [ 892 0 R /XYZ 78.37 808.885 null ] >>
-endobj
-349 0 obj
-<< /D [ 892 0 R /XYZ 79.37 771.024 null ] >>
-endobj
-891 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 402 0 R /F15 381 0 R /F56 384 0 R >> /ProcSet [ /PDF /Text ] >>
-endobj
-897 0 obj
-<< /Filter /FlateDecode /Length 2041 >>
-stream
-xZˎ+'W.
-(@,#e=(dߦx?w㑓<f]uh~O$
-Ǜ8Ǥ9m238W?/Z l?imBqtoιp' q@ywNqD_~Şӓ>R7;?WyizZٰ%8$0'(f}+p [uw3)8 i"
-npEdzBRTڢV~Na%/~WdQ_:#`(49&n\7#G \I)׈䮖HI($Y %t\b8΅ bkCFlu~īPAF. nq]';C=#<7]9Z p[[_gƔO9X)Y,:c!0:7)Knqr&+P'=9W3>ϡ^
-
-%2gLlz0ˑV!֕ u8*<X tnD^y]UȰ/H|k$VyH俠[e sŽB[9ɸ_(}1Bh+lZ6%_+IF3c?=X6Y>㡹h!uۃ .Qeצ-xuYR sz8B$Z~KLOq)
-1<sZA\INc\zuW^W2 ʃ"gZW/d><9ιx<YпS,,檄3<JnH7iuTʒq^##ɵ] cm:qOp
-\0
-R~>ڷewMw4J ̂ϛ8J@"8Q鵊9>:cK03xZE:3^f)~"h&OTY"H$x%4-XU&x#l|轉rF3iU]X$UM5P}Iw %ݷz4Y?ܖq1+?XIRGk\BѰu
-+^Tn(&XK&2YrN7C퍰ґ0a O%:C0ZBVy;Bk_XfLoEWGwnTA(0POMr
-fǢw)wXEBzv,
-F6ed1SD;r> >I,Lۡ*j~~ ?;
+co?CpS|O}ɛi<}773_1A<7A/LP+s);k1ԐmϴcXﴓuN0E=,"?ϲME^x9lOwMxw5FP`&nV=7t]y^/0& ( a_aNuVZI ar9H QA2L0;Hi+5i>۽\HԾ!r &#d\arw3҆݋#>Ր~h)Ly!5Bo{%WuV7*{OhamX/C<k۽\<ݾ[O>zK(M~;pK~>gdzY9f~o~l̏d[iĸP3F Q#ν  ל=t8&l!U'ZbAhyW*M ڟ`;z4GGHٱL:צwq `A?5O6E v;VoIح Kرl>(73k˿7{܉jL;Q
endstream
endobj
896 0 obj
-<< /Type /Page /Contents 897 0 R /Resources 895 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 860 0 R >>
+<< /Type /Page /Contents 897 0 R /Resources 895 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 864 0 R >>
endobj
898 0 obj
<< /D [ 896 0 R /XYZ 78.37 808.885 null ] >>
endobj
-353 0 obj
-<< /D [ 896 0 R /XYZ 79.37 771.024 null ] >>
+349 0 obj
+<< /D [ 896 0 R /XYZ 79.37 639.272 null ] >>
endobj
895 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 402 0 R /F15 381 0 R /F56 384 0 R /F67 389 0 R /F50 374 0 R /F55 383 0 R /F57 385 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F56 388 0 R /F29 379 0 R /F23 383 0 R /F20 386 0 R /F51 384 0 R /F69 406 0 R /F15 385 0 R /F52 380 0 R /F42 382 0 R /F59 397 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
901 0 obj
-<< /Filter /FlateDecode /Length 2255 >>
-stream
-xn37SCrH Xi*fxsI.mT_/<~~Gw9|"qLA8翗?qo;suW
-6J=qqi?txDQ[gt"%=e3Lҵ9wIB \Ri pAT# k𵁟 `炄Ѩ;k4b-Z2j RPX r1K'AQ( g#աӣ |"GΝbFy*~ pu Dy `sv mLex?B% w;AY6~jf.-Z9('afz^0#$#%}s,zzl}chj/?,/8A=5%7_p_|Ί};$9&cV^Dߍic>hЪf;hG-/0iK5Y?Z㱥YΤÞ?ig|?u0} dfl}jݡR%dL5]_`jC%KB7u\mt,J+pX+΋5tl2ߕِ]GSOn3a}N,]'8_Lm`ADbJCg mnɜɍ8Lh t ccmˁRTMz1P
-Q?v)R \ׇ[jjK0'umd =U=ߠ06dS ̱] `0Jk.D2'}KA dVseTr=fXQYVh19N1
-Ro svj{s0_)+8쥞"eYr\xmT*G&܌HZB\q2E=lyV!y
--6vQd6q f5,`fsԆOtᅱYz6m܆hc  cm=Bɧ>nytae*`OޱL0#Zʕfᘰ'<̲Ia|q$%Rឩ}}[t>|9嶬?LK#I3upu+vQ҈{R\M|fXI1Ogj-ؿ͡',v ;B,H ]\$c)99Y#L;ެڎ'7/JrC<h,TimJtmʹ-6$+r~Q4h.?o!Bifly{lNڝ-aζ5*[B%\ҜSOL }]p?g}H94H$.͉}4cD T"# lbJMHnDz}F &ǑIL+9@9$~cw<2ؔ"?2 IrvY
-~݋f}۸5<6&tU<rr~`}F2c)Ӎ$hP&a}sev=i;
-> jj;Hyۖë݆@x-cIEfJn}Zapxum K;x 69>R`y1JB; ߷GA&wUwoA3j]-tA7VHM]f2XR[Y$vX)M}2Ep23[ҜǙBеFީ1t2,
+<< /Filter /FlateDecode /Length 2908 >>
+stream
+x\͒S*Tv=[6[*'WC/ytE֊"/>xݻk-W$&뙴5q#/_ϹΥģ߭Ǘ ^WYZߌ\!Ǐ{6<* ouݻГgހQ+Pi JPo, !w
+τ?wls;}Neq*=Y[=kgWI&%/}
+<CҞ)ر}MOYSu+(~ԢB; LX=3 b/XY9C_?M非=m4g`~a
+k? OA󴰛]* pps >i7=><* GFCwIapzRnt;tCr;
+tj-iBly <)7=UDǵUcLc=*7KtLy28ƭ8>'F6տBbbejO!Mahša3")-p0patvͬ9}&a)Eah]7SRsII
+6r
+J{npֿƋ:]b;\ \9nh A?;],>~q{@h`XNjz4校>,\JXDZPi`;ٸv ikr*J;iwEgciV$6[I<K{-;a e${f<>{U(3I|N
+f3ռt6LfWx܉
+O naf83)$a^:qb$>NLpY8<ŌprV7)pݔ
+tu3 Z2cNuӵHW7l,3U7
+f&wHY75
+}FMüY3=ak1JHoULqfy`$3LQ56jwկ*Bq
+Ksv6;܃|fwxN|>rT:;q/϶cF~pQËbj0qbxGOM7?MaMrS(e2V&,=;K{u.;v3{ \.AvxȺx,³Nг~p㉿?e34FK^r9;o7?XE)=cc''%;;yS:sϬQ,nGZk39S-[FpFlAp1٢pۋ.Tg#ËGh $='I3
+Hх QLYʼnL|HUn&;9G90^3+|h/) 9YR_y|Wh{ķOs{,}Ta[,=R^Rn0ctPvRnmtps:N:sս=}ΔtRW~^bD aU)`:bïn
+ءBo~'ڋotK{%]´fL͂ $嚰Wwy<o1?[j07`Eqm/8
endstream
endobj
900 0 obj
-<< /Type /Page /Contents 901 0 R /Resources 899 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 903 0 R >>
+<< /Type /Page /Contents 901 0 R /Resources 899 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 864 0 R >>
endobj
902 0 obj
<< /D [ 900 0 R /XYZ 78.37 808.885 null ] >>
endobj
+353 0 obj
+<< /D [ 900 0 R /XYZ 79.37 771.024 null ] >>
+endobj
899 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 402 0 R /F15 381 0 R /F56 384 0 R /F55 383 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 406 0 R /F15 385 0 R /F56 388 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-906 0 obj
-<< /Filter /FlateDecode /Length 2376 >>
+905 0 obj
+<< /Filter /FlateDecode /Length 2210 >>
stream
-x[n#9SZ+ۓ`}R%U=lQGJї^o~|ϻcT /B(?_7]kCk+@k w<{[!_r'x^2UthG,ʚPŢ@LO+—wu{T r$]fi\9%MϷ Qyi2,[7p0ZI}VZeʹ+_ Ko<`Y>o=b[~^nY^"QBmX4! {5&f+_ Vs&k QP
-!Ђc;Y{Uo+,}AoNQѨ$g+:%4ˆٺ <A5=U|{ rmGysyv*2k92+tk񽊻|yy~Y=;K+m8cvq)(].R32H4/{ɤԲ#\[%
-dn5> |1:/9$Vy\[ֵKJuO4pqrj!jY]K /;j@O/uK)۵Z,j"wr}җj,ֹdD;NaZ5 8L m.<-OGC難 lL2{j~Uv 8{^UWBj݀8V@^IX!lt!
-dCXg%t片#7
-f"{|.>[ЌVoȝy'[F|ַ׮É_Bnt )VdÙHRf}JJx5fur3ZT>|a"#ET@fsDI%<!OxxgvH@ht Ɓ
-5ywwrc ! lorWwmapWV!u|2Ɋ?Vi= M<֩MעP/KrvS}ȅ%Dvug}H
-r"jrq !Q20BVY/Bm"LR1gf50ʹ? &{!J곈
-&í8 \}L_E8 jzL;*_
-C‡M7G2v2bFqfB\I >R+&h~0Q* TFa.`B'Zp;n~z?H*
-I =h@R3ȝ+A(O'CT g͓Zz6#lqdxyf* WaWBv~tX0>;]n߉]}Xd9($xzNnF³XF^Ȕ{0Rp4fO 4Lp/idCq~DhgϠ0*"Ij'angBj%C׎ĕ|?9;eؤRv7=pg=<he7#?3JϾjAҢm{B4qgAw(6{TA)5tPVߵX
-[aƳ Y./ٷOԀPhA-<WjqN~^\E??ڿpe)]h4.pPU
+x[n$W @,tލj;L\rk(م '寋~^?~qPhpuq^hwq:u竔_oo%QW 6_7L@O)we.^x w+t%wRMJ.'A:7pBIٞ |-|/O7xMov4R\I' h^QpV8pSL"\P݉δxDШ${tRSKoYYN>JU5.
+ĕLM{2d'
+hrȒV܌غۋֺs-hIjYD^f>,$йgwيӅSk^B,|E3,QF\0Ќnj:g;Ci:`}\ǀqC$N7qgwc*v,c@]-:ѧO8bE8-୮EnqvJ)k2XV !^
+IPM&)Mn@$ك7Ƞi*D 1p\`aK|M|֔0gtd)ݦndK
+K f98T; W[3%T@'':#µs6|?R )O4Țᐜ]u0Fؐ$;4zﲥUJ-J ]?-W`N2]394b,g
+>3xKRuLDض ?a$zJ<E)j˘k.zw8Bi.71'S+i`1 a<`=J8:cʀ 4@A TONACZ5
+<0+F}tw}W5cK`66N]cMYuϫޭ +%&vrjٚ[{G7 MA ri97 (2($ $a##pģPXB]QN cw@P 6qd mHyځuQqGǟvDiǕ,ʹݩko_}Xpcnh/$~{{NyyV +7MڬD]Mt9G߹_ZfpLv-pꘈɭ
+n8yNzW_1LٿnVu-$\e;h7֧-N9ꑣA^OmZHal-t<H%2FC@/€(oF'WE pOyplː+9jm<,}E7Û4cml SS | Fw8 +@$0ֿMJWʩ:̭KE䘛] 5l2EzQ~T9=֐!z3X}sO[>Os<Oe*l*Dmn %6 9$ٳ;%qqxr_ĉp'K(k-~}a
endstream
endobj
-905 0 obj
-<< /Type /Page /Contents 906 0 R /Resources 904 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 903 0 R >>
+904 0 obj
+<< /Type /Page /Contents 905 0 R /Resources 903 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 907 0 R >>
endobj
-907 0 obj
-<< /D [ 905 0 R /XYZ 78.37 808.885 null ] >>
+906 0 obj
+<< /D [ 904 0 R /XYZ 78.37 808.885 null ] >>
endobj
-904 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 402 0 R /F15 381 0 R /F56 384 0 R /F55 383 0 R >> /ProcSet [ /PDF /Text ] >>
+357 0 obj
+<< /D [ 904 0 R /XYZ 79.37 771.024 null ] >>
+endobj
+903 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 406 0 R /F15 385 0 R /F56 388 0 R /F67 393 0 R /F50 378 0 R /F55 387 0 R /F57 389 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
910 0 obj
-<< /Filter /FlateDecode /Length 2649 >>
-stream
-x[9+&|/MVv473S.@fίrO߾Mo7q3-?pss5|GH{ x)G>oh ѷQ"nFKO43{˿A2
-usir"L E?#7GEgp(.J%IDcys&D̕MO'
-eA_|J0x0Ju % Y1͉p&
-G)C5BqOwz
-޹eC93\RW{rf? rVyX|#JVJ#5OvzR Փ2d`2%Ȉf@pdlߗ)egc&;v.YkvV* +E[hj-XAMꘄm2w%xbZT= D*MqtPE7szSr3Pm{}
-VdgyNm΀tGC$>`۩c
-tP ЃIeiA: NDwoke!eَ0KKa?Eʼdi7mZPuo<Kb7ãFSyLWLZ,Uxb %
-#ˆ[Q[ eyN9O'sjFJ'X_``mYgI:d-ymR ;dLD`gpɕ )n{047`T>nF#)ǔ>41m<jatGy4^#RAUPF͙5Q;>j ۼ }byʁVR^6PFfUsvwP+iG.4{[@qaꨜEf{;Pb"u8ٻ><r f8o5 LQ۬Y=¡l
-DS
-G: pǬ+MkN4W)#;|FU !·q[}4
-.cN>|ԣr'󣛐 O۳H]׉K?U>2[UvYb=u_ur%7u: `
-k{uJWS 3 6I
-Cr ar}ĶSAW=.l0\2;#ߙ6x{k|d}EU! u?hMn7@.x߻raK2$8K?#X;Pt/$,ȿ-ُTUaJv@B. ly6"Pt!?!2SfR8hoQC|cHZѣY.?rCz3olwΫlB3ñVN_†Y`rY0e*f:^uS'Ap"-AEj:Mw.Α#3o翏8a5.+q[]%Oδ!JJ6({FTK[dH5ȾS~?^_
-4Ds7=jfa!N%E*wБqH fnА4qWFggkԦiڤyzB]Jl7ۘN7Z]Y1_o
+<< /Filter /FlateDecode /Length 2148 >>
+stream
+xZˎ+'SB3lUR@_²ݗUs?^d~ᢔ*wEyQvJHT/ޤRw)͍~_R"Oh~5vZŏN;(#!KOx'_e&c|-^ɧ%f!*̉h+ŸB⊢RA8F8a"f5k2K<KK5#w'b־ե`Y]c8:zNZ}O8
+HLQ--fd[}`U"+d
+S]"yZc⇮r㣾*gla]3Hj|'R#nkxp]G+ILT3^H*;S' uuМ%L!ʟ&y~,Ӯ4EEI?y4J(ќy 'b6+tښ?e@?Q3;V{w<'W\]ڭ͖_zLkpZH5y`iZfK3_):w3gX a\-FVEqKݫ":+z&\SGV(j6(4fz"\cI
+^K:rpk(LՇQɼeqӼ:2,P4ЌY.[It+ ukOAj\p\FAc<D>KXRp^^
+R@.s˜oȩ|J%̀}UWp׏'mk`<$oO` K=SbU&n)bY
+ڋ+0HsYn9 @/ig'QZx5шd\zal\S&8#AuEo,hw =i0?RW`"Q%G{[A}/'Y'9UPad,=PWvZ6vza)FS,g|u83$G|94Drܦ^kOz6>l/  z\1y$>9uxн
+p)w[KXlfi4HVbY&n8eʺ+ibeliLM;-X<݌gq#wq{M}twL6mk43r Ӎ!OF*``ה8Z-bs 0†gjzz};0]08`'rCRvU(/yH Zfr7t򂻱!1Ax31W Xtmxo :>Z[_DFA}l_Uk7(zJ^
+j2<Jc?c!FLi8#첼_m."nzi_lվ`/x6=AkX8gB
+;EC~7б j'O<z7zR8e)PquU&n~P>&!zUn.Oyt7ݍ6O"GO xoDmV-olu/޴Gg3f t5fɶi;r"cс~`w+3}߈GebGɜlhM~|2jR ߷G%𷦠A8G
+|\Pk3}~׹.soNqŌjh0
+m~U]mb3vp'Ls4RU}ԑy{xsM$ of\}Y*צj֙T-tVN
+ aEx-4m"l#(h('x႑\x_jI#g|bj;SX: 2ioI&=P75^_Ύ
endstream
endobj
909 0 obj
-<< /Type /Page /Contents 910 0 R /Resources 908 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 903 0 R >>
+<< /Type /Page /Contents 910 0 R /Resources 908 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 907 0 R >>
endobj
911 0 obj
<< /D [ 909 0 R /XYZ 78.37 808.885 null ] >>
endobj
908 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 402 0 R /F15 381 0 R /F56 384 0 R /F55 383 0 R /F23 379 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 406 0 R /F15 385 0 R /F56 388 0 R /F55 387 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
914 0 obj
-<< /Filter /FlateDecode /Length 2517 >>
-stream
-x[n$9WF (pVVgs>_%*6\ ۑ!;)Y?OnJ`rS􍼩 BJHno.%JRR~v&7</w/YࣾdHQyNX{zJYT&1DI)s "X!JảjŹ^3왩E]bI"f#M^3EQr|¹>تKO(] _hXH.p@n]#j
-Y*+uҀ'l|ZČ^TD=mq$?F"Ogf[ГѲ9Tӛa_&C"R!LOFŭ-/,۬FFV;NJnL~'A S.>IJ6AyRuC(Y5UDbF6B(F.sF(ϓ[
-X8P*DQ5O `~MJ,q.u?ðih6}sMFōև@ːJtœwJ
-IᯭA
-\(DƆOp(dz[RzNʝIg)S']+A>-ۑ]?EhERR#
-G8Q:"(л->`q71 R+Xl5sETm
- og5#E6b-@7z:4cj?6R ZsYkԳr"V>Vh:nwINTúF+
-2(L0]ܭwdK{6<g'1*M}8@ -_u4aT~{%['WƦ0 ӍkC(GpO!iϜ 
-\pz|<@QK
-}e:XӽWmru6EbwᵑT[Gxv銒[l^_Q),`׭A
-i;<$e~i<PCLDJ*fYuN *J߻9%GluAA@:3Dk+G5Zf.[hm_%Zzr i Ã?wHkJ T ~b(?߾ 7
-
+<< /Filter /FlateDecode /Length 2276 >>
+stream
+x[n$)S 4AdYruGڳo& T&Uvk|(L/
+ =]\&' _]eztß0$Me 7z:ˏ:YkduqqVg-pJw-fg4Yd 6w]`X6eNLLZX=3:f+k؝H%0*A'Нqb5ޓATUCY+Fd1St'M$a$>kz&5]м~.9sEd}CN"y#o>O:S"Y4qOnR,Țb8[`5I/rWb{5z鈇K9uÒ|RJeY_^Ih(fJ]BֆN,jv$f@X=rwME)B~Hwd!d}~%+'jZ^%:PhK\"p,CNo mP6gxG ѯ`IB zʋ)0$elN )[:jqQ\M>+H+ҵ$b?
+ McK3M8b;wqK.'X ` ڭ }*3i _=^VfkA /I☉By(-{rE{h #n/40E
+;F!6L˸!P̮]I(NtbHnku絰N5 ֪uM4:hi7"8L
+JOn]6F-jm-7WwpSȦ殷<*.;$d
+מb`SPqK)@?W!T|Q84!,s%4/5ǩCn7:ʫ5LyK&>˛WBp;#v'\-քYϮ} +˺BI Ѵ=*B",ؼYY3QOm"RLOtz ԑV2":&lhdh3x9&(X=<Axxk&f(Q]C<X@7yw}焥~ݭn* [kśA4IjK_h ݊d$"[)[x[p! e|a)mWۆcoiW/vy&}N‚zRFes0[S`ꞁZsBBhP^gv1k ҩ~B^ZW>=e
+g\~jrB*SGz(*=o\u
+0`@ M4a͚{{iK6mL)SmFcw"5{KwA\TmmCWKEr t#Cn%gG'"Sύ-%R8U0{ > ߽ie{x$7fgZ)@uam
endstream
endobj
913 0 obj
-<< /Type /Page /Contents 914 0 R /Resources 912 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 903 0 R >>
+<< /Type /Page /Contents 914 0 R /Resources 912 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 907 0 R >>
endobj
915 0 obj
<< /D [ 913 0 R /XYZ 78.37 808.885 null ] >>
endobj
912 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 402 0 R /F15 381 0 R /F56 384 0 R /F55 383 0 R /F57 385 0 R /F65 387 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 406 0 R /F15 385 0 R /F56 388 0 R /F55 387 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
918 0 obj
-<< /Filter /FlateDecode /Length 2440 >>
-stream
-x[n, S E
-+}4ZR Nw?iWKs"(կ#V[70j
-KX%cC,N6'@~D;~kLU);:c䱑=?J@)P9SCKq}U90w\f:y<Lr'2 ',)E6i8 Xo+M XB-M.ڻh82#m~{
-qu]AؠY'cXd֡(Y5+>WiήfX{t8J\z
-jPUzKTlLBs;bX(u9M~PNoVqN3`g*#
-|!_
-m6s\g"%xJF%R+quimJ}%֑%Vmzg)Ew_5mQ~OhFAu'C𬨨uVQNm}-N|¸1DPB/*]7
-濴ǡJPSK:N42 ' Z̢V XtڸN;):XJ<ey8)+u>̓
-l|LɗGHɖ][Sl++ALa zGpO>x'3M</EGV oc}1)tm B!OvSb2BBn9"[WZ~npO#;$"Wb
-E.1cmzF)/T _Xrsr.w j%5h+PN&*r\e+g|6--B2 Nfiu?s7 8Ӝ:
-feb聿q=e&M]p ù( op;oyUwO
-ճ;+ 5'h06~VsmO%٭:QܵђF>(̾[ <>`+.(gW\NǍ08lt'01(V :kH@8,,a@2T{0gfV+0ӼBw(~{m?<)Nh;C3OEھ;U!`yZ+nn</pֹe鄖dM<s E[5ւ֌M<z&6)j,U}5nъ͠5ewt EPS.z`|0Ju+剖y`e5m>{8NggiQqI#; Y \o? tHyvxZa27jS)ox5B?11\~CA
-
+<< /Filter /FlateDecode /Length 2279 >>
+stream
+xn:_h>+;̹oΜ*Rb$@,־2C=l)%17n.t7gV)MJ|H~I> ןL\K5vڞŏ~˝X[
+@;Կ2tbw<3pK
+<p09ZN]2IA3U;0*~U![E "o*Z]!օkuK52YP FiCTps)+lժ+3ctt&k#eO0\=D_&= G{F͉wqJF7p;;uM_?Y#RESZ9*zmHs-HX4pf6EHήM9rUx\zc"=@Nv.E 0(RaI ,718HASx ͐xN-p&pIDb$9͉-T
+ߟ4Gn40ށR6S%z^ĤWºP2p.JdZ3z;H+Hخt)gh/ UAXL) u8͉H
+iNv}UCG) ]1qeR0TO { /e1 8OBa׉m.RYTk;0<$<Q^`xɤi~"ڎTB)ԽH<6_oKǭV~ƝKΪN;=uE${Ҏs߭~'s!{ҔG.s灹.!0o1&i
+K]&֔ȇ7T. 4(+2oq4{hs%j ˾K%$Pkzb)UjPc©V¸?
+D`GENzŠ RِFg'~~v`'g#ziB <?*bZݔaeouwVU
+Cg%uv#&Gj}:=<w!?u1jH! 5 z-Hƌ>$hisf[r8
+,Q^ b0*Cо <yj\
+H1L2z;@$ΤNM2*?vZ~
+oI{wzG]Q &" k6h(1)A^X!t?G6֒NTR{aqw[F|’NP&-ݪ
endstream
endobj
917 0 obj
-<< /Type /Page /Contents 918 0 R /Resources 916 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 903 0 R >>
+<< /Type /Page /Contents 918 0 R /Resources 916 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 907 0 R >>
endobj
919 0 obj
<< /D [ 917 0 R /XYZ 78.37 808.885 null ] >>
endobj
916 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 402 0 R /F15 381 0 R /F56 384 0 R /F67 389 0 R /F55 383 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 406 0 R /F15 385 0 R /F56 388 0 R /F55 387 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
922 0 obj
-<< /Filter /FlateDecode /Length 3281 >>
-stream
-x5WL&/`0Zc2é ~bUH b|7녿 Ow^`N)a^~7EǤy1Z0ˏsƹ|\|޾J
-I{ 6V?7-)ԍ5V[~oo7Qǜ 3%l&QHL$o+#'4vӖD-5dD^! Z9 pq
-%W*gfڮvA3GZG<$&?1*f!F0Nӣ
-5p]YK/ψxqͪlib_aV9WX;8kCđi&Q{]xl=|b._HG"[t DX jJDWRa#QVŠIA{ ‰qNQ^'f-A ܾJ^%&BoĻn0 5aQ/5hQWFjL;~^
-ݛ
-E^+ϛGSF
-NWk82M/xL%x"C.N*MBÞ>ӎ}
-qg5vGwG,5ZǞȍ*EӶ[V``ݚ.q%7mE&kx=j$>mݷz]e3ÓDž 43u[b&̐ *b=Rkx,䎒.Zz 9˶[ߡlPO
-vV"Uq).vU^J~ l!m߄taMXDfsOt2blE^Yo=N"hזIRt,ZAzFfη-dY+<E <R VhRpЄZ1%BS>̹~!4BSeWVG#I% Gqq,6 6Ȝ:zLb,sƯ@+ոE?i쨅5M5Ն!uՊG E.cn74pӳ̒ x|U
-8dԸQ|w>1a_涷mcXSXN:3}ѶpΌOb[4?,gB~r|m#%yk#I “g}k'`Y;a*sƿrYڏy Oy~$|Fd1${K \e Jr-Tq[ Sy8X+E1ϓr{ߙA(7+ⓣ)soy~x#5kfq*# 73DV_ZP 5[8EH-L]hҌRvB)^FqL
-߶h \[)ضV6[HvoS%1b_,G5u|#5bXoW>sQdɏSI%Vq [ں˪,^Uyw &W.\L^'LydBd"g>kt+< Bh0%3ꯥW:xV]Bjɜ&Z^q/ؿ;`j6{ ,nG&6
-a;?.LVqiFr$1\JELwvzR1d >GKF0K
-g3Eݭx׎Q][O HC٣7Q4 y!z} .De8Æ⢷f{}q5GO€Oz{7r6p 5ũlK`f`Ϛw95QI 3g,Ǐ/
+<< /Filter /FlateDecode /Length 2266 >>
+stream
+x[Ko#9q0Z^@@n/s0U8i NU"/&?_^ke/o%Q/H R]JCJ+@JGȿKkC펑ViF_ p^-}9sۿYF/^x6D$)rED҉k"^7;GMmh*%JJ6жv9V@?SﴰH-A͚]
+0&KO9G{@cf%WFJ~"PG3'U[MV1ٿ#%ωRiWYnt6ƕ /`j5"do#;-% |' ge" z4˱%)+pVWפoxa1$#͠[k=kˍէ_I/+*[6,/E45*m׍VL)
+VFʘAU] [;3jftuʊDja>\S=
+Y-^\p59`7~?v[?mHn
+/}cUkUԆk|_nbQR;B~췿vU.T窜ŵBU~p\ +(2aדE?a¹|MMFCw+`M>Zd'obe6ȚaI
+Rl?7_)LJ`J9 8'q:$7d{ъd} ""Bjztdu5j{(c@\*UHRUe`o_sBxHHö bՄ _]4aL|Fx茰0Zh#hK^ 0A(ӂ@{toXrN֑SƋxښ=`>08nΒcyi\z0@g*%UV﬜D
+N1Cu/AQL6z6nbR,v&S# ":;L(B#9@>EN"DESDyfgdNpH 3Ux~
+%[Ӣ{kD,9Fm}%sEU*p#z|H̬s%S/4r'2>Ulfڸ+dnzԟ.!tmbo9|&\粹ު` Lc~ӰG=ʔˀInV)x@0Yv#6`3{sɈppZGo=0`>q|z6ŕo[]pE>L}\HPNϔ7NyN*݆鹖z)Cb& {
endstream
endobj
921 0 obj
-<< /Type /Page /Contents 922 0 R /Resources 920 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 903 0 R >>
+<< /Type /Page /Contents 922 0 R /Resources 920 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 907 0 R >>
endobj
923 0 obj
<< /D [ 921 0 R /XYZ 78.37 808.885 null ] >>
endobj
920 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 402 0 R /F15 381 0 R /F56 384 0 R /F55 383 0 R /F67 389 0 R /F57 385 0 R /F23 379 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 406 0 R /F15 385 0 R /F56 388 0 R /F23 383 0 R /F55 387 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
926 0 obj
-<< /Filter /FlateDecode /Length 2570 >>
-stream
-xɎ>_0Mw`4:oA)Fr;wq)D%[94["w?^d~~Et?/
-_E->
-N-,"Z_Z7ғw)n}O]y_Ͽ"0Dj2FœV
-;n΃+Q$ZgNy^YO Q=oM.̸TRqae*4W
-3 0HyVhH5Gў5˽oj~^*VZGzB}&r5')vn4 _Ꝿe7ە{MB-^_Rr„t,cxxVY͹7mB+h:Fn5m0F!7fQ?f&[?y5w j.yF
-)khj$-r۬w0n?r5
-&p.^ElPg ub sDZGT@Gǜ69*rijj2AG}$oH
- 7A
-6DJᐟ6E)9s}l"݌|]zO]0o&5=k>sYgMu1ra{kEtk!M+{?#Q 20 ,ʠpˉ`86Wfh> 𭭟p̓
-MZyPҨ8oWfo·TEmkɯfY7(!Mv
-+//ϯD7?/Ҿ-zg/c,VRQF =控ǍW7Ji6c13٬ ~^jk}|:RD]iRM
-]RG ݵ 63M嫪<;*V?$=&¡'6r U/
+<< /Filter /FlateDecode /Length 2507 >>
+stream
+x[n#7S! 0 GV[kr_S\-AjU_4y_sM)%oq1Is1Z0o/ƹ9^>(Kz^^3k~=!>J vS-?Lmxل84h 9S棡\v땞GSmW]{ ŤV*{dN~U%(A@vxDeߥu1$!?-)|l8aP$ }<lꩣ^|8'`)-TD8V큨;ؗttq 22uyw: ֵ8gɞiEk63.E436阑5k$Nμ#*v9'R 3VNHJdh͌Z#yw:
+ ^U@
+Mjْʽ1[낏"&)f$ T r^7&{6IO}f>>D|2H=@Q6FxdRh
+JkVXCG66SC_Moϣ%KS}}D{xm%x'v"k !H lmY[E<欻]#w\+8`<B2am>?zIP1
+K'yribc;BޭpQ"H{NfO+N)3ƒl3Яnyَvg1(Erϔ v;U)֒OGNn5$mx
+df|y( {ŋeF͔=`RBb5(]{),
+cj+>hO1r)Q܌z~D~2ĀLYySF;:S ֡ԝj,`Usq9e{ {:#U h稽U
+|B!Su(UZ_)W =(]5K~E 9NO w/;KT
+ƁBB1M-bc,}#uFPy\OFX
+@swsDgƎɏK0cԽ"If ,")(-S4hK
+d
+R`2[~;Yq==2o(ږҁ?HV;3~|G(g摗5 we>FOW?UW;ʨprӥv37qԦ[.Gh^XM{-~1:5V8{894w5"W-iO68ij֣*7v"@o⫐wCuR{R (@D[!d9@5%}}Stjǁwmތ!"@ݔTfP%()åGI[EhpI
+1s頾s#}!KY<3a`hǷA2m[!ry*Aι ,Ξ@sݛ/}Y 0&UG'jįLY;mY Au4w=ܚ'1<d}; ^<X6/3nr JDO{JV>1;gZB!ͪ P { `xErq{yz &; |xr,ssjz:3FE#3O j<6]bgMznpfvڗiA~7;ͺN^k($RȒk%!:/6ݮKk?6WժYoGOf
endstream
endobj
925 0 obj
-<< /Type /Page /Contents 926 0 R /Resources 924 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 903 0 R >>
+<< /Type /Page /Contents 926 0 R /Resources 924 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 907 0 R >>
endobj
927 0 obj
<< /D [ 925 0 R /XYZ 78.37 808.885 null ] >>
endobj
924 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F56 384 0 R /F55 383 0 R /F69 402 0 R /F58 386 0 R /F45 390 0 R /F40 391 0 R /F59 393 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 406 0 R /F15 385 0 R /F56 388 0 R /F57 389 0 R /F65 391 0 R /F67 393 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
930 0 obj
-<< /Filter /FlateDecode /Length 4275 >>
-stream
-x\K$ ϯ}hE`#Ef`l< ~%JCcE~(RE\'Y^?>E)U~_wJHwRW){) tr&
-_^Z[{q21_cr8 Wי]_~=Et̆zF
-g 2. ׄt޽\QcꕾkF__s/sMLdq'!-#Dy2DlI*E:بdSe&n~+'},up\ˇO f(/T|)1?o@n$g$2` 4'%qio
-%Oedʡ+iyo[^I{_pni^8niFo%=oT%JVƹ^H1hQ* u{TVRUϿBz5$ibT @J &zH*pױe<9=fcSԫ<ھZEVܳ V(8ӌƻy0+}SZ:𵅖~h!RW6O8<+*`Y
-(#׳yNߧ]:ɝB;u
-uwḍ2 "b0q܎E@ FV{:p4e̩I\ʺoekK`ݽ.\p>V?lwxb`qh}
-')u+6 d(Բ"BB(Xɉ k;c
-F̩E"YȾNue>.%>Kv-?YL]X
-%;0vcx(Ρ'r+ݼaQϽzV]q^Z|CȒ]ǭyѮLGevj+GSH0ImB6q3qz[W6VNaY>}j1^B0E;ҋ֘8r[ ?SBcu2+[NrL4(L{u.EA& pful;'P,6i~MZteXZ]o݌3ExFރ3,-7O[N-; "jEFVfMFv
-Tur餔i8y}c0fAL9N=rn$46Bϙ/!͡L_'|O3uyaځ\t/
-7켿box
-N0Sn3-CPJ@Ptxt$@I@c|;OT3ƲjT eoXjryZҞ]LFW. 殥t&]χd]{^Z׉s*UIۮ?1ֵk#yIqmP/*`yhV%\slJdIkMJ_LM;ص&7e& cETǭr¦\g7}Y7[@1jXZk8<Fr1i6;;T&凌tCi>jmadMjRu&sP`E{^s\%N쨩:r/ BI-*5gLGW1L;VG6YQˀG'#=;RFH@ͳeըԎ^Eq)
-Q.5cjbaLKd]Pok'Yx?{ڿ蹳Bz"Oii/T"|lpbBk}.jD~蕽* heE5N`)ͦ^T %EfOVhoau{mUj [nswJ;Z؆\UT:ܥ"&.G`3ʾʃPi rU-jK0 ,痈p% v JItw*/&U?ض6Ĺ܆n{I=DV#[LkנlCvJ!Y} Ŗk#czW@K5T7]/nqј)}poXwg}<ݾj#Zl[݌ ]UY]/h+l5 ?K~)?İ3=
-@הΜhv.5+^2#x~Uz<7UNhI-}tۻĥ/*-xT^*Ry@A^\j(c_ﱺ0K'DP\13^l]uvtUQcOEn<+O!
-KdRᐼ7N6vKz,uzg
-XN֩uNJB?]ްyceɗ&qjGzn<=CXÆίPi͏)$@4-j~h)13URŪ)ն9W5@<[E*#]p[-/s&z=
+<< /Filter /FlateDecode /Length 3325 >>
+stream
+x\1Wt&  V 8Vf8֬=@3|bq㷿~/yjw9AOM܌c܌kq8o';kx*oHMe~7^>')(ԃ5V~.fD|ϾBs4.)aQxx]{PIZ*VH+@ܿ
+GH4*z B@~&%uqU')
+pII3J) u%!fDֺ 1RdN>BIkbb2鹛"c!3y/o{ZMLMoc$.@>0-%)00Ck:fxW,oA!51ѱޠ)rސeSF2'R ͽ#P䳑Q{ѭ8o'a+^0 x'z76ZJ]_rG3'sXLҝtڻI억 7Axgy)'flc %B/d:L}irAZrD9Txi#< 91{xwä4{Zh|M|meJS[+- Qf^ݢE#թ y7'9CZgf&zG}{t+'boI8\a:I `P̝ JFc*Kr#ޫ=UEJBeh*[.5L bFbo!XNCXyJM nk0#^l\V4tZţ@uaю-{ma6BPGgGuqw_6k\od.!-3!:wJ
+V7~[h) T#0SHX |$ch_42[N$8yS7ijLH4tqƁ9EHdhpwPđK
+4#AB
+ڲtaB^IBTR-&q/1;ŜЁ>'E
+G仸u HBkf%CoX_~tmmOF%t[bfrW2xa{m~mMs[l:|T`D-S60^Lʷ um%kywE1@Bؚt.y^m5!ntz~Z T NDx% \͓BiZ7Ӆ5Z@w䜇K!SL,P$ys /9eG,ӒdU>(FcVL "JnǴ8ҐSe&kL7B
+NY&D&= Y/H8skk(XFQ7?Ms8lXKj<Pw?;J!8'H' K
+0°KZ-AD=B>ka|o_.ӊw{i4|&Uq6j8~+YӳGQ+C:lScm{V֯L9ˈI"%XV, "WOxɒ5<HX|@Xyuڷ9
+CޑΎJ:
+`$jx [bx[Y-(V?Zc-l"Jdm_4#IO_OF*m֩@˰mwRei 9[!6{wJbľ>kʙY2/:C;7_!S^YRVR@,?:q>lkltʫ륷 |l
+aS?qș9N ?~~/
endstream
endobj
929 0 obj
-<< /Type /Page /Contents 930 0 R /Resources 928 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 903 0 R >>
+<< /Type /Page /Contents 930 0 R /Resources 928 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 907 0 R >>
endobj
931 0 obj
<< /D [ 929 0 R /XYZ 78.37 808.885 null ] >>
endobj
928 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 402 0 R /F15 381 0 R /F56 384 0 R /F55 383 0 R /F29 375 0 R /F23 379 0 R /F52 376 0 R /F73 932 0 R /F58 386 0 R /F45 390 0 R /F40 391 0 R /F59 393 0 R /F46 392 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 406 0 R /F15 385 0 R /F56 388 0 R /F55 387 0 R /F67 393 0 R /F57 389 0 R /F23 383 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-935 0 obj
-<< /Filter /FlateDecode /Length 1129 >>
-stream
-xXn8 +P$Aqjuku4ʒ,Y^LP,q}|  ߞ ?6 Z`v'-O`Ѓ V`g
-N,e )ʠ{Y]=)cZ],N$TvLV\;Zbl l}"Xf&o9; $ҌʈœWɳoäAEoS`h#'XA^K<)R
--Hӏgȸ 83>jZ)DZ'IxY|ļΣ!;5|u5.I;i<#xL2 Ao6al L)6m/abe1-Z|fd3*JX6¾_0^m^٠UѰ1JAͅ^ҒLMQO99><^eFbh<1bd 3 \ ۜ:|WoL/#VKl(><3ehbk{~W]N J};O))\VEJ+ #/ ,ㅁ+@E裡e^ dv/|! ~sVa9嵵SǓ*!)?uVW:uPFU gJSn'չy]x/r@h.^_vr[z2u᱀ M~;Dpc=O9~*:X/3j0]ח8|,|<o}E
+934 0 obj
+<< /Filter /FlateDecode /Length 2984 >>
+stream
+xn#,C/```4[-ErrfSݔ$>ZdXW?.Y^nE)Q/~uqAhwqV io_R껔ꛔx)-+45=N_WWY:xk꓊
+7Fxw$H(Ӿ~$m'c^VB\0ҥ`G|r2A+0v T^FvVH(G&4E(Fiݝ|;ķxa~Ȣ1U S1U U| ([_pJxǓ A PhSM}eMb[E 55xU+tBO|RZ.EiX`:5((eMBPۮHVXf⊼5jc
+Søv}Qg!hq:/8ۘxB_sfY l
+G|8 !ŗawf}I 6BXU`ٝ TϴRe18]4s/) aΪq𲙛Sse$s]ItЫ!ŵ&c3Ɋj52ҪF`ԉs)lu=1!noݤ$Xh, "_L
+pLu{ފ^i V%"# ТK
+VL,[ RhrƄXF06kpE{E_{hw~.ՑEEN)Vl{
+J} $([/ݣnE$`s$jbr Ꝑ#F`e;#D,O8# Vhfo]TaVw%*߸XC9Go0b?…hdZ-UxXDS#,Q^V&ޝ01>S# ŸΚ$,Ng搬}Kʭ=bB/b;8ߊI޽ ۊ(c[fo
+[ѠW%
+
+tS&׫yzluM,B;VF"t^kVyV\5\-\WrcG};I8W] Ì-||yD@ԯpۈUFcLE@Ak>QRoEy/ )7KΪt{2Lv=.}?kmR4뜬A'|s2~̦Adfv#qT"/o/V&VP[ȭ'cad}h>3|]o&ZHh¯û|~a_,sϋq^UkU@ F#Tb/X{濫cb.Vn`Z]g  c'Ք/)#Nj 'X ZjNf^If&Ud[4 є^fkf۴+
+,Mr~3l80acٚty+uײn3!
+i"Uq?/}K~eͅss<<=SHA, ʋ
+9’pc?wCգ
endstream
endobj
-934 0 obj
-<< /Type /Page /Contents 935 0 R /Resources 933 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 903 0 R >>
+933 0 obj
+<< /Type /Page /Contents 934 0 R /Resources 932 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 907 0 R >>
endobj
-936 0 obj
-<< /D [ 934 0 R /XYZ 78.37 808.885 null ] >>
+935 0 obj
+<< /D [ 933 0 R /XYZ 78.37 808.885 null ] >>
endobj
-933 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 402 0 R /F15 381 0 R /F56 384 0 R /F55 383 0 R >> /ProcSet [ /PDF /Text ] >>
+932 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 406 0 R /F15 385 0 R /F56 388 0 R /F55 387 0 R /F58 390 0 R /F45 394 0 R /F40 395 0 R /F59 397 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-1060 0 obj
-<< /Filter /FlateDecode /Length 3301 >>
-stream
-x\͒#)S QjoĞӾu$$2={]?I˷ɷ|?6)-P[x/>o͡ƾۿJ|H w)tۿRND`H+хh)w)?oGMJϻ23JK
-l`svI%ݹ(a&#o][IKSphEp5<>0RqxJhMl6]Q`vԍy.k;qb'Q(i"g]wzYU#my'ytnQG1}'٨MPB.51<
-3BbB/2Z͉ Э$wQmjؖ<*efLL(3!Yo%>'BdIJ5ž D&喝GycW9m۴{A`Z'QikX1ŝNs3v2z T3RJXS9}3uG9O_ZmQn_G`dLJy
-Z+q} }./e8
-ht\o3"ظs32>asBVvWI)~+ǫѫi`ָBB5Wel*pگ "pn Dr>7EˁS}r>l^FY hZ-xKӏsb,^3imij4<[*+H"RB m7_g*bN
-4؇-EKMo%g)hfy'FNy23M;2YkԸ
-|ZB*kNC2@
-oZ14=Z5r:(as+ AF
-^X -쯛_2Jv3P<f\ h볧b 5+m׭u[0-vhpFtTGKRϞse)NKL?`53YnUtg!|P KhSf<7sDpqɖ*\EKb%a$Fs1Gq*{UG1
-T#gtұ֪k=A;TH}Қ+|5y:ipB丹Wpf{a|ϦC:c'A<؄zǭ9t e2=zrFfV(9+JG;Fi _!I'R,ԷioK2w>{J挰!0,0bj<گOU
-Val҃rm+u@=ߔioJ̦:qPFNWcvF؞;Xdiv+cHVQEn5%,|؈X5xIB!9ߋN1h8齮wTPSQ-r 2i2(5
-$
-9):d aij e.:Lm5&ؿ0H螏
-0?gB{;3=v;4N.MHl=WIWoa;xMx԰wW"~-牨He4IjUHo<>@TBN^N)on̛D@l~:닚h=~`!^eМе
+938 0 obj
+<< /Filter /FlateDecode /Length 3969 >>
+stream
+xˎ$>_QG0D ;3A.!y '~%Jsht7HHr&d}tW7DV/w
+|o)!>}~z>H_TR/6ah*8>, {q2_er8 ݶx~x_P>e(g)
+\<sa
+u G˻ e$p8YJ%)[ TgI\ٲ&\n% qP`4*=ͷ$ZG
+x)B昏jGȣ ,L8,-R5#])2f6[v#v<:б\~7u¡]w,3̧3VU^Y0zB5ċ~"V">U1BB-ad:P̿.KsL`cR;\dW 0ny .'u&:YPU^M[*Ifb49irgճx;?|"R嚷CQ `d$aȼHbp&$2Zb뚑M7G38[*[se"?bNɚ1
+/%,3sőoΧa5~T|KU䘧a}(ܥc+z 0՜E6O}F/$n˔T%ec7.6ũB;7EAA
+-kX%c~HVfQdcu"Mq
+Nq@åuU<ھZEv\ V(/ q&a)ig1 S8+ըc[j, bZ\w-?t8tpye>҉oyhȝ&Yz46[ykELHuK/4,4Q*zKlW˺%ԑ
+OevjU#}&o\F( j53N!K6VQIL
+cvG4buzM.1qB+6 nC%֏;W2Qc}2$+!*HUirANf6ÕMż7w(&oLN cXv, ,}[| kj+8fXYn$_[wA`eO3Sil+kb:a2Z~e(3;Ws{ lV m~Zм|7uiI
+u]: Lf2pDد^Ƶ/ϚCc|fEtY5,ZwoJ:%a]:8K_k߂/E$῰s>xXeme).zͯ_YC!%W'?V:NA?iAJ~0Ԅ٫~MdJ-#pPzQFx͔WѸ]As,i PjH&[ nק0׸CkLܰ L٩{Z/TQ~İi(aNn?n;NDnmw>n]8H}xO^xy
+%aVa?J p8t"@[26!gU=_m6kd]N OBp-&YaX3>5z¢i'ޤ>=
+Ppzq͋\6{<:^oq0tf=*qSKo>
+ s
++AAoo @87tE`P ;k]{͸ޛj٩!]o47~R>(ேPkFBbN PFsPwk<0x0]Yw6V~Z; 碞|*uuˀ[gHY7 1&Yn7-8`k|V * |V \ۍ4 \aTFM\`Z>E#ty߆NSJw]ntF~<eė5yoAE܂ۗ BGV']*i Ɉ@X,M;5͛22>/꼕A؄&yqFt# F ;ELj!r6 4#6;9*"&ՈzA6kahMFju"֡yΘCzMN@uA+:9^C29 2hP 欓SL/g$F1Xd!FA:8#c
+SZhHAFg}0Ip.KJ* #02U6 pѣ\Fahh`@q hf#"RfS6P3s6< !)lcv%=$" ]R:"@E`4tB*B#u4BV0]v\[Xh<{K5V
+,nQN
+#NyanSϩi/q<2Cԛքu|6E83NY "5c BQ;?^_, S)yAo}]ggv귎*1|2;e[B(p7ieO3߼u>W2BJ!fޞ4rSYZ3ʙAuMoM#/4SUnV{{
+vndC)vxŬj:é'pi\6HλZ%/XvPfؚ$km.HsaƊKC@U0X}Ks.i
endstream
endobj
-1059 0 obj
-<< /Type /Page /Contents 1060 0 R /Resources 1058 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 903 0 R /Annots 1062 0 R >>
+937 0 obj
+<< /Type /Page /Contents 938 0 R /Resources 936 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 907 0 R >>
endobj
-1062 0 obj
-[ 937 0 R 938 0 R 939 0 R 940 0 R 941 0 R 942 0 R 943 0 R 944 0 R 945 0 R 946 0 R 947 0 R 948 0 R 949 0 R 950 0 R 951 0 R 952 0 R 953 0 R 954 0 R 955 0 R 956 0 R 957 0 R 958 0 R 959 0 R 960 0 R 961 0 R 962 0 R 963 0 R 964 0 R 965 0 R 966 0 R 967 0 R 968 0 R 969 0 R 970 0 R 971 0 R 972 0 R 973 0 R 974 0 R 975 0 R 976 0 R 977 0 R 978 0 R 979 0 R 980 0 R 981 0 R 982 0 R 983 0 R 984 0 R 985 0 R 986 0 R 987 0 R 988 0 R 989 0 R 990 0 R 991 0 R 992 0 R 993 0 R 994 0 R 995 0 R 996 0 R 997 0 R 998 0 R 999 0 R 1000 0 R 1001 0 R 1002 0 R 1003 0 R 1004 0 R 1005 0 R 1006 0 R 1007 0 R 1008 0 R 1009 0 R 1010 0 R 1011 0 R 1012 0 R 1013 0 R 1014 0 R 1015 0 R 1016 0 R 1017 0 R 1018 0 R 1019 0 R 1020 0 R 1021 0 R 1022 0 R 1023 0 R 1024 0 R 1025 0 R 1026 0 R 1027 0 R 1028 0 R 1029 0 R 1030 0 R 1031 0 R 1032 0 R 1033 0 R 1034 0 R 1035 0 R 1036 0 R 1037 0 R 1038 0 R 1039 0 R 1040 0 R 1041 0 R 1042 0 R 1043 0 R 1044 0 R 1045 0 R 1046 0 R 1047 0 R 1048 0 R 1049 0 R 1050 0 R 1051 0 R 1052 0 R 1053 0 R 1054 0 R 1055 0 R ]
+939 0 obj
+<< /D [ 937 0 R /XYZ 78.37 808.885 null ] >>
endobj
-937 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 268.68 693.267 280.635 705.222 ]/A << /S /GoTo /D (page.17) >> >>
+936 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 406 0 R /F15 385 0 R /F56 388 0 R /F55 387 0 R /F29 379 0 R /F23 383 0 R /F52 380 0 R /F73 940 0 R /F58 390 0 R /F45 394 0 R /F40 395 0 R /F59 397 0 R /F46 396 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-938 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 162.917 681.531 174.872 692.709 ]/A << /S /GoTo /D (page.10) >> >>
+943 0 obj
+<< /Filter /FlateDecode /Length 1643 >>
+stream
+xZɎ6WU"  q䚜pIQ'Nf ےX{ZE^~}E)VwE]h..__~J RCJ)%)B迩kwZ{y@ZOgڕ+E
+V\
+*X7VGM?HW6!k
+]q @( |&:uCisJ8W+U @ޔ5j+=ζ!pUiV!/h0yƒH\C{KZK5ھ]?KW^QRCKW{7Ch"- Fʑ^͊OMSq)ӳˡY:%\jpXFSDSmoT$8 R V
+m&\[YTMW
+_m'J)[pyӭFҔ|+X<kl8^*-\[p'|8-d C5v<H3/JFhSM<`6EAh.c }m3f"[ice3k *1n*aMh, ~ڬ- FQ-ؔt<r㸯}i )~ic 7hl)tupzUm۩6۝gaNJK4#N4, I-̲SP"H}>m@[5TwHaqG2AU^1NwNH8s>xCV ԩC&Ez7ﵸ;8f]gqYBh^UFw[(~Ҩgrķr K_Uiey
+uH8L}cX_w|1)"
+endstream
endobj
-939 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 162.917 669.576 174.872 680.754 ]/A << /S /GoTo /D (page.10) >> >>
+942 0 obj
+<< /Type /Page /Contents 943 0 R /Resources 941 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 907 0 R >>
endobj
-940 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 229.268 645.446 241.442 657.402 ]/A << /S /GoTo /D (page.63) >> >>
+944 0 obj
+<< /D [ 942 0 R /XYZ 78.37 808.885 null ] >>
endobj
941 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 230.384 633.491 242.339 645.446 ]/A << /S /GoTo /D (page.24) >> >>
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 406 0 R /F15 385 0 R /F56 388 0 R /F55 387 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-942 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 162.917 622.104 174.872 632.933 ]/A << /S /GoTo /D (page.47) >> >>
+1063 0 obj
+<< /Filter /FlateDecode /Length 3237 >>
+stream
+x\nc9WZ-Qo uYoz^ՕW"plR|<oo~aM(&|Lڛisۿ\ Kܪg3oPiw30U!&?BJ>sJ\?)LAz~AWe2|#͂/ ̩* |d߭ %ụBq
+0n5:I~#(+nV'3Qquµ(95`!y߽Ęҟ`(`K(gDFa훬uG71ԑމLh  bX'*LZĕNI>B 9"teE.:OW /sT#0\Wǭ/2zTSZM,q)C=;KZ*݊-?FwaLu~obd'K>r
+&<ф8eUV ,fP Ej$YeL]F׮q'
+kQ st0$TRNˆc3=N!݄!W9OcOsvt&NU~r뒌V'W)3B
+PM`ŗ
+_{?PWk~ !ؤV%맵~U Djtl֏h'M3%alk]fBI~ԲOT9&`͐/k;>lJHRV;QǐCHWf4[s3:$] ։mq)3{1 K
+Q[TP UFR<)21`Wny^T6fOToSiԃt9AzcDc: m&_Ƴs/ޕ}/&ЀpȢB
+4 {P`a(_[0^jx?]L*.%\Pqj^8bلϘj 1sz06x8n.9CI4hN~ٔ+П xj<QJ
+jJZwy$+C[uջ5k&'pɦkrpd-"1߿ec6mֺt.O^1=eV@y59TVAVmh&]:y*r]hvNwi( Lf<J+\Eir4Þg 3fɕ5c?N`ӍB @tXLc+BK\k"c9ޮIOI`d3?,>q%E) cSB;;AX!CkbC֪+UaKNaPi6Qџɣq./@U+Mu6E.rn. ={=X_%1eŚq
+eQOpuujͻƵZeS$n_+ڧcC󿆎odtf-c}Kf#43~(׫
+endstream
endobj
-943 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 230.972 599.618 237.946 611.573 ]/A << /S /GoTo /D (page.3) >> >>
+1062 0 obj
+<< /Type /Page /Contents 1063 0 R /Resources 1061 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1065 0 R /Annots 1066 0 R >>
endobj
-944 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 168.147 588.231 180.102 599.06 ]/A << /S /GoTo /D (page.47) >> >>
+1066 0 obj
+[ 945 0 R 946 0 R 947 0 R 948 0 R 949 0 R 950 0 R 951 0 R 952 0 R 953 0 R 954 0 R 955 0 R 956 0 R 957 0 R 958 0 R 959 0 R 960 0 R 961 0 R 962 0 R 963 0 R 964 0 R 965 0 R 966 0 R 967 0 R 968 0 R 969 0 R 970 0 R 971 0 R 972 0 R 973 0 R 974 0 R 975 0 R 976 0 R 977 0 R 978 0 R 979 0 R 980 0 R 981 0 R 982 0 R 983 0 R 984 0 R 985 0 R 986 0 R 987 0 R 988 0 R 989 0 R 990 0 R 991 0 R 992 0 R 993 0 R 994 0 R 995 0 R 996 0 R 997 0 R 998 0 R 999 0 R 1000 0 R 1001 0 R 1002 0 R 1003 0 R 1004 0 R 1005 0 R 1006 0 R 1007 0 R 1008 0 R 1009 0 R 1010 0 R 1011 0 R 1012 0 R 1013 0 R 1014 0 R 1015 0 R 1016 0 R 1017 0 R 1018 0 R 1019 0 R 1020 0 R 1021 0 R 1022 0 R 1023 0 R 1024 0 R 1025 0 R 1026 0 R 1027 0 R 1028 0 R 1029 0 R 1030 0 R 1031 0 R 1032 0 R 1033 0 R 1034 0 R 1035 0 R 1036 0 R 1037 0 R 1038 0 R 1039 0 R 1040 0 R 1041 0 R 1042 0 R 1043 0 R 1044 0 R 1045 0 R 1046 0 R 1047 0 R 1048 0 R 1049 0 R 1050 0 R 1051 0 R 1052 0 R 1053 0 R 1054 0 R 1055 0 R 1056 0 R 1057 0 R 1058 0 R ]
endobj
945 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 168.147 576.276 180.102 587.105 ]/A << /S /GoTo /D (page.47) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 173.716 681.87 180.69 692.709 ]/A << /S /GoTo /D (page.9) >> >>
endobj
946 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 162.678 563.753 174.633 575.708 ]/A << /S /GoTo /D (page.33) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 268.68 669.357 280.635 681.312 ]/A << /S /GoTo /D (page.18) >> >>
endobj
947 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 115.843 552.366 122.817 563.195 ]/A << /S /GoTo /D (page.4) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 162.917 657.621 174.872 668.799 ]/A << /S /GoTo /D (page.11) >> >>
endobj
948 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 194.987 540.41 201.96 551.24 ]/A << /S /GoTo /D (page.4) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 162.917 645.666 174.872 656.844 ]/A << /S /GoTo /D (page.11) >> >>
endobj
949 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 204.949 540.41 211.923 551.24 ]/A << /S /GoTo /D (page.9) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 229.268 621.536 241.442 633.491 ]/A << /S /GoTo /D (page.64) >> >>
endobj
950 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 191.041 515.932 202.997 527.887 ]/A << /S /GoTo /D (page.23) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 230.384 609.581 242.339 621.536 ]/A << /S /GoTo /D (page.25) >> >>
endobj
951 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 167.739 503.977 179.694 515.932 ]/A << /S /GoTo /D (page.10) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 162.917 598.194 174.872 609.023 ]/A << /S /GoTo /D (page.48) >> >>
endobj
952 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 188.74 492.022 195.714 503.977 ]/A << /S /GoTo /D (page.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 230.972 563.753 237.946 575.708 ]/A << /S /GoTo /D (page.3) >> >>
endobj
953 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 220.481 480.067 232.436 492.022 ]/A << /S /GoTo /D (page.42) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 168.147 552.366 180.102 563.195 ]/A << /S /GoTo /D (page.48) >> >>
endobj
954 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 206.414 458.707 218.369 469.606 ]/A << /S /GoTo /D (page.39) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 168.147 540.41 180.102 551.24 ]/A << /S /GoTo /D (page.48) >> >>
endobj
955 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 224.964 446.194 236.919 458.149 ]/A << /S /GoTo /D (page.39) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 162.678 527.887 174.633 539.842 ]/A << /S /GoTo /D (page.34) >> >>
endobj
956 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 144.795 434.796 156.75 445.636 ]/A << /S /GoTo /D (page.39) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 115.843 516.5 122.817 527.329 ]/A << /S /GoTo /D (page.4) >> >>
endobj
957 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 230.613 422.283 242.568 434.239 ]/A << /S /GoTo /D (page.14) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 194.987 504.545 201.96 515.374 ]/A << /S /GoTo /D (page.4) >> >>
endobj
958 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 115.843 410.896 127.799 421.725 ]/A << /S /GoTo /D (page.28) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 204.949 504.545 216.904 515.374 ]/A << /S /GoTo /D (page.10) >> >>
endobj
959 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 147.226 398.941 159.181 409.77 ]/A << /S /GoTo /D (page.15) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 191.041 480.067 202.997 492.022 ]/A << /S /GoTo /D (page.24) >> >>
endobj
960 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 184.406 386.976 191.38 397.815 ]/A << /S /GoTo /D (page.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 167.739 468.111 179.694 480.067 ]/A << /S /GoTo /D (page.10) >> >>
endobj
961 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 195.475 386.976 207.43 397.815 ]/A << /S /GoTo /D (page.23) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 188.74 456.156 195.714 468.111 ]/A << /S /GoTo /D (page.5) >> >>
endobj
962 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 153.183 375.021 160.157 385.86 ]/A << /S /GoTo /D (page.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 220.481 444.201 232.436 456.156 ]/A << /S /GoTo /D (page.43) >> >>
endobj
963 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 164.252 375.021 176.207 385.86 ]/A << /S /GoTo /D (page.23) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 206.414 410.886 218.369 421.785 ]/A << /S /GoTo /D (page.40) >> >>
endobj
964 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 166.972 363.065 173.946 373.905 ]/A << /S /GoTo /D (page.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 224.964 398.373 236.919 410.328 ]/A << /S /GoTo /D (page.40) >> >>
endobj
965 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 178.04 363.065 189.995 373.905 ]/A << /S /GoTo /D (page.23) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 144.795 386.976 156.75 397.815 ]/A << /S /GoTo /D (page.40) >> >>
endobj
966 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 192.984 339.165 204.939 349.994 ]/A << /S /GoTo /D (page.21) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 230.613 374.463 242.568 386.418 ]/A << /S /GoTo /D (page.14) >> >>
endobj
967 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 218.648 327.21 230.603 338.149 ]/A << /S /GoTo /D (page.17) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 115.843 363.075 127.799 373.905 ]/A << /S /GoTo /D (page.29) >> >>
endobj
968 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 166.055 314.687 173.029 326.642 ]/A << /S /GoTo /D (page.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 147.226 351.12 159.181 361.95 ]/A << /S /GoTo /D (page.16) >> >>
endobj
969 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 233.871 290.776 245.826 302.732 ]/A << /S /GoTo /D (page.17) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 184.406 339.155 191.38 349.994 ]/A << /S /GoTo /D (page.2) >> >>
endobj
970 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 249.921 290.776 262.095 302.732 ]/A << /S /GoTo /D (page.69) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 195.475 339.155 207.43 349.994 ]/A << /S /GoTo /D (page.24) >> >>
endobj
971 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 201.761 278.821 213.716 290.776 ]/A << /S /GoTo /D (page.10) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 153.183 327.2 160.157 338.039 ]/A << /S /GoTo /D (page.2) >> >>
endobj
972 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 196.81 266.866 208.765 278.821 ]/A << /S /GoTo /D (page.36) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 164.252 327.2 176.207 338.039 ]/A << /S /GoTo /D (page.24) >> >>
endobj
973 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 127.659 255.479 139.614 266.418 ]/A << /S /GoTo /D (page.34) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 166.972 315.245 173.946 326.084 ]/A << /S /GoTo /D (page.2) >> >>
endobj
974 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 205.457 231.449 217.413 242.507 ]/A << /S /GoTo /D (page.17) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 178.04 315.245 189.995 326.084 ]/A << /S /GoTo /D (page.24) >> >>
endobj
975 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 180.87 219.494 192.825 230.552 ]/A << /S /GoTo /D (page.42) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 192.984 291.344 204.939 302.174 ]/A << /S /GoTo /D (page.22) >> >>
endobj
976 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 155.415 207.658 167.37 218.597 ]/A << /S /GoTo /D (page.27) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 218.648 279.389 230.603 290.328 ]/A << /S /GoTo /D (page.18) >> >>
endobj
977 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 159.041 195.693 170.997 206.642 ]/A << /S /GoTo /D (page.27) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 166.055 266.866 173.029 278.821 ]/A << /S /GoTo /D (page.2) >> >>
endobj
978 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 175.091 195.693 187.266 206.642 ]/A << /S /GoTo /D (page.46) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 233.871 242.956 245.826 254.911 ]/A << /S /GoTo /D (page.18) >> >>
endobj
979 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 191.36 195.693 203.535 206.642 ]/A << /S /GoTo /D (page.61) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 249.921 242.956 262.095 254.911 ]/A << /S /GoTo /D (page.70) >> >>
endobj
980 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 153.721 183.738 165.677 194.687 ]/A << /S /GoTo /D (page.27) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 201.761 231.001 213.716 242.956 ]/A << /S /GoTo /D (page.11) >> >>
endobj
981 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 169.771 183.738 181.946 194.687 ]/A << /S /GoTo /D (page.46) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 196.81 219.045 208.765 231.001 ]/A << /S /GoTo /D (page.37) >> >>
endobj
982 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 186.04 183.738 198.215 194.687 ]/A << /S /GoTo /D (page.60) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 127.659 207.658 139.614 218.597 ]/A << /S /GoTo /D (page.35) >> >>
endobj
983 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 202.847 183.738 215.021 194.687 ]/A << /S /GoTo /D (page.61) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 205.457 183.628 217.413 194.687 ]/A << /S /GoTo /D (page.18) >> >>
endobj
984 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 157.348 171.783 169.303 182.732 ]/A << /S /GoTo /D (page.27) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 180.87 171.673 192.825 182.732 ]/A << /S /GoTo /D (page.43) >> >>
endobj
985 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 173.398 171.783 185.572 182.732 ]/A << /S /GoTo /D (page.46) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 155.415 159.838 167.37 170.776 ]/A << /S /GoTo /D (page.28) >> >>
endobj
986 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 136.765 159.838 148.72 170.667 ]/A << /S /GoTo /D (page.34) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 159.041 147.872 170.997 158.821 ]/A << /S /GoTo /D (page.28) >> >>
endobj
987 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 151.709 159.838 163.664 170.667 ]/A << /S /GoTo /D (page.39) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 175.091 147.872 187.266 158.821 ]/A << /S /GoTo /D (page.47) >> >>
endobj
988 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 167.759 159.838 179.933 170.667 ]/A << /S /GoTo /D (page.68) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 191.36 147.872 203.535 158.821 ]/A << /S /GoTo /D (page.62) >> >>
endobj
989 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 176.456 147.534 188.411 158.712 ]/A << /S /GoTo /D (page.17) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 153.721 135.917 165.677 146.866 ]/A << /S /GoTo /D (page.28) >> >>
endobj
990 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 192.506 147.534 204.68 158.712 ]/A << /S /GoTo /D (page.67) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 169.771 135.917 181.946 146.866 ]/A << /S /GoTo /D (page.47) >> >>
endobj
991 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 207.779 147.534 219.953 158.712 ]/A << /S /GoTo /D (page.69) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 186.04 135.917 198.215 146.866 ]/A << /S /GoTo /D (page.61) >> >>
endobj
992 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 247.918 123.972 259.873 134.911 ]/A << /S /GoTo /D (page.48) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 202.847 135.917 215.021 146.866 ]/A << /S /GoTo /D (page.62) >> >>
endobj
993 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 206.892 111.897 218.847 122.956 ]/A << /S /GoTo /D (page.32) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 157.348 123.962 169.303 134.911 ]/A << /S /GoTo /D (page.28) >> >>
endobj
994 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 165.099 99.942 172.073 111.001 ]/A << /S /GoTo /D (page.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 173.398 123.962 185.572 134.911 ]/A << /S /GoTo /D (page.47) >> >>
endobj
995 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 266.249 87.987 278.205 99.045 ]/A << /S /GoTo /D (page.38) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 136.765 112.017 148.72 122.846 ]/A << /S /GoTo /D (page.35) >> >>
endobj
996 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 180.79 75.803 192.745 87.09 ]/A << /S /GoTo /D (page.23) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 151.709 112.017 163.664 122.846 ]/A << /S /GoTo /D (page.40) >> >>
endobj
997 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 416.233 693.715 428.188 704.774 ]/A << /S /GoTo /D (page.14) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 167.759 112.017 179.933 122.846 ]/A << /S /GoTo /D (page.69) >> >>
endobj
998 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 357.055 681.88 369.01 692.709 ]/A << /S /GoTo /D (page.21) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 176.456 99.713 188.411 110.891 ]/A << /S /GoTo /D (page.18) >> >>
endobj
999 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 373.105 681.88 385.279 692.709 ]/A << /S /GoTo /D (page.66) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 192.506 99.713 204.68 110.891 ]/A << /S /GoTo /D (page.68) >> >>
endobj
1000 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 384.114 669.357 396.069 681.312 ]/A << /S /GoTo /D (page.16) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 207.779 99.713 219.953 110.891 ]/A << /S /GoTo /D (page.70) >> >>
endobj
1001 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 374.45 646.014 386.405 656.953 ]/A << /S /GoTo /D (page.16) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 247.918 76.151 259.873 87.09 ]/A << /S /GoTo /D (page.49) >> >>
endobj
1002 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 467.262 634.059 479.217 644.998 ]/A << /S /GoTo /D (page.48) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 430.141 693.715 442.096 704.774 ]/A << /S /GoTo /D (page.33) >> >>
endobj
1003 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 376.701 622.104 388.656 633.043 ]/A << /S /GoTo /D (page.10) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 388.348 681.76 395.321 692.819 ]/A << /S /GoTo /D (page.5) >> >>
endobj
1004 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 488.711 609.581 500.666 621.536 ]/A << /S /GoTo /D (page.19) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 489.498 669.805 501.453 680.864 ]/A << /S /GoTo /D (page.39) >> >>
endobj
1005 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 341.473 576.206 353.429 584.834 ]/A << /S /GoTo /D (page.21) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 404.039 657.621 415.994 668.908 ]/A << /S /GoTo /D (page.24) >> >>
endobj
1006 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 441.897 562.328 453.852 573.267 ]/A << /S /GoTo /D (page.17) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 416.233 645.895 428.188 656.953 ]/A << /S /GoTo /D (page.15) >> >>
endobj
1007 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 457.947 562.328 470.121 573.267 ]/A << /S /GoTo /D (page.57) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 357.055 634.059 369.01 644.889 ]/A << /S /GoTo /D (page.22) >> >>
endobj
1008 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 490.345 549.805 502.3 561.76 ]/A << /S /GoTo /D (page.45) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 373.105 634.059 385.279 644.889 ]/A << /S /GoTo /D (page.67) >> >>
endobj
1009 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 371.421 538.418 383.376 549.247 ]/A << /S /GoTo /D (page.23) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 384.114 621.536 396.069 633.491 ]/A << /S /GoTo /D (page.17) >> >>
endobj
1010 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 449.439 525.895 461.394 537.85 ]/A << /S /GoTo /D (page.14) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 374.45 598.194 386.405 609.133 ]/A << /S /GoTo /D (page.17) >> >>
endobj
1011 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 447.048 513.94 459.003 525.895 ]/A << /S /GoTo /D (page.12) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 467.262 586.239 479.217 597.177 ]/A << /S /GoTo /D (page.49) >> >>
endobj
1012 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 463.097 513.94 475.272 525.895 ]/A << /S /GoTo /D (page.20) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 376.701 574.283 388.656 585.222 ]/A << /S /GoTo /D (page.11) >> >>
endobj
1013 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 374.161 490.597 381.135 501.536 ]/A << /S /GoTo /D (page.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 488.711 561.76 500.666 573.715 ]/A << /S /GoTo /D (page.20) >> >>
endobj
1014 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 382.779 478.642 394.734 489.581 ]/A << /S /GoTo /D (page.44) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 341.473 528.385 353.429 537.013 ]/A << /S /GoTo /D (page.22) >> >>
endobj
1015 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 410.206 466.119 422.161 478.074 ]/A << /S /GoTo /D (page.12) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 441.897 514.508 453.852 525.446 ]/A << /S /GoTo /D (page.18) >> >>
endobj
1016 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 426.255 466.119 438.43 478.074 ]/A << /S /GoTo /D (page.69) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 457.947 514.508 470.121 525.446 ]/A << /S /GoTo /D (page.58) >> >>
endobj
1017 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 483.747 454.164 495.703 466.119 ]/A << /S /GoTo /D (page.52) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 490.345 501.984 502.3 513.94 ]/A << /S /GoTo /D (page.46) >> >>
endobj
1018 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 501.669 454.164 513.843 466.119 ]/A << /S /GoTo /D (page.67) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 371.421 490.597 383.376 501.427 ]/A << /S /GoTo /D (page.24) >> >>
endobj
1019 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 341.473 444.48 353.648 453.327 ]/A << /S /GoTo /D (page.68) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 449.439 478.074 461.394 490.029 ]/A << /S /GoTo /D (page.14) >> >>
endobj
1020 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 387.511 430.821 399.466 441.651 ]/A << /S /GoTo /D (page.51) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 447.048 466.119 459.003 478.074 ]/A << /S /GoTo /D (page.13) >> >>
endobj
1021 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 386.126 418.737 398.081 429.696 ]/A << /S /GoTo /D (page.51) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 463.097 466.119 475.272 478.074 ]/A << /S /GoTo /D (page.21) >> >>
endobj
1022 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 399.934 406.911 411.889 417.74 ]/A << /S /GoTo /D (page.51) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 374.161 442.776 381.135 453.715 ]/A << /S /GoTo /D (page.5) >> >>
endobj
1023 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 415.984 406.911 428.158 417.74 ]/A << /S /GoTo /D (page.67) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 382.779 430.821 394.734 441.76 ]/A << /S /GoTo /D (page.45) >> >>
endobj
1024 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 461.334 394.388 473.508 406.343 ]/A << /S /GoTo /D (page.54) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 410.206 418.298 422.161 430.253 ]/A << /S /GoTo /D (page.13) >> >>
endobj
1025 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 357.573 383.001 369.528 393.83 ]/A << /S /GoTo /D (page.14) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 426.255 418.298 438.43 430.253 ]/A << /S /GoTo /D (page.70) >> >>
endobj
1026 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 372.517 383.001 384.472 393.83 ]/A << /S /GoTo /D (page.16) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 483.747 406.343 495.703 418.298 ]/A << /S /GoTo /D (page.53) >> >>
endobj
1027 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 339.092 361.669 352.542 372.498 ]/A << /S /GoTo /D (page.28) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 501.669 406.343 513.843 418.298 ]/A << /S /GoTo /D (page.68) >> >>
endobj
1028 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 356.637 361.669 368.592 372.498 ]/A << /S /GoTo /D (page.55) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 341.473 396.659 353.648 405.506 ]/A << /S /GoTo /D (page.69) >> >>
endobj
1029 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 372.686 361.669 384.861 372.498 ]/A << /S /GoTo /D (page.60) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 387.511 383.001 399.466 393.83 ]/A << /S /GoTo /D (page.52) >> >>
endobj
1030 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 494.141 349.146 506.096 361.101 ]/A << /S /GoTo /D (page.20) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 386.126 370.916 398.081 381.875 ]/A << /S /GoTo /D (page.52) >> >>
endobj
1031 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 450.046 325.236 462.001 337.191 ]/A << /S /GoTo /D (page.48) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 399.934 359.09 411.889 369.92 ]/A << /S /GoTo /D (page.52) >> >>
endobj
1032 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 442.823 313.28 454.779 325.236 ]/A << /S /GoTo /D (page.36) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 415.984 359.09 428.158 369.92 ]/A << /S /GoTo /D (page.68) >> >>
endobj
1033 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 389.354 301.325 401.309 313.28 ]/A << /S /GoTo /D (page.63) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 461.334 346.567 473.508 358.522 ]/A << /S /GoTo /D (page.55) >> >>
endobj
1034 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 426.036 289.928 437.991 300.767 ]/A << /S /GoTo /D (page.33) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 357.573 335.18 369.528 346.009 ]/A << /S /GoTo /D (page.14) >> >>
endobj
1035 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 468.925 277.415 480.881 289.37 ]/A << /S /GoTo /D (page.42) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 372.517 335.18 384.472 346.009 ]/A << /S /GoTo /D (page.17) >> >>
endobj
1036 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 349.553 265.669 361.508 276.857 ]/A << /S /GoTo /D (page.13) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 339.092 301.307 352.542 312.136 ]/A << /S /GoTo /D (page.29) >> >>
endobj
1037 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 369.06 254.072 381.015 264.902 ]/A << /S /GoTo /D (page.28) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 356.637 301.307 368.592 312.136 ]/A << /S /GoTo /D (page.56) >> >>
endobj
1038 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 384.004 254.072 395.959 264.902 ]/A << /S /GoTo /D (page.33) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 372.686 301.307 384.861 312.136 ]/A << /S /GoTo /D (page.61) >> >>
endobj
1039 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 400.054 254.072 412.228 264.902 ]/A << /S /GoTo /D (page.60) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 494.141 288.784 506.096 300.739 ]/A << /S /GoTo /D (page.21) >> >>
endobj
1040 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 435.61 241.549 447.566 253.505 ]/A << /S /GoTo /D (page.15) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 450.046 264.874 462.001 276.829 ]/A << /S /GoTo /D (page.49) >> >>
endobj
1041 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 400.831 229.594 407.805 241.549 ]/A << /S /GoTo /D (page.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 442.823 252.918 454.779 264.874 ]/A << /S /GoTo /D (page.37) >> >>
endobj
1042 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 411.899 229.594 424.074 241.549 ]/A << /S /GoTo /D (page.66) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 389.354 240.963 401.309 252.918 ]/A << /S /GoTo /D (page.64) >> >>
endobj
1043 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 448.452 208.263 460.407 220.218 ]/A << /S /GoTo /D (page.39) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 426.036 229.566 437.991 240.405 ]/A << /S /GoTo /D (page.34) >> >>
endobj
1044 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 487.456 196.307 499.411 208.263 ]/A << /S /GoTo /D (page.48) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 468.925 217.053 480.881 229.008 ]/A << /S /GoTo /D (page.43) >> >>
endobj
1045 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 414.201 172.397 426.156 184.352 ]/A << /S /GoTo /D (page.40) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 349.553 205.307 361.508 216.495 ]/A << /S /GoTo /D (page.14) >> >>
endobj
1046 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 430.25 172.397 442.425 184.352 ]/A << /S /GoTo /D (page.58) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 369.06 193.71 381.015 204.54 ]/A << /S /GoTo /D (page.29) >> >>
endobj
1047 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 460.059 160.442 472.014 172.397 ]/A << /S /GoTo /D (page.42) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 384.004 193.71 395.959 204.54 ]/A << /S /GoTo /D (page.34) >> >>
endobj
1048 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 476.109 160.442 488.283 172.397 ]/A << /S /GoTo /D (page.58) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 400.054 193.71 412.228 204.54 ]/A << /S /GoTo /D (page.61) >> >>
endobj
1049 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 482.784 148.487 494.739 160.442 ]/A << /S /GoTo /D (page.42) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 435.61 181.187 447.566 193.143 ]/A << /S /GoTo /D (page.16) >> >>
endobj
1050 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 393.389 136.98 405.344 147.929 ]/A << /S /GoTo /D (page.56) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 400.831 169.232 407.805 181.187 ]/A << /S /GoTo /D (page.5) >> >>
endobj
1051 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 453.025 124.576 464.98 136.532 ]/A << /S /GoTo /D (page.36) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 411.899 169.232 424.074 181.187 ]/A << /S /GoTo /D (page.67) >> >>
endobj
1052 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 381.384 113.06 393.339 124.128 ]/A << /S /GoTo /D (page.51) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 448.452 135.359 460.407 147.314 ]/A << /S /GoTo /D (page.40) >> >>
endobj
1053 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 388.059 101.104 400.014 112.063 ]/A << /S /GoTo /D (page.51) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 487.456 123.404 499.411 135.359 ]/A << /S /GoTo /D (page.49) >> >>
endobj
1054 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 390.569 79.334 397.543 91.29 ]/A << /S /GoTo /D (page.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 414.201 99.494 426.156 111.449 ]/A << /S /GoTo /D (page.41) >> >>
endobj
1055 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 340.447 67.947 352.402 78.886 ]/A << /S /GoTo /D (page.26) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 430.25 99.494 442.425 111.449 ]/A << /S /GoTo /D (page.59) >> >>
endobj
-1061 0 obj
-<< /D [ 1059 0 R /XYZ 78.37 808.885 null ] >>
+1056 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 460.059 87.539 472.014 99.494 ]/A << /S /GoTo /D (page.43) >> >>
endobj
-357 0 obj
-<< /D [ 1059 0 R /XYZ 79.37 706.717 null ] >>
+1057 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 476.109 87.539 488.283 99.494 ]/A << /S /GoTo /D (page.59) >> >>
endobj
1058 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 402 0 R /F56 384 0 R /F15 381 0 R /F57 385 0 R /F55 383 0 R /F66 388 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 482.784 75.583 494.739 87.539 ]/A << /S /GoTo /D (page.43) >> >>
endobj
-1178 0 obj
-<< /Filter /FlateDecode /Length 3540 >>
-stream
-xIW& PM }2KUCUUl7/2~eނ,E7Y%Uo?ߥtRZI?@?AJk751a2nIi'SG4bJ=-dT&[Cf\)'X#UC]kPs۳p!bʨg #h7HOF` ~>2J1i8Q
-9;
-)=W\`(s ^êMנ M=)ee8<K L+GC0$ޓS~]oڃz`(S,qoK!<&bq 4<%(z=AMYnG狯%#Џ@JZQE d ̯Dy!%@cdwg\b/%@1jJqDRPVι//􅀃T+p8BQ8 J^\Ĭ[S5#R GU%w~0T䠩҈Juh Y8k~Rb<Pq g|ӌ|EZJbv"dêwU<#lVpFzj)]Y$:&):SQBl6Cd4'Q] $d6eAuܻB UWCϳ >pҕkOHLtfȑक~BYi:Ib3L' ></EBPh`-Yx#q0MƁAv&
-fh5c8{*3o iRx@K#13c+ju@"bOXlyu8UĜ% z.lHU 1lɧ]e9G-2hTO:sm2Jį
-Կ"iй@Sgl2EYζ4t c_$\DI4]"ȿ/vؤeEb1Y!]N
- )֋Mwc
-n):"0Lo*^ulmݑ0.ZXJU B֓:<(tsh=#!^1qCglvPGn5C:ӸuT;~R[?529Q?-x6?\ 78 'U02lToIp~'PAsGkJuh~ۻ؛C ŏ Ge<8 '#>ȡ*F-a Ry.ar>^t+Q<f WNuz)]x! |PlIx6j<{<6 B˃2^؉Otǽ|y;V4־!M73NQ_4Xd4}(!ͦ9&iYiʞCm*O*QrצsӗWDUW$OD7tVuL5tV`KE~ֵHN[SD:e:9ib'?K|ަ{iPAR?}0Ʌ NT>&
-(t
-eMv ‰g>NFx7?G'ކ ˸y\m"O퍲ӶtN滲Fs~8M\F9?s`[x! Z*Wt69i<o;7m%)YM8ԧÊ|T7Ze#3}!3}Rs_]w)gp'_#iG ә!ݯ''t/Iy Ʃ'x0\a4%`c.ǧ FO㩜d%+:֡xzE/!E&
-!^\IJa"^/V4ԇ'z19#KVX*^ KjѺN_F
-endstream
-endobj
-1177 0 obj
-<< /Type /Page /Contents 1178 0 R /Resources 1176 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1180 0 R /Annots 1181 0 R >>
+1064 0 obj
+<< /D [ 1062 0 R /XYZ 78.37 808.885 null ] >>
endobj
-1181 0 obj
-[ 1056 0 R 1057 0 R 1063 0 R 1064 0 R 1065 0 R 1066 0 R 1067 0 R 1068 0 R 1069 0 R 1070 0 R 1071 0 R 1072 0 R 1073 0 R 1074 0 R 1075 0 R 1076 0 R 1077 0 R 1078 0 R 1079 0 R 1080 0 R 1081 0 R 1082 0 R 1083 0 R 1084 0 R 1085 0 R 1086 0 R 1087 0 R 1088 0 R 1089 0 R 1090 0 R 1091 0 R 1092 0 R 1093 0 R 1094 0 R 1095 0 R 1096 0 R 1097 0 R 1098 0 R 1099 0 R 1100 0 R 1101 0 R 1102 0 R 1103 0 R 1104 0 R 1105 0 R 1106 0 R 1107 0 R 1108 0 R 1109 0 R 1110 0 R 1111 0 R 1112 0 R 1113 0 R 1114 0 R 1115 0 R 1116 0 R 1117 0 R 1118 0 R 1119 0 R 1120 0 R 1121 0 R 1122 0 R 1123 0 R 1124 0 R 1125 0 R 1126 0 R 1127 0 R 1128 0 R 1129 0 R 1130 0 R 1131 0 R 1132 0 R 1133 0 R 1134 0 R 1135 0 R 1136 0 R 1137 0 R 1138 0 R 1139 0 R 1140 0 R 1141 0 R 1142 0 R 1143 0 R 1144 0 R 1145 0 R 1146 0 R 1147 0 R 1148 0 R 1149 0 R 1150 0 R 1151 0 R 1152 0 R 1153 0 R 1154 0 R 1155 0 R 1156 0 R 1157 0 R 1158 0 R 1159 0 R 1160 0 R 1161 0 R 1162 0 R 1163 0 R 1164 0 R 1165 0 R 1166 0 R 1167 0 R 1168 0 R 1169 0 R 1170 0 R 1171 0 R 1172 0 R 1173 0 R ]
+361 0 obj
+<< /D [ 1062 0 R /XYZ 79.37 706.717 null ] >>
endobj
-1056 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 120.825 758.132 132.78 769.081 ]/A << /S /GoTo /D (page.26) >> >>
+1061 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 406 0 R /F66 392 0 R /F15 385 0 R /F56 388 0 R /F57 389 0 R /F55 387 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-1057 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 136.875 758.132 149.049 769.081 ]/A << /S /GoTo /D (page.46) >> >>
+1167 0 obj
+<< /Filter /FlateDecode /Length 3275 >>
+stream
+x\ˎ;+Q$z xYg7j{)Uz."趝H"㖷ۏ7/CyS7ڛ5JHnwR"HiIJߍVO\~77pp_9 5?
+R±}mv5@7%~[[&]emh3
+R'1j=0JﬞS{9UZN޾j-HgCij>ߣB1S%WVX0!b.u w0s*!gxEYkWdܸ$q)
+$),]MECJ70vSbvZXD糘b { h8{zY`׳kusx/5<P+du!=͸Ru*:l6$*KQMŠ?b!y$ӧ͍#@4~}xZKk|TM0l# Q.*>I.@f ]l]v> YtGf$(I+d7]_-⪥.{¡urRN;x001RH>-B2C:y
+Ч.p_T:A?J]}\n0z;j2aְ&`{FO<#<1_CoL8i6)nϙw{&0N2U cX~I}
+]w!Cj yȔO
+|nY k}.zS-Pb(RqL]nSXϴٯT ]T^K,6XSZ\+9sHD%սק!'=GVv3 gHpC,3cAm:F5s]iGKr%:`S\Ɩ;^.$Ғ.mGzgvtjVa*6 rR p`pʷFyc+]=zp7*6лb/u2E ʶ̪lJxVtܩӖɣjuso5b'# 8/ƈ|I%E=$b+B+ͣva~,gA2/:>?6n vt% 7I^ }:sujn'3g|aAxc&ݸښ|+
+&-n;׷>`emr8^V-ĕ|` >q`RMo9:Z*y#qPpA@i\< m
+>-}8芽 ͭ9*
+ҁT8-"pNԭCpھe{!c]P)?_@~1NeʖoXח\ԎN ;hI 1ߚizq5nˌj50 +_ Zd%
+endstream
endobj
-1063 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 164.88 745.619 176.835 757.574 ]/A << /S /GoTo /D (page.40) >> >>
+1166 0 obj
+<< /Type /Page /Contents 1167 0 R /Resources 1165 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1065 0 R /Annots 1169 0 R >>
endobj
-1064 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 146.18 733.664 158.135 745.619 ]/A << /S /GoTo /D (page.40) >> >>
+1169 0 obj
+[ 1059 0 R 1060 0 R 1067 0 R 1068 0 R 1069 0 R 1070 0 R 1071 0 R 1072 0 R 1073 0 R 1074 0 R 1075 0 R 1076 0 R 1077 0 R 1078 0 R 1079 0 R 1080 0 R 1081 0 R 1082 0 R 1083 0 R 1084 0 R 1085 0 R 1086 0 R 1087 0 R 1088 0 R 1089 0 R 1090 0 R 1091 0 R 1092 0 R 1093 0 R 1094 0 R 1095 0 R 1096 0 R 1097 0 R 1098 0 R 1099 0 R 1100 0 R 1101 0 R 1102 0 R 1103 0 R 1104 0 R 1105 0 R 1106 0 R 1107 0 R 1108 0 R 1109 0 R 1110 0 R 1111 0 R 1112 0 R 1113 0 R 1114 0 R 1115 0 R 1116 0 R 1117 0 R 1118 0 R 1119 0 R 1120 0 R 1121 0 R 1122 0 R 1123 0 R 1124 0 R 1125 0 R 1126 0 R 1127 0 R 1128 0 R 1129 0 R 1130 0 R 1131 0 R 1132 0 R 1133 0 R 1134 0 R 1135 0 R 1136 0 R 1137 0 R 1138 0 R 1139 0 R 1140 0 R 1141 0 R 1142 0 R 1143 0 R 1144 0 R 1145 0 R 1146 0 R 1147 0 R 1148 0 R 1149 0 R 1150 0 R 1151 0 R 1152 0 R 1153 0 R 1154 0 R 1155 0 R 1156 0 R 1157 0 R 1158 0 R 1159 0 R 1160 0 R 1161 0 R 1162 0 R 1163 0 R ]
endobj
-1065 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 187.883 721.708 199.838 733.664 ]/A << /S /GoTo /D (page.40) >> >>
+1059 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 170.14 758.022 182.095 768.971 ]/A << /S /GoTo /D (page.57) >> >>
endobj
-1066 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 170.847 709.753 182.802 721.708 ]/A << /S /GoTo /D (page.40) >> >>
+1060 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 229.776 745.619 241.731 757.574 ]/A << /S /GoTo /D (page.37) >> >>
endobj
1067 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 131.535 688.938 143.49 699.767 ]/A << /S /GoTo /D (page.30) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 158.135 734.102 170.09 745.17 ]/A << /S /GoTo /D (page.52) >> >>
endobj
1068 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 147.226 676.982 159.181 687.812 ]/A << /S /GoTo /D (page.15) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 164.81 722.147 176.765 733.106 ]/A << /S /GoTo /D (page.52) >> >>
endobj
1069 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 177.721 652.504 189.896 664.459 ]/A << /S /GoTo /D (page.67) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 167.32 687.835 174.294 699.791 ]/A << /S /GoTo /D (page.5) >> >>
endobj
1070 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 115.843 641.117 127.799 651.946 ]/A << /S /GoTo /D (page.11) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 117.198 676.448 129.153 687.387 ]/A << /S /GoTo /D (page.27) >> >>
endobj
1071 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 205.457 617.087 217.413 628.145 ]/A << /S /GoTo /D (page.12) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 120.825 664.483 132.78 675.432 ]/A << /S /GoTo /D (page.27) >> >>
endobj
1072 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 165.099 605.132 172.073 616.19 ]/A << /S /GoTo /D (page.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 136.875 664.483 149.049 675.432 ]/A << /S /GoTo /D (page.47) >> >>
endobj
1073 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 186.02 593.177 197.975 604.235 ]/A << /S /GoTo /D (page.36) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 164.88 651.97 176.835 663.925 ]/A << /S /GoTo /D (page.41) >> >>
endobj
1074 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 269.527 580.773 281.482 592.728 ]/A << /S /GoTo /D (page.32) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 146.18 640.015 158.135 651.97 ]/A << /S /GoTo /D (page.41) >> >>
endobj
1075 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 121.074 569.097 133.029 580.215 ]/A << /S /GoTo /D (page.29) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 187.883 628.06 199.838 640.015 ]/A << /S /GoTo /D (page.41) >> >>
endobj
1076 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 205.457 545.356 217.413 556.414 ]/A << /S /GoTo /D (page.12) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 170.847 616.104 182.802 628.06 ]/A << /S /GoTo /D (page.41) >> >>
endobj
1077 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 165.099 533.401 172.073 544.459 ]/A << /S /GoTo /D (page.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 131.535 582.799 143.49 593.629 ]/A << /S /GoTo /D (page.31) >> >>
endobj
1078 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 186.02 521.446 197.975 532.504 ]/A << /S /GoTo /D (page.36) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 147.226 570.844 159.181 581.674 ]/A << /S /GoTo /D (page.16) >> >>
endobj
1079 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 181.487 509.6 193.442 520.439 ]/A << /S /GoTo /D (page.12) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 177.721 546.366 189.896 558.321 ]/A << /S /GoTo /D (page.68) >> >>
endobj
1080 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 197.537 509.6 209.711 520.439 ]/A << /S /GoTo /D (page.58) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 115.843 534.979 127.799 545.808 ]/A << /S /GoTo /D (page.12) >> >>
endobj
1081 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 121.074 488.226 134.523 499.056 ]/A << /S /GoTo /D (page.28) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 205.457 510.949 217.413 522.007 ]/A << /S /GoTo /D (page.12) >> >>
endobj
1082 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 138.618 488.226 150.573 499.056 ]/A << /S /GoTo /D (page.55) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 165.099 498.994 172.073 510.052 ]/A << /S /GoTo /D (page.5) >> >>
endobj
1083 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 157.308 476.261 169.263 487.101 ]/A << /S /GoTo /D (page.56) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 186.02 487.038 197.975 498.097 ]/A << /S /GoTo /D (page.37) >> >>
endobj
1084 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 218.269 463.748 230.224 475.703 ]/A << /S /GoTo /D (page.32) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 269.527 474.635 281.482 486.59 ]/A << /S /GoTo /D (page.33) >> >>
endobj
1085 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 182.723 451.793 194.678 463.748 ]/A << /S /GoTo /D (page.47) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 121.074 462.959 133.029 474.077 ]/A << /S /GoTo /D (page.30) >> >>
endobj
1086 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 178.718 430.409 190.673 442.365 ]/A << /S /GoTo /D (page.47) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 205.457 439.218 217.413 450.276 ]/A << /S /GoTo /D (page.13) >> >>
endobj
1087 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 213.617 409.026 225.572 420.981 ]/A << /S /GoTo /D (page.39) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 165.099 427.263 172.073 438.321 ]/A << /S /GoTo /D (page.5) >> >>
endobj
1088 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 221.059 397.071 233.014 409.026 ]/A << /S /GoTo /D (page.42) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 186.02 415.307 197.975 426.366 ]/A << /S /GoTo /D (page.37) >> >>
endobj
1089 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 239.31 385.115 251.266 397.071 ]/A << /S /GoTo /D (page.42) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 181.487 403.462 193.442 414.301 ]/A << /S /GoTo /D (page.13) >> >>
endobj
1090 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 115.505 373.718 127.46 384.557 ]/A << /S /GoTo /D (page.26) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 197.537 403.462 209.711 414.301 ]/A << /S /GoTo /D (page.59) >> >>
endobj
1091 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 131.554 373.718 143.729 384.557 ]/A << /S /GoTo /D (page.46) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 121.074 369.599 134.523 380.428 ]/A << /S /GoTo /D (page.29) >> >>
endobj
1092 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 147.823 373.718 159.998 384.557 ]/A << /S /GoTo /D (page.60) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 138.618 369.599 150.573 380.428 ]/A << /S /GoTo /D (page.56) >> >>
endobj
1093 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 119.131 361.763 131.086 372.602 ]/A << /S /GoTo /D (page.26) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 157.308 357.634 169.263 368.473 ]/A << /S /GoTo /D (page.57) >> >>
endobj
1094 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 135.181 361.763 147.355 372.602 ]/A << /S /GoTo /D (page.46) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 218.269 345.121 230.224 357.076 ]/A << /S /GoTo /D (page.33) >> >>
endobj
1095 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 115.843 349.818 127.799 360.647 ]/A << /S /GoTo /D (page.28) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 182.723 333.166 194.678 345.121 ]/A << /S /GoTo /D (page.48) >> >>
endobj
1096 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 242.638 325.897 254.593 336.737 ]/A << /S /GoTo /D (page.33) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 178.718 299.293 190.673 311.248 ]/A << /S /GoTo /D (page.48) >> >>
endobj
1097 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 132.371 313.823 144.327 324.891 ]/A << /S /GoTo /D (page.51) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 213.617 265.42 225.572 277.375 ]/A << /S /GoTo /D (page.40) >> >>
endobj
1098 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 185.721 289.474 197.677 301.429 ]/A << /S /GoTo /D (page.38) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 221.059 253.464 233.014 265.42 ]/A << /S /GoTo /D (page.43) >> >>
endobj
1099 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 219.016 277.519 230.972 289.474 ]/A << /S /GoTo /D (page.36) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 239.31 241.509 251.266 253.464 ]/A << /S /GoTo /D (page.43) >> >>
endobj
1100 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 207.4 265.564 219.355 277.519 ]/A << /S /GoTo /D (page.14) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 115.505 230.112 127.46 240.951 ]/A << /S /GoTo /D (page.27) >> >>
endobj
1101 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 135.998 254.047 147.953 265.006 ]/A << /S /GoTo /D (page.48) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 131.554 230.112 143.729 240.951 ]/A << /S /GoTo /D (page.47) >> >>
endobj
1102 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 180.561 242.092 192.516 253.051 ]/A << /S /GoTo /D (page.48) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 147.823 230.112 159.998 240.951 ]/A << /S /GoTo /D (page.61) >> >>
endobj
1103 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 230.713 229.698 242.668 241.653 ]/A << /S /GoTo /D (page.35) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 119.131 218.157 131.086 228.996 ]/A << /S /GoTo /D (page.27) >> >>
endobj
1104 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 236.83 217.743 248.785 229.698 ]/A << /S /GoTo /D (page.32) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 135.181 218.157 147.355 228.996 ]/A << /S /GoTo /D (page.47) >> >>
endobj
1105 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 252.88 217.743 265.054 229.698 ]/A << /S /GoTo /D (page.60) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 115.843 206.212 127.799 217.041 ]/A << /S /GoTo /D (page.29) >> >>
endobj
1106 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 199.978 205.788 206.952 217.743 ]/A << /S /GoTo /D (page.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 242.638 182.291 254.593 193.131 ]/A << /S /GoTo /D (page.34) >> >>
endobj
1107 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 168.835 172.449 180.79 184.404 ]/A << /S /GoTo /D (page.28) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 132.371 170.217 144.327 181.285 ]/A << /S /GoTo /D (page.52) >> >>
endobj
1108 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 238.743 160.494 250.698 172.449 ]/A << /S /GoTo /D (page.63) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 185.721 145.868 197.677 157.823 ]/A << /S /GoTo /D (page.39) >> >>
endobj
1109 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 234.229 148.539 246.185 160.494 ]/A << /S /GoTo /D (page.14) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 219.016 133.913 230.972 145.868 ]/A << /S /GoTo /D (page.37) >> >>
endobj
1110 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 205.457 115.648 217.413 126.707 ]/A << /S /GoTo /D (page.49) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 207.4 121.958 219.355 133.913 ]/A << /S /GoTo /D (page.14) >> >>
endobj
1111 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 165.099 103.693 172.073 114.752 ]/A << /S /GoTo /D (page.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 135.998 110.441 147.953 121.4 ]/A << /S /GoTo /D (page.49) >> >>
endobj
1112 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 186.02 91.738 197.975 102.796 ]/A << /S /GoTo /D (page.53) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 180.561 98.486 192.516 109.444 ]/A << /S /GoTo /D (page.49) >> >>
endobj
1113 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 205.776 79.334 217.731 91.29 ]/A << /S /GoTo /D (page.23) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 230.713 86.092 242.668 98.047 ]/A << /S /GoTo /D (page.36) >> >>
endobj
1114 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 194.299 67.598 206.254 78.776 ]/A << /S /GoTo /D (page.48) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 236.83 74.137 248.785 86.092 ]/A << /S /GoTo /D (page.33) >> >>
endobj
1115 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 396.627 758.142 408.582 768.971 ]/A << /S /GoTo /D (page.24) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 252.88 74.137 265.054 86.092 ]/A << /S /GoTo /D (page.61) >> >>
endobj
1116 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 412.676 758.142 424.851 768.971 ]/A << /S /GoTo /D (page.62) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 423.227 757.574 430.201 769.529 ]/A << /S /GoTo /D (page.5) >> >>
endobj
1117 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 401.857 745.898 408.831 757.016 ]/A << /S /GoTo /D (page.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 392.084 711.746 404.039 723.701 ]/A << /S /GoTo /D (page.29) >> >>
endobj
1118 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 380.935 734.232 392.891 745.061 ]/A << /S /GoTo /D (page.24) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 461.991 699.791 473.947 711.746 ]/A << /S /GoTo /D (page.64) >> >>
endobj
1119 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 363.939 722.276 375.894 733.106 ]/A << /S /GoTo /D (page.49) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 457.478 687.835 469.434 699.791 ]/A << /S /GoTo /D (page.15) >> >>
endobj
1120 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 339.571 710.321 351.526 721.151 ]/A << /S /GoTo /D (page.23) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 428.706 642.456 440.661 653.514 ]/A << /S /GoTo /D (page.50) >> >>
endobj
1121 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 409.698 697.798 421.653 709.753 ]/A << /S /GoTo /D (page.49) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 388.348 630.5 395.321 641.559 ]/A << /S /GoTo /D (page.5) >> >>
endobj
1122 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 424.642 697.798 436.597 709.753 ]/A << /S /GoTo /D (page.53) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 409.269 618.545 421.224 629.604 ]/A << /S /GoTo /D (page.54) >> >>
endobj
1123 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 467.83 685.843 479.785 697.798 ]/A << /S /GoTo /D (page.39) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 429.025 606.142 440.98 618.097 ]/A << /S /GoTo /D (page.24) >> >>
endobj
1124 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 414.44 674.456 426.395 685.285 ]/A << /S /GoTo /D (page.40) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 417.548 594.406 429.503 605.584 ]/A << /S /GoTo /D (page.49) >> >>
endobj
1125 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 429.384 674.456 441.339 685.285 ]/A << /S /GoTo /D (page.44) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 396.627 582.799 408.582 593.629 ]/A << /S /GoTo /D (page.25) >> >>
endobj
1126 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 445.434 674.456 457.608 685.285 ]/A << /S /GoTo /D (page.58) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 412.676 582.799 424.851 593.629 ]/A << /S /GoTo /D (page.63) >> >>
endobj
1127 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 354.783 662.152 366.739 673.33 ]/A << /S /GoTo /D (page.56) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 401.857 570.555 408.831 581.674 ]/A << /S /GoTo /D (page.1) >> >>
endobj
1128 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 383.028 638.022 395.202 649.977 ]/A << /S /GoTo /D (page.58) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 380.935 558.889 392.891 569.718 ]/A << /S /GoTo /D (page.25) >> >>
endobj
1129 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 356.766 626.515 368.721 637.574 ]/A << /S /GoTo /D (page.29) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 363.939 546.934 375.894 557.763 ]/A << /S /GoTo /D (page.50) >> >>
endobj
1130 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 407.087 604.368 419.043 615.547 ]/A << /S /GoTo /D (page.48) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 339.571 534.979 351.526 545.808 ]/A << /S /GoTo /D (page.24) >> >>
endobj
1131 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 411.043 592.194 418.016 604.149 ]/A << /S /GoTo /D (page.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 409.698 522.456 421.653 534.411 ]/A << /S /GoTo /D (page.50) >> >>
endobj
1132 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 420.089 568.284 432.044 580.239 ]/A << /S /GoTo /D (page.17) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 424.642 522.456 436.597 534.411 ]/A << /S /GoTo /D (page.54) >> >>
endobj
1133 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 428.348 544.373 440.303 556.329 ]/A << /S /GoTo /D (page.38) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 467.83 510.5 479.785 522.456 ]/A << /S /GoTo /D (page.40) >> >>
endobj
1134 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 414.669 522.456 426.624 534.411 ]/A << /S /GoTo /D (page.42) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 414.44 499.113 426.395 509.943 ]/A << /S /GoTo /D (page.41) >> >>
endobj
1135 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 376.98 510.939 388.935 521.898 ]/A << /S /GoTo /D (page.55) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 429.384 499.113 441.339 509.943 ]/A << /S /GoTo /D (page.45) >> >>
endobj
1136 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 391.396 498.824 403.351 509.943 ]/A << /S /GoTo /D (page.47) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 445.434 499.113 457.608 509.943 ]/A << /S /GoTo /D (page.59) >> >>
endobj
1137 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 368.323 487.029 380.278 498.097 ]/A << /S /GoTo /D (page.50) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 354.783 486.809 366.739 497.987 ]/A << /S /GoTo /D (page.57) >> >>
endobj
1138 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 384.373 487.029 396.547 498.097 ]/A << /S /GoTo /D (page.69) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 383.028 462.68 395.202 474.635 ]/A << /S /GoTo /D (page.59) >> >>
endobj
1139 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 447.944 464.672 459.899 476.628 ]/A << /S /GoTo /D (page.32) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 356.766 451.173 368.721 462.232 ]/A << /S /GoTo /D (page.30) >> >>
endobj
1140 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 466.395 452.717 478.35 464.672 ]/A << /S /GoTo /D (page.17) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 407.087 417.071 419.043 428.249 ]/A << /S /GoTo /D (page.49) >> >>
endobj
1141 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 354.833 441.33 366.788 452.159 ]/A << /S /GoTo /D (page.31) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 411.043 404.897 418.016 416.852 ]/A << /S /GoTo /D (page.5) >> >>
endobj
1142 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 365.603 429.375 377.558 439.925 ]/A << /S /GoTo /D (page.31) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 420.089 380.986 432.044 392.941 ]/A << /S /GoTo /D (page.18) >> >>
endobj
1143 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 488.911 416.852 500.866 428.807 ]/A << /S /GoTo /D (page.20) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 428.348 357.076 440.303 369.031 ]/A << /S /GoTo /D (page.39) >> >>
endobj
1144 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 466.046 404.897 473.02 416.852 ]/A << /S /GoTo /D (page.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 414.669 323.203 426.624 335.158 ]/A << /S /GoTo /D (page.43) >> >>
endobj
1145 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 408.97 380.986 420.925 392.941 ]/A << /S /GoTo /D (page.19) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 376.98 311.686 388.935 322.645 ]/A << /S /GoTo /D (page.56) >> >>
endobj
1146 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 501.503 369.031 513.458 380.986 ]/A << /S /GoTo /D (page.19) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 391.396 299.571 403.351 310.69 ]/A << /S /GoTo /D (page.48) >> >>
endobj
1147 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 465.887 345.679 477.842 356.518 ]/A << /S /GoTo /D (page.33) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 368.323 287.776 380.278 298.844 ]/A << /S /GoTo /D (page.51) >> >>
endobj
1148 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 362.295 333.604 374.25 344.563 ]/A << /S /GoTo /D (page.51) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 384.373 287.776 396.547 298.844 ]/A << /S /GoTo /D (page.70) >> >>
endobj
1149 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 408.97 309.255 420.925 321.21 ]/A << /S /GoTo /D (page.38) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 447.944 253.464 459.899 265.42 ]/A << /S /GoTo /D (page.33) >> >>
endobj
1150 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 448.94 297.3 460.896 309.255 ]/A << /S /GoTo /D (page.36) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 466.395 241.509 478.35 253.464 ]/A << /S /GoTo /D (page.18) >> >>
endobj
1151 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 344.323 285.913 356.497 296.742 ]/A << /S /GoTo /D (page.21) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 354.833 230.122 366.788 240.951 ]/A << /S /GoTo /D (page.32) >> >>
endobj
1152 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 360.592 285.913 372.766 296.742 ]/A << /S /GoTo /D (page.23) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 365.603 218.167 377.558 228.717 ]/A << /S /GoTo /D (page.32) >> >>
endobj
1153 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 376.861 285.913 388.816 296.742 ]/A << /S /GoTo /D (page.46) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 488.911 205.644 500.866 217.599 ]/A << /S /GoTo /D (page.21) >> >>
endobj
1154 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 388.348 261.883 395.321 272.941 ]/A << /S /GoTo /D (page.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 466.046 193.689 473.02 205.644 ]/A << /S /GoTo /D (page.5) >> >>
endobj
1155 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 424.96 249.928 436.916 260.986 ]/A << /S /GoTo /D (page.44) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 408.97 169.778 420.925 181.733 ]/A << /S /GoTo /D (page.20) >> >>
endobj
1156 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 416.233 226.137 428.188 236.966 ]/A << /S /GoTo /D (page.21) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 501.503 157.823 513.458 169.778 ]/A << /S /GoTo /D (page.20) >> >>
endobj
1157 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 432.283 226.137 444.457 236.966 ]/A << /S /GoTo /D (page.66) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 465.887 134.471 477.842 145.31 ]/A << /S /GoTo /D (page.34) >> >>
endobj
1158 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 441.897 214.182 453.852 225.121 ]/A << /S /GoTo /D (page.17) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 362.295 122.396 374.25 133.355 ]/A << /S /GoTo /D (page.52) >> >>
endobj
1159 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 457.947 214.182 470.121 225.121 ]/A << /S /GoTo /D (page.58) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 408.97 98.047 420.925 110.002 ]/A << /S /GoTo /D (page.39) >> >>
endobj
1160 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 431.765 201.659 443.72 213.614 ]/A << /S /GoTo /D (page.23) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 448.94 86.092 460.896 98.047 ]/A << /S /GoTo /D (page.37) >> >>
endobj
1161 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 485.344 189.703 497.299 201.659 ]/A << /S /GoTo /D (page.17) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 344.323 74.695 356.497 85.534 ]/A << /S /GoTo /D (page.22) >> >>
endobj
1162 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 504.947 177.748 516.902 189.703 ]/A << /S /GoTo /D (page.17) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 360.592 74.695 372.766 85.534 ]/A << /S /GoTo /D (page.24) >> >>
endobj
1163 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 354.783 166.012 366.739 177.19 ]/A << /S /GoTo /D (page.23) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 376.861 74.695 388.816 85.534 ]/A << /S /GoTo /D (page.47) >> >>
endobj
-1164 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 413.115 154.406 420.089 165.235 ]/A << /S /GoTo /D (page.9) >> >>
+1168 0 obj
+<< /D [ 1166 0 R /XYZ 78.37 808.885 null ] >>
endobj
1165 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 423.077 154.406 435.033 165.235 ]/A << /S /GoTo /D (page.16) >> >>
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 385 0 R /F56 388 0 R /F66 392 0 R /F57 389 0 R /F55 387 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-1166 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 440.412 141.883 452.368 153.838 ]/A << /S /GoTo /D (page.10) >> >>
+1244 0 obj
+<< /Filter /FlateDecode /Length 2529 >>
+stream
+x[͒ޟ TMM9Te=T{|o~> Ysӷ߿~ø[To7sQy2J}֤v?|Ckn7/[?V1*mTFS&n_m&~zׇ"sLˆJbט)6֡#sa(zeN
+w`b* e;e7Iīt*qSů C1һle]T`W}enR;HGak@9)IQyQX#u,f};KX8)VA .aQAgv)}`[Et'@Ү{&3g HZ$>G [&{hU )'=^c)0
+u Ď{v) [MJM`WXDb#]C t ɲz9PGNQ5S}dr1 eF92KxGx+dJTC{B=8f+JʧlimGm4:vDb 2gY/8M_{o't&H2Xcd+ԑ9/
+zRXӷuDEBp4(p=yAvG!ѥlƮ<:>&u(R@Xr]@j9/yL~_]RƘf0fQXd.AVC>VqQC{`igڱ.8,HHU8!ƬwA~RGʕMpMo?;@%jASD"rXK.:Eb`*RݩCB'sUyP '.g r.z9ȧ/t`$\/ۯf)g]689 ϸ&-6Ck_SE"*rJ'B"ǥa $ <vJZ-K `p6{"0WۺGKT>J>9̀*I3>)Xus%c>" 6)Ŗƅ0n%g][kUW
+.GI.zEO_#>"4L*9jcIjZgB-ZRdZlXp׭ФC
+ :h$TPzF4
+%hL<t
+^i§uR(.qѡצ. mU.ӱ qXː,mpIoҾ\ c +.=N>N 4nuͥ,xv9W~?jSZV\ lМ(
+KQjlrӿ]sr()(rNM`^Fan͓Vμ$MX\4l$`_ ߡ1wQKr/g 8
+B[/bS_'k<`!;C;U Vq׆W+2&p7WAUǨt7\2\\ ;PVB;IOVqA"|1/Q j1%u
+)H><!>a/OU9i<^cP=N[#{^C 7w۶dAg<B$(\^R 1^MxEx6Jʛcg>w 7WTyBĊ+*=7ŸVR>c!_mlt*F&ǐAZLG'fܦu9hƵɚ?dg
+endstream
endobj
-1167 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 456.462 141.883 468.637 153.838 ]/A << /S /GoTo /D (page.58) >> >>
+1243 0 obj
+<< /Type /Page /Contents 1244 0 R /Resources 1242 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1065 0 R /Annots 1246 0 R >>
endobj
-1168 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 427.541 119.965 439.715 131.92 ]/A << /S /GoTo /D (page.21) >> >>
+1246 0 obj
+[ 1164 0 R 1170 0 R 1171 0 R 1172 0 R 1173 0 R 1174 0 R 1175 0 R 1176 0 R 1177 0 R 1178 0 R 1179 0 R 1180 0 R 1181 0 R 1182 0 R 1183 0 R 1184 0 R 1185 0 R 1186 0 R 1187 0 R 1188 0 R 1189 0 R 1190 0 R 1191 0 R 1192 0 R 1193 0 R 1194 0 R 1195 0 R 1196 0 R 1197 0 R 1198 0 R 1199 0 R 1200 0 R 1201 0 R 1202 0 R 1203 0 R 1204 0 R 1205 0 R 1206 0 R 1207 0 R 1208 0 R 1209 0 R 1210 0 R 1211 0 R 1212 0 R 1213 0 R 1214 0 R 1215 0 R 1216 0 R 1217 0 R 1218 0 R 1219 0 R 1220 0 R 1221 0 R 1222 0 R 1223 0 R 1224 0 R 1225 0 R 1226 0 R 1227 0 R 1228 0 R 1229 0 R 1230 0 R 1231 0 R 1232 0 R 1233 0 R 1234 0 R 1235 0 R 1236 0 R 1237 0 R 1238 0 R 1239 0 R 1240 0 R 1241 0 R ]
endobj
-1169 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 443.81 119.965 455.765 131.92 ]/A << /S /GoTo /D (page.45) >> >>
+1164 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 165.099 746.067 172.073 757.126 ]/A << /S /GoTo /D (page.5) >> >>
endobj
1170 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 445.643 108.01 457.598 119.965 ]/A << /S /GoTo /D (page.14) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 201.711 734.112 213.667 745.17 ]/A << /S /GoTo /D (page.45) >> >>
endobj
1171 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 365.364 96.613 377.319 107.452 ]/A << /S /GoTo /D (page.39) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 192.984 710.321 204.939 721.151 ]/A << /S /GoTo /D (page.22) >> >>
endobj
1172 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 453.473 84.099 465.429 96.055 ]/A << /S /GoTo /D (page.32) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 209.034 710.321 221.208 721.151 ]/A << /S /GoTo /D (page.67) >> >>
endobj
1173 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 472.293 72.144 484.248 84.099 ]/A << /S /GoTo /D (page.32) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 218.648 698.366 230.603 709.305 ]/A << /S /GoTo /D (page.18) >> >>
endobj
-1179 0 obj
-<< /D [ 1177 0 R /XYZ 78.37 808.885 null ] >>
+1174 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 234.698 698.366 246.872 709.305 ]/A << /S /GoTo /D (page.59) >> >>
+endobj
+1175 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 208.516 685.843 220.471 697.798 ]/A << /S /GoTo /D (page.24) >> >>
endobj
1176 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F57 385 0 R /F55 383 0 R /F56 384 0 R /F66 388 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 262.095 673.888 274.05 685.843 ]/A << /S /GoTo /D (page.18) >> >>
endobj
-1235 0 obj
-<< /Filter /FlateDecode /Length 1925 >>
-stream
-xڵZ͎6 SVI6MVڞץ,ɶhEv2CĎ'GE_|x|Ut7 wߵv5ݵ5"ss^FD|=]Bʫg&zθ)Ydx?׏>bkN9X|Is(_sڋ~\Zf-IRLRokOUC?z$˓gKᚣ_#+0BHW`XY9 ((gb>.1жJmP3T+GYVA7XrV,o6<CHK+mM^sESɡv ;̐3;L@jUx c^d^lWr;5k{^kPթ2+x>aZgSuޖZIo׬X?F@sh]ϡwb\ $yiUHRj+HP?A҇GM1kU{a 2D52**u5᪀F9 Fw u:Sw)J)ZR53%7Lr\9
-H(Z; d7FnM3
-=J9M'zAy $bBfPn4^Z0"k!`牨28HiEN@B  Z;AU,l sX:=͔VD%29]?#fHt$fC jm' 3aqwbw/rMFv>V]2P+ŭb.No[6ݬvɭT4CdKQ<5@ZS7]j>. N)"8Z+m ;0K7!(PaÍ'c2q̤uHj^#)cbװx&e5b+#zx1 wYa 1E`Ɣb*$=Sdq|JH|xޯǔxtLK]δVo6?vi,*,AZ:Fl_->0Ȣk*=%Y *mA’WJ>ze'yR49))=5|?j!#.8QJ?oLc z֟4l(E}&o7 /jWQ[C9te9W٬Ħ3x8#^ ּş!k<ڡAUwTM+꦳|PrT~JJ(8($ T9š)ugpb0RΣ#kg|yw1~'>8DN9k6 /،Fevp)͂#/<pϹNc6RN\S| +M<`>*${5<]1o[zXط4izN`'%Ы <GZy!YbH?
-iʔ(V7WaBt>Fڵ]Eu`;\( [j<#*ǗIzehQDxВԘ"`u41"Ba*]'lAO$meuxgyif3>do
-endstream
+1177 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 281.698 661.933 293.653 673.888 ]/A << /S /GoTo /D (page.18) >> >>
endobj
-1234 0 obj
-<< /Type /Page /Contents 1235 0 R /Resources 1233 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1180 0 R /Annots 1237 0 R >>
+1178 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 131.535 650.197 143.49 661.375 ]/A << /S /GoTo /D (page.24) >> >>
endobj
-1237 0 obj
-[ 1174 0 R 1175 0 R 1182 0 R 1183 0 R 1184 0 R 1185 0 R 1186 0 R 1187 0 R 1188 0 R 1189 0 R 1190 0 R 1191 0 R 1192 0 R 1193 0 R 1194 0 R 1195 0 R 1196 0 R 1197 0 R 1198 0 R 1199 0 R 1200 0 R 1201 0 R 1202 0 R 1203 0 R 1204 0 R 1205 0 R 1206 0 R 1207 0 R 1208 0 R 1209 0 R 1210 0 R 1211 0 R 1212 0 R 1213 0 R 1214 0 R 1215 0 R 1216 0 R 1217 0 R 1218 0 R 1219 0 R 1220 0 R 1221 0 R 1222 0 R 1223 0 R 1224 0 R 1225 0 R 1226 0 R 1227 0 R 1228 0 R 1229 0 R 1230 0 R 1231 0 R 1232 0 R ]
+1179 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 189.866 638.59 201.821 649.42 ]/A << /S /GoTo /D (page.10) >> >>
endobj
-1174 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 254.105 757.574 266.06 769.529 ]/A << /S /GoTo /D (page.32) >> >>
+1180 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 204.81 638.59 216.765 649.42 ]/A << /S /GoTo /D (page.17) >> >>
endobj
-1175 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 205.099 733.664 217.054 745.619 ]/A << /S /GoTo /D (page.45) >> >>
+1181 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 217.163 626.067 229.119 638.022 ]/A << /S /GoTo /D (page.11) >> >>
endobj
1182 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 156.909 721.708 168.865 733.664 ]/A << /S /GoTo /D (page.45) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 233.213 626.067 245.388 638.022 ]/A << /S /GoTo /D (page.59) >> >>
endobj
1183 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 194.927 709.753 206.882 721.708 ]/A << /S /GoTo /D (page.36) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 204.292 592.194 216.466 604.149 ]/A << /S /GoTo /D (page.22) >> >>
endobj
1184 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 219.345 697.798 231.3 709.753 ]/A << /S /GoTo /D (page.46) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 220.561 592.194 232.516 604.149 ]/A << /S /GoTo /D (page.46) >> >>
endobj
1185 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 270.155 685.843 282.11 697.798 ]/A << /S /GoTo /D (page.46) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 222.394 580.239 234.349 592.194 ]/A << /S /GoTo /D (page.15) >> >>
endobj
1186 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 145.99 674.456 157.946 685.285 ]/A << /S /GoTo /D (page.10) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 142.115 568.842 154.07 579.681 ]/A << /S /GoTo /D (page.40) >> >>
endobj
1187 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 191.988 661.933 203.943 673.888 ]/A << /S /GoTo /D (page.42) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 230.224 556.329 242.18 568.284 ]/A << /S /GoTo /D (page.33) >> >>
endobj
1188 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 208.038 661.933 220.212 673.888 ]/A << /S /GoTo /D (page.58) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 249.044 544.373 260.999 556.329 ]/A << /S /GoTo /D (page.33) >> >>
endobj
1189 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 281.698 649.977 293.653 661.933 ]/A << /S /GoTo /D (page.34) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 254.105 532.418 266.06 544.373 ]/A << /S /GoTo /D (page.33) >> >>
endobj
1190 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 205.099 626.067 218.548 638.022 ]/A << /S /GoTo /D (page.35) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 205.099 508.508 217.054 520.463 ]/A << /S /GoTo /D (page.46) >> >>
endobj
1191 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 222.643 626.067 234.598 638.022 ]/A << /S /GoTo /D (page.53) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 156.909 496.553 168.865 508.508 ]/A << /S /GoTo /D (page.46) >> >>
endobj
1192 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 238.693 626.067 250.867 638.022 ]/A << /S /GoTo /D (page.64) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 194.927 484.598 206.882 496.553 ]/A << /S /GoTo /D (page.37) >> >>
endobj
1193 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 254.962 626.067 267.136 638.022 ]/A << /S /GoTo /D (page.68) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 219.345 472.642 231.3 484.598 ]/A << /S /GoTo /D (page.47) >> >>
endobj
1194 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 205.099 602.157 218.548 614.112 ]/A << /S /GoTo /D (page.39) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 270.155 460.687 282.11 472.642 ]/A << /S /GoTo /D (page.47) >> >>
endobj
1195 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 147.226 580.807 159.181 591.636 ]/A << /S /GoTo /D (page.40) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 145.99 449.3 157.946 460.129 ]/A << /S /GoTo /D (page.11) >> >>
endobj
1196 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 163.276 580.807 175.45 591.636 ]/A << /S /GoTo /D (page.58) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 191.988 436.777 203.943 448.732 ]/A << /S /GoTo /D (page.43) >> >>
endobj
1197 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 152.456 568.852 164.411 579.681 ]/A << /S /GoTo /D (page.41) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 208.038 436.777 220.212 448.732 ]/A << /S /GoTo /D (page.59) >> >>
endobj
1198 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 243.266 556.329 255.221 568.284 ]/A << /S /GoTo /D (page.41) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 281.698 424.822 293.653 436.777 ]/A << /S /GoTo /D (page.35) >> >>
endobj
1199 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 163.425 544.373 175.38 556.329 ]/A << /S /GoTo /D (page.24) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 205.099 400.911 218.548 412.867 ]/A << /S /GoTo /D (page.36) >> >>
endobj
1200 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 168.058 532.418 180.232 544.373 ]/A << /S /GoTo /D (page.58) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 222.643 400.911 234.598 412.867 ]/A << /S /GoTo /D (page.54) >> >>
endobj
1201 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 187.853 520.463 199.809 532.418 ]/A << /S /GoTo /D (page.44) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 238.693 400.911 250.867 412.867 ]/A << /S /GoTo /D (page.65) >> >>
endobj
1202 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 229.706 508.508 241.662 520.463 ]/A << /S /GoTo /D (page.49) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 254.962 400.911 267.136 412.867 ]/A << /S /GoTo /D (page.69) >> >>
endobj
1203 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 165.099 485.046 172.073 496.104 ]/A << /S /GoTo /D (page.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 205.099 377.001 218.548 388.956 ]/A << /S /GoTo /D (page.40) >> >>
endobj
1204 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 176.167 485.046 188.342 496.104 ]/A << /S /GoTo /D (page.57) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 147.226 343.696 159.181 354.525 ]/A << /S /GoTo /D (page.41) >> >>
endobj
1205 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 223.599 473.091 230.573 484.149 ]/A << /S /GoTo /D (page.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 163.276 343.696 175.45 354.525 ]/A << /S /GoTo /D (page.59) >> >>
endobj
1206 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 234.668 473.091 246.842 484.149 ]/A << /S /GoTo /D (page.62) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 152.456 331.741 164.411 342.57 ]/A << /S /GoTo /D (page.42) >> >>
endobj
1207 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 192.984 461.136 204.939 472.194 ]/A << /S /GoTo /D (page.15) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 243.266 319.218 255.221 331.173 ]/A << /S /GoTo /D (page.42) >> >>
endobj
1208 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 232.845 448.732 244.8 460.687 ]/A << /S /GoTo /D (page.15) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 163.425 307.263 175.38 319.218 ]/A << /S /GoTo /D (page.25) >> >>
endobj
1209 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 206.454 436.777 213.427 448.732 ]/A << /S /GoTo /D (page.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 168.058 295.307 180.232 307.263 ]/A << /S /GoTo /D (page.59) >> >>
endobj
1210 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 217.522 436.777 229.696 448.732 ]/A << /S /GoTo /D (page.57) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 187.853 283.352 199.809 295.307 ]/A << /S /GoTo /D (page.45) >> >>
endobj
1211 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 205.099 402.904 217.054 414.859 ]/A << /S /GoTo /D (page.38) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 229.706 271.397 241.662 283.352 ]/A << /S /GoTo /D (page.50) >> >>
endobj
1212 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 216.685 380.986 228.64 392.941 ]/A << /S /GoTo /D (page.25) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 165.099 247.935 172.073 258.994 ]/A << /S /GoTo /D (page.5) >> >>
endobj
1213 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 232.735 380.986 244.69 392.941 ]/A << /S /GoTo /D (page.50) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 176.167 247.935 188.342 258.994 ]/A << /S /GoTo /D (page.58) >> >>
endobj
1214 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 191.131 369.031 198.105 380.986 ]/A << /S /GoTo /D (page.8) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 223.599 235.98 230.573 247.038 ]/A << /S /GoTo /D (page.5) >> >>
endobj
1215 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 165.437 357.076 177.393 369.031 ]/A << /S /GoTo /D (page.25) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 234.668 235.98 246.842 247.038 ]/A << /S /GoTo /D (page.63) >> >>
endobj
1216 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 181.487 357.076 193.442 369.031 ]/A << /S /GoTo /D (page.50) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 192.984 224.025 204.939 235.083 ]/A << /S /GoTo /D (page.16) >> >>
endobj
1217 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 168.147 345.689 180.102 356.518 ]/A << /S /GoTo /D (page.47) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 232.845 211.621 244.8 223.576 ]/A << /S /GoTo /D (page.16) >> >>
endobj
1218 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 168.147 333.733 180.102 344.563 ]/A << /S /GoTo /D (page.47) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 206.454 199.666 213.427 211.621 ]/A << /S /GoTo /D (page.5) >> >>
endobj
1219 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 115.843 321.778 127.799 332.608 ]/A << /S /GoTo /D (page.28) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 217.522 199.666 229.696 211.621 ]/A << /S /GoTo /D (page.58) >> >>
endobj
1220 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 131.535 309.823 143.49 320.652 ]/A << /S /GoTo /D (page.30) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 205.099 153.838 217.054 165.793 ]/A << /S /GoTo /D (page.39) >> >>
endobj
1221 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 205.457 285.793 217.413 296.852 ]/A << /S /GoTo /D (page.12) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 216.685 119.965 228.64 131.92 ]/A << /S /GoTo /D (page.26) >> >>
endobj
1222 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 165.099 273.838 172.073 284.897 ]/A << /S /GoTo /D (page.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 232.735 119.965 244.69 131.92 ]/A << /S /GoTo /D (page.51) >> >>
endobj
1223 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 186.02 261.883 197.975 272.941 ]/A << /S /GoTo /D (page.36) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 191.131 108.01 198.105 119.965 ]/A << /S /GoTo /D (page.8) >> >>
endobj
1224 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 171.505 250.047 183.46 260.877 ]/A << /S /GoTo /D (page.65) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 165.437 96.055 177.393 108.01 ]/A << /S /GoTo /D (page.26) >> >>
endobj
1225 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 201.711 216.055 213.667 227.113 ]/A << /S /GoTo /D (page.24) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 181.487 96.055 193.442 108.01 ]/A << /S /GoTo /D (page.51) >> >>
endobj
1226 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 178.688 204.099 190.643 215.158 ]/A << /S /GoTo /D (page.10) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 168.147 84.667 180.102 95.497 ]/A << /S /GoTo /D (page.48) >> >>
endobj
1227 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 194.21 192.264 206.165 203.153 ]/A << /S /GoTo /D (page.23) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 168.147 72.712 180.102 83.542 ]/A << /S /GoTo /D (page.48) >> >>
endobj
1228 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 209.153 192.264 221.109 203.153 ]/A << /S /GoTo /D (page.26) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 339.092 758.142 351.048 768.971 ]/A << /S /GoTo /D (page.29) >> >>
endobj
1229 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 166.424 169.778 178.379 181.733 ]/A << /S /GoTo /D (page.24) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 354.783 746.187 366.739 757.016 ]/A << /S /GoTo /D (page.31) >> >>
endobj
1230 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 185.97 157.823 197.926 169.778 ]/A << /S /GoTo /D (page.28) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 428.706 722.157 440.661 733.215 ]/A << /S /GoTo /D (page.12) >> >>
endobj
1231 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 201.582 145.868 213.537 157.823 ]/A << /S /GoTo /D (page.36) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 388.348 710.202 395.321 721.26 ]/A << /S /GoTo /D (page.5) >> >>
endobj
1232 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 281.698 123.95 293.653 135.905 ]/A << /S /GoTo /D (page.38) >> >>
-endobj
-1236 0 obj
-<< /D [ 1234 0 R /XYZ 78.37 808.885 null ] >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 409.269 698.246 421.224 709.305 ]/A << /S /GoTo /D (page.37) >> >>
endobj
1233 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F56 384 0 R /F55 383 0 R /F57 385 0 R /F66 388 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 394.754 686.411 406.709 697.24 ]/A << /S /GoTo /D (page.66) >> >>
endobj
-1287 0 obj
-<< /Filter /FlateDecode /Length 2031 >>
-stream
-x\n6+aə `q+mWm&%Q|^k؎%33<?鷋A I'qЖ>h%}K9_Pr0?`U3,Z-q%<[~FQ_:>y4&!B?^\Vw#uV6[Lh+q׬D8>)>L'j
-˘?,1yHݑyP`/Y]奄A']~ b^T IzHt9U(D*4EDR@cHux_Ki/U+ ~>_JU!4IH)6KTtQ\=H캯j}, ZC=kgioZ}RJ8(NKw3ΰ!Of;[_JG} L[y@aX;+p o=^f\
-%4cN'&Ҡ96;.nkfʏ6oGU|=@:;c=d*仆pa0LiT}Pc]<F Gzz` 1'U``87(|<9!qkHD;YwoݘYR G+{ë8j!G-} 0'yxΤ ӷ4Fznxa w]LK%~n#4 
-cvIcLj:ŧmus"SHS5 ს-OraM|!eta.I=0%<xM/ֽ3v9A(NLD-g4}ؘ[ )a 殆R)\l`$2LeI%=hZYU^ Lg3#Ť)6"#rȠ)^3|`P
-/<8ǵ
-@ά]py=?[1M\P+:l bqq#dھxU3$ ˜$zƚPg);ތޏaq5P\+)-7+a;賊|]Xv ?XݴӯnUmMKRhdP(S]
-J94i?M
-.?mA)R7Aؚn|z@L23IHVĮgM,.#)R*$"=|wnR$cmk7B[ISnc2hFP
-endstream
+1234 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 424.96 640.463 436.916 651.522 ]/A << /S /GoTo /D (page.25) >> >>
endobj
-1286 0 obj
-<< /Type /Page /Contents 1287 0 R /Resources 1285 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1180 0 R /Annots 1289 0 R >>
+1235 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 401.937 628.508 413.892 639.566 ]/A << /S /GoTo /D (page.11) >> >>
endobj
-1289 0 obj
-[ 1238 0 R 1239 0 R 1240 0 R 1241 0 R 1242 0 R 1243 0 R 1244 0 R 1245 0 R 1246 0 R 1247 0 R 1248 0 R 1249 0 R 1250 0 R 1251 0 R 1252 0 R 1253 0 R 1254 0 R 1255 0 R 1256 0 R 1257 0 R 1258 0 R 1259 0 R 1260 0 R 1261 0 R 1262 0 R 1263 0 R 1264 0 R 1265 0 R 1266 0 R 1267 0 R 1268 0 R 1269 0 R 1270 0 R 1271 0 R 1272 0 R 1273 0 R 1274 0 R 1275 0 R 1276 0 R 1277 0 R 1278 0 R 1279 0 R 1280 0 R 1281 0 R 1282 0 R 1283 0 R ]
+1236 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 417.458 616.672 429.414 627.562 ]/A << /S /GoTo /D (page.24) >> >>
+endobj
+1237 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 432.402 616.672 444.358 627.562 ]/A << /S /GoTo /D (page.27) >> >>
endobj
1238 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 736.093 264.366 747.062 ]/A << /S /GoTo /D (section.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 389.673 582.232 401.628 594.187 ]/A << /S /GoTo /D (page.25) >> >>
endobj
1239 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 714.245 277.846 725.085 ]/A << /S /GoTo /D (section.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 409.219 570.276 421.175 582.232 ]/A << /S /GoTo /D (page.29) >> >>
endobj
1240 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 692.268 267.116 703.227 ]/A << /S /GoTo /D (section.3) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 424.831 558.321 436.786 570.276 ]/A << /S /GoTo /D (page.37) >> >>
endobj
1241 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 672.283 149.647 681.249 ]/A << /S /GoTo /D (section.4) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 504.947 524.448 516.902 536.403 ]/A << /S /GoTo /D (page.39) >> >>
endobj
-1242 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 660.168 180.132 669.403 ]/A << /S /GoTo /D (subsection.4.1) >> >>
+1245 0 obj
+<< /D [ 1243 0 R /XYZ 78.37 808.885 null ] >>
endobj
-1243 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 648.213 234.558 657.339 ]/A << /S /GoTo /D (subsection.4.2) >> >>
+1242 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 385 0 R /F56 388 0 R /F57 389 0 R /F66 392 0 R /F55 387 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-1244 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 636.258 218.807 645.383 ]/A << /S /GoTo /D (subsection.4.3) >> >>
+1296 0 obj
+<< /Filter /FlateDecode /Length 2025 >>
+stream
+x\n6+aə `q+mWm&%Q87X9<=<^~({Đ^y ~mVqqxȹ ,
+~Y:âeBWӣG0nċ {{>+Nk*S%Q!nu8Oq@ZOaë́wJ4cZ ȔyB;v @ bXD1[p .
+dw#I&/{ʣ: \D E1w%f.{כpO<a;RH}dR,lm? 3 t1~PW2~
+R2XuMͣخJ#Gka 2
+U
+wGXB7yΡiɣoa'{ Y4Pٚý7ʅ=9#/ 9f۔%E={†v*$}C
+p|K?)'9H_W%7DZЊ(py|VJS5єS
+endstream
endobj
-1245 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 624.303 217.393 633.428 ]/A << /S /GoTo /D (subsection.4.4) >> >>
+1295 0 obj
+<< /Type /Page /Contents 1296 0 R /Resources 1294 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1065 0 R /Annots 1298 0 R >>
endobj
-1246 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 610.634 327.31 621.583 ]/A << /S /GoTo /D (subsection.4.5) >> >>
+1298 0 obj
+[ 1247 0 R 1248 0 R 1249 0 R 1250 0 R 1251 0 R 1252 0 R 1253 0 R 1254 0 R 1255 0 R 1256 0 R 1257 0 R 1258 0 R 1259 0 R 1260 0 R 1261 0 R 1262 0 R 1263 0 R 1264 0 R 1265 0 R 1266 0 R 1267 0 R 1268 0 R 1269 0 R 1270 0 R 1271 0 R 1272 0 R 1273 0 R 1274 0 R 1275 0 R 1276 0 R 1277 0 R 1278 0 R 1279 0 R 1280 0 R 1281 0 R 1282 0 R 1283 0 R 1284 0 R 1285 0 R 1286 0 R 1287 0 R 1288 0 R 1289 0 R 1290 0 R 1291 0 R 1292 0 R ]
endobj
1247 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 598.679 315.684 609.628 ]/A << /S /GoTo /D (subsection.4.6) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 736.093 264.366 747.062 ]/A << /S /GoTo /D (section.1) >> >>
endobj
1248 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 578.584 142.752 587.6 ]/A << /S /GoTo /D (section.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 714.245 277.846 725.085 ]/A << /S /GoTo /D (section.2) >> >>
endobj
1249 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 566.519 336.317 575.755 ]/A << /S /GoTo /D (subsection.5.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 692.268 267.116 703.227 ]/A << /S /GoTo /D (section.3) >> >>
endobj
1250 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 554.564 226.588 563.69 ]/A << /S /GoTo /D (subsubsection.5.1.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 672.283 149.647 681.249 ]/A << /S /GoTo /D (section.4) >> >>
endobj
1251 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 540.337 240.865 552.293 ]/A << /S /GoTo /D (subsubsection.5.1.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 660.168 180.132 669.403 ]/A << /S /GoTo /D (subsection.4.1) >> >>
endobj
1252 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 530.654 298.369 539.889 ]/A << /S /GoTo /D (subsection.5.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 648.213 234.558 657.339 ]/A << /S /GoTo /D (subsection.4.2) >> >>
endobj
1253 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 518.699 283.684 527.934 ]/A << /S /GoTo /D (subsection.5.3) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 636.258 218.807 645.383 ]/A << /S /GoTo /D (subsection.4.3) >> >>
endobj
1254 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 504.92 264.835 515.869 ]/A << /S /GoTo /D (subsubsection.5.3.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 624.303 217.393 633.428 ]/A << /S /GoTo /D (subsection.4.4) >> >>
endobj
1255 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 492.965 342.155 503.914 ]/A << /S /GoTo /D (subsubsection.5.3.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 610.634 327.31 621.583 ]/A << /S /GoTo /D (subsection.4.5) >> >>
endobj
1256 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 480.562 239.868 492.517 ]/A << /S /GoTo /D (subsubsection.5.3.3) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 598.679 315.684 609.628 ]/A << /S /GoTo /D (subsection.4.6) >> >>
endobj
1257 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 468.606 254.992 480.562 ]/A << /S /GoTo /D (subsubsection.5.3.4) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 586.166 224.606 598.121 ]/A << /S /GoTo /D (subsection.4.7) >> >>
endobj
1258 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 458.923 289.512 468.158 ]/A << /S /GoTo /D (subsubsection.5.3.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 566.629 142.752 575.645 ]/A << /S /GoTo /D (section.5) >> >>
endobj
1259 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 435.222 364.342 446.19 ]/A << /S /GoTo /D (section.6) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 554.564 336.317 563.799 ]/A << /S /GoTo /D (subsection.5.1) >> >>
endobj
1260 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 425.05 188.929 434.285 ]/A << /S /GoTo /D (subsection.6.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 542.609 226.588 551.735 ]/A << /S /GoTo /D (subsubsection.5.1.1) >> >>
endobj
1261 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 410.823 314.728 422.778 ]/A << /S /GoTo /D (subsection.6.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 528.382 240.865 540.337 ]/A << /S /GoTo /D (subsubsection.5.1.2) >> >>
endobj
1262 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 401.139 301.985 410.375 ]/A << /S /GoTo /D (subsection.6.3) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 518.699 298.369 527.934 ]/A << /S /GoTo /D (subsection.5.2) >> >>
endobj
1263 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 387.471 243.744 398.31 ]/A << /S /GoTo /D (subsection.6.4) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 506.743 283.684 515.979 ]/A << /S /GoTo /D (subsection.5.3) >> >>
endobj
1264 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 364.995 223.729 376.95 ]/A << /S /GoTo /D (section.7) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 492.965 264.835 503.914 ]/A << /S /GoTo /D (subsubsection.5.3.1) >> >>
endobj
1265 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 345.458 224.894 354.534 ]/A << /S /GoTo /D (section.8) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 481.01 342.155 491.959 ]/A << /S /GoTo /D (subsubsection.5.3.2) >> >>
endobj
1266 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 333.393 172.481 342.519 ]/A << /S /GoTo /D (subsection.8.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 468.606 239.868 480.562 ]/A << /S /GoTo /D (subsubsection.5.3.3) >> >>
endobj
1267 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 321.438 191.938 330.564 ]/A << /S /GoTo /D (subsection.8.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 456.651 254.992 468.606 ]/A << /S /GoTo /D (subsubsection.5.3.4) >> >>
endobj
1268 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 309.483 245.109 318.718 ]/A << /S /GoTo /D (subsection.8.3) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 446.968 289.512 456.203 ]/A << /S /GoTo /D (subsubsection.5.3.5) >> >>
endobj
1269 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 287.675 251.545 296.691 ]/A << /S /GoTo /D (section.9) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 423.266 364.342 434.235 ]/A << /S /GoTo /D (section.6) >> >>
endobj
1270 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 265.757 234.987 274.773 ]/A << /S /GoTo /D (section.10) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 413.095 188.929 422.33 ]/A << /S /GoTo /D (subsection.6.1) >> >>
endobj
1271 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 251.869 225.731 262.928 ]/A << /S /GoTo /D (subsection.10.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 398.868 314.728 410.823 ]/A << /S /GoTo /D (subsection.6.2) >> >>
endobj
1272 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 239.466 302.264 251.421 ]/A << /S /GoTo /D (subsection.10.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 389.184 301.985 398.42 ]/A << /S /GoTo /D (subsection.6.3) >> >>
endobj
1273 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 227.949 379.495 238.908 ]/A << /S /GoTo /D (subsection.10.3) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 375.515 243.744 386.355 ]/A << /S /GoTo /D (subsection.6.4) >> >>
endobj
1274 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 217.827 253.158 227.062 ]/A << /S /GoTo /D (subsection.10.4) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 353.04 223.729 364.995 ]/A << /S /GoTo /D (section.7) >> >>
endobj
1275 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 205.872 270.653 215.107 ]/A << /S /GoTo /D (subsection.10.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 333.503 224.894 342.579 ]/A << /S /GoTo /D (section.8) >> >>
endobj
1276 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 193.916 257.064 203.042 ]/A << /S /GoTo /D (subsection.10.6) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 321.438 172.481 330.564 ]/A << /S /GoTo /D (subsection.8.1) >> >>
endobj
1277 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 170.285 329.741 181.184 ]/A << /S /GoTo /D (section.11) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 309.483 191.938 318.609 ]/A << /S /GoTo /D (subsection.8.2) >> >>
endobj
1278 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 147.809 176.964 159.765 ]/A << /S /GoTo /D (section.12) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 297.528 245.109 306.763 ]/A << /S /GoTo /D (subsection.8.3) >> >>
endobj
1279 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 135.854 293.756 147.809 ]/A << /S /GoTo /D (subsection.12.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 275.72 251.545 284.736 ]/A << /S /GoTo /D (section.9) >> >>
endobj
1280 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 123.899 427.634 135.854 ]/A << /S /GoTo /D (subsection.12.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 253.802 234.987 262.818 ]/A << /S /GoTo /D (section.10) >> >>
endobj
1281 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 111.944 407.37 123.899 ]/A << /S /GoTo /D (subsection.12.3) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 239.914 225.731 250.973 ]/A << /S /GoTo /D (subsection.10.1) >> >>
endobj
1282 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 99.989 340.411 111.944 ]/A << /S /GoTo /D (subsection.12.4) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 227.511 302.264 239.466 ]/A << /S /GoTo /D (subsection.10.2) >> >>
endobj
1283 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 78.629 269.836 89.498 ]/A << /S /GoTo /D (section.13) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 215.994 379.495 226.953 ]/A << /S /GoTo /D (subsection.10.3) >> >>
endobj
-1288 0 obj
-<< /D [ 1286 0 R /XYZ 78.37 808.885 null ] >>
+1284 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 205.872 253.158 215.107 ]/A << /S /GoTo /D (subsection.10.4) >> >>
endobj
1285 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 402 0 R /F66 388 0 R /F15 381 0 R >> /ProcSet [ /PDF /Text ] >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 193.916 270.653 203.152 ]/A << /S /GoTo /D (subsection.10.5) >> >>
endobj
-1334 0 obj
-<< /Filter /FlateDecode /Length 1890 >>
-stream
-x\n8+aU\@9\gNaqi;vw`X,{*Y<,X{ArvA TzҪ4 }Ϟ
-
-R2 15Rc"C (dͼO'%ȻaJ`ç NH.o܅69]=qThүK_Ki,
-ί]û{^tꬒ]H>uuMYҙ=nP
-EG{Aj}CJJjJG]NCYj,Q@-Щ:/2eO9Ok݆߬\\R9T3W:˴ү ޏJę|0BkWL""IV_ I0JkvI_Xx̯5?ʲ6u6-{1MxB|E͠0\dj@ŸE#&M
-?DZъN ú.g5r6B[pOIu5Bxo&.wÂ| Fk**t$"e<焾uwINPKaqLROHUwҜ:sHgtZYˎRD%\"\c{^X}q1ʹ>X
-E??.`~p~vPk1lȼ.ZLJαnlb*9u75X
-^6dmH)^OVE_ƁV/v]F#rZ-^1a
-K]Ȗ~sS,hs[$(% ${Q%IS9 tIv\V @*j?YyaF5ukNK\x x]D
-endstream
+1286 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 181.961 257.064 191.087 ]/A << /S /GoTo /D (subsection.10.6) >> >>
endobj
-1333 0 obj
-<< /Type /Page /Contents 1334 0 R /Resources 1332 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1180 0 R /Annots 1336 0 R >>
+1287 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 158.33 329.741 169.229 ]/A << /S /GoTo /D (section.11) >> >>
endobj
-1336 0 obj
-[ 1284 0 R 1290 0 R 1291 0 R 1292 0 R 1293 0 R 1294 0 R 1295 0 R 1296 0 R 1297 0 R 1298 0 R 1299 0 R 1300 0 R 1301 0 R 1302 0 R 1303 0 R 1304 0 R 1305 0 R 1306 0 R 1307 0 R 1308 0 R 1309 0 R 1310 0 R 1311 0 R 1312 0 R 1313 0 R 1314 0 R 1315 0 R 1316 0 R 1317 0 R 1318 0 R 1319 0 R 1320 0 R 1321 0 R 1322 0 R 1323 0 R 1324 0 R 1325 0 R 1326 0 R 1327 0 R 1328 0 R 1329 0 R 1330 0 R 1331 0 R ]
+1288 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 135.854 176.964 147.809 ]/A << /S /GoTo /D (section.12) >> >>
endobj
-1284 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 758.132 214.633 769.081 ]/A << /S /GoTo /D (subsection.13.1) >> >>
+1289 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 123.899 293.756 135.854 ]/A << /S /GoTo /D (subsection.12.1) >> >>
endobj
1290 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 747.89 185.582 757.126 ]/A << /S /GoTo /D (subsection.13.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 111.944 427.634 123.899 ]/A << /S /GoTo /D (subsection.12.2) >> >>
endobj
1291 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 735.935 214.673 745.17 ]/A << /S /GoTo /D (subsection.13.3) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 99.989 407.37 111.944 ]/A << /S /GoTo /D (subsection.12.3) >> >>
endobj
1292 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 723.98 277.328 733.215 ]/A << /S /GoTo /D (subsection.13.4) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 88.034 340.411 99.989 ]/A << /S /GoTo /D (subsection.12.4) >> >>
endobj
-1293 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 709.753 306.887 721.708 ]/A << /S /GoTo /D (subsection.13.5) >> >>
+1297 0 obj
+<< /D [ 1295 0 R /XYZ 78.37 808.885 null ] >>
endobj
1294 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 690.217 168.157 699.293 ]/A << /S /GoTo /D (section.14) >> >>
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F69 406 0 R /F66 392 0 R /F15 385 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
-1295 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 676.329 233.542 687.278 ]/A << /S /GoTo /D (subsection.14.1) >> >>
+1344 0 obj
+<< /Filter /FlateDecode /Length 1928 >>
+stream
+x\n8+MI8snKRLf3C`Kd*U]ῃ<y'3!ȃ: ;8TB:AJ R^[QJ7HiV (umqtXy[3끎U(U@ 8s_/988`|x
+e#X8}
+ BFT:6ơBjLr\Z kX3K D"0|
+²Vcd̙R= lP,~'7]\,ɾ|' t5NPnGTHq<zf}4
+޶z/o+J$[kaL' Ff4MYX/OxoJ,.qJuF
+#g`ߓ@Z- yap ,ܥxU Wm@ BГSd7zM+*@$T8!Se N%yEDw@87J*oKHdj96+"Uc V}?x<Pl(1'D$v*-+zs!/ ]T.է>YuEkm|Wݬ/ҙ J9VʣƼCRԨ*m>8P}u)z [5޾[Ǵڜ q6>
+pqy4Rgptү ގJę`pF
+Y;biIJ}8$XH¼5~KcቲFbmkݬ,{/MxbኜhQ2[s-[T?a?o5<,Z6QugEseJƗqڴ+F~ܛhKE'5)^D8.rN%Of 6Bϡ[uloU{18r؟.̭Z
+@geĮPo2Q0W!jcT巏ζY5rwTi6A[Oʤ+u5Bxo'07C}ǬIW)U:ID yI}KG/ɾ 4}ՙ={<ᮜ6kQȸ5
+CW}tJHgoiiswZssa@{ˤMXDdƴtj8%nK )qM /ʄukyDg<&{l"$VU`sUo2u `Q&(
+endstream
endobj
-1296 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 663.925 247.559 675.88 ]/A << /S /GoTo /D (subsection.14.2) >> >>
+1343 0 obj
+<< /Type /Page /Contents 1344 0 R /Resources 1342 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 1065 0 R /Annots 1346 0 R >>
endobj
-1297 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 652.418 280.008 663.477 ]/A << /S /GoTo /D (subsection.14.3) >> >>
+1346 0 obj
+[ 1293 0 R 1299 0 R 1300 0 R 1301 0 R 1302 0 R 1303 0 R 1304 0 R 1305 0 R 1306 0 R 1307 0 R 1308 0 R 1309 0 R 1310 0 R 1311 0 R 1312 0 R 1313 0 R 1314 0 R 1315 0 R 1316 0 R 1317 0 R 1318 0 R 1319 0 R 1320 0 R 1321 0 R 1322 0 R 1323 0 R 1324 0 R 1325 0 R 1326 0 R 1327 0 R 1328 0 R 1329 0 R 1330 0 R 1331 0 R 1332 0 R 1333 0 R 1334 0 R 1335 0 R 1336 0 R 1337 0 R 1338 0 R 1339 0 R 1340 0 R 1341 0 R ]
endobj
-1298 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 640.015 288.655 651.97 ]/A << /S /GoTo /D (subsection.14.4) >> >>
+1293 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 758.132 269.836 769.001 ]/A << /S /GoTo /D (section.13) >> >>
endobj
1299 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 628.06 222.075 640.015 ]/A << /S /GoTo /D (subsection.14.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 746.177 214.633 757.126 ]/A << /S /GoTo /D (subsection.13.1) >> >>
endobj
1300 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 616.662 199.42 627.502 ]/A << /S /GoTo /D (subsection.14.6) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 735.935 185.582 745.17 ]/A << /S /GoTo /D (subsection.13.2) >> >>
endobj
1301 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 604.598 248.008 615.656 ]/A << /S /GoTo /D (subsection.14.7) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 723.98 214.673 733.215 ]/A << /S /GoTo /D (subsection.13.3) >> >>
endobj
1302 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 592.633 215.191 603.591 ]/A << /S /GoTo /D (subsection.14.8) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 712.025 277.328 721.26 ]/A << /S /GoTo /D (subsection.13.4) >> >>
endobj
1303 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 582.51 223.549 591.746 ]/A << /S /GoTo /D (subsection.14.9) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 697.798 306.887 709.753 ]/A << /S /GoTo /D (subsection.13.5) >> >>
endobj
1304 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 568.284 309.507 580.239 ]/A << /S /GoTo /D (subsection.14.10) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 678.261 168.157 687.337 ]/A << /S /GoTo /D (section.14) >> >>
endobj
1305 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 556.329 288.795 568.284 ]/A << /S /GoTo /D (subsection.14.11) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 664.373 233.542 675.322 ]/A << /S /GoTo /D (subsection.14.1) >> >>
endobj
1306 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 536.792 238.264 545.868 ]/A << /S /GoTo /D (section.15) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 651.97 247.559 663.925 ]/A << /S /GoTo /D (subsection.14.2) >> >>
endobj
1307 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 522.894 353.213 533.963 ]/A << /S /GoTo /D (subsection.15.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 640.463 280.008 651.522 ]/A << /S /GoTo /D (subsection.14.3) >> >>
endobj
1308 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 510.939 249.173 522.007 ]/A << /S /GoTo /D (subsubsection.15.1.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 628.06 288.655 640.015 ]/A << /S /GoTo /D (subsection.14.4) >> >>
endobj
1309 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 500.817 270.015 510.052 ]/A << /S /GoTo /D (subsubsection.15.1.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 616.104 222.075 628.06 ]/A << /S /GoTo /D (subsection.14.5) >> >>
endobj
1310 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 487.029 297.462 497.987 ]/A << /S /GoTo /D (subsection.15.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 604.707 199.42 615.547 ]/A << /S /GoTo /D (subsection.14.6) >> >>
endobj
1311 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 475.193 344.018 486.142 ]/A << /S /GoTo /D (subsection.15.3) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 592.642 248.008 603.701 ]/A << /S /GoTo /D (subsection.14.7) >> >>
endobj
1312 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 462.68 363.963 474.635 ]/A << /S /GoTo /D (subsection.15.4) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 580.677 215.191 591.636 ]/A << /S /GoTo /D (subsection.14.8) >> >>
endobj
1313 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 441.32 210.289 452.219 ]/A << /S /GoTo /D (section.16) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 570.555 223.549 579.791 ]/A << /S /GoTo /D (subsection.14.9) >> >>
endobj
1314 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 421.225 186.289 430.241 ]/A << /S /GoTo /D (section.17) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 556.329 309.507 568.284 ]/A << /S /GoTo /D (subsection.14.10) >> >>
endobj
1315 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 407.327 186.558 418.286 ]/A << /S /GoTo /D (subsection.17.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 544.373 288.795 556.329 ]/A << /S /GoTo /D (subsection.14.11) >> >>
endobj
1316 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 395.382 194.419 406.331 ]/A << /S /GoTo /D (subsection.17.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 524.837 238.264 533.913 ]/A << /S /GoTo /D (section.15) >> >>
endobj
1317 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 383.427 262.354 394.376 ]/A << /S /GoTo /D (subsection.17.3) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 510.939 353.213 522.007 ]/A << /S /GoTo /D (subsection.15.1) >> >>
endobj
1318 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 371.581 198.045 382.421 ]/A << /S /GoTo /D (subsection.17.4) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 498.984 249.173 510.052 ]/A << /S /GoTo /D (subsubsection.15.1.1) >> >>
endobj
1319 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 349.664 143.32 360.503 ]/A << /S /GoTo /D (section.18) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 488.862 270.015 498.097 ]/A << /S /GoTo /D (subsubsection.15.1.2) >> >>
endobj
1320 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 337.151 349.268 349.106 ]/A << /S /GoTo /D (subsection.18.1) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 475.073 297.462 486.032 ]/A << /S /GoTo /D (subsection.15.2) >> >>
endobj
1321 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 327.467 207.749 336.593 ]/A << /S /GoTo /D (subsection.18.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 463.238 344.018 474.187 ]/A << /S /GoTo /D (subsection.15.3) >> >>
endobj
1322 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 315.512 217.492 324.637 ]/A << /S /GoTo /D (subsection.18.3) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 450.725 363.963 462.68 ]/A << /S /GoTo /D (subsection.15.4) >> >>
endobj
1323 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 303.557 178.249 312.682 ]/A << /S /GoTo /D (subsection.18.4) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 429.365 210.289 440.264 ]/A << /S /GoTo /D (section.16) >> >>
endobj
1324 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 289.768 298.688 300.727 ]/A << /S /GoTo /D (subsection.18.5) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 409.27 186.289 418.286 ]/A << /S /GoTo /D (section.17) >> >>
endobj
1325 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 279.646 181.099 288.772 ]/A << /S /GoTo /D (subsection.18.6) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 395.372 186.558 406.331 ]/A << /S /GoTo /D (subsection.17.1) >> >>
endobj
1326 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 267.691 204.192 276.926 ]/A << /S /GoTo /D (subsection.18.7) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 383.427 194.419 394.376 ]/A << /S /GoTo /D (subsection.17.2) >> >>
endobj
1327 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 253.903 272.227 264.971 ]/A << /S /GoTo /D (subsection.18.8) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 371.472 262.354 382.421 ]/A << /S /GoTo /D (subsection.17.3) >> >>
endobj
1328 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 241.509 324.451 253.464 ]/A << /S /GoTo /D (subsection.18.9) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 359.626 198.045 370.466 ]/A << /S /GoTo /D (subsection.17.4) >> >>
endobj
1329 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 229.992 214.145 241.17 ]/A << /S /GoTo /D (subsection.18.10) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 337.708 143.32 348.548 ]/A << /S /GoTo /D (section.18) >> >>
endobj
1330 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 208.134 132.929 218.954 ]/A << /S /GoTo /D (section.19) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 325.195 349.268 337.151 ]/A << /S /GoTo /D (subsection.18.1) >> >>
endobj
1331 0 obj
-<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 188.099 108.74 197.116 ]/A << /S /GoTo /D (section*.2) >> >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 315.512 207.749 324.637 ]/A << /S /GoTo /D (subsection.18.2) >> >>
+endobj
+1332 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 303.557 217.492 312.682 ]/A << /S /GoTo /D (subsection.18.3) >> >>
+endobj
+1333 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 291.601 178.249 300.727 ]/A << /S /GoTo /D (subsection.18.4) >> >>
+endobj
+1334 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 277.813 298.688 288.772 ]/A << /S /GoTo /D (subsection.18.5) >> >>
endobj
1335 0 obj
-<< /D [ 1333 0 R /XYZ 78.37 808.885 null ] >>
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 267.691 181.099 276.817 ]/A << /S /GoTo /D (subsection.18.6) >> >>
endobj
-1332 0 obj
-<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 381 0 R /F66 388 0 R >> /ProcSet [ /PDF /Text ] >>
+1336 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 255.736 204.192 264.971 ]/A << /S /GoTo /D (subsection.18.7) >> >>
+endobj
+1337 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 241.948 272.227 253.016 ]/A << /S /GoTo /D (subsection.18.8) >> >>
+endobj
+1338 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 229.554 324.451 241.509 ]/A << /S /GoTo /D (subsection.18.9) >> >>
+endobj
+1339 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 218.037 214.145 229.215 ]/A << /S /GoTo /D (subsection.18.10) >> >>
+endobj
+1340 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 196.179 132.929 206.999 ]/A << /S /GoTo /D (section.19) >> >>
+endobj
+1341 0 obj
+<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 176.144 108.74 185.161 ]/A << /S /GoTo /D (section*.2) >> >>
+endobj
+1345 0 obj
+<< /D [ 1343 0 R /XYZ 78.37 808.885 null ] >>
+endobj
+1342 0 obj
+<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F66 392 0 R /F15 385 0 R >> /ProcSet [ /PDF /Text ] >>
endobj
1 0 obj
<< /pgf@ca0.75 << /ca 0.75 >> /pgf@CA0.4 << /CA 0.4 >> /pgf@ca0.4 << /ca 0.4 >> /pgf@bmMultiply<< /BM /Multiply>> /pgf@ca1.0 << /ca 1.0 >>>>
endobj
2 0 obj
-<< /pgfpat5 825 0 R /pgfpat4 826 0 R /pgfpat10 829 0 R>>
+<< /pgfpat5 833 0 R /pgfpat4 834 0 R /pgfpat10 837 0 R>>
endobj
3 0 obj
<< /pgfprgb [/Pattern /DeviceRGB] >>
endobj
-1337 0 obj
+1347 0 obj
[489.6 ]
endobj
-1338 0 obj
+1348 0 obj
[ 28 [ 510 ] 96 [ 363 ] 118 [ 490 ] ]
endobj
-1340 0 obj
+1350 0 obj
<< /Filter /FlateDecode /Length 17 >>
stream
xc```&
endstream
endobj
-1341 0 obj
+1351 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 692 >>
stream
xcd`aa`ddr N+O,,MIyP#C,9?Xy~s0aS  K,t~L;74G$0GAA5/<"-6300q/,L(Q0200
@@ -5678,10 +5829,10 @@ Nz
>XOoOOo_O߄=<<;WLrxxJ
endstream
endobj
-1339 0 obj
-<< /Type /FontDescriptor /FontName /TZAQYL+LMSans8-Oblique /Flags 4 /FontBBox [ -486 -314 1548 1154 ] /Ascent 1154 /CapHeight 694 /Descent -314 /ItalicAngle -12 /StemV 98 /XHeight 444 /FontFile3 1341 0 R /CIDSet 1340 0 R >>
+1349 0 obj
+<< /Type /FontDescriptor /FontName /TZAQYL+LMSans8-Oblique /Flags 4 /FontBBox [ -486 -314 1548 1154 ] /Ascent 1154 /CapHeight 694 /Descent -314 /ItalicAngle -12 /StemV 98 /XHeight 444 /FontFile3 1351 0 R /CIDSet 1350 0 R >>
endobj
-1342 0 obj
+1352 0 obj
<< /Filter /FlateDecode /Length 374 >>
stream
x}RMo@x=Y45!b7}Md.pwwM[< t7ްOa5C/Zt9jȑl9V,
@@ -5691,23 +5842,23 @@ y@ws$壷9wNF IpCPB }Jy"yr^IKDЙ\_r&
rndfA~
endstream
endobj
-823 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /TZAQYL+LMSans8-Oblique /DescendantFonts [ 1343 0 R ] /ToUnicode 1342 0 R >>
+831 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /TZAQYL+LMSans8-Oblique /DescendantFonts [ 1353 0 R ] /ToUnicode 1352 0 R >>
endobj
-1343 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /TZAQYL+LMSans8-Oblique /FontDescriptor 1339 0 R /W 1338 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1353 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /TZAQYL+LMSans8-Oblique /FontDescriptor 1349 0 R /W 1348 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1344 0 obj
+1354 0 obj
[ 56 [ 681 681 ] 82 [ 681 ] 88 [ 403 ] 106 [ 681 681 ] ]
endobj
-1346 0 obj
+1356 0 obj
<< /Filter /FlateDecode /Length 18 >>
stream
xc`

endstream
endobj
-1347 0 obj
+1357 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 1129 >>
stream
xuT{LSW[W@N½G2A ^DŽU{io[z(Pp
@@ -5722,10 +5873,10 @@ xuT{LSW[W@N½G2A ^DŽU{io[z(Pp
sn> <TQZPt@ UQ=R]E&ni,lAC#bdČjnpu,;T7>6<4N=$Z#yB<R eD E*yHa)ݤ1^MZN?|@˰veFb&u!}^w@x Q3%Ib4^A_>>:Xk kPT%J@i~ Ρ{(;> Qd"\4-*ۤQ2{[ F:Ј폾u1B}O jkq \5|[P6?}uxzK2iC惾ELm 9cBO"{lz2|Bh4zGo塞.OgW;Ge_
endstream
endobj
-1345 0 obj
-<< /Type /FontDescriptor /FontName /GOIBMZ+LMRoman5-Regular /Flags 4 /FontBBox [ -566 -303 1772 1126 ] /Ascent 1126 /CapHeight 683 /Descent -303 /ItalicAngle 0 /StemV 134 /XHeight 431 /FontFile3 1347 0 R /CIDSet 1346 0 R >>
+1355 0 obj
+<< /Type /FontDescriptor /FontName /GOIBMZ+LMRoman5-Regular /Flags 4 /FontBBox [ -566 -303 1772 1126 ] /Ascent 1126 /CapHeight 683 /Descent -303 /ItalicAngle 0 /StemV 134 /XHeight 431 /FontFile3 1357 0 R /CIDSet 1356 0 R >>
endobj
-1348 0 obj
+1358 0 obj
<< /Filter /FlateDecode /Length 387 >>
stream
x}Rj0+^xI` YYHB)9s*%#ۇ} /4ovM<7J67[e%t6zȐl5t5tg<iq*aتM]bց?M:]}y﫝,21vxjΙSuYf K1l& 3aEK[9L]'a:*ST5%cʼź*.N}QkMY$ 0uk:+|3~4ˣ5KY:T2ʌ ICJ
@@ -5733,28 +5884,28 @@ x}Rj0+^xI` YYHB)9s*%#ۇ} /4ovM<7J67[e%t
rhah⸁CS-f_&[ QJg`jFo[UTq{ ,r}
endstream
endobj
-793 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /GOIBMZ+LMRoman5-Regular /DescendantFonts [ 1349 0 R ] /ToUnicode 1348 0 R >>
+807 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /GOIBMZ+LMRoman5-Regular /DescendantFonts [ 1359 0 R ] /ToUnicode 1358 0 R >>
endobj
-1349 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /GOIBMZ+LMRoman5-Regular /FontDescriptor 1345 0 R /W 1344 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1359 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /GOIBMZ+LMRoman5-Regular /FontDescriptor 1355 0 R /W 1354 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1350 0 obj
+1360 0 obj
[575 575 575 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 559 638.9 511.1 638.9 ]
endobj
-1351 0 obj
+1361 0 obj
[1083.3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1361.1 ]
endobj
-1352 0 obj
+1362 0 obj
[ 28 [ 603 ] 35 [ 544 ] 43 [ 544 ] 47 [ 603 ] ]
endobj
-1354 0 obj
+1364 0 obj
<< /Filter /FlateDecode /Length 14 >>
stream
xc``
endstream
endobj
-1355 0 obj
+1365 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 900 >>
stream
xڵSoL[U]<t}dmbhAf P(d+}mx{v –@2q5,C~G>D_Yh9sﹹ990AkO4_7 N:
@@ -5769,36 +5920,36 @@ WZVRV
1mb7aKuO[&,ڗ:E["aS4c &8dxgxV6-:'T(Ed|<>a)Z9?'Uؚ
endstream
endobj
-1353 0 obj
-<< /Type /FontDescriptor /FontName /BWIYUD+LMRoman7-Italic /Flags 4 /FontBBox [ -528 -292 1571 1123 ] /Ascent 1123 /CapHeight 683 /Descent -292 /ItalicAngle -15 /StemV 123 /XHeight 431 /FontFile3 1355 0 R /CIDSet 1354 0 R >>
+1363 0 obj
+<< /Type /FontDescriptor /FontName /BWIYUD+LMRoman7-Italic /Flags 4 /FontBBox [ -528 -292 1571 1123 ] /Ascent 1123 /CapHeight 683 /Descent -292 /ItalicAngle -15 /StemV 123 /XHeight 431 /FontFile3 1365 0 R /CIDSet 1364 0 R >>
endobj
-1356 0 obj
+1366 0 obj
<< /Filter /FlateDecode /Length 375 >>
stream
x}R]k0}ϯ{6U@0uBa~`cM.`* BJOι7瞴ɣg XF3fˢ"\DiVychr4НeL
ӳLSñUM(M΁?G6^[U)Lq,h'ɊՁ%> ;Z(9O)/TƫI|qk $wI2
endstream
endobj
-693 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /BWIYUD+LMRoman7-Italic /DescendantFonts [ 1357 0 R ] /ToUnicode 1356 0 R >>
+702 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /BWIYUD+LMRoman7-Italic /DescendantFonts [ 1367 0 R ] /ToUnicode 1366 0 R >>
endobj
-1357 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /BWIYUD+LMRoman7-Italic /FontDescriptor 1353 0 R /W 1352 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1367 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /BWIYUD+LMRoman7-Italic /FontDescriptor 1363 0 R /W 1362 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1358 0 obj
+1368 0 obj
[892.9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1138.9 0 585.3 ]
endobj
-1359 0 obj
+1369 0 obj
[ 47 [ 525 ] 50 [ 525 ] 64 [ 525 ] 66 [ 525 ] 72 [ 525 ] 77 [ 525 ] 81 [ 525 ] 98 [ 525 ] 102 [ 525 ] 105 [ 525 ] 116 [ 525 ] 118 [ 525 ] ]
endobj
-1361 0 obj
+1371 0 obj
<< /Filter /FlateDecode /Length 21 >>
stream
xc`

endstream
endobj
-1362 0 obj
+1372 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 1486 >>
stream
xmU{LG%ʉr9ݚj!A⣩Qx==#Z-w CSV5$֤Uk5ZlS5SuV&Mdv3oeǢ1Ǔ
@@ -5817,10 +5968,10 @@ sƭw¸Om-åu^
T;,;T(w ;h 4
endstream
endobj
-1360 0 obj
-<< /Type /FontDescriptor /FontName /MSSSGB+LMMonoLt10-Bold /Flags 4 /FontBBox [ -454 -308 734 1039 ] /Ascent 1039 /CapHeight 611 /Descent -308 /ItalicAngle 0 /StemV 175 /XHeight 431 /FontFile3 1362 0 R /CIDSet 1361 0 R >>
+1370 0 obj
+<< /Type /FontDescriptor /FontName /MSSSGB+LMMonoLt10-Bold /Flags 4 /FontBBox [ -454 -308 734 1039 ] /Ascent 1039 /CapHeight 611 /Descent -308 /ItalicAngle 0 /StemV 175 /XHeight 431 /FontFile3 1372 0 R /CIDSet 1371 0 R >>
endobj
-1363 0 obj
+1373 0 obj
<< /Filter /FlateDecode /Length 420 >>
stream
x}Ok0@zp-;mڔ`$bhRe4
@@ -5829,22 +5980,22 @@ b!~%’]ތGO|{0rV`-L6F j(Qjֈ
aa>>׸1iCU<o3޶g
endstream
endobj
-626 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /MSSSGB+LMMonoLt10-Bold /DescendantFonts [ 1364 0 R ] /ToUnicode 1363 0 R >>
+634 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /MSSSGB+LMMonoLt10-Bold /DescendantFonts [ 1374 0 R ] /ToUnicode 1373 0 R >>
endobj
-1364 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /MSSSGB+LMMonoLt10-Bold /FontDescriptor 1360 0 R /W 1359 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1374 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /MSSSGB+LMMonoLt10-Bold /FontDescriptor 1370 0 R /W 1369 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1365 0 obj
+1375 0 obj
[ 47 [ 590 ] 81 [ 531 ] 98 [ 419 ] 105 [ 413 ] 116 [ 561 ] ]
endobj
-1367 0 obj
+1377 0 obj
<< /Filter /FlateDecode /Length 19 >>
stream
xc`
endstream
endobj
-1368 0 obj
+1378 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 1167 >>
stream
x}TmLe^-+]lqShq ls RPG6Zz#"/\{/0a8`
@@ -5859,10 +6010,10 @@ _eR}&:q5d ub cly}xϱ3L7_kNGWg?v
#h}^
endstream
endobj
-1366 0 obj
-<< /Type /FontDescriptor /FontName /JIXNST+LMRomanSlant8-Regular /Flags 4 /FontBBox [ -483 -292 1526 1125 ] /Ascent 1125 /CapHeight 683 /Descent -292 /ItalicAngle -10 /StemV 98 /XHeight 431 /FontFile3 1368 0 R /CIDSet 1367 0 R >>
+1376 0 obj
+<< /Type /FontDescriptor /FontName /JIXNST+LMRomanSlant8-Regular /Flags 4 /FontBBox [ -483 -292 1526 1125 ] /Ascent 1125 /CapHeight 683 /Descent -292 /ItalicAngle -10 /StemV 98 /XHeight 431 /FontFile3 1378 0 R /CIDSet 1377 0 R >>
endobj
-1369 0 obj
+1379 0 obj
<< /Filter /FlateDecode /Length 388 >>
stream
xڍR]k0}ϯ{6tN鄎ĖkM.&%MKR0Џ{9'<l>V :+IT.P "GVlb .e,Yr,Y^slY^$ցn=o4XT$Ϥ;<yZSar6X
@@ -5871,25 +6022,25 @@ s˭1=Ct8VePgdnWJNñ~
δ3\9N#ƃ< =z5A Ӿ<Fx?)q^ݳZkkL m*U=z}+j
endstream
endobj
-599 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /JIXNST+LMRomanSlant8-Regular /DescendantFonts [ 1370 0 R ] /ToUnicode 1369 0 R >>
+607 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /JIXNST+LMRomanSlant8-Regular /DescendantFonts [ 1380 0 R ] /ToUnicode 1379 0 R >>
endobj
-1370 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /JIXNST+LMRomanSlant8-Regular /FontDescriptor 1366 0 R /W 1365 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1380 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /JIXNST+LMRomanSlant8-Regular /FontDescriptor 1376 0 R /W 1375 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1371 0 obj
+1381 0 obj
[361.7 429.7 0 0 0 644.7 ]
endobj
-1372 0 obj
+1382 0 obj
[ 28 [ 525 ] 35 [ 525 ] 43 [ 525 ] 47 [ 525 ] 50 [ 525 ] 55 [ 525 ] 63 [ 525 525 ] 66 [ 525 ] 72 [ 525 ] 74 [ 525 525 525 525 ] 81 [ 525 ] 84 [ 525 ] 88 [ 525 ] 96 [ 525 ] 98 [ 525 ] 103 [ 525 ] 105 [ 525 ] 109 [ 525 ] 112 [ 525 ] 116 [ 525 ] 118 [ 525 ] ]
endobj
-1374 0 obj
+1384 0 obj
<< /Filter /FlateDecode /Length 23 >>
stream
xc``Td\ǣaK
endstream
endobj
-1375 0 obj
+1385 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 2668 >>
stream
xڍWyX
@@ -5905,10 +6056,10 @@ pDc;
|~b~_Pr6'=:?gбƲ՜ٚ3ܖRj&v>zfC3x22#n"U )wM9=ěm<BA1FB7x[\ݞ@{a7L 
endstream
endobj
-1373 0 obj
-<< /Type /FontDescriptor /FontName /RBEIGJ+LMMonoSlant10-Regular /Flags 4 /FontBBox [ -477 -316 786 1016 ] /Ascent 1016 /CapHeight 611 /Descent -316 /ItalicAngle -10 /StemV 175 /XHeight 431 /FontFile3 1375 0 R /CIDSet 1374 0 R >>
+1383 0 obj
+<< /Type /FontDescriptor /FontName /RBEIGJ+LMMonoSlant10-Regular /Flags 4 /FontBBox [ -477 -316 786 1016 ] /Ascent 1016 /CapHeight 611 /Descent -316 /ItalicAngle -10 /StemV 175 /XHeight 431 /FontFile3 1385 0 R /CIDSet 1384 0 R >>
endobj
-1376 0 obj
+1386 0 obj
<< /Filter /FlateDecode /Length 484 >>
stream
xڍn0<)=P !VRCBIj ld_cZi6R|?{?3yqOz9|_ul؂^)?w%2ϋM!pŅh .%?_~/,J !pJԤP-!$Tϥx"=T?
@@ -5916,25 +6067,25 @@ xڍn0<)=P !VRCBIj ld_cZi6R|?{?3yqOz9|_
s}IHiC--"%R 9僥Z6H.)Gz;}[ Ɛ!)R$2A/)KAnb;M]=V?ZzTJ]N{涹dg.Nzy
endstream
endobj
-469 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /RBEIGJ+LMMonoSlant10-Regular /DescendantFonts [ 1377 0 R ] /ToUnicode 1376 0 R >>
+478 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /RBEIGJ+LMMonoSlant10-Regular /DescendantFonts [ 1387 0 R ] /ToUnicode 1386 0 R >>
endobj
-1377 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /RBEIGJ+LMMonoSlant10-Regular /FontDescriptor 1373 0 R /W 1372 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1387 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /RBEIGJ+LMMonoSlant10-Regular /FontDescriptor 1383 0 R /W 1382 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1378 0 obj
+1388 0 obj
[734 ]
endobj
-1379 0 obj
+1389 0 obj
[ 28 [ 549 ] 35 [ 494 ] 40 [ 329 329 ] 43 [ 494 ] 45 [ 329 ] 47 [ 549 ] 50 [ 494 ] 55 [ 329 ] 59 [ 494 ] 63 [ 549 ] 66 [ 329 ] 70 [ 494 ] 72 [ 274 ] 75 [ 878 ] 77 [ 603 ] 81 [ 549 ] 84 [ 549 439 439 ] 88 [ 329 ] 96 [ 453 ] 98 [ 439 ] 104 [ 768 357 ] 109 [ 576 ] 112 [ 494 ] 114 [ 713 ] 116 [ 495 ] 118 [ 521 ] 502 [ 329 ] ]
endobj
-1381 0 obj
+1391 0 obj
<< /Filter /FlateDecode /Length 27 >>
stream
xc``(4ůaU &
endstream
endobj
-1382 0 obj
+1392 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 3534 >>
stream
xڭX tW-Y.!,!GISU
@@ -5954,38 +6105,38 @@ Mn >
.H^ڊ)jz!-,J28 w`9 `di>h8ߐ`ju<߉t]!_
endstream
endobj
-1380 0 obj
-<< /Type /FontDescriptor /FontName /ITTKMT+LMRoman8-Italic /Flags 4 /FontBBox [ -489 -292 1472 1124 ] /Ascent 1124 /CapHeight 683 /Descent -292 /ItalicAngle -15 /StemV 110 /XHeight 431 /FontFile3 1382 0 R /CIDSet 1381 0 R >>
+1390 0 obj
+<< /Type /FontDescriptor /FontName /ITTKMT+LMRoman8-Italic /Flags 4 /FontBBox [ -489 -292 1472 1124 ] /Ascent 1124 /CapHeight 683 /Descent -292 /ItalicAngle -15 /StemV 110 /XHeight 431 /FontFile3 1392 0 R /CIDSet 1391 0 R >>
endobj
-1383 0 obj
+1393 0 obj
<< /Filter /FlateDecode /Length 508 >>
stream
x}Mo0=8!PH )ڥJk6q$kuZb)(Ox͑#g7Nٗ7lqI /Dh[׈ lɷ+qJ;\OSM Ec_?M]>7AE5\6FfĂGι䦩M{7sl}Nv4 d#/j='|չ:5jfj~fRg6/Qm{!#q/˘άRfwp>C[K,@h$m)+ՙjGJ~sDO@0΃$Ilt"Γ 3A!ha)^-h 9hk)܀vE!(䲤 %(AKe E. EВ<[YJ9(jԋQ!DBdI80R)SJAKS. zO2hI%Z giߏ%׮f٠J=hD^&zy/-
endstream
endobj
-415 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /ITTKMT+LMRoman8-Italic /DescendantFonts [ 1384 0 R ] /ToUnicode 1383 0 R >>
+419 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /ITTKMT+LMRoman8-Italic /DescendantFonts [ 1394 0 R ] /ToUnicode 1393 0 R >>
endobj
-1384 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /ITTKMT+LMRoman8-Italic /FontDescriptor 1380 0 R /W 1379 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1394 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /ITTKMT+LMRoman8-Italic /FontDescriptor 1390 0 R /W 1389 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1385 0 obj
+1395 0 obj
[1123 ]
endobj
-1386 0 obj
+1396 0 obj
[777.8 0 777.8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 388.9 388.9 ]
endobj
-1387 0 obj
+1397 0 obj
[ 28 [ 525 ] 43 [ 489 ] 50 [ 511 ] 64 [ 367 ] 66 [ 256 ] 75 [ 867 ] 77 [ 561 ] 82 [ 550 ] 96 [ 372 ] 105 [ 404 550 550 ] 116 [ 500 ] ]
endobj
-1389 0 obj
+1399 0 obj
<< /Filter /FlateDecode /Length 23 >>
stream
xc```P`X P

endstream
endobj
-1390 0 obj
+1400 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 1716 >>
stream
xڍU pEUM,@+v70 X6e -ǀqL!`VK>eKeZ?K1`[4@
@@ -5997,10 +6148,10 @@ NIcO>ܷuecM·:tZ"K 4Hp'L4)v(*(8G:z<9
3##g< AjSS
endstream
endobj
-1388 0 obj
-<< /Type /FontDescriptor /FontName /QJUVUX+LMSans10-Bold /Flags 4 /FontBBox [ -460 -297 1761 1134 ] /Ascent 1134 /CapHeight 694 /Descent -297 /ItalicAngle 0 /StemV 102 /XHeight 458 /FontFile3 1390 0 R /CIDSet 1389 0 R >>
+1398 0 obj
+<< /Type /FontDescriptor /FontName /QJUVUX+LMSans10-Bold /Flags 4 /FontBBox [ -460 -297 1761 1134 ] /Ascent 1134 /CapHeight 694 /Descent -297 /ItalicAngle 0 /StemV 102 /XHeight 458 /FontFile3 1400 0 R /CIDSet 1399 0 R >>
endobj
-1391 0 obj
+1401 0 obj
<< /Filter /FlateDecode /Length 422 >>
stream
x}Kk0stZA04I .O[GX2ȿ[(9gFgƚ{.i6e^5-M&+#u(Qj{ ֈ;.UUw̅^:nZN?k^>eۄG %k8 ImאrZ.MkY<xUZ!!l|^ 
@@ -6008,78 +6159,81 @@ x}Kk0stZA04I .O[GX2ȿ[(9gFgƚ{.i6e^5-M
և! PTa$M%Vzl9'g/SfK co,]#gI)]e<hmsrftŒ\DWDgD7g3#eN~t,zkݎK[TAc_w2
endstream
endobj
-403 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /QJUVUX+LMSans10-Bold /DescendantFonts [ 1392 0 R ] /ToUnicode 1391 0 R >>
+407 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /QJUVUX+LMSans10-Bold /DescendantFonts [ 1402 0 R ] /ToUnicode 1401 0 R >>
endobj
-1392 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /QJUVUX+LMSans10-Bold /FontDescriptor 1388 0 R /W 1387 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1402 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /QJUVUX+LMSans10-Bold /FontDescriptor 1398 0 R /W 1397 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1393 0 obj
-[ 27 [ 850 547 ] 34 [ 800 625 575 ] 38 [ 575 575 ] 42 [ 813 500 ] 46 [ 862 625 ] 49 [ 738 513 563 ] 55 [ 344 563 563 884 563 ] 62 [ 880 625 375 419 313 ] 68 [ 344 ] 70 [ 594 ] 72 [ 313 ] 74 [ 1067 938 880 625 563 ] 80 [ 845 563 563 769 625 438 438 ] 88 [ 313 ] 95 [ 839 460 625 444 ] 100 [ 563 563 ] 104 [ 782 438 563 563 865 625 ] 111 [ 850 594 1162 813 850 594 ] 118 [ 594 688 500 563 656 ] 499 [ 551 551 ] ]
+1403 0 obj
+[ 27 [ 850 547 875 ] 34 [ 800 625 575 ] 38 [ 575 575 ] 42 [ 813 500 ] 46 [ 862 625 ] 49 [ 738 513 563 ] 55 [ 344 563 563 884 563 ] 62 [ 880 625 375 419 313 ] 68 [ 344 ] 70 [ 594 ] 72 [ 313 ] 74 [ 1067 938 880 625 563 ] 80 [ 845 563 563 769 625 438 438 ] 88 [ 313 ] 95 [ 839 460 625 444 ] 100 [ 563 563 ] 104 [ 782 438 563 563 865 625 ] 111 [ 850 594 1162 813 850 594 ] 118 [ 594 688 500 563 656 ] 499 [ 551 551 ] ]
endobj
-1395 0 obj
+1405 0 obj
<< /Filter /FlateDecode /Length 29 >>
stream
-xc``6.j߿7?` H
+xc``6.j߿7?` H
endstream
endobj
-1396 0 obj
-<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 6685 >>
-stream
-xڝy \DH&"F%13}G[oj.bQ\pȾC ,a$ Y(JZDmmݵ.Zm }~;3gP@ pt[|ĕnkC¦5yAx^;#{F<ۇlxe{[Kn&?6R8h
-;7K룈 RD*Xp V ULP|}]\cG5*E*s]?Xve X<%:.Z
- QMO >޾||â)PèHj5KM&RS(j65I͢fSsy|}jrR˩JʍZES5ZG<픒)ʗ
- *
-Bp*(MX*]mHj5XN_cf6lG&>'?wuG;|Bk>A\ ?m@ƀlA&9ܕI_ N|F_vȑs,v|5d͐Nn 7LΰJX
-2T3-VhDn:CKDi38؉9CsQ ~H[Ǚ_T!!VtON&ZCLOH×!KD%8%794 x@z?dզ$vU!~<vvY3ZkdT'EzT\=;A۱T^ۇGwsRO?"#7@_MTXI#ԙ0W0̦;dͼ0a߽'3e婳|p_g!PD/jnỲ1l&Vaj'oexqG u8tuA K}P`x8+%.؛4~?] c;]USUS[Laؗ`4mhʏ%5YwҘA-uv",]FN8\g'
-2LΔLnW2Dab~~b-S^YmX68QVѳ3vдsQaRi]{p_Я];&?ڈْSr}!W<bt,ݐ:(V$ykIt Oޕ]cgn+ґOh<f\1jOu7:ݰ78ڬ*
-}$G8{5o|~hVN(/M]FbT g7%%&c翌4i *5Ě׷tB*SRҰl4f<CgPqY' /j ECz:_(<鱴})x40\ ؑ@fCZ @244Yl\FR;#ts,ju\NNrbkžCe'a:v]Řþs0Kd柒"R~Hc$cw2MeZG
-)27qCvkҠi ? G7k6a$"̼) jA>Wf-q<OKͿc
-<;0̉Se+mXO#G㷛86Rf4;s`V;LhOi^u2/0x*}_=k&/T;TTL6-Dz
-]B'nHG2[394{<AOcHL*QN]Nr&<rz3G9i|)\Gj;V
-aⱗU 4ሾURshf^azN9*8q>c×Jrs޳p9xy5|pˇq~A0 wrM_
-cKL; uOn[-9s'X`*OIJ8T& ?EvĿ}Tl㋉kW%m1w3O 2~/˕N&%;Z[+Įa0pG0u:
-&džz1kƕt|>{:nHWsˊ#\UL)*@IKxHh |oKX2TL(Y}|[fTO'ٵ-)n:ڝU[f?8}ՍQlm&j;gq͡y<yD3֪)+ ✬d<nZNmEYi!5];~]{n2@;E)졋P"8Scf='N6ӗa
-+!STI\_BF >A„wSG+Tyٴ(4@D'=uT־^&
-4Pw:/UcqK,`A)t%X${;]hz#G3%mKl)מb["9jgڟ#m+D_(BMKZnDZ1~Ϫޣ5hEFgّf_ !X*x#q=}GtIoB6NVUF(Y-i[gHcwlFFVS/X8}lW#w 42k)LZ hg,ҧpIٹ)x8OҒk Kd,c"=!Sҥ9ٙZ-1B^IKut~چko%+K+ʌOu/H'%@e)Hi$kG7GK1>'5|o8&cO] .~8V!u3,p@XFgp I+.2h뾰З=GZtz?a0eW~jS_\>BD.e7 ti0Qd=^}=7¶c, >ܹb3qf5>"Q<WBp_zwO]8h-{ >!V™w{]G7PN=ט-ЖJX28{&O|+ԔueL=ʯQߛw뫙^hǬP-`~ oz;c:
-Ȟc?v =џq)37Qks+?6Mg\esSFRr rJJti O3Ďxȓ0 f<z,/D˰#ieU[#«hf9|"iI c 'lԢ`v؆ qсÜň tzPD[q:{I6ZO5!Z&IGÜoళ24NDf- iou"O΁c';̸{`Oҧ?fZ:fѨO>!#sRi<Z'vV1ιc'8A:xzbtY2Ula؂--EHLKx5F׀]S]0`+,#5FjQ*Al'ۚ"H7n`[,d5.[)E v/JhRba#A>>A!ަ6SVrVcR Z{)pt*=79Nc7fÙWs0ejqZ|Zʗ"ie ozч[4F),/E#=q9[)xB+Y3&^XcþzY郍LJ i8S }٤x)aS1E<3l8 69BX xxp1FtG[ZVt5L-ʭA94VIXmGΛK['q6~S5eɍr]l6`L:[CDs؝0 Ee{~r/d/_<4 7]j
-;こ4VW|PrR~2/2d/Um3(-IW3xŽ#``Ls`c7=WV> gwg o{5aӨ9Ja(')R䳇uovaQˠ%b(#a&׫JEQ%Dwݱ8m&T-DG0l/fa,#IN
-,lSӚUf 7D5Utg# <w.._pO/@a^6"ta6dBw0ԹghXV#h5/h%qJY,+ũZ2A>Q]xR
-x"F}x@6GO jҧ uzm|ԱF(u6#".n9ߋq[֑ Xp8
-"o/dFYiR9c!&l52Dr 4,8 YuLea7= ~V^`$^Ň٪z40l2S( lߵKwVͧC&y@n+r7l< LАXad,`Kbͮ^[Ò8q.%sS pH1QNEqMߕ&,Veɳ5jLAMϪ%dUfdBl$/#*݅K2qJaLQ jcn~5j4V|X_hX9|4·0eySܽykcI=ӥ"M`O<|}$p$) Q"ފk4999CQYp&NDaB,Ź™ϭ?^X̛MGb%a>+]H4N%B>~)z|NTձ$MFLFIk6#>FzWBB9 ЋhRhi]B4ٗMf+UI,wԓ%ga=z7,MRXf6ub&[S8ܤ Q[Gw{
-/2I8JyZ}HK1"~wa!airc:R\QJOW ¿G,,O&.@FIp+jrϲ=a"hEB5|yM*c?Dwƣ`<f -LKA ylgH1LdXH pC=LLB8cD5)zH|FRNIL
- ecc#RUL6ڳ4b)Y#r>qF9WfK']]s,5dmv&v(!:zOk:om؄Py|89 ԧ<icWa0d~5uKX|bz:kt1qQi3FC֞=`jc!^Ka=a.DcuEa!Mni?=ֽ+<c?f8EQZߩ;hJy"ؾT._b3ہ_c>7Woܶo;^PTk(ʳ:^?Dfy
+1406 0 obj
+<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 6916 >>
+stream
+xڝZ @SW%1W W:uVŽ{vI@YY%j{N:tZT'Ny}{BrϹI-%-]y +V VL}cһA^֑żwF,?GxCl{0l.76\8hyI^)rGY/ M(H1wO $L 4,./JƔ)&Zg)ޝXPx)MVx/4\W(<TA>P:oEtwD7"4:,rd:?HELhDVEz{)C#Q~ފ׮SD)VVLPDz{+fFENu!s"]&EZuV,]轵&GF)|B#^Q*{+{wHTE 5A^FQcxj5rRoPӨLj5CMͣSPR )7j ZNVRQjj ZG6PJI(Oʋ(*
+`*
+©*T KQn6I䱀Z`u-@|ϽævmppVz,.)?}ad / R3ok^|텃I*~4$pNYcP8s!(Q1 1dDʈ$0ot8'ҸG"d"Yq[^d$ mhΰl)EQxi93JB"d0uԊ>SȼeȒ$B N45#M` jPB*Dw{;vY3TqMj2K"caxl31>Ծz lqx#Mxo@ti1 qF`k & V:MR甞sh-GHNI]DLmlF-;v ާ
+٘f
+
+OJ^ȩֱؓ^!l/S+NҥxyR(m{ؐ>rC!0;J]fT&}%܍{ψs
+U'VRf (禢x9NM#x@ ZͺS
+ aS3b)oY/-lIJII@b̂ M6=+'4,8Y6ߡ3y,{- 4C*eꑡFO]d<`OGM n@숣2mC`Ά#)]Rt:Mĕ&;06 Z!WS{=Lnxw0Ff1IQ [<O$6vg-^e,HLex1= Y)fHJV -r4+3ai7ـ5;<r4?y9Qc<m_JSy$2x0胺CٖsFN f2xSIgT"<N3)`:'sgfD ;T(L2.ò
+$
+TgG(6XoZ>cPs>"e&r3eK[<ZYN?=LeoXl
+L ǞWq0LDõm֚ufEߤ$#7mwV@=k;a _߸3/ 7źmcZb
+*4sq~reOm+!%2se%f?8}MlÖh8ePP_QRƆ<K ϯwiʆ*8'+';Y.ݻeېtVZHMG׎G>Dn8 Nta
+v={'䍜113Tž'{fgsbe|)j|pيį/_^ mgvcpe
+HW_ |Np; *<l^ѿ ̺A2k_t;Fcq%KP
+6p.JK,+(u4c[ضD'߱HŨ"/$V{mzmO1=E6^
+H6?ˎx{xy:tx%OzW
+Ffl<SZA*PB ҧpIٹ)x9OҒk Kx a"C 9ٙZ-1B^IKuwt~k%+K+a $_N J.MI!DR:ʑgi$k0 ^c<|JkpkǞ AxY*?NC4gX 6g? +h.<(Үa۽GaZɅur=”]ULU~q.{ $~f$J¥`>l0!}!u
+ێٺ802aqrfƕ[Ԝx*`]?&@_;'${Z6j.
+eBw=h@9 \S^-I[F’T>Wi>PSו1 (uz<P[_!Do,f+ 4GF?),%dW̎G``oV6^
+<%ȷR6ֶw,:,4>xE!.3\GAp~MJ+-6 K.h n٦fa dϱ;CQbrKMn:\fي-7~SqW7cWno.]9V.!YnXIZ)ؓ* 2`\xױ#5 ŒOŲ0cvD!5m쑺cfö*n/ڸEN?kHm#3(]ALFt3g:`A(I"8}$NX5ʀ%Z&IMÜo|agǥhve1HZl--xFM"'Nv7q ɞ "ut xqƐ^\;Z!'vVf.sNdpeetY2Vla&؂--EpbLKx5F׀]kt]0`,# עT&K4H[G
+=5xoڌĶXj4:]\SvP^}Ў%r+(e7dGZ<=A[ @H?87]X]Fݔeg\J2;3>ÔQ LiӑJ"T>I^qnS~ԃ0>Ҫ QJ;N1?>*p+?YN7aqh";˝X毽Dw3K<ulܷ-7>؈H{|b `gR2={UD}a̰\xLls}#,-BǏnCkYu.0(w$fRXfamĦXmkywjѥ:,)CTmaƤ:èQN cϨ(닊Ic^TgxGIN9GW0RUHjÏNv2Sz__,^^7׷_a`Io_'WfjQZ"# exG,.јI;==VT>ewg5߱Ө90NR]+$þ <nAEiKb(
+g~EV< XNamO P`INFzipH*t0ʌGZs# .n9ߋYϬ-a`bZ~0#8Xhk#uno-svM69^k{t3 m\[貵-Gٓ"Eoَ1^ g.hi idU!!*קa̺;:̂0 a ie*Q:=1U>%2UD
+57  M *bT[A5,?3"J5?,/k}ȓ ƺ Y ϐ0&d52sOhXhqBn,EXQW # >6Wr,
+C;/%!M[5x1$*d"y9裘#,v#'!c'_܌:.2wy, kvp$.0?`$}4LLmQ2Q7;0 #݉9ѹ黒ĹőYl<SP;+j192&Y^JJB9q0@u]n~5j4V|X?r 4·0eycܽykc 齺ӥ#M3`<ɸ$80N|oõiaڈ,](fwIlAN@!A,™zZ?yf7%E4 J0aYIQ}Vo*!SSKb0"-7} i>a
+^CXa&#c&5LHU{
+0#TII;S$&YPg=z Ut%sr2u9c]x4jbbXHJ,MRHfvu"&[S8Yڮ:gYU‹d":p$챃VkXRҶ0xMXHXZ.YK(*wd_O#EQ.aeɣ
+P׈$ g,;0SD̋$j TUU˯kXhaZ
+fc>Dbf!, 21@
+! iJe8%1)8 Kd#jc= _G OOo1gsEh{r Ijw7x:K Zݿs5g1_筸,%+&>XPb?ԁBB'`C*LϗEm KLOg _/=&.*"MqfxR㺳,9s^@5l lW{ig { Xv8-JSz
endstream
endobj
-1394 0 obj
-<< /Type /FontDescriptor /FontName /XMUJJS+LMRoman12-Bold /Flags 4 /FontBBox [ -476 -289 1577 1137 ] /Ascent 1137 /CapHeight 686 /Descent -289 /ItalicAngle 0 /StemV 104 /XHeight 444 /FontFile3 1396 0 R /CIDSet 1395 0 R >>
+1404 0 obj
+<< /Type /FontDescriptor /FontName /TIEZGJ+LMRoman12-Bold /Flags 4 /FontBBox [ -476 -289 1577 1137 ] /Ascent 1137 /CapHeight 686 /Descent -289 /ItalicAngle 0 /StemV 104 /XHeight 444 /FontFile3 1406 0 R /CIDSet 1405 0 R >>
endobj
-1397 0 obj
-<< /Filter /FlateDecode /Length 638 >>
+1407 0 obj
+<< /Filter /FlateDecode /Length 644 >>
stream
-x}[o0+H!%7mJTK[k  ( }&B[3 :0}Vյ)t8u0,zѦ{ZiGTNwl8_/֦l}>;aý ?7^_wͶ&NYuValslݍ1_nڲ2/,~4j^]`DبW|,jH$;8A0U_\Inv6*hkmܼ`(ݔĆwڌݵکaQ00-h6r_+-}WofbJ 椃5 Mm?GM
-އ?y
-3[(xiI"Fys$g ZO-@+@iA ~Bg$-DZH $-,`G){2"" "Keej"C-#8e+ "(KqSqPPNН[ ];
-tDk~)NL $K)UK)K'-$" I'I:%8!%"Eq$:+t?;\=7Oh1[o=k7fHqm;@sM)WW[?~<C* JZ
+x}[0+ԇ7I.kI^HB)}s,ekec;tƻPB <#y&_\5G龹tEL& /Z+h޺-{5u;i+߾?wM]8 Y[s_1v3|<!"`mԲ`JtT|H$;:A0U-kk[lW|L_;ʼ[f/m{N <gJlaKQk6u*m>WfbF-J]3k@~@O<ª hƿBOѹB,=-= DxJd&D' Orh*) A ƈq"hIO@}cEH iE;H#1_2(,#-TT5"3E?eeR-gv'Dn9T'ttDq%Z_qF'&RJURJI $H':HID:EN"r NHrn9|u'-ID9%q/ 7սnV}Luv槆3mZGM#2
endstream
endobj
-402 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /XMUJJS+LMRoman12-Bold /DescendantFonts [ 1398 0 R ] /ToUnicode 1397 0 R >>
+406 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /TIEZGJ+LMRoman12-Bold /DescendantFonts [ 1408 0 R ] /ToUnicode 1407 0 R >>
endobj
-1398 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /XMUJJS+LMRoman12-Bold /FontDescriptor 1394 0 R /W 1393 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1408 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /TIEZGJ+LMRoman12-Bold /FontDescriptor 1404 0 R /W 1403 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1399 0 obj
+1409 0 obj
[ 27 [ 531 531 531 ] 32 [ 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 ] 49 [ 531 531 531 531 531 ] 55 [ 531 531 531 ] 59 [ 531 ] 61 [ 531 531 531 531 ] 66 [ 531 ] 68 [ 531 ] 70 [ 531 531 531 531 531 531 531 531 531 ] 80 [ 531 531 531 ] 84 [ 531 531 531 ] 88 [ 531 ] 91 [ 531 ] 95 [ 531 531 531 531 531 531 531 531 531 531 531 531 531 ] 109 [ 531 531 531 531 531 531 531 531 ] 118 [ 531 ] 120 [ 531 531 ] ]
endobj
-1401 0 obj
+1411 0 obj
<< /Filter /FlateDecode /Length 25 >>
stream
xc``&
G
endstream
endobj
-1402 0 obj
+1412 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 6748 >>
stream
xڍZ \֟2c֕ZmuA;;kI a/7D@BEp +j5ֺE}O[w^}߄u{;{8p&޶cnr|ܭ0Zf*3 f2L0`Cs֞'sƷ_˛Bsqh4Ӷϰ^c!Fpd)+.cׯ]0i<"V,prz}sed_<Z,KϓϓlGW%e_iOXD nD)
@@ -6108,32 +6262,32 @@ R3@KڱLp`sZ7 V?::ؤxQ>B`{B/5_f f-[lǰ9EJ4}k=
endstream
endobj
-1400 0 obj
-<< /Type /FontDescriptor /FontName /FURTAI+LMMono8-Regular /Flags 4 /FontBBox [ -456 -320 743 1014 ] /Ascent 1014 /CapHeight 611 /Descent -320 /ItalicAngle 0 /StemV 177 /XHeight 431 /FontFile3 1402 0 R /CIDSet 1401 0 R >>
+1410 0 obj
+<< /Type /FontDescriptor /FontName /FURTAI+LMMono8-Regular /Flags 4 /FontBBox [ -456 -320 743 1014 ] /Ascent 1014 /CapHeight 611 /Descent -320 /ItalicAngle 0 /StemV 177 /XHeight 431 /FontFile3 1412 0 R /CIDSet 1411 0 R >>
endobj
-1403 0 obj
+1413 0 obj
<< /Filter /FlateDecode /Length 678 >>
stream
x}Oo0C%zH1qbBP$+M  ( ڞVVj_7367?lXٮ>g/&hQu̖eUn^v]de/~6e奮xeö/ڔm>EiۮG1R?<WŬ>z{]4D1ޕURQ"2Ig~t9qYh<C׹4F÷mYDe}jr&Q؝;=Z1ޗ[-?B*ٜ+#v6h"1^IdumjR{FO )$,&%:P"ASu)4P6e I@4ݣk MOAAQ'=3Ru EG4 =(8J<(ڀS==ixOF)H"2M2e$!:S$VВAg
R4gx! w4E65F TkVܭF<A2$hB4؁ 2$h.8i93?'?Y~j[70 O_à
endstream
endobj
-393 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /FURTAI+LMMono8-Regular /DescendantFonts [ 1404 0 R ] /ToUnicode 1403 0 R >>
+397 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /FURTAI+LMMono8-Regular /DescendantFonts [ 1414 0 R ] /ToUnicode 1413 0 R >>
endobj
-1404 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /FURTAI+LMMono8-Regular /FontDescriptor 1400 0 R /W 1399 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1414 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /FURTAI+LMMono8-Regular /FontDescriptor 1410 0 R /W 1409 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1405 0 obj
+1415 0 obj
[ 28 [ 510 ] 35 [ 549 ] 43 [ 472 ] 47 [ 549 ] 50 [ 472 ] 63 [ 549 354 ] 66 [ 253 ] 70 [ 519 ] 72 [ 253 ] 75 [ 844 ] 77 [ 549 ] 81 [ 531 ] 84 [ 549 ] 88 [ 295 ] 96 [ 363 ] 98 [ 407 ] 105 [ 384 ] 109 [ 549 ] 112 [ 490 ] 114 [ 726 ] 116 [ 490 ] 118 [ 490 ] ]
endobj
-1407 0 obj
+1417 0 obj
<< /Filter /FlateDecode /Length 23 >>
stream
xc``T`\4ţa*
endstream
endobj
-1408 0 obj
+1418 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 1825 >>
stream
xmU}TWC23,--% ~`AFH &"H5`˩,JY+ǮG .Zp`Y{T{a nOߙy3{w$" fY|u.!huD3,Fg+Nf%%'ů$M2Z|ӏt9! &Ltmo
@@ -6145,10 +6299,10 @@ C(ŢhJ@kmDP*2(ّKDY|=K׉D yx^^$Zɇ=f0C
`=d(#p
endstream
endobj
-1406 0 obj
-<< /Type /FontDescriptor /FontName /QQGJDO+LMSans8-Regular /Flags 4 /FontBBox [ -446 -314 1510 1154 ] /Ascent 1154 /CapHeight 694 /Descent -314 /ItalicAngle 0 /StemV 98 /XHeight 444 /FontFile3 1408 0 R /CIDSet 1407 0 R >>
+1416 0 obj
+<< /Type /FontDescriptor /FontName /QQGJDO+LMSans8-Regular /Flags 4 /FontBBox [ -446 -314 1510 1154 ] /Ascent 1154 /CapHeight 694 /Descent -314 /ItalicAngle 0 /StemV 98 /XHeight 444 /FontFile3 1418 0 R /CIDSet 1417 0 R >>
endobj
-1409 0 obj
+1419 0 obj
<< /Filter /FlateDecode /Length 466 >>
stream
x}Mo0
@@ -6157,22 +6311,22 @@ x}Mo0
_k;eo{?vqr7
endstream
endobj
-392 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /QQGJDO+LMSans8-Regular /DescendantFonts [ 1410 0 R ] /ToUnicode 1409 0 R >>
+396 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /QQGJDO+LMSans8-Regular /DescendantFonts [ 1420 0 R ] /ToUnicode 1419 0 R >>
endobj
-1410 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /QQGJDO+LMSans8-Regular /FontDescriptor 1406 0 R /W 1405 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1420 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /QQGJDO+LMSans8-Regular /FontDescriptor 1416 0 R /W 1415 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1411 0 obj
+1421 0 obj
[ 27 [ 796 531 ] 34 [ 752 590 ] 42 [ 767 472 295 295 ] 47 [ 590 ] 49 [ 723 472 531 ] 54 [ 693 325 531 531 834 531 ] 62 [ 796 590 354 383 295 ] 68 [ 325 ] 70 [ 561 664 295 ] 74 [ 973 885 796 590 531 ] 80 [ 826 531 531 723 590 413 413 ] 88 [ 295 ] 91 [ 561 ] 95 [ 782 414 590 419 ] 100 [ 531 531 531 ] 104 [ 767 413 531 531 796 590 ] 112 [ 561 1091 767 796 561 ] 118 [ 561 649 472 531 620 885 ] 125 [ 590 590 ] 499 [ 502 502 ] 502 [ 295 ] ]
endobj
-1413 0 obj
+1423 0 obj
<< /Filter /FlateDecode /Length 29 >>
stream
xc``0-z߿@
endstream
endobj
-1414 0 obj
+1424 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 7359 >>
stream
xڝz\,;d-3:*DcƊ"-,
@@ -6207,10 +6361,10 @@ sL4y_a0
nt``6Doz}Nexi4ff:uQ:+[d Cgr
endstream
endobj
-1412 0 obj
-<< /Type /FontDescriptor /FontName /AUGDZH+LMRoman8-Regular /Flags 4 /FontBBox [ -456 -292 1497 1125 ] /Ascent 1125 /CapHeight 683 /Descent -292 /ItalicAngle 0 /StemV 98 /XHeight 431 /FontFile3 1414 0 R /CIDSet 1413 0 R >>
+1422 0 obj
+<< /Type /FontDescriptor /FontName /AUGDZH+LMRoman8-Regular /Flags 4 /FontBBox [ -456 -292 1497 1125 ] /Ascent 1125 /CapHeight 683 /Descent -292 /ItalicAngle 0 /StemV 98 /XHeight 431 /FontFile3 1424 0 R /CIDSet 1423 0 R >>
endobj
-1415 0 obj
+1425 0 obj
<< /Filter /FlateDecode /Length 667 >>
stream
x}M0=dɧ + HBbh$DI8kJW>xl;+tgmdW\׬qϕT, h|+{6\ӵ*'V\kԿX{Æ;Ý}~}UFϧu=jW'@gكYf.ۮ =KU,ʜsFdFWCTވ;~2߼ҥ2Zjg:e#b{[ȶTG6|c9I<'IX!zk]ld.l_fwi$ ,BvM6SGLuMW'q*j
@@ -6218,23 +6372,23 @@ TIckAD/3z+ޕH47䯌_`>"P
I`?YwMmucvwJ%o{0r~HW
endstream
endobj
-391 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /AUGDZH+LMRoman8-Regular /DescendantFonts [ 1416 0 R ] /ToUnicode 1415 0 R >>
+395 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /AUGDZH+LMRoman8-Regular /DescendantFonts [ 1426 0 R ] /ToUnicode 1425 0 R >>
endobj
-1416 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /AUGDZH+LMRoman8-Regular /FontDescriptor 1412 0 R /W 1411 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1426 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /AUGDZH+LMRoman8-Regular /FontDescriptor 1422 0 R /W 1421 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1417 0 obj
+1427 0 obj
[ 51 [ 611 ] 56 [ 611 611 ] 78 [ 611 ] 82 [ 611 ] 100 [ 611 611 ] 106 [ 611 611 ] 121 [ 611 ] 187 [ 611 ] ]
endobj
-1419 0 obj
+1429 0 obj
<< /Filter /FlateDecode /Length 25 >>
stream
xc`
<  
endstream
endobj
-1420 0 obj
+1430 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 1865 >>
stream
xuU{PSW!fe!{[ԶXV >@;ZWK0H^i7፼b@"mEeTݺjwhٵ:ǙDwٙ;~X` &BR$ǿqS
@@ -6251,31 +6405,31 @@ n@ 6]xɊLRLZy`%g!PᇓG HtHm_V6s98wW~
;;=?z=s+Z]]l-%OJ"< #* N6;,a;펆 X^hu
endstream
endobj
-1418 0 obj
-<< /Type /FontDescriptor /FontName /TESQOF+LMRoman6-Regular /Flags 4 /FontBBox [ -515 -298 1647 1125 ] /Ascent 1125 /CapHeight 683 /Descent -298 /ItalicAngle 0 /StemV 117 /XHeight 431 /FontFile3 1420 0 R /CIDSet 1419 0 R >>
+1428 0 obj
+<< /Type /FontDescriptor /FontName /TESQOF+LMRoman6-Regular /Flags 4 /FontBBox [ -515 -298 1647 1125 ] /Ascent 1125 /CapHeight 683 /Descent -298 /ItalicAngle 0 /StemV 117 /XHeight 431 /FontFile3 1430 0 R /CIDSet 1429 0 R >>
endobj
-1421 0 obj
+1431 0 obj
<< /Filter /FlateDecode /Length 413 >>
stream
x}]K0+M/Qps:]x%g3&%m/=IVQ xzޓyKKhxahTl0x0Pψe_mQ` !ת"qűث~[|u6*$;6k#U*a6;H9cTn .!}lv8KRJgOQQT85-V6AL3'k+*} #i
endstream
endobj
-390 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /TESQOF+LMRoman6-Regular /DescendantFonts [ 1422 0 R ] /ToUnicode 1421 0 R >>
+394 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /TESQOF+LMRoman6-Regular /DescendantFonts [ 1432 0 R ] /ToUnicode 1431 0 R >>
endobj
-1422 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /TESQOF+LMRoman6-Regular /FontDescriptor 1418 0 R /W 1417 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1432 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /TESQOF+LMRoman6-Regular /FontDescriptor 1428 0 R /W 1427 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1423 0 obj
+1433 0 obj
[ 47 [ 624 ] 55 [ 536 ] 59 [ 641 ] 77 [ 613 ] 84 [ 558 ] 96 [ 602 ] 98 [ 458 ] 112 [ 613 ] ]
endobj
-1425 0 obj
+1435 0 obj
<< /Filter /FlateDecode /Length 21 >>
stream
xc`
endstream
endobj
-1426 0 obj
+1436 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 1466 >>
stream
x}UkLWa2. ̌-P>P">veg}"ݧX)JUҊ! Zՠ4mmtVl>қ7/9;("#(&|e֔ur1Sk2)\d K%$)$"B*Q%h8G%SbIC*YRU͎4U#Q$!ȯљ(?2YS/) Ώ%* -*c֨s5: zz.k Rff+m53.X<OC+7VhK)Cݴb:O_ JfK-ӻiikJҊsabȜٗA~Aj^Nk4J ]rh?f>˕k +ul!c
@@ -6287,90 +6441,97 @@ x}UkLWa2. ̌-P>P">veg}"ݧX)JUҊ! Zՠ4m
:vS0<OQ:ڈvo=(I/,:̌ jt#"8kXhmdk0$s iOirxPH]GZ}>
endstream
endobj
-1424 0 obj
-<< /Type /FontDescriptor /FontName /IPHWGX+LMRomanCaps10-Regular /Flags 4 /FontBBox [ -496 -290 1501 1100 ] /Ascent 1100 /CapHeight 683 /Descent -290 /ItalicAngle 0 /StemV 106 /XHeight 514 /FontFile3 1426 0 R /CIDSet 1425 0 R >>
+1434 0 obj
+<< /Type /FontDescriptor /FontName /IPHWGX+LMRomanCaps10-Regular /Flags 4 /FontBBox [ -496 -290 1501 1100 ] /Ascent 1100 /CapHeight 683 /Descent -290 /ItalicAngle 0 /StemV 106 /XHeight 514 /FontFile3 1436 0 R /CIDSet 1435 0 R >>
endobj
-1427 0 obj
+1437 0 obj
<< /Filter /FlateDecode /Length 403 >>
stream
xڍ]k0+.)̯0?PټlR|X1d>=9y󦍧6xAMa4`HshL2#Z-М$Deĉdc[4Ɠw];m|,6*K$͋ 6xΩm݉lZ#Gp?QB!tڔRa&Dev !qs8}N\J2m^D 4+E•樅<AQ#Vy~Fk
(cx4Mn4C]TEyy˽qw"o)E2ԩ<!8h bSu8z4T9̡ߋ-uƞzSO3G=GO=E"O]Gk{#ne-'VimBrBov Oji5'?#M
endstream
endobj
-389 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /IPHWGX+LMRomanCaps10-Regular /DescendantFonts [ 1428 0 R ] /ToUnicode 1427 0 R >>
+393 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /IPHWGX+LMRomanCaps10-Regular /DescendantFonts [ 1438 0 R ] /ToUnicode 1437 0 R >>
endobj
-1428 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /IPHWGX+LMRomanCaps10-Regular /FontDescriptor 1424 0 R /W 1423 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1438 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /IPHWGX+LMRomanCaps10-Regular /FontDescriptor 1434 0 R /W 1433 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1429 0 obj
-[ 27 [ 869 559 ] 34 [ 818 639 575 ] 42 [ 831 511 ] 45 [ 319 882 639 ] 49 [ 756 527 575 ] 54 [ 724 351 575 575 904 575 ] 62 [ 900 639 383 436 319 594 ] 70 [ 607 692 319 ] 74 [ 1092 958 900 639 575 ] 80 [ 864 575 575 786 639 447 447 ] 88 [ 319 ] 95 [ 863 474 639 454 ] 100 [ 575 575 575 ] 104 [ 800 447 575 575 885 639 ] 111 [ 869 607 1189 831 ] 116 [ 607 ] 118 [ 607 703 511 575 ] 284 [ 575 ] 502 [ 319 ] ]
+1439 0 obj
+[ 27 [ 869 559 ] 34 [ 818 639 575 ] 42 [ 831 511 ] 45 [ 319 882 639 ] 49 [ 756 527 575 ] 54 [ 724 351 575 575 904 575 ] 62 [ 900 639 383 436 319 594 ] 70 [ 607 692 319 ] 74 [ 1092 958 900 639 575 ] 80 [ 864 575 575 786 639 447 447 ] 88 [ 319 ] 95 [ 863 474 639 454 ] 100 [ 575 575 575 ] 104 [ 800 447 575 575 885 639 ] 111 [ 869 607 1189 831 869 607 869 607 703 511 575 ] 125 [ 639 ] 284 [ 575 ] 502 [ 319 ] ]
endobj
-1431 0 obj
+1441 0 obj
<< /Filter /FlateDecode /Length 32 >>
stream
-xc``0/y߿w_` 8
+xc``0/y߿wa 8
endstream
endobj
-1432 0 obj
-<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 6445 >>
-stream
-xڅYXڞuT@dXYV[)*b]E@A@ދ4=қ EPV(#j1&Xn7Fc4UMhLr0 s|QL&sX+OX2toT'~故Zxi8%I|?IKJ~ʢ7X8b=dh9s,!Q/ ӏQG}OI
-Ϳ)..3懆GFLl>v^%84628H^2EtzYh,9}:tz::?"R9azu`P:64"XM>#FC#QkVV/ R{mW;9Ց7F8o%{"lӂwvX<}*)QqQꭡj?(ߠSn_ONFSc$ʉB9SSit5ju Mj5rQn|jZD-ޡ<2j9ZIVSk'MPfʏRT
-S;P*
-"(*xpٯr"FeA6l~ibEt}^1R d-+Odl׀Nk*z giQ;l/~=8g#v*[k?>r򰃳é!vC"\8L9,OeUqC\0A"8ҦXY_ĉ .m
-JBwŧ KhHEÂȠiTSriV\Ďd=#]oB)@Mt6ôCwn?PDv'/3Z3OXmvOn\}@\.l(>i+1op~*b6Ď#5<yWT:{dNrṥ(P0섑@\>f
-Q`Q X|8
-XUśof|g 4@>FSw?Vٸt"](}K؇?S lZE| }*ʦ0I&Xq(؃-سa#T0X!<t1=0Hd++WZty_ `{ Zos~ iw 6[ 6XCyzCf)k|]Y%'jc3 ܝd?褼jJ鹮28InyO>* ;SQǪtl̑=u\'_#,>\qFCV-`nHX+Qa|jVVzx9}b颽 9}|B6 4 ^. jk{`T~+E@eY2ڙ{o䰀`\YlJvu|bVL-Vl5^83n2Le`X .0[&_έe
-Oò%kc-32u ծ]{~o\DA_ 8yyJ ax"(UWzH&q% /8=qN{Ypʋ|!Jr1%Dz 2KQ °i[.oܨx$d&aú̂sA`}8:&is!5$:R-"vģQ0Sqb> }JѡRO3E>iR}&&+Q2!)~6R]F;x7LfK${PfBVfb1feðQ}M7֟L[]3XD :UAi6Ñꃖ %C vsj=p'j]%P U?
-,5{-o~VT(OPŒ A!<xN, 8U~սWNXy֭:[x1>q8f# f VL"=wfz #=\7Ȑ bjO0 _Fp^5V9?k?!$#-z
-+fpsV TA%#m1hgMivNA>v{aHs{ޔXסzgOdҺez4im(]Pȥ62@H( RxSbZX-4klo6# y>\+QM4{] ǭk qdP_͜xisf絯U`Qup7ܯo<6h[FK'\*#C|^&퇑M`a)
-#TK=H# -^I]76Vճ7WmnB3Ũr6;un1*3[H`!]ջh wu(gO^ZEv̪`̙[WňIbeVfVjQPQYMht=6]9v ]-$
-5v:g@vC1sy\l$J>?Dtѫ1J.#*
- ȋ"~l&~(
-bncus;@wp\ Pl=_*csl߅plf~,=Qvvvt"Zk sLRhW N/_#2w'Q˶xUu=SgnX7 v~d⢹/}s[uf`XZ+u]NNφ
-sh0ms| ӷcߙ/sEv?E<nW8mџrG
- VaW"_mIA_Ϧ\|@vxP~?p'Ww#~Pz5}cٯjKA=ңhI(a; p-ƣ!c=J|nܣpYv)=eGʿqwB;9s}tLrQ 2ö֗O`틕30YԗɊC#ܑ#5BuZQG 2)0pLRujSµY(=_9g b5U3 BoH= ușgoAtj_JQB_7ޙu?pg@
->1׋*"c/H_Q A?.W⸴]:m&ʪHx
-Sq?,瓒LHWPqp^\<=Oa׭3z̃M}f8?!6=?|!z2FkdDMv$S*NX|uuO%X8G']% Wq7=FG#X5{gʎ&9Ź W裗vwp~U.`Q\_%>pB!52,$ ;^Z&Y([Ӹ}z(hV;\y\NP` 锘NG15AmJm:s?{9(C]]Z~7ݵbIFOWuнP:"Ujb,$Շ{6/=O i^=ʍ"QF0;;7|mI/`!9$qv 'M3%p?7rkbQu[TIk\>`|ig}fBq~|ix`n-UaU B{`kdKS';\Q)|Yf&J~i϶lgu tp)T5f)Y#$`tg(ܜd!&G_UdQ|ZT}ZZmW|Up0[m9 [r?܏.x^ΰhhQ1nQЮ,qmh;N2B"d*Ax[UhPɀ3/֝6ϱ'E
-a;TAmmu |?gܷ
-X?ʁsP xxs\V'6{U0x{:,p|Xei\٢J,NLN{:3#Ul:tO/ z>-AҐo#"FW@c~H0S3d@݆1[؉i"o.pQwTtSFE排+ªXЈ0@dIv`|O, ]."vUF?n:
->=v Ns`bufN x#XޕHy&nνG⁳yӧ)X}kw-G ;w!3YYL.}.lEh/϶RGDOԠ(,PcM޾aS JUSƏ_pFDyaxBcu$[fh]Q")ĶSZAq
-#F[;-xR]s{͉SI9|]ck׵uB})(+Vϰ<7#L=^P3חl5C(l`Yuffv&3xQw2+dKƗK|eO~^r3zlb;7UkOݟV[]lƦ4e ==w<ôB|#ܠ(e.Sލ8H#jo2
-oh/Iϕb*ti^N i,tR.$]d"BYT6%`Kl,4ЧEaY^+:rE"
-KѩZ.Ed0if$;FBY-4u#= ǩp"d@z6$HB Z.);U57v
-gTч%WqޕBV4uЅB IPi`Vrȓ>R~5De}utnn]z{2}jVGP;m6U+%;[GVxh4s .ZYyGJ9F+.uL
+1442 0 obj
+<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 6804 >>
+stream
+xڅY XW&hPZEU.*((D 䄰oo :VRkkVhmm]Zkk{Զr/sN&~QVVL&s\9wׂe.Z?tG
+25zzzzI͢ܩٔ5KͣS "j1ZJ-S+*ʋ(j@R *BP[mTNEPTMPTO%P2'r(IyCfEl~ijUt0}F1Bͼ4XWؿslπ^Mm9 ۯfwY籓']O 5Рaa_VVp:mtpgoӃD#Jd=;CȅJKHg:IKz+n{
+"bUV1HCCOVZ.65 +qHJi[>pi!
+B;/ö^mTչ/Lm2q57u87V `ɗbGg5ϺoE>GEV>(\wDzml>L)9fm{@(0NHy+M_灪5՝_i|\ozÔn~ `J9sݢ<v2XxXLAB8 "; G5*V"9SA CG{ =ho|.
+zLiEYyi5aZ^8p~=vpF+" >3d1{6ၞt'5N&0eQ|2.K(咷kFCA tRNNRWRZX)\шQv\$]'┕(cU:x 7cz)}z}m 0[-ěޘY/VT>=k }ly.c !C ӶK[<?J_Yv&;28, {=l.vEv}lY9Ky
+ϛl4&:W+xv,7W0CFl ۸'xSeħaقU NY3o@m((}g#'iǃ{='Ĺ-kTbYʪu/m_1w0Fэxn+oޤ|&Jr1)3MeQd6Aa+x5Ӷfu/x蝉0uZu'adž8l`ॣd} 4rCBIu2E(G#ac$}ҳ( qx"4R+-p[1;o<
+`ix` * Ag+ja~xEw\J%a-GZ~]첐aa8.@{WZ6*SGXxS Ai6cg~g!AFs hMRɎޒK5ڽCgT
+,x1|u_~&eUx P^_݆~*FxMz{~Xեso0}A9e2eǯ_Ccב`\kDdHpa(.4c3H|q CC99sy TZjfIFHiw0H.%(;7)Lcܽ?Ïz3`o[/ ] NGxC}_|&->^_@>8)4@dJ%Uo2{ 8s\}a΀vie~ܬU)`qH]83+/?vmf3- wvG%N]IӜ{5FܖҚ8\j# dҫ}vX_{ߢ˰7cj<̦H>m8iDX)JxH JMEIȴRQcx'EhCiίN
+*揵_;xg<x#^+yx."+AŻaا&{^Խ{os{Ȼ@n;P,P:%P$6$y|y>(j6GṡrCSJZy.Tyro~Ҿ%{&p>Ș!jZUYsx&<q}N]$FO*VeTYP__VQ㐉hK<{&%tatm4
+$pÂp? zt(hOqۿ.N`*~^8W407
+_󱾚{M2 Y<yZn epFCyO":)Ac3|
+⇂
+Ǎ"QDZw_IX'7'5q !I1'f 'א+J8wFBb:<ghPF8]4HS1Cg5(=
+"-SiƱ|#+!ј j$}@uqE\e,$L-#XMOa`dӜNlW(k|"\Me@1WO
+r
+f>/c?B[<d$.#9HþX^fЗ :!F􎔂h֫Hc0r8b(.{fS
+RnʯϘjqgLh/g88V-0]a}*d`0kEEx'950Y̽0KDs͙ۄ"ê{"_r“'߄|Y0b_/8[jg_- &wMg2 g(a+ #q$N7፠/B$.={Ƭx||[ o}̿q,wᓰڅַfSG g-trLrU!_qacuxۇ0ʩS,x`EgU7ٹ=Z
+F+֩,AҊ?H$U2ը BGP,](=e8+`4CQ7Ll{u@wŇV3RN{:l@8f D:A7p
+f1OJ-p$qhM=Un?Q&DݤR[Mk[&-fXMPסL#<W/HF'bdPAÎT%%|Gj{=aq|1\)l]6C,x#Hs[kdr~n1[UӔ)1aPq?30+0rLJyyb<S@cOV5^x2|R:5ܓ-M;!cD-h5N~%Bl1o{~&z2ְsƽz3C}bNѯ#C&^ڑ<@\ &qoL!(4x[h`>]ߗ
+X+U[Ϝ av;زŒݕ =7YͰWkJsKu` CU
+,!~]%p>!L/_ʭǣ{/c>* 髸Z]#f0}#K#*p΄ Tk,v|:zwR]j]gቕƗPv ^@xDjy~ffn$]_=CZmSH5ٷ^l]qA{֛r?ZCWdIFcS;K∠6< !++Vdg;]Q̈])|IFJ~jb[n&]ų2: T5$cR VHrTP%SDYBl!__`¹(8+:+T EBL|lBl5sx=S*fa|Ū
+fUv
+FqzcR['9˝%WIR].xu(0wm;["{_;^̼B  0Fc`7cv8fRC_=
+1??|jmYm0
+ om|a8,N<zT
+IӷTf# 3~ݯ1p]3+ w͇0!/j z!`ӠI4&
+]s!NÈVHq>xRϖ5Ih..tkmXv~k (n^婢ySb@EMmj>v¿4)mh-ln>7pS%0l4|tFq3Ls?ff_ de%B|dznTr3Ҭ؎?D#Na7П}i0|/ӳ1o$3z򘩫;O[If_\]?`l{zc{8QVsZsuFS
+l
+|96tdQ1*
+LU]{u3*Zdeoү!f@Qi{r)w19_!x='kgWUP#
+<zWv駜2cfiXfe*%bqھl-٬gϑ> f NKP:?Ӹ]>TA:eÿWPH~}tXfюW*w
+cfvN ^A+wa"
+ζ#QV-K_;o2 XG*ɑ.)ɽAn"}zKvMw NPeB<7u7spM&!>;!2Å ~ؑV5N[
+iT*l<.Y$yȥ <vLx(7Mt^aff*%r9䙏r[q(pS/Ej>US*xNay-RZ-DyśW=\Q7@b:3LH("B[W&o6/CH=~;>;Wt;[!mB#^U GVg@a̕&0Ma>PNCUƎ>QQr
endstream
endobj
-1430 0 obj
-<< /Type /FontDescriptor /FontName /TUDCQI+LMRoman10-Bold /Flags 4 /FontBBox [ -486 -295 1607 1133 ] /Ascent 1133 /CapHeight 686 /Descent -295 /ItalicAngle 0 /StemV 106 /XHeight 444 /FontFile3 1432 0 R /CIDSet 1431 0 R >>
+1440 0 obj
+<< /Type /FontDescriptor /FontName /UFTXJR+LMRoman10-Bold /Flags 4 /FontBBox [ -486 -295 1607 1133 ] /Ascent 1133 /CapHeight 686 /Descent -295 /ItalicAngle 0 /StemV 106 /XHeight 444 /FontFile3 1442 0 R /CIDSet 1441 0 R >>
endobj
-1433 0 obj
-<< /Filter /FlateDecode /Length 635 >>
+1443 0 obj
+<< /Filter /FlateDecode /Length 649 >>
stream
-x}[o0F+HCs]*UB^վBlHDIx߯oJ+8s<NfcOuu0qƴյ)L<`mtm_GS[ӱze׶8_'̩_){ؙbcTMx<:~ͮ.i [2M[V%Osyugk!ao|,nHrLEG$x{k;sYclqkn174=9g2׺>ox40mncכŰ?ZhwkVN [Tڴ0ޞL4v 6^Id'αp}oFmyLIP"2Ĉ@b"3aOIR9hLP &@.P={IdJB&32iDSȓ̨r3,@9'<)rgNDdFȌ/A$u
-OI w+m*"gHST3!Q]S Q]^KpZIܦ"B2=˨:z&HL5)&"k)&./
-
-}Q[{WVD &Ky&xO{_i?>Gqm7<
-3OҚ WW_>a4*
+x}[o0+ڇbVKXm/v46l$p$<R ;smta잳s[x\4Ͳ.'ccC{dom]nMnVK^xfȺ47~xv3&OMx<:~ͮ.i [1mW%sǓՋkc񾲺%[oyrM򋷗7dFEVv{ա؞hƣiw޼'FvѪ\׊ݥ1, lYk5EiL4q S6Y42Vs](C[~d6<O$(MKAbDy
+>3O NS TjHIS tINH+"  uE p~ZBO$NSg퉞e )"r =E5)rMD=C_5tIEs
+)"輢}J$Ԙ$a:~
endstream
endobj
-388 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /TUDCQI+LMRoman10-Bold /DescendantFonts [ 1434 0 R ] /ToUnicode 1433 0 R >>
+392 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /UFTXJR+LMRoman10-Bold /DescendantFonts [ 1444 0 R ] /ToUnicode 1443 0 R >>
endobj
-1434 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /TUDCQI+LMRoman10-Bold /FontDescriptor 1430 0 R /W 1429 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1444 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /UFTXJR+LMRoman10-Bold /FontDescriptor 1440 0 R /W 1439 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1435 0 obj
+1445 0 obj
[ 28 [ 500 ] 35 [ 556 ] 43 [ 444 ] 45 [ 278 ] 47 [ 556 ] 50 [ 444 ] 52 [ 778 ] 55 [ 306 ] 59 [ 500 ] 62 [ 750 556 333 ] 66 [ 278 ] 70 [ 528 625 278 ] 75 [ 833 ] 77 [ 556 ] 81 [ 500 ] 84 [ 556 ] 88 [ 278 ] 96 [ 392 ] 98 [ 394 ] 104 [ 722 389 ] 109 [ 556 ] 112 [ 528 ] 114 [ 722 750 528 ] 118 [ 528 ] 125 [ 556 ] 502 [ 278 ] ]
endobj
-1437 0 obj
+1447 0 obj
<< /Filter /FlateDecode /Length 28 >>
stream
xc``^<ţa], $&
endstream
endobj
-1438 0 obj
+1448 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 4091 >>
stream
xڝX tSպ>i9!@)c\ [CE
@@ -6396,32 +6557,32 @@ O
QYp*Wcxc] ZV ;eS@UDEZL3v<W}!Grs9A,Q[]2M &S<-Mw+7Zklrp7-^
endstream
endobj
-1436 0 obj
-<< /Type /FontDescriptor /FontName /GRCBCJ+LMRomanSlant10-Regular /Flags 4 /FontBBox [ -457 -290 1446 1127 ] /Ascent 1127 /CapHeight 683 /Descent -290 /ItalicAngle -10 /StemV 93 /XHeight 431 /FontFile3 1438 0 R /CIDSet 1437 0 R >>
+1446 0 obj
+<< /Type /FontDescriptor /FontName /GRCBCJ+LMRomanSlant10-Regular /Flags 4 /FontBBox [ -457 -290 1446 1127 ] /Ascent 1127 /CapHeight 683 /Descent -290 /ItalicAngle -10 /StemV 93 /XHeight 431 /FontFile3 1448 0 R /CIDSet 1447 0 R >>
endobj
-1439 0 obj
+1449 0 obj
<< /Filter /FlateDecode /Length 523 >>
stream
xڍK0Ydp;#
ZPaL2,!}r@,1)z%E/P.i</gg/0x´ ?C:ml<Cg힭] XZEtWݰJǭi֞row?KovEA
endstream
endobj
-387 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /GRCBCJ+LMRomanSlant10-Regular /DescendantFonts [ 1440 0 R ] /ToUnicode 1439 0 R >>
+391 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /GRCBCJ+LMRomanSlant10-Regular /DescendantFonts [ 1450 0 R ] /ToUnicode 1449 0 R >>
endobj
-1440 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /GRCBCJ+LMRomanSlant10-Regular /FontDescriptor 1436 0 R /W 1435 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1450 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /GRCBCJ+LMRomanSlant10-Regular /FontDescriptor 1446 0 R /W 1445 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1441 0 obj
+1451 0 obj
[ 28 [ 569 ] 45 [ 323 ] 50 [ 508 569 ] 55 [ 354 569 569 ] 59 [ 569 ] 66 [ 323 ] 75 [ 939 ] 78 [ 569 ] 81 [ 569 569 ] 98 [ 453 ] 100 [ 569 569 ] 105 [ 446 569 569 ] 121 [ 569 ] ]
endobj
-1443 0 obj
+1453 0 obj
<< /Filter /FlateDecode /Length 24 >>
stream
xc````1 S
endstream
endobj
-1444 0 obj
+1454 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 2828 >>
stream
x}V TWUD,u̯rI4D-pEmiYT~#ڀ 4Ђ Qh"hqьFLΜ3Lk{^IggB"Xor_+u
@@ -6436,10 +6597,10 @@ B]/NnG"ZΜ[,T[=h pԣj]]
6/T&{TgeeYwgٲlYl[vNuVE
endstream
endobj
-1442 0 obj
-<< /Type /FontDescriptor /FontName /SDPEKN+LMRoman7-Regular /Flags 4 /FontBBox [ -483 -292 1562 1124 ] /Ascent 1124 /CapHeight 683 /Descent -292 /ItalicAngle 0 /StemV 108 /XHeight 431 /FontFile3 1444 0 R /CIDSet 1443 0 R >>
+1452 0 obj
+<< /Type /FontDescriptor /FontName /SDPEKN+LMRoman7-Regular /Flags 4 /FontBBox [ -483 -292 1562 1124 ] /Ascent 1124 /CapHeight 683 /Descent -292 /ItalicAngle 0 /StemV 108 /XHeight 431 /FontFile3 1454 0 R /CIDSet 1453 0 R >>
endobj
-1445 0 obj
+1455 0 obj
<< /Filter /FlateDecode /Length 457 >>
stream
x}Ao0
@@ -6447,22 +6608,22 @@ x}Ao0
֡Fºs&Hi@ W0qa%yEm6-cj܄p=%6.;-{NBUquX\{
endstream
endobj
-386 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /SDPEKN+LMRoman7-Regular /DescendantFonts [ 1446 0 R ] /ToUnicode 1445 0 R >>
+390 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /SDPEKN+LMRoman7-Regular /DescendantFonts [ 1456 0 R ] /ToUnicode 1455 0 R >>
endobj
-1446 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /SDPEKN+LMRoman7-Regular /FontDescriptor 1442 0 R /W 1441 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1456 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /SDPEKN+LMRoman7-Regular /FontDescriptor 1452 0 R /W 1451 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1447 0 obj
+1457 0 obj
[ 27 [ 743 511 ] 35 [ 460 ] 42 [ 716 460 ] 45 [ 307 ] 47 [ 511 ] 49 [ 678 460 511 ] 54 [ 653 307 511 511 ] 59 [ 460 ] 63 [ 511 ] 66 [ 307 ] 70 [ 460 ] 72 [ 256 ] 74 [ 897 818 743 562 511 ] 81 [ 511 511 ] 84 [ 511 ] 95 [ 729 422 562 409 ] 100 [ 511 511 ] 104 [ 716 332 511 511 ] 109 [ 537 ] 112 [ 460 ] 114 [ 664 ] 116 [ 464 ] 118 [ 486 ] 121 [ 511 ] 284 [ 511 ] ]
endobj
-1449 0 obj
+1459 0 obj
<< /Filter /FlateDecode /Length 28 >>
stream
xc``0-/͗U 
endstream
endobj
-1450 0 obj
+1460 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 5882 >>
stream
xڭY |SUN7UW ʎ**KeeҦiK6iI6mӦ{ӅntŲ㼧tnrCq\~<޼7{NL&=;֭?;,^E‹ I)L,?w"_9cTϓرbO1L# SQG,Փׂg-F)71&Ɯ|7_p6 s2xI"ŋ<_O1xօ ;Ӳ<476!9&%ݗp+L&er%2Yi|.7#!%!&3!+'dpE M㾚&q  ̄nH$\hH0-#iQ"}N梔2[j} osoBQOR2δԘui ["(A?Ɠ1g,`,b,a,e,c,g`dbaXxňf0bF283RBFCĐ0rO"ЏrLd2aLX42m|b !6`'L)˂'Ẑ!<2GN]8eZ?Ow
@@ -6485,10 +6646,10 @@ qVv5ԪTB:u[B2B:~J:m>5T V0cKSL:"ͬҎI `jrrjZ
He7zx~ ]`UzVxuattx_#YAg)Ơ>]i|Oy`ib eʼlu_ʢ0x3SfY:-rTjzU3Fpf
endstream
endobj
-1448 0 obj
-<< /Type /FontDescriptor /FontName /RMABVB+LMRoman10-Italic /Flags 4 /FontBBox [ -458 -290 1386 1125 ] /Ascent 1125 /CapHeight 683 /Descent -290 /ItalicAngle -15 /StemV 102 /XHeight 431 /FontFile3 1450 0 R /CIDSet 1449 0 R >>
+1458 0 obj
+<< /Type /FontDescriptor /FontName /RMABVB+LMRoman10-Italic /Flags 4 /FontBBox [ -458 -290 1386 1125 ] /Ascent 1125 /CapHeight 683 /Descent -290 /ItalicAngle -15 /StemV 102 /XHeight 431 /FontFile3 1460 0 R /CIDSet 1459 0 R >>
endobj
-1451 0 obj
+1461 0 obj
<< /Filter /FlateDecode /Length 557 >>
stream
x}K@5 ^<L aJ3ۘ:S I\離M7 uε*{#ѣ;k[|o4Zŵ"ݿ)RC{m]ve`\ YNZй)v藿{/>]]:/eK[u(0Qq'*\Oj/"xRZ-: AԪeh{A(TYL̪lTmf31ٙ`׷7RF6ͅ!,N[^X[eeí!: uM^P3y3Ƽ2+.Qu<M5P;om`aIF4GfB]´r.AbGQ)(D 'P" \ %ty3=
@@ -6496,22 +6657,22 @@ x}K@5 ^<L aJ3ۘ:S I\離M7 uε*{#ѣ;k[|o
)+_R(( t'V{Fqm[s1tߞRmVCXRp
endstream
endobj
-385 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /RMABVB+LMRoman10-Italic /DescendantFonts [ 1452 0 R ] /ToUnicode 1451 0 R >>
+389 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /RMABVB+LMRoman10-Italic /DescendantFonts [ 1462 0 R ] /ToUnicode 1461 0 R >>
endobj
-1452 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /RMABVB+LMRoman10-Italic /FontDescriptor 1448 0 R /W 1447 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1462 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /RMABVB+LMRoman10-Italic /FontDescriptor 1458 0 R /W 1457 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1453 0 obj
+1463 0 obj
[ 27 [ 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 ] 61 [ 525 525 525 525 525 525 525 525 ] 70 [ 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 ] 91 [ 525 ] 95 [ 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 ] 252 [ 525 ] 494 [ 525 ] ]
endobj
-1455 0 obj
+1465 0 obj
<< /Filter /FlateDecode /Length 31 >>
stream
xc``_P>
endstream
endobj
-1456 0 obj
+1466 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 7988 >>
stream
xڵzw\D *(;{l+vQ+
@@ -6541,32 +6702,32 @@ Sa{Sr 'Yl:+W'CWy7nsv!g*ǚ 9EЪ5o?ȭ+4 пBٔ
U+qz
endstream
endobj
-1454 0 obj
-<< /Type /FontDescriptor /FontName /MMJPSC+LMMono10-Regular /Flags 4 /FontBBox [ -451 -316 731 1016 ] /Ascent 1016 /CapHeight 611 /Descent -316 /ItalicAngle 0 /StemV 175 /XHeight 431 /FontFile3 1456 0 R /CIDSet 1455 0 R >>
+1464 0 obj
+<< /Type /FontDescriptor /FontName /MMJPSC+LMMono10-Regular /Flags 4 /FontBBox [ -451 -316 731 1016 ] /Ascent 1016 /CapHeight 611 /Descent -316 /ItalicAngle 0 /StemV 175 /XHeight 431 /FontFile3 1466 0 R /CIDSet 1465 0 R >>
endobj
-1457 0 obj
+1467 0 obj
<< /Filter /FlateDecode /Length 736 >>
stream
x}]k0+B{F,)!24e6̐v.'뜴0ZDtUo/]nxu]}js&ɹ^uq櫪oUNG/)>/Yc:۟6Soe?QQŨtmWսHnEU`E#K]Y-!x(G_͹qUh2#s9Fmڲڋ/29SܐGh:}G'Feϼ' ufv[]4ES1Yiqw@?8 忷P2Kf i(5E
0'l scӒZ1akK],~$!}@-@F-4Π%} EKCT&)p&S:.}<e>(M O*z^F
endstream
endobj
-384 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /MMJPSC+LMMono10-Regular /DescendantFonts [ 1458 0 R ] /ToUnicode 1457 0 R >>
+388 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /MMJPSC+LMMono10-Regular /DescendantFonts [ 1468 0 R ] /ToUnicode 1467 0 R >>
endobj
-1458 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /MMJPSC+LMMono10-Regular /FontDescriptor 1454 0 R /W 1453 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1468 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /MMJPSC+LMMono10-Regular /FontDescriptor 1464 0 R /W 1463 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1459 0 obj
+1469 0 obj
[ 28 [ 481 ] 35 [ 517 ] 43 [ 444 ] 47 [ 517 ] 50 [ 444 ] 55 [ 306 ] 57 [ 500 ] 59 [ 500 ] 63 [ 517 333 278 239 ] 68 [ 267 ] 70 [ 489 ] 72 [ 239 ] 75 [ 794 ] 77 [ 517 ] 81 [ 500 500 ] 84 [ 517 ] 96 [ 342 ] 98 [ 383 ] 101 [ 500 ] 105 [ 361 500 500 ] 109 [ 517 ] 111 [ 667 461 ] 114 [ 683 ] 116 [ 461 ] 118 [ 461 ] 120 [ 435 ] 125 [ 536 536 ] ]
endobj
-1461 0 obj
+1471 0 obj
<< /Filter /FlateDecode /Length 24 >>
stream
xc``T |5%aI6
endstream
endobj
-1462 0 obj
+1472 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 2827 >>
stream
xuV TW1 h@%&RFgjk
@@ -6584,124 +6745,123 @@ m׫&IcT щqRm4T!MKUR:mZr껎u4CHNNUJӒbU:>A% iҥ5
ʊKJm)
endstream
endobj
-1460 0 obj
-<< /Type /FontDescriptor /FontName /JZYRJQ+LMSans10-Regular /Flags 4 /FontBBox [ -420 -309 1431 1154 ] /Ascent 1154 /CapHeight 694 /Descent -309 /ItalicAngle 0 /StemV 93 /XHeight 444 /FontFile3 1462 0 R /CIDSet 1461 0 R >>
+1470 0 obj
+<< /Type /FontDescriptor /FontName /JZYRJQ+LMSans10-Regular /Flags 4 /FontBBox [ -420 -309 1431 1154 ] /Ascent 1154 /CapHeight 694 /Descent -309 /ItalicAngle 0 /StemV 93 /XHeight 444 /FontFile3 1472 0 R /CIDSet 1471 0 R >>
endobj
-1463 0 obj
+1473 0 obj
<< /Filter /FlateDecode /Length 527 >>
stream
x}O0=dqwW(@bS@U[ }m?[$xc&|䞳5YE <HuoDdm؇ ul+Uuw&yYR*uK}pK?—_?/¯Bt8 r{j[uGDf(senZ=sn,득 F^%Ke;+<b&>˓\ڎN+锍Lũ FZԁ ?hr69xeLޔ6'b#;Jh]>vf{iŎ#.kImS u`jL.+ Hɿv{I&>T.-iYP 4vĠ HRУg*<8sG9?|Oc3(@s%>AP&DL'M1FLhI|h,T' .?mzM,nO ~{6\<kmV]v+Eכԍ=
ޗ=
endstream
endobj
-383 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /JZYRJQ+LMSans10-Regular /DescendantFonts [ 1464 0 R ] /ToUnicode 1463 0 R >>
+387 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /JZYRJQ+LMSans10-Regular /DescendantFonts [ 1474 0 R ] /ToUnicode 1473 0 R >>
endobj
-1464 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /JZYRJQ+LMSans10-Regular /FontDescriptor 1460 0 R /W 1459 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1474 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /JZYRJQ+LMSans10-Regular /FontDescriptor 1470 0 R /W 1469 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1465 0 obj
+1475 0 obj
[388.9 388.9 0 777.8 0 0 0 0 500 500 500 500 500 500 500 500 500 500 0 0 0 777.8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 277.8 0 277.8 0 0 0 0 0 444.4 0 0 0 0 0 277.8 0 0 0 0 555.6 500 0 0 0 394.4 ]
endobj
-1466 0 obj
-[ 27 [ 750 500 ] 34 [ 708 556 500 ] 38 [ 500 500 ] 42 [ 722 444 278 278 764 556 ] 49 [ 681 444 500 778 278 653 306 500 500 785 500 ] 62 [ 750 556 333 361 278 514 306 778 528 625 278 ] 74 [ 917 833 750 556 500 ] 80 [ 778 500 500 681 556 389 389 ] 88 [ 278 778 ] 91 [ 528 ] 95 [ 736 392 556 394 278 500 500 500 ] 104 [ 722 389 500 500 750 556 ] 111 [ 750 528 1028 722 750 528 750 528 611 444 500 583 833 ] 125 [ 556 556 ] 199 [ 778 ] 234 [ 375 ] 251 [ 444 ] 283 [ 1000 500 ] 319 [ 556 556 ] 400 [ 778 ] 499 [ 472 472 ] 502 [ 278 ] ]
+1476 0 obj
+[ 27 [ 750 500 778 ] 34 [ 708 556 500 ] 38 [ 500 500 ] 42 [ 722 444 278 278 764 556 ] 49 [ 681 444 500 778 278 653 306 500 500 785 500 ] 62 [ 750 556 333 361 278 514 306 778 528 625 278 ] 74 [ 917 833 750 556 500 ] 80 [ 778 500 500 681 556 389 389 ] 88 [ 278 778 ] 91 [ 528 ] 95 [ 736 392 556 394 278 500 500 500 ] 104 [ 722 389 500 500 750 556 ] 111 [ 750 528 1028 722 750 528 750 528 611 444 500 583 833 ] 125 [ 556 556 ] 199 [ 778 ] 234 [ 375 ] 251 [ 444 ] 280 [ 670 ] 283 [ 1000 500 ] 319 [ 556 556 ] 400 [ 778 ] 499 [ 472 472 ] 502 [ 278 ] ]
endobj
-1468 0 obj
+1478 0 obj
<< /Filter /FlateDecode /Length 46 >>
stream
-xc``߿
-
-
+xc``߿
endstream
endobj
-1469 0 obj
-<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 8638 >>
-stream
-xڵz\W qΘ[4v^*eB]zYXڂ1%1`4%11gpf%~X~=
-0L  Zt˖-KƮ^!(%p<.K!PЋcƱB%˦c:0WB&(ÿwڏeᖅuF`n
- p_#0'<hl06 Fb1Xl6M&cS4l:6fcsl![->Ɩb˰Jl[a Flmƶb۰挹`y`7b~?aXa"(,b8,!-,/X H&]w1aq ;:]uڄQŸm‡"{Q*ћp$tbB}zwM={4zה^^{]gy5}}=oavv\N뿠^_$ ^RQzz;w`3YaCfy0t~5yӑF7(Qgam{0mfnWe9p˨ȿsSUtR"qT'~ABm
-&[epDx\TF`, rJ1 5ނnnx.MIFb}\8D hjdܷg/ݹ"$"'n<fuz[+WnqHٜ'[?R̐.Gҋy_R3nϴ܃ Zl{ܓEC,\%y0K$a_`7h
-{J2I +<Sp7-.YW<
-)()l~GDP Z+f)8[IuXy``XX``yXuuyy5nmZ_
-
-:i$WšݼCB
-ҳ vnZb\VP)i;w 'l0 ??omp2&s!GuH൝ ܰ~$=3}5Y.].9X5}eI3<gٿŎ_q+0'gcୄDDCs#z
-Ma&ÔH"+7!5e.}! R(Z_GM65I%OV1ý'Dz[Mc8p6PVdԁgOP?$8~ h{
-p%ߚ/nPiU{xq<.v!&46{~NR4j -;CBc)F>pԐ_,J6pfP߻BՖ7lY̔vH$ l=}{j|Ǜ<*HZp~8av\R☎EqQ 2܏bP¢6=LǏ=XgQ5pSxI]pQHHp/Աߣ$ٺB ۄ&=Ilۇ.>b64ͭN[ 3O'Mt@} r8[B}703w,3:c1mDL/y`p3mQ
-//)gnݞ{>~TaE6rpa;c ť򒺔ZCn2-%c@ RLR4 sەQM)
-j#. du..:)=aҏ6~O7adbݨ6A[Nlb6kPgIaZJ
-Kfe1ڵ[eކ"|O2N*&7 8AK& V eÃiyY6ĒWd9eU`T8 u8.ȥ'NxPǜ݇6`:ۉ/z7
-pWoyXe뗭M=.S
-Nyp65]Go\d.hіjļ؁ ZbeTd\E! ,n]r5ec4\txuZU'9'yd$7u &*wNJFx-"'ub/3JIvT.D`dRa+-Z[e$k]٫^;־
-Wį(=h(SXqpgq#li4 (`se:bH%5h(nx|ZZR6me<:hk:n">FR_X(38oPv<bq E;h__ ػKLY*wg^Tqݙݕ?v'K
-W±p* ϓ"̉c=̃9pgaKPL$+gAZK|J~ ޿<٬Lp:1NhglApj2+:W`er\
-傿r3JC#˝#ʁ6Yf*$hedR>f%g*e] p_n|An%OGg˿3w$8 sv'ۼ |:[NC[pl s5XpzT4$dZ70F܉
-$
-DUi
-p<탋`؏Z'/C:f+ꖀ3y t^0߹$e&aDZPȕ@U>}ME#ȎO
-:uJq]xMl[#N
-ja(GF(:TGĽ}KJJ@q`-I9k\
- rY'xH<t = כTY-?L/:Hmu2m3~<1SFx3
-477e=q$΋;1Z殺r2@eȄ*tȔSk< /*'W>W_r
-V|73Kߌw?}~mڝ5@nsAZ1 wY)UZxo\|O2ԢAq"zLeJMJ4$חZmi63O+dAJ4v1 Ő2םb|WhS؍7#3j!vuG,KN$0.⍆[d-I2,*/VSU !Q*Jq+C#[ *lmH81yӨ&v1mLE1J>i4ŌV Ebԥ4$951_ժ/ tdh qj!lI]ˤ](t
-Ӈ_XnPׂAK@^*A1 y"-3#aZ R& D, \~(d3aL3-T`B,%HwZ<NhQuJ/\2 G'x_̗|RsPLd}Qc`sܚ@7NNPqbv(Cbur*NV)Y(di\4yAyo>lG59Mz
-?jzr .ߟ~ _qpORRSV
-=k:J83of"g7liH%1Z["
-.ٷXy sCs,DDf&/UeRrfͼyI@Ngh2S;5`t
-hYek]foWPn 0(Vx0"n#i޻q"i ܘLC-c??a/vz~DQ(&ڎ9ΧO(Z$F(D Oiz*
-0o^|Tgl^퇺fyB]94WT ETӐ^¸AoE|qYYAM- npԇlǣ[M!gĻ":NKUIa4'(ᩤ/MS*Tlk0-8yV. UԀzK5㟔z
-1BK$Yjɫ|@^r\hl+C`x/@b_0{V%Hb!TtB?BJ:wʕs^]yիwx Yޅ,֬h5t+m&<xAM[Euvև?IQtQL`P/40xVF!}fUU,̔|}.r
- ;S\$Oj%sn;8pVbJB/gT"BPw[JR*JQj̕G+4z֊t~8q.)0UUxҿʎzBU"ː@~tpysxъz^|wbFQYV_0]'9%t|n QRS(3|FPڌ/_br:giT٬CE <^
-Γ] aptFj
+1479 0 obj
+<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 8872 >>
+stream
+xڵz|חy49AfȌwޱ+"\dM616I(%$$$䎸@ {,3ss%0@ڏ^j}s c׻{9/.r@q8
+9[+4pOh
+bX,a?aHO@ 
+  ~!vnEξţ0AV'O -JAl'~t]ح{7n/㷞{6ZI Lzѻc 9 ɐJJN[Oo?ʝ*40'K> eJOmM:h 9:tCmشa[<|#d##,[n1r;"&hbM\FE~&KUfұ
+Y\*\;~^ߏU n$*l=
+zc{[]B#^>rkP<=y=ϑshiRԴx>s.tNVVi.@/\,ɖD53;cRX4 EԂl&mE[vUSp)W:qZKrAI* brqJ*11dؽ)Xy0{/'LN.LPF&'J6515N+|D VjCX+J/
+"fM"RpTyEZJ,!LttXrqJ.QlW ~L~~UE8#CZ<F\P4IAFU l; h.xv hX)|hXH \-FGFh &#'
+p5 P̛a
+ Bh%p=D4)EgCk}0jV&(raLvd}!p%|Qvڬs(KNJ$FV~%m;WH|q~#N46h$ (W]F*(1 ټ!܉v(NPMs5ctCN#єi_t^p6h B-̑иh+9X,Mb&”7H"c[D08`e 3h.Lj{5ɚ$,Y -Ma!H:^ ʞ?Ex}$~(,a(#v/fjGA둲#PqD퀳%LTYl=⯚kO:=a5ۙCx] #.?Yw۶ƋAn;j廊[]i!S!̟iԅt7Gsꨃy {=SB;|!)qLϢ(Y
+XGQA (eF+NGk,(|͒ hg+*a;;\:[Vfф'i FxoC]o`mXt~jmML<FCǀ?g>0]D쌁"8ʰ1gÍpʽL
+H@5F9,+?:O[
+yt|VYUSPZX <}nÏ~,:B9<}s(i' >¶9zy2pAd)u4꣼tEZ
+Kvŀ*ȭKi #l;@G$X&Ar~Fc
+sN|G3d =4n[(/&ԙq A/Xl KΛjU9t}"畲%M2c_YM kBΔsۈR0ct%SND-@+z(Z{bQ"֦JZ0]h
+<B
+uz~uCԃ]A +D&.G[, bK?MDKu'Fh5&!g pەgwy{\s,YD.YMRן_^XAyB _}RrIQB[ř!YN[3G!E#51Nvv͆j: SX_]ҁR&EQB?rFSlSH91&? U1Ry4K(.(g"IT;C@Wz
+xQ^+0%infy{0<]:Km9lv72gEvb FJ|fvWA4jrn0Fk>pWAXrţc0o _07@}
+tB^)ԪXx
+l&ج-^[Ri.<~PHfi,'$֬,V],ώERV͓]>xs
+gf?P s=z l*=,MLLNaP:kOa_ IY 43y $ھikn#r;HWiRӵڹLVMZ̋iUu/v*[OE%q. >-._N7nbQQ)k$$&i@^nYPiU3EN8XK?1F9B9nsޘe̼Y*l#YkLܟyò <{=cmaA5LNZ҃戂*:E?w&Fsa1U m2bF5eOKKʦs9:zkwn_
+U?%v%+MRh_T*`jUQ/ WDU:7i,*%,w_2=;523˕Yjf$^Ex 'vlZ=/$NC<
+a$:z%Pb5}5EЂX$'\C ߢ@_vc Q
+{f32%>ܑqw B;9bCT38Q9PulooS%[ֹS,5/P.k!7їib3DЄ1+VMQzTc;H`{KݕѦ%x} 7$0Yq2ɳ?O6 !`}w;6N.f\6=gyu%{z8;G2m[p-Cvx $+-
+Dj R_]K[2.`(A9Zs(}d23-z~Fhbup, G7 4Z*C%N\ȵf% SsrPϓgG,Ϧuڌ6έP+)= 5S/'2\
+;D΀mB.S)ސ4 P
+^G+Zezf+pة/j>xhh$A=aɓPӏ;Q-x2kw+v1u`)
+$eI䉉
+<5J2 4Ӏo|*Fl>L͒(P8o+85+2-iŧ7ĸ􁗖9+12cR_c49U ||s৑0WFv%
+GZf=7ހhsgGk. CcNqr2NW/q82Nhmd'm8E -ѕ^JR0O45%/e*!\*P#Dӆ ƃÈ/pm7ע41Q7\p$@(Fxm)CD=oY!#ްaZ&^4zmɂO-Wo$" p̩}j9WLaf M~`JSQ
+RƠhe@4s1"w_.|HSE4rjTpv7',Ǔʰ
+*!<Ie\;
+(}MoҼX3HŐΙIUJYE="el[
+"xE3QZ)piTA [Y/3,@?hA|F|nf=: sF{QUB% 0g+u: \>T1C \&o(֨RQaG.>]E\bQu!/?|V Ӱ|&GEh4C^9@A@$a'v^<;8E;"d*& 1 ><
+pynIHLn"hzY9<K :&؅"'m$uwE斪7 LA;۩f~1Й^ x 8uΧ<Ė̬#'-i[w%-jFdX"]ٹ߁v[k9R@`o t}[6{2;izԶŃ#I׮ kLS z oBDI¿ >f0nPL:O(Fdꐪ$F(D oO^>\s/H> ^AOokw<!J\mL +e\Xʧ2]]wF3 aΥ[豨f$/5k.,*h2)4
+ύ-Nex*k UTlo43-8yrV+dǪ*@OʍCyJ
+N$1"g=$<e\|_ !C><"דo|͐nYU M&Sљ;df=l@%lr0Vrkٳ/=[._ś;7jܲGp.ɍU~jgs/ 2}8oF6CtSt').) E1 $! fz' XX)NƲ͜_쐛Ep<{͖Otmﵺ%߉-+rQr\O6g
+RR()ZQ1S;M,W:Z#JYiIɭR0+.m@S5rZ)2ϛX
endstream
endobj
-1467 0 obj
-<< /Type /FontDescriptor /FontName /DFWWWD+LMRoman10-Regular /Flags 4 /FontBBox [ -430 -290 1417 1127 ] /Ascent 1127 /CapHeight 683 /Descent -290 /ItalicAngle 0 /StemV 93 /XHeight 431 /FontFile3 1469 0 R /CIDSet 1468 0 R >>
+1477 0 obj
+<< /Type /FontDescriptor /FontName /ZIKNHU+LMRoman10-Regular /Flags 4 /FontBBox [ -430 -290 1417 1127 ] /Ascent 1127 /CapHeight 683 /Descent -290 /ItalicAngle 0 /StemV 93 /XHeight 431 /FontFile3 1479 0 R /CIDSet 1478 0 R >>
endobj
-1470 0 obj
-<< /Filter /FlateDecode /Length 757 >>
+1480 0 obj
+<< /Filter /FlateDecode /Length 767 >>
stream
-xڅKo0EvAñK  iPMDߏshԪ_{}u5V$x3ؕf=&o41ΣGڵ6[˦eSn9u#nAߟ]Dlۢ.vf
-;,~;m(0 ySeΙ<C
-óuTՊO=bQeO˝ ^-ubh3ׇ;ywLW7qH;iu a0ʬڶNΈuנވse[þ(MW4m‰/$0Mx5N8; -Ba(̓1bP1f I@X%!"!_2b9G-J" T$L@Й@K"%P-q\sbv: :"Q5S5H-F z D]$<(<HZƒ"D%<(U3;Ur>(%Pƒ\A!AuSxAK
-13@u)*_
-՚PL,E)($vT쟂] e&
+xڅ_o0)J%T hhnF"ABx跟siZJ=ƹm,^9}tu5mݣ-O{6v:_LuݸE]l=E;hb7U} u[K[I{vbZu[HG"lݶErDZ{0˼yO겥ZGI*ʪHosCgwzDáաk߃ԖꍸH ZDFkjgEw`Qժ{ihp~F˿cd. =-V(X%@y MJu4Ed
+$@Yҁd@SHk1չ y
+4GH&X@ЩI)@)Ef
+}QIk
+TITTM9Ip$,5&Dw3xp xK)+@u:_Ն ̐,Üi(3$NԜ2)T2L2CBw%+@t7,itא = =]tа$xOw 0K S32cwLxrU3< f/USxa ̱,&"5h(QzSLnM@Oiz\"/)AnpK -zql[wOJ]]7{~4~EM
endstream
endobj
-381 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /DFWWWD+LMRoman10-Regular /DescendantFonts [ 1471 0 R ] /ToUnicode 1470 0 R >>
+385 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /ZIKNHU+LMRoman10-Regular /DescendantFonts [ 1481 0 R ] /ToUnicode 1480 0 R >>
endobj
-1471 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /DFWWWD+LMRoman10-Regular /FontDescriptor 1467 0 R /W 1466 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1481 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /ZIKNHU+LMRoman10-Regular /FontDescriptor 1477 0 R /W 1476 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1472 0 obj
+1482 0 obj
[446.4 446.4 0 877 0 0 0 0 569.4 569.4 569.4 569.4 569.4 569.4 569.4 569.4 569.4 569.4 ]
endobj
-1473 0 obj
+1483 0 obj
[500 0 0 0 0 0 0 0 0 0 0 0 277.8 277.8 0 0 0 0 0 750 758.5 714.7 827.9 0 0 0 0 439.6 0 0 680.6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 528.6 429.2 432.8 520.5 465.6 489.6 0 576.2 344.5 411.8 520.6 298.4 878 600.2 0 503.1 0 451.2 0 0 572.5 0 0 571.5 490.3 465 ]
endobj
-1474 0 obj
+1484 0 obj
[955.6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 533.6 588.2 0 0 0 880.8 ]
endobj
-1475 0 obj
+1485 0 obj
[1027.8 0 0 0 0 0 680.6 680.6 680.6 680.6 ]
endobj
-1476 0 obj
+1486 0 obj
[339.3 0 0 0 585.3 0 0 0 819.4 0 0 0 0 0 0 0 0 783.7 0 0 0 0 0 0 0 674.8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 542 0 0 0 404.2 472.7 607.3 0 0 706.2 0 588.9 523.6 0 0 0 0 0 0 647.8 ]
endobj
-1477 0 obj
+1487 0 obj
[333.3 0 0 0 0 0 736.1 736.1 527.8 527.8 0 0 0 0 750 750 0 0 0 0 791.7 791.7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 875 875 666.7 666.7 666.7 666.7 666.7 666.7 888.9 888.9 888.9 888.9 0 0 888.9 666.7 875 875 875 875 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 555.6 0 0 0 0 0 0 0 0 0 0 0 0 0 472.2 472.2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 666.7 666.7 450 450 450 450 ]
endobj
-1478 0 obj
+1488 0 obj
[ 27 [ 525 525 525 525 ] 32 [ 525 525 525 525 525 ] 38 [ 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 ] 59 [ 525 525 ] 62 [ 525 525 525 525 525 525 525 ] 70 [ 525 525 525 ] 74 [ 525 525 525 525 525 ] 80 [ 525 525 525 ] 84 [ 525 525 525 525 525 525 ] 91 [ 525 ] 96 [ 525 525 525 525 525 525 525 525 525 525 525 525 ] 109 [ 525 525 525 525 525 525 ] 116 [ 525 ] 118 [ 525 ] 120 [ 525 525 ] ]
endobj
-1480 0 obj
+1490 0 obj
<< /Filter /FlateDecode /Length 25 >>
stream
xc``_
endstream
endobj
-1481 0 obj
+1491 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 7001 >>
stream
xڅz@SWJ\juWm".\8CFI#8a7(V*V6jZk='
@@ -6744,10 +6904,10 @@ pKTaW5~ByDۖ~d|o~}m<Y>ALM}-vVgI-Bj
.V]zAK^ NP 1¬3֍G- "b@IXx8Ah[M〽U[S5'_9Ki8mf7 62 >Tk0JRڪR2S 9]h7;
endstream
endobj
-1479 0 obj
-<< /Type /FontDescriptor /FontName /BMSACQ+LMMono9-Regular /Flags 4 /FontBBox [ -451 -318 734 1016 ] /Ascent 1016 /CapHeight 611 /Descent -318 /ItalicAngle 0 /StemV 175 /XHeight 431 /FontFile3 1481 0 R /CIDSet 1480 0 R >>
+1489 0 obj
+<< /Type /FontDescriptor /FontName /BMSACQ+LMMono9-Regular /Flags 4 /FontBBox [ -451 -318 734 1016 ] /Ascent 1016 /CapHeight 611 /Descent -318 /ItalicAngle 0 /StemV 175 /XHeight 431 /FontFile3 1491 0 R /CIDSet 1490 0 R >>
endobj
-1482 0 obj
+1492 0 obj
<< /Filter /FlateDecode /Length 692 >>
stream
x}OO0BرUJRkH%~Uw@}|{[ǓX'ݶթm<[mf^姣u݋-.xk|m;q;[Η^v]4}m+ُ֓jU1~aI~ (/PmڲrObx$ó+fձFJ]銆:ŶW SQyG
@@ -6756,22 +6916,22 @@ x}OO0BرUJRkH%~Uw@}|{[ǓX'ݶթm<
4 5WPjM=UZ(܃& ՚yfiDƬ=5:ET!26蠡jh4_hܘ2TGA5ҕʐ?&;MdnDGitgy4x!5ci~~4~慱&[?Jg?'s]FKOH
endstream
endobj
-374 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /BMSACQ+LMMono9-Regular /DescendantFonts [ 1483 0 R ] /ToUnicode 1482 0 R >>
+378 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /BMSACQ+LMMono9-Regular /DescendantFonts [ 1493 0 R ] /ToUnicode 1492 0 R >>
endobj
-1483 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /BMSACQ+LMMono9-Regular /FontDescriptor 1479 0 R /W 1478 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1493 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /BMSACQ+LMMono9-Regular /FontDescriptor 1489 0 R /W 1488 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1484 0 obj
+1494 0 obj
[ 28 [ 494 ] 43 [ 457 ] 50 [ 457 ] 63 [ 531 ] 66 [ 245 ] 75 [ 816 ] 77 [ 531 ] 96 [ 351 ] 98 [ 394 ] 105 [ 371 ] 116 [ 474 ] 118 [ 474 ] ]
endobj
-1486 0 obj
+1496 0 obj
<< /Filter /FlateDecode /Length 23 >>
stream
xc```P`Ta`X
endstream
endobj
-1487 0 obj
+1497 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 1234 >>
stream
xmLWQ`j-:OFKЉ ?c2[{A'eTY@nSadςc1Iej=b//{#@h( br,Cn|Vv)OXY+&>j4MЬĆHCdZqc1ɩ
@@ -6781,10 +6941,10 @@ xmLWQ`j-:OFKЉ ?c2[{A'eTY@nSadςc
7bdxo;ts:<0n${z;[ZhoG6z|t?J
endstream
endobj
-1485 0 obj
-<< /Type /FontDescriptor /FontName /VPHLPO+LMSans9-Regular /Flags 4 /FontBBox [ -433 -313 1466 1155 ] /Ascent 1155 /CapHeight 694 /Descent -313 /ItalicAngle 0 /StemV 95 /XHeight 444 /FontFile3 1487 0 R /CIDSet 1486 0 R >>
+1495 0 obj
+<< /Type /FontDescriptor /FontName /VPHLPO+LMSans9-Regular /Flags 4 /FontBBox [ -433 -313 1466 1155 ] /Ascent 1155 /CapHeight 694 /Descent -313 /ItalicAngle 0 /StemV 95 /XHeight 444 /FontFile3 1497 0 R /CIDSet 1496 0 R >>
endobj
-1488 0 obj
+1498 0 obj
<< /Filter /FlateDecode /Length 419 >>
stream
x}N0~âRY8)UH@+R!}ڱؑ, H3rrn{t-?1pxtV`|-k6*D9DZ#
@@ -6794,22 +6954,22 @@ u0=z0a6 4
bXk֊Zow4~~mjWolhf_Xg
endstream
endobj
-373 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /VPHLPO+LMSans9-Regular /DescendantFonts [ 1489 0 R ] /ToUnicode 1488 0 R >>
+377 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /VPHLPO+LMSans9-Regular /DescendantFonts [ 1499 0 R ] /ToUnicode 1498 0 R >>
endobj
-1489 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /VPHLPO+LMSans9-Regular /FontDescriptor 1485 0 R /W 1484 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1499 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /VPHLPO+LMSans9-Regular /FontDescriptor 1495 0 R /W 1494 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1490 0 obj
+1500 0 obj
[ 28 [ 514 ] 35 [ 571 ] 43 [ 457 ] 45 [ 286 ] 47 [ 571 ] 50 [ 457 ] 55 [ 314 ] 59 [ 514 ] 63 [ 571 343 ] 66 [ 286 ] 70 [ 542 642 286 ] 75 [ 856 ] 77 [ 571 ] 81 [ 514 ] 84 [ 571 ] 88 [ 286 ] 96 [ 402 ] 98 [ 405 ] 104 [ 742 400 ] 109 [ 571 ] 112 [ 542 ] 114 [ 742 771 542 ] ]
endobj
-1492 0 obj
+1502 0 obj
<< /Filter /FlateDecode /Length 23 >>
stream
xc``U\<ţa
endstream
endobj
-1493 0 obj
+1503 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 3281 >>
stream
xڕW XgA QwFgVRWk齲J*V "$p *HѺڧ9Y>L}ϙ'{{`>>@ X{s=Oo޲C%ˎ
@@ -6827,31 +6987,31 @@ BD/נּA[D?S/Ioh |Gf?cr=1r\g[QF2ӻ^%^MÛn
d)&#Y/L1󲵝cLۅ~>v$)YgBX >{]@s@6%?0VS|PYAozů{L:׋$5'R`;HYMǘ$ m۳Ôv750`6 Nc376A~{':TAJi>('txG/3ޗܘ`}k{tl*2`.gnY{\6:[S69{
endstream
endobj
-1491 0 obj
-<< /Type /FontDescriptor /FontName /WLTFCY+LMRoman9-Regular /Flags 4 /FontBBox [ -443 -292 1454 1128 ] /Ascent 1128 /CapHeight 683 /Descent -292 /ItalicAngle 0 /StemV 95 /XHeight 431 /FontFile3 1493 0 R /CIDSet 1492 0 R >>
+1501 0 obj
+<< /Type /FontDescriptor /FontName /WLTFCY+LMRoman9-Regular /Flags 4 /FontBBox [ -443 -292 1454 1128 ] /Ascent 1128 /CapHeight 683 /Descent -292 /ItalicAngle 0 /StemV 95 /XHeight 431 /FontFile3 1503 0 R /CIDSet 1502 0 R >>
endobj
-1494 0 obj
+1504 0 obj
<< /Filter /FlateDecode /Length 492 >>
stream
x}[@&cĐ8&$s<"]$ҐݧI&hSɷ]4GkU7lrIDٻj=l\VNeyYNZӹ)~/.䃿p)Mա/:LGٍ(2?HuU#Yp9<I5f%OYeGc B&wdZ)_\ob3ݹzuٛ*yfu~h ?{i>ע&63BGz>kזXh9ԵEIgVxV[I=Kx1\OPi! 5A!h 6 E,4A PAN%Csr*A3Bh#gdiRAP KcxI0{m%=q*=q*=.0{,Sܐsf/?vҋcnًJ~Mk׾Kjmʾ)T
endstream
endobj
-372 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /WLTFCY+LMRoman9-Regular /DescendantFonts [ 1495 0 R ] /ToUnicode 1494 0 R >>
+376 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /WLTFCY+LMRoman9-Regular /DescendantFonts [ 1505 0 R ] /ToUnicode 1504 0 R >>
endobj
-1495 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /WLTFCY+LMRoman9-Regular /FontDescriptor 1491 0 R /W 1490 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1505 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /WLTFCY+LMRoman9-Regular /FontDescriptor 1501 0 R /W 1500 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1496 0 obj
+1506 0 obj
[ 27 [ 893 575 ] 35 [ 657 ] 43 [ 526 ] 96 [ 488 ] 98 [ 467 ] 105 [ 460 ] ]
endobj
-1498 0 obj
+1508 0 obj
<< /Filter /FlateDecode /Length 18 >>
stream
xc```
endstream
endobj
-1499 0 obj
+1509 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 1258 >>
stream
xmTmLSW~"]^Gd-DeNNM)R*]mXAQc`lR>TmM [21 ?̖,f{em̖,9=9xiJ*hen(Hγdmo[M ˰)q)-rQ"/J"dZ)}qLKeK)nSO 21w+(&) POh  kګ=҅Vy-4W* 2L(Ӏ (ZJ FkW8jTPiq"Q«C
@@ -6859,32 +7019,32 @@ F`B56@Jm{7
jг{qU 9L*6bӈ<|Hn;`}]{Xn_M3&b-|,#c|)̺nЬ!0d*veX?`=D~M_Ͻ}Z[b# eɶ
endstream
endobj
-1497 0 obj
-<< /Type /FontDescriptor /FontName /RMWBFT+LMRoman9-Bold /Flags 4 /FontBBox [ -501 -299 1649 1136 ] /Ascent 1136 /CapHeight 686 /Descent -299 /ItalicAngle 0 /StemV 110 /XHeight 444 /FontFile3 1499 0 R /CIDSet 1498 0 R >>
+1507 0 obj
+<< /Type /FontDescriptor /FontName /RMWBFT+LMRoman9-Bold /Flags 4 /FontBBox [ -501 -299 1649 1136 ] /Ascent 1136 /CapHeight 686 /Descent -299 /ItalicAngle 0 /StemV 110 /XHeight 444 /FontFile3 1509 0 R /CIDSet 1508 0 R >>
endobj
-1500 0 obj
+1510 0 obj
<< /Filter /FlateDecode /Length 388 >>
stream
x}RMk@ﯘ=lTEVT+^.ݰIQ(@B^ޛf{WNXV3 Vۼ"ZD9׊*]R4#N%;sQg!;~WɂAڒL4#Ggk!|x|J&BHodh\ܓfCx,SY(\Bx0d; 樅<CA#8UuAk(cXf/DmV4קٵB9yLqħ1,7 JTxhcOm(1}(DC+<ء)uh9#q=~e]U7Z:y6x?JU͢ 
endstream
endobj
-371 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /RMWBFT+LMRoman9-Bold /DescendantFonts [ 1501 0 R ] /ToUnicode 1500 0 R >>
+375 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /RMWBFT+LMRoman9-Bold /DescendantFonts [ 1511 0 R ] /ToUnicode 1510 0 R >>
endobj
-1501 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /RMWBFT+LMRoman9-Bold /FontDescriptor 1497 0 R /W 1496 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1511 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /RMWBFT+LMRoman9-Bold /FontDescriptor 1507 0 R /W 1506 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1502 0 obj
+1512 0 obj
[ 28 [ 515 ] 33 [ 515 ] 47 [ 515 ] 55 [ 515 ] 59 [ 515 ] 66 [ 515 ] 77 [ 515 ] 81 [ 515 ] 84 [ 515 ] 88 [ 515 ] 96 [ 515 ] 105 [ 515 ] 114 [ 515 ] 118 [ 515 ] ]
endobj
-1504 0 obj
+1514 0 obj
<< /Filter /FlateDecode /Length 23 >>
stream
xc``p`dP`hhpP
D)
endstream
endobj
-1505 0 obj
+1515 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 1845 >>
stream
xuV}TW!@5ʚiZ3K- _EAE%1LBD<u
@@ -6899,84 +7059,82 @@ oRWɧ<| ƠP"{nPq%e}Gܮ(WȗN)QuoYUO&Pn^
g48ԂE>*`zK@E%1άxh@,+&p_(N(/?=u0ݕLDB0O>`R Fon0km(V׮Җ ֐F"3DgϷ^?@%xSEV!6¶M:GӞ`x#qNf4e'_%#l|ZQuJeq?HR@8(fu\o!du8iw6s;YpoۚiPH&Ng y[j;rgRsJcOt~w@[fk9RM
endstream
endobj
-1503 0 obj
-<< /Type /FontDescriptor /FontName /CKBVSC+LMMono12-Regular /Flags 4 /FontBBox [ -444 -311 715 1019 ] /Ascent 1019 /CapHeight 611 /Descent -311 /ItalicAngle 0 /StemV 172 /XHeight 431 /FontFile3 1505 0 R /CIDSet 1504 0 R >>
+1513 0 obj
+<< /Type /FontDescriptor /FontName /CKBVSC+LMMono12-Regular /Flags 4 /FontBBox [ -444 -311 715 1019 ] /Ascent 1019 /CapHeight 611 /Descent -311 /ItalicAngle 0 /StemV 172 /XHeight 431 /FontFile3 1515 0 R /CIDSet 1514 0 R >>
endobj
-1506 0 obj
+1516 0 obj
<< /Filter /FlateDecode /Length 428 >>
stream
x}]O0+`Dpf!q%Df,[֞&%.m{&F%pk z:=A[2,5P3
endstream
endobj
-370 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /CKBVSC+LMMono12-Regular /DescendantFonts [ 1507 0 R ] /ToUnicode 1506 0 R >>
+374 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /CKBVSC+LMMono12-Regular /DescendantFonts [ 1517 0 R ] /ToUnicode 1516 0 R >>
endobj
-1507 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /CKBVSC+LMMono12-Regular /FontDescriptor 1503 0 R /W 1502 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1517 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /CKBVSC+LMMono12-Regular /FontDescriptor 1513 0 R /W 1512 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1508 0 obj
-[ 27 [ 734 490 ] 35 [ 544 ] 43 [ 435 ] 45 [ 272 ] 47 [ 544 ] 50 [ 435 ] 54 [ 639 299 ] 57 [ 490 ] 59 [ 490 ] 63 [ 544 ] 66 [ 272 ] 72 [ 272 ] 75 [ 816 ] 77 [ 544 ] 81 [ 490 ] 83 [ 666 544 ] 88 [ 272 ] 96 [ 381 ] 98 [ 386 ] 105 [ 381 490 490 ] 109 [ 544 ] 116 [ 517 ] 118 [ 517 ] 121 [ 490 ] 187 [ 489 ] 257 [ 435 ] ]
+1518 0 obj
+[ 28 [ 490 ] 35 [ 544 ] 43 [ 435 ] 45 [ 272 ] 47 [ 544 ] 50 [ 435 ] 54 [ 639 299 ] 57 [ 490 ] 59 [ 490 ] 63 [ 544 ] 66 [ 272 ] 74 [ 897 816 ] 77 [ 544 490 ] 81 [ 490 ] 83 [ 666 544 ] 88 [ 272 ] 96 [ 381 ] 98 [ 386 ] 105 [ 381 ] 107 [ 490 ] 109 [ 544 ] 116 [ 517 ] 118 [ 517 ] 121 [ 490 ] 187 [ 489 ] 257 [ 435 ] ]
endobj
-1510 0 obj
+1520 0 obj
<< /Filter /FlateDecode /Length 31 >>
stream
-xc``UTѰˁ4
+xc``UT0hX
endstream
endobj
-1511 0 obj
-<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 3660 >>
-stream
-xڭX XgY˘VgLZjVTVk.
- B
-jW4Z+ QhDd\#KN*RJTI
-MjJ4"!Q%*])KEdR<Vd
-ZC&WɤRJ&&) ՚
-L
-5+CY,@)X::1I?y`B$V#[+wx4 Df!sy|d!#+Ujd-@6"QH Dv!ɈIC2<; pDy2RUH8f7EF9fdH,~Qĉo4Zu/hX8XSh.:iwb
-?YDhtKZM*<Xل'oJRZ\Ff A .ƛ_hcz\X=#ZrN]2dL CеlKfN ;t :xEn8i"_ͤvVSмE8?*?XIy!m_PӒ);68 EU,xrN=X<}Rxa &I GlQF'u^ G?)D >tzq Gd}<
-}$y[h6K5ɑĚgtSgb8t78le'#~c4
-[NQvqz>|(+Oפ84-5r^
-wF-G!6<tkOP%RYnZGw".o]AUes>Vpw~-}pƁSRPo0y+D$\B9` u,8;ΞȎfy*CcqRX +3=%"Jl_sylB`Y^/7'lBL9!V.-D`):}\u;胊('g
->KQ  fFаI˃KS?xz7"_%o~nӃ0oxr?E͕~(Y@?~Ɯ_E r\]][&\L$ͨ8'?31plF3@d{rX;3? j(MT u]IKXQ1턑g_swrttwcc3
-fĮ$+KG6$'Tˈ+Bkȥ y,]YV@nݳ5|u73.J6m|!GSpu%u62D$^FcWyXb+0S؜9Ƃ=Ȯ-[]$&
-A\9wm\s^8 :wg :mvRp{5Qy>~ysDy`Oac3%-*JIIuiZn#ޥ
-EǻE/SŮz n-CeKNNn=@z= ]+*{]k
-b 0 ^:ls:8,8ek3N L'xiPG<~dP$NBnVlMqjTʱ a1hm;y8#j
-pqa7t|2wXdk_M5-7&5??^GlRB8(Ov ֻ}%7{KD^Fmw3
-בp@44Bi3L"-]Ͷ
-Y3]JӚ~.tQ={[ &I:s~??wKxGiiS4fPh"?xެ)(*y{)P]q&\<
-qeؗB6m¤H[m?cgtZB:IL*>w=3u?q <q cДi-[ vÏ"G; 7N(li;CN;zO/ iɺUMuV7=g󬡂 NxλPt8CI0͢ةj߲Lu~k~n
-,6
-mXDS; (Η$USph"F$ڋqwzudeΜ;}KE'= 2N#5ɭ/[1!Mڥ(ExjXJu^Q&:u<Mnyt
-]Uk*\8#uk#p}q^jq˞՝+SEJFԖTQ4 z̷Ip.;[\)<F3珞? _19(s
-ɰ@ׇ(pYR\du5,%ֽKqI(fϘ/Iˢ
+1521 0 obj
+<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 3602 >>
+stream
+xڭX Xg Y˘ؙص7;mՊBn@~BBn(;*xk^ԵG{hcsV{ss<L|~~?< xS÷ ^jn(ł~ermBss 3y4yǐH`qeiO~} VtggkhC"$-<7م/V&q\ߐKCPQit4LF㥳
+i,.*!V˶IjJ-$lix\ZSH_,AHJIFl Q*4}2Z&J24NIZ*y@,7Gl:ߚa~ &U#U12MT|,@R*F-[#Sh5iwLC~E
+7.kH>&Q(VI͎RݾDD\gK:u JqbkRm#D,61.H x0'H*sAANaAVZA-಻}ggƸXOot;wN/cy6)mЧ1ʃ |Ir%'FMNrhKb
+WQ؆b. p<xNdf)p 8 pğEhxs/a pM<d"%P-kQ4gRchlAv0S-
+z0)Z9KfQ?yΜWC
+U9
+\cp7l[I3jL4|SBdvP7,#
+hƚ.}_TpAkt-aMBhb&
+lFG'8}[3?~y?6y%dHָbdIwb\X;cr(CVf"ԩ'w-_p3ͦm",8Ҩ/ zA5qǷZ:ޞS()
+[2۔mUY
+{d$i :=T&f#շPI`W L ߭07b*(
+7}9oWB
+@Q*' ISBl"|A_z)]NP0 }Ʌ+WH6M䒘BĹ
+/Ż'cmDѴ}7n䣍p#+O> d%sN_hG`n|.o0o?_ $Y
+6=SB\L٭4 h`qچI/ޢ]sZ}1/چ k/OP:tƝik'^Oa(KZ4NBQ%6[\VRq\{Ud'%]H# !_,jb:!,@G{Ua%є+[CCm g:.:; vCL2#'%Y۝'C^4bکQ;(6jsrɦ;Q.
+z~$
+g:0SӓdDBPoLM#lH\,\k9U I7 +=NaNtkiXJE9A]=_9wnZ V8GC^*ex LjK%v3xk-:_LatPyFMPҠ+ɨ$6kVuT XᲺEmu[c]^7ȸx\-Z/ǫM)iz=M
+nq͢
+ު'2Y-Hv\FT36j(1wIxVEjVT͇[pF7㆒tj^{^iRVv&VUPMn`>MC΃KyZ=CH@N1!|fm{|yMq2uPYU! >g=~hiOYIb[,%e%>Zmg
endstream
endobj
-1509 0 obj
-<< /Type /FontDescriptor /FontName /ZKVPJD+LMRoman12-Regular /Flags 4 /FontBBox [ -422 -280 1394 1127 ] /Ascent 1127 /CapHeight 683 /Descent -280 /ItalicAngle 0 /StemV 91 /XHeight 431 /FontFile3 1511 0 R /CIDSet 1510 0 R >>
+1519 0 obj
+<< /Type /FontDescriptor /FontName /TVFCAA+LMRoman12-Regular /Flags 4 /FontBBox [ -422 -280 1394 1127 ] /Ascent 1127 /CapHeight 683 /Descent -280 /ItalicAngle 0 /StemV 91 /XHeight 431 /FontFile3 1521 0 R /CIDSet 1520 0 R >>
endobj
-1512 0 obj
-<< /Filter /FlateDecode /Length 511 >>
+1522 0 obj
+<< /Filter /FlateDecode /Length 503 >>
stream
-xڅj0ڋ@zF-#dRα&YC,پۯ_naЀ?hcg:sTN%`Y]I}%$zkĶԲbȢ_:At.䗋Æz\/d;:wL܄ݿdnMN)*Ă{ιbQ9lK?R(v/(֑K=-6-y锍tiFoJ* oN/d1)tҹ^L`#h7GtB$畠rR<7c)/HQP;QЛ?2N8H--,Š0 xhi)\ְ-E!hQ!%9z8W!.#cAY4 @k:pR9C6zcN:gAKI$:J0%n27Y08zXR=;sf?,;f٠B]D^Nz[{@2P
+xڅ]0+Ei 
+*lZIԁee͛ɏϽ͑u͠J&US5H+TM=VVN2s%Sp_k/Ϸ]S2K|nUd:mE'ιc-E搝8,*)SˎFFLTev]OVo>g\uZݏ^J5C^b2&{kދX`
+]+זXd9ԵEIgF2+Qu<uBBFaq(E%(,E9hRf49z:7!ϖ h+seB6 oASKg]H% ΐ .ZR8 8Q
+_R(K4](N׋ go\bRzj1;SIm۴~k3ņ>6*.
endstream
endobj
-369 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /ZKVPJD+LMRoman12-Regular /DescendantFonts [ 1513 0 R ] /ToUnicode 1512 0 R >>
+373 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /TVFCAA+LMRoman12-Regular /DescendantFonts [ 1523 0 R ] /ToUnicode 1522 0 R >>
endobj
-1513 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /ZKVPJD+LMRoman12-Regular /FontDescriptor 1509 0 R /W 1508 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1523 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /TVFCAA+LMRoman12-Regular /FontDescriptor 1519 0 R /W 1518 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1514 0 obj
+1524 0 obj
[ 28 [ 451 ] 43 [ 418 ] 50 [ 418 ] 66 [ 223 ] 75 [ 745 ] 77 [ 484 ] 96 [ 320 ] 105 [ 340 ] 116 [ 432 ] ]
endobj
-1516 0 obj
+1526 0 obj
<< /Filter /FlateDecode /Length 23 >>
stream
xc```P`Pa`hp
endstream
endobj
-1517 0 obj
+1527 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 1024 >>
stream
xuS}LEnY>G[tao(EQ&r irq[]zZ"[%+56m ^(H$!%1?gw1&{&Kz@DVCU弪zOHVhAʕJnfl
@@ -6986,10 +7144,10 @@ xuS}LEnY>G[tao(EQ&r irq[]zZ"[%+56m ^(
CoV< }>q%N鉴4=Z^d
endstream
endobj
-1515 0 obj
-<< /Type /FontDescriptor /FontName /YLODNZ+LMSans17-Regular /Flags 4 /FontBBox [ -395 -305 1355 1159 ] /Ascent 1159 /CapHeight 694 /Descent -305 /ItalicAngle 0 /StemV 87 /XHeight 431 /FontFile3 1517 0 R /CIDSet 1516 0 R >>
+1525 0 obj
+<< /Type /FontDescriptor /FontName /YLODNZ+LMSans17-Regular /Flags 4 /FontBBox [ -395 -305 1355 1159 ] /Ascent 1159 /CapHeight 694 /Descent -305 /ItalicAngle 0 /StemV 87 /XHeight 431 /FontFile3 1527 0 R /CIDSet 1526 0 R >>
endobj
-1518 0 obj
+1528 0 obj
<< /Filter /FlateDecode /Length 404 >>
stream
x}]K0+6s2
@@ -6997,22 +7155,22 @@ nU(MKf`MJ^ߛv8 xzޓyK<p`|Mkj`*֖(5"GW{xъp
*'Zq(K8thSL=RGđy9K-în90jmr;"aMTeNC2-m7 =
endstream
endobj
-368 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /YLODNZ+LMSans17-Regular /DescendantFonts [ 1519 0 R ] /ToUnicode 1518 0 R >>
+372 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /YLODNZ+LMSans17-Regular /DescendantFonts [ 1529 0 R ] /ToUnicode 1528 0 R >>
endobj
-1519 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /YLODNZ+LMSans17-Regular /FontDescriptor 1515 0 R /W 1514 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1529 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /YLODNZ+LMSans17-Regular /FontDescriptor 1525 0 R /W 1524 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1520 0 obj
+1530 0 obj
[ 28 [ 459 ] 35 [ 511 ] 43 [ 406 ] 50 [ 406 ] 55 [ 276 ] 59 [ 459 ] 63 [ 511 ] 66 [ 250 ] 70 [ 485 ] 72 [ 250 ] 75 [ 772 ] 77 [ 511 ] 81 [ 459 ] 84 [ 511 ] 91 [ 485 ] 96 [ 354 511 359 ] 104 [ 668 354 ] 108 [ 693 511 ] 114 [ 668 ] 126 [ 499 ] ]
endobj
-1522 0 obj
+1532 0 obj
<< /Filter /FlateDecode /Length 24 >>
stream
xc``PT!
endstream
endobj
-1523 0 obj
+1533 0 obj
<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 2974 >>
stream
xڕW TW cKCk룮mu"QD!@$@ !hA DCZPRQrd}j_֭n;=;ֶsrn;?xz"i􊈈US#"d鳂)R}s1=~~CQ4AL)_χLq_B9xy pO|; p ?"⠜1>G[3CCg.ei)9#4iq \*JJ驤(3\LFdjv6 ebHm$cklX$S,+d$UIetVbRLfg&J"&!2UdDj8S)&HR)*knH*;%XH (C#F˗E-\,zQ*WEn)dJ*U*_&";ɲDqX8S 52BDB wp$Y D$"$"`e/M'b D!mg n5jWчQM}
@@ -7026,10 +7184,10 @@ Yfi^="s[o\*+3
(<4F;qy;}L&Sl.tVX̥%fZ;g)}
endstream
endobj
-1521 0 obj
-<< /Type /FontDescriptor /FontName /JSPLLU+LMRoman17-Regular /Flags 4 /FontBBox [ -400 -286 1338 1125 ] /Ascent 1125 /CapHeight 683 /Descent -286 /ItalicAngle 0 /StemV 83 /XHeight 431 /FontFile3 1523 0 R /CIDSet 1522 0 R >>
+1531 0 obj
+<< /Type /FontDescriptor /FontName /JSPLLU+LMRoman17-Regular /Flags 4 /FontBBox [ -400 -286 1338 1125 ] /Ascent 1125 /CapHeight 683 /Descent -286 /ItalicAngle 0 /StemV 83 /XHeight 431 /FontFile3 1533 0 R /CIDSet 1532 0 R >>
endobj
-1524 0 obj
+1534 0 obj
<< /Filter /FlateDecode /Length 474 >>
stream
xڅn0y
@@ -7037,13 +7195,13 @@ xڅn0y
KEDBLQ5!B<'Φ[
endstream
endobj
-367 0 obj
-<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /JSPLLU+LMRoman17-Regular /DescendantFonts [ 1525 0 R ] /ToUnicode 1524 0 R >>
+371 0 obj
+<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /JSPLLU+LMRoman17-Regular /DescendantFonts [ 1535 0 R ] /ToUnicode 1534 0 R >>
endobj
-1525 0 obj
-<< /Type /Font /Subtype /CIDFontType0 /BaseFont /JSPLLU+LMRoman17-Regular /FontDescriptor 1521 0 R /W 1520 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
+1535 0 obj
+<< /Type /Font /Subtype /CIDFontType0 /BaseFont /JSPLLU+LMRoman17-Regular /FontDescriptor 1531 0 R /W 1530 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >>
endobj
-1527 0 obj
+1537 0 obj
<< /Length1 1484 /Length2 8131 /Length3 0 /Filter /FlateDecode /Length 9124 >>
stream
xڍTm6NHt,) ] .²tJH#]J4" HwwS9w3sM\LtZ2`Di
@@ -7085,10 +7243,10 @@ Mt%ŕTMHtwX:n҅O| ҙi,l59k#E~L.pz/'w/
*2;nYK/G-^䙗;%{F!zd[
endstream
endobj
-1526 0 obj
-<< /Type /FontDescriptor /FontName /XEMCLW+CMBX10 /Flags 4 /FontBBox [ -56 -250 1164 750 ] /Ascent 694 /CapHeight 686 /Descent -194 /ItalicAngle 0 /StemV 114 /XHeight 444 /CharSet( /a /b /c /d /one /three /two) /FontFile 1527 0 R >>
+1536 0 obj
+<< /Type /FontDescriptor /FontName /XEMCLW+CMBX10 /Flags 4 /FontBBox [ -56 -250 1164 750 ] /Ascent 694 /CapHeight 686 /Descent -194 /ItalicAngle 0 /StemV 114 /XHeight 444 /CharSet( /a /b /c /d /one /three /two) /FontFile 1537 0 R >>
endobj
-1529 0 obj
+1539 0 obj
<< /Length1 2319 /Length2 9802 /Length3 0 /Filter /FlateDecode /Length 11051 >>
stream
xڍTZ6Lt# 1t*]Jw
@@ -7140,10 +7298,10 @@ l1(fP@weKg}PYۈE[n(#3%[$Bf~΍Nd\zmM0 Y],9Ca0- ub
3H vrH
endstream
endobj
-1528 0 obj
-<< /Type /FontDescriptor /FontName /CFYTDH+CMEX10 /Flags 4 /FontBBox [ -24 -2960 1454 772 ] /Ascent 40 /CapHeight 0 /Descent -600 /ItalicAngle 0 /StemV 47 /XHeight 431 /CharSet( /arrowbt /arrowtp /arrowvertex /braceex /bracehtipdownleft /bracehtipdownright /bracehtipupleft /bracehtipupright /braceleftbigg /braceleftbt /bracelefttp /bracerightbigg /bracerightbt /bracerighttp /bracketleftBig /bracketleftbigg /bracketleftbt /bracketleftex /bracketlefttp /bracketrightBig /bracketrightbigg /bracketrightbt /bracketrightex /bracketrighttp /integraldisplay /parenleftBigg /parenleftbigg /parenleftbt /parenleftex /parenlefttp /parenrightBigg /parenrightbigg /parenrightbt /parenrightex /parenrighttp /vextendsingle) /FontFile 1529 0 R >>
+1538 0 obj
+<< /Type /FontDescriptor /FontName /CFYTDH+CMEX10 /Flags 4 /FontBBox [ -24 -2960 1454 772 ] /Ascent 40 /CapHeight 0 /Descent -600 /ItalicAngle 0 /StemV 47 /XHeight 431 /CharSet( /arrowbt /arrowtp /arrowvertex /braceex /bracehtipdownleft /bracehtipdownright /bracehtipupleft /bracehtipupright /braceleftbigg /braceleftbt /bracelefttp /bracerightbigg /bracerightbt /bracerighttp /bracketleftBig /bracketleftbigg /bracketleftbt /bracketleftex /bracketlefttp /bracketrightBig /bracketrightbigg /bracketrightbt /bracketrightex /bracketrighttp /integraldisplay /parenleftBigg /parenleftbigg /parenleftbt /parenleftex /parenlefttp /parenrightBigg /parenrightbigg /parenrightbt /parenrightex /parenrighttp /vextendsingle) /FontFile 1539 0 R >>
endobj
-1531 0 obj
+1541 0 obj
<< /Length1 1396 /Length2 5867 /Length3 0 /Filter /FlateDecode /Length 6812 >>
stream
xڍTTTk&FPAf@II)!f`:% @B$$DSCR@R@i$;9޵]֞=<]@P"T( X$ TV1
@@ -7176,10 +7334,10 @@ mNվ˘jB5̞cvqc~O\Y)O
ݟ~wb@ ݤmπnsA6&wSlYD]+"@?|9mo]fjǾ{sŸܦ}}rIRBR+譜yScC>gamʁt!eU p/k UQSb3Z Wзo.uY&h) @X`0rEC:s,17v TN
endstream
endobj
-1530 0 obj
-<< /Type /FontDescriptor /FontName /VMQSYC+CMEX7 /Flags 4 /FontBBox [ -12 -2951 1627 770 ] /Ascent 49 /CapHeight 0 /Descent -600 /ItalicAngle 0 /StemV 80 /XHeight 431 /CharSet( /radicalbig) /FontFile 1531 0 R >>
+1540 0 obj
+<< /Type /FontDescriptor /FontName /VMQSYC+CMEX7 /Flags 4 /FontBBox [ -12 -2951 1627 770 ] /Ascent 49 /CapHeight 0 /Descent -600 /ItalicAngle 0 /StemV 80 /XHeight 431 /CharSet( /radicalbig) /FontFile 1541 0 R >>
endobj
-1533 0 obj
+1543 0 obj
<< /Length1 1830 /Length2 11276 /Length3 0 /Filter /FlateDecode /Length 12424 >>
stream
xڍT[-kqS'-- @ )V-VSHhq>zsɞ׷;&9,q
@@ -7222,10 +7380,10 @@ t둭Jc_WP5jbep/wUd22>3}֟Bn9MmGvX-i1@?BDVlt[~_
|UƶO3n0&hWA:fBh;2bVF:u(o7Ȕ?xs4ŹNgX%%F}J34G_1˵-{
endstream
endobj
-1532 0 obj
-<< /Type /FontDescriptor /FontName /CEORQM+CMMI10 /Flags 4 /FontBBox [ -32 -250 1048 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 72 /XHeight 431 /CharSet( /A /B /C /D /I /L /a /b /c /comma /d /e /f /h /i /j /k /l /m /n /p /period /r /triangleright /u /x /y /z) /FontFile 1533 0 R >>
+1542 0 obj
+<< /Type /FontDescriptor /FontName /CEORQM+CMMI10 /Flags 4 /FontBBox [ -32 -250 1048 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 72 /XHeight 431 /CharSet( /A /B /C /D /I /L /a /b /c /comma /d /e /f /h /i /j /k /l /m /n /p /period /r /triangleright /u /x /y /z) /FontFile 1543 0 R >>
endobj
-1535 0 obj
+1545 0 obj
<< /Length1 1415 /Length2 6063 /Length3 0 /Filter /FlateDecode /Length 7021 >>
stream
xڍuTk-Xh
@@ -7255,10 +7413,10 @@ OB+F|72{ .2xcZrL_7-_5Km-܁CEMXo]Y1nfɫt/
bUyLq@jƚm#<՗aVY G<^P4~0-)gV2+ \]"X,p aqה-TW'qY'D#_Ē_w"9FuKK
endstream
endobj
-1534 0 obj
-<< /Type /FontDescriptor /FontName /JZMBET+CMMI12 /Flags 4 /FontBBox [ -31 -250 1026 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 65 /XHeight 431 /CharSet( /A) /FontFile 1535 0 R >>
+1544 0 obj
+<< /Type /FontDescriptor /FontName /JZMBET+CMMI12 /Flags 4 /FontBBox [ -31 -250 1026 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 65 /XHeight 431 /CharSet( /A) /FontFile 1545 0 R >>
endobj
-1537 0 obj
+1547 0 obj
<< /Length1 1451 /Length2 6812 /Length3 0 /Filter /FlateDecode /Length 7785 >>
stream
xڍtTk.)]D`A!ASIiICFwZY羞^Fzm=N[5XspEr*
@@ -7292,10 +7450,10 @@ y[f!i;7W%mIJ ﭓ71v(oT(}6u4/^%O8Ϩu(6g
a e|L1iR]ez[
endstream
endobj
-1536 0 obj
-<< /Type /FontDescriptor /FontName /IUHNPC+CMMI5 /Flags 4 /FontBBox [ 37 -250 1349 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 90 /XHeight 431 /CharSet( /L /i /j /n) /FontFile 1537 0 R >>
+1546 0 obj
+<< /Type /FontDescriptor /FontName /IUHNPC+CMMI5 /Flags 4 /FontBBox [ 37 -250 1349 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 90 /XHeight 431 /CharSet( /L /i /j /n) /FontFile 1547 0 R >>
endobj
-1539 0 obj
+1549 0 obj
<< /Length1 1589 /Length2 8523 /Length3 0 /Filter /FlateDecode /Length 9572 >>
stream
xڍTT.LCH "! 0PC!%)-!!%%ֺwZgγ}}jb&6FiPPx`c`accGաp+ȟft&jW= Iq
@@ -7339,10 +7497,10 @@ Sziq`Rky5zX-
_G)JxУ<g|eBy"7t*<
endstream
endobj
-1538 0 obj
-<< /Type /FontDescriptor /FontName /WUDPRN+CMMI7 /Flags 4 /FontBBox [ -1 -250 1171 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 81 /XHeight 431 /CharSet( /C /L /T /comma /e /i /j /k /n /p /q /star /x) /FontFile 1539 0 R >>
+1548 0 obj
+<< /Type /FontDescriptor /FontName /WUDPRN+CMMI7 /Flags 4 /FontBBox [ -1 -250 1171 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 81 /XHeight 431 /CharSet( /C /L /T /comma /e /i /j /k /n /p /q /star /x) /FontFile 1549 0 R >>
endobj
-1541 0 obj
+1551 0 obj
<< /Length1 1438 /Length2 6548 /Length3 0 /Filter /FlateDecode /Length 7523 >>
stream
xڍt4kׯ"ZD0zF5`0!z[H$DDoD#Ir{޻ֽkϳ=6f]>y{-LA
@@ -7379,10 +7537,10 @@ wt/ְj@884}?em\9P?{6jx)*NaqIuoŀ31&
*INS+$3z t$x g6./)~s_2oϒlAS"F!XzP%i3UsLWsOLۈklm܏f(]zj Y2
endstream
endobj
-1540 0 obj
-<< /Type /FontDescriptor /FontName /TEYYDJ+CMMI8 /Flags 4 /FontBBox [ -24 -250 1110 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 78 /XHeight 431 /CharSet( /i /j /n) /FontFile 1541 0 R >>
+1550 0 obj
+<< /Type /FontDescriptor /FontName /TEYYDJ+CMMI8 /Flags 4 /FontBBox [ -24 -250 1110 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 78 /XHeight 431 /CharSet( /i /j /n) /FontFile 1551 0 R >>
endobj
-1543 0 obj
+1553 0 obj
<< /Length1 1744 /Length2 11235 /Length3 0 /Filter /FlateDecode /Length 12356 >>
stream
xڍP.k;wwwwwg!0 w@pBpw
@@ -7429,10 +7587,10 @@ ttoΎфtč!e웩I]8NG'
o獧{{m1` 8>`9X;;FVqvt$3CY(n3@}"ZWkgcQ͞*EkFY<lc ?v0.+Q2SbMXw`Pi.zN o| Ի)n9`VOi{40ơ
endstream
endobj
-1542 0 obj
-<< /Type /FontDescriptor /FontName /IHIWXH+CMR10 /Flags 4 /FontBBox [ -40 -250 1009 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 69 /XHeight 431 /CharSet( /bracketleft /bracketright /c /eight /equal /five /four /i /n /nine /o /one /parenleft /parenright /plus /s /seven /six /three /two /zero) /FontFile 1543 0 R >>
+1552 0 obj
+<< /Type /FontDescriptor /FontName /IHIWXH+CMR10 /Flags 4 /FontBBox [ -40 -250 1009 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 69 /XHeight 431 /CharSet( /bracketleft /bracketright /c /eight /equal /five /four /i /n /nine /o /one /parenleft /parenright /plus /s /seven /six /three /two /zero) /FontFile 1553 0 R >>
endobj
-1545 0 obj
+1555 0 obj
<< /Length1 1387 /Length2 5977 /Length3 0 /Filter /FlateDecode /Length 6920 >>
stream
xڍtTk- =;J.
@@ -7461,10 +7619,10 @@ gwlk{r"_uTC
3|—Dnf!\Tc jYa_?*s
endstream
endobj
-1544 0 obj
-<< /Type /FontDescriptor /FontName /YFCZGG+CMR12 /Flags 4 /FontBBox [ -34 -251 988 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 65 /XHeight 431 /CharSet( /zero) /FontFile 1545 0 R >>
+1554 0 obj
+<< /Type /FontDescriptor /FontName /YFCZGG+CMR12 /Flags 4 /FontBBox [ -34 -251 988 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 65 /XHeight 431 /CharSet( /zero) /FontFile 1555 0 R >>
endobj
-1547 0 obj
+1557 0 obj
<< /Length1 1447 /Length2 6556 /Length3 0 /Filter /FlateDecode /Length 7538 >>
stream
xڍVT\%Kph%CbfI%iP@@$nQJ.7zoZ3{kؙu a '<
@@ -7499,10 +7657,10 @@ eO:[1bo_9ͣh[puK}ks 7\GU0Ǟ6Г?ﱿWy$4kw}zK
2h&ji/,
endstream
endobj
-1546 0 obj
-<< /Type /FontDescriptor /FontName /CPMJUS+CMR5 /Flags 4 /FontBBox [ -10 -250 1304 750 ] /Ascent 694 /CapHeight 680 /Descent -194 /ItalicAngle 0 /StemV 89 /XHeight 431 /CharSet( /four /one /plus /three /two) /FontFile 1547 0 R >>
+1556 0 obj
+<< /Type /FontDescriptor /FontName /CPMJUS+CMR5 /Flags 4 /FontBBox [ -10 -250 1304 750 ] /Ascent 694 /CapHeight 680 /Descent -194 /ItalicAngle 0 /StemV 89 /XHeight 431 /CharSet( /four /one /plus /three /two) /FontFile 1557 0 R >>
endobj
-1549 0 obj
+1559 0 obj
<< /Length1 1595 /Length2 7817 /Length3 0 /Filter /FlateDecode /Length 8871 >>
stream
xڍT6t
@@ -7540,10 +7698,10 @@ Y<Qj8e^z 7r-\
.+g!~ŜI #PAiМ'WXϟf'_}xbK$yv[IoRʢTYiGU$ݡsZ,U+hQ
endstream
endobj
-1548 0 obj
-<< /Type /FontDescriptor /FontName /IZMGNT+CMR7 /Flags 4 /FontBBox [ -27 -250 1122 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 79 /XHeight 431 /CharSet( /eight /five /four /nine /one /parenleft /parenright /plus /seven /six /three /two /zero) /FontFile 1549 0 R >>
+1558 0 obj
+<< /Type /FontDescriptor /FontName /IZMGNT+CMR7 /Flags 4 /FontBBox [ -27 -250 1122 750 ] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 79 /XHeight 431 /CharSet( /eight /five /four /nine /one /parenleft /parenright /plus /seven /six /three /two /zero) /FontFile 1559 0 R >>
endobj
-1551 0 obj
+1561 0 obj
<< /Length1 1500 /Length2 6516 /Length3 0 /Filter /FlateDecode /Length 7522 >>
stream
xڍxTڲ6"J5 &*IMj $ґ ޕ*IU@tAs=zoe${f+@PU$
@@ -7586,10 +7744,10 @@ BH'渆m|{m/{.xoH2nE -.w}y'*7.^WeNߚFsU%ϏS
;J!ujE%msCzzFeq0x~ǠAJ/]j z8{FqKeI*1HoA(N{&dY __޴T'EQz
endstream
endobj
-1550 0 obj
-<< /Type /FontDescriptor /FontName /VGMPAA+CMSY10 /Flags 4 /FontBBox [ -29 -960 1116 775 ] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 40 /XHeight 431 /CharSet( /angbracketleft /angbracketright /arrowleft /minus /multiply) /FontFile 1551 0 R >>
+1560 0 obj
+<< /Type /FontDescriptor /FontName /VGMPAA+CMSY10 /Flags 4 /FontBBox [ -29 -960 1116 775 ] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 40 /XHeight 431 /CharSet( /angbracketleft /angbracketright /arrowleft /minus /multiply) /FontFile 1561 0 R >>
endobj
-1553 0 obj
+1563 0 obj
<< /Length1 1414 /Length2 6167 /Length3 0 /Filter /FlateDecode /Length 7134 >>
stream
xڍvTTk6(HK7FBADjc`bP:A@:SBRZ@:T@ios5kus=uy8!Jp-BeCS
@@ -7620,10 +7778,10 @@ n<Ȧ
.7z ^XEi[S<p15*;Aջ<d*+w]`ӷ3I4e:dz펢4)AwTiw||/KKj-Tf bS(Tq#z%I`uk9K^e[ZwʣzI|U|˄&eVJ6Sgߪa^4ǵ+ wN\EVةzew`wؓ/:71ἠP@᣸Ft7^HXfM[vU:x'?ibi ZM}&Od@9fcHMFKlpUe]:AE)(xȘkmD@~ F0ANǞEiXQRm9l%i;mFo1j 1^{WG 7HO ]ȉ")UjzlL?o
endstream
endobj
-1552 0 obj
-<< /Type /FontDescriptor /FontName /UZBPXA+CMSY5 /Flags 4 /FontBBox [ 21 -944 1448 791 ] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 56 /XHeight 431 /CharSet( /arrowleft /minus) /FontFile 1553 0 R >>
+1562 0 obj
+<< /Type /FontDescriptor /FontName /UZBPXA+CMSY5 /Flags 4 /FontBBox [ 21 -944 1448 791 ] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 56 /XHeight 431 /CharSet( /arrowleft /minus) /FontFile 1563 0 R >>
endobj
-1555 0 obj
+1565 0 obj
<< /Length1 1435 /Length2 6179 /Length3 0 /Filter /FlateDecode /Length 7153 >>
stream
xڍtT[.(0 ! ҂030 ݍ%* R-Hw7"|ugYxeP%
@@ -7652,326 +7810,329 @@ d"`tUe>!%_lkhCgKOnW~yң@᪘+>1#1VGp.ArrfSb
;jjIZxٱ1INzfݪy1M3"}~]\耆n>s5RQܶ nzp~Fqkqܲ='8~*}
endstream
endobj
-1554 0 obj
-<< /Type /FontDescriptor /FontName /QYJPQA+CMSY7 /Flags 4 /FontBBox [ -15 -951 1251 782 ] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 49 /XHeight 431 /CharSet( /arrowleft /arrowup /minus) /FontFile 1555 0 R >>
+1564 0 obj
+<< /Type /FontDescriptor /FontName /QYJPQA+CMSY7 /Flags 4 /FontBBox [ -15 -951 1251 782 ] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 49 /XHeight 431 /CharSet( /arrowleft /arrowup /minus) /FontFile 1565 0 R >>
endobj
-754 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /XEMCLW+CMBX10 /FontDescriptor 1526 0 R /FirstChar 49 /LastChar 100 /Widths 1350 0 R >>
+762 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /XEMCLW+CMBX10 /FontDescriptor 1536 0 R /FirstChar 49 /LastChar 100 /Widths 1360 0 R >>
endobj
-375 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /CFYTDH+CMEX10 /FontDescriptor 1528 0 R /FirstChar 12 /LastChar 125 /Widths 1477 0 R >>
+379 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /CFYTDH+CMEX10 /FontDescriptor 1538 0 R /FirstChar 12 /LastChar 125 /Widths 1487 0 R >>
endobj
-410 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /VMQSYC+CMEX7 /FontDescriptor 1530 0 R /FirstChar 112 /LastChar 112 /Widths 1385 0 R >>
+414 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /VMQSYC+CMEX7 /FontDescriptor 1540 0 R /FirstChar 112 /LastChar 112 /Widths 1395 0 R >>
endobj
-379 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /CEORQM+CMMI10 /FontDescriptor 1532 0 R /FirstChar 46 /LastChar 122 /Widths 1473 0 R >>
+383 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /CEORQM+CMMI10 /FontDescriptor 1542 0 R /FirstChar 46 /LastChar 122 /Widths 1483 0 R >>
endobj
-423 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /JZMBET+CMMI12 /FontDescriptor 1534 0 R /FirstChar 65 /LastChar 65 /Widths 1378 0 R >>
+427 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /JZMBET+CMMI12 /FontDescriptor 1544 0 R /FirstChar 65 /LastChar 65 /Widths 1388 0 R >>
endobj
-378 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /IUHNPC+CMMI5 /FontDescriptor 1536 0 R /FirstChar 76 /LastChar 110 /Widths 1474 0 R >>
+382 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /IUHNPC+CMMI5 /FontDescriptor 1546 0 R /FirstChar 76 /LastChar 110 /Widths 1484 0 R >>
endobj
-376 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /WUDPRN+CMMI7 /FontDescriptor 1538 0 R /FirstChar 59 /LastChar 120 /Widths 1476 0 R >>
+380 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /WUDPRN+CMMI7 /FontDescriptor 1548 0 R /FirstChar 59 /LastChar 120 /Widths 1486 0 R >>
endobj
-490 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /TEYYDJ+CMMI8 /FontDescriptor 1540 0 R /FirstChar 105 /LastChar 110 /Widths 1371 0 R >>
+489 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /TEYYDJ+CMMI8 /FontDescriptor 1550 0 R /FirstChar 105 /LastChar 110 /Widths 1381 0 R >>
endobj
-382 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /IHIWXH+CMR10 /FontDescriptor 1542 0 R /FirstChar 40 /LastChar 115 /Widths 1465 0 R >>
+386 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /IHIWXH+CMR10 /FontDescriptor 1552 0 R /FirstChar 40 /LastChar 115 /Widths 1475 0 R >>
endobj
-932 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /YFCZGG+CMR12 /FontDescriptor 1544 0 R /FirstChar 48 /LastChar 48 /Widths 1337 0 R >>
+940 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /YFCZGG+CMR12 /FontDescriptor 1554 0 R /FirstChar 48 /LastChar 48 /Widths 1347 0 R >>
endobj
-377 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /CPMJUS+CMR5 /FontDescriptor 1546 0 R /FirstChar 43 /LastChar 52 /Widths 1475 0 R >>
+381 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /CPMJUS+CMR5 /FontDescriptor 1556 0 R /FirstChar 43 /LastChar 52 /Widths 1485 0 R >>
endobj
-380 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /IZMGNT+CMR7 /FontDescriptor 1548 0 R /FirstChar 40 /LastChar 57 /Widths 1472 0 R >>
+384 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /IZMGNT+CMR7 /FontDescriptor 1558 0 R /FirstChar 40 /LastChar 57 /Widths 1482 0 R >>
endobj
-404 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /VGMPAA+CMSY10 /FontDescriptor 1550 0 R /FirstChar 0 /LastChar 105 /Widths 1386 0 R >>
+408 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /VGMPAA+CMSY10 /FontDescriptor 1560 0 R /FirstChar 0 /LastChar 105 /Widths 1396 0 R >>
endobj
-743 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /UZBPXA+CMSY5 /FontDescriptor 1552 0 R /FirstChar 0 /LastChar 32 /Widths 1351 0 R >>
+751 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /UZBPXA+CMSY5 /FontDescriptor 1562 0 R /FirstChar 0 /LastChar 32 /Widths 1361 0 R >>
endobj
-645 0 obj
-<< /Type /Font /Subtype /Type1 /BaseFont /QYJPQA+CMSY7 /FontDescriptor 1554 0 R /FirstChar 0 /LastChar 34 /Widths 1358 0 R >>
+653 0 obj
+<< /Type /Font /Subtype /Type1 /BaseFont /QYJPQA+CMSY7 /FontDescriptor 1564 0 R /FirstChar 0 /LastChar 34 /Widths 1368 0 R >>
endobj
-394 0 obj
-<< /Type /Pages /Parent 1556 0 R /Count 10 /Kids [ 361 0 R 399 0 R 407 0 R 420 0 R 437 0 R 446 0 R 451 0 R 455 0 R 459 0 R 466 0 R ] >>
+398 0 obj
+<< /Type /Pages /Parent 1566 0 R /Count 10 /Kids [ 365 0 R 403 0 R 411 0 R 424 0 R 441 0 R 450 0 R 455 0 R 459 0 R 463 0 R 470 0 R ] >>
endobj
-480 0 obj
-<< /Type /Pages /Parent 1556 0 R /Count 10 /Kids [ 477 0 R 487 0 R 497 0 R 502 0 R 507 0 R 512 0 R 520 0 R 527 0 R 533 0 R 540 0 R ] >>
+479 0 obj
+<< /Type /Pages /Parent 1566 0 R /Count 10 /Kids [ 475 0 R 486 0 R 498 0 R 505 0 R 510 0 R 515 0 R 520 0 R 528 0 R 535 0 R 541 0 R ] >>
endobj
-548 0 obj
-<< /Type /Pages /Parent 1556 0 R /Count 10 /Kids [ 545 0 R 552 0 R 560 0 R 566 0 R 571 0 R 580 0 R 589 0 R 596 0 R 603 0 R 608 0 R ] >>
+551 0 obj
+<< /Type /Pages /Parent 1566 0 R /Count 10 /Kids [ 548 0 R 554 0 R 560 0 R 568 0 R 574 0 R 579 0 R 588 0 R 597 0 R 604 0 R 611 0 R ] >>
endobj
-618 0 obj
-<< /Type /Pages /Parent 1556 0 R /Count 10 /Kids [ 615 0 R 623 0 R 630 0 R 642 0 R 650 0 R 657 0 R 665 0 R 671 0 R 682 0 R 689 0 R ] >>
+619 0 obj
+<< /Type /Pages /Parent 1566 0 R /Count 10 /Kids [ 616 0 R 624 0 R 631 0 R 638 0 R 650 0 R 658 0 R 665 0 R 673 0 R 679 0 R 690 0 R ] >>
endobj
-705 0 obj
-<< /Type /Pages /Parent 1556 0 R /Count 10 /Kids [ 702 0 R 708 0 R 720 0 R 730 0 R 735 0 R 740 0 R 751 0 R 760 0 R 769 0 R 777 0 R ] >>
+706 0 obj
+<< /Type /Pages /Parent 1566 0 R /Count 10 /Kids [ 698 0 R 711 0 R 716 0 R 728 0 R 738 0 R 743 0 R 748 0 R 759 0 R 768 0 R 777 0 R ] >>
endobj
-786 0 obj
-<< /Type /Pages /Parent 1556 0 R /Count 10 /Kids [ 783 0 R 790 0 R 797 0 R 803 0 R 811 0 R 820 0 R 835 0 R 842 0 R 847 0 R 853 0 R ] >>
+788 0 obj
+<< /Type /Pages /Parent 1566 0 R /Count 10 /Kids [ 785 0 R 792 0 R 798 0 R 804 0 R 811 0 R 819 0 R 828 0 R 843 0 R 850 0 R 855 0 R ] >>
endobj
-860 0 obj
-<< /Type /Pages /Parent 1556 0 R /Count 10 /Kids [ 857 0 R 862 0 R 866 0 R 870 0 R 874 0 R 879 0 R 884 0 R 888 0 R 892 0 R 896 0 R ] >>
+864 0 obj
+<< /Type /Pages /Parent 1566 0 R /Count 10 /Kids [ 861 0 R 866 0 R 870 0 R 874 0 R 878 0 R 882 0 R 887 0 R 892 0 R 896 0 R 900 0 R ] >>
endobj
-903 0 obj
-<< /Type /Pages /Parent 1556 0 R /Count 10 /Kids [ 900 0 R 905 0 R 909 0 R 913 0 R 917 0 R 921 0 R 925 0 R 929 0 R 934 0 R 1059 0 R ] >>
+907 0 obj
+<< /Type /Pages /Parent 1566 0 R /Count 10 /Kids [ 904 0 R 909 0 R 913 0 R 917 0 R 921 0 R 925 0 R 929 0 R 933 0 R 937 0 R 942 0 R ] >>
endobj
-1180 0 obj
-<< /Type /Pages /Parent 1556 0 R /Count 4 /Kids [ 1177 0 R 1234 0 R 1286 0 R 1333 0 R ] >>
+1065 0 obj
+<< /Type /Pages /Parent 1566 0 R /Count 5 /Kids [ 1062 0 R 1166 0 R 1243 0 R 1295 0 R 1343 0 R ] >>
endobj
-1556 0 obj
-<< /Type /Pages /Count 84 /Kids [ 394 0 R 480 0 R 548 0 R 618 0 R 705 0 R 786 0 R 860 0 R 903 0 R 1180 0 R ] >>
+1566 0 obj
+<< /Type /Pages /Count 85 /Kids [ 398 0 R 479 0 R 551 0 R 619 0 R 706 0 R 788 0 R 864 0 R 907 0 R 1065 0 R ] >>
endobj
-1557 0 obj
-<< /Type /Outlines /First 6 0 R /Last 358 0 R /Count 20 >>
+1567 0 obj
+<< /Type /Outlines /First 6 0 R /Last 362 0 R /Count 20 >>
+endobj
+362 0 obj
+<< /Title 363 0 R /A 360 0 R /Parent 1567 0 R /Prev 358 0 R >>
endobj
358 0 obj
-<< /Title 359 0 R /A 356 0 R /Parent 1557 0 R /Prev 354 0 R >>
+<< /Title 359 0 R /A 356 0 R /Parent 1567 0 R /Prev 314 0 R /Next 362 0 R >>
endobj
354 0 obj
-<< /Title 355 0 R /A 352 0 R /Parent 1557 0 R /Prev 310 0 R /Next 358 0 R >>
+<< /Title 355 0 R /A 352 0 R /Parent 314 0 R /Prev 350 0 R >>
endobj
350 0 obj
-<< /Title 351 0 R /A 348 0 R /Parent 310 0 R /Prev 346 0 R >>
+<< /Title 351 0 R /A 348 0 R /Parent 314 0 R /Prev 346 0 R /Next 354 0 R >>
endobj
346 0 obj
-<< /Title 347 0 R /A 344 0 R /Parent 310 0 R /Prev 342 0 R /Next 350 0 R >>
+<< /Title 347 0 R /A 344 0 R /Parent 314 0 R /Prev 342 0 R /Next 350 0 R >>
endobj
342 0 obj
-<< /Title 343 0 R /A 340 0 R /Parent 310 0 R /Prev 338 0 R /Next 346 0 R >>
+<< /Title 343 0 R /A 340 0 R /Parent 314 0 R /Prev 338 0 R /Next 346 0 R >>
endobj
338 0 obj
-<< /Title 339 0 R /A 336 0 R /Parent 310 0 R /Prev 334 0 R /Next 342 0 R >>
+<< /Title 339 0 R /A 336 0 R /Parent 314 0 R /Prev 334 0 R /Next 342 0 R >>
endobj
334 0 obj
-<< /Title 335 0 R /A 332 0 R /Parent 310 0 R /Prev 330 0 R /Next 338 0 R >>
+<< /Title 335 0 R /A 332 0 R /Parent 314 0 R /Prev 330 0 R /Next 338 0 R >>
endobj
330 0 obj
-<< /Title 331 0 R /A 328 0 R /Parent 310 0 R /Prev 326 0 R /Next 334 0 R >>
+<< /Title 331 0 R /A 328 0 R /Parent 314 0 R /Prev 326 0 R /Next 334 0 R >>
endobj
326 0 obj
-<< /Title 327 0 R /A 324 0 R /Parent 310 0 R /Prev 322 0 R /Next 330 0 R >>
+<< /Title 327 0 R /A 324 0 R /Parent 314 0 R /Prev 322 0 R /Next 330 0 R >>
endobj
322 0 obj
-<< /Title 323 0 R /A 320 0 R /Parent 310 0 R /Prev 318 0 R /Next 326 0 R >>
+<< /Title 323 0 R /A 320 0 R /Parent 314 0 R /Prev 318 0 R /Next 326 0 R >>
endobj
318 0 obj
-<< /Title 319 0 R /A 316 0 R /Parent 310 0 R /Prev 314 0 R /Next 322 0 R >>
+<< /Title 319 0 R /A 316 0 R /Parent 314 0 R /Next 322 0 R >>
endobj
314 0 obj
-<< /Title 315 0 R /A 312 0 R /Parent 310 0 R /Next 318 0 R >>
+<< /Title 315 0 R /A 312 0 R /Parent 1567 0 R /Prev 294 0 R /Next 358 0 R /First 318 0 R /Last 354 0 R /Count -10 >>
endobj
310 0 obj
-<< /Title 311 0 R /A 308 0 R /Parent 1557 0 R /Prev 290 0 R /Next 354 0 R /First 314 0 R /Last 350 0 R /Count -10 >>
+<< /Title 311 0 R /A 308 0 R /Parent 294 0 R /Prev 306 0 R >>
endobj
306 0 obj
-<< /Title 307 0 R /A 304 0 R /Parent 290 0 R /Prev 302 0 R >>
+<< /Title 307 0 R /A 304 0 R /Parent 294 0 R /Prev 302 0 R /Next 310 0 R >>
endobj
302 0 obj
-<< /Title 303 0 R /A 300 0 R /Parent 290 0 R /Prev 298 0 R /Next 306 0 R >>
+<< /Title 303 0 R /A 300 0 R /Parent 294 0 R /Prev 298 0 R /Next 306 0 R >>
endobj
298 0 obj
-<< /Title 299 0 R /A 296 0 R /Parent 290 0 R /Prev 294 0 R /Next 302 0 R >>
+<< /Title 299 0 R /A 296 0 R /Parent 294 0 R /Next 302 0 R >>
endobj
294 0 obj
-<< /Title 295 0 R /A 292 0 R /Parent 290 0 R /Next 298 0 R >>
+<< /Title 295 0 R /A 292 0 R /Parent 1567 0 R /Prev 290 0 R /Next 314 0 R /First 298 0 R /Last 310 0 R /Count -4 >>
endobj
290 0 obj
-<< /Title 291 0 R /A 288 0 R /Parent 1557 0 R /Prev 286 0 R /Next 310 0 R /First 294 0 R /Last 306 0 R /Count -4 >>
+<< /Title 291 0 R /A 288 0 R /Parent 1567 0 R /Prev 262 0 R /Next 294 0 R >>
endobj
286 0 obj
-<< /Title 287 0 R /A 284 0 R /Parent 1557 0 R /Prev 258 0 R /Next 290 0 R >>
+<< /Title 287 0 R /A 284 0 R /Parent 262 0 R /Prev 282 0 R >>
endobj
282 0 obj
-<< /Title 283 0 R /A 280 0 R /Parent 258 0 R /Prev 278 0 R >>
+<< /Title 283 0 R /A 280 0 R /Parent 262 0 R /Prev 278 0 R /Next 286 0 R >>
endobj
278 0 obj
-<< /Title 279 0 R /A 276 0 R /Parent 258 0 R /Prev 274 0 R /Next 282 0 R >>
+<< /Title 279 0 R /A 276 0 R /Parent 262 0 R /Prev 266 0 R /Next 282 0 R >>
endobj
274 0 obj
-<< /Title 275 0 R /A 272 0 R /Parent 258 0 R /Prev 262 0 R /Next 278 0 R >>
+<< /Title 275 0 R /A 272 0 R /Parent 266 0 R /Prev 270 0 R >>
endobj
270 0 obj
-<< /Title 271 0 R /A 268 0 R /Parent 262 0 R /Prev 266 0 R >>
+<< /Title 271 0 R /A 268 0 R /Parent 266 0 R /Next 274 0 R >>
endobj
266 0 obj
-<< /Title 267 0 R /A 264 0 R /Parent 262 0 R /Next 270 0 R >>
+<< /Title 267 0 R /A 264 0 R /Parent 262 0 R /Next 278 0 R /First 270 0 R /Last 274 0 R /Count -2 >>
endobj
262 0 obj
-<< /Title 263 0 R /A 260 0 R /Parent 258 0 R /Next 274 0 R /First 266 0 R /Last 270 0 R /Count -2 >>
+<< /Title 263 0 R /A 260 0 R /Parent 1567 0 R /Prev 214 0 R /Next 290 0 R /First 266 0 R /Last 286 0 R /Count -4 >>
endobj
258 0 obj
-<< /Title 259 0 R /A 256 0 R /Parent 1557 0 R /Prev 210 0 R /Next 286 0 R /First 262 0 R /Last 282 0 R /Count -4 >>
+<< /Title 259 0 R /A 256 0 R /Parent 214 0 R /Prev 254 0 R >>
endobj
254 0 obj
-<< /Title 255 0 R /A 252 0 R /Parent 210 0 R /Prev 250 0 R >>
+<< /Title 255 0 R /A 252 0 R /Parent 214 0 R /Prev 250 0 R /Next 258 0 R >>
endobj
250 0 obj
-<< /Title 251 0 R /A 248 0 R /Parent 210 0 R /Prev 246 0 R /Next 254 0 R >>
+<< /Title 251 0 R /A 248 0 R /Parent 214 0 R /Prev 246 0 R /Next 254 0 R >>
endobj
246 0 obj
-<< /Title 247 0 R /A 244 0 R /Parent 210 0 R /Prev 242 0 R /Next 250 0 R >>
+<< /Title 247 0 R /A 244 0 R /Parent 214 0 R /Prev 242 0 R /Next 250 0 R >>
endobj
242 0 obj
-<< /Title 243 0 R /A 240 0 R /Parent 210 0 R /Prev 238 0 R /Next 246 0 R >>
+<< /Title 243 0 R /A 240 0 R /Parent 214 0 R /Prev 238 0 R /Next 246 0 R >>
endobj
238 0 obj
-<< /Title 239 0 R /A 236 0 R /Parent 210 0 R /Prev 234 0 R /Next 242 0 R >>
+<< /Title 239 0 R /A 236 0 R /Parent 214 0 R /Prev 234 0 R /Next 242 0 R >>
endobj
234 0 obj
-<< /Title 235 0 R /A 232 0 R /Parent 210 0 R /Prev 230 0 R /Next 238 0 R >>
+<< /Title 235 0 R /A 232 0 R /Parent 214 0 R /Prev 230 0 R /Next 238 0 R >>
endobj
230 0 obj
-<< /Title 231 0 R /A 228 0 R /Parent 210 0 R /Prev 226 0 R /Next 234 0 R >>
+<< /Title 231 0 R /A 228 0 R /Parent 214 0 R /Prev 226 0 R /Next 234 0 R >>
endobj
226 0 obj
-<< /Title 227 0 R /A 224 0 R /Parent 210 0 R /Prev 222 0 R /Next 230 0 R >>
+<< /Title 227 0 R /A 224 0 R /Parent 214 0 R /Prev 222 0 R /Next 230 0 R >>
endobj
222 0 obj
-<< /Title 223 0 R /A 220 0 R /Parent 210 0 R /Prev 218 0 R /Next 226 0 R >>
+<< /Title 223 0 R /A 220 0 R /Parent 214 0 R /Prev 218 0 R /Next 226 0 R >>
endobj
218 0 obj
-<< /Title 219 0 R /A 216 0 R /Parent 210 0 R /Prev 214 0 R /Next 222 0 R >>
+<< /Title 219 0 R /A 216 0 R /Parent 214 0 R /Next 222 0 R >>
endobj
214 0 obj
-<< /Title 215 0 R /A 212 0 R /Parent 210 0 R /Next 218 0 R >>
+<< /Title 215 0 R /A 212 0 R /Parent 1567 0 R /Prev 190 0 R /Next 262 0 R /First 218 0 R /Last 258 0 R /Count -11 >>
endobj
210 0 obj
-<< /Title 211 0 R /A 208 0 R /Parent 1557 0 R /Prev 186 0 R /Next 258 0 R /First 214 0 R /Last 254 0 R /Count -11 >>
+<< /Title 211 0 R /A 208 0 R /Parent 190 0 R /Prev 206 0 R >>
endobj
206 0 obj
-<< /Title 207 0 R /A 204 0 R /Parent 186 0 R /Prev 202 0 R >>
+<< /Title 207 0 R /A 204 0 R /Parent 190 0 R /Prev 202 0 R /Next 210 0 R >>
endobj
202 0 obj
-<< /Title 203 0 R /A 200 0 R /Parent 186 0 R /Prev 198 0 R /Next 206 0 R >>
+<< /Title 203 0 R /A 200 0 R /Parent 190 0 R /Prev 198 0 R /Next 206 0 R >>
endobj
198 0 obj
-<< /Title 199 0 R /A 196 0 R /Parent 186 0 R /Prev 194 0 R /Next 202 0 R >>
+<< /Title 199 0 R /A 196 0 R /Parent 190 0 R /Prev 194 0 R /Next 202 0 R >>
endobj
194 0 obj
-<< /Title 195 0 R /A 192 0 R /Parent 186 0 R /Prev 190 0 R /Next 198 0 R >>
+<< /Title 195 0 R /A 192 0 R /Parent 190 0 R /Next 198 0 R >>
endobj
190 0 obj
-<< /Title 191 0 R /A 188 0 R /Parent 186 0 R /Next 194 0 R >>
+<< /Title 191 0 R /A 188 0 R /Parent 1567 0 R /Prev 170 0 R /Next 214 0 R /First 194 0 R /Last 210 0 R /Count -5 >>
endobj
186 0 obj
-<< /Title 187 0 R /A 184 0 R /Parent 1557 0 R /Prev 166 0 R /Next 210 0 R /First 190 0 R /Last 206 0 R /Count -5 >>
+<< /Title 187 0 R /A 184 0 R /Parent 170 0 R /Prev 182 0 R >>
endobj
182 0 obj
-<< /Title 183 0 R /A 180 0 R /Parent 166 0 R /Prev 178 0 R >>
+<< /Title 183 0 R /A 180 0 R /Parent 170 0 R /Prev 178 0 R /Next 186 0 R >>
endobj
178 0 obj
-<< /Title 179 0 R /A 176 0 R /Parent 166 0 R /Prev 174 0 R /Next 182 0 R >>
+<< /Title 179 0 R /A 176 0 R /Parent 170 0 R /Prev 174 0 R /Next 182 0 R >>
endobj
174 0 obj
-<< /Title 175 0 R /A 172 0 R /Parent 166 0 R /Prev 170 0 R /Next 178 0 R >>
+<< /Title 175 0 R /A 172 0 R /Parent 170 0 R /Next 178 0 R >>
endobj
170 0 obj
-<< /Title 171 0 R /A 168 0 R /Parent 166 0 R /Next 174 0 R >>
+<< /Title 171 0 R /A 168 0 R /Parent 1567 0 R /Prev 166 0 R /Next 190 0 R /First 174 0 R /Last 186 0 R /Count -4 >>
endobj
166 0 obj
-<< /Title 167 0 R /A 164 0 R /Parent 1557 0 R /Prev 162 0 R /Next 186 0 R /First 170 0 R /Last 182 0 R /Count -4 >>
+<< /Title 167 0 R /A 164 0 R /Parent 1567 0 R /Prev 138 0 R /Next 170 0 R >>
endobj
162 0 obj
-<< /Title 163 0 R /A 160 0 R /Parent 1557 0 R /Prev 134 0 R /Next 166 0 R >>
+<< /Title 163 0 R /A 160 0 R /Parent 138 0 R /Prev 158 0 R >>
endobj
158 0 obj
-<< /Title 159 0 R /A 156 0 R /Parent 134 0 R /Prev 154 0 R >>
+<< /Title 159 0 R /A 156 0 R /Parent 138 0 R /Prev 154 0 R /Next 162 0 R >>
endobj
154 0 obj
-<< /Title 155 0 R /A 152 0 R /Parent 134 0 R /Prev 150 0 R /Next 158 0 R >>
+<< /Title 155 0 R /A 152 0 R /Parent 138 0 R /Prev 150 0 R /Next 158 0 R >>
endobj
150 0 obj
-<< /Title 151 0 R /A 148 0 R /Parent 134 0 R /Prev 146 0 R /Next 154 0 R >>
+<< /Title 151 0 R /A 148 0 R /Parent 138 0 R /Prev 146 0 R /Next 154 0 R >>
endobj
146 0 obj
-<< /Title 147 0 R /A 144 0 R /Parent 134 0 R /Prev 142 0 R /Next 150 0 R >>
+<< /Title 147 0 R /A 144 0 R /Parent 138 0 R /Prev 142 0 R /Next 150 0 R >>
endobj
142 0 obj
-<< /Title 143 0 R /A 140 0 R /Parent 134 0 R /Prev 138 0 R /Next 146 0 R >>
+<< /Title 143 0 R /A 140 0 R /Parent 138 0 R /Next 146 0 R >>
endobj
138 0 obj
-<< /Title 139 0 R /A 136 0 R /Parent 134 0 R /Next 142 0 R >>
+<< /Title 139 0 R /A 136 0 R /Parent 1567 0 R /Prev 134 0 R /Next 166 0 R /First 142 0 R /Last 162 0 R /Count -6 >>
endobj
134 0 obj
-<< /Title 135 0 R /A 132 0 R /Parent 1557 0 R /Prev 130 0 R /Next 162 0 R /First 138 0 R /Last 158 0 R /Count -6 >>
+<< /Title 135 0 R /A 132 0 R /Parent 1567 0 R /Prev 118 0 R /Next 138 0 R >>
endobj
130 0 obj
-<< /Title 131 0 R /A 128 0 R /Parent 1557 0 R /Prev 114 0 R /Next 134 0 R >>
+<< /Title 131 0 R /A 128 0 R /Parent 118 0 R /Prev 126 0 R >>
endobj
126 0 obj
-<< /Title 127 0 R /A 124 0 R /Parent 114 0 R /Prev 122 0 R >>
+<< /Title 127 0 R /A 124 0 R /Parent 118 0 R /Prev 122 0 R /Next 130 0 R >>
endobj
122 0 obj
-<< /Title 123 0 R /A 120 0 R /Parent 114 0 R /Prev 118 0 R /Next 126 0 R >>
+<< /Title 123 0 R /A 120 0 R /Parent 118 0 R /Next 126 0 R >>
endobj
118 0 obj
-<< /Title 119 0 R /A 116 0 R /Parent 114 0 R /Next 122 0 R >>
+<< /Title 119 0 R /A 116 0 R /Parent 1567 0 R /Prev 114 0 R /Next 134 0 R /First 122 0 R /Last 130 0 R /Count -3 >>
endobj
114 0 obj
-<< /Title 115 0 R /A 112 0 R /Parent 1557 0 R /Prev 110 0 R /Next 130 0 R /First 118 0 R /Last 126 0 R /Count -3 >>
+<< /Title 115 0 R /A 112 0 R /Parent 1567 0 R /Prev 94 0 R /Next 118 0 R >>
endobj
110 0 obj
-<< /Title 111 0 R /A 108 0 R /Parent 1557 0 R /Prev 90 0 R /Next 114 0 R >>
+<< /Title 111 0 R /A 108 0 R /Parent 94 0 R /Prev 106 0 R >>
endobj
106 0 obj
-<< /Title 107 0 R /A 104 0 R /Parent 90 0 R /Prev 102 0 R >>
+<< /Title 107 0 R /A 104 0 R /Parent 94 0 R /Prev 102 0 R /Next 110 0 R >>
endobj
102 0 obj
-<< /Title 103 0 R /A 100 0 R /Parent 90 0 R /Prev 98 0 R /Next 106 0 R >>
+<< /Title 103 0 R /A 100 0 R /Parent 94 0 R /Prev 98 0 R /Next 106 0 R >>
endobj
98 0 obj
-<< /Title 99 0 R /A 96 0 R /Parent 90 0 R /Prev 94 0 R /Next 102 0 R >>
+<< /Title 99 0 R /A 96 0 R /Parent 94 0 R /Next 102 0 R >>
endobj
94 0 obj
-<< /Title 95 0 R /A 92 0 R /Parent 90 0 R /Next 98 0 R >>
+<< /Title 95 0 R /A 92 0 R /Parent 1567 0 R /Prev 50 0 R /Next 114 0 R /First 98 0 R /Last 110 0 R /Count -4 >>
endobj
90 0 obj
-<< /Title 91 0 R /A 88 0 R /Parent 1557 0 R /Prev 46 0 R /Next 110 0 R /First 94 0 R /Last 106 0 R /Count -4 >>
+<< /Title 91 0 R /A 88 0 R /Parent 70 0 R /Prev 86 0 R >>
endobj
86 0 obj
-<< /Title 87 0 R /A 84 0 R /Parent 66 0 R /Prev 82 0 R >>
+<< /Title 87 0 R /A 84 0 R /Parent 70 0 R /Prev 82 0 R /Next 90 0 R >>
endobj
82 0 obj
-<< /Title 83 0 R /A 80 0 R /Parent 66 0 R /Prev 78 0 R /Next 86 0 R >>
+<< /Title 83 0 R /A 80 0 R /Parent 70 0 R /Prev 78 0 R /Next 86 0 R >>
endobj
78 0 obj
-<< /Title 79 0 R /A 76 0 R /Parent 66 0 R /Prev 74 0 R /Next 82 0 R >>
+<< /Title 79 0 R /A 76 0 R /Parent 70 0 R /Prev 74 0 R /Next 82 0 R >>
endobj
74 0 obj
-<< /Title 75 0 R /A 72 0 R /Parent 66 0 R /Prev 70 0 R /Next 78 0 R >>
+<< /Title 75 0 R /A 72 0 R /Parent 70 0 R /Next 78 0 R >>
endobj
70 0 obj
-<< /Title 71 0 R /A 68 0 R /Parent 66 0 R /Next 74 0 R >>
+<< /Title 71 0 R /A 68 0 R /Parent 50 0 R /Prev 66 0 R /First 74 0 R /Last 90 0 R /Count -5 >>
endobj
66 0 obj
-<< /Title 67 0 R /A 64 0 R /Parent 46 0 R /Prev 62 0 R /First 70 0 R /Last 86 0 R /Count -5 >>
+<< /Title 67 0 R /A 64 0 R /Parent 50 0 R /Prev 54 0 R /Next 70 0 R >>
endobj
62 0 obj
-<< /Title 63 0 R /A 60 0 R /Parent 46 0 R /Prev 50 0 R /Next 66 0 R >>
+<< /Title 63 0 R /A 60 0 R /Parent 54 0 R /Prev 58 0 R >>
endobj
58 0 obj
-<< /Title 59 0 R /A 56 0 R /Parent 50 0 R /Prev 54 0 R >>
+<< /Title 59 0 R /A 56 0 R /Parent 54 0 R /Next 62 0 R >>
endobj
54 0 obj
-<< /Title 55 0 R /A 52 0 R /Parent 50 0 R /Next 58 0 R >>
+<< /Title 55 0 R /A 52 0 R /Parent 50 0 R /Next 66 0 R /First 58 0 R /Last 62 0 R /Count -2 >>
endobj
50 0 obj
-<< /Title 51 0 R /A 48 0 R /Parent 46 0 R /Next 62 0 R /First 54 0 R /Last 58 0 R /Count -2 >>
+<< /Title 51 0 R /A 48 0 R /Parent 1567 0 R /Prev 18 0 R /Next 94 0 R /First 54 0 R /Last 70 0 R /Count -3 >>
endobj
46 0 obj
-<< /Title 47 0 R /A 44 0 R /Parent 1557 0 R /Prev 18 0 R /Next 90 0 R /First 50 0 R /Last 66 0 R /Count -3 >>
+<< /Title 47 0 R /A 44 0 R /Parent 18 0 R /Prev 42 0 R >>
endobj
42 0 obj
-<< /Title 43 0 R /A 40 0 R /Parent 18 0 R /Prev 38 0 R >>
+<< /Title 43 0 R /A 40 0 R /Parent 18 0 R /Prev 38 0 R /Next 46 0 R >>
endobj
38 0 obj
<< /Title 39 0 R /A 36 0 R /Parent 18 0 R /Prev 34 0 R /Next 42 0 R >>
@@ -7989,1619 +8150,1633 @@ endobj
<< /Title 23 0 R /A 20 0 R /Parent 18 0 R /Next 26 0 R >>
endobj
18 0 obj
-<< /Title 19 0 R /A 16 0 R /Parent 1557 0 R /Prev 14 0 R /Next 46 0 R /First 22 0 R /Last 42 0 R /Count -6 >>
+<< /Title 19 0 R /A 16 0 R /Parent 1567 0 R /Prev 14 0 R /Next 50 0 R /First 22 0 R /Last 46 0 R /Count -7 >>
endobj
14 0 obj
-<< /Title 15 0 R /A 12 0 R /Parent 1557 0 R /Prev 10 0 R /Next 18 0 R >>
+<< /Title 15 0 R /A 12 0 R /Parent 1567 0 R /Prev 10 0 R /Next 18 0 R >>
endobj
10 0 obj
-<< /Title 11 0 R /A 8 0 R /Parent 1557 0 R /Prev 6 0 R /Next 14 0 R >>
+<< /Title 11 0 R /A 8 0 R /Parent 1567 0 R /Prev 6 0 R /Next 14 0 R >>
endobj
6 0 obj
-<< /Title 7 0 R /A 4 0 R /Parent 1557 0 R /Next 10 0 R >>
+<< /Title 7 0 R /A 4 0 R /Parent 1567 0 R /Next 10 0 R >>
endobj
-1558 0 obj
-<< /Names [ (Doc-Start) 366 0 R (Item.1) 411 0 R (Item.10) 716 0 R (Item.11) 850 0 R (Item.12) 851 0 R (Item.2) 412 0 R (Item.3) 413 0 R (Item.4) 414 0 R (Item.5) 695 0 R (Item.6) 696 0 R (Item.7) 713 0 R (Item.8) 714 0 R (Item.9) 715 0 R (page.1) 365 0 R (page.10) 468 0 R (page.11) 479 0 R (page.12) 489 0 R (page.13) 499 0 R (page.14) 504 0 R (page.15) 509 0 R (page.16) 514 0 R (page.17) 522 0 R (page.18) 529 0 R (page.19) 535 0 R (page.2) 401 0 R (page.20) 542 0 R (page.21) 547 0 R (page.22) 554 0 R (page.23) 562 0 R (page.24) 568 0 R (page.25) 573 0 R (page.26) 582 0 R ] /Limits [ (Doc-Start) (page.26) ] >>
+1568 0 obj
+<< /Names [ (Doc-Start) 370 0 R (Item.1) 415 0 R (Item.10) 724 0 R (Item.11) 858 0 R (Item.12) 859 0 R (Item.2) 416 0 R (Item.3) 417 0 R (Item.4) 418 0 R (Item.5) 704 0 R (Item.6) 705 0 R (Item.7) 721 0 R (Item.8) 722 0 R (Item.9) 723 0 R (page.1) 369 0 R (page.10) 472 0 R (page.11) 477 0 R (page.12) 488 0 R (page.13) 500 0 R (page.14) 507 0 R (page.15) 512 0 R (page.16) 517 0 R (page.17) 522 0 R (page.18) 530 0 R (page.19) 537 0 R (page.2) 405 0 R (page.20) 543 0 R (page.21) 550 0 R (page.22) 556 0 R (page.23) 562 0 R (page.24) 570 0 R (page.25) 576 0 R (page.26) 581 0 R ] /Limits [ (Doc-Start) (page.26) ] >>
endobj
-1559 0 obj
-<< /Names [ (page.27) 591 0 R (page.28) 598 0 R (page.29) 605 0 R (page.3) 409 0 R (page.30) 610 0 R (page.31) 617 0 R (page.32) 625 0 R (page.33) 632 0 R (page.34) 644 0 R (page.35) 652 0 R (page.36) 659 0 R (page.37) 667 0 R (page.38) 673 0 R (page.39) 684 0 R (page.4) 422 0 R (page.40) 691 0 R (page.41) 704 0 R (page.42) 710 0 R (page.43) 722 0 R (page.44) 732 0 R (page.45) 737 0 R (page.46) 742 0 R (page.47) 753 0 R (page.48) 762 0 R (page.49) 771 0 R (page.5) 439 0 R (page.50) 779 0 R (page.51) 785 0 R (page.52) 792 0 R (page.53) 799 0 R (page.54) 805 0 R (page.55) 813 0 R ] /Limits [ (page.27) (page.55) ] >>
+1569 0 obj
+<< /Names [ (page.27) 590 0 R (page.28) 599 0 R (page.29) 606 0 R (page.3) 413 0 R (page.30) 613 0 R (page.31) 618 0 R (page.32) 626 0 R (page.33) 633 0 R (page.34) 640 0 R (page.35) 652 0 R (page.36) 660 0 R (page.37) 667 0 R (page.38) 675 0 R (page.39) 681 0 R (page.4) 426 0 R (page.40) 692 0 R (page.41) 700 0 R (page.42) 713 0 R (page.43) 718 0 R (page.44) 730 0 R (page.45) 740 0 R (page.46) 745 0 R (page.47) 750 0 R (page.48) 761 0 R (page.49) 770 0 R (page.5) 443 0 R (page.50) 779 0 R (page.51) 787 0 R (page.52) 794 0 R (page.53) 800 0 R (page.54) 806 0 R (page.55) 813 0 R ] /Limits [ (page.27) (page.55) ] >>
endobj
-1560 0 obj
-<< /Names [ (page.56) 822 0 R (page.57) 837 0 R (page.58) 844 0 R (page.59) 849 0 R (page.6) 448 0 R (page.60) 855 0 R (page.61) 859 0 R (page.62) 864 0 R (page.63) 868 0 R (page.64) 872 0 R (page.65) 876 0 R (page.66) 881 0 R (page.67) 886 0 R (page.68) 890 0 R (page.69) 894 0 R (page.7) 453 0 R (page.70) 898 0 R (page.71) 902 0 R (page.72) 907 0 R (page.73) 911 0 R (page.74) 915 0 R (page.75) 919 0 R (page.76) 923 0 R (page.77) 927 0 R (page.78) 931 0 R (page.79) 936 0 R (page.8) 457 0 R (page.80) 1061 0 R (page.81) 1179 0 R (page.82) 1236 0 R (page.83) 1288 0 R (page.84) 1335 0 R ] /Limits [ (page.56) (page.84) ] >>
+1570 0 obj
+<< /Names [ (page.56) 821 0 R (page.57) 830 0 R (page.58) 845 0 R (page.59) 852 0 R (page.6) 452 0 R (page.60) 857 0 R (page.61) 863 0 R (page.62) 868 0 R (page.63) 872 0 R (page.64) 876 0 R (page.65) 880 0 R (page.66) 884 0 R (page.67) 889 0 R (page.68) 894 0 R (page.69) 898 0 R (page.7) 457 0 R (page.70) 902 0 R (page.71) 906 0 R (page.72) 911 0 R (page.73) 915 0 R (page.74) 919 0 R (page.75) 923 0 R (page.76) 927 0 R (page.77) 931 0 R (page.78) 935 0 R (page.79) 939 0 R (page.8) 461 0 R (page.80) 944 0 R (page.81) 1064 0 R (page.82) 1168 0 R (page.83) 1245 0 R (page.84) 1297 0 R ] /Limits [ (page.56) (page.84) ] >>
endobj
-1561 0 obj
-<< /Names [ (page.9) 461 0 R (section*.2) 357 0 R (section.1) 5 0 R (section.10) 133 0 R (section.11) 161 0 R (section.12) 165 0 R (section.13) 185 0 R (section.14) 209 0 R (section.15) 257 0 R (section.16) 285 0 R (section.17) 289 0 R (section.18) 309 0 R (section.19) 353 0 R (section.2) 9 0 R (section.3) 13 0 R (section.4) 17 0 R (section.5) 45 0 R (section.6) 89 0 R (section.7) 109 0 R (section.8) 113 0 R (section.9) 129 0 R (subsection.10.1) 137 0 R (subsection.10.2) 141 0 R (subsection.10.3) 145 0 R (subsection.10.4) 149 0 R (subsection.10.5) 153 0 R (subsection.10.6) 157 0 R (subsection.12.1) 169 0 R (subsection.12.2) 173 0 R (subsection.12.3) 177 0 R (subsection.12.4) 181 0 R (subsection.13.1) 189 0 R ] /Limits [ (page.9) (subsection.13.1) ] >>
+1571 0 obj
+<< /Names [ (page.85) 1345 0 R (page.9) 465 0 R (section*.2) 361 0 R (section.1) 5 0 R (section.10) 137 0 R (section.11) 165 0 R (section.12) 169 0 R (section.13) 189 0 R (section.14) 213 0 R (section.15) 261 0 R (section.16) 289 0 R (section.17) 293 0 R (section.18) 313 0 R (section.19) 357 0 R (section.2) 9 0 R (section.3) 13 0 R (section.4) 17 0 R (section.5) 49 0 R (section.6) 93 0 R (section.7) 113 0 R (section.8) 117 0 R (section.9) 133 0 R (subsection.10.1) 141 0 R (subsection.10.2) 145 0 R (subsection.10.3) 149 0 R (subsection.10.4) 153 0 R (subsection.10.5) 157 0 R (subsection.10.6) 161 0 R (subsection.12.1) 173 0 R (subsection.12.2) 177 0 R (subsection.12.3) 181 0 R (subsection.12.4) 185 0 R ] /Limits [ (page.85) (subsection.12.4) ] >>
endobj
-1562 0 obj
-<< /Names [ (subsection.13.2) 193 0 R (subsection.13.3) 197 0 R (subsection.13.4) 201 0 R (subsection.13.5) 205 0 R (subsection.14.1) 213 0 R (subsection.14.10) 249 0 R (subsection.14.11) 253 0 R (subsection.14.2) 217 0 R (subsection.14.3) 221 0 R (subsection.14.4) 225 0 R (subsection.14.5) 229 0 R (subsection.14.6) 233 0 R (subsection.14.7) 237 0 R (subsection.14.8) 241 0 R (subsection.14.9) 245 0 R (subsection.15.1) 261 0 R (subsection.15.2) 273 0 R (subsection.15.3) 277 0 R (subsection.15.4) 281 0 R (subsection.17.1) 293 0 R (subsection.17.2) 297 0 R (subsection.17.3) 301 0 R (subsection.17.4) 305 0 R (subsection.18.1) 313 0 R (subsection.18.10) 349 0 R (subsection.18.2) 317 0 R (subsection.18.3) 321 0 R (subsection.18.4) 325 0 R (subsection.18.5) 329 0 R (subsection.18.6) 333 0 R (subsection.18.7) 337 0 R (subsection.18.8) 341 0 R ] /Limits [ (subsection.13.2) (subsection.18.8) ] >>
+1572 0 obj
+<< /Names [ (subsection.13.1) 193 0 R (subsection.13.2) 197 0 R (subsection.13.3) 201 0 R (subsection.13.4) 205 0 R (subsection.13.5) 209 0 R (subsection.14.1) 217 0 R (subsection.14.10) 253 0 R (subsection.14.11) 257 0 R (subsection.14.2) 221 0 R (subsection.14.3) 225 0 R (subsection.14.4) 229 0 R (subsection.14.5) 233 0 R (subsection.14.6) 237 0 R (subsection.14.7) 241 0 R (subsection.14.8) 245 0 R (subsection.14.9) 249 0 R (subsection.15.1) 265 0 R (subsection.15.2) 277 0 R (subsection.15.3) 281 0 R (subsection.15.4) 285 0 R (subsection.17.1) 297 0 R (subsection.17.2) 301 0 R (subsection.17.3) 305 0 R (subsection.17.4) 309 0 R (subsection.18.1) 317 0 R (subsection.18.10) 353 0 R (subsection.18.2) 321 0 R (subsection.18.3) 325 0 R (subsection.18.4) 329 0 R (subsection.18.5) 333 0 R (subsection.18.6) 337 0 R (subsection.18.7) 341 0 R ] /Limits [ (subsection.13.1) (subsection.18.7) ] >>
endobj
-1563 0 obj
-<< /Names [ (subsection.18.9) 345 0 R (subsection.4.1) 21 0 R (subsection.4.2) 25 0 R (subsection.4.3) 29 0 R (subsection.4.4) 33 0 R (subsection.4.5) 37 0 R (subsection.4.6) 41 0 R (subsection.5.1) 49 0 R (subsection.5.2) 61 0 R (subsection.5.3) 65 0 R (subsection.6.1) 93 0 R (subsection.6.2) 97 0 R (subsection.6.3) 101 0 R (subsection.6.4) 105 0 R (subsection.8.1) 117 0 R (subsection.8.2) 121 0 R (subsection.8.3) 125 0 R (subsubsection.15.1.1) 265 0 R (subsubsection.15.1.2) 269 0 R (subsubsection.5.1.1) 53 0 R (subsubsection.5.1.2) 57 0 R (subsubsection.5.3.1) 69 0 R (subsubsection.5.3.2) 73 0 R (subsubsection.5.3.3) 77 0 R (subsubsection.5.3.4) 81 0 R (subsubsection.5.3.5) 85 0 R (table.caption.1) 698 0 R (tabularnote.1) 692 0 R (tabularnote.2) 694 0 R (tabularnote.3) 711 0 R (tabularnote.4) 712 0 R ] /Limits [ (subsection.18.9) (tabularnote.4) ] >>
+1573 0 obj
+<< /Names [ (subsection.18.8) 345 0 R (subsection.18.9) 349 0 R (subsection.4.1) 21 0 R (subsection.4.2) 25 0 R (subsection.4.3) 29 0 R (subsection.4.4) 33 0 R (subsection.4.5) 37 0 R (subsection.4.6) 41 0 R (subsection.4.7) 45 0 R (subsection.5.1) 53 0 R (subsection.5.2) 65 0 R (subsection.5.3) 69 0 R (subsection.6.1) 97 0 R (subsection.6.2) 101 0 R (subsection.6.3) 105 0 R (subsection.6.4) 109 0 R (subsection.8.1) 121 0 R (subsection.8.2) 125 0 R (subsection.8.3) 129 0 R (subsubsection.15.1.1) 269 0 R (subsubsection.15.1.2) 273 0 R (subsubsection.5.1.1) 57 0 R (subsubsection.5.1.2) 61 0 R (subsubsection.5.3.1) 73 0 R (subsubsection.5.3.2) 77 0 R (subsubsection.5.3.3) 81 0 R (subsubsection.5.3.4) 85 0 R (subsubsection.5.3.5) 89 0 R (table.caption.1) 694 0 R (tabularnote.1) 701 0 R (tabularnote.2) 703 0 R (tabularnote.3) 719 0 R ] /Limits [ (subsection.18.8) (tabularnote.3) ] >>
endobj
-1564 0 obj
-<< /Kids [ 1558 0 R 1559 0 R 1560 0 R 1561 0 R 1562 0 R 1563 0 R ] /Limits [ (Doc-Start) (tabularnote.4) ] >>
+1574 0 obj
+<< /Names [ (tabularnote.4) 720 0 R ] /Limits [ (tabularnote.4) (tabularnote.4) ] >>
endobj
-1565 0 obj
-<< /Dests 1564 0 R >>
+1575 0 obj
+<< /Kids [ 1568 0 R 1569 0 R 1570 0 R 1571 0 R 1572 0 R 1573 0 R 1574 0 R ] /Limits [ (Doc-Start) (tabularnote.4) ] >>
endobj
-1566 0 obj
-<< /Type /Catalog /Pages 1556 0 R /Outlines 1557 0 R /Names 1565 0 R /PageMode/UseOutlines /OpenAction 360 0 R >>
+1576 0 obj
+<< /Dests 1575 0 R >>
endobj
-1567 0 obj
-<< /Author(\376\377\000F\000.\000\040\000P\000a\000n\000t\000i\000g\000n\000y)/Title(\376\377\000T\000h\000e\000\040\000p\000a\000c\000k\000a\000g\000e\000\040\000'\000n\000i\000c\000e\000m\000a\000t\000r\000i\000x\000')/Subject(\376\377\000A\000\040\000L\000a\000T\000e\000X\000\040\000p\000a\000c\000k\000a\000g\000e)/Creator(LaTeX with hyperref)/Keywords() /Producer (LuaTeX-1.18.1) /CreationDate (D:20240423140805+02'00') /ModDate (D:20240423140805+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.1 (MiKTeX 24.3.31)) >>
+1577 0 obj
+<< /Type /Catalog /Pages 1566 0 R /Outlines 1567 0 R /Names 1576 0 R /PageMode/UseOutlines /OpenAction 364 0 R >>
+endobj
+1578 0 obj
+<< /Author(\376\377\000F\000.\000\040\000P\000a\000n\000t\000i\000g\000n\000y)/Title(\376\377\000T\000h\000e\000\040\000p\000a\000c\000k\000a\000g\000e\000\040\000'\000n\000i\000c\000e\000m\000a\000t\000r\000i\000x\000')/Subject(\376\377\000A\000\040\000L\000a\000T\000e\000X\000\040\000p\000a\000c\000k\000a\000g\000e)/Creator(LaTeX with hyperref)/Keywords() /Producer (LuaTeX-1.18.1) /CreationDate (D:20240529203152+02'00') /ModDate (D:20240529203152+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.1 (MiKTeX 24.4)) >>
endobj
xref
-0 1568
+0 1579
0000000000 65535 f
-0000601876 00000 n
-0000602032 00000 n
-0000602104 00000 n
+0000607956 00000 n
+0000608112 00000 n
+0000608184 00000 n
0000000020 00000 n
-0000036227 00000 n
-0000899874 00000 n
+0000036450 00000 n
+0000906863 00000 n
0000000065 00000 n
0000000264 00000 n
-0000036287 00000 n
-0000899787 00000 n
+0000036510 00000 n
+0000906776 00000 n
0000000309 00000 n
0000000527 00000 n
-0000041534 00000 n
-0000899698 00000 n
+0000041756 00000 n
+0000906687 00000 n
0000000573 00000 n
0000000791 00000 n
-0000048678 00000 n
-0000899572 00000 n
+0000049033 00000 n
+0000906561 00000 n
0000000837 00000 n
0000000918 00000 n
-0000048739 00000 n
-0000899498 00000 n
+0000049094 00000 n
+0000906487 00000 n
0000000969 00000 n
0000001060 00000 n
-0000061960 00000 n
-0000899411 00000 n
+0000062136 00000 n
+0000906400 00000 n
0000001111 00000 n
0000001255 00000 n
-0000062021 00000 n
-0000899324 00000 n
+0000062197 00000 n
+0000906313 00000 n
0000001306 00000 n
0000001435 00000 n
-0000067658 00000 n
-0000899237 00000 n
+0000067914 00000 n
+0000906226 00000 n
0000001486 00000 n
0000001620 00000 n
-0000067719 00000 n
-0000899150 00000 n
+0000067975 00000 n
+0000906139 00000 n
0000001671 00000 n
0000001955 00000 n
-0000072575 00000 n
-0000899076 00000 n
+0000073052 00000 n
+0000906052 00000 n
0000002006 00000 n
0000002280 00000 n
-0000076254 00000 n
-0000898950 00000 n
-0000002326 00000 n
-0000002402 00000 n
-0000076315 00000 n
-0000898839 00000 n
-0000002453 00000 n
-0000002736 00000 n
-0000076376 00000 n
-0000898765 00000 n
-0000002792 00000 n
-0000002916 00000 n
-0000081959 00000 n
-0000898691 00000 n
-0000002972 00000 n
-0000003099 00000 n
-0000082020 00000 n
-0000898604 00000 n
-0000003150 00000 n
-0000003399 00000 n
-0000087662 00000 n
-0000898493 00000 n
-0000003450 00000 n
-0000003681 00000 n
-0000094747 00000 n
-0000898419 00000 n
-0000003737 00000 n
-0000003907 00000 n
-0000094808 00000 n
-0000898332 00000 n
-0000003963 00000 n
-0000004218 00000 n
-0000094869 00000 n
-0000898245 00000 n
-0000004274 00000 n
-0000004409 00000 n
-0000101387 00000 n
-0000898158 00000 n
-0000004465 00000 n
-0000004602 00000 n
-0000106540 00000 n
-0000898084 00000 n
-0000004658 00000 n
-0000004840 00000 n
-0000118487 00000 n
-0000897956 00000 n
-0000004886 00000 n
-0000005196 00000 n
-0000118548 00000 n
-0000897882 00000 n
-0000005247 00000 n
-0000005356 00000 n
-0000124513 00000 n
-0000897794 00000 n
-0000005407 00000 n
-0000005666 00000 n
-0000148342 00000 n
-0000897703 00000 n
-0000005718 00000 n
-0000005973 00000 n
-0000159481 00000 n
-0000897625 00000 n
-0000006025 00000 n
-0000006208 00000 n
-0000159543 00000 n
-0000897532 00000 n
-0000006255 00000 n
-0000006398 00000 n
-0000159605 00000 n
-0000897399 00000 n
-0000006445 00000 n
-0000006606 00000 n
-0000159667 00000 n
-0000897320 00000 n
-0000006658 00000 n
-0000006745 00000 n
-0000164997 00000 n
-0000897227 00000 n
-0000006797 00000 n
-0000006897 00000 n
-0000169691 00000 n
-0000897148 00000 n
-0000006949 00000 n
-0000007115 00000 n
-0000177107 00000 n
-0000897054 00000 n
-0000007162 00000 n
-0000007348 00000 n
-0000197838 00000 n
-0000896921 00000 n
-0000007396 00000 n
-0000007569 00000 n
-0000210578 00000 n
-0000896842 00000 n
-0000007622 00000 n
-0000007772 00000 n
-0000230914 00000 n
-0000896749 00000 n
-0000007825 00000 n
-0000008052 00000 n
-0000241757 00000 n
-0000896656 00000 n
-0000008105 00000 n
-0000008440 00000 n
-0000241819 00000 n
-0000896563 00000 n
-0000008493 00000 n
-0000008687 00000 n
-0000246991 00000 n
-0000896470 00000 n
-0000008740 00000 n
-0000008946 00000 n
-0000253949 00000 n
-0000896391 00000 n
-0000008999 00000 n
-0000009193 00000 n
-0000254011 00000 n
-0000896297 00000 n
-0000009241 00000 n
-0000009513 00000 n
-0000261319 00000 n
-0000896164 00000 n
-0000009561 00000 n
-0000009666 00000 n
-0000278840 00000 n
-0000896085 00000 n
-0000009719 00000 n
-0000009944 00000 n
-0000278902 00000 n
-0000895992 00000 n
-0000009997 00000 n
-0000010375 00000 n
-0000296096 00000 n
-0000895899 00000 n
-0000010428 00000 n
-0000010772 00000 n
-0000302085 00000 n
-0000895820 00000 n
-0000010825 00000 n
-0000011095 00000 n
-0000302147 00000 n
-0000895687 00000 n
-0000011143 00000 n
-0000011357 00000 n
-0000302209 00000 n
-0000895608 00000 n
-0000011410 00000 n
-0000011548 00000 n
-0000307536 00000 n
-0000895515 00000 n
-0000011601 00000 n
-0000011698 00000 n
-0000307598 00000 n
-0000895422 00000 n
-0000011751 00000 n
-0000011889 00000 n
-0000316181 00000 n
-0000895329 00000 n
-0000011942 00000 n
-0000012153 00000 n
-0000325057 00000 n
-0000895250 00000 n
-0000012206 00000 n
-0000012453 00000 n
-0000325119 00000 n
-0000895116 00000 n
-0000012501 00000 n
-0000012603 00000 n
-0000325181 00000 n
-0000895037 00000 n
-0000012656 00000 n
-0000012806 00000 n
-0000334140 00000 n
-0000894944 00000 n
-0000012859 00000 n
-0000013004 00000 n
-0000334202 00000 n
-0000894851 00000 n
-0000013057 00000 n
-0000013282 00000 n
-0000334264 00000 n
-0000894758 00000 n
-0000013335 00000 n
-0000013557 00000 n
-0000339872 00000 n
-0000894665 00000 n
-0000013610 00000 n
-0000013743 00000 n
-0000339934 00000 n
-0000894572 00000 n
-0000013796 00000 n
-0000013911 00000 n
-0000346082 00000 n
-0000894479 00000 n
-0000013964 00000 n
-0000014135 00000 n
-0000351742 00000 n
-0000894386 00000 n
-0000014188 00000 n
-0000014323 00000 n
-0000351804 00000 n
-0000894293 00000 n
-0000014376 00000 n
-0000014529 00000 n
-0000351866 00000 n
-0000894200 00000 n
-0000014583 00000 n
-0000014809 00000 n
-0000351928 00000 n
-0000894121 00000 n
-0000014863 00000 n
-0000015056 00000 n
-0000358270 00000 n
-0000893988 00000 n
-0000015104 00000 n
-0000015280 00000 n
-0000358332 00000 n
-0000893870 00000 n
-0000015333 00000 n
-0000015646 00000 n
-0000363491 00000 n
-0000893791 00000 n
-0000015704 00000 n
-0000015844 00000 n
-0000363553 00000 n
-0000893712 00000 n
-0000015902 00000 n
-0000016068 00000 n
-0000371265 00000 n
-0000893619 00000 n
-0000016121 00000 n
-0000016348 00000 n
-0000378965 00000 n
-0000893526 00000 n
-0000016401 00000 n
-0000016704 00000 n
-0000384577 00000 n
-0000893447 00000 n
-0000016757 00000 n
-0000017052 00000 n
-0000388877 00000 n
-0000893353 00000 n
-0000017100 00000 n
-0000017248 00000 n
-0000402196 00000 n
-0000893220 00000 n
-0000017296 00000 n
-0000017413 00000 n
-0000402258 00000 n
-0000893141 00000 n
-0000017466 00000 n
-0000017568 00000 n
-0000402319 00000 n
-0000893048 00000 n
-0000017621 00000 n
-0000017731 00000 n
-0000408203 00000 n
-0000892955 00000 n
-0000017784 00000 n
-0000017974 00000 n
-0000408264 00000 n
-0000892876 00000 n
-0000018027 00000 n
-0000018141 00000 n
-0000416695 00000 n
-0000892742 00000 n
+0000077204 00000 n
+0000905978 00000 n
+0000002331 00000 n
+0000002493 00000 n
+0000083384 00000 n
+0000905852 00000 n
+0000002539 00000 n
+0000002615 00000 n
+0000083445 00000 n
+0000905741 00000 n
+0000002666 00000 n
+0000002949 00000 n
+0000083506 00000 n
+0000905667 00000 n
+0000003005 00000 n
+0000003129 00000 n
+0000088198 00000 n
+0000905593 00000 n
+0000003185 00000 n
+0000003312 00000 n
+0000088259 00000 n
+0000905506 00000 n
+0000003363 00000 n
+0000003612 00000 n
+0000088320 00000 n
+0000905395 00000 n
+0000003663 00000 n
+0000003894 00000 n
+0000095114 00000 n
+0000905321 00000 n
+0000003950 00000 n
+0000004120 00000 n
+0000101847 00000 n
+0000905234 00000 n
+0000004176 00000 n
+0000004431 00000 n
+0000101908 00000 n
+0000905147 00000 n
+0000004487 00000 n
+0000004622 00000 n
+0000108064 00000 n
+0000905060 00000 n
+0000004678 00000 n
+0000004815 00000 n
+0000108124 00000 n
+0000904986 00000 n
+0000004871 00000 n
+0000005053 00000 n
+0000124112 00000 n
+0000904858 00000 n
+0000005099 00000 n
+0000005409 00000 n
+0000124173 00000 n
+0000904783 00000 n
+0000005460 00000 n
+0000005569 00000 n
+0000130142 00000 n
+0000904692 00000 n
+0000005621 00000 n
+0000005881 00000 n
+0000153998 00000 n
+0000904600 00000 n
+0000005933 00000 n
+0000006188 00000 n
+0000164996 00000 n
+0000904522 00000 n
+0000006240 00000 n
+0000006423 00000 n
+0000165058 00000 n
+0000904429 00000 n
+0000006470 00000 n
+0000006613 00000 n
+0000165120 00000 n
+0000904296 00000 n
+0000006660 00000 n
+0000006821 00000 n
+0000165182 00000 n
+0000904217 00000 n
+0000006873 00000 n
+0000006960 00000 n
+0000170498 00000 n
+0000904124 00000 n
+0000007012 00000 n
+0000007112 00000 n
+0000175200 00000 n
+0000904045 00000 n
+0000007164 00000 n
+0000007330 00000 n
+0000182619 00000 n
+0000903951 00000 n
+0000007377 00000 n
+0000007563 00000 n
+0000203357 00000 n
+0000903818 00000 n
+0000007611 00000 n
+0000007784 00000 n
+0000216096 00000 n
+0000903739 00000 n
+0000007837 00000 n
+0000007987 00000 n
+0000236432 00000 n
+0000903646 00000 n
+0000008040 00000 n
+0000008267 00000 n
+0000247275 00000 n
+0000903553 00000 n
+0000008320 00000 n
+0000008655 00000 n
+0000247337 00000 n
+0000903460 00000 n
+0000008708 00000 n
+0000008902 00000 n
+0000252508 00000 n
+0000903367 00000 n
+0000008955 00000 n
+0000009161 00000 n
+0000259447 00000 n
+0000903288 00000 n
+0000009214 00000 n
+0000009408 00000 n
+0000259509 00000 n
+0000903194 00000 n
+0000009456 00000 n
+0000009728 00000 n
+0000266821 00000 n
+0000903061 00000 n
+0000009776 00000 n
+0000009881 00000 n
+0000284344 00000 n
+0000902982 00000 n
+0000009934 00000 n
+0000010159 00000 n
+0000284406 00000 n
+0000902889 00000 n
+0000010212 00000 n
+0000010590 00000 n
+0000301606 00000 n
+0000902796 00000 n
+0000010643 00000 n
+0000010987 00000 n
+0000307979 00000 n
+0000902717 00000 n
+0000011040 00000 n
+0000011310 00000 n
+0000308041 00000 n
+0000902584 00000 n
+0000011358 00000 n
+0000011572 00000 n
+0000308103 00000 n
+0000902505 00000 n
+0000011625 00000 n
+0000011763 00000 n
+0000313391 00000 n
+0000902412 00000 n
+0000011816 00000 n
+0000011913 00000 n
+0000313453 00000 n
+0000902319 00000 n
+0000011966 00000 n
+0000012104 00000 n
+0000321587 00000 n
+0000902226 00000 n
+0000012157 00000 n
+0000012368 00000 n
+0000330423 00000 n
+0000902147 00000 n
+0000012421 00000 n
+0000012668 00000 n
+0000330485 00000 n
+0000902013 00000 n
+0000012716 00000 n
+0000012818 00000 n
+0000330547 00000 n
+0000901934 00000 n
+0000012871 00000 n
+0000013021 00000 n
+0000339506 00000 n
+0000901841 00000 n
+0000013074 00000 n
+0000013219 00000 n
+0000339568 00000 n
+0000901748 00000 n
+0000013272 00000 n
+0000013497 00000 n
+0000339630 00000 n
+0000901655 00000 n
+0000013550 00000 n
+0000013772 00000 n
+0000345237 00000 n
+0000901562 00000 n
+0000013825 00000 n
+0000013958 00000 n
+0000345299 00000 n
+0000901469 00000 n
+0000014011 00000 n
+0000014126 00000 n
+0000351450 00000 n
+0000901376 00000 n
+0000014179 00000 n
+0000014350 00000 n
+0000357028 00000 n
+0000901283 00000 n
+0000014403 00000 n
+0000014538 00000 n
+0000357090 00000 n
+0000901190 00000 n
+0000014591 00000 n
+0000014744 00000 n
+0000357152 00000 n
+0000901097 00000 n
+0000014798 00000 n
+0000015024 00000 n
+0000357214 00000 n
+0000901018 00000 n
+0000015078 00000 n
+0000015271 00000 n
+0000363558 00000 n
+0000900885 00000 n
+0000015319 00000 n
+0000015495 00000 n
+0000363620 00000 n
+0000900767 00000 n
+0000015548 00000 n
+0000015861 00000 n
+0000368780 00000 n
+0000900688 00000 n
+0000015919 00000 n
+0000016059 00000 n
+0000368842 00000 n
+0000900609 00000 n
+0000016117 00000 n
+0000016283 00000 n
+0000376555 00000 n
+0000900516 00000 n
+0000016336 00000 n
+0000016563 00000 n
+0000382971 00000 n
+0000900423 00000 n
+0000016616 00000 n
+0000016919 00000 n
+0000390077 00000 n
+0000900344 00000 n
+0000016972 00000 n
+0000017267 00000 n
+0000394389 00000 n
+0000900250 00000 n
+0000017315 00000 n
+0000017463 00000 n
+0000407710 00000 n
+0000900117 00000 n
+0000017511 00000 n
+0000017628 00000 n
+0000407772 00000 n
+0000900038 00000 n
+0000017681 00000 n
+0000017783 00000 n
+0000407833 00000 n
+0000899945 00000 n
+0000017836 00000 n
+0000017946 00000 n
+0000413369 00000 n
+0000899852 00000 n
+0000017999 00000 n
0000018189 00000 n
-0000018258 00000 n
-0000416757 00000 n
-0000892663 00000 n
-0000018311 00000 n
-0000018622 00000 n
-0000420755 00000 n
-0000892570 00000 n
-0000018675 00000 n
-0000018800 00000 n
-0000420817 00000 n
-0000892477 00000 n
-0000018853 00000 n
-0000018996 00000 n
-0000444599 00000 n
-0000892384 00000 n
-0000019049 00000 n
-0000019141 00000 n
-0000444661 00000 n
-0000892291 00000 n
-0000019194 00000 n
-0000019436 00000 n
-0000455498 00000 n
-0000892198 00000 n
-0000019489 00000 n
-0000019581 00000 n
-0000455560 00000 n
-0000892105 00000 n
-0000019634 00000 n
-0000019759 00000 n
-0000474179 00000 n
-0000892012 00000 n
-0000019812 00000 n
-0000020029 00000 n
-0000492045 00000 n
-0000891919 00000 n
-0000020082 00000 n
-0000020352 00000 n
-0000495524 00000 n
-0000891840 00000 n
-0000020406 00000 n
-0000020541 00000 n
-0000498042 00000 n
-0000891746 00000 n
-0000020589 00000 n
-0000020653 00000 n
-0000548600 00000 n
-0000891666 00000 n
-0000020701 00000 n
-0000020755 00000 n
-0000030887 00000 n
-0000031053 00000 n
-0000031415 00000 n
-0000020807 00000 n
-0000031291 00000 n
-0000031353 00000 n
-0000752519 00000 n
-0000747907 00000 n
-0000745454 00000 n
-0000740039 00000 n
-0000736693 00000 n
-0000734061 00000 n
-0000729098 00000 n
-0000726391 00000 n
-0000888099 00000 n
-0000888827 00000 n
-0000889407 00000 n
-0000888682 00000 n
-0000888391 00000 n
-0000889550 00000 n
-0000716233 00000 n
-0000889118 00000 n
-0000705130 00000 n
-0000700515 00000 n
-0000690446 00000 n
-0000682717 00000 n
-0000678322 00000 n
-0000672456 00000 n
-0000664034 00000 n
-0000661150 00000 n
-0000657843 00000 n
-0000648456 00000 n
-0000644994 00000 n
-0000890124 00000 n
-0000031024 00000 n
-0000036006 00000 n
-0000041318 00000 n
-0000036347 00000 n
-0000035840 00000 n
-0000031877 00000 n
-0000036165 00000 n
-0000636227 00000 n
-0000627576 00000 n
-0000889693 00000 n
-0000035977 00000 n
-0000041850 00000 n
-0000041152 00000 n
-0000036666 00000 n
-0000041472 00000 n
-0000888245 00000 n
-0000041594 00000 n
-0000041658 00000 n
-0000041722 00000 n
-0000041786 00000 n
-0000624111 00000 n
-0000041289 00000 n
-0000048304 00000 n
-0000048459 00000 n
-0000048800 00000 n
-0000048130 00000 n
-0000042208 00000 n
-0000048616 00000 n
-0000888537 00000 n
-0000048267 00000 n
-0000055321 00000 n
-0000055473 00000 n
-0000054221 00000 n
-0000054380 00000 n
-0000054540 00000 n
+0000413431 00000 n
+0000899773 00000 n
+0000018242 00000 n
+0000018356 00000 n
+0000422311 00000 n
+0000899639 00000 n
+0000018404 00000 n
+0000018473 00000 n
+0000422373 00000 n
+0000899560 00000 n
+0000018526 00000 n
+0000018837 00000 n
+0000426368 00000 n
+0000899467 00000 n
+0000018890 00000 n
+0000019015 00000 n
+0000426430 00000 n
+0000899374 00000 n
+0000019068 00000 n
+0000019211 00000 n
+0000450210 00000 n
+0000899281 00000 n
+0000019264 00000 n
+0000019356 00000 n
+0000450272 00000 n
+0000899188 00000 n
+0000019409 00000 n
+0000019651 00000 n
+0000461137 00000 n
+0000899095 00000 n
+0000019704 00000 n
+0000019796 00000 n
+0000461199 00000 n
+0000899002 00000 n
+0000019849 00000 n
+0000019974 00000 n
+0000479578 00000 n
+0000898909 00000 n
+0000020027 00000 n
+0000020244 00000 n
+0000497445 00000 n
+0000898816 00000 n
+0000020297 00000 n
+0000020567 00000 n
+0000500921 00000 n
+0000898737 00000 n
+0000020621 00000 n
+0000020756 00000 n
+0000503608 00000 n
+0000898643 00000 n
+0000020804 00000 n
+0000020868 00000 n
+0000553197 00000 n
+0000898563 00000 n
+0000020916 00000 n
+0000020970 00000 n
+0000031109 00000 n
+0000031275 00000 n
+0000031637 00000 n
+0000021022 00000 n
+0000031513 00000 n
+0000031575 00000 n
+0000759408 00000 n
+0000754796 00000 n
+0000752343 00000 n
+0000746997 00000 n
+0000743651 00000 n
+0000741019 00000 n
+0000736056 00000 n
+0000733349 00000 n
+0000894988 00000 n
+0000895716 00000 n
+0000896296 00000 n
+0000895571 00000 n
+0000895280 00000 n
+0000896439 00000 n
+0000723191 00000 n
+0000896007 00000 n
+0000711828 00000 n
+0000707213 00000 n
+0000697144 00000 n
+0000689415 00000 n
+0000685020 00000 n
+0000679154 00000 n
+0000670355 00000 n
+0000667471 00000 n
+0000664164 00000 n
+0000654777 00000 n
+0000651315 00000 n
+0000897013 00000 n
+0000031246 00000 n
+0000036229 00000 n
+0000041540 00000 n
+0000036570 00000 n
+0000036063 00000 n
+0000032099 00000 n
+0000036388 00000 n
+0000642548 00000 n
+0000633656 00000 n
+0000896582 00000 n
+0000036200 00000 n
+0000042072 00000 n
+0000041374 00000 n
+0000036889 00000 n
+0000041694 00000 n
+0000895134 00000 n
+0000041816 00000 n
+0000041880 00000 n
+0000041944 00000 n
+0000042008 00000 n
+0000630191 00000 n
+0000041511 00000 n
+0000048659 00000 n
+0000048814 00000 n
+0000049154 00000 n
+0000048485 00000 n
+0000042430 00000 n
+0000048971 00000 n
+0000895426 00000 n
+0000048622 00000 n
+0000055952 00000 n
+0000056104 00000 n
+0000054534 00000 n
0000054694 00000 n
-0000054847 00000 n
-0000055001 00000 n
-0000055161 00000 n
-0000060953 00000 n
-0000061112 00000 n
-0000055687 00000 n
-0000053991 00000 n
-0000049080 00000 n
-0000055625 00000 n
-0000054128 00000 n
-0000061271 00000 n
-0000061429 00000 n
-0000061587 00000 n
-0000061742 00000 n
-0000062082 00000 n
-0000060747 00000 n
-0000055967 00000 n
-0000061898 00000 n
-0000060884 00000 n
-0000067780 00000 n
-0000067475 00000 n
-0000062271 00000 n
-0000067596 00000 n
-0000072636 00000 n
-0000072392 00000 n
-0000068034 00000 n
-0000072513 00000 n
-0000076437 00000 n
-0000076071 00000 n
-0000072851 00000 n
-0000076192 00000 n
-0000081426 00000 n
-0000081579 00000 n
-0000081743 00000 n
-0000082081 00000 n
-0000081244 00000 n
-0000076626 00000 n
-0000081897 00000 n
-0000618786 00000 n
-0000081381 00000 n
-0000086810 00000 n
-0000086964 00000 n
-0000087118 00000 n
-0000087282 00000 n
-0000087436 00000 n
-0000087723 00000 n
-0000086612 00000 n
-0000082296 00000 n
-0000087600 00000 n
-0000890277 00000 n
-0000086749 00000 n
-0000094048 00000 n
-0000094208 00000 n
-0000094367 00000 n
-0000094527 00000 n
-0000094930 00000 n
-0000093858 00000 n
-0000087977 00000 n
-0000094685 00000 n
-0000888972 00000 n
-0000093995 00000 n
-0000101008 00000 n
-0000101167 00000 n
-0000100689 00000 n
-0000100848 00000 n
-0000101447 00000 n
-0000100499 00000 n
-0000095210 00000 n
-0000101325 00000 n
-0000100636 00000 n
-0000106601 00000 n
-0000106357 00000 n
-0000101701 00000 n
-0000106478 00000 n
-0000111067 00000 n
-0000111284 00000 n
-0000110901 00000 n
-0000106868 00000 n
-0000111222 00000 n
-0000111038 00000 n
-0000118609 00000 n
-0000118304 00000 n
-0000111512 00000 n
-0000118425 00000 n
-0000124293 00000 n
-0000123809 00000 n
-0000123973 00000 n
-0000124133 00000 n
-0000124574 00000 n
-0000123619 00000 n
-0000118837 00000 n
-0000124451 00000 n
-0000123756 00000 n
-0000129768 00000 n
+0000054854 00000 n
+0000055008 00000 n
+0000055162 00000 n
+0000055316 00000 n
+0000055476 00000 n
+0000055636 00000 n
+0000055794 00000 n
+0000056318 00000 n
+0000054288 00000 n
+0000049447 00000 n
+0000056256 00000 n
+0000054425 00000 n
+0000061443 00000 n
+0000061602 00000 n
+0000061761 00000 n
+0000061917 00000 n
+0000062258 00000 n
+0000061253 00000 n
+0000056598 00000 n
+0000062074 00000 n
+0000061390 00000 n
+0000068036 00000 n
+0000067731 00000 n
+0000062447 00000 n
+0000067852 00000 n
+0000073113 00000 n
+0000072869 00000 n
+0000068290 00000 n
+0000072990 00000 n
+0000077265 00000 n
+0000077021 00000 n
+0000073328 00000 n
+0000077142 00000 n
+0000082851 00000 n
+0000083004 00000 n
+0000083168 00000 n
+0000083567 00000 n
+0000082669 00000 n
+0000077454 00000 n
+0000083322 00000 n
+0000082806 00000 n
+0000088381 00000 n
+0000088015 00000 n
+0000083821 00000 n
+0000088136 00000 n
+0000624866 00000 n
+0000897166 00000 n
+0000094266 00000 n
+0000094420 00000 n
+0000094570 00000 n
+0000094734 00000 n
+0000094888 00000 n
+0000095175 00000 n
+0000094068 00000 n
+0000088570 00000 n
+0000095052 00000 n
+0000895861 00000 n
+0000094205 00000 n
+0000100830 00000 n
+0000100990 00000 n
+0000101149 00000 n
+0000101309 00000 n
+0000101469 00000 n
+0000101627 00000 n
+0000101969 00000 n
+0000100624 00000 n
+0000095468 00000 n
+0000101785 00000 n
+0000100761 00000 n
+0000107683 00000 n
+0000107842 00000 n
+0000108185 00000 n
+0000107509 00000 n
+0000102236 00000 n
+0000108002 00000 n
+0000107646 00000 n
+0000112335 00000 n
+0000112152 00000 n
+0000108374 00000 n
+0000112273 00000 n
+0000116683 00000 n
+0000116900 00000 n
+0000116517 00000 n
+0000112589 00000 n
+0000116838 00000 n
+0000116654 00000 n
+0000124234 00000 n
+0000123929 00000 n
+0000117128 00000 n
+0000124050 00000 n
0000129922 00000 n
-0000130144 00000 n
-0000129594 00000 n
-0000124841 00000 n
-0000130082 00000 n
-0000129731 00000 n
-0000135658 00000 n
-0000135872 00000 n
-0000135492 00000 n
-0000130359 00000 n
-0000135810 00000 n
-0000135629 00000 n
-0000141474 00000 n
-0000148126 00000 n
-0000141693 00000 n
-0000141308 00000 n
-0000136113 00000 n
-0000141631 00000 n
-0000141445 00000 n
-0000148404 00000 n
-0000147960 00000 n
-0000141908 00000 n
-0000148280 00000 n
-0000890430 00000 n
-0000148097 00000 n
-0000153749 00000 n
-0000153963 00000 n
-0000153583 00000 n
-0000148671 00000 n
-0000153901 00000 n
-0000153720 00000 n
-0000159105 00000 n
-0000159259 00000 n
-0000164630 00000 n
-0000159729 00000 n
-0000158931 00000 n
-0000154217 00000 n
-0000159419 00000 n
-0000159068 00000 n
-0000164783 00000 n
-0000165059 00000 n
-0000164456 00000 n
-0000159970 00000 n
-0000164935 00000 n
-0000164593 00000 n
-0000169753 00000 n
-0000169508 00000 n
-0000165339 00000 n
-0000169629 00000 n
-0000176408 00000 n
-0000176573 00000 n
-0000176732 00000 n
-0000176891 00000 n
-0000184849 00000 n
-0000177169 00000 n
-0000176218 00000 n
-0000170033 00000 n
-0000177045 00000 n
-0000176355 00000 n
-0000184371 00000 n
-0000184531 00000 n
-0000184695 00000 n
-0000197299 00000 n
-0000185066 00000 n
-0000184181 00000 n
-0000177384 00000 n
-0000185004 00000 n
-0000184318 00000 n
-0000197459 00000 n
-0000197618 00000 n
-0000197900 00000 n
-0000197117 00000 n
-0000185346 00000 n
-0000197776 00000 n
-0000614397 00000 n
-0000197254 00000 n
-0000210365 00000 n
-0000210640 00000 n
-0000210199 00000 n
-0000198206 00000 n
-0000210516 00000 n
-0000210336 00000 n
-0000230976 00000 n
-0000230731 00000 n
-0000210907 00000 n
-0000230852 00000 n
-0000241375 00000 n
-0000241535 00000 n
-0000246396 00000 n
-0000241881 00000 n
-0000241201 00000 n
-0000231282 00000 n
-0000241695 00000 n
-0000890583 00000 n
-0000241338 00000 n
-0000246555 00000 n
-0000246709 00000 n
+0000129438 00000 n
+0000129602 00000 n
+0000129762 00000 n
+0000130204 00000 n
+0000129248 00000 n
+0000124462 00000 n
+0000130080 00000 n
+0000129385 00000 n
+0000135397 00000 n
+0000135551 00000 n
+0000135773 00000 n
+0000135223 00000 n
+0000130471 00000 n
+0000135711 00000 n
+0000135360 00000 n
+0000141296 00000 n
+0000141510 00000 n
+0000141130 00000 n
+0000135988 00000 n
+0000141448 00000 n
+0000141267 00000 n
+0000147128 00000 n
+0000153782 00000 n
+0000147347 00000 n
+0000146962 00000 n
+0000141751 00000 n
+0000147285 00000 n
+0000897319 00000 n
+0000147099 00000 n
+0000154060 00000 n
+0000153616 00000 n
+0000147562 00000 n
+0000153936 00000 n
+0000153753 00000 n
+0000159355 00000 n
+0000159569 00000 n
+0000159189 00000 n
+0000154327 00000 n
+0000159507 00000 n
+0000159326 00000 n
+0000164624 00000 n
+0000164776 00000 n
+0000170131 00000 n
+0000165244 00000 n
+0000164450 00000 n
+0000159810 00000 n
+0000164934 00000 n
+0000164587 00000 n
+0000170284 00000 n
+0000170560 00000 n
+0000169957 00000 n
+0000165472 00000 n
+0000170436 00000 n
+0000170094 00000 n
+0000175262 00000 n
+0000175017 00000 n
+0000170840 00000 n
+0000175138 00000 n
+0000181920 00000 n
+0000182085 00000 n
+0000182244 00000 n
+0000182403 00000 n
+0000190366 00000 n
+0000182681 00000 n
+0000181730 00000 n
+0000175542 00000 n
+0000182557 00000 n
+0000181867 00000 n
+0000189889 00000 n
+0000190049 00000 n
+0000190212 00000 n
+0000202818 00000 n
+0000190583 00000 n
+0000189699 00000 n
+0000182896 00000 n
+0000190521 00000 n
+0000189836 00000 n
+0000202978 00000 n
+0000203137 00000 n
+0000203419 00000 n
+0000202636 00000 n
+0000190863 00000 n
+0000203295 00000 n
+0000620477 00000 n
+0000202773 00000 n
+0000215883 00000 n
+0000216158 00000 n
+0000215717 00000 n
+0000203725 00000 n
+0000216034 00000 n
+0000215854 00000 n
+0000236494 00000 n
+0000236249 00000 n
+0000216425 00000 n
+0000236370 00000 n
+0000897472 00000 n
+0000246893 00000 n
0000247053 00000 n
-0000246214 00000 n
-0000242135 00000 n
-0000246929 00000 n
-0000611862 00000 n
-0000246351 00000 n
-0000253729 00000 n
-0000254073 00000 n
-0000253563 00000 n
-0000247320 00000 n
-0000253887 00000 n
-0000253700 00000 n
-0000260151 00000 n
-0000260312 00000 n
-0000260473 00000 n
-0000260627 00000 n
-0000260786 00000 n
-0000261100 00000 n
-0000260945 00000 n
-0000261381 00000 n
-0000259937 00000 n
-0000254392 00000 n
-0000261257 00000 n
-0000889981 00000 n
-0000260074 00000 n
-0000278459 00000 n
-0000278618 00000 n
-0000278964 00000 n
-0000278285 00000 n
-0000261713 00000 n
-0000278778 00000 n
-0000278422 00000 n
-0000284877 00000 n
-0000285032 00000 n
-0000285249 00000 n
-0000284703 00000 n
-0000279218 00000 n
-0000285187 00000 n
-0000284840 00000 n
-0000290121 00000 n
-0000290281 00000 n
-0000290441 00000 n
-0000290663 00000 n
-0000289939 00000 n
-0000285464 00000 n
-0000290601 00000 n
-0000290076 00000 n
-0000295840 00000 n
-0000296158 00000 n
-0000295674 00000 n
-0000290943 00000 n
-0000296034 00000 n
-0000295811 00000 n
-0000301398 00000 n
-0000301552 00000 n
-0000301716 00000 n
-0000301870 00000 n
-0000306846 00000 n
-0000307006 00000 n
-0000302271 00000 n
-0000301208 00000 n
-0000296464 00000 n
-0000302023 00000 n
-0000301345 00000 n
-0000307166 00000 n
-0000307320 00000 n
-0000307914 00000 n
-0000306656 00000 n
-0000302499 00000 n
-0000307474 00000 n
-0000307660 00000 n
-0000608799 00000 n
-0000307723 00000 n
-0000307787 00000 n
-0000307850 00000 n
-0000306793 00000 n
-0000315737 00000 n
-0000312156 00000 n
-0000312316 00000 n
-0000312534 00000 n
-0000311982 00000 n
-0000308116 00000 n
-0000312472 00000 n
-0000890736 00000 n
-0000312119 00000 n
-0000316243 00000 n
-0000315554 00000 n
-0000312762 00000 n
-0000315675 00000 n
-0000315798 00000 n
-0000315862 00000 n
-0000315926 00000 n
-0000315990 00000 n
-0000316054 00000 n
-0000316118 00000 n
-0000320309 00000 n
-0000320469 00000 n
-0000320691 00000 n
-0000320135 00000 n
-0000316458 00000 n
-0000320629 00000 n
-0000320272 00000 n
-0000324190 00000 n
-0000324350 00000 n
-0000324509 00000 n
-0000324668 00000 n
-0000324831 00000 n
-0000325242 00000 n
-0000323992 00000 n
-0000320867 00000 n
-0000324995 00000 n
-0000324129 00000 n
-0000334326 00000 n
-0000333957 00000 n
-0000325483 00000 n
-0000334078 00000 n
-0000339660 00000 n
-0000339996 00000 n
-0000339494 00000 n
-0000334593 00000 n
-0000339810 00000 n
-0000889838 00000 n
-0000339631 00000 n
-0000345244 00000 n
-0000345399 00000 n
-0000345553 00000 n
-0000345711 00000 n
-0000345866 00000 n
-0000346144 00000 n
-0000345046 00000 n
-0000340341 00000 n
-0000346020 00000 n
-0000887953 00000 n
-0000345183 00000 n
-0000351367 00000 n
-0000351526 00000 n
-0000357402 00000 n
-0000351990 00000 n
-0000351193 00000 n
-0000346437 00000 n
-0000351680 00000 n
-0000351330 00000 n
-0000357592 00000 n
-0000357745 00000 n
-0000357907 00000 n
-0000358058 00000 n
-0000358394 00000 n
-0000357204 00000 n
-0000352257 00000 n
-0000358208 00000 n
-0000357341 00000 n
-0000362948 00000 n
-0000363109 00000 n
-0000363270 00000 n
-0000363615 00000 n
-0000362766 00000 n
-0000358700 00000 n
-0000363429 00000 n
-0000362903 00000 n
-0000371049 00000 n
-0000371327 00000 n
-0000370883 00000 n
-0000363830 00000 n
-0000371203 00000 n
-0000890889 00000 n
-0000371020 00000 n
-0000378746 00000 n
-0000379027 00000 n
-0000378580 00000 n
-0000371607 00000 n
-0000378903 00000 n
-0000606323 00000 n
-0000378717 00000 n
-0000384356 00000 n
-0000384639 00000 n
-0000384190 00000 n
-0000379294 00000 n
-0000384515 00000 n
-0000384327 00000 n
-0000388656 00000 n
-0000388939 00000 n
-0000388490 00000 n
-0000384867 00000 n
-0000388815 00000 n
-0000388627 00000 n
-0000401970 00000 n
-0000407589 00000 n
-0000407748 00000 n
-0000402380 00000 n
-0000401804 00000 n
-0000389180 00000 n
-0000402134 00000 n
-0000401941 00000 n
-0000407907 00000 n
-0000407425 00000 n
-0000416000 00000 n
-0000416164 00000 n
-0000408326 00000 n
-0000407235 00000 n
-0000402634 00000 n
-0000408141 00000 n
-0000603838 00000 n
-0000407372 00000 n
-0000408593 00000 n
-0000408911 00000 n
-0000409237 00000 n
-0000409441 00000 n
-0000409919 00000 n
-0000410263 00000 n
-0000410467 00000 n
-0000416327 00000 n
-0000416480 00000 n
-0000416819 00000 n
-0000415810 00000 n
-0000411109 00000 n
-0000416633 00000 n
-0000415947 00000 n
-0000420383 00000 n
-0000420538 00000 n
-0000420879 00000 n
-0000420209 00000 n
-0000417114 00000 n
-0000420693 00000 n
-0000420346 00000 n
-0000424521 00000 n
-0000424210 00000 n
-0000421094 00000 n
-0000424331 00000 n
-0000424393 00000 n
-0000424457 00000 n
-0000444723 00000 n
-0000444416 00000 n
-0000424697 00000 n
-0000444537 00000 n
-0000450774 00000 n
-0000450591 00000 n
-0000444990 00000 n
-0000450712 00000 n
-0000891042 00000 n
-0000455622 00000 n
-0000455315 00000 n
-0000451067 00000 n
-0000455436 00000 n
-0000459242 00000 n
-0000459059 00000 n
-0000455837 00000 n
-0000459180 00000 n
-0000462755 00000 n
-0000462572 00000 n
-0000459483 00000 n
-0000462693 00000 n
-0000467129 00000 n
-0000466946 00000 n
-0000462996 00000 n
-0000467067 00000 n
-0000473955 00000 n
-0000474241 00000 n
-0000473789 00000 n
-0000467357 00000 n
-0000474117 00000 n
-0000473926 00000 n
-0000479923 00000 n
-0000479740 00000 n
-0000474573 00000 n
-0000479861 00000 n
-0000492107 00000 n
-0000491862 00000 n
-0000480138 00000 n
-0000491983 00000 n
-0000495586 00000 n
-0000495341 00000 n
-0000492348 00000 n
-0000495462 00000 n
-0000498104 00000 n
-0000497859 00000 n
-0000495736 00000 n
-0000497980 00000 n
-0000500826 00000 n
-0000500643 00000 n
-0000498306 00000 n
-0000500764 00000 n
-0000891195 00000 n
-0000503630 00000 n
-0000503447 00000 n
-0000500989 00000 n
-0000503568 00000 n
-0000506707 00000 n
-0000506524 00000 n
-0000503793 00000 n
-0000506645 00000 n
-0000509665 00000 n
-0000509482 00000 n
-0000506883 00000 n
-0000509603 00000 n
-0000512559 00000 n
-0000512376 00000 n
-0000509854 00000 n
-0000512497 00000 n
-0000516281 00000 n
-0000516098 00000 n
-0000512735 00000 n
-0000516219 00000 n
-0000519318 00000 n
-0000519135 00000 n
-0000516483 00000 n
-0000519256 00000 n
-0000524073 00000 n
-0000523890 00000 n
-0000519533 00000 n
-0000524011 00000 n
-0000889263 00000 n
-0000525747 00000 n
-0000525564 00000 n
-0000524353 00000 n
-0000525685 00000 n
-0000530465 00000 n
-0000530616 00000 n
-0000530768 00000 n
-0000530920 00000 n
-0000531072 00000 n
-0000531224 00000 n
-0000531376 00000 n
-0000531527 00000 n
-0000531678 00000 n
-0000531830 00000 n
-0000531982 00000 n
-0000532133 00000 n
-0000532281 00000 n
-0000532430 00000 n
-0000532582 00000 n
-0000532734 00000 n
-0000532884 00000 n
-0000533036 00000 n
-0000533188 00000 n
-0000533340 00000 n
-0000533491 00000 n
-0000533643 00000 n
-0000533795 00000 n
-0000533946 00000 n
-0000534096 00000 n
-0000534247 00000 n
-0000534397 00000 n
-0000534548 00000 n
-0000534699 00000 n
-0000534850 00000 n
-0000535002 00000 n
-0000535153 00000 n
-0000535304 00000 n
-0000535456 00000 n
-0000535608 00000 n
-0000535760 00000 n
-0000535911 00000 n
-0000536063 00000 n
-0000536215 00000 n
-0000536366 00000 n
-0000536517 00000 n
-0000536669 00000 n
-0000536821 00000 n
-0000536972 00000 n
-0000537124 00000 n
-0000537276 00000 n
-0000537427 00000 n
-0000537579 00000 n
-0000537731 00000 n
-0000537883 00000 n
-0000538034 00000 n
-0000538186 00000 n
-0000538338 00000 n
-0000538490 00000 n
-0000538641 00000 n
-0000538793 00000 n
-0000538945 00000 n
-0000539097 00000 n
-0000539247 00000 n
-0000539397 00000 n
-0000539545 00000 n
-0000539697 00000 n
-0000539847 00000 n
-0000539998 00000 n
-0000540151 00000 n
-0000540303 00000 n
-0000540456 00000 n
-0000540609 00000 n
-0000540762 00000 n
-0000540915 00000 n
-0000541068 00000 n
-0000541221 00000 n
-0000541371 00000 n
-0000541524 00000 n
-0000541676 00000 n
-0000541828 00000 n
-0000541980 00000 n
-0000542132 00000 n
-0000542285 00000 n
-0000542438 00000 n
-0000542590 00000 n
-0000542743 00000 n
-0000542896 00000 n
-0000543048 00000 n
-0000543201 00000 n
-0000543354 00000 n
-0000543506 00000 n
-0000543658 00000 n
-0000543811 00000 n
-0000543963 00000 n
-0000544115 00000 n
-0000544268 00000 n
-0000544421 00000 n
-0000544574 00000 n
-0000544727 00000 n
-0000544880 00000 n
-0000545032 00000 n
-0000545184 00000 n
-0000545337 00000 n
-0000545489 00000 n
-0000545642 00000 n
-0000545794 00000 n
-0000545947 00000 n
-0000546100 00000 n
-0000546252 00000 n
-0000546404 00000 n
-0000546557 00000 n
-0000546710 00000 n
-0000546863 00000 n
-0000547016 00000 n
-0000547168 00000 n
-0000547321 00000 n
-0000547474 00000 n
-0000547627 00000 n
-0000547779 00000 n
-0000547931 00000 n
-0000548083 00000 n
-0000548236 00000 n
-0000548385 00000 n
-0000553657 00000 n
-0000553809 00000 n
-0000548663 00000 n
-0000529294 00000 n
-0000525910 00000 n
-0000548536 00000 n
-0000529435 00000 n
-0000553962 00000 n
-0000554114 00000 n
-0000554266 00000 n
-0000554419 00000 n
-0000554572 00000 n
-0000554724 00000 n
-0000554877 00000 n
-0000555030 00000 n
-0000555183 00000 n
-0000555336 00000 n
-0000555487 00000 n
-0000555639 00000 n
-0000555792 00000 n
-0000555945 00000 n
-0000556098 00000 n
-0000556250 00000 n
-0000556402 00000 n
-0000556553 00000 n
-0000556704 00000 n
-0000556857 00000 n
-0000557010 00000 n
-0000557163 00000 n
-0000557316 00000 n
-0000557469 00000 n
-0000557622 00000 n
-0000557775 00000 n
-0000557928 00000 n
-0000558080 00000 n
-0000558232 00000 n
-0000558385 00000 n
-0000558538 00000 n
-0000558691 00000 n
-0000558844 00000 n
-0000558997 00000 n
-0000559150 00000 n
-0000559303 00000 n
-0000559456 00000 n
-0000559609 00000 n
-0000559760 00000 n
-0000559913 00000 n
-0000560066 00000 n
-0000560219 00000 n
-0000560371 00000 n
-0000560523 00000 n
-0000560675 00000 n
-0000560827 00000 n
-0000560980 00000 n
-0000561133 00000 n
-0000561286 00000 n
-0000561438 00000 n
-0000561589 00000 n
-0000561739 00000 n
-0000561890 00000 n
-0000562043 00000 n
-0000562196 00000 n
-0000562348 00000 n
-0000562501 00000 n
-0000562654 00000 n
-0000562807 00000 n
-0000562960 00000 n
-0000563113 00000 n
-0000563265 00000 n
-0000563417 00000 n
-0000563570 00000 n
-0000563723 00000 n
-0000563875 00000 n
-0000564028 00000 n
-0000564181 00000 n
-0000564334 00000 n
-0000564486 00000 n
-0000564639 00000 n
-0000564792 00000 n
-0000564945 00000 n
-0000565097 00000 n
-0000565250 00000 n
-0000565403 00000 n
-0000565556 00000 n
-0000565709 00000 n
-0000565861 00000 n
-0000566013 00000 n
-0000566166 00000 n
-0000566319 00000 n
-0000566470 00000 n
-0000566622 00000 n
-0000566775 00000 n
-0000566928 00000 n
-0000567080 00000 n
-0000567231 00000 n
-0000567381 00000 n
-0000567534 00000 n
-0000567687 00000 n
-0000567840 00000 n
-0000567992 00000 n
-0000568144 00000 n
-0000568297 00000 n
-0000568450 00000 n
-0000568603 00000 n
-0000568756 00000 n
-0000568908 00000 n
-0000569061 00000 n
-0000569214 00000 n
-0000569366 00000 n
-0000569518 00000 n
-0000569671 00000 n
-0000569824 00000 n
-0000569977 00000 n
-0000570129 00000 n
-0000570280 00000 n
-0000570432 00000 n
-0000570584 00000 n
-0000570735 00000 n
-0000573776 00000 n
-0000573928 00000 n
-0000570950 00000 n
-0000552476 00000 n
-0000548853 00000 n
-0000570886 00000 n
-0000891349 00000 n
-0000552618 00000 n
-0000574081 00000 n
-0000574234 00000 n
-0000574387 00000 n
-0000574538 00000 n
-0000574690 00000 n
-0000574842 00000 n
-0000574995 00000 n
-0000575148 00000 n
-0000575301 00000 n
-0000575454 00000 n
-0000575607 00000 n
-0000575760 00000 n
-0000575913 00000 n
-0000576066 00000 n
-0000576219 00000 n
-0000576371 00000 n
-0000576524 00000 n
-0000576677 00000 n
-0000576829 00000 n
-0000576982 00000 n
-0000577135 00000 n
-0000577288 00000 n
-0000577440 00000 n
-0000577593 00000 n
-0000577745 00000 n
-0000577898 00000 n
-0000578051 00000 n
-0000578202 00000 n
-0000578354 00000 n
-0000578507 00000 n
-0000578660 00000 n
-0000578812 00000 n
-0000578964 00000 n
-0000579116 00000 n
-0000579269 00000 n
-0000579422 00000 n
-0000579575 00000 n
-0000579728 00000 n
-0000579881 00000 n
-0000580033 00000 n
-0000580186 00000 n
-0000580338 00000 n
-0000580490 00000 n
-0000580642 00000 n
-0000580795 00000 n
-0000580948 00000 n
-0000581100 00000 n
-0000581253 00000 n
-0000581406 00000 n
-0000581558 00000 n
-0000581711 00000 n
-0000581927 00000 n
-0000573135 00000 n
-0000571127 00000 n
-0000581863 00000 n
-0000573277 00000 n
-0000584796 00000 n
-0000584950 00000 n
-0000585104 00000 n
-0000585258 00000 n
-0000585412 00000 n
-0000585571 00000 n
-0000585730 00000 n
-0000585889 00000 n
-0000586048 00000 n
-0000586206 00000 n
-0000586365 00000 n
-0000586517 00000 n
-0000586676 00000 n
-0000586840 00000 n
-0000587005 00000 n
-0000587164 00000 n
-0000587323 00000 n
-0000587487 00000 n
-0000587652 00000 n
-0000587817 00000 n
-0000587982 00000 n
-0000588147 00000 n
-0000588300 00000 n
-0000588458 00000 n
-0000588617 00000 n
-0000588776 00000 n
-0000588934 00000 n
-0000589087 00000 n
-0000589241 00000 n
-0000589400 00000 n
-0000589559 00000 n
-0000589718 00000 n
-0000589872 00000 n
-0000590027 00000 n
-0000590187 00000 n
-0000590347 00000 n
-0000590507 00000 n
-0000590667 00000 n
-0000590827 00000 n
-0000590987 00000 n
-0000591142 00000 n
-0000591297 00000 n
-0000591457 00000 n
-0000591617 00000 n
-0000591776 00000 n
-0000591935 00000 n
-0000594827 00000 n
-0000592152 00000 n
-0000584218 00000 n
-0000582104 00000 n
-0000592088 00000 n
-0000584360 00000 n
-0000594987 00000 n
-0000595146 00000 n
-0000595305 00000 n
-0000595464 00000 n
-0000595624 00000 n
-0000595779 00000 n
-0000595939 00000 n
-0000596098 00000 n
-0000596258 00000 n
-0000596417 00000 n
-0000596576 00000 n
-0000596735 00000 n
-0000596895 00000 n
-0000597055 00000 n
-0000597214 00000 n
-0000597375 00000 n
-0000597536 00000 n
-0000597691 00000 n
-0000597851 00000 n
-0000598017 00000 n
-0000598183 00000 n
-0000598343 00000 n
-0000598503 00000 n
-0000598662 00000 n
-0000598816 00000 n
-0000598971 00000 n
-0000599131 00000 n
-0000599291 00000 n
-0000599451 00000 n
-0000599611 00000 n
-0000599765 00000 n
-0000599925 00000 n
-0000600085 00000 n
-0000600245 00000 n
-0000600405 00000 n
-0000600565 00000 n
-0000600725 00000 n
-0000600885 00000 n
-0000601045 00000 n
-0000601205 00000 n
-0000601365 00000 n
-0000601520 00000 n
-0000601738 00000 n
-0000594276 00000 n
-0000592303 00000 n
-0000601674 00000 n
-0000594418 00000 n
-0000602157 00000 n
-0000602184 00000 n
-0000603139 00000 n
-0000602240 00000 n
-0000602340 00000 n
-0000603381 00000 n
-0000603995 00000 n
-0000604199 00000 n
-0000605611 00000 n
-0000604274 00000 n
-0000604375 00000 n
-0000605853 00000 n
-0000606481 00000 n
-0000606686 00000 n
-0000606831 00000 n
-0000606928 00000 n
-0000608098 00000 n
-0000606994 00000 n
-0000607091 00000 n
-0000608341 00000 n
-0000608956 00000 n
-0000609160 00000 n
-0000609264 00000 n
-0000611119 00000 n
-0000609422 00000 n
-0000609526 00000 n
-0000611359 00000 n
-0000612019 00000 n
-0000612223 00000 n
-0000613678 00000 n
-0000612302 00000 n
-0000612404 00000 n
-0000613926 00000 n
-0000614560 00000 n
-0000614770 00000 n
-0000614815 00000 n
-0000617971 00000 n
-0000615090 00000 n
-0000615196 00000 n
-0000618219 00000 n
-0000618949 00000 n
-0000619159 00000 n
-0000619184 00000 n
-0000623277 00000 n
-0000619526 00000 n
-0000619636 00000 n
-0000623520 00000 n
-0000624268 00000 n
-0000624472 00000 n
-0000624498 00000 n
-0000624750 00000 n
-0000626832 00000 n
-0000624903 00000 n
-0000625009 00000 n
-0000627071 00000 n
-0000627731 00000 n
-0000627933 00000 n
-0000635266 00000 n
-0000628362 00000 n
-0000628474 00000 n
-0000635506 00000 n
-0000636383 00000 n
-0000636586 00000 n
-0000643993 00000 n
-0000637030 00000 n
-0000637138 00000 n
-0000644233 00000 n
-0000645151 00000 n
-0000645355 00000 n
-0000647667 00000 n
-0000645629 00000 n
-0000645735 00000 n
-0000647907 00000 n
-0000648613 00000 n
-0000648817 00000 n
-0000656852 00000 n
-0000649274 00000 n
-0000649386 00000 n
-0000657093 00000 n
-0000658001 00000 n
-0000658206 00000 n
-0000660412 00000 n
-0000658332 00000 n
-0000658440 00000 n
-0000660654 00000 n
-0000661308 00000 n
-0000661513 00000 n
-0000663301 00000 n
-0000661624 00000 n
-0000661728 00000 n
-0000663548 00000 n
-0000664197 00000 n
-0000664407 00000 n
-0000671498 00000 n
-0000664831 00000 n
-0000664946 00000 n
-0000671738 00000 n
-0000672612 00000 n
-0000672815 00000 n
-0000677467 00000 n
-0000673158 00000 n
-0000673269 00000 n
-0000677716 00000 n
-0000678486 00000 n
-0000678697 00000 n
-0000681935 00000 n
-0000678893 00000 n
-0000679000 00000 n
-0000682177 00000 n
-0000682875 00000 n
-0000683080 00000 n
-0000689562 00000 n
-0000683462 00000 n
-0000683573 00000 n
-0000689806 00000 n
-0000690604 00000 n
-0000690809 00000 n
-0000699455 00000 n
-0000691246 00000 n
-0000691360 00000 n
-0000699696 00000 n
-0000700673 00000 n
-0000700878 00000 n
-0000704279 00000 n
-0000701238 00000 n
-0000701345 00000 n
-0000704520 00000 n
-0000705288 00000 n
-0000705493 00000 n
-0000705728 00000 n
-0000715151 00000 n
-0000706277 00000 n
-0000706406 00000 n
-0000715393 00000 n
-0000716392 00000 n
-0000716598 00000 n
-0000716705 00000 n
-0000716984 00000 n
-0000717091 00000 n
-0000717153 00000 n
-0000717348 00000 n
-0000717717 00000 n
-0000725376 00000 n
-0000718160 00000 n
-0000718268 00000 n
-0000725616 00000 n
-0000726548 00000 n
-0000726752 00000 n
-0000728356 00000 n
-0000726909 00000 n
-0000727015 00000 n
-0000728596 00000 n
-0000729255 00000 n
-0000729459 00000 n
-0000733245 00000 n
-0000729751 00000 n
-0000729857 00000 n
-0000733486 00000 n
-0000734219 00000 n
-0000734424 00000 n
-0000735983 00000 n
-0000734517 00000 n
-0000734618 00000 n
-0000736222 00000 n
-0000736848 00000 n
-0000737050 00000 n
-0000739287 00000 n
-0000737229 00000 n
-0000737335 00000 n
-0000739528 00000 n
-0000740197 00000 n
-0000740402 00000 n
-0000744618 00000 n
-0000740737 00000 n
-0000740851 00000 n
-0000744860 00000 n
-0000745613 00000 n
-0000745819 00000 n
-0000747179 00000 n
-0000745942 00000 n
-0000746048 00000 n
-0000747420 00000 n
-0000748065 00000 n
-0000748270 00000 n
-0000751720 00000 n
-0000748532 00000 n
-0000748639 00000 n
-0000751962 00000 n
-0000752678 00000 n
-0000762130 00000 n
-0000752884 00000 n
-0000773554 00000 n
-0000762381 00000 n
-0000781242 00000 n
-0000774308 00000 n
-0000794019 00000 n
-0000781472 00000 n
-0000801490 00000 n
-0000794347 00000 n
-0000809623 00000 n
-0000801716 00000 n
-0000819550 00000 n
-0000809856 00000 n
-0000827462 00000 n
-0000819817 00000 n
-0000840172 00000 n
-0000827693 00000 n
-0000847572 00000 n
-0000840530 00000 n
-0000855457 00000 n
-0000847797 00000 n
-0000864698 00000 n
-0000855705 00000 n
-0000872650 00000 n
-0000865006 00000 n
-0000880190 00000 n
-0000872934 00000 n
-0000887704 00000 n
-0000880429 00000 n
-0000891458 00000 n
-0000891589 00000 n
-0000899947 00000 n
-0000900583 00000 n
-0000901223 00000 n
-0000901868 00000 n
-0000902648 00000 n
-0000903566 00000 n
-0000904449 00000 n
-0000904577 00000 n
-0000904617 00000 n
-0000904749 00000 n
+0000251913 00000 n
+0000247399 00000 n
+0000246719 00000 n
+0000236800 00000 n
+0000247213 00000 n
+0000246856 00000 n
+0000252072 00000 n
+0000252226 00000 n
+0000252570 00000 n
+0000251731 00000 n
+0000247653 00000 n
+0000252446 00000 n
+0000617942 00000 n
+0000251868 00000 n
+0000259227 00000 n
+0000259571 00000 n
+0000259061 00000 n
+0000252837 00000 n
+0000259385 00000 n
+0000259198 00000 n
+0000265654 00000 n
+0000265814 00000 n
+0000265974 00000 n
+0000266127 00000 n
+0000266287 00000 n
+0000266602 00000 n
+0000266447 00000 n
+0000266883 00000 n
+0000265440 00000 n
+0000259890 00000 n
+0000266759 00000 n
+0000896870 00000 n
+0000265577 00000 n
+0000283963 00000 n
+0000284122 00000 n
+0000284468 00000 n
+0000283789 00000 n
+0000267215 00000 n
+0000284282 00000 n
+0000283926 00000 n
+0000290382 00000 n
+0000290537 00000 n
+0000290754 00000 n
+0000290208 00000 n
+0000284722 00000 n
+0000290692 00000 n
+0000290345 00000 n
+0000295631 00000 n
+0000295791 00000 n
+0000295951 00000 n
+0000296173 00000 n
+0000295449 00000 n
+0000290969 00000 n
+0000296111 00000 n
+0000295586 00000 n
+0000301350 00000 n
+0000301668 00000 n
+0000301184 00000 n
+0000296453 00000 n
+0000301544 00000 n
+0000301321 00000 n
+0000306976 00000 n
+0000307130 00000 n
+0000307294 00000 n
+0000307448 00000 n
+0000307601 00000 n
+0000307759 00000 n
+0000308165 00000 n
+0000306770 00000 n
+0000301974 00000 n
+0000307917 00000 n
+0000306907 00000 n
+0000321141 00000 n
+0000313023 00000 n
+0000313176 00000 n
+0000313770 00000 n
+0000312849 00000 n
+0000308380 00000 n
+0000313329 00000 n
+0000313515 00000 n
+0000614879 00000 n
+0000313578 00000 n
+0000313642 00000 n
+0000313706 00000 n
+0000897625 00000 n
+0000312986 00000 n
+0000317630 00000 n
+0000317789 00000 n
+0000318006 00000 n
+0000317456 00000 n
+0000313972 00000 n
+0000317944 00000 n
+0000317593 00000 n
+0000321649 00000 n
+0000320958 00000 n
+0000318234 00000 n
+0000321079 00000 n
+0000321203 00000 n
+0000321267 00000 n
+0000321331 00000 n
+0000321395 00000 n
+0000321459 00000 n
+0000321523 00000 n
+0000325678 00000 n
+0000325838 00000 n
+0000326060 00000 n
+0000325504 00000 n
+0000321864 00000 n
+0000325998 00000 n
+0000325641 00000 n
+0000329556 00000 n
+0000329716 00000 n
+0000329875 00000 n
+0000330034 00000 n
+0000330197 00000 n
+0000330608 00000 n
+0000329358 00000 n
+0000326236 00000 n
+0000330361 00000 n
+0000329495 00000 n
+0000339692 00000 n
+0000339323 00000 n
+0000330849 00000 n
+0000339444 00000 n
+0000345025 00000 n
+0000345361 00000 n
+0000344859 00000 n
+0000339959 00000 n
+0000345175 00000 n
+0000896727 00000 n
+0000344996 00000 n
+0000350612 00000 n
+0000350767 00000 n
+0000350921 00000 n
+0000351079 00000 n
+0000351234 00000 n
+0000351512 00000 n
+0000350414 00000 n
+0000345706 00000 n
+0000351388 00000 n
+0000894842 00000 n
+0000350551 00000 n
+0000356653 00000 n
+0000356812 00000 n
+0000362692 00000 n
+0000357276 00000 n
+0000356479 00000 n
+0000351805 00000 n
+0000356966 00000 n
+0000356616 00000 n
+0000362882 00000 n
+0000363035 00000 n
+0000363197 00000 n
+0000363347 00000 n
+0000363682 00000 n
+0000362494 00000 n
+0000357530 00000 n
+0000363496 00000 n
+0000362631 00000 n
+0000368237 00000 n
+0000368398 00000 n
+0000368559 00000 n
+0000368904 00000 n
+0000368055 00000 n
+0000363988 00000 n
+0000368718 00000 n
+0000897778 00000 n
+0000368192 00000 n
+0000376339 00000 n
+0000376617 00000 n
+0000376173 00000 n
+0000369119 00000 n
+0000376493 00000 n
+0000376310 00000 n
+0000382752 00000 n
+0000383033 00000 n
+0000382586 00000 n
+0000376897 00000 n
+0000382909 00000 n
+0000382723 00000 n
+0000389856 00000 n
+0000390139 00000 n
+0000389690 00000 n
+0000383300 00000 n
+0000390015 00000 n
+0000612403 00000 n
+0000389827 00000 n
+0000394168 00000 n
+0000394451 00000 n
+0000394002 00000 n
+0000390380 00000 n
+0000394327 00000 n
+0000394139 00000 n
+0000407484 00000 n
+0000412755 00000 n
+0000412914 00000 n
+0000407894 00000 n
+0000407318 00000 n
+0000394692 00000 n
+0000407648 00000 n
+0000407455 00000 n
+0000413072 00000 n
+0000421457 00000 n
+0000421621 00000 n
+0000421785 00000 n
+0000413493 00000 n
+0000412573 00000 n
+0000408148 00000 n
+0000413307 00000 n
+0000609918 00000 n
+0000412710 00000 n
+0000413760 00000 n
+0000414078 00000 n
+0000414404 00000 n
+0000414608 00000 n
+0000415086 00000 n
+0000415430 00000 n
+0000415634 00000 n
+0000421949 00000 n
+0000422099 00000 n
+0000422435 00000 n
+0000421259 00000 n
+0000416276 00000 n
+0000422249 00000 n
+0000421396 00000 n
+0000425996 00000 n
+0000426151 00000 n
+0000426492 00000 n
+0000425822 00000 n
+0000422730 00000 n
+0000426306 00000 n
+0000425959 00000 n
+0000430133 00000 n
+0000429822 00000 n
+0000426707 00000 n
+0000429943 00000 n
+0000430005 00000 n
+0000430069 00000 n
+0000450334 00000 n
+0000450027 00000 n
+0000430309 00000 n
+0000450148 00000 n
+0000897931 00000 n
+0000456387 00000 n
+0000456204 00000 n
+0000450601 00000 n
+0000456325 00000 n
+0000461261 00000 n
+0000460954 00000 n
+0000456680 00000 n
+0000461075 00000 n
+0000464905 00000 n
+0000464722 00000 n
+0000461476 00000 n
+0000464843 00000 n
+0000468418 00000 n
+0000468235 00000 n
+0000465146 00000 n
+0000468356 00000 n
+0000472793 00000 n
+0000472610 00000 n
+0000468659 00000 n
+0000472731 00000 n
+0000479356 00000 n
+0000479640 00000 n
+0000479190 00000 n
+0000473021 00000 n
+0000479516 00000 n
+0000479327 00000 n
+0000485323 00000 n
+0000485140 00000 n
+0000479972 00000 n
+0000485261 00000 n
+0000497507 00000 n
+0000497262 00000 n
+0000485538 00000 n
+0000497383 00000 n
+0000500983 00000 n
+0000500738 00000 n
+0000497748 00000 n
+0000500859 00000 n
+0000503670 00000 n
+0000503425 00000 n
+0000501133 00000 n
+0000503546 00000 n
+0000898084 00000 n
+0000506285 00000 n
+0000506102 00000 n
+0000503872 00000 n
+0000506223 00000 n
+0000508989 00000 n
+0000508806 00000 n
+0000506448 00000 n
+0000508927 00000 n
+0000511696 00000 n
+0000511513 00000 n
+0000509152 00000 n
+0000511634 00000 n
+0000514390 00000 n
+0000514207 00000 n
+0000511859 00000 n
+0000514328 00000 n
+0000517338 00000 n
+0000517155 00000 n
+0000514566 00000 n
+0000517276 00000 n
+0000521117 00000 n
+0000520934 00000 n
+0000517527 00000 n
+0000521055 00000 n
+0000524568 00000 n
+0000524385 00000 n
+0000521319 00000 n
+0000524506 00000 n
+0000529017 00000 n
+0000528834 00000 n
+0000524783 00000 n
+0000528955 00000 n
+0000896152 00000 n
+0000531205 00000 n
+0000531022 00000 n
+0000529297 00000 n
+0000531143 00000 n
+0000535823 00000 n
+0000535972 00000 n
+0000536123 00000 n
+0000536275 00000 n
+0000536427 00000 n
+0000536579 00000 n
+0000536731 00000 n
+0000536883 00000 n
+0000537034 00000 n
+0000537186 00000 n
+0000537336 00000 n
+0000537488 00000 n
+0000537637 00000 n
+0000537787 00000 n
+0000537939 00000 n
+0000538091 00000 n
+0000538243 00000 n
+0000538393 00000 n
+0000538545 00000 n
+0000538697 00000 n
+0000538849 00000 n
+0000539000 00000 n
+0000539152 00000 n
+0000539304 00000 n
+0000539454 00000 n
+0000539604 00000 n
+0000539755 00000 n
+0000539904 00000 n
+0000540054 00000 n
+0000540205 00000 n
+0000540356 00000 n
+0000540508 00000 n
+0000540660 00000 n
+0000540811 00000 n
+0000540963 00000 n
+0000541115 00000 n
+0000541267 00000 n
+0000541418 00000 n
+0000541570 00000 n
+0000541722 00000 n
+0000541873 00000 n
+0000542024 00000 n
+0000542176 00000 n
+0000542328 00000 n
+0000542479 00000 n
+0000542631 00000 n
+0000542783 00000 n
+0000542934 00000 n
+0000543086 00000 n
+0000543238 00000 n
+0000543390 00000 n
+0000543541 00000 n
+0000543693 00000 n
+0000543845 00000 n
+0000543996 00000 n
+0000544146 00000 n
+0000544298 00000 n
+0000544448 00000 n
+0000544601 00000 n
+0000544752 00000 n
+0000544905 00000 n
+0000545058 00000 n
+0000545211 00000 n
+0000545363 00000 n
+0000545516 00000 n
+0000545669 00000 n
+0000545821 00000 n
+0000545974 00000 n
+0000546127 00000 n
+0000546279 00000 n
+0000546432 00000 n
+0000546585 00000 n
+0000546738 00000 n
+0000546888 00000 n
+0000547041 00000 n
+0000547194 00000 n
+0000547347 00000 n
+0000547500 00000 n
+0000547652 00000 n
+0000547804 00000 n
+0000547957 00000 n
+0000548109 00000 n
+0000548262 00000 n
+0000548415 00000 n
+0000548568 00000 n
+0000548720 00000 n
+0000548873 00000 n
+0000549024 00000 n
+0000549175 00000 n
+0000549328 00000 n
+0000549480 00000 n
+0000549632 00000 n
+0000549785 00000 n
+0000549938 00000 n
+0000550091 00000 n
+0000550244 00000 n
+0000550397 00000 n
+0000550550 00000 n
+0000550703 00000 n
+0000550856 00000 n
+0000551009 00000 n
+0000551162 00000 n
+0000551312 00000 n
+0000551463 00000 n
+0000551614 00000 n
+0000551766 00000 n
+0000551918 00000 n
+0000552071 00000 n
+0000552224 00000 n
+0000552377 00000 n
+0000552529 00000 n
+0000552680 00000 n
+0000552831 00000 n
+0000552982 00000 n
+0000557863 00000 n
+0000558015 00000 n
+0000553260 00000 n
+0000534688 00000 n
+0000531368 00000 n
+0000553133 00000 n
+0000898237 00000 n
+0000534830 00000 n
+0000558168 00000 n
+0000558319 00000 n
+0000558471 00000 n
+0000558622 00000 n
+0000558775 00000 n
+0000558927 00000 n
+0000559080 00000 n
+0000559231 00000 n
+0000559382 00000 n
+0000559534 00000 n
+0000559686 00000 n
+0000559838 00000 n
+0000559991 00000 n
+0000560144 00000 n
+0000560297 00000 n
+0000560450 00000 n
+0000560602 00000 n
+0000560754 00000 n
+0000560906 00000 n
+0000561059 00000 n
+0000561212 00000 n
+0000561364 00000 n
+0000561516 00000 n
+0000561669 00000 n
+0000561822 00000 n
+0000561975 00000 n
+0000562128 00000 n
+0000562281 00000 n
+0000562434 00000 n
+0000562587 00000 n
+0000562740 00000 n
+0000562892 00000 n
+0000563044 00000 n
+0000563196 00000 n
+0000563348 00000 n
+0000563501 00000 n
+0000563654 00000 n
+0000563807 00000 n
+0000563960 00000 n
+0000564113 00000 n
+0000564266 00000 n
+0000564419 00000 n
+0000564572 00000 n
+0000564725 00000 n
+0000564876 00000 n
+0000565027 00000 n
+0000565179 00000 n
+0000565330 00000 n
+0000565480 00000 n
+0000565630 00000 n
+0000565782 00000 n
+0000565935 00000 n
+0000566088 00000 n
+0000566241 00000 n
+0000566394 00000 n
+0000566544 00000 n
+0000566697 00000 n
+0000566849 00000 n
+0000567002 00000 n
+0000567155 00000 n
+0000567308 00000 n
+0000567460 00000 n
+0000567613 00000 n
+0000567766 00000 n
+0000567919 00000 n
+0000568072 00000 n
+0000568225 00000 n
+0000568375 00000 n
+0000568527 00000 n
+0000568680 00000 n
+0000568833 00000 n
+0000568986 00000 n
+0000569138 00000 n
+0000569291 00000 n
+0000569444 00000 n
+0000569596 00000 n
+0000569749 00000 n
+0000569902 00000 n
+0000570055 00000 n
+0000570207 00000 n
+0000570359 00000 n
+0000570512 00000 n
+0000570665 00000 n
+0000570817 00000 n
+0000570969 00000 n
+0000571122 00000 n
+0000571275 00000 n
+0000571428 00000 n
+0000571579 00000 n
+0000571731 00000 n
+0000571884 00000 n
+0000572036 00000 n
+0000572188 00000 n
+0000572339 00000 n
+0000572489 00000 n
+0000572640 00000 n
+0000572791 00000 n
+0000576616 00000 n
+0000573006 00000 n
+0000556808 00000 n
+0000553450 00000 n
+0000572942 00000 n
+0000556950 00000 n
+0000576768 00000 n
+0000576920 00000 n
+0000577073 00000 n
+0000577226 00000 n
+0000577379 00000 n
+0000577532 00000 n
+0000577685 00000 n
+0000577837 00000 n
+0000577990 00000 n
+0000578142 00000 n
+0000578293 00000 n
+0000578443 00000 n
+0000578596 00000 n
+0000578749 00000 n
+0000578902 00000 n
+0000579055 00000 n
+0000579208 00000 n
+0000579360 00000 n
+0000579512 00000 n
+0000579665 00000 n
+0000579817 00000 n
+0000579970 00000 n
+0000580123 00000 n
+0000580276 00000 n
+0000580427 00000 n
+0000580579 00000 n
+0000580729 00000 n
+0000580882 00000 n
+0000581035 00000 n
+0000581188 00000 n
+0000581341 00000 n
+0000581494 00000 n
+0000581647 00000 n
+0000581800 00000 n
+0000581953 00000 n
+0000582106 00000 n
+0000582258 00000 n
+0000582410 00000 n
+0000582563 00000 n
+0000582715 00000 n
+0000582868 00000 n
+0000583021 00000 n
+0000583174 00000 n
+0000583326 00000 n
+0000583479 00000 n
+0000583630 00000 n
+0000583782 00000 n
+0000583935 00000 n
+0000584086 00000 n
+0000584238 00000 n
+0000584391 00000 n
+0000584544 00000 n
+0000584695 00000 n
+0000584846 00000 n
+0000584997 00000 n
+0000585148 00000 n
+0000585299 00000 n
+0000585450 00000 n
+0000585601 00000 n
+0000585754 00000 n
+0000585907 00000 n
+0000586060 00000 n
+0000586211 00000 n
+0000586364 00000 n
+0000586516 00000 n
+0000586668 00000 n
+0000586821 00000 n
+0000586974 00000 n
+0000587127 00000 n
+0000587280 00000 n
+0000587433 00000 n
+0000587586 00000 n
+0000587803 00000 n
+0000575795 00000 n
+0000573183 00000 n
+0000587739 00000 n
+0000575937 00000 n
+0000590666 00000 n
+0000590820 00000 n
+0000590974 00000 n
+0000591128 00000 n
+0000591282 00000 n
+0000591441 00000 n
+0000591600 00000 n
+0000591759 00000 n
+0000591918 00000 n
+0000592076 00000 n
+0000592235 00000 n
+0000592394 00000 n
+0000592548 00000 n
+0000592707 00000 n
+0000592872 00000 n
+0000593037 00000 n
+0000593196 00000 n
+0000593355 00000 n
+0000593520 00000 n
+0000593684 00000 n
+0000593849 00000 n
+0000594014 00000 n
+0000594179 00000 n
+0000594333 00000 n
+0000594491 00000 n
+0000594650 00000 n
+0000594808 00000 n
+0000594967 00000 n
+0000595120 00000 n
+0000595274 00000 n
+0000595433 00000 n
+0000595592 00000 n
+0000595751 00000 n
+0000595904 00000 n
+0000596059 00000 n
+0000596219 00000 n
+0000596379 00000 n
+0000596539 00000 n
+0000596699 00000 n
+0000596859 00000 n
+0000597019 00000 n
+0000597173 00000 n
+0000597328 00000 n
+0000597488 00000 n
+0000597648 00000 n
+0000597806 00000 n
+0000600750 00000 n
+0000598028 00000 n
+0000590088 00000 n
+0000587980 00000 n
+0000597964 00000 n
+0000590230 00000 n
+0000600905 00000 n
+0000601065 00000 n
+0000601224 00000 n
+0000601383 00000 n
+0000601542 00000 n
+0000601702 00000 n
+0000601857 00000 n
+0000602017 00000 n
+0000602176 00000 n
+0000602336 00000 n
+0000602495 00000 n
+0000602654 00000 n
+0000602813 00000 n
+0000602973 00000 n
+0000603133 00000 n
+0000603293 00000 n
+0000603454 00000 n
+0000603615 00000 n
+0000603770 00000 n
+0000603930 00000 n
+0000604096 00000 n
+0000604262 00000 n
+0000604422 00000 n
+0000604582 00000 n
+0000604741 00000 n
+0000604896 00000 n
+0000605050 00000 n
+0000605210 00000 n
+0000605370 00000 n
+0000605530 00000 n
+0000605690 00000 n
+0000605844 00000 n
+0000606004 00000 n
+0000606164 00000 n
+0000606324 00000 n
+0000606484 00000 n
+0000606644 00000 n
+0000606804 00000 n
+0000606964 00000 n
+0000607124 00000 n
+0000607284 00000 n
+0000607445 00000 n
+0000607600 00000 n
+0000607818 00000 n
+0000600190 00000 n
+0000598179 00000 n
+0000607754 00000 n
+0000600332 00000 n
+0000608237 00000 n
+0000608264 00000 n
+0000609219 00000 n
+0000608320 00000 n
+0000608420 00000 n
+0000609461 00000 n
+0000610075 00000 n
+0000610279 00000 n
+0000611691 00000 n
+0000610354 00000 n
+0000610455 00000 n
+0000611933 00000 n
+0000612561 00000 n
+0000612766 00000 n
+0000612911 00000 n
+0000613008 00000 n
+0000614178 00000 n
+0000613074 00000 n
+0000613171 00000 n
+0000614421 00000 n
+0000615036 00000 n
+0000615240 00000 n
+0000615344 00000 n
+0000617199 00000 n
+0000615502 00000 n
+0000615606 00000 n
+0000617439 00000 n
+0000618099 00000 n
+0000618303 00000 n
+0000619758 00000 n
+0000618382 00000 n
+0000618484 00000 n
+0000620006 00000 n
+0000620640 00000 n
+0000620850 00000 n
+0000620895 00000 n
+0000624051 00000 n
+0000621170 00000 n
+0000621276 00000 n
+0000624299 00000 n
+0000625029 00000 n
+0000625239 00000 n
+0000625264 00000 n
+0000629357 00000 n
+0000625606 00000 n
+0000625716 00000 n
+0000629600 00000 n
+0000630348 00000 n
+0000630552 00000 n
+0000630578 00000 n
+0000630830 00000 n
+0000632912 00000 n
+0000630983 00000 n
+0000631089 00000 n
+0000633151 00000 n
+0000633811 00000 n
+0000634013 00000 n
+0000641581 00000 n
+0000634446 00000 n
+0000634558 00000 n
+0000641821 00000 n
+0000642704 00000 n
+0000642907 00000 n
+0000650314 00000 n
+0000643351 00000 n
+0000643459 00000 n
+0000650554 00000 n
+0000651472 00000 n
+0000651676 00000 n
+0000653988 00000 n
+0000651950 00000 n
+0000652056 00000 n
+0000654228 00000 n
+0000654934 00000 n
+0000655138 00000 n
+0000663173 00000 n
+0000655595 00000 n
+0000655707 00000 n
+0000663414 00000 n
+0000664322 00000 n
+0000664527 00000 n
+0000666733 00000 n
+0000664653 00000 n
+0000664761 00000 n
+0000666975 00000 n
+0000667629 00000 n
+0000667834 00000 n
+0000669622 00000 n
+0000667945 00000 n
+0000668049 00000 n
+0000669869 00000 n
+0000670518 00000 n
+0000670728 00000 n
+0000678182 00000 n
+0000671156 00000 n
+0000671271 00000 n
+0000678422 00000 n
+0000679310 00000 n
+0000679513 00000 n
+0000684165 00000 n
+0000679856 00000 n
+0000679967 00000 n
+0000684414 00000 n
+0000685184 00000 n
+0000685395 00000 n
+0000688633 00000 n
+0000685591 00000 n
+0000685698 00000 n
+0000688875 00000 n
+0000689573 00000 n
+0000689778 00000 n
+0000696260 00000 n
+0000690160 00000 n
+0000690271 00000 n
+0000696504 00000 n
+0000697302 00000 n
+0000697507 00000 n
+0000706153 00000 n
+0000697944 00000 n
+0000698058 00000 n
+0000706394 00000 n
+0000707371 00000 n
+0000707576 00000 n
+0000710977 00000 n
+0000707936 00000 n
+0000708043 00000 n
+0000711218 00000 n
+0000711986 00000 n
+0000712191 00000 n
+0000712426 00000 n
+0000722099 00000 n
+0000712991 00000 n
+0000713120 00000 n
+0000722341 00000 n
+0000723350 00000 n
+0000723556 00000 n
+0000723663 00000 n
+0000723942 00000 n
+0000724049 00000 n
+0000724111 00000 n
+0000724306 00000 n
+0000724675 00000 n
+0000732334 00000 n
+0000725118 00000 n
+0000725226 00000 n
+0000732574 00000 n
+0000733506 00000 n
+0000733710 00000 n
+0000735314 00000 n
+0000733867 00000 n
+0000733973 00000 n
+0000735554 00000 n
+0000736213 00000 n
+0000736417 00000 n
+0000740203 00000 n
+0000736709 00000 n
+0000736815 00000 n
+0000740444 00000 n
+0000741177 00000 n
+0000741382 00000 n
+0000742941 00000 n
+0000741475 00000 n
+0000741576 00000 n
+0000743180 00000 n
+0000743806 00000 n
+0000744008 00000 n
+0000746245 00000 n
+0000744187 00000 n
+0000744293 00000 n
+0000746486 00000 n
+0000747155 00000 n
+0000747360 00000 n
+0000751515 00000 n
+0000747692 00000 n
+0000747806 00000 n
+0000751757 00000 n
+0000752502 00000 n
+0000752708 00000 n
+0000754068 00000 n
+0000752831 00000 n
+0000752937 00000 n
+0000754309 00000 n
+0000754954 00000 n
+0000755159 00000 n
+0000758609 00000 n
+0000755421 00000 n
+0000755528 00000 n
+0000758851 00000 n
+0000759567 00000 n
+0000769019 00000 n
+0000759773 00000 n
+0000780443 00000 n
+0000769270 00000 n
+0000788131 00000 n
+0000781197 00000 n
+0000800908 00000 n
+0000788361 00000 n
+0000808379 00000 n
+0000801236 00000 n
+0000816512 00000 n
+0000808605 00000 n
+0000826439 00000 n
+0000816745 00000 n
+0000834351 00000 n
+0000826706 00000 n
+0000847061 00000 n
+0000834582 00000 n
+0000854461 00000 n
+0000847419 00000 n
+0000862346 00000 n
+0000854686 00000 n
+0000871587 00000 n
+0000862594 00000 n
+0000879539 00000 n
+0000871895 00000 n
+0000887079 00000 n
+0000879823 00000 n
+0000894593 00000 n
+0000887318 00000 n
+0000898355 00000 n
+0000898486 00000 n
+0000906936 00000 n
+0000907572 00000 n
+0000908212 00000 n
+0000908856 00000 n
+0000909630 00000 n
+0000910548 00000 n
+0000911458 00000 n
+0000911561 00000 n
+0000911698 00000 n
+0000911738 00000 n
+0000911870 00000 n
trailer
-<< /Size 1568 /Root 1566 0 R /Info 1567 0 R /ID [ <886AF9986773F782DD17EA3C2149DA11> <886AF9986773F782DD17EA3C2149DA11> ] >>
+<< /Size 1579 /Root 1577 0 R /Info 1578 0 R /ID [ <3766370711C1B47523017B9B986D5A36> <3766370711C1B47523017B9B986D5A36> ] >>
startxref
-905316
+912434
%%EOF
diff --git a/macros/latex/contrib/nicematrix/nicematrix.tex b/macros/latex/contrib/nicematrix/nicematrix.tex
index 35de300099..a3a6f548c2 100644
--- a/macros/latex/contrib/nicematrix/nicematrix.tex
+++ b/macros/latex/contrib/nicematrix/nicematrix.tex
@@ -486,8 +486,7 @@ If this argument is empty, its default
value is |1-1|. If the number of rows is not specified, or equal to |*|, the
block extends until the last row (idem for the columns).
-\item The second argument is the content of the block. It's possible to use
-|\\| in that content to have a content on several lines. In |{NiceTabular}|,
+\item The second argument is the content of the block. In |{NiceTabular}|,
|{NiceTabular*}| and |{NiceTabularX}|, the content of the block is composed in
text mode whereas, in the other environments, it is composed in math mode.
\end{itemize}
@@ -614,13 +613,13 @@ should be loaded (by default, \pkg{nicematrix} only loads \textsc{pgf}) and,
if it's not, an error will be raised.} by using as options the value of that
key |tikz| (which must be a list of keys allowed for a TikZ path).
-\colorbox{yellow!50}{\textbf{New 6.24}}\enskip In fact, in the list of the keys
-provided by the user as value of |tikz|, it's possible to put a key
-\Definition{offset}. That key is not provided by TikZ but by \pkg{nicematrix}.
-It will narrow the rectangular frame corresponding to the block by a margin
-(horizontally and vertically) equal to the value (of that key |offset|). That
-new frame, a bit narrower, will be executed by TikZ with options which are the
-other keys in the list of keys provided as value to the key |tikz| of |\Block|.
+In fact, in the list of the keys provided by the user as value of |tikz|, it's
+possible to put a key \Definition{offset}. That key is not provided by TikZ but
+by \pkg{nicematrix}. It will narrow the rectangular frame corresponding to the
+block by a margin (horizontally and vertically) equal to the value (of that key
+|offset|). That new frame, a bit narrower, will be executed by TikZ with options
+which are the other keys in the list of keys provided as value to the key |tikz|
+of |\Block|.
For examples, cf. p.~\pageref{tikz-key-examples}.
\end{itemize}
@@ -694,9 +693,10 @@ In the columns with a fixed width (columns |w{...}{...}|, |W{...}{...}|,
formatted as a paragraph of that width.
\item The specification of the horizontal position provided by the type of
-column (|c|, |r| or |l|) is taken into account for the blocks (but the
-|\Block| may have its own specification of alignment:
-cf.~\ref{horizontal-block} p.~\pageref{horizontal-block}).
+column (|c|, |r| or |l|) is taken into account for the blocks. For a block in a
+column ot type |p{...}| (without option for |p|) , the alignment |c| will be
+used for the block. Of course, the |\Block| may have its own specification of
+alignment: cf.~\ref{horizontal-block} p.~\pageref{horizontal-block}.
\item The specifications of font specified for the column by a construction
|>{...}| in the preamble of the array are taken into account for the
@@ -800,8 +800,8 @@ first mandatory argument of |\Block| is |1-1|.}
\label{horizontal-block}
-The command |\Block| accepts the keys |l|, |c| and |r| for the horizontal
-position of its content.
+The command |\Block| accepts the keys \Definition{l}, \Definition{c} and
+\Definition{r} for the horizontal position of its content.
\medskip
\begin{Code}[width=10.6cm]
@@ -863,10 +863,10 @@ Rank & \Block{1-3}{First group} & & & \Block{1-3}{Second group} \\
\end{center}
\medskip
-In order to have an horizontal positionning of the content of the block
-computed with the limits of the columns of the LaTeX array (and not with the
-contents of those columns), one may use the key |L|, |R| and |C| of the
-command |\Block|.
+In order to have an horizontal positionning of the content of the block computed
+with the limits of the columns of the LaTeX array (and not with the contents of
+those columns), one may use the key \Definition{L}, \Definition{R} and
+\Definition{C} of the command |\Block|.
\medskip
Here is the same example with the key |C| for the first block.
@@ -904,6 +904,16 @@ Rank & \Block[C]{1-3}{First group} & & & \Block{1-3}{Second group} \\
\end{center}
+\bigskip
+\colorbox{yellow!50}{\bfseries New 6.28}\par\nobreak
+
+\smallskip
+The command |\Block| supports also a key |p|. With that key, the content of the
+block is formatted like a paragraph (as in a column of type |p|). That key may
+be used in conjunction with the key |l|, |c| or |r|, and, in that case, the
+paragraph is formatted with |\raggedright|, |\centering| or |\raggedleft|. With
+the key |j|, the paragraph is justified.
+
\subsection{Vertical position of the content of the block}
\label{vertical-pos-block}
@@ -925,7 +935,8 @@ array involved in the block.
No vertical margin is added. However, the contents of the block is (always)
composed by \pkg{nicematrix} in a |{minipage}|, a |{tabular}| or an |{array}|
-and, hence, there will still remain a margin (in most cases).
+and, hence, there will still remain a margin (in most cases). If needed, it's
+always possible to add a |\strut|...
\item With the key \Definition{B}, the content of the block is set downwards.
\end{itemize}
@@ -1028,6 +1039,61 @@ text & text \\
\end{scope}
+\subsection{\textbackslash\textbackslash\ and \& in the blocks}
+
+\index{ampersand-in-blocks}
+
+\colorbox{yellow!50}{\bfseries New 6.28}\par\nobreak
+
+The extension \pkg{nicemtrix} provides the ability to use |\\| and |&| directly
+in the content of a block (in order to format its contents) but there is some rectrictions.
+
+\begin{itemize}
+\item One must not use both |\\| and |&| in the same block.
+
+\item For |\\|, there is no other restriction. It's possible to use |\\| in a
+block to format a text on several rows.
+
+\item In order to use |&|, the key |ampersand-in-blocks| must been activated. Then,
+the block is divided in sub-blocks as illustrated below. Be careful: with
+|ampersand-in-blocks| is in force, the (main) argument of the command |\Block|
+is syntactically divided into sub-blocks by splitting on the ampersands~|&|, the
+ampersands between curly braced are protected but not those in an
+environment.\footnote{It's not possible to write
+ |\Block[ampersand-in-blocks]{}{\begin{array}{cc}1&2\end{array}}|. Of course,
+ it's possible without the key |ampersand-in-blocks|.}
+\end{itemize}
+
+When the key |ampersand-in-blocks|
+As we can see, the blocks (which was are in fact mono-cell blocks) are divided
+into sub-blocks of the same size. However, maybe the following code would be prefered.
+
+\medskip
+\begin{Code}[width=85mm]
+\begin{NiceTabular}{lccccc}%
+ [hvlines,ampersand-in-blocks]
+ & \Block{1-5}{the five first
+ natural numbers} \\
+3 & \Block{1-5}{one & two & three} \\
+4 & \Block{1-5}{one& two & three & four} \\
+5 & one & two & three & four & five \\
+\end{NiceTabular}
+\end{Code}
+%
+\begin{NiceTabular}{lccccc}%
+ [hvlines,ampersand-in-blocks]
+ & \Block{1-5}{the five first natural numbers} \\
+3 & \Block{1-5}{one & two & three} \\
+4 & \Block{1-5}{one& two & three & four} \\
+5 & one & two & three & four & five \\
+\end{NiceTabular}
+
+\medskip
+In this code, we have blocks of size |1-5| which are divided into three or four
+sub-blocks.
+
+
+
\index{Blocks@\textbf{Blocks in the tabulars}|)}
@@ -1264,7 +1330,7 @@ argument between square brackets for the characteristics of the rule.
\medskip
\begin{Code}[width=10cm]
-\begin{NiceTabular}{|c\emph{|[color=blue]}c|}
+\begin{NiceTabular}{ | c \emph{|[color=blue]} c |}
\Hline
a & b \\
\emph{\Hline[color=red]}
@@ -1587,7 +1653,8 @@ created by |\hline\hline| or \verb+||+ in the preamble of an environment;
\item the key |color| sets the color of the rules ;
\item the key |sep-color| sets the color between two successive rules (should be
-used only in conjonction with |multiplicity|).
+used only in conjonction with |multiplicity|). The name of that key is inspired
+by the command |\doublerulesepcolor| of \pkg{colortbl}.
\end{itemize}
\medskip
@@ -1625,6 +1692,51 @@ Product C & 5 & 4 & 1 \\
\bigskip
+The key |sep-color| with the value |white| may also be used in case of an
+horizontal double-rule on the top of a colored cell (if we want the space
+between both rules above the cell not colored by the color of the cell).
+
+\begin{scope}
+\NiceMatrixOptions
+ {
+ custom-line =
+ {
+ command = DoubleRule ,
+ multiplicity = 2 ,
+ sep-color = white
+ }
+ }
+
+
+\begin{Code}[width=10cm]
+\NiceMatrixOptions
+ {
+ custom-line =
+ {
+ command = DoubleRule ,
+ multiplicity = 2 ,
+ \emph{sep-color = white}
+ }
+ }
+
+\begin{NiceTabular}{ccc}[color-inside]
+one & two & three \\
+\emph{\DoubleRule}
+four & \cellcolor{yellow} five & six \\
+\end{NiceTabular}
+\end{Code}
+\begin{NiceTabular}{ccc}[color-inside]
+one & two & three \\
+\DoubleRule
+four & \cellcolor{yellow} five & six \\
+\end{NiceTabular}
+
+\end{scope}
+
+
+
+
+\bigskip
\item \emph{Second possibility}\par\nobreak
\index{tikzz@tikz!key of ``custom-line''}
@@ -1682,7 +1794,7 @@ seven & eight & nine
\end{scope}
\bigskip
-\item \emph{Third possibility} : the key |dotted|
+\item \emph{Third possibility} : the key \Definition{dotted}
\label{dotted}
\index{dotted (key of ``custom-line'')}
\indexcommand{hdottedline}
@@ -1696,15 +1808,15 @@ value of the key |total-width| is, in this case, equal to the diameter of the do
dotted rules are also used by \pkg{nicematrix} to draw continuous dotted rules
between cells of the matrix with |\Cdots|, |\Vdots|, etc. (cf. p.~\pageref{Cdots}).
-In fact, \pkg{nicematrix} defines by default the commands |\hdottedline| and
-|\cdottedline |and the letter ``|:|'' for those dotted
-rules.\footnote{However, it's possible to overwrite those definitions with a
-|custom-line| (in order, for example, to switch to dashed lines).}
+In fact, \pkg{nicematrix} defines by default the commands
+\Definition{hdottedline} and \Definition{cdottedline} and the letter ``|:|'' for
+those dotted rules.\footnote{However, it's possible to overwrite those
+ definitions with a |custom-line| (in order, for example, to switch to dashed
+ lines).}
\smallskip
\begin{Code}
-
-\NiceMatrixOptions % \textsl{present in nicematrix.sty}
+\NiceMatrixOptions \emph{% \textsl{present in nicematrix.sty}}
{
custom-line =
{
@@ -2453,14 +2565,13 @@ Dupont & Chantal & 15 janvier 1998 \\
\end{center}
\bigskip
-\colorbox{yellow!50}{\textbf{New 6.25}}\enskip Each use of the command
-|\rowlistcolors| (or |\rowcolors|, which is, in fact, a special case of
-|\rowlistcolors|) stops the potential coloring schemes\footnote{We say
- \emph{schemes} in plural form because it's possible to start simultaneously
- several coloring schemes if they apply on different columns.} specified by a
-previous command |\rowlistcolors|. In particular, it's possible to start
-coloring the rows with |\rowlistcolors{...}| and stop coloring by a command
-|\rowlistcolors| with an empty argument.
+Each use of the |\rowlistcolors| (or |\rowcolors|, which is, in fact, a
+special case of |\rowlistcolors|) stops the potential coloring
+schemes\footnote{We say \emph{schemes} in plural form because it's possible to
+ start simultaneously several coloring schemes if they apply on different
+ columns.} specified by a previous command |\rowlistcolors|. In particular,
+it's possible to start coloring the rows with |\rowlistcolors{...}| and stop
+coloring by a command |\rowlistcolors| with an empty argument.
\bigskip
\begin{Code}[width=10cm]
@@ -2493,10 +2604,9 @@ seven \\
\index{nocolor}
-\colorbox{yellow!50}{\textbf{New 6.26}}\enskip The extension \pkg{nicematrix}
-provides the special color |nocolor| which may be used in all the coloring
-commands provided by \pkg{nicematrix} (in the |\CodeBefore| or the array
-itself).
+The extension \pkg{nicematrix} provides the special color |nocolor| which may be
+used in all the coloring commands provided by \pkg{nicematrix} (in the
+|\CodeBefore| or the array itself).
The cells marked by this color won't be colored, whatever the other instructions
of coloring which may apply to these cells.
@@ -2686,7 +2796,7 @@ $\begin{array}{c}
\end{bNiceMatrix} \\ \\
\begin{bNiceMatrix}
1 & 1245345 \\ 345 & 2
-\end{bNiceMatrix}
+\end{bNiceMatrix} \\
\end{array}$
\emph{\end{NiceMatrixBlock}}
\end{Code}
@@ -2697,7 +2807,7 @@ $\begin{array}{c}
\end{bNiceMatrix} \\ \\
\begin{bNiceMatrix}
1 & 1245345 \\ 345 & 2
-\end{bNiceMatrix}
+\end{bNiceMatrix} \\
\end{array}$
\end{NiceMatrixBlock}
@@ -4198,9 +4308,8 @@ $\begin{pNiceMatrix}
\index{empty (key of \texttt{\textbackslash TikzEveryCell})}
\index{non empty (key of \texttt{\textbackslash TikzEveryCell})}
-
-\colorbox{yellow!50}{\textbf{New 6.24}}\enskip The command |\TikzEveryCell|
-execute with TikZ the rectangular path corresponding to each cell of the tabular
+The command |\TikzEveryCell|
+executes with TikZ the rectangular path corresponding to each cell of the tabular
with parameters of TikZ the argument of |\TikzEveryCell|. That argument must be
a list of \textsl{key=value} pairs which may be applied to a TikZ path. In fact,
the command applies to each of the tabular, except those in the exterior rows
@@ -5089,9 +5198,9 @@ environment of LaTeX which only put TeX commands before and after the content.}
\medskip
\index{light-syntax-expanded}
-\colorbox{yellow!50}{\textbf{New 6.27}}\enskip The key |light-syntax-expanded|
-has the same behaviour as the key |light-syntax| but the body of the
-environment is expanded (in the TeX sens\footnote{More precisely, it's a
+
+The key |light-syntax-expanded| has the same behaviour as the key |light-syntax|
+but the body of the environment is expanded (in the TeX sens\footnote{More precisely, it's a
expansion of type |e| of L3.}) before being splitted in lines (but
after the extraction of a potential |\CodeAfter|).
@@ -5649,9 +5758,14 @@ The package \pkg{nicematrix} creates a PGF/TikZ node merely called $i$ (with
the classical prefix) at the intersection of the horizontal rule of number~$i$
and the vertical rule of number~$i$ (more specifically the potential position
of those rules because maybe there are not actually drawn). The last node has
-also an alias called |last|. There is also a node called $i$|.5| midway
-between the node $i$ and the node $i+1$.
+also an alias called |last|.
+\smallskip
+\colorbox{yellow!50}{\bfseries Modification 6.28}\enskip There are also nodes
+called $i$|.1|, $i$|.2|, … , $i$|.9| between the node~$i$ and the node~$i+1$
+(before the version 6.28, there was only the node $i$|.5|).
+
+\smallskip
These nodes are available in the |\CodeBefore| and the |\CodeAfter|.
\begin{center}
@@ -6054,10 +6168,20 @@ environments of \pkg{nicematrix} are not affected).
\index{Incompatibilities}
The package \pkg{nicematrix} is not compatible with the class \cls{ieeeaccess}
-(because that class is not compatible with PGF/TikZ).\footnote{See
- \url{https://tex.stackexchange.com/questions/528975/error-loading-tikz-in-ieeeaccess-class}}
+because that class is not compatible with PGF/TikZ. However, there is a simple
+workaround by writing:\footnote{See
+ \url{https://tex.stackexchange.com/questions/528975/error-loading-tikz-in-ieeeaccess-class}}\par\nobreak
+
+\begin{Code}
+\let\TeXyear\year
+\documentclass{IEEEaccess}
+\let\year\TeXyear
+\end{Code}
+
+
\bigskip
+% the following requirement is still in force on April 23, 2024
In order to use \pkg{nicematrix} with the class \cls{aastex631}
(of the \emph{American Astronomical Society}), you have to
add the following lines in the preamble of your document :
@@ -6089,7 +6213,7 @@ may be wrong in some circonstances.
\bigskip
The package \pkg{nicematrix} is not fully compatible with the package
\pkg{arydshln} (because this package redefines many internals of \pkg{array})
-and does support the columns~|V| of \pkg{boldline} (because the letter |V| is
+and does not support the columns~|V| of \pkg{boldline} (because the letter |V| is
reserved for the columns~|V| of \pkg{varwidth}). By any means, \pkg{nicematrix}
provides, with the key |custom-line| (cf. part~\ref{custom-line},
p.~\pageref{custom-line}), tools to draw dashed rules and rules of different
@@ -6621,7 +6745,7 @@ with the environment |{NiceMatrixBlock}| and its option |auto-columns-width|.
last-col, code-for-last-col = \color{blue}\scriptstyle,
vlines = 5 ,
matrix/columns-type = r ,
- no-cell-nodes
+ no-cell-nodes % only for speedup
}
\setlength{\extrarowheight}{1mm}
@@ -6720,7 +6844,7 @@ composed with the maximal width, thanks to the boolean key
last-col, code-for-last-col = \color{blue}\scriptstyle,
vlines = 5 ,
matrix/columns-type = r ,
- no-cell-nodes
+ no-cell-nodes % only for speedup
}
\setlength{\extrarowheight}{1mm}
@@ -6933,14 +7057,14 @@ the command |\Block| is left empty, that means that the block is a mono-cell blo
\begin{Code}
-$\begin{pNiceArray}{>{\strut}cccc}[margin,rules/color=blue]
+$\begin{pNiceArray}{>{\strut}cccc}[margin,rules/color=blue,no-cell-nodes]
\emph{\Block[draw]{}{a_{11}}} & a_{12} & a_{13} & a_{14} \\
a_{21} & \Block[draw]{}{a_{22}} & a_{23} & a_{24} \\
a_{31} & a_{32} & \Block[draw]{}{a_{33}} & a_{34} \\
a_{41} & a_{42} & a_{43} & \Block[draw]{}{a_{44}} \\
\end{pNiceArray}$
\end{Code}
-\[\begin{pNiceArray}{>{\strut}cccc}[margin,rules/color=blue]
+\[\begin{pNiceArray}{>{\strut}cccc}[margin,rules/color=blue,no-cell-nodes]
\Block[draw]{}{a_{11}} & a_{12} & a_{13} & a_{14} \\
a_{21} & \Block[draw]{}{a_{22}} & a_{23} & a_{24} \\
a_{31} & a_{32} & \Block[draw]{}{a_{33}} & a_{34} \\
@@ -6966,7 +7090,8 @@ used−even when \pkg{colortbl} is not loaded).
\medskip
\begin{Code}
-\begin{pNiceArray}{>{\strut}cccc}[margin, extra-margin=2pt,color-inside]
+\begin{pNiceArray}{>{\strut}cccc}% <-- % mandatory
+ [margin, extra-margin=2pt,color-inside,no-cell-nodes]
\emph{\rowcolor{red!15}}A_{11} & A_{12} & A_{13} & A_{14} \\
A_{21} & \emph{\rowcolor{red!15}}A_{22} & A_{23} & A_{24} \\
A_{31} & A_{32} & \emph{\rowcolor{red!15}}A_{33} & A_{34} \\
@@ -6974,7 +7099,7 @@ used−even when \pkg{colortbl} is not loaded).
\end{pNiceArray}
\end{Code}
-\[\begin{pNiceArray}{>{\strut}cccc}[margin, extra-margin=2pt,color-inside]
+\[\begin{pNiceArray}{>{\strut}cccc}[margin, extra-margin=2pt,color-inside,no-cell-nodes]
\rowcolor{red!15}A_{11} & A_{12} & A_{13} & A_{14} \\
A_{21} & \rowcolor{red!15}A_{22} & A_{23} & A_{24} \\
A_{31} & A_{32} & \rowcolor{red!15}A_{33} & A_{34} \\
@@ -7281,7 +7406,16 @@ The successive versions of the file |nicematrix.sty| provided by TeXLive are ava
\nolinkurl{https:www.tug.org/svn/texlive/trunk/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty}
}
-\subsection*{Changes between version 6.25 and 6.26}
+\subsection*{Changes between version 6.27 and 6.28}
+
+Sub-blocks with the character |&| (when the key |ampersand-in-block| is in
+force).
+
+Keys |p| and |j| for the command |\Block|.
+
+PGF nodes i.1, i.2, i.3, etc.
+
+\subsection*{Changes between version 6.26 and 6.27}
New key |light-syntax-expanded|.
diff --git a/macros/latex/contrib/nmbib/Makefile b/macros/latex/contrib/nmbib/Makefile
index 4b59427e24..4f4135521a 100644
--- a/macros/latex/contrib/nmbib/Makefile
+++ b/macros/latex/contrib/nmbib/Makefile
@@ -7,7 +7,7 @@
#
PACKAGE=nmbib
-SAMPLES = nmsample.tex
+SAMPLES = nmbib-sample.tex
PERLSCRIPTS = nmbibtex.pl
@@ -62,9 +62,9 @@ distclean: veryclean
# Archive for the distribution. Includes typeset documentation
#
archive: all clean
- tar -czvf $(PACKAGE).tgz -C .. --exclude '*~' --exclude '*.tgz' --exclude CVS $(PACKAGE)
+ COPYFILE_DISABLE=1 tar -C .. -czvf ../$(PACKAGE).tgz --exclude '*~' --exclude '*.tgz' --exclude '*.zip' --exclude CVS --exclude '.git*' $(PACKAGE); mv ../$(PACKAGE).tgz .
zip: all clean
${MAKE} $(PACKAGE).sty
$(RM) *.log
- zip -r $(PACKAGE).zip * -x '*~' -x '*.tgz' -x '*.zip' -x CVS -x 'CVS/*' \ No newline at end of file
+ zip -r $(PACKAGE).zip * -x '*~' -x '*.tgz' -x '*.zip' -x CVS -x 'CVS/*'
diff --git a/macros/latex/contrib/nmbib/README b/macros/latex/contrib/nmbib/README
index 833fa7992e..00a3fe6b5d 100644
--- a/macros/latex/contrib/nmbib/README
+++ b/macros/latex/contrib/nmbib/README
@@ -9,4 +9,6 @@ provides other improvments.
Changes:
+ v1.05. nmsample is renamed to nmbib-sample to avoid TeXLive name clash
+
v1.04 An embarrassing typo corrected. \ No newline at end of file
diff --git a/macros/latex/contrib/nmbib/nmsample.pdf b/macros/latex/contrib/nmbib/nmbib-sample.pdf
index bfcf4824b5..cb3c42b895 100644
--- a/macros/latex/contrib/nmbib/nmsample.pdf
+++ b/macros/latex/contrib/nmbib/nmbib-sample.pdf
Binary files differ
diff --git a/macros/latex/contrib/nmbib/nmsample.tex b/macros/latex/contrib/nmbib/nmbib-sample.tex
index 56ff2a807a..56ff2a807a 100644
--- a/macros/latex/contrib/nmbib/nmsample.tex
+++ b/macros/latex/contrib/nmbib/nmbib-sample.tex
diff --git a/macros/latex/contrib/nmbib/nmbib.dtx b/macros/latex/contrib/nmbib/nmbib.dtx
index 24647ae06f..f84fc00877 100644
--- a/macros/latex/contrib/nmbib/nmbib.dtx
+++ b/macros/latex/contrib/nmbib/nmbib.dtx
@@ -1,7 +1,7 @@
% \iffalse
% $Id: nmbib.dtx,v 1.21 2015/07/27 20:22:45 boris Exp $
%
-%% Copyright 2015, Michael Cohen <mcohen@u-aizu.ac.jp>
+%% Copyright 2015-2024, Michael Cohen <mcohen@u-aizu.ac.jp>
%% and Boris Veytsman <borisv@lk.net>
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either
@@ -59,7 +59,7 @@
% \changes{v1.00}{2014/01/23}{Preliminary release}
% \changes{v1.03}{2015/07/25}{Added day field in the chrono bst}
%
-% \title{New Multibibliography Package\thanks{\copyright 2015 Michael
+% \title{New Multibibliography Package\thanks{\copyright 2015--2024 Michael
% Cohen and Boris Veytsman}}
% \author{Boris Veytsman\thanks{borisv@lk.net}
% \and Michael Cohen\thanks{mcohen@u-aizu.ac.jp}}
diff --git a/macros/latex/contrib/nmbib/nmbib.pdf b/macros/latex/contrib/nmbib/nmbib.pdf
index ba4aeed009..2258288207 100644
--- a/macros/latex/contrib/nmbib/nmbib.pdf
+++ b/macros/latex/contrib/nmbib/nmbib.pdf
Binary files differ
diff --git a/macros/latex/contrib/nmbib/nmbibtex.1 b/macros/latex/contrib/nmbib/nmbibtex.1
index bb7bb38f4b..d96236dde8 100644
--- a/macros/latex/contrib/nmbib/nmbibtex.1
+++ b/macros/latex/contrib/nmbib/nmbibtex.1
@@ -1,4 +1,5 @@
-.\" Automatically generated by Pod::Man 2.22 (Pod::Simple 3.07)
+.\" -*- mode: troff; coding: utf-8 -*-
+.\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43)
.\"
.\" Standard preamble:
.\" ========================================================================
@@ -15,141 +16,71 @@
.ft R
.fi
..
-.\" Set up some character translations and predefined strings. \*(-- will
-.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
-.\" double quote, and \*(R" will give a right double quote. \*(C+ will
-.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
-.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
-.\" nothing in troff, for use with C<>.
-.tr \(*W-
-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.
.ie n \{\
-. ds -- \(*W-
-. ds PI pi
-. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
-. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
-. ds L" ""
-. ds R" ""
. ds C` ""
. ds C' ""
'br\}
.el\{\
-. ds -- \|\(em\|
-. ds PI \(*p
-. ds L" ``
-. ds R" ''
+. ds C`
+. ds C'
'br\}
.\"
.\" Escape single quotes in literal strings from groff's Unicode transform.
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.\"
-.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" If the F register is >0, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
-.ie \nF \{\
-. de IX
-. tm Index:\\$1\t\\n%\t"\\$2"
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
..
-. nr % 0
-. rr F
-.\}
-.el \{\
-. de IX
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{\
+. if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
+. if !\nF==2 \{\
+. nr % 0
+. nr F 2
+. \}
+. \}
.\}
-.\"
-.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
-.\" Fear. Run. Save yourself. No user-serviceable parts.
-. \" fudge factors for nroff and troff
-.if n \{\
-. ds #H 0
-. ds #V .8m
-. ds #F .3m
-. ds #[ \f1
-. ds #] \fP
-.\}
-.if t \{\
-. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
-. ds #V .6m
-. ds #F 0
-. ds #[ \&
-. ds #] \&
-.\}
-. \" simple accents for nroff and troff
-.if n \{\
-. ds ' \&
-. ds ` \&
-. ds ^ \&
-. ds , \&
-. ds ~ ~
-. ds /
-.\}
-.if t \{\
-. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
-. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
-. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
-. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
-. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
-. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
-.\}
-. \" troff and (daisy-wheel) nroff accents
-.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
-.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
-.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
-.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
-.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
-.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
-.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
-.ds ae a\h'-(\w'a'u*4/10)'e
-.ds Ae A\h'-(\w'A'u*4/10)'E
-. \" corrections for vroff
-.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
-.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
-. \" for low resolution devices (crt and lpr)
-.if \n(.H>23 .if \n(.V>19 \
-\{\
-. ds : e
-. ds 8 ss
-. ds o a
-. ds d- d\h'-1'\(ga
-. ds D- D\h'-1'\(hy
-. ds th \o'bp'
-. ds Th \o'LP'
-. ds ae ae
-. ds Ae AE
-.\}
-.rm #[ #] #H #V #F C
+.rr rF
.\" ========================================================================
.\"
.IX Title "NMBIBTEX 1"
-.TH NMBIBTEX 1 "2015-04-25" "perl v5.10.1" "User Contributed Perl Documentation"
+.TH NMBIBTEX 1 2015-04-26 "perl v5.38.2" "User Contributed Perl Documentation"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
-.SH "NAME"
+.SH NAME
nmbibtex \- a program to compile bibliographies for the package nmbib
-.SH "SYNOPSIS"
+.SH SYNOPSIS
.IX Header "SYNOPSIS"
-nmbibtex \fI\s-1OPTIONS\s0\fR \fI\s-1FILE\s0\fR
-.SH "DESCRIPTION"
+nmbibtex \fIOPTIONS\fR \fIFILE\fR
+.SH DESCRIPTION
.IX Header "DESCRIPTION"
-nmbibtex calls \fIbibtex\fR\|(1) for all aux files produced by the package
+nmbibtex calls \fBbibtex\fR\|(1) for all aux files produced by the package
nmbib
-.SH "OPTIONS"
+.SH OPTIONS
.IX Header "OPTIONS"
-.IP "\fB\-h\fR" 4
+.IP \fB\-h\fR 4
.IX Item "-h"
Print the help information and exit
.IP "\fB\-min\-crossrefs\fR \fInumber\fR" 4
.IX Item "-min-crossrefs number"
-Send the option \f(CW\*(C`\-min\-crossref=NUMBER\*(C'\fR to \fIbibtex\fR\|(1)
-.IP "\fB\-terse\fR" 4
+Send the option \f(CW\*(C`\-min\-crossref=NUMBER\*(C'\fR to \fBbibtex\fR\|(1)
+.IP \fB\-terse\fR 4
.IX Item "-terse"
-Send the option \f(CW\*(C`\-terse\*(C'\fR to \fIbibtex\fR\|(1)
-.IP "\fB\-v\fR" 4
+Send the option \f(CW\*(C`\-terse\*(C'\fR to \fBbibtex\fR\|(1)
+.IP \fB\-v\fR 4
.IX Item "-v"
Print the copyright information and exit
.SH "AUTHORS AND LICENSE"
diff --git a/macros/latex/contrib/notebeamer/README.md b/macros/latex/contrib/notebeamer/README.md
index 70e97e633b..5f8a8393b9 100644
--- a/macros/latex/contrib/notebeamer/README.md
+++ b/macros/latex/contrib/notebeamer/README.md
@@ -1,22 +1,19 @@
-# The `NoteBeamer` document
+# The `notebeamer` package
-This template provides an easy way to input Beamers on note papers and make notebook quickly. It's optimized for Goodnotes' default paper size and there won’t have difference between papers.
+This package provides macros for inputting slides on note papers quickly.
-Modules of `NoteBeamer` provide the following supports:
-
-- Draft module to compile quickly;
-- Lighter or darker colors of the cover page;
-
-**Welcome to pull requests
-[here](https://github.com/xiamyphys/NoteBeamer).**
+**Welcome to pull requests [here](https://github.com/xiamyphys/notebeamer/pulls).**
## License
-This work may be distributed and/or modified under the conditions of the
-[LaTeX Project Public License](http://www.latex-project.org/lppl.txt),
-either version 1.3c of this license or (at your option) any later version.
+This work may be distributed and/or modified under the conditions of the [LaTeX Project Public License](http://www.latex-project.org/lppl.txt), either version 1.3c of this license or (at your option) any later version.
This work has the LPPL maintenance status `maintained`.
-The Current Maintainer of this work is
-[Mingyu Xia](https://www.ctan.org/author/xia-my). \ No newline at end of file
+The Current Maintainer of this work is [Mingyu Hsia](https://www.ctan.org/author/xia-my).
+
+## Derivative Works
+
+- [fadingimage](https://ctan.org/pkg/fadingimage): Package provides macros for inputting full width picture at the edges of pages quickly.
+
+- [litesolution](https://ctan.org/pkg/litesolution): Class designed for typesetting solutions of problems in exams, textbooks, etc.
diff --git a/macros/latex/contrib/notebeamer/doc/notebeamer.pdf b/macros/latex/contrib/notebeamer/doc/notebeamer.pdf
index 804e18b158..6a882ce051 100644
--- a/macros/latex/contrib/notebeamer/doc/notebeamer.pdf
+++ b/macros/latex/contrib/notebeamer/doc/notebeamer.pdf
Binary files differ
diff --git a/macros/latex/contrib/notebeamer/doc/notebeamer.tex b/macros/latex/contrib/notebeamer/doc/notebeamer.tex
index 79f518807f..c0e59b9287 100644
--- a/macros/latex/contrib/notebeamer/doc/notebeamer.tex
+++ b/macros/latex/contrib/notebeamer/doc/notebeamer.tex
@@ -1,6 +1,7 @@
\documentclass[11pt,svgnames]{article}
\usepackage[notelinecolor=MidnightBlue,notemargin=.75in]{notebeamer}
-\usepackage{geometry,titlesec,authblk,hyperref,hologo,pgfpages,lipsum}
+\usepackage{indentfirst,titlesec,authblk,hyperref,hologo,pgfpages,lipsum}
+\geometry{margin=1in}
\titleformat*{\section}{\bfseries\large}
\titleformat*{\subsection}{\bfseries\normalsize}
\hologoFontSetup{general=\sffamily}
@@ -14,9 +15,9 @@
\def\cmd#1{\textcolor{MidnightBlue}{\texttt{\string#1}}}
\title{\bfseries The \pkg{notebeamer} Package}
-\author{Mingyu Hsia, \href{mailto:xiamyphys@gmail.com}{\ttfamily xiamyphys@gmail.com}}
+\author{Mingyu Hsia, \href{mailto:xiamyphys@hdu.edu.cn}{\ttfamily xiamyphys@hdu.edu.cn}}
\affil{Hangzhou Dianzi University}
-\date{\today\quad Version 3.0a\thanks{\url{https://github.com/xiamyphys/notebeamer}}}
+\date{\today\quad Version 3.0b\thanks{\url{https://github.com/xiamyphys/notebeamer}}}
\begin{document}
\maketitle
@@ -25,13 +26,13 @@
This is the document for the \pkg{notebeamer} package, which provides an easy way to input slides on notepages quickly for making annotations.
-Welcome to feedback bugs or ideas via email \href{mailto:xiamyphys@gmail.com}{\ttfamily xiamyphys@gmail.com} or \href{https://github.com/xiamyphys/fadingimage}{GitHub}.
+Welcome to feedback bugs or ideas via email \href{mailto:xiamyphys@hdu.edu.cn}{\ttfamily xiamyphys@hdu.edu.cn} or \href{https://github.com/xiamyphys/notebeamer}{GitHub}.
\end{abstract}
\section{Installing \pkg{notebeamer} and loading it}
-Simply download \verb|notebeamer.cls| file from \href{https://github.com/xiamyphys/notebeamer}{GitHub} or \href{https://ctan.org/pkg/fadingimage}{CTAN} and save it under your working directory. However, I strongly suggest to use terminal to install and update all packages to the latest version
+Simply download \verb|notebeamer.cls| file from \href{https://github.com/xiamyphys/notebeamer}{GitHub} or \href{https://ctan.org/pkg/notebeamer}{CTAN} and save it under your working directory. However, I strongly suggest to use terminal to install and update all packages to the latest version
\begin{verbatim}
sudo tlmgr update --self --all
@@ -111,9 +112,15 @@ The \cmd{newnotepage} command can create empty notepage(s). If a star (*) is add
This commands will create notepages that were inserted images on the left sidnumber of slides per page and the last two variables can set the start page and end page of the PDF file you want to insert that assigned by the command \cmd{notechap}.
\appendix
-\section{The \pkg{litesolution} class}
+\section{Related packages}
-This class provides a lite design for typesetting solutions of exams, textbooks or other exercises. The \pkg{notebeamer} package is contained in the \pkg{litesolution} class now.
+\subsection{The \pkg{fadingimage} package}
+
+This package provides macros for inputting full width picture at the edges of pages quickly.
+
+\subsection{The \pkg{litesolution} class}
+
+This class is designed for typesetting solutions of problems in exams, textbooks, etc. The \pkg{notebeamer} package is contained in the \pkg{litesolution} class now.
\clearpage
\pgfpagesuselayout{4 on 1}[letterpaper]
diff --git a/macros/latex/contrib/notebeamer/tex/notebeamer.sty b/macros/latex/contrib/notebeamer/tex/notebeamer.sty
index 84e06bf49a..86189cb513 100644
--- a/macros/latex/contrib/notebeamer/tex/notebeamer.sty
+++ b/macros/latex/contrib/notebeamer/tex/notebeamer.sty
@@ -1,5 +1,5 @@
%% ***********************************************************
-%% Copyright 2024 by Mingyu Hsia <xiamyphys@gmail.com> *
+%% Copyright 2024 by Mingyu Hsia <xiamyphys@hdu.edu.cn> *
%% *
%% This work may be distributed and/or modified under *
%% the conditions of the LaTeX Project Public License *
@@ -21,7 +21,7 @@
%% ***********************************************************
% !Mode:: "TeX:UTF-8"
\NeedsTeXFormat{LaTeX2e}[2020/10/01]
-\ProvidesPackage{notebeamer}[2024/04/19 v3.0a notebeamer package]
+\ProvidesPackage{notebeamer}[2024/05/06 v3.0b Package provides macros for inputting slides on note papers quickly.]
\RequirePackage{xkeyval}
\DeclareOptionX{notelinecolor}{\gdef\@notelinecolor{#1}}
@@ -157,4 +157,4 @@
\loop
\unless\ifnum\tmpnum>#3 \@fourbeamer{\valnum0}{\valnum1}{\valnum2}{\valnum3}
\advance\tmpnum by4
- \repeat\fi} \ No newline at end of file
+ \repeat\fi}
diff --git a/macros/latex/contrib/osda/README.md b/macros/latex/contrib/osda/README.md
index 03de404407..07396d51d5 100644
--- a/macros/latex/contrib/osda/README.md
+++ b/macros/latex/contrib/osda/README.md
@@ -28,7 +28,7 @@ above.
```
\usepackage[
- 2023,
+ 2024,
cc-by,
pages={1}{6},
url=https://osda.ws/r/aaVHo,
@@ -59,7 +59,7 @@ pdflatex osda.dtx
## License information
-Copyright 2023 by Christian Krieg (christian@osda.ws)
+Copyright 2023-2024 by Christian Krieg (christian@osda.ws)
This work (excluding the OSDA logo) may be distributed and/or modified under the
conditions of the LaTeX Project Public License, either version 1.3 of this
diff --git a/macros/latex/contrib/osda/example.png b/macros/latex/contrib/osda/example.png
index 4f8b01b361..2b1a2f49b1 100644
--- a/macros/latex/contrib/osda/example.png
+++ b/macros/latex/contrib/osda/example.png
Binary files differ
diff --git a/macros/latex/contrib/osda/osda.dtx b/macros/latex/contrib/osda/osda.dtx
index b0ad170e90..7406112206 100644
--- a/macros/latex/contrib/osda/osda.dtx
+++ b/macros/latex/contrib/osda/osda.dtx
@@ -1,7 +1,7 @@
% \iffalse meta-comment
%
% osda.ins
-% Copyright 2023 by Christian Krieg (christian@osda.ws)
+% Copyright 2023-2024 by Christian Krieg (christian@osda.ws)
%
% This work (excluding the OSDA logo) may be distributed and/or modified under
% the conditions of the LaTeX Project Public License, either version 1.3 of this
@@ -29,7 +29,7 @@
%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<package>\ProvidesPackage{osda}
%<*package>
- [2023/04/03 v1.2.0 OSDA copyright notice generator]
+ [2024/05/01 v1.4.0 OSDA copyright notice generator]
%</package>
%
%<*driver>
@@ -52,7 +52,7 @@
moredelim=**[is][\ttfamily\bfseries\color{red}]{(*}{*)},
}
\usepackage[
- 2023,
+ 2024,
cc-by,
pages={1}{6},
url=https://osda.ws/r/0slLz,
@@ -93,6 +93,11 @@
% \changes{v1.0.0}{2023/03/30}{Initial version}
% \changes{v1.1.0}{2023/04/03}{Adding 'auto' option}
% \changes{v1.2.0}{2023/04/03}{Updating README}
+% \changes{v1.3.0}{2023/04/04}{
+% Adding presets for the years 2019 and 2020,
+% adding inline OSDA logo
+% }
+% \changes{v1.4.0}{2024/05/01}{Adding preset for 2020}
%
% \GetFileInfo{osda.sty}
%
@@ -107,7 +112,7 @@
% \author{Christian Krieg\\ Workshop on Open-Source Design Automation (OSDA) \\
% \texttt{christian@osda.ws}
% }
-% \date{April 03, 2023}
+% \date{May 01, 2024}
%
% \newcommand{\Example}{\vspace{1em}\noindent\textbf{Example:}\vspace{1em}}
%
@@ -139,7 +144,7 @@
% \begin{lstlisting}[gobble=6,float=tb,label=lst:usage-example,caption={An
% example for the most-frequent use case to use this package}]
% \usepackage[
-% 2023,
+% 2024,
% cc-by,
% pages={1}{6},
% url=https://osda.ws/r/0slLz,
@@ -190,7 +195,7 @@
% setting package options}]
% \usepackage[auto=false]{osda}
% \osdaset{
-% 2023,
+% 2024,
% cc-by,
% pages={1}{6},
% url=https://osda.ws/r/0slLz,
@@ -237,10 +242,13 @@
% example is given in \Cref{lst:option-year}.
%
% \begin{lstlisting}[gobble=6, label=lst:option-year, caption={Setting all
-% workshop-related options for the year 2023}]
-% \osdaset{2023}
+% workshop-related options for the year 2024}]
+% \osdaset{2024}
% \end{lstlisting}
%
+% Currently, presets for the following years are available:
+% |2024|, |2023|, |2020|, |2019|
+%
% \subsection{Paper license}
%
% \DescribeMacro{cc-by}
@@ -436,6 +444,36 @@
% \end{tabular}
% \end{table}
%
+% \section{Useful commands}
+%
+% \subsection{Inline logo}
+%
+% \DescribeMacro{\osda}
+% This command prints the OSDA logo inline as shown in the following examples at
+% different font sizes (\Cref{lst:inline-logo}):
+%
+% \begin{lstlisting}[gobble=6, label=lst:inline-logo, caption={Inline OSDA logo}]
+% Hello there, \osda{} is the place to be
+%
+% {\large I agree, \osda{} is the place to be!}
+%
+% {\small I agree, \osda{} is the place to be!}
+%
+% {\Huge I agree, \osda{} is the place to be!}
+%
+% {\tiny I agree, \osda{} is the place to be!}
+% \end{lstlisting}
+%
+% Hello there, \osda{} is the place to be
+%
+% {\large I agree, \osda{} is the place to be!}
+%
+% {\small I agree, \osda{} is the place to be!}
+%
+% {\Huge I agree, \osda{} is the place to be!}
+%
+% {\tiny I agree, \osda{} is the place to be!}
+%
%
% \StopEventually{}
%
@@ -560,6 +598,19 @@
%
% Default values for specific editions of OSDA
%
+ 2024/.style={
+ proceedings/title = Proceedings of the 4th Workshop on Open-Source Design Automation (OSDA),
+ workshop/counter = 4th,
+ workshop/longname = Workshop on Open-Source Design Automation,
+ workshop/acronym = OSDA,
+ location/city = Valencia,
+ location/country = Spain,
+ date/month = March,
+ date/day = 25,
+ date/year = 2024,
+ hostconference/longname = {Design, Automation, and Test in Europe Conference},
+ hostconference/acronym = DATE,
+ },
2023/.style={
proceedings/title = Proceedings of the 3rd Workshop on Open-Source Design Automation (OSDA),
workshop/counter = 3rd,
@@ -573,6 +624,32 @@
hostconference/longname = {Design, Automation, and Test in Europe Conference},
hostconference/acronym = DATE,
},
+ 2020/.style={
+ proceedings/title = Proceedings of the 2nd Workshop on Open-Source Design Automation (OSDA),
+ workshop/counter = 2nd,
+ workshop/longname = Workshop on Open-Source Design Automation,
+ workshop/acronym = OSDA,
+ location/city = Grenoble,
+ location/country = France,
+ date/month = March,
+ date/day = 13,
+ date/year = 2020,
+ hostconference/longname = {Design, Automation, and Test in Europe Conference},
+ hostconference/acronym = DATE,
+ },
+ 2019/.style={
+ proceedings/title = Proceedings of the 1st Workshop on Open-Source Design Automation (OSDA),
+ workshop/counter = 1st,
+ workshop/longname = Workshop on Open-Source Design Automation,
+ workshop/acronym = OSDA,
+ location/city = Florence,
+ location/country = Italy,
+ date/month = March,
+ date/day = 29,
+ date/year = 2019,
+ hostconference/longname = {Design, Automation, and Test in Europe Conference},
+ hostconference/acronym = DATE,
+ },
%
% Licenses
%
@@ -737,6 +814,24 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}{\osda}
+%%
+%% |\osda|
+%%
+%% This command prints the OSDA logo inline at a height of 1ex
+%%
+%% Usage:
+%%
+%% |\osda{}|
+%%
+% \begin{macrocode}
+%
+\newcommand{\osda}{\raisebox{.6\baselineskip}{\osdalogo{.7\baselineskip}}}
+%
+% \end{macrocode}
+% \end{macro}
+%
+%
% \begin{macro}{\osdanotice}
%%
%% |\osdanotice|
diff --git a/macros/latex/contrib/osda/osda.ins b/macros/latex/contrib/osda/osda.ins
index a76841c47b..21524ff0ac 100644
--- a/macros/latex/contrib/osda/osda.ins
+++ b/macros/latex/contrib/osda/osda.ins
@@ -1,5 +1,5 @@
%% osda.ins
-%% Copyright 2023 by Christian Krieg <christian@osda.ws>
+%% Copyright 2023-2024 by Christian Krieg <christian@osda.ws>
%%
%% This work (excluding the OSDA logo) may be distributed and/or modified under
%% the conditions of the LaTeX Project Public License, either version 1.3
@@ -29,7 +29,7 @@
This is a generated file.
-Copyright (C) 2023 by Christian Krieg <christian@osda.ws>
+Copyright (C) 2023-2024 by Christian Krieg <christian@osda.ws>
This work (excluding the OSDA logo) may be distributed and/or modified under the
conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/osda/osda.pdf b/macros/latex/contrib/osda/osda.pdf
index 51bdfa0b02..5399ddcda0 100644
--- a/macros/latex/contrib/osda/osda.pdf
+++ b/macros/latex/contrib/osda/osda.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md b/macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md
index b8bbe05c30..9536e081a4 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md
+++ b/macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md
@@ -4,8 +4,15 @@ first release 0.95a, 2021-02-23 will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
this project uses date-based 'snapshot' version identifiers.
+## [2024-05-23]
+### Fixed
+ - l3pdfmeta: adapted wtpdf declaration uri to corrected version.
+ - colorlinks=false no longer resets pdfborder (issue #69)
+ - added support to omit CidSet with luatex
+
## [2024-04-09]
+Version: 2024-04-09, 0.96h
### Fixed
- structure destinations for boxed destinations
diff --git a/macros/latex/contrib/pdfmanagement-testphase/README.md b/macros/latex/contrib/pdfmanagement-testphase/README.md
index 136f8e6c7c..e3c9c1be02 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/README.md
+++ b/macros/latex/contrib/pdfmanagement-testphase/README.md
@@ -1,6 +1,6 @@
# LaTeX PDF management testphase bundle
-Version: 0.96h, 2024-04-09
+Version: 0.96i, 2024-05-23
This package is used during a test phase to load the new PDF management code
of LaTeX.
diff --git a/macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty b/macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty
index b11df8acf7..08170653e8 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty
+++ b/macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty
@@ -24,7 +24,7 @@
%% This file has the LPPL maintenance status "maintained".
%%
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
-\ProvidesPackage{color-ltx}[2024-04-09 v0.96h
+\ProvidesPackage{color-ltx}[2024-05-23 v0.96i
Standard LaTeX Color (patched for l3color, part of pdfmanagement-testphase, original version 2022/01/06 v1.3d) (DPC)]
\edef\Gin@codes{%
\catcode`\noexpand\^^A\the\catcode`\^^A\relax
diff --git a/macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty b/macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty
index 19d5375f7e..95a0b0a612 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty
+++ b/macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty
@@ -19,7 +19,7 @@
%
% for those people who are interested.
\NeedsTeXFormat{LaTeX2e}[2020/10/01]
-\ProvidesExplPackage{colorspace-patches-tmp-ltx}{2024-04-09}{0.96h}
+\ProvidesExplPackage{colorspace-patches-tmp-ltx}{2024-05-23}{0.96i}
{temporay patches to for the colorspace package to test pdfresource management ... UF}
% colorspace can define more models, that l3color can't yet handle.
diff --git a/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx b/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx
index d6595449fe..9a8ee06546 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx
@@ -82,7 +82,7 @@
% }^^A
% }
%
-% \date{Version 0.96h, released 2024-04-09}
+% \date{Version 0.96i, released 2024-05-23}
%
% \maketitle
% \begin{documentation}
@@ -486,7 +486,8 @@
% would arise it would possible to change this.
% \subsection{Changed behaviour}
% \begin{description}
-% \item[colorlinks] |colorlinks| will as before disable the |pdfborder|, but it is possible
+% \item[colorlinks] |colorlinks| or |colorlinks=true| will as before disable the |pdfborder|
+% (|colorlinks=false| will leave the |pdfborder| untouched), but it is possible
% to use the key in the document at any time, or to reenable the border if wanted.
% Internally |colorlinks| \& friends will no longer define/undefine
% |\Hy@colorlink|, but instead use the hooks provided by the \pkg{l3pdfannot} package.
@@ -964,7 +965,7 @@
%<@@=hyp>
% \end{macrocode}
% \begin{macrocode}
-\ProvidesFile{hgeneric-testphase.def}[2024-04-09 v0.96h %
+\ProvidesFile{hgeneric-testphase.def}[2024-05-23 v0.96i %
generic Hyperref driver for the LaTeX PDF management testphase bundle]
\RequirePackage{etoolbox} %why?
@@ -2652,7 +2653,8 @@
% \begin{macrocode}
\keys_define:nn { hyp }
{
- ,colorlinks .meta:n =
+ ,colorlinks .choice:
+ ,colorlinks / true .meta:n =
{
,pdfborder={0~0~0}
,pdfborderstyle=
@@ -2662,6 +2664,14 @@
,colormenu =#1
,colorfile =#1
}
+ ,colorlinks / false .meta:n =
+ {
+ ,colorurl =#1
+ ,colorlink =#1
+ ,colorrun =#1
+ ,colormenu =#1
+ ,colorfile =#1
+ }
,colorlinks .default:n = {true}
}
% \end{macrocode}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdf b/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdf
index 8861d8b53f..3ff91e5445 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx
index 75e944cf82..f655a84c26 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx
@@ -45,7 +45,7 @@
% }^^A
% }
%
-% \date{Version 0.96h, released 2024-04-09}
+% \date{Version 0.96i, released 2024-05-23}
%
% \maketitle
%
@@ -56,27 +56,27 @@
% \begin{macrocode}
%<drivers>\ProvidesExplFile
%<*dvipdfmx>
- {l3backend-testphase-dvipdfmx.def}{2024-04-09}{}
+ {l3backend-testphase-dvipdfmx.def}{2024-05-23}{}
{LaTeX~PDF~management~testphase~bundle~backend~support: dvipdfmx}
%</dvipdfmx>
%<*dvips>
- {l3backend-testphase-dvips.def}{2024-04-09}{}
+ {l3backend-testphase-dvips.def}{2024-05-23}{}
{LaTeX~PDF~management~testphase~bundle~backend~support: dvips}
%</dvips>
%<*dvisvgm>
- {l3backend-testphase-dvisvgm.def}{2024-04-09}{}
+ {l3backend-testphase-dvisvgm.def}{2024-05-23}{}
{LaTeX~PDF~management~testphase~bundle~backend~support: dvisvgm}
%</dvisvgm>
%<*luatex>
- {l3backend-testphase-luatex.def}{2024-04-09}{}
+ {l3backend-testphase-luatex.def}{2024-05-23}{}
{LaTeX~PDF~management~testphase~bundle~backend~support: PDF output (LuaTeX)}
%</luatex>
%<*pdftex>
- {l3backend-testphase-pdftex.def}{2024-04-09}{}
+ {l3backend-testphase-pdftex.def}{2024-05-23}{}
{LaTeX~PDF~management~testphase~bundle~backend~support: PDF output (pdfTeX)}
%</pdftex>
%<*xdvipdfmx>
- {l3backend-testphase-xetex.def}{2024-04-09}{}
+ {l3backend-testphase-xetex.def}{2024-05-23}{}
{LaTeX~PDF~management~testphase~bundle~backend~support: XeTeX}
%</xdvipdfmx>
% \end{macrocode}
@@ -2528,6 +2528,23 @@
% \end{macrocode}
% \end{macro}
%
+% With luatex it is for some standards also necessary to suppress the CidSet
+% entry in the fonts (with xetex there seem to be no problem.
+% \begin{macro}{\@@_backend_omit_cidset:n}
+% The option to omit /Charset exists already for quite some time for the two
+% engines.
+% \begin{macrocode}
+%<*xdvipdfmx|dvipdfmx|dvips|dvisvgm|pdftex>
+\cs_new_protected:Npn \@@_backend_omit_cidset:n #1 {} %#1 number
+%</xdvipdfmx|dvipdfmx|dvips|dvisvgm|pdftex>
+%<*luatex>
+\cs_new_protected:Npn \@@_backend_omit_cidset:n #1 %#1 number
+ {
+ \tex_pdfvariable:D omitcidset = #1 \scan_stop:
+ }
+%</luatex>
+% \end{macrocode}
+% \end{macro}
%
% \subsection{lua code for lualatex}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdf
index c4e96784b0..09b998ff81 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx
index 4b04b4308b..ef02e9cf5a 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx
@@ -48,7 +48,7 @@
% }^^A
% }
%
-% \date{Version 0.96h, released 2024-04-09}
+% \date{Version 0.96i, released 2024-05-23}
%
% \maketitle
% \begin{documentation}
@@ -432,7 +432,7 @@
% \begin{macrocode}
%<@@=pdfannot>
%<*header>
-\ProvidesExplPackage{l3pdfannot}{2024-04-09}{0.96h}
+\ProvidesExplPackage{l3pdfannot}{2024-05-23}{0.96i}
{PDF-annotations}
\RequirePackage{l3pdfdict}
%</header>
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdf
index a64cceab21..1000505030 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx
index 82d0979a02..514595e41c 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Version 0.96h, released 2024-04-09}
+% \date{Version 0.96i, released 2024-05-23}
%
% \maketitle
% \begin{documentation}
@@ -208,7 +208,7 @@
% \begin{macrocode}
%<@@=pdfdict>
%<*header>
-\ProvidesExplPackage{l3pdfdict}{2024-04-09}{0.96h}
+\ProvidesExplPackage{l3pdfdict}{2024-05-23}{0.96i}
{Tools for PDF dictionaries (LaTeX PDF management testphase bundle)}
%</header>
% \end{macrocode}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdf
index d47028ee51..555a105c9a 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx
index 6093a6d442..f4d71c50e8 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Version 0.96h, released 2024-04-09}
+% \date{Version 0.96i, released 2024-05-23}
%
% \maketitle
% \begin{documentation}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdf
index 81bb3eab72..34fe45aec2 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx
index 534959fcaf..7f702d2934 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx
@@ -64,7 +64,7 @@
% }^^A
% }
%
-% \date{Version 0.96h, released 2024-04-09}
+% \date{Version 0.96i, released 2024-05-23}
%
% \maketitle
% \begin{documentation}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdf
index e680f95935..3ce7e4651f 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx
index 2a114768be..e645449393 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Version 0.96h, released 2024-04-09}
+% \date{Version 0.96i, released 2024-05-23}
%
% \maketitle
% \begin{documentation}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdf
index 3456e45f32..f2fe192ac0 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx
index 47c3e95df1..b030de3323 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx
@@ -55,7 +55,7 @@
% }^^A
% }
%
-% \date{Version 0.96h, released 2024-04-09}
+% \date{Version 0.96i, released 2024-05-23}
%
% \maketitle
% \begin{documentation}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdf
index e84df48b53..fc5114da30 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx
index 899042413a..8e16ebb596 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx
@@ -83,7 +83,7 @@
% }^^A
% }
%
-% \date{Version 0.96h, released 2024-04-09}
+% \date{Version 0.96i, released 2024-05-23}
%
% \maketitle
% \begin{documentation}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdf
index 51804d8c3e..d182341cca 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx
index bb61dd44e7..0e3fe0c92d 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Version 0.96h, released 2024-04-09}
+% \date{Version 0.96i, released 2024-05-23}
%
% \maketitle
% \begin{documentation}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdf
index 5c9d33c98a..c1968b575e 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx
index 8b11e57558..c888fab7c4 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx
@@ -69,7 +69,7 @@
% }^^A
% }
%
-% \date{Version 0.96h, released 2024-04-09}
+% \date{Version 0.96i, released 2024-05-23}
%
% \maketitle
% \begin{documentation}
@@ -972,7 +972,7 @@
%<*package>
%<@@=pdffield>
\NeedsTeXFormat{LaTeX2e}
-\ProvidesExplPackage{l3pdffield-testphase}{2024-04-09}{0.96h}%
+\ProvidesExplPackage{l3pdffield-testphase}{2024-05-23}{0.96i}%
{form fields}
% \end{macrocode}
% \subsection{hyperref specific command}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdf
index 906a58d2b0..914e4d07b3 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx
index 65ac4c35fb..205dcfd7ba 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Version 0.96h, released 2024-04-09}
+% \date{Version 0.96i, released 2024-05-23}
%
% \maketitle
% \begin{documentation}
@@ -398,7 +398,7 @@
%
% \begin{macrocode}
%<*header>
-\ProvidesExplPackage{l3pdffile}{2024-04-09}{0.96h}
+\ProvidesExplPackage{l3pdffile}{2024-05-23}{0.96i}
{embedding and referencing files in PDF---LaTeX PDF management testphase bundle}
\RequirePackage{l3pdftools} %temporarly!!
%</header>
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdf
index 375d8bba15..3cd861c557 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx
index 138b7760fc..9213e670f7 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx
@@ -57,7 +57,7 @@
% }^^A
% }
%
-% \date{Version 0.96h, released 2024-04-09}
+% \date{Version 0.96i, released 2024-05-23}
%
% \maketitle
% \begin{documentation}
@@ -632,7 +632,7 @@
%<@@=pdfmanagement>
%<*header>
%
-\ProvidesExplPackage{l3pdfmanagement}{2024-04-09}{0.96h}
+\ProvidesExplPackage{l3pdfmanagement}{2024-05-23}{0.96i}
{Management of core PDF dictionaries (LaTeX PDF management testphase bundle)}
%</header>
% \end{macrocode}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdf
index 8c02b7fbc4..59b1627594 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx
index bcdda4fbde..ff5483ca69 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Version 0.96h, released 2024-04-09}
+% \date{Version 0.96i, released 2024-05-23}
%
% \maketitle
% \begin{documentation}
@@ -627,7 +627,7 @@
% \begin{macrocode}
%<@@=pdfmeta>
%<*header>
-\ProvidesExplPackage{l3pdfmeta}{2024-04-09}{0.96h}
+\ProvidesExplPackage{l3pdfmeta}{2024-05-23}{0.96i}
{PDF-Standards---LaTeX PDF management testphase bundle}
%</header>
% \end{macrocode}
@@ -2991,14 +2991,14 @@
\cs_new_protected:Npn \@@_xmp_wtpdf_reuse_declaration:
{
\pdfmeta_xmp_add_declaration:eeenn
- {http://pdfa.org/declarations\c_hash_str wtpdf-reuse1.0}
+ {http://pdfa.org/declarations/wtpdf\c_hash_str reuse1.0}
{LaTeX~Project}
{\@@_xmp_iso_today:}{}{}
}
\cs_new_protected:Npn \@@_xmp_wtpdf_accessibility_declaration:
{
\pdfmeta_xmp_add_declaration:ennnn
- {http://pdfa.org/declarations\c_hash_str wtpdf-accessibility1.0}
+ {http://pdfa.org/declarations/wtpdf\c_hash_str accessibility1.0}
{LaTeX~Project}
{\@@_xmp_iso_today:}{}{}
}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdf
index 31abe3cc77..e9aedc14cf 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx
index d440373372..cc0f14d81b 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Version 0.96h, released 2024-04-09}
+% \date{Version 0.96i, released 2024-05-23}
%
% \maketitle
% \begin{documentation}
@@ -155,10 +155,14 @@
% command is \emph{used}, but only at \emph{shipout}.
% This requires new engines which
% allow to use the keyword \texttt{shipout} with the primitive
-% \cs{special} and \cs{pdfliteral}. The content of \meta{dictionary content}
-% is added in the stream.
+% \cs{special} and \cs{pdfliteral}. Also differently to \cs{pdf_bdc:ee}
+% the content of \meta{dictionary content} is added inline in the stream
+% with most engines (not on the dvips + ps2pdf route).
+% This means that this command can also be used if such an inline dictionary is preferred.
+%
+% The command requires current engines and
+% is not defined if an too old engine is detected!
%
-% The command requires current engines and is not defined if an to old engine is detected!
% \end{function}
%
% \begin{function}[added = 2020-07-03]
@@ -231,7 +235,7 @@
%
% \begin{macrocode}
%<*header>
-\ProvidesExplPackage{l3pdftools}{2024-04-09}{0.96h}
+\ProvidesExplPackage{l3pdftools}{2024-05-23}{0.96i}
{candidate commands for l3pdf---LaTeX PDF management testphase bundle}
%</header>
% \end{macrocode}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdf
index 4dca8de6ec..8710b7d376 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx
index c135d90f88..d567f42cb2 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx
@@ -48,7 +48,7 @@
% }^^A
% }
%
-% \date{Version 0.96h, released 2024-04-09}
+% \date{Version 0.96i, released 2024-05-23}
%
% \maketitle
% \begin{documentation}
@@ -132,7 +132,7 @@
% \begin{macrocode}
%<@@=pdf>
%<*header>
-\ProvidesExplPackage{l3pdfxform}{2024-04-09}{0.96h}
+\ProvidesExplPackage{l3pdfxform}{2024-05-23}{0.96i}
{command to create xforms (beta)---LaTeX PDF management testphase bundle}
%</header>
% \end{macrocode}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdf
index 5871db8203..3e4df1cbe1 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx b/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx
index e51d8ea205..b6d1b2f45b 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx
@@ -47,7 +47,7 @@
% }^^A
% }
%
-% \date{Version 0.96h, released 2024-04-09}
+% \date{Version 0.96i, released 2024-05-23}
%
% \maketitle
% \begin{documentation}
@@ -220,7 +220,7 @@
% \begin{macrocode}
%<@@=pdfmanagement>
%<*header>
-\ProvidesExplPackage{ltdocinit}{2024-04-09}{0.96h}
+\ProvidesExplPackage{ltdocinit}{2024-05-23}{0.96i}
{Initialize document metadata}
%</header>
% \end{macrocode}
diff --git a/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdf b/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdf
index 9778c2647f..e4c849da16 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx
index 61853b0d5b..6bd57345df 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx
@@ -47,7 +47,7 @@
% }^^A
% }
%
-% \date{Version 0.96h, released 2024-04-09}
+% \date{Version 0.96i, released 2024-05-23}
%
% \maketitle
% \begin{documentation}
@@ -63,7 +63,7 @@
% |debug={firstaidoff={name1,name2,...},...}|.
% \begin{macrocode}
%<*package>
-\ProvidesExplPackage{pdfmanagement-firstaid}{2024-04-09}{0.96h}
+\ProvidesExplPackage{pdfmanagement-firstaid}{2024-05-23}{0.96i}
{LaTeX PDF management testphase bundle / firstaid-patches}
%<@@=pdfmanagement>
diff --git a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf
index 7d4b656e9a..39a84280bc 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx
index eec73f1105..6dc445b7ff 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx
+++ b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx
@@ -47,7 +47,7 @@
% }^^A
% }
%
-% \date{Version 0.96h, released 2024-04-09}
+% \date{Version 0.96i, released 2024-05-23}
%
% \maketitle
% \begin{documentation}
@@ -394,7 +394,7 @@
% \begin{macrocode}
%<@@=pdf>
%<*package>
-\ProvidesExplPackage{pdfmanagement-testphase}{2024-04-09}{0.96h}
+\ProvidesExplPackage{pdfmanagement-testphase}{2024-05-23}{0.96i}
{LaTeX PDF management testphase bundle}
\providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion}
\IfFormatAtLeastTF{2020-10-01}{}{
@@ -422,7 +422,7 @@
% to allow to set it in the document.
% \begin{macrocode}
%<*header>
-\ProvidesExplFile{pdfmanagement-testphase.ltx}{2024-04-09}{0.96h}
+\ProvidesExplFile{pdfmanagement-testphase.ltx}{2024-05-23}{0.96i}
{PDF~management~code~(testphase)}
% \end{macrocode}
% We define a boolean for the new delayed shipout. This is temporary. At some
diff --git a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdf b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdf
index d8204141ca..3c816a8e5c 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdf
+++ b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty b/macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty
index 6b553f8519..cc220aa313 100644
--- a/macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty
+++ b/macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty
@@ -1,6 +1,6 @@
%% LaTeX2e file `xcolor-patches-tmp-ltx.sty'
%%
-\ProvidesPackage{xcolor-patches-tmp-ltx}[2024-04-09 v0.96h patch xcolor for l3color]
+\ProvidesPackage{xcolor-patches-tmp-ltx}[2024-05-23 v0.96i patch xcolor for l3color]
\@ifundefined{color_set:nn}{\RequirePackage{l3color}}{}
\ExplSyntaxOn
diff --git a/macros/latex/contrib/pdfpages/pdfpages.dtx b/macros/latex/contrib/pdfpages/pdfpages.dtx
index 7c53462359..5b41ae68c4 100644
--- a/macros/latex/contrib/pdfpages/pdfpages.dtx
+++ b/macros/latex/contrib/pdfpages/pdfpages.dtx
@@ -27,12 +27,12 @@
%<*dtx>
\makeatletter
%</dtx>
-\def\AM@fileversion{v0.5y}
+\def\AM@fileversion{v0.6a}
\def\AM@Git@Date@process$#1: #2 #3${\AM@Git@Date@process@i#2\END}
\def\AM@Git@Date@process@i#1-#2-#3\END{\def\AM@Git@Date{#1/#2/#3}}
\def\AM@Git@SHA@process$#1: #2${\def\AM@Git@SHA{#2}}
-\AM@Git@Date@process$Date: 2024-01-21 13:41:59 +0100 $
-\AM@Git@SHA@process$SHA-1: 019995ba4828f9b782eae8f6d4c9e90f257fa598 $
+\AM@Git@Date@process$Date: 2024-05-29 13:40:24 +0200 $
+\AM@Git@SHA@process$SHA-1: 8248eea896cba74c6d712bddc3e4ae8d4c403081 $
%</!(example1,example2,example3,installer)>
%
%
@@ -84,7 +84,7 @@
%
% \GetFileInfo{pdfpages.dtx}
%
-% \CheckSum{5106}
+% \CheckSum{5113}
%
% \CharacterTable
% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
@@ -3831,6 +3831,10 @@
% these tex-files to use e.g. |\includegraphics|. However, this does not
% work out of the box for pdfpages with XeTeX-driver (as it does with
% pdftex-driver). We have to use |\import@path| of |import.sty|.
+%
+% Oups: |Subfiles.sty| uses |\import@path| as well. But we shall \emph{not}
+% use |\import@path| in combination with |subfiles.sty|. Let's use macro |\subfix|
+% to check for |subfiles.sty|.
% \begin{macrocode}
\def\AM@getpagecount{%
\expandafter\filename@parse\expandafter{\AM@currentdocname}%
@@ -3839,10 +3843,14 @@
\noexpand\def\noexpand\type@ext{.\filename@ext}}}%
\type@ext
\ifx\type@ext\AM@pdf@ext
- \ifdefined\import@path
- \let\AM@import@path\import@path
- \else
+ \ifdefined\subfix
\let\AM@import@path\@empty
+ \else
+ \ifdefined\import@path
+ \let\AM@import@path\import@path
+ \else
+ \let\AM@import@path\@empty
+ \fi
\fi
\setbox\@tempboxa=\hbox{\includegraphics{\AM@currentdocname}}%
\edef\AM@pagecount{\the\XeTeXpdfpagecount\AM@XeTeXquote
@@ -4887,6 +4895,13 @@
% \item Define |\@setmarks| if undefined.
% \end{itemize}
% \end{itemize}
+%
+% \subsection*{2024/04/29 v0.6a}
+% \begin{itemize}
+% \item Bugfix for ppxetex driver: Don't use |\import@path| in combination
+% with |subfiles.sty|.
+% \end{itemize}
+%
% \Finale
%
% \iffalse
diff --git a/macros/latex/contrib/pdfpages/pdfpages.pdf b/macros/latex/contrib/pdfpages/pdfpages.pdf
index 706810c894..a5ea1485bc 100644
--- a/macros/latex/contrib/pdfpages/pdfpages.pdf
+++ b/macros/latex/contrib/pdfpages/pdfpages.pdf
Binary files differ
diff --git a/macros/latex/contrib/ppt-slides/README.md b/macros/latex/contrib/ppt-slides/README.md
index f1f92da99d..d742b04bb0 100644
--- a/macros/latex/contrib/ppt-slides/README.md
+++ b/macros/latex/contrib/ppt-slides/README.md
@@ -1,3 +1,5 @@
+# LaTeX Slidedeck à la PPT
+
[![make](https://github.com/yegor256/ppt-slides/actions/workflows/l3build.yml/badge.svg)](https://github.com/yegor256/ppt-slides/actions/workflows/l3build.yml)
[![CTAN](https://img.shields.io/ctan/v/ppt-slides)](https://ctan.org/pkg/ppt-slides)
[![License](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/yegor256/ppt-slides/blob/master/LICENSE.txt)
@@ -8,7 +10,8 @@ but more precise, uniform, and visually strict.
Check [this series of lectures](https://github.com/yegor256/ssd16)
fully designed with the use of this package.
-First, [install it](https://en.wikibooks.org/wiki/LaTeX/Installing_Extra_Packages)
+First,
+[install it](https://en.wikibooks.org/wiki/LaTeX/Installing_Extra_Packages)
from [CTAN](https://ctan.org/pkg/ppt-slides)
and then use in preamble:
@@ -25,7 +28,9 @@ and then use in preamble:
\end{document}
```
-Otherwise, you can download [`ppt-slides.sty`](https://yegor256.github.io/ppt-slides/ppt-slides.sty) and add to your project.
+Otherwise, you can download
+[`ppt-slides.sty`](https://yegor256.github.io/ppt-slides/ppt-slides.sty)
+and add to your project.
If you want to contribute yourself, make a fork, then create a branch,
then run `l3build ctan` in the root directory.
diff --git a/macros/latex/contrib/ppt-slides/ppt-slides.dtx b/macros/latex/contrib/ppt-slides/ppt-slides.dtx
index e0618f0a8d..0509442173 100644
--- a/macros/latex/contrib/ppt-slides/ppt-slides.dtx
+++ b/macros/latex/contrib/ppt-slides/ppt-slides.dtx
@@ -50,7 +50,7 @@
%<package>\NeedsTeXFormat{LaTeX2e}
%<package>\ProvidesPackage{ppt-slides}
%<*package>
-[2024-01-23 0.3.2 Slide Decks a la Power Point]
+[2024-05-02 0.3.3 Slide Decks a la Power Point]
%</package>
%<*driver>
\documentclass{ltxdoc}
@@ -610,7 +610,7 @@
}%
}%
&%
- ``#3''%
+ ``#3{}''%
\def\param{#4}%
\ifx\param\empty\else%
\par\vspace*{1em}%
diff --git a/macros/latex/contrib/ppt-slides/ppt-slides.pdf b/macros/latex/contrib/ppt-slides/ppt-slides.pdf
index 95c1024bff..39b45d9a9a 100644
--- a/macros/latex/contrib/ppt-slides/ppt-slides.pdf
+++ b/macros/latex/contrib/ppt-slides/ppt-slides.pdf
Binary files differ
diff --git a/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf b/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf
index d71cc56e94..dcd5987717 100644
--- a/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf
+++ b/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/profcollege/latex/PfCArbreChiffre.tex b/macros/latex/contrib/profcollege/latex/PfCArbreChiffre.tex
new file mode 100644
index 0000000000..f724c16fda
--- /dev/null
+++ b/macros/latex/contrib/profcollege/latex/PfCArbreChiffre.tex
@@ -0,0 +1,200 @@
+%%%
+% ArbreChiffre
+%%%
+% https://tex.stackexchange.com/questions/112975/how-to-print-the-permutation-of-s-u-v-a-t-with-latex
+
+\def\recurse#1#2#3#4\endmarker{%
+ \dopermute{#1#3}#2#4\endmarker
+ \ifx\relax#4\relax\else % add a \par before \else if there are more than 8 items
+ \recurse{#1}{#2#3}#4\endmarker
+ \fi}
+\def\dopermute#1#2#3\endmarker{%
+ \ifx\relax#3\relax
+ #1#2,%
+ \else
+ \dopermute{#1#2}#3\endmarker
+ \recurse{#1}{#2}#3\endmarker
+ \fi}
+
+\newcommand*\permute[1]{\dopermute{}#1\endmarker}
+
+\newtoks\toklistepermute%
+
+\def\UpdatetoksArbre#1\nil{\addtotok\toklistepermute{"#1",}}%
+
+\setKVdefault[ArbreChiffre]{Fixe=false,EcartV=0.5}%
+\defKV[ArbreChiffre]{Chiffre=\setKV[ArbreChiffre]{Fixe}}%
+
+\NewDocumentCommand\ArbreChiffre{om}{%
+ \useKVdefault[ArbreChiffre]%
+ \setKV[ArbreChiffre]{#1}%
+ \toklistepermute{}%
+ \xdef\Foo{\permute{#2}}%
+ \setsepchar{,}\ignoreemptyitems%
+ \readlist\ListePermutations{\Foo}%
+ \reademptyitems%
+ %
+ \foreachitem\compteur\in\ListePermutations{\expandafter\UpdatetoksArbre\compteur\nil}%
+ \BuildArbreChiffre{\the\toklistepermute}%
+}%
+
+\NewDocumentCommand\BuildArbreChiffre{m}{%
+ \ifluatex
+ \mplibforcehmode
+ \mplibnumbersystem{double}
+ \begin{mplibcode}
+ boolean Fixe;
+ Fixe=\useKV[ArbreChiffre]{Fixe};
+ string NombreFixe;
+ if Fixe:
+ NombreFixe=\useKV[ArbreChiffre]{Chiffre};
+ else:
+ NombreFixe="-1";
+ fi;
+
+ string LesPermu[];
+
+ vardef LongueurArbre(text t)=
+ ec:=0;
+ for p_=t:
+ LesPermu[ec]=p_;
+ longA:=length p_;
+ ec:=ec+1;
+ endfor;
+ enddef;
+
+ LongueurArbre(#1);
+
+ ecartV=\useKV[ArbreChiffre]{EcartV}*1cm;
+ ecartH=1cm;
+
+ k:=longA;
+
+ vardef Factorielle(expr nb)=
+ save Fact;
+ numeric Fact;
+ if nb<2:
+ Fact=1;
+ else:
+ Fact=nb;
+ for m=nb-1 downto 2:
+ Fact:=Fact*m;
+ endfor;
+ fi;
+ Fact
+ enddef;
+
+ pair A[][];%1 colonne 2 ligne
+
+ vardef Lecture(text t)=
+ for p_=t:
+ n:=n+1;
+ if Fixe:
+ if k>2:
+ if (n mod Factorielle(k-1))=1:
+ A[k][decalv]=pointdepart+(0,ecartV*decalv*Factorielle(k-1));
+ if NombreFixe=substring(0,1) of p_:
+ label(TEX(substring(longA-k,longA-k+1) of p_),A[k][decalv]);
+ fi;
+ decalv:=decalv-1;
+ fi;
+ else:
+ A[k][decalv]=pointdepart+(0,ecartV*decalv);
+ if NombreFixe=substring(0,1) of p_:
+ label(TEX(substring(longA-k,longA-k+1) of p_),A[k][decalv]);
+ fi;
+ decalv:=decalv-1;
+ fi;
+ else:%Pas Fixe
+ if k>2:
+ if (n mod Factorielle(k-1))=1:
+ A[k][decalv]=pointdepart+(0,ecartV*decalv*Factorielle(k-1));
+ label(TEX(substring(longA-k,longA-k+1) of p_),A[k][decalv]);
+ decalv:=decalv-1;
+ fi;
+ else:
+ A[k][decalv]=pointdepart+(0,ecartV*decalv);
+ label(TEX(substring(longA-k,longA-k+1) of p_),A[k][decalv]);
+ decalv:=decalv-1;
+ fi;
+ fi;
+ endfor;
+ enddef;
+
+ pair pointdepart;
+ pointdepart=(0,0);
+
+ forever:
+ n:=0;
+ decalv:=0;
+ Lecture(#1);
+ k:=k-1;
+ if k>1:
+ if k>2:
+ pointdepart:=if k mod 2=0:pointdepart+(ecartH,1.5*Factorielle(k-1)*ecartV); else:pointdepart+(ecartH,Factorielle(k-1)*ecartV); fi;
+ else:
+ pointdepart:=if k mod 2=0:pointdepart+(ecartH,Factorielle(k-1)*ecartV-0.5*ecartV); else:pointdepart+(ecartH,Factorielle(k-1)*ecartV+0.5*ecartV); fi;
+ fi;
+ else:
+ pointdepart:=pointdepart+(ecartH,0);
+ fi;
+ exitif k=0;
+ endfor;
+
+% drawoptions(withcolor red);
+ if Fixe:
+ for k=longA downto 3:
+ for l=0 downto (-Factorielle(longA)/Factorielle(k-1))+1:
+ if (substring(0,1) of LesPermu[abs(l)*Factorielle(k-1)+1])=NombreFixe:
+ for p=0 upto k-2:
+ drawarrow (A[k][l]--A[k-1][(k-1)*l-p]) cutbefore cercles(A[k][l],2mm) cutafter cercles(A[k-1][(k-1)*l-p],2mm);
+ endfor;
+ fi;
+ endfor;
+ endfor;
+ else:
+ for k=longA downto 3:
+ for l=0 downto (-Factorielle(longA)/Factorielle(k-1))+1:
+ for p=0 upto k-2:
+ drawarrow (A[k][l]--A[k-1][(k-1)*l-p]) cutbefore cercles(A[k][l],2mm) cutafter cercles(A[k-1][(k-1)*l-p],2mm);
+ endfor;
+ endfor;
+ endfor;
+ fi;
+% drawoptions();
+
+ % affichage du dernier cran.
+ for k=2 downto 2:
+ l:=1;
+ for p_=#1:
+ l:=l-1;
+ if Fixe:
+ if substring(0,1) of p_=NombreFixe:
+drawarrow (A[k][l]--A[k-1][l]) cutbefore cercles(A[k][l],2mm) cutafter cercles(A[k-1][l],2mm);
+ fi;
+ else:
+ drawarrow (A[k][l]--A[k-1][l]) cutbefore cercles(A[k][l],2mm) cutafter cercles(A[k-1][l],2mm);
+ fi;
+ endfor;
+ endfor;
+
+ %Affichage final du nombre
+ l:=1;
+ for p_=#1:
+ l:=l-1;
+ A[0][l]-A[1][l]=(ecartH,0);
+ if Fixe:
+ if substring(0,1) of p_=NombreFixe:
+ label.rt(TEX("\num{"&p_&"}"),A[0][l]);
+ drawarrow (A[1][l]--A[0][l]) cutbefore cercles(A[1][l],2mm) dashed evenly;
+ fi;
+ else:
+ label.rt(TEX("\num{"&p_&"}"),A[0][l]);
+ drawarrow (A[1][l]--A[0][l]) cutbefore cercles(A[1][l],2mm) dashed evenly;
+ fi;
+ endfor;
+
+ \end{mplibcode}
+ \mplibnumbersystem{scaled}
+ \fi
+}% \ No newline at end of file
diff --git a/macros/latex/contrib/profcollege/latex/PfCCartesJeux.tex b/macros/latex/contrib/profcollege/latex/PfCCartesJeux.tex
index bf9b9e0cde..1e2075d91a 100644
--- a/macros/latex/contrib/profcollege/latex/PfCCartesJeux.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCCartesJeux.tex
@@ -417,11 +417,16 @@
\ifboolKV[Cards]{Jointes}{\setlength{\largeurcards}{\largeurcarte}}{}%
\ifboolKV[Cards]{Jointes}{\setlength{\hauteurcards}{\hauteurcarte}}{}%
% décalage entre les cartes ou pas
- \ifnum\PfCNbCartesLarg>1\relax
- \setlength{\margeh}{\fpeval{(\paperwidth-\PfCNbCartesLarg*\largeurcards)/(\PfCNbCartesLarg-1)}pt}%
+ \ifnum\PfCNbCartesLarg>2\relax
+ \setlength{\margeh}{\fpeval{(\paperwidth-\PfCNbCartesLarg*\largeurcards)/(\PfCNbCartesLarg-1)}pt}%
+ % \setlength{\margeh}{0pt}
+ \else
+ \setlength{\margeh}{\fpeval{(\paperwidth-\PfCNbCartesLarg*\largeurcards)/(\PfCNbCartesLarg+1)}pt}%
\fi
- \ifnum\PfCNbCartesHaut>1\relax
+ \ifnum\PfCNbCartesHaut>2\relax
\setlength{\margev}{\fpeval{(\paperheight-\PfCNbCartesHaut*\hauteurcards)/(\PfCNbCartesHaut-1)}pt}%
+ \else
+ \setlength{\margev}{\fpeval{(\paperheight-\PfCNbCartesHaut*\hauteurcards)/(\PfCNbCartesHaut+1)}pt}%
\fi
%
\setlength{\hauteurtitre}{\fpeval{\useKV[Cards]{HauteurTheme}}pt}%
diff --git a/macros/latex/contrib/profcollege/latex/PfCEcrireunQCM.tex b/macros/latex/contrib/profcollege/latex/PfCEcrireunQCM.tex
index 3d7a324b73..6fc7a94593 100644
--- a/macros/latex/contrib/profcollege/latex/PfCEcrireunQCM.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCEcrireunQCM.tex
@@ -12,7 +12,7 @@
\setcounter{TotalQCMSeul}{0}%
\setcounter{TotalQCMSeulSol}{0}%
%
-\setKVdefault[QCMSeul]{Melange=false,Solution=false,EnColonne=false}%
+\setKVdefault[QCMSeul]{Melange=false,Solution=false,EnColonne=false,LabelLettre=false}%
\defKV[QCMSeul]{Colonnes=\setKV[QCMSeul]{EnColonne}}%
%
\NewDocumentCommand\PfCQCMSChoixLabelSol{m}{%
@@ -71,7 +71,11 @@
% On écrit
\ListeQCM[1]%
\ifboolKV[QCMSeul]{EnColonne}{\begin{multicols}{\useKV[QCMSeul]{Colonnes}}}{}%
- \begin{itemize}[label=$\square$]
+ \ifboolKV[QCMSeul]{LabelLettre}{
+ \begin{enumerate}[label=\Alph{*}/]
+ }{
+ \begin{enumerate}[label=$\square$]
+ }
\xintFor* ##1 in{\xintSeq{2}{\fpeval{\ListeQCMlen-1}}}\do{%
\xdef\Titi{\ListeEnumerate[\fpeval{##1-1}]}
\ifboolKV[QCMSeul]{Solution}{%
@@ -80,7 +84,7 @@
\item \ListeQCM[\fpeval{\Titi+1}]
}%
}%
- \end{itemize}
+ \end{enumerate}
\ifboolKV[QCMSeul]{EnColonne}{\end{multicols}}{}%
}%
%
diff --git a/macros/latex/contrib/profcollege/latex/PfCPatronPaves.tex b/macros/latex/contrib/profcollege/latex/PfCPatronPaves.tex
index 2be0a20bd0..dfbd3a5d23 100644
--- a/macros/latex/contrib/profcollege/latex/PfCPatronPaves.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCPatronPaves.tex
@@ -1,3 +1,6 @@
+%%%
+% Patrons de pavés droits et cubes
+%%%
\setKVdefault[ClesPatron]{Cube,Arete=1cm,ListeCouleurs={white},Pave=false,Largeur=2cm,Hauteur=1.5cm,Profondeur=1cm,Codes=false}%
\defKV[ClesPatron]{Traces=\setKV[ClesPatron]{Codes}}%
@@ -27,6 +30,149 @@
}%
}%
+\setsepchar{,}\ignoreemptyitems
+\readlist*\ListePatronsCube{%
+ {ooxo,xxxx,ooxo},%
+ {oxoo,xxxx,xooo},%
+ {ooxo,xxxx,oxoo},%
+ {ooox,xxxx,xooo},%
+ {ooox,xxxx,oxoo},%
+ {xxxoo,ooxxx},%
+ {xxoo,oxxo,ooxx},%
+ {xxoo,oxxx,ooox},%
+ {xxoo,oxxx,ooxo},%
+ {ooox,xxxx,ooox},%
+ {ooxo,xxxo,ooxx}%
+}%
+\readlist*\ListePatronsCubeCouleurs{%
+ {LightSteelBlue,Crimson,Yellow,Crimson,Yellow,LightSteelBlue},%
+ {LightSteelBlue,Crimson,Yellow,Crimson,Yellow,LightSteelBlue},%
+ {LightSteelBlue,Crimson,Yellow,Crimson,Yellow,LightSteelBlue},%
+ {LightSteelBlue,Crimson,Yellow,Crimson,Yellow,LightSteelBlue},%
+ {LightSteelBlue,Crimson,Yellow,Crimson,Yellow,LightSteelBlue},%
+ {LightSteelBlue,Crimson,LightSteelBlue,Yellow,Crimson,Yellow},%
+ {LightSteelBlue,Crimson,Yellow,LightSteelBlue,Crimson,Yellow},%
+ {LightSteelBlue,Crimson,Yellow,LightSteelBlue,Yellow,Crimson},%
+ {LightSteelBlue,Crimson,Yellow,LightSteelBlue,Yellow,Crimson},%
+ {LightSteelBlue,Crimson,Yellow,Crimson,Yellow,LightSteelBlue},%
+ {LightSteelBlue,Crimson,Yellow,Crimson,LightSteelBlue,Yellow}%
+}%
+
+\readlist*\ListePatronsPave{%
+ {hlpl,lopo,hopo,lopo},%
+ {hlpo,loph,hopo,lopo},%
+ {hlpo,lopo,hopl,lopo},%
+ {hlpo,lopo,hopo,loph},%
+ {hopo,lhph,hopo,lopo},%
+ {hopo,lhpo,hopl,lopo},%
+ {hopo,lhpo,hopo,lopl},%
+ {hopo,lopo,hlpl,lopo},%
+ {hopo,lopo,hlpo,loph},%
+ {hopo,lopo,hopo,lhph},%10
+ {plhl,loho,poho,loho},%
+ {plho,loho,pohl,loho},%
+ {plho,loho,pohl,loho},%
+ {plho,loho,poho,lohp},%
+ {poho,lphp,poho,loho},%
+ {poho,lpho,pohl,loho},%
+ {poho,lpho,poho,lohp},%
+ {poho,loho,plhl,loho},%
+ {poho,loho,plho,lohp},%
+ {poho,loho,poho,lphp},%
+ {phlh,holo,polo,holo},%
+ {phlo,holp,polo,holo},%
+ {phlo,holo,polh,holo},%
+ {phlo,holo,polo,holp},%
+ {polo,hplp,polo,holo},%
+ {polo,hplo,polh,holo},%
+ {polo,hplo,polo,holp},%
+ {polo,holo,phlh,holo},%
+ {polo,holo,phlo,holp},%
+ {polo,holo,polo,hplp},%
+ {hlpo,lopo,hopl,pool},%
+ {hopo,lhpo,hopl,pool},%
+ {hopo,lopo,hlph,pool},%
+ {lhpo,hopo,loph,pooh},%
+ {lopo,hlpo,loph,pooh},%
+ {lopo,hopo,lhoh,pooh},%
+ {plho,loho,pohl,hool},%
+ {poho,lpho,pohl,hool},%
+ {poho,loho,plhl,hool},%
+ {lpho,poho,lohp,hoop},%
+ {loho,plho,lohp,hoop},%
+ {loho,poho,lphp,hoop},%
+ {phlo,holo,polh,looh},%
+ {polo,hplo,polh,looh},%
+ {polo,holo,phlh,looh},%
+ {hplo,polo,holp,loop},%
+ {holo,phlo,holp,loop},%
+ {holo,polo,hplp,loop},%
+ {hpo,lpo,hpl,pol,hol},%
+ {lpo,hpo,lph,poh,loh},%
+ {pho,plo,phl,hol,pol},%
+ {hpoo,lpho,pohl,hool},%
+ {lpoo,hplo,polh,looh},%
+ {phoo,lhpo,hopl,pool}
+}
+
+\readlist*\ListePatronsPaveCouleurs{%
+ {Orange,Crimson,Orange,LightGreen,Crimson,LightGreen},
+ {Orange,Crimson,LightGreen,Orange,Crimson,LightGreen},
+ {Orange,Crimson,LightGreen,Crimson,Orange,LightGreen},
+ {Orange,Crimson,LightGreen,Crimson,LightGreen,Orange},
+ {Crimson,Orange,LightGreen,Orange,Crimson,LightGreen},
+ {Crimson,Orange,LightGreen,Crimson,Orange,LightGreen},
+ {Crimson,Orange,LightGreen,Crimson,LightGreen,Orange},
+ {Crimson,LightGreen,Orange,Crimson,Orange,LightGreen},
+ {Crimson,LightGreen,Orange,Crimson,LightGreen,Orange},
+ {Crimson,LightGreen,Crimson,Orange,LightGreen,Orange},%10
+ {LightGreen,Crimson,LightGreen,Orange,Crimson,Orange},%
+ {LightGreen,Crimson,Orange,LightGreen,Crimson,Orange},%
+ {LightGreen,Crimson,Orange,Crimson,LightGreen,Orange},%
+ {LightGreen,Crimson,Orange,Crimson,Orange,LightGreen},%
+ {Crimson,LightGreen,Orange,LightGreen,Crimson,Orange},%
+ {Crimson,LightGreen,Orange,Crimson,LightGreen,Orange},%
+ {Crimson,LightGreen,Orange,Crimson,Orange,LightGreen},%
+ {Crimson,Orange,LightGreen,Crimson,LightGreen,Orange},%
+ {Crimson,Orange,LightGreen,Crimson,Orange,LightGreen},%
+ {Crimson,Orange,Crimson,LightGreen,Orange,LightGreen},%20
+ {Crimson,LightGreen,Crimson,Orange,LightGreen,Orange},%
+ {Crimson,LightGreen,Orange,LightGreen,Crimson,Orange},%
+ {Crimson,LightGreen,Orange,LightGreen,Crimson,Orange},%
+ {Crimson,LightGreen,Orange,LightGreen,Orange,Crimson},%
+ {LightGreen,Crimson,Orange,Crimson,LightGreen,Orange},%
+ {LightGreen,Crimson,Orange,LightGreen,Crimson,Orange},%
+ {LightGreen,Crimson,Orange,LightGreen,Orange,Crimson},%
+ {LightGreen,Orange,Crimson,LightGreen,Crimson,Orange},%
+ {LightGreen,Orange,Crimson,LightGreen,Orange,Crimson},%
+ {LightGreen,Orange,LightGreen,Crimson,Orange,Crimson},%30
+ {Orange,Crimson,LightGreen,Crimson,Orange,LightGreen},%
+ {Crimson,Orange,LightGreen,Crimson,Orange,LightGreen},%
+ {Crimson,LightGreen,Orange,Crimson,Orange,LightGreen},%
+ {Orange,LightGreen,Crimson,LightGreen,Orange,Crimson},%
+ {LightGreen,Orange,Crimson,LightGreen,Orange,Crimson},%
+ {LightGreen,Crimson,Orange,LightGreen,Orange,Crimson},%
+ {LightGreen,Crimson,Orange,Crimson,LightGreen,Orange},%
+ {Crimson,LightGreen,Orange,Crimson,LightGreen,Orange},%
+ {Crimson,Orange,LightGreen,Crimson,LightGreen,Orange},%
+ {LightGreen,Orange,Crimson,Orange,LightGreen,Crimson},%40
+ {Orange,LightGreen,Crimson,Orange,LightGreen,Crimson},%
+ {Orange,Crimson,LightGreen,Orange,LightGreen,Crimson},%
+ {Crimson,LightGreen,Orange,LightGreen,Crimson,Orange},%
+ {LightGreen,Crimson,Orange,LightGreen,Crimson,Orange},%
+ {LightGreen,Orange,Crimson,LightGreen,Crimson,Orange},%
+ {Crimson,Orange,LightGreen,Orange,Crimson,LightGreen},%
+ {Orange,Crimson,LightGreen,Orange,Crimson,LightGreen},%
+ {Orange,LightGreen,Crimson,Orange,Crimson,LightGreen},%
+ {Crimson,LightGreen,Crimson,Orange,LightGreen,Orange},%
+ {LightGreen,Crimson,LightGreen,Orange,Crimson,Orange},%50
+ {Crimson,Orange,Crimson,LightGreen,Orange,LightGreen},%
+ {Crimson,LightGreen,Orange,Crimson,LightGreen,Orange},%
+ {LightGreen,Crimson,Orange,LightGreen,Crimson,Orange},%
+ {Crimson,Orange,LightGreen,Crimson,Orange,LightGreen}%
+}%
+\reademptyitems
+
\def\MPPatronCubeCode{%
Arete=\useKV[ClesPatron]{Arete};
%
@@ -126,13 +272,35 @@
boolean Codes;
Codes=\useKV[ClesPatron]{Codes};
numeric DecalCol[];
+ %
vardef LectureLargeur(text t)=
for p_=t:
Long:=length p_;
endfor;
for k=1 upto Long-1:
for p_=t:
- if substring(k,k+1) of p_="l":
+ if substring(k,k+1) of p_="o":
+ if k=1:
+ if (substring(0,1) of p_="h") and (substring(1,2) of p_="p"):
+ DecalCol[k]:=Largeur;
+ fi;
+ if (substring(0,1) of p_="h") and (substring(1,2) of p_="l"):
+ DecalCol[k]:=Profondeur;
+ fi;
+ if (substring(0,1) of p_="p") and (substring(1,2) of p_="h"):
+ DecalCol[k]:=Largeur;
+ fi;
+ if (substring(0,1) of p_="p") and (substring(1,2) of p_="l"):
+ DecalCol[k]:=Hauteur;
+ fi;
+ if (substring(0,1) of p_="l") and (substring(1,2) of p_="h"):
+ DecalCol[k]:=Profondeur;
+ fi;
+ if (substring(0,1) of p_="l") and (substring(1,2) of p_="p"):
+ DecalCol[k]:=Hauteur;
+ fi;
+ fi;
+ elseif substring(k,k+1) of p_="l":
DecalCol[k]:=Largeur;
elseif substring(k,k+1) of p_="h":
DecalCol[k]:=Hauteur;
@@ -142,6 +310,7 @@
endfor;
endfor;
enddef;
+ %
vardef Patron(text t)=
path PathPave;
nblignes:=-1;
@@ -159,7 +328,11 @@
fi;
nblignes:=nblignes-YEchelle;
for k=1 upto Long-1:
- if substring(k,k+1) of p_="l":
+ if substring(k,k+1) of p_="o":
+ if k=1:
+ PathPave:=(unitsquare scaled 0);
+ fi;
+ elseif substring(k,k+1) of p_="l":
nbcol:=nbcol+1;
PathPave:=(unitsquare xscaled Largeur yscaled YEchelle) shifted ((nbcolonnes,nblignes));
nbfaces:=nbfaces+1;
diff --git a/macros/latex/contrib/profcollege/latex/PfCVisualisationMulDeci.tex b/macros/latex/contrib/profcollege/latex/PfCVisualisationMulDeci.tex
new file mode 100644
index 0000000000..54a1a079cc
--- /dev/null
+++ b/macros/latex/contrib/profcollege/latex/PfCVisualisationMulDeci.tex
@@ -0,0 +1,135 @@
+%%%
+% Visualisation Multiplication Décimaux
+%%%
+\setKVdefault[VisMulDec]{Couleur=Orange,CouleurUnite=DarkGreen,Dixiemes=false,Unite=2}%
+
+\newtoks\toksvismuldec%
+\def\UpdatetoksVisMulDec#1\nil{\addtotok\toksvismuldec{"#1",#1,}}%
+
+\NewDocumentCommand\VisualisationMulDecimaux{om}{%
+ \useKVdefault[VisMulDec]%
+ \setKV[VisMulDec]{#1}%
+ \setsepchar{x}\ignoreemptyitems%
+ \readlist*\PfCVisMulDec{#2}%
+ \toksvismuldec{}%
+ \foreachitem\compteur\in\PfCVisMulDec{\expandafter\UpdatetoksVisMulDec\compteur\nil}%
+ \BuildVisMulDec{\the\toksvismuldec}%
+ \reademptyitems%
+}%
+
+\NewDocumentCommand\BuildVisMulDec{m}{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ string Nombres[];
+ numeric Decimaux[];
+ color Coul[];
+ boolean Dixiemes;
+
+ Unite=\useKV[VisMulDec]{Unite}*cm;
+ Coul1=\useKV[VisMulDec]{Couleur};
+ Coul2=\useKV[VisMulDec]{CouleurUnite};
+ Coul3=0.7[Coul2,white];
+
+ Dixiemes=\useKV[VisMulDec]{Dixiemes};
+
+ vardef RecupererDonnees(text t)=
+ nbs:=0;
+ nbd:=0;
+ for p_=t:
+ if string p_:
+ nbs:=nbs+1;
+ Nombres[nbs]=p_;
+ else:
+ nbd:=nbd+1;
+ Decimaux[nbd]=p_;
+ fi;
+ endfor;
+ enddef;
+
+ RecupererDonnees(#1);
+
+ pair A,B,C,D;
+ A=(0,0);
+ B-A=Unite*(Decimaux[1],0);
+ D-A=Unite*(0,Decimaux[2]);
+ C-D=B-A;
+ fill polygone(A,Unite*(1,0),Unite*(1,1),Unite*(0,1)) withcolor Coul3;
+ drawoptions(withcolor Coul1);
+ pasx=0.1;
+ pasy=0.1;
+ if (Dixiemes and ((Decimaux[1]*10) mod 10=0)):
+ pasy:=1;
+ fi;
+ if (Dixiemes and ((Decimaux[2]*10) mod 10=0)):
+ pasx:=1;
+ fi;
+ for k=0 step pasx until Decimaux[1]:
+ trace (A--(Unite*(0,Decimaux[2]))) shifted(k*Unite*(1,0));
+ endfor;
+ for k=0 step pasy until Decimaux[2]:
+ trace (A--(Unite*(Decimaux[1],0))) shifted(k*Unite*(0,1));
+ endfor;
+ drawoptions(withpen pencircle scaled 1.2 withcolor Coul2);
+ for k=0 upto Decimaux[1]:
+ trace (A--(Unite*(0,Decimaux[2]))) shifted(k*Unite*(1,0));
+ endfor;
+ for k=0 upto Decimaux[2]:
+ trace (A--(Unite*(Decimaux[1],0))) shifted(k*Unite*(0,1));
+ endfor;
+ drawoptions();
+ trace cotation(A,B,-5mm,-3mm,TEX("\num{"&Nombres[1]&"}"));
+ trace cotation(A,D,5mm,5mm,TEX("\num{"&Nombres[2]&"}") rotated -90);
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={string Nombres[];numeric Decimaux[];color Coul[];boolean Dixiemes;Unite=\useKV[VisMulDec]{Unite}*cm;Coul1=\useKV[VisMulDec]{Couleur};Coul2=\useKV[VisMulDec]{CouleurUnite};Coul3=0.7[Coul2,white];Dixiemes=\useKV[VisMulDec]{Dixiemes};}]
+ vardef RecupererDonnees(text t)=
+ nbs:=0;
+ nbd:=0;
+ for p_=t:
+ if string p_:
+ nbs:=nbs+1;
+ Nombres[nbs]=p_;
+ else:
+ nbd:=nbd+1;
+ Decimaux[nbd]=p_;
+ fi;
+ endfor;
+ enddef;
+
+ RecupererDonnees(#1);
+
+ pair A,B,C,D;
+ A=(0,0);
+ B-A=Unite*(Decimaux[1],0);
+ D-A=Unite*(0,Decimaux[2]);
+ C-D=B-A;
+ fill polygone(A,Unite*(1,0),Unite*(1,1),Unite*(0,1)) withcolor Coul3;
+ drawoptions(withcolor Coul1);
+ pasx=0.1;
+ pasy=0.1;
+ if (Dixiemes and ((Decimaux[1]*10) mod 10=0)):
+ pasy:=1;
+ fi;
+ if (Dixiemes and ((Decimaux[2]*10) mod 10=0)):
+ pasx:=1;
+ fi;
+ for k=0 step pasx until Decimaux[1]:
+ trace (A--(Unite*(0,Decimaux[2]))) shifted(k*Unite*(1,0));
+ endfor;
+ for k=0 step pasy until Decimaux[2]:
+ trace (A--(Unite*(Decimaux[1],0))) shifted(k*Unite*(0,1));
+ endfor;
+ drawoptions(withpen pencircle scaled 1.2 withcolor Coul2);
+ for k=0 upto Decimaux[1]:
+ trace (A--(Unite*(0,Decimaux[2]))) shifted(k*Unite*(1,0));
+ endfor;
+ for k=0 upto Decimaux[2]:
+ trace (A--(Unite*(Decimaux[1],0))) shifted(k*Unite*(0,1));
+ endfor;
+ drawoptions();
+ trace cotation(A,B,-5mm,-3mm,LATEX("\num{"&Nombres[1]&"}"));
+ trace cotation(A,D,5mm,5mm,LATEX("\num{"&Nombres[2]&"}") rotated -90);
+ \end{mpost}
+ \fi
+}% \ No newline at end of file
diff --git a/macros/latex/contrib/profcollege/latex/PfCVueCubes.tex b/macros/latex/contrib/profcollege/latex/PfCVueCubes.tex
index 5f284e051e..9365b7e621 100644
--- a/macros/latex/contrib/profcollege/latex/PfCVueCubes.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCVueCubes.tex
@@ -1,30 +1,105 @@
%%%
% Vue Cubes
%%%
-\setKVdefault[VueCubes]{Solution=false,Hauteur=5,Profondeur=4,Largeur=3,Angle=60,Nom=Ex1,Trou=false,Echelle=0.25,CouleurCube=LightSteelBlue,CouleurFleche=LightGray,Face=false,Creation=false,Grilles=false,Seul=false}
+\setKVdefault[VueCubes]{Solution=false,Hauteur=5,Profondeur=4,Largeur=3,Angle=60,Nom=Ex1,Trou=false,Echelle=0.25,CouleurCube=LightSteelBlue,CouleurFleche=LightGray,Face=false,Creation=false,Grilles=false,Seul=false,Perso=false,EclateX=0,EclateZ=0,EclateY=0}
\newtoks\toklisteVueCube%
\def\UpdatetoksVueCube#1\nil{\addtotok\toklisteVueCube{#1,}}%
+\def\UpdatetoksEmpilementPerso#1\nil{\addtotok\toklisteVueCube{"#1",}}%
\NewDocumentCommand\VueCubes{o m}{%
\useKVdefault[VueCubes]%
- \setKV[VueCubes]{#1}
- \ifboolKV[VueCubes]{Solution}{%
- \BuildVueCubesSolution%
+ \setKV[VueCubes]{#1}%
+ \toklisteVueCube{}%
+ \ifboolKV[VueCubes]{Perso}{%
+ \setsepchar[*]{,*/}\ignoreemptyitems%
+ \readlist*\ListeCouches{#2}%
+ \reademptyitems%
+ \foreachitem\compteur\in\ListeCouches{%
+ \foreachitem\compteurdeux\in\ListeCouches[\compteurcnt]{%
+ \expandafter\UpdatetoksEmpilementPerso\compteurdeux\nil%
+ }%
+ }%
+ \BuildMPEmpilementPerso{\the\toklisteVueCube}{\ListeCoucheslen}{\listlen\ListeCouches[1]}%
}{%
- \ifboolKV[VueCubes]{Creation}{%Le nombre de données doit être compatible avec le "volume du pavé droit"
- \ignoreemptyitems%
- \readlist*\PfCListeHauteursCubes{#2}%
- \reademptyitems%
- \toklisteVueCube{}%
- \foreachitem\compteur\in\PfCListeHauteursCubes{\expandafter\UpdatetoksVueCube\compteur\nil}%
- \BuildVueCubes{\useKV[VueCubes]{Angle}}{\the\toklisteVueCube}%
+ \ifboolKV[VueCubes]{Solution}{%
+ \BuildVueCubesSolution%
}{%
- \BuildVueCubes{\useKV[VueCubes]{Angle}}{}%
+ \ifboolKV[VueCubes]{Creation}{%Le nombre de données doit être compatible avec le "volume du pavé droit"
+ \ignoreemptyitems%
+ \readlist*\PfCListeHauteursCubes{#2}%
+ \reademptyitems%
+ \foreachitem\compteur\in\PfCListeHauteursCubes{\expandafter\UpdatetoksVueCube\compteur\nil}%
+ \BuildVueCubes{\useKV[VueCubes]{Angle}}{\the\toklisteVueCube}%
+ }{%
+ \BuildVueCubes{\useKV[VueCubes]{Angle}}{}%
+ }%
}%
}%
}%
+\NewDocumentCommand{\BuildMPEmpilementPerso}{mmm}{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ nbcouches=#2;
+ nblignes:=#3;
+
+ input PfCSolid;
+
+ intensite:=1.5;
+
+ Ferme[0]:=false;
+ outcolor:=\useKV[VueCubes]{CouleurCube};%
+ incolor:=white;
+ nb:=1;subh:=1;
+ creux:=true;
+
+ Phi := \useKV[VueCubes]{Angle};
+ Echelle:=\useKV[VueCubes]{Echelle};
+ EclateX:=\useKV[VueCubes]{EclateX};
+ EclateY:=\useKV[VueCubes]{EclateY};
+ EclateZ:=\useKV[VueCubes]{EclateZ};
+
+ string LesSymboles[];
+ string LesLignes[][];
+
+ TotalObj:=0;
+
+ vardef CreationSolide(text t)=
+ n:=0;
+ for p_=t:
+ n:=n+1;
+ LesSymboles[n]=p_;
+ endfor;
+ for l=nbcouches downto 1:
+ for k=nblignes downto 1:
+ LesLignes[l][k]=LesSymboles[(nbcouches-l)*nblignes+(nblignes-k+1)];
+ endfor;
+ endfor;
+ for l=nbcouches downto 1:
+ for k=nblignes downto 1:
+ for m=0 upto (length(LesLignes[l][k])-1):
+ if (substring((m,m+1)) of LesLignes[l][k])="x":
+ TotalObj:=incr TotalObj;
+ TR:=(Echelle*(nblignes-k)+Echelle*(nblignes-k)*EclateX,Echelle*(m+m*EclateY),Echelle*l-Echelle*(nbcouches-l)*EclateZ);
+ ObjetDeplacement[TotalObj](0);
+ fi;
+ endfor;
+ endfor;
+ endfor;
+ enddef;
+
+ Initialisation(2500,Phi,20,50);
+ Objetcube0("a="&decimal(Echelle));
+
+ CreationSolide(#1);
+ nbobj:=TotalObj;
+ DessineFusion;
+ \end{mplibcode}
+ \fi
+}
+
\NewDocumentCommand\BuildVueCubes{m m}{%
\ifluatex
\mplibforcehmode
diff --git a/macros/latex/contrib/profcollege/latex/ProfCollege.sty b/macros/latex/contrib/profcollege/latex/ProfCollege.sty
index 7c1bad8c3d..ca3b52ba9a 100644
--- a/macros/latex/contrib/profcollege/latex/ProfCollege.sty
+++ b/macros/latex/contrib/profcollege/latex/ProfCollege.sty
@@ -2,9 +2,9 @@
% licence : Released under the LaTeX Project Public License v1.3c
% or later, see http://www.latex-project.org/lppl.txtf
\NeedsTeXFormat{LaTeX2e}%
-\def\filedate{2024/04/26}%
+\def\filedate{2024/05/18}%
\let\PfCfiledate\filedate%
-\def\fileversion{0.99-A-d}%
+\def\fileversion{0.99-A-f}%
\let\PfCfileversion\fileversion%
\ProvidesPackage{ProfCollege}[\filedate\space v\fileversion\space Aide pour utiliser LaTeX au college]%
@@ -165,18 +165,6 @@
\def\bla{}%JCC :) Pour les tests sur arguments vides
-%% Colorer en mode mathématique. \color ne gère pas les espaces propres au mode mathématique. Donc besoin de changer
-% https://tex.stackexchange.com/questions/21598/how-to-color-math-symbols
-%\makeatletter%
-%\def\mathcolor#1#{\@mathcolor{#1}}%
-%\def\@mathcolor#1#2#3{%
-% \protect\leavevmode%
-% \begingroup%
-% \color#1{#2}#3%
-% \endgroup%
-%}%
-%\makeatother%
-
% Pb ProfCollege<->Chinois soulev\'e par Denis
% Solution by egreg :)
\newcommand\getstrut[1]{%
@@ -326,20 +314,11 @@
\IfNoValueTF{#1}{\Dotfill}{\makebox[#1]{\Dotfill}}%
}%
-%\NewDocumentCommand\Lignespointilles{m}{%
-% \xintifboolexpr{\fpeval{#1}>1}{%
-% \xintFor* ##1 in {\xintSeq {1}{\fpeval{#1}}}\do{%
-% \pointilles\par%
-% }%
-% }{}%
-%}%
-
\NewDocumentCommand\PfCNbLignesRestantes{}{%
\edef\measurepage{\dimexpr\pagegoal-\pagetotal\relax}%
- \xintifboolexpr{\fpeval{\the\measurepage}>\fpeval{\the\textheight}}{
-% Toto
- \edef\measurepage{\dimexpr\textheight\relax}
- }{}
+ \xintifboolexpr{\fpeval{\the\measurepage}>\fpeval{\the\textheight}}{%
+ \edef\measurepage{\dimexpr\textheight\relax}%
+ }{}%
\xdef\PfCResteLignes{\fpeval{trunc((\the\measurepage)/(\baselineskip),0)}}%
}%
@@ -509,16 +488,76 @@
\day=\the\PfCrappeljour\relax%
}
-\newcommand\MelangeLettres[2]{%
+\NewDocumentCommand\MelangeLettres{smm}{%
% #2 Nombre d'éléments à conserver
+ % #3 Nom de la commande qui reçoit la liste.
\setsepchar{,}\ignoreemptyitems%
\readlist*\ListeInter{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z}%
\xdef\faa{}% Liste construite
\xdef\fii{}% Liste détruite
- \xintFor* ##1 in {\xintSeq{1}{#1}}\do{%
+ \IfBooleanTF{#1}{%
+ \xintFor* ##1 in {\xintSeq{1}{#2}}\do{%
+ \xintifboolexpr{\ListeInterlen>1}{%
+ \xdef\Alea{\fpeval{randint(\ListeInterlen)}}%
+ \xdef\faa{\faa\ListeInter[\Alea],}%
+ \xdef\fii{}%
+ \xintFor* ##2 in {\xintSeq{1}{\ListeInterlen}}\do{%
+ \xintifboolexpr{##2 == \Alea}{%
+ }{%
+ \xdef\fii{\fii \ListeInter[##2],}%
+ }%
+ }%
+ }{%
+ \xdef\faa{\faa\ListeInter[1]}%
+ }%
+ \readlist*\ListeInter{\fii}%
+ }%
+ }{%
+ \xintFor* ##1 in {\xintSeq{1}{#2}}\do{%
+ \xintifboolexpr{\ListeInterlen>1}{%
+ \xdef\Alea{\fpeval{randint(\ListeInterlen)}}%
+ \xdef\faa{\faa\ListeInter[\Alea]}%
+ \xdef\fii{}%
+ \xintFor* ##2 in {\xintSeq{1}{\ListeInterlen}}\do{%
+ \xintifboolexpr{##2 == \Alea}{%
+ }{%
+ \xdef\fii{\fii \ListeInter[##2],}%
+ }%
+ }%
+ }{%
+ \xdef\faa{\faa\ListeInter[1]}%
+ }%
+ \readlist*\ListeInter{\fii}%
+ }%
+ }%
+ \xdef#3{\faa}%
+}%
+
+\NewDocumentCommand\MelangeListe{smm}{%
+ \IfBooleanTF{#1}{%
+ %Si on cherche un seul élément, on peut l'utiliser directement
+ \MelangeListeOne{#2}{#3}%
+ }{%
+ \MelangeListeNoOne{#2}{#3}%
+ }%
+}
+
+\NewDocumentCommand\MelangeListeOne{mm}{%
+ % #1 Liste à mélanger
+ % #2 Nombre d'éléments à conserver
+ \setsepchar{,}\ignoreemptyitems%
+ \readlist*\ListeInter{#1}%
+ \xdef\faa{}% Liste construite
+ \xdef\fii{}% Liste détruite
+ % on crée les #2 premieres solutions.
+ \xintFor* ##1 in {\xintSeq{1}{#2}}\do{%
\xintifboolexpr{\ListeInterlen>1}{%
\xdef\Alea{\fpeval{randint(\ListeInterlen)}}%
- \xdef\faa{\faa\ListeInter[\Alea]}%
+ \ifnum\fpeval{##1}=1\relax
+ \xdef\faa{\ListeInter[\Alea]}%
+ \else
+ \xdef\faa{\faa,\ListeInter[\Alea]}%
+ \fi
\xdef\fii{}%
\xintFor* ##2 in {\xintSeq{1}{\ListeInterlen}}\do{%
\xintifboolexpr{##2 == \Alea}{%
@@ -527,14 +566,14 @@
}%
}%
}{%
- \xdef\faa{\faa\ListeInter[1]}%
+ \xdef\faa{\faa,\ListeInter[1]}%
}%
\readlist*\ListeInter{\fii}%
}%
- \xdef#2{\faa}%
+ \reademptyitems%
}%
-\newcommand\MelangeListe[2]{%
+\NewDocumentCommand\MelangeListeNoOne{mm}{%
% #1 Liste à mélanger
% #2 Nombre d'éléments à conserver
\setsepchar{,}\ignoreemptyitems%
@@ -787,6 +826,8 @@
\def\PfCSymbolTimes{\times}%
\def\PfCSymbolDiv{\div}%
+\input{PfCVisualisationMulDeci}
+\input{PfCArbreChiffre}
\input{PfCAssemblagesSolides}
\input{PfCTicketCaisse}
\input{PfCRecyclage}
diff --git a/macros/latex/contrib/proflycee/doc/ProfLycee-doc.pdf b/macros/latex/contrib/proflycee/doc/ProfLycee-doc.pdf
index b2c61b2f61..000537a0d4 100644
--- a/macros/latex/contrib/proflycee/doc/ProfLycee-doc.pdf
+++ b/macros/latex/contrib/proflycee/doc/ProfLycee-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/proflycee/doc/ProfLycee-doc.tex b/macros/latex/contrib/proflycee/doc/ProfLycee-doc.tex
deleted file mode 100644
index 34da7d98f8..0000000000
--- a/macros/latex/contrib/proflycee/doc/ProfLycee-doc.tex
+++ /dev/null
@@ -1,314 +0,0 @@
-% !TeX TXS-program:compile = txs:///arara
-% arara: lualatex: {shell: yes, synctex: no, interaction: batchmode}
-% arara: pythontex: {rerun: always}
-% arara: lualatex: {shell: yes, synctex: no, interaction: batchmode}
-% arara: lualatex: {shell: yes, synctex: no, interaction: batchmode} if found('log', '(undefined references|Please rerun|Rerun to get)')
-
-\documentclass[a4paper,french,11pt]{article}
-\def\PLversion{3.03d}
-\def\PLdate{20 avril 2024}
-\usepackage{amsfonts}
-\usepackage{ProfLycee}
-\useproflyclib{piton,minted,pythontex,ecritures,espace}
-\usepackage[math-style=french]{fourier-otf}
-\usepackage{mathrsfs}%pour mathscr
-\usepackage{awesomebox}
-\usepackage[lua]{tkz-euclide}
-\usepackage{tkz-tab}
-\tikzstyle{every picture}+=[remember picture]
-\usetikzlibrary{hobby}
-\usepackage[group-minimum-digits=4]{siunitx}
-\sisetup{locale=FR}
-\usepackage{enumitem}
-\usepackage{fancyvrb}
-\usepackage{fancyhdr}
-\usepackage{tabularray}
-\usepackage{multicol}
-\DeclareMathSymbol{;}\mathbin{operators}{'73} %espacement avec ;
-%fancy
-\fancyhf{}
-\renewcommand{\headrulewidth}{0pt}
-\lfoot{\sffamily \small [ProfLycee]}
-\cfoot{\sffamily \small - \thepage{} -}
-\rfoot{\hyperlink{matoc}{\small\faArrowAltCircleUp[regular]}}
-
-\usepackage{graphics}
-\usepackage{hologo}
-\providecommand\tikzlogo{Ti\textit{k}Z}
-\providecommand\TeXLive{\TeX{}Live\xspace}
-\providecommand\PSTricks{\textsf{PSTricks}\xspace}
-\let\pstricks\PSTricks
-\let\TikZ\tikzlogo
-\newcommand\TableauDocumentation{%
- \begin{tblr}{width=\linewidth,colspec={X[c]X[c]X[c]X[c]X[c]X[c]},cells={font=\huge\sffamily}}
- {\LaTeX} & {\hologo{pdfLaTeX}} & {\hologo{LuaLaTeX}} & {\TikZ} & {\TeXLive} & {\hologo{MiKTeX}} \\
- \end{tblr}
-}
-\usepackage{simplekv}
-\usepackage{menukeys}
-\let\tab\relax
-\usepackage{tabto}
-\usepackage{pgf,pgfplots}
-\pgfplotsset{compat=newest,xlabel near ticks,ylabel near ticks}
-\usepackage{listofitems}
-\usepackage{xintexpr}
-\usepackage{codehigh}
-\usepackage{scontents}
-\usepackage{hyperref}
-\urlstyle{same}
-\hypersetup{pdfborder=0 0 0}
-\usepackage{geometry}
-\geometry{margin=1.5cm}
-\usepackage{babel}
-\usepackage{newverbs}
-
-\input{ProfLycee-doc-macropreamb.tex}
-
-\input{ProfLycee-doc-pagegarde.tex}
-
-\newpage
-
-\phantomsection
-\hypertarget{matoc}{}
-
-\tableofcontents
-
-\newpage
-
-\phantom{t}\par\vfill\par
-\begin{PART}
- \begin{center}
- \Huge\MakeUppercase{Introduction}
- \end{center}
-\end{PART}
-\par\vfill\par\phantom{t}
-
-\newpage
-
-\input{ProfLycee-doc-introduction.tex}
-
-\newpage
-
-\phantom{t}\par\vfill\par
-\begin{PART}
- \begin{center}
- \Huge\MakeUppercase{Liste des commandes}
- \end{center}
-\end{PART}
-\par\vfill\par\phantom{t}
-
-\newpage
-
-\input{ProfLycee-doc-listecommandes.tex}
-
-\newpage
-
-\phantom{t}\par\vfill\par
-\begin{PART}
- \begin{center}
- \Huge\MakeUppercase{Écritures mathématiques}
- \end{center}
-\end{PART}
-\par\vfill\par\phantom{t}
-
-\newpage
-
-\input{ProfLycee-doc-ecritures.tex}
-
-\newpage
-
-\phantom{t}\par\vfill\par
-\begin{PART}
- \begin{center}
- \Huge\MakeUppercase{Outils pour l'analyse}
- \end{center}
-\end{PART}
-\par\vfill\par\phantom{t}
-
-\newpage
-
-\input{ProfLycee-doc-outilsanalyse.tex}
-
-\newpage
-
-\phantom{t}\par\vfill\par
-\begin{PART}
- \begin{center}
- \Huge\MakeUppercase{Outils graphiques}
- \end{center}
-\end{PART}
-\par\vfill\par\phantom{t}
-
-\newpage
-
-\input{ProfLycee-doc-outilsgraphiques.tex}
-
-\newpage
-
-\phantom{t}\par\vfill\par
-\begin{PART}
- \begin{center}
- \Huge\MakeUppercase{Présentation de codes}
- \end{center}
-\end{PART}
-\par\vfill\par\phantom{t}
-
-\newpage
-
-\input{ProfLycee-doc-prescodes.tex}
-
-\pagebreak
-
-\phantom{t}\par\vfill\par
-\begin{PART}
- \begin{center}
- \Huge\MakeUppercase{Outils pour la géométrie}
- \end{center}
-\end{PART}
-\par\vfill\par\phantom{t}
-
-\newpage
-
-\input{ProfLycee-doc-outilsgeom.tex}
-
-\pagebreak
-
-\phantom{t}\par\vfill\par
-\begin{PART}
- \begin{center}
- \Huge\MakeUppercase{Outils pour la géométrie analytique}
- \end{center}
-\end{PART}
-\par\vfill\par\phantom{t}
-
-\newpage
-
-\input{ProfLycee-doc-outilsgeomanalyt.tex}
-
-\newpage
-
-\phantom{t}\par\vfill\par
-\begin{PART}
- \begin{center}
- \Huge\MakeUppercase{Outils pour les statistiques}
- \end{center}
-\end{PART}
-\par\vfill\par\phantom{t}
-
-\newpage
-
-\input{ProfLycee-doc-stats.tex}
-
-\newpage
-
-\phantom{t}\par\vfill\par
-\begin{PART}
- \begin{center}
- \Huge\MakeUppercase{Outils pour les probabilités}
- \end{center}
-\end{PART}
-\par\vfill\par\phantom{t}
-
-\newpage
-
-\input{ProfLycee-doc-probas.tex}
-
-\newpage
-
-\phantom{t}\par\vfill\par
-\begin{PART}
- \begin{center}
- \Huge\MakeUppercase{Outils pour l'arithmétique}
- \end{center}
-\end{PART}
-\par\vfill\par\phantom{t}
-
-\newpage
-
-\input{ProfLycee-doc-arithm.tex}
-
-\newpage
-
-\phantom{t}\par\vfill\par
-\begin{PART}
- \begin{center}
- \Huge\MakeUppercase{Écritures, simplifications}
- \end{center}
-\end{PART}
-\par\vfill\par\phantom{t}
-
-\newpage
-
-\input{ProfLycee-doc-simplif.tex}
-
-\pagebreak
-
-\phantom{t}\par\vfill\par
-\begin{PART}
- \begin{center}
- \Huge\MakeUppercase{Jeux et récréations}
- \end{center}
-\end{PART}
-\par\vfill\par\phantom{t}
-
-\newpage
-
-\input{ProfLycee-doc-jeuxrecreat.tex}
-
-\newpage
-
-\phantom{t}\par\vfill\par
-\begin{PART}
- \begin{center}
- \Huge\MakeUppercase{Compétences en lycée}
- \end{center}
-\end{PART}
-\par\vfill\par\phantom{t}
-
-\newpage
-
-\input{ProfLycee-doc-competences.tex}
-
-\newpage
-
-\phantom{t}\par\vfill\par
-\begin{PART}
- \begin{center}
- \Huge\MakeUppercase{Examens}
- \end{center}
-\end{PART}
-\par\vfill\par\phantom{t}
-
-\newpage
-
-\input{ProfLycee-doc-exams.tex}
-
-\newpage
-
-\phantom{t}\par\vfill\par
-\begin{PART}
- \begin{center}
- \Huge\MakeUppercase{Projets, en test}
- \end{center}
-\end{PART}
-\par\vfill\par\phantom{t}
-
-\newpage
-
-\input{ProfLycee-doc-projets.tex}
-
-\newpage
-
-\phantom{t}\par\vfill\par
-\begin{PART}
- \begin{center}
- \Huge\MakeUppercase{Historique}
- \end{center}
-\end{PART}
-\par\vfill\par\phantom{t}
-
-\newpage
-
-\input{ProfLycee-doc-historique.tex}
-
-\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pyluatex.pdf b/macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pyluatex.pdf
index f8e331e0a6..5e6698109f 100644
--- a/macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pyluatex.pdf
+++ b/macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pyluatex.pdf
Binary files differ
diff --git a/macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pyluatex.tex b/macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pyluatex.tex
deleted file mode 100644
index 03648eea0c..0000000000
--- a/macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pyluatex.tex
+++ /dev/null
@@ -1,427 +0,0 @@
-% !TeX TXS-program:compile = txs:///arara
-% arara: lualatex: {shell: yes, synctex: no, interaction: batchmode}
-% arara: lualatex: {shell: yes, synctex: no, interaction: batchmode} if found('log', '(undefined references|Please rerun|Rerun to get)')
-
-\documentclass[french,a4paper,10pt]{article}
-\def\PLver{3.03c}
-\usepackage[margin=1.5cm]{geometry}
-\usepackage{ProfLycee}
-\useproflyclib{piton}
-\usepackage[executable=python,ignoreerrors]{pyluatex}
-\usepackage{babel}
-\sisetup{locale=FR,output-decimal-marker={,},group-minimum-digits=4}
-\usepackage{codehigh}
-
-\begin{document}
-
-\part*{ProfLycee (\PLver), Piton et Pyluatex}
-
-\section{Code \og Piton \fg{}, indépendant de Pyluatex}
-
-\subsection{Préambule basique}
-
-{\small \begin{codehigh}
-\documentclass[french,a4paper,10pt]{article}
-\usepackage{ProfLycee}
-\useproflyclib{piton} % lua
-\end{codehigh}}
-
-\subsection{Exemples}
-
-{\small \begin{codehigh}
-%Sortie par défaut
-\begin{CodePiton}{}
-def valeur_absolue(x) :
- "Renvoie la valeur absolue de x"
- #le petit test qui va bien
- if x > 0 :
- return x
- else:
- return -x
-\end{CodePiton}
-\end{codehigh}}
-
-\begin{CodePiton}{}
-def valeur_absolue(x) :
- "Renvoie la valeur absolue de x"
- #le petit test qui va bien
- if x > 0 :
- return x
- else:
- return -x
-\end{CodePiton}
-
-{\small \begin{codehigh}
-%Sortie avec style Classique, Largeur=10cm
-\begin{CodePiton}[Largeur=10cm]{}
-def valeur_absolue(x) :
- "Renvoie la valeur absolue de x"
- #le petit test qui va bien
- if x > 0 :
- return x
- else:
- return -x
-\end{CodePiton}
-\end{codehigh}}
-
-\begin{CodePiton}[Largeur=10cm]{}
-def valeur_absolue(x) :
- "Renvoie la valeur absolue de x"
- #le petit test qui va bien
- if x > 0 :
- return x
- else:
- return -x
-\end{CodePiton}
-
-\pagebreak
-
-{\small \begin{codehigh}
-%Sortie avec Style=Moderne, Sans Titre, Largeur=10cm, centré
-\begin{CodePiton}[Style=Moderne,Largeur=10cm,BarreTitre=false,Alignement=center]{}
-def valeur_absolue(x) :
- "Renvoie la valeur absolue de x"
- #le petit test qui va bien
- if x > 0 :
- return x
- else:
- return -x
-\end{CodePiton}
-\end{codehigh}}
-
-\begin{CodePiton}[Style=Moderne,Largeur=10cm,BarreTitre=false,Alignement=center]{}
-def valeur_absolue(x) :
- "Renvoie la valeur absolue de x"
- #le petit test qui va bien
- if x > 0 :
- return x
- else:
- return -x
-\end{CodePiton}
-
-{\small \begin{codehigh}
-%Sortie avec Style=Classique, Largeur=0.5\linewidth, aligné à droite, sans Cadre, avec Filigrane
-\begin{CodePiton}%
- [Largeur=0.5\linewidth,Cadre=false,Alignement=flush right,Filigrane,Titre={Script}]{}
-#environnement piton avec numéros de ligne, pleine largeur, style moderne
-def valeur_absolue(x) :
- "Renvoie la valeur absolue de x"
- #le petit test qui va bien
- if x > 0 :
- return x
- else:
- return -x
-\end{CodePiton}
-\end{codehigh}}
-
-\begin{CodePiton}[Largeur=0.5\linewidth,Cadre=false,Alignement=flush right,Filigrane,Titre={Script}]{}
-def valeur_absolue(x) :
- "Renvoie la valeur absolue de x"
- #le petit test qui va bien
- if x > 0 :
- return x
- else:
- return -x
-\end{CodePiton}
-
-{\small \begin{codehigh}
-%Sortie Moderne, Largeur=11cm, avec Filigrane, aligné à gauche, sans ligne
-\begin{CodePiton}[Style=Moderne,Largeur=11cm,Filigrane,Alignement=flush left,Lignes=false]{}
-def valeur_absolue(x) :
- "Renvoie la valeur absolue de x"
- #le petit test qui va bien
- if x > 0 :
- return x
- else:
- return -x
-\end{CodePiton}
-\end{codehigh}}
-
-\begin{CodePiton}[Style=Moderne,Largeur=11cm,Filigrane,Alignement=flush left,Lignes=false]{}
-def valeur_absolue(x) :
- "Renvoie la valeur absolue de x"
- #le petit test qui va bien
- if x > 0 :
- return x
- else:
- return -x
-\end{CodePiton}
-
-\pagebreak
-
-\section{Console \og Piton \fg{}, dépendant de Pyluatex}
-
-\subsection{Préambule, avec le package pyluatex}
-
-{\small \begin{codehigh}
-\documentclass[french,a4paper,10pt]{article}
-\usepackage{ProfLycee}
-\useproflyclib{piton}
-\usepackage[executable=python]{pyluatex} % lua + shell-escape
-\end{codehigh}}
-
-\subsection{Commande}
-
-{\small \begin{codehigh}
-\begin{ConsolePiton}[Options piton]<Clés>{Options tcbox}
-...
-...
-\end{ConsolePiton}
-\end{codehigh}}
-
-\medskip
-
-Les clés, à placer entre \texttt{<...>}, sont :
-
-\begin{itemize}
- \item \textbf{\textsf{$\langle$Logo$\rangle$}} pour afficher un petit logo dans les \textit{titres} de la console REPL ; \hfill{}défaut : \textbf{\textsf{$\langle$true$\rangle$}}
- \item \textbf{\textsf{$\langle$Largeur$\rangle$}} pour spécifier la largeur de la console REPL ; \hfill{}défaut : \textbf{\textsf{$\langle$\textbackslash{}linewidth$\rangle$}}
- \item \textbf{\textsf{$\langle$Alignement$\rangle$}} pour spécifier l'alignement de la console REPL.\hfill{}défaut : \textbf{\textsf{$\langle$flush left$\rangle$}}
-\end{itemize}
-
-\subsection{Exemples}
-
-{\small \begin{codehigh}
-%Déclaration d'une fonction python + librairie random pour utilisation ultérieure
-\begin{python}
-from random import randint
-
-def valeur_absolue(x) :
- "Renvoie la valeur absolue de x"
- #le petit test qui va bien
- if x > 0 :
- return x
- else:
- return -x
-\end{python}
-\end{codehigh}}
-
-\begin{python}
-from random import randint
-
-def valeur_absolue(x) :
- "Renvoie la valeur absolue de x"
- #le petit test qui va bien
- if x > 0 :
- return x
- else:
- return -x
-\end{python}
-
-{\small \begin{codehigh}
-\begin{ConsolePiton}{}
-1+1
-2**10
-valeur_absolue(-3)
-valeur_absolue(0)
-valeur_absolue(5)
-print(f"La valeur absolue de 5 est {valeur_absolue(5)}")
-print(f"La valeur absolue de -4 est {valeur_absolue(-4)}")
-\end{ConsolePiton}
-\end{codehigh}}
-
-\begin{ConsolePiton}{}
-1+1
-2**10
-valeur_absolue(-3)
-valeur_absolue(0)
-valeur_absolue(5)
-print(f"La valeur absolue de 5 est {valeur_absolue(5)}")
-print(f"La valeur absolue de -4 est {valeur_absolue(-4)}")
-\end{ConsolePiton}
-
-\pagebreak
-
-{\small \begin{codehigh}
-\begin{ConsolePiton}<Largeur=11cm,Alignement=center,Logo=false>{}
-1+1
-2**10
-valeur_absolue(-3)
-valeur_absolue(0)
-valeur_absolue(5)
-print(f"La valeur absolue de 5 est {valeur_absolue(5)}")
-print(f"La valeur absolue de -4 est {valeur_absolue(-4)}")
-liste = [randint(1,20) for i in range(10)]
-print(liste)
-print(max(liste), min(liste), sum(liste))
-\end{ConsolePiton}
-\end{codehigh}}
-
-\begin{ConsolePiton}<Largeur=11cm,Alignement=center,Logo=false>{}
-1+1
-2**10
-valeur_absolue(-3)
-valeur_absolue(0)
-valeur_absolue(5)
-print(f"La valeur absolue de 5 est {valeur_absolue(5)}")
-print(f"La valeur absolue de -4 est {valeur_absolue(-4)}")
-liste = [randint(1,20) for i in range(10)]
-print(liste)
-print(max(liste), min(liste), sum(liste))
-\end{ConsolePiton}
-
-{\small \begin{codehigh}
-\begin{ConsolePiton}<Largeur=10cm,Alignement=center>{}
-[i**2 for i in range(50)]
-\end{ConsolePiton}
-\end{codehigh}}
-
-\begin{ConsolePiton}<Largeur=10cm,Alignement=center>{}
-[i**2 for i in range(50)]
-\end{ConsolePiton}
-
-\pagebreak
-
-\section{Présentation, et exécution, comme avec Thonny}
-
-\subsection{Préambule, avec le package pyluatex}
-
-{\small \begin{codehigh}
-\documentclass[french,a4paper,10pt]{article}
-\usepackage{ProfLycee}
-\useproflyclib{piton}
-\usepackage[executable=python]{pyluatex} % lua + shell-escape
-\end{codehigh}}
-
-\subsection{Commandes}
-
-{\small \begin{codehigh}
-\begin{PitonThonnyEditor}<clé>[options tcbox]{largeur}
-...
-\end{PitonThonnyEditor}
-\end{codehigh}}
-
-\medskip
-
-La clé, à placer entre \texttt{<...>}, est :
-
-\begin{itemize}
- \item la clé \textbf{\textsf{$\langle$Gobble$\rangle$}} pour spécifier des options liées au \textsf{gobble}, parmi \textbf{\textsf{$\langle$nb/auto$\rangle$}} ;
-
- \hfill{}à adapter en fonction des situations (!)
- \item la clé \textbf{\textsf{$\langle$NomFichier$\rangle$}} pour afficher le nom du fichier dans le cartouche \textit{éditeur}.
-
- \hfill{}défaut : \textbf{\textsf{$\langle$script.py$\rangle$}}
-\end{itemize}
-
-{\small \begin{codehigh}
-\begin{PitonThonnyConsole}<clés>[options tcbox]{largeur}
-...
-\end{PitonThonnyConsole}
-\end{codehigh}}
-
-\medskip
-
-Les clés, à placer entre \texttt{<...>}, sont :
-
-\begin{itemize}
- \item la clé \textbf{\textsf{$\langle$NomConsole$\rangle$}} pour afficher le nom de la \textit{console} ; \hfill{}défaut \textbf{\textsf{$\langle$console$\rangle$}}
- \item la clé \textbf{\textsf{$\langle$IntroConsole$\rangle$}} pour afficher le message d'accueil de la console.
-\end{itemize}
-
-\subsection{Exemples}
-
-{\small\begin{codehigh}
-\begin{python}
-from math import gcd
-
-def est_duffy(n) :
- nb_div, somme_div = 0, 0
- for i in range(1, n+1) :
- if n % i == 0 :
- nb_div += 1
- somme_div += i
- if gcd(somme_div, n) == 1 :
- return True
- else :
- return False
-
-\end{python}
-\end{codehigh}}
-
-{\small\begin{codehigh}
-\begin{PitonThonnyEditor}<NomFichier=tpcapytale.py>{12cm}
-#PROJET CAPYTALE
-from math import gcd
-
-def est_duffy(n) :
- nb_div = 0
- somme_div = 0
- for i in range(1, n+1) :
- if n % i == 0 :
- nb_div += 1
- somme_div += i
- if gcd(somme_div, n) == 1 :
- return True
- else :
- return False
-\end{PitonThonnyEditor}
-\end{codehigh}}
-
-\begin{PitonThonnyEditor}<NomFichier=tpcapytale.py>{12cm}
-#PROJET CAPYTALE
-from math import gcd
-
-def est_duffy(n) :
- nb_div = 0
- somme_div = 0
- for i in range(1, n+1) :
- if n % i == 0 :
- nb_div += 1
- somme_div += i
- if gcd(somme_div, n) == 1 :
- return True
- else :
- return False
-\end{PitonThonnyEditor}
-
-{\small\begin{codehigh}
-\begin{PitonThonnyConsole}<IntroConsole={python 3.8.10}>{12cm}
-#Run tpcapytale.py
-est_duffy(6)
-est_duffy(13)
-est_duffy(265)
-
-from random import randint
-nb = randint(1,100000)
-nb, est_duffy(nb)
-\end{PitonThonnyConsole}
-\end{codehigh}}
-
-\begin{python}
-from math import gcd
-
-def est_duffy(n) :
- nb_div, somme_div = 0, 0
- for i in range(1, n+1) :
- if n % i == 0 :
- nb_div += 1
- somme_div += i
- if gcd(somme_div, n) == 1 :
- return True
- else :
- return False
-
-\end{python}
-\begin{PitonThonnyConsole}<IntroConsole={python 3.8.10}>{12cm}
-#Run tpcapytale.py
-est_duffy(6)
-est_duffy(13)
-est_duffy(265)
-
-from random import randint
-nb = randint(1,100000)
-nb, est_duffy(nb)
-\end{PitonThonnyConsole}
-
-{\small\begin{codehigh}
-\begin{PitonThonnyConsole}{8cm}
-[i**2 for i in range(50)]
-\end{PitonThonnyConsole}
-\end{codehigh}}
-
-\begin{PitonThonnyConsole}{8cm}
-[i**2 for i in range(50)]
-\end{PitonThonnyConsole}
-
-\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pythontex.tex b/macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pythontex.tex
deleted file mode 100644
index e418300cae..0000000000
--- a/macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pythontex.tex
+++ /dev/null
@@ -1,242 +0,0 @@
-% !TeX TXS-program:compile = txs:///arara
-% arara: lualatex: {shell: no, synctex: yes, interaction: batchmode}
-% arara: pythontex: {rerun: always} if found('pytxcode', 'PYTHONTEX#py')
-% arara: lualatex: {shell: no, synctex: yes, interaction: batchmode} if found('pytxcode', 'PYTHONTEX#py')
-% arara: lualatex: {shell: no, synctex: yes, interaction: batchmode} if found('log', '(undefined references|Please rerun|Rerun to get)')
-
-\documentclass[french,a4paper,10pt]{article}
-\def\PLver{2.7.5}
-\usepackage[margin=1.5cm]{geometry}
-\usepackage{ProfLycee}
-\useproflyclib{pythontex}
-\usepackage{babel}
-\sisetup{locale=FR,output-decimal-marker={,},group-minimum-digits=4}
-\usepackage{codehigh}
-
-\begin{document}
-
-\part*{ProfLycee (\PLver), Pythontex}
-
-\section{Code \og Pythontex \fg{}}
-
-\subsection{Préambule basique}
-
-{\small \begin{codehigh}
-\documentclass[french,a4paper,10pt]{article}
-\usepackage{ProfLycee}
-\useproflyclib{pythontex} % compilation spécifique
-\end{codehigh}}
-
-\subsection{Exemples}
-
-{\small \begin{codehigh}
-%Sortie par défaut
-\begin{CodePythontex}{}
-def valeur_absolue(x):
- "Renvoie la valeur absolue de x"
- #le petit test qui va bien
- if x > 0:
- return x
- else:
- return -x
-\end{CodePythontex}
-\end{codehigh}}
-
-\begin{CodePythontex}{}
-def valeur_absolue(x):
- "Renvoie la valeur absolue de x"
- #le petit test qui va bien
- if x > 0:
- return x
- else:
- return -x
-
-#bla
-#bla
-#bla
-\end{CodePythontex}
-
-{\small \begin{codehigh}
-%Sortie avec Style=Classique, Largeur=10cm, centré
-\begin{CodePythontexAlt}[Largeur=10cm,Centre,PremLigne=10]{}
-def valeur_absolue(x):
- "Renvoie la valeur absolue de x"
- #le petit test qui va bien
- if x > 0:
- return x
- else:
- return -x
-\end{CodePythontexAlt}
-\end{codehigh}}
-
-\begin{CodePythontexAlt}[Largeur=10cm,Centre,PremLigne=10]{}
-def valeur_absolue(x):
- "Renvoie la valeur absolue de x"
- #le petit test qui va bien
- if x > 0:
- return x
- else:
- return -x
-
-#bla
-#bla
-#bla
-\end{CodePythontexAlt}
-
-\pagebreak
-
-{\small \begin{codehigh}
-%Sortie avec Style=Classique, Largeur=10cm
-\begin{CodePythontexAlt}[Largeur=10cm]{}
-def valeur_absolue(x):
- "Renvoie la valeur absolue de x"
- #le petit test qui va bien
- if x > 0:
- return x
- else:
- return -x
-\end{CodePythontexAlt}
-\end{codehigh}}
-
-\begin{CodePythontexAlt}[Largeur=10cm]{}
-def valeur_absolue(x):
- "Renvoie la valeur absolue de x"
- #le petit test qui va bien
- if x > 0:
- return x
- else:
- return -x
-\end{CodePythontexAlt}
-
-{\small \begin{codehigh}
-%Sortie avec Style=Classique, Largeur=0.5\linewidth, centré, sans numéro
-\begin{CodePythontexAlt}[Largeur=0.5\linewidth,Centre,Lignes=false]{}
-def valeur_absolue(x):
- "Renvoie la valeur absolue de x"
- #le petit test qui va bien
- if x > 0:
- return x
- else:
- return -x
-\end{CodePythontexAlt}
-\end{codehigh}}
-
-\begin{CodePythontexAlt}[Largeur=0.5\linewidth,Centre,Lignes=false]{}
-def valeur_absolue(x):
- "Renvoie la valeur absolue de x"
- #le petit test qui va bien
- if x > 0:
- return x
- else:
- return -x
-\end{CodePythontexAlt}
-
-{\small \begin{codehigh}
-%Sortie Moderne, Largeur=11cm, sans ligne
-\begin{CodePythontex}[Largeur=11cm,Lignes=false]{}
-def valeur_absolue(x):
- "Renvoie la valeur absolue de x"
- #le petit test qui va bien
- if x > 0:
- return x
- else:
- return -x
-\end{CodePythontex}
-\end{codehigh}}
-
-\begin{CodePythontex}[Largeur=11cm,Lignes=false]{}
-def valeur_absolue(x):
- "Renvoie la valeur absolue de x"
- #le petit test qui va bien
- if x > 0:
- return x
- else:
- return -x
-\end{CodePythontex}
-
-\pagebreak
-
-\section{Console \og Pythontex \fg{}}
-
-{\small \begin{codehigh}
-%Déclaration d'une fonction python + librairie random pour utilisation ultérieure
-\begin{pyconcode}
-from random import randint
-
-def valeur_absolue(x):
- "Renvoie la valeur absolue de x"
- #le petit test qui va bien
- if x > 0:
- return x
- else:
- return -x
-
-\end{pyconcode}
-\end{codehigh}}
-
-\begin{pyconcode}
-from random import randint
-
-def valeur_absolue(x):
- "Renvoie la valeur absolue de x"
- #le petit test qui va bien
- if x > 0:
- return x
- else:
- return -x
-
-\end{pyconcode}
-
-{\small \begin{codehigh}
-\begin{ConsolePythontex}{}
-1+1
-2**10
-valeur_absolue(-3)
-valeur_absolue(0)
-valeur_absolue(5)
-print(f"La valeur absolue de 5 est {valeur_absolue(5)}")
-print(f"La valeur absolue de -4 est {valeur_absolue(-4)}")
-\end{ConsolePythontex}
-\end{codehigh}}
-
-\begin{ConsolePythontex}{}
-1+1
-2**10
-valeur_absolue(-3)
-valeur_absolue(0)
-valeur_absolue(5)
-print(f"La valeur absolue de 5 est {valeur_absolue(5)}")
-print(f"La valeur absolue de -4 est {valeur_absolue(-4)}")
-\end{ConsolePythontex}
-
-\pagebreak
-
-{\small \begin{codehigh}
-\begin{ConsolePythontex}[Largeur=12cm,Centre]{}
-1+1
-2**10
-valeur_absolue(-3)
-valeur_absolue(0)
-valeur_absolue(5)
-print(f"La valeur absolue de 5 est {valeur_absolue(5)}")
-print(f"La valeur absolue de -4 est {valeur_absolue(-4)}")
-liste = [randint(1,20) for i in range(10)]
-print(liste)
-print(max(liste), min(liste), sum(liste))
-\end{ConsolePythontex}
-\end{codehigh}}
-
-\begin{ConsolePythontex}[Largeur=12cm,Centre]{}
-1+1
-2**10
-valeur_absolue(-3)
-valeur_absolue(0)
-valeur_absolue(5)
-print(f"La valeur absolue de 5 est {valeur_absolue(5)}")
-print(f"La valeur absolue de -4 est {valeur_absolue(-4)}")
-liste = [randint(1,20) for i in range(10)]
-print(liste)
-print(max(liste), min(liste), sum(liste))
-\end{ConsolePythontex}
-
-\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/proflycee/tex/ProfLycee.sty b/macros/latex/contrib/proflycee/tex/ProfLycee.sty
index 25a212e65a..f622238309 100644
--- a/macros/latex/contrib/proflycee/tex/ProfLycee.sty
+++ b/macros/latex/contrib/proflycee/tex/ProfLycee.sty
@@ -3,7 +3,9 @@
% or later, see http://www.latex-project.org/lppl.txtf
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{ProfLycee}[2024/04/20 3.03d Aide pour l'utilisation de LaTeX en lycee]
+\ProvidesPackage{ProfLycee}[2024/05/09 3.04b Aide pour l'utilisation de LaTeX en lycee]
+% 3.04b Travail sur la loi binomiale + Ajout de clés pour les environnements graphiques
+% 3.04a Améliorations de la partie graphiques tikz (intégrales, axes) + Factorielle
% 3.03d Page de garde type BAC
% 3.03c Correction du fonctionnement gobble avec piton + compatibilité luamplib PfC
% 3.03b Compétences Maths Lycées + \pflnum pour num+xint :-) + correction de bugs (div eucl)
diff --git a/macros/latex/contrib/proflycee/tex/proflycee-tools-aleatoire.tex b/macros/latex/contrib/proflycee/tex/proflycee-tools-aleatoire.tex
index 19d13ab932..4d4a50eca3 100644
--- a/macros/latex/contrib/proflycee/tex/proflycee-tools-aleatoire.tex
+++ b/macros/latex/contrib/proflycee/tex/proflycee-tools-aleatoire.tex
@@ -85,8 +85,18 @@
\newcommand\NbAlea[4][0]{%entier ou décimal
\xintifboolexpr{#1 == 0}%
- {\xdef#4{\fpeval{randint(#2,#3)}}}%
- {\xdef#4{\fpeval{round(randint(#2,#3)+rand(),#1)}}}%
+ {%
+ \xdef#4{\fpeval{randint(#2,#3)}}%
+ }%
+ {%
+ \xintifboolexpr{(#3-#2) == 1}%
+ {%
+ \xdef#4{\fpeval{round(#2+rand(),#1)}}%
+ }%
+ {%
+ \xdef#4{\fpeval{round(randint(#2,#3)+rand(),#1)}}%
+ }%
+ }%
}
\newcommand\VarNbAlea[2]{%
\xdef#1{\fpeval{#2}}%
diff --git a/macros/latex/contrib/proflycee/tex/proflycee-tools-analyse.tex b/macros/latex/contrib/proflycee/tex/proflycee-tools-analyse.tex
index 5e1f246ab3..ade88434c2 100644
--- a/macros/latex/contrib/proflycee/tex/proflycee-tools-analyse.tex
+++ b/macros/latex/contrib/proflycee/tex/proflycee-tools-analyse.tex
@@ -574,6 +574,36 @@
}%
}
+%===intégrale 'brute'
+\NewDocumentCommand\CalcIntegrale{ s O{} D<>{50} m m m }{%
+ \xintdeffloatfunc varfct(x) := #4 ;%
+ \def\TmpNmU{\xinteval{(#3)-1}}%
+ \def\TmpRes{\xintfloateval{(#6-#5)/(6*(#3))*(2*add(varfct(#5+i*(#6-#5)/(#3)),i=1..\TmpNmU)+varfct(#5)+varfct(#6)+4*add(varfct(#5+(i+0.5)*(#6-#5)/(#3)), i=0..\TmpNmU))}}%
+ \IfStrEq{#2}{}%
+ {%
+ \IfBooleanTF{#1}{\num{\TmpRes}}{\TmpRes}%
+ }%
+ {%
+ \IfBooleanTF{#1}{\num{\xintfloateval{round(\TmpRes,#2)}}}{\xintfloateval{round(\TmpRes,#2)}}%
+ }%
+ \relax
+}
+
+%===intégrale 'brute'
+\NewDocumentCommand\ValeurMoyenneIntg{ s O{} D<>{50} m m m }{%
+ \xintdeffloatfunc varfct(x) := #4 ;%
+ \def\TmpNmU{\xinteval{(#3)-1}}%
+ \def\TmpRes{\xintfloateval{(1)/(6*(#3))*(2*add(varfct(#5+i*(#6-#5)/(#3)),i=1..\TmpNmU)+varfct(#5)+varfct(#6)+4*add(varfct(#5+(i+0.5)*(#6-#5)/(#3)), i=0..\TmpNmU))}}%
+ \IfStrEq{#2}{}%
+ {%
+ \IfBooleanTF{#1}{\num{\TmpRes}}{\TmpRes}%
+ }%
+ {%
+ \IfBooleanTF{#1}{\num{\xintfloateval{round(\TmpRes,#2)}}}{\xintfloateval{round(\TmpRes,#2)}}%
+ }%
+ \relax
+}
+
%==intégrale tikz==
\defKV[methodeintegrtkz]{%
diff --git a/macros/latex/contrib/proflycee/tex/proflycee-tools-arithm.tex b/macros/latex/contrib/proflycee/tex/proflycee-tools-arithm.tex
index db3f2bc8ac..a021fea937 100644
--- a/macros/latex/contrib/proflycee/tex/proflycee-tools-arithm.tex
+++ b/macros/latex/contrib/proflycee/tex/proflycee-tools-arithm.tex
@@ -1512,4 +1512,394 @@
{}%
}
+%====FACTORIELLE
+\defKV[calcfactorielle]{ChSignif=\def\factochfsign{#1},Sens=\def\factochfsens{#1}}
+\setKVdefault[calcfactorielle]{%
+ Complet=false,%
+ Enonce=false,%
+ Partiel=false,%
+ Grand=false,%
+ ChSignif=9,%
+ Espace=\mkern1.5mu\relax,%
+ Sens=m
+}
+
+\NewDocumentCommand\Factorielle{ s O{} m }{%
+ \restoreKV[calcfactorielle]%
+ \setKV[calcfactorielle]{#2}%
+ \ifboolKV[calcfactorielle]{Grand}%
+ {%
+ \xdef\tmpres{\xintfloateval[\factochfsign]{factorial(#3)}}%
+ }%
+ {%
+ \xdef\tmpres{\xinteval{factorial(#3)}}%
+ }%
+ \ensuremath{%
+ \ifboolKV[calcfactorielle]{Enonce}%
+ {%
+ \IfBooleanTF{#1}{#3\useKV[calcfactorielle]{Espace}!}{\num{#3}\useKV[calcfactorielle]{Espace}!}=
+ }%
+ {}%
+ \ifboolKV[calcfactorielle]{Partiel}%
+ {%
+ \IfBooleanTF{#1}%
+ {%
+ \IfStrEqCase{\factochfsens}{%
+ {m}{1 \times 2 \times \ldots \times \xinteval{#3-1} \times #3 \ifboolKV[calcfactorielle]{Grand}{\approx}{=}}%
+ {d}{#3 \times \xinteval{#3-1} \times \ldots \times 2 \times 1 \ifboolKV[calcfactorielle]{Grand}{\approx}{=}}%
+ }%
+ }%
+ {%
+ \IfStrEqCase{\factochfsens}{%
+ {m}{1 \times 2 \times \ldots \times \num{\xinteval{#3-1}} \times \num{#3} \ifboolKV[calcfactorielle]{Grand}{\approx}{=}}%
+ {d}{\num{#3} \times \num{\xinteval{#3-1}} \times \ldots \times 2 \times 1 \ifboolKV[calcfactorielle]{Grand}{\approx}{=}}%
+ }%
+ }%
+ }%
+ {}%
+ \ifboolKV[calcfactorielle]{Complet}%
+ {%
+ \IfBooleanTF{#1}%
+ {%
+ \IfStrEq{\factochfsens}{m}%
+ {%
+ 1 \xintFor* ##1 in {\xintSeq{2}{#3}}\do{\times ##1} \ifboolKV[calcfactorielle]{Grand}{\approx}{=}
+ }%
+ {%
+ \xintFor* ##1 in {\xintSeq{#3}{2}}\do{##1 \times} 1 \ifboolKV[calcfactorielle]{Grand}{\approx}{=}
+ }%
+ }%
+ {%
+ \IfStrEq{\factochfsens}{m}%
+ {%
+ 1 \xintFor* ##1 in {\xintSeq{2}{#3}}\do{\times \num{##1}} \ifboolKV[calcfactorielle]{Grand}{\approx}{=}
+ }%
+ {%
+ \xintFor* ##1 in {\xintSeq{#3}{2}}\do{\num{##1} \times} 1 \ifboolKV[calcfactorielle]{Grand}{\approx}{=}
+ }%
+ }%
+ }%
+ {}%
+ \IfBooleanTF{#1}%
+ {%
+ \tmpres%
+ }%
+ {%
+ \ifboolKV[calcfactorielle]{Grand}%
+ {%
+ \num[scientific-notation=true]{\tmpres}%
+ }%
+ {%
+ \num{\tmpres}%
+ }%
+ }%
+ }%
+}
+
+\NewDocumentCommand\Primorielle{ s O{} m }{%
+ \restoreKV[calcfactorielle]%
+ \setKV[calcfactorielle]{#2}%
+ \def\tmpres{1}%
+ \xintFor* ##1 in {\xintSeq{1}{#3}}\do{%
+ \pgfmathisprime{##1}\ifnum\pgfmathresult=1\xdef\tmpres{\xinteval{\tmpres*##1}}\fi%
+ }%
+ \ifboolKV[calcfactorielle]{Grand}%
+ {%
+ \xdef\tmpres{\xintfloateval[\factochfsign]{\tmpres}}%
+ }%
+ {}%
+ \ensuremath{%
+ \ifboolKV[calcfactorielle]{Enonce}%
+ {%
+ \IfBooleanTF{#1}{#3\#}{\num{#3}\#}=
+ }%
+ {}%
+ \ifboolKV[calcfactorielle]{Complet}%
+ {%
+ \IfBooleanTF{#1}%
+ {%
+ \IfStrEq{\factochfsens}{m}%
+ {%
+ 2 \xintFor* ##1 in {\xintSeq{3}{#3}}\do{\pgfmathisprime{##1}\ifnum\pgfmathresult=1\times##1\fi} \ifboolKV[calcfactorielle]{Grand}{\approx}{=}
+ }%
+ {%
+ \xintFor* ##1 in {\xintSeq{#3}{3}}\do{\pgfmathisprime{##1}\ifnum\pgfmathresult=1##1\times\fi} 2 \ifboolKV[calcfactorielle]{Grand}{\approx}{=}
+ }%
+ }%
+ {%
+ \IfStrEq{\factochfsens}{m}%
+ {%
+ 2 \xintFor* ##1 in {\xintSeq{3}{#3}}\do{\pgfmathisprime{##1}\ifnum\pgfmathresult=1\times\num{##1}\fi} \ifboolKV[calcfactorielle]{Grand}{\approx}{=}
+ }%
+ {%
+ \xintFor* ##1 in {\xintSeq{#3}{3}}\do{\pgfmathisprime{##1}\ifnum\pgfmathresult=1\num{##1}\times\fi} 2 \ifboolKV[calcfactorielle]{Grand}{\approx}{=}
+ }%
+ }%
+ }%
+ {}%
+ \IfBooleanTF{#1}%
+ {%
+ \tmpres%
+ }%
+ {%
+ \ifboolKV[calcfactorielle]{Grand}%
+ {%
+ \num[scientific-notation=true]{\tmpres}%
+ }%
+ {%
+ \num{\tmpres}%
+ }%
+ }%
+ }%
+}
+
+\NewDocumentCommand\DoubleFactorielle{ s O{} m }{%
+ \restoreKV[calcfactorielle]%
+ \setKV[calcfactorielle]{#2}%
+ \def\tmpres{1}%
+ \xintFor* ##1 in {\xintSeq{1}{#3}}\do{%
+ \xintifboolexpr{\xintiiOdd{#3} == \xintiiOdd{##1} 'or' \xintiiEven{#3} == \xintiiEven{##1}}%
+ {%
+ \xdef\tmpres{\xinteval{\tmpres*##1}}%
+ }%
+ {}%
+ }%
+ \ifboolKV[calcfactorielle]{Grand}%
+ {%
+ \xdef\tmpres{\xintfloateval[\factochfsign]{\tmpres}}%
+ }%
+ {}%
+ \ensuremath{%
+ \ifboolKV[calcfactorielle]{Enonce}%
+ {%
+ \IfBooleanTF{#1}{#3\useKV[calcfactorielle]{Espace}!!}{\num{#3}\useKV[calcfactorielle]{Espace}!!}=
+ }%
+ {}%
+ \ifboolKV[calcfactorielle]{Complet}%
+ {%
+ \IfBooleanTF{#1}%
+ {%
+ \IfStrEq{\factochfsens}{m}%
+ {%
+ \xintifboolexpr{\xintiiOdd{#3} == 1}%
+ {%
+ 1 \xintFor* ##1 in {\xintSeq{3}{#3}}\do{%
+ \xintifboolexpr{\xintiiOdd{##1} == 1}{\times##1}{}%
+ }%
+ }%
+ {%
+ 2 \xintFor* ##1 in {\xintSeq{3}{#3}}\do{%
+ \xintifboolexpr{\xintiiOdd{##1} != 1}{\times##1}{}%
+ }%
+ }%
+ \ifboolKV[calcfactorielle]{Grand}{\approx}{=}%
+ }%
+ {%
+ \xintifboolexpr{\xintiiOdd{#3} == 1}%
+ {%
+ \xintFor* ##1 in {\xintSeq{#3}{3}}\do{%
+ \xintifboolexpr{\xintiiOdd{##1} == 1}{##1\times}{}%
+ }1%
+ }%
+ {%
+ \xintFor* ##1 in {\xintSeq{#3}{3}}\do{%
+ \xintifboolexpr{\xintiiOdd{##1} != 1}{##1\times}{}%
+ }2%
+ }%
+ \ifboolKV[calcfactorielle]{Grand}{\approx}{=}%
+ }%
+ }%
+ {%
+ \IfStrEq{\factochfsens}{m}%
+ {%
+ \xintifboolexpr{\xintiiOdd{#3} == 1}%
+ {%
+ 1 \xintFor* ##1 in {\xintSeq{3}{#3}}\do{%
+ \xintifboolexpr{\xintiiOdd{##1} == 1}{\times\num{##1}}{}%
+ }%
+ }%
+ {%
+ 2 \xintFor* ##1 in {\xintSeq{3}{#3}}\do{%
+ \xintifboolexpr{\xintiiOdd{##1} != 1}{\times\num{##1}}{}%
+ }%
+ }%
+ \ifboolKV[calcfactorielle]{Grand}{\approx}{=}%
+ }%
+ {%
+ \xintifboolexpr{\xintiiOdd{#3} == 1}%
+ {%
+ \xintFor* ##1 in {\xintSeq{#3}{3}}\do{%
+ \xintifboolexpr{\xintiiOdd{##1} == 1}{\num{##1}\times}{}%
+ }1%
+ }%
+ {%
+ \xintFor* ##1 in {\xintSeq{#3}{3}}\do{%
+ \xintifboolexpr{\xintiiOdd{##1} != 1}{\num{##1}\times}{}%
+ }2%
+ }%
+ \ifboolKV[calcfactorielle]{Grand}{\approx}{=}%
+ }%
+ }%
+ }%
+ {}%
+ \IfBooleanTF{#1}%
+ {%
+ \tmpres%
+ }%
+ {%
+ \ifboolKV[calcfactorielle]{Grand}%
+ {%
+ \num[scientific-notation=true]{\tmpres}%
+ }%
+ {%
+ \num{\tmpres}%
+ }%
+ }%
+ }%
+}
+
+\NewDocumentCommand\HyperFactorielle{ s O{} m }{%
+ \restoreKV[calcfactorielle]%
+ \setKV[calcfactorielle]{#2}%
+ \def\tmpres{1}%
+ \xintFor* ##1 in {\xintSeq{2}{#3}}\do{\xdef\tmpres{\xinteval{\tmpres*(##1)^(##1)}}}%
+ \ifboolKV[calcfactorielle]{Grand}%
+ {%
+ \xdef\tmpres{\xintfloateval[\factochfsign]{\tmpres}}%
+ }%
+ {}%
+ \ensuremath{%
+ \ifboolKV[calcfactorielle]{Enonce}%
+ {%
+ \IfBooleanTF{#1}{\text{H}(#3)}{\text{H}(\rm{#3})}=
+ }%
+ {}%
+ \ifboolKV[calcfactorielle]{Partiel}%
+ {%
+ \IfBooleanTF{#1}%
+ {%
+ \IfStrEqCase{\factochfsens}{%
+ {m}{1^1 \times 2^2 \times \ldots \times \xinteval{#3-1}^{\xinteval{#3-1}} \times #3^{#3} \ifboolKV[calcfactorielle]{Grand}{\approx}{=}}%
+ {d}{#3^{#3} \times \xinteval{#3-1}^{\xinteval{#3-1}} \times \ldots \times 2^2 \times 1^1 \ifboolKV[calcfactorielle]{Grand}{\approx}{=}}%
+ }%
+ }%
+ {%
+ \IfStrEqCase{\factochfsens}{%
+ {m}{1 \times 2 \times \ldots \times \num{\xinteval{#3-1}}^{\num{\xinteval{#3-1}}} \times \num{#3}^{\num{#3}} \ifboolKV[calcfactorielle]{Grand}{\approx}{=}}%
+ {d}{\num{#3}^{\num{#3}} \times \num{\xinteval{#3-1}}^{\num{\xinteval{#3-1}}} \times \ldots \times 2^2 \times 1^1 \ifboolKV[calcfactorielle]{Grand}{\approx}{=}}%
+ }%
+ }%
+ }%
+ {}%
+ \ifboolKV[calcfactorielle]{Complet}%
+ {%
+ \IfBooleanTF{#1}%
+ {%
+ \IfStrEq{\factochfsens}{m}%
+ {%
+ 1^1 \xintFor* ##1 in {\xintSeq{2}{#3}}\do{\times ##1^{##1}} \ifboolKV[calcfactorielle]{Grand}{\approx}{=}
+ }%
+ {%
+ \xintFor* ##1 in {\xintSeq{#3}{2}}\do{##1^{##1} \times} 1^1 \ifboolKV[calcfactorielle]{Grand}{\approx}{=}
+ }%
+ }%
+ {%
+ \IfStrEq{\factochfsens}{m}%
+ {%
+ 1^1 \xintFor* ##1 in {\xintSeq{2}{#3}}\do{\times \num{##1}^{\num{##1}}} \ifboolKV[calcfactorielle]{Grand}{\approx}{=}
+ }%
+ {%
+ \xintFor* ##1 in {\xintSeq{#3}{2}}\do{\num{##1}^{\num{##1}} \times} 1^1 \ifboolKV[calcfactorielle]{Grand}{\approx}{=}
+ }%
+ }%
+ }%
+ {}%
+ \IfBooleanTF{#1}%
+ {%
+ \tmpres%
+ }%
+ {%
+ \ifboolKV[calcfactorielle]{Grand}%
+ {%
+ \num[scientific-notation=true]{\tmpres}%
+ }%
+ {%
+ \num{\tmpres}%
+ }%
+ }%
+ }%
+}
+
+\NewDocumentCommand\SuperFactorielle{ s O{} m }{%
+ \restoreKV[calcfactorielle]%
+ \setKV[calcfactorielle]{#2}%
+ \def\tmpres{1}%
+ \xintFor* ##1 in {\xintSeq{2}{#3}}\do{\xdef\tmpres{\xinteval{\tmpres*factorial(##1)}}}%
+ \ifboolKV[calcfactorielle]{Grand}%
+ {%
+ \xdef\tmpres{\xintfloateval[\factochfsign]{\tmpres}}%
+ }%
+ {}%
+ \ensuremath{%
+ \ifboolKV[calcfactorielle]{Enonce}%
+ {%
+ \IfBooleanTF{#1}{\text{sf}(#3)}{\text{sf}(\num{#3})}=
+ }%
+ {}%
+ \ifboolKV[calcfactorielle]{Partiel}%
+ {%
+ \IfBooleanTF{#1}%
+ {%
+ \IfStrEqCase{\factochfsens}{%
+ {m}{1\useKV[calcfactorielle]{Espace}! \times 2\useKV[calcfactorielle]{Espace}! \times \ldots \times \xinteval{#3-1}\useKV[calcfactorielle]{Espace}! \times #3\useKV[calcfactorielle]{Espace}! \ifboolKV[calcfactorielle]{Grand}{\approx}{=}}%
+ {d}{#3\useKV[calcfactorielle]{Espace}! \times \xinteval{#3-1}\useKV[calcfactorielle]{Espace}! \times \ldots \times 2\useKV[calcfactorielle]{Espace}! \times 1\useKV[calcfactorielle]{Espace}! \ifboolKV[calcfactorielle]{Grand}{\approx}{=}}%
+ }%
+ }%
+ {%
+ \IfStrEqCase{\factochfsens}{%
+ {m}{1\useKV[calcfactorielle]{Espace}! \times 2\useKV[calcfactorielle]{Espace}! \times \ldots \times \num{\xinteval{#3-1}}\useKV[calcfactorielle]{Espace}! \times \num{#3}\useKV[calcfactorielle]{Espace}! \ifboolKV[calcfactorielle]{Grand}{\approx}{=}}%
+ {d}{\num{#3}\useKV[calcfactorielle]{Espace}! \times \num{\xinteval{#3-1}}\useKV[calcfactorielle]{Espace}! \times \ldots \times 2\useKV[calcfactorielle]{Espace}! \times 1\useKV[calcfactorielle]{Espace}! \ifboolKV[calcfactorielle]{Grand}{\approx}{=}}%
+ }%
+ }%
+ }%
+ {}%
+ \ifboolKV[calcfactorielle]{Complet}%
+ {%
+ \IfBooleanTF{#1}%
+ {%
+ \IfStrEq{\factochfsens}{m}%
+ {%
+ 1\useKV[calcfactorielle]{Espace}! \xintFor* ##1 in {\xintSeq{2}{#3}}\do{\times ##1\useKV[calcfactorielle]{Espace}!} \ifboolKV[calcfactorielle]{Grand}{\approx}{=}
+ }%
+ {%
+ \xintFor* ##1 in {\xintSeq{#3}{2}}\do{##1\useKV[calcfactorielle]{Espace}! \times} 1\useKV[calcfactorielle]{Espace}! \ifboolKV[calcfactorielle]{Grand}{\approx}{=}
+ }%
+ }%
+ {%
+ \IfStrEq{\factochfsens}{m}%
+ {%
+ 1\useKV[calcfactorielle]{Espace}! \xintFor* ##1 in {\xintSeq{2}{#3}}\do{\times \num{##1}\useKV[calcfactorielle]{Espace}!} \ifboolKV[calcfactorielle]{Grand}{\approx}{=}
+ }%
+ {%
+ \xintFor* ##1 in {\xintSeq{#3}{2}}\do{\num{##1}\useKV[calcfactorielle]{Espace}! \times} 1\useKV[calcfactorielle]{Espace}! \ifboolKV[calcfactorielle]{Grand}{\approx}{=}
+ }%
+ }%
+ }%
+ {}%
+ \IfBooleanTF{#1}%
+ {%
+ \tmpres%
+ }%
+ {%
+ \ifboolKV[calcfactorielle]{Grand}%
+ {%
+ \num[scientific-notation=true]{\tmpres}%
+ }%
+ {%
+ \num{\tmpres}%
+ }%
+ }%
+ }%
+}
+
\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/proflycee/tex/proflycee-tools-graphiques.tex b/macros/latex/contrib/proflycee/tex/proflycee-tools-graphiques.tex
index 22775038e7..74a3e827ed 100644
--- a/macros/latex/contrib/proflycee/tex/proflycee-tools-graphiques.tex
+++ b/macros/latex/contrib/proflycee/tex/proflycee-tools-graphiques.tex
@@ -36,7 +36,7 @@
}
\NewDocumentCommand\PtsDiscontinuite{ O{} m }{%
- \useKVdefault[ptdiscont]
+ \restoreKV[ptdiscont]
\setKV[ptdiscont]{#1}%
\setsepchar[.]{§./}%
\readlist*\SPLlisteDiscont{#2}%
@@ -101,7 +101,7 @@
%1=liste
%2=num point début
%3=num point fin
- \useKVdefault[genspline]%
+ \restoreKV[genspline]%
\setKV[genspline]{#1}%
\setsepchar[.]{§./}%
\readlist*\SPLlistepoints{#2}%
@@ -156,7 +156,7 @@
\NewDocumentCommand\SplineTikz{ O{} m }{%
%\newcommand\SplineTikz[2][]{%
- \useKVdefault[spline]
+ \restoreKV[spline]
\setKV[spline]{#1}% on paramètres les nouvelles clés et on les simplifie
%on lit la liste des points/nbderivés et on stocke dans \listepoints
\setsepchar[.]{§./}%
@@ -219,7 +219,7 @@
}
\newcommand\TangenteTikz[2][]{%
- \useKVdefault[tgte]%
+ \restoreKV[tgte]%
\setKV[tgte]{#1}% on paramètres les nouvelles clés et on les simplifie
\setsepchar[.]{§./}%
\readlist*\TGTlistepoints{#2}%
@@ -308,26 +308,36 @@
}
\DeclareDocumentCommand\AxexTikz{ O{} m }{%
- \useKVdefault[PLaxextkz]
+ \restoreKV[PLaxextkz]
\setKV[PLaxextkz]{#1}% on paramètres les nouvelles clés et on les simplifie
%récupération des tickwidth H/B
\IfSubStr{\axextickwidth}{/}
{\StrCut{\axextickwidth}{/}{\axextickwidthA}{\axextickwidthB}}
{\def\axextickwidthA{\axextickwidth}\def\axextickwidthB{\axextickwidth}}
+ %====test====
+ \IfEq{#2}{auto}%
+ {%
+ \xdef\tmprangexvalues{\xintfloateval{seq(i,i=\xmin..[\xgrille]..\xmax)}}\StrDel{\tmprangexvalues}{ }[\tmprangexvalues]%
+ \setKV[PLaxextkz]{Trigo=false}%
+ }%
+ {%
+ \xdef\tmprangexvalues{#2}%
+ }%
+ %====fintest=
%en fonction de Trigo ou non
\ifboolKV[PLaxextkz]{Trigo}
- {
- \foreach \x in {#2}{%
+ {%
+ \foreach \x in \tmprangexvalues {%
\draw[line width=\axexwidth] ({\x-\axexOx},{\axextickwidthA}) -- ({\x-\axexOx},{-\axextickwidthB})%
\ifboolKV[PLaxextkz]{AffGrad}%on affiche les graduations
{%
node[\axexposlabel,font=\axexfont] {\ifboolKV[PLaxextkz]{Dfrac}{$\AffAngleRadian*{\x}$}{$\AffAngleRadian{\x}$}}
}%
{}%
- ;}
- }
- {
- \foreach \x in {#2}{%
+ ;}%
+ }%
+ {%
+ \foreach \x in \tmprangexvalues {%
\draw[line width=\axexwidth] ({\x-\axexOx},{\axextickwidthA}) -- ({\x-\axexOx},{-\axextickwidthB})%
\ifboolKV[PLaxextkz]{AffGrad}%on affiche les graduations
{%
@@ -336,16 +346,16 @@
{\ifboolKV[PLaxextkz]{Annee}%
{\num[group-digits=none]{\x}}%
{\num[text-family-to-math=true,text-series-to-math=true]{\x}}%
- }
- }
+ }%
+ }%
{\xintifboolexpr{\x==\axexOx}{}{node[\axexposlabel,font=\axexfont] {\ifboolKV[PLaxextkz]{Annee}%
{\num[group-digits=none]{\x}}%
{\num[text-family-to-math=true,text-series-to-math=true]{\x}}%
- }
- }
- }
- }
- {}
+ }%
+ }%
+ }%
+ }%
+ {}%
;}
}
@@ -371,26 +381,36 @@
}
\DeclareDocumentCommand\AxeyTikz{ O{} m }{%
- \useKVdefault[PLaxeytkz]
+ \restoreKV[PLaxeytkz]
\setKV[PLaxeytkz]{#1}% on paramètres les nouvelles clés et on les simplifie
\IfSubStr{\axeytickwidth}{/}
- {\StrCut{\axeytickwidth}{/}{\axeytickwidthA}{\axeytickwidthB}}
- {\def\axeytickwidthA{\axeytickwidth}\def\axeytickwidthB{\axeytickwidth}}
+ {\StrCut{\axeytickwidth}{/}{\axeytickwidthA}{\axeytickwidthB}}
+ {\def\axeytickwidthA{\axeytickwidth}\def\axeytickwidthB{\axeytickwidth}}
+ %====test====
+ \IfEq{#2}{auto}%
+ {%
+ \xdef\tmprangeyvalues{\xintfloateval{seq(i,i=\ymin..[\ygrille]..\ymax)}}\StrDel{\tmprangeyvalues}{ }[\tmprangeyvalues]%
+ }%
+ {%
+ \xdef\tmprangeyvalues{#2}%
+ }%
+ %====fintest=
+
\ifboolKV[PLaxeytkz]{Frac}%
{%
\ifboolKV[PLaxeytkz]{AffGrad}%on affiche les graduations
{%
- \foreach \y in {#2}
+ \foreach \y in \tmprangeyvalues
{\draw[line width=\axeywidth] ({\axeytickwidthA},{\y-\axeyOy}) -- ({-\axeytickwidthB},{\y-\axeyOy}) %
\xintifboolexpr{\y==\axeyOy}{}{node[\axeyposlabel,font=\axeyfont] {\ConversionFraction{\y}}} ;}
}%
{%
- \foreach \y in {#2}
+ \foreach \y in \tmprangeyvalues
{\draw[line width=\axeywidth] ({\axeytickwidthA},{\y-\axeyOy}) -- ({-\axeytickwidthB},{\y-\axeyOy}) ;}
}%
}%
{%
- \foreach \y in {#2}{%
+ \foreach \y in \tmprangeyvalues {%
\draw[line width=\axeywidth] ({\axeytickwidthA},{\y-\axeyOy}) -- ({-\axeytickwidthB},{\y-\axeyOy})%
\ifboolKV[PLaxeytkz]{AffGrad}%on affiche les graduations
{%
@@ -414,6 +434,12 @@
}%
}
+%axesOxoy
+\DeclareDocumentCommand\AxexyTikz{ O{} O{} m m }{%
+ \AxexTikz[#1]{#3}
+ \AxeyTikz[#2]{#4}
+}
+
%axes
\defKV[PLaxestkz]{%
Epaisseur=\def\axeswidth{#1},%
@@ -444,7 +470,7 @@
}
\DeclareDocumentCommand\AxesTikz{ O{} }{%
- \useKVdefault[PLaxestkz]
+ \restoreKV[PLaxestkz]
\setKV[PLaxestkz]{#1}%
%les petits élargissements
\IfSubStr{\axeselargx}{/}
@@ -490,7 +516,7 @@
}
\DeclareDocumentCommand\OrigineTikz{ O{} }{%
- \useKVdefault[PLaxesorig]%
+ \restoreKV[PLaxesorig]%
\setKV[PLaxesorig]{#1}%
\draw (0,0) node[\axesorpos=\axesordecal,font=\axesorfont] {\axesorval} ;
}
@@ -498,11 +524,12 @@
%grilles
\setKVdefault[PLgrillestkz]{%
Affp=true,%
- Affs=true
+ Affs=true,%
+ Dernier=false
}
\DeclareDocumentCommand\GrilleTikz{ O{} O{thin,lightgray} O{ultra thin,lightgray} }{%
- \useKVdefault[PLgrillestkz]
+ \restoreKV[PLgrillestkz]
\setKV[PLgrillestkz]{#1}%
\ifboolKV[PLgrillestkz]{Affs}
{\draw[xstep=\xgrilles,ystep=\ygrilles,#3] ({\xmin-\axexOx},{\ymin-\axeyOy}) grid ({\xmax-\axexOx},{\ymax-\axeyOy});}
@@ -510,6 +537,12 @@
\ifboolKV[PLgrillestkz]{Affp}
{\draw[xstep=\xgrille,ystep=\ygrille,#2] ({\xmin-\axexOx},{\ymin-\axeyOy}) grid ({\xmax-\axexOx},{\ymax-\axeyOy});}
{}
+ \ifboolKV[PLgrillestkz]{Dernier}
+ {%
+ \draw[#2] ({\xmin-\axexOx},{\ymax-\axeyOy}) -- ({\xmax-\axexOx},{\ymax-\axeyOy});%
+ \draw[#2] ({\xmax-\axexOx},{\ymin-\axeyOy}) -- ({\xmax-\axexOx},{\ymax-\axeyOy});%
+ }
+ {}
}
%point(s) avec changement origines
@@ -526,7 +559,7 @@
}
\newcommand\PLnuagepoints[2][]{%
- \useKVdefault[PLpts]
+ \restoreKV[PLpts]
\setKV[PLpts]{#1}%
\setsepchar{§}%
\readlist\listepointsaffiches{#2}
@@ -546,7 +579,7 @@
}
\newcommand\NuagePointsTikz[3][]{%
- \useKVdefault[PLpts]
+ \restoreKV[PLpts]
\setKV[PLpts]{#1}% on paramètres les nouvelles clés et on les simplifie
\def\xliste{#2}
\def\yliste{#3}
@@ -597,7 +630,7 @@
}
\newcommand\PointMoyenTikz[1][]{%
- \useKVdefault[PLptmoy]
+ \restoreKV[PLptmoy]
\setKV[PLptmoy]{#1}% on paramètres les nouvelles clés et on les simplifie
\IfStrEq{\ptmoystyle}{o}%
{
@@ -648,7 +681,7 @@
}
\DeclareDocumentCommand\FenetreSimpleTikz{ O{} D(){} D<>{} m D<>{} m }{%
- \useKVdefault[PLsimplewindow]%
+ \restoreKV[PLsimplewindow]%
\setKV[PLsimplewindow]{#1}% on paramètres les nouvelles clés et on les simplifie
\ifboolKV[PLsimplewindow]{Grille}%
{\GrilleTikz}%
@@ -664,6 +697,10 @@
\tikzset{declare function={#1(\x)=#2;}}
}
+\NewDocumentCommand\DeclareFonctionTikzXint{ O{f} m }{%nom_fonction+langage xint
+ \xintdeffloatfunc #1(x) := #2 ;%
+}
+
%====INTERVALLES TIKZ
\usetikzlibrary{decorations.pathmorphing,decorations.pathreplacing}
@@ -821,4 +858,92 @@
\end{scope}%
}
+%====Intégrale TikZ
+\defKV[IntegrDomainTikz]{%
+ Epaisseur=\def\intgdomtikzthick{#1},%
+ Couleurs=\def\intgdomtikzcolors{#1},%
+ Style=\def\intgdomtikzstyle{#1},%
+ Opacite=\def\intgdomtikzopac{#1},%
+ Samples=\def\intgdomtikzsamples{#1},%
+ Hachures=\def\intgdomtikzhatch{#1},%
+ Type=\def\intgdomtikztype{#1},%
+ Pas=\def\intgdomtikzstep{#1},%
+ Jonction=\def\intgdomtikzjoin{#1}
+}
+\setKVdefault[IntegrDomainTikz]{%
+ Epaisseur=1pt,%
+ Couleurs={gray/teal},%
+ Style=remplissage,%
+ Opacite=0.5,%
+ Samples=250,%
+ Hachures={north west lines},%
+ Type=dessous,%
+ Pas=0.1,%
+ Jonction=bevel
+}
+
+\NewDocumentCommand\IntegraleTikz{ O{} D<>{} m O{0} m m }{%
+ %1 = clés
+ %2 = options particulières tikz
+ %3 = fonction, en tikz
+ %4 = fonction n°2 éventuelle
+ %de #5 à #6
+ \restoreKV[IntegrDomainTikz]% revenir au valeurs par défaut
+ \setKV[IntegrDomainTikz]{#1}% lit les arguments optionnels
+ \StrCut{\intgdomtikzcolors}{/}{\intgcolbord}{\intcolhach}%
+ \IfStrEq{\intgcolbord}{}{\xdef\intgcolbord{none}}{}%
+ \IfStrEq{\intgdomtikzstyle}{hachures}%
+ {%
+ \tikzset{integraletikzstyle/.style={line width=\intgdomtikzthick,draw=\intgcolbord,pattern=\intgdomtikzhatch,pattern color=\intcolhach,line join=\intgdomtikzjoin}}
+ }%
+ {}%
+ \IfStrEq{\intgdomtikzstyle}{remplissage}%
+ {%
+ \tikzset{integraletikzstyle/.style={line width=\intgdomtikzthick,draw=\intgcolbord,fill=\intcolhach,fill opacity=\intgdomtikzopac,line join=\intgdomtikzjoin}}
+ }%
+ {}%
+ \IfStrEq{\intgdomtikztype}{dessous}%
+ {%
+ \draw[integraletikzstyle,#2] (#5,0) -- plot[samples=\intgdomtikzsamples,domain=#5:#6] (\x,{#3}) --(#6,0) -- cycle ;
+ }%
+ {}%
+ \IfStrEq{\intgdomtikztype}{entre}%
+ {%
+ \draw[integraletikzstyle,#2] plot[samples=\intgdomtikzsamples,domain=#5:#6] (\x,{#3}) -- plot[samples=\intgdomtikzsamples,domain=#6:#5] (\x,{#4}) -- cycle ;
+ }%
+ {}%
+}
+
+\NewDocumentCommand\IntegraleTikzXint{ O{} D<>{} m O{0} m m }{%
+ %1 = clés
+ %2 = options particulières tikz
+ %3 = fonction, en tikz
+ %4 = fonction n°2 éventuelle
+ %de #5 à #6
+ \restoreKV[IntegrDomainTikz]% revenir au valeurs par défaut
+ \setKV[IntegrDomainTikz]{#1}% lit les arguments optionnels
+ \StrCut{\intgdomtikzcolors}{/}{\intgcolbord}{\intcolhach}%
+ \IfStrEq{\intgcolbord}{}{\xdef\intgcolbord{none}}{}%
+ \IfStrEq{\intgdomtikzstyle}{hachures}%
+ {%
+ \tikzset{integraletikzstyle/.style={line width=\intgdomtikzthick,draw=\intgcolbord,pattern=\intgdomtikzhatch,pattern color=\intcolhach,line join=\intgdomtikzjoin}}
+ }%
+ {}%
+ \IfStrEq{\intgdomtikzstyle}{remplissage}%
+ {%
+ \tikzset{integraletikzstyle/.style={line width=\intgdomtikzthick,draw=\intgcolbord,fill=\intcolhach,fill opacity=\intgdomtikzopac,line join=\intgdomtikzjoin}}
+ }%
+ {}%
+ \IfStrEq{\intgdomtikztype}{dessous}%
+ {%
+ \draw[integraletikzstyle,#2] (#5,0) -- plot[smooth] coordinates {\xintthecoords\xintfloatexpr seq((x,#3),x=#5..[\intgdomtikzstep]..#6)\relax} -- (#6,0) -- cycle ;
+ }%
+ {}%
+ \IfStrEq{\intgdomtikztype}{entre}%
+ {%
+ \draw[integraletikzstyle,#2] plot[smooth] coordinates {\xintthecoords\xintfloatexpr seq((x,#3),x=#5..[\intgdomtikzstep]..#6)\relax} -- plot[smooth] coordinates {\xintthecoords\xintfloatexpr seq((x,#4),x=#6..[-\intgdomtikzstep]..#5)\relax} -- cycle ;
+ }%
+ {}%
+}
+
\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/proflycee/tex/proflycee-tools-probas.tex b/macros/latex/contrib/proflycee/tex/proflycee-tools-probas.tex
index e817af767e..92cff33772 100644
--- a/macros/latex/contrib/proflycee/tex/proflycee-tools-probas.tex
+++ b/macros/latex/contrib/proflycee/tex/proflycee-tools-probas.tex
@@ -1041,4 +1041,187 @@
}%
}
+%===BINOMIALE
+\defKV[HistoBinom]{%
+ Largeur=\def\GraphBinomLarg{#1},%
+ Hauteur=\def\GraphBinomHaut{#1},%
+ PasX=\def\GraphBinomPasX{#1},%
+ PasY=\def\GraphBinomPasY{#1},%
+ Plage=\def\GraphBinomPlage{#1},%
+ CouleurPlage=\def\GraphBimomColPlage{#1},%
+ Epaisseur=\def\GraphBinomThick{#1},%
+ ClipX=\def\GraphBinomXminmax{#1},%
+ Police=\def\GraphBinomFonte{#1},%
+ CouleurNormale=\def\GraphBinomColNorm{#1}
+}
+\setKVdefault[HistoBinom]{%
+ Largeur=10,%
+ Hauteur=5,%
+ PasX=5,%
+ PasY=0.01,%
+ Plage={},%
+ CouleurPlage=teal!50,%
+ Epaisseur=0.8pt,
+ ClipX={},%
+ Police=\normalfont\normalsize,%
+ AffNormale=false,%
+ CouleurNormale=red
+}
+
+\NewDocumentCommand\HistogrammeBinomiale{ O{} D<>{} m m }{%
+ \restoreKV[HistoBinom]%
+ \setKV[HistoBinom]{#1}
+ \def\GraphBinomN{#3}%
+ \def\GraphBinomP{#4}%
+ \IfStrEq{\GraphBinomXminmax}{}%
+ {%
+ \xdef\GraphBinomXmin{0}%
+ \xdef\GraphBinomXmax{\GraphBinomN}%
+ }%
+ {%
+ \StrCut{\GraphBinomXminmax}{-}{\GraphBinomXmin}{\GraphBinomXmax}%
+ \IfStrEq{\GraphBinomXmin}{*}{\xdef\GraphBinomXmin{0}}{}%
+ \IfStrEq{\GraphBinomXmax}{*}{\xdef\GraphBinomXmax{\GraphBinomN}}{}%
+ }%
+ \IfStrEq{\GraphBinomPlage}{}%
+ {}%
+ {%
+ \StrCut{\GraphBinomPlage}{-}{\GraphBinomColorMin}{\GraphBinomColorMax}%
+ \IfStrEq{\GraphBinomColorMin}{*}{\xdef\GraphBinomColorMin{\GraphBinomXmin}}{}%
+ \IfStrEq{\GraphBinomColorMax}{*}{\xdef\GraphBinomColorMax{\GraphBinomXmax}}{}%
+ }%
+ %test d'unités
+ \xdef\GraphBinomXunit{\xintfloateval{round((\GraphBinomLarg)/(\GraphBinomXmax-\GraphBinomXmin+1),3)}}%
+ \xdef\grphbinommedA{\xintfloateval{trunc(\GraphBinomN*\GraphBinomP,0)}}%
+ \xdef\grphbinommedB{\xintfloateval{\grphbinommedA+1}}%
+ \xdef\GraphBinomYmaxA{\xintfloateval{binomial(\GraphBinomN,\grphbinommedA)*(\GraphBinomP)^(\grphbinommedA)*(1-(\GraphBinomP))^((\GraphBinomN)-(\grphbinommedA))}}%
+ \xdef\GraphBinomYmaxB{\xintfloateval{binomial(\GraphBinomN,\grphbinommedB)*(\GraphBinomP)^(\grphbinommedB)*(1-(\GraphBinomP))^((\GraphBinomN)-(\grphbinommedB))}}%
+ \xdef\GraphBinomMaxY{\xintfloateval{1.1*max(\GraphBinomYmaxA,\GraphBinomYmaxB)}}%
+ \xdef\GraphBinomNbPrecision{\xinteval{abs(ilog10(\GraphBinomMaxY))+1}}%
+ \xdef\GraphBinomYunit{\xintfloateval{round((\GraphBinomHaut)/(max(\GraphBinomYmaxA,\GraphBinomYmaxB)),3)}}%
+ \begin{tikzpicture}[x=\GraphBinomXunit cm,y=\GraphBinomYunit cm,#2]
+ %coloriage éventuel
+ \IfStrEq{\GraphBinomPlage}{}%
+ {}%
+ {%
+ \xintFor* ##1 in {\xintSeq{\GraphBinomColorMin}{\GraphBinomColorMax}}\do{%
+ \xdef\tmpYYY{\xintfloateval{binomial(\GraphBinomN,##1)*(\GraphBinomP)^(##1)*(1-(\GraphBinomP))^((\GraphBinomN)-(##1))}}%
+ \draw[draw=none,fill=\GraphBimomColPlage,fill opacity=0.5] ({##1-0.5},0) rectangle++ (1,{\tmpYYY}) ;
+ }%
+ }%
+ %axes
+ \draw[line width=\GraphBinomThick,->,>=latex] ({\GraphBinomXmin-0.5},0)--({\GraphBinomXmax+1},0) ;
+ \draw[line width=\GraphBinomThick,->,>=latex] ({\GraphBinomXmin-0.5},0)--({\GraphBinomXmin-0.5},{1.1*(\GraphBinomHaut)/(\GraphBinomYunit)}) ;
+ \foreach \x in {\GraphBinomXmin,\inteval{\GraphBinomXmin+\GraphBinomPasX},...,\GraphBinomXmax}{%
+ \draw[line width=\GraphBinomThick] (\x,2pt)--++(0,-4pt) node[below,font=\GraphBinomFonte] {\num{\x}} ;
+ }%
+ \xdef\GraphBinomNbPrecisionAxeY{\xinteval{abs(ilog10(\GraphBinomPasY))+1}}%
+ \foreach \y in {0,\GraphBinomPasY,...,\GraphBinomMaxY}{%
+ \draw[line width=\GraphBinomThick] ($({\GraphBinomXmin-0.5},\y)+(2pt,0)$)--++(-4pt,0) node[left,font=\GraphBinomFonte] {\num{\xintfloateval{round(\y,\GraphBinomNbPrecisionAxeY)}}} ;
+ }%
+ %tracé
+ \xintFor* ##1 in {\xintSeq{\GraphBinomXmin}{\GraphBinomXmax}}\do{%
+ \xdef\tmpYYY{\xintfloateval{binomial(\GraphBinomN,##1)*(\GraphBinomP)^(##1)*(1-(\GraphBinomP))^((\GraphBinomN)-(##1))}}%
+ \draw[line width=\GraphBinomThick] ({##1-0.5},0) rectangle++ (1,{\tmpYYY}) ;
+ }
+ \ifboolKV[HistoBinom]{AffNormale}%
+ {%
+ \xdef\MinNormHistoBinom{\xintfloateval{{\GraphBinomXmin-0.5}}}%
+ \xdef\MaxNormHistoBinom{\xintfloateval{{\GraphBinomXmax+0.5}}}%
+ \TraceLoiNormale*[line width={1.25*\GraphBinomThick},\GraphBinomColNorm]<\MinNormHistoBinom..[0.1]..\MaxNormHistoBinom>{#3}{#4}
+ }%
+ {}%
+ \end{tikzpicture}
+}
+
+\NewDocumentEnvironment{HistoBinomiale}{ O{} D<>{} m m }%
+{%
+ \restoreKV[HistoBinom]%
+ \setKV[HistoBinom]{#1}
+ \def\GraphBinomN{#3}%
+ \def\GraphBinomP{#4}%
+ \IfStrEq{\GraphBinomXminmax}{}%
+ {%
+ \xdef\GraphBinomXmin{0}%
+ \xdef\GraphBinomXmax{\GraphBinomN}%
+ }%
+ {%
+ \StrCut{\GraphBinomXminmax}{-}{\GraphBinomXmin}{\GraphBinomXmax}%
+ \IfStrEq{\GraphBinomXmin}{*}{\xdef\GraphBinomXmin{0}}{}%
+ \IfStrEq{\GraphBinomXmax}{*}{\xdef\GraphBinomXmax{\GraphBinomN}}{}%
+ }%
+ \IfStrEq{\GraphBinomPlage}{}%
+ {}%
+ {%
+ \StrCut{\GraphBinomPlage}{-}{\GraphBinomColorMin}{\GraphBinomColorMax}%
+ \IfStrEq{\GraphBinomColorMin}{*}{\xdef\GraphBinomColorMin{\GraphBinomXmin}}{}%
+ \IfStrEq{\GraphBinomColorMax}{*}{\xdef\GraphBinomColorMax{\GraphBinomXmax}}{}%
+ }%
+ %test d'unités
+ \xdef\GraphBinomXunit{\xintfloateval{round((\GraphBinomLarg)/(\GraphBinomXmax-\GraphBinomXmin+1),3)}}%
+ \xdef\grphbinommedA{\xintfloateval{trunc(\GraphBinomN*\GraphBinomP,0)}}%
+ \xdef\grphbinommedB{\xintfloateval{\grphbinommedA+1}}%
+ \xdef\GraphBinomYmaxA{\xintfloateval{binomial(\GraphBinomN,\grphbinommedA)*(\GraphBinomP)^(\grphbinommedA)*(1-(\GraphBinomP))^((\GraphBinomN)-(\grphbinommedA))}}%
+ \xdef\GraphBinomYmaxB{\xintfloateval{binomial(\GraphBinomN,\grphbinommedB)*(\GraphBinomP)^(\grphbinommedB)*(1-(\GraphBinomP))^((\GraphBinomN)-(\grphbinommedB))}}%
+ \xdef\GraphBinomMaxY{\xintfloateval{1.1*max(\GraphBinomYmaxA,\GraphBinomYmaxB)}}%
+ \xdef\GraphBinomNbPrecision{\xinteval{abs(ilog10(\GraphBinomMaxY))+1}}%
+ \xdef\GraphBinomYunit{\xintfloateval{round((\GraphBinomHaut)/(max(\GraphBinomYmaxA,\GraphBinomYmaxB)),3)}}%
+ \begin{tikzpicture}[x=\GraphBinomXunit cm,y=\GraphBinomYunit cm,#2]
+ %coloriage éventuel
+ \IfStrEq{\GraphBinomPlage}{}%
+ {}%
+ {%
+ \xintFor* ##1 in {\xintSeq{\GraphBinomColorMin}{\GraphBinomColorMax}}\do{%
+ \xdef\tmpYYY{\xintfloateval{binomial(\GraphBinomN,##1)*(\GraphBinomP)^(##1)*(1-(\GraphBinomP))^((\GraphBinomN)-(##1))}}%
+ \draw[draw=none,fill=\GraphBimomColPlage,fill opacity=0.5] ({##1-0.5},0) rectangle++ (1,{\tmpYYY}) ;
+ }%
+ }%
+ %axes
+ \draw[line width=\GraphBinomThick,->,>=latex] ({\GraphBinomXmin-0.5},0)--({\GraphBinomXmax+1},0) ;
+ \draw[line width=\GraphBinomThick,->,>=latex] ({\GraphBinomXmin-0.5},0)--({\GraphBinomXmin-0.5},{1.1*(\GraphBinomHaut)/(\GraphBinomYunit)}) ;
+ \foreach \x in {\GraphBinomXmin,\inteval{\GraphBinomXmin+\GraphBinomPasX},...,\GraphBinomXmax}{%
+ \draw[line width=\GraphBinomThick] (\x,2pt)--++(0,-4pt) node[below,font=\GraphBinomFonte] {\num{\x}} ;
+ }%
+ \xdef\GraphBinomNbPrecisionAxeY{\xinteval{abs(ilog10(\GraphBinomPasY))+1}}%
+ \foreach \y in {0,\GraphBinomPasY,...,\GraphBinomMaxY}{%
+ \draw[line width=\GraphBinomThick] ($({\GraphBinomXmin-0.5},\y)+(2pt,0)$)--++(-4pt,0) node[left,font=\GraphBinomFonte] {\num{\xintfloateval{round(\y,\GraphBinomNbPrecisionAxeY)}}} ;
+ }%
+ %tracé
+ \xintFor* ##1 in {\xintSeq{\GraphBinomXmin}{\GraphBinomXmax}}\do{%
+ \xdef\tmpYYY{\xintfloateval{binomial(\GraphBinomN,##1)*(\GraphBinomP)^(##1)*(1-(\GraphBinomP))^((\GraphBinomN)-(##1))}}%
+ \draw[line width=\GraphBinomThick] ({##1-0.5},0) rectangle++ (1,{\tmpYYY}) ;
+ }
+ %loi normale ?
+ \ifboolKV[HistoBinom]{AffNormale}%
+ {%
+ \xdef\MinNormHistoBinom{\xintfloateval{{\GraphBinomXmin-0.5}}}%
+ \xdef\MaxNormHistoBinom{\xintfloateval{{\GraphBinomXmax+0.5}}}%
+ \TraceLoiNormale*[line width={1.25*\GraphBinomThick},\GraphBinomColNorm]<\MinNormHistoBinom..[0.1]..\MaxNormHistoBinom>{#3}{#4}
+ }%
+ {}%
+ }%
+ {%
+ \end{tikzpicture}
+}
+
+\xintdeffloatfunc fctreploinorm(x,mu,sigma):=1/(sigma*sqrt(2*Pi))*exp(-1/2*((x-mu)/sigma)^2);
+
+\NewDocumentCommand\TraceLoiNormale{ s O{} D<>{} m m }{%
+ \IfBooleanTF{#1}%
+ {%
+ \draw[#2] plot[smooth] coordinates {%
+ \xintthecoords\xintfloatexpr
+ seq((x,fctreploinorm(x,#4*#5,sqrt(#4*#5*(1-#5)))),x=#3)
+ \relax
+ };
+ }%
+ {%
+ \draw[#2] plot[smooth] coordinates {%
+ \xintthecoords\xintfloatexpr
+ seq((x,fctreploinorm(x,#4,#5)),x=#3)
+ \relax
+ };
+ }%
+}
+
\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/profmaquette/doc/ProfMaquette-doc.pdf b/macros/latex/contrib/profmaquette/doc/ProfMaquette-doc.pdf
index 552ebfe62c..655d73fe6e 100644
--- a/macros/latex/contrib/profmaquette/doc/ProfMaquette-doc.pdf
+++ b/macros/latex/contrib/profmaquette/doc/ProfMaquette-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/profmaquette/latex/ProfMaquette.sty b/macros/latex/contrib/profmaquette/latex/ProfMaquette.sty
index 9d2e501a04..9aa462bb76 100644
--- a/macros/latex/contrib/profmaquette/latex/ProfMaquette.sty
+++ b/macros/latex/contrib/profmaquette/latex/ProfMaquette.sty
@@ -2,9 +2,9 @@
% licence : Released under the LaTeX Project Public License v1.3c
% or later, see http://www.latex-project.org/lppl.txtf
\NeedsTeXFormat{LaTeX2e}%
-\def\filedate{2024/04/25}%
+\def\filedate{2024/05/02}%
\let\PfMfiledate\filedate%
-\def\fileversion{0.92}%
+\def\fileversion{0.94}%
\let\PfMfileversion\fileversion%
\ProvidesPackage{ProfMaquette}[\filedate\space v\fileversion\space Maquettage de documents]%
@@ -37,15 +37,16 @@
\makeatletter
\gdef\PfMFontSize{\@ptsize}
+%\gdef\PfMFontSize{\f@size}
\makeatother
%définition des clés
\RequirePackage{simplekv}%
-\setKVdefault[Boulot]{Dys=false,Taille=14,Cours=false,Base=false,BaseHTML=false,CAN=false,Fiche=false,DM=false,DS=false,IE=false,Kholle=false,RecapBrevet=false,PdT=false,Parcours=false,Contrat=false,FdR=false,ParcoursPerso=false,OlympiadesAPMEP=false,CorrigeInverse=false,CorrigeSeul=false,CorrigeApres=false,CorrigeFin=false,CorrigeAll=false,Brevet=false,BaremeComplet=false,BaremeGlobal=false,CorrectionColonnes=false,Epaisseur=0pt,VersSolution=false,Small=false,Footnotesize=false,Scriptsize=false,AllDirect=false,AllPouce=false}%Les deux derniers pour essayer de mettre tous les exercices d'un même fichier en mode Reponse, en mode Indice. Pas implanté, pas testé
+\setKVdefault[Boulot]{Dys=false,Taille=14,Cours=false,Base=false,BaseHTML=false,CAN=false,Fiche=false,DM=false,DS=false,IE=false,Kholle=false,RecapBrevet=false,PdT=false,Parcours=false,Contrat=false,FdR=false,ParcoursPerso=false,OlympiadesAPMEP=false,CorrigeInverse=false,CorrigeSeul=false,CorrigeApres=false,CorrigeFin=false,CorrigeAll=false,Brevet=false,BaremeComplet=false,BaremeGlobal=false,CorrectionColonnes=false,Epaisseur=0pt,VersSolution=false,AvecEntrainement=false,Small=false,Footnotesize=false,Scriptsize=false,AllDirect=false,AllPouce=false}%Les deux derniers pour essayer de mettre tous les exercices d'un même fichier en mode Reponse, en mode Indice. Pas implanté, pas testé
\defKV[Boulot]{Colonnes=\setKV[Boulot]{CorrectionColonnes}}%
\setKVdefault[Cours]{Couleur=Crimson,Theme=Trace écrite,NomExercice=Exercice}%
\setKVdefault[DM]{Numero=1,Date=\today,Classe={},Niveau=3,Code=\jobname}%
\setKVdefault[DS]{Numero=1,Date=\today,Classe={},Niveau=3,Code=\jobname,Calculatrice=false,Sujet=A}%
-\setKVdefault[Fiche]{Theme=Les nombres décimaux,Date=\today,Niveau=6,Classe={},Code={},NomExercice=Exercice}%
+\setKVdefault[Fiche]{Theme=Les nombres décimaux,Date=\today,Niveau=6,Classe={},Code={},NomExercice=Exercice,}%
\setKVdefault[PdT]{Theme=Les nombres décimaux,Date=\today,Niveau=6,Classe={},Code={},NomExercice=Exercice}%
\setKVdefault[FdR]{Theme=Les nombres décimaux,Date=\today,Niveau=6,Classe={},Code={},NomExercice=Exercice}%
\setKVdefault[Parcours]{Theme=Les nombres décimaux,Date=\today,Niveau=6,Classe={},Code={},NomExercice=Exercice,Vertical=false}%
@@ -57,7 +58,7 @@
\setKVdefault[Kholle]{Sujet=1,Numero=1,Date=15,Niveau=TSI-1,Code=\jobname,Lieu=Lycée
du Hainaut (Valenciennes),NomEleve=Albert Einstein,CR=false}%
\setKVdefault[CAN]{Date=\today,Niveau=6,Duree=9,CoefQ=0.4,CoefR=0.35,CoefJ=0.1}%
-\setKVdefault[ClesExercices]{NbQuestions=1,PasTitre=false,AffichageSource=false,BaremeTotal,BaremeDetaille=false,MotPoint=point,AffichageTitre=false,Calculatrice=true,Oral=false,Difficulte=0,AffichageCompetence=false,PasCorrige=false,Direct=false,Pouce=false,Parcours=false,Contrat=false,FdR=false,Routes=false,Stops=false,Background=white,Cadre=gray!50,Numerote,Ligne=false,Doublespacing=false,Onehalfspacing=false,Cadres=false,TitreSol=false,NonUtilise=false,Profile=false}%
+\setKVdefault[ClesExercices]{NbQuestions=1,PasTitre=false,AffichageSource=false,BaremeTotal,BaremeDetaille=false,MotPoint=point,AffichageTitre=false,Calculatrice=true,Oral=false,Difficulte=0,AffichageCompetence=false,PasCorrige=false,Direct=false,Pouce=false,Parcours=false,Contrat=false,FdR=false,Routes=false,Stops=false,Background=white,Cadre=gray!50,Numerote,Ligne=false,Doublespacing=false,Onehalfspacing=false,Cadres=false,TitreSol=false,NonUtilise=false,Profile=false,PasEntrainement=false}%
\defKV[ClesExercices]{TitreSolution=\setKV[ClesExercices]{TitreSol}}%
\defKV[ClesExercices]{Source=\setKV[ClesExercices]{AffichageSource}}%
\defKV[ClesExercices]{Titre=\setKV[ClesExercices]{AffichageTitre}}%
@@ -140,6 +141,8 @@
\setcounter{PfMExo}{0}%
\newcounter{PfMExoSol}%Pour repérer les valeurs aléatoires construites automatiquement dans la solution
\setcounter{PfMExoSol}{0}%
+\newcounter{PfMExoEntrai}%Pour repérer les entrainements
+\setcounter{PfMExoEntrai}{0}%
\newcounter{PfMCorrigeParcoursPerso}%affichage des solutions ou pas dans le cadre d'un parcours perso
\setcounter{PfMCorrigeParcoursPerso}{0}%
\newcounter{PfMSOS}%Numéro des SOS dans les parcours fléchés
@@ -238,6 +241,15 @@
\repeat
}%
+% On bloque la graine de fabrication des nombres aléatoires.
+\ExplSyntaxOn
+\cs_new_eq:NN \PfMGraineAlea \sys_gset_rand_seed:n
+\ExplSyntaxOff
+
+\ExplSyntaxOn
+\cs_new_eq:NN \PfMChoisisGraineAlea \int_rand:n
+\ExplSyntaxOff
+
%% Gestion de l'affichage ou pas des item (Pour élèves PAP) par exemple
% Code by egreg : https://tex.stackexchange.com/questions/627250/hide-specific-item-in-a-list
\ExplSyntaxOn
@@ -894,7 +906,7 @@
\]%
}%
%
-%%%%
+%
%%% Définitions des environnements pour la correction
\makeatletter
\newwrite\verbatim@out
@@ -1039,6 +1051,7 @@
}%
\def\PfMTexteDuCorrige{Corrigé de l'exercice}
+\def\PfMTexteDeLEntrainement{Automatisme(s) lié(s) à l'exercice}
\NewDocumentCommand\PfMAffichageCorrige{}{%
\ifboolKV[Boulot]{CAN}{%
@@ -1061,6 +1074,43 @@
}%
}%
}%
+
+\NewDocumentEnvironment{Entrainement}{}{}{}%
+
+\makeatletter
+\def\EntrainementWrite{%
+ \@bsphack%
+ \immediate\openout \verbatim@out "\jobname-Ex\thePfMExo.qrc"%
+ \let\do\@makeother\dospecials%
+ \catcode`\^^M\active%
+ \def\verbatim@processline{%
+ \immediate\write\verbatim@out{\the\verbatim@line}}%
+ \verbatim@start}%
+\def\endEntrainementWrite{\immediate\closeout\verbatim@out\@esphack}%
+
+\let\Entrainement\EntrainementWrite\let\endEntrainement\endEntrainementWrite%
+\makeatother
+
+\NewDocumentCommand\PfMAffichageEntrainement{}{%
+ \clearpage
+ \TikzAutomatismes
+ \setcounter{PfMExoEntrai}{0}%
+ \xintFor* ##1 in{\xintSeq{1}{\thePfMExo}}\do{%
+ \refstepcounter{PfMExoEntrai}%
+ \IfFileExists{\jobname-Ex##1.qrc}{%
+ \begin{center}
+ \label{pageentrai-\thePfMMaquette-\thePfMExoEntrai}%
+ \textbf{\PfMTexteDeLEntrainement\ifnum\thePfMExo=1\relax\else~\ref{page-\thePfMMaquette-##1}\fi}\par\nopagebreak\input{\jobname-Ex##1.qrc}\end{center}}{}%
+ }%
+}%
+
+\NewDocumentCommand\TikzAutomatismes{}{%
+ \begin{tcolorbox}
+ \begin{center}
+ \Large\sffamily Automatismes%
+ \end{center}
+ \end{tcolorbox}%
+}%
%%%%%%%% BAREME %%%%%%%%%%%
%% Bareme
\newlength{\brouillon}
@@ -1194,7 +1244,18 @@
\node[%
fill=tcbcolback,%
anchor=center,%
- ] at (frame.east){\hyperref[pagesol-\thePfMMaquette-\thePfMExo]{\faKey}};%
+ ] at ($(frame.north east)!0.25!(frame.south east)$){\hyperref[pagesol-\thePfMMaquette-\thePfMExo]{\faKey}};%
+ }%
+ }{}%
+}%
+
+\NewDocumentCommand{\PfMLienVersEntrainement}{}{%
+ \ifboolKV[Boulot]{AvecEntrainement}{%
+ \ifboolKV[ClesExercices]{PasEntrainement}{}{%
+ \node[%
+ fill=tcbcolback,%
+ anchor=center,rotate=45%
+ ] at ($(frame.north east)!0.75!(frame.south east)$){\hyperref[pageentrai-\thePfMMaquette-\thePfMExo]{\faDumbbell}};%
}%
}{}%
}%
@@ -1553,6 +1614,8 @@
\PfMAffichageSource%
%
\PfMLienVersSolution%
+ %
+ \PfMLienVersEntrainement%
}%
}%
}%
@@ -1871,7 +1934,7 @@
\setsepchar{,}%
\readlist*\ListePetitsObjets{bonbons,billes,biscuits,gommes,clous,vis,cahiers,trousses}%
\readlist*\ListeFruits{pommes,poires,abricots,cerises,fraises,framboises,noix,pêches,nectarines,myrtilles,oranges,mandarines,kiwis}%
-\readlist*\ListeVariables{a,b,c,m,n,p,r,s,t,x,y,z}%
+\readlist*\ListeVariables{a,b,c,\ell,m,n,p,r,s,t,x,y,z}%
\makeatletter
\def\ExoCANWrite{%
@@ -2025,6 +2088,8 @@
\PfMAffichageSource%
%
\PfMLienVersSolution%
+ %
+ \PfMLienVersEntrainement%
}%
}%
}%
@@ -2318,8 +2383,6 @@
\refstepcounter{PfMSection}%
\PfMChoixCorrection%
\refstepcounter{PfMExo}%
- % \setbox\PfMBoxSauvegarde{#3\unskip\unpenalty\unpenalty}
-% \setbox\PfMBoxSauvegarde=\vbox{#3}
\ifboolKV[Boulot]{CorrigeSeul}{}{%
\PfMChoixTitreSolution%
\PfMChoixHideItemSolution%
@@ -3001,6 +3064,8 @@
\PfMAffichageSource%
% Lien vers la solution
\PfMLienVersSolution
+ % Lien vers les entrainements
+ \PfMLienVersEntrainement
}%
}%
}%
@@ -3092,6 +3157,8 @@
\PfMAffichageSource%
%
\PfMLienVersSolution%
+ %
+ \PfMLienVersEntrainement%
}%
}%
}%
@@ -3296,14 +3363,15 @@
}{%
\ifnum\thePfMMaquette=1\relax%
\else%
- \ifnum\PfMFontSize=0\relax%
- \fontsize{10}{\fpeval{1.2*10}}%
- \else\ifnum\PfMFontSize=1\relax%
- \fontsize{11}{\fpeval{1.2*11}}%
- \else%
- \fontsize{12}{\fpeval{1.2*12}}%
- \fi%
- \fi%
+ %\ifnum\PfMFontSize=0\relax%
+ % \fontsize{10}{\fpeval{1.2*10}}%
+ %\else\ifnum\PfMFontSize=1\relax%
+ % \fontsize{11}{\fpeval{1.2*11}}%
+ % \else%
+ % \fontsize{12}{\fpeval{1.2*12}}%
+ % \fi%
+ %\fi%
+ \fontsize{\fpeval{10+\PfMFontSize}}{\fpeval{1.2*(10+\PfMFontSize)}}%
\selectfont%
\renewcommand{\JustifyingParindent}{\parindent}
\justifying%
@@ -3335,6 +3403,7 @@
\fi%
\PfMBasculeDys%
\setlength{\columnseprule}{\useKV[Boulot]{Epaisseur}}%
+ \PfMChangerTailleCorrection%
}%
\NewDocumentCommand\PfMAffichageCorrectionColonnes{}{%
@@ -3343,6 +3412,12 @@
\ifboolKV[Boulot]{CorrectionColonnes}{\end{multicols}}{}%
}%
+\NewDocumentCommand\PfMAffichageEntrainementColonnes{}{%
+ \ifboolKV[Boulot]{CorrectionColonnes}{\begin{multicols}{\useKV[Boulot]{Colonnes}}}{}%
+ \PfMAffichageEntrainement%
+ \ifboolKV[Boulot]{CorrectionColonnes}{\end{multicols}}{}%
+}%
+
%%%%%%%%%%%%%%% Debut Maquette %%%%%%%
% Environnement englobant le tout.
\makeatletter
@@ -3358,7 +3433,7 @@
\stepcounter{PfMMaquette}%
% options de boulot
\IfHookExistsTF{env/Maquette/after}{\RemoveFromHook{env/Maquette/after}[*]}{}%
- \IfHookExistsTF{env/exercice/after}{\RemoveFromHook{env/exercice/after}[*]}{}%
+ %\IfHookExistsTF{env/exercice/after}{\RemoveFromHook{env/exercice/after}[*]}{}%
% \AddToHook{env/exercice/after}[ChoixExo]{\PfMChoixAffichageCorrection}%
\useKVdefault[Boulot]%
\setKV[Boulot]{#1}%
@@ -3377,18 +3452,6 @@
\ifboolKV[Boulot]{CorrigeFin}{%
\AddToHook{env/Maquette/after}[Correction]{%
\PfMPrepareCorrection{#1}%
-% \useKVdefault[Boulot]%
-% \setKV[Boulot]{#1}%
-% \if@Dyslexie
-% \setKV[Boulot]{Dys}
-% \fi
-% \PfMBasculeDys%
-% \clearpage
-% \setlength{\columnseprule}{\useKV[Boulot]{Epaisseur}}%
-% \TikzOlympiadesAPMEPCor{#2}%
-% \ifboolKV[Boulot]{CorrectionColonnes}{\begin{multicols}{\useKV[Boulot]{Colonnes}}}{}%
-% \PfMAffichageCorrige%
-% \ifboolKV[Boulot]{CorrectionColonnes}{\end{multicols}}{}%
\PfMAffichageCorrectionColonnes%
}%
}{}%
@@ -3396,14 +3459,15 @@
\ifboolKV[Boulot]{CAN}{%
\setKV[CAN]{#2}%
%\ifboolKV[Boulot]{CorrigeSeul}{}{\TikzCAN}%
- \PfMChangerTailleCorrection%
\setcounter{PfMCNNumQ}{0}%
\setlength{\PfMLargeurQuestion}{\useKV[CAN]{CoefQ}\linewidth}\setlength{\PfMLargeurReponse}{\useKV[CAN]{CoefR}\linewidth}\setlength{\PfMLargeurJury}{\useKV[CAN]{CoefJ}\linewidth}%
\let\exercice\ExoCANWrite\let\endexercice\endExoCANWrite%
\AddToHook{env/exercice/begin}{\setcounter{PfMAlea}{0}}%
\AddToHook{env/Maquette/end}{%
+ \xdef\PfMAncienneGraine{\PfMChoisisGraineAlea{123456789}}
\xdef\PfMCANTotalExo{\thePfMExo}%
\setbox\PfMSauvegardeBox\vbox{%
+ \PfMGraineAlea{\thePfMMaquette}
\setcounter{PfMExo}{0}%
\renewcommand{\arraystretch}{2}%
\begin{longtable}{|c|m{\PfMLargeurQuestion}|>{\centering\arraybackslash}m{\PfMLargeurReponse}|m{\PfMLargeurJury}|}%
@@ -3423,12 +3487,41 @@
\TikzCANCor{#2}%
\PfMAffichageCorrectionColonnes%
\clearpage
+ \normalsize%
\TikzCAN%
- \usebox{\PfMSauvegardeBox}%
- }{%
- \TikzCAN%
- \usebox{\PfMSauvegardeBox}%
- \ifboolKV[Boulot]{CorrigeFin}{\ifboolKV[Boulot]{CorrigeInverse}{}{\clearpage
+ \PfMGraineAlea{\thePfMMaquette}%
+ \setcounter{PfMCNNumQ}{0}%
+ \setcounter{PfMExo}{0}%
+ \renewcommand{\arraystretch}{2}%
+ \begin{longtable}{|c|m{\PfMLargeurQuestion}|>{\centering\arraybackslash}m{\PfMLargeurReponse}|m{\PfMLargeurJury}|}%
+ \hhline{~---}%
+ \multicolumn{1}{c|}{}&\cellcolor{gray!15}\centering Question&\cellcolor{gray!15}\centering Réponse&\cellcolor{gray!15}\centering\arraybackslash Jury\\%
+ \hline%
+ \endhead%
+ \xintFor* ##1 in {\xintSeq{1}{\PfMCANTotalExo}}\do{%
+ \refstepcounter{PfMCNNumQ}\ttfamily{\thePfMCNNumQ}\label{TestCAN-\thePfMCNNumQ}&\Complement{}\stepcounter{PfMExo}\setcounter{PfMAlea}{0}\input{\jobname-Ex##1.can}&\CNReponse&\\
+ \hline%
+ }%
+ \end{longtable}%
+ \renewcommand{\arraystretch}{1}%
+ }{%
+ \PfMGraineAlea{\PfMAncienneGraine}%
+ \TikzCAN%
+ \setcounter{PfMCNNumQ}{0}%
+ \setcounter{PfMExo}{0}%
+ \renewcommand{\arraystretch}{2}%
+ \begin{longtable}{|c|m{\PfMLargeurQuestion}|>{\centering\arraybackslash}m{\PfMLargeurReponse}|m{\PfMLargeurJury}|}%
+ \hhline{~---}%
+ \multicolumn{1}{c|}{}&\cellcolor{gray!15}\centering Question&\cellcolor{gray!15}\centering Réponse&\cellcolor{gray!15}\centering\arraybackslash Jury\\%
+ \hline%
+ \endhead%
+ \xintFor* ##1 in {\xintSeq{1}{\PfMCANTotalExo}}\do{%
+ \refstepcounter{PfMCNNumQ}\ttfamily{\thePfMCNNumQ}\label{TestCAN-\thePfMCNNumQ}&\Complement{}\stepcounter{PfMExo}\setcounter{PfMAlea}{0}\input{\jobname-Ex##1.can}&\CNReponse&\\
+ \hline%
+ }%
+ \end{longtable}%
+ \renewcommand{\arraystretch}{1}%
+ \ifboolKV[Boulot]{CorrigeFin}{\ifboolKV[Boulot]{CorrigeInverse}{}{\clearpage
\PfMPrepareCorrection{#1}%
\TikzCANCor{#2}%
\PfMAffichageCorrectionColonnes%
@@ -3436,56 +3529,39 @@
}{}
}
}%
-% \ifboolKV[Boulot]{CorrigeFin}{%
-% \AddToHook{env/Maquette/after}[Correction]{%
-% \PfMPrepareCorrection{#1}%
-% \TikzCANCor{#2}%
-% \PfMAffichageCorrectionColonnes%
-% }%
-% }{}%
}{%
\ifboolKV[Boulot]{FdR}{%
- \ifboolKV[Boulot]{CorrigeSeul}{}{%
- \setKV[FdR]{#2}\TikzFdR%
- }
- \let\exercice\exerciceFdR\let\endexercice\endexerciceFdR%
+ \ifboolKV[Boulot]{CorrigeSeul}{}{%
+ \setKV[FdR]{#2}\TikzFdR%
+ }
+ \let\exercice\exerciceFdR\let\endexercice\endexerciceFdR%
+ \ifboolKV[Boulot]{AvecEntrainement}{%
+ \AddToHook{env/Maquette/end}[Haltere]{%
+ \PfMAffichageEntrainementColonnes%
+ }%
+ }{}%
\ifboolKV[Boulot]{CorrigeFin}{%
\AddToHook{env/Maquette/after}[Correction]{%
\PfMPrepareCorrection{#1}%
-% \useKVdefault[Boulot]%
-% \setKV[Boulot]{#1}%
-% \if@Dyslexie
-% \setKV[Boulot]{Dys}
-% \fi
-% \PfMBasculeDys%
-% \setlength{\columnseprule}{\useKV[Boulot]{Epaisseur}}%
\TikzFdRCor{#2}%
-% \ifboolKV[Boulot]{CorrectionColonnes}{\begin{multicols}{\useKV[Boulot]{Colonnes}}}{}%
-% \PfMAffichageCorrige%
-% \ifboolKV[Boulot]{CorrectionColonnes}{\end{multicols}}{}%
\PfMAffichageCorrectionColonnes
}%
}{}%
}{%
\ifboolKV[Boulot]{Contrat}{%
- \ifboolKV[Boulot]{CorrigeSeul}{}{%
- \setKV[Contrat]{#2}\TikzContrat%
- }
- \let\exercice\exerciceContrat\let\endexercice\endexerciceContrat%
+ \ifboolKV[Boulot]{CorrigeSeul}{}{%
+ \setKV[Contrat]{#2}\TikzContrat%
+ }
+ \let\exercice\exerciceContrat\let\endexercice\endexerciceContrat%
+ \ifboolKV[Boulot]{AvecEntrainement}{%
+ \AddToHook{env/Maquette/end}[Haltere]{%
+ \PfMAffichageEntrainementColonnes%
+ }%
+ }{}%
\ifboolKV[Boulot]{CorrigeFin}{%
\AddToHook{env/Maquette/after}[Correction]{%
\PfMPrepareCorrection{#1}%
-% \useKVdefault[Boulot]%
-% \setKV[Boulot]{#1}%
-% \if@Dyslexie
-% \setKV[Boulot]{Dys}
-% \fi
-% \PfMBasculeDys%
-% \setlength{\columnseprule}{\useKV[Boulot]{Epaisseur}}%
\TikzContratCor{#2}%
-% \ifboolKV[Boulot]{CorrectionColonnes}{\begin{multicols}{\useKV[Boulot]{Colonnes}}}{}%
-% \PfMAffichageCorrige%
-% \ifboolKV[Boulot]{CorrectionColonnes}{\end{multicols}}{}%
\PfMAffichageCorrectionColonnes%
}%
}{}%
@@ -3497,17 +3573,7 @@
\ifboolKV[Boulot]{CorrigeFin}{%
\AddToHook{env/Maquette/after}[Correction]{%
\PfMPrepareCorrection{#1}%
-% \useKVdefault[Boulot]%
-% \setKV[Boulot]{#1}%
-% \if@Dyslexie
-% \setKV[Boulot]{Dys}
-% \fi
-% \PfMBasculeDys%
-% \setlength{\columnseprule}{\useKV[Boulot]{Epaisseur}}%
\TikzFicheCor{#2}%
-% \ifboolKV[Boulot]{CorrectionColonnes}{\begin{multicols}{\useKV[Boulot]{Colonnes}}}{}%
-% \PfMAffichageCorrige%
-% \ifboolKV[Boulot]{CorrectionColonnes}{\end{multicols}}{}%
\PfMAffichageCorrectionColonnes
}%
}{}%
@@ -3519,17 +3585,7 @@
\ifboolKV[Boulot]{CorrigeFin}{%
\AddToHook{env/Maquette/after}[Correction]{%
\PfMPrepareCorrection{#1}%
-% \useKVdefault[Boulot]%
-% \setKV[Boulot]{#1}%
-% \if@Dyslexie
-% \setKV[Boulot]{Dys}
-% \fi
-% \PfMBasculeDys%
-% \setlength{\columnseprule}{\useKV[Boulot]{Epaisseur}}%
\TikzRecapBrevetCor{#2}%
-% \ifboolKV[Boulot]{CorrectionColonnes}{\begin{multicols}{\useKV[Boulot]{Colonnes}}}{}%
-% \PfMAffichageCorrige%
-% \ifboolKV[Boulot]{CorrectionColonnes}{\end{multicols}}{}%
\PfMAffichageCorrectionColonnes%
}%
}{}%
@@ -3545,24 +3601,19 @@
}%
}{%
\ifboolKV[Boulot]{Parcours}{%
- \ifboolKV[Boulot]{CorrigeSeul}{}{%
- \setKV[Parcours]{#2}\TikzParcours%
- }
- \let\exercice\exerciceParcours\let\endexercice\endexerciceParcours%
+ \ifboolKV[Boulot]{CorrigeSeul}{}{%
+ \setKV[Parcours]{#2}\TikzParcours%
+ }
+ \let\exercice\exerciceParcours\let\endexercice\endexerciceParcours%
+ \ifboolKV[Boulot]{AvecEntrainement}{%
+ \AddToHook{env/Maquette/end}[Haltere]{%
+ \PfMAffichageEntrainementColonnes%
+ }%
+ }{}%
\ifboolKV[Boulot]{CorrigeFin}{%
\AddToHook{env/Maquette/after}[Correction]{%
\PfMPrepareCorrection{#1}%
-% \useKVdefault[Boulot]%
-% \setKV[Boulot]{#1}%
-% \if@Dyslexie
-% \setKV[Boulot]{Dys}
-% \fi
-% \PfMBasculeDys%
-% \setlength{\columnseprule}{\useKV[Boulot]{Epaisseur}}%
\TikzParcoursCor{#2}
-% \ifboolKV[Boulot]{CorrectionColonnes}{\begin{multicols}{\useKV[Boulot]{Colonnes}}}{}%
-% \PfMAffichageCorrige%
-% \ifboolKV[Boulot]{CorrectionColonnes}{\end{multicols}}{}%
\PfMAffichageCorrectionColonnes
}%
}{}%
@@ -3575,17 +3626,7 @@
\ifboolKV[Boulot]{CorrigeFin}{%
\AddToHook{env/Maquette/after}[Correction]{%
\PfMPrepareCorrection{#1}%
-% \useKVdefault[Boulot]%
-% \setKV[Boulot]{#1}%
-% \if@Dyslexie
-% \setKV[Boulot]{Dys}
-% \fi
-% \PfMBasculeDys%
-% \setlength{\columnseprule}{\useKV[Boulot]{Epaisseur}}%
\TikzPdTCor{#2}%
-% \ifboolKV[Boulot]{CorrectionColonnes}{\begin{multicols}{\useKV[Boulot]{Colonnes}}}{}%
-% \PfMAffichageCorrige%
-% \ifboolKV[Boulot]{CorrectionColonnes}{\end{multicols}}{}%
\PfMAffichageCorrectionColonnes%
}%
}{}%
@@ -3595,17 +3636,9 @@
\setKV[DM]{#2}\TikzDM%
}
\let\exercice\exerciceDM\let\endexercice\endexerciceDM%
-% \let\Exercice\exercice\let\endExercice\endexercice%
\ifboolKV[Boulot]{CorrigeFin}{%
\AddToHook{env/Maquette/after}[Correction]{%
\PfMPrepareCorrection{#1}%
-% \useKVdefault[Boulot]%
-% \setKV[Boulot]{#1}%
-% \if@Dyslexie
-% \setKV[Boulot]{Dys}
-% \fi
-% \PfMBasculeDys%
-% \setlength{\columnseprule}{\useKV[Boulot]{Epaisseur}}%
\TikzDMCor{#2}%
\PfMAffichageCorrectionColonnes%
}%
@@ -3617,18 +3650,15 @@
\TikzFiche%
}%
\let\exercice\exerciceFiche\let\endexercice\endexerciceFiche%
- %\let\Exercice\exercice\let\endExercice\endexercice
+ \ifboolKV[Boulot]{AvecEntrainement}{%
+ \AddToHook{env/Maquette/end}[Haltere]{%
+ \PfMAffichageEntrainementColonnes%
+ }%
+ }{}%
\ifboolKV[Boulot]{CorrigeFin}{%
\ifboolKV[Boulot]{CorrigeAll}{%
\AddToHook{env/Maquette/after}[Correction]{%
\PfMPrepareCorrection{#1}%
-% \useKVdefault[Boulot]%
-% \setKV[Boulot]{#1}%
-% \if@Dyslexie
-% \setKV[Boulot]{Dys}
-% \fi
-% \PfMBasculeDys%
-% \setlength{\columnseprule}{\useKV[Boulot]{Epaisseur}}%
\TikzFicheCor{#2}%
\ifboolKV[Boulot]{CorrectionColonnes}{\begin{multicols}{\useKV[Boulot]{Colonnes}}}{}%
\xintFor* ##1 in{\xintSeq{1}{\thePfMExo}}\do{%
@@ -3680,17 +3710,7 @@
\ifboolKV[Boulot]{CorrigeFin}{%
\AddToHook{env/Maquette/after}[Correction]{%
\PfMPrepareCorrection{#1}
-% \useKVdefault[Boulot]%
-% \setKV[Boulot]{#1}%
-% \if@Dyslexie
-% \setKV[Boulot]{Dys}
-% \fi
-% \PfMBasculeDys%
-% \setlength{\columnseprule}{\useKV[Boulot]{Epaisseur}}%
\TikzDSCor{#2}%
-% \ifboolKV[Boulot]{CorrectionColonnes}{\begin{multicols}{\useKV[Boulot]{Colonnes}}}{}%
-% \PfMAffichageCorrige%
-% \ifboolKV[Boulot]{CorrectionColonnes}{\end{multicols}}{}%
\PfMAffichageCorrectionColonnes%
}%
}{}%
@@ -3703,17 +3723,7 @@
\ifboolKV[Boulot]{CorrigeFin}{%
\AddToHook{env/Maquette/after}[Correction]{%
\PfMPrepareCorrection{#1}
-% \useKVdefault[Boulot]%
-% \setKV[Boulot]{#1}%
-% \if@Dyslexie
-% \setKV[Boulot]{Dys}
-% \fi
-% \PfMBasculeDys%
-% \setlength{\columnseprule}{\useKV[Boulot]{Epaisseur}}%
\TikzIECor{#2}%
-% \ifboolKV[Boulot]{CorrectionColonnes}{\begin{multicols}{\useKV[Boulot]{Colonnes}}}{}%
-% \PfMAffichageCorrige%
-% \ifboolKV[Boulot]{CorrectionColonnes}{\end{multicols}}{}%
\PfMAffichageCorrectionColonnes
}%
}{}%
diff --git a/macros/latex/contrib/reledmac/doc-include/migrate-mac.dtx b/macros/latex/contrib/reledmac/doc-include/migrate-mac.dtx
index 12594049c6..fc3427bf80 100644
--- a/macros/latex/contrib/reledmac/doc-include/migrate-mac.dtx
+++ b/macros/latex/contrib/reledmac/doc-include/migrate-mac.dtx
@@ -246,7 +246,7 @@
% \cs{ledsubsection} & \cs{eledsubsection} \\
% \cs{ledsubsubsection} & \cs{eledsubsubsection} \\
% \cs{noeledsec} & Package option \verb+noeledsec+ \\
-% \cs{noendnotes} & Package option \verb+noendnotes+ \\
+% \cs{noendnotes} & Package option \verb+noend+ \\
% \cs{pageparbreak} & \cs{ledpb} \\
% \end{longtable}
%
diff --git a/macros/latex/contrib/reledmac/doc-more/page-typesetting-columns.pdf b/macros/latex/contrib/reledmac/doc-more/page-typesetting-columns.pdf
index 18605ab2db..1ae91515fb 100644
--- a/macros/latex/contrib/reledmac/doc-more/page-typesetting-columns.pdf
+++ b/macros/latex/contrib/reledmac/doc-more/page-typesetting-columns.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/1-criticalendnotes.pdf b/macros/latex/contrib/reledmac/examples/1-criticalendnotes.pdf
index 9c77ee92d8..58f1d6981d 100644
--- a/macros/latex/contrib/reledmac/examples/1-criticalendnotes.pdf
+++ b/macros/latex/contrib/reledmac/examples/1-criticalendnotes.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/1-criticalnotes.pdf b/macros/latex/contrib/reledmac/examples/1-criticalnotes.pdf
index e25e9f9fd2..ea2f749d32 100644
--- a/macros/latex/contrib/reledmac/examples/1-criticalnotes.pdf
+++ b/macros/latex/contrib/reledmac/examples/1-criticalnotes.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/1-sidenotes.pdf b/macros/latex/contrib/reledmac/examples/1-sidenotes.pdf
index 22b5bd2729..2d7130fcb9 100644
--- a/macros/latex/contrib/reledmac/examples/1-sidenotes.pdf
+++ b/macros/latex/contrib/reledmac/examples/1-sidenotes.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/1-tabular.pdf b/macros/latex/contrib/reledmac/examples/1-tabular.pdf
index 2e09c62414..d7a945978b 100644
--- a/macros/latex/contrib/reledmac/examples/1-tabular.pdf
+++ b/macros/latex/contrib/reledmac/examples/1-tabular.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/1-verses-doublenumbering.pdf b/macros/latex/contrib/reledmac/examples/1-verses-doublenumbering.pdf
index f4641e8ed2..75b679b50d 100644
--- a/macros/latex/contrib/reledmac/examples/1-verses-doublenumbering.pdf
+++ b/macros/latex/contrib/reledmac/examples/1-verses-doublenumbering.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/1-verses.pdf b/macros/latex/contrib/reledmac/examples/1-verses.pdf
index 345486a466..e1d1b6af19 100644
--- a/macros/latex/contrib/reledmac/examples/1-verses.pdf
+++ b/macros/latex/contrib/reledmac/examples/1-verses.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-antilabe.pdf b/macros/latex/contrib/reledmac/examples/2-antilabe.pdf
index 725b561e91..f7b843c631 100644
--- a/macros/latex/contrib/reledmac/examples/2-antilabe.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-antilabe.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-cross_referencing.pdf b/macros/latex/contrib/reledmac/examples/2-cross_referencing.pdf
index bb84710a9b..1c53f875a0 100644
--- a/macros/latex/contrib/reledmac/examples/2-cross_referencing.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-cross_referencing.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-footnote_spacing.pdf b/macros/latex/contrib/reledmac/examples/2-footnote_spacing.pdf
index b1fb90d576..c9e6daca45 100644
--- a/macros/latex/contrib/reledmac/examples/2-footnote_spacing.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-footnote_spacing.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-glossaries.pdf b/macros/latex/contrib/reledmac/examples/2-glossaries.pdf
index bc1cc26fa3..f702632cf3 100644
--- a/macros/latex/contrib/reledmac/examples/2-glossaries.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-glossaries.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-indexing.pdf b/macros/latex/contrib/reledmac/examples/2-indexing.pdf
index bd9a1ac760..ca3b90abcc 100644
--- a/macros/latex/contrib/reledmac/examples/2-indexing.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-indexing.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-lemma_disambigution.pdf b/macros/latex/contrib/reledmac/examples/2-lemma_disambigution.pdf
index 785306eb4c..95a09523d9 100644
--- a/macros/latex/contrib/reledmac/examples/2-lemma_disambigution.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-lemma_disambigution.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-line_numbers_in_header.pdf b/macros/latex/contrib/reledmac/examples/2-line_numbers_in_header.pdf
index 20a2c5d6a8..0021b1cbd3 100644
--- a/macros/latex/contrib/reledmac/examples/2-line_numbers_in_header.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-line_numbers_in_header.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-linespacing.pdf b/macros/latex/contrib/reledmac/examples/2-linespacing.pdf
index 4d32ac79ca..67424c3e0c 100644
--- a/macros/latex/contrib/reledmac/examples/2-linespacing.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-linespacing.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-manuscript-apparatus.pdf b/macros/latex/contrib/reledmac/examples/2-manuscript-apparatus.pdf
index 4deece32c7..362ff7012a 100644
--- a/macros/latex/contrib/reledmac/examples/2-manuscript-apparatus.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-manuscript-apparatus.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-notes-width.pdf b/macros/latex/contrib/reledmac/examples/2-notes-width.pdf
index be687afa88..0fe795532a 100644
--- a/macros/latex/contrib/reledmac/examples/2-notes-width.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-notes-width.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-one_series_per_pstart.pdf b/macros/latex/contrib/reledmac/examples/2-one_series_per_pstart.pdf
index 9e5b0624aa..ad48933ba2 100644
--- a/macros/latex/contrib/reledmac/examples/2-one_series_per_pstart.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-one_series_per_pstart.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-performances.pdf b/macros/latex/contrib/reledmac/examples/2-performances.pdf
index 822f29af7e..e68f4f3b49 100644
--- a/macros/latex/contrib/reledmac/examples/2-performances.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-performances.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-reledmac-right-to-left.pdf b/macros/latex/contrib/reledmac/examples/2-reledmac-right-to-left.pdf
index fdf1ad93f5..ed0755c95b 100644
--- a/macros/latex/contrib/reledmac/examples/2-reledmac-right-to-left.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-reledmac-right-to-left.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-subdivision-number-in-header.pdf b/macros/latex/contrib/reledmac/examples/2-subdivision-number-in-header.pdf
index 1a079d07da..a0e92d1b90 100644
--- a/macros/latex/contrib/reledmac/examples/2-subdivision-number-in-header.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-subdivision-number-in-header.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-titles_in_line_numbering_with_notes.pdf b/macros/latex/contrib/reledmac/examples/2-titles_in_line_numbering_with_notes.pdf
index 16d3cc7f02..22f3ac9ed3 100644
--- a/macros/latex/contrib/reledmac/examples/2-titles_in_line_numbering_with_notes.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-titles_in_line_numbering_with_notes.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-titles_not_in_line_numbering.pdf b/macros/latex/contrib/reledmac/examples/2-titles_not_in_line_numbering.pdf
index 1021f61ecb..6edc466546 100644
--- a/macros/latex/contrib/reledmac/examples/2-titles_not_in_line_numbering.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-titles_not_in_line_numbering.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_columns_different_languages.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_columns_different_languages.pdf
index d9ca46f8e5..ae6daea2f3 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_columns_different_languages.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_columns_different_languages.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_mwe.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_mwe.pdf
index d62f7e46a6..65e77b6045 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_mwe.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_mwe.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_pages_different_languages_lualatex.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_pages_different_languages_lualatex.pdf
index 79e086308e..7864905fc5 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_pages_different_languages_lualatex.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_pages_different_languages_lualatex.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_same_page_number_in_both_side.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_same_page_number_in_both_side.pdf
index e5aaa63498..147ece9039 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_same_page_number_in_both_side.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_same_page_number_in_both_side.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted-nomax.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted-nomax.pdf
index 9b95c6bfdd..bc2e485aa7 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted-nomax.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted-nomax.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted.pdf
index 18d3b9814b..a53aafd365 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_default.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_default.pdf
index 333e6b906a..b873ef2634 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_default.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_default.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax-shifted.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax-shifted.pdf
index f908766e8f..4437bcd188 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax-shifted.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax-shifted.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax.pdf
index 0635fef82c..0c36cb9564 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nosync.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nosync.pdf
index c4936a579f..073be3c769 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nosync.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nosync.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_shifted.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_shifted.pdf
index 687871bf30..7a13994ca4 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_shifted.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_shifted.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column-continuous-numbering.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column-continuous-numbering.pdf
index 6436851359..5dbce10161 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column-continuous-numbering.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column-continuous-numbering.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column.pdf
index 125c76967c..4c574e496b 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_columns_alignment.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_columns_alignment.pdf
index 36a70b5322..012bb74b4e 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_columns_alignment.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_columns_alignment.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_columns_titles_in_line_numbering_with_notes.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_columns_titles_in_line_numbering_with_notes.pdf
index 4d07ca87f3..fc67986e5a 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_columns_titles_in_line_numbering_with_notes.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_columns_titles_in_line_numbering_with_notes.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_inside-outside-columns.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_inside-outside-columns.pdf
index 610ba2241f..58d08bf3bd 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_inside-outside-columns.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_inside-outside-columns.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_one_series_per_pstart.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_one_series_per_pstart.pdf
index be6f88912c..36f6321386 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_one_series_per_pstart.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_one_series_per_pstart.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_long_notes.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_long_notes.pdf
index 89396d832c..db1ccbc5a7 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_long_notes.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_long_notes.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_notes_leftpage.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_notes_leftpage.pdf
index e62fa711ad..d71f06d80e 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_notes_leftpage.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_notes_leftpage.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_paragraph_separator_between.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_paragraph_separator_between.pdf
index d1eec4642f..c6186efd4d 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_paragraph_separator_between.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_paragraph_separator_between.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_titles_in_line_numbering_with_notes.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_titles_in_line_numbering_with_notes.pdf
index 1bc32688b6..a36ab701dd 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_titles_in_line_numbering_with_notes.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_titles_in_line_numbering_with_notes.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_titles_not_in_line_numbering.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_titles_not_in_line_numbering.pdf
index 90675794b5..33338d8f63 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_titles_not_in_line_numbering.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_titles_not_in_line_numbering.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_verse_text_between.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_verse_text_between.pdf
index 21c417fdaa..c8200f5ff5 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_verse_text_between.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_verse_text_between.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/migration.pdf b/macros/latex/contrib/reledmac/migration.pdf
index 3bb51a2f91..50d46b721e 100644
--- a/macros/latex/contrib/reledmac/migration.pdf
+++ b/macros/latex/contrib/reledmac/migration.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/reledmac.dtx b/macros/latex/contrib/reledmac/reledmac.dtx
index 2bce791494..2109ca38b5 100644
--- a/macros/latex/contrib/reledmac/reledmac.dtx
+++ b/macros/latex/contrib/reledmac/reledmac.dtx
@@ -602,6 +602,9 @@
% \changes{v2.39.7}{2023/08/21}{Again fix with hyperref, footnote and tabular environment}
% \changes{v2.40.0}{2023/09/30}{Add\protect\cs{Xonlyonerule} and \protect\cs{onlyoneruleX} hooks}
% \changes{v2.40.0}{2023/09/30}{Add\protect\option{onlyonerule} option}
+% \changes{v2.40.1}{2024/05/11}{Reset \protect\cs{parfillskip} after paragraphed and columned footnote}
+% \changes{v2.40.1}{2024/05/11}{Fix bug when using \protect\cs{edlabel} in \protect\env{edtabular} and related}
+% \changes{v2.40.1}{2024/05/11}{Dealing with direction in \protect\cs{footnoteXtxt} when using LuaLaTeX}
% Typeset scholarly editions with \LaTeX\thanks{This file (\dtxfilename)
% has version number \fileversion, last revised \filedate.}}
%
@@ -4528,7 +4531,7 @@
% \begin{macrocode}
%<*code>
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{reledmac}[2023/08/21 v2.39.7 typesetting critical editions]%
+\ProvidesPackage{reledmac}[2024/05/11 v2.40.1 typesetting critical editions]%
% \end{macrocode}
%
% \subsection{Loading packages}
@@ -10872,6 +10875,7 @@
% \item \protect\cs{splitmaxdepth}.
% \item \protect\cs{floatingpenalty}, that is penalty values being added when a long note flows from one page to another.
% Here, we let it to 0 when we process parallel pages in \protect\package{eledpar}, in order to allow notes to flow from left to right pages and \emph{vice-versa}.
+% \item\cs{parfillskip} for ending of paragraph.
% Otherwise, we let it to \protect\cs{@MM}, which is the standard \LaTeX\ \protect\cs{floatingpenalty}.
% \end{itemize}
% \changes{v0.7.0}{2005/02/18}{Added \protect\cs{footsplitskips} for use in many
@@ -10883,8 +10887,12 @@
\unless\ifl@dprintingpages%
\floatingpenalty=\@MM%
\fi%
- \splittopskip=\ht\strutbox \splitmaxdepth=\dp\strutbox
- \leftskip=\z@skip \rightskip=\z@skip}
+ \splittopskip=\ht\strutbox%
+ \splitmaxdepth=\dp\strutbox%
+ \leftskip=\z@skip%
+ \rightskip=\z@skip%
+ \parfillskip=0pt plus 1fil%
+}
% \end{macrocode}
% \end{macro}
@@ -11169,6 +11177,7 @@
% Read \reff{width2columns} for the general description of the problem.
% \begin{macrocode}
\leftskip0pt \rightskip0pt
+ \parfillskip=0pt plus 1fil
\ifl@dpairing\else%
\hsize=\old@hsize%
\fi%
@@ -11349,6 +11358,7 @@
\let\bidi@RTL@everypar\@empty%
\noindent\leavevmode%
\let\bidi@RTL@everypar\old@bidi@RTL@everypar%
+ \parfillskip=0pt plus 1fil%
}%
% \end{macrocode}
% \end{macro}
@@ -13917,6 +13927,7 @@
}%
\leftskip=\z@
\rightskip=\z@
+ \parfillskip=0pt plus 1fil
\setparindentX{#1}%
\vskip\skip\@nameuse{footins#1}%
\setnoteswidthliketwocolumnsX@{#1}%
@@ -15589,6 +15600,10 @@
}%
\expandafter\newcommand\csname footnote#1text\endcsname[2][]{%
\begingroup%
+ \ifluatex%
+ \xdef\footnote@luatextextdir{\the\textdir}%
+ \xdef\footnote@luatexpardir{\the\pardir}%
+ \fi%
\csuse{vfootnote#1}{#1}{\expandonce{##2}}{##1}%
\endgroup%
}%
@@ -19897,8 +19912,8 @@
\listxadd{\@msdata@list}{%
\@msd@options@iffullpage%
\ifluatex%
- \csxdef{footnote@luatextextdir}{\the\textdir}%
- \csxdef{footnote@luatexpardir}{\the\pardir}%
+ \xdef\footnote@luatextextdir{\the\textdir}%
+ \xdef\footnote@luatexpardir{\the\pardir}%
\fi%
\csdef{@this@crossref@start}{\add@msd@c:start:msdata}%
\csdef{@this@crossref@end}{\add@msd@c:end:msdata}%
@@ -20457,12 +20472,12 @@
% \begin{macro}{\restore@edlabel}
% We need to be able to modify and restore the \protect\cs{edlabel} macro.
% \begin{macrocode}
+\let\original@edlabel\edlabel%
\newcommand{\disable@edlabel}{%
- \let\old@edlabel\edlabel%
\let\edlabel\@gobble%
}%
\newcommand{\restore@edlabel}{%
- \let\edlabel\old@edlabel%
+ \let\edlabel\original@edlabel%
}%
% \end{macrocode}
% \end{macro}
diff --git a/macros/latex/contrib/reledmac/reledmac.pdf b/macros/latex/contrib/reledmac/reledmac.pdf
index fcc8c9d698..bc1f8b20f9 100644
--- a/macros/latex/contrib/reledmac/reledmac.pdf
+++ b/macros/latex/contrib/reledmac/reledmac.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/reledpar.dtx b/macros/latex/contrib/reledmac/reledpar.dtx
index 9040bb3630..aff1d03da1 100644
--- a/macros/latex/contrib/reledmac/reledpar.dtx
+++ b/macros/latex/contrib/reledmac/reledpar.dtx
@@ -347,7 +347,7 @@
% \changes{v2.24.1}{2020/08/19}{Fix incompatibility between lineation by \protect\cs{pstart} and (a)stanza.}
% \changes{v2.24.2}{2020/09/16}{Fix some bugs with lineation by page, when a numbered section starts at the very beginning of page.}
% \changes{v2.24.3}{2020/11/08}{Fix bug with hanging verse in parallel typesetting.}
-% \changes{v2.25.0}{2020/11/29}{Add compatibility with \protect\cs{linenumannotationothersidetrue} of \protect\macpackage.}.
+% \changes{v2.25.0}{2020/11/29}{Add compatibility with \protect\cs{linenumannotationothersidetrue} of \protect\macpackage.}
% \changes{v2.25.1}{2021/01/21}{\protect\cs{ifsublines@R} migrated to \protect\macpackage}
% \changes{v2.25.2}{2021/09/27}{Fix incompatibility with \protect\package{babel} v3.61}
% \changes{v2.25.3}{2022/04/22}{Fix incompatibility with \protect\package{polyglossia} v1.55}
@@ -1410,7 +1410,7 @@
% \begin{macrocode}
%<*code>
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{reledpar}[2024/02/26 v2.25.6 reledmac extension for parallel texts]%
+\ProvidesPackage{reledpar}[2024/05/11 v2.25.6a reledmac extension for parallel texts]%
% \end{macrocode}
% \subsection{Package's requirement}
diff --git a/macros/latex/contrib/reledmac/reledpar.pdf b/macros/latex/contrib/reledmac/reledpar.pdf
index 787452ce62..84a3fd4ec0 100644
--- a/macros/latex/contrib/reledmac/reledpar.pdf
+++ b/macros/latex/contrib/reledmac/reledpar.pdf
Binary files differ
diff --git a/macros/latex/contrib/rigidnotation/README.md b/macros/latex/contrib/rigidnotation/README.md
new file mode 100644
index 0000000000..06e65991d9
--- /dev/null
+++ b/macros/latex/contrib/rigidnotation/README.md
@@ -0,0 +1,31 @@
+# The rigidnotation LaTeX package
+This package provides LaTeX macros to easily and concisely typeset vectors and matrices in a flexible way such as to follow the RIGID notation convention. The package enables the user to define custom commands that can then be used in any math-mode environment to efficiently and rigorously typeset the notational elements commonly used in robotics research (and many other fields) for position vectors, rotation matrices, pose matrices, etc.
+
+## Documentation
+This package is [available on CTAN](https://ctan.org/pkg/rigidnotation), and a PDF manual is accessible here.
+
+## Local Installation
+If you want to install the package manually on your local computer, you can follow the steps outlined below.
+1. Run `kpsewhich -var-value TEXMFHOME` to get the path to your TeX package home.
+Assuming that your TeX package home is `$TEXHOME`,
+2. Run `mkdir -p $TEXHOME/tex/latex/rigidnotation/` to create a directory for this package.
+3. Run `tex rigidnotation.ins` to generate the `rigidnotation.sty` macro file.
+3. Run `cp rigidnotation.sty $TEXHOME/tex/latex/rigidnotation/` to install the package.
+3. Run `pdflatex -interaction=nonstopmode rigidnotation.dtx` to build the documentation.
+5. Run `texhash $TEXHOME` to update the LaTeX package tree.
+
+## Requirements
+This package depends on [mathtools](https://ctan.org/pkg/mathtools) and [xparse](https://ctan.org/pkg/xparse) packages, both of which are widely used.
+
+## License
+Copyright (C) 2024 Philippe Nadeau
+
+This file may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.3c
+of this license or (at your option) any later version.
+The latest version of this license is in:
+
+http://www.latex-project.org/lppl.txt
+
+and version 1.3c or later is part of all distributions of LaTeX
+version 2008-05-04 or later. \ No newline at end of file
diff --git a/macros/latex/contrib/rigidnotation/rigidnotation.dtx b/macros/latex/contrib/rigidnotation/rigidnotation.dtx
new file mode 100644
index 0000000000..565ac2bb50
--- /dev/null
+++ b/macros/latex/contrib/rigidnotation/rigidnotation.dtx
@@ -0,0 +1,507 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2024 Philippe Nadeau
+% --------------------------------
+%
+% This file may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3c
+% of this license or (at your option) any later version.
+% The latest version of this license is in:
+%
+% http://www.latex-project.org/lppl.txt
+%
+% and version 1.3c or later is part of all distributions of LaTeX
+% version 2008-05-04 or later.
+%
+% \fi
+%
+% \iffalse
+%<package>\NeedsTeXFormat{LaTeX2e}
+%<package>\ProvidesPackage{rigidnotation}[2024/05/13 1.0.0 Rigid Notation]
+%
+%<*driver>
+\documentclass{ltxdoc}
+% This package is required to build its own documentation!
+\usepackage{rigidnotation}
+\NewRigidNotation{Vel}{v}
+\NewRigidNotation{Acc}{a}
+\setlength{\fboxsep}{0pt}
+\setlength{\fboxrule}{0.1pt}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+\DocInput{rigidnotation.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+%
+% \def\oargument#1{\texttt{[\meta{#1}]}}
+% \def\margument#1{\texttt{\{\meta{#1}\}}}
+%
+%
+% \changes{v1.0}{2024-05-13}{Initial version}
+%
+% \GetFileInfo{rigidnotation.sty}
+%
+% \DoNotIndex{}
+%
+% \title{The \textsf{rigidnotation} package\thanks{This document
+% corresponds to \textsf{rigidnotation}~\fileversion,
+% dated \filedate.}}
+% \author{Philippe Nadeau \\ \texttt{philippe.nadeau [at] robotics.utias.utoronto.ca}}
+% \date{\filedate}
+%
+% \maketitle
+%
+% \begin{abstract}
+% This package provides \LaTeX\ macros to easily and concisely typeset vectors and matrices in a flexible way such as to follow the RIGID notation convention. The package enables the user to define custom commands that can then be used in any math-mode environment to efficiently and rigorously typeset the notational elements commonly used in robotics research (and many other fields) for position vectors, rotation matrices, pose matrices, etc.
+% \end{abstract}
+%
+% \section{Introduction}
+% A useful typesetting system should reduce to a minimum the number of keystrokes required by the user while enabling a flexible usage of the system and cater to various needs. This is the philosophy behind this package.
+%
+% This package makes it easy to typeset vectors and matrices following the RIGID convention, which is compliant with the \textit{ISO 800000 Standard on Quantities and Units}. To do so, this package defines a \textit{command factory} that can be used to concisely generate multiple commands, each one dedicated to a user-defined quantity (e.g. position vector, velocity vector, rotation matrix). The user can then call the generated commands within math-mode environments to typeset a concise representation of the quantity.
+%
+% For instance, |\Pos[\dot]{s}{b}{w}\Tran| produces
+% \begin{equation*}
+% \resizebox{1cm}{!}{$\Pos[\dot]{s}{b}{w}\Tran$}
+% \end{equation*}
+% which very concisely represents the time-derivative of the transposed position vector of subject $s$ with respect to basis $b$ when expressed in coordinate system $w$. When typing the keystrokes, the user can think: \textit{position of $s$ with respect to $b$ expressed in $w$, transposed}. Except for the accent, the order in which the elements are typed respects the order in which they can be spoken, making it easier to remember the order of the arguments.
+%
+% The \textit{subject} of a quantity is the elements to which the quantity pertains (e.g. the orientation of the subject, the velocity of the subject). The \textit{basis} is the element relative to which the quantity is observed/measured/defined (e.g. the velocity of the car/subject relative to the train/basis). A vector quantity is commonly pictured as an arrow pointing from the basis to the subject. To facilitate computations, quantities are \textit{expressed} in a \textit{coordinate system} such that they can be represented as a set of numbers. Sometime it makes sense to specify only a subset of the four elements: quantity, subject, basis, and coordinate system. This package allows the user to specify only the necessary elements. A \textit{concise mode} can also be enabled such that when the basis and coordinate system are the same, only the basis is denoted.
+%
+% \section{Usage}
+% The typical usage of the package involves defining quantities of interest in the preamble, like
+% \begin{verbatim}
+% \usepackage{rigidnotation}
+% \NewRigidNotation{Vel}{v} % Velocity
+% \NewRigidNotation{Acc}{a} % Acceleration
+% % Whether the concise notation is desired
+% \SetConciseNotation{\BooleanTrue}
+% \end{verbatim}
+% in which quantities representing velocities and accelerations are defined. Then, in any math-mode environment, variations of the following commands can be used:
+% \begin{verbatim}
+% \begin{equation*}
+% 1:\Vel \quad
+% 2:\Vel[\hat] \quad
+% 3:\Vel[\ddot]{s} \quad
+% 4:\SetConciseNotation \Vel{s}{b}{b} \quad
+% 5:\Vel{s}{b}{c} \quad
+% 6:\UnsetConciseNotation \Vel{s}{b}{b} \quad
+% 7:\Acc{s}{b}\Tran \quad
+% 8:\Acc{s}{b}^2 \quad
+% 9:\Rot{s}{b}\Inv \quad
+% \end{equation*}
+% \end{verbatim}
+% to produce
+% \begin{equation*}
+% 1:\Vel \quad
+% 2:\Vel[\hat] \quad
+% 3:\Vel[\ddot]{s} \quad
+% 4:\SetConciseNotation \Vel{s}{b}{b} \quad
+% 5:\Vel{s}{b}{c} \quad
+% 6:\UnsetConciseNotation \Vel{s}{b}{b} \quad
+% 7:\Acc{W}{b}\Tran \quad
+% 8:\Acc{W}{b}^2 \quad
+% 9:\Rot{W}{b}\Inv
+% \end{equation*}
+% where the concise notation was enabled for items 4 and 5 but disabled for element 6 (notice the difference). Also note that command |\Rot| was used even though it was not defined in the preamble. This is because the package comes with a few pre-defined quantities: |\Pos|, |\Rot|, and |\Pose|.
+%
+% \subsection{Commands}
+% In the following, arguments surrounded by square brackets are optional while those surrounded by curly brackets are mandatory like \oargument{optional} and \margument{mandatory} respectively.
+%
+% \vspace{5mm}\DescribeMacro{\NewRigidNotation}
+% \hspace{-6.5mm} \textbf{Arguments}:
+% \begin{enumerate}
+% \item \margument{name}: Name of the command to create.
+% \item \margument{symbol}: Symbol used to represent the quantity.
+% \end{enumerate}
+% \textbf{Description}:\\
+% Define a new command that can be used to typeset a physical or mathematical quantity according to the RIGID convention.
+% For instance, |\NewRigidNotation{Pos}{p}| can be used to create a new command |\Pos| for typesetting position vectors, with the |p| symbol being used to represent the quantity. After it has been defined, the new command can be used with the following arguments:
+% \begin{enumerate}
+% \item \oargument{accent}: Command to put an accent over the letter (e.g. |\hat|).
+% \item \oargument{subject}: The symbol of the \textit{subject} (e.g. vector endpoint).
+% \item \oargument{basis}: The symbol of the \textit{basis} (e.g. vector origin).
+% \item \oargument{coord}: Symbol for the coordinate system potentially used.
+% \end{enumerate}
+% Hence, this is a kind of meta-command or command factory: |\NewRigidNotation| creates a new command that can be used with arguments.
+%For instance, calling |\NewRigidNotation{Pos}{p}| defines a new command |\Pos| that can be used with zero or more arguments, as in |\Pos[\dot]{a}{b}{c}|, in which |a| is the subject symbol, |b| is the basis symbol, |c| is the coordinate system, and a dot ($\cdot$) will be placed above the |p| in the notation, producing $\Pos[\dot]{a}{b}{c}$.
+%
+% \vspace{5mm}\DescribeMacro{\SetConciseNotation}
+% \hspace{-6.5mm} \textbf{Arguments}:
+% \begin{enumerate}
+% \item \oargument{bool}: Either |\BooleanTrue| or |\BooleanFalse|.
+% \end{enumerate}
+% \textbf{Description}:\\
+% Sets whether to use the concise notation that omits to state the coordinate system when the basis and coordinate systems are the same. Calling |\SetConciseNotation| with no argument will enable the concise notation, which is the same as |\SetConciseNotation{\BooleanTrue}|. Note that, although the argument is optional, curly brackets are used.
+% Also note that the concise notation can be enabled/disabled multiple times throughout the document.
+%
+% \vspace{5mm}\DescribeMacro{\UnsetConciseNotation}
+% \hspace{-6.5mm} \textbf{Arguments}: None.\\
+% \textbf{Description}:\\
+% Informs the package that the concise notation should not be used. This is equivalent to |\SetConciseNotation{\BooleanFalse}| and is the default behaviour.
+%
+% \vspace{5mm}\DescribeMacro{\Tran}
+% \hspace{-6.5mm} Macro that typesets a $\cdot^\mathsf{T}$ in the right super-script position to denote the transpose\
+% as in $\Pos{a}{b}{c}\Tran$.
+%
+% \vspace{5mm}\DescribeMacro{\Inv}
+% \hspace{-6.5mm} Macro that typesets a $\cdot^{-1}$ in the right super-script position to denote the inverse\
+% as in $\Pos{a}{b}{c}\Inv$.
+%
+% \vspace{5mm}\DescribeMacro{\Herm}
+% \hspace{-6.5mm} Macro that typesets a $\cdot^\mathsf{H}$ in the right super-script position to denote the Hermitian\
+% as in $\Rot{a}{b}\Herm$.
+%
+% \vspace{5mm}\DescribeMacro{\Conj}
+% \hspace{-6.5mm} Macro that typesets a $\cdot^\ast$ in the right super-script position to denote the complex conjugate\
+% as in $\Pos\Conj$.
+%
+% \MaybeStop{}
+%
+% \section{Implementation}
+%
+% \begin{macro}{\SetConciseNotation}
+% Defines whether the concise notation is used or not.
+% When used the concise notation will ommit mentionning
+% the reference frame when the source and reference are the same.
+%
+% To use the concise notation, either call |\SetConciseNotation|
+% with no argument or with |\SetConciseNotation{\BooleanTrue}|.
+% \begin{macrocode}
+\usepackage{xparse}
+\usepackage{mathtools}
+
+%This box is used to measure the width of the post-script
+\newsavebox{\RN@postbox}
+\newlength{\RN@postboxwd}
+\newsavebox{\RN@expbox}
+\newlength{\RN@expboxwd}
+%Spacing before and after the symbol
+\def\RN@prespace{0.08em}
+\def\RN@postspace{0.23em}
+
+\NewDocumentCommand{\SetConciseNotation}{g}
+{
+ \newif\IfRN@C
+ \IfNoValueTF{#1}
+ {
+ \RN@Ctrue
+ }
+ {
+ \IfBooleanTF{#1}
+ {
+ \RN@Ctrue
+ }
+ {
+ \RN@Cfalse
+ }
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\UnsetConciseNotation}
+% Disables the concise notation.
+% This is equivalent to |\SetConciseNotation{\BooleanFalse}|.
+% \begin{macrocode}
+\def\UnsetConciseNotation{\SetConciseNotation{\BooleanFalse}}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\RN@makecmd}
+% \textbf{Arguments}:
+% \begin{enumerate}
+% \item \oargument{accent}: Command to put an accent over the letter (e.g. |\hat|).
+% \item \margument{qty}: Symbol for the quantity to represent.
+% \item \oargument{subject}: The symbol of the \textit{subject} (e.g. vector endpoint).
+% \item \oargument{basis}: The symbol of the \textit{basis} (e.g. vector origin).
+% \item \oargument{coord}: Symbol for the coordinate system potentially used.
+% \end{enumerate}
+% \textbf{Description}:\\
+% Defines a typesetting command from arguments. Main typesetting routine that should not be needed by the end-user. Instead, the end-user should use |\NewRigidNotation| to define typesetting commands. If the basis and coordinate system are the same, the coordinate system is omitted when the |RN@C| keyword is set.
+% \begin{macrocode}
+\NewDocumentCommand{\RN@makecmd}{omggg}
+{
+ \IfNoValueTF{#1}{\def\RN@symb{\boldsymbol{#2}}}{\def\RN@symb{#1{\boldsymbol{#2}}}}
+ \IfNoValueTF{#3}
+ {%subject is not specified
+ \IfNoValueTF{#4}
+ {%basis is not specified
+ \IfNoValueTF{#5}
+ {%subject, basis and coordinate system are not specified
+ \RN@symb
+ }
+ {%subject and basis are not specified, coordinate system is specified
+ \hspace{\RN@prespace}
+ \prescript{#5}{}{
+ \hspace{-\RN@prespace}
+ \RN@symb
+ }
+ }
+ }
+ {%basis is specified
+ \IfNoValueTF{#5}%
+ {%basis is specified, subject and coordinate system are not specified
+ \hspace{\RN@prespace}
+ \prescript{}{#4}{
+ \hspace{-\RN@prespace}
+ \RN@symb
+ }
+ }
+ {%basis and coordinate system are specified, subject is not specified
+ \IfEq{#4}{#5}
+ {
+ \IfRN@C
+ {%basis and coordinate system are the same and RN@C is set
+ \hspace{\RN@prespace}
+ \prescript{}{#4}{
+ \hspace{-\RN@prespace}
+ \RN@symb
+ }
+ }
+ {
+ \hspace{\RN@prespace}
+ \prescript{#5}{#4}{
+ \hspace{-\RN@prespace}
+ \RN@symb
+ }
+ }
+ }
+ {
+ \hspace{\RN@prespace}
+ \prescript{#5}{#4}{
+ \hspace{-\RN@prespace}
+ \RN@symb
+ }
+ }
+ }
+ }
+ %If there is no subject, no space is needed on the right of the symbol
+ \setlength{\RN@postboxwd}{0pt}
+ }
+ {%subject is specified
+ \IfNoValueTF{#4}
+ {%basis is not specified
+ \IfNoValueTF{#5}
+ {%subject is specified, basis and coordinate system are not specified
+ \RN@symb
+ \hspace{-\RN@postspace}
+ \prescript{}{#3}{}
+ }
+ {%basis is not specified, subject and coordinate system are specified
+ \hspace{\RN@prespace}
+ \prescript{#5}{}{
+ \hspace{-\RN@prespace}
+ \RN@symb
+ }
+ \hspace{-\RN@postspace}
+ \prescript{}{#3}{}
+ }
+ }
+ {%basis is specified
+ \IfNoValueTF{#5}
+ {%subject and basis are specified, coordinate system is not specified
+ \hspace{\RN@prespace}
+ \prescript{}{#4}{
+ \hspace{-\RN@prespace}
+ \RN@symb
+ }
+ \hspace{-\RN@postspace}
+ \prescript{}{#3}{}
+ }
+ {%subject, basis, and coordinate system are specified
+ \def\RN@argfour{#4}
+ \def\RN@argfive{#5}
+ \ifx\RN@argfour\RN@argfive
+ {
+ \IfRN@C
+ {%basis and coordinate system are the same and RN@C is set
+ \hspace{\RN@prespace}
+ \prescript{}{#4}{
+ \hspace{-\RN@prespace}
+ \RN@symb
+ }
+ \hspace{-\RN@postspace}
+ \prescript{}{#3}{}
+ }
+ \else
+ {
+ \hspace{\RN@prespace}
+ \prescript{#5}{#4}{
+ \hspace{-\RN@prespace}
+ \RN@symb
+ }
+ \hspace{-\RN@postspace}
+ \prescript{}{#3}{}
+ }
+ \fi
+ }
+ \else
+ {
+ \hspace{\RN@prespace}
+ \prescript{#5}{#4}{
+ \hspace{-\RN@prespace}
+ \RN@symb
+ }
+ \hspace{-\RN@postspace}
+ \prescript{}{#3}{}
+ }
+ \fi
+ }
+ }
+ %If there is a subject, we need to know the width
+ %of the symbol to bring the exponent closer
+ \sbox{\RN@postbox}{$#3$}
+ \setlength{\RN@postboxwd}{\wd\RN@postbox}
+ }
+ %If the following command is an exponent-type command,
+ %we bring it closer to the symbol.
+ %The next line has to be the last of the macro
+ \@ifnextchar^{\hspace{\RN@postspace}\hspace{-\RN@postboxwd}}{}
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\NewRigidNotation}
+% \textbf{Arguments}:
+% \begin{enumerate}
+% \item \margument{cmd}: New command name.
+% \item \margument{sym}: Symbol for the quantity to represent.
+% \end{enumerate}
+% \textbf{Description}:
+% Defines a new command that can be used to typeset the given symbol using the RIGID convention.
+% This essentially expands |\NewRigidNotation{cmd}{sym}| into |\NewDocumentCommand{cmd}{oggg}{\RN@makecmd[#1]{sym}{#2}{#3}{#4}}| such that |\cmd| can be used afterward with up to four arguments.
+% \begin{macrocode}
+\NewDocumentCommand{\NewRigidNotation}{mm}%
+{%
+ \expandafter\NewDocumentCommand\csname #1\endcsname{oggg}%
+ {%
+ \expandafter\csname RN@makecmd\endcsname[##1]{#2}{##2}{##3}{##4}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\Tran}
+% Macro that typesets a $\mathsf{T}$ in the right super-script position, closer to the quantity than normal, and with a smaller font size.
+% \begin{macrocode}
+\def\Tran{%
+ \sbox{\RN@expbox}{${\scriptscriptstyle\mathsf{T}}$}%
+ \setlength{\RN@expboxwd}{\wd\RN@expbox}%
+ \ifnum \RN@postboxwd>0%
+ \hspace{\RN@postspace}%
+ \hspace{-\RN@postboxwd}%
+ \ifnum \RN@postboxwd>\RN@expboxwd%
+ \mathmakebox[\RN@postboxwd][l]{%
+ {}^{\scriptscriptstyle\mathsf{T}}%
+ }%
+ \else%
+ \mathmakebox[\RN@expboxwd][l]{%
+ {}^{\scriptscriptstyle\mathsf{T}}%
+ }%
+ \fi%
+ \else%
+ ^{\scriptscriptstyle\mathsf{T}}%
+ \fi%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\Inv}
+% Macro that typesets a $\mathsf{-1}$ in the right super-script position, closer to the quantity than normal, and with a smaller font size.
+% \begin{macrocode}
+\def\Inv{%
+ \sbox{\RN@expbox}{${\scriptscriptstyle{-1}}$}%
+ \setlength{\RN@expboxwd}{\wd\RN@expbox}%
+ \ifnum \RN@postboxwd>0%
+ \hspace{\RN@postspace}%
+ \hspace{-\RN@postboxwd}%
+ \ifnum \RN@postboxwd>\RN@expboxwd%
+ \mathmakebox[\RN@postboxwd][l]{%
+ {}^{\scriptscriptstyle{-1}}%
+ }%
+ \else%
+ \mathmakebox[\RN@expboxwd][l]{%
+ {}^{\scriptscriptstyle{-1}}%
+ }%
+ \fi%
+ \else%
+ ^{\scriptscriptstyle{-1}}%
+ \fi%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\Herm}
+% Macro that typesets a $\mathsf{H}$ in the right super-script position, closer to the quantity than normal, and with a smaller font size.
+% \begin{macrocode}
+\def\Herm{%
+ \sbox{\RN@expbox}{${\scriptscriptstyle\mathsf{H}}$}%
+ \setlength{\RN@expboxwd}{\wd\RN@expbox}%
+ \ifnum \RN@postboxwd>0%
+ \hspace{\RN@postspace}%
+ \hspace{-\RN@postboxwd}%
+ \ifnum \RN@postboxwd>\RN@expboxwd%
+ \mathmakebox[\RN@postboxwd][l]{%
+ {}^{\scriptscriptstyle\mathsf{H}}%
+ }%
+ \else%
+ \mathmakebox[\RN@expboxwd][l]{%
+ {}^{\scriptscriptstyle\mathsf{H}}%
+ }%
+ \fi%
+ \else%
+ ^{\scriptscriptstyle\mathsf{H}}%
+ \fi%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\Conj}
+% Macro that typesets a $\ast$ in the right super-script position, closer to the quantity than normal, and with a smaller font size.
+% \begin{macrocode}
+\def\Conj{%
+ \sbox{\RN@expbox}{${\scriptscriptstyle\ast}$}%
+ \setlength{\RN@expboxwd}{\wd\RN@expbox}%
+ \ifnum \RN@postboxwd>0%
+ \hspace{\RN@postspace}%
+ \hspace{-\RN@postboxwd}%
+ \ifnum \RN@postboxwd>\RN@expboxwd%
+ \mathmakebox[\RN@postboxwd][l]{%
+ {}^{\scriptscriptstyle\ast}%
+ }%
+ \else%
+ \mathmakebox[\RN@expboxwd][l]{%
+ {}^{\scriptscriptstyle\ast}%
+ }%
+ \fi%
+ \else%
+ ^{\scriptscriptstyle\ast}%
+ \fi%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{Default settings}
+% By default, the following commonly used commands are provided. They are used to typeset position vectors, rotation matrices and pose matrices respectively. By default, the concise notation is disabled.
+% \begin{macrocode}
+\NewRigidNotation{Pos}{p}
+\NewRigidNotation{Rot}{R}
+\NewRigidNotation{Pose}{T}
+\UnsetConciseNotation
+% \end{macrocode}
+% \end{macro}
+%
+% \Finale
+\endinput
diff --git a/macros/latex/contrib/rigidnotation/rigidnotation.ins b/macros/latex/contrib/rigidnotation/rigidnotation.ins
new file mode 100644
index 0000000000..2330745216
--- /dev/null
+++ b/macros/latex/contrib/rigidnotation/rigidnotation.ins
@@ -0,0 +1,41 @@
+%%
+%% Copyright (C) 2024 Philippe Nadeau
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c of this license or (at your option) any later
+%% version. The latest version of this license is in:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3c or later is part of all distributions of
+%% LaTeX version 2008-05-04 or later.
+%%
+\input docstrip.tex
+\keepsilent
+\usedir{tex/latex/rigidnotation}
+\preamble
+This is a generated file.
+Copyright (C) 2024 Philippe Nadeau
+This file may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either
+version 1.3c of this license or (at your option) any later
+version. The latest version of this license is in:
+http://www.latex-project.org/lppl.txt
+and version 1.3c or later is part of all distributions of
+LaTeX version 2008-05-04 or later.
+\endpreamble
+\generate{\file{rigidnotation.sty}{\from{rigidnotation.dtx}{package}}}
+\Msg{*********************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the}
+\Msg{* following file into a directory searched by TeX:}
+\Msg{*}
+\Msg{* \space\space rigidnotation.sty}
+\Msg{*}
+\Msg{* To produce the documentation run the file rigidnotation.dtx}
+\Msg{* through LaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing!}
+\Msg{*********************************************************}
+\endbatchfile \ No newline at end of file
diff --git a/macros/latex/contrib/rigidnotation/rigidnotation.pdf b/macros/latex/contrib/rigidnotation/rigidnotation.pdf
new file mode 100644
index 0000000000..e22454cc13
--- /dev/null
+++ b/macros/latex/contrib/rigidnotation/rigidnotation.pdf
Binary files differ
diff --git a/macros/latex/contrib/rpgicons/LICENSE b/macros/latex/contrib/rpgicons/LICENSE
new file mode 100644
index 0000000000..4db9b5af29
--- /dev/null
+++ b/macros/latex/contrib/rpgicons/LICENSE
@@ -0,0 +1,415 @@
+The LaTeX Project Public License
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+LPPL Version 1.3c 2008-05-04
+
+Copyright 1999 2002-2008 LaTeX3 Project
+ Everyone is allowed to distribute verbatim copies of this
+ license document, but modification of it is not allowed.
+
+
+PREAMBLE
+========
+
+The LaTeX Project Public License (LPPL) is the primary license under
+which the LaTeX kernel and the base LaTeX packages are distributed.
+
+You may use this license for any work of which you hold the copyright
+and which you wish to distribute. This license may be particularly
+suitable if your work is TeX-related (such as a LaTeX package), but
+it is written in such a way that you can use it even if your work is
+unrelated to TeX.
+
+The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE',
+below, gives instructions, examples, and recommendations for authors
+who are considering distributing their works under this license.
+
+This license gives conditions under which a work may be distributed
+and modified, as well as conditions under which modified versions of
+that work may be distributed.
+
+We, the LaTeX3 Project, believe that the conditions below give you
+the freedom to make and distribute modified versions of your work
+that conform with whatever technical specifications you wish while
+maintaining the availability, integrity, and reliability of
+that work. If you do not see how to achieve your goal while
+meeting these conditions, then read the document `cfgguide.tex'
+and `modguide.tex' in the base LaTeX distribution for suggestions.
+
+
+DEFINITIONS
+===========
+
+In this license document the following terms are used:
+
+ `Work'
+ Any work being distributed under this License.
+
+ `Derived Work'
+ Any work that under any applicable law is derived from the Work.
+
+ `Modification'
+ Any procedure that produces a Derived Work under any applicable
+ law -- for example, the production of a file containing an
+ original file associated with the Work or a significant portion of
+ such a file, either verbatim or with modifications and/or
+ translated into another language.
+
+ `Modify'
+ To apply any procedure that produces a Derived Work under any
+ applicable law.
+
+ `Distribution'
+ Making copies of the Work available from one person to another, in
+ whole or in part. Distribution includes (but is not limited to)
+ making any electronic components of the Work accessible by
+ file transfer protocols such as FTP or HTTP or by shared file
+ systems such as Sun's Network File System (NFS).
+
+ `Compiled Work'
+ A version of the Work that has been processed into a form where it
+ is directly usable on a computer system. This processing may
+ include using installation facilities provided by the Work,
+ transformations of the Work, copying of components of the Work, or
+ other activities. Note that modification of any installation
+ facilities provided by the Work constitutes modification of the Work.
+
+ `Current Maintainer'
+ A person or persons nominated as such within the Work. If there is
+ no such explicit nomination then it is the `Copyright Holder' under
+ any applicable law.
+
+ `Base Interpreter'
+ A program or process that is normally needed for running or
+ interpreting a part or the whole of the Work.
+
+ A Base Interpreter may depend on external components but these
+ are not considered part of the Base Interpreter provided that each
+ external component clearly identifies itself whenever it is used
+ interactively. Unless explicitly specified when applying the
+ license to the Work, the only applicable Base Interpreter is a
+ `LaTeX-Format' or in the case of files belonging to the
+ `LaTeX-format' a program implementing the `TeX language'.
+
+
+
+CONDITIONS ON DISTRIBUTION AND MODIFICATION
+===========================================
+
+1. Activities other than distribution and/or modification of the Work
+are not covered by this license; they are outside its scope. In
+particular, the act of running the Work is not restricted and no
+requirements are made concerning any offers of support for the Work.
+
+2. You may distribute a complete, unmodified copy of the Work as you
+received it. Distribution of only part of the Work is considered
+modification of the Work, and no right to distribute such a Derived
+Work may be assumed under the terms of this clause.
+
+3. You may distribute a Compiled Work that has been generated from a
+complete, unmodified copy of the Work as distributed under Clause 2
+above, as long as that Compiled Work is distributed in such a way that
+the recipients may install the Compiled Work on their system exactly
+as it would have been installed if they generated a Compiled Work
+directly from the Work.
+
+4. If you are the Current Maintainer of the Work, you may, without
+restriction, modify the Work, thus creating a Derived Work. You may
+also distribute the Derived Work without restriction, including
+Compiled Works generated from the Derived Work. Derived Works
+distributed in this manner by the Current Maintainer are considered to
+be updated versions of the Work.
+
+5. If you are not the Current Maintainer of the Work, you may modify
+your copy of the Work, thus creating a Derived Work based on the Work,
+and compile this Derived Work, thus creating a Compiled Work based on
+the Derived Work.
+
+6. If you are not the Current Maintainer of the Work, you may
+distribute a Derived Work provided the following conditions are met
+for every component of the Work unless that component clearly states
+in the copyright notice that it is exempt from that condition. Only
+the Current Maintainer is allowed to add such statements of exemption
+to a component of the Work.
+
+ a. If a component of this Derived Work can be a direct replacement
+ for a component of the Work when that component is used with the
+ Base Interpreter, then, wherever this component of the Work
+ identifies itself to the user when used interactively with that
+ Base Interpreter, the replacement component of this Derived Work
+ clearly and unambiguously identifies itself as a modified version
+ of this component to the user when used interactively with that
+ Base Interpreter.
+
+ b. Every component of the Derived Work contains prominent notices
+ detailing the nature of the changes to that component, or a
+ prominent reference to another file that is distributed as part
+ of the Derived Work and that contains a complete and accurate log
+ of the changes.
+
+ c. No information in the Derived Work implies that any persons,
+ including (but not limited to) the authors of the original version
+ of the Work, provide any support, including (but not limited to)
+ the reporting and handling of errors, to recipients of the
+ Derived Work unless those persons have stated explicitly that
+ they do provide such support for the Derived Work.
+
+ d. You distribute at least one of the following with the Derived Work:
+
+ 1. A complete, unmodified copy of the Work;
+ if your distribution of a modified component is made by
+ offering access to copy the modified component from a
+ designated place, then offering equivalent access to copy
+ the Work from the same or some similar place meets this
+ condition, even though third parties are not compelled to
+ copy the Work along with the modified component;
+
+ 2. Information that is sufficient to obtain a complete,
+ unmodified copy of the Work.
+
+7. If you are not the Current Maintainer of the Work, you may
+distribute a Compiled Work generated from a Derived Work, as long as
+the Derived Work is distributed to all recipients of the Compiled
+Work, and as long as the conditions of Clause 6, above, are met with
+regard to the Derived Work.
+
+8. The conditions above are not intended to prohibit, and hence do not
+apply to, the modification, by any method, of any component so that it
+becomes identical to an updated version of that component of the Work as
+it is distributed by the Current Maintainer under Clause 4, above.
+
+9. Distribution of the Work or any Derived Work in an alternative
+format, where the Work or that Derived Work (in whole or in part) is
+then produced by applying some process to that format, does not relax or
+nullify any sections of this license as they pertain to the results of
+applying that process.
+
+10. a. A Derived Work may be distributed under a different license
+ provided that license itself honors the conditions listed in
+ Clause 6 above, in regard to the Work, though it does not have
+ to honor the rest of the conditions in this license.
+
+ b. If a Derived Work is distributed under a different license, that
+ Derived Work must provide sufficient documentation as part of
+ itself to allow each recipient of that Derived Work to honor the
+ restrictions in Clause 6 above, concerning changes from the Work.
+
+11. This license places no restrictions on works that are unrelated to
+the Work, nor does this license place any restrictions on aggregating
+such works with the Work by any means.
+
+12. Nothing in this license is intended to, or may be used to, prevent
+complete compliance by all parties with all applicable laws.
+
+
+NO WARRANTY
+===========
+
+There is no warranty for the Work. Except when otherwise stated in
+writing, the Copyright Holder provides the Work `as is', without
+warranty of any kind, either expressed or implied, including, but not
+limited to, the implied warranties of merchantability and fitness for a
+particular purpose. The entire risk as to the quality and performance
+of the Work is with you. Should the Work prove defective, you assume
+the cost of all necessary servicing, repair, or correction.
+
+In no event unless required by applicable law or agreed to in writing
+will The Copyright Holder, or any author named in the components of the
+Work, or any other party who may distribute and/or modify the Work as
+permitted above, be liable to you for damages, including any general,
+special, incidental or consequential damages arising out of any use of
+the Work or out of inability to use the Work (including, but not limited
+to, loss of data, data being rendered inaccurate, or losses sustained by
+anyone as a result of any failure of the Work to operate with any other
+programs), even if the Copyright Holder or said author or said other
+party has been advised of the possibility of such damages.
+
+
+MAINTENANCE OF THE WORK
+=======================
+
+The Work has the status `author-maintained' if the Copyright Holder
+explicitly and prominently states near the primary copyright notice in
+the Work that the Work can only be maintained by the Copyright Holder
+or simply that it is `author-maintained'.
+
+The Work has the status `maintained' if there is a Current Maintainer
+who has indicated in the Work that they are willing to receive error
+reports for the Work (for example, by supplying a valid e-mail
+address). It is not required for the Current Maintainer to acknowledge
+or act upon these error reports.
+
+The Work changes from status `maintained' to `unmaintained' if there
+is no Current Maintainer, or the person stated to be Current
+Maintainer of the work cannot be reached through the indicated means
+of communication for a period of six months, and there are no other
+significant signs of active maintenance.
+
+You can become the Current Maintainer of the Work by agreement with
+any existing Current Maintainer to take over this role.
+
+If the Work is unmaintained, you can become the Current Maintainer of
+the Work through the following steps:
+
+ 1. Make a reasonable attempt to trace the Current Maintainer (and
+ the Copyright Holder, if the two differ) through the means of
+ an Internet or similar search.
+
+ 2. If this search is successful, then enquire whether the Work
+ is still maintained.
+
+ a. If it is being maintained, then ask the Current Maintainer
+ to update their communication data within one month.
+
+ b. If the search is unsuccessful or no action to resume active
+ maintenance is taken by the Current Maintainer, then announce
+ within the pertinent community your intention to take over
+ maintenance. (If the Work is a LaTeX work, this could be
+ done, for example, by posting to comp.text.tex.)
+
+ 3a. If the Current Maintainer is reachable and agrees to pass
+ maintenance of the Work to you, then this takes effect
+ immediately upon announcement.
+
+ b. If the Current Maintainer is not reachable and the Copyright
+ Holder agrees that maintenance of the Work be passed to you,
+ then this takes effect immediately upon announcement.
+
+ 4. If you make an `intention announcement' as described in 2b. above
+ and after three months your intention is challenged neither by
+ the Current Maintainer nor by the Copyright Holder nor by other
+ people, then you may arrange for the Work to be changed so as
+ to name you as the (new) Current Maintainer.
+
+ 5. If the previously unreachable Current Maintainer becomes
+ reachable once more within three months of a change completed
+ under the terms of 3b) or 4), then that Current Maintainer must
+ become or remain the Current Maintainer upon request provided
+ they then update their communication data within one month.
+
+A change in the Current Maintainer does not, of itself, alter the fact
+that the Work is distributed under the LPPL license.
+
+If you become the Current Maintainer of the Work, you should
+immediately provide, within the Work, a prominent and unambiguous
+statement of your status as Current Maintainer. You should also
+announce your new status to the same pertinent community as
+in 2b) above.
+
+
+WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE
+======================================================
+
+This section contains important instructions, examples, and
+recommendations for authors who are considering distributing their
+works under this license. These authors are addressed as `you' in
+this section.
+
+Choosing This License or Another License
+----------------------------------------
+
+If for any part of your work you want or need to use *distribution*
+conditions that differ significantly from those in this license, then
+do not refer to this license anywhere in your work but, instead,
+distribute your work under a different license. You may use the text
+of this license as a model for your own license, but your license
+should not refer to the LPPL or otherwise give the impression that
+your work is distributed under the LPPL.
+
+The document `modguide.tex' in the base LaTeX distribution explains
+the motivation behind the conditions of this license. It explains,
+for example, why distributing LaTeX under the GNU General Public
+License (GPL) was considered inappropriate. Even if your work is
+unrelated to LaTeX, the discussion in `modguide.tex' may still be
+relevant, and authors intending to distribute their works under any
+license are encouraged to read it.
+
+A Recommendation on Modification Without Distribution
+-----------------------------------------------------
+
+It is wise never to modify a component of the Work, even for your own
+personal use, without also meeting the above conditions for
+distributing the modified component. While you might intend that such
+modifications will never be distributed, often this will happen by
+accident -- you may forget that you have modified that component; or
+it may not occur to you when allowing others to access the modified
+version that you are thus distributing it and violating the conditions
+of this license in ways that could have legal implications and, worse,
+cause problems for the community. It is therefore usually in your
+best interest to keep your copy of the Work identical with the public
+one. Many works provide ways to control the behavior of that work
+without altering any of its licensed components.
+
+How to Use This License
+-----------------------
+
+To use this license, place in each of the components of your work both
+an explicit copyright notice including your name and the year the work
+was authored and/or last substantially modified. Include also a
+statement that the distribution and/or modification of that
+component is constrained by the conditions in this license.
+
+Here is an example of such a notice and statement:
+
+ %% pig.dtx
+ %% Copyright 2005 M. Y. Name
+ %
+ % This work may be distributed and/or modified under the
+ % conditions of the LaTeX Project Public License, either version 1.3
+ % of this license or (at your option) any later version.
+ % The latest version of this license is in
+ % http://www.latex-project.org/lppl.txt
+ % and version 1.3 or later is part of all distributions of LaTeX
+ % version 2005/12/01 or later.
+ %
+ % This work has the LPPL maintenance status `maintained'.
+ %
+ % The Current Maintainer of this work is M. Y. Name.
+ %
+ % This work consists of the files pig.dtx and pig.ins
+ % and the derived file pig.sty.
+
+Given such a notice and statement in a file, the conditions
+given in this license document would apply, with the `Work' referring
+to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being
+generated from `pig.dtx' using `pig.ins'), the `Base Interpreter'
+referring to any `LaTeX-Format', and both `Copyright Holder' and
+`Current Maintainer' referring to the person `M. Y. Name'.
+
+If you do not want the Maintenance section of LPPL to apply to your
+Work, change `maintained' above into `author-maintained'.
+However, we recommend that you use `maintained', as the Maintenance
+section was added in order to ensure that your Work remains useful to
+the community even when you can no longer maintain and support it
+yourself.
+
+Derived Works That Are Not Replacements
+---------------------------------------
+
+Several clauses of the LPPL specify means to provide reliability and
+stability for the user community. They therefore concern themselves
+with the case that a Derived Work is intended to be used as a
+(compatible or incompatible) replacement of the original Work. If
+this is not the case (e.g., if a few lines of code are reused for a
+completely different task), then clauses 6b and 6d shall not apply.
+
+
+Important Recommendations
+-------------------------
+
+ Defining What Constitutes the Work
+
+ The LPPL requires that distributions of the Work contain all the
+ files of the Work. It is therefore important that you provide a
+ way for the licensee to determine which files constitute the Work.
+ This could, for example, be achieved by explicitly listing all the
+ files of the Work near the copyright notice of each file or by
+ using a line such as:
+
+ % This work consists of all files listed in manifest.txt.
+
+ in that place. In the absence of an unequivocal list it might be
+ impossible for the licensee to determine what is considered by you
+ to comprise the Work and, in such a case, the licensee would be
+ entitled to make reasonable conjectures as to which files comprise
+ the Work.
diff --git a/macros/latex/contrib/rpgicons/README.md b/macros/latex/contrib/rpgicons/README.md
new file mode 100644
index 0000000000..e889b70b03
--- /dev/null
+++ b/macros/latex/contrib/rpgicons/README.md
@@ -0,0 +1,30 @@
+![Version 1.8.3](https://img.shields.io/badge/version-1.8.3-blue)
+
+<img width="200" alt="rpgicons-example" src="https://github.com/jasperhabicht/rpgicons/assets/6378801/81a1d0aa-7a4f-4f83-bbdc-3bc3332023b2" />
+
+# The `rpgicons` package
+
+This package provides a set of high-quality icons for use in notes for tabletop role-playing games.
+The icons are meant to be used in the body text, but they can also be used in other contexts such
+as graphics or diagrams. The package comes in two variants, one based on the `l3draw` package and one
+based on PGF/Ti*k*Z.
+
+As of version 1.4.0, an `l3draw` variant of the `rpgicons` package exists which is loaded by default.
+The `l3draw` package does not provide the same variety of styles as Ti*k*Z does.
+
+The PGF veriant of the `rpgicons` package provides the icons as Ti*k*Z shapes. Since the commands to
+typeset the icons use `tikzpicture` environments, these commands should not be used inside another
+`tikzpicture`. However, because the package defines the icons as Ti*k*Z shapes, it is possible to
+use the icons in `tikzpicture` environments directly. Apart from that, as of version 1.1.0, the
+package provides a way to define custom commands to typeset the icons as boxed material which is
+safe to use in a tikzpicture context. As of version 1.3.1, the package provides an additional way
+to use the icons as Ti*k*Z pics.
+
+The `rpgicons` package is installed by copying the relevant `.sty` file into the working or `texmf`
+directory. The package is loaded by calling `\usepackage{rpgicons}` in the preamble of the document.
+To load the PGF variant, the package can be loaded with the option `pgf`. The `l3draw` variant is
+loaded per default. The PGF or `l3draw` variants can be loaded directly via
+`\usepackage{rpgicons-pgf}` or`\usepackage{rpgicons-l3}`.
+
+This package including all files is subject to the LPPL 1.3c license.
+Copyright 2024 Jasper Habicht (mail(at)jasperhabicht.de).
diff --git a/macros/latex/contrib/rpgicons/rpgicons-doc.pdf b/macros/latex/contrib/rpgicons/rpgicons-doc.pdf
new file mode 100644
index 0000000000..7fa0c036d7
--- /dev/null
+++ b/macros/latex/contrib/rpgicons/rpgicons-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/rpgicons/rpgicons-doc.tex b/macros/latex/contrib/rpgicons/rpgicons-doc.tex
new file mode 100644
index 0000000000..7eef59a1a4
--- /dev/null
+++ b/macros/latex/contrib/rpgicons/rpgicons-doc.tex
@@ -0,0 +1,868 @@
+% File: rpgicons-doc.tex
+% Copyright 2024 Jasper Habicht (mail(at)jasperhabicht.de).
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License version 1.3c,
+% available at http://www.latex-project.org/lppl/.
+%
+% This file is part of the `rpgicons' package (The Work in LPPL)
+% and all files in that bundle must be distributed together.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+\documentclass[a4paper]{article}
+\def\rpgiconsfileversion{1.8.3}
+\def\rpgiconsfiledate{15 May 2024}
+
+\usepackage[T1]{fontenc}
+\usepackage{Alegreya}
+\usepackage{AlegreyaSans}
+\usepackage{FiraMono}
+
+\usepackage{geometry, longtable, booktabs, tcolorbox, hyperref}
+\geometry{margin=25mm, left=45mm}
+
+\usepackage{fancyhdr}
+\pagestyle{fancy}
+\fancyhf{}
+\renewcommand{\headrulewidth}{0pt}
+\fancyfoot[R]{\thepage}
+
+\linespread{1.1}\selectfont
+\addtolength{\skip\footins}{1em plus 5pt}
+\makeatletter
+\renewcommand*{\thefootnote}{\fnsymbol{footnote}}
+\renewcommand{\@makefntext}[1]{%
+ \noindent\hbox to 0.75em{\normalfont\@thefnmark\hss}~#1%
+}
+\makeatother
+
+\tcbuselibrary{listings}
+\lstdefinestyle{rpgiconsdocmacro}{
+ basicstyle=\small\ttfamily,
+ literate=*{<}{{{\color{black!50}\guilsinglleft}}}1
+ {>}{{{\color{black!50}\guilsinglright}}}1,
+ keywords={},
+ moredelim=[is][\bfseries]{|}{|},
+ moredelim=[is][\color{black!50}]{!}{!},
+}
+\lstdefinestyle{rpgiconsdoccodeexample}{
+ basicstyle=\small\ttfamily,
+ keywords={},
+}
+
+\hypersetup{colorlinks}
+
+\ExplSyntaxOn
+\int_new:N \l_rpgicons_doc_change_int
+\NewDocumentCommand{\changes}{ m m m }{
+ \int_incr:N \l_rpgicons_doc_change_int
+ \prop_new:c { l_rpgicons_doc_change_
+ \int_to_roman:n { \l_rpgicons_doc_change_int } _prop }
+ \prop_put:cnn { l_rpgicons_doc_change_
+ \int_to_roman:n { \l_rpgicons_doc_change_int } _prop } { version } {#1}
+ \prop_put:cnn { l_rpgicons_doc_change_
+ \int_to_roman:n { \l_rpgicons_doc_change_int } _prop } { date } {#2}
+ \prop_put:cnn { l_rpgicons_doc_change_
+ \int_to_roman:n { \l_rpgicons_doc_change_int } _prop } { changes } {#3}
+}
+\NewDocumentCommand{\printchanges}{ }{
+ \section{Changes}
+ \begin{description}
+ \int_step_inline:nn { \l_rpgicons_doc_change_int } {
+ \item[
+ \prop_item:cn { l_rpgicons_doc_change_
+ \int_to_roman:n { ##1 } _prop } { version } ]
+ ( \prop_item:cn { l_rpgicons_doc_change_
+ \int_to_roman:n { ##1 } _prop } { date } ) \\
+ \prop_item:cn { l_rpgicons_doc_change_
+ \int_to_roman:n { ##1 } _prop } { changes }
+ }
+ \end{description}
+}
+
+\tl_new:N \l_rpgicons_doc_doctitle_tl
+\NewExpandableDocumentCommand{\makedoctitle}{ o m o m m o m }{
+ \hypersetup{
+ pdfauthor={#5},
+ pdftitle={\IfValueTF{#1}{#1}{#2}},
+ pdfsubject={\IfValueTF{#3}{#3}{#4}}
+ }
+ \tl_set:Nn \l_rpgicons_doc_doctitle_tl {
+ \group_begin:
+ \tcbset{
+ title ~ style ~ hook/.style={
+ boxrule=2pt,
+ fontupper=\huge\ttfamily
+ }
+ }
+ \setlength{\parindent}{0pt}\sffamily
+ \Huge{\bfseries #2}\par\bigskip
+ \Large #4\par\bigskip
+ \large #5
+ \IfValueT{#6}{
+ \,\footnote{#6}\par\bigskip
+ }
+ #7\par\bigskip
+ \rule{\textwidth}{.08em}
+ \group_end:
+ }
+}
+
+\NewExpandableDocumentCommand{\printdoctitle}{ }{
+ \tl_use:N \l_rpgicons_doc_doctitle_tl
+}
+\ExplSyntaxOff
+
+\tcbset{
+ size=small,
+ arc=2.5pt,
+ outer arc=2.5pt,
+ colframe=black!10,
+ colback=black!10,
+ title style hook/.style={}
+}
+
+\NewTCBListing{macrodef}{ }{
+ listing only,
+ listing style={rpgiconsdocmacro},
+ grow to left by=2cm,
+ boxrule=0pt,
+ after={\par\smallskip\noindent}
+}
+
+\NewTCBListing{codeexample}{ }{
+ text side listing,
+ lefthand width=4.5cm,
+ listing style={rpgiconsdoccodeexample},
+ after={\par\smallskip\noindent}
+}
+
+\NewTotalTCBox{\macro}{ O{} v }{
+ verbatim,
+ size=tight,
+ arc=1pt,
+ outer arc=1pt,
+ top=0.5pt,
+ bottom=0.5pt,
+ left=2pt,
+ right=2pt,
+ boxrule=0pt,
+ colframe=black!10,
+ colback=black!10,
+ fontupper=\small\ttfamily,
+ #1
+}{\vphantom{/g}\lstinline^#2^}
+
+\NewTotalTCBox{\titlemacro}{ s O{} m }{
+ verbatim,
+ size=tight,
+ arc=1pt,
+ outer arc=1pt,
+ top=0.5pt,
+ bottom=0.5pt,
+ left=2pt,
+ right=2pt,
+ boxrule=0pt,
+ colframe=black!10,
+ colback=black!10,
+ fontupper=\small\ttfamily,
+ title style hook,
+ #2
+}{\vphantom{/g}\IfBooleanT{#1}{\textbackslash}#3}
+
+\usepackage{rpgicons-l3}
+\usepackage[pics]{rpgicons-pgf}
+
+\ExplSyntaxOn
+\clist_new:N \l_rpgicons_doc_logo_icons_clist
+\clist_new:N \l_rpgicons_doc_logo_colors_clist
+\cs_generate_variant:Nn { \color_set:nnn } { nne }
+
+\clist_set:Nn \l_rpgicons_doc_logo_colors_clist {
+ 264653 , 287271 , 2a9d8f , e9c46a , f4a261 , e76f51
+}
+\int_step_inline:nn { \clist_count:N \l_rpgicons_doc_logo_colors_clist } {
+ \color_set:nne { rpgiconslogo \int_to_roman:n { #1 } } { HTML } {
+ \clist_item:Nn \l_rpgicons_doc_logo_colors_clist { #1 }
+ }
+}
+\clist_set:Nn \l_rpgicons_doc_logo_icons_clist {
+ twentyside , charisma , armor , buff , ranged , proficiency
+}
+
+\NewDocumentCommand{\rpgiconslogo}{ O{1} }{
+ \draw_begin:
+ \draw_transform_scale:n { #1 }
+ \int_step_inline:nn { \clist_count:N \l_rpgicons_doc_logo_icons_clist } {
+ \hcoffin_set:Nn \l_tmpa_coffin {
+ \draw_suspend_begin:
+ \RPGIconsAbility[negative]{
+ \clist_item:Nn \l_rpgicons_doc_logo_icons_clist { ##1 }
+ }[color=rpgiconslogo \int_to_roman:n { ##1 } ]
+ \draw_suspend_end:
+ }
+ \draw_scope_begin:
+ \draw_transform_shift:n {
+ % fix bug in older l3draw version
+ \cs_if_exist:NTF \__draw_transform_shift:nnnn {
+ \draw_point_polar:nn { 0.33cm } { 60 * ##1 + 10 }
+ } {
+ \draw_point_transform:n { \draw_point_polar:nn { 0.33cm } { 60 * ##1 + 10 } }
+ }
+ }
+ \draw_coffin_use:Nnn \l_tmpa_coffin { hc } { vc }
+ \draw_scope_end:
+ }
+ \draw_end:
+}
+\ExplSyntaxOff
+
+\NewDocumentEnvironment{rpgiconsiconlist}{ }{
+ \begin{longtable}{ @{} p{20em} p{5em} p{\dimexpr\linewidth-25em-4\tabcolsep} @{} }
+ \toprule
+ \textbf{Command} & \textbf{Icon} & \textbf{Shape} \\
+ \midrule\endhead
+}{
+ \bottomrule
+ \end{longtable}
+}
+
+\makedoctitle
+ [The rpgicons package]
+ {The \titlemacro{rpgicons} package}
+ {A set of high-quality icons for use in notes for tabletop role-playing games}
+ {Jasper Habicht}[E-mail: \href{mailto:mail@jasperhabicht.de}{mail@jasperhabicht.de}. I am grateful to Joseph Wright who fixes bugs at an astonishing speed and to all other contributors to this package.]
+ {Version \rpgiconsfileversion, released on \rpgiconsfiledate}
+
+\changes{v1.1.0}{2023/08/15}{First public release.}
+\changes{v1.1.1}{2023/11/15}{Fudge dice icon added.}
+\changes{v1.1.2}{2023/11/16}{Bug fixed that caused wrong spacing when using dice icons without quantifier.}
+\changes{v1.2.0}{2023/11/20}{Corrections in the manual. Icons for six-sided dice with one to nine pips, plus sign and minus sign added.}
+%\changes{v1.2.1}{2023/11/20}{Documentation of lengths for spacing added.}
+%\changes{v1.2.2}{2023/11/21}{Corrections in the manual.}
+\changes{v1.3.0}{2023/11/21}{Option to set background color added. Renamed global option.}
+\changes{v1.3.1}{2024/02/18}{Correction of initializing code. Correction of default value of after sep. Addition of pics.}
+%\changes{v1.3.2}{2024/02/19}{Reformatting of the manual.}
+%\changes{v1.3.4}{2024/02/20}{Minor corrections of some shapes.}
+\changes{v1.4.0}{2024/02/21}{L3 variant added.}
+\changes{v1.4.1}{2024/02/21}{Corrections in L3 variant.}
+\changes{v1.4.2}{2024/02/21}{Alternative set of commands in L3 variant defined.}
+\changes{v1.4.3}{2024/02/22}{Added option to L3 variant to enable upward compatibility.}
+\changes{v1.4.4}{2024/02/24}{Added styles for every instance of command or shape, correction of recent \titlemacro{l3draw} code.}
+\changes{v1.5.0}{2024/02/25}{Alternative set of commands defined, added support of styles in pics.}
+\changes{v1.5.1}{2024/02/28}{Addition of opacity to L3 variant.}
+\changes{v1.5.2}{2024/02/29}{Unification of scaling, minor corrections.}
+\changes{v1.5.3}{2024/03/03}{Optimisation of code in L3 variant.}
+\changes{v1.5.4}{2024/03/06}{Correction of baseline settings in L3 variant, added accessibililty support for L3 variant.}
+%\changes{v1.5.5}{2024/03/07}{Optimsation of accessibililty support for L3 variant.}
+\changes{v1.6.0}{2024/03/15}{Four attribute icons added, minor correction of styles.}
+\changes{v1.6.1}{2024/03/16}{Unified size of negative attribute icon.}
+\changes{v1.7.0}{2024/03/16}{Macro for easy typesetting using roll dice syntax added in L3 variant, compatibility mode updated.}
+\changes{v1.8.0}{2024/03/24}{Unified wrapper to load either package variant.}
+\changes{v1.8.2}{2024/04/28}{Roll dice syntax for PGF variant.}
+\changes{v1.8.3}{2024/05/15}{Minor compatibility fix. Example of how to use pics added to ducumentation.}
+
+\begin{document}
+
+\vspace*{-1cm}
+\noindent\rpgiconslogo[4]
+
+\bigskip
+
+\printdoctitle
+
+\bigskip
+
+\section{Introduction}
+
+The \macro{rpgicons} package provides a set of high-quality icons for use in notes for tabletop role-playing games. The icons are meant to be used in the body text, but they can also be used in other contexts such as graphics or diagrams.
+
+The package comes in two variants, a L3 variant based on the \macro{l3draw} package which is loaded per default and a PGF variant based on PGF/Ti\emph{k}Z.
+
+\section{Loading the package}
+
+To install the package, copy the relevant package files \macro{rpgicons.sty}, \macro{rpgicons-l3.sty} and \macro{rpgicons-pgf.sty} into the working directory or into the \macro{texmf} directory. After the package has been installed, the \macro{rpgicons} package is loaded by calling \macro{\usepackage{rpgicons}} in the preamble of the document.
+
+\begin{macrodef}l3\end{macrodef}
+The L3 variant of the package is loaded by default. To load it explicitly, the package can be loaded using the option \macro{l3}. Alternatively, \macro{\usepackage{rpgicons-l3}} can be called instead.
+
+\begin{macrodef}pgf\end{macrodef}
+To load the PGF variant of the package the package needs to be loaded with the option \macro{pgf}. Alternatively, \macro{\usepackage{rpgicons-pgf}} can be called instead.
+
+\subsection{Dependencies}
+
+The L3 variant of the package loads the \macro{l3draw} package. If the package is loaded with the \macro{opacity} option to enable transparency, the \macro{l3opacity} package is also loaded.
+
+The PGF variant of the package loads the \macro{tikz} package which in turn loads the \macro{xcolor} package. To make use of specific options these packages provide, you need to load the packages with the relevant options beforehand or use, such as \macro{\PassOptionsToPackage{svgnames}{xcolor}}.
+
+\section{Main user commands}
+
+Regardless of the variant of the package, a set of user commands is always available. These are described in the following. Depending on the use of the L3 or the PGF variant, certain specific commands or options are available that are explained in the following sections in further detail.
+
+Because of the way the package defines the icons, every of the below described user commands can actually be used together with every shape. However, the combinations of shapes and commands as described in the following subsections are preferable.
+
+\subsection[Command \textbackslash die]{Command \titlemacro*{die}}
+
+\begin{macrodef}
+|\die|[<style>]{<shape>}[<options>]{<integer>}
+\end{macrodef}
+The command \macro{\die} prints an icon to depict a die with a certain number of sides. Two special icons exist for a two-sided die (which would be equivalent to a coin) and for a hundred-sided die (which typically comes in the shape of a sphere). There is also a special icon for a fudge die.
+
+For the six-sided die, nine additional shapes exists representing the values one to nine as pips. Also, additional shapes exist representing the plus or minus side of a fudge die.
+
+The command takes two mandatory commands, the first of which describes the shape (see the lists below) and the second can take an integer that is placed in front of the shape. For example, \macro{\die{eightside}{2}} results in \die{eightside}{2} (meaning two eight-sided dice are rolled).
+
+The command also takes two optional arguments, the second of which can take additional options to style the icon. The options affect the shape, not the integer when it is printed before the icon. These options differ depending on the package variant. See the relevant sections below.
+
+The first optional argument can take the value \macro{normal} or \macro{large}, \macro{normal} being the default value. With \macro{large} given as argument, the icon is drawn larger and the additional integer is printed inside of the shape instead of before it. As an example, \macro{\die[large]{eightside}{2}} results in \die[large]{eightside}{2}. Note that the integer will always be printed on top of the shape, even if the shape does not have an open center as in the case of the \macro{fudge} shapes or the shapes featuring pips.
+
+\begin{rpgiconsiconlist}
+\macro{\die}
+ & \die{twoside}{} & \macro{twoside} \\
+ & \die{fourside}{} & \macro{fourside} \\
+ & \die{sixside}{} & \macro{sixside} \\
+ & \die{eightside}{} & \macro{eightside} \\
+ & \die{tenside}{} & \macro{tenside} \\
+ & \die{twelveside}{} & \macro{twelveside} \\
+ & \die{twentyside}{} & \macro{twentyside} \\
+ & \die{hundredside}{} & \macro{hundredside} \\
+ & \die{fudge}{} & \macro{fudge} \\
+ & \die{sixside one}{} & \macro{sixside one} \\
+ & \die{sixside two}{} & \macro{sixside two} \\
+ & \die{sixside three}{} & \macro{sixside three} \\
+ & \die{sixside four}{} & \macro{sixside four} \\
+ & \die{sixside five}{} & \macro{sixside five} \\
+ & \die{sixside six}{} & \macro{sixside six} \\
+ & \die{sixside seven}{} & \macro{sixside seven} \\
+ & \die{sixside eight}{} & \macro{sixside eight} \\
+ & \die{sixside nine}{} & \macro{sixside nine} \\
+ & \die{fudge plus}{} & \macro{fudge plus} \\
+ & \die{fudge minus}{} & \macro{fudge minus} \\
+\end{rpgiconsiconlist}
+
+\subsection[Commands \textbackslash ability and \textbackslash saving]{Commands \titlemacro*{ability} and \titlemacro*{saving}}
+
+\begin{macrodef}
+|\ability|[<style>]{<shape>}[<options>]
+\end{macrodef}
+The command \macro{\ability} prints icons depicting an ability of a character. The abilities are represented by animal-like shapes. The relevant shape should be given as mandatory argument to the command. The second optional argument can take additional options to style the icon.
+
+The first optional argument can take the value \macro{positive} or \macro{negative}, \macro{positive} being the default value. With \macro{negative} given as argument, the icon is drawn negative inside a circle. As an example, \macro{\ability[negative]{charisma}} results in \ability[negative]{charisma}.
+
+\begin{macrodef}
+|\saving|[<style>]{<shape>}[<options>]
+\end{macrodef}
+The command \macro{\saving} prints the icons that can be typeset using the \macro{\ability} command inside a small shield. It can take the same values for the mandatory argument as the \macro{\ability} command. The optional argument can take additional options to style the icon.
+
+The first optional argument can take the value \macro{normal} or \macro{empty}, \macro{normal} being the default value. With \macro{empty} given as argument, the icon inside the shield is not printed. In this case, the mandatory argument can be left empty. As an example, \macro{\saving[empty]{}} results in \saving[empty]{}.
+
+\begin{rpgiconsiconlist}
+\macro{\ability}
+ & \ability{strength} & \macro{strength} \\
+ & \ability{dexterity} & \macro{dexterity} \\
+ & \ability{dexterity alt} & \macro{dexterity alt} \\
+ & \ability{constitution} & \macro{constitution} \\
+ & \ability{intelligence} & \macro{intelligence} \\
+ & \ability{wisdom} & \macro{wisdom} \\
+ & \ability{charisma} & \macro{charisma} \\
+ & \ability{resilience} & \macro{resilience} \\
+ & \ability{sanity} & \macro{sanity} \\
+ & \ability{perception} & \macro{perception} \\
+ & \ability{luck} & \macro{luck} \\
+ & \ability{armor} & \macro{armor} \\
+ & \ability{proficiency} & \macro{proficiency} \\
+\midrule
+\macro{\saving}
+ & \saving{strength} & \macro{strength} \\
+ & \saving{dexterity} & \macro{dexterity} \\
+ & \saving{dexterity alt} & \macro{dexterity alt} \\
+ & \saving{constitution} & \macro{constitution} \\
+ & \saving{intelligence} & \macro{intelligence} \\
+ & \saving{wisdom} & \macro{wisdom} \\
+ & \saving{charisma} & \macro{charisma} \\
+ & \saving{resilience} & \macro{resilience} \\
+ & \saving{sanity} & \macro{sanity} \\
+ & \saving{perception} & \macro{perception} \\
+ & \saving{luck} & \macro{luck} \\
+ & \saving{armor} & \macro{armor} \\
+ & \saving{proficiency} & \macro{proficiency} \\
+\end{rpgiconsiconlist}
+
+\subsection[Command \textbackslash spell]{Command \titlemacro*{spell}}
+
+\begin{macrodef}
+|\spell|{<shape>}[<options>]
+\end{macrodef}
+The command \macro{\spell} prints icons depicting the effect of a spell or how it is to be effected. The optional argument can take additional options to style the icon.
+
+\begin{rpgiconsiconlist}
+\macro{\spell}
+ & \spell{linear} & \macro{linear} \\
+ & \spell{conic} & \macro{conic} \\
+ & \spell{quadratic} & \macro{quadratic} \\
+ & \spell{cubic} & \macro{cubic} \\
+ & \spell{spheric} & \macro{spheric} \\
+ & \spell{cylindric} & \macro{cylindric} \\
+ & \spell{verbal} & \macro{verbal} \\
+ & \spell{somatic} & \macro{somatic} \\
+ & \spell{material} & \macro{material} \\
+ & \spell{focus} & \macro{focus} \\
+\end{rpgiconsiconlist}
+
+\subsection[Command \textbackslash spellschool]{Command \titlemacro*{spellschool}}
+
+\begin{macrodef}
+|\spellschool|[<style>]{<shape>}[<options>]
+\end{macrodef}
+The command \macro{\spellschool} prints icons that represent the school a spell belongs to. The second optional argument can take additional options to style the icon.
+
+The first optional argument can take the value \macro{negative} or \macro{positive}, \macro{negative} being the default value. Per default the icon is drawn in white inside a filled escutcheon. With \macro{positive} given as argument, the icon as well as the escutcheon are drawn in the currently selected color. As an example, \macro{\spellschool[positive]{evocation}} results in \spellschool[positive]{evocation}.
+
+\begin{rpgiconsiconlist}
+\macro{\spellschool}
+ & \spellschool{abjuration} & \macro{abjuration} \\
+ & \spellschool{conjuration} & \macro{conjuration} \\
+ & \spellschool{divination} & \macro{divination} \\
+ & \spellschool{enchantment} & \macro{enchantment} \\
+ & \spellschool{evocation} & \macro{evocation} \\
+ & \spellschool{illusion} & \macro{illusion} \\
+ & \spellschool{necromancy} & \macro{necromancy} \\
+ & \spellschool{transmutation} & \macro{transmutation} \\
+\end{rpgiconsiconlist}
+
+\subsection[Commands \textbackslash damage, \textbackslash attack, and \textbackslash condition]{Commands \titlemacro*{damage}, \titlemacro*{attack}, and \titlemacro*{condition}}
+
+\begin{macrodef}
+|\damage|{<shape>}[<options>]
+\end{macrodef}
+The command \macro{\damage} prints icons depicting the damage of an attack. The icon is printed inside a circle. The optional argument can take additional options to style the icon.
+
+\begin{macrodef}
+|\attack|{<shape>}[<options>]
+\end{macrodef}
+The command \macro{\attack} prints icons depicting the kind of an attack. The optional argument can take additional options to style the icon.
+
+\begin{macrodef}
+|\condition|{<shape>}[<options>]
+\end{macrodef}
+The command \macro{\condition} prints icons depicting a condition of a character. The optional argument can take additional options to style the icon.
+
+\begin{rpgiconsiconlist}
+\macro{\damage}
+ & \damage{acid} & \macro{acid} \\
+ & \damage{bludgeoning} & \macro{bludgeoning} \\
+ & \damage{cold} & \macro{cold} \\
+ & \damage{fire} & \macro{fire} \\
+ & \damage{force} & \macro{force} \\
+ & \damage{lightning} & \macro{lightning} \\
+ & \damage{necrotic} & \macro{necrotic} \\
+ & \damage{piercing} & \macro{piercing} \\
+ & \damage{poison} & \macro{poison} \\
+ & \damage{psychic} & \macro{psychic} \\
+ & \damage{radiant} & \macro{radiant} \\
+ & \damage{slashing} & \macro{slashing} \\
+ & \damage{thunder} & \macro{thunder} \\
+ & \damage{healing} & \macro{healing} \\
+\midrule
+\macro{\attack}
+ & \attack{melee} & \macro{melee} \\
+ & \attack{ranged} & \macro{ranged} \\
+ & \attack{magic} & \macro{magic} \\
+ & \attack{singlehanded} & \macro{singlehanded} \\
+ & \attack{doublehanded} & \macro{doublehanded} \\
+\midrule
+\macro{\condition}
+ & \condition{buff} & \macro{buff} \\
+ & \condition{blinded} & \macro{blinded} \\
+ & \condition{charmed} & \macro{charmed} \\
+ & \condition{deafened} & \macro{deafened} \\
+ & \condition{exhausted} & \macro{exhausted} \\
+ & \condition{frightened} & \macro{frightened} \\
+ & \condition{grappled} & \macro{grappled} \\
+ & \condition{incapacitated} & \macro{incapacitated} \\
+ & \condition{invisible} & \macro{invisible} \\
+ & \condition{paralyzed} & \macro{paralyzed} \\
+ & \condition{petrified} & \macro{petrified} \\
+ & \condition{poisoned} & \macro{poisoned} \\
+ & \condition{prone} & \macro{prone} \\
+ & \condition{restrained} & \macro{restrained} \\
+ & \condition{stunned} & \macro{stunned} \\
+ & \condition{unconscious} & \macro{unconscious} \\
+ & \condition{hearing} & \macro{hearing} \\
+ & \condition{seeing} & \macro{seeing} \\
+\end{rpgiconsiconlist}
+
+% l3 variant
+
+\section{Specifics of the L3 package variant}
+
+The L3 variant of the package that uses the \macro{l3draw} package is loaded by default or explicitly by either calling \macro{\usepackage[l3]{rpgicons}} or \macro{\usepackage{rpgicons-l3}} in the preamble of the document after having installed the files \macro{rpgicons.sty} and \macro{rpgicons-l3.sty}. The \macro{l3draw} package is an experimental package that provides only basic drawing functionality. The L3 variant thus only supports a certain set of option for styling the icons.
+
+The L3 variant of the package does not load the \macro{xcolor} package, but makes use of the \macro{l3color} module which uses a similar syntax like the \macro{xcolor} package, but color definitions made using the \macro{l3color} module are not directly usable via commands provided by the \macro{xcolor} package. Therefore, setting a color using the \macro{\color} macro provided by the \macro{xcolor} package won't affect the color of the icons.
+
+\begin{macrodef}compat\end{macrodef}
+The \macro{l3draw} package is experimental and subject to ongoing updates. Loading the L3 variant of the package with the option \macro{compat} will use macro definitions that have been available since the last major TeX Live release as replacement for certain functions that only became available in the most recent versions of the \macro{l3draw} and related packages.
+
+\label{macro:opacity}
+\begin{macrodef}opacity\end{macrodef}
+With the \macro{opacity} option, the L3 variant of the package supports transparency using the functionality of the \macro{l3opacity} package. Since transparency requires the management of certain PDF settings, it is necessary to call \macro{\DocumentMetadata{}} before loading a \macro{\documentclass}. The \macro{l3opacity} package is experimental.
+
+\subsection{Icon commands}
+
+\begin{macrodef}
+|\RPGIconsUseIcon|[<options>][<integer>]{<shape>}
+|\RPGIconsUseIcon*|[<options>][<integer>]{<shape>}
+\end{macrodef}
+\macro{\RPGIconsUseIcon} is the primary command to typeset icons using the L3 variant of the package. The commands \macro{\die}, \macro{\ability}, \macro{\saving}, \macro{\spell}, \macro{\spellschool}, \macro{\damage}, \macro{\attack} and \macro{\condition} are based on this command.
+
+The \macro{\RPGIconsUseIcon} command has a starred version and two optional arguments as well as one mandatory argument. The mandatory argument holds the shape of the icon. The second optional argument can be used to add an integer when used with shapes for dice.
+
+The starred version of the command is used to fill a frame with color instead of drawing its outline. Frames can be put around the shape via the relevant \macro{frame} option.
+
+\begin{macrodef}
+|\RPGIconsDie|[<style>]{<shape>}[<options>]{<integer>}
+|\RPGIconsAbiliy|[<style>]{<shape>}[<options>]
+|\RPGIconsSaving|[<style>]{<shape>}[<options>]
+|\RPGIconsSpell|{<shape>}[<options>]
+|\RPGIconsSpellschool|[<style>]{<shape>}[<options>]
+|\RPGIconsDamage|{<shape>}[<options>]
+|\RPGIconsAttack|{<shape>}[<options>]
+|\RPGIconsCondition|{<shape>}[<options>]
+\end{macrodef}
+The L3 variant of the package defines a set of commands on which the user commands \macro{\die}, \macro{\ability}, \macro{\saving}, \macro{\spell}, \macro{\spellschool}, \macro{\damage}, \macro{\attack} and \macro{\condition} are based. This set of commands can be used in cases where another package defines one of these user commands. These user commands are exact copies of this set of commands.
+
+\subsection{Icon options}
+
+\begin{macrodef}
+frame
+stroke
+fill
+text
+color
+background
+stroke opacity
+fill opacity
+text opacity
+opacity
+background opacity
+line width
+scale
+scale inner
+rotate
+\end{macrodef}
+The \macro{\RPGIconsUseIcon} command and the commands \macro{\die}, \macro{\ability}, \macro{\saving}, \macro{\spell}, \macro{\spellschool}, \macro{\damage}, \macro{\attack} and \macro{\condition} can be used with certain options that each consist of a key-value pair and can be combined. When used with the \macro{\RPGIconsUseIcon} command or the other commands based on this command, these options should be used directly without wrapping them inside the \macro{style} option.
+
+For example, \macro{\die{eightside}[color=blue, line width=0.8pt]{2}} would result in \die{eightside}[color=blue, line width=0.8pt]{2}.
+
+With the \macro{frame} option, one of four different frames can be selected that are drawn around the shape of the icon. The values \macro{ability} and \macro{damage} draw a circle around the shape. The value \macro{saving} draws a rounded shield and the value \macro{spellschool} draws an angular shield around the shape. The commands \macro{\ability}, \macro{\saving}, \macro{\spellschool} and \macro{\damage} make use of the relevant frame.
+
+Some icons can be used with a negative color scheme where the icon is drawn negatively inside a filled shape. Per default, the icons are drawn in white in such cases, but it might be desirable that the icons are in the same color as the background. To this end, the \macro{background} option sets the color of the shape when it is printed over a filled frame which can be achieved by setting the \macro{negative} option for the \macro{\ability} or the \macro{\spellschool} command or using the starred version of the \macro{\RPGIconsUseIcon} command.
+
+The \macro{color} option sets the color of strokes, fills and text in general while the \macro{stroke} option, the \macro{fill} option and the \macro{text} option set the color only for strokes, fills or text respectively. Similarly, the \macro{opacity} macro sets the opacity generally, while the options \macro{stroke opacity}, \macro{fill opacity} and \macro{text opacity} allow for setting the opacity of strokes, fill and text separately. The opacity styles are only available when loading the package with the \macro{opacity} option (see the \hyperref{macro:opacity}{description above}). The \macro{line width} sets the line width for strokes. Using the \macro{scale} and \macro{rotate} options, the shape can be scaled and rotated.
+
+The \macro{scale inner} option can be used to change the scaling of the icon when placed inside a frame when using the \macro{\ability}, \macro{\saving}, \macro{\spellschool} and \macro{\damage} macros. The default value is 0.675.
+
+\begin{macrodef}
+accessible
+accessible = basic
+accessible = full
+accessible = false
+\end{macrodef}
+Using the \macro{accessible} option with no value or the value \macro{basic}, a replacement text to the relevant icon can be added which can be copied to the clipboard. The value \macro{full} additionally places an \macro{\Alt} mark in the PDF which means that the shape of the relevant icon is read by screen readers. For this to work, is necessary to call \macro{\DocumentMetadata{}} before loading a \macro{\documentclass}, preferably with tagging enabled to make use of the \macro{accessible} option. The value \macro{full} can be used to disable the function explicitly. Note that depending on the compiler and PDF viewer, there might be line breaks or no spaces before and after the replacement text.
+
+\begin{macrodef}
+every die
+every ability
+every saving
+every spell
+every spellschool
+every damage
+every attack
+every condition
+every <shape>
+\end{macrodef}
+Styles following the pattern \macro{rpg icons/every} followed by a space and the name of the command or the shape can be used to apply styles to every instance of this command or shape. For example, \macro{\rpgiconsset{every die={color={red}}}} can be used to draw in red all icons created using the \macro{\die} command. Calling \macro{\rpgiconsset{every charisma={color={red}}}} will draw every instance of the \macro{charisma} shape in red.
+
+\subsection{Setting options globally}
+
+\begin{macrodef}
+|\rpgiconsset|
+\end{macrodef}
+Apart from setting the options to the commands directly, it is also possible to set them globally using the \macro{\rpgiconsset} command. Globally set options are overridden by options that are selected directly.
+
+\begin{codeexample}
+\rpgiconsset{
+ color=blue
+}
+
+\ability{charisma}
+\ability{charisma}[color=red]
+\ability{charisma}
+\end{codeexample}
+
+\begin{macrodef}
+before sep
+after sep
+baseline
+\end{macrodef}
+The spacing before and after the icons can be set using the options \macro{before sep} and \macro{after sep}. The option \macro{baseline} can be used to adjust the baseline of the icons. These options can also be applied to the icon commands directly.
+
+\begin{codeexample}
+Roll\die{eightside}{}a die!
+
+\rpgiconsset{
+ before sep={1cm}
+}
+Roll\die{eightside}{}a die!
+\end{codeexample}
+
+\subsection{Roll dice syntax}\label{sec:roll-dice-syntax}
+
+\begin{macrodef}
+|\roll|{<roll syntax>}
+|\RPGIconsRoll|{<roll syntax>}
+\end{macrodef}
+The \macro{\roll} macro can be used to quickly typeset dice rolls with the relevant icons using the established dice rolling syntax. This syntax consists of a sequence of dice and numbers concatenated by mathematical operators (plus, minus or times). Typically, the letter \macro{d} is used to denote a die with a certain number of sides. For example \macro{d6} denotes a six-sided die. A number can be added to specify the number of such dice that are rolled together. The letter to denote the die can be changed using the option \macro{roll syntax}.
+
+For example, \macro{2d6 + 3d4 - 1} means ``roll two six-sided dice and three four-sided dice and subtract one from the result''. The command \macro{\roll{2d6 + 3d4 - 1}} results in \roll{2d6 + 3d4 - 1}.
+
+The die notations \macro{d2}, \macro{d4}, \macro{d6}, \macro{d8}, \macro{d10}, \macro{d12}, \macro{d20} and \macro{d100} are defined. To denote a fudge die, \macro{dF} can be used. To denote that the lowest or highest die should be removed from the result, the letters \macro{L} and \macro{H} can be used. The syntax \macro{2d6 x 2} or \macro{2d6 * 2} can be used to denote several rolls with the same set of dice.
+
+If the \macro{rpgicons} package is to be loaded together with some other package that defines the command \macro{\roll}, the command \macro{\RPGIconsRoll} can be used. This alternative command is an exact copy of the \macro{\roll} command.
+
+\begin{macrodef}
+roll syntax
+\end{macrodef}
+The option \macro{roll syntax} can be used to change the character that denotes a die in the dice rolling syntax. Multiple characters can be given using a comma separated list. The default setting is \macro{d,D} which allows notations such as \macro{2d6} or \macro{2D6}.
+
+With \macro{\rpgiconsset{roll syntax={w,W}}}, for example, notations such as \macro{2w6} or \macro{2W6} could be used.
+
+% PGF variant
+
+\RenewCommandCopy\die\rpgiconsdie
+\RenewCommandCopy\ability\rpgiconsability
+
+\section{Specifics of the PGF package variant}
+
+The PGF variant of the package is loaded by either calling \macro{\usepackage[pgf]{rpgicons}} or \macro{\usepackage{rpgicons-pgf}} in the preamble of the document after having installed the files \macro{rpgicons.sty} and \macro{rpgicons-pgf.sty}.
+
+Since the commands to typeset the icons with the PGF variant of the package use \macro{tikzpicture} environments, these commands should not be used inside another \macro{tikzpicture}. However, because the package defines the icons as Ti\emph{k}Z shapes, it is possible to use the icons in \macro{tikzpicture} environments directly.
+
+Apart from that, the PGF variant of the package provides a way to define custom commands to typeset the icons as boxed material which is safe to use in a \macro{tikzpicture} context. Furthermore, the icons can be used as Ti\emph{k}Z pics.
+
+Once loaded, the PGF variant of the package defines a set of node shapes that can be used inside a \macro{tikzpicture} environment.
+
+\begin{macrodef}pics\end{macrodef}
+The PGF variant of the package provides the option \macro{pics}. If the package is loaded with this option, every icon is also available as Ti\emph{k}Z pic. On the use of pics, see section \ref{sec:pics} below.
+
+\subsection{Icon commands}
+
+\begin{macrodef}
+|\rpgiconsdie|[<style>]{<shape>}[<options>]{<integer>}
+|\rpgiconsability|[<style>]{<shape>}[<options>]
+|\rpgiconssaving|[<style>]{<shape>}[<options>]
+|\rpgiconsspell|{<shape>}[<options>]
+|\rpgiconsspellschool|[<style>]{<shape>}[<options>]
+|\rpgiconsdamage|{<shape>}[<options>]
+|\rpgiconsattack|{<shape>}[<options>]
+|\rpgiconscondition|{<shape>}[<options>]
+\end{macrodef}
+The PGF variant of the package defines a set of commands on which the user commands \macro{\die}, \macro{\ability}, \macro{\saving}, \macro{\spell}, \macro{\spellschool}, \macro{\damage}, \macro{\attack} and \macro{\condition} are based. This set of commands can be used in cases where another package defines one of these user commands. These user commands are exact copies of this set of commands.
+
+\subsection{Icon styles}
+
+Using the PGF variant of the package, all icons can by styled using arbitrary Ti\emph{k}Z styles in general. As an example, \macro{\die{eightside}[blue, thick]{2}} results in \die{eightside}[blue, thick]{2}.
+
+\begin{macrodef}
+!rpg icons/!every die
+!rpg icons/!every ability
+!rpg icons/!every saving
+!rpg icons/!every spell
+!rpg icons/!every spellschool
+!rpg icons/!every damage
+!rpg icons/!every attack
+!rpg icons/!every condition
+!rpg icons/!every <shape>
+\end{macrodef}
+Using Ti\emph{k}Z styles, all instances of a certain command or a certain shape can be styled at once. These styles all follow the pattern \macro{rpg icons/every} followed by a space and the name of the command or the shape. For example, \macro{\tikzset{rpg icons/every die/.append style={red}}} can be used to draw in red all icons created using the \macro{\die} command. To draw every instace of the \macro{charisma} shape in red, \macro{\tikzset{rpg icons/every charisma/.append style={red}}} can be used.
+
+\subsection{Setting styles lobally}
+
+\begin{macrodef}rpg icons\end{macrodef}
+All icons share the Ti\emph{k}Z style \macro{rpg icons} that has no options per default but can be used to style all icons at once. For example, if \macro{\tikzset{rpg icons/.append style={draw=red}}} is placed at the beginning of the document, all icons will be drawn in red. Per default, the icons are drawn in the color of the surrounding text.
+
+Note that it may be necessary to add the Ti\emph{k}Z option \macro{transform shape} when applying transformations to the icons, because the icons are realised as Ti\emph{k}Z nodes which are not affected by some transformations per default.
+
+\begin{macrodef}!rpg icons/!background color\end{macrodef}
+Some icons can be used with a negative color scheme where the icon is drawn negatively inside a filled shape. Per default, the icons are drawn in white in such cases, but it might be desirable that the icons are in the same color as the background. To this end, the color can be changed using the Ti\emph{k}Z option \macro{rpg icons/background color} in the following way:
+
+\begin{codeexample}
+\colorbox{blue!50}{%
+ \ability[negative]{charisma}
+ [scale=2, transform shape]%
+}
+
+\tikzset{
+ rpg icons/background color={blue!50}
+}
+\colorbox{blue!50}{%
+ \ability[negative]{charisma}
+ [scale=2, transform shape]%
+}
+\end{codeexample}
+This feature can, of course, also be used to change the color of the icon independently from the color of the background.
+
+\begin{macrodef}
+!rpg icons/!before sep
+!rpg icons/!after sep
+!rpg icons/!baseline
+\end{macrodef}
+The Ti\emph{k}Z options \macro{rpg icons/before sep} and \macro{rpg icons/after sep} are used to define the width of the space that is added before and after the icons respectively. The default value of both lengths is 0.05\,em. For example, setting the space before icons to 1\,cm can be achieved as follows:
+
+\begin{codeexample}
+Roll\die{eightside}{}a die!
+
+\tikzset{
+ rpg icons/before sep={1cm}
+}
+Roll\die{eightside}{}a die!
+\end{codeexample}
+
+The option \macro{baseline} can be used to adjust the baseline of the icons. A larger value for the baseline will shift the icon downwards relative to the baseline of the surrounding text. The default value of the baseline is \textminus 3.5\,pt.
+
+\subsection{Direct use of shapes}
+
+Because the icons are defined as Ti\emph{k}Z shapes, they can directly be applied to Ti\emph{k}Z nodes. However, the shapes don't have a shape border and no anchors except for the \macro{center} anchor that sits exactly in the center of the shape. Therefore, if nodes with these shapes are connected using edges, the \macro{center} anchor will be used to connect the nodes. If nodes with these shapes are being positioned, only the \macro{center} anchor is available. Text content of these nodes is simply printed on top of the center of the node. Compare the following example.
+
+\begin{codeexample}
+\begin{tikzpicture}
+ \node[eightside, blue, thick]
+ at (0,0) (A) {A};
+ \node[charisma] at (2,0) (B) {B};
+ \draw[red] (A) -- (B);
+\end{tikzpicture}
+\end{codeexample}
+
+\subsection{Boxing of icons}
+
+Because the icons cannot simply be used inside \macro{tikzpicture} environments, the PGF variant of the package provides a workaround to place icons inside of boxes for later use. Icons that are boxed this way can safely used inside \macro{tikzpicture} environments. This might be necessary, if an icon should be used in inline text that sits inside a node.
+
+\begin{macrodef}|\provideprotectedrpgicon|{<command>}[<style>]{<shape>}[<options>]{<box name>}\end{macrodef}
+The command \macro{\provideprotectedrpgicon} creates a box containing the icon that would be created using one of the regular commands this package provides.
+
+\macro{\provideprotectedrpgicon{die}[large]{eightside}[blue, thick]{mybox}}, for example, stores the icon of an eight-sided die with the relevant style and Ti\emph{k}Z options in a new box named \macro{mybox}. Note that no integer can be added to the \macro{die} command in this context.
+
+\provideprotectedrpgicon{die}[large]{eightside}[blue, thick]{mybox}
+
+\begin{macrodef}|\useprotectedrpgicon|{<box name>}\end{macrodef}
+Using the command \macro{\useprotectedrpgicon}, the previously defined box can be used to place the relevant icon. With the above definition, \macro{\useprotectedrpgicon{mybox}} would result in \useprotectedrpgicon{mybox}.
+
+Having created a boxed icon, it is safe to use it, for example, inside a Ti\emph{k}Z node:
+
+\begin{codeexample}
+\begin{tikzpicture}
+ \node[circle, draw, align=center] {
+ \useprotectedrpgicon{mybox} \\
+ Roll a die!
+ };
+\end{tikzpicture}
+\end{codeexample}
+
+
+\subsection{Icons as pics}\label{sec:pics}
+
+If the PGF variant of the package is loaded with the option \macro{pics}, every icon is also available as Ti\emph{k}Z pic. The names of the pic always start with \macro{rpg icons} followed by a space and the name of the relevant icon (see the lists above). For abilities, savings, spellschools and damages, additional pics exists where the name has the suffixes \macro{ability}, \macro{saving}, \macro{spellschool}, and \macro{damage} respectively.
+
+The icon is embedded as a node in the pic which has the name \macro{-node}. Thus, it is possible to name the pic and refer to the node inside. Due to the fact that the icon is a node, the option `transform shape` has to be used if transformations on the pic are to affect the node as well. It is easily possible to apply styles to the node using the Ti\emph{k}Z option \macro{every node} as shown in the following example.
+
+\begin{codeexample}
+\begin{tikzpicture}
+ \pic[
+ transform shape,
+ scale=2,
+ fill=blue,
+ draw=red,
+ every node/.append style={
+ white,
+ thick
+ }
+ ] (p) {rpg icons charisma ability};
+ \draw[red] (p-node) -- +(2,0);
+\end{tikzpicture}
+\end{codeexample}
+
+\begin{macrodef}
+!rpg icons/!create pic from shape
+!rpg icons/!create pic from ability shape
+!rpg icons/!create pic from saving shape
+!rpg icons/!create pic from spellschool shape
+!rpg icons/!create pic from damage shape
+!rpg icons/!create every style
+\end{macrodef}
+The PGF variant of the package defines five Ti\emph{k}Z keys that are used to create pics using the relevant node shapes. Another key is defined to create keys that can be used to style all instances of a command or shape. In normal circumstances, it is not necessary to use these keys. They are mentioned here only for reference.
+
+The following example shows how to create the drawing on the first page of this documentation using Ti\emph{k}Z pics. We need to call \macro{rpg icons/create pic from ability shape} for the shapes \macro{twentyside}, \macro{buff} and \macro{ranged}, because per default no pics are defined for these shapes in combination with ability. Note the use of \macro{\space} to ensure correct use of spaces in the pic name as spaces are gobbled after commands in TeX.
+
+\begin{codeexample}
+\tikzset{
+ rpg icons/%
+ create pic from ability shape/%
+ .list={
+ twentyside,
+ buff,
+ ranged
+ },
+ rpg icons/every ability/.style={
+ ultra thick,
+ draw=white,
+ line join=round,
+ line cap=round
+ }
+}
+
+\begin{tikzpicture}[scale=4]
+ \foreach \x/\c [count=\i] in {
+ twentyside/264653,
+ charisma/287271,
+ armor/2a9d8f,
+ buff/e9c46a,
+ ranged/f4a261,
+ proficiency/e76f51
+ } {
+ \definecolor{color}{HTML}{\c}
+ \pic[fill=color, transform shape]
+ at ({60*\i+10}:{0.33cm})
+ {rpg icons \x\space ability};
+ }
+\end{tikzpicture}
+\end{codeexample}
+
+\subsection{Roll dice syntax}
+
+\begin{macrodef}
+|\roll|{<roll syntax>}
+|\rpgiconsroll|{<roll syntax>}
+\end{macrodef}
+The \macro{\roll} macro can be used to quickly typeset dice rolls with the relevant icons using the established dice rolling syntax. This syntax consists of a sequence of dice and numbers concatenated by mathematical operators (plus, minus or times). Typically, the letter \macro{d} is used to denote a die with a certain number of sides. For example \macro{d6} denotes a six-sided die. A number can be added to specify the number of such dice that are rolled together. The letter to denote the die can be changed using the Ti\emph{k}Z style \macro{rpg icons/roll syntax}.
+
+For example, \macro{2d6 + 3d4 - 1} means ``roll two six-sided dice and three four-sided dice and subtract one from the result''. The command \macro{\roll{2d6 + 3d4 - 1}} results in \roll{2d6 + 3d4 - 1}.
+
+The die notations \macro{d2}, \macro{d4}, \macro{d6}, \macro{d8}, \macro{d10}, \macro{d12}, \macro{d20} and \macro{d100} are defined. To denote a fudge die, \macro{dF} can be used. To denote that the lowest or highest die should be removed from the result, the letters \macro{L} and \macro{H} can be used. The syntax \macro{2d6 x 2} or \macro{2d6 * 2} can be used to denote several rolls with the same set of dice.
+
+If the \macro{rpgicons} package is to be loaded together with some other package that defines the command \macro{\roll}, the command \macro{\rpgiconsroll} can be used. This alternative command is an exact copy of the \macro{\roll} command.
+
+\begin{macrodef}
+!rpg icons/!roll syntax
+\end{macrodef}
+The Ti\emph{k}Z style \macro{rpg icons/roll syntax} can be used to change the character that denotes a die in the dice rolling syntax. Multiple characters can be given using a comma separated list. The default setting is \macro{d,D} which allows notations such as \macro{2d6} or \macro{2D6}.
+
+With \macro{\tikzset{rpg icons/roll syntax={w,W}}}, for example, notations such as \macro{2w6} or \macro{2W6} could be used.
+
+% =====
+
+\printchanges
+
+\end{document}
+
+%% End of file `rpgicons-doc.tex`.
diff --git a/macros/latex/contrib/rpgicons/rpgicons-l3.sty b/macros/latex/contrib/rpgicons/rpgicons-l3.sty
new file mode 100644
index 0000000000..3103502bf3
--- /dev/null
+++ b/macros/latex/contrib/rpgicons/rpgicons-l3.sty
@@ -0,0 +1,2025 @@
+% File: rpgicons-l3.sty
+% Copyright 2024 Jasper Habicht (mail(at)jasperhabicht.de).
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License version 1.3c,
+% available at http://www.latex-project.org/lppl/.
+%
+% This file is part of the `rpgicons' package (The Work in LPPL)
+% and all files in that bundle must be distributed together.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+\ProvidesExplPackage {rpgicons-l3} {2024-05-15} {1.8.3}
+ {rpg Icons Package (l3 Variant)}
+
+\bool_new:N \l__rpgicons_unicode_mode_bool
+\sys_if_engine_luatex:T {
+ \bool_set_true:N \l__rpgicons_unicode_mode_bool
+}
+\sys_if_engine_xetex:T {
+ \bool_set_true:N \l__rpgicons_unicode_mode_bool
+}
+
+\bool_new:N \l__rpgicons_compat_mode_bool
+\bool_new:N \l__rpgicons_use_opacity_bool
+\keys_define:nn { rpgicons / package ~ options } {
+ compat .bool_set:N = \l__rpgicons_compat_mode_bool ,
+ compat .default:n = { true } ,
+ opacity .bool_set:N = \l__rpgicons_use_opacity_bool ,
+ opacity .default:n = { true } ,
+}
+\ProcessKeyOptions [ rpgicons / package ~ options ]
+
+\msg_new:nnn { rpgicons } { documentmetadata-missing } {
+ \msg_warning_text:n { dnicons } \iow_newline:
+ In ~ order ~ to ~ use ~ opacity, ~ \token_to_str:N \DocumentMetadata \c_space_tl must ~ be ~ set.
+}
+\msg_new:nnn { rpgicons } { opacity-option-missing } {
+ \msg_warning_text:n { dnicons } \iow_newline:
+ In ~ order ~ to ~ use ~ opacity, ~ the ~ package ~ must ~ be ~ loaded ~ with ~ the ~ `opacity' ~ option.
+}
+\msg_new:nnn { rpgicons } { l3draw-old } {
+ \msg_warning_text:n { dnicons } \iow_newline:
+ The ~ version ~ of ~ the ~ `l3draw' ~ package ~ is ~ older ~ than ~ 2024-03-14. ~
+ Consider ~ using ~ the ~ `compat' ~ option.
+}
+
+\bool_if:NT \l__rpgicons_use_opacity_bool {
+ \IfDocumentMetadataTF { } {
+ \msg_error:nn { rpgicons } { documentmetadata-missing }
+ }
+ \RequirePackage { l3opacity }
+ \bool_if:NT \l__rpgicons_compat_mode_bool {
+ % l3opacity fix
+ \tl_set:Nn \l__opacity_backend_fill_tl { 1 }
+ \tl_set:Nn \l__opacity_backend_stroke_tl { 1 }
+ }
+}
+
+\RequirePackage { l3draw }
+
+\IfPackageAtLeastTF { l3draw } { 2024/03/14 } { } {
+ \bool_if:NF \l__rpgicons_compat_mode_bool {
+ \msg_warning:nn { rpgicons } { l3draw-old }
+ }
+}
+
+% DICE
+
+\cs_new:Npn \rpgicons_draw_shape_twoside: {
+ \draw_path_ellipse:nnn { 0cm , 0cm } { 0cm , .25cm } { .425cm , 0cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_fourside: {
+ \draw_path_moveto:n { 0cm , .35cm }
+ \draw_path_lineto:n { .433cm , -.4cm }
+ \draw_path_lineto:n { -.433cm , -.4cm }
+ \draw_path_close:
+}
+
+\cs_new:Npn \rpgicons_draw_shape_sixside: {
+ \bool_if:NTF \l__rpgicons_compat_mode_bool {
+ % l3draw rectangle fix
+ \draw_path_moveto:n { -.4cm , -.4cm }
+ \draw_path_lineto:n { -.4cm , .4cm }
+ \draw_path_lineto:n { .4cm , .4cm }
+ \draw_path_lineto:n { .4cm , -.4cm }
+ \draw_path_close:
+ } {
+ \draw_path_rectangle_corners:nn { -.4cm , -.4cm } { .4cm , .4cm }
+ }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_eightside: {
+ \draw_path_moveto:n { 0cm , .5cm }
+ \draw_path_lineto:n { .433cm , .25cm }
+ \draw_path_lineto:n { .433cm , -.25cm }
+ \draw_path_lineto:n { 0cm , -.5cm }
+ \draw_path_lineto:n { -.433cm , -.25cm }
+ \draw_path_lineto:n { -.433cm , .25cm }
+ \draw_path_close:
+ \draw_path_lineto:n { .433cm , -.25cm }
+ \draw_path_lineto:n { -.433cm , -.25cm }
+ \draw_path_close:
+}
+
+\cs_new:Npn \rpgicons_draw_shape_tenside: {
+ \draw_path_moveto:n { 0cm , .5cm }
+ \draw_path_lineto:n { .475cm , .1cm }
+ \draw_path_lineto:n { .475cm , -.1cm }
+ \draw_path_lineto:n { 0cm , -.5cm }
+ \draw_path_lineto:n { -.475cm , -.1cm }
+ \draw_path_lineto:n { -.475cm , .1cm }
+ \draw_path_close:
+ \draw_path_lineto:n { .294cm , -.154cm }
+ \draw_path_lineto:n { 0cm , -.3cm }
+ \draw_path_lineto:n { -.294cm , -.154cm }
+ \draw_path_close:
+ \draw_path_moveto:n { .294cm , -.154cm }
+ \draw_path_lineto:n { .475cm , -.1cm }
+ \draw_path_moveto:n { -.475cm , -.1cm }
+ \draw_path_lineto:n { -.294cm , -.154cm }
+ \draw_path_moveto:n { 0cm , -.5cm }
+ \draw_path_lineto:n { 0cm , -.3cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_twelveside: {
+ \draw_path_moveto:n { 0cm , .5cm }
+ \draw_path_lineto:n { 0.294cm , .405cm }
+ \draw_path_lineto:n { .475cm , .173cm }
+ \draw_path_lineto:n { .475cm , -.173cm }
+ \draw_path_lineto:n { .294cm , -.405cm }
+ \draw_path_lineto:n { 0cm , -.5cm }
+ \draw_path_lineto:n { -.294cm , -.405cm }
+ \draw_path_lineto:n { -.475cm , -.173cm }
+ \draw_path_lineto:n { -.475cm , .173cm }
+ \draw_path_lineto:n { -.294cm , .405cm }
+ \draw_path_close:
+ \draw_path_moveto:n { 0cm , .349cm }
+ \draw_path_lineto:n { .332cm , .108cm }
+ \draw_path_lineto:n { .205cm , -.282cm }
+ \draw_path_lineto:n { -.205cm , -.282cm }
+ \draw_path_lineto:n { -.332cm , .108cm }
+ \draw_path_close:
+ \draw_path_lineto:n { 0cm , .5cm }
+ \draw_path_moveto:n { .475cm , .173cm }
+ \draw_path_lineto:n { .332cm , .108cm }
+ \draw_path_moveto:n { .294cm , -.405cm }
+ \draw_path_lineto:n { .205cm , -.282cm }
+ \draw_path_moveto:n { -.294cm , -.405cm }
+ \draw_path_lineto:n { -.205cm , -.282cm }
+ \draw_path_moveto:n { -.475cm , .173cm }
+ \draw_path_lineto:n { -.332cm , .108cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_twentyside: {
+ \draw_path_moveto:n { 0cm , .5cm }
+ \draw_path_lineto:n { .454cm , .262cm }
+ \draw_path_lineto:n { .454cm , -.262cm }
+ \draw_path_lineto:n { 0cm , -.5cm }
+ \draw_path_lineto:n { -.454cm , -.262cm }
+ \draw_path_lineto:n { -.454cm , .262cm }
+ \draw_path_close:
+ \draw_path_moveto:n { 0cm , .292cm }
+ \draw_path_lineto:n { .253cm , -.146cm }
+ \draw_path_lineto:n { -.253cm , -.146cm }
+ \draw_path_close:
+ \draw_path_lineto:n { .454cm , .262cm }
+ \draw_path_lineto:n { .253cm , -.146cm }
+ \draw_path_lineto:n { 0cm , -.5cm }
+ \draw_path_lineto:n { -.253cm , -.146cm }
+ \draw_path_lineto:n { -.454cm , .262cm }
+ \draw_path_close:
+ \draw_path_lineto:n { 0cm , .5cm }
+ \draw_path_moveto:n { .454cm , -.262cm }
+ \draw_path_lineto:n { .253cm , -.146cm }
+ \draw_path_moveto:n { -.454cm , -.262cm }
+ \draw_path_lineto:n { -.253cm , -.146cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_hundredside: {
+ \draw_path_circle:nn { 0cm, 0cm } { .425cm }
+ \draw_path_moveto:n { .425cm , 0cm }
+ \draw_path_arc:nnnn { 180 } { 50 } { -.425cm } { -.2cm }
+ \draw_path_moveto:n { 0cm , -.425cm }
+ \draw_path_arc:nnnn { 270 } { 140 } { -.2cm } { .425cm }
+}
+
+\clist_new:N \l_rpgnicons_pips_clist
+\fp_new:N \l_rpgnicons_pips_coordx_fp
+\fp_new:N \l_rpgnicons_pips_coordy_fp
+\cs_new:Npn \rpgicons_draw_shape_sixside_pips:n #1 {
+ \str_case:nn {#1} {
+ { one } { \clist_set:Nn \l_rpgnicons_pips_clist {
+ { 0cm , 0cm }
+ } }
+ { two } { \clist_set:Nn \l_rpgnicons_pips_clist {
+ { -.2cm , .2cm } , { .2cm , -.2cm }
+ } }
+ { three } { \clist_set:Nn \l_rpgnicons_pips_clist {
+ { -.2cm , .2cm } , { 0cm , 0cm } , { .2cm , -.2cm }
+ } }
+ { four } { \clist_set:Nn \l_rpgnicons_pips_clist {
+ { -.2cm , .2cm } , { .2cm , .2cm } ,
+ { -.2cm , -.2cm } , { .2cm , -.2cm }
+ } }
+ { five } { \clist_set:Nn \l_rpgnicons_pips_clist {
+ { -.2cm , .2cm } , { .2cm , .2cm } ,
+ { 0cm , 0cm } ,
+ { -.2cm , -.2cm } , { .2cm , -.2cm }
+ } }
+ { six } { \clist_set:Nn \l_rpgnicons_pips_clist {
+ { -.2cm , .2cm } , { .2cm , .2cm } ,
+ { -.2cm , 0cm } , { .2cm , 0cm } ,
+ { -.2cm , -.2cm } , { .2cm , -.2cm }
+ } }
+ { seven } { \clist_set:Nn \l_rpgnicons_pips_clist {
+ { -.2cm , .2cm } , { .2cm , .2cm } ,
+ { -.2cm , 0cm } , { 0cm , 0cm } , { .2cm , 0cm } ,
+ { -.2cm , -.2cm } , { .2cm , -.2cm }
+ } }
+ { eight } { \clist_set:Nn \l_rpgnicons_pips_clist {
+ { -.2cm , .2cm } , { 0cm , .2cm } , { .2cm , .2cm } ,
+ { -.2cm , 0cm } , { .2cm , 0cm } ,
+ { -.2cm , -.2cm } , { 0cm , -.2cm } , { .2cm , -.2cm }
+ } }
+ { nine } { \clist_set:Nn \l_rpgnicons_pips_clist {
+ { -.2cm , .2cm } , { 0cm , .2cm } , { .2cm , .2cm } ,
+ { -.2cm , 0cm } , { 0cm , 0cm } , { .2cm , 0cm } ,
+ { -.2cm , -.2cm } , { 0cm , -.2cm } , { .2cm , -.2cm }
+ } }
+ }
+ \clist_map_inline:Nn \l_rpgnicons_pips_clist {
+ \fp_set:Nn \l_rpgnicons_pips_coordx_fp { \clist_item:nn {##1} { 1 } }
+ \fp_set:Nn \l_rpgnicons_pips_coordy_fp { \clist_item:nn {##1} { 2 } }
+ \draw_path_circle:nn { \l_rpgnicons_pips_coordx_fp , \l_rpgnicons_pips_coordy_fp } { 2pt }
+ }
+ \draw_path_use_clear:n { fill }
+ \rpgicons_draw_shape_sixside:
+}
+
+\cs_new:Npn \rpgicons_draw_shape_fudge: {
+ \rpgicons_draw_shape_sixside:
+ \draw_path_moveto:n { -.15cm , .1cm }
+ \draw_path_lineto:n { .15cm , .1cm }
+ \draw_path_moveto:n { 0cm , .25cm }
+ \draw_path_lineto:n { 0cm , -.05cm }
+ \draw_path_moveto:n { -.15cm , -.2cm }
+ \draw_path_lineto:n { .15cm , -.2cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_fudge_plus: {
+ \rpgicons_draw_shape_sixside:
+ \draw_path_moveto:n { 0cm , .15cm }
+ \draw_path_lineto:n { 0cm , -.15cm }
+ \draw_path_moveto:n { -.15cm , 0cm }
+ \draw_path_lineto:n { .15cm , 0cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_fudge_minus: {
+ \rpgicons_draw_shape_sixside:
+ \draw_path_moveto:n { -.15cm , 0cm }
+ \draw_path_lineto:n { .15cm , 0cm }
+}
+
+% ABILITIES
+
+\cs_new:Npn \rpgicons_draw_shape_strength: {
+ \draw_path_moveto:n { ( 0cm , -.075cm ) + ( \draw_point_polar:nn { .425cm } { 90 } ) }
+ \draw_path_arc:nnn { 90 } { 60 } { .425cm }
+ \draw_path_arc:nnn { 200 } { -40 } { .1cm }
+ \draw_path_moveto:n { ( 0cm , -.075cm ) + ( \draw_point_polar:nn { .425cm } { 45 } ) }
+ \draw_path_arc:nnn { 45 } { -20 } { .425cm }
+ \draw_path_arc:nnn { -50 } { -80 } { .35cm }
+ \draw_path_moveto:n { ( 0cm , -.075cm ) + ( \draw_point_polar:nn { .425cm } { 90 } ) }
+ \draw_path_arc:nnn { 90 } { 120 } { .425cm }
+ \draw_path_arc:nnn { -20 } { 220 } { .1cm }
+ \draw_path_moveto:n { ( 0cm , -.075cm ) + ( \draw_point_polar:nn { .425cm } { 135 } ) }
+ \draw_path_arc:nnn { 135 } { 200 } { .425cm }
+ \draw_path_arc:nnn { 230 } { 260 } { .35cm }
+ \draw_path_moveto:n { -.2cm , -.025cm }
+ \draw_path_lineto:n { -.1cm , -.05cm }
+ \draw_path_lineto:n { -.125cm , -.325cm }
+ \draw_path_arc:nnnn { 180 } { 360 } { .125cm } { .1cm }
+ \draw_path_lineto:n { .1cm , -.05cm }
+ \draw_path_lineto:n { .2cm , -.025cm }
+ \draw_path_moveto:n { 0cm , -.3cm }
+ \draw_path_arc:nnn { 90 } { 70 } { .1cm }
+ \draw_path_moveto:n { 0cm , -.3cm }
+ \draw_path_arc:nnn { 90 } { 110 } { .1cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_constitution: {
+ \draw_path_moveto:n { 0cm , .25cm }
+ \draw_path_lineto:n { .125cm , .25cm }
+ \draw_path_arc:nnn { -90 } { -30 } { .325cm }
+ \draw_path_arc:nnn { 0 } { -80 } { .3cm }
+ \draw_path_moveto:n { 0cm , .25cm }
+ \draw_path_lineto:n { -.125cm , .25cm }
+ \draw_path_arc:nnn { 270 } { 210 } { .325cm }
+ \draw_path_arc:nnn { 180 } { 260 } { .3cm }
+ \draw_path_moveto:n { .325cm , .1cm }
+ \draw_path_lineto:n { .425cm , .075cm }
+ \draw_path_arc:nnnn { 0 } { -90 } { .175cm } { .1cm }
+ \draw_path_lineto:n { .2cm , -.15cm }
+ \draw_path_moveto:n { -.325cm , .1cm }
+ \draw_path_lineto:n { -.425cm , .075cm }
+ \draw_path_arc:nnnn { 180 } { 270 } { .175cm } { .1cm }
+ \draw_path_lineto:n { -.2cm , -.15cm }
+ \draw_path_moveto:n { -.15cm , -.225cm }
+ \draw_path_arc:nnn { 90 } { 270 } { .1cm }
+ \draw_path_lineto:n { .15cm , -.425cm }
+ \draw_path_arc:nnn { -90 } { 90 } { .1cm }
+ \draw_path_moveto:n { -.125cm , -.35cm }
+ \draw_path_arc:nnn { -90 } { 0 } { .05cm }
+ \draw_path_moveto:n { .125cm , -.35cm }
+ \draw_path_arc:nnn { 90 } { 0 } { -.05cm }
+ \draw_path_moveto:n { -.125cm , -.025cm }
+ \draw_path_lineto:n { -.075cm , -.05cm }
+ \draw_path_lineto:n { -.075cm , -.1cm }
+ \draw_path_moveto:n { .125cm , -.025cm }
+ \draw_path_lineto:n { .075cm , -.05cm }
+ \draw_path_lineto:n { .075cm , -.1cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_wisdom: {
+ \draw_path_moveto:n { 0cm , .175cm }
+ \draw_path_arc:nnn { 60 } { 90 } { .425cm }
+ \draw_path_arc:nnn { 270 } { 240 } { .425cm }
+ \draw_path_moveto:n { 0cm , .175cm }
+ \draw_path_arc:nnn { 120 } { 90 } { .425cm }
+ \draw_path_arc:nnn { 270 } { 300 } { .425cm }
+ \draw_path_circle:nn { -.175cm , 0cm } { .075cm }
+ \draw_path_circle:nn { .175cm , 0cm } { .075cm }
+ \draw_path_moveto:n { .075cm , -.125cm }
+ \draw_path_lineto:n { 0cm , -.325cm }
+ \draw_path_lineto:n { -.075cm , -.125cm }
+ \draw_path_moveto:n { -.375cm , .125cm }
+ \draw_path_arc:nnn { 150 } { 270 } { .25cm }
+ \draw_path_moveto:n { .375cm , .125cm }
+ \draw_path_arc:nnn { 30 } { -90 } { .25cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_charisma: {
+ \draw_path_moveto:n { 0cm , .15cm }
+ \draw_path_arc:nnnn { 270 } { 190 } { .15cm } { .1cm }
+ \draw_path_arc:nnnn { 10 } { 90 } { .175cm } { .225cm }
+ \draw_path_arc:nnnn { 40 } { 0 } { .125cm } { .175cm }
+ \draw_path_moveto:n { 0cm , .15cm }
+ \draw_path_arc:nnnn { 270 } { 350 } { .15cm } { .1cm }
+ \draw_path_arc:nnnn { 170 } { 90 } { .175cm } { .225cm }
+ \draw_path_arc:nnnn { 140 } { 180 } { .125cm } { .175cm }
+ \draw_path_moveto:n { -.2cm , .125cm }
+ \draw_path_arc:nnnn { 0 } { 90 } { .175cm } { .1cm }
+ \draw_path_arc:nnnn { 180 } { 270 } { .15cm } { .2cm }
+ \draw_path_lineto:n { -.25cm , -.05cm }
+ \draw_path_arc:nnn { 40 } { 0 } { .45cm }
+ \draw_path_lineto:n { 0cm , -.425cm }
+ \draw_path_moveto:n { .2cm , .125cm }
+ \draw_path_arc:nnnn { 180 } { 90 } { .175cm } { .1cm }
+ \draw_path_arc:nnnn { 0 } { -90 } { .15cm } { .2cm }
+ \draw_path_lineto:n { .25cm , -.05cm }
+ \draw_path_arc:nnn { 140 } { 180 } { .45cm }
+ \draw_path_lineto:n { 0cm , -.425cm }
+ \draw_path_moveto:n { -.05cm , -.275cm }
+ \draw_path_arc:nnn { -30 } { 60 } { .05cm }
+ \draw_path_moveto:n { .05cm , -.275cm }
+ \draw_path_arc:nnn { 210 } { 120 } { .05cm }
+ \draw_path_moveto:n { -.125cm , -.05cm }
+ \draw_path_lineto:n { -.05cm , -.075cm }
+ \draw_path_moveto:n { .125cm , -.05cm }
+ \draw_path_lineto:n { .05cm , -.075cm }
+ \draw_path_moveto:n { -.35cm , -.05cm }
+ \draw_path_lineto:n { -.425cm , -.05cm }
+ \draw_path_arc:nnn { 30 } { -30 } { .15cm }
+ \draw_path_arc:nnn { 80 } { 10 } { .15cm }
+ \draw_path_lineto:n { -.25cm , -.275cm }
+ \draw_path_moveto:n { .35cm , -.05cm }
+ \draw_path_lineto:n { .425cm , -.05cm }
+ \draw_path_arc:nnn { 150 } { 210 } { .15cm }
+ \draw_path_arc:nnn { 100 } { 170 } { .15cm }
+ \draw_path_lineto:n { .25cm , -.275cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_dexterity: {
+ \draw_path_moveto:n { ( 0cm , -.075cm ) + ( \draw_point_polar:nn { .425cm } { 90 } ) }
+ \draw_path_arc:nnn { 90 } { 65 } { .425cm }
+ \draw_path_arc:nnnn { 200 } { 90 } { .1cm } { .075cm }
+ \draw_path_arc:nnnn { 90 } { -30 } { .1cm } { .075cm }
+ \draw_path_moveto:n { ( 0cm , -.075cm ) + ( \draw_point_polar:nn { .425cm } { 45 } ) }
+ \draw_path_arc:nnnn { 45 } { -20 } { .425cm } { .35cm }
+ \draw_path_arc:nnn { 110 } { 160 } { .175cm }
+ \draw_path_moveto:n { ( 0cm , -.075cm ) + ( \draw_point_polar:nn { .425cm } { 90 } ) }
+ \draw_path_arc:nnn { 90 } { 115 } { .425cm }
+ \draw_path_arc:nnnn { -20 } { 90 } { .1cm } { .075cm }
+ \draw_path_arc:nnnn { 90 } { 220 } { .1cm } { .075cm }
+ \draw_path_moveto:n { ( 0cm , -.075cm ) + ( \draw_point_polar:nn { .425cm } { 135 } ) }
+ \draw_path_arc:nnnn { 135 } { 200 } { .425cm } { .35cm }
+ \draw_path_arc:nnn { 70 } { 20 } { .175cm }
+ \draw_path_moveto:n { -.075cm , -.175cm }
+ \draw_path_arc:nnnn { 180 } { 360 } { .075cm } { .05cm }
+ \draw_path_moveto:n { 0cm , -.225cm }
+ \draw_path_lineto:n { 0cm , -.25cm }
+ \draw_path_moveto:n { -.2cm , .025cm }
+ \draw_path_lineto:n { -.075cm , 0cm }
+ \draw_path_lineto:n { -.125cm , -.075cm }
+ \draw_path_moveto:n { .125cm , -.075cm }
+ \draw_path_lineto:n { .075cm , 0cm }
+ \draw_path_lineto:n { .2cm , .025cm }
+ \draw_path_moveto:n { 0cm , -.25cm }
+ \draw_path_arc:nnnn { 360 } { 140 } { .1cm } { .075cm }
+ \draw_path_moveto:n { 0cm , -.25cm }
+ \draw_path_arc:nnnn { 180 } { 400 } { .1cm } { .075cm }
+ \draw_path_moveto:n { -.1cm , -.325cm }
+ \draw_path_lineto:n { -.1cm , -.375cm }
+ \draw_path_arc:nnnn { 180 } { 360 } { .1cm } { .05cm }
+ \draw_path_lineto:n { .1cm , -.325cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_dexterity_alt: {
+ \draw_path_moveto:n { ( 0cm , -.15cm ) + ( \draw_point_polar:nn { .425cm } { 90 } ) }
+ \draw_path_arc:nnn { 90 } { 75 } { .425cm }
+ \draw_path_moveto:n { ( 0cm , -.15cm ) + ( \draw_point_polar:nn { .425cm } { 90 } ) }
+ \draw_path_arc:nnn { 90 } { 105 } { .425cm }
+ \draw_path_moveto:n { .125cm , .175cm }
+ \draw_path_lineto:n { .375cm , .425cm }
+ \draw_path_arc:nnn { 30 } { -20 } { .25cm }
+ \draw_path_lineto:n { ( 0cm , -.1cm ) + ( \draw_point_polar:nn { .425cm } { 30 } ) }
+ \draw_path_arc:nnnn { 30 } { -45 } { .425cm } { .35cm }
+ \draw_path_moveto:n { -.125cm , .175cm }
+ \draw_path_lineto:n { -.375cm , .425cm }
+ \draw_path_arc:nnn { 150 } { 200 } { .25cm }
+ \draw_path_lineto:n { ( 0cm , -.1cm ) + ( \draw_point_polar:nn { .425cm } { 150 } ) }
+ \draw_path_arc:nnnn { 150 } { 225 } { .425cm } { .35cm }
+ \draw_path_moveto:n { .075cm , -.075cm }
+ \draw_path_arc:nnnn { 170 } { 90 } { .15cm } { .05cm }
+ \draw_path_moveto:n { -.075cm , -.075cm }
+ \draw_path_arc:nnnn { 10 } { 90 } { .15cm } { .05cm }
+ \draw_path_moveto:n { 0cm , -.275cm }
+ \draw_path_arc:nnnn { 0 } { 90 } { .075cm } { .05cm }
+ \draw_path_moveto:n { 0cm , -.275cm }
+ \draw_path_arc:nnnn { 180 } { 90 } { .075cm } { .05cm }
+ \draw_path_moveto:n { 0cm , -.275cm }
+ \draw_path_arc:nnnn { 360 } { 180 } { .1cm } { .075cm }
+ \draw_path_moveto:n { 0cm , -.275cm }
+ \draw_path_arc:nnnn { 180 } { 360 } { .1cm } { .075cm }
+ \draw_path_moveto:n { -.1cm , -.35cm }
+ \draw_path_lineto:n { -.1cm , -.375cm }
+ \draw_path_arc:nnnn { 180 } { 360 } { .1cm } { .05cm }
+ \draw_path_lineto:n { .1cm , -.35cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_intelligence: {
+ \draw_path_moveto:n { ( 0cm , -.2cm ) + ( \draw_point_polar:nn { .425cm } { 90 } ) }
+ \draw_path_arc:nnn { 90 } { 60 } { .25cm }
+ \draw_path_lineto:n { ( 0cm , -.1cm ) + ( \draw_point_polar:nn { .6cm } { 60 } ) }
+ \draw_path_arc:nnn { 40 } { -2.5 } { .425cm }
+ \draw_path_moveto:n { ( 0cm , -.2cm ) + ( \draw_point_polar:nn { .425cm } { 90 } ) }
+ \draw_path_arc:nnn { 90 } { 120 } { .25cm }
+ \draw_path_lineto:n { ( 0cm , -.1cm ) + ( \draw_point_polar:nn { .6cm } { 120 } ) }
+ \draw_path_arc:nnn { 140 } { 182.5 } { .425cm }
+ \draw_path_moveto:n { ( 0cm , -.2cm ) + ( \draw_point_polar:nn { .425cm } { 45 } ) }
+ \draw_path_arc:nnn { 45 } { 0 } { .425cm }
+ \draw_path_lineto:n { .2cm , -.275cm }
+ \draw_path_moveto:n { ( 0cm , -.2cm ) + ( \draw_point_polar:nn { .425cm } { 135 } ) }
+ \draw_path_arc:nnn { 135 } { 180 } { .425cm }
+ \draw_path_lineto:n { -.2cm , -.275cm }
+ \draw_path_moveto:n { -.2cm , -.075cm }
+ \draw_path_lineto:n { -.1cm , -.1cm }
+ \draw_path_lineto:n { -.075cm , -.375cm }
+ \draw_path_arc:nnnn { 180 } { 360 } { .075cm } { .05cm }
+ \draw_path_lineto:n { .1cm , -.1cm }
+ \draw_path_lineto:n { .2cm , -.075cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_resilience: {
+ \draw_path_moveto:n { ( -.425cm , -.475cm ) + ( \draw_point_polar:nn { .5cm } { 65 } ) }
+ \draw_path_arc:nnn { 65 } { 90 } { .5cm }
+ \draw_path_lineto:n { ( 0cm , -.075cm ) + ( \draw_point_polar:nn { .55cm } { 135 } ) }
+ \draw_path_arc:nnn { 135 } { 45 } { .55cm }
+ \draw_path_lineto:n { .425cm , .025cm }
+ \draw_path_arc:nnn { 90 } { 115 } { .5cm }
+ \draw_path_moveto:n { .2cm , .3cm }
+ \draw_path_lineto:n { .125cm , .275cm }
+ \draw_path_lineto:n { .2cm , .15cm }
+ \draw_path_moveto:n { .125cm , .075cm }
+ \draw_path_lineto:n { .05cm , .05cm }
+ \draw_path_moveto:n { .15cm , -.1cm }
+ \draw_path_arc:nnn { 200 } { 230 } { .4cm }
+ \draw_path_moveto:n { -.2cm , .3cm }
+ \draw_path_lineto:n { -.125cm , .275cm }
+ \draw_path_lineto:n { -.2cm , .15cm }
+ \draw_path_moveto:n { -.125cm , .075cm }
+ \draw_path_lineto:n { -.05cm , .05cm }
+ \draw_path_moveto:n { -.15cm , -.1cm }
+ \draw_path_arc:nnn { 340 } { 310 } { .4cm }
+ \draw_path_moveto:n { -.065cm , -.075cm }
+ \draw_path_lineto:n { -.045cm , -.425cm }
+ \draw_path_lineto:n { .045cm , -.425cm }
+ \draw_path_lineto:n { .065cm , -.075cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_sanity: {
+ \draw_path_moveto:n { ( -.125cm + .175cm * sind(30) , .425cm - .175cm * cosd(30) ) +
+ ( \draw_point_polar:nn { .175cm } { 210 } ) }
+ \draw_path_arc:nnn { 210 } { 120 } { .175cm }
+ \draw_path_lineto:n { \draw_point_polar:nn { .25cm } { 110 } }
+ \draw_path_arc:nnn { 110 } { 70 } { .25cm }
+ \draw_path_lineto:n { .125cm , .425cm }
+ \draw_path_arc:nnn { 420 } { 330 } { .175cm }
+ \draw_path_moveto:n { .25cm , .1cm }
+ \draw_path_arc:nnn { 390 } { 305 } { .15cm }
+ \draw_path_moveto:n { -.25cm , .1cm }
+ \draw_path_arc:nnn { 150 } { 235 } { .15cm }
+ \draw_path_moveto:n { -.15cm , .075cm }
+ \draw_path_lineto:n { -.1cm , .05cm }
+ \draw_path_lineto:n { -.1cm , .025cm }
+ \draw_path_moveto:n { .15cm , .075cm }
+ \draw_path_lineto:n { .1cm , .05cm }
+ \draw_path_lineto:n { .1cm , .025cm }
+ \draw_path_moveto:n { ( -.55cm , -.35cm ) + ( \draw_point_polar:nnn { .125cm } { .075cm} { 135 } ) +
+ ( \draw_point_polar:nn { .55cm } { 20 } ) }
+ \draw_path_arc:nnn { 380 } { 360 } { .55cm }
+ \draw_path_arc:nnnn { 135 } { 405 } { .125cm } { .075cm }
+ \draw_path_arc:nnn { 180 } { 160 } { .55cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_perception: {
+ \draw_path_moveto:n { ( 0cm , .35cm ) + ( \draw_point_polar:nn { .125cm } { 150 } ) }
+ \draw_path_arc:nnn { 150 } { 390 } { .125cm }
+ \draw_path_moveto:n { -.3cm , .425cm }
+ \draw_path_arc:nnnn { 180 } { 360 } { .3cm } { .2cm }
+ \draw_path_moveto:n { ( 0cm , .425cm ) + ( \draw_point_polar:nnn { .3cm } { .2cm } { 330 } ) }
+ \draw_path_arc:nnnn { 270 } { 350 } { .15cm } { .1cm }
+ \draw_path_moveto:n { ( 0cm , .425cm ) + ( \draw_point_polar:nnn { .3cm } { .2cm } { 210 } ) }
+ \draw_path_arc:nnnn { 270 } { 190 } { .15cm } { .1cm }
+ \draw_path_moveto:n { -.2cm , .15cm }
+ \draw_path_lineto:n { -.375cm , .125cm }
+ \draw_path_arc:nnn { 210 } { 250 } { .225cm }
+ \draw_path_moveto:n { .2cm , .15cm }
+ \draw_path_lineto:n { .375cm , .125cm }
+ \draw_path_arc:nnn { 330 } { 290 } { .225cm }
+ \draw_path_moveto:n { -.15cm , 0cm }
+ \draw_path_lineto:n { -.075cm , -.025cm }
+ \draw_path_lineto:n { -.075cm , -.05cm }
+ \draw_path_moveto:n { .15cm , 0cm }
+ \draw_path_lineto:n { .075cm , -.025cm }
+ \draw_path_lineto:n { .075cm , -.05cm }
+ \draw_path_moveto:n { ( -.075cm , ( -.35cm + .075cm * ( 2 + sqrt(3) ) ) ) +
+ ( \draw_point_polar:nnn { .1cm } { .075cm } { 195 } ) }
+ \draw_path_lineto:n { ( 0cm , -.35cm ) + ( \draw_point_polar:nnn { .1cm } { .075cm } { 195 } ) }
+ \draw_path_arc:nnnn { 195 } { 345 } { .1cm } { .075cm }
+ \draw_path_lineto:n { ( .075cm , ( -.35cm + .075cm * ( 2 + sqrt(3) ) ) ) +
+ ( \draw_point_polar:nnn { .1cm } { .075cm } { 345 } ) }
+ \draw_path_moveto:n { .025cm , -.325cm }
+ \draw_path_arc:nnn { 0 } { 180 } { .025cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_luck: {
+ \draw_path_moveto:n { .1cm , .15cm }
+ \draw_path_lineto:n { .1cm , -.05cm }
+ \draw_path_arc:nnn { -75 } { -15 } { .425cm }
+ \draw_path_arc:nnn { 40 } { 85 } { .425cm }
+ \draw_path_moveto:n { -.1cm , .15cm }
+ \draw_path_lineto:n { -.1cm , -.05cm }
+ \draw_path_arc:nnn { -105 } { -165 } { .425cm }
+ \draw_path_arc:nnn { 140 } { 95 } { .425cm }
+ \draw_path_moveto:n { ( 0cm , -.05cm ) + ( \draw_point_polar:nn { .425cm } { 15 } ) }
+ \draw_path_arc:nnnn { 15 } { -55 } { .425cm } { .3cm }
+ \draw_path_moveto:n { ( 0cm , -.05cm ) + ( \draw_point_polar:nn { .425cm } { 165 } ) }
+ \draw_path_arc:nnnn { 165 } { 235 } { .425cm } { .3cm }
+ \draw_path_moveto:n { 0cm , -.175cm }
+ \draw_path_arc:nnnn { 90 } { 250 } { .175cm } { .125cm }
+ \draw_path_lineto:n { -.05cm , -.325cm }
+ \draw_path_moveto:n { 0cm , -.175cm }
+ \draw_path_arc:nnnn { 90 } { -70 } { .175cm } { .125cm }
+ \draw_path_lineto:n { .05cm , -.325cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_armor: {
+ \draw_path_moveto:n { -.25cm , -.425cm }
+ \draw_path_lineto:n { .25cm , -.425cm }
+ \draw_path_lineto:n { .2cm , -.225cm }
+ \draw_path_lineto:n { .25cm , .125cm }
+ \draw_path_lineto:n { .425cm , .125cm }
+ \draw_path_arc:nnn { 0 } { 90 } { .3cm }
+ \draw_path_lineto:n { .125cm , .35cm }
+ \draw_path_arc:nnn { 360 } { 180 } { .125cm }
+ \draw_path_lineto:n { -.125cm , .425cm }
+ \draw_path_arc:nnn { 90 } { 180 } { .3cm }
+ \draw_path_lineto:n { -.25cm , .125cm }
+ \draw_path_lineto:n { -.2cm , -.225cm }
+ \draw_path_close:
+ \draw_path_moveto:n { .125cm , .425cm }
+ \draw_path_lineto:n { .125cm , .25cm }
+ \draw_path_arc:nnn { 180 } { 270 } { .125cm }
+ \draw_path_moveto:n { -.125cm , .425cm }
+ \draw_path_lineto:n { -.125cm , .25cm }
+ \draw_path_arc:nnn { 360 } { 270 } { .125cm }
+ \draw_path_moveto:n { 0cm , .225cm }
+ \draw_path_lineto:n { 0cm , -.275cm }
+ \draw_path_moveto:n { -.2cm , -.225cm }
+ \draw_path_lineto:n { 0cm , -.275cm }
+ \draw_path_lineto:n { .2cm , -.225cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_proficiency: {
+ \draw_path_moveto:n { \draw_point_polar:nn { .35cm} { 90 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .15cm} { 126 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .35cm} { 162 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .15cm} { 198 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .35cm} { 234 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .15cm} { 270 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .35cm} { 306 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .15cm} { 342 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .35cm} { 18 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .15cm} { 54 } }
+ \draw_path_close:
+ \draw_path_moveto:n { \draw_point_polar:nn { .35cm} { 270 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .425cm} { 270 } }
+ \draw_path_moveto:n { \draw_point_polar:nn { .35cm} { 342 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .425cm} { 342 } }
+ \draw_path_moveto:n { \draw_point_polar:nn { .35cm} { 54 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .425cm} { 54 } }
+ \draw_path_moveto:n { \draw_point_polar:nn { .35cm } { 126 }}
+ \draw_path_lineto:n { \draw_point_polar:nn { .425cm} { 126 } }
+ \draw_path_moveto:n { \draw_point_polar:nn { .35cm} { 198 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .425cm} { 198 } }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_linear: {
+ \draw_path_circle:nn { -.4cm , 0cm } { 2pt }
+ \draw_path_use_clear:n { fill }
+ \draw_path_moveto:n { -.4cm , 0cm }
+ \draw_path_lineto:n { .4cm , 0cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_conic: {
+ \draw_path_circle:nn { -.425cm , 0cm } { 2pt }
+ \draw_path_use_clear:n { fill }
+ \draw_path_ellipse:nnn { .2125cm , 0cm } { .2cm , 0cm } { 0cm , .425cm }
+ \draw_path_moveto:n { .2125cm - .2cm * sin( asin( .2cm / .6375cm ) ) ,
+ -.425cm * cos( asin( .2cm / ( .6375cm ) ) ) }
+ \draw_path_lineto:n { -.425cm , 0cm }
+ \draw_path_lineto:n { .2125cm - .2cm * sin( asin( .2cm / .6375cm ) ) ,
+ .425cm * cos( asin( .2cm / ( .6375cm ) ) ) }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_quadratic: {
+ \draw_path_circle:nn { 0cm , 0cm } { 2pt }
+ \draw_path_use_clear:n { fill }
+ \bool_if:NTF \l__rpgicons_compat_mode_bool {
+ % l3draw rectangle fix
+ \draw_path_moveto:n { -.4cm , -.4cm }
+ \draw_path_lineto:n { -.4cm , .4cm }
+ \draw_path_lineto:n { .4cm , .4cm }
+ \draw_path_lineto:n { .4cm , -.4cm }
+ \draw_path_close:
+ } {
+ \draw_path_rectangle_corners:nn { -.4cm , -.4cm } { .4cm , .4cm }
+ }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_cubic: {
+ \draw_path_circle:nn { .1125cm , -.1125cm } { 2pt }
+ \draw_path_use_clear:n { fill }
+ \draw_path_moveto:n { -.425cm , .425cm }
+ \draw_path_lineto:n { -.425cm , -.2cm }
+ \draw_path_lineto:n { -.2cm , -.425cm }
+ \draw_path_lineto:n { .425cm , -.425cm }
+ \draw_path_lineto:n { .425cm , .2cm }
+ \draw_path_lineto:n { .2cm , .425cm }
+ \draw_path_close:
+ \draw_path_lineto:n { -.2cm , .2cm }
+ \draw_path_lineto:n { -.2cm , -.425cm }
+ \draw_path_moveto:n { -.2cm , .2cm }
+ \draw_path_lineto:n { .425cm , .2cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_spheric: {
+ \draw_path_circle:nn { 0cm , 0cm } { 2pt }
+ \draw_path_use_clear:n { fill }
+ \draw_path_circle:nn { 0cm , 0cm } { .425cm }
+ \draw_path_moveto:n { .425cm , 0cm }
+ \draw_path_arc:nnnn { 180 } { 50 } { -.425cm } { -.2cm }
+ \draw_path_moveto:n { 0cm , -.425cm }
+ \draw_path_arc:nnnn { 270 } { 140 } { -.2cm } { .425cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_cylindric: {
+ \draw_path_circle:nn { 0cm , -.2125cm } { 2pt }
+ \draw_path_use_clear:n { fill }
+ \draw_path_ellipse:nnn { 0cm , .2125cm } { 0cm , .2cm } { .425cm , 0cm }
+ \draw_path_moveto:n { -.425cm , .2125cm }
+ \draw_path_lineto:n { -.425cm , -.2125cm }
+ \draw_path_arc:nnnn { 0 } { 180 } { -.425cm } { -.2cm }
+ \draw_path_lineto:n { .425cm , .2125cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_verbal: {
+ \draw_path_moveto:n { -.35cm , 0cm }
+ \draw_path_arc:nnn { 180 } { -115 } { .35cm }
+ \draw_path_lineto:n { -.4cm , -.4cm }
+ \draw_path_lineto:n { \draw_point_polar:nn { .35cm } { 215 } }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_somatic: {
+ \draw_path_moveto:n { -.425cm , 0cm }
+ \draw_path_arc:nnnn { 0 } { 270 } { -.425cm } { -.2cm }
+ \draw_path_moveto:n { 0cm , -.425cm }
+ \draw_path_arc:nnnn { 90 } { 360 } { -.2cm } { -.425cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_material: {
+ \draw_path_moveto:n { -.4cm , .2cm }
+ \draw_path_lineto:n { -.4cm , -.2cm }
+ \draw_path_lineto:n { 0cm , -.4cm }
+ \draw_path_lineto:n { .4cm , -.2cm }
+ \draw_path_lineto:n { .4cm , .2cm }
+ \draw_path_lineto:n { 0cm , .4cm }
+ \draw_path_close:
+ \draw_path_lineto:n { 0cm , 0cm }
+ \draw_path_lineto:n { .4cm , .2cm }
+ \draw_path_moveto:n { 0cm , 0cm }
+ \draw_path_lineto:n { 0cm , -.4cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_focus: {
+ \draw_path_circle:nn { 0cm , 0cm } { .35cm }
+ \draw_path_moveto:n { -.15cm , 0 }
+ \draw_path_lineto:n { -.425cm , 0 }
+ \draw_path_moveto:n { .15cm , 0 }
+ \draw_path_lineto:n { .425cm , 0 }
+ \draw_path_moveto:n { 0cm , -.15cm }
+ \draw_path_lineto:n { 0cm , -.425cm }
+ \draw_path_moveto:n { 0cm , .15cm }
+ \draw_path_lineto:n { 0cm , .425cm }
+}
+
+% SPELLSCHOOLS
+
+\cs_new:Npn \rpgicons_draw_shape_abjuration: {
+ \draw_path_moveto:n { 0cm , .025cm }
+ \draw_path_arc:nnnn { 270 } { 390 } { .275cm } { .175cm }
+ \draw_path_arc:nnn { 210 } { 120 } { .095cm }
+ \draw_path_moveto:n { 0cm , .025cm }
+ \draw_path_arc:nnnn { 270 } { 150 } { .275cm } { .175cm }
+ \draw_path_arc:nnn { -30 } { 60 } { .095cm }
+ \draw_path_moveto:n { 0cm , .25cm }
+ \draw_path_lineto:n { 0cm , -.425cm }
+ \draw_path_moveto:n { -.25cm , -.125cm }
+ \draw_path_lineto:n { .25cm , -.125cm }
+ \draw_path_moveto:n { -.25cm , -.3cm }
+ \draw_path_lineto:n { .25cm , -.3cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_conjuration: {
+ \draw_path_moveto:n { -.425cm , .425cm }
+ \draw_path_lineto:n { 0cm , -.425cm }
+ \draw_path_lineto:n { .425cm , .425cm }
+ \draw_path_moveto:n { -.225cm , .05cm }
+ \draw_path_lineto:n { .225cm , .05cm }
+ \draw_path_moveto:n { 0cm , -.15cm }
+ \draw_path_arc:nnn { 110 } { 70 } { .5cm }
+ \draw_path_moveto:n { 0cm , -.15cm }
+ \draw_path_arc:nnn { 110 } { 70 } { -.5cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_divination: {
+ \draw_path_moveto:n { -.35cm , -.175cm }
+ \draw_path_arc:nnnn { 180 } { 0 } { .15cm } { -.25cm }
+ \draw_path_arc:nnn { 180 } { 90 } { .4cm }
+ \draw_path_moveto:n { -.05cm , -.175cm }
+ \draw_path_lineto:n { -.05cm , 0cm }
+ \draw_path_arc:nnn { 180 } { 90 } { .4cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_enchantment: {
+ \draw_path_moveto:n { -.2cm , -.425cm }
+ \draw_path_lineto:n { -.2cm , .425cm }
+ \draw_path_moveto:n { -.425cm , .175cm }
+ \draw_path_lineto:n { .025cm , .175cm }
+ \draw_path_moveto:n { -.2cm , -.225cm }
+ \draw_path_arc:nnnn { 180 } { 0 } { .1cm } { .2cm }
+ \draw_path_arc:nnnn { 180 } { 0 } { .1cm } { .2cm }
+ \draw_path_arc:nnnn { 180 } { 0 } { .1cm } { -.2cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_evocation: {
+ \draw_path_ellipse:nnn { 0cm , 0cm } { .325cm , 0cm } { 0cm , .225cm }
+ \draw_path_moveto:n { 0cm , .425cm }
+ \draw_path_lineto:n { 0cm , -.425cm }
+ \draw_path_moveto:n { -.425cm , 0cm }
+ \draw_path_lineto:n { .425cm , 0cm }
+ \draw_path_moveto:n { \draw_point_polar:nnn { 30 } { .325cm } { .225cm } }
+ \draw_path_lineto:n { \draw_point_polar:nn { 30 } { .4cm} }
+ \draw_path_moveto:n { \draw_point_polar:nnn { 60 } { .325cm } { .225cm } }
+ \draw_path_lineto:n { \draw_point_polar:nn { 60 } { .4cm} }
+ \draw_path_moveto:n { \draw_point_polar:nnn { 120 } { .325cm } { .225cm } }
+ \draw_path_lineto:n { \draw_point_polar:nn { 120 } { .4cm} }
+ \draw_path_moveto:n { \draw_point_polar:nnn { 150 } { .325cm } { .225cm } }
+ \draw_path_lineto:n { \draw_point_polar:nn { 150 } { .4cm} }
+ \draw_path_moveto:n { \draw_point_polar:nnn { 210 } { .325cm } { .225cm } }
+ \draw_path_lineto:n { \draw_point_polar:nn { 210 } { .4cm} }
+ \draw_path_moveto:n { \draw_point_polar:nnn { 240 } { .325cm } { .225cm } }
+ \draw_path_lineto:n { \draw_point_polar:nn { 240 } { .4cm} }
+ \draw_path_moveto:n { \draw_point_polar:nnn { 300 } { .325cm } { .225cm } }
+ \draw_path_lineto:n { \draw_point_polar:nn { 300 } { .4cm} }
+ \draw_path_moveto:n { \draw_point_polar:nnn { 330 } { .325cm } { .225cm } }
+ \draw_path_lineto:n { \draw_point_polar:nn { 330 } { .4cm} }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_illusion: {
+ \draw_path_moveto:n { 0cm , .225cm }
+ \draw_path_arc:nnn { 90 } { 30 } { .45cm }
+ \draw_path_arc:nnn { 330 } { 210 } { .45cm }
+ \draw_path_arc:nnn { 150 } { 90 } { .45cm }
+ \draw_path_moveto:n { ( 0cm , .225cm ) + ( \draw_point_polar:nn { .45cm } { 270 } ) }
+ \draw_path_lineto:n { \draw_point_polar:nn { .35cm} { 270 } }
+ \draw_path_moveto:n { ( 0cm , .225cm ) + ( \draw_point_polar:nn { .45cm } { 240 } ) }
+ \draw_path_lineto:n { \draw_point_polar:nn { .4cm} { 225 } }
+ \draw_path_moveto:n { ( 0cm , .225cm ) + ( \draw_point_polar:nn { .45cm } { 300 } ) }
+ \draw_path_lineto:n { \draw_point_polar:nn { .4cm} { 315 } }
+ \draw_path_moveto:n { 0cm , .225cm }
+ \draw_path_circle:nn { 0cm , .075cm } { .15cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_necromancy: {
+ \draw_path_moveto:n { \draw_point_polar:nn { .25cm} { 210 } }
+ \draw_path_arc:nnn { 210 } { -30 } { .25cm }
+ \draw_path_arc:nnn { 150 } { 390 } { .1cm }
+ \draw_path_moveto:n { \draw_point_polar:nn { .25cm} { 210 } }
+ \draw_path_arc:nnn { 390 } { 150 } { .1cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_transmutation: {
+ \draw_path_moveto:n { -.25cm , .35cm }
+ \draw_path_lineto:n { -.25cm , -.35cm }
+ \draw_path_moveto:n { 0cm , .35cm }
+ \draw_path_lineto:n { 0cm , -.35cm }
+ \draw_path_moveto:n { -.425cm , .35cm }
+ \draw_path_lineto:n { .15cm , .35cm }
+ \draw_path_arc:nnn { 90 } { -45 } { .1cm }
+ \draw_path_arc:nnn { 135 } { 360 } { .1cm }
+}
+
+% DAMAGES
+
+\cs_new:Npn \rpgicons_draw_shape_acid: {
+ \draw_path_moveto:n { ( -.175cm , .05cm ) + ( \draw_point_polar:nn { .175 } { -20 } ) }
+ \draw_path_arc:nnn { -20 } { 200 } { -.175cm }
+ \draw_path_lineto:n { 0cm , .425cm }
+ \draw_path_close:
+ \draw_path_moveto:n {
+ \draw_point_intersect_lines:nnnn
+ { ( 0cm , -.175cm ) + ( \draw_point_polar:nn { -.25cm } { 20 } ) }
+ { ( 0cm , -.175cm ) + ( \draw_point_polar:nn { -.25cm } { 160 } ) }
+ { -.425cm , -.425cm } { -.425cm , .425cm }
+ }
+ \draw_path_lineto:n { ( 0cm , -.175cm ) + ( \draw_point_polar:nn { -.25cm } { 20 } ) }
+ \draw_path_arc:nnn { 20 } { 160 } { -.25cm }
+ \draw_path_lineto:n {
+ \draw_point_intersect_lines:nnnn
+ { ( 0cm , -.175cm ) + ( \draw_point_polar:nn { -.25cm } { 20 } ) }
+ { ( 0cm , -.175cm ) + ( \draw_point_polar:nn { -.25cm } { 160 } ) }
+ { .425cm , -.425cm } { .425cm , .425cm }
+ }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_bludgeoning: {
+ \draw_path_moveto:n { -.2cm , .225cm }
+ \draw_path_lineto:n { 0cm , .425cm }
+ \draw_path_lineto:n { .425cm , 0cm }
+ \draw_path_lineto:n { .225cm , -.2cm }
+ \draw_path_close:
+ \draw_path_moveto:n { .05cm , -.025cm }
+ \draw_path_lineto:n { -.35cm , -.425cm }
+ \draw_path_lineto:n { -.425cm , -.35cm }
+ \draw_path_lineto:n { -.025cm , .05cm }
+ \draw_path_moveto:n { .2375cm , .1875cm }
+ \draw_path_arc:nnn { 135 } { 315 } { -.05cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_cold: {
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 90 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .425cm} { 270 } }
+ \draw_path_moveto:n { \draw_point_polar:nn { .35cm} { 110 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .25cm} { 90 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .35cm} { 70 } }
+ \draw_path_moveto:n { \draw_point_polar:nn { .35cm} { 250 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .25cm} { 270 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .35cm} { 290 } }
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 30 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .425cm} { 210 } }
+ \draw_path_moveto:n { \draw_point_polar:nn { .35cm} { 50 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .25cm} { 30 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .35cm} { 10 } }
+ \draw_path_moveto:n { \draw_point_polar:nn { .35cm} { 190 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .25cm} { 210 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .35cm} { 230 } }
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 150 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .425cm} { 330 } }
+ \draw_path_moveto:n { \draw_point_polar:nn { .35cm} { 130 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .25cm} { 150 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .35cm} { 170 } }
+ \draw_path_moveto:n { \draw_point_polar:nn { .35cm} { 310 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .25cm} { 330 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .35cm} { 350 } }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_fire: {
+ \draw_path_moveto:n { .15cm , -.425cm }
+ \draw_path_arc:nnnn { -60 } { 0 } { .45cm } { .375cm }
+ \draw_path_curveto:nnn { .375cm , .15cm } { .15cm , .375cm } { -.05cm , .425cm }
+ \draw_path_moveto:n { -.15cm , -.425cm }
+ \draw_path_arc:nnnn { 240 } { 135 } { .45cm } { .35cm }
+ \draw_path_curveto:nnn { -.15cm , .2cm } { 0cm , .25cm } { -.05cm , .425cm }
+ \draw_path_moveto:n { .075cm , -.3cm }
+ \draw_path_curveto:nnn { .2cm , -.2cm } { .2cm , -.05cm } { .05cm , .1cm }
+ \draw_path_moveto:n { -.075cm , -.3cm }
+ \draw_path_arc:nnnn { 220 } { 150 } { .35cm } { .2cm }
+ \draw_path_curveto:nnn { 0cm , -.2cm } { .05cm , -.1cm } { .05cm , .1cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_force: {
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 90 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .15cm} { 120 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .425cm} { 150 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .15cm} { 180 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .425cm} { 210 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .15cm} { 240 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .425cm} { 270 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .15cm} { 300 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .425cm} { 330 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .15cm} { 0 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .425cm} { 30 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .15cm} { 60 } }
+ \draw_path_close:
+}
+
+\cs_new:Npn \rpgicons_draw_shape_lightning: {
+ \draw_path_moveto:n { 0cm , .425cm }
+ \draw_path_lineto:n { -.25cm , -.15cm }
+ \draw_path_lineto:n { .25cm , .15cm }
+ \draw_path_lineto:n { 0cm , -.425cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_necrotic: {
+ \draw_path_moveto:n { -.35cm , -.425cm }
+ \draw_path_lineto:n { -.35cm , .075cm }
+ \draw_path_arc:nnn { 180 } { 0 } { .35cm }
+ \draw_path_lineto:n { .35cm , -.425cm }
+ \draw_path_close:
+ \draw_path_moveto:n { 0cm , -.2cm }
+ \draw_path_lineto:n { 0cm , .25cm }
+ \draw_path_moveto:n { -.15cm , .1cm }
+ \draw_path_lineto:n { .15cm , .1cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_piercing: {
+ \draw_path_moveto:n { -.425cm , .075cm }
+ \draw_path_lineto:n { .3cm , .075cm }
+ \draw_path_lineto:n { .425cm , 0cm }
+ \draw_path_lineto:n { .3cm , -.075cm }
+ \draw_path_lineto:n { -.425cm , -.075cm }
+ \draw_path_moveto:n { .25cm , .2cm }
+ \draw_path_lineto:n { -.05cm , .35cm }
+ \draw_path_moveto:n { .25cm , -.2cm }
+ \draw_path_lineto:n { -.05cm , -.35cm }
+ \draw_path_moveto:n { .425cm , .15cm }
+ \draw_path_lineto:n { .25cm , .425cm }
+ \draw_path_moveto:n { .425cm , -.15cm }
+ \draw_path_lineto:n { .25cm , -.425cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_poison: {
+ \draw_path_moveto:n { ( 0cm , .175cm ) + ( \draw_point_polar:nn { .25cm } { -40 } ) }
+ \draw_path_arc:nnn { -40 } { 220 } { .25cm }
+ \draw_path_lineto:n { -.15cm , -.1cm }
+ \draw_path_lineto:n { .15cm , -.1cm }
+ \draw_path_close:
+ \draw_path_circle:nn { -.1cm , .15cm } { .05cm }
+ \draw_path_circle:nn { .1cm , .15cm } { .05cm }
+ \draw_path_moveto:n { .425cm , -.2cm }
+ \draw_path_lineto:n { -.425cm , -.425cm }
+ \draw_path_moveto:n { -.425cm , -.2cm }
+ \draw_path_lineto:n { .425cm , -.425cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_psychic: {
+ \draw_path_moveto:n { .075cm , .4cm }
+ \draw_path_arc:nnn { 90 } { 180 } { .425cm }
+ \draw_path_arc:nnn { 180 } { 270 } { .375cm }
+ \draw_path_arc:nnn { 270 } { 360 } { .325cm }
+ \draw_path_arc:nnn { 0 } { 90 } { .275cm }
+ \draw_path_arc:nnn { 90 } { 180 } { .225cm }
+ \draw_path_arc:nnn { 180 } { 270 } { .175cm }
+ \draw_path_arc:nnn { 270 } { 360 } { .125cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_radiant: {
+ \draw_path_circle:nn { 0cm , 0cm } { .225cm }
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 15 } }
+ \draw_path_arc:nnn { 15 } { 45 } { .425cm }
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 75 } }
+ \draw_path_arc:nnn { 75 } { 105 } { .425cm }
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 135 } }
+ \draw_path_arc:nnn { 135 } { 165 } { .425cm }
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 195 } }
+ \draw_path_arc:nnn { 195 } { 225 } { .425cm }
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 255 } }
+ \draw_path_arc:nnn { 255 } { 285 } { .425cm }
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 315 } }
+ \draw_path_arc:nnn { 315 } { 345 } { .425cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_slashing: {
+ \draw_path_moveto:n { -.15cm , .225cm }
+ \draw_path_lineto:n { -.275cm , .35cm }
+ \draw_path_arc:nnn { 0 } { 240 } { .075cm }
+ \draw_path_lineto:n { -.35cm , .275cm }
+ \draw_path_lineto:n { -.225cm , .15cm }
+ \draw_path_lineto:n { -.425cm , -.05cm }
+ \draw_path_lineto:n { -.35cm , -.125cm }
+ \draw_path_lineto:n { .125cm , .35cm }
+ \draw_path_lineto:n { .05cm , .425cm }
+ \draw_path_close:
+ \draw_path_moveto:n { -.2cm , .025cm }
+ \draw_path_lineto:n { .225cm , -.425cm }
+ \draw_path_lineto:n { .425cm , -.425cm }
+ \draw_path_lineto:n { .425cm , -.225cm }
+ \draw_path_lineto:n { -.025cm , .2cm }
+ \draw_path_moveto:n { .325cm , -.325cm }
+ \draw_path_lineto:n { 0cm , 0cm }
+ \draw_path_moveto:n { .425cm , .3cm }
+ \draw_path_lineto:n { .425cm , 0cm }
+ \draw_path_moveto:n { .275cm , .425cm }
+ \draw_path_lineto:n { .275cm , .1cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_thunder: {
+ \draw_path_moveto:n { .225cm , -.075cm }
+ \draw_path_arc:nnn { -90 } { 120 } { .2cm }
+ \draw_path_arc:nnn { 30 } { 180 } { .225cm }
+ \draw_path_lineto:n { -.3cm , .125cm + cosd( 30 ) * .2cm - sind( 30 ) * .225cm }
+ \draw_path_arc:nnn { 90 } { 180 } { .125cm }
+ \draw_path_lineto:n { -.425cm , .05cm }
+ \draw_path_arc:nnn { 180 } { 270 } { .125cm }
+ \draw_path_close:
+ \draw_path_moveto:n { -.1cm , -.225cm }
+ \draw_path_arc:nnn { 240 } { 300 } { .3cm }
+ \draw_path_moveto:n { -.2cm , -.35cm }
+ \draw_path_arc:nnn { 240 } { 300 } { .5cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_healing: {
+ \draw_path_moveto:n { 0cm , .125cm }
+ \draw_path_arc:nnn { 0 } { 225 } { .2cm }
+ \draw_path_lineto:n { 0cm , -.375cm }
+ \draw_path_moveto:n { 0cm , .125cm }
+ \draw_path_arc:nnn { 180 } { -45 } { .2cm }
+ \draw_path_lineto:n { 0cm , -.375cm }
+}
+
+% ATTACKS
+
+\cs_new:Npn \rpgicons_draw_shape_melee: {
+ \draw_path_moveto:n { -.15cm , -.225cm }
+ \draw_path_lineto:n { -.275cm , -.35cm }
+ \draw_path_arc:nnn { 360 } { 90 } { .075cm }
+ \draw_path_lineto:n { -.35cm , -.275cm }
+ \draw_path_lineto:n { -.225cm , -.15cm }
+ \draw_path_lineto:n { -.425cm , .05cm }
+ \draw_path_lineto:n { -.35cm , .125cm }
+ \draw_path_lineto:n { .125cm , -.35cm }
+ \draw_path_lineto:n { .05cm , -.425cm }
+ \draw_path_close:
+ \draw_path_moveto:n { -.2cm , -.025cm }
+ \draw_path_lineto:n { .225cm , .425cm }
+ \draw_path_lineto:n { .425cm , .425cm }
+ \draw_path_lineto:n { .425cm , .225cm }
+ \draw_path_lineto:n { -.025cm , -.2cm }
+ \draw_path_moveto:n { .325cm , .325cm }
+ \draw_path_lineto:n { 0cm , 0cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_ranged: {
+ \draw_path_moveto:n { 0cm , 0cm }
+ \draw_path_lineto:n { 0cm , -.225cm }
+ \draw_path_arc:nnn { 0 } { -30 } { .4cm }
+ \draw_path_arc:nnn { -45 } { 0 } { .6cm }
+ \draw_path_moveto:n { 0cm , 0cm }
+ \draw_path_lineto:n { 0cm , .225cm }
+ \draw_path_arc:nnn { 0 } { 30 } { .4cm }
+ \draw_path_arc:nnn { 45 } { 0 } { .6cm }
+ \draw_path_moveto:n { -.425cm , 0cm }
+ \draw_path_lineto:n { .425cm , 0cm }
+ \draw_path_moveto:n { .275cm , .1cm }
+ \draw_path_lineto:n { .425cm , 0cm }
+ \draw_path_lineto:n { .275cm , -.1cm }
+ \draw_path_moveto:n { ( -.4cm , -.225cm ) + ( \draw_point_polar:nn { .4cm } { -20 } ) }
+ \draw_path_lineto:n { -.425cm , 0cm }
+ \draw_path_lineto:n { ( -.4cm , .225cm ) + ( \draw_point_polar:nn { .4cm } { 20 } ) }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_magic: {
+ \draw_path_moveto:n { -.225cm , -.425cm }
+ \draw_path_lineto:n { -.425cm , -.225cm }
+ \draw_path_lineto:n { -.3cm , -.1cm }
+ \draw_path_lineto:n { -.3cm , .125cm }
+ \draw_path_lineto:n { 0cm , .425cm }
+ \draw_path_arc:nnn { 405 } { 315 } { .1cm }
+ \draw_path_lineto:n { -.15cm , .1cm }
+ \draw_path_lineto:n { -.15cm , -.05cm }
+ \draw_path_arc:nnn { 180 } { 360 } { .05cm }
+ \draw_path_lineto:n { -.05cm , 0cm }
+ \draw_path_arc:nnn { 180 } { 90 } { .1cm }
+ \draw_path_lineto:n { .05cm , -.1cm }
+ \draw_path_arc:nnn { 360 } { 315 } { .125cm }
+ \draw_path_close:
+ \draw_path_moveto:n { -.225cm , -.25cm }
+ \draw_path_lineto:n { -.325cm , -.15cm }
+ \draw_path_moveto:n { .2cm , .2cm }
+ \draw_path_arc:nnn { 180 } { 360 } { .1cm }
+ \draw_path_arc:nnn { 0 } { 45 } { .1cm }
+ \draw_path_arc:nnn { 225 } { 180 } { .2cm }
+ \draw_path_circle:nn { .3cm , -.075cm } { .075cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_singlehanded: {
+ \draw_path_moveto:n { -.25cm , -.425cm }
+ \draw_path_lineto:n { .025cm , -.425cm }
+ \draw_path_lineto:n { .325cm , -.125cm }
+ \draw_path_arc:nnn { 45 } { 135 } { .1cm }
+ \draw_path_lineto:n { 0cm , -.275cm }
+ \draw_path_lineto:n { -.15cm , -.275cm }
+ \draw_path_arc:nnn { 270 } { 90 } { .05cm }
+ \draw_path_lineto:n { -.1cm , -.175cm }
+ \draw_path_arc:nnn { 270 } { 360 } { .1cm }
+ \draw_path_lineto:n { -.2cm , -.075cm }
+ \draw_path_arc:nnn { 90 } { 135 } { .125cm }
+ \draw_path_lineto:n { -.425cm , -.25cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_doublehanded: {
+ \draw_path_moveto:n { -.25cm , -.425cm }
+ \draw_path_lineto:n { .025cm , -.425cm }
+ \draw_path_lineto:n { .325cm , -.125cm }
+ \draw_path_arc:nnn { 45 } { 135 } { .1cm }
+ \draw_path_lineto:n { 0cm , -.275cm }
+ \draw_path_lineto:n { -.15cm , -.275cm }
+ \draw_path_arc:nnn { 270 } { 90 } { .05cm }
+ \draw_path_lineto:n { -.1cm , -.175cm }
+ \draw_path_arc:nnn { 270 } { 360 } { .1cm }
+ \draw_path_lineto:n { -.2cm , -.075cm }
+ \draw_path_arc:nnn { 90 } { 135 } { .125cm }
+ \draw_path_lineto:n { -.425cm , -.25cm }
+ \draw_path_moveto:n { .25cm , .425cm }
+ \draw_path_lineto:n { -.025cm , .425cm }
+ \draw_path_lineto:n { -.325cm , .125cm }
+ \draw_path_arc:nnn { 225 } { 315 } { .1cm }
+ \draw_path_lineto:n { 0cm , .275cm }
+ \draw_path_lineto:n { .15cm , .275cm }
+ \draw_path_arc:nnn { 450 } { 270 } { .05cm }
+ \draw_path_lineto:n { .1cm , .175cm }
+ \draw_path_arc:nnn { 90 } { 180 } { .1cm }
+ \draw_path_lineto:n { .2cm , .075cm }
+ \draw_path_arc:nnn { 270 } { 315 } { .125cm }
+ \draw_path_lineto:n { .425cm , .25cm }
+}
+
+% CONDITIONS
+
+\cs_new:Npn \rpgicons_draw_shape_buff: {
+ \draw_path_moveto:n { -.425cm , -.225cm }
+ \draw_path_lineto:n { -.225cm , -.425cm }
+ \draw_path_lineto:n { -.1cm , -.3cm }
+ \draw_path_lineto:n { .125cm , -.3cm }
+ \draw_path_lineto:n { .425cm , 0cm }
+ \draw_path_arc:nnn { 45 } { 135 } { .1cm }
+ \draw_path_lineto:n { .1cm , -.15cm }
+ \draw_path_lineto:n { -.05cm , -.15cm }
+ \draw_path_arc:nnn { 270 } { 90 } { .05cm }
+ \draw_path_lineto:n { 0cm , -.05cm }
+ \draw_path_arc:nnn { 270 } { 360 } { .1cm }
+ \draw_path_lineto:n { -.1cm , .05cm }
+ \draw_path_arc:nnn { 90 } { 135 } { .125cm }
+ \draw_path_close:
+ \draw_path_moveto:n { -.25cm , -.225cm }
+ \draw_path_lineto:n { -.15cm , -.325cm }
+ \draw_path_moveto:n { 0cm , .425cm }
+ \draw_path_lineto:n { .25cm , .425cm }
+ \draw_path_lineto:n { .25cm , .275cm }
+ \draw_path_arc:nnn { 360 } { 180 } { .125cm }
+ \draw_path_close:
+
+}
+
+\cs_new:Npn \rpgicons_draw_shape_blinded: {
+ \draw_path_moveto:n { 0cm , .225cm }
+ \draw_path_arc:nnn { 90 } { 30 } { .45cm }
+ \draw_path_arc:nnn { 330 } { 210 } { .45cm }
+ \draw_path_arc:nnn { 150 } { 90 } { .45cm }
+ \draw_path_moveto:n { 0cm , .225cm }
+ \draw_path_circle:nn { 0cm , 0cm } { .15cm }
+ \draw_path_moveto:n { -.425cm , -.425cm }
+ \draw_path_lineto:n { -.25cm , -.25cm }
+ \draw_path_moveto:n { 0cm , 0cm }
+ \draw_path_lineto:n { .425cm , .425cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_charmed: {
+ \draw_path_circle:nn { 0cm , 0cm } { .425cm }
+ \draw_path_moveto:n { -.175cm , -.1cm }
+ \draw_path_arc:nnn { 180 } { 360 } { .175cm }
+ \draw_path_close:
+ \draw_path_moveto:n { -.175cm , .15cm }
+ \draw_path_arc:nnn { 0 } { 225 } { .0625cm }
+ \draw_path_lineto:n { -.175cm , 0cm }
+ \draw_path_moveto:n { -.175cm , .15cm }
+ \draw_path_arc:nnn { 180 } { -45 } { .0625cm }
+ \draw_path_lineto:n { -.175cm , 0cm }
+ \draw_path_moveto:n { .175cm , .15cm }
+ \draw_path_arc:nnn { 0 } { 225 } { .0625cm }
+ \draw_path_lineto:n { .175cm , 0cm }
+ \draw_path_moveto:n { .175cm , .15cm }
+ \draw_path_arc:nnn { 180 } { -45 } { .0625cm }
+ \draw_path_lineto:n { .175cm , 0cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_deafened: {
+ \draw_path_moveto:n { -.175cm , -.275cm }
+ \draw_path_arc:nnn { 180 } { 360 } { .15cm }
+ \draw_path_lineto:n { .125cm , -.225cm }
+ \draw_path_arc:nnn { 180 } { 135 } { .25cm }
+ \draw_path_arc:nnn { 315 } { 360 } { .25cm }
+ \draw_path_arc:nnn { 0 } { 180 } { .275cm }
+ \draw_path_moveto:n { -.15cm , -.1cm }
+ \draw_path_arc:nnn { -90 } { 90 } { .075cm }
+ \draw_path_lineto:n { -.15cm , .125cm }
+ \draw_path_arc:nnn { 180 } { 45 } { .15cm }
+ \draw_path_moveto:n { -.425cm , -.425cm }
+ \draw_path_lineto:n { -.2cm , -.2cm }
+ \draw_path_moveto:n { 0cm , 0cm }
+ \draw_path_lineto:n { .425cm , .425cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_exhausted: {
+ \draw_path_circle:nn { 0cm , 0cm } { .425cm }
+ \draw_path_moveto:n { -.175cm , -.225cm }
+ \draw_path_arc:nnn { 180 } { 0 } { .175cm }
+ \draw_path_close:
+ \draw_path_moveto:n { .275cm , .15cm }
+ \draw_path_arc:nnn { 180 } { 0 } { -.1cm }
+ \draw_path_moveto:n { -.075cm , .15cm }
+ \draw_path_arc:nnn { 180 } { 0 } { -.1cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_frightened: {
+ \draw_path_circle:nn { 0cm , 0cm } { .425cm }
+ \draw_path_moveto:n { -.175cm , -.225cm }
+ \draw_path_arc:nnn { 180 } { 0 } { .175cm }
+ \draw_path_close:
+ \draw_path_circle:nn { -.175cm , .125cm } { .075cm }
+ \draw_path_circle:nn { .175cm , .125cm } { .075cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_grappled: {
+ \draw_path_moveto:n { -.25cm , .3cm }
+ \draw_path_arc:nnn { 90 } { -90 } { .075cm }
+ \draw_path_lineto:n { -.35cm , .15cm }
+ \draw_path_arc:nnn { 270 } { 90 } { .075cm }
+ \draw_path_close:
+ \draw_path_moveto:n { -.2cm , .15cm }
+ \draw_path_arc:nnn { 90 } { -90 } { .075cm }
+ \draw_path_lineto:n { -.35cm , 0cm }
+ \draw_path_arc:nnn { 270 } { 90 } { .075cm }
+ \draw_path_close:
+ \draw_path_moveto:n { -.2cm , 0cm }
+ \draw_path_arc:nnn { 90 } { -90 } { .075cm }
+ \draw_path_lineto:n { -.35cm , -.15cm }
+ \draw_path_arc:nnn { 270 } { 90 } { .075cm }
+ \draw_path_close:
+ \draw_path_moveto:n { -.2cm , -.15cm }
+ \draw_path_arc:nnn { 90 } { -90 } { .075cm }
+ \draw_path_lineto:n { -.3cm , -.3cm }
+ \draw_path_arc:nnn { 270 } { 90 } { .075cm }
+ \draw_path_close:
+ \draw_path_moveto:n { .425cm , .05cm }
+ \draw_path_arc:nnn { 0 } { 90 } { .25cm }
+ \draw_path_lineto:n { -.05cm , .3cm }
+ \draw_path_arc:nnn { 180 } { 270 } { .15cm }
+ \draw_path_lineto:n { .175cm , .15cm }
+ \draw_path_lineto:n { .175cm , -.425cm }
+ \draw_path_moveto:n { .175cm , -.275cm }
+ \draw_path_lineto:n { .425cm , -.275cm }
+ \draw_path_moveto:n { .175cm , .3cm }
+ \draw_path_lineto:n { .175cm , .425cm }
+ \draw_path_moveto:n { -.3cm , .3cm }
+ \draw_path_lineto:n { -.3cm , .425cm }
+ \draw_path_moveto:n { -.3cm , -.3cm }
+ \draw_path_lineto:n { -.3cm , -.425cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_incapacitated: {
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 30 } }
+ \draw_path_arc:nnn { 270 } { 210 } { .425cm }
+ \draw_path_lineto:n { \draw_point_polar:nn { -.425cm} { 90 } }
+ \draw_path_arc:nnn { 30 } { 90 } { .425cm }
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 90 } }
+ \draw_path_arc:nnn { 330 } { 270 } { .425cm }
+ \draw_path_lineto:n { \draw_point_polar:nn { -.425cm} { 150 } }
+ \draw_path_arc:nnn { 90 } { 150 } { .425cm }
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 150 } }
+ \draw_path_arc:nnn { 30 } { -30 } { .425cm }
+ \draw_path_lineto:n { \draw_point_polar:nn { -.425cm} { 210 } }
+ \draw_path_arc:nnn { 150 } { 210 } { .425cm }
+ \draw_path_moveto:n { \draw_point_polar:nn { .25cm} { 30 } }
+ \draw_path_arc:nnn { 270 } { 210 } { .25cm }
+ \draw_path_arc:nnn { 330 } { 270 } { .25cm }
+ \draw_path_arc:nnn { 30 } { -30 } { .25cm }
+ \draw_path_arc:nnn { 90 } { 30 } { .25cm }
+ \draw_path_arc:nnn { 150 } { 90 } { .25cm }
+ \draw_path_arc:nnn { 210 } { 150 } { .25cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_invisible: {
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { -15 } }
+ \draw_path_arc:nnn { -15 } { 15 } { .425cm }
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 30 } }
+ \draw_path_arc:nnn { 30 } { 60 } { .425cm }
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 75 } }
+ \draw_path_arc:nnn { 75 } { 105 } { .425cm }
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 120 } }
+ \draw_path_arc:nnn { 120 } { 150 } { .425cm }
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 165 } }
+ \draw_path_arc:nnn { 165 } { 195 } { .425cm }
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 210 } }
+ \draw_path_arc:nnn { 210 } { 240 } { .425cm }
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 255 } }
+ \draw_path_arc:nnn { 255 } { 285 } { .425cm }
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 300 } }
+ \draw_path_arc:nnn { 300 } { 330 } { .425cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_paralyzed: {
+ \draw_path_circle:nn { 0cm , 0cm } { .425cm }
+ \draw_path_moveto:n { -.175cm , -.225cm }
+ \draw_path_arc:nnn { 180 } { 0 } { .175cm }
+ \draw_path_close:
+ \draw_path_moveto:n { .25cm , .2cm }
+ \draw_path_lineto:n { .1cm , .05cm }
+ \draw_path_moveto:n { .25cm , .05cm }
+ \draw_path_lineto:n { .1cm , .2cm }
+ \draw_path_moveto:n { -.25cm , .2cm }
+ \draw_path_lineto:n { -.1cm , .05cm }
+ \draw_path_moveto:n { -.25cm , .05cm }
+ \draw_path_lineto:n { -.1cm , .2cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_petrified: {
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 45 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .425cm} { 100 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .425cm} { 135 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .425cm} { 190 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .425cm} { 230 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .425cm} { 250 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .425cm} { 300 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .425cm} { 350 } }
+ \draw_path_close:
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 135 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .35cm} { 130 } }
+ \draw_path_lineto:n { -.25cm , .075cm }
+ \draw_path_lineto:n { \draw_point_polar:nn { .2cm} { 220 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .325cm} { 240 } }
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 300 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .3cm} { 330 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .225cm} { 350 } }
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 45 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .3cm} { 60 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .35cm} { 130 } }
+ \draw_path_moveto:n { -.15cm , -.175cm }
+ \draw_path_lineto:n { .075cm , -.15cm }
+ \draw_path_lineto:n { .125cm , -.2cm }
+ \draw_path_moveto:n { -.25cm , .075cm }
+ \draw_path_lineto:n { -.1cm , .1cm }
+ \draw_path_moveto:n { .25cm , .075cm }
+ \draw_path_lineto:n { .1cm , .1cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_poisoned: {
+ \draw_path_circle:nn { 0cm , 0cm } { .425cm }
+ \draw_path_moveto:n { -.15cm , -.2cm }
+ \draw_path_lineto:n { -.075cm , -.125cm }
+ \draw_path_lineto:n { 0cm , -.2cm }
+ \draw_path_lineto:n { .075cm , -.125cm }
+ \draw_path_lineto:n { .15cm , -.2cm }
+ \draw_path_moveto:n { .25cm , .175cm }
+ \draw_path_lineto:n { .1cm , .1cm }
+ \draw_path_lineto:n { .25cm , .025cm }
+ \draw_path_moveto:n { -.25cm , .175cm }
+ \draw_path_lineto:n { -.1cm , .1cm }
+ \draw_path_lineto:n { -.25cm , .025cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_prone: {
+ \draw_path_circle:nn { .2cm , -.125cm } { .125cm }
+ \draw_path_moveto:n { -.425cm , 0cm }
+ \draw_path_lineto:n { -.15cm , 0cm }
+ \draw_path_arc:nnn { 90 } { -90 } { .125cm }
+ \draw_path_lineto:n { -.425cm , -.25cm }
+ \draw_path_moveto:n { .225cm , .15cm }
+ \draw_path_arc:nnn { 270 } { 360 } { .1cm }
+ \draw_path_arc:nnn { 180 } { 270 } { .1cm }
+ \draw_path_arc:nnn { 90 } { 180 } { .1cm }
+ \draw_path_arc:nnn { 0 } { 90 } { .1cm }
+ \draw_path_moveto:n { 0cm , .25cm }
+ \draw_path_arc:nnn { 270 } { 360 } { .1cm }
+ \draw_path_arc:nnn { 180 } { 270 } { .1cm }
+ \draw_path_arc:nnn { 90 } { 180 } { .1cm }
+ \draw_path_arc:nnn { 0 } { 90 } { .1cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_restrained: {
+ \draw_path_moveto:n { -.075cm , -.225cm }
+ \draw_path_lineto:n { -.075cm , .225cm }
+ \draw_path_arc:nnn { 90 } { 180 } { .125cm }
+ \draw_path_lineto:n { -.2cm , 0cm }
+ \draw_path_arc:nnn { 270 } { 180 } { .1cm }
+ \draw_path_lineto:n { -.3cm , .3cm }
+ \draw_path_arc:nnn { 0 } { 90 } { .125cm }
+ \draw_path_lineto:n { -.425cm , -.075cm }
+ \draw_path_arc:nnn { 180 } { 235 } { .1cm }
+ \draw_path_lineto:n { -.3cm , -.225cm }
+ \draw_path_moveto:n { .075cm , -.225cm }
+ \draw_path_lineto:n { .075cm , .225cm }
+ \draw_path_arc:nnn { 90 } { 0 } { .125cm }
+ \draw_path_lineto:n { .2cm , 0cm }
+ \draw_path_arc:nnn { -90 } { 0 } { .1cm }
+ \draw_path_lineto:n { .3cm , .3cm }
+ \draw_path_arc:nnn { 180 } { 90 } { .125cm }
+ \draw_path_lineto:n { .425cm , -.075cm }
+ \draw_path_arc:nnn { 360 } { 330 } { .1cm }
+ \draw_path_lineto:n { .3cm , -.225cm }
+ \draw_path_moveto:n { .35cm , -.225cm }
+ \draw_path_arc:nnn { 90 } { -90 } { .05cm }
+ \draw_path_lineto:n { -.35cm , -.325cm }
+ \draw_path_arc:nnn { 270 } { 90 } { .05cm }
+ \draw_path_close:
+ \draw_path_moveto:n { .35cm , -.325cm }
+ \draw_path_arc:nnn { 90 } { -90 } { .05cm }
+ \draw_path_lineto:n { -.35cm , -.425cm }
+ \draw_path_arc:nnn { 270 } { 90 } { .05cm }
+ \draw_path_close:
+}
+
+\cs_new:Npn \rpgicons_draw_shape_stunned: {
+ \draw_path_circle:nn { 0cm , 0cm } { .425cm }
+ \draw_path_ellipse:nnn { 0cm , -.175cm } { 0cm , .1cm } { .175cm , 0cm }
+ \draw_path_moveto:n { ( -.175cm , .125cm ) + ( \draw_point_polar:nn { .125cm } { 90 } ) }
+ \draw_path_lineto:n { ( -.175cm , .125cm ) + ( \draw_point_polar:nn { .05cm } { 126 } ) }
+ \draw_path_lineto:n { ( -.175cm , .125cm ) + ( \draw_point_polar:nn { .125cm } { 162 } ) }
+ \draw_path_lineto:n { ( -.175cm , .125cm ) + ( \draw_point_polar:nn { .05cm } { 198 } ) }
+ \draw_path_lineto:n { ( -.175cm , .125cm ) + ( \draw_point_polar:nn { .125cm } { 234 } ) }
+ \draw_path_lineto:n { ( -.175cm , .125cm ) + ( \draw_point_polar:nn { .05cm } { 270 } ) }
+ \draw_path_lineto:n { ( -.175cm , .125cm ) + ( \draw_point_polar:nn { .125cm } { 306 } ) }
+ \draw_path_lineto:n { ( -.175cm , .125cm ) + ( \draw_point_polar:nn { .05cm } { 342 } ) }
+ \draw_path_lineto:n { ( -.175cm , .125cm ) + ( \draw_point_polar:nn { .125cm } { 18 } ) }
+ \draw_path_lineto:n { ( -.175cm , .125cm ) + ( \draw_point_polar:nn { .05cm } { 54 } ) }
+ \draw_path_close:
+ \draw_path_moveto:n { ( .175cm , .125cm ) + ( \draw_point_polar:nn { .125cm } { 90 } ) }
+ \draw_path_lineto:n { ( .175cm , .125cm ) + ( \draw_point_polar:nn { .05cm } { 126 } ) }
+ \draw_path_lineto:n { ( .175cm , .125cm ) + ( \draw_point_polar:nn { .125cm } { 162 } ) }
+ \draw_path_lineto:n { ( .175cm , .125cm ) + ( \draw_point_polar:nn { .05cm } { 198 } ) }
+ \draw_path_lineto:n { ( .175cm , .125cm ) + ( \draw_point_polar:nn { .125cm } { 234 } ) }
+ \draw_path_lineto:n { ( .175cm , .125cm ) + ( \draw_point_polar:nn { .05cm } { 270 } ) }
+ \draw_path_lineto:n { ( .175cm , .125cm ) + ( \draw_point_polar:nn { .125cm } { 306 } ) }
+ \draw_path_lineto:n { ( .175cm , .125cm ) + ( \draw_point_polar:nn { .05cm } { 342 } ) }
+ \draw_path_lineto:n { ( .175cm , .125cm ) + ( \draw_point_polar:nn { .125cm } { 18 } ) }
+ \draw_path_lineto:n { ( .175cm , .125cm ) + ( \draw_point_polar:nn { .05cm } { 54 } ) }
+ \draw_path_close:
+}
+
+\cs_new:Npn \rpgicons_draw_shape_unconscious: {
+ \draw_path_moveto:n { 0cm , .15cm }
+ \draw_path_arc:nnnn { 90 } { -30 } { .425cm } { .15cm }
+ \draw_path_moveto:n { 0cm , -.15cm }
+ \draw_path_arc:nnnn { 270 } { 150 } { .425cm } { .15cm }
+ \draw_path_moveto:n { -.35cm , .15cm }
+ \draw_path_arc:nnn { 270 } { 360 } { .125cm }
+ \draw_path_arc:nnn { 180 } { 270 } { .125cm }
+ \draw_path_arc:nnn { 90 } { 180 } { .125cm }
+ \draw_path_arc:nnn { 0 } { 90 } { .125cm }
+ \draw_path_moveto:n { .1cm , -.15cm }
+ \draw_path_arc:nnn { 270 } { 360 } { .125cm }
+ \draw_path_arc:nnn { 180 } { 270 } { .125cm }
+ \draw_path_arc:nnn { 90 } { 180 } { .125cm }
+ \draw_path_arc:nnn { 0 } { 90 } { .125cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_hearing: {
+ \draw_path_moveto:n { -.175cm , -.275cm }
+ \draw_path_arc:nnn { 180 } { 360 } { .15cm }
+ \draw_path_lineto:n { .125cm , -.225cm }
+ \draw_path_arc:nnn { 180 } { 135 } { .25cm }
+ \draw_path_arc:nnn { 315 } { 360 } { .25cm }
+ \draw_path_arc:nnn { 0 } { 180 } { .275cm }
+ \draw_path_moveto:n { -.15cm , -.1cm }
+ \draw_path_arc:nnn { -90 } { 90 } { .075cm }
+ \draw_path_lineto:n { -.15cm , .125cm }
+ \draw_path_arc:nnn { 180 } { 45 } { .15cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_seeing: {
+ \draw_path_moveto:n { 0cm , .225cm }
+ \draw_path_arc:nnn { 90 } { 30 } { .45cm }
+ \draw_path_arc:nnn { 330 } { 210 } { .45cm }
+ \draw_path_arc:nnn { 150 } { 90 } { .45cm }
+ \draw_path_moveto:n { 0cm , .225cm }
+ \draw_path_circle:nn { 0cm , 0cm } { .15cm }
+}
+
+% FRAMES
+
+\cs_new:Npn \rpgicons_draw_frame_ability: {
+ \draw_path_circle:nn { 0cm , 0cm } { .45cm }
+}
+
+\cs_new:Npn \rpgicons_draw_frame_saving: {
+ \draw_path_moveto:n { -.45cm, . 45cm }
+ \draw_path_lineto:n { .45cm , .45cm }
+ \draw_path_lineto:n { .45cm , -.05cm }
+ \draw_path_arc:nnn { 360 } { 180 } { .45cm }
+ \draw_path_close:
+}
+
+\cs_new:Npn \rpgicons_draw_frame_spellschool: {
+ \draw_path_moveto:n { -.475cm, . 35cm }
+ \draw_path_lineto:n { -.35cm , .475cm }
+ \draw_path_lineto:n { .35cm , .475cm }
+ \draw_path_lineto:n { .475cm , .35cm }
+ \draw_path_lineto:n { .425cm , -.375cm }
+ \draw_path_lineto:n { 0cm , -.475cm }
+ \draw_path_lineto:n { -.425cm , -.375cm }
+ \draw_path_close:
+}
+
+\cs_new:Npn \rpgicons_draw_frame_damage: {
+ \draw_path_circle:nn { 0cm , 0cm } { .45cm }
+}
+
+% USER COMMANDS
+
+\NewDocumentCommand { \rpgiconsset } { m } {
+ \keys_set:nn { rpgicons / local ~ options } {#1}
+}
+
+\dim_new:N \l_rpgicons_icon_before_sep_dim
+\dim_new:N \l_rpgicons_icon_after_sep_dim
+\dim_new:N \l_rpgicons_icon_baseline_dim
+\dim_new:N \l_rpgicons_icon_linewidth_dim
+
+\tl_new:N \l_rpgicons_icon_frame_tl
+\tl_new:N \l_rpgicons_icon_color_stroke_tl
+\tl_new:N \l_rpgicons_icon_color_fill_tl
+\tl_new:N \l_rpgicons_icon_color_text_tl
+\tl_new:N \l_rpgicons_icon_color_background_tl
+
+\fp_new:N \l_rpgicons_icon_opacity_stroke_fp
+\fp_set:Nn \l_rpgicons_icon_opacity_stroke_fp { 1.0 }
+\fp_new:N \l_rpgicons_icon_opacity_fill_fp
+\fp_set:Nn \l_rpgicons_icon_opacity_fill_fp { 1.0 }
+\fp_new:N \l_rpgicons_icon_opacity_text_fp
+\fp_set:Nn \l_rpgicons_icon_opacity_text_fp { 1.0 }
+\fp_new:N \l_rpgicons_icon_opacity_background_fp
+\fp_set:Nn \l_rpgicons_icon_opacity_background_fp { 1.0 }
+
+\fp_new:N \l_rpgicons_icon_transform_scale_fp
+\fp_new:N \l_rpgicons_icon_transform_scale_inner_fp
+\fp_new:N \l_rpgicons_icon_transform_rotate_fp
+
+\bool_new:N \l_rpgicons_icon_accessible_basic_bool
+\bool_new:N \l_rpgicons_icon_accessible_full_bool
+
+\cs_generate_variant:Nn \color_select:n { V }
+\cs_generate_variant:Nn \color_stroke:n { V }
+\cs_generate_variant:Nn \color_fill:n { V }
+
+\bool_new:N \l__rpgicons_opacity_warning_bool
+\cs_new:Npn \__rpgicons_opacity_check: {
+ \bool_lazy_and:nnT {
+ \bool_not_p:n { \l__rpgicons_opacity_warning_bool }
+ } {
+ \bool_not_p:n { \l__rpgicons_use_opacity_bool }
+ } {
+ \msg_warning:nn { rpgicons } { opacity-option-missing }
+ \bool_set_true:N \l__rpgicons_opacity_warning_bool
+ }
+}
+\cs_new:Npn \__rpgicons_accessible_check: {
+ \IfDocumentMetadataTF { } {
+ \msg_error:nn { rpgicons } { documentmetadata-missing }
+ }
+}
+
+\cs_generate_variant:Nn \bool_set:Nn { Ne }
+\keys_define:nn { rpgicons / local ~ options } {
+ before ~ sep .groups:n = { extra } ,
+ before ~ sep .dim_set:N = \l_rpgicons_icon_before_sep_dim ,
+ before ~ sep .initial:n = { 0.05em } ,
+ after ~ sep .groups:n = { extra } ,
+ after ~ sep .dim_set:N = \l_rpgicons_icon_after_sep_dim ,
+ after ~ sep .initial:n = { 0.05em } ,
+ accessible .choice: ,
+ accessible / false .code:n = {
+ \bool_set_false:N \l_rpgicons_icon_accessible_basic_bool
+ \bool_set_false:N \l_rpgicons_icon_accessible_full_bool
+ } ,
+ accessible / basic .code:n = {
+ \bool_set_true:N \l_rpgicons_icon_accessible_basic_bool
+ \bool_set_false:N \l_rpgicons_icon_accessible_full_bool
+ } ,
+ accessible / full .code:n = {
+ \bool_set_true:N \l_rpgicons_icon_accessible_basic_bool
+ \bool_set_true:N \l_rpgicons_icon_accessible_full_bool
+ } ,
+ accessible .default:n = { basic } ,
+ baseline .dim_set:N = \l_rpgicons_icon_baseline_dim ,
+ baseline .initial:n = { -3.5pt } ,
+ frame .tl_set:N = \l_rpgicons_icon_frame_tl ,
+ frame .initial:n = { } ,
+ stroke .tl_set:N = \l_rpgicons_icon_color_stroke_tl ,
+ stroke .initial:n = { . } ,
+ fill .tl_set:N = \l_rpgicons_icon_color_fill_tl ,
+ fill .initial:n = { . } ,
+ text .tl_set:N = \l_rpgicons_icon_color_text_tl ,
+ text .initial:n = { . } ,
+ color .code:n = {
+ \tl_set:Nn \l_rpgicons_icon_color_stroke_tl {#1}
+ \tl_set:Nn \l_rpgicons_icon_color_fill_tl {#1}
+ \tl_set:Nn \l_rpgicons_icon_color_text_tl {#1}
+ } ,
+ background .tl_set:N = \l_rpgicons_icon_color_background_tl ,
+ background .initial:n = { white } ,
+ stroke ~ opacity .code:n = {
+ \__rpgicons_opacity_check:
+ \fp_set:Nn \l_rpgicons_icon_opacity_stroke_fp {#1}
+ } ,
+ fill ~ opacity .code:n = {
+ \__rpgicons_opacity_check:
+ \fp_set:Nn \l_rpgicons_icon_opacity_fill_fp {#1}
+ } ,
+ text ~ opacity .code:n = {
+ \__rpgicons_opacity_check:
+ \fp_set:Nn \l_rpgicons_icon_opacity_text_fp {#1}
+ } ,
+ opacity .code:n = {
+ \__rpgicons_opacity_check:
+ \fp_set:Nn \l_rpgicons_icon_opacity_stroke_fp {#1}
+ \fp_set:Nn \l_rpgicons_icon_opacity_fill_fp {#1}
+ \fp_set:Nn \l_rpgicons_icon_opacity_text_fp {#1}
+ } ,
+ background ~ opacity .code:n = {
+ \__rpgicons_opacity_check:
+ \fp_set:Nn \l_rpgicons_icon_opacity_background_fp {#1}
+ } ,
+ line ~ width .dim_set:N = \l_rpgicons_icon_linewidth_dim ,
+ line ~ width .initial:n = { \l_draw_default_linewidth_dim } ,
+ scale .fp_set:N = \l_rpgicons_icon_transform_scale_fp ,
+ scale .initial:n = { 1.0 } ,
+ scale ~ inner .fp_set:N = \l_rpgicons_icon_transform_scale_inner_fp ,
+ scale ~ inner .initial:n = { 0.675 } ,
+ rotate .fp_set:N = \l_rpgicons_icon_transform_rotate_fp ,
+ rotate .initial:n = { 0.0 } ,
+}
+
+\clist_const:Nn \c__rpgicons_types_clist {
+ die , ability , saving , spell , spellschool , damage , attack , condition
+}
+
+\str_new:N \l__rpgicons_icon_shape_name_str
+\clist_map_inline:Nn \c__rpgicons_types_clist {
+ \str_set:Nn \l__rpgicons_icon_shape_name_str {#1}
+ \str_replace_all:Nnn \l__rpgicons_icon_shape_name_str { ~ } { _ }
+ \clist_new:c { l_rpgicons_types_every_ \l__rpgicons_icon_shape_name_str _style_clist }
+ \keys_define:nn { rpgicons / local ~ options } {
+ every ~ #1 .code:n = {
+ \clist_set:cn {
+ l_rpgicons_types_every_ \l__rpgicons_icon_shape_name_str _style_clist
+ } {##1}
+ }
+ }
+}
+
+\clist_const:Nn \c__rpgicons_shapes_clist {
+ twoside , fourside , sixside , eightside , tenside , twelveside , twentyside , hundredside ,
+ fudge , sixside ~ one , sixside ~ two , sixside ~ three, sixside ~ four, sixside ~ five ,
+ sixside ~ six , sixside ~ seven, sixside ~ eight, sixside ~ nine, fudge ~ plus, fudge ~ minus ,
+ strength , dexterity , dexterity ~ alt , constitution , intelligence , wisdom , charisma ,
+ resilience , sanity , perception , luck , armor , proficiency ,
+ linear , conic , quadratic , cubic , spheric , cylindric , verbal , somatic , material , focus ,
+ abjuration , conjuration , divination , enchantment , evocation , illusion , necromancy , transmutation ,
+ acid , bludgeoning , cold , fire , force , lightning , necrotic , piercing , poison , psychic ,
+ radiant , slashing , thunder , healing ,
+ melee , ranged , magic , singlehanded , doublehanded ,
+ buff , blinded , charmed , deafened , exhausted , frightened , grappled , incapacitated , invisible ,
+ paralyzed , petrified , poisoned , prone , restrained , stunned , unconscious , hearing , seeing
+}
+
+\clist_map_inline:Nn \c__rpgicons_shapes_clist {
+ \str_set:Nn \l__rpgicons_icon_shape_name_str {#1}
+ \str_replace_all:Nnn \l__rpgicons_icon_shape_name_str { ~ } { _ }
+ \clist_new:c { l_rpgicons_shapes_every_ \l__rpgicons_icon_shape_name_str _style_clist }
+ \keys_define:nn { rpgicons / local ~ options } {
+ every ~ #1 .code:n = {
+ \clist_set:cn {
+ l_rpgicons_shapes_every_ \l__rpgicons_icon_shape_name_str _style_clist
+ } {##1}
+ }
+ }
+}
+
+\seq_new:N \l__rpgicons_icon_shape_name_parts_seq
+\coffin_new:N \l__rpgicons_icon_accessible_coffin
+\coffin_new:N \l__rpgicons_icon_label_coffin
+\bool_if:NT \l__rpgicons_compat_mode_bool {
+ % l3keys cs name fix
+ \cs_generate_variant:Nn \keys_set:nn { ne }
+ \cs_generate_variant:Nn \str_set:Nn { Ne }
+ \cs_generate_variant:Nn \seq_set_split:Nnn { Nee }
+}
+\prg_generate_conditional_variant:Nnn \clist_if_in:nn { ne } { T , TF }
+\cs_generate_variant:Nn \hcoffin_set:Nn { Ne }
+\cs_generate_variant:Nn \keys_set_groups:nnn { nne }
+\cs_generate_variant:Nn \keys_set_exclude_groups:nnn { nne }
+\NewDocumentCommand \RPGIconsUseIcon { s O{} o m } {
+ \bool_if:NT \l_rpgicons_icon_accessible_full_bool {
+ \__rpgicons_accessible_check:
+ \pdf_bdc:nn { Span } { /Alt ~ ( #4 ) }
+ }
+ \draw_begin:
+ \draw_cap_round:
+ \draw_join_round:
+ \bool_if:NTF \l__rpgicons_compat_mode_bool {
+ % l3keys cs name fix
+ \keys_set:ne { rpgicons / local ~ options } {#2}
+ } {
+ \keys_set_exclude_groups:nne { rpgicons / local ~ options } { extra } {#2}
+ }
+ \str_set:Ne \l__rpgicons_icon_shape_name_str {#4}
+ \str_replace_all:Nnn \l__rpgicons_icon_shape_name_str { ~ } { _ }
+ \str_if_empty:NF \l__rpgicons_icon_shape_name_str {
+ \clist_if_exist:cT { l_rpgicons_shapes_every_ \l__rpgicons_icon_shape_name_str _style_clist } {
+ \keys_set:ne { rpgicons / local ~ options } {
+ \clist_use:cn { l_rpgicons_shapes_every_ \l__rpgicons_icon_shape_name_str _style_clist } { , }
+ }
+ }
+ }
+ \color_stroke:V { \l_rpgicons_icon_color_stroke_tl }
+ \color_fill:V { \l_rpgicons_icon_color_fill_tl }
+ \bool_if:NT \l__rpgicons_use_opacity_bool {
+ \opacity_stroke:n { \l_rpgicons_icon_opacity_stroke_fp }
+ \opacity_fill:n { \l_rpgicons_icon_opacity_fill_fp }
+ }
+ \draw_linewidth:n { \l_rpgicons_icon_linewidth_dim }
+ \draw_transform_scale:n { \l_rpgicons_icon_transform_scale_fp }
+ \draw_transform_rotate:n { \l_rpgicons_icon_transform_rotate_fp }
+ \draw_baseline:n { \l_rpgicons_icon_baseline_dim }
+ \bool_if:NT \l_rpgicons_icon_accessible_basic_bool {
+ \draw_scope_begin:
+ \bool_if:NTF \l__rpgicons_compat_mode_bool {
+ % l3draw rectangle fix
+ % l3draw bounding box workaround
+ \draw_path_moveto:n { -.5cm , .5cm }
+ \draw_path_lineto:n { -.5cm , .5cm }
+ \draw_path_lineto:n { .5cm , .5cm }
+ \draw_path_lineto:n { .5cm , .5cm }
+ \draw_path_close:
+ \draw_path_use_clear:n { clip }
+ } {
+ \draw_path_rectangle_corners:nn
+ { -.5cm , .5cm }
+ { .5cm , .5cm }
+ \draw_path_use_clear:n { clip }
+ }
+ \bool_if:NTF \l_rpgicons_icon_accessible_full_bool {
+ \hcoffin_set:Nn \l__rpgicons_icon_accessible_coffin { \pdffakespace #4 \pdffakespace }
+ } {
+ \hcoffin_set:Nn \l__rpgicons_icon_accessible_coffin {#4}
+ }
+ \coffin_resize:Nnn \l__rpgicons_icon_accessible_coffin { 1cm } { 1cm }
+ \draw_coffin_use:Nnnn \l__rpgicons_icon_accessible_coffin { hc } { vc } { 0cm , 0cm }
+ \draw_scope_end:
+ }
+ \bool_if:NTF \l__rpgicons_compat_mode_bool {
+ % l3draw rectangle fix
+ % l3draw bounding box workaround
+ \draw_path_moveto:n { -.5cm , -.5cm - \l_rpgicons_icon_linewidth_dim / 2 }
+ \draw_path_lineto:n { -.5cm , .5cm + \l_rpgicons_icon_linewidth_dim / 2 }
+ \draw_path_lineto:n { .5cm , .5cm + \l_rpgicons_icon_linewidth_dim / 2 }
+ \draw_path_lineto:n { .5cm , -.5cm - \l_rpgicons_icon_linewidth_dim / 2 }
+ \draw_path_close:
+ \draw_path_use_clear:n { clip }
+ } {
+ \draw_path_rectangle_corners:nn
+ { -.5cm , -.5cm - \l_rpgicons_icon_linewidth_dim / 2 }
+ { .5cm , .5cm + \l_rpgicons_icon_linewidth_dim / 2 }
+ \draw_path_replace_bb:
+ \bool_set_false:N \l_draw_bb_update_bool
+ }
+ \draw_scope_begin:
+ \clist_if_in:neT { ability , saving , spellschool , damage } { \l_rpgicons_icon_frame_tl } {
+ \use:c { rpgicons_draw_frame_ \l_rpgicons_icon_frame_tl : }
+ \IfBooleanTF {#1} {
+ \draw_path_use_clear:n { fill }
+ \color_select:V { \l_rpgicons_icon_color_background_tl }
+ \bool_if:NT \l__rpgicons_use_opacity_bool {
+ \opacity_select:n { \l_rpgicons_icon_opacity_background_fp }
+ }
+ } {
+ \draw_path_use_clear:n { stroke }
+ }
+ \draw_transform_scale:n { \l_rpgicons_icon_transform_scale_inner_fp }
+ }
+ \clist_if_in:neTF { sixside ~ one , sixside ~ two , sixside ~ three , sixside ~ four ,
+ sixside ~ five , sixside ~ six , sixside ~ seven , sixside ~ eight , sixside ~ nine } {#4} {
+ \seq_set_split:Nee \l__rpgicons_icon_shape_name_parts_seq
+ { \c_underscore_str } { \l__rpgicons_icon_shape_name_str }
+ \exp_args:Ne \rpgicons_draw_shape_sixside_pips:n {
+ \seq_item:Nn \l__rpgicons_icon_shape_name_parts_seq { 2 }
+ }
+ } {
+ \use:c { rpgicons_draw_shape_ \l__rpgicons_icon_shape_name_str : }
+ }
+ \draw_path_use_clear:n { stroke }
+ \IfValueT {#3} {
+ \draw_scope_begin:
+ \color_select:V { \l_rpgicons_icon_color_text_tl }
+ \bool_if:NT \l__rpgicons_use_opacity_bool {
+ \opacity_select:n { \l_rpgicons_icon_opacity_text_fp }
+ }
+ \hcoffin_set:Ne \l__rpgicons_icon_label_coffin {#3}
+ \draw_coffin_use:Nnn \l__rpgicons_icon_label_coffin { hc } { vc }
+ \draw_scope_end:
+ }
+ \draw_scope_end:
+ \draw_end:
+ \bool_if:NT \l_rpgicons_icon_accessible_full_bool {
+ \pdf_emc:
+ }
+}
+
+\str_new:N \l__rpgicons_icon_integer_str
+\cs_generate_variant:Nn \str_if_eq:nnTF { ne }
+\NewDocumentCommand { \RPGIconsDie } { O{normal} m O{} m } {
+ \group_begin:
+ \keys_set_groups:nne { rpgicons / local ~ options } { extra } {#3}
+ \keys_set:ne { rpgicons / local ~ options } { \clist_use:Nn \l_rpgicons_types_every_die_style_clist { , } }
+ \str_set:Ne \l__rpgicons_icon_integer_str {#4}
+ \hspace { \l_rpgicons_icon_before_sep_dim }
+ \str_if_eq:neTF { large } {#1} {
+ \RPGIconsUseIcon[scale=.675, #3][#4]{#2}
+ } {
+ \str_if_empty:NF \l__rpgicons_icon_integer_str { \str_use:N \l__rpgicons_icon_integer_str \, }
+ \RPGIconsUseIcon[scale=.333, #3]{#2}
+ }
+ \hspace { \l_rpgicons_icon_after_sep_dim }
+ \group_end:
+}
+\cs_if_exist:NF \die { \cs_new_eq:NN \die \RPGIconsDie }
+
+\NewDocumentCommand { \RPGIconsAbility } { O{positive} m O{} } {
+ \group_begin:
+ \keys_set_groups:nne { rpgicons / local ~ options } { extra } {#3}
+ \keys_set:ne { rpgicons / local ~ options } { \clist_use:Nn \l_rpgicons_types_every_ability_style_clist { , } }
+ \hspace { \l_rpgicons_icon_before_sep_dim }
+ \str_if_eq:neTF { negative } {#1} {
+ \RPGIconsUseIcon*[frame=ability, scale=.333, #3]{#2}
+ } {
+ \RPGIconsUseIcon[scale=.333, #3]{#2}
+ }
+ \hspace { \l_rpgicons_icon_after_sep_dim }
+ \group_end:
+}
+\cs_if_exist:NF \ability { \cs_new_eq:NN \ability \RPGIconsAbility }
+
+\NewDocumentCommand { \RPGIconsSaving } { O{} m O{} } {
+ \group_begin:
+ \keys_set_groups:nne { rpgicons / local ~ options } { extra } {#3}
+ \keys_set:ne { rpgicons / local ~ options } { \clist_use:Nn \l_rpgicons_types_every_saving_style_clist { , } }
+ \hspace { \l_rpgicons_icon_before_sep_dim }
+ \str_if_eq:neTF { empty } {#1} {
+ \RPGIconsUseIcon[frame=saving, scale=.333, #3]{}
+ } {
+ \RPGIconsUseIcon[frame=saving, scale=.333, #3]{#2}
+ }
+ \hspace { \l_rpgicons_icon_after_sep_dim }
+ \group_end:
+}
+\cs_if_exist:NF \saving { \cs_new_eq:NN \saving \RPGIconsSaving }
+
+\NewDocumentCommand { \RPGIconsSpell } { m O{} } {
+ \group_begin:
+ \keys_set_groups:nne { rpgicons / local ~ options } { extra } {#2}
+ \keys_set:ne { rpgicons / local ~ options } { \clist_use:Nn \l_rpgicons_types_every_spell_style_clist { , } }
+ \hspace { \l_rpgicons_icon_before_sep_dim }
+ \RPGIconsUseIcon[scale=.333, #2]{#1}
+ \hspace { \l_rpgicons_icon_after_sep_dim }
+ \group_end:
+}
+\cs_if_exist:NF \spell { \cs_new_eq:NN \spell \RPGIconsSpell }
+
+\NewDocumentCommand { \RPGIconsSpellschool } { O{positive} m O{} } {
+ \group_begin:
+ \keys_set_groups:nne { rpgicons / local ~ options } { extra } {#3}
+ \keys_set:ne { rpgicons / local ~ options } { \clist_use:Nn \l_rpgicons_types_every_spellschool_style_clist { , } }
+ \hspace { \l_rpgicons_icon_before_sep_dim }
+ \str_if_eq:neTF { negative } {#1} {
+ \RPGIconsUseIcon*[frame=spellschool, scale=.333, #3]{#2}
+ } {
+ \RPGIconsUseIcon[frame=spellschool, scale=.333, #3]{#2}
+ }
+ \hspace { \l_rpgicons_icon_after_sep_dim }
+ \group_end:
+}
+\cs_if_exist:NF \spellschool { \cs_new_eq:NN \spellschool \RPGIconsSpellschool }
+
+\NewDocumentCommand { \RPGIconsDamage } { m O{} } {
+ \group_begin:
+ \keys_set_groups:nne { rpgicons / local ~ options } { extra } {#2}
+ \keys_set:ne { rpgicons / local ~ options } { \clist_use:Nn \l_rpgicons_types_every_damage_style_clist { , } }
+ \hspace { \l_rpgicons_icon_before_sep_dim }
+ \RPGIconsUseIcon[frame=damage, scale=.333, #2]{#1}
+ \hspace { \l_rpgicons_icon_after_sep_dim }
+ \group_end:
+}
+\cs_if_exist:NF \damage { \cs_new_eq:NN \damage \RPGIconsDamage }
+
+\NewDocumentCommand { \RPGIconsAttack } { m O{} } {
+ \group_begin:
+ \keys_set_groups:nne { rpgicons / local ~ options } { extra } {#2}
+ \keys_set:ne { rpgicons / local ~ options } { \clist_use:Nn \l_rpgicons_types_every_attack_style_clist { , } }
+ \hspace { \l_rpgicons_icon_before_sep_dim }
+ \RPGIconsUseIcon[scale=.333, #2]{#1}
+ \hspace { \l_rpgicons_icon_after_sep_dim }
+ \group_end:
+}
+\cs_if_exist:NF \attack { \cs_new_eq:NN \attack \RPGIconsAttack }
+
+\NewDocumentCommand { \RPGIconsCondition } { m O{} } {
+ \group_begin:
+ \keys_set_groups:nne { rpgicons / local ~ options } { extra } {#2}
+ \keys_set:ne { rpgicons / local ~ options } { \clist_use:Nn \l_rpgicons_types_every_condition_style_clist { , } }
+ \hspace { \l_rpgicons_icon_before_sep_dim }
+ \RPGIconsUseIcon[scale=.333, #2]{#1}
+ \hspace { \l_rpgicons_icon_after_sep_dim }
+ \group_end:
+}
+\cs_if_exist:NF \condition { \cs_new_eq:NN \condition \RPGIconsCondition }
+
+% ROLL SYNTAX
+
+\regex_new:N \l__rpgicons_roll_syntax_die_regex
+\cs_generate_variant:Nn \regex_set:Nn { Ne }
+\cs_new:Npn \rpgicons_roll_syntax_die_set:n #1 {
+ \regex_set:Ne \l__rpgicons_roll_syntax_die_regex { [ \clist_use:nn {#1} { } ] }
+}
+
+\keys_define:nn { rpgicons / local ~ options } {
+ roll ~ syntax .code:n = { \rpgicons_roll_syntax_die_set:n {#1} } ,
+ roll ~ syntax .initial:n = { d , D } ,
+}
+
+\cs_new:Npn \rpgicons_roll_syntax_convert:n #1 {
+ \str_case:nnF {#1} {
+ { 2 } { twoside }
+ { 4 } { fourside }
+ { 6 } { sixside }
+ { 8 } { eightside }
+ { 10 } { tenside }
+ { 12 } { twelveside }
+ { 20 } { twentyside }
+ { 100 } { hundredside }
+ { F } { fudge }
+ }
+ {#1}
+}
+
+\seq_new:N \l__rpgicons_roll_syntax_seq
+\tl_new:N \l__rpgicons_roll_syntax_part_tl
+\regex_new:N \l__rpgicons_roll_syntax_split_regex
+\regex_new:N \l__rpgicons_roll_syntax_plusminus_regex
+\regex_new:N \l__rpgicons_roll_syntax_times_regex
+\bool_if:NTF \l__rpgicons_unicode_mode_bool {
+ \regex_set:Nn \l__rpgicons_roll_syntax_split_regex { \s*([\+\-\x{2212}x\*\x{00D7}])\s* }
+ \regex_set:Nn \l__rpgicons_roll_syntax_plusminus_regex { \A([\+\-\x{2212}])\Z }
+ \regex_set:Nn \l__rpgicons_roll_syntax_times_regex { \A([x\*\x{00D7}])\Z }
+} {
+ \regex_set:Nn \l__rpgicons_roll_syntax_split_regex { \s*([\+\-x\*\x{00D7}])\s* }
+ \regex_set:Nn \l__rpgicons_roll_syntax_plusminus_regex { \A([\+\-])\Z }
+ \regex_set:Nn \l__rpgicons_roll_syntax_times_regex { \A([x\*\x{00D7}])\Z }
+}
+\regex_new:N \l__rpgicons_roll_syntax_dice_regex
+\cs_new:Npn \rpgicons_roll_syntax_parse:n #1 {
+ \regex_set:Nn \l__rpgicons_roll_syntax_dice_regex { \A(\d*)\ur{l__rpgicons_roll_syntax_die_regex}([F\d]+)\Z }
+ \regex_split:NnN \l__rpgicons_roll_syntax_split_regex {#1} \l__rpgicons_roll_syntax_seq
+ \seq_map_inline:Nn \l__rpgicons_roll_syntax_seq {
+ \tl_set:Ne \l__rpgicons_roll_syntax_part_tl {##1}
+ \regex_replace_case_once:nNTF {
+ { \l__rpgicons_roll_syntax_plusminus_regex } { \c{,} $\1$ \c{,} }
+ { \l__rpgicons_roll_syntax_times_regex } { \c{,} $\c{times}$ \c{,} }
+ { \l__rpgicons_roll_syntax_dice_regex }
+ { \c{ RPGIconsDie } { \c{ rpgicons_roll_syntax_convert:n } { \2 } } { \1 } }
+ } \l__rpgicons_roll_syntax_part_tl
+ { \tl_use:N \l__rpgicons_roll_syntax_part_tl }
+ { \tl_use:N \l__rpgicons_roll_syntax_part_tl }
+ }
+}
+
+\NewDocumentCommand{\RPGIconsRoll}{ m }{
+ \rpgicons_roll_syntax_parse:n {#1}
+}
+\cs_if_exist:NF \roll { \cs_new_eq:NN \roll \RPGIconsRoll }
+
+% EOF \ No newline at end of file
diff --git a/macros/latex/contrib/rpgicons/rpgicons-pgf.sty b/macros/latex/contrib/rpgicons/rpgicons-pgf.sty
new file mode 100644
index 0000000000..0e0c037187
--- /dev/null
+++ b/macros/latex/contrib/rpgicons/rpgicons-pgf.sty
@@ -0,0 +1,2596 @@
+% File: rpgicons-pgf.sty
+% Copyright 2024 Jasper Habicht (mail(at)jasperhabicht.de).
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License version 1.3c,
+% available at http://www.latex-project.org/lppl/.
+%
+% This file is part of the `rpgicons' package (The Work in LPPL)
+% and all files in that bundle must be distributed together.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{rpgicons-pgf}[2024-05-15 rpg Icons Package (PGF Variant) (1.8.3)]
+
+% provide pics option
+\newif\ifrpgicons@pics\rpgicons@picsfalse
+\DeclareOption{pics}{\rpgicons@picstrue}
+\ProcessOptions\relax
+
+\RequirePackage{tikz}
+\newlength{\rpgicons@beforesep}
+\newlength{\rpgicons@aftersep}
+\newlength{\rpgicons@baseline}
+
+\def\rpgicons@allshapes{%
+ twoside, fourside, sixside, eightside, tenside, twelveside, twentyside, hundredside,
+ fudge, sixside one, sixside two, sixside three, sixside four, sixside five,
+ sixside six, sixside seven, sixside eight, sixside nine, fudge plus, fudge minus,
+ strength, dexterity, dexterity alt, constitution, intelligence, wisdom, charisma,
+ resilience, sanity, perception, luck, armor, proficiency,
+ linear, conic, quadratic, cubic, spheric, cylindric, verbal, somatic, material, focus,
+ abjuration, conjuration, divination, enchantment, evocation, illusion, necromancy, transmutation,
+ acid, bludgeoning, cold, fire, force, lightning, necrotic, piercing, poison, psychic,
+ radiant, slashing, thunder, healing,
+ melee, ranged, magic, singlehanded, doublehanded,
+ buff, blinded, charmed, deafened, exhausted, frightened, grappled, incapacitated, invisible,
+ paralyzed, petrified, poisoned, prone, restrained, stunned, unconscious, hearing, seeing%
+}
+
+\tikzset{
+ rpg icons/background color/.code={
+ \colorlet{rpgicons@bg}{#1}
+ },
+ rpg icons/background color={white},
+ rpg icons/before sep/.code={
+ \setlength{\rpgicons@beforesep}{#1}
+ },
+ rpg icons/before sep={.05em},
+ rpg icons/after sep/.code={
+ \setlength{\rpgicons@aftersep}{#1}
+ },
+ rpg icons/after sep={.05em},
+ rpg icons/baseline/.code={
+ \setlength{\rpgicons@baseline}{#1}
+ },
+ rpg icons/baseline={-3.5pt},
+ rpg icons/.style={},
+ rpg icons/.append style={
+ every node/.style={
+ line cap=round,
+ line join=round
+ }
+ },
+ %
+ rpg icons/every die/.style={},
+ rpg icons/every ability/.style={},
+ rpg icons/every saving/.style={},
+ rpg icons/every spell/.style={},
+ rpg icons/every spellschool/.style={},
+ rpg icons/every damage/.style={},
+ rpg icons/every attack/.style={},
+ rpg icons/every condition/.style={},
+ %
+ rpg icons/create every style/.code={
+ \tikzset{
+ rpg icons/every #1/.style={}
+ }
+ },
+ rpg icons/create every style/.list/.expanded={%
+ \rpgicons@allshapes%
+ }
+}
+
+% make tikz icons usable inside tikz environments
+\NewDocumentCommand{\provideprotectedrpgicon}{ m o m O{} m }{%
+ \expandafter\newsavebox\csname rpgicons@protectbox@#5\endcsname%
+ \expandafter\savebox\csname rpgicons@protectbox@#5\endcsname{%
+ \IfValueTF{#2}{%
+ \csname #1\endcsname[#2]{#3}[#4]{}%
+ }{%
+ \csname #1\endcsname{#3}[#4]{}%
+ }%
+ }%
+}
+
+\NewDocumentCommand{\useprotectedrpgicon}{ m }{%
+ \expandafter\usebox\csname rpgicons@protectbox@#1\endcsname%
+}
+
+% DICE
+
+% disc
+\pgfdeclareshape{twoside}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0cm}{.25cm}}{\pgfpoint{.425cm}{0cm}}
+ \pgfusepath{draw} % draw ellipse
+ }
+}
+
+% tetrahedron
+\pgfdeclareshape{fourside}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{0cm}{.35cm}}
+ \pgfpathlineto{\pgfpoint{.433cm}{-.4cm}}
+ \pgfpathlineto{\pgfpoint{-.433cm}{-.4cm}}
+ \pgfpathclose
+ \pgfusepath{draw} % draw triangle
+ }
+}
+
+% cube
+\pgfdeclareshape{sixside}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathrectanglecorners{\pgfpoint{.4cm}{.4cm}}{\pgfpoint{-.4cm}{-.4cm}}
+ \pgfusepath{draw} % draw rectangle
+ }
+}
+
+% octahedron
+\pgfdeclareshape{eightside}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{0cm}{.5cm}}
+ \pgfpathlineto{\pgfpoint{.433cm}{.25cm}}
+ \pgfpathlineto{\pgfpoint{.433cm}{-.25cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.5cm}}
+ \pgfpathlineto{\pgfpoint{-.433cm}{-.25cm}}
+ \pgfpathlineto{\pgfpoint{-.433cm}{.25cm}}
+ \pgfpathclose
+ \pgfpathlineto{\pgfpoint{.433cm}{-.25cm}}
+ \pgfpathlineto{\pgfpoint{-.433cm}{-.25cm}}
+ \pgfpathclose
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% decahedron
+\pgfdeclareshape{tenside}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{0cm}{.5cm}}
+ \pgfpathlineto{\pgfpoint{.475cm}{.1cm}}
+ \pgfpathlineto{\pgfpoint{.475cm}{-.1cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.5cm}}
+ \pgfpathlineto{\pgfpoint{-.475cm}{-.1cm}}
+ \pgfpathlineto{\pgfpoint{-.475cm}{.1cm}}
+ \pgfpathclose
+ \pgfpathlineto{\pgfpoint{.294cm}{-.154cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.3cm}}
+ \pgfpathlineto{\pgfpoint{-.294cm}{-.154cm}}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpoint{.294cm}{-.154cm}}
+ \pgfpathlineto{\pgfpoint{.475cm}{-.1cm}}
+ \pgfpathmoveto{\pgfpoint{-.475cm}{-.1cm}}
+ \pgfpathlineto{\pgfpoint{-.294cm}{-.154cm}}
+ \pgfpathmoveto{\pgfpoint{0cm}{-.5cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.3cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% dodecahedron
+\pgfdeclareshape{twelveside}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{0cm}{.5cm}}
+ \pgfpathlineto{\pgfpoint{0.294cm}{.405cm}}
+ \pgfpathlineto{\pgfpoint{.475cm}{.173cm}}
+ \pgfpathlineto{\pgfpoint{.475cm}{-.173cm}}
+ \pgfpathlineto{\pgfpoint{.294cm}{-.405cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.5cm}}
+ \pgfpathlineto{\pgfpoint{-.294cm}{-.405cm}}
+ \pgfpathlineto{\pgfpoint{-.475cm}{-.173cm}}
+ \pgfpathlineto{\pgfpoint{-.475cm}{.173cm}}
+ \pgfpathlineto{\pgfpoint{-.294cm}{.405cm}}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpoint{0cm}{.349cm}}
+ \pgfpathlineto{\pgfpoint{.332cm}{.108cm}}
+ \pgfpathlineto{\pgfpoint{.205cm}{-.282cm}}
+ \pgfpathlineto{\pgfpoint{-.205cm}{-.282cm}}
+ \pgfpathlineto{\pgfpoint{-.332cm}{.108cm}}
+ \pgfpathclose
+ \pgfpathlineto{\pgfpoint{0cm}{.5cm}}
+ \pgfpathmoveto{\pgfpoint{.475cm}{.173cm}}
+ \pgfpathlineto{\pgfpoint{.332cm}{.108cm}}
+ \pgfpathmoveto{\pgfpoint{.294cm}{-.405cm}}
+ \pgfpathlineto{\pgfpoint{.205cm}{-.282cm}}
+ \pgfpathmoveto{\pgfpoint{-.294cm}{-.405cm}}
+ \pgfpathlineto{\pgfpoint{-.205cm}{-.282cm}}
+ \pgfpathmoveto{\pgfpoint{-.475cm}{.173cm}}
+ \pgfpathlineto{\pgfpoint{-.332cm}{.108cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% icosahedron
+\pgfdeclareshape{twentyside}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{0cm}{.5cm}}
+ \pgfpathlineto{\pgfpoint{.454cm}{.262cm}}
+ \pgfpathlineto{\pgfpoint{.454cm}{-.262cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.5cm}}
+ \pgfpathlineto{\pgfpoint{-.454cm}{-.262cm}}
+ \pgfpathlineto{\pgfpoint{-.454cm}{.262cm}}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpoint{0cm}{.292cm}}
+ \pgfpathlineto{\pgfpoint{.253cm}{-.146cm}}
+ \pgfpathlineto{\pgfpoint{-.253cm}{-.146cm}}
+ \pgfpathclose
+ \pgfpathlineto{\pgfpoint{.454cm}{.262cm}}
+ \pgfpathlineto{\pgfpoint{.253cm}{-.146cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.5cm}}
+ \pgfpathlineto{\pgfpoint{-.253cm}{-.146cm}}
+ \pgfpathlineto{\pgfpoint{-.454cm}{.262cm}}
+ \pgfpathclose
+ \pgfpathlineto{\pgfpoint{0cm}{.5cm}}
+ \pgfpathmoveto{\pgfpoint{.454cm}{-.262cm}}
+ \pgfpathlineto{\pgfpoint{.253cm}{-.146cm}}
+ \pgfpathmoveto{\pgfpoint{-.454cm}{-.262cm}}
+ \pgfpathlineto{\pgfpoint{-.253cm}{-.146cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% sphere
+\pgfdeclareshape{hundredside}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathcircle{\pgfpointorigin}{.425cm}
+ \pgfpathmoveto{\pgfpoint{.425cm}{0cm}}
+ \pgfpatharc{180}{50}{-.425cm and -.2cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{-.425cm}}
+ \pgfpatharc{270}{140}{-.2cm and .425cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% cube (one)
+\pgfdeclareshape{sixside one}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathrectanglecorners{\pgfpoint{.4cm}{.4cm}}{\pgfpoint{-.4cm}{-.4cm}}
+ \pgfusepath{draw} % draw rectangle
+ \foreach \x/\y in {
+ 0cm/0cm
+ } {
+ \pgfpathcircle{\pgfpoint{\x}{\y}}{2pt}
+ }
+ \pgfusepath{fill}
+ }
+}
+
+% cube (two)
+\pgfdeclareshape{sixside two}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathrectanglecorners{\pgfpoint{.4cm}{.4cm}}{\pgfpoint{-.4cm}{-.4cm}}
+ \pgfusepath{draw} % draw rectangle
+ \foreach \x/\y in {
+ .2cm/-.2cm, -.2cm/.2cm
+ } {
+ \pgfpathcircle{\pgfpoint{\x}{\y}}{2pt}
+ }
+ \pgfusepath{fill}
+ }
+}
+
+% cube (three)
+\pgfdeclareshape{sixside three}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathrectanglecorners{\pgfpoint{.4cm}{.4cm}}{\pgfpoint{-.4cm}{-.4cm}}
+ \pgfusepath{draw} % draw rectangle
+ \foreach \x/\y in {
+ .2cm/-.2cm, 0cm/0cm, -.2cm/.2cm
+ } {
+ \pgfpathcircle{\pgfpoint{\x}{\y}}{2pt}
+ }
+ \pgfusepath{fill}
+ }
+}
+
+% cube (four)
+\pgfdeclareshape{sixside four}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathrectanglecorners{\pgfpoint{.4cm}{.4cm}}{\pgfpoint{-.4cm}{-.4cm}}
+ \pgfusepath{draw} % draw rectangle
+ \foreach \x/\y in {
+ -.2cm/.2cm, .2cm/.2cm,
+ -.2cm/-.2cm, .2cm/-.2cm
+ } {
+ \pgfpathcircle{\pgfpoint{\x}{\y}}{2pt}
+ }
+ \pgfusepath{fill}
+ }
+}
+
+% cube (five)
+\pgfdeclareshape{sixside five}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathrectanglecorners{\pgfpoint{.4cm}{.4cm}}{\pgfpoint{-.4cm}{-.4cm}}
+ \pgfusepath{draw} % draw rectangle
+ \foreach \x/\y in {
+ -.2cm/.2cm, .2cm/.2cm,
+ 0cm/0cm,
+ -.2cm/-.2cm, .2cm/-.2cm
+ } {
+ \pgfpathcircle{\pgfpoint{\x}{\y}}{2pt}
+ }
+ \pgfusepath{fill}
+ }
+}
+
+% cube (six)
+\pgfdeclareshape{sixside six}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathrectanglecorners{\pgfpoint{.4cm}{.4cm}}{\pgfpoint{-.4cm}{-.4cm}}
+ \pgfusepath{draw} % draw rectangle
+ \foreach \x/\y in {
+ -.2cm/.2cm, .2cm/.2cm,
+ -.2cm/0cm, .2cm/0cm,
+ -.2cm/-.2cm, .2cm/-.2cm
+ } {
+ \pgfpathcircle{\pgfpoint{\x}{\y}}{2pt}
+ }
+ \pgfusepath{fill}
+ }
+}
+
+% cube (seven)
+\pgfdeclareshape{sixside seven}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathrectanglecorners{\pgfpoint{.4cm}{.4cm}}{\pgfpoint{-.4cm}{-.4cm}}
+ \pgfusepath{draw} % draw rectangle
+ \foreach \x/\y in {
+ -.2cm/.2cm, .2cm/.2cm,
+ -.2cm/0cm, 0cm/0cm, .2cm/0cm,
+ -.2cm/-.2cm, .2cm/-.2cm
+ } {
+ \pgfpathcircle{\pgfpoint{\x}{\y}}{2pt}
+ }
+ \pgfusepath{fill}
+ }
+}
+
+% cube (eight)
+\pgfdeclareshape{sixside eight}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathrectanglecorners{\pgfpoint{.4cm}{.4cm}}{\pgfpoint{-.4cm}{-.4cm}}
+ \pgfusepath{draw} % draw rectangle
+ \foreach \x/\y in {
+ -.2cm/.2cm, 0cm/.2cm, .2cm/.2cm,
+ -.2cm/0cm, .2cm/0cm,
+ -.2cm/-.2cm, 0cm/-.2cm, .2cm/-.2cm
+ } {
+ \pgfpathcircle{\pgfpoint{\x}{\y}}{2pt}
+ }
+ \pgfusepath{fill}
+ }
+}
+
+% cube (nine)
+\pgfdeclareshape{sixside nine}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathrectanglecorners{\pgfpoint{.4cm}{.4cm}}{\pgfpoint{-.4cm}{-.4cm}}
+ \pgfusepath{draw} % draw rectangle
+ \foreach \x/\y in {
+ -.2cm/.2cm, 0cm/.2cm, .2cm/.2cm,
+ -.2cm/0cm, 0cm/0cm, .2cm/0cm,
+ -.2cm/-.2cm, 0cm/-.2cm, .2cm/-.2cm
+ } {
+ \pgfpathcircle{\pgfpoint{\x}{\y}}{2pt}
+ }
+ \pgfusepath{fill}
+ }
+}
+
+% cube (fudge)
+\pgfdeclareshape{fudge}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathrectanglecorners{\pgfpoint{.4cm}{.4cm}}{\pgfpoint{-.4cm}{-.4cm}}
+ \pgfusepath{draw} % draw rectangle
+ \pgfpathmoveto{\pgfpoint{-.15cm}{.1cm}}
+ \pgfpathlineto{\pgfpoint{.15cm}{.1cm}}
+ \pgfpathmoveto{\pgfpoint{0cm}{.25cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.05cm}}
+ \pgfpathmoveto{\pgfpoint{-.15cm}{-.2cm}}
+ \pgfpathlineto{\pgfpoint{.15cm}{-.2cm}}
+ \pgfusepath{draw}
+ }
+}
+
+% cube (fudge plus)
+\pgfdeclareshape{fudge plus}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathrectanglecorners{\pgfpoint{.4cm}{.4cm}}{\pgfpoint{-.4cm}{-.4cm}}
+ \pgfusepath{draw} % draw rectangle
+ \pgfpathmoveto{\pgfpoint{0cm}{.15cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.15cm}}
+ \pgfpathmoveto{\pgfpoint{-.15cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{.15cm}{0cm}}
+ \pgfusepath{draw}
+ }
+}
+
+% cube (fudge)
+\pgfdeclareshape{fudge minus}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathrectanglecorners{\pgfpoint{.4cm}{.4cm}}{\pgfpoint{-.4cm}{-.4cm}}
+ \pgfusepath{draw} % draw rectangle
+ \pgfpathmoveto{\pgfpoint{-.15cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{.15cm}{0cm}}
+ \pgfusepath{draw}
+ }
+}
+
+\ExplSyntaxOn
+\NewDocumentCommand{\rpgicons@ifEmptyF}{ m m }{
+ \tl_if_empty:nF { #1 } { #2 }
+}
+\ExplSyntaxOff
+
+\NewDocumentCommand{\rpgiconsdie}{ O{normal} m O{} m }{%
+ \edef\rpgicons@diceiconnrmlrg{#1}%
+ \edef\rpgicons@diceiconlrg{large}%
+ \ifx\rpgicons@diceiconnrmlrg\rpgicons@diceiconlrg%
+ \def\rpgicons@diceiconfg{fglrg}\else%
+ \def\rpgicons@diceiconfg{fgnrm}\fi%
+ \ifx\rpgicons@diceiconnrmlrg\rpgicons@diceiconlrg\else\rpgicons@ifEmptyF{#4}{#4\,}\fi%
+ \hspace{\rpgicons@beforesep}%
+ \tikz[rpg icons, rpg icons/every die, rpg icons/every #2,
+ baseline=\rpgicons@baseline, fgnrm/.style={scale=.333}, fglrg/.style={scale=.675}, #3] {
+ \node[#2, \rpgicons@diceiconfg, font={\footnotesize}] (0cm,0cm)
+ {\ifx\rpgicons@diceiconnrmlrg\rpgicons@diceiconlrg\textbf{#4}\fi};
+ \path[draw=none, \rpgicons@diceiconfg] ([yshift=-1pt].425cm,.425cm) rectangle ([yshift=1pt]-.425cm,-.425cm);
+ }%
+ \hspace{\rpgicons@aftersep}%
+}
+\@ifundefined{die}{\NewCommandCopy\die\rpgiconsdie}{}
+
+% ABILITIES
+
+% strength
+\pgfdeclareshape{strength}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{-.075cm}}{\pgfpointpolar{90}{.425cm}}}
+ \pgfpatharc{90}{60}{.425cm}
+ \pgfpatharc{200}{-40}{.1cm}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{-.075cm}}{\pgfpointpolar{45}{.425cm}}}
+ \pgfpatharc{45}{-20}{.425cm}
+ \pgfpatharc{-50}{-80}{.35cm}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{-.075cm}}{\pgfpointpolar{90}{.425cm}}}
+ \pgfpatharc{90}{120}{.425cm}
+ \pgfpatharc{-20}{220}{.1cm}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{-.075cm}}{\pgfpointpolar{135}{.425cm}}}
+ \pgfpatharc{135}{200}{.425cm}
+ \pgfpatharc{230}{260}{.35cm}
+ \pgfpathmoveto{\pgfpoint{-.2cm}{-.025cm}}
+ \pgfpathlineto{\pgfpoint{-.1cm}{-.05cm}}
+ \pgfpathlineto{\pgfpoint{-.125cm}{-.325cm}}
+ \pgfpatharc{180}{360}{.125cm and .1cm}
+ \pgfpathlineto{\pgfpoint{.1cm}{-.05cm}}
+ \pgfpathlineto{\pgfpoint{.2cm}{-.025cm}}
+ \pgfpathmoveto{\pgfpoint{0cm}{-.3cm}}
+ \pgfpatharc{90}{70}{.1cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{-.3cm}}
+ \pgfpatharc{90}{110}{.1cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% dexterity
+\pgfdeclareshape{dexterity}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{-.075cm}}{\pgfpointpolar{90}{.425cm}}}
+ \pgfpatharc{90}{65}{.425cm}
+ \pgfpatharc{200}{90}{.1cm and .075cm}
+ \pgfpatharc{90}{-30}{.1cm and .075cm}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{-.075cm}}{\pgfpointpolar{45}{.425cm}}}
+ \pgfpatharc{45}{-20}{.425cm and .35cm}
+ \pgfpatharc{110}{160}{.175cm}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{-.075cm}}{\pgfpointpolar{90}{.425cm}}}
+ \pgfpatharc{90}{115}{.425cm}
+ \pgfpatharc{-20}{90}{.1cm and .075cm}
+ \pgfpatharc{90}{220}{.1cm and .075cm}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{-.075cm}}{\pgfpointpolar{135}{.425cm}}}
+ \pgfpatharc{135}{200}{.425cm and .35cm}
+ \pgfpatharc{70}{20}{.175cm}
+ \pgfpathmoveto{\pgfpoint{-.075cm}{-.175cm}}
+ \pgfpatharc{180}{360}{.075cm and .05cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{-.225cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.25cm}}
+ \pgfpathmoveto{\pgfpoint{-.2cm}{.025cm}}
+ \pgfpathlineto{\pgfpoint{-.075cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{-.125cm}{-.075cm}}
+ \pgfpathmoveto{\pgfpoint{.125cm}{-.075cm}}
+ \pgfpathlineto{\pgfpoint{.075cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{.2cm}{.025cm}}
+ \pgfpathmoveto{\pgfpoint{0cm}{-.25cm}}
+ \pgfpatharc{360}{140}{.1cm and .075cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{-.25cm}}
+ \pgfpatharc{180}{400}{.1cm and .075cm}
+ \pgfpathmoveto{\pgfpoint{-.1cm}{-.325cm}}
+ \pgfpathlineto{\pgfpoint{-.1cm}{-.375cm}}
+ \pgfpatharc{180}{360}{.1cm and .05cm}
+ \pgfpathlineto{\pgfpoint{.1cm}{-.325cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% dexterity alt
+\pgfdeclareshape{dexterity alt}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{-.15cm}}{\pgfpointpolar{90}{.425cm}}}
+ \pgfpatharc{90}{75}{.425cm}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{-.15cm}}{\pgfpointpolar{90}{.425cm}}}
+ \pgfpatharc{90}{105}{.425cm}
+ \pgfpathmoveto{\pgfpoint{.125cm}{.175cm}}
+ \pgfpathlineto{\pgfpoint{.375cm}{.425cm}}
+ \pgfpatharc{30}{-20}{.25cm}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{0cm}{-.1cm}}{\pgfpointpolar{30}{.425cm}}}
+ \pgfpatharc{30}{-45}{.425cm and .35cm}
+ \pgfpathmoveto{\pgfpoint{-.125cm}{.175cm}}
+ \pgfpathlineto{\pgfpoint{-.375cm}{.425cm}}
+ \pgfpatharc{150}{200}{.25cm}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{0cm}{-.1cm}}{\pgfpointpolar{150}{.425cm}}}
+ \pgfpatharc{150}{225}{.425cm and .35cm}
+ \pgfpathmoveto{\pgfpoint{.075cm}{-.075cm}}
+ \pgfpatharc{170}{90}{.15cm and .05cm}
+ \pgfpathmoveto{\pgfpoint{-.075cm}{-.075cm}}
+ \pgfpatharc{10}{90}{.15cm and .05cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{-.275cm}}
+ \pgfpatharc{0}{90}{.075cm and .05cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{-.275cm}}
+ \pgfpatharc{180}{90}{.075cm and .05cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{-.275cm}}
+ \pgfpatharc{360}{180}{.1cm and .075cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{-.275cm}}
+ \pgfpatharc{180}{360}{.1cm and .075cm}
+ \pgfpathmoveto{\pgfpoint{-.1cm}{-.35cm}}
+ \pgfpathlineto{\pgfpoint{-.1cm}{-.375cm}}
+ \pgfpatharc{180}{360}{.1cm and .05cm}
+ \pgfpathlineto{\pgfpoint{.1cm}{-.35cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% constitution
+\pgfdeclareshape{constitution}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{0cm}{.25cm}}
+ \pgfpathlineto{\pgfpoint{.125cm}{.25cm}}
+ \pgfpatharc{-90}{-30}{.325cm}
+ \pgfpatharc{0}{-80}{.3cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{.25cm}}
+ \pgfpathlineto{\pgfpoint{-.125cm}{.25cm}}
+ \pgfpatharc{270}{210}{.325cm}
+ \pgfpatharc{180}{260}{.3cm}
+ \pgfpathmoveto{\pgfpoint{.325cm}{.1cm}}
+ \pgfpathlineto{\pgfpoint{.425cm}{.075cm}}
+ \pgfpatharc{0}{-90}{.175cm and .1cm}
+ \pgfpathlineto{\pgfpoint{.2cm}{-.15cm}}
+ \pgfpathmoveto{\pgfpoint{-.325cm}{.1cm}}
+ \pgfpathlineto{\pgfpoint{-.425cm}{.075cm}}
+ \pgfpatharc{180}{270}{.175cm and .1cm}
+ \pgfpathlineto{\pgfpoint{-.2cm}{-.15cm}}
+ \pgfpathmoveto{\pgfpoint{-.15cm}{-.225cm}}
+ \pgfpatharc{90}{270}{.1cm}
+ \pgfpathlineto{\pgfpoint{.15cm}{-.425cm}}
+ \pgfpatharc{-90}{90}{.1cm}
+ \pgfpathmoveto{\pgfpoint{-.125cm}{-.35cm}}
+ \pgfpatharc{-90}{0}{.05cm}
+ \pgfpathmoveto{\pgfpoint{.125cm}{-.35cm}}
+ \pgfpatharc{90}{0}{-.05cm}
+ \pgfpathmoveto{\pgfpoint{-.125cm}{-.025cm}}
+ \pgfpathlineto{\pgfpoint{-.075cm}{-.05cm}}
+ \pgfpathlineto{\pgfpoint{-.075cm}{-.1cm}}
+ \pgfpathmoveto{\pgfpoint{.125cm}{-.025cm}}
+ \pgfpathlineto{\pgfpoint{.075cm}{-.05cm}}
+ \pgfpathlineto{\pgfpoint{.075cm}{-.1cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% intelligence
+\pgfdeclareshape{intelligence}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{-.2cm}}{\pgfpointpolar{90}{.425cm}}}
+ \pgfpatharc{90}{60}{.25cm}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{0cm}{-.1cm}}{\pgfpointpolar{60}{.6cm}}}
+ \pgfpatharc{40}{-2.5}{.425cm}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{-.2cm}}{\pgfpointpolar{90}{.425cm}}}
+ \pgfpatharc{90}{120}{.25cm}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{0cm}{-.1cm}}{\pgfpointpolar{120}{.6cm}}}
+ \pgfpatharc{140}{182.5}{.425cm}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{-.2cm}}{\pgfpointpolar{45}{.425cm}}}
+ \pgfpatharc{45}{0}{.425cm}
+ \pgfpathlineto{\pgfpoint{.2cm}{-.275cm}}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{-.2cm}}{\pgfpointpolar{135}{.425cm}}}
+ \pgfpatharc{135}{180}{.425cm}
+ \pgfpathlineto{\pgfpoint{-.2cm}{-.275cm}}
+ \pgfpathmoveto{\pgfpoint{-.2cm}{-.075cm}}
+ \pgfpathlineto{\pgfpoint{-.1cm}{-.1cm}}
+ \pgfpathlineto{\pgfpoint{-.075cm}{-.375cm}}
+ \pgfpatharc{180}{360}{.075cm and .05cm}
+ \pgfpathlineto{\pgfpoint{.1cm}{-.1cm}}
+ \pgfpathlineto{\pgfpoint{.2cm}{-.075cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% wisdom
+\pgfdeclareshape{wisdom}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{0cm}{.175cm}}
+ \pgfpatharc{60}{90}{.425cm}
+ \pgfpatharc{270}{240}{.425cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{.175cm}}
+ \pgfpatharc{120}{90}{.425cm}
+ \pgfpatharc{270}{300}{.425cm}
+ \pgfpathcircle{\pgfpoint{-.175cm}{0cm}}{.075cm}
+ \pgfpathcircle{\pgfpoint{.175cm}{0cm}}{.075cm}
+ \pgfpathmoveto{\pgfpoint{.075cm}{-.125cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.325cm}}
+ \pgfpathlineto{\pgfpoint{-.075cm}{-.125cm}}
+ \pgfpathmoveto{\pgfpoint{-.375cm}{.125cm}}
+ \pgfpatharc{150}{270}{.25cm}
+ \pgfpathmoveto{\pgfpoint{.375cm}{.125cm}}
+ \pgfpatharc{30}{-90}{.25cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% charisma
+\pgfdeclareshape{charisma}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{0cm}{.15cm}}
+ \pgfpatharc{270}{190}{.15cm and .1cm}
+ \pgfpatharc{10}{90}{.175cm and .225cm}
+ \pgfpatharc{40}{0}{.125cm and .175cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{.15cm}}
+ \pgfpatharc{270}{350}{.15cm and .1cm}
+ \pgfpatharc{170}{90}{.175cm and .225cm}
+ \pgfpatharc{140}{180}{.125cm and .175cm}
+ \pgfpathmoveto{\pgfpoint{-.2cm}{.125cm}}
+ \pgfpatharc{0}{90}{.175cm and .1cm}
+ \pgfpatharc{180}{270}{.15cm and .2cm}
+ \pgfpathlineto{\pgfpoint{-.25cm}{-.05cm}}
+ \pgfpatharc{40}{0}{.45cm}
+ \pgfpathlineto{\pgfpoint{0cm}{-.425cm}}
+ \pgfpathmoveto{\pgfpoint{.2cm}{.125cm}}
+ \pgfpatharc{180}{90}{.175cm and .1cm}
+ \pgfpatharc{0}{-90}{.15cm and .2cm}
+ \pgfpathlineto{\pgfpoint{.25cm}{-.05cm}}
+ \pgfpatharc{140}{180}{.45cm}
+ \pgfpathlineto{\pgfpoint{0cm}{-.425cm}}
+ \pgfpathmoveto{\pgfpoint{-.05cm}{-.275cm}}
+ \pgfpatharc{-30}{60}{.05cm}
+ \pgfpathmoveto{\pgfpoint{.05cm}{-.275cm}}
+ \pgfpatharc{210}{120}{.05cm}
+ \pgfpathmoveto{\pgfpoint{-.125cm}{-.05cm}}
+ \pgfpathlineto{\pgfpoint{-.05cm}{-.075cm}}
+ \pgfpathmoveto{\pgfpoint{.125cm}{-.05cm}}
+ \pgfpathlineto{\pgfpoint{.05cm}{-.075cm}}
+ \pgfpathmoveto{\pgfpoint{-.35cm}{-.05cm}}
+ \pgfpathlineto{\pgfpoint{-.425cm}{-.05cm}}
+ \pgfpatharc{30}{-30}{.15cm}
+ \pgfpatharc{80}{10}{.15cm}
+ \pgfpathlineto{\pgfpoint{-.25cm}{-.275cm}}
+ \pgfpathmoveto{\pgfpoint{.35cm}{-.05cm}}
+ \pgfpathlineto{\pgfpoint{.425cm}{-.05cm}}
+ \pgfpatharc{150}{210}{.15cm}
+ \pgfpatharc{100}{170}{.15cm}
+ \pgfpathlineto{\pgfpoint{.25cm}{-.275cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% resilience
+\pgfdeclareshape{resilience}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{-.425cm}{-.475cm}}{\pgfpointpolar{65}{.5cm}}}
+ \pgfpatharc{65}{90}{.5cm}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{0cm}{-.075cm}}{\pgfpointpolar{135}{.55cm}}}
+ \pgfpatharc{135}{45}{.55cm}
+ \pgfpathlineto{\pgfpoint{.425cm}{.025cm}}
+ \pgfpatharc{90}{115}{.5cm}
+ \pgfpathmoveto{\pgfpoint{.2cm}{.3cm}}
+ \pgfpathlineto{\pgfpoint{.125cm}{.275cm}}
+ \pgfpathlineto{\pgfpoint{.2cm}{.15cm}}
+ \pgfpathmoveto{\pgfpoint{.125cm}{.075cm}}
+ \pgfpathlineto{\pgfpoint{.05cm}{.05cm}}
+ \pgfpathmoveto{\pgfpoint{.15cm}{-.1cm}}
+ \pgfpatharc{200}{230}{.4cm}
+ \pgfpathmoveto{\pgfpoint{-.2cm}{.3cm}}
+ \pgfpathlineto{\pgfpoint{-.125cm}{.275cm}}
+ \pgfpathlineto{\pgfpoint{-.2cm}{.15cm}}
+ \pgfpathmoveto{\pgfpoint{-.125cm}{.075cm}}
+ \pgfpathlineto{\pgfpoint{-.05cm}{.05cm}}
+ \pgfpathmoveto{\pgfpoint{-.15cm}{-.1cm}}
+ \pgfpatharc{340}{310}{.4cm}
+ \pgfpathmoveto{\pgfpoint{-.065cm}{-.075cm}}
+ \pgfpathlineto{\pgfpoint{-.045cm}{-.425cm}}
+ \pgfpathlineto{\pgfpoint{.045cm}{-.425cm}}
+ \pgfpathlineto{\pgfpoint{.065cm}{-.075cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% sanity
+\pgfdeclareshape{sanity}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{-.125cm + .175cm * sin(30)}{.425cm - .175cm * cos(30)}}
+ {\pgfpointpolar{210}{.175cm}}}
+ \pgfpatharc{210}{120}{.175cm}
+ \pgfpathlineto{\pgfpointpolar{110}{.25cm}}
+ \pgfpatharc{110}{70}{.25cm}
+ \pgfpathlineto{\pgfpoint{.125cm}{.425cm}}
+ \pgfpatharc{420}{330}{.175cm}
+ \pgfpathmoveto{\pgfpoint{.25cm}{.1cm}}
+ \pgfpatharc{390}{305}{.15cm}
+ \pgfpathmoveto{\pgfpoint{-.25cm}{.1cm}}
+ \pgfpatharc{150}{235}{.15cm}
+ \pgfpathmoveto{\pgfpoint{-.15cm}{.075cm}}
+ \pgfpathlineto{\pgfpoint{-.1cm}{.05cm}}
+ \pgfpathlineto{\pgfpoint{-.1cm}{.025cm}}
+ \pgfpathmoveto{\pgfpoint{.15cm}{.075cm}}
+ \pgfpathlineto{\pgfpoint{.1cm}{.05cm}}
+ \pgfpathlineto{\pgfpoint{.1cm}{.025cm}}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{-.55cm}{-.35cm}}
+ {\pgfpointadd{\pgfpointpolar{135}{.125cm and .075cm}}{\pgfpointpolar{20}{.55cm}}}}
+ \pgfpatharc{380}{360}{.55cm}
+ \pgfpatharc{135}{405}{.125cm and .075cm}
+ \pgfpatharc{180}{160}{.55cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% perception
+\pgfdeclareshape{perception}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{.35cm}}{\pgfpointpolar{150}{.125cm}}}
+ \pgfpatharc{150}{390}{.125cm}
+ \pgfpathmoveto{\pgfpoint{-.3cm}{.425cm}}
+ \pgfpatharc{180}{360}{.3cm and .2cm}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{.425cm}}{\pgfpointpolar{330}{.3cm and .2cm}}}
+ \pgfpatharc{270}{350}{.15cm and .1cm}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{.425cm}}{\pgfpointpolar{210}{.3cm and .2cm}}}
+ \pgfpatharc{270}{190}{.15cm and .1cm}
+ \pgfpathmoveto{\pgfpoint{-.2cm}{.15cm}}
+ \pgfpathlineto{\pgfpoint{-.375cm}{.125cm}}
+ \pgfpatharc{210}{250}{.225cm}
+ \pgfpathmoveto{\pgfpoint{.2cm}{.15cm}}
+ \pgfpathlineto{\pgfpoint{.375cm}{.125cm}}
+ \pgfpatharc{330}{290}{.225cm}
+ \pgfpathmoveto{\pgfpoint{-.15cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{-.075cm}{-.025cm}}
+ \pgfpathlineto{\pgfpoint{-.075cm}{-.05cm}}
+ \pgfpathmoveto{\pgfpoint{.15cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{.075cm}{-.025cm}}
+ \pgfpathlineto{\pgfpoint{.075cm}{-.05cm}}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{-.075cm}{-.35cm + .075cm * ( 2 + sqrt(3) )}}
+ {\pgfpointpolar{195}{.1cm and .075cm}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{0cm}{-.35cm}}{\pgfpointpolar{195}{.1cm and .075cm}}}
+ \pgfpatharc{195}{345}{.1cm and .075cm}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{.075cm}{-.35cm + .075cm * ( 2 + sqrt(3) )}}
+ {\pgfpointpolar{345}{.1cm and .075cm}}}
+ \pgfpathmoveto{\pgfpoint{.025cm}{-.325cm}}
+ \pgfpatharc{0}{180}{.025cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% luck
+\pgfdeclareshape{luck}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{.1cm}{.15cm}}
+ \pgfpathlineto{\pgfpoint{.1cm}{-.05cm}}
+ \pgfpatharc{-75}{-15}{.425cm}
+ \pgfpatharc{40}{85}{.425cm}
+ \pgfpathmoveto{\pgfpoint{-.1cm}{.15cm}}
+ \pgfpathlineto{\pgfpoint{-.1cm}{-.05cm}}
+ \pgfpatharc{-105}{-165}{.425cm}
+ \pgfpatharc{140}{95}{.425cm}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{-.05cm}}{\pgfpointpolar{15}{.425cm}}}
+ \pgfpatharc{15}{-55}{.425cm and .3cm}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{-.05cm}}{\pgfpointpolar{165}{.425cm}}}
+ \pgfpatharc{165}{235}{.425cm and .3cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{-.175cm}}
+ \pgfpatharc{90}{250}{.175cm and .125cm}
+ \pgfpathlineto{\pgfpoint{-.05cm}{-.325cm}}
+ \pgfpathmoveto{\pgfpoint{0cm}{-.175cm}}
+ \pgfpatharc{90}{-70}{.175cm and .125cm}
+ \pgfpathlineto{\pgfpoint{.05cm}{-.325cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% armor
+\pgfdeclareshape{armor}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.25cm}{-.425cm}}
+ \pgfpathlineto{\pgfpoint{.25cm}{-.425cm}}
+ \pgfpathlineto{\pgfpoint{.2cm}{-.225cm}}
+ \pgfpathlineto{\pgfpoint{.25cm}{.125cm}}
+ \pgfpathlineto{\pgfpoint{.425cm}{.125cm}}
+ \pgfpatharc{0}{90}{.3cm}
+ \pgfpathlineto{\pgfpoint{.125cm}{.35cm}}
+ \pgfpatharc{360}{180}{.125cm}
+ \pgfpathlineto{\pgfpoint{-.125cm}{.425cm}}
+ \pgfpatharc{90}{180}{.3cm}
+ \pgfpathlineto{\pgfpoint{-.25cm}{.125cm}}
+ \pgfpathlineto{\pgfpoint{-.2cm}{-.225cm}}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpoint{.125cm}{.425cm}}
+ \pgfpathlineto{\pgfpoint{.125cm}{.25cm}}
+ \pgfpatharc{180}{270}{.125cm}
+ \pgfpathmoveto{\pgfpoint{-.125cm}{.425cm}}
+ \pgfpathlineto{\pgfpoint{-.125cm}{.25cm}}
+ \pgfpatharc{360}{270}{.125cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{.225cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.275cm}}
+ \pgfpathmoveto{\pgfpoint{-.2cm}{-.225cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.275cm}}
+ \pgfpathlineto{\pgfpoint{.2cm}{-.225cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% proficiency
+\pgfdeclareshape{proficiency}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpointpolar{90}{.35cm}}
+ \pgfpathlineto{\pgfpointpolar{126}{.15cm}}
+ \pgfpathlineto{\pgfpointpolar{162}{.35cm}}
+ \pgfpathlineto{\pgfpointpolar{198}{.15cm}}
+ \pgfpathlineto{\pgfpointpolar{234}{.35cm}}
+ \pgfpathlineto{\pgfpointpolar{270}{.15cm}}
+ \pgfpathlineto{\pgfpointpolar{306}{.35cm}}
+ \pgfpathlineto{\pgfpointpolar{342}{.15cm}}
+ \pgfpathlineto{\pgfpointpolar{18}{.35cm}}
+ \pgfpathlineto{\pgfpointpolar{54}{.15cm}}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpointpolar{270}{.35cm}}
+ \pgfpathlineto{\pgfpointpolar{270}{.425cm}}
+ \pgfpathmoveto{\pgfpointpolar{342}{.35cm}}
+ \pgfpathlineto{\pgfpointpolar{342}{.425cm}}
+ \pgfpathmoveto{\pgfpointpolar{54}{.35cm}}
+ \pgfpathlineto{\pgfpointpolar{54}{.425cm}}
+ \pgfpathmoveto{\pgfpointpolar{126}{.35cm}}
+ \pgfpathlineto{\pgfpointpolar{126}{.425cm}}
+ \pgfpathmoveto{\pgfpointpolar{198}{.35cm}}
+ \pgfpathlineto{\pgfpointpolar{198}{.425cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+\NewDocumentCommand{\rpgiconsability}{ O{positive} m O{} }{%
+ \edef\rpgicons@abilityiconposneg{#1}%
+ \edef\rpgicons@abilityiconneg{negative}%
+ \ifx\rpgicons@abilityiconposneg\rpgicons@abilityiconneg%
+ \def\rpgicons@abilityiconfg{fgneg}\else%
+ \def\rpgicons@abilityiconfg{fgpos}\fi%
+ \hspace{\rpgicons@beforesep}%
+ \tikz[rpg icons, rpg icons/every ability, rpg icons/every #2,
+ baseline=\rpgicons@baseline, fgpos/.style={draw}, fgneg/.style={draw=rpgicons@bg, line width=.6pt}, #3] {
+ \ifx\rpgicons@abilityiconposneg\rpgicons@abilityiconneg%
+ \path[scale=.333, fill] (0cm,0cm) circle[radius=.45cm];
+ \node[#2, \rpgicons@abilityiconfg, scale=.225] (0cm,0cm) {};
+ \else
+ \node[#2, \rpgicons@abilityiconfg, scale=.333] (0cm,0cm) {};
+ \fi%
+ \path[draw=none, scale=.333] ([yshift=-1pt].425cm,.425cm) rectangle ([yshift=1pt]-.425cm,-.425cm);
+ }%
+ \hspace{\rpgicons@aftersep}%
+}
+\@ifundefined{ability}{\NewCommandCopy\ability\rpgiconsability}{}
+
+\NewDocumentCommand{\rpgiconssaving}{ O{normal} m O{} }{%
+ \edef\rpgicons@abilityiconnrmemp{#1}%
+ \edef\rpgicons@abilityiconemp{empty}%
+ \ifx\rpgicons@abilityiconnrmemp\rpgicons@abilityiconemp%
+ \def\rpgicons@savingstyle{}\else%
+ \def\rpgicons@savingstyle{rpg icons/every #2}\fi%
+ \hspace{\rpgicons@beforesep}%
+ \tikz[rpg icons, rpg icons/every saving, \rpgicons@savingstyle,
+ baseline=\rpgicons@baseline, #3] {
+ \path[draw, scale=.333] (-.45cm,.45cm) -- (.45cm,.45cm) -- (.45cm,-.05cm)
+ arc[start angle=360, end angle=180, radius=.45cm] -- cycle;
+ \ifx\rpgicons@abilityiconnrmemp\rpgicons@abilityiconemp\else%
+ \node[#2, draw,scale=.225] (0cm,0cm) {};
+ \fi%
+ \path[draw=none, scale=.333] ([yshift=-1pt].425cm,.425cm) rectangle ([yshift=1pt]-.425cm,-.425cm);
+ }%
+ \hspace{\rpgicons@aftersep}%
+}
+\@ifundefined{saving}{\NewCommandCopy\saving\rpgiconssaving}{}
+
+% SPELLS
+
+% line
+\pgfdeclareshape{linear}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.4cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{.4cm}{0cm}}
+ \pgfusepath{draw} % draw shape
+ \pgfpathcircle{\pgfpoint{-.4cm}{0cm}}{2pt}
+ \pgfusepath{fill} % draw origin
+ }
+}
+
+% cone
+\pgfdeclareshape{conic}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \def\rx{.425cm}
+ \def\ry{.2cm}
+ \def\z{(.425cm+.2125cm)}
+ \pgfpathellipse{\pgfpoint{\z-.425cm}{0cm}}{\pgfpoint{\ry}{0cm}}{\pgfpoint{0cm}{\rx}}
+ \pgfmathparse{asin(\ry/\z)}
+ \let\angle\pgfmathresult
+ \pgfmathparse{-\rx*cos(\angle)}
+ \let\coordya\pgfmathresult
+ \pgfmathparse{\rx*cos(\angle)}
+ \let\coordyb\pgfmathresult
+ \pgfmathparse{\z-\ry*sin(\angle)}
+ \let\coordx\pgfmathresult
+ \pgfpathmoveto{\pgfpoint{\coordx-.425cm}{\coordya}}
+ \pgfpathlineto{\pgfpoint{-.425cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{\coordx-.425cm}{\coordyb}}
+ \pgfusepath{draw} % draw shape
+ \pgfpathcircle{\pgfpoint{-.425cm}{0cm}}{2pt}
+ \pgfusepath{fill} % draw origin
+ }
+}
+
+% square
+\pgfdeclareshape{quadratic}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathrectanglecorners{\pgfpoint{.4cm}{.4cm}}{\pgfpoint{-.4cm}{-.4cm}}
+ \pgfusepath{draw} % draw shape
+ \pgfpathcircle{\pgfpointorigin}{2pt}
+ \pgfusepath{fill} % draw origin
+ }
+}
+
+% cube
+\pgfdeclareshape{cubic}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.425cm}{.425cm}}
+ \pgfpathlineto{\pgfpoint{-.425cm}{-.2cm}}
+ \pgfpathlineto{\pgfpoint{-.2cm}{-.425cm}}
+ \pgfpathlineto{\pgfpoint{.425cm}{-.425cm}}
+ \pgfpathlineto{\pgfpoint{.425cm}{.2cm}}
+ \pgfpathlineto{\pgfpoint{.2cm}{.425cm}}
+ \pgfpathclose
+ \pgfpathlineto{\pgfpoint{-.2cm}{.2cm}}
+ \pgfpathlineto{\pgfpoint{-.2cm}{-.425cm}}
+ \pgfpathmoveto{\pgfpoint{-.2cm}{.2cm}}
+ \pgfpathlineto{\pgfpoint{.425cm}{.2cm}}
+ \pgfusepath{draw} % draw shape
+ \pgfpathcircle{\pgfpoint{.1125cm}{-.1125cm}}{2pt}
+ \pgfusepath{fill} % draw origin
+ }
+}
+
+% sphere
+\pgfdeclareshape{spheric}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathcircle{\pgfpointorigin}{.425cm}
+ \pgfpathmoveto{\pgfpoint{.425cm}{0cm}}
+ \pgfpatharc{180}{50}{-.425cm and -.2cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{-.425cm}}
+ \pgfpatharc{270}{140}{-.2cm and .425cm}
+ \pgfusepath{draw} % draw shape
+ \pgfpathcircle{\pgfpointorigin}{2pt}
+ \pgfusepath{fill} % draw origin
+ }
+}
+
+% cylinder
+\pgfdeclareshape{cylindric}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathellipse{\pgfpoint{0cm}{.2125cm}}{\pgfpoint{0cm}{.2cm}}{\pgfpoint{.425cm}{0cm}}
+ \pgfpathmoveto{\pgfpoint{-.425cm}{.2125cm}}
+ \pgfpathlineto{\pgfpoint{-.425cm}{-.2125cm}}
+ \pgfpatharc{0}{180}{-.425cm and -.2cm}
+ \pgfpathlineto{\pgfpoint{.425cm}{.2125cm}}
+ \pgfusepath{draw} % draw shape
+ \pgfpathcircle{\pgfpoint{0cm}{-.2125cm}}{2pt}
+ \pgfusepath{fill} % draw origin
+ }
+}
+
+% verbal
+\pgfdeclareshape{verbal}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.35cm}{0cm}}
+ \pgfpatharc{180}{-115}{.35cm}
+ \pgfpathlineto{\pgfpoint{-.4cm}{-.4cm}}
+ \pgfpathlineto{\pgfpointpolar{215}{.35cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% somatic
+\pgfdeclareshape{somatic}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.425cm}{0cm}}
+ \pgfpatharc{0}{270}{-.425cm and -.2cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{-.425cm}}
+ \pgfpatharc{90}{360}{-.2cm and -.425cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% material
+\pgfdeclareshape{material}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.4cm}{.2cm}}
+ \pgfpathlineto{\pgfpoint{-.4cm}{-.2cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.4cm}}
+ \pgfpathlineto{\pgfpoint{.4cm}{-.2cm}}
+ \pgfpathlineto{\pgfpoint{.4cm}{.2cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{.4cm}}
+ \pgfpathclose
+ \pgfpathlineto{\pgfpoint{0cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{.4cm}{.2cm}}
+ \pgfpathmoveto{\pgfpoint{0cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.4cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% focus
+\pgfdeclareshape{focus}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathcircle{\pgfpointorigin}{.35cm}
+ \pgfpathmoveto{\pgfpoint{-.15cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{-.425cm}{0cm}}
+ \pgfpathmoveto{\pgfpoint{.15cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{.425cm}{0cm}}
+ \pgfpathmoveto{\pgfpoint{0cm}{-.15cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.425cm}}
+ \pgfpathmoveto{\pgfpoint{0cm}{.15cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{.425cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+\NewDocumentCommand{\rpgiconsspell}{ m O{} }{%
+ \hspace{\rpgicons@beforesep}%
+ \tikz[rpg icons, rpg icons/every spell, rpg icons/every #1,
+ baseline=\rpgicons@baseline, #2] {
+ \node[#1, draw,scale=.333] (0cm,0cm) {};
+ \path[draw=none, scale=.333] ([yshift=-1pt].425cm,.425cm) rectangle ([yshift=1pt]-.425cm,-.425cm);
+ }%
+ \hspace{\rpgicons@aftersep}%
+}
+\@ifundefined{spell}{\NewCommandCopy\spell\rpgiconsspell}{}
+
+% SPELLSCHOOLS
+
+% abjuration
+\pgfdeclareshape{abjuration}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{0cm}{.025cm}}
+ \pgfpatharc{270}{390}{.275cm and .175cm}
+ \pgfpatharc{210}{120}{.095cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{.025cm}}
+ \pgfpatharc{270}{150}{.275cm and .175cm}
+ \pgfpatharc{-30}{60}{.095cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{.25cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.425cm}}
+ \pgfpathmoveto{\pgfpoint{-.25cm}{-.125cm}}
+ \pgfpathlineto{\pgfpoint{.25cm}{-.125cm}}
+ \pgfpathmoveto{\pgfpoint{-.25cm}{-.3cm}}
+ \pgfpathlineto{\pgfpoint{.25cm}{-.3cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% conjuration
+\pgfdeclareshape{conjuration}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.425cm}{.425cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.425cm}}
+ \pgfpathlineto{\pgfpoint{.425cm}{.425cm}}
+ \pgfpathmoveto{\pgfpoint{-.225cm}{.05cm}}
+ \pgfpathlineto{\pgfpoint{.225cm}{.05cm}}
+ \pgfpathmoveto{\pgfpoint{0cm}{-.15cm}}
+ \pgfpatharc{110}{70}{.5cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{-.15cm}}
+ \pgfpatharc{110}{70}{-.5cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% divination
+\pgfdeclareshape{divination}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.35cm}{-.175cm}}
+ \pgfpatharc{180}{0}{.15cm and -.25cm}
+ \pgfpatharc{180}{90}{.4cm}
+ \pgfpathmoveto{\pgfpoint{-.05cm}{-.175cm}}
+ \pgfpathlineto{\pgfpoint{-.05cm}{0cm}}
+ \pgfpatharc{180}{90}{.4cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% enchantment
+\pgfdeclareshape{enchantment}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.2cm}{-.425cm}}
+ \pgfpathlineto{\pgfpoint{-.2cm}{.425cm}}
+ \pgfpathmoveto{\pgfpoint{-.425cm}{.175cm}}
+ \pgfpathlineto{\pgfpoint{.025cm}{.175cm}}
+ \pgfpathmoveto{\pgfpoint{-.2cm}{-.225cm}}
+ \pgfpatharc{180}{0}{.1cm and .2cm}
+ \pgfpatharc{180}{0}{.1cm and .2cm}
+ \pgfpatharc{180}{0}{.1cm and -.2cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% evocation
+\pgfdeclareshape{evocation}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{.325cm}{0cm}}{\pgfpoint{0cm}{.225cm}}
+ \pgfpathmoveto{\pgfpoint{0cm}{.425cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.425cm}}
+ \pgfpathmoveto{\pgfpoint{-.425cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{.425cm}{0cm}}
+ \pgfpathmoveto{\pgfpointpolar{30}{.325cm and .225cm}}
+ \pgfpathlineto{\pgfpointpolar{30}{.4cm}}
+ \pgfpathmoveto{\pgfpointpolar{60}{.325cm and .225cm}}
+ \pgfpathlineto{\pgfpointpolar{60}{.4cm}}
+ \pgfpathmoveto{\pgfpointpolar{120}{.325cm and .225cm}}
+ \pgfpathlineto{\pgfpointpolar{120}{.4cm}}
+ \pgfpathmoveto{\pgfpointpolar{150}{.325cm and .225cm}}
+ \pgfpathlineto{\pgfpointpolar{150}{.4cm}}
+ \pgfpathmoveto{\pgfpointpolar{210}{.325cm and .225cm}}
+ \pgfpathlineto{\pgfpointpolar{210}{.4cm}}
+ \pgfpathmoveto{\pgfpointpolar{240}{.325cm and .225cm}}
+ \pgfpathlineto{\pgfpointpolar{240}{.4cm}}
+ \pgfpathmoveto{\pgfpointpolar{300}{.325cm and .225cm}}
+ \pgfpathlineto{\pgfpointpolar{300}{.4cm}}
+ \pgfpathmoveto{\pgfpointpolar{330}{.325cm and .225cm}}
+ \pgfpathlineto{\pgfpointpolar{330}{.4cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% illusion
+\pgfdeclareshape{illusion}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{0cm}{.225cm}}
+ \pgfpatharc{90}{30}{.45cm}
+ \pgfpatharc{330}{210}{.45cm}
+ \pgfpatharc{150}{90}{.45cm}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{.225cm}}{\pgfpointpolar{270}{.45cm}}}
+ \pgfpathlineto{\pgfpointpolar{270}{.35cm}}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{.225cm}}{\pgfpointpolar{240}{.45cm}}}
+ \pgfpathlineto{\pgfpointpolar{225}{.4cm}}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{.225cm}}{\pgfpointpolar{300}{.45cm}}}
+ \pgfpathlineto{\pgfpointpolar{315}{.4cm}}
+ \pgfpathmoveto{\pgfpoint{0cm}{.225cm}}
+ \pgfpathcircle{\pgfpoint{0cm}{.075cm}}{.15cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% necromancy
+\pgfdeclareshape{necromancy}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpointpolar{210}{.25cm}}
+ \pgfpatharc{210}{-30}{.25cm}
+ \pgfpatharc{150}{390}{.1cm}
+ \pgfpathmoveto{\pgfpointpolar{210}{.25cm}}
+ \pgfpatharc{390}{150}{.1cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% transmutation
+\pgfdeclareshape{transmutation}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.25cm}{.35cm}}
+ \pgfpathlineto{\pgfpoint{-.25cm}{-.35cm}}
+ \pgfpathmoveto{\pgfpoint{0cm}{.35cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.35cm}}
+ \pgfpathmoveto{\pgfpoint{-.425cm}{.35cm}}
+ \pgfpathlineto{\pgfpoint{.15cm}{.35cm}}
+ \pgfpatharc{90}{-45}{.1cm}
+ \pgfpatharc{135}{360}{.1cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+\NewDocumentCommand{\rpgiconsspellschool}{ O{negative} m O{} }{%
+ \edef\rpgicons@spellschooliconposneg{#1}%
+ \edef\rpgicons@spellschooliconpos{positive}%
+ \ifx\rpgicons@spellschooliconposneg\rpgicons@spellschooliconpos%
+ \def\rpgicons@spellschooliconfg{fgneg}\else%
+ \def\rpgicons@spellschooliconfg{fgpos}\fi%
+ \ifx\rpgicons@spellschooliconposneg\rpgicons@spellschooliconpos%
+ \def\rpgicons@spellschooliconbg{bgneg}\else%
+ \def\rpgicons@spellschooliconbg{bgpos}\fi%
+ \hspace{\rpgicons@beforesep}%
+ \tikz[rpg icons, rpg icons/every spellschool, rpg icons/every #2,
+ baseline=\rpgicons@baseline, fgpos/.style={draw=rpgicons@bg, line width=.6pt}, fgneg/.style={draw},
+ bgpos/.style={fill}, bgneg/.style={draw}, #3] {
+ \path[scale=.333, \rpgicons@spellschooliconbg] (-.475cm,.35cm)
+ -- (-.35cm,.475cm) -- (.35cm,.475cm) -- (.475cm,.35cm) -- (.425cm,-.375cm) -- (0cm,-.475cm) -- (-.425cm,-.375cm) -- cycle;
+ \node[#2, scale=.225, \rpgicons@spellschooliconfg] (0cm,0cm) {};
+ \path[draw=none, scale=.333] ([yshift=-1pt].425,.425) rectangle ([yshift=1pt]-.425cm,-.425cm);
+ }%
+ \hspace{\rpgicons@aftersep}%
+}
+\@ifundefined{spellschool}{\NewCommandCopy\spellschool\rpgiconsspellschool}{}
+
+% DAMAGES
+
+% acid
+\pgfdeclareshape{acid}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{-.175cm}{.05cm}}{\pgfpointpolar{-20}{.175}}}
+ \pgfpatharc{-20}{200}{-.175cm}
+ \pgfpathlineto{\pgfpoint{0cm}{.425cm}}
+ \pgfpathclose
+ \newdimen\rpgicons@py
+ \pgfextracty{\rpgicons@py}{\pgfpointadd{\pgfpoint{0cm}{-.175cm}}{\pgfpointpolar{20}{-.25cm}}}
+ \pgfpathmoveto{\pgfpoint{-.425cm}{\rpgicons@py}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{0cm}{-.175cm}}{\pgfpointpolar{20}{-.25cm}}}
+ \pgfpatharc{20}{160}{-.25cm}
+ \pgfpathlineto{\pgfpoint{.425cm}{\rpgicons@py}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% bludgeoning
+\pgfdeclareshape{bludgeoning}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.2cm}{.225cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{.425cm}}
+ \pgfpathlineto{\pgfpoint{.425cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{.225cm}{-.2cm}}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpoint{.05cm}{-.025cm}}
+ \pgfpathlineto{\pgfpoint{-.35cm}{-.425cm}}
+ \pgfpathlineto{\pgfpoint{-.425cm}{-.35cm}}
+ \pgfpathlineto{\pgfpoint{-.025cm}{.05cm}}
+ \pgfpathmoveto{\pgfpoint{.2375cm}{.1875cm}}
+ \pgfpatharc{135}{315}{-.05cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% cold
+\pgfdeclareshape{cold}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpointpolar{90}{.425cm}}
+ \pgfpathlineto{\pgfpointpolar{270}{.425cm}}
+ \pgfpathmoveto{\pgfpointpolar{110}{.35cm}}
+ \pgfpathlineto{\pgfpointpolar{90}{.25cm}}
+ \pgfpathlineto{\pgfpointpolar{70}{.35cm}}
+ \pgfpathmoveto{\pgfpointpolar{250}{.35cm}}
+ \pgfpathlineto{\pgfpointpolar{270}{.25cm}}
+ \pgfpathlineto{\pgfpointpolar{290}{.35cm}}
+ \pgfpathmoveto{\pgfpointpolar{30}{.425cm}}
+ \pgfpathlineto{\pgfpointpolar{210}{.425cm}}
+ \pgfpathmoveto{\pgfpointpolar{50}{.35cm}}
+ \pgfpathlineto{\pgfpointpolar{30}{.25cm}}
+ \pgfpathlineto{\pgfpointpolar{10}{.35cm}}
+ \pgfpathmoveto{\pgfpointpolar{190}{.35cm}}
+ \pgfpathlineto{\pgfpointpolar{210}{.25cm}}
+ \pgfpathlineto{\pgfpointpolar{230}{.35cm}}
+ \pgfpathmoveto{\pgfpointpolar{150}{.425cm}}
+ \pgfpathlineto{\pgfpointpolar{330}{.425cm}}
+ \pgfpathmoveto{\pgfpointpolar{130}{.35cm}}
+ \pgfpathlineto{\pgfpointpolar{150}{.25cm}}
+ \pgfpathlineto{\pgfpointpolar{170}{.35cm}}
+ \pgfpathmoveto{\pgfpointpolar{310}{.35cm}}
+ \pgfpathlineto{\pgfpointpolar{330}{.25cm}}
+ \pgfpathlineto{\pgfpointpolar{350}{.35cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% fire
+\pgfdeclareshape{fire}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{.15cm}{-.425cm}}
+ \pgfpatharc{-60}{0}{.45cm and .375cm}
+ \pgfpathcurveto{\pgfpoint{.375cm}{.15cm}}{\pgfpoint{.15cm}{.375cm}}{\pgfpoint{-.05cm}{.425cm}}
+ \pgfpathmoveto{\pgfpoint{-.15cm}{-.425cm}}
+ \pgfpatharc{240}{135}{.45cm and .35cm}
+ \pgfpathcurveto{\pgfpoint{-.15cm}{.2cm}}{\pgfpoint{0cm}{.25cm}}{\pgfpoint{-.05cm}{.425cm}}
+ \pgfpathmoveto{\pgfpoint{.075cm}{-.3cm}}
+ \pgfpathcurveto{\pgfpoint{.2cm}{-.2cm}}{\pgfpoint{.2cm}{-.05cm}}{\pgfpoint{.05cm}{.1cm}}
+ \pgfpathmoveto{\pgfpoint{-.075cm}{-.3cm}}
+ \pgfpatharc{220}{150}{.35cm and .2cm}
+ \pgfpathcurveto{\pgfpoint{0cm}{-.2cm}}{\pgfpoint{.05cm}{-.1cm}}{\pgfpoint{.05cm}{.1cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% force
+\pgfdeclareshape{force}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpointpolar{90}{.425cm}}
+ \pgfpathlineto{\pgfpointpolar{120}{.15cm}}
+ \pgfpathlineto{\pgfpointpolar{150}{.425cm}}
+ \pgfpathlineto{\pgfpointpolar{180}{.15cm}}
+ \pgfpathlineto{\pgfpointpolar{210}{.425cm}}
+ \pgfpathlineto{\pgfpointpolar{240}{.15cm}}
+ \pgfpathlineto{\pgfpointpolar{270}{.425cm}}
+ \pgfpathlineto{\pgfpointpolar{300}{.15cm}}
+ \pgfpathlineto{\pgfpointpolar{330}{.425cm}}
+ \pgfpathlineto{\pgfpointpolar{0}{.15cm}}
+ \pgfpathlineto{\pgfpointpolar{30}{.425cm}}
+ \pgfpathlineto{\pgfpointpolar{60}{.15cm}}
+ \pgfpathclose
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% lightning
+\pgfdeclareshape{lightning}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{0cm}{.425cm}}
+ \pgfpathlineto{\pgfpoint{-.25cm}{-.15cm}}
+ \pgfpathlineto{\pgfpoint{.25cm}{.15cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.425cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% necrotic
+\pgfdeclareshape{necrotic}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.35cm}{-.425cm}}
+ \pgfpathlineto{\pgfpoint{-.35cm}{.075cm}}
+ \pgfpatharc{180}{0}{.35cm}
+ \pgfpathlineto{\pgfpoint{.35cm}{-.425cm}}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpoint{0cm}{-.2cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{.25cm}}
+ \pgfpathmoveto{\pgfpoint{-.15cm}{.1cm}}
+ \pgfpathlineto{\pgfpoint{.15cm}{.1cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% piercing
+\pgfdeclareshape{piercing}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.425cm}{.075cm}}
+ \pgfpathlineto{\pgfpoint{.3cm}{.075cm}}
+ \pgfpathlineto{\pgfpoint{.425cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{.3cm}{-.075cm}}
+ \pgfpathlineto{\pgfpoint{-.425cm}{-.075cm}}
+ \pgfpathmoveto{\pgfpoint{.25cm}{.2cm}}
+ \pgfpathlineto{\pgfpoint{-.05cm}{.35cm}}
+ \pgfpathmoveto{\pgfpoint{.25cm}{-.2cm}}
+ \pgfpathlineto{\pgfpoint{-.05cm}{-.35cm}}
+ \pgfpathmoveto{\pgfpoint{.425cm}{.15cm}}
+ \pgfpathlineto{\pgfpoint{.25cm}{.425cm}}
+ \pgfpathmoveto{\pgfpoint{.425cm}{-.15cm}}
+ \pgfpathlineto{\pgfpoint{.25cm}{-.425cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% poison
+\pgfdeclareshape{poison}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{.175cm}}{\pgfpointpolar{-40}{.25cm}}}
+ \pgfpatharc{-40}{220}{.25cm}
+ \pgfpathlineto{\pgfpoint{-.15cm}{-.1cm}}
+ \pgfpathlineto{\pgfpoint{.15cm}{-.1cm}}
+ \pgfpathclose
+ \pgfpathcircle{\pgfpoint{-.1cm}{.15cm}}{.05cm}
+ \pgfpathcircle{\pgfpoint{.1cm}{.15cm}}{.05cm}
+ \pgfpathmoveto{\pgfpoint{.425cm}{-.2cm}}
+ \pgfpathlineto{\pgfpoint{-.425cm}{-.425cm}}
+ \pgfpathmoveto{\pgfpoint{-.425cm}{-.2cm}}
+ \pgfpathlineto{\pgfpoint{.425cm}{-.425cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% psychic
+\pgfdeclareshape{psychic}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{.075cm}{.4cm}}
+ \pgfpatharc{90}{180}{.425cm}
+ \pgfpatharc{180}{270}{.375cm}
+ \pgfpatharc{270}{360}{.325cm}
+ \pgfpatharc{0}{90}{.275cm}
+ \pgfpatharc{90}{180}{.225cm}
+ \pgfpatharc{180}{270}{.175cm}
+ \pgfpatharc{270}{360}{.125cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% radiant
+\pgfdeclareshape{radiant}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathcircle{\pgfpointorigin}{.225cm}
+ \pgfpathmoveto{\pgfpointpolar{15}{.425cm}}
+ \pgfpatharc{15}{45}{.425cm}
+ \pgfpathmoveto{\pgfpointpolar{75}{.425cm}}
+ \pgfpatharc{75}{105}{.425cm}
+ \pgfpathmoveto{\pgfpointpolar{135}{.425cm}}
+ \pgfpatharc{135}{165}{.425cm}
+ \pgfpathmoveto{\pgfpointpolar{195}{.425cm}}
+ \pgfpatharc{195}{225}{.425cm}
+ \pgfpathmoveto{\pgfpointpolar{255}{.425cm}}
+ \pgfpatharc{255}{285}{.425cm}
+ \pgfpathmoveto{\pgfpointpolar{315}{.425cm}}
+ \pgfpatharc{315}{345}{.425cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% slashing
+\pgfdeclareshape{slashing}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.15cm}{.225cm}}
+ \pgfpathlineto{\pgfpoint{-.275cm}{.35cm}}
+ \pgfpatharc{0}{240}{.075cm}
+ \pgfpathlineto{\pgfpoint{-.35cm}{.275cm}}
+ \pgfpathlineto{\pgfpoint{-.225cm}{.15cm}}
+ \pgfpathlineto{\pgfpoint{-.425cm}{-.05cm}}
+ \pgfpathlineto{\pgfpoint{-.35cm}{-.125cm}}
+ \pgfpathlineto{\pgfpoint{.125cm}{.35cm}}
+ \pgfpathlineto{\pgfpoint{.05cm}{.425cm}}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpoint{-.2cm}{.025cm}}
+ \pgfpathlineto{\pgfpoint{.225cm}{-.425cm}}
+ \pgfpathlineto{\pgfpoint{.425cm}{-.425cm}}
+ \pgfpathlineto{\pgfpoint{.425cm}{-.225cm}}
+ \pgfpathlineto{\pgfpoint{-.025cm}{.2cm}}
+ \pgfpathmoveto{\pgfpoint{.325cm}{-.325cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{0cm}}
+ \pgfpathmoveto{\pgfpoint{.425cm}{.3cm}}
+ \pgfpathlineto{\pgfpoint{.425cm}{0cm}}
+ \pgfpathmoveto{\pgfpoint{.275cm}{.425cm}}
+ \pgfpathlineto{\pgfpoint{.275cm}{.1cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% thunder
+\pgfdeclareshape{thunder}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{.225cm}{-.075cm}}
+ \pgfpatharc{-90}{120}{.2cm}
+ \pgfpatharc{30}{180}{.225cm}
+ \newdimen\rpgicons@qy
+ \pgfmathparse{.125cm+cos(30)*.2cm-sin(30)*.225cm}
+ \rpgicons@qy=\pgfmathresult pt
+ \pgfpathlineto{\pgfpoint{-.3cm}{\rpgicons@qy}}
+ \pgfpatharc{90}{180}{.125cm}
+ \pgfpathlineto{\pgfpoint{-.425cm}{.05cm}}
+ \pgfpatharc{180}{270}{.125cm}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpoint{-.1cm}{-.225cm}}
+ \pgfpatharc{240}{300}{.3cm}
+ \pgfpathmoveto{\pgfpoint{-.2cm}{-.35cm}}
+ \pgfpatharc{240}{300}{.5cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% healing
+\pgfdeclareshape{healing}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{0cm}{.125cm}}
+ \pgfpatharc{0}{225}{.2cm}
+ \pgfpathlineto{\pgfpoint{0cm}{-.375cm}}
+ \pgfpathmoveto{\pgfpoint{0cm}{.125cm}}
+ \pgfpatharc{180}{-45}{.2cm}
+ \pgfpathlineto{\pgfpoint{0cm}{-.375cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+\NewDocumentCommand{\rpgiconsdamage}{ m O{} }{%
+ \hspace{\rpgicons@beforesep}%
+ \tikz[rpg icons, rpg icons/every damage, rpg icons/every #1,
+ baseline=\rpgicons@baseline, #2] {
+ \path[draw, scale=.333] (0cm,0cm) circle[radius=.5cm];
+ \node[#1, draw, scale=.225] (0cm,0cm) {};
+ \path[draw=none, scale=.333] ([yshift=-1pt].425cm,.425cm) rectangle ([yshift=1pt]-.425cm,-.425cm);
+ }%
+ \hspace{\rpgicons@aftersep}%
+}
+\@ifundefined{damage}{\NewCommandCopy\damage\rpgiconsdamage}{}
+
+% ATTACKS
+
+% melee
+\pgfdeclareshape{melee}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.15cm}{-.225cm}}
+ \pgfpathlineto{\pgfpoint{-.275cm}{-.35cm}}
+ \pgfpatharc{360}{90}{.075cm}
+ \pgfpathlineto{\pgfpoint{-.35cm}{-.275cm}}
+ \pgfpathlineto{\pgfpoint{-.225cm}{-.15cm}}
+ \pgfpathlineto{\pgfpoint{-.425cm}{.05cm}}
+ \pgfpathlineto{\pgfpoint{-.35cm}{.125cm}}
+ \pgfpathlineto{\pgfpoint{.125cm}{-.35cm}}
+ \pgfpathlineto{\pgfpoint{.05cm}{-.425cm}}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpoint{-.2cm}{-.025cm}}
+ \pgfpathlineto{\pgfpoint{.225cm}{.425cm}}
+ \pgfpathlineto{\pgfpoint{.425cm}{.425cm}}
+ \pgfpathlineto{\pgfpoint{.425cm}{.225cm}}
+ \pgfpathlineto{\pgfpoint{-.025cm}{-.2cm}}
+ \pgfpathmoveto{\pgfpoint{.325cm}{.325cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{0cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% ranged
+\pgfdeclareshape{ranged}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{0cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.225cm}}
+ \pgfpatharc{0}{-30}{.4cm}
+ \pgfpatharc{-45}{0}{.6cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{.225cm}}
+ \pgfpatharc{0}{30}{.4cm}
+ \pgfpatharc{45}{0}{.6cm}
+ \pgfpathmoveto{\pgfpoint{-.425cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{.425cm}{0cm}}
+ \pgfpathmoveto{\pgfpoint{.275cm}{.1cm}}
+ \pgfpathlineto{\pgfpoint{.425cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{.275cm}{-.1cm}}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{-.4cm}{-.225cm}}{\pgfpointpolar{-20}{.4cm}}}
+ \pgfpathlineto{\pgfpoint{-.425cm}{0cm}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{-.4cm}{.225cm}}{\pgfpointpolar{20}{.4cm}}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% magic
+\pgfdeclareshape{magic}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.225cm}{-.425cm}}
+ \pgflineto{\pgfpoint{-.425cm}{-.225cm}}
+ \pgflineto{\pgfpoint{-.3cm}{-.1cm}}
+ \pgflineto{\pgfpoint{-.3cm}{.125cm}}
+ \pgflineto{\pgfpoint{0cm}{.425cm}}
+ \pgfpatharc{405}{315}{.1cm}
+ \pgflineto{\pgfpoint{-.15cm}{.1cm}}
+ \pgflineto{\pgfpoint{-.15cm}{-.05cm}}
+ \pgfpatharc{180}{360}{.05cm}
+ \pgflineto{\pgfpoint{-.05cm}{0cm}}
+ \pgfpatharc{180}{90}{.1cm}
+ \pgflineto{\pgfpoint{.05cm}{-.1cm}}
+ \pgfpatharc{360}{315}{.125cm}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpoint{-.225cm}{-.25cm}}
+ \pgflineto{\pgfpoint{-.325cm}{-.15cm}}
+ \pgfpathmoveto{\pgfpoint{.2cm}{.2cm}}
+ \pgfpatharc{180}{360}{.1cm}
+ \pgfpatharc{0}{45}{.1cm}
+ \pgfpatharc{225}{180}{.2cm}
+ \pgfpathcircle{\pgfpoint{.3cm}{-.075cm}}{.075cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% single-handed
+\pgfdeclareshape{singlehanded}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.25cm}{-.425cm}}
+ \pgflineto{\pgfpoint{.025cm}{-.425cm}}
+ \pgflineto{\pgfpoint{.325cm}{-.125cm}}
+ \pgfpatharc{45}{135}{.1cm}
+ \pgflineto{\pgfpoint{0cm}{-.275cm}}
+ \pgflineto{\pgfpoint{-.15cm}{-.275cm}}
+ \pgfpatharc{270}{90}{.05cm}
+ \pgflineto{\pgfpoint{-.1cm}{-.175cm}}
+ \pgfpatharc{270}{360}{.1cm}
+ \pgflineto{\pgfpoint{-.2cm}{-.075cm}}
+ \pgfpatharc{90}{135}{.125cm}
+ \pgflineto{\pgfpoint{-.425cm}{-.25cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% double-handed
+\pgfdeclareshape{doublehanded}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.25cm}{-.425cm}}
+ \pgflineto{\pgfpoint{.025cm}{-.425cm}}
+ \pgflineto{\pgfpoint{.325cm}{-.125cm}}
+ \pgfpatharc{45}{135}{.1cm}
+ \pgflineto{\pgfpoint{0cm}{-.275cm}}
+ \pgflineto{\pgfpoint{-.15cm}{-.275cm}}
+ \pgfpatharc{270}{90}{.05cm}
+ \pgflineto{\pgfpoint{-.1cm}{-.175cm}}
+ \pgfpatharc{270}{360}{.1cm}
+ \pgflineto{\pgfpoint{-.2cm}{-.075cm}}
+ \pgfpatharc{90}{135}{.125cm}
+ \pgflineto{\pgfpoint{-.425cm}{-.25cm}}
+ \pgfpathmoveto{\pgfpoint{.25cm}{.425cm}}
+ \pgflineto{\pgfpoint{-.025cm}{.425cm}}
+ \pgflineto{\pgfpoint{-.325cm}{.125cm}}
+ \pgfpatharc{225}{315}{.1cm}
+ \pgflineto{\pgfpoint{0cm}{.275cm}}
+ \pgflineto{\pgfpoint{.15cm}{.275cm}}
+ \pgfpatharc{450}{270}{.05cm}
+ \pgflineto{\pgfpoint{.1cm}{.175cm}}
+ \pgfpatharc{90}{180}{.1cm}
+ \pgflineto{\pgfpoint{.2cm}{.075cm}}
+ \pgfpatharc{270}{315}{.125cm}
+ \pgflineto{\pgfpoint{.425cm}{.25cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+\NewDocumentCommand{\rpgiconsattack}{ m O{} }{%
+ \hspace{\rpgicons@beforesep}%
+ \tikz[rpg icons, rpg icons/every attack, rpg icons/every #1,
+ baseline=\rpgicons@baseline, #2] {
+ \node[#1, draw, scale=.333] (0cm,0cm) {};
+ \path[draw=none, scale=.333] ([yshift=-1pt].425cm,.425cm) rectangle ([yshift=1pt]-.425cm,-.425cm);
+ }%
+ \hspace{\rpgicons@aftersep}%
+}
+\@ifundefined{attack}{\NewCommandCopy\attack\rpgiconsattack}{}
+
+% CONDITIONS
+
+% buff
+\pgfdeclareshape{buff}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.425cm}{-.225cm}}
+ \pgflineto{\pgfpoint{-.225cm}{-.425cm}}
+ \pgflineto{\pgfpoint{-.1cm}{-.3cm}}
+ \pgflineto{\pgfpoint{.125cm}{-.3cm}}
+ \pgflineto{\pgfpoint{.425cm}{0cm}}
+ \pgfpatharc{45}{135}{.1cm}
+ \pgflineto{\pgfpoint{.1cm}{-.15cm}}
+ \pgflineto{\pgfpoint{-.05cm}{-.15cm}}
+ \pgfpatharc{270}{90}{.05cm}
+ \pgflineto{\pgfpoint{0cm}{-.05cm}}
+ \pgfpatharc{270}{360}{.1cm}
+ \pgflineto{\pgfpoint{-.1cm}{.05cm}}
+ \pgfpatharc{90}{135}{.125cm}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpoint{-.25cm}{-.225cm}}
+ \pgflineto{\pgfpoint{-.15cm}{-.325cm}}
+ \pgfpathmoveto{\pgfpoint{0cm}{.425cm}}
+ \pgflineto{\pgfpoint{.25cm}{.425cm}}
+ \pgflineto{\pgfpoint{.25cm}{.275cm}}
+ \pgfpatharc{360}{180}{.125cm}
+ \pgfpathclose
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% blinded
+\pgfdeclareshape{blinded}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{0cm}{.225cm}}
+ \pgfpatharc{90}{30}{.45cm}
+ \pgfpatharc{330}{210}{.45cm}
+ \pgfpatharc{150}{90}{.45cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{.225cm}}
+ \pgfpathcircle{\pgfpoint{0cm}{0cm}}{.15cm}
+ \pgfpathmoveto{\pgfpoint{-.425cm}{-.425cm}}
+ \pgflineto{\pgfpoint{-.25cm}{-.25cm}}
+ \pgfpathmoveto{\pgfpoint{0cm}{0cm}}
+ \pgflineto{\pgfpoint{.425cm}{.425cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% charmed
+\pgfdeclareshape{charmed}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathcircle{\pgfpoint{0cm}{0cm}}{.425cm}
+ \pgfpathmoveto{\pgfpoint{-.175cm}{-.1cm}}
+ \pgfpatharc{180}{360}{.175cm}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpoint{-.175cm}{.15cm}}
+ \pgfpatharc{0}{225}{.0625cm}
+ \pgfpathlineto{\pgfpoint{-.175cm}{0cm}}
+ \pgfpathmoveto{\pgfpoint{-.175cm}{.15cm}}
+ \pgfpatharc{180}{-45}{.0625cm}
+ \pgfpathlineto{\pgfpoint{-.175cm}{0cm}}
+ \pgfpathmoveto{\pgfpoint{.175cm}{.15cm}}
+ \pgfpatharc{0}{225}{.0625cm}
+ \pgfpathlineto{\pgfpoint{.175cm}{0cm}}
+ \pgfpathmoveto{\pgfpoint{.175cm}{.15cm}}
+ \pgfpatharc{180}{-45}{.0625cm}
+ \pgfpathlineto{\pgfpoint{.175cm}{0cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% deafened
+\pgfdeclareshape{deafened}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.175cm}{-.275cm}}
+ \pgfpatharc{180}{360}{.15cm}
+ \pgflineto{\pgfpoint{.125cm}{-.225cm}}
+ \pgfpatharc{180}{135}{.25cm}
+ \pgfpatharc{315}{360}{.25cm}
+ \pgfpatharc{0}{180}{.275cm}
+ \pgfpathmoveto{\pgfpoint{-.15cm}{-.1cm}}
+ \pgfpatharc{-90}{90}{.075cm}
+ \pgflineto{\pgfpoint{-.15cm}{.125cm}}
+ \pgfpatharc{180}{45}{.15cm}
+ \pgfpathmoveto{\pgfpoint{-.425cm}{-.425cm}}
+ \pgflineto{\pgfpoint{-.2cm}{-.2cm}}
+ \pgfpathmoveto{\pgfpoint{0cm}{0cm}}
+ \pgflineto{\pgfpoint{.425cm}{.425cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% exhausted
+\pgfdeclareshape{exhausted}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathcircle{\pgfpoint{0cm}{0cm}}{.425cm}
+ \pgfpathmoveto{\pgfpoint{-.175cm}{-.225cm}}
+ \pgfpatharc{180}{0}{.175cm}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpoint{.275cm}{.15cm}}
+ \pgfpatharc{180}{0}{-.1cm}
+ \pgfpathmoveto{\pgfpoint{-.075cm}{.15cm}}
+ \pgfpatharc{180}{0}{-.1cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% frightened
+\pgfdeclareshape{frightened}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathcircle{\pgfpoint{0cm}{0cm}}{.425cm}
+ \pgfpathmoveto{\pgfpoint{-.175cm}{-.225cm}}
+ \pgfpatharc{180}{0}{.175cm}
+ \pgfpathclose
+ \pgfpathcircle{\pgfpoint{-.175cm}{.125cm}}{.075cm}
+ \pgfpathcircle{\pgfpoint{.175cm}{.125cm}}{.075cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% grappled
+\pgfdeclareshape{grappled}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.25cm}{.3cm}}
+ \pgfpatharc{90}{-90}{.075cm}
+ \pgfpathlineto{\pgfpoint{-.35cm}{.15cm}}
+ \pgfpatharc{270}{90}{.075cm}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpoint{-.2cm}{.15cm}}
+ \pgfpatharc{90}{-90}{.075cm}
+ \pgfpathlineto{\pgfpoint{-.35cm}{0cm}}
+ \pgfpatharc{270}{90}{.075cm}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpoint{-.2cm}{0cm}}
+ \pgfpatharc{90}{-90}{.075cm}
+ \pgfpathlineto{\pgfpoint{-.35cm}{-.15cm}}
+ \pgfpatharc{270}{90}{.075cm}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpoint{-.2cm}{-.15cm}}
+ \pgfpatharc{90}{-90}{.075cm}
+ \pgfpathlineto{\pgfpoint{-.3cm}{-.3cm}}
+ \pgfpatharc{270}{90}{.075cm}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpoint{.425cm}{.05cm}}
+ \pgfpatharc{0}{90}{.25cm}
+ \pgfpathlineto{\pgfpoint{-.05cm}{.3cm}}
+ \pgfpatharc{180}{270}{.15cm}
+ \pgfpathlineto{\pgfpoint{.175cm}{.15cm}}
+ \pgfpathlineto{\pgfpoint{.175cm}{-.425cm}}
+ \pgfpathmoveto{\pgfpoint{.175cm}{-.275cm}}
+ \pgfpathlineto{\pgfpoint{.425cm}{-.275cm}}
+ \pgfpathmoveto{\pgfpoint{.175cm}{.3cm}}
+ \pgfpathlineto{\pgfpoint{.175cm}{.425cm}}
+ \pgfpathmoveto{\pgfpoint{-.3cm}{.3cm}}
+ \pgfpathlineto{\pgfpoint{-.3cm}{.425cm}}
+ \pgfpathmoveto{\pgfpoint{-.3cm}{-.3cm}}
+ \pgfpathlineto{\pgfpoint{-.3cm}{-.425cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% incapacitated
+\pgfdeclareshape{incapacitated}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpointpolar{30}{.425cm}}
+ \pgfpatharc{270}{210}{.425cm}
+ \pgfpathlineto{\pgfpointpolar{90}{-.425cm}}
+ \pgfpatharc{30}{90}{.425cm}
+ \pgfpathmoveto{\pgfpointpolar{90}{.425cm}}
+ \pgfpatharc{330}{270}{.425cm}
+ \pgfpathlineto{\pgfpointpolar{150}{-.425cm}}
+ \pgfpatharc{90}{150}{.425cm}
+ \pgfpathmoveto{\pgfpointpolar{150}{.425cm}}
+ \pgfpatharc{30}{-30}{.425cm}
+ \pgfpathlineto{\pgfpointpolar{210}{-.425cm}}
+ \pgfpatharc{150}{210}{.425cm}
+ \pgfpathmoveto{\pgfpointpolar{30}{.25cm}}
+ \pgfpatharc{270}{210}{.25cm}
+ \pgfpatharc{330}{270}{.25cm}
+ \pgfpatharc{30}{-30}{.25cm}
+ \pgfpatharc{90}{30}{.25cm}
+ \pgfpatharc{150}{90}{.25cm}
+ \pgfpatharc{210}{150}{.25cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% invisible
+\pgfdeclareshape{invisible}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpointpolar{-15}{.425cm}}
+ \pgfpatharc{-15}{15}{.425cm}
+ \pgfpathmoveto{\pgfpointpolar{30}{.425cm}}
+ \pgfpatharc{30}{60}{.425cm}
+ \pgfpathmoveto{\pgfpointpolar{75}{.425cm}}
+ \pgfpatharc{75}{105}{.425cm}
+ \pgfpathmoveto{\pgfpointpolar{120}{.425cm}}
+ \pgfpatharc{120}{150}{.425cm}
+ \pgfpathmoveto{\pgfpointpolar{165}{.425cm}}
+ \pgfpatharc{165}{195}{.425cm}
+ \pgfpathmoveto{\pgfpointpolar{210}{.425cm}}
+ \pgfpatharc{210}{240}{.425cm}
+ \pgfpathmoveto{\pgfpointpolar{255}{.425cm}}
+ \pgfpatharc{255}{285}{.425cm}
+ \pgfpathmoveto{\pgfpointpolar{300}{.425cm}}
+ \pgfpatharc{300}{330}{.425cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% paralyzed
+\pgfdeclareshape{paralyzed}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathcircle{\pgfpoint{0cm}{0cm}}{.425cm}
+ \pgfpathmoveto{\pgfpoint{-.175cm}{-.225cm}}
+ \pgfpatharc{180}{0}{.175cm}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpoint{.25cm}{.2cm}}
+ \pgfpathlineto{\pgfpoint{.1cm}{.05cm}}
+ \pgfpathmoveto{\pgfpoint{.25cm}{.05cm}}
+ \pgfpathlineto{\pgfpoint{.1cm}{.2cm}}
+ \pgfpathmoveto{\pgfpoint{-.25cm}{.2cm}}
+ \pgfpathlineto{\pgfpoint{-.1cm}{.05cm}}
+ \pgfpathmoveto{\pgfpoint{-.25cm}{.05cm}}
+ \pgfpathlineto{\pgfpoint{-.1cm}{.2cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% petrified
+\pgfdeclareshape{petrified}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpointpolar{45}{.425cm}}
+ \pgfpathlineto{\pgfpointpolar{100}{.425cm}}
+ \pgfpathlineto{\pgfpointpolar{135}{.425cm}}
+ \pgfpathlineto{\pgfpointpolar{190}{.425cm}}
+ \pgfpathlineto{\pgfpointpolar{230}{.425cm}}
+ \pgfpathlineto{\pgfpointpolar{250}{.425cm}}
+ \pgfpathlineto{\pgfpointpolar{300}{.425cm}}
+ \pgfpathlineto{\pgfpointpolar{350}{.425cm}}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpointpolar{135}{.425cm}}
+ \pgfpathlineto{\pgfpointpolar{130}{.35cm}}
+ \pgfpathlineto{\pgfpoint{-.25cm}{.075cm}}
+ \pgfpathlineto{\pgfpointpolar{220}{.2cm}}
+ \pgfpathlineto{\pgfpointpolar{240}{.325cm}}
+ \pgfpathmoveto{\pgfpointpolar{300}{.425cm}}
+ \pgfpathlineto{\pgfpointpolar{330}{.3cm}}
+ \pgfpathlineto{\pgfpointpolar{350}{.225cm}}
+ \pgfpathmoveto{\pgfpointpolar{45}{.425cm}}
+ \pgfpathlineto{\pgfpointpolar{60}{.3cm}}
+ \pgfpathlineto{\pgfpointpolar{130}{.35cm}}
+ \pgfpathmoveto{\pgfpoint{-.15cm}{-.175cm}}
+ \pgfpathlineto{\pgfpoint{.075cm}{-.15cm}}
+ \pgfpathlineto{\pgfpoint{.125cm}{-.2cm}}
+ \pgfpathmoveto{\pgfpoint{-.25cm}{.075cm}}
+ \pgfpathlineto{\pgfpoint{-.1cm}{.1cm}}
+ \pgfpathmoveto{\pgfpoint{.25cm}{.075cm}}
+ \pgfpathlineto{\pgfpoint{.1cm}{.1cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% poisoned
+\pgfdeclareshape{poisoned}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathcircle{\pgfpoint{0cm}{0cm}}{.425cm}
+ \pgfpathmoveto{\pgfpoint{-.15cm}{-.2cm}}
+ \pgfpathlineto{\pgfpoint{-.075cm}{-.125cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.2cm}}
+ \pgfpathlineto{\pgfpoint{.075cm}{-.125cm}}
+ \pgfpathlineto{\pgfpoint{.15cm}{-.2cm}}
+ \pgfpathmoveto{\pgfpoint{.25cm}{.175cm}}
+ \pgfpathlineto{\pgfpoint{.1cm}{.1cm}}
+ \pgfpathlineto{\pgfpoint{.25cm}{.025cm}}
+ \pgfpathmoveto{\pgfpoint{-.25cm}{.175cm}}
+ \pgfpathlineto{\pgfpoint{-.1cm}{.1cm}}
+ \pgfpathlineto{\pgfpoint{-.25cm}{.025cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% prone
+\pgfdeclareshape{prone}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathcircle{\pgfpoint{.2cm}{-.125cm}}{.125cm}
+ \pgfpathmoveto{\pgfpoint{-.425cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{-.15cm}{0cm}}
+ \pgfpatharc{90}{-90}{.125cm}
+ \pgfpathlineto{\pgfpoint{-.425cm}{-.25cm}}
+
+ \pgfpathmoveto{\pgfpoint{.225cm}{.15cm}}
+ \pgfpatharc{270}{360}{.1cm}
+ \pgfpatharc{180}{270}{.1cm}
+ \pgfpatharc{90}{180}{.1cm}
+ \pgfpatharc{0}{90}{.1cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{.25cm}}
+ \pgfpatharc{270}{360}{.1cm}
+ \pgfpatharc{180}{270}{.1cm}
+ \pgfpatharc{90}{180}{.1cm}
+ \pgfpatharc{0}{90}{.1cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% restrained
+\pgfdeclareshape{restrained}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.075cm}{-.225cm}}
+ \pgfpathlineto{\pgfpoint{-.075cm}{.225cm}}
+ \pgfpatharc{90}{180}{.125cm}
+ \pgfpathlineto{\pgfpoint{-.2cm}{0cm}}
+ \pgfpatharc{270}{180}{.1cm}
+ \pgfpathlineto{\pgfpoint{-.3cm}{.3cm}}
+ \pgfpatharc{0}{90}{.125cm}
+ \pgfpathlineto{\pgfpoint{-.425cm}{-.075cm}}
+ \pgfpatharc{180}{235}{.1cm}
+ \pgfpathlineto{\pgfpoint{-.3cm}{-.225cm}}
+ \pgfpathmoveto{\pgfpoint{.075cm}{-.225cm}}
+ \pgfpathlineto{\pgfpoint{.075cm}{.225cm}}
+ \pgfpatharc{90}{0}{.125cm}
+ \pgfpathlineto{\pgfpoint{.2cm}{0cm}}
+ \pgfpatharc{-90}{0}{.1cm}
+ \pgfpathlineto{\pgfpoint{.3cm}{.3cm}}
+ \pgfpatharc{180}{90}{.125cm}
+ \pgfpathlineto{\pgfpoint{.425cm}{-.075cm}}
+ \pgfpatharc{360}{330}{.1cm}
+ \pgfpathlineto{\pgfpoint{.3cm}{-.225cm}}
+ \pgfpathmoveto{\pgfpoint{.35cm}{-.225cm}}
+ \pgfpatharc{90}{-90}{.05cm}
+ \pgfpathlineto{\pgfpoint{-.35cm}{-.325cm}}
+ \pgfpatharc{270}{90}{.05cm}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpoint{.35cm}{-.325cm}}
+ \pgfpatharc{90}{-90}{.05cm}
+ \pgfpathlineto{\pgfpoint{-.35cm}{-.425cm}}
+ \pgfpatharc{270}{90}{.05cm}
+ \pgfpathclose
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% stunned
+\pgfdeclareshape{stunned}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathcircle{\pgfpoint{0cm}{0cm}}{.425cm}
+ \pgfpathellipse{\pgfpoint{0cm}{-.175cm}}{\pgfpoint{0cm}{.1cm}}{\pgfpoint{.175cm}{0cm}}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{-.175cm}{.125cm}}{\pgfpointpolar{90}{.125cm}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{-.175cm}{.125cm}}{\pgfpointpolar{126}{.05cm}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{-.175cm}{.125cm}}{\pgfpointpolar{162}{.125cm}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{-.175cm}{.125cm}}{\pgfpointpolar{198}{.05cm}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{-.175cm}{.125cm}}{\pgfpointpolar{234}{.125cm}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{-.175cm}{.125cm}}{\pgfpointpolar{270}{.05cm}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{-.175cm}{.125cm}}{\pgfpointpolar{306}{.125cm}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{-.175cm}{.125cm}}{\pgfpointpolar{342}{.05cm}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{-.175cm}{.125cm}}{\pgfpointpolar{18}{.125cm}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{-.175cm}{.125cm}}{\pgfpointpolar{54}{.05cm}}}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{.175cm}{.125cm}}{\pgfpointpolar{90}{.125cm}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{.175cm}{.125cm}}{\pgfpointpolar{126}{.05cm}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{.175cm}{.125cm}}{\pgfpointpolar{162}{.125cm}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{.175cm}{.125cm}}{\pgfpointpolar{198}{.05cm}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{.175cm}{.125cm}}{\pgfpointpolar{234}{.125cm}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{.175cm}{.125cm}}{\pgfpointpolar{270}{.05cm}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{.175cm}{.125cm}}{\pgfpointpolar{306}{.125cm}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{.175cm}{.125cm}}{\pgfpointpolar{342}{.05cm}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{.175cm}{.125cm}}{\pgfpointpolar{18}{.125cm}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{.175cm}{.125cm}}{\pgfpointpolar{54}{.05cm}}}
+ \pgfpathclose
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% unconscious
+\pgfdeclareshape{unconscious}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{0cm}{.15cm}}
+ \pgfpatharc{90}{-30}{.425cm and .15cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{-.15cm}}
+ \pgfpatharc{270}{150}{.425cm and .15cm}
+ \pgfpathmoveto{\pgfpoint{-.35cm}{.15cm}}
+ \pgfpatharc{270}{360}{.125cm}
+ \pgfpatharc{180}{270}{.125cm}
+ \pgfpatharc{90}{180}{.125cm}
+ \pgfpatharc{0}{90}{.125cm}
+ \pgfpathmoveto{\pgfpoint{.1cm}{-.15cm}}
+ \pgfpatharc{270}{360}{.125cm}
+ \pgfpatharc{180}{270}{.125cm}
+ \pgfpatharc{90}{180}{.125cm}
+ \pgfpatharc{0}{90}{.125cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% hearing
+\pgfdeclareshape{hearing}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.175cm}{-.275cm}}
+ \pgfpatharc{180}{360}{.15cm}
+ \pgflineto{\pgfpoint{.125cm}{-.225cm}}
+ \pgfpatharc{180}{135}{.25cm}
+ \pgfpatharc{315}{360}{.25cm}
+ \pgfpatharc{0}{180}{.275cm}
+ \pgfpathmoveto{\pgfpoint{-.15cm}{-.1cm}}
+ \pgfpatharc{-90}{90}{.075cm}
+ \pgflineto{\pgfpoint{-.15cm}{.125cm}}
+ \pgfpatharc{180}{45}{.15cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% seeing
+\pgfdeclareshape{seeing}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{0cm}{.225cm}}
+ \pgfpatharc{90}{30}{.45cm}
+ \pgfpatharc{330}{210}{.45cm}
+ \pgfpatharc{150}{90}{.45cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{.225cm}}
+ \pgfpathcircle{\pgfpoint{0cm}{0cm}}{.15cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+\NewDocumentCommand{\rpgiconscondition}{ m O{} }{%
+ \hspace{\rpgicons@beforesep}%
+ \tikz[rpg icons, rpg icons/every condition, rpg icons/every #1,
+ baseline=\rpgicons@baseline, #2] {
+ \node[#1, draw, scale=.333] (0cm,0cm) {};
+ \path[draw=none, scale=.333] ([yshift=-1pt].425cm,.425cm) rectangle ([yshift=1pt]-.425cm,-.425cm);
+ }%
+ \hspace{\rpgicons@aftersep}%
+}
+\@ifundefined{condition}{\NewCommandCopy\condition\rpgiconscondition}{}
+
+% make tikz icons available as pics
+\ifrpgicons@pics
+
+\tikzset{
+ rpg icons/create pic from shape/.code={%
+ \tikzset{
+ rpg icons #1/.pic={
+ \begin{scope}[every node/.append style={#1}, rpg icons/every #1]
+ \node[draw, scale=.333] (0cm,0cm) (-node) {};
+ \path[draw=none, scale=.333] ([yshift=-1pt].425cm,.425cm) rectangle ([yshift=1pt]-.425cm,-.425cm);
+ \end{scope}
+ },
+ }%
+ },
+ rpg icons/create pic from ability shape/.code={%
+ \tikzset{
+ rpg icons #1 ability/.pic={
+ \begin{scope}[every node/.append style={#1}, rpg icons/every ability, rpg icons/every #1]
+ \path[scale=.333, pic actions] (0cm,0cm) circle[radius=.45cm];
+ \node[draw, scale=.225] (0cm,0cm) (-node) {};
+ \path[draw=none, scale=.333] ([yshift=-1pt].425cm,.425cm) rectangle ([yshift=1pt]-.425cm,-.425cm);
+ \end{scope}
+ }
+ }%
+ },
+ rpg icons/create pic from saving shape/.code={%
+ \tikzset{
+ rpg icons #1 saving/.pic={
+ \begin{scope}[every node/.append style={#1}, rpg icons/every saving, rpg icons/every #1]
+ \path[draw, scale=.333, pic actions] (-.45cm,.45cm) -- (.45cm,.45cm) -- (.45cm,-.05cm)
+ arc[start angle=360, end angle=180, radius=.45cm] -- cycle;
+ \node[#1, draw, scale=.225] (0cm,0cm) (-node) {};
+ \path[draw=none, scale=.333] ([yshift=-1pt].425cm,.425cm) rectangle ([yshift=1pt]-.425cm,-.425cm);
+ \end{scope}
+ }
+ }%
+ },
+ rpg icons/create pic from spellschool shape/.code={%
+ \tikzset{
+ rpg icons #1 spellschool/.pic={
+ \begin{scope}[every node/.append style={#1}, rpg icons/every spellschool, rpg icons/every #1]
+ \path[draw, scale=.333, pic actions] (-.475cm,.35cm)
+ -- (-.35cm,.475cm) -- (.35cm,.475cm) -- (.475cm,.35cm) -- (.425cm,-.375cm) -- (0cm,-.475cm) -- (-.425cm,-.375cm) -- cycle;
+ \node[#1, draw, scale=.225] (0cm,0cm) (-node) {};
+ \path[draw=none, scale=.333] ([yshift=-1pt].425cm,.425cm) rectangle ([yshift=1pt]-.425cm,-.425cm);
+ \end{scope}
+ }
+ }%
+ },
+ rpg icons/create pic from damage shape/.code={
+ \tikzset{
+ rpg icons #1 damage/.pic={
+ \begin{scope}[every node/.append style={#1}, rpg icons/every damage, rpg icons/every #1]
+ \path[draw, scale=.333, pic actions] (0cm,0cm) circle[radius=.5cm];
+ \node[#1, draw, scale=.225] (0cm,0cm) (-node) {};
+ \path[draw=none, scale=.333] ([yshift=-1pt].425cm,.425cm) rectangle ([yshift=1pt]-.425cm,-.425cm);
+ \end{scope}
+ }
+ }
+ },
+ rpg icons/create pic from shape/.list/.expanded={%
+ \rpgicons@allshapes%
+ },
+ rpg icons/create pic from ability shape/.list={%
+ strength, dexterity, dexterity alt, constitution, intelligence, wisdom, charisma,
+ resilience, sanity, perception, luck, armor, proficiency%
+ },
+ rpg icons/create pic from saving shape/.list={%
+ strength, dexterity, dexterity alt, constitution, intelligence, wisdom, charisma,
+ resilience, sanity, perception, luck, armor, proficiency%
+ },
+ rpg icons/create pic from spellschool shape/.list={%
+ abjuration, conjuration, divination, enchantment, evocation, illusion, necromancy, transmutation%
+ },
+ rpg icons/create pic from damage shape/.list={%
+ acid, bludgeoning, cold, fire, force, lightning, necrotic, piercing, poison, psychic,
+ radiant, slashing, thunder, healing%
+ }
+}
+
+\fi
+
+% ROLL SYNTAX
+
+\ExplSyntaxOn
+
+\cs_if_exist:NF \rpgicons_roll_syntax_parse:n {
+
+ \bool_new:N \l__rpgicons_unicode_mode_bool
+ \sys_if_engine_luatex:T {
+ \bool_set_true:N \l__rpgicons_unicode_mode_bool
+ }
+ \sys_if_engine_xetex:T {
+ \bool_set_true:N \l__rpgicons_unicode_mode_bool
+ }
+
+ \regex_new:N \l__rpgicons_roll_syntax_die_regex
+ \cs_generate_variant:Nn \regex_set:Nn { Ne }
+ \cs_new:Npn \rpgicons_roll_syntax_die_set:n #1 {
+ \regex_set:Ne \l__rpgicons_roll_syntax_die_regex { [ \clist_use:nn {#1} { } ] }
+ }
+
+ \cs_new:Npn \rpgicons_roll_syntax_convert:n #1 {
+ \str_case:nnF {#1} {
+ { 2 } { twoside }
+ { 4 } { fourside }
+ { 6 } { sixside }
+ { 8 } { eightside }
+ { 10 } { tenside }
+ { 12 } { twelveside }
+ { 20 } { twentyside }
+ { 100 } { hundredside }
+ { F } { fudge }
+ }
+ {#1}
+ }
+
+ \seq_new:N \l__rpgicons_roll_syntax_seq
+ \tl_new:N \l__rpgicons_roll_syntax_part_tl
+ \regex_new:N \l__rpgicons_roll_syntax_split_regex
+ \regex_new:N \l__rpgicons_roll_syntax_plusminus_regex
+ \regex_new:N \l__rpgicons_roll_syntax_times_regex
+ \bool_if:NTF \l__rpgicons_unicode_mode_bool {
+ \regex_set:Nn \l__rpgicons_roll_syntax_split_regex { \s*([\+\-\x{2212}x\*\x{00D7}])\s* }
+ \regex_set:Nn \l__rpgicons_roll_syntax_plusminus_regex { \A([\+\-\x{2212}])\Z }
+ \regex_set:Nn \l__rpgicons_roll_syntax_times_regex { \A([x\*\x{00D7}])\Z }
+ } {
+ \regex_set:Nn \l__rpgicons_roll_syntax_split_regex { \s*([\+\-x\*\x{00D7}])\s* }
+ \regex_set:Nn \l__rpgicons_roll_syntax_plusminus_regex { \A([\+\-])\Z }
+ \regex_set:Nn \l__rpgicons_roll_syntax_times_regex { \A([x\*\x{00D7}])\Z }
+ }
+ \regex_new:N \l__rpgicons_roll_syntax_dice_regex
+ \cs_new:Npn \rpgicons_roll_syntax_parse:n #1 {
+ \regex_set:Nn \l__rpgicons_roll_syntax_dice_regex { \A(\d*)\ur{l__rpgicons_roll_syntax_die_regex}([F\d]+)\Z }
+ \regex_split:NnN \l__rpgicons_roll_syntax_split_regex {#1} \l__rpgicons_roll_syntax_seq
+ \seq_map_inline:Nn \l__rpgicons_roll_syntax_seq {
+ \tl_set:Ne \l__rpgicons_roll_syntax_part_tl {##1}
+ \regex_replace_case_once:nNTF {
+ { \l__rpgicons_roll_syntax_plusminus_regex } { \c{,} $\1$ \c{,} }
+ { \l__rpgicons_roll_syntax_times_regex } { \c{,} $\c{times}$ \c{,} }
+ { \l__rpgicons_roll_syntax_dice_regex }
+ { \c{ rpgiconsdie } { \c{ rpgicons_roll_syntax_convert:n } { \2 } } { \1 } }
+ } \l__rpgicons_roll_syntax_part_tl
+ { \tl_use:N \l__rpgicons_roll_syntax_part_tl }
+ { \tl_use:N \l__rpgicons_roll_syntax_part_tl }
+ }
+ }
+
+}
+
+\tikzset{
+ rpg ~ icons/roll ~ syntax/.code={
+ \rpgicons_roll_syntax_die_set:n {#1}
+ },
+ rpg ~ icons/roll ~ syntax={d,D}
+}
+
+\NewDocumentCommand{\rpgiconsroll}{ m }{
+ \rpgicons_roll_syntax_parse:n {#1}
+}
+
+\ExplSyntaxOff
+
+\@ifundefined{roll}{\NewCommandCopy\roll\rpgiconsroll}{}
+
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/rpgicons/rpgicons.sty b/macros/latex/contrib/rpgicons/rpgicons.sty
new file mode 100644
index 0000000000..8079232a4f
--- /dev/null
+++ b/macros/latex/contrib/rpgicons/rpgicons.sty
@@ -0,0 +1,35 @@
+% File: rpgicons.sty
+% Copyright 2024 Jasper Habicht (mail(at)jasperhabicht.de).
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License version 1.3c,
+% available at http://www.latex-project.org/lppl/.
+%
+% This file is part of the `rpgicons' package (The Work in LPPL)
+% and all files in that bundle must be distributed together.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+\ProvidesExplPackage {rpgicons} {2024-05-15} {1.8.3}
+ {rpg Icons Package}
+
+\bool_new:N \l__rpgicons_use_legacy_variant_bool
+\clist_new:N \l__rpgicons_forwarded_options_clist
+\keys_define:nn { rpgicons / select ~ variant } {
+ l3 .bool_set:N = \l__rpgicons_use_legacy_variant_bool ,
+ l3 .default:n = { false } ,
+ pgf .bool_set:N = \l__rpgicons_use_legacy_variant_bool ,
+ pgf .default:n = { true } ,
+ pics .code:n = { \clist_put_right:Nn \l__rpgicons_forwarded_options_clist { pics } } ,
+ compat .code:n = { \clist_put_right:Nn \l__rpgicons_forwarded_options_clist { compat } } ,
+ opacity .code:n = { \clist_put_right:Nn \l__rpgicons_forwarded_options_clist { opacity } }
+}
+\ProcessKeyOptions [ rpgicons / select ~ variant ]
+
+\bool_if:NTF \l__rpgicons_use_legacy_variant_bool {
+ \RequirePackage [ \l__rpgicons_forwarded_options_clist ] { rpgicons-pgf }
+} {
+ \RequirePackage [ \l__rpgicons_forwarded_options_clist ] { rpgicons-l3 }
+}
+
+% EOF \ No newline at end of file
diff --git a/macros/latex/contrib/rub-kunstgeschichte/README.md b/macros/latex/contrib/rub-kunstgeschichte/README.md
new file mode 100644
index 0000000000..4d8ac8c06a
--- /dev/null
+++ b/macros/latex/contrib/rub-kunstgeschichte/README.md
@@ -0,0 +1,11 @@
+# `rub-kunstgeschichte` - Class for the art history institute at Ruhr University Bochum
+
+A LaTeX class implementing the guidelines on scientific writing of the art history institute "KGI" (Kunstgeschichtliches Institut) at Ruhr University Bochum.
+
+## Author
+
+This package is maintained by Joran Schneyer: [joran.schneyer@ruhr-uni-bochum.de](mailto:joran.schneyer@ruhr-uni-bochum.de)
+
+## License
+
+Released under the LaTeX Project Public License v1.3c or later. See https://www.latex-project.org/lppl.txt \ No newline at end of file
diff --git a/macros/latex/contrib/rub-kunstgeschichte/rub-kunstgeschichte-example.pdf b/macros/latex/contrib/rub-kunstgeschichte/rub-kunstgeschichte-example.pdf
new file mode 100644
index 0000000000..891c9e8e97
--- /dev/null
+++ b/macros/latex/contrib/rub-kunstgeschichte/rub-kunstgeschichte-example.pdf
Binary files differ
diff --git a/macros/latex/contrib/rub-kunstgeschichte/rub-kunstgeschichte.dtx b/macros/latex/contrib/rub-kunstgeschichte/rub-kunstgeschichte.dtx
new file mode 100644
index 0000000000..5423d5babe
--- /dev/null
+++ b/macros/latex/contrib/rub-kunstgeschichte/rub-kunstgeschichte.dtx
@@ -0,0 +1,192 @@
+% \iffalse meta-comment
+%
+% File: rub-kunstgeschichte.dtx
+% Copyright (C) 2024 by Joran Schneyer <joran.schneyer@ruhr-uni-bochum.de>
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3c
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% https://www.latex-project.org/lppl.txt
+% and version 1.3c or later is part of all distributions of LaTeX
+% version 2008 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Joran Schneyer <joran.schneyer@ruhr-uni-bochum.de>.
+%
+% This work consists of the files rub-kunstgeschichte.dtx
+% rub-kunstgeschichte.ins
+% and the derived files rub-kunstgeschichte.cls
+% rub-kunstgeschichte-example.tex
+%
+% \fi
+
+% \iffalse
+%<*driver>
+\ProvidesFile{rub-kunstgeschichte.dtx}
+%</driver>
+%<class>\NeedsTeXFormat{LaTeX2e}[2022-06-01]
+%<class>\ProvidesClass{rub-kunstgeschichte}
+%<*class>
+ [2024-05-26 v0.1.0 RUB KGI class]
+%</class>
+%<*driver>
+\documentclass{ltxdoc}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+ \DocInput{\jobname.dtx}
+ \PrintChanges
+ \PrintIndex
+\end{document}
+%</driver>
+% \fi
+%
+%^^A Document general changes here
+% \changes{v0.1.0}{2024-05-26}{Initial version}
+%
+% \GetFileInfo{\jobname.dtx}
+%
+% \DoNotIndex{\newcommand,\newenvironment}
+% \DoNotIndex{\begin,\end}
+%
+%^^A define helper commands for consistent typesetting in the documentation
+% \def\env{\texttt}
+% \def\opt{\texttt}
+% \def\cls{\textsf}
+% \def\pkg{\textsf}
+% \def\prg{\textsf}
+% \DeclareDocumentCommand\email{m}{\href{mailto:#1}{\nolinkurl{#1}}}
+%
+% \title{The \cls{\jobname} class^^A
+% \thanks{This document corresponds to \pkg{\jobname}~\fileversion,
+% dated \filedate.}}
+% \author{\copyright{} Joran Schneyer^^A
+% \thanks{Released under the LaTeX Project Public License v1.3c or later.^^A
+% \\ See \url{https://www.latex-project.org/lppl.txt}}^^A
+% \\ \email{joran.schneyer@ruhr-uni-bochum.de}}
+% \date{\filedate}
+%
+% \maketitle
+%
+% \section{Introduction}\label{sec:introduction}
+%
+% This \LaTeX{} class aims to implement the guidelines on scientific writing of the art history institute (Kunstgeschichtliches Institut - short: KGI) at Ruhr University Bochum.^^A
+% \footnote{Guidelines version July 2023 \url{https://kgi.ruhr-uni-bochum.de/wp-content/uploads/2023/04/Anleitung-zum-Erstellen-von-Hausarbeiten-im-Fach-Kunstgeschichte_Fassung-Juli-2023.pdf}}
+%
+% Note, that at this point this is not an official class made by anyone at the institute but rather a free-time hobby project of me, Joran, who knows \LaTeX{} from studying Electrical Engineering and just wants to help out some friends studying art history.
+%
+% You can find the latest releases and the development of this project at GitHub: \url{https://github.com/rub-kgi/rub-kunstgeschichte-latex}
+%
+% \section{Usage}\label{sec:usage}
+%
+% To use this class, simply specify it as the document class.^^A
+% \footnote{You can also find a complete example usage of this class in \autoref{sec:example}.}
+% \begin{verbatim}
+% \documentclass{rub-kunstgeschichte}
+% \end{verbatim}
+%
+% \StopEventually{}
+%
+% \clearpage
+% \appendix
+%
+% \section{Implementation}\label{sec:implementation}
+%
+% \iffalse
+%<*class>
+% \fi
+%
+% \subsection{Base class}\label{sec:implementation:base-class}
+% The \cls{\jobname} class is based on the \cls{article} class.
+% When loading the class we specify \texttt{12pt} as the base font size, as required by the guidelines.
+% \iffalse
+%% Load base class with 12pt base font size
+% \fi
+% \begin{macrocode}
+\LoadClass[12pt]{article}
+% \end{macrocode}
+%
+% \subsection{Loading packages}\label{sec:implementation:package-loading}
+%
+% \paragraph{Line spacing}
+% To achieve 1.5 times line spacing as required by the guidelines,
+% we simply load the package \pkg{setspace} with the \opt{onehalfspacing} option.
+% \iffalse
+%% Set 1.5 times line spacing
+% \fi
+% \begin{macrocode}
+\RequirePackage[onehalfspacing]{setspace}
+% \end{macrocode}
+%
+% \paragraph{Margins}
+% The guidelines require 2cm top, left and bottom margins as well as a 4cm correction margin on the right side.
+% Furthermore A4 paper is the standard page size here.
+% \iffalse
+%% Set a4 paper size and margins
+% \fi
+% \begin{macrocode}
+\RequirePackage[
+ a4paper,
+ top=2cm,left=2cm,bottom=2cm,right=4cm
+]{geometry}
+% \end{macrocode}
+%
+% \iffalse
+%</class>
+%<*example>
+% \fi
+%
+% \section{Example}\label{sec:example}
+%
+% To further exemplify the use of this class,
+% we create an example .tex file.
+% The full \texttt{rub-kunstgeschichte-example.tex} and the corresponding \texttt{rub-kunstgeschichte-example.pdf} are available on GitHub.^^A
+% \footnote{\url{https://github.com/rub-kgi/rub-kunstgeschichte-latex/releases}}
+%
+% Let's examine the contents of this example .tex file step by step
+% to highlight features of this class that were used.
+%
+% First, the \cls{rub-kunstgeschichte} class is loaded
+% \iffalse
+%% Load the rub-kunstgeschichte class
+% \fi
+% \begin{macrocode}
+\documentclass{rub-kunstgeschichte}
+% \end{macrocode}
+% \iffalse
+
+% \fi
+%
+% and then the information needed to typeset a title is given:
+% \begin{macrocode}
+\title{Example usage of the \textsf{rub-kunstgeschichte} class}
+\author{Joran Schneyer}
+% \end{macrocode}
+%
+% Naturally, we begin the document environment and typeset the title
+% \begin{macrocode}
+\begin{document}
+ \maketitle
+% \end{macrocode}
+%
+% Next we need some text to show some features.
+% The text in the example itself will explain the features used.
+% \begin{macrocode}
+ Here is some text.
+ Note, how the typeset text has 12pt font size as specified
+ and there is a 1.5 times line-spacing present.
+% \end{macrocode}
+%
+% Finally we end the document environment
+% \begin{macrocode}
+\end{document}
+% \end{macrocode}
+% \iffalse
+
+%</example>
+% \fi
+%
+% \Finale \ No newline at end of file
diff --git a/macros/latex/contrib/rub-kunstgeschichte/rub-kunstgeschichte.ins b/macros/latex/contrib/rub-kunstgeschichte/rub-kunstgeschichte.ins
new file mode 100644
index 0000000000..32ba943f7f
--- /dev/null
+++ b/macros/latex/contrib/rub-kunstgeschichte/rub-kunstgeschichte.ins
@@ -0,0 +1,70 @@
+\iffalse meta-comment
+
+File: rub-kunstgeschichte.ins
+Copyright (C) 2024 by Joran Schneyer <joran.schneyer@ruhr-uni-bochum.de>
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.3c
+of this license or (at your option) any later version.
+The latest version of this license is in
+ https://www.latex-project.org/lppl.txt
+and version 1.3c or later is part of all distributions of LaTeX
+version 2008 or later.
+
+This work has the LPPL maintenance status `maintained'.
+
+The Current Maintainer of this work is Joran Schneyer <joran.schneyer@ruhr-uni-bochum.de>.
+
+This work consists of the files rub-kunstgeschichte.dtx
+ rub-kunstgeschichte.ins
+ and the derived files rub-kunstgeschichte.cls
+ rub-kunstgeschichte-example.tex
+
+\fi
+
+\input docstrip.tex
+\keepsilent
+
+\usedir{tex/latex/rub-kunstgeschichte}
+
+\preamble
+
+This is a generated file.
+
+Copyright (C) 2024 by Joran Schneyer <joran.schneyer@ruhr-uni-bochum.de>
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.3c
+of this license or (at your option) any later version.
+The latest version of this license is in
+ https://www.latex-project.org/lppl.txt
+and version 1.3c or later is part of all distributions of LaTeX
+version 2008 or later.
+
+This work has the LPPL maintenance status `maintained'.
+
+The Current Maintainer of this work is Joran Schneyer <joran.schneyer@ruhr-uni-bochum.de>.
+
+This work consists of the files rub-kunstgeschichte.dtx
+ rub-kunstgeschichte.ins
+ and the derived files rub-kunstgeschichte.cls
+ rub-kunstgeschichte-example.tex
+
+\endpreamble
+
+\generate{\file{rub-kunstgeschichte.cls}{\from{rub-kunstgeschichte.dtx}{class}}}
+\generate{\file{rub-kunstgeschichte-example.tex}{\from{rub-kunstgeschichte.dtx}{example}}}
+
+\obeyspaces
+\Msg{*********************************************************************}
+\Msg{* *}
+\Msg{* To finish the installation you have to move the following *}
+\Msg{* file into a directory searched by TeX: *}
+\Msg{* *}
+\Msg{* rub-kunstgeschichte.cls *}
+\Msg{* *}
+\Msg{* To produce the documentation run the file rub-kunstgeschichte.dtx *}
+\Msg{* through LaTeX. *}
+\Msg{*********************************************************************}
+
+\endbatchfile \ No newline at end of file
diff --git a/macros/latex/contrib/rub-kunstgeschichte/rub-kunstgeschichte.pdf b/macros/latex/contrib/rub-kunstgeschichte/rub-kunstgeschichte.pdf
new file mode 100644
index 0000000000..98614bb733
--- /dev/null
+++ b/macros/latex/contrib/rub-kunstgeschichte/rub-kunstgeschichte.pdf
Binary files differ
diff --git a/macros/latex/contrib/se2thesis/CHANGELOG.md b/macros/latex/contrib/se2thesis/CHANGELOG.md
index f5a4f80ded..35381f9588 100644
--- a/macros/latex/contrib/se2thesis/CHANGELOG.md
+++ b/macros/latex/contrib/se2thesis/CHANGELOG.md
@@ -7,6 +7,38 @@ and this project adheres to
## [Unreleased]
+## [v4.0.3] – 2024–05–27
+
+### Fixed
+
+- Add all missing option values for `se2thesis`' `colormode` parameter that are
+ available from the `se2colors` package.
+
+## [v4.0.2] – 2024–05–24
+
+### Added
+
+- Enhance documentation of `se2packages` regarding the usage of `minted` and the
+ grey-scale mode of `se2colors`.
+
+## [v4.0.1] – 2024–05–17
+
+### Fixed
+
+- Updated copyright years.
+- Add the missing `colormode` option `bw` to `se2colors`.
+
+## [v4.0.0] – 2024–05–08
+
+### Changed
+
+- Set the maths style and bold-maths style to ISO for the maths fonts.
+
+### Removed
+
+- The option `fmode` was removed from `se2fonts`; it was already deprecated
+ since `se2thesis` version 2.0.0.
+
## [v3.4.0] – 2024–04–20
### Added
@@ -185,7 +217,11 @@ These changes might be breaking changes!
### Added
- First official release
-[Unreleased]: https://github.com/se2p/se2thesis/compare/v3.4.0...HEAD
+[Unreleased]: https://github.com/se2p/se2thesis/compare/v4.0.3...HEAD
+[v4.0.3]: https://github.com/se2p/se2thesis/compare/v4.0.3...v4.0.2
+[v4.0.2]: https://github.com/se2p/se2thesis/compare/v4.0.2...v4.0.1
+[v4.0.1]: https://github.com/se2p/se2thesis/compare/v4.0.1...v4.0.0
+[v4.0.0]: https://github.com/se2p/se2thesis/compare/v4.0.0...v3.4.0
[v3.4.0]: https://github.com/se2p/se2thesis/compare/v3.4.0...v3.3.1
[v3.3.1]: https://github.com/se2p/se2thesis/compare/v3.3.1...v3.3.0
[v3.3.0]: https://github.com/se2p/se2thesis/compare/v3.3.0...v3.2.0
diff --git a/macros/latex/contrib/se2thesis/se2colors.dtx b/macros/latex/contrib/se2thesis/se2colors.dtx
index cec581f2e3..5073ce724e 100644
--- a/macros/latex/contrib/se2thesis/se2colors.dtx
+++ b/macros/latex/contrib/se2thesis/se2colors.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% File: se2colors.dtx Copyright (C) 2022--2023 Stephan Lukasczyk
+% File: se2colors.dtx Copyright (C) 2022--2024 Stephan Lukasczyk
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -231,7 +231,7 @@
%
% Identify the package and give the overall version information.
% \begin{macrocode}
-\ProvidesExplPackage {se2colors} {2024-04-20} {3.4.0}
+\ProvidesExplPackage {se2colors} {2024-05-27} {4.0.3}
{A colour support package for the se2thesis bundle}
% \end{macrocode}
%
@@ -259,10 +259,13 @@
cmode / cmyk .meta:n = {cmode=4C},
cmode / rgb .meta:n = {cmode=RGB},
cmode / gray .meta:n = {cmode=BW},
+ cmode / bw .meta:n = {cmode=BW},
RGB .meta:n = {cmode=RGB},
rgb .meta:n = {cmode=RGB},
CMYK .meta:n = {cmode=4C},
cmyk .meta:n = {cmode=4C},
+ BW .meta:n = {cmode=BW},
+ bw .meta:n = {cmode=BW},
gray .meta:n = {cmode=BW},
}
\keys_set:nn { seiicolors } { cmode = 4C }
diff --git a/macros/latex/contrib/se2thesis/se2fonts.dtx b/macros/latex/contrib/se2thesis/se2fonts.dtx
index 9e86b3a24d..7df868c314 100644
--- a/macros/latex/contrib/se2thesis/se2fonts.dtx
+++ b/macros/latex/contrib/se2thesis/se2fonts.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% File: se2fonts.dtx Copyright (C) 2022--2023 Stephan Lukasczyk
+% File: se2fonts.dtx Copyright (C) 2022--2024 Stephan Lukasczyk
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -151,65 +151,28 @@
%
% Identify the package and give the overall version information.
% \begin{macrocode}
-\ProvidesExplPackage {se2fonts} {2024-04-20} {3.4.0}
+\ProvidesExplPackage {se2fonts} {2024-05-27} {4.0.3}
{A font-selection support package for the se2thesis bundle}
% \end{macrocode}
%
% \subsection{Load-time options}
%
-% \begin{macro}{\l_@@_fontmode_tl}
-% Holds the font-selection mode specified by the user as a package
-% load-time option.
-% \emph{Please note:} this option is deprecated!
-% \begin{macrocode}
-\tl_new:N \l_@@_fontmode_tl
-\keys_define:nn { seiifonts }
- {
- fmode .choice:,
- fmode / original .code:n = {
- \tl_gset:Nn \l_@@_fontmode_tl {original}
- },
- fmode / replacement .code:n = {
- \tl_gset:Nn \l_@@_fontmode_tl {replacement}
- },
- fmode / auto .code:n = {
- \tl_gset:Nn \l_@@_fontmode_tl {auto}
- },
- original .meta:n = {fmode=original},
- replacement .meta:n = {fmode=replacement},
- auto .meta:n = {fmode=auto},
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Option handling}
-%
-% \begin{macrocode}
-\IfFormatAtLeastTF { 2022-06-01 }
- { \ProcessKeyOptions [ seiifonts ] }
- {
- \RequirePackage{ l3keys2e }
- \ProcessKeysOptions { seiifonts }
- }
-% \end{macrocode}
+% The package does not have any load-time options; the formerly defined option
+% to set the font mode was removed with \pkg{se2thesis} version 4.0.0.
%
-% Define a warning message
-% \begin{macrocode}
-\msg_set:nnnn { seiifonts } { deprecated-option }
- { The~ option~ fmode~ to~ the~ se2fonts~ package~ is~ deprecated. }
- { Remove~ it~ from~ your~ code.}
-% \end{macrocode}
+% \subsection{Helper macros}
%
-% Raise the warning if the option was used
+% Define a warning message of users of \pdfLaTeX{} that not all features of the
+% fonts are available and that they should consider using \LuaTeX{} instead.
% \begin{macrocode}
-\tl_if_empty:NF \l_@@_fontmode_tl
+\msg_new:nnnn { seiifonts } { pdflatex-used }
+ { You~ are~ using~ pdfLaTeX~ with~ the~ se2fonts~ packages.}
{
- \msg_warning:nn { seiifonts } { deprecated-option }
+ While~ this~ works~ some~ font~ features~ are~ not~ available,~ consider~
+ using~ lualatex~ instead.
}
% \end{macrocode}
%
-% \subsection{Helper macros}
-%
% \begin{macro}{\pdftexengine, \xetexengine, \luatexengine}
% We define several alias macros to identify which engine the user is running.
% \begin{macrocode}
@@ -242,7 +205,7 @@
% \begin{macrocode}
\ifengineT { \xetexengine }
{
- \msg_set:nnnn { seiifonts } { xetex-not-supported }
+ \msg_new:nnnn { seiifonts } { xetex-not-supported }
{ XeTeX~ is~ not~ supported~ by~ the~ se2fonts~ package. }
{ Switch~ to~ pdfTeX~ or~ (preferably)~ LuaTeX. }
\msg_error:nn { seiifonts } { xetex-not-supported }
@@ -261,6 +224,7 @@
% If the user uses \LuaTeX{}, load \pkg{fontspec} and \pkg{unicode-math}.
% \begin{macrocode}
\RequirePackage{fontspec}
+ \PassOptionsToPackage{math-style=ISO,bold-style=ISO}{unicode-math}
\RequirePackage{unicode-math}
% \end{macrocode}
%
@@ -288,6 +252,7 @@
%
% The user does not use \LuaTeX{}, thus fallback to T1 fonts.
% \begin{macrocode}
+ \msg_warning:nn { seiifonts } { pdflatex-used }
\PassOptionsToPackage{T1}{fontenc}
\PassOptionsToPackage{scaled=0.9,varl}{inconsolata}
\PassOptionsToPackage{mono=false}{libertinus-type1}
diff --git a/macros/latex/contrib/se2thesis/se2packages.dtx b/macros/latex/contrib/se2thesis/se2packages.dtx
index 4cdae1d105..fe5034fca6 100644
--- a/macros/latex/contrib/se2thesis/se2packages.dtx
+++ b/macros/latex/contrib/se2thesis/se2packages.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% File: se2packages.dtx Copyright (C) 2022--2023 Stephan Lukasczyk
+% File: se2packages.dtx Copyright (C) 2022--2024 Stephan Lukasczyk
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -125,6 +125,33 @@
%
% Please be aware to use \emph{either} \pkg{minted} \emph{or} \pkg{listings}!
%
+% \emph{Attention:} The way how \pkg{minted} is implemented causes the resulting
+% code to be typeset in gray scale, if you use the \pkg{se2colors} package with
+% option |cmode=bw| or the \cls{se2thesis} class with |colormode=bw| (or their
+% respective aliases). Students were requesting that they want to use the
+% black-and-white mode of \pkg{se2color} because it saves lots of money when
+% printing their thesis, while they want the colours in the syntax highlighting
+% of \pkg{minted}. One can achieve this by adding hooks to the preamble of the
+% document, after loading the \pkg{minted} package (which is recommend by
+% setting |minted=true| as an option to \pkg{se2packages}):
+% \begin{LaTeXdemo}[code only]
+% \AddToHook{env/minted/begin}{\selectcolormodel{cmyk}}
+% \AddToHook{cmd/mintinline/before}{\selectcolormodel{cmyk}}
+% \end{LaTeXdemo}
+% Thanks to Ulrike Fischer for pointing out this hook mechanism.\footnote{%
+% \href{https://tex.stackexchange.com/a/718719/14622}{tex.stackexchange.com/a/718719/14622}
+% }
+%
+% Another option, if you do not want colours in the \pkg{minted} output when you
+% use the gray-scale mode of \pkg{se2colors} is the change the highlighting
+% style, \pkg{minted} uses. The package for this provides the macro
+% \cs{usemintedstyle}, which accepts a style available in your local
+% \texttt{pygments} installation, see the \texttt{pygments}
+% documentation\footnote{%
+% \href{https://pygments.org/styles/}{pygments.org/styles/}
+% } for an overview over the available styles; the |bw| style is explicitly
+% designed for this kind of scenario.
+%
% \subsubsection{Designing Tables}
%
% A basically mandatory package to all users of tables
@@ -443,7 +470,7 @@
%
% Identify the package and give the overall version information.
% \begin{macrocode}
-\ProvidesExplPackage {se2packages} {2024-04-20} {3.4.0}
+\ProvidesExplPackage {se2packages} {2024-05-27} {4.0.3}
{Supporting packages for the se2thesis bundle}
% \end{macrocode}
%
diff --git a/macros/latex/contrib/se2thesis/se2thesis-master-thesis-example.pdf b/macros/latex/contrib/se2thesis/se2thesis-master-thesis-example.pdf
index a58ba8209f..7b768f54e6 100644
--- a/macros/latex/contrib/se2thesis/se2thesis-master-thesis-example.pdf
+++ b/macros/latex/contrib/se2thesis/se2thesis-master-thesis-example.pdf
Binary files differ
diff --git a/macros/latex/contrib/se2thesis/se2thesis.dtx b/macros/latex/contrib/se2thesis/se2thesis.dtx
index c8888c343c..3dfcf6a352 100644
--- a/macros/latex/contrib/se2thesis/se2thesis.dtx
+++ b/macros/latex/contrib/se2thesis/se2thesis.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% File: se2thesis.dtx Copyright (C) 2022--2023 Stephan Lukasczyk
+% File: se2thesis.dtx Copyright (C) 2022--2024 Stephan Lukasczyk
%
% It may be distributed and/or modified under the conditions of the
% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -607,7 +607,7 @@
%
% Identify the class and give the overall version number.
% \begin{macrocode}
-\ProvidesExplClass {se2thesis} {2024-04-20} {3.4.0}
+\ProvidesExplClass {se2thesis} {2024-05-27} {4.0.3}
{A thesis class for the Chair of Software Engineering II}
% \end{macrocode}
%
@@ -788,7 +788,7 @@
},
thesistype .initial:n = master,
- colormode .choices:nn = {cmyk,rgb,bw}{
+ colormode .choices:nn = {4C,CMYK,cmyk,RGB,rgb,BW,bw,gray}{
\tl_gset_eq:NN \l_@@_colormode_tl \l_keys_choice_tl
},
colormode .initial:n = cmyk,
@@ -1655,7 +1655,7 @@
% We provide the following English translations.
%
% \begin{macrocode}
-\ProvideDictionaryFor{English}{se2translations}[2024/04/20]
+\ProvideDictionaryFor{English}{se2translations}[2024/05/27]
\ProvideDictTranslation{abstract}{abstract}
\ProvideDictTranslation{Abstract}{Abstract}
\ProvideDictTranslation{acknowledgement}{acknowledgement}
@@ -1706,7 +1706,7 @@
% We provide the following German translations.
%
% \begin{macrocode}
-\ProvideDictionaryFor{German}{se2translations}[2024/04/20]
+\ProvideDictionaryFor{German}{se2translations}[2024/05/27]
\ProvideDictTranslation{abstract}{Zusammenfassung}
\ProvideDictTranslation{Abstract}{Zusammenfassung}
\ProvideDictTranslation{acknowledgement}{Danksagung}
diff --git a/macros/latex/contrib/se2thesis/se2thesis.ins b/macros/latex/contrib/se2thesis/se2thesis.ins
index c3af7cd020..79ac36c563 100644
--- a/macros/latex/contrib/se2thesis/se2thesis.ins
+++ b/macros/latex/contrib/se2thesis/se2thesis.ins
@@ -1,6 +1,6 @@
\iffalse meta-comment
-File: se2thesis.ins Copyright (C) 2022--2023 Stephan Lukasczyk
+File: se2thesis.ins Copyright (C) 2022--2024 Stephan Lukasczyk
It may be distributed and/or modified under the conditions of the
LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -31,7 +31,7 @@ for those people who are interested.
% stop DocStrip adding rather wordy text
\preamble
-Copyright (C) 2022--2023 by Stephan Lukasczyk <tex@lukasczyk.me>
+Copyright (C) 2022--2024 by Stephan Lukasczyk <stephan@dante.de>
It may be distributed and/or modified under the conditions of
the LaTeX Project Public License (LPPL), either version 1.3c of
@@ -112,4 +112,4 @@ This work consists of the files se2thesis.dtx,
\endbatchfile
-%% vim: set ft=tex : \ No newline at end of file
+%% vim: set ft=tex :
diff --git a/macros/latex/contrib/se2thesis/se2thesis.pdf b/macros/latex/contrib/se2thesis/se2thesis.pdf
index 263ffa53f0..0770dbe6dc 100644
--- a/macros/latex/contrib/se2thesis/se2thesis.pdf
+++ b/macros/latex/contrib/se2thesis/se2thesis.pdf
Binary files differ
diff --git a/macros/latex/contrib/se2thesis/se2thesis.tex b/macros/latex/contrib/se2thesis/se2thesis.tex
index eac8fdf59e..f1bebf73f2 100644
--- a/macros/latex/contrib/se2thesis/se2thesis.tex
+++ b/macros/latex/contrib/se2thesis/se2thesis.tex
@@ -1,6 +1,6 @@
\iffalse meta-comment
-File: se2thesis.tex Copyright (C) 2022--2023 Stephan Lukasczyk
+File: se2thesis.tex Copyright (C) 2022--2024 Stephan Lukasczyk
It may be distributed and/or modified under the conditions of the
LaTeX Project Public License (LPPL), either version 1.3c of this
diff --git a/macros/latex/contrib/siunitx/CHANGELOG.md b/macros/latex/contrib/siunitx/CHANGELOG.md
index 97c77dc5bc..4dad256c37 100644
--- a/macros/latex/contrib/siunitx/CHANGELOG.md
+++ b/macros/latex/contrib/siunitx/CHANGELOG.md
@@ -7,6 +7,12 @@ Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to
## [Unreleased]
+## [v3.3.17] - 2024-05-06
+
+### Fixed
+- Correct treatment of end-iof-line spaces when allowing breaks (see issue
+ [\#730](https://github.com/josephwright/siunitx/issues/730))
+
## [v3.3.16] - 2024-04-24
### Fixed
@@ -2104,7 +2110,8 @@ Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to
### Added
- First public testing release (as `si`)
-[Unreleased]: https://github.com/josephwright/siunitx/compare/v3.3.16...HEAD
+[Unreleased]: https://github.com/josephwright/siunitx/compare/v3.3.17...HEAD
+[v3.3.17]: https://github.com/josephwright/siunitx/compare/v3.3.16...v3.3.17
[v3.3.16]: https://github.com/josephwright/siunitx/compare/v3.3.15...v3.3.16
[v3.3.15]: https://github.com/josephwright/siunitx/compare/v3.3.14...v3.3.15
[v3.3.14]: https://github.com/josephwright/siunitx/compare/v3.3.13...v3.3.14
diff --git a/macros/latex/contrib/siunitx/siunitx-code.pdf b/macros/latex/contrib/siunitx/siunitx-code.pdf
index 2dc8e65250..0e89bc3e22 100644
--- a/macros/latex/contrib/siunitx/siunitx-code.pdf
+++ b/macros/latex/contrib/siunitx/siunitx-code.pdf
Binary files differ
diff --git a/macros/latex/contrib/siunitx/siunitx-quantity.dtx b/macros/latex/contrib/siunitx/siunitx-quantity.dtx
index 9e3c14ffaf..959d9e3a30 100644
--- a/macros/latex/contrib/siunitx/siunitx-quantity.dtx
+++ b/macros/latex/contrib/siunitx/siunitx-quantity.dtx
@@ -394,10 +394,10 @@
{ \tl_if_blank_p:n {#1} }
{ ! \tl_if_head_eq_charcode_p:nN {#2} { 1 } }
{
- \tl_use:N \l_@@_product_tl
\bool_if:NTF \l_@@_break_bool
{ \penalty \binoppenalty }
{ \nobreak }
+ \tl_use:N \l_@@_product_tl
\siunitx_print_unit:n {#2}
}
{ \siunitx_print_unit:o { \use_none:n #2 } }
diff --git a/macros/latex/contrib/siunitx/siunitx.dtx b/macros/latex/contrib/siunitx/siunitx.dtx
index 6f49440f7c..00af01ae8a 100644
--- a/macros/latex/contrib/siunitx/siunitx.dtx
+++ b/macros/latex/contrib/siunitx/siunitx.dtx
@@ -121,7 +121,7 @@
%
% Identify the package and give the over all version information.
% \begin{macrocode}
-\ProvidesExplPackage {siunitx} {2024-04-24} {3.3.16}
+\ProvidesExplPackage {siunitx} {2024-05-06} {3.3.17}
{A comprehensive (SI) units package}
% \end{macrocode}
%
diff --git a/macros/latex/contrib/siunitx/siunitx.pdf b/macros/latex/contrib/siunitx/siunitx.pdf
index 3c058ce3fa..5dea63dd66 100644
--- a/macros/latex/contrib/siunitx/siunitx.pdf
+++ b/macros/latex/contrib/siunitx/siunitx.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/README.md b/macros/latex/contrib/skillicons/README.md
new file mode 100644
index 0000000000..be1f550dbe
--- /dev/null
+++ b/macros/latex/contrib/skillicons/README.md
@@ -0,0 +1,15 @@
+# `skillicons`: Seamlessly Integrating Skill Icons into LaTeX Documents
+
+## Introduction
+`skillicons` is a LaTeX package designed to seamlessly integrate skill icons into your documents. Whether you're working on resumes, CVs, or any document requiring skill representation, skillicons offers an easy and visually appealing solution.
+
+## Features
+- **Seamless Integration:** Easily incorporate skill icons into your LaTeX documents.
+- **Visually Appealing:** Choose from a variety of skill icons to enhance the visual appeal of your content.
+- **Flexible Customization:** Customize the size and style of the skill icons to suit your preferences and document design.
+
+## Contact
+For inquiries and support, please contact Anton at antoniys470@gmail.com.
+
+## License
+This package and its included icon images, taken from https://github.com/tandpfun/skill-icons, are both released under the MIT license. \ No newline at end of file
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_AWS-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_AWS-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..bd79c0b6fd
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_AWS-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_AWS-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_AWS-Dark.eps
new file mode 100644
index 0000000000..023cc7aa2c
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_AWS-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_AWS-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_AWS-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..779301e620
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_AWS-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_AWS-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_AWS-Light.eps
new file mode 100644
index 0000000000..6fa9806131
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_AWS-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Ableton-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Ableton-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..3ed3ccd047
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Ableton-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Ableton-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Ableton-Dark.eps
new file mode 100644
index 0000000000..1e4cf6a2f4
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Ableton-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Ableton-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Ableton-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..d1c59c10f8
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Ableton-Light-eps-converted-to.pdf
@@ -0,0 +1,74 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xmˍ0 EBK,#5dY$/"`yxCS9XC-
+sg#5P*;ʒUR"ph//k-,p'nmE =A6|*x¯Wj"s3_=cCB-b-cTێu촆öp&,PP/^ryTi-Q0@D[_Wl!q=jNHuVUvx-@mS:cApnH[ܞTn8.,s8oGHF>Sjw<R
+3{<*0 ~^3r+r|m+)Cv @6mp~.>oؙ{̏ H'w-_{q|8,u /7|OBMfkE IW65jSۙ9D#d犽Zdyyj!II*w]-T7Dɯi"Ս?u^Stlri-}KQKW-WU;%тo~]6N᱐#C p N.3\Ȱץ~{)f-,"_B^]k ľrR0J/ׇQf1K OhmصWqS )'_G ֹendstream
+endobj
+6 0 obj
+675
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 7 0 R
+>>
+endobj
+7 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:18:35+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:18:35+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:3441dcf7-143f-11ef-0000-ce5efda19c99'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514131835+02'00')
+/ModDate(D:20240514131835+02'00')>>endobj
+xref
+0 8
+0000000000 65535 f
+0000001222 00000 n
+0000002544 00000 n
+0000001163 00000 n
+0000001049 00000 n
+0000000285 00000 n
+0000001030 00000 n
+0000001286 00000 n
+trailer
+<< /Size 8 /Root 1 0 R /Info 2 0 R
+/ID [<85FA3FFEB023C2538065900408CFCA15><85FA3FFEB023C2538065900408CFCA15>]
+>>
+startxref
+2669
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Ableton-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Ableton-Light.eps
new file mode 100644
index 0000000000..c424f7654a
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Ableton-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_ActivityPub-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_ActivityPub-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..2741530d87
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_ActivityPub-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_ActivityPub-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_ActivityPub-Dark.eps
new file mode 100644
index 0000000000..d2f42d8d0f
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_ActivityPub-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_ActivityPub-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_ActivityPub-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..06088c166b
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_ActivityPub-Light-eps-converted-to.pdf
@@ -0,0 +1,74 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xeR;r0u
+)c yqa-痌g,˲]`msK8rpqBπ|՟"Utju/(:㭠A3=_CfХq2lgHKd6LP~[orKYO:#Ԅ[`:F+v>\_)}Vl @:*@o
+>LdXndVg?>^ ASH#wg[pKR~iP"`~|/: <6M"0n1/F2ҽpÛ#\ endstream
+endobj
+6 0 obj
+294
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 7 0 R
+>>
+endobj
+7 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:18:37+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:18:37+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:357309f7-143f-11ef-0000-3a31daee34c0'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514131837+02'00')
+/ModDate(D:20240514131837+02'00')>>endobj
+xref
+0 8
+0000000000 65535 f
+0000000841 00000 n
+0000002163 00000 n
+0000000782 00000 n
+0000000668 00000 n
+0000000285 00000 n
+0000000649 00000 n
+0000000905 00000 n
+trailer
+<< /Size 8 /Root 1 0 R /Info 2 0 R
+/ID [<3CBB58E655918350E6D3885F45CB21FE><3CBB58E655918350E6D3885F45CB21FE>]
+>>
+startxref
+2288
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_ActivityPub-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_ActivityPub-Light.eps
new file mode 100644
index 0000000000..21ea3f8e92
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_ActivityPub-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Actix-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Actix-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..95860d324b
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Actix-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Actix-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Actix-Dark.eps
new file mode 100644
index 0000000000..8437859a5c
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Actix-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Actix-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Actix-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..ce53eb7d64
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Actix-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Actix-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Actix-Light.eps
new file mode 100644
index 0000000000..ce5f0d7151
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Actix-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Adonis-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Adonis-eps-converted-to.pdf
new file mode 100644
index 0000000000..464db9563e
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Adonis-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Adonis.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Adonis.eps
new file mode 100644
index 0000000000..f40105b918
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Adonis.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_AfterEffects-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_AfterEffects-eps-converted-to.pdf
new file mode 100644
index 0000000000..0ef24be988
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_AfterEffects-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_AfterEffects.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_AfterEffects.eps
new file mode 100644
index 0000000000..c09bcb77a3
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_AfterEffects.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_AiScript-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_AiScript-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..0be0b3a5f6
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_AiScript-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_AiScript-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_AiScript-Dark.eps
new file mode 100644
index 0000000000..cf6de055fb
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_AiScript-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_AiScript-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_AiScript-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..2d82078f94
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_AiScript-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_AiScript-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_AiScript-Light.eps
new file mode 100644
index 0000000000..4e0c669964
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_AiScript-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_AlpineJS-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_AlpineJS-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..70696d537e
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_AlpineJS-Dark-eps-converted-to.pdf
@@ -0,0 +1,76 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xMP;nD1}
+)`~>FoEOdx`~;uSj
+F&&c5/|6r
+P2' G8;d(U\d&)iȀHw" nwlpЏ/Mm
+'$A鏆*2s{4g>]G]ߦDffpLxSDL5걷,k)&Yrk0#uB@z'XsVKendstream
+endobj
+6 0 obj
+218
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 7 0 R
+>>
+endobj
+7 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:18:44+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:18:44+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:399f2777-143f-11ef-0000-80944cc67489'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514131844+02'00')
+/ModDate(D:20240514131844+02'00')>>endobj
+xref
+0 8
+0000000000 65535 f
+0000000765 00000 n
+0000002087 00000 n
+0000000706 00000 n
+0000000592 00000 n
+0000000285 00000 n
+0000000573 00000 n
+0000000829 00000 n
+trailer
+<< /Size 8 /Root 1 0 R /Info 2 0 R
+/ID [<24F287E7C85A911C415C8B2956CA3B78><24F287E7C85A911C415C8B2956CA3B78>]
+>>
+startxref
+2212
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_AlpineJS-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_AlpineJS-Dark.eps
new file mode 100644
index 0000000000..7a1909df43
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_AlpineJS-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_AlpineJS-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_AlpineJS-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..26af7050a9
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_AlpineJS-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_AlpineJS-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_AlpineJS-Light.eps
new file mode 100644
index 0000000000..75f91a2d0c
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_AlpineJS-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Anaconda-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Anaconda-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..8ad318f16c
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Anaconda-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Anaconda-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Anaconda-Dark.eps
new file mode 100644
index 0000000000..7fd2fa760c
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Anaconda-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Anaconda-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Anaconda-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..8580330d2d
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Anaconda-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Anaconda-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Anaconda-Light.eps
new file mode 100644
index 0000000000..77380d9605
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Anaconda-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_AndroidStudio-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_AndroidStudio-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..d31c25208e
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_AndroidStudio-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_AndroidStudio-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_AndroidStudio-Dark.eps
new file mode 100644
index 0000000000..afa4064ccc
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_AndroidStudio-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_AndroidStudio-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_AndroidStudio-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..a2ea58d41d
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_AndroidStudio-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_AndroidStudio-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_AndroidStudio-Light.eps
new file mode 100644
index 0000000000..3f504bfee5
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_AndroidStudio-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Angular-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Angular-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..6952845019
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Angular-Dark-eps-converted-to.pdf
@@ -0,0 +1,76 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xmRAn0~ 7Dj=?oVbLfğ:qoY
+Mt,GNv}62rPc>h U2^M޸B`Q
+wGೊ{hg=U,+:-r$ЙP`.er
++ˆ*htHaL Foh+Cr(1@b⋡[
+P"5Ki)I >`dVD1S"?w8EVGha4M+"љ%\^"Bу&?9sQ},o:endstream
+endobj
+6 0 obj
+311
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 7 0 R
+>>
+endobj
+7 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:18:49+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:18:49+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:3c9a17f7-143f-11ef-0000-1e2579a9a4a0'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514131849+02'00')
+/ModDate(D:20240514131849+02'00')>>endobj
+xref
+0 8
+0000000000 65535 f
+0000000858 00000 n
+0000002180 00000 n
+0000000799 00000 n
+0000000685 00000 n
+0000000285 00000 n
+0000000666 00000 n
+0000000922 00000 n
+trailer
+<< /Size 8 /Root 1 0 R /Info 2 0 R
+/ID [<CCCE37DDD13C6E891BFF55F1F172BD05><CCCE37DDD13C6E891BFF55F1F172BD05>]
+>>
+startxref
+2305
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Angular-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Angular-Dark.eps
new file mode 100644
index 0000000000..66c38620e1
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Angular-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Angular-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Angular-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..dfa920a24b
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Angular-Light-eps-converted-to.pdf
@@ -0,0 +1,75 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xmRKn0> 3Dj"oQpH1fFgGx6Љ#{ GN؟dl4AjMh
+U2^M޸B`Q
+շmYnUj=󹧷Ea(j3r%#T2?2^,ˆ*ht9 1Q&z+G)o?~*1HHC:v)2h3%)F'XEsAP)A:[Ӛ-i%^>j%>3K^D?9seP W
+endstream
+endobj
+6 0 obj
+311
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 7 0 R
+>>
+endobj
+7 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:18:50+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:18:50+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:3d32ae77-143f-11ef-0000-007b3e5454a6'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514131850+02'00')
+/ModDate(D:20240514131850+02'00')>>endobj
+xref
+0 8
+0000000000 65535 f
+0000000858 00000 n
+0000002180 00000 n
+0000000799 00000 n
+0000000685 00000 n
+0000000285 00000 n
+0000000666 00000 n
+0000000922 00000 n
+trailer
+<< /Size 8 /Root 1 0 R /Info 2 0 R
+/ID [<7D365C100464CDD231970D1A28D1D7A0><7D365C100464CDD231970D1A28D1D7A0>]
+>>
+startxref
+2305
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Angular-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Angular-Light.eps
new file mode 100644
index 0000000000..0c223b6938
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Angular-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Ansible-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Ansible-eps-converted-to.pdf
new file mode 100644
index 0000000000..0c6610594b
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Ansible-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Ansible.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Ansible.eps
new file mode 100644
index 0000000000..4f60527dbd
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Ansible.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Apollo-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Apollo-eps-converted-to.pdf
new file mode 100644
index 0000000000..332fd848ed
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Apollo-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Apollo.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Apollo.eps
new file mode 100644
index 0000000000..44d36468d2
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Apollo.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Apple-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Apple-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..39d80b808f
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Apple-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Apple-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Apple-Dark.eps
new file mode 100644
index 0000000000..a55ba8c861
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Apple-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Apple-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Apple-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..5aaeacc664
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Apple-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Apple-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Apple-Light.eps
new file mode 100644
index 0000000000..f1b5f1100c
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Apple-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Appwrite-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Appwrite-eps-converted-to.pdf
new file mode 100644
index 0000000000..6eb4454ea0
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Appwrite-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Appwrite.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Appwrite.eps
new file mode 100644
index 0000000000..93717650ac
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Appwrite.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Arch-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Arch-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..339308af05
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Arch-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Arch-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Arch-Dark.eps
new file mode 100644
index 0000000000..57f28ac5ae
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Arch-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Arch-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Arch-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..6a813cd636
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Arch-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Arch-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Arch-Light.eps
new file mode 100644
index 0000000000..4612eff302
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Arch-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Arduino-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Arduino-eps-converted-to.pdf
new file mode 100644
index 0000000000..d622427417
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Arduino-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Arduino.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Arduino.eps
new file mode 100644
index 0000000000..19937a5887
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Arduino.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Astro-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Astro-eps-converted-to.pdf
new file mode 100644
index 0000000000..0166aa3c34
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Astro-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Astro.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Astro.eps
new file mode 100644
index 0000000000..519a257bb6
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Astro.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Atom-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Atom-eps-converted-to.pdf
new file mode 100644
index 0000000000..cecc153608
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Atom-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Atom.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Atom.eps
new file mode 100644
index 0000000000..08683f3956
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Atom.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Audition-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Audition-eps-converted-to.pdf
new file mode 100644
index 0000000000..53398f7dcf
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Audition-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Audition.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Audition.eps
new file mode 100644
index 0000000000..8c5773c269
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Audition.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_AutoCAD-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_AutoCAD-Light.eps
new file mode 100644
index 0000000000..47ace2b612
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_AutoCAD-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_AutoCAD_Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_AutoCAD_Dark.eps
new file mode 100644
index 0000000000..08e3f793ee
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_AutoCAD_Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Autocad-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Autocad-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..f731a51fa3
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Autocad-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Azul-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Azul-eps-converted-to.pdf
new file mode 100644
index 0000000000..d40d0458f0
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Azul-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Azul.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Azul.eps
new file mode 100644
index 0000000000..028958b718
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Azul.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Azure-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Azure-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..94de301f52
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Azure-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Azure-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Azure-Dark.eps
new file mode 100644
index 0000000000..6958d98de6
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Azure-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Azure-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Azure-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..631c3c54e0
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Azure-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Azure-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Azure-Light.eps
new file mode 100644
index 0000000000..0df912d746
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Azure-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_BSD-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_BSD-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..019b2c58b1
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_BSD-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_BSD-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_BSD-Dark.eps
new file mode 100644
index 0000000000..20cb86ac64
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_BSD-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_BSD-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_BSD-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..e82a723385
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_BSD-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_BSD-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_BSD-Light.eps
new file mode 100644
index 0000000000..3af9153936
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_BSD-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Babel-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Babel-eps-converted-to.pdf
new file mode 100644
index 0000000000..7ad88f8c4a
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Babel-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Babel.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Babel.eps
new file mode 100644
index 0000000000..dbf329c592
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Babel.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Bash-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Bash-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..223ea5be5d
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Bash-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Bash-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Bash-Dark.eps
new file mode 100644
index 0000000000..d2a66746ec
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Bash-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Bash-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Bash-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..09127c7367
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Bash-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Bash-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Bash-Light.eps
new file mode 100644
index 0000000000..c2a06ac418
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Bash-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Bevy-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Bevy-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..8879a7e7f5
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Bevy-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Bevy-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Bevy-Dark.eps
new file mode 100644
index 0000000000..aa868b583f
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Bevy-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Bevy-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Bevy-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..4a109873ae
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Bevy-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Bevy-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Bevy-Light.eps
new file mode 100644
index 0000000000..61f6224ca1
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Bevy-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_BitBucket-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_BitBucket-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..59d17f3e16
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_BitBucket-Dark-eps-converted-to.pdf
@@ -0,0 +1,128 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xTmA Ol}a}d=ǐūf?J-%o J5(~]qѪm9tJ4j 0/@|%W`"j~e<3 Wׯ9\c|.-m5Wk;hSg]t5a2.f:aJ5S)Vh]C̞Z:㫳8\0ZC/M;h1bag>b_*=:bVlؚ@`gxaLDɏ>^Ӄ+(=S`8C& ƒY!amGa`0uOj{nȓ)搅FYBvjm zzT<X>xX'4$b֎1<30fK
+י}16u+4/Mdy W~0=JOxBxߑxNl,89gI
+$\6)xB8bZ RHI ~qdnm~k^V" i mH Rs3'^?(Ƿ,Bkϗ_x~/endstream
+endobj
+6 0 obj
+609
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+/ColorSpace 11 0 R
+/Pattern 12 0 R
+/Shading 13 0 R
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 14 0 R
+>>
+endobj
+7 0 obj
+[/Pattern]
+endobj
+11 0 obj
+<</R7
+7 0 R>>
+endobj
+12 0 obj
+<</R10
+10 0 R>>
+endobj
+10 0 obj
+<</PatternType 2
+/Shading 9 0 R
+/Matrix[0.75
+0
+0
+-0.75
+0
+192]>>endobj
+13 0 obj
+<</R9
+9 0 R>>
+endobj
+9 0 obj
+<</ShadingType 2
+/ColorSpace/DeviceRGB
+/Coords[36404.7
+7003.86
+23538.7
+23660.6]
+/Function 8 0 R
+/Extend [true true]>>endobj
+8 0 obj
+<</FunctionType 2
+/Domain[0
+1]
+/C0[0
+0.321569
+0.8]
+/C1[0.14902
+0.517647
+1]
+/N 1>>endobj
+14 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:19:12+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:19:12+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:4a4f9d77-143f-11ef-0000-8399616cbad5'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514131912+02'00')
+/ModDate(D:20240514131912+02'00')>>endobj
+xref
+0 15
+0000000000 65535 f
+0000001207 00000 n
+0000002956 00000 n
+0000001148 00000 n
+0000000983 00000 n
+0000000285 00000 n
+0000000964 00000 n
+0000001272 00000 n
+0000001601 00000 n
+0000001469 00000 n
+0000001360 00000 n
+0000001298 00000 n
+0000001328 00000 n
+0000001439 00000 n
+0000001697 00000 n
+trailer
+<< /Size 15 /Root 1 0 R /Info 2 0 R
+/ID [<CF06869BD3A4C747B091686D655F0DF9><CF06869BD3A4C747B091686D655F0DF9>]
+>>
+startxref
+3081
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_BitBucket-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_BitBucket-Dark.eps
new file mode 100644
index 0000000000..fa92e1aa9a
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_BitBucket-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_BitBucket-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_BitBucket-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..a35f66ab73
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_BitBucket-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_BitBucket-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_BitBucket-Light.eps
new file mode 100644
index 0000000000..a8a8e74a02
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_BitBucket-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Blender-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Blender-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..aaaf47b725
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Blender-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Blender-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Blender-Dark.eps
new file mode 100644
index 0000000000..e7c7eb8ba4
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Blender-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Blender-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Blender-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..8167538b0c
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Blender-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Blender-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Blender-Light.eps
new file mode 100644
index 0000000000..65cb158f3b
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Blender-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Bootstrap-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Bootstrap-eps-converted-to.pdf
new file mode 100644
index 0000000000..e7b3fdc03b
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Bootstrap-eps-converted-to.pdf
@@ -0,0 +1,163 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xR1n0 u
+%)R.:4K 2%eC.PG=*Zދ(V؎BF'<_7H,+2]yLR6#&Y6`_[V0ˣx:? \<xji,R<*UΞ^j.eqcCm#Kˊ`^PT&tV4[W7@S<Z< W 6@B
+Y؄FAg:, XeY%!(^w&`WEz:s70m`g@U@$n<ḍ4
+ACٕpP84b!Ìq߉깯O762NKA\ߗe҅w~RGendstream
+endobj
+6 0 obj
+387
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+/ColorSpace 14 0 R
+/Pattern 15 0 R
+/Shading 16 0 R
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 17 0 R
+>>
+endobj
+7 0 obj
+[/Pattern]
+endobj
+14 0 obj
+<</R7
+7 0 R>>
+endobj
+15 0 obj
+<</R13
+13 0 R/R10
+10 0 R>>
+endobj
+13 0 obj
+<</PatternType 2
+/Shading 12 0 R
+/Matrix[0.75
+0
+0
+-0.75
+0
+189]>>endobj
+10 0 obj
+<</PatternType 2
+/Shading 9 0 R
+/Matrix[0.75
+0
+0
+-0.75
+0
+192]>>endobj
+16 0 obj
+<</R12
+12 0 R/R9
+9 0 R>>
+endobj
+12 0 obj
+<</ShadingType 2
+/ColorSpace/DeviceRGB
+/Coords[85.793
+68.962
+148.541
+175.084]
+/Function 11 0 R
+/Extend [true true]>>endobj
+9 0 obj
+<</ShadingType 2
+/ColorSpace/DeviceRGB
+/Coords[0
+0
+256
+256]
+/Function 8 0 R
+/Extend [true true]>>endobj
+11 0 obj
+<</FunctionType 2
+/Domain[0
+1]
+/C0[1
+1
+1]
+/C1[0.945098
+0.898039
+0.988235]
+/N 1>>endobj
+8 0 obj
+<</FunctionType 2
+/Domain[0
+1]
+/C0[0.564706
+0.0745098
+0.996078]
+/C1[0.419608
+0.0666667
+0.956863]
+/N 1>>endobj
+17 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:19:16+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:19:16+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:4cb1f777-143f-11ef-0000-f5f9ee6058a8'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514131916+02'00')
+/ModDate(D:20240514131916+02'00')>>endobj
+xref
+0 18
+0000000000 65535 f
+0000000985 00000 n
+0000003066 00000 n
+0000000926 00000 n
+0000000761 00000 n
+0000000285 00000 n
+0000000742 00000 n
+0000001050 00000 n
+0000001689 00000 n
+0000001481 00000 n
+0000001229 00000 n
+0000001593 00000 n
+0000001349 00000 n
+0000001149 00000 n
+0000001076 00000 n
+0000001106 00000 n
+0000001308 00000 n
+0000001807 00000 n
+trailer
+<< /Size 18 /Root 1 0 R /Info 2 0 R
+/ID [<35411FF33D08F624BCAD906AE7BD2CAB><35411FF33D08F624BCAD906AE7BD2CAB>]
+>>
+startxref
+3191
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Bootstrap.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Bootstrap.eps
new file mode 100644
index 0000000000..0632f17c11
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Bootstrap.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Bun-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Bun-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..f1cf5ea29e
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Bun-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Bun-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Bun-Dark.eps
new file mode 100644
index 0000000000..6ab2ccb907
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Bun-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Bun-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Bun-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..717c620dc4
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Bun-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Bun-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Bun-Light.eps
new file mode 100644
index 0000000000..238f6cdd30
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Bun-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_C-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_C-eps-converted-to.pdf
new file mode 100644
index 0000000000..f967c3724f
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_C-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_C.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_C.eps
new file mode 100644
index 0000000000..0a0dd27a5c
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_C.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_CLion-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_CLion-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..14fe49d145
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_CLion-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_CLion-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_CLion-Dark.eps
new file mode 100644
index 0000000000..69075fafd5
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_CLion-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_CLion-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_CLion-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..a3da05b276
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_CLion-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_CLion-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_CLion-Light.eps
new file mode 100644
index 0000000000..4a73c5e31e
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_CLion-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_CMake-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_CMake-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..ff6e964513
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_CMake-Dark-eps-converted-to.pdf
@@ -0,0 +1,231 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xR1n0
+@%.:4K` H;%%H`Qs"̱־!QA!Ӣ2g օw Z}OX,3HA[8^x"fw2Gx:(n_QƯ~+ P.%5
+3Ef՚%>exzfu44U朮$$=FX^̶~yoAXMz|!a
+'ȜC G{_AQ.-#4Ky*snwȄ ֌endstream
+endobj
+6 0 obj
+302
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+/ColorSpace 20 0 R
+/Pattern 21 0 R
+/Shading 22 0 R
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 23 0 R
+>>
+endobj
+7 0 obj
+[/Pattern]
+endobj
+20 0 obj
+<</R7
+7 0 R>>
+endobj
+21 0 obj
+<</R19
+19 0 R/R16
+16 0 R/R13
+13 0 R/R10
+10 0 R>>
+endobj
+19 0 obj
+<</PatternType 2
+/Shading 18 0 R
+/Matrix[0.75
+0
+0
+-0.75
+0
+192]>>endobj
+16 0 obj
+<</PatternType 2
+/Shading 15 0 R
+/Matrix[0.75
+0
+0
+-0.75
+0
+192]>>endobj
+13 0 obj
+<</PatternType 2
+/Shading 12 0 R
+/Matrix[0.75
+0
+0
+-0.75
+0
+192]>>endobj
+10 0 obj
+<</PatternType 2
+/Shading 9 0 R
+/Matrix[0.75
+0
+0
+-0.75
+0
+192]>>endobj
+22 0 obj
+<</R18
+18 0 R/R15
+15 0 R/R12
+12 0 R/R9
+9 0 R>>
+endobj
+18 0 obj
+<</ShadingType 2
+/ColorSpace/DeviceRGB
+/Coords[133.963
+173.335
+132.816
+134.914]
+/Function 17 0 R
+/Extend [true true]>>endobj
+15 0 obj
+<</ShadingType 2
+/ColorSpace/DeviceRGB
+/Coords[164.929
+206.021
+76.6192
+198.566]
+/Function 14 0 R
+/Extend [true true]>>endobj
+12 0 obj
+<</ShadingType 2
+/ColorSpace/DeviceRGB
+/Coords[139.124
+93.0525
+201.629
+198.566]
+/Function 11 0 R
+/Extend [true true]>>endobj
+9 0 obj
+<</ShadingType 2
+/ColorSpace/DeviceRGB
+/Coords[78.9132
+164.733
+123.642
+70.115]
+/Function 8 0 R
+/Extend [true true]>>endobj
+17 0 obj
+<</FunctionType 2
+/Domain[0
+1]
+/C0[0.517647
+0.517647
+0.517647]
+/C1[0.823529
+0.823529
+0.823529]
+/N 1>>endobj
+14 0 obj
+<</FunctionType 2
+/Domain[0
+1]
+/C0[0.00392157
+0.639216
+0]
+/C1[0.00392157
+0.87451
+0]
+/N 1>>endobj
+11 0 obj
+<</FunctionType 2
+/Domain[0
+1]
+/C0[0.705882
+0.054902
+0.054902]
+/C1[1
+0.34902
+0.34902]
+/N 1>>endobj
+8 0 obj
+<</FunctionType 2
+/Domain[0
+1]
+/C0[0.0627451
+0.0666667
+0.631373]
+/C1[0.411765
+0.411765
+0.882353]
+/N 1>>endobj
+23 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:19:29+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:19:29+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:54719bf7-143f-11ef-0000-ee84fe6edbe6'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514131929+02'00')
+/ModDate(D:20240514131929+02'00')>>endobj
+xref
+0 24
+0000000000 65535 f
+0000000900 00000 n
+0000003709 00000 n
+0000000841 00000 n
+0000000676 00000 n
+0000000285 00000 n
+0000000657 00000 n
+0000000965 00000 n
+0000002332 00000 n
+0000001870 00000 n
+0000001326 00000 n
+0000002224 00000 n
+0000001736 00000 n
+0000001246 00000 n
+0000002118 00000 n
+0000001602 00000 n
+0000001166 00000 n
+0000002001 00000 n
+0000001468 00000 n
+0000001086 00000 n
+0000000991 00000 n
+0000001021 00000 n
+0000001405 00000 n
+0000002450 00000 n
+trailer
+<< /Size 24 /Root 1 0 R /Info 2 0 R
+/ID [<3BFD6999A5CAE584510C174B3483FCEF><3BFD6999A5CAE584510C174B3483FCEF>]
+>>
+startxref
+3834
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_CMake-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_CMake-Dark.eps
new file mode 100644
index 0000000000..a25bd5b717
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_CMake-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_CMake-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_CMake-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..5d63bf4b8a
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_CMake-Light-eps-converted-to.pdf
@@ -0,0 +1,230 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xQ1nC19'ج]:uhKi$Rڡ/؎۬%=2%8.dq|i2& V|R*3D$83E^@(` o,9ſݻ`
+/vF+E*ZM{i9ywjԲOٽ^8=a,fk\:7s)>j(U-鿴_:-eiqPRws9~
+e)bd>0rO;^wVmZ/#AŒendstream
+endobj
+6 0 obj
+298
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+/ColorSpace 20 0 R
+/Pattern 21 0 R
+/Shading 22 0 R
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 23 0 R
+>>
+endobj
+7 0 obj
+[/Pattern]
+endobj
+20 0 obj
+<</R7
+7 0 R>>
+endobj
+21 0 obj
+<</R19
+19 0 R/R16
+16 0 R/R13
+13 0 R/R10
+10 0 R>>
+endobj
+19 0 obj
+<</PatternType 2
+/Shading 18 0 R
+/Matrix[0.75
+0
+0
+-0.75
+0
+192]>>endobj
+16 0 obj
+<</PatternType 2
+/Shading 15 0 R
+/Matrix[0.75
+0
+0
+-0.75
+0
+192]>>endobj
+13 0 obj
+<</PatternType 2
+/Shading 12 0 R
+/Matrix[0.75
+0
+0
+-0.75
+0
+192]>>endobj
+10 0 obj
+<</PatternType 2
+/Shading 9 0 R
+/Matrix[0.75
+0
+0
+-0.75
+0
+192]>>endobj
+22 0 obj
+<</R18
+18 0 R/R15
+15 0 R/R12
+12 0 R/R9
+9 0 R>>
+endobj
+18 0 obj
+<</ShadingType 2
+/ColorSpace/DeviceRGB
+/Coords[133.963
+173.335
+132.816
+134.914]
+/Function 17 0 R
+/Extend [true true]>>endobj
+15 0 obj
+<</ShadingType 2
+/ColorSpace/DeviceRGB
+/Coords[164.929
+206.021
+76.6192
+198.566]
+/Function 14 0 R
+/Extend [true true]>>endobj
+12 0 obj
+<</ShadingType 2
+/ColorSpace/DeviceRGB
+/Coords[139.124
+93.0525
+201.629
+198.566]
+/Function 11 0 R
+/Extend [true true]>>endobj
+9 0 obj
+<</ShadingType 2
+/ColorSpace/DeviceRGB
+/Coords[78.9132
+164.733
+123.642
+70.115]
+/Function 8 0 R
+/Extend [true true]>>endobj
+17 0 obj
+<</FunctionType 2
+/Domain[0
+1]
+/C0[0.517647
+0.517647
+0.517647]
+/C1[0.823529
+0.823529
+0.823529]
+/N 1>>endobj
+14 0 obj
+<</FunctionType 2
+/Domain[0
+1]
+/C0[0.00392157
+0.639216
+0]
+/C1[0.00392157
+0.87451
+0]
+/N 1>>endobj
+11 0 obj
+<</FunctionType 2
+/Domain[0
+1]
+/C0[0.705882
+0.054902
+0.054902]
+/C1[1
+0.34902
+0.34902]
+/N 1>>endobj
+8 0 obj
+<</FunctionType 2
+/Domain[0
+1]
+/C0[0.0627451
+0.0666667
+0.631373]
+/C1[0.411765
+0.411765
+0.882353]
+/N 1>>endobj
+23 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:19:30+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:19:30+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:550a3277-143f-11ef-0000-7cfd5cee4091'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514131930+02'00')
+/ModDate(D:20240514131930+02'00')>>endobj
+xref
+0 24
+0000000000 65535 f
+0000000896 00000 n
+0000003705 00000 n
+0000000837 00000 n
+0000000672 00000 n
+0000000285 00000 n
+0000000653 00000 n
+0000000961 00000 n
+0000002328 00000 n
+0000001866 00000 n
+0000001322 00000 n
+0000002220 00000 n
+0000001732 00000 n
+0000001242 00000 n
+0000002114 00000 n
+0000001598 00000 n
+0000001162 00000 n
+0000001997 00000 n
+0000001464 00000 n
+0000001082 00000 n
+0000000987 00000 n
+0000001017 00000 n
+0000001401 00000 n
+0000002446 00000 n
+trailer
+<< /Size 24 /Root 1 0 R /Info 2 0 R
+/ID [<D4BF8B355F69478F3BBC30EC2E575FAD><D4BF8B355F69478F3BBC30EC2E575FAD>]
+>>
+startxref
+3830
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_CMake-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_CMake-Light.eps
new file mode 100644
index 0000000000..a8ec9d7f87
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_CMake-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_CPP-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_CPP-eps-converted-to.pdf
new file mode 100644
index 0000000000..32b4aeeaec
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_CPP-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_CPP.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_CPP.eps
new file mode 100644
index 0000000000..8647fd80e8
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_CPP.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_CS-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_CS-eps-converted-to.pdf
new file mode 100644
index 0000000000..7a6ed72e18
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_CS-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_CS.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_CS.eps
new file mode 100644
index 0000000000..0dff908bb9
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_CS.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_CSS-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_CSS-eps-converted-to.pdf
new file mode 100644
index 0000000000..49cd66a852
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_CSS-eps-converted-to.pdf
@@ -0,0 +1,73 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xmRIn0 zAJ!{h(iK3D*3_ќ;`YU0ֹ|4֯BlF>Y(Nu
+<2lV,o2;lQwKl8I}v DhƠ8 Ctc5f.]B+p- L#>NB`Qh,j:x!#>t&ڈѓ.cnTe.ЫP'& g*q?ZxBۜ8OMݼ A\G0ÙHhI FIgԆMDbz<^<D )ЪKendstream
+endobj
+6 0 obj
+346
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 7 0 R
+>>
+endobj
+7 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:19:39+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:19:39+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:5a677cf7-143f-11ef-0000-241dca65b5ff'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514131939+02'00')
+/ModDate(D:20240514131939+02'00')>>endobj
+xref
+0 8
+0000000000 65535 f
+0000000893 00000 n
+0000002215 00000 n
+0000000834 00000 n
+0000000720 00000 n
+0000000285 00000 n
+0000000701 00000 n
+0000000957 00000 n
+trailer
+<< /Size 8 /Root 1 0 R /Info 2 0 R
+/ID [<702C666611DA512AD5D41C80C0426EC3><702C666611DA512AD5D41C80C0426EC3>]
+>>
+startxref
+2340
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_CSS.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_CSS.eps
new file mode 100644
index 0000000000..0c23591bac
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_CSS.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Cassandra-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Cassandra-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..213ab56da9
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Cassandra-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Cassandra-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Cassandra-Dark.eps
new file mode 100644
index 0000000000..42c763b256
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Cassandra-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Cassandra-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Cassandra-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..2814d703b6
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Cassandra-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Cassandra-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Cassandra-Light.eps
new file mode 100644
index 0000000000..4a92994f9a
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Cassandra-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Clojure-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Clojure-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..28d1e436d5
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Clojure-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Clojure-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Clojure-Dark.eps
new file mode 100644
index 0000000000..3fb9bea0d8
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Clojure-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Clojure-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Clojure-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..17c933c579
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Clojure-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Clojure-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Clojure-Light.eps
new file mode 100644
index 0000000000..cf3cb117ee
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Clojure-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Cloudflare-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Cloudflare-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..bf5c420d9e
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Cloudflare-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Cloudflare-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Cloudflare-Dark.eps
new file mode 100644
index 0000000000..64cdd7acf3
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Cloudflare-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Cloudflare-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Cloudflare-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..6ed1753646
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Cloudflare-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Cloudflare-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Cloudflare-Light.eps
new file mode 100644
index 0000000000..aab3ccd5b5
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Cloudflare-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_CodePen-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_CodePen-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..54d1e07ea5
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_CodePen-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_CodePen-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_CodePen-Dark.eps
new file mode 100644
index 0000000000..880d98edfd
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_CodePen-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_CodePen-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_CodePen-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..25bfe84eea
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_CodePen-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_CodePen-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_CodePen-Light.eps
new file mode 100644
index 0000000000..3fa6f147a9
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_CodePen-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_CoffeeScript-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_CoffeeScript-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..7b52a56d6a
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_CoffeeScript-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_CoffeeScript-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_CoffeeScript-Dark.eps
new file mode 100644
index 0000000000..e5a8d1d3ba
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_CoffeeScript-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_CoffeeScript-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_CoffeeScript-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..ece0551e8c
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_CoffeeScript-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_CoffeeScript-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_CoffeeScript-Light.eps
new file mode 100644
index 0000000000..a1ff33d24e
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_CoffeeScript-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Crystal-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Crystal-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..5ad50ef3cc
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Crystal-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Crystal-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Crystal-Dark.eps
new file mode 100644
index 0000000000..dc532ce469
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Crystal-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Crystal-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Crystal-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..44a8f02ad6
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Crystal-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Crystal-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Crystal-Light.eps
new file mode 100644
index 0000000000..695827f601
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Crystal-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Cypress-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Cypress-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..fc5538aedd
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Cypress-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Cypress-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Cypress-Dark.eps
new file mode 100644
index 0000000000..ecf950895a
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Cypress-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Cypress-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Cypress-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..a3c8d918d2
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Cypress-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Cypress-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Cypress-Light.eps
new file mode 100644
index 0000000000..acb65ad6af
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Cypress-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_D3-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_D3-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..31f0e494aa
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_D3-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_D3-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_D3-Dark.eps
new file mode 100644
index 0000000000..85d8a43c48
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_D3-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_D3-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_D3-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..b0c5a0e4ac
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_D3-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_D3-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_D3-Light.eps
new file mode 100644
index 0000000000..25eac5df42
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_D3-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_DENO-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_DENO-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..5ae86bd70f
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_DENO-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_DENO-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_DENO-Dark.eps
new file mode 100644
index 0000000000..03a405ccae
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_DENO-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_DENO-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_DENO-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..2cb3815c7e
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_DENO-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_DENO-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_DENO-Light.eps
new file mode 100644
index 0000000000..888f87e2fe
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_DENO-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Dart-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Dart-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..a010428d10
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Dart-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Dart-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Dart-Dark.eps
new file mode 100644
index 0000000000..d0f06d8e86
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Dart-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Dart-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Dart-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..86e768e790
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Dart-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Dart-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Dart-Light.eps
new file mode 100644
index 0000000000..c5146260b6
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Dart-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Debian-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Debian-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..225be906e6
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Debian-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Debian-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Debian-Dark.eps
new file mode 100644
index 0000000000..7e9ec53dc8
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Debian-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Debian-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Debian-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..f2e3cba83a
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Debian-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Debian-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Debian-Light.eps
new file mode 100644
index 0000000000..67792f353d
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Debian-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_DevTo-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_DevTo-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..bc4a3b41e1
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_DevTo-Dark-eps-converted-to.pdf
@@ -0,0 +1,79 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xmSK0 ZwA#Q1z[-/:$@ Ě7V&~eOiL]}> zLJP
+Rzu uT$;xRmEm[e<;]eHxd<kH̰I*:
+rЅ
+GQtps!94WragzYJP @nj'٘`
+ע41xf
+H껑rtSjiIffbmľpxpLMobLfngWE4ܨA 9ޫ }xH(6cEd!x* .O|1L@L#ޢ>
+ZŇ} F4ueR81B-Wpkaqu:iH/mI+?]Åh$ٹ9Z{(byFԣؚXb,&E
+䁻z#~hQ~ endstream
+endobj
+6 0 obj
+495
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 7 0 R
+>>
+endobj
+7 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:19:50+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:19:50+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:60f5f477-143f-11ef-0000-79f8693ac7c4'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514131950+02'00')
+/ModDate(D:20240514131950+02'00')>>endobj
+xref
+0 8
+0000000000 65535 f
+0000001042 00000 n
+0000002364 00000 n
+0000000983 00000 n
+0000000869 00000 n
+0000000285 00000 n
+0000000850 00000 n
+0000001106 00000 n
+trailer
+<< /Size 8 /Root 1 0 R /Info 2 0 R
+/ID [<7572255066FF4D6C815BC8F69DD10B7D><7572255066FF4D6C815BC8F69DD10B7D>]
+>>
+startxref
+2489
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_DevTo-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_DevTo-Dark.eps
new file mode 100644
index 0000000000..dcec3896cd
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_DevTo-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_DevTo-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_DevTo-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..e8e366c5b9
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_DevTo-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_DevTo-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_DevTo-Light.eps
new file mode 100644
index 0000000000..677fea3109
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_DevTo-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Discord-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Discord-eps-converted-to.pdf
new file mode 100644
index 0000000000..e773edc3f5
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Discord-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Discord.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Discord.eps
new file mode 100644
index 0000000000..eab558bada
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Discord.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_DiscordBots-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_DiscordBots-eps-converted-to.pdf
new file mode 100644
index 0000000000..628cd578ed
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_DiscordBots-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_DiscordBots.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_DiscordBots.eps
new file mode 100644
index 0000000000..6cf4249a20
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_DiscordBots.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_DiscordJS-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_DiscordJS-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..a800661526
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_DiscordJS-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_DiscordJS-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_DiscordJS-Dark.eps
new file mode 100644
index 0000000000..3d7b9fd8f1
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_DiscordJS-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_DiscordJS-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_DiscordJS-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..fa2297cc41
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_DiscordJS-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_DiscordJS-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_DiscordJS-Light.eps
new file mode 100644
index 0000000000..086c0ae492
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_DiscordJS-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Django-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Django-eps-converted-to.pdf
new file mode 100644
index 0000000000..ef29e1b512
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Django-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Django.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Django.eps
new file mode 100644
index 0000000000..21ef360917
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Django.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Docker-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Docker-eps-converted-to.pdf
new file mode 100644
index 0000000000..73ca46c41a
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Docker-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Docker.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Docker.eps
new file mode 100644
index 0000000000..f335638f29
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Docker.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_DotNet-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_DotNet-eps-converted-to.pdf
new file mode 100644
index 0000000000..bdcda04097
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_DotNet-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_DotNet.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_DotNet.eps
new file mode 100644
index 0000000000..1c3320c6cb
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_DotNet.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_DynamoDB-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_DynamoDB-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..2beb6b1258
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_DynamoDB-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_DynamoDB-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_DynamoDB-Dark.eps
new file mode 100644
index 0000000000..ed59c7f24e
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_DynamoDB-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_DynamoDB-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_DynamoDB-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..4b0b3316f9
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_DynamoDB-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_DynamoDB-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_DynamoDB-Light.eps
new file mode 100644
index 0000000000..8614cda8f2
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_DynamoDB-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Eclipse-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Eclipse-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..bc1a2c027d
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Eclipse-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Eclipse-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Eclipse-Dark.eps
new file mode 100644
index 0000000000..ea929eba04
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Eclipse-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Eclipse-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Eclipse-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..ba4171a223
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Eclipse-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Eclipse-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Eclipse-Light.eps
new file mode 100644
index 0000000000..57e2220aca
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Eclipse-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Elasticsearch-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Elasticsearch-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..e4ed0026d2
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Elasticsearch-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Elasticsearch-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Elasticsearch-Dark.eps
new file mode 100644
index 0000000000..203f1ca443
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Elasticsearch-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Elasticsearch-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Elasticsearch-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..66a5d7c4e2
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Elasticsearch-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Elasticsearch-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Elasticsearch-Light.eps
new file mode 100644
index 0000000000..5dbd8a027d
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Elasticsearch-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Electron-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Electron-eps-converted-to.pdf
new file mode 100644
index 0000000000..01e79d8ec3
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Electron-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Electron.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Electron.eps
new file mode 100644
index 0000000000..3abd7a9933
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Electron.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Elixir-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Elixir-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..55a6e12c08
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Elixir-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Elixir-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Elixir-Dark.eps
new file mode 100644
index 0000000000..37c53c6889
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Elixir-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Elixir-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Elixir-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..3938f8b59b
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Elixir-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Elixir-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Elixir-Light.eps
new file mode 100644
index 0000000000..7c64c2d981
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Elixir-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Elysia-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Elysia-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..e5bb02417b
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Elysia-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Elysia-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Elysia-Dark.eps
new file mode 100644
index 0000000000..dda654f505
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Elysia-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Elysia-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Elysia-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..e3fae95ec8
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Elysia-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Elysia-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Elysia-Light.eps
new file mode 100644
index 0000000000..aca9f60f42
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Elysia-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Emacs-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Emacs-eps-converted-to.pdf
new file mode 100644
index 0000000000..f57f9591b2
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Emacs-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Emacs.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Emacs.eps
new file mode 100644
index 0000000000..a735e6beee
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Emacs.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Ember-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Ember-eps-converted-to.pdf
new file mode 100644
index 0000000000..894e5988c4
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Ember-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Ember.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Ember.eps
new file mode 100644
index 0000000000..568da7f7a6
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Ember.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Emotion-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Emotion-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..b122ce1905
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Emotion-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Emotion-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Emotion-Dark.eps
new file mode 100644
index 0000000000..fdb615ad23
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Emotion-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Emotion-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Emotion-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..4f16b17ad8
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Emotion-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Emotion-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Emotion-Light.eps
new file mode 100644
index 0000000000..284e6f5337
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Emotion-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_ExpressJS-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_ExpressJS-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..870add3f67
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_ExpressJS-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_ExpressJS-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_ExpressJS-Dark.eps
new file mode 100644
index 0000000000..c3a34b60cc
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_ExpressJS-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_ExpressJS-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_ExpressJS-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..348e7d82d6
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_ExpressJS-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_ExpressJS-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_ExpressJS-Light.eps
new file mode 100644
index 0000000000..499352a0ee
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_ExpressJS-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_FastAPI-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_FastAPI-eps-converted-to.pdf
new file mode 100644
index 0000000000..413c6eafc2
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_FastAPI-eps-converted-to.pdf
@@ -0,0 +1,76 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xmPKnD! s
+Nc Ovf1sEG^6 ̄̾<VkA`Tgp~&Ldѵ3KtaO8^0Ε.rY(H
+)ħso}(:IF!$2xa;"r
+L"ڴ*.n.ٖ>Pȵwe6.j.+`:ͦ
+NszE˭GJUlRendstream
+endobj
+6 0 obj
+242
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 7 0 R
+>>
+endobj
+7 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:20:14+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:20:14+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:6f441078-143f-11ef-0000-e14287b0e8e4'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514132014+02'00')
+/ModDate(D:20240514132014+02'00')>>endobj
+xref
+0 8
+0000000000 65535 f
+0000000789 00000 n
+0000002111 00000 n
+0000000730 00000 n
+0000000616 00000 n
+0000000285 00000 n
+0000000597 00000 n
+0000000853 00000 n
+trailer
+<< /Size 8 /Root 1 0 R /Info 2 0 R
+/ID [<F1D42411420636CB49A2CC75D2F6E96D><F1D42411420636CB49A2CC75D2F6E96D>]
+>>
+startxref
+2236
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_FastAPI.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_FastAPI.eps
new file mode 100644
index 0000000000..00f032a151
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_FastAPI.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Fediverse-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Fediverse-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..a2797b8372
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Fediverse-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Fediverse-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Fediverse-Dark.eps
new file mode 100644
index 0000000000..f9b89c2d70
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Fediverse-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Fediverse-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Fediverse-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..8ceafded39
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Fediverse-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Fediverse-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Fediverse-Light.eps
new file mode 100644
index 0000000000..de70ece266
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Fediverse-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Figma-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Figma-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..68605fbe62
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Figma-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Figma-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Figma-Dark.eps
new file mode 100644
index 0000000000..66bf8641b7
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Figma-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Figma-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Figma-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..73c70362c2
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Figma-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Figma-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Figma-Light.eps
new file mode 100644
index 0000000000..0c37556108
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Figma-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Firebase-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Firebase-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..f2fa720860
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Firebase-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Firebase-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Firebase-Dark.eps
new file mode 100644
index 0000000000..34449ea0f2
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Firebase-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Firebase-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Firebase-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..0a0efc9c9c
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Firebase-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Firebase-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Firebase-Light.eps
new file mode 100644
index 0000000000..2c7b7336c2
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Firebase-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Flask-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Flask-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..c589f1939b
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Flask-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Flask-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Flask-Dark.eps
new file mode 100644
index 0000000000..15375cd6eb
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Flask-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Flask-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Flask-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..97ad40e946
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Flask-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Flask-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Flask-Light.eps
new file mode 100644
index 0000000000..6d21a3653d
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Flask-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Flutter-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Flutter-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..a78a477bbe
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Flutter-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Flutter-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Flutter-Dark.eps
new file mode 100644
index 0000000000..dddffbaa65
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Flutter-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Flutter-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Flutter-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..f01f851622
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Flutter-Light-eps-converted-to.pdf
@@ -0,0 +1,74 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xuRAn1~ ?o::R۴<3IјOl*tEf|oe)G7zSr.Y*#ɪ=Q@mUO疣wWӈ`0Q*|? @F>ʦ@DZ.yԮ5rA#W. l}|+ApԊ7:c2`9+:gS%d
+%=}g#S͓U/{QNRJ0텷tTS
+shB"B~q<Xs|t8:#@ua@v@?R2SPP9a+g%<'V/YEԵ/آIendstream
+endobj
+6 0 obj
+366
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 7 0 R
+>>
+endobj
+7 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:20:24+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:20:24+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:7539f178-143f-11ef-0000-9e2e53feda12'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514132024+02'00')
+/ModDate(D:20240514132024+02'00')>>endobj
+xref
+0 8
+0000000000 65535 f
+0000000913 00000 n
+0000002235 00000 n
+0000000854 00000 n
+0000000740 00000 n
+0000000285 00000 n
+0000000721 00000 n
+0000000977 00000 n
+trailer
+<< /Size 8 /Root 1 0 R /Info 2 0 R
+/ID [<312F79E0025F1A07DD268F260AF97D24><312F79E0025F1A07DD268F260AF97D24>]
+>>
+startxref
+2360
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Flutter-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Flutter-Light.eps
new file mode 100644
index 0000000000..4f6f35ab0a
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Flutter-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Forth-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Forth-eps-converted-to.pdf
new file mode 100644
index 0000000000..4578d7822e
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Forth-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Forth.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Forth.eps
new file mode 100644
index 0000000000..8ac75748c1
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Forth.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Fortran-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Fortran-eps-converted-to.pdf
new file mode 100644
index 0000000000..f0edfbb570
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Fortran-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Fortran.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Fortran.eps
new file mode 100644
index 0000000000..a2b0b15443
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Fortran.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_GCP-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_GCP-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..370e6e68cd
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_GCP-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_GCP-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_GCP-Dark.eps
new file mode 100644
index 0000000000..8708c1f258
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_GCP-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_GCP-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_GCP-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..fc5cc1ff18
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_GCP-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_GCP-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_GCP-Light.eps
new file mode 100644
index 0000000000..533efb6730
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_GCP-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_GTK-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_GTK-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..5f15ea1d12
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_GTK-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_GTK-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_GTK-Dark.eps
new file mode 100644
index 0000000000..7e746f693c
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_GTK-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_GTK-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_GTK-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..68e0c8b914
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_GTK-Light-eps-converted-to.pdf
@@ -0,0 +1,75 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xuR;N1 sۉ[*
++l
+N4H>yT1/ׂڱ\ɳ`1kJX(i:uKu2d\}ymDX6(]Yt*7\Y4XgPz/TZIA[ %tj܎+!/>PzN-thIC,lUi>gNm 躥-fNs˽9q[4s|
+<}IՐ->1L-\̺;u,_nW3*</Õ*endstream
+endobj
+6 0 obj
+333
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 7 0 R
+>>
+endobj
+7 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:20:50+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:20:50+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:84b93a78-143f-11ef-0000-57fbd44ff41f'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514132050+02'00')
+/ModDate(D:20240514132050+02'00')>>endobj
+xref
+0 8
+0000000000 65535 f
+0000000880 00000 n
+0000002202 00000 n
+0000000821 00000 n
+0000000707 00000 n
+0000000285 00000 n
+0000000688 00000 n
+0000000944 00000 n
+trailer
+<< /Size 8 /Root 1 0 R /Info 2 0 R
+/ID [<4A731E2407976CCECEE1D27BD2D7097A><4A731E2407976CCECEE1D27BD2D7097A>]
+>>
+startxref
+2327
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_GTK-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_GTK-Light.eps
new file mode 100644
index 0000000000..df4cd67ea4
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_GTK-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_GameMakerStudio-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_GameMakerStudio-eps-converted-to.pdf
new file mode 100644
index 0000000000..af832efb2b
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_GameMakerStudio-eps-converted-to.pdf
@@ -0,0 +1,72 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xmA EP@TsT,ft&UT1VQzSerc2J~ֱ1֣PԳBmA ˩a.ɸ,N.ȀK"n ^!cy{yߛ~sBTm l^~\ } Bl7>Ɇ61JCLݤYGWhf2}D]ZAendstream
+endobj
+6 0 obj
+201
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 7 0 R
+>>
+endobj
+7 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:20:27+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:20:27+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:7703b4f8-143f-11ef-0000-ed51d6ddd3b0'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514132027+02'00')
+/ModDate(D:20240514132027+02'00')>>endobj
+xref
+0 8
+0000000000 65535 f
+0000000748 00000 n
+0000002070 00000 n
+0000000689 00000 n
+0000000575 00000 n
+0000000285 00000 n
+0000000556 00000 n
+0000000812 00000 n
+trailer
+<< /Size 8 /Root 1 0 R /Info 2 0 R
+/ID [<5BC0B5900BFFAAA592C8D75A63FA31C2><5BC0B5900BFFAAA592C8D75A63FA31C2>]
+>>
+startxref
+2195
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_GameMakerStudio.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_GameMakerStudio.eps
new file mode 100644
index 0000000000..c46db89b0d
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_GameMakerStudio.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Gatsby-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Gatsby-eps-converted-to.pdf
new file mode 100644
index 0000000000..dbdf4b7002
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Gatsby-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Gatsby.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Gatsby.eps
new file mode 100644
index 0000000000..b1d0e342a8
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Gatsby.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Gherkin-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Gherkin-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..3263f0a408
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Gherkin-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Gherkin-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Gherkin-Dark.eps
new file mode 100644
index 0000000000..d1072bb82f
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Gherkin-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Gherkin-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Gherkin-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..019bcaf158
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Gherkin-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Gherkin-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Gherkin-Light.eps
new file mode 100644
index 0000000000..825b606704
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Gherkin-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Git-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Git-eps-converted-to.pdf
new file mode 100644
index 0000000000..31b0f17e2d
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Git-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Git.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Git.eps
new file mode 100644
index 0000000000..7b79d00d71
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Git.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_GitLab-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_GitLab-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..adf3c15e9f
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_GitLab-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_GitLab-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_GitLab-Dark.eps
new file mode 100644
index 0000000000..26a0f8bc48
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_GitLab-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_GitLab-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_GitLab-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..0a8d61751c
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_GitLab-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_GitLab-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_GitLab-Light.eps
new file mode 100644
index 0000000000..58fb3bbeba
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_GitLab-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Github-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Github-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..60d9a6bf3c
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Github-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Github-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Github-Dark.eps
new file mode 100644
index 0000000000..823e6f1468
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Github-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Github-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Github-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..ea1a6b151c
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Github-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Github-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Github-Light.eps
new file mode 100644
index 0000000000..9416300f89
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Github-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_GithubActions-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_GithubActions-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..dd58b2be44
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_GithubActions-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_GithubActions-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_GithubActions-Dark.eps
new file mode 100644
index 0000000000..383105d17a
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_GithubActions-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_GithubActions-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_GithubActions-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..943545b62b
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_GithubActions-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_GithubActions-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_GithubActions-Light.eps
new file mode 100644
index 0000000000..b4713798de
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_GithubActions-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Gmail-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Gmail-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..5a73edf6af
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Gmail-Dark-eps-converted-to.pdf
@@ -0,0 +1,76 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xeSK0>%9^,/WAj߭n_-MAD3cDۿMoԷWCe
+(2Gmڕ8M'd/\! T(dno |U?w_t2$P r8p P0b\'unI3=1.G"@AXl
+CJT<l;Lt
+GE}rb7h&rd9mzRY\b&gcʹ@Ga7.(r<6`J(nPby$^=Y#&E1'e\pud]P[VEYD#sWs(Un^7Ǿ<H.%hRu^V{ݯ
+}endstream
+endobj
+6 0 obj
+387
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 7 0 R
+>>
+endobj
+7 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:20:38+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:20:38+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:7d922c78-143f-11ef-0000-76a43d9e5334'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514132038+02'00')
+/ModDate(D:20240514132038+02'00')>>endobj
+xref
+0 8
+0000000000 65535 f
+0000000934 00000 n
+0000002256 00000 n
+0000000875 00000 n
+0000000761 00000 n
+0000000285 00000 n
+0000000742 00000 n
+0000000998 00000 n
+trailer
+<< /Size 8 /Root 1 0 R /Info 2 0 R
+/ID [<E8AC745464701A8D27AB8E56D3ED5556><E8AC745464701A8D27AB8E56D3ED5556>]
+>>
+startxref
+2381
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Gmail-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Gmail-Dark.eps
new file mode 100644
index 0000000000..0b2e7a4993
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Gmail-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Gmail-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Gmail-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..67b469b801
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Gmail-Light-eps-converted-to.pdf
@@ -0,0 +1,75 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xeSɍ0 +
+G@``vL%R
+6K*Uu3uΉ!$
+cDA}{4q>_2&(θ2ϐ2O^1T(@2II>*WU *+eK er 7v1Z7p҈@2* wy}j<S8&Ҋls{Ѻ[+ SaL{;L6YZbgcʩ@Ga-(y[J=ý xV2BʯD%}(>֠#Y.&%> £eED8~o(Yp9R@{C$oh;Хcju~Wj:wendstream
+endobj
+6 0 obj
+390
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 7 0 R
+>>
+endobj
+7 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:20:39+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:20:39+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:7e2ac2f8-143f-11ef-0000-179f5761fdda'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514132039+02'00')
+/ModDate(D:20240514132039+02'00')>>endobj
+xref
+0 8
+0000000000 65535 f
+0000000937 00000 n
+0000002259 00000 n
+0000000878 00000 n
+0000000764 00000 n
+0000000285 00000 n
+0000000745 00000 n
+0000001001 00000 n
+trailer
+<< /Size 8 /Root 1 0 R /Info 2 0 R
+/ID [<B9349ED98EDBAF8184CABE03FB27F32B><B9349ED98EDBAF8184CABE03FB27F32B>]
+>>
+startxref
+2384
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Gmail-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Gmail-Light.eps
new file mode 100644
index 0000000000..fed75bc77f
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Gmail-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_GoLang-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_GoLang-eps-converted-to.pdf
new file mode 100644
index 0000000000..1470f0186e
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_GoLang-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_GoLang.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_GoLang.eps
new file mode 100644
index 0000000000..adfca0f4e3
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_GoLang.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Godot-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Godot-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..19cc2f10ee
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Godot-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Godot-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Godot-Dark.eps
new file mode 100644
index 0000000000..20c8c76373
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Godot-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Godot-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Godot-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..b54c140329
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Godot-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Godot-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Godot-Light.eps
new file mode 100644
index 0000000000..b5349c819b
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Godot-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Gradle-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Gradle-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..f2ba1ebdfb
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Gradle-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Gradle-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Gradle-Dark.eps
new file mode 100644
index 0000000000..1711e932a1
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Gradle-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Gradle-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Gradle-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..9405eab055
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Gradle-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Gradle-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Gradle-Light.eps
new file mode 100644
index 0000000000..67bed35597
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Gradle-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Grafana-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Grafana-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..9ee9327a3f
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Grafana-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Grafana-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Grafana-Dark.eps
new file mode 100644
index 0000000000..bdc08517c3
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Grafana-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Grafana-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Grafana-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..397c5bd764
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Grafana-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Grafana-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Grafana-Light.eps
new file mode 100644
index 0000000000..93ace20b65
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Grafana-Light.eps
@@ -0,0 +1,216 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: cairo 1.16.0 (https://cairographics.org)
+%%CreationDate: Sun May 12 20:32:59 2024
+%%Pages: 1
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 3
+%%BoundingBox: 0 0 192 192
+%%EndComments
+%%BeginProlog
+50 dict begin
+/q { gsave } bind def
+/Q { grestore } bind def
+/cm { 6 array astore concat } bind def
+/w { setlinewidth } bind def
+/J { setlinecap } bind def
+/j { setlinejoin } bind def
+/M { setmiterlimit } bind def
+/d { setdash } bind def
+/m { moveto } bind def
+/l { lineto } bind def
+/c { curveto } bind def
+/h { closepath } bind def
+/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto
+ 0 exch rlineto 0 rlineto closepath } bind def
+/S { stroke } bind def
+/f { fill } bind def
+/f* { eofill } bind def
+/n { newpath } bind def
+/W { clip } bind def
+/W* { eoclip } bind def
+/BT { } bind def
+/ET { } bind def
+/BDC { mark 3 1 roll /BDC pdfmark } bind def
+/EMC { mark /EMC pdfmark } bind def
+/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def
+/Tj { show currentpoint cairo_store_point } bind def
+/TJ {
+ {
+ dup
+ type /stringtype eq
+ { show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse
+ } forall
+ currentpoint cairo_store_point
+} bind def
+/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore
+ cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def
+/Tf { pop /cairo_font exch def /cairo_font_matrix where
+ { pop cairo_selectfont } if } bind def
+/Td { matrix translate cairo_font_matrix matrix concatmatrix dup
+ /cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point
+ /cairo_font where { pop cairo_selectfont } if } bind def
+/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def
+ cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def
+/g { setgray } bind def
+/rg { setrgbcolor } bind def
+/d1 { setcachedevice } bind def
+/cairo_data_source {
+ CairoDataIndex CairoData length lt
+ { CairoData CairoDataIndex get /CairoDataIndex CairoDataIndex 1 add def }
+ { () } ifelse
+} def
+/cairo_flush_ascii85_file { cairo_ascii85_file status { cairo_ascii85_file flushfile } if } def
+/cairo_image { image cairo_flush_ascii85_file } def
+/cairo_imagemask { imagemask cairo_flush_ascii85_file } def
+%%EndProlog
+%%BeginSetup
+%%EndSetup
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox: 0 0 192 192
+%%EndPageSetup
+q 0 0 192 192 rectclip
+1 0 0 -1 0 192 cm q
+0.956863 0.94902 0.929412 rg
+45 0 m 147 0 l 171.93 0 192 20.07 192 45 c 192 147 l 192 171.93 171.93
+192 147 192 c 45 192 l 20.07 192 0 171.93 0 147 c 0 45 l 0 20.07 20.07 0
+ 45 0 c h
+45 0 m f
+q
+165.543 87.34 m 165.277 84.945 165.012 82.012 163.945 78.816 c 163.145
+75.617 161.812 72.156 159.949 68.426 c 158.082 64.695 155.688 60.965 152.754
+ 57.234 c 151.688 55.902 150.355 54.305 148.758 52.973 c 150.891 44.445
+146.094 37.254 146.094 37.254 c 138.102 36.719 132.773 39.648 130.906 41.25
+ c 130.641 41.25 130.375 40.98 129.84 40.715 c 128.512 40.184 127.176 39.648
+ 125.578 39.117 c 123.98 38.586 122.648 38.316 121.051 37.785 c 119.449
+37.52 117.852 37.254 116.52 36.984 c 116.254 36.984 115.988 36.984 115.723
+ 36.984 c 112.258 25.797 102.133 21 102.133 21 c 90.945 28.195 88.812 38.051
+ 88.812 38.051 c 88.812 38.051 88.812 38.316 88.812 38.586 c 88.277 38.852
+ 87.48 38.852 86.945 39.117 c 86.148 39.383 85.348 39.648 84.281 39.918
+c 83.484 40.184 82.684 40.449 81.617 40.98 c 80.02 41.781 78.156 42.582
+76.555 43.379 c 74.957 44.18 73.359 45.246 71.762 46.312 c 71.492 46.312
+ 71.492 46.043 71.492 46.043 c 55.773 40.184 41.922 47.375 41.922 47.375
+ c 40.59 63.895 48.047 74.551 49.648 76.418 c 49.379 77.484 48.848 78.551
+ 48.582 79.613 c 47.516 83.344 46.449 87.34 45.918 91.34 c 45.918 91.871
+ 45.648 92.402 45.648 92.938 c 31.262 100.129 27 114.781 27 114.781 c 38.988
+ 128.637 53.109 129.438 53.109 129.438 c 54.977 132.633 56.84 135.566 59.238
+ 138.496 c 60.305 139.562 61.371 140.895 62.168 141.961 c 57.906 154.48
+62.703 164.871 62.703 164.871 c 76.023 165.406 84.816 159.012 86.68 157.414
+ c 88.012 157.945 89.344 158.211 90.676 158.746 c 94.672 159.809 98.938
+160.344 103.199 160.609 c 104.266 160.609 105.332 160.609 106.398 160.609
+ c 108.262 160.609 l 114.656 169.668 125.578 171 125.578 171 c 133.57 162.742
+ 133.84 154.48 133.84 152.617 c 133.84 152.352 133.84 152.352 133.84 152.352
+ c 133.84 152.082 l 135.438 151.02 137.035 149.688 138.633 148.355 c 141.832
+ 145.422 144.496 142.227 146.895 138.762 c 147.16 138.496 147.426 138.23
+ 147.426 137.695 c 156.484 138.23 162.613 132.102 162.613 132.102 c 161.016
+ 122.777 155.684 118.246 154.621 117.449 c 154.621 117.449 154.621 117.449
+ 154.355 117.449 c 154.355 116.914 154.355 116.383 154.355 115.848 c 154.355
+ 114.781 154.355 113.719 154.355 112.918 c 154.355 111.055 l 154.355 110.785
+ 154.355 110.785 154.355 110.785 c 154.355 109.453 l 154.355 109.188 154.355
+ 108.922 154.355 108.656 c 154.355 108.391 154.355 108.121 154.355 107.855
+ c 154.355 106.258 l 154.086 105.191 154.086 104.125 153.82 103.328 c 152.754
+ 99.332 151.422 95.602 149.293 92.137 c 147.16 88.672 144.762 85.742 141.832
+ 83.078 c 138.898 80.414 135.703 78.551 132.238 76.949 c 128.777 75.352
+125.312 74.551 121.582 74.02 c 119.719 73.754 118.117 73.754 116.254 73.754
+ c 114.391 73.754 l 114.121 73.754 113.855 73.754 113.59 73.754 c 112.789
+ 73.754 111.723 74.02 110.926 74.02 c 107.461 74.551 103.996 75.883 101.066
+ 77.75 c 98.137 79.613 95.473 81.746 93.34 84.145 c 91.211 86.543 89.609
+ 89.473 88.547 92.402 c 87.48 95.336 86.945 98.266 86.68 101.195 c 86.68
+ 101.996 86.68 102.527 86.68 103.328 c 86.68 103.594 86.68 103.594 86.68
+ 103.859 c 86.68 104.391 l 86.68 104.66 86.68 105.191 86.68 105.457 c 86.945
+ 106.789 87.215 108.391 87.48 109.723 c 88.277 112.387 89.609 114.781 90.945
+ 116.914 c 92.543 119.047 94.406 120.645 96.273 121.977 c 98.137 123.309
+ 100.27 124.375 102.398 124.906 c 104.531 125.441 106.398 125.707 108.527
+ 125.707 c 108.793 125.707 109.059 125.707 109.328 125.707 c 109.859 125.707
+ l 110.125 125.707 110.391 125.707 110.391 125.707 c 110.391 125.707 110.391
+ 125.707 110.66 125.707 c 111.191 125.707 l 111.457 125.707 111.723 125.707
+ 111.992 125.707 c 112.258 125.707 112.523 125.707 112.789 125.441 c 113.324
+ 125.441 113.59 125.176 114.121 125.176 c 114.922 124.906 115.723 124.641
+ 116.52 124.109 c 117.32 123.84 117.852 123.309 118.652 122.777 c 118.918
+ 122.777 118.918 122.512 119.184 122.242 c 119.984 121.711 119.984 120.645
+ 119.449 120.113 c 118.918 119.578 118.117 119.312 117.586 119.844 c 117.32
+ 119.844 117.32 120.113 117.055 120.113 c 116.52 120.379 115.988 120.645
+ 115.188 120.91 c 114.656 121.176 113.855 121.176 113.324 121.445 c 113.055
+ 121.445 112.523 121.445 112.258 121.445 c 111.992 121.445 111.992 121.445
+ 111.723 121.445 c 111.457 121.445 111.457 121.445 111.191 121.445 c 110.926
+ 121.445 110.926 121.445 110.66 121.445 c 110.391 121.445 110.125 121.445
+ 110.125 121.445 c 109.594 121.445 l 109.328 121.445 109.328 121.445 109.059
+ 121.445 c 107.461 121.176 106.129 120.91 104.531 120.113 c 102.934 119.578
+ 101.602 118.512 100.266 117.449 c 98.938 116.383 97.871 114.781 97.07 113.449
+ c 96.273 112.117 95.473 110.254 95.207 108.391 c 94.941 107.59 94.941 106.523
+ 94.941 105.723 c 94.941 105.457 94.941 105.191 94.941 104.926 c 94.941
+104.391 l 94.941 103.859 94.941 103.328 95.207 102.793 c 96.004 98.797 97.871
+ 95.066 101.066 91.871 c 101.867 91.07 102.664 90.539 103.465 89.738 c 104.266
+ 89.207 105.332 88.672 106.129 88.141 c 107.195 87.609 108.262 87.34 109.059
+ 87.074 c 110.125 86.809 111.191 86.543 112.258 86.543 c 112.789 86.543
+113.324 86.543 113.855 86.543 c 114.121 86.543 114.121 86.543 114.121 86.543
+ c 115.453 86.543 l 116.52 86.543 117.852 86.809 118.918 87.074 c 121.316
+ 87.609 123.445 88.406 125.578 89.738 c 129.84 92.137 133.305 95.867 135.703
+ 100.129 c 136.77 102.262 137.57 104.66 138.102 107.055 c 138.102 107.59
+ 138.367 108.391 138.367 108.922 c 138.367 109.988 l 138.367 110.254 138.367
+ 110.254 138.367 110.52 c 138.367 110.785 138.367 110.785 138.367 111.055
+ c 138.367 112.117 l 138.367 112.387 138.367 112.918 138.367 113.184 c 138.367
+ 113.984 138.367 114.516 138.102 115.316 c 138.102 115.848 137.836 116.648
+ 137.836 117.18 c 137.836 117.715 137.566 118.512 137.301 119.047 c 137.035
+ 120.379 136.504 121.711 135.969 122.777 c 134.902 125.176 133.57 127.57
+ 131.973 129.969 c 128.777 134.234 124.512 137.961 119.449 140.094 c 117.055
+ 141.16 114.391 141.961 111.723 142.492 c 110.391 142.758 109.059 142.758
+ 107.727 143.023 c 105.863 143.023 l 106.129 143.023 105.863 143.023 105.863
+ 143.023 c 105.062 143.023 104.531 143.023 103.73 143.023 c 100.801 142.758
+ 97.871 142.227 95.207 141.426 c 92.543 140.629 89.609 139.562 87.215 138.23
+ c 82.152 135.566 77.621 131.836 73.891 127.305 c 72.027 125.176 70.43 122.777
+ 69.363 120.113 c 68.031 117.449 66.965 114.781 66.164 112.117 c 65.367
+109.453 64.832 106.523 64.832 103.859 c 64.832 99.863 l 64.832 99.598 64.832
+ 99.062 64.832 98.797 c 64.832 97.465 65.098 95.867 65.098 94.535 c 65.367
+ 93.203 65.633 91.602 65.898 90.273 c 66.164 88.941 66.43 87.34 66.965 86.008
+ c 67.766 83.344 68.828 80.68 69.895 78.016 c 72.293 72.953 75.223 68.426
+ 78.953 64.961 c 79.754 64.16 80.82 63.098 81.883 62.297 c 82.949 61.496
+ 84.016 60.699 85.082 60.164 c 86.148 59.367 87.215 58.832 88.277 58.301
+ c 88.812 58.035 89.344 57.766 89.879 57.5 c 90.145 57.5 90.41 57.234 90.676
+ 57.234 c 90.941 57.234 91.211 56.969 91.477 56.969 c 92.543 56.434 93.875
+ 56.168 94.941 55.637 c 95.207 55.637 95.473 55.371 95.738 55.371 c 96.004
+ 55.371 96.273 55.102 96.539 55.102 c 97.07 54.836 97.871 54.836 98.402
+54.57 c 98.668 54.57 98.938 54.305 99.469 54.305 c 99.734 54.305 100.004
+ 54.305 100.535 54.039 c 100.801 54.039 101.066 54.039 101.602 53.77 c 102.664
+ 53.77 l 102.934 53.77 103.199 53.77 103.73 53.504 c 103.996 53.504 104.531
+ 53.504 104.797 53.238 c 105.062 53.238 105.598 53.238 105.863 53.238 c
+106.129 53.238 106.398 53.238 106.66 53.238 c 107.727 53.238 l 107.996 53.238
+ 108.527 53.238 108.793 53.238 c 109.328 53.238 l 109.328 53.238 109.594
+ 53.238 109.328 53.238 c 109.594 53.238 l 109.859 53.238 110.125 53.238
+110.391 53.238 c 111.723 53.238 112.789 53.238 114.121 53.238 c 116.52 53.238
+ 118.918 53.504 121.316 54.039 c 125.844 54.836 130.109 56.434 134.105 58.301
+ c 138.102 60.164 141.566 62.562 144.496 65.227 c 144.762 65.492 144.762
+ 65.492 145.027 65.762 c 145.293 66.027 145.293 66.027 145.562 66.293 c
+145.828 66.559 146.359 66.824 146.625 67.359 c 146.895 67.891 147.426 67.891
+ 147.691 68.426 c 147.961 68.957 148.492 69.223 148.758 69.488 c 150.09
+70.824 151.156 72.156 152.223 73.754 c 154.355 76.418 156.219 79.348 157.551
+ 82.012 c 157.551 82.277 157.816 82.277 157.816 82.547 c 157.816 82.812
+158.082 82.812 158.082 83.078 c 158.352 83.344 158.352 83.609 158.617 84.145
+ c 158.883 84.41 158.883 84.676 159.148 85.211 c 159.414 85.477 159.414
+85.742 159.684 86.277 c 160.215 87.609 160.75 88.672 161.016 89.738 c 161.547
+ 91.602 162.078 93.203 162.348 94.535 c 162.613 95.066 163.145 95.602 163.68
+ 95.336 c 164.211 95.336 164.746 94.801 164.746 94.266 c 165.809 91.07 165.809
+ 89.207 165.543 87.34 c h
+165.543 87.34 m W n
+[0.75 0 0 0.75 0 0] concat
+/CairoFunction
+ << /FunctionType 2
+ /Domain [ 0 1 ]
+ /C0 [ 1 0.945098 0 ]
+ /C1 [ 0.941176 0.352941 0.156863 ]
+ /N 1
+ >>
+def
+ << /ShadingType 2
+ /ColorSpace /DeviceRGB
+ /Coords [ 129.039001 282.048004 129.039001 50.682999 ]
+ /Extend [ true true ]
+ /Function CairoFunction
+ >>
+shfill
+Q
+Q Q
+showpage
+%%Trailer
+end
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_GraphQL-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_GraphQL-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..67fa39b6aa
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_GraphQL-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_GraphQL-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_GraphQL-Dark.eps
new file mode 100644
index 0000000000..07cbbf52bf
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_GraphQL-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_GraphQL-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_GraphQL-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..fe218f00ec
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_GraphQL-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_GraphQL-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_GraphQL-Light.eps
new file mode 100644
index 0000000000..7313803495
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_GraphQL-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Gulp-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Gulp-eps-converted-to.pdf
new file mode 100644
index 0000000000..e7901e25c1
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Gulp-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Gulp.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Gulp.eps
new file mode 100644
index 0000000000..fedc87c753
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Gulp.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_HTML-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_HTML-eps-converted-to.pdf
new file mode 100644
index 0000000000..eab5019500
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_HTML-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_HTML.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_HTML.eps
new file mode 100644
index 0000000000..901a94347e
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_HTML.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Haskell-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Haskell-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..e9bc3aae68
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Haskell-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Haskell-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Haskell-Dark.eps
new file mode 100644
index 0000000000..ac40008c2e
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Haskell-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Haskell-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Haskell-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..e314e42b5e
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Haskell-Light-eps-converted-to.pdf
@@ -0,0 +1,79 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xmMn0 9EN`?c HYE{E
+VH/C>k->J848gA>{*:QPt{AEN<nCĖHVf QR;,yҙ-G
+eo[Y=Ɲb+;#棦:$g,cd%R p>'NC
+(_Ha˼i{N,8sHcIܮ%Gcؙi؝
+[l,I-WȝI
+&Kt*#%H$F
+y\Z(F^Ρ3Abk
+q"# AcT43Ux l7>[^{endstream
+endobj
+6 0 obj
+326
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 7 0 R
+>>
+endobj
+7 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:20:53+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:20:53+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:8682fdf8-143f-11ef-0000-76e1cb2e7131'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514132053+02'00')
+/ModDate(D:20240514132053+02'00')>>endobj
+xref
+0 8
+0000000000 65535 f
+0000000873 00000 n
+0000002195 00000 n
+0000000814 00000 n
+0000000700 00000 n
+0000000285 00000 n
+0000000681 00000 n
+0000000937 00000 n
+trailer
+<< /Size 8 /Root 1 0 R /Info 2 0 R
+/ID [(IPdt}t\344\261\366+\367\3749#6W)(IPdt}t\344\261\366+\367\3749#6W)]
+>>
+startxref
+2320
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Haskell-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Haskell-Light.eps
new file mode 100644
index 0000000000..fbde0ac03c
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Haskell-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Haxe-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Haxe-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..26f90d59d6
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Haxe-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Haxe-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Haxe-Dark.eps
new file mode 100644
index 0000000000..3db64926ee
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Haxe-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Haxe-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Haxe-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..c9ade87817
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Haxe-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Haxe-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Haxe-Light.eps
new file mode 100644
index 0000000000..3d1005f97c
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Haxe-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_HaxeFlixel-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_HaxeFlixel-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..ce606b969e
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_HaxeFlixel-Dark-eps-converted-to.pdf
@@ -0,0 +1,73 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xmQK0spwkś/DgF*m9?;o`01B*QR)lI:^+*˜j:Î]am0RsIoN^!7\v0|J$}BUͼ $[Qsx=kc6quB h-%L&ߧe¢C)NSv7v6!<^É
+a^'wQcXGL1w\v67pU8v w4sf.7O6ʞ,endstream
+endobj
+6 0 obj
+295
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 7 0 R
+>>
+endobj
+7 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:20:55+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:20:55+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:87b42af8-143f-11ef-0000-6d133545f7c0'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514132055+02'00')
+/ModDate(D:20240514132055+02'00')>>endobj
+xref
+0 8
+0000000000 65535 f
+0000000842 00000 n
+0000002164 00000 n
+0000000783 00000 n
+0000000669 00000 n
+0000000285 00000 n
+0000000650 00000 n
+0000000906 00000 n
+trailer
+<< /Size 8 /Root 1 0 R /Info 2 0 R
+/ID [<4D9D6751681C62DF093F09BAD50E2915><4D9D6751681C62DF093F09BAD50E2915>]
+>>
+startxref
+2289
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_HaxeFlixel-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_HaxeFlixel-Dark.eps
new file mode 100644
index 0000000000..e9db73c42e
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_HaxeFlixel-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_HaxeFlixel-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_HaxeFlixel-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..2fe96a9ced
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_HaxeFlixel-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_HaxeFlixel-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_HaxeFlixel-Light.eps
new file mode 100644
index 0000000000..963ec88e52
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_HaxeFlixel-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Heroku-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Heroku-eps-converted-to.pdf
new file mode 100644
index 0000000000..5f5acd9126
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Heroku-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Heroku.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Heroku.eps
new file mode 100644
index 0000000000..c16edccc77
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Heroku.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Hibernate-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Hibernate-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..8b45efcdc2
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Hibernate-Dark-eps-converted-to.pdf
@@ -0,0 +1,72 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xPKn0>g3DjoQpHZEJ20|VPHg>0ν~}mXi0g!BNeT'd<){x󒙤mF3./Dqc`H4׬*7  Ea0GGC1ˤ `N]-Äm]R'mcje<tdI@_i ʞamw$yCώa?K.=N i#D|]cW6oTendstream
+endobj
+6 0 obj
+276
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 7 0 R
+>>
+endobj
+7 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:20:58+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:20:58+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:897dee78-143f-11ef-0000-4c97c27f487e'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514132058+02'00')
+/ModDate(D:20240514132058+02'00')>>endobj
+xref
+0 8
+0000000000 65535 f
+0000000823 00000 n
+0000002145 00000 n
+0000000764 00000 n
+0000000650 00000 n
+0000000285 00000 n
+0000000631 00000 n
+0000000887 00000 n
+trailer
+<< /Size 8 /Root 1 0 R /Info 2 0 R
+/ID [<9EB6EE8FFBAFCF4364D9FF7D001F069A><9EB6EE8FFBAFCF4364D9FF7D001F069A>]
+>>
+startxref
+2270
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Hibernate-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Hibernate-Dark.eps
new file mode 100644
index 0000000000..bd035dafe9
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Hibernate-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Hibernate-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Hibernate-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..4b9ba0a7b9
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Hibernate-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Hibernate-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Hibernate-Light.eps
new file mode 100644
index 0000000000..ecb22ada81
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Hibernate-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Htmx-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Htmx-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..052aae34aa
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Htmx-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Htmx-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Htmx-Dark.eps
new file mode 100644
index 0000000000..07f6a9ea7d
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Htmx-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Htmx-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Htmx-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..baa4bdd7bf
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Htmx-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Htmx-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Htmx-Light.eps
new file mode 100644
index 0000000000..9c0d6bc9f2
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Htmx-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_IPFS-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_IPFS-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..54f4b6405e
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_IPFS-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_IPFS-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_IPFS-Dark.eps
new file mode 100644
index 0000000000..b53c4d5dae
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_IPFS-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_IPFS-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_IPFS-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..571c3bbf54
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_IPFS-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_IPFS-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_IPFS-Light.eps
new file mode 100644
index 0000000000..458c40b44b
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_IPFS-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Idea-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Idea-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..c1f637801c
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Idea-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Idea-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Idea-Dark.eps
new file mode 100644
index 0000000000..7921bb4ac6
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Idea-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Idea-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Idea-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..2f368419b9
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Idea-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Idea-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Idea-Light.eps
new file mode 100644
index 0000000000..393d703955
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Idea-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Illustrator-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Illustrator-eps-converted-to.pdf
new file mode 100644
index 0000000000..24fa530bc1
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Illustrator-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Illustrator.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Illustrator.eps
new file mode 100644
index 0000000000..67fb19c944
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Illustrator.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Instagram-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Instagram-eps-converted-to.pdf
new file mode 100644
index 0000000000..7bfcf50ccb
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Instagram-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Instagram.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Instagram.eps
new file mode 100644
index 0000000000..096d20f20e
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Instagram.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_JQuery-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_JQuery-eps-converted-to.pdf
new file mode 100644
index 0000000000..41e3ecdcc6
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_JQuery-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_JQuery.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_JQuery.eps
new file mode 100644
index 0000000000..fdefbab93e
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_JQuery.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Java-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Java-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..d0e3b1ac2b
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Java-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Java-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Java-Dark.eps
new file mode 100644
index 0000000000..e739cbc9b5
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Java-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Java-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Java-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..a18449a6a3
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Java-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Java-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Java-Light.eps
new file mode 100644
index 0000000000..a9039d52df
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Java-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_JavaScript-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_JavaScript-eps-converted-to.pdf
new file mode 100644
index 0000000000..10d58ab87f
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_JavaScript-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_JavaScript.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_JavaScript.eps
new file mode 100644
index 0000000000..5586b1b8b8
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_JavaScript.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Jenkins-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Jenkins-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..50f634e9c0
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Jenkins-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Jenkins-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Jenkins-Dark.eps
new file mode 100644
index 0000000000..2207e20e06
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Jenkins-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Jenkins-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Jenkins-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..4eabce85de
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Jenkins-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Jenkins-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Jenkins-Light.eps
new file mode 100644
index 0000000000..bd02d01452
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Jenkins-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Jest-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Jest-eps-converted-to.pdf
new file mode 100644
index 0000000000..bedec64e3c
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Jest-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Jest.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Jest.eps
new file mode 100644
index 0000000000..1e88033a94
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Jest.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Julia-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Julia-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..eeca82a19b
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Julia-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Julia-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Julia-Dark.eps
new file mode 100644
index 0000000000..64c09865f3
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Julia-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Julia-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Julia-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..a6cc9dbabd
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Julia-Light-eps-converted-to.pdf
@@ -0,0 +1,76 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xeRA0~26}C 5QH <
+6{<JՆ堤ՃS}VQ{"\(}5I$=3!A#@x)@({l<\E23V<%2?RȊa5 (VJ2ѳҒaaXHA'(63[Fv<2
+)(
+72T>[K3FVR= ¤!lrq>¶ș NAAOħ-ms}HA $\>`k@tIաLܢwf5H0ḄQ
+#)ӣpw|8 Tendstream
+endobj
+6 0 obj
+382
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 7 0 R
+>>
+endobj
+7 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:21:15+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:21:15+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:939fecf8-143f-11ef-0000-c376b529ce8e'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514132115+02'00')
+/ModDate(D:20240514132115+02'00')>>endobj
+xref
+0 8
+0000000000 65535 f
+0000000929 00000 n
+0000002251 00000 n
+0000000870 00000 n
+0000000756 00000 n
+0000000285 00000 n
+0000000737 00000 n
+0000000993 00000 n
+trailer
+<< /Size 8 /Root 1 0 R /Info 2 0 R
+/ID [<8EA2BFE55EAAF86BF3AEF54312CE2DAE><8EA2BFE55EAAF86BF3AEF54312CE2DAE>]
+>>
+startxref
+2376
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Julia-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Julia-Light.eps
new file mode 100644
index 0000000000..ffb8196186
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Julia-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Kafka-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Kafka-eps-converted-to.pdf
new file mode 100644
index 0000000000..452dddc09f
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Kafka-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Kafka.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Kafka.eps
new file mode 100644
index 0000000000..4a598343d8
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Kafka.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Kali-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Kali-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..3f8344e30e
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Kali-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Kali-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Kali-Dark.eps
new file mode 100644
index 0000000000..e90af053d5
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Kali-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Kali-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Kali-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..d8bcba195f
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Kali-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Kali-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Kali-Light.eps
new file mode 100644
index 0000000000..4c4e29c9c3
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Kali-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Kotlin-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Kotlin-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..e60f034f12
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Kotlin-Dark-eps-converted-to.pdf
@@ -0,0 +1,155 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+x
+ @wH4KHBgl8&Fel1wR
+s78OY7`+p4y8B%KT-Y'ԁBCfTI534g
+\wҡ0{[ک@1X"<+<oNOOendstream
+endobj
+6 0 obj
+171
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+/ColorSpace 13 0 R
+/Pattern 14 0 R
+/Shading 15 0 R
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 16 0 R
+>>
+endobj
+7 0 obj
+[/Pattern]
+endobj
+13 0 obj
+<</R7
+7 0 R>>
+endobj
+14 0 obj
+<</R12
+12 0 R>>
+endobj
+12 0 obj
+<</PatternType 2
+/Shading 11 0 R
+/Matrix[0.75
+0
+0
+-0.75
+0
+192]>>endobj
+15 0 obj
+<</R11
+11 0 R>>
+endobj
+11 0 obj
+<</ShadingType 2
+/ColorSpace/DeviceRGB
+/Coords[217.382
+38.6183
+38
+218]
+/Domain[0.00343514
+1]
+/Function 10 0 R
+/Extend [true true]>>endobj
+9 0 obj
+<</FunctionType 2
+/Domain[0
+1]
+/C0[0.780392
+0.0666667
+0.882353]
+/C1[0.498039
+0.321569
+1]
+/N 1>>endobj
+8 0 obj
+<</FunctionType 2
+/Domain[0
+1]
+/C0[0.894118
+0.282353
+0.341176]
+/C1[0.780392
+0.0666667
+0.882353]
+/N 1>>endobj
+10 0 obj
+<</Functions[8 0 R
+9 0 R]
+/FunctionType 3
+/Domain[0.00343514
+1]
+/Bounds[0.4689]
+/Encode[0
+1
+0
+1]>>endobj
+16 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:21:18+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:21:18+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:9569b078-143f-11ef-0000-8d2a55882c66'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514132118+02'00')
+/ModDate(D:20240514132118+02'00')>>endobj
+xref
+0 17
+0000000000 65535 f
+0000000769 00000 n
+0000002781 00000 n
+0000000710 00000 n
+0000000545 00000 n
+0000000285 00000 n
+0000000526 00000 n
+0000000834 00000 n
+0000001291 00000 n
+0000001181 00000 n
+0000001408 00000 n
+0000001034 00000 n
+0000000922 00000 n
+0000000860 00000 n
+0000000890 00000 n
+0000001002 00000 n
+0000001522 00000 n
+trailer
+<< /Size 17 /Root 1 0 R /Info 2 0 R
+/ID [<2776B5279556A4B8E9BC0BA0078EDB0D><2776B5279556A4B8E9BC0BA0078EDB0D>]
+>>
+startxref
+2906
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Kotlin-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Kotlin-Dark.eps
new file mode 100644
index 0000000000..78c0048811
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Kotlin-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Kotlin-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Kotlin-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..fd452af223
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Kotlin-Light-eps-converted-to.pdf
@@ -0,0 +1,156 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+x
+0L.^:'RHB{@ran@DK"\TH9>r
+'
+8qvA%&v>QzM)4[6NI3BxtVs+CTx_?CZ5Pct=q#aƂߺ
+?;Omendstream
+endobj
+6 0 obj
+171
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+/ColorSpace 13 0 R
+/Pattern 14 0 R
+/Shading 15 0 R
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 16 0 R
+>>
+endobj
+7 0 obj
+[/Pattern]
+endobj
+13 0 obj
+<</R7
+7 0 R>>
+endobj
+14 0 obj
+<</R12
+12 0 R>>
+endobj
+12 0 obj
+<</PatternType 2
+/Shading 11 0 R
+/Matrix[0.75
+0
+0
+-0.75
+0
+192]>>endobj
+15 0 obj
+<</R11
+11 0 R>>
+endobj
+11 0 obj
+<</ShadingType 2
+/ColorSpace/DeviceRGB
+/Coords[217.382
+38.6183
+38
+218]
+/Domain[0.00343514
+1]
+/Function 10 0 R
+/Extend [true true]>>endobj
+9 0 obj
+<</FunctionType 2
+/Domain[0
+1]
+/C0[0.780392
+0.0666667
+0.882353]
+/C1[0.498039
+0.321569
+1]
+/N 1>>endobj
+8 0 obj
+<</FunctionType 2
+/Domain[0
+1]
+/C0[0.894118
+0.282353
+0.341176]
+/C1[0.780392
+0.0666667
+0.882353]
+/N 1>>endobj
+10 0 obj
+<</Functions[8 0 R
+9 0 R]
+/FunctionType 3
+/Domain[0.00343514
+1]
+/Bounds[0.4689]
+/Encode[0
+1
+0
+1]>>endobj
+16 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:21:19+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:21:19+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:960246f8-143f-11ef-0000-f3e1c9d2f426'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514132119+02'00')
+/ModDate(D:20240514132119+02'00')>>endobj
+xref
+0 17
+0000000000 65535 f
+0000000769 00000 n
+0000002781 00000 n
+0000000710 00000 n
+0000000545 00000 n
+0000000285 00000 n
+0000000526 00000 n
+0000000834 00000 n
+0000001291 00000 n
+0000001181 00000 n
+0000001408 00000 n
+0000001034 00000 n
+0000000922 00000 n
+0000000860 00000 n
+0000000890 00000 n
+0000001002 00000 n
+0000001522 00000 n
+trailer
+<< /Size 17 /Root 1 0 R /Info 2 0 R
+/ID [<5FB8036A790C17F967694E35956BADBB><5FB8036A790C17F967694E35956BADBB>]
+>>
+startxref
+2906
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Kotlin-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Kotlin-Light.eps
new file mode 100644
index 0000000000..adf6189107
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Kotlin-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Ktor-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Ktor-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..ebad41d459
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Ktor-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Ktor-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Ktor-Dark.eps
new file mode 100644
index 0000000000..ffb3d4c5c4
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Ktor-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Ktor-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Ktor-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..7fbb6ae03f
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Ktor-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Ktor-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Ktor-Light.eps
new file mode 100644
index 0000000000..b666b8b1a6
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Ktor-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Kubernetes-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Kubernetes-eps-converted-to.pdf
new file mode 100644
index 0000000000..1d44a2c55e
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Kubernetes-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Kubernetes.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Kubernetes.eps
new file mode 100644
index 0000000000..816a8554e2
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Kubernetes.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_LaTeX-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_LaTeX-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..7a609f33fd
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_LaTeX-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_LaTeX-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_LaTeX-Dark.eps
new file mode 100644
index 0000000000..30f411d7e8
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_LaTeX-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_LaTeX-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_LaTeX-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..6e1f8fb593
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_LaTeX-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_LaTeX-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_LaTeX-Light.eps
new file mode 100644
index 0000000000..39258a72e4
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_LaTeX-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Laravel-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Laravel-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..afb2a1ca66
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Laravel-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Laravel-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Laravel-Dark.eps
new file mode 100644
index 0000000000..3a374ee954
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Laravel-Dark.eps
@@ -0,0 +1,8539 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%BoundingBox: 0 0 256 256
+%%HiResBoundingBox: 0.00 0.00 256.00 256.00
+%%Creator: (Zamzar)
+%%LanguageLevel: 2
+%%CreationDate: D:20240513225134Z00'00'
+%%Pages: 1
+%%Copyright: (Zamzar)
+%%EndComments
+%%BeginProlog
+/DSC_OPDFREAD true def
+/SetPageSize false def
+/EPS2Write true def
+currentdict/DSC_OPDFREAD known{
+currentdict/DSC_OPDFREAD get
+}{
+false
+}ifelse
+10 dict begin
+/DSC_OPDFREAD exch def
+/this currentdict def
+/y 720 def
+/ebuf 200 string def
+/prnt{
+36//this/y get moveto//ebuf cvs show
+//this/y 2 copy get 12 sub put
+}bind def
+/newline{
+36//this/y get moveto
+//this/y 2 copy get 12 sub put
+}bind def
+errordict/handleerror
+{systemdict begin
+$error begin
+newerror
+{(%%[ Error handled by opdfread.ps : )print errorname//ebuf cvs print(; OffendingCommand: )
+print/command load//ebuf cvs print( ]%%)= flush
+/newerror false store vmstatus pop pop 0 ne
+{grestoreall
+}if
+errorname(VMerror)ne
+{showpage
+}if
+initgraphics
+0 720 moveto
+errorname(VMerror)eq
+{//this/ehsave known
+{clear//this/ehsave get restore 2 vmreclaim
+}if
+vmstatus exch pop exch pop
+}
+/Courier 12 selectfont
+{
+(ERROR: )//prnt exec errorname//prnt exec
+(OFFENDING COMMAND: )//prnt exec
+/command load//prnt exec
+$error/ostack known{
+(%%[STACK:)=
+(STACK:)//prnt exec
+$error/ostack get aload length{
+//newline exec
+dup mark eq{
+(-mark-)dup = show
+}{
+dup type/nametype eq{
+dup xcheck not{
+(/)show
+(/)print
+}if
+}if
+dup =//ebuf cvs show
+}ifelse
+}repeat
+}if
+}ifelse
+(%%]%)=
+//systemdict/showpage get exec
+quit
+}if
+end
+end
+}bind readonly put
+end
+50 dict begin
+/DefaultSwitch
+{
+dup where{
+pop pop
+}{
+false def
+}ifelse
+}bind def
+/=string 256 string def
+/=only{
+//=string cvs print
+}bind def
+/HexDigits(0123456789ABCDEF)readonly def
+/PrintHex
+{8{
+dup -28 bitshift 15 and//HexDigits exch 1 getinterval//=only exec
+4 bitshift
+}repeat
+pop
+}bind def
+/PDFR_DEBUG DefaultSwitch
+/PDFR_DUMP DefaultSwitch
+/PDFR_STREAM DefaultSwitch
+/TTFDEBUG DefaultSwitch
+/RotatePages DefaultSwitch
+/FitPages DefaultSwitch
+/CenterPages DefaultSwitch
+/SetPageSize DefaultSwitch
+/error
+{
+counttomark 1 sub -1 0{
+index dup type/arraytype eq{==}{=only}ifelse
+}for
+()=
+cleartomark
+....Undefined
+}bind def
+//SetPageSize{
+//RotatePages//FitPages or//CenterPages or{
+mark(/RotatePages, /FitPages and CenterPages are not allowed with /SetPageSize)//error exec
+}if
+}
+{
+//FitPages//CenterPages and{
+mark(CenterPages is not allowed with /FitPages)//error exec
+}if
+}
+ifelse
+/knownget
+{
+2 copy known{
+get true
+}{
+pop pop false
+}ifelse
+}bind def
+/IsUpper
+{dup(A)0 get ge exch(Z)0 get le and
+}bind def
+/cpa2g{
+dup length array
+0 1 2 index length 1 sub{
+dup 3 index exch get cp2g
+3 copy put pop pop
+}for
+exch pop
+}bind def
+/cpd2g{
+dup length dict exch{
+cp2g 2 index 3 1 roll put
+}forall
+}bind def
+/cps2g{
+dup length string copy
+}bind def
+/cp2gprocs
+<</arraytype//cpa2g/dicttype//cpd2g/packedarraytype//cpa2g/stringtype//cps2g >>
+def
+/cp2g{
+dup gcheck not{
+dup//cp2gprocs 1 index type
+2 copy known{
+get currentglobal 3 1 roll true setglobal exec exch setglobal
+1 index wcheck not{readonly}if
+1 index xcheck{cvx}if
+exch pop
+}{
+pop pop
+}ifelse
+}if
+}bind def
+/BlockBuffer 65535 string def
+/PDFReader currentdict def
+/ObjectRegistryMaxLength 50000 def
+/ObjectRegistry 10 dict def
+ObjectRegistry
+begin
+0 ObjectRegistryMaxLength dict def
+end
+/CurrentObject null def
+/DoneDocumentStructure false def
+/GraphicState 20 dict begin
+/InitialTextMatrix matrix def
+/InitialMatrix matrix currentmatrix def
+currentdict end def
+/TempMatrix matrix def
+/GraphicStateStack 20 array def
+/GraphicStateStackPointer 0 def
+/InitialTextMatrixStack 20 array def
+/InitialTextMatrixStackPointer 0 def
+/PDFColorSpaces 50 dict def
+/InstalledFonts 50 dict def
+/MacRomanEncodingInverse null def
+currentglobal false setglobal
+userdict/PDFR_InitialGS gstate put
+userdict/PDFR_Patterns 50 dict put
+userdict/FuncDataReader 10 dict put
+setglobal
+/InitialExtGState 20 dict begin
+/BG2 currentblackgeneration cp2g def
+/UCR2 currentundercolorremoval cp2g def
+/TR2 currentglobal false setglobal[currentcolortransfer]exch setglobal cp2g def
+/HT currenthalftone cp2g def
+currentdict end readonly def
+/InitialGraphicState 20 dict begin
+/FontSize 0 def
+/CharacterSpacing 0 def
+/TextLeading 0 def
+/TextRenderingMode 0 def
+/WordSpacing 0 def
+currentdict end readonly def
+/SimpleColorSpaceNames 15 dict begin
+/DeviceGray true def
+/DeviceRGB true def
+/DeviceCMYK true def
+currentdict end readonly def
+/1_24_bitshift_1_sub 1 24 bitshift 1 sub def
+/ReadFontProcs 10 dict def
+/GetObject
+{
+dup ObjectRegistryMaxLength idiv
+//PDFReader/ObjectRegistry get exch knownget{
+exch knownget
+}{
+pop false
+}ifelse
+}bind def
+/PutObject
+{
+1 index ObjectRegistryMaxLength idiv
+//PDFReader/ObjectRegistry get 1 index knownget{
+exch pop
+3 1 roll put
+}{
+//PDFReader/ObjectRegistry get dup
+begin
+1 index ObjectRegistryMaxLength dict def
+end
+exch get
+3 1 roll put
+}ifelse
+}bind def
+/Register
+{
+1 index GetObject{
+dup xcheck{
+4 3 roll pop
+//PDFR_DEBUG{
+(Have a daemon for )print 2 index ==
+}if
+exec
+}{
+dup null ne{
+mark(The object )4 index(is already defined : )4 index//error exec
+}{
+pop
+}ifelse
+3 2 roll
+exec
+}ifelse
+}{
+3 2 roll
+exec
+}ifelse
+PutObject
+}bind def
+/IsRegistered
+{
+GetObject{
+null ne
+}{
+false
+}ifelse
+}bind def
+/GetRegistered
+{
+dup GetObject not{
+exch mark exch(Object )exch( isn't defined before needed (1).)//error exec
+}if
+dup xcheck{
+exch mark exch(Object )exch( isn't defined before needed (2).)//error exec
+}{
+dup null eq{
+exch mark exch(Object )exch( isn't defined before needed (3).)//error exec
+}if
+exch pop
+}ifelse
+}bind def
+/StandardFontNames<<
+/Times-Roman true
+/Helvetica true
+/Courier true
+/Symbol true
+/Times-Bold true
+/Helvetica-Bold true
+/Courier-Bold true
+/ZapfDingbats true
+/Times-Italic true
+/Helvetica-Oblique true
+/Courier-Oblique true
+/Times-BoldItalic true
+/Helvetica-BoldOblique true
+/Courier-BoldOblique true
+>>def
+/CleanAllResources
+{//PDFR_DEBUG{
+(CleanAllResources beg)=
+}if
+//PDFReader/ObjectRegistry get{
+dup length 0 exch 1 exch 1 sub{
+2 copy get dup xcheck{
+pop pop
+}{
+dup null eq{
+pop pop
+}{
+dup type/dicttype eq{/.Global known}{pop false}ifelse{
+pop
+}{
+//PDFR_DEBUG{
+(Dropping )print dup =
+}if
+1 index exch/DroppedObject put
+}ifelse
+}ifelse
+}ifelse
+}for
+pop
+}forall
+FontDirectory length dict begin
+FontDirectory{
+pop
+dup//StandardFontNames exch known not{
+dup null def
+}if
+pop
+}forall
+currentdict
+end{
+pop
+//PDFR_DEBUG{
+(Undefining font )print dup =
+}if
+undefinefont
+}forall
+//PDFR_DEBUG{
+(CleanAllResources end)=
+}if
+}bind def
+/PrintReference
+{
+//PDFR_DEBUG{
+({ )print
+dup{
+=only( )print
+}forall
+( })=
+}if
+}bind def
+/R
+{
+0 ne{
+exch mark exch(A referred object generation )exch( isn't 0.)//error exec
+}if
+[
+exch//GetRegistered/exec load
+]cvx
+//PrintReference exec
+}bind def
+/IsObjRef
+{
+dup type/arraytype eq{
+dup length 3 eq{
+dup xcheck exch
+dup 0 get type/integertype eq 3 2 roll and exch
+dup 1 get//GetRegistered eq 3 2 roll and exch
+2 get/exec load eq and
+}{
+pop false
+}ifelse
+}{
+pop false
+}ifelse
+}bind def
+/DoNothing
+{
+}def
+/RunTypeDaemon
+{
+dup type/dicttype eq{
+dup/Type//knownget exec{
+//PDFReader/TypeDaemons get exch
+//knownget exec{
+exec
+}if
+}if
+}if
+}bind def
+/obj
+{
+//PDFR_DEBUG{
+(Defining )print 1 index =only( )print dup =only( obj)=
+}if
+0 ne{
+exch mark exch(An object generation )exch( isn't 0.)//error exec
+}if
+}bind def
+/endobj
+{
+//PDFR_DEBUG{
+(endobj )=
+}if
+count 1 eq{
+pop
+}{
+dup type/dicttype eq{
+dup/.endobj_daemon//knownget exec{
+//PDFR_DEBUG{(.endobj_daemon for )print 2 index =}if
+exec
+}if
+}if
+dup type/dicttype eq{dup/ImmediateExec known}{false}ifelse{
+pop pop
+}{
+//PDFR_DEBUG{
+(Storing )print 1 index =
+}if
+//RunTypeDaemon exec
+//DoNothing 3 1 roll//Register exec
+}ifelse
+}ifelse
+}bind def
+/StoreBlock
+{
+//PDFR_DEBUG{
+(StoreBlock )print//PDFReader/BlockCount get =only(, Length = )print dup length =
+}if
+dup length string copy
+//PDFReader/BlockCount get exch
+//PDFReader/CurrentObject get 3 1 roll
+put
+//PDFReader/BlockCount get 1 add
+//PDFReader exch/BlockCount exch put
+}bind def
+/CheckLength
+{dup type/integertype ne{
+mark(Object length isn't an integer.)//error exec
+}if
+}bind def
+/ResolveD
+{
+3 copy pop get
+dup//IsObjRef exec{
+//PDFR_DEBUG{
+(Resolving )print//PrintReference exec
+}if
+exec
+exch exec
+}{
+exch pop
+}ifelse
+dup 4 1 roll
+put
+}bind def
+/ResolveA
+{2 index 2 index get
+dup//IsObjRef exec{
+exec
+exch exec
+3 copy put
+}{
+exch pop
+}ifelse
+exch pop exch pop
+}bind def
+/StoreStream
+{
+dup//PDFReader exch/CurrentObject exch put
+//PDFReader/BlockCount 0 put
+dup/Length//CheckLength//ResolveD exec
+//PDFR_DEBUG{
+(StoreStream Length = )print dup =
+}if
+currentfile exch()/SubFileDecode filter
+{dup//BlockBuffer readstring{
+//StoreBlock exec
+}{
+//StoreBlock exec
+exit
+}ifelse
+}loop
+pop
+//PDFReader/CurrentObject null put
+//PDFR_DEBUG{
+(StoreStream end.)=
+}if
+}bind def
+/MakeStreamDumper
+{
+//PDFR_DEBUG{
+(MakeStreamDumper beg.)=
+}if
+currentglobal exch dup gcheck setglobal
+[exch
+1 dict dup/c 0 put exch
+1024 string
+{readstring pop
+(StreamDumper )print 1 index/c get =string cvs print( )print
+dup length =string cvs print( <)print dup print(>\n)print
+dup length
+3 2 roll
+dup/c get
+3 2 roll
+add/c exch put
+}/exec load
+]
+cvx 0()/SubFileDecode filter
+exch setglobal
+//PDFR_DEBUG{
+(MakeStreamDumper end.)=
+}if
+}bind def
+/ShortFilterNames 15 dict begin
+/AHx/ASCIIHexDecode def
+/A85/ASCII85Decode def
+/LZW/LZWDecode def
+/Fl/FlateDecode def
+/RL/RunLengthDecode def
+/CCF/CCITTFaxDecode def
+/DCT/DCTDecode def
+currentdict end readonly def
+/AppendFilters
+{
+//PDFR_DEBUG{
+(AppendFilters beg.)=
+}if
+dup 3 1 roll
+/Filter//knownget exec{
+dup type/nametype eq{
+dup//ShortFilterNames exch//knownget exec{
+exch pop
+}if
+2 index/DecodeParms//knownget exec{
+exch
+}if
+filter
+}{
+dup 0 exch 1 exch length 1 sub{
+2 copy get
+dup//ShortFilterNames exch//knownget exec{
+exch pop
+}if
+3 1 roll
+4 index/DecodeParms//knownget exec{
+exch get
+}{
+pop null
+}ifelse
+dup null eq{
+pop 3 1 roll filter exch
+}{
+3 1 roll
+4 1 roll filter exch
+}ifelse
+}for
+pop
+}ifelse
+//PDFR_DEBUG//PDFR_DUMP and{
+//MakeStreamDumper exec
+}if
+}if
+exch pop
+//PDFR_DEBUG{
+(AppendFilters end.)=
+}if
+}bind def
+/ExecuteStream
+{
+dup//PDFReader exch/CurrentObject exch put
+dup/Length//CheckLength//ResolveD exec
+//PDFR_DEBUG{
+(ExecuteStream id = )print 2 index =only( Length = )print dup =
+}if
+//PDFReader/InitialGraphicState get
+//PDFReader/GraphicState get copy pop
+//PDFReader/Operators get begin
+currentfile exch()/SubFileDecode filter
+1 index//AppendFilters exec
+cvx mark exch
+exec
+counttomark 0 ne{
+mark(Data left on ostack after an immediate stream execution.)//error exec
+}if
+cleartomark
+end
+//PDFR_DEBUG{
+(ExecuteStream end.)=
+}if
+//PDFReader/CurrentObject null put
+dup/IsPage known{
+dup/Context get/NumCopies//knownget exec{
+1 sub{
+copypage
+}repeat
+}if
+EPS2Write not{showpage}if
+}if
+}bind def
+/stream
+{
+//PDFR_DEBUG{
+1 index =only( stream)=
+}if
+1 index GetObject{
+dup xcheck{
+exec
+1 index null PutObject
+}{
+pop
+}ifelse
+}if
+dup/ImmediateExec known{
+dup/GlobalExec//knownget exec{
+currentglobal 4 1 roll
+setglobal
+//ExecuteStream exec
+3 2 roll setglobal
+}{
+//ExecuteStream exec
+}ifelse
+}{
+//StoreStream exec
+}ifelse
+dup/.CleanResources//knownget exec{
+/All eq{
+//CleanAllResources exec
+}if
+}if
+}bind def
+/HookFont
+{
+//PDFR_DEBUG{
+(Loaded the font )print dup/FontName get =
+}if
+{
+dup/FontFileType get dup/Type1 eq exch/MMType1 eq or{
+dup/FontName get
+//PDFReader/RemoveFontNamePrefix get exec
+findfont
+exit
+}if
+dup/FontFileType get/TrueType eq{
+//PDFReader/MakeType42 get exec
+//PDFR_DEBUG{
+(Font dict <<)=
+dup{
+1 index/sfnts eq{
+exch pop
+(/sfnts [)print
+{
+(-string\()print length//=only exec(\)- )=
+}forall
+(])=
+}{
+exch//=only exec( )print ==
+}ifelse
+}forall
+(>>)=
+}if
+dup/FontName get exch definefont
+exit
+}if
+mark(FontHook has no proc for )2 index/FontFileType get//error exec
+}loop
+/Font exch put
+}bind def
+/endstream
+{
+}bind def
+/xref
+{
+//PDFR_DEBUG{
+(xref)=
+//PDFR_DUMP{
+//PDFReader/ObjectRegistry get ==
+}if
+}if
+end
+count 0 ne{
+mark(Excessive data on estack at the end of the interpretation.)//error exec
+}if
+currentfile 1(%%EOF)/SubFileDecode filter
+flushfile
+cleardictstack
+}bind def
+/ResolveDict
+{dup{
+pop 1 index exch
+//DoNothing//ResolveD exec
+pop
+}forall
+pop
+}bind def
+/SetupPageView
+{
+//PDFR_DEBUG{
+(SetupPageView beg)=
+}if
+//DSC_OPDFREAD not{
+//GraphicState/InitialMatrix get setmatrix
+}if
+/MediaBox get aload pop
+3 index neg 3 index neg translate
+3 -1 roll sub 3 1 roll exch sub exch
+userdict/.HWMargins//knownget exec{
+aload pop
+}{
+currentpagedevice/.HWMargins//knownget exec{
+aload pop
+}{
+0 0 0 0
+}ifelse
+}ifelse
+currentpagedevice/PageSize get aload pop
+3 -1 roll sub 3 1 roll exch sub exch
+exch 3 index sub exch 3 index sub
+//SetPageSize{
+//PDFR_DEBUG{
+(Setting page size to )print 1 index//=only exec( )print dup =
+}if
+pop pop 3 index 3 index 2 copy
+currentglobal false setglobal 3 1 roll
+currentpagedevice dup/PageSize known{
+/PageSize get aload pop
+}{
+0 0
+}ifelse
+round cvi 2 index round cvi eq
+exch round cvi 3 index round cvi eq and
+{
+//PDFR_DEBUG{(PageSize matches request)== flush}if
+pop pop
+}{
+/MediaRequested where{
+//PDFR_DEBUG{(MediaRequested is true, check against new request)== flush}if
+/MediaRequested get aload pop
+round cvi 2 index round cvi eq
+exch round cvi 3 index round cvi eq and
+{
+//PDFR_DEBUG{(MediaRequested same as current request, ignore)== flush}if
+pop pop false
+}{
+//PDFR_DEBUG{(MediaRequested different to current request)== flush}if
+true
+}ifelse
+}{
+//PDFR_DEBUG{(No MediaRequested yet)== flush}if
+true
+}ifelse
+{
+//PDFR_DEBUG{(Setting pagesize)== flush}if
+2 array astore
+dup/MediaRequested exch def
+<< exch/PageSize exch >>setpagedevice
+}if
+}ifelse
+userdict/PDFR_InitialGS gstate put
+setglobal
+}if
+//RotatePages{
+2 copy gt 6 index 6 index gt ne{
+1 index 5 index le 1 index 5 index le and not
+}{
+false
+}ifelse
+}{
+false
+}ifelse
+{//CenterPages{
+//PDFR_DEBUG{
+(Rotating page, and then centering it)==
+}if
+90 rotate
+0 5 index neg translate
+5 index 1 index exch sub 2 div
+2 index 6 index sub 2 div neg
+translate
+}{
+//FitPages{
+1 index 5 index div 1 index 7 index div
+2 copy gt{
+exch
+}if
+pop dup scale
+}if
+90 rotate
+0 5 index neg translate
+}ifelse
+}{
+//CenterPages{
+//PDFR_DEBUG{
+(Ccentering page)==
+}if
+1 index 6 index sub 2 div
+1 index 6 index sub 2 div
+translate
+}{
+//FitPages{
+1 index 6 index div 1 index 6 index div
+2 copy gt{
+exch
+}if
+pop dup scale
+}if
+}ifelse
+}ifelse
+pop pop
+translate
+pop pop
+//PDFR_DEBUG{
+(SetupPageView end)=
+}if
+}bind def
+/PageContentsDaemon
+{
+//PDFR_DEBUG{
+(Executing PageContentsDaemon for )print 2 index =
+}if
+1 index exch/Context exch put
+dup/ImmediateExec true put
+dup/IsPage true put
+SetPageSize{dup/Context get//SetupPageView exec}if
+}bind def
+/FontFileDaemon
+{
+//PDFR_DEBUG{
+(Executing FontFileDaemon for )print 2 index =
+}if
+dup/FontFileType get
+2 index exch
+dup//ReadFontProcs exch//knownget exec{
+exch pop exec
+}{
+mark(FontFile reader for )2 index( isn't implemented yet.)//error exec
+}ifelse
+//PDFR_DEBUG{
+(FontFileDaemon end)=
+}if
+pop
+}bind def
+/FontDescriptorDaemon
+{
+//PDFR_DEBUG{
+(Executing FontDescriptorDaemon for )print 2 index =
+}if
+2 copy/FontResource exch put
+/Subtype get 1 index exch/FontFileType exch put
+}bind def
+/UnPDFEscape{
+dup dup length string cvs
+dup(#)search{
+{
+pop
+(16#--)2 index 0 2 getinterval
+1 index 3 2 getinterval copy pop
+cvi
+0 exch put
+0
+1 index 2 1 index length 2 sub getinterval
+3 copy putinterval
+length
+3 copy exch put
+getinterval
+(#)search not{
+pop exit
+}if
+}loop
+(\0)search pop exch pop exch pop
+cvn
+exch pop
+}{
+pop pop
+}ifelse
+}bind def
+/TypeDaemons<<
+/Page
+{//PDFR_DEBUG{
+(Recognized a page.)=
+}if
+dup/Contents//knownget exec{
+0 get//DoNothing exch
+[
+3 index//PageContentsDaemon/exec load
+]cvx
+//Register exec
+}{
+(fixme: page with no Contents won't be printed.)=
+}ifelse
+}bind
+/FontDescriptor
+{//PDFR_DEBUG{
+(Recognized a font descriptor.)=
+}if
+dup/FontName//knownget exec{
+1 index/FontName 3 -1 roll//UnPDFEscape exec put
+}if
+dup dup/FontFile known{/FontFile}{/FontFile2}ifelse
+//knownget exec{
+0 get//DoNothing exch
+[
+3 index//FontFileDaemon/exec load
+]cvx
+//Register exec
+}{
+(Font descriptor )print 1 index =only( has no FontFile.)=
+}ifelse
+}bind
+/Font
+{//PDFR_DEBUG{
+(Recognized a font resource.)=
+}if
+dup/BaseFont//knownget exec{
+//UnPDFEscape exec 2 copy/BaseFont exch put
+//PDFReader/RemoveFontNamePrefix get exec
+currentglobal exch
+dup/Font resourcestatus{
+pop pop
+//PDFReader/GetInstalledFont get exec pop
+}{
+pop
+}ifelse
+setglobal
+}if
+dup/FontDescriptor//knownget exec{
+0 get
+dup//IsRegistered exec{
+//PDFR_DEBUG{
+(already registered )print dup =
+}if
+pop
+}{
+//DoNothing exch
+[
+3 index//FontDescriptorDaemon/exec load
+]cvx
+//Register exec
+}ifelse
+}if
+}bind
+>>def
+/MakeStreamReader
+{dup
+[
+exch
+//PDFR_DEBUG{
+(Stream proc )
+/print load
+//PDFR_STREAM{
+(<)
+/print load
+}if
+}if
+1 dict dup/i -1 put
+/dup load
+/i
+/get load
+1
+/add load
+/dup load
+3
+1
+/roll load
+/i
+/exch load
+/put load
+//knownget
+/exec load
+/not load
+{()}
+/if load
+//PDFR_DEBUG{
+//PDFR_STREAM{
+/dup load
+/print load
+(>)
+/print load
+}if
+( end of stream proc.\n)
+/print load
+}if
+]cvx
+//PDFR_DEBUG{
+(Stream reader )print dup ==
+}if
+0()/SubFileDecode filter
+exch//AppendFilters exec
+}bind def
+/RunDelayedStream
+{
+//GraphicState/InitialTextMatrix get
+//InitialTextMatrixStack//PDFReader/InitialTextMatrixStackPointer get
+2 copy get null eq{
+2 copy currentglobal true setglobal matrix exch setglobal put
+}if
+get copy pop
+//PDFReader/InitialTextMatrixStackPointer 2 copy get 1 add put
+//MakeStreamReader exec
+mark exch
+cvx exec
+counttomark 0 ne{
+mark(Data left on ostack after a delayed stream execution.)//error exec
+}if
+cleartomark
+//PDFReader/InitialTextMatrixStackPointer 2 copy get 1 sub put
+//InitialTextMatrixStack//PDFReader/InitialTextMatrixStackPointer get get
+//GraphicState/InitialTextMatrix get
+copy pop
+}bind def
+//ReadFontProcs begin
+/Type1
+{//PDFR_DEBUG{
+(ReadFontProcs.Type1)=
+}if
+dup/.endobj_daemon[4 index//HookFont/exec load]cvx put
+dup/ImmediateExec true put
+/GlobalExec true put
+}bind def
+/MMType1//Type1 def
+/TrueType
+{//PDFR_DEBUG{
+(ReadFontProcs.TrueType)=
+}if
+dup/.endobj_daemon[4 index//HookFont/exec load]cvx put
+pop
+}bind def
+end
+/.opdloadttfontdict 50 dict def
+.opdloadttfontdict begin
+/maxstring 65400 def
+end
+/.InsertionSort
+{
+/CompareProc exch def
+/Array exch def
+1 1 Array length 1 sub
+{
+/Ix exch def
+/Value1 Array Ix get def
+/Jx Ix 1 sub def
+{
+Jx 0 lt{
+exit
+}if
+/Value2 Array Jx get def
+Value1 Value2 CompareProc{
+exit
+}if
+Array Jx 1 add Value2 put
+/Jx Jx 1 sub def
+}loop
+Array Jx 1 add Value1 put
+}for
+Array
+}bind def
+/putu16{
+3 copy -8 bitshift put
+exch 1 add exch 16#ff and put
+}bind def
+/putu32{
+3 copy -16 bitshift putu16
+exch 2 add exch 16#ffff and putu16
+}bind def
+/.readtable{
+dup dup 1 and add string
+dup 0 4 -1 roll getinterval
+3 -1 roll exch
+dup()ne{readstring}if pop pop
+}bind def
+/.readbigtable{
+dup maxstring lt{
+.readtable
+}{
+currentuserparams/VMReclaim get -2 vmreclaim
+[4 2 roll{
+dup maxstring le{exit}if
+1 index maxstring string readstring pop 3 1 roll maxstring sub
+}loop .readtable]
+exch vmreclaim
+}ifelse
+}bind def
+/ReadTTF
+{
+.opdloadttfontdict begin
+/TTFontFile exch def
+/TableDir TTFontFile 12 string readstring pop def
+/tables TTFontFile TableDir 4 getu16 16 mul string readstring pop def
+/tabarray tables length 16 idiv array def
+TableDir 0 4 getinterval(ttcf)eq{
+QUIET not{(Can't handle TrueType font Collections.)=}if
+/.loadttfonttables cvx/invalidfont signalerror
+}{
+0 16 tables length 1 sub{
+dup
+tables exch 16 getinterval
+exch 16 div cvi exch
+tabarray 3 1 roll put
+}for
+}ifelse
+tabarray{exch 8 getu32 exch 8 getu32 gt}.InsertionSort pop
+/Read TableDir length tables length add def
+/tabs[
+tabarray{
+dup 8 getu32
+Read sub
+dup 0 gt{
+dup string TTFontFile exch readstring pop pop
+Read add/Read exch def
+}{
+pop
+}ifelse
+12 getu32
+dup Read add
+/Read exch def
+TTFontFile exch .readbigtable
+}forall
+]def
+end
+}bind def
+/GetLocaType
+{
+0 1 tabarray length 1 sub{
+dup tabarray exch get
+0 4 getinterval(head)eq{
+tabs exch get
+50 gets16
+/LocaType exch def
+exit
+}{
+pop
+}ifelse
+}for
+}bind def
+/GetNumGlyphs
+{
+0 1 tabarray length 1 sub{
+dup tabarray exch get
+0 4 getinterval(maxp)eq{
+tabs exch get
+4 getu16
+/NumGlyphs exch def
+exit
+}{
+pop
+}ifelse
+}for
+}bind def
+/StringToLoca
+{
+/LocaIndex exch def
+/StringOffset 0 def
+{
+dup length StringOffset gt{
+dup
+LocaType 1 eq{
+StringOffset getu32
+LocaArray LocaIndex 3 -1 roll put
+/LocaIndex LocaIndex 1 add def
+/StringOffset StringOffset 4 add
+def
+}{
+StringOffset getu16 2 mul
+LocaArray length LocaIndex gt{
+LocaArray LocaIndex 3 -1 roll put
+}{
+pop
+}ifelse
+/LocaIndex LocaIndex 1 add def
+/StringOffset StringOffset 2 add
+def
+}ifelse
+}{
+pop
+LocaIndex
+exit
+}ifelse
+}loop
+}bind def
+/GetSortedLoca
+{
+NumGlyphs 1 add array/LocaArray exch def
+0 1 tabarray length 1 sub{
+dup tabarray exch get
+0 4 getinterval(loca)eq{
+tabs exch get
+exit
+}{
+pop
+}ifelse
+}for
+dup type/stringtype eq{
+0 StringToLoca pop
+}{
+0 exch
+{
+exch StringToLoca
+}forall
+pop
+}ifelse
+LocaArray{gt}.InsertionSort pop
+}bind def
+/GetWorkingString
+{
+WorkString 0
+GlyfArray GlyfStringIndex get
+putinterval
+/WorkBytes GlyfArray GlyfStringIndex get length def
+/GlyfStringIndex GlyfStringIndex 1 add def
+}bind def
+/GetWorkingBytes
+{
+/BytesToRead exch def
+WorkString 0 BytesToRead getinterval
+dup length string copy
+WorkString BytesToRead WorkBytes BytesToRead sub getinterval
+dup length string copy
+WorkString 0 3 -1 roll putinterval
+/WorkBytes WorkBytes BytesToRead sub def
+}bind def
+/GetGlyfBytes
+{
+/ToRead exch def
+WorkBytes 0 eq{
+GetWorkingString
+}if
+WorkBytes ToRead ge{
+ToRead string dup 0
+ToRead GetWorkingBytes putinterval
+}{
+ToRead string
+dup
+0
+WorkString 0 WorkBytes getinterval
+putinterval
+dup
+WorkBytes
+ToRead WorkBytes sub
+GetWorkingString
+GetWorkingBytes
+putinterval
+}ifelse
+}bind def
+/SplitGlyf
+{
+/GlyfArray exch def
+/DestArray GlyfArray length 2 mul array def
+/DestArrayIndex 0 def
+/LastLoca 0 def
+/NextLocaIndex 0 def
+/LastLocaIndex 0 def
+/GlyfStringIndex 0 def
+/WorkString maxstring string def
+/WorkBytes 0 def
+{
+LocaArray NextLocaIndex get
+LastLoca sub maxstring gt
+{
+LocaArray LastLocaIndex get LastLoca sub
+GetGlyfBytes
+DestArray DestArrayIndex 3 -1 roll put
+/DestArrayIndex DestArrayIndex 1 add def
+LocaArray LastLocaIndex get/LastLoca exch def
+}{
+/LastLocaIndex NextLocaIndex def
+/NextLocaIndex NextLocaIndex 1 add def
+NextLocaIndex NumGlyphs gt
+{
+WorkBytes
+GlyfStringIndex GlyfArray length lt{
+GlyfArray GlyfStringIndex get length
+add string dup
+0
+WorkString 0 WorkBytes getinterval
+putinterval
+dup
+WorkBytes
+GetWorkingString
+WorkString 0 WorkBytes getinterval
+putinterval
+}{
+pop
+WorkString 0 WorkBytes getinterval
+}ifelse
+dup length string copy
+DestArray DestArrayIndex 3 -1 roll put
+exit
+}if
+}ifelse
+}loop
+DestArray
+}bind def
+/ProcessTTData
+{
+.opdloadttfontdict begin
+0 1 tabarray length 1 sub{
+/ix exch def
+tabarray ix get
+12 getu32 dup maxstring le{
+dup 4 mod 0 ne{
+4 div cvi 1 add 4 mul string/newstring exch def
+/oldstring tabs ix get def
+newstring 0 oldstring putinterval
+0 1 newstring length oldstring length sub 1 sub{
+newstring exch oldstring length add 0 put
+}for
+tabs ix newstring put
+}{
+pop
+}ifelse
+}{
+dup 4 mod 0 ne{
+dup maxstring idiv maxstring mul sub
+4 idiv 1 add 4 mul string/newstring exch def
+tabs ix get
+dup length 1 sub dup/iy exch def get/oldstring exch def
+newstring 0 oldstring putinterval
+0 1 newstring length oldstring length sub 1 sub{
+newstring exch oldstring length add 0 put
+}for
+tabs ix get iy newstring put
+}{
+pop
+}ifelse
+}ifelse
+}for
+0 1 tabarray length 1 sub{
+dup tabarray exch get
+dup 12 getu32 maxstring gt{
+0 4 getinterval dup(glyf)eq{
+pop
+GetLocaType
+GetNumGlyphs
+GetSortedLoca
+dup tabs exch get
+SplitGlyf
+tabs 3 1 roll put
+}{
+(Warning, table )print print( > 64Kb\n)print
+pop
+}ifelse
+}{
+pop
+pop
+}ifelse
+}for
+end
+}bind def
+/Makesfnts
+{
+.opdloadttfontdict begin
+0
+tabs{
+dup type/stringtype eq{
+pop
+1 add
+}{
+{
+type/stringtype eq{
+1 add
+}if
+}forall
+}ifelse
+}forall
+1 add
+/TTOffset
+TableDir length
+tabarray length 16 mul add
+def
+0
+tabarray{
+exch dup 1 add
+3 1 roll
+dup
+tabs exch get
+dup type/stringtype eq{
+length
+2 index exch
+TTOffset
+dup 3 1 roll add
+/TTOffset exch def
+8 exch putu32
+exch tabarray 3 1 roll
+put
+}{
+0 exch
+{
+dup type/stringtype eq{
+length add
+}{
+pop
+}ifelse
+}forall
+2 index exch
+TTOffset
+dup 3 1 roll add
+/TTOffset exch def
+8 exch putu32
+exch tabarray 3 1 roll
+put
+}ifelse
+}forall
+pop
+array
+dup 0
+TableDir length
+tables length add
+string
+dup 0 TableDir putinterval
+dup 12 tables putinterval
+put
+dup
+/ix 1 def
+tabs{
+dup type/stringtype eq{
+ix exch
+put dup
+/ix ix 1 add def
+}{
+{
+dup type/stringtype eq{
+ix exch put dup
+/ix ix 1 add def
+}{
+pop
+}ifelse
+}forall
+}ifelse
+}forall
+pop
+end
+}bind def
+/MakeType42
+{
+//PDFR_DEBUG{
+(MakeType42 beg)=
+}if
+10 dict begin
+/FontName 1 index/FontName get def
+/FontType 42 def
+/FontMatrix[1 0 0 1 0 0]def
+/FontBBox 1 index/FontBBox get def
+dup/FontResource get
+dup/Encoding known{
+//PDFReader/ObtainEncoding get exec
+/Encoding get
+}{
+pop null
+}ifelse
+/PDFEncoding exch def
+/CharStrings 2 index//PDFReader/MakeTTCharStrings get exec def
+/sfnts 2 index//MakeStreamReader exec
+ReadTTF
+ProcessTTData
+Makesfnts
+def
+/Encoding StandardEncoding def
+/PaintType 0 def
+currentdict end
+//PDFR_DEBUG{
+(MakeType42 end)=
+}if
+}bind def
+/GetInstalledFont
+{
+dup//InstalledFonts exch knownget{
+exch pop
+}{
+dup findfont dup 3 1 roll
+//InstalledFonts 3 1 roll put
+}ifelse
+}bind def
+/RemoveFontNamePrefix
+{//=string cvs true
+0 1 5{
+2 index exch get//IsUpper exec not{
+pop false exit
+}if
+}for
+{(+)search{
+pop pop
+}if
+}if
+cvn
+}bind def
+/CheckFont
+{dup/Type get/Font ne{
+mark(Resource )3 index( must have /Type/Font .)//error exec
+}if
+}bind def
+/CheckEncoding
+{dup type/nametype ne{
+dup/Type get/Encoding ne{
+mark(Resource )3 index( must have /Type/Encoding .)//error exec
+}if
+}if
+}bind def
+/ObtainEncoding
+{dup/Encoding known{
+dup dup/Encoding//CheckEncoding//ResolveD exec
+dup type dup/arraytype eq exch/packedarraytype eq or{
+pop pop
+}{
+dup type/nametype eq{
+/Encoding findresource
+}{
+dup/BaseEncoding//knownget exec not{
+/StandardEncoding
+}if
+/Encoding findresource
+exch
+/Differences//knownget exec{
+exch dup length array copy exch
+0 exch
+{
+dup type/integertype eq{
+exch pop
+}{
+3 copy put pop
+1 add
+}ifelse
+}forall
+pop
+}if
+}ifelse
+/Encoding exch put
+}ifelse
+}{
+dup/Encoding/StandardEncoding/Encoding findresource put
+}ifelse
+}bind def
+/ObtainMetrics
+{dup/Widths//knownget exec{
+1 index/Encoding get
+256 dict
+3 index/Subtype get/TrueType eq{
+1000
+}{
+1
+}ifelse
+4 index/MissingWidth//knownget exec not{
+0
+}if
+5 index/FirstChar//knownget exec not{
+0
+}if
+6 5 roll
+dup 0 exch 1 exch length 1 sub{
+2 copy get
+exch 3 index add
+7 index exch get
+dup dup null ne exch/.notdef ne and{
+6 index 3 1 roll exch
+6 index div
+3 copy pop//knownget exec{
+0 eq
+}{
+true
+}ifelse
+{put
+}{
+pop pop pop
+}ifelse
+}{
+pop pop
+}ifelse
+}for
+pop pop pop pop exch pop
+1 index exch/Metrics exch put
+}{
+dup/MissingWidth//knownget exec{
+256 dict
+2 index/Encoding get{
+dup null ne{
+3 copy 3 2 roll put
+}if
+pop
+}forall
+exch pop
+1 index exch/Metrics exch put
+}if
+}ifelse
+}bind def
+/NotDef
+{
+FontMatrix aload pop pop pop exch pop exch pop
+1 exch div exch
+1 exch div exch
+1 index 0 setcharwidth
+0 setlinewidth
+0 0 moveto
+2 copy rlineto
+1 index 0 rlineto
+neg exch neg exch rlineto
+closepath stroke
+}bind def
+/SaveResourcesToStack
+{
+[
+//PDFReader/OldResources known{
+//PDFReader/OldResources get
+}{
+null
+}ifelse
+//PDFReader/CurrentObject get/Context get/Resources get
+]
+//PDFReader/OldResources 3 -1 roll put
+}bind def
+/RestoreResourcesFromStack
+{
+//PDFReader/OldResources get dup
+0 get//PDFReader/OldResources 3 -1 roll put
+1 get//PDFReader/CurrentObject get/Context get/Resources 3 -1 roll put
+}bind def
+/BuildChar
+{//PDFR_DEBUG{
+(BuildChar )print dup//=only exec( )print
+}if
+exch begin
+Encoding exch get
+//PDFR_DEBUG{
+dup =
+}if
+dup null eq{
+pop//NotDef exec
+}
+{
+CharProcs exch//knownget exec
+{
+currentfont/Font get/Resources//knownget exec{
+exec
+SaveResourcesToStack
+//PDFReader/CurrentObject get/Context get
+/Resources 3 -1 roll put
+//RunDelayedStream exec
+RestoreResourcesFromStack
+}{
+//RunDelayedStream exec
+}ifelse
+}
+{
+//NotDef exec
+}ifelse
+}ifelse
+end
+}bind def
+/printdict
+{(<<)=
+{exch = ==}forall
+(>>)=
+}bind def
+/printfont
+{
+dup{
+exch dup =
+dup/Encoding eq{
+pop =
+}{
+dup/FontInfo eq exch/Private eq or{
+//printdict exec
+}{
+==
+}ifelse
+}ifelse
+}forall
+}bind def
+/ScaleMetrics
+{1 index{
+2 index div
+3 index
+3 1 roll put
+}forall
+pop
+}bind def
+/ResolveAndSetFontAux
+{exch dup
+//PDFReader/CurrentObject get/Context get/Resources get
+/Font//DoNothing//ResolveD exec
+exch//CheckFont//ResolveD exec
+dup/Font//knownget exec{
+exch pop exch pop
+}{
+{
+dup/Subtype get dup dup/Type1 eq exch/TrueType eq or exch/MMType1 eq or{
+exch pop
+dup/BaseFont get
+//RemoveFontNamePrefix exec
+//PDFR_DEBUG{
+(Font )print dup =
+}if
+1 index/FontDescriptor known{
+//PDFR_DEBUG{
+(Font from a font descriptor.)=
+}if
+1 index
+/FontDescriptor//DoNothing//ResolveD exec
+/Font//knownget exec{
+exch pop
+}{
+//PDFR_DEBUG{
+(Font descriptor has no Font resolved.)=
+}if
+//GetInstalledFont exec
+}ifelse
+}{
+//GetInstalledFont exec
+}ifelse
+exch
+dup/Encoding known not{
+1 index/Encoding get 1 index exch/Encoding exch put
+}if
+//ObtainEncoding exec
+//ObtainMetrics exec
+exch
+dup length dict copy
+dup 2 index/Encoding get
+/Encoding exch put
+1 index/Metrics//knownget exec{
+2 index/Subtype get/TrueType ne{
+1 index/FontMatrix get 0 get
+dup 0 eq{
+pop
+1 index/FontMatrix get 1 get
+dup 0 eq{pop 1}if
+}if
+0.001 div
+//ScaleMetrics exec
+}{
+1 index/sfnts known not{
+1 index/FontMatrix get 0 get
+dup 0 eq{
+pop
+1 index/FontMatrix get 1 get
+dup 0 eq{pop 1}if
+}if
+//ScaleMetrics exec
+}if
+}ifelse
+1 index exch/Metrics exch put
+}if
+1 index/BaseFont get
+exch
+dup/FID undef
+dup/UniqueID undef
+definefont
+dup 3 1 roll
+/Font exch put
+exit
+}if
+dup/Subtype get/Type3 eq{
+//ObtainEncoding exec
+2 copy exch/FontName exch put
+dup/CharProcs get//ResolveDict exec
+dup/FontType 3 put
+dup/BuildChar//BuildChar put
+dup dup/Font exch put
+dup 3 1 roll
+definefont
+2 copy ne{
+2 copy/Font exch put
+}if
+exch pop
+exit
+}if
+dup/Subtype get/Type0 eq{
+}if
+dup/Subtype get/CIDFontType0 eq{
+}if
+dup/Subtype get/CIDFontType2 eq{
+}if
+mark(Unknown font type )2 index/Subtype get//error exec
+}loop
+}ifelse
+exch scalefont setfont
+}bind def
+/ResolveAndSetFont
+{
+//ResolveAndSetFontAux exec
+}bind def
+/.knownget
+{2 copy known{
+get true
+}{
+pop pop false
+}ifelse
+}bind def
+/.min
+{2 copy lt{
+exch
+}if
+pop
+}bind def
+/.max
+{2 copy gt{
+exch
+}if
+pop
+}bind def
+/.dicttomark
+{>>
+}bind def
+/getu16{
+2 copy get 8 bitshift 3 1 roll 1 add get add
+}bind def
+/gets16{
+getu16 16#8000 xor 16#8000 sub
+}bind def
+/getu32{
+2 copy getu16 16 bitshift 3 1 roll 2 add getu16 add
+}bind def
+/gets32{
+2 copy gets16 16 bitshift 3 1 roll 2 add getu16 add
+}bind def
+/cmapformats mark
+0{
+6 256 getinterval{}forall 256 packedarray
+}bind
+2{
+/sHK_sz 2 def
+/sH_sz 8 def
+dup 2 getu16/cmapf2_tblen exch def
+dup 4 getu16/cmapf2_lang exch def
+dup 6 256 sHK_sz mul getinterval/sHKs exch def
+0
+0 1 255{
+sHKs exch
+2 mul getu16
+1 index
+1 index
+lt{exch}if pop
+}for
+/sH_len exch def
+dup 6 256 sHK_sz mul add
+cmapf2_tblen 1 index sub getinterval
+/sH_gIA exch def
+/cmapf2_glyph_array 65535 array def
+/.cmapf2_putGID{
+/cmapf2_ch cmapf2_ch_hi 8 bitshift cmapf2_ch_lo add def
+firstCode cmapf2_ch_lo le
+cmapf2_ch_lo firstCode entryCount add lt
+and{
+sH_offset idRangeOffset add
+cmapf2_ch_lo firstCode sub 2 mul
+add 6 add
+sH_gIA exch getu16
+dup 0 gt{
+idDelta add
+cmapf2_glyph_array exch cmapf2_ch exch put
+}{
+pop
+}ifelse
+}{
+}ifelse
+}def
+16#00 1 16#ff{
+/cmapf2_ch_hi exch def
+sHKs cmapf2_ch_hi sHK_sz mul getu16
+/sH_offset exch def
+sH_gIA sH_offset sH_sz getinterval
+dup 0 getu16/firstCode exch def
+dup 2 getu16/entryCount exch def
+dup 4 gets16/idDelta exch def
+dup 6 getu16/idRangeOffset exch def
+pop
+sH_offset 0 eq{
+/cmapf2_ch_lo cmapf2_ch_hi def
+/cmapf2_ch_hi 0 def
+.cmapf2_putGID
+}{
+16#00 1 16#ff{
+/cmapf2_ch_lo exch def
+.cmapf2_putGID
+}for
+}ifelse
+}for
+pop
+0 1 cmapf2_glyph_array length 1 sub{
+dup cmapf2_glyph_array exch get
+null eq{cmapf2_glyph_array exch 0 put}{pop}ifelse
+}for
+cmapf2_glyph_array
+}bind
+4{
+/etab exch def
+/nseg2 etab 6 getu16 def
+14/endc etab 2 index nseg2 getinterval def
+2 add
+nseg2 add/startc etab 2 index nseg2 getinterval def
+nseg2 add/iddelta etab 2 index nseg2 getinterval def
+nseg2 add/idroff etab 2 index nseg2 getinterval def
+pop
+/firstcode startc 0 getu16 16#ff00 and dup 16#f000 ne{pop 0}if def
+/lastcode firstcode def
+/striptopbyte false def
+/putglyph{
+glyphs code 3 -1 roll put/code code 1 add def
+}bind def
+/numcodes 0 def/glyphs 0 0 2 nseg2 3 sub{
+/i2 exch def
+/scode startc i2 getu16 def
+/ecode endc i2 getu16 def
+ecode lastcode gt{
+/lastcode ecode def
+}if
+}for pop
+firstcode 16#f000 ge lastcode firstcode sub 255 le and{
+lastcode 255 and
+/striptopbyte true def
+}{
+lastcode
+}ifelse
+1 add
+array def
+glyphs length 1024 ge{
+.array1024z 0 1024 glyphs length 1023 sub{glyphs exch 2 index putinterval}for
+glyphs dup length 1024 sub 3 -1 roll
+putinterval
+}{
+0 1 glyphs length 1 sub{glyphs exch 0 put}for
+}ifelse
+/numcodes 0 def/code 0 def
+0 2 nseg2 3 sub{
+/i2 exch def
+/scode startc i2 getu16 def
+/ecode endc i2 getu16 def
+numcodes scode firstcode sub
+exch sub 0 .max dup/code exch code exch add def
+ecode scode sub 1 add add numcodes add/numcodes exch def
+/delta iddelta i2 gets16 def
+TTFDEBUG{
+(scode=)print scode =only
+( ecode=)print ecode =only
+( delta=)print delta =only
+( droff=)print idroff i2 getu16 =
+}if
+idroff i2 getu16 dup 0 eq{
+pop scode delta add 65535 and 1 ecode delta add 65535 and
+striptopbyte{
+/code scode 255 and def
+}{
+/code scode def
+}ifelse
+{putglyph}for
+}{
+/gloff exch 14 nseg2 3 mul add 2 add i2 add add def
+striptopbyte{
+/code scode 255 and def
+}{
+/code scode def
+}ifelse
+0 1 ecode scode sub{
+2 mul gloff add etab exch getu16
+dup 0 ne{delta add 65535 and}if putglyph
+}for
+}ifelse
+}for glyphs/glyphs null def
+}bind
+6{
+dup 6 getu16/firstcode exch def dup 8 getu16/ng exch def
+firstcode ng add array
+0 1 firstcode 1 sub{2 copy 0 put pop}for
+dup firstcode ng getinterval
+0 1 ng 1 sub{
+dup 2 mul 10 add 4 index exch getu16 3 copy put pop pop
+}for pop exch pop
+}bind
+.dicttomark readonly def
+/cmaparray{
+dup 0 getu16 cmapformats exch .knownget{
+TTFDEBUG{
+(cmap: format )print 1 index 0 getu16 = flush
+}if exec
+}{
+(Can't handle format )print 0 getu16 = flush
+0 1 255{}for 256 packedarray
+}ifelse
+TTFDEBUG{
+(cmap: length=)print dup length = dup ==
+}if
+}bind def
+/postremap mark
+/Cdot/Cdotaccent
+/Edot/Edotaccent
+/Eoverdot/Edotaccent
+/Gdot/Gdotaccent
+/Ldot/Ldotaccent
+/Zdot/Zdotaccent
+/cdot/cdotaccent
+/edot/edotaccent
+/eoverdot/edotaccent
+/gdot/gdotaccent
+/ldot/ldotaccent
+/zdot/zdotaccent
+.dicttomark readonly def
+/get_from_stringarray
+{1 index type/stringtype eq{
+get
+}{
+exch{
+2 copy length ge{
+length sub
+}{
+exch get exit
+}ifelse
+}forall
+}ifelse
+}bind def
+/getinterval_from_stringarray
+{
+2 index type/stringtype eq{
+getinterval
+}{
+string exch 0
+4 3 roll{
+dup length
+dup 4 index lt{
+3 index exch sub
+exch pop 3 1 roll exch pop
+}{
+dup 3 1 roll
+4 index sub
+5 index length 4 index sub
+2 copy gt{exch}if pop
+dup 3 1 roll
+5 index exch getinterval
+5 index 4 index 3 index
+getinterval
+copy pop
+exch pop add exch pop 0 exch
+dup 3 index length ge{exit}if
+}ifelse
+}forall
+pop pop
+}ifelse
+}bind def
+/string_array_size
+{dup type/stringtype eq{
+length
+}{
+0 exch{length add}forall
+}ifelse
+}bind def
+/postformats mark
+16#00010000{
+pop MacGlyphEncoding
+}
+16#00020000{
+dup dup type/arraytype eq{0 get}if length 36 lt{
+TTFDEBUG{(post format 2.0 invalid.)= flush}if
+pop[]
+}{
+/postglyphs exch def
+/post_first postglyphs dup type/arraytype eq{0 get}if def
+post_first 32 getu16/numglyphs exch def
+/glyphnames numglyphs 2 mul 34 add def
+/postpos glyphnames def
+/total_length postglyphs//string_array_size exec def
+numglyphs array 0 1 numglyphs 1 sub{
+postpos total_length ge{
+1 numglyphs 1 sub{1 index exch/.notdef put}for
+exit
+}if
+postglyphs postpos//get_from_stringarray exec
+postglyphs postpos 1 add 2 index//getinterval_from_stringarray exec cvn
+exch postpos add 1 add/postpos exch def
+2 index 3 1 roll
+put
+}for
+/postnames exch def
+numglyphs array 0 1 numglyphs 1 sub{
+dup 2 mul 34 add postglyphs exch 2//getinterval_from_stringarray exec
+dup 0 get 8 bitshift exch 1 get add dup 258 lt{
+MacGlyphEncoding exch get
+}{
+dup 32768 ge{
+pop/.notdef
+}{
+258 sub dup postnames length ge{
+TTFDEBUG{( *** warning: glyph index past end of 'post' table)= flush}if
+pop
+exit
+}if
+postnames exch get
+postremap 1 index .knownget{exch pop}if
+}ifelse
+}ifelse
+2 index 3 1 roll put
+}for
+}
+ifelse
+}bind
+16#00030000{
+pop[]
+}bind
+.dicttomark readonly def
+/first_post_string
+{
+post dup type/arraytype eq{0 get}if
+}bind def
+/.getpost{
+/glyphencoding post null eq{
+TTFDEBUG{(post missing)= flush}if[]
+}{
+postformats first_post_string 0 getu32 .knownget{
+TTFDEBUG{
+(post: format )print
+first_post_string
+dup 0 getu16 =only(,)print 2 getu16 = flush
+}if
+post exch exec
+}{
+TTFDEBUG{(post: unknown format )print post 0 getu32 = flush}if[]
+}ifelse
+}ifelse def
+}bind def
+/MacRomanEncoding[
+StandardEncoding 0 39 getinterval aload pop
+/quotesingle
+StandardEncoding 40 56 getinterval aload pop
+/grave
+StandardEncoding 97 31 getinterval aload pop
+/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute
+/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave
+/ecircumflex/edieresis/iacute/igrave
+/icircumflex/idieresis/ntilde/oacute
+/ograve/ocircumflex/odieresis/otilde
+/uacute/ugrave/ucircumflex/udieresis
+/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls
+/registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash
+/.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef
+/.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash
+/questiondown/exclamdown/logicalnot/.notdef
+/florin/.notdef/.notdef/guillemotleft
+/guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe
+/endash/emdash/quotedblleft/quotedblright
+/quoteleft/quoteright/divide/.notdef
+/ydieresis/Ydieresis/fraction/currency
+/guilsinglleft/guilsinglright/fi/fl
+/daggerdbl/periodcentered/quotesinglbase/quotedblbase
+/perthousand/Acircumflex/Ecircumflex/Aacute
+/Edieresis/Egrave/Iacute/Icircumflex
+/Idieresis/Igrave/Oacute/Ocircumflex
+/.notdef/Ograve/Uacute/Ucircumflex
+/Ugrave/dotlessi/circumflex/tilde
+/macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron
+]/Encoding defineresource pop
+/TTParser<<
+/Pos 0
+/post null
+>>def
+/readu8
+{read not{
+mark(Insufficient data in the stream.)//error exec
+}if
+}bind def
+/readu16
+{dup//readu8 exec 8 bitshift exch//readu8 exec or
+}bind def
+/reads16
+{//readu16 exec 16#8000 xor 16#8000 sub
+}bind def
+/readu32
+{dup//readu16 exec 16 bitshift exch//readu16 exec or
+}bind def
+/reads32
+{dup//reads16 exec 16 bitshift exch//readu16 exec or
+}bind def
+/SkipToPosition
+{dup//TTParser/Pos get
+exch//TTParser exch/Pos exch put
+sub
+//PDFR_DEBUG{
+(Skipping )print dup//=only exec( bytes.)=
+}if
+dup 0 eq{
+pop pop
+}{
+dup 3 1 roll
+()/SubFileDecode filter
+exch
+{1 index//BlockBuffer readstring pop length
+dup 0 eq{pop exch pop exit}if
+sub
+}loop
+0 ne{
+mark(Insufficient data in the stream for SkipToPosition.)//error exec
+}if
+}ifelse
+}bind def
+/TagBuffer 4 string def
+/ParseTTTableDirectory
+{//PDFR_DEBUG{
+(ParseTTTableDirectory beg)=
+}if
+15 dict begin
+dup//readu32 exec 16#00010000 ne{
+mark(Unknown True Type version.)//error exec
+}if
+dup//readu16 exec/NumTables exch def
+dup//readu16 exec/SearchRange exch def
+dup//readu16 exec/EntrySelector exch def
+dup//readu16 exec/RangeShift exch def
+//PDFR_DEBUG{
+(NumTables = )print NumTables =
+}if
+NumTables{
+dup//TagBuffer readstring not{
+mark(Could not read TT tag.)//error exec
+}if
+cvn
+[2 index//readu32 exec pop
+2 index//readu32 exec
+3 index//readu32 exec
+]
+//PDFR_DEBUG{
+2 copy exch//=only exec( )print ==
+}if
+def
+}repeat
+pop
+//TTParser/Pos 12 NumTables 16 mul add put
+currentdict end
+//PDFR_DEBUG{
+(ParseTTTableDirectory end)=
+}if
+}bind def
+/ParseTTcmap
+{//PDFR_DEBUG{
+(ParseTTcmap beg)=
+}if
+/cmap get aload pop
+3 1 roll
+7 dict begin
+//PDFR_DEBUG{
+(Current position = )print//TTParser/Pos get =
+(cmap position = )print dup =
+}if
+1 index exch//SkipToPosition exec
+//TTParser/Pos get/TablePos exch def
+dup//readu16 exec pop
+dup//readu16 exec/NumEncodings exch def
+//PDFR_DEBUG{
+(NumEncodings = )print NumEncodings =
+}if
+null
+NumEncodings{
+1 index//readu32 exec
+2 index//readu32 exec
+3 array dup 3 2 roll 0 exch put
+2 index null ne{
+dup 0 get 3 index 0 get sub
+3 index exch 1 exch put
+}if
+dup 4 3 roll pop 3 1 roll
+def
+}repeat
+dup 0 get
+4 3 roll exch sub
+1 exch put
+//PDFR_DEBUG{
+currentdict{
+exch dup type/integertype eq{
+//PrintHex exec( )print ==
+}{
+pop pop
+}ifelse
+}forall
+}if
+4 NumEncodings 8 mul add/HeaderLength exch def
+//TTParser/Pos//TTParser/Pos get HeaderLength add put
+0
+NumEncodings{
+16#7FFFFFF null
+currentdict{
+1 index type/integertype eq{
+exch pop dup 0 get
+dup 5 index gt{
+dup 4 index lt{
+4 1 roll
+exch pop exch pop
+}{
+pop pop
+}ifelse
+}{
+pop pop
+}ifelse
+}{
+pop pop
+}ifelse
+}forall
+//PDFR_DEBUG{
+(Obtaining subtable for )print dup ==
+}if
+3 2 roll pop
+3 copy pop
+TablePos add//SkipToPosition exec
+3 copy exch pop 1 get
+//TTParser/Pos//TTParser/Pos get 3 index add put
+string
+readstring not{
+mark(Can't read a cmap subtable.)//error exec
+}if
+2 exch put
+}repeat
+pop pop
+currentdict end
+//PDFR_DEBUG{
+(ParseTTcmap end)=
+}if
+}bind def
+/GetTTEncoding
+{//PDFR_DEBUG{
+(GetTTEncoding beg)=
+}if
+get
+exch pop
+2 get
+10 dict begin
+/TTFDEBUG//PDFR_DEBUG def
+//cmaparray exec
+end
+//PDFR_DEBUG{
+(GetTTEncoding end)=
+dup ==
+}if
+}bind def
+/InverseEncoding
+{
+256 dict begin
+dup length 1 sub -1 0{
+2 copy get
+exch
+1 index currentdict exch//knownget exec{
+dup type/arraytype eq{
+aload length 1 add array astore
+}{
+2 array astore
+}ifelse
+}if
+def
+}for
+pop
+currentdict end
+}bind def
+/GetMacRomanEncodingInverse
+{//PDFReader/MacRomanEncodingInverse get
+dup null eq{
+pop
+MacRomanEncoding//InverseEncoding exec
+dup//PDFReader exch/MacRomanEncodingInverse exch put
+}if
+}bind def
+/PutCharStringSingle
+{
+dup 3 index length lt{
+2 index exch get
+dup 0 ne{
+def
+}{
+pop pop
+}ifelse
+}{
+pop pop
+}ifelse
+}bind def
+/PutCharString
+{1 index type/nametype ne{
+mark(Bad charstring name)//error exec
+}if
+dup type/arraytype eq{
+{
+3 copy//PutCharStringSingle exec
+pop pop
+}forall
+pop
+}{
+//PutCharStringSingle exec
+}ifelse
+}bind def
+/ComposeCharStrings
+{
+//PDFR_DEBUG{
+(ComposeCharStrings beg)=
+}if
+1 index length 1 add dict begin
+/.notdef 0 def
+exch
+//TTParser/post get
+dup null ne{
+exch
+1 index length 1 sub -1 0{
+dup 3 index exch get exch
+dup 0 eq 2 index/.notdef eq or{
+pop pop
+}{
+def
+}ifelse
+}for
+}if
+exch pop exch
+{
+//PutCharString exec
+}forall
+pop
+currentdict end
+//PDFR_DEBUG{
+(ComposeCharStrings end)=
+}if
+}bind def
+/ParseTTpost
+{
+//PDFR_DEBUG{
+(ParseTTpost beg)=
+}if
+/post get aload pop
+3 1 roll
+//PDFR_DEBUG{
+(Current position = )print//TTParser/Pos get =
+(post position = )print dup =
+}if
+1 index exch//SkipToPosition exec
+//TTParser/Pos//TTParser/Pos get 4 index add put
+exch dup 65535 le{
+string
+readstring not{
+mark(Insufficient data in the stream for ParseTTpost.)//error exec
+}if
+}{
+[3 1 roll
+dup 16384 div floor cvi
+exch 1 index 16384 mul
+sub exch
+1 sub 0 1 3 -1 roll
+{
+1 add index
+16384 string readstring not{
+mark(Insufficient data in the stream for ParseTTpost.)//error exec
+}if
+}for
+counttomark -2 roll
+string readstring not{
+mark(Insufficient data in the stream for ParseTTpost.)//error exec
+}if
+]
+}ifelse
+1 dict begin
+/post exch def
+//.getpost exec
+//TTParser/post glyphencoding put
+//PDFR_DEBUG{
+(ParseTTpost end)=
+glyphencoding ==
+}if
+end
+}bind def
+/MakeTTCharStrings
+{//MakeStreamReader exec
+dup dup//ParseTTTableDirectory exec
+//TTParser/post null put
+dup/post//knownget exec{
+0 get
+1 index/cmap get 0 get
+lt{
+2 copy//ParseTTpost exec
+//ParseTTcmap exec
+}{
+2 copy//ParseTTcmap exec
+3 1 roll
+//ParseTTpost exec
+}ifelse
+}{
+//ParseTTcmap exec
+}ifelse
+{
+dup 16#00030001 known{
+//PDFR_DEBUG{
+(Using the TT cmap encoding for Windows Unicode.)=
+}if
+16#00030001//GetTTEncoding exec
+AdobeGlyphList//ComposeCharStrings exec
+exit
+}if
+dup 16#00010000 known{
+//PDFR_DEBUG{
+(Using the TT cmap encoding for Macintosh Roman.)=
+}if
+16#00010000//GetTTEncoding exec
+PDFEncoding dup null eq{
+pop//GetMacRomanEncodingInverse exec
+}{
+//InverseEncoding exec
+}ifelse
+//ComposeCharStrings exec
+exit
+}if
+dup 16#00030000 known{
+//PDFR_DEBUG{
+(Using the TT cmap encoding 3.0 - not sure why Ghostscript writes it since old versions.)=
+}if
+16#00030000//GetTTEncoding exec
+PDFEncoding dup null eq{
+pop//GetMacRomanEncodingInverse exec
+}{
+//InverseEncoding exec
+}ifelse
+//ComposeCharStrings exec
+exit
+}if
+mark(True Type cmap has no useful encodings.)//error exec
+}loop
+//PDFR_DEBUG{
+(CharStrings <<)=
+dup{
+exch
+dup type/nametype eq{
+//=only exec
+}{
+==
+}ifelse
+( )print ==
+}forall
+(>>)=
+}if
+}bind def
+/ScaleVal
+{
+aload pop
+1 index sub
+3 2 roll mul add
+}bind def
+/ScaleArg
+{
+aload pop
+1 index sub
+3 1 roll
+sub exch div
+}bind def
+/ScaleArgN
+{
+dup length 2 sub -2 0{
+2
+2 index 3 1 roll getinterval
+3 2 roll
+exch//ScaleArg exec
+1 index length 2 idiv 1 add 1 roll
+}for
+pop
+}bind def
+/ComputeFunction_10
+{
+//PDFR_DEBUG{
+(ComputeFunction_10 beg )print 1 index//=only exec( stack=)print count =
+}if
+exch
+dup 1 eq{
+pop dup length 1 sub get
+}{
+1 index length 1 sub mul
+dup dup floor sub
+dup 0 eq{
+pop cvi get
+}{
+3 1 roll floor cvi
+2 getinterval
+aload pop
+2 index mul 3 2 roll 1 exch sub 3 2 roll mul add
+}ifelse
+}ifelse
+//PDFR_DEBUG{
+(ComputeFunction_10 end )print dup//=only exec( stack=)print count =
+}if
+}bind def
+/ComputeFunction_n0
+{
+//PDFR_DEBUG{
+(ComputeFunction_n0 beg N=)print dup//=only exec( stack=)print count =
+}if
+dup 0 eq{
+pop
+}{
+dup 2 add -1 roll
+dup 3 index length 1 sub ge{
+pop 1 sub
+exch dup length 1 sub get exch
+//PDFReader/ComputeFunction_n0 get exec
+}{
+dup floor cvi dup
+4 index exch get
+3 index dup
+5 add copy
+6 2 roll
+pop pop pop pop
+1 sub
+//PDFReader/ComputeFunction_n0 get exec
+3 2 roll pop
+exch
+4 3 roll exch
+4 add 2 roll 1 add
+3 2 roll exch get
+exch 1 sub
+//PDFReader/ComputeFunction_n0 get exec
+1 index mul
+3 1 roll
+1 exch sub mul add
+}ifelse
+}ifelse
+//PDFR_DEBUG{
+(ComputeFunction_n0 end )print dup//=only exec( stack=)print count =
+}if
+}bind def
+/FunctionToProc_x01
+{
+dup/Domain get exch
+dup/Data get 0 get exch
+/Size get length
+[4 1 roll
+//PDFR_DEBUG{
+{(function beg, stack =)print count//=only exec(\n)print}/exec load
+5 2 roll
+}if
+dup 1 gt{
+{mark exch
+3 add 2 roll
+//ScaleArgN exec
+counttomark dup
+3 add -2 roll
+pop exch
+//ComputeFunction_n0 exec
+}/exec load
+}{
+pop
+3 1/roll load//ScaleArg/exec load
+/exch load
+//ComputeFunction_10/exec load
+}ifelse
+//PDFR_DEBUG{
+(function end, stack =)/print load/count load//=only/exec load(\n)/print load
+}if
+]cvx
+//PDFR_DEBUG{
+(Made a procedure for the 1-result function :)=
+dup ==
+}if
+}bind def
+/FunctionProcDebugBeg
+{(FunctionProcDebugBeg )print count =
+}bind def
+/FunctionProcDebugEnd
+{(FunctionProcDebugEnd )print count =
+}bind def
+/FunctionToProc_x0n
+{
+PDFR_DEBUG{
+(FunctionToProc_x0n beg m=)print dup =
+}if
+1 index/Size get length exch
+dup 7 mul 2 add array
+PDFR_DEBUG{
+dup 0//FunctionProcDebugBeg put
+}{
+dup 0//DoNothing put
+}ifelse
+dup 1/exec load put
+dup 2 5 index/Domain get put
+2 index 1 eq{
+dup 3//ScaleArg put
+}{
+dup 3//ScaleArgN put
+}ifelse
+dup 4/exec load put
+1 index 1 sub 0 exch 1 exch{
+dup 7 mul 5 add
+1 index 4 index 1 sub ne{
+dup 3 index exch 6 index put 1 add
+dup 3 index exch/copy load put 1 add
+}if
+[
+6 index/Data get 3 index get
+6 index 1 eq{
+//ComputeFunction_10/exec load
+}{
+6 index
+//ComputeFunction_n0/exec load
+}ifelse
+]cvx
+3 index exch 2 index exch put 1 add
+2 index 1 index/exec load put 1 add
+1 index 4 index 1 sub ne{
+2 index 1 index 6 index 1 add put 1 add
+2 index 1 index 1 put 1 add
+2 index 1 index/roll load put
+}if
+pop pop
+}for
+PDFR_DEBUG{
+dup dup length 2 sub//FunctionProcDebugEnd put
+}{
+dup dup length 2 sub//DoNothing put
+}ifelse
+dup dup length 1 sub/exec load put
+cvx exch pop exch pop exch pop
+//PDFR_DEBUG{
+(Made a procedure for the n-argument function :)=
+dup ==
+}if
+PDFR_DEBUG{
+(FunctionToProc_x0n end)=
+}if
+}bind def
+/MakeTableRec
+{
+0
+exec
+}bind def
+/MakeTable
+{//PDFR_DEBUG{
+(MakeTable beg )print count =
+}if
+1 index/Size get exch
+1 sub dup
+3 1 roll
+get
+array
+1 index 0 eq{
+exch pop exch pop
+}{
+dup length 1 sub -1 0{
+3 index 3 index//MakeTableRec exec
+2 index 3 1 roll put
+}for
+exch pop exch pop
+}ifelse
+//PDFR_DEBUG{
+(MakeTable end )print count =
+}if
+}bind def
+//MakeTableRec 0//MakeTable put
+/StoreSample
+{
+1 sub
+dup 0 eq{
+pop
+}{
+-1 1{
+I exch get get
+}for
+}ifelse
+I 0 get 3 2 roll put
+}bind def
+/ReadSample32
+{
+4{
+File read not{
+mark(Insufficient data for function.)//error exec
+}if
+}repeat
+pop
+3 1 roll exch
+256 mul add 256 mul add
+//1_24_bitshift_1_sub div
+}bind def
+/ReadSample
+{
+Buffer BitsLeft BitsPerSample
+{2 copy ge{
+exit
+}if
+3 1 roll
+8 add 3 1 roll
+256 mul File read not{
+mark(Insufficient data for function.)//error exec
+}if
+add
+3 1 roll
+}loop
+sub dup
+2 index exch
+neg bitshift
+2 copy exch bitshift
+4 3 roll exch sub
+/Buffer exch def
+exch/BitsLeft exch def
+Div div
+}bind def
+/ReadSamplesRec
+{0
+exec
+}bind def
+/ReadSamples
+{
+//PDFR_DEBUG{
+(ReadSamples beg )print count =
+}if
+dup 1 eq{
+pop
+0 1 Size 0 get 1 sub{
+I exch 0 exch put
+0 1 M 1 sub{
+dup Range exch 2 mul 2 getinterval
+//PDFR_DEBUG{
+(Will read a sample ... )print
+}if
+BitsPerSample 32 eq{//ReadSample32}{//ReadSample}ifelse
+exec exch//ScaleVal exec
+//PDFR_DEBUG{
+(value=)print dup =
+}if
+exch Table exch get
+Size length//StoreSample exec
+}for
+}for
+}{
+1 sub
+dup Size exch get 0 exch 1 exch 1 sub{
+I exch 2 index exch put
+dup//ReadSamplesRec exec
+}for
+pop
+}ifelse
+//PDFR_DEBUG{
+(ReadSamples end )print count =
+}if
+}bind def
+//ReadSamplesRec 0//ReadSamples put
+/StreamToArray
+{//PDFR_DEBUG{
+(StreamToArray beg )print count =
+}if
+userdict/FuncDataReader get begin
+dup/BitsPerSample get/BitsPerSample exch def
+dup/Size get length/N exch def
+dup/Range get length 2 idiv/M exch def
+1 BitsPerSample bitshift 1 sub/Div exch def
+/BitsLeft 0 def
+/Buffer 0 def
+dup/Size get/Size exch def
+dup/Range get/Range exch def
+/File 1 index//MakeStreamReader exec def
+/I[N{0}repeat]def
+M array
+dup length 1 sub -1 0{
+2 index N//MakeTable exec
+2 index 3 1 roll put
+}for
+/Table exch def
+N//ReadSamples exec
+PDFR_DEBUG{
+(Table = )print Table ==
+}if
+/Data Table put
+end
+//PDFR_DEBUG{
+(StreamToArray end )print count =
+}if
+}bind def
+/FunctionToProc10
+{
+PDFR_DEBUG{
+(FunctionToProc10 beg, Range = )print dup/Range get ==
+}if
+dup/Order//knownget exec{
+1 ne{
+(Underimplemented function Type 0 Order 3.)=
+}if
+}if
+dup//StreamToArray exec
+dup/Range get length dup 2 eq{
+pop//FunctionToProc_x01 exec
+}{
+2 idiv//FunctionToProc_x0n exec
+}ifelse
+PDFR_DEBUG{
+(FunctionToProc10 end)=
+}if
+}bind def
+/FunctionToProc12
+{begin
+currentdict/C0//knownget exec{length 1 eq}{true}ifelse{
+N
+currentdict/C0//knownget exec{
+0 get
+}{
+0
+}ifelse
+currentdict/C1//knownget exec{
+0 get
+}{
+1
+}ifelse
+1 index sub
+[4 1 roll
+{
+4 2 roll
+exp mul add
+}aload pop
+]cvx
+}{
+[
+0 1 C0 length 1 sub{
+N
+C0 2 index get
+C1 3 index get
+4 3 roll pop
+1 index sub
+[/dup load
+5 2 roll
+{
+4 2 roll
+exp mul add
+exch
+}aload pop
+]cvx
+/exec load
+}for
+/pop load
+]cvx
+}ifelse
+end
+//PDFR_DEBUG{
+(FunctionType2Proc : )print dup ==
+}if
+}bind def
+/FunctionToProc14
+{//MakeStreamReader exec cvx exec
+//PDFR_DEBUG{
+(FunctionType4Proc : )print dup ==
+}if
+}bind def
+/FunctionToProc1
+{
+dup/FunctionType get
+{dup 0 eq{
+pop//FunctionToProc10 exec exit
+}if
+dup 2 eq{
+pop//FunctionToProc12 exec exit
+}if
+dup 4 eq{
+pop//FunctionToProc14 exec exit
+}if
+mark exch(Function type )exch( isn't implemented yet.)//error exec
+}loop
+}bind def
+/FunctionToProc20
+{
+PDFR_DEBUG{
+(FunctionToProc20, Range = )print dup/Range get ==
+}if
+dup/Order//knownget exec{
+1 ne{
+(Underimplemented function Type 0 Order 3.)=
+}if
+}if
+dup//StreamToArray exec
+dup/Range get length dup 2 eq{
+pop//FunctionToProc_x01 exec
+}{
+2 idiv//FunctionToProc_x0n exec
+}ifelse
+}bind def
+/FunctionToProc
+{//PDFR_DEBUG{
+(FunctionToProc beg )print count =
+}if
+dup type/dicttype eq{
+dup/Domain get length 2 idiv
+{
+dup 1 eq{
+pop//FunctionToProc1 exec exit
+}if
+dup 2 eq{
+pop//FunctionToProc20 exec exit
+}if
+mark(Functions with many arguments aren't implemented yet.)//error exec
+}loop
+}{
+//PDFR_DEBUG{(Not a function dict, assume already a procedure.)print}if
+}ifelse
+//PDFR_DEBUG{
+(FunctionToProc end )print count =
+}if
+}bind def
+/spotfunctions mark
+/Round{
+abs exch abs 2 copy add 1 le{
+dup mul exch dup mul add 1 exch sub
+}{
+1 sub dup mul exch 1 sub dup mul add 1 sub
+}ifelse
+}
+/Diamond{
+abs exch abs 2 copy add .75 le{
+dup mul exch dup mul add 1 exch sub
+}{
+2 copy add 1.23 le{
+.85 mul add 1 exch sub
+}{
+1 sub dup mul exch 1 sub dup mul add 1 sub
+}ifelse
+}ifelse
+}
+/Ellipse{
+abs exch abs 2 copy 3 mul exch 4 mul add 3 sub dup 0 lt{
+pop dup mul exch .75 div dup mul add 4 div 1 exch sub
+}{
+dup 1 gt{
+pop 1 exch sub dup mul exch 1 exch sub
+.75 div dup mul add 4 div 1 sub
+}{
+.5 exch sub exch pop exch pop
+}ifelse
+}ifelse
+}
+/EllipseA{dup mul .9 mul exch dup mul add 1 exch sub}
+/InvertedEllipseA{dup mul .9 mul exch dup mul add 1 sub}
+/EllipseB{dup 5 mul 8 div mul exch dup mul exch add sqrt 1 exch sub}
+/EllipseC{dup mul .9 mul exch dup mul add 1 exch sub}
+/InvertedEllipseC{dup mul .9 mul exch dup mul add 1 sub}
+/Line{exch pop abs neg}
+/LineX{pop}
+/LineY{exch pop}
+/Square{abs exch abs 2 copy lt{exch}if pop neg}
+/Cross{abs exch abs 2 copy gt{exch}if pop neg}
+/Rhomboid{abs exch abs 0.9 mul add 2 div}
+/DoubleDot{2{360 mul sin 2 div exch}repeat add}
+/InvertedDoubleDot{2{360 mul sin 2 div exch}repeat add neg}
+/SimpleDot{dup mul exch dup mul add 1 exch sub}
+/InvertedSimpleDot{dup mul exch dup mul add 1 sub}
+/CosineDot{180 mul cos exch 180 mul cos add 2 div}
+/Double{exch 2 div exch 2{360 mul sin 2 div exch}repeat add}
+/InvertedDouble{
+exch 2 div exch 2{360 mul sin 2 div exch}repeat add neg
+}
+.dicttomark readonly def
+/CheckColorSpace
+{
+dup type/arraytype ne{
+mark(Resource )3 index( must be an array.)//error exec
+}if
+}bind def
+/SubstitutePDFColorSpaceRec
+{0
+exec
+}bind def
+/SubstitutePDFColorSpace
+{
+{
+dup 0 get/Pattern eq{
+dup length 1 gt{
+dup dup 1//CheckColorSpace//ResolveA exec
+dup type/nametype ne{
+//SubstitutePDFColorSpaceRec exec
+}if
+1 exch put
+}if
+exit
+}if
+dup 0 get/Indexed eq{
+exit
+}if
+dup 0 get/Separation eq{
+dup dup 2//CheckColorSpace//ResolveA exec
+dup type/nametype ne{
+//SubstitutePDFColorSpaceRec exec
+}if
+2 exch put
+exit
+}if
+dup 0 get/CalGray eq{
+1 get
+dup/Gamma//knownget exec{
+[exch[exch/exp load]cvx dup dup]
+1 index exch/DecodeLMN exch put
+}if
+[exch/CIEBasedA exch]
+exit
+}if
+dup 0 get/CalRGB eq{
+1 get
+dup/Matrix//knownget exec{
+1 index exch/MatrixLMN exch put
+}if
+dup/Gamma//knownget exec{
+aload pop
+[exch/exp load]cvx
+3 1 roll
+[exch/exp load]cvx
+3 1 roll
+[exch/exp load]cvx
+3 1 roll
+3 array astore
+1 index exch/DecodeLMN exch put
+}if
+[exch/CIEBasedABC exch]
+exit
+}if
+dup 0 get/Lab eq{
+1 get
+begin
+currentdict/Range//knownget exec{aload pop}{-100 100 -100 100}ifelse
+0 100 6 2 roll 6 array astore
+/RangeABC exch def
+/DecodeABC[{16 add 116 div}bind{500 div}bind{200 div}bind]def
+/MatrixABC[1 1 1 1 0 0 0 0 -1]def
+{dup 6 29 div ge{dup dup mul mul}{4 29 div sub 108 841 div mul}ifelse}
+/DecodeLMN[
+[3 index aload pop WhitePoint 0 get/mul load]cvx
+[4 index aload pop WhitePoint 1 get/mul load]cvx
+[5 index aload pop WhitePoint 2 get/mul load]cvx
+]def pop
+//PDFR_DEBUG{
+(Constructed from Lab <<)=
+currentdict{exch = ==}forall
+(>>)=
+}if
+[/CIEBasedABC currentdict]
+end
+exit
+pop
+}if
+dup 0 get/CIEBasedA eq{exit}if
+dup 0 get/CIEBasedABC eq{exit}if
+mark exch(Unimplemented color space )exch//error exec
+}loop
+}bind def
+//SubstitutePDFColorSpaceRec 0//SubstitutePDFColorSpace put
+/ResolveArrayElement
+{2 copy get
+dup type dup/arraytype eq exch
+/packedarraytype eq or{
+dup length 1 ge exch xcheck and{
+2 copy get
+dup 0 get type/integertype eq
+1 index 1 get type dup/arraytype
+eq exch
+/packedarraytype eq or
+and{
+exec
+2 index 4 1 roll put
+}{
+pop pop
+}ifelse
+}{
+pop
+}ifelse
+}{
+pop pop
+}ifelse
+}bind def
+/ResolveColorSpaceArrayRec
+{0
+exec
+}bind def
+/SetColorSpaceSafe
+{
+PDFR_DEBUG{
+(SetColorSpaceSafe beg)=
+}if
+currentcolorspace dup type/arraytype eq{
+1 index type/arraytype eq{
+dup length 2 index length eq{
+false exch
+dup length 0 exch 1 exch 1 sub{
+dup
+4 index exch get exch
+2 index exch get
+ne{
+exch pop true exch exit
+}if
+}for
+pop
+{
+setcolorspace
+}{
+pop
+}ifelse
+}{
+pop setcolorspace
+}ifelse
+}{
+pop setcolorspace
+}ifelse
+}{
+pop setcolorspace
+}ifelse
+PDFR_DEBUG{
+(SetColorSpaceSafe end)=
+}if
+}bind def
+/ResolveColorSpaceArray
+{
+//PDFR_DEBUG{
+(ResolveColorSpaceArray beg )print dup ==
+}if
+dup 0 get/Indexed eq{
+1//ResolveArrayElement exec
+dup dup 1 get
+dup type/arraytype eq{
+//SubstitutePDFColorSpace exec
+//ResolveColorSpaceArrayRec exec
+1 exch put
+}{
+pop pop
+}ifelse
+}if
+dup 0 get/Separation eq{
+dup dup 1 get UnPDFEscape 1 exch put
+3//ResolveArrayElement exec
+dup 3 get//FunctionToProc exec
+2 copy 3 exch put
+pop
+}if
+dup 0 get/Pattern eq{
+dup length 1 gt{
+dup 1 get dup type/arraytype eq{
+ResolveColorSpaceArray
+1 index 1 3 -1 roll put
+}{
+pop
+}ifelse
+}if
+}if
+PDFR_DEBUG{
+(Construcrted color space :)=
+dup ==
+}if
+//PDFR_DEBUG{
+(ResolveColorSpaceArray end )print dup ==
+}if
+}bind def
+//ResolveColorSpaceArrayRec 0//ResolveColorSpaceArray put
+/ResolveColorSpace
+{
+//PDFR_DEBUG{
+(ResolveColorSpace beg )print dup =
+}if
+dup//SimpleColorSpaceNames exch known not{
+dup//PDFColorSpaces exch//knownget exec{
+exch pop
+//PDFR_DEBUG{
+(ResolveColorSpace known )=
+}if
+}{
+dup
+//PDFReader/CurrentObject get/Context get/Resources get
+/ColorSpace//DoNothing//ResolveD exec
+exch//CheckColorSpace//ResolveD exec
+dup type/arraytype eq{
+//SubstitutePDFColorSpace exec
+//ResolveColorSpaceArray exec
+dup//PDFColorSpaces 4 2 roll put
+}if
+}ifelse
+}if
+//PDFR_DEBUG{
+(ResolveColorSpace end )print dup ==
+}if
+}bind def
+/CheckPattern
+{
+dup/PatternType//knownget exec{
+dup 1 ne{
+mark(Resource )4 index( is a shading, which can't be handled at level 2. )//error exec
+}if
+pop
+}if
+dup/Type knownget{
+/Pattern ne{
+mark(Resource )4 index( must have /Type/Pattern .)//error exec
+}if
+}if
+}bind def
+/PaintProc
+{/Context get
+//RunDelayedStream exec
+}bind def
+/ResolvePattern
+{
+dup
+userdict/PDFR_Patterns get
+exch//knownget exec{
+exch pop
+}{
+dup
+//PDFReader/CurrentObject get/Context get/Resources get
+/Pattern//DoNothing//ResolveD exec
+exch//CheckPattern//ResolveD exec
+dup dup/Context exch put
+dup/Resources//DoNothing//ResolveD exec pop
+dup/PaintProc//PaintProc put
+gsave userdict/PDFR_InitialGS get setgstate
+currentglobal exch false setglobal
+dup/Matrix get
+makepattern
+exch setglobal
+grestore
+dup userdict/PDFR_Patterns get
+4 2 roll
+put
+}ifelse
+}bind def
+/SetColor
+{//PDFR_DEBUG{
+(SetColor beg)=
+}if
+currentcolorspace dup type/nametype eq{
+pop setcolor
+}{
+0 get/Pattern eq{
+//ResolvePattern exec setpattern
+}{
+setcolor
+}ifelse
+}ifelse
+//PDFR_DEBUG{
+(SetColor end)=
+}if
+}bind def
+/ImageKeys 15 dict begin
+/BPC/BitsPerComponent def
+/CS/ColorSpace def
+/D/Decode def
+/DP/DecodeParms def
+/F/Filter def
+/H/Height def
+/IM/ImageMask def
+/I/Interpolate def
+/W/Width def
+currentdict end readonly def
+/ImageValues 15 dict begin
+/G/DeviceGray def
+/RGB/DeviceRGB def
+/CMYK/DeviceCMYK def
+/I/Indexed def
+/AHx/ASCIIHexDecode def
+/A85/ASCII85Decode def
+/LZW/LZWDecode def
+/Fl/FlateDecode def
+/RL/RunLengthDecode def
+/CCF/CCITTFaxDecode def
+/DCT/DCTDecode def
+currentdict end readonly def
+/GetColorSpaceRange
+{2 index/ColorSpace get
+dup type/arraytype eq{
+1 get
+}if
+exch//knownget exec{
+exch pop
+}if
+}bind def
+/DecodeArrays 15 dict begin
+/DeviceGray{[0 1]}def
+/DeviceRGB{[0 1 0 1 0 1]}def
+/DeviceCMYK{[0 1 0 1 0 1 0 1]}def
+/Indexed{
+dup/BitsPerComponent get 1 exch bitshift 1 sub[exch 0 exch]
+}def
+/Separation{[0 1]}def
+/CIEBasedA{[0 1]/RangeA//GetColorSpaceRange exec}def
+/CIEBasedABC{[0 1 0 1 0 1]/RangeABC//GetColorSpaceRange exec}def
+currentdict end readonly def
+/Substitute
+{1 index//knownget exec{
+exch pop
+}if
+}bind def
+/DebugImagePrinting
+{
+//PDFR_DEBUG{
+(Image :)=
+dup{exch//=only exec( )print ==
+}forall
+}if
+}bind def
+/CompleteImage
+{
+dup/ColorSpace known{
+dup/ColorSpace//CheckColorSpace//ResolveD exec pop
+}if
+dup/Decode known not{
+dup/ColorSpace//knownget exec{
+dup type/arraytype eq{
+0 get
+}if
+//DecodeArrays exch get exec
+}{
+[0 1]
+}ifelse
+1 index exch/Decode exch put
+}if
+dup/ImageMatrix[2 index/Width get 0 0 5 index/Height get neg
+0 7 index/Height get]put
+//DebugImagePrinting exec
+}bind def
+/CompleteInlineImage
+{
+//PDFR_DEBUG{
+(CompleteInlineImage beg)=
+}if
+dup/ImageType known not{
+dup/ImageType 1 put
+}if
+dup length dict exch{
+exch//ImageKeys//Substitute exec
+dup/Filter eq{
+exch//ImageValues//Substitute exec exch
+}if
+dup/ColorSpace eq{
+exch
+dup//ImageValues exch//knownget exec{
+exch pop
+}{
+//ResolveColorSpace exec
+}ifelse
+exch
+}if
+exch
+2 index 3 1 roll put
+}forall
+//CompleteImage exec
+dup/DataSource 2 copy get
+2 index//AppendFilters exec put
+//PDFR_DEBUG{
+(CompleteInlineImage end)=
+}if
+}bind def
+/CompleteOutlineImage
+{
+currentglobal exch dup gcheck setglobal
+//PDFR_DEBUG{
+(CompleteOutlineImage beg)=
+}if
+dup dup//MakeStreamReader exec/DataSource exch put
+dup/ImageType known not{
+//CompleteImage exec
+dup/ImageType 1 put
+dup/ColorSpace known{
+dup/ColorSpace//CheckColorSpace//ResolveD exec
+dup type/arraytype eq{
+//ResolveColorSpaceArray exec
+//SubstitutePDFColorSpace exec
+1 index exch/ColorSpace exch put
+}{
+pop
+}ifelse
+}if
+}if
+//PDFR_DEBUG{
+(CompleteOutlineImage end)=
+}if
+exch setglobal
+}bind def
+/DoImage
+{
+//PDFR_DEBUG{
+(DoImage beg)=
+}if
+gsave
+dup/ColorSpace//knownget exec{setcolorspace}if
+dup/ImageMask//knownget exec not{false}if
+{imagemask}{image}ifelse
+grestore
+//PDFR_DEBUG{
+(DoImage end)=
+}if
+}bind def
+/GSave
+{
+gsave
+//PDFReader/GraphicStateStackPointer get
+dup//GraphicStateStack exch get null eq{
+dup//GraphicStateStack exch//InitialGraphicState length dict put
+}if
+dup//GraphicStateStack exch get
+//GraphicState exch copy pop
+1 add//PDFReader exch/GraphicStateStackPointer exch put
+}bind def
+/GRestore
+{
+grestore
+//PDFReader/GraphicStateStackPointer get
+1 sub dup
+//PDFReader exch/GraphicStateStackPointer exch put
+//GraphicStateStack exch get
+//GraphicState copy pop
+}bind def
+/SetFont
+{dup//GraphicState exch/FontSize exch put
+//ResolveAndSetFont exec
+//GraphicState/FontMatrixNonHV currentfont/FontMatrix get 1 get 0 ne put
+}bind def
+/ShowText
+{//GraphicState/TextRenderingMode get 0 eq{
+//GraphicState/WordSpacing get 0
+32
+//GraphicState/CharacterSpacing get 0
+6 5 roll
+//GraphicState/FontMatrixNonHV get{
+[
+7 -2 roll pop
+5 -2 roll pop
+5 -1 roll
+{
+exch
+pop
+3 index add
+exch 2 index eq{3 index add}if
+4 1 roll
+}
+currentfont/FontMatrix get 0 get 0 ne{
+1 1 index length 1 sub getinterval cvx
+}if
+5 index
+cshow
+pop pop pop]
+xshow
+}{
+awidthshow
+}ifelse
+}{
+//GraphicState/CharacterSpacing get 0 eq
+//GraphicState/FontMatrixNonHV get not and
+//GraphicState/WordSpacing get 0 eq and{
+true charpath
+}{
+{
+exch
+pop 0
+currentpoint 5 4 roll
+( )dup 0 3 index put true charpath
+5 1 roll
+moveto rmoveto
+//GraphicState/CharacterSpacing get 0 rmoveto
+32 eq{
+//GraphicState/WordSpacing get 0 rmoveto
+}if
+}
+//GraphicState/FontMatrixNonHV get dup not exch{
+pop currentfont/FontMatrix get 0 get 0 ne
+}if{
+1 1 index length 1 sub getinterval cvx
+}if
+exch cshow
+}ifelse
+}ifelse
+}bind def
+/ShowTextBeg
+{//GraphicState/TextRenderingMode get 0 ne{
+currentpoint newpath moveto
+}if
+}bind def
+/ShowTextEnd
+{//GraphicState/TextRenderingMode get
+{dup 1 eq{
+stroke exit
+}if
+dup 2 eq{
+gsave fill grestore stroke exit
+}if
+dup 3 eq{
+currentpoint newpath moveto
+}if
+dup 4 eq{
+gsave fill grestore clip exit
+}if
+dup 5 eq{
+gsave stroke grestore clip exit
+}if
+dup 6 eq{
+gsave fill grestore gsave stroke grestore fill exit
+}if
+dup 7 eq{
+clip exit
+}if
+exit
+}loop
+pop
+}bind def
+/ShowTextWithGlyphPositioning
+{//ShowTextBeg exec
+{dup type/stringtype eq{
+//ShowText exec
+}{
+neg 1000 div//GraphicState/FontSize get mul 0 rmoveto
+}ifelse
+}forall
+//ShowTextEnd exec
+}bind def
+/CheckFont
+{dup/Type get/ExtGState ne{
+mark(Resource )3 index( must have /Type/ExtGState.)//error exec
+}if
+}bind def
+/SetTransfer
+{
+//PDFR_DEBUG{(SetTransfer beg )print count =}if
+dup type/arraytype eq 1 index xcheck not and{
+0 4 getinterval aload pop
+setcolortransfer
+}{
+settransfer
+}ifelse
+//PDFR_DEBUG{(SetTransfer end )print count =}if
+}bind def
+/CheckExtGState
+{dup/Type get/ExtGState ne{
+mark(Resource )3 index( must have /Type/ExtGState.)//error exec
+}if
+}bind def
+/CheckHalftone
+{dup/HalftoneType known not{
+mark(Resource )3 index( must have /HalftoneType.)//error exec
+}if
+}bind def
+/ResolveFunction
+{
+//PDFR_DEBUG{(ResolveFunction beg )print dup = count =}if
+2 copy get//IsObjRef exec{
+2 copy//DoNothing//ResolveD exec
+3 copy put pop
+}if
+2 copy get dup type/arraytype eq exch xcheck and not{
+2 copy get
+dup type/arraytype eq 1 index xcheck not and{
+dup length 1 sub -1 0{
+2 copy//DoNothing ResolveA
+dup/Identity eq{
+pop 2 copy{}put
+}{
+//FunctionToProc exec
+3 copy put pop
+}ifelse
+pop
+}for
+}{
+dup/Default eq{
+}{
+dup/Identity eq{
+pop{}
+}{dup type/nametype eq{
+//spotfunctions exch get
+}{
+//FunctionToProc exec
+}ifelse
+}ifelse
+}ifelse
+}ifelse
+3 copy put
+exch pop
+}{
+1 index exch get
+}ifelse
+//PDFR_DEBUG{(ResolveFunction end )print dup == count =}if
+}bind def
+/ResolveFunctionSafe
+{2 copy known{
+//ResolveFunction exec
+}if
+pop
+}bind def
+/CreateHalftoneThresholds
+{
+dup/Thresholds known not{
+dup/HalftoneType get 10 eq{
+dup dup//MakeStreamReader exec
+/Thresholds exch put
+}if
+dup/HalftoneType get dup 3 eq exch 6 eq or{
+dup dup//MakeStreamReader exec
+//BlockBuffer readstring pop
+dup length
+dup 0 eq{
+mark(Could not read Thresholds)//error exec
+}if
+string copy/Thresholds exch put
+dup/HalftoneType 3 put
+}if
+}if
+}bind def
+/SetExtGState
+{
+//PDFReader/CurrentObject get/Context get/Resources get
+/ExtGState//DoNothing//ResolveD exec
+exch//CheckExtGState//ResolveD exec
+dup/LW//knownget exec{
+setlinewidth
+}if
+dup/LC//knownget exec{
+setlinecap
+}if
+dup/LJ//knownget exec{
+setlinejoin
+}if
+dup/ML//knownget exec{
+setmeterlimit
+}if
+dup/D//knownget exec{
+setdash
+}if
+dup/RI//knownget exec{
+mark(Unimplemented ExtGState.RI)//error exec
+}if
+dup/OP//knownget exec{
+setoverprint
+}if
+dup/op//knownget exec{
+setoverprint
+}if
+dup/OPM//knownget exec{
+mark(Unimplemented ExtGState.OPM)//error exec
+}if
+dup/Font//knownget exec{
+mark(Unimplemented ExtGState.Font)//error exec
+}if
+dup/BG known{
+/BG//ResolveFunction exec
+setblackgeneration
+}if
+dup/BG2 known{
+/BG2//ResolveFunction exec
+dup/Default eq{
+//InitialExtGState/BG2 get
+}if
+setblackgeneration
+}if
+dup/UCR known{
+/UCR//ResolveFunction exec
+setundercolorremoval
+}if
+dup/UCR2 known{
+/UCR2//ResolveFunction exec
+dup/Default eq{
+//InitialExtGState/UCR2 get
+}if
+setundercolorremoval
+}if
+dup/TR known{
+/TR//ResolveFunction exec
+//SetTransfer exec
+}if
+dup/TR2 known{
+/TR2//ResolveFunction exec
+dup/Default eq{
+pop//InitialExtGState/TR2 get
+aload pop setcolortransfer
+}{
+//SetTransfer exec
+}ifelse
+}if
+dup/HT//knownget exec{
+dup/Default eq{
+pop//InitialExtGState/HT get
+sethalftone
+}{
+//PDFR_DEBUG{(Ht beg)=}if
+pop dup/HT//CheckHalftone//ResolveD exec
+/SpotFunction//ResolveFunctionSafe exec
+/TransferFunction//ResolveFunctionSafe exec
+null exch
+dup/HalftoneType get dup 5 eq exch dup 4 eq exch 2 eq or or{
+dup{
+dup//IsObjRef exec{
+pop
+1 index exch//CheckHalftone ResolveD
+}if
+dup type/dicttype eq{
+dup/SpotFunction//ResolveFunctionSafe exec
+/TransferFunction//ResolveFunctionSafe exec
+//CreateHalftoneThresholds exec
+dup/HalftoneType get 5 gt{
+4 3 roll pop
+dup 4 1 roll
+}if
+}if
+pop pop
+}forall
+}if
+//CreateHalftoneThresholds exec
+//PDFR_DEBUG{
+(HT:)=
+dup{
+1 index/Default eq{
+(Default <<)=
+exch pop
+{exch = ==}forall
+(>>)=
+}{
+exch = ==
+}ifelse
+}forall
+(HT end)= flush
+}if
+exch dup null ne{
+(Warning: Ignoring a halftone with a Level 3 component halftone Type )print dup/HalftoneType get =
+pop pop
+}{
+pop
+dup/HalftoneType get 5 gt{
+(Warning: Ignoring a Level 3 halftone Type )print dup/HalftoneType get =
+pop
+}{
+sethalftone
+}ifelse
+}ifelse
+//PDFR_DEBUG{(HT set)= flush}if
+}ifelse
+}if
+dup/FL//knownget exec{
+setflattness
+}if
+dup/SM//knownget exec{
+setsmoothness
+}if
+dup/SA//knownget exec{
+setstrokeadjust
+}if
+dup/BM//knownget exec{
+mark(Unimplemented ExtGState.BM)//error exec
+}if
+dup/SMask//knownget exec{
+mark(Unimplemented ExtGState.SMask)//error exec
+}if
+dup/CA//knownget exec{
+mark(Unimplemented ExtGState.CA)//error exec
+}if
+dup/ca//knownget exec{
+mark(Unimplemented ExtGState.ca)//error exec
+}if
+dup/AIS//knownget exec{
+mark(Unimplemented ExtGState.AIS)//error exec
+}if
+dup/TK//knownget exec{
+mark(Unimplemented ExtGState.TK)//error exec
+}if
+pop
+}bind def
+/CheckXObject
+{dup/Subtype get dup/Image ne exch dup/Form ne exch/PS ne and and{
+mark(Resource )3 index( must have /Subtype /Image or /Form or /PS.)//error exec
+}if
+}bind def
+/DoXObject
+{
+//PDFReader/CurrentObject get/Context get/Resources get
+/XObject//DoNothing//ResolveD exec
+exch//CheckXObject//ResolveD exec
+dup/Subtype get
+dup/Image eq{
+pop
+//CompleteOutlineImage exec
+//DoImage exec
+}{
+dup/PS eq{
+PDFR_DEBUG{
+(Executing a PS Xobject)=
+}if
+pop
+//RunDelayedStream exec
+}{
+dup/Form eq{
+pop
+PDFR_DEBUG{
+(Executing a Form XObject)=
+}if
+//PDFReader/CurrentObject get exch
+dup//PDFReader exch<< exch/Context exch >>/CurrentObject exch put
+dup/Matrix get concat
+dup/BBox get aload pop exch 3 index sub exch 2 index sub rectclip
+//RunDelayedStream exec
+//PDFReader exch/CurrentObject exch put
+}{
+mark exch(unimplemented XObject type )exch//error exec
+}ifelse
+}ifelse
+}ifelse
+}bind def
+/Operators 50 dict begin
+/q{//GSave exec}bind def
+/Q{//GRestore exec}bind def
+/cm{//TempMatrix astore concat}bind def
+/i{1 .min setflat}bind def
+/J/setlinecap load def
+/d/setdash load def
+/j/setlinejoin load def
+/w/setlinewidth load def
+/M/setmiterlimit load def
+/gs{SetExtGState}bind def
+/g/setgray load def
+/rg/setrgbcolor load def
+/k/setcmykcolor load def
+/cs{//ResolveColorSpace exec//SetColorSpaceSafe exec
+}bind def
+/sc/setcolor load def
+/scn{//SetColor exec}bind def
+/G/setgray load def
+/RG/setrgbcolor load def
+/K/setcmykcolor load def
+/CS//cs def
+/ri{SetColorRenderingIntent}bind def
+/SC/setcolor load def
+/SCN{//SetColor exec}bind def
+/m/moveto load def
+/l/lineto load def
+/c/curveto load def
+/v{currentpoint 6 2 roll curveto}bind def
+/y{2 copy curveto}bind def
+/re{
+4 2 roll moveto exch dup 0 rlineto 0 3 -1 roll rlineto neg 0 rlineto
+closepath
+}def
+/h/closepath load def
+/n/newpath load def
+/S/stroke load def
+/s{closepath stroke}bind def
+/f/fill load def
+/f*/eofill load def
+/B{gsave fill grestore stroke}bind def
+/b{closepath gsave fill grestore stroke}bind def
+/B*{gsave eofill grestore stroke}bind def
+/b*{closepath gsave eofill grestore stroke}bind def
+/W/clip load def
+/W*/eoclip load def
+/sh{
+ResolveShading
+dup/Background known{
+gsave
+dup/ColorSpace get setcolorspace
+dup/Background get aload pop setcolor
+pathbbox
+2 index sub exch 3 index sub exch
+rectfill
+grestore
+}if
+shfill
+}bind def
+/Do{//DoXObject exec}bind def
+/BI{currentglobal false setglobal<<}bind def
+/ID{>>
+dup/DataSource currentfile
+2 index/F//knownget exec{
+/A85 eq{
+0(~>)/SubFileDecode filter
+}if
+}if
+put
+//CompleteInlineImage exec
+exch setglobal
+//DoImage exec
+}bind def
+/EI{}bind def
+/BT{gsave//GraphicState/InitialTextMatrix get currentmatrix pop}bind def
+/ET{grestore}bind def
+/Tc{//GraphicState exch/CharacterSpacing exch put}bind def
+/TL{//GraphicState exch/TextLeading exch put}bind def
+/Tr{//GraphicState exch/TextRenderingMode exch put}bind def
+/Ts{
+mark(Unimplemented SetTextRise)//error exec
+}bind def
+/Tw{//GraphicState exch/WordSpacing exch put}bind def
+/Tz{
+mark(Unimplemented SetHorizontalTextScaling)//error exec
+}bind def
+/Td{translate 0 0 moveto}bind def
+/TD{dup neg//TL exec//Td exec}bind def
+/Tm{//GraphicState/InitialTextMatrix get setmatrix
+//TempMatrix astore concat
+0 0 moveto}bind def
+/T*{0//GraphicState/TextLeading get neg//Td exec}bind def
+/Tj{//ShowTextBeg exec//ShowText exec//ShowTextEnd exec}bind def
+/'{//T* exec//ShowText exec//ShowTextEnd exec}bind def
+/"{3 2 roll//Tw exec exch//Tc exec//' exec}bind def
+/TJ//ShowTextWithGlyphPositioning def
+/Tf//SetFont def
+/d0/setcharwidth load def
+/d1/setcachedevice load def
+/BDC{pop pop}bind def
+/BMC{pop}bind def
+/EMC{}bind def
+/BX{BeginCompatibilitySection}bind def
+/EX{EndCompatibilitySection}bind def
+/DP{DefineMarkedContentPointWithPropertyList}bind def
+/MP{DefineMarkedContentPoint}bind def
+/PS{cvx exec}bind def
+currentdict end def
+//PDFR_STREAM{
+//Operators length dict begin
+//Operators{
+exch dup
+[exch//=only/exec load
+( )/print load
+8 7 roll
+dup type/arraytype eq{
+/exec load
+}if
+( )/print load
+]cvx
+def
+}forall
+currentdict end/Operators exch def
+}if
+/.registerencoding
+{pop pop
+}bind def
+/.defineencoding
+{def
+}bind def
+/.findencoding
+{load
+}bind def
+/currentglobal where
+{pop currentglobal{setglobal}true setglobal}
+{{}}
+ifelse
+/MacRomanEncoding
+StandardEncoding 0 39 getinterval aload pop
+/quotesingle
+StandardEncoding 40 56 getinterval aload pop
+/grave
+StandardEncoding 97 31 getinterval aload pop
+/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute
+/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave
+/ecircumflex/edieresis/iacute/igrave
+/icircumflex/idieresis/ntilde/oacute
+/ograve/ocircumflex/odieresis/otilde
+/uacute/ugrave/ucircumflex/udieresis
+/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls
+/registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash
+/.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef
+/.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash
+/questiondown/exclamdown/logicalnot/.notdef
+/florin/.notdef/.notdef/guillemotleft
+/guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe
+/endash/emdash/quotedblleft/quotedblright
+/quoteleft/quoteright/divide/.notdef
+/ydieresis/Ydieresis/fraction/currency
+/guilsinglleft/guilsinglright/fi/fl
+/daggerdbl/periodcentered/quotesinglbase/quotedblbase
+/perthousand/Acircumflex/Ecircumflex/Aacute
+/Edieresis/Egrave/Iacute/Icircumflex
+/Idieresis/Igrave/Oacute/Ocircumflex
+/.notdef/Ograve/Uacute/Ucircumflex
+/Ugrave/dotlessi/circumflex/tilde
+/macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron
+256 packedarray
+5 1 index .registerencoding
+.defineencoding
+exec
+/AdobeGlyphList mark
+/A 16#0041
+/AE 16#00c6
+/AEacute 16#01fc
+/AEmacron 16#01e2
+/AEsmall 16#f7e6
+/Aacute 16#00c1
+/Aacutesmall 16#f7e1
+/Abreve 16#0102
+/Abreveacute 16#1eae
+/Abrevecyrillic 16#04d0
+/Abrevedotbelow 16#1eb6
+/Abrevegrave 16#1eb0
+/Abrevehookabove 16#1eb2
+/Abrevetilde 16#1eb4
+/Acaron 16#01cd
+/Acircle 16#24b6
+/Acircumflex 16#00c2
+/Acircumflexacute 16#1ea4
+/Acircumflexdotbelow 16#1eac
+/Acircumflexgrave 16#1ea6
+/Acircumflexhookabove 16#1ea8
+/Acircumflexsmall 16#f7e2
+/Acircumflextilde 16#1eaa
+/Acute 16#f6c9
+/Acutesmall 16#f7b4
+/Acyrillic 16#0410
+/Adblgrave 16#0200
+/Adieresis 16#00c4
+/Adieresiscyrillic 16#04d2
+/Adieresismacron 16#01de
+/Adieresissmall 16#f7e4
+/Adotbelow 16#1ea0
+/Adotmacron 16#01e0
+/Agrave 16#00c0
+/Agravesmall 16#f7e0
+/Ahookabove 16#1ea2
+/Aiecyrillic 16#04d4
+/Ainvertedbreve 16#0202
+/Alpha 16#0391
+/Alphatonos 16#0386
+/Amacron 16#0100
+/Amonospace 16#ff21
+/Aogonek 16#0104
+/Aring 16#00c5
+/Aringacute 16#01fa
+/Aringbelow 16#1e00
+/Aringsmall 16#f7e5
+/Asmall 16#f761
+/Atilde 16#00c3
+/Atildesmall 16#f7e3
+/Aybarmenian 16#0531
+/B 16#0042
+/Bcircle 16#24b7
+/Bdotaccent 16#1e02
+/Bdotbelow 16#1e04
+/Becyrillic 16#0411
+/Benarmenian 16#0532
+/Beta 16#0392
+/Bhook 16#0181
+/Blinebelow 16#1e06
+/Bmonospace 16#ff22
+/Brevesmall 16#f6f4
+/Bsmall 16#f762
+/Btopbar 16#0182
+/C 16#0043
+/Caarmenian 16#053e
+/Cacute 16#0106
+/Caron 16#f6ca
+/Caronsmall 16#f6f5
+/Ccaron 16#010c
+/Ccedilla 16#00c7
+/Ccedillaacute 16#1e08
+/Ccedillasmall 16#f7e7
+/Ccircle 16#24b8
+/Ccircumflex 16#0108
+/Cdot 16#010a
+/Cdotaccent 16#010a
+/Cedillasmall 16#f7b8
+/Chaarmenian 16#0549
+/Cheabkhasiancyrillic 16#04bc
+/Checyrillic 16#0427
+/Chedescenderabkhasiancyrillic 16#04be
+/Chedescendercyrillic 16#04b6
+/Chedieresiscyrillic 16#04f4
+/Cheharmenian 16#0543
+/Chekhakassiancyrillic 16#04cb
+/Cheverticalstrokecyrillic 16#04b8
+/Chi 16#03a7
+/Chook 16#0187
+/Circumflexsmall 16#f6f6
+/Cmonospace 16#ff23
+/Coarmenian 16#0551
+/Csmall 16#f763
+/D 16#0044
+/DZ 16#01f1
+/DZcaron 16#01c4
+/Daarmenian 16#0534
+/Dafrican 16#0189
+/Dcaron 16#010e
+/Dcedilla 16#1e10
+/Dcircle 16#24b9
+/Dcircumflexbelow 16#1e12
+/Dcroat 16#0110
+/Ddotaccent 16#1e0a
+/Ddotbelow 16#1e0c
+/Decyrillic 16#0414
+/Deicoptic 16#03ee
+/Delta 16#2206
+/Deltagreek 16#0394
+/Dhook 16#018a
+/Dieresis 16#f6cb
+/DieresisAcute 16#f6cc
+/DieresisGrave 16#f6cd
+/Dieresissmall 16#f7a8
+/Digammagreek 16#03dc
+/Djecyrillic 16#0402
+/Dlinebelow 16#1e0e
+/Dmonospace 16#ff24
+/Dotaccentsmall 16#f6f7
+/Dslash 16#0110
+/Dsmall 16#f764
+/Dtopbar 16#018b
+/Dz 16#01f2
+/Dzcaron 16#01c5
+/Dzeabkhasiancyrillic 16#04e0
+/Dzecyrillic 16#0405
+/Dzhecyrillic 16#040f
+/E 16#0045
+/Eacute 16#00c9
+/Eacutesmall 16#f7e9
+/Ebreve 16#0114
+/Ecaron 16#011a
+/Ecedillabreve 16#1e1c
+/Echarmenian 16#0535
+/Ecircle 16#24ba
+/Ecircumflex 16#00ca
+/Ecircumflexacute 16#1ebe
+/Ecircumflexbelow 16#1e18
+/Ecircumflexdotbelow 16#1ec6
+/Ecircumflexgrave 16#1ec0
+/Ecircumflexhookabove 16#1ec2
+/Ecircumflexsmall 16#f7ea
+/Ecircumflextilde 16#1ec4
+/Ecyrillic 16#0404
+/Edblgrave 16#0204
+/Edieresis 16#00cb
+/Edieresissmall 16#f7eb
+/Edot 16#0116
+/Edotaccent 16#0116
+/Edotbelow 16#1eb8
+/Efcyrillic 16#0424
+/Egrave 16#00c8
+/Egravesmall 16#f7e8
+/Eharmenian 16#0537
+/Ehookabove 16#1eba
+/Eightroman 16#2167
+/Einvertedbreve 16#0206
+/Eiotifiedcyrillic 16#0464
+/Elcyrillic 16#041b
+/Elevenroman 16#216a
+/Emacron 16#0112
+/Emacronacute 16#1e16
+/Emacrongrave 16#1e14
+/Emcyrillic 16#041c
+/Emonospace 16#ff25
+/Encyrillic 16#041d
+/Endescendercyrillic 16#04a2
+/Eng 16#014a
+/Enghecyrillic 16#04a4
+/Enhookcyrillic 16#04c7
+/Eogonek 16#0118
+/Eopen 16#0190
+/Epsilon 16#0395
+/Epsilontonos 16#0388
+/Ercyrillic 16#0420
+/Ereversed 16#018e
+/Ereversedcyrillic 16#042d
+/Escyrillic 16#0421
+/Esdescendercyrillic 16#04aa
+/Esh 16#01a9
+/Esmall 16#f765
+/Eta 16#0397
+/Etarmenian 16#0538
+/Etatonos 16#0389
+/Eth 16#00d0
+/Ethsmall 16#f7f0
+/Etilde 16#1ebc
+/Etildebelow 16#1e1a
+/Euro 16#20ac
+/Ezh 16#01b7
+/Ezhcaron 16#01ee
+/Ezhreversed 16#01b8
+/F 16#0046
+/Fcircle 16#24bb
+/Fdotaccent 16#1e1e
+/Feharmenian 16#0556
+/Feicoptic 16#03e4
+/Fhook 16#0191
+/Fitacyrillic 16#0472
+/Fiveroman 16#2164
+/Fmonospace 16#ff26
+/Fourroman 16#2163
+/Fsmall 16#f766
+/G 16#0047
+/GBsquare 16#3387
+/Gacute 16#01f4
+/Gamma 16#0393
+/Gammaafrican 16#0194
+/Gangiacoptic 16#03ea
+/Gbreve 16#011e
+/Gcaron 16#01e6
+/Gcedilla 16#0122
+/Gcircle 16#24bc
+/Gcircumflex 16#011c
+/Gcommaaccent 16#0122
+/Gdot 16#0120
+/Gdotaccent 16#0120
+/Gecyrillic 16#0413
+/Ghadarmenian 16#0542
+/Ghemiddlehookcyrillic 16#0494
+/Ghestrokecyrillic 16#0492
+/Gheupturncyrillic 16#0490
+/Ghook 16#0193
+/Gimarmenian 16#0533
+/Gjecyrillic 16#0403
+/Gmacron 16#1e20
+/Gmonospace 16#ff27
+/Grave 16#f6ce
+/Gravesmall 16#f760
+/Gsmall 16#f767
+/Gsmallhook 16#029b
+/Gstroke 16#01e4
+/H 16#0048
+/H18533 16#25cf
+/H18543 16#25aa
+/H18551 16#25ab
+/H22073 16#25a1
+/HPsquare 16#33cb
+/Haabkhasiancyrillic 16#04a8
+/Hadescendercyrillic 16#04b2
+/Hardsigncyrillic 16#042a
+/Hbar 16#0126
+/Hbrevebelow 16#1e2a
+/Hcedilla 16#1e28
+/Hcircle 16#24bd
+/Hcircumflex 16#0124
+/Hdieresis 16#1e26
+/Hdotaccent 16#1e22
+/Hdotbelow 16#1e24
+/Hmonospace 16#ff28
+/Hoarmenian 16#0540
+/Horicoptic 16#03e8
+/Hsmall 16#f768
+/Hungarumlaut 16#f6cf
+/Hungarumlautsmall 16#f6f8
+/Hzsquare 16#3390
+/I 16#0049
+/IAcyrillic 16#042f
+/IJ 16#0132
+/IUcyrillic 16#042e
+/Iacute 16#00cd
+/Iacutesmall 16#f7ed
+/Ibreve 16#012c
+/Icaron 16#01cf
+/Icircle 16#24be
+/Icircumflex 16#00ce
+/Icircumflexsmall 16#f7ee
+/Icyrillic 16#0406
+/Idblgrave 16#0208
+/Idieresis 16#00cf
+/Idieresisacute 16#1e2e
+/Idieresiscyrillic 16#04e4
+/Idieresissmall 16#f7ef
+/Idot 16#0130
+/Idotaccent 16#0130
+/Idotbelow 16#1eca
+/Iebrevecyrillic 16#04d6
+/Iecyrillic 16#0415
+/Ifraktur 16#2111
+/Igrave 16#00cc
+/Igravesmall 16#f7ec
+/Ihookabove 16#1ec8
+/Iicyrillic 16#0418
+/Iinvertedbreve 16#020a
+/Iishortcyrillic 16#0419
+/Imacron 16#012a
+/Imacroncyrillic 16#04e2
+/Imonospace 16#ff29
+/Iniarmenian 16#053b
+/Iocyrillic 16#0401
+/Iogonek 16#012e
+/Iota 16#0399
+/Iotaafrican 16#0196
+/Iotadieresis 16#03aa
+/Iotatonos 16#038a
+/Ismall 16#f769
+/Istroke 16#0197
+/Itilde 16#0128
+/Itildebelow 16#1e2c
+/Izhitsacyrillic 16#0474
+/Izhitsadblgravecyrillic 16#0476
+/J 16#004a
+/Jaarmenian 16#0541
+/Jcircle 16#24bf
+/Jcircumflex 16#0134
+/Jecyrillic 16#0408
+/Jheharmenian 16#054b
+/Jmonospace 16#ff2a
+/Jsmall 16#f76a
+/K 16#004b
+/KBsquare 16#3385
+/KKsquare 16#33cd
+/Kabashkircyrillic 16#04a0
+/Kacute 16#1e30
+/Kacyrillic 16#041a
+/Kadescendercyrillic 16#049a
+/Kahookcyrillic 16#04c3
+/Kappa 16#039a
+/Kastrokecyrillic 16#049e
+/Kaverticalstrokecyrillic 16#049c
+/Kcaron 16#01e8
+/Kcedilla 16#0136
+/Kcircle 16#24c0
+/Kcommaaccent 16#0136
+/Kdotbelow 16#1e32
+/Keharmenian 16#0554
+/Kenarmenian 16#053f
+/Khacyrillic 16#0425
+/Kheicoptic 16#03e6
+/Khook 16#0198
+/Kjecyrillic 16#040c
+/Klinebelow 16#1e34
+/Kmonospace 16#ff2b
+/Koppacyrillic 16#0480
+/Koppagreek 16#03de
+/Ksicyrillic 16#046e
+/Ksmall 16#f76b
+/L 16#004c
+/LJ 16#01c7
+/LL 16#f6bf
+/Lacute 16#0139
+/Lambda 16#039b
+/Lcaron 16#013d
+/Lcedilla 16#013b
+/Lcircle 16#24c1
+/Lcircumflexbelow 16#1e3c
+/Lcommaaccent 16#013b
+/Ldot 16#013f
+/Ldotaccent 16#013f
+/Ldotbelow 16#1e36
+/Ldotbelowmacron 16#1e38
+/Liwnarmenian 16#053c
+/Lj 16#01c8
+/Ljecyrillic 16#0409
+/Llinebelow 16#1e3a
+/Lmonospace 16#ff2c
+/Lslash 16#0141
+/Lslashsmall 16#f6f9
+/Lsmall 16#f76c
+/M 16#004d
+/MBsquare 16#3386
+/Macron 16#f6d0
+/Macronsmall 16#f7af
+/Macute 16#1e3e
+/Mcircle 16#24c2
+/Mdotaccent 16#1e40
+/Mdotbelow 16#1e42
+/Menarmenian 16#0544
+/Mmonospace 16#ff2d
+/Msmall 16#f76d
+/Mturned 16#019c
+/Mu 16#039c
+/N 16#004e
+/NJ 16#01ca
+/Nacute 16#0143
+/Ncaron 16#0147
+/Ncedilla 16#0145
+/Ncircle 16#24c3
+/Ncircumflexbelow 16#1e4a
+/Ncommaaccent 16#0145
+/Ndotaccent 16#1e44
+/Ndotbelow 16#1e46
+/Nhookleft 16#019d
+/Nineroman 16#2168
+/Nj 16#01cb
+/Njecyrillic 16#040a
+/Nlinebelow 16#1e48
+/Nmonospace 16#ff2e
+/Nowarmenian 16#0546
+/Nsmall 16#f76e
+/Ntilde 16#00d1
+/Ntildesmall 16#f7f1
+/Nu 16#039d
+/O 16#004f
+/OE 16#0152
+/OEsmall 16#f6fa
+/Oacute 16#00d3
+/Oacutesmall 16#f7f3
+/Obarredcyrillic 16#04e8
+/Obarreddieresiscyrillic 16#04ea
+/Obreve 16#014e
+/Ocaron 16#01d1
+/Ocenteredtilde 16#019f
+/Ocircle 16#24c4
+/Ocircumflex 16#00d4
+/Ocircumflexacute 16#1ed0
+/Ocircumflexdotbelow 16#1ed8
+/Ocircumflexgrave 16#1ed2
+/Ocircumflexhookabove 16#1ed4
+/Ocircumflexsmall 16#f7f4
+/Ocircumflextilde 16#1ed6
+/Ocyrillic 16#041e
+/Odblacute 16#0150
+/Odblgrave 16#020c
+/Odieresis 16#00d6
+/Odieresiscyrillic 16#04e6
+/Odieresissmall 16#f7f6
+/Odotbelow 16#1ecc
+/Ogoneksmall 16#f6fb
+/Ograve 16#00d2
+/Ogravesmall 16#f7f2
+/Oharmenian 16#0555
+/Ohm 16#2126
+/Ohookabove 16#1ece
+/Ohorn 16#01a0
+/Ohornacute 16#1eda
+/Ohorndotbelow 16#1ee2
+/Ohorngrave 16#1edc
+/Ohornhookabove 16#1ede
+/Ohorntilde 16#1ee0
+/Ohungarumlaut 16#0150
+/Oi 16#01a2
+/Oinvertedbreve 16#020e
+/Omacron 16#014c
+/Omacronacute 16#1e52
+/Omacrongrave 16#1e50
+/Omega 16#2126
+/Omegacyrillic 16#0460
+/Omegagreek 16#03a9
+/Omegaroundcyrillic 16#047a
+/Omegatitlocyrillic 16#047c
+/Omegatonos 16#038f
+/Omicron 16#039f
+/Omicrontonos 16#038c
+/Omonospace 16#ff2f
+/Oneroman 16#2160
+/Oogonek 16#01ea
+/Oogonekmacron 16#01ec
+/Oopen 16#0186
+/Oslash 16#00d8
+/Oslashacute 16#01fe
+/Oslashsmall 16#f7f8
+/Osmall 16#f76f
+/Ostrokeacute 16#01fe
+/Otcyrillic 16#047e
+/Otilde 16#00d5
+/Otildeacute 16#1e4c
+/Otildedieresis 16#1e4e
+/Otildesmall 16#f7f5
+/P 16#0050
+/Pacute 16#1e54
+/Pcircle 16#24c5
+/Pdotaccent 16#1e56
+/Pecyrillic 16#041f
+/Peharmenian 16#054a
+/Pemiddlehookcyrillic 16#04a6
+/Phi 16#03a6
+/Phook 16#01a4
+/Pi 16#03a0
+/Piwrarmenian 16#0553
+/Pmonospace 16#ff30
+/Psi 16#03a8
+/Psicyrillic 16#0470
+/Psmall 16#f770
+/Q 16#0051
+/Qcircle 16#24c6
+/Qmonospace 16#ff31
+/Qsmall 16#f771
+/R 16#0052
+/Raarmenian 16#054c
+/Racute 16#0154
+/Rcaron 16#0158
+/Rcedilla 16#0156
+/Rcircle 16#24c7
+/Rcommaaccent 16#0156
+/Rdblgrave 16#0210
+/Rdotaccent 16#1e58
+/Rdotbelow 16#1e5a
+/Rdotbelowmacron 16#1e5c
+/Reharmenian 16#0550
+/Rfraktur 16#211c
+/Rho 16#03a1
+/Ringsmall 16#f6fc
+/Rinvertedbreve 16#0212
+/Rlinebelow 16#1e5e
+/Rmonospace 16#ff32
+/Rsmall 16#f772
+/Rsmallinverted 16#0281
+/Rsmallinvertedsuperior 16#02b6
+/S 16#0053
+/SF010000 16#250c
+/SF020000 16#2514
+/SF030000 16#2510
+/SF040000 16#2518
+/SF050000 16#253c
+/SF060000 16#252c
+/SF070000 16#2534
+/SF080000 16#251c
+/SF090000 16#2524
+/SF100000 16#2500
+/SF110000 16#2502
+/SF190000 16#2561
+/SF200000 16#2562
+/SF210000 16#2556
+/SF220000 16#2555
+/SF230000 16#2563
+/SF240000 16#2551
+/SF250000 16#2557
+/SF260000 16#255d
+/SF270000 16#255c
+/SF280000 16#255b
+/SF360000 16#255e
+/SF370000 16#255f
+/SF380000 16#255a
+/SF390000 16#2554
+/SF400000 16#2569
+/SF410000 16#2566
+/SF420000 16#2560
+/SF430000 16#2550
+/SF440000 16#256c
+/SF450000 16#2567
+/SF460000 16#2568
+/SF470000 16#2564
+/SF480000 16#2565
+/SF490000 16#2559
+/SF500000 16#2558
+/SF510000 16#2552
+/SF520000 16#2553
+/SF530000 16#256b
+/SF540000 16#256a
+/Sacute 16#015a
+/Sacutedotaccent 16#1e64
+/Sampigreek 16#03e0
+/Scaron 16#0160
+/Scarondotaccent 16#1e66
+/Scaronsmall 16#f6fd
+/Scedilla 16#015e
+/Schwa 16#018f
+/Schwacyrillic 16#04d8
+/Schwadieresiscyrillic 16#04da
+/Scircle 16#24c8
+/Scircumflex 16#015c
+/Scommaaccent 16#0218
+/Sdotaccent 16#1e60
+/Sdotbelow 16#1e62
+/Sdotbelowdotaccent 16#1e68
+/Seharmenian 16#054d
+/Sevenroman 16#2166
+/Shaarmenian 16#0547
+/Shacyrillic 16#0428
+/Shchacyrillic 16#0429
+/Sheicoptic 16#03e2
+/Shhacyrillic 16#04ba
+/Shimacoptic 16#03ec
+/Sigma 16#03a3
+/Sixroman 16#2165
+/Smonospace 16#ff33
+/Softsigncyrillic 16#042c
+/Ssmall 16#f773
+/Stigmagreek 16#03da
+/T 16#0054
+/Tau 16#03a4
+/Tbar 16#0166
+/Tcaron 16#0164
+/Tcedilla 16#0162
+/Tcircle 16#24c9
+/Tcircumflexbelow 16#1e70
+/Tcommaaccent 16#0162
+/Tdotaccent 16#1e6a
+/Tdotbelow 16#1e6c
+/Tecyrillic 16#0422
+/Tedescendercyrillic 16#04ac
+/Tenroman 16#2169
+/Tetsecyrillic 16#04b4
+/Theta 16#0398
+/Thook 16#01ac
+/Thorn 16#00de
+/Thornsmall 16#f7fe
+/Threeroman 16#2162
+/Tildesmall 16#f6fe
+/Tiwnarmenian 16#054f
+/Tlinebelow 16#1e6e
+/Tmonospace 16#ff34
+/Toarmenian 16#0539
+/Tonefive 16#01bc
+/Tonesix 16#0184
+/Tonetwo 16#01a7
+/Tretroflexhook 16#01ae
+/Tsecyrillic 16#0426
+/Tshecyrillic 16#040b
+/Tsmall 16#f774
+/Twelveroman 16#216b
+/Tworoman 16#2161
+/U 16#0055
+/Uacute 16#00da
+/Uacutesmall 16#f7fa
+/Ubreve 16#016c
+/Ucaron 16#01d3
+/Ucircle 16#24ca
+/Ucircumflex 16#00db
+/Ucircumflexbelow 16#1e76
+/Ucircumflexsmall 16#f7fb
+/Ucyrillic 16#0423
+/Udblacute 16#0170
+/Udblgrave 16#0214
+/Udieresis 16#00dc
+/Udieresisacute 16#01d7
+/Udieresisbelow 16#1e72
+/Udieresiscaron 16#01d9
+/Udieresiscyrillic 16#04f0
+/Udieresisgrave 16#01db
+/Udieresismacron 16#01d5
+/Udieresissmall 16#f7fc
+/Udotbelow 16#1ee4
+/Ugrave 16#00d9
+/Ugravesmall 16#f7f9
+/Uhookabove 16#1ee6
+/Uhorn 16#01af
+/Uhornacute 16#1ee8
+/Uhorndotbelow 16#1ef0
+/Uhorngrave 16#1eea
+/Uhornhookabove 16#1eec
+/Uhorntilde 16#1eee
+/Uhungarumlaut 16#0170
+/Uhungarumlautcyrillic 16#04f2
+/Uinvertedbreve 16#0216
+/Ukcyrillic 16#0478
+/Umacron 16#016a
+/Umacroncyrillic 16#04ee
+/Umacrondieresis 16#1e7a
+/Umonospace 16#ff35
+/Uogonek 16#0172
+/Upsilon 16#03a5
+/Upsilon1 16#03d2
+/Upsilonacutehooksymbolgreek 16#03d3
+/Upsilonafrican 16#01b1
+/Upsilondieresis 16#03ab
+/Upsilondieresishooksymbolgreek 16#03d4
+/Upsilonhooksymbol 16#03d2
+/Upsilontonos 16#038e
+/Uring 16#016e
+/Ushortcyrillic 16#040e
+/Usmall 16#f775
+/Ustraightcyrillic 16#04ae
+/Ustraightstrokecyrillic 16#04b0
+/Utilde 16#0168
+/Utildeacute 16#1e78
+/Utildebelow 16#1e74
+/V 16#0056
+/Vcircle 16#24cb
+/Vdotbelow 16#1e7e
+/Vecyrillic 16#0412
+/Vewarmenian 16#054e
+/Vhook 16#01b2
+/Vmonospace 16#ff36
+/Voarmenian 16#0548
+/Vsmall 16#f776
+/Vtilde 16#1e7c
+/W 16#0057
+/Wacute 16#1e82
+/Wcircle 16#24cc
+/Wcircumflex 16#0174
+/Wdieresis 16#1e84
+/Wdotaccent 16#1e86
+/Wdotbelow 16#1e88
+/Wgrave 16#1e80
+/Wmonospace 16#ff37
+/Wsmall 16#f777
+/X 16#0058
+/Xcircle 16#24cd
+/Xdieresis 16#1e8c
+/Xdotaccent 16#1e8a
+/Xeharmenian 16#053d
+/Xi 16#039e
+/Xmonospace 16#ff38
+/Xsmall 16#f778
+/Y 16#0059
+/Yacute 16#00dd
+/Yacutesmall 16#f7fd
+/Yatcyrillic 16#0462
+/Ycircle 16#24ce
+/Ycircumflex 16#0176
+/Ydieresis 16#0178
+/Ydieresissmall 16#f7ff
+/Ydotaccent 16#1e8e
+/Ydotbelow 16#1ef4
+/Yericyrillic 16#042b
+/Yerudieresiscyrillic 16#04f8
+/Ygrave 16#1ef2
+/Yhook 16#01b3
+/Yhookabove 16#1ef6
+/Yiarmenian 16#0545
+/Yicyrillic 16#0407
+/Yiwnarmenian 16#0552
+/Ymonospace 16#ff39
+/Ysmall 16#f779
+/Ytilde 16#1ef8
+/Yusbigcyrillic 16#046a
+/Yusbigiotifiedcyrillic 16#046c
+/Yuslittlecyrillic 16#0466
+/Yuslittleiotifiedcyrillic 16#0468
+/Z 16#005a
+/Zaarmenian 16#0536
+/Zacute 16#0179
+/Zcaron 16#017d
+/Zcaronsmall 16#f6ff
+/Zcircle 16#24cf
+/Zcircumflex 16#1e90
+/Zdot 16#017b
+/Zdotaccent 16#017b
+/Zdotbelow 16#1e92
+/Zecyrillic 16#0417
+/Zedescendercyrillic 16#0498
+/Zedieresiscyrillic 16#04de
+/Zeta 16#0396
+/Zhearmenian 16#053a
+/Zhebrevecyrillic 16#04c1
+/Zhecyrillic 16#0416
+/Zhedescendercyrillic 16#0496
+/Zhedieresiscyrillic 16#04dc
+/Zlinebelow 16#1e94
+/Zmonospace 16#ff3a
+/Zsmall 16#f77a
+/Zstroke 16#01b5
+/a 16#0061
+/aabengali 16#0986
+/aacute 16#00e1
+/aadeva 16#0906
+/aagujarati 16#0a86
+/aagurmukhi 16#0a06
+/aamatragurmukhi 16#0a3e
+/aarusquare 16#3303
+/aavowelsignbengali 16#09be
+/aavowelsigndeva 16#093e
+/aavowelsigngujarati 16#0abe
+/abbreviationmarkarmenian 16#055f
+/abbreviationsigndeva 16#0970
+/abengali 16#0985
+/abopomofo 16#311a
+/abreve 16#0103
+/abreveacute 16#1eaf
+/abrevecyrillic 16#04d1
+/abrevedotbelow 16#1eb7
+/abrevegrave 16#1eb1
+/abrevehookabove 16#1eb3
+/abrevetilde 16#1eb5
+/acaron 16#01ce
+/acircle 16#24d0
+/acircumflex 16#00e2
+/acircumflexacute 16#1ea5
+/acircumflexdotbelow 16#1ead
+/acircumflexgrave 16#1ea7
+/acircumflexhookabove 16#1ea9
+/acircumflextilde 16#1eab
+/acute 16#00b4
+/acutebelowcmb 16#0317
+/acutecmb 16#0301
+/acutecomb 16#0301
+/acutedeva 16#0954
+/acutelowmod 16#02cf
+/acutetonecmb 16#0341
+/acyrillic 16#0430
+/adblgrave 16#0201
+/addakgurmukhi 16#0a71
+/adeva 16#0905
+/adieresis 16#00e4
+/adieresiscyrillic 16#04d3
+/adieresismacron 16#01df
+/adotbelow 16#1ea1
+/adotmacron 16#01e1
+/ae 16#00e6
+/aeacute 16#01fd
+/aekorean 16#3150
+/aemacron 16#01e3
+/afii00208 16#2015
+/afii08941 16#20a4
+/afii10017 16#0410
+/afii10018 16#0411
+/afii10019 16#0412
+/afii10020 16#0413
+/afii10021 16#0414
+/afii10022 16#0415
+/afii10023 16#0401
+/afii10024 16#0416
+/afii10025 16#0417
+/afii10026 16#0418
+/afii10027 16#0419
+/afii10028 16#041a
+/afii10029 16#041b
+/afii10030 16#041c
+/afii10031 16#041d
+/afii10032 16#041e
+/afii10033 16#041f
+/afii10034 16#0420
+/afii10035 16#0421
+/afii10036 16#0422
+/afii10037 16#0423
+/afii10038 16#0424
+/afii10039 16#0425
+/afii10040 16#0426
+/afii10041 16#0427
+/afii10042 16#0428
+/afii10043 16#0429
+/afii10044 16#042a
+/afii10045 16#042b
+/afii10046 16#042c
+/afii10047 16#042d
+/afii10048 16#042e
+/afii10049 16#042f
+/afii10050 16#0490
+/afii10051 16#0402
+/afii10052 16#0403
+/afii10053 16#0404
+/afii10054 16#0405
+/afii10055 16#0406
+/afii10056 16#0407
+/afii10057 16#0408
+/afii10058 16#0409
+/afii10059 16#040a
+/afii10060 16#040b
+/afii10061 16#040c
+/afii10062 16#040e
+/afii10063 16#f6c4
+/afii10064 16#f6c5
+/afii10065 16#0430
+/afii10066 16#0431
+/afii10067 16#0432
+/afii10068 16#0433
+/afii10069 16#0434
+/afii10070 16#0435
+/afii10071 16#0451
+/afii10072 16#0436
+/afii10073 16#0437
+/afii10074 16#0438
+/afii10075 16#0439
+/afii10076 16#043a
+/afii10077 16#043b
+/afii10078 16#043c
+/afii10079 16#043d
+/afii10080 16#043e
+/afii10081 16#043f
+/afii10082 16#0440
+/afii10083 16#0441
+/afii10084 16#0442
+/afii10085 16#0443
+/afii10086 16#0444
+/afii10087 16#0445
+/afii10088 16#0446
+/afii10089 16#0447
+/afii10090 16#0448
+/afii10091 16#0449
+/afii10092 16#044a
+/afii10093 16#044b
+/afii10094 16#044c
+/afii10095 16#044d
+/afii10096 16#044e
+/afii10097 16#044f
+/afii10098 16#0491
+/afii10099 16#0452
+/afii10100 16#0453
+/afii10101 16#0454
+/afii10102 16#0455
+/afii10103 16#0456
+/afii10104 16#0457
+/afii10105 16#0458
+/afii10106 16#0459
+/afii10107 16#045a
+/afii10108 16#045b
+/afii10109 16#045c
+/afii10110 16#045e
+/afii10145 16#040f
+/afii10146 16#0462
+/afii10147 16#0472
+/afii10148 16#0474
+/afii10192 16#f6c6
+/afii10193 16#045f
+/afii10194 16#0463
+/afii10195 16#0473
+/afii10196 16#0475
+/afii10831 16#f6c7
+/afii10832 16#f6c8
+/afii10846 16#04d9
+/afii299 16#200e
+/afii300 16#200f
+/afii301 16#200d
+/afii57381 16#066a
+/afii57388 16#060c
+/afii57392 16#0660
+/afii57393 16#0661
+/afii57394 16#0662
+/afii57395 16#0663
+/afii57396 16#0664
+/afii57397 16#0665
+/afii57398 16#0666
+/afii57399 16#0667
+/afii57400 16#0668
+/afii57401 16#0669
+/afii57403 16#061b
+/afii57407 16#061f
+/afii57409 16#0621
+/afii57410 16#0622
+/afii57411 16#0623
+/afii57412 16#0624
+/afii57413 16#0625
+/afii57414 16#0626
+/afii57415 16#0627
+/afii57416 16#0628
+/afii57417 16#0629
+/afii57418 16#062a
+/afii57419 16#062b
+/afii57420 16#062c
+/afii57421 16#062d
+/afii57422 16#062e
+/afii57423 16#062f
+/afii57424 16#0630
+/afii57425 16#0631
+/afii57426 16#0632
+/afii57427 16#0633
+/afii57428 16#0634
+/afii57429 16#0635
+/afii57430 16#0636
+/afii57431 16#0637
+/afii57432 16#0638
+/afii57433 16#0639
+/afii57434 16#063a
+/afii57440 16#0640
+/afii57441 16#0641
+/afii57442 16#0642
+/afii57443 16#0643
+/afii57444 16#0644
+/afii57445 16#0645
+/afii57446 16#0646
+/afii57448 16#0648
+/afii57449 16#0649
+/afii57450 16#064a
+/afii57451 16#064b
+/afii57452 16#064c
+/afii57453 16#064d
+/afii57454 16#064e
+/afii57455 16#064f
+/afii57456 16#0650
+/afii57457 16#0651
+/afii57458 16#0652
+/afii57470 16#0647
+/afii57505 16#06a4
+/afii57506 16#067e
+/afii57507 16#0686
+/afii57508 16#0698
+/afii57509 16#06af
+/afii57511 16#0679
+/afii57512 16#0688
+/afii57513 16#0691
+/afii57514 16#06ba
+/afii57519 16#06d2
+/afii57534 16#06d5
+/afii57636 16#20aa
+/afii57645 16#05be
+/afii57658 16#05c3
+/afii57664 16#05d0
+/afii57665 16#05d1
+/afii57666 16#05d2
+/afii57667 16#05d3
+/afii57668 16#05d4
+/afii57669 16#05d5
+/afii57670 16#05d6
+/afii57671 16#05d7
+/afii57672 16#05d8
+/afii57673 16#05d9
+/afii57674 16#05da
+/afii57675 16#05db
+/afii57676 16#05dc
+/afii57677 16#05dd
+/afii57678 16#05de
+/afii57679 16#05df
+/afii57680 16#05e0
+/afii57681 16#05e1
+/afii57682 16#05e2
+/afii57683 16#05e3
+/afii57684 16#05e4
+/afii57685 16#05e5
+/afii57686 16#05e6
+/afii57687 16#05e7
+/afii57688 16#05e8
+/afii57689 16#05e9
+/afii57690 16#05ea
+/afii57694 16#fb2a
+/afii57695 16#fb2b
+/afii57700 16#fb4b
+/afii57705 16#fb1f
+/afii57716 16#05f0
+/afii57717 16#05f1
+/afii57718 16#05f2
+/afii57723 16#fb35
+/afii57793 16#05b4
+/afii57794 16#05b5
+/afii57795 16#05b6
+/afii57796 16#05bb
+/afii57797 16#05b8
+/afii57798 16#05b7
+/afii57799 16#05b0
+/afii57800 16#05b2
+/afii57801 16#05b1
+/afii57802 16#05b3
+/afii57803 16#05c2
+/afii57804 16#05c1
+/afii57806 16#05b9
+/afii57807 16#05bc
+/afii57839 16#05bd
+/afii57841 16#05bf
+/afii57842 16#05c0
+/afii57929 16#02bc
+/afii61248 16#2105
+/afii61289 16#2113
+/afii61352 16#2116
+/afii61573 16#202c
+/afii61574 16#202d
+/afii61575 16#202e
+/afii61664 16#200c
+/afii63167 16#066d
+/afii64937 16#02bd
+/agrave 16#00e0
+/agujarati 16#0a85
+/agurmukhi 16#0a05
+/ahiragana 16#3042
+/ahookabove 16#1ea3
+/aibengali 16#0990
+/aibopomofo 16#311e
+/aideva 16#0910
+/aiecyrillic 16#04d5
+/aigujarati 16#0a90
+/aigurmukhi 16#0a10
+/aimatragurmukhi 16#0a48
+/ainarabic 16#0639
+/ainfinalarabic 16#feca
+/aininitialarabic 16#fecb
+/ainmedialarabic 16#fecc
+/ainvertedbreve 16#0203
+/aivowelsignbengali 16#09c8
+/aivowelsigndeva 16#0948
+/aivowelsigngujarati 16#0ac8
+/akatakana 16#30a2
+/akatakanahalfwidth 16#ff71
+/akorean 16#314f
+/alef 16#05d0
+/alefarabic 16#0627
+/alefdageshhebrew 16#fb30
+/aleffinalarabic 16#fe8e
+/alefhamzaabovearabic 16#0623
+/alefhamzaabovefinalarabic 16#fe84
+/alefhamzabelowarabic 16#0625
+/alefhamzabelowfinalarabic 16#fe88
+/alefhebrew 16#05d0
+/aleflamedhebrew 16#fb4f
+/alefmaddaabovearabic 16#0622
+/alefmaddaabovefinalarabic 16#fe82
+/alefmaksuraarabic 16#0649
+/alefmaksurafinalarabic 16#fef0
+/alefmaksurainitialarabic 16#fef3
+/alefmaksuramedialarabic 16#fef4
+/alefpatahhebrew 16#fb2e
+/alefqamatshebrew 16#fb2f
+/aleph 16#2135
+/allequal 16#224c
+/alpha 16#03b1
+/alphatonos 16#03ac
+/amacron 16#0101
+/amonospace 16#ff41
+/ampersand 16#0026
+/ampersandmonospace 16#ff06
+/ampersandsmall 16#f726
+/amsquare 16#33c2
+/anbopomofo 16#3122
+/angbopomofo 16#3124
+/angkhankhuthai 16#0e5a
+/angle 16#2220
+/anglebracketleft 16#3008
+/anglebracketleftvertical 16#fe3f
+/anglebracketright 16#3009
+/anglebracketrightvertical 16#fe40
+/angleleft 16#2329
+/angleright 16#232a
+/angstrom 16#212b
+/anoteleia 16#0387
+/anudattadeva 16#0952
+/anusvarabengali 16#0982
+/anusvaradeva 16#0902
+/anusvaragujarati 16#0a82
+/aogonek 16#0105
+/apaatosquare 16#3300
+/aparen 16#249c
+/apostrophearmenian 16#055a
+/apostrophemod 16#02bc
+/apple 16#f8ff
+/approaches 16#2250
+/approxequal 16#2248
+/approxequalorimage 16#2252
+/approximatelyequal 16#2245
+/araeaekorean 16#318e
+/araeakorean 16#318d
+/arc 16#2312
+/arighthalfring 16#1e9a
+/aring 16#00e5
+/aringacute 16#01fb
+/aringbelow 16#1e01
+/arrowboth 16#2194
+/arrowdashdown 16#21e3
+/arrowdashleft 16#21e0
+/arrowdashright 16#21e2
+/arrowdashup 16#21e1
+/arrowdblboth 16#21d4
+/arrowdbldown 16#21d3
+/arrowdblleft 16#21d0
+/arrowdblright 16#21d2
+/arrowdblup 16#21d1
+/arrowdown 16#2193
+/arrowdownleft 16#2199
+/arrowdownright 16#2198
+/arrowdownwhite 16#21e9
+/arrowheaddownmod 16#02c5
+/arrowheadleftmod 16#02c2
+/arrowheadrightmod 16#02c3
+/arrowheadupmod 16#02c4
+/arrowhorizex 16#f8e7
+/arrowleft 16#2190
+/arrowleftdbl 16#21d0
+/arrowleftdblstroke 16#21cd
+/arrowleftoverright 16#21c6
+/arrowleftwhite 16#21e6
+/arrowright 16#2192
+/arrowrightdblstroke 16#21cf
+/arrowrightheavy 16#279e
+/arrowrightoverleft 16#21c4
+/arrowrightwhite 16#21e8
+/arrowtableft 16#21e4
+/arrowtabright 16#21e5
+/arrowup 16#2191
+/arrowupdn 16#2195
+/arrowupdnbse 16#21a8
+/arrowupdownbase 16#21a8
+/arrowupleft 16#2196
+/arrowupleftofdown 16#21c5
+/arrowupright 16#2197
+/arrowupwhite 16#21e7
+/arrowvertex 16#f8e6
+/asciicircum 16#005e
+/asciicircummonospace 16#ff3e
+/asciitilde 16#007e
+/asciitildemonospace 16#ff5e
+/ascript 16#0251
+/ascriptturned 16#0252
+/asmallhiragana 16#3041
+/asmallkatakana 16#30a1
+/asmallkatakanahalfwidth 16#ff67
+/asterisk 16#002a
+/asteriskaltonearabic 16#066d
+/asteriskarabic 16#066d
+/asteriskmath 16#2217
+/asteriskmonospace 16#ff0a
+/asterisksmall 16#fe61
+/asterism 16#2042
+/asuperior 16#f6e9
+/asymptoticallyequal 16#2243
+/at 16#0040
+/atilde 16#00e3
+/atmonospace 16#ff20
+/atsmall 16#fe6b
+/aturned 16#0250
+/aubengali 16#0994
+/aubopomofo 16#3120
+/audeva 16#0914
+/augujarati 16#0a94
+/augurmukhi 16#0a14
+/aulengthmarkbengali 16#09d7
+/aumatragurmukhi 16#0a4c
+/auvowelsignbengali 16#09cc
+/auvowelsigndeva 16#094c
+/auvowelsigngujarati 16#0acc
+/avagrahadeva 16#093d
+/aybarmenian 16#0561
+/ayin 16#05e2
+/ayinaltonehebrew 16#fb20
+/ayinhebrew 16#05e2
+/b 16#0062
+/babengali 16#09ac
+/backslash 16#005c
+/backslashmonospace 16#ff3c
+/badeva 16#092c
+/bagujarati 16#0aac
+/bagurmukhi 16#0a2c
+/bahiragana 16#3070
+/bahtthai 16#0e3f
+/bakatakana 16#30d0
+/bar 16#007c
+/barmonospace 16#ff5c
+/bbopomofo 16#3105
+/bcircle 16#24d1
+/bdotaccent 16#1e03
+/bdotbelow 16#1e05
+/beamedsixteenthnotes 16#266c
+/because 16#2235
+/becyrillic 16#0431
+/beharabic 16#0628
+/behfinalarabic 16#fe90
+/behinitialarabic 16#fe91
+/behiragana 16#3079
+/behmedialarabic 16#fe92
+/behmeeminitialarabic 16#fc9f
+/behmeemisolatedarabic 16#fc08
+/behnoonfinalarabic 16#fc6d
+/bekatakana 16#30d9
+/benarmenian 16#0562
+/bet 16#05d1
+/beta 16#03b2
+/betasymbolgreek 16#03d0
+/betdagesh 16#fb31
+/betdageshhebrew 16#fb31
+/bethebrew 16#05d1
+/betrafehebrew 16#fb4c
+/bhabengali 16#09ad
+/bhadeva 16#092d
+/bhagujarati 16#0aad
+/bhagurmukhi 16#0a2d
+/bhook 16#0253
+/bihiragana 16#3073
+/bikatakana 16#30d3
+/bilabialclick 16#0298
+/bindigurmukhi 16#0a02
+/birusquare 16#3331
+/blackcircle 16#25cf
+/blackdiamond 16#25c6
+/blackdownpointingtriangle 16#25bc
+/blackleftpointingpointer 16#25c4
+/blackleftpointingtriangle 16#25c0
+/blacklenticularbracketleft 16#3010
+/blacklenticularbracketleftvertical 16#fe3b
+/blacklenticularbracketright 16#3011
+/blacklenticularbracketrightvertical 16#fe3c
+/blacklowerlefttriangle 16#25e3
+/blacklowerrighttriangle 16#25e2
+/blackrectangle 16#25ac
+/blackrightpointingpointer 16#25ba
+/blackrightpointingtriangle 16#25b6
+/blacksmallsquare 16#25aa
+/blacksmilingface 16#263b
+/blacksquare 16#25a0
+/blackstar 16#2605
+/blackupperlefttriangle 16#25e4
+/blackupperrighttriangle 16#25e5
+/blackuppointingsmalltriangle 16#25b4
+/blackuppointingtriangle 16#25b2
+/blank 16#2423
+/blinebelow 16#1e07
+/block 16#2588
+/bmonospace 16#ff42
+/bobaimaithai 16#0e1a
+/bohiragana 16#307c
+/bokatakana 16#30dc
+/bparen 16#249d
+/bqsquare 16#33c3
+/braceex 16#f8f4
+/braceleft 16#007b
+/braceleftbt 16#f8f3
+/braceleftmid 16#f8f2
+/braceleftmonospace 16#ff5b
+/braceleftsmall 16#fe5b
+/bracelefttp 16#f8f1
+/braceleftvertical 16#fe37
+/braceright 16#007d
+/bracerightbt 16#f8fe
+/bracerightmid 16#f8fd
+/bracerightmonospace 16#ff5d
+/bracerightsmall 16#fe5c
+/bracerighttp 16#f8fc
+/bracerightvertical 16#fe38
+/bracketleft 16#005b
+/bracketleftbt 16#f8f0
+/bracketleftex 16#f8ef
+/bracketleftmonospace 16#ff3b
+/bracketlefttp 16#f8ee
+/bracketright 16#005d
+/bracketrightbt 16#f8fb
+/bracketrightex 16#f8fa
+/bracketrightmonospace 16#ff3d
+/bracketrighttp 16#f8f9
+/breve 16#02d8
+/brevebelowcmb 16#032e
+/brevecmb 16#0306
+/breveinvertedbelowcmb 16#032f
+/breveinvertedcmb 16#0311
+/breveinverteddoublecmb 16#0361
+/bridgebelowcmb 16#032a
+/bridgeinvertedbelowcmb 16#033a
+/brokenbar 16#00a6
+/bstroke 16#0180
+/bsuperior 16#f6ea
+/btopbar 16#0183
+/buhiragana 16#3076
+/bukatakana 16#30d6
+/bullet 16#2022
+/bulletinverse 16#25d8
+/bulletoperator 16#2219
+/bullseye 16#25ce
+/c 16#0063
+/caarmenian 16#056e
+/cabengali 16#099a
+/cacute 16#0107
+/cadeva 16#091a
+/cagujarati 16#0a9a
+/cagurmukhi 16#0a1a
+/calsquare 16#3388
+/candrabindubengali 16#0981
+/candrabinducmb 16#0310
+/candrabindudeva 16#0901
+/candrabindugujarati 16#0a81
+/capslock 16#21ea
+/careof 16#2105
+/caron 16#02c7
+/caronbelowcmb 16#032c
+/caroncmb 16#030c
+/carriagereturn 16#21b5
+/cbopomofo 16#3118
+/ccaron 16#010d
+/ccedilla 16#00e7
+/ccedillaacute 16#1e09
+/ccircle 16#24d2
+/ccircumflex 16#0109
+/ccurl 16#0255
+/cdot 16#010b
+/cdotaccent 16#010b
+/cdsquare 16#33c5
+/cedilla 16#00b8
+/cedillacmb 16#0327
+/cent 16#00a2
+/centigrade 16#2103
+/centinferior 16#f6df
+/centmonospace 16#ffe0
+/centoldstyle 16#f7a2
+/centsuperior 16#f6e0
+/chaarmenian 16#0579
+/chabengali 16#099b
+/chadeva 16#091b
+/chagujarati 16#0a9b
+/chagurmukhi 16#0a1b
+/chbopomofo 16#3114
+/cheabkhasiancyrillic 16#04bd
+/checkmark 16#2713
+/checyrillic 16#0447
+/chedescenderabkhasiancyrillic 16#04bf
+/chedescendercyrillic 16#04b7
+/chedieresiscyrillic 16#04f5
+/cheharmenian 16#0573
+/chekhakassiancyrillic 16#04cc
+/cheverticalstrokecyrillic 16#04b9
+/chi 16#03c7
+/chieuchacirclekorean 16#3277
+/chieuchaparenkorean 16#3217
+/chieuchcirclekorean 16#3269
+/chieuchkorean 16#314a
+/chieuchparenkorean 16#3209
+/chochangthai 16#0e0a
+/chochanthai 16#0e08
+/chochingthai 16#0e09
+/chochoethai 16#0e0c
+/chook 16#0188
+/cieucacirclekorean 16#3276
+/cieucaparenkorean 16#3216
+/cieuccirclekorean 16#3268
+/cieuckorean 16#3148
+/cieucparenkorean 16#3208
+/cieucuparenkorean 16#321c
+/circle 16#25cb
+/circlemultiply 16#2297
+/circleot 16#2299
+/circleplus 16#2295
+/circlepostalmark 16#3036
+/circlewithlefthalfblack 16#25d0
+/circlewithrighthalfblack 16#25d1
+/circumflex 16#02c6
+/circumflexbelowcmb 16#032d
+/circumflexcmb 16#0302
+/clear 16#2327
+/clickalveolar 16#01c2
+/clickdental 16#01c0
+/clicklateral 16#01c1
+/clickretroflex 16#01c3
+/club 16#2663
+/clubsuitblack 16#2663
+/clubsuitwhite 16#2667
+/cmcubedsquare 16#33a4
+/cmonospace 16#ff43
+/cmsquaredsquare 16#33a0
+/coarmenian 16#0581
+/colon 16#003a
+/colonmonetary 16#20a1
+/colonmonospace 16#ff1a
+/colonsign 16#20a1
+/colonsmall 16#fe55
+/colontriangularhalfmod 16#02d1
+/colontriangularmod 16#02d0
+/comma 16#002c
+/commaabovecmb 16#0313
+/commaaboverightcmb 16#0315
+/commaaccent 16#f6c3
+/commaarabic 16#060c
+/commaarmenian 16#055d
+/commainferior 16#f6e1
+/commamonospace 16#ff0c
+/commareversedabovecmb 16#0314
+/commareversedmod 16#02bd
+/commasmall 16#fe50
+/commasuperior 16#f6e2
+/commaturnedabovecmb 16#0312
+/commaturnedmod 16#02bb
+/compass 16#263c
+/congruent 16#2245
+/contourintegral 16#222e
+/control 16#2303
+/controlACK 16#0006
+/controlBEL 16#0007
+/controlBS 16#0008
+/controlCAN 16#0018
+/controlCR 16#000d
+/controlDC1 16#0011
+/controlDC2 16#0012
+/controlDC3 16#0013
+/controlDC4 16#0014
+/controlDEL 16#007f
+/controlDLE 16#0010
+/controlEM 16#0019
+/controlENQ 16#0005
+/controlEOT 16#0004
+/controlESC 16#001b
+/controlETB 16#0017
+/controlETX 16#0003
+/controlFF 16#000c
+/controlFS 16#001c
+/controlGS 16#001d
+/controlHT 16#0009
+/controlLF 16#000a
+/controlNAK 16#0015
+/controlRS 16#001e
+/controlSI 16#000f
+/controlSO 16#000e
+/controlSOT 16#0002
+/controlSTX 16#0001
+/controlSUB 16#001a
+/controlSYN 16#0016
+/controlUS 16#001f
+/controlVT 16#000b
+/copyright 16#00a9
+/copyrightsans 16#f8e9
+/copyrightserif 16#f6d9
+/cornerbracketleft 16#300c
+/cornerbracketlefthalfwidth 16#ff62
+/cornerbracketleftvertical 16#fe41
+/cornerbracketright 16#300d
+/cornerbracketrighthalfwidth 16#ff63
+/cornerbracketrightvertical 16#fe42
+/corporationsquare 16#337f
+/cosquare 16#33c7
+/coverkgsquare 16#33c6
+/cparen 16#249e
+/cruzeiro 16#20a2
+/cstretched 16#0297
+/curlyand 16#22cf
+/curlyor 16#22ce
+/currency 16#00a4
+/cyrBreve 16#f6d1
+/cyrFlex 16#f6d2
+/cyrbreve 16#f6d4
+/cyrflex 16#f6d5
+/d 16#0064
+/daarmenian 16#0564
+/dabengali 16#09a6
+/dadarabic 16#0636
+/dadeva 16#0926
+/dadfinalarabic 16#febe
+/dadinitialarabic 16#febf
+/dadmedialarabic 16#fec0
+/dagesh 16#05bc
+/dageshhebrew 16#05bc
+/dagger 16#2020
+/daggerdbl 16#2021
+/dagujarati 16#0aa6
+/dagurmukhi 16#0a26
+/dahiragana 16#3060
+/dakatakana 16#30c0
+/dalarabic 16#062f
+/dalet 16#05d3
+/daletdagesh 16#fb33
+/daletdageshhebrew 16#fb33
+/dalethebrew 16#05d3
+/dalfinalarabic 16#feaa
+/dammaarabic 16#064f
+/dammalowarabic 16#064f
+/dammatanaltonearabic 16#064c
+/dammatanarabic 16#064c
+/danda 16#0964
+/dargahebrew 16#05a7
+/dargalefthebrew 16#05a7
+/dasiapneumatacyrilliccmb 16#0485
+/dblGrave 16#f6d3
+/dblanglebracketleft 16#300a
+/dblanglebracketleftvertical 16#fe3d
+/dblanglebracketright 16#300b
+/dblanglebracketrightvertical 16#fe3e
+/dblarchinvertedbelowcmb 16#032b
+/dblarrowleft 16#21d4
+/dblarrowright 16#21d2
+/dbldanda 16#0965
+/dblgrave 16#f6d6
+/dblgravecmb 16#030f
+/dblintegral 16#222c
+/dbllowline 16#2017
+/dbllowlinecmb 16#0333
+/dbloverlinecmb 16#033f
+/dblprimemod 16#02ba
+/dblverticalbar 16#2016
+/dblverticallineabovecmb 16#030e
+/dbopomofo 16#3109
+/dbsquare 16#33c8
+/dcaron 16#010f
+/dcedilla 16#1e11
+/dcircle 16#24d3
+/dcircumflexbelow 16#1e13
+/dcroat 16#0111
+/ddabengali 16#09a1
+/ddadeva 16#0921
+/ddagujarati 16#0aa1
+/ddagurmukhi 16#0a21
+/ddalarabic 16#0688
+/ddalfinalarabic 16#fb89
+/dddhadeva 16#095c
+/ddhabengali 16#09a2
+/ddhadeva 16#0922
+/ddhagujarati 16#0aa2
+/ddhagurmukhi 16#0a22
+/ddotaccent 16#1e0b
+/ddotbelow 16#1e0d
+/decimalseparatorarabic 16#066b
+/decimalseparatorpersian 16#066b
+/decyrillic 16#0434
+/degree 16#00b0
+/dehihebrew 16#05ad
+/dehiragana 16#3067
+/deicoptic 16#03ef
+/dekatakana 16#30c7
+/deleteleft 16#232b
+/deleteright 16#2326
+/delta 16#03b4
+/deltaturned 16#018d
+/denominatorminusonenumeratorbengali 16#09f8
+/dezh 16#02a4
+/dhabengali 16#09a7
+/dhadeva 16#0927
+/dhagujarati 16#0aa7
+/dhagurmukhi 16#0a27
+/dhook 16#0257
+/dialytikatonos 16#0385
+/dialytikatonoscmb 16#0344
+/diamond 16#2666
+/diamondsuitwhite 16#2662
+/dieresis 16#00a8
+/dieresisacute 16#f6d7
+/dieresisbelowcmb 16#0324
+/dieresiscmb 16#0308
+/dieresisgrave 16#f6d8
+/dieresistonos 16#0385
+/dihiragana 16#3062
+/dikatakana 16#30c2
+/dittomark 16#3003
+/divide 16#00f7
+/divides 16#2223
+/divisionslash 16#2215
+/djecyrillic 16#0452
+/dkshade 16#2593
+/dlinebelow 16#1e0f
+/dlsquare 16#3397
+/dmacron 16#0111
+/dmonospace 16#ff44
+/dnblock 16#2584
+/dochadathai 16#0e0e
+/dodekthai 16#0e14
+/dohiragana 16#3069
+/dokatakana 16#30c9
+/dollar 16#0024
+/dollarinferior 16#f6e3
+/dollarmonospace 16#ff04
+/dollaroldstyle 16#f724
+/dollarsmall 16#fe69
+/dollarsuperior 16#f6e4
+/dong 16#20ab
+/dorusquare 16#3326
+/dotaccent 16#02d9
+/dotaccentcmb 16#0307
+/dotbelowcmb 16#0323
+/dotbelowcomb 16#0323
+/dotkatakana 16#30fb
+/dotlessi 16#0131
+/dotlessj 16#f6be
+/dotlessjstrokehook 16#0284
+/dotmath 16#22c5
+/dottedcircle 16#25cc
+/doubleyodpatah 16#fb1f
+/doubleyodpatahhebrew 16#fb1f
+/downtackbelowcmb 16#031e
+/downtackmod 16#02d5
+/dparen 16#249f
+/dsuperior 16#f6eb
+/dtail 16#0256
+/dtopbar 16#018c
+/duhiragana 16#3065
+/dukatakana 16#30c5
+/dz 16#01f3
+/dzaltone 16#02a3
+/dzcaron 16#01c6
+/dzcurl 16#02a5
+/dzeabkhasiancyrillic 16#04e1
+/dzecyrillic 16#0455
+/dzhecyrillic 16#045f
+/e 16#0065
+/eacute 16#00e9
+/earth 16#2641
+/ebengali 16#098f
+/ebopomofo 16#311c
+/ebreve 16#0115
+/ecandradeva 16#090d
+/ecandragujarati 16#0a8d
+/ecandravowelsigndeva 16#0945
+/ecandravowelsigngujarati 16#0ac5
+/ecaron 16#011b
+/ecedillabreve 16#1e1d
+/echarmenian 16#0565
+/echyiwnarmenian 16#0587
+/ecircle 16#24d4
+/ecircumflex 16#00ea
+/ecircumflexacute 16#1ebf
+/ecircumflexbelow 16#1e19
+/ecircumflexdotbelow 16#1ec7
+/ecircumflexgrave 16#1ec1
+/ecircumflexhookabove 16#1ec3
+/ecircumflextilde 16#1ec5
+/ecyrillic 16#0454
+/edblgrave 16#0205
+/edeva 16#090f
+/edieresis 16#00eb
+/edot 16#0117
+/edotaccent 16#0117
+/edotbelow 16#1eb9
+/eegurmukhi 16#0a0f
+/eematragurmukhi 16#0a47
+/efcyrillic 16#0444
+/egrave 16#00e8
+/egujarati 16#0a8f
+/eharmenian 16#0567
+/ehbopomofo 16#311d
+/ehiragana 16#3048
+/ehookabove 16#1ebb
+/eibopomofo 16#311f
+/eight 16#0038
+/eightarabic 16#0668
+/eightbengali 16#09ee
+/eightcircle 16#2467
+/eightcircleinversesansserif 16#2791
+/eightdeva 16#096e
+/eighteencircle 16#2471
+/eighteenparen 16#2485
+/eighteenperiod 16#2499
+/eightgujarati 16#0aee
+/eightgurmukhi 16#0a6e
+/eighthackarabic 16#0668
+/eighthangzhou 16#3028
+/eighthnotebeamed 16#266b
+/eightideographicparen 16#3227
+/eightinferior 16#2088
+/eightmonospace 16#ff18
+/eightoldstyle 16#f738
+/eightparen 16#247b
+/eightperiod 16#248f
+/eightpersian 16#06f8
+/eightroman 16#2177
+/eightsuperior 16#2078
+/eightthai 16#0e58
+/einvertedbreve 16#0207
+/eiotifiedcyrillic 16#0465
+/ekatakana 16#30a8
+/ekatakanahalfwidth 16#ff74
+/ekonkargurmukhi 16#0a74
+/ekorean 16#3154
+/elcyrillic 16#043b
+/element 16#2208
+/elevencircle 16#246a
+/elevenparen 16#247e
+/elevenperiod 16#2492
+/elevenroman 16#217a
+/ellipsis 16#2026
+/ellipsisvertical 16#22ee
+/emacron 16#0113
+/emacronacute 16#1e17
+/emacrongrave 16#1e15
+/emcyrillic 16#043c
+/emdash 16#2014
+/emdashvertical 16#fe31
+/emonospace 16#ff45
+/emphasismarkarmenian 16#055b
+/emptyset 16#2205
+/enbopomofo 16#3123
+/encyrillic 16#043d
+/endash 16#2013
+/endashvertical 16#fe32
+/endescendercyrillic 16#04a3
+/eng 16#014b
+/engbopomofo 16#3125
+/enghecyrillic 16#04a5
+/enhookcyrillic 16#04c8
+/enspace 16#2002
+/eogonek 16#0119
+/eokorean 16#3153
+/eopen 16#025b
+/eopenclosed 16#029a
+/eopenreversed 16#025c
+/eopenreversedclosed 16#025e
+/eopenreversedhook 16#025d
+/eparen 16#24a0
+/epsilon 16#03b5
+/epsilontonos 16#03ad
+/equal 16#003d
+/equalmonospace 16#ff1d
+/equalsmall 16#fe66
+/equalsuperior 16#207c
+/equivalence 16#2261
+/erbopomofo 16#3126
+/ercyrillic 16#0440
+/ereversed 16#0258
+/ereversedcyrillic 16#044d
+/escyrillic 16#0441
+/esdescendercyrillic 16#04ab
+/esh 16#0283
+/eshcurl 16#0286
+/eshortdeva 16#090e
+/eshortvowelsigndeva 16#0946
+/eshreversedloop 16#01aa
+/eshsquatreversed 16#0285
+/esmallhiragana 16#3047
+/esmallkatakana 16#30a7
+/esmallkatakanahalfwidth 16#ff6a
+/estimated 16#212e
+/esuperior 16#f6ec
+/eta 16#03b7
+/etarmenian 16#0568
+/etatonos 16#03ae
+/eth 16#00f0
+/etilde 16#1ebd
+/etildebelow 16#1e1b
+/etnahtafoukhhebrew 16#0591
+/etnahtafoukhlefthebrew 16#0591
+/etnahtahebrew 16#0591
+/etnahtalefthebrew 16#0591
+/eturned 16#01dd
+/eukorean 16#3161
+/euro 16#20ac
+/evowelsignbengali 16#09c7
+/evowelsigndeva 16#0947
+/evowelsigngujarati 16#0ac7
+/exclam 16#0021
+/exclamarmenian 16#055c
+/exclamdbl 16#203c
+/exclamdown 16#00a1
+/exclamdownsmall 16#f7a1
+/exclammonospace 16#ff01
+/exclamsmall 16#f721
+/existential 16#2203
+/ezh 16#0292
+/ezhcaron 16#01ef
+/ezhcurl 16#0293
+/ezhreversed 16#01b9
+/ezhtail 16#01ba
+/f 16#0066
+/fadeva 16#095e
+/fagurmukhi 16#0a5e
+/fahrenheit 16#2109
+/fathaarabic 16#064e
+/fathalowarabic 16#064e
+/fathatanarabic 16#064b
+/fbopomofo 16#3108
+/fcircle 16#24d5
+/fdotaccent 16#1e1f
+/feharabic 16#0641
+/feharmenian 16#0586
+/fehfinalarabic 16#fed2
+/fehinitialarabic 16#fed3
+/fehmedialarabic 16#fed4
+/feicoptic 16#03e5
+/female 16#2640
+/ff 16#fb00
+/ffi 16#fb03
+/ffl 16#fb04
+/fi 16#fb01
+/fifteencircle 16#246e
+/fifteenparen 16#2482
+/fifteenperiod 16#2496
+/figuredash 16#2012
+/filledbox 16#25a0
+/filledrect 16#25ac
+/finalkaf 16#05da
+/finalkafdagesh 16#fb3a
+/finalkafdageshhebrew 16#fb3a
+/finalkafhebrew 16#05da
+/finalmem 16#05dd
+/finalmemhebrew 16#05dd
+/finalnun 16#05df
+/finalnunhebrew 16#05df
+/finalpe 16#05e3
+/finalpehebrew 16#05e3
+/finaltsadi 16#05e5
+/finaltsadihebrew 16#05e5
+/firsttonechinese 16#02c9
+/fisheye 16#25c9
+/fitacyrillic 16#0473
+/five 16#0035
+/fivearabic 16#0665
+/fivebengali 16#09eb
+/fivecircle 16#2464
+/fivecircleinversesansserif 16#278e
+/fivedeva 16#096b
+/fiveeighths 16#215d
+/fivegujarati 16#0aeb
+/fivegurmukhi 16#0a6b
+/fivehackarabic 16#0665
+/fivehangzhou 16#3025
+/fiveideographicparen 16#3224
+/fiveinferior 16#2085
+/fivemonospace 16#ff15
+/fiveoldstyle 16#f735
+/fiveparen 16#2478
+/fiveperiod 16#248c
+/fivepersian 16#06f5
+/fiveroman 16#2174
+/fivesuperior 16#2075
+/fivethai 16#0e55
+/fl 16#fb02
+/florin 16#0192
+/fmonospace 16#ff46
+/fmsquare 16#3399
+/fofanthai 16#0e1f
+/fofathai 16#0e1d
+/fongmanthai 16#0e4f
+/forall 16#2200
+/four 16#0034
+/fourarabic 16#0664
+/fourbengali 16#09ea
+/fourcircle 16#2463
+/fourcircleinversesansserif 16#278d
+/fourdeva 16#096a
+/fourgujarati 16#0aea
+/fourgurmukhi 16#0a6a
+/fourhackarabic 16#0664
+/fourhangzhou 16#3024
+/fourideographicparen 16#3223
+/fourinferior 16#2084
+/fourmonospace 16#ff14
+/fournumeratorbengali 16#09f7
+/fouroldstyle 16#f734
+/fourparen 16#2477
+/fourperiod 16#248b
+/fourpersian 16#06f4
+/fourroman 16#2173
+/foursuperior 16#2074
+/fourteencircle 16#246d
+/fourteenparen 16#2481
+/fourteenperiod 16#2495
+/fourthai 16#0e54
+/fourthtonechinese 16#02cb
+/fparen 16#24a1
+/fraction 16#2044
+/franc 16#20a3
+/g 16#0067
+/gabengali 16#0997
+/gacute 16#01f5
+/gadeva 16#0917
+/gafarabic 16#06af
+/gaffinalarabic 16#fb93
+/gafinitialarabic 16#fb94
+/gafmedialarabic 16#fb95
+/gagujarati 16#0a97
+/gagurmukhi 16#0a17
+/gahiragana 16#304c
+/gakatakana 16#30ac
+/gamma 16#03b3
+/gammalatinsmall 16#0263
+/gammasuperior 16#02e0
+/gangiacoptic 16#03eb
+/gbopomofo 16#310d
+/gbreve 16#011f
+/gcaron 16#01e7
+/gcedilla 16#0123
+/gcircle 16#24d6
+/gcircumflex 16#011d
+/gcommaaccent 16#0123
+/gdot 16#0121
+/gdotaccent 16#0121
+/gecyrillic 16#0433
+/gehiragana 16#3052
+/gekatakana 16#30b2
+/geometricallyequal 16#2251
+/gereshaccenthebrew 16#059c
+/gereshhebrew 16#05f3
+/gereshmuqdamhebrew 16#059d
+/germandbls 16#00df
+/gershayimaccenthebrew 16#059e
+/gershayimhebrew 16#05f4
+/getamark 16#3013
+/ghabengali 16#0998
+/ghadarmenian 16#0572
+/ghadeva 16#0918
+/ghagujarati 16#0a98
+/ghagurmukhi 16#0a18
+/ghainarabic 16#063a
+/ghainfinalarabic 16#fece
+/ghaininitialarabic 16#fecf
+/ghainmedialarabic 16#fed0
+/ghemiddlehookcyrillic 16#0495
+/ghestrokecyrillic 16#0493
+/gheupturncyrillic 16#0491
+/ghhadeva 16#095a
+/ghhagurmukhi 16#0a5a
+/ghook 16#0260
+/ghzsquare 16#3393
+/gihiragana 16#304e
+/gikatakana 16#30ae
+/gimarmenian 16#0563
+/gimel 16#05d2
+/gimeldagesh 16#fb32
+/gimeldageshhebrew 16#fb32
+/gimelhebrew 16#05d2
+/gjecyrillic 16#0453
+/glottalinvertedstroke 16#01be
+/glottalstop 16#0294
+/glottalstopinverted 16#0296
+/glottalstopmod 16#02c0
+/glottalstopreversed 16#0295
+/glottalstopreversedmod 16#02c1
+/glottalstopreversedsuperior 16#02e4
+/glottalstopstroke 16#02a1
+/glottalstopstrokereversed 16#02a2
+/gmacron 16#1e21
+/gmonospace 16#ff47
+/gohiragana 16#3054
+/gokatakana 16#30b4
+/gparen 16#24a2
+/gpasquare 16#33ac
+/gradient 16#2207
+/grave 16#0060
+/gravebelowcmb 16#0316
+/gravecmb 16#0300
+/gravecomb 16#0300
+/gravedeva 16#0953
+/gravelowmod 16#02ce
+/gravemonospace 16#ff40
+/gravetonecmb 16#0340
+/greater 16#003e
+/greaterequal 16#2265
+/greaterequalorless 16#22db
+/greatermonospace 16#ff1e
+/greaterorequivalent 16#2273
+/greaterorless 16#2277
+/greateroverequal 16#2267
+/greatersmall 16#fe65
+/gscript 16#0261
+/gstroke 16#01e5
+/guhiragana 16#3050
+/guillemotleft 16#00ab
+/guillemotright 16#00bb
+/guilsinglleft 16#2039
+/guilsinglright 16#203a
+/gukatakana 16#30b0
+/guramusquare 16#3318
+/gysquare 16#33c9
+/h 16#0068
+/haabkhasiancyrillic 16#04a9
+/haaltonearabic 16#06c1
+/habengali 16#09b9
+/hadescendercyrillic 16#04b3
+/hadeva 16#0939
+/hagujarati 16#0ab9
+/hagurmukhi 16#0a39
+/haharabic 16#062d
+/hahfinalarabic 16#fea2
+/hahinitialarabic 16#fea3
+/hahiragana 16#306f
+/hahmedialarabic 16#fea4
+/haitusquare 16#332a
+/hakatakana 16#30cf
+/hakatakanahalfwidth 16#ff8a
+/halantgurmukhi 16#0a4d
+/hamzaarabic 16#0621
+/hamzalowarabic 16#0621
+/hangulfiller 16#3164
+/hardsigncyrillic 16#044a
+/harpoonleftbarbup 16#21bc
+/harpoonrightbarbup 16#21c0
+/hasquare 16#33ca
+/hatafpatah 16#05b2
+/hatafpatah16 16#05b2
+/hatafpatah23 16#05b2
+/hatafpatah2f 16#05b2
+/hatafpatahhebrew 16#05b2
+/hatafpatahnarrowhebrew 16#05b2
+/hatafpatahquarterhebrew 16#05b2
+/hatafpatahwidehebrew 16#05b2
+/hatafqamats 16#05b3
+/hatafqamats1b 16#05b3
+/hatafqamats28 16#05b3
+/hatafqamats34 16#05b3
+/hatafqamatshebrew 16#05b3
+/hatafqamatsnarrowhebrew 16#05b3
+/hatafqamatsquarterhebrew 16#05b3
+/hatafqamatswidehebrew 16#05b3
+/hatafsegol 16#05b1
+/hatafsegol17 16#05b1
+/hatafsegol24 16#05b1
+/hatafsegol30 16#05b1
+/hatafsegolhebrew 16#05b1
+/hatafsegolnarrowhebrew 16#05b1
+/hatafsegolquarterhebrew 16#05b1
+/hatafsegolwidehebrew 16#05b1
+/hbar 16#0127
+/hbopomofo 16#310f
+/hbrevebelow 16#1e2b
+/hcedilla 16#1e29
+/hcircle 16#24d7
+/hcircumflex 16#0125
+/hdieresis 16#1e27
+/hdotaccent 16#1e23
+/hdotbelow 16#1e25
+/he 16#05d4
+/heart 16#2665
+/heartsuitblack 16#2665
+/heartsuitwhite 16#2661
+/hedagesh 16#fb34
+/hedageshhebrew 16#fb34
+/hehaltonearabic 16#06c1
+/heharabic 16#0647
+/hehebrew 16#05d4
+/hehfinalaltonearabic 16#fba7
+/hehfinalalttwoarabic 16#feea
+/hehfinalarabic 16#feea
+/hehhamzaabovefinalarabic 16#fba5
+/hehhamzaaboveisolatedarabic 16#fba4
+/hehinitialaltonearabic 16#fba8
+/hehinitialarabic 16#feeb
+/hehiragana 16#3078
+/hehmedialaltonearabic 16#fba9
+/hehmedialarabic 16#feec
+/heiseierasquare 16#337b
+/hekatakana 16#30d8
+/hekatakanahalfwidth 16#ff8d
+/hekutaarusquare 16#3336
+/henghook 16#0267
+/herutusquare 16#3339
+/het 16#05d7
+/hethebrew 16#05d7
+/hhook 16#0266
+/hhooksuperior 16#02b1
+/hieuhacirclekorean 16#327b
+/hieuhaparenkorean 16#321b
+/hieuhcirclekorean 16#326d
+/hieuhkorean 16#314e
+/hieuhparenkorean 16#320d
+/hihiragana 16#3072
+/hikatakana 16#30d2
+/hikatakanahalfwidth 16#ff8b
+/hiriq 16#05b4
+/hiriq14 16#05b4
+/hiriq21 16#05b4
+/hiriq2d 16#05b4
+/hiriqhebrew 16#05b4
+/hiriqnarrowhebrew 16#05b4
+/hiriqquarterhebrew 16#05b4
+/hiriqwidehebrew 16#05b4
+/hlinebelow 16#1e96
+/hmonospace 16#ff48
+/hoarmenian 16#0570
+/hohipthai 16#0e2b
+/hohiragana 16#307b
+/hokatakana 16#30db
+/hokatakanahalfwidth 16#ff8e
+/holam 16#05b9
+/holam19 16#05b9
+/holam26 16#05b9
+/holam32 16#05b9
+/holamhebrew 16#05b9
+/holamnarrowhebrew 16#05b9
+/holamquarterhebrew 16#05b9
+/holamwidehebrew 16#05b9
+/honokhukthai 16#0e2e
+/hookabovecomb 16#0309
+/hookcmb 16#0309
+/hookpalatalizedbelowcmb 16#0321
+/hookretroflexbelowcmb 16#0322
+/hoonsquare 16#3342
+/horicoptic 16#03e9
+/horizontalbar 16#2015
+/horncmb 16#031b
+/hotsprings 16#2668
+/house 16#2302
+/hparen 16#24a3
+/hsuperior 16#02b0
+/hturned 16#0265
+/huhiragana 16#3075
+/huiitosquare 16#3333
+/hukatakana 16#30d5
+/hukatakanahalfwidth 16#ff8c
+/hungarumlaut 16#02dd
+/hungarumlautcmb 16#030b
+/hv 16#0195
+/hyphen 16#002d
+/hypheninferior 16#f6e5
+/hyphenmonospace 16#ff0d
+/hyphensmall 16#fe63
+/hyphensuperior 16#f6e6
+/hyphentwo 16#2010
+/i 16#0069
+/iacute 16#00ed
+/iacyrillic 16#044f
+/ibengali 16#0987
+/ibopomofo 16#3127
+/ibreve 16#012d
+/icaron 16#01d0
+/icircle 16#24d8
+/icircumflex 16#00ee
+/icyrillic 16#0456
+/idblgrave 16#0209
+/ideographearthcircle 16#328f
+/ideographfirecircle 16#328b
+/ideographicallianceparen 16#323f
+/ideographiccallparen 16#323a
+/ideographiccentrecircle 16#32a5
+/ideographicclose 16#3006
+/ideographiccomma 16#3001
+/ideographiccommaleft 16#ff64
+/ideographiccongratulationparen 16#3237
+/ideographiccorrectcircle 16#32a3
+/ideographicearthparen 16#322f
+/ideographicenterpriseparen 16#323d
+/ideographicexcellentcircle 16#329d
+/ideographicfestivalparen 16#3240
+/ideographicfinancialcircle 16#3296
+/ideographicfinancialparen 16#3236
+/ideographicfireparen 16#322b
+/ideographichaveparen 16#3232
+/ideographichighcircle 16#32a4
+/ideographiciterationmark 16#3005
+/ideographiclaborcircle 16#3298
+/ideographiclaborparen 16#3238
+/ideographicleftcircle 16#32a7
+/ideographiclowcircle 16#32a6
+/ideographicmedicinecircle 16#32a9
+/ideographicmetalparen 16#322e
+/ideographicmoonparen 16#322a
+/ideographicnameparen 16#3234
+/ideographicperiod 16#3002
+/ideographicprintcircle 16#329e
+/ideographicreachparen 16#3243
+/ideographicrepresentparen 16#3239
+/ideographicresourceparen 16#323e
+/ideographicrightcircle 16#32a8
+/ideographicsecretcircle 16#3299
+/ideographicselfparen 16#3242
+/ideographicsocietyparen 16#3233
+/ideographicspace 16#3000
+/ideographicspecialparen 16#3235
+/ideographicstockparen 16#3231
+/ideographicstudyparen 16#323b
+/ideographicsunparen 16#3230
+/ideographicsuperviseparen 16#323c
+/ideographicwaterparen 16#322c
+/ideographicwoodparen 16#322d
+/ideographiczero 16#3007
+/ideographmetalcircle 16#328e
+/ideographmooncircle 16#328a
+/ideographnamecircle 16#3294
+/ideographsuncircle 16#3290
+/ideographwatercircle 16#328c
+/ideographwoodcircle 16#328d
+/ideva 16#0907
+/idieresis 16#00ef
+/idieresisacute 16#1e2f
+/idieresiscyrillic 16#04e5
+/idotbelow 16#1ecb
+/iebrevecyrillic 16#04d7
+/iecyrillic 16#0435
+/ieungacirclekorean 16#3275
+/ieungaparenkorean 16#3215
+/ieungcirclekorean 16#3267
+/ieungkorean 16#3147
+/ieungparenkorean 16#3207
+/igrave 16#00ec
+/igujarati 16#0a87
+/igurmukhi 16#0a07
+/ihiragana 16#3044
+/ihookabove 16#1ec9
+/iibengali 16#0988
+/iicyrillic 16#0438
+/iideva 16#0908
+/iigujarati 16#0a88
+/iigurmukhi 16#0a08
+/iimatragurmukhi 16#0a40
+/iinvertedbreve 16#020b
+/iishortcyrillic 16#0439
+/iivowelsignbengali 16#09c0
+/iivowelsigndeva 16#0940
+/iivowelsigngujarati 16#0ac0
+/ij 16#0133
+/ikatakana 16#30a4
+/ikatakanahalfwidth 16#ff72
+/ikorean 16#3163
+/ilde 16#02dc
+/iluyhebrew 16#05ac
+/imacron 16#012b
+/imacroncyrillic 16#04e3
+/imageorapproximatelyequal 16#2253
+/imatragurmukhi 16#0a3f
+/imonospace 16#ff49
+/increment 16#2206
+/infinity 16#221e
+/iniarmenian 16#056b
+/integral 16#222b
+/integralbottom 16#2321
+/integralbt 16#2321
+/integralex 16#f8f5
+/integraltop 16#2320
+/integraltp 16#2320
+/intersection 16#2229
+/intisquare 16#3305
+/invbullet 16#25d8
+/invcircle 16#25d9
+/invsmileface 16#263b
+/iocyrillic 16#0451
+/iogonek 16#012f
+/iota 16#03b9
+/iotadieresis 16#03ca
+/iotadieresistonos 16#0390
+/iotalatin 16#0269
+/iotatonos 16#03af
+/iparen 16#24a4
+/irigurmukhi 16#0a72
+/ismallhiragana 16#3043
+/ismallkatakana 16#30a3
+/ismallkatakanahalfwidth 16#ff68
+/issharbengali 16#09fa
+/istroke 16#0268
+/isuperior 16#f6ed
+/iterationhiragana 16#309d
+/iterationkatakana 16#30fd
+/itilde 16#0129
+/itildebelow 16#1e2d
+/iubopomofo 16#3129
+/iucyrillic 16#044e
+/ivowelsignbengali 16#09bf
+/ivowelsigndeva 16#093f
+/ivowelsigngujarati 16#0abf
+/izhitsacyrillic 16#0475
+/izhitsadblgravecyrillic 16#0477
+/j 16#006a
+/jaarmenian 16#0571
+/jabengali 16#099c
+/jadeva 16#091c
+/jagujarati 16#0a9c
+/jagurmukhi 16#0a1c
+/jbopomofo 16#3110
+/jcaron 16#01f0
+/jcircle 16#24d9
+/jcircumflex 16#0135
+/jcrossedtail 16#029d
+/jdotlessstroke 16#025f
+/jecyrillic 16#0458
+/jeemarabic 16#062c
+/jeemfinalarabic 16#fe9e
+/jeeminitialarabic 16#fe9f
+/jeemmedialarabic 16#fea0
+/jeharabic 16#0698
+/jehfinalarabic 16#fb8b
+/jhabengali 16#099d
+/jhadeva 16#091d
+/jhagujarati 16#0a9d
+/jhagurmukhi 16#0a1d
+/jheharmenian 16#057b
+/jis 16#3004
+/jmonospace 16#ff4a
+/jparen 16#24a5
+/jsuperior 16#02b2
+/k 16#006b
+/kabashkircyrillic 16#04a1
+/kabengali 16#0995
+/kacute 16#1e31
+/kacyrillic 16#043a
+/kadescendercyrillic 16#049b
+/kadeva 16#0915
+/kaf 16#05db
+/kafarabic 16#0643
+/kafdagesh 16#fb3b
+/kafdageshhebrew 16#fb3b
+/kaffinalarabic 16#feda
+/kafhebrew 16#05db
+/kafinitialarabic 16#fedb
+/kafmedialarabic 16#fedc
+/kafrafehebrew 16#fb4d
+/kagujarati 16#0a95
+/kagurmukhi 16#0a15
+/kahiragana 16#304b
+/kahookcyrillic 16#04c4
+/kakatakana 16#30ab
+/kakatakanahalfwidth 16#ff76
+/kappa 16#03ba
+/kappasymbolgreek 16#03f0
+/kapyeounmieumkorean 16#3171
+/kapyeounphieuphkorean 16#3184
+/kapyeounpieupkorean 16#3178
+/kapyeounssangpieupkorean 16#3179
+/karoriisquare 16#330d
+/kashidaautoarabic 16#0640
+/kashidaautonosidebearingarabic 16#0640
+/kasmallkatakana 16#30f5
+/kasquare 16#3384
+/kasraarabic 16#0650
+/kasratanarabic 16#064d
+/kastrokecyrillic 16#049f
+/katahiraprolongmarkhalfwidth 16#ff70
+/kaverticalstrokecyrillic 16#049d
+/kbopomofo 16#310e
+/kcalsquare 16#3389
+/kcaron 16#01e9
+/kcedilla 16#0137
+/kcircle 16#24da
+/kcommaaccent 16#0137
+/kdotbelow 16#1e33
+/keharmenian 16#0584
+/kehiragana 16#3051
+/kekatakana 16#30b1
+/kekatakanahalfwidth 16#ff79
+/kenarmenian 16#056f
+/kesmallkatakana 16#30f6
+/kgreenlandic 16#0138
+/khabengali 16#0996
+/khacyrillic 16#0445
+/khadeva 16#0916
+/khagujarati 16#0a96
+/khagurmukhi 16#0a16
+/khaharabic 16#062e
+/khahfinalarabic 16#fea6
+/khahinitialarabic 16#fea7
+/khahmedialarabic 16#fea8
+/kheicoptic 16#03e7
+/khhadeva 16#0959
+/khhagurmukhi 16#0a59
+/khieukhacirclekorean 16#3278
+/khieukhaparenkorean 16#3218
+/khieukhcirclekorean 16#326a
+/khieukhkorean 16#314b
+/khieukhparenkorean 16#320a
+/khokhaithai 16#0e02
+/khokhonthai 16#0e05
+/khokhuatthai 16#0e03
+/khokhwaithai 16#0e04
+/khomutthai 16#0e5b
+/khook 16#0199
+/khorakhangthai 16#0e06
+/khzsquare 16#3391
+/kihiragana 16#304d
+/kikatakana 16#30ad
+/kikatakanahalfwidth 16#ff77
+/kiroguramusquare 16#3315
+/kiromeetorusquare 16#3316
+/kirosquare 16#3314
+/kiyeokacirclekorean 16#326e
+/kiyeokaparenkorean 16#320e
+/kiyeokcirclekorean 16#3260
+/kiyeokkorean 16#3131
+/kiyeokparenkorean 16#3200
+/kiyeoksioskorean 16#3133
+/kjecyrillic 16#045c
+/klinebelow 16#1e35
+/klsquare 16#3398
+/kmcubedsquare 16#33a6
+/kmonospace 16#ff4b
+/kmsquaredsquare 16#33a2
+/kohiragana 16#3053
+/kohmsquare 16#33c0
+/kokaithai 16#0e01
+/kokatakana 16#30b3
+/kokatakanahalfwidth 16#ff7a
+/kooposquare 16#331e
+/koppacyrillic 16#0481
+/koreanstandardsymbol 16#327f
+/koroniscmb 16#0343
+/kparen 16#24a6
+/kpasquare 16#33aa
+/ksicyrillic 16#046f
+/ktsquare 16#33cf
+/kturned 16#029e
+/kuhiragana 16#304f
+/kukatakana 16#30af
+/kukatakanahalfwidth 16#ff78
+/kvsquare 16#33b8
+/kwsquare 16#33be
+/l 16#006c
+/labengali 16#09b2
+/lacute 16#013a
+/ladeva 16#0932
+/lagujarati 16#0ab2
+/lagurmukhi 16#0a32
+/lakkhangyaothai 16#0e45
+/lamaleffinalarabic 16#fefc
+/lamalefhamzaabovefinalarabic 16#fef8
+/lamalefhamzaaboveisolatedarabic 16#fef7
+/lamalefhamzabelowfinalarabic 16#fefa
+/lamalefhamzabelowisolatedarabic 16#fef9
+/lamalefisolatedarabic 16#fefb
+/lamalefmaddaabovefinalarabic 16#fef6
+/lamalefmaddaaboveisolatedarabic 16#fef5
+/lamarabic 16#0644
+/lambda 16#03bb
+/lambdastroke 16#019b
+/lamed 16#05dc
+/lameddagesh 16#fb3c
+/lameddageshhebrew 16#fb3c
+/lamedhebrew 16#05dc
+/lamfinalarabic 16#fede
+/lamhahinitialarabic 16#fcca
+/laminitialarabic 16#fedf
+/lamjeeminitialarabic 16#fcc9
+/lamkhahinitialarabic 16#fccb
+/lamlamhehisolatedarabic 16#fdf2
+/lammedialarabic 16#fee0
+/lammeemhahinitialarabic 16#fd88
+/lammeeminitialarabic 16#fccc
+/largecircle 16#25ef
+/lbar 16#019a
+/lbelt 16#026c
+/lbopomofo 16#310c
+/lcaron 16#013e
+/lcedilla 16#013c
+/lcircle 16#24db
+/lcircumflexbelow 16#1e3d
+/lcommaaccent 16#013c
+/ldot 16#0140
+/ldotaccent 16#0140
+/ldotbelow 16#1e37
+/ldotbelowmacron 16#1e39
+/leftangleabovecmb 16#031a
+/lefttackbelowcmb 16#0318
+/less 16#003c
+/lessequal 16#2264
+/lessequalorgreater 16#22da
+/lessmonospace 16#ff1c
+/lessorequivalent 16#2272
+/lessorgreater 16#2276
+/lessoverequal 16#2266
+/lesssmall 16#fe64
+/lezh 16#026e
+/lfblock 16#258c
+/lhookretroflex 16#026d
+/lira 16#20a4
+/liwnarmenian 16#056c
+/lj 16#01c9
+/ljecyrillic 16#0459
+/ll 16#f6c0
+/lladeva 16#0933
+/llagujarati 16#0ab3
+/llinebelow 16#1e3b
+/llladeva 16#0934
+/llvocalicbengali 16#09e1
+/llvocalicdeva 16#0961
+/llvocalicvowelsignbengali 16#09e3
+/llvocalicvowelsigndeva 16#0963
+/lmiddletilde 16#026b
+/lmonospace 16#ff4c
+/lmsquare 16#33d0
+/lochulathai 16#0e2c
+/logicaland 16#2227
+/logicalnot 16#00ac
+/logicalnotreversed 16#2310
+/logicalor 16#2228
+/lolingthai 16#0e25
+/longs 16#017f
+/lowlinecenterline 16#fe4e
+/lowlinecmb 16#0332
+/lowlinedashed 16#fe4d
+/lozenge 16#25ca
+/lparen 16#24a7
+/lslash 16#0142
+/lsquare 16#2113
+/lsuperior 16#f6ee
+/ltshade 16#2591
+/luthai 16#0e26
+/lvocalicbengali 16#098c
+/lvocalicdeva 16#090c
+/lvocalicvowelsignbengali 16#09e2
+/lvocalicvowelsigndeva 16#0962
+/lxsquare 16#33d3
+/m 16#006d
+/mabengali 16#09ae
+/macron 16#00af
+/macronbelowcmb 16#0331
+/macroncmb 16#0304
+/macronlowmod 16#02cd
+/macronmonospace 16#ffe3
+/macute 16#1e3f
+/madeva 16#092e
+/magujarati 16#0aae
+/magurmukhi 16#0a2e
+/mahapakhhebrew 16#05a4
+/mahapakhlefthebrew 16#05a4
+/mahiragana 16#307e
+/maichattawalowleftthai 16#f895
+/maichattawalowrightthai 16#f894
+/maichattawathai 16#0e4b
+/maichattawaupperleftthai 16#f893
+/maieklowleftthai 16#f88c
+/maieklowrightthai 16#f88b
+/maiekthai 16#0e48
+/maiekupperleftthai 16#f88a
+/maihanakatleftthai 16#f884
+/maihanakatthai 16#0e31
+/maitaikhuleftthai 16#f889
+/maitaikhuthai 16#0e47
+/maitholowleftthai 16#f88f
+/maitholowrightthai 16#f88e
+/maithothai 16#0e49
+/maithoupperleftthai 16#f88d
+/maitrilowleftthai 16#f892
+/maitrilowrightthai 16#f891
+/maitrithai 16#0e4a
+/maitriupperleftthai 16#f890
+/maiyamokthai 16#0e46
+/makatakana 16#30de
+/makatakanahalfwidth 16#ff8f
+/male 16#2642
+/mansyonsquare 16#3347
+/maqafhebrew 16#05be
+/mars 16#2642
+/masoracirclehebrew 16#05af
+/masquare 16#3383
+/mbopomofo 16#3107
+/mbsquare 16#33d4
+/mcircle 16#24dc
+/mcubedsquare 16#33a5
+/mdotaccent 16#1e41
+/mdotbelow 16#1e43
+/meemarabic 16#0645
+/meemfinalarabic 16#fee2
+/meeminitialarabic 16#fee3
+/meemmedialarabic 16#fee4
+/meemmeeminitialarabic 16#fcd1
+/meemmeemisolatedarabic 16#fc48
+/meetorusquare 16#334d
+/mehiragana 16#3081
+/meizierasquare 16#337e
+/mekatakana 16#30e1
+/mekatakanahalfwidth 16#ff92
+/mem 16#05de
+/memdagesh 16#fb3e
+/memdageshhebrew 16#fb3e
+/memhebrew 16#05de
+/menarmenian 16#0574
+/merkhahebrew 16#05a5
+/merkhakefulahebrew 16#05a6
+/merkhakefulalefthebrew 16#05a6
+/merkhalefthebrew 16#05a5
+/mhook 16#0271
+/mhzsquare 16#3392
+/middledotkatakanahalfwidth 16#ff65
+/middot 16#00b7
+/mieumacirclekorean 16#3272
+/mieumaparenkorean 16#3212
+/mieumcirclekorean 16#3264
+/mieumkorean 16#3141
+/mieumpansioskorean 16#3170
+/mieumparenkorean 16#3204
+/mieumpieupkorean 16#316e
+/mieumsioskorean 16#316f
+/mihiragana 16#307f
+/mikatakana 16#30df
+/mikatakanahalfwidth 16#ff90
+/minus 16#2212
+/minusbelowcmb 16#0320
+/minuscircle 16#2296
+/minusmod 16#02d7
+/minusplus 16#2213
+/minute 16#2032
+/miribaarusquare 16#334a
+/mirisquare 16#3349
+/mlonglegturned 16#0270
+/mlsquare 16#3396
+/mmcubedsquare 16#33a3
+/mmonospace 16#ff4d
+/mmsquaredsquare 16#339f
+/mohiragana 16#3082
+/mohmsquare 16#33c1
+/mokatakana 16#30e2
+/mokatakanahalfwidth 16#ff93
+/molsquare 16#33d6
+/momathai 16#0e21
+/moverssquare 16#33a7
+/moverssquaredsquare 16#33a8
+/mparen 16#24a8
+/mpasquare 16#33ab
+/mssquare 16#33b3
+/msuperior 16#f6ef
+/mturned 16#026f
+/mu 16#00b5
+/mu1 16#00b5
+/muasquare 16#3382
+/muchgreater 16#226b
+/muchless 16#226a
+/mufsquare 16#338c
+/mugreek 16#03bc
+/mugsquare 16#338d
+/muhiragana 16#3080
+/mukatakana 16#30e0
+/mukatakanahalfwidth 16#ff91
+/mulsquare 16#3395
+/multiply 16#00d7
+/mumsquare 16#339b
+/munahhebrew 16#05a3
+/munahlefthebrew 16#05a3
+/musicalnote 16#266a
+/musicalnotedbl 16#266b
+/musicflatsign 16#266d
+/musicsharpsign 16#266f
+/mussquare 16#33b2
+/muvsquare 16#33b6
+/muwsquare 16#33bc
+/mvmegasquare 16#33b9
+/mvsquare 16#33b7
+/mwmegasquare 16#33bf
+/mwsquare 16#33bd
+/n 16#006e
+/nabengali 16#09a8
+/nabla 16#2207
+/nacute 16#0144
+/nadeva 16#0928
+/nagujarati 16#0aa8
+/nagurmukhi 16#0a28
+/nahiragana 16#306a
+/nakatakana 16#30ca
+/nakatakanahalfwidth 16#ff85
+/napostrophe 16#0149
+/nasquare 16#3381
+/nbopomofo 16#310b
+/nbspace 16#00a0
+/ncaron 16#0148
+/ncedilla 16#0146
+/ncircle 16#24dd
+/ncircumflexbelow 16#1e4b
+/ncommaaccent 16#0146
+/ndotaccent 16#1e45
+/ndotbelow 16#1e47
+/nehiragana 16#306d
+/nekatakana 16#30cd
+/nekatakanahalfwidth 16#ff88
+/newsheqelsign 16#20aa
+/nfsquare 16#338b
+/ngabengali 16#0999
+/ngadeva 16#0919
+/ngagujarati 16#0a99
+/ngagurmukhi 16#0a19
+/ngonguthai 16#0e07
+/nhiragana 16#3093
+/nhookleft 16#0272
+/nhookretroflex 16#0273
+/nieunacirclekorean 16#326f
+/nieunaparenkorean 16#320f
+/nieuncieuckorean 16#3135
+/nieuncirclekorean 16#3261
+/nieunhieuhkorean 16#3136
+/nieunkorean 16#3134
+/nieunpansioskorean 16#3168
+/nieunparenkorean 16#3201
+/nieunsioskorean 16#3167
+/nieuntikeutkorean 16#3166
+/nihiragana 16#306b
+/nikatakana 16#30cb
+/nikatakanahalfwidth 16#ff86
+/nikhahitleftthai 16#f899
+/nikhahitthai 16#0e4d
+/nine 16#0039
+/ninearabic 16#0669
+/ninebengali 16#09ef
+/ninecircle 16#2468
+/ninecircleinversesansserif 16#2792
+/ninedeva 16#096f
+/ninegujarati 16#0aef
+/ninegurmukhi 16#0a6f
+/ninehackarabic 16#0669
+/ninehangzhou 16#3029
+/nineideographicparen 16#3228
+/nineinferior 16#2089
+/ninemonospace 16#ff19
+/nineoldstyle 16#f739
+/nineparen 16#247c
+/nineperiod 16#2490
+/ninepersian 16#06f9
+/nineroman 16#2178
+/ninesuperior 16#2079
+/nineteencircle 16#2472
+/nineteenparen 16#2486
+/nineteenperiod 16#249a
+/ninethai 16#0e59
+/nj 16#01cc
+/njecyrillic 16#045a
+/nkatakana 16#30f3
+/nkatakanahalfwidth 16#ff9d
+/nlegrightlong 16#019e
+/nlinebelow 16#1e49
+/nmonospace 16#ff4e
+/nmsquare 16#339a
+/nnabengali 16#09a3
+/nnadeva 16#0923
+/nnagujarati 16#0aa3
+/nnagurmukhi 16#0a23
+/nnnadeva 16#0929
+/nohiragana 16#306e
+/nokatakana 16#30ce
+/nokatakanahalfwidth 16#ff89
+/nonbreakingspace 16#00a0
+/nonenthai 16#0e13
+/nonuthai 16#0e19
+/noonarabic 16#0646
+/noonfinalarabic 16#fee6
+/noonghunnaarabic 16#06ba
+/noonghunnafinalarabic 16#fb9f
+/nooninitialarabic 16#fee7
+/noonjeeminitialarabic 16#fcd2
+/noonjeemisolatedarabic 16#fc4b
+/noonmedialarabic 16#fee8
+/noonmeeminitialarabic 16#fcd5
+/noonmeemisolatedarabic 16#fc4e
+/noonnoonfinalarabic 16#fc8d
+/notcontains 16#220c
+/notelement 16#2209
+/notelementof 16#2209
+/notequal 16#2260
+/notgreater 16#226f
+/notgreaternorequal 16#2271
+/notgreaternorless 16#2279
+/notidentical 16#2262
+/notless 16#226e
+/notlessnorequal 16#2270
+/notparallel 16#2226
+/notprecedes 16#2280
+/notsubset 16#2284
+/notsucceeds 16#2281
+/notsuperset 16#2285
+/nowarmenian 16#0576
+/nparen 16#24a9
+/nssquare 16#33b1
+/nsuperior 16#207f
+/ntilde 16#00f1
+/nu 16#03bd
+/nuhiragana 16#306c
+/nukatakana 16#30cc
+/nukatakanahalfwidth 16#ff87
+/nuktabengali 16#09bc
+/nuktadeva 16#093c
+/nuktagujarati 16#0abc
+/nuktagurmukhi 16#0a3c
+/numbersign 16#0023
+/numbersignmonospace 16#ff03
+/numbersignsmall 16#fe5f
+/numeralsigngreek 16#0374
+/numeralsignlowergreek 16#0375
+/numero 16#2116
+/nun 16#05e0
+/nundagesh 16#fb40
+/nundageshhebrew 16#fb40
+/nunhebrew 16#05e0
+/nvsquare 16#33b5
+/nwsquare 16#33bb
+/nyabengali 16#099e
+/nyadeva 16#091e
+/nyagujarati 16#0a9e
+/nyagurmukhi 16#0a1e
+/o 16#006f
+/oacute 16#00f3
+/oangthai 16#0e2d
+/obarred 16#0275
+/obarredcyrillic 16#04e9
+/obarreddieresiscyrillic 16#04eb
+/obengali 16#0993
+/obopomofo 16#311b
+/obreve 16#014f
+/ocandradeva 16#0911
+/ocandragujarati 16#0a91
+/ocandravowelsigndeva 16#0949
+/ocandravowelsigngujarati 16#0ac9
+/ocaron 16#01d2
+/ocircle 16#24de
+/ocircumflex 16#00f4
+/ocircumflexacute 16#1ed1
+/ocircumflexdotbelow 16#1ed9
+/ocircumflexgrave 16#1ed3
+/ocircumflexhookabove 16#1ed5
+/ocircumflextilde 16#1ed7
+/ocyrillic 16#043e
+/odblacute 16#0151
+/odblgrave 16#020d
+/odeva 16#0913
+/odieresis 16#00f6
+/odieresiscyrillic 16#04e7
+/odotbelow 16#1ecd
+/oe 16#0153
+/oekorean 16#315a
+/ogonek 16#02db
+/ogonekcmb 16#0328
+/ograve 16#00f2
+/ogujarati 16#0a93
+/oharmenian 16#0585
+/ohiragana 16#304a
+/ohookabove 16#1ecf
+/ohorn 16#01a1
+/ohornacute 16#1edb
+/ohorndotbelow 16#1ee3
+/ohorngrave 16#1edd
+/ohornhookabove 16#1edf
+/ohorntilde 16#1ee1
+/ohungarumlaut 16#0151
+/oi 16#01a3
+/oinvertedbreve 16#020f
+/okatakana 16#30aa
+/okatakanahalfwidth 16#ff75
+/okorean 16#3157
+/olehebrew 16#05ab
+/omacron 16#014d
+/omacronacute 16#1e53
+/omacrongrave 16#1e51
+/omdeva 16#0950
+/omega 16#03c9
+/omega1 16#03d6
+/omegacyrillic 16#0461
+/omegalatinclosed 16#0277
+/omegaroundcyrillic 16#047b
+/omegatitlocyrillic 16#047d
+/omegatonos 16#03ce
+/omgujarati 16#0ad0
+/omicron 16#03bf
+/omicrontonos 16#03cc
+/omonospace 16#ff4f
+/one 16#0031
+/onearabic 16#0661
+/onebengali 16#09e7
+/onecircle 16#2460
+/onecircleinversesansserif 16#278a
+/onedeva 16#0967
+/onedotenleader 16#2024
+/oneeighth 16#215b
+/onefitted 16#f6dc
+/onegujarati 16#0ae7
+/onegurmukhi 16#0a67
+/onehackarabic 16#0661
+/onehalf 16#00bd
+/onehangzhou 16#3021
+/oneideographicparen 16#3220
+/oneinferior 16#2081
+/onemonospace 16#ff11
+/onenumeratorbengali 16#09f4
+/oneoldstyle 16#f731
+/oneparen 16#2474
+/oneperiod 16#2488
+/onepersian 16#06f1
+/onequarter 16#00bc
+/oneroman 16#2170
+/onesuperior 16#00b9
+/onethai 16#0e51
+/onethird 16#2153
+/oogonek 16#01eb
+/oogonekmacron 16#01ed
+/oogurmukhi 16#0a13
+/oomatragurmukhi 16#0a4b
+/oopen 16#0254
+/oparen 16#24aa
+/openbullet 16#25e6
+/option 16#2325
+/ordfeminine 16#00aa
+/ordmasculine 16#00ba
+/orthogonal 16#221f
+/oshortdeva 16#0912
+/oshortvowelsigndeva 16#094a
+/oslash 16#00f8
+/oslashacute 16#01ff
+/osmallhiragana 16#3049
+/osmallkatakana 16#30a9
+/osmallkatakanahalfwidth 16#ff6b
+/ostrokeacute 16#01ff
+/osuperior 16#f6f0
+/otcyrillic 16#047f
+/otilde 16#00f5
+/otildeacute 16#1e4d
+/otildedieresis 16#1e4f
+/oubopomofo 16#3121
+/overline 16#203e
+/overlinecenterline 16#fe4a
+/overlinecmb 16#0305
+/overlinedashed 16#fe49
+/overlinedblwavy 16#fe4c
+/overlinewavy 16#fe4b
+/overscore 16#00af
+/ovowelsignbengali 16#09cb
+/ovowelsigndeva 16#094b
+/ovowelsigngujarati 16#0acb
+/p 16#0070
+/paampssquare 16#3380
+/paasentosquare 16#332b
+/pabengali 16#09aa
+/pacute 16#1e55
+/padeva 16#092a
+/pagedown 16#21df
+/pageup 16#21de
+/pagujarati 16#0aaa
+/pagurmukhi 16#0a2a
+/pahiragana 16#3071
+/paiyannoithai 16#0e2f
+/pakatakana 16#30d1
+/palatalizationcyrilliccmb 16#0484
+/palochkacyrillic 16#04c0
+/pansioskorean 16#317f
+/paragraph 16#00b6
+/parallel 16#2225
+/parenleft 16#0028
+/parenleftaltonearabic 16#fd3e
+/parenleftbt 16#f8ed
+/parenleftex 16#f8ec
+/parenleftinferior 16#208d
+/parenleftmonospace 16#ff08
+/parenleftsmall 16#fe59
+/parenleftsuperior 16#207d
+/parenlefttp 16#f8eb
+/parenleftvertical 16#fe35
+/parenright 16#0029
+/parenrightaltonearabic 16#fd3f
+/parenrightbt 16#f8f8
+/parenrightex 16#f8f7
+/parenrightinferior 16#208e
+/parenrightmonospace 16#ff09
+/parenrightsmall 16#fe5a
+/parenrightsuperior 16#207e
+/parenrighttp 16#f8f6
+/parenrightvertical 16#fe36
+/partialdiff 16#2202
+/paseqhebrew 16#05c0
+/pashtahebrew 16#0599
+/pasquare 16#33a9
+/patah 16#05b7
+/patah11 16#05b7
+/patah1d 16#05b7
+/patah2a 16#05b7
+/patahhebrew 16#05b7
+/patahnarrowhebrew 16#05b7
+/patahquarterhebrew 16#05b7
+/patahwidehebrew 16#05b7
+/pazerhebrew 16#05a1
+/pbopomofo 16#3106
+/pcircle 16#24df
+/pdotaccent 16#1e57
+/pe 16#05e4
+/pecyrillic 16#043f
+/pedagesh 16#fb44
+/pedageshhebrew 16#fb44
+/peezisquare 16#333b
+/pefinaldageshhebrew 16#fb43
+/peharabic 16#067e
+/peharmenian 16#057a
+/pehebrew 16#05e4
+/pehfinalarabic 16#fb57
+/pehinitialarabic 16#fb58
+/pehiragana 16#307a
+/pehmedialarabic 16#fb59
+/pekatakana 16#30da
+/pemiddlehookcyrillic 16#04a7
+/perafehebrew 16#fb4e
+/percent 16#0025
+/percentarabic 16#066a
+/percentmonospace 16#ff05
+/percentsmall 16#fe6a
+/period 16#002e
+/periodarmenian 16#0589
+/periodcentered 16#00b7
+/periodhalfwidth 16#ff61
+/periodinferior 16#f6e7
+/periodmonospace 16#ff0e
+/periodsmall 16#fe52
+/periodsuperior 16#f6e8
+/perispomenigreekcmb 16#0342
+/perpendicular 16#22a5
+/perthousand 16#2030
+/peseta 16#20a7
+/pfsquare 16#338a
+/phabengali 16#09ab
+/phadeva 16#092b
+/phagujarati 16#0aab
+/phagurmukhi 16#0a2b
+/phi 16#03c6
+/phi1 16#03d5
+/phieuphacirclekorean 16#327a
+/phieuphaparenkorean 16#321a
+/phieuphcirclekorean 16#326c
+/phieuphkorean 16#314d
+/phieuphparenkorean 16#320c
+/philatin 16#0278
+/phinthuthai 16#0e3a
+/phisymbolgreek 16#03d5
+/phook 16#01a5
+/phophanthai 16#0e1e
+/phophungthai 16#0e1c
+/phosamphaothai 16#0e20
+/pi 16#03c0
+/pieupacirclekorean 16#3273
+/pieupaparenkorean 16#3213
+/pieupcieuckorean 16#3176
+/pieupcirclekorean 16#3265
+/pieupkiyeokkorean 16#3172
+/pieupkorean 16#3142
+/pieupparenkorean 16#3205
+/pieupsioskiyeokkorean 16#3174
+/pieupsioskorean 16#3144
+/pieupsiostikeutkorean 16#3175
+/pieupthieuthkorean 16#3177
+/pieuptikeutkorean 16#3173
+/pihiragana 16#3074
+/pikatakana 16#30d4
+/pisymbolgreek 16#03d6
+/piwrarmenian 16#0583
+/plus 16#002b
+/plusbelowcmb 16#031f
+/pluscircle 16#2295
+/plusminus 16#00b1
+/plusmod 16#02d6
+/plusmonospace 16#ff0b
+/plussmall 16#fe62
+/plussuperior 16#207a
+/pmonospace 16#ff50
+/pmsquare 16#33d8
+/pohiragana 16#307d
+/pointingindexdownwhite 16#261f
+/pointingindexleftwhite 16#261c
+/pointingindexrightwhite 16#261e
+/pointingindexupwhite 16#261d
+/pokatakana 16#30dd
+/poplathai 16#0e1b
+/postalmark 16#3012
+/postalmarkface 16#3020
+/pparen 16#24ab
+/precedes 16#227a
+/prescription 16#211e
+/primemod 16#02b9
+/primereversed 16#2035
+/product 16#220f
+/projective 16#2305
+/prolongedkana 16#30fc
+/propellor 16#2318
+/propersubset 16#2282
+/propersuperset 16#2283
+/proportion 16#2237
+/proportional 16#221d
+/psi 16#03c8
+/psicyrillic 16#0471
+/psilipneumatacyrilliccmb 16#0486
+/pssquare 16#33b0
+/puhiragana 16#3077
+/pukatakana 16#30d7
+/pvsquare 16#33b4
+/pwsquare 16#33ba
+/q 16#0071
+/qadeva 16#0958
+/qadmahebrew 16#05a8
+/qafarabic 16#0642
+/qaffinalarabic 16#fed6
+/qafinitialarabic 16#fed7
+/qafmedialarabic 16#fed8
+/qamats 16#05b8
+/qamats10 16#05b8
+/qamats1a 16#05b8
+/qamats1c 16#05b8
+/qamats27 16#05b8
+/qamats29 16#05b8
+/qamats33 16#05b8
+/qamatsde 16#05b8
+/qamatshebrew 16#05b8
+/qamatsnarrowhebrew 16#05b8
+/qamatsqatanhebrew 16#05b8
+/qamatsqatannarrowhebrew 16#05b8
+/qamatsqatanquarterhebrew 16#05b8
+/qamatsqatanwidehebrew 16#05b8
+/qamatsquarterhebrew 16#05b8
+/qamatswidehebrew 16#05b8
+/qarneyparahebrew 16#059f
+/qbopomofo 16#3111
+/qcircle 16#24e0
+/qhook 16#02a0
+/qmonospace 16#ff51
+/qof 16#05e7
+/qofdagesh 16#fb47
+/qofdageshhebrew 16#fb47
+/qofhebrew 16#05e7
+/qparen 16#24ac
+/quarternote 16#2669
+/qubuts 16#05bb
+/qubuts18 16#05bb
+/qubuts25 16#05bb
+/qubuts31 16#05bb
+/qubutshebrew 16#05bb
+/qubutsnarrowhebrew 16#05bb
+/qubutsquarterhebrew 16#05bb
+/qubutswidehebrew 16#05bb
+/question 16#003f
+/questionarabic 16#061f
+/questionarmenian 16#055e
+/questiondown 16#00bf
+/questiondownsmall 16#f7bf
+/questiongreek 16#037e
+/questionmonospace 16#ff1f
+/questionsmall 16#f73f
+/quotedbl 16#0022
+/quotedblbase 16#201e
+/quotedblleft 16#201c
+/quotedblmonospace 16#ff02
+/quotedblprime 16#301e
+/quotedblprimereversed 16#301d
+/quotedblright 16#201d
+/quoteleft 16#2018
+/quoteleftreversed 16#201b
+/quotereversed 16#201b
+/quoteright 16#2019
+/quoterightn 16#0149
+/quotesinglbase 16#201a
+/quotesingle 16#0027
+/quotesinglemonospace 16#ff07
+/r 16#0072
+/raarmenian 16#057c
+/rabengali 16#09b0
+/racute 16#0155
+/radeva 16#0930
+/radical 16#221a
+/radicalex 16#f8e5
+/radoverssquare 16#33ae
+/radoverssquaredsquare 16#33af
+/radsquare 16#33ad
+/rafe 16#05bf
+/rafehebrew 16#05bf
+/ragujarati 16#0ab0
+/ragurmukhi 16#0a30
+/rahiragana 16#3089
+/rakatakana 16#30e9
+/rakatakanahalfwidth 16#ff97
+/ralowerdiagonalbengali 16#09f1
+/ramiddlediagonalbengali 16#09f0
+/ramshorn 16#0264
+/ratio 16#2236
+/rbopomofo 16#3116
+/rcaron 16#0159
+/rcedilla 16#0157
+/rcircle 16#24e1
+/rcommaaccent 16#0157
+/rdblgrave 16#0211
+/rdotaccent 16#1e59
+/rdotbelow 16#1e5b
+/rdotbelowmacron 16#1e5d
+/referencemark 16#203b
+/reflexsubset 16#2286
+/reflexsuperset 16#2287
+/registered 16#00ae
+/registersans 16#f8e8
+/registerserif 16#f6da
+/reharabic 16#0631
+/reharmenian 16#0580
+/rehfinalarabic 16#feae
+/rehiragana 16#308c
+/rekatakana 16#30ec
+/rekatakanahalfwidth 16#ff9a
+/resh 16#05e8
+/reshdageshhebrew 16#fb48
+/reshhebrew 16#05e8
+/reversedtilde 16#223d
+/reviahebrew 16#0597
+/reviamugrashhebrew 16#0597
+/revlogicalnot 16#2310
+/rfishhook 16#027e
+/rfishhookreversed 16#027f
+/rhabengali 16#09dd
+/rhadeva 16#095d
+/rho 16#03c1
+/rhook 16#027d
+/rhookturned 16#027b
+/rhookturnedsuperior 16#02b5
+/rhosymbolgreek 16#03f1
+/rhotichookmod 16#02de
+/rieulacirclekorean 16#3271
+/rieulaparenkorean 16#3211
+/rieulcirclekorean 16#3263
+/rieulhieuhkorean 16#3140
+/rieulkiyeokkorean 16#313a
+/rieulkiyeoksioskorean 16#3169
+/rieulkorean 16#3139
+/rieulmieumkorean 16#313b
+/rieulpansioskorean 16#316c
+/rieulparenkorean 16#3203
+/rieulphieuphkorean 16#313f
+/rieulpieupkorean 16#313c
+/rieulpieupsioskorean 16#316b
+/rieulsioskorean 16#313d
+/rieulthieuthkorean 16#313e
+/rieultikeutkorean 16#316a
+/rieulyeorinhieuhkorean 16#316d
+/rightangle 16#221f
+/righttackbelowcmb 16#0319
+/righttriangle 16#22bf
+/rihiragana 16#308a
+/rikatakana 16#30ea
+/rikatakanahalfwidth 16#ff98
+/ring 16#02da
+/ringbelowcmb 16#0325
+/ringcmb 16#030a
+/ringhalfleft 16#02bf
+/ringhalfleftarmenian 16#0559
+/ringhalfleftbelowcmb 16#031c
+/ringhalfleftcentered 16#02d3
+/ringhalfright 16#02be
+/ringhalfrightbelowcmb 16#0339
+/ringhalfrightcentered 16#02d2
+/rinvertedbreve 16#0213
+/rittorusquare 16#3351
+/rlinebelow 16#1e5f
+/rlongleg 16#027c
+/rlonglegturned 16#027a
+/rmonospace 16#ff52
+/rohiragana 16#308d
+/rokatakana 16#30ed
+/rokatakanahalfwidth 16#ff9b
+/roruathai 16#0e23
+/rparen 16#24ad
+/rrabengali 16#09dc
+/rradeva 16#0931
+/rragurmukhi 16#0a5c
+/rreharabic 16#0691
+/rrehfinalarabic 16#fb8d
+/rrvocalicbengali 16#09e0
+/rrvocalicdeva 16#0960
+/rrvocalicgujarati 16#0ae0
+/rrvocalicvowelsignbengali 16#09c4
+/rrvocalicvowelsigndeva 16#0944
+/rrvocalicvowelsigngujarati 16#0ac4
+/rsuperior 16#f6f1
+/rtblock 16#2590
+/rturned 16#0279
+/rturnedsuperior 16#02b4
+/ruhiragana 16#308b
+/rukatakana 16#30eb
+/rukatakanahalfwidth 16#ff99
+/rupeemarkbengali 16#09f2
+/rupeesignbengali 16#09f3
+/rupiah 16#f6dd
+/ruthai 16#0e24
+/rvocalicbengali 16#098b
+/rvocalicdeva 16#090b
+/rvocalicgujarati 16#0a8b
+/rvocalicvowelsignbengali 16#09c3
+/rvocalicvowelsigndeva 16#0943
+/rvocalicvowelsigngujarati 16#0ac3
+/s 16#0073
+/sabengali 16#09b8
+/sacute 16#015b
+/sacutedotaccent 16#1e65
+/sadarabic 16#0635
+/sadeva 16#0938
+/sadfinalarabic 16#feba
+/sadinitialarabic 16#febb
+/sadmedialarabic 16#febc
+/sagujarati 16#0ab8
+/sagurmukhi 16#0a38
+/sahiragana 16#3055
+/sakatakana 16#30b5
+/sakatakanahalfwidth 16#ff7b
+/sallallahoualayhewasallamarabic 16#fdfa
+/samekh 16#05e1
+/samekhdagesh 16#fb41
+/samekhdageshhebrew 16#fb41
+/samekhhebrew 16#05e1
+/saraaathai 16#0e32
+/saraaethai 16#0e41
+/saraaimaimalaithai 16#0e44
+/saraaimaimuanthai 16#0e43
+/saraamthai 16#0e33
+/saraathai 16#0e30
+/saraethai 16#0e40
+/saraiileftthai 16#f886
+/saraiithai 16#0e35
+/saraileftthai 16#f885
+/saraithai 16#0e34
+/saraothai 16#0e42
+/saraueeleftthai 16#f888
+/saraueethai 16#0e37
+/saraueleftthai 16#f887
+/sarauethai 16#0e36
+/sarauthai 16#0e38
+/sarauuthai 16#0e39
+/sbopomofo 16#3119
+/scaron 16#0161
+/scarondotaccent 16#1e67
+/scedilla 16#015f
+/schwa 16#0259
+/schwacyrillic 16#04d9
+/schwadieresiscyrillic 16#04db
+/schwahook 16#025a
+/scircle 16#24e2
+/scircumflex 16#015d
+/scommaaccent 16#0219
+/sdotaccent 16#1e61
+/sdotbelow 16#1e63
+/sdotbelowdotaccent 16#1e69
+/seagullbelowcmb 16#033c
+/second 16#2033
+/secondtonechinese 16#02ca
+/section 16#00a7
+/seenarabic 16#0633
+/seenfinalarabic 16#feb2
+/seeninitialarabic 16#feb3
+/seenmedialarabic 16#feb4
+/segol 16#05b6
+/segol13 16#05b6
+/segol1f 16#05b6
+/segol2c 16#05b6
+/segolhebrew 16#05b6
+/segolnarrowhebrew 16#05b6
+/segolquarterhebrew 16#05b6
+/segoltahebrew 16#0592
+/segolwidehebrew 16#05b6
+/seharmenian 16#057d
+/sehiragana 16#305b
+/sekatakana 16#30bb
+/sekatakanahalfwidth 16#ff7e
+/semicolon 16#003b
+/semicolonarabic 16#061b
+/semicolonmonospace 16#ff1b
+/semicolonsmall 16#fe54
+/semivoicedmarkkana 16#309c
+/semivoicedmarkkanahalfwidth 16#ff9f
+/sentisquare 16#3322
+/sentosquare 16#3323
+/seven 16#0037
+/sevenarabic 16#0667
+/sevenbengali 16#09ed
+/sevencircle 16#2466
+/sevencircleinversesansserif 16#2790
+/sevendeva 16#096d
+/seveneighths 16#215e
+/sevengujarati 16#0aed
+/sevengurmukhi 16#0a6d
+/sevenhackarabic 16#0667
+/sevenhangzhou 16#3027
+/sevenideographicparen 16#3226
+/seveninferior 16#2087
+/sevenmonospace 16#ff17
+/sevenoldstyle 16#f737
+/sevenparen 16#247a
+/sevenperiod 16#248e
+/sevenpersian 16#06f7
+/sevenroman 16#2176
+/sevensuperior 16#2077
+/seventeencircle 16#2470
+/seventeenparen 16#2484
+/seventeenperiod 16#2498
+/seventhai 16#0e57
+/sfthyphen 16#00ad
+/shaarmenian 16#0577
+/shabengali 16#09b6
+/shacyrillic 16#0448
+/shaddaarabic 16#0651
+/shaddadammaarabic 16#fc61
+/shaddadammatanarabic 16#fc5e
+/shaddafathaarabic 16#fc60
+/shaddakasraarabic 16#fc62
+/shaddakasratanarabic 16#fc5f
+/shade 16#2592
+/shadedark 16#2593
+/shadelight 16#2591
+/shademedium 16#2592
+/shadeva 16#0936
+/shagujarati 16#0ab6
+/shagurmukhi 16#0a36
+/shalshelethebrew 16#0593
+/shbopomofo 16#3115
+/shchacyrillic 16#0449
+/sheenarabic 16#0634
+/sheenfinalarabic 16#feb6
+/sheeninitialarabic 16#feb7
+/sheenmedialarabic 16#feb8
+/sheicoptic 16#03e3
+/sheqel 16#20aa
+/sheqelhebrew 16#20aa
+/sheva 16#05b0
+/sheva115 16#05b0
+/sheva15 16#05b0
+/sheva22 16#05b0
+/sheva2e 16#05b0
+/shevahebrew 16#05b0
+/shevanarrowhebrew 16#05b0
+/shevaquarterhebrew 16#05b0
+/shevawidehebrew 16#05b0
+/shhacyrillic 16#04bb
+/shimacoptic 16#03ed
+/shin 16#05e9
+/shindagesh 16#fb49
+/shindageshhebrew 16#fb49
+/shindageshshindot 16#fb2c
+/shindageshshindothebrew 16#fb2c
+/shindageshsindot 16#fb2d
+/shindageshsindothebrew 16#fb2d
+/shindothebrew 16#05c1
+/shinhebrew 16#05e9
+/shinshindot 16#fb2a
+/shinshindothebrew 16#fb2a
+/shinsindot 16#fb2b
+/shinsindothebrew 16#fb2b
+/shook 16#0282
+/sigma 16#03c3
+/sigma1 16#03c2
+/sigmafinal 16#03c2
+/sigmalunatesymbolgreek 16#03f2
+/sihiragana 16#3057
+/sikatakana 16#30b7
+/sikatakanahalfwidth 16#ff7c
+/siluqhebrew 16#05bd
+/siluqlefthebrew 16#05bd
+/similar 16#223c
+/sindothebrew 16#05c2
+/siosacirclekorean 16#3274
+/siosaparenkorean 16#3214
+/sioscieuckorean 16#317e
+/sioscirclekorean 16#3266
+/sioskiyeokkorean 16#317a
+/sioskorean 16#3145
+/siosnieunkorean 16#317b
+/siosparenkorean 16#3206
+/siospieupkorean 16#317d
+/siostikeutkorean 16#317c
+/six 16#0036
+/sixarabic 16#0666
+/sixbengali 16#09ec
+/sixcircle 16#2465
+/sixcircleinversesansserif 16#278f
+/sixdeva 16#096c
+/sixgujarati 16#0aec
+/sixgurmukhi 16#0a6c
+/sixhackarabic 16#0666
+/sixhangzhou 16#3026
+/sixideographicparen 16#3225
+/sixinferior 16#2086
+/sixmonospace 16#ff16
+/sixoldstyle 16#f736
+/sixparen 16#2479
+/sixperiod 16#248d
+/sixpersian 16#06f6
+/sixroman 16#2175
+/sixsuperior 16#2076
+/sixteencircle 16#246f
+/sixteencurrencydenominatorbengali 16#09f9
+/sixteenparen 16#2483
+/sixteenperiod 16#2497
+/sixthai 16#0e56
+/slash 16#002f
+/slashmonospace 16#ff0f
+/slong 16#017f
+/slongdotaccent 16#1e9b
+/smileface 16#263a
+/smonospace 16#ff53
+/sofpasuqhebrew 16#05c3
+/softhyphen 16#00ad
+/softsigncyrillic 16#044c
+/sohiragana 16#305d
+/sokatakana 16#30bd
+/sokatakanahalfwidth 16#ff7f
+/soliduslongoverlaycmb 16#0338
+/solidusshortoverlaycmb 16#0337
+/sorusithai 16#0e29
+/sosalathai 16#0e28
+/sosothai 16#0e0b
+/sosuathai 16#0e2a
+/space 16#0020
+/spacehackarabic 16#0020
+/spade 16#2660
+/spadesuitblack 16#2660
+/spadesuitwhite 16#2664
+/sparen 16#24ae
+/squarebelowcmb 16#033b
+/squarecc 16#33c4
+/squarecm 16#339d
+/squarediagonalcrosshatchfill 16#25a9
+/squarehorizontalfill 16#25a4
+/squarekg 16#338f
+/squarekm 16#339e
+/squarekmcapital 16#33ce
+/squareln 16#33d1
+/squarelog 16#33d2
+/squaremg 16#338e
+/squaremil 16#33d5
+/squaremm 16#339c
+/squaremsquared 16#33a1
+/squareorthogonalcrosshatchfill 16#25a6
+/squareupperlefttolowerrightfill 16#25a7
+/squareupperrighttolowerleftfill 16#25a8
+/squareverticalfill 16#25a5
+/squarewhitewithsmallblack 16#25a3
+/srsquare 16#33db
+/ssabengali 16#09b7
+/ssadeva 16#0937
+/ssagujarati 16#0ab7
+/ssangcieuckorean 16#3149
+/ssanghieuhkorean 16#3185
+/ssangieungkorean 16#3180
+/ssangkiyeokkorean 16#3132
+/ssangnieunkorean 16#3165
+/ssangpieupkorean 16#3143
+/ssangsioskorean 16#3146
+/ssangtikeutkorean 16#3138
+/ssuperior 16#f6f2
+/sterling 16#00a3
+/sterlingmonospace 16#ffe1
+/strokelongoverlaycmb 16#0336
+/strokeshortoverlaycmb 16#0335
+/subset 16#2282
+/subsetnotequal 16#228a
+/subsetorequal 16#2286
+/succeeds 16#227b
+/suchthat 16#220b
+/suhiragana 16#3059
+/sukatakana 16#30b9
+/sukatakanahalfwidth 16#ff7d
+/sukunarabic 16#0652
+/summation 16#2211
+/sun 16#263c
+/superset 16#2283
+/supersetnotequal 16#228b
+/supersetorequal 16#2287
+/svsquare 16#33dc
+/syouwaerasquare 16#337c
+/t 16#0074
+/tabengali 16#09a4
+/tackdown 16#22a4
+/tackleft 16#22a3
+/tadeva 16#0924
+/tagujarati 16#0aa4
+/tagurmukhi 16#0a24
+/taharabic 16#0637
+/tahfinalarabic 16#fec2
+/tahinitialarabic 16#fec3
+/tahiragana 16#305f
+/tahmedialarabic 16#fec4
+/taisyouerasquare 16#337d
+/takatakana 16#30bf
+/takatakanahalfwidth 16#ff80
+/tatweelarabic 16#0640
+/tau 16#03c4
+/tav 16#05ea
+/tavdages 16#fb4a
+/tavdagesh 16#fb4a
+/tavdageshhebrew 16#fb4a
+/tavhebrew 16#05ea
+/tbar 16#0167
+/tbopomofo 16#310a
+/tcaron 16#0165
+/tccurl 16#02a8
+/tcedilla 16#0163
+/tcheharabic 16#0686
+/tchehfinalarabic 16#fb7b
+/tchehinitialarabic 16#fb7c
+/tchehmedialarabic 16#fb7d
+/tcircle 16#24e3
+/tcircumflexbelow 16#1e71
+/tcommaaccent 16#0163
+/tdieresis 16#1e97
+/tdotaccent 16#1e6b
+/tdotbelow 16#1e6d
+/tecyrillic 16#0442
+/tedescendercyrillic 16#04ad
+/teharabic 16#062a
+/tehfinalarabic 16#fe96
+/tehhahinitialarabic 16#fca2
+/tehhahisolatedarabic 16#fc0c
+/tehinitialarabic 16#fe97
+/tehiragana 16#3066
+/tehjeeminitialarabic 16#fca1
+/tehjeemisolatedarabic 16#fc0b
+/tehmarbutaarabic 16#0629
+/tehmarbutafinalarabic 16#fe94
+/tehmedialarabic 16#fe98
+/tehmeeminitialarabic 16#fca4
+/tehmeemisolatedarabic 16#fc0e
+/tehnoonfinalarabic 16#fc73
+/tekatakana 16#30c6
+/tekatakanahalfwidth 16#ff83
+/telephone 16#2121
+/telephoneblack 16#260e
+/telishagedolahebrew 16#05a0
+/telishaqetanahebrew 16#05a9
+/tencircle 16#2469
+/tenideographicparen 16#3229
+/tenparen 16#247d
+/tenperiod 16#2491
+/tenroman 16#2179
+/tesh 16#02a7
+/tet 16#05d8
+/tetdagesh 16#fb38
+/tetdageshhebrew 16#fb38
+/tethebrew 16#05d8
+/tetsecyrillic 16#04b5
+/tevirhebrew 16#059b
+/tevirlefthebrew 16#059b
+/thabengali 16#09a5
+/thadeva 16#0925
+/thagujarati 16#0aa5
+/thagurmukhi 16#0a25
+/thalarabic 16#0630
+/thalfinalarabic 16#feac
+/thanthakhatlowleftthai 16#f898
+/thanthakhatlowrightthai 16#f897
+/thanthakhatthai 16#0e4c
+/thanthakhatupperleftthai 16#f896
+/theharabic 16#062b
+/thehfinalarabic 16#fe9a
+/thehinitialarabic 16#fe9b
+/thehmedialarabic 16#fe9c
+/thereexists 16#2203
+/therefore 16#2234
+/theta 16#03b8
+/theta1 16#03d1
+/thetasymbolgreek 16#03d1
+/thieuthacirclekorean 16#3279
+/thieuthaparenkorean 16#3219
+/thieuthcirclekorean 16#326b
+/thieuthkorean 16#314c
+/thieuthparenkorean 16#320b
+/thirteencircle 16#246c
+/thirteenparen 16#2480
+/thirteenperiod 16#2494
+/thonangmonthothai 16#0e11
+/thook 16#01ad
+/thophuthaothai 16#0e12
+/thorn 16#00fe
+/thothahanthai 16#0e17
+/thothanthai 16#0e10
+/thothongthai 16#0e18
+/thothungthai 16#0e16
+/thousandcyrillic 16#0482
+/thousandsseparatorarabic 16#066c
+/thousandsseparatorpersian 16#066c
+/three 16#0033
+/threearabic 16#0663
+/threebengali 16#09e9
+/threecircle 16#2462
+/threecircleinversesansserif 16#278c
+/threedeva 16#0969
+/threeeighths 16#215c
+/threegujarati 16#0ae9
+/threegurmukhi 16#0a69
+/threehackarabic 16#0663
+/threehangzhou 16#3023
+/threeideographicparen 16#3222
+/threeinferior 16#2083
+/threemonospace 16#ff13
+/threenumeratorbengali 16#09f6
+/threeoldstyle 16#f733
+/threeparen 16#2476
+/threeperiod 16#248a
+/threepersian 16#06f3
+/threequarters 16#00be
+/threequartersemdash 16#f6de
+/threeroman 16#2172
+/threesuperior 16#00b3
+/threethai 16#0e53
+/thzsquare 16#3394
+/tihiragana 16#3061
+/tikatakana 16#30c1
+/tikatakanahalfwidth 16#ff81
+/tikeutacirclekorean 16#3270
+/tikeutaparenkorean 16#3210
+/tikeutcirclekorean 16#3262
+/tikeutkorean 16#3137
+/tikeutparenkorean 16#3202
+/tilde 16#02dc
+/tildebelowcmb 16#0330
+/tildecmb 16#0303
+/tildecomb 16#0303
+/tildedoublecmb 16#0360
+/tildeoperator 16#223c
+/tildeoverlaycmb 16#0334
+/tildeverticalcmb 16#033e
+/timescircle 16#2297
+/tipehahebrew 16#0596
+/tipehalefthebrew 16#0596
+/tippigurmukhi 16#0a70
+/titlocyrilliccmb 16#0483
+/tiwnarmenian 16#057f
+/tlinebelow 16#1e6f
+/tmonospace 16#ff54
+/toarmenian 16#0569
+/tohiragana 16#3068
+/tokatakana 16#30c8
+/tokatakanahalfwidth 16#ff84
+/tonebarextrahighmod 16#02e5
+/tonebarextralowmod 16#02e9
+/tonebarhighmod 16#02e6
+/tonebarlowmod 16#02e8
+/tonebarmidmod 16#02e7
+/tonefive 16#01bd
+/tonesix 16#0185
+/tonetwo 16#01a8
+/tonos 16#0384
+/tonsquare 16#3327
+/topatakthai 16#0e0f
+/tortoiseshellbracketleft 16#3014
+/tortoiseshellbracketleftsmall 16#fe5d
+/tortoiseshellbracketleftvertical 16#fe39
+/tortoiseshellbracketright 16#3015
+/tortoiseshellbracketrightsmall 16#fe5e
+/tortoiseshellbracketrightvertical 16#fe3a
+/totaothai 16#0e15
+/tpalatalhook 16#01ab
+/tparen 16#24af
+/trademark 16#2122
+/trademarksans 16#f8ea
+/trademarkserif 16#f6db
+/tretroflexhook 16#0288
+/triagdn 16#25bc
+/triaglf 16#25c4
+/triagrt 16#25ba
+/triagup 16#25b2
+/ts 16#02a6
+/tsadi 16#05e6
+/tsadidagesh 16#fb46
+/tsadidageshhebrew 16#fb46
+/tsadihebrew 16#05e6
+/tsecyrillic 16#0446
+/tsere 16#05b5
+/tsere12 16#05b5
+/tsere1e 16#05b5
+/tsere2b 16#05b5
+/tserehebrew 16#05b5
+/tserenarrowhebrew 16#05b5
+/tserequarterhebrew 16#05b5
+/tserewidehebrew 16#05b5
+/tshecyrillic 16#045b
+/tsuperior 16#f6f3
+/ttabengali 16#099f
+/ttadeva 16#091f
+/ttagujarati 16#0a9f
+/ttagurmukhi 16#0a1f
+/tteharabic 16#0679
+/ttehfinalarabic 16#fb67
+/ttehinitialarabic 16#fb68
+/ttehmedialarabic 16#fb69
+/tthabengali 16#09a0
+/tthadeva 16#0920
+/tthagujarati 16#0aa0
+/tthagurmukhi 16#0a20
+/tturned 16#0287
+/tuhiragana 16#3064
+/tukatakana 16#30c4
+/tukatakanahalfwidth 16#ff82
+/tusmallhiragana 16#3063
+/tusmallkatakana 16#30c3
+/tusmallkatakanahalfwidth 16#ff6f
+/twelvecircle 16#246b
+/twelveparen 16#247f
+/twelveperiod 16#2493
+/twelveroman 16#217b
+/twentycircle 16#2473
+/twentyhangzhou 16#5344
+/twentyparen 16#2487
+/twentyperiod 16#249b
+/two 16#0032
+/twoarabic 16#0662
+/twobengali 16#09e8
+/twocircle 16#2461
+/twocircleinversesansserif 16#278b
+/twodeva 16#0968
+/twodotenleader 16#2025
+/twodotleader 16#2025
+/twodotleadervertical 16#fe30
+/twogujarati 16#0ae8
+/twogurmukhi 16#0a68
+/twohackarabic 16#0662
+/twohangzhou 16#3022
+/twoideographicparen 16#3221
+/twoinferior 16#2082
+/twomonospace 16#ff12
+/twonumeratorbengali 16#09f5
+/twooldstyle 16#f732
+/twoparen 16#2475
+/twoperiod 16#2489
+/twopersian 16#06f2
+/tworoman 16#2171
+/twostroke 16#01bb
+/twosuperior 16#00b2
+/twothai 16#0e52
+/twothirds 16#2154
+/u 16#0075
+/uacute 16#00fa
+/ubar 16#0289
+/ubengali 16#0989
+/ubopomofo 16#3128
+/ubreve 16#016d
+/ucaron 16#01d4
+/ucircle 16#24e4
+/ucircumflex 16#00fb
+/ucircumflexbelow 16#1e77
+/ucyrillic 16#0443
+/udattadeva 16#0951
+/udblacute 16#0171
+/udblgrave 16#0215
+/udeva 16#0909
+/udieresis 16#00fc
+/udieresisacute 16#01d8
+/udieresisbelow 16#1e73
+/udieresiscaron 16#01da
+/udieresiscyrillic 16#04f1
+/udieresisgrave 16#01dc
+/udieresismacron 16#01d6
+/udotbelow 16#1ee5
+/ugrave 16#00f9
+/ugujarati 16#0a89
+/ugurmukhi 16#0a09
+/uhiragana 16#3046
+/uhookabove 16#1ee7
+/uhorn 16#01b0
+/uhornacute 16#1ee9
+/uhorndotbelow 16#1ef1
+/uhorngrave 16#1eeb
+/uhornhookabove 16#1eed
+/uhorntilde 16#1eef
+/uhungarumlaut 16#0171
+/uhungarumlautcyrillic 16#04f3
+/uinvertedbreve 16#0217
+/ukatakana 16#30a6
+/ukatakanahalfwidth 16#ff73
+/ukcyrillic 16#0479
+/ukorean 16#315c
+/umacron 16#016b
+/umacroncyrillic 16#04ef
+/umacrondieresis 16#1e7b
+/umatragurmukhi 16#0a41
+/umonospace 16#ff55
+/underscore 16#005f
+/underscoredbl 16#2017
+/underscoremonospace 16#ff3f
+/underscorevertical 16#fe33
+/underscorewavy 16#fe4f
+/union 16#222a
+/universal 16#2200
+/uogonek 16#0173
+/uparen 16#24b0
+/upblock 16#2580
+/upperdothebrew 16#05c4
+/upsilon 16#03c5
+/upsilondieresis 16#03cb
+/upsilondieresistonos 16#03b0
+/upsilonlatin 16#028a
+/upsilontonos 16#03cd
+/uptackbelowcmb 16#031d
+/uptackmod 16#02d4
+/uragurmukhi 16#0a73
+/uring 16#016f
+/ushortcyrillic 16#045e
+/usmallhiragana 16#3045
+/usmallkatakana 16#30a5
+/usmallkatakanahalfwidth 16#ff69
+/ustraightcyrillic 16#04af
+/ustraightstrokecyrillic 16#04b1
+/utilde 16#0169
+/utildeacute 16#1e79
+/utildebelow 16#1e75
+/uubengali 16#098a
+/uudeva 16#090a
+/uugujarati 16#0a8a
+/uugurmukhi 16#0a0a
+/uumatragurmukhi 16#0a42
+/uuvowelsignbengali 16#09c2
+/uuvowelsigndeva 16#0942
+/uuvowelsigngujarati 16#0ac2
+/uvowelsignbengali 16#09c1
+/uvowelsigndeva 16#0941
+/uvowelsigngujarati 16#0ac1
+/v 16#0076
+/vadeva 16#0935
+/vagujarati 16#0ab5
+/vagurmukhi 16#0a35
+/vakatakana 16#30f7
+/vav 16#05d5
+/vavdagesh 16#fb35
+/vavdagesh65 16#fb35
+/vavdageshhebrew 16#fb35
+/vavhebrew 16#05d5
+/vavholam 16#fb4b
+/vavholamhebrew 16#fb4b
+/vavvavhebrew 16#05f0
+/vavyodhebrew 16#05f1
+/vcircle 16#24e5
+/vdotbelow 16#1e7f
+/vecyrillic 16#0432
+/veharabic 16#06a4
+/vehfinalarabic 16#fb6b
+/vehinitialarabic 16#fb6c
+/vehmedialarabic 16#fb6d
+/vekatakana 16#30f9
+/venus 16#2640
+/verticalbar 16#007c
+/verticallineabovecmb 16#030d
+/verticallinebelowcmb 16#0329
+/verticallinelowmod 16#02cc
+/verticallinemod 16#02c8
+/vewarmenian 16#057e
+/vhook 16#028b
+/vikatakana 16#30f8
+/viramabengali 16#09cd
+/viramadeva 16#094d
+/viramagujarati 16#0acd
+/visargabengali 16#0983
+/visargadeva 16#0903
+/visargagujarati 16#0a83
+/vmonospace 16#ff56
+/voarmenian 16#0578
+/voicediterationhiragana 16#309e
+/voicediterationkatakana 16#30fe
+/voicedmarkkana 16#309b
+/voicedmarkkanahalfwidth 16#ff9e
+/vokatakana 16#30fa
+/vparen 16#24b1
+/vtilde 16#1e7d
+/vturned 16#028c
+/vuhiragana 16#3094
+/vukatakana 16#30f4
+/w 16#0077
+/wacute 16#1e83
+/waekorean 16#3159
+/wahiragana 16#308f
+/wakatakana 16#30ef
+/wakatakanahalfwidth 16#ff9c
+/wakorean 16#3158
+/wasmallhiragana 16#308e
+/wasmallkatakana 16#30ee
+/wattosquare 16#3357
+/wavedash 16#301c
+/wavyunderscorevertical 16#fe34
+/wawarabic 16#0648
+/wawfinalarabic 16#feee
+/wawhamzaabovearabic 16#0624
+/wawhamzaabovefinalarabic 16#fe86
+/wbsquare 16#33dd
+/wcircle 16#24e6
+/wcircumflex 16#0175
+/wdieresis 16#1e85
+/wdotaccent 16#1e87
+/wdotbelow 16#1e89
+/wehiragana 16#3091
+/weierstrass 16#2118
+/wekatakana 16#30f1
+/wekorean 16#315e
+/weokorean 16#315d
+/wgrave 16#1e81
+/whitebullet 16#25e6
+/whitecircle 16#25cb
+/whitecircleinverse 16#25d9
+/whitecornerbracketleft 16#300e
+/whitecornerbracketleftvertical 16#fe43
+/whitecornerbracketright 16#300f
+/whitecornerbracketrightvertical 16#fe44
+/whitediamond 16#25c7
+/whitediamondcontainingblacksmalldiamond 16#25c8
+/whitedownpointingsmalltriangle 16#25bf
+/whitedownpointingtriangle 16#25bd
+/whiteleftpointingsmalltriangle 16#25c3
+/whiteleftpointingtriangle 16#25c1
+/whitelenticularbracketleft 16#3016
+/whitelenticularbracketright 16#3017
+/whiterightpointingsmalltriangle 16#25b9
+/whiterightpointingtriangle 16#25b7
+/whitesmallsquare 16#25ab
+/whitesmilingface 16#263a
+/whitesquare 16#25a1
+/whitestar 16#2606
+/whitetelephone 16#260f
+/whitetortoiseshellbracketleft 16#3018
+/whitetortoiseshellbracketright 16#3019
+/whiteuppointingsmalltriangle 16#25b5
+/whiteuppointingtriangle 16#25b3
+/wihiragana 16#3090
+/wikatakana 16#30f0
+/wikorean 16#315f
+/wmonospace 16#ff57
+/wohiragana 16#3092
+/wokatakana 16#30f2
+/wokatakanahalfwidth 16#ff66
+/won 16#20a9
+/wonmonospace 16#ffe6
+/wowaenthai 16#0e27
+/wparen 16#24b2
+/wring 16#1e98
+/wsuperior 16#02b7
+/wturned 16#028d
+/wynn 16#01bf
+/x 16#0078
+/xabovecmb 16#033d
+/xbopomofo 16#3112
+/xcircle 16#24e7
+/xdieresis 16#1e8d
+/xdotaccent 16#1e8b
+/xeharmenian 16#056d
+/xi 16#03be
+/xmonospace 16#ff58
+/xparen 16#24b3
+/xsuperior 16#02e3
+/y 16#0079
+/yaadosquare 16#334e
+/yabengali 16#09af
+/yacute 16#00fd
+/yadeva 16#092f
+/yaekorean 16#3152
+/yagujarati 16#0aaf
+/yagurmukhi 16#0a2f
+/yahiragana 16#3084
+/yakatakana 16#30e4
+/yakatakanahalfwidth 16#ff94
+/yakorean 16#3151
+/yamakkanthai 16#0e4e
+/yasmallhiragana 16#3083
+/yasmallkatakana 16#30e3
+/yasmallkatakanahalfwidth 16#ff6c
+/yatcyrillic 16#0463
+/ycircle 16#24e8
+/ycircumflex 16#0177
+/ydieresis 16#00ff
+/ydotaccent 16#1e8f
+/ydotbelow 16#1ef5
+/yeharabic 16#064a
+/yehbarreearabic 16#06d2
+/yehbarreefinalarabic 16#fbaf
+/yehfinalarabic 16#fef2
+/yehhamzaabovearabic 16#0626
+/yehhamzaabovefinalarabic 16#fe8a
+/yehhamzaaboveinitialarabic 16#fe8b
+/yehhamzaabovemedialarabic 16#fe8c
+/yehinitialarabic 16#fef3
+/yehmedialarabic 16#fef4
+/yehmeeminitialarabic 16#fcdd
+/yehmeemisolatedarabic 16#fc58
+/yehnoonfinalarabic 16#fc94
+/yehthreedotsbelowarabic 16#06d1
+/yekorean 16#3156
+/yen 16#00a5
+/yenmonospace 16#ffe5
+/yeokorean 16#3155
+/yeorinhieuhkorean 16#3186
+/yerahbenyomohebrew 16#05aa
+/yerahbenyomolefthebrew 16#05aa
+/yericyrillic 16#044b
+/yerudieresiscyrillic 16#04f9
+/yesieungkorean 16#3181
+/yesieungpansioskorean 16#3183
+/yesieungsioskorean 16#3182
+/yetivhebrew 16#059a
+/ygrave 16#1ef3
+/yhook 16#01b4
+/yhookabove 16#1ef7
+/yiarmenian 16#0575
+/yicyrillic 16#0457
+/yikorean 16#3162
+/yinyang 16#262f
+/yiwnarmenian 16#0582
+/ymonospace 16#ff59
+/yod 16#05d9
+/yoddagesh 16#fb39
+/yoddageshhebrew 16#fb39
+/yodhebrew 16#05d9
+/yodyodhebrew 16#05f2
+/yodyodpatahhebrew 16#fb1f
+/yohiragana 16#3088
+/yoikorean 16#3189
+/yokatakana 16#30e8
+/yokatakanahalfwidth 16#ff96
+/yokorean 16#315b
+/yosmallhiragana 16#3087
+/yosmallkatakana 16#30e7
+/yosmallkatakanahalfwidth 16#ff6e
+/yotgreek 16#03f3
+/yoyaekorean 16#3188
+/yoyakorean 16#3187
+/yoyakthai 16#0e22
+/yoyingthai 16#0e0d
+/yparen 16#24b4
+/ypogegrammeni 16#037a
+/ypogegrammenigreekcmb 16#0345
+/yr 16#01a6
+/yring 16#1e99
+/ysuperior 16#02b8
+/ytilde 16#1ef9
+/yturned 16#028e
+/yuhiragana 16#3086
+/yuikorean 16#318c
+/yukatakana 16#30e6
+/yukatakanahalfwidth 16#ff95
+/yukorean 16#3160
+/yusbigcyrillic 16#046b
+/yusbigiotifiedcyrillic 16#046d
+/yuslittlecyrillic 16#0467
+/yuslittleiotifiedcyrillic 16#0469
+/yusmallhiragana 16#3085
+/yusmallkatakana 16#30e5
+/yusmallkatakanahalfwidth 16#ff6d
+/yuyekorean 16#318b
+/yuyeokorean 16#318a
+/yyabengali 16#09df
+/yyadeva 16#095f
+/z 16#007a
+/zaarmenian 16#0566
+/zacute 16#017a
+/zadeva 16#095b
+/zagurmukhi 16#0a5b
+/zaharabic 16#0638
+/zahfinalarabic 16#fec6
+/zahinitialarabic 16#fec7
+/zahiragana 16#3056
+/zahmedialarabic 16#fec8
+/zainarabic 16#0632
+/zainfinalarabic 16#feb0
+/zakatakana 16#30b6
+/zaqefgadolhebrew 16#0595
+/zaqefqatanhebrew 16#0594
+/zarqahebrew 16#0598
+/zayin 16#05d6
+/zayindagesh 16#fb36
+/zayindageshhebrew 16#fb36
+/zayinhebrew 16#05d6
+/zbopomofo 16#3117
+/zcaron 16#017e
+/zcircle 16#24e9
+/zcircumflex 16#1e91
+/zcurl 16#0291
+/zdot 16#017c
+/zdotaccent 16#017c
+/zdotbelow 16#1e93
+/zecyrillic 16#0437
+/zedescendercyrillic 16#0499
+/zedieresiscyrillic 16#04df
+/zehiragana 16#305c
+/zekatakana 16#30bc
+/zero 16#0030
+/zeroarabic 16#0660
+/zerobengali 16#09e6
+/zerodeva 16#0966
+/zerogujarati 16#0ae6
+/zerogurmukhi 16#0a66
+/zerohackarabic 16#0660
+/zeroinferior 16#2080
+/zeromonospace 16#ff10
+/zerooldstyle 16#f730
+/zeropersian 16#06f0
+/zerosuperior 16#2070
+/zerothai 16#0e50
+/zerowidthjoiner 16#feff
+/zerowidthnonjoiner 16#200c
+/zerowidthspace 16#200b
+/zeta 16#03b6
+/zhbopomofo 16#3113
+/zhearmenian 16#056a
+/zhebrevecyrillic 16#04c2
+/zhecyrillic 16#0436
+/zhedescendercyrillic 16#0497
+/zhedieresiscyrillic 16#04dd
+/zihiragana 16#3058
+/zikatakana 16#30b8
+/zinorhebrew 16#05ae
+/zlinebelow 16#1e95
+/zmonospace 16#ff5a
+/zohiragana 16#305e
+/zokatakana 16#30be
+/zparen 16#24b5
+/zretroflexhook 16#0290
+/zstroke 16#01b6
+/zuhiragana 16#305a
+/zukatakana 16#30ba
+.dicttomark readonly def
+/currentglobal where
+{pop currentglobal{setglobal}true setglobal}
+{{}}
+ifelse
+/MacRomanEncoding .findencoding
+/MacGlyphEncoding
+/.notdef/.null/CR
+4 index 32 95 getinterval aload pop
+99 index 128 45 getinterval aload pop
+/notequal/AE
+/Oslash/infinity/plusminus/lessequal/greaterequal
+/yen/mu1/partialdiff/summation/product
+/pi/integral/ordfeminine/ordmasculine/Ohm
+/ae/oslash/questiondown/exclamdown/logicalnot
+/radical/florin/approxequal/increment/guillemotleft
+/guillemotright/ellipsis/nbspace
+174 index 203 12 getinterval aload pop
+/lozenge
+187 index 216 24 getinterval aload pop
+/applelogo
+212 index 241 7 getinterval aload pop
+/overscore
+220 index 249 7 getinterval aload pop
+/Lslash/lslash/Scaron/scaron
+/Zcaron/zcaron/brokenbar/Eth/eth
+/Yacute/yacute/Thorn/thorn/minus
+/multiply/onesuperior/twosuperior/threesuperior/onehalf
+/onequarter/threequarters/franc/Gbreve/gbreve
+/Idotaccent/Scedilla/scedilla/Cacute/cacute
+/Ccaron/ccaron/dmacron
+260 -1 roll pop
+258 packedarray
+7 1 index .registerencoding
+.defineencoding
+exec
+
+%%BeginResource: file (PDF object obj_1)
+1 0 obj
+<<>>endobj
+%%EndResource
+%%EndProlog
+%begin_xml_code
+/pdfmark where {pop true} {false} ifelse
+/currentdistillerparams where {pop currentdistillerparams
+/CoreDistVersion get 5000 ge } {false} ifelse
+and not {userdict /pdfmark /cleartomark load put} if
+[/NamespacePush pdfmark
+[/_objdef {exiftool_metadata_stream} /type /stream /OBJ pdfmark
+[{exiftool_metadata_stream} 2 dict begin /Type /Metadata def
+ /Subtype /XML def currentdict end /PUT pdfmark
+/MetadataString 2943 string def % exact length of metadata
+/TempString 100 string def
+/ConsumeMetadata {
+currentfile TempString readline pop pop
+currentfile MetadataString readstring pop pop
+} bind def
+ConsumeMetadata
+%begin_xml_packet: 2943
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
+
+ <rdf:Description rdf:about=''
+ xmlns:dc='http://purl.org/dc/elements/1.1/'>
+ <dc:creator>
+ <rdf:Seq>
+ <rdf:li>Zamzar</rdf:li>
+ </rdf:Seq>
+ </dc:creator>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:pdf='http://ns.adobe.com/pdf/1.3/'>
+ <pdf:Producer>Zamzar</pdf:Producer>
+ </rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<?xpacket end='w'?>
+%end_xml_packet
+[{exiftool_metadata_stream} MetadataString /PUT pdfmark
+[/Document 1 dict begin
+ /Metadata {exiftool_metadata_stream} def currentdict end /BDC pdfmark
+[/NamespacePop pdfmark
+%end_xml_code
+%%Page: 1 1
+%%BeginPageSetup
+4 0 obj
+<</Type/Page/MediaBox [0 0 256 256]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+>>
+/Contents 5 0 R
+>>
+endobj
+%%EndPageSetup
+/pagesave save def
+5 0 obj
+<</Length 3978>>stream
+q 0.1 0 0 0.1 0 0 cm
+0.141113 0.160889 0.219727 RG
+0.141113 0.160889 0.219727 rg
+600 2560 m
+1960 2560 l
+2291.37 2560 2560 2291.37 2560 1960 c
+2560 600 l
+2560 268.629 2291.37 0 1960 0 c
+600 0 l
+268.629 0 0 268.629 0 600 c
+0 1960 l
+0 2291.37 268.629 2560 600 2560 c
+h
+600 2560 m
+f
+1 0.176514 0.125488 RG
+1 0.176514 0.125488 rg
+2158.48 1776.87 m
+2159.1 1774.41 2159.45 1771.91 2159.45 1769.41 c
+2159.45 1377.38 l
+2159.45 1372.38 2158.13 1367.42 2155.66 1363.09 c
+2153.16 1358.71 2149.57 1355.12 2145.27 1352.62 c
+1820.82 1163.2 l
+1820.82 787.73 l
+1820.82 777.539 1815.47 768.09 1806.72 762.93 c
+1129.45 367.582 l
+1127.89 366.719 1126.21 366.129 1124.53 365.512 c
+1123.87 365.309 1123.28 364.922 1122.62 364.73 c
+1117.89 363.48 1112.89 363.48 1108.16 364.73 c
+1107.38 364.961 1106.68 365.391 1105.94 365.66 c
+1104.41 366.211 1102.77 366.719 1101.29 367.582 c
+424.18 762.93 l
+419.84 765.469 416.289 769.059 413.789 773.398 c
+411.328 777.77 410 782.699 410 787.73 c
+410 1963.71 l
+410 1966.29 410.352 1968.79 410.98 1971.21 c
+411.211 1972.03 411.68 1972.77 411.988 1973.59 c
+412.5 1975.12 413.012 1976.64 413.789 1978.05 c
+414.301 1978.98 415.078 1979.73 415.699 1980.59 c
+416.52 1981.72 417.27 1982.89 418.199 1983.91 c
+419.02 1984.73 420.078 1985.31 420.98 1986.05 c
+422.031 1986.91 422.93 1987.81 424.102 1988.52 c
+424.141 1988.52 l
+762.699 2186.17 l
+766.988 2188.67 771.879 2190 776.801 2190 c
+781.762 2190 786.602 2188.67 790.898 2186.17 c
+1129.49 1988.52 l
+1129.57 1988.52 l
+1130.66 1987.77 1131.64 1986.91 1132.66 1986.09 c
+1133.55 1985.35 1134.61 1984.73 1135.39 1983.95 c
+1136.41 1982.89 1137.11 1981.72 1137.93 1980.59 c
+1138.55 1979.73 1139.34 1978.98 1139.84 1978.05 c
+1140.66 1976.6 1141.09 1975.12 1141.68 1973.59 c
+1141.95 1972.77 1142.46 1972.03 1142.66 1971.17 c
+1143.32 1968.75 1143.63 1966.25 1143.63 1963.71 c
+1143.63 1229.22 l
+1425.78 1393.95 l
+1425.78 1769.41 l
+1425.78 1771.91 1426.13 1774.45 1426.8 1776.87 c
+1427.03 1777.73 1427.46 1778.48 1427.77 1779.3 c
+1428.32 1780.78 1428.83 1782.34 1429.61 1783.71 c
+1430.12 1784.65 1430.9 1785.39 1431.48 1786.25 c
+1432.34 1787.38 1433.05 1788.59 1434.02 1789.57 c
+1434.84 1790.39 1435.86 1791.02 1436.8 1791.72 c
+1437.85 1792.58 1438.75 1793.52 1439.88 1794.18 c
+1439.92 1794.18 l
+1778.55 1991.87 l
+1782.81 1994.37 1787.7 1995.7 1792.66 1995.7 c
+1797.58 1995.7 1802.46 1994.37 1806.72 1991.87 c
+2145.31 1794.18 l
+2146.52 1793.48 2147.42 1792.58 2148.48 1791.76 c
+2149.38 1791.05 2150.39 1790.39 2151.21 1789.61 c
+2152.19 1788.59 2152.89 1787.38 2153.75 1786.25 c
+2154.38 1785.39 2155.16 1784.65 2155.63 1783.71 c
+2156.45 1782.34 2156.91 1780.78 2157.46 1779.3 c
+2157.77 1778.48 2158.24 1777.73 2158.48 1776.87 c
+h
+2103.01 1393.95 m
+2103.01 1719.92 l
+1984.49 1650.74 l
+1820.82 1555.2 l
+1820.82 1229.22 l
+2103.05 1393.95 l
+h
+1764.41 804.301 m
+1764.41 1130.47 l
+1603.4 1037.23 l
+1143.59 771.129 l
+1143.59 441.871 l
+h
+466.449 1914.22 m
+466.449 804.301 l
+1087.19 441.91 l
+1087.19 771.09 l
+762.891 957.191 l
+762.66 957.34 l
+761.559 957.969 760.629 958.91 759.609 959.691 c
+758.75 960.391 757.699 960.98 756.949 961.762 c
+756.879 961.871 l
+755.941 962.77 755.309 963.871 754.531 964.879 c
+753.828 965.82 753.012 966.641 752.422 967.66 c
+752.379 967.77 l
+751.762 968.828 751.371 970.121 750.898 971.328 c
+750.43 972.379 749.84 973.398 749.57 974.531 c
+749.57 974.609 l
+749.219 975.941 749.141 977.379 749.02 978.789 c
+748.871 979.84 748.59 980.898 748.59 981.988 c
+748.59 1749.49 l
+584.922 1845.12 l
+466.449 1914.18 l
+h
+776.84 2128.36 m
+494.73 1963.71 l
+776.762 1799.06 l
+1058.83 1963.75 l
+776.762 2128.36 l
+h
+923.551 1100.74 m
+1087.23 1196.29 l
+1087.23 1914.22 l
+968.711 1845.08 l
+805.039 1749.49 l
+805.039 1031.52 l
+h
+1792.66 1934.06 m
+1510.55 1769.41 l
+1792.66 1604.73 l
+2074.69 1769.41 l
+h
+1764.41 1555.2 m
+1600.7 1650.74 l
+1482.23 1719.92 l
+1482.23 1393.95 l
+1645.9 1298.4 l
+1764.41 1229.22 l
+h
+1115.35 820.59 m
+1529.1 1060.12 l
+1735.9 1179.8 l
+1454.06 1344.37 l
+1129.53 1154.88 l
+833.75 982.23 l
+h
+1115.35 820.59 m
+f*
+Q
+
+endstream
+endobj
+pagesave restore
+%%PageTrailer
+%%Trailer
+end
+[/EMC pdfmark
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Laravel-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Laravel-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..77e8015dbf
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Laravel-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Laravel-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Laravel-Light.eps
new file mode 100644
index 0000000000..e28929c234
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Laravel-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Less-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Less-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..adcb0f32ab
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Less-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Less-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Less-Dark.eps
new file mode 100644
index 0000000000..622a2bdaa9
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Less-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Less-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Less-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..52cd862397
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Less-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Less-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Less-Light.eps
new file mode 100644
index 0000000000..604deb2626
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Less-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_LinkedIn-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_LinkedIn-eps-converted-to.pdf
new file mode 100644
index 0000000000..b662d5068a
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_LinkedIn-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_LinkedIn.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_LinkedIn.eps
new file mode 100644
index 0000000000..3d0a3ba129
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_LinkedIn.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Linux-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Linux-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..9b8da50e74
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Linux-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Linux-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Linux-Dark.eps
new file mode 100644
index 0000000000..8e12fb13b9
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Linux-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Linux-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Linux-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..b743629e8f
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Linux-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Linux-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Linux-Light.eps
new file mode 100644
index 0000000000..9c9faa38fe
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Linux-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Lit-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Lit-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..3d3dd669c6
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Lit-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Lit-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Lit-Dark.eps
new file mode 100644
index 0000000000..c4b9d9c34d
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Lit-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Lit-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Lit-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..d7b878dcc8
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Lit-Light-eps-converted-to.pdf
@@ -0,0 +1,75 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+x]͍0T
+,!L51(Ja?;`q^?{ _upj$ 6YV9qJVҩRE*[
+
+8/ħʿ] {~ @:QNe)w0iTT:iV%v[s.#"K0mm=S:Ż¹ Pz+sfش/c&W=[L~tx;:zendstream
+endobj
+6 0 obj
+246
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 7 0 R
+>>
+endobj
+7 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:21:32+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:21:32+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:9dc1eb78-143f-11ef-0000-5632226cfd5e'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514132132+02'00')
+/ModDate(D:20240514132132+02'00')>>endobj
+xref
+0 8
+0000000000 65535 f
+0000000793 00000 n
+0000002115 00000 n
+0000000734 00000 n
+0000000620 00000 n
+0000000285 00000 n
+0000000601 00000 n
+0000000857 00000 n
+trailer
+<< /Size 8 /Root 1 0 R /Info 2 0 R
+/ID [<9203CEF1D1528CA3E940A0A89F56E81C><9203CEF1D1528CA3E940A0A89F56E81C>]
+>>
+startxref
+2240
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Lit-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Lit-Light.eps
new file mode 100644
index 0000000000..0bc062c09f
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Lit-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Lua-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Lua-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..4685664ddb
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Lua-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Lua-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Lua-Dark.eps
new file mode 100644
index 0000000000..c386135a8e
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Lua-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Lua-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Lua-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..ffc5257c89
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Lua-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Lua-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Lua-Light.eps
new file mode 100644
index 0000000000..6bc7fcc410
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Lua-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Markdown-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Markdown-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..c569905a7b
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Markdown-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Markdown-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Markdown-Dark.eps
new file mode 100644
index 0000000000..69e1cd5b88
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Markdown-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Markdown-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Markdown-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..c1082ceb3e
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Markdown-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Markdown-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Markdown-Light.eps
new file mode 100644
index 0000000000..dc8d193222
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Markdown-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Mastodon-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Mastodon-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..26cd9381e5
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Mastodon-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Mastodon-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Mastodon-Dark.eps
new file mode 100644
index 0000000000..5ed1596d6e
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Mastodon-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Mastodon-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Mastodon-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..c2bedc92e2
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Mastodon-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Mastodon-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Mastodon-Light.eps
new file mode 100644
index 0000000000..325ed446d6
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Mastodon-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_MaterialUI-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_MaterialUI-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..d56f904fdb
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_MaterialUI-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_MaterialUI-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_MaterialUI-Dark.eps
new file mode 100644
index 0000000000..a0efb06f41
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_MaterialUI-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_MaterialUI-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_MaterialUI-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..48e35d9b1a
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_MaterialUI-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_MaterialUI-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_MaterialUI-Light.eps
new file mode 100644
index 0000000000..d416815de5
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_MaterialUI-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Matlab-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Matlab-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..19f92d133c
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Matlab-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Matlab-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Matlab-Dark.eps
new file mode 100644
index 0000000000..6d88a75469
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Matlab-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Matlab-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Matlab-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..7953361a65
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Matlab-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Matlab-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Matlab-Light.eps
new file mode 100644
index 0000000000..625df0bce9
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Matlab-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Maven-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Maven-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..bd06834ce7
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Maven-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Maven-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Maven-Dark.eps
new file mode 100644
index 0000000000..4c0aacf92d
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Maven-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Maven-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Maven-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..f2666a3ef8
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Maven-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Maven-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Maven-Light.eps
new file mode 100644
index 0000000000..7f5aeeb912
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Maven-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Mint-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Mint-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..6e83fa7d7f
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Mint-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Mint-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Mint-Dark.eps
new file mode 100644
index 0000000000..d50aea63e1
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Mint-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Mint-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Mint-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..105f2affe5
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Mint-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Mint-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Mint-Light.eps
new file mode 100644
index 0000000000..32594ca53d
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Mint-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Misskey-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Misskey-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..f419965902
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Misskey-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Misskey-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Misskey-Dark.eps
new file mode 100644
index 0000000000..efa1e3cd14
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Misskey-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Misskey-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Misskey-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..29d6f134da
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Misskey-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Misskey-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Misskey-Light.eps
new file mode 100644
index 0000000000..088b301f1c
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Misskey-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_MongoDB-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_MongoDB-eps-converted-to.pdf
new file mode 100644
index 0000000000..ab43790a3c
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_MongoDB-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_MongoDB.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_MongoDB.eps
new file mode 100644
index 0000000000..31d467e53a
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_MongoDB.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_MySQL-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_MySQL-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..a2365119c5
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_MySQL-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_MySQL-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_MySQL-Dark.eps
new file mode 100644
index 0000000000..2bc14173e1
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_MySQL-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_MySQL-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_MySQL-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..c7dc1f54c9
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_MySQL-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_MySQL-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_MySQL-Light.eps
new file mode 100644
index 0000000000..a5cce12788
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_MySQL-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_NeoVim-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_NeoVim-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..150e78faa4
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_NeoVim-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_NeoVim-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_NeoVim-Dark.eps
new file mode 100644
index 0000000000..447fa136cc
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_NeoVim-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_NeoVim-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_NeoVim-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..f21c1a81e2
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_NeoVim-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_NeoVim-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_NeoVim-Light.eps
new file mode 100644
index 0000000000..d37c7da953
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_NeoVim-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_NestJS-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_NestJS-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..14e29438f9
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_NestJS-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_NestJS-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_NestJS-Dark.eps
new file mode 100644
index 0000000000..a2da0033d8
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_NestJS-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_NestJS-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_NestJS-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..c9ad812087
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_NestJS-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_NestJS-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_NestJS-Light.eps
new file mode 100644
index 0000000000..95e7647015
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_NestJS-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Netlify-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Netlify-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..2b4bdb05a9
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Netlify-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Netlify-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Netlify-Dark.eps
new file mode 100644
index 0000000000..8a98239efb
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Netlify-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Netlify-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Netlify-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..9881993174
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Netlify-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Netlify-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Netlify-Light.eps
new file mode 100644
index 0000000000..d30c53c614
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Netlify-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_NextJS-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_NextJS-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..b9d29613e7
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_NextJS-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_NextJS-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_NextJS-Dark.eps
new file mode 100644
index 0000000000..a2d0ef2f0f
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_NextJS-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_NextJS-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_NextJS-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..80d56b44b0
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_NextJS-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_NextJS-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_NextJS-Light.eps
new file mode 100644
index 0000000000..22750d19a9
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_NextJS-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Nginx-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Nginx-eps-converted-to.pdf
new file mode 100644
index 0000000000..ed120287e0
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Nginx-eps-converted-to.pdf
@@ -0,0 +1,72 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+x]RIn0 |!n@Crh(iSMR9p#Aϧǣ%0"2D糩utV|o4kLBI=gr(U\d&)iHZw"3nO9}.}ka#!y&Y*G& d_7ALjȱN)A/qBƎT#6BG;Y{zW{APCAL)`B,!A8?Q0%`qT >^-&T35QN!6zL~k='zyڧL" Q=&8hXҵP{i~~Geendstream
+endobj
+6 0 obj
+343
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 7 0 R
+>>
+endobj
+7 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:21:58+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:21:58+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:ad413479-143f-11ef-0000-6264b987948e'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514132158+02'00')
+/ModDate(D:20240514132158+02'00')>>endobj
+xref
+0 8
+0000000000 65535 f
+0000000890 00000 n
+0000002212 00000 n
+0000000831 00000 n
+0000000717 00000 n
+0000000285 00000 n
+0000000698 00000 n
+0000000954 00000 n
+trailer
+<< /Size 8 /Root 1 0 R /Info 2 0 R
+/ID [<80111CB5CA82E172B62B2EC0FB161974><80111CB5CA82E172B62B2EC0FB161974>]
+>>
+startxref
+2337
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Nginx.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Nginx.eps
new file mode 100644
index 0000000000..dc15d72453
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Nginx.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Nim-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Nim-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..c49c17e74a
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Nim-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Nim-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Nim-Dark.eps
new file mode 100644
index 0000000000..9d62f8b65f
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Nim-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Nim-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Nim-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..3220db1934
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Nim-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Nim-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Nim-Light.eps
new file mode 100644
index 0000000000..0503c3262d
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Nim-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Nix-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Nix-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..b0f277a221
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Nix-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Nix-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Nix-Dark.eps
new file mode 100644
index 0000000000..c0c3286930
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Nix-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Nix-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Nix-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..004d238308
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Nix-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Nix-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Nix-Light.eps
new file mode 100644
index 0000000000..b5a8523f65
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Nix-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_NodeJS-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_NodeJS-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..72319324a2
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_NodeJS-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_NodeJS-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_NodeJS-Dark.eps
new file mode 100644
index 0000000000..ba1d50e3c2
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_NodeJS-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_NodeJS-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_NodeJS-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..c0b8e6033d
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_NodeJS-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_NodeJS-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_NodeJS-Light.eps
new file mode 100644
index 0000000000..0f51d6b856
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_NodeJS-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Notion-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Notion-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..6977052452
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Notion-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Notion-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Notion-Dark.eps
new file mode 100644
index 0000000000..9d1f6496b9
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Notion-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Notion-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Notion-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..ca18223ec1
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Notion-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Notion-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Notion-Light.eps
new file mode 100644
index 0000000000..d2155264eb
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Notion-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Npm-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Npm-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..92f722042c
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Npm-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Npm-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Npm-Dark.eps
new file mode 100644
index 0000000000..c67d371b4f
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Npm-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Npm-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Npm-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..82afe8a6b6
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Npm-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Npm-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Npm-Light.eps
new file mode 100644
index 0000000000..d0679a4f87
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Npm-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_NuxtJS-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_NuxtJS-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..24b16f19d4
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_NuxtJS-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_NuxtJS-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_NuxtJS-Dark.eps
new file mode 100644
index 0000000000..24d9bdf215
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_NuxtJS-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_NuxtJS-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_NuxtJS-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..dc0f0e3945
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_NuxtJS-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_NuxtJS-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_NuxtJS-Light.eps
new file mode 100644
index 0000000000..6671c9f529
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_NuxtJS-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_OCaml-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_OCaml-eps-converted-to.pdf
new file mode 100644
index 0000000000..7ccb9562ea
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_OCaml-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_OCaml.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_OCaml.eps
new file mode 100644
index 0000000000..18cd354e7d
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_OCaml.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Obsidian-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Obsidian-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..8c1df55f55
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Obsidian-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Obsidian-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Obsidian-Dark.eps
new file mode 100644
index 0000000000..e82467c792
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Obsidian-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Obsidian-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Obsidian-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..423d806bef
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Obsidian-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Obsidian-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Obsidian-Light.eps
new file mode 100644
index 0000000000..3dae072040
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Obsidian-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Octave-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Octave-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..ce0297bf1c
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Octave-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Octave-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Octave-Dark.eps
new file mode 100644
index 0000000000..fd2b37febe
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Octave-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Octave-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Octave-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..f61cdf54ad
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Octave-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Octave-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Octave-Light.eps
new file mode 100644
index 0000000000..099fb4174b
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Octave-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_OpenCV-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_OpenCV-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..999815acab
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_OpenCV-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_OpenCV-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_OpenCV-Dark.eps
new file mode 100644
index 0000000000..1563aa00dd
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_OpenCV-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_OpenCV-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_OpenCV-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..a0d5a9d347
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_OpenCV-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_OpenCV-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_OpenCV-Light.eps
new file mode 100644
index 0000000000..457e91ec23
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_OpenCV-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_OpenShift-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_OpenShift-eps-converted-to.pdf
new file mode 100644
index 0000000000..d9346b773b
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_OpenShift-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_OpenShift.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_OpenShift.eps
new file mode 100644
index 0000000000..829cacddd0
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_OpenShift.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_OpenStack-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_OpenStack-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..a14960e554
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_OpenStack-Dark-eps-converted-to.pdf
@@ -0,0 +1,77 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+x}SAn1 {)"7,9?tծ X1ь[%j~ֺ-9B8ߟnR:V}
+&u/ YJ=[՗ٔm#j,kܥ2|<BCJt*fV%
+rNl+ ҔIQtk4Yk(Aq"PR$/
+L!66Y7F҃pApE7MNI u(x
+DYƞehd)! 2/QhWdCM#fSpiF {=h~3G1izL;'
+^1DK#Ho7@VckjBY6e7DZa-{6&|c|0/"Dy>k0p>eMendstream
+endobj
+6 0 obj
+417
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 7 0 R
+>>
+endobj
+7 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:22:17+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:22:17+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:b8945ff9-143f-11ef-0000-42db723814c0'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514132217+02'00')
+/ModDate(D:20240514132217+02'00')>>endobj
+xref
+0 8
+0000000000 65535 f
+0000000964 00000 n
+0000002286 00000 n
+0000000905 00000 n
+0000000791 00000 n
+0000000285 00000 n
+0000000772 00000 n
+0000001028 00000 n
+trailer
+<< /Size 8 /Root 1 0 R /Info 2 0 R
+/ID [<6BFBF67C784A0C67ABF4AC57B5DC43EA><6BFBF67C784A0C67ABF4AC57B5DC43EA>]
+>>
+startxref
+2411
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_OpenStack-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_OpenStack-Dark.eps
new file mode 100644
index 0000000000..d7f66b6633
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_OpenStack-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_OpenStack-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_OpenStack-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..249ceea3ab
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_OpenStack-Light-eps-converted-to.pdf
@@ -0,0 +1,75 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+x}R10
+)(y""CY..`3Kq8#Ʌ8HՅ=
+q#N.%?׾3qAM.x=3ձ@i1J)W:3mu#3uwHKP*:Y0ȭ4b8_m<V&iRoW]'Ld[:%!*u
+#JiNf(\QͰ]#?ĀK#w2,ܺ\'ؿE:zOFFŖCl˅ D]fd7\mN<"rȆ?D1oxjw7DˍZ#Z=i[>*kg GR156Lendstream
+endobj
+6 0 obj
+414
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 7 0 R
+>>
+endobj
+7 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:22:18+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:22:18+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:b92cf679-143f-11ef-0000-55eefeaa6718'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514132218+02'00')
+/ModDate(D:20240514132218+02'00')>>endobj
+xref
+0 8
+0000000000 65535 f
+0000000961 00000 n
+0000002283 00000 n
+0000000902 00000 n
+0000000788 00000 n
+0000000285 00000 n
+0000000769 00000 n
+0000001025 00000 n
+trailer
+<< /Size 8 /Root 1 0 R /Info 2 0 R
+/ID [<4B3333D88114217777019C5912217D50><4B3333D88114217777019C5912217D50>]
+>>
+startxref
+2408
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_OpenStack-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_OpenStack-Light.eps
new file mode 100644
index 0000000000..f5f8c43faf
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_OpenStack-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_PHP-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_PHP-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..ed6859ea4c
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_PHP-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_PHP-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_PHP-Dark.eps
new file mode 100644
index 0000000000..403698f999
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_PHP-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_PHP-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_PHP-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..f89132bd08
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_PHP-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_PHP-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_PHP-Light.eps
new file mode 100644
index 0000000000..5650e63ab3
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_PHP-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Perl-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Perl-eps-converted-to.pdf
new file mode 100644
index 0000000000..bae36ad8ab
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Perl-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Perl.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Perl.eps
new file mode 100644
index 0000000000..038aa1c3b4
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Perl.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Photoshop-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Photoshop-eps-converted-to.pdf
new file mode 100644
index 0000000000..ff79dee8f4
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Photoshop-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Photoshop.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Photoshop.eps
new file mode 100644
index 0000000000..013fc93d85
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Photoshop.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_PhpStorm-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_PhpStorm-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..456261ac45
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_PhpStorm-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_PhpStorm-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_PhpStorm-Dark.eps
new file mode 100644
index 0000000000..fadfd3b9ba
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_PhpStorm-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_PhpStorm-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_PhpStorm-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..dd0a918eaa
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_PhpStorm-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_PhpStorm-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_PhpStorm-Light.eps
new file mode 100644
index 0000000000..557d56dd36
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_PhpStorm-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Pinia-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Pinia-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..199a4b60b2
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Pinia-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Pinia-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Pinia-Dark.eps
new file mode 100644
index 0000000000..690785b7b0
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Pinia-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Pinia-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Pinia-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..aa320f699a
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Pinia-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Pinia-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Pinia-Light.eps
new file mode 100644
index 0000000000..a2b3994495
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Pinia-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Pkl-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Pkl-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..a534947504
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Pkl-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Pkl-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Pkl-Dark.eps
new file mode 100644
index 0000000000..7a63955b42
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Pkl-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Pkl-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Pkl-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..17b23e36ad
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Pkl-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Pkl-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Pkl-Light.eps
new file mode 100644
index 0000000000..ea684811e1
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Pkl-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Plan9-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Plan9-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..b910a94312
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Plan9-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Plan9-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Plan9-Dark.eps
new file mode 100644
index 0000000000..2fea477678
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Plan9-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Plan9-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Plan9-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..a54bbf6021
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Plan9-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Plan9-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Plan9-Light.eps
new file mode 100644
index 0000000000..d4d195a996
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Plan9-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_PlanetScale-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_PlanetScale-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..1e882887bf
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_PlanetScale-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_PlanetScale-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_PlanetScale-Dark.eps
new file mode 100644
index 0000000000..a01d662273
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_PlanetScale-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_PlanetScale-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_PlanetScale-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..4edc705aed
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_PlanetScale-Light-eps-converted-to.pdf
@@ -0,0 +1,76 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xUQKn! s "~Fv[_4F}Hc7e~% gIt.˽&^ia(
+5oi><0A0Pt?r+ \V2D^hTrkTzcov1Uapu
+* vy5P[]kl%DCiJ+gk՗nPǠgjR$$fO< /v2m!~
+f(*]iC&
+RwHzmendstream
+endobj
+6 0 obj
+267
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 7 0 R
+>>
+endobj
+7 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:22:32+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:22:32+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:c1853179-143f-11ef-0000-d2a1f615688a'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514132232+02'00')
+/ModDate(D:20240514132232+02'00')>>endobj
+xref
+0 8
+0000000000 65535 f
+0000000814 00000 n
+0000002136 00000 n
+0000000755 00000 n
+0000000641 00000 n
+0000000285 00000 n
+0000000622 00000 n
+0000000878 00000 n
+trailer
+<< /Size 8 /Root 1 0 R /Info 2 0 R
+/ID [<CA601CED247D5BA4CFD18B4F50535480><CA601CED247D5BA4CFD18B4F50535480>]
+>>
+startxref
+2261
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_PlanetScale-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_PlanetScale-Light.eps
new file mode 100644
index 0000000000..18b19d2c21
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_PlanetScale-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Pnpm-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Pnpm-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..b49c8e5287
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Pnpm-Dark-eps-converted-to.pdf
@@ -0,0 +1,74 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+x9 E{N f8Ɯ!H'(JE}גcKz&22s@.S)U*^6,WOv21u9ObYv..y(! v<xq`JB6|;ָM
+V)c,"!e:Z e.K}jtUiٛ
+@xaUpa9=sendstream
+endobj
+6 0 obj
+193
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 7 0 R
+>>
+endobj
+7 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:22:33+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:22:33+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:c21dc7f9-143f-11ef-0000-f3e78ec3ceea'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514132233+02'00')
+/ModDate(D:20240514132233+02'00')>>endobj
+xref
+0 8
+0000000000 65535 f
+0000000740 00000 n
+0000002062 00000 n
+0000000681 00000 n
+0000000567 00000 n
+0000000285 00000 n
+0000000548 00000 n
+0000000804 00000 n
+trailer
+<< /Size 8 /Root 1 0 R /Info 2 0 R
+/ID [<CF685D63F20291188B68CEDB92103D0F><CF685D63F20291188B68CEDB92103D0F>]
+>>
+startxref
+2187
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Pnpm-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Pnpm-Dark.eps
new file mode 100644
index 0000000000..20b8ed579d
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Pnpm-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Pnpm-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Pnpm-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..71ecbd5379
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Pnpm-Light-eps-converted-to.pdf
@@ -0,0 +1,74 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+x; D{N {h?ERl_(Q>*7`%-q X|5bQN&.GȻX&;j`KDl8l{0X%!>vk\u„Sf,GLGcR&}pS
+*-{SP!ǔ*8-_
+rj{>sendstream
+endobj
+6 0 obj
+194
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 7 0 R
+>>
+endobj
+7 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:22:34+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:22:34+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:c2b65e79-143f-11ef-0000-ab49e726f3b3'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514132234+02'00')
+/ModDate(D:20240514132234+02'00')>>endobj
+xref
+0 8
+0000000000 65535 f
+0000000741 00000 n
+0000002063 00000 n
+0000000682 00000 n
+0000000568 00000 n
+0000000285 00000 n
+0000000549 00000 n
+0000000805 00000 n
+trailer
+<< /Size 8 /Root 1 0 R /Info 2 0 R
+/ID [<FD6D8016CB701F989050C854DFA57B86><FD6D8016CB701F989050C854DFA57B86>]
+>>
+startxref
+2188
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Pnpm-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Pnpm-Light.eps
new file mode 100644
index 0000000000..ee37a24a4e
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Pnpm-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_PostgreSQL-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_PostgreSQL-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..6ad727aa95
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_PostgreSQL-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_PostgreSQL-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_PostgreSQL-Dark.eps
new file mode 100644
index 0000000000..31b334e161
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_PostgreSQL-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_PostgreSQL-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_PostgreSQL-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..7a16b5ebea
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_PostgreSQL-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_PostgreSQL-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_PostgreSQL-Light.eps
new file mode 100644
index 0000000000..94380203e8
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_PostgreSQL-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Postman-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Postman-eps-converted-to.pdf
new file mode 100644
index 0000000000..fc441be28b
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Postman-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Postman.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Postman.eps
new file mode 100644
index 0000000000..21197318b0
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Postman.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Powershell-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Powershell-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..ec2fe9f2fa
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Powershell-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Powershell-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Powershell-Dark.eps
new file mode 100644
index 0000000000..cd7fff3790
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Powershell-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Powershell-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Powershell-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..3022992615
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Powershell-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Powershell-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Powershell-Light.eps
new file mode 100644
index 0000000000..b160b7c00e
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Powershell-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Premiere-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Premiere-eps-converted-to.pdf
new file mode 100644
index 0000000000..add20ad1d1
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Premiere-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Premiere.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Premiere.eps
new file mode 100644
index 0000000000..a9e5ce3b9a
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Premiere.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Prisma-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Prisma-eps-converted-to.pdf
new file mode 100644
index 0000000000..eb708de0ae
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Prisma-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Prisma.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Prisma.eps
new file mode 100644
index 0000000000..ae7237af6d
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Prisma.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Processing-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Processing-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..488a480d37
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Processing-Dark-eps-converted-to.pdf
@@ -0,0 +1,74 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xMAn D>O<8AW]=REh7~q __1y3aI`gISg.)j/"']+:ґp,m\h6mwK ~20mś%Mj//=eXkN<NfY}*JӸ9ɭ){W}ʆL
+e/:,\
+nX3qMÓY 7FXendstream
+endobj
+6 0 obj
+231
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 7 0 R
+>>
+endobj
+7 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:22:42+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:22:42+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:c77b1279-143f-11ef-0000-297ed21add61'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514132242+02'00')
+/ModDate(D:20240514132242+02'00')>>endobj
+xref
+0 8
+0000000000 65535 f
+0000000778 00000 n
+0000002100 00000 n
+0000000719 00000 n
+0000000605 00000 n
+0000000285 00000 n
+0000000586 00000 n
+0000000842 00000 n
+trailer
+<< /Size 8 /Root 1 0 R /Info 2 0 R
+/ID [<205D28A55DF50ECEAA21DE8A1A34E712><205D28A55DF50ECEAA21DE8A1A34E712>]
+>>
+startxref
+2225
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Processing-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Processing-Dark.eps
new file mode 100644
index 0000000000..a6564ba0a4
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Processing-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Processing-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Processing-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..8cc9067805
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Processing-Light-eps-converted-to.pdf
@@ -0,0 +1,73 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xMAn0E tE#D"Y^&vFQ$d;{2+buJ#UjԙO<e^\ %lw,xOW)6xއ"
+ؖţXҸv(¥SʒF-:z6ʤOocXR.޲EgƎa?#$LL )$ȬJ5Xendstream
+endobj
+6 0 obj
+228
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 7 0 R
+>>
+endobj
+7 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:22:43+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:22:43+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:c813a8f9-143f-11ef-0000-5b9f8bf91f3e'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514132243+02'00')
+/ModDate(D:20240514132243+02'00')>>endobj
+xref
+0 8
+0000000000 65535 f
+0000000775 00000 n
+0000002097 00000 n
+0000000716 00000 n
+0000000602 00000 n
+0000000285 00000 n
+0000000583 00000 n
+0000000839 00000 n
+trailer
+<< /Size 8 /Root 1 0 R /Info 2 0 R
+/ID [<D1E24EB79A1DFF5CF31DE424C51D0B83><D1E24EB79A1DFF5CF31DE424C51D0B83>]
+>>
+startxref
+2222
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Processing-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Processing-Light.eps
new file mode 100644
index 0000000000..7c041c10cb
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Processing-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Prometheus-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Prometheus-eps-converted-to.pdf
new file mode 100644
index 0000000000..7d4da67313
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Prometheus-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Prometheus.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Prometheus.eps
new file mode 100644
index 0000000000..cda66e4b0b
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Prometheus.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Pug-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Pug-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..d6b0d8bffd
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Pug-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Pug-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Pug-Dark.eps
new file mode 100644
index 0000000000..afc1686b8e
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Pug-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Pug-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Pug-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..14162be23a
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Pug-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Pug-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Pug-Light.eps
new file mode 100644
index 0000000000..ce96daf3b5
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Pug-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_PyCharm-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_PyCharm-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..072199629b
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_PyCharm-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_PyCharm-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_PyCharm-Dark.eps
new file mode 100644
index 0000000000..6af9b5c6e2
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_PyCharm-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_PyCharm-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_PyCharm-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..78420a03e2
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_PyCharm-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_PyCharm-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_PyCharm-Light.eps
new file mode 100644
index 0000000000..90f40c04db
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_PyCharm-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_PyTorch-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_PyTorch-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..98caa42d81
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_PyTorch-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_PyTorch-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_PyTorch-Dark.eps
new file mode 100644
index 0000000000..6be51006cb
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_PyTorch-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_PyTorch-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_PyTorch-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..76678b9cd6
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_PyTorch-Light-eps-converted-to.pdf
@@ -0,0 +1,74 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xeQKn%1> c,:yJRS"P{}׎-08ncԯ"~P|~ d,ԫL;+܏PV%3II[,,vi\Яך,n)aO}ԴCBC%AJrtiy@h^ ՝R7:C,
+:Ct[,7b8ya *1ΙƑ6@cM9h?*ҲyDf "J C&5qZx<ׯ
+!t λZjCxnd^xrb([, Aa_<gϰ b){?&\endstream
+endobj
+6 0 obj
+374
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 7 0 R
+>>
+endobj
+7 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:22:50+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:22:50+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:cc3fc679-143f-11ef-0000-301f98f61832'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514132250+02'00')
+/ModDate(D:20240514132250+02'00')>>endobj
+xref
+0 8
+0000000000 65535 f
+0000000921 00000 n
+0000002243 00000 n
+0000000862 00000 n
+0000000748 00000 n
+0000000285 00000 n
+0000000729 00000 n
+0000000985 00000 n
+trailer
+<< /Size 8 /Root 1 0 R /Info 2 0 R
+/ID [<BECE75A013B819E010A4EDACBF6FFBCD><BECE75A013B819E010A4EDACBF6FFBCD>]
+>>
+startxref
+2368
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_PyTorch-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_PyTorch-Light.eps
new file mode 100644
index 0000000000..7000f9377a
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_PyTorch-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Python-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Python-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..61b138b419
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Python-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Python-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Python-Dark.eps
new file mode 100644
index 0000000000..5b3a1e1771
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Python-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Python-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Python-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..60485ba5fc
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Python-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Python-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Python-Light.eps
new file mode 100644
index 0000000000..178210a911
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Python-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_QT-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_QT-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..aaa3a5fd11
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_QT-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_QT-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_QT-Dark.eps
new file mode 100644
index 0000000000..6ac64f7644
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_QT-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_QT-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_QT-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..2e6dbf01f1
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_QT-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_QT-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_QT-Light.eps
new file mode 100644
index 0000000000..72d8bb5b1d
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_QT-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_R-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_R-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..9caf2149d0
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_R-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_R-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_R-Dark.eps
new file mode 100644
index 0000000000..056db29f08
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_R-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_R-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_R-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..68e2371062
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_R-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_R-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_R-Light.eps
new file mode 100644
index 0000000000..aab97cfd5a
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_R-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_ROS-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_ROS-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..2fd186122a
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_ROS-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_ROS-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_ROS-Dark.eps
new file mode 100644
index 0000000000..abccfc2449
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_ROS-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_ROS-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_ROS-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..9788224a94
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_ROS-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_ROS-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_ROS-Light.eps
new file mode 100644
index 0000000000..ef2e094be5
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_ROS-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_RabbitMQ-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_RabbitMQ-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..f0ef1356c4
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_RabbitMQ-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_RabbitMQ-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_RabbitMQ-Dark.eps
new file mode 100644
index 0000000000..4decf8b158
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_RabbitMQ-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_RabbitMQ-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_RabbitMQ-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..2a11876374
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_RabbitMQ-Light-eps-converted-to.pdf
@@ -0,0 +1,74 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xmSK1}pa,-/hiW_tan6v`bLzdEx}7U"D 9}d&\vaFaVX(^8;Qj>jQX73 -e&]]3
+#d0-ZC>bi@9JE/?-3էy?0!,Ib"ʨaZCĤ:Td!ð͎pL~3YIj굜V.3g-o /]`dpb5NHi㼦[vVUC}0L.G&趢wl,h].Z|Xi*x끯g="<&`1aL"F=+ƞS\9W&zμz$niDax
+\V;h~k1LKb%r=JR{fsbtJC>ۋendstream
+endobj
+6 0 obj
+493
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 7 0 R
+>>
+endobj
+7 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:22:56+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:22:56+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:cfd34d79-143f-11ef-0000-d18420bf1de0'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514132256+02'00')
+/ModDate(D:20240514132256+02'00')>>endobj
+xref
+0 8
+0000000000 65535 f
+0000001040 00000 n
+0000002362 00000 n
+0000000981 00000 n
+0000000867 00000 n
+0000000285 00000 n
+0000000848 00000 n
+0000001104 00000 n
+trailer
+<< /Size 8 /Root 1 0 R /Info 2 0 R
+/ID [<DD9F4AB111CCB2D8A88765E7100C408E><DD9F4AB111CCB2D8A88765E7100C408E>]
+>>
+startxref
+2487
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_RabbitMQ-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_RabbitMQ-Light.eps
new file mode 100644
index 0000000000..658deff38f
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_RabbitMQ-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Rails-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Rails-eps-converted-to.pdf
new file mode 100644
index 0000000000..c7842e6fb4
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Rails-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Rails.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Rails.eps
new file mode 100644
index 0000000000..498410bd4f
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Rails.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_RaspberryPi-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_RaspberryPi-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..7eebd49c0f
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_RaspberryPi-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_RaspberryPi-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_RaspberryPi-Dark.eps
new file mode 100644
index 0000000000..daa8e8beca
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_RaspberryPi-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_RaspberryPi-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_RaspberryPi-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..0c96aaabe9
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_RaspberryPi-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_RaspberryPi-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_RaspberryPi-Light.eps
new file mode 100644
index 0000000000..7184ba8c91
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_RaspberryPi-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_React-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_React-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..83a7f9e3fa
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_React-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_React-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_React-Dark.eps
new file mode 100644
index 0000000000..3c6480924b
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_React-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_React-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_React-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..f885766199
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_React-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_React-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_React-Light.eps
new file mode 100644
index 0000000000..0f0b6cfd12
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_React-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_ReactiveX-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_ReactiveX-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..801b4c7825
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_ReactiveX-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_ReactiveX-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_ReactiveX-Dark.eps
new file mode 100644
index 0000000000..e00bc531fc
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_ReactiveX-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_ReactiveX-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_ReactiveX-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..2471bf3bc9
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_ReactiveX-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_ReactiveX-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_ReactiveX-Light.eps
new file mode 100644
index 0000000000..b96465dfc4
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_ReactiveX-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_RedHat-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_RedHat-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..6553fdeb20
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_RedHat-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_RedHat-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_RedHat-Dark.eps
new file mode 100644
index 0000000000..694700980b
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_RedHat-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_RedHat-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_RedHat-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..221c4fc06f
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_RedHat-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_RedHat-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_RedHat-Light.eps
new file mode 100644
index 0000000000..a1849795a4
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_RedHat-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Redis-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Redis-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..19d61c1ba7
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Redis-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Redis-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Redis-Dark.eps
new file mode 100644
index 0000000000..13df8aac4c
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Redis-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Redis-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Redis-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..e98ba1420d
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Redis-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Redis-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Redis-Light.eps
new file mode 100644
index 0000000000..0f18c843c6
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Redis-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Redux-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Redux-eps-converted-to.pdf
new file mode 100644
index 0000000000..a8f12e95d5
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Redux-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Redux.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Redux.eps
new file mode 100644
index 0000000000..3738a9bec3
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Redux.eps
@@ -0,0 +1,8471 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%BoundingBox: 0 0 256 256
+%%HiResBoundingBox: 0.00 0.00 256.00 256.00
+%%Creator: (Zamzar)
+%%LanguageLevel: 2
+%%CreationDate: D:20240513225524Z00'00'
+%%Pages: 1
+%%Copyright: (Zamzar)
+%%EndComments
+%%BeginProlog
+/DSC_OPDFREAD true def
+/SetPageSize false def
+/EPS2Write true def
+currentdict/DSC_OPDFREAD known{
+currentdict/DSC_OPDFREAD get
+}{
+false
+}ifelse
+10 dict begin
+/DSC_OPDFREAD exch def
+/this currentdict def
+/y 720 def
+/ebuf 200 string def
+/prnt{
+36//this/y get moveto//ebuf cvs show
+//this/y 2 copy get 12 sub put
+}bind def
+/newline{
+36//this/y get moveto
+//this/y 2 copy get 12 sub put
+}bind def
+errordict/handleerror
+{systemdict begin
+$error begin
+newerror
+{(%%[ Error handled by opdfread.ps : )print errorname//ebuf cvs print(; OffendingCommand: )
+print/command load//ebuf cvs print( ]%%)= flush
+/newerror false store vmstatus pop pop 0 ne
+{grestoreall
+}if
+errorname(VMerror)ne
+{showpage
+}if
+initgraphics
+0 720 moveto
+errorname(VMerror)eq
+{//this/ehsave known
+{clear//this/ehsave get restore 2 vmreclaim
+}if
+vmstatus exch pop exch pop
+}
+/Courier 12 selectfont
+{
+(ERROR: )//prnt exec errorname//prnt exec
+(OFFENDING COMMAND: )//prnt exec
+/command load//prnt exec
+$error/ostack known{
+(%%[STACK:)=
+(STACK:)//prnt exec
+$error/ostack get aload length{
+//newline exec
+dup mark eq{
+(-mark-)dup = show
+}{
+dup type/nametype eq{
+dup xcheck not{
+(/)show
+(/)print
+}if
+}if
+dup =//ebuf cvs show
+}ifelse
+}repeat
+}if
+}ifelse
+(%%]%)=
+//systemdict/showpage get exec
+quit
+}if
+end
+end
+}bind readonly put
+end
+50 dict begin
+/DefaultSwitch
+{
+dup where{
+pop pop
+}{
+false def
+}ifelse
+}bind def
+/=string 256 string def
+/=only{
+//=string cvs print
+}bind def
+/HexDigits(0123456789ABCDEF)readonly def
+/PrintHex
+{8{
+dup -28 bitshift 15 and//HexDigits exch 1 getinterval//=only exec
+4 bitshift
+}repeat
+pop
+}bind def
+/PDFR_DEBUG DefaultSwitch
+/PDFR_DUMP DefaultSwitch
+/PDFR_STREAM DefaultSwitch
+/TTFDEBUG DefaultSwitch
+/RotatePages DefaultSwitch
+/FitPages DefaultSwitch
+/CenterPages DefaultSwitch
+/SetPageSize DefaultSwitch
+/error
+{
+counttomark 1 sub -1 0{
+index dup type/arraytype eq{==}{=only}ifelse
+}for
+()=
+cleartomark
+....Undefined
+}bind def
+//SetPageSize{
+//RotatePages//FitPages or//CenterPages or{
+mark(/RotatePages, /FitPages and CenterPages are not allowed with /SetPageSize)//error exec
+}if
+}
+{
+//FitPages//CenterPages and{
+mark(CenterPages is not allowed with /FitPages)//error exec
+}if
+}
+ifelse
+/knownget
+{
+2 copy known{
+get true
+}{
+pop pop false
+}ifelse
+}bind def
+/IsUpper
+{dup(A)0 get ge exch(Z)0 get le and
+}bind def
+/cpa2g{
+dup length array
+0 1 2 index length 1 sub{
+dup 3 index exch get cp2g
+3 copy put pop pop
+}for
+exch pop
+}bind def
+/cpd2g{
+dup length dict exch{
+cp2g 2 index 3 1 roll put
+}forall
+}bind def
+/cps2g{
+dup length string copy
+}bind def
+/cp2gprocs
+<</arraytype//cpa2g/dicttype//cpd2g/packedarraytype//cpa2g/stringtype//cps2g >>
+def
+/cp2g{
+dup gcheck not{
+dup//cp2gprocs 1 index type
+2 copy known{
+get currentglobal 3 1 roll true setglobal exec exch setglobal
+1 index wcheck not{readonly}if
+1 index xcheck{cvx}if
+exch pop
+}{
+pop pop
+}ifelse
+}if
+}bind def
+/BlockBuffer 65535 string def
+/PDFReader currentdict def
+/ObjectRegistryMaxLength 50000 def
+/ObjectRegistry 10 dict def
+ObjectRegistry
+begin
+0 ObjectRegistryMaxLength dict def
+end
+/CurrentObject null def
+/DoneDocumentStructure false def
+/GraphicState 20 dict begin
+/InitialTextMatrix matrix def
+/InitialMatrix matrix currentmatrix def
+currentdict end def
+/TempMatrix matrix def
+/GraphicStateStack 20 array def
+/GraphicStateStackPointer 0 def
+/InitialTextMatrixStack 20 array def
+/InitialTextMatrixStackPointer 0 def
+/PDFColorSpaces 50 dict def
+/InstalledFonts 50 dict def
+/MacRomanEncodingInverse null def
+currentglobal false setglobal
+userdict/PDFR_InitialGS gstate put
+userdict/PDFR_Patterns 50 dict put
+userdict/FuncDataReader 10 dict put
+setglobal
+/InitialExtGState 20 dict begin
+/BG2 currentblackgeneration cp2g def
+/UCR2 currentundercolorremoval cp2g def
+/TR2 currentglobal false setglobal[currentcolortransfer]exch setglobal cp2g def
+/HT currenthalftone cp2g def
+currentdict end readonly def
+/InitialGraphicState 20 dict begin
+/FontSize 0 def
+/CharacterSpacing 0 def
+/TextLeading 0 def
+/TextRenderingMode 0 def
+/WordSpacing 0 def
+currentdict end readonly def
+/SimpleColorSpaceNames 15 dict begin
+/DeviceGray true def
+/DeviceRGB true def
+/DeviceCMYK true def
+currentdict end readonly def
+/1_24_bitshift_1_sub 1 24 bitshift 1 sub def
+/ReadFontProcs 10 dict def
+/GetObject
+{
+dup ObjectRegistryMaxLength idiv
+//PDFReader/ObjectRegistry get exch knownget{
+exch knownget
+}{
+pop false
+}ifelse
+}bind def
+/PutObject
+{
+1 index ObjectRegistryMaxLength idiv
+//PDFReader/ObjectRegistry get 1 index knownget{
+exch pop
+3 1 roll put
+}{
+//PDFReader/ObjectRegistry get dup
+begin
+1 index ObjectRegistryMaxLength dict def
+end
+exch get
+3 1 roll put
+}ifelse
+}bind def
+/Register
+{
+1 index GetObject{
+dup xcheck{
+4 3 roll pop
+//PDFR_DEBUG{
+(Have a daemon for )print 2 index ==
+}if
+exec
+}{
+dup null ne{
+mark(The object )4 index(is already defined : )4 index//error exec
+}{
+pop
+}ifelse
+3 2 roll
+exec
+}ifelse
+}{
+3 2 roll
+exec
+}ifelse
+PutObject
+}bind def
+/IsRegistered
+{
+GetObject{
+null ne
+}{
+false
+}ifelse
+}bind def
+/GetRegistered
+{
+dup GetObject not{
+exch mark exch(Object )exch( isn't defined before needed (1).)//error exec
+}if
+dup xcheck{
+exch mark exch(Object )exch( isn't defined before needed (2).)//error exec
+}{
+dup null eq{
+exch mark exch(Object )exch( isn't defined before needed (3).)//error exec
+}if
+exch pop
+}ifelse
+}bind def
+/StandardFontNames<<
+/Times-Roman true
+/Helvetica true
+/Courier true
+/Symbol true
+/Times-Bold true
+/Helvetica-Bold true
+/Courier-Bold true
+/ZapfDingbats true
+/Times-Italic true
+/Helvetica-Oblique true
+/Courier-Oblique true
+/Times-BoldItalic true
+/Helvetica-BoldOblique true
+/Courier-BoldOblique true
+>>def
+/CleanAllResources
+{//PDFR_DEBUG{
+(CleanAllResources beg)=
+}if
+//PDFReader/ObjectRegistry get{
+dup length 0 exch 1 exch 1 sub{
+2 copy get dup xcheck{
+pop pop
+}{
+dup null eq{
+pop pop
+}{
+dup type/dicttype eq{/.Global known}{pop false}ifelse{
+pop
+}{
+//PDFR_DEBUG{
+(Dropping )print dup =
+}if
+1 index exch/DroppedObject put
+}ifelse
+}ifelse
+}ifelse
+}for
+pop
+}forall
+FontDirectory length dict begin
+FontDirectory{
+pop
+dup//StandardFontNames exch known not{
+dup null def
+}if
+pop
+}forall
+currentdict
+end{
+pop
+//PDFR_DEBUG{
+(Undefining font )print dup =
+}if
+undefinefont
+}forall
+//PDFR_DEBUG{
+(CleanAllResources end)=
+}if
+}bind def
+/PrintReference
+{
+//PDFR_DEBUG{
+({ )print
+dup{
+=only( )print
+}forall
+( })=
+}if
+}bind def
+/R
+{
+0 ne{
+exch mark exch(A referred object generation )exch( isn't 0.)//error exec
+}if
+[
+exch//GetRegistered/exec load
+]cvx
+//PrintReference exec
+}bind def
+/IsObjRef
+{
+dup type/arraytype eq{
+dup length 3 eq{
+dup xcheck exch
+dup 0 get type/integertype eq 3 2 roll and exch
+dup 1 get//GetRegistered eq 3 2 roll and exch
+2 get/exec load eq and
+}{
+pop false
+}ifelse
+}{
+pop false
+}ifelse
+}bind def
+/DoNothing
+{
+}def
+/RunTypeDaemon
+{
+dup type/dicttype eq{
+dup/Type//knownget exec{
+//PDFReader/TypeDaemons get exch
+//knownget exec{
+exec
+}if
+}if
+}if
+}bind def
+/obj
+{
+//PDFR_DEBUG{
+(Defining )print 1 index =only( )print dup =only( obj)=
+}if
+0 ne{
+exch mark exch(An object generation )exch( isn't 0.)//error exec
+}if
+}bind def
+/endobj
+{
+//PDFR_DEBUG{
+(endobj )=
+}if
+count 1 eq{
+pop
+}{
+dup type/dicttype eq{
+dup/.endobj_daemon//knownget exec{
+//PDFR_DEBUG{(.endobj_daemon for )print 2 index =}if
+exec
+}if
+}if
+dup type/dicttype eq{dup/ImmediateExec known}{false}ifelse{
+pop pop
+}{
+//PDFR_DEBUG{
+(Storing )print 1 index =
+}if
+//RunTypeDaemon exec
+//DoNothing 3 1 roll//Register exec
+}ifelse
+}ifelse
+}bind def
+/StoreBlock
+{
+//PDFR_DEBUG{
+(StoreBlock )print//PDFReader/BlockCount get =only(, Length = )print dup length =
+}if
+dup length string copy
+//PDFReader/BlockCount get exch
+//PDFReader/CurrentObject get 3 1 roll
+put
+//PDFReader/BlockCount get 1 add
+//PDFReader exch/BlockCount exch put
+}bind def
+/CheckLength
+{dup type/integertype ne{
+mark(Object length isn't an integer.)//error exec
+}if
+}bind def
+/ResolveD
+{
+3 copy pop get
+dup//IsObjRef exec{
+//PDFR_DEBUG{
+(Resolving )print//PrintReference exec
+}if
+exec
+exch exec
+}{
+exch pop
+}ifelse
+dup 4 1 roll
+put
+}bind def
+/ResolveA
+{2 index 2 index get
+dup//IsObjRef exec{
+exec
+exch exec
+3 copy put
+}{
+exch pop
+}ifelse
+exch pop exch pop
+}bind def
+/StoreStream
+{
+dup//PDFReader exch/CurrentObject exch put
+//PDFReader/BlockCount 0 put
+dup/Length//CheckLength//ResolveD exec
+//PDFR_DEBUG{
+(StoreStream Length = )print dup =
+}if
+currentfile exch()/SubFileDecode filter
+{dup//BlockBuffer readstring{
+//StoreBlock exec
+}{
+//StoreBlock exec
+exit
+}ifelse
+}loop
+pop
+//PDFReader/CurrentObject null put
+//PDFR_DEBUG{
+(StoreStream end.)=
+}if
+}bind def
+/MakeStreamDumper
+{
+//PDFR_DEBUG{
+(MakeStreamDumper beg.)=
+}if
+currentglobal exch dup gcheck setglobal
+[exch
+1 dict dup/c 0 put exch
+1024 string
+{readstring pop
+(StreamDumper )print 1 index/c get =string cvs print( )print
+dup length =string cvs print( <)print dup print(>\n)print
+dup length
+3 2 roll
+dup/c get
+3 2 roll
+add/c exch put
+}/exec load
+]
+cvx 0()/SubFileDecode filter
+exch setglobal
+//PDFR_DEBUG{
+(MakeStreamDumper end.)=
+}if
+}bind def
+/ShortFilterNames 15 dict begin
+/AHx/ASCIIHexDecode def
+/A85/ASCII85Decode def
+/LZW/LZWDecode def
+/Fl/FlateDecode def
+/RL/RunLengthDecode def
+/CCF/CCITTFaxDecode def
+/DCT/DCTDecode def
+currentdict end readonly def
+/AppendFilters
+{
+//PDFR_DEBUG{
+(AppendFilters beg.)=
+}if
+dup 3 1 roll
+/Filter//knownget exec{
+dup type/nametype eq{
+dup//ShortFilterNames exch//knownget exec{
+exch pop
+}if
+2 index/DecodeParms//knownget exec{
+exch
+}if
+filter
+}{
+dup 0 exch 1 exch length 1 sub{
+2 copy get
+dup//ShortFilterNames exch//knownget exec{
+exch pop
+}if
+3 1 roll
+4 index/DecodeParms//knownget exec{
+exch get
+}{
+pop null
+}ifelse
+dup null eq{
+pop 3 1 roll filter exch
+}{
+3 1 roll
+4 1 roll filter exch
+}ifelse
+}for
+pop
+}ifelse
+//PDFR_DEBUG//PDFR_DUMP and{
+//MakeStreamDumper exec
+}if
+}if
+exch pop
+//PDFR_DEBUG{
+(AppendFilters end.)=
+}if
+}bind def
+/ExecuteStream
+{
+dup//PDFReader exch/CurrentObject exch put
+dup/Length//CheckLength//ResolveD exec
+//PDFR_DEBUG{
+(ExecuteStream id = )print 2 index =only( Length = )print dup =
+}if
+//PDFReader/InitialGraphicState get
+//PDFReader/GraphicState get copy pop
+//PDFReader/Operators get begin
+currentfile exch()/SubFileDecode filter
+1 index//AppendFilters exec
+cvx mark exch
+exec
+counttomark 0 ne{
+mark(Data left on ostack after an immediate stream execution.)//error exec
+}if
+cleartomark
+end
+//PDFR_DEBUG{
+(ExecuteStream end.)=
+}if
+//PDFReader/CurrentObject null put
+dup/IsPage known{
+dup/Context get/NumCopies//knownget exec{
+1 sub{
+copypage
+}repeat
+}if
+EPS2Write not{showpage}if
+}if
+}bind def
+/stream
+{
+//PDFR_DEBUG{
+1 index =only( stream)=
+}if
+1 index GetObject{
+dup xcheck{
+exec
+1 index null PutObject
+}{
+pop
+}ifelse
+}if
+dup/ImmediateExec known{
+dup/GlobalExec//knownget exec{
+currentglobal 4 1 roll
+setglobal
+//ExecuteStream exec
+3 2 roll setglobal
+}{
+//ExecuteStream exec
+}ifelse
+}{
+//StoreStream exec
+}ifelse
+dup/.CleanResources//knownget exec{
+/All eq{
+//CleanAllResources exec
+}if
+}if
+}bind def
+/HookFont
+{
+//PDFR_DEBUG{
+(Loaded the font )print dup/FontName get =
+}if
+{
+dup/FontFileType get dup/Type1 eq exch/MMType1 eq or{
+dup/FontName get
+//PDFReader/RemoveFontNamePrefix get exec
+findfont
+exit
+}if
+dup/FontFileType get/TrueType eq{
+//PDFReader/MakeType42 get exec
+//PDFR_DEBUG{
+(Font dict <<)=
+dup{
+1 index/sfnts eq{
+exch pop
+(/sfnts [)print
+{
+(-string\()print length//=only exec(\)- )=
+}forall
+(])=
+}{
+exch//=only exec( )print ==
+}ifelse
+}forall
+(>>)=
+}if
+dup/FontName get exch definefont
+exit
+}if
+mark(FontHook has no proc for )2 index/FontFileType get//error exec
+}loop
+/Font exch put
+}bind def
+/endstream
+{
+}bind def
+/xref
+{
+//PDFR_DEBUG{
+(xref)=
+//PDFR_DUMP{
+//PDFReader/ObjectRegistry get ==
+}if
+}if
+end
+count 0 ne{
+mark(Excessive data on estack at the end of the interpretation.)//error exec
+}if
+currentfile 1(%%EOF)/SubFileDecode filter
+flushfile
+cleardictstack
+}bind def
+/ResolveDict
+{dup{
+pop 1 index exch
+//DoNothing//ResolveD exec
+pop
+}forall
+pop
+}bind def
+/SetupPageView
+{
+//PDFR_DEBUG{
+(SetupPageView beg)=
+}if
+//DSC_OPDFREAD not{
+//GraphicState/InitialMatrix get setmatrix
+}if
+/MediaBox get aload pop
+3 index neg 3 index neg translate
+3 -1 roll sub 3 1 roll exch sub exch
+userdict/.HWMargins//knownget exec{
+aload pop
+}{
+currentpagedevice/.HWMargins//knownget exec{
+aload pop
+}{
+0 0 0 0
+}ifelse
+}ifelse
+currentpagedevice/PageSize get aload pop
+3 -1 roll sub 3 1 roll exch sub exch
+exch 3 index sub exch 3 index sub
+//SetPageSize{
+//PDFR_DEBUG{
+(Setting page size to )print 1 index//=only exec( )print dup =
+}if
+pop pop 3 index 3 index 2 copy
+currentglobal false setglobal 3 1 roll
+currentpagedevice dup/PageSize known{
+/PageSize get aload pop
+}{
+0 0
+}ifelse
+round cvi 2 index round cvi eq
+exch round cvi 3 index round cvi eq and
+{
+//PDFR_DEBUG{(PageSize matches request)== flush}if
+pop pop
+}{
+/MediaRequested where{
+//PDFR_DEBUG{(MediaRequested is true, check against new request)== flush}if
+/MediaRequested get aload pop
+round cvi 2 index round cvi eq
+exch round cvi 3 index round cvi eq and
+{
+//PDFR_DEBUG{(MediaRequested same as current request, ignore)== flush}if
+pop pop false
+}{
+//PDFR_DEBUG{(MediaRequested different to current request)== flush}if
+true
+}ifelse
+}{
+//PDFR_DEBUG{(No MediaRequested yet)== flush}if
+true
+}ifelse
+{
+//PDFR_DEBUG{(Setting pagesize)== flush}if
+2 array astore
+dup/MediaRequested exch def
+<< exch/PageSize exch >>setpagedevice
+}if
+}ifelse
+userdict/PDFR_InitialGS gstate put
+setglobal
+}if
+//RotatePages{
+2 copy gt 6 index 6 index gt ne{
+1 index 5 index le 1 index 5 index le and not
+}{
+false
+}ifelse
+}{
+false
+}ifelse
+{//CenterPages{
+//PDFR_DEBUG{
+(Rotating page, and then centering it)==
+}if
+90 rotate
+0 5 index neg translate
+5 index 1 index exch sub 2 div
+2 index 6 index sub 2 div neg
+translate
+}{
+//FitPages{
+1 index 5 index div 1 index 7 index div
+2 copy gt{
+exch
+}if
+pop dup scale
+}if
+90 rotate
+0 5 index neg translate
+}ifelse
+}{
+//CenterPages{
+//PDFR_DEBUG{
+(Ccentering page)==
+}if
+1 index 6 index sub 2 div
+1 index 6 index sub 2 div
+translate
+}{
+//FitPages{
+1 index 6 index div 1 index 6 index div
+2 copy gt{
+exch
+}if
+pop dup scale
+}if
+}ifelse
+}ifelse
+pop pop
+translate
+pop pop
+//PDFR_DEBUG{
+(SetupPageView end)=
+}if
+}bind def
+/PageContentsDaemon
+{
+//PDFR_DEBUG{
+(Executing PageContentsDaemon for )print 2 index =
+}if
+1 index exch/Context exch put
+dup/ImmediateExec true put
+dup/IsPage true put
+SetPageSize{dup/Context get//SetupPageView exec}if
+}bind def
+/FontFileDaemon
+{
+//PDFR_DEBUG{
+(Executing FontFileDaemon for )print 2 index =
+}if
+dup/FontFileType get
+2 index exch
+dup//ReadFontProcs exch//knownget exec{
+exch pop exec
+}{
+mark(FontFile reader for )2 index( isn't implemented yet.)//error exec
+}ifelse
+//PDFR_DEBUG{
+(FontFileDaemon end)=
+}if
+pop
+}bind def
+/FontDescriptorDaemon
+{
+//PDFR_DEBUG{
+(Executing FontDescriptorDaemon for )print 2 index =
+}if
+2 copy/FontResource exch put
+/Subtype get 1 index exch/FontFileType exch put
+}bind def
+/UnPDFEscape{
+dup dup length string cvs
+dup(#)search{
+{
+pop
+(16#--)2 index 0 2 getinterval
+1 index 3 2 getinterval copy pop
+cvi
+0 exch put
+0
+1 index 2 1 index length 2 sub getinterval
+3 copy putinterval
+length
+3 copy exch put
+getinterval
+(#)search not{
+pop exit
+}if
+}loop
+(\0)search pop exch pop exch pop
+cvn
+exch pop
+}{
+pop pop
+}ifelse
+}bind def
+/TypeDaemons<<
+/Page
+{//PDFR_DEBUG{
+(Recognized a page.)=
+}if
+dup/Contents//knownget exec{
+0 get//DoNothing exch
+[
+3 index//PageContentsDaemon/exec load
+]cvx
+//Register exec
+}{
+(fixme: page with no Contents won't be printed.)=
+}ifelse
+}bind
+/FontDescriptor
+{//PDFR_DEBUG{
+(Recognized a font descriptor.)=
+}if
+dup/FontName//knownget exec{
+1 index/FontName 3 -1 roll//UnPDFEscape exec put
+}if
+dup dup/FontFile known{/FontFile}{/FontFile2}ifelse
+//knownget exec{
+0 get//DoNothing exch
+[
+3 index//FontFileDaemon/exec load
+]cvx
+//Register exec
+}{
+(Font descriptor )print 1 index =only( has no FontFile.)=
+}ifelse
+}bind
+/Font
+{//PDFR_DEBUG{
+(Recognized a font resource.)=
+}if
+dup/BaseFont//knownget exec{
+//UnPDFEscape exec 2 copy/BaseFont exch put
+//PDFReader/RemoveFontNamePrefix get exec
+currentglobal exch
+dup/Font resourcestatus{
+pop pop
+//PDFReader/GetInstalledFont get exec pop
+}{
+pop
+}ifelse
+setglobal
+}if
+dup/FontDescriptor//knownget exec{
+0 get
+dup//IsRegistered exec{
+//PDFR_DEBUG{
+(already registered )print dup =
+}if
+pop
+}{
+//DoNothing exch
+[
+3 index//FontDescriptorDaemon/exec load
+]cvx
+//Register exec
+}ifelse
+}if
+}bind
+>>def
+/MakeStreamReader
+{dup
+[
+exch
+//PDFR_DEBUG{
+(Stream proc )
+/print load
+//PDFR_STREAM{
+(<)
+/print load
+}if
+}if
+1 dict dup/i -1 put
+/dup load
+/i
+/get load
+1
+/add load
+/dup load
+3
+1
+/roll load
+/i
+/exch load
+/put load
+//knownget
+/exec load
+/not load
+{()}
+/if load
+//PDFR_DEBUG{
+//PDFR_STREAM{
+/dup load
+/print load
+(>)
+/print load
+}if
+( end of stream proc.\n)
+/print load
+}if
+]cvx
+//PDFR_DEBUG{
+(Stream reader )print dup ==
+}if
+0()/SubFileDecode filter
+exch//AppendFilters exec
+}bind def
+/RunDelayedStream
+{
+//GraphicState/InitialTextMatrix get
+//InitialTextMatrixStack//PDFReader/InitialTextMatrixStackPointer get
+2 copy get null eq{
+2 copy currentglobal true setglobal matrix exch setglobal put
+}if
+get copy pop
+//PDFReader/InitialTextMatrixStackPointer 2 copy get 1 add put
+//MakeStreamReader exec
+mark exch
+cvx exec
+counttomark 0 ne{
+mark(Data left on ostack after a delayed stream execution.)//error exec
+}if
+cleartomark
+//PDFReader/InitialTextMatrixStackPointer 2 copy get 1 sub put
+//InitialTextMatrixStack//PDFReader/InitialTextMatrixStackPointer get get
+//GraphicState/InitialTextMatrix get
+copy pop
+}bind def
+//ReadFontProcs begin
+/Type1
+{//PDFR_DEBUG{
+(ReadFontProcs.Type1)=
+}if
+dup/.endobj_daemon[4 index//HookFont/exec load]cvx put
+dup/ImmediateExec true put
+/GlobalExec true put
+}bind def
+/MMType1//Type1 def
+/TrueType
+{//PDFR_DEBUG{
+(ReadFontProcs.TrueType)=
+}if
+dup/.endobj_daemon[4 index//HookFont/exec load]cvx put
+pop
+}bind def
+end
+/.opdloadttfontdict 50 dict def
+.opdloadttfontdict begin
+/maxstring 65400 def
+end
+/.InsertionSort
+{
+/CompareProc exch def
+/Array exch def
+1 1 Array length 1 sub
+{
+/Ix exch def
+/Value1 Array Ix get def
+/Jx Ix 1 sub def
+{
+Jx 0 lt{
+exit
+}if
+/Value2 Array Jx get def
+Value1 Value2 CompareProc{
+exit
+}if
+Array Jx 1 add Value2 put
+/Jx Jx 1 sub def
+}loop
+Array Jx 1 add Value1 put
+}for
+Array
+}bind def
+/putu16{
+3 copy -8 bitshift put
+exch 1 add exch 16#ff and put
+}bind def
+/putu32{
+3 copy -16 bitshift putu16
+exch 2 add exch 16#ffff and putu16
+}bind def
+/.readtable{
+dup dup 1 and add string
+dup 0 4 -1 roll getinterval
+3 -1 roll exch
+dup()ne{readstring}if pop pop
+}bind def
+/.readbigtable{
+dup maxstring lt{
+.readtable
+}{
+currentuserparams/VMReclaim get -2 vmreclaim
+[4 2 roll{
+dup maxstring le{exit}if
+1 index maxstring string readstring pop 3 1 roll maxstring sub
+}loop .readtable]
+exch vmreclaim
+}ifelse
+}bind def
+/ReadTTF
+{
+.opdloadttfontdict begin
+/TTFontFile exch def
+/TableDir TTFontFile 12 string readstring pop def
+/tables TTFontFile TableDir 4 getu16 16 mul string readstring pop def
+/tabarray tables length 16 idiv array def
+TableDir 0 4 getinterval(ttcf)eq{
+QUIET not{(Can't handle TrueType font Collections.)=}if
+/.loadttfonttables cvx/invalidfont signalerror
+}{
+0 16 tables length 1 sub{
+dup
+tables exch 16 getinterval
+exch 16 div cvi exch
+tabarray 3 1 roll put
+}for
+}ifelse
+tabarray{exch 8 getu32 exch 8 getu32 gt}.InsertionSort pop
+/Read TableDir length tables length add def
+/tabs[
+tabarray{
+dup 8 getu32
+Read sub
+dup 0 gt{
+dup string TTFontFile exch readstring pop pop
+Read add/Read exch def
+}{
+pop
+}ifelse
+12 getu32
+dup Read add
+/Read exch def
+TTFontFile exch .readbigtable
+}forall
+]def
+end
+}bind def
+/GetLocaType
+{
+0 1 tabarray length 1 sub{
+dup tabarray exch get
+0 4 getinterval(head)eq{
+tabs exch get
+50 gets16
+/LocaType exch def
+exit
+}{
+pop
+}ifelse
+}for
+}bind def
+/GetNumGlyphs
+{
+0 1 tabarray length 1 sub{
+dup tabarray exch get
+0 4 getinterval(maxp)eq{
+tabs exch get
+4 getu16
+/NumGlyphs exch def
+exit
+}{
+pop
+}ifelse
+}for
+}bind def
+/StringToLoca
+{
+/LocaIndex exch def
+/StringOffset 0 def
+{
+dup length StringOffset gt{
+dup
+LocaType 1 eq{
+StringOffset getu32
+LocaArray LocaIndex 3 -1 roll put
+/LocaIndex LocaIndex 1 add def
+/StringOffset StringOffset 4 add
+def
+}{
+StringOffset getu16 2 mul
+LocaArray length LocaIndex gt{
+LocaArray LocaIndex 3 -1 roll put
+}{
+pop
+}ifelse
+/LocaIndex LocaIndex 1 add def
+/StringOffset StringOffset 2 add
+def
+}ifelse
+}{
+pop
+LocaIndex
+exit
+}ifelse
+}loop
+}bind def
+/GetSortedLoca
+{
+NumGlyphs 1 add array/LocaArray exch def
+0 1 tabarray length 1 sub{
+dup tabarray exch get
+0 4 getinterval(loca)eq{
+tabs exch get
+exit
+}{
+pop
+}ifelse
+}for
+dup type/stringtype eq{
+0 StringToLoca pop
+}{
+0 exch
+{
+exch StringToLoca
+}forall
+pop
+}ifelse
+LocaArray{gt}.InsertionSort pop
+}bind def
+/GetWorkingString
+{
+WorkString 0
+GlyfArray GlyfStringIndex get
+putinterval
+/WorkBytes GlyfArray GlyfStringIndex get length def
+/GlyfStringIndex GlyfStringIndex 1 add def
+}bind def
+/GetWorkingBytes
+{
+/BytesToRead exch def
+WorkString 0 BytesToRead getinterval
+dup length string copy
+WorkString BytesToRead WorkBytes BytesToRead sub getinterval
+dup length string copy
+WorkString 0 3 -1 roll putinterval
+/WorkBytes WorkBytes BytesToRead sub def
+}bind def
+/GetGlyfBytes
+{
+/ToRead exch def
+WorkBytes 0 eq{
+GetWorkingString
+}if
+WorkBytes ToRead ge{
+ToRead string dup 0
+ToRead GetWorkingBytes putinterval
+}{
+ToRead string
+dup
+0
+WorkString 0 WorkBytes getinterval
+putinterval
+dup
+WorkBytes
+ToRead WorkBytes sub
+GetWorkingString
+GetWorkingBytes
+putinterval
+}ifelse
+}bind def
+/SplitGlyf
+{
+/GlyfArray exch def
+/DestArray GlyfArray length 2 mul array def
+/DestArrayIndex 0 def
+/LastLoca 0 def
+/NextLocaIndex 0 def
+/LastLocaIndex 0 def
+/GlyfStringIndex 0 def
+/WorkString maxstring string def
+/WorkBytes 0 def
+{
+LocaArray NextLocaIndex get
+LastLoca sub maxstring gt
+{
+LocaArray LastLocaIndex get LastLoca sub
+GetGlyfBytes
+DestArray DestArrayIndex 3 -1 roll put
+/DestArrayIndex DestArrayIndex 1 add def
+LocaArray LastLocaIndex get/LastLoca exch def
+}{
+/LastLocaIndex NextLocaIndex def
+/NextLocaIndex NextLocaIndex 1 add def
+NextLocaIndex NumGlyphs gt
+{
+WorkBytes
+GlyfStringIndex GlyfArray length lt{
+GlyfArray GlyfStringIndex get length
+add string dup
+0
+WorkString 0 WorkBytes getinterval
+putinterval
+dup
+WorkBytes
+GetWorkingString
+WorkString 0 WorkBytes getinterval
+putinterval
+}{
+pop
+WorkString 0 WorkBytes getinterval
+}ifelse
+dup length string copy
+DestArray DestArrayIndex 3 -1 roll put
+exit
+}if
+}ifelse
+}loop
+DestArray
+}bind def
+/ProcessTTData
+{
+.opdloadttfontdict begin
+0 1 tabarray length 1 sub{
+/ix exch def
+tabarray ix get
+12 getu32 dup maxstring le{
+dup 4 mod 0 ne{
+4 div cvi 1 add 4 mul string/newstring exch def
+/oldstring tabs ix get def
+newstring 0 oldstring putinterval
+0 1 newstring length oldstring length sub 1 sub{
+newstring exch oldstring length add 0 put
+}for
+tabs ix newstring put
+}{
+pop
+}ifelse
+}{
+dup 4 mod 0 ne{
+dup maxstring idiv maxstring mul sub
+4 idiv 1 add 4 mul string/newstring exch def
+tabs ix get
+dup length 1 sub dup/iy exch def get/oldstring exch def
+newstring 0 oldstring putinterval
+0 1 newstring length oldstring length sub 1 sub{
+newstring exch oldstring length add 0 put
+}for
+tabs ix get iy newstring put
+}{
+pop
+}ifelse
+}ifelse
+}for
+0 1 tabarray length 1 sub{
+dup tabarray exch get
+dup 12 getu32 maxstring gt{
+0 4 getinterval dup(glyf)eq{
+pop
+GetLocaType
+GetNumGlyphs
+GetSortedLoca
+dup tabs exch get
+SplitGlyf
+tabs 3 1 roll put
+}{
+(Warning, table )print print( > 64Kb\n)print
+pop
+}ifelse
+}{
+pop
+pop
+}ifelse
+}for
+end
+}bind def
+/Makesfnts
+{
+.opdloadttfontdict begin
+0
+tabs{
+dup type/stringtype eq{
+pop
+1 add
+}{
+{
+type/stringtype eq{
+1 add
+}if
+}forall
+}ifelse
+}forall
+1 add
+/TTOffset
+TableDir length
+tabarray length 16 mul add
+def
+0
+tabarray{
+exch dup 1 add
+3 1 roll
+dup
+tabs exch get
+dup type/stringtype eq{
+length
+2 index exch
+TTOffset
+dup 3 1 roll add
+/TTOffset exch def
+8 exch putu32
+exch tabarray 3 1 roll
+put
+}{
+0 exch
+{
+dup type/stringtype eq{
+length add
+}{
+pop
+}ifelse
+}forall
+2 index exch
+TTOffset
+dup 3 1 roll add
+/TTOffset exch def
+8 exch putu32
+exch tabarray 3 1 roll
+put
+}ifelse
+}forall
+pop
+array
+dup 0
+TableDir length
+tables length add
+string
+dup 0 TableDir putinterval
+dup 12 tables putinterval
+put
+dup
+/ix 1 def
+tabs{
+dup type/stringtype eq{
+ix exch
+put dup
+/ix ix 1 add def
+}{
+{
+dup type/stringtype eq{
+ix exch put dup
+/ix ix 1 add def
+}{
+pop
+}ifelse
+}forall
+}ifelse
+}forall
+pop
+end
+}bind def
+/MakeType42
+{
+//PDFR_DEBUG{
+(MakeType42 beg)=
+}if
+10 dict begin
+/FontName 1 index/FontName get def
+/FontType 42 def
+/FontMatrix[1 0 0 1 0 0]def
+/FontBBox 1 index/FontBBox get def
+dup/FontResource get
+dup/Encoding known{
+//PDFReader/ObtainEncoding get exec
+/Encoding get
+}{
+pop null
+}ifelse
+/PDFEncoding exch def
+/CharStrings 2 index//PDFReader/MakeTTCharStrings get exec def
+/sfnts 2 index//MakeStreamReader exec
+ReadTTF
+ProcessTTData
+Makesfnts
+def
+/Encoding StandardEncoding def
+/PaintType 0 def
+currentdict end
+//PDFR_DEBUG{
+(MakeType42 end)=
+}if
+}bind def
+/GetInstalledFont
+{
+dup//InstalledFonts exch knownget{
+exch pop
+}{
+dup findfont dup 3 1 roll
+//InstalledFonts 3 1 roll put
+}ifelse
+}bind def
+/RemoveFontNamePrefix
+{//=string cvs true
+0 1 5{
+2 index exch get//IsUpper exec not{
+pop false exit
+}if
+}for
+{(+)search{
+pop pop
+}if
+}if
+cvn
+}bind def
+/CheckFont
+{dup/Type get/Font ne{
+mark(Resource )3 index( must have /Type/Font .)//error exec
+}if
+}bind def
+/CheckEncoding
+{dup type/nametype ne{
+dup/Type get/Encoding ne{
+mark(Resource )3 index( must have /Type/Encoding .)//error exec
+}if
+}if
+}bind def
+/ObtainEncoding
+{dup/Encoding known{
+dup dup/Encoding//CheckEncoding//ResolveD exec
+dup type dup/arraytype eq exch/packedarraytype eq or{
+pop pop
+}{
+dup type/nametype eq{
+/Encoding findresource
+}{
+dup/BaseEncoding//knownget exec not{
+/StandardEncoding
+}if
+/Encoding findresource
+exch
+/Differences//knownget exec{
+exch dup length array copy exch
+0 exch
+{
+dup type/integertype eq{
+exch pop
+}{
+3 copy put pop
+1 add
+}ifelse
+}forall
+pop
+}if
+}ifelse
+/Encoding exch put
+}ifelse
+}{
+dup/Encoding/StandardEncoding/Encoding findresource put
+}ifelse
+}bind def
+/ObtainMetrics
+{dup/Widths//knownget exec{
+1 index/Encoding get
+256 dict
+3 index/Subtype get/TrueType eq{
+1000
+}{
+1
+}ifelse
+4 index/MissingWidth//knownget exec not{
+0
+}if
+5 index/FirstChar//knownget exec not{
+0
+}if
+6 5 roll
+dup 0 exch 1 exch length 1 sub{
+2 copy get
+exch 3 index add
+7 index exch get
+dup dup null ne exch/.notdef ne and{
+6 index 3 1 roll exch
+6 index div
+3 copy pop//knownget exec{
+0 eq
+}{
+true
+}ifelse
+{put
+}{
+pop pop pop
+}ifelse
+}{
+pop pop
+}ifelse
+}for
+pop pop pop pop exch pop
+1 index exch/Metrics exch put
+}{
+dup/MissingWidth//knownget exec{
+256 dict
+2 index/Encoding get{
+dup null ne{
+3 copy 3 2 roll put
+}if
+pop
+}forall
+exch pop
+1 index exch/Metrics exch put
+}if
+}ifelse
+}bind def
+/NotDef
+{
+FontMatrix aload pop pop pop exch pop exch pop
+1 exch div exch
+1 exch div exch
+1 index 0 setcharwidth
+0 setlinewidth
+0 0 moveto
+2 copy rlineto
+1 index 0 rlineto
+neg exch neg exch rlineto
+closepath stroke
+}bind def
+/SaveResourcesToStack
+{
+[
+//PDFReader/OldResources known{
+//PDFReader/OldResources get
+}{
+null
+}ifelse
+//PDFReader/CurrentObject get/Context get/Resources get
+]
+//PDFReader/OldResources 3 -1 roll put
+}bind def
+/RestoreResourcesFromStack
+{
+//PDFReader/OldResources get dup
+0 get//PDFReader/OldResources 3 -1 roll put
+1 get//PDFReader/CurrentObject get/Context get/Resources 3 -1 roll put
+}bind def
+/BuildChar
+{//PDFR_DEBUG{
+(BuildChar )print dup//=only exec( )print
+}if
+exch begin
+Encoding exch get
+//PDFR_DEBUG{
+dup =
+}if
+dup null eq{
+pop//NotDef exec
+}
+{
+CharProcs exch//knownget exec
+{
+currentfont/Font get/Resources//knownget exec{
+exec
+SaveResourcesToStack
+//PDFReader/CurrentObject get/Context get
+/Resources 3 -1 roll put
+//RunDelayedStream exec
+RestoreResourcesFromStack
+}{
+//RunDelayedStream exec
+}ifelse
+}
+{
+//NotDef exec
+}ifelse
+}ifelse
+end
+}bind def
+/printdict
+{(<<)=
+{exch = ==}forall
+(>>)=
+}bind def
+/printfont
+{
+dup{
+exch dup =
+dup/Encoding eq{
+pop =
+}{
+dup/FontInfo eq exch/Private eq or{
+//printdict exec
+}{
+==
+}ifelse
+}ifelse
+}forall
+}bind def
+/ScaleMetrics
+{1 index{
+2 index div
+3 index
+3 1 roll put
+}forall
+pop
+}bind def
+/ResolveAndSetFontAux
+{exch dup
+//PDFReader/CurrentObject get/Context get/Resources get
+/Font//DoNothing//ResolveD exec
+exch//CheckFont//ResolveD exec
+dup/Font//knownget exec{
+exch pop exch pop
+}{
+{
+dup/Subtype get dup dup/Type1 eq exch/TrueType eq or exch/MMType1 eq or{
+exch pop
+dup/BaseFont get
+//RemoveFontNamePrefix exec
+//PDFR_DEBUG{
+(Font )print dup =
+}if
+1 index/FontDescriptor known{
+//PDFR_DEBUG{
+(Font from a font descriptor.)=
+}if
+1 index
+/FontDescriptor//DoNothing//ResolveD exec
+/Font//knownget exec{
+exch pop
+}{
+//PDFR_DEBUG{
+(Font descriptor has no Font resolved.)=
+}if
+//GetInstalledFont exec
+}ifelse
+}{
+//GetInstalledFont exec
+}ifelse
+exch
+dup/Encoding known not{
+1 index/Encoding get 1 index exch/Encoding exch put
+}if
+//ObtainEncoding exec
+//ObtainMetrics exec
+exch
+dup length dict copy
+dup 2 index/Encoding get
+/Encoding exch put
+1 index/Metrics//knownget exec{
+2 index/Subtype get/TrueType ne{
+1 index/FontMatrix get 0 get
+dup 0 eq{
+pop
+1 index/FontMatrix get 1 get
+dup 0 eq{pop 1}if
+}if
+0.001 div
+//ScaleMetrics exec
+}{
+1 index/sfnts known not{
+1 index/FontMatrix get 0 get
+dup 0 eq{
+pop
+1 index/FontMatrix get 1 get
+dup 0 eq{pop 1}if
+}if
+//ScaleMetrics exec
+}if
+}ifelse
+1 index exch/Metrics exch put
+}if
+1 index/BaseFont get
+exch
+dup/FID undef
+dup/UniqueID undef
+definefont
+dup 3 1 roll
+/Font exch put
+exit
+}if
+dup/Subtype get/Type3 eq{
+//ObtainEncoding exec
+2 copy exch/FontName exch put
+dup/CharProcs get//ResolveDict exec
+dup/FontType 3 put
+dup/BuildChar//BuildChar put
+dup dup/Font exch put
+dup 3 1 roll
+definefont
+2 copy ne{
+2 copy/Font exch put
+}if
+exch pop
+exit
+}if
+dup/Subtype get/Type0 eq{
+}if
+dup/Subtype get/CIDFontType0 eq{
+}if
+dup/Subtype get/CIDFontType2 eq{
+}if
+mark(Unknown font type )2 index/Subtype get//error exec
+}loop
+}ifelse
+exch scalefont setfont
+}bind def
+/ResolveAndSetFont
+{
+//ResolveAndSetFontAux exec
+}bind def
+/.knownget
+{2 copy known{
+get true
+}{
+pop pop false
+}ifelse
+}bind def
+/.min
+{2 copy lt{
+exch
+}if
+pop
+}bind def
+/.max
+{2 copy gt{
+exch
+}if
+pop
+}bind def
+/.dicttomark
+{>>
+}bind def
+/getu16{
+2 copy get 8 bitshift 3 1 roll 1 add get add
+}bind def
+/gets16{
+getu16 16#8000 xor 16#8000 sub
+}bind def
+/getu32{
+2 copy getu16 16 bitshift 3 1 roll 2 add getu16 add
+}bind def
+/gets32{
+2 copy gets16 16 bitshift 3 1 roll 2 add getu16 add
+}bind def
+/cmapformats mark
+0{
+6 256 getinterval{}forall 256 packedarray
+}bind
+2{
+/sHK_sz 2 def
+/sH_sz 8 def
+dup 2 getu16/cmapf2_tblen exch def
+dup 4 getu16/cmapf2_lang exch def
+dup 6 256 sHK_sz mul getinterval/sHKs exch def
+0
+0 1 255{
+sHKs exch
+2 mul getu16
+1 index
+1 index
+lt{exch}if pop
+}for
+/sH_len exch def
+dup 6 256 sHK_sz mul add
+cmapf2_tblen 1 index sub getinterval
+/sH_gIA exch def
+/cmapf2_glyph_array 65535 array def
+/.cmapf2_putGID{
+/cmapf2_ch cmapf2_ch_hi 8 bitshift cmapf2_ch_lo add def
+firstCode cmapf2_ch_lo le
+cmapf2_ch_lo firstCode entryCount add lt
+and{
+sH_offset idRangeOffset add
+cmapf2_ch_lo firstCode sub 2 mul
+add 6 add
+sH_gIA exch getu16
+dup 0 gt{
+idDelta add
+cmapf2_glyph_array exch cmapf2_ch exch put
+}{
+pop
+}ifelse
+}{
+}ifelse
+}def
+16#00 1 16#ff{
+/cmapf2_ch_hi exch def
+sHKs cmapf2_ch_hi sHK_sz mul getu16
+/sH_offset exch def
+sH_gIA sH_offset sH_sz getinterval
+dup 0 getu16/firstCode exch def
+dup 2 getu16/entryCount exch def
+dup 4 gets16/idDelta exch def
+dup 6 getu16/idRangeOffset exch def
+pop
+sH_offset 0 eq{
+/cmapf2_ch_lo cmapf2_ch_hi def
+/cmapf2_ch_hi 0 def
+.cmapf2_putGID
+}{
+16#00 1 16#ff{
+/cmapf2_ch_lo exch def
+.cmapf2_putGID
+}for
+}ifelse
+}for
+pop
+0 1 cmapf2_glyph_array length 1 sub{
+dup cmapf2_glyph_array exch get
+null eq{cmapf2_glyph_array exch 0 put}{pop}ifelse
+}for
+cmapf2_glyph_array
+}bind
+4{
+/etab exch def
+/nseg2 etab 6 getu16 def
+14/endc etab 2 index nseg2 getinterval def
+2 add
+nseg2 add/startc etab 2 index nseg2 getinterval def
+nseg2 add/iddelta etab 2 index nseg2 getinterval def
+nseg2 add/idroff etab 2 index nseg2 getinterval def
+pop
+/firstcode startc 0 getu16 16#ff00 and dup 16#f000 ne{pop 0}if def
+/lastcode firstcode def
+/striptopbyte false def
+/putglyph{
+glyphs code 3 -1 roll put/code code 1 add def
+}bind def
+/numcodes 0 def/glyphs 0 0 2 nseg2 3 sub{
+/i2 exch def
+/scode startc i2 getu16 def
+/ecode endc i2 getu16 def
+ecode lastcode gt{
+/lastcode ecode def
+}if
+}for pop
+firstcode 16#f000 ge lastcode firstcode sub 255 le and{
+lastcode 255 and
+/striptopbyte true def
+}{
+lastcode
+}ifelse
+1 add
+array def
+glyphs length 1024 ge{
+.array1024z 0 1024 glyphs length 1023 sub{glyphs exch 2 index putinterval}for
+glyphs dup length 1024 sub 3 -1 roll
+putinterval
+}{
+0 1 glyphs length 1 sub{glyphs exch 0 put}for
+}ifelse
+/numcodes 0 def/code 0 def
+0 2 nseg2 3 sub{
+/i2 exch def
+/scode startc i2 getu16 def
+/ecode endc i2 getu16 def
+numcodes scode firstcode sub
+exch sub 0 .max dup/code exch code exch add def
+ecode scode sub 1 add add numcodes add/numcodes exch def
+/delta iddelta i2 gets16 def
+TTFDEBUG{
+(scode=)print scode =only
+( ecode=)print ecode =only
+( delta=)print delta =only
+( droff=)print idroff i2 getu16 =
+}if
+idroff i2 getu16 dup 0 eq{
+pop scode delta add 65535 and 1 ecode delta add 65535 and
+striptopbyte{
+/code scode 255 and def
+}{
+/code scode def
+}ifelse
+{putglyph}for
+}{
+/gloff exch 14 nseg2 3 mul add 2 add i2 add add def
+striptopbyte{
+/code scode 255 and def
+}{
+/code scode def
+}ifelse
+0 1 ecode scode sub{
+2 mul gloff add etab exch getu16
+dup 0 ne{delta add 65535 and}if putglyph
+}for
+}ifelse
+}for glyphs/glyphs null def
+}bind
+6{
+dup 6 getu16/firstcode exch def dup 8 getu16/ng exch def
+firstcode ng add array
+0 1 firstcode 1 sub{2 copy 0 put pop}for
+dup firstcode ng getinterval
+0 1 ng 1 sub{
+dup 2 mul 10 add 4 index exch getu16 3 copy put pop pop
+}for pop exch pop
+}bind
+.dicttomark readonly def
+/cmaparray{
+dup 0 getu16 cmapformats exch .knownget{
+TTFDEBUG{
+(cmap: format )print 1 index 0 getu16 = flush
+}if exec
+}{
+(Can't handle format )print 0 getu16 = flush
+0 1 255{}for 256 packedarray
+}ifelse
+TTFDEBUG{
+(cmap: length=)print dup length = dup ==
+}if
+}bind def
+/postremap mark
+/Cdot/Cdotaccent
+/Edot/Edotaccent
+/Eoverdot/Edotaccent
+/Gdot/Gdotaccent
+/Ldot/Ldotaccent
+/Zdot/Zdotaccent
+/cdot/cdotaccent
+/edot/edotaccent
+/eoverdot/edotaccent
+/gdot/gdotaccent
+/ldot/ldotaccent
+/zdot/zdotaccent
+.dicttomark readonly def
+/get_from_stringarray
+{1 index type/stringtype eq{
+get
+}{
+exch{
+2 copy length ge{
+length sub
+}{
+exch get exit
+}ifelse
+}forall
+}ifelse
+}bind def
+/getinterval_from_stringarray
+{
+2 index type/stringtype eq{
+getinterval
+}{
+string exch 0
+4 3 roll{
+dup length
+dup 4 index lt{
+3 index exch sub
+exch pop 3 1 roll exch pop
+}{
+dup 3 1 roll
+4 index sub
+5 index length 4 index sub
+2 copy gt{exch}if pop
+dup 3 1 roll
+5 index exch getinterval
+5 index 4 index 3 index
+getinterval
+copy pop
+exch pop add exch pop 0 exch
+dup 3 index length ge{exit}if
+}ifelse
+}forall
+pop pop
+}ifelse
+}bind def
+/string_array_size
+{dup type/stringtype eq{
+length
+}{
+0 exch{length add}forall
+}ifelse
+}bind def
+/postformats mark
+16#00010000{
+pop MacGlyphEncoding
+}
+16#00020000{
+dup dup type/arraytype eq{0 get}if length 36 lt{
+TTFDEBUG{(post format 2.0 invalid.)= flush}if
+pop[]
+}{
+/postglyphs exch def
+/post_first postglyphs dup type/arraytype eq{0 get}if def
+post_first 32 getu16/numglyphs exch def
+/glyphnames numglyphs 2 mul 34 add def
+/postpos glyphnames def
+/total_length postglyphs//string_array_size exec def
+numglyphs array 0 1 numglyphs 1 sub{
+postpos total_length ge{
+1 numglyphs 1 sub{1 index exch/.notdef put}for
+exit
+}if
+postglyphs postpos//get_from_stringarray exec
+postglyphs postpos 1 add 2 index//getinterval_from_stringarray exec cvn
+exch postpos add 1 add/postpos exch def
+2 index 3 1 roll
+put
+}for
+/postnames exch def
+numglyphs array 0 1 numglyphs 1 sub{
+dup 2 mul 34 add postglyphs exch 2//getinterval_from_stringarray exec
+dup 0 get 8 bitshift exch 1 get add dup 258 lt{
+MacGlyphEncoding exch get
+}{
+dup 32768 ge{
+pop/.notdef
+}{
+258 sub dup postnames length ge{
+TTFDEBUG{( *** warning: glyph index past end of 'post' table)= flush}if
+pop
+exit
+}if
+postnames exch get
+postremap 1 index .knownget{exch pop}if
+}ifelse
+}ifelse
+2 index 3 1 roll put
+}for
+}
+ifelse
+}bind
+16#00030000{
+pop[]
+}bind
+.dicttomark readonly def
+/first_post_string
+{
+post dup type/arraytype eq{0 get}if
+}bind def
+/.getpost{
+/glyphencoding post null eq{
+TTFDEBUG{(post missing)= flush}if[]
+}{
+postformats first_post_string 0 getu32 .knownget{
+TTFDEBUG{
+(post: format )print
+first_post_string
+dup 0 getu16 =only(,)print 2 getu16 = flush
+}if
+post exch exec
+}{
+TTFDEBUG{(post: unknown format )print post 0 getu32 = flush}if[]
+}ifelse
+}ifelse def
+}bind def
+/MacRomanEncoding[
+StandardEncoding 0 39 getinterval aload pop
+/quotesingle
+StandardEncoding 40 56 getinterval aload pop
+/grave
+StandardEncoding 97 31 getinterval aload pop
+/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute
+/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave
+/ecircumflex/edieresis/iacute/igrave
+/icircumflex/idieresis/ntilde/oacute
+/ograve/ocircumflex/odieresis/otilde
+/uacute/ugrave/ucircumflex/udieresis
+/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls
+/registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash
+/.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef
+/.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash
+/questiondown/exclamdown/logicalnot/.notdef
+/florin/.notdef/.notdef/guillemotleft
+/guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe
+/endash/emdash/quotedblleft/quotedblright
+/quoteleft/quoteright/divide/.notdef
+/ydieresis/Ydieresis/fraction/currency
+/guilsinglleft/guilsinglright/fi/fl
+/daggerdbl/periodcentered/quotesinglbase/quotedblbase
+/perthousand/Acircumflex/Ecircumflex/Aacute
+/Edieresis/Egrave/Iacute/Icircumflex
+/Idieresis/Igrave/Oacute/Ocircumflex
+/.notdef/Ograve/Uacute/Ucircumflex
+/Ugrave/dotlessi/circumflex/tilde
+/macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron
+]/Encoding defineresource pop
+/TTParser<<
+/Pos 0
+/post null
+>>def
+/readu8
+{read not{
+mark(Insufficient data in the stream.)//error exec
+}if
+}bind def
+/readu16
+{dup//readu8 exec 8 bitshift exch//readu8 exec or
+}bind def
+/reads16
+{//readu16 exec 16#8000 xor 16#8000 sub
+}bind def
+/readu32
+{dup//readu16 exec 16 bitshift exch//readu16 exec or
+}bind def
+/reads32
+{dup//reads16 exec 16 bitshift exch//readu16 exec or
+}bind def
+/SkipToPosition
+{dup//TTParser/Pos get
+exch//TTParser exch/Pos exch put
+sub
+//PDFR_DEBUG{
+(Skipping )print dup//=only exec( bytes.)=
+}if
+dup 0 eq{
+pop pop
+}{
+dup 3 1 roll
+()/SubFileDecode filter
+exch
+{1 index//BlockBuffer readstring pop length
+dup 0 eq{pop exch pop exit}if
+sub
+}loop
+0 ne{
+mark(Insufficient data in the stream for SkipToPosition.)//error exec
+}if
+}ifelse
+}bind def
+/TagBuffer 4 string def
+/ParseTTTableDirectory
+{//PDFR_DEBUG{
+(ParseTTTableDirectory beg)=
+}if
+15 dict begin
+dup//readu32 exec 16#00010000 ne{
+mark(Unknown True Type version.)//error exec
+}if
+dup//readu16 exec/NumTables exch def
+dup//readu16 exec/SearchRange exch def
+dup//readu16 exec/EntrySelector exch def
+dup//readu16 exec/RangeShift exch def
+//PDFR_DEBUG{
+(NumTables = )print NumTables =
+}if
+NumTables{
+dup//TagBuffer readstring not{
+mark(Could not read TT tag.)//error exec
+}if
+cvn
+[2 index//readu32 exec pop
+2 index//readu32 exec
+3 index//readu32 exec
+]
+//PDFR_DEBUG{
+2 copy exch//=only exec( )print ==
+}if
+def
+}repeat
+pop
+//TTParser/Pos 12 NumTables 16 mul add put
+currentdict end
+//PDFR_DEBUG{
+(ParseTTTableDirectory end)=
+}if
+}bind def
+/ParseTTcmap
+{//PDFR_DEBUG{
+(ParseTTcmap beg)=
+}if
+/cmap get aload pop
+3 1 roll
+7 dict begin
+//PDFR_DEBUG{
+(Current position = )print//TTParser/Pos get =
+(cmap position = )print dup =
+}if
+1 index exch//SkipToPosition exec
+//TTParser/Pos get/TablePos exch def
+dup//readu16 exec pop
+dup//readu16 exec/NumEncodings exch def
+//PDFR_DEBUG{
+(NumEncodings = )print NumEncodings =
+}if
+null
+NumEncodings{
+1 index//readu32 exec
+2 index//readu32 exec
+3 array dup 3 2 roll 0 exch put
+2 index null ne{
+dup 0 get 3 index 0 get sub
+3 index exch 1 exch put
+}if
+dup 4 3 roll pop 3 1 roll
+def
+}repeat
+dup 0 get
+4 3 roll exch sub
+1 exch put
+//PDFR_DEBUG{
+currentdict{
+exch dup type/integertype eq{
+//PrintHex exec( )print ==
+}{
+pop pop
+}ifelse
+}forall
+}if
+4 NumEncodings 8 mul add/HeaderLength exch def
+//TTParser/Pos//TTParser/Pos get HeaderLength add put
+0
+NumEncodings{
+16#7FFFFFF null
+currentdict{
+1 index type/integertype eq{
+exch pop dup 0 get
+dup 5 index gt{
+dup 4 index lt{
+4 1 roll
+exch pop exch pop
+}{
+pop pop
+}ifelse
+}{
+pop pop
+}ifelse
+}{
+pop pop
+}ifelse
+}forall
+//PDFR_DEBUG{
+(Obtaining subtable for )print dup ==
+}if
+3 2 roll pop
+3 copy pop
+TablePos add//SkipToPosition exec
+3 copy exch pop 1 get
+//TTParser/Pos//TTParser/Pos get 3 index add put
+string
+readstring not{
+mark(Can't read a cmap subtable.)//error exec
+}if
+2 exch put
+}repeat
+pop pop
+currentdict end
+//PDFR_DEBUG{
+(ParseTTcmap end)=
+}if
+}bind def
+/GetTTEncoding
+{//PDFR_DEBUG{
+(GetTTEncoding beg)=
+}if
+get
+exch pop
+2 get
+10 dict begin
+/TTFDEBUG//PDFR_DEBUG def
+//cmaparray exec
+end
+//PDFR_DEBUG{
+(GetTTEncoding end)=
+dup ==
+}if
+}bind def
+/InverseEncoding
+{
+256 dict begin
+dup length 1 sub -1 0{
+2 copy get
+exch
+1 index currentdict exch//knownget exec{
+dup type/arraytype eq{
+aload length 1 add array astore
+}{
+2 array astore
+}ifelse
+}if
+def
+}for
+pop
+currentdict end
+}bind def
+/GetMacRomanEncodingInverse
+{//PDFReader/MacRomanEncodingInverse get
+dup null eq{
+pop
+MacRomanEncoding//InverseEncoding exec
+dup//PDFReader exch/MacRomanEncodingInverse exch put
+}if
+}bind def
+/PutCharStringSingle
+{
+dup 3 index length lt{
+2 index exch get
+dup 0 ne{
+def
+}{
+pop pop
+}ifelse
+}{
+pop pop
+}ifelse
+}bind def
+/PutCharString
+{1 index type/nametype ne{
+mark(Bad charstring name)//error exec
+}if
+dup type/arraytype eq{
+{
+3 copy//PutCharStringSingle exec
+pop pop
+}forall
+pop
+}{
+//PutCharStringSingle exec
+}ifelse
+}bind def
+/ComposeCharStrings
+{
+//PDFR_DEBUG{
+(ComposeCharStrings beg)=
+}if
+1 index length 1 add dict begin
+/.notdef 0 def
+exch
+//TTParser/post get
+dup null ne{
+exch
+1 index length 1 sub -1 0{
+dup 3 index exch get exch
+dup 0 eq 2 index/.notdef eq or{
+pop pop
+}{
+def
+}ifelse
+}for
+}if
+exch pop exch
+{
+//PutCharString exec
+}forall
+pop
+currentdict end
+//PDFR_DEBUG{
+(ComposeCharStrings end)=
+}if
+}bind def
+/ParseTTpost
+{
+//PDFR_DEBUG{
+(ParseTTpost beg)=
+}if
+/post get aload pop
+3 1 roll
+//PDFR_DEBUG{
+(Current position = )print//TTParser/Pos get =
+(post position = )print dup =
+}if
+1 index exch//SkipToPosition exec
+//TTParser/Pos//TTParser/Pos get 4 index add put
+exch dup 65535 le{
+string
+readstring not{
+mark(Insufficient data in the stream for ParseTTpost.)//error exec
+}if
+}{
+[3 1 roll
+dup 16384 div floor cvi
+exch 1 index 16384 mul
+sub exch
+1 sub 0 1 3 -1 roll
+{
+1 add index
+16384 string readstring not{
+mark(Insufficient data in the stream for ParseTTpost.)//error exec
+}if
+}for
+counttomark -2 roll
+string readstring not{
+mark(Insufficient data in the stream for ParseTTpost.)//error exec
+}if
+]
+}ifelse
+1 dict begin
+/post exch def
+//.getpost exec
+//TTParser/post glyphencoding put
+//PDFR_DEBUG{
+(ParseTTpost end)=
+glyphencoding ==
+}if
+end
+}bind def
+/MakeTTCharStrings
+{//MakeStreamReader exec
+dup dup//ParseTTTableDirectory exec
+//TTParser/post null put
+dup/post//knownget exec{
+0 get
+1 index/cmap get 0 get
+lt{
+2 copy//ParseTTpost exec
+//ParseTTcmap exec
+}{
+2 copy//ParseTTcmap exec
+3 1 roll
+//ParseTTpost exec
+}ifelse
+}{
+//ParseTTcmap exec
+}ifelse
+{
+dup 16#00030001 known{
+//PDFR_DEBUG{
+(Using the TT cmap encoding for Windows Unicode.)=
+}if
+16#00030001//GetTTEncoding exec
+AdobeGlyphList//ComposeCharStrings exec
+exit
+}if
+dup 16#00010000 known{
+//PDFR_DEBUG{
+(Using the TT cmap encoding for Macintosh Roman.)=
+}if
+16#00010000//GetTTEncoding exec
+PDFEncoding dup null eq{
+pop//GetMacRomanEncodingInverse exec
+}{
+//InverseEncoding exec
+}ifelse
+//ComposeCharStrings exec
+exit
+}if
+dup 16#00030000 known{
+//PDFR_DEBUG{
+(Using the TT cmap encoding 3.0 - not sure why Ghostscript writes it since old versions.)=
+}if
+16#00030000//GetTTEncoding exec
+PDFEncoding dup null eq{
+pop//GetMacRomanEncodingInverse exec
+}{
+//InverseEncoding exec
+}ifelse
+//ComposeCharStrings exec
+exit
+}if
+mark(True Type cmap has no useful encodings.)//error exec
+}loop
+//PDFR_DEBUG{
+(CharStrings <<)=
+dup{
+exch
+dup type/nametype eq{
+//=only exec
+}{
+==
+}ifelse
+( )print ==
+}forall
+(>>)=
+}if
+}bind def
+/ScaleVal
+{
+aload pop
+1 index sub
+3 2 roll mul add
+}bind def
+/ScaleArg
+{
+aload pop
+1 index sub
+3 1 roll
+sub exch div
+}bind def
+/ScaleArgN
+{
+dup length 2 sub -2 0{
+2
+2 index 3 1 roll getinterval
+3 2 roll
+exch//ScaleArg exec
+1 index length 2 idiv 1 add 1 roll
+}for
+pop
+}bind def
+/ComputeFunction_10
+{
+//PDFR_DEBUG{
+(ComputeFunction_10 beg )print 1 index//=only exec( stack=)print count =
+}if
+exch
+dup 1 eq{
+pop dup length 1 sub get
+}{
+1 index length 1 sub mul
+dup dup floor sub
+dup 0 eq{
+pop cvi get
+}{
+3 1 roll floor cvi
+2 getinterval
+aload pop
+2 index mul 3 2 roll 1 exch sub 3 2 roll mul add
+}ifelse
+}ifelse
+//PDFR_DEBUG{
+(ComputeFunction_10 end )print dup//=only exec( stack=)print count =
+}if
+}bind def
+/ComputeFunction_n0
+{
+//PDFR_DEBUG{
+(ComputeFunction_n0 beg N=)print dup//=only exec( stack=)print count =
+}if
+dup 0 eq{
+pop
+}{
+dup 2 add -1 roll
+dup 3 index length 1 sub ge{
+pop 1 sub
+exch dup length 1 sub get exch
+//PDFReader/ComputeFunction_n0 get exec
+}{
+dup floor cvi dup
+4 index exch get
+3 index dup
+5 add copy
+6 2 roll
+pop pop pop pop
+1 sub
+//PDFReader/ComputeFunction_n0 get exec
+3 2 roll pop
+exch
+4 3 roll exch
+4 add 2 roll 1 add
+3 2 roll exch get
+exch 1 sub
+//PDFReader/ComputeFunction_n0 get exec
+1 index mul
+3 1 roll
+1 exch sub mul add
+}ifelse
+}ifelse
+//PDFR_DEBUG{
+(ComputeFunction_n0 end )print dup//=only exec( stack=)print count =
+}if
+}bind def
+/FunctionToProc_x01
+{
+dup/Domain get exch
+dup/Data get 0 get exch
+/Size get length
+[4 1 roll
+//PDFR_DEBUG{
+{(function beg, stack =)print count//=only exec(\n)print}/exec load
+5 2 roll
+}if
+dup 1 gt{
+{mark exch
+3 add 2 roll
+//ScaleArgN exec
+counttomark dup
+3 add -2 roll
+pop exch
+//ComputeFunction_n0 exec
+}/exec load
+}{
+pop
+3 1/roll load//ScaleArg/exec load
+/exch load
+//ComputeFunction_10/exec load
+}ifelse
+//PDFR_DEBUG{
+(function end, stack =)/print load/count load//=only/exec load(\n)/print load
+}if
+]cvx
+//PDFR_DEBUG{
+(Made a procedure for the 1-result function :)=
+dup ==
+}if
+}bind def
+/FunctionProcDebugBeg
+{(FunctionProcDebugBeg )print count =
+}bind def
+/FunctionProcDebugEnd
+{(FunctionProcDebugEnd )print count =
+}bind def
+/FunctionToProc_x0n
+{
+PDFR_DEBUG{
+(FunctionToProc_x0n beg m=)print dup =
+}if
+1 index/Size get length exch
+dup 7 mul 2 add array
+PDFR_DEBUG{
+dup 0//FunctionProcDebugBeg put
+}{
+dup 0//DoNothing put
+}ifelse
+dup 1/exec load put
+dup 2 5 index/Domain get put
+2 index 1 eq{
+dup 3//ScaleArg put
+}{
+dup 3//ScaleArgN put
+}ifelse
+dup 4/exec load put
+1 index 1 sub 0 exch 1 exch{
+dup 7 mul 5 add
+1 index 4 index 1 sub ne{
+dup 3 index exch 6 index put 1 add
+dup 3 index exch/copy load put 1 add
+}if
+[
+6 index/Data get 3 index get
+6 index 1 eq{
+//ComputeFunction_10/exec load
+}{
+6 index
+//ComputeFunction_n0/exec load
+}ifelse
+]cvx
+3 index exch 2 index exch put 1 add
+2 index 1 index/exec load put 1 add
+1 index 4 index 1 sub ne{
+2 index 1 index 6 index 1 add put 1 add
+2 index 1 index 1 put 1 add
+2 index 1 index/roll load put
+}if
+pop pop
+}for
+PDFR_DEBUG{
+dup dup length 2 sub//FunctionProcDebugEnd put
+}{
+dup dup length 2 sub//DoNothing put
+}ifelse
+dup dup length 1 sub/exec load put
+cvx exch pop exch pop exch pop
+//PDFR_DEBUG{
+(Made a procedure for the n-argument function :)=
+dup ==
+}if
+PDFR_DEBUG{
+(FunctionToProc_x0n end)=
+}if
+}bind def
+/MakeTableRec
+{
+0
+exec
+}bind def
+/MakeTable
+{//PDFR_DEBUG{
+(MakeTable beg )print count =
+}if
+1 index/Size get exch
+1 sub dup
+3 1 roll
+get
+array
+1 index 0 eq{
+exch pop exch pop
+}{
+dup length 1 sub -1 0{
+3 index 3 index//MakeTableRec exec
+2 index 3 1 roll put
+}for
+exch pop exch pop
+}ifelse
+//PDFR_DEBUG{
+(MakeTable end )print count =
+}if
+}bind def
+//MakeTableRec 0//MakeTable put
+/StoreSample
+{
+1 sub
+dup 0 eq{
+pop
+}{
+-1 1{
+I exch get get
+}for
+}ifelse
+I 0 get 3 2 roll put
+}bind def
+/ReadSample32
+{
+4{
+File read not{
+mark(Insufficient data for function.)//error exec
+}if
+}repeat
+pop
+3 1 roll exch
+256 mul add 256 mul add
+//1_24_bitshift_1_sub div
+}bind def
+/ReadSample
+{
+Buffer BitsLeft BitsPerSample
+{2 copy ge{
+exit
+}if
+3 1 roll
+8 add 3 1 roll
+256 mul File read not{
+mark(Insufficient data for function.)//error exec
+}if
+add
+3 1 roll
+}loop
+sub dup
+2 index exch
+neg bitshift
+2 copy exch bitshift
+4 3 roll exch sub
+/Buffer exch def
+exch/BitsLeft exch def
+Div div
+}bind def
+/ReadSamplesRec
+{0
+exec
+}bind def
+/ReadSamples
+{
+//PDFR_DEBUG{
+(ReadSamples beg )print count =
+}if
+dup 1 eq{
+pop
+0 1 Size 0 get 1 sub{
+I exch 0 exch put
+0 1 M 1 sub{
+dup Range exch 2 mul 2 getinterval
+//PDFR_DEBUG{
+(Will read a sample ... )print
+}if
+BitsPerSample 32 eq{//ReadSample32}{//ReadSample}ifelse
+exec exch//ScaleVal exec
+//PDFR_DEBUG{
+(value=)print dup =
+}if
+exch Table exch get
+Size length//StoreSample exec
+}for
+}for
+}{
+1 sub
+dup Size exch get 0 exch 1 exch 1 sub{
+I exch 2 index exch put
+dup//ReadSamplesRec exec
+}for
+pop
+}ifelse
+//PDFR_DEBUG{
+(ReadSamples end )print count =
+}if
+}bind def
+//ReadSamplesRec 0//ReadSamples put
+/StreamToArray
+{//PDFR_DEBUG{
+(StreamToArray beg )print count =
+}if
+userdict/FuncDataReader get begin
+dup/BitsPerSample get/BitsPerSample exch def
+dup/Size get length/N exch def
+dup/Range get length 2 idiv/M exch def
+1 BitsPerSample bitshift 1 sub/Div exch def
+/BitsLeft 0 def
+/Buffer 0 def
+dup/Size get/Size exch def
+dup/Range get/Range exch def
+/File 1 index//MakeStreamReader exec def
+/I[N{0}repeat]def
+M array
+dup length 1 sub -1 0{
+2 index N//MakeTable exec
+2 index 3 1 roll put
+}for
+/Table exch def
+N//ReadSamples exec
+PDFR_DEBUG{
+(Table = )print Table ==
+}if
+/Data Table put
+end
+//PDFR_DEBUG{
+(StreamToArray end )print count =
+}if
+}bind def
+/FunctionToProc10
+{
+PDFR_DEBUG{
+(FunctionToProc10 beg, Range = )print dup/Range get ==
+}if
+dup/Order//knownget exec{
+1 ne{
+(Underimplemented function Type 0 Order 3.)=
+}if
+}if
+dup//StreamToArray exec
+dup/Range get length dup 2 eq{
+pop//FunctionToProc_x01 exec
+}{
+2 idiv//FunctionToProc_x0n exec
+}ifelse
+PDFR_DEBUG{
+(FunctionToProc10 end)=
+}if
+}bind def
+/FunctionToProc12
+{begin
+currentdict/C0//knownget exec{length 1 eq}{true}ifelse{
+N
+currentdict/C0//knownget exec{
+0 get
+}{
+0
+}ifelse
+currentdict/C1//knownget exec{
+0 get
+}{
+1
+}ifelse
+1 index sub
+[4 1 roll
+{
+4 2 roll
+exp mul add
+}aload pop
+]cvx
+}{
+[
+0 1 C0 length 1 sub{
+N
+C0 2 index get
+C1 3 index get
+4 3 roll pop
+1 index sub
+[/dup load
+5 2 roll
+{
+4 2 roll
+exp mul add
+exch
+}aload pop
+]cvx
+/exec load
+}for
+/pop load
+]cvx
+}ifelse
+end
+//PDFR_DEBUG{
+(FunctionType2Proc : )print dup ==
+}if
+}bind def
+/FunctionToProc14
+{//MakeStreamReader exec cvx exec
+//PDFR_DEBUG{
+(FunctionType4Proc : )print dup ==
+}if
+}bind def
+/FunctionToProc1
+{
+dup/FunctionType get
+{dup 0 eq{
+pop//FunctionToProc10 exec exit
+}if
+dup 2 eq{
+pop//FunctionToProc12 exec exit
+}if
+dup 4 eq{
+pop//FunctionToProc14 exec exit
+}if
+mark exch(Function type )exch( isn't implemented yet.)//error exec
+}loop
+}bind def
+/FunctionToProc20
+{
+PDFR_DEBUG{
+(FunctionToProc20, Range = )print dup/Range get ==
+}if
+dup/Order//knownget exec{
+1 ne{
+(Underimplemented function Type 0 Order 3.)=
+}if
+}if
+dup//StreamToArray exec
+dup/Range get length dup 2 eq{
+pop//FunctionToProc_x01 exec
+}{
+2 idiv//FunctionToProc_x0n exec
+}ifelse
+}bind def
+/FunctionToProc
+{//PDFR_DEBUG{
+(FunctionToProc beg )print count =
+}if
+dup type/dicttype eq{
+dup/Domain get length 2 idiv
+{
+dup 1 eq{
+pop//FunctionToProc1 exec exit
+}if
+dup 2 eq{
+pop//FunctionToProc20 exec exit
+}if
+mark(Functions with many arguments aren't implemented yet.)//error exec
+}loop
+}{
+//PDFR_DEBUG{(Not a function dict, assume already a procedure.)print}if
+}ifelse
+//PDFR_DEBUG{
+(FunctionToProc end )print count =
+}if
+}bind def
+/spotfunctions mark
+/Round{
+abs exch abs 2 copy add 1 le{
+dup mul exch dup mul add 1 exch sub
+}{
+1 sub dup mul exch 1 sub dup mul add 1 sub
+}ifelse
+}
+/Diamond{
+abs exch abs 2 copy add .75 le{
+dup mul exch dup mul add 1 exch sub
+}{
+2 copy add 1.23 le{
+.85 mul add 1 exch sub
+}{
+1 sub dup mul exch 1 sub dup mul add 1 sub
+}ifelse
+}ifelse
+}
+/Ellipse{
+abs exch abs 2 copy 3 mul exch 4 mul add 3 sub dup 0 lt{
+pop dup mul exch .75 div dup mul add 4 div 1 exch sub
+}{
+dup 1 gt{
+pop 1 exch sub dup mul exch 1 exch sub
+.75 div dup mul add 4 div 1 sub
+}{
+.5 exch sub exch pop exch pop
+}ifelse
+}ifelse
+}
+/EllipseA{dup mul .9 mul exch dup mul add 1 exch sub}
+/InvertedEllipseA{dup mul .9 mul exch dup mul add 1 sub}
+/EllipseB{dup 5 mul 8 div mul exch dup mul exch add sqrt 1 exch sub}
+/EllipseC{dup mul .9 mul exch dup mul add 1 exch sub}
+/InvertedEllipseC{dup mul .9 mul exch dup mul add 1 sub}
+/Line{exch pop abs neg}
+/LineX{pop}
+/LineY{exch pop}
+/Square{abs exch abs 2 copy lt{exch}if pop neg}
+/Cross{abs exch abs 2 copy gt{exch}if pop neg}
+/Rhomboid{abs exch abs 0.9 mul add 2 div}
+/DoubleDot{2{360 mul sin 2 div exch}repeat add}
+/InvertedDoubleDot{2{360 mul sin 2 div exch}repeat add neg}
+/SimpleDot{dup mul exch dup mul add 1 exch sub}
+/InvertedSimpleDot{dup mul exch dup mul add 1 sub}
+/CosineDot{180 mul cos exch 180 mul cos add 2 div}
+/Double{exch 2 div exch 2{360 mul sin 2 div exch}repeat add}
+/InvertedDouble{
+exch 2 div exch 2{360 mul sin 2 div exch}repeat add neg
+}
+.dicttomark readonly def
+/CheckColorSpace
+{
+dup type/arraytype ne{
+mark(Resource )3 index( must be an array.)//error exec
+}if
+}bind def
+/SubstitutePDFColorSpaceRec
+{0
+exec
+}bind def
+/SubstitutePDFColorSpace
+{
+{
+dup 0 get/Pattern eq{
+dup length 1 gt{
+dup dup 1//CheckColorSpace//ResolveA exec
+dup type/nametype ne{
+//SubstitutePDFColorSpaceRec exec
+}if
+1 exch put
+}if
+exit
+}if
+dup 0 get/Indexed eq{
+exit
+}if
+dup 0 get/Separation eq{
+dup dup 2//CheckColorSpace//ResolveA exec
+dup type/nametype ne{
+//SubstitutePDFColorSpaceRec exec
+}if
+2 exch put
+exit
+}if
+dup 0 get/CalGray eq{
+1 get
+dup/Gamma//knownget exec{
+[exch[exch/exp load]cvx dup dup]
+1 index exch/DecodeLMN exch put
+}if
+[exch/CIEBasedA exch]
+exit
+}if
+dup 0 get/CalRGB eq{
+1 get
+dup/Matrix//knownget exec{
+1 index exch/MatrixLMN exch put
+}if
+dup/Gamma//knownget exec{
+aload pop
+[exch/exp load]cvx
+3 1 roll
+[exch/exp load]cvx
+3 1 roll
+[exch/exp load]cvx
+3 1 roll
+3 array astore
+1 index exch/DecodeLMN exch put
+}if
+[exch/CIEBasedABC exch]
+exit
+}if
+dup 0 get/Lab eq{
+1 get
+begin
+currentdict/Range//knownget exec{aload pop}{-100 100 -100 100}ifelse
+0 100 6 2 roll 6 array astore
+/RangeABC exch def
+/DecodeABC[{16 add 116 div}bind{500 div}bind{200 div}bind]def
+/MatrixABC[1 1 1 1 0 0 0 0 -1]def
+{dup 6 29 div ge{dup dup mul mul}{4 29 div sub 108 841 div mul}ifelse}
+/DecodeLMN[
+[3 index aload pop WhitePoint 0 get/mul load]cvx
+[4 index aload pop WhitePoint 1 get/mul load]cvx
+[5 index aload pop WhitePoint 2 get/mul load]cvx
+]def pop
+//PDFR_DEBUG{
+(Constructed from Lab <<)=
+currentdict{exch = ==}forall
+(>>)=
+}if
+[/CIEBasedABC currentdict]
+end
+exit
+pop
+}if
+dup 0 get/CIEBasedA eq{exit}if
+dup 0 get/CIEBasedABC eq{exit}if
+mark exch(Unimplemented color space )exch//error exec
+}loop
+}bind def
+//SubstitutePDFColorSpaceRec 0//SubstitutePDFColorSpace put
+/ResolveArrayElement
+{2 copy get
+dup type dup/arraytype eq exch
+/packedarraytype eq or{
+dup length 1 ge exch xcheck and{
+2 copy get
+dup 0 get type/integertype eq
+1 index 1 get type dup/arraytype
+eq exch
+/packedarraytype eq or
+and{
+exec
+2 index 4 1 roll put
+}{
+pop pop
+}ifelse
+}{
+pop
+}ifelse
+}{
+pop pop
+}ifelse
+}bind def
+/ResolveColorSpaceArrayRec
+{0
+exec
+}bind def
+/SetColorSpaceSafe
+{
+PDFR_DEBUG{
+(SetColorSpaceSafe beg)=
+}if
+currentcolorspace dup type/arraytype eq{
+1 index type/arraytype eq{
+dup length 2 index length eq{
+false exch
+dup length 0 exch 1 exch 1 sub{
+dup
+4 index exch get exch
+2 index exch get
+ne{
+exch pop true exch exit
+}if
+}for
+pop
+{
+setcolorspace
+}{
+pop
+}ifelse
+}{
+pop setcolorspace
+}ifelse
+}{
+pop setcolorspace
+}ifelse
+}{
+pop setcolorspace
+}ifelse
+PDFR_DEBUG{
+(SetColorSpaceSafe end)=
+}if
+}bind def
+/ResolveColorSpaceArray
+{
+//PDFR_DEBUG{
+(ResolveColorSpaceArray beg )print dup ==
+}if
+dup 0 get/Indexed eq{
+1//ResolveArrayElement exec
+dup dup 1 get
+dup type/arraytype eq{
+//SubstitutePDFColorSpace exec
+//ResolveColorSpaceArrayRec exec
+1 exch put
+}{
+pop pop
+}ifelse
+}if
+dup 0 get/Separation eq{
+dup dup 1 get UnPDFEscape 1 exch put
+3//ResolveArrayElement exec
+dup 3 get//FunctionToProc exec
+2 copy 3 exch put
+pop
+}if
+dup 0 get/Pattern eq{
+dup length 1 gt{
+dup 1 get dup type/arraytype eq{
+ResolveColorSpaceArray
+1 index 1 3 -1 roll put
+}{
+pop
+}ifelse
+}if
+}if
+PDFR_DEBUG{
+(Construcrted color space :)=
+dup ==
+}if
+//PDFR_DEBUG{
+(ResolveColorSpaceArray end )print dup ==
+}if
+}bind def
+//ResolveColorSpaceArrayRec 0//ResolveColorSpaceArray put
+/ResolveColorSpace
+{
+//PDFR_DEBUG{
+(ResolveColorSpace beg )print dup =
+}if
+dup//SimpleColorSpaceNames exch known not{
+dup//PDFColorSpaces exch//knownget exec{
+exch pop
+//PDFR_DEBUG{
+(ResolveColorSpace known )=
+}if
+}{
+dup
+//PDFReader/CurrentObject get/Context get/Resources get
+/ColorSpace//DoNothing//ResolveD exec
+exch//CheckColorSpace//ResolveD exec
+dup type/arraytype eq{
+//SubstitutePDFColorSpace exec
+//ResolveColorSpaceArray exec
+dup//PDFColorSpaces 4 2 roll put
+}if
+}ifelse
+}if
+//PDFR_DEBUG{
+(ResolveColorSpace end )print dup ==
+}if
+}bind def
+/CheckPattern
+{
+dup/PatternType//knownget exec{
+dup 1 ne{
+mark(Resource )4 index( is a shading, which can't be handled at level 2. )//error exec
+}if
+pop
+}if
+dup/Type knownget{
+/Pattern ne{
+mark(Resource )4 index( must have /Type/Pattern .)//error exec
+}if
+}if
+}bind def
+/PaintProc
+{/Context get
+//RunDelayedStream exec
+}bind def
+/ResolvePattern
+{
+dup
+userdict/PDFR_Patterns get
+exch//knownget exec{
+exch pop
+}{
+dup
+//PDFReader/CurrentObject get/Context get/Resources get
+/Pattern//DoNothing//ResolveD exec
+exch//CheckPattern//ResolveD exec
+dup dup/Context exch put
+dup/Resources//DoNothing//ResolveD exec pop
+dup/PaintProc//PaintProc put
+gsave userdict/PDFR_InitialGS get setgstate
+currentglobal exch false setglobal
+dup/Matrix get
+makepattern
+exch setglobal
+grestore
+dup userdict/PDFR_Patterns get
+4 2 roll
+put
+}ifelse
+}bind def
+/SetColor
+{//PDFR_DEBUG{
+(SetColor beg)=
+}if
+currentcolorspace dup type/nametype eq{
+pop setcolor
+}{
+0 get/Pattern eq{
+//ResolvePattern exec setpattern
+}{
+setcolor
+}ifelse
+}ifelse
+//PDFR_DEBUG{
+(SetColor end)=
+}if
+}bind def
+/ImageKeys 15 dict begin
+/BPC/BitsPerComponent def
+/CS/ColorSpace def
+/D/Decode def
+/DP/DecodeParms def
+/F/Filter def
+/H/Height def
+/IM/ImageMask def
+/I/Interpolate def
+/W/Width def
+currentdict end readonly def
+/ImageValues 15 dict begin
+/G/DeviceGray def
+/RGB/DeviceRGB def
+/CMYK/DeviceCMYK def
+/I/Indexed def
+/AHx/ASCIIHexDecode def
+/A85/ASCII85Decode def
+/LZW/LZWDecode def
+/Fl/FlateDecode def
+/RL/RunLengthDecode def
+/CCF/CCITTFaxDecode def
+/DCT/DCTDecode def
+currentdict end readonly def
+/GetColorSpaceRange
+{2 index/ColorSpace get
+dup type/arraytype eq{
+1 get
+}if
+exch//knownget exec{
+exch pop
+}if
+}bind def
+/DecodeArrays 15 dict begin
+/DeviceGray{[0 1]}def
+/DeviceRGB{[0 1 0 1 0 1]}def
+/DeviceCMYK{[0 1 0 1 0 1 0 1]}def
+/Indexed{
+dup/BitsPerComponent get 1 exch bitshift 1 sub[exch 0 exch]
+}def
+/Separation{[0 1]}def
+/CIEBasedA{[0 1]/RangeA//GetColorSpaceRange exec}def
+/CIEBasedABC{[0 1 0 1 0 1]/RangeABC//GetColorSpaceRange exec}def
+currentdict end readonly def
+/Substitute
+{1 index//knownget exec{
+exch pop
+}if
+}bind def
+/DebugImagePrinting
+{
+//PDFR_DEBUG{
+(Image :)=
+dup{exch//=only exec( )print ==
+}forall
+}if
+}bind def
+/CompleteImage
+{
+dup/ColorSpace known{
+dup/ColorSpace//CheckColorSpace//ResolveD exec pop
+}if
+dup/Decode known not{
+dup/ColorSpace//knownget exec{
+dup type/arraytype eq{
+0 get
+}if
+//DecodeArrays exch get exec
+}{
+[0 1]
+}ifelse
+1 index exch/Decode exch put
+}if
+dup/ImageMatrix[2 index/Width get 0 0 5 index/Height get neg
+0 7 index/Height get]put
+//DebugImagePrinting exec
+}bind def
+/CompleteInlineImage
+{
+//PDFR_DEBUG{
+(CompleteInlineImage beg)=
+}if
+dup/ImageType known not{
+dup/ImageType 1 put
+}if
+dup length dict exch{
+exch//ImageKeys//Substitute exec
+dup/Filter eq{
+exch//ImageValues//Substitute exec exch
+}if
+dup/ColorSpace eq{
+exch
+dup//ImageValues exch//knownget exec{
+exch pop
+}{
+//ResolveColorSpace exec
+}ifelse
+exch
+}if
+exch
+2 index 3 1 roll put
+}forall
+//CompleteImage exec
+dup/DataSource 2 copy get
+2 index//AppendFilters exec put
+//PDFR_DEBUG{
+(CompleteInlineImage end)=
+}if
+}bind def
+/CompleteOutlineImage
+{
+currentglobal exch dup gcheck setglobal
+//PDFR_DEBUG{
+(CompleteOutlineImage beg)=
+}if
+dup dup//MakeStreamReader exec/DataSource exch put
+dup/ImageType known not{
+//CompleteImage exec
+dup/ImageType 1 put
+dup/ColorSpace known{
+dup/ColorSpace//CheckColorSpace//ResolveD exec
+dup type/arraytype eq{
+//ResolveColorSpaceArray exec
+//SubstitutePDFColorSpace exec
+1 index exch/ColorSpace exch put
+}{
+pop
+}ifelse
+}if
+}if
+//PDFR_DEBUG{
+(CompleteOutlineImage end)=
+}if
+exch setglobal
+}bind def
+/DoImage
+{
+//PDFR_DEBUG{
+(DoImage beg)=
+}if
+gsave
+dup/ColorSpace//knownget exec{setcolorspace}if
+dup/ImageMask//knownget exec not{false}if
+{imagemask}{image}ifelse
+grestore
+//PDFR_DEBUG{
+(DoImage end)=
+}if
+}bind def
+/GSave
+{
+gsave
+//PDFReader/GraphicStateStackPointer get
+dup//GraphicStateStack exch get null eq{
+dup//GraphicStateStack exch//InitialGraphicState length dict put
+}if
+dup//GraphicStateStack exch get
+//GraphicState exch copy pop
+1 add//PDFReader exch/GraphicStateStackPointer exch put
+}bind def
+/GRestore
+{
+grestore
+//PDFReader/GraphicStateStackPointer get
+1 sub dup
+//PDFReader exch/GraphicStateStackPointer exch put
+//GraphicStateStack exch get
+//GraphicState copy pop
+}bind def
+/SetFont
+{dup//GraphicState exch/FontSize exch put
+//ResolveAndSetFont exec
+//GraphicState/FontMatrixNonHV currentfont/FontMatrix get 1 get 0 ne put
+}bind def
+/ShowText
+{//GraphicState/TextRenderingMode get 0 eq{
+//GraphicState/WordSpacing get 0
+32
+//GraphicState/CharacterSpacing get 0
+6 5 roll
+//GraphicState/FontMatrixNonHV get{
+[
+7 -2 roll pop
+5 -2 roll pop
+5 -1 roll
+{
+exch
+pop
+3 index add
+exch 2 index eq{3 index add}if
+4 1 roll
+}
+currentfont/FontMatrix get 0 get 0 ne{
+1 1 index length 1 sub getinterval cvx
+}if
+5 index
+cshow
+pop pop pop]
+xshow
+}{
+awidthshow
+}ifelse
+}{
+//GraphicState/CharacterSpacing get 0 eq
+//GraphicState/FontMatrixNonHV get not and
+//GraphicState/WordSpacing get 0 eq and{
+true charpath
+}{
+{
+exch
+pop 0
+currentpoint 5 4 roll
+( )dup 0 3 index put true charpath
+5 1 roll
+moveto rmoveto
+//GraphicState/CharacterSpacing get 0 rmoveto
+32 eq{
+//GraphicState/WordSpacing get 0 rmoveto
+}if
+}
+//GraphicState/FontMatrixNonHV get dup not exch{
+pop currentfont/FontMatrix get 0 get 0 ne
+}if{
+1 1 index length 1 sub getinterval cvx
+}if
+exch cshow
+}ifelse
+}ifelse
+}bind def
+/ShowTextBeg
+{//GraphicState/TextRenderingMode get 0 ne{
+currentpoint newpath moveto
+}if
+}bind def
+/ShowTextEnd
+{//GraphicState/TextRenderingMode get
+{dup 1 eq{
+stroke exit
+}if
+dup 2 eq{
+gsave fill grestore stroke exit
+}if
+dup 3 eq{
+currentpoint newpath moveto
+}if
+dup 4 eq{
+gsave fill grestore clip exit
+}if
+dup 5 eq{
+gsave stroke grestore clip exit
+}if
+dup 6 eq{
+gsave fill grestore gsave stroke grestore fill exit
+}if
+dup 7 eq{
+clip exit
+}if
+exit
+}loop
+pop
+}bind def
+/ShowTextWithGlyphPositioning
+{//ShowTextBeg exec
+{dup type/stringtype eq{
+//ShowText exec
+}{
+neg 1000 div//GraphicState/FontSize get mul 0 rmoveto
+}ifelse
+}forall
+//ShowTextEnd exec
+}bind def
+/CheckFont
+{dup/Type get/ExtGState ne{
+mark(Resource )3 index( must have /Type/ExtGState.)//error exec
+}if
+}bind def
+/SetTransfer
+{
+//PDFR_DEBUG{(SetTransfer beg )print count =}if
+dup type/arraytype eq 1 index xcheck not and{
+0 4 getinterval aload pop
+setcolortransfer
+}{
+settransfer
+}ifelse
+//PDFR_DEBUG{(SetTransfer end )print count =}if
+}bind def
+/CheckExtGState
+{dup/Type get/ExtGState ne{
+mark(Resource )3 index( must have /Type/ExtGState.)//error exec
+}if
+}bind def
+/CheckHalftone
+{dup/HalftoneType known not{
+mark(Resource )3 index( must have /HalftoneType.)//error exec
+}if
+}bind def
+/ResolveFunction
+{
+//PDFR_DEBUG{(ResolveFunction beg )print dup = count =}if
+2 copy get//IsObjRef exec{
+2 copy//DoNothing//ResolveD exec
+3 copy put pop
+}if
+2 copy get dup type/arraytype eq exch xcheck and not{
+2 copy get
+dup type/arraytype eq 1 index xcheck not and{
+dup length 1 sub -1 0{
+2 copy//DoNothing ResolveA
+dup/Identity eq{
+pop 2 copy{}put
+}{
+//FunctionToProc exec
+3 copy put pop
+}ifelse
+pop
+}for
+}{
+dup/Default eq{
+}{
+dup/Identity eq{
+pop{}
+}{dup type/nametype eq{
+//spotfunctions exch get
+}{
+//FunctionToProc exec
+}ifelse
+}ifelse
+}ifelse
+}ifelse
+3 copy put
+exch pop
+}{
+1 index exch get
+}ifelse
+//PDFR_DEBUG{(ResolveFunction end )print dup == count =}if
+}bind def
+/ResolveFunctionSafe
+{2 copy known{
+//ResolveFunction exec
+}if
+pop
+}bind def
+/CreateHalftoneThresholds
+{
+dup/Thresholds known not{
+dup/HalftoneType get 10 eq{
+dup dup//MakeStreamReader exec
+/Thresholds exch put
+}if
+dup/HalftoneType get dup 3 eq exch 6 eq or{
+dup dup//MakeStreamReader exec
+//BlockBuffer readstring pop
+dup length
+dup 0 eq{
+mark(Could not read Thresholds)//error exec
+}if
+string copy/Thresholds exch put
+dup/HalftoneType 3 put
+}if
+}if
+}bind def
+/SetExtGState
+{
+//PDFReader/CurrentObject get/Context get/Resources get
+/ExtGState//DoNothing//ResolveD exec
+exch//CheckExtGState//ResolveD exec
+dup/LW//knownget exec{
+setlinewidth
+}if
+dup/LC//knownget exec{
+setlinecap
+}if
+dup/LJ//knownget exec{
+setlinejoin
+}if
+dup/ML//knownget exec{
+setmeterlimit
+}if
+dup/D//knownget exec{
+setdash
+}if
+dup/RI//knownget exec{
+mark(Unimplemented ExtGState.RI)//error exec
+}if
+dup/OP//knownget exec{
+setoverprint
+}if
+dup/op//knownget exec{
+setoverprint
+}if
+dup/OPM//knownget exec{
+mark(Unimplemented ExtGState.OPM)//error exec
+}if
+dup/Font//knownget exec{
+mark(Unimplemented ExtGState.Font)//error exec
+}if
+dup/BG known{
+/BG//ResolveFunction exec
+setblackgeneration
+}if
+dup/BG2 known{
+/BG2//ResolveFunction exec
+dup/Default eq{
+//InitialExtGState/BG2 get
+}if
+setblackgeneration
+}if
+dup/UCR known{
+/UCR//ResolveFunction exec
+setundercolorremoval
+}if
+dup/UCR2 known{
+/UCR2//ResolveFunction exec
+dup/Default eq{
+//InitialExtGState/UCR2 get
+}if
+setundercolorremoval
+}if
+dup/TR known{
+/TR//ResolveFunction exec
+//SetTransfer exec
+}if
+dup/TR2 known{
+/TR2//ResolveFunction exec
+dup/Default eq{
+pop//InitialExtGState/TR2 get
+aload pop setcolortransfer
+}{
+//SetTransfer exec
+}ifelse
+}if
+dup/HT//knownget exec{
+dup/Default eq{
+pop//InitialExtGState/HT get
+sethalftone
+}{
+//PDFR_DEBUG{(Ht beg)=}if
+pop dup/HT//CheckHalftone//ResolveD exec
+/SpotFunction//ResolveFunctionSafe exec
+/TransferFunction//ResolveFunctionSafe exec
+null exch
+dup/HalftoneType get dup 5 eq exch dup 4 eq exch 2 eq or or{
+dup{
+dup//IsObjRef exec{
+pop
+1 index exch//CheckHalftone ResolveD
+}if
+dup type/dicttype eq{
+dup/SpotFunction//ResolveFunctionSafe exec
+/TransferFunction//ResolveFunctionSafe exec
+//CreateHalftoneThresholds exec
+dup/HalftoneType get 5 gt{
+4 3 roll pop
+dup 4 1 roll
+}if
+}if
+pop pop
+}forall
+}if
+//CreateHalftoneThresholds exec
+//PDFR_DEBUG{
+(HT:)=
+dup{
+1 index/Default eq{
+(Default <<)=
+exch pop
+{exch = ==}forall
+(>>)=
+}{
+exch = ==
+}ifelse
+}forall
+(HT end)= flush
+}if
+exch dup null ne{
+(Warning: Ignoring a halftone with a Level 3 component halftone Type )print dup/HalftoneType get =
+pop pop
+}{
+pop
+dup/HalftoneType get 5 gt{
+(Warning: Ignoring a Level 3 halftone Type )print dup/HalftoneType get =
+pop
+}{
+sethalftone
+}ifelse
+}ifelse
+//PDFR_DEBUG{(HT set)= flush}if
+}ifelse
+}if
+dup/FL//knownget exec{
+setflattness
+}if
+dup/SM//knownget exec{
+setsmoothness
+}if
+dup/SA//knownget exec{
+setstrokeadjust
+}if
+dup/BM//knownget exec{
+mark(Unimplemented ExtGState.BM)//error exec
+}if
+dup/SMask//knownget exec{
+mark(Unimplemented ExtGState.SMask)//error exec
+}if
+dup/CA//knownget exec{
+mark(Unimplemented ExtGState.CA)//error exec
+}if
+dup/ca//knownget exec{
+mark(Unimplemented ExtGState.ca)//error exec
+}if
+dup/AIS//knownget exec{
+mark(Unimplemented ExtGState.AIS)//error exec
+}if
+dup/TK//knownget exec{
+mark(Unimplemented ExtGState.TK)//error exec
+}if
+pop
+}bind def
+/CheckXObject
+{dup/Subtype get dup/Image ne exch dup/Form ne exch/PS ne and and{
+mark(Resource )3 index( must have /Subtype /Image or /Form or /PS.)//error exec
+}if
+}bind def
+/DoXObject
+{
+//PDFReader/CurrentObject get/Context get/Resources get
+/XObject//DoNothing//ResolveD exec
+exch//CheckXObject//ResolveD exec
+dup/Subtype get
+dup/Image eq{
+pop
+//CompleteOutlineImage exec
+//DoImage exec
+}{
+dup/PS eq{
+PDFR_DEBUG{
+(Executing a PS Xobject)=
+}if
+pop
+//RunDelayedStream exec
+}{
+dup/Form eq{
+pop
+PDFR_DEBUG{
+(Executing a Form XObject)=
+}if
+//PDFReader/CurrentObject get exch
+dup//PDFReader exch<< exch/Context exch >>/CurrentObject exch put
+dup/Matrix get concat
+dup/BBox get aload pop exch 3 index sub exch 2 index sub rectclip
+//RunDelayedStream exec
+//PDFReader exch/CurrentObject exch put
+}{
+mark exch(unimplemented XObject type )exch//error exec
+}ifelse
+}ifelse
+}ifelse
+}bind def
+/Operators 50 dict begin
+/q{//GSave exec}bind def
+/Q{//GRestore exec}bind def
+/cm{//TempMatrix astore concat}bind def
+/i{1 .min setflat}bind def
+/J/setlinecap load def
+/d/setdash load def
+/j/setlinejoin load def
+/w/setlinewidth load def
+/M/setmiterlimit load def
+/gs{SetExtGState}bind def
+/g/setgray load def
+/rg/setrgbcolor load def
+/k/setcmykcolor load def
+/cs{//ResolveColorSpace exec//SetColorSpaceSafe exec
+}bind def
+/sc/setcolor load def
+/scn{//SetColor exec}bind def
+/G/setgray load def
+/RG/setrgbcolor load def
+/K/setcmykcolor load def
+/CS//cs def
+/ri{SetColorRenderingIntent}bind def
+/SC/setcolor load def
+/SCN{//SetColor exec}bind def
+/m/moveto load def
+/l/lineto load def
+/c/curveto load def
+/v{currentpoint 6 2 roll curveto}bind def
+/y{2 copy curveto}bind def
+/re{
+4 2 roll moveto exch dup 0 rlineto 0 3 -1 roll rlineto neg 0 rlineto
+closepath
+}def
+/h/closepath load def
+/n/newpath load def
+/S/stroke load def
+/s{closepath stroke}bind def
+/f/fill load def
+/f*/eofill load def
+/B{gsave fill grestore stroke}bind def
+/b{closepath gsave fill grestore stroke}bind def
+/B*{gsave eofill grestore stroke}bind def
+/b*{closepath gsave eofill grestore stroke}bind def
+/W/clip load def
+/W*/eoclip load def
+/sh{
+ResolveShading
+dup/Background known{
+gsave
+dup/ColorSpace get setcolorspace
+dup/Background get aload pop setcolor
+pathbbox
+2 index sub exch 3 index sub exch
+rectfill
+grestore
+}if
+shfill
+}bind def
+/Do{//DoXObject exec}bind def
+/BI{currentglobal false setglobal<<}bind def
+/ID{>>
+dup/DataSource currentfile
+2 index/F//knownget exec{
+/A85 eq{
+0(~>)/SubFileDecode filter
+}if
+}if
+put
+//CompleteInlineImage exec
+exch setglobal
+//DoImage exec
+}bind def
+/EI{}bind def
+/BT{gsave//GraphicState/InitialTextMatrix get currentmatrix pop}bind def
+/ET{grestore}bind def
+/Tc{//GraphicState exch/CharacterSpacing exch put}bind def
+/TL{//GraphicState exch/TextLeading exch put}bind def
+/Tr{//GraphicState exch/TextRenderingMode exch put}bind def
+/Ts{
+mark(Unimplemented SetTextRise)//error exec
+}bind def
+/Tw{//GraphicState exch/WordSpacing exch put}bind def
+/Tz{
+mark(Unimplemented SetHorizontalTextScaling)//error exec
+}bind def
+/Td{translate 0 0 moveto}bind def
+/TD{dup neg//TL exec//Td exec}bind def
+/Tm{//GraphicState/InitialTextMatrix get setmatrix
+//TempMatrix astore concat
+0 0 moveto}bind def
+/T*{0//GraphicState/TextLeading get neg//Td exec}bind def
+/Tj{//ShowTextBeg exec//ShowText exec//ShowTextEnd exec}bind def
+/'{//T* exec//ShowText exec//ShowTextEnd exec}bind def
+/"{3 2 roll//Tw exec exch//Tc exec//' exec}bind def
+/TJ//ShowTextWithGlyphPositioning def
+/Tf//SetFont def
+/d0/setcharwidth load def
+/d1/setcachedevice load def
+/BDC{pop pop}bind def
+/BMC{pop}bind def
+/EMC{}bind def
+/BX{BeginCompatibilitySection}bind def
+/EX{EndCompatibilitySection}bind def
+/DP{DefineMarkedContentPointWithPropertyList}bind def
+/MP{DefineMarkedContentPoint}bind def
+/PS{cvx exec}bind def
+currentdict end def
+//PDFR_STREAM{
+//Operators length dict begin
+//Operators{
+exch dup
+[exch//=only/exec load
+( )/print load
+8 7 roll
+dup type/arraytype eq{
+/exec load
+}if
+( )/print load
+]cvx
+def
+}forall
+currentdict end/Operators exch def
+}if
+/.registerencoding
+{pop pop
+}bind def
+/.defineencoding
+{def
+}bind def
+/.findencoding
+{load
+}bind def
+/currentglobal where
+{pop currentglobal{setglobal}true setglobal}
+{{}}
+ifelse
+/MacRomanEncoding
+StandardEncoding 0 39 getinterval aload pop
+/quotesingle
+StandardEncoding 40 56 getinterval aload pop
+/grave
+StandardEncoding 97 31 getinterval aload pop
+/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute
+/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave
+/ecircumflex/edieresis/iacute/igrave
+/icircumflex/idieresis/ntilde/oacute
+/ograve/ocircumflex/odieresis/otilde
+/uacute/ugrave/ucircumflex/udieresis
+/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls
+/registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash
+/.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef
+/.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash
+/questiondown/exclamdown/logicalnot/.notdef
+/florin/.notdef/.notdef/guillemotleft
+/guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe
+/endash/emdash/quotedblleft/quotedblright
+/quoteleft/quoteright/divide/.notdef
+/ydieresis/Ydieresis/fraction/currency
+/guilsinglleft/guilsinglright/fi/fl
+/daggerdbl/periodcentered/quotesinglbase/quotedblbase
+/perthousand/Acircumflex/Ecircumflex/Aacute
+/Edieresis/Egrave/Iacute/Icircumflex
+/Idieresis/Igrave/Oacute/Ocircumflex
+/.notdef/Ograve/Uacute/Ucircumflex
+/Ugrave/dotlessi/circumflex/tilde
+/macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron
+256 packedarray
+5 1 index .registerencoding
+.defineencoding
+exec
+/AdobeGlyphList mark
+/A 16#0041
+/AE 16#00c6
+/AEacute 16#01fc
+/AEmacron 16#01e2
+/AEsmall 16#f7e6
+/Aacute 16#00c1
+/Aacutesmall 16#f7e1
+/Abreve 16#0102
+/Abreveacute 16#1eae
+/Abrevecyrillic 16#04d0
+/Abrevedotbelow 16#1eb6
+/Abrevegrave 16#1eb0
+/Abrevehookabove 16#1eb2
+/Abrevetilde 16#1eb4
+/Acaron 16#01cd
+/Acircle 16#24b6
+/Acircumflex 16#00c2
+/Acircumflexacute 16#1ea4
+/Acircumflexdotbelow 16#1eac
+/Acircumflexgrave 16#1ea6
+/Acircumflexhookabove 16#1ea8
+/Acircumflexsmall 16#f7e2
+/Acircumflextilde 16#1eaa
+/Acute 16#f6c9
+/Acutesmall 16#f7b4
+/Acyrillic 16#0410
+/Adblgrave 16#0200
+/Adieresis 16#00c4
+/Adieresiscyrillic 16#04d2
+/Adieresismacron 16#01de
+/Adieresissmall 16#f7e4
+/Adotbelow 16#1ea0
+/Adotmacron 16#01e0
+/Agrave 16#00c0
+/Agravesmall 16#f7e0
+/Ahookabove 16#1ea2
+/Aiecyrillic 16#04d4
+/Ainvertedbreve 16#0202
+/Alpha 16#0391
+/Alphatonos 16#0386
+/Amacron 16#0100
+/Amonospace 16#ff21
+/Aogonek 16#0104
+/Aring 16#00c5
+/Aringacute 16#01fa
+/Aringbelow 16#1e00
+/Aringsmall 16#f7e5
+/Asmall 16#f761
+/Atilde 16#00c3
+/Atildesmall 16#f7e3
+/Aybarmenian 16#0531
+/B 16#0042
+/Bcircle 16#24b7
+/Bdotaccent 16#1e02
+/Bdotbelow 16#1e04
+/Becyrillic 16#0411
+/Benarmenian 16#0532
+/Beta 16#0392
+/Bhook 16#0181
+/Blinebelow 16#1e06
+/Bmonospace 16#ff22
+/Brevesmall 16#f6f4
+/Bsmall 16#f762
+/Btopbar 16#0182
+/C 16#0043
+/Caarmenian 16#053e
+/Cacute 16#0106
+/Caron 16#f6ca
+/Caronsmall 16#f6f5
+/Ccaron 16#010c
+/Ccedilla 16#00c7
+/Ccedillaacute 16#1e08
+/Ccedillasmall 16#f7e7
+/Ccircle 16#24b8
+/Ccircumflex 16#0108
+/Cdot 16#010a
+/Cdotaccent 16#010a
+/Cedillasmall 16#f7b8
+/Chaarmenian 16#0549
+/Cheabkhasiancyrillic 16#04bc
+/Checyrillic 16#0427
+/Chedescenderabkhasiancyrillic 16#04be
+/Chedescendercyrillic 16#04b6
+/Chedieresiscyrillic 16#04f4
+/Cheharmenian 16#0543
+/Chekhakassiancyrillic 16#04cb
+/Cheverticalstrokecyrillic 16#04b8
+/Chi 16#03a7
+/Chook 16#0187
+/Circumflexsmall 16#f6f6
+/Cmonospace 16#ff23
+/Coarmenian 16#0551
+/Csmall 16#f763
+/D 16#0044
+/DZ 16#01f1
+/DZcaron 16#01c4
+/Daarmenian 16#0534
+/Dafrican 16#0189
+/Dcaron 16#010e
+/Dcedilla 16#1e10
+/Dcircle 16#24b9
+/Dcircumflexbelow 16#1e12
+/Dcroat 16#0110
+/Ddotaccent 16#1e0a
+/Ddotbelow 16#1e0c
+/Decyrillic 16#0414
+/Deicoptic 16#03ee
+/Delta 16#2206
+/Deltagreek 16#0394
+/Dhook 16#018a
+/Dieresis 16#f6cb
+/DieresisAcute 16#f6cc
+/DieresisGrave 16#f6cd
+/Dieresissmall 16#f7a8
+/Digammagreek 16#03dc
+/Djecyrillic 16#0402
+/Dlinebelow 16#1e0e
+/Dmonospace 16#ff24
+/Dotaccentsmall 16#f6f7
+/Dslash 16#0110
+/Dsmall 16#f764
+/Dtopbar 16#018b
+/Dz 16#01f2
+/Dzcaron 16#01c5
+/Dzeabkhasiancyrillic 16#04e0
+/Dzecyrillic 16#0405
+/Dzhecyrillic 16#040f
+/E 16#0045
+/Eacute 16#00c9
+/Eacutesmall 16#f7e9
+/Ebreve 16#0114
+/Ecaron 16#011a
+/Ecedillabreve 16#1e1c
+/Echarmenian 16#0535
+/Ecircle 16#24ba
+/Ecircumflex 16#00ca
+/Ecircumflexacute 16#1ebe
+/Ecircumflexbelow 16#1e18
+/Ecircumflexdotbelow 16#1ec6
+/Ecircumflexgrave 16#1ec0
+/Ecircumflexhookabove 16#1ec2
+/Ecircumflexsmall 16#f7ea
+/Ecircumflextilde 16#1ec4
+/Ecyrillic 16#0404
+/Edblgrave 16#0204
+/Edieresis 16#00cb
+/Edieresissmall 16#f7eb
+/Edot 16#0116
+/Edotaccent 16#0116
+/Edotbelow 16#1eb8
+/Efcyrillic 16#0424
+/Egrave 16#00c8
+/Egravesmall 16#f7e8
+/Eharmenian 16#0537
+/Ehookabove 16#1eba
+/Eightroman 16#2167
+/Einvertedbreve 16#0206
+/Eiotifiedcyrillic 16#0464
+/Elcyrillic 16#041b
+/Elevenroman 16#216a
+/Emacron 16#0112
+/Emacronacute 16#1e16
+/Emacrongrave 16#1e14
+/Emcyrillic 16#041c
+/Emonospace 16#ff25
+/Encyrillic 16#041d
+/Endescendercyrillic 16#04a2
+/Eng 16#014a
+/Enghecyrillic 16#04a4
+/Enhookcyrillic 16#04c7
+/Eogonek 16#0118
+/Eopen 16#0190
+/Epsilon 16#0395
+/Epsilontonos 16#0388
+/Ercyrillic 16#0420
+/Ereversed 16#018e
+/Ereversedcyrillic 16#042d
+/Escyrillic 16#0421
+/Esdescendercyrillic 16#04aa
+/Esh 16#01a9
+/Esmall 16#f765
+/Eta 16#0397
+/Etarmenian 16#0538
+/Etatonos 16#0389
+/Eth 16#00d0
+/Ethsmall 16#f7f0
+/Etilde 16#1ebc
+/Etildebelow 16#1e1a
+/Euro 16#20ac
+/Ezh 16#01b7
+/Ezhcaron 16#01ee
+/Ezhreversed 16#01b8
+/F 16#0046
+/Fcircle 16#24bb
+/Fdotaccent 16#1e1e
+/Feharmenian 16#0556
+/Feicoptic 16#03e4
+/Fhook 16#0191
+/Fitacyrillic 16#0472
+/Fiveroman 16#2164
+/Fmonospace 16#ff26
+/Fourroman 16#2163
+/Fsmall 16#f766
+/G 16#0047
+/GBsquare 16#3387
+/Gacute 16#01f4
+/Gamma 16#0393
+/Gammaafrican 16#0194
+/Gangiacoptic 16#03ea
+/Gbreve 16#011e
+/Gcaron 16#01e6
+/Gcedilla 16#0122
+/Gcircle 16#24bc
+/Gcircumflex 16#011c
+/Gcommaaccent 16#0122
+/Gdot 16#0120
+/Gdotaccent 16#0120
+/Gecyrillic 16#0413
+/Ghadarmenian 16#0542
+/Ghemiddlehookcyrillic 16#0494
+/Ghestrokecyrillic 16#0492
+/Gheupturncyrillic 16#0490
+/Ghook 16#0193
+/Gimarmenian 16#0533
+/Gjecyrillic 16#0403
+/Gmacron 16#1e20
+/Gmonospace 16#ff27
+/Grave 16#f6ce
+/Gravesmall 16#f760
+/Gsmall 16#f767
+/Gsmallhook 16#029b
+/Gstroke 16#01e4
+/H 16#0048
+/H18533 16#25cf
+/H18543 16#25aa
+/H18551 16#25ab
+/H22073 16#25a1
+/HPsquare 16#33cb
+/Haabkhasiancyrillic 16#04a8
+/Hadescendercyrillic 16#04b2
+/Hardsigncyrillic 16#042a
+/Hbar 16#0126
+/Hbrevebelow 16#1e2a
+/Hcedilla 16#1e28
+/Hcircle 16#24bd
+/Hcircumflex 16#0124
+/Hdieresis 16#1e26
+/Hdotaccent 16#1e22
+/Hdotbelow 16#1e24
+/Hmonospace 16#ff28
+/Hoarmenian 16#0540
+/Horicoptic 16#03e8
+/Hsmall 16#f768
+/Hungarumlaut 16#f6cf
+/Hungarumlautsmall 16#f6f8
+/Hzsquare 16#3390
+/I 16#0049
+/IAcyrillic 16#042f
+/IJ 16#0132
+/IUcyrillic 16#042e
+/Iacute 16#00cd
+/Iacutesmall 16#f7ed
+/Ibreve 16#012c
+/Icaron 16#01cf
+/Icircle 16#24be
+/Icircumflex 16#00ce
+/Icircumflexsmall 16#f7ee
+/Icyrillic 16#0406
+/Idblgrave 16#0208
+/Idieresis 16#00cf
+/Idieresisacute 16#1e2e
+/Idieresiscyrillic 16#04e4
+/Idieresissmall 16#f7ef
+/Idot 16#0130
+/Idotaccent 16#0130
+/Idotbelow 16#1eca
+/Iebrevecyrillic 16#04d6
+/Iecyrillic 16#0415
+/Ifraktur 16#2111
+/Igrave 16#00cc
+/Igravesmall 16#f7ec
+/Ihookabove 16#1ec8
+/Iicyrillic 16#0418
+/Iinvertedbreve 16#020a
+/Iishortcyrillic 16#0419
+/Imacron 16#012a
+/Imacroncyrillic 16#04e2
+/Imonospace 16#ff29
+/Iniarmenian 16#053b
+/Iocyrillic 16#0401
+/Iogonek 16#012e
+/Iota 16#0399
+/Iotaafrican 16#0196
+/Iotadieresis 16#03aa
+/Iotatonos 16#038a
+/Ismall 16#f769
+/Istroke 16#0197
+/Itilde 16#0128
+/Itildebelow 16#1e2c
+/Izhitsacyrillic 16#0474
+/Izhitsadblgravecyrillic 16#0476
+/J 16#004a
+/Jaarmenian 16#0541
+/Jcircle 16#24bf
+/Jcircumflex 16#0134
+/Jecyrillic 16#0408
+/Jheharmenian 16#054b
+/Jmonospace 16#ff2a
+/Jsmall 16#f76a
+/K 16#004b
+/KBsquare 16#3385
+/KKsquare 16#33cd
+/Kabashkircyrillic 16#04a0
+/Kacute 16#1e30
+/Kacyrillic 16#041a
+/Kadescendercyrillic 16#049a
+/Kahookcyrillic 16#04c3
+/Kappa 16#039a
+/Kastrokecyrillic 16#049e
+/Kaverticalstrokecyrillic 16#049c
+/Kcaron 16#01e8
+/Kcedilla 16#0136
+/Kcircle 16#24c0
+/Kcommaaccent 16#0136
+/Kdotbelow 16#1e32
+/Keharmenian 16#0554
+/Kenarmenian 16#053f
+/Khacyrillic 16#0425
+/Kheicoptic 16#03e6
+/Khook 16#0198
+/Kjecyrillic 16#040c
+/Klinebelow 16#1e34
+/Kmonospace 16#ff2b
+/Koppacyrillic 16#0480
+/Koppagreek 16#03de
+/Ksicyrillic 16#046e
+/Ksmall 16#f76b
+/L 16#004c
+/LJ 16#01c7
+/LL 16#f6bf
+/Lacute 16#0139
+/Lambda 16#039b
+/Lcaron 16#013d
+/Lcedilla 16#013b
+/Lcircle 16#24c1
+/Lcircumflexbelow 16#1e3c
+/Lcommaaccent 16#013b
+/Ldot 16#013f
+/Ldotaccent 16#013f
+/Ldotbelow 16#1e36
+/Ldotbelowmacron 16#1e38
+/Liwnarmenian 16#053c
+/Lj 16#01c8
+/Ljecyrillic 16#0409
+/Llinebelow 16#1e3a
+/Lmonospace 16#ff2c
+/Lslash 16#0141
+/Lslashsmall 16#f6f9
+/Lsmall 16#f76c
+/M 16#004d
+/MBsquare 16#3386
+/Macron 16#f6d0
+/Macronsmall 16#f7af
+/Macute 16#1e3e
+/Mcircle 16#24c2
+/Mdotaccent 16#1e40
+/Mdotbelow 16#1e42
+/Menarmenian 16#0544
+/Mmonospace 16#ff2d
+/Msmall 16#f76d
+/Mturned 16#019c
+/Mu 16#039c
+/N 16#004e
+/NJ 16#01ca
+/Nacute 16#0143
+/Ncaron 16#0147
+/Ncedilla 16#0145
+/Ncircle 16#24c3
+/Ncircumflexbelow 16#1e4a
+/Ncommaaccent 16#0145
+/Ndotaccent 16#1e44
+/Ndotbelow 16#1e46
+/Nhookleft 16#019d
+/Nineroman 16#2168
+/Nj 16#01cb
+/Njecyrillic 16#040a
+/Nlinebelow 16#1e48
+/Nmonospace 16#ff2e
+/Nowarmenian 16#0546
+/Nsmall 16#f76e
+/Ntilde 16#00d1
+/Ntildesmall 16#f7f1
+/Nu 16#039d
+/O 16#004f
+/OE 16#0152
+/OEsmall 16#f6fa
+/Oacute 16#00d3
+/Oacutesmall 16#f7f3
+/Obarredcyrillic 16#04e8
+/Obarreddieresiscyrillic 16#04ea
+/Obreve 16#014e
+/Ocaron 16#01d1
+/Ocenteredtilde 16#019f
+/Ocircle 16#24c4
+/Ocircumflex 16#00d4
+/Ocircumflexacute 16#1ed0
+/Ocircumflexdotbelow 16#1ed8
+/Ocircumflexgrave 16#1ed2
+/Ocircumflexhookabove 16#1ed4
+/Ocircumflexsmall 16#f7f4
+/Ocircumflextilde 16#1ed6
+/Ocyrillic 16#041e
+/Odblacute 16#0150
+/Odblgrave 16#020c
+/Odieresis 16#00d6
+/Odieresiscyrillic 16#04e6
+/Odieresissmall 16#f7f6
+/Odotbelow 16#1ecc
+/Ogoneksmall 16#f6fb
+/Ograve 16#00d2
+/Ogravesmall 16#f7f2
+/Oharmenian 16#0555
+/Ohm 16#2126
+/Ohookabove 16#1ece
+/Ohorn 16#01a0
+/Ohornacute 16#1eda
+/Ohorndotbelow 16#1ee2
+/Ohorngrave 16#1edc
+/Ohornhookabove 16#1ede
+/Ohorntilde 16#1ee0
+/Ohungarumlaut 16#0150
+/Oi 16#01a2
+/Oinvertedbreve 16#020e
+/Omacron 16#014c
+/Omacronacute 16#1e52
+/Omacrongrave 16#1e50
+/Omega 16#2126
+/Omegacyrillic 16#0460
+/Omegagreek 16#03a9
+/Omegaroundcyrillic 16#047a
+/Omegatitlocyrillic 16#047c
+/Omegatonos 16#038f
+/Omicron 16#039f
+/Omicrontonos 16#038c
+/Omonospace 16#ff2f
+/Oneroman 16#2160
+/Oogonek 16#01ea
+/Oogonekmacron 16#01ec
+/Oopen 16#0186
+/Oslash 16#00d8
+/Oslashacute 16#01fe
+/Oslashsmall 16#f7f8
+/Osmall 16#f76f
+/Ostrokeacute 16#01fe
+/Otcyrillic 16#047e
+/Otilde 16#00d5
+/Otildeacute 16#1e4c
+/Otildedieresis 16#1e4e
+/Otildesmall 16#f7f5
+/P 16#0050
+/Pacute 16#1e54
+/Pcircle 16#24c5
+/Pdotaccent 16#1e56
+/Pecyrillic 16#041f
+/Peharmenian 16#054a
+/Pemiddlehookcyrillic 16#04a6
+/Phi 16#03a6
+/Phook 16#01a4
+/Pi 16#03a0
+/Piwrarmenian 16#0553
+/Pmonospace 16#ff30
+/Psi 16#03a8
+/Psicyrillic 16#0470
+/Psmall 16#f770
+/Q 16#0051
+/Qcircle 16#24c6
+/Qmonospace 16#ff31
+/Qsmall 16#f771
+/R 16#0052
+/Raarmenian 16#054c
+/Racute 16#0154
+/Rcaron 16#0158
+/Rcedilla 16#0156
+/Rcircle 16#24c7
+/Rcommaaccent 16#0156
+/Rdblgrave 16#0210
+/Rdotaccent 16#1e58
+/Rdotbelow 16#1e5a
+/Rdotbelowmacron 16#1e5c
+/Reharmenian 16#0550
+/Rfraktur 16#211c
+/Rho 16#03a1
+/Ringsmall 16#f6fc
+/Rinvertedbreve 16#0212
+/Rlinebelow 16#1e5e
+/Rmonospace 16#ff32
+/Rsmall 16#f772
+/Rsmallinverted 16#0281
+/Rsmallinvertedsuperior 16#02b6
+/S 16#0053
+/SF010000 16#250c
+/SF020000 16#2514
+/SF030000 16#2510
+/SF040000 16#2518
+/SF050000 16#253c
+/SF060000 16#252c
+/SF070000 16#2534
+/SF080000 16#251c
+/SF090000 16#2524
+/SF100000 16#2500
+/SF110000 16#2502
+/SF190000 16#2561
+/SF200000 16#2562
+/SF210000 16#2556
+/SF220000 16#2555
+/SF230000 16#2563
+/SF240000 16#2551
+/SF250000 16#2557
+/SF260000 16#255d
+/SF270000 16#255c
+/SF280000 16#255b
+/SF360000 16#255e
+/SF370000 16#255f
+/SF380000 16#255a
+/SF390000 16#2554
+/SF400000 16#2569
+/SF410000 16#2566
+/SF420000 16#2560
+/SF430000 16#2550
+/SF440000 16#256c
+/SF450000 16#2567
+/SF460000 16#2568
+/SF470000 16#2564
+/SF480000 16#2565
+/SF490000 16#2559
+/SF500000 16#2558
+/SF510000 16#2552
+/SF520000 16#2553
+/SF530000 16#256b
+/SF540000 16#256a
+/Sacute 16#015a
+/Sacutedotaccent 16#1e64
+/Sampigreek 16#03e0
+/Scaron 16#0160
+/Scarondotaccent 16#1e66
+/Scaronsmall 16#f6fd
+/Scedilla 16#015e
+/Schwa 16#018f
+/Schwacyrillic 16#04d8
+/Schwadieresiscyrillic 16#04da
+/Scircle 16#24c8
+/Scircumflex 16#015c
+/Scommaaccent 16#0218
+/Sdotaccent 16#1e60
+/Sdotbelow 16#1e62
+/Sdotbelowdotaccent 16#1e68
+/Seharmenian 16#054d
+/Sevenroman 16#2166
+/Shaarmenian 16#0547
+/Shacyrillic 16#0428
+/Shchacyrillic 16#0429
+/Sheicoptic 16#03e2
+/Shhacyrillic 16#04ba
+/Shimacoptic 16#03ec
+/Sigma 16#03a3
+/Sixroman 16#2165
+/Smonospace 16#ff33
+/Softsigncyrillic 16#042c
+/Ssmall 16#f773
+/Stigmagreek 16#03da
+/T 16#0054
+/Tau 16#03a4
+/Tbar 16#0166
+/Tcaron 16#0164
+/Tcedilla 16#0162
+/Tcircle 16#24c9
+/Tcircumflexbelow 16#1e70
+/Tcommaaccent 16#0162
+/Tdotaccent 16#1e6a
+/Tdotbelow 16#1e6c
+/Tecyrillic 16#0422
+/Tedescendercyrillic 16#04ac
+/Tenroman 16#2169
+/Tetsecyrillic 16#04b4
+/Theta 16#0398
+/Thook 16#01ac
+/Thorn 16#00de
+/Thornsmall 16#f7fe
+/Threeroman 16#2162
+/Tildesmall 16#f6fe
+/Tiwnarmenian 16#054f
+/Tlinebelow 16#1e6e
+/Tmonospace 16#ff34
+/Toarmenian 16#0539
+/Tonefive 16#01bc
+/Tonesix 16#0184
+/Tonetwo 16#01a7
+/Tretroflexhook 16#01ae
+/Tsecyrillic 16#0426
+/Tshecyrillic 16#040b
+/Tsmall 16#f774
+/Twelveroman 16#216b
+/Tworoman 16#2161
+/U 16#0055
+/Uacute 16#00da
+/Uacutesmall 16#f7fa
+/Ubreve 16#016c
+/Ucaron 16#01d3
+/Ucircle 16#24ca
+/Ucircumflex 16#00db
+/Ucircumflexbelow 16#1e76
+/Ucircumflexsmall 16#f7fb
+/Ucyrillic 16#0423
+/Udblacute 16#0170
+/Udblgrave 16#0214
+/Udieresis 16#00dc
+/Udieresisacute 16#01d7
+/Udieresisbelow 16#1e72
+/Udieresiscaron 16#01d9
+/Udieresiscyrillic 16#04f0
+/Udieresisgrave 16#01db
+/Udieresismacron 16#01d5
+/Udieresissmall 16#f7fc
+/Udotbelow 16#1ee4
+/Ugrave 16#00d9
+/Ugravesmall 16#f7f9
+/Uhookabove 16#1ee6
+/Uhorn 16#01af
+/Uhornacute 16#1ee8
+/Uhorndotbelow 16#1ef0
+/Uhorngrave 16#1eea
+/Uhornhookabove 16#1eec
+/Uhorntilde 16#1eee
+/Uhungarumlaut 16#0170
+/Uhungarumlautcyrillic 16#04f2
+/Uinvertedbreve 16#0216
+/Ukcyrillic 16#0478
+/Umacron 16#016a
+/Umacroncyrillic 16#04ee
+/Umacrondieresis 16#1e7a
+/Umonospace 16#ff35
+/Uogonek 16#0172
+/Upsilon 16#03a5
+/Upsilon1 16#03d2
+/Upsilonacutehooksymbolgreek 16#03d3
+/Upsilonafrican 16#01b1
+/Upsilondieresis 16#03ab
+/Upsilondieresishooksymbolgreek 16#03d4
+/Upsilonhooksymbol 16#03d2
+/Upsilontonos 16#038e
+/Uring 16#016e
+/Ushortcyrillic 16#040e
+/Usmall 16#f775
+/Ustraightcyrillic 16#04ae
+/Ustraightstrokecyrillic 16#04b0
+/Utilde 16#0168
+/Utildeacute 16#1e78
+/Utildebelow 16#1e74
+/V 16#0056
+/Vcircle 16#24cb
+/Vdotbelow 16#1e7e
+/Vecyrillic 16#0412
+/Vewarmenian 16#054e
+/Vhook 16#01b2
+/Vmonospace 16#ff36
+/Voarmenian 16#0548
+/Vsmall 16#f776
+/Vtilde 16#1e7c
+/W 16#0057
+/Wacute 16#1e82
+/Wcircle 16#24cc
+/Wcircumflex 16#0174
+/Wdieresis 16#1e84
+/Wdotaccent 16#1e86
+/Wdotbelow 16#1e88
+/Wgrave 16#1e80
+/Wmonospace 16#ff37
+/Wsmall 16#f777
+/X 16#0058
+/Xcircle 16#24cd
+/Xdieresis 16#1e8c
+/Xdotaccent 16#1e8a
+/Xeharmenian 16#053d
+/Xi 16#039e
+/Xmonospace 16#ff38
+/Xsmall 16#f778
+/Y 16#0059
+/Yacute 16#00dd
+/Yacutesmall 16#f7fd
+/Yatcyrillic 16#0462
+/Ycircle 16#24ce
+/Ycircumflex 16#0176
+/Ydieresis 16#0178
+/Ydieresissmall 16#f7ff
+/Ydotaccent 16#1e8e
+/Ydotbelow 16#1ef4
+/Yericyrillic 16#042b
+/Yerudieresiscyrillic 16#04f8
+/Ygrave 16#1ef2
+/Yhook 16#01b3
+/Yhookabove 16#1ef6
+/Yiarmenian 16#0545
+/Yicyrillic 16#0407
+/Yiwnarmenian 16#0552
+/Ymonospace 16#ff39
+/Ysmall 16#f779
+/Ytilde 16#1ef8
+/Yusbigcyrillic 16#046a
+/Yusbigiotifiedcyrillic 16#046c
+/Yuslittlecyrillic 16#0466
+/Yuslittleiotifiedcyrillic 16#0468
+/Z 16#005a
+/Zaarmenian 16#0536
+/Zacute 16#0179
+/Zcaron 16#017d
+/Zcaronsmall 16#f6ff
+/Zcircle 16#24cf
+/Zcircumflex 16#1e90
+/Zdot 16#017b
+/Zdotaccent 16#017b
+/Zdotbelow 16#1e92
+/Zecyrillic 16#0417
+/Zedescendercyrillic 16#0498
+/Zedieresiscyrillic 16#04de
+/Zeta 16#0396
+/Zhearmenian 16#053a
+/Zhebrevecyrillic 16#04c1
+/Zhecyrillic 16#0416
+/Zhedescendercyrillic 16#0496
+/Zhedieresiscyrillic 16#04dc
+/Zlinebelow 16#1e94
+/Zmonospace 16#ff3a
+/Zsmall 16#f77a
+/Zstroke 16#01b5
+/a 16#0061
+/aabengali 16#0986
+/aacute 16#00e1
+/aadeva 16#0906
+/aagujarati 16#0a86
+/aagurmukhi 16#0a06
+/aamatragurmukhi 16#0a3e
+/aarusquare 16#3303
+/aavowelsignbengali 16#09be
+/aavowelsigndeva 16#093e
+/aavowelsigngujarati 16#0abe
+/abbreviationmarkarmenian 16#055f
+/abbreviationsigndeva 16#0970
+/abengali 16#0985
+/abopomofo 16#311a
+/abreve 16#0103
+/abreveacute 16#1eaf
+/abrevecyrillic 16#04d1
+/abrevedotbelow 16#1eb7
+/abrevegrave 16#1eb1
+/abrevehookabove 16#1eb3
+/abrevetilde 16#1eb5
+/acaron 16#01ce
+/acircle 16#24d0
+/acircumflex 16#00e2
+/acircumflexacute 16#1ea5
+/acircumflexdotbelow 16#1ead
+/acircumflexgrave 16#1ea7
+/acircumflexhookabove 16#1ea9
+/acircumflextilde 16#1eab
+/acute 16#00b4
+/acutebelowcmb 16#0317
+/acutecmb 16#0301
+/acutecomb 16#0301
+/acutedeva 16#0954
+/acutelowmod 16#02cf
+/acutetonecmb 16#0341
+/acyrillic 16#0430
+/adblgrave 16#0201
+/addakgurmukhi 16#0a71
+/adeva 16#0905
+/adieresis 16#00e4
+/adieresiscyrillic 16#04d3
+/adieresismacron 16#01df
+/adotbelow 16#1ea1
+/adotmacron 16#01e1
+/ae 16#00e6
+/aeacute 16#01fd
+/aekorean 16#3150
+/aemacron 16#01e3
+/afii00208 16#2015
+/afii08941 16#20a4
+/afii10017 16#0410
+/afii10018 16#0411
+/afii10019 16#0412
+/afii10020 16#0413
+/afii10021 16#0414
+/afii10022 16#0415
+/afii10023 16#0401
+/afii10024 16#0416
+/afii10025 16#0417
+/afii10026 16#0418
+/afii10027 16#0419
+/afii10028 16#041a
+/afii10029 16#041b
+/afii10030 16#041c
+/afii10031 16#041d
+/afii10032 16#041e
+/afii10033 16#041f
+/afii10034 16#0420
+/afii10035 16#0421
+/afii10036 16#0422
+/afii10037 16#0423
+/afii10038 16#0424
+/afii10039 16#0425
+/afii10040 16#0426
+/afii10041 16#0427
+/afii10042 16#0428
+/afii10043 16#0429
+/afii10044 16#042a
+/afii10045 16#042b
+/afii10046 16#042c
+/afii10047 16#042d
+/afii10048 16#042e
+/afii10049 16#042f
+/afii10050 16#0490
+/afii10051 16#0402
+/afii10052 16#0403
+/afii10053 16#0404
+/afii10054 16#0405
+/afii10055 16#0406
+/afii10056 16#0407
+/afii10057 16#0408
+/afii10058 16#0409
+/afii10059 16#040a
+/afii10060 16#040b
+/afii10061 16#040c
+/afii10062 16#040e
+/afii10063 16#f6c4
+/afii10064 16#f6c5
+/afii10065 16#0430
+/afii10066 16#0431
+/afii10067 16#0432
+/afii10068 16#0433
+/afii10069 16#0434
+/afii10070 16#0435
+/afii10071 16#0451
+/afii10072 16#0436
+/afii10073 16#0437
+/afii10074 16#0438
+/afii10075 16#0439
+/afii10076 16#043a
+/afii10077 16#043b
+/afii10078 16#043c
+/afii10079 16#043d
+/afii10080 16#043e
+/afii10081 16#043f
+/afii10082 16#0440
+/afii10083 16#0441
+/afii10084 16#0442
+/afii10085 16#0443
+/afii10086 16#0444
+/afii10087 16#0445
+/afii10088 16#0446
+/afii10089 16#0447
+/afii10090 16#0448
+/afii10091 16#0449
+/afii10092 16#044a
+/afii10093 16#044b
+/afii10094 16#044c
+/afii10095 16#044d
+/afii10096 16#044e
+/afii10097 16#044f
+/afii10098 16#0491
+/afii10099 16#0452
+/afii10100 16#0453
+/afii10101 16#0454
+/afii10102 16#0455
+/afii10103 16#0456
+/afii10104 16#0457
+/afii10105 16#0458
+/afii10106 16#0459
+/afii10107 16#045a
+/afii10108 16#045b
+/afii10109 16#045c
+/afii10110 16#045e
+/afii10145 16#040f
+/afii10146 16#0462
+/afii10147 16#0472
+/afii10148 16#0474
+/afii10192 16#f6c6
+/afii10193 16#045f
+/afii10194 16#0463
+/afii10195 16#0473
+/afii10196 16#0475
+/afii10831 16#f6c7
+/afii10832 16#f6c8
+/afii10846 16#04d9
+/afii299 16#200e
+/afii300 16#200f
+/afii301 16#200d
+/afii57381 16#066a
+/afii57388 16#060c
+/afii57392 16#0660
+/afii57393 16#0661
+/afii57394 16#0662
+/afii57395 16#0663
+/afii57396 16#0664
+/afii57397 16#0665
+/afii57398 16#0666
+/afii57399 16#0667
+/afii57400 16#0668
+/afii57401 16#0669
+/afii57403 16#061b
+/afii57407 16#061f
+/afii57409 16#0621
+/afii57410 16#0622
+/afii57411 16#0623
+/afii57412 16#0624
+/afii57413 16#0625
+/afii57414 16#0626
+/afii57415 16#0627
+/afii57416 16#0628
+/afii57417 16#0629
+/afii57418 16#062a
+/afii57419 16#062b
+/afii57420 16#062c
+/afii57421 16#062d
+/afii57422 16#062e
+/afii57423 16#062f
+/afii57424 16#0630
+/afii57425 16#0631
+/afii57426 16#0632
+/afii57427 16#0633
+/afii57428 16#0634
+/afii57429 16#0635
+/afii57430 16#0636
+/afii57431 16#0637
+/afii57432 16#0638
+/afii57433 16#0639
+/afii57434 16#063a
+/afii57440 16#0640
+/afii57441 16#0641
+/afii57442 16#0642
+/afii57443 16#0643
+/afii57444 16#0644
+/afii57445 16#0645
+/afii57446 16#0646
+/afii57448 16#0648
+/afii57449 16#0649
+/afii57450 16#064a
+/afii57451 16#064b
+/afii57452 16#064c
+/afii57453 16#064d
+/afii57454 16#064e
+/afii57455 16#064f
+/afii57456 16#0650
+/afii57457 16#0651
+/afii57458 16#0652
+/afii57470 16#0647
+/afii57505 16#06a4
+/afii57506 16#067e
+/afii57507 16#0686
+/afii57508 16#0698
+/afii57509 16#06af
+/afii57511 16#0679
+/afii57512 16#0688
+/afii57513 16#0691
+/afii57514 16#06ba
+/afii57519 16#06d2
+/afii57534 16#06d5
+/afii57636 16#20aa
+/afii57645 16#05be
+/afii57658 16#05c3
+/afii57664 16#05d0
+/afii57665 16#05d1
+/afii57666 16#05d2
+/afii57667 16#05d3
+/afii57668 16#05d4
+/afii57669 16#05d5
+/afii57670 16#05d6
+/afii57671 16#05d7
+/afii57672 16#05d8
+/afii57673 16#05d9
+/afii57674 16#05da
+/afii57675 16#05db
+/afii57676 16#05dc
+/afii57677 16#05dd
+/afii57678 16#05de
+/afii57679 16#05df
+/afii57680 16#05e0
+/afii57681 16#05e1
+/afii57682 16#05e2
+/afii57683 16#05e3
+/afii57684 16#05e4
+/afii57685 16#05e5
+/afii57686 16#05e6
+/afii57687 16#05e7
+/afii57688 16#05e8
+/afii57689 16#05e9
+/afii57690 16#05ea
+/afii57694 16#fb2a
+/afii57695 16#fb2b
+/afii57700 16#fb4b
+/afii57705 16#fb1f
+/afii57716 16#05f0
+/afii57717 16#05f1
+/afii57718 16#05f2
+/afii57723 16#fb35
+/afii57793 16#05b4
+/afii57794 16#05b5
+/afii57795 16#05b6
+/afii57796 16#05bb
+/afii57797 16#05b8
+/afii57798 16#05b7
+/afii57799 16#05b0
+/afii57800 16#05b2
+/afii57801 16#05b1
+/afii57802 16#05b3
+/afii57803 16#05c2
+/afii57804 16#05c1
+/afii57806 16#05b9
+/afii57807 16#05bc
+/afii57839 16#05bd
+/afii57841 16#05bf
+/afii57842 16#05c0
+/afii57929 16#02bc
+/afii61248 16#2105
+/afii61289 16#2113
+/afii61352 16#2116
+/afii61573 16#202c
+/afii61574 16#202d
+/afii61575 16#202e
+/afii61664 16#200c
+/afii63167 16#066d
+/afii64937 16#02bd
+/agrave 16#00e0
+/agujarati 16#0a85
+/agurmukhi 16#0a05
+/ahiragana 16#3042
+/ahookabove 16#1ea3
+/aibengali 16#0990
+/aibopomofo 16#311e
+/aideva 16#0910
+/aiecyrillic 16#04d5
+/aigujarati 16#0a90
+/aigurmukhi 16#0a10
+/aimatragurmukhi 16#0a48
+/ainarabic 16#0639
+/ainfinalarabic 16#feca
+/aininitialarabic 16#fecb
+/ainmedialarabic 16#fecc
+/ainvertedbreve 16#0203
+/aivowelsignbengali 16#09c8
+/aivowelsigndeva 16#0948
+/aivowelsigngujarati 16#0ac8
+/akatakana 16#30a2
+/akatakanahalfwidth 16#ff71
+/akorean 16#314f
+/alef 16#05d0
+/alefarabic 16#0627
+/alefdageshhebrew 16#fb30
+/aleffinalarabic 16#fe8e
+/alefhamzaabovearabic 16#0623
+/alefhamzaabovefinalarabic 16#fe84
+/alefhamzabelowarabic 16#0625
+/alefhamzabelowfinalarabic 16#fe88
+/alefhebrew 16#05d0
+/aleflamedhebrew 16#fb4f
+/alefmaddaabovearabic 16#0622
+/alefmaddaabovefinalarabic 16#fe82
+/alefmaksuraarabic 16#0649
+/alefmaksurafinalarabic 16#fef0
+/alefmaksurainitialarabic 16#fef3
+/alefmaksuramedialarabic 16#fef4
+/alefpatahhebrew 16#fb2e
+/alefqamatshebrew 16#fb2f
+/aleph 16#2135
+/allequal 16#224c
+/alpha 16#03b1
+/alphatonos 16#03ac
+/amacron 16#0101
+/amonospace 16#ff41
+/ampersand 16#0026
+/ampersandmonospace 16#ff06
+/ampersandsmall 16#f726
+/amsquare 16#33c2
+/anbopomofo 16#3122
+/angbopomofo 16#3124
+/angkhankhuthai 16#0e5a
+/angle 16#2220
+/anglebracketleft 16#3008
+/anglebracketleftvertical 16#fe3f
+/anglebracketright 16#3009
+/anglebracketrightvertical 16#fe40
+/angleleft 16#2329
+/angleright 16#232a
+/angstrom 16#212b
+/anoteleia 16#0387
+/anudattadeva 16#0952
+/anusvarabengali 16#0982
+/anusvaradeva 16#0902
+/anusvaragujarati 16#0a82
+/aogonek 16#0105
+/apaatosquare 16#3300
+/aparen 16#249c
+/apostrophearmenian 16#055a
+/apostrophemod 16#02bc
+/apple 16#f8ff
+/approaches 16#2250
+/approxequal 16#2248
+/approxequalorimage 16#2252
+/approximatelyequal 16#2245
+/araeaekorean 16#318e
+/araeakorean 16#318d
+/arc 16#2312
+/arighthalfring 16#1e9a
+/aring 16#00e5
+/aringacute 16#01fb
+/aringbelow 16#1e01
+/arrowboth 16#2194
+/arrowdashdown 16#21e3
+/arrowdashleft 16#21e0
+/arrowdashright 16#21e2
+/arrowdashup 16#21e1
+/arrowdblboth 16#21d4
+/arrowdbldown 16#21d3
+/arrowdblleft 16#21d0
+/arrowdblright 16#21d2
+/arrowdblup 16#21d1
+/arrowdown 16#2193
+/arrowdownleft 16#2199
+/arrowdownright 16#2198
+/arrowdownwhite 16#21e9
+/arrowheaddownmod 16#02c5
+/arrowheadleftmod 16#02c2
+/arrowheadrightmod 16#02c3
+/arrowheadupmod 16#02c4
+/arrowhorizex 16#f8e7
+/arrowleft 16#2190
+/arrowleftdbl 16#21d0
+/arrowleftdblstroke 16#21cd
+/arrowleftoverright 16#21c6
+/arrowleftwhite 16#21e6
+/arrowright 16#2192
+/arrowrightdblstroke 16#21cf
+/arrowrightheavy 16#279e
+/arrowrightoverleft 16#21c4
+/arrowrightwhite 16#21e8
+/arrowtableft 16#21e4
+/arrowtabright 16#21e5
+/arrowup 16#2191
+/arrowupdn 16#2195
+/arrowupdnbse 16#21a8
+/arrowupdownbase 16#21a8
+/arrowupleft 16#2196
+/arrowupleftofdown 16#21c5
+/arrowupright 16#2197
+/arrowupwhite 16#21e7
+/arrowvertex 16#f8e6
+/asciicircum 16#005e
+/asciicircummonospace 16#ff3e
+/asciitilde 16#007e
+/asciitildemonospace 16#ff5e
+/ascript 16#0251
+/ascriptturned 16#0252
+/asmallhiragana 16#3041
+/asmallkatakana 16#30a1
+/asmallkatakanahalfwidth 16#ff67
+/asterisk 16#002a
+/asteriskaltonearabic 16#066d
+/asteriskarabic 16#066d
+/asteriskmath 16#2217
+/asteriskmonospace 16#ff0a
+/asterisksmall 16#fe61
+/asterism 16#2042
+/asuperior 16#f6e9
+/asymptoticallyequal 16#2243
+/at 16#0040
+/atilde 16#00e3
+/atmonospace 16#ff20
+/atsmall 16#fe6b
+/aturned 16#0250
+/aubengali 16#0994
+/aubopomofo 16#3120
+/audeva 16#0914
+/augujarati 16#0a94
+/augurmukhi 16#0a14
+/aulengthmarkbengali 16#09d7
+/aumatragurmukhi 16#0a4c
+/auvowelsignbengali 16#09cc
+/auvowelsigndeva 16#094c
+/auvowelsigngujarati 16#0acc
+/avagrahadeva 16#093d
+/aybarmenian 16#0561
+/ayin 16#05e2
+/ayinaltonehebrew 16#fb20
+/ayinhebrew 16#05e2
+/b 16#0062
+/babengali 16#09ac
+/backslash 16#005c
+/backslashmonospace 16#ff3c
+/badeva 16#092c
+/bagujarati 16#0aac
+/bagurmukhi 16#0a2c
+/bahiragana 16#3070
+/bahtthai 16#0e3f
+/bakatakana 16#30d0
+/bar 16#007c
+/barmonospace 16#ff5c
+/bbopomofo 16#3105
+/bcircle 16#24d1
+/bdotaccent 16#1e03
+/bdotbelow 16#1e05
+/beamedsixteenthnotes 16#266c
+/because 16#2235
+/becyrillic 16#0431
+/beharabic 16#0628
+/behfinalarabic 16#fe90
+/behinitialarabic 16#fe91
+/behiragana 16#3079
+/behmedialarabic 16#fe92
+/behmeeminitialarabic 16#fc9f
+/behmeemisolatedarabic 16#fc08
+/behnoonfinalarabic 16#fc6d
+/bekatakana 16#30d9
+/benarmenian 16#0562
+/bet 16#05d1
+/beta 16#03b2
+/betasymbolgreek 16#03d0
+/betdagesh 16#fb31
+/betdageshhebrew 16#fb31
+/bethebrew 16#05d1
+/betrafehebrew 16#fb4c
+/bhabengali 16#09ad
+/bhadeva 16#092d
+/bhagujarati 16#0aad
+/bhagurmukhi 16#0a2d
+/bhook 16#0253
+/bihiragana 16#3073
+/bikatakana 16#30d3
+/bilabialclick 16#0298
+/bindigurmukhi 16#0a02
+/birusquare 16#3331
+/blackcircle 16#25cf
+/blackdiamond 16#25c6
+/blackdownpointingtriangle 16#25bc
+/blackleftpointingpointer 16#25c4
+/blackleftpointingtriangle 16#25c0
+/blacklenticularbracketleft 16#3010
+/blacklenticularbracketleftvertical 16#fe3b
+/blacklenticularbracketright 16#3011
+/blacklenticularbracketrightvertical 16#fe3c
+/blacklowerlefttriangle 16#25e3
+/blacklowerrighttriangle 16#25e2
+/blackrectangle 16#25ac
+/blackrightpointingpointer 16#25ba
+/blackrightpointingtriangle 16#25b6
+/blacksmallsquare 16#25aa
+/blacksmilingface 16#263b
+/blacksquare 16#25a0
+/blackstar 16#2605
+/blackupperlefttriangle 16#25e4
+/blackupperrighttriangle 16#25e5
+/blackuppointingsmalltriangle 16#25b4
+/blackuppointingtriangle 16#25b2
+/blank 16#2423
+/blinebelow 16#1e07
+/block 16#2588
+/bmonospace 16#ff42
+/bobaimaithai 16#0e1a
+/bohiragana 16#307c
+/bokatakana 16#30dc
+/bparen 16#249d
+/bqsquare 16#33c3
+/braceex 16#f8f4
+/braceleft 16#007b
+/braceleftbt 16#f8f3
+/braceleftmid 16#f8f2
+/braceleftmonospace 16#ff5b
+/braceleftsmall 16#fe5b
+/bracelefttp 16#f8f1
+/braceleftvertical 16#fe37
+/braceright 16#007d
+/bracerightbt 16#f8fe
+/bracerightmid 16#f8fd
+/bracerightmonospace 16#ff5d
+/bracerightsmall 16#fe5c
+/bracerighttp 16#f8fc
+/bracerightvertical 16#fe38
+/bracketleft 16#005b
+/bracketleftbt 16#f8f0
+/bracketleftex 16#f8ef
+/bracketleftmonospace 16#ff3b
+/bracketlefttp 16#f8ee
+/bracketright 16#005d
+/bracketrightbt 16#f8fb
+/bracketrightex 16#f8fa
+/bracketrightmonospace 16#ff3d
+/bracketrighttp 16#f8f9
+/breve 16#02d8
+/brevebelowcmb 16#032e
+/brevecmb 16#0306
+/breveinvertedbelowcmb 16#032f
+/breveinvertedcmb 16#0311
+/breveinverteddoublecmb 16#0361
+/bridgebelowcmb 16#032a
+/bridgeinvertedbelowcmb 16#033a
+/brokenbar 16#00a6
+/bstroke 16#0180
+/bsuperior 16#f6ea
+/btopbar 16#0183
+/buhiragana 16#3076
+/bukatakana 16#30d6
+/bullet 16#2022
+/bulletinverse 16#25d8
+/bulletoperator 16#2219
+/bullseye 16#25ce
+/c 16#0063
+/caarmenian 16#056e
+/cabengali 16#099a
+/cacute 16#0107
+/cadeva 16#091a
+/cagujarati 16#0a9a
+/cagurmukhi 16#0a1a
+/calsquare 16#3388
+/candrabindubengali 16#0981
+/candrabinducmb 16#0310
+/candrabindudeva 16#0901
+/candrabindugujarati 16#0a81
+/capslock 16#21ea
+/careof 16#2105
+/caron 16#02c7
+/caronbelowcmb 16#032c
+/caroncmb 16#030c
+/carriagereturn 16#21b5
+/cbopomofo 16#3118
+/ccaron 16#010d
+/ccedilla 16#00e7
+/ccedillaacute 16#1e09
+/ccircle 16#24d2
+/ccircumflex 16#0109
+/ccurl 16#0255
+/cdot 16#010b
+/cdotaccent 16#010b
+/cdsquare 16#33c5
+/cedilla 16#00b8
+/cedillacmb 16#0327
+/cent 16#00a2
+/centigrade 16#2103
+/centinferior 16#f6df
+/centmonospace 16#ffe0
+/centoldstyle 16#f7a2
+/centsuperior 16#f6e0
+/chaarmenian 16#0579
+/chabengali 16#099b
+/chadeva 16#091b
+/chagujarati 16#0a9b
+/chagurmukhi 16#0a1b
+/chbopomofo 16#3114
+/cheabkhasiancyrillic 16#04bd
+/checkmark 16#2713
+/checyrillic 16#0447
+/chedescenderabkhasiancyrillic 16#04bf
+/chedescendercyrillic 16#04b7
+/chedieresiscyrillic 16#04f5
+/cheharmenian 16#0573
+/chekhakassiancyrillic 16#04cc
+/cheverticalstrokecyrillic 16#04b9
+/chi 16#03c7
+/chieuchacirclekorean 16#3277
+/chieuchaparenkorean 16#3217
+/chieuchcirclekorean 16#3269
+/chieuchkorean 16#314a
+/chieuchparenkorean 16#3209
+/chochangthai 16#0e0a
+/chochanthai 16#0e08
+/chochingthai 16#0e09
+/chochoethai 16#0e0c
+/chook 16#0188
+/cieucacirclekorean 16#3276
+/cieucaparenkorean 16#3216
+/cieuccirclekorean 16#3268
+/cieuckorean 16#3148
+/cieucparenkorean 16#3208
+/cieucuparenkorean 16#321c
+/circle 16#25cb
+/circlemultiply 16#2297
+/circleot 16#2299
+/circleplus 16#2295
+/circlepostalmark 16#3036
+/circlewithlefthalfblack 16#25d0
+/circlewithrighthalfblack 16#25d1
+/circumflex 16#02c6
+/circumflexbelowcmb 16#032d
+/circumflexcmb 16#0302
+/clear 16#2327
+/clickalveolar 16#01c2
+/clickdental 16#01c0
+/clicklateral 16#01c1
+/clickretroflex 16#01c3
+/club 16#2663
+/clubsuitblack 16#2663
+/clubsuitwhite 16#2667
+/cmcubedsquare 16#33a4
+/cmonospace 16#ff43
+/cmsquaredsquare 16#33a0
+/coarmenian 16#0581
+/colon 16#003a
+/colonmonetary 16#20a1
+/colonmonospace 16#ff1a
+/colonsign 16#20a1
+/colonsmall 16#fe55
+/colontriangularhalfmod 16#02d1
+/colontriangularmod 16#02d0
+/comma 16#002c
+/commaabovecmb 16#0313
+/commaaboverightcmb 16#0315
+/commaaccent 16#f6c3
+/commaarabic 16#060c
+/commaarmenian 16#055d
+/commainferior 16#f6e1
+/commamonospace 16#ff0c
+/commareversedabovecmb 16#0314
+/commareversedmod 16#02bd
+/commasmall 16#fe50
+/commasuperior 16#f6e2
+/commaturnedabovecmb 16#0312
+/commaturnedmod 16#02bb
+/compass 16#263c
+/congruent 16#2245
+/contourintegral 16#222e
+/control 16#2303
+/controlACK 16#0006
+/controlBEL 16#0007
+/controlBS 16#0008
+/controlCAN 16#0018
+/controlCR 16#000d
+/controlDC1 16#0011
+/controlDC2 16#0012
+/controlDC3 16#0013
+/controlDC4 16#0014
+/controlDEL 16#007f
+/controlDLE 16#0010
+/controlEM 16#0019
+/controlENQ 16#0005
+/controlEOT 16#0004
+/controlESC 16#001b
+/controlETB 16#0017
+/controlETX 16#0003
+/controlFF 16#000c
+/controlFS 16#001c
+/controlGS 16#001d
+/controlHT 16#0009
+/controlLF 16#000a
+/controlNAK 16#0015
+/controlRS 16#001e
+/controlSI 16#000f
+/controlSO 16#000e
+/controlSOT 16#0002
+/controlSTX 16#0001
+/controlSUB 16#001a
+/controlSYN 16#0016
+/controlUS 16#001f
+/controlVT 16#000b
+/copyright 16#00a9
+/copyrightsans 16#f8e9
+/copyrightserif 16#f6d9
+/cornerbracketleft 16#300c
+/cornerbracketlefthalfwidth 16#ff62
+/cornerbracketleftvertical 16#fe41
+/cornerbracketright 16#300d
+/cornerbracketrighthalfwidth 16#ff63
+/cornerbracketrightvertical 16#fe42
+/corporationsquare 16#337f
+/cosquare 16#33c7
+/coverkgsquare 16#33c6
+/cparen 16#249e
+/cruzeiro 16#20a2
+/cstretched 16#0297
+/curlyand 16#22cf
+/curlyor 16#22ce
+/currency 16#00a4
+/cyrBreve 16#f6d1
+/cyrFlex 16#f6d2
+/cyrbreve 16#f6d4
+/cyrflex 16#f6d5
+/d 16#0064
+/daarmenian 16#0564
+/dabengali 16#09a6
+/dadarabic 16#0636
+/dadeva 16#0926
+/dadfinalarabic 16#febe
+/dadinitialarabic 16#febf
+/dadmedialarabic 16#fec0
+/dagesh 16#05bc
+/dageshhebrew 16#05bc
+/dagger 16#2020
+/daggerdbl 16#2021
+/dagujarati 16#0aa6
+/dagurmukhi 16#0a26
+/dahiragana 16#3060
+/dakatakana 16#30c0
+/dalarabic 16#062f
+/dalet 16#05d3
+/daletdagesh 16#fb33
+/daletdageshhebrew 16#fb33
+/dalethebrew 16#05d3
+/dalfinalarabic 16#feaa
+/dammaarabic 16#064f
+/dammalowarabic 16#064f
+/dammatanaltonearabic 16#064c
+/dammatanarabic 16#064c
+/danda 16#0964
+/dargahebrew 16#05a7
+/dargalefthebrew 16#05a7
+/dasiapneumatacyrilliccmb 16#0485
+/dblGrave 16#f6d3
+/dblanglebracketleft 16#300a
+/dblanglebracketleftvertical 16#fe3d
+/dblanglebracketright 16#300b
+/dblanglebracketrightvertical 16#fe3e
+/dblarchinvertedbelowcmb 16#032b
+/dblarrowleft 16#21d4
+/dblarrowright 16#21d2
+/dbldanda 16#0965
+/dblgrave 16#f6d6
+/dblgravecmb 16#030f
+/dblintegral 16#222c
+/dbllowline 16#2017
+/dbllowlinecmb 16#0333
+/dbloverlinecmb 16#033f
+/dblprimemod 16#02ba
+/dblverticalbar 16#2016
+/dblverticallineabovecmb 16#030e
+/dbopomofo 16#3109
+/dbsquare 16#33c8
+/dcaron 16#010f
+/dcedilla 16#1e11
+/dcircle 16#24d3
+/dcircumflexbelow 16#1e13
+/dcroat 16#0111
+/ddabengali 16#09a1
+/ddadeva 16#0921
+/ddagujarati 16#0aa1
+/ddagurmukhi 16#0a21
+/ddalarabic 16#0688
+/ddalfinalarabic 16#fb89
+/dddhadeva 16#095c
+/ddhabengali 16#09a2
+/ddhadeva 16#0922
+/ddhagujarati 16#0aa2
+/ddhagurmukhi 16#0a22
+/ddotaccent 16#1e0b
+/ddotbelow 16#1e0d
+/decimalseparatorarabic 16#066b
+/decimalseparatorpersian 16#066b
+/decyrillic 16#0434
+/degree 16#00b0
+/dehihebrew 16#05ad
+/dehiragana 16#3067
+/deicoptic 16#03ef
+/dekatakana 16#30c7
+/deleteleft 16#232b
+/deleteright 16#2326
+/delta 16#03b4
+/deltaturned 16#018d
+/denominatorminusonenumeratorbengali 16#09f8
+/dezh 16#02a4
+/dhabengali 16#09a7
+/dhadeva 16#0927
+/dhagujarati 16#0aa7
+/dhagurmukhi 16#0a27
+/dhook 16#0257
+/dialytikatonos 16#0385
+/dialytikatonoscmb 16#0344
+/diamond 16#2666
+/diamondsuitwhite 16#2662
+/dieresis 16#00a8
+/dieresisacute 16#f6d7
+/dieresisbelowcmb 16#0324
+/dieresiscmb 16#0308
+/dieresisgrave 16#f6d8
+/dieresistonos 16#0385
+/dihiragana 16#3062
+/dikatakana 16#30c2
+/dittomark 16#3003
+/divide 16#00f7
+/divides 16#2223
+/divisionslash 16#2215
+/djecyrillic 16#0452
+/dkshade 16#2593
+/dlinebelow 16#1e0f
+/dlsquare 16#3397
+/dmacron 16#0111
+/dmonospace 16#ff44
+/dnblock 16#2584
+/dochadathai 16#0e0e
+/dodekthai 16#0e14
+/dohiragana 16#3069
+/dokatakana 16#30c9
+/dollar 16#0024
+/dollarinferior 16#f6e3
+/dollarmonospace 16#ff04
+/dollaroldstyle 16#f724
+/dollarsmall 16#fe69
+/dollarsuperior 16#f6e4
+/dong 16#20ab
+/dorusquare 16#3326
+/dotaccent 16#02d9
+/dotaccentcmb 16#0307
+/dotbelowcmb 16#0323
+/dotbelowcomb 16#0323
+/dotkatakana 16#30fb
+/dotlessi 16#0131
+/dotlessj 16#f6be
+/dotlessjstrokehook 16#0284
+/dotmath 16#22c5
+/dottedcircle 16#25cc
+/doubleyodpatah 16#fb1f
+/doubleyodpatahhebrew 16#fb1f
+/downtackbelowcmb 16#031e
+/downtackmod 16#02d5
+/dparen 16#249f
+/dsuperior 16#f6eb
+/dtail 16#0256
+/dtopbar 16#018c
+/duhiragana 16#3065
+/dukatakana 16#30c5
+/dz 16#01f3
+/dzaltone 16#02a3
+/dzcaron 16#01c6
+/dzcurl 16#02a5
+/dzeabkhasiancyrillic 16#04e1
+/dzecyrillic 16#0455
+/dzhecyrillic 16#045f
+/e 16#0065
+/eacute 16#00e9
+/earth 16#2641
+/ebengali 16#098f
+/ebopomofo 16#311c
+/ebreve 16#0115
+/ecandradeva 16#090d
+/ecandragujarati 16#0a8d
+/ecandravowelsigndeva 16#0945
+/ecandravowelsigngujarati 16#0ac5
+/ecaron 16#011b
+/ecedillabreve 16#1e1d
+/echarmenian 16#0565
+/echyiwnarmenian 16#0587
+/ecircle 16#24d4
+/ecircumflex 16#00ea
+/ecircumflexacute 16#1ebf
+/ecircumflexbelow 16#1e19
+/ecircumflexdotbelow 16#1ec7
+/ecircumflexgrave 16#1ec1
+/ecircumflexhookabove 16#1ec3
+/ecircumflextilde 16#1ec5
+/ecyrillic 16#0454
+/edblgrave 16#0205
+/edeva 16#090f
+/edieresis 16#00eb
+/edot 16#0117
+/edotaccent 16#0117
+/edotbelow 16#1eb9
+/eegurmukhi 16#0a0f
+/eematragurmukhi 16#0a47
+/efcyrillic 16#0444
+/egrave 16#00e8
+/egujarati 16#0a8f
+/eharmenian 16#0567
+/ehbopomofo 16#311d
+/ehiragana 16#3048
+/ehookabove 16#1ebb
+/eibopomofo 16#311f
+/eight 16#0038
+/eightarabic 16#0668
+/eightbengali 16#09ee
+/eightcircle 16#2467
+/eightcircleinversesansserif 16#2791
+/eightdeva 16#096e
+/eighteencircle 16#2471
+/eighteenparen 16#2485
+/eighteenperiod 16#2499
+/eightgujarati 16#0aee
+/eightgurmukhi 16#0a6e
+/eighthackarabic 16#0668
+/eighthangzhou 16#3028
+/eighthnotebeamed 16#266b
+/eightideographicparen 16#3227
+/eightinferior 16#2088
+/eightmonospace 16#ff18
+/eightoldstyle 16#f738
+/eightparen 16#247b
+/eightperiod 16#248f
+/eightpersian 16#06f8
+/eightroman 16#2177
+/eightsuperior 16#2078
+/eightthai 16#0e58
+/einvertedbreve 16#0207
+/eiotifiedcyrillic 16#0465
+/ekatakana 16#30a8
+/ekatakanahalfwidth 16#ff74
+/ekonkargurmukhi 16#0a74
+/ekorean 16#3154
+/elcyrillic 16#043b
+/element 16#2208
+/elevencircle 16#246a
+/elevenparen 16#247e
+/elevenperiod 16#2492
+/elevenroman 16#217a
+/ellipsis 16#2026
+/ellipsisvertical 16#22ee
+/emacron 16#0113
+/emacronacute 16#1e17
+/emacrongrave 16#1e15
+/emcyrillic 16#043c
+/emdash 16#2014
+/emdashvertical 16#fe31
+/emonospace 16#ff45
+/emphasismarkarmenian 16#055b
+/emptyset 16#2205
+/enbopomofo 16#3123
+/encyrillic 16#043d
+/endash 16#2013
+/endashvertical 16#fe32
+/endescendercyrillic 16#04a3
+/eng 16#014b
+/engbopomofo 16#3125
+/enghecyrillic 16#04a5
+/enhookcyrillic 16#04c8
+/enspace 16#2002
+/eogonek 16#0119
+/eokorean 16#3153
+/eopen 16#025b
+/eopenclosed 16#029a
+/eopenreversed 16#025c
+/eopenreversedclosed 16#025e
+/eopenreversedhook 16#025d
+/eparen 16#24a0
+/epsilon 16#03b5
+/epsilontonos 16#03ad
+/equal 16#003d
+/equalmonospace 16#ff1d
+/equalsmall 16#fe66
+/equalsuperior 16#207c
+/equivalence 16#2261
+/erbopomofo 16#3126
+/ercyrillic 16#0440
+/ereversed 16#0258
+/ereversedcyrillic 16#044d
+/escyrillic 16#0441
+/esdescendercyrillic 16#04ab
+/esh 16#0283
+/eshcurl 16#0286
+/eshortdeva 16#090e
+/eshortvowelsigndeva 16#0946
+/eshreversedloop 16#01aa
+/eshsquatreversed 16#0285
+/esmallhiragana 16#3047
+/esmallkatakana 16#30a7
+/esmallkatakanahalfwidth 16#ff6a
+/estimated 16#212e
+/esuperior 16#f6ec
+/eta 16#03b7
+/etarmenian 16#0568
+/etatonos 16#03ae
+/eth 16#00f0
+/etilde 16#1ebd
+/etildebelow 16#1e1b
+/etnahtafoukhhebrew 16#0591
+/etnahtafoukhlefthebrew 16#0591
+/etnahtahebrew 16#0591
+/etnahtalefthebrew 16#0591
+/eturned 16#01dd
+/eukorean 16#3161
+/euro 16#20ac
+/evowelsignbengali 16#09c7
+/evowelsigndeva 16#0947
+/evowelsigngujarati 16#0ac7
+/exclam 16#0021
+/exclamarmenian 16#055c
+/exclamdbl 16#203c
+/exclamdown 16#00a1
+/exclamdownsmall 16#f7a1
+/exclammonospace 16#ff01
+/exclamsmall 16#f721
+/existential 16#2203
+/ezh 16#0292
+/ezhcaron 16#01ef
+/ezhcurl 16#0293
+/ezhreversed 16#01b9
+/ezhtail 16#01ba
+/f 16#0066
+/fadeva 16#095e
+/fagurmukhi 16#0a5e
+/fahrenheit 16#2109
+/fathaarabic 16#064e
+/fathalowarabic 16#064e
+/fathatanarabic 16#064b
+/fbopomofo 16#3108
+/fcircle 16#24d5
+/fdotaccent 16#1e1f
+/feharabic 16#0641
+/feharmenian 16#0586
+/fehfinalarabic 16#fed2
+/fehinitialarabic 16#fed3
+/fehmedialarabic 16#fed4
+/feicoptic 16#03e5
+/female 16#2640
+/ff 16#fb00
+/ffi 16#fb03
+/ffl 16#fb04
+/fi 16#fb01
+/fifteencircle 16#246e
+/fifteenparen 16#2482
+/fifteenperiod 16#2496
+/figuredash 16#2012
+/filledbox 16#25a0
+/filledrect 16#25ac
+/finalkaf 16#05da
+/finalkafdagesh 16#fb3a
+/finalkafdageshhebrew 16#fb3a
+/finalkafhebrew 16#05da
+/finalmem 16#05dd
+/finalmemhebrew 16#05dd
+/finalnun 16#05df
+/finalnunhebrew 16#05df
+/finalpe 16#05e3
+/finalpehebrew 16#05e3
+/finaltsadi 16#05e5
+/finaltsadihebrew 16#05e5
+/firsttonechinese 16#02c9
+/fisheye 16#25c9
+/fitacyrillic 16#0473
+/five 16#0035
+/fivearabic 16#0665
+/fivebengali 16#09eb
+/fivecircle 16#2464
+/fivecircleinversesansserif 16#278e
+/fivedeva 16#096b
+/fiveeighths 16#215d
+/fivegujarati 16#0aeb
+/fivegurmukhi 16#0a6b
+/fivehackarabic 16#0665
+/fivehangzhou 16#3025
+/fiveideographicparen 16#3224
+/fiveinferior 16#2085
+/fivemonospace 16#ff15
+/fiveoldstyle 16#f735
+/fiveparen 16#2478
+/fiveperiod 16#248c
+/fivepersian 16#06f5
+/fiveroman 16#2174
+/fivesuperior 16#2075
+/fivethai 16#0e55
+/fl 16#fb02
+/florin 16#0192
+/fmonospace 16#ff46
+/fmsquare 16#3399
+/fofanthai 16#0e1f
+/fofathai 16#0e1d
+/fongmanthai 16#0e4f
+/forall 16#2200
+/four 16#0034
+/fourarabic 16#0664
+/fourbengali 16#09ea
+/fourcircle 16#2463
+/fourcircleinversesansserif 16#278d
+/fourdeva 16#096a
+/fourgujarati 16#0aea
+/fourgurmukhi 16#0a6a
+/fourhackarabic 16#0664
+/fourhangzhou 16#3024
+/fourideographicparen 16#3223
+/fourinferior 16#2084
+/fourmonospace 16#ff14
+/fournumeratorbengali 16#09f7
+/fouroldstyle 16#f734
+/fourparen 16#2477
+/fourperiod 16#248b
+/fourpersian 16#06f4
+/fourroman 16#2173
+/foursuperior 16#2074
+/fourteencircle 16#246d
+/fourteenparen 16#2481
+/fourteenperiod 16#2495
+/fourthai 16#0e54
+/fourthtonechinese 16#02cb
+/fparen 16#24a1
+/fraction 16#2044
+/franc 16#20a3
+/g 16#0067
+/gabengali 16#0997
+/gacute 16#01f5
+/gadeva 16#0917
+/gafarabic 16#06af
+/gaffinalarabic 16#fb93
+/gafinitialarabic 16#fb94
+/gafmedialarabic 16#fb95
+/gagujarati 16#0a97
+/gagurmukhi 16#0a17
+/gahiragana 16#304c
+/gakatakana 16#30ac
+/gamma 16#03b3
+/gammalatinsmall 16#0263
+/gammasuperior 16#02e0
+/gangiacoptic 16#03eb
+/gbopomofo 16#310d
+/gbreve 16#011f
+/gcaron 16#01e7
+/gcedilla 16#0123
+/gcircle 16#24d6
+/gcircumflex 16#011d
+/gcommaaccent 16#0123
+/gdot 16#0121
+/gdotaccent 16#0121
+/gecyrillic 16#0433
+/gehiragana 16#3052
+/gekatakana 16#30b2
+/geometricallyequal 16#2251
+/gereshaccenthebrew 16#059c
+/gereshhebrew 16#05f3
+/gereshmuqdamhebrew 16#059d
+/germandbls 16#00df
+/gershayimaccenthebrew 16#059e
+/gershayimhebrew 16#05f4
+/getamark 16#3013
+/ghabengali 16#0998
+/ghadarmenian 16#0572
+/ghadeva 16#0918
+/ghagujarati 16#0a98
+/ghagurmukhi 16#0a18
+/ghainarabic 16#063a
+/ghainfinalarabic 16#fece
+/ghaininitialarabic 16#fecf
+/ghainmedialarabic 16#fed0
+/ghemiddlehookcyrillic 16#0495
+/ghestrokecyrillic 16#0493
+/gheupturncyrillic 16#0491
+/ghhadeva 16#095a
+/ghhagurmukhi 16#0a5a
+/ghook 16#0260
+/ghzsquare 16#3393
+/gihiragana 16#304e
+/gikatakana 16#30ae
+/gimarmenian 16#0563
+/gimel 16#05d2
+/gimeldagesh 16#fb32
+/gimeldageshhebrew 16#fb32
+/gimelhebrew 16#05d2
+/gjecyrillic 16#0453
+/glottalinvertedstroke 16#01be
+/glottalstop 16#0294
+/glottalstopinverted 16#0296
+/glottalstopmod 16#02c0
+/glottalstopreversed 16#0295
+/glottalstopreversedmod 16#02c1
+/glottalstopreversedsuperior 16#02e4
+/glottalstopstroke 16#02a1
+/glottalstopstrokereversed 16#02a2
+/gmacron 16#1e21
+/gmonospace 16#ff47
+/gohiragana 16#3054
+/gokatakana 16#30b4
+/gparen 16#24a2
+/gpasquare 16#33ac
+/gradient 16#2207
+/grave 16#0060
+/gravebelowcmb 16#0316
+/gravecmb 16#0300
+/gravecomb 16#0300
+/gravedeva 16#0953
+/gravelowmod 16#02ce
+/gravemonospace 16#ff40
+/gravetonecmb 16#0340
+/greater 16#003e
+/greaterequal 16#2265
+/greaterequalorless 16#22db
+/greatermonospace 16#ff1e
+/greaterorequivalent 16#2273
+/greaterorless 16#2277
+/greateroverequal 16#2267
+/greatersmall 16#fe65
+/gscript 16#0261
+/gstroke 16#01e5
+/guhiragana 16#3050
+/guillemotleft 16#00ab
+/guillemotright 16#00bb
+/guilsinglleft 16#2039
+/guilsinglright 16#203a
+/gukatakana 16#30b0
+/guramusquare 16#3318
+/gysquare 16#33c9
+/h 16#0068
+/haabkhasiancyrillic 16#04a9
+/haaltonearabic 16#06c1
+/habengali 16#09b9
+/hadescendercyrillic 16#04b3
+/hadeva 16#0939
+/hagujarati 16#0ab9
+/hagurmukhi 16#0a39
+/haharabic 16#062d
+/hahfinalarabic 16#fea2
+/hahinitialarabic 16#fea3
+/hahiragana 16#306f
+/hahmedialarabic 16#fea4
+/haitusquare 16#332a
+/hakatakana 16#30cf
+/hakatakanahalfwidth 16#ff8a
+/halantgurmukhi 16#0a4d
+/hamzaarabic 16#0621
+/hamzalowarabic 16#0621
+/hangulfiller 16#3164
+/hardsigncyrillic 16#044a
+/harpoonleftbarbup 16#21bc
+/harpoonrightbarbup 16#21c0
+/hasquare 16#33ca
+/hatafpatah 16#05b2
+/hatafpatah16 16#05b2
+/hatafpatah23 16#05b2
+/hatafpatah2f 16#05b2
+/hatafpatahhebrew 16#05b2
+/hatafpatahnarrowhebrew 16#05b2
+/hatafpatahquarterhebrew 16#05b2
+/hatafpatahwidehebrew 16#05b2
+/hatafqamats 16#05b3
+/hatafqamats1b 16#05b3
+/hatafqamats28 16#05b3
+/hatafqamats34 16#05b3
+/hatafqamatshebrew 16#05b3
+/hatafqamatsnarrowhebrew 16#05b3
+/hatafqamatsquarterhebrew 16#05b3
+/hatafqamatswidehebrew 16#05b3
+/hatafsegol 16#05b1
+/hatafsegol17 16#05b1
+/hatafsegol24 16#05b1
+/hatafsegol30 16#05b1
+/hatafsegolhebrew 16#05b1
+/hatafsegolnarrowhebrew 16#05b1
+/hatafsegolquarterhebrew 16#05b1
+/hatafsegolwidehebrew 16#05b1
+/hbar 16#0127
+/hbopomofo 16#310f
+/hbrevebelow 16#1e2b
+/hcedilla 16#1e29
+/hcircle 16#24d7
+/hcircumflex 16#0125
+/hdieresis 16#1e27
+/hdotaccent 16#1e23
+/hdotbelow 16#1e25
+/he 16#05d4
+/heart 16#2665
+/heartsuitblack 16#2665
+/heartsuitwhite 16#2661
+/hedagesh 16#fb34
+/hedageshhebrew 16#fb34
+/hehaltonearabic 16#06c1
+/heharabic 16#0647
+/hehebrew 16#05d4
+/hehfinalaltonearabic 16#fba7
+/hehfinalalttwoarabic 16#feea
+/hehfinalarabic 16#feea
+/hehhamzaabovefinalarabic 16#fba5
+/hehhamzaaboveisolatedarabic 16#fba4
+/hehinitialaltonearabic 16#fba8
+/hehinitialarabic 16#feeb
+/hehiragana 16#3078
+/hehmedialaltonearabic 16#fba9
+/hehmedialarabic 16#feec
+/heiseierasquare 16#337b
+/hekatakana 16#30d8
+/hekatakanahalfwidth 16#ff8d
+/hekutaarusquare 16#3336
+/henghook 16#0267
+/herutusquare 16#3339
+/het 16#05d7
+/hethebrew 16#05d7
+/hhook 16#0266
+/hhooksuperior 16#02b1
+/hieuhacirclekorean 16#327b
+/hieuhaparenkorean 16#321b
+/hieuhcirclekorean 16#326d
+/hieuhkorean 16#314e
+/hieuhparenkorean 16#320d
+/hihiragana 16#3072
+/hikatakana 16#30d2
+/hikatakanahalfwidth 16#ff8b
+/hiriq 16#05b4
+/hiriq14 16#05b4
+/hiriq21 16#05b4
+/hiriq2d 16#05b4
+/hiriqhebrew 16#05b4
+/hiriqnarrowhebrew 16#05b4
+/hiriqquarterhebrew 16#05b4
+/hiriqwidehebrew 16#05b4
+/hlinebelow 16#1e96
+/hmonospace 16#ff48
+/hoarmenian 16#0570
+/hohipthai 16#0e2b
+/hohiragana 16#307b
+/hokatakana 16#30db
+/hokatakanahalfwidth 16#ff8e
+/holam 16#05b9
+/holam19 16#05b9
+/holam26 16#05b9
+/holam32 16#05b9
+/holamhebrew 16#05b9
+/holamnarrowhebrew 16#05b9
+/holamquarterhebrew 16#05b9
+/holamwidehebrew 16#05b9
+/honokhukthai 16#0e2e
+/hookabovecomb 16#0309
+/hookcmb 16#0309
+/hookpalatalizedbelowcmb 16#0321
+/hookretroflexbelowcmb 16#0322
+/hoonsquare 16#3342
+/horicoptic 16#03e9
+/horizontalbar 16#2015
+/horncmb 16#031b
+/hotsprings 16#2668
+/house 16#2302
+/hparen 16#24a3
+/hsuperior 16#02b0
+/hturned 16#0265
+/huhiragana 16#3075
+/huiitosquare 16#3333
+/hukatakana 16#30d5
+/hukatakanahalfwidth 16#ff8c
+/hungarumlaut 16#02dd
+/hungarumlautcmb 16#030b
+/hv 16#0195
+/hyphen 16#002d
+/hypheninferior 16#f6e5
+/hyphenmonospace 16#ff0d
+/hyphensmall 16#fe63
+/hyphensuperior 16#f6e6
+/hyphentwo 16#2010
+/i 16#0069
+/iacute 16#00ed
+/iacyrillic 16#044f
+/ibengali 16#0987
+/ibopomofo 16#3127
+/ibreve 16#012d
+/icaron 16#01d0
+/icircle 16#24d8
+/icircumflex 16#00ee
+/icyrillic 16#0456
+/idblgrave 16#0209
+/ideographearthcircle 16#328f
+/ideographfirecircle 16#328b
+/ideographicallianceparen 16#323f
+/ideographiccallparen 16#323a
+/ideographiccentrecircle 16#32a5
+/ideographicclose 16#3006
+/ideographiccomma 16#3001
+/ideographiccommaleft 16#ff64
+/ideographiccongratulationparen 16#3237
+/ideographiccorrectcircle 16#32a3
+/ideographicearthparen 16#322f
+/ideographicenterpriseparen 16#323d
+/ideographicexcellentcircle 16#329d
+/ideographicfestivalparen 16#3240
+/ideographicfinancialcircle 16#3296
+/ideographicfinancialparen 16#3236
+/ideographicfireparen 16#322b
+/ideographichaveparen 16#3232
+/ideographichighcircle 16#32a4
+/ideographiciterationmark 16#3005
+/ideographiclaborcircle 16#3298
+/ideographiclaborparen 16#3238
+/ideographicleftcircle 16#32a7
+/ideographiclowcircle 16#32a6
+/ideographicmedicinecircle 16#32a9
+/ideographicmetalparen 16#322e
+/ideographicmoonparen 16#322a
+/ideographicnameparen 16#3234
+/ideographicperiod 16#3002
+/ideographicprintcircle 16#329e
+/ideographicreachparen 16#3243
+/ideographicrepresentparen 16#3239
+/ideographicresourceparen 16#323e
+/ideographicrightcircle 16#32a8
+/ideographicsecretcircle 16#3299
+/ideographicselfparen 16#3242
+/ideographicsocietyparen 16#3233
+/ideographicspace 16#3000
+/ideographicspecialparen 16#3235
+/ideographicstockparen 16#3231
+/ideographicstudyparen 16#323b
+/ideographicsunparen 16#3230
+/ideographicsuperviseparen 16#323c
+/ideographicwaterparen 16#322c
+/ideographicwoodparen 16#322d
+/ideographiczero 16#3007
+/ideographmetalcircle 16#328e
+/ideographmooncircle 16#328a
+/ideographnamecircle 16#3294
+/ideographsuncircle 16#3290
+/ideographwatercircle 16#328c
+/ideographwoodcircle 16#328d
+/ideva 16#0907
+/idieresis 16#00ef
+/idieresisacute 16#1e2f
+/idieresiscyrillic 16#04e5
+/idotbelow 16#1ecb
+/iebrevecyrillic 16#04d7
+/iecyrillic 16#0435
+/ieungacirclekorean 16#3275
+/ieungaparenkorean 16#3215
+/ieungcirclekorean 16#3267
+/ieungkorean 16#3147
+/ieungparenkorean 16#3207
+/igrave 16#00ec
+/igujarati 16#0a87
+/igurmukhi 16#0a07
+/ihiragana 16#3044
+/ihookabove 16#1ec9
+/iibengali 16#0988
+/iicyrillic 16#0438
+/iideva 16#0908
+/iigujarati 16#0a88
+/iigurmukhi 16#0a08
+/iimatragurmukhi 16#0a40
+/iinvertedbreve 16#020b
+/iishortcyrillic 16#0439
+/iivowelsignbengali 16#09c0
+/iivowelsigndeva 16#0940
+/iivowelsigngujarati 16#0ac0
+/ij 16#0133
+/ikatakana 16#30a4
+/ikatakanahalfwidth 16#ff72
+/ikorean 16#3163
+/ilde 16#02dc
+/iluyhebrew 16#05ac
+/imacron 16#012b
+/imacroncyrillic 16#04e3
+/imageorapproximatelyequal 16#2253
+/imatragurmukhi 16#0a3f
+/imonospace 16#ff49
+/increment 16#2206
+/infinity 16#221e
+/iniarmenian 16#056b
+/integral 16#222b
+/integralbottom 16#2321
+/integralbt 16#2321
+/integralex 16#f8f5
+/integraltop 16#2320
+/integraltp 16#2320
+/intersection 16#2229
+/intisquare 16#3305
+/invbullet 16#25d8
+/invcircle 16#25d9
+/invsmileface 16#263b
+/iocyrillic 16#0451
+/iogonek 16#012f
+/iota 16#03b9
+/iotadieresis 16#03ca
+/iotadieresistonos 16#0390
+/iotalatin 16#0269
+/iotatonos 16#03af
+/iparen 16#24a4
+/irigurmukhi 16#0a72
+/ismallhiragana 16#3043
+/ismallkatakana 16#30a3
+/ismallkatakanahalfwidth 16#ff68
+/issharbengali 16#09fa
+/istroke 16#0268
+/isuperior 16#f6ed
+/iterationhiragana 16#309d
+/iterationkatakana 16#30fd
+/itilde 16#0129
+/itildebelow 16#1e2d
+/iubopomofo 16#3129
+/iucyrillic 16#044e
+/ivowelsignbengali 16#09bf
+/ivowelsigndeva 16#093f
+/ivowelsigngujarati 16#0abf
+/izhitsacyrillic 16#0475
+/izhitsadblgravecyrillic 16#0477
+/j 16#006a
+/jaarmenian 16#0571
+/jabengali 16#099c
+/jadeva 16#091c
+/jagujarati 16#0a9c
+/jagurmukhi 16#0a1c
+/jbopomofo 16#3110
+/jcaron 16#01f0
+/jcircle 16#24d9
+/jcircumflex 16#0135
+/jcrossedtail 16#029d
+/jdotlessstroke 16#025f
+/jecyrillic 16#0458
+/jeemarabic 16#062c
+/jeemfinalarabic 16#fe9e
+/jeeminitialarabic 16#fe9f
+/jeemmedialarabic 16#fea0
+/jeharabic 16#0698
+/jehfinalarabic 16#fb8b
+/jhabengali 16#099d
+/jhadeva 16#091d
+/jhagujarati 16#0a9d
+/jhagurmukhi 16#0a1d
+/jheharmenian 16#057b
+/jis 16#3004
+/jmonospace 16#ff4a
+/jparen 16#24a5
+/jsuperior 16#02b2
+/k 16#006b
+/kabashkircyrillic 16#04a1
+/kabengali 16#0995
+/kacute 16#1e31
+/kacyrillic 16#043a
+/kadescendercyrillic 16#049b
+/kadeva 16#0915
+/kaf 16#05db
+/kafarabic 16#0643
+/kafdagesh 16#fb3b
+/kafdageshhebrew 16#fb3b
+/kaffinalarabic 16#feda
+/kafhebrew 16#05db
+/kafinitialarabic 16#fedb
+/kafmedialarabic 16#fedc
+/kafrafehebrew 16#fb4d
+/kagujarati 16#0a95
+/kagurmukhi 16#0a15
+/kahiragana 16#304b
+/kahookcyrillic 16#04c4
+/kakatakana 16#30ab
+/kakatakanahalfwidth 16#ff76
+/kappa 16#03ba
+/kappasymbolgreek 16#03f0
+/kapyeounmieumkorean 16#3171
+/kapyeounphieuphkorean 16#3184
+/kapyeounpieupkorean 16#3178
+/kapyeounssangpieupkorean 16#3179
+/karoriisquare 16#330d
+/kashidaautoarabic 16#0640
+/kashidaautonosidebearingarabic 16#0640
+/kasmallkatakana 16#30f5
+/kasquare 16#3384
+/kasraarabic 16#0650
+/kasratanarabic 16#064d
+/kastrokecyrillic 16#049f
+/katahiraprolongmarkhalfwidth 16#ff70
+/kaverticalstrokecyrillic 16#049d
+/kbopomofo 16#310e
+/kcalsquare 16#3389
+/kcaron 16#01e9
+/kcedilla 16#0137
+/kcircle 16#24da
+/kcommaaccent 16#0137
+/kdotbelow 16#1e33
+/keharmenian 16#0584
+/kehiragana 16#3051
+/kekatakana 16#30b1
+/kekatakanahalfwidth 16#ff79
+/kenarmenian 16#056f
+/kesmallkatakana 16#30f6
+/kgreenlandic 16#0138
+/khabengali 16#0996
+/khacyrillic 16#0445
+/khadeva 16#0916
+/khagujarati 16#0a96
+/khagurmukhi 16#0a16
+/khaharabic 16#062e
+/khahfinalarabic 16#fea6
+/khahinitialarabic 16#fea7
+/khahmedialarabic 16#fea8
+/kheicoptic 16#03e7
+/khhadeva 16#0959
+/khhagurmukhi 16#0a59
+/khieukhacirclekorean 16#3278
+/khieukhaparenkorean 16#3218
+/khieukhcirclekorean 16#326a
+/khieukhkorean 16#314b
+/khieukhparenkorean 16#320a
+/khokhaithai 16#0e02
+/khokhonthai 16#0e05
+/khokhuatthai 16#0e03
+/khokhwaithai 16#0e04
+/khomutthai 16#0e5b
+/khook 16#0199
+/khorakhangthai 16#0e06
+/khzsquare 16#3391
+/kihiragana 16#304d
+/kikatakana 16#30ad
+/kikatakanahalfwidth 16#ff77
+/kiroguramusquare 16#3315
+/kiromeetorusquare 16#3316
+/kirosquare 16#3314
+/kiyeokacirclekorean 16#326e
+/kiyeokaparenkorean 16#320e
+/kiyeokcirclekorean 16#3260
+/kiyeokkorean 16#3131
+/kiyeokparenkorean 16#3200
+/kiyeoksioskorean 16#3133
+/kjecyrillic 16#045c
+/klinebelow 16#1e35
+/klsquare 16#3398
+/kmcubedsquare 16#33a6
+/kmonospace 16#ff4b
+/kmsquaredsquare 16#33a2
+/kohiragana 16#3053
+/kohmsquare 16#33c0
+/kokaithai 16#0e01
+/kokatakana 16#30b3
+/kokatakanahalfwidth 16#ff7a
+/kooposquare 16#331e
+/koppacyrillic 16#0481
+/koreanstandardsymbol 16#327f
+/koroniscmb 16#0343
+/kparen 16#24a6
+/kpasquare 16#33aa
+/ksicyrillic 16#046f
+/ktsquare 16#33cf
+/kturned 16#029e
+/kuhiragana 16#304f
+/kukatakana 16#30af
+/kukatakanahalfwidth 16#ff78
+/kvsquare 16#33b8
+/kwsquare 16#33be
+/l 16#006c
+/labengali 16#09b2
+/lacute 16#013a
+/ladeva 16#0932
+/lagujarati 16#0ab2
+/lagurmukhi 16#0a32
+/lakkhangyaothai 16#0e45
+/lamaleffinalarabic 16#fefc
+/lamalefhamzaabovefinalarabic 16#fef8
+/lamalefhamzaaboveisolatedarabic 16#fef7
+/lamalefhamzabelowfinalarabic 16#fefa
+/lamalefhamzabelowisolatedarabic 16#fef9
+/lamalefisolatedarabic 16#fefb
+/lamalefmaddaabovefinalarabic 16#fef6
+/lamalefmaddaaboveisolatedarabic 16#fef5
+/lamarabic 16#0644
+/lambda 16#03bb
+/lambdastroke 16#019b
+/lamed 16#05dc
+/lameddagesh 16#fb3c
+/lameddageshhebrew 16#fb3c
+/lamedhebrew 16#05dc
+/lamfinalarabic 16#fede
+/lamhahinitialarabic 16#fcca
+/laminitialarabic 16#fedf
+/lamjeeminitialarabic 16#fcc9
+/lamkhahinitialarabic 16#fccb
+/lamlamhehisolatedarabic 16#fdf2
+/lammedialarabic 16#fee0
+/lammeemhahinitialarabic 16#fd88
+/lammeeminitialarabic 16#fccc
+/largecircle 16#25ef
+/lbar 16#019a
+/lbelt 16#026c
+/lbopomofo 16#310c
+/lcaron 16#013e
+/lcedilla 16#013c
+/lcircle 16#24db
+/lcircumflexbelow 16#1e3d
+/lcommaaccent 16#013c
+/ldot 16#0140
+/ldotaccent 16#0140
+/ldotbelow 16#1e37
+/ldotbelowmacron 16#1e39
+/leftangleabovecmb 16#031a
+/lefttackbelowcmb 16#0318
+/less 16#003c
+/lessequal 16#2264
+/lessequalorgreater 16#22da
+/lessmonospace 16#ff1c
+/lessorequivalent 16#2272
+/lessorgreater 16#2276
+/lessoverequal 16#2266
+/lesssmall 16#fe64
+/lezh 16#026e
+/lfblock 16#258c
+/lhookretroflex 16#026d
+/lira 16#20a4
+/liwnarmenian 16#056c
+/lj 16#01c9
+/ljecyrillic 16#0459
+/ll 16#f6c0
+/lladeva 16#0933
+/llagujarati 16#0ab3
+/llinebelow 16#1e3b
+/llladeva 16#0934
+/llvocalicbengali 16#09e1
+/llvocalicdeva 16#0961
+/llvocalicvowelsignbengali 16#09e3
+/llvocalicvowelsigndeva 16#0963
+/lmiddletilde 16#026b
+/lmonospace 16#ff4c
+/lmsquare 16#33d0
+/lochulathai 16#0e2c
+/logicaland 16#2227
+/logicalnot 16#00ac
+/logicalnotreversed 16#2310
+/logicalor 16#2228
+/lolingthai 16#0e25
+/longs 16#017f
+/lowlinecenterline 16#fe4e
+/lowlinecmb 16#0332
+/lowlinedashed 16#fe4d
+/lozenge 16#25ca
+/lparen 16#24a7
+/lslash 16#0142
+/lsquare 16#2113
+/lsuperior 16#f6ee
+/ltshade 16#2591
+/luthai 16#0e26
+/lvocalicbengali 16#098c
+/lvocalicdeva 16#090c
+/lvocalicvowelsignbengali 16#09e2
+/lvocalicvowelsigndeva 16#0962
+/lxsquare 16#33d3
+/m 16#006d
+/mabengali 16#09ae
+/macron 16#00af
+/macronbelowcmb 16#0331
+/macroncmb 16#0304
+/macronlowmod 16#02cd
+/macronmonospace 16#ffe3
+/macute 16#1e3f
+/madeva 16#092e
+/magujarati 16#0aae
+/magurmukhi 16#0a2e
+/mahapakhhebrew 16#05a4
+/mahapakhlefthebrew 16#05a4
+/mahiragana 16#307e
+/maichattawalowleftthai 16#f895
+/maichattawalowrightthai 16#f894
+/maichattawathai 16#0e4b
+/maichattawaupperleftthai 16#f893
+/maieklowleftthai 16#f88c
+/maieklowrightthai 16#f88b
+/maiekthai 16#0e48
+/maiekupperleftthai 16#f88a
+/maihanakatleftthai 16#f884
+/maihanakatthai 16#0e31
+/maitaikhuleftthai 16#f889
+/maitaikhuthai 16#0e47
+/maitholowleftthai 16#f88f
+/maitholowrightthai 16#f88e
+/maithothai 16#0e49
+/maithoupperleftthai 16#f88d
+/maitrilowleftthai 16#f892
+/maitrilowrightthai 16#f891
+/maitrithai 16#0e4a
+/maitriupperleftthai 16#f890
+/maiyamokthai 16#0e46
+/makatakana 16#30de
+/makatakanahalfwidth 16#ff8f
+/male 16#2642
+/mansyonsquare 16#3347
+/maqafhebrew 16#05be
+/mars 16#2642
+/masoracirclehebrew 16#05af
+/masquare 16#3383
+/mbopomofo 16#3107
+/mbsquare 16#33d4
+/mcircle 16#24dc
+/mcubedsquare 16#33a5
+/mdotaccent 16#1e41
+/mdotbelow 16#1e43
+/meemarabic 16#0645
+/meemfinalarabic 16#fee2
+/meeminitialarabic 16#fee3
+/meemmedialarabic 16#fee4
+/meemmeeminitialarabic 16#fcd1
+/meemmeemisolatedarabic 16#fc48
+/meetorusquare 16#334d
+/mehiragana 16#3081
+/meizierasquare 16#337e
+/mekatakana 16#30e1
+/mekatakanahalfwidth 16#ff92
+/mem 16#05de
+/memdagesh 16#fb3e
+/memdageshhebrew 16#fb3e
+/memhebrew 16#05de
+/menarmenian 16#0574
+/merkhahebrew 16#05a5
+/merkhakefulahebrew 16#05a6
+/merkhakefulalefthebrew 16#05a6
+/merkhalefthebrew 16#05a5
+/mhook 16#0271
+/mhzsquare 16#3392
+/middledotkatakanahalfwidth 16#ff65
+/middot 16#00b7
+/mieumacirclekorean 16#3272
+/mieumaparenkorean 16#3212
+/mieumcirclekorean 16#3264
+/mieumkorean 16#3141
+/mieumpansioskorean 16#3170
+/mieumparenkorean 16#3204
+/mieumpieupkorean 16#316e
+/mieumsioskorean 16#316f
+/mihiragana 16#307f
+/mikatakana 16#30df
+/mikatakanahalfwidth 16#ff90
+/minus 16#2212
+/minusbelowcmb 16#0320
+/minuscircle 16#2296
+/minusmod 16#02d7
+/minusplus 16#2213
+/minute 16#2032
+/miribaarusquare 16#334a
+/mirisquare 16#3349
+/mlonglegturned 16#0270
+/mlsquare 16#3396
+/mmcubedsquare 16#33a3
+/mmonospace 16#ff4d
+/mmsquaredsquare 16#339f
+/mohiragana 16#3082
+/mohmsquare 16#33c1
+/mokatakana 16#30e2
+/mokatakanahalfwidth 16#ff93
+/molsquare 16#33d6
+/momathai 16#0e21
+/moverssquare 16#33a7
+/moverssquaredsquare 16#33a8
+/mparen 16#24a8
+/mpasquare 16#33ab
+/mssquare 16#33b3
+/msuperior 16#f6ef
+/mturned 16#026f
+/mu 16#00b5
+/mu1 16#00b5
+/muasquare 16#3382
+/muchgreater 16#226b
+/muchless 16#226a
+/mufsquare 16#338c
+/mugreek 16#03bc
+/mugsquare 16#338d
+/muhiragana 16#3080
+/mukatakana 16#30e0
+/mukatakanahalfwidth 16#ff91
+/mulsquare 16#3395
+/multiply 16#00d7
+/mumsquare 16#339b
+/munahhebrew 16#05a3
+/munahlefthebrew 16#05a3
+/musicalnote 16#266a
+/musicalnotedbl 16#266b
+/musicflatsign 16#266d
+/musicsharpsign 16#266f
+/mussquare 16#33b2
+/muvsquare 16#33b6
+/muwsquare 16#33bc
+/mvmegasquare 16#33b9
+/mvsquare 16#33b7
+/mwmegasquare 16#33bf
+/mwsquare 16#33bd
+/n 16#006e
+/nabengali 16#09a8
+/nabla 16#2207
+/nacute 16#0144
+/nadeva 16#0928
+/nagujarati 16#0aa8
+/nagurmukhi 16#0a28
+/nahiragana 16#306a
+/nakatakana 16#30ca
+/nakatakanahalfwidth 16#ff85
+/napostrophe 16#0149
+/nasquare 16#3381
+/nbopomofo 16#310b
+/nbspace 16#00a0
+/ncaron 16#0148
+/ncedilla 16#0146
+/ncircle 16#24dd
+/ncircumflexbelow 16#1e4b
+/ncommaaccent 16#0146
+/ndotaccent 16#1e45
+/ndotbelow 16#1e47
+/nehiragana 16#306d
+/nekatakana 16#30cd
+/nekatakanahalfwidth 16#ff88
+/newsheqelsign 16#20aa
+/nfsquare 16#338b
+/ngabengali 16#0999
+/ngadeva 16#0919
+/ngagujarati 16#0a99
+/ngagurmukhi 16#0a19
+/ngonguthai 16#0e07
+/nhiragana 16#3093
+/nhookleft 16#0272
+/nhookretroflex 16#0273
+/nieunacirclekorean 16#326f
+/nieunaparenkorean 16#320f
+/nieuncieuckorean 16#3135
+/nieuncirclekorean 16#3261
+/nieunhieuhkorean 16#3136
+/nieunkorean 16#3134
+/nieunpansioskorean 16#3168
+/nieunparenkorean 16#3201
+/nieunsioskorean 16#3167
+/nieuntikeutkorean 16#3166
+/nihiragana 16#306b
+/nikatakana 16#30cb
+/nikatakanahalfwidth 16#ff86
+/nikhahitleftthai 16#f899
+/nikhahitthai 16#0e4d
+/nine 16#0039
+/ninearabic 16#0669
+/ninebengali 16#09ef
+/ninecircle 16#2468
+/ninecircleinversesansserif 16#2792
+/ninedeva 16#096f
+/ninegujarati 16#0aef
+/ninegurmukhi 16#0a6f
+/ninehackarabic 16#0669
+/ninehangzhou 16#3029
+/nineideographicparen 16#3228
+/nineinferior 16#2089
+/ninemonospace 16#ff19
+/nineoldstyle 16#f739
+/nineparen 16#247c
+/nineperiod 16#2490
+/ninepersian 16#06f9
+/nineroman 16#2178
+/ninesuperior 16#2079
+/nineteencircle 16#2472
+/nineteenparen 16#2486
+/nineteenperiod 16#249a
+/ninethai 16#0e59
+/nj 16#01cc
+/njecyrillic 16#045a
+/nkatakana 16#30f3
+/nkatakanahalfwidth 16#ff9d
+/nlegrightlong 16#019e
+/nlinebelow 16#1e49
+/nmonospace 16#ff4e
+/nmsquare 16#339a
+/nnabengali 16#09a3
+/nnadeva 16#0923
+/nnagujarati 16#0aa3
+/nnagurmukhi 16#0a23
+/nnnadeva 16#0929
+/nohiragana 16#306e
+/nokatakana 16#30ce
+/nokatakanahalfwidth 16#ff89
+/nonbreakingspace 16#00a0
+/nonenthai 16#0e13
+/nonuthai 16#0e19
+/noonarabic 16#0646
+/noonfinalarabic 16#fee6
+/noonghunnaarabic 16#06ba
+/noonghunnafinalarabic 16#fb9f
+/nooninitialarabic 16#fee7
+/noonjeeminitialarabic 16#fcd2
+/noonjeemisolatedarabic 16#fc4b
+/noonmedialarabic 16#fee8
+/noonmeeminitialarabic 16#fcd5
+/noonmeemisolatedarabic 16#fc4e
+/noonnoonfinalarabic 16#fc8d
+/notcontains 16#220c
+/notelement 16#2209
+/notelementof 16#2209
+/notequal 16#2260
+/notgreater 16#226f
+/notgreaternorequal 16#2271
+/notgreaternorless 16#2279
+/notidentical 16#2262
+/notless 16#226e
+/notlessnorequal 16#2270
+/notparallel 16#2226
+/notprecedes 16#2280
+/notsubset 16#2284
+/notsucceeds 16#2281
+/notsuperset 16#2285
+/nowarmenian 16#0576
+/nparen 16#24a9
+/nssquare 16#33b1
+/nsuperior 16#207f
+/ntilde 16#00f1
+/nu 16#03bd
+/nuhiragana 16#306c
+/nukatakana 16#30cc
+/nukatakanahalfwidth 16#ff87
+/nuktabengali 16#09bc
+/nuktadeva 16#093c
+/nuktagujarati 16#0abc
+/nuktagurmukhi 16#0a3c
+/numbersign 16#0023
+/numbersignmonospace 16#ff03
+/numbersignsmall 16#fe5f
+/numeralsigngreek 16#0374
+/numeralsignlowergreek 16#0375
+/numero 16#2116
+/nun 16#05e0
+/nundagesh 16#fb40
+/nundageshhebrew 16#fb40
+/nunhebrew 16#05e0
+/nvsquare 16#33b5
+/nwsquare 16#33bb
+/nyabengali 16#099e
+/nyadeva 16#091e
+/nyagujarati 16#0a9e
+/nyagurmukhi 16#0a1e
+/o 16#006f
+/oacute 16#00f3
+/oangthai 16#0e2d
+/obarred 16#0275
+/obarredcyrillic 16#04e9
+/obarreddieresiscyrillic 16#04eb
+/obengali 16#0993
+/obopomofo 16#311b
+/obreve 16#014f
+/ocandradeva 16#0911
+/ocandragujarati 16#0a91
+/ocandravowelsigndeva 16#0949
+/ocandravowelsigngujarati 16#0ac9
+/ocaron 16#01d2
+/ocircle 16#24de
+/ocircumflex 16#00f4
+/ocircumflexacute 16#1ed1
+/ocircumflexdotbelow 16#1ed9
+/ocircumflexgrave 16#1ed3
+/ocircumflexhookabove 16#1ed5
+/ocircumflextilde 16#1ed7
+/ocyrillic 16#043e
+/odblacute 16#0151
+/odblgrave 16#020d
+/odeva 16#0913
+/odieresis 16#00f6
+/odieresiscyrillic 16#04e7
+/odotbelow 16#1ecd
+/oe 16#0153
+/oekorean 16#315a
+/ogonek 16#02db
+/ogonekcmb 16#0328
+/ograve 16#00f2
+/ogujarati 16#0a93
+/oharmenian 16#0585
+/ohiragana 16#304a
+/ohookabove 16#1ecf
+/ohorn 16#01a1
+/ohornacute 16#1edb
+/ohorndotbelow 16#1ee3
+/ohorngrave 16#1edd
+/ohornhookabove 16#1edf
+/ohorntilde 16#1ee1
+/ohungarumlaut 16#0151
+/oi 16#01a3
+/oinvertedbreve 16#020f
+/okatakana 16#30aa
+/okatakanahalfwidth 16#ff75
+/okorean 16#3157
+/olehebrew 16#05ab
+/omacron 16#014d
+/omacronacute 16#1e53
+/omacrongrave 16#1e51
+/omdeva 16#0950
+/omega 16#03c9
+/omega1 16#03d6
+/omegacyrillic 16#0461
+/omegalatinclosed 16#0277
+/omegaroundcyrillic 16#047b
+/omegatitlocyrillic 16#047d
+/omegatonos 16#03ce
+/omgujarati 16#0ad0
+/omicron 16#03bf
+/omicrontonos 16#03cc
+/omonospace 16#ff4f
+/one 16#0031
+/onearabic 16#0661
+/onebengali 16#09e7
+/onecircle 16#2460
+/onecircleinversesansserif 16#278a
+/onedeva 16#0967
+/onedotenleader 16#2024
+/oneeighth 16#215b
+/onefitted 16#f6dc
+/onegujarati 16#0ae7
+/onegurmukhi 16#0a67
+/onehackarabic 16#0661
+/onehalf 16#00bd
+/onehangzhou 16#3021
+/oneideographicparen 16#3220
+/oneinferior 16#2081
+/onemonospace 16#ff11
+/onenumeratorbengali 16#09f4
+/oneoldstyle 16#f731
+/oneparen 16#2474
+/oneperiod 16#2488
+/onepersian 16#06f1
+/onequarter 16#00bc
+/oneroman 16#2170
+/onesuperior 16#00b9
+/onethai 16#0e51
+/onethird 16#2153
+/oogonek 16#01eb
+/oogonekmacron 16#01ed
+/oogurmukhi 16#0a13
+/oomatragurmukhi 16#0a4b
+/oopen 16#0254
+/oparen 16#24aa
+/openbullet 16#25e6
+/option 16#2325
+/ordfeminine 16#00aa
+/ordmasculine 16#00ba
+/orthogonal 16#221f
+/oshortdeva 16#0912
+/oshortvowelsigndeva 16#094a
+/oslash 16#00f8
+/oslashacute 16#01ff
+/osmallhiragana 16#3049
+/osmallkatakana 16#30a9
+/osmallkatakanahalfwidth 16#ff6b
+/ostrokeacute 16#01ff
+/osuperior 16#f6f0
+/otcyrillic 16#047f
+/otilde 16#00f5
+/otildeacute 16#1e4d
+/otildedieresis 16#1e4f
+/oubopomofo 16#3121
+/overline 16#203e
+/overlinecenterline 16#fe4a
+/overlinecmb 16#0305
+/overlinedashed 16#fe49
+/overlinedblwavy 16#fe4c
+/overlinewavy 16#fe4b
+/overscore 16#00af
+/ovowelsignbengali 16#09cb
+/ovowelsigndeva 16#094b
+/ovowelsigngujarati 16#0acb
+/p 16#0070
+/paampssquare 16#3380
+/paasentosquare 16#332b
+/pabengali 16#09aa
+/pacute 16#1e55
+/padeva 16#092a
+/pagedown 16#21df
+/pageup 16#21de
+/pagujarati 16#0aaa
+/pagurmukhi 16#0a2a
+/pahiragana 16#3071
+/paiyannoithai 16#0e2f
+/pakatakana 16#30d1
+/palatalizationcyrilliccmb 16#0484
+/palochkacyrillic 16#04c0
+/pansioskorean 16#317f
+/paragraph 16#00b6
+/parallel 16#2225
+/parenleft 16#0028
+/parenleftaltonearabic 16#fd3e
+/parenleftbt 16#f8ed
+/parenleftex 16#f8ec
+/parenleftinferior 16#208d
+/parenleftmonospace 16#ff08
+/parenleftsmall 16#fe59
+/parenleftsuperior 16#207d
+/parenlefttp 16#f8eb
+/parenleftvertical 16#fe35
+/parenright 16#0029
+/parenrightaltonearabic 16#fd3f
+/parenrightbt 16#f8f8
+/parenrightex 16#f8f7
+/parenrightinferior 16#208e
+/parenrightmonospace 16#ff09
+/parenrightsmall 16#fe5a
+/parenrightsuperior 16#207e
+/parenrighttp 16#f8f6
+/parenrightvertical 16#fe36
+/partialdiff 16#2202
+/paseqhebrew 16#05c0
+/pashtahebrew 16#0599
+/pasquare 16#33a9
+/patah 16#05b7
+/patah11 16#05b7
+/patah1d 16#05b7
+/patah2a 16#05b7
+/patahhebrew 16#05b7
+/patahnarrowhebrew 16#05b7
+/patahquarterhebrew 16#05b7
+/patahwidehebrew 16#05b7
+/pazerhebrew 16#05a1
+/pbopomofo 16#3106
+/pcircle 16#24df
+/pdotaccent 16#1e57
+/pe 16#05e4
+/pecyrillic 16#043f
+/pedagesh 16#fb44
+/pedageshhebrew 16#fb44
+/peezisquare 16#333b
+/pefinaldageshhebrew 16#fb43
+/peharabic 16#067e
+/peharmenian 16#057a
+/pehebrew 16#05e4
+/pehfinalarabic 16#fb57
+/pehinitialarabic 16#fb58
+/pehiragana 16#307a
+/pehmedialarabic 16#fb59
+/pekatakana 16#30da
+/pemiddlehookcyrillic 16#04a7
+/perafehebrew 16#fb4e
+/percent 16#0025
+/percentarabic 16#066a
+/percentmonospace 16#ff05
+/percentsmall 16#fe6a
+/period 16#002e
+/periodarmenian 16#0589
+/periodcentered 16#00b7
+/periodhalfwidth 16#ff61
+/periodinferior 16#f6e7
+/periodmonospace 16#ff0e
+/periodsmall 16#fe52
+/periodsuperior 16#f6e8
+/perispomenigreekcmb 16#0342
+/perpendicular 16#22a5
+/perthousand 16#2030
+/peseta 16#20a7
+/pfsquare 16#338a
+/phabengali 16#09ab
+/phadeva 16#092b
+/phagujarati 16#0aab
+/phagurmukhi 16#0a2b
+/phi 16#03c6
+/phi1 16#03d5
+/phieuphacirclekorean 16#327a
+/phieuphaparenkorean 16#321a
+/phieuphcirclekorean 16#326c
+/phieuphkorean 16#314d
+/phieuphparenkorean 16#320c
+/philatin 16#0278
+/phinthuthai 16#0e3a
+/phisymbolgreek 16#03d5
+/phook 16#01a5
+/phophanthai 16#0e1e
+/phophungthai 16#0e1c
+/phosamphaothai 16#0e20
+/pi 16#03c0
+/pieupacirclekorean 16#3273
+/pieupaparenkorean 16#3213
+/pieupcieuckorean 16#3176
+/pieupcirclekorean 16#3265
+/pieupkiyeokkorean 16#3172
+/pieupkorean 16#3142
+/pieupparenkorean 16#3205
+/pieupsioskiyeokkorean 16#3174
+/pieupsioskorean 16#3144
+/pieupsiostikeutkorean 16#3175
+/pieupthieuthkorean 16#3177
+/pieuptikeutkorean 16#3173
+/pihiragana 16#3074
+/pikatakana 16#30d4
+/pisymbolgreek 16#03d6
+/piwrarmenian 16#0583
+/plus 16#002b
+/plusbelowcmb 16#031f
+/pluscircle 16#2295
+/plusminus 16#00b1
+/plusmod 16#02d6
+/plusmonospace 16#ff0b
+/plussmall 16#fe62
+/plussuperior 16#207a
+/pmonospace 16#ff50
+/pmsquare 16#33d8
+/pohiragana 16#307d
+/pointingindexdownwhite 16#261f
+/pointingindexleftwhite 16#261c
+/pointingindexrightwhite 16#261e
+/pointingindexupwhite 16#261d
+/pokatakana 16#30dd
+/poplathai 16#0e1b
+/postalmark 16#3012
+/postalmarkface 16#3020
+/pparen 16#24ab
+/precedes 16#227a
+/prescription 16#211e
+/primemod 16#02b9
+/primereversed 16#2035
+/product 16#220f
+/projective 16#2305
+/prolongedkana 16#30fc
+/propellor 16#2318
+/propersubset 16#2282
+/propersuperset 16#2283
+/proportion 16#2237
+/proportional 16#221d
+/psi 16#03c8
+/psicyrillic 16#0471
+/psilipneumatacyrilliccmb 16#0486
+/pssquare 16#33b0
+/puhiragana 16#3077
+/pukatakana 16#30d7
+/pvsquare 16#33b4
+/pwsquare 16#33ba
+/q 16#0071
+/qadeva 16#0958
+/qadmahebrew 16#05a8
+/qafarabic 16#0642
+/qaffinalarabic 16#fed6
+/qafinitialarabic 16#fed7
+/qafmedialarabic 16#fed8
+/qamats 16#05b8
+/qamats10 16#05b8
+/qamats1a 16#05b8
+/qamats1c 16#05b8
+/qamats27 16#05b8
+/qamats29 16#05b8
+/qamats33 16#05b8
+/qamatsde 16#05b8
+/qamatshebrew 16#05b8
+/qamatsnarrowhebrew 16#05b8
+/qamatsqatanhebrew 16#05b8
+/qamatsqatannarrowhebrew 16#05b8
+/qamatsqatanquarterhebrew 16#05b8
+/qamatsqatanwidehebrew 16#05b8
+/qamatsquarterhebrew 16#05b8
+/qamatswidehebrew 16#05b8
+/qarneyparahebrew 16#059f
+/qbopomofo 16#3111
+/qcircle 16#24e0
+/qhook 16#02a0
+/qmonospace 16#ff51
+/qof 16#05e7
+/qofdagesh 16#fb47
+/qofdageshhebrew 16#fb47
+/qofhebrew 16#05e7
+/qparen 16#24ac
+/quarternote 16#2669
+/qubuts 16#05bb
+/qubuts18 16#05bb
+/qubuts25 16#05bb
+/qubuts31 16#05bb
+/qubutshebrew 16#05bb
+/qubutsnarrowhebrew 16#05bb
+/qubutsquarterhebrew 16#05bb
+/qubutswidehebrew 16#05bb
+/question 16#003f
+/questionarabic 16#061f
+/questionarmenian 16#055e
+/questiondown 16#00bf
+/questiondownsmall 16#f7bf
+/questiongreek 16#037e
+/questionmonospace 16#ff1f
+/questionsmall 16#f73f
+/quotedbl 16#0022
+/quotedblbase 16#201e
+/quotedblleft 16#201c
+/quotedblmonospace 16#ff02
+/quotedblprime 16#301e
+/quotedblprimereversed 16#301d
+/quotedblright 16#201d
+/quoteleft 16#2018
+/quoteleftreversed 16#201b
+/quotereversed 16#201b
+/quoteright 16#2019
+/quoterightn 16#0149
+/quotesinglbase 16#201a
+/quotesingle 16#0027
+/quotesinglemonospace 16#ff07
+/r 16#0072
+/raarmenian 16#057c
+/rabengali 16#09b0
+/racute 16#0155
+/radeva 16#0930
+/radical 16#221a
+/radicalex 16#f8e5
+/radoverssquare 16#33ae
+/radoverssquaredsquare 16#33af
+/radsquare 16#33ad
+/rafe 16#05bf
+/rafehebrew 16#05bf
+/ragujarati 16#0ab0
+/ragurmukhi 16#0a30
+/rahiragana 16#3089
+/rakatakana 16#30e9
+/rakatakanahalfwidth 16#ff97
+/ralowerdiagonalbengali 16#09f1
+/ramiddlediagonalbengali 16#09f0
+/ramshorn 16#0264
+/ratio 16#2236
+/rbopomofo 16#3116
+/rcaron 16#0159
+/rcedilla 16#0157
+/rcircle 16#24e1
+/rcommaaccent 16#0157
+/rdblgrave 16#0211
+/rdotaccent 16#1e59
+/rdotbelow 16#1e5b
+/rdotbelowmacron 16#1e5d
+/referencemark 16#203b
+/reflexsubset 16#2286
+/reflexsuperset 16#2287
+/registered 16#00ae
+/registersans 16#f8e8
+/registerserif 16#f6da
+/reharabic 16#0631
+/reharmenian 16#0580
+/rehfinalarabic 16#feae
+/rehiragana 16#308c
+/rekatakana 16#30ec
+/rekatakanahalfwidth 16#ff9a
+/resh 16#05e8
+/reshdageshhebrew 16#fb48
+/reshhebrew 16#05e8
+/reversedtilde 16#223d
+/reviahebrew 16#0597
+/reviamugrashhebrew 16#0597
+/revlogicalnot 16#2310
+/rfishhook 16#027e
+/rfishhookreversed 16#027f
+/rhabengali 16#09dd
+/rhadeva 16#095d
+/rho 16#03c1
+/rhook 16#027d
+/rhookturned 16#027b
+/rhookturnedsuperior 16#02b5
+/rhosymbolgreek 16#03f1
+/rhotichookmod 16#02de
+/rieulacirclekorean 16#3271
+/rieulaparenkorean 16#3211
+/rieulcirclekorean 16#3263
+/rieulhieuhkorean 16#3140
+/rieulkiyeokkorean 16#313a
+/rieulkiyeoksioskorean 16#3169
+/rieulkorean 16#3139
+/rieulmieumkorean 16#313b
+/rieulpansioskorean 16#316c
+/rieulparenkorean 16#3203
+/rieulphieuphkorean 16#313f
+/rieulpieupkorean 16#313c
+/rieulpieupsioskorean 16#316b
+/rieulsioskorean 16#313d
+/rieulthieuthkorean 16#313e
+/rieultikeutkorean 16#316a
+/rieulyeorinhieuhkorean 16#316d
+/rightangle 16#221f
+/righttackbelowcmb 16#0319
+/righttriangle 16#22bf
+/rihiragana 16#308a
+/rikatakana 16#30ea
+/rikatakanahalfwidth 16#ff98
+/ring 16#02da
+/ringbelowcmb 16#0325
+/ringcmb 16#030a
+/ringhalfleft 16#02bf
+/ringhalfleftarmenian 16#0559
+/ringhalfleftbelowcmb 16#031c
+/ringhalfleftcentered 16#02d3
+/ringhalfright 16#02be
+/ringhalfrightbelowcmb 16#0339
+/ringhalfrightcentered 16#02d2
+/rinvertedbreve 16#0213
+/rittorusquare 16#3351
+/rlinebelow 16#1e5f
+/rlongleg 16#027c
+/rlonglegturned 16#027a
+/rmonospace 16#ff52
+/rohiragana 16#308d
+/rokatakana 16#30ed
+/rokatakanahalfwidth 16#ff9b
+/roruathai 16#0e23
+/rparen 16#24ad
+/rrabengali 16#09dc
+/rradeva 16#0931
+/rragurmukhi 16#0a5c
+/rreharabic 16#0691
+/rrehfinalarabic 16#fb8d
+/rrvocalicbengali 16#09e0
+/rrvocalicdeva 16#0960
+/rrvocalicgujarati 16#0ae0
+/rrvocalicvowelsignbengali 16#09c4
+/rrvocalicvowelsigndeva 16#0944
+/rrvocalicvowelsigngujarati 16#0ac4
+/rsuperior 16#f6f1
+/rtblock 16#2590
+/rturned 16#0279
+/rturnedsuperior 16#02b4
+/ruhiragana 16#308b
+/rukatakana 16#30eb
+/rukatakanahalfwidth 16#ff99
+/rupeemarkbengali 16#09f2
+/rupeesignbengali 16#09f3
+/rupiah 16#f6dd
+/ruthai 16#0e24
+/rvocalicbengali 16#098b
+/rvocalicdeva 16#090b
+/rvocalicgujarati 16#0a8b
+/rvocalicvowelsignbengali 16#09c3
+/rvocalicvowelsigndeva 16#0943
+/rvocalicvowelsigngujarati 16#0ac3
+/s 16#0073
+/sabengali 16#09b8
+/sacute 16#015b
+/sacutedotaccent 16#1e65
+/sadarabic 16#0635
+/sadeva 16#0938
+/sadfinalarabic 16#feba
+/sadinitialarabic 16#febb
+/sadmedialarabic 16#febc
+/sagujarati 16#0ab8
+/sagurmukhi 16#0a38
+/sahiragana 16#3055
+/sakatakana 16#30b5
+/sakatakanahalfwidth 16#ff7b
+/sallallahoualayhewasallamarabic 16#fdfa
+/samekh 16#05e1
+/samekhdagesh 16#fb41
+/samekhdageshhebrew 16#fb41
+/samekhhebrew 16#05e1
+/saraaathai 16#0e32
+/saraaethai 16#0e41
+/saraaimaimalaithai 16#0e44
+/saraaimaimuanthai 16#0e43
+/saraamthai 16#0e33
+/saraathai 16#0e30
+/saraethai 16#0e40
+/saraiileftthai 16#f886
+/saraiithai 16#0e35
+/saraileftthai 16#f885
+/saraithai 16#0e34
+/saraothai 16#0e42
+/saraueeleftthai 16#f888
+/saraueethai 16#0e37
+/saraueleftthai 16#f887
+/sarauethai 16#0e36
+/sarauthai 16#0e38
+/sarauuthai 16#0e39
+/sbopomofo 16#3119
+/scaron 16#0161
+/scarondotaccent 16#1e67
+/scedilla 16#015f
+/schwa 16#0259
+/schwacyrillic 16#04d9
+/schwadieresiscyrillic 16#04db
+/schwahook 16#025a
+/scircle 16#24e2
+/scircumflex 16#015d
+/scommaaccent 16#0219
+/sdotaccent 16#1e61
+/sdotbelow 16#1e63
+/sdotbelowdotaccent 16#1e69
+/seagullbelowcmb 16#033c
+/second 16#2033
+/secondtonechinese 16#02ca
+/section 16#00a7
+/seenarabic 16#0633
+/seenfinalarabic 16#feb2
+/seeninitialarabic 16#feb3
+/seenmedialarabic 16#feb4
+/segol 16#05b6
+/segol13 16#05b6
+/segol1f 16#05b6
+/segol2c 16#05b6
+/segolhebrew 16#05b6
+/segolnarrowhebrew 16#05b6
+/segolquarterhebrew 16#05b6
+/segoltahebrew 16#0592
+/segolwidehebrew 16#05b6
+/seharmenian 16#057d
+/sehiragana 16#305b
+/sekatakana 16#30bb
+/sekatakanahalfwidth 16#ff7e
+/semicolon 16#003b
+/semicolonarabic 16#061b
+/semicolonmonospace 16#ff1b
+/semicolonsmall 16#fe54
+/semivoicedmarkkana 16#309c
+/semivoicedmarkkanahalfwidth 16#ff9f
+/sentisquare 16#3322
+/sentosquare 16#3323
+/seven 16#0037
+/sevenarabic 16#0667
+/sevenbengali 16#09ed
+/sevencircle 16#2466
+/sevencircleinversesansserif 16#2790
+/sevendeva 16#096d
+/seveneighths 16#215e
+/sevengujarati 16#0aed
+/sevengurmukhi 16#0a6d
+/sevenhackarabic 16#0667
+/sevenhangzhou 16#3027
+/sevenideographicparen 16#3226
+/seveninferior 16#2087
+/sevenmonospace 16#ff17
+/sevenoldstyle 16#f737
+/sevenparen 16#247a
+/sevenperiod 16#248e
+/sevenpersian 16#06f7
+/sevenroman 16#2176
+/sevensuperior 16#2077
+/seventeencircle 16#2470
+/seventeenparen 16#2484
+/seventeenperiod 16#2498
+/seventhai 16#0e57
+/sfthyphen 16#00ad
+/shaarmenian 16#0577
+/shabengali 16#09b6
+/shacyrillic 16#0448
+/shaddaarabic 16#0651
+/shaddadammaarabic 16#fc61
+/shaddadammatanarabic 16#fc5e
+/shaddafathaarabic 16#fc60
+/shaddakasraarabic 16#fc62
+/shaddakasratanarabic 16#fc5f
+/shade 16#2592
+/shadedark 16#2593
+/shadelight 16#2591
+/shademedium 16#2592
+/shadeva 16#0936
+/shagujarati 16#0ab6
+/shagurmukhi 16#0a36
+/shalshelethebrew 16#0593
+/shbopomofo 16#3115
+/shchacyrillic 16#0449
+/sheenarabic 16#0634
+/sheenfinalarabic 16#feb6
+/sheeninitialarabic 16#feb7
+/sheenmedialarabic 16#feb8
+/sheicoptic 16#03e3
+/sheqel 16#20aa
+/sheqelhebrew 16#20aa
+/sheva 16#05b0
+/sheva115 16#05b0
+/sheva15 16#05b0
+/sheva22 16#05b0
+/sheva2e 16#05b0
+/shevahebrew 16#05b0
+/shevanarrowhebrew 16#05b0
+/shevaquarterhebrew 16#05b0
+/shevawidehebrew 16#05b0
+/shhacyrillic 16#04bb
+/shimacoptic 16#03ed
+/shin 16#05e9
+/shindagesh 16#fb49
+/shindageshhebrew 16#fb49
+/shindageshshindot 16#fb2c
+/shindageshshindothebrew 16#fb2c
+/shindageshsindot 16#fb2d
+/shindageshsindothebrew 16#fb2d
+/shindothebrew 16#05c1
+/shinhebrew 16#05e9
+/shinshindot 16#fb2a
+/shinshindothebrew 16#fb2a
+/shinsindot 16#fb2b
+/shinsindothebrew 16#fb2b
+/shook 16#0282
+/sigma 16#03c3
+/sigma1 16#03c2
+/sigmafinal 16#03c2
+/sigmalunatesymbolgreek 16#03f2
+/sihiragana 16#3057
+/sikatakana 16#30b7
+/sikatakanahalfwidth 16#ff7c
+/siluqhebrew 16#05bd
+/siluqlefthebrew 16#05bd
+/similar 16#223c
+/sindothebrew 16#05c2
+/siosacirclekorean 16#3274
+/siosaparenkorean 16#3214
+/sioscieuckorean 16#317e
+/sioscirclekorean 16#3266
+/sioskiyeokkorean 16#317a
+/sioskorean 16#3145
+/siosnieunkorean 16#317b
+/siosparenkorean 16#3206
+/siospieupkorean 16#317d
+/siostikeutkorean 16#317c
+/six 16#0036
+/sixarabic 16#0666
+/sixbengali 16#09ec
+/sixcircle 16#2465
+/sixcircleinversesansserif 16#278f
+/sixdeva 16#096c
+/sixgujarati 16#0aec
+/sixgurmukhi 16#0a6c
+/sixhackarabic 16#0666
+/sixhangzhou 16#3026
+/sixideographicparen 16#3225
+/sixinferior 16#2086
+/sixmonospace 16#ff16
+/sixoldstyle 16#f736
+/sixparen 16#2479
+/sixperiod 16#248d
+/sixpersian 16#06f6
+/sixroman 16#2175
+/sixsuperior 16#2076
+/sixteencircle 16#246f
+/sixteencurrencydenominatorbengali 16#09f9
+/sixteenparen 16#2483
+/sixteenperiod 16#2497
+/sixthai 16#0e56
+/slash 16#002f
+/slashmonospace 16#ff0f
+/slong 16#017f
+/slongdotaccent 16#1e9b
+/smileface 16#263a
+/smonospace 16#ff53
+/sofpasuqhebrew 16#05c3
+/softhyphen 16#00ad
+/softsigncyrillic 16#044c
+/sohiragana 16#305d
+/sokatakana 16#30bd
+/sokatakanahalfwidth 16#ff7f
+/soliduslongoverlaycmb 16#0338
+/solidusshortoverlaycmb 16#0337
+/sorusithai 16#0e29
+/sosalathai 16#0e28
+/sosothai 16#0e0b
+/sosuathai 16#0e2a
+/space 16#0020
+/spacehackarabic 16#0020
+/spade 16#2660
+/spadesuitblack 16#2660
+/spadesuitwhite 16#2664
+/sparen 16#24ae
+/squarebelowcmb 16#033b
+/squarecc 16#33c4
+/squarecm 16#339d
+/squarediagonalcrosshatchfill 16#25a9
+/squarehorizontalfill 16#25a4
+/squarekg 16#338f
+/squarekm 16#339e
+/squarekmcapital 16#33ce
+/squareln 16#33d1
+/squarelog 16#33d2
+/squaremg 16#338e
+/squaremil 16#33d5
+/squaremm 16#339c
+/squaremsquared 16#33a1
+/squareorthogonalcrosshatchfill 16#25a6
+/squareupperlefttolowerrightfill 16#25a7
+/squareupperrighttolowerleftfill 16#25a8
+/squareverticalfill 16#25a5
+/squarewhitewithsmallblack 16#25a3
+/srsquare 16#33db
+/ssabengali 16#09b7
+/ssadeva 16#0937
+/ssagujarati 16#0ab7
+/ssangcieuckorean 16#3149
+/ssanghieuhkorean 16#3185
+/ssangieungkorean 16#3180
+/ssangkiyeokkorean 16#3132
+/ssangnieunkorean 16#3165
+/ssangpieupkorean 16#3143
+/ssangsioskorean 16#3146
+/ssangtikeutkorean 16#3138
+/ssuperior 16#f6f2
+/sterling 16#00a3
+/sterlingmonospace 16#ffe1
+/strokelongoverlaycmb 16#0336
+/strokeshortoverlaycmb 16#0335
+/subset 16#2282
+/subsetnotequal 16#228a
+/subsetorequal 16#2286
+/succeeds 16#227b
+/suchthat 16#220b
+/suhiragana 16#3059
+/sukatakana 16#30b9
+/sukatakanahalfwidth 16#ff7d
+/sukunarabic 16#0652
+/summation 16#2211
+/sun 16#263c
+/superset 16#2283
+/supersetnotequal 16#228b
+/supersetorequal 16#2287
+/svsquare 16#33dc
+/syouwaerasquare 16#337c
+/t 16#0074
+/tabengali 16#09a4
+/tackdown 16#22a4
+/tackleft 16#22a3
+/tadeva 16#0924
+/tagujarati 16#0aa4
+/tagurmukhi 16#0a24
+/taharabic 16#0637
+/tahfinalarabic 16#fec2
+/tahinitialarabic 16#fec3
+/tahiragana 16#305f
+/tahmedialarabic 16#fec4
+/taisyouerasquare 16#337d
+/takatakana 16#30bf
+/takatakanahalfwidth 16#ff80
+/tatweelarabic 16#0640
+/tau 16#03c4
+/tav 16#05ea
+/tavdages 16#fb4a
+/tavdagesh 16#fb4a
+/tavdageshhebrew 16#fb4a
+/tavhebrew 16#05ea
+/tbar 16#0167
+/tbopomofo 16#310a
+/tcaron 16#0165
+/tccurl 16#02a8
+/tcedilla 16#0163
+/tcheharabic 16#0686
+/tchehfinalarabic 16#fb7b
+/tchehinitialarabic 16#fb7c
+/tchehmedialarabic 16#fb7d
+/tcircle 16#24e3
+/tcircumflexbelow 16#1e71
+/tcommaaccent 16#0163
+/tdieresis 16#1e97
+/tdotaccent 16#1e6b
+/tdotbelow 16#1e6d
+/tecyrillic 16#0442
+/tedescendercyrillic 16#04ad
+/teharabic 16#062a
+/tehfinalarabic 16#fe96
+/tehhahinitialarabic 16#fca2
+/tehhahisolatedarabic 16#fc0c
+/tehinitialarabic 16#fe97
+/tehiragana 16#3066
+/tehjeeminitialarabic 16#fca1
+/tehjeemisolatedarabic 16#fc0b
+/tehmarbutaarabic 16#0629
+/tehmarbutafinalarabic 16#fe94
+/tehmedialarabic 16#fe98
+/tehmeeminitialarabic 16#fca4
+/tehmeemisolatedarabic 16#fc0e
+/tehnoonfinalarabic 16#fc73
+/tekatakana 16#30c6
+/tekatakanahalfwidth 16#ff83
+/telephone 16#2121
+/telephoneblack 16#260e
+/telishagedolahebrew 16#05a0
+/telishaqetanahebrew 16#05a9
+/tencircle 16#2469
+/tenideographicparen 16#3229
+/tenparen 16#247d
+/tenperiod 16#2491
+/tenroman 16#2179
+/tesh 16#02a7
+/tet 16#05d8
+/tetdagesh 16#fb38
+/tetdageshhebrew 16#fb38
+/tethebrew 16#05d8
+/tetsecyrillic 16#04b5
+/tevirhebrew 16#059b
+/tevirlefthebrew 16#059b
+/thabengali 16#09a5
+/thadeva 16#0925
+/thagujarati 16#0aa5
+/thagurmukhi 16#0a25
+/thalarabic 16#0630
+/thalfinalarabic 16#feac
+/thanthakhatlowleftthai 16#f898
+/thanthakhatlowrightthai 16#f897
+/thanthakhatthai 16#0e4c
+/thanthakhatupperleftthai 16#f896
+/theharabic 16#062b
+/thehfinalarabic 16#fe9a
+/thehinitialarabic 16#fe9b
+/thehmedialarabic 16#fe9c
+/thereexists 16#2203
+/therefore 16#2234
+/theta 16#03b8
+/theta1 16#03d1
+/thetasymbolgreek 16#03d1
+/thieuthacirclekorean 16#3279
+/thieuthaparenkorean 16#3219
+/thieuthcirclekorean 16#326b
+/thieuthkorean 16#314c
+/thieuthparenkorean 16#320b
+/thirteencircle 16#246c
+/thirteenparen 16#2480
+/thirteenperiod 16#2494
+/thonangmonthothai 16#0e11
+/thook 16#01ad
+/thophuthaothai 16#0e12
+/thorn 16#00fe
+/thothahanthai 16#0e17
+/thothanthai 16#0e10
+/thothongthai 16#0e18
+/thothungthai 16#0e16
+/thousandcyrillic 16#0482
+/thousandsseparatorarabic 16#066c
+/thousandsseparatorpersian 16#066c
+/three 16#0033
+/threearabic 16#0663
+/threebengali 16#09e9
+/threecircle 16#2462
+/threecircleinversesansserif 16#278c
+/threedeva 16#0969
+/threeeighths 16#215c
+/threegujarati 16#0ae9
+/threegurmukhi 16#0a69
+/threehackarabic 16#0663
+/threehangzhou 16#3023
+/threeideographicparen 16#3222
+/threeinferior 16#2083
+/threemonospace 16#ff13
+/threenumeratorbengali 16#09f6
+/threeoldstyle 16#f733
+/threeparen 16#2476
+/threeperiod 16#248a
+/threepersian 16#06f3
+/threequarters 16#00be
+/threequartersemdash 16#f6de
+/threeroman 16#2172
+/threesuperior 16#00b3
+/threethai 16#0e53
+/thzsquare 16#3394
+/tihiragana 16#3061
+/tikatakana 16#30c1
+/tikatakanahalfwidth 16#ff81
+/tikeutacirclekorean 16#3270
+/tikeutaparenkorean 16#3210
+/tikeutcirclekorean 16#3262
+/tikeutkorean 16#3137
+/tikeutparenkorean 16#3202
+/tilde 16#02dc
+/tildebelowcmb 16#0330
+/tildecmb 16#0303
+/tildecomb 16#0303
+/tildedoublecmb 16#0360
+/tildeoperator 16#223c
+/tildeoverlaycmb 16#0334
+/tildeverticalcmb 16#033e
+/timescircle 16#2297
+/tipehahebrew 16#0596
+/tipehalefthebrew 16#0596
+/tippigurmukhi 16#0a70
+/titlocyrilliccmb 16#0483
+/tiwnarmenian 16#057f
+/tlinebelow 16#1e6f
+/tmonospace 16#ff54
+/toarmenian 16#0569
+/tohiragana 16#3068
+/tokatakana 16#30c8
+/tokatakanahalfwidth 16#ff84
+/tonebarextrahighmod 16#02e5
+/tonebarextralowmod 16#02e9
+/tonebarhighmod 16#02e6
+/tonebarlowmod 16#02e8
+/tonebarmidmod 16#02e7
+/tonefive 16#01bd
+/tonesix 16#0185
+/tonetwo 16#01a8
+/tonos 16#0384
+/tonsquare 16#3327
+/topatakthai 16#0e0f
+/tortoiseshellbracketleft 16#3014
+/tortoiseshellbracketleftsmall 16#fe5d
+/tortoiseshellbracketleftvertical 16#fe39
+/tortoiseshellbracketright 16#3015
+/tortoiseshellbracketrightsmall 16#fe5e
+/tortoiseshellbracketrightvertical 16#fe3a
+/totaothai 16#0e15
+/tpalatalhook 16#01ab
+/tparen 16#24af
+/trademark 16#2122
+/trademarksans 16#f8ea
+/trademarkserif 16#f6db
+/tretroflexhook 16#0288
+/triagdn 16#25bc
+/triaglf 16#25c4
+/triagrt 16#25ba
+/triagup 16#25b2
+/ts 16#02a6
+/tsadi 16#05e6
+/tsadidagesh 16#fb46
+/tsadidageshhebrew 16#fb46
+/tsadihebrew 16#05e6
+/tsecyrillic 16#0446
+/tsere 16#05b5
+/tsere12 16#05b5
+/tsere1e 16#05b5
+/tsere2b 16#05b5
+/tserehebrew 16#05b5
+/tserenarrowhebrew 16#05b5
+/tserequarterhebrew 16#05b5
+/tserewidehebrew 16#05b5
+/tshecyrillic 16#045b
+/tsuperior 16#f6f3
+/ttabengali 16#099f
+/ttadeva 16#091f
+/ttagujarati 16#0a9f
+/ttagurmukhi 16#0a1f
+/tteharabic 16#0679
+/ttehfinalarabic 16#fb67
+/ttehinitialarabic 16#fb68
+/ttehmedialarabic 16#fb69
+/tthabengali 16#09a0
+/tthadeva 16#0920
+/tthagujarati 16#0aa0
+/tthagurmukhi 16#0a20
+/tturned 16#0287
+/tuhiragana 16#3064
+/tukatakana 16#30c4
+/tukatakanahalfwidth 16#ff82
+/tusmallhiragana 16#3063
+/tusmallkatakana 16#30c3
+/tusmallkatakanahalfwidth 16#ff6f
+/twelvecircle 16#246b
+/twelveparen 16#247f
+/twelveperiod 16#2493
+/twelveroman 16#217b
+/twentycircle 16#2473
+/twentyhangzhou 16#5344
+/twentyparen 16#2487
+/twentyperiod 16#249b
+/two 16#0032
+/twoarabic 16#0662
+/twobengali 16#09e8
+/twocircle 16#2461
+/twocircleinversesansserif 16#278b
+/twodeva 16#0968
+/twodotenleader 16#2025
+/twodotleader 16#2025
+/twodotleadervertical 16#fe30
+/twogujarati 16#0ae8
+/twogurmukhi 16#0a68
+/twohackarabic 16#0662
+/twohangzhou 16#3022
+/twoideographicparen 16#3221
+/twoinferior 16#2082
+/twomonospace 16#ff12
+/twonumeratorbengali 16#09f5
+/twooldstyle 16#f732
+/twoparen 16#2475
+/twoperiod 16#2489
+/twopersian 16#06f2
+/tworoman 16#2171
+/twostroke 16#01bb
+/twosuperior 16#00b2
+/twothai 16#0e52
+/twothirds 16#2154
+/u 16#0075
+/uacute 16#00fa
+/ubar 16#0289
+/ubengali 16#0989
+/ubopomofo 16#3128
+/ubreve 16#016d
+/ucaron 16#01d4
+/ucircle 16#24e4
+/ucircumflex 16#00fb
+/ucircumflexbelow 16#1e77
+/ucyrillic 16#0443
+/udattadeva 16#0951
+/udblacute 16#0171
+/udblgrave 16#0215
+/udeva 16#0909
+/udieresis 16#00fc
+/udieresisacute 16#01d8
+/udieresisbelow 16#1e73
+/udieresiscaron 16#01da
+/udieresiscyrillic 16#04f1
+/udieresisgrave 16#01dc
+/udieresismacron 16#01d6
+/udotbelow 16#1ee5
+/ugrave 16#00f9
+/ugujarati 16#0a89
+/ugurmukhi 16#0a09
+/uhiragana 16#3046
+/uhookabove 16#1ee7
+/uhorn 16#01b0
+/uhornacute 16#1ee9
+/uhorndotbelow 16#1ef1
+/uhorngrave 16#1eeb
+/uhornhookabove 16#1eed
+/uhorntilde 16#1eef
+/uhungarumlaut 16#0171
+/uhungarumlautcyrillic 16#04f3
+/uinvertedbreve 16#0217
+/ukatakana 16#30a6
+/ukatakanahalfwidth 16#ff73
+/ukcyrillic 16#0479
+/ukorean 16#315c
+/umacron 16#016b
+/umacroncyrillic 16#04ef
+/umacrondieresis 16#1e7b
+/umatragurmukhi 16#0a41
+/umonospace 16#ff55
+/underscore 16#005f
+/underscoredbl 16#2017
+/underscoremonospace 16#ff3f
+/underscorevertical 16#fe33
+/underscorewavy 16#fe4f
+/union 16#222a
+/universal 16#2200
+/uogonek 16#0173
+/uparen 16#24b0
+/upblock 16#2580
+/upperdothebrew 16#05c4
+/upsilon 16#03c5
+/upsilondieresis 16#03cb
+/upsilondieresistonos 16#03b0
+/upsilonlatin 16#028a
+/upsilontonos 16#03cd
+/uptackbelowcmb 16#031d
+/uptackmod 16#02d4
+/uragurmukhi 16#0a73
+/uring 16#016f
+/ushortcyrillic 16#045e
+/usmallhiragana 16#3045
+/usmallkatakana 16#30a5
+/usmallkatakanahalfwidth 16#ff69
+/ustraightcyrillic 16#04af
+/ustraightstrokecyrillic 16#04b1
+/utilde 16#0169
+/utildeacute 16#1e79
+/utildebelow 16#1e75
+/uubengali 16#098a
+/uudeva 16#090a
+/uugujarati 16#0a8a
+/uugurmukhi 16#0a0a
+/uumatragurmukhi 16#0a42
+/uuvowelsignbengali 16#09c2
+/uuvowelsigndeva 16#0942
+/uuvowelsigngujarati 16#0ac2
+/uvowelsignbengali 16#09c1
+/uvowelsigndeva 16#0941
+/uvowelsigngujarati 16#0ac1
+/v 16#0076
+/vadeva 16#0935
+/vagujarati 16#0ab5
+/vagurmukhi 16#0a35
+/vakatakana 16#30f7
+/vav 16#05d5
+/vavdagesh 16#fb35
+/vavdagesh65 16#fb35
+/vavdageshhebrew 16#fb35
+/vavhebrew 16#05d5
+/vavholam 16#fb4b
+/vavholamhebrew 16#fb4b
+/vavvavhebrew 16#05f0
+/vavyodhebrew 16#05f1
+/vcircle 16#24e5
+/vdotbelow 16#1e7f
+/vecyrillic 16#0432
+/veharabic 16#06a4
+/vehfinalarabic 16#fb6b
+/vehinitialarabic 16#fb6c
+/vehmedialarabic 16#fb6d
+/vekatakana 16#30f9
+/venus 16#2640
+/verticalbar 16#007c
+/verticallineabovecmb 16#030d
+/verticallinebelowcmb 16#0329
+/verticallinelowmod 16#02cc
+/verticallinemod 16#02c8
+/vewarmenian 16#057e
+/vhook 16#028b
+/vikatakana 16#30f8
+/viramabengali 16#09cd
+/viramadeva 16#094d
+/viramagujarati 16#0acd
+/visargabengali 16#0983
+/visargadeva 16#0903
+/visargagujarati 16#0a83
+/vmonospace 16#ff56
+/voarmenian 16#0578
+/voicediterationhiragana 16#309e
+/voicediterationkatakana 16#30fe
+/voicedmarkkana 16#309b
+/voicedmarkkanahalfwidth 16#ff9e
+/vokatakana 16#30fa
+/vparen 16#24b1
+/vtilde 16#1e7d
+/vturned 16#028c
+/vuhiragana 16#3094
+/vukatakana 16#30f4
+/w 16#0077
+/wacute 16#1e83
+/waekorean 16#3159
+/wahiragana 16#308f
+/wakatakana 16#30ef
+/wakatakanahalfwidth 16#ff9c
+/wakorean 16#3158
+/wasmallhiragana 16#308e
+/wasmallkatakana 16#30ee
+/wattosquare 16#3357
+/wavedash 16#301c
+/wavyunderscorevertical 16#fe34
+/wawarabic 16#0648
+/wawfinalarabic 16#feee
+/wawhamzaabovearabic 16#0624
+/wawhamzaabovefinalarabic 16#fe86
+/wbsquare 16#33dd
+/wcircle 16#24e6
+/wcircumflex 16#0175
+/wdieresis 16#1e85
+/wdotaccent 16#1e87
+/wdotbelow 16#1e89
+/wehiragana 16#3091
+/weierstrass 16#2118
+/wekatakana 16#30f1
+/wekorean 16#315e
+/weokorean 16#315d
+/wgrave 16#1e81
+/whitebullet 16#25e6
+/whitecircle 16#25cb
+/whitecircleinverse 16#25d9
+/whitecornerbracketleft 16#300e
+/whitecornerbracketleftvertical 16#fe43
+/whitecornerbracketright 16#300f
+/whitecornerbracketrightvertical 16#fe44
+/whitediamond 16#25c7
+/whitediamondcontainingblacksmalldiamond 16#25c8
+/whitedownpointingsmalltriangle 16#25bf
+/whitedownpointingtriangle 16#25bd
+/whiteleftpointingsmalltriangle 16#25c3
+/whiteleftpointingtriangle 16#25c1
+/whitelenticularbracketleft 16#3016
+/whitelenticularbracketright 16#3017
+/whiterightpointingsmalltriangle 16#25b9
+/whiterightpointingtriangle 16#25b7
+/whitesmallsquare 16#25ab
+/whitesmilingface 16#263a
+/whitesquare 16#25a1
+/whitestar 16#2606
+/whitetelephone 16#260f
+/whitetortoiseshellbracketleft 16#3018
+/whitetortoiseshellbracketright 16#3019
+/whiteuppointingsmalltriangle 16#25b5
+/whiteuppointingtriangle 16#25b3
+/wihiragana 16#3090
+/wikatakana 16#30f0
+/wikorean 16#315f
+/wmonospace 16#ff57
+/wohiragana 16#3092
+/wokatakana 16#30f2
+/wokatakanahalfwidth 16#ff66
+/won 16#20a9
+/wonmonospace 16#ffe6
+/wowaenthai 16#0e27
+/wparen 16#24b2
+/wring 16#1e98
+/wsuperior 16#02b7
+/wturned 16#028d
+/wynn 16#01bf
+/x 16#0078
+/xabovecmb 16#033d
+/xbopomofo 16#3112
+/xcircle 16#24e7
+/xdieresis 16#1e8d
+/xdotaccent 16#1e8b
+/xeharmenian 16#056d
+/xi 16#03be
+/xmonospace 16#ff58
+/xparen 16#24b3
+/xsuperior 16#02e3
+/y 16#0079
+/yaadosquare 16#334e
+/yabengali 16#09af
+/yacute 16#00fd
+/yadeva 16#092f
+/yaekorean 16#3152
+/yagujarati 16#0aaf
+/yagurmukhi 16#0a2f
+/yahiragana 16#3084
+/yakatakana 16#30e4
+/yakatakanahalfwidth 16#ff94
+/yakorean 16#3151
+/yamakkanthai 16#0e4e
+/yasmallhiragana 16#3083
+/yasmallkatakana 16#30e3
+/yasmallkatakanahalfwidth 16#ff6c
+/yatcyrillic 16#0463
+/ycircle 16#24e8
+/ycircumflex 16#0177
+/ydieresis 16#00ff
+/ydotaccent 16#1e8f
+/ydotbelow 16#1ef5
+/yeharabic 16#064a
+/yehbarreearabic 16#06d2
+/yehbarreefinalarabic 16#fbaf
+/yehfinalarabic 16#fef2
+/yehhamzaabovearabic 16#0626
+/yehhamzaabovefinalarabic 16#fe8a
+/yehhamzaaboveinitialarabic 16#fe8b
+/yehhamzaabovemedialarabic 16#fe8c
+/yehinitialarabic 16#fef3
+/yehmedialarabic 16#fef4
+/yehmeeminitialarabic 16#fcdd
+/yehmeemisolatedarabic 16#fc58
+/yehnoonfinalarabic 16#fc94
+/yehthreedotsbelowarabic 16#06d1
+/yekorean 16#3156
+/yen 16#00a5
+/yenmonospace 16#ffe5
+/yeokorean 16#3155
+/yeorinhieuhkorean 16#3186
+/yerahbenyomohebrew 16#05aa
+/yerahbenyomolefthebrew 16#05aa
+/yericyrillic 16#044b
+/yerudieresiscyrillic 16#04f9
+/yesieungkorean 16#3181
+/yesieungpansioskorean 16#3183
+/yesieungsioskorean 16#3182
+/yetivhebrew 16#059a
+/ygrave 16#1ef3
+/yhook 16#01b4
+/yhookabove 16#1ef7
+/yiarmenian 16#0575
+/yicyrillic 16#0457
+/yikorean 16#3162
+/yinyang 16#262f
+/yiwnarmenian 16#0582
+/ymonospace 16#ff59
+/yod 16#05d9
+/yoddagesh 16#fb39
+/yoddageshhebrew 16#fb39
+/yodhebrew 16#05d9
+/yodyodhebrew 16#05f2
+/yodyodpatahhebrew 16#fb1f
+/yohiragana 16#3088
+/yoikorean 16#3189
+/yokatakana 16#30e8
+/yokatakanahalfwidth 16#ff96
+/yokorean 16#315b
+/yosmallhiragana 16#3087
+/yosmallkatakana 16#30e7
+/yosmallkatakanahalfwidth 16#ff6e
+/yotgreek 16#03f3
+/yoyaekorean 16#3188
+/yoyakorean 16#3187
+/yoyakthai 16#0e22
+/yoyingthai 16#0e0d
+/yparen 16#24b4
+/ypogegrammeni 16#037a
+/ypogegrammenigreekcmb 16#0345
+/yr 16#01a6
+/yring 16#1e99
+/ysuperior 16#02b8
+/ytilde 16#1ef9
+/yturned 16#028e
+/yuhiragana 16#3086
+/yuikorean 16#318c
+/yukatakana 16#30e6
+/yukatakanahalfwidth 16#ff95
+/yukorean 16#3160
+/yusbigcyrillic 16#046b
+/yusbigiotifiedcyrillic 16#046d
+/yuslittlecyrillic 16#0467
+/yuslittleiotifiedcyrillic 16#0469
+/yusmallhiragana 16#3085
+/yusmallkatakana 16#30e5
+/yusmallkatakanahalfwidth 16#ff6d
+/yuyekorean 16#318b
+/yuyeokorean 16#318a
+/yyabengali 16#09df
+/yyadeva 16#095f
+/z 16#007a
+/zaarmenian 16#0566
+/zacute 16#017a
+/zadeva 16#095b
+/zagurmukhi 16#0a5b
+/zaharabic 16#0638
+/zahfinalarabic 16#fec6
+/zahinitialarabic 16#fec7
+/zahiragana 16#3056
+/zahmedialarabic 16#fec8
+/zainarabic 16#0632
+/zainfinalarabic 16#feb0
+/zakatakana 16#30b6
+/zaqefgadolhebrew 16#0595
+/zaqefqatanhebrew 16#0594
+/zarqahebrew 16#0598
+/zayin 16#05d6
+/zayindagesh 16#fb36
+/zayindageshhebrew 16#fb36
+/zayinhebrew 16#05d6
+/zbopomofo 16#3117
+/zcaron 16#017e
+/zcircle 16#24e9
+/zcircumflex 16#1e91
+/zcurl 16#0291
+/zdot 16#017c
+/zdotaccent 16#017c
+/zdotbelow 16#1e93
+/zecyrillic 16#0437
+/zedescendercyrillic 16#0499
+/zedieresiscyrillic 16#04df
+/zehiragana 16#305c
+/zekatakana 16#30bc
+/zero 16#0030
+/zeroarabic 16#0660
+/zerobengali 16#09e6
+/zerodeva 16#0966
+/zerogujarati 16#0ae6
+/zerogurmukhi 16#0a66
+/zerohackarabic 16#0660
+/zeroinferior 16#2080
+/zeromonospace 16#ff10
+/zerooldstyle 16#f730
+/zeropersian 16#06f0
+/zerosuperior 16#2070
+/zerothai 16#0e50
+/zerowidthjoiner 16#feff
+/zerowidthnonjoiner 16#200c
+/zerowidthspace 16#200b
+/zeta 16#03b6
+/zhbopomofo 16#3113
+/zhearmenian 16#056a
+/zhebrevecyrillic 16#04c2
+/zhecyrillic 16#0436
+/zhedescendercyrillic 16#0497
+/zhedieresiscyrillic 16#04dd
+/zihiragana 16#3058
+/zikatakana 16#30b8
+/zinorhebrew 16#05ae
+/zlinebelow 16#1e95
+/zmonospace 16#ff5a
+/zohiragana 16#305e
+/zokatakana 16#30be
+/zparen 16#24b5
+/zretroflexhook 16#0290
+/zstroke 16#01b6
+/zuhiragana 16#305a
+/zukatakana 16#30ba
+.dicttomark readonly def
+/currentglobal where
+{pop currentglobal{setglobal}true setglobal}
+{{}}
+ifelse
+/MacRomanEncoding .findencoding
+/MacGlyphEncoding
+/.notdef/.null/CR
+4 index 32 95 getinterval aload pop
+99 index 128 45 getinterval aload pop
+/notequal/AE
+/Oslash/infinity/plusminus/lessequal/greaterequal
+/yen/mu1/partialdiff/summation/product
+/pi/integral/ordfeminine/ordmasculine/Ohm
+/ae/oslash/questiondown/exclamdown/logicalnot
+/radical/florin/approxequal/increment/guillemotleft
+/guillemotright/ellipsis/nbspace
+174 index 203 12 getinterval aload pop
+/lozenge
+187 index 216 24 getinterval aload pop
+/applelogo
+212 index 241 7 getinterval aload pop
+/overscore
+220 index 249 7 getinterval aload pop
+/Lslash/lslash/Scaron/scaron
+/Zcaron/zcaron/brokenbar/Eth/eth
+/Yacute/yacute/Thorn/thorn/minus
+/multiply/onesuperior/twosuperior/threesuperior/onehalf
+/onequarter/threequarters/franc/Gbreve/gbreve
+/Idotaccent/Scedilla/scedilla/Cacute/cacute
+/Ccaron/ccaron/dmacron
+260 -1 roll pop
+258 packedarray
+7 1 index .registerencoding
+.defineencoding
+exec
+
+%%BeginResource: file (PDF object obj_1)
+1 0 obj
+<<>>endobj
+%%EndResource
+%%EndProlog
+%begin_xml_code
+/pdfmark where {pop true} {false} ifelse
+/currentdistillerparams where {pop currentdistillerparams
+/CoreDistVersion get 5000 ge } {false} ifelse
+and not {userdict /pdfmark /cleartomark load put} if
+[/NamespacePush pdfmark
+[/_objdef {exiftool_metadata_stream} /type /stream /OBJ pdfmark
+[{exiftool_metadata_stream} 2 dict begin /Type /Metadata def
+ /Subtype /XML def currentdict end /PUT pdfmark
+/MetadataString 2943 string def % exact length of metadata
+/TempString 100 string def
+/ConsumeMetadata {
+currentfile TempString readline pop pop
+currentfile MetadataString readstring pop pop
+} bind def
+ConsumeMetadata
+%begin_xml_packet: 2943
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
+
+ <rdf:Description rdf:about=''
+ xmlns:dc='http://purl.org/dc/elements/1.1/'>
+ <dc:creator>
+ <rdf:Seq>
+ <rdf:li>Zamzar</rdf:li>
+ </rdf:Seq>
+ </dc:creator>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:pdf='http://ns.adobe.com/pdf/1.3/'>
+ <pdf:Producer>Zamzar</pdf:Producer>
+ </rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<?xpacket end='w'?>
+%end_xml_packet
+[{exiftool_metadata_stream} MetadataString /PUT pdfmark
+[/Document 1 dict begin
+ /Metadata {exiftool_metadata_stream} def currentdict end /BDC pdfmark
+[/NamespacePop pdfmark
+%end_xml_code
+%%Page: 1 1
+%%BeginPageSetup
+4 0 obj
+<</Type/Page/MediaBox [0 0 256 256]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+>>
+/Contents 5 0 R
+>>
+endobj
+%%EndPageSetup
+/pagesave save def
+5 0 obj
+<</Length 2539>>stream
+q 0.1 0 0 0.1 0 0 cm
+0.462646 0.290283 0.736328 RG
+0.462646 0.290283 0.736328 rg
+600 2560 m
+1960 2560 l
+2291.37 2560 2560 2291.37 2560 1960 c
+2560 600 l
+2560 268.629 2291.37 0 1960 0 c
+600 0 l
+268.629 0 0 268.629 0 600 c
+0 1960 l
+0 2291.37 268.629 2560 600 2560 c
+h
+600 2560 m
+f
+1 1 1 RG
+1 1 1 rg
+1665.78 904.02 m
+1739.61 911.641 1795.59 975.27 1793.05 1051.64 c
+1790.51 1127.97 1726.88 1189.06 1650.51 1189.06 c
+1645.43 1189.06 l
+1566.52 1186.52 1505.47 1120.35 1508.01 1041.45 c
+1510.55 1003.28 1525.82 970.199 1548.71 947.27 c
+1462.19 776.762 1329.84 652.031 1131.33 547.699 c
+996.449 476.449 856.449 450.98 716.48 468.789 c
+601.949 484.059 512.852 534.961 456.879 618.949 c
+375.43 743.672 367.809 878.551 436.52 1013.44 c
+484.879 1110.16 561.211 1181.45 609.57 1217.07 c
+599.41 1250.16 584.141 1306.13 576.48 1346.87 c
+207.461 1079.61 245.629 718.199 357.621 547.699 c
+441.602 420.469 612.109 341.559 800.469 341.559 c
+851.371 341.559 902.27 346.641 953.16 359.371 c
+1278.95 423.012 1525.82 616.41 1665.78 904.02 c
+h
+1665.78 904.02 m
+f
+2113.71 1219.61 m
+1920.31 1446.13 1635.23 1570.82 1309.49 1570.82 c
+1268.75 1570.82 l
+1245.86 1616.64 1197.5 1647.19 1144.06 1647.19 c
+1138.95 1647.19 l
+1060.08 1644.65 998.98 1578.48 1001.52 1499.57 c
+1004.06 1423.2 1067.7 1362.15 1144.06 1362.15 c
+1149.14 1362.15 l
+1205.12 1364.69 1253.48 1400.31 1273.87 1448.67 c
+1319.65 1448.67 l
+1513.09 1448.67 1696.33 1392.66 1861.76 1283.24 c
+1989.02 1199.26 2080.63 1089.8 2131.52 957.461 c
+2174.8 850.59 2172.27 746.211 2126.45 657.148 c
+2055.2 522.27 1935.59 448.441 1777.77 448.441 c
+1675.98 448.441 1579.26 478.98 1528.36 501.871 c
+1500.35 476.449 1449.45 435.699 1413.83 410.27 c
+1523.24 359.371 1635.23 331.371 1742.15 331.371 c
+1986.48 331.371 2167.19 466.25 2235.9 601.129 c
+2309.69 748.75 2304.61 1003.28 2113.71 1219.61 c
+h
+2113.71 1219.61 m
+f
+820.82 860.738 m
+823.359 784.371 886.988 723.32 963.359 723.32 c
+968.441 723.32 l
+1047.34 725.859 1108.44 792.031 1105.86 870.941 c
+1103.32 947.27 1039.69 1008.36 963.359 1008.36 c
+958.238 1008.36 l
+953.16 1008.36 945.551 1008.36 940.43 1005.82 c
+836.09 1178.87 792.809 1367.23 808.09 1570.82 c
+818.281 1723.52 869.18 1855.86 958.238 1965.31 c
+1032.07 2059.49 1174.61 2105.27 1271.29 2107.85 c
+1541.09 2112.93 1655.63 1776.99 1663.24 1642.07 c
+1696.33 1634.45 1752.3 1616.64 1790.51 1603.91 c
+1759.96 2016.21 1505.47 2230 1261.13 2230 c
+1032.07 2230 820.82 2064.57 736.84 1820.23 c
+619.77 1494.45 696.09 1181.45 838.629 934.531 c
+825.898 916.762 818.281 888.75 820.82 860.738 c
+h
+820.82 860.738 m
+f
+Q
+
+endstream
+endobj
+pagesave restore
+%%PageTrailer
+%%Trailer
+end
+[/EMC pdfmark
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Regex-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Regex-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..6be7bab239
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Regex-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Regex-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Regex-Dark.eps
new file mode 100644
index 0000000000..cb9be684b9
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Regex-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Regex-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Regex-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..10e2251952
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Regex-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Regex-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Regex-Light.eps
new file mode 100644
index 0000000000..00f3860754
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Regex-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Remix-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Remix-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..1198fa444d
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Remix-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Remix-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Remix-Dark.eps
new file mode 100644
index 0000000000..d04ee78f62
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Remix-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Remix-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Remix-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..9851e833af
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Remix-Light-eps-converted-to.pdf
@@ -0,0 +1,103 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+6 0 obj
+<</Length 7 0 R/Filter /FlateDecode>>
+stream
+xU10
+)%RI|?CYR p0!E?2dk_niXL =|M8Pη$օ/K눰K]6/](Cu%-wdKz{4}M(E*ҖU> AudBe µ
+9a%iz2D-Th-J_:ϵT0%4M9k{!pm!蝉]%:p@)<dyzFy 11c1b*y_t8 }̃/+s>X`h"[2$}biNc9WȎj1"*Le(F(Ė
+nn["ӰT맏>SGDNe
+4s{sGM15sd''
+^DN`cЊ;Ǘ'<&GTu%,z4ޞ~+1ȿS_N˗iDMendstream
+endobj
+7 0 obj
+525
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Group 5 0 R
+/Resources<</ProcSet[/PDF]
+/ExtGState 10 0 R
+>>
+/Contents 6 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 11 0 R
+>>
+endobj
+8 0 obj
+<</Type/ExtGState
+/AIS false
+/CA 0.8
+/ca 0.8>>endobj
+9 0 obj
+<</Type/ExtGState
+/AIS false
+/CA 1
+/ca 1>>endobj
+10 0 obj
+<</R9
+9 0 R/R8
+8 0 R>>
+endobj
+5 0 obj
+<</Type/Group
+/S/Transparency
+/I true
+/CS/DeviceRGB>>endobj
+11 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:23:10+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:23:10+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:d82b8879-143f-11ef-0000-824f239479ae'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514132310+02'00')
+/ModDate(D:20240514132310+02'00')>>endobj
+xref
+0 12
+0000000000 65535 f
+0000001103 00000 n
+0000002652 00000 n
+0000001044 00000 n
+0000000899 00000 n
+0000001325 00000 n
+0000000285 00000 n
+0000000880 00000 n
+0000001168 00000 n
+0000001229 00000 n
+0000001286 00000 n
+0000001393 00000 n
+trailer
+<< /Size 12 /Root 1 0 R /Info 2 0 R
+/ID [<6904C338649981BA2BA7384F0A7B9916><6904C338649981BA2BA7384F0A7B9916>]
+>>
+startxref
+2777
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Remix-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Remix-Light.eps
new file mode 100644
index 0000000000..619cc276d9
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Remix-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Replit-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Replit-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..c0c9e67e4e
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Replit-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Replit-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Replit-Dark.eps
new file mode 100644
index 0000000000..12b1a64a90
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Replit-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Replit-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Replit-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..e052b17ec3
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Replit-Light-eps-converted-to.pdf
@@ -0,0 +1,73 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+x]QKn0>e|RyI)q`&?1'Y?;4"ptjPSE׫Ntêp.yxiiW(Em/>xS z>t:U"T{ˠ"SGi\,dbeHLctg`l|),g0
+S=HlOǭpܺP&*BI9$J3iv{~ ڹ/"q! Czz9j7pKp?[x(sP<\+^g[vzpendstream
+endobj
+6 0 obj
+312
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 7 0 R
+>>
+endobj
+7 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:23:12+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:23:12+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:d95cb579-143f-11ef-0000-07f1bd75a8c2'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514132312+02'00')
+/ModDate(D:20240514132312+02'00')>>endobj
+xref
+0 8
+0000000000 65535 f
+0000000859 00000 n
+0000002181 00000 n
+0000000800 00000 n
+0000000686 00000 n
+0000000285 00000 n
+0000000667 00000 n
+0000000923 00000 n
+trailer
+<< /Size 8 /Root 1 0 R /Info 2 0 R
+/ID [<032D6EA97672D059971706A8DAA8F695><032D6EA97672D059971706A8DAA8F695>]
+>>
+startxref
+2306
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Replit-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Replit-Light.eps
new file mode 100644
index 0000000000..8688da89d1
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Replit-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Rider-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Rider-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..85124d3585
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Rider-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Rider-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Rider-Dark.eps
new file mode 100644
index 0000000000..146e5a6e4f
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Rider-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Rider-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Rider-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..633ac51f5b
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Rider-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Rider-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Rider-Light.eps
new file mode 100644
index 0000000000..cc49fb19a4
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Rider-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_RobloxStudio-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_RobloxStudio-eps-converted-to.pdf
new file mode 100644
index 0000000000..c47e6d833b
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_RobloxStudio-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_RobloxStudio.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_RobloxStudio.eps
new file mode 100644
index 0000000000..64eae2e58b
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_RobloxStudio.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Rocket-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Rocket-eps-converted-to.pdf
new file mode 100644
index 0000000000..e88a0ebccf
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Rocket-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Rocket.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Rocket.eps
new file mode 100644
index 0000000000..efdbdfd9e4
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Rocket.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_RollupJS-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_RollupJS-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..8e74542e52
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_RollupJS-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_RollupJS-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_RollupJS-Dark.eps
new file mode 100644
index 0000000000..254aab2f4b
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_RollupJS-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_RollupJS-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_RollupJS-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..15cd69d915
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_RollupJS-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_RollupJS-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_RollupJS-Light.eps
new file mode 100644
index 0000000000..61f272d408
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_RollupJS-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Ruby-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Ruby-eps-converted-to.pdf
new file mode 100644
index 0000000000..bc4e866f12
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Ruby-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Ruby.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Ruby.eps
new file mode 100644
index 0000000000..b1c76e5190
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Ruby.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Rust-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Rust-eps-converted-to.pdf
new file mode 100644
index 0000000000..8a7ca66df0
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Rust-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Rust.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Rust.eps
new file mode 100644
index 0000000000..81abbc04e9
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Rust.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_SQLite-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_SQLite-eps-converted-to.pdf
new file mode 100644
index 0000000000..812cf45e26
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_SQLite-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_SQLite.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_SQLite.eps
new file mode 100644
index 0000000000..8edefa1d65
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_SQLite.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_SVG-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_SVG-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..367fe80a7e
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_SVG-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_SVG-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_SVG-Dark.eps
new file mode 100644
index 0000000000..9808dd6367
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_SVG-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_SVG-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_SVG-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..e53da490b0
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_SVG-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_SVG-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_SVG-Light.eps
new file mode 100644
index 0000000000..90b34d9425
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_SVG-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Sass-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Sass-eps-converted-to.pdf
new file mode 100644
index 0000000000..b8db8d26bb
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Sass-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Sass.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Sass.eps
new file mode 100644
index 0000000000..67d1d85b82
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Sass.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Scala-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Scala-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..a7cc8bf70f
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Scala-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Scala-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Scala-Dark.eps
new file mode 100644
index 0000000000..c0849e30e4
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Scala-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Scala-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Scala-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..48a4981bfd
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Scala-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Scala-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Scala-Light.eps
new file mode 100644
index 0000000000..1e06e87080
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Scala-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_SciKitLearn-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_SciKitLearn-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..ff42a6e3fd
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_SciKitLearn-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_SciKitLearn-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_SciKitLearn-Light.eps
new file mode 100644
index 0000000000..71a983ea4d
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_SciKitLearn-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_ScikitLearn-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_ScikitLearn-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..11a592ab88
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_ScikitLearn-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_ScikitLearn-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_ScikitLearn-Dark.eps
new file mode 100644
index 0000000000..7c9d5f2699
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_ScikitLearn-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Selenium-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Selenium-eps-converted-to.pdf
new file mode 100644
index 0000000000..09a606c34b
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Selenium-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Selenium.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Selenium.eps
new file mode 100644
index 0000000000..17c168a9e8
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Selenium.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Sentry-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Sentry-eps-converted-to.pdf
new file mode 100644
index 0000000000..d0e37bf39b
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Sentry-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Sentry.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Sentry.eps
new file mode 100644
index 0000000000..0847a1b81a
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Sentry.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Sequelize-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Sequelize-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..edb3c34c03
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Sequelize-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Sequelize-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Sequelize-Dark.eps
new file mode 100644
index 0000000000..bdeac78a3a
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Sequelize-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Sequelize-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Sequelize-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..9863d72cd3
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Sequelize-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Sequelize-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Sequelize-Light.eps
new file mode 100644
index 0000000000..b0773c0d23
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Sequelize-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Sketchup-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Sketchup-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..7a9c033ea4
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Sketchup-Dark-eps-converted-to.pdf
@@ -0,0 +1,75 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xMRAn!
+^xF߰RR5Ґǎ3S|xgm9
+U[V_7~F@l$dxPہKdv]P=?3oПP}pXڃ6+
+I|gȬ{1ł@|t9HDgQdwM$|>o-*WȰ&bKcȴ#֚pSֆ419u. ,!jy+F-2ar[&L<j,d2udV;*ӧse_>Gendstream
+endobj
+6 0 obj
+333
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 7 0 R
+>>
+endobj
+7 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:23:31+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:23:31+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:e4afe0fa-143f-11ef-0000-943a03af1aa4'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514132331+02'00')
+/ModDate(D:20240514132331+02'00')>>endobj
+xref
+0 8
+0000000000 65535 f
+0000000880 00000 n
+0000002202 00000 n
+0000000821 00000 n
+0000000707 00000 n
+0000000285 00000 n
+0000000688 00000 n
+0000000944 00000 n
+trailer
+<< /Size 8 /Root 1 0 R /Info 2 0 R
+/ID [<95A3CDDFCA291158EDFD842156423CCB><95A3CDDFCA291158EDFD842156423CCB>]
+>>
+startxref
+2327
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Sketchup-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Sketchup-Dark.eps
new file mode 100644
index 0000000000..c3cd4a3b19
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Sketchup-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Sketchup-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Sketchup-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..856b6dbabe
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Sketchup-Light-eps-converted-to.pdf
@@ -0,0 +1,76 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xMRKnC1>2 gv,/:؎TE<AGj|LY_MmtNXA&=˙4nSGu1<O)@+d
+vՈ^P=?to]<ӟo,<eeEw'^@wMcH I$M t]gEb}ߍ'Y־$¶iKx ^&eLR֢#62^{ic,
+i9)O>Dga#1#JJ6٫E
+θ/e
+sfK(r,. D8 endstream
+endobj
+6 0 obj
+336
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 7 0 R
+>>
+endobj
+7 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:23:32+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:23:32+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:e548777a-143f-11ef-0000-31b2a32af474'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514132332+02'00')
+/ModDate(D:20240514132332+02'00')>>endobj
+xref
+0 8
+0000000000 65535 f
+0000000883 00000 n
+0000002205 00000 n
+0000000824 00000 n
+0000000710 00000 n
+0000000285 00000 n
+0000000691 00000 n
+0000000947 00000 n
+trailer
+<< /Size 8 /Root 1 0 R /Info 2 0 R
+/ID [<B480B036840686F5B82C8F0D28D97ED4><B480B036840686F5B82C8F0D28D97ED4>]
+>>
+startxref
+2330
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Sketchup-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Sketchup-Light.eps
new file mode 100644
index 0000000000..d8808388ad
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Sketchup-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_SolidJS-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_SolidJS-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..b28ab09e4d
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_SolidJS-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_SolidJS-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_SolidJS-Dark.eps
new file mode 100644
index 0000000000..f6b5fa7960
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_SolidJS-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_SolidJS-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_SolidJS-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..d3d1b7a041
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_SolidJS-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_SolidJS-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_SolidJS-Light.eps
new file mode 100644
index 0000000000..2f441cbb08
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_SolidJS-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Solidity-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Solidity-eps-converted-to.pdf
new file mode 100644
index 0000000000..ab47e4d8d4
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Solidity-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Solidity.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Solidity.eps
new file mode 100644
index 0000000000..e9d92449a1
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Solidity.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Spring-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Spring-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..b9e438068a
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Spring-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Spring-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Spring-Dark.eps
new file mode 100644
index 0000000000..3bc72585e7
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Spring-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Spring-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Spring-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..7889644463
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Spring-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Spring-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Spring-Light.eps
new file mode 100644
index 0000000000..93dd2110ab
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Spring-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_StackOverflow-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_StackOverflow-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..fd5e21e8e9
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_StackOverflow-Dark-eps-converted-to.pdf
@@ -0,0 +1,75 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xmRKNC1 ܿSXşcpϢ, 켔*d<{9h`(D$}gۡ%8H}ANeNM 'eo^3Դ&k]uYr6Zp`e
+
+q=Do\PO p熩 3?P}uG;w Dʹ:jߔZ*V4آB\5 wy MSF`SI"x)o
+ɥcYI<gBYi9R[+\AL?ijǰJEL'T&QoIn-dXuwx*$m7T*v7||Vwendstream
+endobj
+6 0 obj
+357
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 7 0 R
+>>
+endobj
+7 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:23:38+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:23:38+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:e8dbfe7a-143f-11ef-0000-0f780d513bb5'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514132338+02'00')
+/ModDate(D:20240514132338+02'00')>>endobj
+xref
+0 8
+0000000000 65535 f
+0000000904 00000 n
+0000002226 00000 n
+0000000845 00000 n
+0000000731 00000 n
+0000000285 00000 n
+0000000712 00000 n
+0000000968 00000 n
+trailer
+<< /Size 8 /Root 1 0 R /Info 2 0 R
+/ID [<A25A80DBD46DEDA4F2301C60F64F4719><A25A80DBD46DEDA4F2301C60F64F4719>]
+>>
+startxref
+2351
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_StackOverflow-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_StackOverflow-Dark.eps
new file mode 100644
index 0000000000..5104ab7754
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_StackOverflow-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_StackOverflow-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_StackOverflow-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..9e389c0b4f
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_StackOverflow-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_StackOverflow-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_StackOverflow-Light.eps
new file mode 100644
index 0000000000..c7a48cdf19
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_StackOverflow-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_StyledComponents-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_StyledComponents-eps-converted-to.pdf
new file mode 100644
index 0000000000..a1b9122ea5
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_StyledComponents-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_StyledComponents.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_StyledComponents.eps
new file mode 100644
index 0000000000..e01cd76df0
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_StyledComponents.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Sublime-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Sublime-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..d18c2a8f44
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Sublime-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Sublime-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Sublime-Dark.eps
new file mode 100644
index 0000000000..9de564483d
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Sublime-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Sublime-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Sublime-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..c8fae154ba
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Sublime-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Sublime-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Sublime-Light.eps
new file mode 100644
index 0000000000..933beef148
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Sublime-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Supabase-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Supabase-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..bb0629d5e8
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Supabase-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Supabase-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Supabase-Dark.eps
new file mode 100644
index 0000000000..f65c3e6260
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Supabase-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Supabase-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Supabase-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..2a871c0ce5
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Supabase-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Supabase-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Supabase-Light.eps
new file mode 100644
index 0000000000..f5c7277bcc
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Supabase-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Svelte-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Svelte-eps-converted-to.pdf
new file mode 100644
index 0000000000..d909379163
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Svelte-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Svelte.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Svelte.eps
new file mode 100644
index 0000000000..66ef95c46e
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Svelte.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Swift-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Swift-eps-converted-to.pdf
new file mode 100644
index 0000000000..dd56dbc6e5
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Swift-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Swift.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Swift.eps
new file mode 100644
index 0000000000..4e6ecbd011
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Swift.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Symfony-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Symfony-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..f1eeea9e85
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Symfony-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Symfony-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Symfony-Dark.eps
new file mode 100644
index 0000000000..89a2c5ed78
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Symfony-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Symfony-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Symfony-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..22bfb71804
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Symfony-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Symfony-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Symfony-Light.eps
new file mode 100644
index 0000000000..8d34e8c67f
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Symfony-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_TailwindCSS-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_TailwindCSS-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..390cf682d6
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_TailwindCSS-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_TailwindCSS-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_TailwindCSS-Dark.eps
new file mode 100644
index 0000000000..052a75c410
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_TailwindCSS-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_TailwindCSS-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_TailwindCSS-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..35e2f6a0c3
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_TailwindCSS-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_TailwindCSS-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_TailwindCSS-Light.eps
new file mode 100644
index 0000000000..67870b1bf5
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_TailwindCSS-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Tauri-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Tauri-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..5ac59dee92
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Tauri-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Tauri-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Tauri-Dark.eps
new file mode 100644
index 0000000000..aae93613f2
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Tauri-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Tauri-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Tauri-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..fc467f2125
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Tauri-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Tauri-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Tauri-Light.eps
new file mode 100644
index 0000000000..0da3bfc826
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Tauri-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_TensorFlow-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_TensorFlow-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..1c35d335c4
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_TensorFlow-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_TensorFlow-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_TensorFlow-Dark.eps
new file mode 100644
index 0000000000..2108e23620
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_TensorFlow-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_TensorFlow-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_TensorFlow-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..afb76b8b0f
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_TensorFlow-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_TensorFlow-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_TensorFlow-Light.eps
new file mode 100644
index 0000000000..cd561a2c05
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_TensorFlow-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Terraform-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Terraform-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..bcf94b9e4b
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Terraform-Dark-eps-converted-to.pdf
@@ -0,0 +1,75 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+x}Q9n0
+)(>#o0.!e:f֐x@s;FDs&SUZJXBM&t>5,Ca?!I3HAKFܒ߶=@_r[yc5O%
+]&3ui%jLf::tb@fNk&ws*5K1Qkb#9DpGS70~X r'BYVLa9:#h{9*eY+0setubEDz\
+. L}endstream
+endobj
+6 0 obj
+276
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 7 0 R
+>>
+endobj
+7 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:23:56+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:23:56+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:f396937a-143f-11ef-0000-be8a45fd7cb4'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514132356+02'00')
+/ModDate(D:20240514132356+02'00')>>endobj
+xref
+0 8
+0000000000 65535 f
+0000000823 00000 n
+0000002145 00000 n
+0000000764 00000 n
+0000000650 00000 n
+0000000285 00000 n
+0000000631 00000 n
+0000000887 00000 n
+trailer
+<< /Size 8 /Root 1 0 R /Info 2 0 R
+/ID [<834323B93782F5A89C4868CFFF52FABE><834323B93782F5A89C4868CFFF52FABE>]
+>>
+startxref
+2270
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Terraform-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Terraform-Dark.eps
new file mode 100644
index 0000000000..c26e0bc0fa
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Terraform-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Terraform-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Terraform-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..06208ed397
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Terraform-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Terraform-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Terraform-Light.eps
new file mode 100644
index 0000000000..8e480b5d3a
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Terraform-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_ThreeJS-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_ThreeJS-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..4b100f87e9
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_ThreeJS-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_ThreeJS-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_ThreeJS-Dark.eps
new file mode 100644
index 0000000000..0fc1157900
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_ThreeJS-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_ThreeJS-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_ThreeJS-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..28814087ca
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_ThreeJS-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_ThreeJS-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_ThreeJS-Light.eps
new file mode 100644
index 0000000000..dda0237270
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_ThreeJS-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Twitter-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Twitter-eps-converted-to.pdf
new file mode 100644
index 0000000000..30d63c5c57
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Twitter-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Twitter.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Twitter.eps
new file mode 100644
index 0000000000..7dc30add2a
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Twitter.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_TypeScript-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_TypeScript-eps-converted-to.pdf
new file mode 100644
index 0000000000..82ec0c81e0
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_TypeScript-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_TypeScript.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_TypeScript.eps
new file mode 100644
index 0000000000..e9a0d5d366
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_TypeScript.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Ubuntu-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Ubuntu-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..efb1d086aa
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Ubuntu-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Ubuntu-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Ubuntu-Dark.eps
new file mode 100644
index 0000000000..c3f924318b
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Ubuntu-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Ubuntu-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Ubuntu-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..5a70c5bec0
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Ubuntu-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Ubuntu-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Ubuntu-Light.eps
new file mode 100644
index 0000000000..3fee331051
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Ubuntu-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Unity-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Unity-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..c2136f47e8
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Unity-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Unity-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Unity-Dark.eps
new file mode 100644
index 0000000000..cffafbdfff
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Unity-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Unity-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Unity-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..f3e5288a4b
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Unity-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Unity-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Unity-Light.eps
new file mode 100644
index 0000000000..fd05d84dd6
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Unity-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_UnrealEngine-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_UnrealEngine-eps-converted-to.pdf
new file mode 100644
index 0000000000..50e76df9c6
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_UnrealEngine-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_UnrealEngine.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_UnrealEngine.eps
new file mode 100644
index 0000000000..70e0d16aeb
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_UnrealEngine.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_V-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_V-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..7f3867bcce
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_V-Dark-eps-converted-to.pdf
@@ -0,0 +1,75 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xeRA#1~2~ƾ=$L+Hi)omĵ<gAܳf-b".^.:Z)> Q9hN9IzgmD&r v/\}/2,i4zXқBY'ըe% S{*wbu݂-|f B<&>))arVݓK0Sb0
+؃QVȍvsV|ӥe$cy(Z
+dr@SH͍8hNOT(淯bm5smͱtlzmkȲ%:eNorb6
+8o6Ye8t]u\e*q13'&ɾNӊO{ʯ7endstream
+endobj
+6 0 obj
+432
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 7 0 R
+>>
+endobj
+7 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:24:07+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:24:07+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:fa250afa-143f-11ef-0000-59290eabf130'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514132407+02'00')
+/ModDate(D:20240514132407+02'00')>>endobj
+xref
+0 8
+0000000000 65535 f
+0000000979 00000 n
+0000002301 00000 n
+0000000920 00000 n
+0000000806 00000 n
+0000000285 00000 n
+0000000787 00000 n
+0000001043 00000 n
+trailer
+<< /Size 8 /Root 1 0 R /Info 2 0 R
+/ID [<91E0499E128AAD1504ADFA49A637B856><91E0499E128AAD1504ADFA49A637B856>]
+>>
+startxref
+2426
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_V-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_V-Dark.eps
new file mode 100644
index 0000000000..7f3bab5481
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_V-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_V-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_V-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..0422c9e48e
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_V-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_V-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_V-Light.eps
new file mode 100644
index 0000000000..6bcbfd2ecb
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_V-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_VIM-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_VIM-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..99b4b582ec
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_VIM-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_VIM-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_VIM-Dark.eps
new file mode 100644
index 0000000000..4502bec378
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_VIM-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_VIM-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_VIM-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..a75e97298e
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_VIM-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_VIM-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_VIM-Light.eps
new file mode 100644
index 0000000000..f37210eb33
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_VIM-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_VSCode-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_VSCode-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..ce873dcf38
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_VSCode-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_VSCode-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_VSCode-Dark.eps
new file mode 100644
index 0000000000..8f473b05d2
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_VSCode-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_VSCode-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_VSCode-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..7de6e20ac6
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_VSCode-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_VSCode-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_VSCode-Light.eps
new file mode 100644
index 0000000000..41467f19b6
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_VSCode-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_VSCodium-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_VSCodium-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..0cc803937e
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_VSCodium-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_VSCodium-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_VSCodium-Dark.eps
new file mode 100644
index 0000000000..d5e9168074
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_VSCodium-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_VSCodium-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_VSCodium-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..a8157ef0b1
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_VSCodium-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_VSCodium-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_VSCodium-Light.eps
new file mode 100644
index 0000000000..c525809e45
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_VSCodium-Light.eps
@@ -0,0 +1,142 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: cairo 1.16.0 (https://cairographics.org)
+%%CreationDate: Sun May 12 20:26:21 2024
+%%Pages: 1
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 3
+%%BoundingBox: 0 0 192 192
+%%EndComments
+%%BeginProlog
+50 dict begin
+/q { gsave } bind def
+/Q { grestore } bind def
+/cm { 6 array astore concat } bind def
+/w { setlinewidth } bind def
+/J { setlinecap } bind def
+/j { setlinejoin } bind def
+/M { setmiterlimit } bind def
+/d { setdash } bind def
+/m { moveto } bind def
+/l { lineto } bind def
+/c { curveto } bind def
+/h { closepath } bind def
+/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto
+ 0 exch rlineto 0 rlineto closepath } bind def
+/S { stroke } bind def
+/f { fill } bind def
+/f* { eofill } bind def
+/n { newpath } bind def
+/W { clip } bind def
+/W* { eoclip } bind def
+/BT { } bind def
+/ET { } bind def
+/BDC { mark 3 1 roll /BDC pdfmark } bind def
+/EMC { mark /EMC pdfmark } bind def
+/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def
+/Tj { show currentpoint cairo_store_point } bind def
+/TJ {
+ {
+ dup
+ type /stringtype eq
+ { show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse
+ } forall
+ currentpoint cairo_store_point
+} bind def
+/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore
+ cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def
+/Tf { pop /cairo_font exch def /cairo_font_matrix where
+ { pop cairo_selectfont } if } bind def
+/Td { matrix translate cairo_font_matrix matrix concatmatrix dup
+ /cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point
+ /cairo_font where { pop cairo_selectfont } if } bind def
+/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def
+ cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def
+/g { setgray } bind def
+/rg { setrgbcolor } bind def
+/d1 { setcachedevice } bind def
+/cairo_data_source {
+ CairoDataIndex CairoData length lt
+ { CairoData CairoDataIndex get /CairoDataIndex CairoDataIndex 1 add def }
+ { () } ifelse
+} def
+/cairo_flush_ascii85_file { cairo_ascii85_file status { cairo_ascii85_file flushfile } if } def
+/cairo_image { image cairo_flush_ascii85_file } def
+/cairo_imagemask { imagemask cairo_flush_ascii85_file } def
+%%EndProlog
+%%BeginSetup
+%%EndSetup
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox: 0 0 192 192
+%%EndPageSetup
+q 0 0 192 192 rectclip
+1 0 0 -1 0 192 cm q
+q
+0 0 192 192 re W n
+ q
+0.956863 0.94902 0.929412 rg
+147 0 m 45 0 l 20.148 0 0 20.148 0 45 c 0 147 l 0 171.852 20.148 192 45
+ 192 c 147 192 l 171.852 192 192 171.852 192 147 c 192 45 l 192 20.148 171.852
+ 0 147 0 c h
+147 0 m f
+Q q
+30 30 131.25 131.25 re W n
+q
+30 30 132 132 re W n
+ q
+q
+93.34 32.984 m 89.594 35.387 88.516 40.367 90.93 44.098 c 104.195 64.645
+ 107.328 80.145 105.969 93.727 c 100.477 119.734 88.543 125.012 78.109 125.012
+ c 67.926 125.012 70.652 108.25 78.309 103.344 c 82.879 100.488 88.73 98.633
+ 93.223 98.633 c 97.676 98.633 101.285 95.035 101.285 90.598 c 101.285 86.156
+ 97.676 82.562 93.223 82.562 c 87.977 82.562 82.828 83.664 78.023 85.539
+ c 79.004 80.906 79.367 75.902 78.098 70.582 c 76.172 62.5 70.625 54.785
+ 60.996 47.301 c 59.309 45.988 57.168 45.402 55.047 45.664 c 52.926 45.926
+ 50.992 47.02 49.68 48.699 c 46.945 52.203 47.578 57.254 51.094 59.98 c
+58.941 66.074 61.531 70.586 62.418 74.301 c 63.305 78.012 62.59 81.996 60.812
+ 87.469 c 58.535 94.848 55.895 101.43 54.738 107.746 c 54.168 110.852 54.121
+ 114.234 53.973 116.938 c 48.324 111.43 46.109 104.16 46.109 93.535 c 46.109
+ 89.094 42.5 85.496 38.051 85.496 c 33.602 85.5 29.996 89.098 29.996 93.535
+ c 29.996 108.047 34.238 121.852 45.613 131.062 c 55.906 140.871 82.086
+137.246 82.086 152.992 c 82.086 157.438 88.594 159.602 93.043 159.602 c
+97.609 159.602 103.352 156.551 103.352 152.992 c 103.352 135.129 122.18
+124.27 153.176 124.316 c 157.629 124.324 161.238 120.727 161.246 116.289
+ c 161.254 111.848 157.652 108.242 153.199 108.234 c 151.082 108.234 149.016
+ 108.305 146.977 108.426 c 150.441 100.277 151.98 91.305 151.66 81.613 c
+ 151.516 77.176 147.789 73.695 143.344 73.84 c 138.891 73.984 135.402 77.703
+ 135.547 82.145 c 135.965 94.832 135.492 106.164 126.035 112.137 c 123.348
+ 113.836 120.223 115.309 117.262 115.309 c 119.562 109.051 121.301 102.441
+ 122.012 95.324 c 122.465 90.777 122.512 85.379 121.996 81.188 c 121.191
+ 74.691 120.219 67.32 122.684 61.773 c 124.902 56.992 129.863 54.988 137.152
+ 54.988 c 141.602 54.984 145.203 51.387 145.207 46.953 c 145.207 42.512
+141.602 38.91 137.152 38.906 c 126.32 38.906 118.113 44.609 113.457 51.496
+ c 111.023 46.297 108.062 40.941 104.48 35.398 c 103.324 33.605 101.504
+32.348 99.414 31.895 c 98.379 31.668 97.312 31.648 96.27 31.836 c 95.227
+ 32.023 94.23 32.414 93.34 32.984 c h
+93.34 32.984 m W n
+[0.75 0 0 0.75 0 0] concat
+/CairoFunction
+ << /FunctionType 2
+ /Domain [ 0 1 ]
+ /C0 [ 0.384314 0.627451 0.917647 ]
+ /C1 [ 0.101961 0.372549 0.705882 ]
+ /N 1
+ >>
+def
+ << /ShadingType 2
+ /ColorSpace /DeviceRGB
+ /Coords [ 39.994598 42.2785 209.164001 205.503006 ]
+ /Extend [ true true ]
+ /Function CairoFunction
+ >>
+shfill
+Q
+ Q
+Q
+ Q
+Q
+Q Q
+showpage
+%%Trailer
+end
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Vala-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Vala-eps-converted-to.pdf
new file mode 100644
index 0000000000..05ca28e0b9
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Vala-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Vala.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Vala.eps
new file mode 100644
index 0000000000..ce0b457582
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Vala.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Vercel-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Vercel-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..a2152f703e
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Vercel-Dark-eps-converted-to.pdf
@@ -0,0 +1,72 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xMK D>Ok0g@JHe#E`_I8#'Mi"[ͭ)TCV2K'yĥˮ$ka4*Kj^H$ `ߠȿ].1h0b+TTthkM;endstream
+endobj
+6 0 obj
+151
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 7 0 R
+>>
+endobj
+7 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:24:10+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:24:10+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:fbeece7a-143f-11ef-0000-1d8c79741b8c'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514132410+02'00')
+/ModDate(D:20240514132410+02'00')>>endobj
+xref
+0 8
+0000000000 65535 f
+0000000698 00000 n
+0000002020 00000 n
+0000000639 00000 n
+0000000525 00000 n
+0000000285 00000 n
+0000000506 00000 n
+0000000762 00000 n
+trailer
+<< /Size 8 /Root 1 0 R /Info 2 0 R
+/ID [(wK1\230\363\367hL\0366[NT]m<)(wK1\230\363\367hL\0366[NT]m<)]
+>>
+startxref
+2145
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Vercel-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Vercel-Dark.eps
new file mode 100644
index 0000000000..87cda9bd20
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Vercel-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Vercel-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Vercel-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..fcc3c27572
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Vercel-Light-eps-converted-to.pdf
@@ -0,0 +1,72 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xMK0D',Y8fb"E17q88{i:}vsP߇pWNГIE]Wm:HK*/$ X0joP"︻%ϡ7*^1e-X6%9֞vТ<endstream
+endobj
+6 0 obj
+152
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 7 0 R
+>>
+endobj
+7 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:24:11+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:24:11+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:fc8764fa-143f-11ef-0000-fe54e8c4bfd7'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514132411+02'00')
+/ModDate(D:20240514132411+02'00')>>endobj
+xref
+0 8
+0000000000 65535 f
+0000000699 00000 n
+0000002021 00000 n
+0000000640 00000 n
+0000000526 00000 n
+0000000285 00000 n
+0000000507 00000 n
+0000000763 00000 n
+trailer
+<< /Size 8 /Root 1 0 R /Info 2 0 R
+/ID [<7B159923723AEE961B5276A838D3D643><7B159923723AEE961B5276A838D3D643>]
+>>
+startxref
+2146
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Vercel-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Vercel-Light.eps
new file mode 100644
index 0000000000..30b6846109
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Vercel-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_VisualStudio-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_VisualStudio-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..eb6957d4f1
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_VisualStudio-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_VisualStudio-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_VisualStudio-Dark.eps
new file mode 100644
index 0000000000..a83041c9b4
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_VisualStudio-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_VisualStudio-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_VisualStudio-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..28ff46c572
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_VisualStudio-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_VisualStudio-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_VisualStudio-Light.eps
new file mode 100644
index 0000000000..5efc25a9d4
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_VisualStudio-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Vite-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Vite-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..4f5a4196c7
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Vite-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Vite-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Vite-Dark.eps
new file mode 100644
index 0000000000..758ca80203
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Vite-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Vite-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Vite-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..6cb7ad1971
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Vite-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Vite-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Vite-Light.eps
new file mode 100644
index 0000000000..5206364509
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Vite-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Vitest-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Vitest-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..11744779f7
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Vitest-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Vitest-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Vitest-Dark.eps
new file mode 100644
index 0000000000..fbaa571be2
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Vitest-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Vitest-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Vitest-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..9a7273dc93
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Vitest-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Vitest-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Vitest-Light.eps
new file mode 100644
index 0000000000..66a1b883ec
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Vitest-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_VueJS-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_VueJS-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..cfc244613e
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_VueJS-Dark-eps-converted-to.pdf
@@ -0,0 +1,74 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+x]An D>'@gfAi<0'`_1Q[r
+ߐmչU(<c+bV?t͡
+d:SdgYm7=]nᜇ>z>j*cET*[HXlCRҬ#'JTdXk.w"K};|.He)ǒ\=?lq8endstream
+endobj
+6 0 obj
+230
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 7 0 R
+>>
+endobj
+7 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:24:23+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:24:23+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:03ae72fa-1440-11ef-0000-21425758fbe5'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514132423+02'00')
+/ModDate(D:20240514132423+02'00')>>endobj
+xref
+0 8
+0000000000 65535 f
+0000000777 00000 n
+0000002099 00000 n
+0000000718 00000 n
+0000000604 00000 n
+0000000285 00000 n
+0000000585 00000 n
+0000000841 00000 n
+trailer
+<< /Size 8 /Root 1 0 R /Info 2 0 R
+/ID [<F6092EAD96BD24EBB3316EAADDF7E73D><F6092EAD96BD24EBB3316EAADDF7E73D>]
+>>
+startxref
+2224
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_VueJS-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_VueJS-Dark.eps
new file mode 100644
index 0000000000..c9678659d0
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_VueJS-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_VueJS-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_VueJS-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..204fb71613
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_VueJS-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_VueJS-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_VueJS-Light.eps
new file mode 100644
index 0000000000..e9a2df420e
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_VueJS-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Vuetify-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Vuetify-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..c7c592921f
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Vuetify-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Vuetify-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Vuetify-Dark.eps
new file mode 100644
index 0000000000..48d5519a43
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Vuetify-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Vuetify-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Vuetify-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..f79e74e8a6
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Vuetify-Light-eps-converted-to.pdf
@@ -0,0 +1,75 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xmRKn1>c8FW=@4RM~U4<\+5.ZI‘waT9s⦾mHz ?=nͬD,<f‰2~-c;`Xe*QY޾gΆGj
+ZYfzr$*5h[d)MG.HV)
+֦>_N` xmହ67(͒7{_h#;,zЂa_ 2|+m<*;)u<9z-g,)PO5VNƫbhHcb/
+x7?}endstream
+endobj
+6 0 obj
+359
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 7 0 R
+>>
+endobj
+7 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:24:26+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:24:26+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:0578367a-1440-11ef-0000-1e8a9c360951'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514132426+02'00')
+/ModDate(D:20240514132426+02'00')>>endobj
+xref
+0 8
+0000000000 65535 f
+0000000906 00000 n
+0000002228 00000 n
+0000000847 00000 n
+0000000733 00000 n
+0000000285 00000 n
+0000000714 00000 n
+0000000970 00000 n
+trailer
+<< /Size 8 /Root 1 0 R /Info 2 0 R
+/ID [<E9CA4BA0BFA7FD7B62E88D84ABD29F4E><E9CA4BA0BFA7FD7B62E88D84ABD29F4E>]
+>>
+startxref
+2353
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Vuetify-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Vuetify-Light.eps
new file mode 100644
index 0000000000..16b9255690
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Vuetify-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_WebAssembly-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_WebAssembly-eps-converted-to.pdf
new file mode 100644
index 0000000000..6bd453f8ec
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_WebAssembly-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_WebAssembly.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_WebAssembly.eps
new file mode 100644
index 0000000000..f01b072ddd
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_WebAssembly.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_WebStorm-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_WebStorm-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..8da310a32c
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_WebStorm-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_WebStorm-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_WebStorm-Dark.eps
new file mode 100644
index 0000000000..7594f767f9
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_WebStorm-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_WebStorm-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_WebStorm-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..fe138e5ce2
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_WebStorm-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_WebStorm-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_WebStorm-Light.eps
new file mode 100644
index 0000000000..7f015c5846
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_WebStorm-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Webflow-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Webflow-eps-converted-to.pdf
new file mode 100644
index 0000000000..41e62de024
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Webflow-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Webflow.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Webflow.eps
new file mode 100644
index 0000000000..45a7148a24
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Webflow.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Webpack-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Webpack-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..a1537c4ce5
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Webpack-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Webpack-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Webpack-Dark.eps
new file mode 100644
index 0000000000..991f187932
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Webpack-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Webpack-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Webpack-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..46e9551772
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Webpack-Light-eps-converted-to.pdf
@@ -0,0 +1,75 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xSKn0>2g34Eh(8]U#M6򷞏g]Ǩ?UWA
+H?uH83KfyHQ`_rW<k7DT99L&6^$H!`4j60
+^4&8V -Wت"F=q-#(ϴ VA
+1"SN#flC=B΅vb|Y3,Zh>fPա rg)+BPAt"G"9mk̛􅼵 nDl>cb#4hr2y5;Ņ r~'wNuߋrɄVY&R6m#UW Fs1W5elpq7'z l.endstream
+endobj
+6 0 obj
+410
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 7 0 R
+>>
+endobj
+7 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:24:30+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:24:30+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:07da907a-1440-11ef-0000-d94d274f7055'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514132430+02'00')
+/ModDate(D:20240514132430+02'00')>>endobj
+xref
+0 8
+0000000000 65535 f
+0000000957 00000 n
+0000002279 00000 n
+0000000898 00000 n
+0000000784 00000 n
+0000000285 00000 n
+0000000765 00000 n
+0000001021 00000 n
+trailer
+<< /Size 8 /Root 1 0 R /Info 2 0 R
+/ID [<1EC3C47BC79D74DE23ACA81796CC8BAD><1EC3C47BC79D74DE23ACA81796CC8BAD>]
+>>
+startxref
+2404
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Webpack-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Webpack-Light.eps
new file mode 100644
index 0000000000..ab52df172a
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Webpack-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_WindiCSS-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_WindiCSS-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..3b7e46615b
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_WindiCSS-Dark-eps-converted-to.pdf
@@ -0,0 +1,157 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xWMn1>ll|dv1RE]U"OOzÇef^#E|LDuU LroCs\| <+ nz.tvnFn6-pFvi|0v+J6Z#j\iFLVm;c! 5;fe(z yI XikK#$)b>A
+x
+j]X3ڲۅg)Gؚ4VICX!a-<hMfӖAKHs'K_Ǐw{ޒ6d?)P̶g%55uX6 v
+l1TKڂ9@LKX`v^[+9PZ[qH5]d7gFܺ+ģYj1Z%iފs)jCX>7y+i$ďz T!՟wzE4)ԶJ+% IDbdsB.ݙ7r2dsr`R6,tf8ka9j36
+²Td:W%$'57
+~oy^3ؓnl%.dt).}߇iendstream
+endobj
+6 0 obj
+616
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+/ColorSpace 13 0 R
+/Pattern 14 0 R
+/Shading 15 0 R
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 16 0 R
+>>
+endobj
+7 0 obj
+[/Pattern]
+endobj
+13 0 obj
+<</R7
+7 0 R>>
+endobj
+14 0 obj
+<</R12
+12 0 R>>
+endobj
+12 0 obj
+<</PatternType 2
+/Shading 11 0 R
+/Matrix[0.75
+0
+0
+-0.75
+0
+192]>>endobj
+15 0 obj
+<</R11
+11 0 R>>
+endobj
+11 0 obj
+<</ShadingType 2
+/ColorSpace/DeviceRGB
+/Coords[61.048
+59.274
+168
+228]
+/Domain[0.078
+1]
+/Function 10 0 R
+/Extend [true true]>>endobj
+9 0 obj
+<</FunctionType 2
+/Domain[0
+1]
+/C0[0.254902
+0.635294
+0.937255]
+/C1[0.2
+0.52549
+0.933333]
+/N 1>>endobj
+8 0 obj
+<</FunctionType 2
+/Domain[0
+1]
+/C0[0.329412
+0.784314
+0.945098]
+/C1[0.254902
+0.635294
+0.937255]
+/N 1>>endobj
+10 0 obj
+<</Functions[8 0 R
+9 0 R]
+/FunctionType 3
+/Domain[0.078
+1]
+/Bounds[0.573]
+/Encode[0
+1
+0
+1]>>endobj
+16 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:24:33+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:24:33+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:09a453fa-1440-11ef-0000-d02ea6680009'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514132433+02'00')
+/ModDate(D:20240514132433+02'00')>>endobj
+xref
+0 17
+0000000000 65535 f
+0000001214 00000 n
+0000003213 00000 n
+0000001155 00000 n
+0000000990 00000 n
+0000000285 00000 n
+0000000971 00000 n
+0000001279 00000 n
+0000001730 00000 n
+0000001620 00000 n
+0000001846 00000 n
+0000001479 00000 n
+0000001367 00000 n
+0000001305 00000 n
+0000001335 00000 n
+0000001447 00000 n
+0000001954 00000 n
+trailer
+<< /Size 17 /Root 1 0 R /Info 2 0 R
+/ID [<514317BEFF38AC6AEC3604179EF55A15><514317BEFF38AC6AEC3604179EF55A15>]
+>>
+startxref
+3338
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_WindiCSS-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_WindiCSS-Dark.eps
new file mode 100644
index 0000000000..27b5ac085f
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_WindiCSS-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_WindiCSS-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_WindiCSS-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..f966384279
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_WindiCSS-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_WindiCSS-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_WindiCSS-Light.eps
new file mode 100644
index 0000000000..98c00249f8
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_WindiCSS-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Windows-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Windows-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..f67ee1cc6a
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Windows-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Windows-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Windows-Dark.eps
new file mode 100644
index 0000000000..1c36e00370
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Windows-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Windows-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Windows-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..6f10b2f623
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Windows-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Windows-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Windows-Light.eps
new file mode 100644
index 0000000000..1d0eab7fcd
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Windows-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Wordpress-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Wordpress-eps-converted-to.pdf
new file mode 100644
index 0000000000..35519b526f
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Wordpress-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Wordpress.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Wordpress.eps
new file mode 100644
index 0000000000..7dfe2d91b3
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Wordpress.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Workers-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Workers-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..fdad5e891b
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Workers-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Workers-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Workers-Dark.eps
new file mode 100644
index 0000000000..c3cbea81c8
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Workers-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Workers-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Workers-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..f1a41333c8
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Workers-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Workers-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Workers-Light.eps
new file mode 100644
index 0000000000..13809b4ae3
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Workers-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_XD-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_XD-eps-converted-to.pdf
new file mode 100644
index 0000000000..f69e7d131e
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_XD-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_XD.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_XD.eps
new file mode 100644
index 0000000000..9bebc83e3f
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_XD.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Yarn-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Yarn-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..2bdf20a281
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Yarn-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Yarn-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Yarn-Dark.eps
new file mode 100644
index 0000000000..519d90aa3a
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Yarn-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Yarn-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Yarn-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..b76fc27957
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Yarn-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Yarn-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Yarn-Light.eps
new file mode 100644
index 0000000000..9d7047eec1
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Yarn-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Yew-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Yew-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..c2de19eb9e
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Yew-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Yew-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Yew-Dark.eps
new file mode 100644
index 0000000000..22f2195254
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Yew-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Yew-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Yew-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..b815113a92
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Yew-Light-eps-converted-to.pdf
@@ -0,0 +1,78 @@
+%PDF-1.5
+%쏢
+%%Invocation: gswin64c -dDisplayFormat=198788 -dDisplayResolution=120 -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
+%%+ -dAutoRotatePages#/None ?
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xuR1N1 '[$$
+ +G
+&m3cH(yn@hSM,T+tJl;H
+Eȓk
+($ccrFs:3_'<mvvbUr @ZMbBsws6gi茕: puCkf\+撖Г4+W,xnDgxF $=9(F
+]*KjX$~YS,͗Xo((̕A>Xx &c̈́RIDzbf;h[o! SH=M־o|
+26#GxhvYim-zߧU$endstream
+endobj
+6 0 obj
+344
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 192 192]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 7 0 R
+>>
+endobj
+7 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1182>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.56.1'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-05-14T13:24:43+02:00</xmp:ModifyDate>
+<xmp:CreateDate>2024-05-14T13:24:43+02:00</xmp:CreateDate>
+<xmp:CreatorTool>UnknownApplication</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:0f9a34fa-1440-11ef-0000-b76360559bed'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.56.1)
+/CreationDate(D:20240514132443+02'00')
+/ModDate(D:20240514132443+02'00')>>endobj
+xref
+0 8
+0000000000 65535 f
+0000000891 00000 n
+0000002213 00000 n
+0000000832 00000 n
+0000000718 00000 n
+0000000285 00000 n
+0000000699 00000 n
+0000000955 00000 n
+trailer
+<< /Size 8 /Root 1 0 R /Info 2 0 R
+/ID [<208A20709D820EE84DC675EC307CA8F0><208A20709D820EE84DC675EC307CA8F0>]
+>>
+startxref
+2338
+%%EOF
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Yew-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Yew-Light.eps
new file mode 100644
index 0000000000..b6e522f995
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Yew-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Zig-Dark-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Zig-Dark-eps-converted-to.pdf
new file mode 100644
index 0000000000..07f654ff6e
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Zig-Dark-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Zig-Dark.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Zig-Dark.eps
new file mode 100644
index 0000000000..d9bda50dc3
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Zig-Dark.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Zig-Light-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_Zig-Light-eps-converted-to.pdf
new file mode 100644
index 0000000000..a77d2420d5
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Zig-Light-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_Zig-Light.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_Zig-Light.eps
new file mode 100644
index 0000000000..f50c1caa70
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_Zig-Light.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_p5js-eps-converted-to.pdf b/macros/latex/contrib/skillicons/skill-icons/skillicons_p5js-eps-converted-to.pdf
new file mode 100644
index 0000000000..58a14b7310
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_p5js-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skill-icons/skillicons_p5js.eps b/macros/latex/contrib/skillicons/skill-icons/skillicons_p5js.eps
new file mode 100644
index 0000000000..dfd73b9418
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skill-icons/skillicons_p5js.eps
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skillicons.pdf b/macros/latex/contrib/skillicons/skillicons.pdf
new file mode 100644
index 0000000000..2e4982b700
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skillicons.pdf
Binary files differ
diff --git a/macros/latex/contrib/skillicons/skillicons.sty b/macros/latex/contrib/skillicons/skillicons.sty
new file mode 100644
index 0000000000..cb9d7760c3
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skillicons.sty
@@ -0,0 +1,28 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% A package to bring cute cool and modern icons into your document
+% Maintained by Anton --> AnMnV https://github.com/AnMnv/AnMnv
+%
+% Project repository and bug tracker:
+% https://github.com/AnMnv/latex-skill-icons
+%
+% Released under the MIT License
+% See https://opensource.org/license/mit
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{skillicons}[2024-05-14 version v1.0 A LaTeX package designed to seamlessly integrate skill icons into your documents]
+
+\RequirePackage{graphicx}
+
+
+
+\newcommand{\photosymbol}[2][1]{%
+ \raisebox{\dimexpr 0.5\fontcharht\font`T - 0.5\height - 0.5\fontchardp\font`q}{%
+ \includegraphics[height=\dimexpr#1\fontcharht\font`T+1.5\fontchardp\font`q]{skill-icons/skillicons_#2}%
+ }%
+}
+
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/skillicons/skillicons.tex b/macros/latex/contrib/skillicons/skillicons.tex
new file mode 100644
index 0000000000..d854e6f3a5
--- /dev/null
+++ b/macros/latex/contrib/skillicons/skillicons.tex
@@ -0,0 +1,584 @@
+\documentclass[12pt]{article}
+\usepackage[left=1.5cm,right=1.5cm,top=1.5cm,bottom=1.5cm,bindingoffset=0cm]{geometry}
+\usepackage{skillicons}
+\usepackage{multicol}
+
+
+\usepackage[dvipsnames]{xcolor}
+
+\usepackage{tikz}
+\usetikzlibrary{calc}
+\usepackage{anyfontsize}
+\usepackage{sectsty}
+\usepackage{hyperref}
+
+\hypersetup{
+ colorlinks=true,
+ urlcolor=red,
+ allbordercolors=red,
+}
+
+\usepackage[most]{tcolorbox}
+\colorlet{LightLavender}{Lavender!40!}
+\colorlet{LightGreen}{black!15!}
+
+\tcbset{on line,
+ boxsep=4pt, left=0pt,right=0pt,top=0pt,bottom=0pt,
+ colframe=white,colback=LightGreen,
+ highlight math style={enhanced}
+ }
+
+
+%%%%%%%%%%%%%%%%%%
+% -- Loading the code block package:
+\usepackage{listings}
+% -- Basic formatting
+\usepackage[utf8]{inputenc}
+\usepackage[english]{babel}
+\usepackage{times}
+\setlength{\parindent}{8pt}
+\usepackage{indentfirst}
+% -- Defining colors:
+\usepackage[dvipsnames]{xcolor}
+\definecolor{codegreen}{rgb}{0,0.6,0}
+\definecolor{codegray}{rgb}{0.5,0.5,0.5}
+\definecolor{codepurple}{rgb}{0.58,0,0.82}
+\definecolor{backcolour}{rgb}{0.95,0.95,0.92}
+% Definig a custom style:
+\lstdefinestyle{mystyle}{
+ backgroundcolor=\color{backcolour},
+ commentstyle=\color{codepurple},
+ keywordstyle=\color{NavyBlue},
+ numberstyle=\tiny\color{codegray},
+ stringstyle=\color{codepurple},
+ basicstyle=\ttfamily\footnotesize\bfseries,
+ breakatwhitespace=false,
+ breaklines=true,
+ captionpos=t,
+ keepspaces=true,
+ % numbers=left,
+ % numbersep=5pt,
+ showspaces=false,
+ showstringspaces=false,
+ showtabs=false,
+ tabsize=2
+}
+% -- Setting up the custom style:
+\lstset{style=mystyle}
+%%%%%%%%%%%%%%%%%%
+
+\begin{document}
+
+
+\begin{center}
+\fontsize{40}{50} \selectfont {{\tcbox{Icon Skills package}}}\\[1cm] \photosymbol[5]{LaTeX-Dark} \\[1cm]
+
+\Large \href{https://github.com/AnMnv/latex-skill-icons}{https://github.com/AnMnv/latex-skill-icons}\\[1cm]
+
+2024-05-14 version v1.0
+\end{center}
+
+
+
+
+
+
+\vspace*{2cm}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+\section*{Introduction}
+Welcome to the documentation for \texttt{skillicons} package, a LaTeX package designed to seamlessly integrate skill icons into your documents. With this package, you can easily enhance your documents by incorporating visually appealing skill indicators, perfect for resumes, CVs, or any document requiring skill representation.
+
+
+
+\section*{Acknowledgements}
+The skill icons used to create a package are sourced from the repository \href{https://github.com/tandpfun/skill-icons}{https://github.com/tandpfun/skill-icons}.
+
+\section*{Setting}
+\begin{enumerate}
+\item Clone \tcbox{\texttt{skillicons.sty}} file and \tcbox{\texttt{skill-icons}} folder from \href{https://github.com/AnMnv/latex-skill-icons}{https://github.com/AnMnv/latex-skill-icons} into your current directory where your \texttt{main.tex} file is.
+\item Paste \tcbox{\texttt{$\backslash$usepackage\{skillicons\}}} in the preambula (before \texttt{$\backslash$begin\{document\}})
+\item You are ready to go!
+\end{enumerate}
+
+\section*{Usage Example}
+
+
+\begin{lstlisting}[language={[latex]TeX}]
+\documentclass[11pt]{report}
+\usepackage{skillicons}
+
+\begin{document}
+\begin{itemize}
+\item[] \photosymbol{JavaScript} I'm proficient in JavaScript.
+\item[] \photosymbol{Python-Dark} Python is one of my core skills.
+\item[] \photosymbol{React-Light} I have experience working with React.
+\item[] \photosymbol{Java-Dark} Java is one of my strong suits.
+\item[] \photosymbol{NodeJS-Light} I'm proficient in Node.js development.
+\item[] \photosymbol{Git} I'm adept at using Git for version control.
+\item[] \photosymbol{MySQL-Dark} SQL is one of the databases languages.
+\item[] \photosymbol{Rust} Rust is a language I've been learning and enjoying lately.
+\end{itemize}
+\end{document}
+\end{lstlisting}
+
+\section*{Result:}
+
+{ \Large
+\begin{itemize}
+\item[] \photosymbol{JavaScript} I'm proficient in JavaScript.
+\item[] \photosymbol{Python-Dark} Python is one of my core skills.
+\item[] \photosymbol{React-Light} I have experience working with React.
+\item[] \photosymbol{Java-Dark} Java is one of my strong suits.
+\item[] \photosymbol{NodeJS-Light} I'm proficient in Node.js development.
+\item[] \photosymbol{Git} I'm adept at using Git for version control.
+\item[] \photosymbol{MySQL-Dark} SQL is one of the databases languages.
+\item[] \photosymbol{Rust} Rust is a language I've been learning and enjoying lately.
+\end{itemize}}
+
+\vspace{0.5cm}
+{\LARGE
+\begin{lstlisting}[language={[latex]TeX}]
+By default \photosymbol{Powershell-Dark} you can \photosymbol[2]{NodeJS-Dark} use icons right \photosymbol[3]{Sublime-Dark} inside text lines \photosymbol[4]{StackOverflow-Dark} with or without scale parameter.
+\end{lstlisting}
+
+By default \photosymbol{Powershell-Dark} you can \photosymbol[2]{NodeJS-Dark} use icons right \photosymbol[3]{Sublime-Dark} inside text lines \photosymbol[4]{StackOverflow-Dark} with or without scale parameter.}
+
+\clearpage
+
+
+
+
+\section*{All available icons}
+\begin{multicols}{3}
+\begin{itemize}
+\item[] \photosymbol[3]{Ableton-Dark} Ableton-Dark
+\item[] \photosymbol[3]{Ableton-Light} Ableton-Light
+\item[] \photosymbol[3]{ActivityPub-Dark} ActivityPub-Dark
+\item[] \photosymbol[3]{ActivityPub-Light} ActivityPub-Light
+\item[] \photosymbol[3]{Actix-Dark} Actix-Dark
+\item[] \photosymbol[3]{Actix-Light} Actix-Light
+\item[] \photosymbol[3]{Adonis} Adonis
+\item[] \photosymbol[3]{AfterEffects} AfterEffects
+\item[] \photosymbol[3]{AiScript-Dark} AiScript-Dark
+\item[] \photosymbol[3]{AiScript-Light} AiScript-Light
+\item[] \photosymbol[3]{AlpineJS-Dark} AlpineJS-Dark
+\item[] \photosymbol[3]{AlpineJS-Light} AlpineJS-Light
+\item[] \photosymbol[3]{Anaconda-Dark} Anaconda-Dark
+\item[] \photosymbol[3]{Anaconda-Light} Anaconda-Light
+\item[] \photosymbol[3]{AndroidStudio-Dark} AndroidStudio-Dark
+\item[] \photosymbol[3]{AndroidStudio-Light} AndroidStudio-Light
+\item[] \photosymbol[3]{Angular-Dark} Angular-Dark
+\item[] \photosymbol[3]{Angular-Light} Angular-Light
+\item[] \photosymbol[3]{Ansible} Ansible
+\item[] \photosymbol[3]{Apollo} Apollo
+\item[] \photosymbol[3]{Apple-Dark} Apple-Dark
+\item[] \photosymbol[3]{Apple-Light} Apple-Light
+\item[] \photosymbol[3]{Appwrite} Appwrite
+\item[] \photosymbol[3]{Arch-Dark} Arch-Dark
+\item[] \photosymbol[3]{Arch-Light} Arch-Light
+\item[] \photosymbol[3]{Arduino} Arduino
+\item[] \photosymbol[3]{Astro} Astro
+\item[] \photosymbol[3]{Atom} Atom
+\item[] \photosymbol[3]{Audition} Audition
+%\item[] \photosymbol[3]{Autocad-Dark} AutoCAD-Dark
+\item[] \photosymbol[3]{Autocad-Light} AutoCAD-Light
+\item[] \photosymbol[3]{AWS-Dark} AWS-Dark
+\item[] \photosymbol[3]{AWS-Light} AWS-Light
+\item[] \photosymbol[3]{Azul} Azul
+\item[] \photosymbol[3]{Azure-Dark} Azure-Dark
+\item[] \photosymbol[3]{Azure-Light} Azure-Light
+\item[] \photosymbol[3]{Babel} Babel
+\item[] \photosymbol[3]{Bash-Dark} Bash-Dark
+\item[] \photosymbol[3]{Bash-Light} Bash-Light
+\item[] \photosymbol[3]{Bevy-Dark} Bevy-Dark
+\item[] \photosymbol[3]{Bevy-Light} Bevy-Light
+\item[] \photosymbol[3]{BitBucket-Dark} BitBucket-Dark
+\item[] \photosymbol[3]{BitBucket-Light} BitBucket-Light
+\item[] \photosymbol[3]{Blender-Dark} Blender-Dark
+\item[] \photosymbol[3]{Blender-Light} Blender-Light
+\item[] \photosymbol[3]{Bootstrap} Bootstrap
+\item[] \photosymbol[3]{BSD-Dark} BSD-Dark
+\item[] \photosymbol[3]{BSD-Light} BSD-Light
+\item[] \photosymbol[3]{Bun-Dark} Bun-Dark
+\item[] \photosymbol[3]{Bun-Light} Bun-Light
+\item[] \photosymbol[3]{C} C
+\item[] \photosymbol[3]{Cassandra-Dark} Cassandra-Dark
+\item[] \photosymbol[3]{Cassandra-Light} Cassandra-Light
+\item[] \photosymbol[3]{CLion-Dark} CLion-Dark
+\item[] \photosymbol[3]{CLion-Light} CLion-Light
+\item[] \photosymbol[3]{Clojure-Dark} Clojure-Dark
+\item[] \photosymbol[3]{Clojure-Light} Clojure-Light
+\item[] \photosymbol[3]{Cloudflare-Dark} Cloudflare-Dark
+\item[] \photosymbol[3]{Cloudflare-Light} Cloudflare-Light
+\item[] \photosymbol[3]{CMake-Dark} CMake-Dark
+\item[] \photosymbol[3]{CMake-Light} CMake-Light
+\item[] \photosymbol[3]{CodePen-Dark} CodePen-Dark
+\item[] \photosymbol[3]{CodePen-Light} CodePen-Light
+\item[] \photosymbol[3]{CoffeeScript-Dark} CoffeeScript-Dark
+\item[] \photosymbol[3]{CoffeeScript-Light} CoffeeScript-Light
+\item[] \photosymbol[3]{CPP} CPP
+\item[] \photosymbol[3]{Crystal-Dark} Crystal-Dark
+\item[] \photosymbol[3]{Crystal-Light} Crystal-Light
+\item[] \photosymbol[3]{CS} CS
+\item[] \photosymbol[3]{CSS} CSS
+\item[] \photosymbol[3]{Cypress-Dark} Cypress-Dark
+\item[] \photosymbol[3]{Cypress-Light} Cypress-Light
+\item[] \photosymbol[3]{D3-Dark} D3-Dark
+\item[] \photosymbol[3]{D3-Light} D3-Light
+\item[] \photosymbol[3]{Dart-Dark} Dart-Dark
+\item[] \photosymbol[3]{Dart-Light} Dart-Light
+\item[] \photosymbol[3]{Debian-Dark} Debian-Dark
+\item[] \photosymbol[3]{Debian-Light} Debian-Light
+\item[] \photosymbol[3]{DENO-Dark} DENO-Dark
+\item[] \photosymbol[3]{DENO-Light} DENO-Light
+\item[] \photosymbol[3]{DevTo-Dark} DevTo-Dark
+\item[] \photosymbol[3]{DevTo-Light} DevTo-Light
+\item[] \photosymbol[3]{Discord} Discord
+\item[] \photosymbol[3]{DiscordBots} DiscordBots
+\item[] \photosymbol[3]{DiscordJS-Dark} DiscordJS-Dark
+\item[] \photosymbol[3]{DiscordJS-Light} DiscordJS-Light
+\item[] \photosymbol[3]{Django} Django
+\item[] \photosymbol[3]{Docker} Docker
+\item[] \photosymbol[3]{DotNet} DotNet
+\item[] \photosymbol[3]{DynamoDB-Dark} DynamoDB-Dark
+\item[] \photosymbol[3]{DynamoDB-Light} DynamoDB-Light
+\item[] \photosymbol[3]{Eclipse-Dark} Eclipse-Dark
+\item[] \photosymbol[3]{Eclipse-Light} Eclipse-Light
+\item[] \photosymbol[3]{Elasticsearch-Dark} Elasticsearch-Dark
+\item[] \photosymbol[3]{Elasticsearch-Light} Elasticsearch-Light
+\item[] \photosymbol[3]{Electron} Electron
+\item[] \photosymbol[3]{Elixir-Dark} Elixir-Dark
+\item[] \photosymbol[3]{Elixir-Light} Elixir-Light
+\item[] \photosymbol[3]{Elysia-Dark} Elysia-Dark
+\item[] \photosymbol[3]{Elysia-Light} Elysia-Light
+\item[] \photosymbol[3]{Emacs} Emacs
+\item[] \photosymbol[3]{Ember} Ember
+\item[] \photosymbol[3]{Emotion-Dark} Emotion-Dark
+\item[] \photosymbol[3]{Emotion-Light} Emotion-Light
+\item[] \photosymbol[3]{ExpressJS-Dark} ExpressJS-Dark
+\item[] \photosymbol[3]{ExpressJS-Light} ExpressJS-Light
+\item[] \photosymbol[3]{FastAPI} FastAPI
+\item[] \photosymbol[3]{Fediverse-Dark} Fediverse-Dark
+\item[] \photosymbol[3]{Fediverse-Light} Fediverse-Light
+\item[] \photosymbol[3]{Figma-Dark} Figma-Dark
+\item[] \photosymbol[3]{Figma-Light} Figma-Light
+\item[] \photosymbol[3]{Firebase-Dark} Firebase-Dark
+\item[] \photosymbol[3]{Firebase-Light} Firebase-Light
+\item[] \photosymbol[3]{Flask-Dark} Flask-Dark
+\item[] \photosymbol[3]{Flask-Light} Flask-Light
+\item[] \photosymbol[3]{Flutter-Dark} Flutter-Dark
+\item[] \photosymbol[3]{Flutter-Light} Flutter-Light
+\item[] \photosymbol[3]{Forth} Forth
+\item[] \photosymbol[3]{Fortran} Fortran
+\item[] \photosymbol[3]{GameMakerStudio} GameMakerStudio
+\item[] \photosymbol[3]{Gatsby} Gatsby
+\item[] \photosymbol[3]{GCP-Dark} GCP-Dark
+\item[] \photosymbol[3]{GCP-Light} GCP-Light
+\item[] \photosymbol[3]{Gherkin-Dark} Gherkin-Dark
+\item[] \photosymbol[3]{Gherkin-Light} Gherkin-Light
+\item[] \photosymbol[3]{Git} Git
+\item[] \photosymbol[3]{Github-Dark} Github-Dark
+\item[] \photosymbol[3]{Github-Light} Github-Light
+\item[] \photosymbol[3]{GithubActions-Dark} GithubActions-Dark
+\item[] \photosymbol[3]{GithubActions-Light} GithubActions-Light
+\item[] \photosymbol[3]{GitLab-Dark} GitLab-Dark
+\item[] \photosymbol[3]{GitLab-Light} GitLab-Light
+\item[] \photosymbol[3]{Gmail-Dark} Gmail-Dark
+\item[] \photosymbol[3]{Gmail-Light} Gmail-Light
+\item[] \photosymbol[3]{Godot-Dark} Godot-Dark
+\item[] \photosymbol[3]{Godot-Light} Godot-Light
+\item[] \photosymbol[3]{GoLang} GoLang
+\item[] \photosymbol[3]{Gradle-Dark} Gradle-Dark
+\item[] \photosymbol[3]{Gradle-Light} Gradle-Light
+\item[] \photosymbol[3]{Grafana-Dark} Grafana-Dark
+\item[] \photosymbol[3]{Grafana-Light} Grafana-Light
+\item[] \photosymbol[3]{GraphQL-Dark} GraphQL-Dark
+\item[] \photosymbol[3]{GraphQL-Light} GraphQL-Light
+\item[] \photosymbol[3]{GTK-Dark} GTK-Dark
+\item[] \photosymbol[3]{GTK-Light} GTK-Light
+\item[] \photosymbol[3]{Gulp} Gulp
+\item[] \photosymbol[3]{Haskell-Dark} Haskell-Dark
+\item[] \photosymbol[3]{Haskell-Light} Haskell-Light
+\item[] \photosymbol[3]{Haxe-Dark} Haxe-Dark
+\item[] \photosymbol[3]{Haxe-Light} Haxe-Light
+\item[] \photosymbol[3]{HaxeFlixel-Dark} HaxeFlixel-Dark
+\item[] \photosymbol[3]{HaxeFlixel-Light} HaxeFlixel-Light
+\item[] \photosymbol[3]{Heroku} Heroku
+\item[] \photosymbol[3]{Hibernate-Dark} Hibernate-Dark
+\item[] \photosymbol[3]{Hibernate-Light} Hibernate-Light
+\item[] \photosymbol[3]{HTML} HTML
+\item[] \photosymbol[3]{Htmx-Dark} Htmx-Dark
+\item[] \photosymbol[3]{Htmx-Light} Htmx-Light
+\item[] \photosymbol[3]{Idea-Dark} Idea-Dark
+\item[] \photosymbol[3]{Idea-Light} Idea-Light
+\item[] \photosymbol[3]{Illustrator} Illustrator
+\item[] \photosymbol[3]{Instagram} Instagram
+\item[] \photosymbol[3]{IPFS-Dark} IPFS-Dark
+\item[] \photosymbol[3]{IPFS-Light} IPFS-Light
+\item[] \photosymbol[3]{Java-Dark} Java-Dark
+\item[] \photosymbol[3]{Java-Light} Java-Light
+\item[] \photosymbol[3]{JavaScript} JavaScript
+\item[] \photosymbol[3]{Jenkins-Dark} Jenkins-Dark
+\item[] \photosymbol[3]{Jenkins-Light} Jenkins-Light
+\item[] \photosymbol[3]{Jest} Jest
+\item[] \photosymbol[3]{JQuery} JQuery
+\item[] \photosymbol[3]{Julia-Dark} Julia-Dark
+\item[] \photosymbol[3]{Julia-Light} Julia-Light
+\item[] \photosymbol[3]{Kafka} Kafka
+\item[] \photosymbol[3]{Kali-Dark} Kali-Dark
+\item[] \photosymbol[3]{Kali-Light} Kali-Light
+\item[] \photosymbol[3]{Kotlin-Dark} Kotlin-Dark
+\item[] \photosymbol[3]{Kotlin-Light} Kotlin-Light
+\item[] \photosymbol[3]{Ktor-Dark} Ktor-Dark
+\item[] \photosymbol[3]{Ktor-Light} Ktor-Light
+\item[] \photosymbol[3]{Kubernetes} Kubernetes
+\item[] \photosymbol[3]{Laravel-Dark} Laravel-Dark
+\item[] \photosymbol[3]{Laravel-Light} Laravel-Light
+\item[] \photosymbol[3]{LaTeX-Dark} LaTeX-Dark
+\item[] \photosymbol[3]{LaTeX-Light} LaTeX-Light
+\item[] \photosymbol[3]{Less-Dark} Less-Dark
+\item[] \photosymbol[3]{Less-Light} Less-Light
+\item[] \photosymbol[3]{LinkedIn} LinkedIn
+\item[] \photosymbol[3]{Linux-Dark} Linux-Dark
+\item[] \photosymbol[3]{Linux-Light} Linux-Light
+\item[] \photosymbol[3]{Lit-Dark} Lit-Dark
+\item[] \photosymbol[3]{Lit-Light} Lit-Light
+\item[] \photosymbol[3]{Lua-Dark} Lua-Dark
+\item[] \photosymbol[3]{Lua-Light} Lua-Light
+\item[] \photosymbol[3]{Markdown-Dark} Markdown-Dark
+\item[] \photosymbol[3]{Markdown-Light} Markdown-Light
+\item[] \photosymbol[3]{Mastodon-Dark} Mastodon-Dark
+\item[] \photosymbol[3]{Mastodon-Light} Mastodon-Light
+\item[] \photosymbol[3]{MaterialUI-Dark} MaterialUI-Dark
+\item[] \photosymbol[3]{MaterialUI-Light} MaterialUI-Light
+\item[] \photosymbol[3]{Matlab-Dark} Matlab-Dark
+\item[] \photosymbol[3]{Matlab-Light} Matlab-Light
+\item[] \photosymbol[3]{Maven-Dark} Maven-Dark
+\item[] \photosymbol[3]{Maven-Light} Maven-Light
+\item[] \photosymbol[3]{Mint-Dark} Mint-Dark
+\item[] \photosymbol[3]{Mint-Light} Mint-Light
+\item[] \photosymbol[3]{Misskey-Dark} Misskey-Dark
+\item[] \photosymbol[3]{Misskey-Light} Misskey-Light
+\item[] \photosymbol[3]{MongoDB} MongoDB
+\item[] \photosymbol[3]{MySQL-Dark} MySQL-Dark
+\item[] \photosymbol[3]{MySQL-Light} MySQL-Light
+\item[] \photosymbol[3]{NeoVim-Dark} NeoVim-Dark
+\item[] \photosymbol[3]{NeoVim-Light} NeoVim-Light
+\item[] \photosymbol[3]{NestJS-Dark} NestJS-Dark
+\item[] \photosymbol[3]{NestJS-Light} NestJS-Light
+\item[] \photosymbol[3]{Netlify-Dark} Netlify-Dark
+\item[] \photosymbol[3]{Netlify-Light} Netlify-Light
+\item[] \photosymbol[3]{NextJS-Dark} NextJS-Dark
+\item[] \photosymbol[3]{NextJS-Light} NextJS-Light
+\item[] \photosymbol[3]{Nginx} Nginx
+\item[] \photosymbol[3]{Nim-Dark} Nim-Dark
+\item[] \photosymbol[3]{Nim-Light} Nim-Light
+\item[] \photosymbol[3]{Nix-Dark} Nix-Dark
+\item[] \photosymbol[3]{Nix-Light} Nix-Light
+\item[] \photosymbol[3]{NodeJS-Dark} NodeJS-Dark
+\item[] \photosymbol[3]{NodeJS-Light} NodeJS-Light
+\item[] \photosymbol[3]{Notion-Dark} Notion-Dark
+\item[] \photosymbol[3]{Notion-Light} Notion-Light
+\item[] \photosymbol[3]{Npm-Dark} Npm-Dark
+\item[] \photosymbol[3]{Npm-Light} Npm-Light
+\item[] \photosymbol[3]{NuxtJS-Dark} NuxtJS-Dark
+\item[] \photosymbol[3]{NuxtJS-Light} NuxtJS-Light
+\item[] \photosymbol[3]{Obsidian-Dark} Obsidian-Dark
+\item[] \photosymbol[3]{Obsidian-Light} Obsidian-Light
+\item[] \photosymbol[3]{OCaml} OCaml
+\item[] \photosymbol[3]{Octave-Dark} Octave-Dark
+\item[] \photosymbol[3]{Octave-Light} Octave-Light
+\item[] \photosymbol[3]{OpenCV-Dark} OpenCV-Dark
+\item[] \photosymbol[3]{OpenCV-Light} OpenCV-Light
+\item[] \photosymbol[3]{OpenShift} OpenShift
+\item[] \photosymbol[3]{OpenStack-Dark} OpenStack-Dark
+\item[] \photosymbol[3]{OpenStack-Light} OpenStack-Light
+\item[] \photosymbol[3]{p5js} p5js
+\item[] \photosymbol[3]{Perl} Perl
+\item[] \photosymbol[3]{Photoshop} Photoshop
+\item[] \photosymbol[3]{PHP-Dark} PHP-Dark
+\item[] \photosymbol[3]{PHP-Light} PHP-Light
+\item[] \photosymbol[3]{PhpStorm-Dark} PhpStorm-Dark
+\item[] \photosymbol[3]{PhpStorm-Light} PhpStorm-Light
+\item[] \photosymbol[3]{Pinia-Dark} Pinia-Dark
+\item[] \photosymbol[3]{Pinia-Light} Pinia-Light
+\item[] \photosymbol[3]{Pkl-Dark} Pkl-Dark
+\item[] \photosymbol[3]{Pkl-Light} Pkl-Light
+\item[] \photosymbol[3]{Plan9-Dark} Plan9-Dark
+\item[] \photosymbol[3]{Plan9-Light} Plan9-Light
+\item[] \photosymbol[3]{PlanetScale-Dark} PlanetScale-Dark
+\item[] \photosymbol[3]{PlanetScale-Light} PlanetScale-Light
+\item[] \photosymbol[3]{Pnpm-Dark} Pnpm-Dark
+\item[] \photosymbol[3]{Pnpm-Light} Pnpm-Light
+\item[] \photosymbol[3]{PostgreSQL-Dark} PostgreSQL-Dark
+\item[] \photosymbol[3]{PostgreSQL-Light} PostgreSQL-Light
+\item[] \photosymbol[3]{Postman} Postman
+\item[] \photosymbol[3]{Powershell-Dark} Powershell-Dark
+\item[] \photosymbol[3]{Powershell-Light} Powershell-Light
+\item[] \photosymbol[3]{Premiere} Premiere
+\item[] \photosymbol[3]{Prisma} Prisma
+\item[] \photosymbol[3]{Processing-Dark} Processing-Dark
+\item[] \photosymbol[3]{Processing-Light} Processing-Light
+\item[] \photosymbol[3]{Prometheus} Prometheus
+\item[] \photosymbol[3]{Pug-Dark} Pug-Dark
+\item[] \photosymbol[3]{Pug-Light} Pug-Light
+\item[] \photosymbol[3]{PyCharm-Dark} PyCharm-Dark
+\item[] \photosymbol[3]{PyCharm-Light} PyCharm-Light
+\item[] \photosymbol[3]{Python-Dark} Python-Dark
+\item[] \photosymbol[3]{Python-Light} Python-Light
+\item[] \photosymbol[3]{PyTorch-Dark} PyTorch-Dark
+\item[] \photosymbol[3]{PyTorch-Light} PyTorch-Light
+\item[] \photosymbol[3]{QT-Dark} QT-Dark
+\item[] \photosymbol[3]{QT-Light} QT-Light
+\item[] \photosymbol[3]{R-Dark} R-Dark
+\item[] \photosymbol[3]{R-Light} R-Light
+\item[] \photosymbol[3]{RabbitMQ-Dark} RabbitMQ-Dark
+\item[] \photosymbol[3]{RabbitMQ-Light} RabbitMQ-Light
+\item[] \photosymbol[3]{Rails} Rails
+\item[] \photosymbol[3]{RaspberryPi-Dark} RaspberryPi-Dark
+\item[] \photosymbol[3]{RaspberryPi-Light} RaspberryPi-Light
+\item[] \photosymbol[3]{React-Dark} React-Dark
+\item[] \photosymbol[3]{React-Light} React-Light
+\item[] \photosymbol[3]{ReactiveX-Dark} ReactiveX-Dark
+\item[] \photosymbol[3]{ReactiveX-Light} ReactiveX-Light
+\item[] \photosymbol[3]{RedHat-Dark} RedHat-Dark
+\item[] \photosymbol[3]{RedHat-Light} RedHat-Light
+\item[] \photosymbol[3]{Redis-Dark} Redis-Dark
+\item[] \photosymbol[3]{Redis-Light} Redis-Light
+\item[] \photosymbol[3]{Redux} Redux
+\item[] \photosymbol[3]{Regex-Dark} Regex-Dark
+\item[] \photosymbol[3]{Regex-Light} Regex-Light
+\item[] \photosymbol[3]{Remix-Dark} Remix-Dark
+\item[] \photosymbol[3]{Remix-Light} Remix-Light
+\item[] \photosymbol[3]{Replit-Dark} Replit-Dark
+\item[] \photosymbol[3]{Replit-Light} Replit-Light
+\item[] \photosymbol[3]{Rider-Dark} Rider-Dark
+\item[] \photosymbol[3]{Rider-Light} Rider-Light
+\item[] \photosymbol[3]{RobloxStudio} RobloxStudio
+\item[] \photosymbol[3]{Rocket} Rocket
+\item[] \photosymbol[3]{RollupJS-Dark} RollupJS-Dark
+\item[] \photosymbol[3]{RollupJS-Light} RollupJS-Light
+\item[] \photosymbol[3]{ROS-Dark} ROS-Dark
+\item[] \photosymbol[3]{ROS-Light} ROS-Light
+\item[] \photosymbol[3]{Ruby} Ruby
+\item[] \photosymbol[3]{Rust} Rust
+\item[] \photosymbol[3]{Sass} Sass
+\item[] \photosymbol[3]{Scala-Dark} Scala-Dark
+\item[] \photosymbol[3]{Scala-Light} Scala-Light
+\item[] \photosymbol[3]{ScikitLearn-Dark} ScikitLearn-Dark
+\item[] \photosymbol[3]{SciKitLearn-Light} SciKitLearn-Light
+\item[] \photosymbol[3]{Selenium} Selenium
+\item[] \photosymbol[3]{Sentry} Sentry
+\item[] \photosymbol[3]{Sequelize-Dark} Sequelize-Dark
+\item[] \photosymbol[3]{Sequelize-Light} Sequelize-Light
+\item[] \photosymbol[3]{Sketchup-Dark} Sketchup-Dark
+\item[] \photosymbol[3]{Sketchup-Light} Sketchup-Light
+\item[] \photosymbol[3]{Solidity} Solidity
+\item[] \photosymbol[3]{SolidJS-Dark} SolidJS-Dark
+\item[] \photosymbol[3]{SolidJS-Light} SolidJS-Light
+\item[] \photosymbol[3]{Spring-Dark} Spring-Dark
+\item[] \photosymbol[3]{Spring-Light} Spring-Light
+\item[] \photosymbol[3]{SQLite} SQLite
+\item[] \photosymbol[3]{StackOverflow-Dark} StackOverflow-Dark
+\item[] \photosymbol[3]{StackOverflow-Light} StackOverflow-Light
+\item[] \photosymbol[3]{StyledComponents} StyledComponents
+\item[] \photosymbol[3]{Sublime-Dark} Sublime-Dark
+\item[] \photosymbol[3]{Sublime-Light} Sublime-Light
+\item[] \photosymbol[3]{Supabase-Dark} Supabase-Dark
+\item[] \photosymbol[3]{Supabase-Light} Supabase-Light
+\item[] \photosymbol[3]{Svelte} Svelte
+\item[] \photosymbol[3]{SVG-Dark} SVG-Dark
+\item[] \photosymbol[3]{SVG-Light} SVG-Light
+\item[] \photosymbol[3]{Swift} Swift
+\item[] \photosymbol[3]{Symfony-Dark} Symfony-Dark
+\item[] \photosymbol[3]{Symfony-Light} Symfony-Light
+\item[] \photosymbol[3]{TailwindCSS-Dark} TailwindCSS-Dark
+\item[] \photosymbol[3]{TailwindCSS-Light} TailwindCSS-Light
+\item[] \photosymbol[3]{Tauri-Dark} Tauri-Dark
+\item[] \photosymbol[3]{Tauri-Light} Tauri-Light
+\item[] \photosymbol[3]{TensorFlow-Dark} TensorFlow-Dark
+\item[] \photosymbol[3]{TensorFlow-Light} TensorFlow-Light
+\item[] \photosymbol[3]{Terraform-Dark} Terraform-Dark
+\item[] \photosymbol[3]{Terraform-Light} Terraform-Light
+\item[] \photosymbol[3]{ThreeJS-Dark} ThreeJS-Dark
+\item[] \photosymbol[3]{ThreeJS-Light} ThreeJS-Light
+\item[] \photosymbol[3]{Twitter} Twitter
+\item[] \photosymbol[3]{TypeScript} TypeScript
+\item[] \photosymbol[3]{Ubuntu-Dark} Ubuntu-Dark
+\item[] \photosymbol[3]{Ubuntu-Light} Ubuntu-Light
+\item[] \photosymbol[3]{Unity-Dark} Unity-Dark
+\item[] \photosymbol[3]{Unity-Light} Unity-Light
+\item[] \photosymbol[3]{UnrealEngine} UnrealEngine
+\item[] \photosymbol[3]{V-Dark} V-Dark
+\item[] \photosymbol[3]{V-Light} V-Light
+\item[] \photosymbol[3]{Vala} Vala
+\item[] \photosymbol[3]{Vercel-Dark} Vercel-Dark
+\item[] \photosymbol[3]{Vercel-Light} Vercel-Light
+\item[] \photosymbol[3]{VIM-Dark} VIM-Dark
+\item[] \photosymbol[3]{VIM-Light} VIM-Light
+\item[] \photosymbol[3]{VisualStudio-Dark} VisualStudio-Dark
+\item[] \photosymbol[3]{VisualStudio-Light} VisualStudio-Light
+\item[] \photosymbol[3]{Vite-Dark} Vite-Dark
+\item[] \photosymbol[3]{Vite-Light} Vite-Light
+\item[] \photosymbol[3]{Vitest-Dark} Vitest-Dark
+\item[] \photosymbol[3]{Vitest-Light} Vitest-Light
+\item[] \photosymbol[3]{VSCode-Dark} VSCode-Dark
+\item[] \photosymbol[3]{VSCode-Light} VSCode-Light
+\item[] \photosymbol[3]{VSCodium-Dark} VSCodium-Dark
+\item[] \photosymbol[3]{VSCodium-Light} VSCodium-Light
+\item[] \photosymbol[3]{VueJS-Dark} VueJS-Dark
+\item[] \photosymbol[3]{VueJS-Light} VueJS-Light
+\item[] \photosymbol[3]{Vuetify-Dark} Vuetify-Dark
+\item[] \photosymbol[3]{Vuetify-Light} Vuetify-Light
+\item[] \photosymbol[3]{WebAssembly} WebAssembly
+\item[] \photosymbol[3]{Webflow} Webflow
+\item[] \photosymbol[3]{Webpack-Dark} Webpack-Dark
+\item[] \photosymbol[3]{Webpack-Light} Webpack-Light
+\item[] \photosymbol[3]{WebStorm-Dark} WebStorm-Dark
+\item[] \photosymbol[3]{WebStorm-Light} WebStorm-Light
+\item[] \photosymbol[3]{WindiCSS-Dark} WindiCSS-Dark
+\item[] \photosymbol[3]{WindiCSS-Light} WindiCSS-Light
+\item[] \photosymbol[3]{Windows-Dark} Windows-Dark
+\item[] \photosymbol[3]{Windows-Light} Windows-Light
+\item[] \photosymbol[3]{Wordpress} Wordpress
+\item[] \photosymbol[3]{Workers-Dark} Workers-Dark
+\item[] \photosymbol[3]{Workers-Light} Workers-Light
+\item[] \photosymbol[3]{XD} XD
+\item[] \photosymbol[3]{Yarn-Dark} Yarn-Dark
+\item[] \photosymbol[3]{Yarn-Light} Yarn-Light
+\item[] \photosymbol[3]{Yew-Dark} Yew-Dark
+\item[] \photosymbol[3]{Yew-Light} Yew-Light
+\item[] \photosymbol[3]{Zig-Dark} Zig-Dark
+\item[] \photosymbol[3]{Zig-Light} Zig-Light
+\end{itemize}
+\end{multicols}
+
+\section*{License}
+This package and its included icon images, taken from \href{https://github.com/tandpfun/skill-icons}{https://github.com/tandpfun/skill-icons}, are released under the \href{https://opensource.org/license/mit}{MIT} license.
+
+\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/spbmark/spbmark.pdf b/macros/latex/contrib/spbmark/spbmark.pdf
index c86957a167..8242e5e3bf 100644
--- a/macros/latex/contrib/spbmark/spbmark.pdf
+++ b/macros/latex/contrib/spbmark/spbmark.pdf
Binary files differ
diff --git a/macros/latex/contrib/spbmark/spbmark.sty b/macros/latex/contrib/spbmark/spbmark.sty
index e4c45d13e8..c1ce4837a5 100644
--- a/macros/latex/contrib/spbmark/spbmark.sty
+++ b/macros/latex/contrib/spbmark/spbmark.sty
@@ -9,7 +9,7 @@
% https://creativecommons.org/licenses/by/4.0/legalcode
\NeedsTeXFormat{LaTeX2e}[2018/12/31]
\RequirePackage{xparse,l3keys2e}
-\ProvidesExplPackage{spbmark}{2024/04/24}{1.46f}
+\ProvidesExplPackage{spbmark}{2024/05/19}{1.46j}
{Customize superscripts and subscripts}
\cs_generate_variant:Nn \box_set_ht:Nn { cv }
@@ -18,11 +18,12 @@
\cs_generate_variant:Nn \dim_gset:Nn { Nv }
\cs_generate_variant:Nn \dim_abs:n { V,v }
\cs_generate_variant:Nn \dim_compare:nNnTF { V,v }
-\cs_generate_variant:Nn \msg_warning:nnn { nnV }
\cs_generate_variant:Nn \str_case:nn { x }
\cs_generate_variant:Nn \tl_if_novalue:nF { V }
\cs_generate_variant:Nn \tl_if_blank:nF { v }
+\providecommand{\AfterPreamble}{\AtBeginDocument}
+\AtBeginDocument{\cs_set_eq:NN \AfterPreamble \use:n}
\cs_set_eq:NN \spb@textsuperscript@save \textsuperscript
\cs_set_eq:NN \spb@textsubscript@save \textsubscript
\cs_set_eq:NN \spb@math@super@save \sp
@@ -31,46 +32,78 @@
\cs_new_protected:Npn \spb_define:n { \keys_define:nn { ctex/tools } }
\cs_new_protected:Npn \spb_set:n { \keys_set:nn { ctex/tools } }
\cs_set_eq:NN \spbset \spb_set:n
+
\keys_define:nn { spbmark/option }
{
text .choice:,
- text/true .code:n =
+ text/true .code:n =
{
\cs_set:Npn \textsuperscript { \super[textsp] }
\cs_set:Npn \textsubscript { \sub[textsb] }
},
- text/false .code:n =
+ text/false .code:n =
{
\cs_set:Npn \textsuperscript { \spb@textsuperscript@save }
\cs_set:Npn \textsubscript { \spb@textsubscript@save }
},
- text .default:n = true,
+ text .default:n = true,
math .choice:,
- math/true .code:n =
+ math/true .code:n =
{
\cs_set:Npn \sp { \super[mathsp] }
\cs_set:Npn \sb { \sub[mathsb] }
},
- math/false .code:n =
+ math/false .code:n =
{
\cs_set:Npn \sp { \spb@math@super@save }
\cs_set:Npn \sb { \spb@math@sub@save }
},
- math .default:n = true,
+ math .default:n = true,
foot .choice:,
- foot/true .code:n =
+ foot/true .code:n =
{
\cs_set:Npn \@makefnmark
{ \hbox:n { \fnmarkfont{\super[fnmark]{\@thefnmark}} } }
},
- foot/false .code:n =
+ foot/false .code:n =
{ \cs_set:Npn \@makefnmark { \spb@@makefnmark@save } },
- foot .default:n = true,
- both .meta:n = { text = #1,math = #1 },
- both .default:n = true,
- all .meta:n = { text = #1,math = #1,foot = #1 },
- all .default:n = true
+ foot .default:n = true,
+ both .meta:n = { text = #1,math = #1 },
+ both .default:n = true,
+ all .meta:n = { text = #1,math = #1,foot = #1 },
+ all .default:n = true
+ }
+\char_set_catcode_active:N \~
+\keys_define:nn { spbmark/option }
+ {
+ math* .choice:,
+ math*/true .code:n =
+ {
+ \AfterPreamble
+ {
+ \group_begin:
+ \char_set_lccode:nn { `\~ } { `\^ }
+ \lowercase{\group_end:\cs_set:Npn ~} { \super[mathsp*] }
+ \group_begin:
+ \char_set_lccode:nn { `\~ } { `\_ }
+ \lowercase{\group_end:\cs_set:Npn ~} { \sub[mathsb*] }
+ \char_set_mathcode:nn { `\^ } { "8000 }
+ \char_set_catcode_other:N \^
+ \char_set_catcode_other:N \_
+ }
+ },
+ math*/false .code:n =
+ {
+ \AfterPreamble
+ {
+ \char_set_catcode_math_superscript:N \^
+ \char_set_catcode_math_subscript:N \_
+ \char_set_mathcode:nn { `\^ } { "005E }
+ }
+ },
+ math* .default:n = true
}
+\char_set_catcode_space:N \~
\tl_if_exist:NTF \ftntm@font
{ \tl_set_eq:NN \fnmarkfont \ftntm@font }
{ \tl_set_eq:NN \fnmarkfont \normalfont }
@@ -113,7 +146,7 @@
\cs_new_protected:Npn \spbshortkv #1#2
{ \spb_define:n { #1 .meta:n = {#2} } }
\clist_map_inline:nn
- { textsp,textsb,mathsp,mathsb,fnmark }
+ { textsp,textsb,mathsp,mathsb,mathsp*,mathsb*,fnmark }
{
\defspbstyle{#1}{}
\spbshortkv{#1}{style = #1}
@@ -157,13 +190,13 @@
}
\cs_new:Npn \spb_box_super_move_up_i:n #1
- { \box_move_up:nn {#1} { \box_use:N \l__super_i_inner_box } }
+ { \box_move_up:nn {#1} { \box_use:N \g__super_i_inner_box } }
\cs_new:Npn \spb_box_sub_move_down_i:n #1
- { \box_move_down:nn {#1} { \box_use:N \l__sub_i_inner_box } }
+ { \box_move_down:nn {#1} { \box_use:N \g__sub_i_inner_box } }
\cs_new:Npn \spb_box_super_move_up_ii:n #1
- { \box_move_up:nn {#1} { \box_use:N \l__super_ii_box } }
+ { \box_move_up:nn {#1} { \box_use:N \g__super_ii_box } }
\cs_new:Npn \spb_box_sub_move_down_ii:n #1
- { \box_move_down:nn {#1} { \box_use:N \l__sub_ii_box } }
+ { \box_move_down:nn {#1} { \box_use:N \g__sub_ii_box } }
\cs_new:Npn \spb_box_vmove_i:nn #1
{
\str_case:nn {#1}
@@ -256,28 +289,28 @@
\cs_new_protected:Npn \spb_ht_dp_assign:nnnn #1#2#3#4
{
\tl_if_blank:vF { l__#1_height_#3_tl }
- { \box_set_ht:cv { l__#1_#3#4_box } { l__#1_height_#3_tl } }
+ { \box_set_ht:cv { g__#1_#3#4_box } { l__#1_height_#3_tl } }
\tl_if_blank:vF { l__#1_depth_i_tl }
- { \box_set_dp:cv { l__#2_#3#4_box } { l__#2_depth_#3_tl } }
+ { \box_set_dp:cv { g__#2_#3#4_box } { l__#2_depth_#3_tl } }
}
-\box_new:N \l__super_i_outer_box
-\box_new:N \l__super_i_inner_box
-\box_new:N \l__sub_i_outer_box
-\box_new:N \l__sub_i_inner_box
-\box_new:N \l__super_ii_box
-\box_new:N \l__sub_ii_box
+\box_new:N \g__super_i_outer_box
+\box_new:N \g__super_i_inner_box
+\box_new:N \g__sub_i_outer_box
+\box_new:N \g__sub_i_inner_box
+\box_new:N \g__super_ii_box
+\box_new:N \g__sub_ii_box
\dim_new:N \llastwd
\dim_new:N \clastwd
\dim_new:N \rlastwd
-\tl_set:Nn \superwd { \box_wd:N \l__super_ii_box }
-\tl_set:Nn \subwd { \box_wd:N \l__sub_ii_box }
+\tl_set:Nn \superwd { \box_wd:N \g__super_ii_box }
+\tl_set:Nn \subwd { \box_wd:N \g__sub_ii_box }
\tl_set:Nn \maxwd { \dim_max:VV \superwd \subwd }
-\tl_set:Nn \l__spb_box_super_wd_i_tl { \box_wd:N \l__super_i_inner_box }
-\tl_set:Nn \l__spb_box_sub_wd_i_tl { \box_wd:N \l__sub_i_inner_box }
+\tl_set:Nn \l__spb_box_super_wd_i_tl { \box_wd:N \g__super_i_inner_box }
+\tl_set:Nn \l__spb_box_sub_wd_i_tl { \box_wd:N \g__sub_i_inner_box }
\cs_new:Npn \spb_math_print_store_i:nn #1#2
{
- \hbox_gset:cn { l__#1_i_inner_box }
+ \hbox_gset:cn { g__#1_i_inner_box }
{
\ensuremath
{
@@ -289,7 +322,7 @@
}
\cs_new:Npn \spb_text_print_store_i:nn #1#2
{
- \hbox_gset:cn { l__#1_i_inner_box }
+ \hbox_gset:cn { g__#1_i_inner_box }
{
\use:c { spb@text#1script@save }
{ \tl_use:c { l__spb_#1_cmd_i_tl }{#2} }
@@ -298,16 +331,16 @@
}
\cs_new:Npn \spb_math_print_store_ii:nn #1#2
{
- \hbox_gset:Nn \l__super_ii_box
+ \hbox_gset:Nn \g__super_ii_box
{ \ensuremath{\spb@math@super@save{\l__spb_super_cmd_ii_tl{#1}}} }
- \hbox_gset:Nn \l__sub_ii_box
+ \hbox_gset:Nn \g__sub_ii_box
{ \ensuremath{\spb@math@sub@save{\l__spb_sub_cmd_ii_tl{#2}}} }
}
\cs_new:Npn \spb_text_print_store_ii:nn #1#2
{
- \hbox_gset:Nn \l__super_ii_box
+ \hbox_gset:Nn \g__super_ii_box
{ \spb@textsuperscript@save{\l__spb_super_cmd_ii_tl{#1}} }
- \hbox_gset:Nn \l__sub_ii_box
+ \hbox_gset:Nn \g__sub_ii_box
{ \spb@textsubscript@save{\l__spb_sub_cmd_ii_tl{#2}} }
}
\cs_set_eq:NN \spbifmath \use_ii:nn
@@ -408,7 +441,7 @@
\spb_mode_switch:nnn {#1} {##4} { i }
\spb_content_hbox_set:nn {#1} {##1}
\spb_ht_dp_assign:nnnn {#1} {#1} { i } { _outer }
- \box_use:c { l__#1_i_outer_box }
+ \box_use:c { g__#1_i_outer_box }
\exp_last_unbraced:Nx
\group_end:
{
@@ -422,7 +455,7 @@
{
\dim_gset:Nn \clastwd { (\llastwd + \rlastwd)/2 }
\tl_set:Nn \abs@hmove@i { \dim_abs:v { l__spb_#1_hmove_tl } }
- \hbox_set:cn { l__#1_i_outer_box }
+ \hbox_gset:cn { g__#1_i_outer_box }
{
\dim_compare:vNnTF { l__spb_#1_hmove_tl } < { 0pt }
{
diff --git a/macros/latex/contrib/spbmark/spbmark.tex b/macros/latex/contrib/spbmark/spbmark.tex
index 9bd3057ad4..9d04ea07f9 100644
--- a/macros/latex/contrib/spbmark/spbmark.tex
+++ b/macros/latex/contrib/spbmark/spbmark.tex
@@ -2,13 +2,14 @@
\usepackage{siunitx,setspace,pifont,hologo}
\usepackage[spbmark]{altsubsup}
+\usepackage[margin = 1in,marginparwidth = 0.6in,footskip = 0.5in]{geometry}
\usepackage[noto]{newtxmath}
\setcnltx
{
package = spbmark,
title = the spbmark package,
- version = v1.46f,
- date = 2024/04/24,
+ version = v1.46j,
+ date = 2024/05/19,
authors = Qu Yi,
info = Customize superscript and subscript,
email = toquyi@163.com,
@@ -39,21 +40,23 @@
\newsplitarg{\splitoarg}{[}{]}
\newsplitarg{\splitmarg}{\{}{\}}
\newsplitarg{\splitdarg}{(}{)}
-\newnote{\newtag}[1][New]{\textcolor{red}{\ding{73}\ #1}}
+\newnote{\newtag}[1]{\textcolor{red}{#1}}
\renewcommand{\emph}[1]{\textcolor{red}{#1}}
\renewcommand{\cnltx@write@lastname}{}
\makeatother
\begin{document}
\section{Macro package options}
-The following macro package options will redefine the script commands of the \LaTeX{} kernel. If you do not specify the values of boolean options, they default to \code{true}. These options can also be changed in the preamble area and main body using the global control command \cs{sbpset}.
+The following macro package options will redefine the script commands of the \LaTeX{} kernel. If you do not specify the values of boolean options, they default to \code{true}. These options can also be changed in the preamble area and main body using the global control command \cs{spbset}.
\begin{options}
- \keychoice{text}{true,\fbox{false}}\newtag[Changed]%
- \cs{textsuperscript} and \cs{textsubscript} are equivalent to the \cs{super} and \cs{sub} commands. At this point, you can use the \cs{defspbstyle} command to define the style \code{textsp} and \code{textsb} to change the format of the text superscript and subscript.
- \keychoice{math}{true,\fbox{false}}\newtag[Changed]%
- \cs{sp} and \cs{sb} are equivalent to the \cs{super} and \cs{sub} commands. At this point, you can use the \cs{defspbstyle} command to define the style \code{mathsp} and \code{mathsb} to change the format of the math superscript and subscript.
- \keychoice{foot}{true,\fbox{false}}\newtag[Changed]%
- The format of the footnote mark match the superscript global move and format settings. At this point, you can use the \cs{defspbstyle} command to define the superscript style \code{fnmark} to change the format of the footnote mark.
+ \keychoice{text}{true,\fbox{false}}
+ \cs{textsuperscript} and \cs{textsubscript} are equivalent to the \cs{super} and \cs{sub} commands. The command \cs{defspbstyle} can be used to define the style \code{textsp} and \code{textsb} to change the format of the text superscript and subscript.
+ \keychoice{math}{true,\fbox{false}}
+ \cs{sp} and \cs{sb} are equivalent to the \cs{super} and \cs{sub} commands. The command \cs{defspbstyle} can be used to define the style \code{mathsp} and \code{mathsb} to change the format of the math superscript and subscript.
+ \keychoice{math*}{true,\fbox{false}}\newtag{Exp\\v1.46j}%
+ The \code{\^{}} and \code{\_{}} tokens in the math mode are equivalent to the \cs{super} and \cs{sub} commands. The command \cs{defspbstyle} can be used to define the style \code{mathsp*} and \code{mathsb*} to change the format of the math superscript and subscript.
+ \keychoice{foot}{true,\fbox{false}}
+ The format of the footnote mark match the superscript global move and format settings. \cs{defspbstyle} can be used to define the superscript style \code{fnmark} to change the format of the footnote mark.
\begin{example}[code-only]
\defspbstyle{textsp}{vmove=-1pt,cmd=\bfseries}
\defspbstyle{mathsb}{hmove=0.5em}
@@ -151,7 +154,7 @@ The options common to \meta{kv list} of the three commands are as follows. They
Use the \meta{style name} defined by the \cs{defspbstyle} command to make it work global or local.
\keychoice{mode}{text,math,\fbox{match}}
The mode of superscript or subscript output can be \code{text} or \code{math} mode. The \code{match} option automatically matches output modes according to the current mode.
- \keychoice{thiswd}{auto,\fbox{keep}}\newtag%
+ \keychoice{thiswd}{auto,\fbox{keep}}
Sets how the length of the this marker is handled after this command is used. If it is \code{keep}, the width of the previous marker remains the same. If it is \code{auto}, if the next token is a marker command and the upper or lower position is the \textcolor{red}{opposite} of the this command, the width of the this marker is maintained, otherwise the width automatically returns to \textcolor{red}{zero}.
\begin{example}
\spbset{sbhmove=-\llastwd,sbthiswd=auto,sbcmd=\color{red}}
@@ -160,7 +163,7 @@ The options common to \meta{kv list} of the three commands are as follows. They
3A\sub{bcd}[thiswd=keep]\sub{e}Some texts\sub{e} \\
4A\sub{bcd}\sub{e}Some texts\sub{e}
\end{example}
- \keyval{regex}{regular expression}\newtag%
+ \keyval{regex}{regular expression}
After using the superscript or subscript command, this option is used to determine whether the \textcolor{red}{following} tokens match the \meta{regular expression}. If it does \textcolor{red}{not}, the width of the this marker returns to zero.
\begin{example}[code-only]
\newcommand{\mysp}[2][]{\super[regex=\c{mysb},#1]{#2}}
@@ -205,13 +208,13 @@ The following list of keys control the format both of superscript \emph{or} subs
The distance between the subscript baseline and the previous line.
\keyval{sbdepth}{fixed length}
The distance between the subscript baseline and the next line.
- \keychoice{spthiswd}{auto,\fbox{keep}}\newtag%
+ \keychoice{spthiswd}{auto,\fbox{keep}}
Width processing mode after using this superscript. See Section \ref{sec:user commands} for the meaning of this option.
- \keychoice{sbthiswd}{auto,\fbox{keep}}\newtag%
+ \keychoice{sbthiswd}{auto,\fbox{keep}}
Width processing mode after using this subscript. See Section \ref{sec:user commands} for the meaning of this option.
- \keyval{spregex}{regular expression}\newtag%
+ \keyval{spregex}{regular expression}
After the superscript command is used, the regular expression rules of the following tokens are matched. See Section \ref{sec:user commands} for the meaning of this option.
- \keyval{sbregex}{regular expression}\newtag%
+ \keyval{sbregex}{regular expression}
After the subscript command is used, the regular expression rules of the following tokens are matched. See Section \ref{sec:user commands} for the meaning of this option.
\end{options}
@@ -250,9 +253,12 @@ Here is a list of the three commands, please pay attention to the usage of optio
\subsection{siunitx}
It can also be used with the \pkg*{siunitx} package to output superscript and subscript in the unit:
\begin{example}
- \unit[mode=math]{kg.m/s\super[vmove=-1pt]{2}} \\
- \qty[mode=text]{30}{A\supersub[hmove=1pt,cmd=\color{red}]{b}{c}} \\
- \spbset{sbhmove=2pt}\unit[mode=text]{A\sub{b}}
+ \spbset{spcmd=\spbifmath{}{\color{purple}}}
+ \sisetup{text-superscript-command=\super}
+ 1-\qty[mode=text]{10}{A^2} \\
+ 2-\unit[mode=math]{kg.m/s\super[vmove=-1pt]{2}} \\
+ 3-\qty[mode=text]{30}{A\supersub[hmove=1pt,cmd=\color{blue}]{b}{c}} \\
+ 4-\spbset{sbhmove=2pt}\unit[mode=text]{A\sub{b}}
\end{example}
\subsection{realscripts}
diff --git a/macros/latex/contrib/synthslant/LICENSE b/macros/latex/contrib/synthslant/LICENSE
new file mode 100644
index 0000000000..f8b699e6eb
--- /dev/null
+++ b/macros/latex/contrib/synthslant/LICENSE
@@ -0,0 +1,415 @@
+The LaTeX Project Public License
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+LPPL Version 1.3c 2008-05-04
+
+Copyright 1999 2002-2008 LaTeX3 Project
+ Everyone is allowed to distribute verbatim copies of this
+ license document, but modification of it is not allowed.
+
+
+PREAMBLE
+========
+
+The LaTeX Project Public License (LPPL) is the primary license under
+which the LaTeX kernel and the base LaTeX packages are distributed.
+
+You may use this license for any work of which you hold the copyright
+and which you wish to distribute. This license may be particularly
+suitable if your work is TeX-related (such as a LaTeX package), but
+it is written in such a way that you can use it even if your work is
+unrelated to TeX.
+
+The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE',
+below, gives instructions, examples, and recommendations for authors
+who are considering distributing their works under this license.
+
+This license gives conditions under which a work may be distributed
+and modified, as well as conditions under which modified versions of
+that work may be distributed.
+
+We, the LaTeX3 Project, believe that the conditions below give you
+the freedom to make and distribute modified versions of your work
+that conform with whatever technical specifications you wish while
+maintaining the availability, integrity, and reliability of
+that work. If you do not see how to achieve your goal while
+meeting these conditions, then read the document `cfgguide.tex'
+and `modguide.tex' in the base LaTeX distribution for suggestions.
+
+
+DEFINITIONS
+===========
+
+In this license document the following terms are used:
+
+ `Work'
+ Any work being distributed under this License.
+
+ `Derived Work'
+ Any work that under any applicable law is derived from the Work.
+
+ `Modification'
+ Any procedure that produces a Derived Work under any applicable
+ law -- for example, the production of a file containing an
+ original file associated with the Work or a significant portion of
+ such a file, either verbatim or with modifications and/or
+ translated into another language.
+
+ `Modify'
+ To apply any procedure that produces a Derived Work under any
+ applicable law.
+
+ `Distribution'
+ Making copies of the Work available from one person to another, in
+ whole or in part. Distribution includes (but is not limited to)
+ making any electronic components of the Work accessible by
+ file transfer protocols such as FTP or HTTP or by shared file
+ systems such as Sun's Network File System (NFS).
+
+ `Compiled Work'
+ A version of the Work that has been processed into a form where it
+ is directly usable on a computer system. This processing may
+ include using installation facilities provided by the Work,
+ transformations of the Work, copying of components of the Work, or
+ other activities. Note that modification of any installation
+ facilities provided by the Work constitutes modification of the Work.
+
+ `Current Maintainer'
+ A person or persons nominated as such within the Work. If there is
+ no such explicit nomination then it is the `Copyright Holder' under
+ any applicable law.
+
+ `Base Interpreter'
+ A program or process that is normally needed for running or
+ interpreting a part or the whole of the Work.
+
+ A Base Interpreter may depend on external components but these
+ are not considered part of the Base Interpreter provided that each
+ external component clearly identifies itself whenever it is used
+ interactively. Unless explicitly specified when applying the
+ license to the Work, the only applicable Base Interpreter is a
+ `LaTeX-Format' or in the case of files belonging to the
+ `LaTeX-format' a program implementing the `TeX language'.
+
+
+
+CONDITIONS ON DISTRIBUTION AND MODIFICATION
+===========================================
+
+1. Activities other than distribution and/or modification of the Work
+are not covered by this license; they are outside its scope. In
+particular, the act of running the Work is not restricted and no
+requirements are made concerning any offers of support for the Work.
+
+2. You may distribute a complete, unmodified copy of the Work as you
+received it. Distribution of only part of the Work is considered
+modification of the Work, and no right to distribute such a Derived
+Work may be assumed under the terms of this clause.
+
+3. You may distribute a Compiled Work that has been generated from a
+complete, unmodified copy of the Work as distributed under Clause 2
+above, as long as that Compiled Work is distributed in such a way that
+the recipients may install the Compiled Work on their system exactly
+as it would have been installed if they generated a Compiled Work
+directly from the Work.
+
+4. If you are the Current Maintainer of the Work, you may, without
+restriction, modify the Work, thus creating a Derived Work. You may
+also distribute the Derived Work without restriction, including
+Compiled Works generated from the Derived Work. Derived Works
+distributed in this manner by the Current Maintainer are considered to
+be updated versions of the Work.
+
+5. If you are not the Current Maintainer of the Work, you may modify
+your copy of the Work, thus creating a Derived Work based on the Work,
+and compile this Derived Work, thus creating a Compiled Work based on
+the Derived Work.
+
+6. If you are not the Current Maintainer of the Work, you may
+distribute a Derived Work provided the following conditions are met
+for every component of the Work unless that component clearly states
+in the copyright notice that it is exempt from that condition. Only
+the Current Maintainer is allowed to add such statements of exemption
+to a component of the Work.
+
+ a. If a component of this Derived Work can be a direct replacement
+ for a component of the Work when that component is used with the
+ Base Interpreter, then, wherever this component of the Work
+ identifies itself to the user when used interactively with that
+ Base Interpreter, the replacement component of this Derived Work
+ clearly and unambiguously identifies itself as a modified version
+ of this component to the user when used interactively with that
+ Base Interpreter.
+
+ b. Every component of the Derived Work contains prominent notices
+ detailing the nature of the changes to that component, or a
+ prominent reference to another file that is distributed as part
+ of the Derived Work and that contains a complete and accurate log
+ of the changes.
+
+ c. No information in the Derived Work implies that any persons,
+ including (but not limited to) the authors of the original version
+ of the Work, provide any support, including (but not limited to)
+ the reporting and handling of errors, to recipients of the
+ Derived Work unless those persons have stated explicitly that
+ they do provide such support for the Derived Work.
+
+ d. You distribute at least one of the following with the Derived Work:
+
+ 1. A complete, unmodified copy of the Work;
+ if your distribution of a modified component is made by
+ offering access to copy the modified component from a
+ designated place, then offering equivalent access to copy
+ the Work from the same or some similar place meets this
+ condition, even though third parties are not compelled to
+ copy the Work along with the modified component;
+
+ 2. Information that is sufficient to obtain a complete,
+ unmodified copy of the Work.
+
+7. If you are not the Current Maintainer of the Work, you may
+distribute a Compiled Work generated from a Derived Work, as long as
+the Derived Work is distributed to all recipients of the Compiled
+Work, and as long as the conditions of Clause 6, above, are met with
+regard to the Derived Work.
+
+8. The conditions above are not intended to prohibit, and hence do not
+apply to, the modification, by any method, of any component so that it
+becomes identical to an updated version of that component of the Work as
+it is distributed by the Current Maintainer under Clause 4, above.
+
+9. Distribution of the Work or any Derived Work in an alternative
+format, where the Work or that Derived Work (in whole or in part) is
+then produced by applying some process to that format, does not relax or
+nullify any sections of this license as they pertain to the results of
+applying that process.
+
+10. a. A Derived Work may be distributed under a different license
+ provided that license itself honors the conditions listed in
+ Clause 6 above, in regard to the Work, though it does not have
+ to honor the rest of the conditions in this license.
+
+ b. If a Derived Work is distributed under a different license, that
+ Derived Work must provide sufficient documentation as part of
+ itself to allow each recipient of that Derived Work to honor the
+ restrictions in Clause 6 above, concerning changes from the Work.
+
+11. This license places no restrictions on works that are unrelated to
+the Work, nor does this license place any restrictions on aggregating
+such works with the Work by any means.
+
+12. Nothing in this license is intended to, or may be used to, prevent
+complete compliance by all parties with all applicable laws.
+
+
+NO WARRANTY
+===========
+
+There is no warranty for the Work. Except when otherwise stated in
+writing, the Copyright Holder provides the Work `as is', without
+warranty of any kind, either expressed or implied, including, but not
+limited to, the implied warranties of merchantability and fitness for a
+particular purpose. The entire risk as to the quality and performance
+of the Work is with you. Should the Work prove defective, you assume
+the cost of all necessary servicing, repair, or correction.
+
+In no event unless required by applicable law or agreed to in writing
+will The Copyright Holder, or any author named in the components of the
+Work, or any other party who may distribute and/or modify the Work as
+permitted above, be liable to you for damages, including any general,
+special, incidental or consequential damages arising out of any use of
+the Work or out of inability to use the Work (including, but not limited
+to, loss of data, data being rendered inaccurate, or losses sustained by
+anyone as a result of any failure of the Work to operate with any other
+programs), even if the Copyright Holder or said author or said other
+party has been advised of the possibility of such damages.
+
+
+MAINTENANCE OF THE WORK
+=======================
+
+The Work has the status `author-maintained' if the Copyright Holder
+explicitly and prominently states near the primary copyright notice in
+the Work that the Work can only be maintained by the Copyright Holder
+or simply that it is `author-maintained'.
+
+The Work has the status `maintained' if there is a Current Maintainer
+who has indicated in the Work that they are willing to receive error
+reports for the Work (for example, by supplying a valid e-mail
+address). It is not required for the Current Maintainer to acknowledge
+or act upon these error reports.
+
+The Work changes from status `maintained' to `unmaintained' if there
+is no Current Maintainer, or the person stated to be Current
+Maintainer of the work cannot be reached through the indicated means
+of communication for a period of six months, and there are no other
+significant signs of active maintenance.
+
+You can become the Current Maintainer of the Work by agreement with
+any existing Current Maintainer to take over this role.
+
+If the Work is unmaintained, you can become the Current Maintainer of
+the Work through the following steps:
+
+ 1. Make a reasonable attempt to trace the Current Maintainer (and
+ the Copyright Holder, if the two differ) through the means of
+ an Internet or similar search.
+
+ 2. If this search is successful, then enquire whether the Work
+ is still maintained.
+
+ a. If it is being maintained, then ask the Current Maintainer
+ to update their communication data within one month.
+
+ b. If the search is unsuccessful or no action to resume active
+ maintenance is taken by the Current Maintainer, then announce
+ within the pertinent community your intention to take over
+ maintenance. (If the Work is a LaTeX work, this could be
+ done, for example, by posting to comp.text.tex.)
+
+ 3a. If the Current Maintainer is reachable and agrees to pass
+ maintenance of the Work to you, then this takes effect
+ immediately upon announcement.
+
+ b. If the Current Maintainer is not reachable and the Copyright
+ Holder agrees that maintenance of the Work be passed to you,
+ then this takes effect immediately upon announcement.
+
+ 4. If you make an `intention announcement' as described in 2b. above
+ and after three months your intention is challenged neither by
+ the Current Maintainer nor by the Copyright Holder nor by other
+ people, then you may arrange for the Work to be changed so as
+ to name you as the (new) Current Maintainer.
+
+ 5. If the previously unreachable Current Maintainer becomes
+ reachable once more within three months of a change completed
+ under the terms of 3b) or 4), then that Current Maintainer must
+ become or remain the Current Maintainer upon request provided
+ they then update their communication data within one month.
+
+A change in the Current Maintainer does not, of itself, alter the fact
+that the Work is distributed under the LPPL license.
+
+If you become the Current Maintainer of the Work, you should
+immediately provide, within the Work, a prominent and unambiguous
+statement of your status as Current Maintainer. You should also
+announce your new status to the same pertinent community as
+in 2b) above.
+
+
+WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE
+======================================================
+
+This section contains important instructions, examples, and
+recommendations for authors who are considering distributing their
+works under this license. These authors are addressed as `you' in
+this section.
+
+Choosing This License or Another License
+----------------------------------------
+
+If for any part of your work you want or need to use *distribution*
+conditions that differ significantly from those in this license, then
+do not refer to this license anywhere in your work but, instead,
+distribute your work under a different license. You may use the text
+of this license as a model for your own license, but your license
+should not refer to the LPPL or otherwise give the impression that
+your work is distributed under the LPPL.
+
+The document `modguide.tex' in the base LaTeX distribution explains
+the motivation behind the conditions of this license. It explains,
+for example, why distributing LaTeX under the GNU General Public
+License (GPL) was considered inappropriate. Even if your work is
+unrelated to LaTeX, the discussion in `modguide.tex' may still be
+relevant, and authors intending to distribute their works under any
+license are encouraged to read it.
+
+A Recommendation on Modification Without Distribution
+-----------------------------------------------------
+
+It is wise never to modify a component of the Work, even for your own
+personal use, without also meeting the above conditions for
+distributing the modified component. While you might intend that such
+modifications will never be distributed, often this will happen by
+accident -- you may forget that you have modified that component; or
+it may not occur to you when allowing others to access the modified
+version that you are thus distributing it and violating the conditions
+of this license in ways that could have legal implications and, worse,
+cause problems for the community. It is therefore usually in your
+best interest to keep your copy of the Work identical with the public
+one. Many works provide ways to control the behavior of that work
+without altering any of its licensed components.
+
+How to Use This License
+-----------------------
+
+To use this license, place in each of the components of your work both
+an explicit copyright notice including your name and the year the work
+was authored and/or last substantially modified. Include also a
+statement that the distribution and/or modification of that
+component is constrained by the conditions in this license.
+
+Here is an example of such a notice and statement:
+
+ %% pig.dtx
+ %% Copyright 2005 M. Y. Name
+ %
+ % This work may be distributed and/or modified under the
+ % conditions of the LaTeX Project Public License, either version 1.3
+ % of this license or (at your option) any later version.
+ % The latest version of this license is in
+ % http://www.latex-project.org/lppl.txt
+ % and version 1.3 or later is part of all distributions of LaTeX
+ % version 2005/12/01 or later.
+ %
+ % This work has the LPPL maintenance status `maintained'.
+ %
+ % The Current Maintainer of this work is M. Y. Name.
+ %
+ % This work consists of the files pig.dtx and pig.ins
+ % and the derived file pig.sty.
+
+Given such a notice and statement in a file, the conditions
+given in this license document would apply, with the `Work' referring
+to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being
+generated from `pig.dtx' using `pig.ins'), the `Base Interpreter'
+referring to any `LaTeX-Format', and both `Copyright Holder' and
+`Current Maintainer' referring to the person `M. Y. Name'.
+
+If you do not want the Maintenance section of LPPL to apply to your
+Work, change `maintained' above into `author-maintained'.
+However, we recommend that you use `maintained', as the Maintenance
+section was added in order to ensure that your Work remains useful to
+the community even when you can no longer maintain and support it
+yourself.
+
+Derived Works That Are Not Replacements
+---------------------------------------
+
+Several clauses of the LPPL specify means to provide reliability and
+stability for the user community. They therefore concern themselves
+with the case that a Derived Work is intended to be used as a
+(compatible or incompatible) replacement of the original Work. If
+this is not the case (e.g., if a few lines of code are reused for a
+completely different task), then clauses 6b and 6d shall not apply.
+
+
+Important Recommendations
+-------------------------
+
+ Defining What Constitutes the Work
+
+ The LPPL requires that distributions of the Work contain all the
+ files of the Work. It is therefore important that you provide a
+ way for the licensee to determine which files constitute the Work.
+ This could, for example, be achieved by explicitly listing all the
+ files of the Work near the copyright notice of each file or by
+ using a line such as:
+
+ % This work consists of all files listed in manifest.txt.
+
+ in that place. In the absence of an unequivocal list it might be
+ impossible for the licensee to determine what is considered by you
+ to comprise the Work and, in such a case, the licensee would be
+ entitled to make reasonable conjectures as to which files comprise
+ the Work.
diff --git a/macros/latex/contrib/synthslant/Makefile b/macros/latex/contrib/synthslant/Makefile
new file mode 100644
index 0000000000..d8de419230
--- /dev/null
+++ b/macros/latex/contrib/synthslant/Makefile
@@ -0,0 +1,302 @@
+### name: Makefile
+### synopsis: Build `synthslant' style file and documentation
+### author: Dr. Christoph L. Spiel
+### GNU make version: 4.3
+
+
+SHELL := /bin/sh
+
+
+BASE64 := base64
+BASE64_FLAGS :=
+
+
+DVIPDFMX := dvipdfmx
+DVIPDFMX_FLAGS :=
+
+
+DVIPS := dvips
+DVIPS_FLAGS := -d1 # debug \special{}
+
+
+LATEX := /usr/bin/env max_print_line=2147483647 pdflatex
+LATEX_FLAGS := -file-line-error -halt-on-error -interaction=nonstopmode
+LATEX_RERUN_TRIGGER := '^Package rerunfilecheck Warning: File [^ ]* has changed'
+LATEX_WARNING := '^LaTeX (|[A-Za-z0-9_]* )Warning:'
+
+
+MAKEINDEX := makeindex
+MAKEINDEX_FLAGS := -q
+
+
+METAPOST := mpost
+METAPOST_FLAGS := -file-line-error -interaction=nonstopmode -tex=latex
+
+
+SPELLCHECK := aspell
+SPELLCHECK_FLAGS := \
+ --add-tex-command='citenum p' --add-tex-command='code p' \
+ --add-tex-command='Cref p' --add-tex-command='cref p' \
+ --add-tex-command='cs p' \
+ --add-tex-command='DescribeEnv p' --add-tex-command='DescribeMacro p' \
+ --add-tex-command='marg p' --add-tex-command='meta p' \
+ --add-tex-command='oarg p' \
+ --lang=en_US --mode=tex
+
+
+SOURCE_FILES := LICENSE Makefile synthslant.dtx synthslant.ins
+
+
+
+.PHONY: all
+all: sty pdf
+
+
+.PHONY: sty
+sty: synthslant.sty
+
+
+.PHONY: pdf
+pdf: doc gauge
+
+
+.PHONY: doc
+doc: synthslant.pdf
+
+
+.PHONY: gauge
+gauge: synthslant-gauge.pdf
+
+
+.PHONY: cpio
+cpio:
+ cd ..; \
+ echo $(addprefix synthslant/,$(SOURCE_FILES)) | \
+ cpio -o | \
+ gzip > "synthslant-$$(date +%Y-%m-%d).cpio.gz"
+
+
+.PHONY: tar
+tar:
+ cd ..; \
+ tar czf "synthslant-$$(date +%Y-%m-%d).tar.gz" \
+ $(addprefix synthslant/,$(SOURCE_FILES))
+
+
+.PHONY: clean
+clean:
+ $(RM) ./*.aux ./*.brf ./*.dvi ./*.glg ./*.glo ./*.gls
+ $(RM) ./*.hd ./*.idx ./*.ilg ./*.ind ./*.loe ./*.lof ./*.log ./*.lot
+ $(RM) ./*.mp ./*.mps ./*.mpx ./*.out ./*.pdf ./*.ps ./*.toc
+ $(RM) mptextmp.* mpxerr.tex
+ $(RM) README README.html RELEASE-HOWTO RELEASE-HOWTO.html
+ $(RM) compare-with-the-gimp.eps compare-with-the-gimp.png
+
+
+.PHONY: mostlyclean
+mostlyclean: clean
+
+
+.PHONY: maintainer-clean
+maintainer-clean: mostlyclean
+ $(RM) ./*.base64 ./*.ist ./*.mp ./*.sty ./*.tex
+
+
+.PHONY: perf
+perf: synthslant-gauge.tex synthslant.sty
+ perf stat --repeat=10 -- $(LATEX) $(LATEX_FLAGS) -interaction batchmode -draftmode $<
+
+
+.PHONY: tool-check
+tool-check:
+ @printf '*** LATEX = "%s"\n' '$(LATEX)'
+ $(LATEX) --version
+ @printf '\n\n*** MAKEINDEX = "%s"\n' '$(MAKEINDEX)'
+ $(MAKEINDEX) < /dev/null
+ @printf '\n\n*** METAPOST = "%s"\n' '$(METAPOST)'
+ $(METAPOST) --version
+ @printf '\n*** BASE64 = "%s"\n' '$(BASE64)'
+ $(BASE64) --version
+ @printf '\n\nTool check passed.\n'
+
+
+.PHONY: spell-check
+spell-check:
+ @sed -e '\#<DISABLE-SPELL-CHECK/>#d' \
+ -e '\#<DISABLE-SPELL-CHECK>#,\#</DISABLE-SPELL-CHECK>#d' < synthslant.dtx | \
+ sed -e 's/^ *%%*//' | \
+ sed -e 's/\\-//g' -e 's/|[^|]*|/ /g' | \
+ $(SPELLCHECK) $(SPELLCHECK_FLAGS) list | \
+ sort | uniq | fmt | sed -e 's/ / /g'
+
+
+.PHONY: update-docs
+update-docs: pdf
+ cp -f synthslant.pdf synthslant-gauge.pdf docs
+
+
+define HELP_SCREEN
+Selected Phony Targets
+----------------------
+all: Make everything there is to make. This is the .DEFAULT_GOAL.
+
+clean: Remove some products.
+
+cpio: In the parent directory create a cpio(1) archive of the
+ project source files whose name is time-stamped.
+
+doc: Build "synthslant.pdf" the Syntslant documentation.
+
+gauge: Build "synthslant-gauge.pdf" the Syntslant gauge and example
+ file.
+
+maintainer-clean: Remove every product file that can be rebuilt even
+ if uncommon tools are necessary.
+
+mostlyclean: Remove some more products than clean:.
+
+pdf: Build doc: and gauge:.
+
+sty: Only extract "synthslant.sty" from "synthslant.dtx". This
+ operation requires LaTeX (-> $(LATEX)) and nothing else.
+
+tar: In the parent directory create a tar(1) file of the project
+ source files whose name is time-stamped.
+
+tool-check: Check whether some of the required tools to build the
+ project are available.
+
+
+Selected Implicit Rules
+-----------------------
+%.dvi %.pdf: %.dtx
+ Run LaTeX or pdfLaTeX (-> $(LATEX)) on dtx source until a
+ fix-point is reached.
+
+%.dvi %.pdf: %.tex
+ Run LaTeX or pdfLaTeX (-> $(LATEX)) on tex file until a
+ fix-point is reached.
+
+%.mx.pdf: %.dvi
+ Convert dvi to pdf via dvipdfmx (-> $(DVIPDFMX)).
+
+%.ps: %.dvi
+ Convert dvi to ps via dvips (-> $(DVIPS)).
+
+
+Some Explicit Rules
+-------------------
+README.html:
+ Convert "README.md" to html. Requires markdown(1).
+
+README: Convert "README.html" to plain text. Requires w3m(1).
+
+endef
+
+.PHONY: help
+help:
+ $(info $(HELP_SCREEN))
+
+
+
+.PRECIOUS: %.mps
+
+
+
+define MAKE_INDEX_AND_GLOSSARY
+sed -e '/@/d' < $*.idx > ,$*.idx; mv ,$*.idx $*.idx; \
+$(MAKEINDEX) $(MAKEINDEX_FLAGS) -s synthslant.ist -t $*.ilg -o $*.ind $*.idx; \
+$(MAKEINDEX) $(MAKEINDEX_FLAGS) -s gglo.ist -t $*.glg -o $*.gls $*.glo
+endef
+
+define GREP_LATEX_WARNINGS
+test -e $*.log && grep -E $(LATEX_WARNING) $*.log | uniq
+endef
+
+%.dvi %.pdf: %.dtx
+ $(RM) ./$*.aux ./$*.ind ./$*.idx ./$*.gls ./$*.glo ./$*.lof ./$*.lot ./$*.toc
+ $(LATEX) $(LATEX_FLAGS) -draftmode $<
+ $(MAKE_INDEX_AND_GLOSSARY)
+ $(LATEX) $(LATEX_FLAGS) $<
+ $(MAKE_INDEX_AND_GLOSSARY)
+ while test -e $*.log && grep -q $(LATEX_RERUN_TRIGGER) $*.log; \
+ do \
+ $(LATEX) $(LATEX_FLAGS) $<; \
+ $(MAKE_INDEX_AND_GLOSSARY); \
+ done
+ $(GREP_LATEX_WARNINGS)
+
+
+%.dvi: LATEX=latex
+
+
+%.dvi %.pdf: %.tex
+ $(RM) ./$*.aux ./$*.ind ./$*.idx ./$*.lof ./$*.lot ./$*.toc
+ $(LATEX) $(LATEX_FLAGS) -draftmode $<
+ $(LATEX) $(LATEX_FLAGS) $<
+ while test -e $*.log && grep -q $(LATEX_RERUN_TRIGGER) $*.log; \
+ do \
+ $(LATEX) $(LATEX_FLAGS) $<; \
+ done
+ $(GREP_LATEX_WARNINGS)
+
+
+%.mx.pdf: %.dvi
+ $(DVIPDFMX) $(DVIPDFMX_FLAGS) -o $@ $<
+
+
+%.ps: %.dvi
+ $(DVIPS) $(DVIPS_FLAGS) -o $@ $<
+
+
+%.mps: %.mp
+ $(METAPOST) -s 'outputtemplate="%j.mps"' $(METAPOST_FLAGS) $<
+
+
+%.eps: %.png
+ convert $< -compress lzw eps2:$@
+
+
+%.html: %.md
+ markdown $< > $@
+
+%: %.html
+ w3m -cols 79 $< > $@
+
+
+
+synthslant.sty synthslant.ist synthslant-gauge.tex \
+compare-with-the-gimp.png.base64 shear-transform.mp title.mp: \
+ synthslant.ins synthslant.dtx
+ $(LATEX) $(LATEX_FLAGS) $<
+
+
+synthslant.pdf: \
+ synthslant.dtx \
+ compare-with-the-gimp.png \
+ shear-transform.mps \
+ title.mps \
+ | synthslant.sty
+
+synthslant.dvi: \
+ synthslant.dtx \
+ compare-with-the-gimp.eps \
+ shear-transform.mps \
+ title.mps
+
+
+compare-with-the-gimp.png: compare-with-the-gimp.png.base64
+ $(BASE64) $(BASE64_FLAGS) --decode $< > $@
+
+
+shear-transform.mps: shear-transform.mp
+
+
+title.mps: title.mp
+
+
+## compare-with-the-gimp.png: compare-with-the-gimp.orig.png
+## convert $< -depth 8 -resize 50% -set colorspace Gray -separate -average $@
+##
+## compare-with-the-gimp.png.base64: compare-with-the-gimp.png
+## $(BASE64) $(BASE64_FLAGS) $< > $@
diff --git a/macros/latex/contrib/synthslant/README.md b/macros/latex/contrib/synthslant/README.md
new file mode 100644
index 0000000000..1b1c719189
--- /dev/null
+++ b/macros/latex/contrib/synthslant/README.md
@@ -0,0 +1,64 @@
+# SynthSlant &ndash; Synthetic slanting of glyphs
+
+LaTeX package `synthslant` slants short pieces of text to the right or to the left.
+
+
+## Installation
+
+The minimally necessary files to install synthslant are *synthslant.ins* and *synthslant.dtx*.
+Running LaTeX on *synthslant.ins* in particular produces *synthslant.sty*:
+
+ latex synthslant.ins
+
+After extraction from *synthslant.dtx* place *synthslant.sty* in a directory mentioned in your
+TEXINPUTS paths or copy it into one of the directories for your LaTeX installation's *sty*-files
+and run **mktexlsr** or equivalent.
+
+To build the documentation it is easier to use the GNU *Makefile*:
+
+ make
+
+LuaLaTeX users will want to override the default LaTeX command **pdflatex** with **lualatex** by
+saying
+
+ make LATEX=lualatex
+
+To construct the manual *synthslant.pdf* a working [MetaPost](https://tug.org/metapost.html)
+installation is required. Moreover, besides the usual POSIX utilities
+[**base64**](https://www.gnu.org/software/coreutils/manual/html_node/base64-invocation.html) is
+needed to recover the graphics file stored as printable ASCII characters inside of
+*synthslant.dtx*. Cautious users can run
+
+ make tool-check
+
+ahead to verify that the required utilities are installed and working.
+For an overview over the most important *Makefile* targets use
+
+ make help
+
+
+## Usage
+
+Load the package with the usual incantation
+
+ \usepackage{synthslant}
+
+See Section 2 of the package documentation for available options.
+
+
+## Documentation
+
+The package documentation can be found
+[online](https://cspiel.github.io/synthslant/).
+
+
+## Credits
+
+Synthslant is written by Ch. L. Spiel <cspiel@users.sourceforge.org>.
+
+
+## License
+
+Released under the
+[LaTeX Project Public License v1.3c](https://www.latex-project.org/lppl.txt)
+or later.
diff --git a/macros/latex/contrib/synthslant/RELEASE-HOWTO.md b/macros/latex/contrib/synthslant/RELEASE-HOWTO.md
new file mode 100644
index 0000000000..13435ef66d
--- /dev/null
+++ b/macros/latex/contrib/synthslant/RELEASE-HOWTO.md
@@ -0,0 +1,51 @@
+# How to prepare a new release
+
+... and not make too many mistakes.
+
+
+1. Check that the work-area is clean with respect to **git**-tracked
+ files.
+
+ ``` git status ```
+
+1. Update the date stamp of `\ProvidesPackage`.
+
+1. (Temporarily) Zero the `\overfullrule`s of the documentation and
+ the example files.
+
+1. Thoroughly clean the work-area:
+
+ ```make maintainer-clean```
+
+1. Rebuild:
+
+ ```make```
+
+1. Check that all _*.sty_ and _*.pdf_ files are in good shape.
+
+1. Push the documentation files created in the previous step down into
+ the *docs* directory:
+
+ ```make update-docs```
+
+1. Undo the `\overfullrule` change.
+
+1. Commit the changes:
+
+ ```
+ git add .
+ ```
+
+ and finally
+
+ ```
+ git commit
+ ```
+
+1. Tag the commit with the version string of `\ProvidesPackage`:
+
+ ```git tag v1.23```
+
+1. Push the changes to the public repository:
+
+ ```git push origin master --tags```
diff --git a/macros/latex/contrib/synthslant/docs/index.md b/macros/latex/contrib/synthslant/docs/index.md
new file mode 100644
index 0000000000..c8c312f388
--- /dev/null
+++ b/macros/latex/contrib/synthslant/docs/index.md
@@ -0,0 +1,4 @@
+### Package Documentation
+
+- Comprehensive `synthslant` documentation: [synthslant.pdf](https://cspiel.github.io/synthslant/synthslant.pdf)
+- `synthslant` test and demonstration: [synthslant-gauge.pdf](https://cspiel.github.io/synthslant/synthslant-gauge.pdf)
diff --git a/macros/latex/contrib/synthslant/docs/synthslant-gauge.pdf b/macros/latex/contrib/synthslant/docs/synthslant-gauge.pdf
new file mode 100644
index 0000000000..425e7944ef
--- /dev/null
+++ b/macros/latex/contrib/synthslant/docs/synthslant-gauge.pdf
Binary files differ
diff --git a/macros/latex/contrib/synthslant/docs/synthslant.pdf b/macros/latex/contrib/synthslant/docs/synthslant.pdf
new file mode 100644
index 0000000000..9b034b86c3
--- /dev/null
+++ b/macros/latex/contrib/synthslant/docs/synthslant.pdf
Binary files differ
diff --git a/macros/latex/contrib/synthslant/synthslant.dtx b/macros/latex/contrib/synthslant/synthslant.dtx
new file mode 100644
index 0000000000..f5424cf7fa
--- /dev/null
+++ b/macros/latex/contrib/synthslant/synthslant.dtx
@@ -0,0 +1,5264 @@
+% \iffalse
+%
+% Copyright (C) 2024 by Ch. L. Spiel
+%
+% This work may be distributed and/or modified under the conditions
+% of the LaTeX Project Public License, either version 1.3 of this
+% license or (at your option) any later version. The latest version
+% of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2003/12/01 or later.
+%
+% \fi
+%
+% \iffalse
+%<*driver>
+\documentclass{ltxdoc}
+
+\tracingonline=0
+
+%--\OnlyDescription
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+
+
+\PassOptionsToClass{a4paper}{article}
+\PassOptionsToPackage{hyperfootnotes=false}{hyperref}
+\PassOptionsToPackage{charter, scale=1.06}{newtxmath}
+\PassOptionsToPackage{dvipsnames}{xcolor}
+
+\usepackage{amsmath}
+\usepackage{booktabs}
+\usepackage{caption}
+\usepackage{dtk-logos}
+\usepackage{enumitem}
+\usepackage{etoolbox}%--\tracingpatches
+\usepackage{fancyhdr}
+\usepackage[T1]{fontenc}
+\usepackage{fullwidth}
+\usepackage{hypdoc}
+\usepackage{hyphenat}
+\usepackage{mathtools}
+\iftrue
+ \usepackage[letterspace=0, shrink=10, stretch=10, tracking=true]{microtype}
+ \DeclareMicrotypeSet[tracking]{italics}
+ {encoding=*, font={SourceSerifPro-LF/m/it/*}}
+ \UseMicrotypeSet[tracking]{italics}
+ \SetTracking[context=synthnegslant, no ligatures={f}, spacing={10*,,}]
+ {encoding=*, shape=it}{10}
+\else
+ \newcommand*{\textls}[2][]{#2}
+\fi
+\usepackage{needspace}
+\usepackage{ragged2e}
+\usepackage{setspace}
+\usepackage[slant=.18, negslant=-.16]{synthslant}
+\usepackage{titlesec}
+\usepackage{tcolorbox}
+\usepackage{titlesec}\renewcommand*{\bottomtitlespace}{.15\textheight}%nobottomtitles*
+\usepackage{wrapfig}
+\usepackage{xcolor}
+
+
+\usepackage[default, lining, proportional, regular, semibold]{sourceserifpro}
+\usepackage[lining, proportional, regular, semibold]{sourcesanspro}
+\usepackage[lining, regular]{sourcecodepro}
+\usepackage[xcharter]{newtxmath}
+\setstretch{1.04166}% \baselineskip: 12.5pt
+
+
+\makeatletter
+\def\@get@fontclan#1-#2\relax{#1}
+\newcommand*{\fontclan}{\expandafter\@get@fontclan\f@family\relax}
+\makeatother
+
+\newcommand*{\proportionalliningfigures}{\fontfamily{\fontclan-LF}\selectfont}
+\newcommand*{\proportionaloldstylefigures}{\fontfamily{\fontclan-OsF}\selectfont}
+\newcommand*{\tabularliningfigures}{\fontfamily{\fontclan-TLF}\selectfont}
+\newcommand*{\tabularoldstylefigures}{\fontfamily{\fontclan-TOsF}\selectfont}
+
+\newcommand*{\textdenominator}[1]{{\fontfamily{\fontclan-Dnom}\selectfont #1}}
+\newcommand*{\textinferior}[1]{{\fontfamily{\fontclan-Inf}\selectfont #1}}
+\newcommand*{\textnumerator}[1]{{\fontfamily{\fontclan-Numr}\selectfont #1}}
+\newcommand*{\textsuperior}[1]{{\fontfamily{\fontclan-Sup}\selectfont #1}}
+
+\newcommand*{\nativetextfraction}[2]
+ {\mbox{\textnumerator{#1}\textfractionsolidus\textdenominator{#2}}}
+
+\makeatletter
+\renewcommand*{\@makefnmark}{\hbox{\sf\textsuperior{\@thefnmark}}}
+\newenvironment*{tabfigures}
+ {\edef\rmdefault{\fontclan-T\sourceserifpro@figurestyle}\rm\ignorespaces}
+ {\ignorespacesafterend}
+
+\newcommand*{\elseries}{\def\mdseries@rm{el}\def\mdseries@sf{el}\def\mdseries@tt{el}}
+\newcommand*{\textel}[1]{{\elseries\textmd{#1}}}
+\newcommand*{\lseries}{\def\mdseries@rm{l}\def\mdseries@sf{l}\def\mdseries@tt{l}}
+\newcommand*{\textl}[1]{{\lseries\textmd{#1}}}
+%%--\newcommand*{\mdseries}{\def\mdseries@rm{m}\def\mdseries@sf{m}\def\mdseries@tt{m}}
+%%--\newcommand*{\textmd}[1]{{\mdseries\textmd{#1}}}
+\newcommand*{\sbseries}{\def\bfseries@rm{sb}\def\bfseries@sf{sb}\def\bfseries@tt{sb}}
+\newcommand*{\textsb}[1]{{\sbseries\textbf{#1}}}
+\newcommand*{\bseries}{\def\bfseries@rm{b}\def\bfseries@sf{b}\def\bfseries@tt{b}}
+\newcommand*{\textb}[1]{{\bseries\textbf{#1}}}
+\newcommand*{\ebseries}{\def\bfseries@rm{k}\def\bfseries@sf{eb}\def\bfseries@tt{k}}
+\newcommand*{\texteb}[1]{{\ebseries\textbf{#1}}}
+\makeatother
+
+
+\usepackage{cleveref}
+
+
+\expandafter\GetFileInfo\expandafter{\jobname.sty}
+\def\aspdfdate#1/#2/#3\relax{D:#1#2#3}
+\edef\pdffiledate{\expandafter\aspdfdate\filedate\relax}
+
+\hypersetup{
+ citecolor = blue,
+ colorlinks = true,
+ linkcolor = blue,
+ linktocpage = false,
+ pdfauthor={Dr. Christoph L. Spiel},
+ pdfcreationdate={\pdffiledate},
+ pdfkeywords={LaTeX, font, italic, oblique, slant, upright},
+ pdflang=en-US,
+ pdfsubject={Synthetic generation of slanted glyphs in LaTeX},
+ pdftitle={Package synthslant \fileversion},
+ raiselinks = false,
+ urlcolor = [rgb]{0, 0, .5}% = navy
+}
+
+
+\makeatletter
+\renewcommand*{\@dotsep}{10000} % suppress leaders
+\patchcmd{\@dottedtocline}{\normalfont}{\bfseries}{\relax}{\PatchingFailed}
+\makeatother
+
+
+\Crefname{equation}{Equation}{Equations}
+\crefname{equation}{Equ.}{Equs.}
+\creflabelformat{equation}{#2#1#3}
+
+\Crefname{figure}{Figure}{Figures}
+\crefname{figure}{Fig.}{Figs.}
+
+\Crefname{page}{Page}{Pages}
+\crefname{page}{p.}{p.}
+
+\Crefname{section}{Section}{Sections}
+\crefname{section}{Sec.}{Secs.}
+
+\Crefname{table}{Table}{Tables}
+\crefname{table}{Tab.}{Tabs.}
+
+
+\newcommand*{\floatcaptionwidth}{.79\textwidth}
+
+\captionsetup[figure]{font=small, justification=centerlast, labelfont=sc, width=\floatcaptionwidth}
+\captionsetup[table]{font=small, justification=centerlast, labelfont=sc, width=\floatcaptionwidth}
+
+
+\newsavebox{\listlabelbox}
+
+\sbox{\listlabelbox}{---}
+\SetEnumitemKey{noindent}{
+ label={---},
+ labelwidth=\wd\listlabelbox,
+ leftmargin=!
+}
+
+\SetEnumitemKey{nestedinspecialsection}{
+ leftmargin=10pt
+}
+
+\SetEnumitemKey{notopsep}{
+ after=\vskip.8em plus .2em minus .4em,
+ partopsep=0pt,
+ topsep=0pt
+}
+
+
+\newlength{\marginindicatorsep}
+\setlength{\marginindicatorsep}{10pt}
+
+\newcommand*{\marginalizesectionnumber}[1]
+ {\makebox[0pt][r]{#1\hspace{\marginindicatorsep}}}
+
+
+\fancypagestyle{pagenumberonly}{
+ \fancyhead[L]{}
+ \fancyhead[R]{\thepage}
+}
+\pagestyle{fancy}
+\fancyhf{}
+\fancyhead[L]{\rightmark}
+\fancyhead[R]{\textsf{\thepage}}
+\newcommand*{\resetfancyhead}
+ {\fancyhead[L]{\textsf{\textsc{\textls[20]{\nouppercase\rightmark}}}}}
+
+\renewcommand*{\headrulewidth}{0pt}
+\renewcommand*{\sectionmark}[1]
+ {\def\truesectionname{#1}%
+ \markright{\textsf{\marginalizesectionnumber{\thesection}%
+ \textsc{\textls[20]{#1}}}}}
+\renewcommand*{\subsectionmark}[1]
+ {\markright{\textsf{\marginalizesectionnumber{\thesubsection}%
+ \textsc{\textls[20]{\truesectionname:\enspace}}#1}}}
+
+
+\titleformat{\section}[hang]
+ {\sffamily\Large\bfseries}{\marginalizesectionnumber{\thesection}}{0pt}{}
+\titleformat{\subsection}[hang]
+ {\sffamily\large\bfseries}{\marginalizesectionnumber{\thesubsection}}{0pt}{}
+\titleformat{\subsubsection}[hang]
+ {\sffamily\normalsize\bfseries}{\marginalizesectionnumber{\thesubsubsection}}{0pt}{}
+\titleformat{\paragraph}[runin]
+ {\sffamily\normalsize\bfseries}{\theparagraph}{1em}{}
+
+
+\let\footnoterule=\relax% suppress footnote rule
+\interfootnotelinepenalty=10000
+
+\makeatletter
+\renewcommand*{\@makefntext}[1]
+ {\noindent
+ \llap{\let\@textsuperscript=\relax% use "normal" figures for the footnote numbers
+ \let\textsuperior=\relax
+ \@makefnmark
+ \hspace{\marginindicatorsep}}% separate the footnote number and the body
+ #1}
+\makeatother
+
+
+\pretocmd{\DescribeEnv}{\needspace{25pt}}{\relax}{\PrependingFailed}
+\pretocmd{\DescribeMacro}{\needspace{25pt}}{\relax}{\PrependingFailed}
+
+
+\setcounter{IndexColumns}{2}
+
+
+\setlength{\columnsep}{20pt}
+\setlength{\skip\footins}{25pt}
+\setlength{\overfullrule}{3pt}
+
+
+
+\newrobustcmd*{\acronym}[1]{\mbox{\scshape\MakeLowercase{#1}}}
+
+\newcommand*{\application}[1]{\mbox{\sffamily #1}}
+
+\renewcommand*{\arraystretch}{1.12}
+
+\newcommand*{\bibauthor}[1]{\mbox{\textsc{#1}}}
+\newcommand*{\bibtitle}[1]{\textit{#1}}
+\newcommand*{\biburl}[1]{\url{#1}}
+
+\newcommand*{\bottomstrut}{\rule[-.5em]{0pt}{0pt}}
+
+\newenvironment*{codeexample}
+ {\vspace{.5\smallskipamount}
+ \par
+ \centering
+ \begin{minipage}{\linewidth}
+ \ttfamily
+ \begin{tabbing}}
+ {\end{tabbing}
+ \end{minipage}
+ \par
+ \vspace{.5\smallskipamount}}
+
+\makeatletter
+\newcommand*{\citenum}[1]{\@nameuse{b@#1}}
+\makeatother
+
+\def\code#1{\texttt{#1}}
+
+\newrobustcmd*{\command}[1]{\mbox{\textbf{#1}}}
+
+\newcommand*{\degree}{{}^\circ}
+
+\newcommand*{\doublequotes}[1]{\guillemetright\kern-.03333em #1\guillemetleft}
+
+\newcommand*{\dumpmacro}[1]{\texttt{\detokenize\expandafter{#1}}}
+
+\newcommand*{\filesystem}[1]{\mbox{\textit{#1\/}}}
+
+\newcommand*{\filledrectangle}[2]{\rule{#1}{#2}}
+\newcommand*{\filledsquare}[1]{\filledrectangle{#1}{#1}}
+
+\newcommand*{\foreignphrase}[1]{\textsl{#1}}
+
+\makeatletter
+\renewcommand*{\fps@figure}{htbp}
+\renewcommand*{\fps@table}{htbp}
+\makeatother
+
+\newcommand*{\hollowrectangle}[2]
+ {\setlength{\fboxrule}{.5pt}%
+ \setlength{\fboxsep}{0pt}%
+ \framebox{\rule{#1}{0pt}\rule{0pt}{#2}}}
+\newcommand*{\hollowsquare}[1]{\hollowrectangle{#1}{#1}}
+
+\newcommand*{\logmacro}[1]
+ {\ifdef{#1}
+ {\message{^^JDump of macro \string#1 follows.^^J}
+ \message{\detokenize\expandafter{#1}}
+ \message{^^JEnd macro dump.^^J}}
+ {\message{^^JMacro \string#1 is not defined.^^J}}}
+
+\newenvironment*{maxipage}
+ {\fullwidthsetup{leftmargin=-\marginparsep - \marginparwidth,
+ width=\textwidth + \marginparsep + \marginparwidth}%
+ \begin{fullwidth}}
+ {\end{fullwidth}}
+
+\newenvironment*{multilinecodeexample}
+ {\begin{quote}\tt
+ \def\indent{\mbox{}\hspace{25pt}}%
+ \def\pushright{\mbox{}\hfill}%
+ \ignorespaces}
+ {\end{quote}}
+
+\newcommand*{\needtocspace}[1][3]
+ {\addtocontents{toc}{\protect\needspace{#1\baselineskip}}}
+
+\newcommand*{\numberset}[1]{\mathbb{#1}}
+
+\newcommand*{\packagename}[1]{\mbox{\textsf{#1}}}
+\newcommand*{\programname}[1]{\mbox{\textbf{#1}}}
+\newcommand*{\propername}[1]{\mbox{\textsc{#1}}}
+
+\newcommand*{\pstrickslogo}{\mbox{PSTricks}}
+
+\newcommand*{\quarterspace}{\hspace{.25em}}
+
+\newcommand*{\sample}[1]
+ {\setbox0=\hbox{#1}% H: 6.19849pt, /: 7.49817
+ \mbox{\raisebox{\dimexpr -.15em - \dp0}{\tiny$\llcorner$}%
+ \kern-.15em\copy0\kern-.15em
+ \raisebox{\ifdim\ht0>.7em\dimexpr\ht0 - .1em\else .45em\fi}{\tiny$\urcorner$}}}
+
+\newcommand*{\sinceversion}[1]{% modeled after \NewIn of "doc.dtx"
+ \leavevmode
+ \marginpar{\hfill\textcolor{\markercolor}{\sf\proportionaloldstylefigures\scshape #1}}%
+ \ignorespaces
+}
+
+\newcommand*{\singlequotes}[1]{\mbox{\guilsinglright #1\guilsinglleft}}
+
+\definecolor{customred1}{rgb}{.890, .282, .282}%-- https://paletton.com/
+\definecolor{customred2}{rgb}{.831, .110, .110}
+\definecolor{customred3}{rgb}{.686, .043, .043}
+\definecolor{customred4}{rgb}{.569, .000, .000}
+\definecolor{customred5}{rgb}{.420, .000, .000}
+\newcommand*{\specialsectionheading}[1]{\textcolor{\markercolor}{\textit{\textbf{#1}}}}
+\newcommand*{\markercolor}{customred4}
+\newcommand*{\specialsectionmarker}{\color{\markercolor}\filledsquare{5pt}}
+\newcommand*{\specialsectionbegin}
+ {\llap{\raisebox{1pt}{\specialsectionmarker}%
+ \hspace{\marginindicatorsep}}}
+\newcommand*{\specialsectionend}
+ {\ifmmode
+ \specialsectionmarker
+ \else
+ \leavevmode
+ \unskip
+ \penalty9999\mbox{}\nobreak
+ \hfill
+ \quad
+ \mbox{\specialsectionmarker}%
+ \fi}
+\newtoggle{printspecialsectionmarker}
+\NewDocumentEnvironment{specialsection}{m m}
+ {\Needspace{4\baselineskip}%
+ \toggletrue{printspecialsectionmarker}%
+ \begin{list}
+ {\specialsectionheading{#1\ifblank{#2}{}{\textup{\space---\space#2}}}}
+ {\itemindent=0pt
+ \labelwidth=10pt
+ \leftmargin=15pt
+ \listparindent=15pt
+ \parsep=0pt
+ \topsep=\medskipamount}
+ \newcommand*{\specialsectionendhere}
+ {\specialsectionend
+ \global\togglefalse{printspecialsectionmarker}}
+ \item
+ \nointerlineskip
+ \leavevmode\par
+ \noindent}
+ {\iftoggle{printspecialsectionmarker}{\specialsectionend}{\relax}%
+ \end{list}}
+
+ \newenvironment*{caution}[1][]{\begin{specialsection}{Caution}{#1}}{\end{specialsection}}
+ \newenvironment*{example}[1][]{\begin{specialsection}{Example}{#1}}{\end{specialsection}}
+ \newenvironment*{futuredirection}[1][]
+ {\begin{specialsection}{Anticipated Changes \& Possible Extensions}{#1}\small}
+ {\end{specialsection}}
+ \newenvironment*{important}[1][]{\begin{specialsection}{Important}{#1}}{\end{specialsection}}
+ \newenvironment*{note}[1][]{\begin{specialsection}{Note}{#1}}{\end{specialsection}}
+ \newenvironment*{notes}[1][]{\begin{specialsection}{Notes}{#1}}{\end{specialsection}}
+ \newenvironment*{tip}[1][]{\begin{specialsection}{Tip}{#1}}{\end{specialsection}}
+ \newenvironment*{tips}[1][]{\begin{specialsection}{Tips}{#1}}{\end{specialsection}}
+ \newenvironment*{usecase}[1][]{\begin{specialsection}{Use Case}{#1}\small}{\end{specialsection}}
+ \newenvironment*{usecases}[1][]{\begin{specialsection}{Use Cases}{#1}\small}{\end{specialsection}}
+
+\newcommand*{\specialcodesectionheading}[1]{\textcolor{\markercolor}{\textbf{\textit{#1}}}}
+\newenvironment*{specialcodesection}[1]
+ {\Needspace{4\baselineskip}%
+ \begin{tcolorbox}[colback=white, colframe=\markercolor,
+ bottomrule=0pt, leftrule=5pt, rightrule=0pt, toprule=0pt]
+ \sffamily
+ \begin{list}
+ {\specialcodesectionheading{#1}}
+ {\itemindent=0pt
+ \labelwidth=20pt
+ \leftmargin=25pt
+ \listparindent=15pt
+ \parsep=0pt
+ \topsep=\medskipamount}
+ \item
+ \nointerlineskip
+ \leavevmode\par
+ \noindent}
+ {\end{list}
+ \end{tcolorbox}}
+ \newenvironment*{anticipatedchange}
+ {\begin{specialcodesection}{Anticipated Change}}
+ {\end{specialcodesection}}
+ \newenvironment*{implementationnote}
+ {\begin{specialcodesection}{Implementation Note}}
+ {\end{specialcodesection}}
+ \newenvironment*{knownbug}
+ {\begin{specialcodesection}{Known Bug}}
+ {\end{specialcodesection}}
+
+\newenvironment*{suspendshortverb}
+ {\DeleteShortVerb{\|}}
+ {\MakeShortVerb{\|}}
+
+\definecolor{cold-silver}{cmyk}{.08, 0, 0, .18}
+\newenvironment*{synopsis}
+ {\begin{tcolorbox}[boxrule=.25pt, colback=cold-silver]%
+ \phantomsection}
+ {\end{tcolorbox}}
+
+\newcommand*{\synthslantlogo}
+ {{\sf
+ S\hspace{-.06em}\synthslantbox{.15}{y}\hspace{.04em}nth%
+ \hspace{-.02em}%
+ Slant}}
+
+\newenvironment*{tablenotes}
+ {\medskip
+ \centering
+ \begin{minipage}{\floatcaptionwidth}}
+ {\end{minipage}}
+\newcommand*{\tablenotemark}[1]{\smash{\textsuperscript{#1}}}
+
+\newcommand*{\termparbox}[1]{\parbox[t]{\linewidth}{#1\bottomstrut}}
+
+\newcommand*{\thousandsseparator}{\mbox{,}}
+
+\newcommand*{\tikzlogo}{\textrm{Ti\textit{k\/}Z}}
+
+\newcommand*{\topstrut}{\rule{0pt}{1.3em}}
+
+\newcommand*{\transpose}[1]{{#1}^{\text{T}}}
+
+\newlength{\ttellipsisgap}
+\setlength{\ttellipsisgap}{.4em}
+\newcommand*{\ttdots}
+ {\setbox0=\hbox{.}%
+ \wd0=0pt%
+ \copy0\kern\ttellipsisgap
+ \copy0\kern\ttellipsisgap
+ \box0\kern\ttellipsisgap}
+
+\newcommand*{\visualpar}{\textcolor{\markercolor}{\P}\linebreak[1]\enspace}
+
+\newenvironment*{widecodeexample}
+ {\begin{maxipage}
+ \flushright
+ \begin{minipage}{\textwidth}
+ \ttfamily
+ \begin{tabbing}}
+ {\end{tabbing}
+ \end{minipage}
+ \end{maxipage}}
+
+
+\hyphenation{% https://hyphenateit.com/en-us
+}
+
+
+\newcommand*{\librecaslonmapline}
+ {LibreCsln-Italic-osf-t1--base LibreCsln-Italic
+ " -0.12 SlantFont AutoEnc_etzx2kxblronahmbt4swbkr7jb ReEncodeFont "
+ <[lcsln_etzx2k.enc <LibreCsln-Italic.pfb}
+\ifdefined\pdfoutput
+ \ifnum\pdfoutput>0
+ \pdfmapline{=\librecaslonmapline}
+ \else
+ \special{pdf:mapline \librecaslonmapline}
+ \fi
+\else
+ \special{pdf:mapline \librecaslonmapline}
+\fi
+
+
+\begin{document}
+ \DocInput{synthslant.dtx}
+\end{document}
+%</driver>
+%<*index-style>
+actual '='
+heading_prefix "\\pagebreak[3]\\smallskip\n\n{\\sffamily\\bfseries\\large "
+heading_suffix "}\\nopagebreak\n"
+headings_flag 1
+level '>'
+quote '!'
+%</index-style>
+% \fi
+%
+%
+% \DoNotIndex{\-}
+% \DoNotIndex{\begingroup,\bool,\box}
+% \DoNotIndex{\DeclareOptionX,\def,\dim,\dimen,\discretionary,\draw}
+% \DoNotIndex{\edef,\else}
+% \DoNotIndex{\endgroup,\endmicrotypecontext,\endnegslantenvironment,\endslantenvironment}
+% \DoNotIndex{\expandafter,\ExplSyntaxOff,\ExplSyntaxOn}
+% \DoNotIndex{\fi,\font,\fontdimen,\fontspec,\fp}
+% \DoNotIndex{\hbox,\hskip}
+% \DoNotIndex{\ifcase,\ifcsdef,\ifdefined,\ifluatex,\ifmmode,\ifnum,\ifpdftex,\ifx,\itshape}
+% \DoNotIndex{\kern}
+% \DoNotIndex{\l,\let,\llap}
+% \DoNotIndex{\mbox,\microtypecontext}
+% \DoNotIndex{\NeedsTeXFormat}
+% \DoNotIndex{\newbox,\newcommand,\NewDocumentCommand,\NewDocumentEnvironment,\newenvironment,\newrobustcmd}
+% \DoNotIndex{\node,\nolinebreak}
+% \DoNotIndex{\or}
+% \DoNotIndex{\PackageInfo,\PackageWarning,\ProcessOptionsX,\providecommand,\ProvidesPackage}
+% \DoNotIndex{\pdfoutput,\pdfrestore,\pdfsave,\pdfsetmatrix,\pstilt}
+% \DoNotIndex{\relax,\RequirePackage}
+% \DoNotIndex{\sbox,\skip,\space}
+% \DoNotIndex{\tikz}
+% \DoNotIndex{\upshape,\usebox}
+% \DoNotIndex{\wd}
+%
+%
+% \changes{v0.1}{2024-2-12}{Initial version}
+%
+%
+% \pagenumbering{roman}
+%
+% \title{\synthslantlogo{} -- Synthetically Slanted Glyphs}
+% \author{Ch.~L.~Spiel\footnote{\quarterspace\texttt{cspiel@users.sourceforge.org}}}
+% \date{\fileversion\qquad \filedate}
+% \maketitle
+% \thispagestyle{empty}
+%
+%
+% \begingroup
+% \let\small=\normalsize
+% \begin{abstract}
+% \noindent
+% Package~\packagename{synthslant} provides macros to slant arbitrary glyphs in both
+% directions. It can be used to fake a real slanted font for \emph{short} pieces of text
+% and it can generate startling effects, like, for example, upright italics.
+% \end{abstract}
+% \endgroup
+%
+%
+% \iffalse
+%<*title>
+prologues := 3;
+
+string roman_font;
+roman_font := "pplr8r"; % URW Palladio L - Roman
+
+string italics_font;
+italics_font := "pplri8r"; % URW Palladio L - Italic
+
+string sample_text;
+sample_text := "fga";
+
+u := 70;
+
+font_scale := 7;
+
+color light_gray;
+light_gray := .8 white;
+
+color original_color, slanted_color;
+original_color := light_gray;
+slanted_color := black;
+
+pair loc[];
+loc[1] := (0, 0); % roman
+loc[2] := (1.9u, 0); % italics
+loc[3] := (2.03u, 1.1u); % slanted roman
+loc[4] := (-.1u, -1.1u); % upright italics
+
+picture roman;
+roman := thelabel.rt(sample_text infont roman_font scaled font_scale, loc[1]);
+
+picture italics;
+italics := thelabel.rt(sample_text infont italics_font scaled font_scale, loc[2]);
+
+picture slanted_roman;
+slanted_roman := thelabel.rt(sample_text infont roman_font scaled font_scale slanted .2, loc[3]);
+
+picture upright_italics;
+upright_italics := thelabel.rt(sample_text infont italics_font scaled font_scale slanted -.2, loc[4]);
+
+
+beginfig(1);
+ draw roman withcolor original_color;
+ draw italics withcolor original_color;
+ draw slanted_roman withcolor slanted_color;
+ draw upright_italics withcolor slanted_color;
+endfig;
+end
+%</title>
+% \fi
+%
+%
+% \begin{center}
+% \includegraphics{title.mps}
+% \end{center}
+%
+% \vfill
+%
+% \begingroup
+% \footnotesize
+% \noindent
+% This package is copyright \textcopyright~2024 Ch.~L.~Spiel. It may be distributed and/or
+% modified under the conditions of the \LaTeX{} Project Public License \acronym{(LPPL)},
+% either version~1.3c of this license or --~at your option~-- any later version. This work
+% has the \acronym{LPPL} maintenance status \doublequotes{author-maintained}.\par
+% \endgroup
+%
+%
+% \clearpage
+% \thispagestyle{pagenumberonly}
+% \tableofcontents
+%
+% \vspace{\fill}
+%
+% \begingroup
+% \footnotesize
+% \singlespacing
+% \noindent
+% The font samples~\singlequotes{fga} on the title page
+% were generated with the help of \MP{} using \doublequotes{\acronym{URW} Palladio~L}
+% in styles~\singlequotes{roman} and~\singlequotes{italic}.
+% The affine transformations were \code{slanted .2} for the slanted roman and
+% \code{slanted -.2} for the upright italics.\par
+% \endgroup
+%
+%
+% \clearpage
+% \thispagestyle{pagenumberonly}
+% \listoftables
+% \bigskip
+% \listoffigures
+%
+%
+% \clearpage
+% \pagenumbering{arabic}
+% \section{Introduction}\label{sec:introduction}
+%
+% The \packagename{synthslant} package provides a translator (e.\,g.~\LaTeX, \pdfLaTeX, or
+% \LuaLaTeX) independent interface to shearing glyphs. It implements a generic operation where
+% a short piece of text gets slanted forward or backward. Moreover, specialized macros for the
+% two most important use cases are provided, namely slanting an upright font forward and making
+% an italics font upright. Unbeknown to some users, \pdfTeX{} performs a similar operation
+% under the hood: of the 40\thousandsseparator210~map lines in my \filesystem{pdftex.map}
+% currently 1\thousandsseparator236 instruct \pdfTeX{} to artificially slant a font. This
+% means some three percent of the shapes are generated this way.
+%
+% Similar transformations can be achieved by other means. I elaborate on one of the
+% alternatives in \cref{sec:alternative} on \cpageref{sec:alternative}.
+% Package~\packagename{synthslant} however focuses on ease of use and strict locality of the
+% glyph manipulation.
+%
+%
+% \subsection{Appeal for Artificially Slanted Type}\label{sec:appleal-for-artificially-slanted}
+%
+% Artificially slanted type have a bad reputation. Whenever there is an order to round up the
+% usual font suspects synthetically slanted, bolded\footnote{Package~\packagename{amsbsy}
+% defines a \doublequotes{Poor Man's Bold} macro~\cs{pmb} that works by
+% \singlequotes{overprinting}. The authors of \packagename{amsbsy} recommend to prefer
+% package~\packagename{bm} for bold mathematical symbols, though.}, and condensed type along
+% with artificial small-caps swiftly are stuffed into the black Maria.\footnote{See for example
+% Ref.~\citenum{strizver:2014}, p.~97, but compare p.~142 and also
+% Ref.~\citenum{middendorp:2014}, p.~68n, for a more nuanced assessment.} I can retrace this
+% condescension for synthetic bold and condensed variants. They spoil the glyphs' outline
+% because they do not (and cannot) conserve the necessary proportions. For small-caps the
+% problems are somewhat minor and I wonder how far one could get with an
+% \propername{OpenType}~font that supports a \code{size}~axis\index{font>axis>size=\code{size}}
+% as well as an \code{opsz}~axis\index{font>axis>opsz=\code{opsz}} in the necessary ranges to
+% construct convincing small-caps out of the multiple-master font.
+%
+% In my view artificial slanting keeps much of the font's character intact. In fact one
+% accusation of synthetically slanted type is that is creates less contrast than a proper
+% italic~\cite[p.~141]{strizver:2014} to which I object that less contrast can in fact be
+% enough contrast in a particular setting. Moreover, small contrast with respect to the main
+% type is a problem of second order. It does not devalue the shape \foreignphrase{per se} as
+% is true for artificial bold and condensed fonts.
+%
+% What seems to have gotten lost in the discussion is the shapes of true italics that were
+% designed alongside with the roman type. If we have an unbiased look at it --~for example at
+% the title~page of this manual~-- the italic versions of the upright characters are so
+% markedly different that I would like to ask whether they match the upright shape in a strict
+% sense. For the double-storey~\sample{a} becomes single-storey, the start of the loop
+% of~\sample{g} moves from the far left into the middle. Alongside, the aspect ratio of both
+% of the counters change. These defy the common guidelines~\cite[Ch.~6]{stamm:2020} of font
+% pairing. We can make sense of the seeming contradiction by recognizing that the italics
+% shape is not simply slanted, but creates tension in respect to the upright type by a variety
+% of additional design features. A famous quote of \propername{Zuzana Li\v{c}ko} applies once
+% again:
+%
+% \begin{quote}
+% The most popular typefaces are the easiest to read; their popularity has made them
+% disappear from conscious cognition. It becomes impossible to tell if they are easy to read
+% because they are commonly used, or if they are commonly used because they are easy to read.
+% \end{quote}
+%
+%
+% \subsection{Some History}\label{sec:history}
+%
+% Italics accompanying a roman font date back to one of the earliest print shops, namely that
+% of \href{https://it.wikipedia.org/wiki/Aldo_Manuzio}{\propername{Aldus Manutius}} around
+% 1500\:A.\,C\@. Artificially slanted, also known as \singlequotes{oblique}, versions of
+% upright fonts appear in the twentieth century, when type designers and foundries start to
+% save time and money by automatically constructing a slanted version of a given roman
+% type~\cite[p.~68n]{middendorp:2014}. \packagename{Synthslant} closely follows on their
+% steps.
+%
+% Some fonts in current \LaTeX{} distributions offer slanted series right out of the box.
+% \foreignphrase{Eureka!} In particular the oldest (and once upon a time the only) font family
+% shipping with \TeX, \href{https://tug.org/FontCatalogue/cmrfonts.html}{Computer Modern
+% Roman}\index{font>Computer Modern Roman} --~nowadays member of the \acronym{CM}-Super
+% family~-- is available in a deluge of almost thirty shapes. It covers not just slanted roman
+% or slanted smallcaps but also slanted typewriter and somewhat surprisingly upright italics.
+% Furthermore, the \LaTeXe{} font selection scheme provisions \singlequotes{\code{sl}} for
+% slanted shapes and \singlequotes{\code{ui}} for upright italics~\cite{fntguide}. The former
+% is accompanied by the macros~\cs{slshape} and~\cs{textsl}.
+%
+% \begin{wraptable}{r}{.382\textwidth}
+% \renewcommand*{\floatcaptionwidth}{\textwidth}
+% \small
+% \centering
+% \caption[Variable fonts with slant-axis]
+% {A short list of some variable fonts with a slant axis (\code{slnt}).}
+% \label{tab:open-type-slant-feature}
+%
+% \begin{tabular}{@{}l@{}}
+% \toprule
+% Font Name \\
+% \midrule
+% Cairo\index{font>Cairo} \\
+% Commissioner\index{font>Commissioner} \\
+% Geologica\index{font>Geologica} \\
+% Gluten\index{font>Gluten} \\
+% Inter\index{font>Inter} \\
+% Recursive\index{font>Recursive} \\
+% Roboto Flex\index{font>Roboto Flex} \\
+% \bottomrule
+% \end{tabular}
+% \end{wraptable}
+%
+% Refer to \cref{tab:open-type-slant-feature} on the right for a brief list of variable
+% fonts\footnote{See also the \LaTeX~Font Catalogue for
+% \href{https://tug.org/FontCatalogue/opentypefonts.html}%
+% {Fonts with \propername{OpenType} or \propername{TrueType}~Support}
+% and search \href{https://fonts.google.com/}{Google Fonts} for families of
+% \href{https://fonts.google.com/variablefonts?vfaxis=slnt}{variable fonts with a
+% \code{slnt}-axis} or fonts with an \href{https://v-fonts.com/tags/C5}{unusual variation} at
+% \href{https://v-fonts.com/}{Variable Fonts}.} that offer a slant-axis\footnote{The
+% registered axis is called \code{slnt} and it is not to be confused with the
+% \code{ital}~axis.}\index{font>axis>slant=\code{slant}}\index{font>axis>ital=\code{ital}} that
+% can be controlled with \packagename{fontspec}'s\index{package>\packagename{fontspec}}
+% \code{Slant}\footnote{Since \packagename{fontspec} version~2.9a as of 2024/2/13.}~key and
+% \cref{tab:slanted-series-fonts} for a rather incomplete list of fonts that are shipped with
+% slanted shapes. For these fonts \packagename{synthslant} is largely superfluous unless
+% e.\,g.~they also come with an italics shape that is to be typeset upright.
+%
+% \begin{table}
+% \small
+% \centering
+% \caption[Fonts with slanted series]
+% {Selected fonts that come with their own slanted series.~\visualpar{} The table on
+% the left-hand side shows serif fonts, the one on the right-hand side sans-serif
+% fonts.}
+% \label{tab:slanted-series-fonts}
+%
+% \newcommand*{\itshapemark}{\tablenotemark{\dag}}%
+%
+% \begin{tabular}[t]{@{}p{12em}@{}}
+% \toprule
+% Font Name \\
+% \midrule
+% Arvo\index{font>Arvo} \\
+% Computer Modern Roman\index{font>Computer Modern Roman} \\
+% Domitian\index{font>Domitian} \\
+% Droid Serif\index{font>Droid Serif} \\
+% Erewhon\index{font>Erewhon} \\
+% Extended Charter\index{font>Extended Charter} \\
+% \acronym{GFS} Artemisia\index{font>GFS Artemisia=\acronym{GFS} Artemisia} \\
+% \acronym{GFS} Bodoni\index{font>GFS Bodoni=\acronym{GFS} Bodoni} \\
+% \acronym{GFS} Didot\index{font>GFSDidot=\acronym{GFS} Didot} \\
+% \\
+% \bottomrule
+% \end{tabular}
+% \qquad
+% \begin{tabular}[t]{@{}p{12em}@{}}
+% \toprule
+% Font Name \\
+% \midrule
+% Cabin\index{font>Cabin} \\
+% Clear Sans\index{font>Clear Sans} \\
+% Cuprum\index{font>Cuprum} \\
+% Fira Sans\index{font>Fira Sans} \\
+% Gandhi Sans\index{font>Gandhi Sans} \\
+% \acronym{Inria} Sans\index{font>Inria Sans=\acronym{Inria} Sans} \\
+% Lato\index{font>Lato}\itshapemark \\
+% Montserrat\index{font>Montserrat} \\
+% \acronym{PT} Sans\index{font>PT Sans=\acronym{PT} Sans} \\
+% Source Sans Pro\index{font>Source Sans Pro} \\
+% \bottomrule
+% \end{tabular}
+%
+% \begin{tablenotes}
+% \itshapemark\enspace The shape is activated with \cs{itshape}.
+% \end{tablenotes}
+% \end{table}
+%
+% It seems that the original idea of automatically shearing text in \LaTeX{} to simulate a
+% slanted shape goes back to \propername{David Carlisle} who suggested to use the
+% \pdfTeX-primitive \cs{pdfliteral} for shearing~\cite{tex-stackexchange-2013-12-7}. Shortly
+% thereafter \propername{Bruno Le Floch} pointed to another \pdfTeX-primitive, namely
+% \cs{pdfsetmatrix}, available with (in 2013) more recent
+% \pdfTeX~versions~\cite{pdftex}.\footnote{The user-level manipulation of the transformation
+% matrix has been part of the \acronym{PDF}-standard since its initial publication in
+% 1993~\cite[Secs.~3.8 and~3.9]{adobe-pdf-1.0} in the form of operator~\code{cm}
+% (\singlequotes{concat}~-- concatenate matrix to current transformation matrix).~\visualpar{}
+% The primitive~\cs{pdfliteral} was implemented already in the first release of \pdfTeX{}
+% in~1998~\cite{baskerville-pdftex-8-1:1998} and the primitive~\cs{pdfsetmatrix} joined 2007 in
+% \pdfTeX~version~1.40.0~\cite{schroeder:2007}.} With the help of the latter affine
+% transformations of arbitrary content can be coded directly by setting the transformation
+% matrix. A slight variant of his code is used in this package for the \acronym{PDF}- and
+% \packagename{l3draw}\index{package>\packagename{l3draw}}-slant~engines. The implementations
+% for \pstrickslogo, \tikzlogo{}, and \packagename{fontspec}\packagename{fontspec} are trivial
+% as they build upon shear~functions supplied by the respective packages.
+%
+%
+% \subsection{Shear Transformation, Slant, and Angle}\label{sec:shear-transformation}
+%
+% \index{slant>operation}
+% \index{shear>transformation}
+% Mathematically the slant operation is a shear transformation, which can be expressed with the
+% equation
+% \begin{equation}\label{equ:shear-transformation}
+% \begin{pmatrix}
+% x' \\
+% y'
+% \end{pmatrix}
+% =
+% \begin{pmatrix}
+% 1 & \sin\alpha \\
+% 0 & 1
+% \end{pmatrix}
+% \mathbin{}
+% \begin{pmatrix}
+% x \\
+% y
+% \end{pmatrix},
+% \end{equation}
+%
+% \noindent
+% where the vector~\(\transpose{(x, y)}\) is mapped to \(\transpose{(x'\!, y')}\) and both are
+% elements of the two-dimensional drawing plane~\(\numberset{E}^2\)\!. Compare with
+% \Cref{fig:shear-transform}.
+%
+%
+% \iffalse
+%<*shear-transform>
+verbatimtex
+%&latex
+\documentclass{amsart}
+\usepackage[default, lining, proportional, regular, semibold]{sourceserifpro}
+\usepackage[lining, proportional, semibold]{sourcesanspro}
+\usepackage[semibold]{sourcecodepro}
+\usepackage[xcharter]{newtxmath}
+\newcommand*{\numberset}[1]{\mathbb{#1}}
+\newcommand*{\transpose}[1]{{#1}^{\text{T}}}
+\begin{document}
+etex
+
+
+prologues := 3;
+
+
+phi := .618;
+
+u := 80;
+
+
+numeric line_thickness[];
+line_thickness[1] := .25 * 72/25.4;
+line_thickness[2] := .35 * 72/25.4;
+line_thickness[3] := .5 * 72/25.4;
+line_thickness[4] := .7 * 72/25.4;
+
+narrow_width := line_thickness[1];
+medium_width := line_thickness[2];
+wide_width := line_thickness[3];
+
+
+%% / x' \ / 1 slant \ / x \
+%% | | = | | | |
+%% \ y' / \ 0 1 / \ y /
+def slant_point(expr a_point, a_slant) =
+ (xpart a_point + ypart a_point * a_slant, ypart a_point)
+enddef;
+
+
+pair original_rectangle[];
+original_rectangle[1] := (0, 0);
+original_rectangle[2] := (u, 0);
+original_rectangle[3] := (u, phi * u);
+original_rectangle[4] := (0, phi * u);
+
+slant := .2;
+
+pair slanted_rectangle[];
+slanted_rectangle[1] := slant_point(original_rectangle[1], slant);
+slanted_rectangle[2] := slant_point(original_rectangle[2], slant);
+slanted_rectangle[3] := slant_point(original_rectangle[3], slant);
+slanted_rectangle[4] := slant_point(original_rectangle[4], slant);
+
+pair offset[];
+offset[0] := (0, 0);
+offset[1] := (1.75u, 0);
+
+
+beginfig(1);
+ drawarrow (-.2u, 0) + offset[0] -- (1.25u, 0) + offset[0]
+ withpen pencircle scaled narrow_width;
+ drawarrow (0, -.2u) + offset[0] -- (0, u) + offset[0]
+ withpen pencircle scaled narrow_width;
+
+ label.llft(btex \(\numberset{E}^2\) etex, offset[0]);
+ label.llft(btex \(x\) etex, (1.25u, 0) + offset[0] + (0, -2));
+ label.lft(btex \(y\) etex, (0, u) + offset[0]);
+
+ draw original_rectangle[1] + offset[0] --
+ original_rectangle[2] + offset[0] --
+ original_rectangle[3] + offset[0] --
+ original_rectangle[4] + offset[0] --
+ cycle
+ withpen pencircle scaled wide_width;
+ drawdot original_rectangle[4] + offset[0] withpen pencircle scaled 4pt;
+ label.urt(btex \(\transpose{(x, y)}\) etex, original_rectangle[4] + offset[0] + (1, 1));
+
+
+ drawarrow (-.2u, 0) + offset[1] -- (1.25u, 0) + offset[1]
+ withpen pencircle scaled narrow_width;
+ drawarrow (0, -.2u) + offset[1] -- (0, u) + offset[1]
+ withpen pencircle scaled narrow_width;
+
+ label.llft(btex \(\numberset{E}^2\) etex, offset[1]);
+ label.llft(btex \(x\) etex, (1.25u, 0) + offset[1] + (0, -2));
+ label.lft(btex \(y\) etex, (0, u) + offset[1]);
+
+ draw slanted_rectangle[1] + offset[1] --
+ slanted_rectangle[2] + offset[1] --
+ slanted_rectangle[3] + offset[1] --
+ slanted_rectangle[4] + offset[1] --
+ cycle
+ withpen pencircle scaled wide_width;
+ drawdot slanted_rectangle[4] + offset[1] withpen pencircle scaled 4pt;
+ label.urt(btex \(\transpose{(x'\!, y')}\) etex, slanted_rectangle[4] + offset[1] + (3, 1));
+
+
+ pair p;
+ p := slanted_rectangle[1] + offset[1];
+ draw p -- (1.5slanted_rectangle[4] + offset[1])
+ withpen pencircle scaled narrow_width;
+
+ path angle_indicator;
+ angle_indicator := fullcircle scaled 1.6u shifted offset[1];
+ draw angle_indicator
+ cutbefore (p -- (1.5slanted_rectangle[4] + offset[1]))
+ cutafter (offset[1] -- (0, u) + offset[1]);
+ label.rt(btex \(\alpha\) etex, 1.4original_rectangle[4] + offset[1] + (1, 0));
+endfig;
+end
+%</shear-transform>
+% \fi
+%
+%
+% \begin{figure}
+% \centering
+% \includegraphics{shear-transform.mps}
+%
+% \caption[Shear transform]
+% {Shear transform of a rectangle by the angle~\(\alpha\). The left-hand side shows
+% the original figure the right-hand side the one sheared by~\(\alpha\). The
+% \(x\)-axis can be identified with the baseline of the
+% text.}\label{fig:shear-transform}
+% \end{figure}
+%
+%
+% For \(\alpha = 0\) the shear matrix becomes the identity matrix. Throughout of
+% \packagename{synthslant} we work with the \meta{slant} which is \(\sin \alpha\) in
+% \cref{equ:shear-transformation} and avoid converting back and forth to the
+% \index{shear>angle}shear angle~\(\alpha\).\footnote{At least one slant engine currently
+% requires such a conversion, namely~\pstrickslogo. The math is hidden from the user, though.}
+% Some values for orientation: \mbox{\(\sin 5.74\degree \approx .1\)}, \mbox{\(\sin 11.5\degree
+% \approx .2\)}, and \mbox{\(\sin 17.5\degree \approx .3\)}.\footnote{For small
+% angles~\(\lvert\alpha\rvert\) measured in radians the sine is approximately linear: \(\sin
+% \alpha \approx \alpha\).} For real-life serif fonts \meta{slant} is in the range of~\(.1\)
+% to~\(.45\) and a value of~\(.2\) seems to be quite common. My \filesystem{pdftex.map} lists
+% negative \meta{slant} values in the range~\(-.4\) to~\(-.05\) and positive \meta{slant}
+% values in the range~\(.14\) up to~\(.45\). See \Cref{tab:slant-values} on
+% \cpageref{tab:slant-values} for some actual values of serif fonts in \LaTeX.
+%
+%
+% \subsection{Usage Ideas}\label{sec:usage-ideas}
+%
+% Automatic slanting both forward and reverse can be applied in a variety of typographic
+% occasions. Here are some ideas.
+%
+% \begin{enumerate}
+% \item\label{it:no-italics}
+% Generate a slanted serif in the unfortunate situation when a serif font comes without
+% italics such as \singlequotes{\acronym{URW}~Antiqua}\index{font>URW Antiqua=\acronym{URW}
+% Antiqua}.
+%
+% Here, the user is relatively free to choose a \meta{slant}, for there are no italics whose
+% angle must be matched. \packagename{Synthslant}'s default of~.2 should be a good starting
+% point.
+%
+% \item\label{it:upright-italics}
+% Augment a serif font that features an italics shape with upright italics.
+%
+% In nearly all cases it is desirable not to remove all forward-slant of the italics but
+% retain some 1\textdegree{} to~2\textdegree{} of residual angle.
+%
+% \item\label{it:correct-italics-angle}
+% An italics shape that has an excessive slant angle, as
+% e.\,g.~\singlequotes{Libre~Caslon}\index{font>Libre Caslon} may be corrected, i.\,e.,
+% partially un-slanted.
+%
+% In this case, and generally if a font as a whole needs to be corrected, an alternative
+% approach like the one sketched in \cref{sec:alternative} on \cpageref{sec:alternative} may
+% be warranted.
+%
+% \item\label{it:generate-sole-obliques}
+% Generate an oblique sans-serif if a sans-serif font comes without an oblique shape as,
+% e.\,g., \singlequotes{\acronym{URW}~Grotesk}.\index{font>URW Grotesk=\acronym{URW} Grotesk}
+%
+% \item\label{it:generate-extra-obliques}
+% Supply a slanted sans-serif shape for sans-serif fonts with designed, this is \emph{true}
+% obliques as e.\,g.~\singlequotes{Open Sans}.\index{font>Open Sans}
+%
+% \item\label{it:slant-typewriter}
+% Fixed-width --~also called \singlequotes{typewriter} or \singlequotes{teletype}~-- fonts
+% without obliques (Yes, I am looking at you, Inconsolata!)\index{font>Inconsolata} finally
+% get an oblique shape.
+%
+% \item\label{it:slanted-small-caps}
+% Small caps without accompanying italics can be slanted, too.
+%
+% \item\label{it:slant-in-math-mode}
+% As \packagename{synthslant} also works in \TeX's math-mode, it is possible to give
+% math-italics even more of a heeling.
+%
+% \item\label{it:correct-math-script}
+% If the slant of the math script font is at odds with the slant of the usual math italics,
+% it may be possible to apply \packagename{synthslant} on the script symbols for matching
+% angles.
+%
+% \item\label{it:slant-big-math-operators}
+% Big mathematical operators like the sigma can be slanted and others, like the integral
+% sign, can have their inclination adjusted.
+% \end{enumerate}
+%
+% It is possible to obtain slants that run against the reading direction, so called
+% \singlequotes{backslanted} glyphs, but I have rarely seen an
+% \href{https://fontsinuse.com/tags/2044/left-leaning-italics-backslanted}{example} where the
+% typography of a document could benefit from that.
+%
+%
+% \clearpage
+% \section{Package Options}\label{sec:package-options}
+%
+% \begin{synopsis}
+% |\usepackage[|\meta{option}\dots|]{synthslant}|
+% \end{synopsis}
+%
+% This is a list of \meta{option}s that \packagename{synthslant} understands. The package
+% options allow to predefine the forward and backward slant angles as well as the selection of
+% a particular slanting engine.
+%
+% \begingroup
+% \newcommand*{\indexpackageoption}[1]
+% {\index{package option>#1=\code{#1}}\index{#1=\code{#1}~(option)}\ignorespaces}
+% \begin{description}
+% [before={\let\oldmakelabel=\makelabel
+% \renewcommand{\makelabel}[1]
+% {\oldmakelabel{\termparbox{##1}}\phantomsection}},
+% font=\normalfont,
+% style=nextline]
+% \item[|auto|]\label{item:auto}
+% \indexpackageoption{auto}
+% Let the package choose a slant engine. This is the default.
+%
+% For \pdfLaTeX{} package \packagename{synthslant} selects the \acronym{PDF}-engine, for
+% \LuaLaTeX{} the \packagename{fontspec}-engine, and in all other cases the
+% \packagename{l3draw}-layer handles the shear transformation.
+%
+% \item[|disable|]\label{item:disable}
+% \indexpackageoption{disable}
+% Disable slanting completely.
+%
+% \item[|fontspec|]\label{item:fontspec}
+% \indexpackageoption{fontspec}
+% Use \packagename{fontspec}\index{package>\packagename{fontspec}} as slanting
+% back-end.\footnote{Requires \filesystem{fontspec.sty.}}
+%
+% \item[|l3draw|]\label{item:l3draw}
+% \indexpackageoption{l3draw}
+% Select the \singlequotes{draw} layer\index{package>\packagename{l3draw}} of \LaTeXIII{} as
+% base for the slanting engine.\footnote{This option requires \filesystem{l3draw.sty.}}
+%
+% \begin{caution}
+% This engine is experimental and the \singlequotes{draw} layer of \LaTeXIII{} itself is
+% still experimental, too. See \cref{sec:limitations} on \cpageref{sec:limitations} for
+% details.
+% \end{caution}
+%
+% \item[|negslant=|\meta{slant-expr}]\label{item:negslant}
+% \indexpackageoption{negslant}
+% Set the default value for \hyperref[syn:synthnegslant]{\cs{synthnegslant}} \emph{only.}
+% The argument \meta{slant-expr} is a floating-point expression. Note that for this option
+% \meta{slant-expr} must evaluate to a non-positive value.
+%
+% \item[|PDF|, |pdf|]\label{item:pdf}
+% \indexpackageoption{pdf}
+% Select the \acronym{PDF}-slant engine. This requires the document is translated with
+% \pdfLaTeX{} or a compatible program.
+%
+% \item[|posslant=|\meta{slant-expr}]\label{item:posslant}
+% \indexpackageoption{posslant}
+% Set the default value for \hyperref[syn:synthslant]{\cs{synthslant}} \emph{only.} The
+% argument \meta{slant-expr} is a floating-point expression. Note that for this option
+% \meta{slant-expr} must evaluate to a non-negative value.
+%
+% \item[|PS|, |ps|]\label{item:postscript}
+% \index{ps}
+% Use \pstrickslogo\index{package>\packagename{pstricks}} to delegate slanting to the
+% PostScript\index{PostScript} interpreter. Obviously requires \pstrickslogo\footnote{The
+% package actually required is \filesystem{pst-3d.sty.}} and \acronym{DVI}-to-PostScript
+% translation.
+%
+% \begin{caution}
+% This engine is still experimental and produces low-quality output! See
+% \cref{sec:limitations} on \cpageref{sec:limitations} for details.
+% \end{caution}
+%
+% \item[|slant=|\meta{slant-expr}]\label{item:slant}
+% \indexpackageoption{slant}
+% Set the default values for both \hyperref[syn:synthslant]{\cs{synthslant}} and
+% \hyperref[syn:synthnegslant]{\cs{synthnegslant}}, this is, behave as if the two package
+% options \(\code{posslant} = \meta{slant-expr}\) and \(\code{negslant} =
+% -(\meta{slant-expr})\) have been given. The argument \meta{slant-expr} is a floating-point
+% expression.
+%
+% If omitted \packagename{synthslant} assumes \(.2\) and \(-.2\), respectively.
+%
+% \item[|TikZ|, |tikz|]\label{item:tikz}
+% \indexpackageoption{tikz}
+% Use \packagename{TikZ}\index{package>\packagename{TikZ}} for slanting.\footnote{Requires
+% \filesystem{tikz.sty.}}
+%
+% \begin{caution}
+% This engine is still experimental and produces low-quality output! See
+% \cref{sec:limitations} on \cpageref{sec:limitations} for details.
+% \end{caution}
+% \end{description}
+% \endgroup
+%
+% The package options \code{slant}, \code{posslant}, and \code{negslant} all accept
+% floating-point \emph{expressions} as their arguments not just plain floating-point literals.
+% See Ref.~\citenum{latex3-interfaces}, Ch.~29, \doublequotes{The \textsf{l3fp}~module~--
+% Floating points} for a description of the floating-point expression syntax and the available
+% functions.
+%
+%
+% \clearpage
+% \section{Macros and Environments}\label{sec:macros-and-environments}
+%
+% This section describes how to actually apply the functionality of \packagename{synthslant} to
+% some text. If the \meta{slant}~value matching a given font is known this is about it. To
+% figure out an unknown \meta{slant}~value check out \cref{sec:determine-slant}.
+%
+%
+% \subsection{Variable-Like Macros}\label{sec:variables}
+%
+% The amount of slanting forward (positive slant angles) and backward (negative slant angles)
+% is controlled by two macros. They are set during package initialization. However, they can
+% be changed at any time to accommodate for different fonts or special needs.
+%
+% \DescribeMacro{\synthslant}
+% Control the slant applied by \hyperref[syn:textsynthslant]{\cs{textsynthslant}}.
+% This value is non-negative.
+%
+% \begin{synopsis}\label{syn:synthslant}
+% \cs{synthslant}
+% \end{synopsis}
+%
+% To change the slant value to \(.24\) say
+%
+% \begin{codeexample}
+% \cs{renewcommand}*\{\cs{synthslant}\}\{.24\}
+% \end{codeexample}
+%
+% \Cref{tab:slant-values} summarizes some suggested slant values for selected fonts.
+%
+% \begin{table}
+% \small
+% \centering
+% \caption[Suggested slant values]
+% {Suggested slant values for selected \emph{serif} fonts. The \meta{slant} shown in
+% the tables is not necessarily the one closest to the font's italics. Also compare
+% with the left-hand table of \cref{tab:slanted-series-fonts}.}
+% \label{tab:slant-values}
+%
+% \fullwidthsetup{skipabove=0pt, skipbelow=0pt}
+% \begin{maxipage}
+% \begin{minipage}{\textwidth}
+% \flushright
+% \begin{tabfigures}
+% \begin{tabular}[t]{@{}p{9.5em}l@{}}
+% \toprule
+% Font Name & Slant \\
+% \midrule
+% \acronym{ADF} Accanthis\index{font>ADF Accanthis=\acronym{ADF} Accanthis} & .26 \\
+% \acronym{ADF} Baskervald\index{font>ADF Baskervald=\acronym{ADF} Baskervald} & .32 \\
+% \acronym{ADF} Berenis\index{font>ADF Berenis=\acronym{ADF} Berenis} & .2 \\
+% \acronym{ADF} Venturis\index{font>ADF Venturis=\acronym{ADF} Venturis} & .2 \\
+% Alegreya\index{font>Alegreya} & .2 \\
+% Arvo\index{font>Arvo} & .2 \\
+% BaskervilleF\index{font>BaskervilleF} & .2 \\
+% Bera Serif\index{font>Bera Serif} & .2 \\
+% Bitter\index{font>Bitter} & .16 \\
+% Caladea\index{font>Caladea} & .14 \\
+% Clara\index{font>Clara} & .24 \\
+% Cochineal\index{font>Cochineal} & .2 \\
+% Coelacanth\index{font>Coelacanth} & .2 \\
+% Crimson Pro\index{font>Crimson Pro} & .2 \\
+% Crimson Text\index{font>Crimson Text} & .2 \\
+% \bottomrule
+% \end{tabular}%
+% \qquad
+% \begin{tabular}[t]{@{}p{9.5em}l@{}}
+% \toprule
+% Font Name & Slant \\
+% \midrule
+% Day Roman\index{font>Day Roman} & .2 \\
+% \acronym{EB} Garamond\index{font>EB Garamond=\acronym{EB} Garamond} & .3 \\
+% etbb\index{font>etbb} & .2 \\
+% fbb\index{font>fbb} & .2 \\
+% Garamond Expert\index{font>Garamond Expert} & .2 \\
+% Gandhi Serif\index{font>Gandhi Serif} & .2 \\
+% Gentium\index{font>Gentium} & .2 \\
+% Ibarra Real Nova\index{font>Ibarra Real Nova} & .2 \\
+% \acronym{IBM} Plex Serif\index{font>IBM Plex Serif=\acronym{IBM} Plex Serif} & .24 \\
+% \acronym{Inria} Serif\index{font>Inria Serif=\acronym{Inria} Serif} & .2 \\
+% Libertinus Serif\index{font>Libertinus Serif} & .2 \\
+% Libre Baskerville\index{font>Libre Baskerville} & .3 \\
+% Libre Caslon\index{font>Libre Caslon} & .38 \\
+% & \\
+% & \\
+% \bottomrule
+% \end{tabular}%
+% \qquad
+% \begin{tabular}[t]{@{}p{9.5em}l@{}}
+% \toprule
+% Font Name & Slant \\
+% \midrule
+% Merriweather\index{font>Merriweather} & .14 \\
+% MLModern\index{font>MLModern} & .23 \\
+% Noto Serif\index{font>Noto Serif} & .22 \\
+% \acronym{PT} Serif\index{font>PT Serif=\acronym{PT} Serif} & .2 \\
+% Roboto Slab\index{font>Roboto Slab} & .2 \\
+% Quattrocento\index{font>Quattrocento} & .2 \\
+% Source Serif Pro\index{font>Source Serif Pro} & .18 \\
+% Spectral\index{font>Spectral} & .18 \\
+% \acronym{STIX}\index{font>STIX=\acronym{STIX}} & .2 \\
+% \TeX{} Gyre Pagella\index{font>TeX Gyre Pagella=\TeX{} Gyre Pagella} & .16 \\
+% \acronym{TX} Fonts Serif\index{font>TX Fonts Serif=\acronym{TX} Fonts Serif} & .2 \\
+% \acronym{URW} Antiqua\index{font>URW Antiqua=\acronym{URW} Antiqua} & .2 \\
+% \acronym{URW} Nimbus Roman\index{font>URW Nimbus Roman=\acronym{URW} Nimbus Roman} & .2 \\
+% Utopia\index{font>Utopia} & .2 \\
+% & \\
+% \bottomrule
+% \end{tabular}
+% \end{tabfigures}
+% \end{minipage}
+% \end{maxipage}
+% \end{table}
+%
+% \DescribeMacro{\synthnegslant}
+% Control the slant applied by
+% \hyperref[syn:textsynthuprightitalic]{\cs{textsynthuprightitalic}}. This value is
+% non-positive.
+%
+% \begin{synopsis}\label{syn:synthnegslant}
+% \cs{synthnegslant}
+% \end{synopsis}
+%
+%
+% \subsection{Basic Interface}\label{sec:basic-interface}
+%
+% Package \packagename{synthslant} provides two easy-to-use macros for slanting glyphs. For a
+% more flexible and powerful interface, see~\cref{sec:advanced-interface}.
+%
+% \begin{note}
+% The following restrictions and workarounds to get line-breaking and automatic hyphenation
+% working again do \emph{not} apply to the
+% \packagename{fontspec}\index{package>\packagename{fontspec}} back-end.
+% \end{note}
+%
+% \noindent
+% Both macros provide \emph{simplistic} support for slanting hyphenatable
+% words and space-separated phrases for a given \meta{text}. The fundamental shear
+% transformation would produce an single unbreakable horizontal box. So we have added two
+% provisions to re-enable at least some breakability.
+%
+% \begin{enumerate}
+% \item Spaces introduce breakpoint,\index{breakpoint at space} e.\,g.
+% \begin{codeexample}
+% \cs{textsynthslant}\{topological dual space\}
+% \end{codeexample}
+% slants the first word (producing a horizontal box) inserts a space and then slants the
+% second word (producing another horizontal box). \TeX{} sees two (unbreakable) boxes and a
+% discardable space when it comes to linebreaking.
+%
+% \item Discretionary hyphens\index{discretionary hyphen} in the form of \singlequotes{\cs{-}}
+% get propagated. So, we could improve on our above example by saying
+% \begin{codeexample}
+% \cs{textsynthslant}\{topo\cs{-}log\cs{-}i\cs{-}cal dual space\}
+% \end{codeexample}
+% to \singlequotes{recover} hyphenation of the first word.
+% \end{enumerate}
+%
+% \noindent
+% This neither is a complete nor an elegant solution but it will take us quite far.
+%
+% \medskip
+%
+% \DescribeMacro{\textsynthslant}
+% Forward slant some upright glyphs.
+%
+% \begin{synopsis}\label{syn:textsynthslant}
+% \cs{textsynthslant}\marg{text}
+% \end{synopsis}
+%
+% In horizontal mode switch to an upright shape, slant \meta{text} with the slant value stored
+% in \hyperref[syn:synthslant]{\cs{synthslant}} and apply \doublequotes{slant
+% correction}\index{slant>correction} --~the equivalent of italics correction~-- at the
+% right-hand side of~\meta{text}.
+%
+% In math mode just slant \meta{text} with the slant value stored in
+% \hyperref[syn:synthslant]{\cs{synthslant}}.
+%
+% \begin{usecases}
+% If italics seem to be too intrusive in the body we can substitute slanted text for example
+% for foreign phrases like \singlequotes{et.\,al.} and \singlequotes{etc.}:
+%
+% \begin{codeexample}
+% \cs{newcommand*}\=\{\cs{foreignphrase}\}[2][USenglish] \\
+% \>\{\cs{foreignlanguage}\{\#1\}\{\cs{textsynthslant}\{\#2\}\}\}
+% \end{codeexample}
+%
+% \noindent
+% where we show the font modification in conjunction with the
+% \packagename{babel}~macro\index{package>\packagename{babel}}
+% \cs{foreignlanguage}~\cite{package:babel}.~\visualpar
+%
+% In math-mode you cannot have enough fonts, symbols, and most of the gizmos over there! I
+% like to mark up automorphism groups associated with a given group with a slanted-roman
+% typeface, though my macro has a more general name.
+%
+% \begin{codeexample}
+% \cs{newcommand*}\=\{\cs{functionspace}\}[1] \\
+% \>\{\cs{mbox}\{\cs{textsynthslant}\{\#1\}\}\}\specialsectionendhere
+% \end{codeexample}
+% \end{usecases}
+%
+% \DescribeMacro{\textsynthuprightitalic}
+% Backward slant some italics or oblique glyphs.
+%
+% \begin{synopsis}\label{syn:textsynthuprightitalic}
+% \cs{textsynthuprightitalic}\marg{text}
+% \end{synopsis}
+%
+% In horizontal mode switch to an italics shape,
+% slant \meta{text} with the slant value stored in \cs{synthnegslant}.
+%
+% In math mode just un-slant \meta{text} with the slant value stored in \cs{synthnegslant}.
+%
+% \begin{example}
+% To set apart operators in an algebra like, e.\,g., the radical, we could use upright
+% italics
+%
+% \begin{codeexample}
+% \cs{newcommand*}\=\{\cs{algebraoperator}\}[1] \\
+% \>\{\cs{mbox}\{\cs{textsynthuprightitalic}\{\#1\}\}\}
+% \end{codeexample}
+%
+% \noindent
+% and follow up with
+%
+% \begin{codeexample}
+% \cs{DeclareMathOperator}\{\cs{rad}\}\{\cs{algebraoperator}\{rad\}\}
+% \end{codeexample}
+%
+% \noindent
+% where we have assumed that \packagename{amsmath} has been loaded to bring
+% \cs{DeclareMathOperator} into scope.
+% \end{example}
+%
+%
+% \subsection{Advanced Interface}\label{sec:advanced-interface}
+%
+% \DescribeMacro{\synthslantbox}
+% Slant \meta{text} with an amount of \meta{slant} that can be positive, negative or zero.
+%
+% \begin{synopsis}\label{syn:synthslantbox}
+% \cs{synthslantbox}\marg{slant}\marg{text}
+% \end{synopsis}
+%
+% This is the unadorned call to the chosen slanting engine. In particular, neither the values
+% of \hyperref[syn:synthslant]{\cs{synthslant}} nor of
+% \hyperref[syn:synthnegslant]{\cs{synthnegslant}} enter its expansion! No corrections or
+% \TeX-mode adjustments are made.
+%
+% \begin{example}
+% Generate a substitute for a missing solidus character:
+%
+% \begin{codeexample}
+% 12\=\kill
+% \cs{renewcommand*}\{\cs{textfractionsolidus}\}[1] \\
+% \>\{\=\cs{kern}-.125em \\
+% \> \>\cs{raisebox}\=\{.125em\} \\
+% \> \> \>\{\=\cs{smaller} \\
+% \> \> \> \>\cs{synthslantbox}\{.3\}\{\cs{char}`/\}\}\% \\
+% \> \>\cs{kern.1em}\}
+% \end{codeexample}
+%
+% \noindent
+% where the \cs{smaller} macro is from the
+% \packagename{relsize}~package~\cite{package:relsize}.
+% \end{example}
+%
+% The following two environments are responsible for setting up everything before the actual
+% slant or un-slant code runs and what happens after the slant-engine finishes. They can be
+% redefined or patched to meet different users' needs.
+%
+% \DescribeEnv{slantenvironment}
+% Wrapper around \hyperref[syn:synthslantbox]{\cs{synthslantbox}} that is called for every
+% forward-slanting operation with~\hyperref[syn:textsynthslant]{\cs{textsynthslant}}.
+%
+% \begin{synopsis}\label{syn:slantenvironment}
+% \cs{begin}|{slantenvironment}| \\
+% \hspace*{1em}\dots \\
+% \cs{end}|{slantenvironment}|
+% \end{synopsis}
+%
+% Switch to an upright font shape and --~if
+% package~\packagename{microtype}~\cite{package:microtype}\index{package>\packagename{microtype}}
+% has been loaded~-- enter the Microtype-context defined by
+% macro~\hyperref[syn:slantcontext]{\cs{slantcontext}}. At the end add some slant correction,
+% which is the equivalent of italics correction.
+%
+% \begin{usecases}[\doublequotes{Patch Cases}]
+% Left-italics correction.~\visualpar{}
+% Simultaneous left-italics and right-italics correction for a shift-left effect.
+% \end{usecases}
+%
+% \DescribeEnv{negslantenvironment}
+% Wrapper around \hyperref[syn:synthslantbox]{\cs{synthslantbox}} that is called for every
+% backward-slanting operation
+% with~\hyperref[syn:textsynthuprightitalic]{\cs{textsynthuprightitalic}}.
+%
+% \begin{synopsis}\label{syn:negslantenvironment}
+% \cs{begin}|{negslantenvironment}| \\
+% \hspace*{1em}\dots \\
+% \cs{end}|{negslantenvironment}|
+% \end{synopsis}
+%
+% Switch to an italics font shape and --~if
+% package~\packagename{microtype}~\cite{package:microtype} has been loaded~-- enter the
+% Microtype-context defined by macro~\hyperref[syn:negslantcontext]{\cs{negslantcontext}}.
+%
+% \DescribeMacro{\slantcontext}
+% Microtype context used when typesetting slanted text.
+%
+% \begin{synopsis}\label{syn:slantcontext}
+% \cs{slantcontext}
+% \end{synopsis}
+%
+% The expansion of this macro may be empty.
+% The package's default is
+%
+% \begin{codeexample}
+% tracking = synthslant
+% \end{codeexample}
+%
+% \begin{note}
+% The tracking context~\code{synthslant} is \emph{not} defined by \packagename{synthslant}.
+% And \packagename{microtype} ignores undefined contexts.
+% \end{note}
+%
+% \DescribeMacro{\negslantcontext}
+% Microtype context used when typesetting un-slanted text.
+%
+% \begin{synopsis}\label{syn:negslantcontext}
+% \cs{negslantcontext}
+% \end{synopsis}
+%
+% The expansion of this macro may be empty.
+% The package's default is
+%
+% \begin{codeexample}
+% tracking = synthnegslant
+% \end{codeexample}
+%
+% \begin{note}
+% The tracking context~\code{synthnegslant} is \emph{not} defined by
+% \packagename{synthslant}. And \packagename{microtype} ignores undefined contexts.
+% \end{note}
+%
+% \begin{example}
+% Upright italics often look somewhat tight. I like to add some extra tracking to them. So,
+% I simply define the context~\code{synthnegslant}:
+%
+% \begin{codeexample}
+% \cs{SetTracking}\=[context = synthnegslant] \\
+% \>\{encoding = *, shape = it\} \\
+% \>\{10\}\specialsectionendhere
+% \end{codeexample}
+% \end{example}
+%
+% \begin{tip}
+% When the tracking of upright italics is changed
+% it may be advisable
+%
+% \begin{itemize}[notopsep]
+% \item to break ligatures, e.\,g.~\code{no ligatures = \{f\}},
+% \item to adjust the outer kerning, e.\,g.~\code{outer~kerning = \{0, 0\}} and
+% \item to adapt the inter-word spacing, e.\,g.~\code{spacing = \{100,,\}}.
+% \end{itemize}
+%
+% The document \filesystem{synthslant-gauge.tex}, which comes with
+% package~\packagename{synthslant}, has sample texts and tracking variations already set up
+% for experimentation.
+% \end{tip}
+%
+%
+% \clearpage
+% \section{Determining Slant}\label{sec:determine-slant}
+%
+% If a synthetically slanted piece of text needs to match to an existing italics or oblique
+% font the question arises how to determine the slant angle~\(\alpha\) or~\meta{slant}.
+%
+% \begin{note}
+% The slant angles of different glyphs in the same font may slightly differ from each other.
+% We look for a representative \meta{slant}, a kind of average that achieves a visual match
+% with the italics or obliques of the font family.
+% \end{note}
+%
+%
+% \subsection{Direct Measurement}\label{sec:direct-meansurement}
+%
+% Measure the angle of some reference glyphs with a graphics program.
+%
+% \begin{enumerate}[itemsep=.5\itemsep, parsep=.5\parsep]
+% \item Prepare a page with some sample glyphs of the font shape to be matched.
+%
+% \item Render it as PostScript or in~\acronym{PDF}.
+%
+% \item Load the file at a resolution of 1200\,dpi or higher into your favourite graphics
+% editor that supports measuring angles.
+%
+% \item In the graphics editor center the interesting letters and set the zoom to one hundred
+% percent or more.
+%
+% \item Measure some letters and write down the angles.
+%
+% \item Convert the desired angle~\(\alpha\) to a \meta{slant} by calculating \(\sin \alpha\).
+%
+% If no computer is available, the following formula might help:
+% \begin{equation*}
+% \meta{slant} = \sin \alpha \approx \frac{11}{630\degree} \: \alpha,
+% \end{equation*}
+%
+% where \(\alpha\) is given in degrees.
+% \end{enumerate}
+%
+%
+% \subsection{Comparison of Shapes}\label{sec:shape-comparison}
+%
+% Compare some reference glyphs with a differently slanted versions.
+%
+% \begin{enumerate}[itemsep=.5\itemsep, parsep=.5\parsep]
+% \item In file~\filesystem{synthslant-gauge.tex} which comes with the
+% \packagename{synthslant}~package insert the code to load your font-of-interest.
+%
+% \item Render the document as PostScript or as~\acronym{PDF}.
+%
+% \item Load the first page at a resolution of 600\,dpi to~900\,dpi into your favourite
+% graphics editor.
+%
+% \item Cut the italics sample at the top allowing for generous white-space around it as a
+% rectangle
+%
+% \item Paste the rectangle in a new layer called e.\,g.~\singlequotes{sample}.
+%
+% \item On layer \singlequotes{sample} move the rectangle down the list of different slant
+% values until it match best.
+%
+% \item Switch the layer mode of \singlequotes{sample} to \singlequotes{difference} and
+% fine-position the rectangle over the slanted sample. Compare different letters in that
+% way. Change line until the best match is found.
+%
+% \item Read the slant value at the left-hand side of the line. See
+% \Cref{fig:compare-with-the-gimp}.
+% \end{enumerate}
+%
+% \begin{figure}
+% \centering
+% \includegraphics[keepaspectratio=true, width=\linewidth]
+% {compare-with-the-gimp}
+%
+% \caption[Compare slant angles]
+% {Compare italics and slanted samples with \application{The Gimp}.~\visualpar{} For
+% this screendump I loaded the samples on the first page of
+% \filesystem{synthslant-gauge.pdf} at a resolution of~600\,dpi into
+% \application{The Gimp}. The \singlequotes{sample}~layer is aligned to the
+% letter~\singlequotes{t} in the word~\singlequotes{White}. Note that accidentally
+% the letter~\singlequotes{H} of the next word~\singlequotes{Handgloves} confirms
+% the good match.}\label{fig:compare-with-the-gimp}
+% \end{figure}
+%
+%
+% \subsection{Exploring Further}\label{sec:exploring-further}
+%
+% Once a usable slant value has been found it can be fed into \filesystem{synthslant-gauge.tex}
+% and --~after recompiling with the appropriate \LaTeX-engine~-- used to examine the details of
+% the slant operations.
+%
+% Page~2, Sec.~3.1, \singlequotes{Copy}, shows wild mixes of different font shapes, native al
+% well as synthesized ones. Here, the slanted glyphs as well as the upright italics should
+% blend well with the native italics/obliques and the normal font, respectively.
+%
+% Page~3, Sec.~3.2 and following sub-sections, examines the coupling of
+% \packagename{synthslant} with the \TeX-system and some of its extensions. If a slant engine
+% malfunctions, it will become evident on this page.
+%
+%
+% \clearpage
+% \section{Limitations and Known Problems}\label{sec:limitations}
+%
+% Here I list some of the known problems of \packagename{syntslant}. Conceivably there are
+% more.
+%
+% \begin{description}
+% \item[All except \packagename{fontspec}.]
+% \packagename{Syntslant}~manipulations may not survive
+% (pre-)\discretionary{}{}{}processing by \MP.
+%
+% \item[\packagename{l3draw} engine.]\index{package>\packagename{l3draw}}\mbox{}
+% \begin{itemize}
+% \item Depending of the shear direction the \packagename{l3draw} engine may generate some
+% extra positive or negative space at the ends of the text.
+%
+% \item Any box sheared looses its depth; technically \cs{dp} becomes~0pt.
+%
+% \item Markedly slower than the \acronym{PDF}-implementation!
+% \end{itemize}
+%
+% \item[\pstrickslogo{} engine.]\index{package>\packagename{pstricks}}
+% The \pstrickslogo{} engine produces some extra space at the ends of the text.
+%
+% \item[\tikzlogo{} engine.]\index{package>\packagename{tikz}}
+% The \tikzlogo{} engine produces some extra space at the ends of the text.
+% \end{description}
+%
+%
+% \clearpage
+% \section{Alternative Solution}\label{sec:alternative}
+%
+% Here is an alternative to \packagename{synthslant} that I am aware of. It changes the slant
+% of a font as a whole and it is impossible to undo the change within the document.
+%
+%
+% \subsection{Using \pdfTeX}\label{sec:alternative-pdftex}
+%
+% In \pdfTeX{} fonts can be re-mapped in the document preamble with the
+% primitive~\cs{pdfmapline}; see the \pdfTeX{} Reference Manual~\cite[Sec.~6.1]{pdftex} for a
+% description of the syntax. This possibility renders possible to splice in a slanting
+% operation on the fly.
+%
+% Here is a simplified syntax of a font map line, which does not indicate any of the optional
+% parts for better readability:
+%
+% \begin{multilinecodeexample}
+% \meta{tfm-name} \meta{ps-name} \meta{font-flags} \\
+% \pushright "\meta{special}" <\meta{encoding-file} <\meta{font-file}
+% \end{multilinecodeexample}
+%
+% \noindent where
+%
+% \begin{itemize}[notopsep]
+% \item \meta{tfm-name} is the basename of the \TeX{} font-metric file~(\filesystem{*.tfm}),
+%
+% \item \meta{ps-name} is the name the font will acquire inside of \TeX,
+%
+% \item \meta{font-flags} optionally specify some characteristics of the font,
+%
+% \item \meta{special} prescribes font manipulations in the same way as
+% \command{dvips}~\cite[Sec.~6.3]{dvips} does,
+%
+% \item \meta{encoding-file} is the filename~(\filesystem{*.enc}) where the encoding to be used
+% with \meta{font-file} is stored, and
+%
+% \item \meta{font-file} sets the filename of the font's definition. It is given without path
+% but includes an extension, which typically is \filesystem{otf,} \filesystem{pfb,}
+% or~\filesystem{ttf.}
+% \end{itemize}
+%
+% \noindent
+% We are particularly interested in the \meta{special}~part that allows us to slant the whole
+% font with a single instruction.
+%
+% I want to elaborate the example given in \cref{sec:usage-ideas},
+% \cref{it:correct-italics-angle} and generate less-angled italics for
+% Libre~Caslon.\index{font>Libre Caslon} Here is a suitable map line taken from
+% \filesystem{pdftex.map} on my system:
+%
+% \begin{multilinecodeexample}
+% LibreCsln-Italic-osf-t1--base LibreCsln-Italic \\
+% \indent "\textvisiblespace AutoEnc\ttdots\textvisiblespace ReEncodeFont\textvisiblespace" \\
+% \pushright <[lcsln\ttdots.enc <LibreCsln-Italic.pfb
+% \end{multilinecodeexample}
+%
+% \smallskip
+%
+% \noindent
+% which I had to break into three lines to make it fit this page. The
+% \singlequotes{{\ttfamily\ttdots\,}} indicate parts of the identifiers that I left out beyond
+% that. There are in fact four map lines for \code{T1}-encoded Libre~Caslon italics, those for
+% lining figures~\singlequotes{\code{lf}}, oldstyle figures~\singlequotes{\code{osf}}, tabular
+% lining figures~\singlequotes{\code{tlf}}, and tabular oldstyle
+% figures~\singlequotes{\code{osf}}.
+%
+% The slant operation I want to add to the \meta{special}~part has the format:
+%
+% \begin{codeexample}
+% \meta{slant}~SlantFont
+% \end{codeexample}
+%
+% \noindent
+% so for a shear to the left, for example, \(\meta{slant} = -.12\), which means the font gets
+% slanted by~\(-8\degree\) the \meta{special}~part becomes
+%
+% \begin{codeexample}
+% "\textvisiblespace -0.12\textvisiblespace SlantFont\textvisiblespace
+% AutoEnc\ttdots\textvisiblespace ReEncodeFont\textvisiblespace"
+% \end{codeexample}
+%
+% \noindent
+% Finally, I select the modified font e.\,g.~with macro
+%
+% \begin{codeexample}
+% \cs{usefont}\{\meta{encoding}\}\{\meta{family}\}\{\meta{series}\}\{\meta{shape}\}
+% \end{codeexample}
+%
+% \noindent
+% See Ref.~\citenum{latex-unofficial-refman} for details.
+% In our case the call to \cs{usefont} is
+%
+% \begin{codeexample}
+% \char`\\usefont\{T1\}\{LibreCsln-OsF\}\{regular\}\{it\}
+% \end{codeexample}
+%
+% \begin{example}
+% Here is all the talk of above put into action as this very document contains exactly the
+% \cs{pdfmapline} just described.
+%
+% \begin{center}
+% \def\sample{White Handgloves}
+% \begin{tabular}{@{}ll@{}}
+% Uncorrected, original italics & {\usefont{T1}{LibreCsln-LF}{regular}{it}\sample} \\
+% Less angled version & {\usefont{T1}{LibreCsln-OsF}{regular}{it}\sample}
+% \end{tabular}
+% \end{center}
+%
+% \noindent
+% The only trick I have to reveal is that for the \doublequotes{original italics} I used the
+% lining figures~\singlequotes{\code{lf}} version of the font, whereas the \doublequotes{less
+% angled} version shows the oldstyle figures~\singlequotes{\code{osf}} version.
+%
+% The \TeX{} Font Metrics file (\acronym{TFM}) for this particular variant of Libre~Caslon
+% was not touched.
+% \end{example}
+%
+%
+% \subsection{Combining \LaTeX{} and \command{dvipdfmx}}\label{sec:alternative-latex}
+%
+% The alternative when using \LaTeX{} is similar the one elaborated in the previous section.
+% The font mapline gets modified by \cs{special} primitive
+%
+% \begin{codeexample}
+% \cs{special}\{pdf:mapline \meta{font-mapline}\}
+% \end{codeexample}
+%
+% \noindent
+% that forwards the task of re-mapping the font, e.\,g.~to \command{dvipdfmx}. Our running
+% example becomes
+%
+% \begin{multilinecodeexample}
+% \cs{special}\{pdf:mapline \\
+% \indent LibreCsln-Italic-osf-t1--base LibreCsln-Italic \\
+% \indent "\textvisiblespace -0.12\textvisiblespace SlantFont\textvisiblespace
+% AutoEnc\ttdots\textvisiblespace
+% ReEncodeFont\textvisiblespace" \\
+% \pushright <[lcsln\ttdots.enc <LibreCsln-Italic.pfb\}
+% \end{multilinecodeexample}
+%
+% \noindent
+% The mapline contains \command{dvips}~options for special font effects; see
+% Ref.~\citenum{dvips}, Sec.~6.3. Note that there is no \singlequotes{\code{=}}-sign at the
+% beginning of the \code{pdf:mapline} in contrast to \cs{pdfmapline}.
+%
+% The font is activated in the same way as in the \acronym{PDF}-path
+% (\cref{sec:alternative-pdftex}). The further translation of the resulting \acronym{DVI}-file
+% must be performed with an application that is aware of the \cs{special}~primitive as for
+% example~\command{dvipdfmx}~\cite{dvipdfmx} is.
+%
+% \begin{note}
+% Despite the option syntax originates with \command{dvips} it is not able to interpret any
+% \code{\cs{special}\{pdf:mapline \ttdots\}}.
+% \end{note}
+%
+%
+% \clearpage
+% \appendix
+%
+%
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%
+% \MaybeStop{
+% \clearpage
+% \phantomsection
+% \resetfancyhead
+% \addcontentsline{toc}{section}{Change History}
+% \PrintChanges
+%
+% \clearpage
+% \phantomsection
+% \addcontentsline{toc}{section}{References}
+% \begin{RaggedRight}
+% \begin{thebibliography}{88}
+% \bibitem{package:relsize}
+% \bibauthor{Arseneau, Donald}.
+% \bibtitle{The \textsf{relsize} package}.
+% 2013,
+% \biburl{https://ctan.org/pkg/relsize}.
+%
+% \bibitem{adobe-pdf-1.0}
+% \bibauthor{Bienz, Tim} and \bibauthor{Richard Cohn}.
+% \bibtitle{Portable Document Format Reference Manual}.
+% Addison-Wesley Publishing Company, Reading/MA,
+% 1993,
+% \biburl{https://opensource.adobe.com/dc-acrobat-sdk-docs/pdfstandards/pdfreference1.0.pdf}.
+%
+% \bibitem{package:babel}
+% \bibauthor{Bezos, Javier}.
+% \bibtitle{Package~\packagename{babel}}.
+% 2021,
+% \biburl{https://ctan.org/pkg/babel}.
+% The original author of \packagename{babel} was \bibauthor{J. L. Braams}.
+%
+% \bibitem{tex-stackexchange-2013-12-7}
+% \bibauthor{Carlisle, David}.
+% \bibtitle{Shear Transform a Box}.
+% 2013-12-7,
+% \biburl{https://tex.stackexchange.com/questions/63179/shear-transform-a-box/63188}.
+%
+% \bibitem{dvipdfmx}
+% \bibauthor{Dvipdfmx Project Team,} ed.
+% \bibtitle{\command{dvipdfmx}}.
+% 2020,
+% \biburl{https://ctan.org/pkg/dvipdfmx}.
+%
+% \bibitem{fntguide}
+% \bibauthor{\LaTeXIII{} Project Team,} ed.
+% \bibtitle{\LaTeXe{} font selection}.
+% 2023,
+% \biburl{https://www.latex-project.org/help/documentation/fntguide.pdf}.
+%
+% \bibitem{latex3-interfaces}
+% \bibauthor{\LaTeXIII{} Project,}
+% \bibtitle{The \LaTeXIII{} Interfaces}.
+% 2024,
+% \biburl{https://texdoc.org/serve/interface3/0}.
+%
+% \bibitem{latex-unofficial-refman}
+% \bibauthor{latexref.xyz}.
+% \bibtitle{\LaTeXe: An unofficial reference manual}.
+% 2023,
+% \biburl{https://latexref.xyz/dev/latex2e.pdf}.
+%
+% \bibitem{middendorp:2014}
+% \bibauthor{Middendorp, Jan}.
+% \bibtitle{Shaping Text}.
+% \acronym{BIS}~publishers, Amsterdam,
+% 2014.
+%
+% \bibitem{dvips}
+% \bibauthor{Rokicki, Tomas}.
+% \bibtitle{\command{dvips}}.
+% 2022,
+% \biburl{https://tug.org/texlive/Contents/live/texmf-dist/doc/dvips/dvips.pdf}.
+%
+% \bibitem{package:microtype}
+% \bibauthor{Schlicht, Robert}.
+% \bibtitle{Package~\packagename{microtype}}.
+% 2020,
+% \biburl{https://ctan.org/pkg/microtype}.
+%
+% \bibitem{schroeder:2007}
+% \bibauthor{Schr\"oder, Martin}.
+% \bibtitle{pdftex 1.40}.
+% 2007,
+% \biburl{https://tug.org/mail-archives/pdftex/2007-January/006910.html}.
+%
+% \bibitem{stamm:2020}
+% \bibauthor{Stamm, Philipp}.
+% \bibtitle{Schrifttypen -- Verstehen Kombinieren:
+% Schriftmischung als Reiz in der Typografie}.
+% Birkhäuser, Basel,
+% 2020.
+%
+% \bibitem{strizver:2014}
+% \bibauthor{Strizver, Ilene}.
+% \bibtitle{Type rules!: the designer's guide to professional typography},
+% 4\textsuperior{th}~ed.
+% John Wiley~\& Sons, Hoboken/NJ,
+% 2014.
+%
+% \bibitem{baskerville-pdftex-8-1:1998}
+% \bibauthor{Th\`anh, Han The}.
+% \bibtitle{The \pdfTeX{} user manual}.
+% Baskerville, 8(1), 9--14 (1998),
+% \biburl{http://uk-tug-archive.tug.org/wp-installed-content/uploads/2008/12/81.pdf}.
+%
+% \bibitem{pdftex}
+% \bibauthor{Th\`anh, Han The} et al.
+% \bibtitle{\pdfTeX}.
+% 2023,
+% \biburl{http://mirrors.ctan.org/systems/doc/pdftex/manual/pdftex-a.pdf}.
+% \end{thebibliography}
+% \end{RaggedRight}
+%
+%
+% \clearpage
+% \begin{RaggedRight}
+% \setcounter{IndexColumns}{2}
+% \setlength{\columnsep}{30pt}
+% \label{sec:index}
+% \phantomsection
+% \addcontentsline{toc}{section}{Index}
+% \PrintIndex
+% \end{RaggedRight}
+% }
+%
+%
+% \clearpage
+% \section{Package Code}\label{sec:package-code}
+% \addtocontents{toc}{\begingroup\small}
+% \addtocontents{toc}{\protect\begin{multicols}{2}}
+% \addtocontents{toc}{\protect\raggedcolumns}
+%
+% This is the \doublequotes{Reference Manual} section of the documentation
+% where we describe the package's code
+% and explain its implementation details.
+%
+%
+% \begin{macrocode}
+%<*package>
+\NeedsTeXFormat{LaTeX2e}[2005/12/01]
+\ProvidesPackage{synthslant}
+ [2024/05/07 v0.1 Synthetically Slant glyphs]
+
+\RequirePackage{iftex}
+\RequirePackage{xkeyval}
+
+% \end{macrocode}
+%
+%
+% \subsection{Declaration of Default Slants}
+%
+% \begin{macro}{\synthslant}
+% Introduce a reasonable default for the slant. Let the user override it if she knows
+% better.
+%
+% Remember that the slant is not an angle (with respect to the \(y\)-axis), but the sine of
+% it; The value~\(.2\) approximately corresponds to a slant-angle of 12\textdegree\!.
+%
+% \begin{macrocode}
+\providecommand*{\synthslant}{.2}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\synthnegslant}
+% Also introduce a reasonable default for the negative slant, which is used for upright
+% italics.
+%
+% \begin{macrocode}
+\providecommand*{\synthnegslant}{-.2}
+
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Selection of Slant-Engine}
+%
+% We provide several methods to slant glyphs. The actual slanting is delegated to a
+% \singlequotes{slant-engine} which shears the glyphs.
+%
+% \begin{macro}{\synthslant@engine}
+% Default to automatic selection of the slant engine.
+%
+% \begin{macrocode}
+\def\synthslant@engine{-1}
+
+% \end{macrocode}
+% \end{macro}
+%
+% Expose default forward and backward slant values as package options.
+%
+% \begin{macrocode}
+\DeclareOptionX{slant}{%
+ \xdef\synthslant{\fpeval{#1}}%
+ \xdef\synthnegslant{\fpeval{-(#1)}}}
+\DeclareOptionX{negslant}{\xdef\synthnegslant{\fpeval{#1}}}
+\DeclareOptionX{posslant}{\xdef\synthslant{\fpeval{#1}}}
+
+% \end{macrocode}
+%
+% Make slant-engine selection configurable.
+%
+% \begin{macrocode}
+\DeclareOptionX{auto}{\def\synthslant@engine{-1}}
+\DeclareOptionX{PDF}{\def\synthslant@engine{0}}
+\DeclareOptionX{pdf}{\def\synthslant@engine{0}}
+\DeclareOptionX{l3draw}{\def\synthslant@engine{1}}
+\DeclareOptionX{ps}{\def\synthslant@engine{2}}
+\DeclareOptionX{PS}{\def\synthslant@engine{2}}
+\DeclareOptionX{tikz}{\def\synthslant@engine{3}}
+\DeclareOptionX{TikZ}{\def\synthslant@engine{3}}
+\DeclareOptionX{fontspec}{\def\synthslant@engine{4}}
+\DeclareOptionX{disable}{\def\synthslant@engine{10000}}
+
+\ProcessOptionsX\relax
+
+% \end{macrocode}
+%
+% Require sane parameter values.
+%
+% \begin{macrocode}
+\ExplSyntaxOn
+\fp_compare:nNnTF {\synthslant} < {.0}
+ {\PackageError{synthslant}{\string\synthslant\space <\space 0}
+ {Pass\space a\space value\space that\space is\space non-negative.}}
+ {}
+\fp_compare:nNnTF {\synthnegslant} > {.0}
+ {\PackageError{synthslant}{\string\synthnegslant\space >\space 0}
+ {Pass\space a\space value\space that\space is\space non-positive.}}
+ {}
+\ExplSyntaxOff
+
+% \end{macrocode}
+%
+% Announce the positive and negative slant values now that we are sure they are ok. This may
+% be useful information if the user passed a (complicated) floating-point expression and wants
+% to know how \LaTeX{} did evaluate it.
+%
+% \begin{macrocode}
+\PackageInfo{synthslant}{\string\synthslant=\synthslant}
+\PackageInfo{synthslant}{\string\synthnegslant=\synthnegslant}
+
+
+% \end{macrocode}
+%
+%
+% \subsection{Slant Engines}
+%
+% The auto-selection code is pretty trivial. If we identify \pdfTeX{} running we select the
+% \acronym{PDF}-engine, for \LuaLaTeX{} we select the \packagename{fontspec}-engine, and in all
+% other cases we let the \packagename{l3draw}-layer handle the shearing.
+%
+% \begin{macrocode}
+\ifnum\synthslant@engine<0
+ \PackageInfo{synthslant}{auto-selecting slant engine}
+
+ \ifpdftex
+ \ifnum\pdfoutput>0
+ \def\synthslant@engine{0}
+ \else
+ \def\synthslant@engine{1}
+ \fi
+ \else
+ \ifluatex
+ \def\synthslant@engine{4}
+ \else
+ \def\synthslant@engine{1}
+ \fi
+ \fi
+\fi
+
+
+% \end{macrocode}
+%
+%
+% \begin{macro}{\synthslant@shear@box}
+% The various slant engine macros are all subsumed under \cs{synthslant@\-shear@\-box}. So
+% the higher-level code becomes (almost) engine independent.
+% \end{macro}
+%
+%
+% \begin{macro}{\synthslant@engine@name}
+% Sometimes we would like to recover the (printable) name of the selected slant engine.
+%
+% \begin{macrocode}
+\newcommand*{\synthslant@engine@name}{%
+ \ifcase\synthslant@engine
+ PDF%
+ \or% 1
+ l3draw%
+ \or% 2
+ PSTricks%
+ \or% 3
+ TikZ%
+ \or% 4
+ fontspec%
+ \else
+ null-implementation%
+ \fi
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection{\acronym{PDF} Slant Engine}
+%
+% The \acronym{PDF}-engine works well and it is the best tested alternative.
+%
+% \begin{macrocode}
+\ifcase\synthslant@engine% 0: PDF
+ \PackageInfo{synthslant}{shearing done by PDF}
+
+ \newbox{\synthslant@box}
+
+% \end{macrocode}
+% \begin{macro}{\synthslant@pdf@shear@box}
+% \begin{macrocode}
+ \newcommand*{\synthslant@pdf@shear@box}[2]{%
+ \mbox{\sbox{\synthslant@box}{#2}%
+ \hskip\wd\synthslant@box
+ \pdfsave
+ \pdfsetmatrix{1 0 #1 1}%
+ \llap{\usebox{\synthslant@box}}%
+ \pdfrestore}%
+ }
+
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+ \let\synthslant@shear@box=\synthslant@pdf@shear@box
+% \end{macrocode}
+%
+%
+% \subsubsection{\packagename{l3draw} Slant Engine}
+%
+% Using \LaTeXIII{} may be like cheating on a very high level as the draw subsystem may
+% delegate to the \acronym{PDF}-engine itself. \acronym{LOL!}
+%
+% \begin{macrocode}
+\or% 1: LaTeX3 draw subsystem
+ \PackageInfo{synthslant}{shearing delegated to l3draw}
+
+ \RequirePackage{l3draw}
+
+ \ExplSyntaxOn
+% \end{macrocode}
+% \begin{macro}{\synthslant@latex@shear@box}
+% Slanting implemented with the experimental l3draw subsystem.
+%
+% \begin{anticipatedchange}
+% As soon as the l3kernel offers an x-shear operation (\cs{box\_xshear:Nn}?) we shall ditch
+% this implementation and switch to the one that is tailored to \emph{text} instead of the
+% current one for graphics.
+% \end{anticipatedchange}
+%
+% \begin{macrocode}
+ \NewDocumentCommand{\synthslant@latex@shear@box}{mm}{
+ \hbox_set:Nn \l_tmpa_box {#2}
+ \dim_set:Nn \l_tmpa_dim {\box_wd:N \l_tmpa_box}
+ \dim_set:Nn \l_tmpb_dim {\box_ht:N \l_tmpa_box}
+ \draw_begin:
+ \draw_transform_xslant:n {#1}
+% \end{macrocode}
+%
+% Force the baseline of the payload (\#2) to coincide with the baseline of the surrounding
+% text. This --~of course~-- screws up our bounding box at least vertically.
+%
+% \begin{macrocode}
+ \box_set_dp:Nn \l_tmpa_box {\z@}
+% \end{macrocode}
+%
+% Here comes a fudge because the l3draw bounding boxes are way too loose. For positive
+% slants: shrink the box-width by the box-height times~\meta{slant}. For negative slants:
+% shrink the box-width as for positive slants and in addition shift the payload to the left by
+% the box-height times~\meta{slant}.
+%
+% \begin{macrocode}
+ \fp_compare:nNnTF {#1} >= {.0}
+ {
+ \box_set_wd:Nn \l_tmpa_box {\l_tmpa_dim - #1\l_tmpb_dim}
+ }
+ {
+ \draw_suspend_begin:
+ \kern#1\l_tmpb_dim
+ \draw_suspend_end:
+ \box_set_wd:Nn \l_tmpa_box {\l_tmpa_dim + #1\l_tmpb_dim}
+ }
+% \end{macrocode}
+%
+% Now typeset the box.
+%
+% \begin{macrocode}
+ \draw_box_use:N \l_tmpa_box
+ \draw_end:
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+ \ExplSyntaxOff
+
+ \let\synthslant@shear@box=\synthslant@latex@shear@box
+% \end{macrocode}
+%
+%
+% \subsubsection{\pstrickslogo{} Slant Engine}
+%
+% Shearing via \pstrickslogo{} works, but exhibits a weird interface.
+%
+% \begin{macrocode}
+\or% 2: PSTricks
+ \PackageInfo{synthslant}
+ {shearing deferred to PostScript via PSTricks}
+
+ \RequirePackage{pst-3d}% \pstilt
+
+% \end{macrocode}
+%
+% Package~\packagename{pstricks} offers \cs{pstilt} and \cs{psTilt} both with typographically
+% sub-optimal outcomes.
+%
+% \begin{macro}{\synthslant@pstricks@shear@box}
+% \begin{macrocode}
+ \newcommand*{\synthslant@pstricks@shear@box}[2]{%
+ \pstilt{\fpeval{57.2958 * acos(#1)}}{#2}%
+ }
+
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+ \let\synthslant@shear@box=\synthslant@pstricks@shear@box
+% \end{macrocode}
+%
+%
+% \subsubsection{\tikzlogo{} Slant Engine}
+%
+% The \tikzlogo{} code has not been tested thoroughly yet, but it looks like it could work
+% after some tweaking.
+%
+% \begin{macrocode}
+\or% 3: TikZ
+ \PackageInfo{synthslant}{shearing by TikZ}
+
+ \RequirePackage{tikz}
+
+% \end{macrocode}
+% \begin{macro}{\synthslant@tikz@shear@box}
+% \begin{macrocode}
+ \newcommand*{\synthslant@tikz@shear@box}[2]{%
+ \tikz[baseline = (ANCHOR.base), xslant = #1]
+ \node[inner sep = 0pt, xslant = #1] (ANCHOR) {#2};
+ }
+
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+ \let\synthslant@shear@box=\synthslant@tikz@shear@box
+% \end{macrocode}
+%
+%
+% \subsubsection{\packagename{fontspec}}
+%
+% The \packagename{fontspec} works particularly well, but it does not jibe with \pdfTeX.
+%
+% \begin{macrocode}
+\or% 4: fontspec
+ \PackageInfo{synthslant}
+ {use fontspec's artificial font transformations}
+
+ \RequirePackage{fontspec}
+
+ \ExplSyntaxOn
+% \end{macrocode}
+% \begin{macro}{\synthslantbox@fontspect@shear@box}
+% \begin{macrocode}
+ \newcommand*{\synthslantbox@fontspect@shear@box}[2]{
+ \begingroup
+ \expandafter\fontspec[FakeSlant = #1]{\l_fontspec_family_tl}
+ #2
+ \endgroup
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+ \ExplSyntaxOff
+
+ \let\synthslant@shear@box=\synthslantbox@fontspect@shear@box
+% \end{macrocode}
+%
+%
+% \subsubsection{Null Implementation}
+%
+% The null implementation --~which does exactly what its name implies~-- can be useful for
+% debugging or to get rid of the effect temporarily.
+%
+% \begin{macrocode}
+\else% >=5: Null implementation
+ \PackageWarning{synthslant}{shearing disabled}
+
+% \end{macrocode}
+% \begin{macro}{\synthslant@identity@shear@box}
+% \begin{macrocode}
+ \newcommand*{\synthslant@identity@shear@box}[2]{#2}
+
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+ \let\synthslant@shear@box=\synthslant@identity@shear@box
+\fi
+
+
+% \end{macrocode}
+%
+%
+% \subsection{Generic Slant Code}
+%
+% Here comes the engine-independent code.
+%
+% \begin{macro}{\synthslant@nolinebreak}
+% The \LaTeXIII{} and \tikzlogo{} engines break lines at \singlequotes{unexpected} points.
+% Here is a duct-tape solution for them that concretes together the adajacent parts.
+%
+% \begin{macrocode}
+\def\synthslant@nolinebreak{%
+ \ifnum\synthslant@engine=1% l3draw
+ \nolinebreak
+ \else
+ \ifnum\synthslant@engine=3% TikZ
+ \nolinebreak
+ \fi
+ \fi
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\synthslantbox@soft@hyphen}
+% Allow for line breaks at hyphenation opportunities~(\singlequotes{\cs{-}}).
+%
+% \begin{macrocode}
+\def\synthslantbox@soft@hyphen#1\-#2\relax{%
+ \synthslant@shear@box{\synthslant@slant@value}{#1}%
+ \ifx\relax#2%
+ \relax
+ \else
+ \synthslant@nolinebreak
+ \discretionary{-}{}{}%
+ \synthslantbox@soft@hyphen#2\relax
+ \fi
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\synthslantbox@hard@hyphen}
+% Allow for line breaks at embedded, explicit hyphens~(\singlequotes{-}).
+%
+% \begin{macrocode}
+\def\synthslantbox@hard@hyphen#1-#2\relax{%
+ \synthslantbox@soft@hyphen#1\-\relax
+ \ifx\relax#2%
+ \relax
+ \else
+ \synthslant@nolinebreak
+ \synthslant@shear@box{\synthslant@slant@value}{-}%
+ \synthslant@nolinebreak
+ \discretionary{}{}{}%
+ \synthslantbox@hard@hyphen#2\relax
+ \fi
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\synthslantbox@space}
+% Allow for line breaks at embedded spaces~(\singlequotes{\textvisiblespace}).
+%
+% \begin{macrocode}
+\def\synthslantbox@space#1 #2\relax{%
+ \synthslantbox@hard@hyphen#1-\relax
+ \ifx\relax#2%
+ \relax
+ \else
+ \space
+ \synthslantbox@space#2\relax
+ \fi
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\synthslantbox}
+% We define two completely different implementations depending on the request for
+% \packagename{fontspec} doing the slanting or any other package.
+%
+% Macro~1: Immediately call the \packagename{fontspec}-specific macro. Bypass the hierarchy
+% needed for the other slant engines.
+%
+% \begin{macrocode}
+\ifnum\synthslant@engine=4% fontspec
+ \newrobustcmd*{\synthslantbox}[2]{%
+ \edef\synthslant@slant@value{#1}% definition for compatibility of both branches
+ \synthslantbox@fontspect@shear@box{\synthslant@slant@value}{#2}%
+ }
+% \end{macrocode}
+%
+% Macro~2: This is the firestarter for the processing of all different kinds breakpoints
+% until we reach unbreakable chunks to be passed on to the selected slant engine.
+%
+% Normally, a user wants to call \cs{text\-synth\-slant} or
+% \cs{text\-synth\-up\-right\-italic}, however \LaTeX~wizards may have other ideas.
+%
+% \begin{macrocode}
+\else
+ \newrobustcmd*{\synthslantbox}[2]{%
+ \edef\synthslant@slant@value{#1}%
+ \expandafter\synthslantbox@space#2 \relax\relax
+ }
+\fi
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\synthslantbox@right@slant@correction}
+% This is a simple yet surprisingly effective heuristic for slant correction on the
+% right-hand side if the slanted text. The value~\cs{synthslant} is \(\sin \alpha\), where
+% \(\alpha\) is the slant angle; see \cref{equ:shear-transformation} on
+% \cpageref{equ:shear-transformation}. Multiplied with the ex-height of the current font,
+% \cs{fontdimen5}, this is a good approximation of the necessary slant correction.
+%
+% \begin{macrocode}
+\newcommand*{\synthslantbox@right@slant@correction}{%
+ \dimen0=\fontdimen5\font
+ \kern\synthslant\dimen0\relax
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\slantcontext}
+% If we have \packagename{microtype} support we enter the context defined by this macro in
+% |slantenvironment|.
+%
+% \begin{macrocode}
+\newcommand*{\slantcontext}{tracking=synthslant}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{slantenvironment}
+% We use this environment as a pair of hooks that are called right before and right after the
+% actual slanting code runs. The default sets up an upright type shape before and adds some
+% italic correction after slanting.
+%
+% \begin{macrocode}
+\NewDocumentEnvironment{slantenvironment}{}
+ {\upshape
+ \ifcsdef{microtypecontext}
+ {\expandafter\microtypecontext\expandafter{\slantcontext}}
+ {}}
+ {\ifcsdef{endmicrotypecontext}
+ {\endmicrotypecontext}
+ {}%
+ \synthslantbox@right@slant@correction}
+
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\textsynthslant}
+% User-level macro to slant some text.
+%
+% \begin{macrocode}
+\NewDocumentCommand{\textsynthslant}{m}
+ {\ifmmode
+ \synthslantbox{\synthslant}{#1}%
+ \else
+ {\slantenvironment
+ \synthslantbox{\synthslant}{#1}%
+ \endslantenvironment}%
+ \fi}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\synthslantbox@right@negslant@correction}
+% We could play the same trick here as in \cs{synthslantbox@right@slant@correction} and use
+% \cs{synthnegslant} instead of \cs{synthslant}. But my experiments show no need for a
+% correction. Anyhow, this macro may be convenient to override someday.
+%
+% \begin{macrocode}
+\newcommand*{\synthslantbox@right@negslant@correction}{}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\negslantcontext}
+% If we have \packagename{microtype} support we enter the context defined by this macro in
+% |negslantenvironment|.
+%
+% \begin{macrocode}
+\newcommand*{\negslantcontext}{tracking=synthnegslant}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{negslantenvironment}
+% We use this environment as a pair of hooks that are called right before and right after the
+% actual un-slanting code runs.
+%
+% The default sets up an italics shape before un-slanting and adds some negative italic
+% correction after un-slanting.
+%
+% \begin{macrocode}
+\NewDocumentEnvironment{negslantenvironment}{}
+ {\itshape
+ \ifcsdef{microtypecontext}
+ {\expandafter\microtypecontext\expandafter{\negslantcontext}}
+ {}}
+ {\ifcsdef{endmicrotypecontext}
+ {\endmicrotypecontext}
+ {}%
+ \synthslantbox@right@negslant@correction}
+
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\textsynthuprightitalic}
+% User-level macro to un-slant some italics or oblique text.
+%
+% \begin{macrocode}
+\NewDocumentCommand{\textsynthuprightitalic}{m}
+ {\ifmmode
+ \synthslantbox{\synthnegslant}{#1}%
+ \else
+ {\negslantenvironment
+ \synthslantbox{\synthnegslant}{#1}%
+ \endnegslantenvironment}%
+ \fi}
+
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \iffalse
+%</package>
+% \fi
+%
+%
+% \addtocontents{toc}{\protect\end{multicols}}
+% \addtocontents{toc}{\endgroup}
+%
+%
+% \Finale
+%
+%
+%
+%
+% \iffalse
+% <DISABLE-SPELL-CHECK>
+%<*compare-with-the-gimp>
+iVBORw0KGgoAAAANSUhEUgAAA78AAAI8CAAAAAAc2EOEAAAABGdBTUEAALGPC/xhBQAAAAJiS0dE
+AP+Hj8y/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH6AMCCBkfw3F0QQAAgABJREFUeNrs
+XWWYJcXVfk9V9ZVx3511d4XF3RIsECBGkJAQEiQQJAYhkBBCCAT3QIhhIQR3FndZd5/ZHZ/Z8TtX
+uuuc70ffO3NHlrUBli/zPs/u3O6uLus+XVWnznkP3YMBDGAAX1IoAIBAhAWSfkXAItI9tUB6pEqe
+F0E/YUtF9HWxr2pvc15dlwXCO5zJAAbwBUJBICysVICEAPivM7OQBJQCI/WGs0BIjBZKphFI519N
+PWR/S+986oY+LySLMMmKpF1g/6a0iyJIVtuvYu+cABKlhJKVSZ1MpgALsVJCAAkFuxXZmUYEQqJN
+r6sDGMAuAf01EgoFTCRekQsREpB/gq0u02wCHkiIRIUcYWGnMp7tARBRjgUJCQWZA9Tm+KIhEBIC
+iVEWIgJiAYkIujIPcNrAJ4D4+YgKOWSFneqOHL8IEb9sCgYc4wlB2Klpz/ZAECKSUMDpSFRkB62f
+TTI9SCjkgEUgFPcMQ4yySnTIgVXJLLXjhYjDHZ5hAZAoK2CB/x3ozEUbz9FW2KlvyfEAGhDiAexy
+MBDiD9vzhybWDXeMdQkQkg87zNTczI0mbCrHJIQgKr7QG59nxFRmlSqVkBBiZWMSQkJ22ehwhQ2G
+HcezSoyrXQLEVPNIwBrPDWrXDWjEVcDzM+eVI41yJBFwySRClLxAoqML3OFDDHS1Gap0TAUslGsJ
+QvJxB5k9QlGERNdghBFXCAI1vzlnGNaWlo+0RiUolR5Cdl50XKGhhHEibpaC1KhBHYGGFRg5tiPA
+liC6uXHikoKiFYWcRSphM+yacY6Ka+t4JEr7uZj6yJgqd7giU98x2ijXGxDgAexy0F+Dii/ca1DU
+toyuWyJ5TICKL9xzSGb5iqYh1P4SipVAwu/QpETG0k3Fm4MFSzYVqAV17lwuUQIJzXcGvVmEnIZF
+wGa3PKOikEESWh4NLq5wlyFv8Vonv2xFTX7rQpvPICj74ciM+oXNhesyvbKC5WXFTUvcAiYhebVw
+WCJjcdngRl00v2xQ09LWxrUZGUwgya+PzVy2sVAvLBvUaMLz2vNJCMQfzx4Rs5HwK/GStesLW5e0
+Nq0JZzCJhD9unxnLWlyet64skd2+fEPukgX5Bc6ayH6mrGgjZzJBJT4Z85oJLR/B0ZUbQpkLNtkx
+C9cXVQbWmkauWRnOZIIEN9TPXl0zdtn6/HYElpQFs3lAfAewq0F/DSSr2zMq2ynr3WGLirKZQLy6
+o00vmbi+dNWw1ikhAkBS2zFyQZtsCoXLmlDZ7A5DdHKYQDBmY2bNtI9K3h66LFDbvEG3jXAVxNRk
+NLTkL5m6eHS4Y13ewsnzchaVLsnNYwJxxQjlmPWqLdYUbawzGxPVMwGCU1tzqDPkI2RsCDsVXnhT
+rGbcJyPDYSES5LVkROIZG5sTWeszdFVkcIYCgWhNa7C+iUubZq2tC5Z5VRM+HhEOCxEIda0jV7SN
+xnuTm2KRjeOW5WaNbkKkzAsvH79MF3sEyaxKhEObB7e3xjaNWhOJ5jQnIvnrbdtyVZexeEg4Qwhi
+Wla1rBncXJ69Koci6yYtHKEGxt8B7GpQANgZW6gNom1cogQAODhlajw4JYcDTqiUhKDcoQdlvdrk
+hgo8NCVCBQ2jRmcHSklIEB/ivTuWgtE2zh8UaxuxfJRHAIhtYPSQktHBlkW2rTE4cXC0zRabpJop
+lLuuQmqnrd8wpS4RLKTxWUwAZ8RaTUfzyLFtFi0jxrfqMYPnRKqVCAie5zWMGN/eNGJcOycmDd0Y
+VQDAenSJdtgEh7bGA4U0dvCcjioFAdySAwe9Wj9ibKhoZEjroROtV5S9shb5Y8NkWIMAUUXzh8vq
+ITB6xChsHj7aaRo6sXnEsvF18aGz4lUEAcgWTCmV5rgp9kQPmcQx9UU/qwEMoCcMAGSUZJJG0aS2
+nBwGAOWudMaZJ5sdBOWd3UggZkONW1q6xiupkukrvaH58zdM1O/sTkIioaIFo2JUOLk9uzgUHbIq
+1wKAGC3WU3FD0Sw9qOHFykmT27NzLQBRsXdyo56hIuPmTVyfGFpvLYRgcye8mVkydb5MjcjkeZja
+ztHGxqykrlnbyZ/QhMz5mByzrY3NyZlsqDhXKR0IvDZ+fXxkk402NoVJSGAqNvGgUfMrxpgEEa1r
+KR7yfvhwWphXFMt6vXa0AAQu7ihutfmbtBIXkxYqnvXJyjElsdKGLNrcHFBCgFBucUFkciw2LOLp
+Dc8V57pf9LMawAB6gu4REqvJQhxpCocEJKBYFDmqLUOx40ZySEgIbcil9nguI9Aez3EiXk4ikuNr
+dIS1WEeaQhlWtNUCgpAlIbLGcxKRLFPfvPag7IZQ2M883oG8dhXG65NHcEc0V5DcknLaElnBNs6N
+IxCxuXGYjkS+ha/z4mDE5iBic+NELZlBX61llbIQw60F0Y5ciInG89nXbLV7ebojnu0ZL7wwMTWg
+2igsYE3SFtb+NFisYXY8gmg3FOFgoMPN9VgJdCoXYjZWgh0dORJeEpkewMD0eQC7HOgeCJEIAQLD
+/sgmWsGDtoCQtslr8KCURxClrCiyySsQghCxf7MklbSpTVrFSllVs3HYEM9JZa40PM2mvHGmB6Vs
+Z2I2ZNnAEkTDEkQpD6ncRMPCP22YyS/UrzZpz8+mK70mv7ICp5qGxKFhQRCQZklWmpiIya+jBosi
+C8VppQpBkq11anhYfGADaQC7HujutAMBpX6A0E0S/Wudp6Tzeu+b006RkAAwjudSt8yFxNExwnYO
+aqkPRq+z3evq//ITG3hpVf2U4raURiiZyQAGsMvB6LSDtHdU0s/2Mpei7il6nuolYAlyemYhzKZn
+SVvBDoqQ6Ydukv7IZAD/r9FNZD4vmM2dpZN4XRXQyUFLQJ5o1Wla6V+1DNJd80kBCQtI+VNOYrvV
+csn447HobVbrih2YwA5gV4Uo3TV1s5+brYBp6PxpXe46r0zniBPnUM/a2Lg4gfQTnicCgjEEABzb
+amtNMNnq4RYpL4puCXoNyxKojA9s4QxgF4UdHPBIiQAQp7VB73SGnw4RAERd82fyrEoXD/Yc7cuQ
+DjidwsQMpQAtHDBpEuayfyvbAAHQzNgKHP92MYgSEO0lrSbY8xQbxxuQ3wHsmiCYuKvanSATWIw2
+n7HHWkAAUCK1OBTy4iDRGrDW17RadgwEJEIpna0kLADjgCh1EoCQ6yZ/kk0EqA/dVi8IkrcLiEQd
+FOhxmapXBXotsAec+Aawq0IgUDZDoADqT3/avgtTK+KkoceldEgkCRACBoDxXPFNJhMcIOnaCwJc
+SwA8BKCQpuplrzMRWWuwLev37iPpgb3UQ0uWBAfEdQBfLti8RGtmW0h/5vorpybj+IZI3ocNgwwA
+COAJSXJKbMQFACF4cIDOqTBxchPFcpr0CWAlbWvU6+EK3CeEurewIxNgISFiUgBYxQdUVQP4soFs
+SSLu7Hw+Wy/IK6paPaQ9M07+wEdiIdpXCQuMZd+rnTwE0jRJSUnumjn7h+D0AXfbRs0e0qm0SGvC
+oYQmFCgQtl0rPYAB7CIQIp1bG9765svOg7x1M3/y8uLMzvWvkGhfrEjIJICkAFNA+tjWFU63lejO
+fuGba20FqtcgTcEgVK4W0DaM3wMYwK4HckNeWMxnu/b1IWbsoiszc+KpdSgLqGvIo84/5HosqRl0
+UuhEKTC2oGEmAmjrLaDea2Rj4cZipAbMFAfwpQQlwhnQowYFE5/5CCSmfsi0YFZE+3ZFvmqXOvXG
+6UNgAmRNkpbGSfgLZLIM7rKmVOnsb4qEPo0OLpmq9ymnQ8O1Ku44Kd27dH4IaECoB7Crg7jQFZCX
+0Ub02U4iySte+x/SYoZ5BiwAWSZYhc7Br9sCV6zxDYoNuQJytHgE9k2bQQJt07TRmgR2awo46i2/
+RASCi0QkM6ezYMpgkIiJDnBfDGAXhyRia5QQQVR8GwwQdxLjIQC5YjhMAgoDAEnUH+go1Cu9Py3W
+/u4Wktu14p/WPZObbbAWJun+lRBXsQ0H0lXZQvY1h10daJ+TOSDAA9ilIWZ80r+ORNWQ/oyn0H72
+RGZIngCiwARRTdVEPf3kSCRJvkgCJQAUOOVg5y+IqTNHn/4uNa+mdItl6W7VIT3tMRzPIsrWdTI7
+k2S87czJGtxUV/b+sZEB+R3ALg2JdroP6LY2Lf4Q9ZmCbLEpLNMCHUPYA9nhzVGFND8/gNhztFjy
+PW49UQRhMgKAhH3jS98WUwEgtjpVb6JWyVLc2Qiy6PookRD3WNQq7Uk8rqMSTBljidCMdbo8EhvX
+NMB9MYBdG+R+kiBAiAQw2hUQ07ZYMu1MmV7CsDKsOyp5eKZVYAKT793LREJCXkZJBjpaO1wSIqih
+3CZZTgUIArHa0+Irl4SkDYDNzmrXvnGGUEUQNaMdTm4nqY4IhbI42SAhUe1BJ/0DJaQQgAqkzZSJ
+82pGf7jn+sLPY0ttAAPYGVA4YJiNeIaEXBjhVSMzP+OFsCIDsOZ3hvCrxziuEDg36pFWrmR4CSXk
+DZ7S2ODZANotAeKoto9zZjoBlwDVFgsmACCUJQDFMybFM6o3HVC+PsQEiFM9qLQhuHGCT6gFHW/O
+cjpSU2MhdmZs3NTdxJnZSyjtctpJmzPo1ft/o4e4A7PnAezyaK/KyduUWVIZzWktlWpnMNQGVfoZ
+75wYiLPZO3gVH1njlHYAqiVzEGuybr0mEGfOXFFOhGBmRisBYG9tXDUV+qvegPVCgMT9jCScn0i0
+WhyyXkhIKK6HrW5KBPyADFHpKJx84j9ak1NrIcbYDjco3VYIREaJ0iqtvbq19rAL9lxf5QyYdAxg
+F4eYCi+/o70uo66ksqjBDSYqQ+uaODf7sx2BDZRbTlDSWOblKQHUiH08iFP7RpxAtkhVaBLWOgoA
+UGZ0nc0N+GZagVBmiwHHk7XfvJibmzOWrHQAEnKactgrzBEBiepIRPc/6JGaI+9SPjklsUzx1oru
+bocpqqWaigI2LT6Zak6sHbUhvvmz9qYcwAB2FpQYvL4qkoHIoNBg47blxpV4w3IztupJu3MwohqG
+ttbmS3VxVvl4QELKt+QIuJZE142btd4LBHUk7rM667zdJej4UUpEFCftsARiAnVtntUVWVoA1dGq
+hzWUroalXAZE7fHDx+XD02dtyrb+nZN5NXRPoimG0pTWXiJZNCdrcFPd+hYn8UU/ngEM4FNB3FAw
+pKl9pHbcjITT1FxsdH5VIJe3Yskvfc6v6VOudzs2ZItXYnCDHVrWMMcFKCYBIjEmzoDoyJqRxZmx
+SHMHfF7W5ZkGte3I5qTjUTLoFwG2xEsgYqFyhOCOzE40CMbUbk7sFidIePGaaR0j48ffziQg5slY
+CcM9vIQVZWcBaRtFFJ390Sfs6kD7PrGBBfAAdm2IHme9wmIrcDgzWjgkDjgTt85Eo3oFtxSQ16nE
+lR7XJf2aBgygR9jMRhR6JhQlULxtowfo5gQrkASq2oY3VQprEYKKKtMRpjbW0ZAAQEZEUVyUVUKU
+OKK5WrMLJQBxVqTeGIth+WsFgETdl07/jtn8gYKARI+nlTDcc3uM2XNh0qg7SPShA/ZXA/hygKwe
+0eUHr7w+qVL9i8m/QhDdXNdzHkrg0qxOn4O22m7XyaZda68iA9gsXpBD7+9jYAScV1NLxkRFh2JC
+AlUXyga0GLGAdQKukHWItEdCiWg2a48DIhDS74zLcdnLzlRiCZ5nlBgQjAIkFB20bNEei56tKmZL
+8L7mvqgNk59nF5QyQun6KyGJJGs9YP88gF0c4kxyto1lOG2GCRqEWgOgS5UryhuS3d65zZqHGtPl
+Li9eaU570j+AvFzrGYCYpjXZEYo2NB8lYFhilzlY3jY5ruANGb2GlZiKyOS4BGMJoxHqCNbHJ8UJ
+ppEAUEeOgDhQ0YJAjpupqlqnuOIMlrgbjcaby8wYFyZXMl5csDw8aFPrlLiSRVYpJjHVzVPjac1i
+thbG63JeInS5+Q+I7wB2aRAHAy16O19UItE51eQbOBp/XDWuZLVFgwKwcrgDWUyQ1DQ8JFntESu+
+4bKmzBaj2BPoXARcbgmRUJwIDFLx9rAQoNoWxgmQaFhITIZoIBzQ9SEhEp/UucBXeIlpV+IEmDrC
+IoEy47FIQGdYTURiEYivLRAvGhKC2UhGSCAd4W4z6JTZ1hf9JAYwgO2HQFjrTjPhT7Wd7JpaK0kq
+bIW8jZogMC3jYQ2v0EA4Xps5WTNB9O6aCSC7MsHkTNIazGTXkcBsHp6yf5bhVOsH2SMAPElcglAC
+CkJ2orgEURAAWiaIS6kq6tQsX0NEyE4Ql+AlFKANaCq7BALYCVhgvLgkSkEIBDteutllGAKDghjY
+LBrAlxeO2KBnlVVJG+EtJCPtEWC6gpY4tfucYrWY1x+JhmAaZp1iA/MXHfxJSx4A0Xt4G8cDFF8t
+JGqKrpecDEqsB2CqmijlecCIUTLmiT8QC5Eo3yMhTpS07QSS13zXhlRcFPLpq/xrIC1EYMBLLl2J
+Afj3pfjw/JQAALYAtE5esFumBxjAAHZpmMqM4g2FufTexPyEsSHp23JQyLbnxynQnJlmrZRXAOC5
+IUe+nQFQRp68ZM/Iiy30I/rGIjVFGVbHAEC82tVaj/fdCYyKptx4AVIQErLGWiMqyZLhR8RWgJCX
+CGoQJHVNjEKK1A4kxIkwJwk0SSc8HWRRqS+MP13w95Z9np40J/6MHlFcNAbYJwfwZYRO1BaU8cqx
+qjWe0VKwLG/YFgYi8/jwY+W/rad1OeZQNOpmvMR7fEKAqNbGf0z6GnuxFOWNK+vHhuIaAEgaHWM3
+chYBMEkp4kBhe7s/sbUFE2hNvUl5BWr2/FApxJnfeC7hCjsmGVrF1DZQ9vDOIIGyCTmFNkkVvVln
+xNvyt0FvTAR6uzf/c7CnJoAGdFgD2GWRmii7w+vXFmYua8lvbxteXb65rKAvAyyCqFPvDsQrz+6a
+YAtFmtRDRSclaauGVY7bj71AapWqPBWpGlQ7AgCoI2pYexz3gsngXkJsBqk8G1UEiNNQXlra6ir/
+CtqcQU3+pFd0lrQhaFuL/C0pSmweFC0rDLEvpLpRhpYVe75nfkPu0EBhxapi2YoAk00owavdHRks
+EAwlVdPMfiXJhkS6uQxbJjFdvLVC6awBnqh+W0d7glTelkEGVkz6ScCfkgBsO0+y1aqPoIyepHNr
+ikeiyes3tk3xfE1mWqdIeif1rAJbUHLVkn7abyUgnlZ+MB/dlUWfBkWeULdIVpYp9QDYdl3yBErD
+I935O5XELyE9bVc1APGU7rszlU52Y9fjTj9iS2KYUz3Q/ZUBK7jdOktv7xDRtVniWzERB7M/PH5R
+aWMkt7GczfDBQelz2FE2cP5toXPTmJjJFgx5vnS/5KgZLA8f0ZCbyl4CTeWxnNq6hKMBMc0tKitq
+EVTii4YQ6xKyvuGxQJdtGDopGZ6IJD56fPGm1S0KEB25UWWEjGmzfu/ozYGK5tbascmwRJ5M2jSu
+JdcVEhUxeQ1u3ZzGtpytmG97hYM8QHVrYzBHqLXDn9FLZgao0SMB2eZgN5HMDgFNKZ9pVUBeU9rF
+At3tcGegCgjc6PdkZgakyWaHGm2hgjR2fltVuEMAZGSCmzjZiEgHyIjt9mlS+Qrt0c7DQC7Q7ubH
+2vqpqk4egLR65RsA1NrNCEjlK6QKDGd1diHla3Qkt9vzHNhGAIHcSIefSWc/gzKivUcUyjPovDuZ
+A+KtAIBQtlCyPMrXSLSoAtvk/06mQCgbaHYBZIWF2jprmxvwqwGY/HgryMDrvqrKN35LArmdpQEw
++UDq4WeHgM3hzOZEZ45o6TLFzYzx8NTzAuUZvxLbg0DKhU63MoEIZEdwzujasbrEi4zIWVlX1If0
+EgDlmvMU23SajuB75sgaBS2ABBacHDQUSNLDOvWLjtAv7ZlHT28OSaAqcCRe3jMPzzcOFRhffEuN
+9VoTBAioo3Rd1VgxQgJQx+RjY1LZZPxY1mHKYlaD/G+EoIlWJ5wNY31yLN1c0O4FWiOOElA8FPVM
+a+XQRVvtAXuw0/0LxWrJf7U9Zn9WAJjeeEXZcwYLQaQmEU2n83hqoeKzhiTH9447Okp/0DUe0q2N
+Q3/QL6OaUPudUeScEwIgmPsiQmfnPr74p/k3tkn4nJzUIiO6aH8HQm++hNwfh4XAatljhxyKWGWw
+VKfn1XpPhL56aKcGb+0Dxh49+p5Zx2/NSnYbq1pxHwEInZeVLOGeGhLyjt83nZOo/Z42mnOMHyD5
+g8ehfjRICEDsL410wKFCgKh/bEDRucRq9cOHH8rq3irCWaWpOvNHe2T2KtneW6t4v8M7i6G/lWs7
+7SQhsFryuPZ2O04IgHtvHU04ueOWwh8Jxe9toGkn+dVY+DjJ90eIqBc+0va4fTk59Xt4NfLPJ0Co
+9u6pJ5FXgSHd1ln2/irsfqyA1v1L89RvpJ5F/V1KhvzQf5WenUdy4SfPnD7BL+jh1YpPGZdqin53
+tnNd+CcZfm7uvfXqeyO2y05IaNX6IBOEbEaG9ZeCnDk7Nmwki51CHu8piS2t+jSTcFoYE8589jsH
+VTWF0EoCcMypbgx6ppkEEKfljX35zSFE7+Rlim57dU95rWS4en2YdmEgJHqoFq85ARICeXkqUZ+h
+OgJCQl7WoCXTpDYesASyoUv+6irhwfWsBNCReH1paIHXmsFCgKW2tqIqtXDYSBcAE0R0fKsRuk1d
+Tm7Pc813A1nHJl/p/zyOnOt8RrvawnHpyf76OnDTzNTRWZUFf03j4fpW7TGH7Jw0dOLJ54HTvur/
+vvItDD8y8NPlz2RdPB+4e0QqzU/uLR8M4P7XMflI/8wzr3/rIMDtMYtf9hzwk4M6D4f8EBi66vXf
+HthPVd1wmgD4+jGp49+9DiD04LD0NGueAY5IVuHR15H970IAQOVTFt9Jnj53GfY5GMCi139yEHDz
+68Dv903dfv0V7+/eq9zmF1qAE7raJWeuBXb3j+95HbjI/1n5GGPCQWUvffMgoPYJm0qBV1+Hvn8U
+gHmvAyd2ZnPBYr8awN9fn3Qw4PUI5Rz5RhMOOghA6ZlARudtN7wO3Jk8Wvhn4Lh/xk/O8g8fex04
+tzPhg1e8OOF156+Dk4fXvK7uH4HtQ/vCHLZifGY4EIgIceW5BEoAFOt7/4iS/6WrdGxG1eP/hiix
+wzxwZu7lEAJ4lNVAomTeT0E3AmacS27JustAdxNMsQsYkKBIi9ucIAiJipXu1jxm8PjMlc0BgehY
++7QPsoLwGTPid7OhDqfJi2cJsW6M1g3SwWjZzJgSqHhrbaAlFsjNt4CEWwpNYnDhR6Gtap1Mr1iF
+MvG7j9A8EQYg8Q+1PT/H1YK6b79NP7mBUmM/k6O0jSVEQQFsjr+r6b+nxPzgFZ7zfhtOs7Y/VsCs
+/ksB92RrNTxnwceOnaob1u0W4jPmh+JvftczgHih5+44Ii8B0CKF6Z6nFVh9qN74kUIymEZC+as7
+tYAMjXclVbGR05bTo4kzD3T7aapQMG6dluDVbBUAWD37TQ33l8MSnR3BVi1EKD7dtY6IqEUK47MT
+itiqRTbgTXbZQKixQ2GatXCeCuxtXeeMJ8PxN/ZJGABuaN6vJo31uj1ThlXLWzTxFNdf8gtTWaUy
+3gzXaqjNbyoMP9gKIRG+l8Px2d58vY+bCCy2ofgM1zoirBcojClxAXXU5dZbJK4G4IZeXe3YfVxr
+yDPvqnktuSnpdaEAiFXLmhxvumsNxhzwnqzzWBHgOeXXBxLfPsf1w/DsR0p+mXgmK6EBsDrl9qD7
+xjfiBoAXLDsvd+ZzCisKRQMiyup9h2+bAWTXu2GpKZapNwdzFeDPfDvNBgl90iQDaeENCAzlH4ue
+7vkUc9bTUTXFt/inuOcIsTkouUMU95SnviogCKjdC8IISbCwSTXHkIyeEliW2N9bz5H2EguoeFa9
+27EhzADI5je6DjijoSguELINtdyEsC2bSkKi6+NjW2xGazA3roTDHRXDiwKvReoz1FZmJEI9UojI
+JY/ad5fMcA3cwJOVlHeWaBJ969va3nbc4V1C6bHiQOeE6qx7vSsOGeKBIBJM/K5jz+PJ6QeNtRBt
+huWAcpUE3QujAR6vl7YfaOzJN5Sr208OuiBtFp4+9K8hAE2VjDnG+CxI/O/qaYoCmRlF42fkgRWg
+HSwTd9ykzgg5NjB7qUkUXcX9o8ASyS1YY9zvTLUGBIjoMay84nPEdA4D2sFSxEMzHAcAOsoZuwUA
+0Q5WIFEyzQHAygEjoWOZq946eggH5Yg9Plb3nZfrgnSo/FvhB/K6fRdFw8FqkJc73XGQnG5tjKoE
+zXYcCDraRSgEEQovuA5xnmRetfs4DpbBTwFA1jJmZADCk094SD99bWFciw6t/n4swBMdB2BF/NFB
+extlMjMKxkwfDFYQMlgNNzTLceCZC9/Wa146xhWoYPwHtTjgLr9HSY0btskkjjvWOiCIkj2OeU4/
+9IsRLqCDDd9seb7wY+YnDnGZhJwPPrY/oR6amK1Bg+LF43TNWgJURyKPabspr0ybSbIpJ9flrEwk
+V6WemMlp1qSQUplo05Grkpu6yMytJ0NQNlJQHlOACJEtnhrtiHVEY25YWYKbk3ggU5QWI5YE3384
+bsh6HgHQLdVNeeOlor2+vsQTFdm4e0aBa9S7zXkJEilsLlO0KTJs9fTtjkSm7W6/udK94IUwEGi8
+kuS6kVYLZINRyt0AgYDKmhy98nVN6s/fz3VobJZoO+v3v1p/3H2zAADlF75S8o9Q//gsidr9BYf/
+clgIqD79o0lrqKz1DpwmXHTH8fbjH9+YC3gP/zj46HBuLQv8szHgvbNnlpkQsubr7zlvvZXMo+Sb
+lw5lhVVc/YiitudGl/irSRHZ618Klw3xTL+4Z5Cl8R/a8C9SFjWQMSCcO8hLGrwLYbVX+4AieWaf
+wJTIuuAjVQFv/QeB0tK18ca/KUo8P7VwuBDnjtigFthM7xLvNyKKM+46rKXsu/eVAnjurNr/zLZp
+DjECWt+s627SpN2H9qeM8Zo21auWq7UiPBZxnHGhQaMWh8of/p4G3jqxtK0R68c8PHOPtbGmvyot
+zyfMFHdV6NnVjq14N1wyDPKntzfVn/OvIIAXTmlSHp4cnzcmF/K1v2FRSpWSc/SvZjJReWvkTqXw
+7P7BCcaeeM5ddH7JHgBWXPQGjvlXPit/xzNv6iYJXyNJgwNWty2oav72v8YBePPHq+4+StYqvvcr
+xwLAolOjp3+Lt1cBTazHb2yYXWcBsouGdLvU2Ud9m3D4A6pqqdVez2vlgzPZ195C19aqNBWwi/JB
+Wal4Y7qmfgj9QnVECgqrOpSoXBJQnKzrep6X6MgdlyCy8QwAYioikxMSOvq5mIlkt+S2h0VCiz6y
+X51oNz/ZsfveUXLK9fA4EZum1cXjEkqg2TN64Zqxe8Q+bWwRU3BmXi8HSMbZ9+GQP8ymj37xAS7/
+vVUA6wdPBXLmjRUloNkL09P/8zRPQ9SVVyHju18dSxtfe2DzmAf3trpfhIKx+fj3ga8e58y7X73Q
++nUgHP395VaxfuzHjRhzzOC6F1bPeHBaInD2PZ33LJuk8Mj30ikHxs0drpbsntJuXvUbzwCA1e8d
+5E3/IKj6Z2tbrP7Db+3p/7DJ/Kxeule8cElxyn3F6pUzU5Uqqbjsz6n7fn/eiPbkz5/e7Bmrnvsa
+cPTez350w8VWC1n91mkbMfj4Ec1zF4x4cH8vPTwmU/X0xq4aDF6RG9l9dddxeMlYzP1GC8wP92h5
++cXdnrjsQRgv+63ho1MK94yaOy5NJT7vNia17NvLsPt3SjY+98FeoTcBAM8fac27x29Oa2f+0/tL
+84yK1NHqIgv66e1QJ07Foqek6Bc/I07O6Vzz6z/iZ9cnXwUhVku/tQK5J4yLvPle/t+P4445q4ZX
+8ncPzKz68HH86JbAdhrfW/3Mix17VTZMXxbKDuimdpM+/e7U5aluC8SuubPPfKFT325/YahZAHic
+3H0hUQYgKO681esKCOpExxpIwNDmgEkVqCIEJwDoygCIoDN9H/1oWER1PBTUHLZZNgRQYtxIHWxF
+xjfYxAleqU4oEWULCg1ISCwZsbPHO4ntfjWFFO6ddN3r++ajCWN+exorElJySutDOb8c52u1puts
+5bP4eK7XVgwCgX+39x/fvu8+ANBn/G5EP4kvlBS/dOt/Vr70EnDab8a7P/+LO/ln32FFyn5j5p+f
+W38bMOGGc8LWCKZnBR0tlGgqHaqqznsS+8xUEPba1i9OBNb+8hG0jc8KBrWXcCMHpPpapg/ddEuG
+7SeiYAKNtaFfpjg+QVKa1XFRSdomRdu4zGDQ2AQ37+bEpmUHHeW68Y6DW0aGQ0Fj417bISBRcuwD
+v13//PPF/zyNFUi0PfCDG59Ydw8w9IoLCq3ptglP7cMnBwIKEMuJlt1yqX1wYdgYgQjc1uFDhQ9/
+85aXqu++G0OvuyB4Vc176mu/mbV8ZCgYMhznlnHZ7VNzAo52XbftEIKyU9++4cF584CxN15wLBwK
+BkdNocSFd/H0vQMibDs2LmoLNJ3/QTBSUhIOGY5z84xCUcBtx97x2mOPATNPPGOEpMRXFI7447RL
+OWlFRKLstPdvfnT534HCiy4a7unI+jmPr7ryoYcAHHf2UZDtdlMVkmUTBpW1ZwJks7ICvR+kqLZw
+H3oYcuPZSc+FPhKn86QDIDeW3Tmb7LymohEt9EvfqpkA8feIVPI2wy5JKkqCBMQlIZI02nVSwgAU
+CSOVUkgCSZtPAQDNn94jfY+/JKDKZz7aqEbtc3xBkidakl4bQj51T1dyq5Gk85H3XltZT0NnHzke
+Vks/DWrECt6amkjR+EJYjYa20T63LqxG05oGNXq8gtVCzCnLDajaIxfm3/ONlGHEykufpZLFJVb8
+2RlLl6kBfZLYl/vNsoxV9TlfOzP19kJEXVpzR5cKUUisXwWxRiRZX2YjrFKnfVZ+1bGoPnf3LJ9D
+GGQ12lfX8YiJDqzq/nZ1exRWQ5B2zMrvvpa1m+3wCQGwwkYzBExd5Ykk56zMBsmiVtY4oyYQXo8V
+Z+Vnhkzs5Cf1n89NKjp403V3En0wh5MxeMQaCEhEYVN5c87Q0Qq2KwSekJ07ZXiXyT3IasRW1SaG
+TQzDKnhvz8kBVq63ReOKwdvtZW710y95UaPi4dzMgGnwBhf31n+J2VTUhzGwirQMc/tIXFEQ6iNx
+R9PwXonFNC/LHEa/oC6meEpzI4Z0NUdASTpo3ztKVJoi32OQ752QljL1cIFP75M+5RfSSQ3vxwOn
+5CnhHuzyQPoxd6lZofpJfP233m+uJSWiklUSQJKCmKxiqlLE6sz76YHv2mRQOKLGqTWhhRNEpax0
+ul4vIfTL1m/3+nba5KXHw+i8nr4066pO18/O3k8KgoBSnxxP9dWvXfFlkx/ZrkcjJGB0dhMTgUV1
+ldej7PSidGrSf+Ml9OvfM6c6E3t+jGePtiYtCwGQ/CTAUz1VSN07JPWZ9ZIqolR5LGp7VU+w+um5
+mcJQIuGgabAlBbYPkaws6C2/ojtaS/sS9qr8voQ92tI7sZiW1aFhhpBSdvs9nu4xnzZkJz0Pkh4N
+iequfAoCEDcV5juVMi2zHRAjEihmUmBRSfdEElKS1A52p51NfiMIooRZE5g1oX8mz35lSIuIECkI
+iEHa938UIhaBIp102ko9VVX1NE37hpecyUBsTl5NVmYqmGJayBkIbD9+aSAk6cOhkHA6dUlnHZO6
+kc7faT99JzMlLOT7eSZdWIQFpHTPfu32KCQVybLrBAmJ8sNF+zczumLz9ayG7ztLwkJEmqz/DsYf
+oIIf2U6vUtcphc5O5ZFcJQJQYPHv6xazRzh9f4MgpFO1SV0VYZAfPm/74Ykl2E7anD4W0ER9jevk
+F9n7dB8DnvSdMwHANkQa6wUJLZyS0u6St3DvqI1FHad/dKhdzfAfSlrX9/UzvSkEfxddbd8ewDZU
+Jr3Abr+oW6LO39URKQh4gP96eoF3yzG1tJsvaKfKol+dnQlIf1mSPp5b6Dfach7oUa9eJ9B3ln1k
+Sz1upp5pevxOS60BgFVbg2QUdiZzA1UfUeksUT07k9JHm7TSde/i0mqjAeorGua2IrGoUIgQHZy3
+w1nsHHZEfuEW5d9vPAAw3mmltv7rM98ueHP7F/+fjh0Zt3cJFyWSMfmxj9/ZXywAUTqw7uxo4Apt
++3mevIUe6PVR2RW6ZCcaxHkjNlU8fKb4ofBMoOmHNbgip19Mc/oDngUI3lYDXn9W2LGXSm0qW1tW
+VlZWtrasnGzhR/e8WT9ygOI1CcX5v5COU560xhjj6MjfD1wauPdQ+1lHlPz/CRJzKeTiu2LGMcYY
+79lDXsAVZ1m1q3SmP+X54kifdmj8hQSQGn8Drhg3ZiMqkjXAmQEAEMU/bf7DxhNmfGX8ILdqwctV
+OOSavW0/7fH+r0EUH/P3ixvPvf6oKUNQs+TV1Zh11des+sxDc25fJb+4ondMfjvrnGQHyGuZHf/k
+i2vELgYCX3n0fS8uXgwAGPGjbx0Gq/tRo/a/BALs9/a799nldwIAir/7jaODrPp5qfYlxg7Lbwqi
+g0IY+awt2T7b7/+/ICHYPfaIrK+rb80uGDvSgXA/Kpn/xyCk7bg//X5D9ebNGQUjx4YAq3bRb+Hn
+XynaefnVDXEA5KnBzq7Zq58/SKAsMqcnDy3UwOR5h+HvJQYmTvQPmfX279P+P8ZOy68tGikE0R3v
+7TugwUrCZ9plCEBEA+/bTsHfsxXxCRZJD3RmOnZYflM7mJFjTwEAeF8fiFHUhS3vmA5gu7GDVkBf
+RDU/d+yY/FICvtOTBy/idmjANG6NaWMAA/j/jS/i9d8x+eXho4wHgMgbBscYiLPTE/EBDGAA24sd
+EjunvvBbogiwIdPRsEttxQ1gAP9L2BH5pfjsSARR5uD8m0bEixMDC70BDOCLwI7tH5HojfGCGY0m
+o2ZcqXh2YNk7gAF8Mdgh/yNT9zSKDsxpjHkxjg/E1h7AAADsjB/TDmPHiiSAjvzhcJd6ONcNYAD/
+syC37fN3q9ih+bNXcooZm+MIkOSiBODtQEYDGMD/Gwi57Z/zAEw7vP87/oBDAQUUOSky45IvxR77
+5wYZ6I7/OXwR8+cdWv9SorVijZiE4mtzUzwcHfGtMbX/z0AAZgL056kZ6EYK2Z1hCCRIO0FJypz+
+U1z0KK4Hi87WONC2kqvIltyNpP9b8qXDjumfKbxiKUjJ1OrK5JMimr79TLGfgtQr8SlPRkjQnehq
+G2767CEAK62T9dkid3e/1lBIpFOEKUkJ10krl6IDTTGUpZja+qjDDtVMqFtkVyL0PN7hZtGnWE8m
+uS97MfL8T2G75Vf8LmUiYTgjuy64/Wj/LIDPWObRljzvBMTdHck6b7JEX5y7ns/euPCVdcH9v9GX
+LAiJ7fehmaS7kJB0m8oJdVNUEly3Y7NM7E1MuWM1I+mlBu1xvGPDLxSsG29pHpHXZ5VIoOAlYo2x
+Cf0RKefLCbNdeicSpST16SaA490u9h+PIkPDJhAyfbPyCgngGcSD6ZExmTRsgoMmnQL4c4aQsH7v
+qpcA3PqNfwZ7vVdCkoy53J8VFLT/vCGDjIEo2zbnEtf5y4tZpB0SxVFzXRGLevjxMBmHpb302kvn
+tVdHYlM/7i5k3Wu2Ddy/aaXTb5dlGWiA4CUS14ymG9/LNtAAyPPaLp+1I3RVZPWzt7XVbY4nnj/C
+9jXMiKhrX4pUt8YKlxb8z/rOmMECQMk2Kr5VxNexdTLEpmPb+7BzoruFq6zw8sMfrKOJB5+2B7hn
+gDMSC9HKbDqt8sOCFH2ykNV47smPyjomfvX70/gLm0ML69su9kbfuexSeezU43u9uCSgR98e9ZNA
+v1aP9cq7u46KALlleefhoFsEoNvfTx4e1HwTAGC87l45EtBTrw4+PxU7eNu570RtvjEtArlzHeK3
+b0i7/usd7ci/vQwAWWP6VgwJRW6rAoChBf+zy1+YrHYjiJtu7Gpb7A5xslr7Q8nmh3WBtX1dFGK1
++YKHUHKc+85td55/baCHABPIAGh65NqNWFeQ4g8mq8t/8iwwI+ODZXdddvkXJcBk9V0XYNaTIy+y
+Aa+pNzOSCP3oXqDiJtufLLcKYx733r2LSTLOmJO5Lwzu2Nxw3UaCfOW4/DHZQiR/XPLcS06i5JTJ
+h+Q+1fTE08ad0+ObLaJ+eR2w8h/sM6CTh22kBCbJfDTivvMXIRn9yyJv8HDo+5rswlsSJMW/Hmbz
+Zu6YlYHGL7616oZ2Lh3ZdzWInL/Vv/Y3487pdw78Lw+MF00o1OdlgZQS+AJlLAPG+voOSYu/JP3k
+IygqXk2QnKy+Zu/EaDzuPfz+okw0X33DzRse1T3H39gLjdWLX9uMLrkWYr3qa2vwzd+PUyvPe/03
+9bd8LnStvRvGasXPkfHXkfWbOVZ8uKhe1/Vb92rHvin9Wj1CwQn45ssrHG/mLf7xwUDrL7Q1N01I
+BlU46KCfHPP8jEcnAjgO458CpvbIg/XiG5TD73iOACJUeczRf+Rt+sgQQkcCB9/rGu+yMwAImUOB
+4/9R5Xhnn5dMsQNtIuy1F577CNOcvmfHJIGv4ND7BVO2dfb4/xBGxeZkq5A2ofmrRXEuiwLV5ISF
+WsIBVsKk4gHFosiS5n4ydRaVWDXBUmDlqKw+Aj4B6vz38PPLYSnvz7UPPvWbP3UnbxTadCKAcNHm
+NMJLRt0Ja9QRjyiRyf/de82tU3/UXwHMtgsEujaCr+2WKL7t7sJfDus9LghWwPG8fcnrT68PIbHW
+GbECaI1rKCVgT40BlLdpNBslAKxnos7fJyaUooReATdrfA+9sGCNDbC7l7EKIKtfXnzSNhIrCgl7
+emFCeWaax4oUhK1aXkuM3T2raQeVEUIemqqBmV3BdHoW66rlsDT1f1j/rDh08P57zZg6YVRWy5L3
+6lusSbQFK6MaC1d90oJ22/5xR6NptSrRrtAU7a9BQzeP3DfPlExqcvq4aNWLD9Hgy9gq8viqDLp5
+oeLu8+fCc8+55rF1x0n6Y1U/W2Gc65ULSuT/Uug3DeqL0GmwbnwF+KYo+fbrj+0hvezpSMnBhTFv
+799IvwaJIJDRNB6C+majFIiUMWO0JZQ7WhMRkQRfev37s11HE2m9GBg6rMcUQMnewxPutGv9/R+i
+FzFnG7X4BNJaL4dCyShjjCaQ0nqVVTZzrDZa76CFLYFM1SaNaVu+rvQySO74L8JwYheBAaJkATHx
+4Vm1uUsyJyyPTwzDVLqHLq3QdTl59dUoL88aMz88uKN+Wri/JioKH9C3169wpM9rt0K+mudpQMvo
+/V9K3H23pH/ACQV3AN0tFlh/+LDx9p3GBjD81dyWunt+bb8AVm1WH1YjNBMKVon0YQ6rZOJbzw4/
+MSj9be0ioDEQ1NWXpLZ5Xc1Aub/kESjvdxm/YkWAKFoIjA3bnvI79I0nik7KEiVETDVzQ2O3vQMF
+NB+EEUUpcx7BIig7eNR2BrTvnqnIctjQhC3SowtoATB06P+u+gqKbDzhsZBWbjxevq9Zmz9nk0pu
+v7uzcjsmj2mp21c1FM7aXJwX+zxqJGr1a8C+AiICyyzQkw2me1QssdZNpLPFi8h/PIPJsCAiGjoc
+eNTtX7dkgYhIN8OE3mcFshQYO5RACqQJlLoqwiwQCMmUX5wc5H7XrhEwClBepW+UJKCbEwpYkzSA
+sOrZj340WrQAopo3AruLULf2CMmYS76XxSQQseruphHdRui+298J7a0CMFs61Ym0EIQJoTTdSa/b
+U8d9ZSsiQoIFQPGYrmp0daYVEYG2a4CZqc9kZxW39VH2Ot5i83ZZGOJ/hUMmQE6zQ4Gi9zInLK+Z
+uFm5g2tfS8xZtShj/NJEVuZ72fkxMdyohvVX6xj7LP734MLqPuwbmN6IazsGydiVI2FqPzimm3Ug
+oKC6Ly01vQmLwakgpiOXqqXLdmjXcQsQwIpBD4OSzrMWSgASZloEDA8klCgSAdgqElHEbAgQYoaI
+KEMpVSEARULCXb93sIokI5TVKPMPrPrkP7AKG0gJQaASv82+JLm1K+WViqdDPChYPyJoqmZklADi
+BebdhFFhV6dqJIAfvngL8RJF1ZUDmN4ZylBHyiDYrYvl35IGxCrfaA5ggRARgZkInNatAghDgUnR
+EmBCJqcMyiwpYU1iDQGsRFTjGmC6vz7urCJbTYLOLvWbwMkNSyWAH6ESVnTS1DN5H0N/6VbShjO8
+9g6QiwxVVODkhAIz3Ow8ZWlWayhHjy9yZnNI54Z1lpoS2y3bdfpFgMnmrXzXUt3KUX3onwkfAcih
+ZGiZERC8d0x3RSj1CllBiWoIwilbj0xo992Z/fYpFRCTBjybbhviG0oCCXE0mAggrbEIOECnIooj
+GUPUM4o3dEw20hlTlNIX736YvM627WCnoqSggbBBfMNSutKZvATY3J7FBPLME4t+Ncxqf4xZ5arA
+RHYAQIGJBJReM6LA8m+2Yn8VSGYsIIYGXDZ6CwY1sqGePExJGUuKVG6AYJofnpSEtQESCBhYLUKE
+VPOF/ZiRndn6cZWT59o2ALtJZ2BgBUDDMwYVDeOyhFg21CmempRCgQY8q42C1UjrUkiaPRqBRSu4
+rP3A38mmWU85gJX+jKL5ecBQPJ4pgqDrBkR5WZwwAVeJALk2MsEgEST2stgqoUxYEeF+8XF0xjcS
+eFSmG+h1SdEKMApTdq1ZECylrYykgqYEOkMPiwpDYSWk354FWY23Hv1go52896mzklvLvqHku4+/
+vUaNmXP6Pgyg6WOnvgKIvOYhuFdQWGP5Cysbi+ccV9J0130bzJwnBq1Y0lzX1DDoj1rok/ZQUHsJ
+Lz6ziKl5XigUcKOYE9xhASYqLmogrCYQyKoPnz9/5M8U1zdkAgIV+13ehf7wS8BicOkI3fTEvNrw
+sK/tyyCwWj+vua5pc9Z1YSGuevL3dcaLvJ7QovfMTLZ/wX/fXGFHzvn2EdLbdkwEy6C9orFdcXVW
+x5UXmEhEEBLR7U89vagme/ZhpxVYLRDQkmUtdU2bi/6s2554a3PmkKMPlqRhn7BGzVsfVPHY4/eu
+36B4CgQCshobn19SmzP9a+Ps/XcudEY/Ns0KloEzJ5JK3rbgiXdWRIbsccw3tVXo+MgEg3DduLOX
+YbWmLCuoE5GCGcIaKx97Y0ls+G4nHQ8/fvp7j7y3sTl//x8V/fi4K7Zty2yXgVEZYQMAFlrgkxYn
+hUXBt6jTXRFZxbGh/omjFywE4PW1MUDR9ZCMrNRhSDMathq8jxwAcJNH4kCwfmtCv80QYr3iwpcx
+e+/Kd9+9/WdXM1Liu+CKZzF0//oPP7n3iiuY9Y1/AABccw2QszbkmeWXPykA7vnt9x8oOzhr6Qcv
+nHH8GgDYW7lm3d4WGsLAa4e4wVt+p9mIl7c6tONacxsqXglsEi0A0RXm0jch1Fw7ikGeeXTFbwd5
+xh8NaT4wLu+mX0ehLa792fUMiJz2HgCMv8mqxsMXAOThT38CgJUTrYbVa3/7kBTu1fb2or+ed0uf
+Yafng1A6uGucWwzFJaP9gNSsH/t5Wc7s8YueeebW245mJUKR48oA4FC6+5etMB6u/9EdCklZX3Xr
+A60gwbUX7JUgMwVEQlbXXPXPCABccc477+++3wer/3G9COYDJSOFhIT14t89jvzZesEDD9x29/RE
+4IGzQQrCKKrQ8L77iRbj8Qn/9Zzqq/8WzdzPe2fZv06+LwRRFRf/Rx10VLDi8cfD0a986da/Q/J5
+25mbRa+Pm/5rYVDCjT1zE2yOAqazQgFtUdeR9ek1JMkrqifERPwRZjMEm/stYidZPe/Ymmu/Nxh4
+6ozmP/A1VpGQWPP389vz/ny6g9e/U3fl6NMsFRwSXrMGgb3CcHcv9MxTZzTn3XBM6PnzKq8et2DW
+IYJh2L1weYf2DiahxKEt8z2AJk+cDi25ec3kYvQJRTs+ZSCRCW8DjS15rKx6++XvlxZClN24l4io
+jqsKfpJSeauO9cDE7//9lLNn0q2/tX8+/KtWaTsNK9qMe7BxdaTw4MwPGxDeV4nyxo4UJdY8f2aN
+84dzsrDwpLI7hl7aS7EgCstB2K3TTNlgPhRG5zFBwPr6X4x9/pAQor++Zf2JLx5stVBszpDl7do7
+5MJbTjh/t8B9l9i/HPptq0Ai6q7LG/VFp46XD668NU9x4RhffBeetJ6uPrXgox+vuz775SMueBfD
+CJpWANOCTCSs7/1Z6+irv56Bttsuf+8rc6dI+JC6ZRbInnhUkFVi1HyLRMa4k8X54LS1uPTiIqz5
+5pKHi271TPlXVn//T8UAVh+/Uu32ZVsAm3UNDosSpNQHWxEUr1+9BL2S3rNxak30iHKPtsTWMmI9
+Z4VCW1LZSpUQxL3+2hUUavteTSA+mCHHn3uNc/2pU6yGWPPXH6LkyX3AcsjFv6I/nBSWiy+iC9Zg
+wtwAADYvfyvhPHQUcPK8G3VggpyROOZwPCwPnUp2mmiZ/LLcfkEgceadDmD4okMObpl5097hnbBv
+E2AsBHX1uSKEK8K/lqHhqEG5gKx5cN0fC/3hF6wrKqAeijx+AoAL766g574iJPoeefFostOFZPgr
+wF4NmD031XprnjsxkfnA18E86w8nqxu+P6inXYqoxjJ4ePvIpIGPgD4C+0tXsuqtX+lYdsgi/OfX
+lsR//RaJksL/yMtHsty/4R+nA/jJXSvUs9/yh+qf3IEJ/9wLwFf2Ofwjw6OKhMjq1UfV4IaLgMN+
+/QPjjMFxi6afKaRa1gEzhLVYc+MlOPCRUohkX9b055rvvRU+/fT4ic8b728nKCEJPHrrRXLqFaMc
+fHRUs7nrh2Aef8vB6u6zJ7s/Xv2V+8EiMuGaE4OTvmTLXygbb4t5kWjcc+OJeCIR9+Kfhpg1uv9g
+TO/AXoKETfcZJQISW7X7EhwDQSUpERHUrYOgw+2nuZBY9dwyJ3FtFYnYoxV774kIsXn6bIUb90kI
+iT0yIKsWEYvIR8DogCdiqf7HCTrmqAS7dneh5a/ie+9cRvAoE6ymACSWjsly0eZ4Aghn8fAXDwmL
+7HhgWwKNglB7DYHVa2/8cCwGlwBYD7Bqv7r47JQVuciaiEbzf05wLYvKE9lMJBCPsiCYCpBYqdoA
+7CaeiIiQ1R+e4uLyryeYyB5YyJvfpp6RnkXKK8FY/9LcV1555ZVXXpk795WWlPpKgNvZVP5RoFw6
+grGsQomQWMqB0IZ/nO5ZFikANxJBWJ9/hy56ei/XiiSyrwZhtjCE4mfXqOnnetazM0GN/5HD37w9
+GySbyhWmAcTmr5fQyMdKXQFZe2EWzXsUnhc8DoSEckHE5Mhp/xqvec0JzTjnhy6T4j3Gsvsivf0S
+nWRjpLTiqVQw5stmCqKUPLfCe3JdZtQznhbRcUerT0G/Bk7ue7fN5W6TGAHidisZkZZjJyWwMEYC
+svTaZiXwtnbTNoPwPhmMyRMCZRiLNgCsGs725NDvugZQqigPWCMitHljchNU6B9lATmdlSIVAVE1
+uWSFIAthh44gAoiHDhMs6tAiAvX7tnsGJ2SnYtAQRoIVyiHEV2T+XCSvAITVRKz+vvGyvOTSVICl
+0PyD412jQZFWIAe+Rn8hvPyxpABBWb3BjFT/U/THLZhyoWcIpHIHA2t6PjcRrGCN7Adee2Xu3Llz
+5859+fU/QbGaAiKIji9Uya0lLgRsRPwd6oUwfNLpntZArBnIgYD1X2937HUTE0YBmvMBTIOA1auv
+B/jbQWjSHRDUkgsWYqwQDk4CWf3JeSSXFbsOAKUGTRH6BymSWRB8IApg1fLHQTezJzi3SpX+1ioC
+KDQcWC1zIYt1iNgTCsv4jC9bDHoDqxsXBGRDGY1fM7o63NES3vNTX6LPfn6hCODOF8QKYLb6USSb
+eetX1JrHv5tQ7Hh/BgQhZ2s3bTNkn1uj2b8LslGIJLQtJhCrq6sd9wJSCvD3GlsIQhvqSWZCAQpP
+kpuzGykBqgDJFhJFQrQQGFnABCIbnLWSNmycxMrqt/95wlHeTnqhkwzObSGUiTXPv/fz4VbM8AVA
+rWuk9Q9Dz0xZjBBoHryMS1iRCGqrFY+BEAi0EBg6xE+0DKDUXpBn7loUSJwdsgoAwQLNPe2hCFgI
+ZYec0nVqDZRXMtb/TgX3XBOfca5V5KAWCOcREQi0AOxcwiABbd5IMhoQtfFn2p1+inVAEFFLfONm
+iDwOVvsKRKQKCtlCQgTBAqBwDBHcC+MY/C3W/la1yYQsqS+2NL60Gh+Tgoi+puIfBR7pR+YG498r
+sP4+rwe0UA3pO3Dm1ICGOFNO778ti88JChIa5A13144Jl49c1B4qH5Hfb+PWDsJR6du7VoDgVjXJ
+ouwR1zJ+NT9gAvKLeaNZISvQT/aTpPCduXfNP0kbt778FRAmCLFee59yRx2c9IxriyuVIRCs8JQz
+CSCo9k0iI4oJUPQebMZepIgAlVgBTAUTICJ7wokvEwjcn2X8SXa6ulRcDMJa0t4VORcLQSZA0LiZ
+1L01l2d3+klrdxV4xmQogciqhMFkASCKlwGTHCZfGr3iMX59WDfeRG7uMcmWdnQondFL5+hbW01i
+1/qI27dAGFriaxPpLw889PEIo2JVqz4EigcJAaJkBey4OaQFgrVtBpNFmG5pNjjN940mwQJw/jhS
+ULQeXvZIUgR6H4z9yY/RSkuA8TnM6vl3HRyUl/r82RjQUS3g/CnA6noSVitu3v8Uq1T8j3CDJybT
+JdqUzpRJAtwxZ/cf3raIBs///s6Ye34hMCAZNfMDPW49jS3+qHREdTxfdWMs+ry/SISg9ufQPliA
+rMDWZu0EZX+Zc+Gm/c6Y3v6fT37J12tbYvrJhVBIvMMO8156e97CGoC8kpFETE9HDNfs59dLtbUB
+Y4iAZbCjhxEBYgyQGxZiVH2k7LFjfCMitakG2A3+iIdZYHx8orC+/6Pfjvd21nSAOLtwLbBOzOPz
+fjPYM0yjIairG9R47ejTOn2oRVVXAPuBDQAsgZs5nggQVbcR2E1ESBQWA0NL2LeTMq9WKG4/1lc0
+UnwjMKbnIkp0ezkEs0n5r78EeA2AWWAFiJKMU1A99/35SzoAxdO1VYCozWXAPo5VBJGl8JzJgG56
+hBLBI5JmYpqWA0OGCEHgAJm5AqbEq+TNPIA1AaI71gOzRQh/g8L+wtrv40g9wBawZsarumn5gUz4
+eeImbUV9tBgcP83X45G3ChhNJ99U48BduhTm0OtnWP1lC6Jp2DlMx6YjkKeD9hiiPduV3/gU9OdN
+KymFoQ7EOjXOlkkKw1utgpCy5+x+y9N3A/nX/fwsEMZK/3h1C4mYTXc9tgbY/ZgRd1djTJGQolch
+GJbjK9Yke6ydtqcooXnAqBwmgEMz1qNFxCpze7MUXCOiADCtadV2qv+BVDSpuB4fE6jh0lGX8E73
+M1ka8yFQHzNX5F8gSoBREOVtnHFnw3WZXmprR2R9o+POTBpazYcMGS4KECmr0dY3ZVKNG4EZ2iap
+kuZC8dC8pAoxeziPOLKn85RIRRk4aW0FQFRDGYAZkCSZypt3v9CCrP2mx+9QPDO5/N1YYbyZPu0e
+zYcUjibQJ1XaDp/sD4KiWtYDM5VVxHqPl9ERF1c5jywluiHpeiE16xRPhQ00vI+Es2en7VdDORDM
+JyLsDZ1YeKANPvXcj+dY7arXYLzSgpQ29GApOsUOe+a7awAKsPvyoud2t/rLJb4wICOi4YVhocGU
+C+ZQaVeC6phKET2m2d0IfVYfKqKC3EaSjtRxRLQtcbZq1UBCyu75YN3qpuJJeVIOi/12gvgwDUIi
+6r7f1GD0T08YAdwHTNAJMrwGhJuP6ZYSFFkLTBc2AORXcyOrn/66xlO3S85/xlotBAGWwRaN9itG
+PHh0PdY25dGVm/+atfO71QKMh6DWfX7Z74s8IyTDjKdRG7lx4nc45QwtgmVgPQlEgIqvBcZmWAUR
+LBfOmEBJ+2htZ4kIMWui1VC47MfdSlI9C16V0GmOQiJltWR9ZTaxavrlfYKvnH14Nl6/A5gGCyOC
+5QCmAARouwoYVciQj6Hs9CAn9eQV5dpOF4FoOfcflW0P/CKIeZeJ3HuY35lCK+OkpwCyoU5x7ogk
+z6bQKlfboUOEFGZoDwvIRC4u/D2TEK2C8X54Vfdum/Ph31+Y1xgHmdpz3v0ifMZ3CgbwNy04SRNs
+ATOio/NdopHrrPaflyibJr6fGUSN30DS7H/LBa3QdrxY4xOqbfkuYtKuKikBYO1q2Oy9+2krQFj/
+9FbgrGuKYPFhFcnuEgCaomCM6BziBaLI6g11wGyf95SiniS+9Z3SxS9ir5v39skEiGgRMKokqUli
+2vMjvWn1nh/ddfTxduenOf4GEppXXF1wnighouLiakLDvc13hjuHXwItgB062p8zV25K2hcTsCg5
+FItghXXsNACxr2U8qWwrBCMkZbMhENXj+ZNgMQiDRqVU3IJlUDZvHCkQq4rjFiDnph8ALl6Blzke
+waTGy8sbR/5Uen1y6l4JwgRJ2UEvZ4OpAIFVnMX+8v2J6x7DuOtO8OkcSLAIkj+OiOpAyC5M9qrg
+XRh7aMAq0IjxK/Gx6/x5/V+KrRaFZghGSqozBKwXlh2ff9FFjYvffvE9V32yYM9+9Hn5XGD8hiS9
+NgECbFi3dK7F3OxgJMq+vS+FOqnNxDWf1bza6t1e1lwhIgQRqQCwOwgQ9nlK+y6VRCEeBIuQ6JW1
+JIcM75/lL1n9p1sd96c3w9Vs1lrHnYrF73wnROBARiqRKN8LbXVU2ykgAqu204fc+reX/wV85Tun
+OsnBVZRdBEwwPveGCOZA2yV7XeJc1098t6MgwO8WXpPvGQFJUWG14MkNU07qHH4hipcAwwp9Ddra
+Vsed7tv300JgbKYvGovg5o0loY1zjyVLGozsbi3taf0MWgCFsdnc+RotgLKlQ4UEiJ28IKAfOsaK
+IrMUGDQKT8W+LUSLgcFDfX+oslrHnZaipy6gJG8TFsHL8o2b+Ud1zz733yeBvb71vUKbcomiBcDI
+EiEREIY5STclxXNh9XcEIJsxZSXK6vm6Pc6wyrcOFuR21ltBuT9Y1phhTcHBB//m5ksglV86Jh7l
+8xgkfTNFREACrTSYmZmMiM0+6rDDDz/8sKPyvJTfDex3RyU+m51uAh0KRrn/liiUwwsdQIoIWmm9
+xdecacmRM34RJ6U16PWYwVn9pHizas3vtDv1T9Y6StE8eNljcc15tRl5IGsBEIFYvXlCOTGwFHbI
+SCII0xObTj/msXWLVjS99H3HakkSptdWA7slhZWIZgQ8rHz+nYum9outJ0lpBoNeGHGOv5hmZzAE
+H9T+LsCdSwlRDRXATDBBBEthnYkggqiWjSlXH6IFQOlQIVmjDhZPFUPBS7WUlp80Dz13KHR8HQS7
+dTr/KloKwjSHQVbd904w8ZNjEspAd6wEJoQ2f/t3YN22AZjhcGpGT1NAJEMhSH7qfAkvGSEEVp/M
+/foxd65auqT+/YsLbWr41+4GYLYw0VAIMv3biOnDj7V31P6iiFjmwHSs+F3HTQ4IsDKYCC4IRCCR
+qm++EV0erFEabF258ADWeZ/D9mj/QkFcEhekQUJEOulBK1mFhYWFRUEm4iz97vxP5r9D2SmlMKn4
+4pb+si7uCS0HjGcsIRIRKHoffOBIJmF67JtnLKbU2sj/B/+jAxHI2S+tvv5BshBy/wH3gKOkXyoo
+Qo9HNb4XFC2M+IuQsaWYP3SYHAJjKwQkQhaRM5+E+Ju7owqYBCSvEAPFMyblgZk56dUqaxs0poH8
+N13J2FLGsz8eehmr/nhxiEqKQQoX+rYaJDIepGjv47mzK0SkrNpgZrL75oMHjwRBRDZuUpgGiEDH
+q4GRAQa9w3sScBgIG/2WsuDcx7vpIgQijKoyCKYi5Y1PTeUQzBSBKO9BcsNnsAYY89YYzJKN8cOE
+pbJcY4bvjY/5sPljQUR7QVAPIhFiii4DpgYZEJkLAHlTpxURs3DysaN2NWEqhGT8GEa9T/sjTDex
+ZF8vQhCFOWBced+p+1klRESHiqAMIBESqy5+TNYkYo0iIGWYi6lwxhdA2bJzUMp7y62aZ7yIsmTB
+UZPwCAR97Kknn3zasf7Ct6W6pqamujnpGkYca+UPGz8r+YUNXSD0RgcJEcuaBYRzFRPTk9987B9H
+biL23xFmMgAcMLMAUJE1KojFInD1I5+owE165/dT/Q6S+cTYzYOIp+9f7WCM3rRxWja+q4FHlWWI
+q/Ul624f6QHeMmAaeQwQVcl9/12zbn1FU7unHMUgCDNWC2dP4NTMgHMmQq2q+FOO9ItTJkleAbQd
+k7TVEGAsIHKZw6kQKsIWKwWYLgJhYCUwKt9C2MpaF4EpDIIgGgVKLMN9vGQ3MXJitsWjSizEg7n6
+zV/skbYwERIWi42tyjPTfQoLFovaTcSYKcys6jcIl44EwSP6IxSm2PnYnT1ZkyDMEIYwaAUwrJSh
+ZJ9JHl4lYcAjddl6B7uxBYSq8MKdq9at39jY5iqjBUTCnpS1Ek0XJpt1kqjVm8QDrOfc/5jiuyex
+FhDRlCxW7+b/kYkIouSoUg+PEyzEs869/z75kLfgzSMLwFJisXyt8EsXi14RZ1W1ZURXra4vS5S1
+rZxX7kYJ8IqKo4kYVbRqANCO4ziB5KqfbObJ+0jRZ6ep03zGbCm/S7PrQl2TkKOOtVpA/1HBQPUr
+xCCBUtqRDSCsJkdrBYJklIgbOlaAwPKfK/7z7rafYrEKBUVjmdGkAi+dD6DQvBz/Fty9znKdB14L
+KFJO/Kf3nHUeO1ov2qRQQgFNEFuKqm9MnzZt4qhxs7/++5VaBKQD9DKkuEiblK+I7AODI77TD8or
+/8moESBcksNJjn0aCS0HHJ2anBNIB+hF2GCRckhps2K1whgyinRAvQTOG6QNiCQzQ6FGa/PI6osz
+WfOoS63zwkOOJmXUNVccc3W6hywJaRWgZ6AQzlKOIiGtHHrBU4w8FdBaAqRUfa0iMvqXL2gPI8wj
++jAdVi9AqFgFSGmnYhFhlNaKOOO3YuY9YhSRUb++mQRQAQJxKSLnzZg2bfKosTOO/OWHikRIB9TL
+kECxCpCSX4zgyJXKIdLOsxeD//JdTwkBJIOmQeOKYaIEIMV5f2TnkxuNJmXM3T/a404sgP5LNEBE
+Rv1hdeFlXzbtM2Dg5cdU9uasIWtL1mZ5TcN1XsKCvAkhV4te20sIhLRn9gx+wp/dSoE46++Hbr5q
+xDcB/PVBGX23EhKgmNnDIJ9q4ZoVDq18DxZn3Z/v0PlzmFif/kt91eFQ3rMX1eK35/cfPbqc8q+4
+uX7SwarqnmtOHHqb88rV10/5Fmu+rvwF99uXf72o9dXrlvzkRk8/+5jzWlThtoV5dPVwL3jmY9aL
+A0Br7fKnrr30cqtbrojUPA8qP374sd9MqTlnE4J/VNw/VuUCmQhvwumprWSSkcricp0aVARtV7bV
+PQckTp2cd+M7/wy82abwREfo2JN+1dj0DKjhW2MO/j4rz/nqEufj5w965Yezz2ESZX+++u/44Zrv
+Dul4+6Z3vvUXk+6+L4hfVWZq5sKjthNm6sLfZ8uflpjGV2AJ39s9EP7t0MJv3qbbz7l9tJ1/1YtX
+Pz7fueGpV389/Bebm56FyFkzM25Yflfg/QbCqydlHvQDst+efx3O804Kxt689q2SzdA3L8q+YHdr
+Tr+p2SYAoK1+9UvXn3VzkLw/bog8A0qcPj37D/m26D/H1f4tccFEWvHPOzH2lmOs9nvUmikfubPO
+Tu1kK/7esuvx88rvj45/cNuLh/4rz24ku/CEP0028RW3/T33gTH95nL6uYFuWFc9KVo+cp07tOit
+mdmrdSl40Iiq0NEjXDjVT3pcurF58Ninsli1fW1TVUDIxoxbKv0ShQGwhYmMH/aMTiVk9QenrcXx
+B2Puc5jz4ARWQkwbj12KU+43RAIaVZ5+wz0/8oxI4ttPh6eM04uWYfDVZ/ZfACQR9c9Lq4BBphLn
+31yxZy0w+5EJrFh1/OauKBCMo+RPZ4g1R8ztvGfdaHrjpqcRJAjEY2iLv5yF1w9NXb/hYn8Lg9X6
+yYkLb7L9svoF4Jk7foL7zkztj7Aqn9Nw2Cudi2ur390/lTS/4YSnU79vOX5U6uel13ha0Hj8e4Dx
+Zv93NPvfzj/e0AiEYsj4/cXdw9lYvWJKWgWKNoZrRrhdx2pTqcQvvs8DRjU35992yn1nAfjRXas6
+79Ed5/419ftn13ta1B2/r0V2SblXfMcDfgXf3F8tve5fCCifuBDQ9qIbUTE8dVtmbQZYL/nZy4Bh
+RtGZFw7ufPqevvfHePmIJBW4kIi68w9VQDAOXP6bADeMiF+x+EkMya6I4PA/ztleynCrH/tzIYgk
+OmQimeb24LRYb8JvU1kQ7GW+IDrSVupRH4nzezM4iIq2DOmVWEzzmvAQuq5WKVjjuplslfLaw9rm
+jKzMCAlAbpS8IRubS2e/ksmq/fCllQHYvBHvmwDp/tnw6FN+IWR1w82PrgEw7YyfBP1eFWqdm3sY
+fC6k1xqyfbswgXXbDxjGREL29r8sBzD2G2eP6s/4ZSKq4bl3KzcXzTx1MqvV/2o96HjNSogVlj+9
+uAJjDz0+hwl4tSZLGyOwrblH6Jt+xgdcMEODxWtb9+q/PEz9OFT5WoZjjBf3EkcWdjJonbf5rxk7
+Fl6kr+7U7xxw8POBlLwKEnuufnOPTpITVtWvZDrasQkbGXngq9VZ2lEJ14t9Dc+EA9qxcS96eCkT
+CcXue6sm/NVzQ6yEhARU9tS8Te7IA08oke7Et4KmF7OCWghi2baO3F8iL5qwb14h0pZ3hICw9Nll
+lfERB38n1zPPvxI8aQ80vBB2jMNx2zH48Hc2ZGuj3YSNHjqUlYiq+M9HZXrsYSdkn7e6JCs/f9Tx
+oae+3zTpl3sFRdhGNr7790aVtWxo63Mm6Gcx/CAhWI3XXljVkDPy4EMHwaZ2GUVU5Q8O/zmnCKiF
+RFTNUx+WR4fte9JwWN10+kln4IlnVnolU4/bD3Z73+pdQn7rDPvWSyAIaQaHRlX7MVNIwZaWt2Xt
+nVAABz9qNXCHH/Cwof4yit6C/IKsRrSslkpHBcApgkSFTwlPKyQEb31tomR8qF/DD/rMSsnqJiUj
++Vqnne9R2r+/g5P/2RUz79FT3dyFI/uokSSZePqpskL23SlpFB5CS71ZW8j+0+Iqp6xS/KG2R0s/
+tbK9P8WQTmutZPdxN/N66p68q6hOk5OPD4ru83RRZ5pPvtqIVw9JEzQhAXU9Atsz5GzaUR9N6bxR
+eLsHpV1Afo3/VSKxvvmVB2JCivrckgfSrS922m/AqXowIP2k2t0SSEQzhydPBuAl7a9JFLMfiUNA
+thuHq1JCPqHNhAkAPKX60UCMBH7JzEoBbMk3CffPKyUsSiXr5O+9Cbm/Q+H1JuG/gMLqxJFrSVIJ
+pCvGrpCI9GPweII+MO1zICTT0qe7fuhhX4NA2q+Ob9VgUzXzu1KJVUpsZ9dDMSsiK7161n9xOp8E
+aXQdQ3y6VmJWBBalACsg1Uc1UmWndaqGiDDE+UM0eG1R3PcGFZE5e71A7G9BJ7MQkGix0vkw0uUV
+6R3c/WEKCVjBIw1mUp+3oX+/wPj9kIpyTgBUwuZ22U9KAuHU22YJogKffWxsgpAWERB1OoSQz8Xq
+17FXVE6ABFpEANXPJL7kswYLaRISRV29JYognR5nnXWyeuF67DHUc/wXTAGb22jwIKFujLF+51J/
+ii+EhEmlva3E6TtTycCN6FFfdIviTr5SGdIVydtvKaSPZXr3LAH0OoZ/MxQIEO1Ttm6hGtStUwVE
+SlT9Jxi2tw0kO5PZ1lLWWFIq/TYQoCXtYaRnmt7B5BO6CGn/mwFFYkRA/RJQXforvt+2o3dgZCFv
+Y5f/ApUntCX2Z7CdLuCfOWj7i9mBW7Yvc//9ovSTWyjPEapwtadJAPEcXFsn383oK2BZ58egv2pJ
+3T5etIMra+ps79Zauj25bVt7u1InVQSaqKl+aML4nanNPQvlmNFMn1JKz5PU82SPqz0au8MQbWKf
+jVHilqEA+KEkpNOYScXWrl27du3aNWvWrl0d7bRn8xOx0JcvysTnCsVTdpdllylHEREpp+2Sm+X4
+n3/pPNN2DZAt+Io0/SQSSHYm3XQhz7z5M9y93Anotur+iW+wrX0jgAJprSEQiFGitNYQ5ThOwHGC
+GY4TUEIkmkiLISGioJLP3SX4ywUS587B8uejHq33gNjSG3a/ET98IEj9yhz2PwMiuXq6PHnI/Ztc
+ILH+r/tcHDv66UHoJ+OcfgWHPt6wVaKJHtjhoVAAawkwFI8qzmYhorqscNRTnM2iIKwo1lriewHp
+ppDTnluXE3JZNgzNrA/vBMv4/3+I5lmvX/rciy/SiJJoRTPUSWd9FTvvnv+/CVFc+uoVD378MUqH
+2Ko64PAzv7PLdqbo7VwAC/na8+0visQkVmYKjIpsjA9H2CQSBXUmO1LmH3gB3RFM1A5tCWgGebWD
+1zpotCU2spk2FFH1uC+dnejnCBLFk55Y/PLiipqq3JmT9zxgHNK1SgPYHpAoLr7r5y/NL6+pyRp/
+9B77z4D0e+zVfoRszwJYSFjvGBWGkPeRlw0Yb1CwMWt1xsj1iVEh8gabpqw14ZHrE9nZtYmRGVXr
+aGaQVQQhtzSnumrz0Jb2YCQxvs7r9/CX/68gijFjBsA+yRRLf25o/Y+BRLGMOQcQX4PQua21K4KV
+FgDbLB16c9WsGG+/tYIQ4M2bDECRTSSqZutNOVNqSOC5iapZelPupETT1GxPKrOLGQA4Y3L7GpmU
+0SZFIwsmB3fZ/ts1QCRE1rWiDMTzmFT/UPn8b4KEFLtWyJBY10LvlDL8s4ToyOsJpckIbXFh2/08
+iZXAiojCdiyDBSIkFODclW0aClBO8UI7vHX5YCiQf9CxShWuaTJqqOiAgMOqqbotYKC0kkRwVX3G
+l44m6HMGEWmjICLQhmhAencGRKSSnakcvUv3JS1/vLXRrTQixrc06snnkdzu74qZDvjcCELdEksf
+H4DkGRIDVrHygHgCGNi8XJ0ZdCa4mdmK4R+Y2IhQeXZBgQlbAsQMCgyLZ1kaCoByCqK5A8vfrYN6
+/RjADuNL0YfiLLeQjRuGjGsKVhYGmEiM7RRV31pHrOm0e4NAHN+mwGohUcpNBaAnMezzQICSgixK
+eQQBTNVg4+KdPRMaPn+O4ixtTabVlDoYPKvQTJ6slc3KJSGy+SEnmxUppRRRRmFwQP08gAH0hof4
+8nkbUBU2FVEFiK5MkCQtlEkI0M3rg0IkFhCCIVMZY4huWhkUUdFqI8wEIcWmKuabshoBBQgQFa0O
+iJCBqZi7KdwQ+cTzzdoAgU2axrJAYAUZIetkEQtZKwQhy2x9diwRsbZXlK0Uh80X3X8DGMAXCVLx
+j71Qe001ImsCImIqEwqijBCxJbBAb0yQVc1rMpks1cVMXdPqgA0sawNDR6uMiS0zosTVujKuwFbH
+qgykPKYAHd/oCVAVI3m3XM9va3AYvvxSMiAN26D2iAiKWMEKGQH5s/KeEYjIF2UkhZoURCvZnmX4
+AAbw/xAUJpu5buOiJUaEIIZAuqPauLp9VcAGHWuq4pnLoqHWGse0rlwc0261NoDnLE9oIQftdSvi
+xks8vNEoEie2MthWR4FFzwYFcIPLHnBD65ZLfGUBP1MbVJIafwEAQhyaOHP6EIZQtE0nmBy3VpOQ
+VhBdF3MUCD7Bnc9fkvyriIgkAachqge2SQbwvw4RXdkeruoIQTOIxHqqozJc/tqmgHJWb8y0Aa9G
+xeu9Cm7PWLO8ItRe61WCjFGVVoSiS1a5kbcWxtoqMxytOsp12/qyFSuXS5VW7e+vp3jbm/VrMzZF
+oCpT7oSd8kuiJ2RH7OjBno4vKdsU8aS1o0EnSNrjSkx9NBJXVlmRqOaYR8qLJP9GmUXcFh2vcRH9
+kpFfD2AA/Q4xm1gjsJGWLw150lJe1mZCvHzp0vaqnPUrGrRZsz5nw7qM1W01zQ28Ka4D8ZUVVFvj
+1i9ckf/JGtKJh8sDVofXrKxVgdc8WrEq0Vbr1gX02g/ag22b1i1Qweq48kxqnOzyP/KGB9sdxIfW
+i80sqofU6EKsyw5xReOkfDa6on7y5qGVJZsaR8ebJwZiaxOjmvy/2U5JfTBeXd8hyxtLx7tfDlXh
+AAbwGYEkmFhZG96I2oxw/YLMaU2jEF9XG6gvzgyrRNUwXTXc+3jmynjO0k3aqWZiFaheVlkSrirZ
+NL69oapdW696NMWer4uMXKTXLY6HImUZqCoZYi1Eb7TiVFoVWNkZ2itt/A2zVgZBI7qpaWJic3Cv
+nE0yiDtUqF4DERVsLFod9BqHBd2xudQSnlYjY3KpJWOydcnlWNOUgqaWYcEvW/jjAQygvyGqo4ok
+1Nro1VbEaleuagi01IRZk1MZ1Q4kWNPYXNfuVLp1Me1WanhUu0EC5GZUx4xyBaajkoV10Kx9R1e1
+Kngem7IGhwhiqmLKVMUIXRrkrvWvrjMaHG6KKS6ekcGFiQ9ax1CFwxHjCDQ6HCpuz80pimc4ZG1e
+dOkgRdbmuSslb3Wz4xQsb8ovjGd+SXbqPnNI0ilzAP97IFEGHFq4gVe9LaHa6MLA6gSBM5fGQ8xg
+U5EIVyScjYkAkfdqPLg8EgoLW7haBZZFNdjYJ1wS6ng9BKMlsCKiJYAEAyQOiWimNE6Crvmzbq0c
+Dt2xgTg0NkqjdG5HqIBcN3uSBC1GmAKbWV6UI+Pa1ShhCUxwM3MUS8CJDR2U4eh8nW0CWW2hgXcW
+fqgFC0Cpz56qJFVk9x096r4P4FsB9Kij9B9JWM/9xB7Fb7s9cF+5CrAFg+dUgn5sSb+AAKiOqqAT
+UiTaRF/zNImuaWhxShd9YhFw2KjmtiBDFDFZilaGWlp5tTcXVpEAnAABrHz3JAuS4DxVblgggBNd
+GUiL5JfOZLKppSRWY5WQFmhROQwJsIQgAs1BSH6xsC5gISE2AashxINKQ26mCHGmsCrgfjPsSL0S
+9KmPrsf1rdz0+UBALFoBAPfppiok/V1DPzZpqkt8a7xOGUoF9UwFCCOhpAlxL0q0Ha5ZWnE+QU2P
+4x1tl/p0XhUh+vQEXxREd0QC1U0eQUSVoypBqlJ70VFt9cOpo9owxEtSJxF0R7thwOqNRvsi6/N6
+waegJwiU57FvhatilUhnj+ySXyHd2kQmFe3XH0KYhP3vKQMhYZKUtaaFgASZkuQSs4B4/fVeCmCh
+AXjU1xgmAPvB1tOvb+Wmz+vJgazGppeWxKecXNxHbwhgBf1MlkY9/NakB3EOdZMigk3Em1rHZXTv
+pB2umfTm6elpLrBjjSISN9HWkDe8z8cpBAVOJJqbh+fvUuMv/HCYqBGjhCAGlVqJARlRATEd1b5d
+BQEE8jq7XJLEkN0Nb/0TxAIrgKhoxElvbJf8EqAdSQaD7ZGJL9OMLkaz1F/rz8527kn1fjIMDZtA
+yIB7E7wJCWuFDs9kGDBUKrifiIZNINjnTZ/fo7O68up/dgC47cUx3PPFFgJr9CdpLACA1fUfZMEY
+EsUdWX/OxIfXB41yFACv+ZJ9LKklVxtlHHAsdteLf4/UNCX0B9O6B7vtXjM/3vI2VZKsfuyRTIcU
+AcqVljOOwet3ZAT8Y49bjz2dd2QMZlV24ebGunj0Z3/kvrxqyernb2mr25yIP3OkNdud/WcLAiTJ
+s0wQg1RMYxFPGdspYeKs4BRb9ac48ktgBYdXsAZJj+9r+vgLmyBDyUlod47e5LDexYON5MOl1OV+
+hBArvPzwB+to4sGn7dGLbUFIRDf8+6nFbfnjZp94AKz2w16yorkPv79OJhx86t5fGEWDkNVvn7LJ
+3D7xuy1rr7+7dwxiEfXuY4Efj+H+ZDoTit9c1Xk0IeCZ//636+qFAKtnH00e6btu/QQARo3o2a2s
+5j/IZ01hhZQUb1sfiuDuV9OOvwP8K6147AveEcMAVq8/BQCYIltyxfvbywCQOb6fQrX3L6hHXG0A
+gGltC6QtMv3lbe9eNt1PCVn4KXvy/6WPvzZnUKzaKiHjKuWlVUSUMFKTcn9mTtwZtYe4u75iZ0cW
+IVabL3gIJce579x25/nXBnrIIgnrh35RCQeVlW/efOyN460WCLFquvCfKDrWvnvHnedeH/6CBJis
+/vjY1qKHjvhxfYbX3NuclKz+xw8Yr70Z6t8JtPp7S8W1m0no+K/mTnIsTtuz459vKMiU04cV7A0l
+8vWiD/7FrL+916yi62o+ul3s+JzuHxey+qmTo3juo1xW/hLJM9v4KDWuOpvW/bmJJOOXUzh8CPCT
+o1XVnytJ9E/3hjkQO8Tdp3DwYw03rJXAtC04YGr87Bsrb4jw0JG72vR5CyARCHfjs+1z8BNdGe/+
+bFJDaK8s0+YddviohC5ZHlO8aXC0rViRVVYzKWbdmlObn5lQihlKMWuViGa153iaSbE1tdk5zH5a
+S2qndVjEaDzuPfz+okw0X33DzRse7e5tLGB980X47lmT4ovufkE/O/+JPVkJMZpPeBNX/iwLLdde
+e8eGxwL9OsBtKwTUfnYrrjzCq0QHzujNpsKq8VIO8sr6kf3pw0XiHAEs/avxBt2bB4jG9OmYvCcr
+e+H3AYBIJk8+a/Rv8h88CsAhOP6RGuzeI4iGqMivokFeXz6TAQjcEyOvbFsXErAvgMfqHe+Ey/xT
+u+0GPFcecA/4UyrF9kNh9GgsWYPicX2T0hCw1154Zh5mOV8SfzhxeikI++TTFVPVY5pMW0iZpmiw
+OaOiQx0zSojrOpobqaHCa6YWr606TqjaaOvqVGt1nFSkol03bmoqa3Sb0eK1V8cVWOpqbTO1eO1V
+XntldCe5AUWgzn8PP78803Len0+lp36jOX0CRaxf+pn5+4MHDx553PPn2UDV18uJSaAuehM//W2W
+5dw//oCev0x/MRuwVv17Po0/0+rfHfOVR47s/eIJbarV4k4a1K+vnJDYuDcOQFuNl2AScMLLzxZC
+tRu3AhFwXBK49ijXteJ6qxoVZqH77ECofpOGO2qMKEAYq561atvMcURgXW9TGYC9vbjnCcCu11IO
+wb427nk76NUi4IS3HpiY3fftIvC8mgpglnw5zIZEVybUtnzMyFd8bQu67K/soMSIfQ5yc8PMRY1u
+fmss3BBra49VttQpZBRQONpU3VKnINGa1raSUG44Gm1rj1W01CkQbENLojkSr2hpaKWd3gO26sWH
+aPBlbBV5fFUG3bxQpb/sotxfyT3fS1hml2+cmQhUX04iTK/+g4p+zVaR5d9l0+0fqy/ko6zwb5Jj
+w4Ldn33p233EmVE8bm+bGHZbP0+fQUrr4RDVUWu0AoGMHjQYhA1GawIRIVBx08zve9ookF6VQGBy
+j40d4iEH2XjRndnsb1u8Sodu4/SZCFqZ8nrl0RRttCFAKV2zHoJpSmuzg4Q3BASia4A5W/gQEwmZ
+slqF6bve/lGfEFOZ2LbBbdtZ/dP8j6K6oWkje55iyc/xAKBgY9gxg4utUsy5jhcYVMxoyoAlMSJc
+UBEKmEHFFuiIZceKazMdM6hYcneaW0fhVshX81gBGqP3l8TdlM4sYumVhaGW+oBS5HDgXFh6bIMW
+ottEDi9mBSgMO1i8O+mL8GUUVfGxYH8BsfghpXo9mcynbrvzw725vyPNEtEIMGFTZ7NtAoL1lOTd
+F7qu/fcOfCqu+eCho3p8XAiBh+++5eOvsBaIkH1Upm37wCkii6GkeEJyqSrAirj2glN2ijtIpKJM
+YfoWa0Eii8HZk3dJ9VVf1d1WhcK2o6vlpiYWf3FhRmUCJicvJzM73FFkijLDxa2u8vLbMymcV9iW
+IBRQXk52DWV05DmFWaHitoTirNwMJ88NhEPF7bFcxTspN6JWvwbsKyAisMwCPdlg0rOUuUhcfGQz
+mIRk/5Cl2JviqfVz026aCfVMTf9KiCRdnXtMOlNnk2BZ0YzAFH+DzY+25t8jwlZERJQU/eScIZ+F
+dk1KMoWwyd+mIKH7yxWjzlMAQFatuW+/o63PVkrzgLE5lrq1R5Tk/PiCUawAIU8/9154YrrwpVq6
+hbEQ9DEIw1LLAhIsAGHwmNQKos/u6+ybLXQrsNSTwNSuaqR1JouIgD4BBqcU6V1V/PQn3zNd2vFn
+68Der8FyfHTqr4Ts8tG53oYawybPRb4tJCtDrM0rsIyMLOFsyc23jMxs2PxCrxjCqavZCBE2FwZs
+XoGF7OS0VZjeiGs7Bkmir5EwtR8ck9arCjUQM//Vk6wiRUNyY4pXE8tbEeONTSkHRkFvfu+EftRg
+CWBFE2ChusU+9O1IrGgAJGxpKTBqCItVJBAwQwlrEmsIYMUMESFDAu60j1JCqRXcTlgCEhUVRYAy
+SQbpbLwRAjQ3lvjbA3R17CptCYDoljJgjoiFAlMqPGtXzSBuoPESlA6zYpM16mwpc5+RvkTb5QB2
+T9mRCNE8KEzI4iSfEzzSgN8thGR5REQCDwqMzkB1EACeKGJiNR9S4quvBBCGEvYjI/r2hdquQEp9
+JUAyRCQrElDXoliRUKq3fQPFZDrtWzclmyZW0S7LbbkldMoviYqvCNmEAYklsbAAeSBrQWAGBJ0/
+bY+rAFAAS9Zi57ePCB8ByPFDXRGNgOC9Y7grsJyoHDg2dRQyIDQD+BhAbjI+Fg2H4L0T+itKccqg
+BNZzdJdtiIAYSsFlo/2gtqQ1FgFTcpINSdpRanjGoKJhbLakwuYJSbcAel2xCXe4yiR5eeWEdURC
+QtbcWrnnR4SGzcUCkFVLHjzi0GQ8XynfpHimVQqA8onVktEd/ZoRBRpOXospeakaCXyLGc9qo6Qv
+0xNRdRsAzE7Z9omOrINgD0kKv9UGcDlo/LC7Qp09YbXxq5GyGwExG/8cZBEwIZup02YH0LBkUF8x
+tERIVONqYLaw7rRatZ5yFKwGuod7TFsnCnemY5VqGrsUMIDrfEm2olJI2/8VhTiZdDuNzgE/rU3d
+f6aupu9D7+zyl1aAUZjKOguCpenPAnLaP6OYcagoQKgtDsEg0bQMjILUTZnEPW7aKQixwsL/vLkh
+MmbPbx6Wsm0AWY0lj7+xLD5yt28cCwFiH7j0NhB8PaFlzxywxsYXF9VmTzt+nPe3u+ebkY9Pr/iw
+ua5pM64tZrW8JhxwbMKLjhvFFP9AhQMci+6es8PdR1YPWQTUexoA67qbDrrgJKJYzWQ/Mu9v7VV+
+JG0RLHeVM8nEnnunUg857Gh/Z7H+nea6xsbY1SNYYfPcq5caL+M1V8POLhGArNbrHn91cfvQ2cd9
+py/bMZF19cqjqUgqtUUqNkAww5/LgzU///gnlWb6fqePZZAQq7JPWmqbNqs/FdpnX64OlB709U4T
+Jc+olvferIgNO/orrq++8q1z9OaXPq50Jh67Gx6/4w2d+7djLGRdneLpvumS1Vj3xBtLGotmH35q
+jlVkP/BCQeW6Cd4tW6h6WWbQcSNmH7JaVz7xyvzmwTOP+p5hBVZ6+cNvrWkMzzltz/NKHt5hW6Qv
+Qt8i3SK/CiUj7O5I5fttbk/R9ZCMrNRhSDMabNdaljTv9+aTed/LFwURWdMMxhTSiXXgQHbnTU4C
+DW5/BYMTYtVwyT8xcXbLOwvuOe32bH+NCKs3XfkvL2ff6JtL/nHW7cY6T5wCAPj3vwHM2811aq/8
+VwcA/PZHH767+37vr7vvlgueAIDSmwTRr1ZAESxw+3lu8OlvKzHiYd5udoe/OiLjIGhsLGEQqz+3
+Xl0AUdgEAVn10eNf39sffglYAB417fHzq6AtbvzOfWHAmivuBoDM64i9bzwFKA+PPgoAzx1tNVnd
+dPV9rc5B9PbKh//99+xe22IiWAzlFY9H53J3RVx7oclEBAjrdy/8RO+x/5pXX731mnMYEJHvvwEA
+Jfc+d/4GGA83H/NAjigICZvaO/9aCWh7ywnnlpNMh2+dE/vTnXUA8LsfND827oi5DbcdS4zF4OxJ
+pITE6k1/vD8enDNlxRNP3HbPga7z3oEgBWFgVY4buPjfWoy1Y9dYHbvujjocFH7/v//95yODGar9
+8luw12GhphfmZkaO33FTwi/G9S79SewSMweRzdF0+7GAFtR1pCugFe/xh5+XCIkQ6CnPkYKDRTX2
+uAmob++vDWBiqjrknxeuX/7s2x+OVP/6gfWfladf2f9v/LvyF95YMonu/b0SmIOPmQHCXl894tBT
+J7Dz8b73xK4qa5s7uv3G5a98MocxjobsV6RDek6OVZG99s1gazHhK4dCiRnC4npDT56wXfFzetZz
+JID6zSJk1cY799s/kC2ETQIRoivU73zr+KT6avxVJ015rrHtwWz9yP3KEqHwgFIV1LNKrY6HDjxm
+DMPZ7yuHf+WwE3aDIk8vOODG1gvKX3l5+X548gLV611Nqq9Glfp0aESaFoAwaIwogFg/cfiafzW+
+/9TSW03zufcrJmiedMAgFdTH3Hjs0CcbWp8s0M/dqkSEhPXT+1xVedqbTc3vH//EN6wEphKBWG08
+6Ld15yxv/Wgvvu+xv63+hsVYiNA8YPBIIRKrX97/ruAtle+8sOYfuSuPneuIe+hssZaDM38wWoyU
+hlkSNPFc0WsPvrLue+veeGHl1/DWGQy0fP2WQ1d/8K97H1t3eETtiR3eSv5ipGdXs/sGqDXRPQY1
+0JZITyBkGVoJwBT5DyA/LHZNWzzdxYYIaE9se5mfDoH8cKluHUFW9rzqe4H/vnKU1ULWvPz1aOjv
+3wbztGtOVDf/eCh/65t0609R8PgQAELLjm7ATRcAh136o4Aej6MXzD5Tbsc7h8VllkCKHsMzJ7E9
+6OUA4MiJ+++zfvgtR4Z3zpJ8OETFayYDoGsiV0tBcRthA0BWv/nSaTNs0s1Ft2yA+vClWy4A8N2b
+P1ZP/4RE42os2a9dZopI5iPAt9Zj2MsZfusVm0VH1uGWC8A8+sYDvAd+2muSINouB6P8yBSxPzsL
+IEn1Fau1Z8YCOsdCnf/q07jipBwh0Xdh8X7t9Prffn85gON3f0U98xsCCes/Xoaivx4HYO8nv/2o
+4ZJxoojRcNRynH0nsMcN+ztqJO15ROHlAmOXA7MdJljzxHcSE/47DSLm9NiP286cX3DoofbCOwLx
+qy7REOKbDj0Oh/9pahDlX12PX18NsYNvfbP95VeOxG9enfpEDovI4Btn8fSdclz7fEWYAOxggPbP
+EIKE7SmKifR4D0SkjVEgEKu/bXDcCb9iooTt6j5fiZjotyARrD56Ucv9iwCyB+Ym6DURIas//lYU
+l347waTsfiXc/jaxsHwEGVMiLCyxHzeo2Wd71rPTYBuelK+8eXMmLLIYmA0iYRxeahE3zBDhUCz3
+6RPCIjsRJZgwPLkBbNXK+796MOflA/4GMF8RvFySnSpSvglovuECzxOPs8HNRBBYZAkwG4CwxJcD
+4zP8DS9i2nBsHX54gcukeOZ45lekd1iQug1g1L009xUfr75YC2APEUCY7m8KtF7OpDw+VqhqCTEg
+FvkCVfaby63Hrs0Bt4AgrP90mcp4+DjPsrhyVYbFhGyBiPrlcl18JXvWjslz44/IjJcfHgKixjXA
+LGGy5pVTE9n/mZZgkNjTJ9DGW8h6+kRhJLQrRAIHBz27W8CrP2Y9fe1qz0Lbkbsznpc199GxOTEo
+rXl4UXDqzmwli+038DbAsuyK4y9c7u79BMRtjyT+PJBN1VXKy3ko31LPmwDEva2WtI2PRfCeOLH8
+IQAoFG6RGAFC8bNb1ISfe4YAlZdbh9UCkF0ITDKuAZvn3w0kTg142tMREKopEbCKRBZ6KjAZAMiG
+JmzEqqqhImTNTVW3zYoHsDPfcJKSnFbCJgHod+5VYgND5wH1rrHmhbfOm2B9wxoRLHcd94iLPaVE
+czOQC3+bemm7lqkgEqGKjSR7JIVURJ1foQqutopAHCgE1qJP9RXTTTNd//Vns+Eshq++gpI3lcJs
+YgKyQZwQAYnIsojx9r7SkhatGv1qsH7lUuNddHjCAaCRoXz1FeslfzfecYOtYRWPkdSSVQLFsq5W
+8XTAqvJTO3DODNcBQBKatBqPXBpiGZfZgQ+gISD3iuA9QZfMr5dp508MBYgUA2vo7ShWIATLpJVb
+sDOeEKKzzKeZV33al/lTv9pbuEhwdkn5VYSuzVFY6c0eD/j7AHJWPTkP7O4ZC03oXLoILPd9046B
+ZHYw5lxVbA0QaQMGA2T1XfMDiXPDVgEEa4E2gqiKKmCOEAnJf8mqA4UEsgnaKxDl07wsBo8eTgQS
+YM+5TtOaoaKsXnf9nB95gZ2cgVFRUSthPdhZ8MiJe1ol4yBoahxE7m+yfyVdnBsLIOoXAiWiGqqA
+ScliF8MOGeeP0avbHHeGnxhW//e5QOKMQVYDUOQBrb3FF4uhuPiM3M5THmsb8q2vRO37Xmz0FVaR
+g3pwID+p61wI4GLtaRHVtgmYSAzVfo7YQRexISERtardcWdAIPI0GxwqIiLVMePlC0AEgW99RaBf
+1angD1mBABEJgTatmwYMnvwJlkTDQp657+PfTvSUfvt+x/32ZDYAlPKANlSTevqU83YLaUCPO0bv
+jPWC3c/rtluztb87m4ASFWoXlF9HpX9yrADB3jpZIbHm8ucReuBrnhaCUUC6GRQQ7K+mkZZD3pi/
+/wzAa+l4KaLtNCFWTdeRm3ucH3+G2mKKsgRMq5q0nQkSEC0TWzKMiIjeh6WDfCMionnA6EzrWyTM
+BGHxwSKgSyK3BOxO7pyT5OQBWE9EV6jfCkAjIWjYXKIfn3fpMM8kd2aJ5sEbux+0EMuGGuNN9zd5
+6BNgeDETSLAYnaaP/8fed8dXWWTvP+fM+96b3kkgoYfeO4iK2LtrWbG3dXXta1l37Yq9t7X33ntD
+xQKK9N57CSQQSO/3vjNzfn+894YkBEUILn5/HPGT+/ZpZ+bMKc8RCt0BEzw5wv3haqbEbb7sq6/a
+JejIyNLORBBadxIGiOWeEZXHpwChktrvIRkdfYAdmgWddbCwkJX1a5XpAxHnhVWB8Jh0o4RAInOh
+A72IILQQRnUBkWAaCAdEIGIi3ldQM95TZmDXSPMx1UDVbeotxu02kzav6m2JN93U5V+WIXcaplP9
+0cWoYEpEZwHeeqvbiP77D42fFJCdd/cUZ9PTxmFmRawa/GHy/zA3+VN/wzZXuOGT270PgfFL1R7H
+v4Sg8mVon6wACYGmIoRAjPP63Uh9+3CtAEjQafiQESA+0GLmI+gRIzBx4sy56wGYQE/AOl9vVKbm
+SF9eolAB0I0ALIBN60pEAgSAVgkCi+pvSY8a5EfFc8mqiEUTRNQrJoTpBKu++PT8kWZXXSpJO+1n
+A0V1wV++OLuvYYN2AIc29qy5JfWq+pz1oirWAENijYIIFgDUx0/EUbccGCzWgYBmQLI7CEMAq6bP
+I2PO8o1xpJcBXbbJbOl7Xw3iSJy+OGoOGF0TIp4XfBJK3vtl9vwKgG3nVEsAVGgFMCDNEgmwSDvo
+K+KEX4Kh4yTi9UGzot5X4pJJTgUJ6DPodscJEwBlfe8rwQs2aEZHEnyDdFEE7EuGvOXULeotUDcV
+vRxviJdNhIerro8UfzGQi6N7LXbIW74cap979jNqlxSIYWN91rLMyjILMwtzdGEhEbvVlZ9ARERM
+xKyiHNvcH0Wq2Ytwg7IHys+SHlODunrlsbEk6bHbNCppZ9w/pO2Hw7SCIUZaTAV5DR4C0uNaRn8l
+JOIUPff2QqDvQZ3fXI7ctkSQH0DITo2ksUhsZzseLiw0B9I5yx99Q2eg3Iom94U8xD7s+kuurN7M
+dqDv6sLSOXs1lniOrbqq1T07BTHTuKCQXAhKStvcFHOzgAhtyTLW0ltL72qloy7kImvXsx0iIkSg
+2dBZuUSAVRvWkQwEhKBCy4CuiSbirfUD2LTJiCbsGC2tTgM3Lmsz3lerIRhWj4sy88kvihAc2dd5
+wov6ZPHGlSSDRQgkmA2d2J1ACxeTyRoYeb3yVvjeV0Q04nWqDcFj97uJyjyYZhQA4aIVwAAxTs1E
+aIysL0zZGhg3DeSr4+aPsYHJL55wjGFDE0Ns0zOjis0DKPkfNuHD0+YCFJDwpCM+OszsFNJAlNgy
+E7NvRItY0nxq4BDVbMc1JUv1fyz5kXTUBKlP4OyJ+iuitOQSkprocbUok9k0QFtIOzPPrO35UQ/t
+CDkQSk7dTFITXRhqtDKtgi2y/gqJVe9evwZtLh/TifEekBvngWkhgLHnNL6TzBygh6MVQHLFO2UF
+758fwA93SuDVwX7kgGCRx8GekV6wcT1WY82mturBlc+2isq3u9ByvsC8Wf8y4dIuRglJq5RSwmZv
+bOal9fESvvrK9gMAYTsXaOc7SMvSal99BeH8dSRDBCAxCrQIylxyU6OaNlEtRLyv+tRDXcqGNbCI
+el7U3vzfMEZdfEQKFj7ieP2glSKRZdX+5hZCNBdo015IZhrX65Lud7bwpmUkQ0RIWM58bIV+7f4g
+Fl9qce8Yw77GzVdfCW1cCRPfxWd7EVldyDazK7FQ96QKzCH2roh9UEBCi+GGTnmyceF7TH71i+lb
+QiCn+pK58X8q90nZA+1HEO4KQlk0w3EFFLqKaYSILmSc1SeV7Du+h3YsCi99DxpdQSiNVqsCjC5o
+GQW0WHXrqWtw2ozrc2EWrgEGiesqrwiCjmKi86U1QkL5BcAQ8TFaqz1rLzjtur8cXNR/3MmGI5Pn
+vIj6CgBEhsEtWyJL7x95ntnlsEsAaA+QXnNbvK+tovR0EIrf2XBTcj3HETAHXkpXYoJw0TpgEPt7
+3nkwrbsQQUSWVzroD4H+6xFGYROATqK31rRphJmvvpJWXeuRarEkFFFfkaWiox4Kxz424dQUz/tW
+jNMbQYdEMAcR/yxRlauAAQEL2gCKol2JyLIqB/18EKlaI/aBY647Y8Dydq/9xzAB/jbdJvYkkk2G
+kZjlf50Ev8DBqCQDkla9gAUVznOzbu5slRA2gtChQVW0XfSejb3oi+WT7h4tHq+aTGaH27oZsmKN
+tVasiFgrYrdZV6O5uNGcVpkiIvVW4q3rOPvpt6OkWClSe6L8bNSgb5XdIOLPsRsADAYBYknAPvqW
+UZtPzDvs3RTtiFXTn4ofo9XgL5SJPATJB2HIrgAPN2hUo5653dF/exGesmp1jaP7Y+kPx2cCQGr0
+JmGgofqKhOrOinn3zS/fAUafclZ8dF9FNLNefQUA/QHMP+zq2kdcswuG3/qiIocNcO93/26rHSGy
+iakQfPdhu/O2Yi753ldt2/qi8eqNjh4ofszCjK3qq3nQwZ4kVPjRPkq7DCCt/iO8LapdVH3VNHiw
+k7AA5twJLl4+xRqGOw82qzONKzmNQTMhWbnCgMj6NcoMEAEMgCxEXxJRX5GALlv18c/vfPklBpxy
+draJhkRFva+gQchIiXAG0zgIzhQAxukxlQoL9C09rvTB2vyqSH1V2F46sbCV56bsu+/1L15ikL8r
+LntCMdqp1zApbqCJaqTKigrYDaIzo0Kzrz6HWCXMwmzZ/9/Ua7QavAi2jvc8/iXQQfdarEMkvek6
+6Jj9iQkSATeFkOWqMfOOfiMxpDQ0r3D2AdNBdxisjXAJ1kEHRlGLxNhaXn8969zHrLiwNAM20BOP
+PTMkO3Olb7Dyp5Pp997T3QILYFO7EpEYZ9ziq448srjAyUoDTBTilktWR9VXABH1iK/BignjLhq2
+y8orACBplVJCGJd5tbAQyFD7GYJ5eCGhfvfre1+hl7tVfdUXRADXrWikvsrpKCQr6RCykg2fsQhC
+hlf/55/7NnG/iqqvGgQPzoyor0g7r38ZDF10iuc44oTnAZ3TK89yT7UqtBLoHu98s5rYAACAAElE
+QVTHNi7SDvoBkNYAXP8dAEWDB61a+MEhxx9/6wbTOk1BRwMYlVnsBw9SNlv4IDtChuf/pLxRRwoT
+IENecbxVz5e8GWuUkEgOtnaaRcklZx8y1y3MVBBr1fkfjkPGrpjfTdL1m7c2zA4bkaz9nQ9EZ+KY
+Vet66z1Pflayf1eLBUQiAqYpsKM6WBJLH5x87nyyJGTFnD3xgi9SVNBxnBj+UXcUJSN6Wiwg9h+a
+DDsyd9c1QgDE0qdlDs5MMEqE9OewndvRtLRcOQAK60VIhCxCF3wMEcJcSOdMgYDkWyIgvW/PNFgr
+EsH+lVWFjIFRSxdLpxzBj+dl3Wl3CaainigjHWBcnhWxTyEXYOp3uq0XzkVk7XrGkEgg/mzozFwQ
+xGL9OoqUTJk1QE6igCbJvgAdACBPQCJkhS7/oJFfm7+tKVwDYACiGd25ajUEQ8VC2L5KOnCBZYLB
+vMUKg2RDyWHKoGAFYbBYCCzmQCd2BxMNgUURQCIkrOcB3RIFEPkeDpDUq28rZS2sH2cvKFkB9BdL
+0rYHUC6ACImlh0KIeywC1zgABnc/etIRhoWEaRQM8ohIhMTwf96za8p1iQBgx5o0Sh20C+5X4hYt
+y3CDUQpEyHVd13EcR0UoKgDXa7bqVVZRt6oIaa2153leOEKhKNVFqKz8mJo9z34EmJgrLqcJNUFh
+GFo5h+QS1o7hT04Gvp3W1rKIuujjRHW1xwDYFo5LzgGZwD8vpJ8q4oVhaO0skouVbpG6kcwgi2Ga
+RHTgpXmulxuzacnwVIx5yOLDY7Ul0Q5fM//B7h4L5gC9HU8RQPnyxtDBTG6CGwgwDBPEGl6mOaaX
+jeLq2GCv5bwCz6fvuvIKAMjGp0HptpdGA42oAwC5MTbSEkJiDS/3XDtArBIBzQM6tjIs1tDKaoW+
+VkiEQ7VAa2PJvJMyQhw5JqUSH19iDIsh54GvrjigAS6CkFgyTt4W1tzf371YMk7hGlgMFEvERSvF
+5HQGiQHd5QVMPzNb9jFaraxxvYGRYswF2razxHZg//mYIGIJmtQNi11vmBgHoHxMeOxwl5z4QCDI
+sEQQa9W6QrYDxCoT+9fbee2aztqBse5bb7B5coBRQkTUNaOIJyc8IH4wuRzUaS0+H0uGxcB9/cUT
+j30GMvsAw4AhzJOjcsyurGcyoevvR9L71Yn7V65J7NLhI6bvichByp47UNY9raznge8Oy5HHGCWg
+9zkY2DierIi69VlV+cwjTzz++OOPP/r4u6ZLCpGyZw6XgieV9Tzhe2vk4BNMC+HnkCsKixxFHPju
+HyCkO9/WncLegIu0++63ASZ2vWsfO+8a6ypnwWpGawooAkwrbD6tb58+PTrmDjxu7BIlIqQC9DVs
+q0zlRHHwZSgcjD6nZZRXICsdQbg6tZ7B2oHtiPqWICEVoC9hnNYcIFbOisWMzsphUgEeB5PURrkg
+kmAMY4tSzgcLr0q2yubcZNzvX3UVsaMe+PfhDzSUa0hIsUufgSWYzC5HjseFlEUaBxSLA+biQiZy
+nJs+VQYdnLfoMBXLX0LQhgPEyt04h9AxqJgk5lZxFrzpMJGjbr2PBEwuATYToSv79+nTs1Pnvodf
+O4VJhJTLXwNuaw4Qy5Wdbd2t5BIp9+vLrH3yXO3PYJLeAwq3dPLRxtgm3Cnu/AeVInacF88e+Dxm
+Qb1UHSAiR921MOWWXRoxElg/K+F386/sJMGrvYxB6tDq/yELS5xxB8U0mWbIxuzzfu3ULn2V4hfv
+MZ0+SAFD+OeprHFhNxH17uWuUL1EErDDzjBENjDy/ZqpHfsrxa/dqdt9mNHUSLmzRaT4142zoHcH
+yX/wgmOPmOwWV9/S4QmXMGr+Uv1VoI1b/NnfPrrkv+Cv7/ry/kKSBb98/dHAFM9NfwfWaO2Fqrcs
+n/CSGS1U+Z8PXvhIqHLqj6E+/jwvXPm2Um+1F26R0BUBzf1Zcp9zKZr1pvpFkWd7CEf1wtXXv//i
+BwKZMum7Q3657av78knWzf6itvd177z2lqXQtJ+KB1k2ztqf3ZI+bb8+s9ezAQLZEfkz8bWXE1P+
+7UUv/PXV+IbpAAXebS9+9uxrYsn7cdInP46Mwf1Pf/byM1oIP/3y2ZeDkmLzpnB46YgUb+Y/Xrqj
+PN8tmvXav8dc9/brbxpg2uSvDlh4w1f3rSIUzPqyaBBsr/BPmNCmq6r9/oJXM+uI5k77Kidbu51e
+q4PR2gvXlKya/OKGQxXZe155+0WP7NRfxu8Tb+P2+6xywfKcxPDc+/5Z1/mVM43ym8A40+aYfs8x
+RzPs9Av9hO9L28ZXTbjyodHvZ9nH1tnNM/qmUd3Cmx5JenMfq35XRwgvnhwHIujEDOIak9M6I+w0
+UhNHheVtfuwyOdWrKheE0+n+zS0GU/H7yaSH4/6e0mTxETJq6lkr8ZfR+O5LDHmzm2UhS3nHLMQZ
+Lzlk+fjPGr/lmge0K2TUrDOW4ZiD+IfPMPDNni2FECfCr19XAGS6+bjs0Y1DCoGBb3e3bLn25qdq
+gWAIre47T4xz2Pj6Z1Z2pomPfIogQSDaQhk8eyEmHBi9/sC/fInW8uqe4SsfMS3DvoB2nr4Ez10Q
+lcYt5w3dfND4+tnBqMn7Rm9NKT7pk+jvR07sEP35n3u1EpQeNxlw9MAPOls/nd09D5QCMXWIvf1f
+jTPTGLW0Z4MCpOfFFbZvELfJedkSuvoFDXQsK0t97KyXzgdwwTPL65/h6stfiP6++iGthJ8eW4jE
+zHW61RNvfQoA+HEUL3rgVQQYAjEGUObKR7ChXfSxuMJ4WLXwmm8Bx1pk/O3KNiYKI6bVCxfim8Oi
+oRskwk/fWQAEQ8ANtwZscfu6W+Z/guzEDdU4+J6hv1cOMuqDB9NBJLXZ3ckp25yma7Z6V20FXW+C
+k9/oT/ReRINympqWqNHN9VcJqKxISO+8B/IvhIwqevS9FQD6nHtZ0G9VoYrvkg+GkGDqwkaukebA
+TsIQMqrk8XeXAuh5zhWxLSSSAhDhoi9/yS/O6H9mT8vLX68Y/Re2LGQZiz+dn4/cg49LsgR8V5ig
+XCUwFcmHqoevtaMu76dgRVeu+u4NjT7TYzb8EO86jg7p8JFpUQQtXFLyYlyLGeGNmrT/QV8Eovwq
+CA9dOXFIffIhS5vGx7vKNWFT3XH/7zcmKJfDnq47Fp/FBZRrQrr2kDaWIVT3wk+b4g6/OMaykJCA
+1n4ye73Xcf8TMkUazYuC0q8TgkoIYqyp6LivVH/txKoI7mZl6iECwsIvFuWH2o8+NVk7X46PPWkI
+isbFuo5rQ6am9SE/r01UjvLCpvbgbMsivOH96WtV7sEnJF6yIjMhNbXjX2I++Vtpz38PD4pYU503
+6ZVSTlicXfGFG3RcGzLVHUYJwSj8MG5ZUVKH0QdlwURB0kV4w98O+5eNuj8JifCmT6fm1bXd56R2
+MKr07JPOxSefLdWZvY/bF7/be7Ih/zJXa01NZT4jQiC7izs5tS2LWgtHWS9zj+RfkFGoXVtIbToG
+fIwxH4IKv5Ke1n+obu0mat0pAKNaKoOokNQzQHShjAzrBuebfOvNM3Hmy1vVZ++cpdPmtKPmXu5/
+oaWmGtK/9ElvIN3SQtN/O6/f/jf9po7Ws2kL/Hpht52KIfW+I5Hma2QX2CY1Xf2n6tWPUw+s2/fT
+9Pp7ph9ehgmjGvSukIC2vtQ0zR7b4KiZqtT3ndQnAtxhasS/kBNU1M4eCePm8Fwv6MGu3CVMVqrd
+Z1jjTS6Jm5fnCNz1LaOjbWEiEWVtbM+eALTy53sStpaYBEKmyXTG7IerKGtjevQAoFWLsS9I4H85
+AjpqCMr/HthaZrHCDAGZSFZ0EQrdhswHnXBE62v5hParmaI3CKAadLO0YKpTgnNAg+lASPo0FHeF
+JGLHBUiZaDo6KJhoyZiFSFiMj9IaaXqwtUxkhHlbhjMN8i+TwtZjCIgFIGuZYIUZMALiZooR/XaD
+RlUQEQtxb6+LeSA9FDELiwwb9q3yDdLRV/izupH6zmjIr40auHFnCgksQ5OCtcS7uothVWibJF42
+lLw6K1iza6l82Lh1Gx1hscTW11eLqnEcDiva8/w3AH/LoEQERPUiTQThlACoZh5o/qGWKQyIBUKK
+hITrkfoIwgSpV5PVl8qo6WswIssL+F5CLLS5nNq0koaLdNRRiVqSfX1rDjcYrWSlQUQ5gRp0d8NW
+bIhi6CuVIfWzTKSmaE7L1viVALY5hv8w/NhcJSDZbjGoUaMKiFh440x0GG4CPreyFa+AknKJueFj
+IIiSBp3R8KWN8v35Bhsh5c8ZYBJHBKRaoBusRqwXbvga4876rMdxu7qYkBgTS7VOrOfFUEgTINZy
+vFOFPZR/m0Ra7NaHdvzV/vhqxITb+RoL5Qt7CgCsdXFniZwb05yo04KwnZHXqcbYYTu3s96anv23
+avp73rZj9d16d0RFwEKlpelhH1heK/XoIjmx7bZ22maLSM2NCWp6tUlld55UxYSOXbwGL1Km5tBQ
+aetdfjHJjOoR65dmd/s53CfNEEDkGK32yPiFPz2x7d9H5oxVLhMRKbf0kufkjMtbPOHR/x9EJutA
+KboiHPBj8lx7939kn/v2zHyh4kzPWFamGiiLxT34oKPa610uLdW2kkV56Fy9qmOSb2EmXVNbSzs7
+Qe+lXyGS2CdT7NjjPyrRQO28uwc+TVe85OwuyeD/OBHJ/bn2rYNf2+gB4eVPDb/RnPRx+h45bIW8
+2hEp5Y12d7qsrKR2l7ObkknKpZzc4PRgn+VrXQFA2gZcJ2T2VPn5z0yi7H4/3PDdp5+q9hk16ysQ
+OP3CAwS7IWHZ/w8kbDv+eOP7kyYhp024oAg4+vwTsDuyv+06kQRip5b1bhiBKIgHed6uN0Lo85wU
+r9+3tX1nbuhdB0CcDesCNGxPjB/80xMJ24HjZn2zsGDTxpTBvYaP6vCbZpe9tD0iYdvutRu/nrt+
+08aknt2GjuoJu6fOhaSHzeiRsnX/S0SQhFBo14UFDiVWF4aWjYibGDOiTgFE0mraqhMCe6z+6s9N
+woYHDwas9d2shFtSIf7/GQlbdO8OiHEAQHYRo2o3FlTqgod6NY1Mz1RndAuEloWDh9swdfH0wRFk
+KTIJJ2zp5O2B8b//B4ggDGMVMUMM/oRZKfcgIgjBGmZyINYq+n0uyn8cCce3s43xK0nXiAR4F+Vn
+EqcVGAQhsv7OX5zNBQnJoVi1l393CxFERVBwW8Kw+P83RW22ALjFvGJbnjg8tWnCPDIFAGAFAlDk
+fzTnQxjNu0ERf9WoYx4AWHeNbarC5rJyFlLlMXv5d/dQI6PnXtpV+hM0JoV/iXhZswj7Hle+owop
+EFnAzzfMtpk5iISITEBbCISVB/EdT9hAiZu/WgigBlYzUb6ZKn4v/+6lvdQiRHERNHDNrFmJKCsE
+SxAhqYu1XKtiqgJcFcPNrr91krgqPdECqqKsLVlAQLY2DpVuTE0gaMB18bbxEyC9K+kq99Je2ksN
+yPq4k2rqrC2f67An5Z7U1HJYAyp/cVGgasXaolV5dllJcwFDqnz6guVcJ1q0rc3jaqMNgdauLNu8
+1m5aG5JZFQULCrkBoCV8TKa96+9e2kstSjZYXBtftNZ2L6xuuzTQd0tcOy/s9diYAxEbLGrXqXlY
+YzGCWrtGtVtBreJnVo3Ii+kQBlOhBHhzTKAsAaGeG1tvq3nfu/7upb3UsiQpMYnF5XFbSou2tEos
+ilMCZTe5Xq0KJaY5XFrTbEZB0f27b3ErQuHS2FA4uawozgGQo2IDNevja9Zs3lxCm5xmntu7/u6l
+vdSiZNskJ6zPTLZJlJkqElvlQFTmpvYliVUBVdKJPaubwfq2sT3ivM62t07ur5PqVJfUMkfAZYF2
+tTabbOuYhETKzzHbmpL38u9e2kstSATbwUgn01GkFSwgqaLZJKd5qdIFupcxveFtq78iG9fJQw4I
+JlmEbVsvQTTrrGwvrodGD422VnrpZsI29vLvXtpLLUUCkJAn5MFa8rOpGpCQ0WRgQCGiEJpxphWy
+hvyEPwZkoMlGHpMQIUSwQKi5UPG9+9/dRPW5bvbS/zckUCwicBUIAade2iUhBYJiKBLFzQ8LjqQ+
+pPoQaRJyAIfhMIioWZyrvetvy5MAMMKWucVQfH7zk423VNR46ojkC2r8hLRcTEWTrzf9PHbyQ/Vg
+jNtpx8hnBXtKQANRpRujPKfAzfCC+W6GFQj76TjqYi3VuIE6DtSxu60cTMJSGXTY+IgCNmhNA/tv
+pRs04NrYP5H83MCh7Ncub3Nd/NTs/8vuFBLjOICCbTZuwS9ii391K4f6EEn1xz5gTCSHi58bsR4C
+aNu37GTJGggbkc9vPcbOYQQJiUQh5bb3ePSGPYJ9oeaHshML29PqVllar85sXR7ruZ6wErVuc8fM
+mnzbbkVsu+XBbs3Jz958ys4pj7cCrkPc6phUUkJrq9uHN+duKuoQM6drTX6HLP0n0V8JYKAAaGpu
+7hXAWkXbXheQ/V/H+ghZdip/mFKUfVJ/2xyHwFrQ78Y6/HVqAsQgTdJyEBo61hOsF64ozspqCkxM
+O1ky2iYLCDWdVXemTkIEz6sptj2a538CkXjhqqKk9n+YoPMbZGJKlqKs1uXitbWBRfkZOqUm4Nt/
+N2UFk0pK29du6FhenbRtllJ3Xfjg2gU18aHWBe3nBXusTimLb78j9t89kn+FLBRMGDEO7LaTt5BY
+xajRTpwDWy9dCQmgHYSC/0sGFrKsn3p0DYCHXh5jmsHas8w7OaK3T0Z9/1SsYpdB1qsY21tKrqmO
+JccByFSMvsgwqv5dHFAuW1N2Wetry7cUhWufuMg07v1GJRPf336Himl52S1ODDMBbGxVv+ux8WrE
+KmKAja1u89BOVVcQ/s/syk1Vob4zmt8xWs77Z1HJ5lDtVffbPUKPY7LXzxmSbik+5JSp+LrNiKHp
+B9c6AmU3OV6tMU4x4ot0q2aqYxPz1gVKszY5m6pCqU55ZlyAAeSsjNUV6+Mr1/DmIG9ymmnGPZF/
+hSzj27enrqLuo88aug3agpCIKnr30/mVqV0Gnrg/jBIhITEQxc6Gs9dPyfjfdaeQ5cLTfsQFl184
+s+bOvwSamXt47Sslfx3VskUUvPLR1qM7hGa9svWwD8SqRU9HDy/75CsAQO9tmpU3vVxw9BF+Gtpo
+8oAdIctfvdfgMAWY9E6D48OxU5W1av2jAIB+1HxaMcvff+JXcJfwWVuOqC7YPyElxanMqu20tqZ1
+642pCaGM9cq3/5YHQxlZNbFtVifHNZMkXGd0L2zbb11fm9c+WXFAip3ADtl/90D8diHLxVe8hcz9
+vUkl6vJ7A9KUga1669/5cOEBOObhrg1yLZS+d886TB1u/nd1sqg4bAbuvv69U4K689zYbRzMDS84
+YiPip/e0LVlGoRnrKp6aR5Ahp2dljQI2TTbjXwFJ2vl94g5IFVDx14ufL1Hhg4/qfOzSRRvuK7Jt
+5mY2ZitLaw5dDfXzCKt8S0gosIMMbHn5Aip+YjFBzj7SkX1aY90slL08hWH/MiZoB3baKWlDUPl9
+xRvfu+EnLzaquRdYXj1ny8MrJTh1wP+mwxvnX6gKk8PWuJbZM+RymJSxgZBrDYlSHosSHbA6YJvF
+sxNHaTgarjEMgRLRJEp55Gg4GsqKs63912TugesvWZQcNxl3XBWPsjsfenTNe42DPgVWPXoVTr+g
+R2jeM+PUF7M/HmZZQHXjSjbN/74Y6n8KTiiibpyBMdfbdQhhTJxuOq6EcMPGAFUv6tWiSwZh6FDE
+nKFg7jwYANDmJBw/fp2rD73bv4z0M3DgEeH7/g2gd2988SM6tGrcUCI8dnWA6+btI0Igo+54/avc
+HWM8RrduwPz5rtf1Rf9Mhw5A6STSrV5MiXx/Z+qUdALSvtOq33aSbDI6d8bsFcjstoeYQUkLIUQC
+IhsShibUsbfV/ksUImpgxvX3KAAgIO0RNEEDBgRNO2b/3fP4VwC+fDKuvQmGUh4sfPPTm+9rlOCL
+jPrmX84L5wDocNxlTwYKjp/S3rKl/BMBxGYUm53+cksU3vL85yhwg8U5i1Yfea1su25weL6iUNyg
+lo38EjJatYEQCj3rMEiMcNo6YJM2SpGAJOxYc/q/rSFlpXYTMAS2ceezzFFcp4YLEQRc+0xZKu3Y
+JCNkrWA+CMPEYzDDWqOmgdA92SM/P8bO1EnCaj5sq+7bQaARsobWAn3j9hg8WYYoAUhcYWMpErFP
+wrAkSiL/6oHxhTiaG8lPUQwCXIHv+eE/xpbYknDzuYP2jImrERn++i1qfYM1TNreHkePzuWG/SPs
+XSfPnhM21nr24f7hwMabSISQdulFd3+w6nj5H24HABJ8pGVwX1DmKz9d72BbBjDucSYU81huyw45
+gnJUVtACG1zFRCCHVHsAWxBQBCKBY6+Pv8eKqwCnYA1hSFOTsKXjTZ26Z6AwAIt5BcPTd7CQBGa3
+fCUEg8DKYYBVwCwFMMw/3sn1F44zA+jSajvFIMCtWgoM/v1Zs3cTkbbkCbMNbCxZW+USFINIhOpC
+JBzSKqRVSEenMxEyFZaIwQzl/xU3sLYgn/3HuK6OpJalloW3PtaI9rz1F4zHIYenaAUo6bTfN+Fn
+npEGKW2MM35uXPmWVkLi6sAl/zD0we2dLCP1if91wQGIwhfAfmQcC24OdZKYHhm+6Yi+tmWyEzd8
+M9LSCwjrfW28gCkEQXl5uiVASDvvzb6+vXaERGRxHas+TW1MjLF91hw8xBJBSOgdDBO7w8NDZFUB
+afSPyspWbVgJwYBd8kETVbsCGC7bW75FZNV6tgNauCV3vryBycGOk462EvRWZwW8KlfVUGyIlTgF
+Rf24bmlcu+WN7b/OnLAMIQnUUGxlDODWUOyaWFSWtK2ODZMSLt00OG9Tbl1+h9bVywLdmmPgPY9/
+hZf/AIwUECCWBnxDn9yZ0WgB/g7hq9/4PtmykOwXU8d1EztaIrGw4uw2RWS9Q0mzZ+tzeHH+GmAo
+SFiEKeozIQDEN8GSuGcBu8FKTZSaUkBYGxHNjJr4PRkUl6T5IEpcc3Pa1ZaFQMBM2Ha5FJHt6jdj
+oDF+yUBGrXgVAxqbubbjMeNfE8yD0hk9iSP3ypJa1oG+RA3MUU2fjnxfttOsJLJ+Jdv+9SlzqUlj
+kmAebHyf+rSdv1bERu9vdF8DZ6BdNCPbQHFtfNFatC6tdavdjVXR+F+drW2wpH3dho7Vje2/xjql
+K6nN8r5rdFqetFnn9FidGE8xiwtyOKaDZ9qEQ+Fe+cEeG9uVtquuSmlma7jHyc9iZUJIoXOkn9AB
+TuHUhvYBxiaIM/t7siCm7GQwlpMQwOyo3VUdEVgDIrK6gWeRCKwRIhIjEIEYzywugdvTGmsJEIg2
+YrUBDFixEIzWXihkSERMhKyfmLr+986SCaYB2CRK/JKN9UioqjiChMavrLrOt6sJ0QygS4oRbcXo
+iKuWGO1FSgZooqvLgj2stZESiYhfUxhpblNMoKkgtG9tozs7zASjTRd/my8CY4iIjIH4/Wq19rQV
+AMaImAbNKiIw2orRgoVhcf05QESgtRVjACusWIgENB1o09FHe9taROt3RpSkQQMLRESi95E06EQy
+VmhXndZTYhKLy+OLVFy4qrA+/leopkyHAyU18UU18UW1WxcZ8lL2ryuNrU5uv7GNlMRVpyaVZ6bV
+1IYLiRxXhGrKLDYGpNANuSU1bnMl2/PWX8J0AEl+qiui9hBMPrqBuCmcBLd+JopxQCjzn9t98QIR
+jxHrKQdSb4+OnNWGXYZlgJTCYqBHbygABLGKASgYclC0PjtLtmbek0YJ9LY6p+/0AkAiHSYBZVWJ
+lkBGff7jsBlgUwABYKl8bNuLIvl8VflKYJiBUgD7WX4b5REUcuSSL9BxgJ8ckCIuoQyj2XWazX4g
+Si8EMIQjllohmg5GjwR/GiNLCtAmEPXHiWSTBGCUQn0xIq1qHL9oxs6AZHUTjrS1A4BhRaFiTUoH
+AZRZBAwK+DuESBdRwPGT+jZQhDRo4Ih3a+Q+JfCfE0+CDhAO7JJYFAn91V0LqFU8B1tF4n9Btair
+S66KabO6sf3XtE/2siGJtXrwhuwBXpKHoGxu7dj4jRm1yn+s9fr2ofz2pcnV8fHNaWb3PP5lWgKL
+9KjfawIECxvFXshZr9Wi30F+r1aGIMjazeZ7IctqzYffrCjNGXrcSRRhA5BRKu/j8XMrWg849iwW
+EkwtD3wJxEwIs+mdA2FV8vWMfLf7MYPw0dM/cMrzfymdVLK5uKxkbA+r8lbEBgI2rGtb97aEabVx
+QYSqu+fs9PgRoAMEJSUJgADhG7LuPaoOyAcgZJwnNr+QaJS/lq5er0x/JT98vd5mjhjjCgmoZkLR
+luLyomuGWqaKSQ9/7+jYHz0i3a2zAGTJ2fLp1zOLW/U9/G8xzTCwcOFqCAZHM90KV66ERLeuZBQm
+vT85T3cfduYQ39mGin4p3VxSUnlTb/z0yTrVaugpsUJCEMAoJzT9x9WVmQceFzML6JVoCUKWVO33
+P+eZ3MNHY8ITX5jAnVcKuGgpyWCxyu+Mwi++nb0pqffos9oZBs0piw0qHTZ1fTMtVc4IBgOm1gyJ
+s3AqPv9yemFq74PPT7UMEZX/9veLiqnPSSfesWjSLjjvEdkO1nYyHWG6s5eC7K3xv62yPdguVne1
+umu9/ZdgOlitOomwl5KhM2AJglYikFTDotlktPGkT9jtE061neE1V7A9j3+pdjUkLiF6GKMsiszW
+pG6k7L4TP0k5J1UYIrKiDBa9WgDi/ldISDg09h506On9tOS1g17q4Ps9kFFV9zxdyqOdySvef+PN
+NO3OHAkAmHEggDfOCAfqHniyEADG/r3kg26H/FD00PGPjQUA3E6Wz/0RTLCCC57zgnP2ATN5eOMM
+s7M9QqC2EJSVdLBC2nlr4aND4+oI+QKBVYUP9jojMu8IFmqK2XfKhQvhaDzx5EeZwtp59RIAwJUw
+fM2jFqQx9yAAuP9ao8go+/Aj+div94zPPnv5vU7buFOJyLJiNqrf1ibLWwvrq6+EjFp61dcYMDx/
+ypQn/3UXADHOHY8DAB6dfeEsuB7w2McdfKWAUXUvPr0IcPQzQ+/LA4aKkJBlvHD/CgC496TMpzMP
++77mgSuUkRVFLP0BEjKq+oGntmBIt9Xjxz9+z3na2TDUQEEs8OVR4ZgnbmRxRLt5Mf6LhvWa8/XX
+L77bzxL4/tur++4XX/v9v++ozN0FBYpYQogQIg3SaLinFnhhBupA/r+t3whByFgimHAEvBIeAPL8
+J70wQxM0WYSasWWQlT2OfwXFtYBTz5ABZbC5JqGBAprt0KHRKB76VLs6bfRuhtEUqRnz1Sk39lJY
+cfqsH46fmGCJhIxacM4cXHxde+Sf/cO3l74D8UbHlk4T9M02iNlfAnknT8ell+UsvWz6c3jlnOe+
+RQ8kjFqb7+h+ncVBZ72kCED7jqeAxXZZaS0y+47aJYVEW4DtxoECy9U3tznfzSghrAUIlu8veznG
+l20JmAHp/v7VA985MHHa6VumjH3agBA4YP06ZTr0JkV1I5PWLyAZnGGI+AgQGbXuvB8xZmwPlF7y
+zsyzvttGyCTBHLDO7hmVwhXme8ok9CIikFWzj9n44BmtgU/OK7+X7jZKCCmj1q9z9T4TTu352qHJ
+C07ZMPe6d6yAxDhTL5uFYy4aHrv2iWeOMiQDfPm78rwPcfyN3Qpu/OhDjL1x6ufowlYwCza5F7GQ
+duadNwc3/KM9zPcXrvtbzaVSO7pylgG4R/ehUBKTXE4eOh2VRUX/+AiH3TMINdf9d+nJ05ItXfhC
+z1eGAai58nketdPeP8LBnVhFJOCGTKzUuW5oJ/wWyAnscfwLqgg3zkENVIYb1ZmMhWIBLFW/D8jf
+W5ndyr9k1PVfqS2dlJGujxxs575yhXaErFp8+Ebc+x9Ym/PIiNB7Vw83+/xAXx2tzAvDAEC2HLUI
+lz8ODL3nUEVdMOzgrDvkX/9aO6IQXQNa0QtYsF+l9PglDXBl8PzDJyXfd2rSrigUCW3IKOQDZNUL
+655LsKkA1hOL5dVPjzzW+GKvMGaBVl195cMEjD7wLf4hFBCF888vGrEKnZIMy5NCty2QxHe6+M2t
+rCo4cgmufARiUh/9ruSXr07UTfxSBDQdgrKTowpcUSshyO4oDFgqP3VjoLa1hRz/88Pq4XO7WlYY
+i837rqS1p573TAAy7Jgn+OfyZIEY5+3za2Me/QeA3k8n3c8S15uIBN6pX+GIjwhJj46vlXaq41/0
+fQBoBtCxrRAZZ9ZRmzPePgQidNjLR3hXjxyQ+508cUUgfOHjLuDaqw/et3rQQ8NjpfyESTj9VUds
+3ANfrV7+xmXqvy+kf9rVikjcvZ8V9pOddWulmvhgo0G7IyRu3vpuqbNj+q5f3yXL24mZw2vKv9vq
+8htd3f1+LoKwaRh/RgSETQPZgQDFfhircV5e43rdrrO7V362av2rTD98dbKwHdxmHX1/OYQs1h+z
+Eef+RxMr06vjEnwzTMSoGTA5uSIkoq5cpDJvM0LolFSGN0cO+A4QyzECDBOQAH17TUUtwyiBiQnJ
+m0dBdjbUHQBI0lNKCRsElkrv7HGmdtpOA0rrYgR0e+1dykTTA2xeA1V16SOi2XAqrK4NWpDlIIBh
+IgSxajLQrn3E4mOl7PgldOjDBqx01oDvaNwJ25RRhZZAUDm+8dn+QcOAdT5a4YYfuDhNxBz1MIem
+dzNEsBzPUBtOfwmeMpwCa6qThI3z7pmWnj5Xg8nwDW+vR5vOwmLVg185zj3wFDI6LsDr5+Z8Aggp
+bykwFFZZtejYze5Lh3iKSPSBIyeE73vHGnX0VRoh1zBBbIzOHZcJbU6bxANeUFqxF9x3FX19acXD
+dEDXkMuAJHUuHISdHErCVeGtErPZQSlc3C1FKV5RcMuWomTamTTfTeXnSN6V7dz863HYkdD5XY7E
+9GyjKUSAbWQLv5TWKbidddJbqWb3psWxPLvC9bg7CAgEIZ7vYHjpGpV8tyEGoNoswTIIfMtMmhCs
+M/1tRx+fph2jqkMkGynsCtjQ4s3KDAQJieEBU1XeqkEQMurN6VceFXZ2rRaUnlpKWAdY59GiZ2ND
+qiMEZaWttTP/9SNG1+t3ZeVGpfs8YMgRVnlATLy/LV65VplB/m6/fBXQN+A7b4uom2Y4zv0QBYjN
+hizbpphWbVgFwi0HhSPqZy69sITtUF+bJd+T8ronCkCxAMLix5CtWU2641NWXCGVBwQSCUYtuBA4
+7VzPIQETxwEDgpaEN93Per8B1hEOVQObyIKELRcsYTsAYlFx8kaceKznAGAjfSfgm4JsI5mdV2Ca
+YQjAN4eeywyzc/84x9wb6zmA2BzIMpqzFmt0ENaQUjU7r0khk5mo/exFhgPlRTu4j7adu4XN/jbU
+uVv49yk+os4IjR8SgiHeLuZFZJ3bLiQGCfz/t/NJsjsC2sIE2PrqGwGcZoRKIbFywRZy3xisnd0r
+F7B0SynDf/oYB6ioBLIhZNSHnwfC57YxCgBTDVBNANcsBgbAOkLysTAOFxKRglrXay0MIgHmw6Z3
+970aqD+UWTxIyFLpNdljrRPxrthJIklMAbCOxCl4ZPhfjKK2EJSUtgbdbO+UiI7A97QwV8VqJeDw
+GqCDa5hEsNBQbG8igtCaPGWGRXzrDU9+zvWO728dAMw1QHXTQgpkSY0ywTO61Z9aXEo26o1FI96s
+y7hHiWJshqANQBDBAu16lyVrR6DMSqBtoiXSF1eouFsskxAsr1+lzBCxyjrjywPhw8UqSMkGkiwB
+gUVkSQ2p/iBRdy1xcIlvmhIgHk7ZwjYiCV1XIL+gnWWjxr1/zkFa8bJ7Hb3foeJurUoB0Zxj/zUi
+ngHdflDGLri1VofF8ZRwalmYdjCgUSgcIlSDw6Hfh1EiAQFAYXIavw6eA8/dDtyBjQ+HSLbH3yRk
+Wdhs39uVTNAJmd90Zne5oSXXCBDcdk8iJMa56SvEvHGs3t1J6Vh6Tpw0cB/AVFZO3kIyEBCqGwvj
+nB6xcplSplSQVSsLSIb50XeLoZ3u9Z4NhxH59uyZkM5Z4ufU600Wc88ERN1S+GHSrkoRpJ02AIq1
+orsr71YGyAE4tLmX+8tnpw2OtjuBpiOccYSwkFHr15EMEX/amAFp21HYV1A7UeYTwh2eS2dFmgJF
+TGlNZ2jfW8NkZ5vIBaN+Fken+d5YSi7rVHBUDhAurfkWOrFLBOJjBnT8cb5uuWglMETEOh/+4nqH
+dTdKCAJZoB30AwiyCEBPgIyaFQ6EDyGjCCSYBUnrQeA1T7HuNIyiDVgER2+CGOrzlVOxvK0F1VyR
+dp9lofsrAzgT1jc5b2ZKQ1th+vrrjiP67T/c/SAgu7ATI2GrQF3SJ7s7qouiKFrdVtC6HSEBLw2R
+gurS2MGVhBIc0WFpnkMlJrUiw1aUN8+CQlKUlBAqSYzZHtqYTYk3aWVVv87AhKDyZWifrAAJgabT
+mUCM8/rdSH37cK2wezfmAuh+/TB14vS5qwEQBggZ55cFZHCGE8lYtQzoDYgsDCnq6y+0CrZVEkig
+P0W4+yER3ZE3B+jjaAcAUZeMLZhLrJ1pTxx74m9PbL9ZTukEQVlx5tLnDzvIsEUOLCNf5ObgbfV9
+IkrPB3pmWyKBLKl0vYG+zIzZQM9Yf/qdAZ3enRgCWLXkR/Jw9Y2RHlkM9NwGC49oOgg9EqJxuqJm
+gNA2WyK+H0ej+tOf58wrBthmdxAChDEXktsZTCKyYrPrDYCwPAvCX0X8dHs8HTq5tz8HQFMWSIQ+
+hkk4VZgAIZoJdMkQq16vCoQPiDG+k4+ijdFonkFgvfAgWOfelc9nGVKFH8HD3U/4VeGlFt0xfP+f
+HdJr175DA+84yuwSpp9T0n1pSlZwmtntWiJ3U9xfiqpTphVlNZaf9aEVK6lzzNTtbMSkTcZGyUzK
+254AnVwqdarSVdLsVRsXU2ADbXTdr6tYJT2mJpJlHACMJUmP3RZ3QDvj/iFtPxymFQztzpgjIbFO
+xcuvzwK6n5H71UzJ6koE+R5Kt0mP6hxGS+YpYMFcmC4d/Wy1Az7mahGP3fdmkzyRaBQA4bwNwAh/
+i0E2q+0WrC1PFn1l3AOCHQzW2y4RqD2A4pKsW8J3CgiSEV9NyMNXP17erX5xFy5YCz80gQSzoeN7
+ERGEN68GRogAPit3aGN92EqZEFImrR467QBOuqCpklxU1UqI/7R/bBYCGKKM8j0vFj79SQHUiP4J
+z5VhYMAwIFy8HBiiDPvGJ+32JeG10ymcONz3oRZF84B2bYUAGgSyYXjKnfuJMvfl+o2papYBw8Uo
+/Q2A0fWuI7Vr4CETROgNg4UQZ8l9+55n2MqUMpLEnKgib6SKu9Kq10+fDCAo4dnHvnVK80ABO0he
+WnVSRu7M6oTdruYlnVGwPLsqPtRQfhYyKX1WrDDpuQtqm2cxqTV285YesdXNo4lJvJQHJcWxzV9G
+WohVuCK+9teLRmnJJSQ10eNqUSazKeKmkHZmnlnb86Me2hFydif+oJBY9eW1S5B2yendFCYAXTOM
+JVoMwlXXNrqTLU0DuiQaBlj+/tTm6reuDWL6vyDPHWJYCGJpSYUy/SNSt1UD5vD69Unq6al3dm+R
+TXw2hGrCS98/eahhIUpLrwY20k3J19dvrEVkWYnrDfb1FTQd0q6jcESrZQb49diyGhisDAGeA1oE
+Zc54vHFNm7SRrPW9NeqvF64CMEREQJbt2IeqMPSyozKw8TFlBosRRSKr8x092EfFpGmQzG5CMqfS
+0TkdfSFWuDTC4aLsUUNmqtdGxWD1BbW47pKoJWzDSrYDYJ2i5QhH3KQhkPUrfKswqH3HtZhNhKu9
+/ypDgsVww0e816js3OGnNz+esjkEOPqyQ9J2BdZI2arYjuVb0v+ACHTSq/pf9u38+Eb6K/Jy0a28
+tqfpNLc5qFlwRZli16uLqWy2ksKhmmAoKdbbjgxCZSwg+1urjHDXNSRliGD7VkCZrmKcrVgFvj/g
+6pNK9n03RzuWCm8/YMxuxE8Rqx76F3DsI7kQk78A6MNQQB4EXSXa3QIhslyywvcXAgnVGMG/p3Zd
++SG6P3Csifpvz4XJzo2MNJEBcMKLehXc0OOqXZaeARDaQkjWv+aM9aO3UlLyCGVfzbutTf3sQIK5
+MIE+/ppbtRzoGTTK12qZ5B7EBJGVBY4eIiJ87opv45AHoJtEW1i2NUOIYIGnTGLPSByQiCwvYs19
+QQSLyjM/g3PbtQFofBNy0B8BQARzYSPIGspbAnRLtqANIPTw538RWb3e0YNEQBahEMyL6wZv+qA6
+67aLrB/YJbTAI7cvkRQXkaS2jeoi1BTP9Ya1swSb1HUt1ubnvPP1VQONEqE8ELrWVwViefX0k92z
+z65Y8vP4b7VTNP5UsysbYFC79UvTdttIbNjkTu68W+OTQg35l2xMx5DuZas5Z3HzG1yTWGEpNnbL
+9tTTJcoml1GMNH9ZNqtYywklv9FARg36VtkNIkIQkQ0ABkdiCQXsY6EatfnEvMPeTdGOWDX9qfgx
+LQom1YjIqLf+pcxf31GesmpVmTLDZM3XR3ayEKTVR7YxIGRlxRa2g/2QOH123VcffvoRsO+Ys1Oi
++yqi6UCXSFg8AX1gMfeUa8s+iDPcAj7ckhlTR3jy67/3NEoI1kmHYPa0Vlds9VgWoqmw7ToJA8Jr
+17EdISJEoGlA+7ZCPisL94VwybsdYrUrALYOymawMwmYCTY5HbbOEXPAOrM7kQB04WeufuoC8ZQ4
+c6DTetD3G04NCk2DzexOBAgXLCcZLgKEAbSNhPsK5sFyfxCJqH8veGf+G999h95jzu4YaUyyPB2S
+1Q0EDyTxaf6aDKLPQThPrIKhXuNV2fq0a3JusZFwNkJqA5xsln99OqKT5yQNH/6vd8+vw8ZdA8Kz
+bezyRPUHgAmIs2VgoDqhOthYElKVa1cvW7xo7rpmd7AEZPRISe9YVdU8swglm8SEtPLtqOBVSZ/E
+qtjsqtCvj1QCHQSLdf4oYayDjtmfmAiKlfKDYSxXjZl39LuJIWijZYWzz26Uny0XXUM2+xmlXQZm
+CKEvnrt0jWSD/P8IZHnBX+eSFczXiOlNILE8YcqYI19YvmBh0aQrUnQ02pdrFwMDEWkhpi5pGqun
+vn3GwS2x/IKQlgbQ1yk3CYFAIp0gWLT8htQG3cx1S4BuCRYQkUVhhQEAQZReAPR3LYFA02BadyWS
+VaHD2UpbRMxABBIpGPNtU/cEYZoNwoBApF4Cmg5CbitLZPiTd4LeaRd44pKy04F2OaHzL4coswjI
+bWUJIrK0ysEACKQVgJjIYBLMgE3rTgRRq18aespdixbPL5x7S0cdmQv9/XHvBMuUFm/hexIKWVrx
+DYcHnSSKiDAYyq55sODRFN981xZS32kiFae9h1m0mRSJ8fQpRxtk7az7BgAQy+qVcXHCRLvymh35
+km5V+/6E2d/XtdKN9FdmS3xI67BUNOuPKERr2mZySVnzY42AQLryAq22MxRt7FIdo7eEf2ukKtm/
+60os8KPLmabAjupgSYQ/eDf+6n6WhazYsyde8JwfIebgR91RaGuyDcDPPNQy2UHEOp9tCoRPTfdc
+AfARdPtc+iW+F40cx8gXIQFZ0RdOvUmEMBu2S1shAeQbcoDUVAAWEIIQxPLKfJIhEbAjkGRnl2D2
+men32RaZgPwIfjKXdNCOEATUHmDp9ne7NUjfcl4eyTDxm2sGvJTuYIjlgrUkQ0QEYFkGZKcLMEUO
+FNDIZ4ANviO+tc4/PzivYVl9e3/RymjwEUEgKrQEwFCxSkheJONcbIlhefE8toM4P/+4oFabIlsN
+geWZ8GJ6g0D9lEUR+Z9iTANyMy3B0o8mCCT09BvTRxgQoTIfO0dJZs9ZEgq7EEBM4OEqFXwiYBhC
+6AMP/511xF8NC4FoBAzyiUhAYtyb3jlu/QaUWQFYeSaFEiKqs50bKXXaFLaKrSZYyG7fAneFAORJ
+I/2VLGQ/lrvZDCQkhPUEq7bDGkLiA201e5lsQl2so+W3FxoTc8XlNKEmKAxDK+eQXMLaMfzJycC3
+09paFlEXfZyorvYYANvCcck58A33YpXP0pZ2xZDXpNbTSLCvJhEdeHuao7snFs/p20pOvEvjk1O1
+JdGOc/3U2wd4LDQT6BUTVgTQWvlwvxFMboIbCDB8Hz7DS+sU97cRVTMZp99CXonHc1rIA8UE0sE6
+60pfXCYgB4DckKB9M5eQWMPLql1vsFgREZoJdM62JNbQyhJlB1khAXvVQCtrgTcS9ocjh2cW4bNr
+xbAYcp744IIjGwZjk1gyzoYNZGiwv+WxZJzNKyEYKpZIlS0R3aa7sBjQnbWB8CA9R48yHq8qdr0h
+YlhEaAbQNteCbe/B0/GLR5agSd06x/X2gXEArKVpDxwTIJUQcGMYlghircpbx3awWGUCJ83kTSt6
+eS6sDXz0Ipv/7mOUEBF1zMnnKbGP+Mp9lv26L8e4+1grMXDf/+9Rp70GzDlCK0Azz5TDdwGVTJye
+moYYS4CoTaRaYDv0q5/zByc5tDXSCQQb+YXmV1hSgJLtqHupwX/NXZZYf6PV+IltSdlzX5qz7ulr
+tAHz3WE58hijBPQ+u7Jx/N8Mibr1WVX5zNYHuqQQSIgBhTUgLB/sRmrREkSOMBafKESBieeBkeaM
+rz5VhXtd+pD78ZdHA8T65nvPuNm6wNIlbLMRAAQmHcVnB4nIiUnPHXxyb+tH94+DyWyjoqChIgPf
+csIjL2wh/08S6fAz4+pWOuq91xbsDTkl+noSUgqfw1IOB0BQaxeQdHIB+CVLzFEKJFYF2ZYqpo9n
+3JRulMm88Z/upOcvAIjxyNUHPt5QWCAhBcYnUDqQygwIFBjjqpVFBgcAUcJUvqmVkIPb31UWHZ3X
+caSKxecQtPWLsWUW0CEWgHVvPtZZ8dr5ABzccTsJXHIBSCvR/76JiVQwpVO/E0dCQErha4CzOQC2
+F7+8PHT7uwFAqe8v8vDIxb5PD0lyt3wnfH0PvwXIxN4xxl16780AMV49t8+rmAb12mWJABzcPTtp
+rOx8IBtJrRf9zZUVuw/IqeE3TSu6b9NOq34IArbbZJv7HaQzvdgLmuC3Cxk1/6DipBdOBvDixV6n
+Ce2ExaorH3O1fHG0gXr3VNduRWZVoeM+NgzQPYtdWvYLSJJGpLl06bAWyXAgliceCCfjhUN50wtj
+j+3yiNv6wkfTZiYI1Z72OVJuOLlV5Q8Pzf7HI6769u3AhBVsE/dPl9s6h4NTDvZ0/Vti/j3WUtWt
+FVu+sET7dzjsDN+AadQ3R7n2p31aiH/FqFvupE5zEiLbL8Pzhoj9/JitquOaW0tLPjeEfn0SH571
+QmDSEpLEw+IOO+OGzeWfh4mGd9n3H5a1c/Odbtyrh0wY0/nnJBAsXfQ8Av86u23tpMcmnPB8WkMR
+SqDvXOlsHm9A0n2Am3x7Kt0/zykbXwuSDkNj3Fvb07UPKjngqS5m7l2f3/7FdPfg3g9d/dANhRWf
+h1h6DIx5cO1jgRlzSWIPSxr5DxF1011IeWRMTOin+3/ILAbiDkq8dHg4uLlvcQO7xXlPxJDcu7L2
+82qW3v0T7milnTlHb8SYK3vRsjceR6eHj4+ouES7lzxre0+Lrc+pxjfeDVx2QWdv2hNf7v9Ge3vY
+98BBD/Z2QsuefCHxjeN+Z0c0wm+nknB0wIn7B8FS6Sx6ovrXS/wrvBkm13quCpG7k58nG1uS0Ez+
+BaOmnrUSfxmN777EkDe7WRaylHfMQpzxkkOWj/+s8WuueUC7Auq8puHJpy7WLRMbafmN/xQAmW4+
+Ln20cMgmYMA73S1brrv5yVogGEKre86Hdo74pv6R5V1o4iOfIkgQiLZQBs9eiJ8OiF6//1q/bJbX
+9Axd/rjZSYDVbUg7T1+C5y6ISuOW84ZuPmi8RF9v1JSR0VuTi8fUJ1x56OT20Z//vk8rQdlxvwCO
+HvBBrmUhAd17fykQDCF27LWN4XOMWt69QQHS8uI3tw816OC8HAlf/bwGOpSXpTx+1st/A/D3Z1b2
+qL+h+qpno7+velgr4afHFiIhK8/LeOLdjwEAPxzAix54FQH2UaxAbK58BPlto4/FbUqAVYuu+QZw
+rEX6367Mrnej0urFC/DVkRG2FBLhZ+4oAIIh4Ppbg7a4Q+0t8z9Bm6QN1Tj47mG/tyMa51+o1inR
+C9syzW5w6RCurWpN//mNqWK7TED6Oz585ayhnb90D3B3cgUmg7Tzm/IvhIwqevS9FQD6nHtZ0G99
+oYrvkg+GkGDqwkb+lObATsIC+nFLooog2xhduV+7FsowJMJbvvolvzij/5k9LS9/rXL0X9iykGUs
+/nR+PnIPPi7JEvBdYYJylcBUJB+qHvq3PeDyvgpWdOWq8W8Y9JsWyP8h3nUcHdLhI9OiJhJcUvpC
+XIuBCBr10wEHf+FGR6EgPHjNT4PqbWuWNo2Pd5Vrwqa64/7fFyQql8OerjsWn8UFlGtCuu6Q1pYh
+VPfCxMK4wy+OsSwkJMJrP5m1wesw6sRW0liBISgdlxRQQhBjTGXHfVH1tROrfNOfrUo9REBY8MWi
+glD70acma+fL8TF/HYItX8e6jmtDpqbNwT+vSVKO8sKm9uBsyyK84b0Za53OhxyfeMmKzITU1I5/
+ifno76W9rh0eFLGmOm/Sy2WctLh1xRdu0HFtyFR3GCUEo/DDuGVFSR1HH5gFw/UbFF5//mH/qmdL
+IRHe9OnUvLq2+5zUDtopOeev5+Djz5fqzD7H7gujfiebNcmfolMB20T1HD2mCApoC/U0AAjXVrSh
+++tDrpu/qWj75iwPrtWO62Fn118AbnP8CzIKtWsLqU3HACz7GX0tY9fiY3eylWhrSHd0IESGdYPz
+TQr16rk458Wt+5I3zzGt5mQ3a1L3v9BCdRLSv/RNayDd0gLbf3vO7LT9t0SHWQRwp3FNf7Ww207F
+2LqnjDRfo2jtbXKo1X+qXnyadEho1MdbDdBTjyinn/ZtmDSWBLT1paZpytkGR81Upb7vxP7uzKlN
++TcFFCDj+dpxgEgoCBsWkISDAnAg5KvOW4aNubaijZNUyZ4hCAeaYWCyCa4WIvjTboOUzOJjBhJJ
+idqJ/a+wA8A0r2YnEWVtbM+eALS/pIKErSUmgVDT6Gj2hTyztaMEO5u0o5nCwP+ytcyANQTFQpHz
+zGKFfcjkiF5PhGpvpTYPqbA/AMXyCTeuUxS9QQDVAHhYdi65dfNlhXNAg+lASPo2FHeFxEQ7j5Rf
+HAGgYKIlYxYiYTHMYuqbHmwtExlh3pbhTL1XHEAKW48hIBaArGWCFWbACIibKUb02w0aVUFErEDd
+Fop9OC3krxEiGDH4B4dJY+sr/FndSH1nNOTXRg3cuDN94xU0KVhL3AK7GJJFlVntHQkFXA9sNIfn
+SFrHANuSqYfEia2b0xcKnut6O4O10ZQEAJxwmAekW1Dt7LptHSvIhqtCQdHisGczqjw2BFEIZ1SH
+iEIuC+kMt+73B60KhzYSJClBN3uZIKREBET1Ik0EcZTQCBi0/gHa9nRL6Z8BYoGQIiFhimrnCcIE
+QXT+rv+8dmaul33TvIAvy7PQxjLKyWiUcSHqqEQtyb6+NYcbjFay0qBTG4HENmquhl54EaWy1M8y
+kZpCmhngjV8JYJtj+A+DQYAoAcl2i0GNGlVAxMLrZyB3sAlE1KUGdfmU3KUefjZaZIiSBp3R8KUN
+GzgSqiek/DkDTOKIgFRLdIMEfyofaiqXx/VYvaEDlbbOoNDs476NsRu7xLQKz9HtZKJ0znO6rFnf
+rn3LWPwBhyVxXwqHYjd7bBWUGLYEsCG2xIaozgRWhhDoYLxwuFQSwghUKdcL17G1YSJlwjvBKMLh
+Zd0MBZZ2TNjO0k3YnTEJv5+iA3kHzF8AYFFApJUAsNbF2HJcEGhOnVY/GbRUKUk1fB/t5M6a6uv7
+mzX9HW/bsfpuvTuiIhBLZdXxniIBRDt093I5PXNbB6Nmi0jNDSRqerVJZXehpnrDoNzaj3LXYaOW
+Ca3WHk0csy67bFXfH0atbL9gn18OSuv4S6gudk31iBbzsWTyutCWstKaPLd6gbLldeyxga12bLUJ
+lQhATmFRTW1xgUMkfUaF23UM7defiBRJWjDgys45rKiyDiNTnMwepbuwc95jScngXEx50HGIiEi5
+m897HRdeaHe3Rf//JpHN2U8KrrYuExGxG7rlFjn4jj0m32BjEqftitUbCIC0SeQ++1qyNe0PSzIE
+sTauXW3QWKQclBNuk9Ri7kXqKD0o2aqY2vVVVVty7NJlKXkJK4OLljob8wJzKR2BapMcn5KSnmEl
+vu6sfWae3n/xZZ1/itO6rNaArGMSwjuBu6VqVKE+xS7kJIkbFLNHrbS7TmRje3wUHr84JstlVM9/
+5sJJgWsfJtq9LrH/V4msGvJp+axJgawgI7T8jYs/wFkvpUhLWdx2jYQXT44DEXRiBlHYxtoc2ZTQ
+Y1OrnjapTUIxUoGYTpIUs2VwgpsZSAtkx1X0rStPik2KbxHxmXQo0bHBIu1ZhLUHFV+oYrZkzc8M
+F3WOKeuRVOrrAGNrLSimVkCfJ+c9r9a/VSck1dnlYkOSsMuF+L9Houxh39048f33A+3SK/OqEXfu
+RcPtH684/79BomyPH6774ocfqF1W3YZS4MTzj2o2g8seQUK9SdvhEupmw7lsPAkMDVl06ebZ/l5/
+b3Cot+iB8DpLS6ivfHLIukGyoKpwoOSXYJ1D2bN6xmXVZQfI00XtXIEgxkQUzgtKAmvBn2fEkJac
+sCeJZXonpUKLfea/2zp9457ZDbtGBLb7/DB5/OKNmzam7tN7xP45v2l22UvbIxK2XT9c8PWCDZs2
+JvfrMXRUVzRU0e1hRFIHcJ1VIaIQwJBaIgmBUEd1VBtJv2BaUGfpACoIga2QmH3r4q1OWp6dLH0r
+VDey7XoENIG9Klc8EIRtICkeNeWGrRuYH0q0JUl1OyUHkElZ+ouhzUs76p14eo8nARkeORIwfniI
+QctnC/3/h4Qt+vYFrI/VZmWPbky2bi0HNIuvOqSIwntrYED9v5Yhx1J+oRWqqoGJibMImow2Rjjd
+inCq1SKitSNwxIhYreKsxFYbKyZQ6wRLE2vJ2p1Kfu52LSHYjvFe4H/d4LuBCMIwVpECxIB/t1/A
+XtpKBCFYo4gZYsC0S7rw3V5a61auodw4748SERw3vE4AcBDwjXGpIpFfUGSdICMVkLAyMTpLWQA5
+MDEGsZAEGwx6MQY7AB2xTW1iMgDo3Qh78z8lgqgICm6LGBb/v6aozRZ/gsa0wS0TB1V/fmRK6A9i
+YCc7NdyY/Ro6nwnXlCl4vlW+hmKi52sQCyAIiFuDmB34CutmVmkJqNiS/6NWlUZGz720q/QnaUxx
+SuP2LTQHU3HqH7QCO6sLcxJ/DbA2pYH73dZyRt3vacf2IgVVbVK3+YioqvWt91pF99L/HVLV0/YJ
+iI0t++mE4O5HgQYApy6lbU3gVz4Vv0uv92Mv3JSNnUPbuMEQteXaPXxC3Ut7aceJQsVdNnjJ3nIa
+tKL77s4K4pMjqaG6XQGtxm8F0BA4HEivrVVNhB8iUFL1H1DFvbSX/ihiqyyzguP9QXKlA0NKNYjL
++z1ZAESIIKSMqkdHaBydEsEtZDHkQ7PwVrAeEPEfgHS9l/bSH0USTJ89wGwwXSomHRX4g+RnAJAA
+wjHaCJGIVTucTVcCjnhW2Yq4yhgG+ak3/AATCBHEEcPCHMXT9zzYGFcApQniyq6nGt1Le2lPIhM7
+mMMOe/EHxv8mzmrLEAOQwKrVsfOLg3EBxHsLY4MB2iFCYMNPs2psWdGKzYspJkCxATeWndggArHs
+xCgRrvICxrGRbA2OqYXDNYZIKoKQYMWuQN3vpb20BxKZ2PDieHcGZfxB7Ot7iTgbl1bOq62etNZd
+PNeG5q2G7BA5+SkpM8IVi8xSkXmrzeyVG2bXbpq+xFn9c/Wm2RVKnKKnNqdWPrU+IARwaVVtOCZe
+hUgC4z6OS/z+/V3cde+lvbTnkU4YJO5+8WGWHWSinScAEfnZJAemdVELc/LrarLKZm2yqck7tDGV
+QKvO60vKWiXEJM0pEqewxwzHmtjKFUUDKqe6VfvrUPfDXjv+y+GDqx0AcMPsCpEFzKnPf5q44GL1
+x+wQ/kcke7qtci+1OBEIJjaTnRZDJPw18vE3AIBrW2WVhwgESDgmJyduh8KbhMJbqk38lmBSKN5p
+00FS0+N6ZM3vtDbMJPE9Eg1T9RD3xb/uX+4AIJtUEp9sRDuAxcXPLb/c0X8QyOYfTwJY6yOC/EE8
+LI3VjtT0uNEN0UwVLSniNdZ6NoUU3jm3qfqUGtvz9//NG/5gsgRAK+hdTQW7Y80jAjgAkclOzlwT
+bL2gdaelFR3Tl2xK26HGINN2XXio08aNyQj2XZqfm5XYKz+mPaUlFc3p2yevbZqFquw1NrZCEQBx
+N9XaoFRxLIisd54o71d9J6Pj7Vd7rsn1Zk/+8SSAVUph+3B7u2VtlgZ5uUB+Yk7/ECQNTpCPn9Y8
+wsnOlUxIpCE4GqHh8c4mAxKgHu9/e4MgWpM9gn2l/A/+ILE4AFi3sxVtRPY34V6szVCEdqgTyWvX
+STxpKzZRZIh4SeGOuR6ZeNupSzi5g9YsUCE37CNGwSkNlLdSwVgGgS3Tr66+AhgoALopmGD0srWK
+Gl9v9uT/gIRElEz7Li/hoGOkmXHlo8i1sCdv04xZ0hg5RwhoBBjlhauL3K7bAG/vZMm2zVZDTd+8
+U3UShgmHSis7xzefD0SI4Hk1xabnHrH+/i9cCZ2IHdYxoFriMEB1OzpfkvaIoEGGEAJp9sJEZEh7
+rD1iEKCEfedz9rqsbpNsI4IVgdSvcJiQhYIJI8aB3VY2EhKrGDXaiXNg4TNrsyf/ByQkwl/ePRnA
+I1c+su1GREjIAaRlB5zl/H/ZGHIVAFN+/OnGGTs/AY5DIFud/pAjwvfPiIXrWKkY9M8L15Vtrqk7
+6pNGkHrRkmErNuaOCjKC2v9sSlDEAFtTF3wo2dy6LMGBAkhMWN+7U1jcYtUzH1RtKqsLTOndbKCL
+wLtuZmVhZajX7D3DC/d/MOIcYRIfGjYqrOx4U0ciG+v/+WEiUQuwf4+QAOyQdXpLg32Bf0fznxKy
+jG/fnrqKuo8+a+g2aAtCIqro3U/nV6Z2GXji/jBKfJRxVfzup/MqU3MHnjjKP/nHNydAYvnKx7Dv
+A288J49e0GubgUdCoZcXDj2nZYtnecI7W48OhSp+qLL+cIQyRDUPbY4cdlj0BgBgaJNlkYTsa7N6
+XxBBjf0dcapWLf9vg8OOMSi4p0G8SuLjO8debJ5YBABtcmU7CePXPwwAGEjm/6wu5TfIUZXtmHen
+JZYgTnlxmkug4NazwgDc8uY2+kKWi694C5nHeZP++9Tl9waaMDCJVW/9Ox8u8vMnPnrMw12NEpBY
+9c61G+AiP/+nx45+qLv530RGCERd+DxOfr3oVatMeNsbLMpP+gGgs0zLpHfxSWHk+97HHzGkzd+7
+xR8Ein2nZvkDVSR82gGJA4iInJeWvDE/EOrz105H2/fLn56t9JAmDSRSd/onQO1VhglCQnXuDvrw
+srT7SKo++Yxh9v97ou4WROon4dB3rzGkzxVpul36zgGWEx7fNOlZ1kNjmserI8n4sOKNH9zw0F1L
+u/1nJscpQOLuzhhO+VVecqOPKBUi4aqNrUPN3G1Rctxk3HFVPMrufOjRNe81HkUCqx69Cqdf0CM0
+75lx6ovZHw+zLLDq8X/i1At7huc985X6ctbHI1ooKdjvrapR7zzPnV8Irq2GPaTnNnKjWOfFH1zW
+085q2c+iUyfs83mdo8+5BQAk7ihg8peu7vYKfLe4wNFHnzNs7anPJAP4K0pm6dSeTbBDjfPeJ44y
+0yK5Tfm7f9z3V8s7pAlB2glA6scwMU/2BiCUcCzQ82URue8w7GyGCRJ1EA5/OYyhW5MmNPls0olI
+/t5zBuzmfNl7MDnQhYVNMlq0/Lh34ooKeWvqCOuUlPUJE6g5M7MAfPlkXHsTDKU8WPjmpzff18ic
+RkZ98y/nhXMAdDjusicDBcdPaW/ZqPHXqOfPA9D+2Cv+G9h0wpQO/xNwAOGaG8n+K0kPu+W7gTcE
+t104SGawCskhLTvihKyhmPR8oEwbpYjEatUJgrrCdFEsINGiq7u+GBdmhbCaDXTK2aZw08nxzKER
+owy9sDpjB4V8ITFG/QI2bXN1JAuDUb+AdUY/LUQ7APDQ/Fs9nl/HNHD7+ueQMweS0XMX0m7/yckB
+MoOODQuiu1YF8loaYkgQRJgCNuw6YQtyA9WVKRvDCcl1zXWscb5+i7JusMLQfPvHNY+e1r/h/Cvs
+XSfPnRNWBKMenjQvsPGm162wvt48d55/8qFJcwKbbnjrf2FUEKMmrkb6cULO2NsIzWYrP+rdOlx6
+fIumsgKBiVKT8glrFBwAxEp1AlBckWUYBCFWd2x5OU4HBAh4C4HBqgmiPMkRT9XhzLOsIohw6ffp
+fXeQLwikmGeC0D/GzydECs5UEHKzdl6rQyBWs2DTem+nGAS4ahbQO2UPxYP+A8iBYOPa1E5KWc+F
+RwFsdkI5dVAtB3EJADQr2K12dkru2sIeMfBmtWZVtjlYFWz2XsbjkMNTtAKUdNrvm/AzzzRYB8Q4
+4+fGlW9pJSSuDlzyD0Mf3N7Jc7+fFVuxOVNIXO1e+ndDH63u/L/oVcKXQL/WwmKVaQYokRhnt5oz
+cnSLAXhvJRtMAbAZkXSNRJUQqi6JfNfw4hdHH2WUEIzKW0syXJpMcIxjf5gy+HAIQcg444pGpe94
+CwqXLIdgRP1OVIUXARi+Syn3hGgq0KXNdidiURWLgeHbka//fyCGqljcuTivaNYqWrJU6qavDhdO
+WVTp5TvAjoUx7EikAyhzk7M8tiSvIHmZclbEbSlWlJQa27xUxMt/AEYKiAhWBoA+KWqUzVy+Q/jq
+I8pgSUj2izFUN1GsfAfvmsNL/ZP7xhkOTdgpYL1foajbqfzaWcYUYAgsEQuz+NchImKN9VM6yZE3
+jJbfFae5Q0RW2gKoqImmqtz0NCyjEAJABHRL+C6ACCKysIqc/v7Phm4WcuANh4uQCFmqux/DpDH/
+Nlv/+ksr15NBvagrtGE5BEPqzRDNPR05IY2K0fBbqnYpMCLakbK1McVa/45VaxmDdqiIDV/e9L76
+TvztZ/cwYnFK0rp2qlifULlZlq9flda+iNtn5G0IteSMRkBqAmq6ZWxK7hmyqOmWXsUq6DQLnCVW
+JoQUOke9/DrAKZzasHsZmyDO7O/Jgpiyk8FYToSNJM7c7/yTbZLBWNaSHCIi1ggRiRESaXoWRkhE
+xGi7YS0wxFpjfcg1ra0YA1jLioVgtKdDIQ0ITJQgIpGfdueHjxDaQVBWJvCVGPcXkgAb/R6wPPnD
+k0Za9h2spsPmdBXRNjqrCMRoT4f9ksFYdds8DLD1JRIR0ZaIYCw1o+0lwRwom9ErIuqKyMIa1sF+
+ftoJERgDIrIG4veraO1pIwDM1mJEn5XoubwVjEHREsBoK0Yjki0QRII5sPH9iKlBEclvUVjToFGj
+DSwQASL3Wfg8a03kWPZsdMtmyCGTumHF6uwyUsU1mVUEaDecXpC/X7hl/UnKiuvil1VnFSwOaolb
+FooPbVzcbdEhzbEYYTqAJB8sl6g9BJOPbqAHFU6CW6/4inFAKIOlZNl6MtYBUNaCpY84hyBEAd5q
+WhYS4zCsRwHHzwmsFFaWIG4/pQAQxDgOAIZYhYo1KR2EGkyLDX6S1B/s9PAhoRwISstyLECGlz/X
+vawQ2Bj1K70pcIdEfA1pGtAjMWrA8hMsNyiZkMJj9yF+f6UiJRIS4ziQMAWcZk3rApoMQufWNppZ
+EdOhbHZXYUT9cWC0oyL+OFvzFlr4X4GNaLmExDiRc2ZemAL9iWirUyoD2kHdKrcbBKApQLuOsrWI
+CEvQgWGCNHI421o9Eu04QAjBSFX8rvVs0AHCfzY8Ywcmvd+6zO6TS7PartZZ8Yvy2yV6m4I5saGW
+3f9WJxf3nZ+Z6xT2q1J9FmTXLs9eOa1PTFUzH2FaAov0qN9rAgQLGw57yFmv1aLfQcKAUGUIgiwh
+OfOVGvQ5uNHJFiu97xzy0VcLN6cPOuKM2MhIE7LklH3y9fQtaX0PPj/JstDcgti3gVazF0N36gYh
+p/b7n/NM7mEHqon//cK4t/679ufCoqLy4nMPN6pkTkwgKGFdlzCUhOYVxQc5VJ3TbVeUbq0BDhfB
+d2O+pfq/VxWyyRcQyKgvfrysp29SE1WyAhjKPOeTNbUZ/cek+dmTJxYUF5UXnfhXw1Q974m32abO
+Xy6kc/oKQBZO7edfTSlI6jXqgta2GX2y8hYAGI5omjbCdBD6xRmO+OMseH/C6qpOQ08+FEJCQnU/
+Fm0pLi/622GY//5yk957TGshIQjIkiNzv1tekjLi+FaTIW26C/s9YCeNX1vbftQxzsLH36tS5zwD
+UnohMNQ17HdG1ddfTd8Q6D7y9P4WoOXr4wKuCZuazp0t6cmIDdq6un7pFo756vPJeXE99rmgs2WI
+qPKPvphX6HU54qK33/y8Swsl1/6DiB5c6wSUtQWZMaEAjA0YsYHaFV1buhKu8kzQhl0nRLBBtbb4
+iJLqNFXQOhz395TG5l2q7bwJcauzLAMwatq+Vvb5uaEt1/KMT1LOyRSCWJ5ygGb73smGeNZHyedk
++Sen7a/ZvnOKbjEPCQE9dVNpq36BaSXo/9Igy0IQsixPPbwa+6TN3oi+7/XQqqjrVg/2/9wbDuDF
++5cDAE7KeDZz2ISqjms+OQEA8Omx4eDVj4AJYjFiilbFvbYwqTCuu2fnC62dCQcymbdP1Q4Mzxh+
+xht9FrneYd8YBqweun5xlu/vZnj6SDI/tj9/ApQBcj/sb5RREw4EALx0bjjw/D/rtm7Pz3rNMFnG
+W/cuwKCcRavR8c2R2+qkLK/pX+noV8+KGO2Eyvvnud7d1xlFQpa3XPcSuncpnwSc8XSCMLTz4t8B
+ABNzz/8GjgbavrOvURCQUXjv8V8AR6Pj0498i798Ygkkwl/cMR0AsP/wB2MOnbY5uLSjdjb0qpLH
+LjcKZBSeeXgFencomIuY62+xFBq4FEywgvuvDQU/PR7kwMOkkVZ9cddU9M5dvhStXjzWkvCb16/v
+PDhJT1saXx1c8XtcPY364MF0EEltdnfmqvAfzvkm0xEVDgsoPVRHtSDUAFRDXVscfqtWiGpBfr6V
+WiSn5hEXN+ejLCiuBZz6CwFlsLkmoYECmu3Qob5QSKBPtavTRguxHTy4/uRn2tUpo1tsIhUIX/Ts
+vvcNc1H098/mHTWlo2UIGbXxvG9wwh29UXHZmwtO+zkWVft63pQQOnfTjBPFqTrnI/z1P90Krv/k
+Q9x+wy9foCO80RtXKps6hBSSRq/OA5DZ5XwI6nK3WJjUHiftwvaLkBEIK2zyl98bYm6RNABFlkFG
+vbrgzjbaEQJEMNei9eLjUp49Km3VmJWrrvyOBAgfuHkZScwIYiofnFQ6laRnB01szgDIcuXFb+LA
+e4YjfPNDa0+endkUYklEFlcqHTM4KhUTVuaR8TVLZGnDkQuvvKwzYfrJG96se5eECDR6yzI2HUpO
+5MePy9hwxtwNl011BSCjll/xDUZeMSqp8NXbj45jO0ysIrHq6kewz52DKx58/Oefz3uktg2yUgWy
+uJLUQF/AWH/BNzj3mt4kMy+ce2vpI1LbO31uNYCuHY8Ei2QXiIecffuRXPFfDH5gNNlH/rPltFnd
+jHPHLenjDidA7r2B+rfbEwIhfgc54sYBTSNEbGyjUw1/+UbiXa6kWECxbm7/W9EoJTgBqGzkhyhk
+LBQLYKn6fUD+3srw1pNCNe8Bcn5Wi/nEklFPPetUdXCNZDw5oarw/qcNgazafPQcXPZfiE169Jui
+uZ+eYTp9icWDSe44HQBseMw4HPs+kPTI9zXooDoer++Tv55cPXQJOmWKwm3YPGINUif0BFzJ+fnC
+V/imSzIYO683JElNLSTkC8iob76/ppt0/BmoqE60QhW3tLncRh2baTKo+tITX0kE+p5xM80vaGcV
+DjssdNBkZHcUB9f+i96eqvQTB/nNrSzVjPkaJ70ZFBu464slBS9f19T3kwTTAMglUU9HUQUgm9ab
+mCDQ5y9U1Z1h7bCbLwh8+OMhhhX+9re6w36mijNGvJsB6X7eZbRsdU/DpJ1f/roJt9zsAJ3HZl9U
+xRgIQKy6/An0+ToJyQ99vZKykunClTcmW2A6JK0nEVm17vBlMc+dBVgMfX942aOjTkj6AF8e4+jD
+Pw0Crj1++KiVHR45IlbseW/ggI/SxPA1n/1c/eTjzue3xL59qLUC5/qPZo6QlrXL73Zi+Hq6emWd
+r6Uzxth6Banl6FVLlshaUo1v3wmyANCc26ogbBrGnxEB4YZIHUSkHIdBIMsvr3G9btdZanDS8Cur
+XK/LDTsMw/ebJFz9CNG818Qqk9PH0CyjACvlJ86hgx41GmzShlgaJyJaZtaxO0CMiOa7xzkJd4ln
+bWamMa9L+48/7wVIEEA/xxDEZO4LrnWhIbBOlTx+Wybvgv4ZRKnJIKwHBOHrUq+zFNVHW34q//ak
+iDwiypsPp/K4DxI9q00CxKsREYgNAugdawli5BfoVj3FioiFiHf219znpaAGe87+Ql9vkzFHiKZB
+EPrp2+/Gjx8/fvz4775ZAKBjthBgefK3yjy/EEJmVMDQFF/fbWMUnKIh4zI8a2w8oKsFZJwpx2zC
+rWNZWzH6wqGwKX2Iyaq3n3DotqSwNaqTNW+Hkp79/iAhohlAjwxLFvlHLsMDZ3lGiMJd/mJxlyaD
+A3I0KoPWQmBjqlO+OCFW02VvqJy30zywtocIxou5H7mHhsFKGenCg/9k5iM4Wx0mZWsyBSHhcG0i
+CQmJ8vKzApqFhHRJQhXiqLa2daBFnCOafYdnG10QIGSaeU7IOgW3s056K9XXy0ROqo23s058K63l
+/J+tWraaDAaCRGwiREBCVt36i6MeZKMAsW0h64kBzILp2gEEq9Y9ynq/vsYRrq4DqsiChA2vWEcy
+UiAEsX3h1C3IhZBRP79//CWe2rUpx8YlAcgnMs6bc+/PCAXbQFBa2k6rzff3OdNEnEmEN6yGbvUs
+jAvL64D4ZCJAqGA5MFJECGxnAZ1a+8s1aeexD13v3iTPAcjmQApCTbW0osqWg+0Fp3vR1UtfvkLZ
+4X7ryAS4pm07kGXXDcPHLRQqXAKd9FJAu7CUB4lLIbK0cUwZ7X+LZkfAkHigc1sh4brbSecea12Q
+rQJCVQHLVllVtRjYR4SEL1nCwy7RDgmB7QDQvPmDtI3tko/lxWkisM49G1/qE2bnnadd79Y2ngMQ
+tQYKq0qmo6Q0FdYQUGkH/dnSrDsg1/MjCMlSFDGChMOer/kXp2p557ndU8Ms4HD34T/JcJq71Avu
+8pe3S0xAPZ40jABOMzKNkFi5YAu5bwz293XRk3xhITmvD916cpeJpG2HNfjbQcYBYx2Qrgwbnvy0
+6/1loHEAMFcBGgRF04Ee8YYh9FVlIHykCFnZWERIFmGwCBbVKET87ak3BIuPBwR1VyQ9bJllV8yP
+ZKgNgDLPtZU3tr3IMtoAbIogfE/pqzERGUZEFlUEwpe01o6AaB6QlSFEIrS0SJlBIEC4YBUwDJGE
+nWrlHcobcaR1ARBXA9YLbhO6tDqPLE4bXX+muAiCoSJCIPRHXfx9SVYxSqtdL1sEJELLCx19Tq5f
+jLlAWlshq67e4Njb2LIQLG9ZDAyDZaumLnX0oQFDwpV5QHwiGCwia1axHQSx6o3PXO8ythENdgBu
+eM5AGLfbRC5bnSZsnLkPHXSuVrzlWvZyzxSHAKIawOr8MBccdf0ByQyYNof1+HNpnwGHw8WZ1iWP
+lDs/O9XzMXyEvRpy2RKEq21maWspSzIkQtWluVwmXWpLdmORXG5oejYCBLfdFAqJcW76CjFvHKtV
+A/Y1zi1fIPj6X3Y2sXhzxJI5fny3gwBbXb5kAzBQBES3hV06J2rlymeKhyXetBIY4YcjL4KgLwiC
+WaFA+GiKbD5nwXTu7KeFpdz4aswhkHYemvtIp12dcYTQHoLy8nR+esMriYbRBpaxEc6KZ0YfE11+
+STADOniSJSGrSlYC/R2jQILZMK16EJGILN3iesN9vYcI31MWMGdzxAlqA1NMzDbsiznW0Wm5JrJ7
+NGpKKWu3PxEBjOO/X3ZwN8Arq/4cRvX1AX4wE6LG+MWoXQb0jbHCk9939LADrBKCiCzb7HqDIRBZ
+BEZfEYgsXu/oQwOGCRDMEYnrR+CyG+ClHuJ7mxNQDEIhgaQ/lLdsqAjM5eoJkNB/NwTCp8VGSpnP
+CMa3JtDUv2QP77ffyLin3D0DiOd3kEPhjVmUV5VrVmWQLnDcBEsQCheTtLaAkN2QFOvFVW4c4AhA
+BYnD1c/e4VuKd1uBCEHly9A+WQESAtu410GM8/rdSH37cK1Qr2ET47x1F1LeOlKrlkPBEpDOzcWc
+idPmLAPAdijIqoUT4eGqG/xy0iKgByzRoiJlhkaNL4bbAAJ6HzrzlMjgoilAt2TDAFg6tF6FVZ6j
+1erbh16yy/I+CbUFUFqStvne/qcZtpIWW0vYJHxL3V31WxIhmgqb240IEFmZ7+jhIkJCNAXo1MYS
+SDALvuuUAMKbPoOHe5/yNRbOYotcp0lol68SQ4e2UbuB8CxwxHtDSPRBB+mvf541txAg29r/NGgq
+TLv+fjHWrVRmmFiiJ01QjyHjAD6Ha3cARVEh2gKw6kMgcL5E+mUq0KazCH2w3vWGZfkaDwGtBPnY
+gX0gWCRknOcn3dbTMGreIYMXPzEEQJwVFu0Dnca865Ap+Phj9Lj5dLuHAOHtODmgQHBjZcoaSskq
+Wd4jXgRCpFt3/aUV+bDN7YvCrTdKj8L2GiStO+Vxe5u3cTdWUtJjalBXr3E2liR9W09p0s64f0jb
+D4dpBUNRo6N2vrnA5nwwosHJXS8PiXFCr706WdD5lK6//Ghj+hFEvg87OqN11OQ3GqkXQ1nMgU33
+1zDqCzYamt0fv2P7aKZRAISLlwPDI/5LNjZ3FfIK24L+Wf3fgGkBf8/WEKoq6nZP6VsBQ4TUtHxg
+vUx956SR0eUXosqXA/2DRvnLJrMvzXPN4ojMLERTIDm5wgKCcaYUKZPYLhLPIvuq+P80DTEVpecD
+GM4Rlb8QTQWjV6IlCIk4q575aDUw7C+tXi5Adz8qQtUtAfokWiIRzAs7GAhxSiYi7O7vz7wCmgrJ
+6iEMov4QhEmLu/YVpW8e4s8fyswHhgQNyydgHBqNYlBmBSzaCghdEqqxkIQLru9+rSWr5q4gE+yk
+I1UZ6gYut+a/FeMABOAtPaPsEvNnAyV3gOqyOl+ysuwBAAnLwZXrrBAAm5SX4GxJqlvV2wCQrI7f
+yiiaVhC72wpElJZcQlITPa4WZTLdJtoyIe3MPLO250c9tCPkRHVXxpl9Rk2Pj3o2ONkCBRKrJl49
+G/EXndXbwclAt3bWEi0G42/3NSoUC02HdMsSAlhOeXi5eu3+IBZd4uHu03z+EVm6me2wqGggg751
+StbkOB9+cflw3RLqtmwIm6rCZw46wrAQpSTlEzbwjVHPSQAQWbFemX1EhAg0BTqnOxFg1do1bH2Z
+mWsWA73iDYM8B7IQyhzzVuOaNv6s8MaVEAyTqGOpqlgOwT5ilZAQPXJXMfpcdlwbVD9NMlI0K7Iq
+bwXbEWIVCJgKndKXIAvzlcnqCd9Z1qlbAvRLsCRsRxz2rXrrxBgUXFiCC26NNCZvXkwyTKxbuRwa
+vSOjQHjLQoSDA4iIWnWbjYUhh/9T/HacUVoWQ+mRPzQqO7f66v33f9kUBhx9zRGd/mTmIzg2JnlV
+VnJ5rllNrePKyoIJIm5IvoqEnpBwtq1inZgQMCRCm9d14g22c3XR7iuRcNc1JGWIyEgVUKarGMfH
+U4vcQsZZfVLJvu/maMdS4e0HjDEKQkatOal4n/faasfS5tv3O7VFAvgFVr34D4PRT/YCTMVkoGcQ
+DKyFoKdEPyEQIuG6OUA/pR2QoLYO5oHFfde9azvcc5phEkAE8wwl9Y4oOQW9wVi0b+nl2XfsGNDF
+rxMhUxmF4rGhuwUE8QMKa37+8dKe9cK5COYZhwaCCKK8eUDXdEsQkQUhDvQjIli1Zi3bkSJW/fPn
+b1phLYBeDWq6zc5ERBaX1W93AYisXhfx3iAr5u+vA/++JR5Gvi9xvUEIAAJZUOfYQX6HYw7QKUcI
+60DomOgPPcvrl0e8N6x4tTAfj9q3+KPS5Jv+5QdviciSUqaBgJQVwMS28z9OhmaWO7pvL2GYQKfZ
+KFrT4+s3zj7UsAitA6PnVhOvCOVPPCnm5JOrlv/03Zfaqfvm4j9bUh9HuBc0tfWcfkYkW8SCqr8I
+VP3VlYg9JlhXmb02PskjASgvrr8zTY9O2LL7SmTUoG+V3SDi6zA2ABgMAsSSgH0scqM2n5h32Lsp
+2hGrpj8VP8YqIau2nLT2kPdStRKrZj4ZPLVFokLJqM//zjj841hNolZvIRkuG744uJuGIKP+LgaE
+jFqVT7Kv+F4u5238fNxHX36JIWPOzjLsq/WJpkG6ZEc0SYTujsYcvmnjh8ktYe0iSU0uEbz840nD
+DQuRoWwI1lyccqOt12sTaCp0m+4+KOiGNSQjxDogYBpsu1xhn5VdOxiiat9yk42yQNOaNkVnx3Sw
+bRN1HRbBHKNMSm9iCNSlr7veQ1fDU9aZAy++N/206pQ4y9Ogk/sQE4S3LAOGswGFQOjoL+ICzAv5
+HC6ixv78St4rv/yCrhef1SOySSXBDNj0XkTw6oCUbEQeo0/AuIC0Isv9PnSq1nW7NP1+f29sQUhv
+iJMtt7zSt1/YSRg06Movz6xE4Z/M+gs4QEgIQlJHgAUAVZKhRsTo6AJogh3Ku6gwCSCOXplP1fi4
+OqVF4iSbDz+ig+61WOerpBjroGP2JyaIr6cSCFmuGjPv6DcSQ0pD8wpnH5CQRfUpc458MymkDDSv
+cEa2jPwsXHEVKOP5WK1IY4bn6EF47aZPumYCYB+rnAyvvP6qfYzIglpFA0AEqyZ/c/wxx9yVL63T
+GDqCqSzszQT6utqfWIg6ZRYgf9bTfznRtEguBEpNLREaH+eLywK0h2CZjG3TwMKm9Gwgt5W/5i4u
+d70hvrkf04Ge8YZBoGnw0noQsKb4rECIW8PHJCUIWZRcetpxTTzbItvdnkmR8wSaDDbt2wmRUd8/
+63rHXq3ZFaZJQHZnc8myvwpjFtC+XUTPvMn1hoiQpAGIi7zT8gzopL7EZDn/8a7n4OoNocx0F5G5
+MBJG1TVLmBLSNyMY7wdKWd7wEYd7nmkVCaMfCOsfW/1SllFCJFkQqPqq1F1w8HlTuZgUibU4+sSX
+0ObP5r4BJ5JCpWF3dOiGsLf1rDitrLgAIMEuViQVJtlK9PquVLhZ/Csl+3ddiQVEAoBpCuyoDpZE
++IN346/uZ1nIij174gXP+RF4Dn7UHYXICs798fwXGp1sgfYR44xbFQif1M5zRUDvQWf1oCnBATTs
+HcZGERKQFVz44zUAMAumS0eQQORrigVSUgBY8dF5IZbXbfChCXxjks3IKcDi05MfbJlwfpKERBDk
+7764TKBsgNDhiq0AnmI5fw0wXKwjEMyAju8LIhHavAoYKT767zwgJ1uAKXKYgIZCUODDK4lxr3r3
+5IZlFRIIVyyH+E8TBGBvPoChbFmAZwG63IJhadU0toOCBasOSNSqeFn0DsEsaKc/CNQ76KHUzxdh
+iX6KcLh1fqqLB+K7A7AiNoqkVr0EGCGWbVrXLeKFXAggOvBoqcNPxBkGEXqwxvMLRp1jWAhEQ2BQ
+QBSpyu1vjt6y0pZZAViFTSIF96UW2Mb8oeSQlEt9spJoJ1NUEx85sVX70bJRhcHmXmdirricJtQE
+hWFo5RySS1g7hj85Gfh2WlvLIuqijxPV1R4DYFs4LjkHJKIu+SDRuSYcOfllYk7LrL8kU0gwSkNE
+Bz6aoEyPtKrJPbLl2JtC+Px8bUm044z98YYRmkBTgV4JmglEa2XcS/spcuMDgQBgiSDW8JIKJYOi
+TpJkpf8MXoP7u7SQs4lVmWCd/p96cbkNQPa6lAiWrpBYQ8tKXW+EWBERmgbp3MGSWOOs2qTMECsA
+lJQDqaxBr8UeCCUH5hTgq9tgWAy5L7x+9kl2q5JWSCwZZ8NaMhgqlgliyaqSFRDsIwakqhfAy+gl
+JFbU7ZWB8FA9t+4Q4/HqfEePEMMi1pkGyeluwbbL8J8wI6QsQZNz91TX24e1A8hqWnjXCQFWCQE3
+JtqYVm1YyXaoGLbOyb/wlpUDPBfWBL58gvUjB0Vc8nI6reLpwf/6+aBYBvdbgPF1rlZi4H527yF/
+/0Bj3olaAVqpaXJInz+b+goO1fUORJfBpnkOGpwQ46to/HmYt1ZzZ4BBoz/0guYuK3vuS3PWPX2N
+NmC+OyxHHmOUgN5nVzaO/5shUbc+qyqf2fpAlxQSUWOfVpXPNjiZ2kJTDbEob6kjRIFJZ4oyae7n
+pde74S5X3u1++cnxALEZe8fJd1oHWDGPbQ65gMCkoOz8IBGpmPTcQSf3tQAphS9gMtpGt+Ui6Asn
+POzyFnL1JJEOYFyZXT8dtAF7/c7Z6rpBSuEzCNpxAAS1fhZJhyAgSuEL2LgOSgFiKci2mom+/Ona
+bOOY1JsvCsx48lKAGP+9Yr+nGuaUICEFxqfa0SqDAwCgwBhXyoJMDvgCLVUV5lhSuPs1ZdHJeQXH
+qVh8DkJ7vxglk4F2iQCsuvEntfbliwA4uPdGEsSRC0DSxNw0VoFVILVjvxP2g4CUwjit0I4DUPZv
+zy3Wd34YAJSaeH4ID1ypFQggm5i7yglf2y/CzSZ4+/HumrvuAIjx5pnd38AvUG9dnQzAwQNT4++S
+P5v7FeiBvCsTfjtbqASTG4rZNRUtIO4Je4+08prG/0LIqPkHFSe9cDKAFy/2Ok1oJyxWXfmYq+WL
+ow3Uu6e6VurXABU67mMD9f6YxieP/sy0hCwklieNtk7aC4erjS/delTPh9zMfzyRMCtJED7jYyTd
+MCaz8seHZv39sSCPfyswcTnbhFHp9rbccHDaQWFd/5bAv++wVH1redEXhmi/joee6Wtztfr+cMdM
+2K+lXLW1M/Y2aj83KRL+YXjhYGM/Pn6r6rjmtpKSLzShT7+Eh+c8H5i8iCThsPhDzr6hsOLzENGw
+riMvsqydsbe5sa8cNnFM+0kpIFi+9Gm415zbtvaXx3847oVWDeH0BfquFU7Rtxok3Qa6Sben48G5
+qvzbWpC0Hxrj3tqBrr9XyX7PdDXz7v507Lip7oH9H/jnozdurPq8jqX7oOADGx4JzphDEnNY8oiL
+RdRtY5H88KkxoZ8f+C6zGIg9KOmSEeFgUZ8tDWJdznkyluT+ZaHPq1h6DYi/I1M7848swElX91LL
+3nwUHR88KbJHFu1c+YT0mB6HiDxp1a23A5f8o7M3/cnP932joxz5DTD6oT5OaPlTz8W/fsLv7Ig9
+IP6XHsj7e/xv8i952XXrQqXJKeVlySnlpWkj1+mWULfo55vhXwgZNfWslfjLaHz3JYa82c2ykKW8
+YxbijJccsnz8Z43fc80DmvmkjxufvPJh7bZIG1l+69/5QKvgBlzyWOHgQqD/Oz0sWw7d/EQtEAyh
+1T3nQztHfFP/yPIuNPHRTxAkCETb/8fedcdXUWz/75nZW9ILCaGm0XvvvQmiWLA/e0ef3adYULFj
+wYJd8SkqFuwVkd57JxB6T0jv5d7dmfP7Y+9NIUERwiP8zPfjYHbv7uzZ2Tkz58w5cw6kwru3YtEg
+/+8vPGjv0tdif+vSO6fUWLZYy3hvHN67xT/9anGwR9qQOeyvXskVffyXhmVe/q3/75cvjfX/+cCL
+lmTknrcUMKzOXzfXgolBL7yYDbg8cD/5YOV0NkruaFWBgMgDQemxFUPyH2jC5v3vWUBcXm7469d8
+fD2Am97d1bqsCxTdWyYz3fOqJbV8d2IaghvsN6PemGF/0XmDRNJLn7BT2FGsQELd/RpSGvtvCzgS
+Ai233jcLkKxR74a7G/uXuGDJj27Eb2dXsJ6J955KAVwe4OEnXDo7vuixLd+jYeihIgx9rtff/RC1
+g39vCfrrRNpmbPKi9I2t229Lat0+eVPnpw6bJ08rC/O96vgXTEpmvjZjJ4D2193h8kV9ofw5YcPA
+xFixpZI/pRqSwHT0SWtIYs3IQgwWmb8uPZwV1emqNkw7PikYfL7QgokJW3/cdBjNh54XqgmYkx4k
+HZKh8iKGy5fH68F3dJDQbBXsnv2ZQsdVjsPzghyGYXks79mRPj8H4LbcqYF/I+PUn0PJhYOH/+zw
+90KGt+u+RV3LzGiajswOckiH8qqi+AFzUkOkQ3hNyzOGfwp0SofyWCUjGmgBptIPFqUFjhrntt+T
+Wez7Ye0hM37ghdFcOaQ1I2dmqFMygZVSBfH9UDjTEeBzX9aFkcMYhC0/J6V4YgdfHmYZv84OuKg7
+Mn4PcBgO7VHFDYct3hsqDWl6Vcnwhlowi0MzVu8zEoddGHLb7vpBEZFx57u/vTmn7YM9XcxaFR1Y
+/HGuCN0Wk/+Lw2U4tEcVxQ1kgpKYN3N7Vkj84KH1oXxJRcEsDt448v4ytmRiFkd+WHmgtEnfsU1h
+GdnXXHoNvv9pu1W//Zh+UPJvru+cOfzrjd/wY4iC7UOhXHdl1gCtx+ZfkJIo2ZdGDeOdvvBqTFrg
+mAl1TyGYyqML+zuCr1tXOH8UUR/dgBs+KG+hT67XMesaUnWVoyYTXjCZyzpGVIy2sAkddfWmqWM/
+025q/3se3QJ/TmzVoRjlOqWv+Y7K9nGsxrb8ytCiEd4h30aUXbP07AK5uHfFpRnfcrX/KUdnj61w
+VM2rlH071uLvrubUAv71abXM+PMs5jJ3c48OSRvadUra0L79rtIqlNYkZxGz1DqgTRsAlvRFjWCh
+NQliMKmjlG8hGNWdrKH1Z9hP1loIQCuCFEy+80KwZiHgI8B24KOix6npK8Jrty1rccGjhxyG/wIu
+T7FrW7NrsOHgGFRhOGDijhXFXTu/r50akqRNDgOQUH7KhGAiFqyEYFXW9BBaCyLFQlRlOFVupbAz
+p5QbK0CCAdJaEDQLAVgAiWrI8D+7QqNKYmbNEI97A1+P8NjKEDP6dV5s2I3pq0LYfU+xJN/HqBQu
+pmIDV/6YTAwtYJH0RaQ9w2xHgN/4q4VLQHv1sfu8Dm0rNqMDNqMDNrvchUf9zEQ1mO2AwCTtYOdl
+Ig1B2E4EqCbEDB3jZM0QAxIMJklMbGcjt7cCsiAw/ON3GQGWsfwQBoeaTp8XPouUXGoaWclD0vdO
+TDXJvrY1R1ToraS5QqiM8qCtlehFJRcA8i0qc3kib/tNwdV08MpVAqhyDPtmCBDAhp1c9hhkUKVG
+ZRAJFntWoF0H5fIlnFUoOkSRzUFH74BiyWBUIx5UamCyA7owSXvMgCA2mEE1nE/9fwYBAOyi7StW
+bCeXPpYbAamwtnKz7iA26w5ii3YzaUuzpVkprVgr1l4oXXPB64mIhJSCakk8BDuNBFXOc0++01Wg
+gVQiyxdF3KDHC3mcUd34RqjRgOEEkpVSvUHIE2lAKnvfyidOjNIKNx/H+5Y3KhERMbSmbI8wGczQ
+ppTP7uVrIxQd6z6qcvLoB1aihqq/8YyBAMCu/R/OnT597of73MeaRFnmbVU2927W7UWpYFe40whz
+UWhoYJhwh4Xn/BwcEHCGjmE1DMG9G2LBu4ZBdliuw1d8jXuu0acnH/GZDqHjevHeR8khiIiko/DB
+5zHmsTPOzeKUQQAw0n8c7QgOMkb/lOY4VicT+Vt1B7GZ7VIKY9fHuw59lqy+/3bpZyVJn82BKvp1
+Wc0n9TkTIXTkm4Z521W/52tw4Yrxnb4MfupVXUsEiTMNxI7Xo/Xk0V9nWkDp5he6vIRbvgg8QyfL
+UwAD0IGL+3Z6TSH5wfTF/8o7htODrf+2VxtkB2x2uQuMlWZM2sHdV+zovrbVhsPR2aXh3243G8XW
+bNaGMxMs1Ng/JiybPt0VG5F3oARht9zW+cwL7FBLwFJ3nTf+j5kzRWx08aE8yMtvHgpdQ2uT/w9g
+AOTpNLtjQgo1SFs9/Fj8RyqsbcrGdt33r47rnLSpi5u9g3/9Q8XvyY9rl9F2fZBkXSLbdoyq2aSj
+ZypI6iFLFs5NPpJ6JHJgh94D6v+l2eVvg0lpCPwjitn+15WztqYcPhjZuXXPwYnwGDBPJz1GbRqK
+DYA8LXM+DLQQNLVHy5JjKBYs87aGdLR2twnftoXbi1LBB8J7WRt6NxCypaPj8pQO7fclztvapE5+
+hu0gruTgwYCyV1cVajofOsjO+vVPKb16VXh31+mmpxaxr52rvaRX4tbGCGgXXXJMwUTkb+3RIWlR
+ateADe077CoV3n6GB620J8bs4A3OaR5Z2Mm8GEX/3DzoFUFgwZoFSYAVxN/2C/hraLF0dnSvzBVR
+vauWen2ylh+rRPbNXlZdieiXs/RYJbx/7pJjlbABeYuPVUIH5i+qroQMyl8UMqhgYXUleHDBwuDB
+hQuOKvMChxYvDB5cMDdoaPGCoCFF86srgUOL5x2rBAwrnhcwrGTusYp7eOmcYxXXiNI5rhGe2XYp
+Xn1vbZLebf8rdjgZ5DWPOU94E9b+EKJBxAxo1z2ZXmjJDMHEpAO8SjBp/D0p8Zj+V/8fUB6j4lRI
+W6xlz9UI8GgEeNWpKaZ16opl/u3iVnb5y2uV95SWQMuRK/3Dca3xvxKWaVvL8ef6b6ekTe06JW3q
+4mb43FUIxLKUJAtfYIM6ALBdEcr+PBUINEQpDP6nFI+vHMe1OKWFb5a1yXrlzxdH7PcrqhYs8pND
+O3MSOnMSdTJKK15IOAUCYh3+FIzzFkqGBdSV/2kxLFWr1njKhpK/ME8amatymxSuzGtStDKvSVFJ
+LRqB6lCH/x0Ufq1Ve/wNgJn/akghlHa4IzqsWf+w8Gb9wsJaBxeyPq7q/xR/+dg6HAuEH864UGt1
+OAUwAJfrrzfjOwpjLlRKSl8pEu4aeHadR1IdzjQIdQ7VLv1X73T/9VzKDqedFcQuqqQmnk1WTUTx
++EeCccHiurarAwzSOx1/KYmxc+/yovK412gyxKiJeKfqrwMH1KEOtQkav75Zi6ZfGCCn8y95UUXM
+yBpt+cOgkfedASE1MHWSddJV/FNRp//WAYBv/eov3aaYSs97rsLxt1YN9B6u87asw5mG2qf/Hh8o
+3zRNBclOB1NRnd7652BiX9ilU9RQdfpvHQCU2X+ZmflPw2cIh8PtDgwJC3Q4HJWZnn2GID6O8BuM
+v3pOpYtP4PdaMKczQ2kSgvT/ckM0ifKo+kIQRPlOUPuvclP/KXn6sX874TjcZPv4HaNqIQ1DQBjG
+/zJnr6599l/44gGx+vNIiEQmitwq4CjupUr/+cIBHqseYmISFZetqu/gDGhmkKjeKYwBaI3KvzMq
+3HQaHcLsIIfejNKmTubqif9zZ7fjQDX6b0VruvaVCocVTjAAEKEGTPjVPv1onPBzmMEI8Bzjfg0A
+QtfkW5xMA5yexxoAwA6VZsGIMqw/Y2AGw0lQPpb3hzBmQyvfvgahCQx2KCa2A5XZlxLY3vpAYC1N
+M6g8BUe1NmAGtLBXyzSqccpmYmVICQCa/b/bJ+0LrNMYjoxJC7li2nfprmYPXa2rcimTkgQtavqD
+t40u1Wnayi81RFAr5wbdzZuV5iwptgR0t5w9xKHd13pZaWm5jQISkOhw5NDR4sGJigvETVtsZGGW
+eskh2GKFGE+RQyklXE6pWh06fGLVxrbbIkgHPDLjV1GVS0X/JqExen1Jx+D64U/v+F8JOsfUf0+T
+M4MBgB1Z+8N2oMXhuHp/qtgaLot8mQjBhmGRZWgDdKjR9iZRxS6Zvbu70toJSolwmA4DXgeZUkkt
+hVJOtpicZKmwtTEpISHlX8OsxhHEnsA2bzyAxF4JUPLoWYxJC6Ng+dbC4LiucfCFtmDSwijcsDUt
+uFGHNgafthANTFoUPPCB7nTO9K3XxA2okoOYSUvsC6l3cuQdrf8S15sXg4LOe4TQXnRfjN923YXh
+yUIoaBi/uOIK8ELXXpBaeNHks7GHNFk4WHURkt3ROYXldR4/PfRDQkMPBBgeCPe/J3P/n0xTMOuS
+Erdn3Jq35F+n6KlSJYfv+P5aiNKEa36vOgpK9eQEANf/8u1YgB8/mbasCTDU6ZH4DIBl/oFrfgmA
+ce0nzuA/s8gSLC+VutwAWB453ICjjwSklTbbdsixPatJsq5P2XsaRWz1Jm4TA4Ky9htxe6zmGWF5
+oRm50dFbAxqT2umNM9bkGPt7lc2opJcMqRpKmljLlRN/BwB52aNt1VGR35i0KJ4ydTcABA+/a4i2
+pXItCt58IxUAnN3vuoxOFwOTRvqlCzH++ceV27tkAFf9XWy4Z03IO+creSLVHxNhu1LiQsasObzP
+1SLo6l2ZP7RcFzHEm7oLSIh2HFpaIrSZdc76FKiokLazPMFhhwFX2tGkcYeeqzIGJmX52jki73hl
+Uw5ISWvsDtzkBbfMzgzfp931QgvCMgB2BeaEHpx3YiK09ce3RugR6utZVvV+RvJiV7Ngq11Dy+tY
+tfd/Jr4ew/7LrtWhcaX/IxoqQgBw7h7ZJrmoaFurUbscf+6TTER2yG+IA2Zkdkq6PhK2LyqOIvJS
+UkMl6bwthelh++ol7t22OyqjWO8+lMF5B/NDDyUf2Jbv8qTE7NkZZrijAyt8DXd1CqKWHw78Pfa1
+dSsmhX8+6BepKs0ETFrsP+vh3ec8dP9QFP4w9CHBNvvuGvKIedtHMz+9wLvs8ovycHpiCTAD1y/E
+g5MK3lJe3amqVKUpa+zCkiPP4qQE6KP1X8aegd175ry25PPW69cuW9Ou/wcP9GrTfNHCOHyYNHh9
+33ssjbsup/kDMf7xoD8eyy51OyCPTg9FHH35jM2l6hx7wch4fFzL46anZMyFae6FPYHbbsunlK9R
+Oq3QQn2Q+3JCyTPbToS9GIXnfdtkXVc+68j+qvdrTB/c+xfXp9MfgstYU2MZaE4Y7KwJj6a/DwOA
+2WRpu/gUNMxa0sT6MzGe7VD5dm67ZslbO8zp4AxpuM2pdKN9zubJLXh/RHZpeMOcADMGBUZgbl5M
+kfNITpRwGYhpFFQonAwIS7gCyoQpFv1cRw+tTEp+dxPa/RoH9Boz6uBlc/pUnqo08i5d1X9yTwCz
+bkrFCwVvKUGaMs/f+sj4UABX3fCx4zv1LfHpkGhIyQ9+E62etNx9f9W3jqqiKrE2ftnrYjOsxqOw
+aOzeFSVCWraBZ46XiLU187LoMPQKWFps50LP/+XfwQ9fMqAIpMAWojxHScjEZ20uCCgxGgOAVNdc
+0un84gPHLUR7PFS4Hbj4Ga9gYniA4EJwy9JsYZ7wKxlW14Ze9F+OatRfCO3oAKzZJxUt/9996WPo
+v8LbXuSfjkFEAGTVd74ZKkTYm876f2nYLfucuQGxnsB6MobrN8qMFNFGTlxkTFOKDYnmmEa5jtC4
+5MyYeoENmhSFN5UbHG1lmsrVnqyElpmRofUrfAzeVTXknRZpd0K8HedRytP2RRTfWkyVpAIWT6wa
+/FNPbVl65JcONt7+VCrW9P7WwMNpyqu8PCHA6/jxG3FanDNZeKeQvtXNzi9+XP6urG44dMDj5ftO
+jn8ZF1Tps5IyiQMK8tgIsxf9MtkIwn6Osad6Qd1zsh4ZWyTBEKFANV7vVihKnDfMsw8u+VhLlF0A
+AIAASURBVFy3yjv+iVNi+K4MNJLr4U9PHpNFiE89ueYclpHUOHHOMdgzrp3iWX1Jlm457VZDNg5n
+npYJWAAgb3xsaVxcaWy8+VfDLZUprvFdojMSXY5GRsOQzvGOqKiOzQMaRHRuHtjQaBjUXZgyvGNw
+i471Ajq3c7jim4mOHV0NjbZdQ92d2wc15LJeTZxcDf/SWynoO0A5hXCqsS2weXplg5PcPzXw5Qgv
+SUneftdoQc+USJb8K3mnXWkawoHEBIC+OC3uXaxp5TZ2j2TJIef15qo0kOTzbozq991orvEFaOY0
+QqA3H9Jp26hSUZyFDAr2//6fTyZ+uE8qEBoVMqLTjur1Gr+Jhh0f+XElaUAF1/82pDDv7zy/3xKg
+bW6u/1O5FQPxO0/GSmXJ/mt5CNZWy56EPi5Sa/ow7dtRo6awP8Ux7L9sHEw7bfwLMoObJyQ0Dzb/
+IosEkT/lFcj0lMY3tthiS5earJTHqy1V6tEWW7oUOqRTI+UpVbq0VCe2dyuPh01nw0KtS0u1VT6d
+MnWp6nxtFHwKDPWlqXMOAqapCn2dNX9bZF3xtpMBEvoyYWLHCmLCEWLHthzBYN0I4GzU7PrQcYJ5
+oULLBBCxpSql1/PtsiYET9275EItTsrgUJ3/MyENCCzNI3bbn/F8mroDRxBkf2g92ku9niQNAIEa
+hrPqknDBu7kFb34HBgS6btjR7uDf0CuVq+UCoP9K3y2EmFLmoIAjJ/WS9VvMwfCc5GOwZ38We9L6
+Ea87/WGLyWze+LRQ4Wtt5bUsr/qrGUsrS1n+pFYkTMvOHSOIiITw/0MkQNpj2XlmBHk9mkiA2BIg
+IahiDiFqWGXUUli+T6CzbT5mToBcvkXoilm4tkDt/Pc60sSCWoWxxGrWmrpqbSZGMIGEB0BwzY7J
+DGZlmabSFaMdMJi1ZZqWtr3KGETLgQ4uBSYpicBaK83MrC2tFdsZkYK1Iq4An1va33BNqx6pzIFF
+OUAwAKET78t9kZAG3/wr73r/2edziAFGzBE0KYSgylZLIpTszbRHdAS+hphDR9VPQh7L10mgmWsd
+0HJN2QuElADNCytMVkRCVhoPyOdqcywI9JFLMWB1ebQmP8EkhYSzJ/GSgHaalvp7sSDICu5Y5T5h
+R3mH0VFuW0QgaUgBGH/FgwLnUDUdi1Rk2N83kdUARNkb/EVqKW2aFgy3Kxhe0ypry2O5WYF8nYNs
+Zz6q/nLS844OxcPgRRCIJvtuSoTQy7hSCrkSQQZtIgYRRQaAcJAAnjQytPf7bibAux9Ae9RkezKx
+Imk4HFJUcIpkYkXCcDgMoUF2rtv8zUBfe6ZlsGIhpCDFLBxSSti92O/byFr7J2UGa338vFud/gsc
+gnaY6aAwAMDEoIkphBR7/hX6mh0toqfYC0EisBihCprBXGGKtWnRIECF7t2MyIpyKQFgrdQx1fbe
+KWmICN3gu4XR6ADQ+kCZpRBg1kpXZCUGVxqXy2FfozC0dFODhLnlJNoEE7HSSsW2UTS7kxtqgy8L
+KmuGsixlv5MAa5/CR6zJnmoASAHW0JalfHqcIGawspQmWCc4fGrXhh2u0yE/lzlD/sXAw6EOB5y+
+g/CaE/UDqzxX0BZohPmpigZj5bgKgqg2enypgY72GcUAHIDgZr/nhhEL1rQ1FQr/ohN2u63m7UkL
+A1s3H3G06BHuz7DLICUNbNuQ4o7r3gBMDAFsPwLqYyfIJCUM5B4pjI4zgL0/bHZe3wtQXk9uVngz
+rujjyVSem/PEiWakE9iVCgQBQve+esHH4W2Wp7A9/4Zc+/CM8R4JgDg+D2g4K7AVH46J3OjXcZ2y
+RWl+q7RkgMPNuFefQIgqgHB4ymp3OuvHNZOz9lX7cMKApUDzogz/4OaSJnGz73zsLDQaxZgNE3fM
+L5NenOEJO+vVP7IbbvYaUUgt71JCa0GSonFo4KbiC2hl2Q/1ggsjI9abQP0Lejg/j3Rptfw6Foe3
+QENohaad0w+dFeNNXZ+shSbt7Bi+Oc32zG8etrZs6VUhpFPA5oEti46s3WEnBEZCg+SmA6JTlyQF
+X/373j8XQo+1/5ddf70L91TgOPcfadePpuWnm7xpNZRMj0WPKvYjobdCOyL8HdlFGgcrZHslqW/a
+9G3o+K5aAIy0AmjEMzFpCocSzMr5udddem1nVXMOHExaqA/e2AoATW4Z72Synb2VVJ99sBQAom+d
+KDTEc3MDD5iQ9wbA7P48s8QXM37ScPS6q/eETwD8tlneuDsn0yr9zwumc+MEp8NFXl0c9maYki8s
+CnI6dE675/Vx6cXV7/8t8DjgTrPlZ7yQ5ejQucHyAgoBIPTdi4bmfi5smSSyBE7H3W3/WJqReef0
+byYUEQMBF87c7Ul4ef/FUl+I9cFT1kD9DnLe2ekqAMRoG7A3Jz819apt0x7Mr6aLa9H2GaDHJtiP
+IG5SwAgM3eVbLdGd223cHbU35/Wgmxr9BIC4Yce1yYV9vnznoQSV6TGzhox7/7CvWqGdfdKSlXFk
+bPcGX2K4meQbAxo292z15g375IUNPd8WwOgdLHYeHEC8OZ9YaOf1tzT94qPDxde1gvePJ9cY1vDY
+De7EfldAhM0ufc71XnCDohI2YibNGn3N4FnvpKXc2xulP9yXSqR73Lf/C6sw/bIBmJY44JK94kTk
+NvK2kkWnQ/89Pv6lon7Ll1SIv3FBUE0Jp1X0KUZOFhDgn+oRYJjILHVXlLNCP57sDGEisJbLCqVG
+PyJiwQwikHPJ20Zpx5ePjw+OD6TFvusXdH+xS8j6Zw49vuKrQJDtbr363qU495q4rZO2P3Pov6CS
+KWkAYC0EEEte16Z75mNY77wvliwJtyb2ujH9iNoyAwDQkxk//eKrvV2AFp5XbWeoGOgTXnZj5OdH
+I/QIEAzpPX/gd2f1vWsaCnQwQNzwnPtnXuy/ruEyiPPz36iv+/aZnPF5/SsBoOXXDa6dufaallBG
+xIfYC6C4GKI0thmEJg694OBiERHQZsiUnR8nnl/V0Yi4aeBaoMcXZZ0kphhoVmIRAyC+LOaPXmMW
+NzAuOXvnbTEfCM2g2QmXvP3rDRSdbQhEW7Mcr1/pBQAIPeysb5JbpRUM3ZL0R54YsCmTGCDuELja
+2/pQjzkH0nYnTvtscrtci3iJqxNjBQTUkMld1r4Y0K1+v51fBj5w7qAbvx78yzV9ty6Pea0pkDom
+ECMjIgEA3193eeqLOSO952Y+NHD05W2G5uor37hlf5jznCtLnup/LQo3/8WyyTHsv77s8v97HB//
+CjOhXcV+5S2qqbmtGn+vHG/FI0lAVomr/HlMzPWgBDEg6AtI1aeTFiAQE8GT8/1jRRj4aVQN+k8y
+I/PCDX3mBgC9ugzz/PbC05YkQBk/XVkY9P6/gJ69+hR+fNG5Sn5Vwrccwuj7vFJ3066lY9NdH14J
+/Gtkce7btx3xWjdHNv/tyPO7ENCJDFza7dBj2aRvHN7BqUn8d9IyFXF917NwfJvhqt//m5MXRaEp
+TEFQ7pf2OIPbNRbILwwFCzXh26vXzfa5QYiwLMhpzj5L8w4safife/41cadhJXy/Yto9AetSJWB9
+FljSJmIpeq6zlPvXydDETW/8OikxMin7YOTqFvNGXPtuFXdm4s65KSSSN5apv9hF3GkPhAKIx0RO
+ue/aK7bi8baP466u0EDAVP31uFULfmqUNTgtGZ6RP/5y0YA5QgNCTxhwfea7c3arlO+fmo6miZNB
+DOKuRZsDu+0tTpl6WRrSb4DhyIxlmt0sSslVkN6b33BN9z5lXVVwB3Vrt+jrkI8z3nF5rNZL06Y+
+MHFH6sVKWI883MCV9G7T+2PXTb+680f7250rx6xt1+mBh4d+NiB28vVZb9DrkcPmtd2340QXEE9T
+MNXjGzWYvDmZFZBfc8bVqnuLSsyKW0YJgKei/ZcYpFmAQZo2zCOFpwxbH2VM7JjY5PYs5+MLY60a
+NK8Sixc3uJdPMj3K22uARd+USDAp4/fLC+VH/7Is5W0zStEnYOegUZ3ygUuHnX3WqGg6dEE6br3S
+8pp9Wij6war/+2/vcczZ1/dibhHLAq1G33KhxeqeS1qzgBh9vWq2YPKV0Sej/1JhLhCcQgiCuqnF
+/MFb93EA8nLDIVX7juuvv9vfoIn5kEXOxA+2eg6t60PLuAEI4xNyZ/2QzInngeAp4ZYCRrQFlP6+
+D0C9ez9Pat99XYmgL0MvXquvrDpHEQatgFAvlLtUL8sntN4OBsBh6h3Mu3qrA5N6NgRCAIF+Z3eb
+Nt2pceTO9M0m5bsdtLEBCBD6lZsvL1l35Bslk6Z91o7602IQiHvw9sALt2TytiWXEKkYuvyCz+Nh
+LR/MMjcJ3hved33hvD6t3U/Lp6iG7//yEwee1XrGj++GdEFuzuSf13woudWKla4Z3edfG7v216c7
+T7oh62vVW0+T+qLgqe9u++z+3aL1TapD0Eyx6q8G/WPu/z1NJqzj41+CkJVAp5Ber67UGgSUVgqU
+5bdYgZke8zjV+OE++zAhuzAkLhTeH18oMWrQ+4plwdcSyHQIIXVLcG4eMSmx7dIS3HyJKQ0hdVvw
+TtPQXmthvhQdlVdZFt2XKSLGa3JIdoD3llC3swnaKt0IdHQqQHusDhBYY5lghvlf5xcdvZY+zuG/
+Wv1XIIMQlqcQRFETt8QHT1wMN7w5IWA88fE9322yp19Ck2yolu2nkgCF5HABPDCbXlH4ogxbhrbS
+7hH1tqBxKggQBOJ/f7wjdMTPmgRiuHNTiq/PVbWe9kuhYxuVfbiQKOiAqK02p4f+IfFCAinh3ZuA
+hEtAhPPUW2i2HZ5bdm6SALTmzBIAUj9078icH4snCmaay/14OJKgieNbr8fZeSWSaYWX+aKWnPRj
+O6b9+wYCOw7grLfxw+5LPDccdNN6ySPDf6DsT9d/jMCbmiKiYazEk6kipelZSTeEzo3JeGNc4IrH
+XYindOwmCrk14cXrvRtBd3cQKjePV5x+T+q/h1pIruaKu6E1+xaZjwaTMqb94vBc/KyyfSEImLJz
+y9YdrwVufGjQHqlrTERgLs5SpY7rFFsKOUBwIMCk7yqQYQ+ZrCxlaQEUlzCkXAeV2Fwakozkn6Qe
+1IgFREkGIARZignG4X3AAAaBpGwNjWRJRFpOW/JwD9NxcuMi4wgQWlCAIH643tqBm78pQiCQGghr
+eHjW8Ad97cFochBy7HSAEd5gEyJ1BnBh6Op9LfbvRvtlYIDdOgeuIrv5BZ+Ttgmj1pcQW/ygjB1A
+QSFHP5l0dMha8HXtfOQLdO4ANDMLCSDE3mOpsTHzhJSOkDx0dkMo9yD5Wz3ei06NfhEKHFzgAdLB
+Qg18/vHkmwfcSQBxLHZh4J49YOCGLQg+bxEUOCwDgT2KIQL6EC8R3cGrEfqmK236v/m3+dLLedAh
+bQ5i7rZ31qFb8wYYZMQpR8Y8nX5L+M1FL8Xg+WFR1kTTE3ud+EUIJpybsTfdNdFQiyz6b14zseKv
+xs9j2H9PG2oh/zpERW1CM+CuRktnUsb6Ow1z9DSy3fPBBJaGK+buTwzH6hEHRY1tQCKOebbd4O96
+SKfDKTYBsSGatPhijlPdEOdwGobhMrIAQxKIlgFtQhQx8wKPxGBm0rwnVVCLICUlseZNBVJ0AzFI
+UHyYhU1ErCn1gdbjlaTjXnOr1v5LSAfC8vLBUXcuaeN4nIspFEhzG5gwdcLbh3waBcuIg+hfmiWY
+EBe6CO1SDgq0x1dIXAqntQIahMQjQNghuy/roHbTENJqAWTUiNm3ZuxqyMqq+uRWJQdJRpWrvwm7
+gW67IACBW26/sm385QXKNBs23YkhWyBQr92Bzb32AKO+BkBokK8RvBvMzjdTXnNPWL8SGsBZak2D
+ZoshBHfvuR6DZD4BaL0f8WHbSDdppWh2wzhNK/FwC0zsH4GPAUIULI50YgsW5eAyTmzSh5tDUqY4
+POad5Z0v0SvWXU3bFzW5fW3C0gkqFGwFa8dnd509/6XSa0bcik+v/Kvlq1qH441f9z8DwRAVZ1yl
+AXdVcxWTlllXFuCiTwK1YLIjxhEYYHXR8N9de279UdbUBiQC33mbgeI9SdvTMpOJu5OS5J0MDccM
+JQCwXEZcL1BDHNkB9GUmJqQTowUITAtKXJ4r4bP4roZKbG47p3CT+nk44HEyy3tzfwioAYNXKlOo
+mcfuJ5F067yfkKvCgdRA6/L8kFbDfNMGcUKJRu/FAAiDzXUBXWdZhn7u5z8QsATxG4qIAURmALII
+ACB0m22lCF/eILRJp5bpX2e1BPKOHD1LEfqvBzfxpvu/jhF2iLjjb2CQirjO/dnhOBXdtmWc9YRX
+tvkGGimj8s0eaxDuWgsNIKIAAYFHINQFHR4tGB77MoSCMgZsyx+NhSDgeglcvhdC6TCxGcMWFju9
+fV3aWjaQyLsy5Ba9c+ZEzlgOLdGaGSoONw5c/0D4OUj8lxsdobjF4ezUCbgyAG+q/6ZsGdGjyR/h
+y8+n0Uze2Q+32/DGm63PfrDlii5TF/x1C9e++M+1DRziLK2g8WomjnBXXeXSKLliG256x7Cj9pBm
+qbUAILS+6HdLzpw92qqZl2MCk/ztuzn7ARAL7sOk5drNZOHFCpeNIgXanClVbxCDqR4DkZoVPB9K
+z+ALtGQCiJYCbUKVAADtStyJg+lNLcevX9086G+x7zHiPx8GQpCDVqN+78mPaeTlBQFHKPKel199
+Ik/4+bd5KozobdBgjNmT3id0PjT27YNMSYNzAwAwohYiKhuAIMVovAp08GCQlbOnw/CxTQDM9VTd
+z9f5K6DFQd9GP+K4Yg13g63QIO7fSMm1V14+IBh4ZQFiI9ZBg+cA0VuRuJ+FBtD6NzTzaMG4ln/D
+pZgDBnHDFm9iKG0AlHNkBhxDnxYCHL3UgnsKNPqz2Ld3POjgjusi+bNWMbwig1ihHSTljuBGsRsx
+NB7tQhltYLq7PT5mQrZrAGfPT1kCV8S+7hf1Gw0AWP/SuHcHennbtleffnT0dRcnn/aNTH8XtY5/
+iaID82H53X7g0YLrBRwdq400ixtmY/wk1gICIBZQEkxMTJQIZdBno2smBhaTFvTtSyshxo7s1mrS
+sxzYEWBerpzenk8o/1isQgawVFgLFdOGiEA8JKwIyb0BvLgBTae6NQFgkZ5sT9B21Z1nOXL2NaG8
+2xu8UAP2akYqIRCZNOOanDFfLZMqPyeE+LD36U1t6C0/yzESlyBB5xCTju79BS7AKkEgoZxJQGY6
+iAESOXCWgFgDDOcR8BXfamdEo+BNK7xKlC6sImSqoIgNQJsk/zfkxDQgEanEIJxLJY+3nobUj5cu
+nzxkft/cNKkAydG0A00OAgCHRuSgRwocnvqDkzY5B+7fCQ2hetNcDE7fQYyWzaJiVcPWWgO8gIN/
+3kWWsyfxEvRgrMdwpt8vYsyH0BzajhxFBT1I0QacxygOIbRweXqtmtvtv1SvDa0v+SHQc39oI/31
+J15NENbynPO+XPnY3BLwhMZXt/22z19uuDpT4z//78CBDY8QF9ojIaMQUjchq5JXAxOzvPdLvPiA
+IsG8N7yepszHVzd5uKdtCI50epl3WjXi5cmkReHtnwLXP9gawDJw66aQmnYDGDG68pWClgGt62sC
+C9223294tmmXtA8no+NXzWxztKakDKl6+eJzMrUGYXt/48kDMyKU/DujzTHiP+eXuoNh/jo9bljR
+E2ChMxs5Pdk5Ld796BaPvwHZiN6FVqkgFmpg4EyMzd6pAVaQhXDmaWgQx6YBrnQAfXt8kmPkEDfo
+8AVKUpKORY3Qzc29Qsd8V8bYzRYDPfZBKCgauOXqDRsLHvs4Dw2arMfQtVAAWDdLZTT5GRpCd/Vo
+6v4WPGgeuFrHNP/MEhrAMFpbv/mvxRDoyGFnldCVa2YGj9s9tfn4+4k4rpWSs4PbCSxAS+QX9wLt
+AIi7N7XE5vxu7Cxa4B4KTG/djWOabe32WOwUcHgItvY8Hyt3VKJ9Sbsbr7sxZeP8nROu5DbnTj+B
+QF2nFbVoKPGBuQMk0nxr0JwJQntmYrBS9t4fJlbyhdecHz1gCaFobbtJMOmud9b8MCaVNEAIdoGR
+V1wzJnWNwos/NVxT/9tamSojCejkYI9CKhhxymNZlmUpywKYmAo3At2hCaTlt38Mjdg1vF7byfUn
+LG1tC8cMrGUd3dZepyLilkJhIy199fxLasLbk5GfjwBsfG5XeNMPtktNSHU7kT978kV7v/J7BRLi
+zWJ02QyAcRWWt2q+tKSHAQBtgUZNENzdyQjOB4wiANfeG4GwEo0G+RAgIaSsdoMOoXsydBT7w0xq
+I2oXodcaAIQGm0ZuaKcHv57nNPpm5couC6l/CAB02Ay3w75j0AEkNN5m9HbG8CE0kYtAgDIGHjw8
+BHPjW2lEYf10yoz6NHPfQ7svW944H4S+LjKXDtBrPesogrJkByo5BCaMZiU+7RloYtHBTk2ZZiez
+FdQY6zYmJwnEAIebWSqJpJBSGoY0IIOu2l7/lYtvXvP4poXDDkrd/S/l59oW/7k20WJDozcIB9jX
+4Q9Aoz8JJk1SMojBYGX89yH3tOu8grVSWz0JcOTPltJIX0YaYJSaIIQE1IwHJYvHZrmsSTeaShBt
+y5TozfM6fYdAAOHCkIZhSCGMlRlgTcmphL4ghhb5dzScufrlG6984IttTwf7Q/ARLQO3jNH+LZjx
+9RS2q7tCXvm7S23H0H/z8uHE+8sePz/9RWgAaS4ndjyS8697KtzY9iCo0Q4w6UYj9qZcw3OfXTEY
+BmIjNLrl45mVZwNhBxFYCOJ6j3ZIQ7EhEALA3gppyUFNq6Gn2zKgWVrZ3t9Y0wNXoyRoMPjBFCFu
+WGdAWYPWIi5m/iNDruwEQuNkxGVrAnRgj80Yncu3L7khD6VoyslgEBq0WIxhlLL0ZwGiO7G00+3v
+ffPKba9+GfUTBNCfxYG95zzV4/MDTgbH10N+KqDDLoGR8cXNTPwSurHI27kfmhMdCzqUgFBACGwg
+ZT6zVkpblrISH9+VGNFVGpkfXeoe+PQ6otLTGDb8xFDr+JcEjQq0sMsO3i1oG1R8NyZiYS3fJIgJ
+IGX8eGvkd5fDKYRwys1oA6GE0hbCQWDmtFIitHPUSHo0LXe8Iz1d77SkJIjZGtQNs7ZHcSwIpWCA
+mSzxce/ZpJjXmxTQiUCs6fcjfZ2J90/97MXLI73KH6NaFG8EevgtW8QxDYDsp9c9lfj3pOdjgJGf
+B7cjq9V/6LVUyQBSXE4UFL3yx4IKC05tdiFRHgALjAlaZFxBRy5GFgj9ShHZLC38YjoCiFx79XlE
+IZeixE0IrGfTL7nvfx65q0pkBO2I2gy08AumhNYp4ETnDjAEzokmba0XFiC6zUbvgsxRP0dkQIUZ
+uxCTCoLAIPchXLYEV8rUvRQOg3MACAwy5mDIkdhGRzSKdi6Nb5ryzrhL7s/v5PGuB5SrB/EyxP7k
+OJxi5nBIZwtKQfCVsV55b/xIy/HpAkSBUwqSycCopvUGFJBGaiHHRgJu+0Ue+s01fFR2g0nfRigI
+ubPI2ruJaeNftvHR9l8SgoQ4fZm8ah3/gnTCuYwVJMEAShaCLw9SpHFkWL+u92pmJstYerXzue67
+9+/fv//gvpXfiThWES1JYkw/LZhAayE1rqgRnzZm/tUjMVZAsJJ5n0IlNqdFoZ1oODQ2EIMB07H7
+zqZnaTAvh27ZSIFBvJKS83zPd0rNZG/h336I0Ev5Q3Fo2QaU9GTf2/82+1a//1foTDjdeDx419t2
+JzvsdIHH9LuvvHEhG+xC6yxhAOIsa163hF0x8Ss2SS2670U3hf6NVq+FKxcoKiTuVK80UBEQSaXN
+AQCGSnzr85lfV16+IiJuyjsFGm4vEwla7QK6HoIhwHRrE9QfKjQc6tbSJRi0vLG7KCrFEPHpCrG7
+BEOKMZvRotP82E5p8w5nt8XewmKw0I7nDv0c03xtvP6NsXkOUnYBQI/pcKVtFoyoeK1nh8itnRTx
+Vo5q7OXQcGE1nmC6Zk5/23JsuVeCgCwcyhDcMeWmNYoY6Uncsx64IyCkuvr5UfHPp49J9naLJAjV
+O8CYGc5H5v5t868uLi4pLj59AUBq3/oVmMd/p5Zt6mgaMJ3fp1DYOBZg8foiqV47Z7iS2th2cYHj
+obvtSAzs1YnRpOUNS/RzD7MlSJE1HcIaNULXxJwGwj4B1CcL7MC/9zu9rcL2rRsdZfXru0zMeCzc
+BEnHgXPUt1EQwDKgWwAABvJ446DehnAEBdRr1qE+tAALgQ1e4R4g/YlYwR1mSI/rNedfRj45XlrT
+EFTa5xI8l2evwxwiF5yvfJxUNv0yt+AM9FmkNRQSjMVXmbmX0WQFYNdh9JiDu+lDCw4TSNwF3PV0
+1wMgPtDvhx0d224FYPWffGuDPasqE8sQ3Gs/OMDwh3nVjoSPiM+dCwvggMRBPwS00IDZ77ZRjE6T
+r1zZbC8sNNsDYe4DYCL8J5yVvvtD18cF+PDugE27muyXFr4KOitziFl6ufgF2PK7I++RhNSwjXsn
+BbbdXQwJh0tgcftNNHidxtfX6T55QQGj35RvNsSqCz7sjZ0X5jjUHuJIFO6pJ+5pF7xKaEjzh17N
+k5To0nMVMO4dz/0Tu14z7J1Hu6ezBdwqti6cIaZkiL/i36PsvzqgDwOOHactoV8t5F+puj72hHnX
+zADAmf0E8YtxSjJ4ryGEuResKWXsEcPKLX+DhGCW+soffvqmx3AHIPDYJqc3YWqNcC/A1FJL8fkN
+biD79q/abaes3MnWPaxdrw4tOnTt+zEAf39bzoweqmSX++c9DrVzbrhsHqTEwI+MjX5xLPyCR5tr
+ol2enDckjHkdImP9yWdaQ1h39bD+Nq3Hyv+bDhn8mLHa3ujLyNRBuDn20XKGaxHccIbQ3Yxsc5Oz
++cZ1+4Y5tkX8thnNA+qv1TQggrpu+5xQGAx0DNh9/2xXvXWkaduQdkkz/zh/s2h6SedxIc0+Omqs
+ae7aVr/hu2D+wWE2yimBU+les3IN61BAWKxzW3Fp8rWP7U9ts8059KYbY6yMiLPdk899PyEs7PIH
+JXuHZm/T7em72dSxSe9my6aAnr3sP08/33Gp1fT50BHrRZTj8Mq8wxBFM03MmUWb3ln5A/DyrMdX
+Ijs9cFufSx7h81enmXNnj4ifNTL0jS23X6DmP/b+tVj+r33Cwpy8kMTBC3b3emj20y8QAxrvjItr
+v7FbwO9D3S/1PzTvsgF3ucdkjqNzHng7+qVzDn8yqelvr/wl+x4Nb+fBRcTOpgtOV7oeenlPW+dp
+CnVOakusJ/Cm8KPfnTXGTcWQZ7vQqgdXYMLTSgBaTr8KCF3bjFmOe6/y9Vd+ahlMxVd/j9EXtA07
+8uknQPdP2tTQBkLm/AsXAIMudm/8uPR711mAu/Th5zRpOfPaDDS+oFHmH0mtpnfzOu9/peye1V0F
+fryipEItTeY1x64uRb6jB1+wXUuU3NDb02Jt0N/WYljLgYurdjap7n/hwLtPO8+18wUJ3WJT381Z
+bz3iM4oQN1sb9sr9qLczAkWN7nnyq8txS+SL9ZfMfOhgBP4YiSvbPXVB9h9Co0Ph3m6t1zXZ32s6
+MwjRd/288p5Wb+UMStszKvWHSuxLHLPqmoVOr++gvs5s6t4J+zio5PLpHbagz9x55zriDzZpt7LV
+hbvevDn01R6utfvrYV030OpuVuzFU7BmcNHIEa95R0wHcbv3H1nYuEAO1UVXPHwk4d5n01a8+ZnQ
+Q/q+XhgTujOqzWLQ8l6FY2fjtvUr7sr59NqPgdJEmtPm0Ia9B39p2n1E1sjgnCnPeYWG0Le/hUNv
+YOf3g9O3EgMQut9PkRt3pBTNMfq1bta9+JbpQV/emfl4GL/Zr5unVb/AT+/I/2sxSKpxb7F/d5yS
+n64fUijYyFnSXIpC7/9cGVX1a+H8yyTwQesX5/eNQA4SJ16tBTEJvjL/89DxzTWBw9s4K3RdYY4C
+Qeig7z6e9NtvAICImx8PqpEVIQCE8F9e/yp54ULQlY+2th5432x73xWaSKqzV7zwy+G3gJYvjwtS
+Bhd3CHY5JJM3J6aFOHTX9+jbUYC1VbB7k+k6NOErZMYFO93S8nqLR/nd/LlZTMq7ISdA6rHy/x6W
+pdc6Z/nSfTGyXSFP0ST/ggtx+JH9pQNCkUxh6/Prb2s2OvvQukYPixlR6fs8wcMLDq2MWHCENLAl
+Rq5d65QJX2gATOmvXN3us1xhLGw/cP5RHkrE4ZnZEcJremAIrQtLUSLdDq/TFC6XwWLeLtDyPo9M
+eXOHY/eejsn33Nh3GprsTW+Vvp+X9Wh4qHjrrtQG23NdY7fQ59Z/kiE0JV34L14kHTN7tX/ikR/n
+3eV6JmwpAl6+RTR9roE38tJ2ids8vazgl3t4v27bZp23/TnLKWxjmh78xDWjZ365p0nv3u6kbz7e
+B9KAprcLHmr7wsxXhi6ygwhAi6VnTTy34dtvZg0J6e9845V9sujmGxYOznhqW0bpjT0WvPXLCaVv
+E0KwOH1uW7Vy/iUGHf551QER3+f8SH9+MjuCGoEJ3ko3sBP2ZmAqXTrnYIYR1+XsJlA15f3MxARr
+x5Hi6BaRUBIZhQnQRAxSEtk7s2RCcwElmRT7xkJNdHDktvofjPE930r6zxyKWx+m2d6br1mWV76S
+e+u/v+mIlfHK/VVdDYibvvdh45F37S7riK8e6v/urPJuSZJl7+D5JUJYkMQBCV0Or2SPBUNrBCZ2
+Slnl8TmeGw6rkTe1rFo0i913pJkj9Ug1XdwhNGltJ1oUChAgaCYhhOUote+OjdjpJaMEQLN6JQfy
+CFKDOyfOLpQmpLDgatQrf5lVAABCI9qbZ8SUZuH80tWNDhs5Vsg3Z5n3fGYGId+7uL+e5hmnrZ4b
+Xa6G3dOWF7MQFogR3TkuJalDo0M7d+uyZA3Ezs6xuenW1jJBRWi06Ry64eDA8C1rSiE0AkZubpJQ
+tLh187QVGcfX8sRN95bFKlPy0/XDCgUb2YtanKb5tzbyry8BoQ1fKlAm1pK1qG5R2Z92WJUJE0rU
+XP7Q8ooVCWbhI4kB9jFiebZS37Iyjfk14OdhWgMgEMTuLgWN1jS0A3aByqNCMzHhRLzxjiE/VwOj
+Roxofq6lE5loxN/yo/E/yn8X8cv3497XAABxWx2Of7+9L1YNXlrp5amCSUeWh7Ss2kAVzlSh6vg8
+r2ob/9ZC+Rl2VEBNApqF9G3cYRIMYXNylRuYQAzJmu2bRA1mFyKGZGYmsmN+gCQxgcBEmhmCfH7X
+/hssuW4WDR5m+pMRazMgoDA83B/a2b/X0f5bVZff+GQgKiV9IKtKLxYVg8IKrnBQOaN3xWZmImY6
+wRgxugLbU/nW7opMV+HRXHaXgCYWOvp6bJ0CYhhW/0BlLkMBio+AK93DRMRMxMyq4oPt0LCVSBHQ
+LIh9ab8FE7EWR934Z81b5/98HCBf4F5R3rXLhMzqpE3f9n2WdqKfGiemwiOp4j8VT5cFgwW2WmgB
+DZDt9un8OYOHBlgVI1uR/98TjFZ3LP0X0JVSwTOqWDQrHlfqtEdxZ2UjEeMkdDyu5q9Kj6t2YPC9
+SVzApfm/XpNJAG7UcvWGIS1pzW7iyvfYfrXVVXE0KarSaTveyRm257ciatFQchTs9A1/7xb8/XtO
+Bd0JEL/lubRlKcti4fz9EY57hGt6WPlngFF849dLe53Fkq2bB4nS69v/11kw/vS5Odb5P/+/h9C9
+z9a7zt8oHYZhOMTeB8/ObjGzYc3mKzuW/ff/HRi7k1F4XlioFTDufZH+/IBl8ZmXralVIWxOK2qn
+/HxGg1h+dPXshV1HDIoNzduz4ncOuHlCdA2Gs/1nQXjv2vP0xkvvmN5s2BvOxuMa4ttHt/9tN4sa
+JKdO//3/DhYc88dnny+cNQsAqM+Yi5tD1VDCirJnHFP//f8G5senfvPNM5Y3d8I5V7fb/cnXa3Ea
+2bfWoY5/axzEpMVVV6Xsy0nniJhW9QBFNRaL6x8HxsGRbdr33LOzdbfSZ1akatBpXW6qi3/1/x/E
+gpVs1Mh3aNWoOcv3iH+K/guAeNs2AJs3A4Dkusm3Iur49xSAQBJ2alAikjXnS/KPBMOO1S9w3Fba
+U4fapv/WIlL+X4FISMMwDCnoVOSqqH7/7/9XsNYMVupvJEj+p6COf+tQh+NHnf23DjWAf5L+W4c/
+QR3/1qEOx4+6/Ed1qAH8s/TfOhwTdfxbhzocP+r03zrUAIjr9N86oM7+e6aCSBpeCFK1spD4/1rI
+OlfU2X/rcJJgHq08wq2smihU40VbOAWFa0FR7qLT7UJSCXXz76kA24HdCadokYkkLgnI6RO5LLtv
+NaVPveVZxyq9o1ZkVld6Ra/MOFbpWX9VenWlR8zqtGOV7g3WHKmudGu4NrW60rXRupRjlS6N1x+u
+rnRusuFQdaVT040HqysdYzce7Bi76UB1pUPc5v3VlfbxW/ZVLB3iDlmu0929KvaE2hj/quyCv6rg
+GKcZOJ0+iwywNlCzYbhqnMjaStgZhLr4V8cCA5oZJKqfwhiA1qj2dyY+oUCgNUc7sZZCZ2fXD6+W
+S9gXTPNkGIjBCsIOEuUrFeN7KC2oYmcyIcBG+c3201kzV65DMxEfVe/xFObKeQktlqLysT8+1d8s
+xl/c75cfzROs/wQKxKmSqk4EtZJ/GdDCjgylq4vvxsTKsLOQaD7qdyYGFQeeviZmYpYHp83YLKKu
+fdpZlYGZmAV8UXFPFAQSsKNn2YUpfadLOgzBzF5P+0CYa9hhOCSYVWHjJgxSqy2X4SDTKm4vl+Rl
+ZuVm/buHNirXYYcyJpaV6v7rwlS0yW1ISQBYFUQnwrPB4ZBCAGBVFNL6hLZPMmH1wdyM3IxWD1R/
+P1PpoqzsjLyMi89V/9DwRLWRf+3wsZs3HkBirwQoyUf1dCYtjILlWwuD47rGVeEE1vL+Gd93VycY
+Ga4GiId465kj4eN+TH0p+PFKUet8vxOlqKZcowIsa3HLj5BEBDYRlBxAP10MkkSAF3j7NkVy/ggY
+IGlZWDdjEgBg3NHNykRppXG+eLyA5uPdOqWMyU8AhgDIy8CEpzH9RsAgAlkKuGbaCS3ZarmxJwDg
+hmME2VXG+3cDAEbUTKrnMxC1kH+ZWMuVE38HAHnZo22Pjl3BpEXxlKm7ASB4+F1DdEVll0nJ71/B
+hu6n7YOypnumYNS0TdOces5jVbo/acq59xt97zM1HDYWob3S9wIAmkX0aqRlcU/PZgsA6sWFDYdg
+FLTaXwqYaNyltafbgUynSuxU2ROBmEse/NR7w+vClq9ZHreWTFA9xYEUAIhsIYwxQGlPmboPAILa
+OvjyE32r7F55O4S0Rh2TPT3djxx26JCB9A+dfmvj+hVDyw9v98beN9C74KWsqI/OrZxfhEmL/Vcu
+xTkdzPXzAIyfVGkG1sjufgAfXm+dnpGJScnnH8GwX9xn/+703v9y1fmXxWUzAPf22Jo0IzIBynP+
+HEMFfnGWIcEEC5/eIKFufy7Ibgn27rxjEY98vHMgmHcOyMCF31UWOlnL298BsKmDkgCDZqVfYRy3
+lKCpcNB6h9luViN7XGJtnTPXYcYsbHky/krKuvlTBK1recy20tmDk9B1zelRSevWr6oBk5Lf3YR2
+v8YBvcaMOnjZnD6VZWGNvEtX9Z/cE8Csm1LxQsFbqqzhGNoYv99hnj5xSom1T1HAK27d53dv/wer
+Ro3VctuPBulQd42SSAxCYM854MDeLmYQIERfhynRJUwxiInJ0f7Ghef+IMFgEaKBQUcHfJaHvzRI
+u4KYAGbKvKD+v45/ZCc7QcqljZUdcZ+E0wPCOa30yUQfYZcDiE88ZgUsQgH0P6EkFv8vUAvfW4u0
+OyHejvMo5Wn7IopvLabKsbrFE6sG/9RTW5Ye+aWDjbc/laosIYk2fp12fJkwTg0I9E4pj+5oiQmz
+Z82vX037MpmWqW6rX7NCDxEzR4KRe4Q1iMHMzjAQ9tttx9BcMiXkTWkyoHl9lhQ9qqzcw7JMdWOi
+JoA0FpReeLyJ1RisedtOUuih7eTkrHBwMzT6anXCsd8ZWnrWAn2NY+z4Yda8fZtAr3+uL2lt5F96
+KwV9ByinEE41tgU2Txeqovws908NfDnCS1KSt981WtAzJX4NmTTl3qNO52KGlpm/AmMZEMPPMnRV
+Q5bg1s83aTt5Yo3HcydQFEBmAdnJIAiRAQAy7Z9ALKeveSDOcoAIWA7VuA0qh7onbvxSfIunXmFB
+YCb6En34OJuSQIw1SurIjkL4I+hvzhOWs5t9fELvSgzanyzQ+1hUEDHWaB3Y7R+r/tZG/jUKPgWG
+QhMBcA4CpqkKsc9Z87dF1hVvOxkgoS8TJnas8G3JZNbioV2DTyPtrHn1EQT0IAFWiisFfWZfQCw8
+uH3DfafERh0NCGSCYS8mL0whxhGfaqgpd0KTu7VgAgtaCrSPOEoCIOJbt21+zAAxkxYbfg3sdPzJ
+LBi0CIRWjX2VEmMJJJq2OhntlzSv87CrexUyGMwMBoOWAPHN/rnOKLWPfxWW7xPobKt0zAmQy7eI
+CpGPCFugdv57HWliQa3CWGK1T0Ykbcx7b8z9p0YZYtaWaVqaKyfuqXDWTpW1Cmgdy2BIQQxmrTQz
+s7a0VszM0FagoXwirg1U/vsEQagHZU+4ABjFExQxMojYXvR7OW1SKAsALNKTgYHM0Er55V0wA5bb
+pZgYUIyHSpslaCqjiKt9/3LI0g0A+vnNYiywAoTuAf6RlVlZpmm3gO95zFppMHM5GX7afedAi8BN
+fGOA7wZmZlhKKyaG9K4vl6+ZWSvTtNRRTcqocGT/WX6d/9Us01LMlj7DRPFax78MXgSBaCICCJQI
+oZdVNJYSSgQZtIkYRBQZAMJB8ifuLPi3623HKYkXxwrCcDgMocvz+zFD+84yExMYRIuAzg5b4Gdo
+TUIKUqyFIaUBYiJh2M4XDNZl3ZbBrJlxUsHuwgJANv8yKfn+ZrcGCpQEQEruea3PZUowgZm3HJHo
+yYqElHa+QiZmIjLsDqGUNB6aha6ushmaGZrL37Rq+2jaswsavf1pxVikbwWjvz04MEGRNBwOSQr2
+eMIgIiEFKpLhf5ayz2my1gG9XdpHgfI3JhmGNIiJ6cA2v3xtkygdDkOSho9ntR0FlInt1vZ/Ffs6
+MNkjKoRhOAwJGKIW+VYdD2rf+rOgLdAIsw8I0WCsHFdhCVMbPb7UQEf7jGIADgD22vOTyU81WV7z
+NDExDOzdcFjHd28EXy4UBmmS2Ld+v2jUNRFaMAnIrCRgOBkAmDQkCtNywuMNIPOH1dZ552uhTU9e
+ltGeuYJWyFSeafHERUHi0NASIB1gIi2ynuoXP13oosJQ2yH80aJJhrJTsWIlVIM2wqVS02STKF/2
+U6FNb14WOhKTgazH3nGYQ+zeweR7lcMbdusGndqgulwwzOs8UoV29mmizJyULiyjOxGBQUoaesO2
+9KDWPQKYiYmYoExPXpaztRRqb7ajUYyvWgZpSKj0dDSph71bhO7L7PfpKU3LDIwPAEp+WpLf72aw
+prWl5OxGRL7b0jbuKq3fvrPURJWSV1ZobWItkb5hh1m/fSfSgolZ4uC6w/nhPbvikzY99OlOgPe3
+UAv5V2+FdkT4m9tFGgep3IBEUt+06dvQ8V3tdNhpBdCItzN8K2PJKz0e1DXveMWkBb59dSkARPzr
+sRhbiwQpiZ/f/wUAAq+YFKVBX051Z2UAUz7TuslbAUpi5pffFIM63nD5lBcsYNq6jnesyk8zS0fM
+VDLtTk+AU5jKW/JmM0t+83Gg06kLIt8IOAkGDglJI6TZ5iL5TM7kuQAKCkIBUnLZlxcPVDaHEC0G
+WjQ88OYnaUD4mGebasEsHp1TcMRb2m05k3f62h8PCQtvzbCECn87ShMpifnvfWsBcJ47Ob4qAxNo
+IYSKa2r55E/LWAphNWzLAgApmf/61AMA0PreW5gJDM9d6/LTrNJzf0h9+78pQMioZ1v4EpwribVf
+/LYNcF7y/M4icnQnIiYt5IpPv84Aml1254+PZAOfRF9ogRaDm7RmYX+MWR9+pwDQgIdHKYjZrwUZ
+LjZ1UeN3GWrCpmCnobJH3mkZcuU7XxcDMIa+3EELhpj10lwAwPnur57ocQr6zylEreNfRk4WEOD0
+HwcYJjJL3RX139CPJztDmAis5bJCqdGPCIBG8b/lO65TsJZBmvJv+7zl4z2jd72w6a35vzfRvl65
+754f0e+WVgdeX/ph8u+BzG8uBQCsBNDHZRmp98xAzyH62413P5V345V3JZnFmW8BAPpCGUu+9tUe
+EshMU5YAAPq4TtysRBwUBCCViEmJrW+N7LUIQH4BaQb0QwHP+Ty+WOYkAef+eknJRR1Lp2Z8unOu
+m5ky384FgD7C61xxg52NfjUAJAYzkZKZD36EDnd0TH//1++2LIquQiRLcx0II8o+m8QyCHQKVQJM
+Wq69NmnYA+2d8ycl37r2XQZpuet9AMSj5o/NPa+b+vDw11uXhDExsZZ7nvhcR1zTrGT29DWJ4Ibt
+WDBpUfLIm1bzqwL/WP3cu9nn3/HGTDMFbFjrgF5uTSDL2PPAdxh4eTvvojcWLZp8n1d+PNNHy3lQ
+RprtMopB2ih+bIqVcFev3M8+/2PE4uaW0P95PfL5QdFyz1vfQ/Y5wxLd1Dr+BXK8FY8kAVklrooe
+ksz1oAQxIOgLSNWnkxZgUsZzmyZ085yC3ZkM79U/JcxpCvQc0jVz6wNfaiYmJddcdADPPwT0GtFj
+z9L37rfopRz3A+vQ+QUtrTaQe85LwrOPAHf3TMu663V4zbM6qVkZb62QVj+W6PVrzjM7pTr/otYN
+2dDPvvaTdl7dZ4g4CbOwlmEA8uw9CA/rSRwJptJ8gJScsXh8C9uPjZmTDxIvGH/5y42Brpe4Viwd
+oQQFfpPx4VzD7M/ErX5z5Pw7A8MesgRZCW4mJfecvwX3PecCRg9auePZKUpUefSB7VCguab9C4vC
+TWAMYAZIia2j0/81HUDf2GuN94ddqoTgxr/mv78ArjW3j56SCAwc7kr641JLEivj+ztS8PjdkcBz
+E5/aLnS3IE2kkXvF77jx9SA8OmRN9lk/4C2z7QVMlLJJ6L6sJVnGiksP1nvzcgDDx5yTcX/Chfo/
+/9rybCkc93ftCcER05/ZaSVc03G4yBi7BNdMCQPOLvol7ZGvIe5+s/3vjQEkDBs1O7wz1boVoT9F
+reNfFiUmKmyGIwAeVWHJhBikSYBBSmyYRwpPGUowKWPVCx0eUaei+ZUx/Sf33oc/1tJqeOkUMfNw
+Yw3SctOYI5g0XmlhhV/+DM24W3Af6Bzg7LMAQBdekiTOfUQr3Xjw5zQ3P/ib7SMDcBYOLLdi2pFA
+kyZIu1+qa88DE9RA4/uor4YCfOJ5Rom5AYDC0gDWct5Pt3fmBoBQWWBNheOjx2vby5QYq1jyzGce
+hbJEG7JoLzNx4DAUzLGCO5GkmLOxPdewLhpufxDS8sDo7bhzMkxhua5bRj8+G1zF5ZU3FAmFyZMr
+nrWoB0Bgov+ku7644EItcMnTO+nTSwBC+GgUzRfqw/+8BGWJFi6T9jHAynj/VgRPGwul2Xhy5R+G
+tx9rySxu+V20fdNtWgFjVtLKXQlvXN2/PhNvKCKjOxEpY/mYrPo/9dJKwOox7mk8dFZg167n/r4Q
+YQ8FAQLOf63aNujzRkDW+ctx6TSYwnLc9CPN2h/325uO5xt7DILpHD2rQ8wZZoqqdfwLeHUlb1YC
+Sq2Kv/u3zjIzPeZxecYPV4LBKP239U6AOgXNz5I/lKAMSULqOIj83EYsNDIuOIJzxlvCwVK3AB/I
+itGmXH5A6D5KSWjHs+sMmqC1Q2kDfCArpE0bMCyxFGhTXxO0KVuBsXG0djAIb+D9oSaJk0gTzKAG
+YBQWuDW8D0Q8oUU9aIEMkDbe2vduhG8fCBMtgjBveNQiYYhcJg4GmNiUi8GJ8Uxgr5xtStlZKQkW
+QnPxpdtFlxcVOdjgZuD0fR2O2t1FTEtACO1f5ghnbNsjdEwHEoCWWxcY4DzDkpANd3IKEZjYayyD
+4R37koIwRL4lrCACKeObW4V+aawphSATw2cp2QNElvHJ107vg27TQVpC5O1v1qQJtNByMbhBewgl
+tp+XhRd6eR0OJuiRT8sdc8/zakfLhSJvc3cYzJTxTYOvYjwkr1su4t5l7WAHJYALd8a9D0crACCJ
+MNGLT9e+tRNELeRfXcnfTrNvkfloMFnGtF8cnoufVYKYLOO5Nff1s06N7yQfUgq3a0toyoUKCiJi
+lg/vNegJS0FDgYHiUoYQ6xWFdpIktJH1MVndu0AyiR2AYZAFSdrI3wT0gTYgDBEfUIokwwIp+fuX
+V11oGjgZP3wC6gPIK6ivnNPWvVzf6wxzlxKyoWXqpI7XKd/QwKJwI8yYSZokM5LBIhFEgMO7Hujt
+UBKQxhKo2LaCBMBg+fJKhznBYUkNJQFRWnL092ChVkKqsR+Vn7pkj9TtomxtILcEVvx5SmuhCoFo
+m1antR5m6GSGZGC7MtCMoUTyrVINGWfZxiGRBNWgA4iF+Ta80aNYMsQOgAwySQiWeg3QPVgT1LhM
+6nq1ctiGqTAQloyRQrSDNPf1thgsnzj8TYxlyKm/OL0PhHulBS0YxCZvQvFrLwcAsESaHlqb9uYf
+D2oh/zoEUG7M1wy4q6GSSRnr7zTM0dMIxKSMDc+2nKhPjR8dixdedI07HxLAenBiAyYt5n7kMC/q
+AQOAgWzA5SAmWgpu25gJ2liR5jAHGJahKX0PKLG+lgSw2JYqdD8QE4iaRB/AXi2hKf/2+q/ok09U
+GAVGYT5k3iOJ47Tk0NBSIB0sJuZ+5fLpIMxixwGprom2DCbQMqhGzYkALffuFrofMxNkyUagQ5iy
+V+nElhcNs9cFkAAM5ICdzqOfy+JQMjT6+2cvpoJ1AAayloDgrvf81mZifUggexdxZzABWu5PFvrS
+eCWZmJbDCm9LgumhbIMeZntHqPSsAzpFaNJyzzribtGaIM0t0PVaQwqARdpm4n6sYbyxwOm9SVrE
+BAIVgrGfCNQKwHYGKbnonYsvUoIOPyK8zW6DvUaSD4KLPURvLzhvQKfGbpzVYDjOrOm39vEvwRAV
+Z1ylAXfV7PVMWmZdWYCLPgnUgsHw3u55K8SS2u8/wFxzMbCIL79EwrN36/bD+QuI27stSfSSloj4
+2pIMsJxDHF2PIUrWAN2kZTA4BYS2DGi5NN3pvcJlGQAzr7YovKPtnKLDGh1ASnaU1sbEvZ9Hq+Pd
+LXBsRANC57B8Ke3bICUoJCSdkAHHhqnnnOWffsG8xjTEGCYmlt41QOsoTWDmdSXk7kpE0HLXHqkG
++h2l6PUiBxp9Y0oGtOMn4rDGR5lImXlTjrCcXcuN2Dv3kUIvX+u5X31ZImdn0q6s/flS9WAGmHl9
+iaHPY2ZioVcBzZoyy0U/SqvTYJZMYC33bRe6P2sJTjUdZjtm0rRjg1RjYpQAmHlzFokeYCNnEsyA
+oUy2AZkPgWAB4GaGwk4IjZJbw1/TpI0PMhy66bemYEA7FkE7GolOKQZv3TopqPOoGzt3PuPCgtU6
+/gWHOEsraLyaiSPcVSPoaJRcsQ03vWNooYmUnLz8juEwQMIO6kIO1JQoxMRMcv7Xc3YCIJZqIIPF
+rsUwMXVq+WXDXAoi+SDxQDv2ZAQY0ZoV05vC2/YmLZhAREvArRtpnwLfboVITa1nOZe9ev4V6iRU
+XxuEaDDhCO9+ddCFSoCDggGkMB6m58vMIgRaBKtpBxCg5b5dxANYGyDQEnB8CxZg5rVeAz1B0Fqy
+yJ4JC99/X/6c/kfbj4ixFFI3be1fd2Ss1oZVryMJsofR4u9/npMLAFChXUiQj4zIbiQAFqlbiftB
+M6bBUOc7LAMAMa/1SPQACBQBjSitSTnfNinsUXshTosl4PodCPglxbA6tbCfTlpshEAUmCgmdg+S
+CMp4NnlqYyWk53tSWLCgnPKeCfrZ1ZlwCLNo6dIPZ3Q/ieXD04Nax79E0YH5sDz+Y48WXC/gqPmX
+SbO4YTbGT2ItIKDEholx/8llAShHAYDCAlMGOmrkWzAxxG8vLgRGj+7e5sP7QD0BTcuKHWbbSWUT
+kQrsx0LxOq9wdyEiCO7dMA3J50vID+ch6tMwJQGwKFkL9JR2cAFGaxje3R1E6R1hr9bIhoYww5LI
+Eg8Xv2D7GYUASKfffv93h7LJnaVnPdA+XAli5g3FDrM3wMTSWgV0cykJAi2G1aAdEYSAMjYelqrB
+W2UWeO3ow0fPvwLLQegW4BeffZsZGmkCSElzytt7UO/moZ1jz52PxDgNJpZqLdC6kSZi5s1ZhtUb
+2sifD4sGMnyOWIug6nUiAcHNeqylbVLCuehjiA+bKVvqoZVAp0hN9CukNRz201nSOhBaMwsOiduD
+w1n1jA3PD79BCS13b2YOfifSP/xo2d2JLn88PM8E4MC+i9ZEn2kbiWsd/4IDGx4hLvR5zaMQUjch
+q5JawsQs7/0SLz6gSDDvDY+g90vS2vuWrjQs3PuAVI8+qmrg7ZgY5r1vA5c+0gnASqhmLWBo2gWB
+fmMqX0m0FLp1HAuwUE2GfYY32/fJ+uIJtPyiq80/Wm4/SNzfFvQI1AqMHWy8sP6tBOv4Q10cC8Sh
+odkEc8s3V/VSgok5BoC36KGIx3WZ+6CWu/cIPZBtTXEJzKgOJAgsDu4k7s/MxNK7FmgbrYHkRRdE
+8S4I1WnsUW1SidZyZ2ffeVmyEUB/ts3k225cjqBHbq0HZCYBfaVlACxSkoj7M5M9e1tBXQl0YD+p
+6HY+H0xprgPaNNDEZAWMXY3vBo7x/PZwcdT7F1q2IVtkbwb6sTLUXmh08dHCImsdvM4RRLCMhPki
+b1+Eus3xFkDg3SxVs6sqNZoSXX7ftHjD4h0mHAe/ulOdUd6TtZJ/0WG9tNJ8nsCcCUJ7tj1zfKE7
+mVgZL7zmfO86S5KSawbc+RKHBpPXt3PNtKvhGkrzyGz961uJl++BVsKzEugQwl44U6HR3LKHfGJ2
+gImFdwXQ2WlJkJJ/fDMo+dC5ACKuf6RemevEWq8I6OJjJuJ4twcbsOnpwbfUgPILIDQkG9jzYOAz
+DPLbk+iVzS/VLxsdmHldqaF7gphYqBVAi0a2+rsxX9juylru3yn0ANYwHv1uQH2kgtBS+QzrpB1V
+2Zd5S5rf2RkAa+nfzADSMvmsQ6LJjF6wlLEx3WH2ZuE1iHljvmH1AgMsaDkQl8jER7RhRdsmWGZx
+KMkeaEjJnW90z99xEwDHlU+0UJJsDXrbYaF7AshPh+lMtJ9OipYcMaye7bUgQjtI785ur6x4uaWS
+zJQKoVoq/xZH7YBe8J+pndCxI0o3vfEZ06YzTHqujfyrZe9PCAfYlqFwABr9STBpIe1YkwxWxn8f
+cn90uddgVtjqSWA18T/++cX9yJsOc/J1JTKkRtYSScnnvnV5nrzHIiFEcgpxH15x4703OwFESkh7
+xUSsatqAtdy9n3gQg8BUcmfQrznfJhU16HJWffhMr0S0BLpVrG9PLFGT6IPYx3fxG4aqAemZKCQY
+Gl9kPxpnGUwE1Adj77Otbit3WLaF45j2RAQW+3cS94M2bAOujmtlq7/rix26F9goXZXYQgk3gEg7
+vjSDHevD448ilRjLy52dAWJe45UqrDMJMAqvOuRwfdPDlBJiGayAzvT05780V2IJLFsVZpG5Bejr
+UPaw1ti3hqSxvtjQPcFgogdS5jaesT4ruu3IBPgD9DCWQkd0IkHSAILrwbephKaB8Ki9TaI1gNS0
+J3rcZe+8cgOI8L0KaUcS2n6wflcXi5Rw9/y04EcEnNqufQpQ6/iXBI0KLMEuMBND0Dao+G5MxMJa
+HdTR/nKW8eOtkZ+dDScAJzajDZHbXVZDIIDQkBDUzPqVFgdeEZ42DykhwDTba1i98ce2+twYBBMA
+GGQZX1/69m0WeF2xMLoTMZQxb8eYoCA7uqlX+mJUs/CuBLo4fdoA6YgGB1Hw/MKn2teA9AxAO4IB
+yo77j59fowEU4Nmg8hCeLM3VQOv6vjk312H2BZhY6OVAxxAlQKAVMCPbEbDj8I2Gx9kEDNMXFMAy
+lg58YFJlbQZMtAQCHcN8czSDFkGoxFgmsoyv1ro8d/XwOgDiX8GxLa3PD9RniZVAYqy9nXFrqsPs
+w0zU0NC+PU8gFkthhXUhQUpu/zmxFd0IADBJ+hqTaBnQtiELDoraBelgMDFZxtqfDfOSUVqAiJsJ
+hS13Fr/rUMQgsl/FplnJ7X0u+GSzKAHIAHuNoT+i02kN/H8iqH3qOumEcxkrSIIBlCwEXx6kSOPI
+sH5d79XMTJax9Grnc91379+/f//BfSu/E3FMrLXWWivLaykApuWpma3YrOm3AgMXOliwEoX/hdWk
+LS0K6ElDSGOjnebINA7e2vACDeYV0M3jFAPEK2hXtq8Op9RM9hb+3fsJ/ZVvqysxtwPtnND1AVUj
+205JczSI8Fi4P+hFPUBg2IW+pW17//uBXYS+ygKz0stghnRgkFacuh3orzSYCVuARg0Z9BtfxIL6
+BiqsJ4AZppF3nfvqCstX9uZ75CSB0V8pZkArTZ51APrA0iz4K7IcF2sJWHLuGomezsP7h4WaSN8K
+9IFNxnJYjs4aghNaMvYrgAHTkfI1oUVjRWBeo7OSfE90GPDt+Uf+JqCvsqBkH1BRvmYwFHkf0Fbr
+dzSIAGoQq/Hl1+O7WpIJxF0bKmy0X8US5o0Fd+zdqtPsoY7kLqp3Ns60QDy1bv4FmMd/p5Zt6mga
+MJ3fp1DYOBZg8foiqV47Z7iS2th2cYHjobt9OqRXJ0ZTxRVRAwSHcXK+TOUg3iOAhmSBHbhzh9Pb
+Jipl6aCGVvdBC+QPT9U3QdKRMrrwp4YQwCKgSzAABnJ426C+DmEEBUYmdoyBFmAhsK5YOIZIn67L
+jDaQXscU98nbjgCACQ0hzJ5XlVUXDcDxtD98GIGFwIYCp3e4lAA5sRBo1xyChcCWLKmHScnExMWA
+y+FxFr3WciBLFT/2M2NRUjsTMBz5l+6a0a6CiyGBBYCdB0lhiLSX2AEc3A7GUCkB8h6Bckex0uQ4
+coNyqj40p/QiOJGU7jCH+shYAG7WFYAVcOWjxu71PTySpSPz4oMOs6/9qFzkjR4eKGRQQFh8hzjp
+a8zde6UaKiWIb3jbKv75flNDSNwxH82+r2eb6zg0fp+juP0Eu0FIh1/9orFxwWATkIZ149LXen7A
+9MeDbBGT8/D3fGejU+I+fypRC/lXqq6PPWHeNTMAcGY/QfxinJIM3msIYe4Fa0oZe8SwcsvfIMHn
+Ts+gzAOuI78IiOmNI0WzkJphiuZaiK9udQM5d3zePplycl/y3M/aOXlQYdp1/20A8E+3H/mivyrd
+6f4t2dB75kTI5kFK9H9XbtniqyPsvAktNdHukrzXJIyFuZGxtgETaAlh3dHPqpHFKxBTDBjPusr4
+NUKwvrpPuesG7SnOf1lCLA0z2qpk97wNhs5fHFQvbl9B8QuSjGUUmsjQRtxSkZYXhvvSpgYqqfnZ
+uan6ui+aA1hwR9KUSypRy3QgU+Q+LYUWv8FwtXBRShoVv1pqkJjfyCmbBzkabA4onvGIBNZerhul
+IyP96UZj9+eVPieFWBUvWxtb3SuWSi5ZEB6aIPQdX27WD/wYBmDJNXulwvI/ouIjmfs41UG/b2bA
+8PH9NNHhLOtpKXl5tNHSrdtPeEw8334kgL0TP0GfzxJ9y4HKiAPkq8F2ADUi/dCP242bv+kEYNU9
+yx+7m5cLPfej6yWAnZcfOvvBM459a2P8drDGuKkY8mwXWvXgCkx4WglAy+lXAaFrmzHLce9Vvv7K
+Ty2DALCWd08pP/3OuJqI4c5ceOE8YMAlARunFX8XOAJwlz70vCYtf782HY0uaJz1x5aWn/XwOh98
+qeye5T0Ffr68uEItjee2xJ4uBb6j+1+2KVNyY+/S5muDa0qLsYwp96nzf/BL45r29swJXR/rr17T
+gU55vktDDr/xqP+2e5+Jz/D9ed1HSiqxaDAwZMjchROfUAKkxbpLdyP8osT8+atipo20Krp5asrp
+fLCcgPCkRqW9N5Yf04YOWHVOFnBd/8L5P7b95YX3ILT7jy7N03wXyEM/jvNffNUnmsSuizei3VWN
+Ds1a1KHBbADAV5doue78QxVe0/3jWVzSLdl3FLgtVkE+9AJwfifa+qM3/J6HXP7VfEu+NB63vGdJ
+n8asxZ6xG+G+uHXx0oWBU69QVt91TY+YFw8NTV33Ba5+K0T/PTmoLn57dWAS+KD1i/P7RiAHiROv
+1oKYBF+Z/3no+OaawOFtnBVsQ8IcVR4INa5jPUOCNFlmboOakZ8R+tPrXyUvXgy68tHW1gPvWe3u
+vUITSTVq+aRfU94GWr48LkgZXNAh2OWQDDMnpo04dPd36NtRgLVVsHuT6Tr82AykNw12uqXl9Zac
+46NMcEL9lPdCa8Z2BACIUoEVErNQmNAPxpfbjkRG41aOAKk9Kq9LSFr7EJdDmF6z6MLM+nGuAKk8
+VsH5AAse9PmEffPn1//kai0ILFTXZS99u/dDoMljd0aryl7alFUv1mUYDFbam9e1IfLC+wQYBgOa
+rbzYFuBe81/5Pe3jj9F40t3uh3askGc92nVrdFOX29Aeld+8weF2oU6nME2z8AKC0M0Xvfhp0sNA
+s5fvPg8OcrnjelLpQ2/rTj2dzFoVHdhY6Cx9YLAzJ6ib221oj8rr2JQF9KShU+b/+CPQ6cJr46H9
+CgpRd3R83u8VTyx04pJXvkz+DKh3791xlsze3Our3RO++QbAmHGj8TfZtzagVs6/xKDDP686IOL7
+nB/py47iX3QEE7yVzY9Of9QoJpTrZjW0EYyJCdaOI8XRLSKhJDIKE6CJ7IAt2TuzZGIzASVAym+u
+0kQHRiY3+OAcH5VW0n3zKH59qGY7l4pmWV75SvTSJxWzriK02Hf3Zf8qd7UC7i+eYpRVz4CySWBl
+sPYl59TaYN9prQ17b4Eo2pgR2TXIZ64jJVGwIx1xLQ2oytkzGagQb0ZJgCsca2GHHsrdlaVjWzqg
+JA44GkKTj6OOIgMM0gIF29KcCS0Ic6yokIhAt1Fw8R+u12/0TTR6/5PTELCmjbZjAIKVASYwCxzY
+nx/aOF5UzLrMZM3u1KicLZm0QMn2NKtpSzeUgLmkVxCwda+OblHvBFJC1oL5tzbyry9YmQ2fuMbE
+WrKuNvfqUd4E9v9q7JWY2OfHpUgwCx9JDLCPEcslSl8YTJzze9Avg7WGHTpd7OhaFLu6vs+gTeUE
+MzHVeOqPCt4V9qozVWkfKvutnJzyP8ta38cIDPIPOZaoJptr2TI/+QdZlJ8grthMmgjajlxfLRmM
+si/vTxylxf2v0Du3ljdmSfs97sXdtCy7zXY89U+yVpWU0BVmVUbZx7QEVRpNNf/9vL61gH9rofwM
+EENoTQKahW2sBzEJ9hneqwlf6l+fqRhDuIb2HxFDMjOTHfNDg6S9TY2JNDMESV8ERx8suXw2jRhs
+Gv752HS5iiPC/VsiuSLBUNXlNz5RMDFzeax7JmZQRXauQELFvytTRgzBmkn4EhcRmIg1g/wfo9IT
+KxzYLFzxBDExkWYA9s0aRMciw+ZgwZqJSELZy9sp/6V211u+dNBgSwRRYEN/HXYVBEBAMxNRJfGe
+iTVVEIoJDMkaTELavwrBzBp0wkkiTjNqJf+CYKu0FUOAVthAU9311f1UMx+EKtVEFf+peLp8jMdm
+za19AwiDlfO7HB7lrJSJ0L9AXOPbTakCv9pe1ly1Cf+scXxvJY86dwxCq34MquaCo1/8WGRUfrYt
+A2BXLhKdJvka03LO2cr9GlcK8kqVKan0C8mqj6sYzLQsFfoZitpLOhEdf/qOWgVKYPFTsVNblrIU
+hPOHJ7ntf05RaIHKD0blaYRwhs4qFV6JmrjEot0OtixlWSyca8epyOdrNvn5mYzay79nKkjqgQP0
+1ou2SYdhGAbtuPPCvA4/R0Gcaa55tQKkEq/RuRcvEw7DMBwi9dkB+xv90I5lXWPaqJ3y8xkNYven
+/1r2+7yR/WKDcncvm4OQ2x8JPQNNE7UCRPrlvBkb+g0aGh9RuG/VrBJxzVNxNWhwO9NRx781DhY6
+buHHXyz9+WcAMAaff2HcmWhZrB1gwaFfXfbJ/IULAQDdxlzUHqpu9i1DHf/WOIiFNm666eCBnHSK
+aNgyAlAnExb2nw1iYowdm743O92MjG4ZA2jIMyxHwqlEHf/WPIgFK6NpU/uIld8QU4cTADGxJevX
+9x1aguoaswLq+PcUgJgk+9N108mHhf1Hg0ASuq4xq0cd/54KUGXDaF2POznUNeYxUWc/qkMdzlzU
+8W8d6nDmoo5/61CHk8Xps2fV6b91qMNJQGuwPn1KeR3/1qEOJwzSAZrYmXd6duCijn/rUIeTgHND
+MAOOHafNqFXHv3WowwlDlCwHEZuxp4uB6/i3DnU4cYhAQHDxaVvAquPfUwP2RXepvd4GNRag5H9A
+6J83I5/GZmYN0qdxO3Jt5t+/apVa2/uYWEkB8P8unSwT67JuzIIYXNatmQQD/hMMIs1giJqLjlDp
+6fbzKh5DnNBIwSCtwSA6hgM5E/vfpNb2hVOMWsq/DGhmkKh+CmMAWqPi70xaSV+UFUBBnrZBmQEl
+DRSkBTUkrqZjsc1DNdvj7EgxFY5ZVD6sdEKW3VWlWflEKDv66SA+OkXSCb0UC/Fn99Mx3+Qfg1rJ
+vwxoX8AyXV18NyZWhpQAoNn3O0EIsEUEMIzT+FpMUNL7+YyZCBz2SvOq0SV94R25ZhmYqXSDMByG
+BGtdEN+AaWuuWxoGMXORuz0T044Mt+GQllncMH5JenZmbmbfGytTx8Ra0onsVWbS67VbSAEwdLHo
+wrSlKFBIAYB1qe54QqnUiWn31ryM7Cw8G3GM+ZfWHMzNyMls9tA/dUthbeRfu4dv3ngAib0SoCRX
+CXqohVGwfGthcFzXOF/YXmaRPPvcBId9hXd27hWnK/ITsZbzx6/G1buW/1wwq2peQWLIvOyEGp5/
+lTFtHIQgArzA1xfjYJ98GESApTHmJyUoa3CqUwnBJr/QcwgAIJH1UZM0ZGF6vPAH09bKOE4qtVze
+H5CCAG0B3VdjeydtH7MJNN1xQt2MUTJmGwA0fqX69SEtN/UAAFxX41F4zxTUQv5lYi1XTvwdAORl
+j7Y9OtwCkxbFU6buBoDg4XcN0bDDKE+b9NiAPm2iqWD/pkVbGl4YcHpUIiYtp9/gTfiyWTeSW7Ib
+6KoyKr34WvaQz8O4JrscwdOrMEkDQING0f1A+W2t5EIACGgRcB0IlNe0JBcKiIkds7VH9l4JcVZl
+BZjB4p0X0rp/HaOFnVP0b0REzu0lM3YqAEZXt7oBlNPdyN5hAqCOwda57hNiLxaFsY4dpsO6wH2s
+YPxZvfJ2krRG8z81IkctjN/O0PLD272x9w30LngpK+qjcyuHO2LSYv+VS3FOB3P9PADjJ2kihpb3
+TVHlV311qTpNqSCVnH+W1XBumxfHuzw9FzmqLBIp+dYdAL6+uCayM1WqWD/zlISa+IBLAkwaG4bl
+GlavrxrZyaGgsya+y81fGBEkWHtGLEP8xpDKQ4gSX/4LxO/eakkCNG1deEnUcQ8yrPRd7xk68OeB
+vmw2Sk96XLLx6UV2wOcT+RhMWn98s8P85Colq7+ftXXD5wja2Oy0zL9KfvNyPRBxSaNWoi5+uw0m
+Jb+7Ce1+jQN6jRl18LI5fSqPvhp5l67qP7kngFk3peKFgrfstHGknAzFJFgFv3bp/yJea3XUM+Xe
+bmFiG9XJ5Ymb4qqS0Y6F+ZZBMCNrXrx39AaAvoGKQQSizk1yCQlx2o4DDar/nw+i58QBTCKQgE6h
+6ij1F29ICW89wBYT7lgwIlof78OJnAUQVrfB7AuQwY5CCDP+EjpxTZ+gDTfMwB7HDCRMcAmgRcI/
+dfm5Nu4/0iLtToi34zxKedq+iOJbi6mSeMTiiVWDf+qpLUuP/NLBxtufSmXPMF7T1KwtNXL+jYpO
+Typ10vRjMppdqWnkku9X96ou0Clblmme079mZwwGMwdDA4fsxmJodgM4rDUDzMwaL1nvxnmZoXBw
+G2FIVbOlUl5vv1Hann73LOt8vNMag7UoXA3GIK2YAbAW1iIQ+sKyF9xP7J2AuUBC82NIAQwtStYC
+A8VxDzP/31Ab+ZfeSkHfAcophFONbYHN0/0JqAEALPdPDXw5wktSkrffNVrQMyXStvH3GRkfkTjg
+3vm/d1cnZnE8ebCgTwlnBWnB3S+I1lTN8pXzlbZN7/rUWbPzL4GIwgwG8sgWYIllKIAikvaPWq5/
+b+R5lr3CtzFbyF5HDXHE9GLnRjd9HWznLaIfvIOOdyWaAKade0ihjy91BkGkbIPGAOCEg8gTID3r
+gP7GMdiTmLFru0Cff6z6WxvXr4yCT4Gh0BIMOAftxLQbKvQj1vRtkfOKe27XBBL6sqkmdqwYogQg
+cNXthexwA6xPW8Q4FgfXMIYzGIpFxXxM5EuoIvjckVYAat61gxASnEvI8h0psWsTNIpLA3wpjmi8
+fNG27jIthopvy0etX0ketNoTBBYM0lTwDvrxcXsWEfMKZVhRncmXWpB5fZ60XN1PJocGa7knWeh+
+VdjT35jEWKER1INO01rH6Uftm38Vlu8T6AxiEJgTIJdvEbr8CxK2QO389zrSxIJahbHEat8HLuXA
+EDcsBYEaz7zCzFpZpqW5Ym9iZq1M31kGs+Z1eQjuCgKkz/ypNDMzLKUVE4NhGQFKE4P9QOW/T5jE
+4GAAWbaHCIMezxQaRUXM9qr4T7Nv66glE1joJUCnUE1aKd/7MBgMSwYpTQywkk/tCusMgp8i/5uq
+6ilk0AIQ2vnX24lpIQTiW9miL4NZW6bpf5zvjbVWDOZyMvyV2efAvMqr/epvxSuV3ZgMWgi09Km/
+/k+kfA3J1TWwfR2XXVd+n6mYLYUzay6vdfMvgxdB6GiypTBKhDCXdawwDRBKBBlqU1cGgSIDcggH
+ffMcQTHXPOvC9ijxpbmq4FHiOythu0rabkLLgXZNfB0Kmg0CoIilAfsywAAk+9ID+mOz2Zx9UqQT
+BQeBkM4gMCm54IuAEkJRYRQD0FR0f73H7VTDLA4lEw/RlosAsLbjKVegTLHh+PQVJMSX6Z0MaEhf
+SrFqc4jKog0ABvnTf7JQK0Do7VISPocbu/1szYaJ/fk6Wdnr49pfLQNaGwRAa2OBX/0tP6uIbd8d
+Jm2UrAMGCCXKSARgZ3S1m9vXvsRMDLa9e8C+CqCE7crnz2CmjDPNk6vW8S8EbYFGmH1AiAZj5bgK
+4rA2enypAR9LKwbgKPvN18OoBpNyAjarSaSvOVjcuGvzsvj/tp9J2vqdVkzH9qQFIGBgIdDPKP/Z
+k5YRGBcIlP68KL/PrRBsevOzve2dXFErpPJMiychVbM7EECmLSLD/E/0tS8TFxSCwaSMd3a9GaUk
+E5h5Q7ZEd+FCWopu0FhqwUws2PQWZJe0C2AY8L72CDDY4afIfpXsDcmlUe27Sl01lROz2LGbFPqU
+nRAHtkJjIDOT7XCD7RuPyOY9IsG24Cu06c3Ptto5DRxIp/pNfdXaKYAFMtK8DRo5S9YC/Q0lbAqE
+lZ4mY8MB/PFHeqt7Apl513ah+9gSBmuJ3M3J+RFturp05cSHXCGVJbGWKNiYVBjZpruhhX1fxrp9
+uQFd+sofXGefWZ5ctZB/9VZoR4S/FV2kcZAqpnzUN236NnR8Vy0ARloBNOL9nV7Kg3uKo1qEV+O0
+dTJgYoiFL/8CAO7RT7e1PQyZtJBL3/naC8Ax/NVWmsWyZ8i7Dpi1TcHxXmMl5cpPvk0DEi+745cJ
+GcAnURe/8ENhaqmn+RoHm/ccCHYYpqXyHx5sGiuedzhdKLLebHzi69JahgAoYAEmJT9d+0GDl4nM
+AgCkReqzHW9UwpdRdDFU095Fb324Awga/FRXLaDk+x8XpZR4YtYHMH2/fNYmCPwxWhH0a22VIE1y
+4ztf5AMw+r7Us6qHpU/9jeyg2V5rUnJ9nvCpv0xa8IdTNgNAo1vGu213uSdnFqZ6PPE7Pe+9txUI
+6juxr/1FSUm5+/NfVwI498kon/rLxCx3fvz1TiDm3IeT798OAI8qxnKf+sukpFz1wVcFANDx/mtY
+iR0PGE4XmarE+V6kklNmBTmcOrflSxpy53ufpQEQXScN04K1XPPSDABAv3bvjz37zPLkqnX8y8jJ
+AgKc/uMAw0Rmqbui/hv68WRnCBOBtVxWKDX6+eRO+ftziwHEXHJ/fI0yMDHzhJcj7x7QOO2Nud8t
+/bWbkradOm/8+9z6rs7ZH34/M2lJEyU//x0AkJQENArWsuSRN60WVwTNWvP8uzkXjntjlpnJrx0B
+gI5BXmfyO/7qnwHTFz8DABqFnLj2RcwxgL1gpSnvoYTr/wCEygEzWD6eO8OtiAGf+jtk/cX7z7rM
++Hz7r2vWNtJE6s3NANAm2pIHLrVArLF1K4CAYCbSwnriteLGE/oWf/nfRWfN71zFHYpBCyDQvXF5
+8t7FkDq+FQswabH3pnldX+wcuvGpwxNXzggEmLKnZAPA2UkXbR881vX1ptkr1rTQgkFK5j49NV9e
+3BaLf1l8tonAHkQghnj5+ezoW2NW/PHhN4V9n5v/npkKBi2y1V8mJXMnvM0drulirJuy6drVbyj5
+/c8+4pqFaOF5ZT8A4Aa7ovAnhuifXltz9m/DFeTLD6kHRjVxHvnsraUYeGapv7WPf4Ecb8UjSUBW
+iavCAjQx14MSxICgLyBVn05aANB4fY9xXQ/Hos/e/GH6wJpMcsUs7nk99Nv+AEYNWJ928zKn3WMO
+XrgWd04KBEYPXXxg4ofE40a73/4OTd8MYCsuTOde9gdufTUAjw5emzPqO7xutrwA07M+/9EwhzJx
+05kFbywzrF63JHaHoW/y/lerS4b2Cz1xr0oGRYNRVOhmoYxJad/JYGiBLICUWDP1vBH29AsWh5KB
+1P69fm0HnNvfSvvh30oK/Vb69587vEMYFPkr6K5ktHydiKyYWBZa5F4+C5e9GQWMKJmR99DvVcxi
+LIvWQyNyrunfMMSzAPRxKQnSyDhvy4BZAUCvDiO8M1+eqCQoYEbut18Kld+/+dquwOXdSgq+ekwR
+wTJW3rQFN02IA/DRDV9KldCcBbGm297DiE9jgH/NyGs+x7nCjLqOUab+kpK7L95gvPxvAxg0dvie
+NxPu47EdDz+RQXz98I4OTfKt51dakdd1HUHm9Z9j+IexwBBMMe9fZchXH4ie1QVAfG/9vuh1SpZP
+Th1qHf+yKDEBUUE1BDyqgiGGGKRJgEFKbJhHCk8ZSjAAY8/lL8QCNw+79dDZMwfWXJJJ1nLe6478
+R2YZwnJdu9q5fmMvJUiLw+dsxm1TYArLef0CmpUdqTt0wNNAj/MAQNF1f8h2U5xeHXDOKrFiX9P3
+VwyM5qGgH7TRkwRFjELAGKkuvBaAUB0nTKOPrj6pbUkERAEoLIpmJXe8OuICjnCYQC7AwHjXJP/y
+EPOGbEGzr/8vtEVNIw/TQSZiMQD1pmv0BnHIWSjIBUaNst+eNPIvnovzp0tTWI6bv6Alu5sf5XHL
+LHbsgYUvv6x4VmMAMxNr46kt7sVT7mOp+vScT19NkEwcMAzRX2gx7cKvHNqiBg2302EmwDJ+vyxf
+vnonlIa4fuX7UvU3lGAtx78nwz+KMS332C/knmX9H+ndsTkLv/pLWu4euTvgs7FsClhxE68ST17S
+pGVLLJ0m6N42YAGcc3hpq2/aA95rv0Tf74NNoeTNr2Pzmn5bHqUJXTwGwZLnvdO4I51R4nPt41/A
+qystAhJQalX83b8uwcz0mMflGT9cCQYD1r+mwwLTdd/+Wnztqno1qMjwx0KqXMOA1I3AyGSA2XvZ
+ZtFusoKDDcSBU1Mi2KKD64GByjKgHVN/dHonOC2n0oDMTY1rfBG08IrFUC1bMYFN0cRhYqOlnCDG
+O6UvX22xPDmvsXpgFBaCQeO9L4KCQ7IJ2SAtv5v3QBvfgEZMiyHNER9qFgYVFBKHEjOxKRbBatCR
+iNgUi444zH7KMsAkmOWNc2X9D6RysEGNXZ7i3Uf7ZRHzCiWVe4BfrmbjwGZSrh5EBJYZ30ugwGFJ
+reuDi4tDmYm9cgkMs9cXhiUNkZMHDiGQMlZcXIT77rSEEGTpUe8x+jGTkotedJh3NjYNAQ3p3T04
+dCy0UNKn/mpkjNqN+8d6HQ6GQ/d3mfnf32Uqoy2kubmFdjLI8757Rnsvu+7/UgZ+FGw5mKh+VAZv
+6zu1BO3BTCRFgOgZeNoiSZ4YaiH/6kr+dpp9i8xHg8kypv3i8Fz8rBIEFrhUTWQlQZa+4RfHvpde
+tGpMEiI6oEtxi+EVypEFoB5ASj6/1GFOdJnSgpIKUnkAiI35UvURhgCVTiFv0xEsAJEMDSdZEIIN
+XgJ0CbQkyBCNo1OwVwqQMja+NORe66TTjIYDZBZAOef9cFtn0wgOygayoGXh/dEP+33BWOglUIGT
+SRnMtDvPYbZg21y9GOgQpQkk5DJYId389iL5yTdO74NRHmlBs2KhS6tsyAYtgFA9/yg/NX6zYca3
+ZAGAClNYBV+ptMmUBwQGMQgw5BJoxysuy2Dm/UcMqyWzpowrikSbJ30JV2mj7fzMwBtQ7ou0IC22
+A3Cx0oLK1V8t798lGj+gDWICC3doBpbeKUm2BLBHgskyJq+d3NGUctabDnNcy1LDApNiwEurgSmd
+IwFYjkw90m//OlNQC/nXIVDBiK4ZcFdDJZMy1t9pmKOnEYiJiHv1AhtMLKhjcCF99nB4zS1g8aOl
+5lV3wAUHNsBs0IxIiS3PG2afsXABMJANIhdAWAaV0JqIlEzaStw93JIsStdBN01kIQAWe3YBQxgE
+ENeLSkFafpgGrH/Lt4hO2iUrChAqG8Jzf8STWlBQEAiZrB1v7psaUWb1EoeSoc/toCQTYyWswI5E
+AMuMJGAQawMssBjcPE4LAMziyH+EN/EucgEACrwOHVDFH0oWrQcwmH0LWwy9CGSrvyCOf/Lz2Efa
+QALmTqCzVAJgmb0Zalhf7SNDOToTsXxyn9P7QIBlu5nQEtv6yzJzCXRiGyIWtBqWqwsJCZRZf9n4
+9lOn96pQv8pUmg/sJxASobEHBCWTn+hzl5JUeDesyIfgBgB4Mg0riEtI/Njt/EFdm7jQeeoVkHXz
+70mBYIiKM67SgLvqWhSTlllXFuCiTwK1YGJiRZYhmUCgxuGFlLri7Bpzahc8YpiAuW9b8qGC34jb
+Rmlieq3YgYbfmJIB7fiBrPoNiIgWAZ1DlQDzEeX0dmSQJdbtMqyxEZYEWNO6fCF6EjGBlGy5iQ5n
+hEIZry59qY1lnCT7EiKgBbLZ+HDDa9GWtO3B6eQ4/Hz3q5XgcvXXYV7CNocsBDdLYAFm3pwqVR/b
+xTNlG9DfsAwApIz3Mxy6yfemYEA7FpPlbEpV1N/teypbfw9v9au/IMZjDxvI35W0Kz11j1T92N5Q
+kXTIsC5mbYCJFoIbt2OIrf+V3sYX2r6lLDI229Zf5ux0oTsIJqYji4Qe2E4LwGf97ctalj4FJUYz
+mABmPuyRSgOERvXT/6+9qwyzo8ja76nqvnd8Jplk4u6eECMuQJDgLCxLsF10cV9scXcI7u4ECSQk
+Ie4uRIm7TJLJ+My9XfV+P/rekSTsB8mFzOzO+zyQ6b4tp6rr1Kk6ilWiAF4Vfs0x1vl0lePVn2AA
+gHopDBpKl4WaG55/Pr7tsZe0aFZxc6r9Cioc/4LJgaIyO15LYbW4AzPoWBT+bQUufcWxygqEcKAj
+2h/GxUPZRSfESAHtuw7M+mzcMgBCbfrAKp35HTyMGFF62eAaFrJ5JdCfFIgkw6CupaUablnnX1QC
+iMh02OYtI45AbA2ncFPzsLv6rl7Xx0LflhIIAXu4++42lxsdsQdnU92V81QgqgIUylSEU7uJolBl
+LgN6BYyGEDNgancQEZJLdrvhfgRpNXTR5zCYMqX0LUcfZPs7u5zzM7AoR3vB7iJCCAVmxHfjdgEA
+jNtTfIPQNJjg0RAKdd4ioEeCpXxSGDAnpfg+W+TPOx2vDwmRxMRc1LFWh4NvZKvgw/Tt2JhpkdRN
+oKYu0aZ5V1/rKcQSKFMHFElrvAvrCuM955WJD3XwNO3HQiw5u/TTtjnK/nv8RjhOuHD+/Lc+ON7G
+TOn5J6HC8a9IzYQceMXR42KrmL7/go1iqf4xDv96jFbBN/u/8WOdWxr7A4uJUNgUowBCCqknPT7W
+YvAp3dqPvEjQD7BqbqY2jZ8JRtUdNnA0xciCfcr2hlAUO7ZYKyu0hvr6KyZ+UMd3fRIzFeiS6EX8
+/5pDsGaw4Orwy645bHoFScl7BJnqwd3vxxsBmQEgV+a+95cBUfELKjsVaNnAipD8ebvj9ScpVDIZ
+6FDTnwunwks+SpSIgtG/rBJbbXj1aAyY1d0CByQ0Opjzs/G3v2I0Xn9hGZIuPKZL8wu/RL12FApF
+poKNW0IJyVVrHa8fjRP6EcQQRtlzCjzf+dnW6j0WK7RGcPFzsC90N9pPAjgFaNGE4HfQZmC8ibha
+ywwodKDVxqkH7NvSXK+/vcstRlNtm0MTfK5RtClEp1Q2Hnvb6JAHuNj91/lHJg/AYaDC8S+YUGeH
+MC/iNY88aFtfvHJaBQqpb/wUT9xqRJHr09KN89HlwLyJvp1YihEzLzgKIXc+Rpx6Z08Ac+hldIRj
++Asc0/mM8lcKZsA2aS0iFJM29Dl8ePQxuV/fEW7w/kB/cUy1bjUwMJJxT9gUFr/QfWPc/Z0Pe/UM
+gEmJe4Dw5pdPOtEowrcHF+ffHv9YaXdQbVkF9NWeAyGmwyR0FRH4orj89hfcOPqUulztueGmw/br
+k/KRSyp/IQ50fu4VNJpi9YbLfoJ7yzV1gcJFQI8EoyPbX/QKGgUhZtK6PQSyYyXCSR19KU4lMyLb
+XzHOWWMw8blz7cRb9yYNv9jTFICR7a+nZQUE7SKBEdQFsxFWJ4iIVS3g5G1qhutzXgsasVyXr2yt
+K8v1mZWW36yYsmjaijDcnA/uN5XL/FsB44/IDtDYGdFBczcE7X3vc2Mi8SJCox9/LvDOrZ5SRua3
+ewyGYyTozt6sCECKckHUjdFKiJZ/f1Th/m97MuyFJwMdMiTkyTYQLU2R8TzP87ywnzBKpgCdUoxA
+jJ71Tp8Gu8+t2fTmwFUzBxon8qgFOcqJBt6K1K/mYalsuKXzbUYd/oQjkpgIYNu/+DghErEHqxcn
+3NisxJuF5MK9LvoRjGx/mzcr2f6iF4Sg2rES6OvQymNXbVayFUBLE/JbasLA/lHNpByw/V0W3f5a
+tX7ITzpj9CN1TcgsXeOgPyVk/e0v+vmeyzIZtl57CvfkKdRoENWTZy4B+jkWYvW2Rzu2D91Yp975
+O86acbGfTMff/qI3qQp3wUPbaKQC5v2ibYeeVBRpDYVV6t2Rd3b3NCnboNDM+p/Mb8r8HlOt1+aK
+V+bPuxxWlsc0J9mfgYonf60++n3BJtKPFdkEi76iKFZpP9ckQeO8fXvcO+eGHNJgeXETiGh6JqOG
+7wGfG4JFu9jMpGL0c+8FQjfdY6CU+mWt8GgsOe/iWxSADOUofyOr5mU0INXmlcAA32M/fI0ZgS9+
+zqnd4fi6MH6IT7ntLyCsk56FHfaGnFfjTCzCgRmXAGJkztXtI5vpdBA7729wa6nDslCmIZzWRVRU
+5h7tlt/+glyU6Yb7kdqblNHJSgCCWgrKd/l2l8S12G+hf8D2l1wY2f6CKL5kdUB/MjisFdUMWPco
+DH/py45eYBpK7MOR7a/AQJAeb332tEt2Ol5vEqS6c/2sTp/Nz0xvfXyLSART6fZXQRRMQgMoAATl
+XWhzl2s0BM1hsSvrtjZ3GUURBgDUEiWRpqwq7PTWgtX9aa0EOr9W/B4Sq/RXhwtRckJCIdaAFELJ
+CpjGXSlC5c1N7AgKIJ7z7RXVPzwRAQAB/Iw2IJsjvv4T1Y0CKdv2Cav3i80K2qrMh1SoyYNWFCjj
+C9xwX/y0rDbrAH6NAUI8Z9TQx2/zIAv2adMbQrF6yvxjMnA1ACCkI+FQ5be/gI1rsAa5T317S08v
+JnoTq1JByal1r43ENqUBKOCDaaXOpP72t0UDKyC5ZIcb3n/7C8pseEmdQKxfe3pCyK0DwkRybHjO
+wt5/f9nbPzn7r25/xXO+mxgsvmJw2AEg38E26IgP1tSG9re/vuhfucbx+tEqSY8vQjDyTOtOj2x/
+rd74ad1OwYsuAoCw6Eh+LchkoEUTKhusBgTiCArFOCs+dUInnWUVRdgorhgrb9ozIsHfT9T2m+J/
+Cr2xT59v56sQIBoM6YHvocsRrMR9aKh46wWxTU4mZokGARROBs9NNGKx45g+R91oSYrnTL8g8Ei3
+tRs3bty4ecPsEaoRlRyPlotPsRoUK9NCAV5Yw8SCf2ll1B4HJydYRSNFryNcs5NMDPSTftpgqZAE
+ws7OS2r+1YKcAdO4hR86PkM27ow8I6BJIWkNN64G+htGVVVsC7XlX23uMzGpZSJALYjC3TWjEX7p
+gGLf86KOz6Q13LoKflYqGjsDXnwXQqxh5jKgnzFCAovBuvUFMto7jyLd0iItJcJO/t/tJWXydpC0
+xiBvIYB+xiMBawy8WQB6up6l8EMxco4VwHNmTFfonrhj5cCMsOz9Gejp+mTMgnW6WQrrtQF2hgAS
+YTfzA6BJEyMgFxTnLI2803VgQcJaKVgI9KEHK32gCnKsn/TE3FrkNX3bTyIk6U0o3757TX9PUSBs
+39hiGQkSntjL99y0Y7HN9GdOcVZKyimVLpFHhZO/APmvEWbGko5hB+HA19sk9UoqUD0/RZvnhh5r
+tHVW/CXXvf36yBo0ZJvWFG27Hj/mjasZVrBu/suquPa/GCNNBNcoQX2EQRfXLnbD7ersHn90Q6/T
+MWP1qG11QyLa3Tl050+NoIAJwFHVoEDBHq4Z1M9VTmJCtaYda8MqUCksyNE4VkeFLdECKqxeTIzJ
+6hmg1IQKd7kk6imJaiD0I25kJhNQKSzaGwgdrzUgAYwH27aFolJYtl2b47SmEMwG4uJDTuFTDY+F
+NvXOfNuZtbBLGHDc/L8t/qBr2egjvyzL2nVicazW8NMAYPsyAEOUArTdDC9QmwZwd19QHAj1wfj8
+c+Fi+RY3fLxSETJs06Oh4QWGLXA2zelb5FC7WX9d44Z7BQEQe5B32pBEpRITUht1aKytAhWwfpU2
+x2oNxfOfLQ6N7OR5UBo3/oDG39WyigKxifVWOEUtH/KTkYpNOv8hd+XYE8KAduwVYx8f8GGx/HQv
+PaEEdn3Oq5qaiifP/jMqIP9qc9S/7w1fNzoeCOy9V/hEI6MJrneUCq8HrWw7c4fj7SttQZMkipXn
+jr4GV2tAF16yHIEPa8cqfkGaWlEjro8Hcq57r/1K2Zf1ZOG/YN0nZ+buvujdegC/v2rrR4NN0Zrg
+2J8du3Fcdd0syaheWq9YEXlEyin/bmVF1hbmPKXFmVZQrVGEv9AcyrtqcGxWzwBQA8Qj8SWmqBTX
+47B+pbYjWZ+f+5gWNStDt+XKuElzHZs7Jbla4w25hQ9rhdnBlGYEpBFU5t503Lp5RLLRlg/8uM3+
+47OWACZft+SZ88tONkLZnKlyHqZDNTbOCbSIk+07pGB4rgM1tUlQN0+UOgsTCj6/TwOLzi2stxN7
+Mu+vdc7GfaEHtVLzWurW7rK4ORM1iyZWS2mi7OUfLVC3j6wGYMZFa7TBgjE1G6WDPYLetncjr4wf
+fHtfK7J1t30YmnPquS3jTOt/36Ge7jIUwMb738HR77eIfHwjjQH1bKp/KGJvGbHcuerLowDMu2H6
+nbdxmrLTXr9cA1g7bP1xd1Uy52dUyPztoMWVb2LQw11kzm2zcPeDRgFWf3Q+kDK/GamvfK389cM+
+8BwxeuSw3AGXt7PLXpmBjLeHxkKhCwBk/hnjgT7nJPz8Xt4XaYOBYPG/HrNi9dgLdqHO6fX2jl3a
+4sMeocDtj5fcM6Onwg/nFJR5St3xrbC+S07k6MZn/NztRi85urDpguRY7WI856XrzWnfRJtuZUPP
+PSkLGkddeq1s6rwvcmnS1pfviN52w8NNdkX+vPA9o6ya1h8YcMzEif9+wCiIVYv+shapZzXNnTgn
+490TPV1G/WxlX+dNpQSkLa1X1GtR6bEs7MR5J+4BLuxXMOnr1j88/TKUDY7p2mJH5AK1+YfLoxef
+95ERte6sRWhzfv2tYya3rzMOAPDpOVYvPG1zmWbGfXM8C7tFJ8eE5Y0M9J2PAqd0Ucu/LU67/o5g
+dO729NO34pI3PR1RP1i17szFCJzdpnDa5Pg3hlmvz7wGO0NnHpO6feHHGPZS6u8s/VSVv/1goCi8
+0fqJib2rIQtN77vAKqEoDsv5OOVfza2AaW0CZVwjVfgEiFCbU8bfNHkyAATOuK+10TFSRQiSv33+
+s5XTp0OG3dXau/U1r92Nf7Mi2gyZ+dj3218BWj11ZaJxmN0hKehqIpxVq43afMMI9OmgQOvlrl3s
+Bbfd+xl21k8KxGkvFC44JTK1KDauuf311NhFOqKaSXi41NYrqbD/alJiWabKrNvSjde22GR3Sdne
+PjnoqnAonH/m7poNg/HaFHu5ZwBQ7Pfx3esnT6753oVWCahs5xlPfLXhbaD+PdfUNLqc9Uh2V28Q
+dByCxoayj6qL7NRe8Y5DwNLLbtiS7D7xmR93vv8+6j12XfytK2bp4+/ouqJG/WCcY4tNTvO6m9ul
+BAIqHA7nnQko23TyEx+suAto/vR1p8CVYFyjnlJ4x8u2U48AaU3+psV5gaLbBrtZCV3j4hxbbLI7
+NqSCfWTg85NGjgQ6n3FhY0Q7lCJd0PHxaCp/obJNpz39yS8fAek3Xt/I03uWHP3p2rtHjABwypUn
+HUrltiONCil/hZCtI+dsUo17nVbdr0+GqAYXFITKmx8D/q9Gc9zINazT9sT2UYNNTKikwPtlR0HN
+ltVglOzKbwIrQojR2LN6j9O0ucAoiEGJmJMNJ6yq8+aJEQK8pTdOkmYLkix933hbWluTMkt62phV
+WrNqw/V/O9eUbq9xU9HzTsnjCVqfBBqHlv7cba3DSHkSax3fhVjyF+2u3jUhYq4To5HzSyYatXRg
+ytdEIlAmYMdooGwAj/WTbyBrzV42aOXAaGwM1IGVCEftRwYIsQq5K3YFGrcQjDM1kqslxDk5Z/0U
+N/ziiKCxG+77AAkLWlr4gbo0Dvx8PNi4MSe1XmOFMrm/KeGfOtUtZUuKVShcudM0aBkHoxCadnQi
+uGK9zWieHimE93tQAeRvReTfaIlNAH4qQYmcoj1oRa2IOaF0JB206Oihk0nf+wJGFKkiJPlpDMuS
+iIjLiVh7wvik0X2thZ9eUi3vXtBkbnrEoC2lOeroF16LdbeW9KffMft7WyA6E5Yjp/TPkt6PMAIh
+0SnHUwfNPRn5V6KTLEpPCMt2kxWBpZJfI8NPXhe92v+W6rrh6o1/2GiuTpXfbmPC9E6RlJQ+eQQQ
+FbLeASWjy0rV0o/pRVT+0aZZHnRs/UdUAP6tgOtnQAhlrShYqoi1TyiKER+Cg5QkEQioaKn98RHD
+dZAQmiTFz/lhIVr894lYEkr8uIkSqjw9bYIM7Rt2ItOJMQFX0lOjeZMZIdj/28R4qvHz2JYeli0U
+Xmq28ptV8neZP+HnhqSlqEgSfAFFaAmJfoxybyxz4LNw2RO+p7MlAP9mC5FfI8PnYEVLEdG+zZlq
+4zvS+UKvpJC3J3GSWDdaUcd/hABQsKSIlFveU2jLRWUKoWlBUX4JZqsUSQuRQy0ScYRRIfnX91VC
+maSfJXmSy/xR/npAQO0nCo11afuyE7OU/V/Z02VylS4E2zNSbgGW7uc5PNUpV24watBBrKPFpQy/
+RtyUDuzCMiQctOuxH10HnMDBH3mQx0r5birTfQe5vvy7/TUAVuShlRMWvzPpBUb+wmMyyhWXlPKU
+lPtF9IGvK5vMFBBUspQ55VBxSReR31t7Q/ybjvREKo2ovvEC1vOMZ6Ddjx9ht+v+jMAWQfnWyyGX
+Hqo4kPpaTdju0vOM51EFpl3LOg/FyrZf+VFx+beyQrQd0tnOP3eNdh3HcWTZpcPye3yTWtXThwRl
+251ld54xV7mO47hq878Hb23yfTOqyubn+EehYq6fKzWESZ+et2DE6BN71U/IWj19EtKvuzW+Epom
+KgSEfDFv1Owexw1olJqzfvaYcODKe2PmmvNfgCr+jTmobKtpb302x0/OERxy5ql1KqNlsWKAijV/
++OSDKeN8Z45ep57VArFM7V3ZUcW/MYdQ2fhrrt64OWuXU71uyxTAHHZiyf9ZCMXK3/62bUPWLlbL
+aFUDMBIz2/5/Aar4N/YQKhqncWP/iEYdsWrE/wUQKnq6bt3IoVfVmeVQxb9/AISiI7Vl97dIVuH3
+QiAatqozD44q/v0jIOUNo1Uj7vBQ1Zm/iiqrRhWqUHlRxb9VqELlRRX/VqEKlRdV/FuFKlReVPFv
+FapQeVHFv1WoQuVFFf9WoQqVF1X8W4UqVF5U8e8fBlZ52Vfhj0aV/9UfAQLWCvCnevuVnS5kvyxD
+QpQ5IZGkOb87Yduvv3u/pEayX/bPQ3tR5Kmk+pX7GfuWVDJUVP5labnp//Tz/r//P7f9SbQDVulI
+id+DEsKYuwFSyBIWlkhSuJLEctGq2pGyh4zmajsIcTyUvqOQZThWBPsfH3KzZP8ERvu99tdb8j+B
+ism/BPx0rJ78SsJD62dCLf87AUMHiG1WuN9NvJAaS8escXv99WBxgxSamItm2S+ljJSvhElB2ROC
+cLhwt22lDpj9Do0yOTChTfmN2SGKXyjYUCh7b4NqB/2aQih44aK9hS0C/6MMXCH5l2KhYUKIcw6W
+lZdCqxUKPCfBKZsrln6e0yITdA4hmW/siCfV1EdHAxg+4kP3gIFHoTiItcQgcm/ZmyCOA4jJ6Xlj
+2H11bJJoVyC20Hky3VJ/8G28OC5tXp3Hbl+QuzOvqP3sA5NJllJG4W9exxC8f1mSAw0oa0LhRxrL
+0zOTHWhA4Hm593Q0h5CoT4z+7qXcXXtCoe+HmIMNVFI9Oi5vR3Zx9Z/TK1/pk5igIvIvxSqM/WTW
+Wmk18ILuB+SuoJB692ffLsmt1rzLmf1gdKRWsBiNRV9PWpHd6OiLjrFHSv4KrX74Htvp2UmPyJdX
+Dzxg4ArFfjCvzZWxnV+snvt66VFrqOLHNpYcNk20EPPY8sjhWdueAwD0KJ8TE0LBZ9OaXB2IVmeS
+37rMp9r8QJkNb+pwZD+eWeb3Rw9N/gLPTwCA6p0PniKSas8jeQDQ/n+VfSsi/1Ks2nPdx8g4NTxt
++MvXPhbYj4GFVn9821a42Lp18nMnP9Mikk9FjN5z99shNGu++oMPHrrLHplQM8Lq257EyR/IOdY5
+GAVkwd9GAvYaL5Z9L2j1hRn5qQIzLmkTPwjavJa74fF9Qjl7cErbOCtin1n+8QK3uNXZTU9I+DL7
+jdlOeDDLLwJI7x8fArn3GiWgUIq189sYT5j6jVfwwxcKtuflaV7jdATezw9NflOBrW5K92q3OLS5
+SuGeS2e/CHtUrYOzpzD+o32fj3JDx5St+vA/hQrIv2Kx99QZePDGROx76Onn1n9ePlsZYfVzN+K8
+y1oXL351tP5+wdc9rKJQjF523hJceGM7137x97t7HHcoS7YYUG/0l09Kk/fTZu1GaGDPA9LG0jhv
+jXS1tyS21iWFen9Bn2/yHW/YAwDAwPHAzBGu1+x9DVCB6vjjL+627uxX0gGchZxZXkrX/ardGueT
+CyCuYwAAWqFJREFUDx0nQpkYNfGyh8+xv6kgriDlVKDmpzDBlzoDoMSfAHR4jbCPD8Wh7hWEGIAT
+3yzgwF9hT2HCqUj/wdO9DkNFVrlR8ey/JNS1M3Dr3YnGpj11vnz7b23LmlLF6jG3OO9+NLB2o1NH
+XW0C207fKFYoVq89cQmefK+zxpJ7jQxHjAqY/V7yVd6t4J3VvK53977m47gDJbBwktZF3mmxHXEE
+wx6SAYS8Yo8QmmIvA4TJ8sJWSEE4lJfT9t30kGdZbKaBrRrtL9U4STkh73S/1jdk+Np6vzF9NEGv
+2BsHhcZtwp5nAJpibxyUrdndC3vm0GzhBMPenHxRvX9d/1zsTYat1bkyp2A/LFTAdhv148dS+05r
+lHj2gQR5bpEqO9CowrfztYtCxtqwfaZTKLD9biFhkX/2Zlx5i2cs31wFbCw6IlkKaTB6A+qdaZX7
+4LThdQ6aqHiwKcKtQ2Ob0F0gWiclQLBbay2AaK1qAcgvcrTybUaB23e/lOAFtDBQsADor/fjX8FA
+W2QvP88qAai2j6vfhb+NSIFoV2ZA0DuoHEcLRDnOZAg6ZijH0b83EX/kqSLiTIGt1eVXqz/AVbOA
+nin2dz76vwYVkH8VXgCPT7MK0GjSl6FXpcz0TSPjFsVlZwaUEtcGroKRL9drCtVDC1Wt+61okUSQ
+ie6RUWmIfAz0qUahEWMPVFKJwjUjHp3xhI35ik8kIQ7AnohBFKK2Aygo8EscidXTPj5noNEUEMs2
+agzgfisUhWE/PDzxNSUCipVP83ol/ma+INXmpbAYyGhlIr1vIYDBPBzWorLTge5pvzYTk2rbIoWB
+h/WSSo2Kx79Uv0wAehMiAsvOkG92O+WqYv2E0E0n7IMVCvvGGSmaTGvUL89qe26G1RT+szPq3B3r
+HN8ESXK/QR89W3JSZc8FBpMiikpRELmHtMaShAjOuL2XFYn58oCBBAA5oghAjFrwkRgU5EcJDd+S
+9DghAiFmWJN+lCiUa48IT7pzICGkGL3jKQwqu+wtbelBCbecl6u9hB4RUUty6SbxVO8yxUsPvLuk
+bw7eraDasUhK2TN6ltHOFHJeLt2jS+T7fyRxvxeXXlemaZXN57XC6a9oZVKxNk0RqV3ZCM7OWUPL
+dKvCDtBZMP4so0RJ3dQiZX8RirxY7OBcwkLQeMbKurUYU/VVicuIYZn0wyVnrdVCCK3Ri7ZD97DW
+KCEIa6FotdBoBVhlDQjSUWCJ0BBFiR6owzArWZUEoMCqiKfVnfnKKpsHABSj3539YGPPoYAiE4B2
+9QypxEL7VZVZShkQduTqbW43awV+/T4C1ioVaenBKsjJBCjTrFlkxS3EFGivTqeIM5hEPGs8JfSL
+hVoLQokAhgoRMqK9CmOVWEDm7xPH104RgAcFK/5/sAqkTADrdaDyb6NVCqBR/scoGTJCvwai/3fp
+dVoopU2jUZVODVbh+BeCOQBS/MJ1Ig1BzBhaRg1KlQLXRI/iHAj2gTr3C3hN2vvfIRzfJcYVDyiW
+WsGGHKfUw9AvjKvgGeUq0t90YrZFR3/DJrDUCoCG0Q52bmtQgyV1MKW8P5To0r8PueNQE0BhYYLP
+r1+O6TkbgmwQECtZdzS+we8U6r2LgEGe0gCU71EiEKeEMoEbvmYEWnb3953RurwKxlOuOmjXUodn
+QdDfjWj9KTIZCl2rGb9Qr1Ea8Lw4x68qTCnpCaPLkBHpVetoDSh4nAjW6xj51WoHgM/r+zbUqE9A
+e7OBPvFWSj6GDUvAgdEo06WAlC40I94//nVWRZvGMIMOEKpkjlwVj3+VrIBFerQqZBKIpWU/BXjB
++4XoOJgKoOQWg6hFy8k7HK9lgkJubkqSi7CO6fKUYhVWfDV+3b5G3c48OTLSfIeR1V+PX1JQr9OZ
+Z4OAN6PI+RpInVSsTZeasBo7fly4Pa7V6e3w8aszpObHA3ZN37drb1bu4w2NXr0pPuiasFfYsIUV
+M8MmBFlU0L7moTMwpTqIgsIECqzk3djqwSEAsgBQqB/MfD3JaAIkl2zVpo8THj1xC2r1O0sooGRP
+3pu5N2vfPW2MRtbkp6Y7Xo1JIQWvfX0CYrTe8s3Yhdm1Og69WB3o1U2r162EwYDoTsKqzCUgBpO+
+8NX46avZW2zboy9sbyEQq7bN2rcra2/xA405dtQWJ6PXOU603LjnqPzZEzfm1znuVJkB9EqwQohV
+OmfczC3S9OReGP3KGMYNv9CK2vSzsD+tJmA0Nn83fvGutI6DL6phFGRWUVxQeyEv1LkaZc/C+LiA
+V8CjXaN15sjR83bXbDfkkgQKrNLrPp68co/ufO6Q2/dOrFyu1BWPf6VwHZiQFD2M0xa7y1S8EW37
+TP4m7aJqVCC5eh8s2opgBhyvjvrhuYkmof/pF8abWFaoo1i19/Y30KJDztSf3zn7tVR/7qDR2x56
+pyixb2jSik/PfyNg3B/OAABMmgRgckYokPnwOzkA8OCVS8d37jN9+7sDb/kAAFJfIIqHroYSWOKx
+f4WDP54icOhhSsbhmK2rAygoqEGKcZ7d8n0LIZALQIz6efiQ043yKwJjKkzdvt9fuwHa4IVTP0gC
+jPPwkwCgHxXaYZ8CysPkQQDw2TlGi9HZj7+2Vw9wpq0Z8dknaQeopYWcXahNSrfS7e7iHcpzjvaX
+vlbPumW6dO+1ZurUlx6+wQIgrxwJAGlvjrt2FRwPL771WXUqUGidzDfe2ABo89Lxd6wABtBqiNGh
+Z1/cAgCPXGg+ajx4XO5rF4mVWYUS7CUCodXbnnwj3+3WauWoUS8NHxp25/WCKNACi6qHA3e8qel4
+tu46o0PPDt+Kvm1nfv/9B1/Vt1CFDzxhuw+Iz/5xWlLe4MrFvhVPf0XuKQSckk4MaGJXQVkFtLLd
+H741g0IK5FvPZfWBdGQZLFq9dfLMMy5q8eOVvRdrE8PPIFZtHvTGjatXfj9ldj31xeUEffb9sc8r
+4Qc2/zhhSQv14aOKKB44tAOAo48/bvAFR5nAzN7P5z+0IXdcw+LnF41b2MmgO5L7VHfinGNrGp3b
+sXeCNYatjj8NisW1ibBX/2+/1WJzcKQByM8HxegNj/UfGkqEYJ9vzL2NTzKyF1UyCej80Cktvt+T
++36i8937ykDg9q2lg7pfE+MU2v4nNbJw+w05dsgxZw6AEk/P7ffo3hs2jR+z7Gg19hZ1gJqHkAlQ
+aN9EtF+3WcskaDboCAWK1V8es/z9rNnf/vysU3Dj+8oKtKnbN0MH9VkvDKn1dWbO12nOhFeUJYVW
+f9Prrg0XTd6bPfPkMafmInC0CMTq9f1v33LN8pw5XfH+R++sO8OgKwiZCDZpRSU0elSf5wLPb58x
+atW7yevPGOMye3BnGmODnS9tS4cJQWtDuvXNAb1ywO1bL14z9YcVJ8ncywFknfLYMb/M+fCNz1cP
+zlPHVzJVdgWUvzmh/evd54bKXkAxFloRsJL/BcBLa3qay+Hhu5lnvpIB+9Y1i479qn8Mi0wSRcOW
+OLY5re1x6w2BL2f3Nho0zld/C6d9OBTWtr/rYvXG9dXsX8+RB39G/VHVAFBmnJSNty8Ejr36X27g
+KAxe2O9SvsQfT4LXn2CNL/HJeW749M8CgGvP6tZre6unB8cf3vSfBqKoACDktoKnGJ+UB2T5gQA/
+3tAx0iNUO5ZCzRj15iUALnhiqZp2tUDjYczq55n+JBM/A07YiJYT/MFBZZxpp2YFXv07rG388DHq
+kztaHLBI0EVzYbHhhOi0aZ35IHomGAUxatHfC4LpqQbqhq+n4pGz4yhwXsWsPiFMfOvZGwCc/uQM
+NZ0KQqvvegSN3jwWwNHfnjjW8Rq3oRKrNh23Fnc8AnS/7xTX7SidBzW+h9ChOUD/gFE0zjuX2q4f
+twSpL9p1W/ifC1KPOcb7xweB0AuXaFDs8z3Px+n3twpi+Qmb8cStoKn1xDjz46xe9obxR38bb0nW
+um+CVDZPrgrHv0TIlI0YFQFCpmzwOaAVBEIxzjvr3XDL261Ifj6oZrb9OOiJXLb2id3nzKsXMwcJ
+Guf7qa736i31CNNTPCzqRYpxRp4XxrNDQ46IOSpYvH1ZP0tiLNC5mlGwsueibDX0wrCyqjFk++TT
+Tz8doOdYWN0bIjC6d0oOJOApEdIUNBjb8NCib0uRCiibC1g98YsruzM53pe/VvJvrHmP9Z2pSC7c
+pbDv87M9KAlpWJ+rraZR6AsBrOxaCPRzPF99ZfSc07Lw77+HtYhtWzOzaF5z7hdSYvUvq2GwbVv5
+TznID0qWJ/KCWc+dAOXpvlOwfWtzK4TVyoqse+NSQwU6sBSCVt/4nKo+soMnIuHA7WMFfYNGEaHL
+1uo2dxtCGgAFo7v0mABQZM0KZfuRsM47l7Dhd3XDWsSaCx/OWf/5ZR6cQR8A8TrkCohcDvsQ5NoT
+N+OqWz1RyjZpugpTj572vlwQLAoKrK0nGV0qmSdXheNfIFw+8oBAsdnvEl/RYZ1tDygv5eNqRpgX
+Boi7gmEH1lz7au7Omz9jzEKAhaOVDneqQbHKAggIxKqtF4Vw6sVhRwAVF1eM3QRl6zJgIK0C9Qtr
+3PB1FE21DZAihF2jBJwA26INBBRWT8/BBk8DhNya/U3DkIvDC7qoDgiyQCm+qfoDVhISAOwhrPPC
+ujerRcSvUKbACd1wdtgRK3u2AU3gB3VNpKndWURo9aJdbnhAJBWClZzz90r3f3laIBJIzkTm/u8V
+cmbY8aq9UT0if6076X5lgj1FBNTZ07TFILEgCTgOAIFVE+CGLr407IhV+zYCjUGx+tnnHO+lDiEX
+gCZA9CfFc0aMDRZfluA5Rm0HUIywQygjM8JI6CnK6jlXEI/WDbsEFJIbLMWoy5VlAxArqACrdtzb
+5GVrlL1wk2rymBEFiJMCZOILcKuKgweoYvZIqmSBTBWQf5UAtkTeGgLOQeZECi0vyxT3w66eY0UA
+sdWOowYU6nWYpr/411GxC2CQ1rao7lMutcJGOrY5hcC1WVrugVKASG6+UACr52cp2w8K0PmfSLh5
+TyiILIFlQ1FUQsUpQNdET0PA5Iz1yMyqaZXRn424bqDnHh73ClJgFbJhgq8terGmpwPxAPaCetOj
+PS80EasPlZ2McMadVgvJlZmO14W+UXgS0LGmL6Unw0vuLiIASX3Pajd8p2sUACnY53+h/T6GTICg
+01mlp8ZC28atqQCxcU03m2MvMw4CWAFUr00BqGQKvOR7rRKSazc6XhfS6vn/crxjz/F7gpgEL+Fo
+ESq+K6HE4ykgfoagAQQihEwEWjUjJP+KsHT8i3EogFU0wFKjBI21wSYo0Do37xyX4in99MxA6JZk
+owFIaC+gZTXUU+r85g5gvdaXs3Kpryoi/7qqbOiBIRA8kBEpNM7doxD34SmepjDehbLdakAEtKrF
+NG0+7/LbYmf+f4jiTc33nVIDKM7KG4lw7fYiVv34tRs+pis1AGKzcUO1BSJTYZu1ERGj120B2iQb
+RVUwEaZ1F/pexWtXAccwspJtNVvtyKxBK7uuafqwORzfDR+JgRCQDWf3vztearRViQDyRdTtuU+5
+0T0I1aYVwjNqGk0hpsAkHSUCUO/6GRhM64CKU8CWja0CIEYtelmH254ADYCyc18gXPsA9ZXKmw9g
+kIlaf2HGQdAnaDQgDH76fe2TARbs27YQ6BFnFEC9ZzHsiY19MqbCBLoLxLsj7OBmfxdBhWlA82ZU
+VPtWEfWbQVHJWHhJQ0QJQKdgHjBAGTrPLgoW/zXgRZqYtwMoKk6A1Ki3CasEMM6Ij/95rKdk00Mq
+VOeciNZ271bX1GKy6NBDT3Tp2m1A0w6LgrH1+vnjUeH4VxDU/hrahyWQFDhQ30njfPAIqn1yvKcB
+SIKGoD4iMbWJAOYhRp+CEKvOwO5PZiz8OQdQtlMNK5AXQczrYAQAne0MVW9BETsZOCrZKIBFYWEb
+Swm7Yze44WsTPAeglbm5yjk6mhykOXR4U1tCX7v7iyRzuB4ngsTEkGAf9b/3fhE0QqQDKCyMn/LJ
++X1LxK+V+fvc8EkkhQqTwBZNrALJxTsUekMoVJuXCwdoz/EzcLwadrC+u7+HUVk2hE77xSOQsnyd
+GPRRVP7EpDatgMUAkkIoU/tSLJs4e+FKA2gzgBEj9DbHG0pSKDIJbNCOUNPHaa/1QGhfQu9YLBzg
+GAWEioFWimLU8hmOd1EjowGSK39Rti+tk/WyhN3jI2Z5cmOWsnFxFCY32IStuclGZV7T+FGrrPNu
+rsbuAf7gUnlFQDe5+Muwy9Ds2Ug475nkGCo9/xxUOP4F0+MKUFSicTZWmB5/YBSe54y+gvW/6uFp
+GFHUGVuAapH1pwRB7CyKj8lexnfTmPzaqGwk9eqQ9wbQn1apTdPhOS2jTNGqozon3VKtW+U7P0Ok
+QUoWlArRDT2owqdfYTQFIjIZtmWLyDCXJhCsgwl++fk1A73DHzpMTMgCdmPOq2cNNoqQdACFIffm
+lEdLwiUEMgnh9K6iAKpty4B+judAiMmwDTpAhOSCLDfcnyAEVueMg0GrOL8zmdKKQ1rsZ+QSYhod
+r3bn6Mraypz8iDM0hUaHP3p3qkWjM1tPmxjZFAsxGSYhskHetxDoHWeAj+CYk+KMBkBywR7H60dC
+mFZrO6BCotV9hez4kBWKb8e2KT0E8tN2bTp09N8uxGxo20pZMU4dIGdrK+vesn1MqlE6PApEq2R/
+k87kprbH0aGhT9wVBhztFby56auESsa+FY9/Raqn7hUWRI/zqU3G/rFEFM+Zd35hmxGtPYfigETb
+BVJqewkCKAzHxYgio7fd+glx2qWDEvH169oOgLHu0mzHaz0tUI4oy7m5SvUWX+acP1yPviMFedcv
+wIlvR3S/KjQV6B701wzCJjBYQ2f3VU0ejcliPyEBgmy5JeEJf4VeDURu4ON5j9X3opk0qLzpQNt6
+VoTkwt1ueAB9b87JwFFpRkEoExGu3lUUpNiBWr9RWGtMRtmWYv/PIRMh6FyaxUYmQJnmzakotHrS
+rfOQeMX57V2cAzRuba0SKkwFWzTzvXCWbnK8AbRO0XQYDKTvi0qZCC+lhyiB517xTzVjXVPgkS/Q
+fkSa7+ItMhlo14DABDjGF9Qlnpv9aDXZHE7+1lbut+9fOcTTVJlLYeM/b1O+024d9M6ktcUelB77
+4ZWerlwMXOH4F1Qt1gv3+VtgIgfatKBx/HRqkUvEOOvO2tvns3qeY2XnAwPO9twmUMgpTQgjSA7G
+5EtQrF581lo0Gn4K4Mnn8Bq2kyD4C7TXIuBF1+gElS9dW7ekEhJeJszifscVjN4Qf82DQd9n2OrV
+a4WR7S9E6qTtwyrq6zI/TYrByk0kPg6AN2bqvU19fq0GgMtvb35t6drc6rUrhYNoHQhlEsJpXUUJ
+qLYsF/rujj6H17eU72556ViuMW64QUYJaxIHpGP2HaoxuCRNhg7NAdDfMZq0evgNFic80wawu6YA
+fYNQANX2xcL+jlF+qIOJ6ymQXRvhpbT104JQmZlAm0YUQmQL7O6Bp6vJizDs6Vp+X1FnLwAG0Wiu
+AdCJ0WTRe6YhFDhdRERaQmHNoMyrGz5mlViuz1c2o3nJZswK+XmfBt26hTfNmDRin5IxV1Qu61FF
+5F+jjxqr7RbSj73bAqArBKAVQgECitG7ztw05LM0z6HVc15OPMeip3jIjhjvWASgRjAmy2exsumE
+HU7dH1sbKl00B+iSlv9Fg2PyQDQt8UMSAYUqPBXoHudpiNHPfTo8/NqSJWh00wWdGQkcIOcUqfge
+ke2vsHb1fdiivv3kqsExWD0DVieAWHp1vZsjIQZpIMy/tn+XUOJOSnJuvuP18/e5ZirQuoEVkFyw
+Vzm9RACr161QdhAt5L3VdQT5AJqWZrBRByS1Jrl0i/J0NFaQVq9dCYv+JMXo96/TOOcjxxOqFTsd
+rx/XjjulnpGFkcWxr4lm05ZUzM8VVq/DyB5642JlB9IqMXrMwzd1fn7RcKRf9rdBiLAvuXyjsr1B
+ZfMQlma+ulyMM2anGz6ztVUQNAGxXt26dXSq0YTkiaBRyWKOGvx02PCri7XbrNkFt52+ivmVS/ii
+AvKvQAY/ZrHRl6QKG+HF9RMl8DW9QlCsyjtn8dAPk4u1B0+tdnrBkX4ZO7Ez6rKRBaAHTSwaR8i1
+Oxz7euuQC4vFm5Xtx6l/v2VwEIIUCAQUy6IrB/7DQP+yVjiYEFi1+97mVzpXbi7MSA/AKJ+dRGQS
+bJvGjKyVmVBnHXJXXdnwsZisnsVIGix+xqfJEYfxFADZ408+pVT8CmQCvNqdRIRUG1YIB4qJiGLb
+pB2VgJyb79h+gC6c1byNUQllWkor19a7ff+8HcRkKK9eh8j2V8hZxdqkdhclVm2+QdkWb2hPi6fG
+wiR0l0ff7lbfli6OqTIXA/0CBhIIFiMxwfp8iAV5ju0LghK+I+66Ruduya6eEQeLqB0bk2HTu4mm
+CsLGVfO/FiX8nNj4+0gFYUPXw77x7192gqcpYCKBFEbKQ1h9V8EzI6UIWpPWtrr1EjRhbLOi/PGo
+eORq9mth8bMISSiZCdu/kRVa+fLsi5f4ma5oLpx82fdpOug4Tpya6DWmmJShkJV74d+0GEadLjEx
+H1m1eJT2+hzvuYBVH4UF/TAdQ6UdDHaDQgqNvv1DEdLOLpJgDwhpZXxOuoP4lp3qBKyhJUiQqnAm
+cHSpKYetIHsu2vFGMmMRbkFBTUDhuLOj/FoNECQ9wpIKDKQumgV0rGmEsHZejkY/gKTypgHdE6wQ
+kDnwarQRctG2M7WRVkEPmQIhhWH99EtFUsZFmCApmAyFrikWvmYZmAiFVv5ney/L5T9TjCNWCr8E
+m7cMT63Tka43A2jT0ApJLt7hoD8pqFkPMFZACq36Fl61rlBi1dKFSalwm3RuGEdjGelMwVSgcy0r
+hs38gjEkENafztXm2VZWE5D0+sTESxo8YZUIRJqlWmSKgBSE9UePFGAeiwiIOOIJMCT2SRX+YFQ4
++QuYuOuulUkFQSoYWbNQeJXyHKO+ORsYO7u+VaS+8utkfVNYAVB25+jUehDyxg+9zClneg6srF2h
+zCndTSzmJpITvKA5xiPoBea+o02rVviuehf2qb8V0yhG0Yj77osX/N0Tq6bAdmhqAQhXyqInTnWU
+chPj4gArAlrjrNooPNaUuv83g8qdfeWQmKyeIZRqEAYfjqxvBamwylzVwSsJzbNWr1uj7HHGKNI6
+k+DV7kKBtXrLCuFxxhc/q4Ca6aR6DX+jsq07zMf8vHhP0yAw5rZjbrelOh4KrVid9TMsjrMGCrRi
+lZkL4FgapRTHSVj190Br3cfXuOH+WLn2Ijfk7lgiPIaeS3rByfBSeliISemzTnZsrQsFw8AnH2vT
+uY6nQP4iu/99WYISNyE+3lef0VJlLwCOMcaFnPa2U7y6gxeAtYFFN2vvhiuMokCYXH+9/gUj03zt
+v63T73u1bEtd48AwMO+Ktk8tWo1VyoAwcEah0wmsZOqrCih/oe3FXbjxFW3DYahHQjzxZKMJ+UIF
+A9vHiSX1va/p3FefffGFF1544bkXPjPN00S0bX+5VY+FXWuVeqyQaY/FyntSiiDY4jiiAktPzteo
+kzpnybDUcOptDCx809GiHP3c3we9Cke7u8cJ6gS0FtAGGP5Xpw7t27Zq3OH4f81VIEUH1Nch5bTV
+rkQLRjSFYrNHbczyPlSDtpd0t1FpnqRp6t8ejbcXinbViGIXrXVAlA5kjwYa1FEa2lXf5mm08ymj
+K/CCEpj93rmdraZ7JwNbHteOKMf58ITWH8eXjS6haOXI17sU0VgFtABaOWrMGiEaK1eLoEg0Mx0l
+2n3jfk20cd62f1dB9U1eAK1VQJQOFo4EajfXjoA3umrfG1qLaOeNC8KCWnAUhAHKi107tG/Xqkmb
+gdf9JEJCO2r0DhetdEC0PaFfWD8bCopod8HZmeb2Z42/9jKqLhxcerIXCZzk7VB59ytXRDs/DEr9
+OnkcnFGbXRHR7nsj3KcTK5n3JKCHZNU8UjZr4a5U4x61f45VsXG9viic1byD1uqtR02TL9OgQDV1
+lvJweUtSf3atS3Ec7SNgewwzAtiB0zZs29w7WYWfe8a67w+wsZJpSW+FnDVNWmLXK2d1HTbJzc2/
+O/WDBGHXNYsx3msQ3DfqijeGvZskU+4b/dBaweYp475smeG56R94NJ7nhYv3rp3+Zu5xkOK7P/nw
+LQPMm7y7q++LSMl7T+xHHWJDKmDV4jGs+Vl8yc4h/50QXjjaakSWz6F7P/roDUMsmPnDgBV3jH5k
+hWDv3NE7ut/3/qcvh4GF0zb0sqDeMcbNa9R86hl1vkgQJWybOw3Tshom5E64/sljv6xbNv0GgUdf
+/fadFz0CM6Z/92O3ZHlh+DcfPlEkxLzp33/TLl0yx4ssP7qGt+TmR+9U69ysNU9dfN0D737+UphY
+MuvbnttvHv3EfEHO7DHreoF1E3/EvJS2btHUa5+pEaJaO3NUWuOw2/j9XFjP88LF2RvnfLB8SADq
+mddGPFsELJw16qhU4/b9LmvT/Aap4eXPXZZZ/6WbrK8hF6OWTDONP4+LaLTFNoofiwWbGiYXTPvX
+3R2+ac1nV9rCaR1rquJVD9/hvn367zQCUC2fkQAReMk1REKxDFn9jQQkylPr2gaOzKxDMUsbFidc
+mrZfn1GMnnXBGpw2ED/9gG4ftbSKYmXTyUsx7G1HrDr9u/IPuvlJz6VYtefvI1GrX/ycVWj82hBP
+x0j+WvX5TVuB9ITNuOK5nM7bgQ4ft7eK8O55vhAIFiP9kcsRdk8dWXLL0rYy5YWvEBQQ9Cy05fBr
+MLN39PcH7/b9xKza1Db/ny/HjFTPeetSvHh11NZr1bYeW/uPFxV5vNFze0QvTdxzyUfRvx++uF70
+z+ue9zSRc9oUQJsOn7WxikKqpx7JAoLFiLvndik3xo1e16wMAakbU/c0zitzYl1jere84gEN8/am
+Pf2Pj4cBuPj1jS1KLsj59/PRP696ySir37prJ+Lrbg5Vf+HbLwAAPx6nlj3zrg0oEDQGosxVL3FX
+7ehtwW3VQLXq+jGApkX1v1/XMOqJSuO8dzG+PbWEZFK9ee82IBACbrs3we5rmn33iq9QO3VbLgY9
+2Mf8To2J0V8+lQ4RFtZtpVRe6E9fzJqMCsi/oBi9+7nPVwNof/E1wYi5QHJ+Sj0GFGLW0nL+lGZQ
+Eyo/xc37r88g0OGMqzOMjlEiBYIq8/sZ2/bW6DSsDWXV+3mDTlV+wQcs+3rpNmk++NRkC8G4zETH
+0aTJSRuiHrvLHvvP9hqWXs7aMR8BXWY6WyckOY7jFYfDJ1WLJtDiFQWvx8dsE2P0+GNPGuFE+ZUo
+7rRjcueSMA4r28cludo1Ia+gSd+fdiRpV4XCXvGpZmRCQLumOFw0pJZVoBS+PnVX4vFXxvntJNX6
+rxdsMY37n16TLOflSez9MSWgKaAxJrdJb+T+6MZH3KdsXvVjCMHP3y3fHmo46K8pRn//U/xfuiJz
+dILruLbYFNQ5ZsrGZO3ocMgUHlvHKlJt+XTeRrfpsacnXbE+I7FatSanBT+9Kqvjzd2DpDX5G6e8
+k6uqraiZ/X0g4Li22OQ37hfJzzP6lz2pjQYNykCpI7lVGy8deoMp6RCh1TtGzNlc1KD3mfXhObsv
+Pvd8jBi50tRqf0pv/O4xU8W/B+dfiNEo3LBT6jQO+CnGfPb8j+GxFCvCVVudWk0DMCpW1Y8opabP
+6EAwmn4Zpsj5A5x2nr8B1z9Xevjy1Wg6L+1gtZAiaqUY9T+leGbX5NLnURYG2v1KIr9ff2fp/dGZ
+s2wP/GdiD5yKwRJny0j3lct8fUBpugM7ddQp9pSPS/IpYdwpxQkzO5R7BCGlDzXRksFRlHnfQZpS
+InNpf/eYqQD8WwH1zxBSWxvfpg0AT0dMp1TWihKCYvZT8quIdkLRc1q3BuApHcPYX/hvjqRPNQLt
+D2soa5WipdIgxET8w2jVlnul/ZOM+GbRqJPvyImPE+vHNbO0wq5vzY5dIUJBcGDZ6UBYLg+nX97X
+J0G0idpBoWEQ+Vsp+i7LStHoEkOrslaJGCp1IMOZ0pRXEIXSYxCiCIi1SmCpFOABooQl74uSEX13
+mU51QNJSwrfa9JeTQpFcIFYGNl0RSPbHgP8IRQgVDbXQ+PGcZcgr18ElHzPSFMIqeKJhjVIqVkPm
+z0RF5F8IKNrPdV6ypBEoBf/T6IPcAF8Xut9NsSEGogiKFgqVRKtqCqgELAmGLfWkdEZn46/ac6NJ
+Kp1lBegQb5RT7qE+xbFkX1BoywhIQoyUy1wiZUgo24vlKROKBkvrePstBQ8ywMs/EsABx/BvhoIA
+dAjhr5IhZTuVgIiyevpynFDfC0Q60+q1W6VJfe63UxVAsyzNZX4qe0r8hC5+UwhACR0S4hypctGH
+iQrJv1EG+d03/cZyW4dGzwEv+LW3MRfYrcJG+d4Mgaz7PPeGgy4ISiaDWFEpuszzBIcYQikl7f1/
+Wvq7nvbb2ltydfSyPGA34GkCsHR5Vw5ucQ9MzXAAzaUnZf8r9/v1IDdWGlRA+28lh4gMEPX+lKAW
+EVHamXfyHLza08Yyoe3/DoRdq2Hi+47jZ7V01p39Oe48r6ozo6ji35hD2Z632r1Db59fSJjdoy7o
+PqPFV/+ohKU5KgTE1nkCoYsum5RvwezJN3T4qsbzD9tDq2f434gKun6uzBDw8UZPbHz88bQGwd0b
+gLbDrkiPQW6c/02Ispem3/vzm28mNkjetyGMulf+s3lVZ5aiin9jDgrtVeeNmrVux65ARrej+vYM
+wIupRu1/CRSxZwwdM3nNzh1F6Sd06t0n5f+1Yf1PoYp/Yw6hwKSddx7g+TW6POXEzJz1vwYhxARO
+OaVMZ6qqubAUVfwbewihaKDFAaxRqkr4HgYinamUA1gjWldWTfEfgyr+/QMQsXQSgDhVo+3wUL4z
+q2bC8qji3z8Gf5gl+n8R5SzIVSiLKvtRFapQeVHFv1WoQuVFFf9WoQqVF1X8W4UqVF5U8W8VqlB5
+UcW/VahC5UUV/1ahCpUXVfz7B4F+IvMqVOGPRJX/xh8BAjQQq9Wf5vjM8qUDBOUPiQNKC5CxCwTY
+7+37vx6H9qLIUwn8Smnk6AUxbEklQ0Xl3+iAkP/44Up/p9BTMUtad5i0Qyy1AjQOHmhO4SGO6P/U
+X0SUacQvJ4Iy1dXgTyolv8rBc5wcOmVlXuenqNnv+FDbpf5zMpZfbcn/CCom/xIw0AA8OZgEI2D9
+Ih4lvwvEhSflxEAsU0v9TuI1to1ZXNRiWO2DUEDAMJJ0L2bwazOWxX4ltsudEJhQ8b7sZonl+/aQ
+KaNw/43YfseH1FaBCMOhvN3JjQ66jqFAwYZC2Vn1q/2PMnCF5F+KhYYJIc6BPZALKbRaocBzEhxY
+RPLLFr3dfMj+Dzoi7CsweuNj7xcAeHlckwMK2lFgI6UUY0geqR6fkwTHEYgtSHomTmY9FdTaVRDr
+7butpxFZ8oijHFdMUfEr33+YtzOr2JnVrlweqfKU+QWXfxuNYvRnXyS6ogQiYe675ERMeDkhIEoA
+5TH71PN/b2p0AIBV627evXdXceGtDx+0LqAYPfKl3J17QsUjT4hJscnKh4rYaopVGPvJrLXSauAF
+3bF/AmMKqXd/9u2S3GrNu5zZD0aTYvWyq5Mf7ZIUKPnODDQ8MhlBaZxRl+xIejf5srx17zx4QBU1
+IdW4H5KvyYhpqUrK3kdySo56Bj339a9Kf70XsM77n0eOquPhNQDQrkV5qSmkmvq1c3WjKGW/Obke
+xT45v8zxlcDzZYtkDMUhqfKs+uobAEDvg0dgEnhuAgBU7yr/o4rYCsi/FKv2XPcxMk4NTxv+8rWP
+BfZjYKHVH9+2FS62bp383MnPtDCaINbo3GvglN1qrWxyBBLTU4zz9V/DTb/qfMze+IN1L6nuvw9Y
+8QVjKX9Fgh8XLnm2SOgO65PURRFXnJQ9fKkC+5xds05HKPK85uO+cUOpf+vYM/2FvT9+5HgDAl45
++mj1C9cD88b6+bQhxgR+I43KPrGXC54PCzPurG9SBgG3XiCrns4RJt/RgnGDcUh1/RRObLzpyUxb
+o8evsKfGPZfOfhG2R0alKzwWI1TE+gsW+06ZgQdvTMS+h57GaZ/rcmsvwurnbsR5l7UuXvzqaG3q
+ft3DKhr98L8Dtlxm95bzE/nnz8qkrO2+L25c35yWO1FjVtP9SaDVs3szaFotjm2IIQVAl0VuuPuc
+6BFeuUobLOzsH1KAM75p+3EnAMCiLm74i7NMObYyatVRhXG21soECkjZedKAZ3/jupcCIKtRruMN
+v6b0bNP1bvi2xw+zYQMnY8gYe3AVGCHIqhO2T9xijkThzwpQf6HiLTtIqGtn4Na7E41Ne+p8+fbf
+2pa1pIrVY25x3v1oYO1Gp4662gS2nb5RLBTWIOSVyVWu1YtJR6SYOuWOffhr3+KUp/ufM7rZgTMI
+Md3GhcMnKxPbt9KETBIAmrBnhTDFXiIgKAwXG4CEKS7elfBpp7BnGPKmIpzWY78K55S5hcFw6PgE
+A0AsvlxY9zeasCk0xd6kXO0FB3khzxAwIW/GBjEY4hV7Hg9t/Ux63rblgmNoD/47JORNK6bT53BU
+3JUaFXD9bJwfP5Zad1oqeOqBrwue+1snW0bNQhW+na9fFNICo5+Ztjiw/e4PrIisREbtyO6XYpaE
+bzvOxFbF+5tA6l9GCa6wDocNAw5SfEjYI1iIU+6wh6LR+VUIRFOlAig0AQoESusagDJ5rqf9Ug/B
+12Y81CHkAtB6PNCuwX7rLmHnlBwMfMSKgFD8QB37GxO1CkTTmQhlmrfQfjVFTT2Njle7s1bym/fR
+B3SVqMWZ4vT9FfYUUDkTwLqd/2f9kCog/yq8AB6f5mlAs0nfMaFXXy2zVaRxxi1KyM6sSaHrBa66
+wsiXDzQxOveXGnPrRj6jcR+cf/QDRuQIOEBZ+aYArTuLwGjLA82/otl3wqROQ2OsfwZAkWoAiovc
+yHJZdgJARKslVu2+u/kNxoHAqqz5wDGw5b++th0mjml1qkMhxHOmzmne+rdvQKjD0yEYEIiotCky
+AQrd0u1hiEah/ATW+w/sqb2ZQL+E/9XtbwWct6h+mQD0JkQElp0h3+x2yrIBf0LophP2wQqFfeOM
+FE2m4dZ9/RsqRymlFNypD6e8EUSsxS99/MrZyHklY4Fe8QaiKFog/o8krbEkAWHvO/8A9oUQqSAK
+i6K1M/c9DAvkRqlUd+9+PhEKILF4i8KACG1lep5H3XGmY4UQC+8e9I8vxxf7tbR8L1hZuxwGg6JP
+pN61CMSx0aUvcZC7Iyd+vVu1Nx3ok8Cyz/B/spYkKRuXCAaWrq//A4kHeXzJdSVN+y33ViRUOPlL
+K5OKtWnqmx6JRnB2zhpapk8VdoDOgvFnGSVK6qYWKfuLWFnFdtZzAYDMuqL4ufbRKtYxIgugX4DQ
+6rIVwiJnabQQgLVq+2JgkGdEFEHAg4IV/z9YRQ8EqTVYMuhEEbAlfx8G1SkACgsBXw3++FohkBc5
+1HNfO/UkoygQYiJsvc6gp4TUQgGFlj5lQsCDc88k9PNMlCICtKIBmoP6dwg5o0ibtJ6RPTXJBTtV
+2O1T4vtlqAUwvrneL1xIKBHAUIEsfWykI4UUvXGJsoNotX/WWCVWFCy0gBAYmVGIuD4iZUmEp/yP
+UUKcokR72//JlDQFUvIR4SlUEBe+34wKx78QzAGQ4pe6EmkIYsbQMptFqhS4JbqfOAeCfQDQpr9o
+CAjr3LLinCs9HVP29V1GGJKAKt3URs7asAQcWEWh1liyGynHOw4AAa12AChYaOzbkN6ApaX3WM4f
+irr070NHKoDCIhAQo5c+13bX7hL5C3Nz/FO+FxMVJgBHpUWXz1ZR/NJnJa118NSDSBniOBGKKDSO
+337nYJt6EPITlGkf3VMLZTy0bdzerycoFhow4YCOOOSUFi40SpeSEelV42gNADQzCyWut4iUnlWg
+1ShYF9ccBGQ80LIlVQmJCDHowKiyXRqt7IaSxztgCEHH9x2g1QoI26ADhH6rxayCoOLxr5IVsEiP
+1ARFEoilUs5N6IL3C9FxsP/NcotB1KLGaScGoH2589nbjZ6niuXml2KV3jpizMrMjKNOOU9ZFS0N
+qvXOb8bO31Ozw4n/CFAoc3cH3wfqLhIxLZqASuf8NGOLNDupN358eQyDz1yaOy0zc0/27ut7Wb1j
+WVwgaEOmoHoXQublJAalOL9xk8OTv0RRIfxavLfIC/+AIAe++H1/6r0t/DUJ1eZlwsEKM7/fGKrR
+7W/xFFBCk3bu3p2T+Y/jrJLcucO/0abG0mUQr3FrAmLFyR45evbOam2PuTz1IAxMnTcXwDG02g8p
+UN40CPrGGR2pxz73y6kbCpt1G9aPFAold9LezL379tzQC3O/Wsf0zn9L9auZA0Y73oLxa/al9zkj
+ZRzYsiUVKFac0JTxm0KNjj1Bzxn+TZG68VHCKZwFDNJGEWK0kzV69Pyt8a37XtjSArJ0V3zQ8cKm
+oHV9K8UznPiALQx1STXiFI76ftbW5Nb9rqhjFUid+cWYnzO91qdc/Or3E2odEavFoaLC2X8phU13
+IGGd341Gz+5j2WtqWWFq1dxv0i7KoIBWzRzgKfv52Z4TNXJa2dRtzw8nmliKXwol/OhD4QZtzZQQ
+er/fzKoI++Y/89JODAzOzEGfLzOsXt6+9KZXrwgFil8YvhkAcHH4o6YtJoSPmv/0LQCAeV3Dzpnf
+QAks8ddPQ+7KziGlJIxXr/AOeUr1nPcv0rTT+hglRn97+v13NtzueP982XNgkdMq/udEP7LA6K/P
+UnrZvisXQBug88h6VJ7zwYUAgLHHhdx7HwuXhivdc7+nxWi+9Ow69K42byfaj2hxoFOoVXN6QexP
+gyPqK6vWd8x3vPfPN1ooRq++9Vt0bLR9HnDt01oA49z9MABgbd4Vs+B4QJvvmlH5S5riD15eCGiD
+Ds/dtBjXPW8UxCp88MRSAMDQZi+k95qUV31zgqcXdFP2qzOMhhhd+PzwbTiq9oblSH3sSk9ntsgR
+EVrgs3OK4l64XuAag7WNFd5/cim61Vm8CU0+624F8sJ9We3aJxVP3JqcW2d14m8fOFX23wNB7ikE
+SrOeBzSxq6CMeoPKdn/41gwKKZBvPZfVB1IhEn5DyvW7zzvRi6nuSixzT7/3L4vW/ThuWRc146xc
+WADi6YX979l59caJP67oL9NvUETOwJN6QNDp+GOPPflEBtYNuG3ztctz5nTFux+/t/a0MHqC/err
+oO7SkQ7S+1a3xrDJgMshyK8HeuHax510WBrFVECQC8JK3nX1bgon+vKXoLp/1/PJ/pJdIONh247s
+IZ/szJ1Q21n0qFgIQgMa64Bu2ota9vY8qT2Bbscfe9xxJ54FEaPXHXPtur8tn/79yrNl6cXFB+h4
+hJhMbRv0EL/Qp2iZka+9pKNFhGL13IHfPr1t8XdzR6So4fcpKxDo/g1VUA+Y1SX3/W05sxu6K+4R
+kkKjp/e7bOGp3+/KXnr5z0NXCAaQEKuy/3Lh0rPmZq88DT+88MCOW/PQOd4Sk2HTeoqCeHpBvzu2
+3bVh/g8/j2mQ/c/XHMnu3l2ssbrdGYOgGU4BQqbJNU3UzjMvWnrivLnfrbxK1g/LEWsvvb7erKWf
+vvnB6kty1YmJMTXL/+GoeOtnyQmV3QQKgNxQ2QsoxkIrAlbyvwB4aU3jezoLxeiPvk2+i7E1HRHq
+6lGqsK1jbfOHhrqLv7nAUxTjzDxljx7+T1hb96HB9qvlbU2vCfLJeRL4uC0AYNOQtbjnfqD7v093
+3S7oNLDZg7z5lmW9c9Dd9Ry8ienHFdujJiUDLrv93HtJ7SfOSDo8i0AKKMgGxDhPbvoyqSgeQBYh
+Ri164cTTIvZw6tA0qHU3//sBAIM6jlUzqalxySWbem1DlySj8SLluqWoMbK233pt9C8nrsN994Im
+7ZHRBTOmHrt//WyKjAeRc7aJfDnrrALQuhkVxMrOM7bFBetY8IyR76iXrqprlcb92HT0dlk/7Pqn
+Ndij96cyx3MoNM5r14VSXh4GoN1reF0zrYcoscg7dQrO/QRIeWwU0c6pf0Lck4CSSUCnelbEcyb+
+ZW+jj3sDFkOGny43DmrR7Cf74H2B0C0POYBrbu7Tx/Z9tFsctg9diKtfBE38w19mrv72Av3AWw3H
+1rEk4+/7NL9/JUu6UPHkL0KmbMSoCBAyZYSpiGjHURCIVe+sd8Mtby81MVrJfUAGt7GxNR1ZNf8j
+Ld8sJMW2rxaWhQTF6Hmn7MEd/wxbUbZ1DevNI2kxFrZ1c2tpTeFFa3XHOz3PM3VgC8aw98Q302Fh
+igVDCNKia20LJ5kWpGVW6vcXJB2W+UKQCAvkA0b/8sSQs7y4OAA5EAK3Ok/R71VaWf0LJPeJB6xn
+PUtYEYA0YJ5giG9BKZ4MdKptfBONVetPWIeL7/UMlG3YzGL2AeYe6l2LYZE95qdxPsaP2QBgsLIC
+Wnl5a7DoCQuh6QfJXisEaaDzoTbd8ZwKW89aUEDQOE9eGUr4dJjnWYbtv+ItOta3Qqibp+j0pxg2
+tlqK5/3ApqO/bg7ovfOAY2nFOONP35vyVe+wpcCc2JaFb4n11EAQ8Y5HAsizA37sGzSZQxfipOHW
+g7ZpnSgzufYJObtOEZTWTE5z+khM3Wr+cFQ8+YuwLaeEJVC8/5pGAFCss+0B5aV8XK1ksyvGeecX
+nBPTyACA5CgbV9SgBQB4BOMFYiXnoj3S5R5PCyCBILAbgCqcCvQKhB1Y54tJweJrgp7jqa1QJoSw
+QyhySrGkdhcFgQ3WWI/tmTVAWOfeze91DbmHSWlCIOQrnOXW8FO0TABQKMo4n/90R9uIQU3IGUWB
+0Bm3esqhLtoKNIHVBDkjR+J6iYBWrV6l7LFRSy7tpetVvWeNKEDcILBnf5cM31pkAy+2CPsCwTrL
+rwUxgKRA83sNDBGjKR6oAvTJmJnjho952FMuHbMJaORYZZwRt2lz74khVwgtHoXH0GqrZ7/uhs+v
+57lGdu9TNiyeJpTlwu0ifSFGbTw3B7f5HShw6y/HmEe1ZW0xWEOBWBTekPp+Ylic6xfqxJdgNUgG
+wd3yfT62Iw6G0OEdLZtVLvVzReRfJYAtmd8NAecgqwQKLS/LFPfDrqWWXur8l5DS//CMqAdC0AJF
+qc+mWg1s2adNGwLU9y13w/92jQIgOXmAC1i9dJNwCEWo+IaEUo+nAvAzgKYiEPHXmR3r+zJPms+V
+nXtrUBln6jNnXei5h1c3SRAfHxLkwARHfXdLB08hFUBx2FE5N9a9vdQ8I+PgJTxIUbR63Tple5IU
+QH4Cm7fy7T0zix30jRBj9HMTAqFb04wGIHnZwAHTjFAmQNvGl5WeWkvHq9lVlACU1gtM57uMFhdL
+YdMbikAI+QnWfRBQpNq2TNkepFEbL1O2w3XGEQqMnl6kVT8AxBugPt2CxDITCDUmIALKT2Cdo0Ro
+r9ktta+yDiCgIARs2VMTqFFnG9aJAq1z/7J3G3pKf/ZJIPTPxsYBBHYf4GCJ6I/TLmvnAta2uAWV
+SvtcIfnXVWVSr8AQCOoDLqLQOHePQtyHp5Raemn0qF/QsQ5j680uCuembTqhIRDalzcCjOshYtSi
+l3S400nwA963ZDtefRFyRljSuosi1Y5VRJv6ECqOgldjMJUAVFlzgAEqomRuBie0rRUs8i6rMTwG
+SZzi47OBbOj862vdbZWVagCKipLUY9s+TzE6Ik5VzlzYge2MopAzixz0EhFQF80E+gWMjnB4o05Q
+ApBq6/0qVPdvka1W5g7H1jtg+ay8KRD0YzjiPGn1NxB0rmUFEMorQxLPVEBBVtYkoG1dKwB08UyY
+nr2sphiZk+vYPqDIfXsDoevjPE0BIeNh6naFhvYWw8vooACRUTDqNN9hQ5npQO8Ua533vg8WnxFZ
+h1Hl7wBYQEhq/W3YVBRH68x4/PSLjJLc2xFOugQKACVnk2ZdphB4+bX2PY4a2DpjUZCVa/lc8fhX
+ENT+GtqHJZAUOMC7DjTOB4+g2ifHez4HAQCUfAS00p7+HS/8/0GhOQG5I6YtXJwFKNu2CZWVV0IO
+Vnf3AIDObg/oRCj5CexU14qQ+R7QFMbx9KwFjndlhlEAKQu3KzsomuGiIQQbQTr/XvVpncM3eTE+
+DoIcOo+v+SjVaOvbg/OTlj197F+iwRykLN3keKeTEmXUjhTQ6hVrlB1MUqhy5gE9k40mIMZ5d59G
+5mB/D6Nys4Fu+4U10Or1S2ExGMof/tbZuwjAsbQahDIpF2HNhFkLl4UBbQbTatDqNSu1OY3W8X0/
+vPSuAr3iYxWqdTp9+7qTPxvolWKFKlwENKhGsbL9e23O6GoVQKpNC4UDaZyip2HkFH8ZQXDHekAn
+iRgnA8jd0cii4JLqL1Os88UGZfPPiKRWK94E9JTzhnsuwosXI3D6C7VMZavVXOH4F0yPK0BRicbZ
+WGF6/AF9Kp4z+grW/6qHp31nOACg2jwRaBrr7a8YrWe/+kMm4np1kFdD6OV6WmePgkHriOmcTdrg
+xKYU2TMXGCDGgaB2chYcFaKLfxvb906jBBBiKlmvs0RCchqD2EATnPTcuX89/Ggpkbg4AHu59tEB
+5xrFiD9Wsdxqni5RKQgxxSKulwiFKncu0C3FKESWDj1ECSlLNzjecSQhoAp9DaJ1kq9DZHIze3T3
+/cIahJyVr73kMs6Ti7Yqz+nrr2aN5ufvjPdQ9+TWy76j9IvcMi2knL4QCnRoFtCltgU+CwVCx6Yb
+7T9k2RrHG0SrxcZlAEqFodSDe1D/JUIAMTIrTwJ9BDLrZ+U16OcnCRCj5xc7Xv3qFKMaQeVub2wC
+9678uI5Ril9B2Zapnt8XyQ1N2xPD3V+/IRfQjgl9vn5U9dhGhf3xqHD8K1I9da+wIHqcT20y3P08
+TCieM+/8wjYjWnsOxYkMTlqZlON4dWKbt45i9N473/Iw5PLjUjD1Be0dR2MDK7YLG45PK3shrJ6/
+U9lBEIqYxH/cp6ftykDxv8ej92dxFAqoZDzQtbqfVEdYJ64Yq6FzL814wcbA5MVgEECWujX/aT8B
+ZQqA/OC40Td3LBHuVPITbIuW9Bl1o+MNISO7YrZvYMW35dq4XiKQkBa1bTVs8lctyvdJ+ff6zpNt
+mpQ6T06EDtfvBAWh1XNungb3you7BHAtbN2jaJVQ5CfYhp2hhFavXqHNsbTajANwTGQ7TkyCCfQW
+ERh1xQS1csFRwMuvounXdazy19c/gU3bEpwIJ9Q3MTKXQiZAe4PFKEFz6PAWBqY+dfbfjKLK/hnG
+ebt3+V77R8+3xq8uNFDO3Ffv9ipZIHGF419QtVgv3IdI6t8caNOCxvHTqUUuEeOsO2tvn8/qeY6V
+nQ8MOMe3R4qMB1AnpsHcFKt/OWspaj97LuDhc5pq3SUI/mKCxS3SSuYVgkqAqbANOonPiltg1vUb
+6o1d5VzxSErE5VJt/hk4NrJAEKmVvhWb6Ny5dkTNWDiMUcUDCEz95uquvjRPAWE33ZBxty3Ri1Ft
+XwL0D3hOVBT3FgGos+YDg2Edf5KxLVoQmHL5g3/h+hzHq9+4ZHKxcuBGXRfOBjA4uq2nspMh6J1o
+NGn1B5cXof9zXQCbOxroUQ0BgDp7HtA7wRf900JK9wUlayPCgc4RO5fIJLBJWypC1HrY3BPPip8+
+G2c+3TjSV7p4FjAwYESWQtCNfvI96oIJ8NQ5gIg0BrCOef+o+aIVsdyyRVitbcn6zArV552bt3vG
+2zJz8ohMI+Puiu3O649HxdO2GR4FjS0kAZJbAHSFALS0xj8rRu86c9OQ7+t5Di3mvDwvEmqizGxY
+pMaWHotdQ5e6tX8413hWYSrYpU7o/VGSBaAho4YtUUoJtYwHulYzArH63Tcfe7XdL88Oz7lm6otR
+9rWcs085fSOiVlg9DdipJr54wRmxyDUglskgNl1R8wHr71ATAeCe5U+mlQQik5yf6WIQ/RmnVBQz
+GlJYwuGW8vGquiL7IKjnligktFL7yV9aWblaDAZEjNek2rIEFoNJitXfXliMk0Z38Ywna9Y7GMyN
+L6+j5c8bHAyOiP7xsPU7QzE/G0xv4LMvdeYCYEDQQqyefvtlnx6995VnVl48+qsI+9LKL8sVBtBq
+7INFS/EDLSwmrnbMkG5WAWgEi43qrjUvZVARkkNBndSSqUwrNfrcz1TIcxr/7dU5XQzzK5fwRQWU
+vwIZ/JjFRn+MKGyEF9dPouEkFIJiVd45i4d+mFysPXhqtdMrsn5WG7eACMaWIOpb1gRCw48KuWJk
+5Upl+2HORX8/MQ5AOgQCiqX3z87XGlEblgHHkAKrcm6vc3XSRVvyMtKDiIbcichE2FZtokpOqxst
+Q/bKK2s/G4vVMyhSHcRyvF49IqFSAXhjBg0rnR2EMgHhaj1ECah2LI6onEtCCkVAzs90w4NJHR5f
+p5uVRAA16FtmaPVN8Q/tN9UIOdVzvIyjor4PVuZmay+ulwis2n0lpO57CZ4WT8ZZBI7G8Kd/amr0
+RJi4iOY7ey7QO9GIaBdISPX50GDRTscbSIJi79Q3tjlrS1b1jHhY6Kgde4pBci9RFBdG1YwMAvAp
+wH1UrIKwdkoO9s0a/rezjaKACQCqI1IewuoHN7/2jRBKk9Y0vuMctIyx6uSPR8WTv5r9Wlj8LEIS
+SmbC9m9khVa+PPviJWKFYmkunHzZ92k66DhOnJroNY6qVjflg4iPKTlWr/xch7qd4bmgVR8UKwzE
+NPxFWikPWQLxXXbveQdCa2flKN0XQlqZsrNmEuKad64bpKElSJASmgz0jDNR+xhbQHIu/eXVdMbC
+Yu0H8Cv0vTjKrykgEPeYjkgcglThKUC7+lZIa31RTJKKE4GjqlshKLMRTukk5PI1ZwQ9aZrgYU+k
+pWH98rOFUiYbFUFS8BMUOmcYIUACGAuFFi2sgpUPdgTslTU8R6yEPoJt1MH+VK0nHUwGW7SwiiSX
+bnAwiATT6wA0BCm06mt4SUdDiVWrpyVWg9O4S6N4GD9MGaRgAtCuEZVlCz+ImiQ855tJjvdYZ6sJ
+SGoDYNYFtV+wIoBIg9oWe+HTGNYj7smRWQwTEHG0Z4ETxB5Cvx9JVDj5C5i4666VSQVBKhhZs1B4
+lfIco745Gxg7u75VpL7y62R9U1gBUHbn6NR6kalXtlEbBGMZgU1yYnHQDAZBL7D4FeU1aS9fp/Rg
+tybrMNvAKBpxP3ni7Ks9Mc4k2I6tLQBwmSx/8C8B0UkBNw6wIqC1eu0a4RATrf5CaQRVPP3vp8Us
+U1cqhM6jrhEi4k+pzaU9oo7PQmv1phXC4+i5pHUmIZzew69msWOp8HjjR//9AtTKoHVfxYVUtslR
+0/FzVoqnaRCYeG2fB21prkcKrViduwDECdZAgVaoOBPAsY6nlHCUGAz2QGvdJ5a64f7u2hWnJ4Tc
+zIXCY7VxSC84GSaht4WY+D7LZefmptQwDHz1trIdmxgBuNLm3HN1olKJQTfezzpJS5U/DzjOeq7I
+qS/q8NruXgDWusuu0d4VN0USFSTUWabX48saRlMgpnrfL9Xq9Y2NA8vAkktavrJiKVYpC8LYwEi0
+Pp1HIo3l4aAC8q+2F7+9cOMrN3sGSj0S4oknG03IF8rl9nH/MEJ972s699XSG5qnRcQvshAJIY0h
+pACCvVqJBJafmOva+jUWzbm8Rijp1isDS1+5BhCFl67p85YS6L2jgXpxAAjr0N7zkBLRwbQmnf/S
+g4Roja+KHNNRR1RVAjSGMo2eisnqGQCQAh36e9+S6SA+ELK17426hwtFa3xZEAi1UwEIdO53QMOG
+UNQa32a54QhlhNDESXD+q2f2tNrq2092dzz+GCAKnw1r9kViGWOAUDQUvtmqiKYqAAAawNhVQjQT
+F1AoEGXyHCtav3OnJjrot0OXqyC+2RsItVUKAl08AqzTVgDhNR94+W8/CkDjnSvCjq3l+8c4kDfe
+cSA6kNKww6lDQEADYza54TYqAGUHHjNeP39GENB60V+34+anTCTNhq4Dx1x4lolktOatX6nCB95V
+gMaYcwMjqr1HZ9z6JgC0/ugz/WyKqWz6Kz0kq2ZMM1X8Dgh3pRr3qLj95KXYuF5fFM5q3kFr9daj
+psmXaVCgmjpLebi8Jak/u9alOI72EbA9hpmIxnLKT9rKddVj2B6hJL1d7Kxr1FJ2vXpWh4smuTn5
+dyd9lCTssm4RJoYbBPeN+uer536Qimn3/vjQL4ItU8Z92byW59Z4P0TjeeFQwd51M97adxwkfPfH
+H71hiAVTdnb3DUiUvHdhP+pkY/QFrFo8mulfJJb44Oe9U8xn+0YfT3j3ffjxax6xeOb3/X+5ffSj
+SwVZc0Zv63H/e5+/GAYWT1/bx4J6x+hAXqMW00/P+CoRStgqfxpm7GmYmDvxxkcHflW/rKacwOOv
+fPvu8x6JWdNHju6aIi++8M2HTxSIxfwZ33/dtobsHStqec+a3pJbHrrdXetmrX3s/JsffueL4SFi
+6axve+y6efQTcwS5s8eu6Q3WSR6F+Unt3KJp1z+ZHqJaP2N0SpOw2/jDHFjP80KF+zbO/XDpkCDU
+c69+/XQhsGTmD53TjNP3u6wt8xqmhlc8f+muei/ean0NuRi1bLJp+FWcqIhuq0HiGCze0DC5YPod
+d7T+th2fW26Lp3WsqYp/eeQ2/eZfzO+r2EG1fEYCROAl1xApF2Xz54CJFS5+31cvz7pgDU4biJ9+
+QLePWlpFsbLp5KUY9rYjVp3+XfkH3fyk5wKgcT79m+Ol/1Itpmnbrfrixq1AesJmXP5cXqftQPuP
+O1hFePc8XwgEi5H+8BUIu6d/W3LLz+1k6gtfIigg6Floyxeuxaxe0d/vv8c3tFi1pU3ela94OkYr
+fs9561K8cG3UH9yqbT229huvooPS6Pndopcm7Ln8g+jfD/2jbvTPa4Z7msg5bQqgTYdP21pFIdXT
+D2cBwWIE77ldlTN0Gb2+aRkCUjam7WmSW+bE2iY0t7zsAQ3y96Y9/Y9PzgNw0eubSo3J2fc9G/3z
+ny8bZfVbd+1EfL1NoerPj/TrvYw6Xi1/5l0TUCBoDESZK1/hrrrRnWpgW3VQrb7uR0DTovrfr21k
+IgYuGufDC/DNaaXGb6q37tkGBELArfcm2uym++5e8RVqpW3LxcAH+/7eIk0VIH6/AvIvKEbvfu7z
+1QDaX3xNMGIukJyfUo8BhZi1tJw/pRnUxGdYMuf0yfqBOw+pVtavUgmqzO+nb99bo/Ow1pRV7+UP
+OlVZRSFk2ddLt0nzwacmWwjGZSY6jiZNTtrx8ujd9th/ttew9HLW/vgx0GWW3jIh2dWOVxwOn1Qt
+KhB5ReHrcTFLlGn0uCFDv3JUibqqqNPOyZ1LRq+VbT8ludo1Ia+gSd9xO5McR4XCXvGp5rvEgOOY
+4nDxcbWsAqXw9SmZiSdcGbSKQiHV+hELt5jG/U+vyfKaNmLvjykBTQGNMblNeiP3x0BcxH3K5lU/
+hoAsGbl8e6jhoL+mGD3yp8SzumLXjwkB7dpiU1B38JSNydrR4ZApPK62VaTa8um8jU6zY09PumJD
+zcRq1RufFvzk6qxON3UPktbkb5z8Tp6qtrJG9shgwHFtsVfQuB8FRuOnUav3pDYeOCgDXkmGQas2
+XHby9SVSlUKrt389Z1Nxg95n1ofn7L743PPx1chVplb7U3vhdztPVvHvwfkXYjQKN+yUOo0DsJH6
+gpGcNf+phylFs1M7x7Zktj84It0VGQi+YzBLssp7+2s9nr0JNz1dejj8OjSfl3rwhyOGmWQpxTO7
+Jpc+j7Iw2PZXYqF//Z2l90dnztKWmv8nxuLAqRgsWQ1Fuq9cQugDStMd2KkjT+NpHyWWXDPm1FDS
+rLblHkFI6UPN/uniy1SwPEhTSiZ72t+de7IC8G8F1F9BSG1tfJs2ADwdMZ1SWStKCIrZT9mjShMX
+xg34/3j89xMD/83WTx9rBFEtj7JWKVoqP0VbxD+MVm28R7o8bqOJzI0aekd+QjzpxzUTiMoH35od
+O3IFwYFlpwNhl7LJIik0URJE+/QSgEbJaaUoQqFRikZHDa1+S2F4oOuG0JS4QwCiUHoM+plxxVol
+sFQK8ABRQoPIu8uSoRSlTKc6IGkpxbcy47XEUMSzy8rAhmsCqWJtySOU/8UNtdCgXBF3CmFV2Q6J
+fMxIUwir4ImGNUodmWqVh4mKyL8QUDRJiJQsaQRKwf80+iA3AH6NEIvDj8I74NmiCIoWCpVEq2oK
+/FDZ6Pxdkp8Uzsg8nKeMG01S6SwpRJeAp51yD40QHEtnbQrLjlYC5WpQlOZsLUsvUG4USESpzJJZ
+prSlBw7w8o8EcMAxfMdS/2Y6hPBXyZCynUpARFk9YRVOqeUFIp1pnVXb0aKu3e81AmqWpbkU5caD
++AldqCLzFZTQISHOkan1ftiokPwbZZDff5foQ7rxN9Hjj6+ymXx+5U3cJ9ynwkb5GcUDO++1CTcc
+NCa5ZDKIFZWiyzxPDjbV/cbnlGn1f2jp73rab2tvydXRPfw+IAv0O5N0w3fk4zZ1QFXlA2kuPSn7
+X7nfrwe5sdKg4vlfVXqI9Kd6fV5Qi4goR88YukS/1TmSF7kKvw+K3eNl1Feu35naWXnaSDx0plVV
+nemjin9jDVF28OV215B7lxQBZue3f+0zv8PIc3+nZbEKEYht+iCL/nrN9ALCZo3/Z6fR9V6/y/7G
+soj/A6ig6+fKDAFfbfbsjgceqF7fzdwEdBl2eXKly+tQUSDK3lzrwV9eeim5QeLeDQaNz7uywf+n
+BP9fQhX/xhwU4ra//zB3/Y7M+Dq9u/btrmFUbI1a/zugwJ5/xo/T1u7YWVS9Q5fevRLLmHerUMW/
+sYdQaGpefHGJCdPTuop9DxFCgZd41lmApxQAeKpqKVMGVfwbe5RYGR3AWFU14A4HQmgaaHEAa5TS
+lVVT/Megin//AAgAhxGnhKrRdniImI0JVF4r7R+HKv79Y3BYFtMqlEc5C3IVyqLKflSFKlReVPFv
+FapQeVHFv1WoQuXFEd//EpWs4moVqhABo4m8jxwJR5x/RVX5wlWhckIJLBDNuXlEcMT5l4WBSPCp
+qmy5ww4OsZV4PVG1nfo9MFq5GlB0jli/HWn+FQ5XVggRnbPnvyFER7xAJZ6HiqoY+PeAPFqAUAD0
+Ylw14LfiSPMvUJDgGq29Qmf3Grfy86941YceoXxEhw8GFs4KVP5v8KdBbFxtMN5jMHykeu3I869y
+mmdpUzN7TTD5v4F/ixo3KKisQoyBNsuq+Pd3gC6dgnR3dfr/7PoZgN23OlBk8tR/hSZaEA6ZylaE
+Iwqq4v+Gb/CnQQhbkJlQPyOt4PAfdmg48vxL7QRdOIL/iqBsEYlpSpw/Ffzv+AZ/HkSFVedUr9Xe
+/PjYVt36zTjy/Cs0RSz2DFBpx/1+7am02V0iGTKr8JvBYHx4VdvFuanuEQqsOPL866VnGMerlhfJ
+UVbJITYcrLSpcmyQ3n+DDeBPAxUKcnbXreE6R+qLO779+Qj2gbt9d8DaLKOs93uqeP1ah/E/Xv3H
+N1Rt+DGh0u5/nTUMH2kiKhOsgoqvvjVRHzGbvwM/r/KRgPg5fW1hAQBR6Wm/YxL71XHmyEHKSCnP
+719x//hWMZQTq2qCfzaE9RpWBdj+DlBAE/CKj9wHd2CL+OfKizLVrwyAqNMPf4//lXVb7L/YjmTx
+3WpSDjC/Mq+uJgBVsO1PmKuOkCU/FhBbxb6/CwSogkdwveUwsBa/2d/gkD5upFTXgQ8hy4hDyu+x
+XLBF4kGqzQjETdqUfkB3sn7AE0BJLbXRqaSy8c9CVff8PojwMOc8v9T6IcJhMNGvaVHm0wl+lwpV
+Kfr1aEpOAGUORX7NwVu8ssU9ACC6EJFoMaGyV7OknXQScg5m6hBVnBQMHyB+VUKWAkQBqQf2Nf2F
+POU3FE6KcW2lKvw34DAHRKSG3SHe7YCWEtYodhjVRUs4lFQQVL9VHkpesTCQUEaIF1kJlEwAEg4J
+nLKuVcIIo0p5SalpqcQoRVolBoRAwSpF2shvJQ21ujz7kkpgRYOEV/IKAf1scgpKRKw6cKVD0YaR
+oj8erAgpYiFCgCKEkAIKCBHHVLFvFWIKCowcekJrB4AUd8jHqRuXrY3UfTbprX/su7RABaPcQoEt
+rTwXqSkpkb9UYWprz1mzJ4nWP2fZNg5rCqI0hTs0D6sti3R0kqEKu1aFXbufnwMlX8Uz5CUVFWk3
+WGwSjICqkElFRSro5qt4hsOJ5XRThIqKZAaCeWAiQ0oYTBFD0R4ca6Fplc0FkryQ6GQD0AqijC1C
+CrfV0FYAVZyTocSzCHo2IJ4VuipsBVROSIIhcWm9HemxKtVbhSoAAAWhAMPuoTKwPi5fURf8tKL+
+URncEPSFeWLWV3UymlfbG6nVTAHjiqWk6CUshMLIYlLndmta0CBpgZMbUBQIzOBzO+1ZluCEFQVQ
+Rb16MBC33CWFAkJnr3bS9q3WyRbCBKsj3sLUWVt3aLU8U6ltm3NTl+1mmoXO3b7T6G1bchM27lB6
++W5bLSLlVW1PVDBArRxCBMGN81qaxFm7GnrunhrVQtWS48I1UryEtCQmVNPJ2QEzSdeUwrENuSPO
+oQQcqwKOuGJdR3tragRcsXA3IGX9jkRHr3biNmxNCFJt3pLkEjp3Q7pdnhJamclqm01aZY1NqMIf
+CbqOhMzvHxoUSkKc63iHtjFjos88JhwuNE73dC8ib3fmbWjSpWPtQDS9AAOJGR6jm1Mb8ij0QtG9
+anj75q2htNrJxQoAbPyOd94Yr90gIxSG83dn54SKbQmF4Q3r14YOoNYmdK6xd3vNThtTjkqpt6Vm
+xy0GsHGNk/dV75JSI6Fzzb3b0ztuNSU7YhH78+x927I2hBSJcO11n6ZNmtzQEwB5I9foSWNWbP1x
+XH72uPlbVitSZ3y0hW+oZCtblxcULFuD3FUrdi7foTeuWCeOzluxXSGcW7OwesKK+B2ri3bm1Fwh
+zo49KSsUqApW5O9b6eWYZqsLa+49MsOjCv+lENjBbbTbuqt3iNtoBUAVtb/yqmFORka6EQDiVf/H
+iWdkT1+SkRTZLjKYaKWOZyMMLDrgWS8QrY8uxY07Ng9nZvrKZOqCHUcPOc2NOvHTXbU7zuhh5/a0
+AkDEVGutd5rmGab8BlZsYlZmy6K4oJg9ORlFcUGhC8Zl7060e3JrBPbt8n8rU5o5tKneyuQpufEW
+ELpXeA8uubqmJ0C4Xkezxztzy/JBdTcGJLS5phEpPuqcT5456sywCm1IMvE1s7dlZyevrLm5eH1K
+3jYntCxuwy7XWCSZrTWzClsxLbS5uujsmk28QgWg4bY9Da2TuzbO1VXeDVWIIQivWvt0a2p0iD9E
+G5QDAM62CyRTW/prQ+rsDQOyJZ7Gi7zFSURBXp3au/16qRQn5HhOKJJM2yQt+jkxtyg1IhnFBvsl
+FE/LrQc/rYY4a2s0yG2UmLE+HFdGh3WAbozO7iUtVfLOokDiL9Xd5J1F8cU763JvoN62VpvTEnYu
+aaGSdxUHgiUMJFABIuRYAgIxxef92CehSAMAGRcJZjJJx63NmVe3BlV2W7v7uKwEui33sWAvcqpl
+pGfW3hJKqmtzVLjApjpWKxtObrCnIL8gtSixzupQwCkqtg4hXkqhk2RsSsv5eTzy7qZV+G+ChJuz
+bY5paRovizuknZk/IFU5XbCEi6wIqSKWGDqmqNjdkRHwF8hCcbxAlH2Fkpqti1xjoixpf2gSrL43
+LrgbAAQ2qXNRos1Vvzj0979Zq1E7c62tacouGQgJVc9Go3UFrYuS0wsabMpvt9UoL7AF7YuSq3mh
+6jnS0BS0NmUzeRfvbFUwaE9hvAWg6J1REFICwM1c6Z4W93XHtEkJ/b1iNNqpBKJzW7s5GjC5eYkS
+Uo7QE090aJHXfFNC46JgsnWS96Vu9pIahtekpOzdVm3fnqZLF9R1PaFieywTnbtRx62vfqQ/eBX+
+myA2sVGR18Hm6fqrDk2BFeHfOCEEUZuPlx8WAqEI/0q4SCDOXqsj+2GKU+yWqLNoVXyKMgnR1bU3
+8GRMWroLvsZaTJ1mIcP4BVmBKIVuvTopGw7wnvJq16P1mqmwaWisNBWvjvYY3waeaWDCtevRek1V
+uGQTLQLVsUVhDZtsopv0HKUAAaw+FrZXTpoaHIgLBVs4A5K2BgFdHNIQurWrJ0maBAlp7bVhoFGC
+00o3ynUcmno5iQ2QaBPawokPJ5nUQPtwoif0MmjRUqGz10inVPeO9Cevwn8TqHLyQl7YM3n60PmX
+kr9YACDfZ2BVsNohIJ6JcKgRCgUlrxBKIGpOEkB5e4PU2Ouvjxm394PQLyqqUaNOmEOBmu+zt8Ck
+tnOKU9q4+2nrKF4YIiGIhCEMQZSF2GL/uOS3qEULgmCjPOWJV7KNdgARUOfkK+yD3gtNCwGd3RCR
+SJ5LBoMGiaQAmoq1k5TVZAqt2EAtLxEGnsALxhmljBMwAqECoYFEMbZ2lf23CrGEmMz4Ys8LMdse
+mmevA4BO1tcAAO1EbLtF/o8RCUqB0Gfh6GtZ1nZrk0OFQFFcwAKghBdAAqrU3LtyCQC4jl9Dk2K1
+hXXsfgpzgQh8fZoAIhF/KIkel/4GAKIpNqT2D5UnoMQPbfAA37saBjriWU1qWJb8IJR6xgoBA6HQ
+EwPfMmx9Vyvj/wOBf5Mcopq/ClU4KCh2iSJA+D5Cvx+OQEricnwOK8mEEWXSyMmyrFL2VQKVAAC+
+H6hAEnz3yRL5HCx9dumDSv6Vgwdv+HT9CtVi8tO8gyaOdvJCqQf6P+enWFEA3K1SnnJPpAxdJc0t
+IT16EJ02quLbq3BQRGXM771LIp7GhzSyBOJYEwPqzX84+o/3WVjvUDzmubz+wdcbstUckH5KmFdX
+A4AUbFNVG9gqxB7WAOYQ/DcOE8bKS3lHLuuF2ITd1YsP6c5fi/+lKwdOHyI+11L9F2S4rEIFBOPy
+dSD0Z/Ov2KT/A0XqgJSB1nktAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDI0LTAzLTAyVDA4OjEwOjI1
+KzAwOjAw/1tyTwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyNC0wMi0yNVQxNzoyODo1NyswMDowMN0x
+KJ8AAAAASUVORK5CYII=
+%</compare-with-the-gimp>
+% </DISABLE-SPELL-CHECK>
+% \fi
+%
+%
+% \iffalse
+%<*gauge>
+\documentclass[a4paper]{article}
+
+\usepackage{booktabs}
+\usepackage[tracking=alltext, letterspace=0, verbose]{microtype}
+\usepackage{multicol}
+\usepackage{parskip}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Setup SyntSlant and Load Font
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\usepackage[]{synthslant}% auto/disable; fontspec/l3draw/pdf/ps/tikz
+%--\usepackage[fontspec, posslant = .16, negslant = -.14]{synthslant}
+
+%%
+%% All LaTeX Variants
+%%
+\usepackage[T1]{fontenc}
+%%--\usepackage{ebgaramond}\def\synthslant{.3}\def\synthnegslant{-.27}
+%%--\usepackage{librecaslon}\def\synthslant{.38}\def\synthnegslant{-.33}
+%%--\usepackage{merriweather}\def\synthslant{.14}\def\synthnegslant{-.12}
+\usepackage{mlmodern}\def\synthslant{.23}\def\synthnegslant{-.21}
+%%--\usepackage{spectral}\def\synthslant{.18}\def\synthnegslant{-.15}
+
+%%
+%% Requires e.g. LuaLaTeX
+%%
+%%--\usepackage{CharisSIL}% say: `make LATEX=lualatex gauge'
+
+%%
+%% Preload a reasonable font (triple?) if we work with fontspec
+%% and have not already done so, e.g., by saying `\usepackage{...}'.
+%%
+\ExplSyntaxOn
+\sys_if_engine_luatex:T
+ {
+ \cs_if_exist:NTF \l_fontspec_font
+ {}
+ {
+ \setmainfont{TeX Gyre Pagella}
+ \def\synthslant{.16}
+ \def\synthnegslant{-.14}
+ }
+ }
+\ExplSyntaxOff
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% End Setup/Load Font
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+\renewcommand*{\arraystretch}{1.12}
+
+\newcommand*{\code}[1]{\texttt{#1}}
+
+\newcommand*{\cs}[1]{\texttt{\char`\\#1}}
+
+\newcommand*{\doublealphabet}
+ {ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789}
+\newcommand*{\doublealphabethyp}
+ {A\-B\-C\-D\-E\-F\-G\-H\-I\-J\-K\-L\-M\-N\-O\-P\-Q\-R\-S\-T\-U\-V\-W\-X\-Y\-Z\-%
+ a\-b\-c\-d\-e\-f\-g\-h\-i\-j\-k\-l\-m\-n\-o\-p\-q\-r\-s\-t\-u\-v\-w\-x\-y\-z\-%
+ 0\-1\-2\-3\-4\-5\-6\-7\-8\-9}
+
+\newcommand*{\fontsample}{aefgiv}
+\newcommand*{\FontSample}{White Handgloves}
+\newcommand*{\FONTSAMPLE}{H\AA{}MB\"URG\'EF\O{}\~N\v{S}}
+
+\newcommand*{\generictextfraction}[2]
+ {\mbox{\raisebox{.4em}[0pt]{\scriptsize #1}%
+ \hspace*{-.1em}\textfractionsolidus\hspace*{-.1em}%
+ \raisebox{-.1em}[0pt][0pt]{\scriptsize #2}}}
+
+\newcommand*{\longfontsample}{The quick brown fox jumps over the lazy dog.}
+
+\newcommand*{\measurewidth}[1]{\setbox0=\hbox{#1}\the\wd0\space}
+
+\newcommand*{\packagename}[1]{\mbox{\textsf{#1}}}
+
+\newcommand*{\showbaseline}{\space\rule{.5em}{.4pt}\space}
+
+\newcommand*{\showboundingbox}[1]{
+ {\setlength{\fboxsep}{0pt}
+ \setlength{\fboxrule}{.4pt}
+ \framebox{#1}}
+}
+
+\let\slbox=\synthslantbox
+
+\makeatletter
+\newcommand*{\thewidthdiffof}[2]
+ {\setbox0=\hbox{#2}
+ \dimen0=\dimexpr\wd0 - #1\relax
+ \strip@pt\dimen0}
+\newcommand*{\thewidthof}[1]
+ {\setbox0=\hbox{#1}
+ \dimen0=\dimexpr\numexpr\dimexpr\wd0 * 10\relax/65536\relax pt / 10\relax
+ \strip@pt\dimen0}
+\makeatother
+
+
+\addtolength{\textheight}{\headheight}
+\addtolength{\textheight}{\headsep}
+\setlength{\headheight}{0pt}
+\setlength{\headsep}{0pt}
+
+\setlength{\overfullrule}{3pt}
+
+
+\pagestyle{plain}
+
+
+\begin{document}
+{\huge\sf\bfseries SyntSlant Calibration Sheet\par\bigskip}
+
+Selected slant engine: \makeatletter\synthslant@engine@name\makeatother.
+Font name: \fontname\font.
+
+
+\section{Shapes of Selected Font}
+
+\begin{center}
+ \begin{tabular}{@{}lllll@{}}
+ \toprule
+ Shape & Code Seq. & L.case & Mixed Case & Uppercase \\
+ \midrule
+ Normal &
+ \cs{normalfont} & {\normalfont\fontsample} & {\normalfont\FontSample} & {\normalfont\FONTSAMPLE} \\
+ Italics &
+ \cs{itshape} & {\itshape\fontsample} & {\itshape\FontSample} & {\itshape\FONTSAMPLE} \\
+ \bottomrule
+ \end{tabular}
+\end{center}
+
+
+\section{Slanted Samples}
+
+\begin{center}
+ \begin{tabular}{@{}llll@{}}
+ \toprule
+ Slant & L.case & Mixed Case & Uppercase \\
+ \midrule
+ .10 & \slbox{.10}{\fontsample} & \slbox{.10}{\FontSample} & \slbox{.10}{\FONTSAMPLE} \\
+ .11 & \slbox{.11}{\fontsample} & \slbox{.11}{\FontSample} & \slbox{.11}{\FONTSAMPLE} \\
+ .12 & \slbox{.12}{\fontsample} & \slbox{.12}{\FontSample} & \slbox{.12}{\FONTSAMPLE} \\
+ .13 & \slbox{.13}{\fontsample} & \slbox{.13}{\FontSample} & \slbox{.13}{\FONTSAMPLE} \\
+ .14 & \slbox{.14}{\fontsample} & \slbox{.14}{\FontSample} & \slbox{.14}{\FONTSAMPLE} \\
+ .15 & \slbox{.15}{\fontsample} & \slbox{.15}{\FontSample} & \slbox{.15}{\FONTSAMPLE} \\
+ .16 & \slbox{.16}{\fontsample} & \slbox{.16}{\FontSample} & \slbox{.16}{\FONTSAMPLE} \\
+ .17 & \slbox{.17}{\fontsample} & \slbox{.17}{\FontSample} & \slbox{.17}{\FONTSAMPLE} \\
+ .18 & \slbox{.18}{\fontsample} & \slbox{.18}{\FontSample} & \slbox{.18}{\FONTSAMPLE} \\
+ .19 & \slbox{.19}{\fontsample} & \slbox{.19}{\FontSample} & \slbox{.19}{\FONTSAMPLE} \\[.25em]
+ .20 & \slbox{.20}{\fontsample} & \slbox{.20}{\FontSample} & \slbox{.20}{\FONTSAMPLE} \\
+ .21 & \slbox{.21}{\fontsample} & \slbox{.21}{\FontSample} & \slbox{.21}{\FONTSAMPLE} \\
+ .22 & \slbox{.22}{\fontsample} & \slbox{.22}{\FontSample} & \slbox{.22}{\FONTSAMPLE} \\
+ .23 & \slbox{.23}{\fontsample} & \slbox{.23}{\FontSample} & \slbox{.23}{\FONTSAMPLE} \\
+ .24 & \slbox{.24}{\fontsample} & \slbox{.24}{\FontSample} & \slbox{.24}{\FONTSAMPLE} \\
+ .25 & \slbox{.25}{\fontsample} & \slbox{.25}{\FontSample} & \slbox{.25}{\FONTSAMPLE} \\
+ .26 & \slbox{.26}{\fontsample} & \slbox{.26}{\FontSample} & \slbox{.26}{\FONTSAMPLE} \\
+ .27 & \slbox{.27}{\fontsample} & \slbox{.27}{\FontSample} & \slbox{.27}{\FONTSAMPLE} \\
+ .28 & \slbox{.28}{\fontsample} & \slbox{.28}{\FontSample} & \slbox{.28}{\FONTSAMPLE} \\
+ .29 & \slbox{.29}{\fontsample} & \slbox{.29}{\FontSample} & \slbox{.29}{\FONTSAMPLE} \\[.25em]
+ .30 & \slbox{.30}{\fontsample} & \slbox{.30}{\FontSample} & \slbox{.30}{\FONTSAMPLE} \\
+ .31 & \slbox{.31}{\fontsample} & \slbox{.31}{\FontSample} & \slbox{.31}{\FONTSAMPLE} \\
+ .32 & \slbox{.32}{\fontsample} & \slbox{.32}{\FontSample} & \slbox{.32}{\FONTSAMPLE} \\
+ .33 & \slbox{.33}{\fontsample} & \slbox{.33}{\FontSample} & \slbox{.33}{\FONTSAMPLE} \\
+ .34 & \slbox{.34}{\fontsample} & \slbox{.34}{\FontSample} & \slbox{.34}{\FONTSAMPLE} \\
+ .35 & \slbox{.35}{\fontsample} & \slbox{.35}{\FontSample} & \slbox{.35}{\FONTSAMPLE} \\
+ .36 & \slbox{.36}{\fontsample} & \slbox{.36}{\FontSample} & \slbox{.36}{\FONTSAMPLE} \\
+ .37 & \slbox{.37}{\fontsample} & \slbox{.37}{\FontSample} & \slbox{.37}{\FONTSAMPLE} \\
+ .38 & \slbox{.38}{\fontsample} & \slbox{.38}{\FontSample} & \slbox{.38}{\FONTSAMPLE} \\
+ .39 & \slbox{.39}{\fontsample} & \slbox{.39}{\FontSample} & \slbox{.39}{\FONTSAMPLE} \\
+ \bottomrule
+ \end{tabular}
+\end{center}
+
+
+\clearpage
+\section{Examples}
+
+\let\r=\textrm
+\let\i=\textit
+\let\u=\textsynthuprightitalic
+\let\y=\textsynthslant
+
+The current slant values are
+\mbox{\cs{synthslant}\:=\:\synthslant} and
+\mbox{\cs{synthnegslant}\:=\:\synthnegslant}.
+
+
+\subsection{Copy}
+
+We mix different shapes to gauge the homogeneity of slant angles and
+overall gray values. Some overfull horizontal boxes are possible even with
+package~\packagename{microtype} being active.
+
+\setlength{\columnsep}{20pt}
+\begin{multicols}{2}\fussy
+ \setlength{\overfullrule}{3pt}
+ \paragraph{Roman/Italics.}\leavevmode
+
+ \r{Grumpy} \i{wizards} \r{make} \i{toxic} \r{brew} \i{for} \r{the} \i{evil} \r{Queen} \i{and} \r{Jack.}
+ \r{One} \i{morning,} \r{when} \i{Gregor} \r{Samsa} \i{woke} \r{from} \i{troubled} \r{dreams,}
+ \r{he} \i{found} \r{himself} \i{transformed} \r{in} \i{his} \r{bed} \i{into} \r{a} \i{horrible} \r{vermin.}
+ \r{He} \i{lay} \r{on} \i{his} \r{armour-like} \i{back,}
+ \r{and} \i{if} \r{he} \i{lifted} \i{his} \r{head}
+ \r{a} \i{little} \r{he} \i{could} \r{see} \i{his} \r{brown} \i{belly,}
+ \r{slightly} \i{domed} \r{and} \i{divided} \r{by} \i{arches} \r{into} \i{stiff} \r{sections.}
+ \r{The} \i{bedding} \r{was} \i{hardly} \r{able} \i{to}
+ \r{cover} \i{it} \r{and} \i{seemed} \r{ready} \i{to} \r{slide} \i{off} \r{any} \i{moment.}
+ \r{His} \i{many} \r{legs,}
+ \r{pitifully} \i{thin} \r{compared} \i{with} \r{the} \i{size} \r{of} \i{the} \r{rest} \i{of} \r{him,}
+ \r{waved} \i{about} \r{helplessly} \i{as} \r{he} \i{looked.}
+
+
+ \paragraph{Roman/Slanted Roman.}\leavevmode
+
+ \r{Grumpy} \y{wizards} \r{make} \y{toxic} \r{brew} \y{for} \r{the} \y{evil} \r{Queen} \y{and} \r{Jack.}
+ \r{One} \y{morn\-ing,} \r{when} \y{Gregor} \r{Samsa} \y{woke} \r{from} \y{trou\-bled} \r{dreams,}
+ \r{he} \y{found} \r{himself} \y{trans\-formed} \r{in} \y{his} \r{bed} \y{into} \r{a} \y{hor\-ri\-ble} \r{vermin.}
+ \r{He} \y{lay} \r{on} \y{his} \r{armour-like} \y{back,}
+ \r{and} \y{if} \r{he} \y{lifted} \y{his} \r{head}
+ \r{a} \y{little} \r{he} \y{could} \r{see} \y{his} \r{brown} \y{belly,}
+ \r{slightly} \y{domed} \r{and} \y{divided} \r{by} \y{arches} \r{into} \y{stiff} \r{sections.}
+ \r{The} \y{bedding} \r{was} \y{hardly} \r{able} \y{to}
+ \r{cover} \y{it} \r{and} \y{seemed} \r{ready} \y{to} \r{slide} \y{off} \r{any} \y{mo\-ment.}
+ \r{His} \y{many} \r{legs,}
+ \r{pitifully} \y{thin} \r{compared} \y{with} \r{the} \y{size} \r{of} \y{the} \r{rest} \y{of} \r{him,}
+ \r{waved} \y{about} \r{helplessly} \y{as} \r{he} \y{looked.}
+
+
+ \paragraph{Italics/Slanted Roman.}\leavevmode
+
+ \i{Grumpy} \y{wizards} \i{make} \y{toxic} \i{brew} \y{for} \i{the} \y{evil} \i{Queen} \y{and} \i{Jack.}
+ \i{One} \y{morn\-ing,} \i{when} \y{Gregor} \i{Samsa} \y{woke} \i{from} \y{trou\-bled} \i{dreams,}
+ \i{he} \y{found} \i{himself} \y{trans\-formed} \i{in} \y{his} \i{bed} \y{into} \i{a} \y{hor\-ri\-ble} \i{vermin.}
+ \i{He} \y{lay} \i{on} \y{his} \i{armour-like} \y{back,}
+ \i{and} \y{if} \i{he} \y{lifted} \y{his} \i{head}
+ \i{a} \y{little} \i{he} \y{could} \i{see} \y{his} \i{brown} \y{belly,}
+ \i{slightly} \y{domed} \i{and} \y{divided} \i{by} \y{arches} \i{into} \y{stiff} \i{sections.}
+ \i{The} \y{bedding} \i{was} \y{hardly} \i{able} \y{to}
+ \i{cover} \y{it} \i{and} \y{seemed} \i{ready} \y{to} \i{slide} \y{off} \i{any} \y{mo\-ment.}
+ \i{His} \y{many} \i{legs,}
+ \i{pitifully} \y{thin} \i{compared} \y{with} \i{the} \y{size} \i{of} \y{the} \i{rest} \y{of} \i{him,}
+ \i{waved} \y{about} \i{helplessly} \y{as} \i{he} \y{looked.}
+
+
+ \paragraph{Roman/Italics/Slanted Roman.}\leavevmode
+
+ \r{Grumpy} \i{wizards} \y{make} \r{toxic} \i{brew} \y{for} \r{the} \i{evil} \y{Queen} \r{and} \i{Jack.}
+ \r{One} \i{morning,} \y{when} \r{Gregor} \i{Samsa} \y{woke} \r{from} \i{troubled} \y{dreams,}
+ \r{he} \i{found} \y{him\-self} \r{transformed} \i{in} \y{his} \r{bed} \i{into} \r{a} \i{horrible} \y{ver\-min.}
+ \r{He} \i{lay} \y{on} \r{his} \i{armour-like} \y{back,}
+ \r{and} \i{if} \y{he} \r{lifted} \i{his} \y{head}
+ \r{a} \i{little} \y{he} \r{could} \i{see} \y{his} \r{brown} \i{belly,}
+ \r{slightly} \i{domed} \y{and} \r{divided} \i{by} \y{arches} \r{into} \i{stiff} \y{sec\-tions.}
+ \r{The} \i{bedding} \y{was} \r{hardly} \i{able} \y{to}
+ \r{cover} \i{it} \y{and} \r{seemed} \i{ready} \y{to} \r{slide} \i{off} \y{any} \r{moment.}
+ \r{His} \i{many} \y{legs,}
+ \r{pitifully} \i{thin} \y{compared} \r{with} \i{the} \y{size} \r{of} \i{the} \y{rest} \r{of} \i{him,}
+ \r{waved} \i{about} \y{helplessly} \r{as} \r{he} \y{looked.}
+
+
+ \paragraph{Roman/Upright Italics.}\leavevmode
+
+ \r{Grumpy} \u{wizards} \r{make} \u{toxic} \r{brew} \u{for} \r{the} \u{evil} \r{Queen} \u{and} \r{Jack.}
+ \r{One} \u{morn\-ing,} \r{when} \u{Gregor} \r{Samsa} \u{woke} \r{from} \u{trou\-bled} \r{dreams,}
+ \r{he} \u{found} \r{himself} \u{trans\-formed} \r{in} \u{his} \r{bed} \u{into} \r{a} \u{hor\-ri\-ble} \r{vermin.}
+ \r{He} \u{lay} \r{on} \u{his} \r{armour-like} \u{back,}
+ \r{and} \u{if} \r{he} \u{lifted} \u{his} \r{head}
+ \r{a} \u{little} \r{he} \u{could} \r{see} \u{his} \r{brown} \u{belly,}
+ \r{slightly} \u{domed} \r{and} \u{divided} \r{by} \u{arches} \r{into} \u{stiff} \r{sections.}
+ \r{The} \u{bedding} \r{was} \u{hardly} \r{able} \u{to}
+ \r{cover} \u{it} \r{and} \u{seemed} \r{ready} \u{to} \r{slide} \u{off} \r{any} \u{mo\-ment.}
+ \r{His} \u{many} \r{legs,}
+ \r{pitifully} \u{thin} \r{compared} \u{with} \r{the} \u{size} \r{of} \u{the} \r{rest} \u{of} \r{him,}
+ \r{waved} \u{about} \r{helplessly} \u{as} \r{he} \u{looked.}
+\end{multicols}
+
+
+\clearpage
+\subsection{Bounding Box}
+
+Thin lines indicate the baseline. All bounding boxes should be very tight. A little piercing
+into the box in the direction of the slant operation is acceptable.
+
+\begin{center}
+ \begin{tabular}{@{}l@{\showbaseline}l@{\showbaseline}l@{\showbaseline}}
+ \cs{textrm} &
+ \showboundingbox{\textrm{\fontsample}} &
+ \showboundingbox{\textrm{\FONTSAMPLE}} \\
+ \cs{textit} &
+ \showboundingbox{\textit{\fontsample}} &
+ \showboundingbox{\textit{\FONTSAMPLE}} \\
+ \cs{synthslantbox}\code{\{\synthslant\}} &
+ \showboundingbox{\synthslantbox{\synthslant}{\fontsample}} &
+ \showboundingbox{\synthslantbox{\synthslant}{\FONTSAMPLE}} \\
+ \cs{synthslantbox}\code{\{\synthnegslant\}} &
+ \showboundingbox{\synthslantbox{\synthnegslant}{\itshape\fontsample}} &
+ \showboundingbox{\synthslantbox{\synthnegslant}{\itshape\FONTSAMPLE}} \\
+ \cs{textsynthslant} &
+ \showboundingbox{\textsynthslant{\fontsample}} &
+ \showboundingbox{\textsynthslant{\FONTSAMPLE}} \\
+ \cs{textsynthuprightitalic} &
+ \showboundingbox{\textsynthuprightitalic{\fontsample}} &
+ \showboundingbox{\textsynthuprightitalic{\FONTSAMPLE}}
+ \end{tabular}
+\end{center}
+
+
+\subsection{Width Change with \cs{synthslantbox}?}
+
+Widths of the alphabet in uppercase and lowercase letter plus the digits. The ``hyp''~version
+contains discretionary hyphens (\cs{-}) between each of the letters or digits. The absolute
+value of all deltas should be much less than 3pt.
+
+\begin{center}
+ \newlength{\abcplain}\settowidth{\abcplain}{\doublealphabet}
+ \newlength{\abchyp}\settowidth{\abchyp}{\doublealphabethyp}
+ \begin{tabular}[t]{@{}lrll@{}}
+ \toprule
+ \cs{upshape} & Slant & Width & Delta \\
+ {} & & pt & pt \\
+ \midrule
+ ABC & --- & \thewidthof{\doublealphabet} & --- \\
+ ABC hyp & --- & \thewidthof{\doublealphabethyp} & --- \\
+ %
+ ABC & 0 &
+ \thewidthof{\synthslantbox{0}{\doublealphabet}} &
+ \thewidthdiffof{\abcplain}{\synthslantbox{0}{\doublealphabet}} \\
+ ABC hyp & 0
+ & \thewidthof{\synthslantbox{0}{\doublealphabethyp}} &
+ \thewidthdiffof{\abchyp}{\synthslantbox{0}{\doublealphabethyp}} \\
+ %
+ ABC & .1 &
+ \thewidthof{\synthslantbox{.1}{\doublealphabet}} &
+ \thewidthdiffof{\abcplain}{\synthslantbox{.1}{\doublealphabet}} \\
+ ABC hyp & .1 &
+ \thewidthof{\synthslantbox{.1}{\doublealphabethyp}} &
+ \thewidthdiffof{\abchyp}{\synthslantbox{.1}{\doublealphabethyp}} \\
+ %
+ ABC & .2 &
+ \thewidthof{\synthslantbox{.2}{\doublealphabet}} &
+ \thewidthdiffof{\abcplain}{\synthslantbox{.2}{\doublealphabet}} \\
+ ABC hyp & .2 &
+ \thewidthof{\synthslantbox{.2}{\doublealphabethyp}} &
+ \thewidthdiffof{\abchyp}{\synthslantbox{.2}{\doublealphabethyp}} \\
+ %
+ ABC & .3 &
+ \thewidthof{\synthslantbox{.3}{\doublealphabet}} &
+ \thewidthdiffof{\abcplain}{\synthslantbox{.3}{\doublealphabet}} \\
+ ABC hyp & .3 &
+ \thewidthof{\synthslantbox{.3}{\doublealphabethyp}} &
+ \thewidthdiffof{\abchyp}{\synthslantbox{.3}{\doublealphabethyp}} \\
+ \bottomrule
+ \end{tabular}
+ \qquad
+ \newlength{\abcplainitalics}\settowidth{\abcplainitalics}{\itshape\doublealphabet}
+ \newlength{\abchypitalics}\settowidth{\abchypitalics}{\itshape\doublealphabethyp}
+ \begin{tabular}[t]{@{}lrll@{}}
+ \toprule
+ \cs{itshape} & Slant & Width & Delta \\
+ {} & & pt & pt \\
+ \midrule
+ ABC & --- & \thewidthof{\itshape\doublealphabet} & --- \\
+ ABC hyp & --- & \thewidthof{\itshape\doublealphabethyp} & --- \\
+ %
+ ABC & 0 &
+ \thewidthof{\synthslantbox{0}{\itshape\doublealphabet}} &
+ \thewidthdiffof{\abcplainitalics}{\synthslantbox{0}{\itshape\doublealphabet}} \\
+ ABC hyp & 0 &
+ \thewidthof{\synthslantbox{0}{\itshape\doublealphabethyp}} &
+ \thewidthdiffof{\abchypitalics}{\synthslantbox{0}{\itshape\doublealphabethyp}} \\
+ %
+ ABC & -.1 &
+ \thewidthof{\synthslantbox{-.1}{\itshape\doublealphabet}} &
+ \thewidthdiffof{\abcplainitalics}{\synthslantbox{-.1}{\itshape\doublealphabet}} \\
+ ABC hyp & -.1 &
+ \thewidthof{\synthslantbox{-.1}{\itshape\doublealphabethyp}} &
+ \thewidthdiffof{\abchypitalics}{\synthslantbox{-.1}{\itshape\doublealphabethyp}} \\
+ %
+ ABC & -.2 &
+ \thewidthof{\synthslantbox{-.2}{\itshape\doublealphabet}} &
+ \thewidthdiffof{\abcplainitalics}{\synthslantbox{-.2}{\itshape\doublealphabet}} \\
+ ABC hyp & -.2 &
+ \thewidthof{\synthslantbox{-.2}{\itshape\doublealphabethyp}} &
+ \thewidthdiffof{\abchypitalics}{\synthslantbox{-.2}{\itshape\doublealphabethyp}} \\
+ %
+ ABC & -.3 &
+ \thewidthof{\synthslantbox{-.3}{\itshape\doublealphabet}} &
+ \thewidthdiffof{\abcplainitalics}{\synthslantbox{-.3}{\itshape\doublealphabet}} \\
+ ABC hyp & -.3 &
+ \thewidthof{\synthslantbox{-.3}{\itshape\doublealphabethyp}} &
+ \thewidthdiffof{\abchypitalics}{\synthslantbox{-.3}{\itshape\doublealphabethyp}} \\
+ \bottomrule
+ \end{tabular}
+\end{center}
+
+
+\subsection{Line-Breaking}
+
+Left: plain text, \\
+right: \code{\cs{textsynthslant}\{Show line-break\cs{-}ing in a sen\cs{-}tence.\}}
+
+\begin{center}
+ \setlength{\overfullrule}{0pt}
+ \begin{minipage}[t]{0pt}Show line-breaking with a sentence.\end{minipage}%
+ \hspace*{100pt}%
+ \begin{minipage}[t]{0pt}\textsynthslant{Show line-break\-ing in a sen\-tence.}\end{minipage}
+\end{center}
+
+
+\subsection{Microtype Enhancements}
+
+\ifdefined\SetTracking
+ Package \packagename{microtype} loaded.
+
+ Test different trackings in the \code{synthnegslant}~context.
+
+ \begin{center}
+ \setlength{\overfullrule}{0pt}
+ \newcommand*{\thinvrule}{\rule{.4pt}{.7em}}
+ \newcommand{\settracking}[2]
+ {\SetTracking[context=synthnegslant,
+ no ligatures={f},
+ outer kerning={0,0},
+ spacing={#2*,,}]
+ {encoding=*, shape=it}
+ {#1}}
+ \newcommand*{\smallextratracking}{20}
+ \newcommand*{\smallextraspacing}{150}
+ \newcommand*{\bigextratracking}{250}
+ \newcommand*{\bigextraspacing}{300}
+ \begin{tabular}{@{}rrll@{}}
+ \toprule
+ Tracking &
+ Spacing &
+ \raisebox{-.5\normalbaselineskip}[0pt][0pt]{Sample} &
+ \raisebox{-.5\normalbaselineskip}[0pt][0pt]{Example sentence} \\
+ {\small\generictextfraction{1}{1000}}\:em & {\small\generictextfraction{dim}{1000}} & & \\
+ \midrule
+ 0 & 0 &
+ \settracking{0}{0}\thinvrule\textsynthuprightitalic{\fontsample}\thinvrule &
+ \settracking{0}{0}\thinvrule\textsynthuprightitalic{\longfontsample}\thinvrule \\
+ \smallextratracking & \smallextraspacing &
+ \settracking{\smallextratracking}{\smallextraspacing}%
+ \thinvrule\textsynthuprightitalic{\fontsample}\thinvrule &
+ \settracking{\smallextratracking}{\smallextraspacing}%
+ \thinvrule\textsynthuprightitalic{\longfontsample}\thinvrule \\
+ \bigextratracking & \bigextraspacing &
+ \settracking{\bigextratracking}{\bigextraspacing}%
+ \thinvrule\textsynthuprightitalic{\fontsample}\thinvrule &
+ \settracking{\bigextratracking}{\bigextraspacing}%
+ \thinvrule\textsynthuprightitalic{\longfontsample}\thinvrule \\
+ \bottomrule
+ \end{tabular}
+ \settracking{0}{0}% reset extra tracking
+ \end{center}
+
+ \noindent All samples are tightly bracketed by thin horizontal rules
+ to reveal possible outer spacing problems.
+\else
+ Package \packagename{microtype} not loaded.
+ No Microtype effects to show.
+\fi
+\end{document}
+%</gauge>
+% \fi
+%
+%
+%
+\endinput
+%
+%
+%
+%%% Local Variables:
+%%% compile-command: "latex synthslant.dtx"
+%%% fill-column: 96
+%%% End:
diff --git a/macros/latex/contrib/synthslant/synthslant.ins b/macros/latex/contrib/synthslant/synthslant.ins
new file mode 100644
index 0000000000..845b4378b1
--- /dev/null
+++ b/macros/latex/contrib/synthslant/synthslant.ins
@@ -0,0 +1,67 @@
+%% Copyright (C) 2024 by Ch. L. Spiel
+%%
+%% This work may be distributed and/or modified under the conditions
+%% of the LaTeX Project Public License, either version 1.3 of this
+%% license or (at your option) any later version. The latest version
+%% of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2003/12/01 or later.
+
+
+\input docstrip
+
+
+\keepsilent
+\askforoverwritefalse
+
+
+\preamble
+
+This is a generated file.
+
+Copyright (C) 2024 by Ch. L. Spiel
+
+This work may be distributed and/or modified under the conditions
+of the LaTeX Project Public License, either version 1.3 of this
+license or (at your option) any later version. The latest version
+of this license is in
+ http://www.latex-project.org/lppl.txt
+and version 1.3 or later is part of all distributions of LaTeX
+version 2003/12/01 or later.
+
+This work has the LPPL maintenance status `maintained'.
+
+The Current Maintainer of this work is Ch. L. Spiel.
+
+This work consists of the files synthslant.dtx and synthslant.ins
+and the derived files synthslant.sty, synthslant-gauge.tex,
+shear-transform.mp, and title.mp.
+
+
+\endpreamble
+
+
+\edef\source{\jobname.dtx}
+
+\generate{\file{synthslant.sty}{\from{\source}{package}}
+ \file{synthslant-gauge.tex}{\from{\source}{gauge}}
+ \file{synthslant.ist}{\from{\source}{index-style}}}
+
+
+\nopostamble
+\generate{\file{title.mp}{\from{\source}{title}}}
+\generate{\file{shear-transform.mp}{\from{\source}{shear-transform}}}
+
+
+\nopreamble
+\generate{\file{compare-with-the-gimp.png.base64}{\from{\source}{compare-with-the-gimp}}}
+
+
+\endbatchfile
+
+
+%% Local Variables:
+%% compile-command: "latex synthslant.ins"
+%% mode: latex
+%% End:
diff --git a/macros/latex/contrib/tblr-extras/README.md b/macros/latex/contrib/tblr-extras/README.md
index 4c7dc3ce22..373fedb6a1 100644
--- a/macros/latex/contrib/tblr-extras/README.md
+++ b/macros/latex/contrib/tblr-extras/README.md
@@ -7,12 +7,12 @@ license or (at your option) any later version. The latest version
of this license is in
http://www.latex-project.org/lppl.txt
# Usage
-Just use \usepackage{tblr-extras} after loading tabularray.
-Activate the libraries using \UseTblrLibrary command
+Just use `\usepackage{tblr-extras}` after loading tabularray.
+Activate the libraries using `\UseTblrLibrary` command.
## Caption Library
Use caption package to typeset tabularray tall and long tabulars captions.
-Enable this library with \UseTblrLibrary{caption}
+Enable this library with `\UseTblrLibrary{caption}`
## Babel Library
-Translate contfoot and conthead to current babel language.
-Curremtle only supports ngerman, french and spanish translations.
-Enable this library with \UseTblrLibrary{babel} \ No newline at end of file
+Translate `contfoot` and `conthead` to current `babel`/`polyglossia` language.
+Currently only supports ngerman, french, spanish, russian and ukrainian translations.
+Enable this library with `\UseTblrLibrary{babel}`
diff --git a/macros/latex/contrib/tblr-extras/tblr-extras-doc-EN.pdf b/macros/latex/contrib/tblr-extras/tblr-extras-doc-EN.pdf
index 5f1292e5c7..9262427895 100644
--- a/macros/latex/contrib/tblr-extras/tblr-extras-doc-EN.pdf
+++ b/macros/latex/contrib/tblr-extras/tblr-extras-doc-EN.pdf
Binary files differ
diff --git a/macros/latex/contrib/tblr-extras/tblr-extras-doc-EN.tex b/macros/latex/contrib/tblr-extras/tblr-extras-doc-EN.tex
index f15a58f8c4..308c0e232a 100644
--- a/macros/latex/contrib/tblr-extras/tblr-extras-doc-EN.tex
+++ b/macros/latex/contrib/tblr-extras/tblr-extras-doc-EN.tex
@@ -1,6 +1,6 @@
% -----------------------------------------------------------------------
%%% tblr-extras-doc: Documentation for tblr-extras package.
-%%% Version : 1.0 - 2024-02-10
+%%% Version : 1.1 - 2024-05-13
%%% Copyright : 2024 (c) Manuel E. Merino <manuel.merino.pe@gmail.com>
%%% License : The LaTeX Project Public License 1.3c
% -----------------------------------------------------------------------
@@ -31,7 +31,7 @@
\usepackage{parskip}
\usepackage[hidelinks]{hyperref}
-\newcommand{\Version}{1.0}
+\newcommand{\Version}{1.1}
\NewDocumentCommand{\tblrextras}{}{\textbf{\color{udep}tblr-extras}}
@@ -40,7 +40,7 @@
\centering
\LARGE\textbf{Package \color{udep}tblr-extras}\par
\large Manuel E. Merino\par
- \texttt{v\Version{} - 10/02/2024}\par
+ \texttt{v\Version{} - 13/06/2024}\par
\normalsize Extra libraries for tabularray package.\par
\endgroup
\tableofcontents
@@ -68,7 +68,7 @@
The \tblrextras{} package redefines the \texttt{conthead-text} and \textbf{contfoot-text} for the \texttt{longtblr} environment, using the current babel language.
- Currently only spanish, ngerman and english variants are supported.
+ Currently only spanish, ngerman, russian, ukrainian and french variants are supported.
\section{Bug reports and suggestions}
@@ -78,6 +78,17 @@
The \tblrextras{} package and all its included files are licensed under the LPPL v1.3c or later.
+ \section{Changelog}
+
+ v1.1 - Thanks sgolovan.
+ \begin{itemize}
+ \item Improved the babel library using language hooks.
+ \item Added support for polyglossia package.
+ \item Added ukrainian and russian translations.
+ \end{itemize}
+
+ v1.0 - Initial release.
+
\vfill
\centering
\footnotesize \tblrextras{} -- {\copyright} 2024 Manuel E. Merino. Licensed under LPPL v1.3c.
diff --git a/macros/latex/contrib/tblr-extras/tblr-extras.sty b/macros/latex/contrib/tblr-extras/tblr-extras.sty
index 09cd5ce16c..a6742f4a10 100644
--- a/macros/latex/contrib/tblr-extras/tblr-extras.sty
+++ b/macros/latex/contrib/tblr-extras/tblr-extras.sty
@@ -1,6 +1,6 @@
% -----------------------------------------------------------------------
%%% tblr-extras: Extra libraries for tabularray package.
-%%% Version : 1.0 - 2024-02-10
+%%% Version : 1.1 - 2024-05-13
%%% Copyright : 2024 (c) Manuel E. Merino <manuel.merino.pe@gmail.com>
%%% License : The LaTeX Project Public License 1.3c
% -----------------------------------------------------------------------
@@ -18,7 +18,7 @@
% The Current Maintainer of this work is Manuel E. Merino
% -----------------------------------------------------------------------
\NeedsTeXFormat{LaTeX2e}[2018-04-01]
-\ProvidesPackage{tblr-extras}[2024/02/06 package tblr-extras]
+\ProvidesPackage{tblr-extras}[2024/05/13 package tblr-extras]
\RequirePackage{tabularray}
%% ----------------------------------------------------------------------
%% TblrLibrary caption - Use caption package to typeset tabularray tall
@@ -34,7 +34,7 @@
%% Check if a KomaClass is loaded and issue a warning for caption position setup
\@ifundefined{KOMAClassName}
{}
- {\PackageWarningNoLine{tblr-extras}{KOMAScript class detected. Setup caption position using 'captions=<option>'}}
+ {\PackageWarningNoLine{tblr-extras}{KOMAScript class detected. Setup caption position using 'captions=option'}}
\SetTblrOuter[talltblr,longtblr]{headsep=0pt}
\DefTblrTemplate{firsthead}{default}{%
\addtocounter{table}{-1}%
@@ -54,21 +54,72 @@
\SetTblrTemplate{caption-lot}{empty}
}
%% ----------------------------------------------------------------------
-%% TblrLibrary babel - Translate contfoot and conthead to current babel
-%% language. Supports: ngerman, french and spanish translations.
+%% TblrLibrary babel - Translate contfoot and conthead to current babel/polyglossia
+%% language. Supports: ngerman, french, spanish, russian and ukrainian translations.
+%% Check engine
+\newif\if@unicode@engine
+\ifdefined\luatexversion
+ \@unicode@enginetrue
+\else\ifdefined\XeTeXrevision
+ \@unicode@enginetrue
+\fi\fi
\NewTblrLibrary{babel}
{%
- \RequirePackage{babel,iflang}
- \IfLanguagePatterns{spanish}{%
- \DefTblrTemplate{contfoot-text}{default}{Continúa en la página siguiente}
- \DefTblrTemplate{conthead-text}{default}{(Continuación)}
- }{}
- \IfLanguagePatterns{ngerman}{%
- \DefTblrTemplate{contfoot-text}{default}{Fortsetzung auf der nächsten Seite}
- \DefTblrTemplate{conthead-text}{default}{(Fortsetzung)}
- }{}
- \IfLanguagePatterns{french}{%
- \DefTblrTemplate{contfoot-text}{default}{Suite à la page suivante}
- \DefTblrTemplate{conthead-text}{default}{(Suite)}
- }{}
+ \AddToHook{begindocument/before}{%
+ \@ifpackageloaded{babel}{}{%
+ \@ifpackageloaded{polyglossia}{}{%
+ \RequirePackage{babel}
+ }
+ }
+ \ifdefined\captionsspanish
+ \addto\captionsspanish{%
+ \DefTblrTemplate{contfoot-text}{default}{Continúa en la página siguiente}%
+ \DefTblrTemplate{conthead-text}{default}{(Continuación)}%
+ }
+ \fi
+ \ifdefined\captionsngerman
+ \addto\captionsngerman{%
+ \DefTblrTemplate{contfoot-text}{default}{Fortsetzung auf der nächsten Seite}%
+ \DefTblrTemplate{conthead-text}{default}{(Fortsetzung)}%
+ }
+ \fi
+ \ifdefined\captionsgerman
+ \addto\captionsgerman{%
+ \DefTblrTemplate{contfoot-text}{default}{Fortsetzung auf der nächsten Seite}%
+ \DefTblrTemplate{conthead-text}{default}{(Fortsetzung)}%
+ }
+ \fi
+ \ifdefined\captionsfrench
+ \addto\captionsfrench{%
+ \DefTblrTemplate{contfoot-text}{default}{Suite à la page suivante}%
+ \DefTblrTemplate{conthead-text}{default}{(Suite)}%
+ }
+ \fi
+ \ifdefined\captionsrussian
+ \if@unicode@engine
+ \addto\captionsrussian{%
+ \DefTblrTemplate{contfoot-text}{default}{Продолжение на следующей странице}%
+ \DefTblrTemplate{conthead-text}{default}{(продолжение)}%
+ }
+ \else
+ \addto\captionsrussian{%
+ \DefTblrTemplate{contfoot-text}{default}{\cyr\CYRP\cyrr\cyro\cyrd\cyro\cyrl\cyrzh\cyre\cyrn\cyri\cyre\ \cyrn\cyra\ \cyrs\cyrl\cyre\cyrd\cyru\cyryu\cyrshch\cyre\cyrishrt\ \cyrs\cyrt\cyrr\cyra\cyrn\cyri\cyrc\cyre}%
+ \DefTblrTemplate{conthead-text}{default}{(\cyr\cyrp\cyrr\cyro\cyrd\cyro\cyrl\cyrzh\cyre\cyrn\cyri\cyre)}%
+ }
+ \fi
+ \fi
+ \ifdefined\captionsukrainian
+ \if@unicode@engine
+ \addto\captionsukrainian{%
+ \DefTblrTemplate{contfoot-text}{default}{Продовження на наступній сторінці}%
+ \DefTblrTemplate{conthead-text}{default}{(продовження)}%
+ }
+ \else
+ \addto\captionsukrainian{%
+ \DefTblrTemplate{contfoot-text}{default}{\cyr\CYRP\cyrr\cyro\cyrd\cyro\cyrv\cyrzh\cyre\cyrn\cyrn\cyrya\ \cyrn\cyra\ \cyrn\cyra\cyrs\cyrt\cyru\cyrp\cyrn\cyrii\cyrishrt\ \cyrs\cyrt\cyro\cyrr\cyrii\cyrn\cyrc\cyrii}%
+ \DefTblrTemplate{conthead-text}{default}{(\cyr\cyrp\cyrr\cyro\cyrd\cyro\cyrv\cyrzh\cyre\cyrn\cyrn\cyrya)}%
+ }
+ \fi
+ \fi
+ }
}
diff --git a/macros/latex/contrib/thuthesis/CHANGELOG.md b/macros/latex/contrib/thuthesis/CHANGELOG.md
index 9864c944bc..fb293105fc 100644
--- a/macros/latex/contrib/thuthesis/CHANGELOG.md
+++ b/macros/latex/contrib/thuthesis/CHANGELOG.md
@@ -6,6 +6,17 @@
## [Unreleased]
+## [v7.5.1] - 2024-05-20
+
+### Changed
+
+- 更新 `student-id` 选项的处理逻辑,非 `proposal` 类型默认忽略,并增加警告([#945](https://github.com/tuna/thuthesis/issues/945))。
+
+### Fixed
+
+- 修复参考文献 URL 中带有 DOI 时,重复打印 DOI 的问题([#952](https://github.com/tuna/thuthesis/discussions/952))。
+- 修复文档中的部分错别字。
+
## [v7.5.0] - 2024-03-29
### Added
@@ -977,7 +988,8 @@
-[Unreleased]: https://github.com/tuna/thuthesis/compare/v7.5.0...HEAD
+[Unreleased]: https://github.com/tuna/thuthesis/compare/v7.5.1...HEAD
+[v7.5.1]: https://github.com/tuna/thuthesis/compare/v7.5.0...v7.5.1
[v7.5.0]: https://github.com/tuna/thuthesis/compare/v7.4.0...v7.5.0
[v7.4.0]: https://github.com/tuna/thuthesis/compare/v7.3.2...v7.4.0
[v7.3.2]: https://github.com/tuna/thuthesis/compare/v7.3.1...v7.3.2
diff --git a/macros/latex/contrib/thuthesis/thuthesis-author-year.bst b/macros/latex/contrib/thuthesis/thuthesis-author-year.bst
index 9a46a4e461..03d02861f4 100644
--- a/macros/latex/contrib/thuthesis/thuthesis-author-year.bst
+++ b/macros/latex/contrib/thuthesis/thuthesis-author-year.bst
@@ -1314,7 +1314,7 @@ FUNCTION {extract.after.slash}
FUNCTION {format.year}
{ year empty$ not
- { year extract.before.slash extra.label * }
+ { year extra.label * }
{ date empty$ not
{ date extract.before.dash extra.label * }
{ entry.is.electronic not
@@ -1494,7 +1494,7 @@ FUNCTION {format.periodical.year.volume.number}
FUNCTION {check.url}
{ url empty$ not
- { "\url{" url * "}" * 'entry.url :=
+ { url 'entry.url :=
#1 'entry.is.electronic :=
}
{ howpublished empty$ not
@@ -1525,7 +1525,11 @@ FUNCTION {output.url}
{ show.url is.pure.electronic or
entry.url empty$ not and
{ new.block
- entry.url output
+ entry.url #1 #5 substring$ "\url{" =
+ { entry.url }
+ { "\url{" entry.url * "}" * }
+ if$
+ output
}
'skip$
if$
@@ -1545,8 +1549,8 @@ FUNCTION {is.in.url}
{ entry.url empty$
{ #0 }
{ s text.length$ 'len :=
- entry.url text.length$ 'charptr :=
- { entry.url charptr len substring$ s = not
+ entry.url "l" change.case$ text.length$ 'charptr :=
+ { entry.url "l" change.case$ charptr len substring$ s "l" change.case$ = not
charptr #0 >
and
}
@@ -2073,7 +2077,7 @@ FUNCTION {map}
FUNCTION {manual} { monograph }
-FUNCTION {thesis}
+FUNCTION {mastersthesis}
{ "D" set.entry.mark
monograph
}
@@ -2088,9 +2092,7 @@ FUNCTION {online}
electronic
}
-FUNCTION {mastersthesis} { thesis }
-
-FUNCTION {phdthesis} { thesis }
+FUNCTION {phdthesis} { mastersthesis }
FUNCTION {proceedings}
{ "C" set.entry.mark
@@ -2107,13 +2109,11 @@ FUNCTION {standard}
misc
}
-FUNCTION {report}
+FUNCTION {techreport}
{ "R" set.entry.mark
misc
}
-FUNCTION {techreport} { report }
-
FUNCTION {unpublished} { misc }
FUNCTION {default.type} { misc }
diff --git a/macros/latex/contrib/thuthesis/thuthesis-bachelor.bst b/macros/latex/contrib/thuthesis/thuthesis-bachelor.bst
index 67e1f7eeb3..aea8c151bf 100644
--- a/macros/latex/contrib/thuthesis/thuthesis-bachelor.bst
+++ b/macros/latex/contrib/thuthesis/thuthesis-bachelor.bst
@@ -1304,7 +1304,7 @@ FUNCTION {extract.after.slash}
FUNCTION {format.year}
{ year empty$ not
- { year extract.before.slash extra.label * }
+ { year extra.label * }
{ date empty$ not
{ date extract.before.dash extra.label * }
{ entry.is.electronic not
@@ -1484,7 +1484,7 @@ FUNCTION {format.periodical.year.volume.number}
FUNCTION {check.url}
{ url empty$ not
- { "\url{" url * "}" * 'entry.url :=
+ { url 'entry.url :=
#1 'entry.is.electronic :=
}
{ howpublished empty$ not
@@ -1515,7 +1515,11 @@ FUNCTION {output.url}
{ show.url is.pure.electronic or
entry.url empty$ not and
{ new.block
- entry.url output
+ entry.url #1 #5 substring$ "\url{" =
+ { entry.url }
+ { "\url{" entry.url * "}" * }
+ if$
+ output
}
'skip$
if$
@@ -1535,8 +1539,8 @@ FUNCTION {is.in.url}
{ entry.url empty$
{ #0 }
{ s text.length$ 'len :=
- entry.url text.length$ 'charptr :=
- { entry.url charptr len substring$ s = not
+ entry.url "l" change.case$ text.length$ 'charptr :=
+ { entry.url "l" change.case$ charptr len substring$ s "l" change.case$ = not
charptr #0 >
and
}
@@ -2063,7 +2067,7 @@ FUNCTION {map}
FUNCTION {manual} { monograph }
-FUNCTION {thesis}
+FUNCTION {mastersthesis}
{ "D" set.entry.mark
monograph
}
@@ -2078,9 +2082,7 @@ FUNCTION {online}
electronic
}
-FUNCTION {mastersthesis} { thesis }
-
-FUNCTION {phdthesis} { thesis }
+FUNCTION {phdthesis} { mastersthesis }
FUNCTION {proceedings}
{ "C" set.entry.mark
@@ -2097,13 +2099,11 @@ FUNCTION {standard}
misc
}
-FUNCTION {report}
+FUNCTION {techreport}
{ "R" set.entry.mark
misc
}
-FUNCTION {techreport} { report }
-
FUNCTION {unpublished} { misc }
FUNCTION {default.type} { misc }
diff --git a/macros/latex/contrib/thuthesis/thuthesis-example.pdf b/macros/latex/contrib/thuthesis/thuthesis-example.pdf
index 1a4d6b72b0..2c48ce2ef5 100644
--- a/macros/latex/contrib/thuthesis/thuthesis-example.pdf
+++ b/macros/latex/contrib/thuthesis/thuthesis-example.pdf
Binary files differ
diff --git a/macros/latex/contrib/thuthesis/thuthesis-numeric.bst b/macros/latex/contrib/thuthesis/thuthesis-numeric.bst
index b27da61efc..6d24c4465e 100644
--- a/macros/latex/contrib/thuthesis/thuthesis-numeric.bst
+++ b/macros/latex/contrib/thuthesis/thuthesis-numeric.bst
@@ -1304,7 +1304,7 @@ FUNCTION {extract.after.slash}
FUNCTION {format.year}
{ year empty$ not
- { year extract.before.slash extra.label * }
+ { year extra.label * }
{ date empty$ not
{ date extract.before.dash extra.label * }
{ entry.is.electronic not
@@ -1484,7 +1484,7 @@ FUNCTION {format.periodical.year.volume.number}
FUNCTION {check.url}
{ url empty$ not
- { "\url{" url * "}" * 'entry.url :=
+ { url 'entry.url :=
#1 'entry.is.electronic :=
}
{ howpublished empty$ not
@@ -1515,7 +1515,11 @@ FUNCTION {output.url}
{ show.url is.pure.electronic or
entry.url empty$ not and
{ new.block
- entry.url output
+ entry.url #1 #5 substring$ "\url{" =
+ { entry.url }
+ { "\url{" entry.url * "}" * }
+ if$
+ output
}
'skip$
if$
@@ -1535,8 +1539,8 @@ FUNCTION {is.in.url}
{ entry.url empty$
{ #0 }
{ s text.length$ 'len :=
- entry.url text.length$ 'charptr :=
- { entry.url charptr len substring$ s = not
+ entry.url "l" change.case$ text.length$ 'charptr :=
+ { entry.url "l" change.case$ charptr len substring$ s "l" change.case$ = not
charptr #0 >
and
}
@@ -2063,7 +2067,7 @@ FUNCTION {map}
FUNCTION {manual} { monograph }
-FUNCTION {thesis}
+FUNCTION {mastersthesis}
{ "D" set.entry.mark
monograph
}
@@ -2078,9 +2082,7 @@ FUNCTION {online}
electronic
}
-FUNCTION {mastersthesis} { thesis }
-
-FUNCTION {phdthesis} { thesis }
+FUNCTION {phdthesis} { mastersthesis }
FUNCTION {proceedings}
{ "C" set.entry.mark
@@ -2097,13 +2099,11 @@ FUNCTION {standard}
misc
}
-FUNCTION {report}
+FUNCTION {techreport}
{ "R" set.entry.mark
misc
}
-FUNCTION {techreport} { report }
-
FUNCTION {unpublished} { misc }
FUNCTION {default.type} { misc }
diff --git a/macros/latex/contrib/thuthesis/thuthesis.dtx b/macros/latex/contrib/thuthesis/thuthesis.dtx
index 6e25d0cdfb..ea4ac03f22 100644
--- a/macros/latex/contrib/thuthesis/thuthesis.dtx
+++ b/macros/latex/contrib/thuthesis/thuthesis.dtx
@@ -14,7 +14,7 @@
%
% \iffalse
%<*driver>
-\ProvidesFile{thuthesis.dtx}[2024/03/29 7.5.0 Tsinghua University Thesis Template]
+\ProvidesFile{thuthesis.dtx}[2024/05/20 7.5.1 Tsinghua University Thesis Template]
\documentclass{ltxdoc}
\usepackage{dtx-style}
@@ -1243,8 +1243,8 @@
% include-spine = true,
% }
% \end{latex}
-% 打开此选项后,书籍会出现在中文封面后面的第一个空白页。如果有英文封面,则在英文封面之前。
-% 如果需要书籍出现在其他位置,请手工使用 \cs{spine} 生成,不要使用此选项。
+% 打开此选项后,书脊会出现在中文封面后面的第一个空白页。如果有英文封面,则在英文封面之前。
+% 如果需要书脊出现在其他位置,请手工使用 \cs{spine} 生成,不要使用此选项。
%
% \section{致谢}
% \label{sec:thanks}
@@ -1269,7 +1269,7 @@
% \begin{macrocode}
%<cls>\NeedsTeXFormat{LaTeX2e}[2017/04/15]
%<cls>\ProvidesClass{thuthesis}
-%<cls>[2024/03/29 7.5.0 Tsinghua University Thesis Template]
+%<cls>[2024/05/20 7.5.1 Tsinghua University Thesis Template]
% \end{macrocode}
%
% 报错
@@ -1330,7 +1330,7 @@
%<*cls>
\hyphenation{Thu-Thesis}
\def\thuthesis{ThuThesis}
-\def\version{7.5.0}
+\def\version{7.5.1}
\RequirePackage{kvdefinekeys}
\RequirePackage{kvsetkeys}
\RequirePackage{kvoptions}
@@ -4584,14 +4584,15 @@
\restoregeometry
}
\newcommand\thu@set@student@id{%
- \ifthu@thesis@type@proposal
- \ifx\thu@student@id\@empty
- \thusetup{student-id=2000310000}%
+ \ifthu@thesis@type@proposal\else
+ \ifx\thu@student@id\@empty\else
+ \thu@warning{`student-id' in "\protect\thusetup" would be ignored when `thesis-type' is not proposal.}%
\fi
\fi
}
\thu@set@student@id
\thu@option@hook{thesis-type}{\thu@set@student@id}
+\thu@option@hook{student-id}{\thu@set@student@id}
% \end{macrocode}
%
% 涉密信息
@@ -4656,7 +4657,13 @@
\thu@info@item{工程领域}{}{\thu@engineering@field}%
\thu@info@item{申请人}{\thu@name@title}{\thu@author}%
\fi
- \thu@info@item{学号}{}{\thu@student@id}%
+ \ifthu@thesis@type@proposal
+ \ifx\thu@student@id\@empty
+ \thu@warning{Missing option `student-id' in "\protect\thusetup", ID will not appear on cover.}
+ \else
+ \thu@info@item{学号}{}{\thu@student@id}%
+ \fi
+ \fi
\thu@info@item{指导教师}{\thu@name@title}{\thu@supervisor}%
\thu@info@item{副指导教师}{\thu@name@title}{\thu@associate@supervisor}%
\thu@info@item{联合指导教师}{\thu@name@title}{\thu@co@supervisor}%
diff --git a/macros/latex/contrib/thuthesis/thuthesis.pdf b/macros/latex/contrib/thuthesis/thuthesis.pdf
index 9f55312fdd..daa32de045 100644
--- a/macros/latex/contrib/thuthesis/thuthesis.pdf
+++ b/macros/latex/contrib/thuthesis/thuthesis.pdf
Binary files differ
diff --git a/macros/latex/contrib/tkz/tkz-elements/README.md b/macros/latex/contrib/tkz/tkz-elements/README.md
index 1f2043e435..a4d8d90fad 100644
--- a/macros/latex/contrib/tkz/tkz-elements/README.md
+++ b/macros/latex/contrib/tkz/tkz-elements/README.md
@@ -1,12 +1,12 @@
# tkz-elements — for euclidean geometry
-Release 2.20c 2024/03/26
+Release 2.25c 2024/04/28
## Description
-`tkz-elements v.2.20c` is the new version of a library written in lua, allowing to make all the necessary calculations to define the objects of a Euclidean geometry figure. You need to compile with `LuaLaTeX`. With `tkz-elements`, the definitions and calculations are only done with `Lua`.
+`tkz-elements v.2.25c` is the new version of a library written in lua, allowing to make all the necessary calculations to define the objects of a Euclidean geometry figure. You need to compile with `LuaLaTeX`. With `tkz-elements`, the definitions and calculations are only done with `Lua`.
- The main possibility of programmation proposed is oriented "object programming" with object classes like point, line, triangle, circle and ellipse. For the moment, once the calculations are done, it is `tkz-euclide` or `TikZ` which allows the drawings.
+ The main possibility of programmation proposed is oriented "object programming" with object classes like point, line, triangle, circle and ellipse. For the moment, once the calculations are done, it is `tkz-euclide` or `TikZ` which allows the drawings. You can use the option `mini` with `tkz-euclide` to load only the modules required for tracing.
## Licence
@@ -39,7 +39,9 @@ To use the package `tkz-elements`, place the following lines in the preamble of
your LaTeX document:
```
-\usepackage{tkz-euclide,tkz-elements}
+% !TEX TS-program = lualatex
+\usepackage[mini]{tkz-euclide}
+\usepackage{tkz-elements}
\begin{document}
\begin{tkzelements}
your code
@@ -60,27 +62,32 @@ An important example `Golden Arbelos` using the package is on the site. All the
are on the site.
## History
+ - version 2.25c
+ - French documentation at my site: [http://altermundus.fr](http://altermundus.fr)
+ - Added `colinear_at` a new method for the classe `line`
+ - Added `cevian`, `pedal`, `conway_circle`, `conway_points` new methods to the class `triangle`.
+
- version 2.20c
- - Package:
- - Added class matrix; methods are mainly of order 2, sometimes of order 3.
- - Added function solve_quadratic. This function can be used to solve second-degree equations with real or complex numbers.
- - Added method print for the class point. Example z.A : print ()
- - Correction of the macro tkzDN. I deleted a spurious space
- - Modification of vector class attributes. Attributes h and t become head and tail.
- - The mtx attribute is introduced for point and vector.
- z.A.mtx represents the column matrix whose coefficients are the point's coordinates. Same for vectors.
- - Documentation:
- - Rewriting of all texts
- - Correction of example: pentagon
- - Documentation about matrices
+ - Package:
+ - Added class matrix; methods are mainly of order 2, sometimes of order 3.
+ - Added function solve_quadratic. This function can be used to solve second-degree equations with real or complex numbers.
+ - Added method print for the class point. Example z.A : print ()
+ - Correction of the macro tkzDN. I deleted a spurious space
+ - Modification of vector class attributes. Attributes h and t become head and tail.
+ - The mtx attribute is introduced for point and vector.
+ z.A.mtx represents the column matrix whose coefficients are the point's coordinates. Same for vectors.
+ - Documentation:
+ - Rewriting of all texts
+ - Correction of example: pentagon
+ - Documentation about matrices
- version 2.00c
- - class development “vector”
- - added attribute “vec”
- - added “at” and “orthogonal” methods to the class “point”
+ - class development `vector`
+ - added attribute `vec`
+ - added `at` and `orthogonal` methods to the class `point`
- rewriting the function angle\_normalize\_
- - modification of the slope attribute for the “line”, now the result is normalized.
+ - modification of the slope attribute for the `line`, now the result is normalized.
- the angles of a triangle are also normalized
- added function format\_number(number,decimal) sets the number of digits in the decimal part.
- added \tkzDN a macro pour formater les nombres dans la partie TikZ
@@ -115,7 +122,7 @@ are on the site.
- method trilinear (to use trilinear coordinates)
- method barycentric (to use barycentric coordinates)
- Added some functions
- - bisector (a,b,c) altitude (a,b,c) bisector_ext(a,b,c) equilateral (a,b) midpoint (a,b) to avoid creating unnecessary objects.
+ - `bisector (a,b,c)` `altitude (a,b,c)` `bisector_ext(a,b,c)` `equilateral (a,b)` `midpoint (a,b)` to avoid creating unnecessary objects.
- Added new examples and a cheat sheet in the documentation
@@ -133,72 +140,55 @@ are on the site.
- version 1.60c
- added Internal and external tangents common to two circles:
- - function circle : `external_tangent`(C)
- - function circle : `internal_tangent(C)
+ - function circle : `external_tangent(C)`
+ - function circle : `internal_tangent(C)`
- radical_center and radical_circle are also valid for two circles
- - function `radical_center` (C1,C2,C3)
- - function `radical_circle` (C1,C2,C3)
- - function `circles_position` (C1,C2)
- - function `midcircle` (C1,C2) powerful tool for working with inversions
+ - function `radical_center (C1,C2,C3)`
+ - function `radical_circle (C1,C2,C3)`
+ - function `circles_position (C1,C2)`
+ - function `midcircle (C1,C2)` powerful tool for working with inversions
- Bug corrected in midarc now use get_angle instead of get_angle_
- Modification of a triangle attribute `ca` replaces `ac` to designate the line passing through the third and first points
- - The center of symmetry of a parallelogram is named "center" instead of "i".
+ - The center of symmetry of a parallelogram is named "center" instead of `i`.
- Correction documentation
- Correction of examples using the circle:point (k) method, where k is now a real number rather than an angle.
- version 1.50c Correction of the documentation
- - Added "swap" option to create triangles from the "line" object.
- - "iscyclic" is a new method to know if a quadrilateral is inscribable in a circle.
- - Added function "diameter" to create a circle.
- - Added function "swap" to swap two points.
- - Correction method "gold" of object rectangle.
- - Correction method "in_circle_" of object triangle.
- - Correction method "incentral_tr_" of object triangle.
- - Added method "soddy_center" of object triangle.
- - Added option "swap" for method "square" of object line.
- - Added method "report" for object line. Transfer a defined length from a point
- - Added option "swap" to the function "square : side"
+ - Added `swap` option to create triangles from the "line" object.
+ - `iscyclic` is a new method to know if a quadrilateral is inscribable in a circle.
+ - Added function `diameter` to create a circle.
+ - Added function `swap` to swap two points.
+ - Correction method `gold` of object rectangle.
+ - Correction method `in_circle_` of object triangle.
+ - Correction method `incentral_tr_` of object triangle.
+ - Added method `soddy_center` of object triangle.
+ - Added option `swap` for method `square` of object line.
+ - Added method `report` for object line. Transfer a defined length from a point
+ - Added option `swap` to the function "square : side"
- Version 1.40c Restructuring objects
- New version for all transformations. Now, they accept all objects as parameters.
-
- Symmetry_axial has changed its name to reflection.
-
- Added scale to north south etc.. (point object).
-
- Change the "point" method of the objects circle and ellipse. now the parameter is un real t (between 0 and 1) and not an angle
-
- Added the method `check_equilateral` to know if a triangle is equilateral.
-
-
- Added option "indirect" to the method equilateral for a line object.
-
- Correction of the documentation. (Added sections).
-
-
-
-
+ - New version for all transformations. Now, they accept all objects as parameters.
+ - Symmetry_axial has changed its name to reflection.
+ - Added scale to north south etc.. (point object).
+ - Change the "point" method of the objects circle and ellipse. now the parameter is un real t (between 0 and 1) and not an angle
+ - Added the method `check_equilateral` to know if a triangle is equilateral.
+ - Added option "indirect" to the method equilateral for a line object.
+ - Correction of the documentation. (Added sections).
+
- Version 1.20 Memory management: tables are emptied when the tkzelements environment is opened.
- `set_lua_to_tex` has been replaced by `tkzUseLua` to transfer data between the `tkzelements` and `tikzpicture` environments.
-
- New version of `inversion` with respect to a circle method. It selects the correct algorithm based on the object passed as a parameter.
-
- Added an `in_out_disk` method for the `circle` object, which indicates whether or not a point is in the disk. `in_out` is for the circle.
-
- Added two methods: `radical_center (C1,C2,C3)` radical center of three circles.
- `radical_circle (C1,C2,C3)` orthogonal circle of three circles.
-
- Added function `circle : radius` to define a circle with a centre and a radius.
-
- Added methods `normalize` and `normalize_inv` for `line`.
-
- Added methods `translation` and `set_translation` to the `line` object.
-
- Added an example to illustrate combinations of methods and attributes.
+ - `set_lua_to_tex` has been replaced by `tkzUseLua` to transfer data between the `tkzelements` and `tikzpicture` environments.
+ - New version of `inversion` with respect to a circle method. It selects the correct algorithm based on the object passed as a parameter.
+ - Added an `in_out_disk` method for the `circle` object, which indicates whether or not a point is in the disk. `in_out` is for the circle.
+ - Added two methods: `radical_center (C1,C2,C3)` radical center of three circles.
+ `radical_circle (C1,C2,C3)` orthogonal circle of three circles.
+ - Added function `circle : radius` to define a circle with a centre and a radius.
+ - Added methods `normalize` and `normalize_inv` for `line`.
+ - Added methods `translation` and `set_translation` to the `line` object.
+ - Added an example to illustrate combinations of methods and attributes.
- First version 1.00b
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-circle.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-circle.tex
index f84c58d941..7ae96c7ada 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-circle.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-circle.tex
@@ -121,9 +121,9 @@ Three attributes are used (south, west, radius).
\midrule
\textbf{Circles}& &\\
\midrule
-\Imeth{circle}{orthogonal\_from (pt)} & |C = C.OA: orthogonal_from (z.P)| & Refer to (\ref{ssub:altshiller} ; \ref{sub:common_tangent_orthogonality} ; \ref{sub:orthogonal_circles_v1} ; \ref{sub:pencil_v1}) \\
-\Imeth{circle}{orthogonal\_through (pta,ptb)} & |C = C.OA: orthogonal_through (z.z1,z.z2)| & Refer to (\ref{sub:orthogonal_circle_through})\\
-\Imeth{circle}{inversion (...)} & | C.AC: inversion (pt, pts, L or C )|& Refer to \ref{ssub:inversion}, \ref{ssub:inversion_point}, \ref{ssub:inversion_line}, \ref{ssub:inversion_circle}\\
+\Imeth{circle}{orthogonal\_from (pt)} &|C=C.OA:orthogonal_from (z.P)| & Refer to (\ref{ssub:altshiller} ; \ref{sub:common_tangent_orthogonality} ; \ref{sub:orthogonal_circles_v1} ; \ref{sub:pencil_v1}) \\
+\Imeth{circle}{orthogonal\_through (pta,ptb)}&|C=C.OA:orthogonal_through (z.z1,z.z2)| & Refer to (\ref{sub:orthogonal_circle_through})\\
+\Imeth{circle}{inversion (...)} &|C.AC:inversion (pt, pts, L or C)|& Refer to \ref{ssub:inversion}, \ref{ssub:inversion_point}, \ref{ssub:inversion_line}, \ref{ssub:inversion_circle}\\
\Imeth{circle}{midcircle (C)} & |C.inv = C.OA: midcircle (C.EF)| & Refer to \ref{ssub:midcircle} \\
\Imeth{circle}{radical\_circle (C1<,C2>)} & or only (C1) & Refer to \ref{sub:radical_circle}\\
\midrule
@@ -208,7 +208,7 @@ Three attributes are used (south, west, radius).
\begin{minipage}{.5\textwidth}
\begin{Verbatim}
\begin{tkzelements}
- scale = 1.6
+ scale = 1.25
z.A = point: new (1,0)
z.B = point: new (5,2)
z.C = point: new (1.2,2)
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-ellipse.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-ellipse.tex
index 5ea44a57b7..3146f73461 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-ellipse.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-ellipse.tex
@@ -56,23 +56,6 @@ The first attributes are the three points that define the ellipse: : the \Iattr
z.Co = E.covertex
z.Ve = E.vertex
\end{tkzelements}
-\begin{tikzpicture}
- \pgfkeys{/pgf/number format/.cd,fixed,precision=2}
- \tkzGetNodes
- \tkzDrawCircles[teal](C,A)
- \tkzDrawEllipse[red](C,\tkzUseLua{a},\tkzUseLua{b},
- \tkzUseLua{slope})
- \tkzDrawPoints(C,A,B,b,W,S,F1,F2)
- \tkzLabelPoints(C,A,B)
- \tkzDrawLine[add = .5 and .5](A,W)
- \tkzLabelSegment[pos=1.5,above,sloped](A,W){%
- slope = \pgfmathprintnumber{\tkzUseLua{slope}}}
- \tkzLabelPoint[below](S){South}
- \tkzLabelPoint[below left](F1){Focus 1}
- \tkzLabelPoint[below left](F2){Focus 2}
- \tkzLabelPoint[above right](Ve){Vertex ; East}
- \tkzLabelPoint[above right](Co){Covertex ; North}
-\end{tikzpicture}
\end{Verbatim}
\end{minipage}
\begin{minipage}{.5\textwidth}
@@ -96,9 +79,8 @@ The first attributes are the three points that define the ellipse: : the \Iattr
z.Co = E.covertex
z.Ve = E.vertex
\end{tkzelements}
- \hspace*{\fill}
\begin{tikzpicture}
- \pgfkeys{/pgf/number format/.cd,fixed,precision=2}
+\pgfkeys{/pgf/number format/.cd,fixed,precision=2}
\tkzGetNodes
\tkzDrawCircles[teal](C,A)
\tkzDrawEllipse[red](C,\tkzUseLua{a},\tkzUseLua{b},\tkzUseLua{slope})
@@ -113,6 +95,28 @@ The first attributes are the three points that define the ellipse: : the \Iattr
\tkzLabelPoint[above right](Co){Covertex ; North}
\end{tikzpicture}
\end{minipage}
+
+\begin{Verbatim}
+\begin{tikzpicture}
+ \pgfkeys{/pgf/number format/.cd,fixed,precision=2}
+ \tkzGetNodes
+ \tkzDrawCircles[teal](C,A)
+ \tkzDrawEllipse[red](C,\tkzUseLua{a},\tkzUseLua{b},
+ \tkzUseLua{slope})
+ \tkzDrawPoints(C,A,B,b,W,S,F1,F2)
+ \tkzLabelPoints(C,A,B)
+ \tkzDrawLine[add = .5 and .5](A,W)
+ \tkzLabelSegment[pos=1.5,above,sloped](A,W){%
+ slope = \pgfmathprintnumber{\tkzUseLua{slope}}}
+ \tkzLabelPoint[below](S){South}
+ \tkzLabelPoint[below left](F1){Focus 1}
+ \tkzLabelPoint[below left](F2){Focus 2}
+ \tkzLabelPoint[above right](Ve){Vertex ; East}
+ \tkzLabelPoint[above right](Co){Covertex ; North}
+\end{tikzpicture}
+\end{Verbatim}
+
+
% \caption{Class Ellipse}
% subsection attributes_of_an_ellipse (end)
@@ -202,46 +206,7 @@ The function \Igfct{package}{tkzUseLua (variable)} is used to transfer values to
The first two points are the foci of the ellipse, and the third one is the vertex. We can deduce all the other characteristics from these points.
\emph{The function launches the |new| method, defining all the characteristics of the ellipse.}
-\begin{tkzelements}
- scale =1
- z.A = point: new (0 , 0)
- z.B = point: new (5 , 1)
- L.AB = line : new (z.A,z.B)
- z.C = point: new (.8 , 3)
- T.ABC = triangle: new (z.A,z.B,z.C)
- z.N = T.ABC.eulercenter
- z.H = T.ABC.orthocenter
- z.O = T.ABC.circumcenter
- _,_,z.Mc = get_points (T.ABC: medial ())
- L.euler = line: new (z.H,z.O)
- C.circum = circle: new (z.O,z.A)
- C.euler = circle: new (z.N,z.Mc)
- z.i,z.j = intersection (L.euler,C.circum)
- z.I,z.J = intersection (L.euler,C.euler)
- E = ellipse: foci (z.H,z.O,z.I)
- L.AH = line: new (z.A,z.H)
- z.X = intersection (L.AH,C.circum)
- L.XO = line: new (z.X,z.O)
- z.R,z.S = intersection (L.XO,E)
- a,b = E.Rx,E.Ry
- ang = math.deg(E.slope)
-\end{tkzelements}
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawPolygon(A,B,C)
-\tkzDrawCircles[cyan](O,A N,I)
-\tkzDrawSegments(X,R A,X)
-\tkzDrawEllipse[red](N,\tkzUseLua{a},\tkzUseLua{b},\tkzUseLua{ang})
-\tkzDrawLines[add=.2 and .5](I,H)
-\tkzDrawPoints(A,B,C,N,O,X,H,R,S,I)
-\tkzLabelPoints[above](C,X)
-\tkzLabelPoints[above right](N,O)
-\tkzLabelPoints[above left](R)
-\tkzLabelPoints[left](A)
-\tkzLabelPoints[right](B,I,S,H)
-\end{tikzpicture}
-\hspace*{\fill}
+\begin{minipage}{.5\textwidth}
\begin{Verbatim}
\begin{tkzelements}
z.A = point: new (0 , 0)
@@ -267,6 +232,50 @@ The first two points are the foci of the ellipse, and the third one is the verte
ang = math.deg(E.slope)
\end{tkzelements}
\end{Verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+ \begin{tkzelements}
+ scale =1
+ z.A = point: new (0 , 0)
+ z.B = point: new (5 , 1)
+ L.AB = line : new (z.A,z.B)
+ z.C = point: new (.8 , 3)
+ T.ABC = triangle: new (z.A,z.B,z.C)
+ z.N = T.ABC.eulercenter
+ z.H = T.ABC.orthocenter
+ z.O = T.ABC.circumcenter
+ _,_,z.Mc = get_points (T.ABC: medial ())
+ L.euler = line: new (z.H,z.O)
+ C.circum = circle: new (z.O,z.A)
+ C.euler = circle: new (z.N,z.Mc)
+ z.i,z.j = intersection (L.euler,C.circum)
+ z.I,z.J = intersection (L.euler,C.euler)
+ E = ellipse: foci (z.H,z.O,z.I)
+ L.AH = line: new (z.A,z.H)
+ z.X = intersection (L.AH,C.circum)
+ L.XO = line: new (z.X,z.O)
+ z.R,z.S = intersection (L.XO,E)
+ a,b = E.Rx,E.Ry
+ ang = math.deg(E.slope)
+ \end{tkzelements}
+ \hspace*{\fill}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygon(A,B,C)
+ \tkzDrawCircles[cyan](O,A N,I)
+ \tkzDrawSegments(X,R A,X)
+ \tkzDrawEllipse[red](N,\tkzUseLua{a},\tkzUseLua{b},\tkzUseLua{ang})
+ \tkzDrawLines[add=.2 and .5](I,H)
+ \tkzDrawPoints(A,B,C,N,O,X,H,R,S,I)
+ \tkzLabelPoints[above](C,X)
+ \tkzLabelPoints[above right](N,O)
+ \tkzLabelPoints[above left](R)
+ \tkzLabelPoints[left](A)
+ \tkzLabelPoints[right](B,I,S,H)
+ \end{tikzpicture}
+ \hspace*{\fill}
+\end{minipage}
+
\begin{Verbatim}
\begin{tikzpicture}
\tkzGetNodes
@@ -283,11 +292,7 @@ The first two points are the foci of the ellipse, and the third one is the verte
\tkzLabelPoints[left](A)
\tkzLabelPoints[right](B,I,S,H)
\end{tikzpicture}
-\end{Verbatim}
-
-
-
-
+ \end{Verbatim}
% subsubsection function_tkzname_ellipse__foci (end)
\subsubsection{Method \Imeth{ellipse}{point} and \Imeth{ellipse}{radii}} % (fold)
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-line.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-line.tex
index 741938eb66..435ad9bcc6 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-line.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-line.tex
@@ -181,6 +181,7 @@ Here's the list of methods for the \tkzNameObj{line} object. The results can be
\Imeth{line}{\_north\_pb(d)} &|z.M=L.AB:_north_pb(2)| &|BM=2|; $BM\perp BA$ ; $\overrightarrow{BA},\overrightarrow{BM}$ clockwise \\
\Imeth{line}{\_south\_pb(d)} &|z.M=L.AB:_south_pb(2)| &|BM=2|; $BM\perp BA$ ; $\overrightarrow{AB},\overrightarrow{AM}$ counterclockwise \\
\Imeth{line}{report(d,pt)} &|z.M=L.AB:report(2,z.N)| &|MN=2|; $AB\parallel MN$ ; Refer to ex. (\ref{ssub:method_report})\\
+\Imeth{line}{colinear\_at(pt,k)} &|z.D=L.AB:colinear_at(z.C,2)| &|CD=2AB|; $AB\parallel CD$ ; Refer to ex. (\ref{ssub:method_imeth_line_colinear__at})\\
\midrule
\textbf{Lines} &&\\
\midrule
@@ -229,7 +230,7 @@ Here's the list of methods for the \tkzNameObj{line} object. The results can be
\midrule
\Imeth{line}{circle ()} & |C.AB = L.AB : circle ()| & center pa through pb \\
\Imeth{line}{circle\_swap ()} & |C.BA = L.AB : circle_swap ()|& center pb through pa \\
-\Imeth{line}{apollonius (r)} & |C.apo = L.AB : apollonius (2)|& Ensemble des points tq. |MA/MB = 2| \\
+\Imeth{line}{apollonius (r)} & |C.apo = L.AB : apollonius (2)|& Set of points tq. |MA/MB = 2| \\
\midrule
\textbf{Transformations} &&\\
\midrule
@@ -248,7 +249,7 @@ Here's the list of methods for the \tkzNameObj{line} object. The results can be
\egroup
\end{minipage}
-\subsubsection{Method report} % (fold)
+\subsubsection{Method \Imeth{line}{report}} % (fold)
\label{ssub:method_report}
|report (d,pt)| If the point is absent, the transfer is made from the first point that defines the line.
@@ -289,7 +290,7 @@ z.O = L.AB : report (3)
\end{minipage}
% subsubsection method_report (end)
-\subsubsection{Triangle with two\_angles} % (fold)
+\subsubsection{Method \Imeth{line}{two\_angles} } % (fold)
\label{ssub:triangle_with_two__angles}
The angles are on either side of the given segment
@@ -332,7 +333,7 @@ The angles are on either side of the given segment
\end{minipage}
% subsubsection triangle_with_two__angles (end)
-\subsubsection{Triangle with three given sides} % (fold)
+\subsubsection{Method \Imeth{line}{sss}} % (fold)
\label{ssub:triangle_with_three_given_sides}
In the following example, a small difficulty arises. The given lengths are not affected by scaling, so it's necessary to use the \Igfct{math}{value (r) } function, which will modify the lengths according to the scale.
@@ -498,7 +499,7 @@ The side lengths are proportional to the lengths given in the table. They depend
\end{minipage}
% subsubsection about_triangles (end)
-\subsubsection{Method point }% (fold)
+\subsubsection{Method \Imeth{line}{point} }% (fold)
\label{ssub:method_point}
This method is very useful. It allows you to place a point on the line under consideration.
If |r = 0| then the point is |pa|, if |r = 1| it's |pb|.
@@ -544,9 +545,50 @@ This method exists for all objects except quadrilaterals.
\end{minipage}
% subsubsection method_point (end)
-\subsubsection{Normalize} % (fold)
-\label{ssub:normalize}
+\subsubsection{Method \Imeth{line}{colinear\_at}} % (fold)
+\label{ssub:method_imeth_line_colinear__at}
+If the coefficient is missing then it defaults to $1$ and in the following example we obtain: $CE=AB$ and $(AB)\parallel (CE)$. For point $D$: $CD = .5AB$ and $(AB)\parallel (CD)$.
+\begin{minipage}{.5\textwidth}
+\begin{Verbatim}
+\begin{tkzelements}
+ z.A = point: new (0 , 0)
+ z.B = point: new (4 , 0)
+ z.C = point: new (1 , 3)
+ L.AB = line : new (z.A,z.B)
+ z.D = L.AB : colinear_at (z.C,.5)
+ z.E = L.AB : colinear_at (z.C)
+\end{tkzelements}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawSegments(A,B C,E)
+ \tkzDrawPoints(A,B,C,D,E)
+ \tkzLabelPoints(A,B,C,D,E)
+\end{tikzpicture}
+\end{Verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+\begin{tkzelements}
+ z.A = point: new (0 , 0)
+ z.B = point: new (4 , 0)
+ z.C = point: new (1 , 3)
+ L.AB = line : new (z.A,z.B)
+ z.D = L.AB : colinear_at (z.C,.5)
+ z.E = L.AB : colinear_at (z.C)
+\end{tkzelements}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawSegments(A,B C,E)
+ \tkzDrawPoints(A,B,C,D,E)
+ \tkzLabelPoints(A,B,C,D,E)
+\end{tikzpicture}
+\end{minipage}
+
+% subsubsection method_imeth_line_colinear__at (end)
+
+
+\subsubsection{Method \Imeth{line}{normalize}} % (fold)
+\label{ssub:normalize}
\begin{minipage}{.4\textwidth}
\begin{Verbatim}
@@ -586,7 +628,7 @@ This method exists for all objects except quadrilaterals.
% subsubsection normalize (end)
-\subsubsection{Barycenter with a line} % (fold)
+\subsubsection{Method \Imeth{line}{barycenter}} % (fold)
\label{ssub:barycenter_with_a_line}
\begin{minipage}{.4\textwidth}
@@ -621,7 +663,7 @@ This method exists for all objects except quadrilaterals.
\end{minipage}
% subsubsection barycenter_with_a_line (end)
-\subsubsection{Example: new line from a defined line} % (fold)
+\subsubsection{method \Imeth{line}{ll\_from}} % (fold)
\label{ssub:new_line_from_a_defined_line}
\begin{minipage}{0.5\textwidth}
\begin{Verbatim}
@@ -673,7 +715,7 @@ _,z.E = get_points ( L.CD: ll_from (z.B))
% subsubsection new_line_from_a_defined_line (end)
-\subsubsection{Example: projection of several points} % (fold)
+\subsubsection{Method \Imeth{line}{projection}} % (fold)
\label{ssub:example_projection_of_several_points}
\begin{minipage}{0.5\textwidth}
\begin{Verbatim}
@@ -788,7 +830,7 @@ z.a,z.b = L.ab.pa,L.ab.pb
% subsubsection example_combination_of_methods (end)
-\subsubsection{Example: translation} % (fold)
+\subsubsection{Method \Imeth{line}{translation}} % (fold)
\label{ssub:example_translation}
\begin{minipage}{0.6\textwidth}
@@ -830,7 +872,7 @@ z.a,z.b = L.ab.pa,L.ab.pb
% subsubsection example_translation (end)
-\subsubsection{Example: distance and projection} % (fold)
+\subsubsection{Method \Imeth{line}{distance}} % (fold)
\label{ssub:example_distance_and_projection}
\begin{minipage}{0.5\textwidth}
@@ -876,7 +918,7 @@ z.a,z.b = L.ab.pa,L.ab.pb
% \caption{Method distance with line object}
% subsubsection example_distance_and_projection (end)
-\subsubsection{Reflection of object} % (fold)
+\subsubsection{Method \Imeth{line}{reflection} of an object} % (fold)
\label{ssub:reflection_of_object}
\begin{minipage}{.5\textwidth}
@@ -924,7 +966,7 @@ z.a,z.b = L.ab.pa,L.ab.pb
% subsubsection reflection_of_object (end)
-\subsection{Apollonius circle MA/MB = k} % (fold)
+\subsection{Method \Imeth{line}{apollonius} Apollonius circle MA/MB = k} % (fold)
\label{sub:apollonius_circle_ma_mb_k}
\begin{Verbatim}
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-point.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-point.tex
index 68c5a73e5a..e404dc763b 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-point.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-point.tex
@@ -605,6 +605,7 @@ Rotate a triangle by an angle of $\pi/6$ around $O$.
\begin{minipage}{.5\textwidth}
\begin{Verbatim}
\begin{tkzelements}
+ scale = .75
z.O = point : new ( -1 , -1 )
z.A = point : new ( 2 , 0 )
z.B = point : new ( 5 , 0 )
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-regular.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-regular.tex
index 2413a97d91..3ec9e777a6 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-regular.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-regular.tex
@@ -81,7 +81,7 @@ z.H = RP.five.proj
\bgroup
\catcode`_=12
\small
-\captionof{table}{Circle methods.}\label{regular:met}
+\captionof{table}{regular\_polygon methods.}\label{regular:met}
\begin{tabular}{ll}
\toprule
\textbf{Methods} & \textbf{Comments} \\
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-triangle.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-triangle.tex
index f54a53f39e..80b711e46f 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-triangle.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-triangle.tex
@@ -202,7 +202,9 @@ Through the Lemoine point draw lines parallel to the triangle's sides. The point
then lie on a circle known as the first Lemoine circle. } \\
\Imeth{triangle}{second\_lemoine\_circle ()} & Refer to example \ref{sub:antiparallel_through_lemoine_point}\\
\Imeth{triangle}{spieker\_circle ()} & The incircle of the medial triangle\\
-
+\Imeth{triangle}{cevian\_circle ()} & Circumscribed circle of a Cevian triangle Refer to (\ref{ssub:method_imeth_triangle_cevian})\\
+\Imeth{triangle}{pedal\_circle ()} & Circumscribed circle of the podar triangle Refer to (\ref{ssub:method_imeth_triangle_pedal})\\
+\Imeth{triangle}{conway\_circle ()} & Circumscribed circle of Conway points Refer to (\ref{ssub:method_imeth_triangle_conway})\\
\bottomrule
\end{tabular}
\end{minipage}
@@ -234,7 +236,8 @@ Remark: If you don't need to use the triangle object several times, you can obta
\Imeth{triangle}{tangential ()} & Triangle formed by the lines tangent to the circumcircle at the vertices\\
\Imeth{triangle}{feuerbach ()} & Triangle formed by the points of tangency of the euler circle with the excircles\\
\Imeth{triangle}{anti () }& Anticomplementary Triangle The given triangle is its medial triangle. \\
-\Imeth{triangle}{cevian (pt)} & Triangle formed with the endpoints of the three cevians with respect to |pt|.\\
+\Imeth{triangle}{cevian (pt)} & Triangle formed with the endpoints of the three cevians with respect to |pt|. refer to (\ref{ssub:method_imeth_triangle_cevian})\\
+\Imeth{triangle}{pedal (pt)} & Triangle formed by projections onto the sides of |pt| Refer to \ref{ssub:method_imeth_triangle_pedal}\\
\Imeth{triangle}{symmedian ()} & Triangle formed with the intersection points of the symmedians. \\
\Imeth{triangle}{euler ()} & Triangle formed with the euler points \\
\midrule
@@ -256,6 +259,171 @@ Remark: If you don't need to use the triangle object several times, you can obta
\egroup
% subsubsection methods_of_the_class_triangle (end)
+
+\subsubsection{Méthodes \Imeth{triangle}{cevian} et \Imeth{triangle}{cevian\_circle}} % (fold)
+\label{ssub:method_imeth_triangle_cevian}
+\begin{minipage}{.5\textwidth}
+\begin{Verbatim}
+\begin{tkzelements}
+ scale = 2
+ z.a = point: new (1,2)
+ z.b = point: new (5,1)
+ z.c = point: new (3,5)
+ T = triangle: new (z.a,z.b,z.c)
+ z.i = T.orthocenter
+ T.cevian = T : cevian (z.i)
+ z.ta,z.tb,z.tc = get_points (T.cevian)
+ C.cev = T : cevian_circle (z.i)
+ z.w = C.cev.center
+\end{tkzelements}
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawPolygons(a,b,c ta,tb,tc)
+\tkzDrawSegments(a,ta b,tb c,tc)
+\tkzDrawPoints(a,b,c,i,ta,tb,tc)
+\tkzLabelPoints(a,b,c,i)
+\tkzDrawCircles(w,ta)
+\end{tikzpicture}
+\end{Verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+\begin{tkzelements}
+scale = 2
+z.a = point: new (1,2)
+z.b = point: new (5,1)
+z.c = point: new (3,5)
+T = triangle: new (z.a,z.b,z.c)
+z.i = T.orthocenter
+T.cevian = T : cevian (z.i)
+z.ta,z.tb,z.tc = get_points (T.cevian)
+C.cev = T : cevian_circle (z.i)
+z.w = C.cev.center
+\end{tkzelements}
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawPolygons(a,b,c ta,tb,tc)
+\tkzDrawSegments(a,ta b,tb c,tc)
+\tkzDrawPoints(a,b,c,i,ta,tb,tc)
+\tkzLabelPoints(a,b,c,i)
+\tkzDrawCircles(w,ta)
+\end{tikzpicture}
+\end{minipage}
+% subsubsection method_imeth_triangle_cevian (end)
+
+
+\subsubsection{Méthodes \Imeth{triangle}{pedal} et \Imeth{triangle}{pedal\_circle}} % (fold)
+\label{ssub:method_imeth_triangle_pedal}
+
+\begin{minipage}{.5\textwidth}
+\begin{Verbatim}
+ \begin{tkzelements}
+ z.A = point: new(0,0)
+ z.B = point: new(5,0)
+ z.C = point: new(1.5,3)
+ z.O = point: new (2,1)
+ T.ABC = triangle: new (z.A,z.B,z.C)
+ T.pedal = T.ABC : pedal (z.O)
+ z.E,z.F,z.G = get_points(T.pedal)
+ C.pedal = T.ABC : pedal_circle (z.O)
+ z.w = C.pedal.center
+ z.T = C.pedal.through
+ \end{tkzelements}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygon(A,B,C)
+ \tkzDrawPolygon[red](E,F,G)
+ \tkzDrawCircle(w,T)
+ \tkzDrawPoints(A,B,C,E,F,G,O)
+ \tkzLabelPoints(A,B,C,E,F,G)
+ \tkzDrawSegments(O,E O,F O,G)
+ \end{tikzpicture}
+\end{Verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+ \begin{tkzelements}
+ z.A = point: new(0,0)
+ z.B = point: new(5,0)
+ z.C = point: new(1.5,3)
+ z.O = point: new (2,1)
+ T.ABC = triangle: new (z.A,z.B,z.C)
+ T.pedal = T.ABC : pedal (z.O)
+ z.E,z.F,z.G = get_points(T.pedal)
+ C.pedal = T.ABC : pedal_circle (z.O)
+ z.w = C.pedal.center
+ z.T = C.pedal.through
+ \end{tkzelements}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygon(A,B,C)
+ \tkzDrawPolygon[red](E,F,G)
+ \tkzDrawCircle(w,T)
+ \tkzDrawPoints(A,B,C,E,F,G,O)
+ \tkzLabelPoints(A,B,C,E,F,G)
+ \tkzDrawSegments(O,E O,F O,G)
+ \end{tikzpicture}
+\end{minipage}
+% subsubsection method_imeth_triangle_pedal (end)
+
+\subsubsection{Méthodes \Imeth{triangle}{conway\_points} et \Imeth{triangle}{conway\_circle}} % (fold)
+\label{ssub:method_imeth_triangle_conway}
+
+En géométrie plane, le théorème du cercle de Conway stipule que lorsque les côtés se rencontrant à chaque sommet d'un triangle sont prolongés par la longueur du côté opposé, les six points d'extrémité des trois segments de droite résultants se trouvent sur un cercle dont le centre est le centre d'incidence du triangle.
+
+\begin{minipage}{.5\textwidth}
+ \begin{Verbatim}
+ \begin{tkzelements}
+ z.A = point:new (0,0)
+ z.C = point:new (5,0)
+ z.B = point:new (1,3)
+ T.ABC = triangle : new (z.A,z.B,z.C)
+ C.conway = T.ABC : conway_circle ()
+ z.w,z.t = get_points(C.conway)
+ z.t1,z.t2,z.t3,z.t4,
+ z.t5,z.t6= T.ABC : conway_points ()
+ \end{tkzelements}
+ \hspace*{5cm}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygon(A,B,C)
+ \tkzDrawCircles(w,t)
+ \tkzDrawPoints(t1,t2,t3,t4,t5,t6)
+ \tkzLabelPoints(t1,t2,t3,t4,t5,t6)
+ \tkzDrawSegments[dashed](t1,A t2,A t3,B)
+ \tkzDrawSegments[dashed](t4,B t5,C t6,C)
+ \tkzMarkSegments(B,C t1,A t2,A)
+ \tkzMarkSegments[mark=||](A,C t3,B t4,B)
+ \tkzMarkSegments[mark=|||](A,B t5,C t6,C)
+ \end{tikzpicture}
+ \end{Verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+ \begin{tkzelements}
+ scale = .5
+ z.A = point:new (0,0)
+ z.C = point:new (5,0)
+ z.B = point:new (1,3)
+ T.ABC = triangle : new (z.A,z.B,z.C)
+ C.conway = T.ABC : conway_circle ()
+ z.w,z.t = get_points(C.conway)
+ z.t1,z.t2,z.t3,
+ z.t4,z.t5,z.t6= T.ABC : conway_points ()
+ \end{tkzelements}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygon(A,B,C)
+ \tkzDrawCircles(w,t)
+ \tkzDrawPoints(t1,t2,t3,t4,t5,t6)
+ \tkzLabelPoints(t1,t2,t3,t4,t5,t6)
+ \tkzDrawSegments[dashed](t1,A t2,A t3,B t4,B t5,C t6,C)
+ \tkzMarkSegments(B,C t1,A t2,A)
+ \tkzMarkSegments[mark=||](A,C t3,B t4,B)
+ \tkzMarkSegments[mark=|||](A,B t5,C t6,C)
+ \end{tikzpicture}
+\end{minipage}
+
+% subsubsection methode_imeth_triangle_conway (end)
+
+
\subsubsection{Euler line} % (fold)
\label{ssub:euler_line}
@@ -549,10 +717,61 @@ z.T2 = L.T2.pb
\tkzMarkSegments(B,E B,M B,F)
\end{tikzpicture}
\end{Verbatim}
+% subsection harmonic_division_and_bisector (end)
+
+\subsubsection{Method \Imeth{triangle}{cevan}} % (fold)
+\label{ssub:method_imeth_triangle_cevan}
+
+\begin{minipage}{.5\textwidth}
+ \begin{Verbatim}
+ \begin{tkzelements}
+ scale = 2
+ z.a = point: new (1,2)
+ z.b = point: new (5,1)
+ z.c = point: new (3,5)
+ T = triangle: new (z.a,z.b,z.c)
+ z.i = T.orthocenter
+ T.cevian = T : cevian (z.i)
+ z.ta,z.tb,z.tc = get_points (T.cevian)
+ C.cev = T : cevian_circle (z.i)
+ z.w = C.cev.center
+ \end{tkzelements}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygons(a,b,c ta,tb,tc)
+ \tkzDrawSegments(a,ta b,tb c,tc)
+ \tkzDrawPoints(a,b,c,i,ta,tb,tc)
+ \tkzLabelPoints(a,b,c,i)
+ \tkzDrawCircles(w,ta)
+ \end{tikzpicture}
+ \end{Verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+ \begin{tkzelements}
+ scale = 2
+ z.a = point: new (1,2)
+ z.b = point: new (5,1)
+ z.c = point: new (3,5)
+ T = triangle: new (z.a,z.b,z.c)
+ z.i = T.orthocenter
+ T.cevian = T : cevian (z.i)
+ z.ta,z.tb,z.tc = get_points (T.cevian)
+ C.cev = T : cevian_circle (z.i)
+ z.w = C.cev.center
+ \end{tkzelements}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygons(a,b,c ta,tb,tc)
+ \tkzDrawSegments(a,ta b,tb c,tc)
+ \tkzDrawPoints(a,b,c,i,ta,tb,tc)
+ \tkzLabelPoints(a,b,c,i)
+ \tkzDrawCircles(w,ta)
+ \end{tikzpicture}
+\end{minipage}
+% subsubsection method_imeth_triangle_cevan (end)
-% subsection harmonic_division_and_bisector (end)
% subsection methods_of_the_class_triangle (end)
% section class_triangle (end)
\endinput
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-examples.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-examples.tex
index 1b35c27263..4f46d4a127 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-examples.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-examples.tex
@@ -720,6 +720,7 @@ Same result using the function |T.ABC.ab : apollonius (k) |
\subsection{Orthogonal circle through} % (fold)
\label{sub:orthogonal_circle_through}
+\begin{minipage}{.5\textwidth}
\begin{Verbatim}
\begin{tkzelements}
z.O = point: new (0,1)
@@ -738,8 +739,8 @@ Same result using the function |T.ABC.ab : apollonius (k) |
\tkzLabelPoints[right](O,A,z1,z2,c)
\end{tikzpicture}
\end{Verbatim}
-
-\begin{tkzelements}
+\end{minipage}
+\begin{minipage}{.5\textwidth}\begin{tkzelements}
z.O = point: new (0,1)
z.A = point: new (1,0)
z.z1 = point: new (-1.5,-1.5)
@@ -748,7 +749,6 @@ Same result using the function |T.ABC.ab : apollonius (k) |
C = C.OA: orthogonal_through (z.z1,z.z2)
z.c = C.center
\end{tkzelements}
-
\hspace*{\fill}
\begin{tikzpicture}
\tkzGetNodes
@@ -758,6 +758,7 @@ Same result using the function |T.ABC.ab : apollonius (k) |
\tkzLabelPoints[right](O,A,z1,z2,c)
\end{tikzpicture}
\hspace*{\fill}
+\end{minipage}
% subsection orthogonal_circle_through (end)
\subsection{Divine ratio} % (fold)
@@ -1516,70 +1517,50 @@ z.O_0 = L.AB.mid
\begin{minipage}[t]{.4\textwidth}\vspace{0pt}%
\begin{Verbatim}
\begin{tkzelements}
- scale=.75
- z.A = point: new (0 , 0)
- z.B = point: new (4 , 0)
- z.D = point: new (12,0)
- L.AB = line : new (z.A,z.B)
- z.X = L.AB.north_pa
- L.XB = line : new (z.X,z.B)
- z.E = L.XB.mid
- L.DE = line : new (z.D,z.E)
- L.XA = line : new (z.X,z.A)
- z.F = intersection (L.DE,L.XA)
- L.AE = line : new (z.A,z.E)
- L.BF = line : new (z.B,z.F)
- z.G = intersection (L.AE,L.BF)
- L.XG = line : new (z.X,z.G)
-z.C = intersection (L.XG,L.AB)
+ scale=.75
+ z.A = point: new (0 , 0)
+ z.B = point: new (4 , 0)
+ z.G = point: new (2,2)
+ L.AG = line : new (z.A,z.G)
+ L.AB = line : new (z.A,z.B)
+ z.E = L.AG : colinear_at (z.B,.5)
+ L.GE = line : new (z.G,z.E)
+ z.D = intersection (L.GE,L.AB)
+ z.F = z.B : symmetry (z.E)
+ L.GF = line :new (z.G,z.F)
+ z.C = intersection (L.GF,L.AB)
\end{tkzelements}
\begin{tikzpicture}
- \tkzGetNodes
- \tkzDefPoints{0/0/A,4/0/B}
- \tkzDefPoints{2/2/G}
- \tkzDefLine[parallel=through B,K=.5](A,G) \tkzGetPoint{E}
- \tkzInterLL(G,E)(A,B) \tkzGetPoint{D}
- \tkzDefPointBy[symmetry= center B](E) \tkzGetPoint{F}
- \tkzInterLL(G,F)(A,B) \tkzGetPoint{C}
- \tkzDrawLines(A,D A,G F,E G,F G,D)
- \tkzDrawPoints(A,B,G,E,F,C,D)
- \tkzLabelPoints(A,B,G,E,F,C,D)
- \tkzMarkSegments(F,B B,E)
+ \tkzGetNodes
+ \tkzDrawLines(A,B A,G A,D A,G F,E G,F G,D)
+ \tkzDrawPoints(A,B,G,E,F,C,D)
+ \tkzLabelPoints(A,B,G,E,F,C,D)
+ \tkzMarkSegments(F,B B,E)
\end{tikzpicture}
\end{Verbatim}
\end{minipage}
\begin{minipage}[t]{.6\textwidth}\vspace{0pt}%
\begin{tkzelements}
-scale=.75
-z.A = point: new (0 , 0)
-z.B = point: new (4 , 0)
-z.D = point: new (12,0)
-L.AB = line : new (z.A,z.B)
-z.X = L.AB.north_pa
-L.XB = line : new (z.X,z.B)
-z.E = L.XB.mid
-L.DE = line : new (z.D,z.E)
-L.XA = line : new (z.X,z.A)
-z.F = intersection (L.DE,L.XA)
-L.AE = line : new (z.A,z.E)
-L.BF = line : new (z.B,z.F)
-z.G = intersection (L.AE,L.BF)
-L.XG = line : new (z.X,z.G)
-z.C = intersection (L.XG,L.AB)
+ scale=.75
+ z.A = point: new (0 , 0)
+ z.B = point: new (4 , 0)
+ z.G = point: new (2,2)
+ L.AG = line : new (z.A,z.G)
+ L.AB = line : new (z.A,z.B)
+ z.E = L.AG : colinear_at (z.B,.5)
+ L.GE = line : new (z.G,z.E)
+ z.D = intersection (L.GE,L.AB)
+ z.F = z.B : symmetry (z.E)
+ L.GF = line :new (z.G,z.F)
+ z.C = intersection (L.GF,L.AB)
\end{tkzelements}
\hspace*{\fill}
\begin{tikzpicture}
-\tkzGetNodes
-\tkzDefPoints{0/0/A,4/0/B}
-\tkzDefPoints{2/2/G}
-\tkzDefLine[parallel=through B,K=.5](A,G) \tkzGetPoint{E}
-\tkzInterLL(G,E)(A,B) \tkzGetPoint{D}
-\tkzDefPointBy[symmetry= center B](E) \tkzGetPoint{F}
-\tkzInterLL(G,F)(A,B) \tkzGetPoint{C}
-\tkzDrawLines(A,D A,G F,E G,F G,D)
-\tkzDrawPoints(A,B,G,E,F,C,D)
-\tkzLabelPoints(A,B,G,E,F,C,D)
-\tkzMarkSegments(F,B B,E)
+ \tkzGetNodes
+ \tkzDrawLines(A,B A,G A,D A,G F,E G,F G,D)
+ \tkzDrawPoints(A,B,G,E,F,C,D)
+ \tkzLabelPoints(A,B,G,E,F,C,D)
+ \tkzMarkSegments(F,B B,E)
\end{tikzpicture}
\hspace*{\fill}
\end{minipage}
@@ -1590,22 +1571,22 @@ z.C = intersection (L.XG,L.AB)
\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
\begin{Verbatim}
\begin{tkzelements}
- scale = .5
- z.A = point: new (0 , 0)
- z.B = point: new (6 , 0)
- z.D = point: new (12 , 0)
- L.AB = line: new (z.A,z.B)
- z.X = L.AB.north_pa
- L.XB = line: new (z.X,z.B)
- z.E = L.XB.mid
- L.ED = line: new (z.E,z.D)
- L.AX = line: new (z.A,z.X)
- L.AE = line: new (z.A,z.E)
- z.F = intersection (L.ED,L.AX)
- L.BF = line: new (z.B,z.F)
- z.G = intersection (L.AE,L.BF)
- L.GX = line: new (z.G,z.X)
- z.C = intersection (L.GX,L.AB)
+scale = .5
+z.A = point: new (0 , 0)
+z.B = point: new (6 , 0)
+z.D = point: new (12 , 0)
+L.AB = line: new (z.A,z.B)
+z.X = L.AB.north_pa
+L.XB = line: new (z.X,z.B)
+z.E = L.XB.mid
+L.ED = line: new (z.E,z.D)
+L.AX = line: new (z.A,z.X)
+L.AE = line: new (z.A,z.E)
+z.F = intersection (L.ED,L.AX)
+L.BF = line: new (z.B,z.F)
+z.G = intersection (L.AE,L.BF)
+L.GX = line: new (z.G,z.X)
+z.C = intersection (L.GX,L.AB)
\end{tkzelements}
\begin{tikzpicture}
\tkzGetNodes
@@ -2015,7 +1996,7 @@ z.H = L.OOp : projection (z.X)
\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
\begin{Verbatim}
\begin{tkzelements}
- scale = .25
+ scale = .5
z.A = point: new (0,0)
z.B = point: new (6,0)
z.C = point: new (0.8,4)
@@ -2039,7 +2020,8 @@ z.H = L.OOp : projection (z.X)
\end{tikzpicture}
\end{Verbatim}
\end{minipage}
-\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
+
+
\begin{tkzelements}
scale = .5
z.A = point: new (0,0)
@@ -2066,7 +2048,7 @@ z.H = L.OOp : projection (z.X)
\tkzLabelPoints(A,B,C)
\end{tikzpicture}
\hspace*{\fill}
-\end{minipage}
+
% subsection radical_circle (end)
\subsection{Euler ellipse} % (fold)
@@ -2112,44 +2094,44 @@ _,z.W = intersection (L.ZO,E)
\begin{minipage}{.4\textwidth}
\begin{Verbatim}
\begin{tkzelements}
- scale = 1.3
- z.A = point: new (0 , 0)
- z.B = point: new (5 , 1)
- L.AB = line : new (z.A,z.B)
- z.C = point: new (.8 , 3)
- T.ABC = triangle: new (z.A,z.B,z.C)
- z.N = T.ABC.eulercenter
- z.G = T.ABC.centroid
- z.O = T.ABC.circumcenter
- z.H = T.ABC.orthocenter
+ scale = 1.3
+ z.A = point: new (0 , 0)
+ z.B = point: new (5 , 1)
+ L.AB = line : new (z.A,z.B)
+ z.C = point: new (.8 , 3)
+ T.ABC = triangle: new (z.A,z.B,z.C)
+ z.N = T.ABC.eulercenter
+ z.G = T.ABC.centroid
+ z.O = T.ABC.circumcenter
+ z.H = T.ABC.orthocenter
z.Ma,z.Mb,
- z.Mc = get_points (T.ABC : medial ())
+ z.Mc = get_points(T.ABC:medial ())
z.Ha,z.Hb,
- z.Hc = get_points (T.ABC : orthic ())
+ z.Hc = get_points(T.ABC:orthic ())
z.Ea,z.Eb,
- z.Ec = get_points (T.ABC: extouch())
- L.euler = T.ABC : euler_line ()
- C.circum = T.ABC : circum_circle ()
- C.euler = T.ABC : euler_circle ()
- z.I,z.J = intersection (L.euler,C.euler)
- E = ellipse: foci (z.H,z.O,z.I)
- a = E.Rx
- b = E.Ry
- ang = math.deg(E.slope)
- L.AH = line: new (z.A,z.H)
- L.BH = line: new (z.B,z.H)
- L.CH = line: new (z.C,z.H)
- z.X = intersection (L.AH,C.circum)
- _,z.Y = intersection (L.BH,C.circum)
- _,z.Z = intersection (L.CH,C.circum)
- L.BC = line: new (z.B,z.C)
- L.XO = line: new (z.X,z.O)
- L.YO = line: new (z.Y,z.O)
- L.ZO = line: new (z.Z,z.O)
- z.x = intersection (L.BC,L.XO)
- z.U = intersection (L.XO,E)
- _,z.V = intersection (L.YO,E)
- _,z.W = intersection (L.ZO,E)
+ z.Ec = get_points(T.ABC:extouch())
+ L.euler = T.ABC : euler_line ()
+ C.circum = T.ABC : circum_circle ()
+ C.euler = T.ABC : euler_circle ()
+ z.I,z.J = intersection (L.euler,C.euler)
+ E = ellipse: foci (z.H,z.O,z.I)
+ a = E.Rx
+ b = E.Ry
+ ang = math.deg(E.slope)
+ L.AH = line: new (z.A,z.H)
+ L.BH = line: new (z.B,z.H)
+ L.CH = line: new (z.C,z.H)
+ z.X = intersection (L.AH,C.circum)
+ _,z.Y = intersection (L.BH,C.circum)
+ _,z.Z = intersection (L.CH,C.circum)
+ L.BC = line: new (z.B,z.C)
+ L.XO = line: new (z.X,z.O)
+ L.YO = line: new (z.Y,z.O)
+ L.ZO = line: new (z.Z,z.O)
+ z.x = intersection (L.BC,L.XO)
+ z.U = intersection (L.XO,E)
+ _,z.V = intersection (L.YO,E)
+ _,z.W = intersection (L.ZO,E)
\end{tkzelements}
\end{Verbatim}
\end{minipage}
@@ -2169,7 +2151,6 @@ _,z.W = intersection (L.ZO,E)
\tkzDrawPoints(A,B,C,N,G,H,O,X,Y,Z,Ma,Mb,Mc,Ha,Hb,Hc)
\tkzDrawEllipse[blue](N,\tkzUseLua{a},\tkzUseLua{b},\tkzUseLua{ang})
\end{tikzpicture}
-\hspace*{\fill}
\end{minipage}
\begin{Verbatim}
@@ -3539,24 +3520,24 @@ z.Cp,_ = intersection (L.GD,C.xD)
\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
\begin{Verbatim}
- \begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawCircles(O,B)
- \tkzDrawCircles[cyan](P,B)
- \tkzDrawCircles[red](w,E)
- \tkzDrawCircles[new](x,F)
- \tkzDrawSegments(A,G E,G C,G)
- \tkzDrawPolygons[new](A,E,C A',E',C')
- \tkzDrawPoints(A,...,G,A',E',C',O,P)
- \begin{scope}[font=\scriptsize]
- \tkzLabelPoints(A,...,F)
- \tkzLabelPoints[above left](G,A',E',C')
- \tkzLabelCircle[left](O,B)(30){$(\beta)$}
- \tkzLabelCircle[below](P,A)(40){$(\gamma)$}
- \tkzLabelCircle[right](w,C)(90){$(\alpha)$}
- \tkzLabelCircle[left](x,B)(-230){$((\delta))$}
- \end{scope}
- \end{tikzpicture}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircles(O,B)
+ \tkzDrawCircles[cyan](P,B)
+ \tkzDrawCircles[red](w,E)
+ \tkzDrawCircles[new](x,F)
+ \tkzDrawSegments(A,G E,G C,G)
+ \tkzDrawPolygons[new](A,E,C A',E',C')
+ \tkzDrawPoints(A,...,G,A',E',C',O,P)
+ \begin{scope}[font=\scriptsize]
+ \tkzLabelPoints(A,...,F)
+ \tkzLabelPoints[above left](G,A',E',C')
+ \tkzLabelCircle[left](O,B)(30){$(\beta)$}
+ \tkzLabelCircle[below](P,A)(40){$(\gamma)$}
+ \tkzLabelCircle[right](w,C)(90){$(\alpha)$}
+ \tkzLabelCircle[left](x,B)(-230){$((\delta))$}
+ \end{scope}
+\end{tikzpicture}
\end{Verbatim}
\end{minipage}
\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
@@ -3639,7 +3620,6 @@ L.TA = C.wE : tangent_at (z.A)
L.TC = C.xE : tangent_at (z.C)
z.I = intersection (L.TA,L.TC)
\end{tkzelements}
-
\hspace*{\fill}
\begin{tikzpicture}
\tkzGetNodes
@@ -3652,6 +3632,7 @@ z.I = intersection (L.TA,L.TC)
\tkzLabelPoints[above right](E,F)
\tkzLabelPoints[below](C)
\end{tikzpicture}
+\hspace*{\fill}
\end{minipage}
% subsection three_tangents (end)
@@ -3802,7 +3783,7 @@ z.B = point: new (5,1)
z.C = point: new (2,3)
T = triangle: new (z.A,z.B,z.C)
z.O = T.circumcenter
-z.o,z.w = get_points (T : first_lemoine_circle ())
+z.o,z.w = get_points(T:first_lemoine_circle())
z.L = T : lemoine_point ()
\end{tkzelements}
\hspace*{\fill}
@@ -3813,7 +3794,6 @@ z.L = T : lemoine_point ()
\tkzLabelPoints(A,B,C,o,w,O,L)
\tkzDrawCircles(o,w O,A)
\end{tikzpicture}
-\hspace*{\fill}
\end{minipage}
% subsection first_lemoine_circle (end)
@@ -4233,61 +4213,10 @@ z.Xip,z.Yip,z.Zip = C.ins : inversion (z.xi,z.yi,z.zi)
\tkzLabelPoints(A,B,C,E,F,G)
\end{tikzpicture}
\end{Verbatim}
-
-
% subsection soddy_circle_with_function (end)
-\subsubsection{Pappus chain} % (fold)
-\label{ssub:pappus_chain}
- Soit le point $D$ appartenant à la droite $(AC)$ tel que
- \[ DB \cdot DA = AC^2\]
- alors $B$ est l'image de $D$ dans l'inversion de centre $A$ et puissance $AC^2$.
- Les demi-cercles de diamètre $[AB]$ et$[AC]$ passent par le pôle $A$. Ils ont pour images les demi-droites $\mathcal{L'}$ et $\mathcal{L}$.
-
-Les cercles de centre $J_i$ et de diamètre $S_iT_i$ ont pour images les cercles de diamètre $S'_iT'_i$.
-
- \pgfmathsetmacro{\xB}{6}%
- \pgfmathsetmacro{\xC}{9}%
- \pgfmathsetmacro{\xD}{(\xC*\xC)/\xB}%
- \pgfmathsetmacro{\xJ}{(\xC+\xD)/2}%
- \pgfmathsetmacro{\r}{\xD-\xJ}%
- \pgfmathsetmacro{\nc}{2}%
-
-\begin{tikzpicture}[scale=1,ultra thin]
- \tkzDefPoints{0/0/A,\xB/0/B,\xC/0/C,\xD/0/D}
- \tkzDefPointBy[rotation = center C angle -90](B) \tkzGetPoint{c}
- \tkzDefPointBy[rotation = center A angle 90](C) \tkzGetPoint{a}
- \tkzDefPointBy[rotation = center D angle -90](C) \tkzGetPoint{d}
- \tkzDrawLines[add=0 and 2.25](C,c)
- \tkzDrawLines[add=0 and 1.5](D,d)
- \tkzDefCircle[diameter](A,C) \tkzDrawSemiCircle(tkzPointResult,C)
- \tkzDefCircle[diameter](A,B) \tkzDrawSemiCircle(tkzPointResult,B)
- \tkzDefCircle[diameter](B,C) \tkzDrawSemiCircle(tkzPointResult,C)
- \tkzDefCircle[diameter](C,D) \tkzDrawSemiCircle(tkzPointResult,D)
- \tkzDrawArc[red](A,C)(a)
- \tkzDrawPoints(A,B,C,D)
- \tkzLabelPoints(A,B,C,D)
- \tkzLabelLine[left,pos=3](C,c){$\mathcal{L}$}
- \tkzLabelLine[right,pos=2.5](D,d){$\mathcal{L'}$}
- \foreach \i in {1,...,\nc}
-{\tkzDefPoint(\xJ,2*\r*\i){J}
- \tkzDefPoint(\xJ,2*\r*\i-\r){H}
- \tkzDefCircleBy[inversion = center A through C](J,H)\tkzGetPoints{J'}{H'}
- \tkzInterLC(A,J)(J,H) \tkzGetPoints{S}{T}
- \tkzDefPointsBy[inversion = center A through C](S,T){S',T'}
- \tkzDrawCircle(J,H)
- \tkzDefCircle[diameter](S',T') \tkzGetPoint{I'}
- \tkzDrawCircle(I',T')
- \tkzDrawLines[dashed,add = 0 and .15](A,T A,S A,H)
- \tkzDrawPoints(J,H,H',S,S',T,T')
- \tkzLabelPoint(J){$J_\i$}
- \tkzLabelPoint(S){$S_\i$}
- \tkzLabelPoint(T){$T_\i$}
- \tkzLabelPoint(H){$H_\i$}
- \tkzLabelPoint(S'){$S'_\i$}
- \tkzLabelPoint(T'){$T'_\i$}
- \tkzLabelPoint(H'){$H'_\i$}}
-\end{tikzpicture}
+\subsection{Pappus chain} % (fold)
+\label{sub:pappus_chain}
\begin{tkzelements}
scale =.75
@@ -4374,7 +4303,7 @@ Les cercles de centre $J_i$ et de diamètre $S_iT_i$ ont pour images les cercles
\end{tikzpicture}
\vfill
\end{minipage}
-% subsubsection pappus_chain (end)
+% subsection pappus_chain (end)
\subsection{Three Circles} % (fold)
\label{sub:three_circles}
@@ -4449,7 +4378,7 @@ z.O_2 = L.CB.mid
C.O0B = circle: new ( z.O_0, z.B)
C.O1C = circle: new ( z.O_1, z.C)
C.O2B = circle: new ( z.O_2, z.B)
-z.M_0 = C.O1C : external_similitude (C.O2B)
+z.M_0 = C.O1C:external_similitude(C.O2B)
L.O0C = line:new(z.O_0,z.C)
T.golden = L.O0C : golden ()
z.L = T.golden.pc
@@ -4488,7 +4417,7 @@ z.D_2,z.E_2,z.F_2,z.G_2 = z.M_0 : homothety (kk,z.D_1,z.E_1,z.F_1,z.G_1)
C.O0B = circle: new ( z.O_0, z.B)
C.O1C = circle: new ( z.O_1, z.C)
C.O2B = circle: new ( z.O_2, z.B)
- z.M_0 = C.O1C : external_similitude (C.O2B)
+ z.M_0 = C.O1C:external_similitude(C.O2B)
L.O0C = line:new(z.O_0,z.C)
T.golden = L.O0C : golden ()
z.L = T.golden.pc
@@ -4514,6 +4443,7 @@ z.D_2,z.E_2,z.F_2,z.G_2 = z.M_0 : homothety (kk,z.D_1,z.E_1,z.F_1,z.G_1)
\end{Verbatim}
\end{minipage}
\begin{minipage}{.5\textwidth}
+ \hfill
\begin{tikzpicture}[scale=.7]
\tkzGetNodes
\tkzDrawPolygon[red](O_2,O_0,I,D,H)
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-main.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-main.tex
index cd967f1af0..55608bb26b 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-main.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-main.tex
@@ -1,7 +1,7 @@
% !TEX TS-program = lualatex
% encoding : utf8
-% Documentation of tkz-elements v2.20c
-% Copyright 2023 Alain Matthes
+% Documentation of tkz-elements v2.25c
+% Copyright 2024 Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
@@ -21,10 +21,10 @@
headings = small
]{tkz-doc}
\gdef\tkznameofpack{tkz-elements}
-\gdef\tkzversionofpack{2.20c}
+\gdef\tkzversionofpack{2.25c}
\gdef\tkzdateofpack{\today}
\gdef\tkznameofdoc{tkz-elements.pdf}
-\gdef\tkzversionofdoc{2.20c}
+\gdef\tkzversionofdoc{2.25c}
\gdef\tkzdateofdoc{\today}
\gdef\tkzauthorofpack{Alain Matthes}
\gdef\tkzadressofauthor{}
@@ -33,11 +33,12 @@
\gdef\tkzengine{lualatex}
\gdef\tkzurlauthorcom{http://altermundus.fr}
\nameoffile{\tkznameofpack}
+
% -- Packages ---------------------------------------------------
\usepackage[dvipsnames,svgnames]{xcolor}
\usepackage{calc}
\usepackage{tkz-base}
-\usepackage{tkz-euclide}
+\usepackage[mini]{tkz-euclide}
\usepackage{tkz-elements}
\usepackage{pgfornament}
\usetikzlibrary{backgrounds}
@@ -144,6 +145,7 @@ sharp corners
\newcommand*{\IEmacro}[1]{\index{#1_1@\texttt{\textbackslash#1}}\texttt{#1}}
\newcommand*{\tkzimpbf}[1]{\texttt{\textbf{#1}}}
\newcommand*{\tkzEHand}{\textcolor{red}{\lefthand}}
+\newcommand*{\ItkzPopt}[2]{\texttt{#2}\index{#1_3@\texttt{#1: options}!\texttt{#2}}}
%<--------------------------------------------------------------------------->
% settings styles
@@ -181,8 +183,7 @@ sharp corners
This document compiles some notes about \tkzname{\tkznameofpack}, the initial version of a \code{Lua} library designed to perform all the necessary calculations for defining objects in Euclidean geometry figures. Your document must be compiled using Lua\LaTeX.\\
With \pkg{tkz-elements}, definitions and calculations are exclusively conducted using \pkg{Lua}. \\
The primary programming approach offered is oriented towards \code{object programming}, utilizing object classes such as point, line, triangle, circle, and ellipse. Currently, after the calculations are completed, \pkg{tkz-euclide} or \pkg{TikZ} is used for drawing purposes.\\
- I discovered Lua and object-oriented programming while developing this package, so it's highly likely that I've made a few mistakes. If you'd like to contribute to the development of this package or provide advice on how to proceed, please contact me via email. \\
-Please note: English is not my native language, so there may be some errors."
+ I discovered Lua and object-oriented programming while developing this package, so it's highly likely that I've made a few mistakes. If you'd like to contribute to the development of this package or provide advice on how to proceed, please contact me via email.
}
\presentation
@@ -197,8 +198,8 @@ Special thanks to \tkzimp{Wolfgang Büchel} for his invaluable contribution in c
\href{http://mathworld.wolfram.com/about/author.html}{MathWorld}.
\vspace*{12pt}
-\lefthand\ You can find some examples on my site:
-\href{http://altermundus.fr}{altermundus.fr}. \hspace{2cm} under construction!
+\lefthand\ You can find some examples on my site and a french documentation:
+\href{http://altermundus.fr}{altermundus.fr}.
\vfill
Please report typos or any other comments to this documentation to: \href{mailto:al.ma@mac.com}{\textcolor{blue}{Alain Matthes}}.
@@ -248,7 +249,6 @@ Project Public License Distributed from \href{http://www.ctan.org/}{CTAN}\ arch
|r| denotes a real number, |cx| complex number, |d| a positive real number, |n| an integer, |an| an angle, |b| a boolean, |s| a character string, |pt| a point, |t| a table, |m| a matrix, |v| variable, |L| a straight line, |C| a circle, |T| a triangle, |E| an ellipse, |V| a vector,|Q| a quadrilateral, |P| a parallelogram, |R| a rectangle, |S| a square, |RP| a regular polygon, |M| a matrix, |O| an object (pt, L,C,T), . . a list of points or an object, < > optional argument.
\begin{multicols}{3}
-
\fbox{\textbf{point}}\\
\textbf{Attributes} table(\ref{point:att}) \\
|re -> r| \\
@@ -320,7 +320,9 @@ Project Public License Distributed from \href{http://www.ctan.org/}{CTAN}\ arch
|_south_pa (d) -> pt| \\
|_south_pb (d) -> pt| \\
|_east (d) -> pt| \\
-|_west (d) -> pt| \\
+|_west (d) -> pt| \\
+|report (r,pt) -> pt| \\
+|colinear_at (pt,k) -> pt| \\
|translation (...) -> O| \\
|projection (...) -> O| \\
|reflection (...) -> O| \\
@@ -348,7 +350,6 @@ Project Public License Distributed from \href{http://www.ctan.org/}{CTAN}\ arch
|sublime () -> T| \\
|egyptian () -> T| \\
|square (<swap>) -> T| \\
-|report (r,pt) -> T| \\
\\
\fbox{\textbf{triangle}} \\
\textbf{Attributes} table(\ref{triangle:att}) \\
@@ -387,6 +388,7 @@ Project Public License Distributed from \href{http://www.ctan.org/}{CTAN}\ arch
|nine_points () -> pt| \\
|point (t) -> pt| \\
|soddy_center () -> pt| \\
+|conway_points () -> pts| \\
|euler_line () -> L| \\
|symmedian_line (n) -> L| \\
|altitude (n) -> L| \\
@@ -401,6 +403,9 @@ Project Public License Distributed from \href{http://www.ctan.org/}{CTAN}\ arch
|second_lemoine_circle() -> C| \\
|spieker_circle() -> C| \\
|soddy_circle () -> C| \\
+|conway_circle () -> C| \\
+|pedal_circle () -> C| \\
+|cevian_circle () -> C| \\
|orthic() -> T| \\
|medial() -> T| \\
|incentral() -> T| \\
@@ -414,6 +419,7 @@ Project Public License Distributed from \href{http://www.ctan.org/}{CTAN}\ arch
|cevian (pt) -> T| \\
|symmedian () -> T| \\
|euler () -> T| \\
+|pedal (pt) -> T| \\
|projection (pt) -> pt,pt,pt| \\
|parallelogram () -> pt| \\
|area () -> d| \\
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-organization.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-organization.tex
index 13b17d6a5d..1778a7c8fb 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-organization.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-organization.tex
@@ -5,6 +5,7 @@ Here's a sample organization.
The line |% !TEX TS-program = lualatex| ensures that you compile with Lua\LATEX{}. The \code{standalone} class is useful, as all you need to do here is create a figure.
+You can load \tkzname{tkz-euclide} in three different ways. The simplest is |\usepackage[mini]{tkz-euclide}| and you have full access to the package. You also have the option to use the \ItkzPopt{tkz-euclide}{lua} option. This will allow you, if you want to perform calculations outside of \tkzname{\tkznameofpack}, to obtain them using \code{lua}. Finally, the recommended method is to use the \ItkzPopt{tkz-euclide}{mini} option. This allows you to load only the modules necessary for drawing. You can still optionally draw using \TIKZ.
The package \pkg{ifthen} is useful if you need to use some Boolean.
@@ -25,7 +26,7 @@ A third advantage is that the code can be reused.
% Created by Alain Matthes on 2024-01-09.
\documentclass[margin = 12pt]{standalone}
-\usepackage{tkz-euclide}
+\usepackage[mini]{tkz-euclide}
\usepackage{tkz-elements,ifthen}
\begin{document}
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-presentation.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-presentation.tex
index 2687f9debe..f0689fcc74 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-presentation.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-presentation.tex
@@ -148,7 +148,8 @@ C.QA = circle: new ( z.Q, z.A)
z.P_0 = intersection (C.PC,C.AB) -- search for intersections of two circles.
z.P_1 = intersection (C.PC,C.AC) -- idem
_,z.P_2 = intersection (C.QA,C.CB) -- idem
-z.O_3 = triangle: new ( z.P_0, z.P_1, z.P_2).circumcenter -- circumcenter attribute of “triangle”
+z.O_3 = triangle: new ( z.P_0, z.P_1, z.P_2).circumcenter
+ -- circumcenter attribute of “triangle”
\end{tkzelements}
\end{Verbatim}
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-structure.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-structure.tex
index 15b167a793..d1958d4763 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-structure.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-structure.tex
@@ -1,6 +1,6 @@
\section{Structure} % (fold)
\label{sec:structure}
-\tkzNamePack{tkz-elements.sty} loads the \tkzNamePack{luacode} package to create the \tkzNameEnv{tkzelements} environment, which is based on the \tkzNameEnv{luacode} environment.
+\tkzNamePack{tkz-elements} loads the \tkzNamePack{luacode} package to create the \tkzNameEnv{tkzelements} environment, which is based on the \tkzNameEnv{luacode} environment.
Within the \tkzNameEnv{tkzelements} environment, the scale is initialized to 1, and then all values in various tables are cleared.
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-transfers.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-transfers.tex
index a66f493604..264097e9b8 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-transfers.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-transfers.tex
@@ -2,7 +2,7 @@
\newpage
\section{Transfers} % (fold)
\label{sec:transfers}
-\subsection{Fom Lua to tkz-euclide or TikZ} % (fold)
+\subsection{From Lua to tkz-euclide or TikZ} % (fold)
\label{sub:fom_lua_to_tkz_euclide_or_tikz}
In this section, we'll explore how to transfer points, Booleans, and numerical values.
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-transferts.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-transferts.tex
deleted file mode 100644
index 39d5940e72..0000000000
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-transferts.tex
+++ /dev/null
@@ -1,150 +0,0 @@
-
-\newpage
-\section{Transfers} % (fold)
-\label{sec:transfers}
-\subsection{Fom Lua to tkz-euclide or TikZ} % (fold)
-\label{sub:fom_lua_to_tkz_euclide_or_tikz}
-
-In this section, we'll look at how to transfer points, Booleans and numerical values.
-
-\subsubsection{Points transfer} % (fold)
-\label{ssub:points_transfer}
-We use an environment \tkzname{tkzelements} outside an environment \tkzname{tikzpicture} which allows us to carry out all the necessary calculations, then we launch the macro \Imacro{tkzGetNodes} which transforms the affixes of the table \tkzname{z} into \tkzname{Nodes}. It only remains to draw.
-
-Currently the drawing program is either \TIKZ\ or \pkg{tkz-euclide}. You have the possibility to use another package to trace but for that you have to create a macro similar to \tkzcname{tkzGetNodes}. Of course, this package must be able to store the points as does \TIKZ\ or \pkg{tkz-euclide}.
-
-\vspace*{1em}
-
-\begin{mybox}
-\begin{verbatim}
-\def\tkzGetNodes{\directlua{%
- for K,V in pairs(z) do
- local n,sd,ft
- n = string.len(K)
- if n >1 then
- _,_,ft, sd = string.find( K , "(.+)(.)" )
- if sd == "p" then K=ft.."'" end
- _,_,xft, xsd = string.find( ft , "(.+)(.)" )
- if xsd == "p" then K=xft.."'".."'" end
- end
- tex.print("\\coordinate ("..K..") at ("..V.re..","..V.im..") ;\\\\")
-end}
-}
-\end{verbatim}
-\end{mybox}
-See the section In-depth Study \ref{sec:in_depth_study} for an explanation of the previous code.
-
-The environment \tkzNameEnv{tkzelements} allows to use the underscore |_| and the macro \tkzcname{tkzGetNodes} allows to obtain names of nodes containing \tkzname{prime} or \tkzname{double prime}. (see the next example)
-
-\begin{minipage}{0.5\textwidth}
-\begin{verbatim}
-\begin{tkzelements}
- scale = 1.2
- z.o = point: new (0,0)
- z.a_1 = point: new (2,1)
- z.a_2 = point: new (1,2)
- z.ap = z.a_1 + z.a_2
- z.app = z.a_1 - z.a_2
-\end{tkzelements}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawSegments(o,a_1 o,a_2 o,a' o,a'')
- \tkzDrawSegments[red](a_1,a' a_2,a')
- \tkzDrawSegments[blue](a_1,a'' a_2,a'')
- \tkzDrawPoints(a_1,a_2,a',o,a'')
- \tkzLabelPoints(o,a_1,a_2,a',a'')
-\end{tikzpicture}
-\end{verbatim}
-\end{minipage}
-\begin{minipage}{0.5\textwidth}
-\begin{tkzelements}
- scale = 1.2
- z.o = point: new (0,0)
- z.a_1 = point: new (2,1)
- z.a_2 = point: new (1,2)
- z.ap = z.a_1 + z.a_2
- z.app = z.a_1 - z.a_2
-\end{tkzelements}
-\hspace{\fill}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawSegments(o,a_1 o,a_2 o,a' o,a'')
- \tkzDrawSegments[red](a_1,a' a_2,a')
- \tkzDrawSegments[blue](a_1,a'' a_2,a'')
- \tkzDrawPoints(a_1,a_2,a',o,a'')
- \tkzLabelPoints(o,a_1,a_2,a',a'')
-\end{tikzpicture}
-\hspace{\fill}
-\end{minipage}%
-
-\newpage
-% subsection fom_lua_to_tkz_euclide_or_tikz (end)
-\subsubsection{Other transfers} % (fold)
-\label{ssub:other_transfers}
-
-Sometimes it's useful to transfer angle, length measurements or boolean. For this purpose, I have created the macro (see \ref{sub:transfer_from_lua_to_tex})
-\IEmacro{tkzUseLua(value)}
-
-\begin{verbatim}
-\begin{tkzelements}
- z.b = point: new (1,1)
- z.a = point: new (4,2)
- z.c = point: new (2,2)
- z.d = point: new (5,2)
- L.ab = line : new (z.a,z.b)
- L.cd = line : new (z.c,z.d)
- det = (z.b-z.a)^(z.d-z.c)
- if det == 0 then bool = true
- else bool = false
- end
- x = intersection (L.ab,L.cd)
-\end{tkzelements}
-
-The intersection of the two lines lies at
- a point whose affix is:\tkzUseLua{x}
-
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawPoints(a,...,d)
- \ifthenelse{\equal{\tkzUseLua{bool}}{true}}{
- \tkzDrawSegments[red](a,b c,d)}{%
- \tkzDrawSegments[blue](a,b c,d)}
- \tkzLabelPoints(a,...,d)
-\end{tikzpicture}
-\end{verbatim}
-
- \begin{tkzelements}
- z.b = point: new (1,1)
- z.a = point: new (4,2)
- z.c = point: new (2,2)
- z.d = point: new (5,1)
- L.ab = line : new (z.a,z.b)
- L.cd = line : new (z.c,z.d)
- det = (z.b-z.a)^(z.d-z.c)
- if det == 0 then bool = true
- else bool = false
- end
- x = intersection (L.ab,L.cd)
- \end{tkzelements}
-
- The intersection of the two lines lies at
- a point whose affix is: \tkzUseLua{x}
-
-\vspace{1em}
-\hspace{\fill}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzInit[xmin =-1,ymin=-1,xmax=6,ymax=3]
- \tkzGrid\tkzAxeX\tkzAxeY
- \tkzDrawPoints(a,...,d)
- \ifthenelse{\equal{\tkzUseLua{bool}}{true}}{
- \tkzDrawSegments[red](a,b c,d)}{%
- \tkzDrawSegments[blue](a,b c,d)}
- \tkzLabelPoints(a,...,d)
- \end{tikzpicture}
- \hspace{\fill}
-% subsubsection other_transfers (end)
-% subsubsection points_transfer (end)
-% section transferts (end)
-
-\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/tkz-elements.pdf b/macros/latex/contrib/tkz/tkz-elements/doc/tkz-elements.pdf
index 152e50be1e..d42a3a109b 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/tkz-elements.pdf
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/tkz-elements.pdf
Binary files differ
diff --git a/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_1.pdf b/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_1.pdf
index 373dc1b0bc..6b1998eb80 100644
--- a/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_1.pdf
+++ b/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_1.pdf
Binary files differ
diff --git a/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_1.tex b/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_1.tex
index faa0ef52bb..15046d83a3 100644
--- a/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_1.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_1.tex
@@ -1,7 +1,7 @@
% !TEX TS-program = lualatex
% Author Alain Matthes 2023
\documentclass{article}
-\usepackage{tkz-euclide}
+\usepackage[mini]{tkz-euclide}
\usepackage{tkz-elements}
\begin{document}
diff --git a/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_2.pdf b/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_2.pdf
index 788e9d0f39..6ff5f444c8 100644
--- a/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_2.pdf
+++ b/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_2.pdf
Binary files differ
diff --git a/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_2.tex b/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_2.tex
index 61a1ea5583..2ee7b4c4d9 100644
--- a/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_2.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_2.tex
@@ -1,7 +1,7 @@
% !TEX TS-program = lualatex
% Author Alain Matthes 2023
\documentclass{article}
-\usepackage{tkz-euclide}
+\usepackage[mini]{tkz-euclide}
\usepackage{tkz-elements}
\begin{document}
diff --git a/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_3.pdf b/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_3.pdf
index 1873fd5c85..5f1ded6e31 100644
--- a/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_3.pdf
+++ b/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_3.pdf
Binary files differ
diff --git a/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_3.tex b/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_3.tex
index 684475e28e..a95ae05b08 100644
--- a/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_3.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_3.tex
@@ -1,7 +1,7 @@
% !TEX TS-program = lualatex
% Author Alain Matthes 2023
\documentclass{article}
-\usepackage{tkz-euclide}
+\usepackage[mini]{tkz-euclide}
\usepackage{tkz-elements}
\begin{document}
diff --git a/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_4.pdf b/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_4.pdf
index 5d703157aa..1428fd1d4f 100644
--- a/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_4.pdf
+++ b/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_4.pdf
Binary files differ
diff --git a/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_4.tex b/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_4.tex
index 3242fea11a..5dcf23e1ba 100644
--- a/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_4.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_4.tex
@@ -3,7 +3,7 @@
% Copyright (c) 2023 AlterMundus.
\documentclass{standalone}
-\usepackage{tkz-euclide}
+\usepackage[mini]{tkz-euclide}
\usepackage{tkz-elements}
\begin{document}
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz-elements.sty b/macros/latex/contrib/tkz/tkz-elements/latex/tkz-elements.sty
index f7416d8e4f..0a11787d21 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz-elements.sty
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz-elements.sty
@@ -1,5 +1,5 @@
% encoding : utf8
-% tkz-elements.sty v2.20c
+% tkz-elements.sty v2.25c
% Copyright 2024 Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
@@ -11,7 +11,7 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\ProvidesPackage{tkz-elements}[2024/03/25 v2.20c Graphic Object Library]
+\ProvidesPackage{tkz-elements}[2024/04/27 v2.25c Graphic Object Library]
\RequirePackage{luacode}
\directlua{require "tkz_elements_main"}
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_circle.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_circle.lua
index 708e7b7af3..1999b8a073 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_circle.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_circle.lua
@@ -1,6 +1,6 @@
-- tkz_elements-circles.lua
--- date 2024/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_class.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_class.lua
index 491d237ac2..b6a1bf7a5a 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_class.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_class.lua
@@ -1,6 +1,6 @@
-- tkz_elements_class.lua
--- date 2024/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- from class.lua (Simple Lua Classes from Lua-users wiki)
-- Compatible with Lua 5.1 (not 5.0).
-- http://lua-users.org/wiki/SimpleLuaClasses DavidManura
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_ellipse.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_ellipse.lua
index f20b87a44f..a98cf40a63 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_ellipse.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_ellipse.lua
@@ -1,6 +1,6 @@
-- tkz_elements-ellipses.lua
--- date 2024/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_circles.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_circles.lua
index eacd8423a4..40f2a4ebbf 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_circles.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_circles.lua
@@ -1,6 +1,6 @@
-- tkz_elements_functions_circles.lua
--- date 2024/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_intersections.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_intersections.lua
index dc44e2ae88..69dcd6ace3 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_intersections.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_intersections.lua
@@ -1,6 +1,6 @@
-- tkz_elements_intersections.lua
--- date 2024/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_lines.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_lines.lua
index 2dd8d6467a..401ad46dda 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_lines.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_lines.lua
@@ -1,6 +1,6 @@
-- tkz_elements_functions_lines.lua
--- date 2024/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
@@ -150,4 +150,13 @@ function report_ (za,zb,d,pt)
else
return barycenter_({za,1-t},{zb,(t)}) +pt-za
end
-end \ No newline at end of file
+end
+
+function colinear_at_ (za,zb,pt,k)
+ if k == nil
+ then
+ return pt+zb-za
+else
+ return pt+k*(zb-za)
+end
+end
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_maths.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_maths.lua
index 9b4e51d295..a71c0f7c27 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_maths.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_maths.lua
@@ -1,6 +1,6 @@
-- tkz_elements_functions_maths.lua
--- date 2024/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_matrices.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_matrices.lua
index 7d3f475570..4371214047 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_matrices.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_matrices.lua
@@ -1,6 +1,6 @@
-- tkz_elements_functions_matrices.lua
--- date 2024/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_points.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_points.lua
index ce04c2d091..f1c4dc5d41 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_points.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_points.lua
@@ -1,6 +1,6 @@
-- tkz_elements_functions_points.lua
--- date 2024/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_regular.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_regular.lua
index bd8f7cab5b..5e92b4d598 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_regular.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_regular.lua
@@ -1,6 +1,6 @@
-- tkz_elements_functions_regular.lua
--- date 2024/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_triangles.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_triangles.lua
index 2e917db2f1..d4523d1826 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_triangles.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_triangles.lua
@@ -1,6 +1,6 @@
-- tkz_elements_functions_triangles.lua
--- date 2024/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_line.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_line.lua
index 68a5ad843b..9304768f31 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_line.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_line.lua
@@ -1,6 +1,6 @@
-- tkz_elements_lines.lua
--- date 2024/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
@@ -163,6 +163,15 @@ function line : report (d,pt)
return barycenter_({self.pa,1-t},{self.pb,(t)}) +pt-self.pa
end
end
+
+function line : colinear_at (pt,k)
+ if k == nil
+ then
+ return colinear_at_ (self.pa,self.pb,pt,1)
+ else
+ return colinear_at_ (self.pa,self.pb,pt,k)
+ end
+end
-------------- transformations -------------
function line: translation_pt ( pt )
return translation_ ( self.pb-self.pa,pt )
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_main.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_main.lua
index 3dffb3de46..10ee219519 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_main.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_main.lua
@@ -1,6 +1,6 @@
-- tkz_elements-main.lua
--- date 2024/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_matrices.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_matrices.lua
index ed5fa5b1f3..981ac68094 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_matrices.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_matrices.lua
@@ -1,6 +1,6 @@
-- tkz_elements_matrices.lua
--- date 2024/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_misc.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_misc.lua
index 6bf04756a6..94c9c555c0 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_misc.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_misc.lua
@@ -1,6 +1,6 @@
-- tkz_elements_functions_maths.lua
--- date 2024/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_parallelogram.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_parallelogram.lua
index 99c4344543..fd0a3533a3 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_parallelogram.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_parallelogram.lua
@@ -1,6 +1,6 @@
-- tkz_elements_parallelogram.lua
--- date 2024/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_point.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_point.lua
index 5e9d4fcd00..4eb4b549d1 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_point.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_point.lua
@@ -1,6 +1,6 @@
-- tkz_elements_point.lua
--- date 2024/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_quadrilateral.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_quadrilateral.lua
index f02c977e08..e77e0af561 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_quadrilateral.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_quadrilateral.lua
@@ -1,6 +1,6 @@
-- tkz_elements_quadrilateral.lua
--- date 2024/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_rectangle.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_rectangle.lua
index 7add1b244d..2c07f78399 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_rectangle.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_rectangle.lua
@@ -1,6 +1,6 @@
-- tkz_elements-rectangle.lua
--- date 2024/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_regular.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_regular.lua
index cc7a24ff06..0641a858de 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_regular.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_regular.lua
@@ -1,6 +1,6 @@
-- tkz_elements_regular.lua
--- date 2024/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_square.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_square.lua
index 7373886efc..1852c0ded4 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_square.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_square.lua
@@ -1,6 +1,6 @@
-- tkz_elements-square.lua
--- date 2024/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_triangle.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_triangle.lua
index d3a80bd777..c6dd2c3757 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_triangle.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_triangle.lua
@@ -1,6 +1,6 @@
-- tkz_elements_triangles.lua
--- date 2024/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
@@ -140,6 +140,17 @@ end
function triangle : soddy_center ()
return soddy_center_ (self.pa,self.pb,self.pc)
end
+
+function triangle : conway_points ()
+ local a1,a2,b1,b2,c1,c2
+ a1 = report_ (self.pb,self.pa,length(self.pb,self.pc),self.pa)
+ a2 = report_ (self.pc,self.pa,length(self.pb,self.pc),self.pa)
+ b1 = report_ (self.pa,self.pb,length(self.pa,self.pc),self.pb)
+ b2 = report_ (self.pc,self.pb,length(self.pa,self.pc),self.pb)
+ c1 = report_ (self.pb,self.pc,length(self.pb,self.pa),self.pc)
+ c2 = report_ (self.pa,self.pc,length(self.pb,self.pa),self.pc)
+ return a1,a2,b1,b2,c1,c2
+ end
-------------------
-- Result -> line
-------------------
@@ -214,7 +225,7 @@ local a,b,c
end
end
-function triangle: antiparallel(pt,n) -- n =1 swap n=2 2 swap
+function triangle: antiparallel(pt,n) -- n = 1 swap ; n= 2 2 swap
local a,b,c,i,u,v,w
a = self.pa
b = self.pb
@@ -305,6 +316,29 @@ function triangle : soddy_circle ()
s,i = soddy_center_ (self.pa,self.pb,self.pc)
return circle : new ( s , i )
end
+
+function triangle : cevian_circle (p)
+ local pta,ptb,ptc
+ pta,ptb,ptc = cevian_ (self.pa,self.pb,self.pc,p)
+ return circle : new (circum_circle_ (pta,ptb,ptc),pta)
+ end
+
+ function triangle : conway_circle ()
+ local i,t
+ i = in_center_ (self.pa,self.pb,self.pc)
+ t = report_ (self.pb,self.pa,length(self.pb,self.pc),self.pa)
+ return circle : new (i,t)
+ end
+
+function triangle : pedal_circle (pt)
+ local x,y,z,c
+ x = projection_ (self.pb,self.pc,pt)
+ y = projection_ (self.pa,self.pc,pt)
+ z = projection_ (self.pa,self.pb,pt)
+ c = circum_center_ (x,y,z)
+ return circle : new (c,x)
+end
+
-------------------
-- Result -> triangle
-------------------
@@ -361,6 +395,14 @@ end
function triangle: euler ()
return triangle : new (euler_points_ (self.pa,self.pb,self.pc) )
end
+
+function triangle: pedal (pt)
+ local x,y,z
+ x = projection_ (self.pb,self.pc,pt)
+ y = projection_ (self.pa,self.pc,pt)
+ z = projection_ (self.pa,self.pb,pt)
+ return triangle : new (x,y,z)
+end
-------------------
-- Result -> ellipse
-------------------
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_vector.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_vector.lua
index f3f93a0f53..8b26fe4bd3 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_vector.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_vector.lua
@@ -1,6 +1,6 @@
-- tkz_elements_vectors.lua
--- date 2024/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- Copyright 2024 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-euclide/README.md b/macros/latex/contrib/tkz/tkz-euclide/README.md
index d0bc9ec3e8..a0b514e2b8 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/README.md
+++ b/macros/latex/contrib/tkz/tkz-euclide/README.md
@@ -1,5 +1,5 @@
# tkz-euclide — for euclidean geometry
-Release 5.06c 2024/02/04
+Release 5.10c 2024/04/27
## Description
@@ -9,7 +9,8 @@ It uses a Cartesian coordinate system orthogonormal (unit 1cm)
as well as tools to define the unique coordinates of points and to
manipulate them. The idea is to allow you to follow step by step a construction
that would be done by hand as naturally as possible.
-Now tkz-euclide introduces a "lua" option which allows to do most of the calculations using "lua".
+Now tkz-euclide introduces a `lua` option which allows to do most of the calculations using `lua`.
+A new option mini has been introduced. When one wishes to use tkz-euclide and tkz-elements together, it is recommended to load the package with this option. Thus, tkz-euclide will focus solely on the drawings.
## Licence
@@ -41,18 +42,20 @@ To use the package `tkz-euclide`, place the following lines in the preamble of
your LaTeX document:
```
-\usepackage{tkz-euclide} or \usepackage[lua]{tkz-euclide}
+\usepackage{tkz-euclide}
\begin{document}
\begin{tikzpicture}
your code
\end{tikzpicture}
```
+
+This code can be compiled using either `pdflatex` or `lualatex`. In the latter case, the `lua` option allows most calculations to be performed with `lua`. If you do the calculations with `tkz-elements` then you can load `tkz-euclide` with the `mini` option.
If you use the `xcolor` package, load that package before `tkz-euclide` to avoid
package conflicts.
## Documentation
-Documentation for `tkz-euclide` is available on `CTAN`.
+Documentation for `tkz-euclide` is available on `CTAN`. A french version of the documentation is now available on my website [http://altermundus.fr](http://altermundus.fr)
## Examples
@@ -63,6 +66,11 @@ Other examples, in French, are on my site.
## History
+
+- 5.10c
+ - tkz-tool-eu-angles.arc.tex has been extracted from the file tkz-tool-eu-angles.tex
+ - Added `mini` option
+ - Added french documentation on my site (altermundus.fr)
- 5.06c
- Correction of a bug with the macro \tkzLabelAngle and the option “angle”
- Added \tkzSetUpCircle
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-FAQ.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-FAQ.tex
index 97e137007e..d0844abe81 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-FAQ.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-FAQ.tex
@@ -8,7 +8,9 @@
\item Don't forget that since version 4 the unit is obligatorily the "cm" it is thus necessary to withdraw the unit like here \tkzcname{tkzDrawCircle[R](O,3cm)} which becomes \tkzcname{tkzDrawCircle[R](O,3)}. The traditional options of \tkzname{TikZ} keep their units example\tkzname{ below right = 12pt} on the other hand one will write \tkzname{size=1.2} to position an arc in \tkzcname{tkzMarkAngle};
- \item The following error still happens to me from time to time. A point that is created has its name in brackets while a point that is used either as an option or as a parameter has its name in braces. Example \tkzcname{tkzGetPoint(A)} When defining an object, use braces and not brackets, so write: \tkzcname{tkzGetPoint\{A\}};
+ \item The following error still happens to me from time to time. A point that is created has its name in brackets while a point that is used either as an option or as a parameter has its name in braces.
+
+ Example \tkzcname{tkzGetPoint(A)} When defining an object, use braces and not brackets, so write: \tkzcname{tkzGetPoint\{A\}};
\item The changes in obtaining the points of intersection between lines and circles sometimes exchange the solutions, this leads either to a bad figure or to an error.
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-angles.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-angles.tex
index 3ab43bd43e..6ced16c2df 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-angles.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-angles.tex
@@ -228,7 +228,8 @@ Here is another version of the construction of a mediator
\tkzCalcLength(A,B) \tkzGetLength{dAB}
\tkzFindSlopeAngle(A,B) \tkzGetAngle{tkzangle}
\begin{scope}[rotate=\tkzangle]
- \tkzSetUpArc[color=gray,line width=0.2pt,/tkzcompass/delta=10]
+ \tkzSetUpArc[color=gray,line width=0.2pt,%
+ /tkzcompass/delta=10]
\tkzDrawArc[R,arc](B,3/4*\dAB)(120,240)
\tkzDrawArc[R,arc](A,3/4*\dAB)(-45,60)
\tkzDrawLine(I,J) \tkzDrawSegment(A,B)
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-circleby.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-circleby.tex
index 7af83e2aa1..fa38fb4cd1 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-circleby.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-circleby.tex
@@ -96,14 +96,14 @@ options & & examples \\
\subsubsection{\tkzname{Symmetry}}
\begin{tkzexample}[latex=7cm,small]
\begin{tikzpicture}[scale=1]
- \tkzDefPoint(0,0){A} \tkzDefPoint(3,1){B}
+ \tkzDefPoint(3,1){B}
\tkzDefPoint(3,2){C} \tkzDefPoint(4,3){D}
\tkzDefCircleBy[symmetry=center B](C,D)
\tkzGetPoints{C'}{D'}
\tkzDrawPoints[teal](B,C,D,C',D')
\tkzDrawLines[orange](C,C' D,D')
\tkzDrawCircles(C,D C',D')
- \tkzLabelPoints[color=teal](A,C,C')
+ \tkzLabelPoints[color=teal](C,C')
\tkzLabelPoints[color=teal,above](D)
\tkzLabelPoints[color=teal,below](D')
\end{tikzpicture}
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-circles.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-circles.tex
index 2a336d91af..f36f2dd2a7 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-circles.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-circles.tex
@@ -129,7 +129,8 @@ We want to define an excircle of a triangle relatively to point $C$
\tkzDrawPolygon(A,B,C)
\tkzDrawLines[add=0 and 1.5](C,A C,B)
\tkzDrawSegments(J_c,X_c I,D I,F J_c,Y_c)
- \tkzMarkRightAngles(A,F,I B,D,I J_c,X_c,A J_c,Y_c,B)
+ \tkzMarkRightAngles(A,F,I B,D,I J_c,X_c,A%
+ J_c,Y_c,B)
\tkzDrawPoints(B,C,A,I,D,F,X_c,J_c,Y_c)
\tkzLabelPoints(B,A,J_c,I,D)
\tkzLabelPoints[above](Y_c)
@@ -205,21 +206,22 @@ We verify that this circle passes through the middle of each side.
The incircle of the medial triangle $M_aM_bM_c$ is the Spieker circle:
\begin{tkzexample}[latex=6cm, small]
-\begin{tikzpicture}[scale=1]
+\begin{tikzpicture}[scale=1.25]
\tkzDefPoints{ 0/0/A,4/0/B,0.8/4/C}
- \tkzDefSpcTriangle[medial](A,B,C){M_a,M_b,M_c}
- \tkzDefTriangleCenter[spieker](A,B,C)
- \tkzGetPoint{S_p}
- \tkzDrawPolygon(A,B,C)
- \tkzDrawPolygon[cyan](M_a,M_b,M_c)
- \tkzDrawPoints(B,C,A)
- \tkzDefCircle[spieker](A,B,C)
- \tkzDrawPoints[new](M_a,M_b,M_c,S_p)
- \tkzDrawCircle[new](tkzFirstPointResult,tkzSecondPointResult)
- \tkzLabelPoints[right](M_a)
- \tkzLabelPoints[left](M_b)
- \tkzLabelPoints[below](A,B,M_c,S_p)
- \tkzLabelPoints[above](C)
+ \tkzDefSpcTriangle[medial](A,B,C){M_a,M_b,M_c}
+ \tkzDefTriangleCenter[spieker](A,B,C)
+ \tkzGetPoint{S_p}
+ \tkzDrawPolygon(A,B,C)
+ \tkzDrawPolygon[cyan](M_a,M_b,M_c)
+ \tkzDrawPoints(B,C,A)
+ \tkzDefCircle[spieker](A,B,C)
+ \tkzDrawPoints[new](M_a,M_b,M_c,S_p)
+ \tkzDrawCircle[new](tkzFirstPointResult,%
+ tkzSecondPointResult)
+ \tkzLabelPoints[right](M_a)
+ \tkzLabelPoints[left](M_b)
+ \tkzLabelPoints[below](A,B,M_c,S_p)
+ \tkzLabelPoints[above](C)
\end{tikzpicture}
\end{tkzexample}
@@ -266,7 +268,8 @@ arguments & default & definition \\
Jc,Xc Jc,Yc Jc,Zc
I,Ia I,Ib I,Ic)
\tkzMarkRightAngles[size=.2,fill=gray!15](Ja,Za,B Ja,Xa,B Ja,Ya,C Jb,Yb,C)
-\tkzMarkRightAngles[size=.2,fill=gray!15](Jb,Zb,B Jb,Xb,C Jc,Yc,A Jc,Zc,B Jc,Xc,C I,Ia,B I,Ib,C I,Ic,A)
+\tkzMarkRightAngles[size=.2,fill=gray!15](Jb,Zb,B Jb,Xb,C Jc,Yc,A Jc,Zc,B)
+\tkzMarkRightAngles[size=.2,fill=gray!15](Jc,Xc,C I,Ia,B I,Ib,C I,Ic,A)
\tkzDrawSegments[blue](Jc,C Ja,A Jb,B)
\tkzDrawPoints(A,B,C,Xa,Xb,Xc,Ja,Jb,Jc,Ia,Ib,Ic,Ya,Yb,Yc,Za,Zb,Zc)
\tkzLabelPoints(A,Ya,Yb,Ja,I)
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-clipping.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-clipping.tex
index 430c8605cc..a0db97f729 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-clipping.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-clipping.tex
@@ -1,5 +1,7 @@
\section{Controlling Bounding Box}
-From the \tkzimp{PgfManual} :"When you add the clip option, the current path is used for clipping subsequent drawings. Clipping never enlarges the clipping area. Thus, when you clip against a certain path and then clip again against another path, you clip against the intersection of both.
+From the \tkzimp{PgfManual} :
+
+"When you add the clip option, the current path is used for clipping subsequent drawings. Clipping never enlarges the clipping area. Thus, when you clip against a certain path and then clip again against another path, you clip against the intersection of both.
The only way to enlarge the clipping path is to end the {pgfscope} in which the clipping was done. At the end of a {pgfscope} the clipping path that was in force at the beginning of the scope is reinstalled."
@@ -10,7 +12,7 @@ The following command \tkzcname{pgfresetboundingbox} clears a bounding box and e
\subsection{Utility of \tkzcname{tkzInit}}
However, it is sometimes necessary to control the size of what will be displayed.
- To do this, you need to have prepared the bounding box you are going to work in, this is the role of the macro \tkzNameMacro{tkzInit}. For some drawings, it is interesting to fix the extreme values (xmin,xmax,ymin and ymax) and to "clip" the definition rectangle in order to control the size of the figure as well as possible.
+ To do this, you need to have prepared the bounding box you are going to work in, this is the role of the macro \tkzNameMacro{tkzInit}. For some drawings, it is interesting to fix the extreme values (xmin,xmax,ymin and ymax) and to \code{clip} the definition rectangle in order to control the size of the figure as well as possible.
The two macros that are useful for controlling the bounding box:
\begin{itemize}
@@ -39,7 +41,7 @@ options & default & definition \\
\medskip
The role of \tkzcname{tkzInit} is to define a \textcolor{red}{orthogonal} coordinates system and a rectangular part of the plane in which you will place your drawings using Cartesian coordinates.
-This macro allows you to define your working environment as with a calculator. With \tkzname{\tkznameofpack} 4 \tkzcname{xstep} and \tkzcname{ystep} are always 1. Logically it is no longer useful to use \tkzcname{tkzInit}, except for an action like "Clipping Out".
+This macro allows you to define your working environment as with a calculator. With \tkzname{\tkznameofpack} 4 \tkzcname{xstep} and \tkzcname{ystep} are always 1. Logically it is no longer useful to use \tkzcname{tkzInit}, except for an action like \code{Clipping Out}.
\end{NewMacroBox}
@@ -64,7 +66,7 @@ The role of the \tkzname{space} option is to enlarge the visible part of the dra
-The role of this macro is to "clip" the initial rectangle so that only the paths contained in this rectangle are drawn.
+The role of this macro is to \code{clip} the initial rectangle so that only the paths contained in this rectangle are drawn.
\begin{tkzexample}[latex=8cm,small]
\begin{tikzpicture}
@@ -83,7 +85,7 @@ It is possible to add a bit of space
\end{tkzltxexample}
\subsection{\tkzcname{tkzClip} and the option \tkzname{space}}
-This option allows you to add some space around the "clipped" rectangle.
+This option allows you to add some space around the \code{clipped} rectangle.
\begin{tkzexample}[latex=8cm,small]
\begin{tikzpicture}
\tkzInit[xmax=4, ymax=3]
@@ -94,7 +96,7 @@ This option allows you to add some space around the "clipped" rectangle.
\tkzDrawSegment(A,B)
\end{tikzpicture}
\end{tkzexample}
-The dimensions of the "clipped" rectangle are \tkzname{xmin-1}, \tkzname{ymin-1}, \tkzname{xmax+1} and \tkzname{ymax+1}.
+The dimensions of the \code{clipped} rectangle are \tkzname{xmin-1}, \tkzname{ymin-1}, \tkzname{xmax+1} and \tkzname{ymax+1}.
%<--------------------------------------------------------------------------->
% tkzShowBB
@@ -116,7 +118,8 @@ This macro displays the bounding box. A rectangular frame surrounds the bounding
\tkzClipBB
\tkzDefCircle[R](A,5) \tkzGetPoint{a}
\tkzDrawCircle(A,a)
- \tkzShowBB[line width = 4pt,fill=teal!10,opacity=.4]
+ \tkzShowBB[line width = 4pt,fill=teal!10,%
+ opacity=.4]
\end{scope}
\tkzDefCircle[R](A,4) \tkzGetPoint{b}
\tkzDrawCircle[red](A,b)
@@ -207,7 +210,7 @@ options & default & definition \\
\end{tikzpicture}
\end{tkzexample}
-\subsubsection{Example: use of "Clip" for Sangaku in a square}
+\subsubsection{Example: use of \code{Clip} for Sangaku in a square}
\begin{tkzexample}[latex=7cm, small]
\begin{tikzpicture}[scale=.75]
\tkzDefPoint(0,0){A} \tkzDefPoint(8,0){B}
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-compass.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-compass.tex
index 088d39f8b0..3c04202262 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-compass.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-compass.tex
@@ -64,7 +64,7 @@ options & default & definition \\
% subsubsection use_tkzcname_tkzcompasss (end)
\begin{tkzexample}[latex=7cm,small]
-\begin{tikzpicture}[scale=.75]
+\begin{tikzpicture}[scale=.6]
\tkzDefPoint(2,2){A} \tkzDefPoint(5,-2){B}
\tkzDefPoint(3,4){C} \tkzDrawPoints(A,B)
\tkzDrawPoint[shape=cross out](C)
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-documentation.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-documentation.tex
index a24b7e63b4..b3e889b817 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-documentation.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-documentation.tex
@@ -1,6 +1,6 @@
\section{About this documentation and the examples}
-It is obtained by compiling with "lualatex". I use a class \tkzname{doc.cls} based on \tkzname{scrartcl}.
+It is obtained by compiling with \code{lualatex}. I use a class \tkzname{doc.cls} based on \tkzname{scrartcl}.
Below the list of styles used in the documentation. To understand how to use the styles see the section \ref{custom}
@@ -25,5 +25,4 @@ Below the list of styles used in the documentation. To understand how to use the
Some examples use predefined styles like
-
|\tikzset{new/.style={color=orange,line width=.2pt}} | \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-drawing.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-drawing.tex
index 0017d4390e..d511637968 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-drawing.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-drawing.tex
@@ -85,7 +85,7 @@ options & default & definition \\
\end{tabular}
\medskip
-\tkzHandBomb\ Beware of the final "s", an oversight leads to cascading errors if you try to draw multiple points. The options are the same as for the previous macro.
+\tkzHandBomb\ Beware of the final \code{s}, an oversight leads to cascading errors if you try to draw multiple points. The options are the same as for the previous macro.
\end{NewMacroBox}
\subsubsection{Example}
@@ -283,18 +283,20 @@ I'll let you look at the examples to see what you can do with these styles.
\tkzCalcLength(B,C)\tkzGetLength{BCl}
\tkzCalcLength(A,C)\tkzGetLength{ACl}
\begin{scope}[dim style/.style={dashed,sloped,teal}]
- \tkzDrawSegment[dim={\pgfmathprintnumber\BCl,6pt,
- text=red}](C,B)
- \tkzDrawSegment[dim={\pgfmathprintnumber\ACl,6pt,}](A,C)
- \tkzDrawSegment[dim={\pgfmathprintnumber\ABl,-6pt,}](A,B)
+ \tkzDrawSegment[dim={\pgfmathprintnumber\BCl,6pt,%
+ text=red}](C,B)
+ \tkzDrawSegment[dim={\pgfmathprintnumber\ACl,%
+ 6pt,}](A,C)
+ \tkzDrawSegment[dim={\pgfmathprintnumber\ABl,%
+ -6pt,}](A,B)
\end{scope}
\tkzLabelPoints(A,B) \tkzLabelPoints[above](C)
\end{tikzpicture}
\end{tkzexample}
\subsubsection{Adding dimensions with option \tkzname{dim} part II}
-\begin{tkzexample}[latex=7cm,small]
-\begin{tikzpicture}[scale=.75]
+\begin{tkzexample}[latex=6cm,small]
+\begin{tikzpicture}[scale=.5]
\tkzDefPoints{0/0/O,-2/0/A,2/0/B,
-2/4/C,2/4/D,2/-4/E,-2/-4/F}
\tkzDrawPolygon(C,...,F)
@@ -699,7 +701,7 @@ arguments & example & explanation \\
\toprule
arguments & example & explanation \\
\midrule
-\TAline{\parg{C,a,b,An}}{\parg{C,4,2,45}} {C center 4 and 2 lengths of long axis and small axis} \\
+\TAline{\parg{C,a,b,An}}{\parg{C,4,2,45}} {C center; 4 and 2 lengths of half-axis} \\
& & 45 slope of main axis \\
\bottomrule
\end{tabular}
@@ -708,9 +710,9 @@ arguments & example & explanation \\
Of course, you have to add all the styles of \TIKZ\ for the tracings...
\end{NewMacroBox}
-\subsubsection{Option \tkzname{towards}}
-\begin{tkzexample}[latex=7cm,small]
- \begin{tikzpicture}
+\subsubsection{Example of drawing an ellipse }
+\begin{tkzexample}[latex=6cm,small]
+ \begin{tikzpicture}[scale=.75]
\tkzDefPoint(0,4){C}
\tkzDrawEllipse[blue](C,4,2,45)
\tkzLabelPoints(C)
@@ -879,7 +881,7 @@ This option allows a bit like \tkzcname{tkzCompass} to place an arc and overflow
\subsubsection{Option \tkzname{angles}: example 2}
-\begin{tkzexample}[latex=6cm,small]
+\begin{tkzexample}[latex=7cm,small]
\begin{tikzpicture}
\tkzDefPoint(0,0){O}
\tkzDefPoint(5,0){I}
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-elements.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-elements.tex
index 4d01262ccb..ad4db72817 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-elements.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-elements.tex
@@ -2,7 +2,7 @@
To work with my package, you need to have notions of \LATEX\ as well as \TIKZ.
-In this paragraph, we start looking at the "rules" and "symbols" used to create a figure with \tkzname{\tkznameofpack}.
+In this paragraph, we start looking at the \code{rules} and \code{symbols} used to create a figure with \tkzname{\tkznameofpack}.
\subsection{Objects and language}
@@ -15,7 +15,7 @@ The used points are passed as parameters between parentheses while the created p
The code of the figures is placed in an environment \tkzimp{tikzpicture}
-Contrary to \TIKZ, you should not end a macro with ";". We thus lose the important notion which is the \tkzimp{path}. However, it is possible to place some code between the macros \tkzname{\tkznameofpack}.
+Contrary to \TIKZ, you should not end a macro with “;”. We thus lose the important notion which is the \tkzimp{path}. However, it is possible to place some code between the macros \tkzname{\tkznameofpack}.
Among the first category, |\tkzDefPoint| allows you to define fixed points. It will be studied in detail later. Here we will see in detail the macro |\tkzDefTriangle|.
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-examples.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-examples.tex
index e436c406fe..ec8982331b 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-examples.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-examples.tex
@@ -955,19 +955,18 @@ From Wikipedia {\emph{In geometry, the Pappus chain is a ring of circles betwee
\end{tikzpicture}%
\begin{tkzexample}[latex=7cm,small]
-\begin{tikzpicture}
- \tkzDefPoints{0/0/O_1,0/1/O_2,0/3/A}
- \tkzDefPoint(15:3){F}
- \tkzInterLC(F,O_1)(O_1,A) \tkzGetSecondPoint{E}
- \tkzDefLine[parallel=through O_2](E,F)
- \tkzGetPoint{x}
- \tkzInterLC(x,O_2)(O_2,A) \tkzGetPoints{D}{C}
- \tkzDrawCircles(O_1,A O_2,A)
- \tkzDrawSegments[new](O_1,A E,F C,D)
- \tkzDrawSegments[purple](A,E A,F)
- \tkzDrawPoints(A,O_1,O_2,E,F,C,D)
- \tkzLabelPoints(A,O_1,O_2,E,F,C,D)
-\end{tikzpicture}
+ \begin{tikzpicture}[scale=.75]
+ \tkzDefPoints{0/0/O_1,0/1/O_2,0/3/A}
+ \tkzDefPoint(15:3){F}
+ \tkzDefPointBy[symmetry=center O_1](F) \tkzGetPoint{E}
+ \tkzDefLine[parallel=through O_2](E,F) \tkzGetPoint{x}
+ \tkzInterLC(x,O_2)(O_2,A) \tkzGetPoints{D}{C}
+ \tkzDrawCircles(O_1,A O_2,A)
+ \tkzDrawSegments[orange](O_1,A E,F C,D)
+ \tkzDrawSegments[purple](A,E A,F)
+ \tkzDrawPoints(A,O_1,O_2,E,F,x,C,D)
+ \tkzLabelPoints(A,O_1,O_2,E,F,x,C,D)
+ \end{tikzpicture}
\end{tkzexample}
$(CD) \parallel (EF)$ $(AO_1)$ is secant to these two lines so
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-filling.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-filling.tex
index c8f1ea14f1..f7fc8883fe 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-filling.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-filling.tex
@@ -41,7 +41,8 @@ You don't need to put \tkzname{radius} because that's the default option. Of cou
\tkzDefMidPoint(A,D) \tkzGetPoint{F}
\tkzDefMidPoint(B,C) \tkzGetPoint{E}
\tkzDefMidPoint(B,D) \tkzGetPoint{Q}
- \tkzDefLine[tangent from = B](F,A) \tkzGetPoints{H}{G}
+ \tkzDefLine[tangent from = B](F,A)
+ \tkzGetPoints{H}{G}
\tkzInterLL(F,G)(C,D) \tkzGetPoint{J}
\tkzInterLL(A,J)(F,E) \tkzGetPoint{K}
\tkzDefPointBy[projection=onto B--A](K)
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-intersection.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-intersection.tex
index 1583f91e2b..64bfe6ecfa 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-intersection.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-intersection.tex
@@ -109,7 +109,7 @@ In the following example, the drawing of the circle uses two points and the inte
\subsubsection{Line passing through the center option \tkzname{common}}
This case is special. You cannot compare the angles. In this case, the option \tkzname{near} must be used. \tkzname{tkzFirstPoint} is assigned to the point closest to the first point given for the line. Here we want $A$ to be closest to $Lb$.
-\begin{tkzexample}[latex=7cm,small]
+\begin{tkzexample}[latex=8cm,small]
\begin{tikzpicture}
\tkzDefPoints{% x y name
0 /1 /D,
@@ -170,12 +170,14 @@ As you can see $\widehat{BCO} < \widehat{BEO} $. To tell the truth,$ \widehat{BE
\tkzDefPoint(0,1){J}
\tkzDefPoint(0,0){O}
\foreach \i in {0,-5,-10,...,-90}{
- \tkzDefPoint({2.5*cos(\i*pi/180)},{1+2.5*sin(\i*pi/180)}){P}
+ \tkzDefPoint({2.5*cos(\i*pi/180)},%
+ {1+2.5*sin(\i*pi/180)}){P}
\tkzInterLC[R](P,J)(O,1)\tkzGetPoints{N}{M}
\tkzDrawSegment[color=orange](J,N)
\tkzDrawPoints[red](N)}
\foreach \i in {-90,-95,...,-175,-180}{
- \tkzDefPoint({2.5*cos(\i*pi/180)},{1+2.5*sin(\i*pi/180)}){P}
+ \tkzDefPoint({2.5*cos(\i*pi/180)},%
+ {1+2.5*sin(\i*pi/180)}){P}
\tkzInterLC[R](P,J)(O,1)\tkzGetPoints{N}{M}
\tkzDrawSegment[color=orange](J,M)
\tkzDrawPoints[red](M)}
@@ -212,14 +214,14 @@ $D$ is the point closest to $b$.
\subsubsection{More complex example of a line-circle intersection}
Figure from \url{http://gogeometry.com/problem/p190_tangent_circle}
-\begin{tkzexample}[latex=7cm,small]
+\begin{tkzexample}[latex=6.5cm,small]
\begin{tikzpicture}[scale=.75]
\tkzDefPoint(0,0){A}
\tkzDefPoint(8,0){B}
- \tkzDefMidPoint(A,B) \tkzGetPoint{O}
- \tkzDefMidPoint(O,B) \tkzGetPoint{O'}
- \tkzDefLine[tangent from=A](O',B) \tkzGetFirstPoint{E}
- \tkzInterLC(A,E)(O,B) \tkzGetFirstPoint{D}
+ \tkzDefMidPoint(A,B) \tkzGetPoint{O}
+ \tkzDefMidPoint(O,B) \tkzGetPoint{O'}
+ \tkzDefLine[tangent from=A](O',B)\tkzGetFirstPoint{E}
+ \tkzInterLC(A,E)(O,B) \tkzGetFirstPoint{D}
\tkzDefPointBy[projection=onto A--B](D)
\tkzGetPoint{F}
\tkzDrawCircles(O,B O',B)
@@ -284,7 +286,7 @@ With \tkzname{xfp} and \tkzcname{fpeval}:
\end{tkzexample}
-\subsubsection{Option "with nodes"}
+\subsubsection{Option \code{with nodes}}
\begin{tkzexample}[latex=8cm,small]
\begin{tikzpicture}[scale=.75]
\tkzDefPoints{0/0/A,4/0/B,1/1/D,2/0/E}
@@ -315,7 +317,7 @@ options & default & definition \\
\end{tabular}
\medskip
-This macro defines the intersection point(s) $I$ and $J$ of the two center circles $O$ and $O'$. If the two circles do not have a common point then the macro ends with an error that is not handled. If the centers are $O$ and $O'$ and the intersections are $A$ and $B$ then the angles $\widehat{O,A,O'}$ and $\widehat{O,B,O'}$ are in opposite directions. \tkzname{tkzFirstPoint} is assigned to the point that forms the "clockwise" angle.
+This macro defines the intersection point(s) $I$ and $J$ of the two center circles $O$ and $O'$. If the two circles do not have a common point then the macro ends with an error that is not handled. If the centers are $O$ and $O'$ and the intersections are $A$ and $B$ then the angles $\widehat{O,A,O'}$ and $\widehat{O,B,O'}$ are in opposite directions. \tkzname{tkzFirstPoint} is assigned to the point that forms the \code{clockwise} angle.
\end{NewMacroBox}
\begin{NewMacroBox}{tkzTestInterCC}{\parg{$O,A$}\parg{$O',B$}}%
@@ -346,14 +348,15 @@ So the arguments are two couples which define two circles with a center and a po
\subsubsection{circle-circle intersection with \tkzname{common} point.}
\begin{tkzexample}[latex=7cm,small]
- \begin{tikzpicture}[scale=.5]
- \tkzDefPoints{0/0/O,5/-1/A,2/2/B}
- \tkzDrawPoints(O,A,B)
- \tkzDrawCircles(O,B A,B)
- \tkzInterCC[common=B](O,B)(A,B)\tkzGetFirstPoint{C}
- \tkzDrawPoint(C)
- \tkzLabelPoints[above](O,A,B,C)
- \end{tikzpicture}
+\begin{tikzpicture}[scale=.5]
+ \tkzDefPoints{0/0/O,5/-1/A,2/2/B}
+ \tkzDrawPoints(O,A,B)
+ \tkzDrawCircles(O,B A,B)
+ \tkzInterCC[common=B](O,B)(A,B)
+ \tkzGetFirstPoint{C}
+ \tkzDrawPoint(C)
+ \tkzLabelPoints[above](O,A,B,C)
+\end{tikzpicture}
\end{tkzexample}
\subsubsection{circle-circle intersection order of points.}
@@ -361,9 +364,10 @@ The idea is to compare the angles formed with the first center, a resultant poin
As you can see $\widehat{ODB} < \widehat{OBE} $
-\begin{tkzexample}[latex=7cm,small]
+\begin{tkzexample}[latex=6cm,small]
\begin{tikzpicture}[scale=.5]
- \pgfkeys{/pgf/number format/.cd,fixed relative,precision=4}
+ \pgfkeys{/pgf/number format/.cd,fixed relative,
+ precision=4}
\tkzDefPoints{0/0/O,5/-1/A,2/2/B,2/-1/C}
\tkzDrawPoints(O,A,B)
\tkzDrawCircles(O,A B,C)
@@ -382,8 +386,6 @@ As you can see $\widehat{ODB} < \widehat{OBE} $
\end{tikzpicture}
\end{tkzexample}
-
-
\subsubsection{Construction of an equilateral triangle.}
$\widehat{A,C,B}$ is a clockwise angle
\begin{tkzexample}[latex=7cm,small]
@@ -410,13 +412,13 @@ $\widehat{A,C,B}$ is a clockwise angle
\begin{tikzpicture}[scale=.6]
\tkzDefPoint(0,0){A}
\tkzDefPoint(3,2){B}
- \tkzInterCC(A,B)(B,A) \tkzGetSecondPoint{D}
- \tkzInterCC(D,B)(B,A) \tkzGetPoints{A}{C}
- \tkzInterCC(D,B)(A,B) \tkzGetPoints{E}{B}
- \tkzInterLC[common=D](C,D)(E,D) \tkzGetFirstPoint{F}
- \tkzInterLL(A,F)(B,C) \tkzGetPoint{O}
- \tkzInterLL(O,D)(A,B) \tkzGetPoint{H}
- \tkzInterLL(O,E)(A,B) \tkzGetPoint{G}
+ \tkzInterCC(A,B)(B,A) \tkzGetSecondPoint{D}
+ \tkzInterCC(D,B)(B,A) \tkzGetPoints{A}{C}
+ \tkzInterCC(D,B)(A,B) \tkzGetPoints{E}{B}
+ \tkzInterLC[common=D](C,D)(E,D)\tkzGetFirstPoint{F}
+ \tkzInterLL(A,F)(B,C) \tkzGetPoint{O}
+ \tkzInterLL(O,D)(A,B) \tkzGetPoint{H}
+ \tkzInterLL(O,E)(A,B) \tkzGetPoint{G}
\tkzDrawCircles(D,E A,B B,A E,A)
\tkzDrawSegments[](O,F O,B O,D O,E)
\tkzDrawPoints(A,...,H)
@@ -425,7 +427,7 @@ $\widehat{A,C,B}$ is a clockwise angle
\end{tikzpicture}
\end{tkzexample}
-\subsubsection{With the option "\tkzimp{with nodes}"}
+\subsubsection{With the option \code{with nodes}}
\begin{tkzexample}[latex=6cm,small]
\begin{tikzpicture}[scale=.5]
\tkzDefPoints{0/0/A,0/5/B,5/0/C}
@@ -449,17 +451,17 @@ $\widehat{A,C,B}$ is a clockwise angle
\subsubsection{Mix of intersections}
\begin{tkzexample}[latex=8cm,small]
-\begin{tikzpicture}[scale = .75]
+\begin{tikzpicture}[scale = .7]
\tkzDefPoint(2,2){A}
\tkzDefPoint(0,0){B}
\tkzDefPoint(-2,2){C}
\tkzDefPoint(0,4){D}
\tkzDefPoint(4,2){E}
\tkzCircumCenter(A,B,C)\tkzGetPoint{O}
- \tkzInterCC[R](O,2)(D,2) \tkzGetPoints{M1}{M2}
+ \tkzInterCC[R](O,2)(D,2)\tkzGetPoints{M1}{M2}
\tkzInterCC(O,A)(D,O) \tkzGetPoints{1}{2}
- \tkzInterLC(A,E)(B,M1) \tkzGetSecondPoint{M3}
- \tkzInterLC(O,C)(M3,D) \tkzGetSecondPoint{L}
+ \tkzInterLC(A,E)(B,M1)\tkzGetSecondPoint{M3}
+ \tkzInterLC(O,C)(M3,D)\tkzGetSecondPoint{L}
\tkzDrawSegments(C,L)
\tkzDrawPoints(A,B,C,D,E,M1,M2,M3,O,L)
\tkzDrawSegments(O,E)
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-labelling.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-labelling.tex
index f3c8a0b3da..6fe0133db1 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-labelling.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-labelling.tex
@@ -330,7 +330,7 @@ options & default & definition \\
\end{tabular}
\medskip
-\emph{ We can use the styles from \TIKZ. The label is created and therefore "passed" between braces.}
+\emph{ We can use the styles from \TIKZ. The label is created and therefore \code{passed} between braces.}
\end{NewMacroBox}
\subsubsection{Example}
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-lines.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-lines.tex
index cc4177dd9f..4d42e3d571 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-lines.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-lines.tex
@@ -25,9 +25,9 @@ arguments & example & explanation \\
\toprule
options & default & definition \\
\TOline{mediator}{}{perpendicular bisector of a line segment}
-\TOline{perpendicular=through\dots}{mediator}{perpendicular to a straight line passing through a point}
+\TOline{perpendicular=through\dots}{mediator}{perpendicular to a line passing through a point}
\TOline{orthogonal=through\dots}{mediator}{see above }
-\TOline{parallel=through\dots}{mediator}{parallel to a straight line passing through a point}
+\TOline{parallel=through\dots}{mediator}{parallel to a line passing through a point}
\TOline{bisector}{mediator}{bisector of an angle defined by three points}
\TOline{bisector out}{mediator}{exterior angle bisector}
\TOline{symmedian}{mediator}{symmedian from a vertex }
@@ -59,7 +59,7 @@ options & default & definition \\
Based on a figure from O. Reboux with pst-eucl by D Rodriguez.
\begin{tkzexample}[latex=7cm,small]
-\begin{tikzpicture}[scale=.6]
+\begin{tikzpicture}[scale=.75]
% necessary
\tkzInit[xmin=-6,ymin=-4,xmax=6,ymax=6]
\tkzClip
@@ -80,7 +80,7 @@ Based on a figure from O. Reboux with pst-eucl by D Rodriguez.
Based on a figure from O. Reboux with pst-eucl by D Rodriguez.
It is not necessary to name the two points that define the mediator.
-\begin{tkzexample}[latex=7cm,small]
+\begin{tkzexample}[latex=8cm,small]
\begin{tikzpicture}[scale=.6]
\tkzInit[xmin=-6,ymin=-4,xmax=6,ymax=6]
\tkzClip
@@ -112,11 +112,13 @@ It is not necessary to name the two points that define the mediator.
Archimedes' Book of Lemmas proposition 1
\begin{tkzexample}[latex=7cm,small]
- \begin{tikzpicture}[scale=.75]
+ \begin{tikzpicture}
\tkzDefPoints{0/0/O_1,0/1/O_2,0/3/A}
\tkzDefPoint(15:3){F}
- \tkzInterLC(F,O_1)(O_1,A) \tkzGetSecondPoint{E}
- \tkzDefLine[parallel=through O_2](E,F) \tkzGetPoint{x}
+ \tkzDefPointBy[symmetry=center O_1](F)
+ \tkzGetPoint{E}
+ \tkzDefLine[parallel=through O_2](E,F)
+ \tkzGetPoint{x}
\tkzInterLC(x,O_2)(O_2,A) \tkzGetPoints{D}{C}
\tkzDrawCircles(O_1,A O_2,A)
\tkzDrawSegments[new](O_1,A E,F C,D)
@@ -169,10 +171,12 @@ Archimedes' Book of Lemmas proposition 1
\subsubsection{ With option \tkzname{euler}} % (fold)
\label{sub:eulerline}
\begin{tkzexample}[latex=7 cm,small]
-\begin{tikzpicture}
+\begin{tikzpicture}[scale=.75]
\tkzDefPoints{0/0/A,6/0/B,0.8/4/C}
-\tkzDefLine[euler](A,B,C) \tkzGetPoints{h}{e}
-\tkzDefTriangleCenter[circum](A,B,C) \tkzGetPoint{o}
+\tkzDefLine[euler](A,B,C)
+\tkzGetPoints{h}{e}
+\tkzDefTriangleCenter[circum](A,B,C)
+\tkzGetPoint{o}
\tkzDrawPolygon[teal](A,B,C)
\tkzDrawPoints[red](A,B,C,h,e,o)
\tkzDrawLine[add= 2 and 2](h,e)
@@ -205,18 +209,22 @@ The tangent is not drawn. With option \tkzname{at}, a point of the tangent is g
\begin{tkzexample}[latex=7cm,small]
\begin{tikzpicture}[scale=1,rotate=-30]
\tkzDefPoints{0/0/Q,0/2/A,6/-1/O}
-\tkzDefLine[tangent from = O](Q,A) \tkzGetPoints{R}{S}
-\tkzInterLC[near](O,Q)(Q,A) \tkzGetPoints{M}{N}
+\tkzDefLine[tangent from = O](Q,A)
+\tkzGetPoints{R}{S}
+\tkzInterLC[near](O,Q)(Q,A)
+\tkzGetPoints{M}{N}
\tkzDrawCircle(Q,M)
\tkzDrawSegments[new,add = 0 and .2](O,R O,S)
\tkzDrawSegments[gray](N,O R,Q S,Q)
\tkzDrawPoints(O,Q,R,S,M,N)
\tkzMarkAngle[gray,-stealth,size=1](O,R,Q)
\tkzFindAngle(O,R,Q) \tkzGetAngle{an}
-\tkzLabelAngle(O,R,Q){$\pgfmathprintnumber{\an}^\circ$}
+\tkzLabelAngle(O,R,Q){%
+ $\pgfmathprintnumber{\an}^\circ$}
\tkzMarkAngle[gray,-stealth,size=1](O,S,Q)
\tkzFindAngle(O,S,Q) \tkzGetAngle{an}
-\tkzLabelAngle(O,S,Q){$\pgfmathprintnumber{\an}^\circ$}
+\tkzLabelAngle(O,S,Q){%
+ $\pgfmathprintnumber{\an}^\circ$}
\tkzLabelPoints(Q,O,M,N,R)
\tkzLabelPoints[above,text=red](S)
\end{tikzpicture}
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-lua.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-lua.tex
index 88a2c293ec..714ce64bc0 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-lua.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-lua.tex
@@ -1,7 +1,11 @@
\newpage
-\section{Working with lua : option \tkzname{lua}} \label{calc_with_lua}
+\section{Working with lua} \label{calc_with_lua}
-You can now use the "lua" option with \tkzname{\tkznameofpack} version 5.
+\subsubsection{Option \code{lua}} % (fold)
+\label{ssub:option_code_lua}
+
+% subsubsection option_code_lua (end)
+You can now use the \ItkzPopt{tkz-euclide}{lua} option with \tkzname{\tkznameofpack} version 5.
You just have to write in your preamble
|usepackage[lua]{tkz-euclide}|.
@@ -11,12 +15,18 @@ Without the option you can use \tkzname{\tkznameofpack} with the proposed code o
This version is not yet finalized although the documentation you are currently reading has been compiled with this option.
-Some information about the method used and the results obtained. Concerning the method, I considered two possibilities. The first one was simply to replace everywhere I could the calculations made by "xfp" or sometimes by "lua". This is how I went from "fp" to "xfp" and now to "lua". The second and more ambitious possibility would have been to associate to each point a complex number and to make the calculations on the complexes with "lua". Unfortunately for that I have to use libraries for which I don't know the license.
+Some information about the method used and the results obtained. Concerning the method, I considered two possibilities. The first one was simply to replace everywhere I could the calculations made by \code{xfp} or sometimes by \code{lua}. This is how I went from \code{fp} to \code{xfp} and now to \code{lua}. The second and more ambitious possibility would have been to associate to each point a complex number and to make the calculations on the complexes with \code{lua}. Unfortunately for that I have to use libraries for which I don't know the license.
-Otherwise the results are good. This documentation with "LualaTeX" and "xfp" compiles in 47s while with "lua" it takes only 30s for 236 pages.
+Otherwise the results are good. This documentation with \code{LualaTeX} and \code{xfp} compiles in 47s while with \code{lua} it takes only 30s for 236 pages.
-Another document of 61 pages is compiled 16s with "pdflaTeX" and "xfp" and 13s with "LualaTeX" and "xfp".
+Another document of 61 pages is compiled 16s with \code{pdflaTeX} and \code{xfp} and 13s with \code{LualaTeX} and \code{xfp}.
This documentation compiles with |\usepackage{tkz-base}| and |\usepackage[lua]{tkz-euclide}| but I didn't test all the interactions thoroughly.
+\subsubsection{Option \code{mini}} % (fold)
+\label{ssub:option_code_mini}
+
+When you use \tkzNamePack{tkz-elements} solely to determine the points in your figures, it is not necessary to load all the modules of \tkzname{\tkznameofpack}. In this case, by using the \ItkzPopt{tkz-euclide}{mini} option |\usepackage[mini]{tkz-euclide}| , you will only load the modules necessary for the drawings.
+
+% subsubsection option_code_mini (end)
\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-main.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-main.tex
index 806d740884..42ce13693b 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-main.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-main.tex
@@ -18,13 +18,13 @@
index = totoc,
twoside,
cadre,
- headings = small
+ headings = small,
]{tkz-doc}
\gdef\tkznameofpack{tkz-euclide}
-\gdef\tkzversionofpack{5.06c}
+\gdef\tkzversionofpack{5.10c}
\gdef\tkzdateofpack{\today}
\gdef\tkznameofdoc{doc-tkz-euclide}
-\gdef\tkzversionofdoc{5.06c}
+\gdef\tkzversionofdoc{5.10c}
\gdef\tkzdateofdoc{\today}
\gdef\tkzauthorofpack{Alain Matthes}
\gdef\tkzadressofauthor{}
@@ -110,6 +110,9 @@
\tikzset{new/.style={color=orange,line width=.2pt}}
\AtBeginDocument{\MakeShortVerb{\|}} % link to shortvrb
+\def\code{\texttt}
+\newcommand*{\ItkzPopt}[2]{\texttt{#2}\index{#1_3@\texttt{#1: options}!\texttt{#2}}}
+
\begin{document}
\parindent=0pt
@@ -117,9 +120,10 @@
\clearpage
\defoffile{\lefthand\
-\tkzname{\tkznameofpack} passes in version 5 with the possibility of carrying out part of the calculations using \tkzname{lua}. See the "news" and "lua" sections for more information.\\
-\tkzname{\tkznameofpack} is a set of convenient macros for drawing in a plane (fundamental two-dimensional object) with a Cartesian coordinate system. It handles the most classic situations in Euclidean Geometry. \tkzname{\tkznameofpack} is built on top of PGF and its associated front-end \TIKZ\ and is a (La)TeX-friendly drawing package. The aim is to provide a high-level user interface to build graphics relatively simply. The idea is to allow you to follow step by step a construction that would be done by hand as naturally as possible.\\
-English is not my native language so there might be some errors.
+
+\tkzname{\tkznameofpack} is a set of convenient macros for drawing in a plane (fundamental two-dimensional object) with a Cartesian coordinate system. It handles the most classic situations in Euclidean Geometry. \tkzname{\tkznameofpack} is built on top of PGF and its associated front-end \TIKZ\ and is a (La)TeX-friendly drawing package. The aim is to provide a high-level user interface to build graphics relatively effortlessly. The goal is to guide users through constructing diagrams step by step, mirroring the natural process of manual construction as closely as possible.\\
+Version 5 of \tkzname{\tkznameofpack} includes the option to utilize Lua for performing certain calculations, refer to the \code{news} and \code{lua} sections.\\
+Please note: English is not my native language, so there may be some errors.
}
\presentation
@@ -128,7 +132,13 @@ English is not my native language so there might be some errors.
\lefthand\ Firstly, I would like to thank \textbf{Till Tantau} for the beautiful \LaTeX{} package, namely \href{http://sourceforge.net/projects/pgf/}{\TIKZ}.
\vspace*{12pt}
-\lefthand\ Acknowledgements : I received much valuable advice, remarks, corrections and examples from \tkzimp{Jean-Côme Charpentier}, \tkzimp{Josselin Noirel}, \tkzimp{Manuel Pégourié-Gonnard}, \tkzimp{Franck Pastor}, \tkzimp{David Arnold}, \tkzimp{Ulrike Fischer}, \tkzimp{Stefan Kottwitz}, \tkzimp{Christian Tellechea}, \tkzimp{Nicolas Kisselhoff}, \tkzimp{David Arnold}, \tkzimp{Wolfgang Büchel}, \tkzimp{John Kitzmiller}, \tkzimp{Dimitri Kapetas}, \tkzimp{Gaétan Marris}, \tkzimp{Mark Wibrow}, \tkzimp{Yves Combe} for his work on a protractor, \tkzimp{Paul Gaborit}, \tkzimp{Laurent Van Deik} for all his corrections, remarks and questions and \tkzimp{Muzimuzhi Z} for the code about the option "dim". A big thank you to \tkzimp{Chetan Shirore} and \tkzimp{Dr. Ajit Kumar} because their work on complex numbers in their package \tkzimp{luamaths} helped me a lot.
+\lefthand\ Acknowledgements : I received much valuable advices, remarks, corrections and examples from
+
+\tkzimp{Jean-Côme Charpentier}, \tkzimp{Josselin Noirel}, \tkzimp{Manuel Pégourié-Gonnard}, \tkzimp{Franck Pastor}, \tkzimp{David Arnold},
+
+\tkzimp{Ulrike Fischer}, \tkzimp{Stefan Kottwitz}, \tkzimp{Christian Tellechea}, \tkzimp{Nicolas Kisselhoff}, \tkzimp{David Arnold}, \tkzimp{Wolfgang Büchel},
+
+\tkzimp{John Kitzmiller}, \tkzimp{Dimitri Kapetas}, \tkzimp{Gaétan Marris}, \tkzimp{Mark Wibrow}, \tkzimp{Yves Combe}, \tkzimp{Paul Gaborit}, \tkzimp{Laurent Van Deik} and \tkzimp{Muzimuzhi Z}.
\vspace*{12pt}
\lefthand\ I would also like to thank Eric Weisstein, creator of MathWorld:
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-news.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-news.tex
index 6667d5bcda..9a21f26637 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-news.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-news.tex
@@ -1,218 +1,227 @@
\section*{News and compatibility}
-\subsection{With 5.06 version}
- \begin{itemize}
- \item Correction of a bug with the macro |\tkzLabelAngle| and the option “angle”
- \item Added |\tkzSetUpCircle|
- \item Correction of some typos
- \item Remove some french texts
- \end{itemize}
-
-
-\subsection{With 5.05 version}
-
- Correction of the documentation in Complete but minimal example.
-
-\subsection{With 5.03 version}
+\subsection{With 5.10 version}
\begin{itemize}
+ \item Added french documentation
- \item Correction of a bug in the macro |\tkzDefBarycentricPointTwo| of the file tkz-obj-lua-points-spc.tex ;
-
- \item Add macro |\tkzDrawEllipse|;
-
- \item Deleting macros |\tkzDrawSectorAngles| and |\tkzDrawSectorRwithNodesAngles|.
-\end{itemize}
-
-
-\subsection{With 5.0 version} % (fold)
-
-\begin{itemize}
-
- \item Finally, I added the "lua" option for the package \tkzname{\tkznameofpack}. This allows to do the calculations for the main functions using lua; (see \ref{calc_with_lua}). The syntax is unchanged. Nothing changes for the user;
-
- \item The "xfp" option has become "veclen" see \ref{opt-veclen}.
-
-\end{itemize}
-
-\subsection{With 4.2 version} % (fold)
-\label{sub:with_4_2_version}
-
-Some changes have been made to make the syntax more homogeneous and especially to distinguish the definition and search for coordinates from the rest, i.e. drawing, marking and labelling.
-Now the definition macros are isolated, it will be easier to introduce a phase of coordinate calculations using \tkzimp{Lua}.
-
-Here are some of the changes.
-\vspace{1cm}
- \begin{itemize}\setlength{\itemsep}{10pt}
-
-
-\item I recently discovered a problem when using the "scale" option. When plotting certain figures with certain tools, extensive use of |pgfmathreciprocal| involves small computational errors but can add up and render the figures unfit. Here is how to proceed to avoid these problems:
-\begin{enumerate}
-
- \item On my side I introduced a patch proposed by Muzimuzhi that modifies
-|pgfmathreciprocal|;
-
-\item Another idea proposed by Muzimuzhi is to pass as an option for the |tikzpicture| environment this |/pgf/fpu/install only={reciprocal}| after loading of course the |fpu| library;
-
-\item I have in the methods chosen to define my macros tried to avoid as much as possible the use of |pgfmathreciprocal|;
-
-\item There is still a foolproof method which consists in avoiding the use of |scale = ...|. It's quite easy if, like me, you only work with fixed points fixed at the beginning of your code. The size of your figure depends only on these fixed points so you just have to adapt the coordinates of these.
-\end{enumerate}
-
-\item Now |\tkzDefCircle| gives two points as results: the center of the circle and a point of the circle. When a point of the circle is known, it is enough to use |\tkzGetPoint| or |\tkzGetFirstPoint|
-to get the center, otherwise |\tkzGetPoints| will give you the center and a point of the circle. You can always get the length of the radius with |\tkzGetLength|. I wanted to favor working with nodes and banish the appearance of numbers in the code.
-
-\item In order to isolate the definitions, I deleted or modified certain macros which are: |\tkzDrawLine|, |\tkzDrawTriangle|, |\tkzDrawCircle|, |\tkzDrawSemiCircle| and |\tkzDrawRectangle|;
-
-Thus |\tkzDrawSquare(A,B)| becomes |\tkzDefSquare(A,B)||\tkzGetPoints{C}{D}| then
-
- |\tkzDrawPolygon(A,B,C,D)|;
-
-If you want to draw a circle, you can't do so |\tkzDrawCircle[R](A,1)|. First you have to define the point through which the circle passes, so you have to do
-|\tkzDefCircle[R](A,1)| |\tkzGetPoint{a}| and finally |\tkzDrawCircle(A,a)|. Another possibilty is to define a point on the circle |\tkzDefShiftPoint[A](1,O){a}|;
-
-
-\item The following macros |tkzDefCircleBy[orthogonal through]| and |\tkzDefCircleBy[orthogonal from]| become |tkzDefCircle[orthogonal through]| and |\tkzDefCircle[orthogonal from]| ;
-
-
-\item |\tkzDefLine[euler](A,B,C)| is a macro that allows you to obtain the line of \tkzname{Euler} when possible. |\tkzDefLine[altitude](A,B,C)| is possible again, as well as |\tkzDefLine[tangent at=A](O)| and |\tkzDefLine[tangent from=P](O,A)| which did not works;
-
-
-\item | \tkzDefTangent| is replaced by |\tkzDefLine[tangent from = ...]| or |\tkzDefLine[tangent at = ...]|;
-
-
-\item I added the macro |\tkzPicAngle[tikz options](A,B,C)| for those who prefer to use \TIKZ ;
-
-
-\item The macro |\tkzMarkAngle| has been corrected;
-
-\item The macro linked to the \tkzname{apollonius} option of the |\tkzDefCircle| command has been rewritten;
-
-\item (4.23) The macro |\tkzDrawSemiCircle| has been corrected;
-
-\item
-The order of the arguments of the macro \tkzcname{tkzDefPointOnCircle} has changed: now it is center, angle and point or radius.
-I have added two options for working with radians which are \tkzname{through in rad} and \tkzname{R in rad}.
-
-
-\item I added the option \tkzname{reverse} to the arcs paths. This allows to reverse the path and to reverse if necessary the arrows that would be present.
-
-
-\item I have unified the styles for the labels. There is now only \tkzname{label style} left which is valid for points, segments, lines, circles and angles. I have deleted \tkzname{label seg style} \tkzname{label line style} and \tkzname{label angle style}
-
-\item I added the macro |tkzFillAngles| to use several angles.
-
-\item Correction option \tkzname{return} witk \tkzcname{tkzProtractor}
-
-As a reminder, the following changes have been made previously:
-
- \item |\tkzDrawMedian|, |\tkzDrawBisector|, |\tkzDrawAltitude|, |\tkzDrawMedians|, |\tkzDrawBisectors| and |\tkzDrawAltitudes| do not exist anymore. The creation and drawing separation is not respected so it is preferable to first create the coordinates of these points with |\tkzDefSpcTriangle[median]| and then to choose the ones you are going to draw with |\tkzDrawSegments| or |\tkzDrawLines|;
-
-\item |\tkzDrawTriangle| has been deleted. |\tkzDrawTriangle[equilateral]| was handy but it is better to get the third point with |\tkzDefTriangle[equilateral]| and then draw with |\tkzDrawPolygon|; idem for |\tkzDrawSquare| and |\tkzDrawGoldRectangle|;
-
-
-\item The circle inversion was badly defined so I rewrote the macro. The input arguments are always the center and a point of the circle, the output arguments are the center of the image circle and a point of the image circle or two points of the image line if the antecedent circle passes through the pole of the inversion. If the circle passes the inversion center, the image is a straight line, the validity of the procedure depends on the choice of the point on the antecedent circle;
-
-\item Correct allocation for gold sublime and euclide triangles;
-
-
-\item I added the option " next to" for the intersections LC and CC;
-
-
-\item Correction option isoceles right;
-
-\item (4.22 and 4.23) Correction of the macro |\tkzMarkAngle|;
-
-
-\item |\tkzDefMidArc(O,A,B)| gives the middle of the arc center $O$ from $A$ to $B$;
-
-\item Good news : Some useful tools have been added. They are present on an experimental basis and will undoubtedly need to be improved;
-
-
-\item The options "orthogonal from and through" depend now of \tkzcname{tkzDefCircleBy}
-
-\begin{enumerate}
-
- \item |\tkzDotProduct(A,B,C)| computes the scalar product in an orthogonal reference system of the vectors $\overrightarrow{A,B}$ and $\overrightarrow{A,C}$.
-
- |\tkzDotProduct(A,B,C)=aa'+bb' if vec{AB} =(a,b) and vec{AC} =(a',b')|
-
-
- \item |\tkzPowerCircle(A)(B,C)| power of point $A$ with respect to the circle of center $B$ passing through $C$;
-
-
- \item |\tkzDefRadicalAxis(A,B)(C,D)| Radical axis of two circles of center $A$ and $C$;
-
-
-\item (4.23) The macro |tkzDefRadicalAxis| has been completed
-
- \item Some tests : |\tkzIsOrtho(A,B,C)| and |\tkzIsLinear(A,B,C)| The first indicates whether the lines $(A,B)$ and $(A,C)$ are orthogonal. The second indicates whether the points $A$, $B$ and $C$ are aligned;
-
- |\tkzIsLinear(A,B,C)| if $A$,$B$,$C$ are aligned then |\tkzLineartrue|
- you can use |\iftkzLinear| (idem for |\tkzIsOrtho|);
-
-\item A style for vectors has been added that you can of course modify
-
-|tikzset{vector style/.style={>=Latex,->}}|;
-
-
-\item Now it's possible to add an arrow on a line or a circle with the option |tkz arrow|.
-\end{enumerate}
+ \item Added the \code{mini} option. You can use this option with the \tkzNamePack{tkz-elements} package. Only the modules required for tracing will be loaded. This option is currently only available if you are using \tkzNamePack{tkz-elements}.
\end{itemize}
-% subsection with_4_2_version (end)
-\subsection{Changes with previous versions} % (fold)
-\label{sub:changes_with_previous_versions}
-
-\vspace{1cm}
- \begin{itemize}\setlength{\itemsep}{10pt}
-
-\item I remind you that an important novelty is the recent replacement of the \tkzNamePack{fp} package by \tkzNamePack{xfp}. This is to improve the calculations a little bit more and to make it easier to use;
-
-\item First of all, you don’t have to deal with \TIKZ\ the size of the bounding box. Early versions of \tkzname{\tkznameofpack} did not control the size of the bounding box, The bounding box is now controlled in each macro (hopefully) to avoid the use of \tkzcname{tkzInit} followed by \tkzcname{tkzClip};
-
-\item With \tkzimp{tkz-euclide} loads all objects, so there's no need to place \tkzcname{usetkzobj\{all\}};
-
-\item Added macros for the bounding box: \tkzcname{tkzSaveBB} \tkzcname{tkzClipBB} and so on;
-
-\item Logically most macros accept \TIKZ\ options. So I removed the "duplicate" options when possible thus the "label options" option is removed;
-
-\item The unit is now the cm;
-
-\item |\tkzCalcLength| |\tkzGetLength| gives result in cm;
-
-\item |\tkzMarkArc| and |\tkzLabelArc| are new macros;
-
-\item Now |\tkzClipCircle| and |\tkzClipPolygon| have an option \tkzimp{out}. To use this option you must have a Bounding Box that contains the object on which the Clip action will be performed. This can be done by using an object that encompasses the figure or by using the macro \tkzcname{tkzInit};
-
-
-\item The options \tkzname{end} and \tkzname{start} which allowed to give a label to a straight line are removed. You now have to use the macro \tkzcname{tkzLabelLine};
-
-\item Introduction of the libraries \NameLib{quotes} and \NameLib{angles}; it allows to give a label to a point, even if I am not in favour of this practice;
-
-\item The notion of vector disappears, to draw a vector just pass "->" as an option to \tkzcname{tkzDrawSegment};
-
-
-\item |\tkzDefIntSimilitudeCenter| and |\tkzDefExtSimilitudeCenter| do not exist anymore, now you need to use |\tkzDefSimilitudeCenter[int]| or |\tkzDefSimilitudeCenter[ext]|;
-
-\item |\tkzDefRandPointOn| is replaced by |\tkzGetRandPointOn|;
-
-
-\item An option of the macro \tkzcname{tkzDefTriangle} has changed, in the previous version the option was "euclide" with an "e". Now it's "euclid";
-
-\item Random points are now in \tkzname{\tkznameofpack} and the macro \tkzcname{tkzGetRandPointOn} is replaced by
-
- \tkzcname{tkzDefRandPointOn}. For homogeneity reasons, the points must be retrieved with \tkzcname{tkzGetPoint};
-
-\item New macros have been added : \tkzcname{tkzDrawSemiCircles}, \tkzcname{tkzDrawPolygons}, \tkzcname{tkzDrawTriangles};
-
-
-\item Option "isosceles right" is a new option of the macro \tkzcname{tkzDefTriangle};
-
-\item Appearance of the macro \tkzcname{usetkztool} which allows to load new "tools";
-
-\item The styles can be modified with the help of the following macros : \tkzcname{tkzSetUpPoint}, \tkzcname{tkzSetUpLine}, \tkzcname{tkzSetUpArc}, \tkzcname{tkzSetUpCompass}, \tkzcname{tkzSetUpLabel} and \tkzcname{tkzSetUpStyle}. The last one allows you to create a new style.
-\end{itemize}
-% subsection changes_with_previous_versions (end)
+% \subsection{With 5.06 version}
+% \begin{itemize}
+% \item Correction of a bug with the macro |\tkzLabelAngle| and the option \code{angle}.
+% \item Added |\tkzSetUpCircle|.
+% \item Correction of some typos.
+% \item Remove some french texts.
+% \end{itemize}
+%
+%
+% \subsection{With 5.05 version}
+%
+% Correction of the documentation in Complete but minimal example.
+%
+% \subsection{With 5.03 version}
+%
+% \begin{itemize}
+%
+% \item Correction of a bug in the macro |\tkzDefBarycentricPointTwo| of the file tkz-obj-lua-points-spc.tex.
+%
+% \item Add macro |\tkzDrawEllipse|.
+%
+% \item Deleting macros |\tkzDrawSectorAngles| and |\tkzDrawSectorRwithNodesAngles|.
+% \end{itemize}
+%
+%
+% \subsection{With 5.0 version} % (fold)
+%
+% \begin{itemize}
+%
+% \item Finally, I added the \code{lua} option for the package \tkzname{\tkznameofpack}. This allows to do the calculations for the main functions using lua; (see \ref{calc_with_lua}). The syntax is unchanged. Nothing changes for the user.
+%
+% \item The \code{xfp} option has become \code{veclen} see \ref{opt-veclen}.
+%
+% \end{itemize}
+%
+% \subsection{With 4.2 version} % (fold)
+% \label{sub:with_4_2_version}
+%
+% Some changes have been made to make the syntax more homogeneous and especially to distinguish the definition and search for coordinates from the rest, i.e. drawing, marking and labelling.
+% Now the definition macros are isolated, it will be easier to introduce a phase of coordinate calculations using \tkzimp{Lua}.
+%
+% Here are some of the changes.
+% \vspace{1cm}
+% \begin{itemize}\setlength{\itemsep}{10pt}
+%
+%
+% \item I recently discovered a problem when using the \code{scale} option. When plotting certain figures with certain tools, extensive use of |pgfmathreciprocal| involves small computational errors but can add up and render the figures unfit. Here is how to proceed to avoid these problems:
+% \begin{enumerate}
+%
+% \item On my side I introduced a patch proposed by Muzimuzhi that modifies
+% |pgfmathreciprocal|;
+%
+% \item Another idea proposed by Muzimuzhi is to pass as an option for the |tikzpicture| environment this |/pgf/fpu/install only={reciprocal}| after loading of course the |fpu| library;
+%
+% \item I have in the methods chosen to define my macros tried to avoid as much as possible the use of |pgfmathreciprocal|;
+%
+% \item There is still a foolproof method which consists in avoiding the use of |scale = ...|. It's quite easy if, like me, you only work with fixed points fixed at the beginning of your code. The size of your figure depends only on these fixed points so you just have to adapt the coordinates of these.
+% \end{enumerate}
+%
+% \item Now |\tkzDefCircle| gives two points as results: the center of the circle and a point of the circle. When a point of the circle is known, it is enough to use |\tkzGetPoint| or |\tkzGetFirstPoint|
+% to get the center, otherwise |\tkzGetPoints| will give you the center and a point of the circle. You can always get the length of the radius with |\tkzGetLength|. I wanted to favor working with nodes and banish the appearance of numbers in the code.
+%
+% \item In order to isolate the definitions, I deleted or modified certain macros which are: |\tkzDrawLine|, |\tkzDrawTriangle|, |\tkzDrawCircle|, |\tkzDrawSemiCircle| and |\tkzDrawRectangle|;
+%
+% Thus |\tkzDrawSquare(A,B)| becomes |\tkzDefSquare(A,B)||\tkzGetPoints{C}{D}| then
+%
+% |\tkzDrawPolygon(A,B,C,D)|;
+%
+% If you want to draw a circle, you can't do so |\tkzDrawCircle[R](A,1)|. First you have to define the point through which the circle passes, so you have to do
+% |\tkzDefCircle[R](A,1)| |\tkzGetPoint{a}| and finally |\tkzDrawCircle(A,a)|. Another possibilty is to define a point on the circle |\tkzDefShiftPoint[A](1,O){a}|;
+%
+%
+% \item The following macros |tkzDefCircleBy[orthogonal through]| and |\tkzDefCircleBy[orthogonal from]| become |tkzDefCircle[orthogonal through]| and |\tkzDefCircle[orthogonal from]| ;
+%
+%
+% \item |\tkzDefLine[euler](A,B,C)| is a macro that allows you to obtain the line of \tkzname{Euler} when possible. |\tkzDefLine[altitude](A,B,C)| is possible again, as well as |\tkzDefLine[tangent at=A](O)| and |\tkzDefLine[tangent from=P](O,A)| which did not works;
+%
+%
+% \item | \tkzDefTangent| is replaced by |\tkzDefLine[tangent from = ...]| or |\tkzDefLine[tangent at = ...]|;
+%
+%
+% \item I added the macro |\tkzPicAngle[tikz options](A,B,C)| for those who prefer to use \TIKZ ;
+%
+%
+% \item The macro |\tkzMarkAngle| has been corrected;
+%
+% \item The macro linked to the \tkzname{apollonius} option of the |\tkzDefCircle| command has been rewritten;
+%
+% \item (4.23) The macro |\tkzDrawSemiCircle| has been corrected;
+%
+% \item
+% The order of the arguments of the macro \tkzcname{tkzDefPointOnCircle} has changed: now it is center, angle and point or radius.
+% I have added two options for working with radians which are \tkzname{through in rad} and \tkzname{R in rad}.
+%
+%
+% \item I added the option \tkzname{reverse} to the arcs paths. This allows to reverse the path and to reverse if necessary the arrows that would be present.
+%
+%
+% \item I have unified the styles for the labels. There is now only \tkzname{label style} left which is valid for points, segments, lines, circles and angles. I have deleted \tkzname{label seg style} \tkzname{label line style} and \tkzname{label angle style}
+%
+% \item I added the macro |tkzFillAngles| to use several angles.
+%
+% \item Correction option \tkzname{return} witk \tkzcname{tkzProtractor}
+%
+% As a reminder, the following changes have been made previously:
+%
+% \item |\tkzDrawMedian|, |\tkzDrawBisector|, |\tkzDrawAltitude|, |\tkzDrawMedians|, |\tkzDrawBisectors| and |\tkzDrawAltitudes| do not exist anymore. The creation and drawing separation is not respected so it is preferable to first create the coordinates of these points with |\tkzDefSpcTriangle[median]| and then to choose the ones you are going to draw with |\tkzDrawSegments| or |\tkzDrawLines|;
+%
+% \item |\tkzDrawTriangle| has been deleted. |\tkzDrawTriangle[equilateral]| was handy but it is better to get the third point with |\tkzDefTriangle[equilateral]| and then draw with |\tkzDrawPolygon|; idem for |\tkzDrawSquare| and |\tkzDrawGoldRectangle|;
+%
+%
+% \item The circle inversion was badly defined so I rewrote the macro. The input arguments are always the center and a point of the circle, the output arguments are the center of the image circle and a point of the image circle or two points of the image line if the antecedent circle passes through the pole of the inversion. If the circle passes the inversion center, the image is a straight line, the validity of the procedure depends on the choice of the point on the antecedent circle;
+%
+% \item Correct allocation for gold sublime and euclide triangles;
+%
+%
+% \item I added the option \code{next to} for the intersections LC and CC;
+%
+%
+% \item Correction option isoceles right;
+%
+% \item (4.22 and 4.23) Correction of the macro |\tkzMarkAngle|;
+%
+%
+% \item |\tkzDefMidArc(O,A,B)| gives the middle of the arc center $O$ from $A$ to $B$;
+%
+% \item Good news : Some useful tools have been added. They are present on an experimental basis and will undoubtedly need to be improved;
+%
+%
+% \item The options \code{orthogonal from} and \code{through} depend now of \tkzcname{tkzDefCircleBy}
+%
+% \begin{enumerate}
+%
+% \item |\tkzDotProduct(A,B,C)| computes the scalar product in an orthogonal reference system of the vectors $\overrightarrow{A,B}$ and $\overrightarrow{A,C}$.
+%
+% |\tkzDotProduct(A,B,C)=aa'+bb' if vec{AB} =(a,b) and vec{AC} =(a',b')|
+%
+%
+% \item |\tkzPowerCircle(A)(B,C)| power of point $A$ with respect to the circle of center $B$ passing through $C$;
+%
+%
+% \item |\tkzDefRadicalAxis(A,B)(C,D)| Radical axis of two circles of center $A$ and $C$;
+%
+%
+% \item (4.23) The macro |tkzDefRadicalAxis| has been completed
+%
+% \item Some tests : |\tkzIsOrtho(A,B,C)| and |\tkzIsLinear(A,B,C)| The first indicates whether the lines $(A,B)$ and $(A,C)$ are orthogonal. The second indicates whether the points $A$, $B$ and $C$ are aligned;
+%
+% |\tkzIsLinear(A,B,C)| if $A$,$B$,$C$ are aligned then |\tkzLineartrue|
+% you can use |\iftkzLinear| (idem for |\tkzIsOrtho|);
+%
+% \item A style for vectors has been added that you can of course modify
+%
+% |tikzset{vector style/.style={>=Latex,->}}|;
+%
+%
+% \item Now it's possible to add an arrow on a line or a circle with the option |tkz arrow|.
+% \end{enumerate}
+% \end{itemize}
+%
+% % subsection with_4_2_version (end)
+% \subsection{Changes with previous versions} % (fold)
+% \label{sub:changes_with_previous_versions}
+%
+% \vspace{1cm}
+% \begin{itemize}\setlength{\itemsep}{10pt}
+%
+% \item I remind you that an important novelty is the recent replacement of the \tkzNamePack{fp} package by \tkzNamePack{xfp}. This is to improve the calculations a little bit more and to make it easier to use;
+%
+%
+% \item First of all, you don’t have to deal with \TIKZ\ the size of the bounding box. Early versions of \tkzname{\tkznameofpack} did not control the size of the bounding box, The bounding box is now controlled in each macro (hopefully) to avoid the use of \tkzcname{tkzInit} followed by \tkzcname{tkzClip};
+%
+% \item With \tkzimp{tkz-euclide} loads all objects, so there's no need to place \tkzcname{usetkzobj\{all\}};
+%
+% \item Added macros for the bounding box: \tkzcname{tkzSaveBB} \tkzcname{tkzClipBB} and so on;
+%
+% \item Logically most macros accept \TIKZ\ options. So I removed the \code{duplicate} options when possible thus the \code{label options} option is removed;
+%
+% \item The unit is now the cm;
+%
+% \item |\tkzCalcLength| |\tkzGetLength| gives result in cm;
+%
+% \item |\tkzMarkArc| and |\tkzLabelArc| are new macros;
+%
+% \item Now |\tkzClipCircle| and |\tkzClipPolygon| have an option \tkzimp{out}. To use this option you must have a Bounding Box that contains the object on which the Clip action will be performed. This can be done by using an object that encompasses the figure or by using the macro \tkzcname{tkzInit};
+%
+%
+% \item The options \tkzname{end} and \tkzname{start} which allowed to give a label to a straight line are removed. You now have to use the macro \tkzcname{tkzLabelLine};
+%
+% \item Introduction of the libraries \NameLib{quotes} and \NameLib{angles}; it allows to give a label to a point, even if I am not in favour of this practice;
+%
+% \item The notion of vector disappears, to draw a vector just pass "->" as an option to \tkzcname{tkzDrawSegment};
+%
+%
+% \item |\tkzDefIntSimilitudeCenter| and |\tkzDefExtSimilitudeCenter| do not exist anymore, now you need to use |\tkzDefSimilitudeCenter[int]| or |\tkzDefSimilitudeCenter[ext]|;
+%
+% \item |\tkzDefRandPointOn| is replaced by |\tkzGetRandPointOn|;
+%
+%
+% \item An option of the macro \tkzcname{tkzDefTriangle} has changed, in the previous version the option was \code{euclide} with an \code{e}. Now it's \code{euclid};
+%
+% \item Random points are now in \tkzname{\tkznameofpack} and the macro \tkzcname{tkzGetRandPointOn} is replaced by
+%
+% \tkzcname{tkzDefRandPointOn}. For homogeneity reasons, the points must be retrieved with \tkzcname{tkzGetPoint};
+%
+% \item New macros have been added : \tkzcname{tkzDrawSemiCircles}, \tkzcname{tkzDrawPolygons}, \tkzcname{tkzDrawTriangles};
+%
+%
+% \item Option \code{isosceles right} is a new option of the macro \tkzcname{tkzDefTriangle};
+%
+% \item Appearance of the macro \tkzcname{usetkztool} which allows to load new \code{tools};
+%
+% \item The styles can be modified with the help of the following macros : \tkzcname{tkzSetUpPoint}, \tkzcname{tkzSetUpLine}, \tkzcname{tkzSetUpArc}, \tkzcname{tkzSetUpCompass}, \tkzcname{tkzSetUpLabel} and \tkzcname{tkzSetUpStyle}. The last one allows you to create a new style.
+% \end{itemize}
+% % subsection changes_with_previous_versions (end)
\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-pointby.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-pointby.tex
index 67e357c625..407d7a3b67 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-pointby.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-pointby.tex
@@ -104,7 +104,7 @@ options & & examples \\
\subsubsection{\tkzname{projection}}
\begin{tkzexample}[latex=7cm,small]
-\begin{tikzpicture}[scale=1.5]
+\begin{tikzpicture}[scale=1.25]
\tkzDefPoints{0/0/A,0/4/B}
\tkzDefTriangle[pythagore](B,A) \tkzGetPoint{C}
\tkzDefLine[bisector](B,C,A) \tkzGetPoint{c}
@@ -116,7 +116,7 @@ options & & examples \\
\tkzDrawSegment(C,D)
\tkzDrawCircle(D,A)
\tkzDrawSegment[new](D,G)
- \tkzMarkRightAngle[fill=orange!10,opacity=.4](D,G,B)
+ \tkzMarkRightAngle[fill=orange!10](D,G,B)
\tkzDrawPoints(A,C,F) \tkzLabelPoints(A,C,F)
\tkzDrawPoints(B,D,E,G)
\tkzLabelPoints[above right](B,D,E)
@@ -143,7 +143,7 @@ options & & examples \\
\subsubsection{\tkzname{rotation} }
\begin{tkzexample}[latex=7cm,small]
-\begin{tikzpicture}[scale=0.5]
+\begin{tikzpicture}[scale=0.75]
\tkzDefPoints{0/0/A,5/0/B}
\tkzDrawSegment(A,B)
\tkzDefPointBy[rotation=center A angle 60](B)
@@ -199,6 +199,7 @@ options & & examples \\
Inversion is the process of transforming points to a corresponding set of points known as their inverse points. Two points $P$ and $P'$ are said to be inverses with respect to an inversion circle having inversion center $O$ and inversion radius $k$ if $P'$ is the perpendicular foot of the altitude of $OQP$, where $Q$ is a point on the circle such that $OQ$ is perpendicular to $PQ$.\\
The quantity $k^2$ is known as the circle power (Coxeter 1969, p. 81).
+
(\url{https://mathworld.wolfram.com/Inversion.html})
Some propositions :
@@ -273,7 +274,7 @@ Directly
\subsubsection{\tkzname{inversion of lines} ex 2}
\begin{tkzexample}[latex=6cm,small]
-\begin{tikzpicture}[scale=.5]
+\begin{tikzpicture}[scale=.8]
\tkzDefPoints{0/0/O,3/0/I,3/2/P,3/-2/Q}
\tkzDrawCircle(O,I)
\tkzDefPointBy[projection= onto P--Q](O) \tkzGetPoint{A}
@@ -292,7 +293,7 @@ Directly
\subsubsection{\tkzname{inversion of lines} ex 3}
\begin{tkzexample}[latex=6cm,small]
-\begin{tikzpicture}[scale=.5]
+\begin{tikzpicture}[scale=.8]
\tkzDefPoints{0/0/O,3/0/I,2/1/P,2/-2/Q}
\tkzDrawCircle(O,I)
\tkzDefPointBy[projection= onto P--Q](O) \tkzGetPoint{A}
@@ -311,7 +312,7 @@ Directly
\subsubsection{\tkzname{inversion} of circle and \tkzname{homothety} }
\begin{tkzexample}[latex=7cm,small]
-\begin{tikzpicture}[scale=.75]
+\begin{tikzpicture}[scale=.7]
\tkzDefPoints{0/0/O,3/2/A,2/1/P}
\tkzDefLine[tangent from = O](A,P) \tkzGetPoints{T}{X}
\tkzDefPointsBy[homothety = center O%
@@ -319,7 +320,7 @@ Directly
\tkzInterCC(A,P)(A',P') \tkzGetPoints{C}{D}
\tkzCalcLength(A,P)
\tkzGetLength{rAP}
-\tkzDefPointOnCircle[R= center A angle 190 radius \rAP]
+\tkzDefPointOnCircle[R=center A angle 190 radius \rAP]
\tkzGetPoint{M}
\tkzDefPointBy[inversion = center O through C](M)
\tkzGetPoint{M'}
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-points.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-points.tex
index 2741872f8c..c8a45d5ea4 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-points.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-points.tex
@@ -6,7 +6,7 @@ The general idea is to avoid manipulating coordinates and to prefer to use the r
\tkzname{\tkznameofpack} uses macros and vocabulary specific to geometric construction. It is of course possible to use the tools of \TIKZ\ but it seems more logical to me not to mix the different syntaxes.
-A point in \tkzname{\tkznameofpack} is a particular "node" for \TIKZ. In the next section we will see how to define points using coordinates. The style of the points (color and shape) will not be discussed. You will find some indications in some examples; for more information you can read the following section \ref{custom}.
+A point in \tkzname{\tkznameofpack} is a particular \code{node} for \TIKZ. In the next section we will see how to define points using coordinates. The style of the points (color and shape) will not be discussed. You will find some indications in some examples; for more information you can read the following section \ref{custom}.
\section{Definition of a point : \tkzcname{tkzDefPoint} or \tkzcname{tkzDefPoints}}
@@ -36,7 +36,7 @@ A point is defined if it has a name linked to a unique pair of decimal numbers.
\tkzNameMacro{coordinate}, a macro of \TIKZ. It can use \TIKZ-specific options such as \tkzname{shift}. If calculations are required then the \tkzNamePack{xfp} package is chosen. We can use Cartesian or polar coordinates.
-\begin{minipage}[t]{0.45\textwidth}
+\begin{minipage}[t]{0.48\textwidth}
Cartesian coordinates
\begin{tkzexample}[code only,small]
\begin{tikzpicture}[scale=1]
@@ -48,7 +48,7 @@ A point is defined if it has a name linked to a unique pair of decimal numbers.
\tkzDefPoints{0/0/O,1/0/I,0/1/J}
\tkzDefPoint(3,4){A}
\tkzDrawPoints(O,A)
- \tkzLabelPoint[above](A){$A_1 (x_1,y_1)$}
+ \tkzLabelPoint[above](A){$A_1(x_1,y_1)$}
\tkzShowPointCoord[xlabel=$x_1$,
ylabel=$y_1$](A)
\tkzLabelPoints(O,I)
@@ -60,7 +60,7 @@ A point is defined if it has a name linked to a unique pair of decimal numbers.
\begin{minipage}[t]{0.45\textwidth}
Polar coordinates
\begin{tkzexample}[code only,small]
-\begin{tikzpicture}[,scale=1]
+\begin{tikzpicture}[scale=1]
\tkzInit[xmax=5,ymax=5]
\tkzDrawX[>=latex]
\tkzDrawY[>=latex]
@@ -73,7 +73,7 @@ A point is defined if it has a name linked to a unique pair of decimal numbers.
\tkzFillAngle[opacity=.5](I,O,P)
\tkzLabelAngle[pos=1.25](I,O,P){%
$\alpha$}
- \tkzLabelPoint[right](P){$P (\alpha : d )$}
+ \tkzLabelPoint[right](P){$P(\alpha:d)$}
\tkzDrawPoints[shape=cross](I,J)
\tkzLabelPoints(O,I)
\tkzLabelPoints[left](J)
@@ -143,7 +143,7 @@ options & default & definition \\
\subsubsection{Cartesian coordinates }
-\begin{tkzexample}[latex=5cm,small]
+\begin{tkzexample}[latex=6cm,small]
\begin{tikzpicture}
\tkzInit[xmax=5,ymax=5] % limits the size of the axes
\tkzDrawX[>=latex]
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-pointsSpc.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-pointsSpc.tex
index 15529b33eb..7d0b23f4c9 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-pointsSpc.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-pointsSpc.tex
@@ -1,6 +1,6 @@
Now that the fixed points are defined, we can with their references using macros from the package or macros that you will create get new points. The calculations may not be apparent but they are usually done by the package.
You may need to use some mathematical constants, here is the list of constants defined by the package.
-You may need to use some mathematical constants, here is the list of constants defined by the package.
+
\section{Auxiliary tools}
\subsection{Constants}
@@ -34,10 +34,10 @@ arguments & default & example \\
\end{tabular}
\end{NewMacroBox}
-Sometimes you need to get two points. It's possible with
+Sometimes you need to get two points. It's possible with
\begin{NewMacroBox}{tkzGetPoints}{\marg{ref1}\marg{ref2}}%
-The result is in \tkzname{tkzPointFirstResult} and \tkzname{tkzPointSecondResult}.
+The result is in \tkzname{tkzPointFirstResult} and \tkzname{tkzPointSecondResult}.
\medskip
\begin{tabular}{lll}%
@@ -51,7 +51,7 @@ arguments & default & example \\
If you need only the first or the second point you can also use :
\begin{NewMacroBox}{tkzGetFirstPoint}{\marg{ref1}}%
-
+
\medskip
\begin{tabular}{lll}%
\toprule
@@ -75,7 +75,7 @@ arguments & default & example \\
Sometimes the results consist of a point and a dimension. You get the point with \tkzcname{tkzGetPoint} and the dimension with \tkzcname{tkzGetLength}.
\begin{NewMacroBox}{tkzGetLength}{\marg{name of a macro}}%
-
+
\medskip
\begin{tabular}{lll}%
\toprule
@@ -112,7 +112,7 @@ Review the use of \tkzcname{tkzDefPoint}.
\begin{tikzpicture}[scale=1]
\tkzDefPoint(2,3){A}
\tkzDefPoint(6,2){B}
- \tkzDefMidPoint(A,B)
+ \tkzDefMidPoint(A,B)
\tkzGetPoint{M}
\tkzDrawSegment(A,B)
\tkzDrawPoints(A,B,M)
@@ -146,7 +146,7 @@ $AB=a$, $BC=b$ and $\dfrac{AC}{AB} = \dfrac{AB}{BC} =\phi$
\begin{tikzpicture}
\tkzDefPoints{0/0/A,6/0/C}
\tkzDefMidPoint(A,C) \tkzGetPoint{I}
- %\tkzDefPointWith[linear,K=\tkzInvPhi](A,C)
+ %\tkzDefPointWith[linear,K=\tkzInvPhi](A,C)
\tkzDefGoldenRatio(A,C) \tkzGetPoint{B}
\tkzDrawSegments(A,C)
\tkzDrawPoints(A,B,C)
@@ -242,30 +242,35 @@ The centers of the two homotheties in which two circles correspond are called ex
arguments & example & explanation \\
\midrule
\TAline{\parg{pt1,pt2}\parg{pt3,pt4}}{$(O,A)(O',B)$} {$r=OA,r'=O'B$}
-\end{tabular}
-
+\end{tabular}
+
\medskip
\begin{tabular}{lll}%
\toprule
-options & default & definition \\
+options & default & definition \\
\midrule
\TOline{ext}{ext}{external center}
\TOline{int}{ext}{internal center}
\end{tabular}
-\end{NewMacroBox}
+\end{NewMacroBox}
\subsubsection{Internal and external with \tkzname{node}}
-\begin{tkzexample}[latex=7cm,small]
-\begin{tikzpicture}[scale=.75]
+\begin{tkzexample}[latex=7.5cm,small]
+\begin{tikzpicture}[scale=.7]
\tkzDefPoints{0/0/O,4/-5/A,3/0/B,5/-5/C}
-\tkzDefSimilitudeCenter[int](O,B)(A,C) \tkzGetPoint{I}
- \tkzDefSimilitudeCenter[ext](O,B)(A,C) \tkzGetPoint{J}
- \tkzDefLine[tangent from = I](O,B) \tkzGetPoints{D}{E}
- \tkzDefLine[tangent from = I](A,C) \tkzGetPoints{D'}{E'}
- \tkzDefLine[tangent from = J](O,B) \tkzGetPoints{F}{G}
- \tkzDefLine[tangent from = J](A,C)
+ \tkzDefSimilitudeCenter[int](O,B)(A,C)
+ \tkzGetPoint{I}
+ \tkzDefSimilitudeCenter[ext](O,B)(A,C)
+ \tkzGetPoint{J}
+ \tkzDefLine[tangent from = I](O,B)
+ \tkzGetPoints{D}{E}
+ \tkzDefLine[tangent from = I](A,C)
+ \tkzGetPoints{D'}{E'}
+ \tkzDefLine[tangent from = J](O,B)
+ \tkzGetPoints{F}{G}
+ \tkzDefLine[tangent from = J](A,C)
\tkzGetPoints{F'}{G'}
- \tkzDrawCircles(O,B A,C)
+ \tkzDrawCircles(O,B A,C)
\tkzDrawSegments[add = .5 and .5,new](D,D' E,E')
\tkzDrawSegments[add= 0 and 0.25,new](J,F J,G)
\tkzDrawPoints(O,A,I,J,D,E,F,G,D',E',F',G')
@@ -304,10 +309,10 @@ You can use \tkzcname{tkzDefBarycentricPoint} to find a homothetic center
\begin{tikzpicture}[rotate=60,scale=.5]
\tkzDefPoints{0/0/A,5/0/C}
\tkzDefGoldenRatio(A,C) \tkzGetPoint{B}
- \tkzDefSimilitudeCenter(A,B)(C,B) \tkzGetPoint{J}
- \tkzDefTangent[from = J](A,B) \tkzGetPoints{F}{G}
- \tkzDefTangent[from = J](C,B) \tkzGetPoints{F'}{G'}
- \tkzDrawCircles(A,B C,B)
+ \tkzDefSimilitudeCenter(A,B)(C,B)\tkzGetPoint{J}
+ \tkzDefTangent[from = J](A,B) \tkzGetPoints{F}{G}
+ \tkzDefTangent[from = J](C,B) \tkzGetPoints{F'}{G'}
+ \tkzDrawCircles(A,B C,B)
\tkzDrawSegments[add= 0 and 0.25,cyan](J,F J,G)
\tkzDrawPoints(A,J,F,G,F',G')
\end{tikzpicture}
@@ -318,15 +323,15 @@ You can use \tkzcname{tkzDefBarycentricPoint} to find a homothetic center
%<---------------------------------------------------------------------->
\begin{NewMacroBox}{tkzDefHarmonic}{\oarg{options}\parg{pt1,pt2,pt3} or \parg{pt1,pt2,k}}%
-
+
\begin{tabular}{lll}%
-options & default & definition \\
+options & default & definition \\
\midrule
\TOline{both}{both}{\parg{A,B,2} we look for C and D such that $(A,B;C,D) = -1$ and CA=2CB }
\TOline{ext}{both}{\parg{A,B,C} we look for D such that $(A,B;C,D) = -1$}
\TOline{int}{both}{\parg{A,B,D} we look for C such that $(A,B;C,D) = -1$}
\end{tabular}
-\end{NewMacroBox}
+\end{NewMacroBox}
\subsubsection{options \tkzname{ext} and \tkzname{int}}
\begin{tkzexample}[vbox,small]
@@ -448,7 +453,7 @@ arguments & default & definition \\
\tkzInterLL(B,Q)(A,P) \tkzGetPoint{S}
\tkzDefMidPoint(P_2',P_1') \tkzGetPoint{o}
\tkzDefPointBy[inversion = center A through D](S) \tkzGetPoint{S'}
- \tkzDrawArc[cyan,delta=0](Q,A)(P_1)
+ \tkzDrawArc[cyan,delta=0](Q,A)(P_1)
\tkzDrawArc[cyan,delta=0](P,P_1)(B)
\tkzDrawSemiCircles[teal](O_1,B O_2,C O_3,B)
\tkzDrawCircles[new](o,P O_4,P_1)
@@ -531,7 +536,7 @@ options & default & examples definition \\
\begin{tkzexample}[latex=6cm,small]
\begin{tikzpicture}[scale=.4]
\tkzDefPoints{0/0/P,5/0/Q,3/2/I}
-\tkzDefCircle[orthogonal from=P](Q,I)
+\tkzDefCircle[orthogonal from=P](Q,I)
\tkzGetFirstPoint{E}
\tkzDrawCircles(P,E Q,E)
\tkzInterCC[common=E](P,E)(Q,E) \tkzGetFirstPoint{F}
@@ -546,18 +551,18 @@ options & default & examples definition \\
\tkzLabelPoints(P,Q,F,C,D)
\tkzLabelPoints[above](E,A)
\end{tikzpicture}
-\end{tkzexample}
-
+\end{tkzexample}
+
\subsubsection{Use of \tkzcname{tkzDefPointOnCircle}}
-\begin{tkzexample}[latex=7cm,small]
+\begin{tkzexample}[latex=6cm,small]
\begin{tikzpicture}
-\tkzDefPoints{0/0/A,4/0/B,0.8/3/C}
+\tkzDefPoints{0/0/A,4/0/B,0.8/3/C}
\tkzDefPointOnCircle[R = center B angle 90 radius 1]
\tkzGetPoint{I}
\tkzDefCircle[circum](A,B,C)
\tkzGetPoints{G}{g}
-\tkzDefPointOnCircle[through = center G angle 30 point g]
+\tkzDefPointOnCircle[through = center G angle 30 point g]
\tkzGetPoint{J}
\tkzDefCircle[R](B,1) \tkzGetPoint{b}
\tkzDrawCircle[teal](B,b)
@@ -620,7 +625,7 @@ options & default & definition \\
\tkzGetPoint{H}
\tkzDefSpcTriangle[orthic,name=H](A,B,C){a,b,c}
\tkzDrawPolygon(A,B,C)
- \tkzDrawSegments[new](A,Ha B,Hb C,Hc)
+ \tkzDrawSegments[new](A,Ha B,Hb C,Hc)
\tkzDrawPoints(A,B,C,H)
\tkzLabelPoint(H){$H$}
\tkzLabelPoints[below](A,B)
@@ -659,16 +664,16 @@ options & default & definition \\
In geometry, the incircle or inscribed circle of a triangle is the largest circle contained in the triangle; it touches (is tangent to) the three sides. The center of the incircle is a triangle center called the triangle's incenter.
The center of the incircle, called the incenter, can be found as the intersection of the three internal angle bisectors. The center of an excircle is the intersection of the internal bisector of one angle (at vertex $A$, for example) and the external bisectors of the other two. The center of this excircle is called the excenter relative to the vertex $A$, or the excenter of $A$. Because the internal bisector of an angle is perpendicular to its external bisector, it follows that the center of the incircle together with the three excircle centers form an orthocentric system.\\
(Article on \href{https://en.wikipedia.org/wiki/Incircle_and_excircles_of_a_triangle}{Wikipedia})
-
+
\medskip
We get the center of the inscribed circle of the triangle. The result is of course in \tkzname{tkzPointResult}. We can retrieve it with \tkzcname{tkzGetPoint}.
-\begin{tkzexample}[latex=8cm,small]
+\begin{tkzexample}[latex=7cm,small]
\begin{tikzpicture}
\tkzDefPoints{0/0/A,6/0/B,0.8/4/C}
-\tkzDefTriangleCenter[in](A,B,C)
+\tkzDefTriangleCenter[in](A,B,C)
\tkzGetPoint{I}
-\tkzDrawLines(A,B B,C C,A)
+\tkzDrawLines(A,B B,C C,A)
\tkzDefCircle[in](A,B,C) \tkzGetPoints{I}{i}
\tkzDrawCircle(I,i)
\tkzDrawPoint[red](I)
@@ -702,11 +707,11 @@ An excircle or escribed circle of the triangle is a circle lying outside the tri
\subsubsection{Option \tkzname{euler}}
This macro allows to obtain the center of the circle of the nine points or euler's circle or Feuerbach's circle. The nine-point circle, also called Euler's circle or the Feuerbach circle, is the circle that passes through the perpendicular feet $H_A$, $H_B$, and $H_C$ dropped from the vertices of any reference triangle $ABC$ on the sides opposite them. Euler showed in 1765 that it also passes through the midpoints $M_A$, $M_B$, $M_C$ of the sides of $ABC$. By Feuerbach's theorem, the nine-point circle also passes through the midpoints $E_A$, $E_B$, and $E_C$ of the segments that join the vertices and the orthocenter $H$. These points are commonly referred to as the Euler points.\\ (\url{https://mathworld.wolfram.com/Nine-PointCircle.html})
-\begin{tkzexample}[latex=5cm,small]
-\begin{tikzpicture}[scale=1,rotate=90]
+\begin{tkzexample}[latex=6cm,small]
+\begin{tikzpicture}[scale=1.2,rotate=90]
\tkzDefPoints{0/0/A,6/0/B,0.8/4/C}
\tkzDefSpcTriangle[medial,name=M](A,B,C){_A,_B,_C}
- \tkzDefTriangleCenter[euler](A,B,C)\tkzGetPoint{N}
+ \tkzDefTriangleCenter[euler](A,B,C)\tkzGetPoint{N}
% I= N nine points
\tkzDefTriangleCenter[ortho](A,B,C)\tkzGetPoint{H}
\tkzDefMidPoint(A,H) \tkzGetPoint{E_A}
@@ -721,7 +726,8 @@ This macro allows to obtain the center of the circle of the nine points or euler
\tkzDrawPoints( H_A,H_B,H_C)
\tkzDrawPoints[green](E_A,E_B,E_C)
\tkzAutoLabelPoints[center=N,
- font=\scriptsize](A,B,C,M_A,M_B,M_C,H_A,H_B,H_C,E_A,E_B,E_C)
+ font=\scriptsize](A,B,C,M_A,M_B,M_C,H_A,H_B,H_C,%
+ E_A,E_B,E_C)
\tkzLabelPoints[font=\scriptsize](H,N)
\tkzMarkSegments[mark=s|,size=3pt,
color=blue,line width=1pt](B,E_B E_B,H)
@@ -732,15 +738,17 @@ This macro allows to obtain the center of the circle of the nine points or euler
\subsubsection{Option \tkzname{symmedian}}
The point of concurrence $K$ of the symmedians, sometimes also called the Lemoine point (in England and France) or the Grebe point (in Germany).\\
-\href{https://mathworld.wolfram.com/SymmedianPoint.html}{Weisstein, Eric W. "Symmedian Point." From MathWorld--A Wolfram Web Resource.}
+\href{https://mathworld.wolfram.com/SymmedianPoint.html}{Weisstein, Eric W. "Symmedian Point." From MathWorld--A Wolfram Web Resource.}
-\begin{tkzexample}[latex=6cm,small]
+\begin{tkzexample}[latex=7cm,small]
\begin{tikzpicture}
\tkzDefPoint(0,0){A}
\tkzDefPoint(5,0){B}
\tkzDefPoint(1,4){C}
- \tkzDefTriangleCenter[symmedian](A,B,C)\tkzGetPoint{K}
- \tkzDefTriangleCenter[median](A,B,C)\tkzGetPoint{G}
+ \tkzDefTriangleCenter[symmedian](A,B,C)
+ \tkzGetPoint{K}
+ \tkzDefTriangleCenter[median](A,B,C)
+ \tkzGetPoint{G}
\tkzDefTriangleCenter[in](A,B,C)\tkzGetPoint{I}
\tkzDefSpcTriangle[centroid,name=M](A,B,C){a,b,c}
\tkzDefSpcTriangle[incentral,name=I](A,B,C){a,b,c}
@@ -762,9 +770,9 @@ The Spieker center is the center $Sp$ of the Spieker circle, i.e., the incenter
\begin{tikzpicture}
\tkzDefPoints{0/0/A,6/0/B,5/5/C}
\tkzDefSpcTriangle[medial](A,B,C){Ma,Mb,Mc}
- \tkzDefTriangleCenter[centroid](A,B,C)
+ \tkzDefTriangleCenter[centroid](A,B,C)
\tkzGetPoint{G}
- \tkzDefTriangleCenter[spieker](A,B,C)
+ \tkzDefTriangleCenter[spieker](A,B,C)
\tkzGetPoint{Sp}
\tkzDrawPolygon[](A,B,C)
\tkzDrawPolygon[new](Ma,Mb,Mc)
@@ -780,13 +788,13 @@ The Spieker center is the center $Sp$ of the Spieker circle, i.e., the incenter
\subsubsection{Option \tkzname{gergonne}}
-The Gergonne Point is the point of concurrency which results from connecting the vertices of a triangle to the opposite points of tangency of the triangle's incircle.
+The Gergonne Point is the point of concurrency which results from connecting the vertices of a triangle to the opposite points of tangency of the triangle's incircle.
(Joseph Gergonne French mathematician )
\begin{tkzexample}[latex=8cm,small]
\begin{tikzpicture}
\tkzDefPoints{0/0/B,3.6/0/C,2.8/4/A}
-\tkzDefTriangleCenter[gergonne](A,B,C)
+\tkzDefTriangleCenter[gergonne](A,B,C)
\tkzGetPoint{Ge}
\tkzDefSpcTriangle[intouch](A,B,C){C_1,C_2,C_3}
\tkzDefCircle[in](A,B,C) \tkzGetPoints{I}{i}
@@ -809,7 +817,7 @@ Let $Ta$ be the point at which the excircle with center $Ja$ meets the side $BC$
\tkzDefPoints{0/0/A,6/0/B,4/6/C}
\tkzDefSpcTriangle[ex](A,B,C){Ja,Jb,Jc}
\tkzDefSpcTriangle[extouch](A,B,C){Ta,Tb,Tc}
- \tkzDefTriangleCenter[nagel](A,B,C)
+ \tkzDefTriangleCenter[nagel](A,B,C)
\tkzGetPoint{Na}
\tkzDrawPolygon[blue](A,B,C)
\tkzDrawLines[add=0 and 1](A,Ta B,Tb C,Tc)
@@ -829,7 +837,7 @@ Let $Ta$ be the point at which the excircle with center $Ja$ meets the side $BC$
\end{tkzexample}
-\subsubsection{Option \tkzname{mittenpunkt}}
+\subsubsection{Option \tkzname{mittenpunkt}}
The mittenpunkt (also called the middlespoint) of a triangle $ABC$ is the symmedian point of the excentral triangle, i.e., the point of concurrence M of the lines from the excenters through the corresponding triangle side midpoints.\\
\href{https://mathworld.wolfram.com/Mittenpunkt.html}{Weisstein, Eric W. "Mittenpunkt." From MathWorld--A Wolfram Web Resource.}
@@ -841,12 +849,12 @@ The mittenpunkt (also called the middlespoint) of a triangle $ABC$ is the symmed
\tkzDefSpcTriangle[centroid](A,B,C){Ma,Mb,Mc}
\tkzDefSpcTriangle[ex](A,B,C){Ja,Jb,Jc}
\tkzDefSpcTriangle[extouch](A,B,C){Ta,Tb,Tc}
- \tkzDefTriangleCenter[mittenpunkt](A,B,C)
+ \tkzDefTriangleCenter[mittenpunkt](A,B,C)
\tkzGetPoint{Mi}
\tkzDrawPoints[new](Ma,Mb,Mc,Ja,Jb,Jc)
\tkzClipBB
\tkzDrawPolygon[blue](A,B,C)
- \tkzDrawLines[add=0 and 1](Ja,Ma
+ \tkzDrawLines[add=0 and 1](Ja,Ma
Jb,Mb Jc,Mc)
\tkzDrawLines[add=1 and 1](A,B A,C B,C)
\tkzDrawCircles[new](Ja,Ta Jb,Tb Jc,Tc)
@@ -867,9 +875,9 @@ The Gergonne point $Ge$, triangle centroid $G$, and mittenpunkt $M$ are collinea
\begin{tikzpicture}
\tkzDefPoints{0/0/A,2/2/B,8/0/C}
\tkzDefTriangleCenter[gergonne](A,B,C) \tkzGetPoint{Ge}
-\tkzDefTriangleCenter[centroid](A,B,C)
+\tkzDefTriangleCenter[centroid](A,B,C)
\tkzGetPoint{G}
-\tkzDefTriangleCenter[mittenpunkt](A,B,C)
+\tkzDefTriangleCenter[mittenpunkt](A,B,C)
\tkzGetPoint{M}
\tkzDrawLines[add=.25 and .25,teal](A,B A,C B,C)
\tkzDrawLines[add=.25 and .25,new](Ge,M)
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-polygons.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-polygons.tex
index 95df8ef060..b5bbbcc91f 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-polygons.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-polygons.tex
@@ -191,8 +191,8 @@ From the number of sides, depending on the options, this macro determines a regu
\toprule
arguments & example & explanation \\
\midrule
-\TAline{\parg{pt1,pt2}}{\parg{O,A}}{with option "center", $O$ is the center of the polygon.}
-\TAline{\parg{pt1,pt2}}{\parg{A,B}}{with option "side", $[AB]$ is a side.}
+\TAline{\parg{pt1,pt2}}{\parg{O,A}}{with option \code{center}, $O$ is the center of the polygon.}
+\TAline{\parg{pt1,pt2}}{\parg{A,B}}{with option \code{side}, $[AB]$ is a side.}
\end{tabular}
\medskip
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-presentation.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-presentation.tex
index 0073d78803..027cb7ea0d 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-presentation.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-presentation.tex
@@ -51,27 +51,27 @@ Here are some comparisons between \tkzname{\TIKZ } and \tkzname{\tkznameofpack}
Explanation :
-The fourth tutorial of the \emph{PgfManual} is about geometric constructions. \emph{T. Tantau} proposes to get the drawing with its beautiful tool Ti\emph{k}Z. Here I propose the same construction with \emph{tkz-elements}. The color of the Ti\emph{k}Z code is orange and that of \emph{tkz-elements} is red.
+The fourth tutorial of the \emph{PgfManual} is about geometric constructions. \emph{T. Tantau} proposes to get the drawing with its beautiful tool Ti\emph{k}Z. Here I propose the same construction with \emph{tkz-elements}. The color of the Ti\emph{k}Z code is green!50!black and that of \emph{tkz-elements} is red.
\medskip
-\hspace*{1cm}\vbox{\color{orange} |\usepackage{tikz}|\\
+\vbox{\color{green!50!black} |\usepackage{tikz}|\\
|\usetikzlibrary{calc,intersections,through,backgrounds}|}
\medskip
-\hspace*{1cm}\vbox{\color{red} |\usepackage{tkz-euclide}|}
+\vbox{\color{red} |\usepackage{tkz-euclide}|}
\medskip
How to get the line AB ? To get this line, we use two fixed points.\\
\medskip
-\hspace*{1cm}\vbox{\color{orange}
+\vbox{\color{green!50!black}
|\coordinate [label=left:$A$] (A) at (0,0);|\\
|\coordinate [label=right:$B$] (B) at (1.25,0.25);|\\
|\draw (A) -- (B);|}
\medskip
-\hspace*{1cm}\vbox{\color{red}
+\vbox{\color{red}
|\tkzDefPoint(0,0){A}|\\
|\tkzDefPoint(1.25,0.25){B}|\\
|\tkzDrawSegment(A,B)|\\
@@ -81,14 +81,14 @@ How to get the line AB ? To get this line, we use two fixed points.\\
We want to draw a circle around the points $A$ and $B$ whose radius is given by the length of the line AB.
\medskip
-\hspace*{1cm}\vbox{\color{orange}
+\vbox{\color{green!50!black}
|\draw let \p1 = ($ (B) - (A) $),|\\
|\n2 = {veclen(\x1,\y1)} in|\\
| (A) circle (\n2)|\\
| (B) circle (\n2);|}
\medskip
-\hspace*{1cm}\vbox{\color{red}
+\vbox{\color{red}
|\tkzDrawCircles(A,B B,A)|
}
@@ -96,27 +96,27 @@ The intersection of the circles $\mathcal{D}$ and $\mathcal{E}$
\medskip
-\hspace*{1cm}\vbox{\color{orange}
+\vbox{\color{green!50!black}
|draw [name path=A--B] (A) -- (B);|\\
|node (D) [name path=D,draw,circle through=(B),label=left:$D$] at (A) {}; |\\
|node (E) [name path=E,draw,circle through=(A),label=right:$E$] at (B) {};|\\
-|path [name intersections={of=D and E, by={[label=above:$C$]C, [label=below:$C'$]C'}}]; |\\
+|path [name intersections={of=D and E, by={[label=above:$C$]C,[label=below:$C'$]C'}}]; |\\
|draw [name path=C--C',red] (C) -- (C');|\\
|path [name intersections={of=A--B and C--C',by=F}];|\\
|node [fill=red,inner sep=1pt,label=-45:$F$] at (F) {};|\\}
\medskip
-\hspace*{1cm}\vbox{\color{red} |\tkzInterCC(A,B)(B,A) \tkzGetPoints{C}{X}|\\}
+\vbox{\color{red} |\tkzInterCC(A,B)(B,A) \tkzGetPoints{C}{X}|\\}
How to draw points :
\medskip
-\hspace*{1cm}\vbox{\color{orange} |\foreach \point in {A,B,C}|\\
+\vbox{\color{green!50!black} |\foreach \point in {A,B,C}|\\
|\fill [black,opacity=.5] (\point) circle (2pt);|\\}
\medskip
-\hspace*{1cm}\vbox{\color{red}| \tkzDrawPoints[fill=gray,opacity=.5](A,B,C)|\\}
+\vbox{\color{red}| \tkzDrawPoints[fill=gray,opacity=.5](A,B,C)|\\}
\subsubsection{Complete code with \pkg{tkz-euclide}}
@@ -124,12 +124,12 @@ We need to define colors
|\colorlet{input}{red!80!black} |\\
|\colorlet{output}{red!70!black}|\\
-|\colorlet{triangle}{orange!40} |
+|\colorlet{triangle}{green!50!black!40} |
\begin{tkzexample}[vbox,small]
\colorlet{input}{red!80!black}
\colorlet{output}{red!70!black}
- \colorlet{triangle}{orange!40}
+ \colorlet{triangle}{green!50!black!40}
\begin{tikzpicture}[scale=1.25,thick,help lines/.style={thin,draw=black!50}]
\tkzDefPoint(0,0){A}
\tkzDefPoint(1.25+rand(),0.25+rand()){B}
@@ -164,7 +164,7 @@ Explanation
In the first part, we need to find the midpoint of the straight line $AB$. With \TIKZ\ we can use the calc library
\medskip
-\hspace*{1cm}\vbox{\color{orange} |\coordinate [label=left:$A$] (A) at (0,0);|\\
+\vbox{\color{green!50!black} |\coordinate [label=left:$A$] (A) at (0,0);|\\
|\coordinate [label=right:$B$] (B) at (1.25,0.25);|\\
|\draw (A) -- (B);|\\
|\node [fill=red,inner sep=1pt,label=below:$X$] (X) at ($ (A)!.5!(B) $) {};|\\}
@@ -173,40 +173,40 @@ With \pkg{tkz-euclide} we have a macro \tkzcname{tkzDefMidPoint}, we get the poi
\medskip
-\hspace*{1cm}\vbox{\red |\tkzDefPoints{0/0/A,0.75/0.25/B,1/1.5/C}|\\
-|\tkzDefMidPoint(A,B) \tkzGetPoint{X}|}\\
+\vbox{\red |\tkzDefPoints{0/0/A,0.75/0.25/B,1/1.5/C}|\\
+|\tkzDefMidPoint(A,B) \tkzGetPoint{X}|}
\medskip
Then we need to construct a triangle equilateral. It's easy with \pkg{tkz-euclide} . With TikZ you need some effort because you need to use the midpoint $X$ to get the point $D$ with trigonometry calculation.
\medskip
-\hspace*{1cm}\vbox{\color{orange}
+\vbox{\color{green!50!black}
|\node [fill=red,inner sep=1pt,label=below:$X$] (X) at ($ (A)!.5!(B) $) {}; | \\
|\node [fill=red,inner sep=1pt,label=above:$D$] (D) at | \\
|($ (X) ! {sin(60)*2} ! 90:(B) $) {}; | \\
|\draw (A) -- (D) -- (B); | \\
-} \\
+}
\medskip
-\hspace*{1cm}\vbox{\color{red} |\tkzDefTriangle[equilateral](A,B) \tkzGetPoint{D}|}\\
+\vbox{\color{red} |\tkzDefTriangle[equilateral](A,B) \tkzGetPoint{D}|}
We can draw the triangle at the end of the picture with
\medskip
-\hspace*{1cm}\vbox{\color{red} |\tkzDrawPolygon{A,B,C}|}
+\vbox{\color{red} |\tkzDrawPolygon{A,B,C}|}
\medskip
We know how to draw the circle $\mathcal{H}$ around $B$ through $C$ and how to place the points $E$ and $F$
\medskip
-\hspace*{1cm}\vbox{\color{orange}
+\vbox{\color{green!50!black}
|\node (H) [label=135:$H$,draw,circle through=(C)] at (B) {};| \\
|\draw (D) -- ($ (D) ! 3.5 ! (B) $) coordinate [label=below:$F$] (F);| \\
-|\draw (D) -- ($ (D) ! 2.5 ! (A) $) coordinate [label=below:$E$] (E);|} \\
+|\draw (D) -- ($ (D) ! 2.5 ! (A) $) coordinate [label=below:$E$] (E);|}
\medskip
-\hspace*{1cm}\vbox{\color{red} |\tkzDrawCircle(B,C)|\\
+\vbox{\color{red} |\tkzDrawCircle(B,C)|\\
|\tkzDrawLines[add=0 and 2](D,A D,B)|}
\medskip
@@ -216,32 +216,32 @@ Intersecting a Line and a Circle : here we search the intersection of the circle
The infinite straight line $DB$ intercepts the circle but with \TIKZ\ we need to extend the lines $DB$ and that can be done using partway calculations. We get the point $F$ and $BF$ or $DF$ intercepts the circle
\medskip
-\hspace*{1cm}\vbox{\color{orange}| \node (H) [label=135:$H$,draw,circle through=(C)] at (B) {}; | \\
+\vbox{\color{green!50!black}| \node (H) [label=135:$H$,draw,circle through=(C)] at (B) {}; | \\
|\path let \p1 = ($ (B) - (C) $) in| \\
| coordinate [label=left:$G$] (G) at ($ (B) ! veclen(\x1,\y1) ! (F) $); | \\
-|\fill[red,opacity=.5] (G) circle (2pt);|} \\
+|\fill[red,opacity=.5] (G) circle (2pt);|}
\medskip
Like the intersection of two circles, it's easy to find the intersection of a line and a circle with \pkg{tkz-euclide}. We don't need $F$
\medskip
-\hspace*{1cm}\vbox{\color{red} | \tkzInterLC(B,D)(B,C)\tkzGetFirstPoint{G}|}
+\vbox{\color{red} | \tkzInterLC(B,D)(B,C)\tkzGetFirstPoint{G}|}
\medskip
There are no more difficulties. Here the final code with some simplications.
We draw the circle $\mathcal{K}$ with center $D$ and passing through $G$. It intersects the line $AD$ at point $L$. $AL = BC$.
-\hspace*{1cm}\vbox{\color{red} | \tkzDrawCircle(D,G)|}
-\hspace*{1cm}\vbox{\color{red} | \tkzInterLC(D,A)(D,G)\tkzGetSecondPoint{L}|}
+\vbox{\color{red} | \tkzDrawCircle(D,G)|}
+\vbox{\color{red} | \tkzInterLC(D,A)(D,G)\tkzGetSecondPoint{L}|}
\begin{tkzexample}[latex=7cm,small]
\begin{tikzpicture}[scale=1.5]
\tkzDefPoint(0,0){A}
\tkzDefPoint(0.75,0.25){B}
\tkzDefPoint(1,1.5){C}
-\tkzDefTriangle[equilateral](A,B) \tkzGetPoint{D}
-\tkzInterLC[near](D,B)(B,C) \tkzGetSecondPoint{G}
-\tkzInterLC[near](A,D)(D,G) \tkzGetFirstPoint{L}
+\tkzDefTriangle[equilateral](A,B)\tkzGetPoint{D}
+\tkzInterLC[near](D,B)(B,C) \tkzGetSecondPoint{G}
+\tkzInterLC[near](A,D)(D,G) \tkzGetFirstPoint{L}
\tkzDrawCircles(B,C D,G)
\tkzDrawLines[add=0 and 2](D,A D,B)
\tkzDrawSegment(A,B)
@@ -399,7 +399,7 @@ Let's analyze the figure
\[\widehat{BCA}=90^\circ -\alpha/2 \]
\item Finally \[\widehat{CBD}=\alpha=36^\circ \]
- the triangle $CBD$ is a "golden" triangle.
+ the triangle $CBD$ is a \code{golden} triangle.
\end{enumerate}
\vspace*{24pt}
@@ -448,7 +448,7 @@ After building the golden triangle $BCD$, we build the point $A$ by noticing tha
\subsubsection{Part II: two others methods with golden and euclid triangle}
-\tkzname{\tkznameofpack} knows how to define a "golden" or "euclide" triangle. We can define $BCD$ and $BCA$ like gold triangles.
+\tkzname{\tkznameofpack} knows how to define a \code{golden} or \code{euclide} triangle. We can define $BCD$ and $BCA$ like gold triangles.
\begin{center}
@@ -529,7 +529,7 @@ $IB=a$, $AI=1$
\tkzDefMidPoint(A,B) \tkzGetPoint{M}
\tkzDefPointWith[orthogonal](I,M) \tkzGetPoint{H}
\tkzInterLC(I,H)(M,B) \tkzGetFirstPoint{C}
- \tkzDrawSegment[style=orange](I,C)
+ \tkzDrawSegment[style=purple](I,C)
\tkzDrawArc(M,B)(A)
\tkzDrawSegment[dim={$1$,-16pt,}](A,I)
\tkzDrawSegment[dim={$(a-1)/2$,-10pt,}](I,M)
@@ -587,7 +587,7 @@ The following code consists of several parts:
\item The third one includes the different drawings;
\begin{tkzltxexample}[]
- \tkzDrawSegment[style=orange](I,H)
+ \tkzDrawSegment[style=purple](I,H)
\tkzDrawPoints(O,I,A,B,M)
\tkzDrawArc(M,A)(O)
\tkzDrawSegment[dim={$1$,-16pt,}](A,I)
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-show.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-show.tex
index e1f84630c8..13f6e06ebf 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-show.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-show.tex
@@ -39,12 +39,14 @@ You have to add, of course, all the styles of \TIKZ\ for tracings\dots
\end{tkzexample}
\subsubsection{Example of \tkzcname{tkzShowLine} and \tkzname{perpendicular}}
-\begin{tkzexample}[latex=5cm,small]
+\begin{tkzexample}[latex=6cm,small]
\begin{tikzpicture}
\tkzDefPoints{0/0/A, 3/2/B, 2/2/C}
-\tkzDefLine[perpendicular=through C,K=-.5](A,B) \tkzGetPoint{c}
+\tkzDefLine[perpendicular=through C,K=-.5](A,B)
+\tkzGetPoint{c}
\tkzShowLine[perpendicular=through C,K=-.5,gap=3](A,B)
-\tkzDefPointBy[projection=onto A--B](c)\tkzGetPoint{h}
+\tkzDefPointBy[projection=onto A--B](c)
+\tkzGetPoint{h}
\tkzMarkRightAngle[fill=lightgray](A,h,C)
\tkzDrawLines[add=.5 and .5](A,B C,c)
\tkzDrawPoints(A,B,C,h,c)
@@ -109,7 +111,7 @@ options & default & definition \\
\subsubsection{Example of the use of \tkzcname{tkzShowTransformation}}
\begin{tkzexample}[latex=6cm,small]
-\begin{tikzpicture}[scale=.6]
+\begin{tikzpicture}[scale=.5]
\tkzDefPoint(0,0){O} \tkzDefPoint(2,-2){A}
\tkzDefPoint(70:4){B} \tkzDrawPoints(A,O,B)
\tkzLabelPoints(A,O,B)
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-styles.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-styles.tex
index b81098e5ab..5d1930584e 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-styles.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-styles.tex
@@ -381,21 +381,21 @@ This library is used to produce different styles of arrow heads. The next examp
\tkzname{Stealth}, \tkzname{Triangle}, \tkzname{To}, \tkzname{Latex} and \dots which can be combined with \tkzname{reversed}. That's easy to place an arrow at one or two endpoints.
\begin{enumerate}
-\item \tkzname{Triangle} and \tkzname{Ray}
+\item \tkzname{-Triangle} and \tkzname{Segment}
\begin{tkzexample}[latex=6cm,small]
\begin{tikzpicture}
\tkzDefPoints{0/0/A,4/0/B}
\tkzDrawSegment[-Triangle](A,B)
\end{tikzpicture}
\end{tkzexample}
-\item \tkzname{Stealth} and \tkzname{Segment}
+\item \tkzname{Stealth-Stealth} and \tkzname{Segment}
\begin{tkzexample}[latex=6cm,small]
\begin{tikzpicture}
\tkzDefPoints{0/0/A,4/0/B}
\tkzDrawSegment[Stealth-Stealth](A,B)
\end{tikzpicture}
\end{tkzexample}
-\item \tkzname{Latex} and \tkzname{Line}
+\item \tkzname{Latex-Latex} and \tkzname{Line}
\begin{tkzexample}[latex=6cm,small]
\begin{tikzpicture}
\tkzDefPoints{0/0/A,4/0/B}
@@ -403,28 +403,28 @@ This library is used to produce different styles of arrow heads. The next examp
\tkzDrawPoints(A,B)
\end{tikzpicture}
\end{tkzexample}
-\item \tkzname{To} and \tkzname{Segment}
+\item \tkzname{To-To} and \tkzname{Segment}
\begin{tkzexample}[latex=6cm,small]
\begin{tikzpicture}
\tkzDefPoints{0/0/A,4/0/B}
\tkzDrawSegment[To-To](A,B)
\end{tikzpicture}
\end{tkzexample}
-\item \tkzname{Latex} and \tkzname{Segment}
+\item \tkzname{Latex-Late} and \tkzname{Segment}
\begin{tkzexample}[latex=6cm,small]
\begin{tikzpicture}
\tkzDefPoints{0/0/A,4/0/B}
\tkzDrawSegment[Latex-Latex](A,B)
\end{tikzpicture}
\end{tkzexample}
-\item \tkzname{Latex} and \tkzname{Ray}
+\item \tkzname{Latex-} and \tkzname{Segment}
\begin{tkzexample}[latex=6cm,small]
\begin{tikzpicture}
\tkzDefPoints{0/0/A,4/0/B}
\tkzDrawSegment[Latex-](A,B)
\end{tikzpicture}
\end{tkzexample}
-\item \tkzname{Latex} and \tkzname{Several rays}
+\item \tkzname{-Latex} and \tkzname{Segments}
\begin{tkzexample}[latex=6cm,small]
\begin{tikzpicture}
\tkzDefPoints{0/0/A,4/0/B,5/-2/C}
@@ -455,7 +455,7 @@ You can redefine this style.
\subsection{Arrows on middle point of a line segment}
-Arrows on lines are used to indicate that those lines are parallel. It depends on the country, in France we prefer to indicate outside the figure that $(A,B) \parallel (D,C)$. The code is an adaptation of an answer by \tkzname{muzimuzhi Z} on the site \href{https://tex.stackexchange.com/questions/632596/how-to-manage-argument-pattern-keys-and-subways}{tex.stackexchange.com}.
+Arrows on lines are used to indicate that those lines are parallel. It depends on the country, in France we prefer to indicate outside the figure that $(A,B) \parallel (D,C)$. The code is an adaptation of an answer by \tkzname{Muzimuzhi Z} on the site \href{https://tex.stackexchange.com/questions/632596/how-to-manage-argument-pattern-keys-and-subways}{tex.stackexchange.com}.
\medskip
Syntax: \\
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-tools.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-tools.tex
index 1123d86a2f..d51cfbb021 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-tools.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-tools.tex
@@ -329,8 +329,8 @@ arguments & example & explanation \\
\node at (1,-3) {%
$\overrightarrow{PA}\cdot \overrightarrow{PB} =
\overrightarrow{PC}\cdot \overrightarrow{PD}$};
- \node at (1,-4)%
- {$\overrightarrow{PA}\cdot \overrightarrow{PB} =\pab$};
+ \node at (1,-4)%
+ {$\overrightarrow{PA}\cdot \overrightarrow{PB}=\pab$};
\node at (1,-5){%
$\overrightarrow{PC}\cdot \overrightarrow{PD} =\pcd$};
\end{tikzpicture}
@@ -361,9 +361,12 @@ In this example, the radical axis $(EF)$ has been drawn. A point $H$ has been ch
\tkzDrawCircles(A,B C,D)
\tkzDefRadicalAxis(A,B)(C,D) \tkzGetPoints{E}{F}
\tkzDrawLine[add=1 and 2](E,F)
- \tkzDefPointOnLine[pos=1.5](E,F) \tkzGetPoint{H}
- \tkzDefLine[tangent from = H](A,B)\tkzGetPoints{T}{T'}
- \tkzDefLine[tangent from = H](C,D)\tkzGetPoints{S}{S'}
+ \tkzDefPointOnLine[pos=1.5](E,F)
+ \tkzGetPoint{H}
+ \tkzDefLine[tangent from = H](A,B)
+ \tkzGetPoints{T}{T'}
+ \tkzDefLine[tangent from = H](C,D)
+ \tkzGetPoints{S}{S'}
\tkzDrawSegments(H,T H,T' H,S H,S')
\tkzDrawPoints(A,B,C,D,E,F,H,T,T',S,S')
\tkzPowerCircle(H)(A,B) \tkzGetResult{pw}
@@ -415,7 +418,7 @@ arguments & example & explanation \\
\tkzGetPoints{E}{F}
\tkzDrawPoints(A,B,C,D,E,F)
\tkzLabelPoints(A,B,C,D,E,F)
- \tkzDrawLine[add=.5 and 1](E,F)
+ \tkzDrawLine[add=.25 and .5](E,F)
\tkzDrawLine[add=.25 and .25](A,B)
\end{tikzpicture}
\end{tkzexample}
@@ -460,7 +463,7 @@ arguments & example & explanation \\
-\begin{tkzexample}[small,latex=8cm]
+\begin{tkzexample}[small,latex=7cm]
\begin{tikzpicture}[scale=.4]
\tkzDefPoints{0/0/A,5/0/a,7/-1/B,3/-1/b,5/-4/C,2/-4/c}
\tkzDrawCircles(A,a B,b C,c)
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/tkz-euclide.pdf b/macros/latex/contrib/tkz/tkz-euclide/doc/tkz-euclide.pdf
index cbafb94f7a..aeb4428c81 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/tkz-euclide.pdf
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/tkz-euclide.pdf
Binary files differ
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-angles.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-angles.tex
index b471338fc8..f4c6c913e2 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-angles.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-angles.tex
@@ -10,240 +10,10 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-tool-eu-angles.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-tool-eu-angles.tex}
\makeatletter
-%<--------------------------------------------------------------------------–>
-% tkzSetUpArc
-%<--------------------------------------------------------------------------–>
-\pgfkeys{/tkzsetuparc/.cd,
- color/.store in = \tkz@arc@color,
- line width/.store in = \tkz@arc@lw,
- style/.store in = \tkz@arc@style,
- line width = \tkz@euc@linewidth,
- color = \tkz@euc@linecolor,
- style = \tkz@euc@linestyle,
- /tkzsetuparc/.search also = {/tikz,/tkzcompass},
- }
-\def\tkzSetUpArc{\pgfutil@ifnextchar[{\tkz@SetUpArc}{\tkz@SetUpArc[]}}
-\def\tkz@SetUpArc[#1]{%
-\pgfqkeys{/tkzsetuparc}{#1}
-\tikzset{arc style/.style={color = \tkz@arc@color,
- line width = \tkz@arc@lw,
- style = \tkz@arc@style
- }}
-}% end setup
-%<------------------------------ Arcs -------------------------------------–
-% options : delta
-% \def\tkz@delta{0}
-% \tikzset{arc style/.style={#1}}
-% \pgfkeys{/tikz/.cd,delta/.code={\def\tkz@delta{#1}}}
-\newif\iftkz@reverse
-\gdef\tkz@numa{0}
-\pgfkeys{/tkzdrawarc/.cd,
- type/.is choice,
- type/towards/.code = \def\tkz@numa{0},
- type/rotate/.code = \def\tkz@numa{1},
- type/angles/.code = \def\tkz@numa{2},
- type/R/.code = \def\tkz@numa{3},
- type/R with nodes/.code = \def\tkz@numa{4},
- towards/.style = {type=towards},
- rotate/.style = {type=rotate},
- R/.style = {type=R},
- angles/.style = {type=angles},
- R with nodes/.style = {type=R with nodes},
- diameter/.code = {},
- arc/.code = {},
- size/.code = {},
- mark/.code = {},
- mkpos/.code = {},
- mksize/.code = {},
- mkcolor/.code = {},
- type/.default = towards,
- delta/.store in = \tkz@delta,
- delta = 0,
- reverse/.is if = tkz@reverse,
- reverse/.default = true,
- reverse = false,
- /tkzdrawarc/.search also = {/tikz}
-}
-\def\tkzDrawArc{\pgfutil@ifnextchar[{\tkz@DrawArc}{\tkz@DrawArc[]}}
-\def\tkz@DrawArc[#1](#2,#3)(#4){%
-\begingroup
-\pgfqkeys{/tkzdrawarc}{#1}
-\ifcase\tkz@numa%
- \tkzDrawArcTowards[#1](#2,#3)(#4)
-\or% 1
- \tkzDrawArcRotate[#1](#2,#3)(#4)
-\or% 2
- \tkzDrawArcAngles[#1](#2,#3)(#4)
-\or% 3
- \tkzDrawArcRAngles[#1](#2,#3)(#4)
-\or% 4
- \tkzDrawArcR[#1](#2,#3)(#4)
-\fi
-\endgroup
-}
-%<--------------------------------------------------------------------------–>
-% ARC nodes #2 center #3 first point last point #4
-% delta un peu plus à chaque extrémité
-% example : \tkzDrawArc(A,B)(C)
-%<--------------------------------------------------------------------------–>
-\def\tkzDrawArcTowards{\pgfutil@ifnextchar[{\tkz@DrawArcN}{\tkz@DrawArcN[]}}
-\def\tkz@DrawArcN[#1](#2,#3)(#4){%
-\begingroup
- \tkz@@CalcLengthcm(#2,#3){tkz@radius}
- \tkzFindSlopeAngle(#2,#3)\tkzGetAngle{tkz@FirstAngle}
- \tkzFindSlopeAngle(#2,#4)\tkzGetAngle{tkz@SecondAngle}
- \tkz@DrawArcRAngles[#1](#2,\tkz@radius)(\tkz@FirstAngle,\tkz@SecondAngle)
-\endgroup
-}
-%<--------------------------------------------------------------------------–>
-% nodes #2 center #3 first point rotate #4 with Angle
-% delta un peu plus à chaque extrémité
-% tkzDrawArcRotate(O,A)(60)
-%<--------------------------------------------------------------------------–>
-\def\tkzDrawArcRotate{\pgfutil@ifnextchar[{\tkz@DrawArcRotate}{%
- \tkz@DrawArcRotate[]}}
-\def\tkz@DrawArcRotate[#1](#2,#3)(#4){%
-\begingroup
- \tkz@@CalcLength(#2,#3){tkz@radius}
- \tkzFindSlopeAngle(#2,#3) \tkzGetAngle{tkz@FirstA}
- \pgfmathadd{\tkz@FirstA}{#4}
- \edef\tkz@SecondA{\pgfmathresult}
- \pgfmathgreaterthan{#4}{0}
- \ifdim\pgfmathresult pt=1 pt\relax%
- \tkz@DrawArcRAngles[#1](#2,\tkz@radius pt)(\tkz@FirstA,\tkz@SecondA)
- \else
- \tkz@DrawArcRAngles[#1](#2,\tkz@radius pt)(\tkz@SecondA,\tkz@FirstA)
- \fi
- \endgroup
-}
-%<--------------------------------------------------------------------------–>
-% deux angles
-% \tkzDrawArcAngles(O,A)(0,60)
-%<--------------------------------------------------------------------------–>
-\def\tkzDrawArcAngles{\pgfutil@ifnextchar[{\tkz@DrawArcAngles}{%
- \tkz@DrawArcAngles[]}}
-\def\tkz@DrawArcAngles[#1](#2,#3)(#4,#5){%
-\begingroup
- \tkz@@CalcLength(#2,#3){tkzLengthResult}
- \tkz@DrawArcRAngles[#1](#2,\tkzLengthResult pt)(#4,#5)
-\endgroup
-}
-%<--------------------------------------------------------------------------–>
-% Degree #2 center #4 - #3 radius from #5 (degree) to #6(degree)
-%<--------------------------------------------------------------------------–>
-\def\tkzDrawArcRwithNodes{\pgfutil@ifnextchar[{\tkz@DrawArcRwithNodes}{%
- \tkz@DrawArcRwithNodes[]}}
-\def\tkz@DrawArcRwithNodes[#1](#2,#3,#4)(#5,#6){%
-\begingroup
- \tkz@@CalcLength(#3,#4){tkzLengthResult}
- \tkzFindSlopeAngle(#2,#5)\tkzGetAngle{tkz@FirstAngle}
- \tkzFindSlopeAngle(#2,#6)\tkzGetAngle{tkz@SecondAngle}
- \tkz@DrawArcRAngles[#1](#2,\tkzLengthResult)(\tkz@FirstAngle,\tkz@SecondAngle)
-\endgroup
-}
-%<--------------------------------------------------------------------------–>
-% Nodes R #2 center #3 radius en cm from #4(node) to #5(node)
-% \tkzDrawArcR(O,2)(A,B)
-%<--------------------------------------------------------------------------–>
-\def\tkzDrawArcR{\pgfutil@ifnextchar[{\tkz@DrawArcR}{\tkz@DrawArcR[]}}
-\def\tkz@DrawArcR[#1](#2,#3)(#4,#5){%
-\begingroup
- \tkzFindSlopeAngle(#2,#4)\tkzGetAngle{tkz@FirstAngle}
- \tkzFindSlopeAngle(#2,#5)\tkzGetAngle{tkz@SecondAngle}
- \tkz@DrawArcRAngles[#1](#2,#3)(\tkz@FirstAngle,\tkz@SecondAngle)
-\endgroup
-}
-%<--------------------------------------------------------------------------–>
-%<--------------------------------------------------------------------------–>
-% #1 center #2 radius #4 first angle (degree) #5 second angle (degree)
-% angles 0 .. 180 or -180 .. 0
-%<--------------------------------------------------------------------------–>
-% example : \tkzDrawArc(A,2)(30,90)
-\def\tkzDrawArcRAngles{\pgfutil@ifnextchar[{\tkz@DrawArcRAngles}{%
- \tkz@DrawArcRAngles[]}}
-\def\tkz@DrawArcRAngles[#1](#2,#3)(#4,#5){%
- \begingroup
- \tkzNormalizeAngle(#4,#5)
- \pgfmathsubtract{\tkz@FirstAngle}{\tkz@delta}
- \edef\tkz@FirstAngle{\pgfmathresult}%
- \pgfmathadd{\tkz@SecondAngle}{\tkz@delta}
- \edef\tkz@SecondAngle{\pgfmathresult}
- \iftkz@reverse
- \let\tkztemp\tkz@FirstAngle
- \let\tkz@FirstAngle\tkz@SecondAngle
- \let\tkz@SecondAngle\tkztemp
- \fi
- \draw[shift = {(#2)},arc style,/tkzdrawarc/.cd,#1]%
- (\tkz@FirstAngle:#3) arc (\tkz@FirstAngle:\tkz@SecondAngle:#3);
-\endgroup
-}
-%<--------------------------------------------------------------------------–>
-\pgfkeys{
- /@tkzmarkarc/.cd,
- pos/.store in = \tkz@mkarcpos,
- color/.store in = \tkz@mkcolor,
- mark/.store in = \tkz@markarcseg,
- size/.store in = \tkz@mkarcsize,
- color = teal!20,
- size = 4pt,
- pos = .5,
- mark = none,
- /@tkzmarkarc/.search also={/tikz},
-}
-\def\tkzMarkArc{\pgfutil@ifnextchar[{\tkz@MarkArc}{\tkz@MarkArc[]}}
-\def\tkz@MarkArc[#1](#2,#3,#4){%
-\begingroup
- \pgfqkeys{/@tkzmarkarc}{#1} \def\tkz@mymarkarc{\pgfsetplotmarksize{\tkz@mkarcsize}\pgfuseplotmark{\tkz@markarcseg}}
-\tkz@@CalcLength(#2,#3){tkz@radius}
-\tkzFindSlopeAngle(#2,#3)\tkzGetAngle{tkz@FirstAngle}
-\tkzFindSlopeAngle(#2,#4)\tkzGetAngle{tkz@SecondAngle}
-\tkzNormalizeAngle(\tkz@FirstAngle,\tkz@SecondAngle)
- \pgfmathsubtract{\tkz@FirstAngle}{\tkz@delta}
- \edef\tkz@FirstAngle{\pgfmathresult}%
- \pgfmathadd{\tkz@SecondAngle}{\tkz@delta}
- \edef\tkz@SecondAngle{\pgfmathresult}
-\begin{scope}[decoration={markings,mark=at position \tkz@mkarcpos with {\tkz@mymarkarc}}]
-\path[shift = {(#2)},\tkz@mkcolor,/@tkzmarkarc/.cd,#1,postaction={decorate}]%
-(\tkz@FirstAngle:\tkz@radius pt) arc (\tkz@FirstAngle:\tkz@SecondAngle:\tkz@radius pt);
-\end{scope}
-\endgroup
-}
-
-\def\tkzLabelArc{\pgfutil@ifnextchar[{\tkz@LabelArc}{\tkz@LabelArc[]}}
-\def\tkz@LabelArc[#1](#2,#3,#4)#5{%
-\begingroup
-\pgfqkeys{/@tkzmarkarc}{#1}
-\tkz@@CalcLength(#2,#3){tkz@radius}
-\tkzFindSlopeAngle(#2,#3)\tkzGetAngle{tkz@FirstAngle}
-\tkzFindSlopeAngle(#2,#4)\tkzGetAngle{tkz@SecondAngle}
-\tkzNormalizeAngle(\tkz@FirstAngle,\tkz@SecondAngle)
-\pgfmathsubtract{\tkz@FirstAngle}{\tkz@delta}
-\edef\tkz@FirstAngle{\pgfmathresult}%
-\pgfmathadd{\tkz@SecondAngle}{\tkz@delta}
-\edef\tkz@SecondAngle{\pgfmathresult}
-\begin{scope}[decoration={markings,mark=at position \tkz@mkarcpos with \node{#5};}]
- \path[shift = {(#2)},/@tkzmarkarc/.cd,#1,postaction={decorate}]%
- (\tkz@FirstAngle:\tkz@radius pt) arc (\tkz@FirstAngle:\tkz@SecondAngle:\tkz@radius pt); \end{scope}
-\endgroup
-}
-%<--------------------------------------------------------------------------->
-% tkzDrawArcRAN >
-%<--------------------------------------------------------------------------->
-\def\tkzDrawArcRAN[#1](#2,#3)(#4,#5){%
-\begingroup
- \draw[shift = {(#2)},/tkzdrawarc/.cd,#1] (#4:#3) arc (#4:#5:#3);
-\endgroup
-}
-%<--------------- tkzPathArcRAN ----------------------------------
-\def\tkzPathArcRAN[#1](#2,#3)(#4,#5){%
-\begingroup
- \path[shift = {(#2)},/tkzdrawarc/.cd,#1] (#4:#3) arc (#4:#5:#3);
-\endgroup
-}
%<--------------------------------------------------------------------------->
% Mark an angle modi 3.03 suppression de \tkz@mksize,
%<--------------------------------------------------------------------------->
@@ -276,12 +46,12 @@
%\tikzset{lbstyle/.style = {color=\tkz@mainlinecolor}}
\pgfkeys{/tkzmkangle/.cd,
- arc/.estore in = \tkz@arc,
- size/.store in = \tkz@size,
- mark/.store in = \tkz@markang,
- mkpos/.estore in = \tkz@mkpos,
- mksize/.store in = \tkz@mksize,
- mkcolor/.store in = \tkz@mkcolor,
+ arc/.code = \def\tkz@arc{#1},
+ size/.code = \def\tkz@size{#1},
+ mark/.code = \def\tkz@markang{#1},
+ mkpos/.code = \def\tkz@mkpos{#1},
+ mksize/.code = \def\tkz@mksize{#1},
+ mkcolor/.code = \def\tkz@mkcolor{#1},
arc = l,
size = 1,
mark = none,
@@ -289,7 +59,11 @@
mkcolor = black,
mkpos = 0.5,
/tkzmkangle/.search also={/tikz}
-}
+}
+% utils
+
+%-----------------------------------------------------------------------
+
\def\tkzMarkAngle{\pgfutil@ifnextchar[{\tkz@MarkAngle}{\tkz@MarkAngle[]}}
\def\tkz@MarkAngle[#1](#2,#3,#4){%
\begingroup
@@ -301,8 +75,7 @@
\def\tkz@mymark{\pgfsetplotmarksize{\tkz@mksize}\pgfuseplotmark{\tkz@markang}}
% draw the arcs
\begin{scope}[veclen]
- \begin{scope}[decoration= {markings,
- mark=at position \tkz@mkpos with {\tkz@mymark}}]
+ \begin{scope}[decoration = {markings, mark=at position \tkz@mkpos with {\tkz@mymark}}]
\ifx\tkz@arc\tkz@arcsimple
\tkzDrawArcRAN[#1,fill=none]%
(#3,\tkz@size)(\tkz@FirstAngle,\tkz@SecondAngle)%
@@ -522,17 +295,6 @@
\endgroup
}
%<--------------------------------------------------------------------------->
-% tkzdefMidArc center and two points
-\def\tkzDefMidArc(#1,#2,#3){%
-\begingroup
-\tkz@@CalcLength(#1,#2){tkz@radius}
-\tkzFindSlopeAngle(#1,#2)\tkzGetAngle{tkz@FirstAngle}
-\tkzFindSlopeAngle(#1,#3)\tkzGetAngle{tkz@SecondAngle}
-\tkzNormalizeAngle(\tkz@FirstAngle,\tkz@SecondAngle)
- \path[shift = {(#1)}](\tkz@FirstAngle:\tkz@radius pt) arc
- (\tkz@FirstAngle:\tkz@SecondAngle:\tkz@radius pt) coordinate[midway] (tkzPointResult);
-\endgroup
-}
\makeatother
\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-arcs.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-arcs.tex
new file mode 100644
index 0000000000..e93a8a2c49
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-arcs.tex
@@ -0,0 +1,262 @@
+% tkz-tool-eu-arcs.tex
+% Copyright 2024 Alain Matthes
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+% This work has the LPPL maintenance status “maintained”.
+% The Current Maintainer of this work is Alain Matthes.
+
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-tool-eu-arcs.tex}
+\makeatletter
+%<--------------------------------------------------------------------------–>
+% tkzSetUpArc
+%<--------------------------------------------------------------------------–>
+\pgfkeys{/tkzsetuparc/.cd,
+ color/.store in = \tkz@arc@color,
+ line width/.store in = \tkz@arc@lw,
+ style/.store in = \tkz@arc@style,
+ line width = \tkz@euc@linewidth,
+ color = \tkz@euc@linecolor,
+ style = \tkz@euc@linestyle,
+ /tkzsetuparc/.search also = {/tikz,/tkzcompass},
+ }
+\def\tkzSetUpArc{\pgfutil@ifnextchar[{\tkz@SetUpArc}{\tkz@SetUpArc[]}}
+\def\tkz@SetUpArc[#1]{%
+\pgfqkeys{/tkzsetuparc}{#1}
+\tikzset{arc style/.style={color = \tkz@arc@color,
+ line width = \tkz@arc@lw,
+ style = \tkz@arc@style
+ }}
+}% end setup
+%<------------------------------ Arcs -------------------------------------–
+% options : delta
+% \def\tkz@delta{0}
+% \tikzset{arc style/.style={#1}}
+% \pgfkeys{/tikz/.cd,delta/.code={\def\tkz@delta{#1}}}
+\newif\iftkz@reverse
+\gdef\tkz@numa{0}
+\pgfkeys{/tkzdrawarc/.cd,
+ type/.is choice,
+ type/towards/.code = \def\tkz@numa{0},
+ type/rotate/.code = \def\tkz@numa{1},
+ type/angles/.code = \def\tkz@numa{2},
+ type/R/.code = \def\tkz@numa{3},
+ type/R with nodes/.code = \def\tkz@numa{4},
+ towards/.style = {type=towards},
+ rotate/.style = {type=rotate},
+ R/.style = {type=R},
+ angles/.style = {type=angles},
+ R with nodes/.style = {type=R with nodes},
+ diameter/.code = {},
+ arc/.code = {},
+ size/.code = {},
+ mark/.code = {},
+ mkpos/.code = {},
+ mksize/.code = {},
+ mkcolor/.code = {},
+ type/.default = towards,
+ delta/.store in = \tkz@delta,
+ delta = 0,
+ reverse/.is if = tkz@reverse,
+ reverse/.default = true,
+ reverse = false,
+ /tkzdrawarc/.search also = {/tikz}
+}
+\def\tkzDrawArc{\pgfutil@ifnextchar[{\tkz@DrawArc}{\tkz@DrawArc[]}}
+\def\tkz@DrawArc[#1](#2,#3)(#4){%
+\begingroup
+\pgfqkeys{/tkzdrawarc}{#1}
+\ifcase\tkz@numa%
+ \tkzDrawArcTowards[#1](#2,#3)(#4)
+\or% 1
+ \tkzDrawArcRotate[#1](#2,#3)(#4)
+\or% 2
+ \tkzDrawArcAngles[#1](#2,#3)(#4)
+\or% 3
+ \tkzDrawArcRAngles[#1](#2,#3)(#4)
+\or% 4
+ \tkzDrawArcR[#1](#2,#3)(#4)
+\fi
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% ARC nodes #2 center #3 first point last point #4
+% delta un peu plus à chaque extrémité
+% example : \tkzDrawArc(A,B)(C)
+%<--------------------------------------------------------------------------–>
+\def\tkzDrawArcTowards{\pgfutil@ifnextchar[{\tkz@DrawArcN}{\tkz@DrawArcN[]}}
+\def\tkz@DrawArcN[#1](#2,#3)(#4){%
+\begingroup
+ \tkz@@CalcLengthcm(#2,#3){tkz@radius}
+ \tkzFindSlopeAngle(#2,#3)\tkzGetAngle{tkz@FirstAngle}
+ \tkzFindSlopeAngle(#2,#4)\tkzGetAngle{tkz@SecondAngle}
+ \tkz@DrawArcRAngles[#1](#2,\tkz@radius)(\tkz@FirstAngle,\tkz@SecondAngle)
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% nodes #2 center #3 first point rotate #4 with Angle
+% delta un peu plus à chaque extrémité
+% tkzDrawArcRotate(O,A)(60)
+%<--------------------------------------------------------------------------–>
+\def\tkzDrawArcRotate{\pgfutil@ifnextchar[{\tkz@DrawArcRotate}{%
+ \tkz@DrawArcRotate[]}}
+\def\tkz@DrawArcRotate[#1](#2,#3)(#4){%
+\begingroup
+ \tkz@@CalcLength(#2,#3){tkz@radius}
+ \tkzFindSlopeAngle(#2,#3) \tkzGetAngle{tkz@FirstA}
+ \pgfmathadd{\tkz@FirstA}{#4}
+ \edef\tkz@SecondA{\pgfmathresult}
+ \pgfmathgreaterthan{#4}{0}
+ \ifdim\pgfmathresult pt=1 pt\relax%
+ \tkz@DrawArcRAngles[#1](#2,\tkz@radius pt)(\tkz@FirstA,\tkz@SecondA)
+ \else
+ \tkz@DrawArcRAngles[#1](#2,\tkz@radius pt)(\tkz@SecondA,\tkz@FirstA)
+ \fi
+ \endgroup
+}
+%<--------------------------------------------------------------------------–>
+% deux angles
+% \tkzDrawArcAngles(O,A)(0,60)
+%<--------------------------------------------------------------------------–>
+\def\tkzDrawArcAngles{\pgfutil@ifnextchar[{\tkz@DrawArcAngles}{%
+ \tkz@DrawArcAngles[]}}
+\def\tkz@DrawArcAngles[#1](#2,#3)(#4,#5){%
+\begingroup
+ \tkz@@CalcLength(#2,#3){tkzLengthResult}
+ \tkz@DrawArcRAngles[#1](#2,\tkzLengthResult pt)(#4,#5)
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% Degree #2 center #4 - #3 radius from #5 (degree) to #6(degree)
+%<--------------------------------------------------------------------------–>
+\def\tkzDrawArcRwithNodes{\pgfutil@ifnextchar[{\tkz@DrawArcRwithNodes}{%
+ \tkz@DrawArcRwithNodes[]}}
+\def\tkz@DrawArcRwithNodes[#1](#2,#3,#4)(#5,#6){%
+\begingroup
+ \tkz@@CalcLength(#3,#4){tkzLengthResult}
+ \tkzFindSlopeAngle(#2,#5)\tkzGetAngle{tkz@FirstAngle}
+ \tkzFindSlopeAngle(#2,#6)\tkzGetAngle{tkz@SecondAngle}
+ \tkz@DrawArcRAngles[#1](#2,\tkzLengthResult)(\tkz@FirstAngle,\tkz@SecondAngle)
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% Nodes R #2 center #3 radius en cm from #4(node) to #5(node)
+% \tkzDrawArcR(O,2)(A,B)
+%<--------------------------------------------------------------------------–>
+\def\tkzDrawArcR{\pgfutil@ifnextchar[{\tkz@DrawArcR}{\tkz@DrawArcR[]}}
+\def\tkz@DrawArcR[#1](#2,#3)(#4,#5){%
+\begingroup
+ \tkzFindSlopeAngle(#2,#4)\tkzGetAngle{tkz@FirstAngle}
+ \tkzFindSlopeAngle(#2,#5)\tkzGetAngle{tkz@SecondAngle}
+ \tkz@DrawArcRAngles[#1](#2,#3)(\tkz@FirstAngle,\tkz@SecondAngle)
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+%<--------------------------------------------------------------------------–>
+% #1 center #2 radius #4 first angle (degree) #5 second angle (degree)
+% angles 0 .. 180 or -180 .. 0
+%<--------------------------------------------------------------------------–>
+% example : \tkzDrawArc(A,2)(30,90)
+\def\tkzDrawArcRAngles{\pgfutil@ifnextchar[{\tkz@DrawArcRAngles}{%
+ \tkz@DrawArcRAngles[]}}
+\def\tkz@DrawArcRAngles[#1](#2,#3)(#4,#5){%
+ \begingroup
+ \tkzNormalizeAngle(#4,#5)
+ \pgfmathsubtract{\tkz@FirstAngle}{\tkz@delta}
+ \edef\tkz@FirstAngle{\pgfmathresult}%
+ \pgfmathadd{\tkz@SecondAngle}{\tkz@delta}
+ \edef\tkz@SecondAngle{\pgfmathresult}
+ \iftkz@reverse
+ \let\tkztemp\tkz@FirstAngle
+ \let\tkz@FirstAngle\tkz@SecondAngle
+ \let\tkz@SecondAngle\tkztemp
+ \fi
+ \draw[shift = {(#2)},arc style,/tkzdrawarc/.cd,#1]%
+ (\tkz@FirstAngle:#3) arc (\tkz@FirstAngle:\tkz@SecondAngle:#3);
+\endgroup
+}
+
+%<--------------------------------------------------------------------------->
+% tkzDrawArcRAN >
+%<--------------------------------------------------------------------------->
+\def\tkzDrawArcRAN[#1](#2,#3)(#4,#5){%
+\begingroup
+ \draw[shift = {(#2)},/tkzdrawarc/.cd,#1] (#4:#3) arc (#4:#5:#3);
+\endgroup
+}
+%<--------------- tkzPathArcRAN ----------------------------------
+\def\tkzPathArcRAN[#1](#2,#3)(#4,#5){%
+\begingroup
+ \path[shift = {(#2)},/tkzdrawarc/.cd,#1] (#4:#3) arc (#4:#5:#3);
+\endgroup
+}
+%<--------------------------------------------------------------------------->
+%% tkzdefMidArc center and two points
+\def\tkzDefMidArc(#1,#2,#3){%
+\begingroup
+\tkz@@CalcLength(#1,#2){tkz@radius}
+\tkzFindSlopeAngle(#1,#2)\tkzGetAngle{tkz@FirstAngle}
+\tkzFindSlopeAngle(#1,#3)\tkzGetAngle{tkz@SecondAngle}
+\tkzNormalizeAngle(\tkz@FirstAngle,\tkz@SecondAngle)
+ \path[shift = {(#1)}](\tkz@FirstAngle:\tkz@radius pt) arc
+ (\tkz@FirstAngle:\tkz@SecondAngle:\tkz@radius pt) coordinate[midway] (tkzPointResult);
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+\pgfkeys{
+ /@tkzmarkarc/.cd,
+ pos/.store in = \tkz@mkarcpos,
+ color/.store in = \tkz@mkcolor,
+ mark/.store in = \tkz@markarcseg,
+ size/.store in = \tkz@mkarcsize,
+ color = teal!20,
+ size = 4pt,
+ pos = .5,
+ mark = none,
+ /@tkzmarkarc/.search also={/tikz},
+}
+\def\tkzMarkArc{\pgfutil@ifnextchar[{\tkz@MarkArc}{\tkz@MarkArc[]}}
+\def\tkz@MarkArc[#1](#2,#3,#4){%
+\begingroup
+ \pgfqkeys{/@tkzmarkarc}{#1} \def\tkz@mymarkarc{\pgfsetplotmarksize{\tkz@mkarcsize}\pgfuseplotmark{\tkz@markarcseg}}
+\tkz@@CalcLength(#2,#3){tkz@radius}
+\tkzFindSlopeAngle(#2,#3)\tkzGetAngle{tkz@FirstAngle}
+\tkzFindSlopeAngle(#2,#4)\tkzGetAngle{tkz@SecondAngle}
+\tkzNormalizeAngle(\tkz@FirstAngle,\tkz@SecondAngle)
+ \pgfmathsubtract{\tkz@FirstAngle}{\tkz@delta}
+ \edef\tkz@FirstAngle{\pgfmathresult}%
+ \pgfmathadd{\tkz@SecondAngle}{\tkz@delta}
+ \edef\tkz@SecondAngle{\pgfmathresult}
+\begin{scope}[decoration={markings,mark=at position \tkz@mkarcpos with {\tkz@mymarkarc}}]
+\path[shift = {(#2)},\tkz@mkcolor,/@tkzmarkarc/.cd,#1,postaction={decorate}]%
+(\tkz@FirstAngle:\tkz@radius pt) arc (\tkz@FirstAngle:\tkz@SecondAngle:\tkz@radius pt);
+\end{scope}
+\endgroup
+}
+
+\def\tkzLabelArc{\pgfutil@ifnextchar[{\tkz@LabelArc}{\tkz@LabelArc[]}}
+\def\tkz@LabelArc[#1](#2,#3,#4)#5{%
+\begingroup
+\pgfqkeys{/@tkzmarkarc}{#1}
+\tkz@@CalcLength(#2,#3){tkz@radius}
+\tkz@@CalcLength(#2,#3){tkz@radius}
+\tkzFindSlopeAngle(#2,#3)\tkzGetAngle{tkz@FirstAngle}
+\tkzFindSlopeAngle(#2,#4)\tkzGetAngle{tkz@SecondAngle}
+\pgfmathsubtract{\tkz@FirstAngle}{\tkz@delta}
+\edef\tkz@FirstAngle{\pgfmathresult}%
+\pgfmathadd{\tkz@SecondAngle}{\tkz@delta}
+\edef\tkz@SecondAngle{\pgfmathresult}
+\begin{scope}[decoration={markings,mark=at position \tkz@mkarcpos with \node{#5};}]
+ \path[shift = {(#2)},/@tkzmarkarc/.cd,#1,postaction={decorate}]%
+ (\tkz@FirstAngle:\tkz@radius pt) arc (\tkz@FirstAngle:\tkz@SecondAngle:\tkz@radius pt); \end{scope}
+\endgroup
+}
+\makeatother
+
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-circles.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-circles.tex
index 50d553453f..c88219c490 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-circles.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-circles.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-eu-draw-circles.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-eu-draw-circles.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% tkzSetUpCircle
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-compass.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-compass.tex
index aeb9341da2..dab6568e0a 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-compass.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-compass.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-eu-compass.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-eu-compass.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% Author Alain Matthes
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-ellipses.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-ellipses.tex
index cdce79b692..0707a99e1f 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-ellipses.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-ellipses.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-eu-draw-ellipses.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-eu-draw-ellipses.tex}
\makeatletter
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-lines.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-lines.tex
index 8859ca18e9..3b7fe5a547 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-lines.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-lines.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-eu-draw-lines.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-eu-draw-lines.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
@@ -51,13 +51,10 @@
% Drawing a line
%<--------------------------------------------------------------------------–>
%<--------------------------------------------------------------------------–>
-% \pgfkeys{/tkzdrawl/.cd,
-% /tkzdrawl/.search also={/tikz}
-% }
+
\def\tkzDrawLine{\pgfutil@ifnextchar[{\tkz@DrawLine}{\tkz@DrawLine[]}}
\def\tkz@DrawLine[#1](#2,#3){%
\begingroup
- % \pgfqkeys{/tkzdrawl}{#1}
\draw[line style,#1] (#2) to (#3);
\endgroup
}
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-points.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-points.tex
index 6ba7524f73..18b1c06c4b 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-points.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-points.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-draw-eu-points.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-draw-eu-points.tex}
\makeatletter
%<--------------------------------------------------------------------------->
% tkzSetUpPoint définit la forme d'un point
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-polygons.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-polygons.tex
index 4dbe368630..09f43b9e62 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-polygons.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-polygons.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-eu-polygons.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-eu-polygons.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% Polygon
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-protractor.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-protractor.tex
index 8d7b6895ec..cfa6a8e144 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-protractor.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-protractor.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-eu-protractor.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-eu-protractor.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% !!! idea from Y. Combe !!!
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-sectors.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-sectors.tex
index b925701206..8131adc32b 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-sectors.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-sectors.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-eu-sectors.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-eu-sectors.tex}
\makeatletter
%<----------------------- Sectors ------------------------------–>
\gdef\tkz@nums{0}
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-show.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-show.tex
index 12656ca974..0959a1f985 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-show.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-show.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-eu-show.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-eu-show.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% finding specific points in a triangle
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/libs/tkz-lib-eu-marks.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/libs/tkz-lib-eu-marks.tex
index 1d272eca37..51cb39590e 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/libs/tkz-lib-eu-marks.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/libs/tkz-lib-eu-marks.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-lib-eu-marks.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-lib-eu-marks.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% Création des symboles
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/libs/tkz-lib-eu-shape.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/libs/tkz-lib-eu-shape.tex
index 141355abf9..5453dffef5 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/libs/tkz-lib-eu-shape.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/libs/tkz-lib-eu-shape.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-lib-eu-shape.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-lib-eu-shape.tex}
%<--------------------------------------------------------------------------–>
% Création des symboles
%<--------------------------------------------------------------------------–>
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-circles-by.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-circles-by.tex
index 497b02eda4..5c403e4454 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-circles-by.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-circles-by.tex
@@ -11,8 +11,8 @@
% The Current Maintainer of this work is Alain Matthes.
\def\fileversion{6.00}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 6.00 tkz-obj-eu-circles.tex}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 6.00 tkz-obj-eu-circles.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% tkzCircle center and one point
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-circles.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-circles.tex
index 7a4b553e29..b356df9a86 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-circles.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-circles.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-lua-circles.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-lua-circles.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% tkzCircle center and one point
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points-by.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points-by.tex
index 57c03deab3..f25621248e 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points-by.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points-by.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-tools-lua-points-by.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-tools-lua-points-by.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% Transformations Géométriques
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points-spc.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points-spc.tex
index 36d3eeef02..f56b5a6dc1 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points-spc.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points-spc.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
+\def\fileversion{5.10c}
\def\filedate{2024/01/23}
-\typeout{2024/01/23 5.06c tkz-obj-lua-points-spc.tex}
+\typeout{2024/01/23 5.10c tkz-obj-lua-points-spc.tex}
\makeatletter
%add ExCenter
%<--------------------------------------------------------------------------–>
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points-with.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points-with.tex
index 87090a2922..f8e31c9afa 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points-with.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points-with.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-lua-points-with.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-lua-points-with.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% Vectors
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points.tex
index 1b646b4b8e..24a25502fb 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-lua-points.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-lua-points.tex}
\makeatletter
%<--------------------------------------------------------------------------->
% init def point
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-axesmin.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-axesmin.tex
index ef3f5bc487..408b3d6770 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-axesmin.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-axesmin.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-eu-axesmin}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-eu-axesmin}
\makeatletter
\def\removedot#1.{#1}
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-circles-by.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-circles-by.tex
index 59b5da4c15..6e1f648880 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-circles-by.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-circles-by.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-eu-circles.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-eu-circles.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% tkzCircle center and one point
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-circles.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-circles.tex
index cdfadca09b..bba6b717e6 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-circles.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-circles.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-eu-circles.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-eu-circles.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% tkzCircle center and one point
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-grids.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-grids.tex
index 2eca974389..aac48de7d8 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-grids.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-grids.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-eu-grids.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-eu-grids.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% Setup Grid
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-lines.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-lines.tex
index fdbb6adeb8..12ce8d8753 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-lines.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-lines.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-eu-lines.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-eu-lines.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% les lignes
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-by.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-by.tex
index 23662ff719..73b07df71b 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-by.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-by.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-tools-eu-points-by.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-tools-eu-points-by.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% Transformations Géométriques
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-rnd.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-rnd.tex
index 868e5d83ee..539ff1ff92 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-rnd.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-rnd.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-eu-points-rnd.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-eu-points-rnd.tex}
%<--------------------------------------------------------------------------–>
\makeatletter
%<-------------------------------------------------------------------------–>
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-spc.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-spc.tex
index 3b228a271e..d1baa02a9c 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-spc.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-spc.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-el-points.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-el-points.tex}
\makeatletter
%add ExCenter
%<--------------------------------------------------------------------------–>
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-with.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-with.tex
index 9c83ffbcf4..22eead6497 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-with.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-with.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-eu-points-with.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-eu-points-with.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% Vectors
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points.tex
index b2bb4a4dda..bf03469a50 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-eu-points.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-eu-points.tex}
\makeatletter
%<--------------------------------------------------------------------------->
% init def point
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-polygons.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-polygons.tex
index b6c85efce8..609414132d 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-polygons.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-polygons.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-eu-polygons.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-eu-polygons.tex}
% bug in regular polygon side 2020/03/09
\makeatletter
%<--------------------------------------------------------------------------–>
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-triangles.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-triangles.tex
index 794a7a2576..17069c39e3 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-triangles.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-triangles.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-eu-triangles.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-eu-triangles.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% Triangle Equilateral
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.cfg b/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.cfg
index a63d72561a..422a86050a 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.cfg
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.cfg
@@ -16,9 +16,9 @@
% and save the file in a directory part of your TEXINPUTS environment
% variable.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-euclide.cfg}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-euclide.cfg}
%<------ colors ---------------------------------------–>
\def\tkz@backgroundcolor{white}
\def\tkz@textcolor{black}
@@ -134,6 +134,24 @@ arc style/.style={%
\def\tkz@mk@size{3pt}
\def\tkz@mk@fill{\tkz@otherlinecolor}
%<--------------------------------------------------------------------------–>
+%<------------------------- mark angle -----------------------------------–>
+\def\tkz@euc@mkcolor{\tkz@otherlinecolor}
+\def\tkz@euc@mkarctype{l}
+\def\tkz@euc@mksize{4pt}
+\def\tkz@euc@mkarcsize{1}
+\def\tkz@euc@markang{none}
+\def\tkz@euc@mkstyle{solid}
+\def\tkz@euc@mkpos{.5}
+\tikzset{%
+mark style/.style = {%
+ arc = \tkz@euc@mkarctype,
+ color = \tkz@euc@mkcolor,
+ size = \tkz@euc@mkarcsize,
+ style = \tkz@euc@mkstyle,
+ mark = \tkz@euc@markang,
+ pos = \tkz@euc@mkpos}
+}
+%<--------------------------------------------------------------------------–>
%<------------------------------ styles ---------------------------------–>
\def\tkzSetUpStyle[#1]#2{\tikzset{#2/.style={#1}}}% add 2024
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.sty b/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.sty
index 21ecad81ea..b88599a7a1 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.sty
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.sty
@@ -10,14 +10,17 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
%-------------------------------------------------------------------------------
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-euclide.sty}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-euclide.sty}
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{tkz-euclide}[ 2024/02/04 5.06c for pure Euclidean Geometry ]
+\ProvidesPackage{tkz-euclide}[ 2024/04/19 5.10c for pure Euclidean Geometry ]
\newif\if@tkzlua
\@tkzluafalse
\DeclareOption{lua}{\@tkzluatrue}
+\newif\if@tkzmini
+\@tkzminifalse
+\DeclareOption{mini}{\@tkzminitrue}
\ProcessOptions\relax
\@ifpackageloaded{tkz-base}{
@@ -162,7 +165,39 @@
\if@tkzlua
\RequirePackage{luacode}
\fi
-
+\if@tkzmini
+\@tkzluatrue
+\RequirePackage{luacode}
+\@ifpackageloaded{tkz-base}{}{%
+% from base
+\input{tkz-tools-eu-base.tex}
+\input{tkz-tools-eu-utilities.tex}
+\input{tkz-tools-eu-BB.tex}
+\input{tkz-obj-eu-grids.tex}
+\input{tkz-lib-eu-marks.tex}
+\input{tkz-tools-eu-text.tex}
+\input{tkz-lib-eu-shape.tex}
+\input{tkz-obj-eu-axesmin.tex}
+\input{tkz-tools-eu-colors.tex}
+\input{tkz-obj-eu-points.tex}
+\input{tkz-draw-eu-points.tex}
+}
+% next from euclide
+\input{tkz-obj-eu-lua-points-by.tex}
+\input{tkz-tools-eu-lua-math.tex}
+\input{tkz-tools-eu-lua-angles.tex}
+% drawings
+\input{tkz-draw-eu-lines.tex}
+\input{tkz-draw-eu-circles.tex}
+\input{tkz-draw-eu-ellipses.tex}
+\input{tkz-draw-eu-polygons.tex}
+\input{tkz-draw-eu-arcs.tex}
+\input{tkz-draw-eu-angles.tex}
+\input{tkz-draw-eu-sectors.tex}
+\input{tkz-draw-eu-compass.tex}
+\input{tkz-draw-eu-show.tex}
+\input{tkz-draw-eu-protractor.tex}
+\else
\@ifpackageloaded{tkz-base}{}{%
% from base
\input{tkz-tools-eu-base.tex}
@@ -211,9 +246,11 @@
\input{tkz-draw-eu-circles.tex}
\input{tkz-draw-eu-ellipses.tex}
\input{tkz-draw-eu-polygons.tex}
+\input{tkz-draw-eu-arcs.tex}
\input{tkz-draw-eu-angles.tex}
\input{tkz-draw-eu-sectors.tex}
\input{tkz-draw-eu-compass.tex}
\input{tkz-draw-eu-show.tex}
\input{tkz-draw-eu-protractor.tex}
+\fi
\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-angles.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-angles.tex
index 8005ed1933..6f54bb5ca3 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-angles.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-angles.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-tools-lua-angles.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-tools-lua-angles.tex}
\makeatletter
\def\tkzmathrotatepointaround#1#2#3{%
\pgf@process{%
@@ -75,8 +75,20 @@ token.set_macro("tkz@SecondAngle", angleB)
%<--------------------------------------------------------------------------–>
\def\tkzFindSlopeAngle(#1,#2){%
\begingroup
- \tkzmathanglebetweenpoints{#1}{#2}
- \global\let\tkzAngleResult\pgfmathresult
+\pgfextractx{\pgf@x}{\pgfpointanchor{#1}{center}}%
+\pgfextracty{\pgf@y}{\pgfpointanchor{#1}{center}}%
+\edef\tkzax{\strip@pt\pgf@x}%
+\edef\tkzay{\strip@pt\pgf@y}%
+\pgfextractx{\pgf@x}{\pgfpointanchor{#2}{center}}%
+\pgfextracty{\pgf@y}{\pgfpointanchor{#2}{center}}%
+\edef\tkzbx{\strip@pt\pgf@x}%
+\edef\tkzby{\strip@pt\pgf@y}%
+ % \tkzmathanglebetweenpoints{#1}{#2}
+ % \global\let\tkzAngleResult\pgfmathresult
+\directlua{ local an = math.angle(\tkzax,\tkzay,\tkzbx,\tkzby)
+ token.set_macro("tkzAngleResult", an )
+ }
+ \global\let\tkzAngleResult\tkzAngleResult
\endgroup
}
%<--------------------------------------------------------------------------–>
@@ -98,5 +110,6 @@ token.set_macro("tkz@SecondAngle", angleB)
\def\tkzGetAngle#1{%
\global\expandafter\edef\csname #1\endcsname{\tkzAngleResult}
}
+
\makeatother
\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-base.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-base.tex
index 0e68171946..7af53a74b0 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-base.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-base.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-tools-lua-base.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-tools-lua-base.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
\global\let\tkz@tmp@xa\tkz@init@xmin% modif 2016
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-intersections.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-intersections.tex
index 0e700492dc..97f4563f9b 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-intersections.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-intersections.tex
@@ -13,9 +13,9 @@
% The Current Maintainer of this work is Alain Matthes.
% utf8 encoding
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-tools-lua-intersections.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-tools-lua-intersections.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% intersection de deux lignes
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-math.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-math.tex
index 18ee85bf6e..7066ee9481 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-math.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-math.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-tools-lua-math.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-tools-lua-math.tex}
\makeatletter
%<-------------------------------------------------------------------------->
%<-------------------------------------------------------------------------->
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-BB.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-BB.tex
index edefa3295e..883715320e 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-BB.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-BB.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-eu-BB.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-eu-BB.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
\def\tkzShowBB{\pgfutil@ifnextchar[{\tkz@ShowBB}{\tkz@ShowBB[]}}
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-angles.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-angles.tex
index 7fd0f81bd5..b47a54f5b8 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-angles.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-angles.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-tools-eu-angles.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-tools-eu-angles.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
%<--------------------------------------------------------------------------–>
@@ -70,5 +70,10 @@
\def\tkzGetAngle#1{%
\global\expandafter\edef\csname #1\endcsname{\tkzAngleResult}
}
+\def\tkzDet(#1,#2,#3){%
+\tkzFindSlopeAngle(#2,#1)\tkzGetAngle{tkz@FirstAngle}
+\tkzFindSlopeAngle(#2,#3)\tkzGetAngle{tkz@SecondAngle}
+\tkzNormalizeAngle(\tkz@FirstAngle,\tkz@SecondAngle)
+}
\makeatother
\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-base.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-base.tex
index 28776e3fd4..fd77dc1f4b 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-base.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-base.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-tools-eu-base.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-tools-eu-base.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
\global\let\tkz@tmp@xa\tkz@init@xmin% modif 2016
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-colors.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-colors.tex
index 87a897bfcb..d3f0e0c951 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-colors.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-colors.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-tools-eu-colors}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-tools-eu-colors}
\makeatletter
%<------ Initialisation of the colors with tkzSetUpColors ----------------->
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-intersections.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-intersections.tex
index 4122099f44..489af8baf7 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-intersections.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-intersections.tex
@@ -13,9 +13,9 @@
% The Current Maintainer of this work is Alain Matthes.
% utf8 encoding
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-tools-eu-intersections.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-tools-eu-intersections.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% intersection de deux lignes
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-math.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-math.tex
index 73ea0a041a..35821c3282 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-math.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-math.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-tools-eu-math.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-tools-eu-math.tex}
\makeatletter
%<-------------------------------------------------------------------------->
% \tkzpointnormalised#
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-modules.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-modules.tex
index ed90c18514..4955910f97 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-modules.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-modules.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-tools-eu-utilities.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-tools-eu-utilities.tex}
\makeatletter
%<------------- % chargement des modules ---------------------------------->
\def\tkz@obj@all{angles,arcs,compass,defcircles,deflines,defpoints,defpointsby,defpointsrnd,defpointswith,polygons,protractor,sectors,show,triangles}%
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-text.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-text.tex
index 53b81f7d09..47880e5b45 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-text.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-text.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-tools-eu-text.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-tools-eu-text.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% tkzText
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-utilities.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-utilities.tex
index 7b41fad768..2b7cf5254b 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-utilities.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-utilities.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-tools-eu-utilities.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-tools-eu-utilities.tex}
\makeatletter
\pgfkeys{/tkzClip/.cd,
space/.store in = {\tkz@CLI@space},
diff --git a/macros/latex/contrib/tuda-ci/README.md b/macros/latex/contrib/tuda-ci/README.md
index f3f8de560e..f7aa6519a1 100644
--- a/macros/latex/contrib/tuda-ci/README.md
+++ b/macros/latex/contrib/tuda-ci/README.md
@@ -2,7 +2,7 @@
Copyright (C) Marei Peischl <marei@peitex.de>, 2018–2024
- tuda-ci v3.37 (2024-04-21)
+ tuda-ci v3.38 (2024-05-07)
***************************************************************************
@@ -358,3 +358,5 @@ leaflets | DEMO-TUDaLeaflet.tex | tudaleaflet.cls
* 3.37 (2024-04-21)
- refactoring the bundle
- small layout adjustments and bugfixes
+ * 3.38 (2024-05-07)
+ - update PhD affidavit
diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaAnnouncement.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaAnnouncement.pdf
index e59b22b57e..08f3ff90a1 100644
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaAnnouncement.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaAnnouncement.pdf
Binary files differ
diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer.pdf
index 0ab6952c8f..90c6f7e9c4 100644
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer.pdf
Binary files differ
diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer2023.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer2023.pdf
index dbde310191..9c765b69b3 100644
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer2023.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer2023.pdf
Binary files differ
diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaExercise.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaExercise.pdf
index 21defaf2a0..4de18237bc 100644
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaExercise.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaExercise.pdf
Binary files differ
diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLeaflet.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLeaflet.pdf
index 25f1ce243c..4c91fe977d 100644
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLeaflet.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLeaflet.pdf
Binary files differ
diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLetter.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLetter.pdf
index ce33e4ba24..d3ff6b21bf 100644
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLetter.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLetter.pdf
Binary files differ
diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPhD.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPhD.pdf
index 1ddf6f90b6..3928a61062 100644
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPhD.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPhD.pdf
Binary files differ
diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPoster.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPoster.pdf
index 0986455f21..1f4d8165c2 100644
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPoster.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPoster.pdf
Binary files differ
diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPub.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPub.pdf
index 02f0788605..089c10109f 100644
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPub.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPub.pdf
Binary files differ
diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaReport.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaReport.pdf
index 7ed32cae75..b7cb7640ff 100644
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaReport.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaReport.pdf
Binary files differ
diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaSciPoster.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaSciPoster.pdf
index fc351f0054..99ec17f31a 100644
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaSciPoster.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaSciPoster.pdf
Binary files differ
diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaThesis.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaThesis.pdf
index 4633b07055..51f92e0df3 100644
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaThesis.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaThesis.pdf
Binary files differ
diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaAnnouncement.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaAnnouncement.tex
index 2a2ae6c882..f8f2e3a80e 100644
--- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaAnnouncement.tex
+++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaAnnouncement.tex
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaAnnouncement-de.tex' version 3.37 (2024-04-21),
+%% This is file `DEMO-TUDaAnnouncement-de.tex' version 3.38 (2024-05-07),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaBeamer.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaBeamer.tex
index f653c25bbb..a11d19f03e 100644
--- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaBeamer.tex
+++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaBeamer.tex
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaBeamer-de.tex' version 3.37 (2024-04-21),
+%% This is file `DEMO-TUDaBeamer-de.tex' version 3.38 (2024-05-07),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaBeamer2023.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaBeamer2023.tex
index b3bf05ce30..f94c402bfe 100644
--- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaBeamer2023.tex
+++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaBeamer2023.tex
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaBeamer2023.tex' version 3.37 (2024-04-21),
+%% This is file `DEMO-TUDaBeamer2023.tex' version 3.38 (2024-05-07),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaBibliography.bib b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaBibliography.bib
index b516931fb1..d293b6a339 100644
--- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaBibliography.bib
+++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaBibliography.bib
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaBibliography.bib' version 3.37 (2024-04-21),
+%% This is file `DEMO-TUDaBibliography.bib' version 3.38 (2024-05-07),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaExercise.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaExercise.tex
index f019e9011e..c5aa84e832 100644
--- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaExercise.tex
+++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaExercise.tex
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaExercise-de.tex' version 3.37 (2024-04-21),
+%% This is file `DEMO-TUDaExercise-de.tex' version 3.38 (2024-05-07),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaFromaddress.lco b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaFromaddress.lco
index 3046285e53..1d218f7a2d 100644
--- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaFromaddress.lco
+++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaFromaddress.lco
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaFromaddress.lco' version 3.37 (2024-04-21),
+%% This is file `DEMO-TUDaFromaddress.lco' version 3.38 (2024-05-07),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaLeaflet.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaLeaflet.tex
index 6f0fc6c977..5d0b8aeb96 100644
--- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaLeaflet.tex
+++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaLeaflet.tex
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaLeaflet-de.tex' version 3.37 (2024-04-21),
+%% This is file `DEMO-TUDaLeaflet-de.tex' version 3.38 (2024-05-07),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaLetter.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaLetter.tex
index 6a6ad17e66..bedce9c23f 100644
--- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaLetter.tex
+++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaLetter.tex
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaLetter-de.tex' version 3.37 (2024-04-21),
+%% This is file `DEMO-TUDaLetter-de.tex' version 3.38 (2024-05-07),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPhD.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPhD.tex
index a2c4a6c39c..d1742bebfd 100644
--- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPhD.tex
+++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPhD.tex
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaPhD-de.tex' version 3.37 (2024-04-21)
+%% This is file `DEMO-TUDaPhD-de.tex' version 3.38 (2024-05-07)
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPoster.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPoster.tex
index 94fcfeae3d..e10f84dd8b 100644
--- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPoster.tex
+++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPoster.tex
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaPoster-de.tex' version 3.37 (2024-04-21),
+%% This is file `DEMO-TUDaPoster-de.tex' version 3.38 (2024-05-07),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPub.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPub.tex
index 3c8bb81129..0bf058e1c3 100644
--- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPub.tex
+++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPub.tex
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaPub-de.tex' version 3.37 (2024-04-21),
+%% This is file `DEMO-TUDaPub-de.tex' version 3.38 (2024-05-07),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaReport.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaReport.tex
index ee13759914..a3b0e56310 100644
--- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaReport.tex
+++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaReport.tex
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaReport-de.tex' version 3.37 (2024-04-21),
+%% This is file `DEMO-TUDaReport-de.tex' version 3.38 (2024-05-07),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaSciPoster.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaSciPoster.tex
index 7a74831e5d..bd8082039a 100644
--- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaSciPoster.tex
+++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaSciPoster.tex
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaSciPoster-de.tex' version 3.37 (2024-04-21),
+%% This is file `DEMO-TUDaSciPoster-de.tex' version 3.38 (2024-05-07),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaThesis.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaThesis.tex
index 6d8cdf6110..a646b8fd8a 100644
--- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaThesis.tex
+++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaThesis.tex
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaThesis-de.tex' version 3.37 (2024-04-21)
+%% This is file `DEMO-TUDaThesis-de.tex' version 3.38 (2024-05-07)
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/tex/beamercolorthemeTUDa.sty b/macros/latex/contrib/tuda-ci/tex/beamercolorthemeTUDa.sty
index 0715afa9d3..67c92a5939 100644
--- a/macros/latex/contrib/tuda-ci/tex/beamercolorthemeTUDa.sty
+++ b/macros/latex/contrib/tuda-ci/tex/beamercolorthemeTUDa.sty
@@ -1,4 +1,4 @@
-%% This is file `beamercolorthemeTUDa.sty' version 3.37 (2024-04-21),
+%% This is file `beamercolorthemeTUDa.sty' version 3.38 (2024-05-07),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/tex/beamercolorthemeTUDa2008.sty b/macros/latex/contrib/tuda-ci/tex/beamercolorthemeTUDa2008.sty
index c9b9747fb6..46c7da19c9 100644
--- a/macros/latex/contrib/tuda-ci/tex/beamercolorthemeTUDa2008.sty
+++ b/macros/latex/contrib/tuda-ci/tex/beamercolorthemeTUDa2008.sty
@@ -1,4 +1,4 @@
-%% This is file `beamercolorthemeTUDa2008.sty' version 3.37 (2024-04-21)
+%% This is file `beamercolorthemeTUDa2008.sty' version 3.38 (2024-05-07)
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa.sty b/macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa.sty
index 9b3dd3a619..a245163dc1 100644
--- a/macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa.sty
+++ b/macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa.sty
@@ -1,4 +1,4 @@
-%% This is file `beamerfontthemeTUDa.sty' version 3.37 (2024-04-21)
+%% This is file `beamerfontthemeTUDa.sty' version 3.38 (2024-05-07)
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa2008.sty b/macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa2008.sty
index 7edc07a3c1..737f759508 100644
--- a/macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa2008.sty
+++ b/macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa2008.sty
@@ -1,4 +1,4 @@
-%% This is file `beamerfontthemeTUDa2008.sty' version 3.37 (2024-04-21)
+%% This is file `beamerfontthemeTUDa2008.sty' version 3.38 (2024-05-07)
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa.sty b/macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa.sty
index 7789e86e6e..6a9072ed6e 100644
--- a/macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa.sty
+++ b/macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa.sty
@@ -1,4 +1,4 @@
-%% This is file `beamerinnerthemeTUDa.sty' version 3.37 (2024-04-21)
+%% This is file `beamerinnerthemeTUDa.sty' version 3.38 (2024-05-07)
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa2008.sty b/macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa2008.sty
index b8b9d7d4f2..cab08e361c 100644
--- a/macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa2008.sty
+++ b/macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa2008.sty
@@ -1,4 +1,4 @@
-%% This is file `beamerinnerthemeTUDa2008.sty' version 3.37 (2024-04-21),
+%% This is file `beamerinnerthemeTUDa2008.sty' version 3.38 (2024-05-07),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa2023.sty b/macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa2023.sty
index ebef3683a6..22d50340c2 100644
--- a/macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa2023.sty
+++ b/macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa2023.sty
@@ -1,4 +1,4 @@
-%% This is file `beamerinnerthemeTUDa2023.sty' version 3.37 (2024-04-21),
+%% This is file `beamerinnerthemeTUDa2023.sty' version 3.38 (2024-05-07),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/tex/beamerouterthemeTUDa.sty b/macros/latex/contrib/tuda-ci/tex/beamerouterthemeTUDa.sty
index 71431e1182..6081832c16 100644
--- a/macros/latex/contrib/tuda-ci/tex/beamerouterthemeTUDa.sty
+++ b/macros/latex/contrib/tuda-ci/tex/beamerouterthemeTUDa.sty
@@ -1,4 +1,4 @@
-%% This is file `beamerouterthemeTUDa.sty' version 3.37 (2024-04-21),
+%% This is file `beamerouterthemeTUDa.sty' version 3.38 (2024-05-07),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/tex/beamerouterthemeTUDa2008.sty b/macros/latex/contrib/tuda-ci/tex/beamerouterthemeTUDa2008.sty
index 177a9557d3..70e31eecde 100644
--- a/macros/latex/contrib/tuda-ci/tex/beamerouterthemeTUDa2008.sty
+++ b/macros/latex/contrib/tuda-ci/tex/beamerouterthemeTUDa2008.sty
@@ -1,4 +1,4 @@
-%% This is file `beamerouterthemeTUDa2008.sty' version 3.37 (2024-04-21),
+%% This is file `beamerouterthemeTUDa2008.sty' version 3.38 (2024-05-07),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa-mecheng.sty b/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa-mecheng.sty
index a7ebab5e2b..04fac2c523 100644
--- a/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa-mecheng.sty
+++ b/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa-mecheng.sty
@@ -1,4 +1,4 @@
-%% This is file `beamerthemeTUDa-mecheng.sty' version 3.37 (2024-04-21),
+%% This is file `beamerthemeTUDa-mecheng.sty' version 3.38 (2024-05-07),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -25,8 +25,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.37}
-\def\filedate{2024-04-21}
+\def\fileversion{3.38}
+\def\filedate{2024-05-07}
\ProvidesExplPackage{beamerthemeTUDa-mecheng}{\filedate}{\fileversion}{specific tudabeamer configuration for the department of mechanical engineering}
diff --git a/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa.sty b/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa.sty
index 88d58b1fa8..7287a8625e 100644
--- a/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa.sty
+++ b/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa.sty
@@ -1,4 +1,4 @@
-%% This is file `beamerthemeTUDa.sty' version 3.37 (2024-04-21),
+%% This is file `beamerthemeTUDa.sty' version 3.38 (2024-05-07),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa2008.sty b/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa2008.sty
index a2c54a4730..684fc16de5 100644
--- a/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa2008.sty
+++ b/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa2008.sty
@@ -1,4 +1,4 @@
-%% This is file `beamerthemeTUDa2008.sty' version 3.37 (2024-04-21),
+%% This is file `beamerthemeTUDa2008.sty' version 3.38 (2024-05-07),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -25,8 +25,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.37}
-\def\filedate{2024-04-21}
+\def\fileversion{3.38}
+\def\filedate{2024-05-07}
\NeedsTeXFormat{LaTeX2e}[2022/06/01]
\ProvidesPackage{beamerthemeTUDa2008}
[\filedate\space\fileversion\space beamer theme using the Corporate Design of TU Darmstadt Design of 2008]
diff --git a/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa2023.sty b/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa2023.sty
index 417ee0c97c..48e7d697b9 100644
--- a/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa2023.sty
+++ b/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa2023.sty
@@ -1,4 +1,4 @@
-%% This is file `beamerthemeTUDa2023.sty' version 3.37 (2024-04-21)
+%% This is file `beamerthemeTUDa2023.sty' version 3.38 (2024-05-07)
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/tex/tuda-a0paper.clo b/macros/latex/contrib/tuda-ci/tex/tuda-a0paper.clo
index 1ea5a3e716..1978288520 100644
--- a/macros/latex/contrib/tuda-ci/tex/tuda-a0paper.clo
+++ b/macros/latex/contrib/tuda-ci/tex/tuda-a0paper.clo
@@ -1,4 +1,4 @@
-%% This is file `tuda-a0paper.clo' version 3.37 (2024-04-21),
+%% This is file `tuda-a0paper.clo' version 3.38 (2024-05-07),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -25,8 +25,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.37}
-\def\filedate{2024-04-21}
+\def\fileversion{3.38}
+\def\filedate{2024-05-07}
\ProvidesExplFile{tuda-a0paper.clo}{\filedate}{\fileversion}{tuda-ci~size~adjustments~for~a0paper}
\cs_set:Nn \ptxcd_setup_title_sizes: {
\cs_set:Nn \ptxcd_title_fontsize: {{125pt}{165pt}}
diff --git a/macros/latex/contrib/tuda-ci/tex/tuda-a1paper.clo b/macros/latex/contrib/tuda-ci/tex/tuda-a1paper.clo
index 5336c146b1..bc63208933 100644
--- a/macros/latex/contrib/tuda-ci/tex/tuda-a1paper.clo
+++ b/macros/latex/contrib/tuda-ci/tex/tuda-a1paper.clo
@@ -1,4 +1,4 @@
-%% This is file `tuda-a1paper.clo' version 3.37 (2024-04-21),
+%% This is file `tuda-a1paper.clo' version 3.38 (2024-05-07),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -25,8 +25,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.37}
-\def\filedate{2024-04-21}
+\def\fileversion{3.38}
+\def\filedate{2024-05-07}
\ProvidesExplFile{tuda-a1paper.clo}{\filedate}{\fileversion}{tuda-ci~size~adjustments~for~a1paper}
\cs_set:Nn \ptxcd_setup_title_sizes: {
\cs_set:Nn \ptxcd_title_fontsize: {{86pt}{120pt}}
diff --git a/macros/latex/contrib/tuda-ci/tex/tuda-a2paper.clo b/macros/latex/contrib/tuda-ci/tex/tuda-a2paper.clo
index 120ef18fa4..cda6b6762b 100644
--- a/macros/latex/contrib/tuda-ci/tex/tuda-a2paper.clo
+++ b/macros/latex/contrib/tuda-ci/tex/tuda-a2paper.clo
@@ -1,4 +1,4 @@
-%% This is file `tuda-a2paper.clo' version 3.37 (2024-04-21),
+%% This is file `tuda-a2paper.clo' version 3.38 (2024-05-07),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -25,8 +25,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.37}
-\def\filedate{2024-04-21}
+\def\fileversion{3.38}
+\def\filedate{2024-05-07}
\ProvidesExplFile{tuda-a2paper.clo}{\filedate}{\fileversion}{tuda-ci~size~adjustments~for~a0paper}
\cs_set:Nn \ptxcd_setup_title_sizes: {
\cs_set:Nn \ptxcd_title_fontsize: {{65pt}{82pt}}
diff --git a/macros/latex/contrib/tuda-ci/tex/tuda-a3paper.clo b/macros/latex/contrib/tuda-ci/tex/tuda-a3paper.clo
index 9525af7b5f..3633a54584 100644
--- a/macros/latex/contrib/tuda-ci/tex/tuda-a3paper.clo
+++ b/macros/latex/contrib/tuda-ci/tex/tuda-a3paper.clo
@@ -1,4 +1,4 @@
-%% This is file `tuda-a3paper.clo' version 3.37 (2024-04-21),
+%% This is file `tuda-a3paper.clo' version 3.38 (2024-05-07),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -25,8 +25,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.37}
-\def\filedate{2024-04-21}
+\def\fileversion{3.38}
+\def\filedate{2024-05-07}
\ProvidesExplFile{tuda-a3paper.clo}{\filedate}{\fileversion}{tuda-ci~size~adjustments~for~a3paper}
\cs_set:Nn \ptxcd_setup_title_sizes: {
\cs_set:Nn \ptxcd_title_fontsize: {{47pt}{61pt}}
diff --git a/macros/latex/contrib/tuda-ci/tex/tuda-a4paper.clo b/macros/latex/contrib/tuda-ci/tex/tuda-a4paper.clo
index 66c909d52f..3618253919 100644
--- a/macros/latex/contrib/tuda-ci/tex/tuda-a4paper.clo
+++ b/macros/latex/contrib/tuda-ci/tex/tuda-a4paper.clo
@@ -1,4 +1,4 @@
-%% This is file `tuda-a4paper.clo' version 3.37 (2024-04-21),
+%% This is file `tuda-a4paper.clo' version 3.38 (2024-05-07),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -25,8 +25,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.37}
-\def\filedate{2024-04-21}
+\def\fileversion{3.38}
+\def\filedate{2024-05-07}
\ProvidesExplFile{tuda-a4paper.clo}{\filedate}{\fileversion}{tuda-ci~size~adjustments~for~a4paper}
\cs_set:Nn \ptxcd_setup_title_sizes: {
\cs_set:Nn \ptxcd_title_fontsize: {{36pt}{47pt}}
diff --git a/macros/latex/contrib/tuda-ci/tex/tuda-a5paper.clo b/macros/latex/contrib/tuda-ci/tex/tuda-a5paper.clo
index 0587a4ca11..fda679c183 100644
--- a/macros/latex/contrib/tuda-ci/tex/tuda-a5paper.clo
+++ b/macros/latex/contrib/tuda-ci/tex/tuda-a5paper.clo
@@ -1,4 +1,4 @@
-%% This is file `tuda-a5paper.clo' version 3.37 (2024-04-21),
+%% This is file `tuda-a5paper.clo' version 3.38 (2024-05-07),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -25,8 +25,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.37}
-\def\filedate{2024-04-21}
+\def\fileversion{3.38}
+\def\filedate{2024-05-07}
\ProvidesExplFile{tuda-a5paper.clo}{\filedate}{\fileversion}{tuda-ci~size~adjustments~for~a5paper}
\cs_set:Nn \ptxcd_setup_title_sizes: {
\cs_set:Nn \ptxcd_title_fontsize: {{22pt}{28pt}}
diff --git a/macros/latex/contrib/tuda-ci/tex/tuda-pgfplots.sty b/macros/latex/contrib/tuda-ci/tex/tuda-pgfplots.sty
index 42f186ce35..04e7c5712d 100644
--- a/macros/latex/contrib/tuda-ci/tex/tuda-pgfplots.sty
+++ b/macros/latex/contrib/tuda-ci/tex/tuda-pgfplots.sty
@@ -1,4 +1,4 @@
-%% This is file `tuda-pgfplots.sty' version 3.37 (2024-04-21),
+%% This is file `tuda-pgfplots.sty' version 3.38 (2024-05-07),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -25,8 +25,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.37}
-\def\filedate{2024-04-21}
+\def\fileversion{3.38}
+\def\filedate{2024-05-07}
% Special thanks to: Sebastian Schöps Institut Theorie Elektromagnetischer Felder (TEMF), TU Darmstadt
% The original version of this file has been inspired by the colorscheme in the Metropolis beamer theme by Matthias Vogelgesang https://github.com/matze/mtheme
\ProvidesPackage{tuda-pgfplots}[\filedate\space\fileversion\space tuda-ci pgfplots color schemes]
diff --git a/macros/latex/contrib/tuda-ci/tex/tudabeamer.cls b/macros/latex/contrib/tuda-ci/tex/tudabeamer.cls
index d4d5bddd29..fdf0d8e02f 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudabeamer.cls
+++ b/macros/latex/contrib/tuda-ci/tex/tudabeamer.cls
@@ -1,4 +1,4 @@
-%% This is file `tudabeamer.cls' version 3.37 (2024-04-21),
+%% This is file `tudabeamer.cls' version 3.38 (2024-05-07),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -25,8 +25,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.37}
-\def\filedate{2024-04-21}
+\def\fileversion{3.38}
+\def\filedate{2024-05-07}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{tudabeamer}
[\filedate\space\fileversion\space]
diff --git a/macros/latex/contrib/tuda-ci/tex/tudacolors.def b/macros/latex/contrib/tuda-ci/tex/tudacolors.def
index 4311888a04..6a8afea418 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudacolors.def
+++ b/macros/latex/contrib/tuda-ci/tex/tudacolors.def
@@ -1,4 +1,4 @@
-%% This is file `tudacolors.def' version 3.37 (2024-04-21),
+%% This is file `tudacolors.def' version 3.38 (2024-05-07),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -25,8 +25,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.37}
-\def\filedate{2024-04-21}
+\def\fileversion{3.38}
+\def\filedate{2024-05-07}
\ProvidesFile{tudacolors.def}
[\filedate\space\fileversion\space Color definitions for tuda-ci]
diff --git a/macros/latex/contrib/tuda-ci/tex/tudacolors.sty b/macros/latex/contrib/tuda-ci/tex/tudacolors.sty
index 3f93095409..137697f261 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudacolors.sty
+++ b/macros/latex/contrib/tuda-ci/tex/tudacolors.sty
@@ -1,4 +1,4 @@
-%% This is file `tudacolors.sty' version 3.37 (2024-04-21),
+%% This is file `tudacolors.sty' version 3.38 (2024-05-07),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -25,8 +25,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.37}
-\def\filedate{2024-04-21}
+\def\fileversion{3.38}
+\def\filedate{2024-05-07}
\NeedsTeXFormat{LaTeX2e}
\ProvidesExplPackage{tudacolors}{\filedate}{\fileversion}{Color definition for TU Darmstadt's tuda-ci bundle}
diff --git a/macros/latex/contrib/tuda-ci/tex/tudaexercise.cls b/macros/latex/contrib/tuda-ci/tex/tudaexercise.cls
index 4e2a0a435d..07afd270c2 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudaexercise.cls
+++ b/macros/latex/contrib/tuda-ci/tex/tudaexercise.cls
@@ -1,4 +1,4 @@
-%% This is file `tudaexercise.cls' version 3.37 (2024-04-21),
+%% This is file `tudaexercise.cls' version 3.38 (2024-05-07),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -25,8 +25,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.37}
-\def\filedate{2024-04-21}
+\def\fileversion{3.38}
+\def\filedate{2024-05-07}
\NeedsTeXFormat{LaTeX2e}
\ProvidesExplClass{tudaexercise}
diff --git a/macros/latex/contrib/tuda-ci/tex/tudafonts.sty b/macros/latex/contrib/tuda-ci/tex/tudafonts.sty
index 9eb9e3e4b2..6a7873942a 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudafonts.sty
+++ b/macros/latex/contrib/tuda-ci/tex/tudafonts.sty
@@ -1,4 +1,4 @@
-%% This is file `tudafonts.sty' version 3.37 (2024-04-21),
+%% This is file `tudafonts.sty' version 3.38 (2024-05-07),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -25,8 +25,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.37}
-\def\filedate{2024-04-21}
+\def\fileversion{3.38}
+\def\filedate{2024-05-07}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{tudafonts}
[\filedate\space\fileversion\space
diff --git a/macros/latex/contrib/tuda-ci/tex/tudaleaflet.cls b/macros/latex/contrib/tuda-ci/tex/tudaleaflet.cls
index b4336cfef9..de3430b507 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudaleaflet.cls
+++ b/macros/latex/contrib/tuda-ci/tex/tudaleaflet.cls
@@ -1,4 +1,4 @@
-%% This is file `tudaleaflet.cls' version 3.37 (2024-04-21),
+%% This is file `tudaleaflet.cls' version 3.38 (2024-05-07),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -25,8 +25,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.37}
-\def\filedate{2024-04-21}
+\def\fileversion{3.38}
+\def\filedate{2024-05-07}
\NeedsTeXFormat{LaTeX2e}
\ProvidesExplPackage{tudaleaflet}{\filedate}{\fileversion}{Leaflets using the Corporate Design of TU Darmstadt}
diff --git a/macros/latex/contrib/tuda-ci/tex/tudaletter.cls b/macros/latex/contrib/tuda-ci/tex/tudaletter.cls
index e035975c05..15baed6069 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudaletter.cls
+++ b/macros/latex/contrib/tuda-ci/tex/tudaletter.cls
@@ -1,4 +1,4 @@
-%% This is file `tudaletter.cls' version 3.37 (2024-04-21),
+%% This is file `tudaletter.cls' version 3.38 (2024-05-07),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -25,8 +25,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.37}
-\def\filedate{2024-04-21}
+\def\fileversion{3.38}
+\def\filedate{2024-05-07}
\NeedsTeXFormat{LaTeX2e}
\ProvidesExplClass{tudaletter}
diff --git a/macros/latex/contrib/tuda-ci/tex/tudalettersize10pt.clo b/macros/latex/contrib/tuda-ci/tex/tudalettersize10pt.clo
index a9175b8038..54348ee206 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudalettersize10pt.clo
+++ b/macros/latex/contrib/tuda-ci/tex/tudalettersize10pt.clo
@@ -1,4 +1,4 @@
-%% This is file `tudalettersize10pt.clo' version 3.37 (2024-04-21),
+%% This is file `tudalettersize10pt.clo' version 3.38 (2024-05-07),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/tex/tudamecheng.cfg b/macros/latex/contrib/tuda-ci/tex/tudamecheng.cfg
index aacecd020e..83f385b172 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudamecheng.cfg
+++ b/macros/latex/contrib/tuda-ci/tex/tudamecheng.cfg
@@ -1,4 +1,4 @@
-%% This is file `tudamecheng.cfg' version 3.37 (2024-04-21),
+%% This is file `tudamecheng.cfg' version 3.38 (2024-05-07),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -25,8 +25,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.37}
-\def\filedate{2024-04-21}
+\def\fileversion{3.38}
+\def\filedate{2024-05-07}
\RequirePackage{expl3}
\ProvidesExplFile{tudamecheng.cfg}
{\filedate}{\fileversion}{Special Features the department of mechanical engineering of Darmstadt's Corporate Design (tuda-ci)}
diff --git a/macros/latex/contrib/tuda-ci/tex/tudaposter.cls b/macros/latex/contrib/tuda-ci/tex/tudaposter.cls
index aa4fc6fd9d..99b2d2d07d 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudaposter.cls
+++ b/macros/latex/contrib/tuda-ci/tex/tudaposter.cls
@@ -1,4 +1,4 @@
-%% This is file `tudaposter.cls' version 3.37 (2024-04-21),
+%% This is file `tudaposter.cls' version 3.38 (2024-05-07),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -25,8 +25,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.37}
-\def\filedate{2024-04-21}
+\def\fileversion{3.38}
+\def\filedate{2024-05-07}
\NeedsTeXFormat{LaTeX2e}
\ProvidesExplPackage{tudaposter}{\filedate}{\fileversion}{Poster Layouts for the Corporate Design of TU Darmstadt}
diff --git a/macros/latex/contrib/tuda-ci/tex/tudapub.cls b/macros/latex/contrib/tuda-ci/tex/tudapub.cls
index 3b4a762673..a863197f83 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudapub.cls
+++ b/macros/latex/contrib/tuda-ci/tex/tudapub.cls
@@ -1,4 +1,4 @@
-%% This is file `tudapub.cls' version 3.37 (2024-04-21),
+%% This is file `tudapub.cls' version 3.38 (2024-05-07),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -25,8 +25,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.37}
-\def\filedate{2024-04-21}
+\def\fileversion{3.38}
+\def\filedate{2024-05-07}
\NeedsTeXFormat{LaTeX2e}
\ProvidesExplClass{tudapub}
diff --git a/macros/latex/contrib/tuda-ci/tex/tudarules.sty b/macros/latex/contrib/tuda-ci/tex/tudarules.sty
index fcf7e9f6ac..76dae0e2e7 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudarules.sty
+++ b/macros/latex/contrib/tuda-ci/tex/tudarules.sty
@@ -1,4 +1,4 @@
-%% This is file `tudarules.sty' version 3.37 (2024-04-21),
+%% This is file `tudarules.sty' version 3.38 (2024-05-07),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -25,8 +25,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.37}
-\def\filedate{2024-04-21}
+\def\fileversion{3.38}
+\def\filedate{2024-05-07}
\NeedsTeXFormat{LaTeX2e}
\ProvidesExplPackage{tudarules}{\filedate}{\fileversion}{Creation of colored bars for tuda-ci bundle}
diff --git a/macros/latex/contrib/tuda-ci/tex/tudasciposter.cls b/macros/latex/contrib/tuda-ci/tex/tudasciposter.cls
index 856d0dab2d..e3bda42e20 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudasciposter.cls
+++ b/macros/latex/contrib/tuda-ci/tex/tudasciposter.cls
@@ -1,4 +1,4 @@
-%% This is file `tudasciposter.cls' version 3.37 (2024-04-21),
+%% This is file `tudasciposter.cls' version 3.38 (2024-05-07),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -25,8 +25,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.37}
-\def\filedate{2024-04-21}
+\def\fileversion{3.38}
+\def\filedate{2024-05-07}
\NeedsTeXFormat{LaTeX2e}
\ProvidesExplPackage{tudasciposter}{\filedate}{\fileversion}{Scientific Poster Layout for TU Darmstadt}
diff --git a/macros/latex/contrib/tuda-ci/tex/tudasize9pt.clo b/macros/latex/contrib/tuda-ci/tex/tudasize9pt.clo
index e92dc5ece8..8537d16f7c 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudasize9pt.clo
+++ b/macros/latex/contrib/tuda-ci/tex/tudasize9pt.clo
@@ -1,4 +1,4 @@
-%% This is file `tudasize9pt.clo' version 3.37 (2024-04-21),
+%% This is file `tudasize9pt.clo' version 3.38 (2024-05-07),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/tex/tudathesis.cfg b/macros/latex/contrib/tuda-ci/tex/tudathesis.cfg
index ffd6ea3ac4..e25ded1a68 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudathesis.cfg
+++ b/macros/latex/contrib/tuda-ci/tex/tudathesis.cfg
@@ -1,4 +1,4 @@
-%% This is file `tudathesis.cfg' version 3.37 (2024-04-21),
+%% This is file `tudathesis.cfg' version 3.38 (2024-05-07),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -25,8 +25,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.37}
-\def\filedate{2024-04-21}
+\def\fileversion{3.38}
+\def\filedate{2024-05-07}
\RequirePackage{expl3}
\ProvidesExplFile{tudathesis.cfg}
{\filedate}{\fileversion}{Special Features for publication type 'thesis' using TU Darmstadt's Corporate Design (tuda-ci)}
@@ -667,7 +667,7 @@
Ich versichere hiermit, dass zu einem vorherigen Zeitpunkt noch keine Promotion versucht wurde. In diesem Fall sind nähere Angaben über Zeitpunkt, Hochschule, Dissertationsthema und Ergebnis dieses Versuchs mitzuteilen.
\subsection*{\S\,9 Abs. 1 PromO}
- Ich versichere hiermit, dass die vorliegende Dissertation selbstständig und nur unter Verwendung der angegebenen Quellen verfasst wurde.
+ Ich versichere hiermit, dass die vorliegende Dissertation – abgesehen von den in ihr ausdrücklich genannten Hilfen – selbstständig verfasst wurde und dass die „Grundsätze zur Sicherung guter wissenschaftlicher Praxis an der Technischen Universität Darmstadt“ und die „Leitlinien zum Umgang mit digitalen Forschungsdaten an der TU Darmstadt“ in den jeweils aktuellen Versionen bei der Verfassung der Dissertation beachtet wurden.
\subsection*{\S\,9 Abs. 2 PromO}
Die Arbeit hat bisher noch nicht zu Prüfungszwecken gedient.
diff --git a/macros/latex/contrib/typog/Makefile b/macros/latex/contrib/typog/Makefile
new file mode 100644
index 0000000000..bb3c83ab24
--- /dev/null
+++ b/macros/latex/contrib/typog/Makefile
@@ -0,0 +1,302 @@
+### name: Makefile
+### synopsis: Build `typog' style file, tools, and documentation
+### author: Dr. Christoph L. Spiel
+### GNU make version: 4.3
+
+
+SHELL := /bin/sh
+
+
+LATEX := /usr/bin/env max_print_line=2147483647 pdflatex
+LATEX_FLAGS := -file-line-error -halt-on-error -interaction=nonstopmode
+LATEX_RERUN_TRIGGER := '^Package rerunfilecheck Warning: File [^ ]* has changed'
+LATEX_WARNING := '^LaTeX (|[A-Za-z0-9_]* )Warning:'
+
+MAKEINDEX := makeindex
+MAKEINDEX_FLAGS := -q
+
+
+METAPOST := mpost
+METAPOST_FLAGS := -file-line-error -interaction=nonstopmode -tex=latex
+
+
+PODCHECKER := podchecker
+PODCHECKER_FLAGS := -warnings
+
+
+POD2MAN := pod2man
+POD2MAN_FLAGS := $$(sed -ne 's,\\ProvidesPackage{typog}\[\([0-9][0-9]*/[0-9][0-9]*/[0-9][0-9]*\) *v\([^ ]*\) .*$$,--date=\1 --release=\2,p' < typog.sty)
+
+
+POD2TEXI := pod2texi
+POD2TEXI_FLAGS :=
+
+
+GROFF := groff
+## Codes of serif fonts that work for PDF output
+## BM: URW Bookman L
+## N: URW Century Schoolbook L
+## P: URW Palladio L
+## T: URW Nimbus Roman No9 L
+GROFF_FLAGS := -Tpdf -dpaper=a4 -fP -man -wall
+
+
+SPELLCHECK := aspell
+SPELLCHECK_FLAGS := \
+ --add-tex-command='citenum p' --add-tex-command='code p' \
+ --add-tex-command='Cref p' --add-tex-command='cref p' \
+ --add-tex-command='cs p' \
+ --add-tex-command='DescribeEnv p' --add-tex-command='DescribeMacro p' \
+ --add-tex-command='marg p' --add-tex-command='meta p' \
+ --add-tex-command='oarg p' \
+ --lang=en_US --mode=tex
+
+
+SOURCE_FILES := LICENSE Makefile typog.dtx typog.ins
+
+
+
+.PHONY: all
+all: sty pdf man
+
+
+.PHONY: sty
+sty: typog.sty
+
+
+.PHONY: pdf
+pdf: doc ex nomt
+
+
+.PHONY: doc
+doc: typog.pdf
+
+
+.PHONY: ex
+ex: typog-example.pdf
+
+
+.PHONY: nomt
+nomt: typog-nomt.pdf
+
+
+.PHONY: man
+man: typog-grep.1
+
+
+.PHONY: cpio
+cpio:
+ cd ..; \
+ echo $(addprefix typog/,$(SOURCE_FILES)) | \
+ cpio -o | \
+ gzip > "typog-$$(date +%Y-%m-%d).cpio.gz"
+
+
+.PHONY: tar
+tar:
+ cd ..; \
+ tar czf "typog-$$(date +%Y-%m-%d).tar.gz" $(addprefix typog/,$(SOURCE_FILES))
+
+
+.PHONY: clean
+clean:
+ $(RM) ./*.1 ./*.aux ./*.brf ./*.glg ./*.glo ./*.gls
+ $(RM) ./*.hd ./*.idx ./*.ilg ./*.ind ./*.loe ./*.lof ./*.log ./*.lot
+ $(RM) ./*.mps ./*.mpx ./*.out ./*.pdf ./*.toc
+ $(RM) mptextmp.* mpxerr.tex
+ $(RM) README README.html RELEASE-HOWTO RELEASE-HOWTO.html
+
+
+.PHONY: mostlyclean
+mostlyclean: clean
+
+
+.PHONY: maintainer-clean
+maintainer-clean: mostlyclean
+ $(RM) ./*.ist ./*.mp ./*.pl ./*.pod ./*.sed ./*.sty ./*.tex
+
+
+.PHONY: tool-check
+tool-check:
+ @printf '*** LATEX = "%s"\n' '$(LATEX)'
+ $(LATEX) --version
+ @printf '\n\n*** MAKEINDEX = "%s"\n' '$(MAKEINDEX)'
+ $(MAKEINDEX) < /dev/null
+ @printf '\n\n*** METAPOST = "%s"\n' '$(METAPOST)'
+ $(METAPOST) --version
+ @printf '\n*** POD2MAN = "%s"\n' '$(POD2MAN)'
+ $(POD2MAN) --help > /dev/null
+ @printf '\n\n*** POD2TEXI = "%s"\n' '$(POD2TEXI)'
+ $(POD2TEXI) --version
+ @printf '\n\nTool check passed.\n'
+
+
+.PHONY: spell-check
+spell-check:
+ @sed -e '\#<DISABLE-SPELL-CHECK/>#d' \
+ -e '\#<DISABLE-SPELL-CHECK>#,\#</DISABLE-SPELL-CHECK>#d' < typog.dtx | \
+ sed -e 's/^ *%%*//' | \
+ sed -e 's/\\-//g' -e 's/|[^|]*|/ /g' | \
+ $(SPELLCHECK) $(SPELLCHECK_FLAGS) list | \
+ sort | uniq | fmt | sed -e 's/ / /g'
+
+
+.PHONY: update-docs
+update-docs: doc ex typog-grep.1.pdf
+ cp -f typog.pdf typog-example.pdf typog-grep.1 typog-grep.1.pdf docs
+
+
+define HELP_SCREEN
+Selected Phony Targets
+----------------------
+all: Make everything there is to make. This is the .DEFAULT_GOAL.
+
+clean: Remove some products.
+
+cpio: In the parent directory create a cpio(1) archive of the
+ project source files whose name is time-stamped.
+
+doc: Build "typog.pdf" the Typog documentation.
+
+ex: Build "typog-example.pdf" an example and test file for Typog.
+
+maintainer-clean: Remove every product file that can be rebuilt even
+ if uncommon tools are necessary.
+
+mostlyclean: Remove some more products than clean:.
+
+pdf: Build doc: and gauge:.
+
+sty: Only extract "typog.sty" from "typog.dtx". This
+ operation requires LaTeX (-> $(LATEX)) and nothing else.
+
+tar: In the parent directory create a tar(1) file of the project
+ source files whose name is time-stamped.
+
+tool-check: Check whether some of the required tools to build the
+ project are available.
+
+
+Selected Implicit Rules
+-----------------------
+%.pdf: %.dtx
+ Run LaTeX or pdfLaTeX (-> $(LATEX)) on dtx source until a
+ fix-point is reached.
+
+%.pdf: %.tex
+ Run LaTeX or pdfLaTeX (-> $(LATEX)) on tex file until a
+ fix-point is reached.
+
+%.1: %.pod
+ Create a manual page from plain old documentation format.
+ Requires podchecker (-> $(PODCHECKER)) and pod2man
+ (-> $(POD2MAN)).
+
+%.1.pdf: %.1
+ Convert a manual page into a pdf file. Requires groff
+ (-> $(GROFF)).
+
+
+Some Explicit Rules
+-------------------
+README.html:
+ Convert "README.md" to html. Requires markdown(1).
+
+README: Convert "README.html" to plain text. Requires w3m(1).
+
+endef
+
+.PHONY: help
+help:
+ $(info $(HELP_SCREEN))
+
+
+
+.PRECIOUS: %.mps
+
+
+
+define MAKE_INDEX_AND_GLOSSARY
+sed -e '/@/d' -e 's/{\\ttfamily /{\\ttfamily\\hskip0pt\\relax /' < $*.idx > ,$*.idx; \
+mv ,$*.idx $*.idx; \
+$(MAKEINDEX) $(MAKEINDEX_FLAGS) -s typog.ist -t $*.ilg -o $*.ind $*.idx; \
+$(MAKEINDEX) $(MAKEINDEX_FLAGS) -s gglo.ist -t $*.glg -o $*.gls $*.glo
+endef
+
+define GREP_LATEX_WARNINGS
+test -e $*.log && grep -E $(LATEX_WARNING) $*.log | uniq
+endef
+
+%.pdf: %.dtx
+ $(RM) ./$*.aux ./$*.ind ./$*.idx ./$*.gls ./$*.glo ./$*.lot ./$*.toc
+ $(LATEX) $(LATEX_FLAGS) -draftmode $<
+ $(MAKE_INDEX_AND_GLOSSARY)
+ $(LATEX) $(LATEX_FLAGS) $<
+ $(MAKE_INDEX_AND_GLOSSARY)
+ while test -e $*.log && grep -q $(LATEX_RERUN_TRIGGER) $*.log; \
+ do \
+ $(LATEX) $(LATEX_FLAGS) $<; \
+ $(MAKE_INDEX_AND_GLOSSARY); \
+ done
+ $(GREP_LATEX_WARNINGS)
+
+
+%.pdf: %.tex
+ $(RM) ./$*.aux ./$*.ind ./$*.idx ./$*.lot ./$*.toc
+ $(LATEX) $(LATEX_FLAGS) -draftmode $<
+ $(LATEX) $(LATEX_FLAGS) $<
+ while test -e $*.log && grep -q $(LATEX_RERUN_TRIGGER) $*.log; \
+ do \
+ $(LATEX) $(LATEX_FLAGS) $<; \
+ done
+ $(GREP_LATEX_WARNINGS)
+
+
+%-1.mps %-2.mps %-3.mps %-4.mps: %.mp
+ $(METAPOST) -s 'outputtemplate="%j-%c.mps"' $(METAPOST_FLAGS) $<
+
+
+%.1: %.pod
+ $(PODCHECKER) $(PODCHECKER_FLAGS) $<
+ $(POD2MAN) $(POD2MAN_FLAGS) $< $@
+
+%.1.pdf: %.1
+ $(GROFF) $(GROFF_FLAGS) ./$< > $@
+
+%.tex: %.pod | teximan2latex.sed
+ $(POD2TEXI) $(POD2TEXI_FLAGS) ./$< | sed -f teximan2latex.sed > $@
+
+
+%.html: %.md
+ markdown $< > $@
+
+%: %.html
+ w3m -cols 79 $< > $@
+
+
+crooked-paragraphs.mp slant-angle.mp smooth-parshapes.mp title.mp \
+teximan2latex.sed \
+typog-grep.pl typog-grep typog-grep.pod \
+typog.sty typog.ist typog-example.tex typog-nomt.tex: \
+ typog.ins typog.dtx
+ $(LATEX) $(LATEX_FLAGS) $<
+ chmod 755 typog-grep.pl
+ ln -sf typog-grep.pl typog-grep
+
+
+crooked-paragraphs-1.mps crooked-paragraphs-2.mps \
+crooked-paragraphs-3.mps crooked-paragraphs-4.mps: crooked-paragraphs.mp
+
+smooth-parshapes-1.mps smooth-parshapes-2.mps smooth-parshapes-3.mps: smooth-parshapes.mp
+
+slant-angle-1.mps: slant-angle.mp
+
+title-1.mps: title.mp
+
+typog.pdf: typog.dtx \
+ crooked-paragraphs-1.mps crooked-paragraphs-2.mps \
+ crooked-paragraphs-3.mps crooked-paragraphs-4.mps \
+ slant-angle-1.mps title-1.mps \
+ smooth-parshapes-1.mps smooth-parshapes-2.mps smooth-parshapes-3.mps \
+ typog-grep.tex \
+ | typog.sty
diff --git a/macros/latex/contrib/typog/README.md b/macros/latex/contrib/typog/README.md
new file mode 100644
index 0000000000..fb55ccb1e1
--- /dev/null
+++ b/macros/latex/contrib/typog/README.md
@@ -0,0 +1,79 @@
+# TypoG &ndash; Typographic Fine-Tuning for LaTeX
+
+LaTeX package `typog` provides macros for (micro-)typographic enhancements;
+it covers a variety of topics:
+
+* Precise hyphenation control
+* Disable/break ligatures
+* Manual italic correction
+* Extra kerning for slash and hyphen
+* Raising selected characters (e.g. hyphen, en-dash, and em-dash)
+* Aligning of the last line of a paragraph
+* Filling of the last line last line of a paragraph
+* Word spacing control
+* [Microtype](https://github.com/schlcht/microtype) front-end
+* Slightly sloppy paragraphs
+* Vertically partially-tied paragraphs
+* Breakable displayed equations
+* Setspace front-end
+* Smooth ragged-right paragraphs
+
+Moreover `typog` provides an environment to flag interesting parts of
+the information deluge typically accumulating in a LaTeX *log*-file
+and an associated tool, **typog-grep**, that selectively retrieves
+these parts.
+
+
+## Installation
+
+The minimally necessary files to install typog are *typog.ins* and *typog.dtx*. Running LaTeX
+on *typog.ins* in particular produces *typog.sty*:
+
+ latex typog.ins
+
+After extraction from *typog.dtx* place *typog.sty* in a directory mentioned in your TEXINPUTS
+paths or copy it into one of the directories for your LaTeX installation's *sty*-files and run
+**mktexlsr** or equivalent.
+
+To build the documentation it is easier to use the GNU *Makefile*:
+
+ make
+
+To construct the manual *typog.pdf* or the usage example *typog-example.pdf* a working
+[MetaPost](https://tug.org/metapost.html) installation and some
+[POD](https://perldoc.perl.org/perlpod) utilities of a [Perl](https://www.perl.org/)
+distribution are required. Cautious users can run
+
+ make tool-check
+
+ahead to verify that the required utilities are installed and working.
+For an overview over the most important *Makefile* targets use
+
+ make help
+
+
+## Usage
+
+Load the package with the usual incantation
+
+ \usepackage{typog}
+
+See Section 2 of the package documentation for available options.
+
+
+## Documentation
+
+The package documentation can be found
+[online](https://cspiel.github.io/typog/).
+
+
+## Credits
+
+Typog is written by Ch. L. Spiel <cspiel@users.sourceforge.org>.
+
+
+## License
+
+Released under the
+[LaTeX Project Public License v1.3c](https://www.latex-project.org/lppl.txt)
+or later.
diff --git a/macros/latex/contrib/typog/RELEASE-HOWTO.md b/macros/latex/contrib/typog/RELEASE-HOWTO.md
new file mode 100644
index 0000000000..13435ef66d
--- /dev/null
+++ b/macros/latex/contrib/typog/RELEASE-HOWTO.md
@@ -0,0 +1,51 @@
+# How to prepare a new release
+
+... and not make too many mistakes.
+
+
+1. Check that the work-area is clean with respect to **git**-tracked
+ files.
+
+ ``` git status ```
+
+1. Update the date stamp of `\ProvidesPackage`.
+
+1. (Temporarily) Zero the `\overfullrule`s of the documentation and
+ the example files.
+
+1. Thoroughly clean the work-area:
+
+ ```make maintainer-clean```
+
+1. Rebuild:
+
+ ```make```
+
+1. Check that all _*.sty_ and _*.pdf_ files are in good shape.
+
+1. Push the documentation files created in the previous step down into
+ the *docs* directory:
+
+ ```make update-docs```
+
+1. Undo the `\overfullrule` change.
+
+1. Commit the changes:
+
+ ```
+ git add .
+ ```
+
+ and finally
+
+ ```
+ git commit
+ ```
+
+1. Tag the commit with the version string of `\ProvidesPackage`:
+
+ ```git tag v1.23```
+
+1. Push the changes to the public repository:
+
+ ```git push origin master --tags```
diff --git a/macros/latex/contrib/typog/docs/index.md b/macros/latex/contrib/typog/docs/index.md
new file mode 100644
index 0000000000..f4dc2e8bd9
--- /dev/null
+++ b/macros/latex/contrib/typog/docs/index.md
@@ -0,0 +1,5 @@
+### Package Documentation
+
+- Comprehensive `typog` documentation: [typog.pdf](https://cspiel.github.io/typog/typog.pdf)
+- `typog` examples and tests: [typog-example.pdf](https://cspiel.github.io/typog/typog-example.pdf)
+- **typog-grep** manual page: [typog-grep.1](https://cspiel.github.io/typog/typog-grep.1) and as PDF: [typog-grep.1.pdf](https://cspiel.github.io/typog/typog-grep.1.pdf)
diff --git a/macros/latex/contrib/typog/docs/typog-example.pdf b/macros/latex/contrib/typog/docs/typog-example.pdf
new file mode 100644
index 0000000000..621ac319d2
--- /dev/null
+++ b/macros/latex/contrib/typog/docs/typog-example.pdf
Binary files differ
diff --git a/macros/latex/contrib/typog/docs/typog-grep.1 b/macros/latex/contrib/typog/docs/typog-grep.1
new file mode 100644
index 0000000000..372c87bc5f
--- /dev/null
+++ b/macros/latex/contrib/typog/docs/typog-grep.1
@@ -0,0 +1,428 @@
+.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.43)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{\
+. if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{\
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "TYPOG-GREP 1"
+.TH TYPOG-GREP 1 "2024-05-07" "perl v5.36.0" "User Contributed Perl Documentation"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.\" Turn off justification.
+.na
+.SH "NAME"
+typog\-grep \- grep for typog\-inspect elements in LaTeX log files
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+.IP "\fBtypog-grep\fR \-a|\-\-all|\-\-any [\fI\s-1OPTION\s0\fR...] \fILOG-FILE\fR..." 4
+.IX Item "typog-grep -a|--all|--any [OPTION...] LOG-FILE..."
+.PD 0
+.IP "\fBtypog-grep\fR [\fI\s-1OPTION\s0\fR...] \fI\s-1REGEXP\s0\fR \fILOG-FILE\fR..." 4
+.IX Item "typog-grep [OPTION...] REGEXP LOG-FILE..."
+.PD
+.PP
+The first form shows all \f(CW\*(C`<typog\-inspect id="\f(CIID\f(CW" ...>\*(C'\fR elements in \fILOG-FILE\fR.
+.PP
+The second form shows the contents of \f(CW\*(C`<typog\-inspect id="\f(CIID\f(CW" ...>\*(C'\fR elements
+whose \fI\s-1ID\s0\fRs match \fI\s-1REGEXP\s0\fR in \fILOG-FILE\fR.
+.PP
+If no \fILOG-FILE\fR is given read from \fIstdin\fR.
+The filename\ \f(CW\*(C`\-\*(C'\fR is synonymous to \fIstdin\fR.
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\fBtypog-grep\fR is a tailored post-processor for LaTeX log files
+and the \f(CW\*(C`typoginspect\*(C'\fR environment as provided by package\ typog.
+It shares more with the venerable
+\&\fBsgrep\fR <https://www.cs.helsinki.fi/u/jjaakkol/sgrep.html>
+than with \s-1POSIX\s0\ \fBgrep\fR <https://pubs.opengroup.org/onlinepubs/9699919799/utilities/grep.html>.
+.PP
+The LaTeX user brackets her text in
+.PP
+.Vb 3
+\& \ebegin{typoginspect}{ID}
+\& Text and code to investigate
+\& \eend{typoginspect}
+.Ve
+.PP
+where \fI\s-1ID\s0\fR is used to identify one or more bracketed snippets.
+\&\fI\s-1ID\s0\fR does not have to be unique.
+The \fI\s-1REGEXP\s0\fR mechanism makes it easy to select groups of related \fI\s-1ID\s0\fRs
+if they are named accordingly.
+.PP
+In \fILOG-FILE\fR the environment shows up, packed with tracing information, as
+.PP
+.Vb 3
+\& <typog\-inspect id="ID" job="JOB\-NAME" line="LINE\-NUMBER" page="PAGE\-NUMBER">
+\& Trace Data
+\& </typog\-inspect>
+.Ve
+.PP
+where all the capital-letter sequences are meta-variables
+and in particular
+\&\fIJOB-NAME\fR is the expansion of \f(CW\*(C`\ejobname\*(C'\fR,
+\&\fILINE-NUMBER\fR is the LaTeX source file line number
+of the beginning of the \f(CW\*(C`typoginspect\*(C'\fR environment,
+and \fIPAGE-NUMBER\fR is the page where
+the output of \f(CW\*(C`Text\ and\ code\ to\ investigate\*(C'\fR occurs.
+.PP
+\&\fBtypog-grep\fR reveals the contents of \fILOG-FILE\fR
+between \f(CW\*(C`<typog\-inspect id="\f(CIID\f(CW" ...>\*(C'\fR
+and \f(CW\*(C`</typog\-inspect>\*(C'\fR excluding the XML-tags.
+Access the \fIJOB-NAME\fR, \fILINE-NUMBER\fR, and \fIPAGE-NUMBER\fR
+with the commandline options
+\&\fB\-\-job\-name\fR, \fB\-\-line\-number\fR, and \fB\-\-page\-number\fR, respectively.
+Use \fB\-\-id\fR to show the name of the IDs that matched \fI\s-1REGEXP\s0\fR.
+.PP
+\&\f(CW\*(C`typoginspect\*(C'\fR environments can be nested.
+\&\fBtypog-grep\fR respects the nesting,
+i.e., if the \fI\s-1ID\s0\fR of the nested environment does not match \fI\s-1REGEXP\s0\fR
+it will not be included in the program's output.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+The list of options is sorted by the names of the long options.
+.IP "\fB\-a\fR, \fB\-\-all\fR, \fB\-\-any\fR" 4
+.IX Item "-a, --all, --any"
+ID-discovery mode:
+Show all \f(CW\*(C`typog\-inspect\*(C'\fR elements independent of any matching patterns.
+.IP "\fB\-\-color\fR, \fBcolour\fR \fI\s-1WHEN\s0\fR" 4
+.IX Item "--color, colour WHEN"
+Colorize specific log contents for the matching ids.
+The argument\ \fI\s-1WHEN\s0\fR determines when to apply color:
+\&\f(CW\*(C`always\*(C'\fR, \f(CW\*(C`never\*(C'\fR, or\ \f(CW\*(C`auto\*(C'\fR.
+The setting \f(CW\*(C`auto\*(C'\fR checks whether standard output has been redirected.
+This is the default.
+.IP "\fB\-C\fR, \fB\-\-config\fR \fI\s-1KEY\s0\fR=\fI\s-1VALUE\s0\fR[:\fI\s-1KEY\s0\fR=\fI\s-1VALUE\s0\fR[:...]]" 4
+.IX Item "-C, --config KEY=VALUE[:KEY=VALUE[:...]]"
+Set one or more configuration \fI\s-1KEY\s0\fR to \fI\s-1VALUE\s0\fR pairs.
+See Sec.\ \s-1CONFIGURATION\s0 below for a description of all available configuration items.
+Use option \fB\-\-show\-config\fR to display the default configuration.
+.IP "\fB\-\-debug\fR" 4
+.IX Item "--debug"
+Turn on debug output on \fIstderr\fR.
+.IP "\fB\-h\fR, \fB\-\-help\fR" 4
+.IX Item "-h, --help"
+Display brief help then exit.
+.IP "\fB\-i\fR, \fB\-\-[no\-]id\fR" 4
+.IX Item "-i, --[no-]id"
+Print the actual id name that matched \fI\s-1REGEXP\s0\fR.
+Control the appearance of the matching id with configuration item\ \f(CW\*(C`id\-heading\*(C'\fR.
+.IP "\fB\-y\fR, \fB\-\-[no\-]ignore\-case\fR" 4
+.IX Item "-y, --[no-]ignore-case"
+Match ids while ignoring case distinctions in patterns and data.
+.IP "\fB\-j\fR, \fB\-\-[no\-]job\-name\fR" 4
+.IX Item "-j, --[no-]job-name"
+Print the \f(CW\*(C`\ejobname\*(C'\fR that \fBtex\fR associated with the input file.
+.IP "\fB\-n\fR, \fB\-\-[no\-]line\-number\fR" 4
+.IX Item "-n, --[no-]line-number"
+Print the line number where the \f(CW\*(C`typoginspect\*(C'\fR\ environment
+was encountered in the LaTeX source file.
+.IP "\fB\-N\fR, \fB\-\-[no\-]log\-line\-number\fR" 4
+.IX Item "-N, --[no-]log-line-number"
+Print the line number of the \fIlog\fR\-file where the current line was encountered.
+.IP "\fB\-p\fR, \fB\-\-[no\-]page\-number\fR" 4
+.IX Item "-p, --[no-]page-number"
+Print page number where the contents of the \f(CW\*(C`typoginspect\*(C'\fR\ environment
+starts in the typeset document.
+.IP "\fB\-P\fR, \fB\-\-[no\-]pager\fR" 4
+.IX Item "-P, --[no-]pager"
+Redirect output from \fIstdout\fR to the configured pager.
+.IP "\fB\-\-show\-config\fR" 4
+.IX Item "--show-config"
+Show the default configuration and exit.
+.IP "\fB\-V\fR, \fB\-\-version\fR" 4
+.IX Item "-V, --version"
+Show version information and exit.
+.IP "\fB\-w\fR, \fB\-\-[no\-]word\-regexp\fR" 4
+.IX Item "-w, --[no-]word-regexp"
+Match only whole words.
+.SH "CONFIGURATION"
+.IX Header "CONFIGURATION"
+.ie n .IP """id\-format""=\fI\s-1FORMAT\s0\fR" 4
+.el .IP "\f(CWid\-format\fR=\fI\s-1FORMAT\s0\fR" 4
+.IX Item "id-format=FORMAT"
+Control the \fI\s-1FORMAT\s0\fR for printing matching ids in inline-mode,
+where \fI\s-1FORMAT\s0\fR is passed to Perl's \f(CW\*(C`printf\*(C'\fR.
+Default:\ \f(CW%s:\fR.
+.ie n .IP """id\-heading""=0|1" 4
+.el .IP "\f(CWid\-heading\fR=\f(CW0\fR|\f(CW1\fR" 4
+.IX Item "id-heading=0|1"
+Choose between printing the matching ids with option\ \fB\-\-id\fR:
+Inline\ (\f(CW0\fR) or heading before the matching data (\f(CW1\fR).
+Default:\ \f(CW0\fR.
+.ie n .IP """id\-heading\-format""=\fI\s-1FORMAT\s0\fR" 4
+.el .IP "\f(CWid\-heading\-format\fR=\fI\s-1FORMAT\s0\fR" 4
+.IX Item "id-heading-format=FORMAT"
+Control the \fI\s-1FORMAT\s0\fR for printing matching ids in heading-mode,
+where \fI\s-1FORMAT\s0\fR is passed to Perl's \f(CW\*(C`printf\*(C'\fR.
+Default:\ \f(CW\*(C`\-\->\ %s\ <\-\-\*(C'\fR.
+.ie n .IP """id\-indent""=\fI\s-1INDENT\s0\fR" 4
+.el .IP "\f(CWid\-indent\fR=\fI\s-1INDENT\s0\fR" 4
+.IX Item "id-indent=INDENT"
+Indentation of nested typog-inspect tags.
+Only used in ``discovery'' mode (first form), i.e., if \fB\-\-all\fR is active.
+Default:\ 8.
+.ie n .IP """id\-max\-length""=\fIMAXIMUM-LENGTH\fR" 4
+.el .IP "\f(CWid\-max\-length\fR=\fIMAXIMUM-LENGTH\fR" 4
+.IX Item "id-max-length=MAXIMUM-LENGTH"
+Set the maximum length of a matching id for printing.
+It a matching id exceeds this length it will be truncated
+and the last three characters (short of \fIMAXIMUM-LENGTH\fR) will be replaced by dots.
+Default:\ 40.
+.ie n .IP """line\-number\-format""=\fI\s-1FORMAT\s0\fR" 4
+.el .IP "\f(CWline\-number\-format\fR=\fI\s-1FORMAT\s0\fR" 4
+.IX Item "line-number-format=FORMAT"
+Control the \fI\s-1FORMAT\s0\fR for printing TeX source line numbers,
+where \fI\s-1FORMAT\s0\fR is passed to Perl's \f(CW\*(C`printf\*(C'\fR.
+Default:\ \f(CW%5d\fR.
+.ie n .IP """log\-line\-number\-format""=\fI\s-1FORMAT\s0\fR" 4
+.el .IP "\f(CWlog\-line\-number\-format\fR=\fI\s-1FORMAT\s0\fR" 4
+.IX Item "log-line-number-format=FORMAT"
+Control the \fI\s-1FORMAT\s0\fR for printing log line numbers,
+where \fI\s-1FORMAT\s0\fR is passed to Perl's \f(CW\*(C`printf\*(C'\fR.
+Default:\ \f(CW%6d\fR.
+.ie n .IP """page\-number\-format""=\fI\s-1FORMAT\s0\fR" 4
+.el .IP "\f(CWpage\-number\-format\fR=\fI\s-1FORMAT\s0\fR" 4
+.IX Item "page-number-format=FORMAT"
+Control the \fI\s-1FORMAT\s0\fR for printing page numbers,
+where \fI\s-1FORMAT\s0\fR is passed to Perl's \f(CW\*(C`printf\*(C'\fR.
+Default:\ \f(CW\*(C`[%3d]\*(C'\fR.
+.ie n .IP """pager""=\fI\s-1PAGER\s0\fR" 4
+.el .IP "\f(CWpager\fR=\fI\s-1PAGER\s0\fR" 4
+.IX Item "pager=PAGER"
+Name of pager application to pipe output into
+if run with option\ \fB\-\-pager\fR.
+Default:\ \f(CW\*(C`less\*(C'\fR.
+.ie n .IP """pager\-flags""=\fI\s-1FLAGS\s0\fR" 4
+.el .IP "\f(CWpager\-flags\fR=\fI\s-1FLAGS\s0\fR" 4
+.IX Item "pager-flags=FLAGS"
+Pass \fI\s-1FLAGS\s0\fR to \fI\s-1PAGER\s0\fR.
+Default:\ \f(CW\*(C`\-\-quit\-if\-one\-screen\*(C'\fR.
+.IP "Color Configuration" 4
+.IX Item "Color Configuration"
+For the syntax of the color specifications consult
+the manual page of Term::ANSIColor(pm).
+.RS 4
+.ie n .IP """file\-header\-color""" 4
+.el .IP "\f(CWfile\-header\-color\fR" 4
+.IX Item "file-header-color"
+Color of the filename header.
+.ie n .IP """fill\-state\-color""" 4
+.el .IP "\f(CWfill\-state\-color\fR" 4
+.IX Item "fill-state-color"
+Color of the messages that report ``Underfull hbox'' or ``Overfull hbox''.
+.ie n .IP """first\-vbox\-color""" 4
+.el .IP "\f(CWfirst\-vbox\-color\fR" 4
+.IX Item "first-vbox-color"
+Color of the first vbox on a page.
+.ie n .IP """font\-spec\-color""" 4
+.el .IP "\f(CWfont\-spec\-color\fR" 4
+.IX Item "font-spec-color"
+Color of font specifications.
+.ie n .IP """horizontal\-break\-candidate\-color""" 4
+.el .IP "\f(CWhorizontal\-break\-candidate\-color\fR" 4
+.IX Item "horizontal-break-candidate-color"
+Color of lines with horizontal-breakpoint candidates\ \f(CW\*(C`@\*(C'\fR.
+.ie n .IP """horizontal\-breakpoint\-color""" 4
+.el .IP "\f(CWhorizontal\-breakpoint\-color\fR" 4
+.IX Item "horizontal-breakpoint-color"
+Color of lines with horizontal breakpoints\ \f(CW\*(C`@@\*(C'\fR.
+.ie n .IP """id\-color""" 4
+.el .IP "\f(CWid\-color\fR" 4
+.IX Item "id-color"
+Color of matching ids when printed inline.
+.ie n .IP """id\-heading\-color""" 4
+.el .IP "\f(CWid\-heading\-color\fR" 4
+.IX Item "id-heading-color"
+Color of matching ids when printed in heading form.
+.ie n .IP """line\-break\-pass\-color""" 4
+.el .IP "\f(CWline\-break\-pass\-color\fR" 4
+.IX Item "line-break-pass-color"
+Color of the lines showing which pass (e.g., \f(CW@firstpass\fR)
+of the line-breaking algorithm is active.
+.ie n .IP """line\-number\-color""" 4
+.el .IP "\f(CWline\-number\-color\fR" 4
+.IX Item "line-number-color"
+Color of TeX-source-file line numbers.
+.ie n .IP """log\-line\-number\-color""" 4
+.el .IP "\f(CWlog\-line\-number\-color\fR" 4
+.IX Item "log-line-number-color"
+Color of log-file line numbers.
+.ie n .IP """math\-color""" 4
+.el .IP "\f(CWmath\-color\fR" 4
+.IX Item "math-color"
+Color used for math expressions including their font specs.
+.ie n .IP """page\-number\-color""" 4
+.el .IP "\f(CWpage\-number\-color\fR" 4
+.IX Item "page-number-color"
+Color of page numbers of the final output.
+.ie n .IP """tightness\-color""" 4
+.el .IP "\f(CWtightness\-color\fR" 4
+.IX Item "tightness-color"
+Color of lines with Tight/Loose hbox reports.
+.ie n .IP """vertical\-breakpoint\-color""" 4
+.el .IP "\f(CWvertical\-breakpoint\-color\fR" 4
+.IX Item "vertical-breakpoint-color"
+Color of possible vertical breakpoints.
+.RE
+.RS 4
+.RE
+.SS "Brief summary of colors and attributes"
+.IX Subsection "Brief summary of colors and attributes"
+.IP "Foreground Color" 4
+.IX Item "Foreground Color"
+\&\f(CW\*(C`black\*(C'\fR, \f(CW\*(C`red\*(C'\fR, \f(CW\*(C`green\*(C'\fR, \f(CW\*(C`yellow\*(C'\fR,
+\&\f(CW\*(C`blue\*(C'\fR, \f(CW\*(C`magenta\*(C'\fR, \f(CW\*(C`cyan\*(C'\fR, \f(CW\*(C`white\*(C'\fR,
+.Sp
+Prefix with \f(CW\*(C`bright_\*(C'\fR for high-intensity or bold foreground.
+.IP "Foreground Grey" 4
+.IX Item "Foreground Grey"
+\&\f(CW\*(C`grey0\*(C'\fR, ..., \f(CW\*(C`grey23\*(C'\fR
+.IP "Background Color" 4
+.IX Item "Background Color"
+\&\f(CW\*(C`on_black\*(C'\fR, \f(CW\*(C`on_red\*(C'\fR, \f(CW\*(C`on_green\*(C'\fR, \f(CW\*(C`on_yellow\*(C'\fR,
+\&\f(CW\*(C`on_blue\*(C'\fR, \f(CW\*(C`on_magenta\*(C'\fR, \f(CW\*(C`on_cyan\*(C'\fR, \f(CW\*(C`on_white\*(C'\fR
+.Sp
+Replace \f(CW\*(C`on_\*(C'\fR with \f(CW\*(C`on_bright_\*(C'\fR for high-intensity or bold background.
+.IP "Background Grey" 4
+.IX Item "Background Grey"
+\&\f(CW\*(C`on_grey0\*(C'\fR, ..., \f(CW\*(C`on_grey23\*(C'\fR
+.IP "Text Attribute" 4
+.IX Item "Text Attribute"
+\&\f(CW\*(C`bold\*(C'\fR, \f(CW\*(C`dark\*(C'\fR, \f(CW\*(C`italic\*(C'\fR, \f(CW\*(C`underline\*(C'\fR, \f(CW\*(C`reverse\*(C'\fR
+.SH "EXIT STATUS"
+.IX Header "EXIT STATUS"
+The exit status is 0 if at least one \fI\s-1ID\s0\fR matched \fI\s-1REGEXP\s0\fR,
+1 if no \fI\s-1ID\s0\fR matched \fI\s-1REGEXP\s0\fR, and 2 if an error occurred.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fBgrep\fR(1), \fBprintf\fR(3), \fBTerm::ANSIColor\fR(pm)
diff --git a/macros/latex/contrib/typog/docs/typog-grep.1.pdf b/macros/latex/contrib/typog/docs/typog-grep.1.pdf
new file mode 100644
index 0000000000..09647860d5
--- /dev/null
+++ b/macros/latex/contrib/typog/docs/typog-grep.1.pdf
Binary files differ
diff --git a/macros/latex/contrib/typog/docs/typog.pdf b/macros/latex/contrib/typog/docs/typog.pdf
new file mode 100644
index 0000000000..9d00685045
--- /dev/null
+++ b/macros/latex/contrib/typog/docs/typog.pdf
Binary files differ
diff --git a/macros/latex/contrib/typog/typog.dtx b/macros/latex/contrib/typog/typog.dtx
new file mode 100644
index 0000000000..0f2176206a
--- /dev/null
+++ b/macros/latex/contrib/typog/typog.dtx
@@ -0,0 +1,9974 @@
+% \iffalse
+%
+% Copyright (C) 2024 by Ch. L. Spiel
+%
+% This work may be distributed and/or modified under the conditions
+% of the LaTeX Project Public License, either version 1.3 of this
+% license or (at your option) any later version. The latest version
+% of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2003/12/01 or later.
+%
+% \fi
+%
+% \iffalse
+%<*driver>
+\documentclass{ltxdoc}
+
+\tracingonline=0
+
+%--\OnlyDescription
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+
+
+\PassOptionsToClass{a4paper}{article}
+\PassOptionsToPackage{hyperfootnotes=false}{hyperref}
+\PassOptionsToPackage{charter, scale=1.06}{newtxmath}
+\PassOptionsToPackage{dvipsnames}{xcolor}
+
+\usepackage{amsmath}
+\usepackage{amssymb}
+\usepackage{array}
+\usepackage{booktabs}
+\usepackage{caption}
+\usepackage{dtk-logos}
+\usepackage{enumitem}
+\usepackage{etoolbox}%--\tracingpatches
+\usepackage{fancyhdr}
+\usepackage[T1]{fontenc}
+\usepackage{fullwidth}
+\usepackage{hypdoc}
+\usepackage{hyphenat}
+\usepackage[shrink=10, stretch=10]{microtype}
+\usepackage{multirow}
+\usepackage{needspace}
+\usepackage{placeins}
+\usepackage{ragged2e}
+\usepackage{setspace}
+\usepackage{sidecap}
+\usepackage{tabularx}
+\usepackage{tcolorbox}
+\usepackage{titlesec}\renewcommand*{\bottomtitlespace}{.15\textheight}%nobottomtitles*
+\usepackage[debug, raise*=.05em]{typog}
+\usepackage{xcolor}
+
+
+\usepackage[default, lining, proportional, regular, semibold]{sourceserifpro}
+\usepackage[lining, proportional, regular, semibold]{sourcesanspro}
+\usepackage[lining, regular]{sourcecodepro}
+\usepackage[xcharter]{newtxmath}
+\setbaselineskip{12.5pt}
+
+\makeatletter
+\def\@get@fontclan#1-#2\relax{#1}
+\newcommand*{\fontclan}{\expandafter\@get@fontclan\f@family\relax}
+\makeatother
+
+\newcommand*{\proportionalliningfigures}{\fontfamily{\fontclan-LF}\selectfont}
+\newcommand*{\proportionaloldstylefigures}{\fontfamily{\fontclan-OsF}\selectfont}
+\newcommand*{\tabularliningfigures}{\fontfamily{\fontclan-TLF}\selectfont}
+\newcommand*{\tabularoldstylefigures}{\fontfamily{\fontclan-TOsF}\selectfont}
+
+\newcommand*{\textdenominator}[1]{{\fontfamily{\fontclan-Dnom}\selectfont #1}}
+\newcommand*{\textinferior}[1]{{\fontfamily{\fontclan-Inf}\selectfont #1}}
+\newcommand*{\textnumerator}[1]{{\fontfamily{\fontclan-Numr}\selectfont #1}}
+\newcommand*{\textsuperior}[1]{{\fontfamily{\fontclan-Sup}\selectfont #1}}
+
+\newcommand*{\nativetextfraction}[2]
+ {\mbox{\textnumerator{#1}\textfractionsolidus\textdenominator{#2}}}
+
+\makeatletter
+\renewcommand*{\@makefnmark}{\hbox{\sf\textsuperior{\@thefnmark}}}
+\newenvironment*{tabfigures}
+ {\edef\rmdefault{\fontclan-T\sourceserifpro@figurestyle}\rm\ignorespaces}
+ {\ignorespacesafterend}
+
+\newcommand*{\elseries}{\def\mdseries@rm{el}\def\mdseries@sf{el}\def\mdseries@tt{el}}
+\newcommand*{\textel}[1]{{\elseries\textmd{#1}}}
+\newcommand*{\lseries}{\def\mdseries@rm{l}\def\mdseries@sf{l}\def\mdseries@tt{l}}
+\newcommand*{\textl}[1]{{\lseries\textmd{#1}}}
+%%--\newcommand*{\mdseries}{\def\mdseries@rm{m}\def\mdseries@sf{m}\def\mdseries@tt{m}}
+%%--\newcommand*{\textmd}[1]{{\mdseries\textmd{#1}}}
+\newcommand*{\sbseries}{\def\bfseries@rm{sb}\def\bfseries@sf{sb}\def\bfseries@tt{sb}}
+\newcommand*{\textsb}[1]{{\sbseries\textbf{#1}}}
+\newcommand*{\bseries}{\def\bfseries@rm{b}\def\bfseries@sf{b}\def\bfseries@tt{b}}
+\newcommand*{\textb}[1]{{\bseries\textbf{#1}}}
+\newcommand*{\ebseries}{\def\bfseries@rm{k}\def\bfseries@sf{eb}\def\bfseries@tt{k}}
+\newcommand*{\texteb}[1]{{\ebseries\textbf{#1}}}
+\makeatother
+
+
+\usepackage{cleveref}
+
+
+\expandafter\GetFileInfo\expandafter{\jobname.sty}
+\def\aspdfdate#1/#2/#3\relax{D:#1#2#3}
+\edef\pdffiledate{\expandafter\aspdfdate\filedate\relax}
+
+\hypersetup{
+ citecolor = blue,
+ colorlinks = true,
+ linkcolor = blue,
+ linktocpage = false,
+ pdfauthor={Dr. Christoph L. Spiel},
+ pdfcreationdate={\pdffiledate},
+ pdfkeywords={LaTeX, typography, ligature, italic-correction, paragraph justification, baselineskip, sloppy, ragged},
+ pdflang=en-US,
+ pdfsubject={Typographic fine-tuning for LaTeX},
+ pdftitle={Package typog \fileversion},
+ raiselinks = false,
+ urlcolor = [rgb]{0, 0, .5}% = navy
+}
+
+
+\makeatletter
+\renewcommand*{\@dotsep}{10000} % suppress leaders
+\patchcmd{\@dottedtocline}{\normalfont}{\bfseries}{\relax}{\PatchingFailed}
+\makeatother
+
+
+\Crefname{figure}{Figure}{Figures}
+\crefname{figure}{Fig.}{Figs.}
+
+\Crefname{page}{Page}{Pages}
+\crefname{page}{p.}{p.}
+
+\Crefname{section}{Section}{Sections}
+\crefname{section}{Sec.}{Secs.}
+
+\Crefname{table}{Table}{Tables}
+\crefname{table}{Tab.}{Tabs.}
+
+
+\DeclareCaptionJustification{centerlastjustification}{\justify\fussy\lastlinecenteredpar}
+\DeclareCaptionJustification{smoothraggedjustification}%
+ {\renewcommand*{\smoothraggedrightgenerator}{quintuplet}%
+ \setlength{\smoothraggedrightragwidth}{1em}%
+ \smoothraggedrightpar\relax}
+\DeclareCaptionJustification{relaxedjustification}{\justify\slightlysloppy}
+
+\newcommand*{\floatcaptionwidth}{.79\textwidth}
+
+\captionsetup[figure]{font=small, justification=centerlastjustification,
+ labelfont=sc, width=\floatcaptionwidth}
+\captionsetup[table]{font=small, justification=centerlastjustification,
+ labelfont=sc, width=\floatcaptionwidth}
+\captionsetup[SCfigure]{font=small, justification=relaxedjustification,
+ labelfont=sc}
+\captionsetup[SCtable]{font=small, justification=relaxedjustification,
+ labelfont=sc}
+
+
+\newsavebox{\listlabelbox}
+
+\sbox{\listlabelbox}{---}
+\SetEnumitemKey{noindent}{
+ label={---},
+ labelwidth=\wd\listlabelbox,
+ leftmargin=!
+}
+
+
+\SetEnumitemKey{nestedinspecialsection}{
+ leftmargin=10pt
+}
+
+\SetEnumitemKey{notopsep}{
+ after=\vskip.8em plus .2em minus .4em,
+ partopsep=0pt,
+ topsep=0pt
+}
+
+
+\newlength{\marginindicatorsep}
+\setlength{\marginindicatorsep}{10pt}
+
+\newcommand*{\marginalizesectionnumber}[1]
+ {\makebox[0pt][r]{#1\hspace{\marginindicatorsep}}}
+
+
+\fancypagestyle{pagenumberonly}{
+ \fancyhead[L]{}
+ \fancyhead[R]{\thepage}
+}
+\pagestyle{fancy}
+\fancyhf{}
+\fancyhead[L]{\rightmark}
+\fancyhead[R]{\thepage}
+\newcommand*{\resetfancyhead}
+ {\fancyhead[L]{\textsf{\textsc{\textls[20]{\nouppercase\rightmark}}}}}
+
+\renewcommand*{\headrulewidth}{0pt}
+\renewcommand*{\sectionmark}[1]
+ {\def\truesectionname{#1}%
+ \markright{\textsf{\marginalizesectionnumber{\thesection}%
+ \textsc{\textls[20]{#1}}}}}
+\renewcommand*{\subsectionmark}[1]
+ {\markright{\textsf{\marginalizesectionnumber{\thesubsection}%
+ \textsc{\textls[20]{\truesectionname:\enspace}}#1}}}
+
+
+\titleformat{\section}[hang]
+ {\sffamily\Large\bfseries}{\marginalizesectionnumber{\thesection}}{0pt}{}
+\titleformat{\subsection}[hang]
+ {\sffamily\large\bfseries}{\marginalizesectionnumber{\thesubsection}}{0pt}{}
+\titleformat{\subsubsection}[hang]
+ {\sffamily\normalsize\bfseries}{\marginalizesectionnumber{\thesubsubsection}}{0pt}{}
+\titleformat{\paragraph}[runin]
+ {\sffamily\normalsize\bfseries}{\theparagraph}{1em}{}
+
+
+\let\footnoterule=\relax% suppress footnote rule
+
+\makeatletter
+\renewcommand*{\@makefntext}[1]
+ {\noindent
+ \llap{\let\@textsuperscript=\relax% use "normal" figures for the footnote numbers
+ \let\textsuperior=\relax
+ \@makefnmark
+ \hspace{\marginindicatorsep}}% separate the footnote number and the body
+ #1}
+\makeatother
+
+
+\pretocmd{\DescribeEnv}{\needspace{25pt}}{\relax}{\PrependingFailed}
+\pretocmd{\DescribeMacro}{\needspace{25pt}}{\relax}{\PrependingFailed}
+
+
+\setlength{\skip\footins}{25pt}
+\setlength{\overfullrule}{3pt}
+\renewcommand*{\sidecaptionsep}{16pt}
+
+
+
+\newrobustcmd*{\acronym}[1]{\mbox{\scshape\MakeLowercase{#1}}}
+
+\newcommand*{\application}[1]{\mbox{\sffamily #1}}
+
+\renewcommand*{\arraystretch}{1.12}
+
+\newcommand*{\bibauthor}[1]{\mbox{\textsc{#1}}}
+\newcommand*{\bibtitle}[1]{\textit{#1}}
+\newcommand*{\biburl}[1]{\url{#1}}
+
+\newcommand*{\bottomstrut}{\rule[-.5em]{0pt}{0pt}}
+
+\newenvironment*{codeexample}
+ {\vspace{.5\smallskipamount}
+ \par
+ \centering
+ \begin{minipage}{\linewidth}
+ \ttfamily
+ \begin{tabbing}}
+ {\end{tabbing}
+ \end{minipage}
+ \par
+ \vspace{.5\smallskipamount}}
+
+\makeatletter
+\newcommand*{\citenum}[1]{\@nameuse{b@#1}}
+\makeatother
+
+\def\code#1{\texttt{#1}}
+
+\newrobustcmd*{\command}[1]{\mbox{\textbf{#1}}}
+
+\newcommand*{\doublequotes}[1]{\doubleguillemetright\kern-.03333em #1\doubleguillemetleft}
+
+\newcommand*{\dumpmacro}[1]{\texttt{\detokenize\expandafter{#1}}}
+
+\newcommand*{\filesystem}[1]{\mbox{\textit{#1\/}}}
+
+\newcommand*{\filledrectangle}[2]{\rule{#1}{#2}}
+\newcommand*{\filledsquare}[1]{\filledrectangle{#1}{#1}}
+
+\newcommand*{\foreignphrase}[1]{\textsl{#1}}
+
+\newcommand*{\formatskip}[3]{#1\genfrac{}{}{0pt}{}{{+}#2}{{-}#3}}
+
+\makeatletter
+\renewcommand*{\fps@figure}{htbp}
+\renewcommand*{\fps@table}{htbp}
+\makeatother
+
+\newcommand*{\hollowrectangle}[2]
+ {\setlength{\fboxrule}{.5pt}%
+ \setlength{\fboxsep}{0pt}%
+ \framebox{\rule{#1}{0pt}\rule{0pt}{#2}}}
+\newcommand*{\hollowsquare}[1]{\hollowrectangle{#1}{#1}}
+
+
+\makeatletter
+\apptocmd{\index@prologue}
+ {\marginnote{In the Index page ranges are stuck together with
+ \hyperref[syn:figuredash]{\cs{figuredash*}}.}}
+ {\relax}
+ {\AppendingFailed}
+\makeatother
+
+\newcommand*{\logmacro}[1]
+ {\ifdef{#1}
+ {\message{^^JDump of macro \string#1 follows.^^J}
+ \message{\detokenize\expandafter{#1}}
+ \message{^^JEnd macro dump.^^J}}
+ {\message{^^JMacro \string#1 is not defined.^^J}}}
+
+\newcommand*{\marginnoteformat}
+ {\setstretch{1}%\overfullrule=0pt
+ \sffamily
+ \footnotesize
+ \nofontexpansion
+ \slightlysloppy[1]
+ \loosespacing[1]
+ \setlength{\smoothraggedrightragwidth}{1.5em}
+ \def\smoothraggedrightgenerator{quintuplet}%
+ \smoothraggedrightpar}
+\newcommand*{\marginnote}[1]{\marginpar{\marginnoteformat #1}}
+\addtolength{\marginparpush}{3pt}
+\addtolength{\marginparsep}{25pt}
+\addtolength{\marginparwidth}{-20pt}
+\newcommand*{\shiftedmarginnote}[1]
+ {\marginpar{\moveleft \leftmargin
+ \hbox{\parbox{\dimexpr\marginparwidth - \marginparsep}
+ {\marginnoteformat #1}}}}
+
+\newenvironment*{maxipage}
+ {\fullwidthsetup{leftmargin=-\marginparsep - \marginparwidth,
+ width=\textwidth + \marginparsep + \marginparwidth}%
+ \begin{fullwidth}}
+ {\end{fullwidth}}
+
+\newcommand*{\microtyperequiredmarker}
+ {\mbox{\normalfont\packagename{microtype}~req.}}
+
+\newlength{\emreference}
+\AtBeginDocument{\setlength{\emreference}{\fontdimen6\font}}
+\newrobustcmd*{\milliem}[1]
+ {\ifdim #1=0pt
+ #1%
+ \else
+ \nativetextfraction{\the\numexpr\dimexpr (#1) * 1000 / \emreference}{1000}\:em%
+ \fi}
+
+\newcommand*{\needtocspace}[1][3]
+ {\addtocontents{toc}{\protect\needspace{#1\baselineskip}}}
+
+\newcommand*{\packagename}[1]{\mbox{\textsf{#1}}}
+\newcommand*{\programname}[1]{\mbox{\textbf{#1}}}
+\newcommand*{\propername}[1]{\mbox{\textsc{#1}}}
+
+\newcommand*{\quarterspace}{\hspace{.25em}}
+
+\NewDocumentCommand{\sample}{s m}
+ {\setbox0=\hbox{#2}% H: 6.19849pt, /: 7.49817
+ \mbox{\raisebox{\dimexpr -.15em - \dp0}{\tiny$\llcorner$}%
+ \kern-.15em\copy0\kern-.15em
+ \raisebox{\ifdim\ht0>.7em
+ \ifx#1\BooleanTrue
+ .4em
+ \else
+ \dimexpr\ht0 - .1em
+ \fi
+ \else
+ .4em
+ \fi}
+ {\tiny$\urcorner$}}}
+
+\newcommand*{\sectionfinish}
+ {\vfill
+ {\centering
+ \textcolor{customred4}
+ {\filledsquare{5pt}\enspace\filledsquare{5pt}}%
+ \par}%
+ \vfill}
+\let\sectionfinish=\relax
+
+\newcommand*{\sinceversion}[1]{% modeled after \NewIn of "doc.dtx"
+ \leavevmode
+ \marginpar{\hfill\textcolor{\markercolor}{\sf\scshape\proportionaloldstylefigures #1}}%
+ \ignorespaces
+}
+
+\newcommand*{\singlequotes}[1]{\mbox{\singleguillemetright #1\singleguillemetleft}}
+
+\newcommand*{\specialsectionheading}[1]{\textcolor{\markercolor}{\textit{\textbf{#1}}}}
+\definecolor{customred1}{rgb}{.890, .282, .282}%-- https://paletton.com/
+\definecolor{customred2}{rgb}{.831, .110, .110}
+\definecolor{customred3}{rgb}{.686, .043, .043}
+\definecolor{customred4}{rgb}{.569, .000, .000}
+\definecolor{customred5}{rgb}{.420, .000, .000}
+\newcommand*{\markercolor}{customred4}
+\newcommand*{\specialsectionmarker}{\color{\markercolor}\filledsquare{5pt}}
+\newcommand*{\specialsectionbegin}
+ {\llap{\raisebox{1pt}{\specialsectionmarker}%
+ \hspace{\marginindicatorsep}}}
+\newcommand*{\specialsectionend}
+ {\ifmmode
+ \specialsectionmarker
+ \else
+ \leavevmode
+ \unskip
+ \penalty9999\mbox{}\nobreak
+ \hfill
+ \quad
+ \mbox{\specialsectionmarker}%
+ \fi}
+\newtoggle{printspecialsectionmarker}
+\NewDocumentEnvironment{specialsection}{m m}
+ {\Needspace{4\baselineskip}%
+ \toggletrue{printspecialsectionmarker}%
+ \begin{list}
+ {\specialsectionheading{#1\ifblank{#2}{}{\textup{\space---\space#2}}}}
+ {\itemindent=0pt
+ \labelwidth=10pt
+ \leftmargin=15pt
+ \listparindent=15pt
+ \parsep=0pt
+ \topsep=\medskipamount}
+ \newcommand*{\specialsectionendhere}
+ {\specialsectionend
+ \global\togglefalse{printspecialsectionmarker}}
+ \item
+ \nointerlineskip
+ \leavevmode\par
+ \noindent}
+ {\iftoggle{printspecialsectionmarker}{\specialsectionend}{\relax}%
+ \end{list}}
+
+ \newenvironment*{caution}[1][]{\begin{specialsection}{Caution}{#1}}{\end{specialsection}}
+ \newenvironment*{example}[1][]{\begin{specialsection}{Example}{#1}}{\end{specialsection}}
+ \newenvironment*{futuredirection}[1][]
+ {\begin{specialsection}{Anticipated Changes \& Possible Extensions}{#1}\small}
+ {\end{specialsection}}
+ \newenvironment*{important}[1][]{\begin{specialsection}{Important}{#1}}{\end{specialsection}}
+ \newenvironment*{note}[1][]{\begin{specialsection}{Note}{#1}}{\end{specialsection}}
+ \newenvironment*{notes}[1][]{\begin{specialsection}{Notes}{#1}}{\end{specialsection}}
+ \newenvironment*{tip}[1][]{\begin{specialsection}{Tip}{#1}}{\end{specialsection}}
+ \newenvironment*{tips}[1][]{\begin{specialsection}{Tips}{#1}}{\end{specialsection}}
+ \newenvironment*{usecase}[1][]{\begin{specialsection}{Use Case}{#1}\small}{\end{specialsection}}
+ \newenvironment*{usecases}[1][]{\begin{specialsection}{Use Cases}{#1}\small}{\end{specialsection}}
+
+\newcommand*{\specialcodesectionheading}[1]{\textcolor{\markercolor}{\textbf{\textit{#1}}}}
+\newenvironment*{specialcodesection}[1]
+ {\Needspace{4\baselineskip}%
+ \begin{tcolorbox}[colback=white, colframe=\markercolor,
+ bottomrule=0pt, leftrule=5pt, rightrule=0pt, toprule=0pt]
+ \sf\typogsetupsf
+ \begin{list}
+ {\specialcodesectionheading{#1}}
+ {\itemindent=0pt
+ \labelwidth=20pt
+ \leftmargin=25pt
+ \listparindent=15pt
+ \parsep=0pt
+ \topsep=\medskipamount}
+ \item
+ \nointerlineskip
+ \leavevmode\par
+ \noindent}
+ {\end{list}
+ \end{tcolorbox}}
+ \newenvironment*{anticipatedchange}
+ {\begin{specialcodesection}{Anticipated Change}}
+ {\end{specialcodesection}}
+ \newenvironment*{implementationnote}
+ {\begin{specialcodesection}{Implementation Note}}
+ {\end{specialcodesection}}
+ \newenvironment*{knownbug}
+ {\begin{specialcodesection}{Known Bug}}
+ {\end{specialcodesection}}
+
+\newenvironment*{suspendshortverb}
+ {\DeleteShortVerb{\|}}
+ {\MakeShortVerb{\|}}
+
+\definecolor{cold-silver}{cmyk}{.08, 0, 0, .18}
+\newenvironment*{synopsis}
+ {\begin{tcolorbox}[boxrule=.25pt, colback=cold-silver]%
+ \phantomsection}
+ {\end{tcolorbox}}
+
+\newenvironment*{tablenotes}
+ {\medskip
+ \centering
+ \small
+ \begin{minipage}{\floatcaptionwidth}}
+ {\end{minipage}}
+\newcommand*{\tablenotemark}[1]{\smash{\textsuperscript{#1}}}
+
+\newcommand*{\termparbox}[1]{\parbox[t]{\linewidth}{#1\bottomstrut}}
+
+\newcommand*{\thousandsseparator}{\mbox{,}}
+
+\newcommand*{\topstrut}{\rule{0pt}{1.3em}}
+
+\newcommand*{\typogsetuprm}
+ {\typogsetup{raise*=.025em,
+ raisecapitalguillemets=.05em,
+ raiseguillemets=.03333em,
+ raisefiguredash=.05em}}
+\newcommand*{\typogsetupsf}
+ {\typogsetup{raise*=.06667em,
+ raiseguillemets=.05em}}
+
+\newcommand*{\visualpar}{\textcolor{\markercolor}{\P}\linebreak[1]\enspace}
+
+\newenvironment*{whittyquote}
+ {\begin{flushright}
+ \renewcommand*{\propername}[1]{\mbox{##1}}%
+ \sf\typogsetupsf}
+ {\end{flushright}}
+
+\newenvironment*{widecodeexample}
+ {\begin{maxipage}
+ \flushright
+ \begin{minipage}{\textwidth}
+ \ttfamily
+ \begin{tabbing}}
+ {\end{tabbing}
+ \end{minipage}
+ \end{maxipage}}
+
+
+\NewDocElement[macrolike = true,
+ idxtype = dim.,
+ idxgroup = dimensions,
+ printtype = \textit{dimen}]
+ {LaTeXDimen}{ldimen}
+\pretocmd{\DescribeLaTeXDimen}{\needspace{25pt}}{\relax}{\PrependingFailed}
+
+\NewDocElement[macrolike = false,
+ idxtype = enumitem-key,
+ idxgroup = enumitem-keys,
+ printtype = \textit{enumitem key}]
+ {EnumItemKey}{enumitemkey}
+\pretocmd{\DescribeEnumItemKey}{\needspace{25pt}}{\relax}{\PrependingFailed}
+
+
+\hyphenation{% https://hyphenateit.com/en-us
+ Double-guillemet-left
+ Double-guillemet-right
+ Double-quotes
+ Single-guillemet-left
+ Single-guillemet-right
+ Single-quotes
+ adj-demerits
+ allow-break
+ babel-hyphenation
+ base-line-skip
+ break-penalty
+ breakable-display
+ capital-hyphen
+ capital-times
+ cite-dash
+ club-penalties
+ cref-range-conjunction
+ display-break
+ display-widow-penalties
+ double-guillemet-right
+ double-hyphen-demerits
+ double-quotes
+ ex-hyphen-penalty
+ figure-dash
+ guille-met
+ guille-mets
+ inter-display-line-penalty
+ inter-text
+ kerned-hyphen
+ last-line-centered
+ last-line-centered-par
+ last-line-ragged-left
+ last-line-ragged-left-par
+ line-width
+ loose-ness
+ loose-spacing
+ make-at-letter
+ make-at-other
+ mar-gin-al
+ math-italics-correction
+ micro-type
+ narrow-space
+ narrow-space-scale
+ narrow-space-strength
+ number-dash
+ par-box
+ par-indent
+ parfillskip
+ pdf-string-def-Disable-Commands
+ post-display-penalty
+ pre-display-penalty
+ raise-capital-guillemets
+ raise-capital-hyphen
+ raise-capital-times
+ raise-number-dash
+ set-baseline-skip
+ set-baseline-skip-percentage
+ set-font-expand
+ set-font-shrink
+ set-font-stretch
+ set-leading
+ set-leading-percentage
+ short-inter-text
+ single-guillemet-left
+ single-guillemet-right
+ single-quotes
+ slash-kern
+ slightly-sloppy
+ slightly-sloppy-par
+ sloppy-par
+ smooth-ragged-right-fuzz-factor
+ smooth-ragged-right-par
+ smooth-ragged-right-shape-quintuplet
+ smooth-ragged-right-shape-septuplet
+ smooth-ragged-right-shape-triplet
+ space-skip
+ text-italics-correction
+ tight-spacing
+ tracing-boxes
+ tracing-para-graphs
+ tracking-tt-spacing
+ typog-get
+ typog-setup
+ vtie-bot
+ vtie-bot-disp
+ vtie-bot-disp-par
+ vtie-bot-disp-top-par
+ vtie-bot-par
+ vtie-top
+ vtie-top-par
+ wide-space
+ wide-space-scale
+ wide-space-strength
+ widow-penalties
+}
+
+
+\begin{document}
+ \typogsetuprm
+ \DocInput{typog.dtx}
+\end{document}
+%</driver>
+%<*index-style>
+actual '='
+delim_r "\\figuredash*"
+heading_prefix "\\pagebreak[3]\\smallskip\n\n{\\sffamily\\bfseries\\large "
+heading_suffix "}\\nopagebreak\n"
+headings_flag 1
+level '>'
+quote '!'
+%</index-style>
+% \fi
+%
+%
+% \DoNotIndex{\,}
+% \DoNotIndex{\addtolength,\advance,\aftergroup,\allowdisplaybreaks,\arabic}
+% \DoNotIndex{\AtBeginDocument,\autotransfer}
+% \DoNotIndex{\baselineskip}
+% \DoNotIndex{\c,\char,\clubpenalties,\clubpenalty,\count,\cs,\csname}
+% \DoNotIndex{\DeclareRobustCommand,\def,\define@choicekey,\define@key,\detokenize}
+% \DoNotIndex{\dim,\dimen,\dimexpr,\discretionary,\displaywidowpenalties,\displaywidowpenalty}
+% \DoNotIndex{\edef,\else,\emergencystretch,\empty,\endcsname}
+% \DoNotIndex{\endlastlineflushrightpar}
+% \DoNotIndex{\endlastlineraggedleftpar}
+% \DoNotIndex{\endnofontexpand,\endnofontexpansion}
+% \DoNotIndex{\endsmoothraggedrightshapequintuplet}
+% \DoNotIndex{\endsmoothraggedrightshapeseptuplet}
+% \DoNotIndex{\endsmoothraggedrightshapetriplet}
+% \DoNotIndex{\endtypoginspect}
+% \DoNotIndex{\exhyphenpenalty,\expandafter,\ExplSyntaxOff,\ExplSyntaxOn}
+% \DoNotIndex{\fi,\finalhyphendemerits,\font,\fontdimen,\fp,\fussy,\futurelet}
+% \DoNotIndex{\gdef,\global,\glueexpr,\@gobble}
+% \DoNotIndex{\guillemotleft,\guillemotright,\guilsinglleft,\guilsinglright}
+% \DoNotIndex{\hbadness,\hfuzz,\hskip,\hspace}
+% \DoNotIndex{\ignorespaces,\ignorespacesafterend}
+% \DoNotIndex{\if,\IfBooleanT,\IfBooleanTF,\ifcase,\ifdefined,\ifdim,\iffalse,\ifmmode,\ifMT@expansion}
+% \DoNotIndex{\@ifnextchar,\IfNoValueF,\IfNoValueTF,\ifnum}
+% \DoNotIndex{\iftypog@microtype@loadedfalse}
+% \DoNotIndex{\iftypog@microtype@preloadedfalse}
+% \DoNotIndex{\ifvmode,\ifx,\ignorespaces,\inputlineno,\int,\interlinepenalty}
+% \DoNotIndex{\jobname}
+% \DoNotIndex{\kern}
+% \DoNotIndex{\l,\lastlinefit,\lastlineflushrightpar,\lastlineraggedleftpar,\leftmargin,\leftskip,\let}
+% \DoNotIndex{\linepenalty,\linewidth,\@listdepth,\looseness,\lsstyle}
+% \DoNotIndex{\@M,\m@th,\mathbin,\mathord,\maxdimen,\message,\microtypecontext,\microtypesetup}
+% \DoNotIndex{\@minus,\mkern,\m@ne,\mspace,\MT@letterspace@,\MT@MT,\muexpr}
+% \DoNotIndex{\@ne,\NeedsTeXFormat,\NewDocumentCommand,\NewDocumentEnvironment,\newcommand,\newenvironment}
+% \DoNotIndex{\newcounter,\newdimen,\newif,\newlength,\newmuskip}
+% \DoNotIndex{\nobreak,\nofontexpand,\nofontexpansion,\nr,\numexpr}
+% \DoNotIndex{\or,\optarg}
+% \DoNotIndex{\p@,\PackageError,\PackageWarning}
+% \DoNotIndex{\par,\parfillskip,\parindent,\parshape,\pdf@strcmp}
+% \DoNotIndex{\pdfstringdefDisableCommands}
+% \DoNotIndex{\penalty,\@plus,\PopPostHook,\postdisplaypenalty,\predisplaypenalty,\prg}
+% \DoNotIndex{\pretolerance,\protected,\ProvidesPackage,\PushPostHook}
+% \DoNotIndex{\raisebox,\refstepcounter,\relax,\RenewExpandableDocumentCommand,\RequirePackage,\rightskip}
+% \DoNotIndex{\setcounter,\SetEnumitemKey,\SetExpansion,\setkeys,\setlength,\setstretch}
+% \DoNotIndex{\showboxbreadth,\showboxdepth,\skip,\sloppy}
+% \DoNotIndex{\smoothraggedrightpar}
+% \DoNotIndex{\smoothraggedrightshapequintuplet}
+% \DoNotIndex{\smoothraggedrightshapeseptuplet}
+% \DoNotIndex{\smoothraggedrightshapetriplet}
+% \DoNotIndex{\space,\spaceskip,\stepcounter,\@strength,\string}
+% \DoNotIndex{\textemdash,\textendash,\textsf,\textsl,\texttimes,\textwidth,\the,\times,\tl,\tolerance}
+% \DoNotIndex{\tracingnone,\tracingpages,\tracingparagraphs}
+% \DoNotIndex{\typeout,\typoginspect,\typoglogo}
+% \DoNotIndex{\unless}
+% \DoNotIndex{\val,\value,\vbadness,\vfuzz}
+% \DoNotIndex{\widowpenalties,\widowpenalty}
+% \DoNotIndex{\z@,\z@skip}
+%
+%
+% \changes{v0.1}{2024-3-7}{Initial version.}
+%
+%
+% \pagenumbering{roman}
+%
+% \title{\typoglogo{} \capitalendash{} Typographic Fine\rightkernedhyphen*[20]{-120}Tuning}
+% \author{Ch.~L.~Spiel\footnote{\quarterspace\texttt{cspiel@users.sourceforge.org}}}
+% \date{\fileversion\qquad \filedate}
+% \maketitle
+% \thispagestyle{empty}
+%
+% \begingroup
+% \let\small=\normalsize
+% \begin{abstract}
+% \begin{lastlinecenteredpar}
+% \noindent
+% Package~\packagename{typog} provides macros and environments for
+% \mbox{(micro-)\itcorr{2}}\breakpoint typographic enhancements. It also supplies some
+% means to avoid common typographic problems as, for example, orphan or widow lines.
+% Moreover it supplies high-level front-ends for packages~\packagename{microtype} and
+% \packagename{setspace}.
+% \end{lastlinecenteredpar}
+% \end{abstract}
+% \endgroup
+%
+%
+% \iffalse
+%<*title>
+prologues := 3;
+truecorners := 1;
+linecap := butt;
+
+string roman_font;
+roman_font := "pplr8r"; % URW Palladio L - Roman
+
+string italics_font;
+italics_font := "pplri8r"; % URW Palladio L - Italic
+
+picture dash_dotted;
+dash_dotted := dashpattern(on 3 off 3 on 0 off 3);
+
+u := 280;
+
+font_scale := 20;
+
+pair loc[];
+loc[1] := .2[origin, (u, 0)];
+loc[2] := .5[origin, (u, 0)];
+loc[3] := .8[origin, (u, 0)];
+
+pair slant_vector;
+slant_vector := (63, 150);
+
+pair raise_vector[];
+raise_vector[0] := (0, 44);
+raise_vector[1] := (0, 61);
+raise_vector[2] := (0, 54);
+raise_vector[3] := (0, 71);
+
+
+picture letter_V;
+letter_V := thelabel.top("V" infont roman_font scaled font_scale, loc[1]);
+
+picture normal_hyphen;
+normal_hyphen := thelabel.top("-" infont roman_font scaled font_scale, loc[2] + raise_vector[0]);
+
+picture raised_hyphen;
+raised_hyphen := thelabel.top("-" infont roman_font scaled font_scale, loc[2] + raise_vector[1]);
+
+picture letter_A;
+letter_A := thelabel.top("A" infont roman_font scaled font_scale, loc[3]);
+
+
+beginfig(1);
+ draw letter_V;
+ draw normal_hyphen withcolor .9 white;
+ draw raised_hyphen;
+ draw letter_A;
+
+ pickup pencircle scaled .4pt;
+ draw (loc[1] -- loc[1] + slant_vector) shifted (7, 0) dashed evenly;
+ draw (loc[1] -- loc[1] + slant_vector) shifted (27, 0) dashed evenly;
+ draw (loc[1] -- loc[1] + slant_vector) shifted (80, 0) dashed evenly;
+ draw (loc[3] -- loc[3] + slant_vector) shifted (-68, 0) dashed evenly;
+
+ draw .35[origin, (u, 0)] + raise_vector[2] -- .8[origin, (u, 0)] + raise_vector[2]
+ dashed dash_dotted withcolor .6white;
+ draw .35[origin, (u, 0)] + raise_vector[3] -- .8[origin, (u, 0)] + raise_vector[3]
+ dashed dash_dotted;
+endfig;
+end
+%</title>
+% \fi
+%
+%
+% \vspace*{20pt}
+%
+% \begin{center}
+% \includegraphics{title-1.mps}
+% \end{center}
+%
+% \vfill
+%
+% \begin{lastlinecenteredpar}
+% \footnotesize
+% \noindent
+% This package is copyright \textcopyright~2024 Ch.~L.~Spiel. It may be distributed
+% and\kernedslash*or modified under the conditions of the \LaTeX{} Project Public License
+% \acronym{(LPPL)}, either version~1.3c of this license or --~at your option~-- any later
+% version. This work has the \acronym{LPPL} maintenance status
+% \doublequotes{author-maintained}.
+% \end{lastlinecenteredpar}
+%
+%
+% \clearpage
+% \thispagestyle{pagenumberonly}
+% \tableofcontents
+% \vspace{\fill}
+%
+%
+% \thispagestyle{pagenumberonly}
+% \listoftables
+% \phantomsection
+% \addcontentsline{toc}{subsection}{List of Tables}
+% \vspace{\fill}
+%
+%
+% \begingroup
+% \footnotesize
+% \singlespacing
+% \noindent
+% The font sample on the title page was generated with the help of \MP{} using
+% \doublequotes{\acronym{URW} Palladio~L}\index{font>URW Palladio L=\acronym{URW} Palladio
+% L}.
+% \endgroup
+%
+%
+% \clearpage
+% \pagenumbering{arabic}
+% \section{Introduction}\label{sec:introduction}
+%
+% \begin{whittyquote}
+% \doublequotes{Good typography} is the minimum acceptable solution; \\
+% \doublequotes{fine typography} is what we aspire to. \\
+% \capitalemdash*~\propername{Ilene Strizver}
+% \end{whittyquote}
+%
+% \noindent
+% \LaTeX{} is the beginning of good typesetting -- not the end. This package provides some
+% tools for even better looking documents. When applied correctly its effects appear subtle
+% and inconspicuous.
+%
+%
+% \subsection{Overview}\label{sec:overview}
+%
+% Package~\packagename{typog} focuses on (micro-)typographic improvements.
+%
+% \Cref{sec:information} tends to the wish for more information in the typesetting process
+% whether during the draft phase or in the final printed manuscript.\marginnote{Throughout the
+% whole document we indicate actual uses of the package's features in the margin. All these
+% notes are examples themselves as they are typeset with
+% \hyperref[syn:slightlysloppy]{\code{slightlysloppy}},
+% \hyperref[syn:loosespacing]{\code{loosespacing}}, and
+% \hyperref[syn:smoothraggedrightpar]{\code{smoothraggedrightpar}}.~\visualpar The title page
+% has already demonstrated the effect of
+% \hyperref[syn:lastlinecenteredpar]{\code{lastlinecenteredpar}} in justified paragraphs for
+% the abstract and the copyright notice.}
+%
+% \Cref{sec:latex-hyphenation} expands the hyphenation facilities of \LaTeX.
+%
+% \Cref{sec:break-ligatures,sec:manual-italic-correction,sec:extra-kerning,sec:raise-characters}
+% deal with vertically positioning glyphs in a more pleasant way.
+%
+% \Cref{sec:align-last-line,sec:fill-last-line} discuss dearly missed macros for better control
+% of the last line of a paragraph.
+%
+% \Cref{sec:spacing-control} covers the manipulation of the length of a paragraph.
+%
+% \Cref{sec:microtype-frontend} expounds on the \packagename{microtype} front-end: font
+% tracking~(\ref{sec:tracking-control}), font expansion~(\ref{sec:font-expansion-control}), and
+% character protrusion~(\ref{sec:protrusion}).
+%
+% In \cref{sec:sloppy-paragraphs} we address some shortcomings of spacing control with a
+% replacement for the macro~\cs{sloppy} and the related environment~\code{sloppypar}.
+%
+% \Cref{sec:vtie-paragraph} presents several special functions to avoid club or widow lines in
+% a paragraph.
+%
+% As a simple extension of displayed mathematical equations we define a breakable variant in
+% \cref{sec:breakable-display}.
+%
+% \Cref{sec:setspace-frontend} introduces the \packagename{setspace} front-end.
+%
+% In the last part, \cref{sec:smooth-ragged}, we introduce a novel way of generating ragged
+% paragraphs, which still is experimental.
+%
+%
+% \subsection{Prerequisites}\label{sec:packageprerequisites}
+%
+% Package \packagename{typog} requires \eTeX; it relies on the \LaTeXIII{}~interface. Parts of
+% it are based on package~\packagename{microtype}. However, if the respective functionality is
+% not used, \packagename{typog} can be used without \packagename{microtype}. The same holds
+% true for the \packagename{setspace} front-end.
+%
+% The package was tested with \programname{pdfTeX}~3.141592653-2.6-1.40.24 from the
+% TeX~Live distribution of~2022 as shipped by
+% \href{https://packages.debian.org/search?keywords=texlive}{Debian}.
+%
+%
+% \sectionfinish
+% \clearpage
+% \section{Package Options}\label{sec:package-options}
+%
+% Package \packagename{typog} does not override any existing macros or environments when
+% loaded, unless explicitly told by a package option.
+%
+% \begin{synopsis}
+% \begin{tabbing}
+% |\usepackage[|\,\dots|]{microtype}|
+% \=\texttt{\%\space}\textit{Only required for macros and} \\
+% \>\texttt{\%\space}\textit{environments in \cref{sec:microtype-frontend}.} \\
+% \\[-.5em]
+% |\usepackage[|\,\dots|]{setspace}|
+% \=\texttt{\%\space}\textit{Only required for macros in \cref{sec:setspace-frontend}.} \\
+% \\[-.5em]
+% |\usepackage[|\meta{OPTION}\dots|]{typog}|
+% \end{tabbing}
+% \end{synopsis}
+%
+% \index{package options|(}
+% The package \meta{OPTIONs} serve as configuration \meta{key}s, too. This means they can be
+% set with \hyperref[syn:typogsetup]{\code{typogsetup}} and their values can be retrieved with
+% \hyperref[syn:typogget]{\cs{typogget}}. Options that rely on package~\packagename{microtype}
+% are indicated with \doublequotes{\microtyperequiredmarker}.
+%
+% \begin{typogsetup}{}
+% \newcommand*{\indexpackageoption}[1]
+% {\index{package option>#1=\code{#1}}\index{#1=\code{#1}~(option)}\ignorespaces}
+% \begin{description}
+% [before={\let\oldmakelabel=\makelabel
+% \renewcommand{\makelabel}[1]
+% {\oldmakelabel{\termparbox{##1}}\phantomsection}},
+% font=\normalfont,
+% style=nextline,
+% vtietop]
+% \item[|breakpenalty=|\meta{penalty}]\label{item:breakpenalty}
+% \indexpackageoption{penalty}
+% \shiftedmarginnote{This sub-section is typeset with all \packagename{typog}~parameters
+% reset to their defaults by wrapping it in a
+% \hyperref[syn:typogsetup]{\code{typogsetup}}~environment with an empty argument.}
+% Penalty for a line break at various points. Default
+% value:~\the\typogget{breakpenalty}; initialized by the current
+% \cs{exhyphenpenalty}:~\the\exhyphenpenalty.
+%
+% \item[|debug|, |nodebug|]\label{item:debug}
+% \indexpackageoption{debug}
+% \indexpackageoption{nodebug}
+% Write package-specific debug information to the log file. Opposite: |nodebug|. The
+% default is not to log debug information.
+%
+% \item[|ligaturekern=|\meta{dim}]\label{item:ligaturekern}
+% \indexpackageoption{ligaturekern}
+% Set \meta{dim} of the kern that is inserted to split a ligature in
+% macro\hyperref[syn:nolig]{\cs{nolig}}. See
+% \cref{sec:break-ligatures}.\shiftedmarginnote{We access the configuration values with
+% \hyperref[syn:typogget]{\cs{typogget}}.} Default
+% value:~\milliem{\typogget{ligaturekern}}.
+%
+% \item[|mathitalicscorrection=|\meta{dim}]\label{item:mathitalicscorrection}
+% \indexpackageoption{mathitalicscorrection}
+% Italics correction in math mode. See \cref{sec:manual-italic-correction} and also the
+% complementary configuration
+% option~\hyperref[item:textitalicscorrection]{|textitalicscorrection|}. Default
+% value:~\the\typogget{mathitalicscorrection}.\footnote{Note that 1\,mu is
+% \nativetextfraction{1}{18}\,em of the mathematical font's~em.}
+%
+% \item[|raise*=|\meta{dim}]\label{item:raise}
+% \indexpackageoption{raise*}
+% Set the length by which selected characters (dash, hyphen, times, and number dash) are
+% raised. Default value:~0pt.
+%
+% Only the raise amounts for guillemets are unaffected by this option.
+%
+% \item[|raisecapitaldash=|\meta{dim}]\label{item:raisecapitaldash}
+% \indexpackageoption{raisecapitaldash}
+% Set the length that the \cs{textendash} is raised in
+% \hyperref[syn:capitaldash]{\cs{capitaldash}}. See \cref{sec:capital-dash}. Default
+% value:~\milliem{\the\typogget{raisecapitaldash}}.
+%
+% \item[|raisecapitalhyphen=|\meta{dim}]\label{item:raisecapitalhyphen}
+% \indexpackageoption{raisecapitalhyphen}
+% Set the length that the hyphen character~\sample{-} is raised in
+% \hyperref[syn:capitalhyphen]{\cs{capitalhyphen}}. See
+% \cref{sec:capital-hyphen}.\shiftedmarginnote{This description list is protected against
+% breaking items across pages within the first three lines by
+% \hyperref[syn:vtietop]{\code{vtietop}}.} Default
+% value:~\milliem{\the\typogget{raisecapitalhyphen}}.
+%
+% \item[|raisecapitaltimes=|\meta{dim}]\label{item:raisecapitaltimes}
+% \indexpackageoption{raisecapitaltimes}
+% Set the length that the multiplication symbol~\sample{\texttimes} is raised in
+% \hyperref[syn:capitaltimes]{\cs{capitaltimes}}. See \cref{sec:mult-sign}. Default
+% value:~\milliem{\the\typogget{raisecapitaltimes}}.
+%
+% \item[|raisecapitalguillemets=|\meta{dim}]\label{item:raisecapitalguillemets}
+% \indexpackageoption{raisecapitalguillemets}
+% Set the length that single and double guillemets are raised in the uppercase versions of
+% the guillemet macros. See \cref{sec:guillemets}. Default
+% value:~\milliem{\the\typogget{raisecapitalguillemets}}.
+%
+% \item[|raiseguillemets=|\meta{dim}]\label{item:raiseguillemets}
+% \indexpackageoption{raiseguillemets}
+% Set the length that single and double guillemets are raised in the lowercase versions of
+% the guillemet macros. See \cref{sec:guillemets}. Default
+% value:~\milliem{\the\typogget{raiseguillemets}}.
+%
+% \item[|raisefiguredash=|\meta{dim}]\label{item:raisefiguredash}
+% \indexpackageoption{raisefiguredash}
+% Set the length that the \cs{textendash} is raised in
+% \hyperref[syn:figuredash]{\cs{figuredash}}. See \cref{sec:number-dash}. Default
+% value:~\milliem{\the\typogget{raisefiguredash}}.
+%
+% \item[|shrinklimits=\{|\meta{limit-1}, \meta{limit-2}, \meta{limit-3}|\}|\quad\microtyperequiredmarker\label{item:shrinklimits} \\
+% |stretchlimits=\{|\meta{limit-1}, \meta{limit-2}, \meta{limit-3}|\}|\quad\microtyperequiredmarker]\label{item:stretchlimits}
+% \indexpackageoption{shrinklimits}
+% \indexpackageoption{stretchlimits}
+% Set the three limits, given in \nativetextfraction{1}{1000}\,em, of shrinkability and
+% stretchability for the respective levels. They are used in
+% \hyperref[syn:setfontshrink]{\code{setfontshrink}} (|shrinklimits| triple only),
+% \hyperref[syn:setfontstretch]{\code{setfontstretch}} (|stretchlimits| triple only), and
+% \hyperref[syn:setfontexpand]{\code{setfontexpand}} (both triples of limits). See
+% \cref{sec:font-expansion-control}.
+%
+% New \meta{limit-\#} values replace old ones. If one or more limits of the triple should
+% remain unchanged pass a \smash{\sample{*}} instead of a number.
+%
+% \makeatletter
+% Defaults for |shrinklimits| are \mbox{\typog@default@shrink@i, \typog@default@shrink@ii,
+% \typog@default@shrink@iii} and those for |stretchlimits| are
+% \mbox{\typog@default@stretch@i, \typog@default@stretch@ii, \typog@default@stretch@iii}.
+% \makeatother
+%
+% Both options can be used when loading the package and in the document preamble, but
+% \emph{not} in the document body.
+%
+% \item[|slashkern=|\meta{dim}]\label{item:slashkern}
+% \indexpackageoption{slashkern}
+% Set the size of the kerns before and after \hyperref[syn:kernedslash]{\cs{kernedslash}}.
+% See \cref{sec:slash-with-kern}. Default value:~\milliem{\typogget{slashkern}}.
+%
+% \item[|textitalicscorrection=|\meta{dim}]\label{item:textitalicscorrection}
+% \indexpackageoption{textitalicscorrection}
+% Italics correction fallback-value; used if \cs{fontdimen1} is zero. See
+% \cref{sec:manual-italic-correction} on manual italic correction and also the
+% complementary configuration
+% option~\hyperref[item:mathitalicscorrection]{|mathitalicscorrection|}. Default
+% value:~\milliem{\typogget{textitalicscorrection}}.
+%
+% \item[|trackingttspacing=|\code{\{\meta{outer-spacing}\}}\quad\microtyperequiredmarker]\label{item:trackingttspacing}
+% \indexpackageoption{trackingttspacing}
+% Set the outer spacing of all typewriter fonts if used in environment~\code{settracking}
+% as described in \cref{sec:tracking-control}.
+%
+% The argument \meta{outer-spacing} gets passed to \packagename{microtype}'s
+% \cs{SetTracking} option~\code{outer spacing}~\cite[Sec.~5.3]{package:microtype}. If it
+% contains commas, enclose the whole argument in curly braces. Default argument
+% value:~\mbox{\typogget{trackingttspacing}}.
+%
+% The option can be used when loading the package and in the document preamble, but
+% \emph{not} in the document body.
+%
+% By default this option is unset.
+% \end{description}
+% \end{typogsetup}
+% \index{package options|)}
+%
+%
+% \sectionfinish
+% \clearpage
+% \section{Macros and Environments}\label{sec:macros-and-envs}
+%
+% \begin{whittyquote}
+% Easy things should be easy, and \\
+% hard things should be possible. \\
+% \capitalemdash*~\propername{Larry Wall}
+% \end{whittyquote}
+%
+% \noindent
+% This is the \doublequotes{User Manual}~section of the documentation, where we describe all
+% user-relevant macros and environments that are defined in package~\packagename{typog}.
+%
+% We follow the naming convention that every environment whose name ends with \code{\dots par}
+% issues a \cs{par} at its end. Environments with different name suffixes never close
+% with~\cs{par}.
+%
+% \bigskip
+%
+% \noindent
+% \DescribeEnv{typogsetup}
+% Configure\index{configuration}\index{setup} the package with the given \meta{keys}. An empty
+% argument of \code{typogsetup} resets all \meta{keys} to their default values.
+%
+% \begin{synopsis}\label{syn:typogsetup}
+% \cs{begin}|{typogsetup}|\marg{keys}
+% \dots{}
+% \cs{end}|{typogsetup}|
+% \end{synopsis}
+%
+% The package can be (re-)configured\index{reconfigure} at any point with
+% \cs{typogsetup}\marg{keys}, or --~for localized changes~-- as
+%
+% \begin{codeexample}
+% 12\=\kill
+% \cs{begin}|{typogsetup}|\marg{keys} \\
+% \> \dots \\
+% \cs{end}|{typogsetup}|
+% \end{codeexample}
+%
+% \noindent
+% where \meta{keys} have the same format as the package options described in
+% \cref{sec:package-options}.
+%
+% \begin{usecases}
+% \cs{typogsetup} can substitute configuring the package at load-time or serve as an
+% addition.~\visualpar Using the |typogsetup|~environment allows to fine-tune the parameters
+% for a specific use, e.\,g., display-sized text.~\visualpar It even is conceivable that a
+% well-established \packagename{typog}-configuration gets attached to font-changing macros
+% like \cs{rm}, \cs{sf},~etc.
+% \end{usecases}
+%
+%
+% \noindent
+% \DescribeMacro{\typogget}
+% Sometimes the user needs to access internal configuration values of
+% package~\packagename{typog}. This can be done in a safe way without resorting to code that
+% is bracketed by \cs{makeatletter}/\cs{makeatother} with the help of the following macro.
+%
+% \begin{synopsis}\label{syn:typogget}
+% \cs{typogget}\marg{key}
+% \end{synopsis}
+%
+% Retrieve the configuration value that is associated with~\meta{key}. For a list of available
+% \meta{key}s see~\cref{sec:package-options}.
+%
+% \begin{usecase}
+% Raise glyphs by the same amount as configured with \packagename{typog}.
+%
+% \begin{codeexample}
+% 12\=\kill
+% \cs{newcommand*}\{\cs{seesubst}\} \\
+% \> \{\cs{raisebox}\= \{\cs{typogget}\{raisecapitalguillemets\}\}\% \\
+% \> \> \{\cs{rightarrowhead}\}\} \\
+% \cs{renewcommand*}\{\cs{labelitemi}\} \\
+% \> \{\cs{raisebox}\= \{\cs{typogget}\{raisecapitaldash\}\}\{\cs{cdot}\}\}
+% \end{codeexample}
+%
+% The latter only is useful inside of an \code{itemize}~environment of course.
+% \end{usecase}
+%
+%
+% \subsection{Information}\label{sec:information}\index{information}
+%
+% \begin{whittyquote}
+% Never forget: The visual output counts; \\
+% it must always be checked, [\dots]. \\
+% \marginnote{The em-dash at then end of the quote is height-adjusted with
+% \hyperref[syn:capitalemdash]{\cs{capitalemdash*}}.}%
+% \capitalemdash*~\propername{Udo Wermuth}~\cite{wermuth:2017a}
+% \end{whittyquote}
+%
+% \noindent
+% We define some functions for introspection of the typesetting process.
+%
+%
+% \subsubsection{Font Information}\label{sec:font-information}
+% \index{font>information}
+%
+% \DescribeMacro{\fontsizeinfo}
+% Capture the font~size\footnote{We use \cs{fontdimen6}, the em-height as the font
+% size.}\index{font>size} and line~spacing\footnote{The line~spacing simply is
+% \cs{baselineskip}.}\index{line spacing} at the point where \cs{fontsizeinfo} \emph{is called}
+% in macro~\meta{cs-name}. Both dimensions are measured in points~(pt) and the results are
+% rounded to tenths.
+%
+% \begin{synopsis}\label{syn:fontsizeinfo}
+% \cs{fontsizeinfo}\marg{cs-name}
+% \end{synopsis}
+%
+% The call to \cs{fontsizeinfo} introduces a pair of macros to access the stored values. The
+% unstarred version~\cs{cs-name} expands to the lengths including their units (i.\,e.,~pt), the
+% starred version~\cs{cs-name*} omits the units. The separating slash is
+% \hyperref[syn:kernedslash]{\cs{kernedslash}}, which is introduced in
+% \cref{sec:slash-with-kern}.
+%
+% \begin{note}
+% The \cs{baselineskip} can contain a rubber (stretch/shrink) component, however,
+% \cs{fontsizeinfo} will not display these parts.
+% \end{note}
+%
+% \begin{usecases}
+% Colophon.~\visualpar Font test pages.
+% \end{usecases}
+%
+%
+% \subsubsection{Paragraph- and Page-Breaking Trace}\label{sec:paragraph-and-pagebraking-trace}
+%
+% \DescribeEnv{typoginspect}
+% \DescribeEnv{typoginspectpar}
+% The environments |typoginspect| and |typoginspectpar| turn on the tracing of paragraphs and
+% pages; optionally they display the parbox' contents. These environments can assist the user
+% in identifying typographic problems in a quantitative way without getting distracted by
+% unrelated information in the trace or the \filesystem{log}-file.
+%
+% \begin{synopsis}\label{syn:typoginspect}
+% \cs{begin}|{typoginspect}|\oarg{option}\marg{id}
+% \dots{}
+% \cs{end}|{typoginspect}| \\[\smallskipamount]
+% \cs{begin}|{typoginspectpar}|\oarg{option}\marg{id} \\
+% \hspace*{1em}\dots \\
+% \cs{end}|{typoginspectpar}|
+% \end{synopsis}
+%
+% The \meta{id} is an arbitrary string that identifies the results in the
+% \filesystem{log}-file. If the mandatory argument is empty, \packagename{typog} constructs a
+% unique value.
+%
+%
+% \paragraph{Option}
+%
+% \begin{description}[style=nextline]
+% \item[|tracingboxes|{[}=\meta{size}{]}]
+% Specify the maximum box breadth and box depth reported in the log. If \meta{size} is
+% omitted the maximum values are assumed; this is similar to the \cs{tracingboxes}
+% macro~\cite[p.~312]{abrahams:2020}.
+% \end{description}
+%
+% \begin{caution}
+% The end-of-trace marker sometimes gets placed too early and the trace seems truncated.
+% \LaTeX{} reliably logs the requested the trace information, but the write operations for
+% trace data and \cs{immediate}\cs{write} which is used to print the end-tag are not
+% synchronized.
+% \end{caution}
+%
+%
+% \paragraph{\LaTeX{} \filesystem{log}-file and trace.}
+% The trace data in the \filesystem{log}-file is bracketed by \acronym{XML}-tags.
+%
+% \begin{widecodeexample}
+% <typog-inspect\textvisiblespace
+% id="\meta{id}"\textvisiblespace
+% job="\meta{jobname}"\textvisiblespace
+% line="\meta{line-number}"\textvisiblespace
+% page="\meta{page-number}"> \\
+% ~~\dots \\
+% </typog-inspect>
+% \end{widecodeexample}
+%
+% \noindent
+% where the \meta{id} is the user-supplied, unique\footnote{It has turned out advantageous to
+% use unique \meta{id}s. However, \meta{id}s are \emph{not required} to be distinct.}
+% identifier of the group, \meta{jobname} is the value of \cs{jobname}, \meta{line-number}
+% records the \cs{inputlineno} of the \cs{begin}~of the group, and \meta{page-number} gets
+% replaced with the current value of the page counter.
+%
+% \begin{itemize}[noindent]
+% \item Any text tool can be used to ferret out the tags. \propername{Emacs} users will find
+% \mbox{\code{(occur \meta{regexp})}} to be useful.
+%
+% \item As long as the tags are not nested \programname{sed} or \programname{perl}
+% extract the information gathered by~|typoginspect|, for example:
+%
+% \begin{codeexample}
+% sed \= -ne '/<typog-inspect\textvisiblespace id="\dots"/,\textbackslash\#</typog-inspect>\#p' \\
+% \> < jobname.log
+% \end{codeexample}
+%
+% or
+%
+% \begin{codeexample}
+% perl \= -ne '\= \$a=0 if /<\textbackslash/typog-inspect>/; \textbackslash \\
+% \>\> print \$\_ if \$a; \textbackslash \\
+% \>\> \$a=1 if /<typog-inspect\textvisiblespace id="\dots"/' \textbackslash \\
+% \> < jobname.log
+% \end{codeexample}
+%
+% \item The companion program~\programname{typog-grep} is tailored to extract the information
+% marked up by |typoginspect| and~|typoginspectpar| even if the environments are nested.
+%
+% We reproduce the complete manual page of \programname{typog-grep} in \Cref{app:typog-grep}.
+% \end{itemize}
+%
+% \begin{tips}
+% \begin{itemize}[nestedinspecialsection, notopsep]
+% \item It may be necessary to run whatever \LaTeX~engine with a larger log-file line length,
+% to prevent wrapped lines. With short lines the wannabe \acronym{XML} opening tags can
+% get wrapped and thus become unrecognizable to dumb postprocessors. To avoid wrapped
+% lines prepend
+%
+% \begin{codeexample}
+% /usr/bin/env max\_print\_line=2147483647
+% \end{codeexample}
+%
+% to the command-line. The value~\(2147483647 = 2^{31} - 1\) effectively disables all line
+% wrapping by \LaTeX.
+%
+% As both \command{pdflatex} and \command{lualatex} support changing their configuration on
+% a by-call basis with option~\code{-cnf-line=\meta{STRING}} an alternative to the above
+% example is to add
+%
+% \begin{codeexample}
+% -cnf-line=max\_print\_line=2147483647
+% \end{codeexample}
+%
+% to the respective command-line.
+%
+% \item If more trace information is needed just add \cs{tracing\dots} calls right after
+% \code{\string\begin\{typoginspect\}}
+% or~\code{\string\begin\{typoginspectpar\}}.\specialsectionendhere
+% \end{itemize}
+% \end{tips}
+%
+%
+% \phantomsection
+% \paragraph{Investigating the badness of a paragraph.}\label{sec:investigating-paragraph-badness}\index{paragraph>badness}
+%
+% It is generally unnecessary to determine the \emph{exact} classification of a paragraph's
+% badness~\cite[p.~97n]{knuth:1986}, though the curious user can switch on logging of
+% \TeX's~line-break information with
+% \cs{tracingparagraphs}|=1|\footnote{Reference~\citenum{wermuth:2016} provides an
+% exceptionally detailed discussion of the output of \cs{tracingparagraphs}.} or simply use
+% the \hyperref[syn:typoginspect]{typoginspect}~environment and check the suffixes
+%
+% \begingroup
+% \centering
+% |@@|\meta{breakpoint-number} |line| \meta{line-number}|.|\meta{suffix}
+% \par
+% \endgroup
+%
+% \noindent
+% of each line in the paragraph, where for \meta{suffix} the following mapping
+% holds~\cite[p.~99]{knuth:1986}:
+% \begin{equation*}
+% 0 \mapsto \text{very loose},\quad
+% 1 \mapsto \text{loose},\quad
+% 2 \mapsto \text{decent, and}\quad
+% 3 \mapsto \text{tight}.
+% \end{equation*}
+%
+% \begin{example}
+% \let\oldsample=\sample
+% \renewcommand*{\sample}[1]{\oldsample{\texttt{#1}}}
+% \par\medskip
+% \noindent
+% |@@17: line 15.1- t=142289 s=93.58414 a=2.86073 -> @@16|
+%
+% \begin{enumerate}[noitemsep]
+% \item The feasible breakpoint~\sample{@@} number~17 in the paragraph leads to
+% \item \sample{line}~15, which is the loose~\sample{.1} last~\sample{-} line of the
+% paragraph.
+% \item Up to this breakpoint the paragraph has picked up total demerits~\sample{t}
+% of~142289.
+% \item The following two values only show up if\/ \(\cs{lastlinefit} \not= 0\):
+% \begin{enumerate}[beginpenalty=10000, nosep]
+% \item The shortfall~\sample{s} and
+% \item glue~\sample{a} or~\sample{g}.\footnote{The author is unaware of any descriptions
+% of \code{s}, \code{a}, or~\code{g}. The interested reader is referred to the source
+% code, e.\,g., \filesystem{pdftex.web}; search for \code{print("\textvisiblespace s=")}.
+% In the weaved documentation the first relevant section is~\S1851.}
+% \end{enumerate}
+% \item The best\footnote{\singlequotes{Best} means the minimum-demerits path in the graph of
+% the feasible breakpoints, which has been constructed for the paragraph.} way to get
+% here, i.\,e., |@@17| is via~\sample{->} breakpoint~\sample{@@}~16.\specialsectionendhere
+% \end{enumerate}
+% \end{example}
+%
+% \begin{note}
+% When package~\packagename{microtype}'s font expansion feature jumps in the reports on
+% \doublequotes{Loose \textbackslash hbox (badness \dots)} and \doublequotes{Tight
+% \textbackslash hbox (badness \dots)} \shiftedmarginnote{All of our guillemets were raised
+% by \milliem{\the\typogget{raiseguillemets}}.} contain the amount of shrinking or expansion
+% as parenthesized values (units are thousandths of the current font's~em) like, e.\,g.,
+%
+% \begin{codeexample}
+% \textbackslash T1/erewhon-LF/m/n/9/@/@ (-13) \dots
+% \end{codeexample}
+%
+% or
+%
+% \begin{codeexample}
+% \textbackslash T1/erewhon-LF/m/n/9/@/@/10ls (+7) \dots
+% \end{codeexample}
+%
+% An \sample{ls} appended to the font name specification indicates that
+% \packagename{microtype}'s letter~spacing feature is active and changed the tracking by that
+% many thousands on an em as indicated before~\sample{ls}.
+% \end{note}
+%
+%
+% \paragraph{Investigating page-breaks.}\index{page break}
+%
+% Use \code{\cs{tracingpages}=1} or the \hyperref[syn:typoginspect]{typoginspect}~environment
+% to switch on tracing of \TeX's page-break
+% information~\cite[p.~112n]{knuth:1986}.\footnote{See also the discussion of the \TeX~output
+% routines by \propername{Solomon}~\cite{solomon:1990}.}
+%
+% The first time vertical material enters a new page, \TeX{} logs
+%
+% \begingroup\tt
+% \centering
+% \%\% goal height=\meta{text-height}, max depth=\meta{max-depth} \\
+% \par
+% \endgroup
+%
+% \noindent
+% where \meta{text-height} is the total height \TeX{} wants to achieve and~\meta{max-depth} is
+% the maximum depth of the hbox in the last line of the page is allowed to have without
+% considering \meta{text-height} to be exceeded. For example:
+%
+% \begingroup\tt
+% \centering
+% \%\% goal height=598.0, max depth=5.0 \\
+% \par
+% \endgroup
+%
+% For every vertical breakpoint \TeX{} records
+%
+% \begingroup\tt
+% \centering
+% \% t=\meta{total-height} g=\meta{goal-height} b=\meta{badness} p=\meta{penalty} c=\meta{cost}
+% \par
+% \endgroup
+%
+% Here, \meta{total-height} and \meta{goal-height} are the current total height of the page and
+% the current goal height to achieve with respect to this vertical breakpoint.
+%
+% The value of \meta{penalty} and \meta{cost} can be infinite, which would be indicated with an
+% asterisk~\sample{\texttt{*}} instead of a numerical value. The best vertical breakpoint
+% found so far on the current page is indicated by a trailing sharp-sign~\sample{\texttt{\#}}.
+%
+% \begin{example}
+% \let\oldsample=\sample
+% \renewcommand*{\sample}[1]{\oldsample{\texttt{#1}}}
+% \begin{widecodeexample}
+% \% t=351.3 plus 11.0 minus 1.0 g=553.9 b=10000 p=-300 c=100000\#
+% \end{widecodeexample}
+%
+% \begin{enumerate}[noitemsep, notopsep]
+% \item At this vertical breakpoint the total page height~\sample{t} is 351.3\,pt. We have
+% picked up glue with 11\,pt~stretchability and~1\,pt~shrinkability along the way.
+%
+% \item The current goal height~\sample{g} is 553.9\,pt. If the initial goal height was
+% 598\,pt we can deduce that some space for other vertical material was subtracted.
+%
+% \item The badness~\sample{b} of this vertical break is horrendous which is expected for the
+% first lines on a page since breaks so early are rightfully considered infinitely bad.
+%
+% \item The penalty~\sample{p} at this point actually is a bonus.
+%
+% \item As the badness is 10000 the cost for a break is calculated
+% to~100000.\specialsectionendhere
+% \end{enumerate}
+% \end{example}
+%
+%
+% \subsection{Hyphenation}\label{sec:latex-hyphenation}
+% \index{hyphenation}
+%
+% \TeX's and thus \LaTeX's hyphenation algorithm is highly sophisticated, yet the document
+% author sometimes lacks convenient macros to solve seemingly trivial typographic tasks. For
+% example, to hyphenate a compound~word connected by a hyphen.
+%
+% \DescribeMacro{\allowhyphenation}
+% \TeX{} inhibits breaks of the component words by default. The following macro rectifies the
+% problem.
+%
+% \begin{synopsis}
+% \cs{allowhyphenation}
+% \end{synopsis}
+%
+% Macro~\cs{allowhyphenation}\index{hyphenation>re-enable automatic} re-enables automatic
+% hyphenation after \TeX{} has turned it off, for example, in the innocuous case of a
+% hyphenated compound.
+%
+% The admittedly simple rules when \TeX{} auto-hyphenates and when not give rise to so many
+% different, yet interesting cases that we devote \cref{tab:hyphens-and-hyphenations} to them.
+% \begingroup
+% \let\textfrac=\nativetextfraction
+% The seemingly special cases shown there are not that uncommon, e.\,g., consider
+% \singlequotes{\mbox{spin-\textfrac{1}{2}}} which is coded as |\mbox{spin-\textfrac{1}{2}}|.
+% A line break between the text and the fraction would garble the term.
+% \endgroup
+%
+% \begin{usecases}
+% All examples from the bottom of \cref{tab:hyphens-and-hyphenations} on
+% \cpageref{tab:hyphens-and-hyphenations}.~\visualpar
+%
+% Fix line breaks of index-entries in a narrow index:
+%
+% \begin{codeexample}
+% Halbgruppe, Transformations\cs{allowhyphenation}\cs{mbox}\{-\}\cs{,}-\nolig*-\nolig*-
+% \end{codeexample}
+%
+% \noindent
+% The first part, \singlequotes{Transformations} is allowed to be hyphenated, but a break
+% after the hyphen is prohibited as it results in a prowling em-dash at the beginning of the
+% next line.~\visualpar
+%
+% Re-enable hyphenation when a macro decays into a \cs{hbox}:
+%
+% \begin{codeexample}
+% Einselement\cs{allowhyphenation}\cs{rlap}\{,\}\cs{footnote}\{\dots\}
+% \end{codeexample}
+%
+% where \cs{rlap} is equivalent to something like
+% \code{\cs{makebox}[0pt]\{\#1\cs{hss}\}}.~\visualpar
+%
+% Use \cs{allowhyphenation} to turn on hyphenation of the first word of a paragraph as,
+% e.\,g., in a narrow index or a \cs{marginpar}:
+%
+% \begin{codeexample}
+% \cs{marginpar}\{\cs{allowhyphenation} Kontakttransformationen\}
+% \end{codeexample}
+%
+% \noindent
+% A common trick to sweet-talk \TeX{} into hyphenating the first word of a paragraph is to
+% put \cs{hskip0pt} in front of it.
+% \end{usecases}
+%
+% \begin{table}\small
+% \centering
+% \caption[Hyphens and automatic hyphenation]
+% {\TeX{} offers plenty of possibilities to hyphenate a compound.~\visualpar We use
+% the sample \singlequotes{hyphenated-compound} to show various code examples and
+% the results that they produce. The parts are automatically hyphenated like this:
+% \singlequotes{hyphenated}~\(\rightarrow\) \singlequotes{hy-phen-ated} and
+% \singlequotes{compound}~\(\rightarrow\) \singlequotes{com-pound}.}
+% \label{tab:hyphens-and-hyphenations}
+%
+% \begin{nofontexpansion}
+% \newcommand*{\zbox}[1]
+% {\hfuzz=\maxdimen
+% \overfullrule=0pt
+% \raisebox{\normalbaselineskip}{\parbox[t]{0pt}{\hspace{0pt}#1}}}
+%
+% \sbox{\listlabelbox}{hyphenated-compound}
+% \begin{tabularx}{\linewidth}{@{}p{12em}l>{\fussy\RaggedRight}X@{}}
+% \toprule
+% \LaTeX-Code & \makebox[\wd\listlabelbox][l]{Result} & Note \\
+% \midrule
+% \code{hyphenated-compound} &
+% \zbox{hyphenated-compound} &
+% Most frequently used code; the hyphen~\sample{\code{-}} expands to
+% \code{\cs{discretionary}\mbox{\{-\}\{\}\{-\}}} rendering the parts un-breakable \\
+%
+% \code{hyphenated\cs{mbox}\{-\}\%}\newline
+% \code{compound} &
+% \zbox{hyphenated\mbox{-}compound} &
+% Suppress hyphenation with the \cs{mbox} in the compound \\
+%
+% \code{\cs{mbox}\{hyphenated-\%}\newline
+% \code{compound\}} &
+% \zbox{\mbox{hyphenated-compound}} &
+% Avoid line break and thus hyphenation \\
+%
+% \midrule
+%
+% \code{hyphenated\cs{hyp}}\newline
+% \code{compound} &
+% \zbox{hyphenated\hyp compound} &
+% Macro~\cs{hyp} defined in package
+% \packagename{hyphenat}~\cite{package:hyphenat} \\
+%
+% \addlinespace
+% \midrule
+%
+% \code{hyphenated\%}\newline
+% \cs{allowhyphenation}\code{-\%}\newline
+% \code{compound} &
+% \zbox{hyphenated\allowhyphenation-compound} &
+% Macro~\cs{allowhyphenation} of package~\packagename{typog}; only unblock
+% hyphenation of the first part \\
+%
+% \code{hyphenated-\%}\newline
+% \cs{allowhyphenation}\newline
+% \code{compound} &
+% \zbox{hyphenated-\allowhyphenation compound} &
+% Macro~\cs{allowhyphenation} of package~\packagename{typog}; only unblock
+% hyphenation of the second part \\
+%
+% \code{hyphenated\%}\newline
+% \cs{allowhyphenation}\newline
+% \cs{mbox}\code{\{-\}\%}\newline
+% \code{compound} &
+% \zbox{hyphenated\allowhyphenation\mbox{-}compound} &
+% Macro~\cs{allowhyphenation} of package~\packagename{typog}; hyphenate first
+% part and keep the original hyphen unbreakable \\
+%
+% \code{hyphenated\%}\newline
+% \cs{allowhyphenation}\code{-\%}\newline
+% \cs{allowhyphenation}\newline
+% \code{compound} &
+% \zbox{hyphenated\allowhyphenation-\allowhyphenation compound} &
+% Macro~\cs{allowhyphenation} of package~\packagename{typog}; hyphenate both
+% parts, similar to \cs{hyp} shown above \\
+%
+% \addlinespace
+% \bottomrule
+% \end{tabularx}
+% \end{nofontexpansion}
+% \end{table}
+%
+% \noindent
+% Whenever using \cs{-}, the short-hand form of \cs{discretionary\{-\}\{\}\{\}}, authors
+% writing in a foreign language should reconsider whether it really beats \cs{hyphenation} or
+% \cs{babelhyphenation}\footnote{\cs{babelhyphenation} is the multi-lingual extension of \TeX's
+% \cs{hyphenation} and it is defined in package~\packagename{babel}~\cite{package:babel}}. in
+% the particular situation. However, sometimes \cs{-} actually \emph{is} the way to go.
+%
+% Let us assume we mark up proper names with
+%
+% \begin{codeexample}
+% \cs{DeclareRobustCommand}*\= \{\cs{propername}\}[1] \\
+% \> \{\cs{mbox}\{\cs{textsc}\{\#1\}\}\}
+% \end{codeexample}
+%
+% \noindent
+% and we want to have hyphenatable \foreignphrase{\doublequotes{\propername{Abel}sche Gruppe}}
+% or \foreignphrase{\doublequotes{\propername{Euklid}ischer Vektorraum}} without dropping the
+% markup. To that end we define commands that insert a hyphenation point at the right place:
+%
+% \begin{codeexample}
+% \cs{newcommand*}\= \{\cs{abelsche}\} \\
+% \> \{\cs{propername}\{Abel\}\cs{-}sche\} \\
+% \cs{newcommand*}\> \{\cs{euklidischer}\} \\
+% \> \{\cs{propername}\{Euklid\}i\cs{-}scher\}
+% \end{codeexample}
+%
+% \noindent
+% which are impossible to encode with \cs{hyphenation} or~\cs{babelhyphenation} as these expect
+% only letters and dashes as their arguments with spaces separating the words.
+%
+% \begin{tip}[Typewriter Fonts]
+% Sometimes it is desired to get a hyphenatable typewriter font. \LaTeX{} suppresses any
+% hyphenation for fonts in \cs{ttfamily} by un-defining their \cs{hyphenchar}s. If these are
+% reassigned, the usual hyphenation occurs again.
+%
+% So, a fictitious macro `\cs{code}' to typeset short pieces of code could look like this:
+%
+% \begin{codeexample}
+% \cs{newcommand*}\= \{\cs{code}\}[1] \\
+% \> \{\{\= \cs{ttfamily} \\
+% \> \> \cs{hyphenchar}\cs{font}=`\cs{-}\cs{relax} \#1\}\}\specialsectionendhere
+% \end{codeexample}
+% \end{tip}
+%
+% \DescribeMacro{\breakpoint}
+% \DescribeMacro{\breakpoint*}
+% The empty discretionary construct~\cite[p.~95]{knuth:1986}, \cs{discretionary\{\}\{\}\{\}},
+% is so helpful that it deserves its own macro --~with a descriptive name.
+%
+% \begin{synopsis}
+% \cs{breakpoint} \\
+% \cs{breakpoint*}
+% \end{synopsis}
+%
+% The starred form inserts an empty discretionary,\index{hyphenation>empty discretionary} which
+% disables automatic hyphenation. The unstarred form inserts an empty discretionary and
+% immediately re-enables automatic hyphenation.
+%
+% The difference between \cs{breakpoint} and the \LaTeX{} macro~\cs{allowbreak} is not only
+% that the former has a starred form, but the penalty associated with \cs{breakpoint} is the
+% current\footnote{At this point in the document
+% \code{\string\exhyphenpenalty=\the\exhyphenpenalty} holds.} \cs{exhyphenpenalty}, whereas
+% \cs{allowbreak} statically assigns a zero~penalty.
+%
+% \begin{usecase}
+% Prefixes that end in a hyphen inside of a pair of parenthesis:
+%
+% \begin{codeexample}
+% \cs{mbox}\{(pre-)\}\cs{breakpoint*} \cs{propername}\{Hilbert\} space\specialsectionendhere
+% \end{codeexample}
+% \end{usecase}
+%
+% \DescribeEnv{hyphenmin}
+% \sinceversion{Since v0.3}
+% Set the values of \cs{lefthyphenmin} and \cs{righthyphenmin} confined to an environment.
+%
+% \begin{synopsis}\label{syn:hyphenmin}
+% \cs{begin}|{hyphenmin}|\oarg{left-hyphen-minimum}\marg{hyphen-minimum} \\
+% \hspace*{1em}\dots \\
+% \cs{end}|{hyphenmin}|
+% \end{synopsis}
+%
+% Without optional argument |hyphenmin| sets both \cs{lefthyphenmin} and \cs{righthyphenmin} to
+% \meta{hyphen-minimum}. When called with an optional argument it sets \cs{lefthyphenmin} to
+% \meta{left-hyphen-minimum} and \cs{righthyphenmin} to \meta{hyphen-minimum}.\footnote{The
+% current values for \cs{lefthyphenmin} and \cs{righthyphenmin} in this document
+% are~\the\lefthyphenmin{} and~\the\righthyphenmin, respectively.}
+%
+% \begin{usecase}
+% If the hyphen minimums were \emph{increased} e.\,g.~in the preamble: Reduce the hyphen
+% minimum in the index or other multi-column environments with narrow lines to regain
+% hyphenation possibilities.~\visualpar Use a large \meta{hyphen-minimum} to disable
+% hyphenation.
+% \end{usecase}
+%
+%
+% \subsection{Disable\kernedslash Break Ligatures}\label{sec:break-ligatures}
+% \index{ligature}
+%
+% \DescribeMacro{\nolig*}
+% Break a ligature without introducing a hyphenation opportunity.
+%
+% \begin{synopsis}\label{syn:nolig-star}
+% \cs{nolig*}\oarg{kerning}
+% \end{synopsis}
+%
+% Inserting \cs{nolig*} disables a ligature at the given point by a kern. Set the size of the
+% kern\index{kerning>ligature} with \hyperref[item:ligaturekern]{|ligaturekern|} or override
+% this value with \meta{kerning} as thousandths of the current font's~em.
+%
+% \begin{usecases}
+% \cs{nolig*} can be useful in headings, where additional hyphenation points are
+% unwelcome.~\visualpar In fonts with an overly rich set of ligatures \cs{nolig*} offers a
+% straightforward means to suppress unwanted ligatures at non-hyphenatable
+% positions.~\visualpar Rectify the appearance of a pseudo ligature, i.\,e., two adjacent
+% characters that look like a ligature, but actually are not.
+% \end{usecases}
+%
+% \noindent
+% \DescribeMacro{\nolig}
+% Break a ligature and introduce a hyphenation opportunity.
+%
+% \begin{synopsis}\label{syn:nolig}
+% \cs{nolig}\oarg{kerning}
+% \end{synopsis}
+%
+% Inserting \cs{nolig} disables a ligature at the given point as \cs{nolig*} does \emph{and}
+% introduces a hyphenation opportunity with
+% penalty~\hyperref[item:breakpenalty]{|breakpenalty|}.
+%
+% \begin{important}[\packagename{hyperref} bookmarks]\index{hyperref=\packagename{hyperref} (package)}
+% If a \cs{nolig} --~whether starred or un-starred~-- occurs in an argument that is processed
+% with package~\packagename{hyperref} for inclusion into the document's
+% \acronym{PDF}-bookmarks\index{PDF=\acronym{PDF}}\index{bookmark} an additional argument is
+% necessary to parse the macro. This argument either is \cs{relax} or~the empty
+% group~(\code{\{\}}).
+%
+% \begin{synopsis}
+% \begin{tabbing}
+% \cs{nolig*}\oarg{kerning}\cs{relax}\qquad\= \cs{nolig}\oarg{kerning}\cs{relax} \\
+% \cs{nolig*}\oarg{kerning}\code{\{\}}\> \cs{nolig}\oarg{kerning}\code{\{\}}
+% \end{tabbing}
+% \end{synopsis}
+%
+% The prototypical places where this processing-for-\acronym{PDF}-bookmarks happens are the
+% sectioning macros, e.\,g., \cs{chapter}, \cs{section}, \cs{subsection},~etc.
+%
+% \LaTeX{} will bail out with an error if the extra argument is not passed to \cs{nolig} in
+% these situations.
+%
+% Alternatively use \cs{texorpdfstring}~\cite[Sec.~4.1.2, p.~22]{package:hyperref}.
+% \end{important}
+%
+% \begin{usecases}
+% \cs{nolig} can be used with just about any ligature that needs to be split into its
+% parts.~\visualpar It also has proven beneficial in separating pairs of characters that are
+% kerned to tightly (e.\,g.~the \sample{ij}, as in bi\itcorr{2}jection, which is particularly
+% distractive here, for it occurs at the boundary of two syllables).
+% \end{usecases}
+%
+%
+% \subsection{Manual Italic Correction}\label{sec:manual-italic-correction}\label{italic correction}
+%
+% \DescribeMacro{\itcorr}
+% \DescribeMacro{\itcorr*}
+% The italic correction offered by \TeX{} or \LaTeX{} sometimes needs a helping hand.
+%
+% \begin{synopsis}\label{syn:itcorr}
+% \cs{itcorr}\marg{strength} \\
+% \cs{itcorr*}\marg{strength}
+% \end{synopsis}
+%
+% In text mode macro~\cs{itcorr} inserts a kern whose width is proportional to \cs{fontdim1},
+% which is the font's italic correction. If \cs{fontdim1} happens to be zero (e.\,g.~for an
+% upright font), \cs{itcorr} uses the value set with
+% \hyperref[item:textitalicscorrection]{\code{textitalicscorrection}} instead of \cs{fontdim1}.
+% The starred version always uses
+% \hyperref[item:textitalicscorrection]{\code{textitalicscorrection}}. In math mode
+% macro~\cs{itcorr} uses the value set with
+% \hyperref[item:mathitalicscorrection]{\code{mathitalicscorrection}}\footnote{Separate
+% adjustments may be desirable if the math font's italics have markedly different slants.} in
+% both the starred and the unstarred form.
+%
+% Typical slant angles of serif italics fonts range from 8\textdegree{} to~18\textdegree{} and
+% thus values for |textitalicscorrection| from .14 to~.32. Note: \meta{strength} can be
+% negative and fractional \meta{strength}s are allowed.
+%
+% \begin{usecases}
+% Stronger or weaker correction than |\/|.~\visualpar Correct a non-slanted or non-italicized
+% font.~\visualpar Negative correction at the left-hand side\footnote{Groff has the machinery
+% for left-italic-correction. Its font-metrics files support per glyph
+% left-italic-correction values and users can access them conveniently via~\sample*{\cs{,}}.}
+% of italics, i.\,e., compensate \doublequotes{shift-to-the-right effect} of
+% italics.~\visualpar Positive correction at the left-hand side of italics, e.\,g., an
+% opening parenthesis or square bracket followed by an
+% italic~\sample{\itshape\itcorr{8}f\itcorr{7}} (before:~8, after:~7) or
+% \sample{\itshape\itcorr{4}y\itcorr{1}} (before:~4, after:~1) reaching far to the left below
+% the baseline.
+% \end{usecases}
+%
+%
+% \paragraph{The \meta{strength} parameter explained.}
+%
+% \TeX{} records the slant angle~\(\alpha\) of a font in \cs{fontdim1} as \(\mbox{1\,pt} \times
+% \sin\alpha\). Rephrased the formula means: \emph{How much horizontal space is required for a
+% letter slanted with ~\(\alpha\) that is 1\,pt high?} So, \cs{itcorr}\marg{strength}
+% calculates
+% \begin{displaymath}
+% \meta{strength} \times \mbox{1\,pt} \times \sin\alpha.
+% \end{displaymath}
+%
+% A well-chosen \meta{strength} should be the absolute minimum value which avoids that the
+% glyphs typeset in italics collide with other --~usually non-italics~-- letters or symbols
+% unless this disturbs the consistency of the overall tracking.
+%
+% Correction of the right-hand side and \mbox{\(\alpha > 0\)}: A reasonable first guess of
+% \meta{strength} is the highest point where the rightmost part of the letter would touch a
+% rule angled at \(\alpha\) with respect to the baseline. The correction of the left-hand side
+% and \mbox{\(\alpha > 0\)} considers the lowest \singlequotes{touching} point below the
+% baseline on the left-hand side of the letter. Negative values of \(\alpha\) exchange the
+% reference points.
+%
+% \iffalse
+%<*slantangle>
+prologues := 3;
+truecorners := 1;
+linecap := butt;
+
+input TEX;
+TEXPRE("%&latex" & char(10) & "\documentclass{article}\begin{document}");
+TEXPOST("\end{document}");
+
+string roman_font;
+roman_font := "pplr8r"; % URW Palladio L - Roman
+
+string italics_font;
+italics_font := "pplri8r"; % URW Palladio L - Italic
+
+u := 360;
+
+font_scale := 10;
+
+pair loc[];
+loc[1] := .2[origin, (u, 0)];
+loc[2] := .5[origin, (u, 0)];
+loc[3] := .8[origin, (u, 0)];
+
+picture letter_H;
+letter_H := thelabel.top("H" infont italics_font scaled font_scale, loc[1]);
+
+picture letter_L;
+letter_L := thelabel.top("L" infont italics_font scaled font_scale, loc[2]);
+
+picture letter_a;
+letter_a := thelabel.top("a" infont italics_font scaled font_scale, loc[3]);
+
+path slant_angle;
+slant_angle := lrcorner letter_H + (14, 0) -- lrcorner letter_H + (-6, 0) -- urcorner letter_H + (3.5, 0);
+
+pair base_point;
+base_point := (xpart point 2 of slant_angle, ypart point 0 of slant_angle) ;
+
+pair angle_label;
+angle_label := point 2 of slant_angle + (0, -12);
+
+
+beginfig(1);
+ draw letter_H;
+ draw slant_angle;
+ draw point 2 of slant_angle -- base_point dashed evenly;
+ draw point 1 of slant_angle -- base_point withpen pencircle scaled 2pt;
+
+ label.rt(TEX("$\alpha$"), angle_label);
+
+ draw letter_L;
+ draw slant_angle shifted (xpart lrcorner letter_L - xpart lrcorner letter_H + 2, 0);
+
+ draw letter_a;
+ draw slant_angle shifted (xpart lrcorner letter_a - xpart lrcorner letter_H - 3, 0);
+endfig;
+end
+%</slantangle>
+% \fi
+%
+% \Cref{fig:slant-angle} shows how \meta{strength} and \(\alpha\) are related. Moreover, it
+% demonstrates how intricate italics correction is.
+%
+% \begin{figure}
+% \centering
+% \includegraphics{slant-angle-1.mps}
+% \caption[Some letters of an italics font.]
+% {Some letters of an italics font. We use the capital~\sample{H} to measure the
+% angle~\(\alpha\) between the plumb-line (drawn dashed) and a tangent to the
+% rightmost parts of the glyph. The length of the plumb-line is proportional to
+% \meta{strength} and the short, thick part of the baseline symbolizes the resulting
+% italics correction.~\visualpar The middle example, the capital~\sample{L}, shares
+% \(\alpha\) with \sample{H} but obviously needs a far smaller \meta{strength} or
+% even no correction at all.~\visualpar The \sample{a} at the right-hand side is an
+% example of why \TeX{} allows to assign an italic~correction to each individual
+% character of a font. Not only features the lowercase~\sample{a} a
+% larger~\(\alpha\) --~despite being a member of the same font~-- but its serif adds
+% as much to the width as the slanted stem.\label{fig:slant-angle}}
+% \vspace{-3\baselineskip}
+% \llap{\parbox{\marginparwidth}
+% {\marginnoteformat
+% We center the last lines of each figure and table caption with the help of
+% \hyperref[syn:lastlinecenteredpar]{\code{lastlinecenteredpar}}.}
+% \hspace*{\marginparsep}}
+% \end{figure}
+%
+%
+% \subsection{Apply Extra Kerning}\label{sec:extra-kerning}
+% \index{kerning>extra}
+%
+% Package \packagename{typog} supplies two sets of macros to kern some of the punctuation
+% symbols. One is for forward slashes the other, more extensive one, for hyphens.
+%
+%
+% \subsubsection{Slash}\label{sec:slash-with-kern}
+% \index{kerning>forward slash}
+%
+% \DescribeMacro{\kernedslash}
+% \DescribeMacro{\kernedslash*}
+% Macro~\cs{kernedslash} expands to a forward slash~(\sample{\itcorr{3}\char`/}) with some
+% extra space around it.
+%
+% \begin{synopsis}\label{syn:kernedslash}
+% \cs{kernedslash} \\
+% \cs{kernedslash*}
+% \end{synopsis}
+%
+% The starred form is unbreakable, the non-starred version introduces a break point with
+% penalty~\hyperref[item:breakpenalty]{|breakpenalty|} after the slash. Configure the kerning
+% around the slash with~\hyperref[item:slashkern]{|slashkern|}.
+%
+% If the word following the slash should not be hyphenated append \cs{nobreak} after
+% \cs{kernedslash*}.
+%
+% \begin{usecases}
+% \cs{kernedslash} improves the appearance of pairs of years typeset in lining numerals:
+% \meta{year\textsubscript{1}}/\meta{year\textsubscript{2}}.~\visualpar The macro has proven
+% helpful in many cases where the right hand side of the slash starts with a capital as, for
+% example, \meta{city}/\meta{state-code} (\acronym{US}-specific) or
+% \meta{anything}/\meta{noun} (any language that capitalizes \meta{noun}).
+% \end{usecases}
+%
+%
+% \subsubsection{Hyphen}\label{sec:hyphen-with-kern}
+% \index{kerning>hyphen}
+%
+% \DescribeMacro{\kernedhyphen}
+% \DescribeMacro{\kernedhyphen*}
+% Macros \cs{kernedhyphen*} and \cs{kernedhyphen} expand to a hyphen~(\sample{-}) with given
+% kerning to its left and to its right.
+%
+% \begin{synopsis}\label{syn:kernedhyphen}
+% \cs{kernedhyphen}\oarg{raise}\marg{left-kerning}\marg{right-kerning} \\
+% \cs{kernedhyphen*}\oarg{raise}\marg{left-kerning}\marg{right-kerning}
+% \end{synopsis}
+%
+% Typeset an unbreakable hyphen with \cs{kernedhyphen*} or a breakable hyphen (like \cs{hyp} of
+% package \packagename{hyphenat}~\cite{package:hyphenat}) with \cs{kernedhyphen} and apply some
+% kerning to left and to the right of it. The values \meta{left-kerning} and
+% \meta{right-kerning} are multiplied with one thousandth of the current font's~em to get the
+% size of the kern.
+%
+% The optional argument~\meta{raise}, also given in \nativetextfraction{1}{1000}\,em, allows to
+% adjust the height of the hyphen similar to the macros described in
+% \cref{sec:raise-characters}. In text mode the special argument~\sample{|*|} for \meta{raise}
+% transfers the current value of \hyperref[item:raisecapitalhyphen]{\code{raisecapitalhyphen}}.
+% The default for \meta{raise} is zero.
+%
+% \DescribeMacro{\leftkernedhyphen}
+% \DescribeMacro{\leftkernedhyphen*}
+% \DescribeMacro{\rightkernedhyphen}
+% \DescribeMacro{\rightkernedhyphen*}
+% We also define specialized versions for kerning on the left-hand side or the right-hand side
+% only. These macros work like their two-argument counterparts and set the appropriate other
+% kerning to zero.
+%
+% \begin{synopsis}\label{syn:leftkernedhyphen}\label{syn:rightkernedhyphen}
+% \cs{leftkernedhyphen}\oarg{raise}\marg{left-kerning} \\
+% \cs{leftkernedhyphen*}\oarg{raise}\marg{left-kerning} \\
+% \cs{rightkernedhyphen}\oarg{raise}\marg{right-kerning} \\
+% \cs{rightkernedhyphen*}\oarg{raise}\marg{right-kerning}
+% \end{synopsis}
+%
+% \begin{usecases}
+% Composites in the form \meta{math}-\meta{noun} in languages where nouns are
+% capitalized.~\visualpar Composites where one or both sides of the hyphen are typeset in
+% different fonts, like, \meta{small-caps}-\meta{roman}.
+% \end{usecases}
+%
+%
+% \subsection{Raise Selected Characters}\label{sec:raise-characters}
+% \index{raised character}
+%
+% Usually all hyphens and dashes of a font are designed to join lowercase letters. This holds
+% also true for most of our \cs{labelitem}\meta{N} markers, bullets, stars, and even fancy
+% dingbats. If these hyphens and dashes connect uppercase letters (or lining numerals) they
+% sometimes appear to low; they disrespect the glyphs' symmetry axis. A similar situation
+% arises if |itemize|~list markers precede an uppercase letter, a lining numeral, or a big
+% mathematical operator.
+%
+% We introduce a set of macros for the most common cases that allow typsetting these characters
+% at a user definable, adjusted height above the baseline. Users can base their own
+% definitions of raised characters on their associated dimensions.\footnote{Also compare with
+% Ex.~12 in Ref.~\citenum{wermuth:2023} for an attempt to automate vertical alignment.}
+%
+% \begin{caution}
+% The height adjustment disables a font's built-in kerning.
+% \end{caution}
+%
+% \noindent
+% General note for all raised hyphen-like macros: Prefer the starred version if applied in
+% front of any punctuation.
+%
+%
+% \subsubsection{Capital Hyphen}\label{sec:capital-hyphen}
+% \index{raised character>hyphen}
+%
+% \DescribeMacro{\capitalhyphen}
+% \DescribeMacro{\capitalhyphen*}
+% In many fonts the height of the hyphen character~\sample{-} above the baseline is optimized
+% for lowercase letters. In languages that capitalize their nouns as, e.\,g., German, this may
+% be too low for compounds involving capitals.
+%
+% \begin{synopsis}\label{syn:capitalhyphen}
+% \cs{capitalhyphen} \\
+% \cs{capitalhyphen*}
+% \end{synopsis}
+%
+% The unstarred version introduces a hyphenation opportunity right after the hyphen character
+% (with penalty~\hyperref[item:breakpenalty]{|breakpenalty|}) whereas the starred version does
+% not. The actual amount the hyphen gets raised in \cs{capitalhyphen} is determined by
+% \hyperref[item:raisecapitalhyphen]{|raisecapitalhyphen|}.
+%
+% \begin{usecases}
+% In languages that capitalize their nouns, the typical use-case is between an
+% \meta{ab\-bre\-vi\-a\-tion} and a \meta{noun} when \meta{ab\-bre\-vi\-a\-tion} is a string
+% of uppercase letters. The same holds true for a connection of an uppercase variable in
+% mathematical mode and a \meta{noun} starting with a capital letter.~\visualpar Abbreviated
+% compound first names (e.\,g., A.\capitalhyphen* M.~Legendre) can be joined with the starred
+% version.~\visualpar Also, the starred form is suited for \acronym{ISO~8601}-formatted dates
+% if they are composed with lining-style numerals.
+% \end{usecases}
+%
+%
+% \subsubsection{Capital Dash}\label{sec:capital-dash}
+% \index{raised character>en-dash}
+%
+% \DescribeMacro{\capitalendash}
+% \DescribeMacro{\capitalendash*}
+% \DescribeMacro{\capitaldash}
+% \DescribeMacro{\capitaldash*}
+% The situation of the en-dash~\sample{--} is almost identical to the one of the hyphen
+% character~\sample{-} described in the previous section or the number dash to be introduced in
+% the next section.
+%
+% \begin{synopsis}\label{syn:capitalendash}\label{syn:capitaldash}
+% \begin{tabbing}
+% \cs{capitalendash}\qquad\= \cs{capitaldash} (alias) \\
+% \cs{capitalendash*} \> \cs{capitaldash*} (alias)
+% \end{tabbing}
+% \end{synopsis}
+%
+% The unstarred version introduces a hyphenation opportunity right after the dash (with
+% penalty~\hyperref[item:breakpenalty]{|breakpenalty|}) whereas the starred version does not.
+% The actual amount the hyphen gets raised in \cs{capitaldash} is determined by
+% \hyperref[item:raisecapitalhyphen]{|raisecapitaldash|}.
+%
+% \begin{usecases}
+% Letter ranges as used in the title of an index.~\visualpar Any mixed letter-digit ranges
+% (of capital letters and lining-style numerals) as in e.\,g., Sec.~B\capitaldash* 2.
+% \end{usecases}
+%
+% \noindent
+% \DescribeMacro{\capitalemdash}
+% \DescribeMacro{\capitalemdash*}
+% For completeness we also introduce a raised em-dash~\sample{---}. It behaves just like its
+% en-dash sibling.
+%
+% \begin{synopsis}\label{syn:capitalemdash}
+% \cs{capitalemdash} \\
+% \cs{capitalemdash*}
+% \end{synopsis}
+%
+% \begin{usecases}
+% Item symbols in \code{itemized} lists if the item text starts with an uppercase
+% letter.~\visualpar Theorem headings, like, e.\,g., \mbox{Definition 6.2 \capitalemdash{}
+% \textsc{Lie} Algebra}.
+% \end{usecases}
+%
+%
+% \subsubsection{Number Dash (Figure Dash)}\label{sec:number-dash}
+% \index{raised character>number dash}
+%
+% \DescribeMacro{\figuredash}
+% \DescribeMacro{\figuredash*}
+% The en-dash often gets used as separator for numerical ranges. In most fonts it has the
+% correct height above baseline for oldstyle numerals,
+% e.\,g.~\oldstylenums{12}--\oldstylenums{34}--\oldstylenums{56}--\oldstylenums{78}, but with
+% lining numerals --~depending on the font~-- it may look like it suffers from
+% \doublequotes{broken suspenders}:
+% 12\textendash34\textendash56\textendash78.\marginnote{\cs{figuredash} yields
+% 12\figuredash34\figuredash56\figuredash78 for sans-serif and {\rm
+% 12\figuredash34\figuredash56\figuredash78} for the roman typeface.} The situation is similar
+% to \cs{capitaldash} and \cs{capitalhyphen} discussed in
+% \cref{sec:capital-hyphen,sec:capital-dash}.
+%
+% \begin{synopsis}\label{syn:figuredash}
+% \cs{figuredash} \\
+% \cs{figuredash*}
+% \end{synopsis}
+%
+% The unstarred version introduces a hyphenation opportunity right after the en-dash with
+% penalty~\hyperref[item:breakpenalty]{|breakpenalty|} whereas the starred version does not.
+% The actual amount the en-dash gets raised in \cs{figuredash} is determined by
+% \hyperref[item:raisefiguredash]{|raisefiguredash|}.
+%
+% Values of .05em to .1em are typical for fonts that need this kind of correction and~.1em is a
+% good starting point. \Cref{tab:raisefiguredash} summarizes some findings.
+%
+% \begin{table}
+% \centering
+% \caption[Suggested raise amounts for \cs{figuredash}]%
+% {Suggested values for raising the en-dash between lining numerals of some selected
+% fonts.}
+% \label{tab:raisefiguredash}
+%
+% \begin{tabfigures}
+% \begin{tabular}{@{}l>{\RaggedRight}p{20em}@{}}
+% \toprule
+% Raise & Font Name \\
+% em & \\
+% \midrule
+% 0 & Alegreya\index{font>Alegreya}, Arvo\index{font>Arvo},
+% Bitter\index{font>Bitter}, Clara\index{font>Clara},
+% \acronym{EB}~Garamond\index{font>EB Garamond=\acronym{EB} Garamond},
+% Gentium\index{font>Gentium},
+% Ibarra Real Nova\index{font>Ibarra Real Nova},
+% \acronym{Inria}~Serif\index{font>Inria Serif=\acronym{Inria} Serif},
+% Libertine\index{font>Libertine}, Libertinus\index{font>Libertinus},
+% Merriweather\index{font>Merriweather},
+% \acronym{PT}~Serif\index{font>PT Serif=\acronym{PT} Serif},
+% Roboto Slab\index{font>Roboto Slab}, Spectral\index{font>Spectral},
+% \acronym{STIX}\index{font>STIX=\acronym{STIX}}, and many more \\
+% .05 & fbb\index{font>fbb}, Source Serif Pro\index{font>Source Serif Pro} \\
+% .0667 & Libre Baskerville\index{font>Libre Baskerville},
+% Crimson Pro\index{font>Crimson Pro},
+% Erewhon\index{font>Erewhon}, Droid Serif\index{font>Droid Serif} \\
+% .1 & \acronym{GFS}~Artemisia\index{font>GFS Artemisia=\acronym{GFS} Artemisia},
+% Libre Caslon\index{font>Libre Caslon},
+% Coelacanth\index{font>Coelacanth}, Crimson Pro\index{font>Crimson Pro},
+% Crimson Text\index{font>Crimson Text},
+% \TeX{} Gyre~Pagella\index{font>TeX Gyre Pagella=\TeX{} Gyre Pagella},
+% Quattrocento\index{font>},
+% \acronym{TX}~Fonts\index{font>TX Fonts=\acronym{TX} Fonts},
+% \acronym{ADF}~Venturis\index{font>ADF Venturis=\acronym{ADF} Venturis},
+% and many more \\
+% \bottomrule
+% \end{tabular}
+% \end{tabfigures}
+% \end{table}
+%
+% Other macros may be redefined with \cs{figuredash} for a consistent appearance of the copy,
+% like, for example, \cs{citedash} (package~\packagename{cite}~\cite{package:cite}), or
+% \cs{crefrangeconjunction} (package~\packagename{cleveref}~\cite{package:cleveref}).
+%
+% \begin{usecase}
+% The key customers of \cs{figuredash} are the |PAGES|~entries of bibliography
+% databases.~\visualpar In an index generated with \command{makeindex} the range
+% delimiter~\code{delim\_r} is a candidate for \cs{figuredash*}.
+% \end{usecase}
+%
+%
+% \subsubsection[Multiplication Sign]%
+% {Multiplication Sign -- Times~\sample{\texttimes}}\label{sec:mult-sign}
+% \index{raised character>multiplication sign}
+%
+% \DescribeMacro{\capitaltimes}
+% The \cs{capitaltimes}~macro is a variation of the
+% \hyperref[syn:capitalhyphen]{\cs{capitalhyphen}}~theme.
+%
+% \begin{synopsis}\label{syn:capitaltimes}
+% \cs{capitaltimes}
+% \end{synopsis}
+%
+% In text mode it expands to an appropriately raised \cs{texttimes}, and in math~mode to a
+% raised \cs{times} binary~operator, where
+% \hyperref[item:raisecapitaltimes]{|raisecapitaltimes|} determines the amount of
+% upward-shifting applied; it never inserts any break points.
+%
+% \begin{usecase}
+% Prime use are two- or higher-dimensional shape specifications with lining numerals or
+% uppercase letters in mathematical mode as, for example, matrix or tensor sizes.
+% \end{usecase}
+%
+%
+% \subsubsection{Guillemets}\label{sec:guillemets}
+% \index{raised character>guillemets}
+%
+% Another possible typographic problem this package addresses is that both sets --~single and
+% double quotes~-- of guillemets may suffer from a too small distance to the baseline.
+%
+% For the implementation \packagename{typog} relies on the T1\footnote{Font
+% encoding~T1\index{font>encoding} can be forced via \cs{usepackage}|[T1]\{fontenc\}| in the
+% document preamble.}~font encoding not on package~\packagename{babel}.
+%
+%
+% \paragraph{Lowercase Versions.}
+% \DescribeMacro{\singleguillemetleft}
+% \DescribeMacro{\singleguillemetright}
+% \DescribeMacro{\doubleguillemetleft}
+% \DescribeMacro{\doubleguillemetright}
+% \begin{synopsis}\label{syn:singleguillemetleft}\label{syn:doubleguillemetleft}
+% \begin{tabbing}
+% \cs{singleguillemetleft}\qquad\= \cs{singleguillemetright} \\
+% \cs{doubleguillemetleft}\> \cs{doubleguillemetright}
+% \end{tabbing}
+% \end{synopsis}
+%
+% \noindent
+% For consistency and easy accessibility we define height-adjusted left and right single
+% guillemets as \cs{singleguillemetleft} and \cs{singleguillemetright}; double guillemets are
+% available with \cs{doubleguillemetleft} and \cs{doubleguillemetright}. Their heights above
+% the baseline are collectively adjusted with
+% \hyperref[item:raiseguillemets]{|raiseguillemets|}.
+%
+%
+% \paragraph{Uppercase Versions.}
+%
+% \DescribeMacro{\Singleguillemetleft}
+% \DescribeMacro{\Singleguillemetright}
+% \DescribeMacro{\Doubleguillemetleft}
+% \DescribeMacro{\Doubleguillemetright}
+% \begin{synopsis}\label{syn:Singleguillemetleft}\label{syn:Doubleguillemetleft}
+% \begin{tabbing}
+% \cs{Singleguillemetleft}\qquad\= \cs{Singleguillemetright} \\
+% \cs{Doubleguillemetleft}\> \cs{Doubleguillemetright}
+% \end{tabbing}
+% \end{synopsis}
+%
+% \noindent
+% The companion set of single, double, left, and right quotes corrected for uppercase letters
+% or lining numerals is \cs{Singleguillemetleft} and \cs{Singleguillemetright} and
+% \cs{Doubleguillemetleft} and \cs{doubleguillemetright}. Mnemonic: These macros start with an
+% uppercase letter. Their height above the baseline is adjusted with
+% \hyperref[item:raisecapitalguillemets]{|raisecapitalguillemets|}. Values of .025em to .075em
+% are typical for fonts that need this kind of correction. \Cref{tab:raiseguillemets}
+% summarizes some findings.
+%
+% \begin{table}
+% \centering
+% \caption[Suggested raise amounts for guillemets]%
+% {Suggested values for raising guillemets of some selected fonts.}
+% \label{tab:raiseguillemets}
+%
+% \begin{tabfigures}
+% \begin{tabular}{@{}cc>{\RaggedRight}p{20em}@{}}
+% \toprule
+% \multicolumn{2}{@{}c}{Raise} & Font Name \\
+% Lowercase & Uppercase & \\
+% em & em & \\
+% \midrule
+% 0 & .05\hphantom{00} &
+% \acronym{EB}~Garamond\index{font>EB Garamond=\acronym{EB} Garamond},
+% Libertinus\index{font>Libertinus},
+% Merriweather\index{font>Merriweather}, and many more \\
+% .025 & .05\hphantom{00} & Gentium\index{font>Gentium} \\
+% .04\hphantom{0} & .0667 &
+% \acronym{ADF}~Baskervald\index{font>ADF Baskervald=\acronym{ADF} Baskervald} \\
+% .05\hphantom{0} & .0625 &
+% \acronym{GFS}~Artemisia\index{font>GFS Artemisia=\acronym{GFS} Artemisia},
+% \acronym{GFS}~Didot\index{font>GFS Didot=\acronym{GFS} Didot} \\
+% \bottomrule
+% \end{tabular}
+% \end{tabfigures}
+% \end{table}
+%
+% \begin{tip}
+% Define shorthand macros that simplify the application of guillemets, like, e.\,g.,
+%
+% \begin{codeexample}
+% \cs{newcommand*}\= \{\= \cs{singlequotes}\}[1] \\
+% \> \{\cs{singleguillemetright} \#1\% \\
+% \> \> \cs{singleguillemetleft}\} \\
+% \cs{let}\cs{sq}=\cs{singlequotes}
+% \end{codeexample}
+%
+% and similar definitions for \cs{Singlequotes}, \cs{doublequotes}, and~\cs{Doublequotes}.
+%
+% Users working according to the French typesetting conventions will want to add extra
+% spacing between the guillemets and the macro argument already in these macros.
+% \end{tip}
+%
+% \noindent
+% Whether the guillemets must be height-adjusted for lowercase letters depends on the font.
+% Careful judgment at various magnifications with a variety of samples is necessary.
+%
+%
+% \paragraph{Interaction with package~\packagename{csquotes}.}
+% \index{csquotes=\packagename{csquotes} (package)}
+%
+% The users of package~\packagename{csquotes}
+% can hook up the guillemets as defined by \packagename{typog}
+% with \cs{DeclareQuoteStyle}:
+%
+% \begin{codeexample}
+% 12\=\kill
+% \cs{DeclareQuoteStyle}\{typog-guillemets\} \\
+% \> \{\cs{doubleguillemetright}\}\%\qquad\= opening outer mark \\
+% \> \{\cs{doubleguillemetleft}\}\% \> closing outer mark \\
+% \> \{\cs{singleguillemetright}\}\% \> opening inner mark \\
+% \> \{\cs{singleguillemetleft}\}\% \> closing inner mark
+% \end{codeexample}
+%
+% \noindent
+% As always, the influence of package~\packagename{babel} on \packagename{csquotes} has to be
+% put into consideration. See Sec.~8 of the \packagename{csquotes}~manual for a description of
+% its configuration possibilities.
+%
+% \begin{usecase}
+% All-capital words as for example acronyms put in guillemets that are raised somewhat almost
+% always look better, whether using the French typographic convention (guillemets pointing
+% outward plus some extra kerning) or the other way round (guillemets pointing inward).
+% \end{usecase}
+%
+% \begin{futuredirection}
+% A correction in the other direction, i.\,e., lowering certain characters may also be
+% desirable, to visually align them to the surrounding copy. Parentheses and in particular
+% square brackets around all-lowercase text come into mind.
+% \end{futuredirection}
+%
+%
+% \subsection[Align Last Line]
+% {Align Last Line of a Paragraph}\label{sec:align-last-line}
+% \index{paragraph>align last line}
+%
+% The usual algorithms of \LaTeX{} typeset the last line of a paragraph flush with the left
+% margin unless |center|, |raggedleft| or |Centering|, |FlushRight|
+% (package~\packagename{ragged2e}~\cite{package:ragged2e}) are in effect. For an instructive
+% discussion consult Ch.~17, \doublequotes{Paragraph End}, of Ref.~\citenum{eijkhout:2007}.
+% The following environments allow to adjust the last lines of paragraphs in different ways.
+%
+% \DescribeEnv{lastlineraggedleftpar}
+% \DescribeEnv{lastlineflushrightpar}
+% The environment |lastlineraggedleftpar|\index{paragraph>align last line>flush right} adjusts
+% the various skips such that the last lines of the paragraphs gets typeset flush with the
+% right margin.
+%
+% \begin{synopsis}\label{syn:lastlineraggedleftpar}\label{syn:lastlineflushrightpar}
+% \cs{begin}|{lastlineraggedleftpar}| \\
+% \hspace*{1em}\dots \\
+% \cs{end}|{lastlineraggedleftpar}| \\[\smallskipamount]
+% |lastlineflushrightpar|~(alias)
+% \end{synopsis}
+%
+% The name |lastlineflushrightpar| is an alias for~\code{lastlineraggedleftpar}.
+%
+% \DescribeEnv{lastlinecenteredpar}
+% Center\index{paragraph>align last line>centered} the last lines of the paragraphs enclosed by
+% this environment.\footnote{Also compare the approach taken in Ref.~\citenum{wermuth:2018}.}
+%
+% \begin{synopsis}\label{syn:lastlinecenteredpar}
+% \cs{begin}|{lastlinecenteredpar}| \\
+% \hspace*{1em}\dots \\
+% \cs{end}|{lastlinecenteredpar}|
+% \end{synopsis}
+%
+% \begin{usecases}
+% |lastlineflushrightpar|: Narrow, justified parts of the text put flush against the right
+% margin.~\visualpar |lastlinecenteredpar|: Table or figure captions typeset justified as
+% centered boxes.
+% \end{usecases}
+%
+%
+% \needtocspace
+% \subsection[Fill Last Line]
+% {Fill Last Line of a Paragraph}\label{sec:fill-last-line}
+% \index{paragraph>fill last line}
+%
+% The problem of when and how to \singlequotes{fill} the last line of a paragraph is quite
+% intricate. We first define the problem then we proceed to general purpose functions and we
+% close the section with specific environments to control the length of the last line.
+%
+%
+% \subsubsection{Problem Definition}
+%
+% Depending on the value of \cs{parindent}, either zero or nonzero, there may be the desire to
+% control the length of the last line of a paragraph.
+%
+% \iffalse
+%<*crookedparagraphs>
+prologues := 3;
+
+def draw_filled_rectangle(expr lower_left, upper_right, color) =
+ fill lower_left -- (xpart upper_right, ypart lower_left) --
+ upper_right -- (xpart lower_left, ypart upper_right) --
+ cycle
+ withcolor color;
+enddef;
+
+
+u := 100;
+
+em := 10;
+linelength := 2u;
+baselineskip := 1.2em;
+parskip := 3;
+parindent := 2.5em;
+
+cmykcolor line_color;
+line_color := (.08, 0, 0, .18); % cold silver
+
+color customred[];
+customred[1] := (.890, .282, .282);
+customred[2] := (.831, .110, .110);
+customred[3] := (.686, .043, .043);
+customred[4] := (.569, .000, .000);
+customred[5] := (.420, .000, .000);
+
+color margin_color;
+margin_color := customred[2];
+
+
+beginfig(1); % short line -- gap
+ y := 0;
+ draw_filled_rectangle((0, y), (linelength, y + 1em), line_color);
+ y := y - baselineskip;
+ draw_filled_rectangle((0, y), (1.1em, y + 1em), line_color);
+ y := y - baselineskip;
+ draw_filled_rectangle((parindent, y), (linelength, y + 1em), line_color);
+ y := y - baselineskip;
+ draw_filled_rectangle((0, y), (linelength, y + 1em), line_color);
+
+ draw_filled_rectangle((-.667em, 1em), (-.333em, -3baselineskip), margin_color);
+ draw_filled_rectangle((linelength + .333em, 1em), (linelength + .667em, -3baselineskip), margin_color);
+endfig;
+
+
+beginfig(2); % short line -- covered
+ y := 0;
+ draw_filled_rectangle((0, y), (linelength, y + 1em), line_color);
+ y := y - baselineskip;
+ draw_filled_rectangle((0, y), (2parindent, y + 1em), line_color);
+ y := y - baselineskip;
+ draw_filled_rectangle((parindent, y), (linelength, y + 1em), line_color);
+ y := y - baselineskip;
+ draw_filled_rectangle((0, y), (linelength, y + 1em), line_color);
+
+ draw_filled_rectangle((-.667em, 1em), (-.333em, -3baselineskip), margin_color);
+ draw_filled_rectangle((linelength + .333em, 1em), (linelength + .667em, -3baselineskip), margin_color);
+endfig;
+
+
+beginfig(3); % completely filled line -- no clear paragraph break
+ y := 0;
+ draw_filled_rectangle((0, y), (linelength, y + 1em), line_color);
+ y := y - baselineskip;
+ draw_filled_rectangle((0, y), (linelength, y + 1em), line_color);
+ y := y - baselineskip - parskip;
+ draw_filled_rectangle((0, y), (linelength, y + 1em), line_color);
+ y := y - baselineskip;
+ draw_filled_rectangle((0, y), (linelength, y + 1em), line_color);
+
+ draw_filled_rectangle((-.667em, 1em), (-.333em, -3baselineskip - parskip), margin_color);
+ draw_filled_rectangle((linelength + .333em, 1em), (linelength + .667em, -3baselineskip - parskip),
+ margin_color);
+endfig;
+
+
+beginfig(4); % completely filled line -- opened right margin
+ y := 0;
+ draw_filled_rectangle((0, y), (linelength, y + 1em), line_color);
+ y := y - baselineskip;
+ draw_filled_rectangle((0, y), (linelength - parindent, y + 1em), line_color);
+ y := y - baselineskip - parskip;
+ draw_filled_rectangle((0, y), (linelength, y + 1em), line_color);
+ y := y - baselineskip;
+ draw_filled_rectangle((0, y), (linelength, y + 1em), line_color);
+
+ draw_filled_rectangle((-.667em, 1em), (-.333em, -3baselineskip - parskip), margin_color);
+ draw_filled_rectangle((linelength + .333em, 1em), (linelength + .667em, -3baselineskip - parskip),
+ margin_color);
+endfig;
+end
+%</crookedparagraphs>
+% \fi
+%
+% \begin{enumerate}
+% \item\label{item:o1}
+% \(\cs{parindent} > 0\) \cite[O1]{wermuth:2018}
+%
+% \begin{minipage}{\linewidth}
+% If the last line of a paragraph is shorter than the \cs{parindent} of the following
+% paragraph a visual gap tears open.
+%
+% \begin{center}
+% \includegraphics{crooked-paragraphs-1.mps}
+% \end{center}
+% \end{minipage}
+%
+% The same problem arises with displayed math in a flush-left\footnote{The common practice of
+% centering displayed equations does not call for the manipulations of a paragraph's last
+% line discussed here.} setting, e.\,g., \packagename{amsmath}~\cite{package:amsmath} and
+% option~|fleqn|.\footnote{For displayed equations and \packagename{amsmath} the relevant
+% parameter is~\cs{mathindent}.}
+%
+% \begin{minipage}{\linewidth}
+% A possible remedy is to reflow the paragraph in a way that its last line is clearly wider
+% than \cs{parindent}; a typical suggestion being twice the~\cs{parindent}.
+%
+% \begin{center}
+% \includegraphics{crooked-paragraphs-2.mps}
+% \end{center}
+% \end{minipage}
+%
+% \item\label{item:o2}
+% \(\cs{parindent} = 0\) \cite[O2]{wermuth:2018}
+%
+% \begin{minipage}{\linewidth}
+% If the last line of a paragraph is completely filled with text, i.\,e., flush with the
+% right margin, it may become hard to spot the start of the following paragraph unless
+% \cs{parskip} is large.\footnotemark
+%
+% \begin{center}
+% \includegraphics{crooked-paragraphs-3.mps}
+% \end{center}
+% \end{minipage}\footnotetext{Package~\packagename{parskip} defines \cs{parskip}
+% as \mbox{6pt plus 2pt} for a base size of~10pt.}
+%
+% \medskip
+% \begin{minipage}{\linewidth}
+% A possible, more legible solution is to reformat the paragraph in a way such that its
+% last line leaves a marked gap with respect to the right margin.
+%
+% \begin{center}
+% \includegraphics{crooked-paragraphs-4.mps}
+% \end{center}
+% \end{minipage}
+%
+% The suggestions for the gap-width vary from two~em to twice the width of a
+% \singlequotes{typical} \cs{parindent}\footnote{% For example, \LaTeX's class
+% \packagename{article} uses a \cs{parindent} of~25pt.} for the gap~\cite{carlisle:1996}.
+% \end{enumerate}
+%
+% \begin{tip}
+% In theory both problems, O1 and O2 can be resolved by either shortening or prolonging the
+% last line of the paragraph. For the concrete case it is up to the user to decide which
+% direction to go and to choose the method that yields the most pleasing typographic results.
+%
+% \TeX{} always considers the paragraph in its entirety. Thus any change the user demands
+% \doublequotes{just for the last line} will permeate the whole paragraph and in unfortunate
+% cases botch it.
+%
+% Prudent users check the appearance of the problematic, original paragraph against one or
+% more corrected versions of it~-- at least visually. Quantitative comparisons can be
+% performed with the help of~\cs{tracingparagraphs}.
+% \end{tip}
+%
+% \begin{important}
+% For the techniques in the following two subsections to work the paragraphs treated with
+% them should have certain advantageous properties.
+%
+% \begin{itemize}
+% \item Technically, the paragraphs need to contain enough glue (see
+% e.\,g.~\cref{sec:sloppy-paragraphs}) to achieve a low badness such that the desired
+% paragraph end is deemed feasible by \TeX.
+%
+% \item Aesthetically, the paragraphs must be long enough to absorb the change in last-line
+% fill level otherwise their gray-values visibly deviate from the
+% average.\specialsectionendhere
+% \end{itemize}
+% \end{important}
+%
+%
+% \subsubsection{Manual Changes}\label{sec:fill-last-line-other-methods}
+%
+% Most \hyperref[item:o1]{O1} or \hyperref[item:o2]{O2} situations can be navigated with
+% do-it-yourself methods. Here are some common recipes.
+%
+% \begin{enumerate}
+% \item End-of-paragraph intervention.\label{enum:end-of-paragraph-intervention}
+%
+% \begin{enumerate}[notopsep]
+% \item Tie~\sample{\texttt{\char126}}\label{enum:tie-last-words}\index{paragraph>fill last line>tie}
+%
+% Tie the last words.
+%
+% The problem with the tie may be a hyphenation of one of the words that participates in
+% the tie. The next item avoids this disadvantage.
+%
+% \item \cs{mbox}\label{enum:mbox-last-words}\index{paragraph>fill last line>mbox=\cs{mbox}}
+%
+% Join the last words or inline equation at the end of the paragraph with an~\cs{mbox}.
+%
+% \item \cs{linebreak}\label{enum:linebreak}\index{paragraph>fill last line>linebreak=\cs{linebreak}}
+%
+% Add a \cs{linebreak} to the back part of the paragraph (approximately where the
+% \cs{mbox} of item~\ref{enum:mbox-last-words} would start) in a way that the last line
+% receives the desired length~\cite{wermuth:2022-8-2}. In turn the next-to-last lines
+% may become unsightly. Counteract this degradation e.\,g.~with
+% recipes~\ref{enum:vary-spacing} to~\ref{enum:vary-font-expansion}.
+% \end{enumerate}
+%
+% Tying and \cs{mbox}ing lend themselves to generalizations. We need not only tie at end of
+% a paragraph but fuse logical units of sentences or inline equations so that the relevant
+% information literally stays in the reader's focus. Cementing together text of course finds
+% an end when overfull lines start to show up.
+%
+% \item Uniform paragraph change.\label{enum:uniform-paragraph-change}
+%
+% \begin{enumerate}[notopsep]
+% \item Vary spacing.\label{enum:vary-spacing}\index{font>spacing}
+%
+% Modify the inter-word spacing, for example, with the macros introduced in
+% \cref{sec:looser-tighter-spacing}.
+%
+% Enclose the paragraph in either \hyperref[syn:loosespacing]{|loosespacing|}
+% or~\hyperref[syn:tightspacing]{|tightspacing|}.
+% Increase the spacing~\meta{level} until the last line gets the desired length.
+%
+% \item Vary font tracking.\label{enum:vary-font-tracking}\index{font>tracking}
+%
+% Enclose the paragraph in a \hyperref[syn:setfonttracking]{\code{setfonttracking}}~group.
+% See \cref{sec:tracking-control}. Increase or decrease the tracking in steps of
+% \nativetextfraction{1}{1000}\,em until the last line looks good.
+%
+% \item Vary font expansion.\label{enum:vary-font-expansion}\index{font>expansion}
+%
+% Enclose the paragraph in a \hyperref[syn:setfontexpand]{\code{setfontexpand}}~group. See
+% \cref{sec:font-expansion-control}.
+% \end{enumerate}
+%
+% \item A combination of any of the above items.
+%
+% \item Some curveballs.\label{enum:gonzo-tips}\par
+% \begin{enumerate}[notopsep]
+% \item If the paragraph already suffers from one of the problems that \TeX{} addresses with
+% \cs{doublehyphendemerits}, \cs{finalhyphendemerits}, or~\cs{adjdemerits}, crank up one or
+% all of these values to~10000 and observe whether the length of last line changes in the
+% desired direction.
+%
+% \item If any influential \packagename{microtype} features have been enabled try with one
+% more more of them \emph{disabled}. See, e.\,g.,
+% environment~\hyperref[syn:nofontexpansion]{\code{nofontexpansion}} in
+% \cref{sec:font-expansion-control}.
+% \end{enumerate}
+% \end{enumerate}
+%
+%
+% \subsubsection{Multi\capitalhyphen Purpose Environments}\label{sec:fill-last-line-gp-environments}
+%
+% \DescribeEnv{shortenpar}
+% \DescribeEnv{prolongpar}
+% The two environments |shortenpar|\index{paragraph>fill last
+% line>shortenpar=\code{shortenpar}} and |prolongpar|\index{paragraph>fill last
+% line>prolongpar=\code{prolongpar}} can be employed in quite general situations when a
+% paragraph should be typeset one line longer or shorter, e.\,g., to avoid a
+% widow~line\footnote{The last line of a paragraph becomes a \singlequotes{widow}\index{forlorn
+% line>widow} (ger.~\foreignphrase{Hurenkind}) if it starts the following page or column.} or
+% a club~line\footnote{The first line of a paragraph is called
+% \singlequotes{club}\index{forlorn line>club} or~\singlequotes{orphan}\index{forlorn
+% line>orphan} (ger.~\foreignphrase{Schusterjunge}) if it appears at the bottom of the page or
+% column.}~[\citenum{knuth:1986}, p.~104 and~\citenum{mittelbach:2018c}]. (See also
+% \cref{sec:vtie-paragraph} for special functions to avoid clubs or widows.)
+% \singlequotes{Accidentally}, they also change the length of the last line of the paragraph.
+%
+% \begin{synopsis}\label{syn:shortenpar}
+% \cs{begin}|{shortenpar}|
+% \dots{}
+% \cs{end}|{shortenpar}|
+% \end{synopsis}
+%
+% Environment |shortenpar| decreases the \cs{looseness} of the paragraph.\footnote{Command
+% \cs{looseness} is a \TeX{}~primitive~\cite[p.~103n]{knuth:1986}. A thorough discussion of
+% the interaction of \cs{linepenalty} and \cs{looseness} can be found in
+% Ref.~\citenum{wermuth:2017c}.} It performs well if the last line of the paragraph is short
+% or the whole paragraph is loose.
+%
+% \begin{synopsis}\label{syn:prolongpar}
+% \cs{begin}|{prolongpar}|
+% \dots{}
+% \cs{end}|{prolongpar}|
+% \end{synopsis}
+%
+% This environment increases the \cs{looseness} of the paragraph, which is why it works best
+% with decent or tight last lines that are almost full.
+%
+%
+% \subsubsection{Specialized Environments}\label{sec:fill-last-line-specialized-environments}
+%
+% We introduce environments not just skips to get the correct behavior --~set up all paragraph
+% parameters \emph{before} the paragraph ends~-- and, at the same time, limit the range of this
+% parameter change.
+%
+% \DescribeEnv{covernextindentpar}
+% Environment |covernextindentpar|\index{paragraph>fill last line>covernextindentpar=\code{covernextindentpar}}
+% can be helpful for \hyperref[item:o1]{case~O1}, i.\,e., a too short last line.
+%
+% \begin{synopsis}\label{syn:covernextindentpar}
+% \cs{begin}|{covernextindentpar}|\oarg{dim} \\
+% \hspace*{1em}\dots \\
+% \cs{end}|{covernextindentpar}|
+% \end{synopsis}
+%
+% The environment asks \TeX{} to extend the last line of a paragraph such that it takes at
+% least
+% \makeatletter\dumpmacro{\typog@covernextindentpar@nonzero@parindent}\makeatother{}
+% (if \(\cs{parindent} \not= 0\)),
+% \makeatletter\typog@covernextindentpar@zero@parindent\makeatother{}
+% (if \(\cs{parindent} = 0\)), or \meta{dim} if called with an optional argument.
+%
+% \DescribeEnv{openlastlinepar}
+% The next environment, |openlastlinepar|,\index{paragraph>fill last
+% line>openlastlinepar=\code{openlastlinepar}} takes care of \hyperref[item:o2]{case~O2},
+% i.\,e., a last line in a paragraph that is almost full or completely filled.
+%
+% \begin{synopsis}\label{syn:openlastlinepar}
+% \cs{begin}|{openlastlinepar}|\oarg{dim} \\
+% \hspace*{1em}\dots \\
+% \cs{end}|{openlastlinepar}|
+% \end{synopsis}
+%
+% It may resolve \hyperref[item:o2]{case~O2} as it attempts to prevent a completely filled line
+% by introducing a partly unshrinkable \cs{parfillskip}. Without optional argument the
+% threshold of unused last-line length is either
+% \makeatletter\dumpmacro{\typog@openlastlinepar@nonzero@parindent}\makeatother{} (if
+% \(\cs{parindent} \not= 0\)) or
+% \makeatletter\typog@openlastlinepar@zero@parindent\makeatother{} (if \(\cs{parindent} = 0\)).
+% The optional argument~\meta{dim} directly sets the gap threshold.
+%
+% Note that the application of this environment can be successful, this is, a completely filled
+% last line is avoided, but the result may be of \hyperref[item:o1]{type~O1} nonetheless.
+%
+%
+% \needtocspace
+% \Needspace{150pt}
+% \subsection{Spacing}\label{sec:spacing-control}\index{font>spacing}
+%
+% \begin{whittyquote}
+% 90~\% of design is typography. \\
+% And the other 90~\% is whitespace. \\
+% \capitalemdash*~\propername{Jeffrey Zeldman}
+% \end{whittyquote}
+%
+% \noindent
+% The functions described in this section rely only on plain \LaTeX. No extra packages are
+% required. Compare to the \packagename{microtype}-based functionality of
+% \cref{sec:microtype-frontend}.
+%
+%
+% \subsubsection[Looser\kernedslash Tighter]{Looser or Tighter Spacing}\label{sec:looser-tighter-spacing}\index{font>spacing>loose}\index{font>spacing>tight}
+%
+%
+% \begin{whittyquote}
+% Never try to adjust lines by squeezing or stretching the tracking. \\
+% Go for the subtle solution: adjust word spacing instead. \\
+% \capitalemdash*~\propername{Jan Middendorp}~\cite[p.~119]{middendorp:2014}
+% \end{whittyquote}
+%
+% \noindent
+% The environments in this section directly influence the spacing, this is, they change the
+% width and stretchability of the horizontal space.
+%
+% They at the one hand act gently by adjusting the spacing only by a small amount. On the
+% other hand they operate decidedly in controlling the glue associated with the adjusted space.
+% The latter also being important to ensure the monotonicity of the different \meta{level}s.
+% However, the strictly managed stretchability\slash shrinkability may lead to many overfull
+% boxes with \cs{fussy} or when applied to short lines.
+%
+% \DescribeEnv{loosespacing}
+% \DescribeEnv{tightspacing}
+% Environments |loosespacing| and |tightspacing| introduce four \meta{level}s of
+% \singlequotes{looseness} or \singlequotes{tightness}, where \meta{level}~=~0 disables the
+% functionalities. The higher the \meta{level} the looser or tighter the text will by typeset,
+% respectively.
+%
+% \begin{synopsis}\label{syn:loosespacing}
+% \cs{begin}|{loosespacing}|\oarg{level}
+% \dots{}
+% \cs{end}|{loosespacing}|
+% \end{synopsis}
+%
+% Environment~|loosespacing| increases the width of a space by the percentages given in the
+% \cref{tab:loosespacing}.
+%
+% \begin{SCtable}[10]
+% \caption[Spacing changes made by \code{loosespacing}]%
+% {Adjustments made by environment |loosespacing| to \cs{spaceskip}.
+% The mapping of \meta{level} to the exact skip definitions are
+% \(1 \mapsto \formatskip{1.05}{.5}{.1}\),
+% \(2 \mapsto \formatskip{1.1}{.5}{.1}\),
+% \(3 \mapsto \formatskip{1.2}{.6}{.2}\), and
+% \(\ge 4 \mapsto \formatskip{1.3}{.8}{.3}\),
+% where all factors scale with \cs{dimen2},
+% the current font's space-width.}
+% \label{tab:loosespacing}
+%
+% \begin{tabfigures}
+% \def~{\hphantom{0}}%
+% \begin{tabular}{@{}ccl@{}}
+% \toprule
+% \meta{level} & Adjustment & Comment \\
+% {} & \% & \\
+% \midrule
+% 0 & n/a & neutral \\
+% 1 & +5~ & default \\
+% 2 & +10 & \\
+% 3 & +20 & \\
+% \(\ge\)\:4 & +30 & \\
+% \bottomrule
+% \end{tabular}
+% \end{tabfigures}
+% \end{SCtable}
+%
+% The default level of |loosespacing| is~1.
+%
+% \begin{synopsis}\label{syn:tightspacing}
+% \cs{begin}|{tightspacing}|\oarg{level}
+% \dots{}
+% \cs{end}|{tightspacing}|
+% \end{synopsis}
+%
+% Environment~|tightspacing| decreases the width of a space by the percentages given in
+% \cref{tab:tightspacing}.
+%
+% \begin{SCtable}[10]
+% \caption[Spacing changes made by \code{tightspacing}]%
+% {Adjustments made by environment |tightspacing| to \cs{spaceskip}.
+% The mapping of \meta{level} to the exact skip definitions are
+% \(1 \mapsto \formatskip{.9875}{.0125}{.5\hphantom{000}}\)\!,
+% \(2 \mapsto \formatskip{.975}{.025}{.5\hphantom{00}}\)\!,
+% \(3 \mapsto \formatskip{.95}{.05}{.5\hphantom{0}}\)\!, and
+% \(\ge 4 \mapsto \formatskip{.9}{.1}{.5}\),
+% where all factors scale with \cs{dimen2},
+% the current font's space-width.}
+% \label{tab:tightspacing}
+%
+% \begin{tabfigures}
+% \def~{\hphantom{0}}%
+% \begin{tabular}{@{}ccl@{}}
+% \toprule
+% \meta{level} & Adjustment & Comment \\
+% {} & \% & \\
+% \midrule
+% 0 & n/a & neutral \\
+% 1 & ~{-}1.25 & default \\
+% 2 & ~{-}2.5~ & \\
+% 3 & ~{-}5\hphantom{.00} & \\
+% \(\ge\)\:4 & -10\hphantom{.00} & \\
+% \bottomrule
+% \end{tabular}
+% \end{tabfigures}
+% \end{SCtable}
+%
+% The default level of |tightspacing| is~1.
+%
+% \begin{note}
+% At a given \meta{level} the changes of |loosespacing| are much larger than those of
+% |tightspacing|.
+% \end{note}
+%
+% \begin{usecases}
+% Nudge line breaks or hyphenation points.~\visualpar Separate clashing descenders and
+% ascenders.~\visualpar Eliminate rivers.
+% \end{usecases}
+%
+%
+% \subsubsection{Wide Space}\label{sec:wide-space}\index{wide space}
+%
+% The \cs{widespace} macro and its companion \cs{narrowspace} derive their appearances from
+% several of the current font's \cs{fontdimen}\meta{number}s. \TeX{} addresses the latter by
+% integers, which is totally non-memnonic. Therefore, we play softball by first presenting
+% \cref{tab:fontdimen} that associates the \cs{fontdimen}\meta{number}s with their meanings and
+% also reports on their current values (for this document).\footnote{The association is given
+% in Appendix~F (p.~433) of Ref.~\citenum{knuth:1986}. For a concise and understandable
+% explanation of the \TeX~\cs{fontdimen} parameters consult Ref.~\citenum{carlisle:2013}.}
+%
+% \begin{SCtable}
+% \caption[\cs{fontdimen}\meta{number} parameters]
+% {The first column~\sample{\#} states the index of the \cs{fontdimen} parameter:
+% \meta{number}. Column~2 presents short descriptions of the
+% \cs{fontdimen}\meta{number} parameters. As examples, the values for the current
+% font are shown in column~3; they are normalized to the quad-size.\bottomstrut}
+% \label{tab:fontdimen}
+%
+% \begin{tabfigures}
+% \def~{\hphantom{0}}%
+% \ExplSyntaxOn
+% \def\straightfontdimen#1{\fp_eval:n {\the\fontdimen#1\font}}
+% \def\roundfontdimen#1{\fp_eval:n {round (1000 * \the\fontdimen#1\font) / 1000}}
+% \def\relativefontdimen#1{\fp_eval:n {round (1000 * \the\fontdimen#1\font / \the\fontdimen6\font) / 10}}
+% \ExplSyntaxOff
+%
+% \begin{tabular}{@{}lll@{}}
+% \toprule
+% \# & Description & Value \\
+% {} & & \multicolumn{1}{c}{\%} \\
+% \midrule
+% 1 & Slant per 1\,pt height & ~~\relativefontdimen1\topstrut \\
+% 2 & Interword space width & ~\relativefontdimen2 \\
+% 3 & Interword stretch & ~\relativefontdimen3 \\
+% 4 & Interword shrink & ~~\relativefontdimen4 \\
+% 5 & \sample{\itcorr{2}x\itcorr{2}} height & ~\relativefontdimen5 \\
+% 6 & \cs{quad} height & \relativefontdimen6 \\
+% 7 & Extra space width & ~~\relativefontdimen7 \\
+% \bottomrule
+% \end{tabular}
+% \end{tabfigures}
+% \end{SCtable}
+%
+% \DescribeMacro{\widespace}
+% \DescribeMacro{\widespace*}
+% \sinceversion{Starred form since v0.2}
+% Typeset a wide, sentence-ending space as if in \cs{nonfrenchspacing}~mode. Consult
+% \Cref{tab:space-sizes} for a comparison of the various sizes.
+%
+% \begin{synopsis}\label{syn:widespace}
+% \cs{widespace} \\
+% \cs{widespace*}
+% \end{synopsis}
+%
+% The unstarred macro~\cs{widespace} inserts a space that is as wide as the font's
+% sentence-ending space in \cs{nonfrenchspacing}~mode, this is
+% \begin{equation*}
+% |\fontdimen2| + \cs{widespacestrength} \times |\fontdimen7|.
+% \end{equation*}
+%
+% \noindent
+% Its width is independent of any \cs{frenchspacing} or \cs{nonfrenchspacing}~settings, but
+% depends on \cs{widespacestrength} which defaults
+% to~\widespacestrength\widespace\marginnote{The sentence that ends with
+% \singlequotes{\widespacestrength} uses \cs{widespace} after the period.} The latter can be
+% overridden by the user to get a more or less pronounced effect.
+%
+% If |\fontdimen7| happens to be zero \cs{widespace} uses
+% \begin{equation*}
+% \cs{widespacescale} \times |\fontdimen2|
+% \end{equation*}
+%
+% \noindent
+% as width instead, where \cs{widespacescale} defaults to \widespacescale. The stretchability
+% and shrinkability of \cs{widespace} always are scaled with \cs{widespacescale}. The
+% \cs{widespacescale} too can be redefined by the user to achieve different effects.
+%
+% The starred form, \cs{widespace*}, unconditionally uses the \(|\fontdimen7| = 0\) code-path.
+%
+% \begin{usecase}
+% Useful as a sentence-ending space if, for example, the sentence ends in an abbreviation
+% with a period or decimal number without trailing digits \emph{and} the next sentence should
+% be delimited in a clearer way.~\visualpar Open tight lines with a series
+% of~\cs{widespace}s.\footnote{\label{fn:widespace}See also \doublequotes{Investigating the
+% badness of a paragraph} on \Cpageref{sec:investigating-paragraph-badness}.}
+% \end{usecase}
+%
+%
+% \subsubsection{Narrow Space}\label{sec:narrow-space}\index{narrow space}
+%
+% \DescribeMacro{\narrowspace}
+% \DescribeMacro{\narrowspace*}
+% \sinceversion{Since v0.2}
+% Typeset a narrow space. Consult \Cref{tab:space-sizes} for a comparison of the various
+% sizes.
+%
+% \begin{synopsis}\label{syn:narrowspace}
+% \cs{narrowspace} \\
+% \cs{narrowspace*}
+% \end{synopsis}
+%
+% The unstarred macro~\cs{narrowspace} inserts a narrow space with the width
+% \begin{equation*}
+% |\fontdimen2| - \cs{narrowspacestrength} \times |\fontdimen7|
+% \end{equation*}
+%
+% \noindent
+% if |\fontdimen7| is different from zero or otherwise
+% \begin{equation*}
+% \cs{narrowspacescale} \times |\fontdimen2|.
+% \end{equation*}
+%
+% \noindent
+% The starred version, \cs{narrowspace*}, unconditionally uses the \(\cs{fontdimen7} = 0\)
+% code-path. Refer to \Cref{tab:fontdimen} for the meanings of the various
+% \cs{fontdimen}~parameters.
+%
+% The stretchability and shrinkability of \cs{narrowspace} always get scaled with
+% \cs{narrowspacescale}. Both factors, \cs{narrowspacestrength} and \cs{narrowspacescale} can
+% be redefined by the user; their defaults are \narrowspacestrength{} and \narrowspacescale,
+% respectively.
+%
+% \begin{usecase}
+% Tighten loose lines with a series of~\cs{narrowspace}s.\footnote{Footnote
+% \ref{fn:widespace} again applies.}
+% \end{usecase}
+%
+% \begin{table}
+% \centering
+% \caption[Comparison of some space sizes]
+% {Exemplary comparison of standard \cs{space} versus \cs{narrowspace} and
+% \cs{widespace}. All values are relative to the size of the current font's quad
+% size. \cs{narrowspace} and \cs{widespace} use the package's defaults.~\visualpar
+% The upper values in the Width-column for \cs{narrowspace}, and \cs{widespace}
+% refer to the \(\cs{fontdimen7} \not= 0\) case and the lower ones to the
+% \(\cs{fontdimen7} = 0\) code-path.}
+% \label{tab:space-sizes}
+%
+% \begin{tabfigures}
+% \def~{\hphantom{0}}%
+% \ExplSyntaxOn
+% \def\relativedimen#1{\fp_eval:n {round (1000 * (#1) / \the\fontdimen6\font) / 10}}
+% \def\relativefontdimen#1{\relativedimen{\the\fontdimen#1\font}}
+% \ExplSyntaxOff
+% \def\nrows{1.75}
+%
+% \begin{tabular}{@{}llll@{}}
+% \toprule
+% Name & Width & Stretch & Shrink \\
+% {} & \% & \% & \% \\
+% \midrule
+% \multirow{\nrows}{*}{\cs{narrowspace}} &
+% \relativedimen{\the\fontdimen2\font - \narrowspacestrength * \the\fontdimen7\font} &
+% \multirow{\nrows}{*}{\relativedimen{\narrowspacescale * \the\fontdimen3\font}} &
+% \multirow{\nrows}{*}{\relativedimen{\narrowspacescale * \the\fontdimen4\font}} \\[-.25\normalbaselineskip]
+% {} & \relativedimen{\narrowspacescale * \the\fontdimen2\font} & & \\
+% \cs{space} & \relativefontdimen2 & \relativefontdimen3 & \relativefontdimen4 \\
+% \multirow{\nrows}{*}{\cs{widespace}} &
+% \relativedimen{\the\fontdimen2\font + \widespacestrength * \the\fontdimen7\font} &
+% \multirow{\nrows}{*}{\relativedimen{\widespacescale * \the\fontdimen3\font}} &
+% \multirow{\nrows}{*}{\relativedimen{\widespacescale * \the\fontdimen4\font}} \\[-.25\normalbaselineskip]
+% {} & \relativedimen{\widespacescale * \the\fontdimen2\font} & & \\
+% \bottomrule
+% \end{tabular}
+% \end{tabfigures}
+% \end{table}
+%
+%
+% \subsection{\packagename{Microtype} Front\capitalhyphen End}\label{sec:microtype-frontend}
+% \index{microtype=\packagename{microtype} (package)}
+%
+% The functionalities are just front-ends of selected macros in
+% package~\packagename{microtype} -- welcome syntactic sugar.
+%
+% \begin{important}
+% All macros and environments introduced in this section require that
+% package~\packagename{microtype}~\cite{package:microtype} has been loaded, preferably
+% \emph{before} package~\packagename{typog}
+%
+% \begin{codeexample}
+% \cs{usepackage}[\meta{microtype-options}\dots]\{microtype\} \\
+% \cs{usepackage}[\meta{typog-options}\dots]\{typog\}
+% \end{codeexample}
+%
+% \noindent
+% in the document preamble.
+% \end{important}
+%
+%
+% \subsubsection{Tracking}\label{sec:tracking-control}\index{font>tracking}
+%
+% \begin{caution}
+% The tracking changes may interfere with implicit changes of tracking declared with
+% \cs{SetTracking}. Explicit calls to \cs{textls} remain in effect.
+% \end{caution}
+%
+% \noindent
+% \DescribeEnv{setfonttracking}
+% Override the default tracking for all fonts.
+%
+% \begin{synopsis}\label{syn:setfonttracking}
+% \cs{begin}|{setfonttracking}|\marg{delta} \\
+% \hspace*{1em}\dots \\
+% \cs{end}|{setfonttracking}|
+% \end{synopsis}
+%
+% The environment~|setfonttracking| manages a group for \cs{lsstyle} of
+% package~\packagename{microtype}. The change \meta{delta} in tracking is given as multiples
+% of \nativetextfraction{1}{1000}\,em. Positive as well as negative values of \meta{delta} are
+% allowed.
+%
+% See Sec.~5.3, \singlequotes{Tracking}, and~7, \doublequotes{Letterspacing revisited}, in the
+% documentation of \packagename{microtype}~\cite{package:microtype} for a detailed explanation.
+%
+% For font combinations involving monospaced fonts (\TeX{} lingo: typewriter) an overly large
+% spacing may show up at the borders where fonts change. This is caused by the calculation of
+% the \doublequotes{outer spacing} described in Sec.~5.3 of the \packagename{microtype}~manual.
+%
+% Use configuration variable~\hyperref[item:trackingttspacing]{\code{trackingttspacing}} to
+% reduce the outer spacing to a reasonable value either directly at package-load time
+%
+% \begin{codeexample}
+% \cs{usepackage}[trackingttspacing=\{250, 75, 50\}]\{typog\}
+% \end{codeexample}
+%
+% \noindent
+% or with the help of \cs{typogsetup} in the document \emph{preamble} (after loading
+% \packagename{microtype} and \packagename{typog})
+%
+% \begin{codeexample}
+% \cs{typogsetup}\{trackingttspacing=\{250, 75, 50\}\}
+% \end{codeexample}
+%
+% If the argument of option~\code{trackingttspacing} is omitted the outer spacing defaults to
+% \makeatletter\mbox{\typog@trackingttspacing}\makeatother.
+%
+% \begin{usecases}
+% Nudge line breaks or hyphenation points.~\visualpar Avoid clashes of descenders and
+% ascenders, e.\,g., for \cs{smash}ed symbols of inline math.~-- Think of
+% integrals.~\visualpar Control the length of the last line in a paragraph.
+% \end{usecases}
+%
+%
+% \subsubsection{Font Expansion}\label{sec:font-expansion-control}\index{font>expansion}
+%
+% \DescribeEnv{setfontshrink}
+% \DescribeEnv{setfontstretch}
+% Adjust the limits of either only stretchability or only shrinkability and zero the other
+% component, i.\,e., shrinkability and stretchability, respectively.
+%
+% \begin{synopsis}\label{syn:setfontshrink}\label{syn:setfontstretch}
+% \cs{begin}|{setfontshrink}|\marg{level}
+% \dots{}
+% \cs{end}|{setfontshrink}| \\
+% \cs{begin}|{setfontstretch}|\marg{level}
+% \dots{}
+% \cs{end}|{setfontstretch}|
+% \end{synopsis}
+%
+% A \meta{level} of zero is a no-op. \Cref{tab:setfontshrink-values,tab:setfontstretch-values}
+% summarize the values for |stretch| and |shrink| in these environments.
+%
+% \begin{SCtable}
+% \caption[Shrink values of \code{setfontshrink}]%
+% {\slightlysloppy[2] Preconfigured values for |shrink| inside of
+% environment~\code{setfontshrink}. Note that all |stretch| values are zero, so the fonts
+% only can shrink.}
+% \label{tab:setfontshrink-values}
+%
+% \begin{tabfigures}
+% \begin{tabular}{@{}cccl@{}}
+% \toprule
+% \meta{level} & |stretch| & |shrink| & Comment \\
+% {} & \nativetextfraction{1}{1000}\,em & \nativetextfraction{1}{1000}\,em & \\
+% \midrule
+% 0 & n/a & n/a & no operation \\
+% 1 & 0 & \hphantom{0}\makeatletter\typog@shrink@i\makeatother & default \\
+% 2 & 0 & \makeatletter\typog@shrink@ii\makeatother & \\
+% 3 & 0 & \makeatletter\typog@shrink@iii\makeatother & \\
+% \bottomrule
+% \end{tabular}
+% \end{tabfigures}
+% \end{SCtable}
+%
+% \begin{SCtable}
+% \centering
+% \caption[Stretch values of \code{setfontstretch}]%
+% {\slightlysloppy[2] Preconfigured values for |stretch| inside of
+% environment~\code{setfontstretch}. Note that all |shrink| values are zero, so the fonts
+% only can stretch.}
+% \label{tab:setfontstretch-values}
+%
+% \begin{tabfigures}
+% \begin{tabular}{@{}cccl@{}}
+% \toprule
+% \meta{level} & |stretch| & |shrink| \\
+% {} & \nativetextfraction{1}{1000}\,em & \nativetextfraction{1}{1000}\,em & \\
+% \midrule
+% 0 & n/a & n/a & no operation \\
+% 1 & \hphantom{0}\makeatletter\typog@stretch@i\makeatother & 0 & default \\
+% 2 & \makeatletter\typog@stretch@ii\makeatother & 0 & \\
+% 3 & \makeatletter\typog@stretch@iii\makeatother & 0 & \\
+% \bottomrule
+% \end{tabular}
+% \end{tabfigures}
+% \end{SCtable}
+%
+% The three (nonzero) shrink limits of \code{setfontshrink} can be configured with package
+% option~\hyperref[item:shrinklimits]{\code{shrinklimits}} and --~in the same way~-- the three
+% (nonzero) stretch limits of \code{setfontstretch} with package
+% option~\hyperref[item:stretchlimits]{\code{stretchlimits}}.
+%
+% \begin{usecases}
+% Nudge line breaks or hyphenation points.~\visualpar Control the length of the last line in
+% a paragraph.
+% \end{usecases}
+%
+% \noindent
+% \DescribeEnv{setfontexpand}
+% Manipulate both, |stretch| and |shrink|~values at the same time.
+%
+% \begin{synopsis}\label{syn:setfontexpand}
+% \cs{begin}|{setfontexpand}|\marg{level}
+% \dots{}
+% \cs{end}|{setfontexpand}|
+% \end{synopsis}
+%
+% \Cref{tab:setfontexpand-values} gives an overview of the values associated with \meta{level}.
+%
+% \begin{SCtable}
+% \caption[Shrink and stretch values of \code{setfontexpand}]%
+% {\slightlysloppy[2] Preconfigured values for |shrink| and |stretch| inside of
+% environment~\code{setfontexpand}. Note that both |shrink| and |stretch| values are
+% nonzero, so the fonts can shrink or expand.}
+% \label{tab:setfontexpand-values}
+%
+% \begin{tabfigures}
+% \begin{tabular}{@{}cccl@{}}
+% \toprule
+% \meta{level} & |stretch| & |shrink| & Comment \\
+% {} & \nativetextfraction{1}{1000}\,em & \nativetextfraction{1}{1000}\,em & \\
+% \midrule
+% 0 & n/a & n/a & no operation \\
+% 1 & \hphantom{0}\makeatletter\typog@stretch@i\makeatother & \hphantom{0}\makeatletter\typog@stretch@i\makeatother & default \\
+% 2 & \makeatletter\typog@stretch@ii\makeatother & \makeatletter\typog@stretch@ii\makeatother & \\
+% 3 & \makeatletter\typog@stretch@iii\makeatother & \makeatletter\typog@stretch@iii\makeatother & \\
+% \bottomrule
+% \end{tabular}
+% \end{tabfigures}
+% \end{SCtable}
+%
+% The six shrink and stretch limits of \code{setfontexpand} can be configured with package
+% options~\hyperref[item:shrinklimits]{\code{shrinklimits}}
+% and~\hyperref[item:stretchlimits]{\code{stretchlimits}}.
+%
+% \begin{notes}
+% \begin{itemize}[notopsep]
+% \item Environment~|setfontexpand| shares its
+% \hyperref[item:shrinklimits]{\code{shrinklimits}} with \code{setfontshrink} and its
+% \hyperref[item:stretchlimits]{\code{stretchlimits}} with \code{setfontstretch}.
+%
+% \item These environments do not nail down any font's expansion but only set up its
+% available range. See Sec.~3.3, \doublequotes{Font Expansion}, in the
+% \packagename{microtype} documentation~\cite{package:microtype}.
+%
+% Moreover, a text may not \singlequotes{respond} neither to \code{setfontshrink},
+% \code{setfontstretch}, nor~\code{setfontexpand} because \TeX{} already considers it
+% optimal without expansion or within the previous expansion limits, e.\,g., those set at
+% \packagename{microtype} load~time as opposed to \packagename{typog}'s
+% load~time.\specialsectionendhere
+% \end{itemize}
+% \end{notes}\unskip
+%
+% \begin{usecases}
+% Nudge line breaks or hyphenation points.~\visualpar Control the length of a paragraph,
+% e.\,g., to avoid a widow.
+% \end{usecases}
+%
+% \noindent
+% \DescribeEnv{nofontexpansion}
+% Disable the \packagename{microtype} feature~\singlequotes{expansion} inside of the
+% environment.
+%
+% \begin{synopsis}\label{syn:nofontexpansion}\label{syn:nofontexpand}
+% \cs{begin}|{nofontexpansion}|
+% \dots{}
+% \cs{end}|{nofontexpansion}| \\[\smallskipamount]
+% |nofontexpand|~(alias)
+% \end{synopsis}
+%
+% The name |nofontexpand| is an alias for~|nofontexpansion|.
+%
+% \begin{usecases}
+% Nudge line breaks or hyphenation points.~\visualpar Prevent severe scaling effects in
+% paragraphs strongly manipulated by other means, e.\,g.,
+% \hyperref[syn:shortenpar]{\code{shortenpar}}
+% or~\hyperref[syn:prolongpar]{\code{prolongpar}}.
+% \end{usecases}
+%
+%
+% \subsubsection{Character Protrusion}\label{sec:protrusion}\index{font>protrusion}
+%
+% \DescribeEnv{nocharprotrusion}
+% Disable the \packagename{microtype} feature~\singlequotes{protrusion} inside of the
+% environment.
+%
+% \begin{synopsis}\label{syn:nocharprotrusion}
+% \cs{begin}|{nocharprotrusion}|
+% \dots{}
+% \cs{end}|{nocharprotrusion}|
+% \end{synopsis}
+%
+% \begin{usecases}
+% Table of Contents or similar tables with aligned section numbers.~\visualpar Any table with
+% left- or right-aligned numerals in particular tabular numerals.~\visualpar Index.
+% \end{usecases}
+%
+%
+% \FloatBarrier
+% \subsection{Sloppy Paragraphs}\label{sec:sloppy-paragraphs}\index{paragraph>sloppy}
+%
+% Experienced \LaTeX{} users know that \cs{sloppy} is more of a problem by itself and not
+% really a viable solution of the \doublequotes{overfull~box} syndrome.
+%
+% \DescribeMacro{\slightlysloppy}
+% \DescribeEnv{slightlysloppypar}
+% We define the macro~\cs{slightlysloppy} and the associated environment,
+% \code{slightlysloppypar}, with a user-selectable \meta{sloppiness} parameter. The
+% constructions recover the known settings \cs{fussy} (\meta{sloppiness}~=~0) and \cs{sloppy}
+% (\meta{sloppiness}~\(\ge\)~8), and introduce seven intermediate
+% \meta{sloppiness}~levels.\footnote{Also compare the findings for \cs{emergencystretch} in
+% Ref.~\citenum{wermuth:2017a}.} The default \meta{sloppiness} is 1.
+%
+% \begin{synopsis}\label{syn:slightlysloppy}\label{syn:slightlysloppypar}
+% \cs{slightlysloppy}\oarg{sloppiness} \\[\smallskipamount]
+% \cs{begin}|{slightlysloppypar}|\oarg{sloppiness} \\
+% \hspace*{1em}\dots \\
+% \cs{end}|{slightlysloppypar}|
+% \end{synopsis}
+%
+% \Cref{tab:slightlysloppy} summarizes the adjustments that \cs{slightlysloppy} makes depending
+% on the \meta{sloppiness}~level.
+%
+% \begin{table}
+% \centering
+% \caption[Parameter adjustments of \cs{slightlysloppy}]%
+% {Adjustments made by \cs{slightlysloppy} to various \TeX~parameters at different
+% levels of \meta{sloppiness}.}
+% \label{tab:slightlysloppy}
+%
+% \newcommand*{\tolerancemark}{\tablenotemark{\dag}}%
+% \newcommand*{\scaledmark}{\tablenotemark{\ddag}}%
+%
+% \begin{suspendshortverb}
+% \begin{tabfigures}
+% \begin{tabular}{@{}ccccl@{}}
+% \toprule
+% \meta{sloppiness} & \cs{toler-} & \cs{hfuzz} & \cs{emergency-} & Comment \\
+% {} & \code{ance} & \cs{vfuzz} & \code{stretch}~\(G\) & \\
+% {} & & pt & em & \\
+% \midrule
+% 0 & \hphantom{0}200\hphantom{\tolerancemark} & .1\hphantom{0} & 0\hphantom{.000\scaledmark} & \TeX: \verb+\fussy+ \\
+% 1 & \hphantom{0}330\tolerancemark & .15 & \hphantom{0}.375\scaledmark & default \\
+% 2 & \hphantom{0}530\tolerancemark & .2\hphantom{0} & \hphantom{0}.75\scaledmark\hphantom{0} & \\
+% 3 & \hphantom{0}870\tolerancemark & .25 & 1.125\scaledmark & \\
+% 4 & 1410\tolerancemark & .3\hphantom{0} & 1.5\scaledmark\hphantom{00} & \\
+% 5 & 2310\tolerancemark & .35 & 1.875\scaledmark & \\
+% 6 & 3760\tolerancemark & .4\hphantom{0} & 2.25\scaledmark\hphantom{0} & \\
+% 7 & 6130\tolerancemark & .45 & 2.625\scaledmark & \\
+% \(\ge\)\:8 & 9999\hphantom{\tolerancemark} & .5\hphantom{0} & 3\hphantom{.000\scaledmark} & \TeX: \verb+\sloppy+ \\
+% \bottomrule
+% \end{tabular}
+% \end{tabfigures}
+% \end{suspendshortverb}
+%
+% \begin{tablenotes}
+% \tolerancemark\enspace
+% All intermediate levels set \(\cs{pretolerance} = \cs{tolerance} / 2\).
+%
+% \scaledmark\enspace
+% The intermediate levels scale the amount of available glue~\(G\) (indicated in column~4
+% of the table) for \cs{emergencystretch} with the actual line length, this means, in these
+% levels
+% \begin{equation*}
+% \cs{emergencystretch} = G \times \frac{\cs{linewidth}}{\cs{textwidth}}.
+% \end{equation*}
+% to prevent excessive stretchability in narrow lines.
+% \end{tablenotes}
+% \end{table}
+%
+% Environment~|slightlysloppypar|\oarg{sloppiness} mimics \LaTeX's~\code{sloppypar}, while
+% offering the flexibility of~\cs{slightlysloppy}.
+%
+% \begin{usecases}
+% Drop-in replacement for \cs{sloppy}, whether explicit or implicit (think of
+% \cs{parbox}).~\visualpar Initial paragraphs in theorem environments (e.\,g., as defined by
+% \packagename{amsmath} or \packagename{amsthm}), where the theorem~head already takes a lot
+% of space.~\visualpar Bibliographies as environment~\code{thebibliography} sets~\cs{sloppy}.
+% \end{usecases}
+%
+%
+% \FloatBarrier
+% \subsection{Vertically Partially-Tied Paragraphs}\label{sec:vtie-paragraph}\index{paragraph>vertically tied}
+%
+% \LaTeX{} provides several macros and environments to tie material vertically~-- most
+% prominently |samepage| and |minipage|.\footnote{A valuable complement to these is
+% package~\packagename{needspace}~\cite{package:needspace} which takes a different approach and
+% reliably works in \emph{mixed} horizontal and vertical mode situations.}
+% \packagename{Typog's} macros and environments constitute more sophisticated but weaker forms
+% of these. They tie only the first or last couple of lines in a paragraph while the rest of
+% the paragraph gets broken into pages by \TeX{} in the usual way.
+%
+% The macros and environments described in this section locally set \eTeX{} penalty
+% arrays~\cite[Sec.~3.8]{package:etex}. In addition the environments~\code{vtietoppar},
+% \code{vtiebotpar}, and~\code{vtiebotdisptoppar} explicitly issue a \cs{par} at the end of the
+% group.
+%
+% \DescribeMacro{\vtietop}
+% \DescribeEnv{vtietoppar}
+% Avoid a club\index{forlorn line>club} line in each partial paragraph.
+%
+% \begin{synopsis}\label{syn:vtietop}\label{syn:vtietoppar}
+% \cs{vtietop}\oarg{number-of-lines} \\[\smallskipamount]
+% \cs{begin}|{vtietoppar}|\oarg{number-of-lines}
+% \dots{}
+% \cs{end}|{vtietoppar}|
+% \end{synopsis}
+%
+% Vertically tie the first \meta{number\hyp{}of\hyp{}lines} in a paragraph. Zero or one for
+% \meta{number\hyp{}of\hyp{}lines} are no-ops. Up to nine lines can be fused. The default is
+% to link three lines.
+%
+% \begin{usecases}
+% String together the first paragraph right after a sectioning command.~\visualpar Tie the
+% first line of an itemized, enumerated, or a description list\index{list} with the paragraph
+% following~\cs{item}.
+% \end{usecases}
+%
+% \noindent
+% \DescribeMacro{\splicevtietop}
+% Inside of a \code{list} a one-off solution simply concatenates \cs{item}[\dots]\cs{vtietop}
+% to fuse the line with the \code{item\#}, the representation of the \code{enum\#}, or the
+% description term with the first paragraph. For a systematic use prefer \cs{splicevtietop}
+% and apply it as the first thing in the \code{list}~body.
+%
+% \begin{synopsis}\label{syn:splicevtietop}
+% \cs{splicevtietop}\oarg{number-of-lines}
+% \end{synopsis}
+%
+% Use this macro \emph{inside} of a \code{list}-like environment to equip each \cs{item} with
+% \cs{vtietop}\oarg{number-of-lines}. The default \meta{number-of-lines} is three as for any
+% of the \code{vtie\dots}~functions.
+%
+% Example for a \code{description}~list and plain \LaTeX:
+%
+% \begin{codeexample}
+% 12\=\kill
+% \cs{begin}\{description\} \\
+% \> \cs{splicevtietop}[2] \\
+% \> \cs{item}[...] \\
+% \cs{end}\{description\}
+% \end{codeexample}
+%
+% Alternatively with package~\packagename{enumitem}~\cite{package:enumitem}:
+%
+% \begin{codeexample}
+% 12\=\kill
+% \cs{begin}\= \{description\}[first=\cs{splicevtietop[2]}] \\
+% \> \cs{item}[...] \\
+% \cs{end}\{description\}
+% \end{codeexample}
+%
+% \noindent
+% or shorter and with the default \meta{number-of-lines},~3, using the \packagename{enumitem}
+% style\footnote{The documentation of \packagename{enumitem} prosaically calls them
+% \singlequotes{keys} (Section~3) not \singlequotes{styles}.}~\code{vtietop}:
+%
+% \DescribeEnumItemKey{vtietop}
+% \begin{codeexample}
+% \cs{usepackage}\{enumitem\} \\
+% \cs{begin}\= \{description\}[vtietop] \\
+% ~~\cs{item}[...] \\
+% \cs{end}\{description\}
+% \end{codeexample}
+%
+% \medskip
+%
+% \noindent
+% \DescribeMacro{\vtiebot}
+% \DescribeEnv{vtiebotpar}
+% Avoid a widow\index{forlorn line>widow} line in each partial paragraph.
+%
+% \begin{synopsis}\label{syn:vtiebot}\label{syn:vtiebotpar}
+% \cs{vtiebot}\oarg{number-of-lines} \\[\smallskipamount]
+% \cs{begin}|{vtiebotpar}|\oarg{number-of-lines}
+% \dots{}
+% \cs{end}|{vtiebotpar}|
+% \end{synopsis}
+%
+% Vertically tie the last \meta{number\hyp{}of\hyp{}lines} in a paragraph. Zero or one for
+% \meta{number\hyp{}of\hyp{}lines} are no-ops. Up to nine lines can be fused. The default is
+% to link three lines.
+%
+% \noindent
+% \DescribeEnv{vtiebotdisp}
+% Avoid a display widow\index{forlorn line>display widow} line in each partial paragraph.
+%
+% \begin{synopsis}\label{syn:vtiebotdisp}\label{syn:vtiebotdisppar}
+% \cs{begin}|vtiebotdisp|\oarg{before-disp-number-of-lines} \\
+% \hspace*{1em}\dots \\
+% \cs{end}|{vtiebotdisp}|
+% \end{synopsis}
+%
+% Vertically tie the last \meta{before\hyp{}disp\hyp{}number\hyp{}of\hyp{}lines} in a paragraph
+% before a display. Zero or one for \meta{before\hyp{}disp\hyp{}number\hyp{}of\hyp{}lines} are
+% no-ops. Up to nine lines can be fused. The default is to link three lines.
+%
+% To use the function bracket the paragraph before the display (the one that needs protection)
+% and the associated displayed math:
+%
+% \begin{codeexample}
+% \cs{begin}\{vtiebotdisp\} \\
+% ~~\% vertically tied paragraph before the math display \\
+% ~~\cs{begin}\{equation\} \\
+% ~~~~\% math \\
+% ~~\cs{end}\{equation\} \\
+% \cs{end}\{vtiebotdisp\}
+% \end{codeexample}
+%
+% \DescribeEnv{vtiebotdisptoppar}
+% Avoid a display widow, compound the display with its preceding \emph{and} following
+% paragraph, and avoid a club line in the paragraph right after the display.
+%
+% \begin{synopsis}\label{syn:vtiebotdisptop}\label{syn:vtiebotdisptoppar}
+% \begin{tabbing}
+% \cs{begin}|{vtiebotdisptoppar}|\= \oarg{before-disp-number-of-lines} \\
+% \> \oarg{after-disp-number-of-lines} \\
+% \hspace*{1em}\dots \\
+% \cs{end}|{vtiebotdisptoppar}|
+% \end{tabbing}
+% \end{synopsis}
+%
+% Vertically tie the last \meta{before\hyp{}disp\hyp{}number\hyp{}of\hyp{}lines} in the
+% paragraph before a display and the first
+% \meta{after\hyp{}disp\hyp{}number\hyp{}of\hyp{}lines} in the paragraph after the display.
+% Moreover, turn the paragraphs and the display into an un-breakable unit.\footnote{The
+% paragraphs and the display are concreted together by setting both \cs{predisplaypenalty}
+% and~\cs{postdisplaypenalty} to~10000.}
+%
+% Zero or one for \meta{before-disp-number\hyp{}of\hyp{}lines} as well as
+% \meta{after\hyp{}disp\hyp{}number\hyp{}of\hyp{}lines} are no-ops for the respective
+% paragraph. Up to nine lines each can be fused.
+%
+% Both optional arguments default to three. If only the first argument is given the second
+% acquires the same value.
+%
+%
+% To use the function bracket the paragraphs before and after the display:
+%
+% \begin{codeexample}
+% \cs{begin}\{vtiebotdisptoppar\} \\
+% ~~\% vertically tied paragraph before the math display \\
+% ~~\cs{begin}\{equation\} \\
+% ~~~~\% math \\
+% ~~\cs{end}\{equation\} \\
+% ~~\% vertically tied paragraph after the math display \\
+% \cs{end}\{vtiebotdisptoppar\}
+% \end{codeexample}
+%
+% \smallskip
+%
+% \noindent
+% See also \cref{sec:fill-last-line-gp-environments} for other methods to avoid club or widow
+% lines.
+%
+% \begin{typoginspectpar}{partial-paragraphs}
+% \setlength{\smoothraggedrightragwidth}{8pt}
+% \paragraph{Partial Paragraphs And Counting Lines.} The top-of-paragraph ties, \cs{vtietop}
+% and \code{vtietoppar} count \meta{number\hyp{}of\hyp{}lines} from the beginning of every
+% partial paragraph. Each displayed math in the paragraph resets the count. The
+% bottom-paragraph ties, \cs{vtiebot}, \code{vtiebotpar}, \cs{vtiebotdisp}, and
+% \code{vtiebotdisppar} count backward from the end of each partial paragraph. Again, each
+% displayed math in the paragraph resets the count. According to \TeX's rules, a displayed
+% math formula always is counted as \emph{three} lines no matter its contents.
+% \Cref{tab:partial-paragraph-line-counts} summarizes these rules with the help of an
+% example.
+% \end{typoginspectpar}
+%
+% \begin{table}
+% \centering
+% \caption[Partial paragraph line counts]
+% {Exemplary, eight-line paragraph compounded of two partial paragraphs of three and
+% two lines and a displayed math formula of arbitrary size sandwiched in between.}
+% \label{tab:partial-paragraph-line-counts}
+%
+% \newcommand*{\clubmark}{\tablenotemark{\dag}}
+% \newcommand*{\widowmark}{\tablenotemark{\ddag}}
+%
+% \begin{tabfigures}
+% \begin{tabular}{@{}clcc@{}}
+% \toprule
+% Continuous & Example & \cs{vtietop}\clubmark & \cs{vtiebot}\widowmark \\
+% Line Number & Contents & Count & Count \\
+% \midrule
+% 1 & Text line\textsubscript{1} & 1 & 3 \\
+% 2 & Text line\textsubscript{2} & 2 & 2 \\
+% 3 & Text line\textsubscript{3} & 3 & 1 \\
+% 4 & & & \\
+% 5 & \(\smash{\Biggr\}}\) \parbox[c][0pt]{3.5em}{Display \\[-.12em] math} & & \\
+% 6 & & & \\
+% 7 & Text line\textsubscript{4} & 1 & 2 \\
+% 8 & Text line\textsubscript{5} & 2 & 1 \\
+% \bottomrule
+% \end{tabular}
+% \end{tabfigures}
+%
+% \begin{tablenotes}
+% \clubmark\enspace
+% This is \eTeX's counting scheme of \cs{clubpenalties}; it also holds for
+% \code{vtietoppar}.
+%
+% \widowmark\enspace
+% The same counting scheme also holds for \code{vtiebotpar}, \cs{vtiebotdisp},
+% and~\code{vtiebotdisppar}. It is implied by \eTeX's line counts of \cs{widowpenalties}
+% and~\cs{displaywidowpenalties} on which the functions of this package are based.
+% \end{tablenotes}
+% \end{table}
+%
+% \begin{tips}
+% \begin{itemize}[notopsep]
+% \item The environments can be combined to arrive at paragraphs that simultaneously are
+% protected against club lines and (display) widow lines.
+%
+% \item For very long derivations that are not interrupted and thus made breakable with the
+% help of \cs{intertext}\footnote{Introduced in
+% package~\packagename{amsmath}~\cite{package:amsmath}.} or
+% \cs{shortintertext}\footnote{Defined in
+% package~\packagename{mathtools}~\cite{package:mathtools}.} it is desirable to make the
+% display breakable. This is achieved with \cs{allowdisplaybreaks} or the
+% environment~\code{breakabledisplay} which will be described
+% in~\cref{sec:breakable-display}.\specialsectionendhere
+% \end{itemize}
+% \end{tips}\unskip
+%
+% \begin{usecases}
+% Fix widows and orphans, e.\,g., those turned up by
+% package~\packagename{widows-and-orphans}~\cite{package:widows-and-orphans}.~\visualpar
+% Extend the typographic convention of \doublequotes{three to four lines instead of a single
+% club or widow line} to a context-dependent number of lines that tries to keep all (well,
+% dream on) the information together the reader needs at that particular point.
+% \end{usecases}
+%
+%
+% \FloatBarrier
+% \subsection{Breakable Displayed Equations}\label{sec:breakable-display}\index{page break}
+%
+% \DescribeEnv{breakabledisplay}
+% Package~\packagename{amsmath}\index{amsmath=\packagename{amsmath} (package)} offers
+% \cs{allowdisplaybreaks} to render displayed equations breakable at each of their lines.
+% Environment~\cs{breakabledisplay} is a wrapper around it which limits the macro's influence
+% to the environment. Furthermore, the default \meta{level} of \code{breakabledisplay} is~3
+% whereas that of \cs{allowdisplaybreaks} is~4. This makes \code{breakabledisplay} less eager
+% to break a displayed equation and thus better suited to full automation of the page-breaking
+% process.
+%
+% \begin{synopsis}\label{syn:breakabledisplay}
+% \cs{begin}|{breakabledisplay}|\oarg{level} \\
+% \hspace*{1em}\dots \\
+% \cs{end}|{breakabledisplay}|
+% \end{synopsis}
+%
+% Environment~|breakabledisplay| simply passes on \meta{level} to \cs{allowdisplaybreaks}.
+% \Cref{tab:allowdisplaybreaks-penalties} shows the default penalties that
+% \packagename{amsmath} associated with each of the \meta{level}s.
+%
+% \begin{table}
+% \centering
+% \caption[Env.~\code{breakabledisplay} and \cs{interdisplaylinepenalty}]%
+% {Penalties~\cs{interdisplaylinepenalty} associated with different \meta{level}s of
+% environment~\code{breakabledisplay}. Depending on the version of
+% package~\packagename{amsmath} the actual penalties may differ.}
+% \label{tab:allowdisplaybreaks-penalties}
+%
+% \newcommand*{\clubmark}{\tablenotemark{\dag}}
+%
+% \begin{tabfigures}
+% \begin{tabular}{@{}ccl@{}}
+% \toprule
+% \meta{level} & \cs{interdisplay-} & Comment \\
+% {} & \code{linepenalty} & \\
+% \midrule
+% 0 & 10000 & no operation \\
+% 1 & \hphantom{0}9999 & \\
+% 2 & \hphantom{0}6999 & \\
+% 3 & \hphantom{0}2999 & default \\
+% 4 & \hphantom{0000}0\rlap{\clubmark} & \\
+% \bottomrule
+% \end{tabular}
+% \end{tabfigures}
+%
+% \begin{tablenotes}
+% \clubmark\enspace
+% This is the default of \cs{allowdisplaybreaks}.
+% \end{tablenotes}
+% \end{table}
+%
+% \begin{tips}
+% \begin{itemize}[notopsep]
+% \item Terminating a line with \code{\textbackslash\textbackslash*} inhibits a break after
+% this line.
+%
+% \item A \cs{displaybreak}\oarg{level} can be set for \emph{each} line of the displayed
+% equation separately. \LaTeX{} resumes with the original value of
+% \cs{interdisplaylinepenalty} in the following lines.
+%
+% \item If a discretionary break of the displayed equation is to be accompanied with some aid
+% for the reader, team \cs{intertext} (or \cs{shortintertext}) with \cs{displaybreak} as,
+% e.\,g.,
+%
+% \begin{codeexample}
+% \cs{newcommand*}\{\cs{discretionarydisplaybreak}\} \\
+% 12\=3\=\kill
+% \> \{ \> \cs{intertext}\{\cs{hfill} Eq.\textasciitilde cont.\textasciitilde on next page.\}\% \\
+% \> \> \cs{displaybreak} \\
+% \> \> \cs{intertext}\{Eq.\textasciitilde cont.\textasciitilde
+% from prev.\textasciitilde page.\cs{hfill}\}\}\specialsectionendhere
+% \end{codeexample}
+% \end{itemize}
+% \end{tips}\unskip
+%
+% \begin{usecases}
+% Extremely long derivations without interspersed \cs{intertext} or
+% \cs{shortintertext}.~\visualpar Draft phase of a document.
+% \end{usecases}
+%
+%
+% \FloatBarrier
+% \clearpage
+% \subsection{\packagename{Setspace} Front-End}\label{sec:setspace-frontend}
+%
+% Package \packagename{setspace} \cite{package:setspace} is a base hit when it comes to
+% consistently setting the line skip for a document via the macro~\cs{setstretch}. The
+% interface of \cs{setstretch} though is unintuitive as it asks for an obscure
+% factor.\fontsizeinfo{setspacefontsizeinfo}\marginnote{In the copy of this document gets
+% typeset with~\setspacefontsizeinfo*.} The \LaTeX{} user however prefers to keep her eyes on
+% the ball and set the line skip\index{baseline skip} directly (e.\,g.~12.5pt) or the lines'
+% leading\index{leading} to a length or percentage of the font's size.\footnote{To find out
+% about the current font's size and the \cs{baselineskip} in printable form check out
+% \cref{sec:font-information} on \cpageref{sec:font-information}.} This is where the following
+% macros go to bat.
+%
+% \begin{important}
+% All macros that are introduced in this section rely on macro~\cs{setstretch}. So
+% package~\packagename{setspace} must have been loaded with
+%
+% \begin{codeexample}
+% \cs{usepackage}\{setspace\}
+% \end{codeexample}
+%
+% \noindent
+% in the document preamble.
+% \end{important}
+%
+% \DescribeMacro{\setbaselineskip}
+% \sinceversion{Since v0.3}
+% Set the line skip using an absolute length -- technically: a |dimen|.
+%
+% \begin{synopsis}\label{syn:setbaselineskip}
+% \cs{setbaselineskip}\marg{baseline-skip}
+% \end{synopsis}
+%
+% Set the \cs{baselineskip} to \meta{baseline-skip}. This is what a non-initiated user expects
+% from the assignment
+%
+% \begin{codeexample}
+% \cs{setlength}\{\cs{baselineskip}\}\{\meta{baseline-skip}\}
+% \end{codeexample}
+%
+% The \meta{baseline-skip} can contain a rubber (stretch/shrink) component, however,
+% \cs{setbaselineskip} will discard of it and issue a warning that only the fixed-length part
+% will be used in the computation.
+%
+% \begin{example}
+% Let us assume we want to lighten the gray value of the copy a tad with a \cs{baselineskip}
+% increased (from e.g.~12pt) to~12.5pt. To this end we say:
+%
+% \begin{codeexample}
+% \cs{setbaselineskip}\{12.5pt\}\specialsectionendhere
+% \end{codeexample}
+% \end{example}
+%
+% \begin{tip}
+% To set the \cs{baselineskip} relative to the current value use
+%
+% \begin{codeexample}
+% \cs{setbaselineskip}\{\meta{factor}\cs{baselineskip}\}
+% \end{codeexample}
+%
+% \noindent
+% where \meta{factor} is a floating-point number.
+% \end{tip}
+%
+% \DescribeMacro{\resetbaselineskip}
+% \sinceversion{Since v0.3}
+% Reset the \cs{baselineskip} to its original value.
+%
+% \begin{synopsis}\label{syn:resetbaselineskip}
+% \cs{resetbaselineskip}
+% \end{synopsis}
+%
+% This macro simply expands to |\setstretch{1}|. So, we rely on \packagename{setspace}'s
+% notion of what is a single-line \cs{baselineskip}.
+%
+%
+% \DescribeMacro{\setbaselineskippercentage}
+% \sinceversion{Since v0.3}
+% Set the \cs{baselineskip} with a relative value calculated as a percentage of the current
+% font's design size.
+%
+% \begin{synopsis}\label{syn:setbaselineskippercentage}
+% \cs{setbaselineskippercentage}\marg{baselineskip-percentage}
+% \end{synopsis}
+%
+% Set \cs{baselineskip} to \(\cs{typogfontsize} \times \meta{baselineskip-percentage} / 100\).
+%
+% \begin{example}
+% We modify the previous example and assume a font design size of 10pt, but now write
+%
+% \begin{codeexample}
+% \cs{setbaselineskippercentage}\{125\}
+% \end{codeexample}
+%
+% \noindent
+% which sets \cs{baselineskip} to \(10\text{pt} \times 125 / 100 = 12.5\text{pt}\).
+% \end{example}
+%
+% \DescribeMacro{\setleading}
+% \sinceversion{Since v0.3}
+% Set the \cs{baselineskip} with an absolute length that gets \emph{added to} \cs{typogfontsize}.
+%
+% \begin{synopsis}\label{syn:setleading}
+% \cs{setleading}\marg{leading}
+% \end{synopsis}
+%
+% Set the \cs{baselineskip} to \cs{typogfontsize} plus \meta{leading}. Note that
+% \meta{leading} can be negative, e.\,g.~to set solid.
+%
+% \begin{example}
+% Another solution of the previous example, given a font design size of 10pt is to write
+%
+% \begin{codeexample}
+% \cs{setleading}\{2.5pt\}
+% \end{codeexample}
+%
+% \noindent
+% which sets \cs{baselineskip} to \(10\text{pt} + 2.5\text{pt} = 12.5\text{pt}\).
+% \end{example}
+%
+% \DescribeMacro{\setleadingpercentage}
+% \sinceversion{Since v0.3}
+% Set the \cs{baselineskip} to \cs{typogfontsize} \emph{plus} a relative value calculated as a
+% percentage of \cs{typogfontsize}.
+%
+% \begin{synopsis}\label{syn:setleadingpercentage}
+% \cs{setleadingpercentage}\marg{leading-percentage}
+% \end{synopsis}
+%
+% Set \cs{baselineskip} to \(\cs{typogfontsize} \times (1 + \meta{leading-percentage} / 100)\).
+%
+% \begin{example}
+% We modify the previous example and again assume a font design size of 10pt, but now write
+%
+% \begin{codeexample}
+% \cs{setleadingpercentage}\{25\}
+% \end{codeexample}
+%
+% \noindent
+% which sets \cs{baselineskip} to \(10\text{pt} \times (1 + 25 / 100) = 12.5\text{pt}\).
+% \end{example}
+%
+% \smallskip
+%
+% \DescribeLaTeXDimen{\typogfontsize}
+% \sinceversion{Since v0.3}
+% The macros \cs{setbaselineskippercentage}, \cs{setleading}, and \cs{setleadingpercentage} all
+% depend on the font size. By changing \cs{typogfontsize} they can be configured for different
+% font sizes.
+%
+% The length \cs{typogfontsize} gets initialized at the end of the preamble to the default
+% font's quad size:\footnote{For an overview of the various
+% \cs{fontdimen}\meta{number}~parameters consult \cref{tab:fontdimen} on
+% \cpageref{tab:fontdimen}.}
+%
+% \begin{codeexample}
+% \cs{typogfontsize}=\cs{fontdimen6}\cs{font}
+% \end{codeexample}
+%
+% \noindent
+% which is also called its \doublequotes{nominal size} or its \doublequotes{design size}. This
+% assignment can be repeated at any point in the document to record a reference font's size.
+% To set just \cs{typogfontsize} without changing the current font, encapsulate the font change
+% in a group and export the new value:
+%
+% \begin{codeexample}
+% \cs{begingroup} \\
+% ~~\cs{usefont}\{T1\}\{Arvo-TLF\}\{m\}\{n\}\cs{selectfont} \\
+% ~~\cs{normalsize} \\
+% ~~\cs{global}\cs{typogfontsize}=\cs{fontdimen6}\cs{font} \\
+% \cs{endgroup}
+% \end{codeexample}
+%
+% An alternative to relying on the design size is using the actual size of an uppercase letter:
+%
+% \begin{codeexample}
+% \cs{settoheight}\{\cs{typogfontsize}\}\{CEMNORSUVWXZ\}
+% \end{codeexample}
+%
+% \noindent
+% With \cs{typogfontsize} defined this way it becomes trivial to set solid:
+%
+% \begin{codeexample}
+% \cs{setleading}\{0pt\}
+% \end{codeexample}
+%
+% \noindent
+% or
+%
+% \begin{codeexample}
+% \cs{setleadingpercentage}\{0\}
+% \end{codeexample}
+%
+% \begin{tip}
+% All macros in this section actually accept expressions of their respective argument types,
+% though the sick rules of \TeX{} \meta{dimen}- and \meta{skip}-expressions apply.
+%
+% Here are some forms that do work:
+%
+% \begin{codeexample}
+% \cs{setbaselineskip}\{12pt + 0.6667pt\} \\
+% \cs{setbaselineskip}\{12pt * 110 / 100\} \\
+% \cs{setbaselineskippercentage}\{100 + 25\} \\
+% \cs{setleading}\{1pt / -2.0\} \\
+% \cs{setleadingpercentage}\{10 - 25 / 2\}\specialsectionendhere
+% \end{codeexample}
+% \end{tip}
+%
+%
+% \FloatBarrier
+% \clearpage
+% \subsection{Smooth Ragged}\label{sec:smooth-ragged}\index{ragged right}
+%
+% \begin{whittyquote}
+% The attention someone gives \\
+% to what he or she makes \\
+% is reflected in the end result, \\
+% whether it is obvious or not. \\
+% \capitalemdash*~\propername{Erik Spiekermann}
+% \end{whittyquote}
+%
+% \noindent
+% Package \packagename{typog} implements a novel approach to typeset ragged paragraphs.
+% Instead of setting the glue inside of a paragraph to zero and letting the line-widths vary
+% accordingly~\cite{wermuth:2020} we prescribe the line-widths with the \cs{parshape}~primitive
+% and leave alone the stretchability or shrinkability of the glue.
+%
+% \begin{slightlysloppypar}
+% \hangindent=5.5em\hangafter=-5
+% \DescribeEnv{smoothraggedrightshapetriplet}
+% \DescribeEnv{smoothraggedrightshapequintuplet}
+% \DescribeEnv{smoothraggedrightshapeseptuplet}
+% We introduce three environments that allow for setting three, five, or seven different
+% line-lengths: \code{smoothraggedrightshapetriplet},
+% \code{smoothraggedrightshapequintuplet}, and \code{smoothraggedrightshapeseptuplet}; they
+% work for paragraphs up to
+% \makeatletter
+% \typog@triplet@max@lines, \typog@quintuplet@max@lines, or \typog@septuplet@max@lines~lines,
+% \makeatother
+% respectively.
+% \end{slightlysloppypar}
+%
+%
+% \begin{maxipage}
+% \begin{synopsis}\label{syn:smoothraggedrightshapetriplet}\label{syn:smoothraggedrightshapequintuplet}\label{syn:smoothraggedrightshapeseptuplet}
+% \cs{begin}|{smoothraggedrightshapetriplet}|\oarg{option\dots}\marg{width1}\marg{width2}\marg{width3} \\
+% \hspace*{1em}\dots \\
+% \cs{end}|{smoothraggedrightshapetriplet}| \\[\smallskipamount]
+% \cs{begin}|{smoothraggedrightshapequintuplet}|\oarg{option\dots}\marg{width1}\marg{width2}\dots\marg{width5} \\
+% \hspace*{1em}\dots \\
+% \cs{end}|{smoothraggedrightshapequintuplet}| \\[\smallskipamount]
+% \cs{begin}|smoothraggedrightshapeseptuplet|\oarg{option\dots}\marg{width1}\marg{width2}\dots\marg{width7}
+% \hspace*{1em}\dots \\
+% \cs{end}|{smoothraggedrightshapeseptuplet}|
+% \end{synopsis}
+% \end{maxipage}
+%
+% The environments take \(N\) = 3, 5, or~7 mandatory line-width parameters, where each
+% \meta{width\itcorr{3}I}, \(I = 1,\dots, N\) is a skip, i.\,e.,~a dimen that can include some
+% glue.
+%
+%
+% \paragraph{Options}
+%
+% \begin{description}[style=nextline]
+% \item[|leftskip=|\meta{dim}]
+% Set the left margin for the smooth ragged paragraph to \meta{dim}. Similar to the \TeX{}
+% parameter~\cs{leftskip}.
+%
+% \item[|parindent=|\meta{dim}]
+% Set the first-line indent for the smooth ragged paragraph to \meta{dim}. Similar to the
+% \TeX{} parameter~\cs{parindent}.
+% \end{description}
+%
+% \noindent
+% \DescribeEnv{smoothraggedrightpar}
+% Environment~|smoothraggedrightpar| builds upon the three generators. It typesets a single
+% paragraph with a given \meta{ragwidth} of the ragged, right margin, where the rag~width is
+% the length-difference of the longest and the shortest lines.
+%
+% \begin{synopsis}\label{syn:smoothraggedrightpar}
+% \cs{begin}|{smoothraggedrightpar}|\oarg{option\dots} \\
+% \hspace*{1em}\dots \\
+% \cs{end}|{smoothraggedrightpar}|
+% \end{synopsis}
+%
+% The line lengths equally divide the ragged margin, i.\,e., they are arithmetic means with
+% respect to the generator size.
+%
+% \iffalse
+%<*smoothparshapes>
+prologues := 3;
+
+def draw_filled_rectangle(expr lower_left, upper_right, color) =
+ fill lower_left -- (xpart upper_right, ypart lower_left) --
+ upper_right -- (xpart lower_left, ypart upper_right) --
+ cycle
+ withcolor color;
+enddef;
+
+
+u := 100;
+
+em := 10;
+linelength := 2u;
+baselineskip := 1.2em;
+parskip := 3;
+parindent := 2.5em;
+ragwidth := 2em;
+
+cmykcolor line_color;
+line_color := (.08, 0, 0, .18); % cold silver
+
+color customred[];
+customred[1] := (.890, .282, .282);
+customred[2] := (.831, .110, .110);
+customred[3] := (.686, .043, .043);
+customred[4] := (.569, .000, .000);
+customred[5] := (.420, .000, .000);
+
+color margin_color;
+margin_color := customred[2];
+
+
+beginfig(1); % triplet
+ y := 0;
+ draw_filled_rectangle((0, y), (linelength - ragwidth, y + 1em), line_color); % (1)
+ y := y - baselineskip;
+ draw_filled_rectangle((0, y), (linelength, y + 1em), line_color); % (3)
+ y := y - baselineskip;
+ draw_filled_rectangle((0, y), (linelength - ragwidth/2, y + 1em), line_color); % (2)
+ y := y - baselineskip;
+ draw_filled_rectangle((0, y), (linelength - ragwidth, y + 1em), line_color); % (1)
+ y := y - baselineskip;
+ draw_filled_rectangle((0, y), (linelength, y + 1em), line_color); % (3)
+ y := y - baselineskip;
+ draw_filled_rectangle((0, y), (linelength - ragwidth/2, y + 1em), line_color); % (2)
+
+ draw_filled_rectangle((-.667em, 1em), (-.333em, -5baselineskip), margin_color);
+ draw_filled_rectangle((linelength + .333em, 1em), (linelength + .667em, -5baselineskip), margin_color);
+endfig;
+
+
+beginfig(2); % quintuplet
+ y := 0;
+ draw_filled_rectangle((0, y), (linelength - .75ragwidth, y + 1em), line_color); % (2)
+ y := y - baselineskip;
+ draw_filled_rectangle((0, y), (linelength, y + 1em), line_color); % (5)
+ y := y - baselineskip;
+ draw_filled_rectangle((0, y), (linelength - .5ragwidth, y + 1em), line_color); % (3)
+ y := y - baselineskip;
+ draw_filled_rectangle((0, y), (linelength - .25ragwidth, y + 1em), line_color); % (4)
+ y := y - baselineskip;
+ draw_filled_rectangle((0, y), (linelength - ragwidth, y + 1em), line_color); % (1)
+ y := y - baselineskip;
+ draw_filled_rectangle((0, y), (linelength - .75ragwidth, y + 1em), line_color); % (2)
+ y := y - baselineskip;
+ draw_filled_rectangle((0, y), (linelength, y + 1em), line_color); % (5)
+ y := y - baselineskip;
+ draw_filled_rectangle((0, y), (linelength - .5ragwidth, y + 1em), line_color); % (3)
+ y := y - baselineskip;
+ draw_filled_rectangle((0, y), (linelength - .25ragwidth, y + 1em), line_color); % (4)
+ y := y - baselineskip;
+ draw_filled_rectangle((0, y), (linelength - ragwidth, y + 1em), line_color); % (1)
+
+ draw_filled_rectangle((-.667em, 1em), (-.333em, -9baselineskip), margin_color);
+ draw_filled_rectangle((linelength + .333em, 1em), (linelength + .667em, -9baselineskip), margin_color);
+endfig;
+
+
+beginfig(3); % septuplet
+ y := 0;
+ draw_filled_rectangle((0, y), (linelength - .6667ragwidth, y + 1em), line_color); % (3)
+ y := y - baselineskip;
+ draw_filled_rectangle((0, y), (linelength - .1667ragwidth, y + 1em), line_color); % (6)
+ y := y - baselineskip;
+ draw_filled_rectangle((0, y), (linelength - ragwidth, y + 1em), line_color); % (1)
+ y := y - baselineskip;
+ draw_filled_rectangle((0, y), (linelength - .3333ragwidth, y + 1em), line_color); % (5)
+ y := y - baselineskip;
+ draw_filled_rectangle((0, y), (linelength - .8333ragwidth, y + 1em), line_color); % (2)
+ y := y - baselineskip;
+ draw_filled_rectangle((0, y), (linelength, y + 1em), line_color); % (7)
+ y := y - baselineskip;
+ draw_filled_rectangle((0, y), (linelength - .5ragwidth, y + 1em), line_color); % (4)
+ y := y - baselineskip;
+ draw_filled_rectangle((0, y), (linelength - .6667ragwidth, y + 1em), line_color); % (3)
+ y := y - baselineskip;
+ draw_filled_rectangle((0, y), (linelength - .1667ragwidth, y + 1em), line_color); % (6)
+ y := y - baselineskip;
+ draw_filled_rectangle((0, y), (linelength - ragwidth, y + 1em), line_color); % (1)
+ y := y - baselineskip;
+ draw_filled_rectangle((0, y), (linelength - .3333ragwidth, y + 1em), line_color); % (5)
+ y := y - baselineskip;
+ draw_filled_rectangle((0, y), (linelength - .8333ragwidth, y + 1em), line_color); % (2)
+ y := y - baselineskip;
+ draw_filled_rectangle((0, y), (linelength, y + 1em), line_color); % (7)
+ y := y - baselineskip;
+ draw_filled_rectangle((0, y), (linelength - .5ragwidth, y + 1em), line_color); % (4)
+
+ draw_filled_rectangle((-.667em, 1em), (-.333em, -13baselineskip), margin_color);
+ draw_filled_rectangle((linelength + .333em, 1em), (linelength + .667em, -13baselineskip), margin_color);
+endfig;
+end
+%</smoothparshapes>
+% \fi
+%
+% \begin{itemize}[noindent]
+% \item
+% \begin{minipage}[t]{\linewidth}
+% The triplet generator repeats a \emph{short~line -- long~line -- middle-length~line}
+% sequence. Shown below are two complete cycles.
+%
+% \begin{center}
+% \includegraphics{smooth-parshapes-1.mps}
+% \end{center}
+% \end{minipage}
+%
+% \item
+% \begin{minipage}[t]{\linewidth}
+% The quintuplet generator varies the theme of the triplets and avoids the
+% \singlequotes{ladder} of lines~2\figuredash3\figuredash4 (or, if numbered by
+% cycle:~1.2\figuredash1.3\figuredash2.1) there. Shown here are two cycles.
+%
+% \begin{center}
+% \includegraphics{smooth-parshapes-2.mps}
+% \end{center}
+% \end{minipage}
+%
+% \item
+% \begin{minipage}[t]{\linewidth}
+% The septuplet generator uses a permutation that looks \singlequotes{random}. At least it
+% hides the boundaries of cycles well. Shown here are two of them.
+%
+% \begin{center}
+% \includegraphics{smooth-parshapes-3.mps}
+% \end{center}
+% \end{minipage}
+% \end{itemize}
+%
+% \noindent
+% \DescribeEnv{smoothraggedright}
+% Environment~|smoothraggedright| is the multi-paragraph version of
+% \code{smoothraggedrightpar}. It takes the same optional arguments.
+%
+% \begin{synopsis}\label{syn:smoothraggedright}
+% \cs{begin}|{smoothraggedright}|\oarg{option\dots} \\
+% \hspace*{1em}\dots \\
+% \cs{end}|{smoothraggedright}|
+% \end{synopsis}
+%
+%
+% \paragraph{Options}
+%
+% \begin{description}[style=nextline]
+% \item[|linewidth=|\meta{dim}]
+% Override the length of the longest line. The default line-width is \cs{linewidth}.
+% \end{description}
+%
+%
+% \paragraph{Global Parameters}
+%
+% \begin{description}[style=nextline]
+% \item[\cs{smoothraggedrightfuzzfactor}=\meta{factor}]
+% The environment adds glue to every line-width\footnote{The shortest line only gets
+% stretchability, the longest only receives shrinkability. All other lines are both
+% stretchable and shrinkable.} to achieve a more convincing \doublequotes{ragged appearance}
+% and to reduce the number of overfull lines. The algorithm divides the smooth margin into
+% 3, 5, or~7 parts depending on the chosen \cs{smoothraggedrightgenerator} (see below). The
+% \cs{smoothraggedrightfuzzfactor} is the amount of glue of each line expressed as a multiple
+% of the distance between the division points. The default of 1.0 means to add as much glue
+% such that the lines just do not overlap (assuming justification is feasible).
+%
+% \item[\cs{smoothraggedrightgenerator}]
+% Select a generator to use. Valid generator names:
+% \begin{itemize}[noitemsep]
+% \item |triplet|,
+% \item |quintuplet|,
+% \item |septuplet|.
+% \end{itemize}
+%
+% The default generator is |triplet|.
+%
+% \item[\cs{smoothraggedrightleftskip}=\meta{dim}]
+% Value for |leftskip| to pass to the generator. Default:~0pt.
+%
+% \item[\cs{smoothraggedrightparindent}=\meta{dim}]
+% Value for |parindent| to pass to the generator. Default:~0pt.
+%
+% \item[\cs{smoothraggedrightragwidth}=\meta{dim}]
+% Value for the width of the ragged right margin. Default:~2em.
+% \end{description}
+%
+% \begin{usecases}
+% Replacement for \cs{RaggedRight}~\cite{package:ragged2e}.~\visualpar Design alternative for
+% fully justified paragraphs if used with a small rag-width.
+% \end{usecases}
+%
+%
+% \addtocontents{toc}{\par\bigskip\hfill\textit{Table of Contents continued on next page.}}
+% \addtocontents{toc}{\clearpage}
+%
+%
+% \sectionfinish
+% \clearpage
+% \section{Other Packages for Fine \LaTeX~Typography}\label{sec:other-typography-packages}
+%
+% Many other packages help with getting better output from \LaTeX. Here is a list --~in
+% alphabetical order~-- of the ones the author considers particularly valuable.
+%
+% \sbox{\listlabelbox}{\packagename{microtype}}
+% \begin{description}[font=\normalfont, labelsep*=1em, labelwidth=\wd\listlabelbox, leftmargin=!]
+% \item[\packagename{enumitem}]
+% Flexible and consistent definition of all basic \LaTeX-list types plus inline
+% lists~\cite{package:enumitem}.
+%
+% \item[\packagename{geometry}]
+% Powerful and sophisticated setup of the page layout~\cite{package:geometry}. Best
+% accompanied by \packagename{layout}~\cite{package:layout} to visualize the page geometries.
+%
+% \item[\packagename{hyphenat}]
+% Hyphens that do not inhibit further auto-hyphenation of a compound
+% word~\cite{package:hyphenat}.
+%
+% \item[\packagename{microtype}]
+% Fine control of spacing, tracking, sidebearings, character protrusion into the margins,
+% font expansion, and much more~\cite{package:microtype}.
+%
+% See also \propername{Khirevich's} discussion~\cite{khirevich:2013}.
+%
+% \item[\packagename{ragged2e}]
+% Improved versions of environments |raggedleft|, |raggedright|, and
+% |center|~\cite{package:ragged2e}.
+%
+% \item[\packagename{setspace}]
+% Consistently set the document's line-spacing, i.\,e.,
+% \cs{baselineskip}~\cite{package:setspace}.
+% \end{description}
+%
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%
+% \MaybeStop{
+% \sectionfinish
+% \clearpage
+% \section{typog-grep}
+% \label{app:typog-grep}
+%
+% The companion program \programname{typog-grep} for analyzing the output of
+% \hyperref[syn:typoginspect]{\code{typoginspect}} and
+% \hyperref[syn:typoginspect]{\code{typoginspectpar}} has its own manual page. We reproduce
+% it here for completeness of the documentation.
+%
+% \begin{suspendshortverb}
+% \setlength{\parindent}{0pt}
+% \setlength{\parskip}{6.0pt plus 2.0pt minus .5pt}
+% \input typog-grep
+% \end{suspendshortverb}
+%
+% \sectionfinish
+% \clearpage
+% \phantomsection
+% \resetfancyhead
+% \addcontentsline{toc}{section}{Change History}
+% \PrintChanges
+%
+% \sectionfinish
+% \clearpage
+% \phantomsection
+% \addcontentsline{toc}{section}{References}
+% \begin{RaggedRight}
+% \begin{thebibliography}{88}
+% \bibitem{abrahams:2020}
+% \bibauthor{Abrahams, Paul~W.},
+% \bibauthor{Hargreaves, Kathryn~A.,} and
+% \bibauthor{Karl Berry}.
+% \bibtitle{\TeX{} for the Impatient}.
+% 2020,
+% \biburl{http://tug.ctan.org/info/impatient/book.pdf}.
+%
+% \bibitem{package:amsmath}
+% \bibauthor{American Mathematical Society} and the
+% \bibauthor{\LaTeXIII\ Project Team}.
+% \bibtitle{Package~\packagename{amsmath}}.
+% 2020,
+% \biburl{https://ctan.org/pkg/amsmath}.
+%
+% \bibitem{package:cite}
+% \bibauthor{Arseneau, Donald}.
+% \bibtitle{Package~\packagename{cite}}.
+% 2015,
+% \biburl{https://ctan.org/pkg/cite}.
+%
+% \bibitem{package:enumitem}
+% \bibauthor{Bezos, Javier}.
+% \bibtitle{Package~\packagename{enumitem}}.
+% 2019,
+% \biburl{https://ctan.org/pkg/enumitem}.
+%
+% \bibitem{package:babel}
+% \bibauthor{Bezos, Javier}.
+% \bibtitle{Package~\packagename{babel}}.
+% 2021,
+% \biburl{https://ctan.org/pkg/babel}.
+% The original author of package~\packagename{babel} was \bibauthor{J. L. Braams}.
+%
+% \bibitem{package:etex}
+% \bibauthor{Breitenlohner, Peter} and
+% the \bibauthor{\(\mathcal{N\kern-.1em\raisebox{-.2em}{T}\kern-.1emS}\)~Team}.
+% \bibtitle{\eTeX}.
+% 1998,
+% \biburl{https://mirrors.ctan.org/systems/doc/etex/etex_man.pdf}.
+%
+% \bibitem{carlisle:1996}
+% \bibauthor{Carlisle, David}.
+% \bibtitle{Russian Paragraph Shapes}.
+% Baskerville, 6(1), 13\figuredash15,
+% 1996,
+% \biburl{http://uk-tug-archive.tug.org/wp-installed-content/uploads/2008/12/61.pdf}.
+%
+% \bibitem{carlisle:2013}
+% \bibauthor{Carlisle, David}.
+% \bibtitle{What do different \cs{fontdimen<num>} mean}.
+% 2013\figuredash*1\figuredash*2,
+% \biburl{https://tex.stackexchange.com/questions/88991/what-do-different-fontdimennum-mean}.
+%
+% \bibitem{package:cleveref}
+% \bibauthor{Cubitt, Toby}.
+% \bibtitle{Package~\packagename{cleveref}}.
+% 2018,
+% \biburl{https://ctan.org/pkg/cleveref}.
+%
+% \bibitem{eijkhout:2007}
+% \bibauthor{Eijkhout, Victor}.
+% \bibtitle{\TeX\ By Topic, A Texnician's Reference}.
+% 2007,
+% \biburl{https://www.eijkhout.net/tex/tex-by-topic.html}.
+%
+% \bibitem{package:mathtools}
+% \bibauthor{H{\o}gholm, Morten},
+% \bibauthor{Madsen, Lars} and
+% the \bibauthor{\LaTeXIII\ Project Team}.
+% \bibtitle{Package~\packagename{mathtools}}.
+% 2020,
+% \biburl{https://ctan.org/pkg/mathtools}.
+%
+% \bibitem{khirevich:2013}
+% \bibauthor{Khirevich, Siarhei}.
+% \bibtitle{Tips on Writing a Thesis in \LaTeX}.
+% 2013,
+% \biburl{http://www.khirevich.com/latex/microtype}.
+%
+% \bibitem{knuth:1986}
+% \bibauthor{Knuth, Donald Ervin}.
+% \bibtitle{The \TeX{}book}.
+% Addison Wesley, Reading\kernedslash MA,
+% 1986.
+%
+% \bibitem{package:layout}
+% \bibauthor{McPherson, Kent}.
+% \bibtitle{Package~\packagename{layout}}.
+% 2014,
+% \biburl{https://ctan.org/pkg/layout}.
+% The package was converted to \LaTeXe\ by \bibauthor{J. L. Braams}
+% and modified by \bibauthor{H. Umeki}.
+%
+% \bibitem{middendorp:2014}
+% \bibauthor{Middendorp, Jan}.
+% \bibtitle{Shaping Text}.
+% \acronym{BIS}~publishers, Amsterdam,
+% 2014.
+%
+% \bibitem{mittelbach:2018c}
+% \bibauthor{Mittelbach, Frank}.
+% \bibtitle{Managing forlorn paragraph lines (a.\,k.\,a.~widows and orphans) in \LaTeX}.
+% TUGboat, 39(3), 246\figuredash251, 2018,
+% \biburl{https://tug.org/TUGboat/tb39-3/tb123mitt-widows.pdf}.
+%
+% \bibitem{package:widows-and-orphans}
+% \bibauthor{Mittelbach, Frank}.
+% \bibtitle{Package~\packagename{widows-and-orphans}}.
+% 2020,
+% \biburl{https://ctan.org/pkg/widows-and-orphans}.
+%
+% \bibitem{package:hyperref}
+% \bibauthor{Rahtz, Sebastian,} and \bibauthor{Frank Mittelbach}.
+% \bibtitle{Package~\packagename{hyperref}}.
+% 2020,
+% \biburl{https://ctan.org/pkg/hyperref}.
+% The package is maintained by the \LaTeXIII~Project Team.
+%
+% \bibitem{package:microtype}
+% \bibauthor{Schlicht, Robert}.
+% \bibtitle{Package~\packagename{microtype}}.
+% 2020,
+% \biburl{https://ctan.org/pkg/microtype}.
+%
+% \bibitem{package:ragged2e}
+% \bibauthor{Schr\"oder, Martin}.
+% \bibtitle{Package~\packagename{ragged2e}}.
+% 2019,
+% \biburl{https://ctan.org/pkg/ragged2e}.
+%
+% \bibitem{solomon:1990}
+% \bibauthor{Solomon, David}.
+% \bibtitle{Output Routines: Examples and Techniques. Part~I: Introduction and Examples}.
+% TUGboat, 11(1), 69\figuredash85, 1990,
+% \biburl{http://www.tug.org/TUGboat/Articles/tb11-1/tb27salomon.pdf}.
+%
+% \bibitem{package:setspace}
+% \bibauthor{Tobin, Geoffrey,} and \bibauthor{Robin Fairbairns}.
+% \bibtitle{Package~\packagename{setspace}}.
+% 2011,
+% \biburl{https://ctan.org/pkg/setspace}.
+%
+% \bibitem{package:geometry}
+% \bibauthor{Umeki, Hideo}.
+% \bibtitle{Package~\packagename{geometry}}.
+% 2020,
+% \biburl{https://ctan.org/pkg/geometry}.
+%
+% \bibitem{wermuth:2016}
+% \bibauthor{Wermuth, Udo}.
+% \bibtitle{Tracing paragraphs}.
+% TUGboat, 37(3), 358\figuredash373, 2016,
+% \biburl{https://tug.org/TUGboat/tb37-3/tb117wermuth.pdf}.
+%
+% \bibitem{wermuth:2017a}
+% \bibauthor{Wermuth, Udo}.
+% \bibtitle{The optimal value for \cs{emergencystretch}}.
+% TUGboat, 38(1), 65\figuredash86, 2017,
+% \biburl{https://tug.org/TUGboat/tb38-1/tb118wermuth.pdf}.
+%
+% \bibitem{wermuth:2017c}
+% \bibauthor{Wermuth, Udo}.
+% \bibtitle{A note on \cs{linepenalty}}.
+% TUGboat, 38(3), 400\figuredash414, 2017,
+% \biburl{https://tug.org/TUGboat/tb38-3/tb120wermuth.pdf}.
+%
+% \bibitem{wermuth:2018}
+% \bibauthor{Wermuth, Udo}.
+% \bibtitle{Experiments with \cs{parfillskip}}.
+% TUGboat, 39(3), 276\figuredash303, 2018,
+% \biburl{https://tug.org/TUGboat/tb39-3/tb123wermuth-parfillskip.pdf}.
+%
+% \bibitem{wermuth:2020}
+% \bibauthor{Wermuth, Udo}.
+% \bibtitle{An attempt at ragged-right typesetting}.
+% TUGboat, 41(1), 73\figuredash94, 2020,
+% \biburl{https://tug.org/TUGboat/tb41-1/tb127wermuth-ragged.pdf}.
+%
+% \bibitem{wermuth:2022-8-2}
+% \bibauthor{Wermuth, Udo}.
+% Personal communication.
+% August~2, 2022.
+%
+% \bibitem{wermuth:2023}
+% \bibauthor{Wermuth, Udo}.
+% \bibtitle{Vertical alignments in plain \TeX}.
+% TUGboat, 44(3), 427\figuredash440, 2023,
+% \biburl{https://tug.org/TUGboat/tb44-3/tb138wermuth-valign.pdf}.
+%
+% \bibitem{package:hyphenat}
+% \bibauthor{Wilson, Peter}.
+% \bibtitle{Package~\packagename{hyphenat}}.
+% 2004,
+% \biburl{https://ctan.org/pkg/hyphenat}.
+% The package is maintained by \bibauthor{W. Robertson}.
+%
+% \bibitem{wilson:2007}
+% \bibauthor{Wilson, Peter}.
+% \bibtitle{Glisterings}.
+% TUGboat, 28(2), 229\figuredash232, 2007,
+% \biburl{https://tug.org/TUGboat/tb28-2/tb89glister.pdf}.
+%
+% \bibitem{package:needspace}
+% \bibauthor{Wilson, Peter}.
+% \bibtitle{Package~\packagename{needspace}}.
+% 2010,
+% \biburl{https://ctan.org/pkg/needspace}.
+% The package is maintained by \bibauthor{W. Robertson}.
+% \end{thebibliography}
+% \end{RaggedRight}
+%
+% \sectionfinish
+% \clearpage
+% \begin{RaggedRight}
+% \setcounter{IndexColumns}{2}
+% \setlength{\columnsep}{30pt}
+% \label{sec:index}
+% \phantomsection
+% \addcontentsline{toc}{section}{Index}
+% \PrintIndex
+% \end{RaggedRight}
+% }
+%
+%
+% \sectionfinish
+% \clearpage
+% \appendix
+% \section{Package Code}\label{sec:package-code}
+% \addtocontents{toc}{\begingroup\small}
+% \addtocontents{toc}{\protect\begin{multicols}{2}}
+% \addtocontents{toc}{\protect\raggedcolumns}
+%
+% This is the \doublequotes{Reference Manual}~section of the documentation
+% where we describe the package's code
+% and explain its implementation details.
+%
+%
+% \begin{macrocode}
+%<*package>
+\NeedsTeXFormat{LaTeX2e}[2005/12/01]
+\ProvidesPackage{typog}
+ [2024/05/07 v0.3 TypoGraphic extensions]
+
+\RequirePackage{etoolbox}
+\RequirePackage{everyhook}
+\RequirePackage{xkeyval}
+
+% \end{macrocode}
+%
+% \bigskip
+%
+% \subsection*{Declarations of Lengths, Skips, etc.}
+%
+% \begin{macro}{\typog@TYPOG}
+% Define a macro that unequivocally identifies this very package.
+%
+% \begin{macrocode}
+\newcommand*{\typog@TYPOG}{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typoglogo}
+% We have our own, low-key logo.
+%
+% \begin{macrocode}
+\newcommand*{\typoglogo}{\textsf{T\itcorr*{-5}\textsl{y}poG}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\iftypog@debug}
+% Our switch for debug information.
+%
+% \begin{macrocode}
+\newif\iftypog@debug
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typog@typeout}
+% Our debug information printer.
+%
+% \begin{macrocode}
+\newcommand*{\typog@typeout}[1]
+ {\iftypog@debug
+ \typeout{typog: #1}%
+ \fi}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typog@trim@spaces}
+% Pull \cs{tl\_trim\_spaces} into the \singlequotes{classic} namespace.
+%
+% \begin{macrocode}
+\ExplSyntaxOn
+\let\typog@trim@spaces=\tl_trim_spaces:o
+\ExplSyntaxOff
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typog@register@pdfsubstitute}
+% We often need to register (simple) substitute commands
+% suitable for \acronym{PDF}~bookmarks.
+% This is a convenient abbreviation for that task.
+%
+% \begin{macrocode}
+\newcommand{\typog@register@pdfsubstitute}[1]{%
+ \AtBeginDocument{%
+ \ifdefined\pdfstringdefDisableCommands
+ \pdfstringdefDisableCommands{#1}%
+ \fi}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% Some functionality depends on package~\packagename{microtype}.
+% To complicate matters for certain setup operations, e.\,g., \cs{SetExpansion},
+% \packagename{microtype} must be loaded \emph{before} package~\packagename{typog},
+% a fact that we encode in \cs{iftypog@microtype@preloaded}.
+%
+% \begin{macro}{\iftypog@microtype@preloaded}
+% \begin{macrocode}
+\newif\iftypog@microtype@preloaded
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typog@require@preloaded@microtype}
+% It is easy to determine whether \packagename{microtype} has been sourced.
+% We raise to the occasion and define a pair of check macros
+% which simplify the test for the correct \packagename{microtype} load~state.
+%
+% \begin{macrocode}
+\ifdefined\MT@MT
+ \typog@typeout{package microtype preloaded}%
+ \typog@microtype@preloadedtrue
+ \def\typog@require@preloaded@microtype{\relax}
+\else
+ \typog@microtype@preloadedfalse
+ \def\typog@require@preloaded@microtype
+ {\PackageError{typog}%
+ {package microtype not (pre-)loaded}%
+ {package microtype must be loaded before package typog}}
+\fi
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\iftypog@microtype@loaded}
+% \begin{macrocode}
+\newif\iftypog@microtype@loaded
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typog@require@microtype}
+% This code duplicates \cs{typog@require@preloaded@microtype};
+% the only difference is that we call the test \emph{after} the preamble was processed.
+%
+% \begin{macrocode}
+\AtBeginDocument{
+ \ifdefined\MT@MT
+ \typog@typeout{package microtype loaded}%
+ \typog@microtype@loadedtrue
+ \def\typog@require@microtype{\relax}
+ \else
+ \typog@microtype@loadedfalse
+ \def\typog@require@microtype
+ {\PackageError{typog}%
+ {package microtype not loaded}%
+ {require package microtype before package typog}}%
+ \fi
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% Our own state\dots
+%
+% \begin{macro}{\typog@mathitalicscorrection}
+% \begin{macrocode}
+\newmuskip\typog@mathitalicscorrection
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typog@textitalicscorrection}
+% \begin{macrocode}
+\newlength{\typog@textitalicscorrection}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typog@ligaturekern}
+% \begin{macrocode}
+\newlength{\typog@ligaturekern}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typog@raisecapitaldash}
+% \begin{macrocode}
+\newlength{\typog@raisecapitaldash}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typog@raisecapitalguillemets}
+% \begin{macrocode}
+\newlength{\typog@raisecapitalguillemets}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typog@raisecapitalhyphen}
+% \begin{macrocode}
+\newlength{\typog@raisecapitalhyphen}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typog@raisecapitaltimes}
+% \begin{macrocode}
+\newlength{\typog@raisecapitaltimes}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typog@raiseguillemets}
+% \begin{macrocode}
+\newlength{\typog@raiseguillemets}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typog@raisefiguredash}
+% \begin{macrocode}
+\newlength{\typog@raisefiguredash}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typog@slashkern}
+% \begin{macrocode}
+\newlength{\typog@slashkern}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typog@breakpenalty}
+% \begin{macrocode}
+\newcommand*{\typog@breakpenalty}{\exhyphenpenalty}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typog@dim@unit}
+% We would like to express the argument values
+% for example of \cs{kernedhyphen*} and \cs{kernedhyphen}
+% as multiples of a thousandth of an~em.
+% Therefore, we define a dimen as \doublequotes{base unit} which simplifies matters greatly.
+%
+% \begin{macrocode}
+\newlength{\typog@dim@unit}
+\setlength{\typog@dim@unit}{.001em}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typog@trackingttspacing}
+% \begin{macrocode}
+\newcommand*{\typog@trackingttspacing}{300, 90, 60}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typog@default@shrink@i}
+% The default configuration for shrink values.
+%
+% \begin{macrocode}
+\newcommand*{\typog@default@shrink@i}{5}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typog@default@shrink@ii}
+% \begin{macrocode}
+\newcommand*{\typog@default@shrink@ii}{10}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typog@default@shrink@iii}
+% \begin{macrocode}
+\newcommand*{\typog@default@shrink@iii}{20}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typog@shrink@i}
+% Configurable shrink values.
+% Initialized from the \code{typog@default@shrink@} set.
+%
+% \begin{macrocode}
+\newcommand*{\typog@shrink@i}{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typog@shrink@ii}
+% \begin{macrocode}
+\newcommand*{\typog@shrink@ii}{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typog@shrink@iii}
+% \begin{macrocode}
+\newcommand*{\typog@shrink@iii}{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typog@default@stretch@i}
+% The default configuration for stretch values.
+%
+% \begin{macrocode}
+\newcommand*{\typog@default@stretch@i}{5}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typog@default@stretch@ii}
+% \begin{macrocode}
+\newcommand*{\typog@default@stretch@ii}{10}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typog@default@stretch@iii}
+% \begin{macrocode}
+\newcommand*{\typog@default@stretch@iii}{20}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typog@stretch@i}
+% Configurable stretch values.
+% Initialized from the \code{typog@default@stretch} set.
+%
+% \begin{macrocode}
+\newcommand*{\typog@stretch@i}{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typog@stretch@ii}
+% \begin{macrocode}
+\newcommand*{\typog@stretch@ii}{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typog@stretch@iii}
+% \begin{macrocode}
+\newcommand*{\typog@stretch@iii}{}
+% \end{macrocode}
+% \end{macro}
+%
+% \iffalse
+
+\def\typog@one@of@three#1,#2,#3\relax{\typog@trim@spaces{#1}}
+\def\typog@two@of@three#1,#2,#3\relax{\typog@trim@spaces{#2}}
+\def\typog@three@of@three#1,#2,#3\relax{\typog@trim@spaces{#3}}
+
+\newcommand*{\typog@triple@get@i}[1]{\expandafter\typog@one@of@three #1\relax}
+\newcommand*{\typog@triple@get@ii}[1]{\expandafter\typog@two@of@three #1\relax}
+\newcommand*{\typog@triple@get@iii}[1]{\expandafter\typog@three@of@three #1\relax}
+
+\newcommand*{\typog@set@shrink@limits}
+ {\edef\typog@@star{*}%
+ \edef\typog@@limit{\typog@triple@get@i{\typog@shrinklimits}}%
+ \unless\ifx\typog@@limit\typog@@star\edef\typog@shrink@i{\number\typog@@limit}\fi
+ \edef\typog@@limit{\typog@triple@get@ii{\typog@shrinklimits}}%
+ \unless\ifx\typog@@limit\typog@@star\edef\typog@shrink@ii{\number\typog@@limit}\fi
+ \edef\typog@@limit{\typog@triple@get@iii{\typog@shrinklimits}}%
+ \unless\ifx\typog@@limit\typog@@star\edef\typog@shrink@iii{\number\typog@@limit}\fi}
+
+\newcommand*{\typog@set@stretch@limits}
+ {\edef\typog@@star{*}%
+ \edef\typog@@limit{\typog@triple@get@i{\typog@stretchlimits}}%
+ \unless\ifx\typog@@limit\typog@@star\edef\typog@stretch@i{\number\typog@@limit}\fi
+ \edef\typog@@limit{\typog@triple@get@ii{\typog@stretchlimits}}%
+ \unless\ifx\typog@@limit\typog@@star\edef\typog@stretch@ii{\number\typog@@limit}\fi
+ \edef\typog@@limit{\typog@triple@get@iii{\typog@stretchlimits}}%
+ \unless\ifx\typog@@limit\typog@@star\edef\typog@stretch@iii{\number\typog@@limit}\fi}
+
+\DeclareOptionX<typog>{breakpenalty}%
+ {\renewcommand*{\typog@breakpenalty}{#1}}
+\DeclareOptionX<typog>{debug}{\typog@debugtrue}
+\DeclareOptionX<typog>{mathitalicscorrection}[.4mu]%
+ {\typog@mathitalicscorrection=#1\relax}%
+\DeclareOptionX<typog>{nodebug}{\typog@debugfalse}
+\DeclareOptionX<typog>{textitalicscorrection}[.02em]%
+ {\setlength{\typog@textitalicscorrection}{#1}}
+\DeclareOptionX<typog>{ligaturekern}[.033333em]%
+ {\setlength{\typog@ligaturekern}{#1}}
+\DeclareOptionX<typog>{raisecapitaldash}[\z@]%
+ {\setlength{\typog@raisecapitaldash}{#1}}
+\DeclareOptionX<typog>{raisecapitalguillemets}[\z@]%
+ {\setlength{\typog@raisecapitalguillemets}{#1}}
+\DeclareOptionX<typog>{raisecapitalhyphen}[\z@]%
+ {\setlength{\typog@raisecapitalhyphen}{#1}}
+\DeclareOptionX<typog>{raisecapitaltimes}[\z@]%
+ {\setlength{\typog@raisecapitaltimes}{#1}}
+\DeclareOptionX<typog>{raiseguillemets}[\z@]%
+ {\setlength{\typog@raiseguillemets}{#1}}
+\DeclareOptionX<typog>{raisefiguredash}[\z@]%
+ {\setlength{\typog@raisefiguredash}{#1}}
+\DeclareOptionX<typog>{raise*}[\z@]%
+ {\setlength{\typog@raisecapitaldash}{#1}%
+ \setlength{\typog@raisecapitalhyphen}{#1}%
+ \setlength{\typog@raisecapitaltimes}{#1}%
+ \setlength{\typog@raisefiguredash}{#1}}
+\DeclareOptionX<typog>{shrinklimits}%
+ [\typog@default@shrink@i, \typog@default@shrink@ii, \typog@default@shrink@iii]%
+ {\typog@require@preloaded@microtype
+ \ifx\@onlypreamble\@notprerr
+ \PackageWarning{typog}{option `shrinklimits' can only be used in the preamble}%
+ \else
+ \edef\typog@shrinklimits{#1}%
+ \typog@set@shrink@limits
+ \fi}
+\DeclareOptionX<typog>{slashkern}[.05em]%
+ {\setlength{\typog@slashkern}{#1}}
+\DeclareOptionX<typog>{stretchlimits}%
+ [\typog@default@stretch@i, \typog@default@stretch@ii, \typog@default@stretch@iii]%
+ {\typog@require@preloaded@microtype
+ \ifx\@onlypreamble\@notprerr
+ \PackageWarning{typog}{option `stretchlimits' can only be used in the preamble}%
+ \else
+ \edef\typog@stretchlimits{#1}%
+ \typog@set@stretch@limits
+ \fi}
+\DeclareOptionX<typog>{trackingttspacing}[\typog@trackingttspacing]%
+ {\typog@require@preloaded@microtype
+ \ifx\@onlypreamble\@notprerr
+ \PackageWarning{typog}{option `trackingttspacing' can only be used in the preamble}%
+ \else
+ \typog@typeout{trackingttspacing=#1}%
+ \SetTracking[outer spacing={#1}]{encoding=*, family=tt*}{0}%
+ \fi}
+
+\newcommand*{\typog@initialize@options}
+ {\ExecuteOptionsX<typog>{
+ ligaturekern,
+ mathitalicscorrection, textitalicscorrection,
+ raisecapitaldash, raisecapitalhyphen, raisecapitaltimes,
+ raiseguillemets, raisecapitalguillemets,
+ raisefiguredash,
+ slashkern}
+ \ifdefined\MT@MT
+ \unless\ifx\@onlypreamble\@notprerr
+ \ExecuteOptionsX<typog>{shrinklimits, stretchlimits}
+ \fi
+ \fi}
+
+\typog@initialize@options
+\ProcessOptionsX<typog>
+
+% \fi
+%
+%
+% \subsection*{Setup}
+%
+% \begin{environment}{typogsetup}
+% An empty argument list resets all initialized values to their defaults.
+%
+% \begin{macrocode}
+\NewDocumentEnvironment{typogsetup}{m}
+ {\def\typog@@arg{#1}%
+ \ifx\typog@@arg\empty
+ \typog@initialize@options
+ \else
+ \setkeys{typog}{#1}%
+ \fi
+ \ignorespaces}
+ {\ignorespacesafterend}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\typogget}
+% \begin{macrocode}
+\NewDocumentCommand{\typogget}{m}{\csname typog@#1\endcsname}
+
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Information}
+%
+% \begin{macro}{\typog@round@dim@to@tenths}
+% \begin{macrocode}
+\ExplSyntaxOn
+\newcommand*{\typog@round@dim@to@tenths}[1]
+ {\fp_to_decimal:n {round(10 * \dim_to_fp:n{#1} / 1\p@) / 10}}
+\ExplSyntaxOff
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typog@formatsizeinfo}
+% Arguments 1 and~2 are the font size and the line spacing.
+% The third parameter adds (decorative) units to both numbers.
+%
+% \begin{macrocode}
+\newcommand*{\typog@formatsizeinfo}[3]
+ {#1#3\kernedslash #2#3}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\fontsizeinfo}
+% All macros defined inside of \cs{fontsizeinfo} must be global
+% because the call can occur inside of a group.
+%
+% The two \cs{edef}s at the beginning capture the desired values
+% at the point where the macro \emph{is called}.
+% The user-macro is tricky for we need
+% a global macro with a constructed name
+% and an associated starred version.
+%
+% \begin{implementationnote}
+% \cs{@ifstar} caused too many problems which \cs{@ifnextchar} in combination with
+% \cs{@gobble} avoid.
+% \end{implementationnote}
+%
+% \begin{macrocode}
+\NewDocumentCommand{\fontsizeinfo}{s m}
+ {\global\expandafter\edef\csname typog@fontsize@#2\endcsname
+ {\typog@round@dim@to@tenths{\fontdimen6\font}}%
+ \global\expandafter\edef\csname typog@linespacing@#2\endcsname
+ {\typog@round@dim@to@tenths{\baselineskip}}%
+ \protected\expandafter\gdef\csname #2\endcsname
+ {\@ifnextchar*{\typog@formatsizeinfo
+ {\csname typog@fontsize@#2\endcsname}%
+ {\csname typog@linespacing@#2\endcsname}%
+ {}% no unit
+ \ignorespaces % eat spaces after star
+ \@gobble} % consume the star itself
+ {\typog@formatsizeinfo
+ {\csname typog@fontsize@#2\endcsname}%
+ {\csname typog@linespacing@#2\endcsname}%
+ {\,pt}% decorative unit `pt'
+ }}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typog@default@inspect@id@prefix}
+% Id-prefix for those |typoinspect|~environments
+% that were not identified by the user.
+%
+% \begin{macrocode}
+\newcommand*{\typog@default@inspect@id@prefix}{a-}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{typog@inspect@count}
+% Counter to supply unique number and in turn \meta{id}
+% for those |typoinspect|~environments
+% that were not identified by the user.
+%
+% \begin{macrocode}
+\newcounter{typog@inspect@count}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{typoginspect}
+% \begin{macrocode}
+\define@key[typog]{typoginspect}{tracingboxes}[\maxdimen]%
+ {\def\typog@@typoginspect@tracingboxes{#1}}
+\NewDocumentEnvironment{typoginspect}{O{} m}
+ {\def\typog@@typoginspect@tracingboxes{\m@ne}%
+ \setkeys[typog]{typoginspect}{#1}%
+% \end{macrocode}
+%
+% If the user does not supply an \meta{id},
+% we fall back to out own counter
+% and construct a hopefully unique \meta{id} from that.
+%
+% \begin{macrocode}
+ \edef\typog@@arg{#2}%
+ \ifx\typog@@arg\empty
+ \stepcounter{typog@inspect@count}%
+ \edef\typog@@id{\typog@default@inspect@id@prefix\arabic{typog@inspect@count}}%
+ \else
+ \edef\typog@@id{\typog@trim@spaces{\typog@@arg}}%
+ \fi
+ \typeout{<typog-inspect id="\typog@@id" job="\jobname" line="\the\inputlineno" page="\the\value{page}">}%
+% \end{macrocode}
+%
+% Set both badness thresholds to absurdly low values as to activate \TeX's reports.
+%
+% \begin{macrocode}
+ \hbadness=\m@ne
+ \vbadness=\m@ne
+% \end{macrocode}
+%
+% Carefully select the tracing functionality we want (to improve our typography).
+% Too much trace data distracts
+% and the user always can turn on more tracing at the beginning of the environment.
+%
+% \begin{macrocode}
+ \tracingnone
+ \tracingpages=\@ne
+ \tracingparagraphs=\@ne
+ \showboxbreadth=\typog@@typoginspect@tracingboxes
+ \showboxdepth=\typog@@typoginspect@tracingboxes}
+ {\typeout{</typog-inspect>}%
+ \ignorespacesafterend}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{environment}{typoginspectpar}
+% Companion environment to |typoginspect|
+% which adds a \cs{par} before the end of the group.
+%
+% \begin{macrocode}
+\NewDocumentEnvironment{typoginspectpar}{m}
+ {\typoginspect{#1}}
+ {\par\endtypoginspect}
+
+% \end{macrocode}
+% \end{environment}
+%
+%
+% \subsection{Hyphenation}
+%
+% \begin{macro}{\typog@allowhyphenation}
+% Re-enable automatic hyphenation.
+%
+% The same or almost the same implementation can be found
+% in \packagename{babel} as macro~\cs{bbl@allowhyphens}
+% and \packagename{hyphenat} as macro~\cs{prw@zbreak}.
+%
+% \begin{macrocode}
+\newcommand*{\typog@allowhyphenation}
+ {\ifvmode
+ \relax
+ \else
+ \nobreak
+ \hskip\z@skip
+ \fi}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\allowhyphenation}
+% Define a user-visible alias unless the name is already used.
+%
+% \begin{macrocode}
+\unless\ifdefined\allowhyphenation
+ \let\allowhyphenation=\typog@allowhyphenation
+\fi
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\breakpoint}
+% The starred form inhibits hyphenation of the right-hand component.
+%
+% \begin{macrocode}
+\NewDocumentCommand{\breakpoint}{s}
+ {\discretionary{}{}{}%
+ \IfBooleanTF{#1}%
+ {\ignorespaces}%
+ {\typog@allowhyphenation}}
+
+% \end{macrocode}
+%
+% \acronym{PDF}-substitute definition
+%
+% \begin{macrocode}
+\typog@register@pdfsubstitute{
+ \def\breakpoint#1{\if*\detokenize{#1}\ignorespaces\fi}%
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{hyphenmin}
+% \changes{v0.3}{2024-05-04}{New environment.}
+% No trickery here. -- We use the mandatory argument for the value of \cs{lefthyphenmin} if
+% the optional argument has been omitted.
+%
+% \begin{macrocode}
+\NewDocumentEnvironment{hyphenmin}{o m}
+ {\lefthyphenmin=\IfNoValueTF{#1}{#2}{#1}%
+ \righthyphenmin=#2}
+ {}
+
+% \end{macrocode}
+% \end{environment}
+%
+%
+% \subsection{Disable/Break Ligatures}
+%
+% \begin{macro}{\typog@hyphen}
+% We define our own hyphen so the user can override the definition in a pinch.
+%
+% \begin{macrocode}
+\newcommand*{\typog@hyphen}{\char`-}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\nolig}
+% \begin{macrocode}
+\NewDocumentCommand{\nolig}{s o}
+ {\dimen0=\IfNoValueTF{#2}{\typog@ligaturekern}{#2\typog@dim@unit}%
+ \IfBooleanTF{#1}%
+ {\kern\dimen0\ignorespaces}%
+ {\discretionary{\typog@hyphen}{}{\kern\dimen0}%
+ \typog@allowhyphenation
+ \IfNoValueF{#2}{\ignorespaces}}}
+
+% \end{macrocode}
+%
+% The \acronym{PDF}-ready version of \cs{nolig} cannot be implemented with \cs{futurelet}.
+% Doh!
+%
+% \begin{macrocode}
+\typog@register@pdfsubstitute{
+ \RenewExpandableDocumentCommand{\nolig}{s o m}{%
+ \ifx\typog@TYPOG#3\typog@TYPOG
+ \relax
+ \else
+ \ifx\relax#3\relax
+ \relax
+ \else
+ \PackageError{typog}
+ {Missing third argument of \nolig}
+ {Append empty group or \relax after macro invocation}
+ \fi
+ \fi}
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Manual Italic Correction}
+%
+% \begin{macro}{\typog@itcorr@text@unconditional}
+% Fallback italics correction for text mode.
+%
+% \begin{macrocode}
+\newcommand*{\typog@itcorr@text@unconditional}[1]
+ {\kern#1\typog@textitalicscorrection}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typog@itcorr@text}
+% Conditional italics correction depending on
+% the current font's own italics correction,
+% i.\,e., \cs{fontdimen1}.
+%
+% \begin{macrocode}
+\newcommand*{\typog@itcorr@text}[1]
+ {\def\typog@@strength{#1}%
+ \dimen0=\fontdimen1\font
+ \ifdim\dimen0=\z@
+ \typog@itcorr@text@unconditional{\typog@@strength}%
+ \else
+ \kern\typog@@strength\dimen0
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typog@itcorr@math}
+% Italics correction for math mode.
+%
+% \begin{macrocode}
+\newcommand*{\typog@itcorr@math}[1]
+ {\mkern#1\typog@mathitalicscorrection}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\itcorr}
+% If the font has no italics correction we fall back to out own length.
+% In text mode the starred version always uses the fallback.
+% The star is a no-op in math mode.
+%
+% \begin{macrocode}
+\NewDocumentCommand{\itcorr}{s m}
+ {\ifmmode
+ \typog@itcorr@math{#2}%
+ \else
+ \IfBooleanTF{#1}%
+ {\typog@itcorr@text{#2}}%
+ {\typog@itcorr@text@unconditional{#2}}%
+ \fi}
+% \end{macrocode}
+%
+% \acronym{PDF}-substitute definition
+%
+% \begin{macrocode}
+\typog@register@pdfsubstitute{
+ \RenewExpandableDocumentCommand{\itcorr}{s m}{}
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Apply Extra Kerning}
+%
+% \subsubsection*{Slash}
+%
+% \begin{macro}{\typog@forwardslash}
+% We define our own forward-slash so the user can override the definition in a pinch.
+%
+% \begin{macrocode}
+\newcommand*{\typog@forwardslash}{\char`/}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\kernedslash}
+% Macro~\cs{kernedslash} introduces a hyphenation possibility right after the dash,
+% whereas the starred version does not.
+%
+% By the way, \cs{slash} expands to `|/|\cs{penalty}\cs{exhyphenpenalty}'.
+%
+% \begin{macrocode}
+\NewDocumentCommand{\kernedslash}{s}
+ {\hspace*{\typog@slashkern}%
+ \typog@forwardslash
+ \IfBooleanTF{#1}%
+ {\hspace*{\typog@slashkern}\ignorespaces}%
+ {\typog@breakpoint\typog@allowhyphenation\hspace*{\typog@slashkern}}}
+% \end{macrocode}
+%
+% \acronym{PDF}-substitute definition
+%
+% \begin{macrocode}
+\typog@register@pdfsubstitute{
+ \def\kernedslash#1{\if*\detokenize{#1}/\ignorespaces\else/#1\fi}%
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection*{Hyphen}
+%
+% \begin{macro}{\kernedhyphen}
+% \begin{macrocode}
+\NewDocumentCommand{\kernedhyphen}{s O{0} m m}
+ {\ifmmode
+ \mspace{\muexpr(#3 mu) * 18 / 1000}%
+ \raisebox{#2\typog@dim@unit}{$\m@th\mathord{-}$}%
+ \mspace{\muexpr(#4 mu) * 18 / 1000}%
+ \else
+ \def\typog@@auto{*}%
+ \def\typog@@optarg{#2}%
+ \hspace*{#3\typog@dim@unit}%
+ \raisebox{\ifx\typog@@optarg\typog@@auto
+ \typog@raisecapitalhyphen
+ \else
+ \typog@@optarg\typog@dim@unit
+ \fi}{\typog@hyphen}%
+ \hspace{#4\typog@dim@unit}%
+ \IfBooleanT{#1}{\nobreak}%
+ \fi}
+% \end{macrocode}
+%
+% \acronym{PDF}-substitute definition
+%
+% \begin{macrocode}
+\typog@register@pdfsubstitute{
+ \RenewExpandableDocumentCommand{\kernedhyphen}{s o m m}{-}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% One-argument shorthands.
+%
+% \begin{macro}{\leftkernedhyphen}
+% Apply kerning on the left-hand side of the hyphen only.
+%
+% \begin{macrocode}
+\NewDocumentCommand{\leftkernedhyphen}{s O{0} m}
+ {\IfBooleanTF{#1}%
+ {\kernedhyphen*[#2]{#3}{0}\ignorespaces}%
+ {\kernedhyphen[#2]{#3}{0}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \acronym{PDF}-substitute definition
+%
+% \begin{macrocode}
+\typog@register@pdfsubstitute{
+ \RenewExpandableDocumentCommand{\leftkernedhyphen}{s o m}{-}
+}
+
+% \end{macrocode}
+%
+% \begin{macro}{\rightkernedhyphen}
+% Apply kerning on the right-hand side of the hyphen only.
+%
+% \begin{macrocode}
+\NewDocumentCommand{\rightkernedhyphen}{s O{0} m}
+ {\IfBooleanTF{#1}%
+ {\kernedhyphen*[#2]{0}{#3}\ignorespaces}%
+ {\kernedhyphen[#2]{0}{#3}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \acronym{PDF}-substitute definition
+%
+% \begin{macrocode}
+\typog@register@pdfsubstitute{
+ \RenewExpandableDocumentCommand{\rightkernedhyphen}{s o m}{-}
+}
+
+% \end{macrocode}
+%
+%
+% \subsection{Raise Selected Characters}
+%
+% \begin{macro}{\typog@breakpoint}
+% We want our own penalty for a line-break at a particular point.
+% The predefined \cs{allowbreak} is too eager.
+% A package-private, user-configurable penalty fits best.
+%
+% \begin{macrocode}
+\newcommand*{\typog@breakpoint}
+ {\penalty\typog@breakpenalty}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\capitalhyphen}
+% Macro~\cs{capitalhyphen} introduces a hyphenation possibility right after the dash,
+% whereas the starred version does not.
+%
+% \begin{macrocode}
+\NewDocumentCommand{\capitalhyphen}{s}
+ {\raisebox{\typog@raisecapitalhyphen}{\typog@hyphen}%
+ \IfBooleanTF{#1}%
+ {\ignorespaces}%
+ {\typog@breakpoint\typog@allowhyphenation}}
+% \end{macrocode}
+%
+% The non-hyperref version's code is straightforward.
+% The \cs{pdfstringdefDisableCommands}~version must be expandable
+% and must match the other version's signature.
+% Yikes!
+% We exploit the fact that conditions are expandable.
+% However, we cannot use \cs{typog@hyphen} in the expansion as \cs{char} gets in the way.
+% So, we fall back to the least~common denominator and use a bare dash.
+%
+% \begin{macrocode}
+\typog@register@pdfsubstitute{
+ \def\capitalhyphen#1{%
+ \if*\detokenize{#1}%
+ -\ignorespaces
+ \else
+ -#1%
+ \fi}
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\capitalendash}
+% Macro~\cs{capitalendash} introduces a hyphenation possibility right after the dash;
+% its starred version does not.
+%
+% \begin{macrocode}
+\NewDocumentCommand{\capitalendash}{s}
+ {\raisebox{\typog@raisecapitaldash}{\textendash}%
+ \IfBooleanTF{#1}%
+ {\ignorespaces}%
+ {\typog@breakpoint\typog@allowhyphenation}}
+\let\capitaldash=\capitalendash
+% \end{macrocode}
+%
+% \acronym{PDF}-substitute definition
+%
+% \begin{macrocode}
+\typog@register@pdfsubstitute{
+ \def\capitalendash#1{%
+ \if*\detokenize{#1}%
+ \textendash\ignorespaces
+ \else
+ \textendash#1%
+ \fi}
+ \let\capitaldash=\capitalendash
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\capitalemdash}
+% Macro~\cs{capitalemdash} introduces a hyphenation possibility right after the dash;
+% its starred version does not.
+%
+% \begin{macrocode}
+\NewDocumentCommand{\capitalemdash}{s}
+ {\raisebox{\typog@raisecapitaldash}{\textemdash}%
+ \IfBooleanTF{#1}%
+ {\ignorespaces}%
+ {\typog@breakpoint\typog@allowhyphenation}}
+% \end{macrocode}
+%
+% \acronym{PDF}-substitute definition
+%
+% \begin{macrocode}
+\typog@register@pdfsubstitute{
+ \def\capitalemdash#1{%
+ \if*\detokenize{#1}%
+ \textemdash\ignorespaces
+ \else
+ \textemdash#1%
+ \fi}
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\figuredash}
+% Macro~\cs{figuredash} introduces a hyphenation possibility right after the dash;
+% its starred version does not.
+%
+% \begin{macrocode}
+\NewDocumentCommand{\figuredash}{s}
+ {\raisebox{\typog@raisefiguredash}{\textendash}%
+ \IfBooleanTF{#1}%
+ {\ignorespaces}%
+ {\typog@breakpoint\typog@allowhyphenation}}
+% \end{macrocode}
+%
+% \acronym{PDF}-substitute definition
+%
+% \begin{macrocode}
+\typog@register@pdfsubstitute{\let\figuredash=\capitaldash}
+
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\capitaltimes}
+% \begin{macrocode}
+\NewDocumentCommand{\capitaltimes}{}
+ {\ifmmode
+ \mathbin{\raisebox{\typog@raisecapitaltimes}{$\m@th\times$}}%
+ \else
+ \raisebox{\typog@raisecapitaltimes}{\texttimes}%
+ \fi}
+% \end{macrocode}
+%
+% \acronym{PDF}-substitute definition
+%
+% \begin{macrocode}
+\typog@register@pdfsubstitute{
+ \RenewExpandableDocumentCommand{\capitaltimes}{}{\texttimes}
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\singleguillemetleft}
+% \begin{macrocode}
+\NewDocumentCommand{\singleguillemetleft}{}
+ {\typog@allowhyphenation
+ \raisebox{\typog@raiseguillemets}{\guilsinglleft}}
+% \end{macrocode}
+%
+% \acronym{PDF}-substitute definition
+%
+% \begin{macrocode}
+\typog@register@pdfsubstitute{\let\singleguillemetleft\guilsinglleft}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\singleguillemetright}
+% \begin{macrocode}
+\NewDocumentCommand{\singleguillemetright}{}
+ {\raisebox{\typog@raiseguillemets}{\guilsinglright}%
+ \typog@allowhyphenation}
+% \end{macrocode}
+%
+% \acronym{PDF}-substitute definition
+%
+% \begin{macrocode}
+\typog@register@pdfsubstitute{\let\singleguillemetright\guilsinglright}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\doubleguillemetleft}
+% \begin{macrocode}
+\NewDocumentCommand{\doubleguillemetleft}{}
+ {\typog@allowhyphenation
+ \raisebox{\typog@raiseguillemets}{\guillemotleft}}
+% \end{macrocode}
+%
+% \acronym{PDF}-substitute definition
+%
+% \begin{macrocode}
+\typog@register@pdfsubstitute{\let\doubleguillemetleft\guillemotleft}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\doubleguillemetright}
+% \begin{macrocode}
+\NewDocumentCommand{\doubleguillemetright}{}
+ {\raisebox{\typog@raiseguillemets}{\guillemotright}%
+ \typog@allowhyphenation}
+% \end{macrocode}
+%
+% \acronym{PDF}-substitute definition
+%
+% \begin{macrocode}
+\typog@register@pdfsubstitute{\let\doubleguillemetright\guillemotright}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Singleguillemetleft}
+% \begin{macrocode}
+\NewDocumentCommand{\Singleguillemetleft}{}
+ {\typog@allowhyphenation
+ \raisebox{\typog@raisecapitalguillemets}{\guilsinglleft}}
+% \end{macrocode}
+%
+% \acronym{PDF}-substitute definition
+%
+% \begin{macrocode}
+\typog@register@pdfsubstitute{\let\Singleguillemetleft\guilsinglleft}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Singleguillemetright}
+% \begin{macrocode}
+\NewDocumentCommand{\Singleguillemetright}{}
+ {\raisebox{\typog@raisecapitalguillemets}{\guilsinglright}%
+ \typog@allowhyphenation}
+% \end{macrocode}
+%
+% \acronym{PDF}-substitute definition
+%
+% \begin{macrocode}
+\typog@register@pdfsubstitute{\let\Singleguillemetright\guilsinglright}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Doubleguillemetleft}
+% \begin{macrocode}
+\NewDocumentCommand{\Doubleguillemetleft}{}
+ {\typog@allowhyphenation
+ \raisebox{\typog@raisecapitalguillemets}{\guillemotleft}}
+% \end{macrocode}
+%
+% \acronym{PDF}-substitute definition
+%
+% \begin{macrocode}
+\typog@register@pdfsubstitute{\let\Doubleguillemetleft\guillemotleft}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Doubleguillemetright}
+% \begin{macrocode}
+\NewDocumentCommand{\Doubleguillemetright}{}
+ {\raisebox{\typog@raisecapitalguillemets}{\guillemotright}%
+ \typog@allowhyphenation}
+% \end{macrocode}
+%
+% \acronym{PDF}-substitute definition
+%
+% \begin{macrocode}
+\typog@register@pdfsubstitute{\let\Doubleguillemetright\guillemotright}
+
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection[Align Last Line]{Align Last Line of a Paragraph}
+%
+% The code of environment |lastlineraggedleftpar|
+% has been inspired by macro~\cs{lastlineraggedleft}~\cite[Sec.~2]{wilson:2007}.
+%
+% \begin{environment}{lastlineraggedleftpar}
+% \begin{macrocode}
+\NewDocumentEnvironment{lastlineraggedleftpar}{}
+ {\lastlinefit=0%
+ \setlength{\leftskip}{\z@ \@plus 1fil}%
+ \setlength{\rightskip}{-\leftskip}%
+ \setlength{\parfillskip}{\leftskip}}
+ {\par}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{environment}{lastlineflushrightpar}
+% Define |lastlineflushrightpar| as an alias of |lastlineraggedleftpar|.
+%
+% \begin{macrocode}
+\let\lastlineflushrightpar=\lastlineraggedleftpar
+\let\endlastlineflushrightpar=\endlastlineraggedleftpar
+
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{environment}{lastlinecenteredpar}
+% The code of environment |lastlinecenteredpar|
+% has been inspired by \textit{Tex By Topic}~\cite[Sec.~18.3.1]{eijkhout:2007}.
+%
+% \begin{macrocode}
+\NewDocumentEnvironment{lastlinecenteredpar}{}
+ {\lastlinefit=0%
+ \setlength{\leftskip}{\z@ \@plus .5fil}%
+ \setlength{\rightskip}{-\leftskip}%
+ \setlength{\parfillskip}{\z@ \@plus 1fil}}
+ {\par}
+
+% \end{macrocode}
+% \end{environment}
+%
+%
+% \subsection[Fill Last Line]
+% {Fill Last Line of a Paragraph}
+%
+% \begin{environment}{shortenpar}
+% \begin{macrocode}
+\NewDocumentEnvironment{shortenpar}{}
+ {\advance\looseness by -1
+ \ifnum\tracingparagraphs>0
+ \typeout{@ looseness \the\looseness}%
+ \fi}
+ {\par}
+
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{environment}{prolongpar}
+% We try to be prudent and inhibit hyphenation of the next-to-last line
+% just in case the longer paragraph could be cheaply achieved by hyphenation
+% --~at the worst~-- of the last word.
+%
+% \begin{macrocode}
+\NewDocumentEnvironment{prolongpar}{}
+ {\finalhyphendemerits=100000001
+ \advance\looseness by 1
+ \ifnum\tracingparagraphs>0
+ \typeout{@ looseness \the\looseness}%
+ \fi}
+ {\par}
+
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\typog@covernextindentpar@zero@parindent}
+% This auxiliary macro and the following one
+% are meant as an easy means to override the defaults
+% of the user-visible environment~|covernextindentpar|.
+%
+% \begin{macrocode}
+\newcommand*{\typog@covernextindentpar@zero@parindent}{2em}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typog@covernextindentpar@nonzero@parindent}
+% \begin{macrocode}
+\newcommand*{\typog@covernextindentpar@nonzero@parindent}{2\parindent}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{covernextindentpar}
+% \begin{macrocode}
+\NewDocumentEnvironment{covernextindentpar}{o}
+ {\IfNoValueTF{#1}
+ {\ifdim\parindent=\z@
+ \dimen0=\dimexpr\linewidth - \typog@covernextindentpar@zero@parindent
+ \else
+ \dimen0=\dimexpr\linewidth - \typog@covernextindentpar@nonzero@parindent
+ \fi}
+ {\dimen0=\dimexpr\linewidth - (#1)}%
+ \parfillskip=\dimen0 \@minus \dimen0
+ \relax}
+ {\par}
+
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\typog@openlastlinepar@zero@parindent}
+% These auxiliary macros are meant as a means to override the defaults
+% of the user-visible environment~|openlastlinepar|.
+%
+% \begin{macrocode}
+\newcommand*{\typog@openlastlinepar@zero@parindent}{2em}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typog@openlastlinepar@nonzero@parindent}
+% \begin{macrocode}
+\newcommand*{\typog@openlastlinepar@nonzero@parindent}{2\parindent}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{openlastlinepar}
+% Compare with the suggestion in Ref.~\citenum{wermuth:2018}.
+%
+% \begin{macrocode}
+\NewDocumentEnvironment{openlastlinepar}{o}
+ {\IfNoValueTF{#1}
+ {\ifdim\parindent=\z@
+ \skip0=\typog@openlastlinepar@zero@parindent
+ \@plus 1fil
+ \@minus \typog@openlastlinepar@zero@parindent
+ \else
+ \skip0=\typog@openlastlinepar@nonzero@parindent
+ \@plus 1fil
+ \@minus \typog@openlastlinepar@nonzero@parindent
+ \fi}
+ {\dimen0=\dimexpr#1\relax
+ \skip0=\dimen0 \@plus 1fil \@minus \dimen0}
+ \parfillskip=\skip0}
+ {\par}
+
+% \end{macrocode}
+% \end{environment}
+%
+%
+% \subsection{Spacing}
+%
+% \begin{macro}{\widespacestrength}
+% Weight factor (``strength'') for \cs{fontdimen7}, the extra width of a sentence-ending
+% space, we apply to construct our \cs{widespace} if \(\cs{fontdimen7} \not= 0\). Can be
+% increased to get a more pronounced effect.
+%
+% \begin{macrocode}
+\newcommand*{\widespacestrength}{1.}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\widespacescale}
+% Scale factor we apply to the glue of the normal space to setup the glue of our
+% \cs{widespacescale}. Also used in the fall-back calculation for the width if
+% \(\cs{fontdimen7} = 0\).
+%
+% \begin{macrocode}
+\newcommand*{\widespacescale}{1.125}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\widespace}
+% \changes{v0.2}{2024-3-29}{Add fallback if \cs{fontdimen7} is zero. Extend with a starred version.}
+% \begin{macrocode}
+\NewDocumentCommand{\widespace}{s}
+ {\IfBooleanTF{#1}%
+ {\dimen0=\widespacescale\fontdimen2\font}%
+ {\ifdim\fontdimen7\font=\z@
+ \dimen0=\widespacescale\fontdimen2\font
+ \else
+ \dimen0=\dimexpr\fontdimen2\font +
+ \widespacestrength\fontdimen7\font
+ \fi}%
+ \hskip \glueexpr\dimen0
+ \@plus \widespacescale\fontdimen3\font
+ \@minus \widespacescale\fontdimen4\font
+ \ignorespaces}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\narrowspacestrength}
+% Weight factor (``strength'') for \cs{fontdimen7}, the extra width of a sentence-ending
+% space, we apply to construct our \cs{narrowspace} if \(\cs{fontdimen7} \not= 0\). Can be
+% increased to get a more pronounced effect.
+%
+% \begin{macrocode}
+\newcommand*{\narrowspacestrength}{.5}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\narrowspacescale}
+% Scale factor we apply to the glue of the normal space to setup the glue of our
+% \cs{narrowspacescale}. Also used in the fall-back calculation for the width if
+% \(\cs{fontdimen7} = 0\).
+%
+% \begin{macrocode}
+\newcommand*{\narrowspacescale}{.9375}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\narrowspace}
+% \changes{v0.2}{2024-3-29}{New macro.}
+% \begin{macrocode}
+\NewDocumentCommand{\narrowspace}{s}
+ {\IfBooleanTF{#1}%
+ {\dimen0=\narrowspacescale\fontdimen2\font}%
+ {\ifdim\fontdimen7\font=\z@
+ \dimen0=\narrowspacescale\fontdimen2\font
+ \else
+ \dimen0=\dimexpr\fontdimen2\font -
+ \narrowspacestrength\fontdimen7\font
+ \fi}%
+ \hskip \glueexpr\dimen0
+ \@plus \narrowspacescale\fontdimen3\font
+ \@minus \narrowspacescale\fontdimen4\font
+ \ignorespaces}
+
+% \end{macrocode}
+% \end{macro}
+%
+%
+% See also: TeX by Topic \cite[ch.~20, p.~185\figuredash190]{eijkhout:2007}.
+%
+% \begin{environment}{loosespacing}
+% \begin{macrocode}
+\NewDocumentEnvironment{loosespacing}{O{1}}
+ {\dimen2=\fontdimen2\font
+ \ifcase #1
+ \spaceskip=\z@
+ \or % 1 +5%
+ \spaceskip=1.05\dimen2 \@plus .5\dimen2 \@minus .1\dimen2
+ \or % 2 +10%
+ \spaceskip=1.1\dimen2 \@plus .5\dimen2 \@minus .1\dimen2
+ \or % 3 +20%
+ \spaceskip=1.2\dimen2 \@plus .6\dimen2 \@minus .2\dimen2
+ \else % >= 4 +30%
+ \spaceskip=1.3\dimen2 \@plus .8\dimen2 \@minus .3\dimen2
+ \fi
+ \ignorespaces}
+ {\ignorespacesafterend}
+
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{environment}{tightspacing}
+% \begin{macrocode}
+\NewDocumentEnvironment{tightspacing}{O{1}}
+ {\dimen2=\fontdimen2\font
+ \ifcase #1
+ \spaceskip=\z@
+ \or % 1 -1.25%
+ \spaceskip=.9875\dimen2 \@plus .0125\dimen2 \@minus .5\dimen2
+ \or % 2 -2.5%
+ \spaceskip=.975\dimen2 \@plus .025\dimen2 \@minus .5\dimen2
+ \or % 3 -5%
+ \spaceskip=.95\dimen2 \@plus .05\dimen2 \@minus .5\dimen2
+ \else % >= 4 -10%
+ \spaceskip=.9\dimen2 \@plus .1\dimen2 \@minus .5\dimen2
+ \fi
+ \ignorespaces}
+ {\ignorespacesafterend}
+
+% \end{macrocode}
+% \end{environment}
+%
+%
+% \subsection{Microtype Front\capitalhyphen End}
+%
+% \subsubsection*{Tracking}
+%
+% \begin{environment}{setfonttracking}
+%
+% To archieve the control we want,
+% we must tinker with \packagename{microtype's} internals.
+% Doh!
+%
+% \begin{macrocode}
+\NewDocumentEnvironment{setfonttracking}{m}
+ {\edef\MT@letterspace@{#1}%
+ \lsstyle
+ \ignorespaces}
+ {\ignorespacesafterend}
+
+% \end{macrocode}
+% \end{environment}
+%
+%
+% \subsubsection*{Font Expansion}
+%
+% \begin{macro}{\typog@setup@font@expansion}
+% Note that we cannot factor the encodings into a macro;
+% a single encoding would qualify, though.
+% We need to support multiple encodings and thus go with the literal solution.
+%
+% \begin{macrocode}
+\newcommand*{\typog@setup@font@expansion}
+ {\SetExpansion
+ [context = typog@shrink1,
+ shrink = \typog@shrink@i,
+ stretch = 0]%
+ {encoding = {*}}%
+ {}
+ \SetExpansion
+ [context = typog@shrink2,
+ shrink = \typog@shrink@ii,
+ stretch = 0]%
+ {encoding = {*}}%
+ {}
+ \SetExpansion
+ [context = typog@shrink3,
+ shrink = \typog@shrink@iii,
+ stretch = 0]%
+ {encoding = {*}}%
+ {}
+
+ \SetExpansion
+ [context = typog@stretch1,
+ shrink = 0,
+ stretch = \typog@stretch@i]%
+ {encoding = {*}}%
+ {}
+ \SetExpansion
+ [context = typog@stretch2,
+ shrink = 0,
+ stretch = \typog@stretch@ii]%
+ {encoding = {*}}%
+ {}
+ \SetExpansion
+ [context = typog@stretch3,
+ shrink = 0,
+ stretch = \typog@stretch@iii]%
+ {encoding = {*}}%
+ {}
+
+ \SetExpansion
+ [context = typog@expand1,
+ shrink = \typog@shrink@i,
+ stretch = \typog@stretch@i]%
+ {encoding = {*}}%
+ {}
+ \SetExpansion
+ [context = typog@expand2,
+ shrink = \typog@shrink@ii,
+ stretch = \typog@stretch@ii]%
+ {encoding = {*}}%
+ {}
+ \SetExpansion
+ [context = typog@expand3,
+ shrink = \typog@shrink@iii,
+ stretch = \typog@stretch@iii]%
+ {encoding = {*}}%
+ {}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typog@test@microtype@expansion@feature}
+% We cannot even parse the \cs{iftypog@microtype@preloaded}~part further down
+% unless the \cs{ifMT@expansion}~conditional exists.
+% So we hoist this test in a macro of its own.
+% It only gets called if package~\packagename{microtype} already has been sourced.
+%
+% \begin{macrocode}
+\newcommand*{\typog@test@microtype@expansion@feature}
+ {\ifMT@expansion
+ \typog@typeout{microtype preloaded -- font expansion features available}%
+ \def\typog@require@microtype@expansion{\relax}
+ \typog@setup@font@expansion
+ \else
+ \PackageWarning{typog}{microtype preloaded,\space
+ but font expansion is disabled}%
+ \def\typog@require@microtype@expansion
+ {\PackageError{typog}
+ {microtype font expansion disabled}
+ {pass option `expansion' to package microtype}}
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typog@require@microtype@expansion}
+% We are all set for the initialization of the font expansion,
+% however, we must be careful in which (load-)state
+% package~\packagename{microtype} is in.
+% Compare the code for \cs{typog@require@microtype}
+% and~\cs{typog@require@preloaded@microtype}.
+%
+% Initialize our own flag and setup meaningful messages for later feature checks.
+%
+% \begin{macrocode}
+\iftypog@microtype@preloaded
+ \typog@test@microtype@expansion@feature
+\else
+ \def\typog@require@microtype@expansion
+ {\PackageError{typog}%
+ {package microtype not (pre-)loaded, %
+ which is required for typog's font expansion}%
+ {require package microtype before package typog}}
+\fi
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{setfontshrink}
+% \begin{macrocode}
+\NewDocumentEnvironment{setfontshrink}{O{1}}
+ {\typog@require@microtype@expansion
+ \ifcase#1% 0
+ \relax
+ \or % 1
+ \microtypecontext{expansion=typog@shrink1}%
+ \or % 2
+ \microtypecontext{expansion=typog@shrink2}%
+ \else % >= 3
+ \microtypecontext{expansion=typog@shrink3}%
+ \fi
+ \ignorespaces}
+ {\ignorespacesafterend}
+
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{environment}{setfontstretch}
+% \begin{macrocode}
+\NewDocumentEnvironment{setfontstretch}{O{1}}
+ {\typog@require@microtype@expansion
+ \ifcase#1% 0
+ \relax
+ \or % 1
+ \microtypecontext{expansion=typog@stretch1}%
+ \or % 2
+ \microtypecontext{expansion=typog@stretch2}%
+ \else % >= 3
+ \microtypecontext{expansion=typog@stretch3}%
+ \fi
+ \ignorespaces}
+ {\ignorespacesafterend}
+
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{environment}{setfontexpand}
+% \begin{macrocode}
+\NewDocumentEnvironment{setfontexpand}{O{1}}
+ {\typog@require@microtype@expansion
+ \ifcase#1% 0
+ \relax
+ \or % 1
+ \microtypecontext{expansion=typog@expand1}%
+ \or % 2
+ \microtypecontext{expansion=typog@expand2}%
+ \else % >= 3
+ \microtypecontext{expansion=typog@expand3}%
+ \fi
+ \ignorespaces}
+ {\ignorespacesafterend}
+
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{environment}{nofontexpansion}
+% Implementation: We proceed a different approach with respect to requiring package microtype.
+% The semantics of the macro is to switch something off.
+% If it is not \singlequotes{on} because the necessary package was not loaded, a no-op is ok.
+%
+% \begin{macrocode}
+\NewDocumentEnvironment{nofontexpansion}{}
+ {\ifdefined\microtypesetup
+ \microtypesetup{expansion=false}%
+ \fi
+ \ignorespaces}
+ {\ignorespacesafterend}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{environment}{nofontexpand}
+% Define |nofontexpand| as an alias of |nofontexpansion|.
+%
+% \begin{macrocode}
+\let\nofontexpand=\nofontexpansion
+\let\endnofontexpand=\endnofontexpansion
+
+% \end{macrocode}
+% \end{environment}
+%
+%
+% \subsubsection*{Character Protrusion}
+%
+% \begin{environment}{nocharprotrusion}
+% See \singlequotes{Implementation} comment of |nofontexpansion|.
+%
+% \begin{macrocode}
+\NewDocumentEnvironment{nocharprotrusion}{}
+ {\ifdefined\microtypesetup
+ \microtypesetup{protrusion=false}%
+ \fi
+ \ignorespaces}
+ {\ignorespacesafterend}
+
+% \end{macrocode}
+% \end{environment}
+%
+%
+% \subsection{Sloppy Paragraphs}
+%
+% \begin{macro}{\typog@scaled@emergencystretch}
+% Compute the correct scale factor for the emergency stretch
+% even if we do not have a valid \cs{linewidth}.
+%
+% \begin{macrocode}
+\newcommand*{\typog@scaled@emergencystretch}[1]
+ {\emergencystretch=\ifdim\linewidth=\z@
+ #1%
+ \else
+ \dimexpr (#1) * \linewidth / \textwidth
+ \fi}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\slightlysloppy}
+% Macro~\cs{slightlysloppy} takes an optional~\meta{sloppiness} index ranging from~0 to~8,
+% where~0 means the same as \cs{fussy} and~8 or more works like \cs{sloppy}.
+% The default \meta{sloppiness} is~1.
+%
+% \begin{macrocode}
+\NewDocumentCommand{\slightlysloppy}{O{1}}
+ {\ifcase #1% 0
+ % \tolerance=200
+ % \emergencystretch=\z@
+ % \hfuzz=.1\p@
+ % \vfuzz=\hfuzz
+ \fussy
+ \or % 1
+ \pretolerance=165%
+ \tolerance=330%
+ \typog@scaled@emergencystretch{.375em}%
+ \hfuzz=.15\p@
+ \vfuzz=\hfuzz
+ \or % 2
+ \pretolerance=265%
+ \tolerance=530%
+ \typog@scaled@emergencystretch{.75em}%
+ \hfuzz=.15\p@
+ \vfuzz=\hfuzz
+ \or % 3
+ \pretolerance=435%
+ \tolerance=870%
+ \typog@scaled@emergencystretch{1.125em}%
+ \hfuzz=.2\p@
+ \vfuzz=\hfuzz
+ \or % 4
+ \pretolerance=705%
+ \tolerance=1410%
+ \typog@scaled@emergencystretch{1.5em}%
+ \hfuzz=.3\p@
+ \vfuzz=\hfuzz
+ \or % 5
+ \pretolerance=1155%
+ \tolerance=2310%
+ \typog@scaled@emergencystretch{1.875em}%
+ \hfuzz=.35\p@
+ \vfuzz=\hfuzz
+ \or % 6
+ \pretolerance=1880%
+ \tolerance=3760%
+ \typog@scaled@emergencystretch{2.25em}%
+ \hfuzz=.4\p@
+ \vfuzz=\hfuzz
+ \or % 7
+ \pretolerance=3065%
+ \tolerance=6130%
+ \typog@scaled@emergencystretch{2.625em}%
+ \hfuzz=.45\p@
+ \vfuzz=\hfuzz
+ \else % >= 8
+ % \tolerance=9999
+ % \emergencystretch=3em
+ % \hfuzz=.5\p@
+ % \vfuzz=\hfuzz
+ \sloppy
+ \fi
+ \ignorespaces}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{implementationnote}
+% \begin{itemize}
+% \item The \cs{tolerance}~values are calculated as the geometric mean of the extreme
+% values~200 and~9999. This means the factor
+% \begin{equation*}
+% f = \Big(\frac{9999}{200}\Big)^{1/8} \approx 1.63
+% \end{equation*}
+% defines additional tolerances which we generously round values in the actual
+% implementation.
+%
+% \item The \cs{emergencystretch} is scaled linearly with \meta{sloppiness} \emph{and} the
+% ratio of the actual \cs{linewidth} to the (maximum) \cs{textwidth}.
+%
+% \item The \cs{hfuzz}~values are interpolated linearly with \meta{sloppiness} between .1pt
+% and~.5pt.
+% \end{itemize}
+%
+% Maxima code to calculate the intermediate values.
+%
+% \begin{description}
+% \item[Initialize.] \code{load("list\_functions")\$}
+% \item[\cs{tolerance}:] \code{logspace(log10(200), log10(9999), 9), numer;}
+% \item[\cs{emergencystretch}:] \code{linspace(0, 3, 9), numer;}
+% \item[\cs{hfuzz}:] \code{linspace(0.1, 0.5, 9);}
+% \end{description}
+% \end{implementationnote}
+%
+% \begin{environment}{slightlysloppypar}
+% \begin{macrocode}
+\NewDocumentEnvironment{slightlysloppypar}{O{1}}
+ {\par\slightlysloppy[#1]\ignorespaces}
+ {\par}
+
+% \end{macrocode}
+% \end{environment}
+%
+%
+% \subsection[Vert.~Tie Paragraphs]{Vertically Partially-Tied Paragraphs}
+%
+% \begin{macro}{\typog@geometric@mean}
+% This is just the usual geometric mean of two values~\(x\) and~\(y\): \(\sqrt{x y}\).
+%
+% \begin{macrocode}
+\ExplSyntaxOn
+\newcommand*{\typog@geometric@mean}[2]
+ {\fp_to_int:n {sqrt((#1) * (#2))}}
+\ExplSyntaxOff
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{typog@mean@penalty}
+% Reserve a private counter for the geometric-mean penalties.
+%
+% \begin{macrocode}
+\newcounter{typog@mean@penalty}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\vtietop}
+% \begin{macrocode}
+\NewDocumentCommand{\vtietop}{O{3}}
+ {\setcounter{typog@mean@penalty}
+ {\typog@geometric@mean{\@M}{\clubpenalty}}%
+ \typog@typeout{vtietop: penalties \the\@M--\the\value{typog@mean@penalty}--\the\clubpenalty}%
+ \unless\ifnum\clubpenalty<\@M
+ \PackageWarning{typog}{vtietop: clubpenalty=\the\clubpenalty\space>= 10000}%
+ \fi
+ \ifcase#1% 0
+ \relax
+ \or % 1
+ \relax
+ \or % 2
+ \clubpenalties 3
+ \@M
+ \value{typog@mean@penalty}
+ \clubpenalty
+ \or % 3
+ \clubpenalties 4
+ \@M \@M
+ \value{typog@mean@penalty}
+ \clubpenalty
+ \or % 4
+ \clubpenalties 5
+ \@M \@M \@M
+ \value{typog@mean@penalty}
+ \clubpenalty
+ \or % 5
+ \clubpenalties 6
+ \@M \@M \@M \@M
+ \value{typog@mean@penalty}
+ \clubpenalty
+ \or % 6
+ \clubpenalties 7
+ \@M \@M \@M \@M \@M
+ \value{typog@mean@penalty}
+ \clubpenalty
+ \or % 7
+ \clubpenalties 8
+ \@M \@M \@M \@M \@M
+ \value{typog@mean@penalty}
+ \clubpenalty
+ \or % 8
+ \clubpenalties 9
+ \@M \@M \@M \@M \@M
+ \value{typog@mean@penalty}
+ \clubpenalty
+ \else % >= 9
+ \clubpenalties 10
+ \@M \@M \@M \@M \@M \@M \@M \@M
+ \value{typog@mean@penalty}
+ \clubpenalty
+ \fi}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{vtietoppar}
+% \begin{macrocode}
+\NewDocumentEnvironment{vtietoppar}{O{3}}
+ {\vtietop[#1]}
+ {\par
+ \ignorespacesafterend}
+
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\splicevtietop}
+% \begin{macrocode}
+\NewDocumentCommand{\splicevtietop}{O{3}}
+ {\let\typog@old@item=\@item
+ \def\@item[##1]{\typog@old@item[##1]\vtietop[#1]}%
+ \ignorespaces}
+
+% \end{macrocode}
+%
+% We define an extra style for the users of \packagename{enumitem}.
+% Its only drawback is that it hard-codes the default number of tied lines~(3).
+%
+% \begin{macrocode}
+\ifdefined\SetEnumitemKey
+ \SetEnumitemKey{vtietop}{first=\splicevtietop}
+\fi
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\vtiebot}
+% \begin{macrocode}
+\NewDocumentCommand{\vtiebot}{O{3}}
+ {\setcounter{typog@mean@penalty}
+ {\typog@geometric@mean{\@M}{\widowpenalty}}%
+ \typog@typeout{vtiebot: penalties \the\@M--\the\value{typog@mean@penalty}--\the\widowpenalty}%
+ \unless\ifnum\widowpenalty<\@M
+ \PackageWarning{typog}{vtiebot: widowpenalty=\the\widowpenalty\space>= 10000}%
+ \fi
+ \ifcase#1% 0
+ \relax
+ \or % 1
+ \relax
+ \or % 2
+ \widowpenalties 3
+ \@M
+ \value{typog@mean@penalty}
+ \widowpenalty
+ \or % 3
+ \widowpenalties 4
+ \@M \@M
+ \value{typog@mean@penalty}
+ \widowpenalty
+ \or % 4
+ \widowpenalties 5
+ \@M \@M \@M
+ \value{typog@mean@penalty}
+ \widowpenalty
+ \or % 5
+ \widowpenalties 6
+ \@M \@M \@M \@M
+ \value{typog@mean@penalty}
+ \widowpenalty
+ \or % 6
+ \widowpenalties 7
+ \@M \@M \@M \@M \@M
+ \value{typog@mean@penalty}
+ \widowpenalty
+ \or % 7
+ \widowpenalties 8
+ \@M \@M \@M \@M \@M \@M
+ \value{typog@mean@penalty}
+ \widowpenalty
+ \or % 8
+ \widowpenalties 9
+ \@M \@M \@M \@M \@M \@M \@M
+ \value{typog@mean@penalty}
+ \widowpenalty
+ \else % >= 9
+ \widowpenalties 10
+ \@M \@M \@M \@M \@M \@M \@M \@M
+ \value{typog@mean@penalty}
+ \widowpenalty
+ \fi}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{vtiebotpar}
+% \begin{macrocode}
+\NewDocumentEnvironment{vtiebotpar}{O{3}}
+ {\vtiebot[#1]}
+ {\par
+ \ignorespacesafterend}
+
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\typog@vtiebotdisp}
+% \begin{macrocode}
+\NewDocumentCommand{\typog@vtiebotdisp}{m}
+ {\setcounter{typog@mean@penalty}
+ {\typog@geometric@mean{\@M}{\displaywidowpenalty}}%
+ \typog@typeout{vtiebotdisp: penalties \the\@M--\the\value{typog@mean@penalty}--\the\displaywidowpenalty}%
+ \unless\ifnum\displaywidowpenalty<\@M
+ \PackageWarning{typog}{vtiebotdisp: displaywidowpenalty=\the\displaywidowpenalty\space>= 10000}%
+ \fi
+ \ifcase#1% 0
+ \relax
+ \or % 1
+ \relax
+ \or % 2
+ \displaywidowpenalties 3
+ \@M
+ \value{typog@mean@penalty}
+ \displaywidowpenalty
+ \or % 3
+ \displaywidowpenalties 4
+ \@M \@M
+ \value{typog@mean@penalty}
+ \displaywidowpenalty
+ \or % 4
+ \displaywidowpenalties 5
+ \@M \@M \@M
+ \value{typog@mean@penalty}
+ \displaywidowpenalty
+ \or % 5
+ \displaywidowpenalties 6
+ \@M \@M \@M \@M
+ \value{typog@mean@penalty}
+ \displaywidowpenalty
+ \or % 6
+ \displaywidowpenalties 7
+ \@M \@M \@M \@M \@M
+ \value{typog@mean@penalty}
+ \displaywidowpenalty
+ \or % 7
+ \displaywidowpenalties 8
+ \@M \@M \@M \@M \@M \@M
+ \value{typog@mean@penalty}
+ \displaywidowpenalty
+ \or % 8
+ \displaywidowpenalties 9
+ \@M \@M \@M \@M \@M \@M \@M
+ \value{typog@mean@penalty}
+ \displaywidowpenalty
+ \else % >= 9
+ \displaywidowpenalties 10
+ \@M \@M \@M \@M \@M \@M \@M \@M
+ \value{typog@mean@penalty}
+ \displaywidowpenalty
+ \fi}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{vtiebotdisp}
+% \begin{macrocode}
+\NewDocumentEnvironment{vtiebotdisp}{O{3}}
+ {\typog@vtiebotdisp{#1}}
+ {\ignorespacesafterend}
+
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{environment}{vtiebotdisptoppar}
+% \begin{macrocode}
+\NewDocumentEnvironment{vtiebotdisptoppar}{O{3}o}
+ {\postdisplaypenalty=\@M
+ \predisplaypenalty=10001% in accordance with package `widows-and-orphans'
+ \edef\typog@@top@lines{\IfNoValueTF{#2}{#1}{#2}}%
+ \edef\typog@@after@display@math{\vtietop[\typog@@top@lines]}%
+ \PushPostHook{display}{\aftergroup\typog@@after@display@math}%
+ \vtiebotdisp[#1]}
+ {\par
+ \PopPostHook{display}%
+ \ignorespacesafterend}
+
+% \end{macrocode}
+% \end{environment}
+%
+%
+% \subsection{Breakable Disp.~Eqs.}
+%
+% \begin{environment}{breakabledisplay}
+% We use a different default, 3, than \cs{allowdisplaybreaks} which utilizes~4 as its
+% default.
+%
+% \begin{macrocode}
+\newenvironment*{breakabledisplay}[1][3]
+ {\allowdisplaybreaks[#1]}
+ {\ignorespacesafterend}
+
+% \end{macrocode}
+% \end{environment}
+%
+%
+% \subsection{Setspace Front-End}
+%
+% \begin{macro}{\typog@iter@limit}
+% The maximum number of iterations we perform before bailing out with an error. Can be
+% changed by the user if convergence is slow.
+%
+% \begin{macrocode}
+\newcommand*{\typog@setbaselineskip@iter@limit}{10}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typog@setbaselineskip@relative@error}
+% The maximum relative error of the ratio we tolerate for the final baselineskip over the
+% target baselineskip. Can also be changed by the user if necessary.
+%
+% \begin{macrocode}
+\newcommand*{\typog@setbaselineskip@relative@error}{.001}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typog@setbaselineskip}
+% Given the \meta{target-baselineskip} as argument iterate setting \cs{setstretch} until the
+% error drops below our threshold.
+%
+% \begin{macrocode}
+\ExplSyntaxOn
+\cs_new:Npn \typog@setbaselineskip #1
+{
+% \end{macrocode}
+%
+% Initialize our ``emergency-stop'' loop counter.
+%
+% \begin{macrocode}
+ \int_set:Nn \l_tmpa_int {1}
+ \int_set:Nn \l_tmpb_int {\typog@setbaselineskip@iter@limit}
+% \end{macrocode}
+%
+% Note that the call to \cs{glueexpr} is required to consume dimensions that carry
+% stretchability via |plus| or |minus|.
+%
+% \begin{macrocode}
+ \dim_set:Nn \l_tmpa_dim {\glueexpr #1}
+
+ \typog@typeout{\string\setbaselineskip:\space
+ initial\space baselineskip:\space \the\baselineskip}
+ \typog@typeout{\string\setbaselineskip:\space
+ target\space baselineskip:\space \dim_use:N \l_tmpa_dim}
+
+ \dim_compare:nNnTF {\baselineskip} > {\c_zero_dim}
+ {}
+ {
+ \PackageError{typog}
+ {\string\setbaselineskip:\space
+ baselineskip\space not\space positive}
+ {}
+ }
+
+ \dim_compare:nNnTF {\l_tmpa_dim} > {\c_zero_dim}
+ {}
+ {
+ \PackageError{typog}
+ {\string\setbaselineskip:\space target\space
+ baselineskip\space must\space be\space
+ positive}
+ {}
+ }
+
+ \skip_if_eq:nnTF {\l_tmpa_dim} {\glueexpr #1}
+ {}
+ {
+ \PackageWarning{typog}
+ {\string\setbaselineskip:\space argument\space
+ is\space a\space skip;\space
+ will\space ignore\space glue}
+ {}
+ }
+
+ \fp_set:Nn \l_tmpa_fp {\l_tmpa_dim / \baselineskip}
+ \fp_until_do:nNnn {abs(\l_tmpa_dim / \baselineskip - 1)} <
+ {\typog@setbaselineskip@relative@error}
+ {
+ \setstretch{\fp_use:N \l_tmpa_fp}
+ \fp_set:Nn \l_tmpa_fp
+ {\l_tmpa_fp * \l_tmpa_dim / \baselineskip}
+
+ \int_incr:N \l_tmpa_int
+ \int_compare:nNnTF {\l_tmpa_int} > {\l_tmpb_int}
+ {
+ \PackageError{typog}
+ {\string\setbaselineskip:\space excessive\space
+ number\space of\space iterations:\space
+ \int_use:N \l_tmpa_int\space >\space
+ \int_use:N \l_tmpb_int}
+ {}
+ }
+ {}
+ }
+
+ \typog@typeout{\string\setbaselineskip:\space
+ final\space \string\setstretch\space argument:\space
+ \fp_use:N \l_tmpa_fp}
+ \typog@typeout{\string\setbaselineskip:\space
+ final\space baselineskip:\space \the\baselineskip}
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\setbaselineskip}
+% \changes{v0.3}{2024-04-04}{New macro.}
+%
+% Set the \cs{baselineskip} to an absolute length.
+%
+% \begin{implementationnote}
+% Viewed as a standalone macro \cs{setbaselineskip} does not need the decoration
+% \cs{AfterPreamble}. However, all of its siblings, \cs{setbaselineskippercentage},
+% \cs{setleading}, and \cs{setleadingpercentage} then would behave differently as they are
+% delayed to the end of the preamble, but \cs{setbaselineskip} immediately becomes
+% effective. For example, the successive calls
+%
+% \begin{codeexample}
+% \cs{setbaselineskippercentage}\{140\} \\
+% \cs{setbaselineskip}\{12.5pt\}
+% \end{codeexample}
+%
+% \noindent
+% in the preamble would set the baselineskip to 140\% in the document. Therefore,
+% \cs{setbaselineskip} is delayed too and the order of the calls thus preserved.
+% \end{implementationnote}
+%
+% \begin{macrocode}
+\cs_new:Npn \setbaselineskip #1
+{
+ \AfterPreamble{\typog@setbaselineskip{#1}}
+ \ignorespaces
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\resetbaselineskip}
+% \changes{v0.3}{2024-04-04}{New macro.}
+%
+% Set the \cs{baselineskip} to \singlequotes{neutral}.
+%
+% \begin{macrocode}
+\cs_new:Npn \resetbaselineskip
+{
+ \AfterPreamble{\setstretch{1}}
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{ldimen}{\typogfontsize}
+% \changes{v0.3}{2024-04-04}{New dimen.}
+% Define the default font-size/quad size.
+%
+% \begin{macrocode}
+\dim_new:N \typogfontsize
+% \end{macrocode}
+%
+% Initialize \cs{typogfontsize} at the end of the preamble, which is after all fonts have
+% been setup.
+%
+% \begin{macrocode}
+\AfterEndPreamble{
+ \dim_set:Nn \typogfontsize {\fontdimen6\font}
+ \typog@typeout{\string\typogfontsize =
+ \dim_use:N \typogfontsize\space
+ (at\space begin\space of\space document)}
+}
+
+% \end{macrocode}
+% \end{ldimen}
+%
+% \begin{macro}{\setbaselineskippercentage}
+% \changes{v0.3}{2024-04-04}{New macro.}
+% \begin{macrocode}
+\cs_new:Npn \setbaselineskippercentage #1
+{
+ \AfterPreamble{
+ \dim_compare:nNnTF {\typogfontsize} > {\c_zero_dim}
+ {
+ \typog@setbaselineskip{
+ \fp_eval:n {(#1) / 100} \typogfontsize}
+ }
+ {
+ \PackageError{typog}
+ {\string\setbaselineskippercentage:\space
+ \string\typogfontsize <= 0}
+ {Maybe\space \string\typogfontsize\space
+ is\space uninitialized?}
+ }
+ }
+ \ignorespaces
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\setleading}
+% \changes{v0.3}{2024-04-04}{New macro.}
+% \begin{macrocode}
+\cs_new:Npn \setleading #1
+{
+ \AfterPreamble{
+ \dim_compare:nNnTF {\typogfontsize} > {\c_zero_dim}
+ {
+ \typog@setbaselineskip{\typogfontsize + \dimexpr #1}
+ }
+ {
+ \PackageError{typog}
+ {\string\setleading:\space
+ \string\typogfontsize <= 0}
+ {Maybe\space \string\typogfontsize\space
+ is\space uninitialized?}
+ }
+ }
+ \ignorespaces
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\setleadingpercentage}
+% \changes{v0.3}{2024-04-04}{New macro.}
+% \begin{macrocode}
+\cs_new:Npn \setleadingpercentage #1
+{
+ \AfterPreamble{
+ \dim_compare:nNnTF {\typogfontsize} > {\c_zero_dim}
+ {
+ \typog@setbaselineskip{
+ \fp_eval:n {1 + (#1) / 100} \typogfontsize}
+ }
+ {
+ \PackageError{typog}
+ {\string\setleadingpercentage:\space
+ \string\typogfontsize <= 0}
+ {Maybe\space \string\typogfontsize\space
+ is\space uninitialized?}
+ }
+ }
+ \ignorespaces
+}
+\ExplSyntaxOff
+
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Smooth Ragged}
+%
+% \begin{macro}{\typog@repeat}
+% As we shall have to repeat the line specifications for our paragraphs so often we introduce
+% the two argument macro~\cs{typog@repeat} that takes a \meta{repeat-count} and a \meta{body}
+% that is repeated.
+%
+% \begin{macrocode}
+\ExplSyntaxOn
+\cs_new_eq:NN \typog@repeat \prg_replicate:nn
+
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\typog@mod}
+% For error checking we shall need the modulo operation on integers, i.\,e., the remainder of
+% an integral division.
+%
+% \begin{macrocode}
+\newcommand*{\typog@mod}[2]{\int_mod:nn{#1}{#2}}
+\ExplSyntaxOff
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\typog@triplet@max@lines}
+% Maximum number of lines a smoothraggedright paragraph can have with the triplet generator.
+% The number must be divisible by~3.
+%
+% \begin{macrocode}
+\newcommand*{\typog@triplet@max@lines}{99}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{smoothraggedrightshapetriplet}
+% Engine for 3-line repetitions.
+%
+% \begin{macrocode}
+\define@key[typog]{smoothraggedrightshapetriplet}{leftskip}%
+ {\def\typog@@triplet@leftskip{#1}}
+\define@key[typog]{smoothraggedrightshapetriplet}{parindent}%
+ {\def\typog@@triplet@parindent{#1}}
+\NewDocumentEnvironment{smoothraggedrightshapetriplet}{O{} m m m}
+ {\def\typog@@triplet@leftskip{\z@}%
+ \def\typog@@triplet@parindent{\z@}%
+ \setkeys*[typog]{smoothraggedrightshapetriplet}{#1}%
+ \skip0=\typog@@triplet@leftskip\relax
+ \skip1=#2\relax
+ \skip2=#3\relax
+ \skip3=#4\relax
+ \typog@typeout{smoothraggedrightshapetriplet: skip0=\the\skip0}%
+ \typog@typeout{smoothraggedrightshapetriplet: skip1=\the\skip1}%
+ \typog@typeout{smoothraggedrightshapetriplet: skip2=\the\skip2}%
+ \typog@typeout{smoothraggedrightshapetriplet: skip3=\the\skip3}%
+ \unless\ifnum\typog@mod{\typog@triplet@max@lines}{3}=0
+ \PackageError{typog}
+ {Line number of triplet generator %
+ (\typog@triplet@max@lines) not divisible by 3}
+ {}
+ \fi
+ \edef\typog@@triplet@linespecs{%
+ \glueexpr \skip0 + \typog@@triplet@parindent\relax
+ \glueexpr \skip1 - \typog@@triplet@parindent\relax
+ \skip0 \skip2 \skip0 \skip3
+ \typog@repeat{\numexpr\typog@triplet@max@lines / 3 - 1}
+ {\skip0 \skip1 \skip0 \skip2 \skip0 \skip3}}
+ \parshape=\typog@triplet@max@lines\typog@@triplet@linespecs\relax}
+ {\par}
+
+% \end{macrocode}
+% \end{environment}
+%
+%
+% \begin{macro}{\typog@quintuplet@max@lines}
+% Maximum number of lines a smoothraggedright paragraph can have with the quintuplet
+% generator. The number must be divisible by~5.
+%
+% \begin{macrocode}
+\newcommand*{\typog@quintuplet@max@lines}{95}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{smoothraggedrightshapequintuplet}
+% Engine for 5-line repetitions.
+%
+% \begin{macrocode}
+\define@key[typog]{smoothraggedrightshapequintuplet}{leftskip}
+ {\def\typog@@quintuplet@leftskip{#1}}
+\define@key[typog]{smoothraggedrightshapequintuplet}{parindent}
+ {\def\typog@@quintuplet@parindent{#1}}
+\NewDocumentEnvironment{smoothraggedrightshapequintuplet}{O{} m m m m m}
+ {\def\typog@@quintuplet@leftskip{\z@}%
+ \def\typog@@quintuplet@parindent{\z@}%
+ \setkeys*[typog]{smoothraggedrightshapequintuplet}{#1}%
+ \skip0=\typog@@quintuplet@leftskip
+ \skip1=#2\relax
+ \skip2=#3\relax
+ \skip3=#4\relax
+ \skip4=#5\relax
+ \skip5=#6\relax
+ \typog@typeout{smoothraggedrightshapequintuplet: skip0=\the\skip0}%
+ \typog@typeout{smoothraggedrightshapequintuplet: skip1=\the\skip1}%
+ \typog@typeout{smoothraggedrightshapequintuplet: skip2=\the\skip2}%
+ \typog@typeout{smoothraggedrightshapequintuplet: skip3=\the\skip3}%
+ \typog@typeout{smoothraggedrightshapequintuplet: skip4=\the\skip4}%
+ \typog@typeout{smoothraggedrightshapequintuplet: skip5=\the\skip5}%
+ \unless\ifnum\typog@mod{\typog@quintuplet@max@lines}{5}=0
+ \PackageError{typog}
+ {Line number of quintuplet generator %
+ (\typog@quintuplet@max@lines) not divisible by 5}
+ {}
+ \fi
+ \edef\typog@@quintuplet@linespecs{%
+ \glueexpr \skip0 + \typog@@quintuplet@parindent\relax
+ \glueexpr \skip1 - \typog@@quintuplet@parindent\relax
+ \skip0 \skip2 \skip0 \skip3 \skip0 \skip4 \skip0 \skip5
+ \typog@repeat{\numexpr\typog@quintuplet@max@lines / 5 - 1}
+ {\skip0 \skip1 \skip0 \skip2 \skip0 \skip3 \skip0 \skip4 \skip0 \skip5}}
+ \parshape=\typog@quintuplet@max@lines\typog@@quintuplet@linespecs\relax}
+ {\par}
+% \end{macrocode}
+
+% \end{environment}
+%
+%
+% \begin{macro}{\typog@septuplet@max@lines}
+% Maximum number of lines a smoothraggedright paragraph can have with the septuplet
+% generator. The number must be divisible by~7.
+%
+% \begin{macrocode}
+\newcommand*{\typog@septuplet@max@lines}{98}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{smoothraggedrightshapeseptuplet}
+% Engine for 7-line repetitions.
+%
+% \begin{macrocode}
+\define@key[typog]{smoothraggedrightshapeseptuplet}{leftskip}%
+ {\def\typog@@septuplet@leftskip{#1}}
+\define@key[typog]{smoothraggedrightshapeseptuplet}{parindent}%
+ {\def\typog@@septuplet@parindent{#1}}
+\NewDocumentEnvironment{smoothraggedrightshapeseptuplet}{O{} m m m m m m m}
+ {\def\typog@@septuplet@leftskip{\z@}%
+ \def\typog@@septuplet@parindent{\z@}%
+ \setkeys*[typog]{smoothraggedrightshapeseptuplet}{#1}%
+ \skip0=\typog@@septuplet@leftskip
+ \skip1=#2\relax
+ \skip2=#3\relax
+ \skip3=#4\relax
+ \skip4=#5\relax
+ \skip5=#6\relax
+ \skip6=#7\relax
+ \skip7=#8\relax
+ \typog@typeout{smoothraggedrightshapeseptuplet: skip0=\the\skip0}%
+ \typog@typeout{smoothraggedrightshapeseptuplet: skip1=\the\skip1}%
+ \typog@typeout{smoothraggedrightshapeseptuplet: skip2=\the\skip2}%
+ \typog@typeout{smoothraggedrightshapeseptuplet: skip3=\the\skip3}%
+ \typog@typeout{smoothraggedrightshapeseptuplet: skip4=\the\skip4}%
+ \typog@typeout{smoothraggedrightshapeseptuplet: skip5=\the\skip5}%
+ \typog@typeout{smoothraggedrightshapeseptuplet: skip6=\the\skip6}%
+ \typog@typeout{smoothraggedrightshapeseptuplet: skip7=\the\skip7}%
+ \unless\ifnum\typog@mod{\typog@septuplet@max@lines}{7}=0
+ \PackageError{typog}
+ {Line number of septuplet generator %
+ (\typog@septuplet@max@lines) not divisible by 7}
+ {}
+ \fi
+ \edef\typog@@septuplet@linespecs{%
+ \glueexpr \skip0 + \typog@@septuplet@parindent\relax
+ \glueexpr \skip1 - typog@@septuplet@parindent\relax
+ \skip0 \skip2 \skip0 \skip3 \skip0 \skip4 \skip0 \skip5 \skip0 \skip6 \skip0 \skip7
+ \typog@repeat{\numexpr\typog@septuplet@max@lines / 7 - 1}
+ {\skip0 \skip1 \skip0 \skip2 \skip0 \skip3 \skip0 \skip4 \skip0 \skip5 \skip0 \skip6 \skip0 \skip7}}
+ \parshape=\typog@septuplet@max@lines\typog@@septuplet@linespecs\relax}
+ {\par}
+
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\smoothraggedrightfuzzfactor}
+% \begin{macrocode}
+\newcommand*{\smoothraggedrightfuzzfactor}{1.0}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\smoothraggedrightgenerator}
+% \begin{macrocode}
+\newcommand*{\smoothraggedrightgenerator}{triplet}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\smoothraggedrightleftskip}
+% \begin{macrocode}
+\newlength{\smoothraggedrightleftskip}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\smoothraggedrightparindent}
+% \begin{macrocode}
+\newlength{\smoothraggedrightparindent}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\smoothraggedrightragwidth}
+% \begin{macrocode}
+\newlength{\smoothraggedrightragwidth}
+\setlength{\smoothraggedrightragwidth}{2em}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{ldimen}{\typog@fuzzwidth}
+% \begin{macrocode}
+\newdimen{\typog@fuzzwidth}
+
+% \end{macrocode}
+% \end{ldimen}
+%
+% \begin{environment}{smoothraggedrightpar}
+% The longest line will be \cs{linewidth} wide
+% unless overridden by optional argument~|linewidth|.
+%
+% \begin{macrocode}
+\define@key[typog]{smoothraggedrightpar}{linewidth}%
+ {\def\typog@@linewidth{#1}}
+
+\NewDocumentEnvironment{smoothraggedrightpar}{O{}}
+ {\edef\typog@@linewidth{\linewidth}%
+ \setkeys[typog]{smoothraggedrightpar}{#1}%
+% \end{macrocode}
+% Convert generator name to an integer suitable for \cs{ifcase}.
+% \begin{macrocode}
+ \edef\typog@@generatorchoice{%
+ \ifnum\pdf@strcmp{\smoothraggedrightgenerator}{triplet}=\z@
+ 0%
+ \else
+ \ifnum\pdf@strcmp{\smoothraggedrightgenerator}{quintuplet}=\z@
+ 1%
+ \else
+ \ifnum\pdf@strcmp{\smoothraggedrightgenerator}{septuplet}=\z@
+ 2%
+ \else
+ \PackageError{typog}
+ {smoothraggedright: unknown generator name}
+ {valid generator names are triplet, quintuplet, and septuplet}%
+ \fi
+ \fi
+ \fi}%
+% \end{macrocode}
+% Obey to the indentation prescribed by any list environment.
+% \begin{macrocode}
+ \let\typog@@smoothraggedrightleftskip=\smoothraggedrightleftskip
+ \ifnum\@listdepth>0
+ \addtolength{\typog@@smoothraggedrightleftskip}{\leftmargin}%
+ \fi
+% \end{macrocode}
+% Scale the fuzz-width by the user's factor.
+% Later we shall rescale again specifically for each generator.
+% \begin{macrocode}
+ \typog@fuzzwidth=\smoothraggedrightfuzzfactor\smoothraggedrightragwidth
+% \end{macrocode}
+%
+% Now for the generator-specific code\dots
+% \begin{macrocode}
+ \ifcase\typog@@generatorchoice
+% \end{macrocode}
+%
+% |generator=triplet| produces a \doublequotes{short line -- long line -- middle length line}~sequence.
+% \begin{macrocode}
+ \typog@fuzzwidth=.25\smoothraggedrightragwidth
+ \typog@typeout{smoothraggedright: generator=triplet, typog@fuzzwidth=\the\typog@fuzzwidth}%
+ \smoothraggedrightshapetriplet[leftskip=\typog@@smoothraggedrightleftskip,
+ parindent=\glueexpr\smoothraggedrightparindent + \parindent,
+ #1]%
+ {\glueexpr \typog@@linewidth - \smoothraggedrightragwidth
+ + \glueexpr \z@ \@plus \typog@fuzzwidth\relax}% (1)
+ {\glueexpr \typog@@linewidth \@minus \typog@fuzzwidth}% (3)
+ {\glueexpr (\typog@@linewidth * 2 - \smoothraggedrightragwidth) / 2
+ + \glueexpr \z@ \@plus \typog@fuzzwidth \@minus \typog@fuzzwidth\relax}% (2)
+ \or
+% \end{macrocode}
+%
+% |generator=quintuplet|.
+% \begin{macrocode}
+ \typog@fuzzwidth=.125\smoothraggedrightragwidth
+ \typog@typeout{smoothraggedright: generator=quintuplet, typog@fuzzwidth=\the\typog@fuzzwidth}%
+ \smoothraggedrightshapequintuplet[leftskip=\typog@@smoothraggedrightleftskip,
+ parindent=\glueexpr\smoothraggedrightparindent + \parindent,
+ #1]%
+ {\glueexpr (\typog@@linewidth * 4 - \smoothraggedrightragwidth * 3) / 4
+ + \glueexpr \z@ \@plus \typog@fuzzwidth \@minus \typog@fuzzwidth\relax}% (2)
+ {\glueexpr \typog@@linewidth \@minus \typog@fuzzwidth\relax}% (5)
+ {\glueexpr (\typog@@linewidth * 2 - \smoothraggedrightragwidth) / 2
+ + \glueexpr \z@ \@plus \typog@fuzzwidth \@minus \typog@fuzzwidth\relax}% (3)
+ {\glueexpr (\typog@@linewidth * 4 - \smoothraggedrightragwidth) / 4
+ + \glueexpr \z@ \@plus \typog@fuzzwidth \@minus \typog@fuzzwidth\relax}% (4)
+ {\glueexpr \typog@@linewidth - \smoothraggedrightragwidth
+ + \glueexpr \z@ \@plus \typog@fuzzwidth\relax}% (1)
+ \or
+% \end{macrocode}
+%
+% |generator=septuplet|.
+%
+% Permutation \mbox{3 -- 6 -- 1 -- 5 -- 2 -- 7 -- 4}
+% looks \singlequotes{random} enough for our purposes.
+%
+% \begin{macrocode}
+ \typog@fuzzwidth=.08333\smoothraggedrightragwidth
+ \typog@typeout{smoothraggedright: generator=septuplet, typog@fuzzwidth=\the\typog@fuzzwidth}%
+ \smoothraggedrightshapeseptuplet[leftskip=\typog@@smoothraggedrightleftskip,
+ parindent=\glueexpr\smoothraggedrightparindent + \parindent,
+ #1]%
+ {\glueexpr (\typog@@linewidth * 3 - \smoothraggedrightragwidth * 2) / 3
+ + \glueexpr \z@ \@plus \typog@fuzzwidth \@minus \typog@fuzzwidth\relax}% (3)
+ {\glueexpr (\typog@@linewidth * 6 - \smoothraggedrightragwidth) / 6
+ + \glueexpr \z@ \@plus \typog@fuzzwidth \@minus \typog@fuzzwidth\relax}% (6)
+ {\glueexpr \typog@@linewidth - \smoothraggedrightragwidth +
+ + \glueexpr \z@ \@plus \typog@fuzzwidth\relax}% (1)
+ {\glueexpr (\typog@@linewidth * 3 - \smoothraggedrightragwidth) / 3
+ + \glueexpr \z@ \@plus \typog@fuzzwidth \@minus \typog@fuzzwidth\relax}% (5)
+ {\glueexpr (\typog@@linewidth * 6 - \smoothraggedrightragwidth * 5) / 6
+ + \glueexpr \z@ \@plus \typog@fuzzwidth \@minus \typog@fuzzwidth\relax}% (2)
+ {\glueexpr \typog@@linewidth \@minus \typog@fuzzwidth\relax}% (7)
+ {\glueexpr (\typog@@linewidth * 2 - \smoothraggedrightragwidth) / 2
+ + \glueexpr \z@ \@plus \typog@fuzzwidth \@minus \typog@fuzzwidth\relax}% (4)
+ \fi}
+ {\ifcase\typog@@generatorchoice
+ \endsmoothraggedrightshapetriplet
+ \or
+ \endsmoothraggedrightshapequintuplet
+ \or
+ \endsmoothraggedrightshapeseptuplet
+ \fi}
+
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{environment}{smoothraggedright}
+% \begin{macrocode}
+\NewDocumentEnvironment{smoothraggedright}{O{}}
+ {\PushPostHook{par}{\hskip-\parindent\smoothraggedrightpar[#1]\relax}}
+ {\par\PopPostHook{par}}
+
+% \end{macrocode}
+% \end{environment}
+%
+%
+% \iffalse
+%</package>
+% \fi
+%
+%
+% \addtocontents{toc}{\protect\end{multicols}}
+% \addtocontents{toc}{\endgroup}
+%
+%
+% \Finale
+%
+%
+%
+% \iffalse
+%<*example>
+\documentclass[a4paper]{article}
+
+\tracingonline=0
+
+\PassOptionsToPackage{dvipsnames}{xcolor}
+
+\usepackage{amsmath}
+\usepackage[main=USenglish, german]{babel}
+\usepackage{float}
+\usepackage[T1]{fontenc}
+\usepackage{fullwidth}
+\usepackage{hyphenat}
+\usepackage{mathtools}
+\usepackage[activate=true, verbose=true]{microtype}
+\usepackage{ragged2e}
+\usepackage[nobottomtitles*]{titlesec}\renewcommand*{\bottomtitlespace}{.2\textheight}
+\usepackage[debug, trackingttspacing]{typog}
+\usepackage{xcolor}
+
+\usepackage[loosest, proportional, scaled=1.064]{erewhon}
+\usepackage[erewhon]{newtxmath}
+\usepackage[scaled=.95]{cabin}
+\usepackage{inconsolata}
+\usepackage{setspace}\setstretch{1.08333}
+
+
+\def\xsfdefault{\relax}
+{
+ \def\examplefont{6}
+
+ \ifcase\examplefont % 0 -- document's default sans-serif font (e.g., ecrm1000)
+ \gdef\examplefontname{default}
+ \global\let\xsf=\sf
+ \global\let\xsfdefault=\sfdefault
+ \or % 1 -- Nunito
+ \gdef\examplefontname{Nunito}
+ \usepackage{nunito}
+ \xdef\xsfdefault{\rmdefault}
+ \gdef\xsf{\let\sfdefault=\xsfdefault\sf}
+ \or % 2 -- OpenSans
+ \gdef\examplefontname{OpenSans}
+ \usepackage[defaultsans]{opensans}
+ \xdef\xsfdefault{\sfdefault}
+ \gdef\xsf{\let\sfdefault=\xsfdefault\sf}
+ \or % 3 -- Noto Sans
+ \gdef\examplefontname{OpenSans}
+ \usepackage[sfdefault]{noto}
+ \xdef\xsfdefault{\sfdefault}
+ \gdef\xsf{\let\sfdefault=\xsfdefault\sf}
+ \or % 4 -- Roboto
+ \gdef\examplefontname{Roboto}
+ \usepackage[sfdefault]{roboto}
+ \xdef\xsfdefault{\sfdefault}
+ \gdef\xsf{\let\sfdefault=\xsfdefault\sf}
+ \or % 5 -- Montserrat
+ \gdef\examplefontname{Montserrat Alternate}
+ \usepackage[alternates]{montserrat}
+ \xdef\xsfdefault{\sfdefault}
+ \gdef\xsf{\let\sfdefault=\xsfdefault\sf}
+ \or % 6 -- Inter
+ \gdef\examplefontname{Inter}
+ \usepackage[sfdefault]{inter}
+ \xdef\xsfdefault{\sfdefault}
+ \gdef\xsf{\let\sfdefault=\xsfdefault\sf}
+ \else
+ \SelectedUnknownExampleFont
+ \fi
+
+ \typeout{typog-example: font for examples: `\xsfdefault'}%
+}
+
+
+\usepackage{hyperref}
+\usepackage{cleveref}
+
+
+\hypersetup{
+ citecolor = CadetBlue,
+ colorlinks = true,
+ linkcolor = Blue,
+ linktocpage = true,
+ pdfauthor={Dr. Christoph L. Spiel},
+ pdfkeywords={Examples,
+ LaTeX, typography, ligature, italic-correction, paragraph justification, sloppy, ragged},
+ pdfsubject={Examples for typographic fine-tuning of LaTeX},
+ pdftitle={Examples for LaTeX package typog},
+ raiselinks = false,
+ urlcolor = Mulberry
+}
+
+
+\makeatletter
+\newcommand{\fs@myruled}{%
+ \fs@ruled
+ \def\@fs@capt##1##2{\floatc@ruled{##1\space\capitaldash*\space}{\fussy ##2}}%
+ \def\@fs@pre{\hrule height.8pt depth0pt \kern4pt}%
+ \def\@fs@mid{\kern3pt\hrule\kern3pt}%
+ \def\@fs@post{\kern4pt\hrule\relax}%
+}
+\makeatother
+
+\floatstyle{myruled}
+\newfloat{exemplary}{htbp}{loe}[section]
+\floatname{exemplary}{Example}
+\Crefname{exemplary}{Example}{Examples}
+\crefname{exemplary}{Ex.}{Ex.}
+
+
+\newcommand*{\acronym}[1]{\mbox{\letterspacecapitals{\MakeUppercase{#1}}}}
+\newcommand*{\bibauthor}[1]{\textsc{#1}}
+\newcommand*{\bibtitle}[1]{\textit{#1}}
+\newcommand*{\bottomstrut}{\rule[-.5em]{0pt}{0pt}}
+\newcommand*{\code}[1]{{\ttfamily\hyphenchar\font=`\-\relax #1}}
+\newcommand*{\doublequotes}[1]{\doubleguillemetright#1\doubleguillemetleft}
+\newcommand*{\eTeX}{\mbox{\(\epsilon\)-\TeX}}
+\newcommand*{\letterspacecapitals}[1]{\textls[30]{#1}}
+\newcommand*{\metavar}[1]{\textit{#1}}
+\newcommand*{\packagename}[1]{\mbox{\textsf{#1}}}
+\newcommand*{\propername}[1]{\mbox{\textsc{\textls[25]{#1}}}}
+\newcommand*{\sample}[1]{\mbox{`\texttt{#1}'}}
+\newcommand*{\singlequotes}[1]{\singleguillemetright#1\singleguillemetleft}
+\newcommand*{\topstrut}{\rule{0pt}{1.25em}}
+\newcommand*{\visualpar}{\,\P\quad}
+
+\newlength{\emreference}
+\AtBeginDocument{\setlength{\emreference}{\fontdimen6\font}}
+\newrobustcmd*{\milliem}[1]
+ {\ifdim #1=0pt
+ #1%
+ \else
+ \generictextfraction{\the\numexpr\dimexpr (#1) * 1000 / \emreference}{1000}\:em%
+ \fi}
+
+\newcommand*{\generictextfraction}[2]
+ {\raisebox{.4em}[0pt]{\scriptsize #1}%
+ \kern-.05em\textfractionsolidus\kern-.05em
+ \raisebox{-.15em}[0pt][0pt]{\scriptsize #2}}
+
+\newcommand*{\leftmarker}{\rule{.2em}{.1pt}\rule{.1pt}{.667em}}
+\newcommand*{\rightmarker}{\rule{.1pt}{.667em}\rule{.2em}{.1pt}}
+\newcommand*{\indicatewidth}[1]{\mbox{\leftmarker #1\rightmarker}}
+
+\newcommand*{\maxipagerule}{\medskip\hrule\medskip}
+\newenvironment*{maxipage*}
+ {\par
+ \noindent
+ \fullwidthsetup{leftmargin=-\marginparsep - \marginparwidth,
+ width=\textwidth + 2\marginparsep + 2\marginparwidth}
+ \begin{fullwidth}%
+ \vspace*{1pt}% Why is some vspace necessary?
+ \parskip=.5\baselineskip}
+ {\par
+ \end{fullwidth}%
+ \par}
+\newenvironment*{maxipage}
+ {\par
+ \noindent
+ \fullwidthsetup{leftmargin=-\marginparsep - \marginparwidth,
+ width=\textwidth + 2\marginparsep + 2\marginparwidth}
+ \begin{fullwidth}%
+ \maxipagerule
+ \parskip=.5\baselineskip}
+ {\par
+ \vskip\parskip
+ \maxipagerule
+ \end{fullwidth}%
+ \par}
+
+
+\newlength{\examplewidth}
+\setlength{\examplewidth}{160pt}
+
+\newcommand*{\texbooktolerancesample}
+ {If you want to avoid overfull boxes at all costs without trying to fix them manually,
+ you might be tempt\-ed to set \texttt{tol\-er\-ance=\allowbreak10000}; this allows
+ arbitrarily bad lines to be acceptable in tough situations. But infinite tolerance
+ is a bad idea, because \TeX{} doesn't distinguish between terribly bad and
+ preposterously horrible lines. Indeed, a tolerance of 10000 encourages \TeX{} to
+ concentrate all the badness in one place, making one truly unsightly line instead of
+ two moderately bad ones, because a single ``write-off'' produces fewest total
+ demerits according to the rules.}
+ %There is a much better way to get the desired effect:~[\dots]
+\newcommand*{\texbooktolerancesamplecredits}
+ {\medskip\noindent
+ \textsl{The sample text was taken from The~\TeX{}book~\cite[p.~107]{knuth:1986}.}}
+
+\newcommand*{\texbookparfillskipsample}
+ {We still haven't discussed the special trick that allows the final line of a paragraph
+ to be shorter than the others. Just before \TeX{} begins to choose breakpoints,
+ it does two important things: [\dots]}
+\newcommand*{\texbooklongparfillskipsample}
+ {We still haven't discussed the special trick that allows the final line of a paragraph
+ to be shorter than the others. Just before \TeX{} begins to choose breakpoints,
+ it does two important things: (1)~If the final item of the current horizontal list is glue,
+ that glue is discarded. (The reason is that a blank space often gets into a token list just
+ before \code{\char92par} or just before \code{\char36\char36}, and this blank space should not be
+ part of the paragraph.) (2)~Three or more items are put at the end of the
+ current horizontal list~[\dots]}
+\newcommand*{\texbookparfillskipsamplecredits}
+ {\medskip\noindent
+ \textsl{The sample text was taken from The~\TeX{}book~\cite[p.~99n]{knuth:1986}.}}
+
+\newcommand*{\texbookparshapeskipsample}
+ {It's possible to control the length of lines in a much more general way, if simple
+ changes to \code{\string\leftskip} and \code{\string\rightskip} aren't flexible enough for your
+ purposes. For example, a semicircular hole has been cut out of the present paragraph,
+ in order to make room for a circular illustration that contains some of
+ Galileo's immortal words about circles; all of the line breaks in this
+ paragraph and in the circular quotation were found by \TeX's line-breaking algorithm.
+ You can specify a essentially arbitrary paragraph shape, by saying
+ \code{parshape}=\metavar{number}, where the \metavar{number} is a positive integer~\(n\),
+ followed by \(2n\)~\metavar{dimen} specifications.}
+\newcommand*{\texbookparshapeskipsamplecredits}
+ {\medskip\noindent
+ \textsl{The sample text was taken from The~\TeX{}book~\cite[p.~101]{knuth:1986}.}}
+
+\newcommand*{\texbookbaselineskipsample}
+ {When you are typsetting a document that spans several pages, it's generally best to
+ define \code{\string\baselineskip} so that it cannot stretch or shrink, because
+ this will give more uniformity to the pages. A small variation in the distance
+ between the baselines---say only half a point---can make a substantial difference
+ in the appearance of the type, since it significantly affects the proportion of
+ white to black. On the other hand, if you are preparing a one-page document, you
+ might want to give the baselineskip some stretchability, so that \TeX{} will help
+ you fit the copy on the page.}
+\newcommand*{\texbookbaselineskipsamplecredits}
+ {\medskip\noindent
+ \textsl{The sample text was taken from The~\TeX{}book~\cite[p.~78]{knuth:1986}.}}
+
+
+
+\newcommand*{\examplepreset}{\microtypesetup{activate=false}}
+\newcommand*{\examplesetup}{\frenchspacing\xsf\small\fussy}
+\newcommand*{\exampleparbox}[2][n/a]
+ {\begin{typoginspect}{#1}
+ \examplepreset
+ \parbox[t]{\examplewidth}{\examplesetup #2}%
+ \end{typoginspect}}
+\newcommand*{\examplesep}{\hspace*{20pt}}
+\def\fontnameandweightinfo#1{%
+ {\def\projectoutfontname##1-##2-##3\relax{##1~\lowercase{##2}}%
+ \global\expandafter\edef\csname#1\endcsname{\expandafter\projectoutfontname\fontname\font\relax}}}
+\newcommand*{\examplefontinformation}
+ {\smallskip
+ \examplesetup
+ \fontnameandweightinfo{exfontnameinfo}%
+ \fontsizeinfo{exfontsizeinfo}%
+ The font used in this example is \exfontnameinfo, \exfontsizeinfo*.}
+
+
+\setcounter{tocdepth}{1}
+\setlength{\overfullrule}{3pt}
+\hbadness=-1
+
+
+\input{ushyphex}
+
+\hyphenation{
+ Double-guillemet-left
+ Double-guillemet-right
+ Double-quotes
+ Single-guillemet-left
+ Single-guillemet-right
+ Single-quotes
+ adj-demerits
+ allow-display-breaks
+ babel-hyphenation
+ base-line-skip
+ break-penalty
+ breakable-display
+ capital-hyphen
+ capital-times
+ cite-dash
+ club-penalties
+ cref-range-conjunction
+ display-break
+ display-widow-penalties
+ double-guillemet-right
+ double-hyphen-demerits
+ double-quotes
+ final-hyphen-demerits
+ inter-display-line-penalty
+ inter-text
+ kerned-hyphen
+ last-line-ragged-left
+ last-line-ragged-left-par
+ line-width
+ loose-ness
+ loose-spacing
+ make-at-letter
+ make-at-other
+ mar-gin-al
+ math-italics-correction
+ micro-type
+ number-dash
+ par-box
+ par-indent
+ parfillskip
+ pdf-string-def-Disable-Commands
+ post-display-penalty
+ pre-display-penalty
+ raise-capital-guillemets
+ raise-capital-times
+ raise-number-dash
+ set-font-expand
+ set-font-shrink
+ set-font-stretch
+ short-inter-text
+ single-guillemet-left
+ single-guillemet-right
+ single-quotes
+ slash-kern
+ slightly-sloppy-par
+ sloppy-par
+ smooth-ragged-right-fuzz-factor
+ smooth-ragged-right-par
+ smooth-ragged-right-shape-quintuplet
+ smooth-ragged-right-shape-septuplet
+ smooth-ragged-right-shape-triplet
+ space-skip
+ text-italics-correction
+ tight-spacing
+ tracing-boxes
+ tracing-para-graphs
+ vtie-bot
+ vtie-bot-disp
+ vtie-bot-disp-par
+ vtie-bot-disp-top-par
+ vtie-bot-par
+ vtie-top
+ vtie-top-par
+ widow-penalties
+}
+
+
+\SetExpansion[context=sloppy, stretch=30, shrink=60, step=5]{encoding={OT1, T1, TS1}}{}% p15
+\SetTracking{encoding=*, shape=sc}{20}
+
+
+\begin{document}
+\fussy
+\lastlinefit=1000
+\nonfrenchspacing
+
+\begin{center}
+ \Huge\bf\sf
+ TypoG Examples
+\end{center}
+
+\bigskip
+
+\noindent
+The section numbers correspond to the subsections of section~3
+in the official documentation of package~\packagename{typog}.
+
+\bigskip
+
+\tableofcontents
+
+
+\clearpage
+\listof{exemplary}{Examples}
+
+
+\clearpage
+\noindent
+Unless otherwise noted the font used in the examples is \singlequotes{\examplefontname}.
+
+\bigskip
+
+\section{Information}
+
+\code{\string\fontsizeinfo} --\fontsizeinfo{docsizeinfo}
+At this point of the document, the font~size
+and the line~spacing are \docsizeinfo*~(w/o~units).
+For footnotes however, the current sizes are%
+\footnote{This is the footnote where we get the sizes from.\fontsizeinfo{footsizeinfo}}
+\footsizeinfo.
+
+Next we show a comparison of different font sizes and line spacings
+decorated with the results of \code{\string\fontsizeinfo}.
+
+\medskip
+
+\begin{maxipage}
+ \setstretch{1}
+ \newcommand*{\baselineskipdoc}%
+ {Macro \code{\string\baselineskip} is a length command which
+ specifies the minimum space between the bottom of two
+ successive lines in a paragraph. Its value may be
+ automatically reset by \LaTeX, for example, by font
+ changes in the text.}
+ \renewcommand*{\examplefontname}{Merriweather}
+ Different font sizes and line spacings exemplified with the \examplefontname~font.
+
+ \smallskip
+
+ \begingroup
+ \fontfamily{Merriwthr-TLF}\selectfont
+ \noindent
+ \parbox[t]{.31\linewidth}%
+ {\fontsize{8.5}{12}\selectfont
+ \baselineskipdoc
+ \fontsizeinfo{examplesizeinfotight}}
+ \hfill
+ \parbox[t]{.31\linewidth}%
+ {\fontsize{10}{12}\selectfont
+ \baselineskipdoc
+ \fontsizeinfo{examplesizeinfo}}
+ \hfill
+ \parbox[t]{.31\linewidth}%
+ {\fontsize{10}{13.5}\selectfont
+ \baselineskipdoc
+ \fontsizeinfo{examplesizeinfoloose}}
+ \endgroup
+
+ \medskip
+
+ \noindent
+ \parbox[t]{.31\linewidth}{\examplefontname~\examplesizeinfotight*}
+ \hfill
+ \parbox[t]{.31\linewidth}{\examplefontname~\examplesizeinfo*}
+ \hfill
+ \parbox[t]{.31\linewidth}{\examplefontname~\examplesizeinfoloose*}
+\end{maxipage}
+
+\noindent Starred form eats spaces? \examplesizeinfo* .
+
+
+\section{Hyphenation}
+
+\noindent Line-break behavior
+
+\begin{quote}
+ \setlength{\overfullrule}{0pt}
+ \parbox[t]{0pt}{%
+ \code{\string\mbox+\string\breakpoint*} \\
+ \mbox{(pre-)}\breakpoint*Hilbert space}
+ \hspace{100pt}
+ \parbox[t]{0pt}{%
+ \code{\string\breakpoint*} \\
+ (pre-)\breakpoint*Hilbert space}
+ \hspace{100pt}
+ \parbox[t]{0pt}{%
+ \code{\string\breakpoint} \\
+ (pre-)\breakpoint Hilbert space}
+\end{quote}
+
+\noindent Starred form eats spaces? a\breakpoint* b. Unstarred: a\breakpoint b.
+
+\medskip
+
+\begin{quote}
+ \setlength{\overfullrule}{0pt}
+ \parbox[t]{0pt}{%
+ \begin{hyphenmin}{6}
+ Set minimum hyphenation values for both \code{\string\lefthyphenmin} and
+ \code{\string\righthyphenmin}: \the\lefthyphenmin{} and \the\righthyphenmin.
+ \end{hyphenmin}}
+ \hspace{100pt}
+ \parbox[t]{0pt}{%
+ \begin{hyphenmin}[4]{5}
+ Set minimum hyphenation values for \code{\string\lefthyphenmin} and
+ \code{\string\righthyphenmin} separately: \the\lefthyphenmin{} and \the\righthyphenmin.
+ \end{hyphenmin}}
+ \hspace{100pt}
+ \parbox[t]{0pt}{%
+ Returned to the default values for \code{\string\lefthyphenmin} and
+ \code{\string\righthyphenmin}: \the\lefthyphenmin{} and \the\righthyphenmin.}
+\end{quote}
+
+
+\section{Disable\kernedslash*Break Ligatures}
+
+\begin{center}
+ \begin{tabular}{@{}ll@{}}
+ \hline
+ \multicolumn{1}{@{}l|}{Macro} & Result \\
+ \hline
+ n/a &
+ fine affirmation of baffling flavors \\
+ \code{\string\nolig*} &
+ f\nolig*ine af\nolig*f\nolig*irmation of baf\nolig*f\nolig*ling f\nolig*lavors \\
+ \code{\string\nolig} &
+ f\nolig{}ine af\nolig{}f\nolig{}irmation of baf\nolig{}f\nolig{}ling f\nolig{}lavors \\
+ \code{\string\nolig*[75]} & of\nolig*[75]f\nolig*[75]ice
+ \end{tabular}
+\end{center}
+
+\noindent Line-break behavior
+
+\begin{quote}
+ \setlength{\overfullrule}{0pt}
+ \parbox[t]{0pt}{%
+ \code{\string\nolig*} \\
+ bi\nolig*{}jection}
+ \hspace{60pt}
+ \parbox[t]{0pt}{%
+ \code{\string\nolig} \\
+ bi\nolig{}jection}
+\end{quote}
+
+\noindent Starred form eats spaces? f\nolig* i, f\nolig*[0] i.
+
+
+\section{Manual Italic Correction}
+
+\paragraph{Text Mode.}
+
+The italic correction of the current font is \the\fontdimen1\font/pt.
+
+We demonstrate the effect of \code{\string\itcorr} with a pair of bookends:
+uncorrected italics: \indicatewidth{\it X},
+\TeX-corrected (\code{\string\/}): \indicatewidth{\it X\/},
+and \code{\string\itcorr\{7\}}: \indicatewidth{\it X\itcorr{7}}.
+
+Correction~0: \indicatewidth{\itcorr*{0}};
+corr.~3: \indicatewidth{\itcorr{3}}, \indicatewidth{\itcorr*{3}} (starred);
+corr.~\textminus6: \indicatewidth{\itcorr{-6}}.
+
+\paragraph{Mathematical Mode.}
+
+Uncorrected: \([f]\),
+corrected: \([\itcorr{1} f\itcorr{1}]\)
+
+Correction~0: \indicatewidth{\(\itcorr{0}\)};
+corr.~3: \indicatewidth{\(\itcorr{3}\)};
+corr.~\textminus6: \indicatewidth{\(\itcorr{-6}\)}.
+
+
+\section{Apply Extra Kerning}
+
+
+\subsection{Slash}
+
+The slash with some extra space around it can be helpful for certain pairs,
+as for example years or names.
+
+\begin{center}
+ \begin{tabular}{@{}ll@{}}
+ \hline
+ \multicolumn{1}{@{}l|}{Macro} & Result \\
+ \hline
+ n/a & 1991/1992,
+ New~York/NY, Korringa/Kohn/Rostoker \\
+ \code{\string\kernedslash} &
+ 1991\kernedslash1992, New~York\kernedslash{}NY, Korringa\kernedslash{}Kohn\kernedslash{}Rostoker \\
+ \end{tabular}
+\end{center}
+
+\noindent Line-break behavior
+
+\begin{quote}
+ \setlength{\overfullrule}{0pt}
+ \parbox[t]{0pt}{%
+ \code{\string\kernedslash*} \\
+ 1991\kernedslash*1992,
+ New~York\kernedslash*NY,
+ Korringa\kernedslash*Kohn\kernedslash*Rostoker}
+ \hspace{120pt}
+ \parbox[t]{0pt}{%
+ \code{\string\kernedslash} \\
+ 1991\kernedslash{}1992,
+ New~York\kernedslash{}NY,
+ Korringa\kernedslash{}Kohn\kernedslash{}Rostoker}
+\end{quote}
+
+\begin{quote}
+ \setlength{\overfullrule}{0pt}
+ \parbox[t]{0pt}{%
+ \code{\string\kernedslash*}\code{\string\nobreak} \\
+ 1991\kernedslash*\nobreak{}1992,
+ New~York\kernedslash*\nobreak{}NY,
+ Korringa\kernedslash*Kohn\kernedslash*\nobreak{}Rostoker}
+ \hspace{140pt}
+ \parbox[t]{0pt}{%
+ \code{\string\allowhyphenation\string\kernedslash} \\
+ 1991\kernedslash{}1992,
+ New~York\kernedslash{}NY,
+ Korringa\allowhyphenation\kernedslash{}Kohn\kernedslash{}Rostoker}
+\end{quote}
+
+\noindent Starred form eats spaces? p\kernedslash* q.
+
+
+\subsection{Hyphen}
+
+Uncorrected
+
+\begin{quote}
+ \(K\)-vector space, \(g\)-factor, \(f\)-function
+\end{quote}
+
+\noindent Corrected
+
+\begin{quote}
+ \typogsetup{raisecapitalhyphen=.075em, raiseguillemets=.05em}
+ \(K\)\leftkernedhyphen{-75}vector space,
+ \(g\)\leftkernedhyphen{-25}factor,
+ \(f\)\leftkernedhyphen{-100}function
+ %% \(G\)\kernedhyphen[*]{50}{-50}Wirkung,
+ %% \(G\)\leftkernedhyphen{50}äquivalent,
+ %% \(K\)\kernedhyphen[*]{-50}{-50}Vektorraum,
+ %% \(K\)\kernedhyphen{-50}{-25}bilinear,
+ %% \propername{Young}\rightkernedhyphen{-50}Tableaux,
+ %% \singlequotes{Bra}\kernedhyphen[50]{50}{-50}Vektor,
+ %% \singlequotes{Ket}\kernedhyphen[50]{50}{-50}Vektor,
+ %% halbzahlige~\(l\)\kernedhyphen{50}{-50}Werte.
+\end{quote}
+
+\noindent Line-break behavior
+
+\begin{quote}
+ \setlength{\overfullrule}{0pt}
+
+ \parbox[t]{0pt}{hyphen~\mbox{`\code{-}'} \\ self-energy}
+ \hspace{80pt}
+ \parbox[t]{0pt}{\code{\string\hyp} \\ self\hyp{}energy}
+ \hspace{60pt}
+ \parbox[t]{0pt}{\code{\string\kernedhyphen*} \\ self\kernedhyphen*{5}{-5}energy}
+ \hspace{80pt}
+ \parbox[t]{0pt}{\code{\string\kernedhyphen} \\ self\kernedhyphen{5}{-5}energy}
+\end{quote}
+
+\noindent If a \code{\string\kernedhyphen} goes astray in a math environment,
+it decays to an ordinary minus with appropriate kerning:
+\(G \kernedhyphen{-30}{-50} V\)\!.
+
+
+\section{Raise Selected Characters}
+
+\subsection{Capital Hyphen}
+
+\newlength{\exemplaryraisecapitalhyphen}
+\setlength{\exemplaryraisecapitalhyphen}{.6667pt}
+With the standard hyphen we get
+
+\begin{quote}
+ \begin{otherlanguage}{german}
+ \acronym{NMR}-Spektroskopie,
+ \acronym{SI}-Einheit,
+ \(G\)-Modul, and
+ \(K\)-Vektorraum,
+ \end{otherlanguage}
+\end{quote}
+
+\noindent whereas with raising the hyphen by \the\exemplaryraisecapitalhyphen{}
+when calling \code{\string\capitalhyphen}, we arrive at
+
+\begin{quote}
+ \begin{otherlanguage}{german}
+ \typogsetup{raisecapitalhyphen=.075em}
+
+ \acronym{NMR}\capitalhyphen{}Spektroskopie,
+ \acronym{SI}\capitalhyphen{}Einheit,
+ \(G\)\capitalhyphen{}Modul, and
+ \(K\)\capitalhyphen{}Vektorraum
+ (even better with \code{\string\kernedhyphen}
+ and the star-option for the correct raise-amount:
+ \(K\)\leftkernedhyphen[*]{-100}Vektorraum).
+ \end{otherlanguage}
+\end{quote}
+
+\noindent Line-break behavior
+
+\begin{quote}
+ \setlength{\overfullrule}{0pt}
+ \begin{otherlanguage}{german}
+ \parbox[t]{0pt}{%
+ \code{\string\capitalhyphen*} \\
+ \acronym{NMR}\capitalhyphen*{}Spektroskopie
+ }
+ \hspace{120pt}
+ \parbox[t]{0pt}{%
+ \code{\string\capitalhyphen} \\
+ \acronym{NMR}\capitalhyphen{}Spektroskopie
+ }
+ \end{otherlanguage}
+\end{quote}
+
+\noindent Starred form eats spaces?
+{\typogsetup{raisecapitalhyphen=.075em}
+ V\capitalhyphen* W.}
+
+
+\subsection{Capital Dash}
+
+\newlength{\exemplaryraisecapitaldash}
+\setlength{\exemplaryraisecapitaldash}{.075em}
+
+Compare the result of plain~\code{\string\textendash}
+
+\begin{quote}
+ A\textendash M, N\textendash Z, C1\,\textendash\,C4, LEED\:\textendash\:STM
+\end{quote}
+
+\noindent with \code{\string\capitaldash}:
+
+\begin{quote}
+ \typogsetup{raisecapitaldash=\exemplaryraisecapitaldash}
+
+ A\capitaldash{}M, N\capitaldash{}Z, C1\,\capitaldash\,C4, LEED\:\capitaldash\:STM
+\end{quote}
+
+\noindent where the en-dash has been raised by \milliem{\exemplaryraisecapitaldash}.
+
+Starred form eats spaces? V\capitaldash* W.
+
+
+\subsection{Number Dash}
+
+\newlength{\exemplaryraisefiguredash}
+\setlength{\exemplaryraisefiguredash}{.6667pt}
+Compare the result of plain~\code{\string\textendash}
+
+\begin{quote}
+ 3--5, 81--82, 485--491
+\end{quote}
+
+\noindent with \code{\string\figuredash}:
+
+\begin{quote}
+ \typogsetup{raisefiguredash=\exemplaryraisefiguredash}
+ 3\figuredash 5, 81\figuredash 82, 485\figuredash 491
+\end{quote}
+
+\noindent where the en-dash has been raised by \the\exemplaryraisefiguredash.
+
+\noindent Line-break behavior
+
+\begin{quote}
+ \setlength{\overfullrule}{0pt}
+ \typogsetup{raisefiguredash=\exemplaryraisefiguredash}
+ \parbox[t]{0pt}{%
+ \code{\string\figuredash*} \\
+ 3\figuredash*5, 81\figuredash*82, 485\figuredash*491
+ }
+ \hspace{80pt}
+ \parbox[t]{0pt}{%
+ \code{\string\figuredash} \\
+ 3\figuredash 5, 81\figuredash 82, 485\figuredash 491
+ }
+\end{quote}
+
+\noindent Starred form eats spaces? 44\figuredash* 55.
+
+
+\subsection{Multiplication Sign \capitaldash{} Times~``\texttimes''}
+
+\newlength{\exemplaryraisetimes}
+\setlength{\exemplaryraisetimes}{.6667pt}
+The problem with a too-low multiplication sign arises
+for example with matrices of a given, specific size.
+
+\noindent Uncorrected
+
+\begin{quote}
+ \acronym{LR}-mode: 2\texttimes2-matrix, \(N\)\texttimes\(M\)-matrix \\
+ Math-mode: \(2\times2\)-matrix, \(N\times M\)-matrix
+\end{quote}
+
+\noindent and corrected
+
+\begin{quote}
+ \typogsetup{raisecapitalhyphen=\exemplaryraisecapitalhyphen,
+ raisecapitaltimes=\exemplaryraisetimes}
+ \acronym{LR}-mode: 2\capitaltimes2-matrix, \(N\)\capitaltimes\(M\)-matrix \\
+ Math-mode: \(2\capitaltimes2\)-matrix, \(N\capitaltimes M\)-matrix.
+\end{quote}
+
+
+\subsection{Guillemets}
+
+\newcommand*{\tschicholdi}
+ {Use single quotes for a first quotation.}
+\newcommand*{\tschicholdii}
+ {Use double quotes for quotations within quotations.}
+
+\newcommand*{\frenchsinglequotes}[1]{\singleguillemetright #1\singleguillemetleft}
+\newcommand*{\Frenchsinglequotes}[1]{\Singleguillemetright #1\Singleguillemetleft}
+\newcommand*{\frenchdoublequotes}[1]{\doubleguillemetright #1\doubleguillemetleft}
+\newcommand*{\Frenchdoublequotes}[1]{\Doubleguillemetright #1\Doubleguillemetleft}
+
+\newcommand*{\frenchsinglequotesFR}[1]{\singleguillemetleft\,\allowhyphenation#1\,\singleguillemetright}
+\newcommand*{\FrenchsinglequotesFR}[1]{\Singleguillemetleft\,\allowhyphenation#1\,\Singleguillemetright}
+\newcommand*{\frenchdoublequotesFR}[1]{\doubleguillemetleft\,\allowhyphenation#1\,\doubleguillemetright}
+\newcommand*{\FrenchdoublequotesFR}[1]{\Doubleguillemetleft\,\allowhyphenation#1\,\Doubleguillemetright}
+
+\newlength{\exemplaryraiseguillemets}
+\setlength{\exemplaryraiseguillemets}{.05em}
+\newlength{\exemplaryraisecapitalguillemets}
+\setlength{\exemplaryraisecapitalguillemets}{.1em}
+
+We again compare the default implementation with the adjusted one.
+
+\begin{quote}
+ \frenchsinglequotes{\tschicholdi} \\
+ \frenchdoublequotes{\tschicholdii} \\
+ \Frenchsinglequotes{1}, \Frenchsinglequotes{2}, \Frenchsinglequotes{3}. \\
+ \Frenchdoublequotes{\letterspacecapitals{ABC}},
+ \Frenchdoublequotes{\letterspacecapitals{MN}},
+ \Frenchdoublequotes{\letterspacecapitals{XYZ}}.
+\end{quote}
+
+\noindent Corrected by raising the glyphs by
+\milliem{\exemplaryraiseguillemets} and
+\milliem{\exemplaryraisecapitalguillemets}, respectively:
+
+\begin{quote}
+ \typogsetup{raiseguillemets=\exemplaryraiseguillemets,
+ raisecapitalguillemets=\exemplaryraisecapitalguillemets}
+ \frenchsinglequotes{\tschicholdi} \\
+ \frenchdoublequotes{\tschicholdii} \\
+ \Frenchsinglequotes{1}, \Frenchsinglequotes{2}, \Frenchsinglequotes{3}. \\
+ \Frenchdoublequotes{\letterspacecapitals{ABC}},
+ \Frenchdoublequotes{\letterspacecapitals{MN}},
+ \Frenchdoublequotes{\letterspacecapitals{XYZ}}.
+\end{quote}
+
+\noindent And the same using French typographic conventions:
+
+\begin{quote}
+ \typogsetup{raiseguillemets=\exemplaryraiseguillemets,
+ raisecapitalguillemets=\exemplaryraisecapitalguillemets}
+ \frenchsinglequotesFR{\tschicholdi} \\
+ \frenchdoublequotesFR{\tschicholdii} \\
+ \FrenchsinglequotesFR{1}, \FrenchsinglequotesFR{2}, \FrenchsinglequotesFR{3}. \\
+ \FrenchdoublequotesFR{\letterspacecapitals{ABC}},
+ \FrenchdoublequotesFR{\letterspacecapitals{MN}},
+ \FrenchdoublequotesFR{\letterspacecapitals{XYZ}}.
+\end{quote}
+
+\noindent Line-break behavior
+
+\begin{quote}
+ \setlength{\overfullrule}{0pt}
+ \typogsetup{raiseguillemets=\exemplaryraiseguillemets,
+ raisecapitalguillemets=\exemplaryraisecapitalguillemets}
+
+ \newcommand*{\samplestring}{relation}
+
+ \parbox[t]{0pt}{\frenchsinglequotes{\samplestring}}
+ \hspace{30pt}
+ \parbox[t]{0pt}{\Frenchsinglequotes{\samplestring}}
+ \hspace{30pt}
+ \parbox[t]{0pt}{\frenchdoublequotes{\samplestring}}
+ \hspace{30pt}
+ \parbox[t]{0pt}{\Frenchdoublequotes{\samplestring}}
+
+ \smallskip
+
+ \parbox[t]{0pt}{\frenchsinglequotesFR{\samplestring}}
+ \hspace{30pt}
+ \parbox[t]{0pt}{\FrenchsinglequotesFR{\samplestring}}
+ \hspace{30pt}
+ \parbox[t]{0pt}{\frenchdoublequotesFR{\samplestring}}
+ \hspace{30pt}
+ \parbox[t]{0pt}{\FrenchdoublequotesFR{\samplestring}}
+\end{quote}
+
+
+\clearpage
+\section{Align Last Line}
+
+\subsection{Last Line Ragged Left/Flush Right}
+
+\Cref{ex:lastlineraggedleftpar} is a typical use of environment~\code{lastlineraggedleftpar}:
+A narrow paragraph gets typeset with full justification
+and put \code{\string\flushright} against the right margin as a whole.
+
+The layout may look more coherent if the last lines is moved to the right margin, too.
+
+\begin{exemplary}
+ \flushright
+ \caption[Justified -- flushright]
+ {\begin{typoginspectpar}{justified-flushright}Typeset a justified paragraph flushright and let
+ macro~\code{\string\lastlineraggedleft} shift the last line
+ over to the right-hand side.\label{ex:lastlineraggedleftpar}\end{typoginspectpar}}
+
+ \setlength{\examplewidth}{220pt}
+ \exampleparbox[lastlineraggedleftpar]{\lastlineraggedleftpar\texbookparfillskipsample}
+
+ \centering
+ \texbookparfillskipsamplecredits
+
+ \examplefontinformation
+\end{exemplary}
+
+
+\subsection{Last Line Centered}
+
+The situation shown in \cref{ex:lastlinecenteredpar} is
+more widespread than \cref{ex:lastlineraggedleftpar}
+because centered tables and figures are quite common.
+Their caption parboxes are centered too,
+which is where a centered last line might fortify the layout.
+
+Another possible use of environment~\code{lastlinecenteredpar} are the final lines of chapters~--
+in particular if the chapters' ends are marked with centered dingbats.
+
+\begin{exemplary}
+ \centering
+ \caption[Typeset a justified paragraph that is centered.]
+ {\lastlinecenteredpar
+ Typeset a justified paragraph that is centered.
+ This very caption uses \code{lastlinecenteredpar}
+ to have its last line centered as well.
+ Moreover, we put a nifty asterisk centered at the bottom of the sample text.
+ \label{ex:lastlinecenteredpar}}
+
+ \setlength{\examplewidth}{220pt}
+ \exampleparbox[lastlinecenteredpar]{\lastlinecenteredpar\texbookparfillskipsample}
+
+ \medskip\(\ast\)
+
+ \texbookparfillskipsamplecredits
+
+ \examplefontinformation
+\end{exemplary}
+
+
+\clearpage
+\section{Fill Last Line}
+
+\newcommand*{\abcsample}{abcd efgh ijkl mnop qrst uvwx yz12 3456}
+
+\begin{exemplary}
+ \def\sness{2}
+ \def\exparindent{25pt}
+ \setlength{\examplewidth}{235pt}
+
+ \centering
+ \caption[Plain paragraph vs.~\code{covernextindentpar}]
+ {Top example: Typeset a paragraph without correction of the last line.
+ Middle example: Paragraph corrected with \code{covernextindentpar}.
+ We set a \code{\string\parindent} of~\exparindent{} in both parboxes
+ and we \emph{must} increase the amount of glue in the paragraph
+ to reduce the penalty of stretching the last line under a \code{\string\fussy}~setting.
+ For the samples below, we have chosen \code{\string\slightlysloppy[\sness]}.
+ The \singlequotes{Alternative}, the bottom example,
+ shows the effect of \code{tightspacing};
+ no extra sloppyness is required there.}
+
+ \exampleparbox[covernextindentpar-reference]{%
+ \setlength{\parindent}{\exparindent}%
+ \slightlysloppy[\sness]
+ \texbookparfillskipsample{} \abcsample}
+
+ \medskip
+
+ \exampleparbox[covernextindentpar]{%
+ \setlength{\parindent}{\exparindent}%
+ \slightlysloppy[\sness]
+ \covernextindentpar
+ \texbookparfillskipsample{} \abcsample}
+
+ \medskip
+
+ Alternative\dots\hfill\smallskip
+
+ \exampleparbox[covernextindentpar-tightspacing]{%
+ \setlength{\parindent}{\exparindent}%
+ \begin{tightspacing}
+ \texbookparfillskipsample{} \abcsample
+ \end{tightspacing}}
+
+ \texbookparfillskipsamplecredits
+
+ \examplefontinformation
+\end{exemplary}
+
+\begin{exemplary}
+ \def\sness{2}
+ \def\exparindent{0pt}
+ \setlength{\examplewidth}{155pt}
+
+ \centering
+ \caption[Plain paragraph vs.~\code{covernextindentpar} (narrow)]
+ {Same comparison as the previous example,
+ but for a small linewidth and zippo~\code{\string\parindent}.
+ The left-hand side sample is uncorrected,
+ the right-hand side features \code{\string\covernextindentpar}.
+ The sloppyness level is~\sness{} for both samples.}
+
+ \exampleparbox[narrow-covernextindentpar-reference]{%
+ \setlength{\parindent}{\exparindent}%
+ \slightlysloppy[\sness]
+ \texbookparfillskipsample{} \abcsample}
+ \qquad
+ \exampleparbox[narrow-covernextindentpar]{%
+ \setlength{\parindent}{\exparindent}%
+ \slightlysloppy[\sness]
+ \covernextindentpar[30pt]
+ \texbookparfillskipsample{} \abcsample}
+
+ \texbookparfillskipsamplecredits
+
+ \examplefontinformation
+\end{exemplary}
+
+\begin{exemplary}
+ \def\exparindent{10pt}
+ \setlength{\examplewidth}{233pt}
+
+ \centering
+ \caption[Prevent full last line]
+ {Sample~1: Typeset a paragraph without correction of the last line.
+ Sample~2: Paragraph corrected with \code{\string\openlastlinepar}.~-- Disappointing!
+ Sample~3: Same using macro~\code{\string\prolongpar}.
+ Sample~4: Alternative solution that simply increases the tracking by
+ \generictextfraction{2}{1000}\,em with~\code{setfonttracking}.
+ Sample~5: Alternative solution that increases the spacing with
+ \code{loosespacing}.}
+
+ \exampleparbox[openline-reference]{%
+ \setlength{\parindent}{\exparindent}
+ \texbookparfillskipsample{} \abcsample}
+
+ \medskip
+
+ \exampleparbox[openlastlinepar]{%
+ \setlength{\parindent}{\exparindent}
+ \openlastlinepar
+ \texbookparfillskipsample{} \abcsample}
+
+ \medskip
+
+ \exampleparbox[prolongpar]{%
+ \setlength{\parindent}{\exparindent}
+ \prolongpar
+ \texbookparfillskipsample{} \abcsample}
+
+ \medskip
+
+ Alternatives\dots\hfill\smallskip
+
+ \exampleparbox[openline-tracking]{%
+ \setlength{\parindent}{\exparindent}%
+ \setfonttracking{2}
+ \texbookparfillskipsample{} \abcsample}
+
+ \medskip
+
+ \exampleparbox[openline-spacing]{%
+ \setlength{\parindent}{\exparindent}%
+ \begin{loosespacing}
+ \texbookparfillskipsample{} \abcsample
+ \end{loosespacing}}
+
+ \texbookparfillskipsamplecredits
+
+ \examplefontinformation
+\end{exemplary}
+
+
+\clearpage
+\section{Spacing}
+
+\subsection{Narrow\kernedslash Wide Space}
+
+The current font's parameters are shown in \cref{tab:fontdim}.\footnote{For a concise and
+understandable explanation of the plethora of font parameters
+consult \propername{David Carlisle's} excellent post on \propername{StackExchange}:
+\href{https://tex.stackexchange.com/questions/88991/what-do-different-fontdimennum-mean}%
+ {What Do Different Fontdimennum Mean}.}
+
+\begin{table}[htp]
+ \centering
+ \caption{Important \code{\string\fontdimen} values of the current text font.
+ The middle column~(\#) states the number of the fontdimen.\bottomstrut}
+ \label{tab:fontdim}
+
+ \begin{tabular}{@{}lll@{}}
+ \hline
+ \multicolumn{1}{@{}l|}{Name} & \multicolumn{1}{l|}{\#} & Value \\
+ \hline
+ Interword space & 2 & \the\fontdimen2\font\topstrut \\
+ Interword stretch & 3 & \the\fontdimen3\font \\
+ Interword shrink & 4 & \the\fontdimen4\font \\
+ Extra space & 7 & \the\fontdimen7\font
+ \end{tabular}
+\end{table}
+
+\begin{center}
+ \setlength{\overfullrule}{0pt}
+ \newcommand*{\spacesampletext}[1]{some#1text#1with#1spaces\rule{0.1pt}{1em}}
+ \newsavebox{\narrowspacesample}
+ \sbox{\narrowspacesample}{\spacesampletext{\narrowspace}}
+ \newsavebox{\widespacesample}
+ \sbox{\widespacesample}{\spacesampletext{\widespace}}
+
+ \begin{tabular}{@{}ll@{\qquad}l@{}}
+ Compare & \spacesampletext{\space} & default space, natural glue \\
+ with & \usebox{\narrowspacesample} & \code{\string\narrowspace}, natural glue \\
+ {} & \makebox[\wd\narrowspacesample][l]{\hbox to 0pt{\spacesampletext{\narrowspace}}} &
+ \code{\string\narrowspace}, tight box \\
+ {} & \makebox[\wd\narrowspacesample][l]{\hbox spread 5pt{\spacesampletext{\narrowspace}}} &
+ \code{\string\narrowspace}, spread 5pt \\
+ and again & \spacesampletext{\space} & default space, natural glue \\
+ with & \usebox{\widespacesample} & \code{\string\widespace}, natural glue \\
+ {} & \makebox[\wd\widespacesample][l]{\hbox to 0pt{\spacesampletext{\widespace}}} &
+ \code{\string\widespace}, tight box \\
+ {} & \makebox[\wd\widespacesample][l]{\hbox spread 5pt{\spacesampletext{\widespace}}} &
+ \code{\string\widespace}, spread 5pt
+ \end{tabular}
+\end{center}
+
+\noindent Starred form eats spaces? Narrow\narrowspace* Space. Wide\widespace* Space.
+
+
+\subsection{Looser\kernedslash*Tighter}
+
+\Cref{ex:spacing-i,ex:spacing-ii} show \code{tightspacing} and \code{loosespacing} at work.
+
+\begin{exemplary}
+ \newcommand*{\sness}{3}
+ \newcommand*{\tlevel}{1}
+ \centering
+
+ \caption[Looser or tighter spacing -- sloppy]
+ {Both parboxes are typeset with \code{\string\slightlysloppy[\sness]},
+ the left one with default spacing,
+ the right one with \code{tightspacing[\tlevel]}.\label{ex:spacing-i}}
+
+ \exampleparbox[tightspacing-reference]{\slightlysloppy[\sness]\texbooktolerancesample}
+ \qquad
+ \exampleparbox[tightspacing]{\slightlysloppy[\sness]\tightspacing[\tlevel]\texbooktolerancesample}
+
+ \texbooktolerancesamplecredits
+
+ \examplefontinformation
+\end{exemplary}
+
+\begin{exemplary}
+ \newcommand*{\sness}{3}
+ \newcommand*{\llevel}{2}
+ \centering
+
+ \caption[Looser or tighter spacing -- sloppy]
+ {Both parboxes are typeset with \code{\string\slightlysloppy[\sness]},
+ the left one with default spacing,
+ the right one with \code{loosespacing[\llevel]}.\label{ex:spacing-ii}}
+
+ \exampleparbox[loosespacing-reference]{\slightlysloppy[\sness]\texbooktolerancesample}
+ \qquad
+ \exampleparbox[loosespacing]{\slightlysloppy[\sness]\loosespacing[\llevel]\texbooktolerancesample}
+
+ \texbooktolerancesamplecredits
+
+ \examplefontinformation
+\end{exemplary}
+
+
+\clearpage
+\section{Microtype Front\capitalhyphen End}
+
+\subsection{Tracking}
+
+\newcommand*{\trackingsampletext}{%
+ This sentence contains an explicit call to \code{\string\textls}
+ with an optional argument of \((+200)\) to \textls[200]{DEMONSTRATE}
+ that this macro still works inside of \code{setfonttracking}.
+ Apart from that it is just some more text to exercise the macro.
+ Well, the explicit letterspacing example is particularly ugly.}
+
+\begin{exemplary}
+ \renewcommand*{\examplepreset}{\microtypesetup{activate=true}}
+ \def\extratracking{7}
+ \centering
+
+ \caption[Microtype: tracking]
+ {Use \packagename{microtype} to change the font tracking.
+ The sample on the left-hand side shows neutral tracking.
+ The one on the right-hand side received an extra tracking of
+ \generictextfraction{\extratracking}{1000}\,em.}
+
+ \exampleparbox[microtype-tracking-reference]{%
+ \fussy
+ \noindent
+ \trackingsampletext}
+ \qquad
+ \exampleparbox[microtype-tracking-stretch]{%
+ \begin{setfonttracking}{\extratracking}
+ \fussy
+ \noindent
+ \trackingsampletext
+ \end{setfonttracking}}
+
+ \examplefontinformation
+\end{exemplary}
+
+\newcommand*{\trackingsamplefontchangetext}{%
+ {\rm RM} {\sf SF} {\rm RM} {\tt TT} {\rm RM};
+ {\rm RM} {\it IT\/} {\rm RM};
+ {\rm RM} {\sc SC} {\rm RM}.
+ {\rm Rm} {\sf Sf} {\rm Rm} {\tt Tt} {\rm Rm};
+ {\rm Rm} {\it It\/} {\rm Rm};
+ {\rm Rm} {\sc Sc} {\rm Rm}.
+ {\rm rm} {\sf sf} {\rm rm} {\tt tt} {\rm rm};
+ {\rm rm} {\it it\/} {\rm rm};
+ {\rm rm} {\sc sc} {\rm rm}.}
+
+\begin{exemplary}
+ \renewcommand*{\examplepreset}{\microtypesetup{activate=true}}
+ \def\extratracking{1}
+ \centering
+
+ \caption[Microtype: tracking -- font changes]
+ {Check how font changes (serif, serif~italics, small-caps, sans~serif, typewriter)
+ interfere with the interword spacing.
+ The left sample has no tracking changes applied and serves as a reference,
+ whereas the right sample got an extra tracking of
+ \generictextfraction{\extratracking}{1000}\,em.\visualpar
+ The switch from and to typewriter, i.\,e., constant-width fonts
+ commonly is a source of spacing problems.}
+
+ \exampleparbox[microtype-tracking-font-changes-reference]{\trackingsamplefontchangetext}
+ \qquad
+ \exampleparbox[microtype-tracking-font-changes-stretch]{%
+ \begin{setfonttracking}{\extratracking}
+ \trackingsamplefontchangetext
+ \end{setfonttracking}}
+\end{exemplary}
+
+\noindent
+No contents: \leftmarker
+\begin{setfonttracking}{0}
+\end{setfonttracking}\rightmarker.
+
+
+\subsection{Font Expansion}
+
+\newcommand*{\expansionsample}
+ {By default, all characters of a font are allowed to be stretched or
+ shrunk by the same amount. However, it is also possible to limit
+ the expansion of certain characters if they are more sensitive to
+ deformation.
+ This is the purpose of the \code{\string\SetExpansion}~command.}
+
+\begin{exemplary}
+ \setlength{\examplewidth}{250pt}
+ \renewcommand*{\examplepreset}{\microtypesetup{activate=true}}
+ \renewcommand*{\examplesetup}{\frenchspacing\small\fussy}
+
+ \centering
+
+ \caption[Microtype: font expansion]
+ {Use \packagename{microtype} to stretch or shrink a font.
+ The top sample uses \code{\string\setfontshrink} at level~3,
+ the middle sample is the unchanged reference
+ (which is allowed to shrink and expand),
+ and the bottom sample utilizes \code{\string\setfontstretch} at level~2.}
+
+ \exampleparbox[microtype-expansion-shrink]{%
+ \begin{setfontshrink}[3]
+ \noindent\expansionsample
+ \end{setfontshrink}}
+
+ \medskip
+
+ \exampleparbox[microtype-expansion-neutral]{%
+ \begin{setfontexpand}[0]
+ \noindent\expansionsample
+ \end{setfontexpand}}
+
+ \medskip
+
+ \exampleparbox[microtype-expansion-stretch]{%
+ \begin{setfontstretch}[2]
+ \noindent\expansionsample
+ \end{setfontstretch}}
+
+ \examplefontinformation
+\end{exemplary}
+
+\noindent
+No contents -- \code{setfontshrink}: \leftmarker
+\begin{setfontshrink}
+\end{setfontshrink}\rightmarker.
+
+\noindent
+No contents -- \code{setfontstretch}: \leftmarker
+\begin{setfontstretch}
+\end{setfontstretch}\rightmarker.
+
+\noindent
+No contents -- \code{setfontexpand}: \leftmarker
+\begin{setfontexpand}
+\end{setfontexpand}\rightmarker.
+
+\noindent
+No contents -- \code{nofontexpansion}: \leftmarker
+\begin{nofontexpansion}
+\end{nofontexpansion}\rightmarker.
+
+
+
+\subsection{Character Protrusion}
+
+\newcommand*{\zerodepthrule}
+ {\raisebox{0pt}[0pt][0pt]{\rule[-4.5\baselineskip]{.1pt}{4.25\baselineskip}}}
+
+\newcommand*{\protrusionsampletext}{%
+ \noindent
+ \zerodepthrule\hfill\zerodepthrule \\
+ 1\hfill 1 \\
+ .2\hfill 2. \\
+ --3\hfill 3-- \\
+ ---4\hfill 4---}
+
+\begin{exemplary}
+ \renewcommand*{\examplepreset}{\microtypesetup{activate=true}}
+ \renewcommand*{\examplesetup}{\frenchspacing\small\fussy}
+
+ \centering
+
+ \caption[Microtype: protrusion]
+ {Comparison of the \packagename{microtype} feature ``protrusion'' (left-hand side)
+ and \code{nocharprotrusion} (right-hand side).}
+
+ \exampleparbox[microtype-protrusion-reference]{%
+ \microtypesetup{protrusion=true}
+ \protrusionsampletext}
+ \qquad
+ \exampleparbox[microtype-protrusion-off]{%
+ \microtypesetup{protrusion=true}
+ \nocharprotrusion
+ \protrusionsampletext}
+
+ \medskip
+\end{exemplary}
+
+\noindent
+No contents -- \code{nocharprotrusion}: \leftmarker
+\begin{nocharprotrusion}
+\end{nocharprotrusion}\rightmarker.
+
+
+\clearpage
+\section{Sloppy Paragraphs}
+
+\Cref{ex:slightlysloppy-1,ex:slightlysloppy-2} put different amounts of ``sloppiness'' face to face.
+
+\begin{exemplary}
+ \setlength{\examplewidth}{180pt}
+ \def\sness{1}
+ \centering
+ \caption[Paragraphs typeset slightly sloppy~1]
+ {Paragraphs typeset slightly sloppy: \code{\string\slightlysloppy} vs.~\code{\string\fussy}.
+ The left parbox is typeset with \code{\string\slightlysloppy}
+ and \(\metavar{sloppiness} = \sness\), whereas the right sample
+ features the well known \code{\string\fussy} setting.
+ Both parboxes have a width of \the\examplewidth.\label{ex:slightlysloppy-1}}
+
+ \exampleparbox[fussy-vs-slightlysloppy]{\slightlysloppy[\sness]\texbooktolerancesample}
+ \qquad
+ \exampleparbox[fussy-vs-slightlysloppy-reference]{\fussy\texbooktolerancesample}
+
+ \texbooktolerancesamplecredits
+
+ \examplefontinformation
+\end{exemplary}
+
+\begin{exemplary}
+ \setlength{\examplewidth}{150pt}
+ \def\sness{2}
+ \centering
+ \caption[Paragraphs typeset slightly sloppy~2]
+ {Paragraphs typeset slightly sloppy: \code{\string\slightlysloppy} vs.~\code{\string\sloppy}.
+ The left sample is features \code{\string\slightlysloppy} with \(\metavar{sloppiness} = \sness\),
+ the right sample is typeset with \code{\string\sloppy}.
+ Both parboxes have a width of \the\examplewidth.\label{ex:slightlysloppy-2}}
+
+ \exampleparbox[sloppy-vs-slightlysloppy]{\slightlysloppy[\sness]\texbooktolerancesample}
+ \qquad
+ \exampleparbox[sloppy-vs-slightlysloppy-reference]{\sloppy\texbooktolerancesample}
+
+ \texbooktolerancesamplecredits
+
+ \examplefontinformation
+\end{exemplary}
+
+In conclusion all renderings of the text in
+\cref{ex:slightlysloppy-1} and \cref{ex:slightlysloppy-2}
+have their merits and their own flaws.
+
+
+\clearpage
+\section{Vertically Partially-Tied Paragraphs}
+
+\paragraph{\code{vtietoppar}}\leavevmode\par
+
+\begin{typoginspect}{vtietoppar}
+ \clubpenalty=150
+ \begin{vtietoppar}[2]
+ After breaking a paragraph into lines, \TeX{} computes the interline
+ penalties by adding the values of: \code{\string\clubpenalty} after
+ the first line of a paragraph.\footnote{Footnote of \code{vtietoppar}.}
+ \eTeX{} generalizes the concept of interline, club, widow, and display widow penalty
+ by allowing their replacement by arrays of penalty values.
+ \end{vtietoppar}
+\end{typoginspect}
+
+\paragraph{\code{vtiebotpar}}\leavevmode\par
+
+\begin{typoginspect}{vtiebotpar}
+ \widowpenalty=150
+ \begin{vtiebotpar}[2]
+ After breaking a paragraph into lines, \TeX{} computes the interline
+ penalties by adding the values of: \code{\string\widowpenalty}
+ before the last line of the paragraph.\marginpar{A float!}
+ \eTeX{} generalizes the concept of interline, club, widow, and display widow penalty
+ by allowing their replacement by arrays of penalty values.
+ \end{vtiebotpar}
+\end{typoginspect}
+
+\paragraph{\code{vtiebotdisp}}\leavevmode\par
+
+\begin{typoginspect}[tracingboxes]{vtiebotdisp}
+ \displaywidowpenalty=150
+ \begin{vtiebotdisp}[2]
+ After breaking a paragraph into lines, \TeX{} computes the interline
+ penalties by adding the values of: \code{\string\displaywidowpenalty}
+ before the line immediately preceding a displayed equation.
+ \eTeX{} generalizes the concept of interline, club, widow, and display widow penalty
+ by allowing their replacement by arrays of penalty values.
+ \[g H = H g \quad \text{for all} \enspace g \in G.\]
+ \end{vtiebotdisp}
+
+ Follow-up paragraph after and outside of the \code{vtiebotdisp}-environment.
+\end{typoginspect}
+
+\paragraph{\code{vtiebotdisptoppar}}\leavevmode\par
+
+\begin{typoginspect}{vtiebotdisptoppar}
+ \displaywidowpenalty=150
+ \begin{vtiebotdisptoppar}[2]
+ After breaking a paragraph into lines, \TeX{} computes the interline
+ penalties by adding the values of: \code{\string\displaywidowpenalty}
+ before the line immediately preceding a displayed equation.
+ \eTeX{} generalizes the concept of interline, club, widow, and display widow penalty
+ by allowing their replacement by arrays of penalty values.
+ \begin{breakabledisplay}
+ \begin{displaymath}
+ g H = H g \quad \text{for all} \enspace g \in G.
+ \end{displaymath}
+ \end{breakabledisplay}
+
+ In this example we need a paragraph that follows the displayed math.
+ So, we have to type some more text here
+ to be able to demonstrate the action of the environment.
+ \end{vtiebotdisptoppar}
+\end{typoginspect}
+
+
+\clearpage
+\section{Breakable Displayed Equations}
+
+\newcommand*{\binaryminus}{\mathbin{-}}
+\newcommand*{\diracadj}[1]{\overline{#1}}
+\newcommand*{\unaryminus}{{-}}
+
+\begin{typoginspect}{breakabledisplay}
+ \begin{breakabledisplay}
+ \begin{align*}
+ \diracadj{\psi}(x) \mathop{\partial_\mu} \psi(x)
+ \mapsto \diracadj{\psi'}(x) \mathop{\partial_\mu} \psi'(x)
+ &= e^{i \alpha(x)} \diracadj{\psi}(x) \mathop{\partial_\mu} \bigl( e^{\unaryminus i \alpha(x)} \psi(x) \bigr) \\
+ &= \underbrace{\diracadj{\psi}(x) \mathop{\partial_\mu} \psi(x)}_{\text{free particle}}
+ \mskip\medmuskip \binaryminus \mskip\medmuskip i \, \diracadj{\psi}(x)
+ \underbrace{\mathop{\partial_\mu} \bigl( \alpha(x) \bigr)}_{\mathclap{\text{vector field}}} \psi(x).
+ \end{align*}
+ \end{breakabledisplay}
+\end{typoginspect}
+
+
+\clearpage
+\section{\packagename{Setspace} Front-End}
+
+\fontsizeinfo{defaultsize}
+Current settings are \defaultsize{}
+%--\settoheight{\typogfontsize}{CEMNORSUVWXZ}
+and \code{\string\typogfontsize} is \the\typogfontsize.
+
+
+\newcommand*{\absbls}{12pt plus 1pt minus .5pt}
+\paragraph{\code{\string\setbaselineskip\{\absbls\}}}
+\resetbaselineskip
+\setbaselineskip{10pt + 2.75pt}% addition
+\setbaselineskip{10.5pt * 100 / 105}% scaling
+\setbaselineskip{11.8pt * 85 / 100}% scaling
+\setbaselineskip{\absbls}
+\fontsizeinfo{baselinesetsize}
+New settings: \baselinesetsize.
+
+\texbookbaselineskipsample
+
+
+\newcommand*{\relbls}{130}
+\paragraph{\code{\string\setbaselineskippercentage\{\relbls\}}}
+\setbaselineskippercentage{1 + 2 + .3333 * 100 + 100 * 0.6667}% float expression
+\setbaselineskippercentage{\relbls}
+\fontsizeinfo{baselinesetsize}
+New settings: \baselinesetsize.
+
+\texbookbaselineskipsample
+
+
+\newcommand*{\absled}{1.5pt}
+\paragraph{\code{\string\setleading\{\absled\}}}
+\setleading{1pt / -2.0}% negative leading
+\setleading{\absled}
+\fontsizeinfo{baselinesetsize}
+New settings: \baselinesetsize.
+
+\texbookbaselineskipsample
+
+
+\newcommand*{\relled}{30}
+\paragraph{\code{\string\setleadingpercentage\{\relled\}}}
+\setleadingpercentage{10 - 25 / 2}% negative leading
+\setleadingpercentage{\relled}
+\fontsizeinfo{baselinesetsize}
+New settings: \baselinesetsize.
+
+\texbookbaselineskipsample
+
+\medskip
+
+\setstretch{1}
+\texbookbaselineskipsamplecredits
+
+
+\clearpage
+\section{Smooth Ragged}
+
+\begin{exemplary}
+ \newcommand*{\ragwidth}{10pt}
+ \centering
+ \caption[Comparison of ragged right typesetting]
+ {Comparison of ragged right typesetting.
+ The first example uses \code{RaggedRight} of \packagename{ragged2e}
+ the second \code{smoothraggedrightpar} of \packagename{typog}.
+ Both examples share a \code{\string\fussy}~setting and
+ a \ragwidth~wide ragged right margin.\label{ex:smoothraggedright}}
+
+ \setlength{\RaggedRightRightskip}{0pt plus \ragwidth}
+
+ %\def\smoothraggedrightgenerator{quintuplet}
+ %\def\smoothraggedrightgenerator{septuplet}
+ \setlength{\smoothraggedrightragwidth}{\ragwidth}
+ %\def\smoothraggedrightfuzzfactor{.667}
+
+ \iffalse
+ \begin{quote}
+ \begin{RaggedRight}\examplesetup
+ \texbookparshapeskipsample
+ \end{RaggedRight}
+ \end{quote}
+
+ \begin{quote}
+ \begin{smoothraggedrightpar}\examplesetup
+ \texbookparshapeskipsample
+ \end{smoothraggedrightpar}
+ \end{quote}
+ \else
+ \exampleparbox[RaggedRight-reference]{\RaggedRight\texbooktolerancesample}
+ \qquad
+ \exampleparbox[smoothraggedrightpar]{\smoothraggedrightpar\texbooktolerancesample}
+ \fi
+
+ \texbookparshapeskipsamplecredits
+
+ \examplefontinformation
+\end{exemplary}
+
+
+ %--\setlength{\smoothraggedrightparindent}{25pt}
+ %--\setlength{\parindent}{0pt}
+
+\noindent
+\code{\string\parindent}=\the\parindent,
+visually: \rule{.1pt}{.8em}\kern\parindent\rule{.1pt}{.8em};
+
+\noindent
+\code{\string\smoothraggedrightleftskip}=\the\smoothraggedrightleftskip.
+\code{\string\smoothraggedrightparindent}=\the\smoothraggedrightparindent.
+\smallskip
+
+{
+ %--\setlength{\smoothraggedrightragwidth}{8pt}
+ \begin{smoothraggedright}
+ \texbooktolerancesample
+
+ \texbooktolerancesample
+ \end{smoothraggedright}
+}
+
+\medskip
+
+{
+ \setlength{\smoothraggedrightragwidth}{15pt}
+
+ \newcommand*{\definitionnilpotent}{%
+ Eine Abbildung oder ein Operator~\(A\)
+ heißen nilpotent vom Grad~\(k\), falls \(k \in N\)
+ die kleinste Zahl ist, für die gilt: \(A^k = 0\).}
+
+ \begin{otherlanguage}{german}
+ \parbox[t]{60pt}{\fussy\RaggedRight\definitionnilpotent}
+ \hspace{40pt}
+ \parbox[t]{60pt}{\fussy\smoothraggedright\definitionnilpotent}
+ \end{otherlanguage}
+}
+
+\clearpage
+\begin{RaggedRight}
+ \begin{thebibliography}{0}
+ \bibitem{knuth:1986}
+ \bibauthor{Knuth, D.~E.},
+ \bibtitle{The \TeX{}book},
+ Vol.~A of Computers\&Typesetting,
+ Addison Wesley, Reading\kernedslash*MA,
+ 1986.
+ \end{thebibliography}
+\end{RaggedRight}
+\end{document}
+%</example>
+% \fi
+%
+%
+%
+% \iffalse
+%<*nomicrotype>
+\documentclass[]{article}
+
+
+\usepackage[english]{babel}
+
+\usepackage{csquotes}
+\DeclareQuoteStyle{typog-guillemets}
+ {\doubleguillemetright}
+ {\doubleguillemetleft}
+ {\singleguillemetright}
+ {\singleguillemetleft}
+
+\usepackage[]{typog}
+
+
+\newcommand*{\packagename}[1]{\mbox{\textsf{#1}}}
+
+
+\begin{document}
+\begin{center}
+ \Huge\bf\sf
+ TypoG Examples \\
+ without Package~\packagename{microtype}
+\end{center}
+
+\bigskip
+
+\noindent
+This example \LaTeX-document uses package~\packagename{typog}
+\emph{without} package~\packagename{microtype}.
+
+We want \packagename{typog} to be as usable as possible even without
+the nice features that \packagename{microtype} offers.
+After all \packagename{typog} is just a front-end for it.
+
+As we are testing a special configuration here anyhow,
+we hook up our quotes with package~csquotes
+to check whether they interact ok.
+{\setquotestyle{typog-guillemets}%
+ \enquote{This is the outer part of the phrase
+ which contains the \enquote{inner part}.}}
+\end{document}
+%</nomicrotype>
+% \fi
+%
+%
+%
+% \iffalse
+%<*teximan2latex>
+## Remove all lines we neither need nor want.
+/^\\input /d
+/^@anchor/d
+/^@bye/d
+/^@documentencoding/d
+/^@node/d
+/^@setfilename/d
+/^@settitle/d
+/^@top/d
+/@menu/,/@end menu/d
+
+## Convert sectioning macros to our own hierarchy.
+s/^@chapter \(.*\)$/\\subsection*{\\textls[40]{\1}}/
+s/^@section \(.*\)$/\\subsubsection*{\1}/
+
+## Make `@asis' list resemble the Texinfo format.
+s/@table @asis/\\begin{list}{}{\\itemindent=-20pt\\leftmargin=20pt}/
+s/@end table/\\end{list}/
+
+## Indenting by four spaces generates a `verbatim' environment.
+s/@verbatim/\\begin{verbatim}/
+s/@end verbatim/\\end{verbatim}/
+
+## We substitute @display for our maxipage environment.
+s/@display/\\begin{maxipage}/
+s/@end display/\\end{maxipage}/
+
+## The argument format of the URL macro is different.
+s/@url{\([^,]*\), \([^}]*\)}/\\href{\1}{\2}/g
+
+## Use our own markup.
+s/\.\.\./\\dots{}/g
+s/LaTeX/\\LaTeX{}/g
+s/@file/\\textit/g
+s/@strong/\\textbf/g
+s/[w]{/mbox{/g
+
+## Quote some special characters.
+s/%/\\%/g
+s/_/\\_/g
+
+## Adapt to how a man-page is typeset.
+## En-dashes in front of long options really suck!
+s/--/-\\nolig*-/g
+
+## Converting the at-signs to backslashes is a bit tricky.
+s/^@item/\\item/
+s/@\([A-Za-z][A-Za-z]*\){/\\\1{/g
+s/@@/@/g
+
+## Convert selected macro names.
+s/\\jobname/\\textbackslash jobname/g
+
+## Make qualified Perl names breakable.
+s/::/::\\discretionary{}{}{}/g
+%</teximan2latex>
+% \fi
+%
+%
+%
+% \iffalse
+%<*typog-grep>
+#! /usr/bin/env perl
+
+
+use autodie qw(:all);
+use strict;
+use warnings;
+
+use Data::Dumper ();
+use English;
+use File::Basename ();
+use Getopt::Long;
+use IO::File;
+use IO::Handle;
+use Term::ANSIColor ();
+
+
+use constant COMMAND_NAME => File::Basename::basename($PROGRAM_NAME);
+
+
+my $DEBUG = 0;
+my $MATCH_COUNT = 0;
+my $OUTPUT_IS_REDIRECTED;
+
+
+sub fail_with_error {
+ print STDERR join('', COMMAND_NAME, ': ', @_, "\n");
+ exit 2;
+}
+
+
+sub issue_warning {
+ print STDERR join('', COMMAND_NAME, ': warning: ', @_, "\n");
+}
+
+
+sub debug_print {
+ return unless $DEBUG;
+ print STDERR "+ @_\n";
+}
+
+
+sub quote_filesystem {qq("$_[0]")}
+sub quote_literal {qq(`$_[0]')}
+
+
+sub limit_string_length {
+ my ($a_string, $a_maximum_length) = @_;
+
+ if (length $a_string <= $a_maximum_length) {
+ $a_string;
+ } else {
+ substr($a_string, 0, $a_maximum_length - 3) . '...';
+ }
+}
+
+
+## We set all colors to `undef' and fill them later with the values
+## of the actual configuration.
+my $highlight_patterns = {
+ PARTIAL_LINE => {
+ FONT_SPEC => [qr#
+ \\
+ (?: OMS | OMX | OT1 | T1 | TS1 | U )
+ (?: /[^/]+ ){5} / \S+ \s
+ (?: \([+-]\d+\) )?
+ #x, undef],
+ MATH => [qr#
+ \$
+ \\
+ (?: LMS | OML )
+ (?: /[^/]+ ){5} / \S+ \s
+ (?: \([+-]\d+\) )?
+ .*?
+ \$
+ #x, undef]
+ },
+ WHOLE_LINE => {
+ FILL_STATE => [qr#^(?:Under|Over)full \\hbox .*$#, undef],
+ FIRST_VBOX => [qr#^%%#, undef],
+ HORIZONTAL_BREAKPOINT => [qr#^@@\d+:.*$#, undef],
+ HORIZONTAL_BREAK_CANDIDATE => [qr#^@[\\ ].*$#, undef],
+ LINE_BREAK_PASS => [qr#^@[a-z]+?pass#, undef],
+ TIGHTNESS => [qr#^(?:Loose|Tight) \\hbox .*$#, undef],
+ VERTICAL_BREAKPOINT => [qr#^% t=\d+.*$#, undef]
+ }
+};
+
+
+sub colorize_line {
+ my ($configuration, $line) = @_;
+
+ foreach my $pattern_color_pair (values %{$highlight_patterns->{WHOLE_LINE}}) {
+ next unless $pattern_color_pair->[1];
+ return Term::ANSIColor::colored($line, $pattern_color_pair->[1])
+ if $line =~ $pattern_color_pair->[0];
+ }
+ return $line if $line =~ m#^\.#; # we do not paint box contents yet
+
+ $line =~ s#$highlight_patterns->{PARTIAL_LINE}->{MATH}->[0]
+ #Term::ANSIColor::colored($MATCH, $highlight_patterns->{PARTIAL_LINE}->{MATH}->[1])
+ #egx;
+
+ $line =~ s#$highlight_patterns->{PARTIAL_LINE}->{FONT_SPEC}->[0]
+ #Term::ANSIColor::colored($MATCH, $highlight_patterns->{PARTIAL_LINE}->{FONT_SPEC}->[1])
+ #egx;
+
+ return $line;
+}
+
+
+my $open_or_close_tag_regexp = qr#^</?typog-inspect[ >]#; # somewhat sloppy definition
+my $close_tag_regexp = qr#^</typog-inspect>#;
+my $open_tag_regexp =
+ qr#^
+ <typog-inspect \s+
+ id="(?<id_match> .*?)" \s+
+ job="(?<job_match> .*?)" \s+
+ line="(?<line_match> .*?)" \s+
+ page="(?<page_match> .*?)"
+ >#x;
+
+
+sub grep_log_file {
+ my ($options, $configuration, $file, $filename, $id_regexp) = @_;
+
+ my $job_name;
+ my $line_number = 0; # line number in the log file we are inspecting, i.e., $filename
+ my $match_count = 0;
+ my $source_line_number; # line number in TeX file the log refers to, i.e., "$job_name.tex"
+ my $page_number;
+ my $regexp_modifier = $options->{IGNORE_CASE} ? 'i' : '';
+ my $id_value;
+ my @nesting_levels;
+
+ if ($options->{WORD_REGEXP}) {
+ $id_regexp = "\\b$id_regexp\\b";
+ }
+
+ while (my $line = readline $file) {
+ chomp $line;
+ $line_number++;
+
+ if ($line =~ $close_tag_regexp) {
+ fail_with_error("$filename: $line_number: mismatched open/close tags") unless @nesting_levels;
+ pop @nesting_levels;
+ }
+
+ if (@nesting_levels and $nesting_levels[-1] and $line !~ $open_or_close_tag_regexp) {
+ if ($options->{LOG_LINE_NUMBER}) {
+ my $formatted_log_line_number =
+ sprintf $configuration->{LOG_LINE_NUMBER_FORMAT}, $line_number;
+ if ($options->{COLORIZE_OUTPUT}) {
+ $formatted_log_line_number =
+ Term::ANSIColor::colored($formatted_log_line_number,
+ $configuration->{COLORS}->{LOG_LINE_NUMBER});
+ }
+ print $formatted_log_line_number, ' ';
+ }
+
+ print "$job_name: " if $options->{JOB_NAME};
+
+ if ($options->{LINE_NUMBER}) {
+ my $formatted_line_number = sprintf $configuration->{LINE_NUMBER_FORMAT}, $source_line_number;
+ if ($options->{COLORIZE_OUTPUT}) {
+ $formatted_line_number =
+ Term::ANSIColor::colored($formatted_line_number,
+ $configuration->{COLORS}->{LINE_NUMBER});
+ }
+ print $formatted_line_number, ' ';
+ }
+
+ if ($options->{PAGE_NUMBER}) {
+ my $formatted_page_number = sprintf $configuration->{PAGE_NUMBER_FORMAT}, $page_number;
+ if ($options->{COLORIZE_OUTPUT}) {
+ $formatted_page_number =
+ Term::ANSIColor::colored($formatted_page_number,
+ $configuration->{COLORS}->{PAGE_NUMBER});
+ }
+ print $formatted_page_number, ' ';
+ }
+
+ if ($options->{ID} and not $configuration->{PRINT_ID_AS_HEADING}) {
+ my $formatted_id = sprintf $configuration->{ID_INLINE_FORMAT}, $id_value;
+ if ($options->{COLORIZE_OUTPUT}) {
+ $formatted_id = Term::ANSIColor::colored($formatted_id ,
+ $configuration->{COLORS}->{ID_COLOR});
+ }
+ print $formatted_id, ' ';
+ }
+
+ if ($options->{COLORIZE_OUTPUT}) {
+ print colorize_line($configuration, $line);
+ } else {
+ print $line;
+ }
+ print "\n";
+ }
+
+ if ($line =~ $open_tag_regexp) {
+ $id_value = limit_string_length($+{id_match}, $configuration->{ID_MAX_LENGTH});
+ $job_name = $+{job_match};
+ $source_line_number = $+{line_match};
+ $page_number = $+{page_match};
+
+ my $found_matching_id = ($id_value =~ m/(?$regexp_modifier)$id_regexp/) ? 1 : 0;
+ push @nesting_levels, $found_matching_id;
+ if ($found_matching_id) {
+ ++$MATCH_COUNT; # global count -- needed for return code of program
+ ++$match_count; # per file count -- needed to be able to separate the hunks
+
+ print "\n" if $match_count >= 2;
+ if ($options->{ID} and $configuration->{PRINT_ID_AS_HEADING}) {
+ my $formatted_id = sprintf $configuration->{ID_HEADING_FORMAT}, $id_value;
+ if ($options->{COLORIZE_OUTPUT}) {
+ $formatted_id =
+ Term::ANSIColor::colored($formatted_id,
+ $configuration->{COLORS}->{ID_HEADING_COLOR});
+ }
+ print $formatted_id, "\n";
+ }
+ }
+ }
+ }
+}
+
+
+sub show_ids_in_file {
+ my ($options, $configuration, $file, $filename, $id_regexp) = @_;
+
+ my $line_number = 0;
+ my @nesting_levels;
+
+ while (my $line = readline $file) {
+ chomp $line;
+ $line_number++;
+
+ if ($line =~ $close_tag_regexp) {
+ fail_with_error("$filename: $line_number: mismatched open/close tags") unless @nesting_levels;
+ pop @nesting_levels;
+ }
+
+ if ($line =~ $open_tag_regexp) {
+ my $id_value = limit_string_length($+{id_match}, $configuration->{ID_MAX_LENGTH});
+ my $job_name = $+{job_match};
+ my $source_line_number = $+{line_match};
+ my $page_number = $+{page_match};
+
+ ++$MATCH_COUNT;
+ push @nesting_levels, 1;
+
+ if ($options->{LOG_LINE_NUMBER}) {
+ my $formatted_log_line_number =
+ sprintf $configuration->{LOG_LINE_NUMBER_FORMAT}, $line_number;
+ if ($options->{COLORIZE_OUTPUT}) {
+ $formatted_log_line_number =
+ Term::ANSIColor::colored($formatted_log_line_number,
+ $configuration->{COLORS}->{LOG_LINE_NUMBER});
+ }
+ print $formatted_log_line_number, ' ';
+ }
+
+ print "$job_name: " if $options->{JOB_NAME};
+
+ if ($options->{LINE_NUMBER}) {
+ my $formatted_line_number = sprintf $configuration->{LINE_NUMBER_FORMAT}, $source_line_number;
+ if ($options->{COLORIZE_OUTPUT}) {
+ $formatted_line_number =
+ Term::ANSIColor::colored($formatted_line_number,
+ $configuration->{COLORS}->{LINE_NUMBER});
+ }
+ print $formatted_line_number, ' ';
+ }
+
+ if ($options->{PAGE_NUMBER}) {
+ my $formatted_page_number = sprintf $configuration->{PAGE_NUMBER_FORMAT}, $page_number;
+ if ($options->{COLORIZE_OUTPUT}) {
+ $formatted_page_number =
+ Term::ANSIColor::colored($formatted_page_number,
+ $configuration->{COLORS}->{PAGE_NUMBER});
+ }
+ print $formatted_page_number, ' ';
+ }
+
+ my $indent = $configuration->{ID_INDENT} * (@nesting_levels - 1);
+ print ' ' x $indent, $id_value, "\n";
+ }
+ }
+}
+
+
+sub open_file_for_reading {
+ my $filename = shift;
+
+ my $file;
+
+ if ($filename eq 'stdin') {
+ $file = IO::Handle->new();
+ $file->fdopen(fileno(STDIN), 'r') or
+ fail_with_error("cannot open stdin: $OS_ERROR");
+ } else {
+ $file = IO::File->new($filename, 'r') or
+ fail_with_error("cannot open @{[quote_filesystem($filename)]}: $OS_ERROR");
+ }
+
+ $file;
+}
+
+
+sub close_file {
+ my ($file, $filename) = shift;
+
+ $file->close or
+ issue_warning("problems while closing @{[quote_filesystem($filename)]}: $OS_ERROR");
+}
+
+
+sub grep_or_show {
+ my ($options, $configuration, $file, $filename, $id_regexp) = @_;
+
+ if ($options->{SHOW_ALL_IDS}) {
+ show_ids_in_file($options, $configuration, $file, $filename, $id_regexp);
+ } else {
+ grep_log_file($options, $configuration, $file, $filename, $id_regexp);
+ }
+}
+
+
+sub scan_files {
+ my ($options, $configuration, $id_regexp, $log_filenames) = @_;
+
+ if (@$log_filenames) {
+ foreach my $log_filename (@$log_filenames) {
+ $log_filename = 'stdin' if $log_filename eq '-';
+ if (@$log_filenames >= 2) {
+ print "\n" unless $log_filename eq $log_filenames->[0];
+ my $filename_header = "==> $log_filename <==\n";
+ $filename_header = Term::ANSIColor::colored($filename_header,
+ $configuration->{COLORS}->{FILE_HEADER})
+ if $options->{COLORIZE_OUTPUT};
+ print $filename_header;
+ }
+ my $file = open_file_for_reading($log_filename);
+ grep_or_show($options, $configuration, $file, $log_filename, $id_regexp);
+ close_file($file, $log_filename);
+ }
+ } else {
+ my $log_filename = 'stdin';
+ my $file = open_file_for_reading($log_filename);
+ grep_or_show($options, $configuration, $file, $log_filename, $id_regexp);
+ close_file($file, $log_filename);
+ }
+}
+
+
+sub redirect_and_scan_files {
+ my ($options, $configuration, $id_regexp, $log_filenames) = @_;
+
+ my $pager;
+
+ my $pid = open($pager, '|-', $configuration->{PAGER}, $configuration->{PAGER_FLAGS});
+ fail_with_error('failed to redirect to pager ', quote_literal($configuration->{PAGER}),
+ ' with flags ', quote_literal($configuration->{PAGER_FLAGS}),
+ ": $OS_ERROR")
+ unless defined $pid;
+ my $stdout = select $pager;
+
+ $pager->autoflush;
+ scan_files($options, $configuration, $id_regexp, $log_filenames);
+
+ close $pager or issue_warning "error occurred while closing the pager (pid: $pid) pipe: $OS_ERROR";
+ select $stdout;
+}
+
+
+########################################################################
+
+
+my $configuration_key_map = {
+ 'id-format' => 'ID_INLINE_FORMAT',
+ 'id-indent' => 'ID_INDENT',
+ 'id-heading' => 'PRINT_ID_AS_HEADING',
+ 'id-heading-format' => 'ID_HEADING_FORMAT',
+ 'id-max-length' => 'ID_MAX_LENGTH',
+ 'line-number-format' => 'LINE_NUMBER_FORMAT',
+ 'log-line-number-format' => 'LOG_LINE_NUMBER_FORMAT',
+ 'page-number-format' => 'PAGE_NUMBER_FORMAT',
+
+ 'file-header-color' => 'FILE_HEADER',
+ 'fill-state-color' => 'FILL_STATE',
+ 'first-vbox-color' => 'FIRST_VBOX',
+ 'font-spec-color' => 'FONT_SPEC',
+ 'horizontal-break-candidate-color' => 'HORIZONTAL_BREAK_CANDIDATE',
+ 'horizontal-breakpoint-color' => 'HORIZONTAL_BREAKPOINT',
+ 'id-color' => 'ID_COLOR',
+ 'id-heading-color' => 'ID_HEADING_COLOR',
+ 'line-break-pass-color' => 'LINE_BREAK_PASS',
+ 'line-number-color' => 'LINE_NUMBER',
+ 'log-line-number-color' => 'LOG_LINE_NUMBER',
+ 'math-color' => 'MATH',
+ 'page-number-color' => 'PAGE_NUMBER',
+ 'pager' => 'PAGER',
+ 'pager-flags' => 'PAGER_FLAGS',
+ 'tightness-color' => 'TIGHTNESS',
+ 'vertical-breakpoint-color' => 'VERTICAL_BREAKPOINT'
+};
+
+
+my $default_configuration = {
+ COLORS => {
+ FILE_HEADER => 'bold black',
+ FILL_STATE => 'bold magenta',
+ FIRST_VBOX => 'bold red',
+ FONT_SPEC => 'grey12',
+ HORIZONTAL_BREAKPOINT => 'bold green',
+ HORIZONTAL_BREAK_CANDIDATE => 'blue',
+ ID_COLOR => 'white on_black',
+ ID_HEADING_COLOR => 'white on_black',
+ LINE_BREAK_PASS => 'bold green',
+ LINE_NUMBER => 'bold black',
+ LOG_LINE_NUMBER => 'italic black',
+ MATH => 'yellow',
+ PAGE_NUMBER => 'bold white on_red',
+ TIGHTNESS => 'bold cyan',
+ VERTICAL_BREAKPOINT => 'red'
+ },
+ ID_INLINE_FORMAT => '%s:',
+ ID_HEADING_FORMAT => '--> %s <--',
+ ID_INDENT => 8,
+ ID_MAX_LENGTH => 40,
+ LINE_NUMBER_FORMAT => '%5d',
+ LOG_LINE_NUMBER_FORMAT => '%6d',
+ PAGE_NUMBER_FORMAT => '[%3d]',
+ PAGER => 'less',
+ PAGER_FLAGS => '--quit-if-one-screen',
+ PRINT_ID_AS_HEADING => 0
+};
+
+
+sub initialize_highlighting_from_configuration {
+ my $configuration = shift;
+
+ while (my (undef, $assoc) = each %$highlight_patterns) {
+ while (my ($name, $pattern_color_pair) = each %$assoc) {
+ $pattern_color_pair->[1] = $configuration->{COLORS}->{$name};
+ }
+ }
+}
+
+
+sub modify_configuration {
+ my ($configuration, $key, $value) = @_;
+
+ fail_with_error('malformed KEY=VALUE pair -- missing key') unless $key;
+
+ if (defined $configuration_key_map->{$key}) {
+ if ($key =~ m/-color$/) {
+ $configuration->{COLORS}->{$configuration_key_map->{$key}} = $value;
+ } else {
+ $configuration->{$configuration_key_map->{$key}} = $value;
+ }
+ } else {
+ fail_with_error("@{[quote_literal($key)]} is not a valid configuration KEY");
+ }
+}
+
+
+sub setup_configuation {
+ my ($config_spec, $configuration) = @_;
+
+ foreach my $spec (split ':', $config_spec) {
+ my ($key, $value) = split '=', $spec;
+ modify_configuration($configuration, $key, $value);
+ }
+}
+
+
+my $default_options = {
+ COLORIZE_MODE => 'auto',
+ DEBUG => 0,
+ ID => 0,
+ IGNORE_CASE => 0,
+ JOB_NAME => 0,
+ LINE_NUMBER => 0,
+ LOG_LINE_NUMBER => 0,
+ PAGE_NUMBER => 0,
+ REQUEST_PAGER => 1,
+ WORD_REGEXP => 0
+};
+
+
+sub show_help {
+ print <<HELP_TEXT;
+Usage: @{[COMMAND_NAME]} [OPTION] ID-REGEXP LOG-FILE...
+Structured grep for typog-inspect elements that match ID-REGEXP in LOG-FILE.
+
+Options
+ --color [WHEN],
+ --colour [WHEN] use color to highlight specific log contents
+ WHEN is 'always', 'never', or 'auto'
+ -C, --config KEY=VALUE set configuration KEY to VALUE
+ -i, --[no-]id print matching id with output lines
+ -y, --[no-]ignore-case ignore case distinctions in patterns and data
+ -j, --[no-]job-name print \\jobname with output lines
+ -n, --[no-]line-number print TeX-source line number with output lines
+ -N, --[no-]log-line-number print log-file line number with output lines
+ -p, --[no-]page-number print page number with output lines
+ -P, --[no-]pager redirect output to pager
+ -w, --[no-]word-regexp match only whole words
+
+ -a, --all, --any show all IDs in LOG-FILE
+ --debug turn on debug output
+ -h, --help display this help and exit
+ --show-config show default configuration and exit
+ -V, --version show version information and exit
+
+HELP_TEXT
+
+ exit 0;
+}
+
+
+sub show_configuration {
+ my $format_string_value = sub {quote_literal($default_configuration->{$_[0]})};
+
+ print <<FIXED_CONFIGURATION_TEXT;
+Configuration
+Key Default Value
+------------------------------------ -------------
+id-format @{[$format_string_value->('ID_INLINE_FORMAT')]}
+id-heading $default_configuration->{PRINT_ID_AS_HEADING}
+id-heading-format @{[$format_string_value->('ID_HEADING_FORMAT')]}
+id-indent $default_configuration->{ID_INDENT}
+id-max-length $default_configuration->{ID_MAX_LENGTH}
+line-number-format @{[$format_string_value->('LINE_NUMBER_FORMAT')]}
+log-line-number-format @{[$format_string_value->('LOG_LINE_NUMBER_FORMAT')]}
+page-number-format @{[$format_string_value->('PAGE_NUMBER_FORMAT')]}
+pager @{[$format_string_value->('PAGER')]}
+pager-flags @{[$format_string_value->('PAGER_FLAGS')]}
+
+FIXED_CONFIGURATION_TEXT
+
+ foreach my $configuration_key (sort keys %$configuration_key_map) {
+ next unless $configuration_key =~ m/-color$/;
+ printf("%-36s %s\n",
+ $configuration_key,
+ quote_literal($default_configuration->
+ {COLORS}->
+ {$configuration_key_map->{$configuration_key}}));
+ }
+
+ exit 0;
+}
+
+
+sub show_version {
+ print <<VERSION_TEXT;
+typog-grep 0.1
+
+Copyright (C) 2024 by Ch. L. Spiel
+License LPPL: LaTeX Project Public License version 1.3 or later
+VERSION_TEXT
+
+ exit 0;
+}
+
+
+sub get_options {
+ my ($options, $configuration) = @_;
+
+ Getopt::Long::Configure('gnu_getopt', 'no_ignore_case');
+
+ Getopt::Long::GetOptions('a|all|any' => \$options->{SHOW_ALL_IDS},
+ 'color|colour=s' => \$options->{COLORIZE_MODE},
+ 'C|configuration=s' => sub{setup_configuation($_[1], $configuration)},
+ 'debug+' => \$DEBUG,
+ 'h|help' => \&show_help,
+ 'i|id!' => \$options->{ID},
+ 'y|ignore-case!' => \$options->{IGNORE_CASE},
+ 'j|job-name!' => \$options->{JOB_NAME},
+ 'n|line-number!' => \$options->{LINE_NUMBER},
+ 'N|log-line-number!' => \$options->{LOG_LINE_NUMBER},
+ 'p|page-number!' => \$options->{PAGE_NUMBER},
+ 'P|pager!' => \$options->{REQUEST_PAGER},
+ 'show-config' => \&show_configuration,
+ 'V|version' => \&show_version,
+ 'w|word-regexp!' => \$options->{WORD_REGEXP}) or
+ fail_with_error('problems while parsing options');
+
+ fail_with_error("unknown colorize mode @{[quote_literal($options->{COLORIZE_MODE})]}")
+ unless $options->{COLORIZE_MODE} =~ m/^(?:always|auto|never)$/i
+}
+
+
+sub do_colorize {
+ my $colorize_mode = shift;
+
+ if ($colorize_mode =~ m/never/i) {
+ 0;
+ } elsif ($colorize_mode =~ m/always/i) {
+ 1;
+ } elsif ($colorize_mode =~ m/auto/i) {
+ not $OUTPUT_IS_REDIRECTED;
+ }
+}
+
+
+## For the comparison with the POSIX spec of grep(1) consult
+## https://pubs.opengroup.org/onlinepubs/9699919799/utilities/grep.html
+
+
+sub main {
+ $OUTPUT_IS_REDIRECTED = -t STDOUT ? 0 : 1;
+
+ my $options = {%$default_options};
+ my $configuration = {%$default_configuration};
+
+ get_options($options, $configuration);
+ $options->{COLORIZE_OUTPUT} = do_colorize($options->{COLORIZE_MODE});
+ initialize_highlighting_from_configuration($configuration);
+ debug_print(Data::Dumper::Dumper($configuration));
+ debug_print(Data::Dumper::Dumper($options));
+
+ my $id_regexp;
+ if ($options->{SHOW_ALL_IDS}) {
+ $id_regexp = '^';
+ issue_warning("option @{[quote_literal('--id')]} ignored in @{[quote_literal('--all')]} mode")
+ if $options->{ID};
+ } else {
+ fail_with_error('missing ID-REGEXP') unless @ARGV >= 1;
+ $id_regexp = shift @ARGV;
+ }
+
+ if ($options->{REQUEST_PAGER} && $OUTPUT_IS_REDIRECTED) {
+ issue_warning("option @{[quote_literal('--pager')]} ignored because output is redirected");
+ }
+ my $use_pager = $options->{REQUEST_PAGER} && !$OUTPUT_IS_REDIRECTED;
+ if ($use_pager) {
+ redirect_and_scan_files($options, $configuration, $id_regexp, \@ARGV);
+ } else {
+ scan_files($options, $configuration, $id_regexp, \@ARGV);
+ }
+
+ exit ($MATCH_COUNT == 0);
+}
+
+
+main();
+%</typog-grep>
+% \fi
+%
+%
+%
+% \iffalse
+%<*typog-grep-documentation>
+=begin man
+
+.\" Turn off justification.
+.na
+
+=end man
+
+=head1 NAME
+
+typog-grep - grep for typog-inspect elements in LaTeX log files
+
+
+=head1 SYNOPSIS
+
+=over
+
+=item B<typog-grep> -a|--all|--any [I<OPTION>...] F<LOG-FILE>...
+
+=item B<typog-grep> [I<OPTION>...] I<REGEXP> F<LOG-FILE>...
+
+=back
+
+The first form shows all C<E<lt>typog-inspect id="I<ID>" ...E<gt>> elements in F<LOG-FILE>.
+
+The second form shows the contents of C<E<lt>typog-inspect id="I<ID>" ...E<gt>> elements
+whose I<ID>s match I<REGEXP> in F<LOG-FILE>.
+
+If no F<LOG-FILE> is given read from F<stdin>.
+The S<filename C<->> is synonymous to F<stdin>.
+
+
+=head1 DESCRIPTION
+
+B<typog-grep> is a tailored post-processor for LaTeX log files
+and the C<typoginspect> environment as provided by S<package typog>.
+It shares more with the venerable
+L<B<sgrep>|https://www.cs.helsinki.fi/u/jjaakkol/sgrep.html>
+than with S<POSIX L<B<grep>|https://pubs.opengroup.org/onlinepubs/9699919799/utilities/grep.html>>.
+
+The LaTeX user brackets her text in
+
+ \begin{typoginspect}{ID}
+ Text and code to investigate
+ \end{typoginspect}
+
+where I<ID> is used to identify one or more bracketed snippets.
+I<ID> does not have to be unique.
+The I<REGEXP> mechanism makes it easy to select groups of related I<ID>s
+if they are named accordingly.
+
+In F<LOG-FILE> the environment shows up, packed with tracing information, as
+
+=begin texinfo
+
+@display
+@relax
+
+=end texinfo
+
+ <typog-inspect id="ID" job="JOB-NAME" line="LINE-NUMBER" page="PAGE-NUMBER">
+ Trace Data
+ </typog-inspect>
+
+=begin texinfo
+
+@end display
+@relax
+
+=end texinfo
+
+where all the capital-letter sequences are meta-variables
+and in particular
+I<JOB-NAME> is the expansion of C<\jobname>,
+I<LINE-NUMBER> is the LaTeX source file line number
+of the beginning of the C<typoginspect> environment,
+and I<PAGE-NUMBER> is the page where
+the output of S<C<Text and code to investigate>> occurs.
+
+B<typog-grep> reveals the contents of F<LOG-FILE>
+between C<E<lt>typog-inspect id="I<ID>" ...E<gt>>
+and C<E<lt>/typog-inspectE<gt>> excluding the XML-tags.
+Access the I<JOB-NAME>, I<LINE-NUMBER>, and I<PAGE-NUMBER>
+with the commandline options
+B<--job-name>, B<--line-number>, and B<--page-number>, respectively.
+Use B<--id> to show the name of the IDs that matched I<REGEXP>.
+
+C<typoginspect> environments can be nested.
+B<typog-grep> respects the nesting,
+i.e., if the I<ID> of the nested environment does not match I<REGEXP>
+it will not be included in the program's output.
+
+
+=head1 OPTIONS
+
+The list of options is sorted by the names of the long options.
+
+=over 4
+
+=item B<-a>, B<--all>, B<--any>
+
+ID-discovery mode:
+Show all C<typog-inspect> elements independent of any matching patterns.
+
+=item B<--color>, B<colour> I<WHEN>
+
+Colorize specific log contents for the matching ids.
+The S<argument I<WHEN>> determines when to apply color:
+C<always>, C<never>, S<or C<auto>>.
+The setting C<auto> checks whether standard output has been redirected.
+This is the default.
+
+=item B<-C>, B<--config> I<KEY>=I<VALUE>[:I<KEY>=I<VALUE>[:...]]
+
+Set one or more configuration I<KEY> to I<VALUE> pairs.
+See S<Sec. CONFIGURATION> below for a description of all available configuration items.
+Use option B<--show-config> to display the default configuration.
+
+=item B<--debug>
+
+Turn on debug output on F<stderr>.
+
+=item B<-h>, B<--help>
+
+Display brief help then exit.
+
+=item B<-i>, B<--[no-]id>
+
+Print the actual id name that matched I<REGEXP>.
+Control the appearance of the matching id with configuration S<item C<id-heading>>.
+
+=item B<-y>, B<--[no-]ignore-case>
+
+Match ids while ignoring case distinctions in patterns and data.
+
+=item B<-j>, B<--[no-]job-name>
+
+Print the C<\jobname> that B<tex> associated with the input file.
+
+=item B<-n>, B<--[no-]line-number>
+
+Print the line number where the S<C<typoginspect> environment>
+was encountered in the LaTeX source file.
+
+=item B<-N>, B<--[no-]log-line-number>
+
+Print the line number of the F<log>-file where the current line was encountered.
+
+=item B<-p>, B<--[no-]page-number>
+
+Print page number where the contents of the S<C<typoginspect> environment>
+starts in the typeset document.
+
+=item B<-P>, B<--[no-]pager>
+
+Redirect output from F<stdout> to the configured pager.
+
+=item B<--show-config>
+
+Show the default configuration and exit.
+
+=item B<-V>, B<--version>
+
+Show version information and exit.
+
+=item B<-w>, B<--[no-]word-regexp>
+
+Match only whole words.
+
+=back
+
+
+=head1 CONFIGURATION
+
+=over 4
+
+=item C<id-format>=I<FORMAT>
+
+Control the I<FORMAT> for printing matching ids in inline-mode,
+where I<FORMAT> is passed to Perl's C<printf>.
+S<Default: C<%s:>.>
+
+=item C<id-heading>=C<0>E<verbar>C<1>
+
+Choose between printing the matching ids with S<option B<--id>>:
+S<Inline (C<0>)> or heading before the matching data (C<1>).
+S<Default: C<0>.>
+
+=item C<id-heading-format>=I<FORMAT>
+
+Control the I<FORMAT> for printing matching ids in heading-mode,
+where I<FORMAT> is passed to Perl's C<printf>.
+S<Default: C<--E<gt> %s E<lt>-->.>
+
+=item C<id-indent>=I<INDENT>
+
+Indentation of nested typog-inspect tags.
+Only used in ``discovery'' mode (first form), i.e., if B<--all> is active.
+S<Default: 8.>
+
+=item C<id-max-length>=I<MAXIMUM-LENGTH>
+
+Set the maximum length of a matching id for printing.
+It a matching id exceeds this length it will be truncated
+and the last three characters (short of I<MAXIMUM-LENGTH>) will be replaced by dots.
+S<Default: 40.>
+
+=item C<line-number-format>=I<FORMAT>
+
+Control the I<FORMAT> for printing TeX source line numbers,
+where I<FORMAT> is passed to Perl's C<printf>.
+S<Default: C<%5d>.>
+
+=item C<log-line-number-format>=I<FORMAT>
+
+Control the I<FORMAT> for printing log line numbers,
+where I<FORMAT> is passed to Perl's C<printf>.
+S<Default: C<%6d>.>
+
+=item C<page-number-format>=I<FORMAT>
+
+Control the I<FORMAT> for printing page numbers,
+where I<FORMAT> is passed to Perl's C<printf>.
+S<Default: C<[%3d]>.>
+
+=item C<pager>=I<PAGER>
+
+Name of pager application to pipe output into
+if run with S<option B<--pager>>.
+S<Default: C<less>>.
+
+=item C<pager-flags>=I<FLAGS>
+
+Pass I<FLAGS> to I<PAGER>.
+S<Default: C<--quit-if-one-screen>>.
+
+=item Color Configuration
+
+For the syntax of the color specifications consult
+the manual page of Term::ANSIColor(pm).
+
+=over 4
+
+=item C<file-header-color>
+
+Color of the filename header.
+
+=item C<fill-state-color>
+
+Color of the messages that report ``Underfull hbox'' or ``Overfull hbox''.
+
+=item C<first-vbox-color>
+
+Color of the first vbox on a page.
+
+=item C<font-spec-color>
+
+Color of font specifications.
+
+=item C<horizontal-break-candidate-color>
+
+Color of lines with horizontal-breakpoint S<candidates C<@>>.
+
+=item C<horizontal-breakpoint-color>
+
+Color of lines with horizontal S<breakpoints C<@@>>.
+
+=item C<id-color>
+
+Color of matching ids when printed inline.
+
+=item C<id-heading-color>
+
+Color of matching ids when printed in heading form.
+
+=item C<line-break-pass-color>
+
+Color of the lines showing which pass (e.g., C<@firstpass>)
+of the line-breaking algorithm is active.
+
+=item C<line-number-color>
+
+Color of TeX-source-file line numbers.
+
+=item C<log-line-number-color>
+
+Color of log-file line numbers.
+
+=item C<math-color>
+
+Color used for math expressions including their font specs.
+
+=item C<page-number-color>
+
+Color of page numbers of the final output.
+
+=item C<tightness-color>
+
+Color of lines with Tight/Loose hbox reports.
+
+=item C<vertical-breakpoint-color>
+
+Color of possible vertical breakpoints.
+
+=back
+
+=back
+
+
+=head2 Brief summary of colors and attributes
+
+=over 4
+
+=item Foreground Color
+
+C<black>, C<red>, C<green>, C<yellow>,
+C<blue>, C<magenta>, C<cyan>, C<white>,
+
+Prefix with C<bright_> for high-intensity or bold foreground.
+
+=item Foreground Grey
+
+C<grey0>, ..., C<grey23>
+
+=item Background Color
+
+C<on_black>, C<on_red>, C<on_green>, C<on_yellow>,
+S<C<on_blue>>, S<C<on_magenta>>, S<C<on_cyan>>, S<C<on_white>>
+
+Replace C<on_> with C<on_bright_> for high-intensity or bold background.
+
+=item Background Grey
+
+C<on_grey0>, ..., C<on_grey23>
+
+=item Text Attribute
+
+C<bold>, C<dark>, C<italic>, C<underline>, C<reverse>
+
+=back
+
+
+=head1 EXIT STATUS
+
+The exit status is 0 if at least one I<ID> matched I<REGEXP>,
+1 if no I<ID> matched I<REGEXP>, and 2 if an error occurred.
+
+
+=head1 SEE ALSO
+
+B<grep>(1), B<printf>(3), B<Term::ANSIColor>(pm)
+
+
+=cut
+%</typog-grep-documentation>
+% \fi
+%
+%
+%
+\endinput
+%
+%
+%
+%%% Local Variables:
+%%% compile-command: "latex typog.dtx"
+%%% fill-column: 96
+%%% End:
diff --git a/macros/latex/contrib/typog/typog.ins b/macros/latex/contrib/typog/typog.ins
new file mode 100644
index 0000000000..06378d86bb
--- /dev/null
+++ b/macros/latex/contrib/typog/typog.ins
@@ -0,0 +1,74 @@
+%% Copyright (C) 2024 by Ch. L. Spiel
+%%
+%% This work may be distributed and/or modified under the conditions
+%% of the LaTeX Project Public License, either version 1.3 of this
+%% license or (at your option) any later version. The latest version
+%% of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2003/12/01 or later.
+
+
+\input docstrip
+
+
+\keepsilent
+\askforoverwritefalse
+
+
+\preamble
+
+This is a generated file.
+
+Copyright (C) 2024 by Ch. L. Spiel
+
+This work may be distributed and/or modified under the conditions
+of the LaTeX Project Public License, either version 1.3 of this
+license or (at your option) any later version. The latest version
+of this license is in
+ http://www.latex-project.org/lppl.txt
+and version 1.3 or later is part of all distributions of LaTeX
+version 2003/12/01 or later.
+
+This work has the LPPL maintenance status `maintained'.
+
+The Current Maintainer of this work is Ch. L. Spiel.
+
+This work consists of the files typog.dtx and typog.ins
+and the derived files typog.sty, slant-angle.mp,
+crooked-paragraphs.mp, smooth-parshapes.mp, title.mp,
+typog-example.tex, typog-nomt.tex, typog-grep.pl,
+typog-grep.pod, and teximan2latex.sed.
+
+
+\endpreamble
+
+
+\edef\source{\jobname.dtx}
+
+\generate{\file{typog.sty}{\from{\source}{package}}
+ \file{typog-example.tex}{\from{\source}{example}}
+ \file{typog-nomt.tex}{\from{\source}{nomicrotype}}
+ \file{typog.ist}{\from{\source}{index-style}}}
+
+
+\nopostamble
+\generate{\file{title.mp}{\from{\source}{title}}
+ \file{slant-angle.mp}{\from{\source}{slantangle}}
+ \file{crooked-paragraphs.mp}{\from{\source}{crookedparagraphs}}
+ \file{smooth-parshapes.mp}{\from{\source}{smoothparshapes}}}
+
+
+\nopreamble
+\generate{\file{teximan2latex.sed}{\from{\source}{teximan2latex}}
+ \file{typog-grep.pl}{\from{\source}{typog-grep}}
+ \file{typog-grep.pod}{\from{\source}{typog-grep-documentation}}}
+
+
+\endbatchfile
+
+
+%% Local Variables:
+%% compile-command: "latex typog.ins"
+%% mode: latex
+%% End:
diff --git a/macros/latex/contrib/univie-ling/README b/macros/latex/contrib/univie-ling/README
index 57de3e566b..6d589988de 100644
--- a/macros/latex/contrib/univie-ling/README
+++ b/macros/latex/contrib/univie-ling/README
@@ -97,6 +97,12 @@ also have a look at the example files.
== CHANGES ==
+V. 2.5 (2024-05-09):
+ - univie-ling-paper: implement "short" option.
+ - univie-ling-poster: Add \restspace accessibility helper function.
+ - univie-ling-handout: implement \hoDate.
+ - univie-ling-wlg: upgrade editorial structure.
+
V. 2.4 (2023-03-31):
- univie-ling-paper: fix default ps and se text type.
diff --git a/macros/latex/contrib/univie-ling/biblatex-univie-ling/univie-ling.bbx b/macros/latex/contrib/univie-ling/biblatex-univie-ling/univie-ling.bbx
index 9dffd636c5..60172f7ebd 100644
--- a/macros/latex/contrib/univie-ling/biblatex-univie-ling/univie-ling.bbx
+++ b/macros/latex/contrib/univie-ling/biblatex-univie-ling/univie-ling.bbx
@@ -38,7 +38,7 @@
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\ProvidesFile{univie-ling.bbx}[2023/03/31 v.2.4 biblatex bibliography style]
+\ProvidesFile{univie-ling.bbx}[2024/05/09 v.2.5 biblatex bibliography style]
% Load base style (authoryear-comp)
\RequireBibliographyStyle{authoryear-comp}
diff --git a/macros/latex/contrib/univie-ling/biblatex-univie-ling/univie-ling.cbx b/macros/latex/contrib/univie-ling/biblatex-univie-ling/univie-ling.cbx
index a1617d71af..837f66d53d 100644
--- a/macros/latex/contrib/univie-ling/biblatex-univie-ling/univie-ling.cbx
+++ b/macros/latex/contrib/univie-ling/biblatex-univie-ling/univie-ling.cbx
@@ -36,7 +36,7 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\ProvidesFile{univie-ling.cbx}[2023/03/31 v.2.4 biblatex citation style]
+\ProvidesFile{univie-ling.cbx}[2024/05/09 v.2.5 biblatex citation style]
\RequireCitationStyle{authoryear-comp}
diff --git a/macros/latex/contrib/univie-ling/doc/templates/template-expose-deutsch.pdf b/macros/latex/contrib/univie-ling/doc/templates/template-expose-deutsch.pdf
index 16d3622e11..022d7b0ffb 100644
--- a/macros/latex/contrib/univie-ling/doc/templates/template-expose-deutsch.pdf
+++ b/macros/latex/contrib/univie-ling/doc/templates/template-expose-deutsch.pdf
Binary files differ
diff --git a/macros/latex/contrib/univie-ling/doc/templates/template-expose-english.pdf b/macros/latex/contrib/univie-ling/doc/templates/template-expose-english.pdf
index 0fc933eab6..bd912dfba4 100644
--- a/macros/latex/contrib/univie-ling/doc/templates/template-expose-english.pdf
+++ b/macros/latex/contrib/univie-ling/doc/templates/template-expose-english.pdf
Binary files differ
diff --git a/macros/latex/contrib/univie-ling/doc/templates/template-handout-deutsch.pdf b/macros/latex/contrib/univie-ling/doc/templates/template-handout-deutsch.pdf
index 51cdff71d1..bab72dbf24 100644
--- a/macros/latex/contrib/univie-ling/doc/templates/template-handout-deutsch.pdf
+++ b/macros/latex/contrib/univie-ling/doc/templates/template-handout-deutsch.pdf
Binary files differ
diff --git a/macros/latex/contrib/univie-ling/doc/templates/template-handout-deutsch.tex b/macros/latex/contrib/univie-ling/doc/templates/template-handout-deutsch.tex
index 1d4a093335..da696a8fe1 100644
--- a/macros/latex/contrib/univie-ling/doc/templates/template-handout-deutsch.tex
+++ b/macros/latex/contrib/univie-ling/doc/templates/template-handout-deutsch.tex
@@ -7,6 +7,7 @@
%\hoEventLoc{Andere Uni}
\hoTitle{Titel des Handouts/Referats}
\hoSubtitle{Untertitel}
+\hoDate{Datum der Präsentation}
% Vortragende
\hoName{Mein Name \and Zweiter Name}
diff --git a/macros/latex/contrib/univie-ling/doc/templates/template-handout-english.pdf b/macros/latex/contrib/univie-ling/doc/templates/template-handout-english.pdf
index df801a2e82..c7add82055 100644
--- a/macros/latex/contrib/univie-ling/doc/templates/template-handout-english.pdf
+++ b/macros/latex/contrib/univie-ling/doc/templates/template-handout-english.pdf
Binary files differ
diff --git a/macros/latex/contrib/univie-ling/doc/templates/template-handout-english.tex b/macros/latex/contrib/univie-ling/doc/templates/template-handout-english.tex
index ed375e7a9a..0c4ac2bb6c 100644
--- a/macros/latex/contrib/univie-ling/doc/templates/template-handout-english.tex
+++ b/macros/latex/contrib/univie-ling/doc/templates/template-handout-english.tex
@@ -7,6 +7,7 @@
%\hoEventLoc{Other University}
\hoTitle{Title of the Handout/Presentation}
\hoSubtitle{Subtitle}
+\hoDate{Date of the presentation}
% Presenters
\hoName{My Name \and Second Name}
diff --git a/macros/latex/contrib/univie-ling/doc/templates/template-paper-deutsch.pdf b/macros/latex/contrib/univie-ling/doc/templates/template-paper-deutsch.pdf
index 414979d08c..f701cadb32 100644
--- a/macros/latex/contrib/univie-ling/doc/templates/template-paper-deutsch.pdf
+++ b/macros/latex/contrib/univie-ling/doc/templates/template-paper-deutsch.pdf
Binary files differ
diff --git a/macros/latex/contrib/univie-ling/doc/templates/template-paper-english.pdf b/macros/latex/contrib/univie-ling/doc/templates/template-paper-english.pdf
index 029263939b..9ca6f625cc 100644
--- a/macros/latex/contrib/univie-ling/doc/templates/template-paper-english.pdf
+++ b/macros/latex/contrib/univie-ling/doc/templates/template-paper-english.pdf
Binary files differ
diff --git a/macros/latex/contrib/univie-ling/doc/templates/template-poster-deutsch.pdf b/macros/latex/contrib/univie-ling/doc/templates/template-poster-deutsch.pdf
index e0865ede5e..0ed4b5d7cc 100644
--- a/macros/latex/contrib/univie-ling/doc/templates/template-poster-deutsch.pdf
+++ b/macros/latex/contrib/univie-ling/doc/templates/template-poster-deutsch.pdf
Binary files differ
diff --git a/macros/latex/contrib/univie-ling/doc/templates/template-poster-english.pdf b/macros/latex/contrib/univie-ling/doc/templates/template-poster-english.pdf
index 2f58113d8b..ed8866e79a 100644
--- a/macros/latex/contrib/univie-ling/doc/templates/template-poster-english.pdf
+++ b/macros/latex/contrib/univie-ling/doc/templates/template-poster-english.pdf
Binary files differ
diff --git a/macros/latex/contrib/univie-ling/doc/templates/template-thesis-deutsch.pdf b/macros/latex/contrib/univie-ling/doc/templates/template-thesis-deutsch.pdf
index 374070d7af..38fe04556c 100644
--- a/macros/latex/contrib/univie-ling/doc/templates/template-thesis-deutsch.pdf
+++ b/macros/latex/contrib/univie-ling/doc/templates/template-thesis-deutsch.pdf
Binary files differ
diff --git a/macros/latex/contrib/univie-ling/doc/templates/template-thesis-english.pdf b/macros/latex/contrib/univie-ling/doc/templates/template-thesis-english.pdf
index 8d4b50cec6..eb482b6af2 100644
--- a/macros/latex/contrib/univie-ling/doc/templates/template-thesis-english.pdf
+++ b/macros/latex/contrib/univie-ling/doc/templates/template-thesis-english.pdf
Binary files differ
diff --git a/macros/latex/contrib/univie-ling/doc/templates/template-wlg-article.pdf b/macros/latex/contrib/univie-ling/doc/templates/template-wlg-article.pdf
index 5e7c3de1a0..ffaa154e26 100644
--- a/macros/latex/contrib/univie-ling/doc/templates/template-wlg-article.pdf
+++ b/macros/latex/contrib/univie-ling/doc/templates/template-wlg-article.pdf
Binary files differ
diff --git a/macros/latex/contrib/univie-ling/doc/templates/template-wlg-review.pdf b/macros/latex/contrib/univie-ling/doc/templates/template-wlg-review.pdf
index e71523f535..65411031cc 100644
--- a/macros/latex/contrib/univie-ling/doc/templates/template-wlg-review.pdf
+++ b/macros/latex/contrib/univie-ling/doc/templates/template-wlg-review.pdf
Binary files differ
diff --git a/macros/latex/contrib/univie-ling/doc/univie-ling-expose.pdf b/macros/latex/contrib/univie-ling/doc/univie-ling-expose.pdf
index b3fd65afb9..c4540b6210 100644
--- a/macros/latex/contrib/univie-ling/doc/univie-ling-expose.pdf
+++ b/macros/latex/contrib/univie-ling/doc/univie-ling-expose.pdf
Binary files differ
diff --git a/macros/latex/contrib/univie-ling/doc/univie-ling-expose.tex b/macros/latex/contrib/univie-ling/doc/univie-ling-expose.tex
index 28c602cf3f..9a9fc48809 100644
--- a/macros/latex/contrib/univie-ling/doc/univie-ling-expose.tex
+++ b/macros/latex/contrib/univie-ling/doc/univie-ling-expose.tex
@@ -63,7 +63,7 @@
\author{\texorpdfstring{Jrgen Spitzmller%
\thanks{Please report issues via \protect\url{https://github.com/jspitz/univie-ling}.}}{Jrgen Spitzmller}}
-\date{Version 2.4, 2023/03/31}
+\date{Version 2.5, 2024/05/09}
\maketitle
@@ -340,7 +340,11 @@ Templates are provided as well:
\section{Release History}
-\begin{description}
+\begin{itemize}
+ \item 2024/05/09 (v.\,2.5)
+ \begin{itemize}
+ \item No change to this class.
+ \end{itemize}
\item 2023/03/31 (v.\,2.4)
\begin{itemize}
\item No change to this class.
@@ -424,7 +428,7 @@ Templates are provided as well:
\item Extend documentation of bibliographic features.
\end{itemize}
\item 2016/01/29 (v.\,0.4) Initial release.
-\end{description}
+\end{itemize}
\begin{thebibliography}{1}
diff --git a/macros/latex/contrib/univie-ling/doc/univie-ling-handout.pdf b/macros/latex/contrib/univie-ling/doc/univie-ling-handout.pdf
index 662260a499..4576acd967 100644
--- a/macros/latex/contrib/univie-ling/doc/univie-ling-handout.pdf
+++ b/macros/latex/contrib/univie-ling/doc/univie-ling-handout.pdf
Binary files differ
diff --git a/macros/latex/contrib/univie-ling/doc/univie-ling-handout.tex b/macros/latex/contrib/univie-ling/doc/univie-ling-handout.tex
index c35b731e87..f67e3f1846 100644
--- a/macros/latex/contrib/univie-ling/doc/univie-ling-handout.tex
+++ b/macros/latex/contrib/univie-ling/doc/univie-ling-handout.tex
@@ -63,7 +63,7 @@
\author{\texorpdfstring{Jrgen Spitzmller%
\thanks{Please report issues via \protect\url{https://github.com/jspitz/univie-ling}.}}{Jrgen Spitzmller}}
-\date{Version 2.4, 2023/03/31}
+\date{Version 2.5, 2024/05/09}
\maketitle
@@ -285,6 +285,7 @@ For student handouts, it is advised to only use name and possibly e-mail.
\item{\jcsmacro{hoEventLoc[<header>]\{<event>\}}}: The location of the event you are presenting at.
Useful for conference presentations.
\item{\jcsmacro{hoEventDate[<header>]\{<event date>\}}}: The date of the event you are presenting at, or the term of your class.
+ \item{\jcsmacro{hoDate[<header>]\{<date>\}}}: The date of your presentation, which might be a subset of the event date only.
\end{description}
\section{Semantic markup}
@@ -385,6 +386,10 @@ Templates are provided as well:
\section{Release History}
\begin{description}
+ \item 2024/05/09 (v.\,2.5)
+ \begin{itemize}
+ \item Add \jcsmacro{hoDate}.
+ \end{itemize}
\item 2023/03/31 (v.\,2.4)
\begin{itemize}
\item No change to this class.
diff --git a/macros/latex/contrib/univie-ling/doc/univie-ling-paper.pdf b/macros/latex/contrib/univie-ling/doc/univie-ling-paper.pdf
index 60aeed4510..26aaaabcd5 100644
--- a/macros/latex/contrib/univie-ling/doc/univie-ling-paper.pdf
+++ b/macros/latex/contrib/univie-ling/doc/univie-ling-paper.pdf
Binary files differ
diff --git a/macros/latex/contrib/univie-ling/doc/univie-ling-paper.tex b/macros/latex/contrib/univie-ling/doc/univie-ling-paper.tex
index 7b78acec1b..773dfdb47d 100644
--- a/macros/latex/contrib/univie-ling/doc/univie-ling-paper.tex
+++ b/macros/latex/contrib/univie-ling/doc/univie-ling-paper.tex
@@ -63,7 +63,7 @@
\author{\texorpdfstring{Jrgen Spitzmller%
\thanks{Please report issues via \protect\url{https://github.com/jspitz/univie-ling}.}}{Jrgen Spitzmller}}
-\date{Version 2.4, 2023/03/31}
+\date{Version 2.5, 2024/05/09}
\maketitle
@@ -239,6 +239,14 @@ option (e.\,g., \joption{all=false,microtype=true} will switch off all packages
The option \joption{draftmark=true|false|firstpage} allows you to mark your document as a draft, which is indicated by a watermark (including the current date). This might be useful when sharing preliminary versions with your supervisor.
With \joption{draftmark=true}, this mark is printed on top of each page. With \joption{draftmark=firstpage}, the draft mark appears on the title page only.
+\subsection{Short papers}
+
+Via the option \joption{short=true|false}, \uvlt\ provides a layout setting which is more suitable for short written papers such as home exams
+or short concepts. As opposed to the default layout, this uses smaller font sizes and does not insert a title page. Rather than that, the
+title is printed on top of the first page, and the main text immediately follows.
+
+Such short papers usually do not have a table of contents or a declaration, but you can use it if you want.
+
\subsection{Further options}
The class builds on \textsf{scrartcl} (KOMA article), which provides many more options to tweak the appearance of your document. You can use
@@ -256,7 +264,7 @@ given that you have specified the following data in the preamble.
\setlength\itemsep{0pt}
\item{\jcsmacro{author\{<name>\}}}: Name(s) of the paper's author(s). Separate multiple authors by \jcsmacro{and}.
\item{\jcsmacro{studienkennzahl\{<code>\}}}: The degree programme code (\emph{Studienkennzahl}) as it appears on
- the student record sheet, e.\,g. \emph{A\,792\,327}.
+ the student record sheet, e.\,g. \emph{A\,792\,327}. Note that this is not output with \joption{short=true}.
\item{\jcsmacro{matrikelnummer\{<registration number>\}}}: Your registration number (\emph{Matrikelnummer}). In case of multiple authors, separate the codes by \jcsmacro{and}.
\end{description}
@@ -374,6 +382,10 @@ Templates are provided as well:
\section{Release History}
\begin{itemize}
+ \item 2024/05/09 (v.\,2.5)
+ \begin{itemize}
+ \item Implement \joption{short} option.
+ \end{itemize}
\item 2023/03/31 (v.\,2.4)
\begin{itemize}
\item Fix default \joption{ps} and \joption{se} text type.
diff --git a/macros/latex/contrib/univie-ling/doc/univie-ling-poster.pdf b/macros/latex/contrib/univie-ling/doc/univie-ling-poster.pdf
index fc8b6663e6..391bec0c00 100644
--- a/macros/latex/contrib/univie-ling/doc/univie-ling-poster.pdf
+++ b/macros/latex/contrib/univie-ling/doc/univie-ling-poster.pdf
Binary files differ
diff --git a/macros/latex/contrib/univie-ling/doc/univie-ling-poster.tex b/macros/latex/contrib/univie-ling/doc/univie-ling-poster.tex
index 4c78545c2d..dcd04b3338 100644
--- a/macros/latex/contrib/univie-ling/doc/univie-ling-poster.tex
+++ b/macros/latex/contrib/univie-ling/doc/univie-ling-poster.tex
@@ -65,7 +65,7 @@
\author{\texorpdfstring{Jrgen Spitzmller%
\thanks{Please report issues via \protect\url{https://github.com/jspitz/univie-ling}.}}{Jrgen Spitzmller}}
-\date{Version 2.4, 2023/03/31}
+\date{Version 2.5, 2024/05/09}
\maketitle
@@ -110,6 +110,7 @@ The following class and packages are required and loaded by \uvlt:
\item \textsf{l3keys}: Key-value interface for class options.
\item \textsf{translator}: Localization machinery.
\item \textsf{url}: Support for typesetting URLs.
+ \item \textsf{tikzpagenodes}: Page measuring (for accessibility).
\end{itemize}
The following packages are required for specific features and loaded by default. However, the loading can be individually and generally omitted (see sec.~\ref{coptions}):
\begin{itemize}
@@ -481,6 +482,52 @@ Please refer to the comprehensive beamer manual \cite{beamer} for information.
Please also refer to the template files included in the package for some further usage instructions and hints.
+
+\subsection{Accessibility helpers}
+
+For visually impaired users, setting up posters is quite a challenge, as \LaTeX\ does not really give you good feedback
+on whether the poster is filled evenly, or even in the crucial case if the text overruns the poster page.
+In the latter case, you could watch out for \emph{overfull vbox} warnings, but these are quite ambiguous.
+
+To enhance accessibility in this regard, \uvlt\ provides the following helper function:
+\begin{description}
+ \item{\jcsmacro{restspace[<label>]}}
+\end{description}
+%
+If you insert this to your poster, it will tell you through a package warning in the log file how many normal lines
+there are still available (in the current column, if you are using columns) after the point where the command
+has been inserted:
+\begin{quote}
+ \enquote{Package univie-ling-poster warning: Remaining space: <n> normal lines}
+ (with <n> being the actual number of lines)
+\end{quote}
+%
+With \emph{normal lines}, the warning refers to lines in the normal font size of running text.
+In the warning, the package also provides you with its own evaluation on how to deal with the result.
+Either of these four verdicts will be given:
+\begin{enumerate}
+ \item \enquote{Good, still space left}: poster/column is not full yet, you can safely add more text
+ (more than one normal line left).
+ \item \enquote{All good, but this is full now}: poster/column is filled, and not too crowded,
+ but you should not add more text (one line more will make it look less good).
+ \item \enquote{It is still OK, but the poster is quite full}: The content already touches the footer line.
+ If you don't have space available in other columns and need all text, you can keep this, but it will
+ probably look a bit crowded. So if you can, re-arrange (take out at least one line).
+ \item \enquote{Text exceeds poster! You need to re-arrange the content}:
+ If you get this warning, text runs out of the poster page, and you definitely need to fix that.
+\end{enumerate}
+%
+The optional argument of the macro allows you to set an arbitrary label which is used in the warning.
+This might be helpful if you use multiple \verb|\restspace| macros (e.\,g., in multiple columns).
+So if you insert, for instance \verb|\restspace[1]|, the warning will read
+\enquote{Remaining space (1): <n> normal lines}.
+
+Note that \verb|\restspace| should always be the last element in the column or the text. This means that if
+you are using boxes, set the macro \emph{after} the end of the box, not within the box.
+
+Note further that the \verb|\restspace| macro does not print anything on the poster itself, so you can safely keep
+them in the published version.
+
\subsection{\LyX\ layouts and templates}
A layout for \LyX\footnote{See \url{https://www.lyx.org}.}\ can be retrieved from \url{https://github.com/jspitz/univie-ling/raw/master/lyx/layouts/univie-ling-poster.layout}.
@@ -498,6 +545,10 @@ Templates are provided as well:
\section{Release History}
\begin{description}
+ \item 2024/05/09 (v.\,2.5)
+ \begin{itemize}
+ \item Add \verb|\restspace| accessibility helper function.
+ \end{itemize}
\item 2023/03/31 (v.\,2.4)
\begin{itemize}
\item No change to this class.
diff --git a/macros/latex/contrib/univie-ling/doc/univie-ling-thesis.pdf b/macros/latex/contrib/univie-ling/doc/univie-ling-thesis.pdf
index e91bb21ee7..199dd750a3 100644
--- a/macros/latex/contrib/univie-ling/doc/univie-ling-thesis.pdf
+++ b/macros/latex/contrib/univie-ling/doc/univie-ling-thesis.pdf
Binary files differ
diff --git a/macros/latex/contrib/univie-ling/doc/univie-ling-thesis.tex b/macros/latex/contrib/univie-ling/doc/univie-ling-thesis.tex
index 5680490e7e..9b99e1db6c 100644
--- a/macros/latex/contrib/univie-ling/doc/univie-ling-thesis.tex
+++ b/macros/latex/contrib/univie-ling/doc/univie-ling-thesis.tex
@@ -59,7 +59,7 @@
\author{\texorpdfstring{Jrgen Spitzmller%
\thanks{Please report issues via \protect\url{https://github.com/jspitz/univie-ling}.}}{Jrgen Spitzmller}}
-\date{Version 2.4, 2023/03/31}
+\date{Version 2.5, 2024/05/09}
\maketitle
@@ -404,6 +404,10 @@ Templates are provided as well:
\section{Release History}
\begin{itemize}
+ \item 2024/05/09 (v.\,2.5)
+ \begin{itemize}
+ \item No change to this class.
+ \end{itemize}
\item 2023/01/26 (v.\,2.3)
\begin{itemize}
\item No change to this class.
diff --git a/macros/latex/contrib/univie-ling/doc/univie-ling-wlg.pdf b/macros/latex/contrib/univie-ling/doc/univie-ling-wlg.pdf
index 13c4c8e24d..c9d37e2221 100644
--- a/macros/latex/contrib/univie-ling/doc/univie-ling-wlg.pdf
+++ b/macros/latex/contrib/univie-ling/doc/univie-ling-wlg.pdf
Binary files differ
diff --git a/macros/latex/contrib/univie-ling/doc/univie-ling-wlg.tex b/macros/latex/contrib/univie-ling/doc/univie-ling-wlg.tex
index 5dedae5b72..96cf80916f 100644
--- a/macros/latex/contrib/univie-ling/doc/univie-ling-wlg.tex
+++ b/macros/latex/contrib/univie-ling/doc/univie-ling-wlg.tex
@@ -59,7 +59,7 @@
\author{\texorpdfstring{Jrgen Spitzmller%
\thanks{Please report issues via \protect\url{https://github.com/jspitz/univie-ling}.}}{Jrgen Spitzmller}}
-\date{Version 2.4, 2023/03/31}
+\date{Version 2.5, 2024/05/09}
\maketitle
@@ -165,14 +165,12 @@ Data for a particular issue can be set via:
\item{\jcsmacro{issuesubtitle\{<subtitle>\}}} Set subtitle of special issue
\end{description}
%
-If needed, the editorial board (as printed in the imprint) can be adapted for a particular issue via:
+If needed, the editorial (as printed in the imprint) can be adapted for a particular issue via:
\begin{description}
\setlength\itemsep{0pt}
- \item{\jcsmacro{edboardGL\{<name>\}}} Set editorial board member(s) for General Linguistics
- \item{\jcsmacro{edboardAL\{<name>\}}} Set editorial board member(s) for Applied Linguistics
- \item{\jcsmacro{edboardHL\{<name>\}}} Set editorial board member(s) for Historical Linguistics
- \item{\jcsmacro{techboard\{<name>\}}} Set technical board member(s)
+ \item{\jcsmacro{jeditors\{<name>\}}} Set editor(s) of the journal
+ \item{\jcsmacro{jedboard\{<name>\}}} Set editorial board member(s)
\end{description}
%
In general, the data for the editorial board should be set/changed in a local copy of the file
@@ -247,6 +245,10 @@ A template is provided as well: \url{https://github.com/jspitz/univie-ling/raw/m
\raggedright
\begin{itemize}
+ \item 2024/05/09 (v.\,2.5)
+ \begin{itemize}
+ \item Update the editorial structure.
+ \end{itemize}
\item 2023/03/31 (v.\,2.4)
\begin{itemize}
\item No change to this class.
diff --git a/macros/latex/contrib/univie-ling/doc/univie-ling.pdf b/macros/latex/contrib/univie-ling/doc/univie-ling.pdf
index 2452df688b..057fd5d0ff 100644
--- a/macros/latex/contrib/univie-ling/doc/univie-ling.pdf
+++ b/macros/latex/contrib/univie-ling/doc/univie-ling.pdf
Binary files differ
diff --git a/macros/latex/contrib/univie-ling/doc/univie-ling.tex b/macros/latex/contrib/univie-ling/doc/univie-ling.tex
index a3d9e05db9..6cc4ac25f8 100644
--- a/macros/latex/contrib/univie-ling/doc/univie-ling.tex
+++ b/macros/latex/contrib/univie-ling/doc/univie-ling.tex
@@ -42,7 +42,7 @@
\author{\texorpdfstring{Jrgen Spitzmller%
\thanks{Please report issues via \protect\url{https://github.com/jspitz/univie-ling}.}}{Jrgen Spitzmller}}
-\date{Version 2.4, 2023/03/31}
+\date{Version 2.5, 2024/05/09}
\maketitle
diff --git a/macros/latex/contrib/univie-ling/tex/univie-ling-expose.cls b/macros/latex/contrib/univie-ling/tex/univie-ling-expose.cls
index c372c01a38..29576a930f 100644
--- a/macros/latex/contrib/univie-ling/tex/univie-ling-expose.cls
+++ b/macros/latex/contrib/univie-ling/tex/univie-ling-expose.cls
@@ -32,8 +32,8 @@
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{univie-ling-expose}[2023/03/31 v.2.4 Univie Linguistic Exposes (JSp)]
+\NeedsTeXFormat{LaTeX2e}[2022/06/01]
+\ProvidesPackage{univie-ling-expose}[2024/05/09 v.2.5 Univie Linguistic Exposes (JSp)]
%% ============================================================
@@ -54,10 +54,8 @@
\newif\if@uve@usefontenc\@uve@usefontenctrue
\def\uve@fontenc{T1}
-% We use l3keys here since (1) LaTeX2e keys are rather
-% new and (2) do not provide for choice keys yet.
-\ExplSyntaxOn
-\keys_define:nn { uve }
+% Define keys and values
+\DeclareKeys[uve]
{
% all=<true|false>
% Load all (most) packages
@@ -167,17 +165,9 @@
\@uve@otffontsfalse
},
}
-\ExplSyntaxOff
% Process
-
-\IfFormatAtLeastTF{2022-06-01}
-{
- \ProcessKeyOptions[uve]
-}{
- \RequirePackage{l3keys2e}
- \ProcessKeysOptions{uve}
-}
+\ProcessKeyOptions[uve]
%% ============================================================
diff --git a/macros/latex/contrib/univie-ling/tex/univie-ling-handout.cls b/macros/latex/contrib/univie-ling/tex/univie-ling-handout.cls
index 7c7a8ff1da..22a451329d 100644
--- a/macros/latex/contrib/univie-ling/tex/univie-ling-handout.cls
+++ b/macros/latex/contrib/univie-ling/tex/univie-ling-handout.cls
@@ -34,8 +34,8 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\NeedsTeXFormat{LaTeX2e}[1997/06/01]
-\ProvidesClass{univie-ling-handout}[2023/03/31 v.2.4 Univie Ling handout class (JSp)]
+\NeedsTeXFormat{LaTeX2e}[2022/06/01]
+\ProvidesClass{univie-ling-handout}[2024/05/09 v.2.5 Univie Ling handout class (JSp)]
%% ============================================================
%% CLASS OPTIONS
@@ -107,10 +107,8 @@
}
\uvh@cd@german
-% We use l3keys here since (1) LaTeX2e keys are rather
-% new and (2) do not provide for choice keys yet.
-\ExplSyntaxOn
-\keys_define:nn { uvh }
+% Define keys and values
+\DeclareKeys[uvh]
{
% all=<true|false>
% Load all (most) packages
@@ -286,17 +284,9 @@
\@uvh@otffontsfalse
},
}
-\ExplSyntaxOff
% Process
-
-\IfFormatAtLeastTF{2022-06-01}
-{
- \ProcessKeyOptions[uvh]
-}{
- \RequirePackage{l3keys2e}
- \ProcessKeysOptions{uvh}
-}
+\ProcessKeyOptions[uvh]
%% ============================================================
@@ -386,11 +376,13 @@
\newlength\beforeevent
\newlength\beforetitle
\newlength\beforesubtitle
+\newlength\beforedate
\newlength\aftertitle
\setlength\beforetitling{18pt}
\setlength\beforeevent{6pt}
\setlength\beforesubtitle{6pt}
\setlength\beforetitle{6pt}
+\setlength\beforedate{8pt}
\setlength\aftertitle{18pt}
% Boxes
@@ -561,6 +553,15 @@
\def\uvh@eventdate{#2}
}
+% f.) Presentation date
+\def\uvh@date{}
+\def\uvh@date@header{}
+\newcommand*{\hoDate}[2][\@empty]{%
+ \ifx\@empty#1\def\uvh@date@header{#2}
+ \else\def\uvh@date@header{#1}\fi
+ \def\uvh@date{#2}
+}
+
% The maketitle routine
\renewcommand\maketitle{%
\newif\ifuvh@eventline\uvh@eventlinefalse%
@@ -592,7 +593,7 @@
\ifx\uvh@subtitle\empty%
\else
\vspace{\beforesubtitle}\noindent\bgroup\raggedright\uvh@font@subtitle\uvh@subtitle\par\egroup%
- \fi
+ \fi%
\else%
\vspace{.15\baselineskip}%
\begin{minipage}{\textwidth}
@@ -605,7 +606,7 @@
\fi
\end{tabularx}%
\end{minipage}%
- \fi
+ \fi%
\@ifundefined{hypersetup}{}{%
\hypersetup{pdftitle=\ifx\uvh@titleprefix\empty\else\uvh@titleprefix~\fi\uvh@title,
pdfauthor=\uvh@name,
@@ -616,6 +617,11 @@
\else%
\vspace{\beforesubtitle}\bgroup\noindent\raggedright\uvh@font@subtitle\uvh@widesubtitle\par\egroup%
\fi%
+ \ifx\uvh@date\empty%
+ \else%
+ \vspace{\beforedate}%
+ \bgroup\noindent\uvh@font@eventlocdate\uvh@date\egroup%
+ \fi%
\vspace{\aftertitle}%
\@afterindentfalse\@afterheading%
}
@@ -710,19 +716,20 @@
\def\ps@headings{%
\let\uvh@save@and\and%
- \def\and{$\cdot$\ }%
+ \def\uvh@header@and{$\cdot$\ }%
\if@uvh@pplogo\sbox{\uvh@box@logo}{\uvh@printsmalllogo}\fi
\def\uvh@thelogo{\parbox{90mm}{\usebox{\uvh@box@logo}}}
\headheight30mm\headsep2.5mm\footskip8mm
\def\titleline{\ifx\uvh@title@header\empty\else\uvh@font@headertitle%
\ifx\uvh@titleprefix\empty\else\uvh@titleprefix~\fi%
- \uvh@title@header\linebreak\fi}%
+ \uvh@title@header\ifx\uvh@date@header\empty\else\ (\uvh@date@header)\linebreak\fi}%
\ifx\uvh@eventlocation@header\empty\ifx\uvh@eventdate@header\empty\@uvh@noeventtrue\fi\fi%
\def\eventline{%
\uvh@font@header\uvh@event@header\ifx\uvh@eventdate@header\empty\else\if@uvh@breakevent\linebreak\else\ \fi%
\if@uvh@noevent\else(\ifx\uvh@eventlocation@header\empty\else\uvh@eventlocation@header, \fi\uvh@eventdate@header)\fi\linebreak\fi%
}
\def\@oddhead{%
+ \let\and\uvh@header@and%
\unitlength1mm
\hspace{\headeroffset}
\begin{picture}(0,0)
@@ -747,12 +754,12 @@
}%
}
\end{picture}
+ \let\and\uvh@save@and%
\hfill%
}
\def\@oddfoot{\hfill\uvh@font@footer\raggedright\uvh@pageprefix~\thepage\if@uvh@lastpage /\pageref{LastPage}\fi}
\def\@evenhead{\@oddhead}
\def\@evenfoot{\@oddfoot}
- \let\and\uvh@save@and%
}
diff --git a/macros/latex/contrib/univie-ling/tex/univie-ling-paper.cls b/macros/latex/contrib/univie-ling/tex/univie-ling-paper.cls
index 289315beb8..4ee6eaf8f8 100644
--- a/macros/latex/contrib/univie-ling/tex/univie-ling-paper.cls
+++ b/macros/latex/contrib/univie-ling/tex/univie-ling-paper.cls
@@ -31,8 +31,8 @@
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{univie-ling-paper}[2023/03/31 v.2.4 Univie Linguistic Papers (JSp)]
+\NeedsTeXFormat{LaTeX2e}[2022/06/01]
+\ProvidesPackage{univie-ling-paper}[2024/05/09 v.2.5 Univie Linguistic Papers (JSp)]
%% ============================================================
@@ -51,13 +51,12 @@
\newif\if@uvp@polyglossia\@uvp@polyglossiafalse
\newif\if@uvp@psfonts\@uvp@psfontstrue
\newif\if@uvp@otffonts\@uvp@otffontsfalse
+\newif\if@uvp@short\@uvp@shortfalse
\newif\if@uvp@usefontenc\@uvp@usefontenctrue
\def\uvp@fontenc{T1}
-% We use l3keys here since (1) LaTeX2e keys are rather
-% new and (2) do not provide for choice keys yet.
-\ExplSyntaxOn
-\keys_define:nn { uvp }
+% Define keys and values
+\DeclareKeys[uvp]
{
% all=<true|false>
% Load all (most) packages
@@ -166,18 +165,14 @@
{ \@uvp@psfontsfalse
\@uvp@otffontsfalse
},
+ % short=<true|false>
+ % short paper
+ short.legacy_if_set:n = @uvp@short,
+ short.usage:n = preamble,
}
-\ExplSyntaxOff
% Process
-
-\IfFormatAtLeastTF{2022-06-01}
-{
- \ProcessKeyOptions[uvp]
-}{
- \RequirePackage{l3keys2e}
- \ProcessKeysOptions{uvp}
-}
+\ProcessKeyOptions[uvp]
%% ============================================================
@@ -195,6 +190,12 @@
sectionentrydots=true
]{scrartcl}[2003/04/22]
+\if@uvp@short
+ \KOMAoptions{fontsize=11pt,
+ headings=small,
+ titlepage=false}
+\fi
+
%% ============================================================
%% LOCALIZATION:
@@ -218,6 +219,8 @@
\deftranslation[to=English]{example}{example}
\deftranslation[to=German]{matnr}{Matrikelnummer}
\deftranslation[to=English]{matnr}{Matrikelnummer}
+\deftranslation[to=German]{instructor}{Leitung}
+\deftranslation[to=English]{instructor}{Instructor}
\deftranslation[to=German]{stkz}{Studienkennzahl}
\deftranslation[to=English]{stkz}{Studienkennzahl}
\deftranslation[to=German]{erkl}{Erkl\"arung}
@@ -290,6 +293,12 @@ This includes all drawings, sketches, graphics and internet sources.}
\setkomafont{subtitle}{\normalfont\fontsize{12}{14pt}\sffamily}
\setkomafont{date}{\normalfont\fontsize{10}{12pt}\mdseries\sffamily}
\newkomafont{course}{\normalfont\mdseries\sffamily}
+% short paper settings
+\newkomafont{spauthor}{\normalfont\mdseries}
+\newkomafont{sptitle}{\Large\bfseries}
+\newkomafont{spsubtitle}{\large\bfseries}
+\newkomafont{spdate}{\normalfont\normalsize\mdseries}
+\newkomafont{spcourse}{\footnotesize\mdseries\sffamily}
%% ============================================================
@@ -436,6 +445,35 @@ This includes all drawings, sketches, graphics and internet sources.}
\begin{tabular}[t]{c}%
}%
\fi
+ \if@uvp@short
+ \bgroup
+ \let\footnote\thanks
+ \renewcommand*\thefootnote{\@fnsymbol\c@footnote}%
+ \let\@oldmakefnmark\@makefnmark
+ \renewcommand*{\@makefnmark}{\rlap\@oldmakefnmark}%
+ \setparsizes{\z@}{\z@}{\z@\@plus 1fil}\par@updaterelative
+ \parbox[b]{11.5cm}{%
+ \ifx\@course\@empty\else%
+ \usekomafont{spcourse}{\lectypeverb\ \emph{\@course} (\lecsemshort~\@semester)}%
+ \ifx\@instructor\@empty\else\newline\fi%
+ \fi%
+ \ifx\@instructor\@empty\else%
+ \usekomafont{spcourse}{\translate{instructor}:~\@instructor}\fi
+ }\hfill
+ \parbox[b]{3cm}{\includegraphics[width=3cm]{univielogo-sw}}\par
+ \vskip 3em
+ \def\and{\leavevmode\unskip\slash}%
+ {\usekomafont{spauthor}{\@author\ifx\@matrikelnr\@empty\else\ (\translate{matnr}:~\@matrikelnr)\fi\par\vskip .5em}}%
+ \ifx\@title\@empty\else
+ {\usekomafont{sptitle}{\@title%
+ \ifx\@subtitle\@empty\else\\\usekomafont{spsubtitle}{\@subtitle}\fi\par}}%
+ \fi
+ \vskip .5em
+ {\usekomafont{spdate}{\ifx\@texttype\@empty\else\@texttype, \fi\@date\par%
+ \vspace{.5\baselineskip}}\noindent}%
+ \@thanks\let\@thanks\@empty
+ \egroup
+ \else
\begin{titlepage}
\sffamily%
\setcounter{page}{%
@@ -569,6 +607,7 @@ This includes all drawings, sketches, graphics and internet sources.}
\fi
\ifx\titlepage@restore\relax\else\clearpage\titlepage@restore\fi
\end{titlepage}
+ \fi% not \if@uvp@short
\setcounter{footnote}{0}%
\expandafter\ifnum \csname scr@v@3.12\endcsname>\scr@compatibility\relax
\let\thanks\relax
@@ -607,7 +646,7 @@ This includes all drawings, sketches, graphics and internet sources.}
\begin{tabular}[t]{c}%
\hline
}%
-\clearpage
+\if@uvp@short\else\clearpage\fi
\section*{\translate{erkl}}
\if@uvp@multiauthors
@@ -636,7 +675,7 @@ This includes all drawings, sketches, graphics and internet sources.}
\@author
\end{tabular}\par
\egroup
-\clearpage
+\if@uvp@short\else\clearpage\fi
\global\let\and\relax
}
diff --git a/macros/latex/contrib/univie-ling/tex/univie-ling-poster.cls b/macros/latex/contrib/univie-ling/tex/univie-ling-poster.cls
index bb54e614ae..d2b68940af 100644
--- a/macros/latex/contrib/univie-ling/tex/univie-ling-poster.cls
+++ b/macros/latex/contrib/univie-ling/tex/univie-ling-poster.cls
@@ -33,8 +33,8 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\NeedsTeXFormat{LaTeX2e}[1997/06/01]
-\ProvidesClass{univie-ling-poster}[2023/03/31 v.2.4 Univie Ling poster class (JSp)]
+\NeedsTeXFormat{LaTeX2e}[2022/06/01]
+\ProvidesClass{univie-ling-poster}[2024/05/09 v.2.5 Univie Ling poster class (JSp)]
%% ============================================================
%% CLASS OPTIONS
@@ -76,10 +76,8 @@
}
\uvpt@cd@german
-% We use l3keys here since (1) LaTeX2e keys are rather
-% new and (2) do not provide for choice keys yet.
-\ExplSyntaxOn
-\keys_define:nn { uvpt }
+% Define keys and values
+\DeclareKeys[uvpt]
{
% all=<true|false>
% Load all (most) packages
@@ -223,17 +221,9 @@
\@uvpt@otffontsfalse
},
}
-\ExplSyntaxOff
% Process
-
-\IfFormatAtLeastTF{2022-06-01}
-{
- \ProcessKeyOptions[uvpt]
-}{
- \RequirePackage{l3keys2e}
- \ProcessKeysOptions{uvpt}
-}
+\ProcessKeyOptions[uvpt]
%% ============================================================
@@ -942,13 +932,61 @@
\fi
%% ============================================================
-%% Semantic markup
+%% SEMANTIC MARKUP:
%% ============================================================
\newcommand\Expression[1]{\textit{#1}}
\newcommand\Concept[1]{\textsc{#1}}
\newcommand\Meaning[1]{\enquote*{#1}}
+%% ============================================================
+%% ACCESSIBILITY:
+%% ============================================================
+
+% Helper function that reports on the remaining space on the poster
+% as of the point where the command has been entered
+\RequirePackage{tikzpagenodes}
+\usetikzlibrary{calc}
+
+\newcommand*\restspace[1][]{%
+ \begin{tikzpicture}[overlay,remember picture]
+ \node (cp) at (current page text area.south west) {};%
+ \path let \p0 = (0,0), \p1 = (cp.north) in node [inner sep=0pt,outer sep=0pt,anchor=south] at (\x1,\y1)%
+ {%
+ \pgfmathsetmacro\restheight{((\y0-\y1) / \baselineskip) + 1}%
+ \pgfkeys{/pgf/number format/precision=1}%
+ \pgfmathroundto{\restheight}%
+ \ifx#1\empty%
+ \edef\univie@space@warning{Remaining space: \pgfmathresult\space normal lines}%
+ \else%
+ \edef\univie@space@warning{Remaining space (#1): \pgfmathresult\space normal lines}%
+ \fi%
+ \let\firstpgfmathresult\pgfmathresult%
+ \pgfmathparse{\pgfmathresult > 0}%
+ \def\univie@tmpa{0}%
+ \ifx\pgfmathresult\univie@tmpa%
+ \pgfmathparse{\firstpgfmathresult > -1}%
+ \ifx\pgfmathresult\univie@tmpa%
+ \def\univie@space@expl{\univie@space@warning\MessageBreak
+ Text exceeds poster! You need to re-arrange the content.}%
+ \else%
+ \def\univie@space@expl{It is still OK, but the poster is quite full\MessageBreak
+ Better take out at least one line here.}%
+ \fi%
+ \else%
+ \pgfmathparse{\firstpgfmathresult > 1}%
+ \ifx\pgfmathresult\univie@tmpa%
+ \def\univie@space@expl{All good, but this is full now.}%
+ \else
+ \def\univie@space@expl{Good, still space left!}%
+ \fi
+ \fi%
+ \PackageWarning{univie-ling-poster}{\univie@space@warning\MessageBreak
+ \univie@space@expl}%
+ };%
+ \end{tikzpicture}%
+}
+
\endinput
%%
%% End of file `univie-ling-poster.cls'.
diff --git a/macros/latex/contrib/univie-ling/tex/univie-ling-thesis.cls b/macros/latex/contrib/univie-ling/tex/univie-ling-thesis.cls
index 87bd736880..bfe9204471 100644
--- a/macros/latex/contrib/univie-ling/tex/univie-ling-thesis.cls
+++ b/macros/latex/contrib/univie-ling/tex/univie-ling-thesis.cls
@@ -32,16 +32,14 @@
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{univie-ling-thesis}[2023/03/31 v.2.4 Univie Linguistic Theses (JSp)]
+\NeedsTeXFormat{LaTeX2e}[2022/06/01]
+\ProvidesPackage{univie-ling-thesis}[2024/05/09 v.2.5 Univie Linguistic Theses (JSp)]
%% ============================================================
%% CLASS OPTIONS
%% ============================================================
-\RequirePackage{xkeyval}
-
\newif\if@uvt@apa\@uvt@apafalse
\newif\if@uvt@biblatex\@uvt@biblatextrue
\newif\if@uvt@captionp\@uvt@captionptrue
@@ -59,10 +57,8 @@
\newif\if@uvt@usefontenc\@uvt@usefontenctrue
\def\uvt@fontenc{T1}
-% We use l3keys here since (1) LaTeX2e keys are rather
-% new and (2) do not provide for choice keys yet.
-\ExplSyntaxOn
-\keys_define:nn { uvt }
+% Define keys and values
+\DeclareKeys[uvt]
{
% all=<true|false>
% Load all (most) packages
@@ -180,17 +176,10 @@
\@uvt@otffontsfalse
},
}
-\ExplSyntaxOff
% Process
+\ProcessKeyOptions[uvt]
-\IfFormatAtLeastTF{2022-06-01}
-{
- \ProcessKeyOptions[uvt]
-}{
- \RequirePackage{l3keys2e}
- \ProcessKeysOptions{uvt}
-}
%% ============================================================
%% BASE CLASS:
diff --git a/macros/latex/contrib/univie-ling/tex/univie-ling-wlg.cfg b/macros/latex/contrib/univie-ling/tex/univie-ling-wlg.cfg
index 6698cb693e..2c00101fc9 100644
--- a/macros/latex/contrib/univie-ling/tex/univie-ling-wlg.cfg
+++ b/macros/latex/contrib/univie-ling/tex/univie-ling-wlg.cfg
@@ -3,14 +3,12 @@
%
%
-% Editorial Board
+% Editorial
%
-% General Linguistics
-\edboardGL{Markus P\"ochtrager}
-% Applied Linguistics
-\edboardAL{Mi-Cha Flubacher, Florian Grosser \& Carina Lozo}%
-% Historical Linguistics
-\edboardHL{Stefan Schumacher}
+% Editors
+\jeditors{Florian Grosser, Jonas Hassemer \& Carina Lozo}%
+% Editorial Board
+\jedboard{Markus P\"ochtrager \& Stefan Schumacher}
%
% Technical Board
diff --git a/macros/latex/contrib/univie-ling/tex/univie-ling-wlg.cls b/macros/latex/contrib/univie-ling/tex/univie-ling-wlg.cls
index d5a399fec8..0bdf4b8552 100644
--- a/macros/latex/contrib/univie-ling/tex/univie-ling-wlg.cls
+++ b/macros/latex/contrib/univie-ling/tex/univie-ling-wlg.cls
@@ -33,8 +33,8 @@
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{univie-ling-wlg}[2023/03/31 v.2.4 Univie WLG journal layout (JSp)]
+\NeedsTeXFormat{LaTeX2e}[2022/06/01]
+\ProvidesPackage{univie-ling-wlg}[2024/05/09 v.2.5 Univie WLG journal layout (JSp)]
%% ============================================================
@@ -50,10 +50,8 @@
\newif\if@wlg@specialprint\@wlg@specialprintfalse
\newif\if@wlg@review\@wlg@reviewfalse
-% We use l3keys here since (1) LaTeX2e keys are rather
-% new and (2) do not provide for choice keys yet.
-\ExplSyntaxOn
-\keys_define:nn { wlg }
+% Define keys and values
+\DeclareKeys[wlg]
{
% biblatex=<true|false>
% Load biblatex
@@ -125,16 +123,8 @@
% no val equals to true
draftmark .default:n = {true},
}
-\ExplSyntaxOff
-
-\IfFormatAtLeastTF{2022-06-01}
-{
- \ProcessKeyOptions[wlg]
-}{
- \RequirePackage{l3keys2e}
- \ProcessKeysOptions{wlg}
-}
+\ProcessKeyOptions[wlg]
%% ============================================================
@@ -164,6 +154,10 @@
%% CONFIGURATION:
%% ============================================================
+% Current structure
+\newcommand*\jedboard[1]{\def\wlg@jedboard{#1}}
+\newcommand*\jeditors[1]{\def\wlg@jeditors{#1}}
+% Old structure
\newcommand*\edboardAL[1]{\def\wlg@edboardAL{#1}}
\newcommand*\edboardGL[1]{\def\wlg@edboardGL{#1}}
\newcommand*\edboardHL[1]{\def\wlg@edboardHL{#1}}
@@ -293,6 +287,10 @@
\deftranslation[to=English]{univie-address}{Sensengasse 3a\\1090 Vienna\\Austria}
\deftranslation[to=German]{edboard}{Redaktion}
\deftranslation[to=English]{edboard}{Editorial board}
+\deftranslation[to=German]{jeditors}{Redaktion}
+\deftranslation[to=English]{jeditors}{Editors}
+\deftranslation[to=German]{jedboard}{Redaktioneller Beirat}
+\deftranslation[to=English]{jedboard}{Editorial board}
\deftranslation[to=German]{techboard}{Technische Redaktion}
\deftranslation[to=English]{techboard}{Technical editor}
\deftranslation[to=German]{contact}{Kontakt}
@@ -341,12 +339,13 @@
\translate{univie}, \translate{lingdep}\\
\translate{univie-address}
\vspace*{-.5em}
-\begin{labeling}{\textbf{\translate{edboard}:}}
+\begin{labeling}{\textbf{\translate{jedboard}:}}
\setlength\itemsep{0pt}
\setlength\parsep{0pt}
\setlength{\parskip}{0pt}
\def\wlg@lb{}
-\item[\textbf{\translate{edboard}:}]
+\ifcsname wlg@edboardAL\endcsname
+ \item[\textbf{\translate{edboard}:}]
\ifcsname wlg@edboardGL\endcsname
\wlg@edboardGL\ (\translate{general}),%
\def\wlg@lb{\\}%
@@ -358,6 +357,16 @@
\ifcsname wlg@edboardHL\endcsname
\wlg@lb\wlg@edboardHL\ (\translate{hist})
\fi
+\else
+ \ifcsname wlg@jeditors\endcsname
+ \item[\textbf{\translate{jeditors}:}]
+ \wlg@jeditors%
+ \fi
+ \ifcsname wlg@jedboard\endcsname
+ \item[\textbf{\translate{jedboard}:}]
+ \wlg@lb\wlg@jedboard%
+ \fi
+\fi
\ifcsname wlg@techboard\endcsname
\item[\textbf{\translate{techboard}:}] \wlg@techboard
\fi
diff --git a/macros/latex/contrib/ximera/LICENSE b/macros/latex/contrib/ximera/LICENSE
new file mode 100644
index 0000000000..4db9b5af29
--- /dev/null
+++ b/macros/latex/contrib/ximera/LICENSE
@@ -0,0 +1,415 @@
+The LaTeX Project Public License
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+LPPL Version 1.3c 2008-05-04
+
+Copyright 1999 2002-2008 LaTeX3 Project
+ Everyone is allowed to distribute verbatim copies of this
+ license document, but modification of it is not allowed.
+
+
+PREAMBLE
+========
+
+The LaTeX Project Public License (LPPL) is the primary license under
+which the LaTeX kernel and the base LaTeX packages are distributed.
+
+You may use this license for any work of which you hold the copyright
+and which you wish to distribute. This license may be particularly
+suitable if your work is TeX-related (such as a LaTeX package), but
+it is written in such a way that you can use it even if your work is
+unrelated to TeX.
+
+The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE',
+below, gives instructions, examples, and recommendations for authors
+who are considering distributing their works under this license.
+
+This license gives conditions under which a work may be distributed
+and modified, as well as conditions under which modified versions of
+that work may be distributed.
+
+We, the LaTeX3 Project, believe that the conditions below give you
+the freedom to make and distribute modified versions of your work
+that conform with whatever technical specifications you wish while
+maintaining the availability, integrity, and reliability of
+that work. If you do not see how to achieve your goal while
+meeting these conditions, then read the document `cfgguide.tex'
+and `modguide.tex' in the base LaTeX distribution for suggestions.
+
+
+DEFINITIONS
+===========
+
+In this license document the following terms are used:
+
+ `Work'
+ Any work being distributed under this License.
+
+ `Derived Work'
+ Any work that under any applicable law is derived from the Work.
+
+ `Modification'
+ Any procedure that produces a Derived Work under any applicable
+ law -- for example, the production of a file containing an
+ original file associated with the Work or a significant portion of
+ such a file, either verbatim or with modifications and/or
+ translated into another language.
+
+ `Modify'
+ To apply any procedure that produces a Derived Work under any
+ applicable law.
+
+ `Distribution'
+ Making copies of the Work available from one person to another, in
+ whole or in part. Distribution includes (but is not limited to)
+ making any electronic components of the Work accessible by
+ file transfer protocols such as FTP or HTTP or by shared file
+ systems such as Sun's Network File System (NFS).
+
+ `Compiled Work'
+ A version of the Work that has been processed into a form where it
+ is directly usable on a computer system. This processing may
+ include using installation facilities provided by the Work,
+ transformations of the Work, copying of components of the Work, or
+ other activities. Note that modification of any installation
+ facilities provided by the Work constitutes modification of the Work.
+
+ `Current Maintainer'
+ A person or persons nominated as such within the Work. If there is
+ no such explicit nomination then it is the `Copyright Holder' under
+ any applicable law.
+
+ `Base Interpreter'
+ A program or process that is normally needed for running or
+ interpreting a part or the whole of the Work.
+
+ A Base Interpreter may depend on external components but these
+ are not considered part of the Base Interpreter provided that each
+ external component clearly identifies itself whenever it is used
+ interactively. Unless explicitly specified when applying the
+ license to the Work, the only applicable Base Interpreter is a
+ `LaTeX-Format' or in the case of files belonging to the
+ `LaTeX-format' a program implementing the `TeX language'.
+
+
+
+CONDITIONS ON DISTRIBUTION AND MODIFICATION
+===========================================
+
+1. Activities other than distribution and/or modification of the Work
+are not covered by this license; they are outside its scope. In
+particular, the act of running the Work is not restricted and no
+requirements are made concerning any offers of support for the Work.
+
+2. You may distribute a complete, unmodified copy of the Work as you
+received it. Distribution of only part of the Work is considered
+modification of the Work, and no right to distribute such a Derived
+Work may be assumed under the terms of this clause.
+
+3. You may distribute a Compiled Work that has been generated from a
+complete, unmodified copy of the Work as distributed under Clause 2
+above, as long as that Compiled Work is distributed in such a way that
+the recipients may install the Compiled Work on their system exactly
+as it would have been installed if they generated a Compiled Work
+directly from the Work.
+
+4. If you are the Current Maintainer of the Work, you may, without
+restriction, modify the Work, thus creating a Derived Work. You may
+also distribute the Derived Work without restriction, including
+Compiled Works generated from the Derived Work. Derived Works
+distributed in this manner by the Current Maintainer are considered to
+be updated versions of the Work.
+
+5. If you are not the Current Maintainer of the Work, you may modify
+your copy of the Work, thus creating a Derived Work based on the Work,
+and compile this Derived Work, thus creating a Compiled Work based on
+the Derived Work.
+
+6. If you are not the Current Maintainer of the Work, you may
+distribute a Derived Work provided the following conditions are met
+for every component of the Work unless that component clearly states
+in the copyright notice that it is exempt from that condition. Only
+the Current Maintainer is allowed to add such statements of exemption
+to a component of the Work.
+
+ a. If a component of this Derived Work can be a direct replacement
+ for a component of the Work when that component is used with the
+ Base Interpreter, then, wherever this component of the Work
+ identifies itself to the user when used interactively with that
+ Base Interpreter, the replacement component of this Derived Work
+ clearly and unambiguously identifies itself as a modified version
+ of this component to the user when used interactively with that
+ Base Interpreter.
+
+ b. Every component of the Derived Work contains prominent notices
+ detailing the nature of the changes to that component, or a
+ prominent reference to another file that is distributed as part
+ of the Derived Work and that contains a complete and accurate log
+ of the changes.
+
+ c. No information in the Derived Work implies that any persons,
+ including (but not limited to) the authors of the original version
+ of the Work, provide any support, including (but not limited to)
+ the reporting and handling of errors, to recipients of the
+ Derived Work unless those persons have stated explicitly that
+ they do provide such support for the Derived Work.
+
+ d. You distribute at least one of the following with the Derived Work:
+
+ 1. A complete, unmodified copy of the Work;
+ if your distribution of a modified component is made by
+ offering access to copy the modified component from a
+ designated place, then offering equivalent access to copy
+ the Work from the same or some similar place meets this
+ condition, even though third parties are not compelled to
+ copy the Work along with the modified component;
+
+ 2. Information that is sufficient to obtain a complete,
+ unmodified copy of the Work.
+
+7. If you are not the Current Maintainer of the Work, you may
+distribute a Compiled Work generated from a Derived Work, as long as
+the Derived Work is distributed to all recipients of the Compiled
+Work, and as long as the conditions of Clause 6, above, are met with
+regard to the Derived Work.
+
+8. The conditions above are not intended to prohibit, and hence do not
+apply to, the modification, by any method, of any component so that it
+becomes identical to an updated version of that component of the Work as
+it is distributed by the Current Maintainer under Clause 4, above.
+
+9. Distribution of the Work or any Derived Work in an alternative
+format, where the Work or that Derived Work (in whole or in part) is
+then produced by applying some process to that format, does not relax or
+nullify any sections of this license as they pertain to the results of
+applying that process.
+
+10. a. A Derived Work may be distributed under a different license
+ provided that license itself honors the conditions listed in
+ Clause 6 above, in regard to the Work, though it does not have
+ to honor the rest of the conditions in this license.
+
+ b. If a Derived Work is distributed under a different license, that
+ Derived Work must provide sufficient documentation as part of
+ itself to allow each recipient of that Derived Work to honor the
+ restrictions in Clause 6 above, concerning changes from the Work.
+
+11. This license places no restrictions on works that are unrelated to
+the Work, nor does this license place any restrictions on aggregating
+such works with the Work by any means.
+
+12. Nothing in this license is intended to, or may be used to, prevent
+complete compliance by all parties with all applicable laws.
+
+
+NO WARRANTY
+===========
+
+There is no warranty for the Work. Except when otherwise stated in
+writing, the Copyright Holder provides the Work `as is', without
+warranty of any kind, either expressed or implied, including, but not
+limited to, the implied warranties of merchantability and fitness for a
+particular purpose. The entire risk as to the quality and performance
+of the Work is with you. Should the Work prove defective, you assume
+the cost of all necessary servicing, repair, or correction.
+
+In no event unless required by applicable law or agreed to in writing
+will The Copyright Holder, or any author named in the components of the
+Work, or any other party who may distribute and/or modify the Work as
+permitted above, be liable to you for damages, including any general,
+special, incidental or consequential damages arising out of any use of
+the Work or out of inability to use the Work (including, but not limited
+to, loss of data, data being rendered inaccurate, or losses sustained by
+anyone as a result of any failure of the Work to operate with any other
+programs), even if the Copyright Holder or said author or said other
+party has been advised of the possibility of such damages.
+
+
+MAINTENANCE OF THE WORK
+=======================
+
+The Work has the status `author-maintained' if the Copyright Holder
+explicitly and prominently states near the primary copyright notice in
+the Work that the Work can only be maintained by the Copyright Holder
+or simply that it is `author-maintained'.
+
+The Work has the status `maintained' if there is a Current Maintainer
+who has indicated in the Work that they are willing to receive error
+reports for the Work (for example, by supplying a valid e-mail
+address). It is not required for the Current Maintainer to acknowledge
+or act upon these error reports.
+
+The Work changes from status `maintained' to `unmaintained' if there
+is no Current Maintainer, or the person stated to be Current
+Maintainer of the work cannot be reached through the indicated means
+of communication for a period of six months, and there are no other
+significant signs of active maintenance.
+
+You can become the Current Maintainer of the Work by agreement with
+any existing Current Maintainer to take over this role.
+
+If the Work is unmaintained, you can become the Current Maintainer of
+the Work through the following steps:
+
+ 1. Make a reasonable attempt to trace the Current Maintainer (and
+ the Copyright Holder, if the two differ) through the means of
+ an Internet or similar search.
+
+ 2. If this search is successful, then enquire whether the Work
+ is still maintained.
+
+ a. If it is being maintained, then ask the Current Maintainer
+ to update their communication data within one month.
+
+ b. If the search is unsuccessful or no action to resume active
+ maintenance is taken by the Current Maintainer, then announce
+ within the pertinent community your intention to take over
+ maintenance. (If the Work is a LaTeX work, this could be
+ done, for example, by posting to comp.text.tex.)
+
+ 3a. If the Current Maintainer is reachable and agrees to pass
+ maintenance of the Work to you, then this takes effect
+ immediately upon announcement.
+
+ b. If the Current Maintainer is not reachable and the Copyright
+ Holder agrees that maintenance of the Work be passed to you,
+ then this takes effect immediately upon announcement.
+
+ 4. If you make an `intention announcement' as described in 2b. above
+ and after three months your intention is challenged neither by
+ the Current Maintainer nor by the Copyright Holder nor by other
+ people, then you may arrange for the Work to be changed so as
+ to name you as the (new) Current Maintainer.
+
+ 5. If the previously unreachable Current Maintainer becomes
+ reachable once more within three months of a change completed
+ under the terms of 3b) or 4), then that Current Maintainer must
+ become or remain the Current Maintainer upon request provided
+ they then update their communication data within one month.
+
+A change in the Current Maintainer does not, of itself, alter the fact
+that the Work is distributed under the LPPL license.
+
+If you become the Current Maintainer of the Work, you should
+immediately provide, within the Work, a prominent and unambiguous
+statement of your status as Current Maintainer. You should also
+announce your new status to the same pertinent community as
+in 2b) above.
+
+
+WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE
+======================================================
+
+This section contains important instructions, examples, and
+recommendations for authors who are considering distributing their
+works under this license. These authors are addressed as `you' in
+this section.
+
+Choosing This License or Another License
+----------------------------------------
+
+If for any part of your work you want or need to use *distribution*
+conditions that differ significantly from those in this license, then
+do not refer to this license anywhere in your work but, instead,
+distribute your work under a different license. You may use the text
+of this license as a model for your own license, but your license
+should not refer to the LPPL or otherwise give the impression that
+your work is distributed under the LPPL.
+
+The document `modguide.tex' in the base LaTeX distribution explains
+the motivation behind the conditions of this license. It explains,
+for example, why distributing LaTeX under the GNU General Public
+License (GPL) was considered inappropriate. Even if your work is
+unrelated to LaTeX, the discussion in `modguide.tex' may still be
+relevant, and authors intending to distribute their works under any
+license are encouraged to read it.
+
+A Recommendation on Modification Without Distribution
+-----------------------------------------------------
+
+It is wise never to modify a component of the Work, even for your own
+personal use, without also meeting the above conditions for
+distributing the modified component. While you might intend that such
+modifications will never be distributed, often this will happen by
+accident -- you may forget that you have modified that component; or
+it may not occur to you when allowing others to access the modified
+version that you are thus distributing it and violating the conditions
+of this license in ways that could have legal implications and, worse,
+cause problems for the community. It is therefore usually in your
+best interest to keep your copy of the Work identical with the public
+one. Many works provide ways to control the behavior of that work
+without altering any of its licensed components.
+
+How to Use This License
+-----------------------
+
+To use this license, place in each of the components of your work both
+an explicit copyright notice including your name and the year the work
+was authored and/or last substantially modified. Include also a
+statement that the distribution and/or modification of that
+component is constrained by the conditions in this license.
+
+Here is an example of such a notice and statement:
+
+ %% pig.dtx
+ %% Copyright 2005 M. Y. Name
+ %
+ % This work may be distributed and/or modified under the
+ % conditions of the LaTeX Project Public License, either version 1.3
+ % of this license or (at your option) any later version.
+ % The latest version of this license is in
+ % http://www.latex-project.org/lppl.txt
+ % and version 1.3 or later is part of all distributions of LaTeX
+ % version 2005/12/01 or later.
+ %
+ % This work has the LPPL maintenance status `maintained'.
+ %
+ % The Current Maintainer of this work is M. Y. Name.
+ %
+ % This work consists of the files pig.dtx and pig.ins
+ % and the derived file pig.sty.
+
+Given such a notice and statement in a file, the conditions
+given in this license document would apply, with the `Work' referring
+to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being
+generated from `pig.dtx' using `pig.ins'), the `Base Interpreter'
+referring to any `LaTeX-Format', and both `Copyright Holder' and
+`Current Maintainer' referring to the person `M. Y. Name'.
+
+If you do not want the Maintenance section of LPPL to apply to your
+Work, change `maintained' above into `author-maintained'.
+However, we recommend that you use `maintained', as the Maintenance
+section was added in order to ensure that your Work remains useful to
+the community even when you can no longer maintain and support it
+yourself.
+
+Derived Works That Are Not Replacements
+---------------------------------------
+
+Several clauses of the LPPL specify means to provide reliability and
+stability for the user community. They therefore concern themselves
+with the case that a Derived Work is intended to be used as a
+(compatible or incompatible) replacement of the original Work. If
+this is not the case (e.g., if a few lines of code are reused for a
+completely different task), then clauses 6b and 6d shall not apply.
+
+
+Important Recommendations
+-------------------------
+
+ Defining What Constitutes the Work
+
+ The LPPL requires that distributions of the Work contain all the
+ files of the Work. It is therefore important that you provide a
+ way for the licensee to determine which files constitute the Work.
+ This could, for example, be achieved by explicitly listing all the
+ files of the Work near the copyright notice of each file or by
+ using a line such as:
+
+ % This work consists of all files listed in manifest.txt.
+
+ in that place. In the absence of an unequivocal list it might be
+ impossible for the licensee to determine what is considered by you
+ to comprise the Work and, in such a case, the licensee would be
+ entitled to make reasonable conjectures as to which files comprise
+ the Work.
diff --git a/macros/latex/contrib/ximera/Makefile b/macros/latex/contrib/ximera/Makefile
new file mode 100644
index 0000000000..dd9c367745
--- /dev/null
+++ b/macros/latex/contrib/ximera/Makefile
@@ -0,0 +1,50 @@
+NAME = ximera
+SHELL = bash
+PWD = $(shell pwd)
+VERS = $(shell ltxfileinfo -v $(NAME).dtx|sed -e 's/^v//')
+LOCAL = $(shell kpsewhich --var-value TEXMFLOCAL)
+UTREE = $(shell kpsewhich --var-value TEXMFHOME)
+INPUTS = $(wildcard src/*.dtx) $(wildcard src/interactives/*.dtx) $(NAME).dtx
+OUTPUTS = ximera.cls xourse.cls ximera.4ht xourse.4ht ximera.cfg
+
+# based on
+#
+# https://stackoverflow.com/questions/2973445/gnu-makefile-rule-generating-a-few-targets-from-a-single-source-file
+#
+# I use a silly pattern rule to convince GNU make that multiple
+# outputs are created with a single invocation
+
+all: $(NAME).pdf $(OUTPUTS)
+ test -e README.txt && mv README.txt README || exit 0
+
+$(NAME)%pdf ximera%cls xourse%cls ximera%4ht xourse%4ht ximera%cfg: $(INPUTS)
+ pdflatex -shell-escape -recorder -interaction=batchmode $(NAME).dtx >/dev/null
+ if [ -f $(NAME).glo ]; then makeindex -q -s gglo.ist -o $(NAME).gls $(NAME).glo; fi
+ if [ -f $(NAME).idx ]; then makeindex -q -s gind.ist -o $(NAME).ind $(NAME).idx; fi
+ pdflatex --recorder --interaction=nonstopmode $(NAME).dtx > /dev/null
+ pdflatex --recorder --interaction=nonstopmode $(NAME).dtx > /dev/null
+
+clean:
+ rm -f $(NAME).{aux,fls,glo,gls,hd,idx,ilg,ind,ins,log,out}
+
+distclean: clean
+ rm -f ximera.pdf README $(OUTPUTS)
+
+# BADBAD: The code below still needs to be fixed
+
+inst: all
+ mkdir -p $(UTREE)/{tex,source,doc}/latex/$(NAME)
+ cp $(NAME).dtx $(UTREE)/source/latex/$(NAME)
+ cp $(NAME).cls $(UTREE)/tex/latex/$(NAME)
+ cp $(NAME).pdf $(UTREE)/doc/latex/$(NAME)
+
+install: all
+ sudo mkdir -p $(LOCAL)/{tex,source,doc}/latex/$(NAME)
+ sudo cp $(NAME).dtx $(LOCAL)/source/latex/$(NAME)
+ sudo cp $(NAME).cls $(LOCAL)/tex/latex/$(NAME)
+ sudo cp $(NAME).pdf $(LOCAL)/doc/latex/$(NAME)
+
+zip: all
+ ln -sf . $(NAME)
+ zip -Drq $(PWD)/$(NAME)-$(VERS).zip $(NAME)/{README,$(NAME).{pdf,dtx}}
+ rm $(NAME)
diff --git a/macros/latex/contrib/ximera/README b/macros/latex/contrib/ximera/README
new file mode 100644
index 0000000000..26b91f193f
--- /dev/null
+++ b/macros/latex/contrib/ximera/README
@@ -0,0 +1,18 @@
+|
+------------:| ------------------------------------------------------------
+ ximera:| Simultaneously write print and online interactive materials
+ Author:| Jim Fowler and Oscar Levin and Jason Nowell and Wim Obbels and Hans Parshall and Bart Snapp
+ E-mail:| bart.snapp@gmail.com
+ License:| Released under the LaTeX Project Public License v1.3c or later
+ See:| http://www.latex-project.org/lppl.txt
+
+Short description:
+Some text about the class: probably the same as the abstract.
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
diff --git a/macros/latex/contrib/ximera/README.md b/macros/latex/contrib/ximera/README.md
new file mode 100644
index 0000000000..73dddcbcfc
--- /dev/null
+++ b/macros/latex/contrib/ximera/README.md
@@ -0,0 +1,62 @@
+Greetings! [![Build Status](https://travis-ci.org/XimeraProject/ximeraLatex.svg?branch=master)](https://travis-ci.org/XimeraProject/ximeraLatex)
+==========
+
+In this repository, we hope to supply potential authors of Ximera
+activities with the LaTeX document classes they need to write Ximera
+documents.
+
+To install the XimeraLaTeX package, see:
+
+[Installing Locally](./installingLocally.md)
+
+For a list of different Ximera commands, see:
+
+[Examples of Ximera Envrionments](https://ximera.osu.edu/tester/exampleActivityCollection)
+
+
+Since Ximera is built on LaTeX source, we want to use LaTeX as a
+method of validating the code authors write. Hence, if you want to
+write a Ximera online activity, the first step is constructing LaTeX
+documents.
+
+Once you have the LaTeX documents, and you have checked them for
+typos, accuracy, etc, the fact that they compile should be reasonable
+evidence that they will display correctly in Ximera.
+
+
+
+Contents of the repository
+---------------------------
+
+* This README.md file.
+
+* The GNU license.
+
+* The Ximera document class, ximera.cls
+
+* The Xourse document class, xourse.cls
+
+* Documentation for the document classes above, ximeraLaTeX.pdf
+
+* The Ximera documented LaTeX file type, ximera.dtx. This file
+ generates ximera.cls, xourse.cls, and ximeraLaTeX.pdf, as well as a
+ few other files.
+
+
+Staying up-to-date
+------------------
+
+While we hope to solidify the ximera.cls file, at this point we are
+still in development stages.
+
+To keep your file up-to-date, you may need to periodically sync or
+pull the the ximera.cls within the ximeraLatex directory.
+
+`ximeraLatex$ git fetch --all`
+
+`ximeraLatex$ git reset --hard origin/master`
+
+will reset your ximeraLatex directory. Note it will also overwrite
+*any* modifications you have made in this directory. You should not be
+building your activities in this directory.
+
diff --git a/macros/latex/contrib/ximera/installingLocally.md b/macros/latex/contrib/ximera/installingLocally.md
new file mode 100644
index 0000000000..7c1005e108
--- /dev/null
+++ b/macros/latex/contrib/ximera/installingLocally.md
@@ -0,0 +1,91 @@
+# Installing Locally
+
+To get started as an author in Ximera, all you need is the XimeraLaTeX
+LaTeX Package. Unfortunately, at this point, this package is not part
+of CTAN. However, you can install it manually with the instructions
+below. Please feel free to contact Bart Snapp with questions
+(snapp.14@osu.edu).
+
+1. Get a GitHub account
+2. Go to: [XimeraLaTeX on GitHub](https://github.com/XimeraProject/ximeraLatex)
+3. Click on the green code button: ![Click on the green code button.](https://github.com/XimeraProject/.github/blob/main/profile/codeButton.png "Click on the green code button.") and copy the code, (or just copy: `git@github.com:XimeraProject/ximeraLatex.git`)
+4. Clone the repository.
+
+At this point the installation becomes operating-system specific.
+
+## Linux
+
+If you are running linux, create the local directory structure `~/texmf/tex/latex`
+
+├── texmf
+
+├───└── tex
+
+└───────└── latex
+
+Now move the `ximeraLatex` folder (cloned in step 4. above) into the latex folder. At this point you have installed XimeraLaTeX! You can test your installation by compiling:
+```
+\documentclass{ximera}
+\begin{document}
+\begin{problem}
+Hello $\answer[format=string]{World}$
+\end{problem}
+\end{document}
+```
+
+## MacOS
+
+If you are running MacOS, create the local directory structure `~/Library/texmf/tex/latex`. To do this, you'll need to make your Library folder visible, see [How to make your Library folder visible in the Finder](http://kb.mit.edu/confluence/display/istcontrib/How+to+make+your+Library+folder+visible+in+the+Finder+in+OS+X+10.9+%28Mavericks%29+or+later).
+
+├── Library
+
+├───└── texmf
+
+├───────└── tex
+
+└───────────└── latex
+
+Now move the `ximeraLatex` folder (cloned in step 4. above) into the latex folder. At this point you have installed XimeraLaTeX! You can test your installation by compiling:
+```
+\documentclass{ximera}
+\begin{document}
+\begin{problem}
+Hello $\answer[format=string]{World}$
+\end{problem}
+\end{document}
+```
+
+
+## Windows
+
+If you are running Windows, create the local directory structure `C:\localtexmf\tex\latex\`
+
+├── C:
+
+├───└── localtexmf
+
+├───────└── tex
+
+└───────────└── latex
+
+Now move the `ximeraLatex` folder (cloned in step 4. above) into the latex folder.
+
+For MiKteX to notice this directory, go to:
+
+* Start → All programs → MiKTeX Folder → Maintenance (Admin) Folder → Settings (Admin).
+* Now select the tab “Roots.”
+* Click “Add” because you are going to add a path.
+* Find `C:\localtexmf\` and click “OK.”
+* Click “apply” then “OK.”
+* Reopen Miktex Settings (Admin). Click **Refresh FNDB.**
+
+The steps above will vary between systems. However, the key steps are **adding the path** and **Refreshing FNDB.**
+At this point you have installed XimeraLaTeX! You can test your installation by compiling:
+```
+\documentclass{ximera}
+\begin{document}
+\begin{problem}
+Hello $\answer[format=string]{World}$
+\end{problem}
+\end{document}
+```
diff --git a/macros/latex/contrib/ximera/pgfsys-ximera.def b/macros/latex/contrib/ximera/pgfsys-ximera.def
new file mode 100644
index 0000000000..ffa3205304
--- /dev/null
+++ b/macros/latex/contrib/ximera/pgfsys-ximera.def
@@ -0,0 +1,62 @@
+%%
+%% This is file `pgfsys-ximera.def',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% ximera.dtx (with options: `pgfsys')
+%% src/pgfsys.dtx (with options: `pgfsys')
+%% ------------:| ------------------------------------------------------------
+%% ximera:| Simultaneously writing print and online interactive materials
+%% Author:| Jim Fowler and Oscar Levin and Jason Nowell and Hans Parshall and Bart Snapp
+%% E-mail:| bart.snapp@gmail.com
+%% License:| Released under the LaTeX Project Public License v1.3c or later
+%% See:| http://www.latex-project.org/lppl.txt
+%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\ProvidesFileRCS{pgfsys-ximera.def}
+
+\input pgfsys-dvisvgm.def
+
+\def\pgfsys@beginpicture{%
+ \special{color push gray 0}% make dvisvgm *not* add anything to text
+ \pgf@sys@svg@inpicturetrue% in a picture
+ \pgfsys@svg@boxmodefalse%
+ \special{dvisvgm:beginpicture}
+ \pgfsys@invoke{<g \ifx\pgf@sys@svg@last@stroke\relax\else
+ stroke="\pgf@sys@svg@last@stroke" \fi stroke-miterlimit="10" transform="scale(1,-1)">}}
+
+\def\pgfsys@endpicture{\pgfsys@invoke{</g>}\special{dvisvgm:endpicture}\special{color pop}}
+
+%%
+%% Copyright (C) 2018-2021 by Bart Snapp <bart.snapp@gmail.com> and Jim Fowler <kisonecat@gmail.com>
+%%
+%% This work may be distributed and/or modified under the conditions of
+%% the LaTeX Project Public License (LPPL), either version 1.3c of this
+%% license or (at your option) any later version. The latest version of
+%% this license is in the file:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This work is "maintained" (as per LPPL maintenance status) by
+%% Bart Snapp. The source code can be found at:
+%%
+%% https://github.com/XimeraProject/ximeraLatex
+%%
+%% This work consists of the file ximera.dtx, the associated files
+%% under src/, and a Makefile.
+%%
+%% Running "make" generates the derived files README, ximera.pdf, ximera.cls, xourse.cls.
+%%
+%% Running "make inst" installs the files in the user's TeX tree.
+%%
+%% Running "make install" installs the files in the local TeX tree.
+%%
+%%
+%% End of file `pgfsys-ximera.def'.
diff --git a/macros/latex/contrib/ximera/src/abstract.dtx b/macros/latex/contrib/ximera/src/abstract.dtx
new file mode 100644
index 0000000000..2a895568d3
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/abstract.dtx
@@ -0,0 +1,14 @@
+% \subsubsection{Abstract}
+% \DescribeEnv{abstract}{Every activity should include a short abstract.}
+% \begin{macrocode}
+%<*classXimera>
+\let\abstract\relax
+\let\endabstract\relax
+% Use of environ package, may want to find a better way.
+\NewEnviron{abstract}{\protected@xdef\theabstract{\BODY}}
+%</classXimera>
+% \end{macrocode}
+% The abstract has been stored in |\theabstract| and should be emitted
+% as a div, but confusingly I guess |<div class="abstract">| is
+% defined somewhere deeper inside tex4ht, so the code below is
+% probably unnecessary. \ No newline at end of file
diff --git a/macros/latex/contrib/ximera/src/activity.dtx b/macros/latex/contrib/ximera/src/activity.dtx
new file mode 100644
index 0000000000..647be0565d
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/activity.dtx
@@ -0,0 +1,158 @@
+% \subsection{Activities}
+% The core of the |xourse| system. It works by redefining the
+% |document| environment, thus making the |\begin| and
+% |\end{document}| of the subfile `transparent' to the
+% inclusion. The redefinition of |\documentclass| is analogous, just
+% having a required and an optional arguments which mean nothing to
+% |\subfile|.
+% \begin{macrocode}
+%<*classXourse>
+\newcommand{\skip@preamble}{%
+ \let\document\relax\let\enddocument\relax%
+ \newenvironment{document}{\let\input\otherinput}{}%
+ \renewcommand{\documentclass}[2][subfiles]{}}
+% \end{macrocode}
+% Note that the new command |\subfile| calls for |\skip@preamble| \emph{within a group}. The changes to |document| and |\documentclass| are undone after the inclusion of the subfile.
+%
+% Numbering starts a page too soon without this:
+% \begin{macrocode}
+\let\otherinput\input
+% \end{macrocode}
+% Store usual |\maketitle| as |\othermaketitle|
+% \begin{macrocode}
+\let\othermaketitle\maketitle
+% \end{macrocode}
+% \DescribeMacro{\maketitle}{In a \textsf{xourse} file, |\maketitle| is redefined to give course packet title page and toc.}
+% \begin{macrocode}
+\renewcommand{\maketitle}{ %
+\pagestyle{empty}
+\begin{center}
+~\\ %puts space at top of page to move title down.
+\vskip .25\textheight
+\hrulefill\\
+\vskip 1em
+\bfseries{\Huge \@title} \\
+\hrulefill\\
+\vskip 3em
+{\Large \@author}
+\vskip 2em
+{\large \@date}
+\end{center}
+\clearpage
+% \end{macrocode}
+% When |notoc| option is used, we do not include a table of contents.
+% Otherwise we include a table of contents in every course packet.
+% \begin{macrocode}
+\ifnotoc
+\else
+ \tableofcontents\clearpage
+ \clearpage
+\fi
+% \end{macrocode}
+% Switch to main pagestyle, just like a document with documentclass \textsf{ximera}.
+% \begin{macrocode}
+\pagestyle{main}
+% \end{macrocode}
+% Renew maketitle to usual definition.
+% \begin{macrocode}
+\let\maketitle\othermaketitle
+% \end{macrocode}
+% And we finish with our redefinition of |\maketitle|.
+% \begin{macrocode}
+}
+\relax
+%</classXourse>
+% \end{macrocode}
+
+% \subsubsection{Regular activities}
+% \DescribeMacro{\activity}{Documents included with |\activity| will
+% be included in the body of the xourse document. Any |\input|
+% commands within included \textsf{ximera} documents will be ignored.
+% Any |\usepackage| commands within included ximera documents will
+% cause an error. Overlapping |\newcommand| definitions within
+% multiple ximera documents included simultaneously will cause an
+% error.} The |\activity| command inputs the file name provided
+% without |\documentclass|, without
+% |\begin{document}|/|\end{document}| and without any inputs in the
+% preamble of the included file.
+% \begin{macrocode}
+%<*classXourse>
+\ifnonewpage
+\newcommand{\activity}[2][]{%
+ \setkeys{activity}{#1}
+ \renewcommand{\input}[1]{}
+ \begingroup\skip@preamble\otherinput{#2}\endgroup\par\vspace{\topsep}
+ \let\input\otherinput}
+\else
+\newcommand{\activity}[2][]{%
+ \setkeys{activity}{#1}
+ \renewcommand{\input}[1]{}
+ \begingroup\skip@preamble\otherinput{#2}\endgroup\clearpage
+ \let\input\otherinput}
+\fi
+\relax
+%</classXourse>
+% \end{macrocode}
+
+% \begin{macrocode}
+%<*htXourse>
+\renewcommand\activity[2][]{%
+\ifvmode \IgnorePar\fi \EndP\HCode{<a class="activity card \activitystyle" href="#2" data-options="#1">#2</a>}\IgnoreIndent%
+}
+%</htXourse>
+% \end{macrocode}
+
+% When running xake, we can just ignore activities
+% \begin{macrocode}
+%<*classXourse>
+\ifxake
+\renewcommand\activity[2][]{}
+\fi
+%</classXourse>
+% \end{macrocode}
+
+
+% \subsubsection{Practice activities}
+% \DescribeMacro{\practice}{Like |\activity| but not expecting a title.}
+% \begin{macrocode}
+%<*classXourse>
+\ifhandout
+\newcommand{\practice}[2][]{
+ \setkeys{practice}{#1}%!!!!!
+ \renewcommand{\input}[1]{}
+ \begingroup\skip@preamble\otherinput{#2}\endgroup
+ \let\input\otherinput}
+\else
+\newcommand{\practice}[2][]{\texttt{\detokenize{#2}}%% gives file name for practice
+ \setkeys{practice}{#1}%!!!!!
+ \renewcommand{\input}[1]{}
+ \begingroup\skip@preamble\otherinput{#2}\endgroup
+ \let\input\otherinput}
+\fi
+\relax
+%</classXourse>
+% \end{macrocode}
+
+% The practice environment does nothing, but will eventually produce
+% exercises at the end of an activity
+% \begin{macrocode}
+%<*classXourse>
+\ifxake
+\renewcommand\practice[2][]{}
+\fi
+%</classXourse>
+% \end{macrocode}
+
+% I suppose it is reasonable for practice cards to NOT have an activitystyle, since the activitystyle is basically PRACTICE.
+% \begin{macrocode}
+%<*htXourse>
+\renewcommand\practice[2][]{%
+ \ifvmode\IgnorePar\fi\EndP%
+ \HCode{<a class="activity card practice" href="#2" data-options="#1">#2</a>}%
+ \IgnoreIndent%
+}
+%</htXourse>
+% \end{macrocode}
+
+
+
diff --git a/macros/latex/contrib/ximera/src/answer.dtx b/macros/latex/contrib/ximera/src/answer.dtx
new file mode 100644
index 0000000000..c6f5460d05
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/answer.dtx
@@ -0,0 +1,111 @@
+% \subsubsection{Answers}
+% \DescribeMacro{\answer}{A math answer}
+% \begin{macrocode}
+%<*classXimera>
+
+\ifdefined\HCode
+\newcommand{\recordvariable}[1]{}
+\else
+\newwrite\idfile
+\immediate\openout\idfile=\jobname.ids
+\newcommand{\recordvariable}[1]{\ifthenelse{\equal{#1}{}}{}{\immediate\write\idfile{var #1;}}}
+\fi
+% \end{macrocode}
+% Determines if answer is shown in handout mode. when |given=true|,
+% show answer in handout mode, show answer in ``given box'' outside
+% handout mode. When |given=false|, do not show answer in handout
+% mode, show answer outside handout mode
+% \begin{macrocode}
+\define@key{answer}{given}[true]{\def\ans@given{#1}}
+% \end{macrocode}
+% Used for setting numeric answer tolerance for online student input.
+% \begin{macrocode}
+\define@key{answer}{tolerance}{\def\ans@tol{#1}}
+% \end{macrocode}
+% Used to run dynamic js code on student provided answers. Note:
+% currently pdf outputs the validator code itself.
+% \begin{macrocode}
+\define@key{answer}{validator}{}
+% \end{macrocode}
+% Used for assigning a js ID to answer for dynamic code (eg validators).
+% \begin{macrocode}
+\define@key{answer}{id}{\def\ans@id{#1}}
+% \end{macrocode}
+% Used to set anticipated input format; eg "string".
+% \begin{macrocode}
+\define@key{answer}{format}{}
+% \end{macrocode}
+% Used to hide the answer input box on the web.
+% \begin{macrocode}
+\define@key{answer}{onlinenoinput}[false]{}
+% \end{macrocode}
+% Used to add a `show answer' button to the answer blank.
+% \begin{macrocode}
+\define@key{answer}{onlineshowanswerbutton}[false]{}
+% \end{macrocode}
+% Set default values for |\answer| command |key=value| pairs.
+% Default values are |given = false|.
+% \begin{macrocode}
+\setkeys{answer}{id=,given=false,onlinenoinput=false,onlineshowanswerbutton=false}
+% \end{macrocode}
+% Basic code for |\answer|.
+% \begin{macrocode}
+
+% Options for handout
+\newcommand{\answerFormatLength}{2cm}
+
+\newcommand{\answerFormatDots}[1]{\ldots\ldots}
+\newcommand{\answerFormatLine}[1]{\protect\rule{\answerFormatLength}{0.4pt}}
+\newcommand{\answerFormatFlexibleLine}[1]{\protect\rule{\widthof{$#1$}*2}{0.4pt}}
+\newcommand{\answerFormatFlexibleBox}[1]{\fbox{\scalebox{2}{\phantom{$#1$}}}}
+
+% options for default (i.e with answers filled in)
+\newcommand{\answerFormatPlain}[1]{\ensuremath{#1}}
+\newcommand{\answerFormatBlue}[1]{\color{blue}\ensuremath{#1}}
+\newcommand{\answerFormatBoxed}[1]{\fbox{\ensuremath{#1}}}
+\newcommand{\answerFormatBoxedGiven}[1]{\underset{\scriptstyle\mathrm{given}}{\fbox{\ensuremath{#1}}}}
+
+% defaults for handout and default mode, and for \answer[given]
+\let\handoutAnswerFormat\answerFormatDots
+\let\defaultAnswerFormat\answerFormatBlue
+\let\givenAnswerFormat\answerFormatBoxedGiven
+
+\newcommand{\answer}[2][]{%
+ \ifmmode%
+ \setkeys{answer}{#1}%
+ \recordvariable{\ans@id}
+ \ifthenelse{\boolean{\ans@given}}
+ {% Start then statement
+ \ifhandout
+ #2
+ \else
+ \givenAnswerFormat{#2} %% in case the argument helps formatting
+ \fi
+ }% End then statement
+ {% Start else statement
+ \ifhandout
+ \handoutAnswerFormat{#2} %% in case the argument helps formatting
+ \else% show answer in box outside handout mode
+ \defaultAnswerFormat{#2} %% in case the argument helps formatting
+ \fi
+ }% End else statement
+ \else%
+ \GenericError{\space\space\space\space}% Throw an error based on... something? -- Jason
+ {Attempt to use \@backslashchar answer outside of math mode}
+ {See https://github.com/ximeraProject/ximeraLatex for explanation.}
+ {Need to use either inline or display math.}%
+ \fi
+}
+%</classXimera>
+% \end{macrocode}
+% On the HTML side, |\answer| emits spans---but it is usually just
+% handled directly by MathJax.
+% \begin{macrocode}
+%<*htXimera>
+\renewcommand{\answer}[2][false]{\HCode{<span class="answer respondable">}#2\HCode{</span>}}
+
+\def\validator[#1]{\stepcounter{identification}\HCode{<div class="validator" id="validator\arabic{identification}"><script type="text/javascript">function validator\arabic{identification}() }\{\HCode{ return \detokenize{#1}; }\}\HCode{</script>}}
+\def\endvalidator{\HCode{</div>}}
+
+%</htXimera>
+% \end{macrocode}
diff --git a/macros/latex/contrib/ximera/src/banner.dtx b/macros/latex/contrib/ximera/src/banner.dtx
new file mode 100644
index 0000000000..ec5d62b283
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/banner.dtx
@@ -0,0 +1,21 @@
+% \begin{macrocode}
+%<*classXimera>
+\let\m\message
+\def\w{\m{::}}\def\t{\m{:::}}\def\s{\m{ }}\def\n{\m{^^J}}\def\u{::'}\def\d{'::}\def\v{:::::}
+\n
+\m{\d.}\s\m{.\u}\w\m{}\m{\v}\s\s\m{\v}\m{}\m{.\v\v\v::::.}\s\m{}\t\n
+\s\m{\d.\u}\s\w\t\t\s\t\t\w\m{}\s\s\s\s\s\s\s\t\s\m{\u::}\n
+\s\s\t\s\s\w\t\m{}\t\t\m{}\t\m{ ::::\v}\m{.\v:\u}\m{}\m{\u}\m{\d}\n
+\s\m{.\u::.}\s\w\t\m{}\t\t\m{}\t\w\s\s\s\s\w\m{}\m{\d.}\s\m{\u}\s\m{\d}\n
+\m{.\u}\s\m{\d.}\w\t\s\m{':\u}\s\t\m{\d\v::}\w\s\m{}\m{\d.\u}\s\s\m{\d}\n
+\n
+\let\w\undefined
+\let\t\undefined
+\let\s\undefined
+\let\n\undefined
+\let\u\undefined
+\let\d\undefined
+\let\v\undefined
+\let\m\undefined
+%</classXimera>
+% \end{macrocode}
diff --git a/macros/latex/contrib/ximera/src/choice.dtx b/macros/latex/contrib/ximera/src/choice.dtx
new file mode 100644
index 0000000000..70770cd24e
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/choice.dtx
@@ -0,0 +1,226 @@
+% \subsubsection{Multiple choice and the like}
+% \DescribeEnv{multipleChoice}{Multiple choice}
+% \begin{macrocode}
+%<*classXimera>
+% Jim: Originally this was \renewcommand{\theenumi}{$(\mathrm{\alph{enumi}})$}
+% but that breaks tex4ht because mathmode can only be processed by mathjax.
+% so now I made this just italicized.
+% \end{macrocode}
+% \subsubsection{Options}
+% \begin{macrocode}
+\define@key{choice}{value}[]{\def\choice@value{#1}}
+% \end{macrocode}
+% This flags the answer as the correct answer
+% \begin{macrocode}
+\define@boolkey{choice}{correct}[true]{\def\choice@correct{#1}}
+% \end{macrocode}
+% Use an ID to refer to the choice.
+% \begin{macrocode}
+\define@key{multipleChoice}{id}{\def\mc@id{#1}}
+% \end{macrocode}
+% |\otherchoice| outputs the item if correct and nothing if incorrect.
+% \begin{macrocode}
+\define@key{otherchoice}{value}[]{\def\otherchoice@value{#1}}
+\define@boolkey{otherchoice}{correct}[true]{\def\otherchoice@correct{#1}}
+% \end{macrocode}
+% Default key choices for multiple choice options.
+% Default for choice pairs.
+% Default: answers without the option "correct=true" is "incorrect".
+% \begin{macrocode}
+\setkeys{choice}{correct=false,value=}
+% \end{macrocode}
+% Defaults for multipleChoice pairs.
+% Default to no id? -- Jason
+% \begin{macrocode}
+\setkeys{multipleChoice}{id=}
+% \end{macrocode}
+% Defaults for otherchoice pairs.
+% Default "otherchoice" to behave like "choice" for error checking.
+% \begin{macrocode}
+\setkeys{otherchoice}{correct=false,value=}
+%</classXimera>
+% \end{macrocode}
+%
+% \subsubsection{Choices}
+% \DescribeMacro{\choice}{Like |\item| but for choice environments.}
+% choice command denotes a possible answer choice for the multiple choice question.
+% \begin{macrocode}
+%<*classXimera>
+\newcommand{\choice}[2][]{%
+\setkeys{choice}{#1}%
+\item{#2}
+\ifthenelse{\boolean{\choice@correct}}
+ {% Begin then result
+ \ifhandout% if it's a handout do nothing.
+ \else% otherwise place a checkmark when you select the "correct choice"... maybe? -- Jason
+ \,\checkmark\,\setkeys{choice}{correct=false}
+ \fi
+ }% End then result
+ {}% Begin/End else result.
+}
+
+%Define an expandable version of choice Not really meant to be used outside this package (used in wordChoice)
+% Is there a reason we can't just always use this as default? -- Jason
+\newcommand{\choiceEXP}[2][]{%
+ \expandafter\setkeys\expandafter{choice}{#1}%
+ \item{#2}
+ \ifthenelse{\boolean{\choice@correct}}
+ {% Begin then result
+ \ifhandout
+ \else
+ \,\checkmark\,\setkeys{choice}{correct=false}
+ \fi
+ }% End then result
+ {}% Begin/End else result.
+ } %% note all the {} are needed in case the choice has [] in it.
+
+% \otherchoice is the \choice used in wordChoice command.
+\newcommand{\otherchoice}[2][]{%
+\ignorespaces%
+\setkeys{otherchoice}{#1}%
+\ifthenelse{\boolean{\otherchoice@correct}}%
+{% Start then result
+#2\ignorespaces\setkeys{otherchoice}{correct=false}\ignorespaces%
+}% End then result
+{}% Start/End else result
+\ignorespaces%
+}%
+\newcommand{\inlinechoice}[2][]{%
+\setkeys{choice}{#1}%
+\iffirstinlinechoice
+(\hspace{-.25em}
+\firstinlinechoicefalse
+\else
+/
+\fi
+#2
+\ifthenelse{\boolean{\choice@correct}}%
+{% Start then result
+\ifhandout\else\checkmark\ignorespaces\setkeys{choice}{correct=false}\ignorespaces\fi%
+}% End then result
+{}% Start/End else result
+\hspace{-.25em}\ignorespaces%
+}
+
+%</classXimera>
+% \end{macrocode}
+% On the HTML side, |\choice| emits |<span>|s.
+% \begin{macrocode}
+%<*htXimera>
+\newcounter{choiceId}
+\renewcommand{\choice}[2][]{%
+\setkeys{choice}{correct=false}%
+\setkeys{choice}{#1}%
+\stepcounter{choiceId}\IgnorePar%
+\HCode{<span class="choice }%
+\ifthenelse{\boolean{\choice@correct}}{\HCode{correct}}{}
+\HCode{" }
+\ifthenelse{\equal{\choice@value}{}}{}{\HCode{data-value="\choice@value" }}
+\HCode{id="choice\arabic{choiceId}">}%
+#2\HCode{</span>}}
+\let\inlinechoice\choice
+%</htXimera>
+% \end{macrocode}
+
+% \subsubsection{Environment(s)}
+% The environment |multipleChoice@| is for internal use only.
+% \DescribeEnv{multipleChoice}{Wrap |\choice|s in a |multipleChoice| environment to make a multiple choice question.}
+% \begin{macrocode}
+%<*classXimera>
+\newenvironment{multipleChoice}[1][]
+ {% Environment Start Code
+ \setkeys{multipleChoice}{#1}%
+ \recordvariable{\mc@id}%
+ \begin{trivlist}
+ \item[\hskip \labelsep\small\bfseries Multiple Choice:]\hfil
+ \begin{enumerate}
+ }% Note this means that \item has to be the first line after \begin{multipleChoice}.
+ {% Environment End Code
+ \end{enumerate}
+ \end{trivlist}
+ }
+
+%multipleChoice@ is for internal use only! (used in wordChoice)
+%this is simply a wrapper for the sole showing (other)choice.
+\newenvironment{multipleChoice@}[1][]{}{)}
+%</classXimera>
+% \end{macrocode}
+
+
+
+% On the web, you might also expect these to be "problem environments"
+% but they aren't -- they're respondables. You might expect a
+% |\setcounter{choiceId}{0}| here --- that would be wrong, because then
+% the generated IDs would no longer be unique.
+% \begin{macrocode}
+%<*htXimera>
+\renewenvironment{multipleChoice}[1][]
+{\setkeys{multipleChoice}{#1}%
+\stepcounter{identification}\ifvmode \IgnorePar\fi \EndP\HCode{<div class="multiple-choice" }%
+\ifthenelse{\equal{\mc@id}{}}{}{\HCode{data-id="\mc@id" }}%
+\HCode{id="problem\arabic{identification}">}%
+}{\HCode{</div>}\IgnoreIndent}
+\ConfigureEnv{multipleChoice}{}{}{}{}
+%</htXimera>
+% \end{macrocode}
+
+% \subsection{Word choice}
+% \DescribeMacro{\wordChoice}{An in-line version of multipleChoice:
+% uses enumitem package note, it is coded as a single line to avoid
+% unwanted spaces in ``given'' mode.}
+% \begin{macrocode}
+%<*classXimera>
+\newcommand{\wordChoice}[1]{%
+\let\choicetemp\choice% Assign a "choicetemp" command to duplicate choice.
+\ifwordchoicegiven% If wordchoice option is on, we need to juggle around some definitions.
+\let\choice\otherchoice%
+%\begin{multipleChoice@}% -unnecessary (REMOVE THIS LINE IF THE YEAR IS 2019 or Beyond)
+#1
+%\end{multipleChoice@}% -unnecessary (REMOVE THIS LINE IF THE YEAR IS 2019 or Beyond)
+\else% If it isn't the regular "choice" command should work.
+\let\choice\inlinechoice%
+\begin{multipleChoice@}%
+#1%
+\end{multipleChoice@}%
+\fi%
+\let\choice\choicetemp% Now that choicetmp has been manipulated to what we want, replace choice with it.
+}%
+
+
+%</classXimera>
+% \end{macrocode}
+% This is actually just word choice
+% \begin{macrocode}
+%<*htXimera>
+\renewenvironment{multipleChoice@}{\refstepcounter{problem}}{}%
+\ConfigureEnv{multipleChoice@}{\stepcounter{identification}\IgnorePar\HCode{<span class="word-choice" id="word-choice\arabic{identification}">}}{\HCode{</span>}\IgnoreIndent}{}{}
+%</htXimera>
+% \end{macrocode}
+
+% \subsection{Select all}
+% \DescribeEnv{selectAll}{A multiple-multiple choice question}
+% \begin{macrocode}
+%<*classXimera>
+\newenvironment{selectAll}[1][]
+{\begin{trivlist}\item[\hskip \labelsep\small\bfseries Select All Correct Answers:]\hfil\begin{enumerate}}
+ {\end{enumerate}\end{trivlist}}
+%</classXimera>
+% \end{macrocode}
+
+% In the future we need this to (optionally) be displayed in the
+% problem, while the actual code lives in the solution. Here is how
+% this could be implemented: Like the title/maketitle commands, the
+% multiple-choice could be stored in |\themultiplechoice|, flip a
+% boolean, and execute |\makemultiplechoice| at the |\end| of the
+% problem. We should also make a command called |\showchoices| that
+% will show choices in the handout.
+
+% On the web, |selectAll| is handled just like |multipleChoice|.
+% \begin{macrocode}
+%<*htXimera>
+\renewenvironment{selectAll}{\refstepcounter{problem}}{}%
+\ConfigureEnv{selectAll}{\stepcounter{identification}\ifvmode \IgnorePar\fi \EndP\HCode{<div class="select-all" id="problem\arabic{identification}">}}{\HCode{</div>}\IgnoreIndent}{}{}
+%</htXimera>
+% \end{macrocode}
+
+
diff --git a/macros/latex/contrib/ximera/src/clearEnv.dtx b/macros/latex/contrib/ximera/src/clearEnv.dtx
new file mode 100644
index 0000000000..af906995d9
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/clearEnv.dtx
@@ -0,0 +1,18 @@
+% \subsubsection{clearEnv}
+% \DescribeMacro{clearEnv}{envName}
+% This macro allows you to delete an environment by redefining it as null. This also deletes any corresponding internal counter - such as those generated by "\newtheorem" command.
+% #1 is envName is the name of the environment you want to clear. This will (re)define the
+% begin and end environments, as well as the internal counter from \newtheoremenv to \relax.
+% \begin{macrocode}
+%<*classXimera>
+\newcommand{\clearEnv}[1]{
+ %% Syntax: \clearEnv{envName}
+ % #1 is envName is the name of the environment you want to clear. This will (re)define the
+ % begin and end environments, as well as the internal counter from \newtheoremenv to \relax.
+ \expandafter\let\csname #1\endcsname\relax
+ \expandafter\let\csname end#1\endcsname\relax
+ \expandafter\let\csname c@#1\endcsname\relax
+ }
+%</classXimera>
+% \end{macrocode}
+
diff --git a/macros/latex/contrib/ximera/src/dialogue.dtx b/macros/latex/contrib/ximera/src/dialogue.dtx
new file mode 100644
index 0000000000..b4b31580df
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/dialogue.dtx
@@ -0,0 +1,28 @@
+% \subsubsection{Dialogues}
+% \DescribeEnv{dialogue}{A dialogue between people.}
+% \begin{macrocode}
+%<*classXimera>
+\newenvironment{dialogue}{%
+ \renewcommand\descriptionlabel[1]{\hspace{\labelsep}\textbf{##1:}}
+ \begin{description}%
+}{%
+ \end{description}%
+}
+%</classXimera>
+% \end{macrocode}
+% On the web, the resulting |<dl>| should have an appropriate |class| set.
+% \begin{macrocode}
+%<*htXimera>
+\renewenvironment{dialogue}{\begin{description}}{\end{description}}
+
+\ConfigureList{dialogue}%
+ {\EndP\HCode{<dl \a:LRdir class="dialogue">}%
+ \PushMacro\end:itm
+\global\let\end:itm=\empty}
+ {\PopMacro\end:itm \global\let\end:itm \end:itm
+\EndP\HCode{</dd></dl>}\ShowPar}
+ {\end:itm \global\def\end:itm{\EndP\Tg</dd>}\HCode{<dt
+ class="actor">}\bgroup \bf}
+ {\egroup\EndP\HCode{</dt><dd\Hnewline class="speech">}}
+%</htXimera>
+% \end{macrocode}
diff --git a/macros/latex/contrib/ximera/src/ending.dtx b/macros/latex/contrib/ximera/src/ending.dtx
new file mode 100644
index 0000000000..8f53a0fd27
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/ending.dtx
@@ -0,0 +1,20 @@
+% \subsubsection{The End}
+% It seems that some of the files need to conclude with something or another.
+% \begin{macrocode}
+%<*htXimera>
+\Hinput{ximera}
+%</htXimera>
+% \end{macrocode}
+
+% \begin{macrocode}
+%<*htXourse>
+\Hinput{xourse}
+%</htXourse>
+% \end{macrocode}
+
+% \begin{macrocode}
+%<*cfgXimera>
+\begin{document}
+\EndPreamble
+%</cfgXimera>
+% \end{macrocode}
diff --git a/macros/latex/contrib/ximera/src/enumerate.dtx b/macros/latex/contrib/ximera/src/enumerate.dtx
new file mode 100644
index 0000000000..7c37e9743e
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/enumerate.dtx
@@ -0,0 +1,10 @@
+% \subsubsection{Enumerate fixes}
+% Make enumerate use a letter
+% \begin{macrocode}
+%<*classXimera>
+\renewcommand{\theenumi}{\textup{(\alph{enumi})}}
+\renewcommand{\labelenumi}{\theenumi}
+\renewcommand{\theenumii}{\textup{(\roman{enumii})}}
+\renewcommand{\labelenumii}{\theenumii}
+%</classXimera>
+% \end{macrocode}
diff --git a/macros/latex/contrib/ximera/src/feedback.dtx b/macros/latex/contrib/ximera/src/feedback.dtx
new file mode 100644
index 0000000000..03d09770b8
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/feedback.dtx
@@ -0,0 +1,72 @@
+% \subsubsection{Feedback}
+% \DescribeEnv{feedback}{An initially hidden environment that uncovers itself at an appropriate time.}
+% New Validator rewrite code added by Jason Nowell. Original code
+% orovided by Jim Fowler Validator is an environment designed to run a
+% custom check on answers (usually) using javascript code.
+%
+% Define a placeholder command for validator and feedback.
+% \begin{macrocode}
+%<*classXimera>
+\newcommand{\PH@Command}{}
+% \end{macrocode}
+% Validator should take an argument and detokenize it and display it
+% at the start of the environment. The original Validator environment
+% had everything framed in an mbox; presumably to make the text look
+% a bit nicer, although this seems redundant with |texttt|. It
+% shouldn't cause any harm so I have left it in for now.
+% \begin{macrocode}
+\newenvironment{validator}[1][]{
+ \def\PH@Command{#1}% Use PH@Command to hold the content and be a target for "\expandafter" to expand once.
+ \mbox{\texttt{\detokenize\expandafter{\PH@Command}}}% Now expand PH@Command once and then detokenize.
+ }{}
+% \end{macrocode}
+% First, if it's a handout, we want feedback to eat everything and
+% then disappear entirely. So we do this:
+% \begin{macrocode}
+\ifhandout%
+\newenvironment{feedback}
+ {%
+ \setbox0\vbox\bgroup
+ }
+ {%
+ \egroup
+ }
+% \end{macrocode}
+% If this isn't a handout, then we want to display the Feedback by
+% using a label, positioned and formated as a |\item| in a
+% trivlist. It is important that we also detokenize the content of
+% the optional argument, as it is likely to contain javascript or
+% other code that latex won't be able to make sense of.
+% \begin{macrocode}
+\else
+% \end{macrocode}
+% \begin{macrocode}
+\newenvironment{feedback}[1][attempt]{
+
+ \def\PH@Command{#1}% Use PH@Command to hold the content and be a target for "\expandafter" to expand once.
+
+ \begin{trivlist}% Begin the trivlist to use formating of the "Feedback" label.
+ \item[\hskip \labelsep\small\slshape\bfseries Feedback% Format the "Feedback" label. Don't forget the space.
+ (\texttt{\detokenize\expandafter{\PH@Command}}):% Format (and detokenize) the condition for feedback to trigger
+ \hspace{2ex}]\small\slshape% Insert some space before the actual feedback given.
+ }{
+ \end{trivlist}
+ }
+
+\fi
+%</classXimera>
+% \end{macrocode}
+% Feedback environments take an optional parameter (which describes
+% when the feedback is to be provided)
+% \begin{macrocode}
+%<*htXimera>
+\def\feedback{\@ifnextchar[{\@feedbackcode}{\@feedbackattempt}}
+\def\@feedbackattempt{\@feedbackcode[attempt]}
+\def\@feedbackcode[#1]{\stepcounter{identification}%
+\ifvmode \IgnorePar\fi \EndP%
+\ifthenelse{\equal{#1}{attempt}}{\HCode{<div class="feedback" data-feedback="attempt" id="feedback\arabic{identification}">}}%
+{\ifthenelse{\equal{#1}{correct}}{\HCode{<div class="feedback" data-feedback="correct" id="feedback\arabic{identification}">}}%
+{\HCode{<div class="feedback" data-feedback="script" id="feedback\arabic{identification}"><script type="text/javascript">function feedback\arabic{identification}() }\{\HCode{ return \detokenize{#1}; }\}\HCode{</script>}}}}
+\def\endfeedback{\HCode{</div>}\IgnoreIndent}
+%</htXimera>
+% \end{macrocode}
diff --git a/macros/latex/contrib/ximera/src/foldable.dtx b/macros/latex/contrib/ximera/src/foldable.dtx
new file mode 100644
index 0000000000..94c5eb36cb
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/foldable.dtx
@@ -0,0 +1,76 @@
+% \subsubsection{Foldable}
+% The package \verb|mdframed| is used to make pretty foldable, but the
+% amsthm/mdframed conflict also messes up the .jax file so we don't
+% load mdframed when performing the xake step. But even the below
+% isn't enough to fix this.
+% \begin{macrocode}
+%\iftikzexport\else\RequirePackage[framemethod=TikZ]{mdframed}\fi
+% \end{macrocode}
+% \DescribeEnv{foldable}{Does it fold?}
+% \begin{macrocode}
+%<*classXimera>
+
+\colorlet{textColor}{black} % since textColor is referenced below
+\colorlet{background}{white} % since background is referenced below
+
+% The core environments. Find results in 4ht file.
+%% pretty-foldable
+%\iftikzexport
+\newenvironment{foldable}{%
+}{%
+}
+%\else
+%\renewmdenv[
+% font=\upshape,
+% outerlinewidth=3,
+% topline=false,
+% bottomline=false,
+% leftline=true,
+% rightline=false,
+% leftmargin=0,
+% innertopmargin=0pt,
+% innerbottommargin=0pt,
+% skipbelow=\baselineskip,
+% linecolor=textColor!20!white,
+% fontcolor=textColor,
+% backgroundcolor=background
+%]{foldable}%
+%\fi
+
+%% pretty-expandable
+%\iftikzexport
+\newenvironment{expandable}{%
+}{%
+}
+%\else
+%\newmdenv[
+% font=\upshape,
+% outerlinewidth=3,
+% topline=false,
+% bottomline=false,
+% leftline=true,
+% rightline=false,
+% leftmargin=0,
+% innertopmargin=0pt,
+% innerbottommargin=0pt,
+% skipbelow=\baselineskip,
+% linecolor=black,
+%]{expandable}%
+%\fi
+
+\newcommand{\unfoldable}[1]{#1}
+
+%</classXimera>
+% \end{macrocode}
+% On the web, these foldable elements could be HTML5 details and summary.
+% \begin{macrocode}
+%<*htXimera>
+\renewenvironment{foldable}{\stepcounter{identification}\ifvmode \IgnorePar\fi \EndP\HCode{<div id="foldable\arabic{identification}" class="foldable">}}{\HCode{</div>}\IgnoreIndent}
+
+\renewenvironment{expandable}{\stepcounter{identification}\ifvmode \IgnorePar\fi \EndP\HCode{<div data-original="expandable" id="foldable\arabic{identification}" class="foldable">}
+
+}{\HCode{</div>}\IgnoreIndent}
+
+\renewcommand{\unfoldable}[1]{\HCode{<span class="unfoldable">}#1\HCode{</span>}}
+%</htXimera>
+% \end{macrocode}
diff --git a/macros/latex/contrib/ximera/src/footnotes.dtx b/macros/latex/contrib/ximera/src/footnotes.dtx
new file mode 100644
index 0000000000..cd37a086e4
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/footnotes.dtx
@@ -0,0 +1,63 @@
+% \subsection{How to handle footnotes in this setting.}
+% \DescribeMacro{\footnote}{% Written by Jason Nowell Standard Footnotes in pdf, but expandable parenthetical online. Supports different coloring by using |\colorlet{fncolor}{COLOR}| and setting COLOR to whatever color you want (Default is blue).}%
+%
+% \begin{macrocode}
+%<*htXimera>
+\newcounter{footnoteNum}% This will track footnote numbering for the superscript and for the ID.
+\colorlet{fncolor}{red!30!blue}% This is the footnote text coloring. This will allow users to renew this coloring to their own preference if they want to. The default here is a blue coloring. NOTE: Currently; trying to use `footnotecolor' (as a more descriptive color name) breaks everything on my system pretty spectacularly for some reason. This may be just mine or a clash somewhere in the ximera package, so for now I'm leaving it as `fncolor'.
+\renewcommand{\footnote}[1]{\ifvmode\ShowPar\fi
+ \stepcounter{footnoteNum}% Step the counter to make a new footnote
+ %% The following HCode should setup the javascript function that shows or hides the footnote. If you want to change the footnote location, you may want to change the 'inline' part of x.style.display = 'inline'; to another CSS display type, like 'block' or 'inherit'. Current the `x.display.color' seems to not be working.
+ \HCode{
+ <script type="text/javascript">
+ function footnotefunction(ID) {
+ var x = document.getElementById(ID);
+ if (x.style.display === "none") {
+ x.style.color = "blue";
+ x.style.display = "inline";
+ } else {
+ x.style.display = "none";
+ }
+ }
+ </script>
+ }
+ %% The next command needs \expandafter in order to expand the counter footnoteNum into a roman character for the footnote ID. These seem to work better than arabic numerals in some cases, although why is not clear.
+ %% The next HCode controls the formatting for the actual footnote reference number (ie the superscript), but not the footnote itself.
+ \expandafter\HCode{
+ <span style=
+ "position=relative;
+ vertical-align=baseline;"
+ >
+ <button onclick="footnotefunction('footnote\roman{footnoteNum}')"
+ style=
+ "background:none!important;
+ color:inherit;
+ border:none;
+ padding:0!important;
+ font: inherit;
+ cursor: pointer;"
+ >
+ <sup>}[\arabic{footnoteNum}]\HCode{</sup></button>
+ }
+ %% The next command needs \expandafter in order to expand the counter footnoteNum into a roman character for the footnote ID. These seem to work better than arabic numerals in some cases, although why is not clear. Note that the ID counter style choice (roman vs arabic etc) needs to match the previous HCode choice.
+ %% Currently most of the formatting doesn't seem to work as intended, so that still needs to be figured out and fixed. Ideally we would have the footnote appear as a bubble above the footnote superscript when the footnote superscript is clicked.
+ \expandafter\HCode{
+ <span id="footnote\roman{footnoteNum}"
+ style=
+ "display:none;
+ min-width:20em;
+ position:relative;
+ left:2px;
+ padding:5px;
+ color:blue;
+ word-wrap:break-word;
+ z-index=9999;
+ overflow=auto;"
+ >
+ }
+ \textcolor{fncolor}{(#1)}% Display the actual footnote here with color `fncolor' and within ()'s.
+ \HCode{</span></span>}
+ }% End of footnote definition.
+%</htXimera>
+% \end{macrocode}
+
diff --git a/macros/latex/contrib/ximera/src/freeresponse.dtx b/macros/latex/contrib/ximera/src/freeresponse.dtx
new file mode 100644
index 0000000000..2fe03c5287
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/freeresponse.dtx
@@ -0,0 +1,60 @@
+% \subsubsection{Free response}
+% \DescribeEnv{freeResponse}{A freeform input box.}
+% \begin{macrocode}
+%<*classXimera>
+\newboolean{given} %% required for freeResponse
+\setboolean{given}{true} %% could be replaced by a key=value pair later if needed
+
+\ifhandout
+ \newenvironment{freeResponse}[1][false]%
+ {%
+ \def\givenatend{\boolean{#1}}
+ \ifthenelse{\boolean{#1}}
+ {% Begin then result
+ \begin{trivlist}
+ \item
+ }% End then result
+ {% Begin else result
+ \setbox0\vbox\bgroup
+ }% End else result
+% {}% Don't think this is doing anything? -- Jason
+ }
+ {%
+ \ifthenelse{\givenatend}
+ {% Begin then result
+ \end{trivlist}
+ }% End then result
+ {% Begin else result
+ \egroup
+ }% End else result
+% {}% Don't think this is doing anything? -- Jason
+ }
+\else
+ \newenvironment{freeResponse}[1][false]%
+ {% Environment Beginning Code
+ \ifthenelse{\boolean{#1}}%% Could probably change this with just putting the (given) in the boolean?-- Jason
+ {% Begin then result
+ \begin{trivlist}
+ \item[\hskip \labelsep\bfseries Free Response (Given):\hspace{2ex}]
+ }% End then result
+ {% Begin else result
+ \begin{trivlist}
+ \item[\hskip \labelsep\bfseries Free Response:\hspace{2ex}]
+ }% End else result
+ }
+ {% Environment Ending Code
+ \end{trivlist}
+ }
+\fi
+
+%</classXimera>
+% \end{macrocode}
+
+% \begin{macrocode}
+%<*htXimera>
+
+\renewenvironment{freeResponse}{\refstepcounter{problem}}{}%
+\ConfigureEnv{freeResponse}{\stepcounter{identification}\ifvmode \IgnorePar\fi \EndP\HCode{<div class="free-response" id="problem\arabic{identification}">}}{\HCode{</div>}\IgnoreIndent}{}{}%
+
+%</htXimera>
+% \end{macrocode} \ No newline at end of file
diff --git a/macros/latex/contrib/ximera/src/graded.dtx b/macros/latex/contrib/ximera/src/graded.dtx
new file mode 100644
index 0000000000..24ec67052d
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/graded.dtx
@@ -0,0 +1,20 @@
+% \subsection{Grading by points}
+% \DescribeEnv{graded}{The |graded| environment does nothing in latex,
+% but in html, it wraps the activities in a div in order to assign
+% some weight to them for grading.}
+% \begin{macrocode}
+%<*classXourse>
+\newenvironment{graded}[1]{}{}
+%</classXourse>
+% \end{macrocode}
+% So indeed this environment in html wraps the activities in a div in
+% order to assign some number of points to them.
+% \begin{macrocode}
+%<*htXourse>
+\renewenvironment{graded}[1]{%
+\ifvmode \IgnorePar\fi \EndP\HCode{<div class="graded" data-weight="#1">}\IgnoreIndent%
+}{
+\ifvmode \IgnorePar\fi \EndP\HCode{</div>}\IgnoreIndent%
+}
+%</htXourse>
+% \end{macrocode}
diff --git a/macros/latex/contrib/ximera/src/hideEnv.dtx b/macros/latex/contrib/ximera/src/hideEnv.dtx
new file mode 100644
index 0000000000..5abcdfb0c0
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/hideEnv.dtx
@@ -0,0 +1,36 @@
+% \subsubsection{hideEnv}
+% \DescribeMacro{hideEnv}[replacementCode]{environmentName}
+% This macro allows you to hide an environment by name, ensuring it - and all its contents - are no longer visible on the pdf output. It also allows you an optional input to replace the block of content with new (uniform) content if desired.
+% #1 is replacementCode and is optional. This will be code that is executed when the env is executed,
+% even though the content of the environment is hidden.
+% #2 is the name of the environment which gets hidden.
+% \begin{macrocode}
+%<*classXimera>
+\newcommand{\hideEnv}[2][]{
+ %% Syntax: \hideEnv[NewCode]{environmentName}
+
+ \expandafter\def\csname temp@#2\endcsname\csname #2\endcsname
+ \expandafter\def\csname temp@end#2\endcsname\csname end#2\endcsname
+ \expandafter\def\csname#2\endcsname{
+ \ifnum\value{depth@Check}<1
+ Suppress Should start here.
+ \suppress
+ \fi
+ \stepcounter{depth@Check}
+
+% Current Depth reported as: \arabic{depth@Check}
+ }
+ \expandafter\def\csname end#2\endcsname{
+ \addtocounter{depth@Check}{-1}
+ \ifnum\value{depth@Check}<1
+ Suppress Should End Here.
+ \endsuppress
+ \fi
+
+% Current Depth reported as: \arabic{depth@Check}
+ \noexpand{#1}
+ }
+ }
+%</classXimera>
+% \end{macrocode}
+
diff --git a/macros/latex/contrib/ximera/src/hints.dtx b/macros/latex/contrib/ximera/src/hints.dtx
new file mode 100644
index 0000000000..b777bd8235
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/hints.dtx
@@ -0,0 +1,53 @@
+% \subsubsection{Hints}
+% \DescribeEnv{hint}{Hint environments can be embedded inside problems.}
+% \begin{macrocode}
+%<*classXimera>
+% \end{macrocode}
+% Create a counter that will track how deeply nested the current hint is
+% \begin{macrocode}
+\newcounter{hintLevel}
+\setcounter{hintLevel}{0}
+% \end{macrocode}
+% Create an empty shell to renew
+% \begin{macrocode}
+\newenvironment{hint}{}{}
+% \end{macrocode}
+% Now we renew the environment as needed, this should allow support
+% for any transition code that treats some parts as a "handout" and
+% some parts as non-handout. renewing the environment on the fly is a
+% bit hacky.
+% \begin{macrocode}
+\renewenvironment{hint}
+ {
+ \ifhandout
+ \setbox0\vbox\bgroup
+ \else
+ \begin{trivlist}\item[\hskip \labelsep\small\slshape\bfseries Hint:\hspace{2ex}]
+ \small\slshape
+ \fi
+% \end{macrocode}
+% Step up hint level to track the nested level of the hint. This will be used for problem numbering.
+% \begin{macrocode}
+ \stepcounter{hintLevel}
+ }
+ {
+ \ifhandout
+ \egroup\ignorespacesafterend
+ \else
+ \end{trivlist}
+ \fi
+% \end{macrocode}
+% Detract from hint level counter to track hint nested level
+% \begin{macrocode}
+ \addtocounter{hintLevel}{-1}
+ }
+
+\ifhints
+ \renewenvironment{hint}{
+ \begin{trivlist}\item[\hskip \labelsep\small\slshape\bfseries Hint:\hspace{2ex}]
+ \small\slshape}
+ {\end{trivlist}}
+\fi
+
+%</classXimera>
+% \end{macrocode}
diff --git a/macros/latex/contrib/ximera/src/html.dtx b/macros/latex/contrib/ximera/src/html.dtx
new file mode 100644
index 0000000000..8c0b458bf1
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/html.dtx
@@ -0,0 +1,20 @@
+% \subsubsection{Semantic HTML}
+% \DescribeMacro{\textbf}{Using \verb|\textbf| emits a \verb|<strong>| tag.}
+% \begin{macrocode}
+%<*cfgXimera>
+\Configure{textbf}{\ifvmode\ShowPar\fi\HCode{<strong>}}{\HCode{</strong>}}
+%</cfgXimera>
+% \end{macrocode}
+% \DescribeMacro{\textit}{Using \verb|\textit| or similar emits an \verb|<em>| tag.}
+% \begin{macrocode}
+%<*cfgXimera>
+\Configure{textit}{\ifvmode\ShowPar\fi\HCode{<em>}}{\HCode{</em>}}
+\Configure{emph}{\ifvmode\ShowPar\fi\HCode{<em>}}{\HCode{</em>}}
+%</cfgXimera>
+% \end{macrocode}
+% \DescribeMacro{\texttt}{Using \verb|\texttt| emits a \verb|<code>| tag.}
+% \begin{macrocode}
+%<*cfgXimera>
+\Configure{texttt}{\ifvmode\ShowPar\fi\HCode{<code>}}{\HCode{</code>}}
+%</cfgXimera>
+% \end{macrocode}
diff --git a/macros/latex/contrib/ximera/src/hyperref.dtx b/macros/latex/contrib/ximera/src/hyperref.dtx
new file mode 100644
index 0000000000..d035b4d976
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/hyperref.dtx
@@ -0,0 +1,12 @@
+% We put hyperref after all other packages becuase that is better.
+% \begin{macrocode}
+%<*classXimera>
+% Don't use hyperref when using Tex4ht
+\ifdefined\HCode
+\RequirePackage{hyperref}
+\else
+\RequirePackage[pdfpagelabels,colorlinks=true,allcolors=blue!30!black]{hyperref}
+\pdfstringdefDisableCommands{\def\hskip{}}%% quiets warning
+\fi
+%</classXimera>
+% \end{macrocode}
diff --git a/macros/latex/contrib/ximera/src/image.dtx b/macros/latex/contrib/ximera/src/image.dtx
new file mode 100644
index 0000000000..e8e0a96e5a
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/image.dtx
@@ -0,0 +1,60 @@
+% \subsubsection{Images}
+% \DescribeEnv{image}{Place images inside an |image| environment. On paper, this centers the image. On the web, this provides additional benefits.}
+% \begin{macrocode}
+%<*classXimera>
+%\newenvironment{image}[1][]{\begin{center}}{\end{center}}
+\NewEnviron{image}[1][3in]{%
+ \begin{center}\resizebox{#1}{!}{\BODY}\end{center}% resize and center
+}
+%</classXimera>
+% \end{macrocode}
+% \DescribeMacro{\alt}{Inside an |image| environment, |\alt| provides alt-text for assistive technology like screenreaders.}
+% \begin{macrocode}
+%<*classXimera>
+\newcommand{\alt}[1]{}
+%</classXimera>
+% \end{macrocode}
+% The |image| environment doesn't actually work in tex4ht as defined
+% with NewEnviron; so this renewenvironment is needed.
+% image-environment also gets formatted in a well, and when the user
+% clicks on the image, it zooms in.
+% \begin{macrocode}
+%<*htXimera>
+\newcounter{imagealt}
+\setcounter{imagealt}{0}
+\renewenvironment{image}[1][]{\stepcounter{imagealt}%
+ \ifvmode \IgnorePar\fi \EndP%
+ \HCode{<div class="image-environment" role="img" aria-labelledby="image-alt-\arabic{imagealt}">}%
+}{\HCode{</div>}}
+\renewcommand{\alt}[1]{\HCode{<div style="display: none;" id="image-alt-\arabic{imagealt}">}#1\HCode{</div>}}
+%</htXimera>
+% \end{macrocode}
+% Although we accept many formats, SVG is preferred on the web.
+% Since we have a different mechanism for producing |alt| text, we
+% want to ignore tex4ht's own method fo producing alt text.
+% \begin{macrocode}
+%<*cfgXimera>
+\DeclareGraphicsExtensions{.jpg,.png,.gif,.svg}
+\Configure{graphics*}
+{svg}{
+ {\Configure{Needs}{File: \Gin@base.svg}\Needs{}}
+ \Picture[]{\csname Gin@base\endcsname.svg \csname a:Gin-dim\endcsname}%
+}
+%</cfgXimera>
+% \end{macrocode}
+% This is a hack to kill |includegraphics| commands in
+% |\documentclass{standalone}| files
+% \begin{macrocode}
+%<*cfgXimera>
+\ifcsname ifstandalone\endcsname
+ \ifstandalone
+ \renewcommand\includegraphics[2][]{}
+ \fi
+%</cfgXimera>
+% \end{macrocode}
+% PGF sometimes causes trouble, but we simply don't care in tex4ht mode.
+% \begin{macrocode}
+%<*htXimera>
+\newcommand{\pgfsyspdfmark}[3]{}
+%</htXimera>
+% \end{macrocode}
diff --git a/macros/latex/contrib/ximera/src/instructornotes.dtx b/macros/latex/contrib/ximera/src/instructornotes.dtx
new file mode 100644
index 0000000000..c175319f69
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/instructornotes.dtx
@@ -0,0 +1,101 @@
+% \subsubsection{Instructor notes}
+% \begin{macrocode}
+%<*classXimera>
+
+%% instructor intro/instructor notes
+%%
+\ifhandout % what follows is handout behavior
+ \ifinstructornotes
+ \newenvironment{instructorIntro}%
+ {%
+ \begin{trivlist}
+ \item[\hskip \labelsep\bfseries Instructor Introduction:\hspace{2ex}]
+ }
+ % %% line at the bottom}
+ {
+ \end{trivlist}
+ \par\addvspace{.5ex}\nobreak\noindent\hung
+ }
+ \else
+ \newenvironment{instructorIntro}%
+ {%
+ \setbox0\vbox\bgroup
+ }
+ {%If this mysteriously starts breaking
+ % remove \ignorespacesafterend
+ \egroup\ignorespacesafterend
+ }
+ \fi
+\else% for handout, so what follows is default
+\ifinstructornotes
+ \newenvironment{instructorIntro}%
+ {%
+ \setbox0\vbox\bgroup
+ }
+ {%
+ \egroup
+ }
+ \else
+ \newenvironment{instructorIntro}%
+ {%
+ \begin{trivlist}
+ \item[\hskip \labelsep\bfseries Instructor Introduction:\hspace{2ex}]
+ }
+ % %% line at the bottom}
+ {
+ \end{trivlist}
+ \par\addvspace{.5ex}\nobreak\noindent\hung
+ }
+ \fi
+\fi
+
+
+
+
+%% instructorNotes environment
+\ifhandout % what follows is handout behavior
+\ifinstructornotes
+\newenvironment{instructorNotes}%
+ {%
+ \begin{trivlist}
+ \item[\hskip \labelsep\bfseries Instructor Notes:\hspace{2ex}]
+ }
+ % %% line at the bottom}
+ {
+ \end{trivlist}
+ \par\addvspace{.5ex}\nobreak\noindent\hung
+ }
+ \else
+ \newenvironment{instructorNotes}%
+ {%
+ \setbox0\vbox\bgroup
+ }
+ {%
+ \egroup
+ }
+ \fi
+\else% for handout, so what follows is default
+\ifinstructornotes
+\newenvironment{instructorNotes}%
+ {%
+ \setbox0\vbox\bgroup
+ }
+ {%
+ \egroup
+ }
+ \else
+ \newenvironment{instructorNotes}%
+ {%
+ \begin{trivlist}
+ \item[\hskip \labelsep\bfseries Instructor Notes:\hspace{2ex}]
+ }
+ % %% line at the bottom}
+ {
+ \end{trivlist}
+ \par\addvspace{.5ex}\nobreak\noindent\hung
+ }
+ \fi
+ \fi
+
+%</classXimera>
+% \end{macrocode}
diff --git a/macros/latex/contrib/ximera/src/interactives/desmos.dtx b/macros/latex/contrib/ximera/src/interactives/desmos.dtx
new file mode 100644
index 0000000000..9a55db8f43
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/interactives/desmos.dtx
@@ -0,0 +1,14 @@
+% \subsubsection{Desmos}
+% \DescribeMacro{\desmos}{Desmos command. Requires id, width, and height as arguments.}
+% \begin{macrocode}
+%<*classXimera>
+\newcommand{\desmos}[3]{Desmos link: \url{https://www.desmos.com/calculator/#1}}
+\newcommand{\desmosThreeD}[3]{Desmos3D link: \url{https://www.desmos.com/3d/#1}}
+%</classXimera>
+% \end{macrocode}
+% \begin{macrocode}
+%<*htXimera>
+\renewcommand{\desmos}[3]{\HCode{<iframe src="https://www.desmos.com/calculator/#1" width="100\%" height="#3px" style="border: 1px solid \#ccc" frameborder=0>This browser does not support embedded elements.</iframe>}}
+\renewcommand{\desmosThreeD}[3]{\HCode{<iframe src="https://www.desmos.com/3d/#1" width="#2px" height="#3px" style="border: 1px solid \#ccc" frameborder=0>This browser does not support embedded elements.</iframe>}}
+%</htXimera>
+% \end{macrocode}
diff --git a/macros/latex/contrib/ximera/src/interactives/geogebra.dtx b/macros/latex/contrib/ximera/src/interactives/geogebra.dtx
new file mode 100644
index 0000000000..696ac32236
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/interactives/geogebra.dtx
@@ -0,0 +1,27 @@
+% \subsubsection{Geogebra}
+% \DescribeMacro{\geogebra}{Geogebra command. Requires id, width, and
+% height as arguments.}
+% \begin{macrocode}
+%<*classXimera>
+%Geogebra link
+\newcommand{\geogebra}[3]{Geogebra link: \url{https://www.geogebra.org/m/#1}}
+%</classXimera>
+% \end{macrocode}
+% Define keys for answer geogebra key=value pairs.
+% \begin{macrocode}
+%<*htXimera>
+\define@key{geogebra}{rc}[true]{\def\geo@rc{#1}}
+\define@key{geogebra}{sdz}[true]{\def\geo@sdz{#1}}
+\define@key{geogebra}{smb}[true]{\def\geo@smb{#1}}
+\define@key{geogebra}{stb}[true]{\def\geo@stb{#1}}
+\define@key{geogebra}{stbh}[true]{\def\geo@stbh{#1}}
+\define@key{geogebra}{ld}[true]{\def\geo@ld{#1}}
+\define@key{geogebra}{sri}[true]{\def\geo@sri{#1}}
+%set default key values
+\setkeys{geogebra}{rc=false,sdz=false,smb=false,stb=false,stbh=false,ld=false,sri=false}
+%command definition
+\renewcommand{\geogebra}[4][]{%
+ \setkeys{geogebra}{#1}% Set new keys
+ \HCode{<iframe scrolling="no" src="https://www.geogebra.org/material/iframe/id/#2/width/#3/height/#4/border/888888/rc/\geo@rc/ai/false/sdz/\geo@sdz/smb/\geo@smb/stb/\geo@stb/stbh/\geo@stbh/ld/\geo@ld/sri/\geo@sri/at/auto" width="#3px" height="#4px" style="border:0px; max-width: fit-content"> </iframe>}}
+%</htXimera>
+% \end{macrocode}
diff --git a/macros/latex/contrib/ximera/src/interactives/google.dtx b/macros/latex/contrib/ximera/src/interactives/google.dtx
new file mode 100644
index 0000000000..cbe75498f1
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/interactives/google.dtx
@@ -0,0 +1,26 @@
+% \subsubsection{Google Sheet}
+% \DescribeMacro{\googleSheet}{googleSheet command. Requires id,
+% width, and height as arguments. optional arguments are gid for
+% sheet ID and range for cell range. command definition}
+% \begin{macrocode}
+%<*classXimera>
+% Google Spreadsheet link (read only)
+\newcommand{\googleSheet}[5]{%
+ Google Spreadsheet link: \url{https://docs.google.com/spreadsheets/d/#1}%
+}
+%</classXimera>
+% \end{macrocode}
+
+% \begin{macrocode}
+%<*htXimera>
+\renewcommand{\googleSheet}[5]{%
+ \ifthenelse{\equal{#4}{}}%
+ {\HCode{<iframe width="#2px" height="#3px" src="https://docs.google.com/spreadsheets/d/#1/htmlembed?widget=true">This browser does not support embedded elements.</iframe>}}%
+ {\ifthenelse{\equal{#5}{}}%
+ {\HCode{<iframe width="#2px" height="#3px" src="https://docs.google.com/spreadsheets/d/#1/htmlembed?single=true&amp;gid=#4&amp;widget=false">This browser does not support embedded elements.</iframe>}}%
+ {\HCode{<iframe width="#2px" height="#3px" src="https://docs.google.com/spreadsheets/d/#1/htmlembed?single=true&amp;gid=#4&amp;range=#5&amp;widget=false">This browser does not support embedded elements.</iframe>}}%
+ }%
+ }%
+%</htXimera>
+% \end{macrocode}
+
diff --git a/macros/latex/contrib/ximera/src/interactives/graph.dtx b/macros/latex/contrib/ximera/src/interactives/graph.dtx
new file mode 100644
index 0000000000..154c2803af
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/interactives/graph.dtx
@@ -0,0 +1,14 @@
+% \subsubsection{Graphs}
+% \DescribeMacro{\graph}{An embedded graph (in math mode).}
+% \begin{macrocode}
+%<*classXimera>
+\newcommand{\graph}[2][]{\text{Graph of $#2$}}
+%</classXimera>
+% \end{macrocode}
+
+% \begin{macrocode}
+%<*htXimera>
+\renewcommand{\graph}[2][]{\HCode{<div class="graph" data-options="#1">}#2\HCode{</div>}}
+%</htXimera>
+% \end{macrocode}
+
diff --git a/macros/latex/contrib/ximera/src/interactives/include.dtx b/macros/latex/contrib/ximera/src/interactives/include.dtx
new file mode 100644
index 0000000000..76eaa0dd6f
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/interactives/include.dtx
@@ -0,0 +1,22 @@
+% \subsubsection{Including widgets}
+% \DescribeMacro{\includeinteractive}{Cognate to |includegraphics| but
+% instead of a graphics file, accepts a |.js| file which will be
+% loaded as an interactive widget.}
+% \begin{macrocode}
+%<*classXimera>
+\define@key{interactive}{id}{\def\interactive@id{#1}}
+\setkeys{interactive}{id=}
+\newcommand{\includeinteractive}[2][]{
+\setkeys*{interactive}{#1}%
+\ifthenelse{\equal{\interactive@id}{}}{}{\recordvariable{\interactive@id}}
+Interactive
+}
+%</classXimera>
+% \end{macrocode}
+% \begin{macrocode}
+%<*htXimera>
+\renewcommand{\includeinteractive}[2][]{\stepcounter{identification}\ifvmode \IgnorePar\fi \EndP\HCode{<div id="interactive\arabic{identification}" class="interactive"> </div>}\HCode{<script src="#2" data-argument="#1" data-target="interactive\arabic{identification}"> </script>}\IgnoreIndent}
+%</htXimera>
+% \end{macrocode}
+
+
diff --git a/macros/latex/contrib/ximera/src/interactives/javascript.dtx b/macros/latex/contrib/ximera/src/interactives/javascript.dtx
new file mode 100644
index 0000000000..c67a7e5235
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/interactives/javascript.dtx
@@ -0,0 +1,31 @@
+% \subsubsection{JavaScript}
+
+% \DescribeEnv{javascript}{Code inside a javascript environment is printed on paper, but executed on the web.}
+
+% \begin{macrocode}
+%<*classXimera>
+\DefineVerbatimEnvironment{javascript}{Verbatim}{numbers=left,frame=lines,label=JavaScript,labelposition=topline}
+%</classXimera>
+% \end{macrocode}
+
+% \begin{macrocode}
+%<*htXimera>
+% for programming javascript
+\renewenvironment{javascript}{\NoFonts}{\EndNoFonts}
+\ScriptEnv{javascript}{\stepcounter{identification}\ifvmode \IgnorePar\fi \EndP\HCode{<div class="javascript" id="javascript\arabic{identification}"><script type="text/javascript">}\HtmlParOff}{\HtmlParOn\HCode{</script></div>}}
+%</htXimera>
+% \end{macrocode}
+
+% \DescribeMacro{\js}{Code inside a |\js| macro is evaluated and replaced with its value.}
+% \begin{macrocode}
+%<*classXimera>
+\def\js#1{\mbox{\texttt{\detokenize{#1}}}}
+%</classXimera>
+% \end{macrocode}
+
+% \begin{macrocode}
+%<*htXimera>
+\def\js#1{\stepcounter{identification}\HCode{<span class="inline-javascript" id="javascript\arabic{identification}"><script type="text/javascript"> function javascript\arabic{identification}() }\{\HCode{ return \detokenize{#1}; }\}\HCode{</script></span>}}
+%</htXimera>
+% \end{macrocode}
+
diff --git a/macros/latex/contrib/ximera/src/interactives/sagemath.dtx b/macros/latex/contrib/ximera/src/interactives/sagemath.dtx
new file mode 100644
index 0000000000..95d378afde
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/interactives/sagemath.dtx
@@ -0,0 +1,43 @@
+% \subsection{SageMath support}
+% Load Sage\TeX\ if it exists.
+% \begin{macrocode}
+%<*classXimera>
+\IfFileExists{sagetex.sty}{\RequirePackage{sagetex}}{}
+%</classXimera>
+% \end{macrocode}
+
+% \DescribeEnv{sageCell}{Create an interactive SageMath widget.}
+% \begin{macrocode}
+%<*classXimera>
+\DefineVerbatimEnvironment{sageCell}{Verbatim}{numbers=left,frame=lines,label=SAGE,labelposition=topline}
+%</classXimera>
+% \end{macrocode}
+% \begin{macrocode}
+%<*htXimera>
+\renewenvironment{sageCell}{\NoFonts}{\EndNoFonts}
+\ScriptEnv{sageCell}{\ifvmode \IgnorePar\fi \EndP\HCode{<div class="sage"><script type="text/x-sage">}\HtmlParOff}{\HtmlParOn\HCode{\Hnewline</script></div>}}
+%</htXimera>
+% \end{macrocode}
+
+% \DescribeEnv{sageOutput}{Execute SageMath code and output the result.}
+% \begin{macrocode}
+%<*classXimera>
+\DefineVerbatimEnvironment{sageOutput}{Verbatim}{numbers=left,frame=lines,label=SAGE-Output,labelposition=topline}
+%</classXimera>
+% \end{macrocode}
+
+% \begin{macrocode}
+%<*htXimera>
+\renewenvironment{sageOutput}{\NoFonts}{\EndNoFonts}
+\ScriptEnv{sageOutput}{\ifvmode \IgnorePar\fi \EndP\HCode{<div class="sageOutput"><script type="text/x-sage">}}{\HCode{\Hnewline</script></div>}}
+%</htXimera>
+% \end{macrocode}
+
+% \DescribeEnv{sageSilent}{Execute SageMath code without outputing the result.}
+% \begin{macrocode}
+%<*htXimera>
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\renewenvironment{sagesilent}{\NoFonts}{\EndNoFonts}
+\ScriptEnv{sagesilent}{\ifvmode \IgnorePar\fi \EndP\HCode{<script type="text/sagemath">}\HtmlParOff}{\HtmlParOn\HCode{</script></div>}}
+%</htXimera>
+% \end{macrocode}
diff --git a/macros/latex/contrib/ximera/src/interactives/video.dtx b/macros/latex/contrib/ximera/src/interactives/video.dtx
new file mode 100644
index 0000000000..7f7979db3f
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/interactives/video.dtx
@@ -0,0 +1,21 @@
+% \subsubsection{Video}
+% \DescribeMacro{\youtube}{Youtube command. Requires id.}
+% \begin{macrocode}
+%<*classXimera>
+\newcommand{\youtube}[1]{YouTube link: \url{https://www.youtube.com/watch?v=#1}}
+%</classXimera>
+% \end{macrocode}
+% \begin{macrocode}
+%<*htXimera>
+\renewcommand{\youtube}[1]{\ifvmode \IgnorePar\fi \EndP\HCode{<div class="video youtube-player" data-youtube="#1">_</div>}}
+%</htXimera>
+% \end{macrocode}
+% Video commands are also emitted, slightly differently, when placed
+% at top-level in a xourse file.
+% \begin{macrocode}
+%<*htXourse>
+\renewcommand\youtube[1]{%
+\ifvmode \IgnorePar\fi \EndP\HCode{<a class="youtube" href="https://www.youtube.com/watch?v=#1">#1</a>}\IgnoreIndent%
+}
+%</htXourse>
+% \end{macrocode}
diff --git a/macros/latex/contrib/ximera/src/jax.dtx b/macros/latex/contrib/ximera/src/jax.dtx
new file mode 100644
index 0000000000..5441a139e1
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/jax.dtx
@@ -0,0 +1,115 @@
+% \subsubsection{MathJax support}
+% When using mathjax, dump all the |\newcommand|s to a |.jax| file.
+%
+% First, create the |.jax| file.
+% \begin{macrocode}
+%<*classXimera>
+\ifdefined\HCode
+ \else
+ \newwrite\myfile
+ \immediate\openout\myfile=\jobname.jax
+\fi
+%</classXimera>
+% \end{macrocode}
+% From |only.dtx| we must also create |prompt| on the MathJax side.
+% \begin{macrocode}
+%<*classXimera>
+\ifdefined\HCode
+ \else
+ \immediate\write\myfile{\unexpanded{\newenvironment}{prompt}{}{}}
+\fi
+%</classXimera>
+% \end{macrocode}
+% Redefine newcommand appropriately.
+% \begin{macrocode}
+%<*classXimera>
+\ifdefined\HCode
+ \else
+\let\@oldargdef\@argdef
+\long\def\@argdef#1[#2]#3{%
+\immediate\write\myfile{\unexpanded{\newcommand}{\unexpanded{#1}}[\unexpanded{#2}]{\unexpanded{#3}}}%
+\@oldargdef#1[#2]{#3}%
+}
+
+\let\@OldDeclareMathOperator\DeclareMathOperator
+\renewcommand{\DeclareMathOperator}[2]{\@OldDeclareMathOperator{#1}{#2}\immediate\write\myfile{\unexpanded{\DeclareMathOperator}{\unexpanded{#1}}{\unexpanded{#2}}}}
+
+\fi
+%</classXimera>
+% \end{macrocode}
+% Include the jax'ed newcommands
+% \begin{macrocode}
+%<*cfgXimera>
+% Remove commands that use @
+\immediate\write18{sed -i "/@/d" \jobname.jax}
+% Replace ##1 with #1 and so forth
+\immediate\write18{sed -i "s/\string#\string#\string\\([0-9]\string\\)/\string#\string\\1/g" \jobname.jax}
+
+\Configure{BVerbatimInput}{}{}{}{}
+
+\Configure{verbatiminput}{}{}{}{}
+
+% Instead of a nonbreaking space, use a standard space
+\makeatletter
+\def\FV@Space{\space}
+\makeatother
+
+% Include the mathjax newcommands in a math/tex script right at the beginning of the body
+\Configure{BODY}{%
+\HCode{<body>\Hnewline}%
+\Tg<div class="preamble">%
+\Tg<script type="math/tex">%
+\BVerbatimInput{\jobname.jax}%
+\Tg</script>%
+\IfFileExists{\jobname.ids}{\HCode{<script type="text/javascript">\Hnewline}%
+\BVerbatimInput{\jobname.ids}%
+\HCode{</script>\Hnewline}%
+\Tg</div>%
+}{}
+}{%
+\HCode{</body>\Hnewline}%
+}
+% \end{macrocode}
+% Now I just need to add a newcommand command which outputs the
+% appropriate newcommands to MathJax; then this should be "good
+% enough" for our purposes.
+% \begin{macrocode}
+\newtoks\eqtoks
+\def\AltMath#1${\eqtoks{#1}%
+ \HCode{<script type="math/tex">\the\eqtoks</script>}$}
+\Configure{$}{}{}{\expandafter\AltMath}
+
+\def\AltlMathI#1\){\eqtoks{#1}%
+ \HCode{<script type="math/tex">\the\eqtoks</script>}\)}
+\Configure{()}{\AltlMathI}{}
+
+\def\AltlDisplay#1\]{\eqtoks{#1}%
+ \HCode{<script type="math/tex; mode=display">\the\eqtoks</script>}\]}
+\Configure{[]}{\AltlDisplay}{}
+
+\def\AltlDisplayI#1$${\eqtoks{#1}%
+ \HCode{<script type="math/tex; mode=display">\the\eqtoks</script>}$$}
+\Configure{$$}{}{}{\expandafter\AltlDisplayI}
+% \end{macrocode}
+% Need to turn off htmlpar too, as expained in http://tex.stackexchange.com/questions/204930/vertical-spaces-in-htlatex-scriptenv
+% \begin{macrocode}
+\newcommand\VerbMath[1]{%
+\renewenvironment{#1}{\NoFonts}{\EndNoFonts}
+\ScriptEnv{#1}{\ifvmode \IgnorePar\fi \EndP\HCode{<script type="math/tex; mode=display"> \string\begin{#1}\Hnewline}\HtmlParOff}{\HtmlParOn\HCode{\string\end{#1}</script>}}
+}
+% \end{macrocode}
+% This is a fix for the LAODE book, which uses matlabEquation as if it were an equation
+% \begin{macrocode}
+\ScriptEnv{matlabEquation}{\ifvmode \IgnorePar\fi \EndP\HCode{<script type="math/tex; mode=display"> \string\begin{equation}\Hnewline}\HtmlParOff}{\HtmlParOn\HCode{\string\end{equation}</script>}}
+
+\VerbMath{equation}
+\VerbMath{equation*}
+\VerbMath{align}
+\VerbMath{align*}
+\VerbMath{alignat}
+\VerbMath{alignat*}
+\VerbMath{eqnarray}
+\VerbMath{eqnarray*}
+
+%</cfgXimera>
+% \end{macrocode}
diff --git a/macros/latex/contrib/ximera/src/labels.dtx b/macros/latex/contrib/ximera/src/labels.dtx
new file mode 100644
index 0000000000..05ecf31fc9
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/labels.dtx
@@ -0,0 +1,15 @@
+% \subsubsection{Labels and references}
+% Labels and refs both generate anchors.
+% \DescribeMacro{\label}{A |\label| can be referenced from any file in the xourse.}
+% \begin{macrocode}
+%<*htXimera>
+\let\oldlabel\label
+\renewcommand{\label}[1]{\oldlabel{#1}\HCode{<a class="ximera-label" id="#1"></a>}}
+%</htXimera>
+% \end{macrocode}
+% \DescribeMacro{\ref}{A |\ref| can connect one \TeX\ file to another if they are in the same xourse.}
+% \begin{macrocode}
+%<*htXimera>
+\renewcommand{\ref}[1]{\HCode{<a class="reference" href="\##1">#1</a>}}
+%</htXimera>
+% \end{macrocode}
diff --git a/macros/latex/contrib/ximera/src/leash.dtx b/macros/latex/contrib/ximera/src/leash.dtx
new file mode 100644
index 0000000000..b52b5e2bf0
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/leash.dtx
@@ -0,0 +1,18 @@
+% \subsubsection{Leashes}
+% \DescribeEnv{leash}{Put content inside a scrollable box.}
+% \begin{macrocode}
+%<*classXimera>
+
+\newenvironment{leash}[1]{%
+}{%
+}
+
+
+%</classXimera>
+% \end{macrocode}
+
+% \begin{macrocode}
+%<*htXimera>
+\renewenvironment{leash}[1]{\ifvmode \IgnorePar\fi \EndP\HCode{<div style="overflow: auto; height: #1px">}}{\HCode{</div>}\IgnoreIndent}
+%</htXimera>
+% \end{macrocode}
diff --git a/macros/latex/contrib/ximera/src/link.dtx b/macros/latex/contrib/ximera/src/link.dtx
new file mode 100644
index 0000000000..9e76659e83
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/link.dtx
@@ -0,0 +1,31 @@
+% Hyperlinks to outside documents
+% \begin{macrocode}
+%<*classXimera>
+\newcommand*{\link}[2][]{#1%
+ \ifthenelse{\equal{#1}{}}%
+ {\footnote{Link: \url{#2}}}%
+ {\footnote{See #1 at \url{#2}}}
+ }
+%</classXimera>
+% \end{macrocode}
+
+
+% \begin{macrocode}
+%<*htXimera>
+% This is a command used in versions of documents created with
+% these classes; in Jim's opinion it should be deprecated for |\href|
+% Bart on the other hand likes |\link|
+\renewcommand*{\link}[2][]{%
+\ifthenelse{\equal{#1}{}}%
+{\url{#2}}
+{\href{#2}{#1}}}
+%\renewcommand*{\link}[2][]{%
+%\ifthenelse{\equal{#1}{}}%
+%{\url{#2}}
+%{\href{#2}{#1}}}
+
+% because hyperref redefines stuff atbegindocument, we do too.
+\AtBeginDocument{\renewcommand{\ref}[1]{\HCode{<a class="reference" href="\##1">#1</a>}}}
+
+%</htXimera>
+% \end{macrocode}
diff --git a/macros/latex/contrib/ximera/src/logo.dtx b/macros/latex/contrib/ximera/src/logo.dtx
new file mode 100644
index 0000000000..cbe808502a
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/logo.dtx
@@ -0,0 +1,30 @@
+% \subsection{Logos}
+% \DescribeMacro{\logo}{A logo for the xourse.}
+% \begin{macrocode}
+%<*classXourse>
+\newcommand*{\logo}[1]{%
+ \ifx\@onlypreamble\@notprerr
+ \ClassError{xourse}{logo can only be used in the preamble}
+ {Move your logo command to the preamble}
+ \else %
+ \IfFileExists{#1}%
+ {\gdef\xourse@logo{#1}}%
+ {\ClassError{xourse}{logo file does not exist}
+ {To use logo, make sure that the referenced image file exists}}%
+ \fi%
+}
+
+%</classXourse>
+% \end{macrocode}
+
+% The xourse logo is an |og:image| in the opengraph taxonomy.
+% \begin{macrocode}
+%<*htXourse>
+\Configure{@HEAD}{%
+ \HCode{<meta name="og:image" content="}%
+\ifdefined\xourse@logo%
+ \xourse@logo%
+\fi%
+\HCode{" />\Hnewline}}%
+%</htXourse>
+% \end{macrocode}
diff --git a/macros/latex/contrib/ximera/src/macros.dtx b/macros/latex/contrib/ximera/src/macros.dtx
new file mode 100644
index 0000000000..0968942be5
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/macros.dtx
@@ -0,0 +1,14 @@
+% \subsubsection{Macros}
+% Makes everymath display style even when inline, could be optional.
+% \begin{macrocode}
+%<*classXimera>
+\everymath{\displaystyle}
+%</classXimera>
+% \end{macrocode}
+% Ok not everything, we also need to configure ``display style'' limits.
+% \begin{macrocode}
+%<*classXimera>
+\let\prelim\lim
+\renewcommand{\lim}{\displaystyle\prelim}
+%</classXimera>
+% \end{macrocode}
diff --git a/macros/latex/contrib/ximera/src/makeCounter.dtx b/macros/latex/contrib/ximera/src/makeCounter.dtx
new file mode 100644
index 0000000000..2e898255e7
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/makeCounter.dtx
@@ -0,0 +1,37 @@
+% \subsubsection{Utility macros}
+% These are a list of new utility macros that are generally useful and are loaded after packages and the Tikz Fix.
+% \begin{macrocode}
+%<*classXimera>
+% \end{macrocode}
+% \begin{macro}{NewCounter}
+% Improved version of |\newcounter| to check for existance before creating a counter to minimize conflicts with packages. Added by Jason Nowell
+% \begin{macrocode}
+\newcommand{\Make@Counter}[1]{% This is an internal macro that should probably be depreciated for the below universal macro.
+% Code located in "Utilitymacros.dtx"
+ \@ifundefined{c@#1}% Check to see if counter exists
+ { % If not, create it and set it to 0.
+ \newcounter{#1}
+ \setcounter{#1}{0}
+ }
+ {%If so, reset to 0.
+ \setcounter{#1}{0}
+ }
+}
+
+\newcommand{\MakeCounter}[1]{%% Code located in "Utilitymacros.dtx"
+% Code located in "Utilitymacros.dtx"
+ \@ifundefined{c@#1}% Check to see if counter exists
+ { % If not, create it and set it to 0.
+ \newcounter{#1}
+ \setcounter{#1}{0}
+ }
+ {%If so, reset to 0.
+ \setcounter{#1}{0}
+ }
+}
+% \end{macrocode}
+%</classXimera>
+% \end{macro}
+
+
+
diff --git a/macros/latex/contrib/ximera/src/metadata.dtx b/macros/latex/contrib/ximera/src/metadata.dtx
new file mode 100644
index 0000000000..5f33cde072
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/metadata.dtx
@@ -0,0 +1,32 @@
+% \subsubsection{Metadata}
+% To encourage authors to include relevant parseable metadata in the
+% preamble, we define some currently ignored commands.
+
+% \DescribeMacro{\license}{In the preamble, use |\license| with an SPDX license expression.}
+% \begin{macrocode}
+%<*classXimera>
+\newcommand{\license}{\excludecomment}
+%</classXimera>
+% \end{macrocode}
+
+% \DescribeMacro{\acknowledgement}{In the preamble, use |\acknowledgement| to credit others who contributed to the intellectual content beside the author.}
+% \begin{macrocode}
+%<*classXimera>
+\newcommand{\acknowledgement}{\excludecomment}
+%</classXimera>
+% \end{macrocode}
+
+% \DescribeMacro{\tag}{In the preamble, a |\tag| provides a free-form taxonomy.}
+% \begin{macrocode}
+%<*classXimera>
+\renewcommand{\tag}{\excludecomment}
+%</classXimera>
+% \end{macrocode}
+% On the HTML side, we mark the file as the appropriate kind of
+% object---either activity or xourse.
+% \begin{macrocode}
+%<*htXourse>
+% Mark this as a xourse file
+\Configure{@HEAD}{\HCode{<meta name="description" content="xourse" />\Hnewline}}
+%</htXourse>
+% \end{macrocode}
diff --git a/macros/latex/contrib/ximera/src/only.dtx b/macros/latex/contrib/ximera/src/only.dtx
new file mode 100644
index 0000000000..cdb676c90e
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/only.dtx
@@ -0,0 +1,38 @@
+% \subsubsection{Only}
+
+% \DescribeEnv{prompt}{The prompt part for mathmode}
+% \begin{macrocode}
+%<*classXimera>
+\ifxake
+ \newenvironment{prompt}{}{}
+\else
+\ifhandout
+ \NewEnviron{prompt}{}
+% Currently breaks when put in mathmode!
+% \newenvironment{prompt}{\suppress}{\endsuppress}
+\else
+ \newenvironment{prompt}
+ {\bgroup\color{gray!50!black}}
+ {\egroup}
+\fi
+\fi
+% \end{macrocode}
+
+% \DescribeEnv{onlineOnly}{Only display it online}
+% \begin{macrocode}
+\ifhandout
+ \NewEnviron{onlineOnly}{
+ \iftikzexport
+ \BODY
+ \else
+ \fi
+ }
+\else
+ \newenvironment{onlineOnly}
+ {\bgroup\color{red!50!black}}
+ {\egroup}
+\fi
+
+\newcommand{\pdfOnly}[1]{\iftikzexport\else #1\fi}
+%</classXimera>
+% \end{macrocode}
diff --git a/macros/latex/contrib/ximera/src/options.dtx b/macros/latex/contrib/ximera/src/options.dtx
new file mode 100644
index 0000000000..7e131bb0ba
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/options.dtx
@@ -0,0 +1,123 @@
+% \subsection{Options for the class}
+% We start by listing the options for the \textsf{ximera} document class. Note, since the \textsf{xourse} class is based on the \textsf{ximera} class, all listed options are available there too.
+%
+% \begin{macrocode}
+%<*classXimera>
+% \end{macrocode}
+% \begin{macro}{handout}
+% The default behavior of the class is to display \textbf{all} content. This means that if any questions are asked, all answers are shown. Moreover, some content will only have a meaningful presentation when displayed online. When compiled without any options, this content will be shown too. This option will supress such content and generate a reasonable printiable ``handout.''
+% \begin{macrocode}
+\newif\ifhandout
+\handoutfalse
+\DeclareOption{handout}{\handouttrue}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{noauthor}
+% By default, authors are listed at the bottom of the first page of a document. This option will supress the listing of the authors.
+% \begin{macrocode}
+\newif\ifnoauthor
+\noauthorfalse
+\DeclareOption{noauthor}{\noauthortrue}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{nooutcomes}
+% By default, learning outcomes are listed at the bottom of the first page of a document. This option will supress the listing of the learning outcomes.
+% \begin{macrocode}
+\newif\ifnooutcomes
+\nooutcomesfalse
+\DeclareOption{nooutcomes}{\nooutcomestrue}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{instructornotes}
+% This option will turn on (and off) notes written for the instructor.
+% \begin{macrocode}
+\newif\ifinstructornotes
+\instructornotesfalse
+\DeclareOption{instructornotes}{\instructornotestrue}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{noinstructornotes}
+% This option will turn off (and on) notes written for the instructor.
+% \begin{macrocode}
+\DeclareOption{noinstructornotes}{\instructornotestrue}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{hints}
+% When the \texttt{handout} options is used, hints are not shown. This option will make hints visible in handout mode.
+% \begin{macrocode}
+\newif\ifhints
+\hintsfalse
+\DeclareOption{hints}{\hintstrue}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{newpage}
+% This option will start each problem-like environment (\texttt{exercise}, \texttt{question}, \texttt{problem}, and \texttt{exploration}) start on a new page.
+% \begin{macrocode}
+\newif\ifnewpage
+\newpagefalse
+\DeclareOption{newpage}{\newpagetrue}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{numbers}
+% This option will number the titles of the activity. By default the activities are unnumbered.
+% \begin{macrocode}
+\newif\ifnumbers
+\numbersfalse
+\DeclareOption{numbers}{\numberstrue}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{wordchoicegiven}
+% This option will replace the choices shown by \texttt{wordChoice} with the correct choice. No indication of the \texttt{wordChoice} environment will be shown.
+% \begin{macrocode}
+\newif\ifwordchoicegiven
+\wordchoicegivenfalse
+\DeclareOption{wordchoicegiven}{\wordchoicegiventrue}
+\newif\iffirstinlinechoice% Support for other wordchoice command contents.
+\firstinlinechoicetrue
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+
+\newif\ifxake
+\xakefalse
+\DeclareOption{xake}{\xaketrue}
+
+\newif\iftikzexport
+\tikzexportfalse
+\DeclareOption{tikzexport}{%
+ \tikzexporttrue%
+ \handoutfalse%
+ \numbersfalse%
+ \newpagefalse%
+ \hintsfalse%
+ \nooutcomesfalse%
+}
+
+\DeclareOption*{%
+ \PassOptionsToClass{\CurrentOption}{article}%
+}
+\ProcessOptions\relax
+\LoadClass{article}
+
+\ifdefined\HCode
+ \xaketrue%
+ \tikzexporttrue%
+ \handoutfalse%
+ \numbersfalse%
+ \newpagefalse%
+ \hintsfalse%
+ \nooutcomesfalse%
+\fi
+
+%</classXimera>
+% \end{macrocode}
+
+
+
diff --git a/macros/latex/contrib/ximera/src/optionsxourse.dtx b/macros/latex/contrib/ximera/src/optionsxourse.dtx
new file mode 100644
index 0000000000..1217fce199
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/optionsxourse.dtx
@@ -0,0 +1,27 @@
+% \begin{macrocode}
+%<*classXourse>
+% \end{macrocode}
+% \begin{macro}{notoc}
+% The default behavior of the class is to provide a table of contents listing all activities in the course. This option will supress this table of contents.
+% \begin{macrocode}
+\newif\ifnotoc
+\notocfalse
+\DeclareOption{notoc}{\notoctrue}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{nonewpage}
+% The default behavior of the class is to start each activity on a new page. This option will start activities without making a new page.
+% \begin{macrocode}
+\newif\ifnonewpage
+\nonewpagefalse
+\DeclareOption{nonewpage}{\nonewpagetrue}
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+\DeclareOption*{\PassOptionsToClass{\CurrentOption}{ximera}}
+\ProcessOptions\relax
+\LoadClass{ximera}
+% \begin{macrocode}
+%</classXourse>
+% \end{macrocode}
+
diff --git a/macros/latex/contrib/ximera/src/outcomes.dtx b/macros/latex/contrib/ximera/src/outcomes.dtx
new file mode 100644
index 0000000000..1e174b7655
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/outcomes.dtx
@@ -0,0 +1,34 @@
+% \subsubsection{Learning Outcomes}
+% \DescribeMacro{\outcome}{Specify a learning outcome, either at the level of a |problem| or an entire document in the preamble.}
+% \begin{macrocode}
+%<*classXimera>
+\def\theoutcomes{}
+
+\ifdefined\HCode%
+ \newcommand{\outcome}[1]{}
+\else%
+ \newwrite\outcomefile
+ \immediate\openout\outcomefile=\jobname.oc
+
+ \newcommand{\outcome}[1]{\edef\theoutcomes{\theoutcomes #1~}%
+ \immediate\write\outcomefile{\unexpanded{\outcome}{#1}}}
+ \fi%
+%</classXimera>
+% \end{macrocode}
+% These can appear in either the preamble or in problem environments.
+% with pdflatex, we produce the .oc file which includes ALL the
+% outcomes; in the tex4ht world, we just produce spans for the
+% specific outcomes.
+% \begin{macrocode}
+%<*cfgXimera>
+\renewcommand{\outcome}[1]{
+ \Configure{@HEAD}{\HCode{<meta name="learning-outcome" content="#1"/>\Hnewline}}
+}
+% Sometimes there are no outcomes at all
+\IfFileExists{\jobname.oc}{\input{\jobname.oc}}{}
+
+\renewcommand{\outcome}[1]{%
+ \HCode{<span class="learning-outcome">#1</span>}
+}
+%</cfgXimera>
+% \end{macrocode}
diff --git a/macros/latex/contrib/ximera/src/packages.dtx b/macros/latex/contrib/ximera/src/packages.dtx
new file mode 100644
index 0000000000..72fb4c6e2a
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/packages.dtx
@@ -0,0 +1,54 @@
+% \begin{macrocode}
+%<*classXimera>
+% \end{macrocode}
+% \subsection{Loading packages}
+% Since we want |\cancel| to work, we load it here to avoid polluting the |.jax| output.
+% \begin{macrocode}
+\RequirePackage[makeroom]{cancel}
+% \end{macrocode}
+% Quite a few packages are required by the document class. This is a
+% list of required packages. As packages are added to this list, we
+% should include a comment as to where they are being utilized. This
+% will help keep this list from being redundant and/or outdated.
+% \begin{macrocode}
+\RequirePackage[inline]{enumitem}
+\RequirePackage[pagestyles]{titlesec}
+\RequirePackage{titletoc}
+\RequirePackage{titling}
+\RequirePackage{url}
+\RequirePackage[table]{xcolor}
+\RequirePackage{tikz}
+\RequirePackage{pgfplots}
+\usepgfplotslibrary{groupplots}
+\usetikzlibrary{calc}
+\RequirePackage{fancyvrb}
+% \end{macrocode}
+% Load |forloop| for the problem environment dynamic naming and
+% building.
+% \begin{macrocode}
+\RequirePackage{forloop}
+% \end{macrocode}
+% Now we load even more packages.
+% \begin{macrocode}
+\RequirePackage{environ}% Included to allow saving of environment contents. This does *not* play well with various verbatem environments however and would be great to find a way around utilizing this package. One option is the "Suppress" command included below.
+\RequirePackage{amssymb}% Included to have access to math typeset.
+\RequirePackage{amsmath}% Included to have access to math typeset.
+\RequirePackage{amsthm}% Included to have access to math typeset.
+\RequirePackage{xifthen}% http://ctan.org/pkg/xifthen
+\RequirePackage{multido}% http://ctan.org/pkg/multido
+\RequirePackage{listings} %% is this required???
+
+\RequirePackage{xkeyval}
+
+\RequirePackage{comment}
+%</classXimera>
+% \end{macrocode}
+% Various packages must be loaded early to avoid polluting the |.jax|
+% file.
+% \begin{macrocode}
+%<*classXimera>
+\RequirePackage{gettitlestring}
+\RequirePackage{nameref}
+\RequirePackage{epstopdf}
+%</classXimera>
+% \end{macrocode}
diff --git a/macros/latex/contrib/ximera/src/pagesetup.dtx b/macros/latex/contrib/ximera/src/pagesetup.dtx
new file mode 100644
index 0000000000..9bf13d3cd9
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/pagesetup.dtx
@@ -0,0 +1,55 @@
+% \subsection{Page setup}
+% We want non-indented spaced-out paragraphs.
+% \begin{macrocode}
+%<*classXimera>
+\setlength{\parindent}{0pt}
+\setlength{\parskip}{5pt}
+%</classXimera>
+% \end{macrocode}
+% To avoid weird margins in 2-sided mode, change the margins.
+% \begin{macrocode}
+%<*classXimera>
+\oddsidemargin 62pt
+\evensidemargin 62pt
+\textwidth 345pt
+\headheight 14pt
+%</classXimera>
+% \end{macrocode}
+% On the HTML side, there is more complicated page setup to perform.
+% \begin{macrocode}
+%<*cfgXimera>
+\Preamble{xhtml}
+
+% We don't want to translate font suggestions with ugly wrappers like
+% <span class="cmti-10"> for italic text
+\NoFonts
+
+% Don't output xml version tag
+\Configure{VERSION}{}
+
+% Output HTML5 doctype instead of the default for HTML4
+\Configure{DOCTYPE}{\HCode{<!doctype html>\Hnewline}}
+
+% Custom page opening
+\Configure{HTML}{\HCode{<html lang="en">\Hnewline}}{\HCode{\Hnewline</html>}}
+
+% Reset <head>, aka delete all default boilerplate; alternatively set up new content
+\Configure{@HEAD}{\HCode{<meta name="generator" content="TeX4ht (http://www.cse.ohio-state.edu/\string~gurari/TeX4ht/)" />\Hnewline}}
+\Configure{@HEAD}{\HCode{<meta name="ximera" content="version 0.0.1" />\Hnewline}}
+\Configure{@HEAD}{\HCode{<link href="https://ximera.osu.edu/public/stylesheets/standalone.css" rel="stylesheet" media="screen"/>\Hnewline}}
+\Configure{@HEAD}{\HCode{<script type="text/javascript" async src="https://ximera.osu.edu/public/javascripts/standalone.min.js"></script>\Hnewline}}
+%</cfgXimera>
+% \end{macrocode}
+% Disable certain ligatures in HTML.
+% \begin{macrocode}
+%<*htXimera>
+\usepackage{microtype}
+\DisableLigatures[f]{encoding=*}
+%</htXimera>
+% \end{macrocode}
+% I am not sure what this does.
+% \begin{macrocode}
+%<*htXimera>
+\NewEnviron{html}{\HCode{\BODY}}
+%</htXimera>
+% \end{macrocode} \ No newline at end of file
diff --git a/macros/latex/contrib/ximera/src/problem.dtx b/macros/latex/contrib/ximera/src/problem.dtx
new file mode 100644
index 0000000000..4a8cfaeddb
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/problem.dtx
@@ -0,0 +1,197 @@
+% \subsubsection{Problem environments}
+
+% These are problem environment decorations (these should be user invoked, not default).
+% The decoration for these environments were inspired by
+% \url{http://tex.stackexchange.com/questions/11098/nice-formatting-for-theorems}
+% \begin{macrocode}
+%<*classXimera>
+% \end{macrocode}
+
+% \begin{macro}{latexProblemContent}
+% Added for those that want to use UF problems without using the problem filter code. This command is renewed into something meaningful in the 'ProblemSelector.sty'.
+% \begin{macrocode}
+\providecommand{\latexProblemContent}[1]{#1}
+% Iterate count for problem counts.
+\Make@Counter{Iteration@probCnt}
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+\newcommand{\hang}{% top theorem decoration
+ \begingroup%
+ \setlength{\unitlength}{.005\linewidth}% \linewidth/200
+ \begin{picture}(0,0)(1.5,0)%
+ \linethickness{1pt} \color{black!50}%
+ \put(-3,2){\line(1,0){206}}% Top line
+ \multido{\iA=2+-1,\iB=50+-10}{5}{% Top hangs
+ \color{black!\iB}%
+ \put(-3,\iA){\line(0,-1){1}}% Top left hang
+ %\put(203,\iA){\line(0,-1){1}}% Top right hang
+ }%
+ \end{picture}%
+ \endgroup%
+}%
+\newcommand{\hung}{% bottom theorem decoration
+ \nobreak
+ \begingroup%
+ \setlength{\unitlength}{.005\linewidth}% \linewidth/200
+ \begin{picture}(0,0)(1.5,0)%
+ \linethickness{1pt} \color{black!50}%
+ \put(60,0){\line(1,0){143}}% Bottom line
+ \multido{\iA=0+1,\iB=50+-10}{5}{% Bottom hangs
+ \color{black!\iB}%
+ %\put(-3,\iA){\line(0,1){1}}% Bottom left hang
+ \put(203,\iA){\line(0,1){1}}% Bottom right hang
+ \put(\iB,0){\line(60,0){10}}% Left fade out
+ }%
+ \end{picture}%
+ \endgroup%
+}%
+% \end{macrocode}
+%
+% Configure environment configuration commands
+%
+% The command |\problemNumber| contains all the format code to determine the number (and the format of the number) for any of the problem environments.
+%
+% \begin{macrocode}
+\MakeCounter{problem}
+\newcommand{\problemNumber}{
+% First we determine if we have a counter for this question depth level.
+\ifcsname c@depth\Roman{problem@Depth}Count\endcsname% Check to see if counter exists
+ %If so, do nothing.
+ \else
+ %If not, create it.
+ \expandafter\newcounter{depth\Roman{problem@Depth}Count}
+ \expandafter\setcounter{depth\Roman{problem@Depth}Count}{0}
+ \fi
+
+\expandafter\stepcounter{depth\Roman{problem@Depth}Count}
+\arabic{depthICount}% The first problem depth, what use to be |\theproblem|.
+
+\forloop{Iteration@probCnt}{2}{\arabic{Iteration@probCnt} < \numexpr \value{problem@Depth} + 1 \relax}{%
+ .\expandafter\arabic{depth\Roman{Iteration@probCnt}Count}% Get the problem number of the next depth level and append it with a ".".
+}
+%\@ifpackageloaded{shuffle}{<true>}{<false>}% Check if Shuffle has been added. If so, add special numbering to the shuffled "groups". Currently commented out while we decide what that should look like (compared to the normal nested problems).
+%\ifhandout % Currently handout mode doesn't allow hints. Putting this code in place in case that changes.
+% \theproblem
+%\else
+% \theproblem
+%\fi
+}
+
+
+%%%%%% Configure various problem environment commands
+\Make@Counter{problem@Depth}
+
+
+
+%%%% Configure environments start content
+
+\newcommand{\problemEnvironmentStart}[2]{%
+% This takes in 2 arguments.
+% The first is optional and is the old optional argument from existing environments.
+% This is passed down to the associated problem environment name in case you want a global value.
+% The second argument is mandatory and is the name of the 'problem' environment,
+% such as problem, question, exercise, etc.
+% It then configures everything needed at the start of that environment.
+
+\stepcounter{problem@Depth}% Started a problem, so we've sunk another problem layer.
+\def\spaceatend{#1}%
+\begin{trivlist}%
+\item%
+ [%
+ \hskip\labelsep\sffamily\bfseries
+ #2 \problemNumber% Determine the correct number of the problem, and the format of that number.
+ ]%
+\slshape
+}
+
+
+
+%%%%% Configure environments end content
+
+\newcommand{\problemEnvironmentEnd}{%This configures all the end content for a problem.
+%
+% First we need to see if we've dropped fully out of a depth level,
+% so we can reset that counter back to zero for the next time we enter that depth level.
+\stepcounter{problem@Depth}
+\ifcsname c@depth\Roman{problem@Depth}Count\endcsname
+ \expandafter\ifnum\expandafter\value{depth\Roman{problem@Depth}Count}>0
+ \expandafter\setcounter{depth\Roman{problem@Depth}Count}{0}
+ \fi
+\fi
+
+\addtocounter{problem@Depth}{-2}% Exited a problem so we've exited a problem layer. Need -2 because we steppped once at the start to check for needing a depth-level count reset.
+
+\par\addvspace{.5ex}\nobreak\noindent\hung %% line at the bottom
+
+\ifhandout
+ \ifnewpage
+ \newpage
+ \fi
+\fi
+\end{trivlist}
+}
+
+
+
+%%%% Now populate the old environment names
+%
+% Old environments were "problem", "exercise", "exploration", and "question".
+% Note that you can add content to the start/end code on top of these base code pieces if you want.
+
+
+\newenvironment{problem}[1][2in]%
+{%Env start code
+\problemEnvironmentStart{#1}{Problem}
+}
+{%Env end code
+\problemEnvironmentEnd
+}
+
+\newenvironment{exercise}[1][2in]%
+{%Env start code
+\problemEnvironmentStart{#1}{Exercise}
+}
+{%Env end code
+\problemEnvironmentEnd
+}
+
+\newenvironment{exploration}[1][2in]%
+{%Env start code
+\problemEnvironmentStart{#1}{Exploration}
+}
+{%Env end code
+\problemEnvironmentEnd
+}
+
+\newenvironment{question}[1][2in]%
+{%Env start code
+\problemEnvironmentStart{#1}{Question}
+}
+{%Env end code
+\problemEnvironmentEnd
+}
+%</classXimera>
+% \end{macrocode}
+
+
+% Use an ``identification'' counter to assign IDs to the various problem-related DOM elements
+% \begin{macrocode}
+%<*htXimera>
+\newcounter{identification}
+\setcounter{identification}{0}
+
+\newcommand{\ConfigureQuestionEnv}[2]{%
+% refstepcounter ensures that labels get updated within these environments
+\renewenvironment{#1}{\refstepcounter{problem}}{}%
+\ConfigureEnv{#1}{\stepcounter{identification}\ifvmode \IgnorePar\fi \EndP\HCode{<div role="article" class="problem-environment #2" id="problem\arabic{identification}">}}{\ifvmode \IgnorePar\fi \EndP\HCode{</div>}\IgnoreIndent}{}{}%
+}
+
+\ConfigureQuestionEnv{problem}{problem}
+\ConfigureQuestionEnv{exercise}{exercise}
+\ConfigureQuestionEnv{question}{question}
+\ConfigureQuestionEnv{exploration}{exploration}
+\ConfigureQuestionEnv{hint}{hint}
+%%%%\ConfigureQuestionEnv{shuffle}{shuffle}
+%</htXimera>
+% \end{macrocode}
diff --git a/macros/latex/contrib/ximera/src/proof.dtx b/macros/latex/contrib/ximera/src/proof.dtx
new file mode 100644
index 0000000000..ab86e93f52
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/proof.dtx
@@ -0,0 +1,10 @@
+% \subsubsection{Proofs}
+% \DescribeEnv{proof}{A mathematical proof environment.}
+% \begin{macrocode}
+%<*classXimera>
+\renewcommand{\qedsymbol}{$\blacksquare$}
+\renewenvironment{proof}[1][\proofname]
+ {\begin{trivlist}\item[\hskip \labelsep \itshape \bfseries #1{}\hspace{2ex}]}
+{\qed\end{trivlist}}
+%</classXimera>
+% \end{macrocode}
diff --git a/macros/latex/contrib/ximera/src/sectioning.dtx b/macros/latex/contrib/ximera/src/sectioning.dtx
new file mode 100644
index 0000000000..3f9100294d
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/sectioning.dtx
@@ -0,0 +1,49 @@
+% \subsection{Sectioning}
+% Makes the table of contents look a bit better. This can be
+% redefined in the preamble if you do not like the appearance.
+% \DescribeMacro{\section}{The name of a section inside an activity.}
+% \begin{macrocode}
+%<*classXourse>
+\renewcommand*\l@section{\@dottedtocline{1}{1.5em}{4.2em}}
+%</classXourse>
+% \end{macrocode}
+% \DescribeMacro{\subsection}{The name of a subsection inside an activity.}
+% \begin{macrocode}
+%<*classXourse>
+\renewcommand*\l@subsection{\@dottedtocline{2}{3.8em}{4.2em}}
+%</classXourse>
+% \end{macrocode}
+% Xourse files can have parts.
+% \DescribeMacro{\part}{The name of a large part of a xourse.}
+% \begin{macrocode}
+%<*htXourse>
+\newcounter{ximera@part}
+\setcounter{ximera@part}{0}
+\renewcommand\part[1]{%
+\stepcounter{ximera@part}%
+\ifvmode \IgnorePar\fi \EndP%
+%\HCode{<h1 id="part\arabic{ximera@part}" class="card part">}#1\HCode{</h1>}% makes cards disappear?
+\HCode{<h1 id="part\arabic{ximera@part}" class="card part">#1</h1>}%
+\IgnoreIndent%
+}
+%</htXourse>
+% \end{macrocode}
+% Paragraph commands emit spans.
+% \DescribeMacro{\paragraph}{A small heading.}
+% \begin{macrocode}
+%<*cfgXimera>
+\renewcommand{\paragraph}[1]{%
+ \HCode{<span class="paragraphHead">}%
+ #1%
+ \HCode{</span>}\par\IgnorePar}
+%</cfgXimera>
+% \end{macrocode}
+% \DescribeMacro{\subparagraph}{An even smaller heading.}
+% \begin{macrocode}
+%<*cfgXimera>
+\renewcommand{\subparagraph}[1]{%
+ \HCode{<span class="subparagraphHead">}%
+ #1%
+ \HCode{</span>}\par\IgnorePar}
+%</cfgXimera>
+% \end{macrocode}
diff --git a/macros/latex/contrib/ximera/src/solution.dtx b/macros/latex/contrib/ximera/src/solution.dtx
new file mode 100644
index 0000000000..45f6301031
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/solution.dtx
@@ -0,0 +1,30 @@
+% \subsubsection{Solution}
+% \DescribeEnv{solution}{The solution to a problem.}
+% \begin{macrocode}
+%<*classXimera>
+%% solution environment
+\ifhandout % what follows is handout behavior
+\newenvironment{solution}%
+ {%
+ \setbox0\vbox\bgroup
+ }
+ {%
+ \egroup
+ }
+\else
+\newenvironment{solution}%
+ {%
+ \begin{trivlist}
+ \item[\hskip \labelsep\bfseries Solution:\hspace{2ex}]
+ }
+ % %% line at the bottom}
+ {
+ \end{trivlist}
+ \par\addvspace{.5ex}\nobreak\noindent\hung
+ }
+\fi
+
+
+
+%</classXimera>
+% \end{macrocode}
diff --git a/macros/latex/contrib/ximera/src/suppress.dtx b/macros/latex/contrib/ximera/src/suppress.dtx
new file mode 100644
index 0000000000..dcdcf924d1
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/suppress.dtx
@@ -0,0 +1,33 @@
+% \subsubsection{Suppress}
+% \DescribeEnv{suppress}{The suppress environment is a good way to suppress output without
+% commenting it. This way we can avoid many of the places we use
+% environ package and this should also avoid most of the verbatim
+% conflicts.}
+% This is code adapted from |syntonly.sty|.
+% \begin{macrocode}
+%<*classXimera>
+\font\dummyft@=dummy \relax
+\def\suppress{%
+ \begingroup\par
+ \parskip\z@
+ \offinterlineskip
+ \baselineskip=\z@skip
+ \lineskip=\z@skip
+ \lineskiplimit=\maxdimen
+ \dummyft@
+ \count@\sixt@@n
+ \loop\ifnum\count@ >\z@
+ \advance\count@\m@ne
+ \textfont\count@\dummyft@
+ \scriptfont\count@\dummyft@
+ \scriptscriptfont\count@\dummyft@
+ \repeat
+ \let\selectfont\relax
+ \let\mathversion\@gobble
+ \let\getanddefine@fonts\@gobbletwo
+ \tracinglostchars\z@
+ \frenchspacing
+ \hbadness\@M}
+\def\endsuppress{\par\endgroup}
+%</classXimera>
+% \end{macrocode} \ No newline at end of file
diff --git a/macros/latex/contrib/ximera/src/textcolor.dtx b/macros/latex/contrib/ximera/src/textcolor.dtx
new file mode 100644
index 0000000000..318d34365a
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/textcolor.dtx
@@ -0,0 +1,20 @@
+% Make \textcolor work using https://tex.stackexchange.com/questions/390127/textcolor-with-tex4ht
+% \begin{macrocode}
+%<*cfgXimera>
+\makeatletter
+\Configure{textcolor}{\HCode{<span style="color:\#\tsf@color;">}}{\HCode{</span>}}
+% redefine \textcolor command
+\let\oldtextcolor\textcolor
+
+\renewcommand\textcolor[2]{%
+ % we need to convert the current color to hexadecimal form usable in the style attribute
+ % the \tsf@color macro is used in the \Configure{textcolor} configuration to insert the
+ % CSS color
+ \extractcolorspec{#1}{\tsf@color}%
+ \expandafter\convertcolorspec\tsf@color{HTML}\tsf@color%
+ % call the original command
+ \oldtextcolor{#1}{#2}%
+}%
+\makeatother
+%</cfgXimera>
+% \end{macrocode}
diff --git a/macros/latex/contrib/ximera/src/theorems.dtx b/macros/latex/contrib/ximera/src/theorems.dtx
new file mode 100644
index 0000000000..292d7a89b2
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/theorems.dtx
@@ -0,0 +1,174 @@
+% \subsubsection{Theorem and theorem-like environments}
+% On the web, a theorem is emitted as a special |<div>|.
+% \begin{macrocode}
+%<*htXimera>
+\newcommand{\ConfigureTheoremEnv}[1]{%
+\renewenvironment{#1}[1][]{\refstepcounter{problem}%
+\ifthenelse{\equal{##1}{}}{}{%
+ \HCode{<span class="theorem-like-title">}##1\HCode{</span>}%
+}}{}
+\ConfigureEnv{#1}{\stepcounter{identification}\ifvmode \IgnorePar\fi \EndP\HCode{<div class="theorem-like problem-environment #1" id="problem\arabic{identification}">}}{\HCode{</div>}\IgnoreIndent}{}{}%
+}
+%</htXimera>
+%<classXimera>\theoremstyle{definition} % No italic (because this makes also text in TikZ italic !!!)
+% \end{macrocode}
+
+% The key is to make sure that the theorem environments are defined in
+% a corresponding fashion on the web and on paper.
+
+% \DescribeEnv{theorem}{Theorem}
+% \begin{macrocode}
+%<classXimera> \newtheorem{theorem}{Theorem}
+%<htXimera> \ConfigureTheoremEnv{theorem}
+% \end{macrocode}
+
+% \DescribeEnv{algorithm}{Algorithm}
+% \begin{macrocode}
+%<classXimera> \newtheorem{algorithm}{Algorithm}
+%<htXimera> \ConfigureTheoremEnv{algorithm}
+% \end{macrocode}
+
+% \DescribeEnv{axiom}{Axiom}
+% \begin{macrocode}
+%<classXimera> \newtheorem{axiom}{Axiom}
+%<htXimera> \ConfigureTheoremEnv{axiom}
+% \end{macrocode}
+
+% \DescribeEnv{claim}{Claim}
+% \begin{macrocode}
+%<classXimera> \newtheorem{claim}{Claim}
+%<htXimera> \ConfigureTheoremEnv{claim}
+% \end{macrocode}
+
+% \DescribeEnv{conclusion}{Conclusion}
+% \begin{macrocode}
+%<classXimera> \newtheorem{conclusion}{Conclusion}
+%<htXimera> \ConfigureTheoremEnv{conclusion}
+% \end{macrocode}
+
+% \DescribeEnv{condition}{Condition}
+% \begin{macrocode}
+%<classXimera> \newtheorem{condition}{Condition}
+%<htXimera> \ConfigureTheoremEnv{condition}
+% \end{macrocode}
+
+% \DescribeEnv{conjecture}{Conjecture}
+% \begin{macrocode}
+%<classXimera> \newtheorem{conjecture}{Conjecture}
+%<htXimera> \ConfigureTheoremEnv{conjecture}
+% \end{macrocode}
+
+% \DescribeEnv{corollary}{Corollary}
+% \begin{macrocode}
+%<classXimera> \newtheorem{corollary}{Corollary}
+%<htXimera> \ConfigureTheoremEnv{corollary}
+% \end{macrocode}
+
+% \DescribeEnv{criterion}{Criterion}
+% \begin{macrocode}
+%<classXimera> \newtheorem{criterion}{Criterion}
+%<htXimera> \ConfigureTheoremEnv{criterion}
+% \end{macrocode}
+
+% \DescribeEnv{definition}{Definition}
+% \begin{macrocode}
+%<classXimera> \newtheorem{definition}{Definition}
+%<htXimera> \ConfigureTheoremEnv{definition}
+% \end{macrocode}
+
+% \DescribeEnv{example}{Example}
+% \begin{macrocode}
+%<classXimera> \newtheorem{example}{Example}
+%<htXimera> \ConfigureTheoremEnv{example}
+% \end{macrocode}
+
+% \DescribeEnv{explanation}{Explanation}
+% \begin{macrocode}
+%<classXimera> \newtheorem*{explanation}{Explanation}
+%<htXimera> \ConfigureTheoremEnv{explanation}
+% \end{macrocode}
+
+% \DescribeEnv{fact}{Fact}
+% \begin{macrocode}
+%<classXimera> \newtheorem{fact}{Fact}
+%<htXimera> \ConfigureTheoremEnv{fact}
+% \end{macrocode}
+
+% \DescribeEnv{lemma}{Lemma}
+% \begin{macrocode}
+%<classXimera> \newtheorem{lemma}{Lemma}
+%<htXimera> \ConfigureTheoremEnv{lemma}
+% \end{macrocode}
+
+% \DescribeEnv{formula}{Formula}
+% \begin{macrocode}
+%<classXimera> \newtheorem{formula}{Formula}
+%<htXimera> \ConfigureTheoremEnv{formula}
+% \end{macrocode}
+
+% \DescribeEnv{idea}{Idea}
+% \begin{macrocode}
+%<classXimera> \newtheorem{idea}{Idea}
+%<htXimera> \ConfigureTheoremEnv{idea}
+% \end{macrocode}
+
+% \DescribeEnv{notation}{Notation}
+% \begin{macrocode}
+%<classXimera> \newtheorem{notation}{Notation}
+%<htXimera> \ConfigureTheoremEnv{notation}
+% \end{macrocode}
+
+% \DescribeEnv{model}{Model}
+% \begin{macrocode}
+%<classXimera> \newtheorem{model}{Model}
+%<htXimera> \ConfigureTheoremEnv{model}
+% \end{macrocode}
+
+% \DescribeEnv{observation}{Observation}
+% \begin{macrocode}
+%<classXimera> \newtheorem{observation}{Observation}
+%<htXimera> \ConfigureTheoremEnv{observation}
+% \end{macrocode}
+
+% \DescribeEnv{proposition}{Proposition}
+% \begin{macrocode}
+%<classXimera> \newtheorem{proposition}{Proposition}
+%<htXimera> \ConfigureTheoremEnv{proposition}
+% \end{macrocode}
+
+% \DescribeEnv{paradox}{Paradox}
+% \begin{macrocode}
+%<classXimera> \newtheorem{paradox}{Paradox}
+%<htXimera> \ConfigureTheoremEnv{paradox}
+% \end{macrocode}
+
+% \DescribeEnv{procedure}{Procedure}
+% \begin{macrocode}
+%<classXimera> \newtheorem{procedure}{Procedure}
+%<htXimera> \ConfigureTheoremEnv{procedure}
+% \end{macrocode}
+
+% \DescribeEnv{remark}{Remark}
+% \begin{macrocode}
+%<classXimera> \newtheorem{remark}{Remark}
+%<htXimera> \ConfigureTheoremEnv{remark}
+% \end{macrocode}
+
+% \DescribeEnv{summary}{Summary}
+% \begin{macrocode}
+%<classXimera> \newtheorem{summary}{Summary}
+%<htXimera> \ConfigureTheoremEnv{summary}
+% \end{macrocode}
+
+% \DescribeEnv{template}{Template}
+% \begin{macrocode}
+%<classXimera> \newtheorem{template}{Template}
+%<htXimera> \ConfigureTheoremEnv{template}
+% \end{macrocode}
+
+% \DescribeEnv{warning}{Warning}
+% \begin{macrocode}
+%<classXimera> \newtheorem{warning}{Warning}
+%<htXimera> \ConfigureTheoremEnv{warning}
+% \end{macrocode}
+
diff --git a/macros/latex/contrib/ximera/src/tikzexport.dtx b/macros/latex/contrib/ximera/src/tikzexport.dtx
new file mode 100644
index 0000000000..c89f26a49a
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/tikzexport.dtx
@@ -0,0 +1,42 @@
+% \subsubsection{TikZ export}
+% We generate SVGs and PNGs for any TikZ images, via the
+% ``externalize'' feature of TikZ.
+%
+% Currently TikZ doesn't compile natively into the website because of
+% how the xake bake compilation works. In order to make Tikz work,
+% you need to get the tool \verb|mutool| on the machine that is
+% performing \verb|xake bake|.
+% \begin{macrocode}
+%<*classXimera>
+\ifdefined\HCode
+ \tikzexporttrue
+\fi
+
+\iftikzexport
+ \usetikzlibrary{external}
+
+ \ifdefined\HCode
+ % in htlatex, just include the svg files
+ \def\pgfsys@imagesuffixlist{.svg}
+
+ \tikzexternalize[prefix=./,mode=graphics if exists]
+ \else
+ % in pdflatex, actually generate the svg files
+ \tikzset{
+ /tikz/external/system call={
+ pdflatex \tikzexternalcheckshellescape
+ -halt-on-error -interaction=batchmode
+ -jobname "\image" "\\PassOptionsToClass{tikzexport}{ximera}\texsource";
+ mutool draw -F svg \image.pdf > \image.svg ; % mutool adds "1" to filename ????
+ mutool draw -o \image.svg \image.pdf ;
+ mutool draw -r 150 -c rgbalpha -o \image.png \image.pdf ;
+ ebb -x \image.png
+ }
+ }
+ \tikzexternalize[optimize=false,prefix=./]
+ \fi
+
+ \fi
+
+%</classXimera>
+% \end{macrocode}
diff --git a/macros/latex/contrib/ximera/src/title.dtx b/macros/latex/contrib/ximera/src/title.dtx
new file mode 100644
index 0000000000..56380af5d7
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/title.dtx
@@ -0,0 +1,122 @@
+% \subsubsection{Titles and authors}
+%
+% \subsubsection{Authors}
+% \DescribeMacro{\author}{Activities have authors. Warn the user if no author is provided.}
+% \begin{macrocode}
+%<*classXimera>
+\let\@emptyauthor\@author
+\def\author#1{\gdef\@author{#1}}
+\def\@author{\@latex@warning@no@line{No \noexpand\author given}}
+%</classXimera>
+% \end{macrocode}
+% Include author name in meta tags
+% \begin{macrocode}
+%<*htXimera>
+\Configure{@HEAD}{\HCode{<meta name="author" content="}\@author\HCode{" />\Hnewline}}
+%</htXimera>
+% \end{macrocode}
+% The |\and| command would emit tabular environments which really
+% should not appear in a meta tag.
+% \begin{macrocode}
+%<htXimera|classXimera>\def\and{and }
+% \end{macrocode}
+
+% \subsubsection{Title}
+% \DescribeMacro{\title}{Activities have titles.}
+% \begin{macrocode}
+%<*classXimera>
+\let\title\relax
+\newcommand{\title}[1][]{{\protected@xdef\@pretitle{#1}}\protected@xdef\@title}
+
+\title{}
+
+\newcounter{titlenumber}
+\renewcommand{\thetitlenumber}{\arabic{titlenumber}}
+%\renewcommand{\thesection}{\arabic{titlenumber}} %% Makes section numbers work
+\setcounter{titlenumber}{0}
+
+\newpagestyle{main}{
+\sethead[\textsl{\ifnumbers\thetitlenumber\hspace{1em}\fi\@title}][][] % even
+{}{}{\textsl{\ifnumbers\thetitlenumber\hspace{1em}\fi\@title}} % odd
+\setfoot[\thepage][][] % even
+{}{}{\thepage} % odd
+}
+\pagestyle{main}
+% \end{macrocode}
+% \DescribeMacro{\maketitle}{In a \textsf{ximera} document, redefine
+% |\maketitle| and put them in a table of contents. The
+% |\phantomsection| is to fix the hrefs.}
+% \begin{macrocode}
+\renewcommand\maketitle{%
+ \addtocounter{titlenumber}{1}%
+ {\flushleft\large\bfseries \@pretitle\par\vspace{-1em}}
+ {\flushleft\LARGE\bfseries {\ifnumbers\thetitlenumber\fi}{\ifnumbers\hspace{1em}\else\hspace{0em}\fi}\@title \par }
+ \phantomsection%
+ \ifnumbers\addcontentsline{toc}{section}{\thetitlenumber~\@title}\else\addcontentsline{toc}{section}{\@title}\fi
+ \vskip .6em\noindent\textit\theabstract\setcounter{problem}{0}\setcounter{section}{0}\setcounter{subsection}{0}\par\vspace{2em}
+ \ifnooutcomes\else\let\thefootnote\relax\footnote{Learning outcomes: \theoutcomes}\fi
+ \ifnoauthor\else\let\thefootnote\relax\footnote{Author(s):~\@author}\fi
+ \aftergroup\@afterindentfalse
+ \aftergroup\@afterheading}
+
+\ifnumbers
+\setcounter{secnumdepth}{2}
+\renewcommand{\thesection}{\arabic{titlenumber}.\arabic{section}}
+\renewcommand{\thesubsection}{\arabic{titlenumber}.\arabic{section}.\arabic{subsection}}
+\else
+\setcounter{secnumdepth}{-2}
+\fi
+
+\def\activitystyle{}
+\newcounter{sectiontitlenumber}
+\setcounter{secnumdepth}{2}
+\setcounter{tocdepth}{2}
+\newcommand\chapterstyle{%
+ \def\activitystyle{activity-chapter}
+ \def\maketitle{%
+ \addtocounter{titlenumber}{1}%
+ {\flushleft\small\sffamily\bfseries\@pretitle\par\vspace{-1.5em}}%
+ {\flushleft\LARGE\sffamily\bfseries\thetitlenumber\hspace{1em}\@title \par }%
+ {\vskip .6em\noindent\textit\theabstract\setcounter{problem}{0}\setcounter{section}{0}}%
+ \par\vspace{2em}
+ \phantomsection\addcontentsline{toc}{section}{\textbf{\thetitlenumber\hspace{1em}\@title}}%
+}}
+
+
+\newcommand\sectionstyle{%
+ \def\activitystyle{activity-section}
+ \def\maketitle{%
+ \addtocounter{section}{1}
+ \setcounter{sectiontitlenumber}{\value{section}}
+ {\flushleft\small\sffamily\bfseries\@pretitle\par\vspace{-1.5em}}%
+ {\flushleft\Large\sffamily\bfseries\thetitlenumber.\thesectiontitlenumber\hspace{1em}\@title \par}%
+ {\vskip .6em\noindent\textit\theabstract\setcounter{subsection}{0}}%
+ \par\vspace{2em}
+ \phantomsection\addcontentsline{toc}{section}{\thetitlenumber.\thesectiontitlenumber\hspace{1em}\@title}%
+ \renewcommand\section{\@startsection{subsection}{2}{\z@}%
+ {-3.25ex\@plus -1ex \@minus -.2ex}%
+ {1.5ex \@plus .2ex}%
+ {\normalfont\large\bfseries}}
+
+ \renewcommand\subsection{\@startsection{subsubsection}{3}{\z@}%
+ {-3.25ex\@plus -1ex \@minus -.2ex}%
+ {1.5ex \@plus .2ex}%
+ {\normalfont\normalsize\bfseries}}
+
+}}
+
+
+\iftikzexport%% allows xake to handle \chapterstyle and \sectionstye
+\renewcommand\chapterstyle{\def\activitystyle{chapter}}
+\renewcommand\sectionstyle{\def\activitystyle{section}}
+\else
+\fi
+
+%</classXimera>
+% \end{macrocode}
+% Eliminate some formatting that we'll handle later with CSS
+% \begin{macrocode}
+%<*htXimera>
+\renewcommand{\maketitle}{}
+%</htXimera>
+% \end{macrocode}
diff --git a/macros/latex/contrib/ximera/src/ungraded.dtx b/macros/latex/contrib/ximera/src/ungraded.dtx
new file mode 100644
index 0000000000..78b3e29738
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/ungraded.dtx
@@ -0,0 +1,22 @@
+% \subsubsection{Ungraded activities}
+% \DescribeEnv{ungraded}{The |ungraded| environment is used to record
+% that certain parts of activities should not be worth points. For
+% example, if you want to use a multipleChoice as a survey question,
+% you can place it inside an |ungraded| environment.}
+% On the \LaTeX\ side, the |ungraded| environment does nothing.
+% \begin{macrocode}
+%<*classXimera>
+\newenvironment{ungraded}{}{}
+%</classXimera>
+% \end{macrocode}
+% But on the html side, |ungraded| wraps the activities in a div in
+% order to assign some weight to them for grading.
+% \begin{macrocode}
+%<*htXimera>
+\renewenvironment{ungraded}{%
+\ifvmode \IgnorePar\fi \EndP\HCode{<div class="ungraded">}\IgnoreIndent%
+}{
+\ifvmode \IgnorePar\fi \EndP\HCode{</div>}\IgnoreIndent%
+}
+%</htXimera>
+% \end{macrocode}
diff --git a/macros/latex/contrib/ximera/src/utilitymacros.dtx b/macros/latex/contrib/ximera/src/utilitymacros.dtx
new file mode 100644
index 0000000000..e44b490e06
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/utilitymacros.dtx
@@ -0,0 +1,45 @@
+% \subsubsection{Utility macros}
+% These are a list of new utility macros that are generally useful and are loaded after packages and the Tikz Fix.
+% \begin{macrocode}
+%<*classXimera>
+% \end{macrocode}
+% \begin{macro}{NewCounter}
+% Improved version of |\newcounter| to check for existance before creating a counter to minimize conflicts with packages. Added by Jason Nowell
+% \begin{macrocode}
+\newcommand{\Make@Counter}[1]{% This is an internal macro that should probably be depreciated for the below universal macro.
+% Code located in "Utilitymacros.dtx"
+ \@ifundefined{c@#1}% Check to see if counter exists
+ { % If not, create it and set it to 0.
+ \newcounter{#1}
+ \setcounter{#1}{0}
+ }
+ {%If so, reset to 0.
+ \setcounter{#1}{0}
+ }
+}
+
+\newcommand{\MakeCounter}[1]{%% Code located in "Utilitymacros.dtx"
+% Code located in "Utilitymacros.dtx"
+ \@ifundefined{c@#1}% Check to see if counter exists
+ { % If not, create it and set it to 0.
+ \newcounter{#1}
+ \setcounter{#1}{0}
+ }
+ {%If so, reset to 0.
+ \setcounter{#1}{0}
+ }
+}
+% \end{macrocode}
+%</classXimera>
+% \end{macro}
+
+% \begin{macro}{latexProblemContent}
+% Added for those that want to use UF problems without using the problem filter code. This command is renewed into something meaningful in the 'ProblemSelector.sty'.
+% \begin{macrocode}
+\providecommand{\latexProblemContent}[1]{#1}
+% Iterate count for problem counts.
+\Make@Counter{Iteration@probCnt}
+% \end{macrocode}
+% \end{macro}
+
+
diff --git a/macros/latex/contrib/ximera/src/verbatim.dtx b/macros/latex/contrib/ximera/src/verbatim.dtx
new file mode 100644
index 0000000000..88da69a318
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/verbatim.dtx
@@ -0,0 +1,36 @@
+% \subsubsection{Code listing environments}
+% \DescribeEnv{code}{A code answer environment} You cannot use Environ
+% with the fancyvrb/listings package if you want nested environments.
+%
+% \begin{macrocode}
+%<*classXimera>
+\DefineVerbatimEnvironment{code}{Verbatim}{numbers=left,frame=lines,label=Code,labelposition=topline}
+%</classXimera>
+% \end{macrocode}
+% \DescribeEnv{python}{A python answer environment} You cannot use
+% Environ with the fancyvrb/listings package if you want nested
+% environments
+% \begin{macrocode}
+%<*classXimera>
+\DefineVerbatimEnvironment{python}{Verbatim}{numbers=left,frame=lines,label=Python,labelposition=topline}
+%</classXimera>
+% \end{macrocode}
+% \DescribeEnv{javascriptCode}{A JavaScript answer environment} Unfortunately the name |javascript| is already used for the actual, executed (!) JavaScript interactive.
+% environments
+% \begin{macrocode}
+%<*classXimera>
+\DefineVerbatimEnvironment{javascriptCode}{Verbatim}{numbers=left,frame=lines,label=JavaScript,labelposition=topline}
+%</classXimera>
+%<*cfgXimera>
+\renewenvironment{javascriptCode}{\NoFonts}{\EndNoFonts}
+\ScriptEnv{javascriptCode}{\stepcounter{identification}\ifvmode \IgnorePar\fi \EndP\HCode{<div class="javascript-code" id="javascript\arabic{identification}"><script type="text/text">}\HtmlParOff}{\HtmlParOn\HCode{\Hnewline</script></div>}}
+%</cfgXimera>
+% \end{macrocode}
+% On the web, translate verbatim and lstlisting blocks into |<pre>|
+% elements.
+% \begin{macrocode}
+%<*cfgXimera>
+\ConfigureEnv{verbatim}{\HCode{<pre>}}{\HCode{</pre>}}{}{}
+\ConfigureEnv{lstlisting}{\HCode{<pre>}}{\HCode{</pre>}}{}{}
+%</cfgXimera>
+% \end{macrocode}
diff --git a/macros/latex/contrib/ximera/src/xkcd.dtx b/macros/latex/contrib/ximera/src/xkcd.dtx
new file mode 100644
index 0000000000..1d08288803
--- /dev/null
+++ b/macros/latex/contrib/ximera/src/xkcd.dtx
@@ -0,0 +1,13 @@
+% \subsubsection{XKCD}
+% \DescribeMacro{\xkcd}{Reference an XKCD cartoon.}
+% \begin{macrocode}
+%<*classXimera>
+\newcommand{\xkcd}[1]{#1}
+%</classXimera>
+% \end{macrocode}
+% On the web, this should be an image linked to the actual XKCD website.
+% \begin{macrocode}
+%<*htXimera>
+\renewcommand{\xkcd}[1]{\ifvmode \IgnorePar\fi \EndP\HCode{<img src="https://imgs.xkcd.com/comics/#1.png">}}
+%</htXimera>
+% \end{macrocode}
diff --git a/macros/latex/contrib/ximera/ximera.dtx b/macros/latex/contrib/ximera/ximera.dtx
new file mode 100644
index 0000000000..597e3b5b20
--- /dev/null
+++ b/macros/latex/contrib/ximera/ximera.dtx
@@ -0,0 +1,363 @@
+% \iffalse meta-comment
+% vim: textwidth=75
+%<*internal>
+\iffalse
+%</internal>
+%<*readme>
+|
+------------:| ------------------------------------------------------------
+ ximera:| Simultaneously write print and online interactive materials
+ Author:| Jim Fowler and Oscar Levin and Jason Nowell and Wim Obbels and Hans Parshall and Bart Snapp
+ E-mail:| bart.snapp@gmail.com
+ License:| Released under the LaTeX Project Public License v1.3c or later
+ See:| http://www.latex-project.org/lppl.txt
+
+Short description:
+Some text about the class: probably the same as the abstract.
+%</readme>
+%<*internal>
+\fi
+\def\nameofplainTeX{plain}
+\ifx\fmtname\nameofplainTeX\else
+ \expandafter\begingroup
+\fi
+%</internal>
+%<*install>
+\input docstrip.tex
+\keepsilent
+\askforoverwritefalse
+\preamble
+------------:| ------------------------------------------------------------
+ ximera:| Simultaneously writing print and online interactive materials
+ Author:| Jim Fowler and Oscar Levin and Jason Nowell and Wim Obbels and Hans Parshall and Bart Snapp
+ E-mail:| bart.snapp@gmail.com
+ License:| Released under the LaTeX Project Public License v1.3c or later
+ See:| http://www.latex-project.org/lppl.txt
+
+\endpreamble
+\postamble
+
+Copyright (C) 2024 by Bart Snapp <bart.snapp@gmail.com> and Jim Fowler <kisonecat@gmail.com>
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License (LPPL), either
+version 1.3c of this license or (at your option) any later
+version. The latest version of this license is in the file:
+
+http://www.latex-project.org/lppl.txt
+
+This work is "maintained" (as per LPPL maintenance status) by
+Bart Snapp. The source code can be found at:
+
+https://github.com/XimeraProject/ximeraLatex
+
+This work consists of the file ximera.dtx, the associated files
+under src/, and a Makefile.
+
+Running "make" generates the derived files README, ximera.pdf, ximera.cls, xourse.cls.
+
+Running "make inst" installs the files in the user's TeX tree.
+
+Running "make install" installs the files in the local TeX tree.
+
+\endpostamble
+
+\usedir{tex/latex/ximera}
+\input docstrip
+\askforoverwritefalse
+\generate{
+ \file{ximera.cls}{
+ \from{ximera.dtx}{classXimera}
+ \from{src/banner.dtx}{classXimera}
+ \from{src/options.dtx}{classXimera}
+ \from{src/packages.dtx}{classXimera}
+ \from{src/tikzexport.dtx}{classXimera}
+ \from{src/hyperref.dtx}{classXimera}
+ \from{src/suppress.dtx}{classXimera}
+ \from{src/makeCounter.dtx}{classXimera}
+ \from{src/pagesetup.dtx}{classXimera}
+ \from{src/metadata.dtx}{classXimera}
+ \from{src/outcomes.dtx}{classXimera}
+ \from{src/macros.dtx}{classXimera}
+ \from{src/theorems.dtx}{classXimera}
+ \from{src/enumerate.dtx}{classXimera}
+ \from{src/proof.dtx}{classXimera}
+ \from{src/only.dtx}{classXimera}
+ \from{src/problem.dtx}{classXimera}
+ \from{src/hints.dtx}{classXimera}
+ \from{src/abstract.dtx}{classXimera}
+ \from{src/title.dtx}{classXimera}
+ \from{src/image.dtx}{classXimera}
+ \from{src/interactives/javascript.dtx}{classXimera}
+ \from{src/interactives/include.dtx}{classXimera}
+ \from{src/interactives/geogebra.dtx}{classXimera}
+ \from{src/interactives/desmos.dtx}{classXimera}
+ \from{src/interactives/google.dtx}{classXimera}
+ \from{src/interactives/graph.dtx}{classXimera}
+ \from{src/link.dtx}{classXimera}
+ \from{src/interactives/video.dtx}{classXimera}
+ \from{src/answer.dtx}{classXimera}
+ \from{src/choice.dtx}{classXimera}
+ \from{src/solution.dtx}{classXimera}
+ \from{src/feedback.dtx}{classXimera}
+ \from{src/freeresponse.dtx}{classXimera}
+ \from{src/verbatim.dtx}{classXimera}
+ \from{src/dialogue.dtx}{classXimera}
+ \from{src/instructornotes.dtx}{classXimera}
+ \from{src/xkcd.dtx}{classXimera}
+ \from{src/foldable.dtx}{classXimera}
+ \from{src/leash.dtx}{classXimera}
+ \from{src/interactives/sagemath.dtx}{classXimera}
+ \from{src/jax.dtx}{classXimera}
+ \from{src/ungraded.dtx}{classXimera}
+ \from{src/clearEnv.dtx}{classXimera}
+ \from{src/hideEnv.dtx}{classXimera}
+ }
+}
+\generate{
+ \file{xourse.cls}{
+ \from{ximera.dtx}{classXourse}
+ \from{src/optionsxourse.dtx}{classXourse}
+ \from{src/activity.dtx}{classXourse}
+ \from{src/sectioning.dtx}{classXourse}
+ \from{src/logo.dtx}{classXourse}
+ \from{src/graded.dtx}{classXourse}
+ }
+}
+\generate{
+ \file{ximera.cfg}{
+ \from{ximera.dtx}{cfgXimera}
+ \from{src/pagesetup.dtx}{cfgXimera}
+ \from{src/packages.dtx}{cfgXimera}
+ \from{src/jax.dtx}{cfgXimera}
+ \from{src/sectioning.dtx}{cfgXimera}
+ \from{src/title.dtx}{cfgXimera}
+ \from{src/abstract.dtx}{cfgXimera}
+ \from{src/image.dtx}{cfgXimera}
+ \from{src/outcomes.dtx}{cfgXimera}
+ \from{src/textcolor.dtx}{cfgXimera}
+ \from{src/verbatim.dtx}{cfgXimera}
+ \from{src/html.dtx}{cfgXimera}
+ \from{src/ending.dtx}{cfgXimera}
+ }
+}
+\generate{
+ \file{ximera.4ht}{
+ \from{ximera.dtx}{htXimera}
+ \from{src/pagesetup.dtx}{htXimera}
+ \from{src/title.dtx}{htXimera}
+ \from{src/problem.dtx}{htXimera}
+ \from{src/macros.dtx}{htXimera}
+ \from{src/theorems.dtx}{htXimera}
+ \from{src/image.dtx}{htXimera}
+ \from{src/dialogue.dtx}{htXimera}
+ \from{src/foldable.dtx}{htXimera}
+ \from{src/interactives/video.dtx}{htXimera}
+ \from{src/xkcd.dtx}{htXimera}
+ \from{src/link.dtx}{htXimera}
+ \from{src/interactives/graph.dtx}{htXimera}
+ \from{src/answer.dtx}{htXimera}
+ \from{src/choice.dtx}{htXimera}
+ \from{src/freeresponse.dtx}{htXimera}
+ \from{src/interactives/javascript.dtx}{htXimera}
+ \from{src/interactives/include.dtx}{htXimera}
+ \from{src/interactives/geogebra.dtx}{htXimera}
+ \from{src/interactives/desmos.dtx}{htXimera}
+ \from{src/interactives/google.dtx}{htXimera}
+ \from{src/feedback.dtx}{htXimera}
+ \from{src/leash.dtx}{htXimera}
+ \from{src/labels.dtx}{htXimera}
+ \from{src/interactives/sagemath.dtx}{htXimera}
+ \from{src/ungraded.dtx}{htXimera}
+ \from{src/footnotes.dtx}{htXimera}
+ \from{src/ending.dtx}{htXimera}
+ }
+}
+\generate{
+ \file{xourse.4ht}{
+ \from{ximera.dtx}{htXourse}
+ \from{src/logo.dtx}{htXourse}
+ \from{src/metadata.dtx}{htXourse}
+ \from{src/activity.dtx}{htXourse}
+ \from{src/sectioning.dtx}{htXourse}
+ \from{src/graded.dtx}{htXourse}
+ \from{src/interactives/video.dtx}{htXourse}
+ \from{src/ending.dtx}{htXourse}
+ }
+}
+%</install>
+%<install>\endbatchfile
+%<*internal>
+\usedir{source/latex/ximera}
+\generate{
+ \file{ximera.ins}{\from{\jobname.dtx}{install}}
+}
+\nopreamble\nopostamble
+\usedir{doc/latex/ximera}
+\generate{
+ \file{README.txt}{\from{\jobname.dtx}{readme}}
+}
+\ifx\fmtname\nameofplainTeX
+ \expandafter\endbatchfile
+\else
+ \expandafter\endgroup
+\fi
+%</internal>
+% \fi
+%
+% \iffalse
+%<*driver>
+\ProvidesFile{ximera.dtx}
+%</driver>
+%<classXimera|classXourse>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+%<classXimera>\ProvidesClass{ximera}
+%<classXourse>\ProvidesClass{xourse}
+%<classXimera|classXourse> [2024/05/12 v1.5.1
+%<classXimera> Simultaneously write print and online interactive materials]
+%<classXourse> Combining Ximera activities into Xourses]
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage[a4paper,margin=25mm,left=50mm,nohead]{geometry}
+\usepackage[numbered]{hypdoc}
+\usepackage{hyperref}
+
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+\DocInput{\jobname.dtx}
+\section{ximera.cls}
+\DocInput{src/options.dtx}
+\DocInput{src/packages.dtx}
+\DocInput{src/pagesetup.dtx}
+\subsection{Structure}
+\DocInput{src/macros.dtx}
+\DocInput{src/theorems.dtx}
+\DocInput{src/enumerate.dtx}
+\DocInput{src/proof.dtx}
+\DocInput{src/problem.dtx}
+\DocInput{src/hints.dtx}
+\DocInput{src/solution.dtx}
+\DocInput{src/verbatim.dtx}
+\DocInput{src/dialogue.dtx}
+\DocInput{src/instructornotes.dtx}
+\DocInput{src/only.dtx}
+\DocInput{src/foldable.dtx}
+\DocInput{src/leash.dtx}
+\subsection{Document metadata}
+\DocInput{src/metadata.dtx}
+\DocInput{src/abstract.dtx}
+\DocInput{src/title.dtx}
+\DocInput{src/outcomes.dtx}
+\DocInput{src/labels.dtx}
+\subsection{Images}
+\DocInput{src/image.dtx}
+\DocInput{src/tikzexport.dtx}
+\DocInput{src/xkcd.dtx}
+\subsection{Links}
+\DocInput{src/hyperref.dtx}
+\subsection{Interactives}
+\DocInput{src/interactives/include.dtx}
+\DocInput{src/interactives/google.dtx}
+\DocInput{src/interactives/geogebra.dtx}
+\DocInput{src/interactives/desmos.dtx}
+\DocInput{src/interactives/graph.dtx}
+\DocInput{src/interactives/video.dtx}
+\DocInput{src/interactives/javascript.dtx}
+\DocInput{src/interactives/sagemath.dtx}
+\subsection{Answerables}
+\DocInput{src/answer.dtx}
+\DocInput{src/choice.dtx}
+\DocInput{src/freeresponse.dtx}
+\DocInput{src/feedback.dtx}
+\DocInput{src/ungraded.dtx}
+\subsection{Support for the web}
+\DocInput{src/jax.dtx}
+\DocInput{src/html.dtx}
+\subsection{Tools}
+\DocInput{src/suppress.dtx}
+\DocInput{src/ending.dtx}
+\section{xourse.cls}
+\DocInput{src/optionsxourse.dtx}
+\DocInput{src/activity.dtx}
+\DocInput{src/sectioning.dtx}
+\DocInput{src/graded.dtx}
+\DocInput{src/logo.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+%\def\fileversion{v1.5.1}
+%\def\filedate{2024/05/12}
+% \DoNotIndex{\newcommand,\newenvironment}
+%
+%\title{\textsf{ximera} --- Simultaneously write print and online interactive materials.\thanks{This file
+% describes version \fileversion, last revised \filedate.}
+%}
+%\author{Jim Fowler \and Jeramiah Hocutt \and Oscar Levin \and Jason Nowell \and Wim Obbels \and Hans Parshall \and Bart Snapp}
+%\date{Released \filedate}
+%
+%\maketitle
+%
+%\changes{v1.0.0}{2018/05/25}{First public release}
+%\changes{v1.5.0}{2024/05/08}{Submitting to CTAN}
+%\changes{v1.5.1}{2024/05/12}{Fixed date bug}
+
+% \begin{abstract}
+% ``\textsf{Ximera} begins where \TeX\ ends.'' The \textsf{ximera}
+% class aids in the creation of handouts, worksheets, exercises, and
+% sections of textbooks to be used either individually or ``glued''
+% together via a \textsf{xourse} file. All \textsf{ximera} documents
+% can be deployed in an online interactive form via \texttt{xake}
+% See: \href{https://ximera.osu.edu}{Ximera Project} and the source
+% code on \href{https://github.com/XimeraProject}{GitHub}.
+% \end{abstract}
+%
+% \section{Introduction}
+%
+% Ximera, pronounced ``chimera,'' (\textbf{X}imera:
+% \textbf{I}nteractive, \textbf{M}athematics,
+% \textbf{E}\textbf{R}esources, for \textbf{A}ll) is an open-source
+% platform that provides tools for authoring and publishing (PDF and
+% Online), open-source, interactive educational content, such as textbooks, assessments, and online courses.
+% The Ximera document class provides the following features:
+% \begin{description}
+% \item[Formatting for different domains] The Ximera document class
+% provides built-in support for formatting documents in both PDF and
+% online formats, which can be a big time-saver for
+% authors. Additionally, it allows for the simultaneous creation of
+% solution manuals and teaching editions, which can be especially
+% useful for educators.
+%\item[Compiling individually or as a whole] With the Ximera document
+% class, authors can easily compile individual documents or an entire
+% collection of documents. This flexibility can be helpful when making
+% changes to specific documents without having to re-compile the
+% entire collection. Moreover, this allows an author to share large
+% portions of a text with another, with minimal changes.
+%\item[Interactive content] The Ximera document class allows for the
+% inclusion of interactive content, such as answer boxes that are
+% validated by a client-side computer algebra system. Additionally, it
+% allows for the embedding of YouTube videos, Desmos graphs, and
+% GeoGebra interactives.
+%\item[All content displayed] By default, the Ximera document class
+% displays all content to the author. This means the author see what
+% the students see, along with answers and solutions, and links (that
+% can be checked) to various interactive elements (when deployed, the
+% interactive elements are truly embedded). This can be especially
+% helpful for catching errors or inconsistencies in the content.
+%\end{description}
+%
+%Online examples can be found at
+%\begin{center}
+%\url{https://go.osu.edu/ximera-examples}
+%\end{center}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+%\Finale
diff --git a/macros/latex/contrib/ximera/ximera.ins b/macros/latex/contrib/ximera/ximera.ins
new file mode 100644
index 0000000000..54545d64cc
--- /dev/null
+++ b/macros/latex/contrib/ximera/ximera.ins
@@ -0,0 +1,211 @@
+%%
+%% This is file `ximera.ins',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% ximera.dtx (with options: `install')
+%% ------------:| ------------------------------------------------------------
+%% ximera:| Simultaneously writing print and online interactive materials
+%% Author:| Jim Fowler and Oscar Levin and Jason Nowell and Wim Obbels and Hans Parshall and Bart Snapp
+%% E-mail:| bart.snapp@gmail.com
+%% License:| Released under the LaTeX Project Public License v1.3c or later
+%% See:| http://www.latex-project.org/lppl.txt
+%%
+\input docstrip.tex
+\keepsilent
+\askforoverwritefalse
+\preamble
+------------:| ------------------------------------------------------------
+ ximera:| Simultaneously writing print and online interactive materials
+ Author:| Jim Fowler and Oscar Levin and Jason Nowell and Wim Obbels and Hans Parshall and Bart Snapp
+ E-mail:| bart.snapp@gmail.com
+ License:| Released under the LaTeX Project Public License v1.3c or later
+ See:| http://www.latex-project.org/lppl.txt
+
+\endpreamble
+\postamble
+
+Copyright (C) 2024 by Bart Snapp <bart.snapp@gmail.com> and Jim Fowler <kisonecat@gmail.com>
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License (LPPL), either
+version 1.3c of this license or (at your option) any later
+version. The latest version of this license is in the file:
+
+http://www.latex-project.org/lppl.txt
+
+This work is "maintained" (as per LPPL maintenance status) by
+Bart Snapp. The source code can be found at:
+
+https://github.com/XimeraProject/ximeraLatex
+
+This work consists of the file ximera.dtx, the associated files
+under src/, and a Makefile.
+
+Running "make" generates the derived files README, ximera.pdf, ximera.cls, xourse.cls.
+
+Running "make inst" installs the files in the user's TeX tree.
+
+Running "make install" installs the files in the local TeX tree.
+
+\endpostamble
+
+\usedir{tex/latex/ximera}
+\input docstrip
+\askforoverwritefalse
+\generate{
+ \file{ximera.cls}{
+ \from{ximera.dtx}{classXimera}
+ \from{src/banner.dtx}{classXimera}
+ \from{src/options.dtx}{classXimera}
+ \from{src/packages.dtx}{classXimera}
+ \from{src/tikzexport.dtx}{classXimera}
+ \from{src/hyperref.dtx}{classXimera}
+ \from{src/suppress.dtx}{classXimera}
+ \from{src/makeCounter.dtx}{classXimera}
+ \from{src/pagesetup.dtx}{classXimera}
+ \from{src/metadata.dtx}{classXimera}
+ \from{src/outcomes.dtx}{classXimera}
+ \from{src/macros.dtx}{classXimera}
+ \from{src/theorems.dtx}{classXimera}
+ \from{src/enumerate.dtx}{classXimera}
+ \from{src/proof.dtx}{classXimera}
+ \from{src/only.dtx}{classXimera}
+ \from{src/problem.dtx}{classXimera}
+ \from{src/hints.dtx}{classXimera}
+ \from{src/abstract.dtx}{classXimera}
+ \from{src/title.dtx}{classXimera}
+ \from{src/image.dtx}{classXimera}
+ \from{src/interactives/javascript.dtx}{classXimera}
+ \from{src/interactives/include.dtx}{classXimera}
+ \from{src/interactives/geogebra.dtx}{classXimera}
+ \from{src/interactives/desmos.dtx}{classXimera}
+ \from{src/interactives/google.dtx}{classXimera}
+ \from{src/interactives/graph.dtx}{classXimera}
+ \from{src/link.dtx}{classXimera}
+ \from{src/interactives/video.dtx}{classXimera}
+ \from{src/answer.dtx}{classXimera}
+ \from{src/choice.dtx}{classXimera}
+ \from{src/solution.dtx}{classXimera}
+ \from{src/feedback.dtx}{classXimera}
+ \from{src/freeresponse.dtx}{classXimera}
+ \from{src/verbatim.dtx}{classXimera}
+ \from{src/dialogue.dtx}{classXimera}
+ \from{src/instructornotes.dtx}{classXimera}
+ \from{src/xkcd.dtx}{classXimera}
+ \from{src/foldable.dtx}{classXimera}
+ \from{src/leash.dtx}{classXimera}
+ \from{src/interactives/sagemath.dtx}{classXimera}
+ \from{src/jax.dtx}{classXimera}
+ \from{src/ungraded.dtx}{classXimera}
+ \from{src/clearEnv.dtx}{classXimera}
+ \from{src/hideEnv.dtx}{classXimera}
+ }
+}
+\generate{
+ \file{xourse.cls}{
+ \from{ximera.dtx}{classXourse}
+ \from{src/optionsxourse.dtx}{classXourse}
+ \from{src/activity.dtx}{classXourse}
+ \from{src/sectioning.dtx}{classXourse}
+ \from{src/logo.dtx}{classXourse}
+ \from{src/graded.dtx}{classXourse}
+ }
+}
+\generate{
+ \file{ximera.cfg}{
+ \from{ximera.dtx}{cfgXimera}
+ \from{src/pagesetup.dtx}{cfgXimera}
+ \from{src/packages.dtx}{cfgXimera}
+ \from{src/jax.dtx}{cfgXimera}
+ \from{src/sectioning.dtx}{cfgXimera}
+ \from{src/title.dtx}{cfgXimera}
+ \from{src/abstract.dtx}{cfgXimera}
+ \from{src/image.dtx}{cfgXimera}
+ \from{src/outcomes.dtx}{cfgXimera}
+ \from{src/textcolor.dtx}{cfgXimera}
+ \from{src/verbatim.dtx}{cfgXimera}
+ \from{src/html.dtx}{cfgXimera}
+ \from{src/ending.dtx}{cfgXimera}
+ }
+}
+\generate{
+ \file{ximera.4ht}{
+ \from{ximera.dtx}{htXimera}
+ \from{src/pagesetup.dtx}{htXimera}
+ \from{src/title.dtx}{htXimera}
+ \from{src/problem.dtx}{htXimera}
+ \from{src/macros.dtx}{htXimera}
+ \from{src/theorems.dtx}{htXimera}
+ \from{src/image.dtx}{htXimera}
+ \from{src/dialogue.dtx}{htXimera}
+ \from{src/foldable.dtx}{htXimera}
+ \from{src/interactives/video.dtx}{htXimera}
+ \from{src/xkcd.dtx}{htXimera}
+ \from{src/link.dtx}{htXimera}
+ \from{src/interactives/graph.dtx}{htXimera}
+ \from{src/answer.dtx}{htXimera}
+ \from{src/choice.dtx}{htXimera}
+ \from{src/freeresponse.dtx}{htXimera}
+ \from{src/interactives/javascript.dtx}{htXimera}
+ \from{src/interactives/include.dtx}{htXimera}
+ \from{src/interactives/geogebra.dtx}{htXimera}
+ \from{src/interactives/desmos.dtx}{htXimera}
+ \from{src/interactives/google.dtx}{htXimera}
+ \from{src/feedback.dtx}{htXimera}
+ \from{src/leash.dtx}{htXimera}
+ \from{src/labels.dtx}{htXimera}
+ \from{src/interactives/sagemath.dtx}{htXimera}
+ \from{src/ungraded.dtx}{htXimera}
+ \from{src/footnotes.dtx}{htXimera}
+ \from{src/ending.dtx}{htXimera}
+ }
+}
+\generate{
+ \file{xourse.4ht}{
+ \from{ximera.dtx}{htXourse}
+ \from{src/logo.dtx}{htXourse}
+ \from{src/metadata.dtx}{htXourse}
+ \from{src/activity.dtx}{htXourse}
+ \from{src/sectioning.dtx}{htXourse}
+ \from{src/graded.dtx}{htXourse}
+ \from{src/interactives/video.dtx}{htXourse}
+ \from{src/ending.dtx}{htXourse}
+ }
+}
+\endbatchfile
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%
+%% Copyright (C) 2024 by Bart Snapp <bart.snapp@gmail.com> and Jim Fowler <kisonecat@gmail.com>
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License (LPPL), either
+%% version 1.3c of this license or (at your option) any later
+%% version. The latest version of this license is in the file:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This work is "maintained" (as per LPPL maintenance status) by
+%% Bart Snapp. The source code can be found at:
+%%
+%% https://github.com/XimeraProject/ximeraLatex
+%%
+%% This work consists of the file ximera.dtx, the associated files
+%% under src/, and a Makefile.
+%%
+%% Running "make" generates the derived files README, ximera.pdf, ximera.cls, xourse.cls.
+%%
+%% Running "make inst" installs the files in the user's TeX tree.
+%%
+%% Running "make install" installs the files in the local TeX tree.
+%%
+%%
+%% End of file `ximera.ins'.
diff --git a/macros/latex/contrib/ximera/ximera.pdf b/macros/latex/contrib/ximera/ximera.pdf
new file mode 100644
index 0000000000..0d2545b701
--- /dev/null
+++ b/macros/latex/contrib/ximera/ximera.pdf
Binary files differ
diff --git a/macros/latex/contrib/zref-clever/CHANGELOG.md b/macros/latex/contrib/zref-clever/CHANGELOG.md
index 89c3c1414c..3cf6c73b25 100644
--- a/macros/latex/contrib/zref-clever/CHANGELOG.md
+++ b/macros/latex/contrib/zref-clever/CHANGELOG.md
@@ -1,6 +1,12 @@
# Changelog
-## [Unreleased](https://github.com/gusbrs/zref-clever/compare/v0.4.4...HEAD)
+## [Unreleased](https://github.com/gusbrs/zref-clever/compare/v0.4.5...HEAD)
+
+## [v0.4.5](https://github.com/gusbrs/zref-clever/compare/v0.4.4...v0.4.5) (2024-05-20)
+
+### Added
+- Provided Russian language file (see PR
+ [#29](https://github.com/gusbrs/zref-clever/pull/29)).
## [v0.4.4](https://github.com/gusbrs/zref-clever/compare/v0.4.3...v0.4.4) (2024-03-14)
diff --git a/macros/latex/contrib/zref-clever/zref-clever-code.pdf b/macros/latex/contrib/zref-clever/zref-clever-code.pdf
index 4dd6a24efc..09b441eeb1 100644
--- a/macros/latex/contrib/zref-clever/zref-clever-code.pdf
+++ b/macros/latex/contrib/zref-clever/zref-clever-code.pdf
Binary files differ
diff --git a/macros/latex/contrib/zref-clever/zref-clever-code.tex b/macros/latex/contrib/zref-clever/zref-clever-code.tex
index 8aebe70d6f..9be1e8f18b 100644
--- a/macros/latex/contrib/zref-clever/zref-clever-code.tex
+++ b/macros/latex/contrib/zref-clever/zref-clever-code.tex
@@ -41,6 +41,11 @@
\documentclass{l3doc}
+\usepackage{fontspec}
+\setmainfont{CMU Serif}
+\setsansfont{CMU Sans Serif}
+\setmonofont{CMU Typewriter Text}
+
% Have \GetFileInfo pick up date and version data and used in the
% documentation.
\usepackage{zref-clever}
diff --git a/macros/latex/contrib/zref-clever/zref-clever-doc.pdf b/macros/latex/contrib/zref-clever/zref-clever-doc.pdf
index 9973f6d546..5594a06fb3 100644
--- a/macros/latex/contrib/zref-clever/zref-clever-doc.pdf
+++ b/macros/latex/contrib/zref-clever/zref-clever-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/zref-clever/zref-clever-doc.tex b/macros/latex/contrib/zref-clever/zref-clever-doc.tex
index 744732ade0..e088c49915 100644
--- a/macros/latex/contrib/zref-clever/zref-clever-doc.tex
+++ b/macros/latex/contrib/zref-clever/zref-clever-doc.tex
@@ -41,6 +41,11 @@
\documentclass{l3doc}
+\usepackage{fontspec}
+\setmainfont{TeX Gyre Pagella}
+\setsansfont{TeX Gyre Heros}[Scale=MatchLowercase]
+\setmonofont{inconsolata}[Scale=MatchLowercase]
+
% The package itself *must* be loaded so that \GetFileInfo can pick up date
% and version data. Naturally, we also use it.
\usepackage{zref-clever}
@@ -48,13 +53,6 @@
\usepackage{zref-check}
\usepackage{zref-titleref}
-\usepackage[T1]{fontenc}
-
-\usepackage[sc]{mathpazo}
-\linespread{1.05}
-\usepackage[scale=.88]{tgheros} % sans
-\usepackage[varqu,scaled=1.03]{inconsolata} % tt
-
\usepackage{listings}
\usepackage{microtype}
@@ -1414,7 +1412,7 @@ indeed required, without users having to worry about it at all.
& UKenglish \\
& USenglish \\
french & acadian \\
- & \\
+ spanish & \\
\bottomrule
\end{tabular}
\quad
@@ -1431,7 +1429,7 @@ indeed required, without users having to worry about it at all.
portuguese & brazilian \\
& brazil \\
& portuges \\
- spanish & \\
+ russian & \\
\bottomrule
\end{tabular}
\caption{Declared languages and aliases}
@@ -1480,13 +1478,14 @@ in effect for the languages declared by \pkg{zref-clever}.
\toprule
Language & declension & gender & allcaps \\
\midrule
- dutch & -- & f,m,n & -- \\
- english & -- & -- & -- \\
- french & -- & f,m & -- \\
- german & N,A,D,G & f,m,n & yes \\
- italian & -- & f,m & -- \\
- portuguese & -- & f,m & -- \\
- spanish & -- & f,m & -- \\
+ dutch & -- & f,m,n & -- \\
+ english & -- & -- & -- \\
+ french & -- & f,m & -- \\
+ german & N,A,D,G & f,m,n & yes \\
+ italian & -- & f,m & -- \\
+ portuguese & -- & f,m & -- \\
+ spanish & -- & f,m & -- \\
+ russian & n,a,g,d,i,p & f,m,n & -- \\
\bottomrule
\end{tabular}
\caption{Options for declared languages}
@@ -2641,6 +2640,7 @@ were generously provided by (in chronological order):
% 2023-05-11: https://github.com/T-F-S/tcolorbox/issues/230
% 2023-11-09: https://github.com/gusbrs/zref-clever/issues/20
% 2024-01-20: https://github.com/gusbrs/zref-clever/pull/25
+ % 2024-05-04: https://github.com/gusbrs/zref-clever/pull/27
and Lars Madsen.
% 2023-07-24: https://chat.stackexchange.com/transcript/message/64039717#64039717
% and following discussion.
@@ -2661,8 +2661,12 @@ The package's language files have been provided or improved thanks to:
% 2022-01-09: https://github.com/gusbrs/zref-clever/pull/5
% 2022-12-27: https://github.com/gusbrs/zref-clever/pull/12
% 2022-12-27: https://github.com/gusbrs/zref-clever/pull/13
- and Matteo Ferrigato (Italian). % 'matteo339'
+ Matteo Ferrigato (Italian), % 'matteo339'
% 2022-12-12: https://github.com/gusbrs/zref-clever/issues/11
+ and Sergey Slyusarev (Russian). % 'jemmybutton'
+ % 2024-05-18: https://github.com/gusbrs/zref-clever/issues/28
+ % 2024-05-19: https://github.com/gusbrs/zref-clever/pull/29
+ % 2024-05-20: https://github.com/gusbrs/zref-clever/pull/30
If I have inadvertently left anyone off the list I apologize, and please let
me know, so that I can correct the oversight.
diff --git a/macros/latex/contrib/zref-clever/zref-clever.dtx b/macros/latex/contrib/zref-clever/zref-clever.dtx
index 5767e6ab4f..9c1d73a5a2 100644
--- a/macros/latex/contrib/zref-clever/zref-clever.dtx
+++ b/macros/latex/contrib/zref-clever/zref-clever.dtx
@@ -43,6 +43,11 @@
%<*driver>
\documentclass{l3doc}
+\usepackage{fontspec}
+\setmainfont{CMU Serif}
+\setsansfont{CMU Sans Serif}
+\setmonofont{CMU Typewriter Text}
+
% Have \GetFileInfo pick up date and version data and used in the
% documentation.
\usepackage{zref-clever}
@@ -166,7 +171,7 @@
%
% Identify the package.
% \begin{macrocode}
-\ProvidesExplPackage {zref-clever} {2024-03-14} {0.4.4}
+\ProvidesExplPackage {zref-clever} {2024-05-20} {0.4.5}
{Clever LaTeX cross-references based on zref}
% \end{macrocode}
%
@@ -10397,6 +10402,1264 @@ type = solution ,
% \end{macrocode}
%
%
+% \subsection{Russian}
+%
+% Russian language file initially contributed by \contributor{Sergey Slyusarev
+% \username{jemmybutton}} (\githubPR{29}). Russian localization in consistent
+% with that of \pkg{cleveref}, with the following exceptions: ``equation'' is
+% translated as ``уравнение'', rather than ``formula'', ``proposition'' is
+% translated as ``предложение'', rather than ``утверждение''; several
+% abbreviations are replaced with more common ones, e.g. abbreviated plural of
+% ``item'' is ``пп.'', not ``п.п.''.
+%
+% \begin{macrocode}
+%<*package>
+\zcDeclareLanguage
+ [ declension = { n , a , g , d , i , p } , gender = { f , m , n } ]
+ { russian }
+%</package>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*lang-russian>
+% \end{macrocode}
+%
+% \begin{macrocode}
+namesep = {\nobreakspace} ,
+pairsep = {~и\nobreakspace} ,
+listsep = {,~} ,
+lastsep = {~и\nobreakspace} ,
+tpairsep = {~и\nobreakspace} ,
+tlistsep = {,~} ,
+tlastsep = {,~и\nobreakspace} ,
+notesep = {~} ,
+rangesep = {~по\nobreakspace} ,
++refbounds-rb = {с\nobreakspace,,,} ,
+
+type = book ,
+ gender = f ,
+ case = n ,
+ Name-sg = Книга ,
+ name-sg = книга ,
+ Name-pl = Книги ,
+ name-pl = книги ,
+ case = a ,
+ Name-sg = Книгу ,
+ name-sg = книгу ,
+ Name-pl = Книги ,
+ name-pl = книги ,
+ case = g ,
+ Name-sg = Книги ,
+ name-sg = книги ,
+ Name-pl = Книг ,
+ name-pl = книг ,
+ case = d ,
+ Name-sg = Книге ,
+ name-sg = книге ,
+ Name-pl = Книгам ,
+ name-pl = книгам ,
+ case = i ,
+ Name-sg = Книгой ,
+ name-sg = книгой ,
+ Name-pl = Книгами ,
+ name-pl = книгами ,
+ case = p ,
+ Name-sg = Книге ,
+ name-sg = книге ,
+ Name-pl = Книгах ,
+ name-pl = книгах ,
+
+type = part ,
+ gender = f ,
+ case = n ,
+ Name-sg = Часть ,
+ name-sg = часть ,
+ Name-pl = Части ,
+ name-pl = части ,
+ Name-sg-ab = Ч. ,
+ name-sg-ab = ч. ,
+ Name-pl-ab = Чч. ,
+ name-pl-ab = чч. ,
+ case = a ,
+ Name-sg = Часть ,
+ name-sg = часть ,
+ Name-pl = Части ,
+ name-pl = части ,
+ Name-sg-ab = Ч. ,
+ name-sg-ab = ч. ,
+ Name-pl-ab = Чч. ,
+ name-pl-ab = чч. ,
+ case = g ,
+ Name-sg = Части ,
+ name-sg = части ,
+ Name-pl = Частей ,
+ name-pl = частей ,
+ Name-sg-ab = Ч. ,
+ name-sg-ab = ч. ,
+ Name-pl-ab = Чч. ,
+ name-pl-ab = чч. ,
+ case = d ,
+ Name-sg = Части ,
+ name-sg = части ,
+ Name-pl = Частям ,
+ name-pl = частям ,
+ Name-sg-ab = Ч. ,
+ name-sg-ab = ч. ,
+ Name-pl-ab = Чч. ,
+ name-pl-ab = чч. ,
+ case = i ,
+ Name-sg = Частью ,
+ name-sg = частью ,
+ Name-pl = Частями ,
+ name-pl = частями ,
+ Name-sg-ab = Ч. ,
+ name-sg-ab = ч. ,
+ Name-pl-ab = Чч. ,
+ name-pl-ab = чч. ,
+ case = p ,
+ Name-sg = Части ,
+ name-sg = части ,
+ Name-pl = Частях ,
+ name-pl = частях ,
+ Name-sg-ab = Ч. ,
+ name-sg-ab = ч. ,
+ Name-pl-ab = Чч. ,
+ name-pl-ab = чч. ,
+
+type = chapter ,
+ gender = f ,
+ case = n ,
+ Name-sg = Глава ,
+ name-sg = глава ,
+ Name-pl = Главы ,
+ name-pl = главы ,
+ Name-sg-ab = Гл. ,
+ name-sg-ab = гл. ,
+ Name-pl-ab = Гл. ,
+ name-pl-ab = гл. ,
+ case = a ,
+ Name-sg = Главу ,
+ name-sg = главу ,
+ Name-pl = Главы ,
+ name-pl = главы ,
+ Name-sg-ab = Гл. ,
+ name-sg-ab = гл. ,
+ Name-pl-ab = Гл. ,
+ name-pl-ab = гл. ,
+ case = g ,
+ Name-sg = Главы ,
+ name-sg = главы ,
+ Name-pl = Глав ,
+ name-pl = глав ,
+ Name-sg-ab = Гл. ,
+ name-sg-ab = гл. ,
+ Name-pl-ab = Гл. ,
+ name-pl-ab = гл. ,
+ case = d ,
+ Name-sg = Главе ,
+ name-sg = главе ,
+ Name-pl = Главам ,
+ name-pl = главам ,
+ Name-sg-ab = Гл. ,
+ name-sg-ab = гл. ,
+ Name-pl-ab = Гл. ,
+ name-pl-ab = гл. ,
+ case = i ,
+ Name-sg = Главой ,
+ name-sg = главой ,
+ Name-pl = Главами ,
+ name-pl = главами ,
+ Name-sg-ab = Гл. ,
+ name-sg-ab = гл. ,
+ Name-pl-ab = Гл. ,
+ name-pl-ab = гл. ,
+ case = p ,
+ Name-sg = Главе ,
+ name-sg = главе ,
+ Name-pl = Главах ,
+ name-pl = главах ,
+ Name-sg-ab = Гл. ,
+ name-sg-ab = гл. ,
+ Name-pl-ab = Гл. ,
+ name-pl-ab = гл. ,
+
+type = section ,
+ gender = m ,
+ case = n ,
+ Name-sg = Раздел ,
+ name-sg = раздел ,
+ Name-pl = Разделы ,
+ name-pl = разделы ,
+ case = a ,
+ Name-sg = Раздел ,
+ name-sg = раздел ,
+ Name-pl = Разделы ,
+ name-pl = разделы ,
+ case = g ,
+ Name-sg = Раздела ,
+ name-sg = раздела ,
+ Name-pl = Разделов ,
+ name-pl = разделов ,
+ case = d ,
+ Name-sg = Разделу ,
+ name-sg = разделу ,
+ Name-pl = Разделам ,
+ name-pl = разделам ,
+ case = i ,
+ Name-sg = Разделом ,
+ name-sg = разделом ,
+ Name-pl = Разделами ,
+ name-pl = разделами ,
+ case = p ,
+ Name-sg = Разделе ,
+ name-sg = разделе ,
+ Name-pl = Разделах ,
+ name-pl = разделах ,
+
+type = paragraph ,
+ gender = m ,
+ case = n ,
+ Name-sg = Абзац ,
+ name-sg = абзац ,
+ Name-pl = Абзацы ,
+ name-pl = абзацы ,
+ case = a ,
+ Name-sg = Абзац ,
+ name-sg = абзац ,
+ Name-pl = Абзацы ,
+ name-pl = абзацы ,
+ case = g ,
+ Name-sg = Абзаца ,
+ name-sg = абзаца ,
+ Name-pl = Абзацев ,
+ name-pl = абзацев ,
+ case = d ,
+ Name-sg = Абзацу ,
+ name-sg = абзацу ,
+ Name-pl = Абзацам ,
+ name-pl = абзацам ,
+ case = i ,
+ Name-sg = Абзацем ,
+ name-sg = абзацем ,
+ Name-pl = Абзацами ,
+ name-pl = абзацами ,
+ case = p ,
+ Name-sg = Абзаце ,
+ name-sg = абзаце ,
+ Name-pl = Абзацах ,
+ name-pl = абзацах ,
+
+type = appendix ,
+ gender = n ,
+ case = n ,
+ Name-sg = Приложение ,
+ name-sg = приложение ,
+ Name-pl = Приложения ,
+ name-pl = приложения ,
+ case = a ,
+ Name-sg = Приложение ,
+ name-sg = приложение ,
+ Name-pl = Приложения ,
+ name-pl = приложения ,
+ case = g ,
+ Name-sg = Приложения ,
+ name-sg = приложения ,
+ Name-pl = Приложений ,
+ name-pl = приложений ,
+ case = d ,
+ Name-sg = Приложению ,
+ name-sg = приложению ,
+ Name-pl = Приложениям ,
+ name-pl = приложениям ,
+ case = i ,
+ Name-sg = Приложением ,
+ name-sg = приложением ,
+ Name-pl = Приложениями ,
+ name-pl = приложениями ,
+ case = p ,
+ Name-sg = Приложении ,
+ name-sg = приложении ,
+ Name-pl = Приложениях ,
+ name-pl = приложениях ,
+
+type = page ,
+ gender = f ,
+ case = n ,
+ Name-sg = Страница ,
+ name-sg = страница ,
+ Name-pl = Страницы ,
+ name-pl = страницы ,
+ Name-sg-ab = С. ,
+ name-sg-ab = с. ,
+ Name-pl-ab = Сс. ,
+ name-pl-ab = сс. ,
+ case = a ,
+ Name-sg = Страницу ,
+ name-sg = страницу ,
+ Name-pl = Страницы ,
+ name-pl = страницы ,
+ Name-sg-ab = С. ,
+ name-sg-ab = с. ,
+ Name-pl-ab = Сс. ,
+ name-pl-ab = сс. ,
+ case = g ,
+ Name-sg = Страницы ,
+ name-sg = страницы ,
+ Name-pl = Страниц ,
+ name-pl = страниц ,
+ Name-sg-ab = С. ,
+ name-sg-ab = с. ,
+ Name-pl-ab = Сс. ,
+ name-pl-ab = сс. ,
+ case = d ,
+ Name-sg = Странице ,
+ name-sg = странице ,
+ Name-pl = Страницам ,
+ name-pl = страницам ,
+ Name-sg-ab = С. ,
+ name-sg-ab = с. ,
+ Name-pl-ab = Сс. ,
+ name-pl-ab = сс. ,
+ case = i ,
+ Name-sg = Страницей ,
+ name-sg = страницей ,
+ Name-pl = Страницами ,
+ name-pl = страницами ,
+ Name-sg-ab = С. ,
+ name-sg-ab = с. ,
+ Name-pl-ab = Сс. ,
+ name-pl-ab = сс. ,
+ case = p ,
+ Name-sg = Странице ,
+ name-sg = странице ,
+ Name-pl = Страницах ,
+ name-pl = страницах ,
+ Name-sg-ab = С. ,
+ name-sg-ab = с. ,
+ Name-pl-ab = Сс. ,
+ name-pl-ab = сс. ,
+ rangesep = {\textendash} ,
+ rangetopair = false ,
+ +refbounds-rb = {,,,} ,
+
+type = line ,
+ gender = f ,
+ case = n ,
+ Name-sg = Строка ,
+ name-sg = строка ,
+ Name-pl = Строки ,
+ name-pl = строки ,
+ case = a ,
+ Name-sg = Строку ,
+ name-sg = строку ,
+ Name-pl = Строки ,
+ name-pl = строки ,
+ case = g ,
+ Name-sg = Строки ,
+ name-sg = строки ,
+ Name-pl = Строк ,
+ name-pl = строк ,
+ case = d ,
+ Name-sg = Строке ,
+ name-sg = строке ,
+ Name-pl = Строкам ,
+ name-pl = строкам ,
+ case = i ,
+ Name-sg = Строкой ,
+ name-sg = строкой ,
+ Name-pl = Строками ,
+ name-pl = строками ,
+ case = p ,
+ Name-sg = Строке ,
+ name-sg = строке ,
+ Name-pl = Строках ,
+ name-pl = строках ,
+
+type = figure ,
+ gender = m ,
+ case = n ,
+ Name-sg = Рисунок ,
+ name-sg = рисунок ,
+ Name-pl = Рисунки ,
+ name-pl = рисунки ,
+ Name-sg-ab = Рис. ,
+ name-sg-ab = рис. ,
+ Name-pl-ab = Рис. ,
+ name-pl-ab = рис. ,
+ case = a ,
+ Name-sg = Рисунок ,
+ name-sg = рисунок ,
+ Name-pl = Рисунки ,
+ name-pl = рисунки ,
+ Name-sg-ab = Рис. ,
+ name-sg-ab = рис. ,
+ Name-pl-ab = Рис. ,
+ name-pl-ab = рис. ,
+ case = g ,
+ Name-sg = Рисунка ,
+ name-sg = рисунка ,
+ Name-pl = Рисунков ,
+ name-pl = рисунков ,
+ Name-sg-ab = Рис. ,
+ name-sg-ab = рис. ,
+ Name-pl-ab = Рис. ,
+ name-pl-ab = рис. ,
+ case = d ,
+ Name-sg = Рисунку ,
+ name-sg = рисунку ,
+ Name-pl = Рисункам ,
+ name-pl = рисункам ,
+ Name-sg-ab = Рис. ,
+ name-sg-ab = рис. ,
+ Name-pl-ab = Рис. ,
+ name-pl-ab = рис. ,
+ case = i ,
+ Name-sg = Рисунком ,
+ name-sg = рисунком ,
+ Name-pl = Рисунками ,
+ name-pl = рисунками ,
+ Name-sg-ab = Рис. ,
+ name-sg-ab = рис. ,
+ Name-pl-ab = Рис. ,
+ name-pl-ab = рис. ,
+ case = p ,
+ Name-sg = Рисунке ,
+ name-sg = рисунке ,
+ Name-pl = Рисунках ,
+ name-pl = рисунках ,
+ Name-sg-ab = Рис. ,
+ name-sg-ab = рис. ,
+ Name-pl-ab = Рис. ,
+ name-pl-ab = рис. ,
+
+type = table ,
+ gender = f ,
+ case = n ,
+ Name-sg = Таблица ,
+ name-sg = таблица ,
+ Name-pl = Таблицы ,
+ name-pl = таблицы ,
+ Name-sg-ab = Табл. ,
+ name-sg-ab = табл. ,
+ Name-pl-ab = Табл. ,
+ name-pl-ab = табл. ,
+ case = a ,
+ Name-sg = Таблицу ,
+ name-sg = таблицу ,
+ Name-pl = Таблицы ,
+ name-pl = таблицы ,
+ Name-sg-ab = Табл. ,
+ name-sg-ab = табл. ,
+ Name-pl-ab = Табл. ,
+ name-pl-ab = табл. ,
+ case = g ,
+ Name-sg = Таблицы ,
+ name-sg = таблицы ,
+ Name-pl = Таблиц ,
+ name-pl = таблиц ,
+ Name-sg-ab = Табл. ,
+ name-sg-ab = табл. ,
+ Name-pl-ab = Табл. ,
+ name-pl-ab = табл. ,
+ case = d ,
+ Name-sg = Таблице ,
+ name-sg = таблице ,
+ Name-pl = Таблицам ,
+ name-pl = таблицам ,
+ Name-sg-ab = Табл. ,
+ name-sg-ab = табл. ,
+ Name-pl-ab = Табл. ,
+ name-pl-ab = табл. ,
+ case = i ,
+ Name-sg = Таблицей ,
+ name-sg = таблицей ,
+ Name-pl = Таблицами ,
+ name-pl = таблицами ,
+ Name-sg-ab = Табл. ,
+ name-sg-ab = табл. ,
+ Name-pl-ab = Табл. ,
+ name-pl-ab = табл. ,
+ case = p ,
+ Name-sg = Таблице ,
+ name-sg = таблице ,
+ Name-pl = Таблицах ,
+ name-pl = таблицах ,
+ Name-sg-ab = Табл. ,
+ name-sg-ab = табл. ,
+ Name-pl-ab = Табл. ,
+ name-pl-ab = табл. ,
+
+type = item ,
+ gender = m ,
+ case = n ,
+ Name-sg = Пункт ,
+ name-sg = пункт ,
+ Name-pl = Пункты ,
+ name-pl = пункты ,
+ Name-sg-ab = П. ,
+ name-sg-ab = п. ,
+ Name-pl-ab = Пп. ,
+ name-pl-ab = пп. ,
+ case = a ,
+ Name-sg = Пункт ,
+ name-sg = пункт ,
+ Name-pl = Пункты ,
+ name-pl = пункты ,
+ Name-sg-ab = П. ,
+ name-sg-ab = п. ,
+ Name-pl-ab = Пп. ,
+ name-pl-ab = пп. ,
+ case = g ,
+ Name-sg = Пункта ,
+ name-sg = пункта ,
+ Name-pl = Пунктов ,
+ name-pl = пунктов ,
+ Name-sg-ab = П. ,
+ name-sg-ab = п. ,
+ Name-pl-ab = Пп. ,
+ name-pl-ab = пп. ,
+ case = d ,
+ Name-sg = Пункту ,
+ name-sg = пункту ,
+ Name-pl = Пунктам ,
+ name-pl = пунктам ,
+ Name-sg-ab = П. ,
+ name-sg-ab = п. ,
+ Name-pl-ab = Пп. ,
+ name-pl-ab = пп. ,
+ case = i ,
+ Name-sg = Пунктом ,
+ name-sg = пунктом ,
+ Name-pl = Пунктами ,
+ name-pl = пунктами ,
+ Name-sg-ab = П. ,
+ name-sg-ab = п. ,
+ Name-pl-ab = Пп. ,
+ name-pl-ab = пп. ,
+ case = p ,
+ Name-sg = Пункте ,
+ name-sg = пункте ,
+ Name-pl = Пунктах ,
+ name-pl = пунктах ,
+ Name-sg-ab = П. ,
+ name-sg-ab = п. ,
+ Name-pl-ab = Пп. ,
+ name-pl-ab = пп. ,
+
+type = footnote ,
+ gender = f ,
+ case = n ,
+ Name-sg = Сноска ,
+ name-sg = сноска ,
+ Name-pl = Сноски ,
+ name-pl = сноски ,
+ case = a ,
+ Name-sg = Сноску ,
+ name-sg = сноску ,
+ Name-pl = Сноски ,
+ name-pl = сноски ,
+ case = g ,
+ Name-sg = Сноски ,
+ name-sg = сноски ,
+ Name-pl = Сносок ,
+ name-pl = сносок ,
+ case = d ,
+ Name-sg = Сноске ,
+ name-sg = сноске ,
+ Name-pl = Сноскам ,
+ name-pl = сноскам ,
+ case = i ,
+ Name-sg = Сноской ,
+ name-sg = сноской ,
+ Name-pl = Сносками ,
+ name-pl = сносками ,
+ case = p ,
+ Name-sg = Сноске ,
+ name-sg = сноске ,
+ Name-pl = Сносках ,
+ name-pl = сносках ,
+
+type = endnote ,
+ gender = f ,
+ case = n ,
+ Name-sg = Сноска ,
+ name-sg = сноска ,
+ Name-pl = Сноски ,
+ name-pl = сноски ,
+ case = a ,
+ Name-sg = Сноску ,
+ name-sg = сноску ,
+ Name-pl = Сноски ,
+ name-pl = сноски ,
+ case = g ,
+ Name-sg = Сноски ,
+ name-sg = сноски ,
+ Name-pl = Сносок ,
+ name-pl = сносок ,
+ case = d ,
+ Name-sg = Сноске ,
+ name-sg = сноске ,
+ Name-pl = Сноскам ,
+ name-pl = сноскам ,
+ case = i ,
+ Name-sg = Сноской ,
+ name-sg = сноской ,
+ Name-pl = Сносками ,
+ name-pl = сносками ,
+ case = p ,
+ Name-sg = Сноске ,
+ name-sg = сноске ,
+ Name-pl = Сносках ,
+ name-pl = сносках ,
+
+type = note ,
+ gender = f ,
+ case = n ,
+ Name-sg = Заметка ,
+ name-sg = заметка ,
+ Name-pl = Заметки ,
+ name-pl = заметки ,
+ case = a ,
+ Name-sg = Заметку ,
+ name-sg = заметку ,
+ Name-pl = Заметки ,
+ name-pl = заметки ,
+ case = g ,
+ Name-sg = Заметки ,
+ name-sg = заметки ,
+ Name-pl = Заметок ,
+ name-pl = заметок ,
+ case = d ,
+ Name-sg = Заметке ,
+ name-sg = заметке ,
+ Name-pl = Заметкам ,
+ name-pl = заметкам ,
+ case = i ,
+ Name-sg = Заметкой ,
+ name-sg = заметкой ,
+ Name-pl = Заметками ,
+ name-pl = заметками ,
+ case = p ,
+ Name-sg = Заметке ,
+ name-sg = заметке ,
+ Name-pl = Заметках ,
+ name-pl = заметках ,
+
+type = equation ,
+ gender = n ,
+ case = n ,
+ Name-sg = Уравнение ,
+ name-sg = уравнение ,
+ Name-pl = Уравнения ,
+ name-pl = уравнения ,
+ Name-sg-ab = Ур. ,
+ name-sg-ab = ур. ,
+ Name-pl-ab = Ур. ,
+ name-pl-ab = ур. ,
+ case = a ,
+ Name-sg = Уравнение ,
+ name-sg = уравнение ,
+ Name-pl = Уравнения ,
+ name-pl = уравнения ,
+ Name-sg-ab = Ур. ,
+ name-sg-ab = ур. ,
+ Name-pl-ab = Ур. ,
+ name-pl-ab = ур. ,
+ case = g ,
+ Name-sg = Уравнения ,
+ name-sg = уравнения ,
+ Name-pl = Уравнений ,
+ name-pl = уравнений ,
+ Name-sg-ab = Ур. ,
+ name-sg-ab = ур. ,
+ Name-pl-ab = Ур. ,
+ name-pl-ab = ур. ,
+ case = d ,
+ Name-sg = Уравнению ,
+ name-sg = уравнению ,
+ Name-pl = Уравнениям ,
+ name-pl = уравнениям ,
+ Name-sg-ab = Ур. ,
+ name-sg-ab = ур. ,
+ Name-pl-ab = Ур. ,
+ name-pl-ab = ур. ,
+ case = i ,
+ Name-sg = Уравнением ,
+ name-sg = уравнением ,
+ Name-pl = Уравнениями ,
+ name-pl = уравнениями ,
+ Name-sg-ab = Ур. ,
+ name-sg-ab = ур. ,
+ Name-pl-ab = Ур. ,
+ name-pl-ab = ур. ,
+ case = p ,
+ Name-sg = Уравнении ,
+ name-sg = уравнении ,
+ Name-pl = Уравнениях ,
+ name-pl = уравнениях ,
+ Name-sg-ab = Ур. ,
+ name-sg-ab = ур. ,
+ Name-pl-ab = Ур. ,
+ name-pl-ab = ур. ,
+ +refbounds-rb = {с\nobreakspace(,,,)} ,
+ refbounds-first-sg = {,(,),} ,
+ refbounds = {(,,,)} ,
+
+type = theorem ,
+ gender = f ,
+ case = n ,
+ Name-sg = Теорема ,
+ name-sg = теорема ,
+ Name-pl = Теоремы ,
+ name-pl = теоремы ,
+ Name-sg-ab = Теор. ,
+ name-sg-ab = теор. ,
+ Name-pl-ab = Теор. ,
+ name-pl-ab = теор. ,
+ case = a ,
+ Name-sg = Теорему ,
+ name-sg = теорему ,
+ Name-pl = Теоремы ,
+ name-pl = теоремы ,
+ Name-sg-ab = Теор. ,
+ name-sg-ab = теор. ,
+ Name-pl-ab = Теор. ,
+ name-pl-ab = теор. ,
+ case = g ,
+ Name-sg = Теоремы ,
+ name-sg = теоремы ,
+ Name-pl = Теорем ,
+ name-pl = теорем ,
+ Name-sg-ab = Теор. ,
+ name-sg-ab = теор. ,
+ Name-pl-ab = Теор. ,
+ name-pl-ab = теор. ,
+ case = d ,
+ Name-sg = Теореме ,
+ name-sg = теореме ,
+ Name-pl = Теоремам ,
+ name-pl = теоремам ,
+ Name-sg-ab = Теор. ,
+ name-sg-ab = теор. ,
+ Name-pl-ab = Теор. ,
+ name-pl-ab = теор. ,
+ case = i ,
+ Name-sg = Теоремой ,
+ name-sg = теоремой ,
+ Name-pl = Теоремами ,
+ name-pl = теоремами ,
+ Name-sg-ab = Теор. ,
+ name-sg-ab = теор. ,
+ Name-pl-ab = Теор. ,
+ name-pl-ab = теор. ,
+ case = p ,
+ Name-sg = Теореме ,
+ name-sg = теореме ,
+ Name-pl = Теоремах ,
+ name-pl = теоремах ,
+ Name-sg-ab = Теор. ,
+ name-sg-ab = теор. ,
+ Name-pl-ab = Теор. ,
+ name-pl-ab = теор. ,
+
+type = lemma ,
+ gender = f ,
+ case = n ,
+ Name-sg = Лемма ,
+ name-sg = лемма ,
+ Name-pl = Леммы ,
+ name-pl = леммы ,
+ case = a ,
+ Name-sg = Лемму ,
+ name-sg = лемму ,
+ Name-pl = Леммы ,
+ name-pl = леммы ,
+ case = g ,
+ Name-sg = Леммы ,
+ name-sg = леммы ,
+ Name-pl = Лемм ,
+ name-pl = лемм ,
+ case = d ,
+ Name-sg = Лемме ,
+ name-sg = лемме ,
+ Name-pl = Леммам ,
+ name-pl = леммам ,
+ case = i ,
+ Name-sg = Леммой ,
+ name-sg = леммой ,
+ Name-pl = Леммами ,
+ name-pl = леммами ,
+ case = p ,
+ Name-sg = Лемме ,
+ name-sg = лемме ,
+ Name-pl = Леммах ,
+ name-pl = леммах ,
+
+type = corollary ,
+ gender = m ,
+ case = n ,
+ Name-sg = Вывод ,
+ name-sg = вывод ,
+ Name-pl = Выводы ,
+ name-pl = выводы ,
+ case = a ,
+ Name-sg = Вывод ,
+ name-sg = вывод ,
+ Name-pl = Выводы ,
+ name-pl = выводы ,
+ case = g ,
+ Name-sg = Вывода ,
+ name-sg = вывода ,
+ Name-pl = Выводов ,
+ name-pl = выводов ,
+ case = d ,
+ Name-sg = Выводу ,
+ name-sg = выводу ,
+ Name-pl = Выводам ,
+ name-pl = выводам ,
+ case = i ,
+ Name-sg = Выводом ,
+ name-sg = выводом ,
+ Name-pl = Выводами ,
+ name-pl = выводами ,
+ case = p ,
+ Name-sg = Выводе ,
+ name-sg = выводе ,
+ Name-pl = Выводах ,
+ name-pl = выводах ,
+
+type = proposition ,
+ gender = n ,
+ case = n ,
+ Name-sg = Предложение ,
+ name-sg = предложение ,
+ Name-pl = Предложения ,
+ name-pl = предложения ,
+ Name-sg-ab = Предл. ,
+ name-sg-ab = предл. ,
+ Name-pl-ab = Предл. ,
+ name-pl-ab = предл. ,
+ case = a ,
+ Name-sg = Предложение ,
+ name-sg = предложение ,
+ Name-pl = Предложения ,
+ name-pl = предложения ,
+ Name-sg-ab = Предл. ,
+ name-sg-ab = предл. ,
+ Name-pl-ab = Предл. ,
+ name-pl-ab = предл. ,
+ case = g ,
+ Name-sg = Предложения ,
+ name-sg = предложения ,
+ Name-pl = Предложений ,
+ name-pl = предложений ,
+ Name-sg-ab = Предл. ,
+ name-sg-ab = предл. ,
+ Name-pl-ab = Предл. ,
+ name-pl-ab = предл. ,
+ case = d ,
+ Name-sg = Предложению ,
+ name-sg = предложению ,
+ Name-pl = Предложениям ,
+ name-pl = предложениям ,
+ Name-sg-ab = Предл. ,
+ name-sg-ab = предл. ,
+ Name-pl-ab = Предл. ,
+ name-pl-ab = предл. ,
+ case = i ,
+ Name-sg = Предложением ,
+ name-sg = предложением ,
+ Name-pl = Предложениями ,
+ name-pl = предложениями ,
+ Name-sg-ab = Предл. ,
+ name-sg-ab = предл. ,
+ Name-pl-ab = Предл. ,
+ name-pl-ab = предл. ,
+ case = p ,
+ Name-sg = Предложении ,
+ name-sg = предложении ,
+ Name-pl = Предложениях ,
+ name-pl = предложениях ,
+ Name-sg-ab = Предл. ,
+ name-sg-ab = предл. ,
+ Name-pl-ab = Предл. ,
+ name-pl-ab = предл. ,
+
+type = definition ,
+ gender = n ,
+ case = n ,
+ Name-sg = Определение ,
+ name-sg = определение ,
+ Name-pl = Определения ,
+ name-pl = определения ,
+ Name-sg-ab = Опр. ,
+ name-sg-ab = опр. ,
+ Name-pl-ab = Опр. ,
+ name-pl-ab = опр. ,
+ case = a ,
+ Name-sg = Определение ,
+ name-sg = определение ,
+ Name-pl = Определения ,
+ name-pl = определения ,
+ Name-sg-ab = Опр. ,
+ name-sg-ab = опр. ,
+ Name-pl-ab = Опр. ,
+ name-pl-ab = опр. ,
+ case = g ,
+ Name-sg = Определения ,
+ name-sg = определения ,
+ Name-pl = Определений ,
+ name-pl = определений ,
+ Name-sg-ab = Опр. ,
+ name-sg-ab = опр. ,
+ Name-pl-ab = Опр. ,
+ name-pl-ab = опр. ,
+ case = d ,
+ Name-sg = Определению ,
+ name-sg = определению ,
+ Name-pl = Определениям ,
+ name-pl = определениям ,
+ Name-sg-ab = Опр. ,
+ name-sg-ab = опр. ,
+ Name-pl-ab = Опр. ,
+ name-pl-ab = опр. ,
+ case = i ,
+ Name-sg = Определением ,
+ name-sg = определением ,
+ Name-pl = Определениями ,
+ name-pl = определениями ,
+ Name-sg-ab = Опр. ,
+ name-sg-ab = опр. ,
+ Name-pl-ab = Опр. ,
+ name-pl-ab = опр. ,
+ case = p ,
+ Name-sg = Определении ,
+ name-sg = определении ,
+ Name-pl = Определениях ,
+ name-pl = определениях ,
+ Name-sg-ab = Опр. ,
+ name-sg-ab = опр. ,
+ Name-pl-ab = Опр. ,
+ name-pl-ab = опр. ,
+
+type = proof ,
+ gender = n ,
+ case = n ,
+ Name-sg = Доказательство ,
+ name-sg = доказательство ,
+ Name-pl = Доказательства ,
+ name-pl = доказательства ,
+ case = a ,
+ Name-sg = Доказательство ,
+ name-sg = доказательство ,
+ Name-pl = Доказательства ,
+ name-pl = доказательства ,
+ case = g ,
+ Name-sg = Доказательства ,
+ name-sg = доказательства ,
+ Name-pl = Доказательств ,
+ name-pl = доказательств ,
+ case = d ,
+ Name-sg = Доказательству ,
+ name-sg = доказательству ,
+ Name-pl = Доказательствам ,
+ name-pl = доказательствам ,
+ case = i ,
+ Name-sg = Доказательством ,
+ name-sg = доказательством ,
+ Name-pl = Доказательствами ,
+ name-pl = доказательствами ,
+ case = p ,
+ Name-sg = Доказательстве ,
+ name-sg = доказательстве ,
+ Name-pl = Доказательствах ,
+ name-pl = доказательствах ,
+
+type = result ,
+ gender = m ,
+ case = n ,
+ Name-sg = Результат ,
+ name-sg = результат ,
+ Name-pl = Результаты ,
+ name-pl = результаты ,
+ case = a ,
+ Name-sg = Результат ,
+ name-sg = результат ,
+ Name-pl = Результаты ,
+ name-pl = результаты ,
+ case = g ,
+ Name-sg = Результата ,
+ name-sg = результата ,
+ Name-pl = Результатов ,
+ name-pl = результатов ,
+ case = d ,
+ Name-sg = Результату ,
+ name-sg = результату ,
+ Name-pl = Результатам ,
+ name-pl = результатам ,
+ case = i ,
+ Name-sg = Результатом ,
+ name-sg = результатом ,
+ Name-pl = Результатами ,
+ name-pl = результатами ,
+ case = p ,
+ Name-sg = Результате ,
+ name-sg = результате ,
+ Name-pl = Результатах ,
+ name-pl = результатах ,
+
+type = remark ,
+ gender = n ,
+ case = n ,
+ Name-sg = Примечание ,
+ name-sg = примечание ,
+ Name-pl = Примечания ,
+ name-pl = примечания ,
+ Name-sg-ab = Прим. ,
+ name-sg-ab = прим. ,
+ Name-pl-ab = Прим. ,
+ name-pl-ab = прим. ,
+ case = a ,
+ Name-sg = Примечание ,
+ name-sg = примечание ,
+ Name-pl = Примечания ,
+ name-pl = примечания ,
+ Name-sg-ab = Прим. ,
+ name-sg-ab = прим. ,
+ Name-pl-ab = Прим. ,
+ name-pl-ab = прим. ,
+ case = g ,
+ Name-sg = Примечания ,
+ name-sg = примечания ,
+ Name-pl = Примечаний ,
+ name-pl = примечаний ,
+ Name-sg-ab = Прим. ,
+ name-sg-ab = прим. ,
+ Name-pl-ab = Прим. ,
+ name-pl-ab = прим. ,
+ case = d ,
+ Name-sg = Примечанию ,
+ name-sg = примечанию ,
+ Name-pl = Примечаниям ,
+ name-pl = примечаниям ,
+ Name-sg-ab = Прим. ,
+ name-sg-ab = прим. ,
+ Name-pl-ab = Прим. ,
+ name-pl-ab = прим. ,
+ case = i ,
+ Name-sg = Примечанием ,
+ name-sg = примечанием ,
+ Name-pl = Примечаниями ,
+ name-pl = примечаниями ,
+ Name-sg-ab = Прим. ,
+ name-sg-ab = прим. ,
+ Name-pl-ab = Прим. ,
+ name-pl-ab = прим. ,
+ case = p ,
+ Name-sg = Примечании ,
+ name-sg = примечании ,
+ Name-pl = Примечаниях ,
+ name-pl = примечаниях ,
+ Name-sg-ab = Прим. ,
+ name-sg-ab = прим. ,
+ Name-pl-ab = Прим. ,
+ name-pl-ab = прим. ,
+
+type = example ,
+ gender = m ,
+ case = n ,
+ Name-sg = Пример ,
+ name-sg = пример ,
+ Name-pl = Примеры ,
+ name-pl = примеры ,
+ case = a ,
+ Name-sg = Пример ,
+ name-sg = пример ,
+ Name-pl = Примеры ,
+ name-pl = примеры ,
+ case = g ,
+ Name-sg = Примера ,
+ name-sg = примера ,
+ Name-pl = Примеров ,
+ name-pl = примеров ,
+ case = d ,
+ Name-sg = Примеру ,
+ name-sg = примеру ,
+ Name-pl = Примерам ,
+ name-pl = примерам ,
+ case = i ,
+ Name-sg = Примером ,
+ name-sg = примером ,
+ Name-pl = Примерами ,
+ name-pl = примерами ,
+ case = p ,
+ Name-sg = Примере ,
+ name-sg = примере ,
+ Name-pl = Примерах ,
+ name-pl = примерах ,
+
+type = algorithm ,
+ gender = m ,
+ case = n ,
+ Name-sg = Алгоритм ,
+ name-sg = алгоритм ,
+ Name-pl = Алгоритмы ,
+ name-pl = алгоритмы ,
+ case = a ,
+ Name-sg = Алгоритм ,
+ name-sg = алгоритм ,
+ Name-pl = Алгоритмы ,
+ name-pl = алгоритмы ,
+ case = g ,
+ Name-sg = Алгоритма ,
+ name-sg = алгоритма ,
+ Name-pl = Алгоритмов ,
+ name-pl = алгоритмов ,
+ case = d ,
+ Name-sg = Алгоритму ,
+ name-sg = алгоритму ,
+ Name-pl = Алгоритмам ,
+ name-pl = алгоритмам ,
+ case = i ,
+ Name-sg = Алгоритмом ,
+ name-sg = алгоритмом ,
+ Name-pl = Алгоритмами ,
+ name-pl = алгоритмами ,
+ case = p ,
+ Name-sg = Алгоритме ,
+ name-sg = алгоритме ,
+ Name-pl = Алгоритмах ,
+ name-pl = алгоритмах ,
+
+type = listing ,
+ gender = m ,
+ case = n ,
+ Name-sg = Листинг ,
+ name-sg = листинг ,
+ Name-pl = Листинги ,
+ name-pl = листинги ,
+ case = a ,
+ Name-sg = Листинг ,
+ name-sg = листинг ,
+ Name-pl = Листинги ,
+ name-pl = листинги ,
+ case = g ,
+ Name-sg = Листинга ,
+ name-sg = листинга ,
+ Name-pl = Листингов ,
+ name-pl = листингов ,
+ case = d ,
+ Name-sg = Листингу ,
+ name-sg = листингу ,
+ Name-pl = Листингам ,
+ name-pl = листингам ,
+ case = i ,
+ Name-sg = Листингом ,
+ name-sg = листинглм ,
+ Name-pl = Листингами ,
+ name-pl = листингами ,
+ case = p ,
+ Name-sg = Листинге ,
+ name-sg = листинге ,
+ Name-pl = Листингах ,
+ name-pl = листингах ,
+
+type = exercise ,
+ gender = n ,
+ case = n ,
+ Name-sg = Упражнение ,
+ name-sg = упражнение ,
+ Name-pl = Упражнения ,
+ name-pl = упражнения ,
+ Name-sg-ab = Упр. ,
+ name-sg-ab = упр. ,
+ Name-pl-ab = Упр. ,
+ name-pl-ab = упр. ,
+ case = a ,
+ Name-sg = Упражнение ,
+ name-sg = упражнение ,
+ Name-pl = Упражнения ,
+ name-pl = упражнения ,
+ Name-sg-ab = Упр. ,
+ name-sg-ab = упр. ,
+ Name-pl-ab = Упр. ,
+ name-pl-ab = упр. ,
+ case = g ,
+ Name-sg = Упражнения ,
+ name-sg = упражнения ,
+ Name-pl = Упражнений ,
+ name-pl = упражнений ,
+ Name-sg-ab = Упр. ,
+ name-sg-ab = упр. ,
+ Name-pl-ab = Упр. ,
+ name-pl-ab = упр. ,
+ case = d ,
+ Name-sg = Упражнению ,
+ name-sg = упражнению ,
+ Name-pl = Упражнениям ,
+ name-pl = упражнениям ,
+ Name-sg-ab = Упр. ,
+ name-sg-ab = упр. ,
+ Name-pl-ab = Упр. ,
+ name-pl-ab = упр. ,
+ case = i ,
+ Name-sg = Упражнением ,
+ name-sg = упражнением ,
+ Name-pl = Упражнениями ,
+ name-pl = упражнениями ,
+ Name-sg-ab = Упр. ,
+ name-sg-ab = упр. ,
+ Name-pl-ab = Упр. ,
+ name-pl-ab = упр. ,
+ case = p ,
+ Name-sg = Упражнении ,
+ name-sg = упражнении ,
+ Name-pl = Упражнениях ,
+ name-pl = упражнениях ,
+ Name-sg-ab = Упр. ,
+ name-sg-ab = упр. ,
+ Name-pl-ab = Упр. ,
+ name-pl-ab = упр. ,
+
+type = solution ,
+ gender = n ,
+ case = n ,
+ Name-sg = Решение ,
+ name-sg = решение ,
+ Name-pl = Решения ,
+ name-pl = решения ,
+ case = a ,
+ Name-sg = Решение ,
+ name-sg = решение ,
+ Name-pl = Решения ,
+ name-pl = решения ,
+ case = g ,
+ Name-sg = Решения ,
+ name-sg = решения ,
+ Name-pl = Решений ,
+ name-pl = решений ,
+ case = d ,
+ Name-sg = Решению ,
+ name-sg = решению ,
+ Name-pl = Решениям ,
+ name-pl = решениям ,
+ case = i ,
+ Name-sg = Решением ,
+ name-sg = решением ,
+ Name-pl = Решениями ,
+ name-pl = решениями ,
+ case = p ,
+ Name-sg = Решении ,
+ name-sg = решении ,
+ Name-pl = Решениях ,
+ name-pl = решениях ,
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</lang-russian>
+% \end{macrocode}
+%
+%
% \PrintIndex
%
%
diff --git a/macros/latex/contrib/zref-clever/zref-clever.ins b/macros/latex/contrib/zref-clever/zref-clever.ins
index 17e4599190..0aefb6ce73 100644
--- a/macros/latex/contrib/zref-clever/zref-clever.ins
+++ b/macros/latex/contrib/zref-clever/zref-clever.ins
@@ -95,5 +95,6 @@ for those people who are interested.
\generate{\file{zref-clever-spanish.lang}{\from{zref-clever.dtx}{lang-spanish}}}
\generate{\file{zref-clever-dutch.lang}{\from{zref-clever.dtx}{lang-dutch}}}
\generate{\file{zref-clever-italian.lang}{\from{zref-clever.dtx}{lang-italian}}}
+\generate{\file{zref-clever-russian.lang}{\from{zref-clever.dtx}{lang-russian}}}
\endbatchfile